From 275c72b8465961c29b9318db98c248edce9b3d7a Mon Sep 17 00:00:00 2001 From: Shameek Agarwal Date: Mon, 17 Jul 2023 22:50:32 +0530 Subject: [PATCH] add resume --- .browserslistrc | 5 + .commitlintrc.json | 8 + .editorconfig | 19 + .gitattributes | 16 + .github/workflows/pages-deploy.yml | 71 + .gitignore | 21 + .gitmodules | 3 + .husky/commit-msg | 4 + .nojekyll | 0 .prettierrc | 3 + .stylelintrc.json | 23 + .versionrc.json | 20 + CHANGELOG.md | 245 ++ Gemfile | 28 + LICENSE | 21 + README.md | 7 + _config.yml | 212 ++ _data/authors.yml | 17 + _data/contact.yml | 33 + _data/locales/ar.yml | 91 + _data/locales/bg-BG.yml | 81 + _data/locales/cs-CZ.yml | 89 + _data/locales/de-DE.yml | 80 + _data/locales/el-GR.yml | 91 + _data/locales/en.yml | 91 + _data/locales/es-ES.yml | 77 + _data/locales/fi-FI.yml | 90 + _data/locales/fr-FR.yml | 77 + _data/locales/hu-HU.yml | 79 + _data/locales/id-ID.yml | 77 + _data/locales/it-IT.yml | 90 + _data/locales/ko-KR.yml | 84 + _data/locales/my-MM.yml | 77 + _data/locales/pt-BR.yml | 77 + _data/locales/ru-RU.yml | 77 + _data/locales/sl-SI.yml | 91 + _data/locales/sv-SE.yml | 91 + _data/locales/th.yml | 91 + _data/locales/tr-TR.yml | 77 + _data/locales/uk-UA.yml | 77 + _data/locales/vi-VN.yml | 76 + _data/locales/zh-CN.yml | 83 + _data/locales/zh-TW.yml | 83 + _data/origin/basic.yml | 48 + _data/origin/cors.yml | 59 + _data/share.yml | 25 + _includes/comments.html | 5 + _includes/comments/disqus.html | 49 + _includes/comments/giscus.html | 64 + _includes/comments/utterances.html | 51 + _includes/datetime.html | 19 + _includes/embed/twitch.html | 4 + _includes/embed/youtube.html | 6 + _includes/favicons.html | 17 + _includes/footer.html | 34 + _includes/google-analytics.html | 14 + _includes/head.html | 95 + _includes/js-selector.html | 106 + _includes/jsdelivr-combine.html | 26 + _includes/lang.html | 8 + _includes/language-alias.html | 70 + _includes/mermaid.html | 58 + _includes/metadata-hook.html | 1 + _includes/mode-toggle.html | 143 + _includes/no-linenos.html | 10 + _includes/origin-type.html | 13 + _includes/post-nav.html | 37 + _includes/post-paginator.html | 89 + _includes/post-sharing.html | 35 + _includes/read-time.html | 37 + _includes/refactor-content.html | 286 ++ _includes/related-posts.html | 104 + _includes/search-loader.html | 45 + _includes/search-results.html | 10 + _includes/sidebar.html | 104 + _includes/toc.html | 13 + _includes/topbar.html | 70 + _includes/trending-tags.html | 46 + _includes/update-list.html | 39 + _javascript/_copyright | 3 + _javascript/categories.js | 7 + _javascript/commons.js | 5 + _javascript/home.js | 8 + _javascript/misc.js | 7 + _javascript/modules/components/back-to-top.js | 20 + .../modules/components/category-collapse.js | 36 + _javascript/modules/components/clipboard.js | 123 + .../modules/components/img-lazyload.js | 27 + _javascript/modules/components/img-popup.js | 22 + .../modules/components/locale-datetime.js | 51 + .../modules/components/mode-watcher.js | 21 + .../modules/components/search-display.js | 122 + _javascript/modules/components/sidebar.js | 25 + _javascript/modules/components/toc.js | 13 + .../modules/components/tooltip-loader.js | 12 + _javascript/modules/layouts.js | 3 + _javascript/modules/layouts/basic.js | 7 + _javascript/modules/layouts/sidebar.js | 7 + _javascript/modules/layouts/topbar.js | 5 + _javascript/modules/plugins.js | 6 + _javascript/page.js | 9 + _javascript/post.js | 17 + _layouts/archives.html | 36 + _layouts/categories.html | 138 + _layouts/category.html | 24 + _layouts/compress.html | 10 + _layouts/default.html | 76 + _layouts/home.html | 110 + _layouts/page.html | 68 + _layouts/post.html | 133 + _layouts/tag.html | 23 + _layouts/tags.html | 22 + _plugins/posts-lastmod-hook.rb | 14 + _posts/2023-07-18-spring.md | 2052 +++++++++++++ _posts/2023-07-23-relational-databases.md | 565 ++++ _posts/2023-07-23-warehouse-and-snowflake.md | 826 +++++ _posts/2023-08-12-messaging-systems.md | 259 ++ _posts/2023-08-19-hadoop.md | 1020 +++++++ _posts/2023-09-24-docker-and-kubernetes.md | 1488 +++++++++ _posts/2023-11-18-spring-reactive.md | 1633 ++++++++++ _posts/2023-12-04-java.md | 2211 ++++++++++++++ _posts/2023-12-27-spark.md | 1216 ++++++++ _posts/2024-01-18-elasticsearch.md | 1367 +++++++++ _posts/2024-03-02-low-level-design.md | 1398 +++++++++ _posts/2024-03-09-high-level-design.md | 1622 ++++++++++ ...24-04-12-high-level-design-case-studies.md | 683 +++++ _sass/addon/commons.scss | 1576 ++++++++++ _sass/addon/module.scss | 173 ++ _sass/addon/syntax.scss | 270 ++ _sass/addon/variables.scss | 27 + _sass/colors/dark-syntax.scss | 91 + _sass/colors/dark-typography.scss | 151 + _sass/colors/light-syntax.scss | 83 + _sass/colors/light-typography.scss | 109 + _sass/jekyll-theme-chirpy.scss | 19 + _sass/layout/archives.scss | 144 + _sass/layout/categories.scss | 83 + _sass/layout/category-tag.scss | 77 + _sass/layout/home.scss | 219 ++ _sass/layout/post.scss | 417 +++ _sass/layout/tags.scss | 19 + _sass/variables-hook.scss | 3 + _tabs/projects.md | 5 + _tabs/resume.md | 11 + assets/404.html | 16 + ...tified Solutions Architect - Associate.pdf | Bin 0 -> 32668 bytes ...KA: Certified Kubernetes Administrator.pdf | Bin 0 -> 717269 bytes assets/Shameek-Agarwal-Resume.pdf | Bin 0 -> 83251 bytes assets/css/style.scss | 6 + assets/feed.xml | 61 + .../docker-and-kubernetes/docker-vs-vm.drawio | 1 + .../docker-vs-vm.drawio.png | Bin 0 -> 18331 bytes .../img/docker-and-kubernetes/networks.drawio | 1 + .../docker-and-kubernetes/networks.drawio.png | Bin 0 -> 11898 bytes .../docker-and-kubernetes/pod-creation.drawio | 1 + .../pod-creation.drawio.png | Bin 0 -> 31473 bytes .../replica-set-creation.drawio | 1 + .../replica-set-creation.drawio.png | Bin 0 -> 17757 bytes .../service-creation.drawio | 1 + .../service-creation.drawio.png | Bin 0 -> 35871 bytes assets/img/elasticsearch/data-table.png | Bin 0 -> 51870 bytes assets/img/elasticsearch/discover.drawio | 31 + assets/img/elasticsearch/discover.drawio.png | Bin 0 -> 103342 bytes assets/img/elasticsearch/filters.png | Bin 0 -> 29462 bytes assets/img/elasticsearch/heat-map.png | Bin 0 -> 57186 bytes assets/img/elasticsearch/interactivity.png | Bin 0 -> 36206 bytes assets/img/elasticsearch/line-chart.png | Bin 0 -> 141638 bytes assets/img/elasticsearch/metrics.png | Bin 0 -> 96504 bytes assets/img/elasticsearch/tag-clouds.png | Bin 0 -> 86820 bytes .../img/favicons/android-chrome-192x192.png | Bin 0 -> 19952 bytes .../img/favicons/android-chrome-512x512.png | Bin 0 -> 62557 bytes assets/img/favicons/apple-touch-icon.png | Bin 0 -> 13867 bytes assets/img/favicons/browserconfig.xml | 13 + assets/img/favicons/favicon-16x16.png | Bin 0 -> 1247 bytes assets/img/favicons/favicon-32x32.png | Bin 0 -> 2312 bytes assets/img/favicons/favicon.ico | Bin 0 -> 15086 bytes assets/img/favicons/mstile-150x150.png | Bin 0 -> 12172 bytes assets/img/favicons/site.webmanifest | 26 + assets/img/hadoop/hadoop1.x.drawio | 70 + assets/img/hadoop/hadoop1.x.drawio.png | Bin 0 -> 20599 bytes assets/img/hadoop/hadoop2.x.drawio | 70 + assets/img/hadoop/hadoop2.x.drawio.png | Bin 0 -> 43200 bytes assets/img/hadoop/hdfs.drawio | 86 + assets/img/hadoop/hdfs.drawio.png | Bin 0 -> 36623 bytes .../img/high-level-design/2-phase-locking.png | Bin 0 -> 38713 bytes .../anti-corruption-adapter-layer-pattern.png | Bin 0 -> 56992 bytes assets/img/high-level-design/b+-tree.png | Bin 0 -> 19052 bytes .../backends-for-frontends-pattern.png | Bin 0 -> 55464 bytes .../blue-green-deployment-pattern.png | Bin 0 -> 48963 bytes .../img/high-level-design/canary-testing.png | Bin 0 -> 37049 bytes .../cap-theorem-introduction.excalidraw | 1043 +++++++ .../cap-theorem-introduction.svg | 21 + .../choreography-pattern.png | Bin 0 -> 45909 bytes .../circuit-breaker-pattern.png | Bin 0 -> 50943 bytes .../consistent-hashing-disadvantage.png | Bin 0 -> 45471 bytes .../consistent-hashing-replication.png | Bin 0 -> 39604 bytes .../consistent-hashing-workaround.png | Bin 0 -> 54159 bytes .../high-level-design/consistent-hashing.png | Bin 0 -> 47627 bytes assets/img/high-level-design/cqrs.png | Bin 0 -> 79027 bytes .../degradation-point.excalidraw | 512 ++++ .../high-level-design/degradation-point.svg | 21 + .../high-level-design/event-sourcing+cqrs.png | Bin 0 -> 30842 bytes .../execution-orchestrator-pattern.png | Bin 0 -> 59972 bytes .../features-of-the-system.excalidraw | 2684 +++++++++++++++++ .../features-of-the-system.svg | 21 + assets/img/high-level-design/gslb.excalidraw | 1115 +++++++ assets/img/high-level-design/gslb.svg | 21 + .../hw-and-sw-lb-disadvantage.excalidraw | 449 +++ .../hw-and-sw-lb-disadvantage.svg | 21 + .../lambda-architecture.excalidraw | 965 ++++++ .../high-level-design/lambda-architecture.svg | 21 + .../load-balancer-vs-api-gateway.png | Bin 0 -> 67145 bytes .../load-balancing-microservices.excalidraw | 1242 ++++++++ .../load-balancing-microservices.png | Bin 0 -> 58710 bytes assets/img/high-level-design/merkle-tree.png | Bin 0 -> 45682 bytes .../multi-tier-constraint.excalidraw | 443 +++ .../multi-tier-constraint.svg | 21 + ...tile-distribution-response-time.excalidraw | 1194 ++++++++ .../percentile-distribution-response-time.svg | 21 + .../high-level-design/pipes-and-filters.png | Bin 0 -> 21401 bytes .../rolling-deployment-pattern.png | Bin 0 -> 25753 bytes assets/img/high-level-design/saga-pattern.png | Bin 0 -> 41077 bytes .../img/high-level-design/scatter-gather.png | Bin 0 -> 45928 bytes .../img/high-level-design/sidecar-pattern.png | Bin 0 -> 84218 bytes .../strangler-fig-pattern.png | Bin 0 -> 50529 bytes .../img/high-level-design/testing-pyramid.png | Bin 0 -> 22147 bytes .../transactional-outbox-pattern.png | Bin 0 -> 65617 bytes .../high-level-design/two-phase-commit.png | Bin 0 -> 81333 bytes assets/img/java/generics-typecasting.png | Bin 0 -> 115017 bytes assets/img/java/inheritance.drawio | 115 + assets/img/java/inheritance.drawio.png | Bin 0 -> 24212 bytes assets/img/java/io-bound-architecture.drawio | 64 + .../img/java/io-bound-architecture.drawio.png | Bin 0 -> 12251 bytes assets/img/java/java-main-output.png | Bin 0 -> 121516 bytes assets/img/java/multithreading.drawio | 1 + assets/img/java/multithreading.drawio.png | Bin 0 -> 9192 bytes assets/img/java/phases-and-goals.png | Bin 0 -> 67771 bytes assets/img/java/protected-caveat.png | Bin 0 -> 43379 bytes assets/img/low-level-design/activity.drawio | 59 + .../img/low-level-design/activity.drawio.png | Bin 0 -> 20198 bytes .../low-level-design/interpreter-ast.drawio | 112 + .../interpreter-ast.drawio.png | Bin 0 -> 26504 bytes assets/img/low-level-design/use-case.drawio | 79 + .../img/low-level-design/use-case.drawio.png | Bin 0 -> 26451 bytes .../dead-letter-exchange.png | Bin 0 -> 33493 bytes .../queue-processor-design.png | Bin 0 -> 36082 bytes .../messaging-systems/queue-router-design.png | Bin 0 -> 36103 bytes .../relational-databases/er-diagram-example | 1 + .../er-diagram-example.drawio.png | Bin 0 -> 33888 bytes .../img/spark/aqe-shuffle-partitions.drawio | 61 + .../spark/aqe-shuffle-partitions.drawio.png | Bin 0 -> 9593 bytes assets/img/spark/aqe-skew-joins.drawio | 58 + assets/img/spark/aqe-skew-joins.drawio.png | Bin 0 -> 8026 bytes .../img/spark/broadcast-join-working.drawio | 280 ++ .../spark/broadcast-join-working.drawio.png | Bin 0 -> 31191 bytes assets/img/spark/bucket-by-output.png | Bin 0 -> 79109 bytes assets/img/spark/execution-plan.jpg | Bin 0 -> 19139 bytes assets/img/spark/job-stages-tasks.drawio | 58 + assets/img/spark/job-stages-tasks.drawio.png | Bin 0 -> 16511 bytes assets/img/spark/list-databases.png | Bin 0 -> 14262 bytes assets/img/spark/partition-by-output.png | Bin 0 -> 10081 bytes assets/img/spark/repartition-output.png | Bin 0 -> 45193 bytes assets/img/spark/shuffle-join-working.drawio | 310 ++ .../img/spark/shuffle-join-working.drawio.png | Bin 0 -> 82283 bytes assets/img/spark/simple-output.png | Bin 0 -> 22836 bytes assets/img/spark/spark-architecture.drawio | 67 + .../img/spark/spark-architecture.drawio.png | Bin 0 -> 24600 bytes assets/img/spark/spark-ecosystem.drawio | 42 + assets/img/spark/spark-ecosystem.drawio.png | Bin 0 -> 22133 bytes assets/img/spark/spark-streaming-jobs.png | Bin 0 -> 102156 bytes assets/img/spark/spark-to-java-types.png | Bin 0 -> 70209 bytes assets/img/spark/streaming-input.png | Bin 0 -> 14663 bytes .../img/spark/streaming-output-complete.png | Bin 0 -> 12678 bytes assets/img/spark/streaming-output-update.png | Bin 0 -> 14231 bytes assets/img/spring-reactive/schedulers.drawio | 74 + .../img/spring-reactive/schedulers.drawio.png | Bin 0 -> 11523 bytes assets/img/spring/envers.png | Bin 0 -> 55185 bytes assets/img/spring/join-table-one-to-many.png | Bin 0 -> 53655 bytes assets/img/spring/joined.png | Bin 0 -> 106523 bytes .../img/spring/many-to-many-with-entity.png | Bin 0 -> 106091 bytes assets/img/spring/many-to-many.png | Bin 0 -> 53766 bytes assets/img/spring/mapped-superclass.png | Bin 0 -> 129123 bytes assets/img/spring/order-column.png | Bin 0 -> 102368 bytes assets/img/spring/secondary-table.png | Bin 0 -> 117714 bytes assets/img/spring/single-table.png | Bin 0 -> 162738 bytes .../spring-security-architecture.drawio | 121 + .../spring-security-architecture.drawio.png | Bin 0 -> 59160 bytes assets/img/spring/webmvc-architecture.drawio | 70 + .../img/spring/webmvc-architecture.drawio.png | Bin 0 -> 14538 bytes .../img/warehouse-and-snowflake/b-tree.drawio | 1 + .../warehouse-and-snowflake/b-tree.drawio.png | Bin 0 -> 4403 bytes .../data-warehouse.drawio | 112 + .../data-warehouse.png | Bin 0 -> 28340 bytes .../role-hierarchy.png | Bin 0 -> 19998 bytes .../warehouse-architecture.jpg | Bin 0 -> 14970 bytes assets/js/data/search.json | 20 + assets/js/data/swcache.js | 50 + assets/js/dist/categories.min.js | 6 + assets/js/dist/commons.min.js | 6 + assets/js/dist/home.min.js | 6 + assets/js/dist/misc.min.js | 6 + assets/js/dist/page.min.js | 6 + assets/js/dist/post.min.js | 6 + assets/js/pwa/app.js | 47 + assets/js/pwa/sw.js | 90 + assets/js/pwa/unregister.js | 12 + assets/robots.txt | 10 + index.html | 4 + jekyll-theme-chirpy.gemspec | 36 + package.json | 35 + rollup.config.js | 46 + tools/init | 141 + tools/release | 240 ++ tools/run | 5 + tools/test | 90 + 315 files changed, 38366 insertions(+) create mode 100644 .browserslistrc create mode 100644 .commitlintrc.json create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/workflows/pages-deploy.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100755 .husky/commit-msg create mode 100644 .nojekyll create mode 100644 .prettierrc create mode 100644 .stylelintrc.json create mode 100644 .versionrc.json create mode 100644 CHANGELOG.md create mode 100644 Gemfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 _config.yml create mode 100644 _data/authors.yml create mode 100644 _data/contact.yml create mode 100644 _data/locales/ar.yml create mode 100644 _data/locales/bg-BG.yml create mode 100644 _data/locales/cs-CZ.yml create mode 100644 _data/locales/de-DE.yml create mode 100644 _data/locales/el-GR.yml create mode 100644 _data/locales/en.yml create mode 100644 _data/locales/es-ES.yml create mode 100644 _data/locales/fi-FI.yml create mode 100644 _data/locales/fr-FR.yml create mode 100644 _data/locales/hu-HU.yml create mode 100644 _data/locales/id-ID.yml create mode 100644 _data/locales/it-IT.yml create mode 100644 _data/locales/ko-KR.yml create mode 100644 _data/locales/my-MM.yml create mode 100644 _data/locales/pt-BR.yml create mode 100644 _data/locales/ru-RU.yml create mode 100644 _data/locales/sl-SI.yml create mode 100644 _data/locales/sv-SE.yml create mode 100644 _data/locales/th.yml create mode 100644 _data/locales/tr-TR.yml create mode 100644 _data/locales/uk-UA.yml create mode 100644 _data/locales/vi-VN.yml create mode 100644 _data/locales/zh-CN.yml create mode 100644 _data/locales/zh-TW.yml create mode 100644 _data/origin/basic.yml create mode 100644 _data/origin/cors.yml create mode 100644 _data/share.yml create mode 100644 _includes/comments.html create mode 100644 _includes/comments/disqus.html create mode 100644 _includes/comments/giscus.html create mode 100644 _includes/comments/utterances.html create mode 100644 _includes/datetime.html create mode 100644 _includes/embed/twitch.html create mode 100644 _includes/embed/youtube.html create mode 100644 _includes/favicons.html create mode 100644 _includes/footer.html create mode 100644 _includes/google-analytics.html create mode 100644 _includes/head.html create mode 100644 _includes/js-selector.html create mode 100644 _includes/jsdelivr-combine.html create mode 100644 _includes/lang.html create mode 100644 _includes/language-alias.html create mode 100644 _includes/mermaid.html create mode 100644 _includes/metadata-hook.html create mode 100644 _includes/mode-toggle.html create mode 100644 _includes/no-linenos.html create mode 100644 _includes/origin-type.html create mode 100644 _includes/post-nav.html create mode 100644 _includes/post-paginator.html create mode 100644 _includes/post-sharing.html create mode 100644 _includes/read-time.html create mode 100644 _includes/refactor-content.html create mode 100644 _includes/related-posts.html create mode 100644 _includes/search-loader.html create mode 100644 _includes/search-results.html create mode 100644 _includes/sidebar.html create mode 100644 _includes/toc.html create mode 100644 _includes/topbar.html create mode 100644 _includes/trending-tags.html create mode 100644 _includes/update-list.html create mode 100644 _javascript/_copyright create mode 100644 _javascript/categories.js create mode 100644 _javascript/commons.js create mode 100644 _javascript/home.js create mode 100644 _javascript/misc.js create mode 100644 _javascript/modules/components/back-to-top.js create mode 100644 _javascript/modules/components/category-collapse.js create mode 100644 _javascript/modules/components/clipboard.js create mode 100644 _javascript/modules/components/img-lazyload.js create mode 100644 _javascript/modules/components/img-popup.js create mode 100644 _javascript/modules/components/locale-datetime.js create mode 100644 _javascript/modules/components/mode-watcher.js create mode 100644 _javascript/modules/components/search-display.js create mode 100644 _javascript/modules/components/sidebar.js create mode 100644 _javascript/modules/components/toc.js create mode 100644 _javascript/modules/components/tooltip-loader.js create mode 100644 _javascript/modules/layouts.js create mode 100644 _javascript/modules/layouts/basic.js create mode 100644 _javascript/modules/layouts/sidebar.js create mode 100644 _javascript/modules/layouts/topbar.js create mode 100644 _javascript/modules/plugins.js create mode 100644 _javascript/page.js create mode 100644 _javascript/post.js create mode 100644 _layouts/archives.html create mode 100644 _layouts/categories.html create mode 100644 _layouts/category.html create mode 100644 _layouts/compress.html create mode 100644 _layouts/default.html create mode 100644 _layouts/home.html create mode 100644 _layouts/page.html create mode 100644 _layouts/post.html create mode 100644 _layouts/tag.html create mode 100644 _layouts/tags.html create mode 100644 _plugins/posts-lastmod-hook.rb create mode 100644 _posts/2023-07-18-spring.md create mode 100644 _posts/2023-07-23-relational-databases.md create mode 100644 _posts/2023-07-23-warehouse-and-snowflake.md create mode 100644 _posts/2023-08-12-messaging-systems.md create mode 100644 _posts/2023-08-19-hadoop.md create mode 100644 _posts/2023-09-24-docker-and-kubernetes.md create mode 100644 _posts/2023-11-18-spring-reactive.md create mode 100644 _posts/2023-12-04-java.md create mode 100644 _posts/2023-12-27-spark.md create mode 100644 _posts/2024-01-18-elasticsearch.md create mode 100644 _posts/2024-03-02-low-level-design.md create mode 100644 _posts/2024-03-09-high-level-design.md create mode 100644 _posts/2024-04-12-high-level-design-case-studies.md create mode 100644 _sass/addon/commons.scss create mode 100644 _sass/addon/module.scss create mode 100644 _sass/addon/syntax.scss create mode 100644 _sass/addon/variables.scss create mode 100644 _sass/colors/dark-syntax.scss create mode 100644 _sass/colors/dark-typography.scss create mode 100644 _sass/colors/light-syntax.scss create mode 100644 _sass/colors/light-typography.scss create mode 100644 _sass/jekyll-theme-chirpy.scss create mode 100644 _sass/layout/archives.scss create mode 100644 _sass/layout/categories.scss create mode 100644 _sass/layout/category-tag.scss create mode 100644 _sass/layout/home.scss create mode 100644 _sass/layout/post.scss create mode 100644 _sass/layout/tags.scss create mode 100644 _sass/variables-hook.scss create mode 100644 _tabs/projects.md create mode 100644 _tabs/resume.md create mode 100644 assets/404.html create mode 100644 assets/AWS Certified Solutions Architect - Associate.pdf create mode 100644 assets/CKA: Certified Kubernetes Administrator.pdf create mode 100644 assets/Shameek-Agarwal-Resume.pdf create mode 100644 assets/css/style.scss create mode 100644 assets/feed.xml create mode 100644 assets/img/docker-and-kubernetes/docker-vs-vm.drawio create mode 100644 assets/img/docker-and-kubernetes/docker-vs-vm.drawio.png create mode 100644 assets/img/docker-and-kubernetes/networks.drawio create mode 100644 assets/img/docker-and-kubernetes/networks.drawio.png create mode 100644 assets/img/docker-and-kubernetes/pod-creation.drawio create mode 100644 assets/img/docker-and-kubernetes/pod-creation.drawio.png create mode 100644 assets/img/docker-and-kubernetes/replica-set-creation.drawio create mode 100644 assets/img/docker-and-kubernetes/replica-set-creation.drawio.png create mode 100644 assets/img/docker-and-kubernetes/service-creation.drawio create mode 100644 assets/img/docker-and-kubernetes/service-creation.drawio.png create mode 100644 assets/img/elasticsearch/data-table.png create mode 100644 assets/img/elasticsearch/discover.drawio create mode 100644 assets/img/elasticsearch/discover.drawio.png create mode 100644 assets/img/elasticsearch/filters.png create mode 100644 assets/img/elasticsearch/heat-map.png create mode 100644 assets/img/elasticsearch/interactivity.png create mode 100644 assets/img/elasticsearch/line-chart.png create mode 100644 assets/img/elasticsearch/metrics.png create mode 100644 assets/img/elasticsearch/tag-clouds.png create mode 100644 assets/img/favicons/android-chrome-192x192.png create mode 100644 assets/img/favicons/android-chrome-512x512.png create mode 100644 assets/img/favicons/apple-touch-icon.png create mode 100644 assets/img/favicons/browserconfig.xml create mode 100644 assets/img/favicons/favicon-16x16.png create mode 100644 assets/img/favicons/favicon-32x32.png create mode 100644 assets/img/favicons/favicon.ico create mode 100644 assets/img/favicons/mstile-150x150.png create mode 100644 assets/img/favicons/site.webmanifest create mode 100644 assets/img/hadoop/hadoop1.x.drawio create mode 100644 assets/img/hadoop/hadoop1.x.drawio.png create mode 100644 assets/img/hadoop/hadoop2.x.drawio create mode 100644 assets/img/hadoop/hadoop2.x.drawio.png create mode 100644 assets/img/hadoop/hdfs.drawio create mode 100644 assets/img/hadoop/hdfs.drawio.png create mode 100644 assets/img/high-level-design/2-phase-locking.png create mode 100644 assets/img/high-level-design/anti-corruption-adapter-layer-pattern.png create mode 100644 assets/img/high-level-design/b+-tree.png create mode 100644 assets/img/high-level-design/backends-for-frontends-pattern.png create mode 100644 assets/img/high-level-design/blue-green-deployment-pattern.png create mode 100644 assets/img/high-level-design/canary-testing.png create mode 100644 assets/img/high-level-design/cap-theorem-introduction.excalidraw create mode 100644 assets/img/high-level-design/cap-theorem-introduction.svg create mode 100644 assets/img/high-level-design/choreography-pattern.png create mode 100644 assets/img/high-level-design/circuit-breaker-pattern.png create mode 100644 assets/img/high-level-design/consistent-hashing-disadvantage.png create mode 100644 assets/img/high-level-design/consistent-hashing-replication.png create mode 100644 assets/img/high-level-design/consistent-hashing-workaround.png create mode 100644 assets/img/high-level-design/consistent-hashing.png create mode 100644 assets/img/high-level-design/cqrs.png create mode 100644 assets/img/high-level-design/degradation-point.excalidraw create mode 100644 assets/img/high-level-design/degradation-point.svg create mode 100644 assets/img/high-level-design/event-sourcing+cqrs.png create mode 100644 assets/img/high-level-design/execution-orchestrator-pattern.png create mode 100644 assets/img/high-level-design/features-of-the-system.excalidraw create mode 100644 assets/img/high-level-design/features-of-the-system.svg create mode 100644 assets/img/high-level-design/gslb.excalidraw create mode 100644 assets/img/high-level-design/gslb.svg create mode 100644 assets/img/high-level-design/hw-and-sw-lb-disadvantage.excalidraw create mode 100644 assets/img/high-level-design/hw-and-sw-lb-disadvantage.svg create mode 100644 assets/img/high-level-design/lambda-architecture.excalidraw create mode 100644 assets/img/high-level-design/lambda-architecture.svg create mode 100644 assets/img/high-level-design/load-balancer-vs-api-gateway.png create mode 100644 assets/img/high-level-design/load-balancing-microservices.excalidraw create mode 100644 assets/img/high-level-design/load-balancing-microservices.png create mode 100644 assets/img/high-level-design/merkle-tree.png create mode 100644 assets/img/high-level-design/multi-tier-constraint.excalidraw create mode 100644 assets/img/high-level-design/multi-tier-constraint.svg create mode 100644 assets/img/high-level-design/percentile-distribution-response-time.excalidraw create mode 100644 assets/img/high-level-design/percentile-distribution-response-time.svg create mode 100644 assets/img/high-level-design/pipes-and-filters.png create mode 100644 assets/img/high-level-design/rolling-deployment-pattern.png create mode 100644 assets/img/high-level-design/saga-pattern.png create mode 100644 assets/img/high-level-design/scatter-gather.png create mode 100644 assets/img/high-level-design/sidecar-pattern.png create mode 100644 assets/img/high-level-design/strangler-fig-pattern.png create mode 100644 assets/img/high-level-design/testing-pyramid.png create mode 100644 assets/img/high-level-design/transactional-outbox-pattern.png create mode 100644 assets/img/high-level-design/two-phase-commit.png create mode 100644 assets/img/java/generics-typecasting.png create mode 100644 assets/img/java/inheritance.drawio create mode 100644 assets/img/java/inheritance.drawio.png create mode 100644 assets/img/java/io-bound-architecture.drawio create mode 100644 assets/img/java/io-bound-architecture.drawio.png create mode 100644 assets/img/java/java-main-output.png create mode 100644 assets/img/java/multithreading.drawio create mode 100644 assets/img/java/multithreading.drawio.png create mode 100644 assets/img/java/phases-and-goals.png create mode 100644 assets/img/java/protected-caveat.png create mode 100644 assets/img/low-level-design/activity.drawio create mode 100644 assets/img/low-level-design/activity.drawio.png create mode 100644 assets/img/low-level-design/interpreter-ast.drawio create mode 100644 assets/img/low-level-design/interpreter-ast.drawio.png create mode 100644 assets/img/low-level-design/use-case.drawio create mode 100644 assets/img/low-level-design/use-case.drawio.png create mode 100644 assets/img/messaging-systems/dead-letter-exchange.png create mode 100644 assets/img/messaging-systems/queue-processor-design.png create mode 100644 assets/img/messaging-systems/queue-router-design.png create mode 100644 assets/img/relational-databases/er-diagram-example create mode 100644 assets/img/relational-databases/er-diagram-example.drawio.png create mode 100644 assets/img/spark/aqe-shuffle-partitions.drawio create mode 100644 assets/img/spark/aqe-shuffle-partitions.drawio.png create mode 100644 assets/img/spark/aqe-skew-joins.drawio create mode 100644 assets/img/spark/aqe-skew-joins.drawio.png create mode 100644 assets/img/spark/broadcast-join-working.drawio create mode 100644 assets/img/spark/broadcast-join-working.drawio.png create mode 100644 assets/img/spark/bucket-by-output.png create mode 100644 assets/img/spark/execution-plan.jpg create mode 100644 assets/img/spark/job-stages-tasks.drawio create mode 100644 assets/img/spark/job-stages-tasks.drawio.png create mode 100644 assets/img/spark/list-databases.png create mode 100644 assets/img/spark/partition-by-output.png create mode 100644 assets/img/spark/repartition-output.png create mode 100644 assets/img/spark/shuffle-join-working.drawio create mode 100644 assets/img/spark/shuffle-join-working.drawio.png create mode 100644 assets/img/spark/simple-output.png create mode 100644 assets/img/spark/spark-architecture.drawio create mode 100644 assets/img/spark/spark-architecture.drawio.png create mode 100644 assets/img/spark/spark-ecosystem.drawio create mode 100644 assets/img/spark/spark-ecosystem.drawio.png create mode 100644 assets/img/spark/spark-streaming-jobs.png create mode 100644 assets/img/spark/spark-to-java-types.png create mode 100644 assets/img/spark/streaming-input.png create mode 100644 assets/img/spark/streaming-output-complete.png create mode 100644 assets/img/spark/streaming-output-update.png create mode 100644 assets/img/spring-reactive/schedulers.drawio create mode 100644 assets/img/spring-reactive/schedulers.drawio.png create mode 100644 assets/img/spring/envers.png create mode 100644 assets/img/spring/join-table-one-to-many.png create mode 100644 assets/img/spring/joined.png create mode 100644 assets/img/spring/many-to-many-with-entity.png create mode 100644 assets/img/spring/many-to-many.png create mode 100644 assets/img/spring/mapped-superclass.png create mode 100644 assets/img/spring/order-column.png create mode 100644 assets/img/spring/secondary-table.png create mode 100644 assets/img/spring/single-table.png create mode 100644 assets/img/spring/spring-security-architecture.drawio create mode 100644 assets/img/spring/spring-security-architecture.drawio.png create mode 100644 assets/img/spring/webmvc-architecture.drawio create mode 100644 assets/img/spring/webmvc-architecture.drawio.png create mode 100644 assets/img/warehouse-and-snowflake/b-tree.drawio create mode 100644 assets/img/warehouse-and-snowflake/b-tree.drawio.png create mode 100644 assets/img/warehouse-and-snowflake/data-warehouse.drawio create mode 100644 assets/img/warehouse-and-snowflake/data-warehouse.png create mode 100644 assets/img/warehouse-and-snowflake/role-hierarchy.png create mode 100644 assets/img/warehouse-and-snowflake/warehouse-architecture.jpg create mode 100644 assets/js/data/search.json create mode 100644 assets/js/data/swcache.js create mode 100644 assets/js/dist/categories.min.js create mode 100644 assets/js/dist/commons.min.js create mode 100644 assets/js/dist/home.min.js create mode 100644 assets/js/dist/misc.min.js create mode 100644 assets/js/dist/page.min.js create mode 100644 assets/js/dist/post.min.js create mode 100644 assets/js/pwa/app.js create mode 100644 assets/js/pwa/sw.js create mode 100644 assets/js/pwa/unregister.js create mode 100644 assets/robots.txt create mode 100644 index.html create mode 100644 jekyll-theme-chirpy.gemspec create mode 100644 package.json create mode 100644 rollup.config.js create mode 100755 tools/init create mode 100755 tools/release create mode 100755 tools/run create mode 100755 tools/test diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..afe4650 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,5 @@ +# https://github.com/browserslist/browserslist#browserslistrc + +last 2 versions +> 0.2% +not dead diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100644 index 0000000..5bed7cb --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,8 @@ +{ + "rules": { + "body-max-line-length": [ + 0, + "always" + ] + } +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..2b740bf --- /dev/null +++ b/.editorconfig @@ -0,0 +1,19 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +# Unix-style newlines with a newline ending every file +end_of_line = lf +insert_final_newline = true + +[*.{js,css,scss}] +quote_type = single + +[*.{yml,yaml}] +quote_type = double + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..262d6bd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,16 @@ +# Set default behavior to automatically normalize line endings. +* text=auto + +# Force bash scripts to always use LF line endings so that if a repo is accessed +# in Unix via a file share from Windows, the scripts will work. +*.sh text eol=lf + +# Force batch scripts to always use CRLF line endings so that if a repo is accessed +# in Windows via a file share from Linux, the scripts will work. +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf + +# Denote all files that are truly binary and should not be modified. +*.png binary +*.jpg binary +*.ico binary diff --git a/.github/workflows/pages-deploy.yml b/.github/workflows/pages-deploy.yml new file mode 100644 index 0000000..1dc75e8 --- /dev/null +++ b/.github/workflows/pages-deploy.yml @@ -0,0 +1,71 @@ +name: "Build and Deploy" +on: + push: + branches: + - main + - master + paths-ignore: + - .gitignore + - README.md + - LICENSE + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + # submodules: true + # If using the 'assets' git submodule from Chirpy Starter, uncomment above + # (See: https://github.com/cotes2020/chirpy-starter/tree/main/assets) + + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: 3.2 # reads from a '.ruby-version' or '.tools-version' file if 'ruby-version' is omitted + bundler-cache: true + + - name: Build site + run: bundle exec jekyll b -d "_site${{ steps.pages.outputs.base_path }}" + env: + JEKYLL_ENV: "production" + + - name: Test site + run: | + bundle exec htmlproofer _site --disable-external --check-html --allow_hash_href + + - name: Upload site artifact + uses: actions/upload-pages-artifact@v1 + with: + path: "_site${{ steps.pages.outputs.base_path }}" + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..267d370 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +# Bundler cache +.bundle +vendor +Gemfile.lock + +# Jekyll cache +.jekyll-cache +_site + +# RubyGems +*.gem + +# NPM dependencies +node_modules +package-lock.json + +# IDE configurations +.idea +.vscode + +# Misc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..58062c5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "assets/lib"] + path = assets/lib + url = https://github.com/cotes2020/chirpy-static-assets.git diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..4037788 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no -- commitlint -x $(npm root -g)/@commitlint/config-conventional --edit diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..36b3563 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "trailingComma": "none" +} diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..f489fee --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,23 @@ +{ + "extends": "stylelint-config-standard-scss", + "rules": { + "no-descending-specificity": null, + "shorthand-property-no-redundant-values": null, + "at-rule-no-vendor-prefix": null, + "property-no-vendor-prefix": null, + "selector-no-vendor-prefix": null, + "value-no-vendor-prefix": null, + "color-function-notation": "legacy", + "alpha-value-notation": "number", + "selector-not-notation": "simple", + "color-hex-length": "long", + "declaration-block-single-line-max-declarations": 3, + "scss/operator-no-newline-after": null, + "rule-empty-line-before": [ + "always", + { "ignore": ["after-comment", "first-nested", "inside-block"] } + ], + "value-keyword-case": ["lower", { "ignoreProperties": ["/^\\$/"] }], + "media-feature-range-notation": "prefix" + } +} diff --git a/.versionrc.json b/.versionrc.json new file mode 100644 index 0000000..4b880d3 --- /dev/null +++ b/.versionrc.json @@ -0,0 +1,20 @@ +{ + "skip": { + "commit": true, + "tag": true + }, + "types": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Improvements" + } + ] +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e9c5bd6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,245 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [6.1.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v6.0.0...v6.1.0) (2023-07-02) + +### Features + +* **i18n:** add Thai locale file ([#1087](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1087)) ([a60e907](https://github.com/cotes2020/jekyll-theme-chirpy/commit/a60e90791d24811caff78e21c71dc85d6a729438)) + +### Bug Fixes + +* missing xml escape for `alt` of preview image ([#1113](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1113)) ([8b0fbf5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8b0fbf5a834276f273274e4d614edd71e339cbb0)) +* the cached image is covered by shimmer ([#1100](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1100)) ([df8ff54](https://github.com/cotes2020/jekyll-theme-chirpy/commit/df8ff546ec1c8d21a3d25e0124665001fcf756f3)) +* **ui:** min-height of `page` layout exceeds the mobile screen ([73af591](https://github.com/cotes2020/jekyll-theme-chirpy/commit/73af59194ab935d38b89d298fea0e96e13be7cb7)) +* **webfont:** resume semi-bold of font family `Source Sans Pro` ([c4da99c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/c4da99c7ea5d6e32b1f1b815d7d8d6ae7b0f55de)) + +### Improvements + +* **build:** use `jekyll-include-cache` plugin to reduce build time ([#1098](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1098)) ([4fe145e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4fe145e9809ee1b370d9891135939534751462d0)), closes [#1094](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1094) +* CJK characters of the "Search Cancel" button will wrap ([#1105](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1105)) ([b6d1992](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b6d1992f85ec543220e826087dcc89870e7e2c00)) +* **ui:** avoid blank space at the bottom of the homepage preview image ([ce2f6f5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ce2f6f5abef7a8b874e08d1f18c1fd002650dbf1)) +* **ui:** improve hover color of sidebar nav items in light mode ([728094d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/728094d1ba67a1e7c0a11e1c6c69bf87af9a767b)) + +## [6.0.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v6.0.0...v6.0.1) (2023-05-19) + +### Bug Fixes + +* **home:** preview image missing `[alt]` and `img_path` ([#1044](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1044)) ([aba9468](https://github.com/cotes2020/jekyll-theme-chirpy/commit/aba9468b5332802db961166889d4c4a84e404a2c)) +* **layout:** restore the margin bottom of the main area ([#1047](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1047)) ([eb40f51](https://github.com/cotes2020/jekyll-theme-chirpy/commit/eb40f51c84b011a7c301279527f544ad27efd5eb)) +* **post, page:** image link loses shimmer effect ([#1046](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1046)) ([3bd881d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/3bd881da70d685d10659f47bfe0e79cd02e7af92)) +* **typography:** long string for update-list is not truncated ([#1050](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1050)) ([a51d31c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/a51d31c55a37fbe034f0b0f699f4df0b6a14ba8f)), closes [#1049](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1049) + +## [6.0.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.6.1...v6.0.0) (2023-05-16) + +### ⚠ BREAKING CHANGES + +* rename assets origin configuration files + +### Features + +* add a hook to insert custom metadata in `head` tag ([#1015](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1015)) ([fe20341](https://github.com/cotes2020/jekyll-theme-chirpy/commit/fe203417d993508eedf5b9044fe53c4a566e44f9)) +* **i18n:** add sl-SI.yml with slovenian translations ([#989](https://github.com/cotes2020/jekyll-theme-chirpy/issues/989)) ([42a700a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/42a700aa37889faa32d7ec1f6776ce4b9d845dc4)) +* **i18n:** add Traditional Chinese (Taiwan) localization file ([#961](https://github.com/cotes2020/jekyll-theme-chirpy/issues/961)) ([d97f95f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d97f95fca0bcd450ea50709ffba0217f7e65d339)) +* **i18n:** added Swedish localization file ([#969](https://github.com/cotes2020/jekyll-theme-chirpy/issues/969)) ([fe70479](https://github.com/cotes2020/jekyll-theme-chirpy/commit/fe7047959e3694c6e603e764ded30dacd49e6aa9)) +* support hiding the modification date of a post ([#1020](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1020)) ([8da583d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8da583d403456f6460ec1a6ebcbb0c2ca8127ff6)) +* **ui:** improve code snippet design ([6d99f5c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6d99f5cc36a69e5ccff51f81ba448c798d92e12e)) +* **ui:** improve the design for top bar ([83f1c34](https://github.com/cotes2020/jekyll-theme-chirpy/commit/83f1c34f92d85f3953ca9c9818be5399962bf1c9)) +* **ui:** new design footer content layout ([3210c59](https://github.com/cotes2020/jekyll-theme-chirpy/commit/3210c59466150dc04b4e4bdfc1ffd0e38adcff43)) +* **ui:** redesign the sidebar ([83bbe4a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/83bbe4ac939edfd1706e68c080562e3462f83519)) +* **ui:** show preview image in home page ([97b8dfe](https://github.com/cotes2020/jekyll-theme-chirpy/commit/97b8dfeed6ce7677f6472e28dc3b03f3c2968b12)) + +### Bug Fixes + +* parameter parsing error in image URL ([#1022](https://github.com/cotes2020/jekyll-theme-chirpy/issues/1022)) ([ee88cec](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ee88cec270ea5938f98913a3edf28a684cfbd6c0)) +* **rss:** double quotes in the post title will break the XML structure ([#965](https://github.com/cotes2020/jekyll-theme-chirpy/issues/965)) ([1719d81](https://github.com/cotes2020/jekyll-theme-chirpy/commit/1719d81d00b32b107c35b3903089be84a9b28a6c)) + +### refactor + +* rename assets origin configuration files ([c283e77](https://github.com/cotes2020/jekyll-theme-chirpy/commit/c283e7782fa9562d82d9855fd280a573fd58c75f)) + +### Improvements + +* **assets:** reduce HTTP requests to CDN ([9d97120](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9d971201978e993a9af337d9cd5396a1ea225f00)) +* calculate heading font size dynamically ([#983](https://github.com/cotes2020/jekyll-theme-chirpy/issues/983)) ([52f5ee9](https://github.com/cotes2020/jekyll-theme-chirpy/commit/52f5ee9cd3f92a6e8f25eaa203831546cda85db6)) +* **i18n:** set the global default locales to "en" ([#979](https://github.com/cotes2020/jekyll-theme-chirpy/issues/979)) ([61fdbcb](https://github.com/cotes2020/jekyll-theme-chirpy/commit/61fdbcb83a3601ecae62ec230602b94a5eb832e1)) +* **tools:** avoid initialization interruption in single branch forks ([#992](https://github.com/cotes2020/jekyll-theme-chirpy/issues/992)) ([e90461a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/e90461aa3c81633863db6a12c5924ddba33bd08e)) +* **ui:** improve categories color in dark mode ([414dd13](https://github.com/cotes2020/jekyll-theme-chirpy/commit/414dd132aed70f4bd96cb712d00eacc82d2753e9)) +* **ui:** improve hover effect for post preview cards ([7626e4d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7626e4d00544346a46b6e5ff2f3a99d234defe09)) +* **ui:** improve hover effect of trending tags ([34499f0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/34499f0c927ce8fea3705dc2f0f0e6805cabda43)) +* **ui:** improve inline code in light mode ([e38309f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/e38309f3bd1302ffe60b682136b6efaf96f4d9ae)) +* **ui:** improve related posts design ([2918da9](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2918da9f29465618d557c082ff3a2f23d7519049)) +* **ui:** improve the color of prompts in dark mode ([8cbbcfa](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8cbbcfa26da0addd88affada23a65770250f2404)) +* **ui:** lighten the link color in light-mode ([7c23a4e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7c23a4ebc53b9e231c214e04f8ac0803cbcdb720)) +* **ui:** mute the marker in lists ([0c80552](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0c80552d772b874e2a161f1270294faa3af18d4a)) +* **ui:** uniform the muted text color ([aadf939](https://github.com/cotes2020/jekyll-theme-chirpy/commit/aadf9393d5c7f7528d453c4e68eba4f5cbb85bd9)) +* **ux:** improve LQIP fade in effect ([003e7b6](https://github.com/cotes2020/jekyll-theme-chirpy/commit/003e7b60c93988a7bfae4c03a8346d4f8a5f0bb6)) + +## [5.6.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.6.0...v5.6.1) (2023-03-30) + +### Bug Fixes + +* **deps:** `tocbot` has no initialization detection ([#957](https://github.com/cotes2020/jekyll-theme-chirpy/issues/957)) ([8225174](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8225174cb5e02fda7b3cc548ec821c876b0a5139)) +* mode-toggle leads to Disqus loading failure ([#945](https://github.com/cotes2020/jekyll-theme-chirpy/issues/945)) ([6fec411](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6fec411c18ca5689c467c7b216ddeda02df23623)) +* pageviews not updated immediately ([8b4f99c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8b4f99c87f9a9227f47e84fb39d7b0f551d6f4dd)) + +## [5.6.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.5.2...v5.6.0) (2023-03-17) + +### Features + +* change TOC plugin to `tocbot` ([#774](https://github.com/cotes2020/jekyll-theme-chirpy/issues/774)) ([02b7bd5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/02b7bd5095a2affe5b4c5ed7b5b182baaf642ff3)) +* **i18n:** add Greek Language Support. ([#903](https://github.com/cotes2020/jekyll-theme-chirpy/issues/903)) ([712a9b2](https://github.com/cotes2020/jekyll-theme-chirpy/commit/712a9b22401ce591cf4c0bb03fbdd1693fee30bb)) +* **ux:** turn home page posts into clickable cards ([#895](https://github.com/cotes2020/jekyll-theme-chirpy/issues/895)) ([b85f633](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b85f6330dea666350631c4461b742cdb54c5f052)) + +### Bug Fixes + +* css selector string escaping vulnerability ([#888](https://github.com/cotes2020/jekyll-theme-chirpy/issues/888)) ([5c6ec9d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5c6ec9d06b6571e2c0efe6652078442dca8af477)) +* mathematics cannot scroll horizontally ([#760](https://github.com/cotes2020/jekyll-theme-chirpy/issues/760)) ([4681df7](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4681df715118a37ae1e91b588de0adb67f4e331a)) +* notch status bar doesn't match theme color ([#918](https://github.com/cotes2020/jekyll-theme-chirpy/issues/918)) ([820ba62](https://github.com/cotes2020/jekyll-theme-chirpy/commit/820ba62e9e939090523a7077d01d01bd78ec84eb)) +* some console snippets will be incompletely copied ([e8e4901](https://github.com/cotes2020/jekyll-theme-chirpy/commit/e8e4901e340dd7e5fc5f656dd3c7bcd6c97b886a)) + +## [5.5.2](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.5.1...v5.5.2) (2023-01-30) + +### Bug Fixes + +* position of prompt icon is incorrect in paragraph on mobile ([5df953f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5df953f6c877e2aa3f1f4981c97a0b8007abe6d4)) + +## [5.5.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.5.0...v5.5.1) (2023-01-29) + +### Bug Fixes + +* the icon position of the prompts in the list is incorrect ([0c9558d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0c9558de8a01e9ab795778f351a8bbf4d6b21763)) + +## [5.5.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.4.0...v5.5.0) (2023-01-29) + +### Features + +* **i18n:** add Arabic translation ([#857](https://github.com/cotes2020/jekyll-theme-chirpy/issues/857)) ([765af53](https://github.com/cotes2020/jekyll-theme-chirpy/commit/765af53b77e5c63804784d5728f5970ae274c2c7)) +* **i18n:** add Czech language ([#833](https://github.com/cotes2020/jekyll-theme-chirpy/issues/833)) ([98d48f5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/98d48f5da412276d4a0c99cd01a87b19349bc6bc)) +* **i18n:** add Finnish translations ([#843](https://github.com/cotes2020/jekyll-theme-chirpy/issues/843)) ([d6d0318](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d6d03183eaf94b44e037cc48b6e1c47cee183f6e)) +* **i18n:** add Italian translation ([#850](https://github.com/cotes2020/jekyll-theme-chirpy/issues/850)) ([9a011e1](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9a011e14d66195d8b2fb9ec62f3e60a3e56cd032)) + +### Bug Fixes + +* copy command line incomplete(`.gp` part) ([41ed331](https://github.com/cotes2020/jekyll-theme-chirpy/commit/41ed33145639415148aec8e85edc7a6fd0de0ca3)) +* correct encoding of spaces in share URLs ([#835](https://github.com/cotes2020/jekyll-theme-chirpy/issues/835)) ([f2d2858](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f2d285844e6e2979f2b0eec1d20073d3c05b6c0c)) +* post's image would cover the PWA update alert ([bd374dd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/bd374dd383c50f89c8f018ecb4e25772eeb8f6d8)) +* prompt with nested blockquotes renders incorrectly ([#846](https://github.com/cotes2020/jekyll-theme-chirpy/issues/846)) ([babb4a0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/babb4a0c5a58ceb2e4093bc465670accdd526c18)) + +## [5.4.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.2...v5.4.0) (2022-12-27) + +### Features + +* add `rel="me"` to Mastodon sidebar contact links for verification ([#807](https://github.com/cotes2020/jekyll-theme-chirpy/issues/807)) ([d2190c7](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d2190c726f61c8c9732b88b4aecf699dc8bc7deb)) +* add embed video support ([ed6dc53](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ed6dc539eff7003a3765bcd8c31ae5e91a863d65)) +* add shimmer background when image loads ([ab16fdc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ab16fdc7fc26811130b98a1773beb62bff6182e8)) +* set preview image ratio to 1.91 : 1 ([4b6ccbc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4b6ccbcbccce27b9fcb035812efefe4eb69301cf)) +* support dark and light mode images ([#481](https://github.com/cotes2020/jekyll-theme-chirpy/issues/481)) ([9306c7b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9306c7b39ecf9d9146bc1a25eebedc38eb2c3dd6)) +* support LQIP for images ([bffaf63](https://github.com/cotes2020/jekyll-theme-chirpy/commit/bffaf6374f265cec96ef743d42b46fbec3b59797)) + +### Bug Fixes + +* `hreflang` tag attribute of feed misses `site.alt_lang` ([7651d28](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7651d2851b4bb7d8f0d068b62c036c89a1089bbc)) +* `og:image` will be incorrect if the image uses a cross-domain URL ([8de1abd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/8de1abda6be3633982392178731431b0ddb1b52b)) +* refactoring error when the image URL contains parameters ([ec98f07](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ec98f07aca0b80a9c07fbcdc8e0d7d66dba98ed2)) +* spaces in post title are encoded when sharing ([7efd2f8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7efd2f8aa2ea1c3aeb7d740bf9a018881c26fe65)) + +### Improvements + +* **cdn:** optimize cache policy for static assets ([7fb0ee0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/7fb0ee0bedb63eee3f90a49c6d7fb8b5d78c9830)) + +## [5.3.2](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.1...v5.3.2) (2022-11-22) + +### Bug Fixes + +* `mermaid` occasionally fails to initialize ([#536](https://github.com/cotes2020/jekyll-theme-chirpy/issues/536)) ([48f14e3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/48f14e39ac81bbfb3b9913ea3ee789d775b2d1ae)) +* **comment:** disqus doesn't follow theme mode switching ([b0d5956](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b0d5956f5a0ed894984d6b1754efeba04d8bc966)) +* restore full-text search ([#741](https://github.com/cotes2020/jekyll-theme-chirpy/issues/741)) ([6774e0e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6774e0e1fb37cf467b14be481347412713763f05)) +* the image URL in the SEO-related tags is incomplete ([#754](https://github.com/cotes2020/jekyll-theme-chirpy/issues/754)) ([f6e9a3f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f6e9a3fccf7ab34db71f8aefaf86fdcc05861076)) + +## [5.3.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.3.0...v5.3.1) (2022-10-25) + +### Bug Fixes + +* 404 page missing title in tablet/desktop view ([5511b28](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5511b2883fd5a395fddfb642588d00c122f18da7)) +* prompt content overflows horizontally ([#705](https://github.com/cotes2020/jekyll-theme-chirpy/issues/705)) ([fb13e32](https://github.com/cotes2020/jekyll-theme-chirpy/commit/fb13e3219b5eca0d2e4f86a1ecabfab75240369f)) +* **tools:** multiple configuration files will fail the test ([80cb0b3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/80cb0b371754e96772a7907877a8ce196398ba3d)) + +### Improvements + +* **layout:** improve the min-height of main content ([#674](https://github.com/cotes2020/jekyll-theme-chirpy/issues/674)) ([49bb93c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/49bb93cc0c89ad9cfaad5edcf9cb28c3d5134575)) +* modify checkbox icon with `Liquid` ([1fd665b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/1fd665bf4990c26ae23635c511c5abc9640184d1)) +* optimize the extra padding in lists ([#703](https://github.com/cotes2020/jekyll-theme-chirpy/issues/703)) ([39da11e](https://github.com/cotes2020/jekyll-theme-chirpy/commit/39da11e3f3685f49321757576d2b87a48bf25db5)), closes [#702](https://github.com/cotes2020/jekyll-theme-chirpy/issues/702) +* **posts:** improve core block bottom padding ([d2fb98b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d2fb98b3e57f2f6c3fc3816551cd0721731adf40)) +* truncate post content for search results ([647eea8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/647eea8dbd716f9d3cb8330c3139fa753903f51d)) +* **typography:** optimize the line height of post content ([eac3f9b](https://github.com/cotes2020/jekyll-theme-chirpy/commit/eac3f9b434ca77e3dc64eea9cedea7b93e7b306b)) + +### Others + +* **giscus:** add `reactions-enabled` option ([#712](https://github.com/cotes2020/jekyll-theme-chirpy/issues/712)) ([70662a0](https://github.com/cotes2020/jekyll-theme-chirpy/commit/70662a0365e6b9378602dc0a57462ddad5aebcf5)) +* **locale:** restore options for changing date format ([#716](https://github.com/cotes2020/jekyll-theme-chirpy/issues/716)) ([f904e8c](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f904e8cd48c343cc31e25859d9d50bfe2c056f41)) +* remove site config option `prefer_datetime_locale` ([6852ceb](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6852ceb280927ff4e753a3e1131f2b396d9807d0)) + +## [5.3.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.2.1...v5.3.0) (2022-09-23) + +### Features + +* add multiple authors to a post ([#677](https://github.com/cotes2020/jekyll-theme-chirpy/issues/677)) ([f1d9e99](https://github.com/cotes2020/jekyll-theme-chirpy/commit/f1d9e99bc02d3cd0a6b0cd1beac545f0cc7a24f8)), closes [#675](https://github.com/cotes2020/jekyll-theme-chirpy/issues/675) +* **i18n:** add Bulgarian support ([#612](https://github.com/cotes2020/jekyll-theme-chirpy/issues/612)) ([2fed338](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2fed338ce6d078bf528c9717201fbc475f88cd22)) +* **i18n:** add German locale file ([#663](https://github.com/cotes2020/jekyll-theme-chirpy/issues/663)) ([940b281](https://github.com/cotes2020/jekyll-theme-chirpy/commit/940b2810e95065e30600ae8d5e4612e7183da60e)) +* **i18n:** add Hungarian locale file ([#597](https://github.com/cotes2020/jekyll-theme-chirpy/issues/597), [#598](https://github.com/cotes2020/jekyll-theme-chirpy/issues/598)) ([b032977](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b0329775fc24d0323e5cc04cda46ece8b4531802)) +* **i18n:** add Turkish language ([#631](https://github.com/cotes2020/jekyll-theme-chirpy/issues/631)) ([ad137fa](https://github.com/cotes2020/jekyll-theme-chirpy/commit/ad137fa2945b1870b9c1dd5e9212a5f4af7c3580)) + +### Bug Fixes + +* add missing color to linkedin icon for share list ([#683](https://github.com/cotes2020/jekyll-theme-chirpy/issues/683)) ([0dcd39d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0dcd39d491c9c49e4acf7f75f83fe6e1d1839e37)) +* code contains spaces in headings ([#644](https://github.com/cotes2020/jekyll-theme-chirpy/issues/644)) ([3fa1bf3](https://github.com/cotes2020/jekyll-theme-chirpy/commit/3fa1bf305451f645a7f3aa93863b076463c8f165)) +* correct spelling of `panel` ([#686](https://github.com/cotes2020/jekyll-theme-chirpy/issues/686)) ([b288587](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b288587c1c3d113a1c52c2d25fb46cddda348961)) +* correct the i18n for tab titles ([0c5b697](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0c5b697fd3b283b6a5c926742b61ed49d8688c18)) +* the `code` doesn't wrap inside the prompt ([#626](https://github.com/cotes2020/jekyll-theme-chirpy/issues/626)) ([378b65a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/378b65a0617787813519dde74d6f741f255eff3d)) + +## [5.2.1](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.2.0...v5.2.1) (2022-06-17) + +### Bug Fixes + +* exclude CHANGELOG from output ([971fe03](https://github.com/cotes2020/jekyll-theme-chirpy/commit/971fe03ec329ae49e7d60fe3af6101cfbd1acd6c)) +* **PWA:** sometimes update notification is not triggered ([96af729](https://github.com/cotes2020/jekyll-theme-chirpy/commit/96af7291ea5b2c5ed6372e7b6f7725e67c69f1ba)) + +## [5.2.0](https://github.com/cotes2020/jekyll-theme-chirpy/compare/v5.1.0...v5.2.0) (2022-06-09) + +### Features + +* add es-ES support to locales ([#533](https://github.com/cotes2020/jekyll-theme-chirpy/issues/533)) ([efe75ad](https://github.com/cotes2020/jekyll-theme-chirpy/commit/efe75adf2784956afb7a0b67f6634b146d9cb03b)) +* add fr-FR support to locales ([#582](https://github.com/cotes2020/jekyll-theme-chirpy/issues/582)) ([94e8144](https://github.com/cotes2020/jekyll-theme-chirpy/commit/94e81447afa457b1a6b7e8f487c47502803556d7)) +* add Vietnamese locale ([#517](https://github.com/cotes2020/jekyll-theme-chirpy/issues/517)) ([171463d](https://github.com/cotes2020/jekyll-theme-chirpy/commit/171463d76da9b7bc25dd327b8f0a868ea79e388b)) +* add pt-BR support to locales ([c2c503f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/c2c503f63336884282b6bda4ec0703d6ae76771b)) +* add option to turn off PWA ([#527](https://github.com/cotes2020/jekyll-theme-chirpy/issues/527)) ([106c981](https://github.com/cotes2020/jekyll-theme-chirpy/commit/106c981bac71e7434204a77e1f0c9c61d6eb1509)) +* **PWA:** add Service Worker update notification ([d127183](https://github.com/cotes2020/jekyll-theme-chirpy/commit/d127183b9774f6321e409acdb66bf8a85d8814be)) +* support showing description of preview image ([2bd6efa](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2bd6efa95a174ac44e30a3af1e57e6f40d6e0e3a)) + +### Bug Fixes + +* alt is not a valid attribute for 'a' tag ([58928db](https://github.com/cotes2020/jekyll-theme-chirpy/commit/58928dbc9068db4e4cda4371eeae1865920dce6a)) +* assets URL is missing `baseurl` in self-hosted mode ([#591](https://github.com/cotes2020/jekyll-theme-chirpy/issues/591)) ([54124d5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/54124d5134995fce52e4c2fc0a5d4d1743d6264d)) +* correct the `twitter:creator` of Twitter summary card ([96a16c8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/96a16c868ede51e7dfa412de63ffa1e5a49add7f)) +* correctly URL encode share links ([4c1c8d8](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4c1c8d8b0eacecbbaa2d522bbdd6430f350ff760)), closes [#496](https://github.com/cotes2020/jekyll-theme-chirpy/issues/496) +* follow paginate_path config for pagination ([6900d9f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6900d9f2bc9380cbda4babf611c6eeff345291af)) +* force checkout of `gh-pages` branch ([#544](https://github.com/cotes2020/jekyll-theme-chirpy/issues/544)) ([5402523](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5402523ae52a3740bcc15df0b226b2612644945d)) +* horizontal scroll for long equations ([#545](https://github.com/cotes2020/jekyll-theme-chirpy/issues/545)) ([30787fc](https://github.com/cotes2020/jekyll-theme-chirpy/commit/30787fc4cf151e955bb7afc26dfd859f1a06fce6)) +* p is not allowed in span ([4f590e2](https://github.com/cotes2020/jekyll-theme-chirpy/commit/4f590e2bba0639751771211bc0d357828ae70404)) +* remove whitespace from avatar URL ([#537](https://github.com/cotes2020/jekyll-theme-chirpy/issues/537)) ([0542b51](https://github.com/cotes2020/jekyll-theme-chirpy/commit/0542b5149c8287dca60e37f46ee36f31b43455e4)) +* resume the preview image SEO tag ([#529](https://github.com/cotes2020/jekyll-theme-chirpy/issues/529)) ([b8d1bcd](https://github.com/cotes2020/jekyll-theme-chirpy/commit/b8d1bcd3dea0abd1afef7ef154a4501fbb18938d)) +* script code should be in head or body, not in between ([2103191](https://github.com/cotes2020/jekyll-theme-chirpy/commit/2103191b2faf714a8e4418c7c347a1f942b51af8)) +* spurious header closing tags ([59e9557](https://github.com/cotes2020/jekyll-theme-chirpy/commit/59e955745f02f9b57c65af70b0979cd4a98bf53f)) +* table bypass refactoring when it contains IAL ([#519](https://github.com/cotes2020/jekyll-theme-chirpy/issues/519)) ([5d85ccb](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5d85ccb9943aac88dbbefebe1c2234cdcbae5c53)) +* **theme mode:** `SCSS` syntax error ([#588](https://github.com/cotes2020/jekyll-theme-chirpy/issues/588)) ([76a1b6a](https://github.com/cotes2020/jekyll-theme-chirpy/commit/76a1b6a068c369138422dcd18ba08ec8cc3749a6)) +* use `jsonify` to generate valid json ([#521](https://github.com/cotes2020/jekyll-theme-chirpy/issues/521)) ([dd9d5a7](https://github.com/cotes2020/jekyll-theme-chirpy/commit/dd9d5a7207b746342d07176d8969dc4f2c380bf2)) +* when the `site.img_cdn` is set to the local path, the preview-image path loses the `baseurl` ([9cefe58](https://github.com/cotes2020/jekyll-theme-chirpy/commit/9cefe58993d9ea3a3a28424e7ffd8e0911567c5c)) + +### Improvements + +* avoid post pageviews from shifting while loading ([135a16f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/135a16f13ee783d9308669ff9a824847a73c951c)) +* avoid the layout shift for post datetime ([6d35f5f](https://github.com/cotes2020/jekyll-theme-chirpy/commit/6d35f5f8da044cfad071628bb53776de03efaae4)) +* **categories:** support singular and plural forms of locale ([#595](https://github.com/cotes2020/jekyll-theme-chirpy/issues/595)) ([35cadf9](https://github.com/cotes2020/jekyll-theme-chirpy/commit/35cadf969dd0161ee62503e242c545f006f7072b)) +* improve the responsive design for ultrawide screens ([#540](https://github.com/cotes2020/jekyll-theme-chirpy/issues/540)) ([5d6e8c5](https://github.com/cotes2020/jekyll-theme-chirpy/commit/5d6e8c5ef6aa71b4d2600c5305f6e8ba540557f7)) diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..7b5377f --- /dev/null +++ b/Gemfile @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gemspec + +group :test do + gem "html-proofer", "~> 3.18" +end + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library. +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", ">= 1", "< 3" + gem "tzinfo-data" +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin] + +# Lock `http_parser.rb` gem to `v0.6.x` on JRuby builds since newer versions of the gem +# do not have a Java counterpart. +gem "http_parser.rb", "~> 0.6.0", :platforms => [:jruby] + +# Lock jekyll-sass-converter to 2.x on Linux-musl +if RUBY_PLATFORM =~ /linux-musl/ + gem "jekyll-sass-converter", "~> 2.0" +end diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..299d89f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 Cotes Chung + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..04ad93a --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +![workflow status](https://github.com/shameekagarwal/shameekagarwal.github.io/actions/workflows/pages-deploy.yml/badge.svg) + +# Docker Command + +```shell +docker run -it --rm --volume="$PWD:/srv/jekyll" -p 4000:4000 jekyll/jekyll jekyll serve +``` diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..a688bcd --- /dev/null +++ b/_config.yml @@ -0,0 +1,212 @@ +# The Site Configuration + +# Import the theme +theme: jekyll-theme-chirpy + +# Change the following value to '/PROJECT_NAME' ONLY IF your site type is GitHub Pages Project sites +# and doesn't have a custom domain. +baseurl: "" + +# The language of the webpage › http://www.lingoes.net/en/translator/langcode.htm +# If it has the same name as one of the files in folder `_data/locales`, the layout language will also be changed, +# otherwise, the layout language will use the default value of 'en'. +lang: en + +# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone +timezone: Asia/Kolkata + +# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md +# ↓ -------------------------- + +title: Shameek Agarwal # the main title + +tagline: A Software Engineer # it will display as the sub-title + +description: >- # used by seo meta and the atom feed + A minimal, responsive and feature-rich Jekyll theme for technical writing. + +# fill in the protocol & hostname for your site, e.g., 'https://username.github.io' +url: "https://shameekagarwal.github.io" + +github: + username: shameekagarwal # change to your github username + +twitter: + username: twitter_username # change to your twitter username + +social: + # Change to your full name. + # It will be displayed as the default author of the posts and the copyright owner in the Footer + name: Shameek Agarwal + email: shameek.agarwal@gmail.com # change to your email address + links: + - 'https://www.linkedin.com/in/shameek-agarwal' # Fill with your Linkedin homepage + # The first element serves as the copyright owner's link + # - https://twitter.com/username # change to your twitter homepage + # - https://github.com/username # change to your github homepage + # Uncomment below to add more social links + # - https://www.facebook.com/username + # - https://www.linkedin.com/in/username + +google_site_verification: # fill in to your verification string + +# ↑ -------------------------- +# The end of `jekyll-seo-tag` settings + +google_analytics: + id: # fill in your Google Analytics ID + +# Prefer color scheme setting. +# +# Note: Keep empty will follow the system prefer color by default, +# and there will be a toggle to switch the theme between dark and light +# on the bottom left of the sidebar. +# +# Available options: +# +# light - Use the light color scheme +# dark - Use the dark color scheme +# +theme_mode: dark + +# The CDN endpoint for images. +# Notice that once it is assigned, the CDN url +# will be added to all image (site avatar & posts' images) paths starting with '/' +# +# e.g. 'https://cdn.com' +img_cdn: "" + +# the avatar on sidebar, support local or CORS resources +# avatar: "/assets/img/profile.jpg" + +# boolean type, the global switch for TOC in posts. +toc: true + +comments: + active: giscus # The global switch for posts comments, e.g., 'disqus'. Keep it empty means disable + # The active options are as follows: + disqus: + shortname: # fill with the Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname + # utterances settings › https://utteranc.es/ + utterances: + repo: shameekagarwal/shameekagarwal.github.io + issue_term: title + # Giscus options › https://giscus.app + giscus: + repo: shameekagarwal/shameekagarwal.github.io # / + repo_id: MDEwOlJlcG9zaXRvcnkzOTA3NzM5NzE= + category: Comments + category_id: DIC_kwDOF0q8084CX8ku + mapping: url # optional, default to 'pathname' + input_position: # optional, default to 'bottom' + lang: # optional, default to the value of `site.lang` + reactions_enabled: # optional, default to the value of `1` + +# + +# Self-hosted static assets, optional › https://github.com/cotes2020/chirpy-static-assets +assets: + self_host: + enabled: # boolean, keep empty means false + # specify the Jekyll environment, empty means both + # only works if `assets.self_host.enabled` is 'true' + env: # [development|production] + +pwa: + enabled: true # the option for PWA feature + +paginate: 10 + +# ------------ The following options are not recommended to be modified ------------------ + +kramdown: + syntax_highlighter: rouge + syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options + css_class: highlight + # default_lang: console + span: + line_numbers: false + block: + line_numbers: true + start_line: 1 + +collections: + tabs: + output: true + sort_by: order + +defaults: + - scope: + path: "_posts" # An empty string here means all files in the project + type: posts + values: + layout: post + comments: true # Enable comments in posts. + toc: true # Display TOC column in posts. + # DO NOT modify the following parameter unless you are confident enough + # to update the code of all other post links in this project. + permalink: /posts/:title/ + - scope: + path: _drafts + values: + comments: false + - scope: + path: "" + type: tabs # see `site.collections` + values: + layout: page + permalink: /:title/ + - scope: + path: assets/img/favicons + values: + swcache: true + - scope: + path: assets/js/dist + values: + swcache: true + +sass: + style: compressed + +compress_html: + clippings: all + comments: all + endings: all + profile: false + blanklines: false + ignore: + envs: [development] + +exclude: + - "*.gem" + - "*.gemspec" + - tools + - README.md + - CHANGELOG.md + - LICENSE + - rollup.config.js + - node_modules + - package*.json + +jekyll-archives: + enabled: [categories, tags] + layouts: + category: category + tag: tag + permalinks: + tag: /tags/:name/ + category: /categories/:name/ diff --git a/_data/authors.yml b/_data/authors.yml new file mode 100644 index 0000000..f012012 --- /dev/null +++ b/_data/authors.yml @@ -0,0 +1,17 @@ +## Template › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/advanced-usage.md#setting-author-url +# ------------------------------------- +# {author_id}: +# name: {full name} +# twitter: {twitter_of_author} +# url: {homepage_of_author} +# ------------------------------------- + +cotes: + name: Cotes Chung + twitter: cotes2020 + url: https://github.com/cotes2020/ + +sille_bille: + name: Dinesh Prasanth Moluguwan Krishnamoorthy + twitter: dinesh_MKD + url: https://github.com/SilleBille/ diff --git a/_data/contact.yml b/_data/contact.yml new file mode 100644 index 0000000..fbb9f13 --- /dev/null +++ b/_data/contact.yml @@ -0,0 +1,33 @@ +# The contact options. + +- type: github + icon: "fab fa-github" + +- type: gitlab + icon: "fab fa-gitlab" + url: 'https://gitlab.com/shameekagarwal' # Fill with your Linkedin homepage + +- type: email + icon: "fas fa-envelope" + noblank: true # open link in current tab + +#- type: rss +# icon: "fas fa-rss" +# noblank: true +# Uncomment and complete the url below to enable more contact options +# +# - type: mastodon +# icon: 'fab fa-mastodon' # icons powered by +# url: '' # Fill with your Mastodon account page, rel="me" will be applied for verification +# +- type: linkedin + icon: 'fab fa-linkedin' # icons powered by + url: 'https://www.linkedin.com/in/shameek-agarwal' # Fill with your Linkedin homepage +# +# - type: stack-overflow +# icon: 'fab fa-stack-overflow' +# url: '' # Fill with your stackoverflow homepage + +- type: phone + icon: 'fas fa-phone' + url: 'tel:+916290885679' diff --git a/_data/locales/ar.yml b/_data/locales/ar.yml new file mode 100644 index 0000000..c608298 --- /dev/null +++ b/_data/locales/ar.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: منشور + category: فئة + tag: وسم + +# The tabs of sidebar +tabs: + # format: : + home: الرئيسية + categories: الفئات + tags: الوسوم + archives: الأرشيف + about: حول + +# the text displayed in the search bar & search results +search: + hint: بحث + cancel: إلغاء + no_results: نأسف! لا يوجد نتائج. + +panel: + lastmod: المحدثة مؤخرا + trending_tags: الوسوم الشائعة + toc: محتويات + +copyright: + # Shown at the bottom of the post + license: + template: هذا المنشور تحت ترخيص :LICENSE_NAME بواسطة المؤلف. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: بعض الحقوق محفوظة. + verbose: >- + ما لم يذكر خلاف ذلك ، يتم ترخيص منشورات المدونة على هذا الموقع + بموجب ترخيص Creative Commons Attribution 4.0 International (CC BY 4.0) من قبل المؤلف. + +meta: باستخدام :PLATFORM السمة :THEME + +not_found: + statment: عذرا, الرابط التالي غير صالح أو انه يشير إلى صفحة غير موجودة. + +notification: + update_found: يتوفر اصدار جديد للمحتوى. + update: تحديث + +# ----- Posts related labels ----- + +post: + written_by: بواسطة + posted: نشّر + updated: حدّث + words: كلمات + pageview_measure: مشاهدات + read_time: + unit: دقيقة + prompt: قراءة + relate_posts: إقرأ المزيد + share: شارك + button: + next: الأجدد + previous: الأقدم + copy_code: + succeed: تم النسخ! + share_link: + title: أنسخ الرابط + succeed: تم نسخ الرابط بنجاح! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: فئة + plural: فئات + post_measure: + singular: منشور + plural: منشورات diff --git a/_data/locales/bg-BG.yml b/_data/locales/bg-BG.yml new file mode 100644 index 0000000..3e04993 --- /dev/null +++ b/_data/locales/bg-BG.yml @@ -0,0 +1,81 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Публикация + category: Категория + tag: Таг + +# The tabs of sidebar +tabs: + # format: : + home: Начало + categories: Категории + tags: Тагове + archives: Архив + about: За мен + +# the text displayed in the search bar & search results +search: + hint: търси + cancel: Отмени + no_results: Упс! Не са намерени резултати. + +panel: + lastmod: Наскоро обновени + trending_tags: Популярни тагове + toc: Съдържание + +copyright: + # Shown at the bottom of the post + license: + template: Тази публикация е лицензирана под :LICENSE_NAME от автора. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Някои права запазени. + verbose: >- + Освен ако не е посочено друго, публикациите в блога на този сайт са лицензирани + под лиценза Creative Commons Attribution 4.0 (CC BY 4.0) от автора. + +meta: Създадено чрез :PLATFORM и :THEME тема + +not_found: + statment: Съжалявам, но на този URL адрес няма налично съдържание. + +notification: + update_found: Налична е нова версия на съдържанието. + update: Обнови + +# ----- Posts related labels ----- + +post: + written_by: Автор + posted: Публикувана + updated: Обновена + words: думи + pageview_measure: преглеждания + read_time: + unit: мин + prompt: четиво + relate_posts: Още за четене + share: Споделете + button: + next: По-нови + previous: По-стари + copy_code: + succeed: Копирано! + share_link: + title: Копирай линк + succeed: Линкът е копиран успешно! + +# categories page +categories: + category_measure: + singular: категория + plural: категории + post_measure: + singular: публикация + plural: публикации diff --git a/_data/locales/cs-CZ.yml b/_data/locales/cs-CZ.yml new file mode 100644 index 0000000..e515c08 --- /dev/null +++ b/_data/locales/cs-CZ.yml @@ -0,0 +1,89 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Příspěvek + category: Kategorie + tag: Štítek + +# The tabs of sidebar +tabs: + # format: : + home: Domů + categories: Kategorie + tags: Štítky + archives: Archivy + about: O mně + +# the text displayed in the search bar & search results +search: + hint: hledat + cancel: Zrušit + no_results: Ups! Žádný výsledek nenalezen. + +panel: + lastmod: Nedávno aktualizováno + trending_tags: Trendy štítky + toc: Obsah + +copyright: + # Shown at the bottom of the post + license: + template: Tento příspěvek je licencován pod :LICENSE_NAME autorem. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Některá práva vyhrazena. + verbose: >- + Pokud není uvedeno jinak, jsou příspěvky na tomto webu licencovány + pod licencí Creative Commons Attribution 4.0 International (CC BY 4.0) Licence autora. + +meta: Použití :PLATFORM s motivem :THEME + +not_found: + statment: Omlouváme se, adresu URL jsme špatně umístili nebo odkazuje na něco, co neexistuje. + +notification: + update_found: Je k dispozici nová verze obsahu. + update: Aktualizace + +# ----- Posts related labels ----- + +post: + written_by: Od + posted: Zveřejněno + updated: Aktualizováno + words: slova + pageview_measure: zhlednutí + read_time: + unit: minut + prompt: čtení + relate_posts: Další čtení + share: Sdílet + button: + next: Novější + previous: Starší + copy_code: + succeed: Zkopírováno! + share_link: + title: Kopírovat odkaz + succeed: Zkopírováno! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: kategorie + post_measure: + singular: příspěvěk + plural: příspěvky diff --git a/_data/locales/de-DE.yml b/_data/locales/de-DE.yml new file mode 100644 index 0000000..7ea3956 --- /dev/null +++ b/_data/locales/de-DE.yml @@ -0,0 +1,80 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Eintrag + category: Kategorie + tag: Tag + +# The tabs of sidebar +tabs: + # format: : + home: Startseite + categories: Kategorien + tags: Tags + archives: Archiv + about: Über + +# the text displayed in the search bar & search results +search: + hint: Suche + cancel: Abbrechen + no_results: Ups! Keine Einträge gefunden. + +panel: + lastmod: Kürzlich aktualisiert + trending_tags: Beliebte Tags + toc: Inhalt + +copyright: + # Shown at the bottom of the post + license: + template: Dieser Eintrag ist vom Autor unter :LICENSE_NAME lizensiert. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Einige Rechte vorbehalten. + verbose: >- + Alle Einträge auf dieser Seite stehen, soweit nicht anders angegeben, unter der Lizenz Creative Commons Attribution 4.0 (CC BY 4.0). + +meta: Powered by :PLATFORM with :THEME theme + +not_found: + statment: Entschuldigung, dieser Link verweist auf keine vorhandene Ressource. + +notification: + update_found: Eine neue Version ist verfügbar. + update: Neue Version + +# ----- Posts related labels ----- + +post: + written_by: Von + posted: Veröffentlicht + updated: Aktualisiert + words: Wörter + pageview_measure: Aufrufe + read_time: + unit: Minuten + prompt: lesen + relate_posts: Weiterlesen + share: Teilen + button: + next: Nächster Eintrag + previous: Eintrag vorher + copy_code: + succeed: Kopiert! + share_link: + title: Link kopieren + succeed: Link erfolgreich kopiert! + +# categories page +categories: + category_measure: + singular: Kategorie + plural: Kategorien + post_measure: + singular: Eintrag + plural: Einträge diff --git a/_data/locales/el-GR.yml b/_data/locales/el-GR.yml new file mode 100644 index 0000000..ab5fb0e --- /dev/null +++ b/_data/locales/el-GR.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Δημοσίευση + category: Κατηγορία + tag: Ετικέτα + +# The tabs of sidebar +tabs: + # format: : + home: Home + categories: Κατηγορίες + tags: Ετικέτες + archives: Αρχεία + about: Σχετικά + +# the text displayed in the search bar & search results +search: + hint: αναζήτηση + cancel: Ακύρωση + no_results: Oops! Κανένα αποτέλεσμα δεν βρέθηκε. + +panel: + lastmod: Σχετικά ενημερωμένα + trending_tags: Ετικέτες τάσης + toc: Περιεχόμενα + +copyright: + # Shown at the bottom of the post + license: + template: Η δημοσίευση αυτή βρίσκεται υπο την άδεια :LICENSE_NAME Greekforce1821. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Ορισμένα δικαιώματα reserved. + verbose: >- + Εκτός αλλού ή οπουδήποτε αλλού, τα blog posts σε αυτήν την σελίδα βρίσκονται υπο την άδεια + Creative Commons Attribution 4.0 International (CC BY 4.0) του δημιουργού. + +meta: Αξιοποιώντας την :PLATFORM theme :THEME + +not_found: + statment: Συγνώμη, έχουμε τοποθετήσει λάθος αυτήν την διεύθυνση URL ή υποδεικνύει κάτι που δεν υπάρχει. + +notification: + update_found: Υπάρχει διαθέσιμη μια νέα έκδοση του περιεχομένου. + update: Ενημέρωση + +# ----- Posts related labels ----- + +post: + written_by: Από + posted: Δημοσιεύθηκε + updated: Ενημερώθηκε + words: λέξεις + pageview_measure: προβολές + read_time: + unit: Λεπτά + prompt: διαβάσματος + relate_posts: Περισσότερα + share: Κοινοποιήστε + button: + next: Νεότερα + previous: Παλαιότερα + copy_code: + succeed: Αντιγράφθηκε! + share_link: + title: Αντιγραφή συνδέσμου + succeed: Η διεύθυνση αντιγράφθηκε με επιτυχία! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: Κατηγορία + plural: Κατηγορίες + post_measure: + singular: Δημοσίευση + plural: Δημοσιεύσεις diff --git a/_data/locales/en.yml b/_data/locales/en.yml new file mode 100644 index 0000000..2f3f339 --- /dev/null +++ b/_data/locales/en.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Post + category: Category + tag: Tag + +# The tabs of sidebar +tabs: + # format: : + home: Home + categories: Categories + tags: Tags + archives: Archives + about: About + +# the text displayed in the search bar & search results +search: + hint: search + cancel: Cancel + no_results: Oops! No results found. + +panel: + lastmod: Recently Updated + trending_tags: Trending Tags + toc: Contents + +copyright: + # Shown at the bottom of the post + license: + template: This post is licensed under :LICENSE_NAME by the author. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Some rights reserved. + verbose: >- + Except where otherwise noted, the blog posts on this site are licensed + under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author. + +meta: Using the :PLATFORM theme :THEME + +not_found: + statment: Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. + +notification: + update_found: A new version of content is available. + update: Update + +# ----- Posts related labels ----- + +post: + written_by: By + posted: Posted + updated: Updated + words: words + pageview_measure: views + read_time: + unit: min + prompt: read + relate_posts: Further Reading + share: Share + button: + next: Newer + previous: Older + copy_code: + succeed: Copied! + share_link: + title: Copy link + succeed: Link copied successfully! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: category + plural: categories + post_measure: + singular: post + plural: posts diff --git a/_data/locales/es-ES.yml b/_data/locales/es-ES.yml new file mode 100644 index 0000000..5529230 --- /dev/null +++ b/_data/locales/es-ES.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Entrada + category: Categoría + tag: Etiqueta + +# The tabs of sidebar +tabs: + # format: : + home: Inicio + categories: Categorías + tags: Etiquetas + archives: Archivo + about: Acerca de + +# the text displayed in the search bar & search results +search: + hint: Buscar + cancel: Cancelar + no_results: ¡Oops! No se encuentran resultados. + +panel: + lastmod: Actualizado recientemente + trending_tags: Etiquetas populares + toc: Contenido + +copyright: + # Shown at the bottom of the post + license: + template: Esta entrada está licenciada bajo :LICENSE_NAME por el autor. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Algunos derechos reservados. + verbose: >- + Salvo que se indique explícitamente, las entradas de este blog están licenciadas + bajo la Creative Commons Attribution 4.0 International (CC BY 4.0) License por el autor. + +meta: Hecho con :PLATFORM usando el tema :THEME + +not_found: + statment: Lo sentimos, hemos perdido esa URL o apunta a algo que no existe. + +notification: + update_found: Hay una nueva versión de contenido disponible. + update: Actualizar + +# ----- Posts related labels ----- + +post: + written_by: Por + posted: Publicado + updated: Actualizado + words: palabras + pageview_measure: visitas + read_time: + unit: min + prompt: " de lectura" + relate_posts: Lecturas adicionales + share: Compartir + button: + next: Nuevo + previous: Anterior + copy_code: + succeed: ¡Copiado! + share_link: + title: Copiar enlace + succeed: ¡Enlace copiado! + +# categories page +categories: + category_measure: categorias + post_measure: entradas diff --git a/_data/locales/fi-FI.yml b/_data/locales/fi-FI.yml new file mode 100644 index 0000000..c817d2b --- /dev/null +++ b/_data/locales/fi-FI.yml @@ -0,0 +1,90 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Julkaisu + category: Kateogoria + tag: Tagi + +# The tabs of sidebar +tabs: + # format: : + home: Koti + categories: Kateogoriat + tags: Tagit + archives: Arkistot + about: Minusta + +# the text displayed in the search bar & search results +search: + hint: etsi + cancel: Peruuta + no_results: Hups! Ei tuloksia. + +panel: + lastmod: Viimeksi päivitetty + trending_tags: Trendaavat tagit + toc: Sisältö + +copyright: + # Shown at the bottom of the post + license: + template: Tämä julkaisu on lisenssoitu :LICENSE_NAME julkaisijan toimesta. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Jotkut oikeudet pidätetään. + verbose: >- + Paitsi jos erikseen mainitaan on kaikki sisältö Creative Commons Attribution 4.0 International (CC BY 4.0) Lisensoitu kirjoittajan toimesta. + +meta: Käytetään :PLATFORM iä Teema :THEME + +not_found: + statment: Valitettavasti tällä URL-osoitteella ei ole saatavilla sisältöä. + +notification: + update_found: Uusi versio sisällöstä on saatavilla. + update: Päivitä + +# ----- Posts related labels ----- + +post: + written_by: Kirjoittaja + posted: Julkaistu + updated: Päivitetty + words: sanaa + pageview_measure: katselukertoja + read_time: + unit: minuuttia + prompt: lukea + relate_posts: Jatka lukemista + share: Jaa + button: + next: Uudempi + previous: Vanhempi + copy_code: + succeed: Kopiotu! + share_link: + title: Kopioi linkki + succeed: Linkki kopioitu onnistuneesti! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: kategoria + plural: kategoriat + post_measure: + singular: julkaisu + plural: julkaisut diff --git a/_data/locales/fr-FR.yml b/_data/locales/fr-FR.yml new file mode 100644 index 0000000..72b034d --- /dev/null +++ b/_data/locales/fr-FR.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Post + category: Catégorie + tag: Tag + +# The tabs of sidebar +tabs: + # format: : + home: Accueil + categories: Catégories + tags: Tags + archives: Archives + about: A propos de + +# the text displayed in the search bar & search results +search: + hint: recherche + cancel: Annuler + no_results: Oups ! Aucun résultat trouvé. + +panel: + lastmod: Récemment mis à jour + trending_tags: Tags tendance + toc: Contenu + +copyright: + # Shown at the bottom of the post + license: + template: Cet article est sous licence :LICENSE_NAME par l'auteur. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Certains droits réservés. + verbose: >- + Sauf mention contraire, les articles de ce site sont publiés sous licence + sous la licence Creative Commons Attribution 4.0 International (CC BY 4.0) par l'auteur. + +meta: Propulsé par :PLATFORM avec le thème :THEME + +not_found: + statment: Désolé, nous avons égaré cette URL ou elle pointe vers quelque chose qui n'existe pas. + +notification: + update_found: Une nouvelle version du contenu est disponible. + update: Mise à jour + +# ----- Posts related labels ----- + +post: + written_by: Par + posted: Posté + updated: Mis à jour + words: mots + pageview_measure: vues + read_time: + unit: min + prompt: lire + relate_posts: Autres lectures + share: Partager + button: + next: Plus récent + previous: Plus ancien + copy_code: + succeed: Copié ! + share_link: + title: Copier le lien + succeed: Lien copié avec succès ! + +# categories page +categories: + category_measure: catégories + post_measure: posts diff --git a/_data/locales/hu-HU.yml b/_data/locales/hu-HU.yml new file mode 100644 index 0000000..b09f2cd --- /dev/null +++ b/_data/locales/hu-HU.yml @@ -0,0 +1,79 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Bejegyzés + category: Kategória + tag: Címke + +# The tabs of sidebar +tabs: + # format: : + home: Kezdőlap + categories: Kategóriák + tags: Címkék + archives: Archívum + about: Rólam + +# the text displayed in the search bar & search results +search: + hint: keresés + cancel: Mégse + no_results: Oops! Nincs találat a keresésre. + +panel: + lastmod: Legutóbb frissítve + trending_tags: Népszerű Címkék + toc: Tartalom + links: Blog linkek + +copyright: + # Shown at the bottom of the post + license: + template: A bejegyzés :LICENSE_NAME licenccel rendelkezik. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Néhány jog fenntartva. + verbose: >- + Az oldalon található tartalmak + Creative Commons Attribution 4.0 International (CC BY 4.0) licenccel rendelkeznek, + hacsak másképp nincs jelezve. + +meta: Készítve :PLATFORM motorral :THEME témával + +not_found: + statment: Sajnáljuk, az URL-t rosszul helyeztük el, vagy valami nem létezőre mutat. + +notification: + update_found: Elérhető a tartalom új verziója. + update: Frissítés + +# ----- Posts related labels ----- + +post: + written_by: Szerző + posted: Létrehozva + updated: Frissítve + words: szó + pageview_measure: látogató + read_time: + unit: perc + prompt: elolvasni + relate_posts: További olvasnivaló + share: Megosztás + button: + next: Újabb + previous: Régebbi + copy_code: + succeed: Másolva! + share_link: + title: Link másolása + succeed: Link sikeresen másolva! + +# categories page +categories: + category_measure: kategória + post_measure: bejegyzés diff --git a/_data/locales/id-ID.yml b/_data/locales/id-ID.yml new file mode 100644 index 0000000..29ad156 --- /dev/null +++ b/_data/locales/id-ID.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Postingan + category: Kategori + tag: Tagar + +# The tabs of sidebar +tabs: + # format: : + home: Beranda + categories: Kategori + tags: Tagar + archives: Arsip + about: Tentang + +# the text displayed in the search bar & search results +search: + hint: Cari + cancel: Batal + no_results: Ups! Tidak ada hasil yang ditemukan. + +panel: + lastmod: Postingan Terbaru + trending_tags: Tagar Terpopuler + toc: Konten + +copyright: + # Shown at the bottom of the post + license: + template: Postingan ini dilisensikan di bawah :LICENSE_NAME oleh penulis. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Sebagian konten dilindungi. + verbose: >- + Kecuali jika dinyatakan, Postingan blog di situs ini dilisensikan + di bawah Lisensi Creative Commons Attribution 4.0 International (CC BY 4.0) oleh penulis. + +meta: Didukung oleh :PLATFORM dengan tema :THEME + +not_found: + statment: Maaf, kami gagal menemukan URL itu atau memang mengarah ke sesuatu yang tidak ada. + +notification: + update_found: Versi konten baru tersedia. + update: Perbarui + +# ----- Posts related labels ----- + +post: + written_by: Oleh + posted: Diterbitkan + updated: Diperbarui + words: kata + pageview_measure: dilihat + read_time: + unit: menit + prompt: baca + relate_posts: Postingan Lainya + share: Bagikan + button: + next: Terbaru + previous: Terlama + copy_code: + succeed: Disalin! + share_link: + title: Salin tautan + succeed: Tautan berhasil disalin! + +# categories page +categories: + category_measure: kategori + post_measure: Postingan diff --git a/_data/locales/it-IT.yml b/_data/locales/it-IT.yml new file mode 100644 index 0000000..cf7b691 --- /dev/null +++ b/_data/locales/it-IT.yml @@ -0,0 +1,90 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Post + category: Categoria + tag: Tag + +# The tabs of sidebar +tabs: + # format: : + home: Pagina principale + categories: Categorie + tags: Tags + archives: Archivio + about: Informazioni + +# the text displayed in the search bar & search results +search: + hint: ricerca + cancel: Cancella + no_results: Oops! La ricerca non ha fornito risultati. + +panel: + lastmod: Aggiornati recentemente + trending_tags: Tags più cliccati + toc: Contenuti + +copyright: + # Shown at the bottom of the post + license: + template: Questo post è sotto licenza :LICENSE_NAME a nome dell'autore. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Alcuni diritti riservati. + verbose: >- + Eccetto quando esplicitamente menzionato, i post di questo blog sono da ritenersi sotto + i termini di licenza Creative Commons Attribution 4.0 International (CC BY 4.0). + +meta: Servizio offerto da :PLATFORM con tema :THEME +not_found: + statment: Ci scusiamo, non è stato possibile trovare l'URL in questione. Potrebbe puntare ad una pagina non esistente. + +notification: + update_found: Nuova versione del contenuto disponibile. + update: Aggiornamento + +# ----- Posts related labels ----- + +post: + written_by: Da + posted: Postato + updated: Aggiornato + words: parole + pageview_measure: visioni + read_time: + unit: min + prompt: lettura + relate_posts: Continua a leggere + share: Condividi + button: + next: Più recenti + previous: Meno recenti + copy_code: + succeed: Copiato! + share_link: + title: Copia link + succeed: Link copiato con successo! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: categoria + plural: categorie + post_measure: + singular: post + plural: posts diff --git a/_data/locales/ko-KR.yml b/_data/locales/ko-KR.yml new file mode 100644 index 0000000..4dd221b --- /dev/null +++ b/_data/locales/ko-KR.yml @@ -0,0 +1,84 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: 포스트 + category: 카테고리 + tag: 태그 + +# The tabs of sidebar +tabs: + # format: : + home: 홈 + categories: 카테고리 + tags: 태그 + archives: 아카이브 + about: 정보 + +# the text displayed in the search bar & search results +search: + hint: 검색 + cancel: 취소 + no_results: 검색 결과가 없습니다. + +panel: + lastmod: 최근 업데이트 + trending_tags: 인기 태그 + toc: 바로가기 + +copyright: + # Shown at the bottom of the post + license: + template: 이 기사는 저작권자의 :LICENSE_NAME 라이센스를 따릅니다. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: 일부 권리 보유 + verbose: >- + 명시되지 않는 한 이 사이트의 블로그 게시물은 작성자의 + Creative Commons Attribution 4.0 International(CC BY 4.0) 라이선스에 따라 사용이 허가되었습니다. + +meta: Powered by :PLATFORM with :THEME theme + +not_found: + statment: 해당 URL은 존재하지 않습니다. + +notification: + update_found: 새 버전의 콘텐츠를 사용할 수 있습니다. + update: 업데이트 + +# ----- Posts related labels ----- + +post: + written_by: By + posted: 게시 + updated: 업데이트 + words: 단어 + pageview_measure: 조회 + read_time: + unit: 분 + prompt: 읽는 시간 + relate_posts: 관련된 글 + share: 공유하기 + button: + next: 다음 글 + previous: 이전 글 + copy_code: + succeed: 복사되었습니다! + share_link: + title: 링크 복사하기 + succeed: 링크가 복사되었습니다! + +# Date time format. +# See: , +df: + post: + strftime: "%Y/%m/%d" + dayjs: "YYYY/MM/DD" + +# categories page +categories: + category_measure: 카테고리 + post_measure: 포스트 diff --git a/_data/locales/my-MM.yml b/_data/locales/my-MM.yml new file mode 100644 index 0000000..98848d5 --- /dev/null +++ b/_data/locales/my-MM.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: ပို့စ် + category: ကဏ္ဍ + tag: နာမ(တက်ဂ်) + +# The tabs of sidebar +tabs: + # format: : + home: အဓိကစာမျက်နှာ + categories: ကဏ္ဍများ + tags: နာမ(တက်ဂ်)များ + archives: မှတ်တမ်း​တိုက် + about: အကြောင်းအရာ + +# the text displayed in the search bar & search results +search: + hint: ရှာဖွေမည် + cancel: ဖျက်သိမ်းမည် + no_results: အိုး! ဘာမှမရှိပါ + +panel: + lastmod: မကြာသေးမီကမွမ်းမံထားသည် + trending_tags: ခေတ်စားနေသည့်တက်ဂ်များ + toc: အကြောင်းအရာများ + +copyright: + # Shown at the bottom of the post + license: + template: ဤပို့စ်သည်စာရေးသူ၏ :LICENSE_NAME လိုင်စင်ရထားသည်။ + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: မူပိုင်ခွင့်အချို့ကို လက်ဝယ်ထားသည်။ + verbose: >- + အခြားမှတ်သားထားချက်များမှလွဲ၍ ဤဆိုက်ရှိ ဘလော့ဂ်ပို့စ်များသည် စာရေးသူ၏ + Creative Commons Attribution 4.0 International (CC BY 4.0) အောက်တွင် လိုင်စင်ရထားပါသည်။ + +meta: Powered by :PLATFORM with :THEME theme + +not_found: + statment: ဝမ်းနည်းပါသည်၊ ကျွန်ုပ်တို့သည် အဆိုပါ URL ကို မှားယွင်းစွာ နေရာချထားခြင်း သို့မဟုတ် ၎င်းသည် မရှိသောအရာကို ညွှန်ပြနေပါသည်။ + +notification: + update_found: အကြောင်းအရာဗားရှင်းအသစ်ကို ရနိုင်ပါပြီ။ + update: အပ်ဒိတ် + +# ----- Posts related labels ----- + +post: + written_by: ကရေးသားခဲ့သည်။ + posted: တင်ထားခဲ့သည်။ + updated: မွမ်းမံထားခဲ့သည်။ + words: စကားလုံးများ + pageview_measure: အမြင်များ + read_time: + unit: မိနစ် + prompt: ဖတ်ပါမည် + relate_posts: နောက်ထပ်ဖတ်ရန် + share: မျှဝေရန် + button: + next: အသစ်များ + previous: အဟောင်းများ + copy_code: + succeed: ကူးယူလိုက်ပြီ။ + share_link: + title: လင့်ခ်ကို ကူးယူရန် + succeed: လင့်ခ်ကို ကူးယူလိုက်ပြီ။ + +# categories page +categories: + category_measure: ကဏ္ဍများ + post_measure: ပို့စ်များ diff --git a/_data/locales/pt-BR.yml b/_data/locales/pt-BR.yml new file mode 100644 index 0000000..4cef833 --- /dev/null +++ b/_data/locales/pt-BR.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Post + category: Categoria + tag: Tag + +# The tabs of sidebar +tabs: + # format: : + home: Home + categories: Categorias + tags: Tags + archives: Arquivos + about: Sobre + +# the text displayed in the search bar & search results +search: + hint: Buscar + cancel: Cancelar + no_results: Oops! Nenhum resultado encontrado. + +panel: + lastmod: Atualizados recentemente + trending_tags: Trending Tags + toc: Conteúdo + +copyright: + # Shown at the bottom of the post + license: + template: Esta postagem está licenciada sob :LICENSE_NAME pelo autor. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Alguns direitos reservados. + verbose: >- + Exceto onde indicado de outra forma, as postagens do blog neste site são licenciadas sob a + Creative Commons Attribution 4.0 International (CC BY 4.0) License pelo autor. + +meta: Feito com :PLATFORM usando o tema :THEME + +not_found: + statment: Desculpe, a página não foi encontrada. + +notification: + update_found: Uma nova versão do conteúdo está disponível. + update: atualização + +# ----- Posts related labels ----- + +post: + written_by: Por + posted: Postado em + updated: Atualizado + words: palavras + pageview_measure: visualizações + read_time: + unit: min + prompt: " de leitura" + relate_posts: Leia também + share: Compartilhar + button: + next: Próximo + previous: Anterior + copy_code: + succeed: Copiado! + share_link: + title: Copie o link + succeed: Link copiado com sucesso! + +# categories page +categories: + category_measure: categorias + post_measure: posts diff --git a/_data/locales/ru-RU.yml b/_data/locales/ru-RU.yml new file mode 100644 index 0000000..4377300 --- /dev/null +++ b/_data/locales/ru-RU.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Публикация + category: Категория + tag: Тег + +# The tabs of sidebar +tabs: + # format: : + home: Домашняя страница + categories: Категории + tags: Теги + archives: Архив + about: О сайте + +# the text displayed in the search bar & search results +search: + hint: поиск + cancel: Отменить + no_results: Ох! Ничего не найдено. + +panel: + lastmod: Недавно обновлено + trending_tags: Популярные теги + toc: Содержание + +copyright: + # Shown at the bottom of the post + license: + template: Публикация защищена лицензией :LICENSE_NAME. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Некоторые права защищены. + verbose: >- + Публикации на сайте защищены лицензией Creative Commons Attribution 4.0 International (CC BY 4.0), + если в тексте публикации не указано иное. + +meta: Powered by :PLATFORM with :THEME theme + +not_found: + statment: Извините, эта ссылка указывает на ресурс который не существует. + +notification: + update_found: Доступна новая версия контента. + update: Обновлять + +# ----- Posts related labels ----- + +post: + written_by: Автор + posted: Время публикации + updated: Обновлено + words: слов + pageview_measure: просмотров + read_time: + unit: минут + prompt: чтения + relate_posts: Вам также может быть интересно + share: Поделиться + button: + next: Предыдущая публикация + previous: Следующая публикация + copy_code: + succeed: Скопировано успешно! + share_link: + title: Скопировать ссылку + succeed: Ссылка успешно скопирована! + +# categories page +categories: + category_measure: категории + post_measure: публикации diff --git a/_data/locales/sl-SI.yml b/_data/locales/sl-SI.yml new file mode 100644 index 0000000..7ab18b1 --- /dev/null +++ b/_data/locales/sl-SI.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Objava #Post + category: Kategorija #Category + tag: Oznaka #Tag + +# The tabs of sidebar +tabs: + # format: : + home: Domov #Home + categories: Kategorije #Categories + tags: Oznake #Tags + archives: Arhiv #Archives + about: O meni #About + +# the text displayed in the search bar & search results +search: + hint: išči #search + cancel: Prekliči #Cancel + no_results: Ups! Vsebina ni bila najdena #Oops! No results found. + +panel: + lastmod: Nedavno Posodobljeno #Recently Updated + trending_tags: Priljubljene Oznake #Trending Tags + toc: Vsebina #Contents + +copyright: + # Shown at the bottom of the post + license: + template: Ta objava je licencirana pod :LICENCE_NAME s strani avtorja. #This post is licensed under :LICENSE_NAME by the author. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Nekatere pravice pridržane. #Some rights reserved. + verbose: >- + Razen kjer navedeno drugače, vse objave spletnega dnevnika so licencirane + pod Creative Commons Attribution 4.0 International (CC BY 4.0) s strani avtorja. + +meta: Uporabljena :PLATFORM tema :THEME #Using the :PLATFORM theme :THEME + +not_found: + statment: Oprostite, hiperpovezava je neustrezna ali vsebina ne obstajata. #Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. + +notification: + update_found: Novejša različica vsebine je na voljo. #A new version of content is available. + update: Posodobi #Update + +# ----- Posts related labels ----- + +post: + written_by: Od #By + posted: Objavljeno #Posted + updated: Posodobljeno #Updated + words: besede #words + pageview_measure: ogledi #views + read_time: + unit: min + prompt: beri #read + relate_posts: Nadaljnje branje #Further Reading + share: Deli #Share + button: + next: Novejše #Newer + previous: Starejše #Older + copy_code: + succeed: Kopirano! #Copied! + share_link: + title: Kopiraj povezavo #Copy link + succeed: Povezava uspešno kopirana! #Link copied successfully! + +# Date time format. +# See: , +df: + post: + strftime: "%e %b, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: kategorija #category + plural: kategorije #categories + post_measure: + singular: objava #post + plural: objave #posts diff --git a/_data/locales/sv-SE.yml b/_data/locales/sv-SE.yml new file mode 100644 index 0000000..7ec2ee2 --- /dev/null +++ b/_data/locales/sv-SE.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Inlägg #Post + category: Kategori #Category + tag: Tagga #Tag + +# The tabs of sidebar +tabs: + # format: : + home: Hem #Home + categories: Kategorier #Categories + tags: Taggar #Tags + archives: Arkiv #Archives + about: Om #About + +# the text displayed in the search bar & search results +search: + hint: sök + cancel: Avbryt + no_results: Hoppsan! Hittade inga sökträffar. + +panel: + lastmod: Senast uppdaterad + trending_tags: Trendande taggar + toc: Innehåll + +copyright: + # Shown at the bottom of the post + license: + template: Den här posten är publicerad under licensen :LICENSE_NAME av författaren. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Vissa rättigheter är reserverade. + verbose: >- + Om inte annat anges är blogginläggen på denna webbplats licensierade + under Creative Commons Attribution 4.0 International (CC BY 4.0) av författaren. + +meta: Byggd med :PLATFORM och temat :THEME + +not_found: + statment: Ursäkta, vi har tappat bort den här webbadressen eller så pekar den på något som inte längre finns. + +notification: + update_found: Det finns en ny version av innehållet. + update: Uppdatera sidan + +# ----- Posts related labels ----- + +post: + written_by: Av + posted: Postad + updated: Uppdaterad + words: ord + pageview_measure: visningar + read_time: + unit: min + prompt: läsning + relate_posts: Mer läsning + share: Dela + button: + next: Nyare + previous: Äldre + copy_code: + succeed: Kopierat! + share_link: + title: Kopiera länk + succeed: Länken har kopierats! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: kategori + plural: kategorier + post_measure: + singular: inlägg + plural: inlägg diff --git a/_data/locales/th.yml b/_data/locales/th.yml new file mode 100644 index 0000000..22cb00a --- /dev/null +++ b/_data/locales/th.yml @@ -0,0 +1,91 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: โพสต์ + category: หมวดหมู่ + tag: แท็ก + +# The tabs of sidebar +tabs: + # format: : + home: หน้าแรก + categories: หมวดหมู่ + tags: แท็ก + archives: คลังเก็บ + about: เกี่ยวกับ + +# the text displayed in the search bar & search results +search: + hint: ค้นหา + cancel: ยกเลิก + no_results: โอ๊ะ! ไม่พบผลลัพธ์ + +panel: + lastmod: อัปเดตล่าสุด + trending_tags: แท็กยอดนิยม + toc: เนื้อหา + +copyright: + # Shown at the bottom of the post + license: + template: โพสต์นี้อยู่ภายใต้การอนุญาต :LICENSE_NAME โดยผู้เขียน + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: สงวนลิขสิทธิ์เป็นบางส่วน + verbose: >- + เว้นแต่ว่าจะระบุเป็นอย่างอื่น โพสต์บนเว็บไซต์นี้อยู่ภายใต้ + สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบ 4.0 นานาชาติ (CC BY 4.0) โดยผู้เขียน + +meta: กำลังใช้ธีมของ :PLATFORM ชื่อ :THEME + +not_found: + statment: ขออภัย เราวาง URL นั้นไว้ผิดที่ หรือมันชี้ไปยังสิ่งที่ไม่มีอยู่ + +notification: + update_found: มีเวอร์ชันใหม่ของเนื้อหา + update: อัปเดต + +# ----- Posts related labels ----- + +post: + written_by: โดย + posted: โพสต์เมื่อ + updated: อัปเดตเมื่อ + words: คำ + pageview_measure: ครั้ง + read_time: + unit: นาที + prompt: อ่าน + relate_posts: อ่านต่อ + share: แชร์ + button: + next: ใหม่กว่า + previous: เก่ากว่า + copy_code: + succeed: คัดลอกแล้ว! + share_link: + title: คัดลอกลิงก์ + succeed: คัดลอกลิงก์เรียบร้อยแล้ว! + +# Date time format. +# See: , +df: + post: + strftime: "%b %e, %Y" + dayjs: "ll" + archives: + strftime: "%b" + dayjs: "MMM" + +# categories page +categories: + category_measure: + singular: หมวดหมู่ + plural: หมวดหมู่ + post_measure: + singular: โพสต์ + plural: โพสต์ diff --git a/_data/locales/tr-TR.yml b/_data/locales/tr-TR.yml new file mode 100644 index 0000000..851f5fc --- /dev/null +++ b/_data/locales/tr-TR.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Gönderi + category: Kategori + tag: Etiket + +# The tabs of sidebar +tabs: + # format: : + home: Ana Sayfa + categories: Kategoriler + tags: Etiketler + archives: Arşiv + about: Hakkında + +# the text displayed in the search bar & search results +search: + hint: Ara... + cancel: İptal + no_results: Hop! Öyle bir şey bulamadım. + +panel: + lastmod: Yeni Güncellendi + trending_tags: Yükselen Etiketler + toc: İçindekiler + +copyright: + # Shown at the bottom of the post + license: + template: Bu gönderi :LICENSE_NAME lisansı altındadır. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/deed.tr + + # Displayed in the footer + brief: Bazı hakları saklıdır. + verbose: >- + Aksi belirtilmediği sürece, bu sitedeki gönderiler Creative Commons Atıf 4.0 Uluslararası (CC BY 4.0) Lisansı altındadır. + Kısaca sayfa linkini de vererek paylaşabilir veya düzenleyip paylaşabilirsin. + +meta: :PLATFORM ve :THEME teması + +not_found: + statment: Üzgünüz, bu linki yanlış yerleştirdik veya var olmayan bir şeye işaret ediyor. + +notification: + update_found: İçeriğin yeni bir sürümü mevcut. + update: Güncelle + +# ----- Posts related labels ----- + +post: + written_by: Yazan + posted: Gönderilme Tarihi + updated: Güncellenme Tarihi + words: sözcük + pageview_measure: görüntülenme + read_time: + unit: dakikada + prompt: okunabilir + relate_posts: Benzer Gönderiler + share: Paylaş + button: + next: İleri + previous: Geri + copy_code: + succeed: Kopyalandı. + share_link: + title: Linki kopyala + succeed: Link kopyalandı. + +# categories page +categories: + category_measure: kategori + post_measure: gönderi diff --git a/_data/locales/uk-UA.yml b/_data/locales/uk-UA.yml new file mode 100644 index 0000000..b605073 --- /dev/null +++ b/_data/locales/uk-UA.yml @@ -0,0 +1,77 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Публікація + category: Категорія + tag: Тег + +# The tabs of sidebar +tabs: + # format: : + home: Домашня сторінка + categories: Категорії + tags: Теги + archives: Архів + about: Про сайт + +# the text displayed in the search bar & search results +search: + hint: пошук + cancel: Скасувати + no_results: Ох! Нічого не знайдено. + +panel: + lastmod: Нещодавно оновлено + trending_tags: Популярні теги + toc: Зміст + +copyright: + # Shown at the bottom of the post + license: + template: Публікація захищена ліцензією :LICENSE_NAME. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Деякі права захищено. + verbose: >- + Публікації на сайті захищено ліцензією Creative Commons Attribution 4.0 International (CC BY 4.0), + якщо інше не вказано в тексті. + +meta: Powered by :PLATFORM with :THEME theme + +not_found: + statment: Вибачте, це посилання вказує на ресурс, що не існує. + +notification: + update_found: Доступна нова версія вмісту. + update: Оновлення + +# ----- Posts related labels ----- + +post: + written_by: Автор + posted: Час публікації + updated: Оновлено + words: слів + pageview_measure: переглядів + read_time: + unit: хвилин + prompt: читання + relate_posts: Вас також може зацікавити + share: Поділитися + button: + next: Попередня публікація + previous: Наступна публікація + copy_code: + succeed: Успішно скопійовано! + share_link: + title: Скопіювати посилання + succeed: Посилання успішно скопійовано! + +# categories page +categories: + category_measure: категорії + post_measure: публікації diff --git a/_data/locales/vi-VN.yml b/_data/locales/vi-VN.yml new file mode 100644 index 0000000..617431a --- /dev/null +++ b/_data/locales/vi-VN.yml @@ -0,0 +1,76 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: Bài viết + category: Danh mục + tag: Thẻ + +# The tabs of sidebar +tabs: + # format: : + home: Trang chủ + categories: Các danh mục + tags: Các thẻ + archives: Lưu trữ + about: Giới thiệu + +# the text displayed in the search bar & search results +search: + hint: tìm kiếm + cancel: Hủy + no_results: Không có kết quả tìm kiếm. + +panel: + lastmod: Mới cập nhật + trending_tags: Các thẻ thịnh hành + toc: Mục lục + +copyright: + # Shown at the bottom of the post + license: + template: Bài viết này được cấp phép bởi tác giả theo giấy phép :LICENSE_NAME. + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: Một số quyền được bảo lưu. + verbose: >- + Trừ khi có ghi chú khác, các bài viết đăng trên trang này được cấp phép bởi tác giả theo giấy phép Creative Commons Attribution 4.0 International (CC BY 4.0). + +meta: Trang web này được tạo bởi :PLATFORM với chủ đề :THEME + +not_found: + statment: Xin lỗi, chúng tôi đã đặt nhầm URL hoặc đường dẫn trỏ đến một trang nào đó không tồn tại. + +notification: + update_found: Đã có phiên bản mới của nội dung. + update: Cập nhật + +# ----- Posts related labels ----- + +post: + written_by: Viết bởi + posted: Đăng lúc + updated: Cập nhật lúc + words: từ + pageview_measure: lượt xem + read_time: + unit: phút + prompt: đọc + relate_posts: Bài viết liên quan + share: Chia sẻ + button: + next: Mới hơn + previous: Cũ hơn + copy_code: + succeed: Đã sao chép! + share_link: + title: Sao chép đường dẫn + succeed: Đã sao chép đường dẫn thành công! + +# categories page +categories: + category_measure: danh mục + post_measure: bài viết diff --git a/_data/locales/zh-CN.yml b/_data/locales/zh-CN.yml new file mode 100644 index 0000000..f828134 --- /dev/null +++ b/_data/locales/zh-CN.yml @@ -0,0 +1,83 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: 文章 + category: 分类 + tag: 标签 + +# The tabs of sidebar +tabs: + # format: : + home: 首页 + categories: 分类 + tags: 标签 + archives: 归档 + about: 关于 + +# the text displayed in the search bar & search results +search: + hint: 搜索 + cancel: 取消 + no_results: 搜索结果为空 + +panel: + lastmod: 最近更新 + trending_tags: 热门标签 + toc: 文章内容 + +copyright: + # Shown at the bottom of the post + license: + template: 本文由作者按照 :LICENSE_NAME 进行授权 + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: 保留部分权利。 + verbose: >- + 除非另有说明,本网站上的博客文章均由作者按照知识共享署名 4.0 国际 (CC BY 4.0) 许可协议进行授权。 + +meta: 本站采用 :PLATFORM 主题 :THEME + +not_found: + statment: 抱歉,我们放错了该 URL,或者它指向了不存在的内容。 + +notification: + update_found: 发现新版本的内容。 + update: 更新 + +# ----- Posts related labels ----- + +post: + written_by: 作者 + posted: 发表于 + updated: 更新于 + words: 字 + pageview_measure: 次浏览 + read_time: + unit: 分钟 + prompt: 阅读 + relate_posts: 相关文章 + share: 分享 + button: + next: 下一篇 + previous: 上一篇 + copy_code: + succeed: 已复制! + share_link: + title: 分享链接 + succeed: 链接已复制! + +# Date time format. +# See: , +df: + post: + strftime: "%Y/%m/%d" + dayjs: "YYYY/MM/DD" + +# categories page +categories: + category_measure: 个分类 + post_measure: 篇文章 diff --git a/_data/locales/zh-TW.yml b/_data/locales/zh-TW.yml new file mode 100644 index 0000000..911253b --- /dev/null +++ b/_data/locales/zh-TW.yml @@ -0,0 +1,83 @@ +# The layout text of site + +# ----- Commons label ----- + +layout: + post: 文章 + category: 分類 + tag: 標籤 + +# The tabs of sidebar +tabs: + # format: : + home: 首頁 + categories: 分類 + tags: 標籤 + archives: 封存 + about: 關於 + +# the text displayed in the search bar & search results +search: + hint: 搜尋 + cancel: 取消 + no_results: 沒有搜尋結果 + +panel: + lastmod: 最近更新 + trending_tags: 熱門標籤 + toc: 文章摘要 + +copyright: + # Shown at the bottom of the post + license: + template: 本文章以 :LICENSE_NAME 授權 + name: CC BY 4.0 + link: https://creativecommons.org/licenses/by/4.0/ + + # Displayed in the footer + brief: 保留部份權利。 + verbose: >- + 除非另有說明,否則本網誌的文章均由作者按照姓名標示 4.0 國際 (CC BY 4.0) 授權條款進行授權。 + +meta: 本網站使用 :PLATFORM 產生,採用 :THEME 主題 + +not_found: + statment: 抱歉,您可能正在存取一個已被移動的 URL,或者它從未存在。 + +notification: + update_found: 發現新版本更新。 + update: 更新 + +# ----- Posts related labels ----- + +post: + written_by: 作者 + posted: 發布於 + updated: 更新於 + words: 字 + pageview_measure: 次瀏覽 + read_time: + unit: 分鐘 + prompt: 閱讀 + relate_posts: 相關文章 + share: 分享 + button: + next: 下一篇 + previous: 上一篇 + copy_code: + succeed: 已複製! + share_link: + title: 分享連結 + succeed: 已複製連結! + +# Date time format. +# See: , +df: + post: + strftime: "%Y/%m/%d" + dayjs: "YYYY/MM/DD" + +# categories page +categories: + category_measure: 個分類 + post_measure: 篇文章 diff --git a/_data/origin/basic.yml b/_data/origin/basic.yml new file mode 100644 index 0000000..14d865a --- /dev/null +++ b/_data/origin/basic.yml @@ -0,0 +1,48 @@ +# fonts + +webfonts: /assets/lib/fonts/main.css + +# Libraries + +jquery: + js: /assets/lib/jquery/jquery.min.js + +bootstrap: + css: /assets/lib/bootstrap/bootstrap.min.css + js: /assets/lib/bootstrap/bootstrap.bundle.min.js + +toc: + css: /assets/lib/tocbot/tocbot.min.css + js: /assets/lib/tocbot/tocbot.min.js + +fontawesome: + css: /assets/lib/fontawesome-free/css/all.min.css + +search: + js: /assets/lib/simple-jekyll-search/simple-jekyll-search.min.js + +mermaid: + js: /assets/lib/mermaid/mermaid.min.js + +dayjs: + js: + common: /assets/lib/dayjs/dayjs.min.js + locale: /assets/lib/dayjs/locale/en.min.js + relativeTime: /assets/lib/dayjs/plugin/relativeTime.min.js + localizedFormat: /assets/lib/dayjs/plugin/localizedFormat.min.js + +magnific-popup: + css: /assets/lib/magnific-popup/magnific-popup.css + js: /assets/lib/magnific-popup/jquery.magnific-popup.min.js + +lazysizes: + js: /assets/lib/lazysizes/lazysizes.min.js + +clipboard: + js: /assets/lib/clipboard/clipboard.min.js + +polyfill: + js: /assets/lib/polyfill-v3-es6/polyfill.min.js + +mathjax: + js: /assets/lib/mathjax/tex-chtml.js diff --git a/_data/origin/cors.yml b/_data/origin/cors.yml new file mode 100644 index 0000000..2d28bba --- /dev/null +++ b/_data/origin/cors.yml @@ -0,0 +1,59 @@ +# CDNs + +cdns: + # Google Fonts + - url: https://fonts.googleapis.com + - url: https://fonts.gstatic.com + args: crossorigin + - url: https://fonts.googleapis.com + # jsDelivr CDN + - url: https://cdn.jsdelivr.net + +# fonts + +webfonts: https://fonts.googleapis.com/css2?family=Lato&family=Source+Sans+Pro:wght@400;600;700;900&display=swap + +# Libraries + +jquery: + js: https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js + +bootstrap: + css: https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css + js: https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js + +toc: + css: https://cdn.jsdelivr.net/npm/tocbot@4.21.0/dist/tocbot.min.css + js: https://cdn.jsdelivr.net/npm/tocbot@4.21.0/dist/tocbot.min.js + +fontawesome: + css: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.0/css/all.min.css + +search: + js: https://cdn.jsdelivr.net/npm/simple-jekyll-search@1.10.0/dest/simple-jekyll-search.min.js + +mermaid: + js: https://cdn.jsdelivr.net/npm/mermaid@9.4.3/dist/mermaid.min.js + +dayjs: + js: + common: https://cdn.jsdelivr.net/npm/dayjs@1.11.7/dayjs.min.js + locale: https://cdn.jsdelivr.net/npm/dayjs@1.11.7/locale/:LOCALE.min.js + relativeTime: https://cdn.jsdelivr.net/npm/dayjs@1.11.7/plugin/relativeTime.min.js + localizedFormat: https://cdn.jsdelivr.net/npm/dayjs@1.11.7/plugin/localizedFormat.min.js + +magnific-popup: + css: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/magnific-popup.min.css + js: https://cdn.jsdelivr.net/npm/magnific-popup@1.1.0/dist/jquery.magnific-popup.min.js + +lazysizes: + js: https://cdn.jsdelivr.net/npm/lazysizes@5.3.2/lazysizes.min.js + +clipboard: + js: https://cdn.jsdelivr.net/npm/clipboard@2.0.11/dist/clipboard.min.js + +polyfill: + js: https://polyfill.io/v3/polyfill.min.js?features=es6 + +mathjax: + js: https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-chtml.js diff --git a/_data/share.yml b/_data/share.yml new file mode 100644 index 0000000..c1d4d63 --- /dev/null +++ b/_data/share.yml @@ -0,0 +1,25 @@ +# Sharing options at the bottom of the post. +# Icons from + +platforms: + - type: Twitter + icon: "fab fa-twitter" + link: "https://twitter.com/intent/tweet?text=TITLE&url=URL" + + - type: Facebook + icon: "fab fa-facebook-square" + link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL" + + - type: Telegram + icon: "fab fa-telegram" + link: "https://t.me/share/url?url=URL&text=TITLE" + + # Uncomment below if you need to. + # + # - type: Linkedin + # icon: "fab fa-linkedin" + # link: "https://www.linkedin.com/sharing/share-offsite/?url=URL" + # + # - type: Weibo + # icon: "fab fa-weibo" + # link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL" diff --git a/_includes/comments.html b/_includes/comments.html new file mode 100644 index 0000000..39e521f --- /dev/null +++ b/_includes/comments.html @@ -0,0 +1,5 @@ + +{% if page.comments and site.comments.active %} + {% capture path %}comments/{{ site.comments.active }}.html{% endcapture %} + {% include {{ path }} %} +{% endif %} diff --git a/_includes/comments/disqus.html b/_includes/comments/disqus.html new file mode 100644 index 0000000..d2f59df --- /dev/null +++ b/_includes/comments/disqus.html @@ -0,0 +1,49 @@ + +
+

Comments powered by Disqus.

+
+ + diff --git a/_includes/comments/giscus.html b/_includes/comments/giscus.html new file mode 100644 index 0000000..ed918a9 --- /dev/null +++ b/_includes/comments/giscus.html @@ -0,0 +1,64 @@ + + diff --git a/_includes/comments/utterances.html b/_includes/comments/utterances.html new file mode 100644 index 0000000..afd7cd3 --- /dev/null +++ b/_includes/comments/utterances.html @@ -0,0 +1,51 @@ + + + + diff --git a/_includes/datetime.html b/_includes/datetime.html new file mode 100644 index 0000000..53258ba --- /dev/null +++ b/_includes/datetime.html @@ -0,0 +1,19 @@ + + +{% assign wrap_elem = include.wrap | default: 'em' %} +{% assign df_strftime = site.data.locales[include.lang].df.post.strftime | default: '%d/%m/%Y' %} +{% assign df_dayjs = site.data.locales[include.lang].df.post.dayjs | default: 'DD/MM/YYYY' %} + +<{{ wrap_elem }} + class="{% if include.class %}{{ include.class }}{% endif %}" + data-ts="{{ include.date | date: '%s' }}" + data-df="{{ df_dayjs }}" + {% if include.tooltip %} + data-bs-toggle="tooltip" data-bs-placement="bottom" + {% endif %} +> + {{ include.date | date: df_strftime }} + diff --git a/_includes/embed/twitch.html b/_includes/embed/twitch.html new file mode 100644 index 0000000..ab0419a --- /dev/null +++ b/_includes/embed/twitch.html @@ -0,0 +1,4 @@ + diff --git a/_includes/embed/youtube.html b/_includes/embed/youtube.html new file mode 100644 index 0000000..715063c --- /dev/null +++ b/_includes/embed/youtube.html @@ -0,0 +1,6 @@ + diff --git a/_includes/favicons.html b/_includes/favicons.html new file mode 100644 index 0000000..201f6d8 --- /dev/null +++ b/_includes/favicons.html @@ -0,0 +1,17 @@ + + +{% capture favicon_path %}{{ '/assets/img/favicons' | relative_url }}{% endcapture %} + + + + + + + + + + + diff --git a/_includes/footer.html b/_includes/footer.html new file mode 100644 index 0000000..3b36c4a --- /dev/null +++ b/_includes/footer.html @@ -0,0 +1,34 @@ + + +
+
+
+

+ {%- capture _platform -%} + Jekyll + {%- endcapture -%} + + {%- capture _theme -%} + Chirpy + {%- endcapture -%} + + {{ site.data.locales[include.lang].meta | replace: ':PLATFORM', _platform | replace: ':THEME', _theme }} +

+ +

+ {{- '©' }} + {{ 'now' | date: '%Y' }} + {{ site.social.name }}. + {% if site.data.locales[include.lang].copyright.brief %} + + {{- site.data.locales[include.lang].copyright.brief -}} + + {% endif %} +

+
+
+
diff --git a/_includes/google-analytics.html b/_includes/google-analytics.html new file mode 100644 index 0000000..e5e5119 --- /dev/null +++ b/_includes/google-analytics.html @@ -0,0 +1,14 @@ + + + + diff --git a/_includes/head.html b/_includes/head.html new file mode 100644 index 0000000..e4bfcb6 --- /dev/null +++ b/_includes/head.html @@ -0,0 +1,95 @@ + + + + + + + + + + + {% capture seo_tags %} + {% seo title=false %} + {% endcapture %} + + {% if page.image %} + {% assign img = page.image.path | default: page.image %} + + {% unless img contains '://' %} + {% assign img_path = page.img_path | append: '/' | append: img | replace: '//', '/' %} + {% capture target %}"{{ img | absolute_url }}"{% endcapture %} + + {% if site.img_cdn contains '//' %} + + {% capture replacement %}"{{ site.img_cdn }}{{ img_path }}"{% endcapture %} + {% else %} + + {%- capture replacement -%} + "{{ site.img_cdn | append: '/' | append: img_path | replace: '//', '/' | absolute_url }}" + {%- endcapture -%} + {% endif %} + + {% assign seo_tags = seo_tags | replace: target, replacement %} + {% endunless %} + {% endif %} + + {{ seo_tags }} + + + {%- unless page.layout == 'home' -%} + {{ page.title | append: ' | ' }} + {%- endunless -%} + {{ site.title }} + + + {% include_cached favicons.html %} + + {% if site.resources.ignore_env != jekyll.environment and site.resources.self_hosted %} + + + {% else %} + {% for cdn in site.data.origin[type].cdns %} + + + {% endfor %} + + + {% endif %} + + + {% if jekyll.environment == 'production' and site.google_analytics.id != empty and site.google_analytics.id %} + + + + + + {% endif %} + + + + + + + + + + {% if site.toc and page.toc %} + + {% endif %} + + {% if page.layout == 'page' or page.layout == 'post' %} + + + {% endif %} + + + + {% unless site.theme_mode %} + {% include mode-toggle.html %} + {% endunless %} + + {% include metadata-hook.html %} + diff --git a/_includes/js-selector.html b/_includes/js-selector.html new file mode 100644 index 0000000..f6c8e9d --- /dev/null +++ b/_includes/js-selector.html @@ -0,0 +1,106 @@ + + + + +{% assign urls = site.data.origin[type].jquery.js + | append: ',' + | append: site.data.origin[type].bootstrap.js + | append: ',' + | append: site.data.origin[type].search.js +%} + + + +{% if page.layout == 'post' or page.layout == 'page' or page.layout == 'home' %} + {% assign urls = urls | append: ',' | append: site.data.origin[type].lazysizes.js %} + + {% unless page.layout == 'home' %} + + {% assign urls = urls + | append: ',' + | append: site.data.origin[type]['magnific-popup'].js + | append: ',' + | append: site.data.origin[type].clipboard.js + %} + {% endunless %} +{% endif %} + +{% if page.layout == 'home' + or page.layout == 'post' + or page.layout == 'archives' + or page.layout == 'category' + or page.layout == 'tag' +%} + {% assign locale = site.lang | split: '-' | first %} + + {% assign urls = urls + | append: ',' + | append: site.data.origin[type].dayjs.js.common + | append: ',' + | append: site.data.origin[type].dayjs.js.locale + | replace: ':LOCALE', locale + | append: ',' + | append: site.data.origin[type].dayjs.js.relativeTime + | append: ',' + | append: site.data.origin[type].dayjs.js.localizedFormat + %} +{% endif %} + +{% if page.content contains ' + +{% if page.math %} + + + + +{% endif %} + +{% if jekyll.environment == 'production' %} + + {% if site.pwa.enabled %} + + {% else %} + + {% endif %} + + + {% if site.google_analytics.id != empty and site.google_analytics.id %} + {% include google-analytics.html %} + {% endif %} +{% endif %} diff --git a/_includes/jsdelivr-combine.html b/_includes/jsdelivr-combine.html new file mode 100644 index 0000000..cffa699 --- /dev/null +++ b/_includes/jsdelivr-combine.html @@ -0,0 +1,26 @@ +{% assign urls = include.urls | split: ',' %} + +{% assign combined_urls = nil %} + +{% assign domain = 'https://cdn.jsdelivr.net/' %} + +{% for url in urls %} + {% if url contains domain %} + {% assign url_snippet = url | slice: domain.size, url.size %} + + {% if combined_urls %} + {% assign combined_urls = combined_urls | append: ',' | append: url_snippet %} + {% else %} + {% assign combined_urls = domain | append: 'combine/' | append: url_snippet %} + {% endif %} + + {% elsif url contains '//' %} + + {% else %} + + {% endif %} +{% endfor %} + +{% if combined_urls %} + +{% endif %} diff --git a/_includes/lang.html b/_includes/lang.html new file mode 100644 index 0000000..19558a0 --- /dev/null +++ b/_includes/lang.html @@ -0,0 +1,8 @@ +{% comment %} + Detect appearance language and return it through variable "lang" +{% endcomment %} +{% if site.data.locales[site.lang] %} + {% assign lang = site.lang %} +{% else %} + {% assign lang = 'en' %} +{% endif %} diff --git a/_includes/language-alias.html b/_includes/language-alias.html new file mode 100644 index 0000000..abfa7ba --- /dev/null +++ b/_includes/language-alias.html @@ -0,0 +1,70 @@ +{% comment %} + + Convert the alias of the syntax language to the official name + + See: + +{% endcomment %} + +{% assign _lang = include.language | default: '' %} + +{% case _lang %} + {% when 'actionscript', 'as', 'as3' %} + {{ 'ActionScript' }} + {% when 'applescript' %} + {{ 'AppleScript' }} + {% when 'brightscript', 'bs', 'brs' %} + {{ 'BrightScript' }} + {% when 'cfscript', 'cfc' %} + {{ 'CFScript' }} + {% when 'coffeescript', 'coffee', 'coffee-script' %} + {{ 'CoffeeScript' }} + {% when 'cs', 'csharp' %} + {{ 'C#' }} + {% when 'erl' %} + {{ 'Erlang' }} + {% when 'graphql' %} + {{ 'GraphQL' }} + {% when 'haskell', 'hs' %} + {{ 'Haskell' }} + {% when 'javascript', 'js' %} + {{ 'JavaScript' }} + {% when 'make', 'mf', 'gnumake', 'bsdmake' %} + {{ 'Makefile' }} + {% when 'md', 'mkd' %} + {{ 'Markdown' }} + {% when 'm' %} + {{ 'Matlab' }} + {% when 'objective_c', 'objc', 'obj-c', 'obj_c', 'objectivec' %} + {{ 'Objective-C' }} + {% when 'perl', 'pl' %} + {{ 'Perl' }} + {% when 'php','php3','php4','php5' %} + {{ 'PHP' }} + {% when 'py' %} + {{ 'Python' }} + {% when 'rb' %} + {{ 'Ruby' }} + {% when 'rs','no_run','ignore','should_panic' %} + {{ 'Rust' }} + {% when 'bash', 'zsh', 'ksh', 'sh' %} + {{ 'Shell' }} + {% when 'st', 'squeak' %} + {{ 'Smalltalk' }} + {% when 'tex'%} + {{ 'TeX' }} + {% when 'latex' %} + {{ 'LaTex' }} + {% when 'ts', 'typescript' %} + {{ 'TypeScript' }} + {% when 'vb', 'visualbasic' %} + {{ 'Visual Basic' }} + {% when 'vue', 'vuejs' %} + {{ 'Vue.js' }} + {% when 'yml' %} + {{ 'YAML' }} + {% when 'css', 'html', 'scss', 'ssh', 'toml', 'xml', 'yaml', 'json' %} + {{ _lang | upcase }} + {% else %} + {{ _lang | capitalize }} +{% endcase %} diff --git a/_includes/mermaid.html b/_includes/mermaid.html new file mode 100644 index 0000000..967cfb4 --- /dev/null +++ b/_includes/mermaid.html @@ -0,0 +1,58 @@ + + diff --git a/_includes/metadata-hook.html b/_includes/metadata-hook.html new file mode 100644 index 0000000..fd7e9bd --- /dev/null +++ b/_includes/metadata-hook.html @@ -0,0 +1 @@ + diff --git a/_includes/mode-toggle.html b/_includes/mode-toggle.html new file mode 100644 index 0000000..a347750 --- /dev/null +++ b/_includes/mode-toggle.html @@ -0,0 +1,143 @@ + + + diff --git a/_includes/no-linenos.html b/_includes/no-linenos.html new file mode 100644 index 0000000..8500693 --- /dev/null +++ b/_includes/no-linenos.html @@ -0,0 +1,10 @@ +{% comment %} + Remove the line number of the code snippet. +{% endcomment %} + +{% assign content = include.content %} + +{% if content contains '
' %}
+  {% assign content = content | replace: '
', '' %}
+{% endif %}
diff --git a/_includes/origin-type.html b/_includes/origin-type.html
new file mode 100644
index 0000000..7f72012
--- /dev/null
+++ b/_includes/origin-type.html
@@ -0,0 +1,13 @@
+{% comment %} Site static assets origin type {% endcomment %}
+
+{% assign type = 'cors' %}
+
+{% if site.assets.self_host.enabled %}
+  {% if site.assets.self_host.env %}
+    {% if site.assets.self_host.env == jekyll.environment %}
+      {% assign type = 'basic' %}
+    {% endif %}
+  {% else %}
+    {% assign type = 'basic' %}
+  {% endif %}
+{% endif %}
diff --git a/_includes/post-nav.html b/_includes/post-nav.html
new file mode 100644
index 0000000..76bcd59
--- /dev/null
+++ b/_includes/post-nav.html
@@ -0,0 +1,37 @@
+
+
+
+ {% if page.previous.url %} + +

{{ page.previous.title }}

+
+ {% else %} +
+

-

+
+ {% endif %} + + {% if page.next.url %} + +

{{ page.next.title }}

+
+ {% else %} +
+

-

+
+ {% endif %} +
diff --git a/_includes/post-paginator.html b/_includes/post-paginator.html new file mode 100644 index 0000000..668b49f --- /dev/null +++ b/_includes/post-paginator.html @@ -0,0 +1,89 @@ + + +
    + + {% if paginator.previous_page %} + {% assign prev_url = paginator.previous_page_path | relative_url %} + {% else %} + {% assign prev_url = '#' %} + {% endif %} + +
  • + + + +
  • + + + {% assign left_ellipsis = false %} + {% assign right_ellipsis = false %} + + {% for i in (1..paginator.total_pages) %} + {% assign pre = paginator.page | minus: 1 %} + {% assign next = paginator.page | plus: 1 %} + {% assign pre_less = pre | minus: 1 %} + {% assign next_more = next | plus: 1 %} + {% assign show = false %} + + {% if paginator.page == 1 %} + {% if i <= 3 or i == paginator.total_pages %} + {% assign show = true %} + {% endif %} + {% elsif paginator.page == paginator.total_pages %} + {% if i == 1 or i >= pre_less %} + {% assign show = true %} + {% endif %} + {% else %} + {% if i == 1 or i == paginator.total_pages %} + {% assign show = true %} + {% elsif i >= pre and i <= next %} + {% assign show = true %} + {% endif %} + {% endif %} + + {% if show %} + +
  • + + {{- i -}} + +
  • + {% else %} + + {% if i < pre and left_ellipsis == false %} +
  • + ... +
  • + {% assign left_ellipsis = true %} + {% elsif i > next and right_ellipsis == false %} +
  • + ... +
  • + {% assign right_ellipsis = true %} + {% endif %} + {% endif %} + {% endfor %} + + +
  • + {{ paginator.page }} + / {{ paginator.total_pages }} +
  • + + + {% if paginator.next_page_path %} + {% assign next_url = paginator.next_page_path | relative_url %} + {% else %} + {% assign next_url = '#' %} + {% endif %} + +
  • + + + +
  • +
+ diff --git a/_includes/post-sharing.html b/_includes/post-sharing.html new file mode 100644 index 0000000..f607ba2 --- /dev/null +++ b/_includes/post-sharing.html @@ -0,0 +1,35 @@ + + + diff --git a/_includes/read-time.html b/_includes/read-time.html new file mode 100644 index 0000000..9952410 --- /dev/null +++ b/_includes/read-time.html @@ -0,0 +1,37 @@ + + +{% assign words = include.content | strip_html | number_of_words: 'auto' %} + + + +{% assign wpm = 180 %} +{% assign min_time = 1 %} + +{% assign read_time = words | divided_by: wpm %} + +{% unless read_time > 0 %} + {% assign read_time = min_time %} +{% endunless %} + +{% capture read_prompt %} + {{- site.data.locales[include.lang].post.read_time.prompt -}} +{% endcapture %} + + + + + {{- read_time -}} + {{ ' ' }} + {{- site.data.locales[include.lang].post.read_time.unit -}} + + {%- if include.prompt -%} + {%- assign _prompt_words = read_prompt | number_of_words: 'auto' -%} + {%- unless _prompt_words > 1 -%}{{ ' ' }}{%- endunless -%} + {{ read_prompt }} + {%- endif -%} + diff --git a/_includes/refactor-content.html b/_includes/refactor-content.html new file mode 100644 index 0000000..655ecd6 --- /dev/null +++ b/_includes/refactor-content.html @@ -0,0 +1,286 @@ + + +{% assign _content = include.content %} + + + +{% if _content contains '', '' + | replace: '
', '' + | replace: '
', '
' + %} +{% endif %} + + + +{% if _content contains '
' %}
+  {% assign _content = _content
+    | replace: '
', '' + %} +{% endif %} + + +{% if _content contains '', + '' + | replace: + '', + '' + %} +{% endif %} + + +{% assign IMG_TAG = ' + {% if site.img_cdn %} + {% if site.img_cdn contains '//' %} + {% assign _path_prefix = site.img_cdn %} + {% else %} + {% assign _path_prefix = site.img_cdn | relative_url %} + {% endif %} + {% else %} + {% assign _path_prefix = site.baseurl %} + {% endif %} + + + {% if page.img_path %} + {% assign _path = page.img_path | append: '/' | replace: '//', '/' %} + {% assign _path_prefix = _path_prefix | append: _path %} + {% endif %} + + {% for _img_snippet in _img_snippets %} + {% if forloop.first %} + {% assign _img_content = _img_snippet %} + {% continue %} + {% endif %} + + {% assign _left = _img_snippet | split: '>' | first %} + {% assign _right = _img_snippet | remove: _left %} + + {% unless _left contains 'src=' %} + {% continue %} + {% endunless %} + + {% assign _left = _left | remove: ' /' | replace: ' w=', ' width=' | replace: ' h=', ' height=' %} + {% assign _attrs = _left | split: '" ' %} + + {% assign _width = nil %} + {% assign _height = nil %} + {% assign _lqip = nil %} + {% assign _class = nil %} + + {% for _attr in _attrs %} + {% unless _attr contains '=' %} + {% continue %} + {% endunless %} + + {% assign _pair = _attr | split: '="' %} + {% capture _key %}{{ _pair | first }}{% endcapture %} + {% capture _value %}{{ _pair | last | remove: '"' }}{% endcapture %} + + {% case _key %} + {% when 'width' %} + {% assign _width = _value %} + {% when 'height' %} + {% assign _height = _value %} + {% when 'src' %} + {% assign _src = _value %} + {% when 'lqip' %} + {% assign _lqip = _value %} + {% when 'class' %} + {% assign _class = _value %} + {% endcase %} + {% endfor %} + + + {% if _class %} + {% capture _old_class %}class="{{ _class }}"{% endcapture %} + {% assign _left = _left | remove: _old_class %} + {% endif %} + + {% assign _final_src = nil %} + + {% unless _src contains '//' %} + {% assign _final_src = _path_prefix | append: _src %} + {% capture _src_from %}"{{ _src }}"{% endcapture %} + {% capture _src_to %}"{{ _final_src }}"{% endcapture %} + {% assign _left = _left | replace: _src_from, _src_to %} + {% endunless %} + + {% if _lqip %} + {% unless _lqip contains ':' %} + {% assign _final_lqip = _path_prefix | append: _lqip %} + {% capture _lqip_from %}"{{ _lqip }}"{% endcapture %} + {% capture _lqip_to %}"{{ _final_lqip }}"{% endcapture %} + {% assign _left = _left | replace: _lqip_from, _lqip_to %} + {% endunless %} + {% endif %} + + + {% assign _left = _left | replace: 'src=', 'data-src=' %} + {% if _left contains 'class=' %} + {% assign _left = _left | replace: 'class="', 'class="lazyload '%} + {% else %} + {% assign _left = _left | append: ' class="lazyload"' %} + {% endif %} + + + {% if _lqip %} + {% assign _left = _left | replace: ' lqip=', ' data-lqip="true" src=' %} + {% else %} + {% if _width and _height %} + + {%- capture _svg -%} + src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 {{ _width }} {{ _height }}'%3E%3C/svg%3E" + {%- endcapture -%} + {% assign _left = _svg | append: ' ' | append: _left %} + {% assign _class = _class | append: ' shimmer' %} + {% endif %} + {% endif %} + + + {% assign _left = _left | append: ' data-proofer-ignore' %} + + {% if page.layout == 'home' %} + + {%- capture _wrapper_start -%} +
+ {%- endcapture -%} + {% assign _img_content = _img_content | append: _wrapper_start %} + {% assign _right = _right | prepend: '>` is wrapped by `` --> + {% assign _parent = _right | slice: 1, 4 %} + + {% if _parent == '' %} + + {% assign _size = _img_content | size | minus: 1 %} + {% capture _class %} + class="img-link{% unless _lqip %} shimmer{% endunless %}" + {% endcapture %} + {% assign _img_content = _img_content | slice: 0, _size | append: _class | append: '>' %} + {% else %} + + {%- capture _wrapper_start -%} + + {%- endcapture -%} + {% assign _img_content = _img_content | append: _wrapper_start %} + {% assign _right = _right | prepend: '> + {% assign _img_content = _img_content | append: debug | append: IMG_TAG | append: _left | append: _right %} + + {% endfor %} + + {% if _img_content %} + {% assign _content = _img_content %} + {% endif %} + +{% endif %} + + + +{% if _content contains '
' %} + {% assign _code_spippets = _content | split: '
' %} + {% assign _new_content = '' %} + + {% for _snippet in _code_spippets %} + + {% if forloop.last %} + {% assign _new_content = _new_content | append: _snippet %} + + {% else %} + + {% assign _left = _snippet | split: '><' | last%} + + {% if _left contains 'file="' %} + {% assign _label_text = _left | split: 'file="' | last | split: '"' | first %} + {% assign _label_icon = 'far fa-file-code fa-fw' %} + {% else %} + {% assign _lang = _left | split: 'language-' | last | split: ' ' | first %} + {% capture _label_text %}{% include language-alias.html language=_lang %}{% endcapture %} + {% assign _label_icon = 'fas fa-code fa-fw small' %} + {% endif %} + + {% capture _label %} + + {% endcapture %} + + {% assign _new_content = _new_content | append: _snippet + | append: '
' + | append: _label + | append: '
' + | append: '
' + %} + + {% endif %} + + {% endfor %} + + {% assign _content = _new_content %} + +{% endif %} + + + +{% assign heading_levels = '2,3,4,5' | split: ',' %} +{% assign _heading_content = _content %} + +{% for level in heading_levels %} + {% capture mark_start %}{% endcapture %} + + {% assign left = snippet | split: mark_end | first %} + {% assign right = snippet | slice: left.size, snippet.size %} + {% assign left = left | replace_first: '">', '">' | append: '' %} + + {% assign _new_content = _new_content | append: mark_start + | append: left | append: anchor | append: right + %} + + {% endfor %} + + {% assign _heading_content = _new_content %} + + {% endif %} +{% endfor %} + +{% assign _content = _heading_content %} + + +{{ _content }} diff --git a/_includes/related-posts.html b/_includes/related-posts.html new file mode 100644 index 0000000..8476a6d --- /dev/null +++ b/_includes/related-posts.html @@ -0,0 +1,104 @@ + + + +{% assign TOTAL_SIZE = 3 %} + + +{% assign TAG_SCORE = 1 %} + + +{% assign CATEGORY_SCORE = 0.5 %} + +{% assign SEPARATOR = ':' %} + +{% assign score_list = '' | split: '' %} +{% assign last_index = site.posts.size | minus: 1 %} + +{% for i in (0..last_index) %} + {% assign post = site.posts[i] %} + + {% if post.url == page.url %} + {% continue %} + {% endif %} + + {% assign score = 0 %} + + {% for tag in post.tags %} + {% if page.tags contains tag %} + {% assign score = score | plus: TAG_SCORE %} + {% endif %} + {% endfor %} + + {% for category in post.categories %} + {% if page.categories contains category %} + {% assign score = score | plus: CATEGORY_SCORE %} + {% endif %} + {% endfor %} + + {% if score > 0 %} + {% capture score_item %}{{ score }}{{ SEPARATOR }}{{ i }}{% endcapture %} + {% assign score_list = score_list | push: score_item %} + {% endif %} +{% endfor %} + +{% assign index_list = '' | split: '' %} + +{% if score_list.size > 0 %} + {% assign score_list = score_list | sort | reverse %} + {% for entry in score_list limit: TOTAL_SIZE %} + {% assign index = entry | split: SEPARATOR | last %} + {% assign index_list = index_list | push: index %} + {% endfor %} +{% endif %} + + +{% assign less = TOTAL_SIZE | minus: index_list.size %} + +{% if less > 0 %} + {% for i in (0..last_index) %} + {% assign post = site.posts[i] %} + {% if post.url != page.url %} + {% capture cur_index %}{{ i }}{% endcapture %} + {% unless index_list contains cur_index %} + {% assign index_list = index_list | push: cur_index %} + {% assign less = less | minus: 1 %} + {% if less <= 0 %} + {% break %} + {% endif %} + {% endunless %} + {% endif %} + {% endfor %} +{% endif %} + +{% if index_list.size > 0 %} + + +{% endif %} diff --git a/_includes/search-loader.html b/_includes/search-loader.html new file mode 100644 index 0000000..634325b --- /dev/null +++ b/_includes/search-loader.html @@ -0,0 +1,45 @@ + + +{% capture result_elem %} +
+ {title} + +

{snippet}

+
+{% endcapture %} + +{% capture not_found %}

{{ site.data.locales[include.lang].search.no_results }}

{% endcapture %} + + diff --git a/_includes/search-results.html b/_includes/search-results.html new file mode 100644 index 0000000..07981ff --- /dev/null +++ b/_includes/search-results.html @@ -0,0 +1,10 @@ + + +
+
+
+ {% include_cached trending-tags.html %} +
+
+
+
diff --git a/_includes/sidebar.html b/_includes/sidebar.html new file mode 100644 index 0000000..1c81685 --- /dev/null +++ b/_includes/sidebar.html @@ -0,0 +1,104 @@ + + + + diff --git a/_includes/toc.html b/_includes/toc.html new file mode 100644 index 0000000..1eb3dcd --- /dev/null +++ b/_includes/toc.html @@ -0,0 +1,13 @@ +{% assign enable_toc = false %} +{% if site.toc and page.toc %} + {% if page.content contains ' +
{{- site.data.locales[include.lang].panel.toc -}}
+ +
+{% endif %} diff --git a/_includes/topbar.html b/_includes/topbar.html new file mode 100644 index 0000000..0092f69 --- /dev/null +++ b/_includes/topbar.html @@ -0,0 +1,70 @@ + + +
+
+ + {% assign paths = page.url | split: '/' %} + + {% if paths.size == 0 or page.layout == 'home' %} + + {{ site.data.locales[include.lang].tabs.home | capitalize }} + + {% else %} + {% for item in paths %} + {% if forloop.first %} + + + {{ site.data.locales[include.lang].tabs.home | capitalize }} + + + + {% elsif forloop.last %} + {% if page.collection == 'tabs' %} + {{ site.data.locales[include.lang].tabs[item] | default: page.title }} + {% else %} + {{ page.title }} + {% endif %} + + {% elsif page.layout == 'category' or page.layout == 'tag' %} + + + {{ site.data.locales[include.lang].tabs[item] | default: page.title }} + + + {% endif %} + {% endfor %} + {% endif %} + + + + + +
+ {% if page.layout == 'home' %} + {{- site.data.locales[include.lang].title | default: site.title -}} + {% elsif page.collection == 'tabs' or page.layout == 'page' %} + {%- capture tab_key -%}{{ page.url | split: '/' }}{%- endcapture -%} + {{- site.data.locales[include.lang].tabs[tab_key] | default: page.title -}} + {% else %} + {{- site.data.locales[include.lang].layout[page.layout] | default: page.layout | capitalize -}} + {% endif %} +
+ + + + + + + {{ site.data.locales[include.lang].search.cancel }} +
+
diff --git a/_includes/trending-tags.html b/_includes/trending-tags.html new file mode 100644 index 0000000..6b1d732 --- /dev/null +++ b/_includes/trending-tags.html @@ -0,0 +1,46 @@ + + +{% assign MAX = 10 %} + +{% assign size_list = '' | split: '' %} +{% assign tag_list = '' | split: '' %} + +{% for tag in site.tags %} + {% assign size = tag | last | size %} + {% assign size_list = size_list | push: size %} + + {% assign tag_str = tag | first | append: '::' | append: size %} + {% assign tag_list = tag_list | push: tag_str %} +{% endfor %} + +{% assign size_list = size_list | sort | reverse %} + +{% assign tag_list = tag_list | sort_natural %} + +{% assign trending_tags = '' | split: '' %} + +{% for size in size_list limit: MAX %} + {% for tag_str in tag_list %} + {% assign tag = tag_str | split: '::' %} + {% assign tag_name = tag | first %} + {% assign tag_size = tag | last | plus: 0 %} + {% if tag_size == size %} + {% unless trending_tags contains tag_name %} + {% assign trending_tags = trending_tags | push: tag_name %} + {% break %} + {% endunless %} + {% endif %} + {% endfor %} +{% endfor %} + +{% if trending_tags.size > 0 %} +
+
{{- site.data.locales[include.lang].panel.trending_tags -}}
+
+ {% for tag_name in trending_tags %} + {% assign url = tag_name | slugify | url_encode | prepend: '/tags/' | append: '/' %} + + {% endfor %} +
+
+{% endif %} diff --git a/_includes/update-list.html b/_includes/update-list.html new file mode 100644 index 0000000..0ab7a45 --- /dev/null +++ b/_includes/update-list.html @@ -0,0 +1,39 @@ + + +{% assign MAX_SIZE = 5 %} + +{% assign all_list = '' | split: '' %} + +{% for post in site.posts %} + {% if post.last_modified_at and post.last_modified_at != post.date %} + {% capture elem %} + {{- post.last_modified_at | date: "%Y%m%d%H%M%S" -}}::{{- forloop.index0 -}} + {% endcapture %} + {% assign all_list = all_list | push: elem %} + {% endif %} +{% endfor %} + +{% assign all_list = all_list | sort | reverse %} + +{% assign update_list = '' | split: '' %} + +{% for entry in all_list limit: MAX_SIZE %} + {% assign update_list = update_list | push: entry %} +{% endfor %} + +{% if update_list.size > 0 %} +
+
{{- site.data.locales[include.lang].panel.lastmod -}}
+
    + {% for item in update_list %} + {% assign index = item | split: '::' | last | plus: 0 %} + {% assign post = site.posts[index] %} + {% assign url = post.url | relative_url %} +
  • + {{ post.title }} +
  • + {% endfor %} +
+
+ +{% endif %} diff --git a/_javascript/_copyright b/_javascript/_copyright new file mode 100644 index 0000000..dedc8ed --- /dev/null +++ b/_javascript/_copyright @@ -0,0 +1,3 @@ +Chirpy v<%= pkg.version %> (<%= pkg.homepage %>) +© 2019 <%= pkg.author %> +<%= pkg.license %> Licensed diff --git a/_javascript/categories.js b/_javascript/categories.js new file mode 100644 index 0000000..15d8251 --- /dev/null +++ b/_javascript/categories.js @@ -0,0 +1,7 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; +import { categoryCollapse } from './modules/plugins'; + +basic(); +initSidebar(); +initTopbar(); +categoryCollapse(); diff --git a/_javascript/commons.js b/_javascript/commons.js new file mode 100644 index 0000000..05a9765 --- /dev/null +++ b/_javascript/commons.js @@ -0,0 +1,5 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; + +basic(); +initSidebar(); +initTopbar(); diff --git a/_javascript/home.js b/_javascript/home.js new file mode 100644 index 0000000..70af328 --- /dev/null +++ b/_javascript/home.js @@ -0,0 +1,8 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; +import { initLocaleDatetime, imgLazy } from './modules/plugins'; + +basic(); +initSidebar(); +initTopbar(); +initLocaleDatetime(); +imgLazy(); diff --git a/_javascript/misc.js b/_javascript/misc.js new file mode 100644 index 0000000..c7a19d6 --- /dev/null +++ b/_javascript/misc.js @@ -0,0 +1,7 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; +import { initLocaleDatetime } from './modules/plugins'; + +basic(); +initSidebar(); +initTopbar(); +initLocaleDatetime(); diff --git a/_javascript/modules/components/back-to-top.js b/_javascript/modules/components/back-to-top.js new file mode 100644 index 0000000..777a659 --- /dev/null +++ b/_javascript/modules/components/back-to-top.js @@ -0,0 +1,20 @@ +/** + * Reference: https://bootsnipp.com/snippets/featured/link-to-top-page + */ + +export function back2top() { + const $window = $(window); + const $btn = $('#back-to-top'); + + $window.on('scroll', () => { + if ($window.scrollTop() > 50) { + $btn.fadeIn(); + } else { + $btn.fadeOut(); + } + }); + + $btn.on('click', () => { + $window.scrollTop(0); + }); +} diff --git a/_javascript/modules/components/category-collapse.js b/_javascript/modules/components/category-collapse.js new file mode 100644 index 0000000..d6027a1 --- /dev/null +++ b/_javascript/modules/components/category-collapse.js @@ -0,0 +1,36 @@ +/** + * Tab 'Categories' expand/close effect. + */ +const childPrefix = 'l_'; +const parentPrefix = 'h_'; +const collapse = $('.collapse'); + +export function categoryCollapse() { + /* close up top-category */ + collapse.on('hide.bs.collapse', function () { + /* Bootstrap collapse events. */ const parentId = + parentPrefix + $(this).attr('id').substring(childPrefix.length); + if (parentId) { + $(`#${parentId} .far.fa-folder-open`).attr( + 'class', + 'far fa-folder fa-fw' + ); + $(`#${parentId} i.fas`).addClass('rotate'); + $(`#${parentId}`).removeClass('hide-border-bottom'); + } + }); + + /* expand the top category */ + collapse.on('show.bs.collapse', function () { + const parentId = + parentPrefix + $(this).attr('id').substring(childPrefix.length); + if (parentId) { + $(`#${parentId} .far.fa-folder`).attr( + 'class', + 'far fa-folder-open fa-fw' + ); + $(`#${parentId} i.fas`).removeClass('rotate'); + $(`#${parentId}`).addClass('hide-border-bottom'); + } + }); +} diff --git a/_javascript/modules/components/clipboard.js b/_javascript/modules/components/clipboard.js new file mode 100644 index 0000000..f803843 --- /dev/null +++ b/_javascript/modules/components/clipboard.js @@ -0,0 +1,123 @@ +/** + * Clipboard functions + * + * Dependencies: + * - popper.js (https://github.com/popperjs/popper-core) + * - clipboard.js (https://github.com/zenorocha/clipboard.js) + */ + +const clipboardSelector = '.code-header>button'; +const ICON_SUCCESS = 'fas fa-check'; +const ATTR_TIMEOUT = 'timeout'; +const ATTR_TITLE_SUCCEED = 'data-title-succeed'; +const ATTR_TITLE_ORIGIN = 'data-bs-original-title'; +const TIMEOUT = 2000; // in milliseconds + +function isLocked(node) { + if ($(node)[0].hasAttribute(ATTR_TIMEOUT)) { + let timeout = $(node).attr(ATTR_TIMEOUT); + if (Number(timeout) > Date.now()) { + return true; + } + } + return false; +} + +function lock(node) { + $(node).attr(ATTR_TIMEOUT, Date.now() + TIMEOUT); +} + +function unlock(node) { + $(node).removeAttr(ATTR_TIMEOUT); +} + +function getIcon(btn) { + let iconNode = $(btn).children(); + return iconNode.attr('class'); +} + +const ICON_DEFAULT = getIcon(clipboardSelector); + +function showTooltip(btn) { + const succeedTitle = $(btn).attr(ATTR_TITLE_SUCCEED); + $(btn).attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show'); +} + +function hideTooltip(btn) { + $(btn).tooltip('hide').removeAttr(ATTR_TITLE_ORIGIN); +} + +function setSuccessIcon(btn) { + let btnNode = $(btn); + let iconNode = btnNode.children(); + iconNode.attr('class', ICON_SUCCESS); +} + +function resumeIcon(btn) { + let btnNode = $(btn); + let iconNode = btnNode.children(); + iconNode.attr('class', ICON_DEFAULT); +} + +export function initClipboard() { + // Initial the clipboard.js object + if ($(clipboardSelector).length) { + const clipboard = new ClipboardJS(clipboardSelector, { + target(trigger) { + let codeBlock = trigger.parentNode.nextElementSibling; + return codeBlock.querySelector('code .rouge-code'); + } + }); + + const clipboardList = document.querySelectorAll(clipboardSelector); + [...clipboardList].map( + (elem) => + new bootstrap.Tooltip(elem, { + placement: 'left' + }) + ); + + clipboard.on('success', (e) => { + e.clearSelection(); + + const trigger = e.trigger; + if (isLocked(trigger)) { + return; + } + + setSuccessIcon(trigger); + showTooltip(trigger); + lock(trigger); + + setTimeout(() => { + hideTooltip(trigger); + resumeIcon(trigger); + unlock(trigger); + }, TIMEOUT); + }); + } + + /* --- Post link sharing --- */ + + $('#copy-link').on('click', (e) => { + let target = $(e.target); + + if (isLocked(target)) { + return; + } + + // Copy URL to clipboard + navigator.clipboard.writeText(window.location.href).then(() => { + const defaultTitle = target.attr(ATTR_TITLE_ORIGIN); + const succeedTitle = target.attr(ATTR_TITLE_SUCCEED); + // Switch tooltip title + target.attr(ATTR_TITLE_ORIGIN, succeedTitle).tooltip('show'); + lock(target); + + setTimeout(() => { + target.attr(ATTR_TITLE_ORIGIN, defaultTitle); + unlock(target); + }, TIMEOUT); + }); + }); +} diff --git a/_javascript/modules/components/img-lazyload.js b/_javascript/modules/components/img-lazyload.js new file mode 100644 index 0000000..edad9dd --- /dev/null +++ b/_javascript/modules/components/img-lazyload.js @@ -0,0 +1,27 @@ +/** + * Set up image lazy-load + */ + +function stopShimmer($node) { + $node.parent().removeClass('shimmer'); +} + +export function imgLazy() { + const $images = $('#core-wrapper img[data-src]'); + + if ($images.length <= 0) { + return; + } + + /* Stop shimmer when image loaded */ + document.addEventListener('lazyloaded', function (e) { + stopShimmer($(e.target)); + }); + + /* Stop shimmer from cached images */ + $images.each(function () { + if ($(this).hasClass('ls-is-cached')) { + stopShimmer($(this)); + } + }); +} diff --git a/_javascript/modules/components/img-popup.js b/_javascript/modules/components/img-popup.js new file mode 100644 index 0000000..7f78d99 --- /dev/null +++ b/_javascript/modules/components/img-popup.js @@ -0,0 +1,22 @@ +/** + * Set up image popup + * + * See: https://github.com/dimsemenov/Magnific-Popup + */ + +export function imgPopup() { + if ($('.popup') <= 0) { + return; + } + + $('.popup').magnificPopup({ + type: 'image', + closeOnContentClick: true, + showCloseBtn: false, + zoom: { + enabled: true, + duration: 300, + easing: 'ease-in-out' + } + }); +} diff --git a/_javascript/modules/components/locale-datetime.js b/_javascript/modules/components/locale-datetime.js new file mode 100644 index 0000000..214f2bf --- /dev/null +++ b/_javascript/modules/components/locale-datetime.js @@ -0,0 +1,51 @@ +/** + * Update month/day to locale datetime + * + * Requirement: + */ + +/* A tool for locale datetime */ +class LocaleHelper { + static get attrTimestamp() { + return 'data-ts'; + } + + static get attrDateFormat() { + return 'data-df'; + } + + static get locale() { + return $('html').attr('lang').substring(0, 2); + } + + static getTimestamp(elem) { + return Number(elem.attr(LocaleHelper.attrTimestamp)); // unix timestamp + } + + static getDateFormat(elem) { + return elem.attr(LocaleHelper.attrDateFormat); + } +} + +export function initLocaleDatetime() { + dayjs.locale(LocaleHelper.locale); + dayjs.extend(window.dayjs_plugin_localizedFormat); + + $(`[${LocaleHelper.attrTimestamp}]`).each(function () { + const date = dayjs.unix(LocaleHelper.getTimestamp($(this))); + const text = date.format(LocaleHelper.getDateFormat($(this))); + $(this).text(text); + $(this).removeAttr(LocaleHelper.attrTimestamp); + $(this).removeAttr(LocaleHelper.attrDateFormat); + + // setup tooltips + const tooltip = $(this).attr('data-bs-toggle'); + if (typeof tooltip === 'undefined' || tooltip !== 'tooltip') { + return; + } + + const tooltipText = date.format('llll'); // see: https://day.js.org/docs/en/display/format#list-of-localized-formats + $(this).attr('data-bs-title', tooltipText); + new bootstrap.Tooltip($(this)); + }); +} diff --git a/_javascript/modules/components/mode-watcher.js b/_javascript/modules/components/mode-watcher.js new file mode 100644 index 0000000..7b2298a --- /dev/null +++ b/_javascript/modules/components/mode-watcher.js @@ -0,0 +1,21 @@ +/** + * Add listener for theme mode toggle + */ +const $toggleElem = $('.mode-toggle'); + +export function modeWatcher() { + if ($toggleElem.length === 0) { + return; + } + + $toggleElem.off().on('click', (e) => { + const $target = $(e.target); + let $btn = + $target.prop('tagName') === 'button'.toUpperCase() + ? $target + : $target.parent(); + + modeToggle.flipMode(); // modeToggle: `_includes/mode-toggle.html` + $btn.trigger('blur'); // remove the clicking outline + }); +} diff --git a/_javascript/modules/components/search-display.js b/_javascript/modules/components/search-display.js new file mode 100644 index 0000000..7862f39 --- /dev/null +++ b/_javascript/modules/components/search-display.js @@ -0,0 +1,122 @@ +/** + * This script make #search-result-wrapper switch to unloaded or shown automatically. + */ +const $btnSbTrigger = $('#sidebar-trigger'); +const $btnSearchTrigger = $('#search-trigger'); +const $btnCancel = $('#search-cancel'); +const $content = $('#main>.row'); +const $topbarTitle = $('#topbar-title'); +const $searchWrapper = $('#search-wrapper'); +const $resultWrapper = $('#search-result-wrapper'); +const $results = $('#search-results'); +const $input = $('#search-input'); +const $hints = $('#search-hints'); +const $viewport = $('html,body'); + +// class names +const C_LOADED = 'loaded'; +const C_UNLOADED = 'unloaded'; +const C_FOCUS = 'input-focus'; +const C_FLEX = 'd-flex'; + +class ScrollBlocker { + static offset = 0; + static resultVisible = false; + + static on() { + ScrollBlocker.offset = window.scrollY; + $viewport.scrollTop(0); + } + + static off() { + $viewport.scrollTop(ScrollBlocker.offset); + } +} + +/*--- Actions in mobile screens (Sidebar hidden) ---*/ +class MobileSearchBar { + static on() { + $btnSbTrigger.addClass(C_UNLOADED); + $topbarTitle.addClass(C_UNLOADED); + $btnSearchTrigger.addClass(C_UNLOADED); + $searchWrapper.addClass(C_FLEX); + $btnCancel.addClass(C_LOADED); + } + + static off() { + $btnCancel.removeClass(C_LOADED); + $searchWrapper.removeClass(C_FLEX); + $btnSbTrigger.removeClass(C_UNLOADED); + $topbarTitle.removeClass(C_UNLOADED); + $btnSearchTrigger.removeClass(C_UNLOADED); + } +} + +class ResultSwitch { + static on() { + if (!ScrollBlocker.resultVisible) { + // the block method must be called before $(#main) unloaded. + ScrollBlocker.on(); + $resultWrapper.removeClass(C_UNLOADED); + $content.addClass(C_UNLOADED); + ScrollBlocker.resultVisible = true; + } + } + + static off() { + if (ScrollBlocker.resultVisible) { + $results.empty(); + if ($hints.hasClass(C_UNLOADED)) { + $hints.removeClass(C_UNLOADED); + } + $resultWrapper.addClass(C_UNLOADED); + $content.removeClass(C_UNLOADED); + + // now the release method must be called after $(#main) display + ScrollBlocker.off(); + + $input.val(''); + ScrollBlocker.resultVisible = false; + } + } +} + +function isMobileView() { + return $btnCancel.hasClass(C_LOADED); +} + +export function displaySearch() { + $btnSearchTrigger.on('click', function () { + MobileSearchBar.on(); + ResultSwitch.on(); + $input.trigger('focus'); + }); + + $btnCancel.on('click', function () { + MobileSearchBar.off(); + ResultSwitch.off(); + }); + + $input.on('focus', function () { + $searchWrapper.addClass(C_FOCUS); + }); + + $input.on('focusout', function () { + $searchWrapper.removeClass(C_FOCUS); + }); + + $input.on('input', () => { + if ($input.val() === '') { + if (isMobileView()) { + $hints.removeClass(C_UNLOADED); + } else { + ResultSwitch.off(); + } + } else { + ResultSwitch.on(); + if (isMobileView()) { + $hints.addClass(C_UNLOADED); + } + } + }); +} diff --git a/_javascript/modules/components/sidebar.js b/_javascript/modules/components/sidebar.js new file mode 100644 index 0000000..9d8567e --- /dev/null +++ b/_javascript/modules/components/sidebar.js @@ -0,0 +1,25 @@ +/** + * Expand or close the sidebar in mobile screens. + */ + +const $body = $('body'); +const ATTR_DISPLAY = 'sidebar-display'; + +class SidebarUtil { + static isExpanded = false; + + static toggle() { + if (SidebarUtil.isExpanded === false) { + $body.attr(ATTR_DISPLAY, ''); + } else { + $body.removeAttr(ATTR_DISPLAY); + } + + SidebarUtil.isExpanded = !SidebarUtil.isExpanded; + } +} + +export function sidebarExpand() { + $('#sidebar-trigger').on('click', SidebarUtil.toggle); + $('#mask').on('click', SidebarUtil.toggle); +} diff --git a/_javascript/modules/components/toc.js b/_javascript/modules/components/toc.js new file mode 100644 index 0000000..dd46994 --- /dev/null +++ b/_javascript/modules/components/toc.js @@ -0,0 +1,13 @@ +export function toc() { + if (document.querySelector('#core-wrapper h2,#core-wrapper h3')) { + // see: https://github.com/tscanlin/tocbot#usage + tocbot.init({ + tocSelector: '#toc', + contentSelector: '.post-content', + ignoreSelector: '[data-toc-skip]', + headingSelector: 'h2, h3', + orderedList: false, + scrollSmooth: false + }); + } +} diff --git a/_javascript/modules/components/tooltip-loader.js b/_javascript/modules/components/tooltip-loader.js new file mode 100644 index 0000000..a906600 --- /dev/null +++ b/_javascript/modules/components/tooltip-loader.js @@ -0,0 +1,12 @@ +/** + * Initial Bootstrap Tooltip. + */ +export function loadTooptip() { + const tooltipTriggerList = document.querySelectorAll( + '[data-bs-toggle="tooltip"]' + ); + + [...tooltipTriggerList].map( + (tooltipTriggerEl) => new bootstrap.Tooltip(tooltipTriggerEl) + ); +} diff --git a/_javascript/modules/layouts.js b/_javascript/modules/layouts.js new file mode 100644 index 0000000..28f7962 --- /dev/null +++ b/_javascript/modules/layouts.js @@ -0,0 +1,3 @@ +export { basic } from './layouts/basic'; +export { initSidebar } from './layouts/sidebar'; +export { initTopbar } from './layouts/topbar'; diff --git a/_javascript/modules/layouts/basic.js b/_javascript/modules/layouts/basic.js new file mode 100644 index 0000000..fb36a8b --- /dev/null +++ b/_javascript/modules/layouts/basic.js @@ -0,0 +1,7 @@ +import { back2top } from '../components/back-to-top'; +import { loadTooptip } from '../components/tooltip-loader'; + +export function basic() { + back2top(); + loadTooptip(); +} diff --git a/_javascript/modules/layouts/sidebar.js b/_javascript/modules/layouts/sidebar.js new file mode 100644 index 0000000..8795693 --- /dev/null +++ b/_javascript/modules/layouts/sidebar.js @@ -0,0 +1,7 @@ +import { modeWatcher } from '../components/mode-watcher'; +import { sidebarExpand } from '../components/sidebar'; + +export function initSidebar() { + modeWatcher(); + sidebarExpand(); +} diff --git a/_javascript/modules/layouts/topbar.js b/_javascript/modules/layouts/topbar.js new file mode 100644 index 0000000..cfcd0ed --- /dev/null +++ b/_javascript/modules/layouts/topbar.js @@ -0,0 +1,5 @@ +import { displaySearch } from '../components/search-display'; + +export function initTopbar() { + displaySearch(); +} diff --git a/_javascript/modules/plugins.js b/_javascript/modules/plugins.js new file mode 100644 index 0000000..fa7a7dd --- /dev/null +++ b/_javascript/modules/plugins.js @@ -0,0 +1,6 @@ +export { categoryCollapse } from './components/category-collapse'; +export { initClipboard } from './components/clipboard'; +export { imgLazy } from './components/img-lazyload'; +export { imgPopup } from './components/img-popup'; +export { initLocaleDatetime } from './components/locale-datetime'; +export { toc } from './components/toc'; diff --git a/_javascript/page.js b/_javascript/page.js new file mode 100644 index 0000000..7b31813 --- /dev/null +++ b/_javascript/page.js @@ -0,0 +1,9 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; +import { imgLazy, imgPopup, initClipboard } from './modules/plugins'; + +basic(); +initSidebar(); +initTopbar(); +imgLazy(); +imgPopup(); +initClipboard(); diff --git a/_javascript/post.js b/_javascript/post.js new file mode 100644 index 0000000..9a5a61b --- /dev/null +++ b/_javascript/post.js @@ -0,0 +1,17 @@ +import { basic, initSidebar, initTopbar } from './modules/layouts'; +import { + imgLazy, + imgPopup, + initLocaleDatetime, + initClipboard, + toc +} from './modules/plugins'; + +basic(); +initSidebar(); +initTopbar(); +imgLazy(); +imgPopup(); +initLocaleDatetime(); +initClipboard(); +toc(); diff --git a/_layouts/archives.html b/_layouts/archives.html new file mode 100644 index 0000000..18e95f5 --- /dev/null +++ b/_layouts/archives.html @@ -0,0 +1,36 @@ +--- +layout: page +# The Archives of posts. +--- + +{% include lang.html %} + +{% assign df_strftime_m = site.data.locales[lang].df.archives.strftime | default: '/ %m' %} +{% assign df_dayjs_m = site.data.locales[lang].df.archives.dayjs | default: '/ MM' %} + +
+ +{% for post in site.posts %} + {% capture cur_year %}{{ post.date | date: "%Y" }}{% endcapture %} + + {% if cur_year != last_year %} + {% unless forloop.first %}{% endunless %} +
{{ cur_year }}
+
    + {% assign last_year = cur_year %} + {% endif %} + +
  • + {% assign ts = post.date | date: '%s' %} + {{ post.date | date: "%d" }} + + {{ post.date | date: df_strftime_m }} + + {{ post.title }} +
  • + + {% if forloop.last %}
{% endif %} + +{% endfor %} + +
diff --git a/_layouts/categories.html b/_layouts/categories.html new file mode 100644 index 0000000..0515097 --- /dev/null +++ b/_layouts/categories.html @@ -0,0 +1,138 @@ +--- +layout: page +# All the Categories of posts +--- + +{% include lang.html %} + +{% assign HEAD_PREFIX = 'h_' %} +{% assign LIST_PREFIX = 'l_' %} + +{% assign group_index = 0 %} + +{% assign sort_categories = site.categories | sort %} + +{% for category in sort_categories %} + {% assign category_name = category | first %} + {% assign posts_of_category = category | last %} + {% assign first_post = posts_of_category | first %} + + {% if category_name == first_post.categories[0] %} + {% assign sub_categories = '' | split: '' %} + + {% for post in posts_of_category %} + {% assign second_category = post.categories[1] %} + {% if second_category %} + {% unless sub_categories contains second_category %} + {% assign sub_categories = sub_categories | push: second_category %} + {% endunless %} + {% endif %} + {% endfor %} + + {% assign sub_categories = sub_categories | sort %} + {% assign sub_categories_size = sub_categories | size %} + +
+ +
+ + + + {% capture _category_url %}/categories/{{ category_name | slugify | url_encode }}/{% endcapture %} + {{ category_name }} + + + {% assign top_posts_size = site.categories[category_name] | size %} + + {% if sub_categories_size > 0 %} + {{ sub_categories_size }} + {% if sub_categories_size > 1 %} + {{ + site.data.locales[lang].categories.category_measure.plural + | default: site.data.locales[lang].categories.category_measure + }} + {% else %} + {{ + site.data.locales[lang].categories.category_measure.singular + | default: site.data.locales[lang].categories.category_measure + }} + {% endif -%} + , + {% endif %} + + {{ top_posts_size }} + + {% if top_posts_size > 1 %} + {{ + site.data.locales[lang].categories.post_measure.plural + | default: site.data.locales[lang].categories.post_measure + }} + {% else %} + {{ + site.data.locales[lang].categories.post_measure.singular + | default: site.data.locales[lang].categories.post_measure + }} + {% endif %} + + + + + {% if sub_categories_size > 0 %} + + + + {% else %} + + + + {% endif %} +
+ + + + {% if sub_categories_size > 0 %} +
+
    + {% for sub_category in sub_categories %} +
  • + + + {% capture _sub_ctg_url %}/categories/{{ sub_category | slugify | url_encode }}/{% endcapture %} + {{ sub_category }} + + {% assign posts_size = site.categories[sub_category] | size %} + + {{ posts_size }} + + {% if posts_size > 1 %} + {{ + site.data.locales[lang].categories.post_measure.plural + | default: site.data.locales[lang].categories.post_measure + }} + {% else %} + {{ + site.data.locales[lang].categories.post_measure.singular + | default: site.data.locales[lang].categories.post_measure + }} + {% endif %} + +
  • + {% endfor %} +
+
+ {% endif %} +
+ + + {% assign group_index = group_index | plus: 1 %} + {% endif %} +{% endfor %} diff --git a/_layouts/category.html b/_layouts/category.html new file mode 100644 index 0000000..84fa487 --- /dev/null +++ b/_layouts/category.html @@ -0,0 +1,24 @@ +--- +layout: page +# The Category layout +--- + +{% include lang.html %} + +
+

+ + {{ page.title }} + {{ page.posts | size }} +

+ +
    + {% for post in page.posts %} +
  • + {{ post.title }} + + {% include datetime.html date=post.date wrap='span' class='text-muted small' lang=lang %} +
  • + {% endfor %} +
+
diff --git a/_layouts/compress.html b/_layouts/compress.html new file mode 100644 index 0000000..bb34487 --- /dev/null +++ b/_layouts/compress.html @@ -0,0 +1,10 @@ +--- +# Jekyll layout that compresses HTML +# v3.1.0 +# http://jch.penibelst.de/ +# © 2014–2015 Anatol Broder +# MIT License +--- + +{% capture _LINE_FEED %} +{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "
" %}{% endif %}{% unless _pre_before contains "
" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
Step Bytes
raw {{ content | size }}{% if _profile_endings %}
endings {{ _profile_endings }}{% endif %}{% if _profile_startings %}
startings {{ _profile_startings }}{% endif %}{% if _profile_comments %}
comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %}
collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %}
clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %} diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..0047570 --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,76 @@ +--- +layout: compress +# Default layout +--- + + + +{% include origin-type.html %} + +{% include lang.html %} + +{% capture prefer_mode %} + {% if site.theme_mode %} + data-mode="{{ site.theme_mode }}" + {% endif %} +{% endcapture %} + + + + {% include head.html %} + + + {% include sidebar.html lang=lang %} + +
+
+ {% include topbar.html lang=lang %} + {{ content }} + {% include_cached search-results.html lang=lang %} +
+
+ + {% include_cached footer.html lang=lang %} + +
+ + + + {% if site.pwa.enabled %} + + {% endif %} + + {% include js-selector.html %} + + {% if page.mermaid %} + {% include mermaid.html %} + {% endif %} + + {% include_cached search-loader.html %} + + diff --git a/_layouts/home.html b/_layouts/home.html new file mode 100644 index 0000000..4cda9e4 --- /dev/null +++ b/_layouts/home.html @@ -0,0 +1,110 @@ +--- +layout: page +refactor: true +--- + +{% include lang.html %} + +{% assign pinned = site.posts | where: 'pin', 'true' %} +{% assign default = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %} + +{% assign posts = '' | split: '' %} + + + +{% assign offset = paginator.page | minus: 1 | times: paginator.per_page %} +{% assign pinned_num = pinned.size | minus: offset %} + +{% if pinned_num > 0 %} + {% for i in (offset..pinned.size) limit: pinned_num %} + {% assign posts = posts | push: pinned[i] %} + {% endfor %} +{% else %} + {% assign pinned_num = 0 %} +{% endif %} + + + +{% assign default_beg = offset | minus: pinned.size %} + +{% if default_beg < 0 %} + {% assign default_beg = 0 %} +{% endif %} + +{% assign default_num = paginator.posts | size | minus: pinned_num %} +{% assign default_end = default_beg | plus: default_num | minus: 1 %} + +{% if default_num > 0 %} + {% for i in (default_beg..default_end) %} + {% assign posts = posts | push: default[i] %} + {% endfor %} +{% endif %} + +
+ {% for post in posts %} + +
+ {% if post.image %} + {% if post.image.lqip %} + {% capture lqip %}lqip="{{ post.image.lqip }}"{% endcapture %} + {% endif %} + + {% assign src = post.image.path | default: post.image %} + {% unless src contains '//' %} + {% assign src = post.img_path | append: '/' | append: src | replace: '//', '/' %} + {% endunless %} + + {% assign alt = post.image.alt | xml_escape | default: 'Preview Image' %} + + {{ alt }} + {% endif %} + +
+

+ {{ post.title }} +

+ +
+

+ {% include no-linenos.html content=post.content %} + {{ content | markdownify | strip_html | truncate: 200 | escape }} +

+
+ + + +
+ +
+
+ {% endfor %} +
+ + +{% if paginator.total_pages > 1 %} + {% include post-paginator.html %} +{% endif %} diff --git a/_layouts/page.html b/_layouts/page.html new file mode 100644 index 0000000..148f873 --- /dev/null +++ b/_layouts/page.html @@ -0,0 +1,68 @@ +--- +layout: default +--- + +{% include lang.html %} +{% include origin-type.html %} + +{% if layout.tail_includes %} + {% assign has_tail = true %} +{% endif %} + +
+ +
+ {% capture padding %} + {% unless page.layout == 'home' %}px-1{% endunless %} + {% endcapture %} + +
+ {% capture _content %} + {% if layout.refactor or page.layout == 'page' %} + {% include refactor-content.html content=content lang=lang %} + {% else %} + {{ content }} + {% endif %} + {% endcapture %} + + {% if page.layout == 'page' or page.collection == 'tabs' %} + {% assign tab_key = page.title | downcase %} + {% assign title = site.data.locales[lang].tabs[tab_key] | default: page.title %} +

+ {{ title }} +

+
+ {{ _content }} +
+ {% else %} + {{ _content }} + {% endif %} +
+
+ + + +
+
+ {% include_cached update-list.html lang=lang %} + {% include_cached trending-tags.html lang=lang %} +
+ + {% for _include in layout.panel_includes %} + {% assign _include_path = _include | append: '.html' %} + {% include {{ _include_path }} lang=lang %} + {% endfor %} +
+
+ + +{% if has_tail %} +
+
+ {% for _include in layout.tail_includes %} + {% assign _include_path = _include | append: '.html' %} + {% include {{ _include_path }} lang=lang %} + {% endfor %} +
+
+{% endif %} diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..77822a6 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,133 @@ +--- +layout: page +refactor: true +panel_includes: + - toc +tail_includes: + - related-posts + - post-nav + - comments +--- + +{% include lang.html %} + +

{{ page.title }}

+ + + +
+ {{ content }} +
+ +
+ + + {% if page.categories.size > 0 %} + + {% endif %} + + + {% if page.tags.size > 0 %} + + {% endif %} + +
+
+ + {% if site.data.locales[lang].copyright.license.template %} + + {% capture _replacement %} + + {{ site.data.locales[lang].copyright.license.name }} + + {% endcapture %} + + {{ site.data.locales[lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }} + + {% endif %} +
+ + {% include post-sharing.html lang=lang %} + +
+ +
diff --git a/_layouts/tag.html b/_layouts/tag.html new file mode 100644 index 0000000..3b90b8c --- /dev/null +++ b/_layouts/tag.html @@ -0,0 +1,23 @@ +--- +layout: page +# The layout for Tag page +--- + +{% include lang.html %} + +
+

+ + {{ page.title }} + {{ page.posts | size }} +

+
    + {% for post in page.posts %} +
  • + {{ post.title }} + + {% include datetime.html date=post.date wrap='span' class='text-muted small' lang=lang %} +
  • + {% endfor %} +
+
diff --git a/_layouts/tags.html b/_layouts/tags.html new file mode 100644 index 0000000..7800ca0 --- /dev/null +++ b/_layouts/tags.html @@ -0,0 +1,22 @@ +--- +layout: page +# All the Tags of posts. +--- + +
+ {% assign tags = '' | split: '' %} + {% for t in site.tags %} + {% assign tags = tags | push: t[0] %} + {% endfor %} + + {% assign sorted_tags = tags | sort_natural %} + + {% for t in sorted_tags %} + + {% endfor %} +
diff --git a/_plugins/posts-lastmod-hook.rb b/_plugins/posts-lastmod-hook.rb new file mode 100644 index 0000000..1fd6ecf --- /dev/null +++ b/_plugins/posts-lastmod-hook.rb @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby +# +# Check for changed posts + +Jekyll::Hooks.register :posts, :post_init do |post| + + commit_num = `git rev-list --count HEAD "#{ post.path }"` + + if commit_num.to_i > 1 + lastmod_date = `git log -1 --pretty="%ad" --date=iso "#{ post.path }"` + post.data['last_modified_at'] = lastmod_date + end + +end diff --git a/_posts/2023-07-18-spring.md b/_posts/2023-07-18-spring.md new file mode 100644 index 0000000..3625bb0 --- /dev/null +++ b/_posts/2023-07-18-spring.md @@ -0,0 +1,2052 @@ +--- +title: Spring +--- + +## Java and Maven Installation Steps (Ubuntu) + +- java 17 is needed for spring framework 6 / spring boot 3 +- download deb file from [here](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) +- run `sudo apt install ./jdk-17_linux-x64_bin.deb` +- download binary tar.gz file from [here](https://maven.apache.org/download.cgi) +- run `tar xzvf apache-maven-3.9.3-bin.tar.gz` +- add the following to ~/.bashrc - + ```shell + export JAVA_HOME="/usr/lib/jvm/jdk-17" + export PATH="$PATH:$JAVA_HOME/bin/" + + export M2_HOME="~/apache-maven-3.9.3" + export MAVEN_OPTS="-Xms256m -Xmx512m" + export PATH="$PATH:$M2_HOME/bin/" + ``` +- note - when creating projects using start.spring.io, it comes bundled with the maven wrapper + +## Rest + +- evolution of http - http1 ➙ http1.1 ➙ http2 ➙ http3 +- tls is the newer standard and ssl is old (e.g. http3 only supports / uses tls) +- **safe methods** - only fetch information and do not cause changes. e.g. - GET, HEAD (like GET but requests for metadata), OPTIONS (supported http methods by the url), TRACE (echoes the request, helps understand if the request was altered by intermediate servers) +- **idempotent methods** - safe methods, PUT, DELETE (POST is not idempotent) +- status codes - 100 series for informational purpose, 200 series for success, 300 series for redirects, 400 series for client side errors and 500 series for server side errors +- rest - representational state transfer. it is stateless +- **richardson maturity model** - maturity of restful resources. this was probably needed because unlike soap, rest doesn't really have as many standards + - level 0 - swamp of pox - e.g. soap. pox here stands for plain old xml. typically uses just one url and one kind of method + - level 1 - resources - use multiple uris for identifying specific resources. e.g. /products/123 + - level 2 - use http verbs in conjunction with level 1. e.g. POST for creating a product + - level 3 - hateoas - hypermedia as the engine of application state. server returns links in the response to indicate what other actions are available. this helps with the idea of self discovery / self documenting of apis +- **marshalling** (pojo to json) / **unmarshalling** (json to pojo) is done with the help of jackson +- so far, finding [this pdf](https://docs.spring.io/spring-boot/docs/3.2.x/reference/pdf/spring-boot-reference.pdf) good for reference +- spring was introduced by rod johnson as a simpler **alternative to j2ee, thus replacing xml with pojos** +- spring boot is a wrapper around spring, which can do things like auto-configuration e.g. autoconfigure h2 if it is on the classpath, starter dependencies and so on +- **convention over configuration** - there are reasonable defaults, which we can override as needed +- spring boot **has an embedded tomcat server**, which can route requests to the application. earlier, the idea used to be to build war applications (we build jar applications now) and manually deploy them to tomcat servers. tomcat is also called the "servlet container" +- mvc - model view controller. a `DispatcherServlet` running underneath directs requests to / handles responses from the controller +- the controller calls a service, which has the business logic (interacting with db) and returns a model (pojo) +- servlet api is abstracted away from us, but that is what gets used underneath i.e. our requests are sent to servlets that can then forward these requests to our business logic +- the "servlet container" i.e. tomcat is responsible for **converting http requests / response to corresponding servlet request / servlet response** +- we can optionally add **filters** - these can **perform pre / post processing on our servlet requests / servlet responses** - e.g. spring security filters +- so entire flow according to my understanding -
+ ![webmvc architecture](/assets/img/spring/webmvc-architecture.drawio.png) +- `@Service` for service, `@Controller` for controllers +- extend the `CommandLineRunner` interface for initial bootstrapping +- by default in spring boot, package scan happens for any components that are in the same package or inside of any nested packages +- spring context creates components (i.e. instances) via this package scan and holds on to it + ```java + @SpringBootApplication + public class Spring6WebappApplication { + + public static void main(String[] args) { + ApplicationContext ctx = SpringApplication.run(Spring6WebappApplication.class, args); + BookController bookController = ctx.getBean(BookController.class); + } + } + ``` +- we can also autowire the `ApplicationContext` as well +- dependency injection - needed dependency is automatically injected for us. this can be achieved via (3 ways) - + - constructor (instantiation) + - setters + - using field injection i.e. `@Autowired` +- favoured method is using constructor injection with properties marked `private final`. this means the class cannot be instantiated (aka application fails) if the dependency is not available, instead of the dependency causing null pointer exceptions later +- dependency injection works with concrete classes / interfaces (think interface segregation in the i of solid principles) +- inversion of control (2 points) - + - it is the underlying framework that does the heavy lifting for us so that we can focus on the business logic. heavy lifting includes things like instantiation of objects + - allows dependencies to be injected at runtime. the dependencies are not predetermined +- primary beans - if we have two different concrete classes implementing an interface, and we try to use dependency injection for this interface, we get the error **expected single matching bean but found 2**. using `@Primary`, we can ask spring to prefer one of the implementations over another +- we can use `@Qualifier` to specify the bean name explicitly as well. useful when for e.g. we have multiple implementations as described above +- we can also "name" the parameters we want to use dependency injection for correctly. e.g. we have two concrete classes `EnglishGreetingService` and `SpanishGreetingService`. we can use the former using the correct name for the constructor arg + ```java + public Il8NController(GreetingService englishGreetingService) { + this.greetingService = englishGreetingService; + } + ``` +- by default, unless we name the bean, the name used for e.g. for `HelloService` would be `helloService`. we can name beans explicitly as well, e.g. `@Service("bonjourService")` +- profiles - we can annotate a bean with `@Profile` + ```java + @Service + @Profile("EN") + public EnglishHelloService implements GreetingService { } + ``` +- this means that the bean would only be instantiated when that particular profile is active. e.g. - + ```java + @SpringBootTest + @ActiveProfiles("EN") + class IL8NControllerTest { } + ``` +- a bean can be available in multiple profiles - `@Profile({ "EN", "English" })` +- we can also add a bean to be available by default - `@Profile({"EN", "default"})`. this means that if no bean is available, add this bean to the application context. e.g. in this case, use the `EnglishHelloService` implementation when any other bean for the `GreetingService` is not available +- so, we have discussed different techniques to resolve conflicts / to achieve inversion of control - `@Primary`, `@Service`, `@Qualifier`, naming the fields "correctly", `@Profile` (named and default), etc +- bean lifecycle methods - we can hook into the various lifecycle stages that a bean goes through, e.g. when the bean properties are set, when its instantiation is over and so on. we can either implement interfaces like `InitializingBean`, `DisposableBean` or annotations like `@PreDestroy` and `@PostConstruct` +- bean scopes - we can set scope via for e.g. `@Scope(BeanDefinition.SCOPE_PROTOTYPE)`. the different options are - + - **singleton** - it is the default scope of beans, one object per application context + - **prototype** - a new instance is returned every time it is referenced. so, the instance isn't stored in the container. this also means that once an instance is no longer used / referenced, it gets garbage collected + - **web scopes** - for web environments, the instance isn't stored in the container + - **session** - one instance per user per session + - **request** - one instance per http request + - **global session** - one instance per application lifecycle, like singleton +- three lifecycle phases - **initialization**, **use** and **destruction**. steps 1-7 below are for initialization +- note: steps 5 and 6 are done by us manually if we use `@Bean` inside `@Configuration` + 1. **application context is created** + 2. **bean factory is created** + 3. then, **bean definitions are loaded** into the bean factory from all different sources like component scan. the bean factory only contains metadata & references to the beans & has not instantiated them yet + 4. **bean factory post processors** act on the beans to configure them, e.g. fields annotated with `@Value` are set via `PropertySourcesPlaceholderConfigurer`. we can implement `BeanFactoryPostProcessor` if we want, the idea is to configure beans before they are instantiated + 5. **beans are instantiated**, and we do dependency injection using constructors. beans have to be instantiated in the correct order because of the dependency graph + 6. we use **setters** after initialization, e.g. we do dependency injection for setters. in general for good development practice, optional dependencies should use dependency injection via setters while required dependencies should use dependency injection via constructors + 7. **bean post processing** can happen, which is further broker down into 3 steps. note - this is **bean post processing**, step 4 was **bean factory post processing** + 1. pre-init bean post processor - implement `BeanPostProcessor` to call `postProcessBeforeInitialization` + 2. initializer - calls method annotated with `@PostConstruct` + 3. post-init bean post processor - implement `BeanPostProcessor` to call `postProcessAfterInitialization` + 8. **use phase** - application context maintains references to the beans with scope singleton, so they don't get garbage collected etc. we can look into the context anytime by implementing `ApplicationContextAware` and using `setApplicationContext` + 9. **destruction phase** - when close is called on application context. `@PreDestroy` method is called on beans before they are marked for garbage collection +- spring mvc - based on java servlet api, which is blocking. remember **servlet** (servlet container i.e. tomcat, dispatcher servlet, servlet request / servlet response, etc) +- spring webflux uses project reactor and not java servlet api, so it is non blocking +- similarly, `RestTemplate` is the older standard and is on the way to deprecation unlike `WebClient` +- spring works using **proxies** +- proxies wrap a class to add behavior, e.g. transaction proxies +- proxies help in adding behavior without modifying code +- proxies don't act on internal logic like calling private methods +- aspect oriented programming - helps in adding common behavior to many locations +- usually used for **cross cutting concerns** +- spring aop is easier to implement, does runtime weaving +- aspectj is a bit more difficult to implement, does compile time weaving, and has more features +- performance of compile time weaving > runtime weaving +- `JoinPoint` is the code +- `PointCut` is what selects a `JoinPoint` +- `Advice` is what gets applied to `JoinPoint`. three advices have been discussed here - `@Before`, `@AfterReturning` and `@Around` +- example - all methods annotated with `@AspectDebugger` should generate logs + - AspectDebugger.java - + ```java + @Target(ElementType.METHOD) + @Retention(RetentionPolicy.RUNTIME) + public @interface AspectDebugger { + } + ``` + - DebuggingAspect.java - + ```java + @Slf4j + public class DebuggingAspect { + + @Pointcut("@annotation(AspectDebugger)") + public void executeLogging() { + } + + @Before("executeLogging()") + public void logMethodCall(JoinPoint joinPoint) { + log.debug("started executing method: %s, with args: %s\n", + joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs())); + } + + @AfterReturning(value = "executeLogging()", returning = "retVal") + public void logMethodCall(JoinPoint joinPoint, Object retVal) { + log.debug("finished executing method: %s, with return value: %s\n", + joinPoint.getSignature().getName(), retVal); + } + + @Around("executeLogging()") + public Object trackExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { + Long startTime = System.currentTimeMillis(); + Object retVal = joinPoint.proceed(); + Long endTime = System.currentTimeMillis(); + log.debug("method: %s took: %dms to execute\n", + joinPoint.getSignature().getName(), endTime - startTime); + return retVal; + } + } + ``` +- lombok - code generation at compile time +- enable "annotation processing" in intellij for it to work with lombok +- `@Data` - shortcut for `@Getter`, `@Setter`, `@EqualsAndHashCode`, `@ToString`, `@RequiredArgsConstructor` +- `@NonNull` - throw an exception if null value is passed for field +- `@Value` - immutable variant (i.e. `private final`) of `@Data` +- `@SneakyThrows` - throw checked exceptions without declaring it in the throws clause +- `@Synchronized` - better version of `synchronized` +- `@Log` for java util logger. this is not usually recommended +- `@Slf4j` for slf4j logger. slf4j is actually a generic logging facade which uses logback bts in spring +- we can see the generated implementation inside the target folder (intellij has a decompiler that can parse this .class file for us) +- delombok - with the help of lombok plugin in intellij, we can generate the code for an annotation. this provides us with a starting point +- get list can be done by annotating controller method with `@RequestMapping("/api/v1/beer")` +- get by id - make use of path variable + ```java + @RequestMapping("/api/v1/beer") + public class BeerController { + // ... + @RequestMapping(value = "/{beerId}", method = RequestMethod.GET) + public Beer getBeerById(@PathVariable UUID beerId) { + // ... + ``` +- spring-boot-dev-tools - live reload +- using request body for e.g. for create requests. also, it is a good practice to add the location header, which specifies the id of the newly created object - + ```java + @PostMapping + public ResponseEntity saveBeer(@RequestBody Beer beer) { + Beer savedBeer = beerService.saveBeer(beer); + HttpHeaders headers = new HttpHeaders(); + headers.add(HttpHeaders.LOCATION, "/api/v1/beer/" + savedBeer.getId()); + return new ResponseEntity(headers, HttpStatus.CREATED); + } + ``` +- unit test - test specific sections of code, called code coverage. should execute very fast and in unity i.e. not have external dependencies +- integration test - include the spring context, database and message brokers +- functional test - these tests run against a running instance of the service +- testing pyramid - large number of unit tests, fewer integration and even fewer functional tests +- mock mvc - helps us unit test our controllers +- `@WebMvcTest` - create test splices so that the entire context is not brought up. only the controllers specified are instantiated and not even their dependencies. if we do not specify the controller explicitly, all controllers are instantiated +- we mock the dependencies of the controller using mockito +- **mocks** - predefined answers to the method calls. can assert on executions, e.g. assert it was called with a specific parameter +- **spy** - wrapper around the actual object +- the assertion of execution can be done using `verify` +- **argument matchers** - match the arguments of the execution of mocks. e.g. disallow the predefined response if the matching fails +- **argument captors** - capture the arguments of the execution of mocks +- apart from stubbing response, we can also perform assertions on executions of mocks - + ```java + verify(beerService).updateBeerById(eq(beer.getId()), any(Beer.class)); + ``` +- we can use `ArgumentCaptor` from mockito to help us capture arguments passed to mocks + ```java + ArgumentCaptor id_ = ArgumentCaptor.forClass(UUID.class); + verify(beerService).deleteBeerById(id_.capture()); + assertEquals(id, id_.getValue()); + ``` +- use `@MockBean` for injecting the service mocks into the controller +- we use `jsonpath`, which comes from [jayway jsonpath](https://github.com/json-path/JsonPath) +- we use hamcrest matchers e.g. notice the use of `is` + ```java + @WebMvcTest(controllers = {BeerController.class}) + class BeerControllerTest { + + @Autowired + MockMvc mockMvc; + + @MockBean + BeerService beerService; + + @Test + void getBeerById() throws Exception { + Beer beer = Beer.builder().id(UUID.randomUUID()).build(); + when(beerService.getBeerById(beer.getId())).thenReturn(beer); + + mockMvc.perform(get("/api/v1/beer/" + beer.getId()) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$.id", is(beer.getId().toString()))); + } + } + ``` +- using json path capabilities in assertions - + ```java + .andExpect(jsonPath("$.length()", is(2))) + .andExpect(jsonPath("$[?(@.id == '%s')]", one.getId().toString()).exists()) + .andExpect(jsonPath("$[?(@.id == '%s')]", two.getId().toString()).exists()); + ``` +- spring boot does configure an object mapper for us by default which we should prefer using in our test by autowiring instead of creating a new one so that our tests are closer to the real word scenario. we use this object mapper for creating request body in post requests +- if the request body contains json, we need to provide the content type header as well + ```java + mockMvc.perform(post("/api/v1/beer") + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(req))) + .andExpect(status().isCreated()) + .andExpect(header().exists("Location")) + .andExpect(header().string("Location", "/api/v1/beer/" + beer.getId())); + ``` +- when testing using mock mvc, `delete("/api/v1/beer/" + id.toString())` can be written as `delete("/api/v1/beer/{beerId}", id.toString())` to make use of positional binding +- we can also auto-configure mock mvc in a non-`@WebMvcTest` (such as `@SpringBootTest`) by annotating it with `@AutoConfigureMockMvc` +- the default error handling mechanism uses `DefaultHandlerExceptionResolver`, `ResponseStatusExceptionResolver` (maybe more?), which extends `AbstractHandlerExceptionResolver` +- we can annotate the methods inside controllers with `@ExceptionHandler` to handle specific exceptions i.e. we provide the annotation the exception it should handle. we can use this in the methods of controllers. the downside of this is that it is scoped to a single controller +- so, we can annotate a class with `@ControllerAdvice` to handle exceptions globally and continue to use `@ExceptionHandler` on the methods of this class + ```java + public class NotFoundException extends RuntimeException {} + + @ControllerAdvice + public class ErrorHandler { + + @ExceptionHandler(NotFoundException.class) + public ResponseEntity handleMethodNotFound() { + return ResponseEntity.notFound().build(); + } + } + ``` +- `@ResponseStatus` - we can annotate "custom exceptions" with this annotation to use a specific status for that exception. understand we cannot change code of existing pre-built exceptions, so this only works for custom exceptions. this way, we can skip the controller advice shown above + ```java + @ResponseStatus(HttpStatus.NOT_FOUND) + public class NotFoundException extends RuntimeException { + } + ``` +- to prevent having too many custom exceptions / no point of having custom exceptions that are only used once, we can use `ResponseStatusException`. it allows us to throw exceptions with a response status + ```java + catch (Exception e) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Foo", e); + } + ``` +- spring boot's `ErrorController` defines how to handle errors, e.g. respond with whitelabel pages in browsers vs json for rest requests. we can configure it using following properties - + ```properties + # whether to include errors attribute - think this includes validation errors? + server.error.include-binding-errors=never + # whether to include exception attribute + server.error.include-exception=false + # whether to include message attribute - think this is for exception message? + server.error.include-message=never + # whether to include stack trace + server.error.include-stacktrace=never + # whether to display error page in browsers + server.error.whitelabel.enabled=true + ``` +- i observed that by setting the `server.error` properties to as verbose as possible, the errors property in the response was pretty decent (i.e. include the error message, field name, etc) +- however, when testing via mock mvc, something like this was not working - + ```java + .andExpect(jsonPath("$.errors.length()", is(2))) + .andExpect(jsonPath("$.errors[?(@.defaultMessage == '%s')]", "must not be blank").exists()) + .andExpect(jsonPath("$.errors[?(@.defaultMessage == '%s')]", "must not be nullable").exists()) + ``` +- i think this is more to do with how mock mvc isn't actually like a full blown integration test. so, to test the validation handling via mock mvc, i did the below - + ```java + MvcResult result = mockMvc.perform(post("/api/v1/beer") + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(beer))) + .andExpect(status().isBadRequest()) + .andReturn(); + + MethodArgumentNotValidException e = (MethodArgumentNotValidException) result.getResolvedException(); + assertNotNull(e); + List defaultMessages = e.getBindingResult().getFieldErrors("beerName").stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .toList(); + assertEquals(2, defaultMessages.size()); + assertTrue(defaultMessages.contains("must not be null")); + assertTrue(defaultMessages.contains("must not be blanker")); + ``` +- error handling - already discussed earlier - if the exception thrown is annotated with `@ResponseStatus`, it can be handled by `ResponseStatusExceptionResolver`. however, if its not, spring will wrap it around `ServletException`. this is not something mock mvc can handle. so basically, below will not work in such cases - + ```java + MvcResult result = mockMvc.perform(put("/api/v1/beer/{beerId}", beerDto.getId()) + // ... + .andReturn(); + result.getResolvedException() + ``` +- unit testing spring services example - + ```java + @ContextConfiguration(classes = {BeerCSVServiceImpl.class}) + @ExtendWith(SpringExtension.class) + class BeerCSVServiceTest { + + @Autowired + BeerCSVService beerCSVService; + + // ... + ``` +- now, we can use `@MockBean` etc. note how we configure `BeerServiceImpl` but autowire `BeerService` +- rest template - spring automatically autowires a RestTemplateBuilder with sensible defaults for us +- use uri component builder - as we add things like query parameters, we don't have to worry about things like encoding special characters etc, unlike when we directly provide the string url by performing concatenations ourselves +- here we expect the server to return an object of type jpa's Page, and so, we want to deserialize the response into this. now Page is an interface, so we can instead use PageImpl. jackson cannot directly convert to PageImpl (i think this happens because PageImpl does not have the right constructor etc) so we use our own wrapper like below based on ([this](https://stackoverflow.com/a/77316854/11885333)) - + ```java + @JsonIgnoreProperties("pageable") // ignore the pageable property in the response + public class JacksonPage extends PageImpl { + + public JacksonPage(List content, int number, int size, long totalElements) { + super(content, PageRequest.of(number, size), totalElements); + } + } + ``` +- rest template code - note `UriComponentsBuilder`, `ParameterizedTypeReference` + ```java + @Service + @Slf4j + public class BeerClientServiceImpl implements BeerClientService { + + @Override + public Page listBeers(String beerName) { + + UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath("/v1/beer"); + if (beerName != null) uriComponentsBuilder.queryParam("beerName", beerName); + + return restTemplate.exchange( + uriComponentsBuilder.toUriString(), + HttpMethod.GET, + null, + new ParameterizedTypeReference>() { + } + ) + .getBody(); + } + + @Override + public BeerDto getBeerById(UUID beerId) { + + UriComponents uriComponents = UriComponentsBuilder.fromPath("/v1/beer/{beerId}") + .buildAndExpand(beerId); + + return restTemplate.exchange( + uriComponents.toUriString(), + HttpMethod.GET, + null, + new ParameterizedTypeReference() { + } + ) + .getBody(); + } + } + ``` +- note - if we don't really have the need for mapping to a full blown pojo, we can use Map or better JsonNode. JsonNode has methods to parse json and extract different attributes from it etc + ```java + List beerNames = new ArrayList<>(); + response.getBody() + .get("content") + .elements() + .forEachRemaining(beerNode -> beerNames.add(beerNode.get("beerName").asText())); + log.info("response body = [{}]", beerNames); + ``` +- creating a beer - note `HttpEntity` + ```java + @Override + public BeerDto createBeer(BeerDto beerDto) { + ResponseEntity response = restTemplate.exchange( + "/api/v1/beer", + HttpMethod.POST, + new HttpEntity<>(beerDto), + Void.class + ); + URI location = response.getHeaders().getLocation(); + return getBeer(location.getPath()); + } + ``` +- there is a way to unit test rest template using `@RestClientTest`. i am not a fan of so many annotations, so i prefer `@SpringBootTest`, unless i want to do unit testing of services, where i can use `@ExtendWith(SpringExtension.class)`. [my full so answer](https://stackoverflow.com/a/77339935/11885333) + ```java + @Slf4j + @SpringBootTest + class BeerClientServiceImplTest { + + @Autowired + BeerClientService beerClientService; + + @Autowired + ObjectMapper objectMapper; + + @Autowired + RestTemplate beerServiceRt; + + MockRestServiceServer mockServer; + + @BeforeEach + void setUp() { + mockServer = MockRestServiceServer.createServer(beerServiceRt); + } + + @Test + @SneakyThrows + void listBeers() { + Page stubbedResponse = new PageImpl<>( + List.of(BeerDtoMocks.two), PageRequest.of(1, 1), 1 + ); + mockServer.expect(method(HttpMethod.GET)) + .andExpect(requestTo(containsString("/api/v1/beer"))) + .andRespond(withSuccess() + .body(objectMapper.writeValueAsString(stubbedResponse)) + .contentType(MediaType.APPLICATION_JSON)); + + Page response = beerClientService.listBeers(null); + assertEquals(BeerDtoMocks.two.getBeerName(), response.getContent().get(0).getBeerName()); + } + } + ``` +- similarly, to mock post calls (we need to return id in location header) - + ```java + UUID id = UUID.randomUUID(); + URI location = UriComponentsBuilder.fromPath("/api/v1/beer/{beerId}") + .buildAndExpand(id) + .toUri(); + mockServer.expect(method(HttpMethod.POST)) + .andExpect(requestTo(containsString("/api/v1/beer"))) + .andRespond(withAccepted().location(location)); + ``` +- spring 6 introduced [`RestClient`](https://spring.io/blog/2023/07/13/new-in-spring-6-1-restclient/) as an alternative to `RestTemplate`, with fluent api like `WebClient` +- actuator helps us in monitoring and managing our applications through http endpoints +- we can see all available endpoints [here](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints) +- adding actuator in spring boot + ```xml + + org.springframework.boot + spring-boot-starter-actuator + + ``` +- by default, all endpoints are enabled but not exposed, only the health endpoint is exposed. to expose all endpoints, use `management.endpoints.web.exposure.include=*` +- we can see the health at /actuator/health +- it would return `{ status: "UP" }` if it works fine +- this endpoint can for e.g. be useful for configuring readiness probe of spring boot applications deployed on kubernetes +- add property `management.endpoint.health.show-details=ALWAYS`, [docs](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints.health) to show more details +- we can also add custom health checks to show up when we hit the health endpoint (not discussed) +- we can see arbitrary information about the app at /actuator/info +- inside pom.xml inside `spring-boot-maven-plugin`, add below - + ```xml + + + + build-info + + + + ``` +- this gives build time, version, maven coordinates of the project, etc +- it generates a file at target/classes/META-INF/build-info.properties +- add the plugin below - + ```xml + + pl.project13.maven + git-commit-id-plugin + + ``` +- to enable all git related information like branches, last commit, etc., [add below](https://docs.spring.io/spring-boot/docs/2.6.6/reference/html/actuator.html#actuator.endpoints.info.git-commit-information) + ```properties + management.info.git.mode=full + ``` +- it generates a file at target/classes/git.properties +- we can add custom endpoints to actuator as well (not discussed) +- we can secure the health endpoints using spring security! - e.g. allow all users to access the health endpoint and only users with a role of admin to access other endpoints + ```java + @Configuration + public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.authorizeRequests() + .requestMatchers(EndpointRequest.to(HealthEndpoint.class)).permitAll() + .requestMatchers(EndpointRequest.toAnyEndpoint()).hasRole("ADMIN"); + + http.csrf().and().httpBasic(); + } + } + ``` +- metrics - can integrate with many other monitoring systems like cloudwatch, datadog, prometheus, etc. by using micrometer which is vendor neutral, just like slf4j for logging +- it would return information like jvm memory usage, system cpu usage, etc +- hitting `/actuator/metrics/` will show what all endpoints we can hit, then we can hit them via for instance `/actuator/metrics/application.ready.time` +- opencsv - convert csv records to pojo. define pojo as such - + ```java + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public class BeerCSVRecordDto { + + @CsvBindByName + private Integer row; + + @CsvBindByName(column = "count.x") // specify column name explicitly + private Integer countX; + } + ``` +- now, use the code below - + ```java + File file = ResourceUtils.getFile("classpath:data/beers.csv"); + List records = new CsvToBeanBuilder(new FileReader(file)) + .withType(BeerCSVRecordDto.class) + .build() + .parse(); + ``` +- note - `ResourceUtils` comes from spring, can be used for reading files in classpath easily + +## JPA + +- ddl - data definition language - creating / dropping tables, indices, etc +- dml - data manipulation language - insert, update and delete data +- dql - data query language - retrieving data, joins, aggregations, etc +- dcl - data control language - grant / revoke access +- at its core, jdbc (java database connectivity) is used to interact with sql databases +- jdbc is used to prepare sql statements, bind arguments, scroll through results, etc +- clearly, this is low level api and therefore tedious to work with +- idea is to work with java objects instead of `java.sql.ResultSet` +- **object / relational paradigm mismatch** / **impedance mismatch** - object models and relational models do not work well together out of the box. some examples are - + - granularity - e.g. let us say user has an address (one to one). in java, there would be a separate address class to represent this, and the user class will contain a reference to the address class. in sql, the same user table might have multiple columns for address like state, city, zip code, etc + - inheritance - e.g. we have multiple billing details, credit card and bank account. in java, there would be separate classes representing credit card and bank account, both extending a common super class billing details. sql doesn't support inheritance like this + - identity - == in java is for instance identity. equals in java is for instance equality, where all fields can be compared. equality of two rows in database is done by database identity i.e. comparing only the primary key. all three things are different + - association - in java, we can represent them using object references, e.g. for one to many, the one side would have a list as an object reference, while the many side will only have a single object reference. in sql however, we just have a foreign key constraint +- hibernate is basically an orm (object relational mapper) +- so, this helps with interoperability between java objects and underlying rdbms using metadata +- jpa - jakarta persistence api is a specification. hibernate implements jpa +- other hibernate components - + - hibernate validator - implementation of bean validation (jsr 303) + - hibernate envers - audit trail of data + - hibernate search - uses apache lucene underneath to add text search capabilities + - hibernate ogm (object grid mapper) - reusing hibernate for no sql databases including key value, graph, document, etc + - hibernate reactive - non blocking way of interacting with the database + - hibernate jpamodelgen - static metamodel (discussed later) +- spring data commons - helps unify access to different kinds of data stores, be it relational or no sql, and makes code even more concise +- spring data jpa is a jpa specific implementation of spring data, adding functionality like generating implementations based on interface method names +- other spring data components - + - spring data jdbc - sits on top of spring data. so, it eliminates the magic that spring data jpa might have, but at the same time eliminates boilerplate unlike when interacting with jdbc directly + - spring data rest - exposing spring data repositories as rest resources + - spring data mongodb - for mongodb (document database) + - spring data redis - for redis (key value database) + - spring data neo4j - for neo4j (graph database) +- simple class example with id - + ```java + @Entity + @Data + @AllArgsConstructor + @NoArgsConstructor + public class Message { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String text; + } + ``` +- `EntityManagerFactory` / `EntityManager` are jpa, while `SessionFactory` / `Session` are specific to hibernate, so i assume we should always try using the former. note the syntax below of starting and committing a transaction + ```java + @Test + public void loadFromStorage() throws Exception { + List messages; + + try (EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-one")) { + try (EntityManager em = emf.createEntityManager()) { + em.getTransaction().begin(); + Message message = Message.builder().text("hello world!").build(); + em.persist(message); + em.getTransaction().commit(); + + em.getTransaction().begin(); + messages = em.createQuery("select m from Message m", Message.class).getResultList(); + messages.get(0).setText("updated hello!"); + em.getTransaction().commit(); + } + } + + assertAll( + () -> assertEquals(1, messages.size()), + () -> assertEquals("updated hello!", messages.get(0).getText()) + ); + } + ``` +- using spring data jpa, this is even simpler - + ```java + @Test + public void loadFromStorage() { + Message message = Message.builder().build(); + message.setText("hello spring data jpa!"); + messageDao.save(message); + + Iterable messages = messageDao.findAll(); + assertEquals("hello spring data jpa!", messages.iterator().next().getText()); + } + ``` +- note - performance of spring data is considerably slower than regular hibernate when dealing with very huge amounts of data +- for the most part, we should use / be able to use jpa annotations, coming from jakarta.persistence. we should have to use ones coming from hibernate for specific use cases only +- we can have global annotations which do not need to be put into a specific file, like `@NamedQuery`. we can keep global metadata inside a file package-info.java +- for rapid prototyping, we can set `spring.jpa.hibernate.ddl-auto=update` but for production, prefer using `validate` instead +- to log the sql statements, use `spring.jpa.show-sql=true` or `logging.level.org.hibernate.SQL=DEBUG` (the later will use the logger i.e. have package name etc. before to help maintain the standard log format). for debugging purpose, we can log the values as well i.e. without the property `logging.level.org.hibernate.orm.jdbc.bind=TRACE` set to trace like this, logs will show the sql but not the actual values in statements like insert +- hikari - maintains a connection pool to the database. establishing a connection to the database is a complex / resource intensive operation +- database migration - prior to or in conjunction with the application. help track history, successful vs unsuccessful scripts etc. and thus avoid data loss +- two popular solutions - liquibase (more complex and robust) and flyway +- both have integrations with spring boot (preferred since automated?), maven / gradle plugins and have clis as well +- flyway commands - + - migrate - migrate to latest version + - clean - drop all database objects (NOT FOR PRODUCTION) + - info - print information about migrations + - validate - validate available migrations with applied migrations + - undo - undo the most recently applied migration + - baseline - baseline an existing database i.e. we start using flyway from an intermediary state and not from get go + - repair - repair the schema history tables maintained by flyway +- add the flyway dependency for mysql (version comes from spring boot starter parent) + ```xml + + org.flywaydb + flyway-mysql + + ``` +- files should be inside of resources/db/migration and have the format `V1__init-beer.sql` +- note - if encountering too many problems with h2 vs mysql (e.g. i encountered one with uuid described above), we can use db/migration/\ folder - is it better to just use test containers instead? +- flyway automatically creates the `flyway_schema_history` table for us the first time around and adds these scripts to it as rows + + | installed_rank | version | description | type | script | checksum | installed_by | installed_on | execution_time | success | + | -------------- | ------- | ----------- | ---- | ------------------- | ---------- | ------------ | -------------------------- | -------------- | ------- | + | 1 | 1 | init-beer | SQL | V1\_\_init-beer.sql | -978541020 | SA | 2023-07-22 20:38:03.365998 | 4 | TRUE | + +- my doubt - hopefully, there is some "serious" locking / transaction level that flyway uses. e.g. what if i have horizontally scaled instances - i would not want there to be any consistency issues +- validation - defensive programming +- e.g. do not allow null / white spaces for name - + ```java + @NotNull + @NotBlank + private String beerName; + ``` + and add `@Valid` to the method arguments like so + ```java + public ResponseEntity saveBeer(@Valid @RequestBody BeerDto beer) { + ``` +- we can also apply hibernate validations on our entities (which i don't think is a good practice) and the database type constraints themselves (e.g. column length limits) act as a validation layer as well +- accessing metadata at runtime - we can access the **metadata of our models** at runtime. two options - + - **dynamic metamodel** - using jakarta we get the `EntityManagerFactory` - remember only this - `emf.getMetamodel()`. notice how we get access to the entity and its attributes - + ```java + Metamodel metamodel = emf.getMetamodel(); + Set> managedTypes = metamodel.getManagedTypes(); + ManagedType itemType = managedTypes.iterator().next(); + SingularAttribute idAttribute = itemType.getSingularAttribute("id"); + ``` + - **static metamodel** - hibernate to jpa metamodel generator, using `hibernate-jpamodelgen` dependency. use case - type safe query builder - + ```java + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery query = cb.createQuery(Item.class); + Root fromItem = query.from(Item.class); + Path namePath = fromItem.get(Item_.name); + query.where(cb.like(namePath, cb.parameter(String.class, "pattern"))); + + List items = em.createQuery(query) + .setParameter("pattern", "%Item 1%") + .getResultList(); + ``` +- note - with spring 6, the javax persistence namespace has been renamed to jakarta +- all annotations like `@Id`, `@GeneratedValue`, `@Entity`, etc. come from jakarta.persistence now +- beauty of `CrudRepository` - we can change spring-data-jpa to spring-data-mongodb, without any changes required inside code. this is because it comes from spring-data-commons i believe +- `JpaRepository` extends both `CrudRepository` and `PagingAndSortingRepository` for us, so people usually use this variant +- jpa can generate implementations based on interface method names. some things it supports includes `Like`, `IgnoreCase`, `OrderBy` (with `Asc` / `Desc`), `Distinct`, `LessThan`, `First` / `Top` +- we can return `List`, `Optional`, etc +- the syntax correctness of these methods are verified when the application context loads up +- `@Query` - the method name in this case can be anything +- we can bind parameters by position or by name, and use `@Param` if we bind using name +- we can add the `nativeQuery` to write native sql, but we loose out on portability (swap underlying relational database easily, e.g. integration test vs production) +- `@Query` issue - while this does give more flexibility around writing complex jpql, the correctness of the query is not verified like interface methods i.e. the query will only fail execution when called. maybe because unlike here, jpa has to generate the corresponding concrete implementation in case of interface methods? +- **projections** - spring data jpa can also help change shape of return type instead of using the persistent class as the return type. e.g. we want to fetch less data from database for optimization / exposing less fields to the service layer, etc +- we can use interface or classes for this custom projection +- interface projection - the underlying "proxy class" would be generated by jpa +- **interface projection** has two types - **close projections** and **open projections** +- **close projections** - names of interface methods match the names of the persistent class attributes + ```java + public interface EmployeeView { + + String getFirstName(); + + String getLastName(); + } + ``` +- **open projections** - when we want to do more complex things. notice how we use spel inside `@Value` + ```java + public interface EmployeeView { + + @Value("#{target.firstName} #{target.lastName}") + String getFullName(); + } + ``` +- issue - spring cannot optimize closed projections since it does not know in advance what columns might be required unlike in open projections +- **class projection** - the names of the constructor arguments should match the field names of the persistent class exactly + ```java + @Data + public class EmployeeDto { + private String fullName; + + public EmployeeDto(String firstName, String lastName, String email) { + this.fullName = firstName + " " + lastName; + } + } + ``` +- issue - nesting of projections (e.g. one to many) is not supported by class based projections unlike interface based projections +- for insert, update, delete operations, we can continue using `@Query`, but we also need to add `@Modifying` on top of it +- the automatic generation of implementation based on method names is also supported for delete operations, e.g. `deleteByLevel` +- `deleteByLevel` vs `deleteBulkByLevel` - `deleteByLevel` will first run a query and then delete all objects one by one. this will also thus call "registered callbacks" if any. `deleteBulkByLevel` will run a single jpql query i.e. not load all the elements first, and skip all callbacks +- qbe - **query by example** - allows for dynamic query creation - something we cannot do using techniques like `@Query` / interface method names +- it has three parts - + - **probe** - we set the values used by `ExampleMatcher` in the persistent class + - **`ExampleMatcher`** - provides the rules for matching the properties + - **`Example`** - combines the `ExampleMatcher` and probe +- example of qbe. note - if we do not use `withIgnorePaths`, default values of the probe (e.g. 0 for primitive integer) would be put in the where clause of the sql / jpql for those properties + ```java + User user = new User(); + user.setEmail("@someotherdomain.com"); + + ExampleMatcher matcher = ExampleMatcher.matching() + .withIgnorePaths("level", "active") + .withMatcher("email", match -> match.endsWith()); + + List users = userRepository.findAll(Example.of(user, matcher)); + ``` +- doubt - based on how we are manually setting properties inside for e.g. `withIgnorePaths`, is this a good use case for introducing hibernate-jpamodelgen? +- request param - note how we pass required as false, since it is true by default. use case - e.g. providing pagination related parameters + ```java + public List listBeers(@RequestParam(required = false) Integer pageNumber) { + ``` +- a neat trick - right click on a method -> refactor -> change signature. we can for e.g. add a new argument to the method, e.g. String beerName. we can also provide a default value, e.g. null. this means that the method and all its usage will be appropriately refactored, without us doing this manually in every place +- implementing paging and sorting - + - to repository methods, add an argument of PageRequest - constructed using page number, size, sort object + - repository methods return a Page - contains the content (list of objects), utility methods to go to next / previous page, etc +- implementation - + ```java + // repository + Page findAllByBeerStyle(BeerStyle beerStyle, PageRequest pageRequest); + + // service + PageRequest pageRequest = PageRequest.of( + pageNumber != null && pageNumber > 0 ? pageNumber - 1 : DEFAULT_PAGE_NUMBER, + pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE, + Sort.by(Sort.Order.by("beerName"), Sort.Order.by("beerStyle")) + ); + + Page beers = beerRepository.findAllByBeerStyle(beerStyle, pageRequest); + return beers.map(beerMapper::map); // returns new Page by calling map on all elements of page + + // tests - for instance, create a Page object to stub return values + Page beers = new PageImpl<>(List.of(one, two)); + ``` +- **entity type** - they are the persistent classes we use. they have ids (key constraint, identity constraint) and foreign keys for referencing other entity types (referential constraint). they have their own lifecycle and exist independently of other entity types +- **value type** - they belong to another entity type and do not have their own lifecycle. they would not have an identity of their own. some examples of value types - + - address in user. can be represented as **embeddable classes** in jpa + - recall the idea of **weak identities** and **identifying relationships**. e.g. a bid is a weak identity and its **identifying relations** are item and user. so, value types can be represented as a table inside our database as well +- recall - instance identity != instance equality != database identity +- primary keys - should not be null (entity constraint), should be unique (key constraint) and should not be updatable (hibernate does not work well with updatable primary keys) +- due to the restrictions above, and the fact that databases do not "perform optimally" with all types when indexing, it is better to have **surrogate keys** over **natural keys** +- for taking help from jpa to generate surrogate keys, we use `@GeneratedValue` along with `@Id`. otherwise, we will have to take care of assigning identifiers ourselves + - `GenerationType.AUTO` - the default. jpa talks to the underlying database to decide which strategy is the best + - `GenerationType.IDENTITY` - auto incremented primary key column + - `GenerationType.SEQUENCE` - a table is maintained separately, and this is called every time before an insert + - `GenerationType.TABLE` - an extra table called `HIBERNATE_SEQUENCES` is maintained, where there is one row for each entity. this table would be referred to before every insert +- sequence vs auto increment - why we should consider sequence - in case of auto increment, we need to wait for response from the database for ids. in case of sequence, hibernate is "aware" of the id. so, our instances would have an id assigned to them even if the actual insert inside the db has not happened yet (multiple inserts can be batched, which is when this might be useful) +- another option - uuid - for globally unique ids. advantage - is random and fairly unique across systems and databases. disadvantage - more space and is thus less efficient compared to the incremented ids + ```java + @Data + @Builder + @Entity + @AllArgsConstructor + @NoArgsConstructor + public class PersistentBeer { + + @Id + @GeneratedValue + @UuidGenerator // org.hibernate.annotations.UuidGenerator + @Column(columnDefinition = "binary(16)") + private UUID id; + + @Version + private Integer version; + + // ... + } + ``` +- note - had to add the `columnDefinition` because without it, h2 was failing when `ddl-auto` was set to `validate` but mysql works without this as well +- calling methods, like `repo.save(obj)` doesn't always guarantee obj will be updated by jpa, so always use `obj = repo.save(obj)` instead. remember how first level cache is used by jpa etc, so that is where these things probably become important +- override table name using `@Table`. by default, our camel cased classes are converted to snake case. note - sql is case insensitive +- we can also pass properties like schema etc to `@Table` +- `hibernate.auto_quote_keyword` - have hibernate automatically add quotes to reserved keywords which might be used as table / column names. remember that for spring boot, the prefix of `spring.jpa.properties` might come into picture, i.e. `spring.jpa.properties.hibernate.auto_quote_keyword=true` +- we can also use backticks / double quotes explicitly, e.g. `@Table("\"User\"")` +- if for e.g. we need a naming strategy, e.g. prefix all tables names with `CE_`. we can use naming strategy for this - + ```java + public class CENamingStrategy extends PhysicalNamingStrategyStandardImpl { + + @Override + public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) { + return new Identifier("CE_" + name.getText(), name.isQuoted()); + } + } + + // ... + properties.put("hibernate.physical_naming_strategy", CENamingStrategy.class.getName()); + ``` +- **dynamic sql generation** - even when we update some columns, we see all columns being updated ie. previous column values itself are used. when using hibernate, when we load our application, hibernate generates crud statements for all our persistent classes and caches them. this way, it does not have to regenerate them entirely every time 🤯. this behavior can be disabled as well. use case - we only update one column, but our sql will try updating all columns by reusing the previous value, but this can become very slow if the table has a lot of columns +- some classes are never updated once created, e.g. bid. hibernate can avoid dirty checking for such classes, thus making it faster. for this, annotate the persistent class with `@Immutable` +- we can create views using `@Subselect` +- we can also have the regular repositories for these to use them - + ```java + @Entity + @Immutable + @Subselect( + value = "select i.ID as ITEMID, i.NAME as NAME, " + + "count(b.ID) as NUMBEROFBIDS " + + "from ITEM i left outer join BID b on i.ID = b.ITEM_ID " + + "group by i.ID, i.NAME" + ) + @Synchronize({ "ITEM", "BID" }) + public class ItemBidSummary { + + @Id + private Long itemId; + + private String name; + + private long numberOfBids; + } + ``` +- why we should mention table names inside `@Synchronize` - this way, hibernate knows to **flush the updates** for these views before running the query +- so, remember the three annotations along with `@Entity` for views - `@Immutable`, `@Subselect`, `@Synchronize` +- primitive java types, their corresponding wrapper types and most java datetime related types can be directly converted by hibernate to corresponding sql types +- otherwise, if the property extends java.io.Serializable, the property is stored in its serialized form. this can have many issues - + - serialization / deserialization is costly + - if the application is demised, the class is no longer available and therefore the data in the database can no longer be interpreted +- **transient** - some properties need not be persisted. e.g. we might want to store `initialPrice` but not `initialPriceAfterTax`. we can use either the java `transient` keyword, or `@Transient` +- checks can be done using multiple ways. just stay consistent - + - hibernate validator, e.g. `@NotNull`. can help us validate at presentation layer. also, if using hibernate for ddl generation, this annotation would be ignored + - jpa / hibernate annotations, e.g. `@Column(nullable = false)`. exception would be thrown by jpa before the insert / update statement is executed. also, if using hibernate for ddl generation, this annotation would be factored in + - advantage - exception is thrown by hibernate itself without hitting database, thus performant + - disadvantage - duplication of logic if similar constraints are present in ddl as well + - relying on database having `not null` defined for columns. in this case, a constraint violation exception would be thrown by the database + - disadvantage - we lose out on flexibility, since changing constraints requires ddl + - advantage - data integrity guarantees for consumers using this data directly +- annotate properties with `@Generated`, so that hibernate knows that these values are generated by the database, and that hibernate needs to make "an extra round trip" after inserting / updating these entities to fetch the new value, by calling a new select +- jpa / hibernate handle usual java to sql type mapping, e.g. Integer / int in java to integer in sql, long / Long in java to bigint in sql, etc +- the idea is while there are some defaults, we can provide more specific values, for e.g. precision and scale for numeric types, length of string for varchar types, etc. not only that, based on what length we specify, hibernate can also decide the corresponding type for mysql - longtext, mediumtext. similarly, for byte[], it can choose tinyblob, mediumblob and longblob +- my understanding - we can lazy load large data types by annotating using `@Basic(fetch = FetchType.LAZY)`! +- to adjust whether we want to save only date, only timestamp or both date and timestamp, we can use `@Temporal`. default is `@Temporal(TemporalType.TIMESTAMP)`, but we can use just `DATE` / `TIME` +- enums - by default, if we don't add the annotation `@Enumerated(EnumType.STRING)`, the ordinal position will be used. issue - if we introduce a new value, it might affect the position of the existing enum values, thus making our data go haywire +- **property access** - jpa can either access the properties directly via fields, or via getter and setter methods. good practice - let everything use fields. if we need the persistence layer to go via getters and setters, we can do it as follows - + ```java + @Access(AccessType.PROPERTY) // the other one is AccessType.FIELD + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name.startsWith("AUCTION: ") ? name : "AUCTION: " + name; + } + ``` +- my understanding - the above can also be achieved using `@ColumnTransformer`, in which case we deal with sql instead of java code +- derived properties - calculated at runtime using sql. these are calculated every time the item is "retrieved from the database". so, do consider values getting outdated. doubt - can `@Synchronize` discussed earlier help with this? also, obviously these properties would be ignored in insert and update statements + ```java + @Formula("(select avg(b.amount) from bid b where b.item_id = id)") + private BigDecimal averageBidAmount; + ``` +- **custom converter** - e.g. we want to support a special type for currencies in our object model, but this of course might not be supported by the relational database we use. so, we can use custom converters (remember `@Convert`, `AttributeConverter` and `@Converter`) - + ```java + // target, as seen by object model + class MonetaryAmount implements Serializable { + + private BigDecimal value; + + private Currency currency; + } + + // object model type to relation model type interconversion + @Converter + class MonetaryAmountConverter implements AttributeConverter { + + @Override + public String convertToDatabaseColumn(MonetaryAmount monetaryAmount) { + return monetaryAmount.toString(); + } + + @Override + public MonetaryAmount convertToEntityAttribute(String s) { + String[] split = s.split(" "); // 35.61 USD + return new MonetaryAmount( + new BigDecimal(split[0]), + Currency.getInstance(split[1]) + ); + } + } + + // declaring the attribute + @Convert(converter = MonetaryAmountConverter.class) + @Column(name = "price", length = 63) + private MonetaryAmount buyNowPrice; + ``` +- create and update timestamps - + ```java + @CreationTimestamp(source = SourceType.DB) + private LocalDateTime createdDate; + + @UpdateTimestamp(source = SourceType.DB) + private LocalDateTime updateDate; + ``` +- my understanding - the default is using jvm's time, which might be an issue, since for e.g. for a horizontally scaled application the clocks might not be synchronized. disadvantage here is every insert would then not be "buffered" and have to be flushed immediately, just like generation strategy of identity vs sequence? +- embeddable - recall two kinds of **association** - **composition** and **aggregation**. _embeddable means composition_ +- so, embeddable entities - + - do not have their own identity. primary key is owning entity's primary key + - when owning entity is deleted or saved, same operation is carried out on embeddable entity + - it does not have a lifecycle of its own +- e.g. user (owning) and address - + ```java + @Embeddable + public class Address { + + private String street; + } + + @Entity + public class User { + + @Id + @GeneratedValue + private Long id; + + private String username; + + // note - no annotation needed here + private Address homeAddress; + } + ``` +- different approaches for inheritance have been discussed now - +- **mapped superclass** - mapping all subclasses to different tables + ```java + @MappedSuperclass + public class BillingDetails { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String owner; + } + + @Entity + public class BankAccount extends BillingDetails { + + private String account; + + private String bankName; + } + + @Entity + public class CreditCard extends BillingDetails { + + private String number; + + private String exp; + } + ``` +- output -
+ ![mapped superclass](/assets/img/spring/mapped-superclass.png) +- optionally, we could have made `BillingDetails` abstract +- also, to override properties of superclass from the subclass, we can use `@AttributeOverride`, e.g. modify the column name `owner` to `cc_owner` for the credit card table - + ```java + @AttributeOverride( + name = "owner", + column = @Column(name = "cc_owner") + ) + ``` +- this logic around mapped superclass can be extended to repositories as well. note how we use 1. generics and 2. `@NoRepositoryBean`. then, we can have specific methods in subclass dao / generic methods in superclass dao + ```java + @NoRepositoryBean + public interface BillingDetailsDao extends JpaRepository { + + Optional findByOwner(String owner); + } + + public interface CreditCardDao extends BillingDetailsDao { + + Optional findByNumber(String number); + } + + public interface BankAccountDao extends BillingDetailsDao { + } + ``` +- tips with mapped superclass - + - problem - doesn't work with polymorphic associations - we cannot have other entities reference `BillingDetails` / `BillingDetails` cannot reference other entities. this is because `BillingDetails` itself is not a concrete table + - when to use - for top level classes, when further modifications / changes in future are unlikely +- we can instead use **table per class** +- minute changes to code + - add `@Entity` to `BillingDetails` + - replace `@MappedSuperclass` with `@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)` + ```java + @Entity + @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) + public abstract class BillingDetails { + // ... + ``` + - remove `@NoRepositoryBean` from `BillingDetailsDao` +- advantage of table per class - supports foreign key +- my understanding - internally, table per class can do a "union of the tables of the subclasses" when querying the superclass. this is not supported when using mapped superclass. e.g. a user has a list of messages - and a message can of type sms, email, etc. so, we can use table per class for message class, and this way, while we see different tables in the relational database for different subclasses, we can have associations to our message class +- what above means i think is that in jpql, we can write `select * from BillingDetails` in table per class, but not in mapped superclass +- remember to create the `BillingDetails` as an abstract class, otherwise a new table for `BillingDetails` was being created +- probably because of how things work, another feature - we can now have foreign keys for a generic `BillingDetails`, i could see a common sequence table - billing_details_seq for both bank_account and credit_card. so, important - does this mean that there can be foreign keys to `BillingDetails` i.e. abstract class when using table per class, but not when using mapped superclass? +- so, it feels like table per class could be desirable for actual polymorphism cases, while invalid when we are just trying to move properties like create and update timestamp, id, etc to a common class, in which case mapped superclass is better +- **single table** hierarchy - a single table is used for representing the superclass, which has all the columns from all the subclasses +- a column for discriminating is used (default is dtype) - this helps determine which subclass a row belongs to +- code - only change is strategy + ```java + @Entity + @Inheritance(strategy = InheritanceType.SINGLE_TABLE) + public abstract class BillingDetails { + // ... + ``` +- output -
+ ![single table](/assets/img/spring/single-table.png) +- advantage - reporting, gains in performance since no unions etc is involved, schema evolution is straight forward, etc +- disadvantage - data integrity, e.g. cannot enforce not null for columns of subclasses at database level (we can use validation techniques however). there is also a denormalization involved here +- when using repositories of subclasses, hibernate will automatically add filtering logic - `where dtype = 'BankAccount'` for us bts +- we can of course use the base class in jpql (since the table is of base class after all) +- **joined** - this strategy will have tables for all subclasses and superclasses +- so, there would be joins involved - the id column in the subclasses (e.g. bank_account below) is both a primary key and a foreign key reference to the superclass (e.g. billing_details below) +- hibernate knows how to perform the joins for us +- code - only change is strategy + ```java + @Entity + @Inheritance(strategy = InheritanceType.JOINED) + public abstract class BillingDetails { + // ... + ``` +- output -
+ ![joined](/assets/img/spring/joined.png) +- e.g. if i run `billingDetailsDao.findAll()`, the sql run is as below. note the left join and the `case when` clause which helps hibernate determine which subclass it might map to + ```sql + select + b1_0.id, + case + when b1_1.id is not null then 1 + when b1_2.id is not null then 2 + end, + -- other columns + from + billing_details b1_0 + left join bank_account b1_1 on b1_0.id = b1_1.id + left join credit_card b1_2 on b1_0.id = b1_2.id + ``` +- e.g. if i run `bankAccountDao.findAll()`, the sql run is as below. note the normal (inner?) join + ```sql + select + b1_0.id, + -- other columns + from + bank_account b1_0 + join billing_details b1_1 on b1_0.id = b1_1.id + ``` +- disadvantage - joins are involved, thus taking a performance hit +- imagine our legacy system has two tables - author and author_details. however, in our new domain models, we would like to see it as one class + ![secondary table](/assets/img/spring/secondary-table.png) +- we can map the above using `@SecondaryTable`. note how we mention the `PrimaryKeyJoinColumn`, because the default was otherwise id i.e. the same column name as that of author table + ```java + @Entity + @SecondaryTable( + name = "author_details", + pkJoinColumns = @PrimaryKeyJoinColumn(name = "author_id") + ) + @Data + @AllArgsConstructor + @NoArgsConstructor + public class Author { + + @Id + @GeneratedValue + private Long id; + + private String name; + + @Column(table = "author_details") + private Instant dob; + + @Column(table = "author_details") + private String countryOfOrigin; + } + ``` +- java collections framework works well with hibernate +- we can use `ElementCollection`. i think that the point is that the child entity is owned by the parent i.e. "composition". features like cascading of persistence, deletion, etc follow. the child object need not be marked with `@Entity` itself. i do not see any real upside of this over the usual `OneToMany` etc annotations by making the child as an `@Entity`, so skipping it for now. we get much more fine grained control this way +- considerations when writing implementations for associations - + - we should always (as a best practice and as a requirement by jpa) use interfaces like `java.util.Set` instead of concrete implementations + - hibernate has its own collection classes for associations like one to many, which helps it with **dirty checking**. so basically, our collection instances are wrapped with these hibernate collections to help with dirty checking etc + - we should consider initializing with an empty collection's concrete implementation to avoid null checks / null pointer exceptions for newly created entities + - when creating bidirectional links, we need to carry out two steps for linking both sides, so, we can also add convenience methods like so - + ```java + public void addBid(Bid bid) { + bids.add(bid); + bid.setItem(this); + } + ``` +- many to one - this is the simplest, directly maps to the foreign key column. default column name used by jpa below is `item_id`. also, notice how we override the fetch type, since the default is eager + ```java + @ManyToOne(fetch = FetchType.LAZY) + private Item item; + ``` +- we can override the foreign key column name using `@JoinColumn` +- we can make this bidirectional, by mapping the one to many side as well. `getBids` will automatically fetch all the bids for an item for us +- one to many - using the `mappedBy` column, we tell hibernate that "load using the foreign key already specified inside the `item` property of `Bid`". the default fetch type is lazy. + ```java + @OneToMany(mappedBy = "item") + private Set bids = new HashSet<>(); + ``` +- it is common to set the cascade option on the `OneToMany`. in this case, we would want to cascade persist and remove +- `orphanRemoval = true` (false by default) tells hibernate that a bid should be deleted if it is removed from an item's collection. understand how this is different from remove cascade - cascade only ensures calls to delete bids are made when we call delete item + ```java + @OneToMany( + mappedBy = "item", + cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, + orphanRemoval = true + ) + private Set bids = new HashSet<>(); + ``` +- note - my understanding - another difference between using `ElementCollection` vs `OneToMany` is that when we do for e.g. collection.clear() in the prior, a single database statement is issued, while deletes happen one by one in the later. so is it safe to assume that relying on cascade when deleting huge chunks of data is not a feasible option, and we should use some custom jpql / try using `deleteBulk` variants? +- another option - when specifying foreign keys, some sql databases support the `on delete cascade` clause. this way, when an item is deleted, its bids are deleted automatically by the database itself. we can tell hibernate about this using - + ```java + @OneToMany( + mappedBy = "item", + cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, + orphanRemoval = true + ) + @OnDelete(action = OnDeleteAction.CASCADE) + private Set bids = new HashSet<>(); + ``` +- as soon as i comment out the OnDelete line, i see a delete statement for each bid of an item, but with that, i only see one delete statement in the output. is my assumption wrong - i can get rid of the `CascadeType.REMOVE` line with `OnDelete`? +- **cascading state transitions** - entities are independent by default. however, we might want for e.g. bids to be persisted when an item is persisted, bids to be deleted when an item is deleted. for this, we already saw - `CascadeType.PERSIST`, `CascadeType.REMOVE`. along with that, we have `orphanRemoval` to delete a bid removed from `item#bids` and finally, remember our ddl can contain `on delete cascade` +- some lombok specific annotations worth adding to one to many - + ```java + @Builder.Default + @EqualsAndHashCode.Exclude + @ToString.Exclude + ``` +- it might be more feasible to use `@Embeddable` for one to one associations. use one to one when we need to track the entity lifecycle separately i.e. if there are **shared references**. meaning - if a user just has a billing address and a shipping address, address can be marked as an embeddable. lets say another entity shipment has an address as well. we might want a shipment and a user to maintain reference to the same address instance. in this case, OneToOne becomes more feasible +- sometimes, when having one to one mapping, people end up using the same primary key for both tables. in this case, we can use the `@PrimaryKeyJoinColumn` +- normally, we would map one to one mapping using a separate foreign key / surrogate key combination, which is when we can use `@OneToOne` +- lastly, if we would like to track one to one relationships via a separate table, we can use the `@JoinTable` annotation. some use cases i can think of + - the relation itself (and not one of the entities) has some attributes + - storing nulls for foreign keys can be troublesome sometimes. so, it might be better to store all possible relations if any in a separate table altogether +- for one to many side, when defining the field, our options are (recall how it is advisable to use java collections interface on lhs, and not concrete implementations) - + - sets (`Set`) - no duplicates, no order + - lists (`List`) - duplicates, order + - bags (`Collection`) - duplicates, no order +- so based on above, for performance, the best type to use is bags. both de duping and maintaining order are expensive operations for hibernate + ```java + private Collection bids = new ArrayList<>(); + ``` +- disadvantage - we cannot eager fetch two or more collections of bags simultaneously, because it results in a **cartesian product** (discussed later) +- again to customize column names etc, the many side of one to many relation can have the `@JoinColumn`, while the one side will have the `mappedBy` to indicate it is not the owning side of the relationship +- my understanding of list - probably, using `List` instead of `Collection` never makes sense, unless we want to use `@OrderColumn`. this annotation basically orders elements inside the list and maintains the index of the element in a separate column of the table via the column name specified in the `@OrderColumn` (note - of course, `@OrderColumn` would be present on the field having the `@OneToMany`). now, this results in a performance degradation - hibernate will all the time do the reordering when we insert an element to the list etc (e.g. inserting / deleting element not at the ends of the list can be an o(n) operation). so, we might be better off just treating order as a separate field using `@Column`, forget about `@OrderColumn`, and let the ui do the grunt work of sorting / maintaining this order. now, we can use `Collection` instead of `List`. however, if one must - + ```java + // ... + @OneToMany(mappedBy = "item") + @OrderColumn(name = "bid_rank") + private List bids = new ArrayList<>(); + + // ... + @ManyToOne + private Item item; + ``` +- output -
+ ![order column](/assets/img/spring/order-column.png) +- again, we can have a `@JoinTable` in case the one to many is optional / the relationship itself has some attributes, and moving them to the many side is logically incorrect + ```java + // ... + @OneToMany(mappedBy = "item") + @OrderColumn(name = "bid_rank") + private List bids = new ArrayList<>(); + + // ... + @ManyToOne + @JoinTable( + name = "item_bids", + joinColumns = {@JoinColumn(name = "bid_id")}, + inverseJoinColumns = {@JoinColumn(name = "item_id")} + ) + private Item item; + ``` +- output -
+ ![join table one to many](/assets/img/spring/join-table-one-to-many.png) +- many to many - one side can just have `mappedBy` for the `@ManyToMany`, the other side can define the `@JoinTable` + ```java + // ... + @ManyToMany + @JoinTable( + name = "item_categories", + joinColumns = {@JoinColumn(name = "item_id")}, + inverseJoinColumns = {@JoinColumn(name = "category_id")} + ) + private Collection categories = new ArrayList<>(); + + // ... + @ManyToMany(mappedBy = "categories") + private Collection items = new ArrayList<>(); + ``` +- output -
+ ![many to many](/assets/img/spring/many-to-many.png) +- cascading options of remove might not make sense for many to many +- using an intermediate table to track the join table using a separate entity altogether. we can use `@EmbeddedId` to track the composite key. jpa does not pass without setting insertable / updatable to false and specifying column name explicitly inside the `Id` class + ```java + @Entity + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public class ItemCategories { + + @EmbeddedId + private Id id; + + @ManyToOne + @JoinColumn(insertable = false, updatable = false) + private Item item; + + @ManyToOne + @JoinColumn(insertable = false, updatable = false) + private Category category; + + private String linkedBy; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + private static class Id implements Serializable { + + @Column(name = "category_id") + private Long categoryId; + + @Column(name = "item_id") + private Long itemId; + } + } + + // ... + + @OneToMany(mappedBy = "item") + private Collection itemCategories = new ArrayList<>(); + + // ... + + @OneToMany(mappedBy = "category") + private Collection itemCategories = new ArrayList<>(); + ``` +- output of `show create table item_categories` -
+ ![many to many with entity](/assets/img/spring/many-to-many-with-entity.png) +- note - we do not have to touch the id column for the most part - we will just call `setItem` / `setCategory`, and let hibernate do the rest for us +- **entity states** - + - **transient** - when we create a new instance using the `new` operator, the instance is in transient state i.e. it would be lost when no longer referenced. a transient instance will become persistent in multiple ways - e.g. `EntityManager#persist` is called on it directly, or there is a cascading operation from another instance which references this transient instance, etc + - **persistent** - it has a representation in the database. it has a primary key / id set. an instance can become persistent in multiple ways - via `EntityManager#persist`, or it is fetched using a query directly, fetched due to for e.g. lazy loading, etc. persistent instances are always associated with a persistent context + - **removed** - an entity can be deleted from the database in multiple ways - via `EntityManager#remove`, removed via orphan removal, etc + - **detached** - e.g. we find an entity using `EntityManager#find`, and then close the persistence context. our application logic still has a handle to this instance. the instance is now in detached state. we can make modifications on this instance and call `merge` later using a new `EntityManager` i.e. a detached instance from one persistence context can be merged into another persistence context +- **persistence context** - a persistence context is created when we call `EntityManager em = emf.createEntityManager()`, and closed when we call `em.close()` +- when persistence context is closed (`em.getTransaction().commit()`?), hibernate performs **dirty checking** to get the changes made by application +- then, it performs a sync with the underlying database using right dml. this sync process is called **flushing**. we can also call `em.flush()` manually when needed to achieve the same? +- e.g. hibernate can perform the flush before a query to ensure the updated data is reflected in the query +- the persistence context also represents a *unit of work* +- the persistence context also acts as a **first level of cache** - if an entity is queried "again" in a persistence context, the same instance is returned again instead of hitting the database again. this way, during the entire unit of work i.e. inside the persistence context, the entity seen is the same everywhere, and then after the end, the entity can be safely written to the database +- recall impedance mismatch - so, based on above, hibernate guarantees instance identity, therefore instance equality and database identity both automatically. to validate - will this be true then - `repo.findById(1) == repo.findAll().findFirst(where id = 123)` + - does this mean we do not have to override equals? we should, and that too using a **business key** (discussed later) +- persistence context is scoped to a thread +- my understanding, tying things together - when we call `EntityManager#persist`, the instance goes into persistent state. **during this, hibernate has to assign an identity to the instance**. now, if we use something like auto increment, hibernate has to actually perform the insert into the database. if we do not use sequence generator etc, hibernate can delay this execution till flushing! +- by techniques like delaying flushing dml to the end, batching, etc, hibernate ensures that the database locks are acquired for a short duration (database locks are needed for write operations) +- **lazy** - further, when we for e.g. run `Item item = em.getReference(Item.class, itemId);`, hibernate does not immediately run the sql. the id of the item instance is initialized (since we provided it) but other properties are not. the item object is like a proxy, and the sql is not run until another property is accessed, e.g. `item.getName()` +- if for e.g. we try to access `item.getName()` after closing the persistence context, we will get a `LazyInitializationException` +- **refresh** - e.g. "someone else" makes changes to the database. we can cause hibernate to refetch our instance using `em.refresh(item)` +- one seemingly clever approach - override the equals method to use the database identifier for equality. disadvantages - + - multiple transient instances added to a set will coalesce into one, since all have their id set as null + - when we call save on transient instances in a set, since their id changes, their hash code changes, and therefore they break the collection +- solution - use a **business key** i.e. a combination of other attributes which make it unique +- therefore, **do not use the surrogate key for equals** - hibernate already uses it for its **first level of cache** as discussed earlier +- we can use the foreign entity association for equals and hash code - e.g. for the bid entity, the business key can be a combination of item and its amount. this might mean using the business key of the foreign entity association internally +- initial databases had **2 phase locking**, while modern databases have **mvcc** +- **mvcc** - **multi version concurrency control** - with this, the locking is reduced even further, so that - + - readers do not block writers + - writers do not block readers + - multiple writers can however still not access a record +- for this to work, **multiple versions** of the same record need to exist +- some common problems have been discussed now - +- **the lost update** problem - + - transaction one starts to add 10 to our balance + - so, transaction one reads the balance as 100 + - transaction two starts to add 20 to our balance + - so, transaction two also reads the balance as 100 + - transaction one commits 110 to the database + - transaction two commits 120 to the database + - so the final state is 120, which should have ideally been 130, i.e. the update of transaction one is lost +- **unrepeatable read** problem - + - transaction one tries finding current balance and reads 100 + - transaction two comes in, adds 10 and commits changes to database + - transaction one tries finding current balance again and reads 110 this time + - so, transaction one has read different values for the same row during its execution +- **phantom read** problem - + - transaction one tries generating a statement and finds 110 _transactions_ for the month of february + - transaction two comes in, adds 10 and commits changes to database + - transaction one tries generating a statement and finds 111 _transactions_ for the month of february + - so, transaction one has read different result sets for the same query during its execution + - my understanding - basically, it is like unrepeatable read, but instead of just the values, the amount of rows increase or decrease, so its due to insert or delete, unlike unrepeatable read which is due to update +- so, both jpa and sql have **isolation levels** (recall i of acid!). remember - as we increase isolation level, performance degrades. in multi user concurrent systems like today, we might have to sacrifice some amount of isolation for better performance and scalability. just remember the name, the definition will become obvious - + - **read uncommitted isolation** - all problems are allowed + - **read committed isolation** - dirty reads are not permitted + - **repeatable read isolation** - nothing is permitted except phantom reads + - **serializable isolation** - emulates serial execution i.e. transactions are executed one after another and not concurrently. none of the four problems are permitted. this relies on table locks and not just row level locks +- my understanding 😠 - despite what i wrote above, apparently, due to the change in industry standard from 2 phase locking to mvcc, at least in mysql, lost update is not prevented by an isolation level of repeatable read as well. it is prevented by serializable isolation level, which does not use mvcc at all, and uses 2 phase locking!! this is why, we should use `@Version` always, or at least that is what i understand from [this](https://stackoverflow.com/a/53564708/11885333) answer +- jpa uses the isolation level of database connection - most resolve to read committed, but mysql uses repeatable read +- however, recall how persistence context cache is used when we attempt to retrieve the same row twice. this means that while isolation level is read committed, we are effectively using repeatable read +- **optimistic concurrency control** - hibernate supports maintaining **version columns** for us automatically, using which ensures _first commit wins_ in case of parallel transactions. it is easy to use, so probably use it always +- note - use optimistic concurrency control only when it is acceptable to detect conflicts late in a unit of work. concurrent updates should not be a frequent scenario, otherwise a lot of cpu cycles would be wasted i.e. the computation would be performed and then the update would have to be rejected +- to enable versioning, we use `@Version` +- we should not have to set version manually, it should be handled by hibernate for us automatically - if hibernate feels that the entity has changed during dirty checking, it would automatically bump up the version number for us bts +- when updating, instead of the where clause having `where id = ?`, the where clause now has `where id = ? and version = ?` +- we can use int, short, long, and hibernate will wrap again from 0 if the version limit is reached +- `OptimisticLockException` is raised if version is changed by another concurrent transaction +- we might not like the extra version column. hibernate can use the timestamp fields like last modified by to help achieve optimistic locking + ```java + @Version + private LocalDateTime lastUpdatedAt; + ``` +- tip - due to jvms being possibly deployed on different operating systems, the time might not be guaranteed to be accurate / synchronized in all of them (clock skew). so, we can tell hibernate to ask the database for the timestamp. disadvantage - a database hit is required every time, just like when using auto incremented ids +- how i tested if optimistic locking is working in my application - try updating using same version twice - the second update should throw an exception. also note how i disable the transaction on the test method so that this test is executed "out of a transaction". finally, recall how exception would be wrapped by `ServletException` when using mock mvc + ```java + @Test + @SneakyThrows + @Transactional(propagation = Propagation.NOT_SUPPORTED) + void updateBeerByIdOptimisticLockingCheck() { + PersistentBeer beer = beerRepository.findAll().get(0); + BeerDto beerDto = beerMapper.map(beer); + + beerDto.setBeerName("updated beer name"); + mockMvc.perform(put("/api/v1/beer/{beerId}", beerDto.getId()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(beerDto))) + .andExpect(status().isNoContent()); + + beerDto.setBeerName("updated beer name again"); + ServletException e = assertThrows( + ServletException.class, + () -> mockMvc.perform(put("/api/v1/beer/{beerId}", beerDto.getId()) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(beerDto))) + .andExpect(status().is5xxServerError()) + ); + assertTrue(e.getMessage().contains("ObjectOptimisticLockingFailureException")); + } + ``` +- **optimistic lock mode** - imagine item to category is many to one. we have many categories and items, and we would like to find the sum of prices for all items for each category. however, when we were iterating through categories, midway through, category for an item was changed, thus making us consider an item into two (or maybe no) categories +- basically, we have the unrepeatable read problem (category_id of item has been updated). note - recall how we discussed that hibernate has default of read committed, and with the help of hibernate persistence context cache, it kind of becomes repeatable read. so, why do we still have the problem? in our case, a result set is returned for every query. so, while hibernate persistence context cache would contain the older version of the item, it would load this item in the result set. yes, the older version of the item is loaded but it can still happen that multiple result sets contain an item / no result sets contain an item +- so, we can set lock mode = optimistic. this way, after performing all the operations (during commit), **for each item that we loaded**, hibernate would rerun a select and match the version column. if it has changed, it would throw the `OptimisticLockException` + ```java + EntityManager em = emf.createEntityManager(); + em.getTransaction().begin(); + + for (Long categoryId : CATEGORIES) { + List items = em.createQuery("select i from Item i where i.category.id = :catId", Item.class) + .setLockMode(LockModeType.OPTIMISTIC) + .setParameter("catId", categoryId) + .getResultList(); + + for (Item item : items) + totalPrice = totalPrice.add(item.getBuyNowPrice()); + } + + em.getTransaction().commit(); + em.close(); + ``` +- my understanding - why do i even need `LockModeType.OPTIMISTIC` if i already added `@Version` - e.g. understand in above example that we actually never modified Items for our query! our problem was that items that we read were modified! by default, jpa will only perform version checking using `@Version` for updates (maybe deletes as well, not sure). here, we want it to perform the version checking for the items we selected as well! so, we use `LockModeType.OPTIMISTIC` +- of course, for `LockModeType.OPTIMISTIC` to work, we need to have a `@Version` column, otherwise what will it check! +- note - i think we can annotate jpa repository methods with `@Lock(LockModeType.OPTIMISTIC)` as well +- disadvantage of lock mode - if we use 100 locks, we will get 100 additional queries for checking the version as described earlier +- i think that the point is that while transaction's isolation applies to the whole unit of work, the lock would apply to particular operations inside that transaction +- **optimistic force increment lock mode** - another problem - e.g. we want to find an item's highest bid. while performing the calculation, someone concurrently added a new bid. so, essentially our highest bid might be wrong. this cannot be caught by adding a version to bid as well +- a trick to solve this - enforce that when the item is read, its version is incremented. this way, when there is a flush, it would be noticed that the item version had changed (because a new bid was added to it) + ```java + Item item = em.find(Item.class, itemId, LockModeType.OPTIMISTIC_FORCE_INCREMENT); + bid.setItem(item); + bidRepo.save(bid); + // saving bid increments item version as well + // even though item did not change (bid has item_id, bid to item is many to one) + ``` +- this is a common operation - forceful increment of a root instance when child data is modified +- another advantage of optimistic force increment lock mode - recall how in optimistic lock mode, the version checking happens and then the transaction is committed. it can happen that during this phase itself, there is an update to the database! this is what optimistic force increment lock mode helps solve - i think because the root item's version needs to be incremented, it needs to be locked, just "reading" the version is not enough +- **pessimistic locks** - optimistic locks (we discussed two of them above) are implemented by jpa / hibernate using the version column, but pessimistic locks take help of the actual underlying database locks +- the difference between optimistic locks and pessimistic locks - + - **optimistic locks use version checks in for e.g. where clause of dml statements**, e.g. update only when version = 2 + - **pessimistic locks use database locks**. they can be shared (read locks are usually shared) or exclusive (e.g. write locks are usually exclusive). e.g. of doing this in mysql etc is `select ... for update`. **the idea is the rows which match the select clause cannot be touched till the lock is released / update is over** +- **pessimistic force increment lock mode** - just the like its optimistic counterpart. the only difference is that here, we increment the version at the beginning of the transaction, and not at the end. we now have a db lock on that record as well till the transaction gets over, so concurrent transactions cannot write to that row. whether they can read or not depends on whether the database uses is 2 phase locking or mvcc. syntax - `LockMode.PESSIMISTIC_FORCE_INCREMENT` +- **pessimistic read** - acquire a read (recall how it is implemented as shared) lock +- **pessimistic write** - acquire a write (recall how it is implemented as exclusive) lock +- so five locks have been discussed - **optimistic**, **optimistic force increment**, **pessimistic force increment**, **pessimistic read**, **pessimistic write** +- deadlocks - deadlocks can happen easily in concurrent applications, e.g. one thread tries updating item 1 and then item 2, while another thread tries updating item 2 then item 1. thread 1 waits for lock 2, thread 2 waits for lock 1. "underlying dbms" have capabilities around realizing this and aborting one of the transactions +- one solution - set `hibernate.order_updates` property to true, so that updates are processed in order by all applications +- spring data jpa has an "implicit transactional context" that kicks in for the repository methods we call if there is no existing transaction. however, when we use for e.g. `@DataJpaTest`, it has its own `@Transactional`. so, behavior of test (using explicit transaction provided by the jpa test) might not be the same as the actual service layer code (using implicit transaction of repositories). so, we should try using explicit transactions as a best practice +- both spring and jakarta have the transactional annotations, i believe either can be used +- we can also use `@Transactional` on repository methods +- because of how spring proxies / aop works, `@Transactional` would not kick in when calling internal methods +- tests - annotate classes with `@DataJpaTest`, it does have its own `@Transactional`. reason for writing jpa tests - e.g. we use jpa's query dsl. while it does have compile time checking, we should assert the functionality of our query +- note - the `@DataJpaTest` annotation wasn't picking up the properties file, where i had configured h2 url and parameters like MODE=MYSQL (otherwise flyway migration scripts were failing). so, i had to add the below based on [this](https://stackoverflow.com/a/57345507/11885333) + ```java + @DataJpaTest + @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) + ``` +- **if we annotate our test class with `@Transactional`, it rolls back the transaction at the end of each test method by default**. caveat - remember when using `RANDOM_PORT`, `DEFINED_PORT`, etc. a real servlet environment is used bts. thus, client and server run on different threads. therefore, only client side transaction is rolled back +- if a method in bean 1 calls a method in bean 2, which transaction is the method in bean 2 executed? this is defined via **transaction propagation** - + - **required** - if a transaction exists, the process is continued in that transaction. else, a new transaction is created + - **supports** - if a transaction exists, the process is continued in that transaction. else, no transaction is created + - **mandatory** - if a transaction exists, the process is continued in that transaction. else, `TransactionRequiredException` is thrown + - **requires new** - if a transaction exists, it is suspended and a new transaction is created. else, a new transaction is created + - **not supported** - if a transaction exists, it is suspended. else, no transaction is created + - **never** - if a transaction exists, `IllegalTransactionStateException` is thrown. else, no transaction is created + - **nested** - if a transaction exists, a sub transaction would be created. this means a **save point** is created and then the processes continues. if there is an error in the sub transaction, the changes would be rolled back up to the save point and then continued. if no transaction was present, a new transaction would be created +- optionally, we can specify `rollbackFor` to rollback the transaction for certain exceptions, or `noRollbackFor` to not rollback the transaction for certain exceptions +- inside `@Transactional` apart from propagation, isolation, (rollback for / no rollback for), etc. we can specify - + - **time out** - after this, the transaction will automatically rollback + - **read only** - marking transactions as read only allows jpa to make optimizations. so, remember parameters like this, `@Immutable`, etc +- using `@Transactional` is the **declarative**, preferred approach. we can use an imperative approach via `TransactionTemplate` + ```java + TransactionTemplate transactionTemplate = ...; + transactionTemplate.setIsolationLevel(...); + transactionTemplate.setPropagationBehavior(...); + transactionTemplate.execute((status) -> { + return ""; + }); + ``` +- we can load data by navigating the entity graph - `item.getSeller().getAddress().getCity()` - the focus of the next few points +- **fetch plan** - what to load +- **fetch strategy** - how to load +- **fetch profile** - store the fetch plan and fetch strategy as a fetch profile to reuse it later +- we define the default - **lazy** or **eager** in the domain models mapping +- we should try defaulting to lazy when possible, so that data is loaded on demand +- again, hibernate proxies are used to implement this functionality for us +- if for e.g. our entity is in detached state, we might get a `LazyInitializationException` when trying to access the lazily loaded fields +- my understanding - e.g. we want to find the size of a collection in one to many. if we run `item.getBids().size()`, i think the entire collection would be loaded due to the proxy nature. we can instead use `Hibernate.size(item.getBids())` to avoid this full query. this way, only the `count(*)` query would be run, and the `item.getBids()` still remains uninitialized. similarly, we have `Hibernate.contains` etc +- issues - + - lazy loading leads to **n + 1 selects problem** + - eager loading can lead to **cartesian product problem** +- we should avoid both extremes, and try finding a middle ground between both +- n + 1 selects problem - 1 query for fetching all items, then n queries for each item's seller + ```java + List items = em.createQuery("select i from Item i").getResultList(); + for (Item item : items) { + assertNotNull(item.getSeller.getUsername()); + } + ``` +- cartesian product problem - when we try eager loading of two collections with one sql query. e.g. an item has 3 images and 3 bids. it would result in an sql table with 9 rows. while it is automatically deduped for us if we use `Set`, this is not a desirable outcome, since a lot of duplicated rows are sent across the network from database to application. it is more performant to break the query into smaller individual parts +- apart from the above problem, we can have a lot of nested eager fetch statements, e.g. item has bids, which can have seller, which can have address and so on. hibernate has a `hibernate.max_fetch_depth` property. my understanding - after this depth is reached, hibernate will start issuing individual select statements like in lazy loading. by default, there is no preset limit for this property, while sql dialects like mysql set it to 2 by default +- **batch size** is one possible solution for n + 1 selects query problem. we annotate the User entity with `@BatchSize` like below - + ```java + @Entity + @BatchSize(size = 10) + public class User { + } + ``` +- refer the item example above, where each `item.getSeller().getUsername()` was resulting in a separate db call. with the current method, there would be a call like below - 10 user proxies would be initialized in one go - + ```sql + select * from users where id in (?, ?, ...) + ``` +- apparently, hibernate is more optimized then i thought it is! it will internally create several batch loaders, which i assume _hopefully_ run in parallel, i.e. if i specify batch size to be 32, and i have to load 31 items, there would be three fetches of sizes 16, 10 and 5, instead of one big fetch of 32. this behavior is configurable via `batch_fetch_style` +- the `BatchSize` argument can also be set on collections - + ```java + @BatchSize(size = 10) + private Set bids = new HashSet<>(); + ``` +- **fetch mode - subselect** is another solution for n + 1 selects query problem. we annotate with `@Fetch` like below - + ```java + @Fetch(FetchMode.SUBSELECT) + private Set bids = new HashSet<>(); + ``` +- refer the item example above, where each `item.getSeller().getUsername()` was resulting in a separate db call. with the current method, there would be a call like below - fetch all users for all items in one go - + ```sql + select * from bid where item_id in ( + select id from item where id in (?, ?, ...) + ) + ``` +- of course, such optimizations are restricted to a persistence context, because after that, probably hibernate discards the entities it stores in memory, and they are garbage collected +- **fetch mode - select** is a solution for the cartesian product problem. we annotate with `@Fetch` like below - + ```java + @Fetch(FetchMode.SELECT) + private Set bids = new HashSet<>(); + + @Fetch(FetchMode.SELECT) + private Set images = new HashSet<>(); + ``` +- with the current method, there would be separate calls for bids and images +- now cartesian product of course happens when setting fetch type as eager. since it is a global setting, it is not a reommended approach. the best approach is to dynamically fetch eagerly as and when needed +- dynamic eager fetching in jpql - `select i from Item i left join fetch i.bids` +- same support is present in criteria builder as well (not discussed) +- **fetch profiles** - global metadata, so while we can place it on a class, the best place for them is inside package-info.java + ```java + @FetchProfiles({ + @FetchProfile( + name = "fetch_bids", + fetchOverrides = @FetchProfile.FetchOverride( + entity = Item.class, + association = "bids", + mode = FetchMode.JOIN + ) + ), + @FetchProfile( + name = "fetch_images", + fetchOverrides = @FetchProfile.FetchOverride( + entity = Image.class, + association = "images", + mode = FetchMode.JOIN + ) + ) + }) + ``` +- since fetch profile is a hibernate specific feature, entity manager by itself is not enough for it. this technique of using unwrap to obtain a hibernate session from jpa entity manager is common - + ```java + em.unwrap(Session.class).enableFetchProfile("fetch_bids"); + Item item = em.find(Item.class, 123); + ``` +- jpa also has **entity graphs** for similar functionality +- **filtering data** - examples - + - when data is read from database by hibernate, restrict some data + - when data is written to database by hibernate, add some audit logs +- we can execute **side effects** using **event listeners**, which help hook into the lifecycle of hibernate +- `@PostPersist` - invoked after the entity is stored inside the database +- we can anotate any method with this, the class need not extend any special interface etc +- we can use the argument as `Object` to capture for all entities, or specify the type of the entity to capture it only for specific entities + ```java + public class PersistEntityListener { + + @PostPersist + public void logMessage(Object entityInstance) { + User currentUser = CurrentUser.INSTANCE.get(); + log.save("Entity instance persisted by " + + currentUser.getUsername() + + ": " + + entityInstance + ); + } + } + ``` +- we have many more annotations like `@PostPersist` for different points in the lifecycle +- for the entity listener above to work, the entity must be annotated with the right listeners - + ```java + @EntityListeners(PersistEntityListener.class) + @Entity + public class Item { + // ... + ``` +- we can also place it directly inside the entity itself, in which case the method will not have any arguments - we would use `this` instead + ```java + @Entity + public class User { + // ... + + + @PostPersist + public void logMessage() { + User currentUser = CurrentUser.INSTANCE.get(); + log.save("Entity instance persisted by " + + currentUser.getUsername() + + ": " + + this + ); + } + } + ``` +- this was all jpa i.e. annotations like `@PostPersist`, `@PreRemove`, etc. hibernate has an even more powerful api - **hibernate interceptors** (skipping for now since code is a bit more involved) +- envers - helps maintain multiple versions of the data +- we need to annotate entity we would like to audit using `@Audited`, and the properties we would like to skip for auditing using `@NotAudited` +- whenever we modify the data in some way, a new record is inserted in the **revinfo** table. this contains a **primary key (rev)** and a **timestamp**. use of timestamp - "give me a list of items as they were on last friday" +- now, each audited table will have a corresponding **foreign key (rev)** pointing to the revinfo table, and a **revtype** column which indicates whether the item was inserted, updated or deleted
+ ![envers](/assets/img/spring/envers.png) + +## Spring Security + +- security is a non functional requirement i.e. it isn't a part of business concerns, but it is critical +- includes https, firewalls, and application security (the focus of spring security) +- when we add the spring security dependencies, we get a session based authenticated app by default, where the default user name is user and the password is printed in console +- why spring security - + - supports a lot of different mechanisms like basic username / password authentication, oauth, jwt, etc + - supports lot of features like path or method level security with authorization etc +- recall flow - user <-> servlet container <-> filters <-> dispatcher servlet <-> controller handler +- **spring security** adds a lot of its own **filters** as well +- spring security architecture - + - user sends their details + - spring security filters will populate the "authentication object" with the user auth details - in spring security, this "authentication object" is the standard responsible to hold details related to current user + - then, this "authentication object" is forwarded to "authentication manager" + - the "authentication manager" talks to different "authentication providers". it tries all the "authentication providers" our application has configured, and selects the one that is successful + - the "authentication provider" takes the "authentication object" populated with credentials as input, and returns the "authentication object" populated with principal, authorities, etc as output + - we can have different "authentication provider"s - like ldap, oauth, username and password, etc + - "authentication providers" can take help of classes like - + - "user details service" / "user details manager" (which can retrieve users from the given principal) + - note how the communication between "user details service" and "authentication provider" is using "user details" object, and not "authentication object" like the rest of the flow + - "password encoder" + - finally, the authentication object is stored in the "security context" +- diagram -
+ ![spring security architecture](/assets/img/spring/spring-security-architecture.drawio.png) +- some concrete implementations of classes discussed above - no need to remember these, this just validates our understanding of the above diagram + - `UsernamePasswordAuthenticationToken` is an implementation of the `Authentication` object + - `ProviderManager` is an implementation of `AuthenticationManager` + - `DaoAuthenticationProvider` is an implementation of `AuthenticationProvider` + - `InMemoryUserDetailsManager` is an implementation of `UserDetailsManager` + - `User` is an implementation of `UserDetails` +- by default, the following `SecurityFilterChain` is configured for us, visible inside `SpringBootWebSecurityConfiguration` + ```java + @Bean + @Order(SecurityProperties.BASIC_AUTH_ORDER) + SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests((requests) -> requests.anyRequest().authenticated()); + http.formLogin(withDefaults()); + http.httpBasic(withDefaults()); + return http.build(); + } + ``` +- this says - + - any request should be authenticated + - for ui as in when hitting endpoints from browser, show the basic form + - when hitting endpoints from postman etc, use basic authentication +- when we specify our own `SecurityFilterChain`, this bean would not be used +- for e.g. protecting all paths except some - + ```java + @Bean + public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + http.authorizeHttpRequests((requests) -> requests + .requestMatchers("/notices", "/contact").permitAll() + .requestMatchers("/**").authenticated() + ); + http.formLogin(Customizer.withDefaults()); + http.httpBasic(Customizer.withDefaults()); + return http.build(); + } + ``` +- recall how authentication providers use `UserDetailsManager`. there are multiple implementations of `UserDetailsManager` like - + - `InMemoryUserDetailsManager` + - `JdbcUserDetailsManager` + - `LdapUserDetailsManager` +- all the `UserDetailsManager` implementations we discussed deal with the `UserDetails` object, which has functionality for getting authorities, username, password, etc +- recall we discussed that we use `Authentication` for communication between spring security classes. so, since the `UserDetailsManager` deals with `UserDetails`, the `AuthenticationProvider` converts the `UserDetails` object into `Authentication` object +- one of the `UserDetailsManager` implementations is `JdbcUserDetailsManager`. it expects tables to be present in a certain way e.g. tables for users, groups, authorities, etc. e.g. [refer the ddl here](https://docs.spring.io/spring-security/reference/servlet/authentication/passwords/jdbc.html) +- then, after ensuring the database has these tables, we can add a few records to the users and authorities tables +- then, we just add spring-data-jpa and correct driver for the database connection to the dependencies +- finally add the bean below - + ```java + @Bean + public UserDetailsManager userDetailsManager(DataSource dataSource) { + return new JdbcUserDetailsManager(dataSource); + } + ``` +- what if JdbcUserDetailsManager is not good for us due to the schema rigidity, and we want something custom, we can implement our own `UserDetailsService`. what is `UserDetailsService` 😫 - it is `UserDetailsManager` with only `loadByUsername`. our goal is to map the user representation in our system (customer in this case) that our data source understands to `UserDetails` object, which is implemented by `User` + ```java + @Bean + public UserDetailsService userDetailsService() { + return (username) -> customerDao.findByEmail(username) + .map(customer -> new User( + customer.getEmail(), // username + customer.getPassword(), // password + List.of(new SimpleGrantedAuthority(customer.getRole())) // authorities + )) + .orElseThrow(() -> new UsernameNotFoundException("customer with email " + username + " not found")); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } + ``` +- notice how with so less lines of code, we have a custom authentication + authorization built! - all we did was + - specify the `UserDetailsManager` slice to use via `UserDetailsService` + - the password encoder to use + - authenticate endpoints using a bean of `SecurityFilterChain` +- why did we not have to do any password validation? because `AuthenticationProvider` (concrete implementation is `DaoAuthenticationProvider`) does it for us automatically based on the password encoder we configure! remember, we configured user details manager, not authentication provider +- password encoder - + - encoding - e.g. base64. an algorithm is used to encode. this doesn't involve any secret. we can usually use decoding to retrieve the actual value. so, it is not ideal for passwords + - encryption - a secret key is used, so it is more secure than encoding. however, we can still use decryption to get back the original value, if the secret is leaked + - hashing (1 way) - e.g. bcrypt. use a function to obtain a hash value. it is not reversible, so it is very secure. to validate, we pass the input and **match it** with the stored hashed value. now what does match it actually mean - + - every time the hash is generated for the **same input**, the output is different! this way, if two users have the same password, the same representation is **not** stored inside the database, thus making it even more secure. the hashing algorithm knows if the raw input **matches** the stored hash value +- since i used the bcrypt password encoder, the stored value looks like this - `$2a$10$aj6zt3F9zLr9U39kwVUCxusnd.DvqakuP9/lxp8n8yFHnKrOvIuIK`. here, the beginning i.e. $2a gives the version of bcrypt used, and after that, $10 gives the number of rounds used +- for brcypt (or generally any hashing algorithm?) we can configure - + - **strength** + - **number of rounds** + - **salt** +- a simple registration process based on the `UserDetailsService` and `AuthenticationProvider` we configured above - + ```java + @PostMapping("/register") + @ResponseStatus(HttpStatus.CREATED) + public void registerUser(@RequestBody PersistentCustomer customer) { + customerDao.findByEmail(customer.getEmail()).ifPresent((existing) -> { + throw new RuntimeException("customer with email " + existing.getEmail() + " already exists"); + }); + customer.setPassword(passwordEncoder.encode(customer.getPassword())); + customerDao.save(customer); + } + ``` +- if we wanted more customization, **instead of** providing implementation of `UserDetailsManager` via `UserDetailsService#loadByUsername`, we can provide a bean of `AuthenticationProvider` +- understand how based on flow diagram we saw, unlike returning `UserDetails` object via concrete implementation `User`, we now have to return `Authentication` object via concrete implementation `UsernamePasswordAuthenticationToken` + ```java + @Component + @RequiredArgsConstructor + public class CustomAuthenticationProvider implements AuthenticationProvider { + + private final CustomerDao customerDao; + + private final PasswordEncoder passwordEncoder; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + PersistentCustomer customer = customerDao.findByEmail(authentication.getName()) + .orElseThrow(() -> new BadCredentialsException("customer with email " + authentication.getName() + " does not exist")); + if (!passwordEncoder.matches(authentication.getCredentials().toString(), customer.getPassword())) { + throw new BadCredentialsException("passwords do not match for customer with email " + authentication.getName()); + } + return new UsernamePasswordAuthenticationToken( + customer.getEmail(), + customer.getPassword(), + List.of(new SimpleGrantedAuthority(customer.getRole())) + ); + } + + @Override + public boolean supports(Class authentication) { + return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication)); + } + } + ``` +- cors - cross origin resource sharing +- origin = protocol (http) + domain + port +- communication is stopped across origins **by browsers** to prevent security issues +- so, for e.g. a different website cannot use our api unless our apis allow this website's domain explicitly +- browsers make a **preflight request** - the request is made by the browser, to which the backend responds with what methods and endpoints are allowed +- we can either configure cors using `@CrossOrigin(domain)` on a per controller basis (usually not ideal), or use the below - + ```java + // configure the SecurityFilterChain bean like so + http.cors(Customizer.withDefaults()); + + @Bean + public CorsConfigurationSource corsConfigurationSource() { + CorsConfiguration configuration = new CorsConfiguration(); + configuration.setAllowedOrigins(List.of("http://localhost:4200/")); + configuration.setAllowedMethods(List.of("*")); + configuration.setAllowedHeaders(List.of("*")); + configuration.setAllowCredentials(true); + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", configuration); + return source; + } + ``` +- something i didn't know - for e.g. recall the action method on forms? from my understanding, this is not protected by cors, i.e. if a website evil.com has its action set to netflix.com, even if netflix configures cors correctly, this form action would go through! this concept is important in csrf discussed below +- also my understanding of where csrf might be important - cors depends on browser the client uses, what if the client uses a browser that does not have cors functionality? +- csrf - security vulnerability (unlike cors, which is a guard rail provided by browsers) +- csrf - cross site request forgery +- example - + - we log into netflix.com, and netflix stores a cookie in our browser - recall how cookies are scoped to a domain + - assume we click on a malicious link, which actually makes a put api call to netflix.com, to for e.g. change the password of the current user + - since netflix had already stored a cookie in our browser, the request goes through, and netflix thinks it is a request from a legitimate user, and the password of our account is changed easily! +- solution - a **secure random csrf token** is generated, which is **unique per session** +- so, assume with csrf implemented correctly, our ui receives a csrf token inside a cookie / response header, etc along with a separate cookie for authentication +- for further requests, we forward this csrf token inside the request header / request body along with the authentication cookie. do not send csrf token as a cookie, since then we are back to the same problem as authentication cookie! we can receive the csrf token as a cookie, but then we need to parse it and send it as a request body / header. this parsing cannot be done by evil.com, since it is a different domain, so it does not have access to cookies +- disabling csrf - `http.csrf(csrf -> csrf.disable());` / `http.csrf(AbstractHttpConfigurer::disable);` +- configuring csrf correctly - we can use `CookieCsrfTokenRepository`, which writes the csrf token to a cookie named `XSRF-TOKEN` and reads it from an http request header named `X-XSRF-TOKEN` or the request parameter `_csrf` +- [this documentation](https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html) seems to have a good explanation for csrf, skipping for now +- my doubt - if we for e.g. send jwt not as a cookie but as a header, wouldn't we automatically be protected by csrf? because the malicious website cannot "parse" or "access" the jwt, just like it cannot access or parse the csrf cookie +- authentication error - 401, authorization error - 403 +- authentication happens before authorization +- authorities are stored via interface `GrantedAuthority` and concrete implementation `SimpleGrantedAuthority` +- these authorities are available on both `UserDetails` (used between `UserDetailsManager` and `AuthenticationProvider`) and `Authentication` object (used between `AuthenticationProvider` and `AuthenticationManager`) +- code example - + ```java + http.authorizeHttpRequests((requests) -> requests + .requestMatchers("/myAccount").hasAuthority("view_account") + .requestMatchers("/myBalance").hasAnyAuthority("view_account", "view_balance") + .requestMatchers("/user").authenticated() + .requestMatchers("/contact").permitAll() + ); + ``` +- like authority, we have hasRole and hasAnyRole as well +- my understanding - spring requires that roles have the `ROLE_` prefix + - so when using hasRole etc, do not specify the `ROLE_` prefix + ```java + .requestMatchers("/myBalance").hasAnyRole("user", "admin") + .requestMatchers("/myLoans").hasRole("user") + ``` + - either save to the database with the `ROLE_` prefix, or when mapping to `GrantedAuthority` inside `UserDetailsService`, add the `ROLE_` prefix (internally, our schema stores one to many for `PersistentCustomer` and `PersistentAuthority`) + ```java + @Entity + @Data + @AllArgsConstructor + @NoArgsConstructor + @Table(name = "authorities") + public class PersistentAuthority { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + private String name; + + @ManyToOne + @JoinColumn(name = "customer_id") + private PersistentCustomer customer; + + public GrantedAuthority map() { + return new SimpleGrantedAuthority("ROLE_" + name); + } + } + ``` +- authority - individual actions like "view account", "view balance", etc +- role - group of authorities +- one practice used at my firm - + - think of privilege as action + resource combination - "view balance", "view card", etc - these map to authorities + - different roles have different authorities - admins and ops can have "edit card", all users will have "view account" etc + - allow assigning multiple roles to users +- **filters** - we can write our own filters and inject them into the spring security flow +- **filter chain** - represents a collection of filters which have to be executed in a defined order +- so, on `HttpSecurity http`, we can call `http.addFilterBefore`, `http.addFilterAfter` and `http.addFilterAt` + ```java + @Slf4j + public class UserLoggingFilter implements Filter { + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + + // typically this typecasting might be needed, not used here though + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null) { + log.info("user {} with authorities {} has logged in", authentication.getName(), authentication.getAuthorities()); + } + + filterChain.doFilter(servletRequest, servletResponse); + } + } + + http.addFilterAfter(new UserLoggingFilter(), BasicAuthenticationFilter.class); + ``` +- we implemented `Filter` above. we can **instead** use - + - `GenericFilterBean` - has access to a lot of other things like context, environment, etc + - `OncePerRequestFilter` - to ensure that the filter is executed only once, even if it is invoked multiple times by the underlying logic +- tokens - when the clients login successfully, they are returned a token from the backend. the clients should then attach this token to every request to access protected resources +- advantage of using tokens + - we do not share our credentials for every request every time like in for e.g. basic auth, we just pass around the token every time + - if tokens are compromised we can easily regenerate them. credentials cannot be changed easily for every user + - tokens can have a expiry attached to them, post which they have to be regenerated + - tokens allow storing of other user related information like name, email, roles, etc. this way, the backend can simply use these without every time for e.g. "fetching" this information + - we can reuse tokens for different kinds of applications like maps, email, etc + - statelessness - for horizontally scaled applications since it doesn't need sessions +- jwt tokens - they have the format `<
>.<>.<>` +- header - metadata like algorithm used for generating token, e.g. hs256 (stands for hmacsha256?). it is in base64 encoded format +- payload - name, email, roles, who issued the token, expiry, etc. it is also in base64 encoded format +- e.g. someone can easily decode the payload using base64 and add a role to it and encode it back again using base64. solution - signature +- signature - a digital signature for tokens. it helps ensure that the token has not been tampered +- the algorithm in header is used to generate this signature - `hmacsha256(base64(header) + '.' + base64(payload), secret)`. the secret here is only known to the backend +- on receiving the token, the backend can recompute the signature using the provided header and payload. if the signatures do not match, the backend can conclude that the token is invalid +- try to compare how jwt matches all the advantages we had mentioned for using tokens +- add [these](https://github.com/jwtk/jjwt#maven) maven dependencies - + ```xml + + io.jsonwebtoken + jjwt-api + ${jjwt.version} + + + + io.jsonwebtoken + jjwt-impl + ${jjwt.version} + runtime + + + + io.jsonwebtoken + jjwt-jackson + ${jjwt.version} + runtime + + ``` +- disable spring security's session creation + ```java + http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); + ``` +- we generate the jwt using `OncePerRequestFilter`. notes + - we should do this when we can be sure that the authentication is successful, so we use `addFilterAfter` + - using `shouldNotFilter`, we ensure that this token is generated only when the user logs in, which happens using the /user path + + ```java + // secret can come from application.properties + http.addFilterAfter(new JWTTokenGeneratorFilter(secret), BasicAuthenticationFilter.class); + + @RequiredArgsConstructor + public class JWTTokenGeneratorFilter extends OncePerRequestFilter { + + private final String secret; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + if (authentication != null) { + + SecretKey key = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)); + + String serializedAuthorities = authentication + .getAuthorities() + .stream() + .map(GrantedAuthority::getAuthority) + .collect(Collectors.joining(",")); + + String jwt = Jwts.builder() + .claim("username", authentication.getName()) + .claim("authorities", serializedAuthorities) + .issuedAt(new Date()) + .expiration(new Date(new Date().getTime() + (24 * 60 * 60 * 1000))) + .signWith(key) + .compact(); + + response.setHeader(HttpHeaders.AUTHORIZATION, jwt); + } + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + return !request.getServletPath().equals("/user"); + } + } + ``` +- verifying the token - this time, we use `addFilterBefore` and also invert the condition inside `shouldNotFilter` + ```java + http.addFilterBefore(new JWTTokenValidatorFilter(secret), BasicAuthenticationFilter.class); + + @RequiredArgsConstructor + public class JWTTokenValidatorFilter extends OncePerRequestFilter { + + private final String secret; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + + String jwt = request.getHeader(HttpHeaders.AUTHORIZATION); + + if (jwt != null) { + try { + SecretKey key = Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)); + + Claims payload = Jwts.parser() + .verifyWith(key) + .build() + .parseSignedClaims(jwt) + .getPayload(); + + Authentication authentication = new UsernamePasswordAuthenticationToken( + payload.get("username"), + null, + AuthorityUtils.commaSeparatedStringToAuthorityList(payload.get("authorities", String.class)) + ); + + SecurityContextHolder.getContext().setAuthentication(authentication); + } catch (Exception e) { + throw new BadCredentialsException("invalid token received"); + } + } + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + return request.getServletPath().equals("/user"); + } + } + ``` +- method level security - add `@EnableMethodSecurity` on any `@Configuration` / `@SpringBootApplication` class + ```java + @Configuration + @RequiredArgsConstructor + @EnableMethodSecurity + public class SecurityConfig { + ``` +- in the pre and post annotations, we can also use spel (spring expression language) +- `@PreAuthorize` - decide if a user is authorized to call a method before actually invoking the method + ```java + @PreAuthorize("hasAnyRole('user', 'admin')") + @PreAuthorize("hasAuthority('view_details')") + @PreAuthorize("#username == authentication.principal.username") + public void preAuthorizeExample(String username) { + } + ``` +- for complex requirements - we can call custom methods, methods on beans, etc afaik from inside these annotations. then we can for e.g. pass the authentication object from inside the annotation to these methods as well +- `@PostAuthorize` - would not stop the method from being executed, but would run after the invocation +- spring aop is used for implementing these annotations bts +- `@PreFilter` and `@PostFilter` - works on objects of type collections. helps filter inputs / outputs. i don't see its use case as of now diff --git a/_posts/2023-07-23-relational-databases.md b/_posts/2023-07-23-relational-databases.md new file mode 100644 index 0000000..447ab40 --- /dev/null +++ b/_posts/2023-07-23-relational-databases.md @@ -0,0 +1,565 @@ +--- +title: Relational Databases +--- + +## Downsides of File Based Systems + +- data redundancy - data repeated at different places +- data inconsistency - data update at one place might not be reflected at another place +- difficult data access - searching through records can be difficult +- security problems - granular control to allow access to databases +- difficult concurrent access - erroneous updates if people try editing files simultaneously, file locks allow only one person to edit files at a time +- integrity constraints - we can't enforce constraints like ensuring a specific data type for an attribute +- databases backup and recovery features are less efficient + +## Entity Relationship Data Model + +- er model is a high-level conceptual data model +- they are used in documentations via er diagrams +- entity - an object like a particular employee or project e.g. an employee jack +- entity type - type of the entity e.g. Employee +- entity set - group of all entities (not entity types) +- attribute - an entity has attributes like age, name +- an entity type is represented as a rectangle +- an attribute is represented as an oval. it can be of following types - + - simple attribute + - composite attribute - composed of multiple attributes e.g. name from first name and last name. it is represented as a tree of ovals + - multivalued attribute - can take an array of values e.g. phone number. the oval has a double outline + - derived attribute - calculated from other attributes e.g. age from birthdate. the oval has a dotted outline +- key attribute - has a value which is distinct for each entity, also called primary key e.g. ssn (social security number) of an employee. represented by an underline on the attribute +- composite key - multiple keys combine to uniquely identify an entity. e.g. vin (vehicle identification number) using state and a number. represent as a composite attribute and underline the key attribute as well +- natural key - use an attribute to uniquely identify an entity. e.g. isbn of book +- relationship - an association between two entities e.g. jack works on project xyz +- relationship type - type of relation e.g. works_on +- relationship set - group of all relationships (not relationship types), just like entity set +- a relationship type is represented as a diamond +- degree - defined on a relationship type, it represents the number of participating entities. it can be of the following types - + - **unary** (recursive) - an entity type is linked to itself, e.g. an employee supervises another employee + - **binary** - two entity types are linked, e.g. employee works on a project + - **ternary** - three entity types are linked, e.g. supplier supplies parts to project +- binary relationship constraints - + - cardinality - represent by writing 1 / N on the arrow + - **one to one** - an entity in set a can be associated to at most one entity in set b and vice versa as well e.g. an employee manages a department + - **one to many** - an entity in set a can be associated to many entities in set b but an entity in set b can be associated to at most one entity in set a e.g. employees are a part of a department + - **many to many** - an entity in set a can be associated to many entities in set b and vice versa e.g. employees work on a project + - participation - + - **total participation** - each entity must participate at least once in the relation, e.g. in employees working on a project, a project has total participation, represented as a double line + - **partial participation** - an entity need not participate in the relation, e.g. in employees working on a project, an employee has partial participation (e.g. hr), represented as a single line +- attributes on relation types - unless cardinality is many to many, since a table is created for many to many, we should try and move attributes of relationships to one of the tables +- weak entity - they cannot exist independently e.g. a course cannot exist without a program. they don't have key attributes (look above) of their own. they are identified via their owner or identifying entity type, and the relation between the weak and identifying entity is called identifying relationship. the attribute which helps in differentiating between the different weak entities of an identifying entity is called a **partial key**. e.g. dependents of an employee. weak entity is represented as a double line for the rectangle and identifying relationship is represented as a double line for the diamond. partial key is represented as a dotted underline. weak entity should of course, have a total participation +- strong entity - have their own key attributes + +## ER Diagram Example + +- entities - + - students have a name, a student identifier, one or more contact numbers + - programs have a name, a program identifier + - courses have a name, a course identifier +- relationships - + - student takes up one or more courses + - student must enroll in a program + - program contains courses + +![er diagram example](/assets/img/relational-databases/er-diagram-example.drawio.png) + +## Relational Model + +- relation - collection of related data, represented as a table +- tuple - also called records, represented as a row, an instance of the type of object stored in the table +- attribute - represented as a column, describe the record +- relation schema - relation name with its attributes' names e.g. employee(id, name, phone number) +- database schema - combination of all relation schemas +- database instance - information stored in a database at a particular time +- domain - set of acceptable values an attribute can contain +- in a relation, sequence of rows and columns are insignificant +- keys - we need keys to fetch tuples easily and to establish a connection across relations +- different types of keys are - + - **super key** - set of attributes that can uniquely identify any row. super key is like a power set. e.g. in employee, (id), (phone), (id, name), (name, phone), (id, phone), (id, name, phone) are all super keys + - **candidate key** - minimal set of attributes that can uniquely identify any row e.g. id, phone number. (id, name) is not a candidate key as id itself can uniquely identify any row + - **primary key** - one out of all the candidate keys is chosen as the primary key e.g. id of employee + - **composite key** - candidate keys that have two or more attributes e.g. vehicle(state, number) + - **alternate key** - any candidate key not selected as the primary key + - **foreign key** - the primary key of a relation when used in another relation is called a foreign key. it helps in connecting the two relations, the referencing and referenced relation +- **integrity constraints** - to maintain the integrity of database i.e. maintain quality of information as crud keeps happening, following rules are present - + - **domain constraint** - each value of an attribute must be within the domain + - **entity constraint** - all relations must have primary key, it cannot be null + - **referential constraint** - foreign key must either reference a valid tuple or be null + - **key constraint** - primary key must be unique +- common relational database operations - crud i.e. create, read, update, delete + +## Functional Dependency + +- X ➔ Y means given X, we can determine Y e.g. in student(id, name), id ➔ name but reverse is not true +- X is called **determinant** while Y is called **dependent** +- **armstrong's axioms** are a set of inference rules to determine all functional dependencies + - axiom of reflexivity - if Y ⊆ X, then X ➔ Y + - axiom of augmentation - if X ➔ Y, then XZ ➔ YZ + - axiom of transitivity - if X ➔ Y and Y ➔ Z, then if X ➔ Z +- prime attribute - a part of any candidate key +- partial dependency - when a non-prime attribute is dependent on a prime attribute +- transitive dependency - when a non-prime attribute is dependent on another non-prime attribute + +## Normalization + +- normalization helps in determining the level of redundancy in a database and providing fixes for them +- there are six normal forms, but only 1nf, 2nf, 3nf and bcnf have been discussed +- sometimes, we do not normalize our database entirely. it not only improves performance for analytics, but if data is duplicated, it works like a double check, thus **reducing chances of corrupt data** + +### First Normal Form + +for being in first normal form or 1nf, relation shouldn't have a multivalued attribute. e.g. + +| id | name | phone | +|-----|------|------------------------| +| 1 | jack | 8745784547, 6587784512 | +| 2 | jane | 3412478452 | + +should be converted to + +| id | name | phone | +|-----|------|------------| +| 1 | jack | 8745784547 | +| 1 | jack | 6587784512 | +| 2 | jane | 3412478452 | + +### Second Normal Form + +for being in second normal form or 2nf, relation should be in 1nf and shouldn't have partial dependencies. e.g. + +| student_id | course_id | course_fee | +|------------|-----------|------------| +| 1 | 1 | 120 | +| 2 | 2 | 150 | +| 1 | 2 | 150 | + +this has partial dependency course_id ➔ course_fee since primary key is (student_id, course_id). +so, it should be split into two tables + +| student_id | course_id | +|------------|-----------| +| 1 | 1 | +| 2 | 2 | +| 1 | 2 | + +| course_id | course_fee | +|-----------|------------| +| 1 | 120 | +| 2 | 150 | + +note how this also reduced data redundancy by storing the course_fee values only once + +### Third Normal Form + +for being in third normal form or 3nf, relation should be in 2nf and shouldn't have transitive dependencies. e.g. + +| student_id | country | capital | +|------------|---------|-----------| +| 1 | india | delhi | +| 2 | nepal | kathmandu | +| 3 | nepal | kathmandu | + +this has transitive dependency country ➔ capital since the capital can be derived from country, and the primary key is student_id. so, it should be split into + +| student_id | country | +|------------|---------| +| 1 | india | +| 2 | nepal | +| 3 | nepal | + +| country | capital | +|---------|-----------| +| india | delhi | +| nepal | kathmandu | + +### Boyce Codd Normal Form + +- for being in boyce-codd normal form or bcnf, relation should be in 3nf and a dependency A ➔ B is allowed only if A is a super key, doesn't matter what B is which make sense, as super keys should be able to find everything. so to check for bcnf, only check if lhs of dependency is super key or not +- e.g. - AB ➔ C and C ➔ B. candidate keys are AB and AC. neither of the dependencies are partial or transitive, so it is in 3nf already. however, C is not a super key, yet we have C ➔ B. so, it is not in bcnf +- my understanding - for bcnf, split into two tables - AC (AC is candidate key) and BC (C is candidate key) +- basically, since prime ➔ non-prime was covered in 2nf, non-prime ➔ non-prime was covered in 3nf, we wanted to remove (prime / non-prime) ➔ prime in bcnf + +## About SQL + +- sql is a standard that has been adopted by various vendors for their implementations. the implementations include db2 by ibm, oracle rdbms by oracle, sql server by microsoft, postgresql and mysql which are opensource, etc. this blog is about mysql implementations of concepts, so things can be different for other distributions +- application / client layer - helps in client connections, authentication and authorization +- server layer - it parses, analyzes and optimizes queries. it also maintains cache and buffers. it makes an execution plan which gets fed into the storage engine layer +- storage engine layer - this layer actually writes and retrieves data from the underlying physical storage. mysql supports different storage engine layers like InnoDB, MyISAM, etc. which we can view by `show engines`. InnoDB is the default. e.g. the way transactions are carried out in them can be different + +## Database Commands + +- `show databases` - list all the database. it would only show the databases that we are authorized to view +- `use database_name` - selecting the database with name database_name. future queries would be performed on the selected database +- `show create database mysql` - shows the command using which the database was created +- `show tables` - display the tables in the current database +- `create database if not exists movie_industry` - create the database if it doesn't exist +- `drop database if exists movie_industry` - drop the database if it exists + +## Table Commands + +- we have a lot of data types in mysql, look [here](https://dev.mysql.com/doc/refman/8.0/en/data-types.html), categorized into numeric data types, date and time data types, string data types, spatial data types, json data type. e.g. numeric data type can have int, bigint, tinyint, decimal +- `describe user` - describe the structure of a table +- `show create table user` - shows the command using which the table was created +- we can provide a constraint for non-nullable fields using `not null` +- we can provide a default value using `default` +- we can automatically assign the next integer using `auto_increment`. auto increment has a few restrictions - + - there can be only one column in a table marked as auto increment + - the auto increment column should be indexed + - the auto increment column cannot have a default value +- create table example - + ```sql + create table if not exists actors ( + id int auto_increment, + first_name varchar(20) not null, + second_name varchar(20) not null, + dob date not null, + gender enum("male", "female", "other") not null, + marital_status enum("married", "divorced", "single") not null default "unknown", + net_worth_in_millions decimal not null, + primary key (id) + ); + ``` +- we can use `default` while inserting data to instruct mysql to use the default value. it would work for auto increment id as well. we can also not specify the column name altogether +- insert into table by not specifying id - + ```sql + insert into actors (first_name, second_name) values ("jennifer", "aniston"); + ``` +- insert into table by specifying id which is auto increment - + ```sql + insert into + actors (first_name, second_name, id) + values + ("jennifer", "aniston", default), + ("johnny", "depp", default); + ``` +- querying in tables by selecting all columns - + ```sql + select * from actors; + ``` +- select specific columns and filter results using `where` clause - + ```sql + select first_name, second_name from actors where first_name = "tom"; + ``` +- we have a lot of operators in mysql, look [here](https://dev.mysql.com/doc/refman/8.0/en/non-typed-operators.html) +- we can use the `like` operator with where clause for pattern matching. `_` can be used to match exactly one character, `%` can be used to match 0 or more characters - + ```sql + select * from actors where first_name like '_enn%'; -- matches jennifer + ``` +- we can use `cast` to change data type +- e.g. order query results by number, but number would be treated as strings i.e. 2 > 10 + ```sql + select * from actors order by cast(age as char); + ``` +- we can `limit` the number of results returned, and `offset` it from a certain point. note: sql will automatically handle even if our limit or offset goes beyond the number of rows by giving back sensible results + ```sql + select first_name from actors order by age desc limit 4 offset 3; + ``` +- delete selective rows - + ```sql + delete from actors where gender = "male" order by age desc limit 3; + ``` +- for deleting all rows, a faster method is `truncate actors`, it would delete the table entirely and recreate it +- update selective rows - + ```sql + update actors set age = 25 order by first_name limit 3; + ``` +- we can alter name and data type of column, provide a default value. note: while altering data type, the new and old data types should be compatible - + ```sql + alter table actors change first_name firstName varchar(20) default "anonymous"; + ``` +- adding a column - + ```sql + alter table actors add first_name varchar(20); + ``` +- deleting a column - + ```sql + alter table actors drop first_name; + ``` +- indices help in querying data efficiently, just like we search for words in a dictionary. downside is the overhead of creating, storing and maintaining these indices. internally, mysql uses b / b+ trees with the keys of the nodes as primary indices. this helps in efficient querying of data +- we can create an index on name to speed up queries - + ```sql + alter table actors add index index_name (first_name); + ``` +- we can also drop that created index - + ```sql + alter table actors drop index index_name; + ``` +- alter table name - + ```sql + alter table actors rename Actors; + ``` +- delete table - + ```sql + drop table if exists actors; + ``` +- aliases can be used to give temporary names, as they help us write queries that are more readable + ```sql + select + t1.first_name as a, t2.first_name as b + from + actors as t1, actors as t2 + where + t1.net_worth_in_millions = t2.net_worth_in_millions and t1.id > t2.id; + ``` +- distinct is a post-processing filter i.e. works on the resulting rows of a query & can be used on multiple columns + ```sql + select distinct first_name, last_name from actors; + ``` +- aggregate methods like `min`, `max`, `sum`, `count` can be used - + ```sql + select count(*) from actors; + ``` +- group by - helps group rows based on a particular column. we cannot use columns **not** present in group by for select, having, or order by clauses + ```sql + select gender, avg(net_worth_in_millions) from actors group by gender; + ``` +- while the where clause helps us filter rows, the having clause helps us filter groups + ```sql + select + marital_status, avg(net_worth_in_millions) as avg_net_worth_in_millions + from + actors + group by + marital_status having avg_net_worth_in_millions > 200 + ``` +- adding a foreign key constraint - + ```sql + alter table digital_assets + add constraint digital_assets_actor + foreign key (actor_id) references actors(id); + ``` + +## Joins + +- **cross join** - cartesian product of the rows of the two tables +- **inner join** - all rows of both the tables where the condition (called the join predicate) is satisfied +- **left outer join** - result of inner join + all rows of the left table, with null for the columns of the right table +- **right outer join** - result of inner join + all rows of the right table, with null for the columns of left table +- **full outer join** - result of inner join + all rows of the left table, with null for the columns of the right table + all rows of the right table, with null for the columns of the left table +- **self join** - using the same table on both sides of the join +- inner join example - assume digital_assets table contains social media links, where the asset_type is an enum containing twitter etc. and url is the link + ```sql + select + actors.first_name, actors.second_name, digital_assets.asset_type, digital_assets.url + from + actors inner join digital_assets + on + actors.id = digital_assets.actor_id; + ``` + if the same column name is not there in the two tables, the "table." prefix can be removed e.g. `first_name` in place of `actors.first_name`, though i prefer being explicit +- the above query can be rewritten as below, with **no** performance impact + ```sql + select + actors.first_name, actors.second_name, digital_assets.asset_type, digital_assets.url + from + actors, digital_assets + where + actors.id = digital_assets.actor_id; + ``` +- union clause - merely clubs results together, doesn't join the tables. e.g. the following query will display a list of all actress names, followed by all male actor names + ```sql + select concat(first_name, ' ', last_name) from actors where gender = 'female' + union + select concat(first_name, ' ', last_name) from actors where gender = 'male' + ``` + note: duplicates are automatically removed since it is a "union", which can be prevented using `union all` +- left outer join syntax (right join would have similar syntax, not discussed). e.g. in the below query, actors without social media handles would be displayed too, with the columns for `asset_type` and `url` holding null - + ```sql + select + actors.first_name, actors.second_name, digital_assets.asset_type, digital_assets.url + from + actors left outer join digital_assets + on + actors.id = digital_assets.actor_id; + ``` +- natural join - syntactic sugar, no need to explicitly specify the columns to use for join, i won't use it + +## Nested Queries + +- nested queries are slower but sometimes the only way to write a query +- the following is an example of **nested scalar query**, since the nested query returns a single value. e.g. find all actors who had updated their digital assets most recently + ```sql + select + first_name + from + actors inner join digital_assets on digital_assets.actor_id = actors.id + where + digital_assets.last_updated = ( + select max(digital_assets.last_updated) from digital_assets + ); + ``` +- e.g. find all actors who are on facebook + ```sql + select * from actors where id in ( + select actor_id from digital_assets where asset_type = 'facebook' + ) + ``` +- e.g. find actors who updated their social handles on their birthday + ```sql + select + actors.first_name + from + actors inner join digital_assets + on + actors.id = digital_assets.actor_id and + actors.dob = digital_assets.last_updated + ``` +- the following is an example of a nested query where it returns a collection of columns. the query returns the same results as the example as above + ```sql + select first_name from actors where (id, dob) in + (select actor_id, last_updated from digital_assets); + ``` + +## Correlated Queries + +- the subquery references columns from the main query +- note: we can use the `exists` operator to check if the subquery returns any rows +- e.g. find actors with their names in their twitter handles - + ```sql + select + actors.first_name + from + actors inner join digital_assets + on + actors.id = digital_assets.actor_id + where + digital_assets.url like concat('%', actors.first_name, '%') and + digital_assets.asset_type = 'twitter' + ``` +- the query returns the same results as the example as above + ```sql + select first_name from actors where exists ( + select + * + from + digital_assets + where + digital_assets.actor_id = actors.id and + digital_assets.url like concat('%', actors.first_name, '%') and + digital_assets.asset_type = 'twitter' + ) + ``` +- difference between nested queries and correlated queries - in nested queries, the subquery runs first and then the main query runs. in correlated queries, the subquery runs for every row of the main query, and the subquery runs after the main query + +## Multi Table Operations + +- multi table delete use case - delete related data from multiple tables + ```sql + delete + actors, digital_assets -- tables to delete rows from + from + actors, digital_assets + where + actors.id = digital_assets.actor_id and + digital_assets.asset_type = 'twitter' + ``` + we mention the tables to delete rows from, note how this isn't required when deleting from one table +- we can similarly have multi table updates - + ```sql + update + actors inner join digital_assets + on + actors.id = digital_assets.actor_id + set + actors.first_name = upper(actors.first_name) + where + digital_assets.asset_type = 'facebook' + ``` +- note: a subquery cannot have select for tables being updated or deleted in the outer query +- copy a table **without the data** and just the structure - `create table copy_of_actors like actors` +- insert data from one table into another - `insert into copy_of_actors(name) select first_name from actors` + +## Views + +- views can be created by combining multiple tables +- we can filter out rows and columns +- now, a complex query becomes a simple single table query +- we can create views from other views as well, and we can perform the same joins and filtering on views that we would otherwise perform on a table +- when we do `show tables`, we see the views as well, we can see the type of table i.e. whether it is a normal table (also referred to as base table) or a view by using the command `show full tables` +- e.g. of creating a view - + ```sql + create view actors_twitter_accounts as + select + first_name, second_name, url + from + actors inner join digital_assets + on + actors.id = digitalassets.actor_id + where + asset_type = 'twitter' + ``` +- views are basically like stored queries, so they get updated whenever the tables get updated +- we can use `create or replace` to either create a view or replace it if one already exists. e.g. for single actors + ```sql + create or replace view single_actors as + select * from actors where marital_status = 'single'; + ``` +- we can update or delete rows from the underlying base tables using views. however, there are conditions e.g. it shouldn't have specific types of joins, group by statements or aggregation functions, etc. + ```sql + insert into single_actors + (first_name, second_name, dob, gender, marital_status, net_worth_in_millions) + values + ('charlize', 'theron', '1975-08-07', 'female', 'single', 130); + ``` +- e.g. i try inserting a row into this view, which fails the filtering clause used to create the view + ```sql + insert into single_actors + (first_name, second_name, dob, gender, marital_status, net_worth_in_millions) + values + ('tom', 'hanks', '1956-07-09', 'male', 'married', 350); + ``` +- now, since views can update their base tables, this went through and updated the table. however, since the view's query filters out married actors, we don't see the row in the view. we have essentially updated a row in a table through a view which will not be visible in the view. if this behavior is not desirable, we can use the check option while creating the view + ```sql + create or replace view single_actors + as select * from actors where marital_status = 'single' + with check option; + ``` +- now the insert statement for tom hanks will fail +- if we create views using other views, the check option can have scopes of **local** and **cascade**. local means that only the check option of the view being used for the update will be considered, while cascade looks at the check option of the views being used by this view itself as well +- we can drop views using `drop view single_actors` + +## Triggers + +- triggers are statements that get invoked when we perform an operation like insert, update or delete +- note: if we perform an operation like truncate which is equivalent to delete, triggers won't be invoked +- triggers can be **row level** or **statement level** +- row level triggers are invoked once per row, e.g. if a statement updated 25 rows then it gets invoked 25 times, while statement level triggers are invoked once per statement +- triggers can be invoked at 6 phases - (before, after) * (insert, update, delete) +- e.g. of trigger - + ```sql + delimiter ** + create trigger net_worth_check + before insert on actors + for each row + if new.net_worth_in_millions < 0 or new.net_worth_in_millions is null then + set new.net_worth_in_millions = 0; + end if; + ** + delimiter ; + + insert into actors (first_name, net_worth_in_millions) values ('tom', 350); + insert into actors (first_name, net_worth_in_millions) values ('young', null); + insert into actors (first_name, net_worth_in_millions) values ('old', -540); + + select * from actors; -- actors young and old will have net_worth_in_millions adjusted to 0 + ``` +- show triggers - `show triggers;` +- drop triggers - `drop trigger if exists net_worth_check;` +- we can also include multiple statements by enclosing statements after `for each row` inside a begin-end block + +## Transactions + +- we use transactions since we want either all the statements or none of them to go through +- there can be storage engines which don't support transactions / apply locking using different methods +- irrespective of whether transactions are supported, databases should have some form of locking to disallow concurrent access from modifying the data. e.g. InnoDB supports row level locking so that multiple users can modify the data in the same table. this also makes it a little slower +- we can start and commit a transaction using - + ```sql + start transaction; + -- statements + commit; + ``` +- we can roll back a transaction using + ```sql + start transaction; + -- statements + rollback; + ``` diff --git a/_posts/2023-07-23-warehouse-and-snowflake.md b/_posts/2023-07-23-warehouse-and-snowflake.md new file mode 100644 index 0000000..db6b088 --- /dev/null +++ b/_posts/2023-07-23-warehouse-and-snowflake.md @@ -0,0 +1,826 @@ +--- +title: Warehouse and Snowflake +--- + +## Warehouse + +- we need data for - + - operational data keeping - oltp (online transactional processing). we do not need a very long history of the data + - analytical decision making - olap (online analytical processing). millions of records are analyzed at a time, so we need fast query processing +- data warehouse - + - centralized location for all data sources + - optimized for analytic processing + - should also be user friendly for decision makers + - must load data consistently and repeatedly using etl +- data lake - + - used for storing raw (unstructured) data. data is not processed (structured) unlike in warehouse, where we have data thats user friendly and optimized for performance + - because of this, technology used by data lake is big data, while warehouses use databases + - used when the use case is not properly defined yet. data can be taken out of lake + +### Technologies in Warehouses + +- relational databases - uses popular sql, primary key + foreign key to easily perform joins, etc +- in memory databases - for high query performance, used in for e.g. data marts. in traditional databases, data is stored in hdd / ssd in disk and loaded into memory for querying. this is eliminated here to increase performance. challenge - lack of durability, resolve via snapshots / images to help restore to a specific point. e.g. sap hana, amazon memory db, etc +- cubes - data is stored in a multidimensional array. my understanding - e.g. imagine we want sales for a particular customer and product, the value will already be aggregated across remaining dimensions like time. it uses the mdx language for querying +- ods - operational data storage - used for operational decision making and not analytical / strategic decision making. there is a need for realtime unlike in data warehouses. now, we can have a separate warehouse and an ods, or optionally, treat ods as the **staging layer for our warehouse** along with using it for operational decision making +- elt - we extract and load the data into the warehouse directly. then, we use the compute of the warehouse to perform transformations. this is possible with architectures like snowflake. we can also perform the e and l of the elt using realtime streaming. elt allows for much more flexible transformations as compared to etl, since in etl, we perform transformations to load data into the core layer, while the transformations move towards the client in elt +- indexes - make reads faster, writes slower. useful when we join, filter by, etc. on the data based on that column +- b tree index - this is the default / most common type of index. we can break data into a multi level tree. helpful when column has high cardinality
+ ![b tree](/assets/img/warehouse-and-snowflake/b-tree.drawio.png) +- bitmap index - useful when the column has a low cardinality. the position of bit corresponds to the row number, and if its 1, it means that row has that value + + | pk | payment type | + | -- | ------------ | + | 1 | visa | + | 2 | mastercard | + | 3 | mastercard | + | 4 | visa | + + | payment type | bitmap | + | ------------ | ------ | + | visa | 1001 | + | mastercard | 0110 | + +- fact table indexing example - using b tree index on surrogate key (automatically setup if we use primary key?) and bitmap index on the dimension column foreign keys +- massive parallel processing - a task can be broken down into multiple subtasks. this way, these subtasks can run in parallel, thus optimizing performance. till now, we talked about breaking down "compute". for scaling storage, the underlying architecture can be shared disk architecture (underlying storage is one) or shared nothing architecture (underlying storage is also broken down) +- columnar storage - traditionally, queries are processed row wise. if we use columnar storage, data is stored column wise. so, if we need to process only a small subset of columns, we do not have to process entire rows and go through all the data like in traditional relational databases + +### Warehouse Architecture + +- we put the data **as is** into the staging layer of the warehouse +- we can do some minute transformations like renaming and adjusting positions of columns when performing a union between employee datasets from different sources +- we put the data into the core / access / warehouse layer by performing transformations from the staging layer. recall this is done to make data user friendly and optimized for querying +- why do we need a staging layer i.e. why not load into the warehouse layers directly from the sources - + - we risk burdening our oltp systems + - also, data from sources can be in different formats like crm, files like xml, etc. we get all the data from these different sources into for e.g. a relational db, which helps us use sql / a standard way to perform transformations, e.g. perform joins easily which would not be possible otherwise when data comes from different sources +- staging layer can be temporary (more common) or permanent +- temporary - after the data is loaded into the warehouse layer, we truncate the staging layer. this way, the next time we want to load data into the warehouse layer, we need to perform a diff - we need to know the last inserted row inside the warehouse layer, and calculate the new rows inside the sources since then, and accordingly add the new data to the warehouse. this diff checking can be done based on the surrogate key, created date column if maintained, etc +- persistent staging layer - maybe easier since the entire warehouse layer can be rewritten every time? +- why data marts i.e. why not use core layer directly - + - core layer has a lot of tables - we can have data marts on top of this. now, users will only have access to tables which they need + - core layer isn't burdened with queries from all consumers, and consumers only consume capacity of their data marts + - allow us have different types of databases, e.g. in memory vs cubes based on use case +- watermark - we keep track of the last record that we load from the sources into the core layer. based on the value of the watermark, we need to put the data into the staging layer and accordingly append data to the warehouse layer +- initial load - first extraction. it is much slower and puts load on sources, so it is best if done during weekends etc. so that the systems are not impacted +- delta load - incrementally loading data. usually, timestamp fields like created / modified date. the same workflow as the initial load can be reused, but now we run it on a schedule regularly instead of just once, and we also run it on a subset of data by filtering out and retaining only the new / modified data +- sometimes, for fact tables a delta load is possible due to timestamp like columns, but for dimension tables which might be relatively smaller, we can just do a full load every time +- when loading data from (temporary) staging to core layer, we can either just insert / append or update as well. we usually do not process deletes, but can use delete markers to go about this + + ![warehouse architecture](/assets/img/warehouse-and-snowflake/data-warehouse.png) + +- basic transformations when loading to core layer - deduplication, filtering out rows, filtering out columns, cleaning data (e.g. when performing a union, one source contains m and f, while another contains male / female), key generation (surrogate key) +- advanced transformations when loading to core layer - joining, splitting (split address into city, state, etc), aggregations / groupings, deriving columns (calculate profit using sales, costs, discounts) + +### Dimensional Modelling + +- dimensional modelling - method of organizing data, which again helps in 🥁... usability and performance +- facts - measurements e.g. profit +- dimensions - give context to the measurements e.g. product category +- note - dimensions modelling is organizing tables into facts and dimensions. but, based on use case, we can also rather organize data as flat tables in our warehouse, e.g. join and group data to produce the final aggregated form directly, instead of expecting our end users to perform aggregations +- dimensional modelling e.g. - we shouldn't have very wide tables - instead of duplicating product and category information in all rows, which can make scanning data slower, extract them to a dimension table, and only maintain the product id as a foreign key in the fact table, and product + category in a separate table. similarly with date - extract date into a different dimension table and store the date dimension id in the fact table. optionally, store pre calculated values in the date dimension table like day of week, month, etc +- e.g. if we have data like this - + + | date | product | category | profit | + | -------- | -------------- | ---------- | ------ | + | 5/8/2023 | tangy tomato | vegetables | 23 | + | 6/8/2023 | cheese cracker | snacks | 19 | + | 5/8/2023 | chocolate cake | snacks | 99 | + +- it can be dimension modelled this way - + + | date_id | product_id | profit | + | -------- | ---------- | ------ | + | 05082023 | 1 | 23 | + | 06082023 | 2 | 19 | + | 05082023 | 3 | 99 | + + | date_id | month | day_of_week | + | -------- | ------ | ----------- | + | 05082023 | august | saturday | + | 06082023 | august | sunday | + + | product_id | product | category | + | ---------- | -------------- | ---------- | + | 1 | tangy tomato | vegetables | + | 2 | cheese cracker | snacks | + | 3 | chocolate cake | snacks | + +- identifying facts - are measurable / can be aggregated as compared to dimensions which are descriptive. facts can also mark events sometimes, which is why it is accompanied by a date +- parts of a fact table - primary key to uniquely identify a row, foreign keys to dimension tables and then the actual facts themselves +- grain - the most atomic level of a fact table - what does a row in the fact table actually represent. keep it fine level for flexibility, so that various aggregations can be made +- dimensions help in grouping / filtering facts for our use case +- we usually have multiple dimensions clustered around the fact, thus it is called a star schema - the structure looks like that of a star, with the fact table at the center and the center and the dimension tables at the tips of the star spiking out of the fact table +- fact tables to dimension tables are generally many to one +- denormalization or data redundancy might be used in warehouses to help with query performance, e.g. the column category in the product dimension table discussed above, notice the repeating category snacks +- snowflake schema - a star schema is a snowflake schema with one level. if the denormalization above is actually degrading our performance / affecting our consistency, we can also have multiple levels e.g. the category column can be extracted into its own dimension table in the product dimension we discussed. so, when we have multiple levels of dimension tables, it is also called a snowflake schema. note it can result in multiple joins, thus degrading performance +- surrogate keys - use auto generated integer ids instead of natural keys for **both** primary keys and foreign keys. they are more performant compared to natural keys which are usually strings. we can also use -1 for dummy dimensions discussed below to make our intent clearer. exception - date dimensions - instead of an auto incremented integer, represent the actual date time as an integer, e.g. 050820232232 (first 8 characters represent date, remaining 4 time) +- it is common to keep pre calculated aggregates in the fact table, e.g. instead of expecting users to perform calculations to get the profit earned per order line item, just maintain it as a separate column in the fact table which can be used. this way users do not perform erroneous calculations +- if changing to surrogate keys (recall why it is a best practice) in dimension tables, remember to correctly map the values in the fact table foreign key column to use the surrogate key instead of the natural key +- date dimension - pre calculated values like day of week, month name, etc +- foreign key / surrogate key in date dimension does not have to be meaningless i.e. auto incremented integer, it can be of the format 06082023 +- optionally, since date dimension is very predictable, we can pre-populate the date dimension table for the next 10 years or so in advance +- consider populating all variations, e.g. month full name, month abbreviation, month as integer in case of date dimension + +### Additivity in Facts + +- additive facts - can be added across all dimensions. e.g. adding units sold across the date dimension tells us the number of units sold for a particular product, adding the units sold across the product dimension tells us the number of units sold at a particular date. note - i get confused in terminology. across product means group by date + + | product_id | units sold | date | price | + | ---------- | ---------- | -------- | ----- | + | 1 | 2 | 06082023 | 23 | + | 2 | 2 | 06082023 | 19 | + | 1 | 5 | 10082023 | 11 | + +- semi-additive facts - only added across some dimensions. e.g. imagine a fact table where the grain is our balance on a particular date for a particular folio + + | portfolio_id | date | balance | + | ------------ | -------- | ------- | + | 1 | 06082023 | 100 | + | 2 | 06082023 | 50 | + | 1 | 10082023 | 110 | + +- adding balance across the date dimension does not make sense, since balance is a cumulative number + + | portfolio_id | balance | + | ------------ | ------- | + | 1 | 210 | + | 2 | 50 | + +- but adding it across portfolios tells us our total balance on a particular date + + | date | balance | + | -------- | ------- | + | 06082023 | 150 | + | 10082023 | 110 | + +- non-additive facts - cannot be added across any dimension. e.g. price of a product (refer the example in additive facts). there is no meaning of that fact by itself, unless multiplied with the number of units sold +- nulls for facts in fact tables - usually in tools, average ignores null, sums will treat nulls as a 0, etc. but sometimes, we might want to replace nulls with 0, it depends on our use case +- nulls for foreign keys in fact tables - nulls can result in problems, therefore introduce a row in the dimension table with a dummy value, and have the rows with null as foreign key in the fact table point to this dummy value's primary key instead +- my understanding - year to date facts - we often want year to date calculations i.e. things like month to date (days from beginning of month to last business date of that month / today, depending on use case) and so on. however, these should not be stored, because then people will start performing aggregations on these calculated values. so, its is better to just store the underlying value and perform this calculation on the fly + +### Types of Fact Tables + +- transactional fact table - one row / grain indicates one event / transaction. e.g. one row represents one customer support call. characteristic - will have **many dimensions** (foreign keys). disadvantage - **grow very rapidly** in size, and often need to be aggregated +- periodic snapshot fact table - one row is a **summary of multiple events over a day**, etc. e.g. number of customer support calls over a day. note that a fact table can **contain multiple facts**, like number of calls, average call duration, etc. characteristic - because of its nature, it **will not (cannot) have many dimensions**, since one row is an aggregation across a dimension. advantage - they grow slower compared to the transactional fact table +- accumulation snapshot fact table - one row summarizes many events. my understanding - unlike periodic fact table where a grain is an accumulation of the same type of event, a grain in accumulation snapshot fact table is the **accumulation of the lifetime of events of that fact**. e.g. one row has production date, shipping date, return date, etc. characteristic - it **has many date dimensions**. so, this is also an example of **a role playing dimension**. this too grows slower in size as compared to the transactional fact table +- factless fact table - a fact table can have multiple facts i.e. measurements. sometimes, there is no such fact and we just have dimensions. e.g. a fact table where a new record for every new employee that is registered. it will have dimensions like department id, employee id, position id, date, etc, but no fact. we can perform aggregations like number of employees who joined last month + +### Types of Dimensions + +- conformed dimensions - dimensions shared across multiple facts, e.g. date dimension. this helps combine the facts using the shared dimension. e.g. if we have two different facts for sales and profits, we can combine them using the date dimension. this helps us compare the cost and sales side by side +- degenerate dimension - e.g. we have a sales fact table, with a foreign (surrogate) key for the category dimension. the category dimension only has two columns - the surrogate key and the category name. so, we can instead directly store the category name in the sales fact table. this usually occurs in the transactional fact table +- junk dimensions - e.g. imagine we have a lot of indicators that are eating up a lot of width (therefore space) of the fact table, thus impacting its performance. so, we can instead extract these dimensions to its own table. note - the cardinality of these dimensions should be low. also, the number of rows in this junk dimension grows exponentially, e.g. m values for one column and n values for another column basically mean m * n combinations. so, we can only store the dimensions we come across in this junk dimension instead of storing all combinations in a precomputed fashion. another idea could be to split junk dimensions i.e. group related junk dimensions together + + | amount | payment_method | incoming / outgoing | + | ------ | -------------- | ------------------- | + | 23 | credit card | incoming | + | 12 | cash | outgoing | + + | amount | flag | + | ------ | ---- | + | 23 | 1 | + | 12 | 3 | + + | pk | payment_method | incoming / outgoing | + | -- | -------------- | ------------------- | + | 1 | credit card | incoming | + | 3 | cash | outgoing | + +- role playing dimension - referenced in the fact table multiple times. e.g. date dimension for order date vs shipping date. an additional optimization for our users - use views - data is not duplicated, but users see different dimension tables for the different "roles" the date dimension might be playing, thus increasing readability + +### Slowly Changing Dimensions + +this suggests various solutions with how we should handle changing of dimensions. dimensions are considered to fairly static as compared to facts + +- type 0 - only retain the original data. only works when our dimensions do not change. e.g. date dimension +- type 1 - we overwrite the old with the new values in the dimension table. this way, we loose the old value. e.g. a new category for biscuits was introduced. so, the category changes from snacks to biscuits. issue - this can suddenly kind of maybe show reduced sales for dashboards which were monitoring the category for snacks. also, imagine if the category of snacks was replaced altogether with its more specific counterparts. any dashboards for e.g. grouping or filtering based on this dimension would suffer. understand that the idea is that for the same surrogate key in the dimension table, we overwrote its value +- type 2 - add a new row instead of update existing. any new biscuits related products will point to this new category for biscuits, while older biscuits products will continue pointing to snacks. this way, we maintain the history accurately + + | pk | product | category_fk | + | --- | ------------------ | ----------- | + | 1 | oatmeal biscuits | 1 | + | 2 | sunglasses | 2 | + | *3* | *oatmeal biscuits* | *3* | + + | pk | category | + | --- | ----------- | + | 1 | snacks | + | 2 | accessories | + | *3* | *biscuits* | + +- the issue with type 2 and its fix - we do not have a way of telling for e.g. the current categories in our system, since we now have multiple rows - snacks and biscuits, while we know that snacks is no longer a valid category in our systems. so, we can introduce new columns for effective and expiry dates in the category table. e.g. notice the values in the date dimensions below + + | pk | category | effective_date | expiry_date | + | --- | ----------- | -------------- | ----------- | + | 1 | snacks | 06082023 | 08082023 | + | 2 | accessories | 06082023 | 31129999 | + | *3* | *biscuits* | *08082023* | *31129999* | + +- we can also mix types, e.g. mix type 1 and type 2. use type 1 for product name, type 2 for category +- type 3 - we introduce a new column, so we will have two columns - previous category and current category in the category dimension table. this way, we can lay out a clear demise plan in place with maintaining backwards compatibility. it is not for unpredictable / frequent changes, use type 2 for that. this is for a more structured change like a reorg in a company + +## Snowflake + +- we can create and run queries inside worksheets +- we can see the snowflake_sample_data database by default with some sample data + ```sql + select * from snowflake_sample_data.tpch_sf1.customer + ``` +- we use snowflake's virtual warehouses for mpp (massive parallel processing). this allows the query to be processed in parallel in small chunks +- virtual warehouse sizes - xs (1 server), s (2 servers), m (4 servers),...4xl (128 servers) +- when not in use, a warehouse can be suspended. configure this behavior automatically using auto suspend and auto resume +- creating warehouses can be done by using the ui / even issuing sql statements in the worksheet +- in the worksheet, we can set the context i.e. the current database, schema and warehouse or use commands like `use warehouse` or `use database` +- multi clustering - when creating a warehouse, we can create it as a cluster and set the minimum and maximum number of warehouses allowed +- i think multi clustering is an enterprise feature, i do not see the option for it in the ui +- based on when load is high, this cluster will automatically add or remove warehouses for us (think asg in aws) +- multi clustering is better for more number of queries, for more complex queries we might need to consider vertical scaling (increase size of warehouse) +- notice difference between **more number of queries** vs **more complex queries** +- so basically there is a queue of the queries, which gets assigned one by one to the warehouses +- scaling policy - standard is the default whereas economy preserves the cost + - standard - add additional virtual warehouses if there is a task queued + - economy - add additional virtual warehouses if the estimated time for the current cluster is at least 6 minutes +- optimize virtual warehouse usage - + - have dedicated virtual warehouses for different use cases since they have different workload types + - understand horizontal scaling (more concurrent queries) vs vertical scaling (more complex queries), and choose the right one based on use case +- snowflake editions - **standard**, **enterprise** (has all features of standard with additional features like multi cluster warehouse, time travel upto 90 days as opposed to the 1 day inside standard, materialized views, etc), **business critical** (all features of enterprise with extended support etc) and **virtual private** (think dedicated hosts in aws ec2) +- we are charged for storage (after compression) and compute (warehouse) +- for storage, we have two options to choose between - **on demand** (pay for what you use) and **capacity** (pay upfront) +- 40$ per tb per month for on demand storage, 23$ per tb per month for capacity storage +- for xs virtual warehouse, we consume 1 credit per hour consumed by second i.e. if we consume for half an hour, we use half a credit (minimum is one minute). number of credits consumed by a warehouse depends on size (1 credit per server, so medium would consume 4 credits per hour) +- for virtual warehouse, we are charged in terms of credits. there is a conversion of credit and dollars associated with it. e.g. for cloud provider as aws and in the us-east-1 region - 2$ per credit for compute if using standard edition +- methods of loading data in snowflake - + - **bulk / batch loading** - uses our compute. e.g. copy command + - **continuous loading** - doesn't use our compute, serverless. e.g. snowpipe +- stages - location from where data can be loaded + - **external** - maintains url, access credentials, etc. e.g. s3 buckets + - **internal** - local storage maintained by snowflake +- note - there are costs considerations around data transfer when moving data from different regions or different clouds vs same cloud and same region +- creating a stage - + ```sql + create or replace database our_first_db; + + create or replace database manage_db; + create or replace schema manage_db.external_stages; + + create or replace file format manage_db.external_stages.csv_format + type = csv field_delimiter = ',' skip_header = 1; + + create or replace stage manage_db.external_stages.bucketsnowflakes3 + url = 's3://bucketsnowflakes3'; -- the bucket is unprotected + + list @manage_db.external_stages.bucketsnowflakes3; -- lists files + + create or replace table our_first_db.public.orders ( + order_id varchar(30), + amount int, + profit int, + quantity int, + category varchar(30), + subcategory varchar(30) + ); + + copy into our_first_db.public.orders + from @manage_db.external_stages.bucketsnowflakes3 + file_format = manage_db.external_stages.csv_format + files = ('OrderDetails.csv'); + ``` +- doing some transformations before loading data - + ```sql + copy into orders_ex (order_id, profit, profitable_flag) from ( + select + s3.$1, + s3.$2, + iff(cast(s3.$3 as int) > 0, 'profitable', 'non profitable') + from + @manage_db.external_stages.bucketsnowflakes3 s3 + ) + file_format = manage_db.external_stages.csv_format + files = ('OrderDetails.csv'); + ``` +- instead of `files` where we specify the full names of the files in an array like structure, we can specify a regex to match file names using the `pattern` keyword +- lets say we have a column of type integer in the create table statement, but the data in the csv inside s3 is bad and one of the rows in the csv has a string for the corresponding column. we can configure the behavior on encountering an error as follows - + ```sql + -- ... + files = ('OrderDetails_error.csv') + on_error = skip_file; + ``` + the options for `on_error` are - + - **abort_statement** - the default. abort the copying and rollback the rows copied + - **continue** - skip the row where the error happened and continue the loading of data + - **skip_file** - skip the file where the error happened but continue loading other files. we can also configure the error limit per file in this case, e.g. **skip_file_3** would mean skip the file if three or more errors happen (so skip_file actually means skip_file_1?) +- before actually copying over the data, we can also do a dry run of the copy - this way we can know beforehand if the copying will go through without actually executing it. we configure this using **validation_mode** i.e. if we provide this option, the data is not actually copied + ```sql + -- ... + files = ('OrderDetails_error.csv') + validation_mode = return_errors; + ``` + the two options are - + - **return_errors** - returns all errors if any during the execution of the entire thing. the output will contain the files where the error occurred, the row number, the reason of the error, etc + - **return_n_rows** - e.g. return_5_rows would mean perform the validation on only the first 5 rows, and if a failure occurs, throw the exception, and if no, return these 5 rows. note - the difference is this returns the processed rows while the above returns files where exceptions occurred +- if column has type `varchar(10)` but the source csv column has values of larger lengths, the copy command will fail. we can prevent this failure by using `truncatecolumns = true`, so that columns with greater lengths are just truncated i.e. electronics will become electronic +- by default, if we rerun the same copy command more than once, the rows will not be duplicated 🤯. we can change this behavior by providing `force = true`. note that this can lead to duplicates +- to view the history of copy commands i.e. source stage, success vs failure count, etc, use - + ```sql + select * from copy_db.information_schema.load_history; + ``` +- note that the command above was for a single database. to view the same thing across databases, use the snowflake db + ```sql + select * from snowflake.account_usage.load_history; + ``` +- for loading unstructured data (e.g. json), we might not be able to load it directly like above i.e. csv rows were easily mapping one to one with table rows +- so, we first load the json to a new table which has only one column of type `variant` +- we then transform this data (e.g. flatten) to load into our own tables + ```sql + create or replace stage manage_db.public.s3_json + url = 's3://bucketsnowflake-jsondemo'; + + create or replace file format manage_db.public.json + type = json; + + create or replace table our_first_db.public.json_demo ( + raw_json variant + ); + + copy into our_first_db.public.json_demo + from @manage_db.public.s3_json + file_format = manage_db.public.json + files = ('HR_data.json'); + ``` +- now, assume the json has the format as below - + ```json + { + "city": "Louny", + "first_name": "Dag", + "gender": "Male", + "id": 2, + "job": { + "salary": 43000, + "title": "Clinical Specialist" + }, + "last_name": "Croney", + "prev_company": [ + "MacGyver, Kessler and Corwin", + "Gerlach, Russel and Moen" + ], + "spoken_languages": [ + { "language": "Assamese", "level": "Basic" }, + { "language": "Papiamento", "level": "Expert" }, + { "language": "Telugu", "level": "Basic" } + ] + } + ``` +- we can for e.g. query city as follows - + ```sql + select raw_json:city from our_first_db.public.json_demo; + ``` +- recall raw_json was the variant column in our table. the output for e.g. of above would be a column containing cells of the format `"Bakersfield"`. so, now to convert this to a string i.e. `Bakersfield` (without quotes), we can do the below - + ```sql + select raw_json:city::string from our_first_db.public.json_demo; + ``` +- for nested object e.g. refer job in the json, this would work - + ```sql + raw_json:job.salary::int job_salary + ``` +- for nested arrays e.g. refer languages in the json, this would work - note how we can only grab one language at a time since this is like one to many + ```sql + raw_json:spoken_languages[0].language::string first_language + ``` +- so, the above solution works for arrays if we are fine with introducing new columns like first_language, second_language, etc +- but what if we want a table that is like if we had to perform a join between employee data and spoken languages - + ```sql + select + json_demo.raw_json:first_name::string first_name, + flattened.value:language::string language + from + our_first_db.public.json_demo json_demo, + table(flatten(raw_json:spoken_languages)) flattened; + ``` +- the output of this command would look like this - + + | first_name | language | + | ---------- | ---------- | + | Portia | Kazakh | + | Portia | Lao | + | Dag | Assamese | + | Dag | Papiamento | + | Dag | Telugu | + +- now theoretically we could have done as below - + ```sql + select + raw_json:first_name::string first_name, + raw_json:spoken_languages[0].language::string language + from + our_first_db.public.json_demo + union all + select + raw_json:first_name::string first_name, + raw_json:spoken_languages[1].language::string language + from + our_first_db.public.json_demo + union all + select + raw_json:first_name::string first_name, + raw_json:spoken_languages[2].language::string language + from + our_first_db.public.json_demo; + ``` +- _notice the index of spoken_languages above_. the downside is the output would be as follows i.e. there would be nulls inside the language row for people having less than three languages + + | first_name | language | + | ---------- | ----------- | + | Portia | Kazakh | + | Portia | null | + | Portia | null | + | Dag | Assamese | + | Dag | Papiamento | + | Dag | Telugu | + +- caching - snowflake has caching enabled by default, and it is cached for 24 hrs. to ensure this however, ensure that queries go on the **same warehouse**. this is why having dedicated virtual warehouses for dedicated groups can help +- we can confirm if the cache was used by clicking on the query id - it shows table scan + aggregation for the first time, and shows query result reuse the second time onwards +- clustering - snowflake creates cluster keys for columns to create micro partitions. this prevents full table scans +- we can explicitly do clustering + - do it for columns which are usually used in where clauses + - do it for columns frequently used in joins (similar to above) + - avoid extremes - + - not useful for columns which have too many unique values, e.g. id + - not useful for columns which have too less unique values, e.g. gender +- we can confirm clustering performance by clicking on the query id - it shows how many total partitions are there and how many partitions are used +- connecting to s3 securely using integration objects - + - create an iam role - + - select the trusted entity as the same account id in which this role is being created + - select the requires external id parameter and enter a random value here for now + - above steps result in a trust policy like below. note that both values entered above are placeholders for now - + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam::8502136:root" + }, + "Action": "sts:AssumeRole", + "Condition": { + "StringEquals": { + "sts:ExternalId": "something-random" + } + } + } + ] + } + ``` + - create an integration object inside snowflake - + ```sql + create or replace storage integration snowflake_s3_demo + type = external_stage + storage_provider = s3 + enabled = true + storage_aws_role_arn = 'arn:aws:iam::8502136:role/SnowflakeDemo' + storage_allowed_locations = ('s3://snowflake-demo-3b98x97') + ``` + - run `describe storage integration snowflake_s3_demo` and copy the values under `STORAGE_AWS_IAM_USER_ARN` and `STORAGE_AWS_EXTERNAL_ID`. replace the values in the trust policy for principal and external id with this + - now, we can use the integration object when creating a stage - + ```sql + create or replace stage manage_db.external_stages.csv_folder + url = 's3://snowflake-demo-3x7' + storage_integration = snowflake_s3_demo + file_format = manage_db.file_formats.csv_fileformat + ``` +- snowpipe - enables loading of data automatically when for e.g. a new file is added to the s3 bucket +- snowpipe is serverless i.e. our compute is not used for this +- this near realtime ability is achieved via s3 notifications sent to snowflake managed sqs queue +- setting up a snowpipe - + - create a pipe - + ```sql + create pipe snowpipe_demo.public.s3 + auto_ingest = true as + copy into snowpipe_demo.public.employee + from @snowpipe_demo.public.s3_csv + file_format = snowpipe_demo.public.csv + pattern = '.*employee.*\.csv'; + ``` + - run the describe command to grab the queue arn - `describe pipe snowpipe_demo.public.s3` + - set up event notification on the s3 bucket with this sqs arn as the destination +- to view pipes, use `show pipes` or we can specify database as well using `show pipes in database snowpipe_demo` +- to make changes to the pipe, pause it first - + ```sql + alter pipe snowpipe_demo.public.s3 set pipe_execution_paused = true; + ``` +- even if we want to make changes to data, e.g. to have existing files picked up the snowpipe, pause the snowpipe before running the copy command manually to load the data of existing files +- time travel - e.g. we make an erroneous update like this - + ```sql + update test set first_name = 'Shameek'; + ``` +- we can now go back in time to look at what the data looked like before the erroneous update - + ```sql + -- go back a specific amount of seconds + select * from test at (offset => -60 * 2); + -- OR go back to a certain timestamp + alter session set timezone = 'UTC'; + select current_timestamp; + select * from test at (timestamp => '2023-07-28 03:36:21.779'::timestamp); + -- OR before a certain query (the erroneous update in this case) was executed + select * from test before (statement => '01adeb9c-0604-af37-0000-007bd70792b5'); + ``` +- note - for the `before` statement query issued above, snowflake has a history of all queries executed which we can see in the ui +- e.g. of restoring - + ```sql + truncate table test; + insert into test ( + select * from test before (statement => '01adebc9-0604-af9c-0000-007bd707b315') + ); + ``` +- optionally, load the time traveled data into a backup table and then load it from here into the original table instead of loading the data into the original table directly as described above +- if we accidentally drop a table / schema / database, we can run the undrop command, e.g. `undrop table test` to restore it + - optionally, if we accidentally run `create or replace table test...`, we can restore the test table before the replace command was executed by first renaming the current wrongly instantiated table, e.g. `alter table test rename to test_aux`, and then running the undrop command to restore the test table before the replace to our database +- we can go back upto 90 days in editions enterprise and above, and upto 1 day in standard edition. however, the default is set to 1. therefore, we have to change the retention period manually to 90 days for editions other than standard - + ```sql + alter table test_tt set data_retention_time_in_days = 2; + ``` +- failsafe - protection of historical data in case of a disaster +- the failsafe period **starts after the time travel period ends** +- the failsafe period is for 7 days +- this is not queryable / usable by front users like in time travel. the idea is to reach out to snowflake support after a disaster occurs to restore the table to a previous state +- the failsafe period cannot be configured like time travel +- table type - table type is a property of the table. the different table types are - + - permanent tables - this is the default. we have both time travel (0-90 days) and failsafe + - transient tables - we have time travel (0-1 day). but no failsafe + ```sql + create or replace transient table -- ... + ``` + - temporary - we have time travel (0-1 day) but no failsafe. note - this is only scoped to a session i.e. we loose this table when the session is closed / cannot view it from other sessions + ```sql + create or replace temporary table -- ... + ``` +- the types above are not only scoped to a table, but to database / schemas as well +- we would pay for additional storage for failsafe / time travel, so use transient tables for "reproducible" data like staging layer of warehouse? +- **zero copy cloning** - when we use the clone command, the new table reuses the data and metadata of the older table. this way, it is cost efficient. the additional updates however do not effect one another +- we can clone storage objects (databases, tables, schemas) and stages, file formats, tasks, etc +- we can use time travel with cloning as well - + ```sql + create table cloned + clone source + before (timestamp => ...) + ``` +- swap table / schemas - swaps the underlying metadata and data as well + ```sql + alter table swap_demo.public.development + swap with swap_demo.public.production; + ``` +- data sharing - data is not copied again, so it is automatically immediately up to date for the consumer +- snowflake users it is shared with have to use their own compute resources for this +- creating a share - + ```sql + create or replace share orders_share; + grant usage on database data_share_demo to share orders_share; + grant usage on schema data_share_demo.public to share orders_share; + grant select on table data_share_demo.public.orders to share orders_share; + ``` +- add account to share - + ```sql + alter share orders_share add account = <>; + ``` +- create a database from the share inside the consumer account - + ```sql + create database orders_db from share <>.orders_share; + ``` +- now, the consumer can start consuming the data from this newly created database +- till now, we assumed that the consumers have their own snowflake account when sharing data. non snowflake users can access shares via a reader account. however, our compute is used in this case +- create a reader account + ```sql + create managed account analytics + admin_name = analytics + admin_password = 'P4$$w0rcl' + type = reader; + ``` +- add the reader account to the share - + ```sql + show managed accounts; -- use the value of "locator" for the value below + alter share orders_share add account = QBB35692; + ``` +- in the reader account, create database from share - + ```sql + show shares; + create database orders_db from share <>.orders_share; + ``` +- create a virtual warehouse inside the reader account (looks like parent account virtual warehouses and reader account virtual warehouses are not exposed to each other?) +- for granting select on all tables in a database / schema - + ```sql + -- instead of + grant select on table data_share_demo.public.orders to share orders_share; + -- do + grant select on all tables in database data_share_demo to share orders_share; + -- or + grant select on all tables in schema data_share_demo.public to share orders_share; + ``` +- views - e.g. instead of sharing all data, we want to share some restricted data. we can do this via views. e.g. - + ```sql + create or replace view data_share_demo.public.loan_payments_cpo as ( + select loan_id, principal + from data_share_demo.public.loan_payments + where loan_status = 'COLLECTION_PAIDOFF' + ); + ``` +- however, the issue with the above is for e.g. if we grant a role select on this view, and if a user with that role runs the command `show views`, they can view things like view definition. ideally, i would not have wanted to expose the fact that loan_status maintains an enum, since it is not even present in the projection clause of the view creation statement +- creating a secure view - `create or replace secure view...` +- note - we cannot use shares with normal views, we have to use secure views +- data sampling - use a subset of dataset when for e.g. testing workflows out +- two methods of sampling in snowflake - + - row or bernoulli method - every row is chosen with a probability of percentage p. so, it maybe more random since continuous rows are not chosen + ```sql + select * from snowflake_sample_data.tpcds_sf10tcl.customer_address + sample row (1) seed (25); -- seed helps reproduce same results when using randomness + ``` + - block or system method - every block is chosen with a probability of percentage p. so, it maybe a bit more quicker, since it uses micro partitions + ```sql + select * from snowflake_sample_data.tpcds_sf10tcl.customer_address + sample system (1) seed (25); + ``` +- tasks - it stores an sql statement that can be scheduled to be executed at a certain time or interval + ```sql + create or replace task task_db.public.customer_insert + warehouse = compute_wh + schedule = '1 minute' + as + insert into customers (created_date) values (current_timestamp); + ``` +- notice how tasks use our compute unlike snowpipe, materialized views, etc? +- on running `show tasks`, feels like tasks are suspended by default. so, run the following - + ```sql + alter task task_db.public.customer_insert resume; + ``` +- for crons, - `schedule = 'USING CRON * * * * * UTC'` +- tree of tasks - a root task, which can then have children (multiple levels are allowed). one child task can have one parent task, but one parent task can have multiple children. when declaring a child task, instead of `schedule`, we use `after task_db.public.parent_task` +- note - i think the parent task needs to be suspended first i.e. we first suspend the parent task, create and resume the child task and then finally resume the parent task, else we get an error. even as a best practice that feels right +- getting execution history of tasks like errors, completion time, etc. it also has records for the next queued execution + ```sql + select * from table(task_db.information_schema.task_history(task_name => 'customer_insert')); + ``` +- tasks can also have a `when` clause, and the task is executed only if the condition evaluates to true, else the task is skipped +- streams - helps with cdc (change data capture) to capture the delta (changes) of the source data. so, streams help capture dml (i.e. crud) changes +- we only pay for the storage of metadata columns of the stream that helps determine whether the row was deleted, updated, etc. the rows in streams reference the original source for the actual data +- create a stream - + ```sql + create or replace stream streams_demo.public.sales_raw_stream + on table streams_demo.public.sales_raw; + ``` +- we can run select on the stream table just like we would on a normal table + ```sql + select * from streams_demo.public.sales_raw_stream; + ``` +- the stream has three additional columns - `METADATA$ACTION`, `METADATA$ISUPDATE`, `METADATA$ROW_ID` +- once we process the stream, the data in the stream is deleted. it feels like stream is like an "auto generated temporary staging layer" of the warehouse. e.g. if i insert into a table by running a select on the stream table, the stream table clears up +- an update corresponds to two rows in streams - an insert and a delete for `METADATA$ACTION`, and true for `METADATA$ISUPDATE` in both rows. so, `METADATA$ACTION` is always either insert or delete, and we need to determine if the change is due to an update using `METADATA$ISUPDATE` +- e.g. of using streams - imagine store is a static reference table. we want to process the changes in sales table to a table used for analytics, that is like a join between sales and store tables. so, we can assume that for every record in the sales table, there would be a record in this sales analytics table, with added information about the store. so, the stream is needed for the sales table, and not the store table, and we update the final table used for analytics by joining the sales stream table and store reference table + ```sql + create or replace stream streams_demo.public.sales_raw_stream + on table streams_demo.public.sales_raw; + + merge into streams_demo.public.sales_final sf + using ( + select sa.*, st.employees, st.location + from streams_demo.public.sales_raw_stream sa + join streams_demo.public.store_raw st + on sa.store_id = st.store_id + ) src + on src.id = sf.id + when + matched + and src.METADATA$ACTION = 'DELETE' + and not src.METADATA$ISUPDATE + then delete + when + matched + and src.METADATA$ACTION = 'INSERT' + and src.METADATA$ISUPDATE + then update set + sf.product = src.product, + sf.price = src.price, + sf.amount = src.amount, + sf.store_id = src.store_id, + sf.location = src.location, + sf.employees = src.employees + when + not matched + and src.METADATA$ACTION = 'INSERT' + and not src.METADATA$ISUPDATE + then insert values ( + src.id, + src.product, + src.price, + src.amount, + src.store_id, + src.location, + src.employees + ); + ``` +- we can use streams in the `when` clause of tasks! so, we can pretty much build an entire etl pipeline just using snowflake - + ```sql + when system$stream_has_data('stream-name') + as -- the entire sql for stream processing defined above + ``` +- stream types - standard and append-only. append-only captures only inserts while standard captures inserts, updates and deletes. default is standard as seen above +- change tracking - tables have a change tracking property. we can set it to true as follows - + ```sql + alter table names set change_tracking = true; + ``` +- now, with change tracking enabled, we can basically see the changes in a table in the same format as we saw in streams - + ```sql + select * from names + changes (information => default) + at (offset => -240); + ``` +- my understanding - **the difference is that unlike streams, this does not get deleted. its almost like we have a rolling window of cdc until the time travel / retention period** +- again - notice the use of default in the changes clause above. we can also use append_only instead +- materialized view - if we run an expensive query frequently, it can lead to bad user experience. so, we can instead use materialized views + ```sql + create or replace materialized view orders_mv as + -- ... + ``` +- so, materialized views are updated automatically when its base tables are updated. this updating is maintained by snowflake itself. when we query using materialized view, data is always current +- this means that if the materialized view has not been updated completely by the time we initiate a query, snowflake will use the up to date portions of the materialized view and fetch the remaining data from the base tables +- since background services of snowflake are being used for updating materialized views, it adds to the cost independent of our virtual warehouses +- use materialized views if data is not changing frequently and view computation is expensive. if data is changing frequently, use change tracking / streams + tasks +- [has a lot of limitations i think 😭](https://docs.snowflake.com/en/user-guide/views-materialized#limitations-on-creating-materialized-views) - joins, some aggregation functions, having clause, etc are not supported at the time of writing +- dynamic data masking - returns masked results for security purpose, e.g. pii (personally identifiable information) + ```sql + create or replace masking policy phone + as (val varchar) returns varchar -> + case + when current_role() in ('ACCOUNTADMIN') then val + else '#####' + end; + + alter table customers + modify column phone_number + set masking policy phone; + ``` +- some more masking policy examples - + - we just want to see the domain of the emails - + ```sql + when current_role() not in ('ACCOUNTADMIN') then regexp_replace(val, '+\@', '****@') + ``` + - we want to be able to do comparisons, e.g. we want to join by name, but we do not want to allow seeing of the names. we can use `sha2(val)`, so that while users see an encrypted value, it is a consistent hash, so running it on the same value will produce the same result + +### Access Management + +- rbac (role based access control) i.e. privileges are assigned to roles, which are inturn assigned to users +- in snowflake we have dac (discretionary access control) i.e. every object has an owner, who can grant access to that resource. so, all objects have an owner, which is a role, and this role has all privileges on that object by default. the objects on which we can grant privileges are also called securable objects, e.g. warehouses, databases, tables, etc +- role hierarchy - the parent role will automatically have the privileges of all of its child roles +- my understanding + - a user can have multiple roles + - the public role is assigned to all new users by default + - the default role is the one that determines what role to use when for e.g. a new worksheet is opened by the user, or maybe like when no role is specified + - for all roles to be used, set secondary role to all. e.g. we have a system account, which has warehouse access via a different role, and access to tables via yet another role. we cannot specify both roles in for e.g. the jdbc url. so, we can instead set the secondary role to all for permissions from all roles to kick in for a user anytime the user makes a query +- system defined roles - + - account admin - + - the top level role + - can manage things like reader accounts + - avoid using this, and users using this should use mfa + - do not create objects using this, as otherwise we would have to manually add privileges to users that need it (it is at the top of hierarchy so no role inherits "from" it) + - only account admin can view things like usage / billing information + - security admin - + - can manage any object grant globally - my doubt - does this mean it can do this for objects that it (or its nested children) do not own as well? + - can be used to create and manage roles but thats usually done by useradmin? + - example - (note the hierarchy i.e. sales_user is a child of sales_admin, which is inturn a child of sysadmin. this is a best practice) + ```sql + create or replace role sales_admin; + create or replace role sales_user; + + grant role sales_user to role sales_admin; + grant role sales_admin to role sysadmin; + + create or replace user simon_sales_user + password = 'p@$$worcl' + default_role = sales_user; + grant role sales_user to user simon_sales_user; + + create or replace user olivia_sales_admin + password = 'p@$$worcl' + default_role = sales_admin; + grant role sales_admin to user olivia_sales_admin; + ``` + - sysadmin - + - create warehouses, databases, etc + - custom roles should be attached to sysadmin as a best practice. this way, the objects created by these custom roles can be managed by sysadmin. otherwise, this would not be possible + - example - we run the below from inside sysadmin. despite us granting ownership to sales_admin, sysadmin can still perform all the operations on these objects since sysadmin inherits permissions from sales_admin. refer above, this setup was basically done by security admin + ```sql + create or replace database sales_db; + grant ownership on database sales_db to role sales_admin; + grant ownership on schema sales_db.public to role sales_admin; + ``` + - now, from inside sales_admin, we can run the below - + ```sql + grant usage on database sales_db to role sales_user; + grant usage on schema sales_db.public to role sales_user; + grant select on table sales_db.public.customers to role sales_user; + ``` + - useradmin - + - used to create / manage users and roles + - unlike securityadmin, it does not have ability to grant privileges to all objects, only on objects that it owns + - public role + - every user is granted this role by default + +![role hierarchy](/assets/img/warehouse-and-snowflake/role-hierarchy.png) diff --git a/_posts/2023-08-12-messaging-systems.md b/_posts/2023-08-12-messaging-systems.md new file mode 100644 index 0000000..ffa3f37 --- /dev/null +++ b/_posts/2023-08-12-messaging-systems.md @@ -0,0 +1,259 @@ +--- +title: Messaging Systems +--- + +## Kafka + +### Setup + +- note - environment should have java 8+ installed +- download the zip from [here](https://www.apache.org/dyn/closer.cgi?path=/kafka/3.5.0/kafka_2.13-3.5.0.tgz) +- unzip it - `tar -xzf kafka_2.13-3.5.0.tgz` +- note - the 2.13... here is not the kafka, but the scala version? + +### Staring using Zookeeper + +- in one terminal, start zookeeper - `zookeeper-server-start.sh ~/kafka_2.13-3.5.0/config/zookeeper.properties` +- in another terminal, start kafka - `kafka-server-start.sh ~/kafka_2.13-3.5.0/config/server.properties` + +### Starting using Kraft + +- generate a cluster uuid - `KAFKA_CLUSTER_ID="$(~/kafka_2.13-3.5.0/bin/kafka-storage.sh random-uuid)"` +- format log directories - `kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c ~/kafka_2.13-3.5.0/config/kraft/server.properties` +- start kafka - `kafka-server-start.sh ~/kafka_2.13-3.5.0/config/kraft/server.properties` + +### Concepts + +- helps with system integrations. sources produce data into kafka, and targets consume from kafka +- distributed, resilient, fault tolerant +- created by linkedin, now maintained by ibm, cloudera, confluent, etc +- works with spark, flink, hadoop, etc +- a sequence of messages is called a data stream +- kafka topic - a particular stream of data +- a topic is identified by topic name +- topics support any kind of message format like json, avro, binary, etc +- we can produce data using kafka producers, and consume data using kafka consumers +- topics are split into partitions +- **messages within a partition are ordered** +- **messages in a partition get an id called offset**. note - so offsets are specific to a partition +- so, order is only guaranteed inside one partition +- **offsets are not reused in a partition even if previous messages are deleted from it** +- immutability - once data is written into a partition, it cannot be updated / deleted, we can just append (add) data to it +- my understanding - we basically interact with kafka producers and consumers in our code, and they internally do things like batching, where we provide network configuration, security parameters, etc +- producers can optionally send a key along with the message. this key can be a string, number, binary, etc +- if this key is null, then the message can end up in any partition +- if this key is not null, this key is hashed to produce the partition number. this partition number then determines the partition the message should go to. use case - e.g. we have a delivery service, where our trucks send its coordinates every 5 seconds. we should ensure that a truck sends its coordinates to the same partition to ensure ordering, therefore the truck can use its id as the kafka message key. messages with the same key end up in the same partition +- internally kafka partitioner determines the partition using murmur2 algorithm +- parts of a message - key, body, compression (e.g. gzip, snappy, etc or even none), headers (key value pairs) and a timestamp (can be set by the system or by the user) +- kafka message serializer - help in serializing our messages which are objects into bytes. e.g. if our key is an integer and our value is a string, kafka will use its inbuilt integer and string serializer respectively for this +- consumers - pull model i.e. consumers request for data from the brokers, and not the broker pushing data into the consumers +- consumers can deserialize using deserializers similar to serializers +- best practice - do not change serializer in the producer, since that will break the deserializers in the consumers. so, create a new topic instead and have the consumers to start pulling from this new topic +- **consumers in kafka read as a consumer group** +- **consumers in a group read from exclusive partitions** i.e. multiple consumers of the same group cannot read from the same partition +- so, if we have more consumers in a consumer group than the number of partitions, (number of consumers - number of partitions) consumers remain idle +- however, a consumer in a consumer group can read from multiple partitions (e.g. when number of partitions > number of consumers) +- of course consumers from different consumer groups can read from the same partition +- if suppose a consumer from a consumer group is removed, the partitions that consumer was responsible for is automatically distributed among the other members of that consumer group +- a consumer group id is used to help identify the consumers part of the same group +- consumer offset - **consumers store the offsets they have read up till in a topic called __consumer_offsets periodically**. this way, if they die and come back up, they can continue reading from the same position in the partition where they left off +- a kafka cluster has multiple kafka brokers. each broker is identified by an id +- **each broker only contains some partitions of a topic** - so data is distributed. understand the implication of this - **this way, our topic is not limited to scale by the capability of only one worker node** in our kafka cluster +- broker discovery mechanism - consumers do not need to connect to all brokers in advance. they only need to connect to one broker, and by that they are automatically able to connect to all brokers since on initiating connection with one broker, all metadata related to the other brokers, partitions, etc is sent +- topic replication factor - if a broker is down, another broker is still available to produce data to and receive data from. **replication factor = how many copies i.e. how many brokers will have the same partition's copy** +- in sync replicas (isr) - all replica brokers that have caught up with the broker +- since there are multiple partitions, there is a leader among these partitions, and producers can only send data to this leader +- consumers by default only consume from the leader. so i think the replication factor only helps with disaster recovery in this case +- however, in newer versions, kafka consumers can read from replica brokers as well, if the replica broker is closer to them (e.g. we should have the consumer read from the isr in same az and not the leader / another isr in a different az to help reduce network latency and costs). this feature is called rack awareness, and for this to work, `rack.id` on the broker should have the same value as `client.rack` on the consumer +- producer acknowledgements - + - acks = 0 means producer will not wait for acknowledgement + - acks = 1 means producer will wait for acknowledgements from leader. data can be lost if leader goes down unexpectedly before replication goes through to other brokers. it was the default earlier + - acks = all (or -1) means producer will wait for acknowledgement from all replicas along with the master as well. default kafka 3.x onwards + - this option goes hand in hand with the `min.insync.replicas` option, which states how many replicas should acknowledge the data. if its value is 1, it means that only the leader has to acknowledge the data + - so, one ideal configuration to start with would be setting min isr to 2, acknowledgement mode to -1 and setting replication factor to be 3. this way, at least one replica and the leader have the write before the producer can consider the message successfully written into kafka +- topic durability - if replication factor is m, and say we want isr to be n, then we can tolerate m - n brokers going down. so, for e.g. don't over optimize i.e. if min in sync replicas are 3, (acknowledgement mode is all) and replication factor is 3, that means we cannot withstand any broker going down, which might be too much +- retries - note - this is producer retries not consumer, don't confuse with concepts like dlq here 😅. retries here refer to transient failures like kafka saves the message but acks fail, required number of brokers (min insync replicas) are unavailable at the time so kafka cannot save the message, etc. focussing on the newer versions here - + - retries (`retries`) are set to infinite (2147483647) by default. so, after the producer sends the message and if there is a failure for some of the transient reasons discussed above, the producer would again retry sending the message + - idempotence (`enable.idempotence`) is set to true by default. imagine that kafka was able to save the message i.e. write it to the replication factor number of partitions, but the ack failed. so, the producer thinks that some stuff have failed and will retry sending. so, since this property is set to true, kafka would know not to re add this message to the partitions, and would just try sending the ack again. this helps with exactly once semantics (and not duplicating thus resulting in at least once). now, from what i understood, it also helps with ordering. so, if for example the producer sends the first batch and kafka fails to commit it, when the second batch is received by kafka, kafka would throw an out of order exception to the producer. with this property, its almost like a sequence number is sent with each batch. this way, both ordering and exactly once semantics are ensured + - max in flight requests (`max.in.flight.requests.per.connection`) is set to 5 by default. **this is basically how many concurrent requests producer will send without receiving the acknowledgements for them**. after this number, if our application calls send on the producer, it will start blocking. this needed to be 1 in older versions to maintain ordering, but with idempotence now, it is enough to keep this <= 5 based on what we discussed above and [this](https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#max-in-flight-requests-per-connection) + - delivery timeout (`delivery.timeout.ms`) is set to 120000 i.e. 2 minutes by default. now retries is infinite does not mean producer would just keep retrying endlessly in case of failure, since the time it first sent the message, it would keep retrying until this timeout occurs. again remember that this retrying decision is being done by the producer which we write, so we can configure it in the properties +- zookeeper - helps with managing multiple brokers. so, helps with issues like leader election, sending notifications to other brokers if a brokers goes down, etc +- kafka up to 2.x cannot work without zookeeper. however, kafka from 3.x can work without zookeeper using kraft, and kafka 4.x onwards will not use zookeeper at all +- zookeeper itself too runs in master slave mode, runs odd number of servers underneath +- because of this change of migrating away from zookeeper, we should not mention zookeeper configuration inside our connections, but only mention broker endpoints. this change can even be seen in the kafka cli etc, e.g. when running kafka-topics.sh, we do not specify the zookeeper endpoint. this way when we change from 3.x to 4.x, there would be slim to no change required from us +- understand how the offsets are associated to a consumer group on a per partition basis +- as we add / remove more consumers to a group, the existing consumers are notified of this and they accordingly adjust the partitions that they listen to +- when a new partition is added to a topic, this new partition also needs to be assigned to one of the consumers of a group subscribed to the topic +- partition rebalance - moving of partitions between consumers - can happen due to adding new partitions to the topic / adding or removing consumers in a group +- there are different strategies to partition rebalance (`partition.assignment.strategy`) - + - **eager rebalance** - all consumers give up their ownership i.e. the partition they were responsible for. then a fresh calculation is made and the consumers are randomly assigned the partitions again. issue - it might happen that an existing consumer now starts listening to a new partition. also, for albeit a brief period when the rebalancing is happening, there would be no consumers at all, this phenomenon where there are no consumers at all during a brief period is called stop the world event + - **cooperative rebalance / incremental rebalance** - process is uninterrupted for unaffected partitions, e.g. imagine consumer 1 was subscribed to partition 1, and consumer 2 was subscribed to partitions 2 and 3. if a new consumer is added, only for e.g. partition 3 would be reassigned to this new consumer, but data from partitions 1 and 2 continues flowing uninterrupted +- **static group membership** - by default, when a consumer leaves a group, the partition they owned is reassigned. we can specify a `group.instance.id` which makes the consumer a static member. this way there is no rebalance until `session.timeout.ms` (heartbeat mechanism discussed later), so the consumer has this much time to be able to come back up, otherwise the partition would be rebalanced. use case - consumers for e.g. maintain a cache and this way, a rebuilding of that cache is not required by the new consumer. feels like without this property, the partition would be reassigned to another consumer and not wait for the session timeout? +- quick question - how to implement a fan out pattern in kafka - do not assign the consumer group id / specify a different value for the consumer group id for each of your horizontally scaled instances - this way all the instances will receive the message +- producer compresses the batch of messages before sending it to the broker +- this helps with things like better utilization of disk on kafka, better throughput, etc +- compression can be specified at producer / topic level +- compression can be specified at producer level or the broker level as well using `compression.type` - + - producer - the default. use the compressed batch from the producer as is and write directly without recompression + - none - all batches are decompressed by the broker + - specify a type like lz4 explicitly. if the compression format is the same as done by the producer then store as is, else decompress and recompress using the specified format +- so, the summary of above according to my understanding is, leave compression type at broker level to be producer (it is the default), and set the compression type to be snappy or something at the producer config (default is none) +- batching settings - increasing batch sizes improves throughput, means lesser network calls, compression becomes more effective, etc. but of course it introduces latency for downstream consumers + - `linger.ms` - how long the producer should wait before sending the message to kafka. default is 0 + - `batch.size` - if the batch fills to this value before `linger.ms` is over, send the batch. default is 16 kb +- `partitioner.class` - in earlier versions of kafka, if we specify no key for our message, the messages are sent to partitions in round robin fashion using **round robin partitioner**. disadvantage - for e.g. remember batching happens at partition level, so this means we cannot utilize batching effectively, since there is a batch being created for every partition. **sticky partitioner** is the default in newer versions of kafka. this means that instead of round robbin, producer would fill one batch (until `linger.ms` or `batch.size`) and then send to one partition. after this, a new batch is started. so we can leave this property untouched in newer versions +- delivery semantics - this is for consumers + - at least once - default and usually preferred. commit offset after processing of message is over. if processing of message fails or imagine consumer crashes after receiving messages, message will be read again and reprocessed since the offset was not committed. so, the processing logic must be idempotent + - at most once - commit offset as soon as message is received. if processing of message fails or imagine that after receiving messages, the consumer crashes, messages will be lost and not read again. this case ensures a message would not be processed multiple times + - exactly once - this would only be possible if both source and sink is kafka. we use the transactional api in this case. e.g. when using kafka streams for transformations, we can use this +- to make our processing idempotent with at least once semantics, for a given message, we should add an id, e.g. imagine how we know for an object if it needs to be updated or created in the database based on its id property. otherwise, we can use kafka coordinates - every message will have a unique (topic + partition + offset) combination, so for e.g. we could generate an id like this - `__` (understand why a separator like _ is needed - otherwise there is no way to differentiate between partition 2 offset 22 and partition 22 offset 2) +- offsets are committed after at least `auto.commit.interval.ms` time has passed since us calling poll(). the default value of this is 5 seconds. my understanding - e.g. we poll every 7 seconds, and auto commit interval is 5 seconds. when the second poll is called, the first poll would be committed. however, if we poll every 5 seconds, and auto commit interval is 7 seconds, **the first poll would be committed when the third poll is called** +- for staying inside at least once semantics, because of what was described above, our processing should be synchronous - before we call poll the next time, our current batch should have been successfully processed, so that if by chance the next poll has to commit, it can be sure that we have already successfully processed our current batch. in auto commit, commitAsync is called +- we can disable auto committing as well, and instead manually commit offsets using `consumer.commitSync()` / `consumer.commitAsync()` +- the auto offset reset (`auto.offset.reset`) property defines how to consume from a topic if there is no initial offset i.e. a new consumer group has just started listening - the default is latest i.e. start consuming from the end of the partition. we can set it to earliest. my understanding - earliest corresponds to the `--from-beginning` flag in the cli for kafka console consumer +- we can also reset consumer offsets. internally, feels like this might be possible since it is as simple as adding a message to the __consumer_offsets topic, due to the cleanup policy being compact? (discussed later) +- consumers send a heartbeat every `heartbeat.interval.ms` seconds (3 seconds by default), and if no heartbeats are received for `session.timeout.ms` seconds (45 seconds by default), the consumer is considered dead. this heartbeat related functionality is carried out by the heartbeat thread +- if a new poll call is not made in `max.poll.interval.ms`, the consumer is considered to have failed processing of that message. my understanding - this is important because all offset commits are done by newer poll calls for the previous polls? so maybe this way, kafka can know that for some reason, message processing has been stuck or has failed, and it has to re send the message for processing? +- for replicating data across kafka clusters, e.g. if cluster is across regions, or for e.g. when we are hitting performance limits with one kafka cluster and need multiple kafka clusters, etc, we can use tools like mirror maker 2. replication can be active active (two way replication, e.g. data producers in multiple regions) or active passive (one way, e.g. for global resiliency) +- when we try to connect to kafka, kafka brokers have a setting called `advertise.listeners`. this way, when the client tries connecting to the kafka broker, the broker returns this value and the client instead tries connecting using this value if the value it initially tried connecting using was different. e.g. imagine client tries connecting using a public ip, but the value returned by the broker using `advertise.listeners` is the private ip address +- partition count - if we change the partition count suddenly, understand it would affect ordering of messages with same keys etc +- more partitions = more parallelism +- partitions should be usually 3 times the number of brokers, so 3 partitions per broker +- replication factor - if we change this, we increase load on our kafka custer, since there is more network calls etc involved for the replicas +- replication factor should be usually 3 +- [topic naming guide](https://cnr.sh/essays/how-paint-bike-shed-kafka-topic-naming-conventions) - `..`. for message type, all possible values are mentioned in the link, some common ones are `queuing` for classic use cases, `etl` for cdc, etc. dataset name is like database name and data name is like table name. also use snake case +- [debezium](https://github.com/debezium/debezium) uses kafka connectors and kafka ecosystem underneath, and helps do realtime cdc by using database's transaction logs +- so, two common patterns with kafka - + - use applications like spark, flink, (or even kafka itself) etc to read from kafka and generate realtime analytics + - use kafka connect to write to s3, hdfs, etc from kafka and generate batch analytics from this +- kafka metrics - monitor a lot of things like how many under replicated partitions exist i.e. how many partitions have issues with in sync replicas +- we can enable in flight encryption ssl, authentication and authorization +- kafka has data retention for 7 days by default +- but until then, everything is internally in file formats, e.g. i tried poking around in the log.dir folder on my local i.e. inside /tmp/kraft-combined-logs/ +- partitions are internally made up of segments +- so, there is one (the latest) active segment, and other segments can be consider obsolete +- a segment is closed means it is available for log cleanup - this helps delete obsolete data from the disk of kafka +- how to cleanup logs - there are two possible values for `cleanup.policy` on a topic - `compact` (default for __consumer_offsets) and `delete` (default for all user defined topics) +- a segment is closed and a new one is started when either the `log.segment.bytes` size is reached, or if `log.retention.hours` is reached +- if we set cleanup policy to be compact - a new segment is created, and only the values for the latest keys for a topic is retained, and others are discarded. so e.g. segment 1 has value a for key x and value b for key y, and segment 2 has value c for key y, the newly created segment would have value a for key x and value c for key y. this behavior also makes sense for the consumer offsets topic if i think about it +- for very large messages, either tweak configuration parameters to increase maximum limits, or better, use something like sqs extended client of aws is possible + +## RabbitMQ + +- messaging systems - + - used for application to application communication + - they are near realtime - messages can be processed by consumers instantly + - helps establish a standard - both producers and consumers would have to obey this messaging system specifications, instead of each source having integration logic for each target +- rabbitmq features - + - rabbitmq is open source + - multiple instances can be deployed into a cluster for high availability + - web interface for management and monitoring + - built in user access control + - built in rest apis (mostly for diagnostic purposes but can be used for messaging, not recommended) +- running rabbitmq - + ``` + docker container run -d -p 5672:5672 -p 15672:15672 rabbitmq:3.13.1-management + ``` +- publisher / producer - sends message on the exchange +- subscriber / consumer - consumes message from the queues +- queue - the buffer tht stores messages before the consumers consume from this queue +- exchange - routes messages to the right queue +- routing key - the exchange uses this parameter of the messages to decide how to route it to the queues +- binding - link between exchanges and queues +- message durability - guarantees that messages survive server restarts and failures +- by default, everything is "transient" i.e. lost on rabbitmq server restarts! +- to ensure message durability, we need to set two parameters - + - mark queues as durable - we need to set this when creating queues + - use persistent delivery mode when publishing messages. spring does this by default for us +- rabbitmq also has two types of queues - + - "classic" - the default. has good performance, but cannot withstand node failure, since it is only present on the primary node + - "quorum" - replicated across different servers. maintains consistency using quorum +- rabbitmq can store messages either in memory or on disk +- the "default exchange" is used if we do not specify the exchange and just specify the routing key + ```java + rabbitTemplate.convertAndSend("example.rabbitmq", "hello world"); + ``` +- some consumers - + ```java + @Component + @Slf4j + public class Consumer { + + @RabbitListener(queues = "example.rabbitmq") + public void consume(String message) { + log.info("consumed: [{}]", message); + } + } + ``` +- assume our producer is faster than the consumer. using below, 3 threads are created, one for each consumer. this way, our slow consumers can keep up with the fast producer, without us having spun up additional instances of the consumer + ```java + @RabbitListener(queues = "example.rabbitmq", concurrency = "3") + ``` +- spring rabbitmq uses jackson for serialization / deserialization of pojos +- a naming convention example - x.name for exchanges, q.name.sub_name for queues +- "fan out exchange" - implements the publish subscribe pattern - it broadcasts the message to all queues bound to it + - e.g. we have a direct exchange x.hr + - it has bindings for two queues - q.hr.marketing and q.hr.accounting + - when binding, the binding key can be empty + - similarly, when producing, the routing key can be empty + - now, any messages put on the exchange x.hr will flow to both the queues + - in the snippet below, we specify the exchange name. the routing key is ignored, hence it is set to an empty string + ```java + rabbitTemplate.convertAndSend("x.hr", "", employee); + ``` +- "direct exchange" - send messages to selective queues instead of broadcasting to all queues + - e.g. we have a direct exchange x.picture + - we have two queues - q.picture.image and q.picture.vector + - q.picture.image is bound using two binding keys to the exchange - png and jpg + - q.picture.vector is bound using one binding key to the exchange - svg + - now, when our routing key is png / jpg, it goes to the image queue + - when our routing key is svg, it goes to the vector queue + - so, exchange sends the message to queues where routing key = binding key + - note - if the routing key does not match any rule, the message would be discarded +- "topic exchange" - + - with direct exchange, we can only route messages using a single criteria - e.g. we only used image type above + - using topic exchange, we can route messages based on multiple criteria + - note about wildcards - + - `*` can substitute for 1 word + - `#` can substitute for 0 or more words + - e.g. we have a topic exchange x.picture + - we can send images to different queues based on image size, image type, source of image, etc + - the producer will just produce the messages using routing keys like source.size.type, e.g. mobile.large.png, desktop.small.svg and so on + - e.g. we have queues for different purposes. e.g. we want an image queue like earlier. we can have binding keys of the form either `#.png` and `#.jpg` or `*.*.png` and `*.*.jpg` + - this is true decoupling - the producer just tells the kind of messages being published, while the consumer selectively decides the messages it wants to receive based on the binding key + - similarly, if we need a consumer to consume messages for all large svg, we would use `*.large.svg` +- dead letter exchanges - + - in case of an error during consumption, spring will by default requeue the message + - we could be stuck in an infinite loop during this consumption and requeueing + - thus, we can use a "dead letter exchange" - the message after failure is forwarded to this dead letter exchange, which in turn forwards it to another queue depending on how we set the binding for this dead letter exchange + - then, from this special queue bound to the dead letter exchange, we can notify the consumers of the error + - configuring the dead letter exchange for a queue - just click on "Dead letter exchange ?" and enter the exchange name beside "x-dead-letter-exchange" + ![dead letter exchange](/assets/img/messaging-systems/dead-letter-exchange.png) + - note - we can change the routing key of the queue when moving a message to the dead letter exchange + - note - we cannot throw any exception for this too work - we need to throw `AmqpRejectAndDontRequeueException` +- time to live - + - if a message is present in a queue for longer than this timeout, it is declared "dead" + - the message from the actual queue would be moved into the dead letter exchange if configured after this timeout + - along with configuring dead letter exchange like we saw above, we can configure the queue with this ttl as well. it will then automatically move the messages to dead letter exchange in bot scenarios - timeouts and errors +- retry mechanism - + - some errors can be intermittent + - so, we might want to retry after x seconds for n times, before moving a message to dlq + - say we have three exchanges and three corresponding queues - work, wait and dead + - wait exchange is the dead letter exchange for work queue - when there is a failure in our consumer, the message is sent to wait exchange for "backoff" like functionality + - work exchange is the dead letter exchange for wait queue - when the message has been sat in wait queue for sometime, it is moved to work exchange for retrying + - finally, if our consumer notices that it has already tried reprocessing the message 3 times or so, it would move the message into the dead exchange which then goes into the dead queue + - we can get metadata around retires etc from rabbitmq headers +- retry mechanism in spring - + - on the above approach, there is a lot of manual code and configuration from our end + - using spring, we do not need all this logic - spring can automatically handle the retry and backoff for us, and it will move the failed messages to the dead letter exchange + - we only to ensure our queue has the right dead letter exchange configured on it + - apart from that, we can configure the retry logic (exponential backoff) like so - + ``` + spring.rabbitmq.listener.simple.retry.enabled=true + spring.rabbitmq.listener.simple.retry.initial-interval=3s + spring.rabbitmq.listener.simple.retry.max-interval=10s + spring.rabbitmq.listener.simple.retry.max-attempts=5 + spring.rabbitmq.listener.simple.retry.multiplier=2 + ``` + - retry at 3s, then 6s (refer multiplier), and remaining 2 retries at 10s gaps +- diff --git a/_posts/2023-08-19-hadoop.md b/_posts/2023-08-19-hadoop.md new file mode 100644 index 0000000..c685d9c --- /dev/null +++ b/_posts/2023-08-19-hadoop.md @@ -0,0 +1,1020 @@ +--- +title: Hadoop +--- + +## Introduction + +- big data is for terabytes or petabytes of data +- explosion of data - rate at which data is being generated is very high +- 3 vs of big data - + - data volume - as the resolution of camera has increased, so has the size of the media it generates + - data velocity - speed at which data is generated. earlier, batch jobs i.e. at a period were more common. the shift is towards near realtime / realtime now + - data variety - data used to just be in the form of tables, where rdbms systems worked great. now, we have unstructured data in the form of media etc as well i.e. variety of data has increased + - **structured data** - row column format in a table. e.g. rdbms + - **semi structured data** - well defined structure, but not necessarily structured in a tabular format, e.g. json, xml + - **unstructured data** - e.g. text files, audio, etc + - some new vs - veracity (trustworthiness of data, e.g. user input might not be as trustworthy?), value (should be able to drive business value) +- vertical scaling vs horizontal scaling - + - horizontal scaling is more scalable + - horizontal scaling is more available / fault tolerant + - horizontal scaling is more cost effective +- shared nothing - each processing has its own storage. relatively faster +- shared disk - each processing unit works on the same underlying architecture. time taken for data movement is high, since unlike in shared nothing where the storage can be local / closely located to the processing, it has to be located far away +- partitioning - file is broken down (partitioned) and stored in smaller parts in different nodes. also called distributed +- replication - the parts are stored in different nodes so that a node failure does not stop our processing. also called redundancy. number of total copies is determined by "replication factor" +- **4 points** - hadoop allows for horizontal scaling, follows shared nothing architecture, has partitioning, has replication +- seek time - time required for head to point to the right data on hard disk +- transfer rate - time required to move data from head of hard disk to ram +- hadoop is and isn't good at - **4 points** - + - processing large files - it is not for small files + - processing sequentially - it is not good for random access since there is no indexing like in rdbms + - handling unstructured data - it not for acid like / 3nf etc properties like in rdbms + - processing frequently changing data + +## Evolution + +- why do we need hadoop at all - e.g. when using rdbms, we can create indexes on our frequently used columns like name. however, when for e.g. google has to search its database by our search term, there is no such way easy of indexing. so, it would process our query on its data that is distributed in parallel +- so around 2004, google published a paper on gfs (google file system) and google map reduce +- in parallel around the same time, doug cutting was working on nutch +- yahoo hired doug and hadoop was created from nutch +- hadoop's hdfs = google's gfs and hadoop's map reduce = google's map reduce +- facebook launched hive, big query is google's equivalent of this +- with hive (and pig), we write sql to query or add data to hdfs, thus making writing complex operations much easier. this translates to map reduce underneath +- hbase - nosql database system on top of hdfs to store unstructured data. big table is google's equivalent of this. we store data in a denormalized format for better performance +- sqoop - data transfer (to and from) between database (mostly rdbms) and hdfs +- flume - streaming logs from distributed systems into hdfs +- [spark](/posts/spark) - complete package +- cloudera, hortonworks, etc. bundle different tools like hadoop together and distribute them + +## Hadoop Components + +- yarn - yet another resource negotiator. it is a "cluster manager". it is needed because recall how hadoop makes use of horizontal scaling, while abstracting away all the complexities underneath away from us. refer [hadoop 2.x architecture](#hadoop-2x) below for how "resource manager", "node manager" and "application master" work +- hdfs - stores large amounts of data in small chunks to allow processing them in parallel. refer [hdfs architecture](#hdfs-architecture) below for how "name node", "data node" etc work +- map reduce framework - we write simple map reduce programs discussed in this post. this is automatically run in a distributed fashion with the help of yarn, on distributed data with the help of hdfs. note - writing map reduce directly is not common, so tools like hive etc came into picture + +## Theory + +- my understanding - **hadoop = map reduce + hdfs + yarn** in todays world +- hadoop operating modes + - standalone - doesn't use hdfs and reads and writes directly to hard disk + - pseudo distributed - only one machine that can run both master and slave, uses hdfs + - distributed - minimum 4 nodes are needed, for production workloads +- map is run on all slave nodes, reduce is run to aggregate the results from all these slave nodes +- each machine is said to hold a split of the data +- the mapper function would be called once per split - so mappers of different splits would run in parallel +- for hadoop to work, each row of data should be processable independently and out of order +- the mapper outputs a key value pair +- while map is called for all rows, reduce is called once for each key, which is why the input of reduce contains an iterable +- one confusion i had cleared? - don't think of this map and reduce like in arrays (or even spark?). we are using `context.write`, so output of both map and reduce can contain as many elements as we want, just that map would be called once per data element, while reduce once per key along with all the values for that key. the data structure which allows multiple items for the same key is called multi bag +- so, in between the map and reduce, there is a shuffle that happens bts to help group results of map by key +- since a reduce can only run on one slave node at a time, all values for a key need to be first brought into one slave node during shuffle +- understand that output type of key / value of map = input type of key / value of reduce +- all the keys that go to a reducer are sorted by default +- number of mappers = number of splits of data. we cannot configure the number of mappers +- number of reducers by default is 1. in this case, outputs of all mappers are collected, sorted by key and then sent grouped by key to send one by one on a key wise basis to the reducer +- internally, after map process, each key is assigned to a partition +- number of partitions = number of reducers +- so, basically after map, the assigning of a partition to a key helps determine which reducer a key should go to +- the partition that an item should go to is determined based on its key - something like (consistent_hash(key) % number of partitions). so, items with the same key cannot go to different reducers +- while doing this, we should avoid skews / hot partitions +- after the partition is determined via partitioning, the shuffle phase helps get the output of map to the right partition +- finally, the items that arrive at a partition are sorted and then grouped by key, so that the reducer can get (key, iterable of values) +- remember that while the same key cannot go to different partitions, multiple keys can go to the same partition. this is why we need the sort + group operations +- we can hook into partitioning, sorting and grouping phase - helps achieve secondary sorting, joining, etc. discussed later + +## Combiners + +- to reduce the overhead of shuffle, we can add a combiner - this means before shuffling, first combine the outputs of map on a single node +- e.g. if for word count, instead of shuffling, we can first ensure we reduce at the slave node level. this way, a key would be present at most once in one slave node. this reduces the amount of data to shuffle +- we can use the same class for combiner and reducer if we want +- combine may or may not run. e.g. if hadoop feels the amount of data is too less, the combine operation might not run. so, following points are important - + - our combine operation should be optional i.e. we should be sure that even if our combine operation does not run, our results stay the same. e.g. we want to find out all the words that occur 200 or more times. we can only add the values for a key in a combiner. writing the word to the context based the condition that it occurs 200 or more times can only stay inside the reducer since at that point, the reducer has all the values. basically, it might happen that one worker's combine sees count as 150 for a particular word and another worker's combiner sees count as 60 for the same word + - input and output format of combine operation should be same so that it whether it runs or not makes no difference (and of course these types should also be the same as output of map and input of reduce) +- so, the entire process looks like this? - map -> combine -> partition -> shuffle -> sort -> group -> reduce + +## HDFS Commands + +- hdfs - hadoop distributed file system +- to list all folders and files in hdfs recursively - `hdfs dfs -ls -R /`. this command works with folders as well i.e. at the end, specify a custom path instead of / +- use `hdfs dfs -put first-speech.txt` to put a file into hadoop. it is placed in /user/shameek (inside hdfs) by default, else specify the custom path at the end of the command +- get a file from hdfs into local - `hdfs dfs -get first-speech.txt` +- read the output from hdfs directly instead of copying it to local first - `hdfs dfs -cat output/part-r-00000` +- change permissions - `hdfs dfs -chmod 777 ExamScores.csv` +- cp copy a file from one location to another inside hdfs - `hdfs dfs -cp ExamScores.csv ExamScores2023.csv` +- moving file from one location to another inside hdfs - `hdfs dfs -mv ExamScores.csv ExamScores2021.csv` +- browse the file system using gui - go to http://localhost:9870/ -> utilities -> browse the file system + +## HDFS Architecture + +- hdfs - hadoop distributed file system +- hdfs is used for terabytes and petabytes of data +- name node is a daemon running on master +- data nodes are daemons running on slave nodes +- name node maintains metadata e.g. which file is stored where. recall how file is stored in distributed mode, replicated mode, etc. these records are maintained in the form of metadata in the name node +- e.g. if we have a file of 300mb. we submit it to the name node, which would then break the file into **splits** of 128mb (default), so 128mb + 128mb + 44mb and stored in different slave nodes, so that they can be processed in parallel +- secondary name node and name node - secondary name node has something called "edit logs". to me, this feels like transaction logs in database i.e. all changes are continuously recorded in the edit logs of the secondary name node. the "fs image" is present on the name node, which is like the current snapshot of the system, e.g. the chunks of file described above is present in data node 1, data node 2 and data node 7. as changes happen continuously, e.g. we add / remove / modify files etc, the changes come up in the edit logs of the secondary name node. the secondary name node then periodically looks and then modifies the fs image of the name node to reflect the current state of the system +- hadoop 2.x onwards, a standby name node is present as well. so, hadoop 1.x has a single point of failure unlike hadoop 2.x +- hdfs client - gets the metadata from name node and accordingly requests data nodes for the data i.e. - + - hdfs client asks name node where the data is / tells name node it wants to store file x + - name node responds with how to store file / where the file is stored + - hdfs client then accordingly interacts with data nodes + ![hdfs architecture](/assets/img/hadoop/hdfs.drawio.png) +- my understanding - why the above breaking might be needed - e.g. if name node directly responded to the hdfs client by gathering data from data nodes, entire point of distributing data is lost +- because of this distributed nature of data, there is a checksum present on the name node metadata, and the hdfs client itself calculates the checksum from the data it gathers from the data nodes. these two checksums are compared to verify integrity of data
+- data nodes also send heartbeats to the name node periodically + +## Resource Management Architecture + +### Hadoop 1.x + +- job tracker - daemon located in master, this is where we submit the map reduce jobs via hdfs client +- the job tracker then breaks the job into multiple tasks and submits to task tracker +- task trackers run on the slave nodes. there can be multiple instances of task trackers running on a single slave node +- rack awareness - name node is rack aware i.e. for e.g. client is directed to the closest data node where the data might be present out of all the data nodes having the replicated data. (recall kafka had something similar) +- just like name node vs data node in hdfs, here, the job tracker is a daemon running on master node while the task tracker is a daemon running on slave nodes +- multiple slots can be present on a slave node - understand how a server can be multi core and therefore, perform multiple tasks at a time +- so, these slots are basically jvms which run slices of work + +![hadoop1.x](/assets/img/hadoop/hadoop1.x.drawio.png) + +### Issues + +- hadoop 2.x and 3.x are similar, just performance improvements +- hadoop 1.x vs hadoop 2.x - in hadoop 1.x, cluster resource management and data processing both is done by map reduce framework. in hadoop 2.x, cluster resource management has been delegated to yarn (yet another resource negotiator), while map reduce framework is only responsible for data processing. the underlying storage continues to be hdfs in both versions +- so, map reduce in hadoop 1.x = map reduce (data processing) + yarn (resource management) in hadoop 2.x + +### Hadoop 2.x + +- so now, map reduce is just used for data processing, while cluster resource management is done by yarn +- so, map reduce, spark, etc sit on top of yarn, while hive, pig, etc sit on top of map reduce +- it does things like - + - resource management + - assigning tasks to nodes that have sufficient resources + - rescheduling failed tasks to new nodes +- yarn has two components - resource manager and node manager +- resource manager runs on master +- resource manager has two components - resource scheduler and application manager +- resource scheduler does not deal with any logic around retrying etc, it just cares about assigning of resources (like ram, etc) based on availability +- application manager is responsible for spinning up application masters +- now, when we submit a job, the resource manager with the help of its two components, spins up an application master +- understand that application master is like another container, it is not like a daemon running on master node perennially. so, the application master is scoped to the lifecycle of the application +- now, the application master coordinates with resource scheduler of resource manager to spawn containers that can execute our map / reduce tasks +- containers execute our actual tasks +- a node can have multiple containers, just like in hadoop1.x, multiple slots could be present on a slave node +- the node manager sends heartbeats for health monitoring of node (recall how in hdfs, data nodes do the same thing) +- note - master node is also called as the controller node +- are all the components listed below - resource manager, node manager, resource scheduler, application master, application manager, container, basically components of yarn and map reduce? + +![hadoop2.x](/assets/img/hadoop/hadoop2.x.drawio.png) + +- location constraint - to avoid a lot of data transfer over the network, execute the tasks on the node which is the closest to the data +- so two different things? - location constraint - schedule work on node having data and rack awareness - if for e.g. there is replication, direct node to closest replica +- now, we know that there can be multiple containers being concurrently executed on this node until all its resources are not used up. if more jobs are spawned, the jobs would have to wait in a queue +- how these containers / tasks get scheduled on the node is determined by the scheduling policy - + - fifo scheduler - first in first out scheduler. e.g. assume a job takes 5 minutes, and uses up all the resources of this node. a new job that is submitted almost immediately after this job, and takes say 10 seconds, will still have to wait for the entire duration of 5 minutes till the first job is complete, since there are no resources available for this second job to execute + - capacity scheduler - divide all the resources into multiple parts, e.g. give 30% of the resources to promotional and remaining 70% to searching. this way, both these parts will individually act as fifo schedulers, but a short promotional workload will not be stalled by long running searching and indexing jobs. this is the default and usually preferred one. by default, only one queue is present - default, with 100% of the capacity + - fair scheduler - accept all jobs, and as more jobs come in / go out, allocate each of them equal amount of resources + +## Hadoop Streaming + +- a utility that helps write map reduce programs in non java languages like python, r, etc +- e.g. of using hadoop streaming on my local - `hadoop jar ~/hadoop-3.3.6/share/hadoop/tools/lib/hadoop-streaming-3.3.6.jar -files wordcount_mapper.py,wordcount_reducer.py -mapper wordcount_mapper.py -reducer wordcount_reducer.py -input wordcount_input -output output`. here wordcount_mapper and wordcount_reducer are just simple python programs. we read from the input file wordcount_input, mapper outputs to stdout which is then used as input for wordcount_reducer and finally the reducer's output is stored inside output/part-00000 +- wordcount_mapper.py - + ```py + #!/usr/bin/python3 + import sys + + for line in sys.stdin: # for all lines + words = line.split() # grab all words + for word in words: # for all words + print ('{0}\t{1}'.format(word, 1)) # output (word, 1) + ``` +- wordcount_reducer.py + ```py + #!/usr/bin/python3 + import sys + + prev_word = None + prev_count = 0 + word = None + + for line in sys.stdin: # for all (word, 1) + + line = line.strip() + word, count = line.split('\t') + count = int(count) + + if word == prev_word: + prev_count += count # add to previous word count + else: # if current word is not the same as last word + if prev_word: + print('{0}\t{1}'.format(prev_word, prev_count)) # print previous word + prev_word = word # update previous word + prev_count = count + + if prev_word == word: + print('{0}\t{1}'.format(prev_word, prev_count)) + ``` + +### mrjob + +- developed by yelp +- makes it much easier to write and work with map reduce in python - things like chaining jobs etc. become much easier +- we just write one file using clean coding principles unlike using two files like specified in hadoop streaming +- allows writing tests locally (i.e. without support around hdfs etc) +- even aws emr etc work with mrjob + +## WordCount Example + +- initial [pom.xml](https://gist.github.com/shameekagarwal/71f127eb24ffe9997c3488cdf8364313) +- run `mvn clean package` +- command to submit job - `~/hadoop-3.3.6/bin/hadoop jar ./target/hadoop-1.0-SNAPSHOT.jar org.example.One input output` +- visit status of job at http://localhost:8088/cluster/apps +- note - for most classes, i find there are two packages we can import from - mapred and mapreduce. we should try using mapreduce where possible +- a basic example for word count - + ```java + public class One { + + public static class MapClass extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String body = value.toString().toLowerCase().replaceAll("[^a-z\\s]", ""); + String[] words = body.split(" "); + for (String word : words) { + if (word.length() >= 7) { + context.write(new Text(word), new LongWritable(1)); + } + } + } + } + + public static class Reduce extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + long sum = 0L; + for (LongWritable longWritable : values) { + sum += longWritable.get(); + } + context.write(key, new LongWritable(sum)); + } + } + + public static void main(String[] args) throws Exception { + + Path in = new Path(args[0]); + Path out = new Path(args[1]); + + Configuration configuration = new Configuration(); + Job job = Job.getInstance(configuration); + + try { + FileSystem hdfs = FileSystem.get(configuration); + hdfs.delete(out, true); + } catch (Exception ignored) { + } + + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(LongWritable.class); + + job.setMapperClass(MapClass.class); + job.setCombinerClass(Reduce.class); + job.setReducerClass(Reduce.class); + + job.setInputFormatClass(TextInputFormat.class); + job.setOutputFormatClass(TextOutputFormat.class); + + FileInputFormat.setInputPaths(job, in); + FileOutputFormat.setOutputPath(job, out); + + job.setJarByClass(One.class); + job.submit(); + } + } + ``` +- the mapper and reducer classes that we extend are generics, where the types are for the key and value of input and output respectively +- we also recursively delete the output folder because if we rerun jobs without doing this, there is a failure around folder already exists +- the output format has files like part-r-00000, where r indicates that the output is due to a reduce operation and the last number is the partition id +- recall how by default, number of reducers is 1. to change the number of reducers, simply write `job.setNumReduceTasks(2)` +- e.g. in this case, i see two files in the output folder - part-r-00000 and part-r-00001 +- built in functions - e.g. map reduce ships with a `LongSumReducer` which we could have used here - sum for each key, where the value is long +- my confusion cleared - `setOutputKeyClass` and `setOutputValueClass` are used for reducer outputs, while `setMapOutputKeyClass` and `setMapOutputValueClass` are used for map outputs. i think there are some times when we do not need to include the map ones, but i think i might as well just include all of them every time tbh + +## Constructing Map Reduce Logic + +### Numeric Summary Metrics + +- e.g. imagine we have a list of rows, where each row has a subject name and score obtained by any student. we want to calculate the average score for each subject + + | subject | marks | + | ----------- | ----- | + | chemistry | 75 | + | mathematics | 81 | + | chemistry | 79 | + +- constructing map reduce logic - **since we want to group based on subject, output key of map should be subject**. the numerical statistic that we want to perform, e.g. average in this case, can be done inside the reducer +- so, remember - map's job is to output the right key, and reduce's job is to output the right value based on all the values available for a key +- our map would try to make a key for the subject name, and output the marks as the value +- our reduce would just run (sum of all values / size of list of values) +- if we use the combiner as the same function that was used for reducer - e.g. if one node had 55 and 65 for chemistry, and another node had 75 for chemistry, the right average would be 65, but in our case, the combiner would output be 60 on node 1 and 75 for node 2, thus making the reducer output to be 67.5 +- recall how output of map = input of combiner = output of combiner = input of reducer. so, we can instead output a tuple as the value from the map as (marks, 1). combiner can then output (sum of marks, size). this way, the reducer now receives a list of tuples, and it has to add the first value of tuples for the total and divide it by the sum of second values of the tuple for the final average +- if we want to use custom data types - for keys, we must implement the `WritableComparible` interface, while the data types used for values must implement the `Writable` interface +- we need to write implementation of things like serialization and deserialization. hadoop input and output classes have helpers for this, e.g. `readUTF` / `writeUTF` for strings, `readDouble` / `writeDouble` for doubles, etc + - remember to keep the order of serialization and deserialization to be the same + - remember to keep a no args constructor (used by hadoop internally) +- so, we would need an extra class to store the total marks and number of students with that marks, if we want to use combiners + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String[] record = value.toString().split(","); + context.write(new Text(record[0]), new AverageWritable(Long.parseLong(record[1]), 1L)); + } + } + + public static class Combine extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + long count = 0; + long score = 0; + for (AverageWritable value: values) { + score += value.getTotal(); + count += value.getNoOfRecords(); + } + context.write(key, new AverageWritable(score, count)); + } + } + + public static class Reduce extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + long count = 0; + long totalScore = 0; + for (AverageWritable value: values) { + totalScore += value.getTotal(); + count += value.getNoOfRecords(); + } + context.write(key, new DoubleWritable((totalScore * 1.0) / count)); + } + } + ``` +- the custom data type AverageWritable looks like below - + ```java + @NoArgsConstructor + @AllArgsConstructor + @Data + public class AverageWritable implements Writable { + + private long total; + + private long noOfRecords; + + @Override + public void write(DataOutput out) throws IOException { + out.writeLong(total); + out.writeLong(noOfRecords); + } + + @Override + public void readFields(DataInput in) throws IOException { + total = in.readLong(); + noOfRecords = in.readLong(); + } + } + ``` + +### Filtering + +- e.g. if we want to filter the data based on a condition, we can perform the filtering in the map function, and the reduce can just be an identity function +- e.g. if we make the output key of the map function as null, all the items would be received by the reducer in one go and it can write out all the items at once +- notice the use of singleton for `NullWritable` to reduce memory used + ```java + public class MapClass extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String row[] = value.toString().split(","); + if (row[2].equalsIgnoreCase("Books")) { + context.write(NullWritable.get(), value); + } + } + } + ``` +- we do not call `setReducerClass` so that the identity reducer can kick in. identity reducer = a reducer that will just call `context.write(key, value)` for all the values that it receives - + ```java + job.setMapperClass(MapClass.class); + ``` + +### Distinct Values + +- if we want the distinct values, e.g. something that works like the `distinct` clause in sql +- we have a file with a word in every new line, and we would like to find a list of all the distinct words +- we can again use null writable instead of outputting dummy values like 1 for performance +- map class - + ```java + public class MapClass extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + context.write(value, NullWritable.get()); + } + } + ``` +- understand how the reducer here is not exactly identity - it would output one value for a key, not multiple like in the above example of filtering. reducer / combiner - + ```java + public class Reduce extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + context.write(key, NullWritable.get()); + } + } + ``` +- note - the output was in sorted order - recall why this happens due to the sorting after the shuffle process + +### Top N Records + +- e.g. each row has user id and their number of followers, and we want to show the top n users + + | user_id | followers | + |---------|-----------| + | 1 | 30 | + | 2 | 30000 | + | 3 | 20 | + | 5 | 50 | + | 6 | 6000 | + +- my understanding - solution 1 - output key as null for all rows, so one reducer gets all the rows. there is a bottleneck here, since we cannot have more than one reducer for top n records +- all mappers work on subsets of data +- e.g. we can get all mappers to find the top n of the data they are responsible for +- note - it can happen that the mappers output less than n if the data that they have is small +- for a mapper to output top n records, it can do so only after all records in the partition it is responsible for have been processed, because mappers are called once per record for all records in the split it is responsible for - `cleanup` +- note - we have written the user for ascending order - priority queue will have the user with the lowest number of followers at the top. so, we just try to ensure priority queue size doesn't go over three, and that incoming element just needs to be larger than that whats at the top of the priority queue (i.e. smallest in the priority queue) +- we use User as output of map, so we could have just implemented writable, but we implement writable comparable so that we can use its compare to function, used by priority queue - + ```java + @Data + @AllArgsConstructor + @NoArgsConstructor + public class User implements WritableComparable { + + private String userId; + + private Integer numberOfFollowers; + + @Override + public void write(DataOutput out) throws IOException { + out.writeUTF(userId); + out.writeInt(numberOfFollowers); + } + + @Override + public void readFields(DataInput in) throws IOException { + userId = in.readUTF(); + numberOfFollowers = in.readInt(); + } + + @Override + public int compareTo(User o) { + return numberOfFollowers - o.getNumberOfFollowers(); + } + } + ``` +- map - + ```java + @Slf4j + public class MapClass extends Mapper { + + private final PriorityQueue pq = new PriorityQueue<>(); + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String[] row = value.toString().split("\t"); + User user = new User(row[0], Integer.parseInt(row[1])); + + if (pq.size() < 3 || pq.peek().getNumberOfFollowers() < user.getNumberOfFollowers()) pq.add(user); + if (pq.size() > 3) pq.poll(); + + log.info("pq is [{}], user is [{}]", pq, user); + } + + @Override + protected void cleanup(Mapper.Context context) throws IOException, InterruptedException { + while (!pq.isEmpty()) { + log.info("writing user [{}]", pq.peek()); + context.write(NullWritable.get(), pq.poll()); + } + } + } + ``` +- **in mapper** - above, we used cleanup of mapper. this technique is called in mapper. it is an alternative to, and sometimes more optimal than combiners + - in case of combiner, the mapper would write to files, then the combiner would read from and again write to the files + - in case of in mapper, we do everything in memory using for e.g. priority queue here. so while there is memory overhead, it is more optimal from performance pov +- lets say for all these n values, the mappers output the same key, say null +- now, all map outputs can come into the same list into a reducer this way +- so, the reducer basically receives the combination of top n outputs of all mappers +- note - for this to work, we had to use a single reducer +- here cleanup is not needed like in map, since reducer itself will get all the values +- note - a weird thing i have experienced here - `pq.add(value)` changes everything in priority queue to whats added the last time to the priority queue - like a pass by reference vs value thing, but why? however, cloning the user i.e. `pq.add(new User(value.getUserId(), value.getNumberOfFollowers()));` fixed the issue + ```java + @Slf4j + public class Reduce extends Reducer { + + @Override + protected void reduce(NullWritable key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + + PriorityQueue pq = new PriorityQueue<>(); + + for (User value : values) { + if (pq.size() < 3 || pq.peek().getNumberOfFollowers() < value.getNumberOfFollowers()) { + pq.add(new User(value.getUserId(), value.getNumberOfFollowers())); + } + if (pq.size() > 3) pq.poll(); + log.info("pq is [{}], user is [{}]", pq, value); + } + + while (!pq.isEmpty()) { + log.info("writing user [{}]", pq.peek()); + context.write(NullWritable.get(), pq.poll()); + } + } + } + ``` +- so, the obvious bottleneck is that we are limited to using just one reducer +- we know that one reducer receives all the keys that it is responsible for in sorted order +- however, this order breaks across reducers - e.g. reducer 1 receives (a,5), (d,6), (w,5), while reducer 2 receives (b,2), (c,5), (e,7). the output from the two reducers are sorted at an individual level, but this order breaks when combined +- with "total order partitioning" (not discussed here), the idea is that the reducer 1 receives (a,5), (b,2), (c,5), while reducer 2 receives (d,6), (e,7), (w,5), i.e. we are ensuring keys received across reducers are ordered as well +- if we implement a custom partitioner, a naive way would be send letters a-j to partition 1, k-r to partition 2 and s-z to partition 3. while this does ensure even distribution in terms of the number of keys, this can mean uneven distribution since there can be hot keys. all of this is handled by the total order partitioner + +### Indexes + +- search engines periodically visit websites and store the text in their own database - they create an index +- web pages are crawled repeatedly for all the data to build an index and keep it updated +- then, when a user initiates a search, these engines search through their own index instead of going to the websites +- inverted indexing - search engines generate an index based on the contents of the websites. e.g. mango is contained in files 1 and 3, war in files 1 and 5 and so on. the input was just files, while the output has the key as word, the value as the files containing this word. this structure is called an inverted index +- analogy behind inverted index - website themselves are an index - we type in a url and get back the content. the key is the url and the value the content. however, we generate an inverted index by using content as keys and the urls as values, so that for a search term, we know what urls may contain relevant information to it +- tf - term frequency - number of times a word appears in a document / total number of words in the document. e.g. if mango appears 5 times in a document with 1000 words, tf = 0.005 +- while calculating the tf, all words are considered equally important, so to help scale the rare words up, we use idf i.e. rare words across documents are bumped up +- idf - inverse document frequency - log (total number of documents / number of documents having the word). e.g. if 1,000 files have the word we are searching for out of 1,000,000, idf = 3 +- so, we would want the value of tf * idf to be high for our website to come up on the top +- so, all these calculations around building indexes from huge amounts of raw data (websites) very fast using distributed processing is what big data helps with +- a simple way of achieving this - we know that our output should contain the word as key and list of urls containing it as output. so, the map should output for all words on the page, that word as the key the url as value. now, the reducer receives all the urls for a word + +## File Formats + +- file formats - used when we wrote the following bit of code - + ```java + job.setInputFormatClass(TextInputFormat.class); + job.setOutputFormatClass(TextOutputFormat.class); + ``` +- the different possible options for input formats are - + - `TextInputFormat` - file contains only values. key is line number, which is why we were using `LongWritable` for key of map till now everywhere + - `KeyValueTextInputFormat` - used when input file contains key as well + - `SequenceFileInputFormat` - uses compression, useful when we chain map and reduce jobs i.e. input of the second job is the output from the first job + - `NLineInputFormat` - recall how by default file is split into segments of 128mb each. this way, for e.g. if we have 6 slave nodes and only a 500mb file, we cannot use all our slave nodes properly. this is where this option is useful, whereby we can specify the number of lines that should go into per split, thus helping us utilize our cluster more effectively +- the different possible options for output formats are - + - `TextOutputFormat` - each line has the key and value separated by a tab + - `SequenceFileOutputFormat` - uses compression, useful when we chain map and reduce jobs +- so for e.g. for the exams example discussed in the section before, the format of a line was for e.g. Chemistry,79. so, we can use the `KeyValueTextInputFormat` class for it as follows i.e. note how the map doesn't have to extract the key by using split on the value like earlier. note - specify the separator as well, since tab is the default - + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(Text key, Text value, Mapper.Context context) throws IOException, InterruptedException { + context.write(key, new AverageWritable(Long.parseLong(value.toString()), 1L)); + } + } + + // ... + configuration.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ","); + job.setInputFormatClass(KeyValueTextInputFormat.class); + ``` + +## Chaining Jobs + +- e.g. imagine we have data in the following format i.e. each row has marks obtained for a student - the school that student is from and the subject. for all subjects, we would like to obtain the school with the highest average, and the actual average + + | school | subject | marks | + | ------------------ | --------- | ----- | + | Bigtown Academy | Chemistry | 44 | + | Bigtown Academy | French | 69 | + | Mediumtown College | Biology | 61 | + | Largetown School | French | 67 | + +- so, we can break the problem as follows into two separate map reduce jobs - +- first job's map output - key = (school, subject), value = (marks, 1) (recall the value is this strange tuple because of the constraint when using combiners around types) + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(LongWritable key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String[] record = value.toString().split(","); + ExamScoresV2KeyWritable newKey = new ExamScoresV2KeyWritable(record[0], record[1]); + AverageWritable averageWritable = new AverageWritable(Long.parseLong(record[2]), 1L); + context.write(newKey, averageWritable); + } + } + ``` +- first job's combiner output - key = (school, subject), value = (sum of marks, total students) + ```java + public static class Combine extends Reducer { + + @Override + protected void reduce(ExamScoresV2KeyWritable key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + long count = 0; + long score = 0; + for (AverageWritable value: values) { + score += value.getTotal(); + count += value.getNoOfRecords(); + } + context.write(key, new AverageWritable(score, count)); + } + } + ``` +- first job's reducer output - key = (school, subject), value = average of the school in the subject + ```java + public static class Reduce extends Reducer { + + @Override + protected void reduce(ExamScoresV2KeyWritable key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + long count = 0; + long score = 0; + for (AverageWritable value: values) { + score += value.getTotal(); + count += value.getNoOfRecords(); + } + context.write(key, new DoubleWritable(score * 1.0 / count)); + } + } + ``` +- second job's map output - key = subject, value = (school, its average for that subject). however, notice how it can read directly the key from the output of the earlier job, so we can also set the input format on the job directly as `job.setInputFormatClass(KeyValueTextInputFormat.class)` + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(Text key, Text value, Mapper.Context context) throws IOException, InterruptedException { + String[] record = key.toString().split(","); + context.write(new Text(record[1]), new SchoolAverageWritable(record[0], Double.parseDouble(value.toString()))); + } + } + ``` +- second job's combiner output - key = subject, value = (school with maximum average for the subject, the average) + ```java + public static class Reduce extends Reducer { + + @Override + protected void reduce(Text key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + SchoolAverageWritable max = new SchoolAverageWritable(null, -1); + for (SchoolAverageWritable value: values) { + max = max.getAverage() > value.getAverage() ? max : new SchoolAverageWritable(value.getSchool(), value.getAverage()); + } + context.write(key, max); + } + } + ``` +- second job's reducer output - _same as above_ +- so, the entire thing has been broken down into two jobs, which can be run one after another +- while we can run manually, hadoop can help achieve this via code using "job control" + ```java + Configuration configurationOne = new Configuration(); + Configuration configurationTwo = new Configuration(); + + ControlledJob controlledJobOne = new ControlledJob(configurationOne); + ControlledJob controlledJobTwo = new ControlledJob(configurationTwo); + + // notice how input of second job = output of first job + // these static calls of getJob do stuff like setting types on job, + // setting inputs and outputs, setting mappers, calling jarByClass, etc + // all of which we have seen earlier + Job jobOne = FiveJobOne.getJob(configurationOne, new Path(args[0]), new Path(args[1])); + Job jobTwo = FiveJobTwo.getJob(configurationTwo, new Path(args[1]), new Path(args[2])); + + controlledJobOne.setJob(jobOne); + controlledJobTwo.setJob(jobTwo); + + // adding dependency + controlledJobTwo.addDependingJob(controlledJobOne); + + JobControl jobControl = new JobControl("SchoolWithHighestAverage"); + jobControl.addJob(controlledJobOne); + jobControl.addJob(controlledJobTwo); + + // some thread stuff we have to do + // when running controlled jobs + Thread thread = new Thread(jobControl); + thread.setDaemon(true); + thread.start(); + + while (!jobControl.allFinished()) { + Thread.sleep(500); + } + ``` +- now recall how if chaining jobs, we can make use of compression - we can notice this if we try to run `cat` on the intermediate outputs (i.e. what we specify using `arg[1]` above) + ```java + // inside job 1 - + job.setOutputFormatClass(SequenceFileOutputFormat.class); + + // inside job 2 - + job.setInputFormatClass(SequenceFileInputFormat.class); + ``` +- the caveat of the above is output format of key / value of reduce of first job = input format of key / value of map of second job, which was not really needed otherwise if not using compression i.e. we could write double from reduce, and while reading read as string and parse this string into double +- my doubt - since max is needed, could we have used secondary sorting? is secondary sorting usually more optimal for finding maximum? + +## Pre and Post Processing + +- pre and post processing - to perform some steps after and before the job +- these pre and post processing steps work just like map tasks +- so the effective structure of hadoop can be said to be as follows + - multiple maps in the form of pre processing + - the actual map + - an optional combiner + - the shuffle step done by hadoop internally which then helps run reduce + - the reduce on a per key basis + - multiple maps in the form of post processing +- so, the structure when using pre and post processing looks like follows i.e. this replaces the `job.setMapper` etc calls - (the 4 types in between are for input key class, input value class, output key class and output value class). note - i think for adding combiner however, like stated below, i had to go back to `job.setCombinerClass` + ```java + // pre processing + ChainMapper.addMapper(job, PreProcessing.class, Text.class, Text.class, Text.class, Text.class, confOne); + + // the actual map, but syntax is same + ChainMapper.addMapper(job, MapClass.class, Text.class, Text.class, Text.class, AverageWritable.class, confTwo); + + // combiner + job.setCombinerClass(Combine.class); + + // reducer (note how it is setReducer and not addReducer like addMapper, since only one reducer can be used) + ChainReducer.setReducer(job, Reduce.class, Text.class, AverageWritable.class, Text.class, DoubleWritable.class, confTwo); + + // post processing + ChainReducer.addMapper(job, PostProcessing.class, Text.class, DoubleWritable.class, Text.class, DoubleWritable.class, confTwo); + ``` + +## Optimization + +- optimizing disk io in hadoop - in hadoop, the file is read from / written to disk at each step + - reduce size using pre processing - e.g. drop extraneous data + - use sequence file formats + - optimize the file itself before sending it to hadoop - e.g. xml would be much worse to process due to extra lines of tags compared to something like csv +- optimizing network io - this happens during shuffle + - add a combiner + - order input data using keys beforehand so that there is less network required during shuffling +- optimizing processing - this is more "code based" + - if we have to create something like `new LongWritable(1)` in the map class for e.g. in word count, we can instead create it at the global class level and reference it in the map task. this way, we don't create a new object every time, thus saving up on time for creation of these objects and more importantly garbage collection time + - use string builders instead of string if strings change frequently + - there is some time spent in instantiating a jvm. a new jvm is created for each task in a job by default, e.g. imagine a chain of mappers initially when using pre processing. however, we can reuse jvm across these tasks. we should observe how garbage collection works after this optimization. `conf.set("mapreduce.job.jvm.tasks", "10")`. 10 means reuse jvm for 10 tasks, 1 is the default i.e. 1 jvm per task and setting it to -1 means use one jvm for all tasks. note - this jvm reuse can only happen in a job, not across jobs + - recall why and how n line input format can be useful + - null writable - when we are just interested in the key (e.g. find the most frequently occurring words), and not the value, instead of using a dummy value like `new Text("")`, we can instead use `NullWritable.get()`, and notice how this is using singleton pattern, thus matching the first point of this section optimizing processing +- logging - this can be useful for for e.g. pseudo distributed, in standalone i can see the logs directly in the console as well. to view the logs, go to http://localhost:8088/cluster -> tools -> local logs -> userLogs. this will have a link to all job logs. go to the last job we ran -> and now this will have logs for all containers. i was just using lombok's `@Slf4j` and could automatically see the logs properly without any extra configuration +- hadoop also shows something called counters in ui, and this can be very useful for the health of job. we can add custom counters to it. we simply need to do is as follows (note - we have to use an enum i think) + ```java + enum RemovedRows { + LOW_SCORES, INVALID_DATA + } + + context.getCounter(RemovedRows.LOW_SCORES).increment(1); + ``` +- relational databases - we usually deal with files in hadoop because relational databases cant cope with massive amounts of data. yet we can read from / write to (preferable because this data is usually much smaller than input) relational databases +- when reading from database, each map task (remember how in production we will have multiple slave nodes etc) will initiate a read from the database. this can overload the database with jdbc connections (db proxy is the solution here?) + +## Unit Testing + +- mrunit - unit testing out map reduce code +- ps - this did not work for me, basically mrunit was relying on mapred versions and not mapreduce? however, written the code snippet below for reference +- adding the dependency - (note - i had to add the classifier for this to work) - + ```xml + + org.apache.mrunit + mrunit + 1.1.0 + test + hadoop2 + + ``` +- `MapDriver`, `ReduceDriver`, `MapReduceDriver` - it is as simple as us specifying the class we used e.g. for mapping we use MapClass, then specify the input and the expected output, and call runTest on these drivers to perform the assertion + ```java + public class TwoTest { + + MapDriver mapDriver; + + @Before + public void setUp() throws Exception { + mapDriver = MapDriver.newMapDriver(new Two.MapClass()); + } + + @Test + public void test() throws IOException { + mapDriver.addInput(new Text("chemistry"), new Text("79")); + mapDriver.addInput(new Text("chemistry"), new Text("91")); + mapDriver.addInput(new Text("mathematics"), new Text("67")); + + mapDriver.addOutput(new Text("chemistry"), new AverageWritable(79, 1)); + mapDriver.addOutput(new Text("chemistry"), new AverageWritable(91, 1)); + mapDriver.addOutput(new Text("mathematics"), new AverageWritable(67, 1)); + + mapDriver.runTest(); + } + } + ``` + +## Secondary Sorting + +- each node can have multiple partitions (which are recall 128 mb in size) +- now, for reduce to work, values for a key need to go to the same partition +- because of the way the shuffle process works, the values for a key in the reduce process come in random order +- now, imagine we want the values for a key to be in sorted order as well to for e.g. find the maximum +- one way can be we simply find the maximum by looping over all elements (`O(n)`), since we already have all the values for that key - inefficient +- so, we do something called secondary sorting +- now, we would like to ensure that the reducer gets the iterable of values in sorted order. so, here is how we can achieve it - + - construct a key where key = (actual_key, value) in the map process + - write a custom partitioner so that the partition is determined only using the actual_key part of the key (`Partitioner#getPartition`) + - ensure sort takes into account the key as is, so both (actual_key, value) are used (`WritableComparable#compareTo` i.e. present inside our custom key class) + - ensure group takes into account only the actual_key part of the key (`WritableComparator#compare`) +- so, example of an implementation of secondary sorting - imagine we have a csv, where each row has the subject name and the marks obtained by a particular student in it. we want highest score for each subject. so, we need to sort by both subject and marks, but use only subject for partitioning and grouping. so, the key would be a tuple of (subject, marks). we can also have a combiner that works just like the reducer, except that it needs to input and output the same tuple of (subject, maximum marks) (maximum needs to consider data across all nodes, but maximum from every node is sufficient for evaluating this) +- custom key - also determines how to sort, which uses first subject and then score (descending). so, items for a specific key (subject) are sorted by values (marks in descending) + ```java + @Data + @AllArgsConstructor + @NoArgsConstructor + public class ExamSubjectAndScoreKey implements WritableComparable { + + private String subject; + + private Integer score; + + @Override + public int compareTo(ExamSubjectAndScoreKey o) { + int result = subject.compareTo(o.subject); + return result == 0 ? o.score - score : result; + } + + @Override + public void write(DataOutput out) throws IOException { + out.writeUTF(subject); + out.writeInt(score); + } + + @Override + public void readFields(DataInput in) throws IOException { + subject = in.readUTF(); + score = in.readInt(); + } + } + ``` +- grouping comparator, group using subject only. note - we have to add the constructor with call to super, otherwise we get a npe + ```java + public class SubjectComparator extends WritableComparator { + + public SubjectComparator() { + super(ExamSubjectAndScoreKey.class, true); + } + + @Override + public int compare(WritableComparable a, WritableComparable b) { + ExamSubjectAndScoreKey keyA = (ExamSubjectAndScoreKey) a; + ExamSubjectAndScoreKey keyB = (ExamSubjectAndScoreKey) b; + return keyA.getSubject().compareTo(keyB.getSubject()); + } + } + ``` +- partitioner, partition using subject only - + ```java + public class SubjectPartitioner extends Partitioner { + + @Override + public int getPartition(ExamSubjectAndScoreKey key, IntWritable score, int numPartitions) { + return key.getSubject().hashCode() % numPartitions; + } + } + ``` +- configure both partitioner and grouping comparator using - + ```java + job.setPartitionerClass(SubjectPartitioner.class); + job.setGroupingComparatorClass(SubjectComparator.class); + ``` +- map, combine and reduce - note how reduce and combiner are the same apart from the output format. my doubt - i thought secondary sorting only helps with reducer values being sorted i.e. how can we use `values.iterator.next()` for combiner? + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(Text key, Text value, Mapper.Context context) throws IOException, InterruptedException { + int score = Integer.parseInt(value.toString()); + context.write(new ExamSubjectAndScoreKey(key.toString(), score), new IntWritable(score)); + } + } + + public static class Combine extends Reducer { + + @Override + protected void reduce(ExamSubjectAndScoreKey key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + context.write(key, values.iterator().next()); + } + } + + public static class Reduce extends Reducer { + + @Override + protected void reduce(ExamSubjectAndScoreKey key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + context.write(new Text(key.getSubject()), values.iterator().next()); + } + } + ``` + +## Joining + +- imagine doing this using what we know up till now +- e.g. we have a csv where each row represents an order for a customer. so, it contains customer id, date and total + + | customer id | total | + | ----------- | ------ | + | 18 | 233.28 | + | 17 | 27.35 | + | 18 | 202.23 | + +- another csv contains a row per customer, where each row has the customer id and country of origin + + | customer id | country | + | ----------- | ------- | + | 1 | France | + | 2 | Russia | + | 3 | Germany | + +- now, we would like to find totals by countries - so, we would use joins +- job 1 - map first csv into (customer id, [total, *null*]), identity reducer +- job 2 - map second csv into (customer id, [*0*, country]), identity reducer +- job 3 - the two above outputs can be combined since they have the same format, e.g. recall how we can specify not just a file but folder as well when running hadoop jobs, and the folder here would contain the outputs from both jobs above. now, we use an identity mapper, and then perform a reduce to get (country, total) for every customer. basically, in the iterable, there would be multiple values where country is null, and just one value where the country is not null but the total is 0. understand that the reducer of this job is called once for every key i.e. customer. we don't want to output one row per customer, but one row per country - so, we need yet another job's reduce to help us do some grouping +- job 4 - identity mapper, reduce can now just sum the totals, as the key is now country +- using secondary sorting - we would tag data from country csv with 1 and data from sales csv with 2. map would read from both files. now, we would perform secondary sorting logic - this way, we would have a dataset where the first row has key = customer_id, 1 for the country data, and following rows have key = customer_id, 2 for the sales data. we can group keys with multiple values under same reducer due to secondary sorting logic, this would output country, sum_of sales. so, the output of this first job is basically for each customer, there is a row, where the key is country and the value is total amount of sales for this customer. so, we can follow this up with a second job that has an identity mapper and a reducer to calculate the total +- so, this trick around secondary sorting basically helped us eliminate jobs 1 to 3 +- we can tag the two datasets in the configuration as follows + ```java + Path in1 = new Path(args[0]); + Path in2 = new Path(args[1]); + Path out = new Path(args[2]); + + Configuration configuration = new Configuration(); + configuration.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ","); + + configuration.set(in1.getName(), "1"); + configuration.set(in2.getName(), "2"); + ``` +- the mapper can be written as follows. **note how it extracts the tag and creates the new key using it, so that it can be used during the secondary sorting phase** - + ```java + public static class MapClass extends Mapper { + + @Override + protected void map(Text key, Text value, Mapper.Context context) throws IOException, InterruptedException { + FileSplit fileSplit = (FileSplit) context.getInputSplit(); + Integer tag = Integer.parseInt(context.getConfiguration().get(fileSplit.getPath().getName())); + Integer customerId = Integer.parseInt(key.toString()); + context.write(new CustomerAndTagKey(customerId, tag), value); + } + } + ``` +- each mapper is responsible for a split of the data, and that file split's name is used to tag the different files to help determine what table they belong to +- the reducer can now be certain that the first row would represent the country - + ```java + public static class Reduce extends Reducer { + + @Override + protected void reduce(CustomerAndTagKey key, Iterable values, Reducer.Context context) throws IOException, InterruptedException { + Iterator values$ = values.iterator(); + String country = values$.next().toString(); + double total = 0; + while (values$.hasNext()) { + total += Double.parseDouble(values$.next().toString()); + } + context.write(new Text(country), new DoubleWritable(total)); + } + } + ``` +- `CustomerTagKey#compareTo` - use both customer id and the tag. ensure that in the iterable received for a customer, first record contains the country, and remaining contain the totals for that customer + ```java + @Override + public int compareTo(CustomerAndTagKey o) { + return customerId.equals(o.customerId) ? tag - o.tag : customerId - o.customerId; + } + ``` +- `CustomerPartitioner#getPartition` - only use the customer id for determining the partition + ```java + @Override + public int getPartition(CustomerAndTagKey customerAndTagKey, Text text, int numPartitions) { + return customerAndTagKey.getCustomerId().hashCode() % numPartitions; + } + ``` +- `CustomerComparator#compare` - only use the customer id to group + ```java + @Override + public int compare(WritableComparable a, WritableComparable b) { + CustomerAndTagKey keyA = (CustomerAndTagKey) a; + CustomerAndTagKey keyB = (CustomerAndTagKey) b; + return keyA.getCustomerId().compareTo(keyB.getCustomerId()); + } + ``` +- now, we need to chain another job for actually totaling across customers, already discussed +- apparently what we discussed till now is called a reduce side join, there is another type called map side join, which can be more performant in some cases, but has limitations (same as [spark's](/posts/spark) broadcast join?) - + - reduce side join - tagging datasets, so reducer gets an iterable, which has a value for each row from both datasets which are a part of the join + - map side joins - one dataset is small enough to fit in a jvm, and the join is done in map side and not in reduce side +- e.g. of map side join - we have a handful of stop words to flag in some analysis for our use case, which can easily fit in a jvm diff --git a/_posts/2023-09-24-docker-and-kubernetes.md b/_posts/2023-09-24-docker-and-kubernetes.md new file mode 100644 index 0000000..9643446 --- /dev/null +++ b/_posts/2023-09-24-docker-and-kubernetes.md @@ -0,0 +1,1488 @@ +--- +title: Docker and Kubernetes +--- + +## About Docker + +- docker is a tool for managing containers +- container is a package of our code along with the dependencies and libraries to run that code +- docker follows a client server architecture + - we issue commands via cli to the docker client + - all tasks like creating containers, pulling images, etc. is done by docker daemon (dockerd) +- docker can be run natively in linux, so for macOS and windows, a virtualization layer is needed +- docker engine - dockerd, docker client +- docker desktop - docker engine, docker cli, kubernetes, docker compose, etc + +## Why use Docker + +- the same piece of code will always yield the same application i.e. doesn't rely on host environment +- having similar development, staging and production environments +- easily manage different projects running different versions of dependencies +- easily switch between versions of dependencies +- virtual machines are not as easily reproducible as containers since they have their own dedicated OS +- sharing and distributing is very convenient using Dockerfile, image, etc + +![docker vs vm](/assets/img/docker-and-kubernetes/docker-vs-vm.drawio.png) + +## Images and Containers + +- images are templates for containers, and a container is a running instance of an image +- containers are lightweight, isolated and run independent of each other +- we can use official prebuilt images, the most common source is [docker hub](https://hub.docker.com) +- note: while issuing docker commands + - container name and container id can be used interchangeably, same for image + - first few characters of the image_id are enough to reference the image if they can uniquely identify it +- `docker container run image_name` to create a container from an image +- if the image is not available locally, it is downloaded from dockerhub by docker +- `docker container ls` to list all running containers + - `docker container ls -a` to list all running as well as stopped containers +- Dockerfile is a special file name, as it is the default file docker looks for when we build an image +- Dockerfile contains the instructions for creating our own image +- example of a Dockerfile + ```Dockerfile + FROM node:14-alpine + WORKDIR /app + COPY . . + RUN npm install + EXPOSE 80 + CMD npm run start + ``` +- **all commands except the last instruction `CMD` are used to build the image, `CMD` is used to run the container** +- so basically `CMD` is used for `docker container run...` +- `EXPOSE` is only for documentation purpose +- `docker image build .` - used to build an image using the Dockerfile, `.` here is the build context + - `-t` flag to specify an image tag +- images have layers i.e. docker caches result after every instruction in the Dockerfile +- this means docker can reuse layers if possible - e.g. two different react applications use the same base image - node layer +- so, to optimize i.e. make building of images faster, in the Dockerfile example shown earlier, we can first install dependencies and then copy the source code, as rebuilding of image will be triggered more frequently by a change in the source code than it will be by a change in the dependencies + ```Dockerfile + FROM node:14-alpine + WORKDIR /app + COPY package.json . + RUN npm install + COPY . . + EXPOSE 80 + CMD npm run start + ``` +- `docker container start container_id` - start a stopped container +- we can reattach our terminal to the container using `docker container attach container_id` +- we can view logs using `docker container logs container_id` + - add `-f` flag for following the logs +- flags for `docker container run` - + - `-it` can be used to enter interactive mode + - `--rm` flag to delete the container when we stop it + - `--name` to specify the name of container + - `-d` to run in detached mode i.e. to not block our current terminal and run the container in foreground + - `-p` flag means publish, i.e. map host port to a container port +- `docker image ls` - lists the downloaded images +- `docker image rm image_id` - remove the image with id image_id +- `docker container stop container_id` - stop the container +- `docker container prune` to delete all stopped containers +- to get more information on images and containers, use `docker container inspect container_id` and `docker image inspect image_id` +- `docker container cp host_folder container_id:folder` to copy folder from the host to the container + - we can also reverse the order of arguments to copy folders and files from the container to the host +- we can share images, by sharing the Dockerfile or by hosting it on an image registry like docker hub +- `docker image push image_name:tag` to push images to the registry +- `docker image pull image_name:tag` to pull images from the registry +- we can also tag images using `docker image tag new_image_name old_image_name` +- a full example of running a container - `docker container run -d -p 3000:80 --name=backend --rm backend` +- `docker login` to login to docker hub +- note: i had to generate and use a personal access token in the docker hub ui and use that instead of the docker hub password in the cli +- `docker image rm -f $(docker image ls -a -q)` - deletes all locally downloaded images + - `-q` helps list only image ids + - `-a` helps list intermediate images as well + - `-f` force removal, e.g. if image is referenced by another image +- we can use a file `.dockerignore` to prevent copying files when using command `COPY` inside the Dockerfile e.g. + ``` + node_modules + Dockerfile + .git + ``` + +## Tags + +- **an image tag has two parts - the name / repository of the image and the tag** +- tag is like a version, so we can generate different versions of our image +- the default tag if not specified is latest +- why tags are important - + - rollback to previous versions in the production environment if newer versions have a bug + - newer versions of other images which are used by our images might have breaking changes in future +- suppose we always push and pull using tag latest. when we run `docker container run...`, it looks for the image locally and if it doesn't find it, it goes online to fetch it. but it will find the image with the tag latest, and docker doesn't understand that someone else has pushed a newer version online + +## Layered Architecture + +- all the docker related data like images, containers, etc. can be seen in /var/lib/docker +- the docker image we build contains of layers, and these layers are shared across various images +- e.g. if two images use the same base image, the layer of the base image is shared +- the image layers are read only +- when we create a container, a new layer is created on top of the existing layers of the image +- thus, all writes that we perform during runtime, log files, etc. get written onto this layer +- the persistence during the container's lifetime happens through this writable layer +- this mechanism is called copy on write, and the changes we made are lost unless we use volumes + +## Volumes + +- containers should be stateless as they can be easily created and destroyed, scaled up and down +- we can have data that we want to persist even if containers are killed +- this data shouldn't be stored inside containers, or we may lose that data +- volumes - mapping a persistent storage to docker containers. the persistent storage can be cloud storage, e.g. s3 of aws or our host directory system +- this way, every time a container tries to persist changes, they go to the persistent storage and don't get lost irrespective of how many times the container is started or stopped +- volumes can be of three types - + - anonymous volumes + - named volumes + - bind mounts +- `docker volume ls` shows all volumes +- anonymous volumes are managed by docker +- the **reference** to anonymous volumes are lost after the container shuts down +- if we use `--rm` flag while running the container, the anonymous volume is deleted as well +- we can create anonymous volume by using `VOLUME ./feedback` inside the Dockerfile +- we can also create anonymous volume by using flag `-v /a/b` during `docker container run` where /a/b is the path inside the container +- named volumes are managed by docker too +- unlike anonymous volumes, we don't lose the reference to named volumes after the container is deleted +- use flag `-v` to create named volumes, e.g. `-v feedback:/app/feedback`, where the name of the volume is feedback and the directory of the container it maps to is `/app/feedback` +- bind mounts are managed by us. it can be used for source code, so that the changes that we make to the code get reflected in the container +- in case of bind mounts, we have access to the folder which gets mapped to the container's folder +- in case of clashes, the more specific paths win e.g. if we are using bind mounts for /app of container and anonymous volumes for /app/node_modules of container, /app/node_modules relies on anonymous volumes +- using nodemon with bind mounts prevents us from rebuilding images repeatedly i.e. our changes in source code are accounted for in the running container +- we can use suffix `:ro` so that it specifies to the container that the volume is read only e.g. `-v $(pwd)/app:ro`, so that only hosts and not containers can edit the source code +- note: `docker volume ls` will not list bind mount volumes, since it doesn't manage them +- `docker volume rm volume_name` to remove volumes +- `docker volume prune` to remove volumes not being used by any containers +- `docker volume inspect volume_name` to get details of the volume + +## Arguments and Environment Variables + +- docker supports build time arguments and runtime environment variables +- runtime environment variables can be provided using `ENV PORT 80` inside the Dockerfile +- we can also provide it dynamically using `-e PORT=80`, which makes the earlier method a default +- for situations like api keys where security is a concern, the method suggested above is better +- we can also use build arguments, i.e. dynamic variables used when building an image +- can be done using `ARG PORT=80` in the Dockerfile +- my understanding - so basically, arg is used by all commands above cmd and env is used by cmd? + +### Example + +```Dockerfile +ARG DEFAULT_PORT=80 +ENV PORT $DEFAULT_PORT +EXPOSE $PORT +``` + +- we are giving the value of the build argument to the environment variable +- if we don't provide a port, the port used by container is `80` +- now, we can change the default port while building an image using `docker image build ... --build-arg DEFAULT_PORT=9999 ...` +- we can also receive a dynamic port using `docker container run ... -e PORT=9545 ...` +- if we don't provide a port dynamically, the port specified for building of images gets used + +## Networks + +- there are three kinds of entities with which containers can communicate - + - internet + - host + - other containers +- containers can by default talk to the internet e.g. a public api +- for containers to talk to the host, we can replace localhost by `host.docker.internal` +- e.g. for containers to talk to mongodb running on our host machine, we can use `mongodb://host.docker.internal:27017/favorites` +- for containers to talk to other containers, we can use `docker container inspect ...` to get the container's ip address (available in the key IPAddress) and then use it. e.g. with a mongodb container running, we run `docker container inspect mongodb` and then use `mongodb://the_ip_address:27017/favorites` +- this is not ideal, as this IP could change after a new container replaces the old one +- we can create a docker network, and all containers placed inside the network can reference each other directly using the container names, e.g. `mongodb://mongodb_container_name:27017/favorites` +- `docker network create network_name` to create a network +- `docker container run ... --network=network_name ...` to create a container inside a specific network +- also, we don't need `-p` for the container to which another container connects, i.e. `-p` is only needed when we want our host port to map to the container port, not when another container wants to communicate with it +- docker networks support different kinds of drivers. the default driver is bridge, which we saw above +- there can be other types of drivers and third party plugins for drivers as well +- we can use driver as "host" so that isolation between the container's network and localhost is removed +- examples of usage - `docker network create --driver bridge` or `docker container run --network host` +- we can clean up unused networks using `docker network prune` +- the bridge type of network uses network namespaces behind the scenes. so, on running `ip addr`, we see docker0, which is basically the virtual switch in network namespaces. each container is encapsulated inside its own network namespace. an e.g. is shown below - + ```sh + docker container run nginx + docker container inspect <> | grep SandboxKey + # the output is /var/run/docker/netns/<> + ``` + +## Docker Compose + +- docker compose helps in preventing having to run docker commands from cli repeatedly +- it has syntax in yml which is easier to read and can be shipped with our code +- services in docker compose are containers, for which we can define environment variables, network, image, etc +- version of docker compose I had to use was 3.8 based on my [docker engine version](https://docs.docker.com/compose/compose-file/) + - note - i think it comes with docker in newer version, i just have to use `docker compose` now +- all container names are one level nested under the services key +- can specify networks, volumes key for each container +- for named volumes, we should also mention them under the volumes key in the root of the file +- all the containers are a part of the default network created by docker-compose +- `docker-compose up` starts all the containers and builds the images as well + - flag `-d` can be used to start in detached mode + - add flag `--build` to force the images to be rebuilt +- `docker-compose down` - deletes all the containers and the default network that docker-compose creates + - flag `-v` also removes the volumes which were created +- use `depends_on` key to ensure the order in which containers start e.g. server `depends_on` mongodb container +- `docker-compose build` to build the images +- `docker-compose run service_name` to run a specific container in the compose file under the services key + +## Issues while Containerizing Frontend Apps + +- docker doesn't work in the web browser for e.g. when we make xhr requests + - so referring the backend application just by container name won't work as it utilizes docker networks + - so, we publish the backend on a host port and simply use localhost:that_port in frontend +- reactJS needs the terminal to be in interactive mode to ensure it continues to run + - it is like adding `-it` flag while using `docker container run...`, or setting `stdin_open: true` and `tty: true` inside of the docker compose + +## CMD and ENTRYPOINT + +- when we specify `docker container run image_name xyz`, xyz replaces what there is in CMD +- however xyz appends what is there in ENTRYPOINT +- we can replace what is there in ENTRYPOINT using `--entrypoint` +- useful tip - since a space separated command needs to be a part of different items in an array, use `sh -c`. i.e. `CMD ["a", "b", "c"]` can become `CMD ["sh", "-c", "a b c"]` + +```Dockerfile +FROM ubuntu +ENTRYPOINT [ "sleep" ] +CMD [ "10" ] +``` + +- `docker image build -t ubuntu-sleeper .` +- run `docker container run ubuntu-sleeper`, sleep is of 10 seconds +- run `docker container run ubuntu-sleeper 20`, sleep is of 20 seconds +- run `docker container run -it --entrypoint=bash ubuntu-sleeper`, run bash in interactive mode + +## Setup Containers + +how do we set up initial project e.g. how to run `npm init` when we don't have node installed locally? below is an example for setup using node + +Dockerfile.setup - + +```Dockerfile +FROM node:14-alpine +WORKDIR /app +``` + +docker-compose-setup.yml - + +```yaml +version: "3.8" +services: + npm: + build: + context: ./ + dockerfile: Dockerfile.setup + stdin_open: true + tty: true + volumes: + - ./:/app + entrypoint: npm +``` + +now, we can use commands to help during development like - + +- `docker-compose -f docker-compose-setup.yml run npm init` +- `docker-compose -f docker-compose-setup.yml run npm i express` + +the `npm` in the command is the service name inside docker compose, and entrypoint was given as npm in docker-compose, otherwise we would have to run `docker-compose -f docker-compose-setup.yml run npm npm init` + +## About Kubernetes + +- kubernetes is the most widely used container scheduler +- modern infrastructure is created using immutable images, and an upgrade is performed by replacing the older images with newer ones using rolling updates +- we specify how many resources to run and kubernetes maintains that number +- it ensures that the resources run within the specified memory and cpu constraints +- kubernetes is cloud-agnostic and can also be run on-prem +- it has features like service discovery, load balancing, secret and configuration management, etc + +## Minikube and Kubectl + +- minikube allows us set up a single node cluster on our local workstation +- minikube is useful for development purpose +- kubectl is the kubernetes command line tool which allows to manage a kubernetes cluster +- add alias to .bashrc - `alias kubectl="minikube kubectl --"` +- configuring autocomplete for kubectl (restart terminal after running the command) - + ```bash + echo 'source <(kubectl completion bash)' >> ~/.bashrc + ``` +- minikube can be deployed as a vm or as a container (i am trying as a container for now) +- configuring minikube - + - `minikube config set driver docker` + - `minikube config set memory 8192` + - `minikube config set cpus 4` +- view config using `minikube config view` or `cat ~/.minikube/config/config.json` +- start minikube - + ```bash + minikibe start + minikube status + ``` +- pointing docker client installed locally to minikube's docker daemon - + ```bash + docker container ls + minikube docker-env + eval $(minikube -p minikube docker-env) + docker container ls + ``` +- to ssh into minikube - `minikube ssh`. now also we can run commands like `docker container ls` etc +- to get all running components, we can use `kubectl get all --all-namespaces` +- to shut down minikube, use `minikube stop`. it preserves the state +- to start minikube again, `minikube start` +- to delete the cluster, `minikube delete` +- can format output e.g. `kubectl version --output=yaml`. output format can be json as well +- `minikube ip` to get the ip address of minikube cluster +- an issue on my laptop - minikube cannot pull docker images at times. temporary fix is to pull manually using `docker image pull` after pointing docker client to minikube's docker daemon + +## Cluster Architecture + +- the cluster has master nodes and worker nodes. note: there can be multiple masters in the cluster +- the master nodes schedule and monitor the containers assigned to it on the worker nodes +- different methods of viewing information related to the different components e.g. etcd + - `ps aux | grep etcd` + - `sudo cat /etc/kubernetes/manifests/etcd.yaml` + - `docker container ls | grep etcd` +- it has 7 major components as described below + +### Etcd + +- a distributed key-value store that allows for fast storage and retrieval +- it runs on the port 2379 +- etcdctl is the etcd control client which helps communicate with etcd +- it is used for storing and retrieving information about all kubernetes resources +- the etcd clusters can either be present on the master nodes or be entirely decoupled from them +- **kubeadm runs etcd as a static pod on the master nodes** +- we specify its ip address and port on the api server +- an example of using etcdctl api version 3 - + ```sh + kubectl exec etcd-minikube --namespace=kube-system -- sh -c \ + "ETCDCTL_API=3 etcdctl get / \ + --prefix --keys-only --limit=100 \ + --cacert /var/lib/minikube/certs/etcd/ca.crt \ + --cert /var/lib/minikube/certs/etcd/server.crt \ + --key /var/lib/minikube/certs/etcd/server.key" + ``` + to get the location of the certs, use `kubectl get pod etcd-minikube --namespace=kube-system --output=yaml` +- peer to peer communication in etcd clusters when there are multiple master nodes happens through 2380 +- etcd is distributed i.e. we can read from any of the instances, while all writes go to the master in the etcd cluster which syncs the data on the other replicas +- in case of inconsistencies, the quorum determines if the update is valid. it is the minimum number of nodes in the etcd cluster which should have processed the update, which is floor(n / 2) + 1. the value of fault tolerance is total instances - quorum. so, it is recommended to have an odd number of etcd instances / master nodes depending on the configuration, since fault tolerance is the same for n and n - 1 nodes where n is even + +### Api Server + +- it runs on the master node +- external clients like kubectl communicate changes to the cluster via the api server +- schedulers, controllers, kubelets, etc. monitor the api server for new resources +- they also send updates to the api server which then updates it on the etcd cluster +- so, api server is the only component that directly interacts with the etcd cluster +- the api server on the multiple master nodes can run concurrently i.e. all api servers on all the master nodes can be active at once. however, in case of controller manager and scheduler, to avoid duplication and inconsistencies, they are in the active state on the master node which is elected as the leader while they are in standby mode on the other master nodes +- in case of multiple masters, clients like kubectl interact with a load balancer, where the load balancer routes requests to the multiple api servers + +### Controllers + +- also called controller manager +- different kinds of controllers run on the master node +- for instance, the master node expects heartbeats from the worker nodes. the node controller monitors them and if the heartbeats do not reach the master nodes for a certain time period, the pods on it are evicted +- similarly, we have replication controller to maintain the number of pods of the same type +- the controller manager package installs all the different controllers. to view the different controllers, use - + ```sh + kubectl get pod kube-controller-manager-minikube \ + --namespace=kube-system --output=yaml | grep controllers + ``` + +### Scheduler + +- runs on the master node +- it assigns pods to a specific node +- it does this based on available resources like cpu and memory and filters out nodes which cannot run the pod +- it then based on a priority function ranks the remaining nodes +- the pod then gets scheduled on one of the remaining nodes + +### Kubelet + +- it **runs on all worker nodes** (and optionally on the master node). see how this is different from the components seen above - etcd, api server, controller manager, scheduler +- unlike the rest, kubelet does not run as a static pod, daemon set etc. it **runs via a binary installed on the vms** - i think this flow deviates since is doesn't use static pods / daemon set +- it registers the nodes with the cluster +- picks up the pods from the api server to run on the node and then runs it +- it then sends updates of the status of the pod to the api server +- so, to view information, use `ps aux | grep kubelet` +- this will show the files locations, so, for e.g., use - `cat /var/lib/kubelet/config.yaml` + +### Kube Proxy + +- it runs on all nodes, since it **runs as a daemon set** +- pods in a node can reach pods on other nodes as well because of this +- the kube proxy **assigns an ip to the service** +- to view the ip range from which services are assigned ip addresses, we can use `kubectl get pod kube-apiserver-minikube --namespace=kube-system --output=yaml | grep service-cluster-ip-range` +- it **configures ip tables**, which maps the ip address of services to endpoints +- an endpoint = the ip address of the pod + port of the pod. this port can belong to any one of the containers, set by target port field in the service definition +- if we have multiple pods sitting behind a service, an algorithm similar to round robbin is used + +### Kube Dns + +- it maps the service name to the service ip address +- so, it configures the dns server +- kubernetes uses coredns for achieving this functionality +- on running `kubectl get deployment coredns --namespace=kube-system --output=yaml`, we can see that a config map is mounted as a volume on it +- we get the contents of it using `kubectl get configmap coredns --namespace=kube-system --output=yaml`. it shows the plugins being used by coredns +- there is also a service associated with kube dns, which we can get using `kubectl get service kube-dns --namespace=kube-system --output=yaml | grep clusterIP`. the pods point to this ip, which can be confirmed by inspecting the pod using `kubectl exec any_pod_name -- cat /etc/resolv.conf` + +## Pods + +- the smallest unit in kubernetes +- represents a single running process +- a pod encapsulates one or more containers, but usually we run only one container in a pod +- sidecar pattern - helper containers can be spun alongside the application container in the same pod +- to create a pod in an imperative way using commands, use `kubectl run db --image=mongo` +- to get all running pods, use `kubectl get pods` + - to get more information, we can use `--output=wide`, `--output=yaml` or `--output=json` +- we can do a dry run and get the yaml, e.g. `kubectl run db --image=mongo --dry-run=client --output=yaml` +- to see the list of events that occurred, use `kubectl describe pod db` +- [yaml file to create a pod declaratively](https://gist.github.com/shameekagarwal/8ca1f31a5d76b00c20a5a8a6da3b183b) +- now, we can run `kubectl apply -f file_name.yml` +- we can specify the file name in commands instead of the resource name - `kubectl describe -f file_name.yml`, `kubectl delete -f file_name.yml`, `kubectl get -f file_name.yml` +- suppose we want to execute a command against a container. one way would be to issue commands using docker, e.g. `docker container exec container_name command`, this is just like spawning off another process in an already running container. however, we have to issue this command on a particular node of the cluster. this may not matter for minikube since everything is on our local but would matter for a production cluster. another way is to run `kubectl exec pod_name -- command`. this would by default execute the command on the first container of the pod. we can also specify the container using `--container` flag +- to view logs, use `kubectl logs pod_name`. like in `exec`, the container can be specified explicitly +- containers of the same pod run on the same node. they can talk via localhost i.e. if a container is running in a pod on port 8080, the other container can make requests to localhost:8080. they also share the same volumes +- if we stop the container using `docker container stop container_id`, the pod will restart the container +- to stop a pod, use `kubectl delete pod db` +- when a pod is deleted + - it first sends `TERM` (terminate) signal to all processes of all containers of the pod + - if it does not stop within the `gracePeriod`, `KILL` signal is sent for a forceful shutdown +- all containers part of the same pod coexist in the same node i.e. they cannot be distributed across the nodes +- all of them can also access the same volume + +### Process of Creation + +![pod creation](/assets/img/docker-and-kubernetes/pod-creation.drawio.png) + +## ReplicaSets + +- it is a type of controller i.e. it tries to maintain a specified number of pods +- this provides high fault tolerance, high availability, self-healing mechanism, etc. +- replica sets are the newer version of replication controllers, since replication controllers are deprecated +- note: when setting image using `kubectl set image...` in replica sets, i had to delete the older pods +- [yaml example](https://gist.github.com/shameekagarwal/ec1a7d3c31814c789eae2d0e1c1ae569) +- look how in yml syntax, `spec.template` is the exact same as that of the contents of a pod +- labels defined for a pod should match the labels defined for its replica set i.e. value of `spec.selector.matchLabels` should match `spec.template.metadata.labels` else kubernetes gives an error +- however, the replicaset can manage pods not defined in the `spec.template` section as well. in this case, the labels of pods should match the selector of the replica set +- `spec.replicas` defines the number of pods to run +- use `kubectl get replicasets` and `kubectl get pods` to verify +- verifying the self-healing feature - if we try to delete a pod using `kubectl delete pod pod_name`, we will see that the replica set will automatically spin up a new pod +- deleting the replica set will delete the pods it spun up as well +- `kubectl delete -f replica-set.yml --cascade=orphan`. this will delete the replica set but not the pods. so, in general, to prevent removal of downstream objects, use the `cascade` flag + +### Process of Creation + +only the first part has been described here, the remaining parts are similar to that of a pod + +![replica set creation](/assets/img/docker-and-kubernetes/replica-set-creation.drawio.png) + +## Services + +- pods are short-lived, so using addresses of pods for inter-pod communication is not reliable +- services can be used to expose pods, replication controllers, replication sets, etc +- the controller used here is called endpoint controller +- service can be of different types + - `NodePort` - target port on every node is exposed to the outside world. if we have multiple worker nodes, to hit a particular set of pods, we would have to use `worker_ip:node_port`. this also indicates that the services span multiple nodes without us having to configure anything + - `ClusterIP` - this is the default. exposes the port only inside and not from outside the cluster + - `LoadBalancer` - useful when deploying to cloud + - `ExternalName` - map a service to an external address like a url +- imperative command - `kubectl expose replicaset rs --name=svc --target-port=28017 --type=NodePort` +- note: [the node port cannot be specified](https://github.com/kubernetes/kubernetes/issues/25478) when using `kubectl expose` +- if we run `kubectl describe service svc`, we see that it has inherited all the labels of the replica set. recall how replica set is associated to the pods using labels, services are associated to the pods in the same way +- when describing a service, it also shows all endpoints aka pods it directs traffic to +- the three ports involved in node port are - + - node port - how to access from outside the cluster. hit `http://minikube_ip:NodePort`. if not specified, a free port is chosen at random for its value + - port - incoming traffic i.e. traffic from other pods or outside the cluster hit this port of the service + - target port - port of the pod to which the service should forward traffic. if not specified, it takes the same value as port. so, in yml, usually only the port is specified +- we can run `kubectl get endpoints` to get a list of all the endpoint objects. we can also get more information about a specific endpoint using `kubectl get endpoints endpoint_name --output=yaml` +- we can run `kubectl exec pod_name env` - here, we will get environment variables like `<>_SERVICE_HOST`, `<>_SERVICE_PORT`. this will have the ip address and port of the different services respectively +- communication - till now, we were using `<>` for communication. it can be expanded to `<>.<>`. if we don't specify the namespace-name, it defaults to the namespace in which the resource initiating the request is +- communication to services can be further expanded to `<>.<>.svc` or `<>.<>.svc.cluster.local`. this bit can be confirmed using `kubectl exec any_pod_name -- cat /etc/resolv.conf` under the search field +- by default, direct communication to pods is not enabled. if we enable it, we can use `<>.<>.pod.cluster.local`. here, the modified-pod-ip is constructed by replacing `.` with `-` i.e. 10.244.2.5 becomes 10-244-2-5. again, because of the search field in /etc/resolv.conf, we can skip cluster.local (but not `pod` since `svc` is the default). my doubt - at this point, i might as well use the pod's ip address directly, i mean pod's ip is directly used using modified ip anyway + +### Process of Creation + +![service creation](/assets/img/docker-and-kubernetes/service-creation.drawio.png) + +## Liveliness Probe + +- used for configuring health checks, done at a container level +- if the health check fails, it applies the restart policy which defaults to always +- the restart policy is specified at the pod level and applies to all containers +- `initialDelaySeconds` - when should the probe start +- `timeoutSeconds` - after waiting for how many seconds should the probe fail +- `periodSeconds` - after how many seconds should the probe be repeated +- `failureThreshold` - how many consecutive health checks are allowed to fail +- code example + ```yaml + name: api + image: user-service + livenessProbe: + httpGet: + path: /actuator/health + port: 8080 + initialDelaySeconds: 20 + timeoutSeconds: 5 + periodSeconds: 5 + failureThreshold: 3 + ``` + +## Readiness Probe + +- it is used to determine whether a pod is ready to serve requests +- it has the same configuration as liveliness probe +- ip addresses of unhealthy pods are removed from ip tables, so that the future requests do not make it to them + +## An Example + +- [a complete example](https://gist.github.com/shameekagarwal/1883a95d8be0a74030b77966d80196a0) of + - a database and exposing it using cluster ip + - backend service which talks to db, exposing it using node port, configuring health checks + +## Deployments + +- helps us achieve zero downtime when we deploy services +- we should not create pods or even replica sets directly +- deployments create replica sets behind the scenes +- when we make an update to for e.g. the image version, the deployment will first create a new replica set with the desired number of pods, and once that replica set has successfully scaled the pods, the deployment would mark the desired replicas of the older replica set as 0. a part of `kubectl describe deployment db` - + ``` + Type Reason Age Message + ---- ------ ---- ------- + Normal ScalingReplicaSet 12m Scaled up replica set db-5cc56bf6fb to 1 + Normal ScalingReplicaSet 4m22s Scaled up replica set db-76774bbdf to 1 + Normal ScalingReplicaSet 92s Scaled down replica set db-5cc56bf6fb to 0 + ``` +- a side note - the random characters that we see are actually the hash value of the pod template +- to create a deployment imperatively, use `kubectl create deployment nginx --image=nginx --replicas=2` + - we can also add flags `--dry-run=client --output=yaml` to generate the yaml +- deployment strategy can be rolling update (default) or recreate +- in recreate, the old pods are stopped and new ones are created in its place. this leads to some downtime. use recreate when the coexistence of two versions of the applications can cause inconsistencies e.g. db migrations +- in rolling deployments, the new replica set is scaled up and the old replica set is scaled down simultaneously gradually. they can be tweaked using `maxSurge` and `maxUnavailable` fields. at any given time, we can have a maximum of desired + `maxSurge` or a minimum of desired - `maxUnavailable` pods running. both can be absolute numbers or % and both default to 25%. since both versions of applications run in parallel, the response can be returned from either of the versions at random during deployment +- e.g. of rolling deployment - by using the following code, the deployment order is 3 old ➝ 3 old, 1 new ➝ 2 old, 1 new ➝ 2 old, 2 new ➝ 1 old, 2 new ➝ 1 old, 3 new ➝ 3 new + ```yaml + replicas: 3 + + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + ``` +- everytime we deploy in kubernetes, a rollout takes place and a revision is created +- we can monitor the status of the update to deployment using `kubectl rollout status -f deployment.yml` +- we can view the history of updates using `kubectl rollout history -f deployment.yml` +- we can also create a rollback using `kubectl rollout undo -f deployment.yml` + - if we want to go back to a much older version and not just the previous one, we can use `kubectl rollout undo -f deployment.yml --to-revision=2` +- side note: rollbacks might not always be possible e.g. if we had database migrations. so, we may need to roll forward in some cases i.e. implement a hot fix and redeploy the new changes +- using labels - + - `kubectl get all --show-labels` - show the resources with their labels + - `kubectl get all --selector=name=db,app=demo` - filter the resources using their labels + - e.g. to count the total number of resources in dev environment, use `kubectl get all --selector=env=dev --no-headers | wc -l` +- we can set image of a deployment using `kubectl set image deployment db db=mongo:3.3`, where the first db is the deployment name and the second db is the container name, since we can have multi container pod +- to add the default change cause to the `kubectl rollout history ...` output, append commands with `--record`, e.g. `kubectl apply -f infra --record`. this flag is deprecated but i cannot find its replacement +- to scale deployments imperatively, use `kubectl scale deployment api --replicas=2` +- both in deployments and in services, any one of the labels on pod need to be present in `spec.selector` + +### Process of Creation + +- a deployment controller will watch for new deployment creation requests +- it will then create replica set definitions on api server +- after this, the process of replica set creation is continued + +## Imperative vs Declarative + +- in declarative, we just tell the desired state which kubernetes tries to achieve +- e.g. `apply` follows the declarative approach +- however, in the imperative approach, we have to give clear instructions +- all commands like `create`, `edit`, `replace`, `expose`, `run` etc. are imperative +- using declarative approach we can track configuration using version control as well for iac +- imperative approach can be used for hot fixes / experimental purpose +- when using `apply`, we can see the last yaml configuration converted to json which we had sent under `metadata.annotations` in `kubectl.kubernetes.io/last-applied-configuration`. this is used by kubernetes to keep track of changes and is only available when we use `apply` +- if for e.g. we use `edit` to edit a resource, and that resource is not allowed to be edited, we just use `wq` to exit out of vim, and then that file gets saved to /tmp. we can then use `kubectl replace --force -f <>` to replace the existing resource with our newly configured one + +## Ingress + +- it is like a layer 7 load balancer built inside the kubernetes cluster +- makes the services inside cluster accessible from outside +- we also want features like ssl termination, route requests based on domain, etc +- my understanding - recall how a service based on labels can only expose a set of pods. instead of multiple node ports / load balancers i.e. one for each set of pods, we have one node port / load balancer which directs traffic to the ingress service. the ingress service can then direct traffic to the different cluster ips in the cluster +- kubernetes provides the ingress resource but not the ingress controller i.e. it provides the api which can be utilized by other third party implementations +- minikube has an addon that can be enabled + ```bash + minikube addons enable ingress + minikube addons list | grep ingress + ``` +- to verify, `kubectl get all --all-namespaces` should show the `ingress-nginx-controller-*` pod running +- ingress is spun up using a deployment and a node port to expose it outside the cluster +- it also deploys configmaps to manage configuration and cluster roles to monitor kubernetes resources +- all resources are deployed in the ingress-nginx namespace +- we can also hit the endpoint http://minikube_ip/healthz to verify the working of ingress +- we can also provide a domain so that the requests are routed based on domain names +- we can also provide a catch-all entry +- [in this example](https://gist.github.com/shameekagarwal/97db31a89ba766cf2d0634c561a1b3e9), if requests come from custom-api.com, and start with request path `/api` they are routed to the api service, but all other requests are routed to the devops service +- note: to simulate that requests are coming from a specific domain on our local, we can use `curl -H "Host: custom-api.com" http://192.168.49.2/api/` +- the ingress resource provided by kubernetes has limited functionality, so to configure the ingress controller provided by third party, we use annotations +- e.g. we want traffic from ingress-service/calendar to our calendar-cluster-ip:port. so, the calendar prefix should be removed. we can do this by using the annotation below - + ```yaml + annotations: + nginx.ingress.kubernetes.io/rewrite-target: / + ``` +- so, `/calendar` in `rules[x].http.paths.path` gets replaced by the value in `rewrite-target` which is `/` here +- use `kubectl get ingress` to view the ingress resources +- my understanding - view the port of the node port service `ingress-nginx-controller` inside the `nginx-ingress` namespace. this is the port we hit when making requests to worker_node_ip + +## Volumes + +- references to files and directories made available to containers +- the file system can be anywhere, e.g. outside the host as well i.e. this could be used for aws ebs as well +- e.g. it helps us preserve data across pod restarts +- there can be several types of volumes like host path, git repo (like host path but the path is a git repository) and even cloud specific like aws elastic block store +- empty dir volume type - if a container crashes, a new container is spun up in the same pod. however, if we don't specify any volume, the container crash results in a loss of data. this can be prevented using empty dir volume type, which can survive container restarts but not pod restarts. it is usually chosen as the default by third party manifests and is expected to be replaced by a better solution like nfs +- an issue with using host volumes - it needs to be available on each node so that pods on different nodes can have access to it, and this of course is not an issue with minikube +- so, in cloud, we should ideally mount an nfs on each node, else we would have to copy this file on all nodes. for e.g., we should use aws efs. the syntax should be similar + +### Example 1 + +- for docker client to be able to communicate to the correct docker daemon, use the file /var/run/docker.sock +- e.g. we want to run docker commands on the host from pods. so, the container running inside the pod should have docker client installed to issue docker commands, and it should point to the docker daemon of the host +- so, we can use `hostPath` volume type +- [full yaml here](https://gist.github.com/shameekagarwal/f1686cffac86159b5259142f3044f731) +- now, we run the pod using `kubectl apply -f docker.yml` +- then, we can issue commands like `kubectl exec docker -- docker image ls` to list the images on minikube + +### Example 2 + +- recall how for bind volumes in docker, we needed to specify a path in the host. the host now is minikube, so the host path needs to be that of minikube. before running `minikube start`, if i copy files to the path in ~/.minikube/files directory on my workstation, i can see those files in the root on minikube host. we can verify this using `minikube ssh` and then by running `ls /` +- so, suppose we want to specify a configuration file for prometheus +- we can copy this configuration file to minikube and then use host path volumes to reference it +- in this example, a better solution would have been to create a custom image and use `COPY` in the docker file + +```yaml +# ... +spec: + containers: + - # ... + volumeMounts: + - mountPath: /etc/prometheus/prometheus.yml + name: prom-conf + + volumes: + - name: prom-conf + hostPath: + path: /prometheus-conf.yml + type: File +``` + +## Config Maps + +- we can have different sources of configuration like environment variables, files, env files, literals, etc + +### Default Config Map + +- it is used to make calls to the kubernetes api from containers +- `kubectl get configmaps` - kube-root-ca.crt is the config map created by default +- `kubectl describe pods pod_name` will give the mount location of this config map. note that this config map may not be mounted to the pods in kube-system though +- `kubectl exec pod_name -- ls /var/run/secrets/kubernetes.io/serviceaccount` shows that there are three files - namespace, ca.crt and token +- on reading online, i see that this can also be a secret instead of a configmap + +### Mount Volumes + +- config maps can mount the configuration as volumes to running containers +- imperative command - `kubectl create configmap prometheus-config --from-file=prometheus-conf.yml` +- `kubectl describe configmap prometheus-config` +- using in the yml file - + ```yaml + spec: + containers: + - # ... + volumeMounts: + - mountPath: /etc/prometheus + name: prometheus-config + # ... + volumes: + - name: prometheus-config + configMap: + name: prometheus-config + ``` + verify using `kubectl exec prometheus -- cat /etc/prometheus/prometheus-conf.yml` +- instead of providing a file, we can use literals, e.g. `kubectl create configmap --from-literal=foo=bar` +- in this case, if we use volume mounts, a file called foo would be created with its contents as bar + +### Environment Variables + +- e.g. create a file called .env + ``` + client-id=qwerty + client-secret=12345 + ``` +- `kubectl create configmap api-credentials --from-env-file=.env` +- my understanding - the difference between `--from-file` vs `--from-env-file` is in from file, kubernetes does not care about the file's content, while in from env file, it knows how to treat as different key value pairs, so that it can inject them all at once / individually as discussed below +- usage - + ```yaml + containers: + #... + envFrom: + - configMapRef: + name: api-credentials + ``` +- verify using `kubectl exec alpine -- env` +- we can also inject the variables of the config map individually - + ```yaml + containers: + #... + env: + name: CLIENT_ID + valueFrom: + configMapKeyRef: + name: api-credentials + key: client-id + ``` + +## Secrets + +- secrets are similar to config maps +- secrets can be of three types - + - docker-registry - for pulling images from private registry + - tls - for storing certificates + - generic - works like config maps, so can have sources like `--from-env-file`, `--from-file`, `--from-literal` +- creating a secret imperatively - + ```sh + kubectl create secret generic jenkins-credential \ + --from-literal=username=johndoe \ + --from-literal=password=incognito + ``` +- to retrieve the original value - + ```sh + kubectl get secret jenkins-credential --output=json + kubectl get secret jenkins-credential --output=jsonpath="{.data.password}" | base64 --decode + ``` +- to use the secrets, we put them into files /etc/secret/jenkins-user and /etc/secret/jenkins-pass - + ```yaml + spec: + containers: + - # ... + volumeMounts: + - mountPath: /etc/secrets + name: jenkins-credentials + + volumes: + - name: jenkins-credentials + secret: + secretName: jenkins-credential + defaultMode: 0444 + items: + - key: username + path: jenkins-user + - key: password + path: jenkins-pass + ``` +- we made it read only for all users using 0444 as the mode +- verify using `kubectl exec pod_name -- cat /etc/secrets/jenkins-pass` +- if creating secrets declaratively, the values should be base64 encoded first + ```yaml + # ... + data: + username: am9obmRvZQ== + ``` + using sh base64 utility - + ```sh + # to encode + echo -n johndoe | base64 + + # to decode + echo -n am9obmRvZQ== | base64 --decode + ``` +- the only difference between config maps and secrets is that secrets are stored in tmpfs (temporary file storage) thus leaving no trace on the nodes +- secrets should be combined with rbac for limited access +- **cons of using kubernetes secrets**: secrets are stored in plain text in etcd, so anyone with access to etcd can read the secrets. so, we should use solutions like hashicorp vault, integrating it with kubernetes is smooth + +### Docker Registry + +- by default, we use public docker registry +- sometimes we might need private registry +- we use `docker login` when using vanilla docker +- when using kubernetes, we can create the secret of type `docker-registry` + ```sh + kubectl create secret docker-registry registry-credential \ + --docker-server=...\ + --docker-username=...\ + --docker-password=...\ + --docker-email=... + ``` +- we can then specify the name of the secret in pod + ```yaml + spec: + imagePullSecrets: + - name: registry-credential + ``` + +## Namespaces + +- we can spin up multiple clusters to isolate the different environments. this can help prevent accidental changes to the production cluster +- however this has operational and resource overhead +- namespaces help us create different segments on a cluster +- namespaces are like virtual clusters +- we can scope resource limits and permissions to namespaces +- we use the "default namespace" by default +- we can run `kubectl get namespaces` to view all the available namespaces +- kube-public - the resources in this namespace are accessible to all (including unauthenticated) users +- kube-system - `kubectl get all --namespace=kube-system` shows the resources managed by kubernetes itself +- to create a namespace, use `kubectl create namespace staging` +- if we set the namespace in context, we do not have to repeatedly suffix commands by `--namespace=staging`. e.g. we can use `kubectl config set-context $(kubectl config current-context) --namespace=staging` +- when we delete a namespace, the cascading effect deletes all the resources within it as well. the command is `kubectl delete namespace staging` +- in the resource files, we can also specify the `namespace` key under `metadata` + +## RBAC + +- it allows us to control access to resources +- each request goes through three stages - authentication, authorization, and then through admission control +- authentication is done using static password files, static token files, certificates or identity services like ldap +- we can combine rbac with namespaces as well + +## Static Files + +- we create a csv file with 4 columns - password, username, user id and optionally a group +- when starting the api server, we pass the file using a flag `--basic-auth-file=user-details.csv` +- then, if sending requests using curl, we can pass credentials using `-u username:password` +- we can also have tokens instead of passwords +- the flag we pass to api server in this case is `--token-auth-file` +- we can pass the token via curl using `--header "Authorization: Bearer "` +- this method is deprecated / unavailable in newer versions + +## Certificates + +- **we need to be able to generate certificates for creating users** +- we need two files - + - the certificate which is a signed public key (files suffixed with .crt) + - a private key (files suffixed with .key) +- certificates are needed by both servers and clients. there can be multiple combinations of server and client as well. the certificates required are listed below - + - 7 client certificates + - 3 - scheduler, controller manager, kube proxy (to api server) + - api server (to kubelet) + - kubelet (to api server) + - api server (to etcd) + - user using kubectl (to api server) + - 3 server certificates - etcd, kubelet, api server + - the ca's certificate +- etcd cluster can have multiple nodes running on different servers for high availability +- so, we need to generate peer certificates so that the communication between the nodes is encrypted as well +- we can specify a config file while creating certificates using `--config` +- config can be needed for e.g. to provide alternative names +- [docs](https://kubernetes.io/docs/setup/best-practices/certificates/) for the certificates required by kubernetes components and their respective cas +- verify if `openssl version` works to be able to generate certificates +- generating keys and certificates - + ```sh + openssl genrsa -out johndoe.key 2048 + + openssl req -new \ + -key johndoe.key \ + -out johndoe.csr \ + -subj "/CN=johndoe/O=developers" + + openssl x509 -req \ + -in johndoe.csr \ + -CA ~/.minikube/ca.crt \ + -CAkey ~/.minikube/ca.key \ + -CAcreateserial \ + -out johndoe.crt \ + -days 365 + + # view the certificate details + openssl x509 -noout -text -in johndoe.crt + ``` +- first a private key (.key) is generated +- then a certificate signing request (.csr) is generated. here `CN` or common name is analogous to the username and `O` or organization to the group +- then, using the csr and the ca certificate, the signed public key or the signed certificate (.crt) is generated +- instead of doing the steps after generating the csr manually, we can utilize the kubernetes api +- basically a resource type of `CertificateSigningRequest` is created, with the contents of the csr mentioned **in a base64 encoded format** in the yaml file +- the admin can then run `kubectl get certificatesigningrequests` to view pending requests +- requests can be approved via `kubectl certificate approve ` +- similarly, requests can be denied via `kubectl certificate deny ` +- to view the generated signed certificate, we can use `kubectl get certificatesigningrequest --output=yaml`. it is again in the base64 encoded format, so we decode and store it in a file + +## Config + +- we can specify flags like `--key`, `--cert` and `--cacert` when making requests via curl to api server +- we can also specify flags in kubectl everytime, e.g. `kubectl get pods --client-key=... --client-certificate=... --certificate-authority=...` +- by default for all our requests using kubectl, the configuration is specified in ~/.kube/config. it also is like a kubernetes resource with `kind: Config`. so, instead of defaulting to ~/.kube/config in every command, we can specify the file using the `--kubeconfig` flag +- it has three parts - clusters, users and contexts +- clusters refer to the different kubernetes clusters that we would like to access +- the cluster requires the path to the ca server certificate and the api server address +- to get the server address, use `kubectl config view --output=jsonpath="{.clusters[0].cluster.server}"` +- the user requires the path to private key and signed certificate +- we can also provide the base64 encoded data directly instead of the path for the user / cluster +- contexts pair the clusters to users. so, they have the cluster, user and even the namespace to use by default +- the one used by default by kubectl is defined via `current-context` +- create a new cluster - + ```sh + cp ~/.minikube/ca.crt . + + kubectl config set-cluster johndoe \ + --certificate-authority ca.crt \ + --server https://192.168.49.2:8443 # cluster server address + + kubectl config get-clusters # verify that the cluster is created + ``` +- create a new user - + ```sh + kubectl config set-credentials johndoe \ + --client-certificate johndoe.crt \ + --client-key johndoe.key + ``` +- create and set the context - + ```sh + kubectl config set-context johndoe \ + --user johndoe \ + --cluster johndoe # create / edit the context + + kubectl config use-context johndoe # change the context + + kubectl config get-contexts # verify that the context is set + ``` +- we can view the entire config using `kubectl config view` or `cat ~/.kube/config` +- note: the context section can also take the namespace as an argument + +## Authorization Modes + +- node - e.g. used by worker nodes, for kubelet to interact with api server +- rbac - attaching policies to role +- abac - attaching policies to users / groups directly +- webhooks - a third party agent like open policy agent +- to view authorization modes configured on the api server, we can use - `kubectl describe pod kube-apiserver-minikube --namespace=kube-system | grep authorization-mode` + +## Roles and Bindings + +- rules, comprise of - + - verbs, e.g. get, list, create + - resources, e.g. pods + - resource names + - api groups of the resources +- roles - they are a collection of rules. a role is applied to a namespace +- cluster role - same as roles but scoped to clusters +- resources like pods are namespaced while resources like nodes are cluster scoped. to get an exhaustive list, we can use `kubectl api-resources --namespaced=true` or set the flag to false +- subjects - can be user, service accounts (used by pods to interact with kubernetes api) or groups, which are a collection of users and service accounts +- we also have role bindings and cluster role bindings +- `kubectl config get-users` - by default we have only one user minikube +- a few commands we can use include - `kubectl get roles`, `kubectl get clusterroles`, `kubectl get rolebindings`, `kubectl get clusterrolebindings` +- we can also use `kubectl describe clusterrole view` +- we already have some cluster roles and cluster role bindings created by default +- ones prefixed with `system:` should be generally avoided, so we can run `kubectl get clusterroles | grep -v system`. we get four roles, each of them has been described below +- view - can perform get, list and watch operations (verbs) on almost everything +- edit - everything that admin can do except modify roles and role bindings +- admin - everything that cluster-admin can do except modification to namespaces and resource quotas +- cluster-admin - can perform all operations. e.g. the default user minikube has this role. this can be verified by running `kubectl auth can-i "*" "*"` +- to verify if an operation can be performed, we can use for instance `kubectl auth can-i get pods` +- we can impersonate as someone else using `kubectl auth can-i get pods --as=johndoe` +- creating a role binding - + ```sh + kubectl create rolebinding johndoe \ + --clusterrole=view \ + --user=johndoe \ + --namespace=default + ``` +- verify using `kubectl describe rolebinding johndoe`. note: sometimes in kubectl outputs, the namespace field is empty when it is referring to the default namespace +- my understanding - role bindings can reference cluster roles, it just means that the permissions would be granted on the specified namespace only. this allows for role reuse. the view role allows to view in any namespace, and by creating a role binding we can limit the user's usage to a namespace +- delete a role binding using `kubectl delete rolebinding johndoe` +- using role bindings, we can attach one role to multiple subjects +- declaratively creating a cluster role binding using yaml - + ```yaml + apiVersion: rbac.authorization.k8s.io/v1 + + kind: ClusterRoleBinding + + metadata: + name: johndoe-view + + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: view + + subjects: + - apiGroup: rbac.authorization.k8s.io + kind: User + name: johndoe + ``` +- note how role bindings have a single role but can have multiple subjects +- verify using `kubectl auth can-i get pods --as=johndoe --all-namespaces` +- describing the admin cluster role created by default - `kubectl describe clusterrole admin` +- e.g. yml to create a custom role - + ```yaml + apiVersion: rbac.authorization.k8s.io/v1 + + kind: ClusterRole + + metadata: + name: release-manager + + rules: + - resources: ["pods", "pods/attach", "pods/exec", "pods/log", "pods/status"] + verbs: ["*"] + apiGroups: [""] + - resources: ["deployments", "replicasets"] + verbs: ["create", "get", "list", "update", "watch"] + apiGroups: ["", "apps", "extensions"] + ``` +- note: to grant permissions for different operations on pods, specifying the resources as `pods` is not enough, as there can be other sub resources like `pods/logs` etc +- instead of users, we can also use groups in role bindings and cluster role bindings, by changing the kind to groups. the group a user belongs to was specified while generating the certificate +- my understanding - when relying on groups for role bindings, using the correct context is important when running `kubectl auth can-i...` command, since the certificates associated with the context are used to validate the request. by just using `--as`, we specify the user, but for e.g. the group comes from the value of `O` in the subject when generating signed certificates. optionally, we can specify the flags like `--client-certificate`, `--client-key` etc + +## Service Accounts + +- it is used by applications to interact with the kubernetes cluster +- if we run `kubectl get serviceaccounts`, we see the default service account is already present +- we can create a service account using `kubectl create serviceaccount app` +- recall the [default config map](#default-config-map) +- creating a service account creates a secret, which has a token behind the scenes +- so, we can use these tokens to make requests, by adding the header - `Authorization: Bearer ` +- the method above is useful when the functionality is outside the kubernetes cluster +- however, if the application is a part of our kubernetes cluster, we can simply mount the service account. i.e. use the `serviceAccountName` field in pods +- we can also manually set the `automountServiceAccountToken` to false in order to disable the automatic mounting of the default service account +- in newer versions of kubernetes, some changes have been made - service accounts now no longer automatically have a token associated with them. instead, the token request api is used to generate a token which then gets mounted on the pods +- we can generate a token for a service account using `kubectl create token <>`, and provide configuration parameters like expiration time + +## NodeName + +- the scheduler schedules a pod on any node +- if we run `kubectl get pod pod_name --output=yaml`, we can see the node it was scheduled on under `nodeName` +- behind the scenes, a binding object is created which binds the pod to a node +- we can manually specify the node a pod should be scheduled on using the `nodeName` property +- we can use this if we didn't have a scheduler, and this would schedule the pod on the specified node + +## Taint and Toleration + +- taint is set on nodes which prevent any random pod from being scheduled on it +- toleration is set on pods which allows them to be scheduled on a node with taint +- by default, the pods have no toleration +- use case - a worker node has resources to enable running of a certain type of pod +- it means that only pods with toleration **can be** scheduled on the node with that taint +- however, the pods with this toleration can be scheduled on other nodes as well +- this feature is used by kubernetes as well to help ensure that normal pods are not scheduled on the master and only the management pods scheduled by kubernetes itself are +- to taint nodes, use `kubectl taint node node_name key=value:taint-effect` +- similarly, to remove the taint, use `kubectl taint node node_name key=value:taint-effect-`, i.e. suffix the prior command with a `-` symbol +- taint effects can be - + - `NoSchedule` - do not schedule any new pods without the right toleration + - `PreferNoSchedule` - prefer not scheduling + - `NoExecute` - like `NoSchedule` but also evicts the existing pods on the node without the correct toleration +- to apply toleration on pods, use - + ```yaml + spec: + tolerations: + - key: key + operator: Equal + value: value + effect: NoSchedule + ``` + +## Node Selectors and Node Affinity + +- we add labels to nodes and then add selectors for them to pod definitions +- this way, the pods with the node affinity can only be run only on specific nodes +- however, pods without the node affinity can still be spun up on the nodes with labels +- to label a node, we use - `kubectl label node node_name key=value` +- we can use `kubectl get nodes --show-labels` to verify +- to apply selectors for labels on nodes, use - + ```yaml + spec: + nodeSelector: + size: large + ``` +- but, using node selectors we cannot specify complex conditions +- so, we use node affinity + ```yaml + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: size + operator: In + values: + - large + - medium + ``` +- what if the node labels are changed after the pod was already scheduled? what if there are no nodes found with the conditions matching the node affinity value? for these, the value can be `requiredDuringSchedulingIgnoredDuringExecution` or `preferredDuringSchedulingIgnoredDuringExecution` +- my understanding - `requiredDuringSchedulingRequiredDuringExecution` is not available by default +- some operators to use - `Equal`, `In`, `Exists` +- so, overall, to ensure pods of a particular type and only this type end up on a particular node, we need to use node selectors / node affinity and taints and tolerations in conjunction + +## Resource Management + +- we can give an indication and set limits for the resources that can be used by kubernetes components +- specified at the container level +- this helps kubernetes in scheduling +- to enable metrics server, use - `minikube addons enable metrics-server` +- can be written as for e.g. `0.5` or `500m` (500 milli cpu). 1 milli cpu is equivalent to 1 hyperthread / 1 vcpu +- memory can be written as `K` or `Ki` for kilobyte, `M` or `Mi` for megabyte and so on. we can only specify the numerical value as well, its value is in bytes e.g. `256Mi` or `268435456` +- syntax - + ```yaml + containers: + #... + resources: + limits: + memory: 100Mi + cpu: 200m + requests: + memory: 50Mi + cpu: 100m + ``` +- limits - amount of resources that containers should not cross +- if the container crosses the memory limit, it will be terminated / restarted. the pod has status `OOMKilled` (out of memory killed). the pod remains the same, the container changes +- containers are not allowed to use more than the cpu limit for an extended period, so there are no restarts / termination of the containers for crossing the cpu limits as cpu usage gets throttled automatically +- requests - amount of resources that containers are expected to use +- only when the node runs out of memory, the pod that the container exceeding the requests is a part of is evicted from the node, and it gets rescheduled +- if a container's memory request exceeds the available memory on any node (technically sum of the memory requests of all the containers of a pod), the pod stays in `Pending` state indefinitely +- if the memory usage exceeds only the requested amount (and not the limit), the pod can be evicted if another pod enters with a higher qos and needs that memory +- so, memory limit cannot be exceeded while memory request can be exceeded if the node has enough memory +- `kubectl describe nodes` gives details of the available and in use resources +- `kubectl top pods` gives cpu and memory usage details because of the metrics-server addon. to get information related to the containers in the pod as well, we can use `kubectl top pods --containers` +- similarly, we can use `kubectl top nodes` +- prometheus is a better solution than metrics-server for real world use cases +- qos - quality of service determines the priority - guaranteed > burstable > best effort +- guaranteed - resource limit = resource request. note: remember that if only limits are defined, request = limit +- burstable - at least one container has limit / request defined, unequal limits and requests, etc +- best effort - no resources are defined at all +- we can view the qos assigned by kubernetes using `kubectl describe pod pod_name | grep QoS` +- additional concept - priority classes are useful for e.g. when two pods have the same `qosClass`. we can run `k get priorityClasses` and then assign one of the values using `priorityClassName` under `spec` of the pod + +### Limit Ranges + +- limit ranges help us specify the following at a namespace level ([a yaml example](https://gist.github.com/shameekagarwal/75ae269c7c98c48c57ec215c9dbba20e)) - +- `default` - default resources limit +- `defaultRequest` - the default resources request +- `max` and `min` the maximum and minimum permitted values for the requests and limits +- `maxLimitRequestRatio` - the maximum limit to request ratio (limit should ideally be higher than request?) + +### Resource Quotas + +- limits the resources that can be consumed by a namespace. so, if we have multiple namespaces to support environments like dev and prod in our clusters, we can distribute resources equally so that there is no starvation for any of the environments. [a yaml example](https://gist.github.com/shameekagarwal/8343d4bb2e0029ee00f4d57f8f4b9306) +- using resource quotas, we can limit compute (e.g. cpu and memory requests and limits), storage (e.g. persistent volume claims) and object count (e.g. number of pods, number of node ports, etc.) + +## Daemon Sets + +- ensures one pod runs on each node +- e.g. logging and monitoring pods which need to be run on every node can be created using daemon sets +- even kube-proxy is run this way. to verify, use - `kubectl get daemonsets --all-namespaces` +- it used [node name](#nodename) but in newer versions [node affinity](#node-selectors-and-node-affinity) underneath + +## Init Containers + +- defined inside a pod +- before the long-running containers start, we might want to install binaries, etc +- init containers are run to completion one at a time sequentially before the normal containers start running +- their syntax in yaml is the same as normal containers + +## Static Pods + +- a pod created by kubelet itself on the node without involving the api server / etcd is called a static pod +- the kubelet continuously monitors a directory for changes +- so, when we can create a file in it, it gets picked up by the kubelet +- if we edit the file / remove the file, the kubelet automatically changes / terminates the pod accordingly +- this does not work for deployments etc. since they require controllers +- if the node is a part of a cluster, it will notify the api server about the static pod. so, `kubectl get pods` will show the pod, since the etcd cluster etc. know about these pods. however, unlike a normal pod, the only way to modify this pod is to modify the file +- use case - since static pods do not depend on control plane components like controllers, scheduler, etc., they are used to deploy the control plane components themselves +- unless configured otherwise, the directory is `/etc/kubernetes/manifests/` +- we can verify this in minikube after running `minikube ssh` by running `sudo ls /etc/kubernetes/manifests` that it has files for etcd, scheduler, api server and controller manager +- static pods will be suffixed by `-nodename` - `kubectl get pods --all-namespaces | grep minikube` +- if we run `kubectl get pod pod_name --output=yaml`, we can confirm that the owner is a node by going to `ownerReferences.kind` which should have the value `Node` +- to get the static pod path, use - `cat /var/lib/kubelet/config.yaml | grep staticPodPath` + +## Persistent Volumes + +- persistence of state should be decoupled from pods since they can be added / removed easily +- nfs is the way to go for disk storage in cloud. here, aws ebs has been shown +- note: ebs volumes should only be spun up in azs where worker nodes exist, since ebs is scoped to an az +- the `spec.capacity.storage` in the persistent volume defn. should be <= the capacity of ebs +- access modes can be `ReadWriteOnce`, `ReadOnlyMany`, `ReadWriteMany` +- we can run `kubectl get storageclasses` to get the available storage classes +- e.g. if we were using kops with aws, it would automatically add the storage class of gp2 for us +- default storage class admission controller observe requests for persistent volume claims and when a claim does not specify the storage class, it gets assigned the default storage class. when we run `kubectl get storageclasses`, we see that gp2 is marked as default +- [yaml example](https://gist.github.com/shameekagarwal/03e5e9dd6c43439d654792bb8822806d) of persistent volume +- persistent volumes are used through persistent volume claims. the idea is that admins create a set of persistent volumes, and developers use them via persistent volume claims +- there is a one to one mapping i.e. one persistent volume can only be used by one persistent volume claim +- `spec.storageClassName` and `spec.accessModes` should have the same value as that of persistent volume while the value of `spec.resources.requests.storage` should be <= the value of `spec.capacity.storage` so that the persistent volume claim can get a segment of the persistent volume +- because of this, if the persistent volume has more storage than what the persistent volume claim asks for, the claim gets the extra storage as well +- if no matching persistent volume is found, the persistent volume claim remains unbound indefinitely +- [yaml example](https://gist.github.com/shameekagarwal/a2afa15e76ee80c75a2dc19bfd234a54) of persistent volume claim +- usage - + ```yaml + spec: + containers: + - # ... + volumeMounts: + - name: jenkins-home + mountPath: /var/jenkins_home + + volumes: + - name: jenkins-home + persistentVolumeClaim: + claimName: jenkins-storage + ``` +- the status of a persistent volume can be - + - `Available` when no persistent volume claim is bound to it + - `Bound` when a persistent volume claim is bound to it + - `Released` when the persistent volume claim is deleted +- the default reclaim policy of a persistent volume is `Retain`. first, the pod / deployment is deleted, and then the persistent volume claim is deleted. now, the persistent volume has status of released. but it is not available to be bound because it already has existing data from previous pods which need to be deleted first +- so, we delete the persistent volume manually, try to clean up / delete the aws ebs manually and then can create new persistent volumes for the persistent volume claims +- till now, we used the manual method of provisioning volumes, i.e. static persistent volumes +- the dynamic method requires lesser intervention +- however, in case of a conflict, kubernetes will choose the static one +- the persistent volume is created automatically in case of dynamic persistent volumes +- when we delete the deployment and then the persistent volume claim now, the persistent volume as well as the actual nfs ebs volume is deleted automatically. this is because when using dynamic persistent volumes, the reclaim policy of the persistent volume is `Delete` +- [yaml example](https://gist.github.com/shameekagarwal/b5013b4645d62d287aeb2868ae37e5c3) for persistent volume claim for dynamic persistent volume +- the storage classes have a field called volume binding mode. this can be set to `WaitForFirstConsumer` i.e. persistent volume will not be bound to the persistent volume claim till there is a pod for the persistent volume claim. the other value that the binding mode can take is `Immediate` + +## Commands and Arguments + +- difference between command and entrypoint in docker is described [here](#cmd-and-entrypoint) +- for e.g. in the pod definition - + - `spec.containers[*].command` is used for replacing `ENTRYPOINT` of docker file + - `spec.containers[*].args` is used for replacing `CMD` of docker file + +## Security Context + +- when we run a container, we can specify the id of the user used to run the container, capabilities, etc +- we can specify this at the pod level so that all the containers inherit it or at the container level as well +- note: capabilities can only be defined at the container level +- syntax - + ```yaml + securityContext: + runAsUser: 1000 + capabilities: + add: ["MAC_ADMIN"] + ``` +- this is more of a docker functionality which can be specified via kubernetes. basically, since containers run using namespaces, and we do not want root users inside namespaces to perform any critical operations on the host itself. so, docker adds only some capabilities, which we extend using the add capabilities mechanism +- to verify, we can use `kubectl exec -- whoami`. it should display the username or the user id + +## Patching Nodes + +- if we remove a node suddenly, the pods scheduled on it are lost +- if it was a part of a replica set, it would be rescheduled, but not if it was a normal pod +- to stop any further scheduling on the current node, run `kubectl cordon node_name` +- to stop any further scheduling and also evict existing pods, use `kubectl drain node_name` +- if the node included a pod not spun as a part of a controller, we have to add `--force`. this is because that pod would be lost forever +- so, i think drain already does what cordon does +- pods part of replica sets etc. will be rescheduled on other nodes, because that is the job of controllers +- after running the `drain`, we can start the upgrade +- to enable scheduling pods on the node again, run `kubectl uncordon node_name` +- my understanding - suppose a node goes down. so do the pods running on it. the time a controller waits to reconsider rescheduling the pod on another node is defined via `podEvictionTimeout`. this is why draining nodes is important, we don't rely on the timeout, and instead, rescheduling of pods happens gracefully +- to verify, use `kubectl describe node <> | grep Unschedulable` + +## Network Policy + +- ingress - incoming traffic, egress - outgoing traffic +- the response is not considered when classifying traffic as ingress and egress (like security groups in aws) +- kubernetes has an all allow rule by default +- we use labels to link a pod to a network policy +- whether network policies are supported also depends on the networking solution our cluster depends on +- if we don't specify the `podSelector`, traffic from all pods are allowed, same for `namespaceSelector` +- for traffic from outside the cluster, we can also use the `ipBlock` section +- [a yaml example](https://gist.github.com/shameekagarwal/4113cd73c42acab5ddfb3a882eee0391) for a database +- notice how there are multiple rules. so, it works like `ipBlock` or (`namespaceSelector` and `podSelector`) +- if you want to apply it to **all pods**, use `podSelector: {}` +- my understanding - if we want to restrict traffic between namespaces, e.g. ns-1 can only make requests to ns-2, we can use network policies. so, i created one with egress rule using key `kubernetes.io/metadata.name` under `namespaceSelector.matchLabels`. however, when i tried making requests to the cluster ip service in ns-2 from ns-1, the request was failing. i guess this was happening because kube dns is needed for the dns name resolution. so, i added [this](https://stackoverflow.com/a/71127697/11885333) policy as well to get it to work + +## Interface + +- for implementations to work with kubernetes, they should be compatible with the interface +- this allows for kubernetes to be extended with multiple implementations seamlessly +- e.g. cri for container runtime interface, cni for network, csi for storage, etc +- e.g. csi lays a set of rpc calls that the cri will make. the csi implementations should implement these rpcs + +## Json Path + +- using jsonpath, we get a subset of json data +- jsonpath always returns the results in the form of an array +- the root element can be represented as `$` +- we can use `[]` for indexing arrays +- we can have conditions using `?()`, e.g. to get elements greater than 40 in an array, use `$[?(@ > 40)]` +- we can use `in` and `nin` to represent in and not in, e.g. `$[?(@ nin [1, 2])]` +- use `*` to retrieve all elements in an object (`$.*`) or in an array (`$[*]`) +- a convoluted e.g. - we want to extract the laureate whose first and last name we know - + ```json + { + "prizes": [ + { + "category": "physics", + "laureates": [ + { "firstname": "Arthur", "surname": "Ashkin" } + ] + }, + { + "category": "chemistry", + "laureates": [ + { "firstname": "Frances H.", "surname": "Arnold" }, + { "firstname": "George P.", "surname": "Smith" } + ] + } + ] + } + ``` + `$.prizes[*].laureates[?(@.firstname == 'Malala' && @.surname == 'Yousafzai')]` +- to retrieve multiple elements in a list, we can use `$[0,3]` +- we can also use the syntax `$[start:end:step]` e.g. `$[1:5:2]` +- we can use negative indices to retrieve the last elements, e.g. `$[-3:]` for the last three elements +- element present at index end is not included +- step defaults to 1, start and end default to 0 +- while `$[positive]` works, `$[negative]` fails in some cases, so specify an end when using negative indices + +### Usage in Kubectl + +- we mention the json path using `--output=jsonpath="{.items}"` i.e. enclose within `{}` and remove `$` +- we can get merge multiple queries - `jsonpath="{.name}{.cpu}"` +- we can print the results in a tabular format. e.g. to get the node name and its cpu usage in a table, use - `kubectl get nodes --output=custom-columns="NODE:.metadata.name,CPU:.status.capacity.cpu` +- we can also specify a sort order using `--sort-by`, e.g. - `kubectl get pods --all-namespaces --output=custom-columns="NAME:.metadata.name" --sort-by=".metadata.name"` +- to reverse the order of sort by, `k get ... --sort-by=... | tac` + +## ArgoCD + +- advertises gitops approach + - git repository is the source of truth + - an agent ensures and keeps the cluster and repository in sync +- first part - testing and building of application code, creating a docker image out of it and pushing this image to docker hub +- second part - somehow updating the image version in kubernetes manifests to point to this new version e.g. jenkins can do this +- third part - running kubectl apply on the new manifests +- some challenges with the flow above - + - kubectl client, which lives outside the cluster needs to have credentials for kubernetes cluster - this is a security challenge + - kubectl cannot monitor things like health of applications +- now, first and second part stay the same, the third part is swapped with argocd +- argocd is a part of the cluster itself +- pull workflow - the argocd agent pulls the manifests and applies them to the cluster +- argocd keeps both git repository and cluster in sync - thus avoiding drifts. this way, the git repository stays as the single source of truth +- since this is all git, argocd allows easy rollback i.e. have argocd point to the earlier git revision +- one common configuration - do the sync automatically in non production environments, have someone apply the changes in production environments +- both challenges are solved - + - permissions around changes is now managed via git - approvals for changes can be done by selective people only, and the main workhorse argocd stays inside the cluster + - does monitoring of resources +- using crd (custom resource definitions) it extends kubernetes functionality, so that we can use kubernetes like manifests to provide argocd configuration +- we basically create application like below - line 8-11 is for the repository configuration, line 13 is for kubernetes cluster. we just need to run kubectl apply on the file below - + ```yaml + apiVersion: argoproj.io/v1alpha1 + kind: Application + metadata: + name: demo + namespace: argocd + spec: + project: default + source: + repoURL: https://gitlab.com/shameekagarwal/argocd-demo.git + targetRevision: HEAD + path: k8s + destination: + server: https://kubernetes.default.svc + syncPolicy: + automated: + selfHeal: true + prune: true + ``` +- note - the namespace defines where this argocd application should go, not where the resources should go +- kubernetes.default.svc is the endpoint to access the api server from inside the cluster +- head - default branch latest commit +- for private git repositories, we need to provide the private ssh key on the application manifest above +- self heal - false by default. if someone makes manual changes to the kubernetes cluster, using for e.g. kubectl commands, argocd will not try to abandon those changes and sync them with the git repository by default. use true to keep the git repository as the single source of truth +- prune - delete corresponding resource if manifest is deleted. false by default to prevent accidental deletions +- alternatives of argocd - flux, jenkins x +- deploying argocd to our minikube cluster - + ```sh + kubectl create namespace argocd + kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml + ``` +- to access the argocd api server on our local, we first need to expose it outside the cluster. then, methods to obtain password, ip and port are described below (username is admin) + ```sh + kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}' + minikube ip # ip + kubectl --namespace argocd get services | grep argocd-server # port + kubectl --namespace argocd get secret argocd-initial-admin-secret \ + --output=jsonpath="{.data.password}" | base64 --decode # password + ``` +- by default, argocd will poll the git repository at a fixed interval like 5 minutes. to get rid of this delay, we can use git webhooks i.e. git will trigger a notification to argocd on change +- in the ui, we can click on refresh so that instead of the default interval, argocd polls the repository immediately +- we can have argocd deployed to one cluster and have it monitor multiple kubernetes clusters + - imagine due to a disaster, one of the kubernetes clusters came down (not the one where argocd is running 🤣). lets assume no backups were needed (stateless workloads). if we create a new cluster and have argocd point to this new cluster instead of the old closed one, argocd will automatically deploy all outstanding workloads from the git repositories and bring it up to speed +- app project - group multiple such applications and manage them easily +- argocd health status - aggregates status from different resources that have been deployed +- application sets - factory for applications i.e. unlike application where kubernetes cluster and git repository is one to one, in application sets, kubernetes cluster and git repository is many to many +- in application sets, templates represent an application and generators are used to populate these applications using parameters. e.g. of list generator - + ```yaml + apiVersion: argoproj.io/v1alpha1 + kind: ApplicationSet + metadata: + name: demo + namespace: argocd + spec: + generators: + - list: + elements: + - cluster: asia + url: https://kubernetes.default.svc + - cluster: americas + url: https://kubernetes.default.svc + template: + metadata: + name: demo + spec: + project: default + source: + repoURL: https://gitlab.com/shameekagarwal/argocd-demo.git + targetRevision: HEAD + path: k8s + destination: + server: \{\{ url \}\} + syncPolicy: + automated: + selfHeal: true + prune: true + ``` +- there are a lot of more generators that we can use in an application set. some common generators have been described below +- git directory generator - useful for monorepo pattern i.e. one single git project has multiple applications, e.g. one folder say app has a kustomize based manifests, another folder say monitoring has helm based manifests and so on. in the application set, we only have to prodvide the git repository link. argocd will scan the git repository for different such kubernetes manifests and generate 2 applications automatically +- cluster generator - we register clusters inside argocd. our application set can then automatically generate applications for all the clusters that argocd knows off. we can use some methods to match certain clusters only +- matrix generator - combine different generators, e.g. cluster generator and git directory generator. this way, if git directory generator finds 4 kustomize applications and cluster generator finds 3 clusters, we end up deploying 4 * 3 = 12 argocd applications + +## Kustomize + +- helps use kubernetes templating using yaml easily +- inbuilt inside newer versions of kubectl +- base folder - manifests file + kustomization.yaml +- overlays folder - environment specific configuration +- each environment inside overlay gets a different directory +- to view the effective generated manifest, use `kubectl kustomize overlays/env` +- to apply, use `kubectl apply --kustomize overlays/env` +- kustomization.yaml can have things like common labels, annotations, common prefixes and suffixes, etc +- resources - what files to process +- commonLabels - add this to all labels **and selectors** - recall how this can easily remove human errors while for e.g. linking services to pods etc +- namePrefix and nameSuffix - add for e.g. application specific prefixes and suffixes to all manifests +- therefore, base/kustomization.yaml - + ```yaml + resources: + \- deployment.yaml + \- service.yaml + + commonLabels: + name: demo + + namePrefix: kustomize- + nameSuffix: -v1 + ``` +- patchesStrategicMerge - which files to use as patches. some properties in the patch files like name, kind, etc can be used to match its corresponding raw file in base, and its properties like replicas can override / add propeties to the raw file +- therefore, overlays/dev/replicas.yaml - + ```yaml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: webapp + spec: + replicas: 2 + ``` +- configMapGenerator - we just specify the name and the file to use here. the name that we specify here should match what we use in deployment.yaml when populating volumes / environment variables using config maps +- therefore, overlays/dev/kustomization.yaml - + ```yaml + resources: + \- ../../base + + patchesStrategicMerge: + \- "replicas.yaml" + + namespace: dev + + configMapGenerator: + \- name: some-config + env: config.properties + ``` +- overlays/dev/config.properties - + ``` + CUSTOM_HEADER=Inside Prod + ``` diff --git a/_posts/2023-11-18-spring-reactive.md b/_posts/2023-11-18-spring-reactive.md new file mode 100644 index 0000000..5313298 --- /dev/null +++ b/_posts/2023-11-18-spring-reactive.md @@ -0,0 +1,1633 @@ +--- +title: Spring Reactive +--- + +## Project Reactor + +- traditional approach - **one thread per request**. issues - + - there a lot of **io tasks**, e.g. calls to database, file system access, calling other microservices, etc. these io tasks **block** the threads + - each thread **consumes resources**, so for 400 concurrent requests, we would end up consuming the resources for 400 threads +- recall how javascript works - once for e.g. web apis have successfully completed the io task, they place the callback on the (micro task / job) queue or (callback / task) queue. then, the event loop picks it from there and places it on the stack +- different paradigms - + - sync + blocking - we make an io call and wait for it to be finished + - async - we delegate the work to a separate thread, which now has to first make the io call and then wait for the call to be finished + - non blocking - we make the io call are notified automatically when the io task is over. we do not have to wait for the io call. i feel this is javascript + - async + non blocking - even the non blocking call is delegated to a separate thread i.e. the separate thread makes the io call, and then is notified automatically when the io task is over. i feel this is what we are trying to achieve using project reactor +- **observer pattern** is used. react as and when a new message is received + - `Publisher` publishes updates + - `Subscriber` subscribes for updates + - publisher has a `subscribe` method, which receives a subscriber + - a `Subscription` object establishes this relationship. this is returned from `subscribe` + - subscriber has the following callbacks which a publisher can call - + - `onNext` for new data + - `onComplete` when the publisher work is done. no more new data would be sent + - `onError` for error. in this case also, no more new data would be sent +- synonyms + - publisher, observable, source, upstream, producer + - subscriber, observer, sink, downstream, consumer +- i think we also move to a more **declarative style** of coding instead of the usual **imperative style** when we use the reactive programming model +- **reactive streams** - a specification just like jpa +- some implementations of reactive streams - + - akka + - rxjava + - project reactor (this is covered) +- so, i think we have four things now - asynchronous, non blocking, observer pattern and declarative style of coding +- project reactor has two different implementations of publisher - `Mono` and `Flux` +- mono can emit 0 or 1 item +- i think 0 means publisher can call `onComplete` directly before `onNext` +- flux can emit 0 to n items +- analogy - mono is `null`, `Optional`, flux is `List`, `Stream` + ```java + Mono mono$ = Mono.just(1); + + // only onNext callback is provided + mono$.subscribe(i -> System.out.println("received: " + i)); + + // providing onNext, onError, onComplete + mono$.subscribe( + (i) -> System.out.println("received: " + i), + (e) -> System.out.println("error: " + e.getMessage()), + () -> System.out.println("completed") + ); + ``` +- use - + - `Mono.just(val)` for one value + - `Mono.empty()` for no values + - `Mono.error(error)` for an exception +- `Mono.just(randomName())` - randomName is always called, even if not used +- to prevent this, we can use `Mono.fromSupplier(() -> randomName())` +- _this way of thinking has been reused when discussing using blocking spring data jpa with reactive webflux later!_ +- **lazy** - nothing happens till we subscribe, any statements inside the mono, chained map, etc would not be run till we subscribe to it +- execute synchronously - use block + ```java + String capitalizedName = Mono.just(faker.name().fullName()) + .map(name -> { + Util.sleep(5); + return name.toUpperCase(); + }) + .block(); + ``` +- from future - `Mono.fromFuture(future)` +- from runnable - `Mono.fromRunnable(runnable)`. note - since runnable does not return anything, in this case, only on complete would be called, not on next. so, we can also use fromRunnable as an alternative to fromSupplier when our method does not have any return value +- i think the main reason for `fromFuture`, `fromRunnable` etc is to help with interoperability +- just like mono, we have `just` in flux, but it accepts varargs - `Flux.just(1, 2, 3)` +- `fromIterable` in flux - + ```java + Flux.fromIterable(List.of( + faker.name().fullName(), + faker.name().fullName(), + faker.name().fullName() + )); + ``` +- java streams can be only consumed once - + ```java + Stream intStream = Stream.of(1, 2, 3); + + // 1 2 3 + intStream.forEach(System.out::println); + + // java.lang.IllegalStateException: stream has already been operated upon or closed + intStream.forEach(System.out::println); + ``` +- we know that traditionally, a flux can have multiple subscribers (discussed later in hot vs cold). but if using `fromStream`, if the same stream is used, we get the same error as described above - + ```java + Stream intStream = Stream.of(1, 2, 3); + Flux intFlux = Flux.fromStream(intStream); + + intFlux.subscribe(...) // works + intFlux.subscribe(...) // will fail with the same exception + ``` +- utility method `range`, e.g. 10 items - + ```java + Flux names$ = Flux.range(1, 10) + .map((i) -> faker.name().fullName()); + ``` +- `log` explained - if we chain log to above example like so - + ```java + Flux names$ = Flux.range(1, 10) + .log() + .map((i) -> faker.name().fullName()) + .log(); + + names$.subscribe((t) -> System.out.println("on next: " + t)); + ``` +- output - since we have two logs, the first one of every pair is for the first log, and the second one for the second log + ``` + [ INFO] (main) | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription) // line 3's subscription + [ INFO] (main) | onSubscribe([Fuseable] FluxMapFuseable.MapFuseableSubscriber) // line 6's subscription + [ INFO] (main) | request(unbounded) // for line 3 + [ INFO] (main) | request(unbounded) // for line 6 + [ INFO] (main) | onNext(1) // what line 3's subscriber's onNext is called with + [ INFO] (main) | onNext(Derek Aufderhar) // what line 6's subscriber's onNext is called with + on next: Derek Aufderhar + [ INFO] (main) | onNext(2) + [ INFO] (main) | onNext(Chantell Kuvalis) + on next: Chantell Kuvalis + [ INFO] (main) | onNext(3) + [ INFO] (main) | onNext(Lonnie Pollich) + on next: Lonnie Pollich + ``` +- using a custom subscriber. important note - look how we have to call `request` manually now. this was being done bts automatically for us. note - i also had to call `cancel` manually, otherwise `onComplete` was not being called + ```java + AtomicReference subscriptionAtomicRef = new AtomicReference<>(); + + Flux.range(1, 5) + .subscribeWith(new Subscriber() { + @Override + public void onSubscribe(Subscription subscription) { subscriptionAtomicRef.set(subscription); } + + @Override + public void onNext(Integer integer) { System.out.println("on next: " + integer); } + + @Override + public void onError(Throwable throwable) { System.out.println("on error: " + throwable.getMessage()); } + + @Override + public void onComplete() { System.out.println("on complete"); } + }); + + subscriptionAtomicRef.get().request(5); + Util.sleep(5); + subscriptionAtomicRef.get().cancel(); + ``` +- another note - see how we set `subscriptionAtomicRef`. this is because we wanted to control it from outside the subscription, not inside +- central difference between a normal list and flux - **in flux, since we have implemented the observer pattern, we will get items as they are available, while in list, the entire structure has to be available at one go** +- interval - emit an item every specified duration - + ```java + Flux names$ = Flux.interval(Duration.ofSeconds(1)) + .map(i -> Util.faker.name().fullName()); + names$.subscribe(...); + Util.sleep(5); // to block main thread + ``` +- inter conversion between flux and mono - + ```java + Mono fluxToMono = Flux.range(1, 10).next(); + Flux monoToFlux = Flux.from(Mono.just(1)); + ``` +- take operator - + ```java + Flux.range(1, 3) + .log() + .take(2) + .log() + .subscribe(t -> System.out.println("on next: " + t)); + ``` +- output - see last two lines specially - since we call take, the take calls cancel on its own subscription, and calls on complete for anything thats its downstream + ``` + [ INFO] (main) | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription) + [ INFO] (main) onSubscribe(FluxLimitRequest.FluxLimitRequestSubscriber) + [ INFO] (main) request(unbounded) + [ INFO] (main) | request(2) + [ INFO] (main) | onNext(1) + [ INFO] (main) onNext(1) + on next: 1 + [ INFO] (main) | onNext(2) + [ INFO] (main) onNext(2) + on next: 2 + [ INFO] (main) | cancel() + [ INFO] (main) onComplete() + ``` +- `flux.create` - we can manually call `next`, `complete`, `error` on flux sink. emit a country till we encounter canada - + ```java + Flux country$ = Flux.create(fluxSink -> { + String country; + do { + country = Util.faker.country().name(); + fluxSink.next(country); + } while (!"canada".equalsIgnoreCase(country) && !fluxSink.isCancelled()); + fluxSink.complete(); + }); + ``` +- note - had we not called `fluxSink.isCancelled`, when the subscriber would have called cancel on its subscription, the flux sink would have continued emitting items. the subscriber would not have cared, since it has already called its on complete. but resources are still being consumed by the publisher itself +- so, one small confusion i had probably cleared - if we call `subscription.cancel()`, it does not guarantee that publisher would stop running - so i think **it is the job of the producer** to kep checking if subscription has been cancelled, and if it has, it should stop emitting items? +- in create, we have to check manually if the downstream is cancelled, and we have a lot of flexibility in terms of emitting items. in generate, feels like we can emit items in only "one way". the method will be automatically called for us infinitely till we use something like take, cancel the subscription, call `synchronousSink.complete()`, etc. it makes code more concise, and checks like is cancelled is not needed - + ```java + Flux names$ = Flux.generate(synchronousSink -> synchronousSink.next(Util.faker.name().fullName())) + .take(5); + // emit 5 items + // then cancel subscription and trigger on complete + ``` +- how to emit a country till we encounter canada using generate - + ```java + Flux country$ = Flux.generate(synchronousSink -> { + String country = Util.faker.country().name(); + synchronousSink.next(country); + if ("canada".equalsIgnoreCase(country)) synchronousSink.complete(); + }); + ``` +- so, generate vs create - + - function passed to create will be invoked only once, function passed to generate would be invoked multiple times + - create will not take into account downstream demand subscription cancellation etc, generate will +- one small issue with generate that was not in create - state. how can we implement state, that is persisted and available "across" executions? recall the lambda of create is only triggered once i.e. we wrote the loop manually, so we can have the state outside the loop and modify it as needed inside the loop. in generate, the lambda is triggered automatically for us bts, so we cannot do that. one method - outside the flux. but flux generate does provide us state capabilities as well. e.g. emit countries till canada is encountered or we reach the limit (10) + ```java + // method 1 - maintain state manually + AtomicInteger state = new AtomicInteger(1); + Flux country$ = Flux.generate((sink) -> { + String country = Util.faker.country().name(); + sink.next(country); + if ("canada".equalsIgnoreCase(country) || state.getAndIncrement() == 10) sink.complete(); + }); + + // method 2 - using flux state + Flux country$ = Flux.generate( + () -> 1, // initial state + (state, sink) -> { + String country = Util.faker.country().name(); + sink.next(country); + if ("canada".equalsIgnoreCase(country) || state == 10) sink.complete(); + return state + 1; + } + ); + ``` +- handle - it accepts a function which is called once per item, and also has the sink. so we can call complete, next, error etc whatever we want. it feels like a supercharged filter / map, which looks like generate + ```java + Flux handle$ = Flux + .generate((SynchronousSink sink) -> sink.next(Util.faker.country().name())) + .handle((item, sink) -> { + sink.next(item); + if ("canada".equalsIgnoreCase(item)) sink.complete(); + }); + ``` +- we have multiple callbacks / lifecycle hooks - + ```java + Flux numbers$ = Flux.range(1, 10) + .doOnComplete(() -> System.out.println("do on complete")) + .doFirst(() -> System.out.println("do first")) + .doOnNext((i) -> System.out.println("do on next " + i)) + .doOnSubscribe((subscription) -> System.out.println("do on subscribe")) + .doOnRequest((number) -> System.out.println("do on request " + number)) + .doOnError((throwable) -> System.out.println("do on error " + throwable.getMessage())) + .doOnTerminate(() -> System.out.println("do on terminate")) + .doFinally((signalType) -> System.out.println("do finally " + signalType)); + ``` +- limit rate - e.g. not all the data is loaded in facebook at one go. as and when we scroll down, more content is loaded. similarly with limit rate, instead of the subscription calling request(unbounded), the subscription calls request(specified_number). once 75% of the specified_number is consumed by the subscriber, more request(specified_number - consumed_items) amount of items are added. so, its like a buffer of maximum specified_number is maintained, which is filled back up when 75% of it is consumed. limit rate also accepts a second argument to customize the 75%, not discussed here + ```java + Flux.range(1, 100) + .log() + .limitRate(10); + ``` +- output - + ``` + [ INFO] (main) | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription) + [ INFO] (main) | request(10) -- fill the queue with 10 items + [ INFO] (main) | onNext(1) + [ INFO] (main) | onNext(2) + ... + [ INFO] (main) | onNext(8) + [ INFO] (main) | request(8) -- 75% consumed, request enough to fill the queue with 10 items + [ INFO] (main) | onNext(9) + ``` +- handling errors - we already know that we can provide an on error callback from a subscriber. but to handle it in the pipeline itself - + - on error return - a hardcoded fallback value would be returned - + ```java + Flux.range(1, 100) + .map(i -> 10 / (3 - i)) + .onErrorReturn(-1); + // 5 -> 10 -> -1 -> onComplete (not onError) + ``` + - on error resume - a different publisher i.e. flux / mono would be resumed from the point of error - + ```java + Flux.range(1, 100) + .map(i -> 10 / (3 - i)) + .onErrorResume((e) -> Flux.range(1, 3)); + // 5 -> 10 -> 1 -> 2 -> 3 -> onComplete (not onError) + ``` + - on error continue - skip the item where the error occurred and continue processing the items. **important - in the two methods above, albeit we failed silently, the processing in the original flux was stopped as soon as the error occurred, unlike in on error continue** + ```java + Flux.range(1, 5) + .map(i -> 10 / (3 - i)) + .onErrorContinue((error, obj) -> { + // do whatever with error, obj + }); + // 5 -> 10 -> -10 -> -5 -> onComplete (not onError) + ``` +- handling empty - + - default if empty - a hardcoded value would be returned (like on error return) + ```java + Flux.range(1, 10) + .filter(i -> i > 10) + .defaultIfEmpty(-1); + // -1 + ``` + - switch if empty - a different publisher i.e. flux / mono would be returned (like on error resume) + ```java + var integers$ = Flux.range(1, 10) + .filter(i -> i > 10) + .switchIfEmpty(Flux.range(-5, 5)); + // -5 -4 -3 -2 -1 + ``` +- switch on first - first request(1) is called. the result of this gets sent to the function we pass to switch on first. based on this, our function can decide what to do. after this, request(unbounded) is called. i think it is useful when we want to make a decision based on the first element of the flux. e.g. if we find the first element has age < 20, return just one person(underage, the_age). else, return the entire list of people i.e. continue the original flux - + ```java + Flux.range(1, 10) + .map(i -> Person.generate()) + .log() + .switchOnFirst((signal, personFlux) -> + signal.isOnNext() && signal.get().getAge() < 20 ? + Mono.just(new Person("underage", signal.get().getAge())) : + personFlux + ); + ``` +- **transform** - useful when we have a set of operators that are duplicated in multiple pipelines. the function accepts `Flux` and returns `Flux`. idea is multiple pipelines can call transform with the same function, and these set of operators get applied to all of these pipelines + ```java + Flux.range(1, 10) + .transform(TransformDemo::transformer); + + // ... + private static Flux transformer(Flux integers$) { + return integers$.map(i -> Person.generate()); + } + ``` +- map - transform one element to another type. flat map - return a flux for an element. the subscriber still sees a stream of element. the flat map helps abstract away this complexity by "flattening" the flux. we try getting all persons, and for each person, we try getting all their orders, which itself is a flux. by using flat map, the subscriber just receives a stream of orders + ```java + Flux.range(1, 10) + .map(i -> Person.generate()) + .flatMap(FlatMapDemo::getOrders); + + private static Flux getOrders(Person person) { + return Flux.range(1, Util.faker.random().nextInt(4)) + .map(i -> Order.generate(person)); + } + ``` +- publisher emits data when a subscriber subscribes to the data. so till now, whatever we saw was a **cold publisher** - every subscriber has their own data + ```java + public class GenericSubscriber { + + public static void subscribe(Flux flux$, String subscriberName) { + String thread = Thread.currentThread().getName(); + flux$.subscribe( + (t) -> System.out.printf("[%s] %s> on next: %s%n", thread, subscriberName, t), + (throwable) -> System.out.printf("[%s] %s> on error: %s%n", thread, subscriberName, throwable.getMessage()), + () -> System.out.printf("[%s] %s> on complete%n", thread, subscriberName) + ); + } + } + + Flux movie$ = Flux.range(1, 5) + .delayElements(Duration.ofSeconds(1)) + .map((i) -> "stream " + i); + GenericSubscriber.subscribe(movie$, "mike"); + Util.sleep(2); + GenericSubscriber.subscribe(movie$, "sam"); + Util.sleep(50); + ``` +- output - + ``` + [main] mike> on next: stream 1 + [main] mike> on next: stream 2 + [main] mike> on next: stream 3 + [main] sam> on next: stream 1 + [main] mike> on next: stream 4 + [main] sam> on next: stream 2 + [main] mike> on next: stream 5 + [main] mike> on complete + [main] sam> on next: stream 3 + [main] sam> on next: stream 4 + [main] sam> on next: stream 5 + [main] sam> on complete + ``` +- **hot publisher** - one data producer for all subscribers. the only difference here is line 4. share converts a cold publisher to hot publisher + ```java + Flux movie$ = Flux.range(1, 5) + .delayElements(Duration.ofSeconds(1)) + .map((i) -> "stream " + i) + .share(); + GenericSubscriber.subscribe(movie$, "mike"); + Util.sleep(2); + GenericSubscriber.subscribe(movie$, "sam"); + Util.sleep(50); + ``` +- output - + ``` + [main] mike> on next: stream 1 + [main] mike> on next: stream 2 + [main] mike> on next: stream 3 + [main] sam> on next: stream 3 + [main] mike> on next: stream 4 + [main] sam> on next: stream 4 + [main] mike> on next: stream 5 + [main] sam> on next: stream 5 + [main] mike> on complete + [main] sam> on complete + ``` +- `share` basically is `publish().refCount(1)`. the argument passed to ref count basically tells the minimum number of subscribers required by the producer to start producing. in the above example, if we replace share by for e.g. `publish().refCount(2)`, the output would be as follows, because the producer will start producing only when the subscriber sam subscribes + ``` + [main] mike> on next: stream 1 + [main] sam> on next: stream 1 + [main] mike> on next: stream 2 + [main] sam> on next: stream 2 + [main] mike> on next: stream 3 + [main] sam> on next: stream 3 + [main] mike> on next: stream 4 + [main] sam> on next: stream 4 + [main] mike> on next: stream 5 + [main] sam> on next: stream 5 + [main] mike> on complete + [main] sam> on complete + ``` +- if we increase the sleep between mike and sam, we see sam starts receiving all the elements again! so, its almost like when a set of subscribers see to the end of a hot publisher, the hot publisher restarts + ```java + GenericSubscriber.subscribe(movie$, "mike"); + Util.sleep(7); + GenericSubscriber.subscribe(movie$, "sam"); + Util.sleep(30); + ``` +- output - + ``` + [main] mike> on next: stream 1 + [main] mike> on next: stream 2 + [main] mike> on next: stream 3 + [main] mike> on next: stream 4 + [main] mike> on next: stream 5 + [main] mike> on complete + [main] sam> on next: stream 1 + [main] sam> on next: stream 2 + [main] sam> on next: stream 3 + [main] sam> on next: stream 4 + [main] sam> on next: stream 5 + [main] sam> on complete + ``` +- example - + ```java + Flux flux$ = Flux.create((FluxSink fluxSink) -> { + Util.log("inside create"); + fluxSink.next(2); + }); + + flux$.subscribe((i) -> Util.log("subscribe " + i)); + flux$.subscribe((i) -> Util.log("subscribe " + i)); + ``` +- output - + ``` + main: inside create + main: subscribe 2 + main: inside create + main: subscribe 2 + ``` +- understand - all the process happens in the current thread - main +- schedulers available in reactive - + - bounded elastic - for networking / io time consuming tasks + - parallel - for cpu intensive tasks + - single - dedicated thread for tasks + - immediate - current thread +- subscribe on - + ```java + Flux flux$ = Flux.create((FluxSink fluxSink) -> { + Util.log("inside create"); + fluxSink.next(2); + }) + .subscribeOn(Schedulers.boundedElastic()); + + flux$.subscribe((i) -> Util.log("subscribe " + i)); + flux$.subscribe((i) -> Util.log("subscribe " + i)); + ``` +- output - + ``` + boundedElastic-2: inside create + boundedElastic-1: inside create + boundedElastic-2: subscribe 2 + boundedElastic-1: subscribe 2 + ``` +- point to remember - scheduler does not mean execute my current pipeline in parallel. one pipeline execution still happens in one thread, e.g. boundedElastic-2. scheduler with subscribe on means that if for e.g. we have multiple subscribers, each of them would be executed in its own thread. recall how without the subscribe on, everything was happening inside the main thread +- also note how subscribe on effects the entire pipeline from top i.e. look at the thread name of "inside create" +- publish on - + ```java + Flux flux$ = Flux.create((FluxSink fluxSink) -> { + Util.log("inside create"); + fluxSink.next(2); + }) + .publishOn(Schedulers.boundedElastic()); + + flux$.subscribe((i) -> Util.log("subscribe " + i)); + flux$.subscribe((i) -> Util.log("subscribe " + i)); + ``` +- output - + ``` + main: inside create + main: inside create + boundedElastic-1: subscribe 2 + boundedElastic-2: subscribe 2 + ``` +- so, publish on only affected the downstream (whatever operators came after it) i.e. look at the thread name of "inside create". note how this behavior is different from what we saw inside subscribe on +- rule - subscribe on affects upstream and publish on affects downstream +- so, its almost like subscribe on will go over and hand its scheduler to the actual source. this way, all the operators after it are affected by subscribe on (until maybe a publish on is encountered) +- publish on is relatively simpler to visualize, since it affects all operators after it +- multiple subscribe on - + ```java + Flux.range(1, 1) + .subscribeOn(Schedulers.boundedElastic()) + .doOnNext((i) -> Util.log("inside on next 1")) + .subscribeOn(Schedulers.parallel()) + .doOnNext((i) -> Util.log("inside on next 2")) + .subscribe((i) -> Util.log("inside subscribe")); + ``` +- output - look how parallel was ignored, the one closer to the actual source gets executed. my understanding - this might be because **execution happens bottom to top**. its almost like the operator subscribe to the one above it and so on. so, maybe first, the second subscribe on hands on over its scheduler, and then the first subscribe on hands on over its scheduler, thus overwriting what the second scheduler did + ``` + boundedElastic-1: inside on next 1 + boundedElastic-1: inside on next 2 + boundedElastic-1: inside subscribe + ``` +- multiple publish on - + ```java + Flux.range(1, 1) + .publishOn(Schedulers.boundedElastic()) + .doOnNext((i) -> Util.log("inside on next 1")) + .publishOn(Schedulers.parallel()) + .doOnNext((i) -> Util.log("inside on next 2")) + .subscribe((i) -> Util.log("inside subscribe")); + ``` +- output - the scheduler closest to before an operator gets used + ``` + boundedElastic-1: inside on next 1 + parallel-1: inside on next 2 + parallel-1: inside subscribe + ``` +- combination of the two - + ```java + Flux.range(1, 1) + .doOnNext((i) -> Util.log("inside on next 1")) + .publishOn(Schedulers.boundedElastic()) + .doOnNext((i) -> Util.log("inside on next 2")) + .subscribeOn(Schedulers.parallel()) + .doOnNext((i) -> Util.log("inside on next 3")) + .subscribe((i) -> {}); + ``` +- output - + ``` + parallel-1: inside on next 1 + boundedElastic-1: inside on next 2 + boundedElastic-1: inside on next 3 + ``` +- diagram -
+ ![schedulers](/assets/img/spring-reactive/schedulers.drawio.png) +- schedulers help run different instances of the same pipeline run in different threads. to process the items of a pipeline in parallel, we can use a combination of parallel and run on - + ```java + Flux.range(1, 5) + .parallel() + .runOn(Schedulers.boundedElastic()) + .doOnNext((i) -> Util.log("inside on next " + i)) + .subscribe((i) -> {}); + ``` +- output - scheduler has 4 threads probably because there are 4 cores in cpu - + ```java + boundedElastic-4: inside on next 4 + boundedElastic-3: inside on next 3 + boundedElastic-1: inside on next 1 + boundedElastic-1: inside on next 5 + boundedElastic-2: inside on next 2 + ``` +- once we do parallel() like above, we would not have access to publish on, subscribe on, etc (which logically makes sense i think, because both are very different methods of achieving parallelism). to make the parallelized flux come back together, we can chain sequential - + ```java + // compilation error + .parallel() + .runOn(Schedulers.boundedElastic()) + .subscribeOn(Schedulers.parallel()) + + // works + .parallel() + .runOn(Schedulers.boundedElastic()) + .sequential() + .subscribeOn(Schedulers.parallel()) + ``` +- so, concepts we discussed - `subscribeOn()`, `publishOn()`, `.parallel().runOn()` and with it `.sequential()` +- publisher publishes at a faster rate than the consumer can consume. this is called **back pressure** / **overflow** +- overflow strategies in project reactor (basically `onBackPressure` prefix is constant, remaining suffixes have been mentioned below) - + - drop - once the queue is full, drop the remaining items. as simple as chaining on back pressure drop. optionally, this also accepts a callback, which receives the dropped value, which we can handle accordingly - + ```java + Flux.range(1, 500) + .doOnNext((i) -> Util.sleepMillis(2)) + .onBackpressureDrop((i) -> Util.log("dropped " + i)) + .doOnNext((i) -> Util.log("produced " + i)) + .publishOn(Schedulers.boundedElastic()) + .doOnNext((i) -> Util.sleepMillis(5)) + .doOnNext((i) -> Util.log("consumed " + i)) + .subscribe((i) -> {}); + ``` + - latest - like drop, but **one latest value** keeps getting overwritten - so, just like drop but just that one latest value is present as well + - error - an error is thrown to the downstream + - buffer - the default. keep in memory. so, my understanding - the risk here is exceptions like out of memory. so, we can optionally configure a size like below. when the buffer limit is reached, `OverflowException` is thrown - + ```java + .onBackpressureBuffer(20) + ``` +- combining publishers - start with, concat, zip, merge, combine latest +- **start with** - start with the provided flux. when it gets over, start with the original flux. e.g. we generate random names (which assume is slow), so we add it to cache as well. in the second subscription, the first two names are received from the cache and are therefore quick + ```java + List cache = new ArrayList<>(); + + Flux names$ = Flux + .generate((SynchronousSink sink) -> sink.next(Util.faker.name().fullName())) + .doOnNext((i) -> Util.log("generating fresh name...")) + .doOnNext(cache::add) + .startWith(Flux.fromIterable(cache)); + + GenericSubscriber.subscribe(names$.take(2), "sam"); + GenericSubscriber.subscribe(names$.take(3), "mike"); + ``` +- output - + ``` + main: generating fresh name... + [main] sam> on next: Dylan Kertzmann + main: generating fresh name... + [main] sam> on next: Cole Vandervort + [main] sam> on complete + [main] mike> on next: Dylan Kertzmann + [main] mike> on next: Cole Vandervort + main: generating fresh name... + [main] mike> on next: Kandis Douglas + [main] mike> on complete + ``` +- **concat** - like start with, but appends instead of prepending + ```java + Flux one = Flux.just("a", "b", "c"); + Flux two = Flux.just("d", "e"); + GenericSubscriber.subscribe(one.concatWith(two)); + // output - a b c d e + ``` +- we can also use an alternate syntax to combine at one go - `Flux.concat(one, two, three...)`. what if one of the flux we tried to perform concat on had an error? the subscriber would immediately halt with the error. however, we can push the error to the end i.e. after the emission from all the fluxes is over using `concatDelayError` - + ```java + Flux one = Flux.just("a", "b"); + Flux two = Flux.error(new RuntimeException("oops...")); + Flux three = Flux.just("c"); + + GenericSubscriber.subscribe(Flux.concat(one, two, three)); + // [main] > on next: a + // [main] > on next: b + // [main] > on error: oops... + + GenericSubscriber.subscribe(Flux.concatDelayError(one, two, three)); + // [main] > on next: a + // [main] > on next: b + // [main] > on next: c + // [main] > on error: oops... + ``` +- remember - both in concact and in start with, we expect a flux to be over before jumping on to the next flux +- **merge** - merge all fluxes i.e. they will all simultaneously emit to the subscriber. they can all emit at their own rates, and the subscriber will receive all items from all fluxes + ```java + Flux qatar$ = Flux + .generate((SynchronousSink sink) -> sink.next("Qatar " + Util.faker.random().nextInt(5))) + .delayElements(Duration.ofSeconds(3)); + Flux emirates$ = Flux + .generate((SynchronousSink sink) -> sink.next("Emirates " + Util.faker.random().hex())) + .delayElements(Duration.ofSeconds(1)); + Flux spiceJet$ = Flux + .generate((SynchronousSink sink) -> sink.next("Spice Jet " + Util.faker.random().nextInt(50000))) + .delayElements(Duration.ofSeconds(2)); + + Flux flights$ = Flux.merge(qatar$, emirates$, spiceJet$); + + GenericSubscriber.subscribe(flights$); + ``` +- my understanding - project reactor probably ensures delay elements is run in a background thread. recall how by default, if not using schedulers, project reactor executes everything in the main thread. when i was using `.doOnNext(() -> Util.sleep(1))` instead of `.delayElements(Duration.ofSeconds(1))`, the main thread was getting blocked, and only qatar was being able to emit. same i think appplies to `Flux.interval` i.e. sleep of it happens in a background thread +- **zip** - e.g. imagine a car building pipeline needs one car body, one engine and one set of tires. assume all the three components are fluxes of their own. it can happen that tire manufacturing is much faster than engine, but we only need one of each of the three components at a time to assemble a car. this is ensured using zip + ```java + Flux engine$ = Flux + .generate((SynchronousSink sink) -> sink.next("engine")) + .delayElements(Duration.ofSeconds(3)); + Flux body$ = Flux + .generate((SynchronousSink sink) -> sink.next("body")) + .delayElements(Duration.ofSeconds(2)); + Flux wheels$ = Flux + .generate((SynchronousSink sink) -> sink.next("wheels")) + .delayElements(Duration.ofSeconds(1)); + + Flux> cars$ = Flux.zip(engine$, body$, wheels$); + + GenericSubscriber.subscribe(cars$); + ``` +- output - can emit only once every 3 seconds (slowest flux)? + ``` + [main] > on next: [engine,body,wheels] + [main] > on next: [engine,body,wheels] + [main] > on next: [engine,body,wheels] + ``` +- **combine latest** - combine the latest emitted element from all the fluxes + ```java + Flux one$ = Flux.just("a", "b", "c") + .delayElements(Duration.ofSeconds(3)); + Flux two$ = Flux.just("a", "b", "c") + .delayElements(Duration.ofSeconds(2)); + + Flux> combined = Flux.combineLatest(one$, two$, (a, b) -> List.of(a, b)); + + GenericSubscriber.subscribe(combined); + ``` +- output - + ``` + [main] > on next: [a, a] // 3rd second + [main] > on next: [a, b] // 4th second + [main] > on next: [a, c] // 6th second + [main] > on next: [b, c] // 6th second + [main] > on next: [c, c] // 9th second + ``` +- note about behavior, do not get confused - even the same instance of publisher is treated separately by separate subscribers, since default is cold publisher, not hot + ```java + Flux flux = Flux.just("a", "b", "c"); + GenericSubscriber.subscribe(flux.startWith(flux)); + + // output - + // a, b, c, a, b, c, on complete ✅ + // a, b, c, on complete ❌ + ``` +- **batching** - buffer, window, group +- buffer - collect in groups of 5 items. for the last batch, it would not just hang and wait for 5 items, but just emit the remaining items. so, point to remember - it is important to ensure our publishers to always emit a complete signal once they are done, otherwise it can cause unexplainable behavior + ```java + Flux> events$ = Flux.interval(Duration.ofMillis(300)) + .map((i) -> "event " + i) + .take(8) + .buffer(5); + + GenericSubscriber.subscribe(events$); + ``` +- output - + ``` + [main] > on next: [event 0, event 1, event 2, event 3, event 4] + [main] > on next: [event 5, event 6, event 7] + [main] > on complete + ``` +- buffer based on duration - + ```java + .buffer(Duration.ofSeconds(2)); + ``` +- best of both worlds - combination of both duration timeout and buffer size - + ```java + .bufferTimeout(5, Duration.ofSeconds(2)); + ``` +- another use case of buffer - if for e.g. i want last three items. the second parameter specifies how many items to "skip". since we specify 1, we get `[0,1,2]`, `[1,2,3]` and so on + ```java + Flux> events$ = Flux.interval(Duration.ofMillis(300)) + .map((i) -> "event " + i) + .buffer(3, 1); + + GenericSubscriber.subscribe(events$); + ``` +- output - + ``` + [main] > on next: [event 0, event 1, event 2] + [main] > on next: [event 1, event 2, event 3] + ``` +- **window** - like buffer, but it returns a flux and not a list. the advantage - same as list vs flux! if buffer size is 5, all the items for the buffer should be available in one go, since it uses a list. in window, we can get the items as and when they arrive, since a flux is used + ```java + [parallel-1] > on next: event 0 + [parallel-1] > on next: event 1 + [parallel-1] > on next: event 2 + [parallel-1] > on complete + [parallel-1] > on next: event 3 + [parallel-1] > on next: event 4 + [parallel-1] > on next: event 5 + [parallel-1] > on complete + ``` +- just like buffer, i do see option for + - passing duration to window + - using `windowTimeout` for best of both worlds i.e. duration and window size + - configure skip +- **group by** - works just like in for e.g. sql. note - do not use something with high cardinality. again, this too is a flux of flux + ```java + Flux> flux$ = Flux.range(1, 30) + .delayElements(Duration.ofMillis(500)) + .groupBy(i -> i % 3); + + flux$.subscribe((f) -> { + Util.log("invoked for " + f.key()); + f.subscribe((a) -> Util.log(String.format("[%s]: %s", f.key(), a))); + }); + ``` +- output - + ``` + [parallel-1] invoked for 1 + [parallel-1] [1]: 1 + [parallel-2] invoked for 2 + [parallel-2] [2]: 2 + [parallel-3] invoked for 0 + [parallel-3] [0]: 3 + [parallel-4] [1]: 4 + [parallel-1] [2]: 5 + [parallel-2] [0]: 6 + [parallel-3] [1]: 7 + ``` +- **repeat** - resubscribe after complete signal. repeat 2 means repeat twice, i.e. total 3 times + ```java + Flux integers$ = Flux.range(1, 3) + .doOnComplete(() -> Util.log("do on complete (before repeat)")) + .repeat(2) + .doOnComplete(() -> Util.log("do on complete (after repeat)")); + + GenericSubscriber.subscribe(integers$); + ``` +- output - understand how the on complete of subscriber would be **only called once** + ``` + [main] > on next: 1 + [main] > on next: 2 + [main] > on next: 3 + [main] do on complete (before repeat) + [main] > on next: 1 + [main] > on next: 2 + [main] > on next: 3 + [main] do on complete (before repeat) + [main] > on next: 1 + [main] > on next: 2 + [main] > on next: 3 + [main] do on complete (before repeat) + [main] do on complete (after repeat) + [main] > on complete + ``` +- repeat can also accept a boolean supplier - probably helps with making the decision of repeating dynamically + ```java + .repeat(() -> shouldIRepeatAgain()) + // ... + private Boolean shouldIRepeatAgain() { + // ... + } + ``` +- **retry** - resubscribe after error signal + ```java + var integers$ = Flux.range(1, 5) + .map((i) -> i / (i - 2)) + .doOnError((t) -> Util.log("do on error (before retry): " + t.getMessage())) + .retry(2) + .doOnError((t) -> Util.log("do on error (after retry): " + t.getMessage())); + + GenericSubscriber.subscribe(integers$); + ``` +- output - + ``` + [main] > on next: -1 + [main] do on error (before retry): / by zero + [main] > on next: -1 + [main] do on error (before retry): / by zero + [main] > on next: -1 + [main] do on error (before retry): / by zero + [main] do on error (after retry): / by zero + [main] > on error: / by zero + ``` +- **retry spec** - retry based on the type of error that occurs. e.g. it makes sense to retry when we get a 500, not 404 - + ```java + var http$ = Flux.generate((sink) -> { + if (state$.getAndIncrement() < 3) { + sink.error(new RuntimeException("500")); + } else { + sink.error(new RuntimeException("400")); + } + }) + .doOnError((t) -> Util.log("do on error (before retry): " + t.getMessage())) + .retryWhen(Retry.from((flux) -> flux.handle((Retry.RetrySignal rs, SynchronousSink sink) -> { + if (rs.failure().getMessage().equals("500")) sink.next("anything?"); + else sink.error(rs.failure()); + }))) + .doOnError((t) -> Util.log("do on error (after retry): " + t.getMessage())); + + GenericSubscriber.subscribe(http$); + ``` +- output - + ``` + [main] do on error (before retry): 500 + [main] do on error (before retry): 500 + [main] do on error (before retry): 400 + [main] do on error (after retry): 400 + [main] > on error: 400 + ``` +- sinks - producers emit values on the sinks, and subscriber can subscribe to sinks using `asMono` + ```java + Sinks.One sink = Sinks.one(); + Mono mono = sink.asMono(); + + sink.tryEmitValue("hello"); + GenericSubscriber.subscribe(mono); + ``` +- similarly, we can also call `tryEmitError` +- we looked at the try variation above i.e. `tryEmitValue`. its return type is `Sinks.EmitResult`, which we can use to see any possible exceptions that might have occurred during the emitting of value. however, we can use the version without the try - `emitValue`, in which case we need to provide a callback, which is the **failure handler**. we can also return a boolean from the failure handler. if e return a true, it means the sink will retry emitting the value again automatically for us. the callback is a failure handler, it would only be called if there is a failure when trying to emit a value + ```java + sink.emitValue("hello", (signalType, emitResult) -> { + Util.log("signal type: " + signalType); + Util.log("emit result: " + emitResult); + return false; + }); + ``` +- so, for e.g. below, the second emit would fail, because the sink is of type one, so it allows emitting only one value + ```java + Sinks.One sink = Sinks.one(); + Mono mono = sink.asMono(); + + sink.tryEmitValue("hello"); + sink.emitValue("bonjour", (signalType, emitResult) -> { + Util.log("signal type: " + signalType); + Util.log("emit result: " + emitResult); + return false; + }); + + GenericSubscriber.subscribe(mono); + ``` +- output - + ```java + [main] signal type: onNext + [main] emit result: FAIL_TERMINATED + [main] > on next: hello + [main] > on complete + ``` +- if we would have returned true, we would have had an infinite loop! - it would try and fail every time +- based on above discussions, we should not just run try emit next and assume it worked! we should read its return value or use the emit value variant which accepts a callback +- types of sinks - **multicast** - multiple subscribers allowed, **unicast** - only one subscriber allowed + - one multicast + - many unicast + - many multicast + - many multicast with replay +- remember in many, unlike in one, we need to emit complete explicitly (complete emitted implicitly in one sink when we emit next). how to complete without emitting any value in one sink then? i can see that unlike many sink, one sink has `tryEmitEmpty` +- constructing a sink of many unicast type - + ```java + Sinks.Many sink = Sinks.many() + .unicast() + .onBackpressureBuffer(); + sink.tryEmitNext("how"); + sink.tryEmitNext("are"); + sink.tryEmitNext("you"); + sink.tryEmitComplete(); + + Flux flux = sink.asFlux(); + + GenericSubscriber.subscribe(flux, "mike"); + ``` +- output - + ``` + [main] mike> on next: how + [main] mike> on next: are + [main] mike> on next: you + [main] mike> on complete + ``` +- sink of many multicast type - + ```java + Sinks.Many sink = Sinks.many() + .multicast() + .directAllOrNothing(); + + Flux flux = sink.asFlux(); + + sink.tryEmitNext("how"); + sink.tryEmitNext("are"); + GenericSubscriber.subscribe(flux, "sam"); + GenericSubscriber.subscribe(flux, "mike"); + sink.tryEmitNext("you"); + GenericSubscriber.subscribe(flux, "jake"); + sink.tryEmitNext("doing"); + ``` +- output - first subscriber gets all "pending messages" (e.g. only sam gets how and are). then, the remaining subscribers "only get the messages that come after they subscribe" (e.g. sam and mike both get you, while all three sam, mike and jake get doing) + ``` + [main] sam> on next: how + [main] sam> on next: are + [main] sam> on next: you + [main] mike> on next: you + [main] sam> on next: doing + [main] mike> on next: doing + [main] jake> on next: doing + ``` +- if we change the method of constructing the flux like so - + ```java + Sinks.Many sink = Sinks.many() + .replay() + .all(); + ``` +- output - + ``` + [main] sam> on next: how + [main] sam> on next: are + [main] mike> on next: how + [main] mike> on next: are + [main] sam> on next: you + [main] mike> on next: you + [main] jake> on next: how + [main] jake> on next: are + [main] jake> on next: you + [main] sam> on next: doing + [main] mike> on next: doing + [main] jake> on next: doing + ``` +- **context** - a way for downstream to send information to upstream + ```java + Mono mono = Mono.deferContextual((ctx) -> { + if (ctx.hasKey("user")) return Mono.just("welcome " + ctx.get("user")); + return Mono.error(new RuntimeException("user not provided")); + }); + + GenericSubscriber.subscribe(mono.contextWrite(Context.of("user", "sam"))); + GenericSubscriber.subscribe(mono); + ``` +- output - + ``` + [main] > on next: welcome sam + [main] > on complete + [main] > on error: user not provided + ``` +- recall how context goes from downstream to upstream. recall that is how subscription works as well. here, we demo how because of this nature, the upper context will overwrite the context below it + ```java + Mono mono = Mono.deferContextual((ctx) -> { + if (ctx.hasKey("user")) return Mono.just("welcome " + ctx.get("user")); + return Mono.error(new RuntimeException("user not provided")); + }) + .contextWrite(Context.of("user", "jake")) + .contextWrite(Context.of("user", "sam")); + + GenericSubscriber.subscribe(mono); + ``` +- output - + ``` + [main] > on next: welcome jake + [main] > on complete + ``` +- use context value to write to context - + ```java + .contextWrite(ctx -> ctx.put("user", ctx.get("user").toUpperCase())) + ``` +- important to note - context is unmodifiable. when we call ctx.put, a new context is returned. so, while above is a shorthand since amount of processing needed is small, remember that **modified context needs to be returned** for it to change the context for upstream, i.e. `ctx.put` does not modify the original ctx +- test simple demo - + ```java + Flux just = Flux.just(1, 2, 3); + StepVerifier.create(just) + .expectNext(1) + .expectNext(2) + .expectNext(3) + .expectComplete() + .verify(); + + // or + + Flux just = Flux.just(1, 2, 3); + StepVerifier.create(just) + .expectNext(1, 2, 3) + .expectComplete() + .verify(); + ``` +- asserting error - + ```java + Flux flux = Flux.create((sink) -> { + sink.next(1); + sink.next(2); + sink.error(new IllegalStateException("an overflow occurred")); + }); + + StepVerifier.create(flux) + .expectNext(1, 2) + .expectError() + .verify(); + ``` +- other specific techniques for verifying error - + - `.expectError(IllegalStateException.class)` + - `.expectErrorMessage("an overflow occurred")` +- sometimes we might have many items, we cant specify all of them in `expectNext` as we saw earlier. so, we can use following tricks - + - expect next count - specify count + ```java + Flux range = Flux.range(1, 50); + + StepVerifier.create(range) + .expectNextCount(48) + .expectNext(49, 50) + .expectComplete() + .verify(); + ``` + - consume while - consume till predicate is satisfied + ```java + Flux range = Flux.range(1, 50); + + StepVerifier.create(range) + .thenConsumeWhile((i) -> i <= 45) + .expectNext(46, 47, 48, 49, 50) + .expectComplete() + .verify(); + ``` +- custom assertions - + ```java + Mono book$ = Mono.just(Book.generate()); + + StepVerifier.create(book$) + .assertNext((book) -> assertNotNull(book.getAuthor())) + .expectComplete() + .verify(); + ``` +- e.g. for the flux below - + ```java + Flux flux$ = Flux.range(1, 5) + .delayElements(Duration.ofSeconds(3)) + .map((i) -> i * i); + + StepVerifier.create(flux$) + .expectNext(1, 4, 9, 16, 25) + .expectComplete() + .verify(); + ``` +- output - it actually takes 15 seconds or so for the test to execute! so, we can use **virtual time** + ```java + @Test + public void two() { + StepVerifier.withVirtualTime(this::flux) + .thenAwait(Duration.ofSeconds(30)) + .expectNext(1, 4, 9, 16, 25) + .expectComplete() + .verify(); + } + + private Flux flux() { + return Flux.range(1, 5) + .delayElements(Duration.ofSeconds(3)) + .map((i) -> i * i); + } + ``` +- the test runs immediately, with no delay. note - this did not work for me - `StepVerifier.withVirtualTime(() -> some_flux)`, but this did - `StepVerifier.withVirtualTime(method_that_returns_some_flux)` and probably this would work as well, not sure - `StepVerifier.withVirtualTime(() -> method_that_returns_some_flux())` +- verifying context - + ```java + Mono mono = Mono.deferContextual((ctx) -> { + if (ctx.hasKey("user")) return Mono.just("welcome " + ctx.get("user")); + return Mono.error(new RuntimeException("user not provided")); + }); + + // verifying error is easy + StepVerifier.create(mono) + .expectErrorMessage("user not provided") + .verify(); + + // we have to provide context to verify happy path + StepVerifierOptions options = StepVerifierOptions.create() + .withInitialContext(Context.of("user", "sam")); + StepVerifier.create(mono, options) + .expectNext("welcome sam") + .expectComplete() + .verify(); + ``` + +## Spring WebFlux + +- traditionally, with spring mvc, a single thread is used per request +- also, each thread consumes a certain amount of resources of our compute - so threads are expensive +- with webflux, io is done in a non blocking way - the thread is notified once the io request responds +- thus, the thread is utilized more efficiently in webflux +- assume a separate service is called by a spring mvc application and a spring reactive application. assume this service takes 5 seconds to respond + - by default, the spring mvc uses 200 threads. so, if we have 400 concurrent requests, 200 out of these 400 requests will have to "wait" for the threads to be free. however, remember that the while processing the first 200 requests, the threads are just sitting blocked for 5 seconds, waiting for the separate service to respond + - however, with spring webflux, we only have threads = number of cores i think, and the thread would not wait on the network calls +- reactive manifesto - + - lazy - only do work when required + - responsive - keep showing one post and load more when scrolled, do not block to load all posts at once + - resilient - do not fail the whole system due to one service in the system + - elastic - throughput of system scales automatically with varying demand + - message driven - loose coupling, asynchronous communication, e.g. rsocket +- spring mvc uses the traditional "servlet api" using "servlet container" (discussed [here](/posts/spring)) +- spring webflux uses "reactive http" using netty (by default), but can use undertow, servlet 3.x, etc +- netty working - it has two thread groups - thread group one has the one "master thread", which does things like handshake etc and queues the request. threads from thread group two - "worker threads" pick up something from the queue and perform the action. if the worker thread has to call another service, it would not wait for the response - the entire point behind reactive programming is not being blocked! it would pick up something else from the queue, and continue processing the original request when the response comes back. my doubt - does the response basically get added back to the queue, and does it happen that another thread from the worker thread group continues processing this request? maybe not, because access to variables (stack etc) might be lost? +- to create a project select "spring reactive web" from start.spring.io +- when using spring webmvc, its like our webserver is the publisher, and the browser, calling service, etc are like the subscribers +- reactive example - return the multiplication table - + ```java + @GetMapping("/multiplication-table/{input}") + public Flux multiplicationTable(@PathVariable Integer input) { + return reactiveMathService.calculateMultiplicationTable(input); + } + + public Flux calculateMultiplicationTable(Integer input) { + return Flux.range(1, 10) + .doOnNext((i) -> log.info("processing " + i)) + .doOnNext((i) -> Util.sleep(2)) + .map((i) -> ResponseDto.builder() + .output(i * input) + .build()); + } + ``` +- however, in above as well, 20 seconds of wait can be seen in chrome before the entire result is returned. to use streaming api, we only need to change the get mapping line - + ```java + @GetMapping(value = "/multiplication-table-streaming/{input}", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + ``` +- this way, our application also becomes responsive - show as and when data loads +- so, the difference is that when not using text event stream, spring would still behind the scenes collect the entire list of objects and then send the response. however, when using text event stream, spring would send the objects one by one. i think this does not mean we should always use text event stream, because our core service logic would still be performed in a reactive way, even if the response is not streaming +- if suppose we cancel a request - in case of spring mvc, the processing would not stop and would continue, unlike for the spring reactive method above, where the we would not see any more "log statements" once the request is cancelled. so, spring reactive only does work when required +- request body can be read in a non blocking way as well - + ```java + @RequestBody Mono multiplicationRequestDto + ``` +- my understanding - if we do not use mono, the request body would have to be deserialized before the controller method being called, unlike when we use mono. however, the deserialization in both cases does happen in a non blocking way, so we should be good for the most part? +- exception handling, my understanding - either we can just write `throw new ...Exception...` etc or use the reactive way, e.g. `sink.error`, both work i.e. both will work with `@ControllerAdvice` and `@ExceptionHandler`, both ways get picked up by the `server.error...` properties we had discussed [here](/posts/spring), etc + ```java + public Mono calculateProduct(Mono multiplicationRequestDto) { + return multiplicationRequestDto.handle((dto, sink) -> { + if (dto.getFirst() <= 0 || dto.getSecond() <= 0) { + // option 1 + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "input numbers should be greater than 0"); + + // option 2 - feels like the better way, but both work according to me + sink.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "input numbers should be greater than 0")); + } else { + sink.next(ResponseDto.builder() + .output(dto.getFirst() * dto.getSecond()) + .build()); + } + }); + } + ``` +- functional endpoints - while the above works, this is an alternative method as well, to for e.g. obey a more functional style of programming + ```java + @Configuration + @RequiredArgsConstructor + public class RouterConfig { + + private final ReactiveMathService reactiveMathService; + + @Bean + public RouterFunction serverResponseRouterFunction() { + + return RouterFunctions.route() + .path("/functional-reactive-math", (builder) -> builder + .GET("/square/{input}", (request) -> { + Integer input = Integer.parseInt(request.pathVariable("input")); + Mono product = reactiveMathService.calculateSquare(input); + return ServerResponse.ok().body(product, ResponseDto.class); + }) + + .GET("/multiplication-table/{input}", (request) -> { + Integer input = Integer.parseInt(request.pathVariable("input")); + Flux table = reactiveMathService.calculateMultiplicationTable(input); + return ServerResponse.ok().body(table, ResponseDto.class); + }) + + .GET("/multiplication-table-streaming/{input}", (request) -> { + Integer input = Integer.parseInt(request.pathVariable("input")); + Flux table = reactiveMathService.calculateMultiplicationTable(input); + return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM).body(table, ResponseDto.class); + }) + + .POST("/product", (request) -> { + Mono body = request.bodyToMono(MultiplicationRequestDto.class); + Mono product = reactiveMathService.calculateProduct(body); + return ServerResponse.ok().body(product, ResponseDto.class); + })) + .build(); + } + } + ``` +- note how we - + - use one `RouterFunction` to symbolize one controller + - extract path variable (square) + - extract request body (product) + - use streaming response (multiplication-table) + - use `@RequestMapping` on controller class like feature (`.path()`) +- my understanding - recall how we could have `@ExceptionHandler` inside a controller to handle exceptions specific to a controller? for the functional style, we can achieve the same by chaining onError. hopefully, i never have to use this 🤣 +- the builder pattern above also allows for request predicates i.e. only execute if condition is satisfied - + ```java + .GET("/square/{input}", RequestPredicates.path(".*/1?"), (request) -> { // ... + ``` +- so, we get 404 if we ask for square of anything not in the range 11-19. the entire builder is executed from top to down, so we can also have different ways of handling as follows. note how the last one is like a catch all + ```java + .GET("/square/{input}", RequestPredicates.path(".*/1?"), (request) -> { // ... + .GET("/square/{input}", RequestPredicates.path(".*/2?"), (request) -> { // ... + .GET("/square/{input}", (request) -> { // ... + ``` +- spring boot has **rest template** for making network calls, but it is blocking. so, we use **web client** for spring reactive +- constructing a web client - + ```java + @Bean + public WebClient webClient() { + return WebClient.builder() + .baseUrl("http://localhost:8080") + .defaultHeaders((headers) -> headers.setBasicAuth("username", "password")) + .build(); + } + ``` +- web client test - + ```java + @Test + public void webClientTest() { + + Flux response = webClient.get() + .uri("/reactive-math/multiplication-table-streaming/{input}", 7) + .retrieve() + .bodyToFlux(ResponseDto.class); + + StepVerifier.create(response) + .expectNextCount(7) + .assertNext((dto) -> assertEquals(56, dto.getOutput())) + .assertNext((dto) -> assertEquals(63, dto.getOutput())) + .assertNext((dto) -> assertEquals(70, dto.getOutput())) + .expectComplete() + .verify(); + } + ``` +- note - the above test would work for both streaming and non streaming response type! +- similarly, post request test - + ```java + Mono request = Mono.fromSupplier(() -> new MultiplicationRequestDto(6, 7)); + Mono response = webClient.post() + .uri("/reactive-math/product") + .body(request, MultiplicationRequestDto.class) + .retrieve() + .bodyToMono(ResponseDto.class); + + StepVerifier.create(response) + .assertNext((dto) -> assertEquals(42, dto.getOutput())) + .expectComplete() + .verify(); + ``` +- note - here, the format is `body(mono(obj), class)`. it can also be `bodyValue(obj)` based on our use case +- for testing error scenarios, recall we can chain `expectError` etc when using `StepVerifier` +- till now, we were chaining `.retrieve()`. but it only gives access to body, not status code etc. for asserting on them lot, we can use `.exchange()` instead of `.retrieve()` (not discussed here) +- adding request parameter when using web client - note how instead of providing a hardcoded string inside the uri, we now use the builder + ```java + .uri(builder -> builder.path("/reactive-math/stream").query("a={a}&b={b}").build(2, 4)) + ``` +- attributes - help influence the "central configuration" of web client dynamically - when we use web client somewhere in the code, we pass it "attributes" - and these attributes change how web client make calls, which was configured in the "central configuration" - below, we are expected to send an attribute for auth type from the place we actually make the request, and then the configuration decides how to generate auth details for every request (using filter), which extracts the attribute and accordingly modifies the request + ```java + @Bean + public WebClient webClient() { + return WebClient.builder() + .baseUrl("http://localhost:8080") + .filter(this::filter) + .build(); + } + + private Mono filter(ClientRequest request, ExchangeFunction exchangeFunction) { + Optional authType$ = request.attribute("auth-type"); + ClientRequest modifiedRequest = authType$ + .map((authType) -> authType.equals("basic") ? addBasicAuth(request) : addTokenAuth(request)) + .orElse(request); + return exchangeFunction.exchange(modifiedRequest); + } + + private ClientRequest addBasicAuth(ClientRequest originalRequest) { + return ClientRequest.from(originalRequest) + .headers((headers) -> headers.setBasicAuth("user", "password")) + .build(); + } + + private ClientRequest addTokenAuth(ClientRequest originalRequest) { + return ClientRequest.from(originalRequest) + .headers((headers) -> headers.setBearerAuth("just-the-token")) + .build(); + } + ``` +- webclient will help with http requests, but what about database calls? they are not http, they are a custom protocol on top of tcp. so, we have different drivers for different databases +- difference in return type of blocking vs reactive of mongo driver - + + | operation | blocking | non blocking | + |------------|-------------|--------------| + | find by id | Optional | Mono | + | find all | List | Flux | + | count | Long | Mono | + | exists | Boolean | Mono | + +- a very simple crud service for mongodb - + ```java + @Service + @RequiredArgsConstructor + public class ProductService { + + private final ProductDao productDao; + + private final ProductMapper productMapper; + + public Flux findAll() { + return productDao.findAll() + .map(productMapper::map); + } + + public Mono findById(String id) { + return productDao.findById(id) + .map(productMapper::map); + } + + public Mono create(Mono productDto) { + return productDto.map(productMapper::map) + .flatMap(productDao::save) + .map(productMapper::map); + } + + public Mono update(String id, Mono update) { + return productDao.findById(id) + .flatMap((_existing) -> update) + .doOnNext((dto) -> dto.setId(id)) + .map(productMapper::map) + .flatMap(productDao::save) + .map(productMapper::map); + } + + public Mono deleteById(String id) { + return productDao.deleteById(id); + } + } + ``` +- data layer - + ```java + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + @Document(collection = "products") + public class ProductEntity { + + @Id + private String id; + + private String description; + + private Integer price; + } + + @Repository + public interface ProductDao extends ReactiveMongoRepository { + } + ``` +- we cannot (should not) use spring data jpa / hibernate / jdbc, because they are all blocking in nature, and therefore we lose out on the performance benefits of reactive programming +- we will use r2dbc - which feels like non blocking alternative to jdbc +- we use spring data r2dbc - which i think sits on top of the r2dbc, thus simplifying development +- i think as an alternative to r2dbc / spring data r2dbc, we can also use hibernate reactive, which probably would be closer to jpa +- r2dbc does not support relationships 😢. so, we can use tricks like `on delete cascade` in our ddl to avoid errors when deleting an entity, since we can no longer specify `CascadeType.ALL` etc on the mapping + ```java + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + @Table(name = "`user`") + public class UserEntity { + + @Id + private Integer id; + + private String name; + + private Integer balance; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + @Table(name = "transaction") + public class TransactionEntity { + + @Id + private Integer id; + + private Integer userId; + + private Integer amount; + + private Instant transactionDate; + } + ``` +- e.g. user to transaction is one to many. we want to create a transaction and reduce the balance of the user. so, we first check if the user has enough balance and reduce the balance. if there was a row with an update, the boolean returned would be true, post which we can process it further + ```java + @Repository + public interface UserDao extends ReactiveCrudRepository { + + @Query("update `user` set `user`.balance = `user`.balance - :amount where `user`.id = :userId and `user`.balance >= :amount") + @Modifying + Mono updateBalance(Integer userId, Integer amount); + } + + public Mono create(Integer userId, Mono request) { + return request.flatMap((dto) -> + userDao.updateBalance(userId, dto.getAmount()) + .filter((updated) -> updated) + .flatMap((_updated) -> transactionDao.save(transactionMapper.map(dto))) + ) + .map((_entity) -> TransactionStatus.APPROVED) + .defaultIfEmpty(TransactionStatus.DECLINED); + } + ``` +- we can use jpa with webflux, i think some point to note - + - remember it is blocking, so we should additionally chain a `publishOn` / `subscribeOn` + - we should use for e.g. `Flux.fromStream(() -> repo.findAl().stream())`, if we were to use `Flux.fromIterable(repo.findAll())`, i think it would defeat the point + ```java + public Flux findAll(Integer userId) { + // orderDao is a normal jpa repository, not r2dbc + return Flux.fromStream(() -> orderDao.findAllByUserId(userId).stream()) + .subscribeOn(Schedulers.boundedElastic()) + .map(orderMapper::map); + } + ``` + - also see how we chain with `.map()` when calling `save`, not with `.flatMap`, since recall it returns a normal object unlike when using spring reactive data, which returns the object wrapped with `Mono` +- [a "context" pattern](https://stackoverflow.com/a/77592888/11885333). this is all my logic btw lol - when we have several interactions with several services, we need some properties of some objects, some properties of some other objects, etc. remember that with a functional / declarative style that comes with reactive programming, we do not have access to all objects in the method - we only can access previous chained call's return value. so, we can instead use a helper context object where we store all interactions, so that they can be easily accessed at any time + ```java + public Mono fulfill(Mono orderRequest) { + + Context ctx = new Context(); + + return orderRequest + // record request into context + .doOnNext(ctx::setOrderRequestDto) + // get product from product service + .flatMap((_v) -> productService.getProduct(ctx.getOrderRequestDto().getProductId())) + // record product into context + .doOnNext(ctx::setProductDto) + // deduct amount by calling user service - note how it involves using both original request and product + .flatMap((_v) -> userService.createTransaction(ctx.getOrderRequestDto().getUserId(), ctx.getProductDto().getPrice())) + // record status of response into context + .doOnNext(ctx::setTransactionStatus) + // build the order based on transaction status (if user had enough amount to pay for product), actual product, etc + .map((_v) -> orderMapper.map(ctx.getProductDto(), ctx.getOrderRequestDto(), ctx.getTransactionStatus())) + // record the built order entity into context + .doOnNext(ctx::setOrderEntity) + // save the order (using map, not flatMap since this is not r2dbc) + .map((_v) -> orderDao.save(ctx.getOrderEntity())) + // create response + .map((_v) -> orderMapper.map(ctx.getOrderEntity())) + // use subscribe on, since jpa repo.save is a blocking call + .subscribeOn(Schedulers.boundedElastic()); + } + + @Data + class Context { + + private OrderRequestDto orderRequestDto; + + private ProductDto productDto; + + private TransactionStatus transactionStatus; + + private OrderEntity orderEntity; + } + ``` +- a simple way to implement sse (server sent events). recall we had already discussed `TEXT_EVENT_STREAM_VALUE`. we can combine it with the concept of sinks for live updates in ui! + ```java + @Service + public class ProductService { + + // ... + + private final Sinks.Many productsSink; + + @Getter + private final Flux productsFlux; + + public ProductService(ProductDao productDao, ProductMapper productMapper) { + // ... + productsSink = Sinks.many().replay().all(); + productsFlux = productsSink.asFlux(); + } + + public Mono create(Mono productDto) { + // ... + .doOnNext(productsSink::tryEmitNext); + } + + public Mono update(String id, Mono update) { + // ... + .doOnNext(productsSink::tryEmitNext); + } + } + + // ... + @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public Flux findAllStream() { + return productService.getProductsFlux(); + } + ``` +- `WebTestClient` - testing routers, controllers, controller advice, etc + ```java + @SpringBootTest + @AutoConfigureWebTestClient + public class OneWebTestClientTest { + + @Autowired + WebTestClient client; + + @Test + void test() { + Flux response = client.get() + .uri("/reactive-math/square/{n}", 4) + .exchange() + .expectStatus().isOk() + .expectHeader().contentType(MediaType.APPLICATION_JSON) + .returnResult(ResponseDto.class) + .getResponseBody(); + + StepVerifier.create(response) + .assertNext((dto) -> assertEquals(16, dto.getOutput())) + .expectComplete() + .verify(); + } + } + ``` +- note - feels like everything will be a flux, no concept of mono, but that should be fine? +- while we extracted response as a flux above, we can use fluent assertions as well - + ```java + .expectHeader().contentType(MediaType.APPLICATION_JSON) + .expectBody() + .jsonPath("$.size()").isEqualTo(4) + .jsonPath("$[0].output").isEqualTo(4) + .jsonPath("$[1].output").isEqualTo(8) + .jsonPath("$[2].output").isEqualTo(12) + .jsonPath("$[3].output").isEqualTo(16); + ``` +- above is example of integration test, slow +- unit test is fast - we test nth layer and assume (n - 1)th layer works, and thus for e.g. mock it +- unit test controller logic using `WebClientTest` + ```java + @WebFluxTest({ReactiveMathController.class}) + public class TwoWebTestClientTest { + + @Autowired + WebTestClient client; + + @MockBean + ReactiveMathService reactiveMathService; + + @Test + void test() { + when(reactiveMathService.calculateSquare(4)) + .thenReturn(Mono.just(ResponseDto.builder().output(16).build())); + + // rest stays the same as the integration test! + } + } + ``` +- diff --git a/_posts/2023-12-04-java.md b/_posts/2023-12-04-java.md new file mode 100644 index 0000000..6949abb --- /dev/null +++ b/_posts/2023-12-04-java.md @@ -0,0 +1,2211 @@ +--- +title: Java +--- + +## Object Oriented Programming + +### Basics + +- a java program can have any number of classes. the classes can have any name and the java program can have any name + - however, only one public class is allowed in a java program + - the name of both the public class and the java program should be the same +- when we compile a class using `javac Durga.java`, the number of class files generated = number of classes present in that program + ```java + class A { + + public static void main(String args[]) { + System.out.println("class A"); + } + } + + class B { + + public static void main(String args[]) { + System.out.println("class B"); + } + } + + class C { + } + ``` +- output of above program -
+ ![java main output](/assets/img/java/java-main-output.png) +- three pillars of object oriented programming + - encapsulation - helps with **security** + - data hiding (visibility) + - abstraction + - inheritance - helps with **reusability** + - polymorphism - helps with **flexibility** + - compile time - + - overloading + - method hiding + - variable hiding / shadowing + - runtime - + - overriding + +### Import Statements / Package + +- two ways for using classes from libraries - + - fully qualified name of the class + - import statement at the top - preferred +- two kinds of import statements - + - **explicit import** - `import java.util.ArrayList;` - preferred + - **implicit import** - `import java.util.*;` + - note - implicit import does not include sub packages +- by default - + - all classes under `java.lang` package are available and need not be imported + - all classes under the same package as the package of the current class need not be imported +- **package** - group of related java programs +- different packages can have the same java program, e.g. `java.util.Date` and `java.sql.Date` +- universally accepted naming convention for package naming in java - reverse of domain name +- if we write the following program - + ```java + package com.learning.java; + + class Test { + public static void main(String args[]) { + System.out.println("hello world"); + } + } + ``` +- and try compiling using `javac Test.java`, it compiles. but when i tried running `java Test.java`, it failed + ``` + Error: Could not find or load main class Test + Caused by: java.lang.NoClassDefFoundError: Test (wrong name: com/learning/java/Test) + ``` +- so we should actually compile using - `javac -d . Test.java` +- this generates the entire directory structure of com/learning/java in the current working directory and places the Test.class there +- packages help with implementing **encapsulation** - the entire complexity / functionality is viewed as one unit residing inside a package + +### Class and Method Access Modifiers + +- classes have two different **access modifiers** - `public` and `<>` + - **default** classes are only accessible from only within the package + - **public** classes can be accessed from anywhere outside the package as well +- for inner class, apart from `abstract`, `final`, `public` and `<>`, we can also have `static`, `private` and `protected` modifiers +- **members** have four different **access modifiers** - + - **public** - access method from anywhere, inside or outside package + - **default** - can be accessed from inside package only, not outside the package + - **private** - can only be accessed from within the same class, not outside the class + - **protected** - can be accessed from anywhere inside package, and from subclasses if outside package as well + - small note - if accessing protected members from inside subclass but from outside package, only subclass reference can be used, not superclass (i.e. even polymorphism is not allowed) +- protected example - + - a/A.java - + ```java + package a; + + public class A { + + protected void a() { + System.out.println("from a"); + } + } + ``` + - b/B.java - + ```java + package b; + import a.A; + + class B extends A { + + public static void main(String[] args) { + A a = new A(); + a.a(); + } + } + ``` + - output -
+ ![protected caveat](/assets/img/java/protected-caveat.png) + - solution - change to - + ```java + B b = new B(); + b.a(); + ``` +- therefore, summary in tabular form - + + | visibility | public | protected | default | private | + |--------------------------------|--------|------------------------------|---------|---------| + | same class | ✅ | ✅ | ✅ | ✅ | + | subclass same package | ✅ | ✅ | ✅ | | + | non subclass same package | ✅ | ✅ | ✅ | | + | subclass different package | ✅ | ✅ (subclass reference only) | | | + | non subclass different package | ✅ | | | | + +- access modifiers help with - **data hiding** - a different class cannot "directly" access the fields of another class - it would have to use public methods +- note - think about member visibility only when class is visible first (recall default vs public) +- access modifiers also help achieve **encapsulation** - interact with data members via exposed methods, not directly + +### Abstract Classes And Interfaces + +- `abstract` modifier is applicable for both methods and classes +- abstract method is used when we do not know about the implementation of the class upfront. e.g. Vehicle class can have an abstract method `getNumberOfWheels`. syntax - + ```java + public abstract Integer getNumberOfWheels(); + ``` +- if a class contains *even one* abstract method, it would have to be declared as abstract as well +- if a class is `abstract`, instantiation is not possible for the class +- also, if for e.g. we would not like for it to be possible to instantiate a class, we can declare it as abstract even if it does not have abstract methods +- subclasses are responsible to provide the implementation of the abstract methods of super class +- we can have multiple levels of nesting for abstract classes as well - abstract class Vehicle -> abstract class Car -> class RangeRover +- **interface methods are `public` and `abstract` without us specifying anything** +- so, when overriding in subclass, "method should be public" +- when **implementing** an interface - + - either override all the methods of the interface + - or make the class itself abstract +- code example - + ```java + interface I { + + void m1(); + void m2(); + } + + abstract class A implements I { + + public void m1() { + } + } + ``` +- abstract variables are not supported - so only one kind of member i.e. method is allowed for abstract, not variable +- so why use abstract classes and interfaces - + - **mandating a structure for an implementation** - "mandates" subclasses to provide implementation, else there will be compile time error + - **acting as a specification / contract** - e.g. we write servlet api compliant code, but that same code can run on different vendors like jetty, tomcat, weblogic, resin, oracle http server, etc which are all implementations of the same servlet api. same applies for jdbc and the different sql compliant drivers as well. + - **abstraction** - client will not know / need not care about the internal implementation +- note - all variables inside an interface are public static final, so they need to be initialized then and there. no instance variables can be created for an interface + +### Inheritance + +- inheritance helps use **is a relationship** +- we use `extends` to implement this +- members of the **superclass** are **inherited** by the **subclass** +- so, subclass can use members of the superclass +- the other way around does not hold i.e. superclass reference cannot use members of subclass +- all classes are implicitly subclasses of `Object` +- main advantage of inheritance - superclass will contain common functionality, thus helping us avoid duplication of logic in subclasses +- types of inheritance - + - **single inheritance** - one superclass and one subclass. supported in java + - **multilevel inheritance** - one superclass has one subclass, and that subclass again acts as a superclass for yet another subclass. this too is supported in java + - **multiple inheritance** - multiple superclasses, one subclass. not supported in java for classes, but supported via interfaces + ```java + class C1 extends C2, C3 {} // compilation error + + interface I1 extends I2, I3 {} // works + class C1 implements I1, I2 {} // works + ``` + - **hierarchical inheritance** - one superclass, multiple subclasses + - **hybrid inheritance** - combination of multiple types of inheritance +- inheritance example -
+ ![inheritance](/assets/img/java/inheritance.drawio.png) +- confusion cleared - we just said every class extends object. if a class C1 extends another class C2, it is extending both C2 and Object. then isn't this multiple inheritance? why did we say java does not allow multiple inheritance? + - when we do not extend any class, we extend Object implicitly + - when we extend a different class, we do not extend Object directly. so, the root class in the chain which does not have any explicit superclass extends Object implicitly. so it is basically multi level inheritance and not multiple inheritance which helps extend this subclass extend Object indirectly +- note - `final` class cannot have a subclass + +### Polymorphism - Overloading + +- **method signature** - method name + argument types +- in java, **return type is not a part of method signature** +- when resolving method calls, method signature is what gets used +- so, it is a compile time error if we try to add two methods with same signature, even if they have different return types +- **overloading** - when a class has multiple method names with same but different argument types +- advantage - same method is being used for multiple implementations +- **static polymorphism** / **compile time polymorphism** / **early binding** - in case of overloading, the decision around which variation of method to use is made at compile time +- example - + ```java + class Overloader { + + public void printer(int x) { + System.out.println("printing an integer: " + x); + } + + public void printer(String x) { + System.out.println("printing a string: " + x); + } + } + + public class Overloading { + + public static void main(String[] args) { + Overloader overloader = new Overloader(); + overloader.printer(1); // printing an integer: 1 + overloader.printer("hello"); // printing a string: hello + } + } + ``` +- **automatic promotion** + overloading in java - if when overloading, an _exact_ match is not found for a primitive type, java promotes to the next available primitive type using the following rules - + - byte -> short -> int -> long -> float -> double + - char -> int -> ... +- so, if refer the example above - there is no overloaded method for char. so, we jump to the next type as follows - + ```java + overloader.printer('a'); // printing an integer: 97 + ``` +- if no promotion is possible, we get a compile time error - + ```java + overloader.printer(10.5); // Overloading.java:19: error: no suitable method found for printer(double) + ``` +- if there is a clash during overloading for superclass vs subclass, subclass gets priority +- e.g. `null` can be used both for `Object` and `String`. so, if a method is overloaded for both of them and we pass it `null`, it will call the `String` implementation +- if there is clash during overloading for two classes which are independent, compiler throws an unambiguous exception +- e.g. `null` can be used both for `String` and `StringBuffer`. so, if a method is overloaded for both of them and we pass it `null`, it will throw an exception + ```java + overloader.printer(null); // Overloading.java:24: error: reference to printer is ambiguous + ``` +- since method overloading is compile time, the decision is influenced by the reference, not by the instance +- e.g. if i do `Object x = new String("s")`, and a method is overloaded for both `String` and `Object`, the object version would be called, since the decision is made by the type of reference - if i have two variations - `m1(Object obj)` and `m1(String str)`, the `m1(Object obj)` variation would be called + +### Polymorphism - Overriding + +- superclass reference can hold subclass instance +- the other way around does not hold i.e. subclass reference can not hold superclass instance +- **overriding** - subclass redefines method of superclass +- variations - + - superclass reference pointing to superclass instance - superclass method would be called + - subclass reference pointing to subclass instance - subclass method would be called + - superclass reference pointing to subclass instance - subclass method would be called +- the third variation is what interests us - compiler only checks if superclass has that method defined +- the method is called actually called on the instance during execution +- **dynamic polymorphism** / **runtime polymorphism** / **late binding** - in case of overriding, the decision around which variation of method to use is made at runtime +- **co variant** - when overriding, we can return subclass type of what superclass returns + ```java + class Parent { + public Object m1() { + return null; + } + } + + class Child extends Parent { + public String m1() { + return "hello world"; + } + } + + class CoVariant { + public static void main(String[] args) { + Parent p = new Child(); + System.out.println("covariant response = " + p.m1()); // covariant response = hello world + } + } + ``` +- if superclass method is final, we cannot override the method and we get a compile time error +- if superclass method is non final, we can override the method, and can also make it final in the subclass +- if method is private, there is no concept of overriding, since it is treated like an internal method. so, even if we redefine the method with the same name in the subclass, the compiler would not complain +- access modifiers + overriding - when overriding, we cannot reduce the scope, but we can increase the scope + ```java + class Parent { + public String m1() { + return "from parent"; + } + } + + class Child extends Parent { + protected String m1() { + return "from child"; + } + } + ``` +- output - + ``` + attempting to assign weaker access privileges; was public + ``` +- so, conclusion for access modifiers and overriding - for `private` methods, overriding concept is not applicable, for others - + - superclass - `public`, subclass can be - `public` + - superclass - `protected`, subclass can be - `protected`, `public` + - superclass - `default`, subclass can be - `default`, `protected`, `public` +- exception - below is **of course** only applicable for checked exceptions and not unchecked exceptions. below will make sense automatically as well if we think about `Parent p = new Child(); p.m1();` + - if subclass does not throw an exception, superclass can or cannot throw an exception + - if subclass throws an exception, superclass should throw a superclass of exception as well +- superclass `public static void m1()`, subclass - `public void m1()` - compile time error +- subclass `public void m1()`, superclass - `public static void m1()` - compile time error +- subclass `public static void m1()`, superclass - `public static void m1()` - works, but it is not overriding. it is **method hiding**. this resolution is compile time, happens by reference, and the superclass version is called + ```java + class Parent { + public static String m1() { + return "hello from parent"; + } + } + + class Child extends Parent { + public static String m1() { + return "hello from child"; + } + } + + class MethodHiding { + public static void main(String[] args) { + Parent p = new Child(); + System.out.println("parent reference, child object responds with = " + p.m1()); + } + } + ``` +- output - + ``` + parent reference, child object responds with = hello from parent + ``` +- conclusion - **method hiding** is also example of **compile time polymorphism** / **static polymorphism** / **early binding** just like **overloading** +- **variable hiding / shadowing** - there is no concept of overriding for variable members. so, if we redefine the vairable in the child class as well, resolution happens via superclass + ```java + class Parent { String s = "parent"; } + class Child extends Parent { String s = "child"; } + + class VariableShadowing { + public static void main(String[] args) { + Parent p = new Child(); + System.out.println(p.s); // prints 'parent' + } + } + ``` +- TODO: add double dispatch? + +### Object Type Casting + +- syntax - `A b = (C) d` +- three checks - + - compile time check 1 - C and d should be somehow related. either should be superclass of other + - passes compilation - + ```java + Object o = new String("hello world"); + StringBuffer sb = (StringBuffer) o; + ``` + - fails compilation - `incompatible types: String cannot be converted to StringBuffer` + ```java + String str = new String("hello world"); + StringBuffer sb = (StringBuffer) str; + ``` + - compile time check 2 - obvious - C should be subclass of A or same as A + - passes compilation - + ```java + Object o = new String("hello world"); + StringBuffer sb = (StringBuffer) o; + ``` + - fails compilation - `incompatible types: StringBuffer cannot be converted to String` + ```java + Object o = new String("hello world"); + String s = (StringBuffer) o; + ``` + - runtime check 1 - actual instance d should be subclass of C or same as C. understand how this is different from compile time check 1 - there, we were checking if whatever reference is used for d, that should be somehow related to C. here however, we check if the actual runtime object that d holds is a subclass of C or same as C + - passes runtime - + ```java + Object o = new String("hello world"); + String s = (String) o; + ``` + - fails runtime - `ClassCastException: class java.lang.String cannot be cast to class java.lang.StringBuffer` + ```java + Object o = new String("hello world"); + StringBuffer sb = (StringBuffer) o; + ``` + +## Constructors + +- constructor helps with **initialization** +- `new` keyword helps with **instantiation** +- for constructor, method name should be same as the name of class +- only applicable modifiers for constructors are access modifiers +- use case - make the constructor `private`. now, an object for the class can only be created from inside the class. this can help us for e.g. implement the **singleton pattern** +- **if we do not add any constructor** for a class, the compiler adds the **default no args constructor** for us automatically +- note - this default no args constructor is added for abstract classes as well +- first line in our constructor should always be `super()` or `this` +- if we do not add the super call ourselves, the compiler will automatically add `super()` for us +- note - this automatic adding of super happens for both constructors written by us and inside the default no args constructor +- convoluted example - + - our code - + ```java + class Test { + + Test(int i) { + this(); + } + + Test() { + + } + } + ``` + - what compiler generates + ```java + class Test { + + Test(int i) { + this(); + } + + Test() { + super(); + } + } + ``` +- when we have code like below, we get a compilation error because when the compiler generates `super()` automatically, it is not enough since the superclass only one constructor - the one we manually wrote, and it requires an argument, which the compiler is not capable of defaulting + ```java + class Parent { + Parent(int i) {} + } + + class Child extends Parent { + } + ``` +- error - + ``` + Test.java:5: error: constructor Parent in class Parent cannot be applied to given types; + class Child extends Parent { + ^ + required: int + found: no arguments + reason: actual and formal argument lists differ in length + 1 error + ``` +- note - super has to be the first line, otherwise we get `error: call to super must be first statement in constructor` +- note - this has to be the first line, otherwise we get `error: call to this must be first statement in constructor` +- so, conclusion - we can only use either `super()` or `this()` and that too only in the first line of the constructor +- `super()` or `this()` can only be called inside a constructor and not inside any other method +- `this` and `super` keywords can also be used to reference instance variables +- note - `this` and `super` are always related to an instance, so they cannot be used inside `static` methods +- my doubt - how to handle variable hiding / shadowing for static variables? solution - maybe use class prefix instead of super? +- constructor + overloading is a common pattern. we then can use `this()` inside them to call each other with default values for missing arguments +- a constructor can throw exceptions +- however, if superclass constructor throws an exception, the subclass constructor should throw the same exception or superclass exception of that exception. we cannot wrap with try catch, since super or this should be the first call + +## Strings + +- **string** is **mutable**, **string buffer** objects are **immutable** + ```java + class Introduction { + + public static void main(String[] args) { + String s = new String("Durga"); + s.concat(" Software"); + System.out.println(s); // Durga + + StringBuffer sb = new StringBuffer("Durga"); + sb.append(" Software"); + System.out.println(sb); // Durga Software + } + } + ``` +- `==` is for reference comparison. `equals` in `Object` class works just like `==`, but sometimes subclasses can override this method, e.g. `String` class below overrides it for content comparison, while `StringBuffer` does not + ```java + class Equality { + + public static void main(String[] args) { + + String s1 = new String("durga"); + String s2 = new String("durga"); + System.out.println(s1 == s2); // false + System.out.println(s1.equals(s2)); // true + + StringBuffer sb1 = new StringBuffer("durga"); + StringBuffer sb2 = new StringBuffer("durga"); + System.out.println(sb1 == sb2); // false + System.out.println(sb1.equals(sb2)); // false + } + } + ``` +- heap is used for storing objects. string objects can be created when we use `new String()`, `str.concat("suffix")`, etc +- **scp (string constant pool)** is used for storing string literals. java stores them in the hopes of reusing them later +- note - scp a section in the heap itself, maybe it is present in a different location when compared to where java objects are stored +- while objects in heap are eligible for **gc (garbage collection)**, objects in scp are not, because java internally maintains references to the string literals stored in scp +- deeper understanding - scp is used for storing string literals. if i do `str.concat("suffix")`, suffix would be stored in scp, not concatenated result of str and suffix. the concatenated result will however be stored in heap +- so, it almost feels like that albeit in heap, scp is more of a compile time feature, while string objects are a runtime feature +- 2 in heap - (s1, String("durga")), (s2, String("durga")) and 1 in scp - "durga". s3 and s4 point to scp itself, while s1 and s2 point to both heap and scp. note how despite having the same string 4 times, it was stored only once in scp + ```java + String s1 = new String("durga"); + String s2 = new String("durga"); + String s3 = "durga"; + String s4 = "durga"; + ``` +- 3 in heap, out of which 1st and 2nd are eligible for gc - (,String("durga")), (,String("durga software")), (s, String("durga software solutions")) and 3 in scp - "durga", " software", " solutions" - + ```java + String s = new String("durga"); + s.concat(" software"); + s = s.concat(" solutions") + ``` +- in below examples, we compare equality using `==` and not `equals`, maybe because equals should anyway do content comparison, but here we see which references point to the same object +- equality of string literals - (equals compares reference and if not same, contents, while == just compares reference, and that evaluates to true since sl1 and sl2 are both pointing to the same object inside scp) + ```java + String sl1 = "durga"; + String sl2 = "durga"; + System.out.println(sl1 == sl2); // true + ``` +- concatenation for string literals can happen at compile time as well, which is why slc1 and slc2 point to the same object stored in the scp. this is probably happening due to optimizations that are performed on instructions + ```java + String slc1 = "durga software"; + String slc2 = "durga " + "software"; + System.out.println(slc1 == slc2); // true + ``` +- here, str2 is created at runtime, so str2 points to string object in heap while str3 points to string literal in scp. str2 does not point to a corresponding object in scp in this case + ```java + String str1 = "durga"; + String str2 = str1 + " software"; + String str3 = "durga software"; + System.out.println(str2 == str3); // false + ``` +- here, both strf2 and strf3 are created at compile time hence scp itself, because final variables would be replaced at compile time. understand how this behavior changed when compared to the example above, just by adding the `final` keyword + ```java + final String strf1 = "durga"; + String strf2 = strf1 + " software"; + String strf3 = "durga software"; + System.out.println(strf2 == strf3); // true + ``` +- the main advantage of scp - if a string is used multiple times, its instance need not be managed / tracked separately multiple times +- basically, jvm maintains a reference to strings in scp, so that there is no garbage collection happening there +- also, strings in scp cannot be mutated - when we make changes, new objects are stored in heap / new strings are stored in scp +- string buffers do not work like strings - string buffers do not use concepts like scp etc - so it is mutable - there is no referencing to same object in scp like concepts in string buffer +- in strings, `concat` and `+` both do the same thing +- other important methods in strings - `equalsIgnoreCase()`, `charAt()`, `length()`, `isEmpty()`, `substring()`, `replace()` (replace a certain character), `indexOf()`, `lastIndexOf()`, `toLowerCase()`, `toUpperCase()`, `trim()` +- **string buffer** - string is not meant for string content that can change frequently +- strings are immutable - for every change, a new object is created +- this is why we need string buffer. all changes we make happen on the same object +- since string buffer is mutable, it has two concepts - `capacity` and `length`. `capacity` determines how many characters the string buffer can hold, while `length` gives the current number of characters the string buffer has +- when we run out of space, memory is doubled, a new object is created and all the existing characters are copied +- other important methods in string buffer - `capacity()` (get the current capacity), `setCharAt()`, `append()` (works with most primitive etc types), `insert()` (insert a string at a specific position), `delete()` (delete substring from specified positions), `reverse()` (reverse contents of string buffer), `ensureCapacity()` (increase capacity to specified capacity upfront) +- note - all methods inside string buffer are synchronized - run `javap java.lang.StringBuffer` in terminal to view the **profile** of string buffer + ``` + public synchronized int length(); + public synchronized int capacity(); + public synchronized void setCharAt(int, char); + // and so on... + ``` +- so, at a time, only one thread can operate on a `StringBuffer`, thus affecting performance of applications +- so, we can also use `StringBuilder` +- the apis of **string builder** are almost the same as string buffer - so, it is like a "non synchronized version of string buffer" - run `javap java.lang.StringBuilder` in terminal - + ``` + public void setCharAt(int, char); + public int capacity(); + public int length(); + // and so on... + ``` +- so higher performance at the cost of race conditions which we might have to take care of ourselves +- side note - strings are automatically thread safe since they are immutable +- **method chaining** - because most methods in `String`, `StringBuffer`, `StringBuilder` return the same object type, we can use method chaining technique + +## Exceptions + +- Throwable + - Exception + - RuntimeException + - ArithmeticException + - NullPointerException + - etc + - IOException - used when doing file related operations etc + - InterruptedException - used in multithreading related code etc + - etc + - Error +- **unchecked exceptions** + - runtime exceptions and its subtree + - error and its subtree +- everything else is **checked exception** +- **try with resources** - cleaner code, no need to call `close` explicitly, if they use the interface `AutoCloseable` + ```java + try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { + // ... + } + ``` +- note - what we declare / assign inside the try statement is final, and cannot be reassigned +- `Closable` extends `AutoClosable`. `Closable` throws `IOException`, while `AutoClosable` throws `Exception` which is more generic +- when we are handling exceptions, it might happen that we lose track of the original exception, and throw another exception which is not that relevant. e.g. + - reading from a resource fails due to missing file + - closing the resource fails due to null pointer because the resource was never initialized properly +- the eventual exception we get is the null pointer, but the missing file exception would have helped us more in identifying the root cause +- so, we can also use `ex.addSuppressed(Throwable t)` or `Throwable[] t = ex.getSuppressed()`. this way, we can also find the original cause behind the exception +- note - try with resources will automatically make use of suppressions for us bts +- another note - when using try with resources, the null pointer exception will be added as a suppression to the file not found exception, because understand that the main exception that happened in the try block was file not found exception, and the null pointer exception happened inside the finally block + ```java + class CustomResource implements AutoCloseable { + + public void read() { + throw new RuntimeException("could not read file"); + } + + @Override + public void close() { + throw new RuntimeException("a null pointer exception happened"); + } + } + + public class SuppressionExample { + + public static void main(String[] args) { + + try { + beforeJava7Way(); + } catch (Exception e) { + System.out.println(e.getMessage()); + for (Throwable t : e.getSuppressed()) { + System.out.println("suppress: " + t.getMessage()); + } + } + + try { + sinceJava7Way(); + } catch (Exception e) { + System.out.println(e.getMessage()); + for (Throwable t : e.getSuppressed()) { + System.out.println("suppress: " + t.getMessage()); + } + } + } + + private static void beforeJava7Way() { + CustomResource customResource = null; + try { + customResource = new CustomResource(); + customResource.read(); + } finally { + customResource.close(); + } + } + + private static void sinceJava7Way() { + try (CustomResource customResource = new CustomResource()) { + customResource.read(); + } + } + } + ``` +- output - + ``` + a null pointer exception happened + + could not read file + suppress: a null pointer exception happened + ``` +- we can also catch multiple exceptions using a single catch block + ```java + try { + + } catch (NullPointerException | ArrayOutOfBoundsException e) { + e.printStackTrace(); + triggerAlert(e); + } + ``` + +## Multi Threading + +### Concepts + +- there are two benefits of multithreading - **responsiveness** and **performance** +- _repeat - remember multithreading gives both the features above_ +- **concurrency** means performing different tasks on the same core. instead of waiting for one task to entirely complete first, we perform both simultaneously in a time-shared manner. it **increases responsiveness** +- **concurrency** is also called **multi tasking**. remember - we do not even need different cores for this +- **parallelism** means performing different tasks on different cores. it **increases performance** +- **throughput** is the number of tasks completed per unit time +- **latency** is the time taken per unit task +- how are the two different + - for optimizing throughput, since the tasks themselves are different, they just need to be scheduled on different threads in parallel, and that automatically increases the throughput. therefore, fewer considerations exist + - for optimizing latency, we would probably break a single task into smaller subtasks. considerations - + - what parts of the original task can be performed in parallel and which parts have to be done sequentially + - how to aggregate the smaller chunks of results into the final result +- in case of multithreading, components like **heaps get shared across the threads**, while components like **stack and instruction pointer are scoped to a single thread** +- what is stored inside the stack - + - local primitive types, e.g. if we declare an `int a = 1` inside a method + - **primitive formal parameters** - similar to above - `int add(int a, int b)` + - references created inside functions are stored in stack +- what is stored inside the heap - + - all the objects (not references) are stored in heap + - members of a class - **primitive values** and **non primitive references** - should be stored in heap - note how these when declared inside functions are stored in stacks as discussed above +- ideally this makes sense - remember, each thread is executing a different instruction, so each of them needs its own instruction pointer etc +- recall - a frame is created for every method call, and it can result with a stack overflow exception if we end up with too many frames +- heap belongs to a process, and all threads can write to / read from the heap at any given time. all objects are stored in the heap till there is a reference to them, after which they get garbage collected +- when we execute a program, it becomes a process i.e. it gets loaded into the memory from the disk and a thread is used to execute it +- there are often way more processes being executed than cores in a cpu. so, using **context switching**, one thread at a time gets cpu and, gets paused and another thread is scheduled on the cpu +- context switching has overhead, and doing a **lot of it can lead to** something called **thrashing** +- however, context switching between the threads of the same process is much cheaper than context switching between the threads of different processes, since a lot of components like heaps are reused +- when the operating system has to chose between scheduling multiple tasks on a thread, and if for e.g. it schedules a computationally expensive task first, it can lead to the **starvation** of other smaller tasks +- so, to combat issues like this, there are various algorithms used by the operating system to calculate the priority of a task +- we can also programmatically provide a priority **which gets used in the calculation above** +- a thing that struck me - when writing applications, do not base your conclusions off the computer you are running your code on, base it off how it would work on the server +- number of threads = number of cores is the best way to start, since context switching as discussed earlier consumes resources +- however, it is only optimal if the threads are always performing some computation, and never in blocked state. if the threads perform some io, then a thread performing some computation can take its place +- also, modern day computers use **hyper threading** i.e. the same physical core is divided into multiple virtual cores. this means that a core can run more than one thread in modern cpus + +### Thread Creation + +- we create an instance of `Thread` and to it, we pass an object of a class that implements `Runnable`. its `run` method needs to be overridden. all of this can be replaced by a lambda java 8 onwards + ```java + Thread thread = new Thread(() -> System.out.println("i am inside " + Thread.currentThread().getName())); + thread.start(); + ``` +- if instead of using `Runnable`, we extend the `Thread` class, we get access to a lot of internal methods +- when we run `Thread.sleep`, we instruct the os to not schedule that thread until the timeout is over +- note misconception - invoking this method does not consume any cpu i.e. it is not like a while loop that waits for 5 seconds +- we can set a name of a thread to make it helpful when debugging, using `thread.setName()` +- we can set a priority between 1 and 10 using `thread.setPriority` +- we can use `thread.setUncaughtExceptionHandler` to catch "unchecked exceptions" that might have occurred during the execution of the thread, and thus cleanup resources +- we can shut down the application entirely from any thread using `System.exit(0)` + +### Thread Coordination + +- the application will not terminate until all threads stop +- but, we might want to interrupt a thread so that the thread can maybe understand that the application wants to terminate, and accordingly handle cleaning up of resources + ```java + Thread thread = new Thread(new Task()); + thread.start(); + thread.interrupt(); + ``` +- the interruption can be handled gracefully in two ways as described below + - if our code throws an interrupted exception, calling `interrupt` will trigger it, and then we can handle it. other examples where this exception happens are for calls like `thread.join()` and `object.wait()` + ```java + public class Task implements Runnable { + + @Override + public void run() { + try { + Thread.sleep(20000); + } catch (InterruptedException e) { + System.out.println("[inside catch] i was interrupted..."); + } + } + } + ``` + - else we can check the property `isInterrupted` and handle it accordingly + ```java + public class Task implements Runnable { + + @Override + public void run() { + Date date = new Date(); + while ((new Date()).getTime() - date.getTime() < 10000) { + if (Thread.currentThread().isInterrupted()) { + System.out.println("[inside loop] i was interrupted..."); + break; + } + } + } + } + ``` +- **background / daemon threads** there might be a case when what the thread does need not be handled gracefully, and it is just an overhead for us to check for e.g. the `isInterrupted` continually. so, we can set the daemon property of the thread to true. this way when the thread is interrupted, it will be terminated without us having to handle it + ```java + Thread thread = new Thread(new Task()); + thread.setDaemon(true); + thread.start(); + thread.interrupt(); + ``` +- also, unlike normal threads, where the application does not close if any thread is running, a daemon thread does not prevent the application from terminating +- if we implement `Callable` instead of `Runnable`, we can also throw an `InterruptedException` when for e.g. we see that `isInterrupted` is evaluated to true. this means the parent thread calling this thread will know that it was interrupted in an adhoc manner +- threads execute independent of each other. but what if thread b depends on the results of thread a? +- **busy wait** - one way could be we run a loop in thread b to monitor the status of thread a (assume thread a sets a boolean to true). this means thread b is also using resources, which is not ideal +- so, we can instead call `threadA.join()` from thread b, thread b goes into waiting state till thread a completes +- we should also consider calling the join with a timeout, e.g. `threadA.join(t)` +- my understanding - if for e.g. the main thread runs the below. first, we start threads t1 and t2 in parallel of the main thread. now, we block the main thread by calling `t1.join()`. the main thread will be stopped till t1 completes + ```java + t1.start(); t2.start(); + t1.join(); t2.join(); + ``` +- scenario 1 - t1 completes before t2, the main thread resumes, and again will be stopped till t2 completes +- scenario 2 - t1 completes after t2. the main thread resumes and will not wait for t2 since it has already completed + +### Thread Pooling + +- **thread pooling** - reusing threads instead of recreating them every time +- tasks are added to a **queue**, and the threads pick them up as and when they become free +- so, when tasks are cpu intensive, we should have number of threads closer to core size, and when tasks are io intensive, we should have higher number of threads, but remember that - + - too many threads can cause performance issues as well due to context switching + - threads are not trivial to create, they are resource intensive +- java provides 4 kinds of thread pools - `FixedThreadPool`, `CachedThreadPool`, `ScheduledThreadPool` and `SingleThreadedExecutor` +- **fixed thread pool executor** - polls for tasks stored in a queue. there can be many tasks, but a set number of threads which get reused. the queue should be thread safe i.e. blocking + ```java + int numberOfProcessors = Runtime.getRuntime().availableProcessors(); + ExecutorService executorService = Executors.newFixedThreadPool(numberOfProcessors); + + executorService.execute(new Runnable() {...}); + ``` +- **cached thread pool executor** - it looks at its threads to see if any of them are free, and if it is able to find one, it will schedule this task on the free thread. else, it will spawn a new thread. too many threads is not too big of a problem, thanks to the keep alive timeout discussed later. however, expect **out of memory exceptions** if too many tasks are added to the executor, because threads are resource intensive + ```java + ExecutorService executorService = Executors.newCachedThreadPool(); + ``` +- to remember - threads occupy a lot of space in main memory, hence can cause out of memory exceptions if not controlled properly +- **scheduled thread pool executor** - it used a delay queue, so that the tasks get picked up by the threads after the specified delay or schedule. this means tasks might have to be reordered, which is done by the queue itself. `schedule` can help trigger the task after a certain delay, `scheduleAtFixedRate` can help trigger it like a cron at regular intervals while `scheduleAtFixedDelay` can help schedule the next task a fixed time period after the previous task was completed + ```java + ScheduledExecutorService executorService = Executors.newScheduledThreadPool(5); + executorService.schedule( + () -> System.out.println("hi from " + Thread.currentThread().getName()), + 5, + TimeUnit.SECONDS + ); + ``` +- **single thread pool executor** - like fixed thread pool executor with size of pool as one. the advantage is for e.g. all the tasks will be run in order of creation +- all thread pool executors create new threads if the previous thread is killed for some reason +- there are a variety of parameters that can be added to the executors +- **core pool size** - minimum number of threads that are always kept in the pool +- **max pool size** - maximum number of threads that can be present in the thread pool. it has value `INTEGER.MAX_VALUE` by default for cached and scheduled thread pool executor, while the same value as core pool size for fixed and single thread pool executor +- **keep alive timeout** - the time till an idle thread is kept in the pool, after which it is removed. keep alive is only applicable to cached and scheduled thread pool executors, since in fixed and single thread pool executors, the number of threads do not change +- note that keep alive timeout does not change the core pool threads. this behavior can however be changed using `allowCoreThreadTimeOut` +- **queue** - the different types of executors use different queues based on their requirements. the queues also need to be thread safe + - e.g. a fixed and single thread pool executor has a fixed number of threads, so there can potentially be infinite number of tasks that get queued up, because of which it uses a `LinkedBlockingQueue` + - cached thread pool spawns number of threads equal to the number of tasks, so it uses a `SynchronousQueue`, which only needs to hold one task + - scheduled thread pool uses `DelayedWorkQueue` so that the tasks are returned from the queue only if the condition of cron etc. is met +- **rejection handler** - assume all threads are occupied and the queue is full. in this case, the thread pool will reject the task that it gets. how it rejects the task is determined using the rejection policy. the different rejection policies are - + - **abort** - submitting the new task throws `RejectedExecutionException`, which is a runtime exception + - **discard** - silently discard the incoming task + - **discard oldest** - discard the oldest task from the queue to add this new task to the queue + - **caller runs** - requests the caller thread itself to run this task +- till now, to obtain an instance of `ExecutorService`, we were using static methods on `Executors`. we can also use `new ThreadPoolExecutor()` and then pass our own core pool size, queue, etc. configuration parameters as the constructor arguments +- we need to shut down the executor in a clean way. we can initiate it using `executorService.shutdown()`. this will throw the `RejectedExecutionException` for any new tasks that are submitted to it, but at the same time will complete both all the currently executing tasks and queued up tasks +- if we run `shutdownNow`, it will return `List` for the queued up tasks and clear the queue, but complete all the currently executing tasks +- `awaitTermination(timeout)` will terminate the tasks if they are not completed by the specified time +- we also have helper methods like `isShutdown()` and `isTerminated()` +- if a task wants to return a value, we use `Callable` instead of `Runnable` +- however, the `execute` method on `ExecutorService` only works if we implement `Runnable` interface. if we implement `Callable` interface, we have to use `submit` +- the return value of `Callable` is wrapped around a `Future`. `future.get()` is a blocking call i.e. the thread calling it will not move ahead until the future resolves. so, we can also use `future.get(timeout)` + ```java + ExecutorService executorService = Executors.newFixedThreadPool(1); + + Future result = executorService.submit(() -> { + Thread.sleep(4000); + return (new Random()).nextInt(); + }); + + Thread.sleep(3000); + // this simulates that we were able to perform 3 seconds worth of operations + // in the main thread while the task thread was performing its blocking stuff + + System.out.println("result = " + result.get()); + ``` +- we can cancel the task using `future.cancel(false)`. this means that the thread pool will remove the task from the queue. the false means that if a thread is already running the task, it will not do anything. had we passed true, it would have tried to interrupt the task +- we also have helper methods like `future.isDone()` and `future.isCancelled()` +- suppose we have a list of items, and for each item, we want to perform a series of processing + ```java + Future package$ = executorService.submit(() -> pack(order)); + Future delivery$ = executorService.submit(() -> deliver(package$.get())); + Future email$ = executorService.submit(() -> sendEmail(delivery$.get())); + ``` + notice how the calling thread is blocked by all `get` of future. instead, we could use - + ```java + CompletableFuture.supplyAsync(() -> pack(order)) + .thenApply((package) -> deliver(package)) + .thenApply((delivery) -> sendEmail(delivery)) + // ... + ``` +- in the above case, we have specified a series of steps to run one after another and since we do not care about the results in our main thread, the assigning of tasks to threads is managed by java itself. the main thread is not paused by the get calls. notice how we also do not need to specify any executor +- if we use `thenApplyAsync` instead of `thenApply`, a different thread can be used to execute the next operation instead of the previous one +- internally, `CompletableFuture` uses fork join pool, but we can specify a custom executor as well, e.g. `thenApplyAsync(fn, executor)` + +### Race Condition + +- **race condition** - happens where **resource is shared** across multiple threads + ```java + public class SharedResourceProblem { + + public static void main(String[] args) throws Exception { + + Integer count = 10000000; + Counter counter = new Counter(); + + Thread a = new Thread(() -> { + for (int i = 0; i < count; i++) { + counter.increment(); + } + }); + + Thread b = new Thread(() -> { + for (int i = 0; i < count; i++) { + counter.decrement(); + } + }); + + a.start(); b.start(); + a.join(); b.join(); + + System.out.println("shared resource value = " + counter.getCount()); + // shared resource value = 15 + } + } + + class Counter { + + private int count = 0; + + public void increment() { + count += 1; + } + + public void decrement() { + count -= 1; + } + + public int getCount() { + return count; + } + } + ``` +- the `resource += 1` and `resource -= 1` operations are not atomic, it comprises of three individual operations - + - getting the original value + - incrementing it by one + - setting the new value +- solutions - identify critical sections and use locks, make operations atomic, etc + +### Synchronized + +- we can wrap our code blocks with a **critical section**, which makes them atomic. this way, only one thread can access that block of code at a time, and any other thread trying to access it during this will be suspended till the critical section is freed +- say we use `synchronized` on multiple methods of a class +- once a thread invokes one of the synchronized method of this class, no other thread can invoke any other synchronized method of this class. this is because **using synchronized on a method is applied on the instance (object) of the method** +- the object referred to above is called a **monitor**. only one thread can acquire a monitor at a time +- method one - prefix method signature with synchronized (refer the counter example earlier. the shared resource print would now print 0) + ```java + public synchronized void increment() { + // ... + } + ``` +- another method is to use synchronized blocks + ```java + synchronized (object) { + // ... + } + ``` +- using blocks, the code is much more flexible since we can have different critical sections locked on different monitors +- if using synchronized on methods, two different methods of the same class cannot be executed in parallel - the monitor there is the instance itself +- however, when using synchronized blocks, we can do as follows inside different methods of the same class - + ```java + Object lock1 = new Object(); + Object lock2 = new Object(); + + // ... + + synchronized(lock1) { + // ... + } + + synchronized(lock2) { + // ... + } + ``` +- note - reduce critical section size for better performance + +### Atomic Operations + +- so, **assignment to references and primitive values in java are atomic** + - `this.name = name` inside for e.g. a constructor is atomic + - `int a = 8` is atomic +- however, an **exception** in this is assignment to longs and doubles. since it is 64 bit, it happens in 2 operations - one assignment for the lower 32 bit and another one for the upper 32 bit +- the solution is to declare them with **volatile**, e.g. `volatile double a = 1.2` +- using volatile makes operations on longs and doubles atomic +- also, java has a lot of atomic classes under `java.util.concurrent.atomic` as well +- remember - when we use volatile, we make assignment atomic, not operations like `a++` atomic +- my doubt probably cleared - then what is the use for e.g. `AtomicReference`, if assignment to reference is already an atomic operation? we can do as follows (a metric example discussed later) - + ```java + AtomicReference state$ = new AtomicReference<>(); + state$.set(initialValue); + + State currentState = state$.get(); + State newSate = computeNewState(); + Boolean isUpdateSuccess = state$.compareAndSet(currentState, newState); + ``` + +### Data Race + +- remember - race condition and data race are two different problems +- **data race** - when the order of operations on variables do not match the sequential code we write. this happens mostly because there are optimizations like prefetching, vectorization, rearranging of instructions, etc + ```java + class Pair { + + private int a = 0; + private int b = 0; + + public void increment() { + a++; + b++; + } + + public void check() { + if (b > a) { + System.out.println("well that doesn't seem right..."); + } + } + } + ``` + calling the class - + ```java + Pair pair = new Pair(); + + Thread t1 = new Thread(() -> { while (true) pair.increment(); }); + Thread t2 = new Thread(() -> { while (true) pair.check(); }); + + t1.start(); t2.start(); + t1.join(); t2.join(); + ``` +- our expectation is that since b is read before a and a is incremented before b, there is no way even with a race condition that b can be bigger than a. however, due to data race, we do hit the print statement +- data race is also where we can use `volatile`. **volatile guarantees the order of instructions being executed** + ```java + private volatile int a = 0; + private volatile int b = 0; + ``` +- this is called the **visibility problem** +- basically, the two threads have their own **local cache**, but also have a **shared cache**. they write the value to the local cache, but this does not + - either update the shared cache + - or the second thread's local cache does not refresh its value from the shared cache +- **however, when we use volatile, it refreshes / synchronizes both the shared cache and the local cache of all threads** +- basically, code before access to a volatile variable gets executed before it, and code after the access to a volatile variable after. this is called the happens before relationship +- while we could have just used synchronized for both the methods above, realize the advantage of using volatile over synchronized. with synchronization, we lose out on the multithreading, since our functions would have been invoked one at a time. in this case, the two methods are still being invoked concurrently +- if we have n cores, for each core we have a register. then we have an associated l1 cache on top of each register. l2 cache can be shared across multiple cores, and finally we have only one l3 cache and ram
+ ![multithreading](/assets/img/java/multithreading.drawio.png) +- **java memory model** - it is an enforcement that jvm implementations have to follow so that java programs have similar behavior everywhere, and the different optimizations of instructions, cache, etc. do not affect the functioning of the program + +### Locking Strategies and Deadlocks + +- **coarse-grained locking** - meaning we use one lock for everything, just like having synchronized on all methods, not performant. its counterpart is **fine-grained locking** +- coarse grained locking example - make all methods of the class synchronized +- cons with fine-grained locking - we can run into deadlocks more often +- conditions for a deadlock - + - **mutual exclusion** - only one thread can hold the resource at a time + - **hold and wait** - the thread acquires the resource and is waiting for another resource to be freed up + - **non-preemptive** - the resource is released only when the thread is done using it and another thread cannot acquire it forcefully + - **circular wait** - a cyclic dependency is formed where threads wait for resources acquired by each other +- one way to prevent deadlocks is to acquire locks in our code in the same order. this need not be considered when releasing the locks +- another way can be to use techniques like `tryLock`, `lockInterruptibly`, etc (discussed later) +- reentrant lock - instead of having a synchronized block, we use this reentrant lock + ```java + Lock lock = new ReentrantLock(); + ``` +- unlike synchronized where the block signals the start and end of the critical section, locking and unlocking happens explicitly in case of reentrant locks +- to avoid deadlocks caused by for e.g. the method throwing exceptions, we should use it in the following way - + ```java + lock.lock(); + try { + // critical section + } finally { + lock.unlock(); + } + ``` +- it provides a lot of methods for more advanced use cases like `getOwner`, `getQueuedThreads`, `isHeldByCurrentThread`, `isLocked`, etc +- the name `Reentrant` comes from the fact that the lock can be acquired by the thread multiple times, which means it would have to free it multiple times as well, e.g. think about recursive calls. we can get the number of times it was acquired using `getHoldCount` +- another benefit of using reentrant locks is **fairness** - e.g. what if a thread repeatedly acquires the lock, leading to the starving of other threads? we can prevent this by instantiating it using `new ReentrantLock(true)` +- note that introducing fairness also has some overhead associated with it, thus impacting performance +- if we do not set to true, what we get is a **barge in lock** i.e. suppose there are three threads waiting for the lock in a queue. when the thread originally with the lock releases it, if a new thread not in the queue comes up to acquire the lock, it gets the lock and the threads in the queue continue to stay there. however, if we had set the fairness to true, the thread with the longest waiting time gets it first +- so, two problems - "fairness" and "barge in lock" are solved by reentrant lock +- if the lock is not available, the thread of course goes into the suspended state till it is able to acquire the lock +- we can use `lockInterruptibly` - this way, another thread can for e.g. call `this_thread.interrupt()`, and an interrupted exception is thrown. this "unblocks" the thread to help it proceed further. had we just used lock, the wait would have been indefinite + ```java + try { + lock.lockInterruptibly(); + } catch (InterruptedException e) { + // cleanup and exit + } + ``` +- similar to above, we also have the `tryLock` method, which returns a boolean that indicates whether a lock was successfully acquired. it also accepts timeout as a parameter, what that does is self-explanatory +- this can help, for e.g. in realtime applications to provide feedback continuously without pausing the application entirely + ```java + while (true) { + if (lock.tryLock()) { + try { + // critical section + } finally { + lock.unlock(); + } + } else { + // some logic + } + // some logic + } + ``` +- so, we saw how reentrant lock, which while works like synchronized keyword, has additional capabilities like telling current owner and locking using different strategies like `lockInterruptibly` and `tryLock` +- when locking till now, we used mutual exclusion to its fullest. but, we can be a bit more flexible when the shared resource is just being read from and not written to +- multiple readers can access a resource concurrently but multiple writers or one writer with multiple readers cannot +- this is why we have `ReentrantReadWriteLock` + ```java + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + Lock readLock = lock.readLock(); + Lock writeLock = lock.writeLock(); + ``` +- fairness in `ReentrantReadWriteLock` works the same way as `ReentrantLock`, except that if the thread waiting for the longest time was a reader, all reader threads in the queue are freed up to read +- of course, base decisions off of type of workloads - if workload is read intensive, read write lock is better, otherwise we might be better off using the normal reentrant lock itself + +### Inter Thread Communication + +- **semaphore** - it helps restrict number of users to a resource +- remember - locks only allow one user per resource, but semaphores allow multiple users to acquire a resource +- so, we can call a lock a semaphore with one resource + ```java + Semaphore semaphore = new Semaphore(number_of_permits); + ``` +- when we call `semaphore.acquire()` to acquire a **permit**, and the number of permits reduces by one. if no permits are available at the moment, the thread is blocked till a resource in the semaphore is released +- similarly, we have `semaphore.release()` +- optionally, i think both `acquire` and `release` accept n, the number as an argument which can help acquire / release more than one permit +- another major difference from locks - there is **no notion of owning thread** in semaphores unlike in locks - e.g. a semaphore acquired by thread a can be released by thread b. so, thread a can acquire it again without having ever released it +- semaphores are a great choice for producer consumer problems. producer consumer problem using semaphores - + - we need a lock so that multiple threads cannot touch the queue at one go + - we start with the full semaphore being empty and the empty semaphore being full, since there are no items initially + - look how we use semaphore's philosophy to our advantage - consumer threads acquire full semaphore while producer threads release it + - my understanding of why we need two semaphores - e.g. if we only had full semaphore - producer releases it and consumer acquires it - how would we have "stopped" the producer from producing when the rate of production > rate of consumption? its almost like that the two semaphores help with **back pressure** as well + ```java + Integer CAPACITY = 50; + Semaphore empty = new Semaphore(CAPACITY); + Semaphore full = new Semaphore(0); + Queue queue = new ArrayDeque<>(CAPACITY); + Lock lock = new ReentrantLock(); + ``` +- producer code - + ```java + while (true) { + empty.acquire(); + Item item = produce(); + lock.lock(); + queue.add(item); + lock.unlock(); + full.release(); + } + ``` +- consumer code - + ```java + while (true) { + full.acquire(); + lock.lock(); + Item item = queue.poll(); + lock.unlock(); + consume(item); + empty.release(); + } + ``` +- some different inter thread communication techniques we saw till now - + - calling `interrupt` from one thread on another thread. this is then further used in techniques like `lockInterruptibly` + - calling `join` for a thread to wait for another thread to complete its job + - using `acquire` and `release` on semaphore +- **conditions** - semaphores are a special type of condition, that try checking if number of permits > 0 +- flow - + - one thread **checks a condition**, and goes to sleep if the condition is not met + - a second thread can "mutate the state" and **signal** the first thread to check its condition again + - if the condition is met, the thread proceeds, else it can go back to sleep +- note - conditions come with a lock, so that the "state" being modified can be wrapped with a critical section +- condition - conditions are always associated with a lock +- note - when we call `await` on the condition, it also releases the lock before going to sleep, so that the second thread described in the flow above can acquire the lock to mutate the state +- when another thread runs `signal` on the condition, the threads waiting for the condition wake up +- placing the condition inside the while loop helps so that even if signalled, it will again start waiting if the condition is not met yet +- also, even though the thread which was waiting gets signaled to wake up, it also needs to be able to acquire the lock again, i.e. the other threads modifying state need to release the lock + - first thread - + ```java + ReentrantLock lock = new ReentrantLock(); + Condition condition = lock.newCondition(); + + lock.lock(); + try { + while (condition x is not met) { + condition.await(); + } + } finally { + lock.unlock(); + } + ``` + - second thread - + ```java + lock.lock(); + try { + // modify variables used in condition x... + condition.signal(); + // despite signalling, thread one does not wake up, we need to unlock the lock first + } finally { + lock.unlock(); + } + ``` +- conditions also have advanced methods like - + - `await(timeout)` - just like locks have timeouts to prevent indefinite waiting + - `signalAll` - using `signal`, only one of all the threads waiting on the condition wake up, `signalAll` wakes all of them up +- the class Object, and therefore all objects have methods `wait`, `notify` and `notifyAll` +- therefore, without using any special classes - + - simulate **conditions** using `wait`, `notify` and `notifyAll` + - simulate **locks** using `synchronized` +- note - recall how when using conditions we were wrapping it via locks. we need to do the same thing here i.e. wrap using synchronized block in order to be able to call notify + - first thread - + ```java + synchronized (this) { + while (condition x is not met) { + wait(); + } + } + ``` + - second thread. my understanding - but needs to happen on same object and inside different method - + ```java + synchronized(this) { + // modify variables used in condition x... + notify(); + } + ``` +- when we call `wait` on an object, the thread it was called on continues to be in waiting state until another thread calls `notify` on that object +- `notify` will wake up any random thread that was sleeping, and to wake up all threads we can use `notifyAll` +- if we think about it, the `lock.lock()` and `lock.unlock()` are the starting and ending of `synchronize` blocks respectively, `condition.await()` is like `wait()` and `condition.signal()` like `notify()` +- introducing locks can make our code more error-prone, more subject to deadlocks etc. however, it makes the code more flexible, e.g. unlike synchronized blocks which have to exist within a single method, locks can be acquired and freed from different methods +- using locks result in issues like deadlocks if coded improperly +- our main objective is to execute instructions as a single hardware operation +- we can achieve this by using Atomic classes provided by java + ```java + AtomicInteger count = new AtomicInteger(initialValue); + count.incrementAndGet(); + ``` +- recall how we had discussed that `a = a + 1` actually consisted of three atomic operations, which has all been condensed down into one using these java helper classes +- so, recall the counter example in shared resource earlier, and how we had solved it using synchronized. we can now get rid of the `synchronized` and implement it as follows - + ```java + public void increment() { + count.incrementAndGet(); + } + ``` +- the disadvantage of using these classes is of course that only each operation by itself is atomic, a series of such calls together is not atomic, so it may be good only for simpler use cases +- a lot of operations use `compareAndSet` underneath, and we have access to it to. it sets the value to the new value if the current value matches the expected value. otherwise, the old value is retained. it also returns a boolean which is true if the current value matches the expected value + ```java + count.compareAndSet(expectedValue, newValue); + ``` +- `AtomicReference` can be used for any object type to get and set values in a thread safe i.e. atomic way, and we can use methods like compareAndSet on it +- e.g. notice how below, the synchronized keyword is not used for addSample, but we still have a thread safe implementation by using `compareAndSet`. note how and why we use a loop - if the old value stays the same before and after calculating the new value, then update using the new value, else recalculate using the new value using the "new old value" + ```java + class Metric { + + int count = 0; + + int sum = 0; + } + + class MetricAtomic { + + AtomicReference metric$ = new AtomicReference<>(new Metric()); + + public void addSample(int sample) { + Metric currentMetric; + Metric newMetric; + do { + currentMetric = metric$.get(); + newMetric = new Metric(); + newMetric.count = currentMetric.count + 1; + newMetric.sum = currentMetric.sum + sample; + } while (!metric$.compareAndSet(currentMetric, newMetric)); + } + } + ``` +- we often have a lot of tasks but not so many threads. some objects are not thread safe i.e. cannot be used by multiple threads. however, they can be used by multiple tasks being executed on the same thread. coding this ourselves can be tough, which is why we have `ThreadLocal`, which basically returns a new instance for every thread, and reuses that instance when a thread asks for that instance again + ```java + public static ThreadLocal car = ThreadLocal.withInitial(() -> new Car()); + ``` +- spring uses the concept of this via `ContextHolder`s in for instance, `RequestContextHolder`, `TransactionContextHolder`, `SecurityContextHolder`, etc. my understanding - since spring follows one thread per-request model, this way, any of the services, classes, etc. that need access to information can get it easily. it is like setting and sharing state for a request + +### High Performance IO + +- what is **blocking io** - when cpu is idle, e.g. when reading from database etc +- such **io bound tasks** block the thread till they return the result +- io bound tasks are very common in web applications etc +- how it works internally -
+ ![io bound](/assets/img/java/io-bound-architecture.drawio.png) + - the controllers like network cards return the response to the dma (direct memory access) + - the dma writes it to the memory + - the dma notifies the cpu that the response is available + - the cpu can now access the memory for variables +- so, during this entire duration, the thread that was processing the request that involved the io task (and thus reaching out to the controller) was sitting idle and thus **was blocked** +- this is why number of threads = number of cores does not give us the best performance when we have more io bound instead of cpu intensive tasks +- this is why we have a "thread per request model" in spring mvc, which i believe caps at 200 threads to prevent out of memory errors etc +- it has caveats like - + - creating and managing threads are expensive - recall how it has its own stack etc + - number of context switching increases, which too is an expensive operation - recall **thrashing** + - assume that there are two kinds of calls a web server supports - one that makes a call to an external service and one that calls the database. assume the external service has a performance bug, which makes the first call very slow. this way, if we had for e.g. 150 requests for first call and 150 for the second call (assume 200 is the default thread pool size in embedded tomcat), the 150 instances of the second call would start to be affected because of the 150 instances of the first call now +- so, the newer model used by for e.g. spring web flux is **asynchronous** and **non blocking** +- the thread is no longer blocked waiting for the response - a callback is provided which is called once the request is resolved +- so now, we can go back to the **thread per core** model - which is much more optimal +- there can be problems like **callback hell** etc, which is solved by using libraries like project reactor for reactive style of programming, which is more declarative to write + +### Virtual Threads + +- till now, the `Thread` class we saw was actually a wrapper around an actual os thread +- these are also called **platform threads** - since they map one to one with os threads +- **virtual threads** - they are not directly related to os threads. they are managed by the jvm itself +- this makes them much less resource intensive +- the jvm manages a pool of platform threads, and schedules the virtual threads on these platform threads one by one +- once a virtual thread is **mounted** on a platform thread, it is called a **carrier thread** +- if a virtual thread cannot progress, it is **unmounted** from the platform thread and the platform thread starts tracking a new virtual thread +- this way, the number of platform threads stay still small in number and influenced by the number of cores +- there is no context switching overhead just like in reactive programming - what we are saving on here - frequent normal (hence platform hence os threads) context switching is replaced by frequent virtual thread context switching +- creation techniques - + ```java + Runnable runnable = () -> System.out.println("from thread: " + Thread.currentThread()); + + new Thread(runnable).start(); // platform thread (implicit) + // from thread: Thread[#19,Thread-0,5,main] + + Thread.ofPlatform().unstarted(runnable).start(); // platform thread (explicit) + // from thread: Thread[#20,Thread-1,5,main] + + Thread.ofVirtual().unstarted(runnable).start(); // platform thread + // from thread: VirtualThread[#21]/runnable@ForkJoinPool-1-worker-1 + ``` +- note - virtual threads are only useful when we have blocking io calls, not when we have cpu intensive operations +- this happens because unlike the usual model where our thread had to sit idle for the blocking call, the platform thread never stops here and is always working, it is the virtual thread that is sitting idle, and hence we optimize our cpu usage because we are using our platform threads optimally +- so, developers still write the usual blocking code, which simplifies coding, as compared to say reactive programming +- underneath, the blocking calls have been refactored for us to make use of virtual threads so that the platform threads are not sitting idle +- e.g. cached thread pools replacement is **new virtual thread per task executor** - we do not have to create pools of fixed size - we use a thread per task model and all the complexity is now managed by jvm for us bts +- when we are using normal threads for blocking call e.g. using jpa, the thread cannot be used. what we can do is use context switching to utilize the cpu better. however, this model meant we needed a lot of platform threads, and managing them, context switching between them, etc has a lot of overhead, which is why maybe embedded tomcat for instance had a cap of about 200 threads. now with virtual threads, there is no cap needed, so it can be used via cached thread pool executor equivalent, but here there would never be any out of memory etc issues like in cached thread pool executor, since virtual threads are very lightweight +- some notes - + - virtual threads are always daemon, and making them non daemon will throw an exception + - virtual threads do not have a concept of priority + +## Generics + +- what is generics - + - helps extend java's type system - types now start acting like parameters that we as clients can provide + - to allow a type or method to operate on objects of various types to thus allow **reusability**. e.g. without generics, we would use overloading, which causes a lot of duplication of logic - + ```java + class OverloadingProblem { + + public static Double add(Double a, Double b) { + return a + b; + } + + public static Integer add(Integer a, Integer b) { + return a + b; + } + + public static void main(String[] args) { + System.out.println(add(1, 5)); + System.out.println(add(1.2, 5.3)); + } + } + ``` + - while providing **compile time safety** - e.g. without using generics, we would use type casting, which has two compile time checks but one runtime check, and catching errors at compile time > catching them at runtime - + ```java + class TypeCastingProblem { + + private static Object item = null; + + public static void setItem(Object item) { + TypeCastingProblem.item = item; + } + + public static Object getItem() { + return item; + } + + public static void main(String[] args) { + setItem(1.4); + Integer item = (Integer) getItem(); + } + } + ``` + output - + ![generics typecasting](/assets/img/java/generics-typecasting.png) +- we use the **diamond operator** for generics + ```java + class Pair { + + private K key; + private V value; + + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + @Override + public String toString() { + return "{ " + key + ": " + value + " }"; + } + } + + class GenericExample { + + public static void main(String args[]) { + Pair score = new Pair<>("maths", 85); + System.out.println(score); + } + } + ``` +- **generic method** - my understanding - this is useful when the class itself is not generic / maybe method and class generics do not mean the same thing, so we can for e.g. use `T` for class and `V` for method + ```java + class GenericMethod { + + public static void printer(T arg) { + System.out.println("value is: " + arg); + } + + public static void main(String args[]) { + printer(1); + printer("hello"); + } + } + ``` +- while the return type above is void, we could have for e.g. returned `T` etc as well +- **bounded generic types** - bound the types that are allowed to be used, to get access to the additional functionality that is present in the types used in these bounds, e.g. only allow `Number` and its subclasses to be used for a generic class containing mathematical utilities +- we use the `extends` keyword to achieve bounded generic types, and the target type should be a subclass of the interface / class mentioned in this clause + ```java + public static > T calculateMin(T a, T b) { + return (a.compareTo(b) < 0) ? a : b; + } + ``` +- e.g. [`copy`](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#copy-java.util.List-java.util.List-) is implemented as follows - my understanding - this is to help make use of dynamic polymorphism + bounded types. note - just because we can do `superclass_reference = subclass_reference`, does not mean we can do `List = List` + ```java + public static void copy(List dest, List src) + ``` +- we can also specify multiple bounds using `&` +- **type inference** - determine the types automatically. some examples - + - java can automatically guess "the most specific type" that both `String` and `ArrayList` can work with - `Serializable` + ```java + class TypeInference { + + public static T getFirst(T a, T b) { + return a; + } + + public static void main(String[] args) { + Serializable result = getFirst("hello world", new ArrayList()); + } + } + ``` + - we use `List list = new ArrayList<>();` and not `new ArrayList()` + - we use `list.add("name")` and not `list.add("name")` +- note - just because `Number` and `Integer` are related via inheritance, it does not mean `List` and `List` are somehow related as well +- this is the motivation behind **wildcards** + ```java + import java.util.List; + + class Wildcards { + + private static void print(List list) { + list.forEach(System.out::println); + } + + public static void main(String[] args) { + List list = List.of(1, 2, 3); + print(list); + } + } + + // error: incompatible types: List cannot be converted to List + + // solution - notice the use of ? + // private static void print(List list) { ... + ``` +- **upper bounded wildcards** - when we use `?` and `extends`, e.g. allow all lists where the type of element is a subclass of the class specified in the generic method signature +- drawback - e.g. while we can print all elements of the list easily, we cannot add an element to the list - e.g. the list is actually of integer, and we might be trying to add a double to the list. since java cannot identify this problem, it gives a compile time error +- e.g. this works perfectly + ```java + private static void printList(List numbers) { + numbers.forEach(System.out::println); + } + + public static void main(String[] args) { + printList(List.of(1, 2, 3)); + printList(List.of(1.1, 2.2, 3.3)); + } + ``` +- however, if we add the below to the printList method - + ```java + private static void printList(List numbers) { + numbers.forEach(System.out::println); + numbers.add(7); + } + ``` +- we get the error below - + ``` + BoundedWildCardsExtends.java:7: error: incompatible types: int cannot be converted to CAP#1 + numbers.add(7); + ^ + where CAP#1 is a fresh type-variable: + CAP#1 extends Number from capture of ? extends Number + ``` +- **lower bounded wildcards** - when we use `?` and `super`, e.g. allow all lists where the type of element is a superclass of the class specified in the generic method signature +- so now, since java knows that the list passed to has elements of supertype of specified type, we can now add elements to the list of that type (dynamic polymorphism) +- drawback - we cannot read from the list - we have to treat the element as type `Object` + ```java + public static void addToList(List list) { + list.add(1.4); + } + + public static void main(String[] args) { + List list = new ArrayList<>(); + list.add(1); list.add("shameek"); + addToList(list); + System.out.println(list); + } + ``` +- use case of wildcards + bounded types - copy elements from one list to another - + ```java + public void copy(List source, List destination) { + source.forEach(destination::add); + } + ``` +- so, we should - + - use "lower bounded wildcards" when we want to perform some kind of mutation + - use "upper bounded wildcards" when we want to read values + - use "type parameters" when we want to do both reading and writing +- one difference between "type parameters" and "wildcards" is that type parameters allow for multiple bounds unlike wildcards, e.g. following is valid - `` +- rule of thumb? - use wildcards when possible, when not possible (e.g. we want to influence return type based on arguments), then use type parameters +- **type erasure** - java replaces all generic types we define with either Object, or the bound if a bound is specified +- as a part ofo this, java might introducing **type casting** etc as well +- e.g. the code below - + ```java + List list = new ArrayList<>(); + list.add(1); + Integer ele = list.get(0); + + class Store { T item; } + ``` +- is converted to this code due to type erasure - + ```java + List list = new ArrayList(); + list.add(1); + Integer ele = (Integer) list.get(0); + + class Store { Serializable item; } + ``` + +## Collections + +### List + +- `ArrayList` allows for control over **ordering** of elements +- all items are identified by an **index** +- items are located right next to each other in ram, thus making **random access via index o(1)** +- searching for items based on value is however o(n) +- adding items at the end is o(1) +- adding items at random positions is o(n), since it requires shifting of items by one position +- same logic is applicable for removal of items - o(1) for removing items from the end and o(n) for removing items from arbitrary positions +- size of array lists in java can change **dynamically** - once the amount of memory allocated gets over, a list with memory equal to double the size of the current list is provisioned, and all the items from the current list are copied over to the new list +- however, this ability to resize dynamically comes at a price - it takes o(n) time for this resize + copying over of items to the new location to happen +- however, when instantiating, we can provide the **initial capacity**, so that this resizing does not have to happen often +- disadvantage of array lists - when removing / adding items at random positions, a lot of **shifting** is needed to maintain the **contiguous** nature +- this problem is not there when using `LinkedList` +- since in linked lists, there is only a pointer to the next element that needs to be maintained +- disadvantage - linked lists don't allow random access with given index at o(1) time +- note - linked list in java is optimized - + - implemented as doubly linked list which allows it traversal in both directions + - maintains pointers to both head and tail - e.g. we can do use both `addFirst` and `addLast` at o(1) time +- linked list vs array list performance for adding elements at the beginning - + ```java + import java.util.List; + import java.util.ArrayList; + import java.util.LinkedList; + + class ListPerformance { + + public static void main(String args[]) { + perform("linked list", new LinkedList<>()); + perform("array list", new ArrayList<>()); + } + + private static void perform(String type, List list) { + long start = System.currentTimeMillis(); + for (int i = 0; i < 500000; i++) { + list.add(0, i); + } + long end = System.currentTimeMillis(); + System.out.println("time taken by " + type + ": " + (end - start) + "ms"); + } + } + ``` +- output - + ``` + time taken by linked list: 75ms + time taken by array list: 43375ms + ``` +- note - while we compared linked list to array lists above, as discussed later, if removing or adding to one of the ends, the most performant option we have is array deque, not stacks, not linked lists +- **vector** - **synchronized** implementation of **array list** i.e. all operations like add etc will do acquiring and releasing of lock +- generally, doing this using our own locks might be better, since we get more flexibility, e.g. batch multiple operations under one acquiring + releasing of lock +- **stack** - **lifo** structure (last in first out) +- important operations include `push`, `pop` and `peek` +- note - stacks use vectors underneath, so they are inherently synchronized + ```java + Stack stack = new Stack<>(); + stack.push("jane"); + stack.push("jackson"); + System.out.println(stack); // [jane, jackson] + System.out.println(stack.pop()); // jackson + ``` +- to avoid using synchronized version, we can use **array dequeue** instead + +### Queues + +- **queues** - **fifo** structure (first in first out) +- important operations include `add` (enqueue), `remove` (dequeue) and `peek` (retrieve but not remove last element) +- queues are abstract like stack as well - it is implemented using linked lists + ```java + Queue queue = new LinkedList<>(); + queue.add("jane"); + queue.add("jackson"); + System.out.println(queue); // [jane, jackson] + System.out.println(queue.remove()); // jane + ``` +- **priority queue** - objects being stored inside a priority queue should extend the `Comparable` interface +- this helps retrieve items form the structure in the order of their priority +- **dequeue** - double ended queue - o(1) for operating from either side of the collection. it is implemented by array dequeue and just like normal queues, we can implement it using linked lists instead as well +- note - java calls it deque and not dequeue + ```java + Deque dequeOne = new LinkedList<>(); + Deque dequeTwo = new ArrayDeque<>(); + ``` +- my doubt about performance - based on the fact that array dequeue might be using an array underneath, doing the typical "capacity resizing" that we discussed, would we have an even more performant solution if we were to use linked list? be it for implementing stacks or queues, logically performance of linked lists > array dequeues (dynamic capacity resizing issue) > stacks (synchronization issue) +- based on [this answer](https://stackoverflow.com/a/32625029/11885333), apparently not, because the main overhead that comes with linked lists is the extra creation of that node, garbage collection of that node, etc +- so, it is probably safe to conclude that in java, when we are looking for stack or queue implementation, we should use array dequeues almost always (over the stack since it is synchronized, and linked lists since it has memory overhead?) +- also, do not use array lists blindly - if we just have to remove and add elements to either ends, and do not need random access, array dequeues might be better than array lists (inserting at beginning of array list is o(n) and inserting at beginning of array deque is o(1)) + +### Maps + +- key value pairs +- also called **associative arrays** +- with maps, we ensure times of o(1) for **adding**, **removing** and **lookup** +- maps are **unordered** / do not support **sorting** +- the idea is that since **keys** in a map are **unique**, we transform the keys into an index between 0 to length - 1 of array using a **hash function**. then, accessing elements via the given key becomes o(1) - we just need to translate the key into an index using the hash function, and random access of elements in an array is an o(1) operation +- the hash function should be able to handle the type of key - e.g. if the key is an integer, using modulo operator with the length of array is enough, if the key is a string then ascii value of characters can be used and so on +- **collision** in hash tables - the hash function we used result in the same value for multiple keys +- **overwrite** - replace current value with new incoming value +- **chaining** - each **bucket** in the hash table can store a linked list. worst case scenario - all keys evaluate to the same value, so the entire map is just a single big linked list stored in one bucket, thus resulting in an o(n) complexity instead of o(1) +- **open addressing** - + - **linear probing** - try finding the next available empty slot - k + 1, k + 2, k + 3, ... disadvantage - **clusters** are formed i.e. elements with same hash are clustered together + - **quadratic probing** - try finding the next available empty sot using a quadratic polynomial - k + 1, k + 4, k + 9, k + 16, ... + - **rehashing** - perform another hashing on the key till an empty slot is found - h(h(h....(x))) +- so actually, worst case in hash tables for all operations - insertions, deletions and lookups are o(n) +- **load factor** - n / m, where n = number of items in the hash table and m = size of the array. if it is close to 1, the probability of collision will increase +- so, we can also do **dynamic resizing** of hash tables. disadvantage - this resizing is an o(n) operation +- in java, for `HashMap`, when the load factor becomes around 0.75, the dynamic resizing happens +- however, hash maps cannot be used in multithreaded scenarios, since they are not synchronized +- some important methods available in maps - `keySet()`, `entrySet()`, `values()` +- auto generated hash code example - look at how a prime number is used to generate a function with less collision chances + ```java + class Person { + + private Integer age; + + private String name; + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((age == null) ? 0 : age.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + } + ``` +- note - the `equals` needs to be overridden as well. it might happen that due to chaining discussed earlier, multiple items end up in the same bucket of hash table. at that point, java might need to be able to differentiate between two different elements of the same hash +- so basically, java uses both chaining and dynamic resizing based on load factor by the looks of it +- `LinkedHashMaps` vs `HashMaps` - **linked hash maps** use a doubly linked lists underneath to track the "order of insertion", so the keys are basically ordered according to insertion time + ```java + Map hashMap = new HashMap<>(); + hashMap.put("aaa", 1); hashMap.put("bbb", 2); hashMap.put("ccc", 3); + System.out.println(hashMap); // {aaa=1, ccc=3, bbb=2} + + Map linkedHashMap = new LinkedHashMap<>(); + linkedHashMap.put("aaa", 1); linkedHashMap.put("bbb", 2); linkedHashMap.put("ccc", 3); + System.out.println(linkedHashMap); // {aaa=1, bbb=2, ccc=3} + ``` +- balanced bst (binary search trees) - **red black trees** and **avl trees** +- tree rotations are used to maintain this structure +- **tree maps** use red black trees unlike in hash maps, where an array like structure is used +- so, the keys are stored in sorted order in tree maps. notice how it is automatically fr us below - + ```java + Map treeMap = new TreeMap<>(); + treeMap.put("ccc", 3); treeMap.put("bbb", 2); treeMap.put("aaa", 1); + System.out.println(treeMap); // {aaa=1, bbb=2, ccc=3} + ``` +- because it uses trees, operations have a guaranteed complexity of o(log n) in tree maps, whereas operations have mostly o(1) but sometimes o(n) complexity in case of hash maps +- my understanding - since a bst is being used, concept of collision, load factor, etc do not exist in tree maps unlike in hash maps +- so, for huge workloads, while we might have to consider tuning the load factor in case of hash set, we do not have to think about it in case of a tree set +- note - in newer versions, hash maps does not use linked lists (chaining) for each bucket, it uses red black trees for each bucket. this further optimizes the hash maps now +- because of the very nature - using a red black tree per bucket, using an array to store the multiple keys, etc - memory required by hash maps > tree maps +- but remember, reducing time > reducing memory with cloud etc + +### Sets + +- they allow **no duplicates** +- **hash sets** and hash maps work in the same way - a one dimensional array is used to store the elements by performing a hash on the element +- some important functions - `add`, `remove`, `retainAll` (calling `set2.retainAll(set1)` will retain all the elements in the set2 present in set1, and remove other elements from set2) +- so, operations are mostly are o(1) but can be o(log n) in worst case / o(n) when dynamic resizing is needed +- again, **linked hash sets** are same as hash maps, the insertion order would be maintained, which is maintained with the help of an additional doubly linked list +- finally, **tree set** are same as tree maps - maintain elements in a sorted order using a red black tree underneath, thus making operations o(log n) in general +- tree sets come with their own additional methods - e.g. `subset(a, b)` will give us a new set with all values of the set present between a and b, `first` for getting the first element, etc + +### Sorting + +- sort - notice "reverse order" below - + ```java + List list = new ArrayList<>(); + list.add(3); list.add(2); list.add(1); list.add(4); list.add(5); + System.out.println(list); // [3, 2, 1, 4, 5] + + Collections.sort(list); + System.out.println(list); // [1, 2, 3, 4, 5] + + Collections.sort(list, Collections.reverseOrder()); + System.out.println(list); // [5, 4, 3, 2, 1] + ``` +- we can implement `Comparable` on our custom classes to be able to sort them directly - + ```java + class Person implements Comparable { + + String name; + + Integer age; + + Person(String name, Integer age) { + this.name = name; + this.age = age; + } + + public int compareTo(Person person) { + Integer nameDiff = name.compareTo(person.name); + Integer ageDiff = age.compareTo(person.age); + return ageDiff != 0 ? ageDiff : nameDiff; + } + + public String toString() { + return "Person(name=" + name + ", age=" + age + ")"; + } + } + + class CustomSortComparable { + + public static void main(String[] args) { + + List people = new ArrayList<>(); + people.add(new Person("ayan", 25)); + people.add(new Person("ruth", 5)); + people.add(new Person("jack", 25)); + people.add(new Person("jane", 25)); + people.add(new Person("mike", 20)); + System.out.println(people); + // [Person(name=ayan, age=25), Person(name=ruth, age=5), Person(name=jack, age=25), Person(name=jane, age=25), Person(name=mike, age=20)] + + Collections.sort(people); + System.out.println(people); + // [Person(name=ruth, age=5), Person(name=mike, age=20), Person(name=ayan, age=25), Person(name=jack, age=25), Person(name=jane, age=25)] + } + } + ``` +- `Comparator` use cases - + - we want to sort using multiple techniques. compareTo can only have one implementation, therefore lacks flexibility + - we want to sort a class not in our control i.e. we cannot change the class to make it implement `Comparable` + - also helps achieve separation of concerns + + ```java + class PersonAgeComparator implements Comparator { + + @Override + public int compare(Person person1, Person person2) { + return person2.age.compareTo(person1.age); + } + } + + Collections.sort(people, new PersonAgeComparator()); + System.out.println(people); + // [Person(name=ayan, age=25), Person(name=jack, age=25), Person(name=jane, age=25), Person(name=mike, age=20), Person(name=ruth, age=5)] + + Collections.sort(people, new PersonAgeComparator().reversed()); + System.out.println(people); + // [Person(name=ruth, age=5), Person(name=mike, age=20), Person(name=ayan, age=25), Person(name=jack, age=25), Person(name=jane, age=25)] + ``` +- using lambdas - for a more functional style, we can use the following syntax as well 🤯 - + ```java + Collections.sort( + people, + Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName) + ); + System.out.println(people); + // [Person(name=ayan, age=25), Person(name=jack, age=25), Person(name=jane, age=25), Person(name=mike, age=20), Person(name=ruth, age=5)] + ``` + +### Miscellaneous + +- some methods, refer docs for more - + ```java + List list = new ArrayList<>(); + list.add(5); list.add(1); list.add(2); list.add(4); list.add(3); + + System.out.println("original list = " + list); // original list = [5, 1, 2, 4, 3] + + Collections.shuffle(list); + System.out.println("shuffled list = " + list); // shuffled list = [3, 1, 5, 4, 2] + + Collections.reverse(list); + System.out.println("reversed list = " + list); // reversed list = [2, 4, 5, 1, 3] + + System.out.println("min = " + Collections.min(list) + ", max = " + Collections.max(list)); // min = 1, max = 5 + ``` +- since collections are pass by reference, make collections unmodifiable so that clients cannot mutate our collections + ```java + List unmodifiableList = Collections.unmodifiableList(list); + unmodifiableList.add(-1); + // Exception in thread "main" java.lang.UnsupportedOperationException + // at java.base/java.util.Collections$UnmodifiableCollection.add(Collections.java:1091) + // at MiscellaneousMethods.main(MiscellaneousMethods.java:20) + ``` +- if we want to obtain a synchronized version of the normal collections we can use `List synchronizedList = Collections.synchronizedList(normalList)` +- drawback - coarse grained locking is used, all methods use `synchronized` keyword now +- so, better solution is to use concurrent collections that java provides, e.g. `ConcurrentHashMap` + +## Maven + +- maven is a **build tool** for java +- other alternatives are gradle, ant, etc +- **build** - process of building source code into **artifacts** that can be run +- maven has various **plugins** - + - **jar plugin** to create jars + - **compiler plugin** to help compile code + - **surefire plugin** to execute tests +- a plugin has various **goals**. goals represent a unit of work +- to examine a plugin, we can use the following commands - + ``` + mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin` + ``` +- **maven coordinates** - + - **group id** - company / department name. domain name in reverse order is the convention + - **artifact id** - project name + - **version** - + - **packaging** - there are two types of packaging - **jar** (mostly used nowadays and the default) and **war** (web application archive) + - **classifier** - e.g. we want to build for different versions of java but use the same pom. so, we can use classifiers like `jdk8` and `jdk11`. these then get appended to the version, so people can import the right dependency +- out of these, the **gav** (group id, artifact id and version) help us uniquely identify the project +- to use these libraries in our projects, we use **repositories** +- there two repositories - **local repository** and **remote repository** +- basically, maven downloads from remote repositories and puts it into our local repository +- then, our projects running locally can use dependencies downloaded in this local repository +- default location for local repository is ~/.m2/repository +- default url for remote repository is https://repo1.maven.org/maven2/ (called **maven central**) +- we can configure remote repositories via settings.xml - so that we can use our own remote repository - use case - companies maintain their own remote repository, which is a mirror of maven central + +### Plugin Management + +- **lifecycle** has **phases** +- a phase has multiple goals attached to it +- if a phase does not have any goals attached to it, it would not be executed +- e.g. the clean lifecycle has three phases - pre-clean, clean and post-clean +- only the clean phase of the clean lifecycle is attached to a goal +- it is attached to the clean goal of maven-clean-plugin plugin 🤯 +- when we say `mvn clean`, we are actually instructing maven to run the clean phase +- when we run a phase, all the phases before it in the lifecycle are executed - in this case pre-clean would be executed first (if it has some goals attached to it, it does not by default) and the clean phase itself +- we just discussed that we typically invoke `mvn <>`, which runs all the goals of all the phases up to before the specified phase's lifecycle. however, we can also invoke a particular goal using the following syntax variations - + - `mvn plugin_group_id:plugin_artifact_id:plugin_version:goal` + - `mvn plugin_group_id:plugin_artifact_id:goal` + - `mvn plugin_prefix:goal` + - `mvn plugin_prefix:goal@execution_id` - while executions help us tie goals to phases, we can also invoke these executions directly + + ```sh + mvn org.apache.maven.plugins:maven-clean-plugin:2.5:clean + mvn org.apache.maven.plugins:maven-clean-plugin:clean + mvn clean:clean + ``` +- there are two kinds of plugins - + - **reporting plugins** - run during site generation + - **build plugin** - run to help build the project +- below - we try to tie the run goal of maven-antrun-plugin to pre-clean and post-clean phases - + ```xml + + org.apache.maven.plugins + maven-antrun-plugin + 3.0.0 + + + 1 + pre-clean + + run + + + + Learning Maven: pre-clean + + + + + + 2 + post-clean + + run + + + + Learning Maven: post-clean + + + + + + + + Learning Maven: standalone invoking + + + + ``` +- so, now when we run post-clean phase, all three phases - pre-clean, clean and post-clean would be run +- configuring a plugin + - a plugin can have multiple execution blocks. each execution block specifies - + - what goal to run + - what phase to tie this goal to + - configuration for the goal + - a configuration element can be specified in the root as well. earlier point was us basically specifying multiple execution blocks, which helped us tie goals to phases. this point here is about specifying configuration in the root block of the plugin. this can be useful when we invoke the plugin:goal directly + - dependencies - if a plugin has dependencies, we can for e.g. specify the version of that dependency using this block + - inherited - by default, the plugin configuration is inherited by the children. we can disable this behavior by setting inherited to false +- id should be unique across all executions for a plugin (not across plugins) +- apart from clean, the two other lifecycles are default and site +- the goals that are triggered for the default lifecycle are dependent on the packaging type (recall packaging type can be one of jar or pom, it is a part of maven coordinates). for jar, this is the table - + + | phase | plugin:goal | + |------------------------|-------------------------| + | process-resources | resources:resources | + | compile | compiler:compile | + | process-test-resources | resources:testResources | + | test-compile | compiler:testCompile | + | test | surefire:test | + | package | jar:jar | + | install | install:install | + | deploy | deploy:deploy | + +- when we specify dependencies in dependency management of parent, child projects can get these dependencies if they want to, but don't get the dependency unless added explicitly. **plugin management** works in the same way - inherit all the configuration related to the plugin specified in the plugin management section of the parent, but do not get it by default unless the plugin is added explicitly +- extra - executing scripts using exec maven plugin! - + ```xml + + exec-maven-plugin + 3.1.1 + org.codehaus.mojo + + + Renaming build artifacts + package + + exec + + + bash + handleResultJars.sh + + + + + ``` + +### Inheritance and Aggregation + +- `` helps determine the xsd (scm schema definition) version to use i.e. what elements are allowed in the pom file, how they should be configured, etc +- multiple levels of **inheritance** is supported in pom +- all pom (directly or indirectly) inherit from the [**super pom**](https://maven.apache.org/ref/3.6.3/maven-model-builder/super-pom.html) +- this inheritance helps us extract out common functionality around plugins, plugin configuration, dependencies, etc to a parent pom from which all other projects can inherit +- we can print the effective pom like so - `mvn help:effective-pom` +- my understanding - the parent might be managed separately - + - parent would be downloaded from the remote repository into the local repository, post which it can be used + - for development purpose - build the parent, which will install it in the local repository, and then build the child +- the parent might be managed in the same project, in which we can provide the `relativePath`. understand that this way, we do not have to build the parent project separately like above - +- also, packaging type in parent can be specified to be `pom` instead of relying on the default value i.e. `jar` +- till now, we discussed inheritance. we can also use **aggregation** in maven +- use case - when we run a phase e.g. `mvn clean`, `mvn install`, etc., it gets run for all the child projects as well +- not only that - in aggregate projects, if the child projects depend on each other, maven can determine the right order to build them in for us automatically +- we can also use the same pom for both aggregation and inheritance +- notes about versions - + - version property of parent gets inherited by the children as well + - for specifying the version of parent in the child, we use `${revision}` + - for specifying interdependencies between children, we use `${project.version}` +- based on everything above, a simple multi module setup - + - parent - + ```xml + + 4.0.0 + + org.apache.maven.ci + ci-parent + ${revision} + + + 1.0.0-SNAPSHOT + + + + child1 + child2 + + + ``` + - child - + ```xml + + 4.0.0 + + + org.apache.maven.ci + ci-parent + ${revision} + ../pom.xml + + + org.apache.maven.ci + ci-child + + + + org.apache.maven.ci + child2 + ${project.version} + + + + ``` + +### Dependency Management + +- we can specify a range of versions using `[3.8, 4.0)` (`[` for inclusive, `(` for exclusive) +- version format - `<>.<>.<>-<>` +- the **qualifier** `SNAPSHOT` is used for unstable projects, which can change frequently +- this way, if we depend on a project with snapshot in its version, we get access to the latest code always +- my understanding - if for e.g. we do not use snapshot - + - if the local repository already has an existing copy, maven would not bother refetching it from the remote repository to refresh the local copy + - probably sometimes the remote repository also would not allow pushing artifacts again against the same version +- bts, this SNAPSHOT is converted to timestamp automatically for us - so, `x.y.z-SNAPSHOT` basically becomes `x.y.z-timestamp`, and thus this way, maven always tries pulling the latest version for us +- maven is able to handle **transitive dependencies** for us - if our project depends on jar a which in turn depends on jar b, maven is able to download jar a and then jar b automatically for us when building the project +- **classpath** - location of classes and packages that our project is dependent on +- the different **dependency scopes** - + - **compile** - include dependency in all classpaths. the default if `scope` is not specified explicitly + - **test** - only required for compiling and executing tests, not required when executing therefore need not be included when packaging artifacts + - **runtime** - include dependency when project executes or tests are being run, but do not include them when compiling. e.g. jdbc driver like mysql connector. use case - we as developers will not mistakenly depend on these libraries + - **provided** - dependencies provided by the environment. e.g. we are developing a web application, we would need to depend on the servlet api to compile, but we would not want to include this in the war file, since it would be provided to us by the [servlet container](/posts/spring/#rest) + - **system** - like provided, but the path when compiling is specified manually + ```xml + + io.datajek + some-dependency + 1.0 + system + ${project.basedir}/libs/dep-1.0.jar + + ``` + - **import** - when a dependency is of type **pom** and has the scope of import, it should be replaced by its dependencies in its `dependencyManagement` section +- **dependency mediation** - choosing what version of dependency to use +- default behavior - + - e.g. our project depends on A and B. A depends on D which again depends on E (version x). B directly depends on E (version y). our project would use E (version y), because if we imagine dependencies like a tree, E (version y) is the closest to root + - e.g. our project depends on B and A (B comes first in pom.xml). B depends on E (version x), while A depends on E (version y). our project would use E (version x), because B comes first +- so one technique based on above - if we would like to use version x of E invariably - place version x of dependency E as *early as possible* and *directly* inside the pom. this way, we end up using the verison x of E always +- when adding a dependency, if we use the `exclusion` tag along with it, the dependencies specified in the exclusion tag are excluded from the dependency tree - + ```xml + + io.datajek + project9-projectb + 1 + + + com.google.code.gson + gson + + + + ``` +- this means that we should either expect gson to come as a transitive dependency from another project, or include gson manually inside our pom as another dependency, etc +- lets say our project name is xyz, and we mark a dependency in our pom as **optional** +- it excludes this dependency from being added as a transitive dependency in any project that has xyz itself as a dependency +- **dependency management** section - this way, all the projects in for e.g. a team can specify the versions of dependencies that work well with each other in one place, and all of it gets inherited by all other child projects +- example - + - if a parent has the following section - + ```xml + + + + com.google.code.gson + gson + 2.8.6 + + + + ``` + - the child can skip the version of gson when adding it as a dependency + ```xml + + + com.google.code.gson + gson + + + ``` +- another use case of dependency management section 🤯 - helps with transitive dependencies as well - e.g. if our project has a dependency A, which depends on C (version x), and has a dependency B, which again depends on C (version y). if we add the dependency C (version z) in the dependency management section, version z of dependency is the one that maven uses! + - note - we could also have included dependency C (version z) directly in the dependency section to force maven to use version z (default behavior - closest to the root wins). however, if another project added this project as a dependency, even if it was not using dependency C (version z) directly, it would still have it being added to its classpath. this problem would not have happened in the first place if we had added dependency C (version z) in the dependency management section as described earlier + +### Build Portability + +- **build portability** - having consistent ways to build cross environments, machines, teams, etc +- **variables** - variables defined in parent are inherited by children +- however, children can override these variables +- project can be accessed using `project`, e.g. `${project.version}`, `${project.build.sourceDirectory}`, etc. the root element of our pom is `project`, so that is where these variables come from. another very useful one i found - `${project.parent.basedir}` if for e.g. a child project wants to access something from the parent directory +- whatever we define in the properties section can be accessed using the name of the property directly, e.g. `${MyString}` +- java system properties (what we access using `java.lang.System.getProperties()`) can be accessed using `java`, e.g. `${java.home}` +- environment variables can be accessed using `env`, e.g. `${env.PATH}` +- variables in settings.xml can be accessed using `settings`, e.g. `${settings.offline}` +- **profiles** - alternative configuration for overriding default values +- we can specify profiles either in the project specific pom.xml, or in settings.xml, which itself can be machine / project specific + ```xml + + 4.0.0 + + io.datajek + project14 + 1 + Project14 + + + + test + + + + org.codehaus.mojo + exec-maven-plugin + + + my-special-exec + + /Project14/testScript.sh + + + + + + + + + + prod + + + + org.codehaus.mojo + exec-maven-plugin + + + my-special-exec + + /Project14/prodScript.sh + + + + + + + + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + my-special-exec + clean + + exec + + + + + + + + + + ``` +- the most basic way in which we can specify which profile to use - `mvn clean -Ptest` +- another way ofo enabling a certain profile - inside the `profile` section we saw above, we can have an activation section like below - + ```xml + + + testProp + DataJek + + + ``` +- this means that the profile expects the system property testProp to be of value DataJek - `mvn clean -DtestProp=DataJek` +- **archetypes** - a project templating toolkit so that a new project can be created easily with all the for e.g. firm specific standards established in the project from the get go + +## Working of Java + +- java tries releasing changes every 6 months +- not all versions of java are lts (long term support) - java will provide patches and security updates for a long time only for versions marked lts - effort towards maintaining non lts versions would be much less +- open jdk is the underlying java source code, but it is not responsible for building and distributing installable binaries +- there are various vendors sitting on top of it, like adopt openjdk, oracle jdk, and then some providers like amazon have their own jdk distributions which work better with their own aws products diff --git a/_posts/2023-12-27-spark.md b/_posts/2023-12-27-spark.md new file mode 100644 index 0000000..c44f29f --- /dev/null +++ b/_posts/2023-12-27-spark.md @@ -0,0 +1,1216 @@ +--- +title: Spark +--- + +## Introduction + +- spark - developed at uc berkley as an improvement of hadoop +- it borrowed concepts from hadoop but now works independent of it +- unlike hive etc, spark doesn't convert into the map reduce equivalent +- it is much more performant than hadoop +- it offered much more flexibility when compared to hadoop - + - unlike hadoop which relies on yarn as a cluster manager, it can work with different cluster managers like mesos and kubernetes. cluster manager, resource manager, container orchestrator, etc all mean the same thing + - unlike hadoop which relies on hdfs for storage, it can work with cloud storage options as well +- eventually, it became its own thing as it has much more features +- why spark is popular - we write for e.g. sql and all the complexities around distributed processing is abstracted away from us. also, it is a unified platform - all capabilities - including batch processing, stream processing and ml are in one platform +- databricks - founded by original developers of spark. for e.g. it makes deploying spark applications much easier, has an optimized runtime for spark, etc + +## Driver, Executor and Deployment Modes + +- we submit our spark application to spark +- spark creates a master (called **driver** in spark) and slaves (called **executor** in spark) +- the driver will just assign work to the executors, while the executors perform all the heavy tasks +- when we used `local[*]` in the java program, we basically used the **local cluster manager**. this is why we never had to build a jar and submit it to a spark cluster. `*` probably means spark will decide how many threads to use, but we can specify a number as well. a single jvm is used in this case. this is a useful alternative when testing out things in local. both the driver and executors are inside one jvm +- apart from local, the real cluster managers supported by spark include yarn, mesos and kubernetes +- now, there are two **deployment modes** for running spark in an actual cluster - + - **client mode** - the driver will be run on the client side. the client itself will spawn executors in the spark cluster. this is what happens when we use interactive clients like spark-shell. so, the driver dies automatically when the interactive shell is closed + - **cluster mode** - both the driver and the executors will run on the cluster. this is what happens when we submit built jars to a spark cluster +- i think deployment modes are not applicable when using the local cluster manager, since there is no actual cluster over there in the first place, since both driver and executors were inside the same jvm + +## Getting Started + +- download spark from [here](https://spark.apache.org/downloads.html) +- `tar -xvzf spark-3.5.0-bin-hadoop3.tgz` +- pom.xml - the junit configuration was needed because otherwise i was getting "cannot access class sun.nio.ch.DirectBuffer". i am using java 8 and latest versions of spark and junit possible + ```xml + + + 4.0.0 + + com.example + spark-batch + 1.0-SNAPSHOT + + + 1.8 + 1.8 + 2.13 + 3.5.0 + 5.10.1 + 3.2.1 + + + + + org.apache.spark + spark-core_${scala.version} + ${spark.version} + + + + org.apache.spark + spark-sql_${scala.version} + ${spark.version} + + + + org.junit.jupiter + junit-jupiter + test + + + + + + + org.junit + junit-bom + ${junit.version} + pom + import + + + + + + + + maven-surefire-plugin + ${surefire.version} + + + --add-opens=java.base/java.lang=ALL-UNNAMED + --add-opens=java.base/java.lang.invoke=ALL-UNNAMED + --add-opens=java.base/java.lang.reflect=ALL-UNNAMED + --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED + --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED + --add-opens=java.base/java.util.concurrent=ALL-UNNAMED + --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED + --add-opens=java.base/sun.nio.ch=ALL-UNNAMED + --add-opens=java.base/sun.nio.cs=ALL-UNNAMED + --add-opens=java.base/sun.security.action=ALL-UNNAMED + --add-opens=java.base/sun.util.calendar=ALL-UNNAMED + --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED + + + + + + + ``` +- app - notice how we derive master and file name from args, so that we can use the same spark code for running in both cases - when we use locally installed hadoop in pseudo distributed mode and when we use the local cluster manager + ```java + public class Main { + + private static final Logger log = Logger.getLogger(Main.class.getName()); + + public static void main(String[] args) { + String master = args[0]; + SparkSession spark = SparkSession.builder() + .master(master) + .appName("TablesDemo") + .getOrCreate(); + + log.info("reading file..."); + String fileName = args[1]; + Dataset surveyDf = read(spark, fileName); + + log.info("performing transformations..."); + Dataset countByCountryDf = countByCountry(surveyDf); + + log.info("final stats = " + countByCountryDf.collectAsList()); + + // try (Scanner sc = new Scanner(System.in)) { + // log.info("waiting for user acknowledgement"); + // sc.nextLine(); + // } + } + + protected static Dataset countByCountry(Dataset surveyDf) { + return surveyDf.filter(col("age").lt(40)) + .select("Age", "Country", "state", "Gender") + .groupBy("Country") + .count(); + } + + protected static Dataset read(SparkSession spark, String fileName) { + return spark.read() + .format("csv") + .option("header", true) + .option("inferSchema", true) + .option("path", fileName) + .load(); + } + } + ``` +- we also pause the program for user input when using local cluster manager so that we can view the spark ui - the spark ui would only be visible while the job is running. the spark ui is visible at http://localhost:4040/jobs/ +- we can override defaults at cluster level from ~/spark-3.5.0-bin-hadoop3/conf/. this includes files like log4j2.properties.template (for logging), spark-defaults.conf.template (for configuring what we specify via `SparkConf`), spark-env.sh.template (for properties like java home) etc +- writing tests - note how because we had broken our application down into separate chunks using different methods, we were able to unit test our application easily - refactor the transformations into separate methods, which input and output `Dataset`, then simply call this method in the unit test and call `collectAsList` on the output to view it as a list and assert on it + ```java + @TestInstance(TestInstance.Lifecycle.PER_CLASS) + public class MainTest { + + SparkSession spark; + + @BeforeAll + void setup() { + System.out.println("setting up spark..."); + spark = SparkSession.builder() + .master("local[*]") + .appName("Main") + .getOrCreate(); + } + + @AfterAll + void cleanup() { + System.out.println("cleaning up spark..."); + spark.close(); + } + + @Test + void whenCsvIsRead_thenDatasetIsReadSuccessfully() { + Dataset input = Main + .read(spark, "src/main/resources/sample.csv"); + + assertEquals(9, input.count()); + } + + @Test + void whenCountByCountryIsCalled_thenResultIsOk() { + Dataset input = Main + .read(spark, "src/main/resources/sample.csv"); + Dataset output = Main.countByCountry(input); + Map countMap = output.collectAsList().stream() + .collect(Collectors.toMap((a) -> a.getString(0), (a) -> a.getLong(1))); + + assertEquals(4, countMap.get("United States")); + assertEquals(2, countMap.get("Canada")); + assertEquals(1, countMap.get("United Kingdom")); + } + } + ``` +- understand that we could not have directly performed assertions on the dataframe, a dataframe is just partitions of data sitting in different executors. so, we first call `collectAsList()` to get all the data into the driver, and then we can easily perform assertions +- we could also have generated mock data as below, instead of reading from csv in tests like we did above. both methods have their own pros and cons imho - generating mock data repeatedly has a lot of code, while reading using a csv means slower test - by mocking data we can generate data specific for each test, while using a csv does help with cleaner code + ```java + @Test + void whenCountByCountryIsCalled_thenResultIsOk_unit() { + StructType schema = new StructType(new StructField[] { + DataTypes.createStructField("Age", DataTypes.IntegerType, true), + DataTypes.createStructField("Gender", DataTypes.StringType, true), + DataTypes.createStructField("Country", DataTypes.StringType, true), + DataTypes.createStructField("state", DataTypes.StringType, true) }); + + List rows = Arrays.asList(new Row[] { + RowFactory.create(37, "Female", "United States", "IL"), + RowFactory.create(44, "M", "United States", "In"), + RowFactory.create(32, "Male", "Canada", "NA") }); + + Dataset input = spark.createDataFrame(rows, schema); + Dataset output = Main.countByCountry(input); + Map countMap = output.collectAsList().stream() + .collect(Collectors.toMap((a) -> a.getString(0), (a) -> a.getLong(1))); + + assertEquals(1, countMap.get("United States")); + assertEquals(1, countMap.get("Canada")); + } + ``` + +### Using Spark Local Cluster Manager + +- launch.json - equivalent of run configurations in intellij + ```json + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Main [Local]", + "request": "launch", + "mainClass": "com.example.spark_batch.Main", + "projectName": "spark-batch", + "args": ["local[*]", "src/main/resources/sample.csv"] + } + ] + } + ``` + +### Using Spark Submit + Hadoop + +- setup hadoop in pseudo distributed mode using [this link](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html) +- namenode format - `~/hadoop-3.3.6/bin/hdfs namenode -format` +- start all components using `~/hadoop-3.3.6/sbin/start-all.sh` +- create initial hdfs directories - `~/hadoop-3.3.6/bin/hdfs dfs -mkdir -p /user/$USER` +- copy the necessary files - + - `~/hadoop-3.3.6/bin/hdfs dfs -put src/main/resources/sample.csv` + - `~/hadoop-3.3.6/bin/hdfs dfs -ls` +- build the jar. note - i am able to work without generating fat jars / use shade plugin for now, but based on the use case, that might be necessary - + ```sh + mvn clean install + ``` +- submitting jobs to spark - note the arguments, we need to specify them explicitly since default value of master is local and default value of deploy-mode is client + ```shell + ~/spark-3.5.0-bin-hadoop3/bin/spark-submit \ + --verbose \ + --class com.example.spark_batch.Main \ + --master yarn \ + --deploy-mode cluster \ + target/spark-batch-1.0-SNAPSHOT.jar \ + sample.csv yarn + ``` +- other important options which we could have sent spark-submit include + - executor-memory, driver-memory - ram + - executor-cores, driver-cores - cpu cores + - num-executors - number of executors + +### Using Spark Shell + +- using interactive clients - `./bin/spark-shell` +- on starting spark shell, we can access the ui at http://localhost:4040/jobs/ +- e.g. we can run the following commands - + ```scala + val df = spark.read.csv("full_path_to_sample.csv") + df.show() + ``` +- note how we did not have to create a spark session manually here, unlike when writing spark applications + +## Dataframe + Hadoop + +- **dataframe** - distributed table with a well defined schema i.e. each column has a specific data type +- working with dataframe is like working with tables in sql +- data stored in for e.g. hdfs is broken into smaller **splits**. these splits are of size 128mb by default +- the dataframe too will basically be composed of smaller chunks called **partitions**, where each partition might represent the hdfs split +- my understanding - the fact that spark does everything using memory instead of using files like map reduce is what makes spark more performant when compared to hadoop as well +- above, we talked about storage / data, now we talk about compute +- we submit the job to spark +- spark will then with the help of yarn's resource manager create the application master in one of the worker nodes. recall how containers are used hadoop 2.x onwards, so this application master would be created inside a yarn / hadoop container +- now, the spark driver will run inside this application master container +- then, the spark driver will talk to yarn's resource manager and create more worker containers +- then, spark will spawn executors inside these worker containers +- now, each executor will be responsible for some partition(s) of data, which it loads in its memory +- while doing all this, spark will take care of **rack awareness** i.e. assigning executors the partitions in such a way that there is minimum network transfer between hdfs and executor / container + +## Spark CPU and Memory + +- recall we said that we can dictate how many cores an executor can have when submitting the spark job +- e.g. we say executors should have 4 cores. nowadays, each core can itself be split into virtual cores as well +- this virtual core is called a **slot** in spark +- so, if we have 2 virtual cores per core, and if we assigned our executor 4 cores, it essentially has 8 slots +- a task uses one slot +- so, number of tasks that can run in a cluster = (number of slots in the executor) * (number of executors) +- now, assume that spark computes that it needs 30 tasks but we only have 20 slots in our cluster +- spark is intelligent enough to schedule the 20 tasks and queue the remaining 10 tasks +- my understanding - we can control the "slots" (yes, slots not cores) via `spark.driver.cores` / `spark.executor.cores`, and i think these are same as passing `--driver-cores` / `--executor-cores` to spark-submit +- till now, we talked about cpu, and now we talk about memory +- note for pyspark - + - the driver will have a python component running alongside it. so, if for e.g. using yarn, inside the application master container, there will be a python process and the actual jvm driver + - if we use functionality / libraries of python not available in pyspark, then the executors too will have a python component running alongside them. so, if for e.g. using yarn, inside the container, there will be a python process and the actual jvm executor +- when setting memory limits, we have two variations for both executor and driver - + - `spark.driver.memory`, `spark.driver.memoryOverhead` - my assumption - `spark.driver.memory` is same as passing `--driver-memory` to spark-submit + - `spark.executor.memory`, `spark.executor.memoryOverhead` - my assumption - `spark.executor.memory` is same as passing `--executor-memory` to spark-submit +- the memory variant is for the actual jvm driver / jvm executor, while the memory overhead variant is for non jvm processes (like the one needed when using pyspark) +- so, e.g. we set `spark.executor.memory` to 1gb and `spark.executor.memoryOverhead` to 0.1 + - spark driver would ask yarn for containers having memory 1.1gb. note - this value should of course be lesser than a worker node's physical memory, otherwise we will get exceptions + - so, out of the 1.1gb for a container, 1gb would be allocated for executor jvm process, while the remaining 100mb would be allocated for non jvm processes, like the sidecar needed for pyspark +- there is more to how memory is broken down in spark, it is too much for my brain for now 😛 + +## Job Scheduling + +- there are two sides to this + - job scheduling across different applications - **dynamic resource allocation** + - job scheduling inside the same application - **spark schedulers** +- just covering from theoretical perspective, how to configure this can be found [here](https://spark.apache.org/docs/latest/job-scheduling.html) + +### Dynamic Resource Allocation + +- e.g. we have a spark job that uses up all the resources in our cluster +- now, we submit another small job +- but, this job cannot run since all the resources have already been used up +- a small job has to wait for the large job to complete +- so, spark has two strategies - static allocation and dynamic allocation +- **static allocation** - the default. the driver will ask for all the resources for its executors upfront. it will hold on to them for the entire duration till the entire job is over +- when we asked for some executors via the `num-executors` option, it meant that the spark driver would hold on to these resources for the entire duration of the job +- however, the number of executors the stages actually use can change dynamically +- remember - number of executors used in a stage depends on the number of tasks a stage has +- e.g. if a stage has 20 tasks, and we have executors with 5 slots (and sufficient memory), we will actually be using 20 / 5 = 4 executors +- but clearly, the number of executors actually needed by spark can change across stages +- so, we can instead use **dynamic resource allocation** - where instead of us manually specifying the number of executors to use, it is determined dynamically for every stage +- by default, static allocation is used, but we should consider using dynamic allocation if we are using a shared cluster for multiple jobs + +### Spark Schedulers + +- if our spark application has multiple jobs - + ```java + df1.join(df2).count() + df3.join(df4).count() + ``` +- by default, spark driver would execute this code synchronously. so, first all jobs for the first line would finish and then the all jobs for the second line would start and finish +- however, what if we use multithreading? - e.g. something like this - + ```java + Thread t1 = new Thread(() -> df1.join(df2).count()); + Thread t2 = new Thread(() -> df3.join(df4).count()); + t1.start(); t2.start(); + t1.join(); t2.join(); + ``` +- this means that the jobs for both would be triggered in parallel +- this is what we might actually want as well - what is the point of stalling the second job for the first job? +- however, when kicking off the jobs in parallel like this, they will content with each other for resources +- solution - by default, spark uses the fifo scheduler, but we can ask it to use the fair scheduler as well +- **fifo scheduler** - the first job gets priority. it gets all the resources for itself. then the second job gets the leftover, and would be stalled if not enough resources are available +- **fair scheduler** - assign resources to tasks in a round robin fashion. all issues like **starvation** (short job waiting for a long running job) etc are prevented + +## Transformations and Actions + +- spark dataframes are **immutable** +- we tell spark driver the **transformations** we would like to do +- these transformations are simple sql statements - e.g. filter where age > 40, projection of columns, grouping, etc +- each transformation then results in a new dataframe +- transformations can be further categorized into **narrow transformation** and **wide transformation** +- narrow transformation - each partition of data can be processed independently. a transformation on one partition is independent of a transformation on another partition. e.g. filtering +- wide transformation - partitions need to be **repartitioned**. e.g. in group by, all rows belonging to the same group need to be brought into the same partition. this process of repartitioning of data for a wide transformation is called a **shuffle** +- **execution plan** - we write the transformations one by one using a builder pattern. but spark might not execute the operations in the same way - it will construct an execution plan, which is an optimized version of our transformations - e.g. if we filter then use project, it would move the projection before the filtering +- **lazy evaluation** - spark will not execute the transformations immediately - it will build the execution plan described above and wait for us to call an **action**. actions include `read`, `write`, `collect`, `show`. the moment we call an action, the execution plan is triggered, and we see a **job** +- `collect` will basically collect all the data in the driver. so, be mindful of out of memory exceptions when performing this operation + +## Jobs, Stages and Tasks + +- our entire spark application is broken down into **jobs** +- a job is triggered only once an **action** is encountered (recall lazy evaluation) +- jobs are further broken down into **stages** +- stages are further broken down into **tasks** +- so, tasks are the unit of work +- a task basically executes on one **slot** of executor and is responsible for a partition of data +- a task is a bunch of narrow transformations +- all the tasks of a single stage operate in **parallel** +- each wide transformation results in a new stage, due to the repartitioning that is needed +- before the tasks of a next stage start, all tasks of the previous stage should complete, because that was the entire point behind wide transformation - it depends on all the previous stage's partitions and not just one +- when going from one stage to another, since data is being **shuffled** / **repartitioned**, data is temporarily written to a buffer which spark calls **exchange** +- so, the idea probably is to wait for all tasks of a stage to complete and then with the help of exchange, get the right partition of data to the right executor and finally kick off the tasks of the new stage +- this process of copying data from the **write exchange** to the **read exchange** is called **shuffle / sort** + +![job stages tasks](/assets/img/spark/job-stages-tasks.drawio.png) + +## Debugging Spark + +- debugging spark is not easy - all the code we write is first converted into an execution plan and is lazily evaluated +- so, when we place debug pointers in our code, we are just stepping through the driver thread (which is not even doing anything). we are not stepping through the executor thread actually performing those transformations +- we can however use **lambda accepting transformations** like `map`, `flatMap`, `forEach`, etc +- when we place debug pointer inside these lambdas, we will be able to see the executor thread performing them +- logs are the best way of debugging a production spark application, which is running in a distributed environment +- first step is to log using the log4j2 libraries that come as a transient dependency from spark libraries, which i did in the code snippet shown earlier +- second step would be to provide the appropriate log configuration like - + - log4j2.properties file to use. this can be cluster wide or application specific, depends on use case + - configure the file and console appenders, specifying file names for the file appenders + - actually locating the log files for the driver vs the executors in the cluster manager + +## Spark Structured APIs + +- a bit of history - + - spark first came up with rdd, which was a better alternative to map reduce + - then spark came up with dataframe api, which was easier to work with + - however, we could not use the regular lambda transformations like `map`, `filter`, etc which rdd had + - so, the idea would be that we would convert between rdd to dataframe to use these, e.g. dataframe has `toJavaRDD()` + - however, on going from dataframe to rdd, we would lose out on the optimizer + - so, spark then came up with dataset api - + - we can use for e.g. java pojos which would give us compile time safety + - it supported the regular lambda transformations + - dataframe is now `Dataset`. row is a generic object, so it does not have the compile time safety unlike if we use pojos + - note - apparently, in java, spark does not have the concept of `DataFrame`, so we should instead use `Dataset` anyway +- rdd stands for **resilient distributed dataset** + - resilient because if for e.g. there is a failure in one of the executors, spark knows how to load the partitions the failed executor was responsible for into a new executor + - distributed because spark partitions the data into smaller chunks and processes them in parallel +- spark calls its dataset api as **structured apis** +- structured apis basically use rdd underneath +- spark asks us to use structured apis where possible, since there is a **catalyst optimizer** (also called **tungsten**) sitting in between structured apis and rdd, so we lose out on the optimizations when using rdd directly +- use rdd only for specific use cases like custom partitioning +- using dataframe (i.e. dataset of row) vs dataset (i.e. dataset of a specific pojo) - + - dataset will have compile time safety - using `.filter((person) -> person.age > 40)` has compile time safety unlike `.where(col("age").gt(40))` + - dataset is less optimal when compared to dataframe - serialization is an important step in distributed computing. dataset serialization will use java serializers, while dataframe serialization will be able to use tungsten underneath, which is more performant +- there is also something called spark sql - we can write a string which will exactly look like sql. this long string would be an alternative to chaining methods in spark dataframe api - + ```java + Dataset inputDf = // read.... + inputDf.createOrReplaceTempView("survey"); + Dataset countDf = spark.sql("select Country, count(*) from survey " + + "where age > 40 " + + "group by Country"); + ``` +- this sql works just like dataframe, so there is no performance impact there +- based on everything above, i will probably use dataframe all the way. i would also use the java apis and not sql, since it has a bit better compile time safety / auto complete as compared to writing sql strings +- **spark engine** - this sits on top of the chosen cluster manager. recall how unlike yarn is a part of hadoop, spark does not come with a cluster manager, and supports yarn, mesos, kubernetes. spark engine acts as an interface between spark and the chosen cluster manager + +![spark ecosystem](/assets/img/spark/spark-ecosystem.drawio.png) + +## Execution Plan / Catalyst Optimizer Working + +- the catalyst optimizer works internally in following steps +- or we can say that spark executes the **execution plan** in the following steps - +- generate an ast (abstract syntax tree). any errors in our field names, sql function usage, etc would be caught here +- now we will have a **logical plan** +- perform optimization on our logical plan. the optimization here includes techniques like - + - **predicate pushdown** - push filtering operations earlier to reduce the amount of data transfer + - **partition pruning** - when writing to internal sources, we can specify partitioning scheme, and then there will be a different directory for each partition. this has been discussed in [data sources](#data-sources). predicate pushdown can go up to as early as only reading some partitions of data when loading the data into dataframes + - **projection pruning** - push projection operations earlier to reduce the amount of data transfer +- generate a bunch of **physical plans**, and associate a cost with each of them. e.g. one plan uses shuffle join, another uses broadcast join +- finally, a **cost model** evaluates the most optimal physical plan +- **wholestage code generation** - generate the bytecode to run on each executor + +![execution plan](/assets/img/spark/execution-plan.jpg) + +## Data Sources + +- data **sources** in spark can be external or internal +- **external** - external to spark. some notable ones include + - jdbc data sources - oracle, ms sql, postgres, mysql + - no sql - cassandra, mongo db + - cloud data warehouses - snowflake, redshift + - streaming sources - kinesis, kafka +- **internal** - this can be either **hdfs** or **cloud based storage** e.g. s3 (preferred) +- for internal source, there are several **file formats** which we have to consider. again, spark supports various file formats like parquet, json, csv, avro, etc +- there are two ways to access external sources - + - ingest using external tools to write data from external sources to internal sources. data goes unmodified from different sources into internal sources. then spark reads from these internal sources directly. useful when using spark for batch processing + - make spark directly read from these different external sources +- batch processing prefers first option because for e.g. our db capacity was provisioned with otlp workloads in mind, and might not be optimized for spark based big data workloads. thus, it helps decouple the two from performance, security, etc perspective +- stream processing prefers second option +- so basically, while we established the architecture that data from external sources -> some tools -> internal sources -> spark, we can however, directly do data from external sources -> spark
+ ![spark architecture](/assets/img/spark/spark-architecture.drawio.png) +- finally, sinks work in the same way in spark - they can be internal or external +- we use `DataFrameReader` to read from internal / external sources, which we obtain via `spark.read()` +- we specify the type using `format` +- we provide configuration using `option` +- we can also provide a mode, which determines the behavior when spark encounters a **malformed record**. it can be - + - **permissive** (default) - make all columns null and place the record in a new column + - **drop malformed** - ignore the malformed records + - **fail fast** - terminate the program +- schema - + - for file formats like csv, either it can be defined explicitly using `schema` (preferred), or it can infer the schema automatically (prone to errors) + - for file formats like avro / parquet, the schema is a part of the file format itself and therefore spark derives its schema from the file format itself +- so basically, while we can use `schema` for defining the schema explicitly, remember this is applicable only for formats like csv and json, so best case would be to avoid these file formats altogether and try and use parquet / avro formats where possible +- spark has its own data types, and they map to different types specific to the language we use, e.g. we can see how spark types map to java types [here](https://spark.apache.org/docs/3.5.0/sql-ref-datatypes.html#supported-data-types)
+ ![spark to java types](/assets/img/spark/spark-to-java-types.png) +- the last boolean flag specifies whether the field is nullable or not + ```java + StructType schema = new StructType(new StructField[] { + DataTypes.createStructField("FL_DATE", DataTypes.DateType, true), + DataTypes.createStructField("OP_CARRIER", DataTypes.StringType, true), + DataTypes.createStructField("ORIGIN", DataTypes.StringType, true), + DataTypes.createStructField("DEST", DataTypes.StringType, true), + DataTypes.createStructField("CANCELLED", DataTypes.IntegerType, true), + DataTypes.createStructField("DISTANCE", DataTypes.IntegerType, true) }); + + Dataset flightDf = spark.read() + .format("csv") + .option("header", "true") + .option("path", "src/main/resources/flight*.csv") + .option("dateFormat", "M/d/y") + .option("mode", "FAILFAST") + .schema(schema) + .load(); + + flightDf.printSchema(); + flightDf.show(); + ``` +- note how we specified the date format in configuration as well - for column specific configuration, maybe we can use `to_date` etc to convert from string to date type +- writing data - the default format used by spark is parquet if not specified +- the mode can be - + - **append** - append to the existing data + - **overwrite** + - **error if exists** + - **ignore** - write if location is empty, ignore otherwise +- so, when i use the code below - + ```java + flightDf.write() + .format("avro") + .mode("overwrite") + .option("path", "src/main/resources/output/sinks_demo") + .save(); + ``` +- i get the following output -
+ ![simple output](/assets/img/spark/simple-output.png) +- note - `df.write()` has return type of `DataFrameWriter` (recall `spark.read()` had return type of `DataFrameReader`) +- note - for spark to avro, i had to add following dependencies, since avro related dependencies are bundled separately from spark + ```xml + + org.apache.spark + spark-avro_${scala.version} + ${spark.version} + + + + + 2.15.3 + + com.fasterxml.jackson.core + jackson-databind + ${jackson-databind.version} + + ``` +- **partition by** - the code is as follows - `df.write().partitionBy("OP_CARRIER", "ORIGIN")` +- notice how it is chained to `DataFrameWriter` and not `Dataset` unlike [`repartition`](#repartition-and-coalesce) - so, my understanding - partition by is when we want to write the output and make it optimized for future jobs that might read this output. however, repartition can help with optimizing the current job itself +- the columns we partition on are not visible in the output files, because they are essentially part of the directory names! +- note how directories for origin are nested inside directories for carrier
+ ![partition by output](/assets/img/spark/partition-by-output.png) +- we can also chain `maxRecordsPerFile` to the `DataFrameWriter`, just like we chained `partitionBy`. it is useful when there are some partitions that become too big for spark to process. e.g. in the above example, if for carrier nw and origin den, the number of flights were too many, by using this option, this directory too will contain multiple files +- why use **bucketing** - since partitioning results in a unique directory for each value, partitioning by a column having too many unique values might not be a good idea, since it would result in too many directories (partitions) with too less data. so, we can instead use **bucketing** for columns having too many unique values +- how it works - we specify the number of buckets and the column to bucket using. then, spark will do hash(column_value) % number_of_buckets to get the bucket in which the row should be stored +- **sorting** - sorting can further improve the performance - e.g. if we had to perform joins, and the data is already sorted on the columns used for join, we can skip the sort phase in the shuffle join (described later) +- so, just like `partitionBy`, i chained the following to `DataFrameWriter` - + ```java + df.write() + .bucketBy(2, "OP_CARRIER", "ORIGIN") + .sortBy("OP_CARRIER", "ORIGIN") + .mode("overwrite") + .option("path", "src/main/resources/output/sinks_demo/") + .save(); + ``` +- however, i got the following exception on running the above - `'save' does not support bucketBy and sortBy right now` + +### Spark + Hive + +- so, we have to use `saveAsTable`. my understanding - till now, we were simply storing data as normal files, and they were accessible like a regular directory structure, but for bucketing and sorting, we need to bring in "database support" of spark +- my understanding - whatever we discuss in this part has been borrowed from hive +- since spark too has concepts of database and tables, there are two things spark needs to store - + - the **actual data** - this is what we have seen till now, when for e.g. we saw files being stored inside folders (i.e. partitions) + - the **metadata** - the table name, database name, etc. this is stored in something called **metastore**. by default, an in memory implementation is used i.e. the duration of this metastore is the same as the spark session +- there are two kinds of tables in spark - + - **managed tables** - spark will manage both the metadata and the actual data. by default, the actual data is stored inside `spark.sql.warehouse.dir`. when we for e.g. drop a table, both the metadata and the actual data get deleted + - **unmanaged tables** - also called **external tables**. spark will only manage the metadata. when creating a table, we specify the location of the actual data. useful when for e.g. the actual data already exists somewhere and is not managed by us. when we for e.g. drop a table, only the metadata is deleted, and the actual data is untouched +- managed tables are preferred - we can do optimizations like bucketing and sorting. with unmanaged tables, we have to rely on the existing data structure. we need unmanaged tables when we need to perform spark operations on already existing data +- my thought - one technique might be to port data from unmanaged to managed tables for better performance / more flexibility? this should ideally again be something spark can do - + - read from unmanaged tables + - perform some transformations like sorting and bucketing + - finally write to managed tables +- we need to add the spark + hive dependency + ```xml + + org.apache.spark + spark-hive_${scala.version} + ${spark.version} + + ``` +- then, chain the hive support in the spark session builder - + ```java + SparkSession spark = SparkSession.builder() + .master("local[*]") + .appName("TablesDemo") + .enableHiveSupport() + .getOrCreate(); + ``` +- now, we first create a database - (otherwise default would be used) + ```java + spark.sql("create database if not exists tables_demo"); + spark.catalog().setCurrentDatabase("tables_demo"); + spark.catalog().listDatabases().show(); + ``` +- output of list databases -
+ ![list databases](/assets/img/spark/list-databases.png) +- finally, we write a dataframe as follows. note - notice how we do not provide the path parameter, since it is managed table territory, therefore the `spark.sql.warehouse.dir` will be used, and we call `saveAsTable(db_name.table_name)` instead of `save()` + ```java + flightsDf.write() + .bucketBy(2, "OP_CARRIER", "ORIGIN") + .sortBy("OP_CARRIER", "ORIGIN") + .mode("overwrite") + .saveAsTable("tables_demo.bucketed_by"); + ``` +- output - notice how two new directories - for metadata (metastore_db) and for storing the actual data (spark_warehouse) are created. data is stored inside `<>.db/<>`
+ ![bucket by](/assets/img/spark/bucket-by-output.png) + +## Transformations + +- for transformations, we can either use spark functions like we do in sql, or we can use lambda accepting transformations like `groupByKey` +- for specifying columns in transformations, either use column_name directly as a string, or use `df.col("column_name")`. note - we cannot use both methods in the same transformation +- **udf** or **user defined functions** - register custom functions to use inside spark - + ```java + UserDefinedFunction parse_gender = udf((String gender) -> { + Pattern malePattern = Pattern.compile("^m$|^male$|^m.n$", Pattern.CASE_INSENSITIVE); + Pattern femalePattern = Pattern.compile("^f$|^female$|^wom.n$", Pattern.CASE_INSENSITIVE); + return malePattern.matcher(gender).find() ? "male" + : (femalePattern.matcher(gender).find() ? "female" : "unknown"); + }, DataTypes.StringType); + spark.udf().register("parse_gender", parse_gender); + + Dataset gendersDf = surveyDf + .select("Gender") + .withColumn("gender_cleaned", expr("parse_gender(Gender)")); + + gendersDf.show(); + ``` +- a function for adding a unique identifier to each record - `monotonically_increasing_id`. this number would be unique across all partitions but remember that it would not necessarily be continuous +- usual sql constructs like renaming using `alias`, changing data type using `cast`, etc are available +- `explode` - e.g. our record contains an array field. this field will ensure our result contains a record for each element of the array. e.g. our input has 2 elements in the array for the first record, and 3 elements in the array for the second record. the output will have 5 elements + +### Example + +- input - + + | day | month | year | + |-----|-------|------| + | 28 | 1 | 2002 | + | 23 | 5 | 81 | + | 12 | 12 | 6 | + | 7 | 8 | 63 | + | 23 | 5 | 81 | + +- transformation - + ```java + Dataset cleanedDobDf = dobDf.withColumn("year_parsed", + when(col("year").leq(23), col("year").plus(2000)) + .when(col("year").leq(99), col("year").plus(1900)) + .otherwise(col("year"))) + .withColumn("date", concat_ws("/", col("day"), col("month"), col("year_parsed"))) + .withColumn("parsed_date", to_date(col("date"), "d/M/yyyy")); + ``` +- output - + + | day | month | year | year_parsed | date | parsed_date | + |-----|-------|------|-------------|------------|-------------| + | 28 | 1 | 2002 | 2002 | 28/1/2002 | 2002-01-28 | + | 23 | 5 | 81 | 1981 | 23/5/1981 | 1981-05-23 | + | 12 | 12 | 6 | 2006 | 12/12/2006 | 2006-12-12 | + | 7 | 8 | 63 | 1963 | 7/8/1963 | 1963-08-07 | + | 23 | 5 | 81 | 1981 | 23/5/1981 | 1981-05-23 | + +## Aggregations + +- **simple aggregations** - note the different aggregations carefully, e.g. difference between `count("*")` vs `count("Description")` + ```java + Dataset aggDf = inputDf.select( + count("*").alias("total_count"), + count("Description").alias("non_null_description_count"), + countDistinct("InvoiceNo").alias("unique_invoices"), + sum("Quantity").alias("total_quantity"), + avg("UnitPrice").alias("avg_unit_price")); + ``` +- **grouping aggregations** - we can also perform groupings using `groupBy` + ```java + Dataset aggByCountryAndInvoiceDf = inputDf + .groupBy("Country", "InvoiceNo") + .agg(count("Quantity").alias("total_quantity"), + round(sum(col("UnitPrice").multiply(col("Quantity"))), 2).alias("invoice_value")); + aggByCountryAndInvoiceDf.show(); + ``` +- note - when we chained `groupBy`, it returns a `RelationalGroupedDataset`, and when we again chained `agg` to it, it was converted back to our usual `Dataset` +- **window aggregations** - e.g. we need the running total by week for every country. three things to keep in mind for windowing aggregations - + - identify the **partitioning columns** - e.g. here, restart the running total for every country + - identify the **ordering of columns** - e.g. here, ensure that the data is ordered by the week number, week 3's running total = week 1's sale + week 2's sale + week 3's sale, and this is only possible when we order by week + - identify the **window bounds** - e.g. here, it starts at the first record and ends at the current record, like described in the week 3 example above +- example - note - for the bounds, we also have something called `unboundedFollowing`, but for our use case, `unboundedPreceding` and `currentRow` was enough + ```java + WindowSpec windowSpec = Window.partitionBy("country") + .orderBy("week_number") + .rowsBetween(Window.unboundedPreceding(), Window.currentRow()); + + Dataset outputDf = inputDf + .withColumn("running_total", sum("invoice_value").over(windowSpec)); + outputDf.show(); + ``` +- output would be automatically sorted by country and week number based on the window we specified, and it would have the running total column added to it, which automatically resets for every country + +## Joins + +- bringing "left" and "right" dataframe together +- we combine them using the **join expression** and the **join type** + ```java + Dataset orderWithProductsDf = orderDf.join(productDf, + orderDf.col("prod_id").equalTo(productDf.col("prod_id")), + "inner"); + orderWithProductsDf.show(); + ``` +- order schema - (order_id, prod_id, unit_price, qty) +- product schema - (prod_id, prod_name, list_price, qty) +- therefore, the joined table's schema - (order_id, prod_id, unit_price, qty, prod_id, prod_name, list_price, qty) +- note how the joined table's schema contains two columns for quantity + - one is from the product - it probably indicates in stock + - one is from the order - it indicates quantity of product ordered +- assume we wanted to select only some columns (only order's quantity, not product's quantity) - + ```java + Dataset orderWithProductsDf = orderDf.join( ... ) + .select("order_id", "prod_name", "unit_price", "qty"); + ``` +- we get the following exception - `[AMBIGUOUS_REFERENCE] Reference 'qty' is ambiguous, could be: ['qty', 'qty'].` +- how it works - we pass column names, internally spark converts to it the right identifier. when we pass qty, it probably finds two identifiers and hence gets confused +- some solutions - + - rename columns before joining (`withColumnRenamed`) + ```java + productDf = productDf.withColumnRenamed("qty", "product_qty"); + ``` + - drop one of the ambiguous columns - + ```java + Dataset orderWithProductsDf = orderDf.join( ... ) + .drop(productDf.col("qty")) + .select("order_id", "prod_name", "unit_price", "qty"); + ``` + - specify explicitly which dataframe's quantity to use - notice the end of the select clause + ```java + Dataset orderWithProductsDf = orderDf.join( ... ) + .select(col("order_id"), col("prod_name"), col("unit_price"), orderDf.col("qty")); + ``` +- outer joins - e.g. when we use an outer join like left, we might receive nulls for some columns. to get rid of the nulls, we can use `coalesce`, which will set the final value to the first non null value from the list it receives. e.g. below, we do a left join to get all the orders. prod_name comes from the product dataframe. if one of the products are missing, prod_name would be null. so, we tell spark to use prod_id of order dataset if prod_name of product dataset is missing + ```java + Dataset orderWithProductsDf = orderDf.join(productDf, + orderDf.col("prod_id").equalTo(productDf.col("prod_id")), + "left") + .withColumn("prod_name", coalesce(col("prod_name"), orderDf.col("prod_id"))) + .select(col("order_id"), col("prod_name"), col("unit_price"), orderDf.col("qty")); + ``` +- one small trick for clean code - note how we write each of the chaining all in one place. we can for e.g. extract some parts to variables like join conditions, some complex transformations, etc +- another technique might be to extract parts of logic to functions that accept and return dataframes. this also helps unit test these bits of logic +- there are two kinds of joining techniques used by spark - **shuffle join** and **broadcast join** + +### Shuffle Joins + +- imagine when we have two datasets with 3 partitions, and we have three executors +- so first a **shuffle** + **sort** happens to ensure that the same keys from both datasets belong to the same executor +- now, we can simply perform a **merge** to join the two datasets +- refer diagram [here](#jobs-stages-and-tasks) to recall breakdown of exchange and shuffle + sort +- small note - i am defaulting to thinking of shuffle joins as **shuffle sort merge joins**. there is another variation - **shuffle hash joins**, which is less optimal when compared to shuffle sort merge joins, so i am ignoring shuffle hash joins for now + +![shuffle join working](/assets/img/spark/shuffle-join-working.drawio.png) + +### Optimizing Shuffle Joins + +- reduce data being joined - because this shuffle and sort process is of course the bottleneck and can cause out of memory like issues, we should consider techniques like filtering (basically reducing) the amount of data we are joining, performing aggregations before joining, etc. basically, code intelligently +- maximize parallelism - the maximum parallelism possible when performing a join is the minimum of the three parameters below, so try maximizing the three parameters below - + - maximum number of executors our cluster allows + - `spark.sql.shuffle.partitions` - this determines the number of partitions after a shuffle i.e. after a wide transformation happens. the default value of this is 200. so, in case of join, this will give the number of partitions of the joined dataset? + - number of unique keys in the datasets involved in the join - handling **key skews** / **hot partitions** - discussed later +- **bucketed joins** - if the datasets are already bucketed and sorted using the keys involved in the join, we will not have to rely on the shuffling and sorting done by spark at all! the idea is to partition, sort and store the datasets in bucketed fashion before the join starts. we then load the datasets and perform the joins, and there would be no shuffle involved in the joins + +### Broadcast Joins + +- shuffle joins are used when we join two large datasets +- however, we can use broadcast joins when either (or maybe both) the datasets are small +- assume the smaller dataset can be stored inside one partition, while the larger dataset has 200 partitions +- if using the shuffle join technique, first all of the 200 + 1 partitions will be sent for shuffle and sort +- this means there is network transfer involved to first send the data to exchanges and then load it back in a sorted manner into the executors +- however, in the broadcast join technique, the partitions of the larger dataset can stay where they were, and the smaller dataset can be copied over to all the executors having the larger dataset partitions +- this way, we avoid having to move (shuffle) the larger dataset's partition over the network +- essentially, we are *broadcasting* the smaller dataset to all the executors having the larger dataset +- the driver and executor memory should be > than the size of the smaller dataset, so that it can fit inside the memory +- notice how below the larger dataset stays as it is unlike earlier where the larger dataset was sorted
+ ![broadcast join working](/assets/img/spark/broadcast-join-working.drawio.png) +- the threshold which decides when to use a broadcast join is `spark.sql.autoBroadcastJoinThreshold`, which is 10mb by default +- note - unlike shuffle join, broadcast join is a hash join always. recall in shuffle joins, we have the concept of both hash joins (rarely used) and sort merge joins +- we can also provide spark the hint to use broadcast join like so, if we are not happy with the defaults - + ```java + import static org.apache.spark.sql.functions.broadcast; + + Dataset joinedDf = flightsDf1.join(broadcast(flightsDf2), ... + ``` +- note - to confirm all this, go to http://localhost:4040/ -> Sql / Dataframe tab -> select the sql query +- we can tell from this if an exchange was involved or we skipped it by using bucketed joins, if shuffle join was used or broadcast join was used, etc + +## Spark AQE + +- **aqe** - **adaptive query execution** +- it includes optimizations discussed below +- set `spark.sql.adaptive.enabled` to true for this (it should be enabled by default in new versions), and rest of the optimizations discussed in this sections will be automatically enabled +- crazy granular configurations can be seen [here](https://spark.apache.org/docs/latest/sql-performance-tuning.html), use documentation for specific configuration, just learning things from theoretical perspective for now + +### Dynamically Deciding Shuffle Partitions + +- earlier, after a wide transformation, for e.g. group by, the number of output partitions from a stage would be = `spark.sql.shuffle.partitions` (default 200), but lets say we set it to 10 +- what if i only have e.g. 5 groups after a group by statement? +- spark would still create a total of 10 partitions, therefore 10 tasks in the subsequent stage +- now, our spark job would eat up the resources for 5 empty tasks as well +- remember that for a wide transformation, spark stalls all the tasks of its previous stage, so the empty tasks are just sitting idle +- this optimization by aqe resolves this issue +- spark will look at the number of unique groups, and then dynamically adjust the number of output partitions +- now, assume one of the partitions was relatively larger +- spark used one task for one partition of data +- spark would complete all the tasks except this one quickly +- again, remember that for a wide transformation, spark stalls all the tasks of its previous stage, so the tasks that get over quickly are just sitting idle +- this optimization by aqe resolves this issue as well +- spark would now also look at the number of records in each group +- spark can merge some partitions to be handled by one task +- so, since one task = one slot, that task would process multiple partitions of data one by one serially +- e.g. this way, our job ended up using only 4 slots optimally - this is better than for e.g. using 5 slots, out of which 4 would get over pretty quickly, since the 5th slot now can be allocated to some other job +- remember how this is different from [dynamic resource allocation](#dynamic-resource-allocation) - dynamic resource allocation changes the executors dynamically, while dynamically deciding shuffle partitions changes the number of output partitions and what partition goes to what executor dynamically +- so, recap - two optimizations - + - determine the number of shuffle partitions dynamically + - dynamically coalesce the smaller shuffle partitions + +![aqe shuffle partitions](/assets/img/spark/aqe-shuffle-partitions.drawio.png) + +### Dynamically Switching Join Strategies + +- we already know that broadcast joins are more optimal than the regular shuffle joins +- however, assume one of the tables have a lot of complex transformations before being involved in the join +- spark may not be able to decide whether or not to use broadcast join, and would default to using shuffle join +- however, with aqe enabled, spark can **after shuffling** decide to go for a broadcast join +- the optimization here is that while we are involved in the shuffle process (therefore the network transfer) of the shuffle join, we still get rid of the sort and merge process, which is more expensive than a simple broadcast join + +### Dynamically Optimizing Skew Joins + +- if for e.g. we are joining two tables, and we have a **hot / skewed partition** +- before aqe, number of partitions / tasks = number of unique keys involved in the joins +- after aqe, spark is intelligent enough to break the hot partition into smaller chunks +- now, these smaller chunks can be processed in parallel in different tasks +- thus, we will not have an overly sized task (and thus out of memory exceptions) anymore +- note how we had 3 tasks without aqe, but now have 4 tasks with aqe +- note how the partition of the smaller dataset is copied + +![aqe skew joins](/assets/img/spark/aqe-skew-joins.drawio.png) + +## Dynamic Partition Pruning + +- it is enabled by default +- first, recall [partition pruning](#execution-plan--catalyst-optimizer-working) +- it is usually used for efficiency gains in a star schema design, so thats the lingo used in this section +- e.g. we have sql like below - + ```sql + select * + from fact join dimension + on fact.dimension_id = dimension.id + where dimension.some_attribute = 'xyz' + ``` +- my understanding of constraints needed for dynamic partition pruning - + - should be a broadcast join (dimension table would be broadcasted) + - fact table should be partitioned using dimension_id + - and of course, dynamic partition pruning should be enabled +- now, how this join would work is - + - the dimension table would be filtered using some_attribute = 'xyz' + - the filtered dimension table would be broadcast everywhere + - spark would be intelligent enough to only load the partitions of the fact table where dimension_id is present in the ids of the filtered dimension table + +## Caching + +- two methods for caching - chain `cache()` or `persist()` on the dataframe +- `cache` will cache using the default storage and memory, and does not allow configuration +- `persist` allows for more configuration around storage + - use disk or memory or a combination of both + - when storing in disk, data would of course be serialized, but when storing in memory, we can either store it in deserialized format or serialized format. serialized format advantage - would be compact therefore acquire less space. serialized format disadvantage - it would need to be serialized before storing / deserialized after reading from memory, hence it would use cpu + - use replication +- the default for persist / cache is memory + disk, with deserialization for memory and no replication +- both cache and persist are lazy like transformations - they are only triggered once there is an action + ```java + Dataset cachedDf = df.cache(); + cachedDf.count(); + ``` +- spark need not cache all partitions, it would only cache the partitions based on the actions we use, e.g. if we use `take(10)`, it would just cache the first partition, since the first partition should be self sufficient in providing with 10 records. however, if for e.g. we used an action like `count()`, it would have to cache all partitions +- however, spark will always either cache the entire partition or nothing, it will never cache a portion of the partition +- when to cache - when we use the same dataframe in multiple actions +- to evict from cache, chain `unpersist()` on the dataframe + +## Repartition and Coalesce + +- **repartition** - the code is as follows - `partitionedDf = df.repartition(3)` +- when we try to write this repartitioned dataframe, the output looks like follows - + ![repartition output](/assets/img/spark/repartition-output.png) +- note - above, we saw `repartition(number)`, but we can also use `repartition(columns...)` or `repartition(number, columns...)` +- when we do not specify a number to repartition and just column names, the number of partitions created = `spark.sql.shuffle.partitions` +- so basically, the number of partitions in repartition = either specified by us in the function call, or set via `spark.sql.shuffle.partitions`, and the column used for this partitioning can be specified by us as well +- when to use repartition - to improve performance, but we should be absolutely sure, since repartition would cause a shuffle +- when we are reducing number of partitions, do not use repartition, use `coalesce` +- `coalesce` will only collapse the partitions on the same worker node, thus avoiding a shuffle sort +- so my guess - if for e.g. we call `coalesce(10)`, but the data was on 11 worker nodes, total number of partitions finally would be 11? + +## Hints + +- we can add hints related to partitioning and joins +- hints - no guarantee that they would be used +- in the dataframe api, we can either use spark sql functions, or use `dataframe.hint()` +- join hint example using both techniques - + ```java + df1.join(broadcast(df2)) + df1.join(df2.hint("broadcast")) + ``` +- partitioning hint example - `df.hint("coalesce", 4)` +- note - i don't think there is any difference between chaining coalesce directly vs using it as a hint +- when writing the same using sql, there is a special [comment syntax](https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-hints.html#examples) we use + +## Shared Variables + +- these were both primarily used in rdd apis, but can have a niche use case in dataframe world as well + +### Broadcast Variables + +- **broadcast variables** use case - e.g. our udf uses some static reference data +- the reference data is for e.g. 5-10 mb, i.e. too big to store in plain code +- so, we can for e.g. store it in a file, and broadcast it to all the nodes +- this way, this variable can then be used inside the udf +- my understanding - maybe we can use closure as well i.e. we store the data in like a variable outside the udf, and then access it in the udf +- disadvantage of using closure - if for e.g. we have 1000 tasks running on 30 nodes, there would be 1000 deserializations. in case of broadcast variables however, there would only be 30 deserializations +- example - + ```java + SparkSession spark = // ... + Broadcast broadcastVar = spark.sparkContext().broadcast(new int[] {1, 2, 3}); + broadcastVar.value(); // can be used inside a udf. it returns [1, 2, 3] + ``` +- note - a better technique could also have been to somehow load this reference data as a dataframe if possible + +### Accumulators + +- **accumulators** are like a global variable that we can update +- e.g. from our udf, we would like to update a variable based on some condition +- so, these variables can be updated on a per row basis +- these variables basically live in the driver, and the executors internally communicate with the driver to update this variable +- example - + ```java + SparkSession spark = // ... + LongAccumulator accum = spark.sparkContext.longAccumulator(); + numberDf.foreach((x) -> accum.add(1)); + accum.value(); // should print the count of rows + ``` +- note - there is no shuffle etc involved in this process of realizing the final value of the accumulator - it is being mutated inside the driver by the executor communicating the changes to the driver +- so, these accumulators can either be updated from transformations like udf, or actions like forEach like we saw +- however, understand - if we use accumulators from within for e.g. udf, the value of accumulator can go bad - e.g. if a task fails, the executor will retry it - the accumulator cannot discard the partial changes made to it via the failed task, since there are too many concurrent modifications happening on it already via other tasks +- however, this does not happen when using an accumulator from inside actions like `forEach` + +## Spark Speculation + +- can be enabled via `spark.speculation`, false by default +- example we have 10 tasks, and all of them complete under 2 seconds, but one of them takes 10 seconds +- spark will automatically identify the slow running tasks and run a duplicate copy of this task +- this way, whichever one of the two finishes faster is used by spark, and the other task is killed +- useful when for e.g. the original task was running slow due to a fault in the worker node that it was running on, which was causing it to be slow +- running speculative tasks does have overhead in terms of resources +- e.g. if there are data skews or out of memory issues in our application, spark would still run copies of this task (which too will run slow or maybe fail) without realizing that the root cause is actually the data / faulty configuration itself + +## Streaming Introduction + +- earlier convention was batch processing - data first comes and sits in the lake +- then, there would be jobs that can be run for e.g. daily to perform the processing +- however, with time, jobs started demanding for smaller and quicker batches +- the idea is not to schedule the jobs in smaller intervals +- instead, we start viewing data as a stream that is in motion and not at rest +- spark streaming is an extension of the dataframe apis +- spark uses **micro batches** for achieving stream processing +- spark automatically takes care of lot of challenges like start and end time of batches, intermediate state management, etc +- initially, spark used **dstreams** - built on top of rdd +- now, sparks offers **structured streaming apis** - built on top of dataframe apis i.e. supports sql +- additionally, **event time semantics** are supported by structured streaming apis as well, which were not available in the d stream apis +- word count example using netcat - notice how for reading data, `read()` changed to `readStream()`, but otherwise, everything else stays the same. `readStream()` returns a `DataStreamReader` (recall read used to return `DataFrameReader`) + ```java + SparkSession spark = SparkSession.builder() + .master("local[*]") + .appName("Streaming Demo") + .getOrCreate(); + + Dataset lines = spark.readStream() + .format("socket") + .option("host", "localhost") + .option("port", "9999") + .load(); + ``` +- data from the socket comes in a column `value`. we want to split each line into its constituent words, and create a separate row for each word + ```java + Dataset wordCount = lines.select(explode(split(col("value"), " ")).alias("word")) + .groupBy("word") + .count(); + ``` +- finally, we try writing it to the console. again, `write()` changes to `writeStream()`. writeStream returns a `DataStreamWriter` (recall write used to return a `DataFrameWriter`) + ```java + StreamingQuery streamingQuery = wordCount.writeStream() + .format("console") + .option("checkpointLocation", "checkpoint") + .outputMode("complete") + .start(); + streamingQuery.awaitTermination(); + ``` +- note - we used `streamingQuery.awaitTermination()` above to simulate running an application indefinitely, and we got streamingQuery from the result of writing to a streaming sink +- note - sinks terminate when application is stopped / due to some error condition +- however, what if were writing to multiple sinks? + - we can use `spark.streams().awaitAnyTermination()`, when any of the streaming sinks terminate + - remember to have multiple checkpoint locations - do not use the same checkpoint location for multiple streaming sinks +- start the netcat utility using `nc -lk 9999`, and run the app to see the streaming output in the console +- working - first, spark creates an optimized logical plan, just like it did in case of dataframes +- now, it would create a job that reads from the source, processes it and finally writes it to the sink +- underneath, spark runs a background thread +- based on our trigger configuration, a new spark job is created. so, a spark job will not be created at every interval, it would only be created based on our trigger configuration, and all this is taken care of us by a background thread + ![spark streaming jobs](/assets/img/spark/spark-streaming-jobs.png) +- **trigger** determines how often to trigger the micro batch +- the default is **unspecified**. trigger a micro batch immediately, but stall this current micro batch until there is some input in the source +- trigger can also be based on for e.g. **time interval** - if the previous micro batch exceeds the time limit, the new batch starts after the previous batch finishes. however, if the previous micro batch finishes before the specified time limit, the new batch would wait till the mark reaches the time. for this, just chain the below to the `writeStream()` + ```java + .trigger(Trigger.ProcessingTime("1 minute")) + ``` +- finally, trigger can also be **continuous** - this is an experimental feature, where the performance is even faster than the current micro batch approach +- some popular streaming sources / sinks - netcat (already seen above), file and kafka +- the file source is capable of monitoring the path for new files. it can also use archival i.e. move the processed files to a different directory / delete the processed files altogether +- so, only sinks available are kafka, file and console for streaming requirements. how to for e.g. use jdbc? we can use `forEachBatch`, which is maybe called for every micro batch? - + ```java + outputDf.writeStream().foreachBatch((df, batchId) -> { + df.write() + .format("xyz") + // ... + .save(); + }); + ``` +- output modes - + - **append** - like insert only. used when previous outputs are not affected + - **update** - like upsert i.e. either new records are added or old records are updated + - **complete** - overwrite the complete result every time +- update vs complete example - + - input -
+ ![streaming input](/assets/img/spark/streaming-input.png) + - complete -
+ ![streaming output complete](/assets/img/spark/streaming-output-complete.png) + - update -(look at batch 2 in particular)
+ ![streaming output update](/assets/img/spark/streaming-output-update.png) +- append does not make sense with aggregations like count, so it would throw an error like this - `Append output mode not supported when there are streaming aggregations on streaming DataFrames/DataSets without watermark;`. the why - this is because append means immutable - the other two output modes - complete and update have some way of reflecting updates made to previous groups, but append cannot allow for updating of existing groups, only creating of new groups. now maybe how aggregations work in spark streaming - spark receives a record, decides which group this record should belong to, and updates that group. this updating is not allowed in append mode, hence append mode does not support aggregations +- a spark streaming application is like a web server i.e. keeps running unlike when submitting batch jobs to spark +- even a streaming application will stop at least at some point due to reasons like some failure, some maintenance, etc +- so, we need to be able to handle this stopping and restarting gracefully +- **gracefully** = **exactly once processing** +- exactly once processing basically means neither should we end up reading an input twice, nor missing an input record +- this is what **checkpoint location** helps achieve +- checkpoint location maintains things like - + - what was the input boundaries of the last micro batch + - state information (e.g. running total of the word count) +- we just saw how checkpoints helps spark achieve exactly once processing. however, exactly once processing also depends on sources and sinks - e.g. source should be replayable i.e. allow reading of old messages. e.g. using kafka / files as streaming sources allows for this. similarly, sinks should be idempotent i.e. it should recognize duplicates instead of adding duplicates to the data +- what if our application has a bug? - we fix the spark code, we rerun spark-submit. now, can we rely on check pointing to continue the job from where it left off after the job was stopped and restarted? + - yes, if our fix was something like filter out malformed records + - no, if our fix changed the aggregation strategy etc, since maybe it messes up the checkpoint state altogether + +## Streaming Using Kafka + +- add the following dependency - + ```xml + + org.apache.spark + spark-sql-kafka-0-10_${scala.version} + ${spark.version} + + ``` +- use the following to establish a connection - + ```java + Dataset kafkaSourceDf = spark.readStream() + .format("kafka") + .option("kafka.bootstrap.servers", "localhost:9092") + .option("subscribe", "invoices") + .load(); + ``` +- when we try printing the schema - `kafkaSourceDf.printSchema();`, we get the following - + ``` + |-- key: binary (nullable = true) + |-- value: binary (nullable = true) + |-- topic: string (nullable = true) + |-- partition: integer (nullable = true) + |-- offset: long (nullable = true) + |-- timestamp: timestamp (nullable = true) + |-- timestampType: integer (nullable = true) + ``` +- the value is in binary format. here is how to extract all fields into dataframe friendly format + - assume we create the schema of the payload somewhere + - then, we can cast the value field to a string + - then, call from_json on it, which also needs the schema + - this means all our data would be available as a struct type under the attribute value + - finally, based on [this](https://stackoverflow.com/a/54433013/11885333), i chained a `.select`, so that i do not have to access fields using value.attribute, but just using attribute - + + ```java + Dataset flattenedDf = kafkaSourceDf + .select(from_json(col("value").cast("string"), schema).alias("value")) + .select("value.*") + ``` +- [this doc](https://kafka.apache.org/quickstart) is great for debugging when writing kafka related code - creating topics, publishing to topics using kafka-producer, consuming from kafka-consumer, etc +- now, when we try `flattenedDf.printSchema();`, we get the right schema which we can use in our transformations +- to understand - how does kafka + spark actually work i.e. does spark rely on offset committing logic of kafka, or does spark itself maintain the offset inside the checkpoint directory +- writing to kafka - while reading from kafka, we deserialized the value attribute. while writing to kafka, we need to convert our dataframe into two fields of key and value + - combine all fields into a struct + - convert this field to json + - rename this condensed field to value + - pick any other attribute to act as key + + ```java + .select( + to_json(struct("*")).alias("value"), + col("InvoiceNumber").alias("key")); + ``` + +## Streaming Transformations + +- **stateless transformations** - do not need to maintain state across micro batches. e.g. filter, map, flatMap, explode, etc +- **stateful transformations** - need to maintain state across micro batches. e.g. for computing totals etc as we process new records, the state needs to be stored as a part of the checkpoint. e.g. grouping, aggregations +- now, stateless transformations do not support complete output mode. think why - + - if our streaming transformations are only stateless, 10 input records would contain 10 output records + - this means we will have to include input records as a part of the output every time + - this means all records need to be stored in the state, which is not efficient for spark +- so, as a side effect - we can run into out of memory issues when using spark streaming due to excessive state. spark stores all this state inside memory for efficiency +- it also stores it in the checkpoint location so that for e.g. when the application dies / is stopped due to some reason, it can resume from where it left off +- so, we have two concepts - **time bound state** and **unbounded state** +- **time bound state** - e.g. we calculate a weekly running total. spark knows that it can get rid of records older than a week,since they do not contribute to the total. this is also called **managed state**, since spark can manage this state +- **unbounded state** - there is no time bounds we can specify for the state. therefore, we ourselves need to specify some kind of cleanup logic for the state, so that our application does not encounter out of memory issues. this is also called **unmanaged state**, since the cleanup logic is on us to implement + +## Window Aggregations + +- this is the time bound state / managed state that we talked about above +- **trigger time** - determines when a micro batch starts and ends +- **event time** - the actual time when the event occurred +- important - the bounds of the **window** we specify has nothing to do with the trigger time +- the window we specify uses the event time to decide which window the record should be a part of +- spark also handles **late events** - e.g. we get an event for 10.00-10.15 when we have already performed processing for 10.15-10.30 and 10.30-10.45 +- e.g. we create a window of 15 minutes - + - this basically means a new column called window of type struct would be added to our dataset, with two fields - start and end + - spark will automatically decide for us which of these groups a record belongs to, based on the column name we specify. this column acts as the event time - e.g. created time in this example + - since this is basically inside a group, we can specify more columns to group on. e.g. we specify type column in the group by clause. then, we get windows for each of the type separately + - finally, we perform an aggregation - all records where type is buy, have their amount attribute added to total buy, all records where type is sell, have their amount added to total sell + - so basically think about whats in state of spark - for all groups i.e. windows, spark is storing the computed aggregate and updating it as and when new records arrive + - confusion, note - remember how this window is so much more different than the windowing aggregation we saw earlier - there, there was no grouping or aggregation involved - based on our specification, we were automatically able to add a new column for running total + + ```java + Dataset outputDf = stockSourceDf + .groupBy(window(col("CreatedTime"), "15 minute")) + .agg( + sum(when(col("Type").equalTo("BUY"), col("Amount")).otherwise(lit("0"))).alias("TotalBuy"), + sum(when(col("Type").equalTo("SELL"), col("Amount")).otherwise(lit("0"))).alias("TotalSell")); + ``` + +- remember - spark had to maintain old windows inside its state as well, to help it with late events +- **watermark** - helps expire old window state, so that out of memory etc exceptions are not caused. remember how this is the biggest advantage of using managed state +- so, we need to decide how late can an event be, post which - + - we can simply ignore the event + - we can clean up the state for that window +- for this, we simply need to chain the `withWatermark`. note - + - chain it before the group by clause + - column name used for windowing and column name specified inside watermark should be the same + + ```java + .withWatermark("CreatedTime", "30 minutes") + .groupBy(window(col("CreatedTime"), "15 minute")) + ``` +- how should the cleanup happen? - all windows with end_time < (max_event_time - watermark) can be ejected from state (note - max_event_time i think means event with maximum time in the micro batch). e.g. say our watermark is 30 minutes, and we receive a record with event time = 10.48. all windows with end time before 10.48 - 30 = 10.18 would be ejected from the spark state. this is the managed state / automatic cleanup that we were talking about in time bound state +- watermark and complete output mode do not make sense together - spark cannot cleanup state if it has to output all the records for every micro batch +- recall how we had talked about append mode not working when we have group by etc in our streaming jobs, because append cannot update groups. however, think about watermarks - when the max_event_time - watermark moves, all windows with ends below this line can be closed. hence, when we introduce watermarks and windows with aggregations, spark supports append mode. all windows which have been declared closed by spark are output after the micro batch gets over +- summary of the difference between output modes when using watermark + windowing - + - complete - output all windows, ignore watermark concept + - update - output all windows which were updated by the micro batch, eject all windows from state which are declared stale by spark via watermark concept + - append - eject all windows from state and only output windows which have been declared stale by spark via watermark concept, do not output all windows that were updated like update output mode +- **tumbling windows** vs **sliding windows** - + - tumbling windows do not overlap, while sliding windows can have an overlap + - my understanding - in tumbling windows, window duration = sliding interval, whereas in sliding windows, both are unequal + - in tumbling windows, an event can be a part of only one window. in sliding windows, an event can be a part of multiple windows, e.g. 10.18 can be a part of 10.10-10.20 and 10.15-10.25 + - so, the only difference in syntax is we now pass two parameters - window duration and sliding window size + + ```java + .groupBy(window(col("CreatedTime"), "15 minute", "5 minute")) + ``` + +## Streaming Joins + +### Streaming to Static + +- commonly used for stream enrichment +- stateless - spark does not have to maintain any state - this is because every time we get an event, we can simply compute the rows it produces as a result of the join and output these results, since they would not change / the event would not be needed for computing future joins anymore +- for each micro batch, spark is smart enough to refresh the static dataframe i.e. imagine when the application is already running, we insert new data into the static dataframe underlying source, e.g. jdbc. spark will reload the static dataframe with the new data when a new event comes in for the streaming dataframe +- inner join is supported +- left outer join is possible when the streaming dataframe is on the left. why - assume right outer join was allowed. spark would have to predict for the static dataframe's record whether or not a row is present in the streaming dataframe. this cannot be concluded, since streams grow infinitely. this is why right (and full) outer joins are not supported + +### Streaming to Streaming + +- stateful - we need to maintain both sides of data forever in the state, unlike when joining streaming dataframe to static dataframe. remember how this is stateful, but streaming to static can be stateless +- we can solve this problem using 🥁 `withWatermark`. specify a watermark on both streams being joined, so that spark can remove events that are stale +- inner join is supported +- left outer join is possible but with some limitations, TODO +- TODO: spark interview question of memory diff --git a/_posts/2024-01-18-elasticsearch.md b/_posts/2024-01-18-elasticsearch.md new file mode 100644 index 0000000..dd1dd96 --- /dev/null +++ b/_posts/2024-01-18-elasticsearch.md @@ -0,0 +1,1367 @@ +--- +title: Elasticsearch +--- + +## Introduction + +- elasticsearch is open source +- we interact with elasticsearch using rest api and json, making it easy to work with +- elasticsearch is written in java and uses apache lucene underneath +- row in rdbms - **documents** in elasticsearch +- columns in rdbms - **fields** in elasticsearch +- table in rdbms - **index** in elasticsearch +- **index templates** - apply settings and mappings to indices that match a pattern + +## Use Cases + +- used for implementing search functionality, by addressing common problems like + - filtering search results - e.g. filter products based on category, price range, brand, etc + - sort results based on relevance - e.g. most reviewed, similarity with search parameters, etc +- we can aggregate the data stored in elasticsearch while querying. so, using elasticsearch data for analytics and not at all for searching is a perfectly valid use case +- apm or application performance management - e.g. analyze logs, monitor system metrics, etc +- machine learning - + - forecast future values - e.g. predict sales + - anomaly detection - e.g. alert when number of visitors on our website suddenly drops + +## Elastic Stack + +- elasticsearch - the heart of the elastic stack which stores the data +- kibana - + - serves as a web interface for configuration etc + - visualize the data stored in elasticsearch by creating dashboards in kibana + - note - kibana stores its data in elasticsearch. this means a new kibana instance pointing to our existing elasticsearch instance will automatically load all the configuration, dashboards, etc +- logstash - traditionally for processing logs and sending to elasticsearch. now, it has evolved into a more general purpose data processing tool, to perform etl +- x pack - add additional features like - + - authentication and authorization to elasticsearch and kibana + - monitoring - monitor performance of components of elasticsearch, logstash, kibana, etc and set up alerting based on issues related to these components + - machine learning + - graph - e.g. suggest relevant songs. popular != relevant. e.g. if 10 users use google, it is just because google is a very commonly used search engine, but if 10 users use stack overflow, it indicates something common between them. it helps us look for "uncommonly common" features + - sql - we typically use elasticsearch's query dsl to query elasticsearch, but we can also use sql, which gets translated to the query dsl bts. this can help people used to sql to get started with using elasticsearch +- beats - light weight agents installed on servers which then ship data to elasticsearch / logstash. e.g. file beats for sending log files, metric beats for system level metrics like memory and cpu usage, etc + +## Setup + +- download elasticsearch from [here](https://www.elastic.co/downloads/elasticsearch) +- download kibana from [here](https://www.elastic.co/downloads/kibana) +- run `./bin/elasticsearch` to run elasticsearch. it will display the following - + - enrollment token - helps kibana communicate with elasticsearch securely + - password - `pU-z6IdUirqzzUsFVlWh` for me +- run `./bin/kibana` to run kibana. we need to do the following - + - it would display the kibana url with a code as query parameter. open it + - enter the enrollment token displayed in the elasticsearch console + - authenticate using username as `elastic` and password as what is displayed in the elasticsearch console +- to interact with elasticsearch + - in kibana using dev tools - + - `get _cluster/health` to view cluster's health + - `get _cat/nodes?v` to view all nodes + - `get _cat/indices?v` to view all indices + - using curl - + ```sh + curl --cacert elasticsearch-8.12.0/config/certs/http_ca.crt \ + -u elastic:pU-z6IdUirqzzUsFVlWh \ + https://localhost:9200/ + ``` + +## Architecture + +- **node** - an instance of elasticsearch +- each node belongs to a **cluster** +- we can have different clusters based on use cases, e.g. one cluster for search, a different cluster for apm, etc + +## Sharding + +- elasticsearch uses **sharding** to help it scale +- sharding - splitting an index into smaller chunks +- this way, we are not limited by the storage capacity of 1 node +- sharding is done at index level for flexibility, because some indices can be very large, while others very small +- because of sharding, we can scale the cluster horizontally instead of having to do it vertically +- underneath, each shard is independent, like a fully functionally index. actually, each shard is a lucene index underneath +- sharding also helps parallelize the elasticsearch queries we issue, since the query can be broken down and run on each shard in parallel +- so two advantages - scale storage and improve throughput +- for elasticsearch < 7.0.0 - + - default number of shards was 5 - thus leading to **over sharding** when there were many small indices in the cluster + - changing number of shards after creating an index was not possible - to increase the number of shards, people would create a new index with the correct number of shards and move over the documents manually +- for newer versions of elasticsearch - + - default number of shards is 1 + - we can increase / decrease the number of shards using the **split** / **shrink** api, and elasticsearch does the heavy lifting for us bts + +## Replication + +- the underlying nodes / hardware / storage in a cluster can easily fail +- introducing **replication** for fault tolerance in elasticsearch is very easy +- replication is also configured at index level +- copies of shards are created, called **replica shards** +- the shard that has been replicated is called the **primary shard** +- all of the shards together are called a **replication group** +- primary and replica shards are never stored on the same node, because that defeats the purpose +- so, if our cluster has only one node, no replica shards are added even if we set replication +- replicas can also serve as read replicas +- this means if we have three shards (one primary and two replicas), there can be three search requests that can be served in parallel +- so two advantages (just like sharding) - serve as standby and improve throughput +- default replication is 1 +- use `get _cat/shards?v` to view all shards. it gives us which index it belongs to, its type (primary or replica), which node it is stored on, etc + +## Snapshots + +- helps take backups +- we can take snapshots of specific indices or of the entire cluster +- it helps us restore the state to a specific point in time + +## Node Roles + +- **master** - + - the master node in a cluster performs cluster wide actions like creating and deleting indices + - if there are several nodes with this role, one of them are elected as the master + - larger clusters should have "dedicated masters" so that they do not perform high io tasks like serving search requests +- **data** - + - enables it to store shards + - thus, it can perform query / modification of data on the shards that it is responsible for +- **ml** - + - lets a node run machine learning jobs + - `xpack.ml.enabled` needs to be enabled as well on the node +- **coordination** - + - node can be responsible for distributing the queries and then aggregating the data results + - can be accomplished by disabling all other roles on the node, there is no direct role available in elasticsearch for this +- **voting only** - + - can participate in the election of a new master, but not be elected as the master itself + +## Simple CRUD + +- deleting an index - `delete pages` +- by default when we call `put index_name`, we get two shards by default - one primary and one replica shard +- this is why my cluster running locally goes into yellow health after creating an index - since i was running one elasticsearch node and one of the replicas shards are still unassigned +- specify settings when creating an index - + ``` + put products + { + "settings": { + "number_of_shards": 2, + "number_of_replicas": 0 + } + } + ``` +- we can index a document like below. it would return us the auto generated id for it + ``` + post products/_doc + { + "name": "Coffee Maker", + "price": 64, + "in_stock": 10 + } + ``` +- for a custom id, the endpoint above could have been like so - + ``` + post products/_doc/100 + ``` +- retrieving a product if we have the id - + ``` + get products/_doc/100 + ``` +- now, if we for e.g. run the below "for the same id" again, the older document is "replaced" with this new document + ``` + post products/_doc/100 + { + "name": "Red Shoes" + } + ``` +- note - we looked at two variations - `post <>/_doc` for automatic ids, and `post <>/_doc/<>` for custom ids and create or update (basically replace). there are many more variations, not bothering right now +- elasticsearch documents are immutable - when we call post using the same id again, elasticsearch will basically create a new document and re index this document, effectively replacing the older document +- **scripted updates** - update using code, instead of us first retrieving the value, deciding the new value and then updating it. this approach for e.g. reduces network calls made to elasticsearch. we can do things like set the operation to delete if the in stock value becomes 0 etc. skipping this for now, as i would likely use an orm + +## Routing + +- **routing** - helps resolve the shard for a document +- basically - shard = hash(_routing) % number_of_primary_shards +- by default, _routing = id +- so, when we try performing crud operations using the id, this is how the shard resolution happens inside elasticsearch +- underneath, issues like skewed shards etc are prevented by elasticsearch automatically +- this is why changing the number of shards for an index on the fly is difficult - the shard of the existing documents might change as the number of shards change. for us as developers however, using the shrink and split api is much easier now in newer versions of elasticsearch + +## Working of Reads + +- the request reaches the coordinating node +- by the formula discussed in routing, it determines which primary shard is responsible for this document +- then, it directs the read request to the best replica shard in the replication of group of the primary shard +- the replica is chosen using a strategy called **ars** or **adaptive replica selection**, which is deemed best for performance +- finally, the response reaches the client back from the coordinating node + +## Working of Writes + +- the request reaches the coordinating node +- by the formula discussed in routing, it determines which primary shard is responsible for this document +- now, the request is sent to the primary shard, unlike in reading document where the request was sent to any replica using ars +- the primary shard validates the document - e.g. throw an error if a string value is being specified for a numeric value +- then it indexes the document +- now, it sends requests to its replica shards in parallel +- finally, the write is complete and the response is sent back to the client via the coordinating node + +## Conflicts During Writes + +- what if primary shard goes down after receiving a write? a replica shard would be promoted but what if the write was already committed to some other replica shards and not the newly appointed primary shard? +- what if a replica shard goes down during a write? +- many such failure scenarios can happen in distributed systems like this +- all these problems are handled by using primary term, sequence number and checkpoint in elasticsearch +- **primary term** - how many times the primary shard has changed +- **sequence number** - a counter that is incremented for each write operation. i think it is index specific +- **global checkpoint** - the minimum sequence number all the shards in the replication group have been aligned up to +- **local checkpoint** - the sequence number the current shard is at +- my understanding - the values of primary term and sequence number are also assigned to the documents to help with optimistic concurrency control +- **optimistic concurrency control** - what if an older version of document overwrites a newer version i.e. when writes happen concurrently? this situation is common, given the distributed nature of elasticsearch. e.g. two visitors on our e-commerce app try decreasing the in stock attribute by one simultaneously +- in newer versions, we are supposed to send the primary term and sequence numbers discussed earlier in order to implement optimistic concurrency control - + ``` + post products/_update/100?if_primary_term=1&if_seq_no=9 + // ... + ``` +- note, my understanding - apart from primary term and sequence numbers, when we retrieve documents, they also return a version. it is just like we would expect a version column to work, i.e. increments by one. it was used for implementing optimistic concurrency control in older versions, but the newer and preferred method is to use the primary term and sequence numbers instead that is descried above + +## Bulk Operations + +- these are much more efficient than sending out individual requests +- we can use the `_update_by_query` and `_delete_by_query` variants, where we specify the match clause +- the operations i think work like `update ... where ...` and `delete ... where ...` +- we can also use the bulk api to perform multiple kinds of operations on an index all at once +- this format that we use is also called nd json +- example of using bulk api inside kibana - + ``` + post products/_bulk + { "index": { "_id": 200 } } + { "name": "Espresso Machine", "price": 150, "in_stock": 4 } + { "create": { "_id": 201 } } + { "name": "Espresso Machine", "price": 150, "in_stock": 4 } + { "update": { "_id": 202 } } + { "doc": { "name": "Espresso Machine", "price": 150, "in_stock": 4 } } + { "delete": { "_id": 100 } } + ``` +- one line specifies the action (index, create, update, delete), the second line specifies the document contents (except in delete) +- my understanding - index vs create vs update - index works for both create and update, update fails when no document exists and create fails when document already exists +- we can also specify the primary term and sequence numbers inside the action line for optimistic concurrency control +- using curl to upload data using bulk api, where a file has all the data in the form of nd json - + ``` + curl -H "Content-Type: application/x-ndjson" \ + -XPOST \ + --cacert ~/elasticsearch-8.12.0/config/certs/http_ca.crt \ + -u elastic:pU-z6IdUirqzzUsFVlWh \ + https://localhost:9200/products/_bulk \ + --data-binary "@products-bulk.json" + ``` + +## Working of Bulk Operations + +- first, the query reaches the coordinating node as usual +- a snapshot of the entire index is taken +- then, the query to search for the documents and the bulk request to update them is sent to all the nodes +- if a failure occurs during this update, the failures are sent back to the client and "not rolled back" +- understand how this might be different from e.g. rdbms systems where there are features like transactions which help rollback +- idea is instead of rolling back, elasticsearch sends the failures to the client so that the client can handle it accordingly +- why was the snapshot taken - this helps elasticsearch implement optimistic concurrency control internally - it is not unlikely that since bulk request is huge, and during the processing of this bulk request, some document gets updated in the intermediary. so, elasticsearch uses this snapshot to compare the primary term and sequence number of the document it updates + +## Analysis + +- values are **analyzed** when indexing documents, to help with searching them +- different data types in elasticsearch will use different data structures e.g. numeric and geo spatial data might be stored inside bkd trees. however, most of them are fairly straightforward like in for e.g. rdbms, unlike text data types, what elasticsearch is known for. so, that is the focus here +- **analyzer** consists of three building blocks - character filters, a tokenizer and token filters +- **character filters** - + - add / remove / transform characters + - an analyzer can have multiple character filters, and they would be run one after another + - e.g. the html_strip character filter will filter out the html entities + - input - `I'm REALLY liking beer` + - output - I'm REALLY liking beer +- **tokenizer** - + - split into tokens + - an analyzer contains exactly one tokenizer + - some characters e.g. punctuations can be removed as a part of this + - important - the offset for each token is recorded as well. useful e.g. for [match phrase queries](#full-text-queries) + - e.g. the standard analyzer splits based on special characters + - input - "I'm REALLY liking beer" + - output - ["I'm", "REALLY", "liking", "beer"] +- **token filters** - + - add / remove / modify tokens + - an analyzer can have multiple token filters, and they would be run one after another + - e.g. lowercase filter to make all tokens lowercase + - input - ["I'm", "REALLY", "liking", "beer"] + - output - ["i'm", "really", "liking", "beer"] +- **standard analyzer** - the default. it uses no character filters, the standard tokenizer and finally the lowercase token filter +- there is an easy to use api, where we specify the analyzer / its components, and elasticsearch returns us the analyzed result + ``` + post _analyze + { + "text": "2 guys walk into a bar, but the third... DUCKS! :-)" + } + + post _analyze + { + "text": "2 guys walk into a bar, but the third... DUCKS! :-)", + "analyzer": "standard" + } + + post _analyze + { + "text": "2 guys walk into a bar, but the third... DUCKS! :-)", + "char_filter": [], + "tokenizer": "standard", + "filter": ["lowercase"] + } + ``` +- output is as follows - + ```json + { + "tokens": [ + { "token": "2", "start_offset": 0, "end_offset": 1, "type": "", "position": 0 }, + { "token": "guys", "start_offset": 2, "end_offset": 6, "type": "", "position": 1 }, + { "token": "walk", "start_offset": 7, "end_offset": 11, "type": "", "position": 2 }, + { "token": "into", "start_offset": 12, "end_offset": 16, "type": "", "position": 3 }, + { "token": "a", "start_offset": 19, "end_offset": 20, "type": "", "position": 4 }, + { "token": "bar", "start_offset": 21, "end_offset": 24, "type": "", "position": 5 }, + { "token": "but", "start_offset": 26, "end_offset": 29, "type": "", "position": 6 }, + { "token": "the", "start_offset": 30, "end_offset": 33, "type": "", "position": 7 }, + { "token": "third", "start_offset": 34, "end_offset": 39, "type": "", "position": 8 }, + { "token": "ducks", "start_offset": 43, "end_offset": 48, "type": "", "position": 9 } + ] + } + ``` +- we saw above how elasticsearch constructs tokens using a three step process +- **inverted index** - a mapping between the tokens and what documents contain these tokens +- e.g. finding which documents contain a specific term is as simple as looking up the term in the inverted index +- inverted indices are scoped to a "field of an index" +- **keyword** data type - used for exact matching. e.g. status field +- for full text searches, use the **text** data type instead +- internally, keyword uses the **keyword analyzer**, which is no op i.e. does not do anything +- in the inverted index that is created for keyword data type, the key is the entire string, the values are the documents having it +- in the inverted index that is created for text data type, the keys are the tokens, the values are the documents having it, along with offsets etc to help with for e.g. `match_phrase` query +- elasticsearch comes in with a lot of built in character filters, tokenizer and token filters, and we can mix and match them +- elasticsearch also comes in with a lot of [built in analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html) which we can use. they are configurable as well, e.g. we can add the stop word to the standard analyzer +- two common token filters - + - **stemming** - reducing words to their root form. e.g. if the word in the description is "loved", and the client searches for "loves", they should still be able to search for the word. stemming helps reduce the word to its "root form" + - **stop words** - common words in a language that are filtered out when a field is analyzed. e.g. articles +- note - what we search for is analyzed in the same way as the attribute! e.g. if the word drinking in the document is stemmed to drink, the word drinks in the query is also stemmed to drink +- below is an example of creating a custom analyzer inside an index. notice the four sections inside analysis - character filter, tokenizer, filter (token filter is called filter) and finally analyzer - + ``` + put analyzer_test + { + "settings": { + "analysis": { + "char_filter": { }, + "tokenizer": { }, + "filter": { + "danish_stop": { + "type": "stop", + "stopwords": "_danish_" + } + }, + "analyzer": { + "my_custom_analyzer": { + "type": "custom", + "char_filter": ["html_strip"], + "tokenizer": "standard", + "filter": [ + "lowercase", + "danish_stop", + "asciifolding" + ] + } + } + } + } + } + ``` + +## Mapping + +- **mapping** defines the structure of documents +- like a schema in rdbms +- two approaches - + - **explicit mapping** - we specify the fields and their data types ourselves + - **dynamic mapping** - the field mapping is automatically created for us when elasticsearch encounters a new field +- [data types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html) available in elasticsearch +- creating an explicit mapping - + ``` + put reviews + { + "mappings": { + "properties": { + "rating": { "type": "float" }, + "content": { "type": "text" }, + "product_id": { "type": "integer" }, + "author": { + "properties": { + "first_name": { "type": "text" }, + "last_name": { "type": "text" }, + "email": { "type": "keyword" } + } + } + } + }, + "settings": { + "number_of_shards": 2, + "number_of_replicas": 0 + } + } + ``` +- retrieving the mapping for an index - + ``` + get reviews/_mapping + ``` +- when relying on dynamic mapping e.g. for strings, first, using [type coercion](#type-coercion), it would try converting it to a number / date. if that fails, the default behavior is to use [multi field mappings](#multi-field-mappings), so that text is used for attribute, and keyword is used for attribute.keyword. e.g. - + ``` + put recipes/_doc/1 + { + "ingredients": ["potato", "tomato"] + } + + get recipes/_mapping + ``` +- output - + ``` + { + "recipes": { + "mappings": { + "properties": { + "ingredients": { + "type": "text", + "fields": { + "keyword": { + "type": "keyword", + "ignore_above": 256 + } + } + } + } + } + } + } + ``` +- this default behavior might not be ideal for us since it consumes a lot of disk space, e.g. for ingredients, we would rarely perform text searches while for description of recipes, we would rarely perform aggregations, sorting, etc +- we can ask elasticsearch to disable dynamic mapping using - + - `"dynamic": "strict"` - would not allow unknown fields when indexing a document + - `"dynamic": "false"` - would allow additional fields but not analyze them. they would just be stored and be a part of the _source in the response + + ``` + put people + { + "mappings": { + "dynamic": "strict", + "properties": { + "first_name": { "type": "text" } + } + } + } + ``` + +### Changing the Mapping + +- changing the mapping might not be easy. e.g. assume we want to go from numeric to keyword data type. this is not easy for elasticsearch, since it would have to re index all the existing documents, since the underlying structure itself changes from a bkd tree to an inverted index (keyword data type uses keyword analyzer) +- so, we can use the re index api, which copies over our documents from the source to the destination index. while doing this, we specify the script, which can do some conversions for us. the syntax / working is similar to scripted updates which we mentioned earlier + ``` + post _reindex + { + "source": { "index": "reviews" }, + "dest": { "index": "reviews_new" }, + "script": { + "source": """ + if (ctx._source.product_id != null) { + ctx._source.product_id = ctx._source.product_id.toString(); + } + """ + } + } + ``` + +## Object vs Nested Data Types + +- when we use **object** data type, internally, elasticsearch flattens it using **dot notation** +- e.g. assume we had a document like below i.e. we set the field type of reviews to be an object + ```json + { + "product": { + "manufacturer": { + "name": "xyz" + }, + "reviews": [ + { "author": "abc", "rating": "4.7" }, + { "author": "def", "rating": "3" } + ] + } + } + ``` +- how elasticsearch kind of views them internally - + ```json + { + "product.manufacturer.name": "xyz", + "product.reviews.author": ["abc", "def"], + "product.reviews.rating": ["4.7", "3"] + } + ``` +- based on above, there is a downside of using the type object - if we search for a review left by abc and with rating 3, the current document we showed above would be returned - even though abc left 4.7. this is because after the flattening done by elasticsearch internally, the correlation between the fields of an object was lost +- therefore, due to the shortcomings above, we can use the **nested** data type. this means that all the fields of that structure would be correlated +- nested data type works in a fundamentally different way compared to object data type - internally, a new document is created for each of the review - so, if we were to index a document with 10 reviews, internally 11 documents would be indexed by elasticsearch. there is no flattening inside the same document like in object data type +- assume we had an array of objects. we can create mapping for nested type as follows - + ``` + // ... + "reviews": { + "type": "nested", + "properties": { + "author": { "type": "text" }, + "rating": { "type": "float" } + } + } + ``` +- for object data type, we just need to omit the `"type": "nested"` line +- having two many nested objects in the array can slow down queries etc, but this might be an indicator of a bad design in the first place as well. there are limits on the maximum number of fields allowed inside a nested document, maximum number of nested objects allowed in the array, etc as a safeguard + +## Arrays in Elasticsearch + +- there is no concept of arrays in elasticsearch - any field can contain 0 or more values in elasticsearch by default + ``` + post products/_doc/100 + { + "tags": ["electronics"] + } + + post products/_doc/100 + { + "tags": "smart phone" + } + + get products/_doc/100 + ``` +- in case of text fields, values of array type are simply "concatenated" one after another + ``` + post _analyze + { + "text": ["hello", "world"] + } + ``` +- output - make note of the offset + ```json + { + "tokens": [ + { "token": "hello", "start_offset": 0, "end_offset": 5, "type": "", "position": 0 }, + { "token": "world", "start_offset": 6, "end_offset": 11, "type": "", "position": 1 } + ] + } + ``` +- empty array / skipping the field mean the same thing +- i don't think this is the same as explicitly providing null however + +## Date Data Type + +- internally, elasticsearch stores dates as milliseconds since epoch, by converting it into the utc timezone +- if we do not specify the format, we can specify it in iso-8601 format (the one that looks like `2024-01-21T04:25:21.139Z`) or a number, that is the milliseconds since epoch +- however, when creating the explicit mapping, we can also specify the format using the java date format + ``` + "purchased_at": { + "type": "date", + "format": "dd/M/yy" + } + ``` + +## Type Coercion + +- **type coercion** - if we provide `"price": "7.4"` instead of `"price": 7.4`, elasticsearch is smart enough to convert it to the float type instead of treating it as keyword, string, etc +- in the example below + - we first create a document (the index is created automatically), and ensure that the dynamic mapping has type number for price. if we started with string itself, then of course the dynamic mapping would create it using text + keyword type + - then, second and third calls go through due to type coercion and how [arrays](#arrays-in-elasticsearch) in elasticsearch work, while the fourth call fails because it cannot be coerced + + ``` + post coercion_test/_doc/100 + { + "price": 7.4 + } + + // the mapping shows price is of type float + get coercion_test/_mapping + + // does not throw an error + // even though we provide a string + post coercion_test/_doc/101 + { + "price": "7.4" + } + + // does not throw an error + // even though we provide an array containing strings and numbers + post coercion_test/_doc/101 + { + "price": ["7.4", 8.9] + } + + // will throw an error + post coercion_test/_doc/102 + { + "price": "7.4m" + } + ``` +- when retrieving the document, we see "7.4" and not 7.4! maybe while elasticsearch does analyze the fields, it will ultimately just return us what we provided it with in the first place +- notice how this is a recurring theme, we saw it in [mapping](#mapping) when using `"dynamic": false` as well - _source is the exact same as the input by user, but bts, other processes like coercion, analyzing based on data type, etc are carried out +- to avoid all the hassle with type coercion, we can just disable it as well when creating the index + ``` + put sales + { + "settings": { + "index.mapping.coerce": false + } + // ... + } + ``` + +## Multi Field Mappings + +- e.g. assume we want a field to have both type keyword and text +- problem statement + - aggregations etc can not be run on text data type, but can be run on keyword data type + - searching etc can not be run on keyword data type, but can be run on text data type +- e.g. we have a recipes index, and we would like to use ingredients for searching (use case for text data type) and for aggregations like popular ingredients (use case for keyword data type) +- so, elasticsearch allows us to specify multiple data types for a field +- e.g. below, text related data structures would be created for ingredients, while keyword related data structures would be created for ingredients.agg. so, when querying elasticsearch, we would use the same convention as well i.e. use ingredients when we want to use the text based queries but use ingredients.agg for keyword based queries + ``` + put recipes + { + "mappings": { + "properties": { + "ingredients": { + "type": "text", + "fields": { + "agg": { + "type": "keyword" + } + } + } + } + } + } + ``` +- recall how when relying on dynamic mapping, this is the default i.e. using attribute for text data type and attribute.keyword for keyword data type +- other use cases might be for e.g. to optimize a field using different analyzers for different use cases + +## Elastic Common Schema + +- **ecs** or **elastic common schema** +- how common fields should be mapped +- e.g. doesn't matter the source of event - redis, kafka, nginx, etc, the "event timestamp" should be mapped via `@timestamp` field +- it is more useful for standard events like from web servers, databases, etc, not for custom use cases like using a product index + +## Term Level Queries + +- **term level queries** - term level queries are not analyzed, it is not like a part of it should match, the entire thing should match +- it does not make sense to use term level queries with text data type. it is typically used for all other data types like keyword, numbers, etc. this is because term level queries are not analyzed, while text data type is analyzed. it just does not make sense to do so, even if we get some hits +- e.g. of term level query. recall how [dynamic mapping](#mapping) created [multi field mapping](#multi-field-mappings) for both text and keyword. so, since we want to use the keyword variant, we use the below (term level queries are not meant for text data types) - + ``` + get products/_search + { + "query": { + "term": { + "tags.keyword": "Vegetable" + } + } + } + ``` +- specifying multiple terms to match based on - + ``` + get products/_search + { + "query": { + "terms": { + "tags.keyword": ["Vegetable", "Meat"] + } + } + } + ``` +- we retrieved document by id using + ``` + get products/_doc/100 + ``` +- retrieve documents by multiple ids + ``` + get products/_search + { + "query": { + "ids": { + "values": ["100", "200"] + } + } + } + ``` +- **range searches** - useful for fields of type dates, numbers, etc + ``` + get products/_search + { + "query": { + "range": { + "in_stock": { + "gte": 1, + "lte": 6 + } + } + } + } + ``` + +### Flexibility in Term Level Queries + +- while term level queries are not analyzed, they do allow for some flexibility described in this section +- still, do not forget the rule of thumb - term level queries are not analyzed, and therefore are not meant to be used for text data types +- **case insensitive** - will match documents having a tag vegetable / Vegetable. notice how the structure changes a little bit, `tags.keyword` is not a string now like earlier, but an object, with the value specified under `value` + ``` + get products/_search + { + "query": { + "term": { + "tags.keyword": { + "value": "vegetable", + "case_insensitive": true + } + } + } + } + ``` +- **prefix** - begins with. will match documents having name both "Pasta" and "Pastry", but not "Red Pasta" + ``` + get products/_search + { + "query": { + "prefix": { + "name.keyword": { + "value": "Past" + } + } + } + } + ``` +- **wildcard** - can use `?` / `*`. `past?` will match "paste", `past*` will match "pasta" and "pastry" however, do not do `*past`. while it will work, it might be very slow if index is huge + ``` + get products/_search + { + "query": { + "wildcard": { + "name.keyword": { + "value": "Past*" + } + } + } + } + ``` +- **regexp** - allows for regular expressions, useful when use case is more complex than what wildcard can do. remember, i get slightly confused in other places as well - `past*` is wildcard, `past.*` is regular expression. just like in wildcards, only try using it for prefix matching + ``` + get products/_search + { + "query": { + "regexp": { + "tags.keyword": { + "value": "Bee(f|r)" + } + } + } + } + ``` +- below the value, for all types like regexp, wildcard, prefix, etc, we can additionally also specify `case_insensitive` + +### Exists Term Level Query + +- search for all documents where a tag exists + ``` + get products/_search + { + "query": { + "exists": { + "field": "tags.keyword" + } + } + } + ``` +- what basically happens in exists query - it looks for all documents that are present in the inverted index +- there can be many reasons why a document would not be present in an inverted index, some common ones are - + - we specify null + - we specify an [empty array](#arrays-in-elasticsearch) - recall this is the same as omitting the field + - if for e.g. we use the `ignore_above` parameter, and the value was too long and was thus not indexed - recall this is usually keyword not text, so the entire string would be used for the inverted index and not the tokens, in which case it might have stayed below the character limit + +## Full Text Queries + +- term level queries are used for exact searches on structured data +- **full text queries** are used for searching through unstructured data +- the query is analyzed - if the field is analyzed, the same analyzer is used, else the standard analyzer is used +- analyzing both the query and the actual query using the same analyzer is key - otherwise, finding the document in the inverted index would not be possible +- like term level queries should be used for any data type but text +- full text queries should be used for only text data types +- querying all documents - + ``` + get products/_search + { + "query": { + "match_all": {} + } + } + ``` +- e.g. search for a particular field - note how `case_insensitive` is not needed like in term level queries, since the standard analyzer already contains the lowercase filter + ``` + get products/_search + { + "query": { + "match": { + "name": "PAsTa" + } + } + } + ``` +- if we specify multiple words, e.g. below, we get all products having either pasta **or** chicken in their name + ``` + get products/_search + { + "query": { + "match": { + "name": "pasta chicken" + } + } + } + ``` +- this is because the default operator is or. we can however change it to and as below. notice how the structure changes a little bit, `name` is not a string now like earlier, but an object, with the value specified under `query` + ``` + get products/_search + { + "query": { + "match": { + "name": { + "query": "pasta chicken", + "operator": "and" + } + } + } + } + ``` +- **multi match** - match using multiple fields i.e. either name or tags should have vegetable + ``` + get products/_search + { + "query": { + "multi_match": { + "query": "vegetable", + "fields": ["name", "tags"] + } + } + } + ``` + +### Controlling Scores in Full Text Queries + +- **relevance scoring** - typically in term level queries, the score is just 1, so this concept is not present there. this is not true in full text queries though. e.g. in the or variant of pasta chicken example discussed above, the recipes having both pasta and chicken come before recipes having either of them. this is because recipes containing both are deemed more relevant by elasticsearch +- **relevance boost** - e.g. boost the score of recipes having vegetable in its name. notice how everything is almost the same except the caret symbol + ``` + get products/_search + { + "query": { + "multi_match": { + "query": "vegetable", + "fields": ["name^2", "tags"] + } + } + } + ``` +- by default, the score and therefore the sorting happens using the "best matching field". e.g. assume a recipe has vegetable both in its name and its tag. if the name above leads to a score of 12.3 and tags lead to a score of 3, "the final score is not 15.3, but 12.3". we can change this behavior by specifying for e.g. **tie breaker**. so, its like the default value of tie breaker is 0. if we specify for e.g. 0.3, the final score = field_with_highest_score + (0.3 * (sum_of_scores_of_other_fields)). so, all other fields will contribute 0.3 of its score, while the field with the highest score will contribute its entire value + ``` + get products/_search + { + "query": { + "multi_match": { + "query": "vegetable", + "fields": ["name^2", "tags"], + "tie_breaker": 0.3 + } + } + } + ``` + +### Full Text Queries - Match Phrase + +- **match phrase** - a phrase is a sequence of one or more words. till now, the examples we saw did not consider the order of the words, e.g. if we search for "chicken pasta", "pasta xyz chicken" and "chicken pasta" should have the same score. using match phrase, words should appear in the "correct order" and "one after another". e.g. if we search for "complete guide", "a complete and useful guide" would not match. this why [offsets](#analysis) was stored as a part of analysis in the first place. again since it is a full text query, the field would be analyzed using the same analyzer used for field, and all recipes having juice and mango in its name one after another would match + ``` + get products/_search + { + "query": { + "match_phrase": { + "name": "juice (mango)" + } + } + } + ``` +- but, what if we want to allow for e.g. "spicy tomato sauce" to match "spicy sauce"? +- so, we can add the **slop** parameter to the query as follows - + ``` + get proximity/_search + { + "query": { + "match_phrase": { + "title": { + "query": "spicy sauce", + "slop": 1 + } + } + } + } + ``` +- when we say slop = 1, it basically means that the term can moved around once. we can move sauce +- lets say slop is 2. this means we are allowed two moves. in this case, "spicy sauce" will also match "sauce spicy" + + | **original** | spicy | sauce | | + | **slop 1** | | spicy, sauce | | + | **slop 2** | | sauce | spicy | + +- **edit distance** is another synonym for this concept +- e.g. of building a naive search - use a [bool query](#compound-queries---bool) + - `must` can use `match` with spicy sauce - recall how by default, or operator would be used + - `should` can use `match_phrase` with spicy sauce, and have some slop as well, to help boost documents with spicy sauce close by + +## Compound Queries - Bool + +- we can combine **leaf queries** to form complex **compound queries** +- we can have multiple nested compound queries +- **must** - must be present +- **must not** - must not be present +- **should** - their presence is not mandatory, but they help boost the relevance scores +- e.g. look for alcohol, not wine, and we are particularly interested in beer. note - while we do not provide multiple queries, each of must, must not and should is an array, thus allowing for multiple term level / full text queries + ``` + get products/_search + { + "query": { + "bool": { + "must": [ + { + "term": { + "tags.keyword": "Alcohol" + } + } + ], + "must_not": [ + { + "term": { + "tags.keyword": "Wine" + } + } + ], + "should": [ + { + "multi_match": { + "query": "beer", + "fields": ["name", "description"] + } + } + ] + } + } + } + ``` +- a special note - if we do not have must / must not clauses and only the should clause, one of all the queries inside should "should" match (no pun intended). maybe because if this was not the case, technically all documents of the index would be a part of the result set, and would just have different relevance scores. so for e.g. if we wanted to model scenarios like "or", we can just specify them inside the should query. at least one of the conditions inside or (i.e. inside should) would match, and documents specifying more number of conditions in the or clause would be ranked higher +- recall how we said should only affects the scoring if either must or must not is present. we can change this behavior by providing **minimum should match** clause +- **filter** - will just filter documents. unlike must, it would not contribute to the relevance score. e.g. if we are just looking for all products of type alcohol, we do not need it to contribute to the relevance score +- **filter execution context** - filter execution context does not contribute to the relevance score. thus, it is more optimal. additionally, queries inside the filter execution context can be cached for higher performance. e.g. must not and filter +- **query execution context** - contributes to the relevance score. thus, slower and cannot be cached. e.g. must and should + +## Compound Queries - Boosting + +- **boosting** - e.g. we want the functionality of should, but it should reduce the relevance score +- what we specify inside **positive** has to match (like must of bool) +- the scores of documents that match what we specify inside **negative** is reduced (opposite of should in bool) +- "the factor" by which we want the score to be reduced can be specified via **negative boost** +- e.g. "i want" juice, but i "do not like" not apple - + ``` + get products/_search + { + "query": { + "boosting": { + "positive": { + "match": { + "name": "juice" + } + }, + "negative": { + "match": { + "name": "apple" + } + }, + "negative_boost": 0.2 + } + } + } + ``` +- e.g. i like pasta, but not bacon. so, both are optional, unlike above where juice was mandatory. so, we need to combine both boosting (for its negative) and bool (for its should). additionally, notice how we use match_all inside must of bool (if only should is present, it would become mandatory) + ``` + get products/_search + { + "query": { + "boosting": { + "positive": { + "bool": { + "must": [ + { + "match_all": {} + } + ], + "should": [ + { + "term": { + "tags.keyword": "Pasta" + } + } + ] + } + }, + "negative": { + "term": { + "tags.keyword": "Bacon" + } + }, + "negative_boost": 0.2 + } + } + } + ``` + +## Compound Queries - Disjunction Max + +- **disjunction max** - we can specify multiple queries +- the query with highest relevance score is the one that is used ultimately +- we can however, use a **tie breaker** for the other matches +- recall how the working of this is exactly like [multi match](#full-text-queries). there, we specify multiple fields, here we specify multiple queries +- in fact a multi match query is converted into a dis max query. multi match query - + ``` + get products/_search + { + "query": { + "multi_match": { + "query": "vegetable", + "fields": ["name", "description"], + "tie_breaker": 0.7 + } + } + } + ``` +- equivalent dis max query - + ``` + get products/_search + { + "query": { + "dis_max": { + "queries": [ + { "match": { "name": "vegetable" } }, + { "match": { "description": "vegetable" } } + ], + "tie_breaker": 0.7 + } + } + } + ``` + +## Nested Queries + +- if we have nested objects, dot notation works just fine +- recall how we should use nested type and not object type if we want correlation between the different fields for an array of objects +- how to search through an array of nested type - + ``` + get recipes/_search + { + "query": { + "nested": { + "path": "ingredients", + "query": { + "bool": { + "must": [ + { + "match": { + "ingredients.name": "parmesan" + } + }, + { + "range": { + "ingredients.amount": { + "gte": 100 + } + } + } + ] + } + } + } + } + } + ``` +- how the score of the matching child documents effect the score of the parent document is determined via **score mode**. it is average by default (average of the scores of all the matching child documents), but it can be changed to min, max, sum. we just need to add `"score_mode": "max"` to the `nested` object for this +- if we add the **inner hits** parameter, we get all the nested documents that matched, with what score etc. understand that by default, we will get only one score which is for the parent document. this parameter helps us dig deeper into what nested document matched, with what score, etc. we just need to add `"inner_hits": {}` to the `nested` object for this + +## Controlling Query Results + +- specify format using ?format. can be for e.g. yaml +- use ?pretty if using curl so that the json response is properly formatted. response when using kibana is anyways always formatted, this is more when using for e.g. shell + ``` + curl --cacert ~/elasticsearch-8.12.0/config/certs/http_ca.crt \ + -u elastic:7Nb_iz3DKsvOgWirudWq \ + -XGET "https://localhost:9200/_cat/nodes?format=json&pretty" + ``` +- we can specify `_source` key to decide what attributes the result should return. by default, the entire document is returned. use case - we only need the ids and want to fetch the original data from another source. it is like projection in sql. set it to false for just the ids, or specify the attributes to include / exclude +- control the number of results returned using the `size` parameter. the default is 10 - + ``` + get products/_search + { + "size": 100, + "query": { + "match_all": {} + } + } + ``` +- to implement pagination, we can implement the offset using `from` - + ``` + get products/_search + { + "size": 1, + "from": 2, + "query": { + "match_all": {} + } + } + ``` +- implementing pagination + - total_pages = ceil(total_hits / page_size) + - `size` is page size + - `from` is page_size * (current_page - 1) +- sorting results - default is sorting by score. also note that sorting by name would throw an exception like - `Text fields are not optimized ...`, so use name.keyword. recall that [default dynamic mapping](#mapping) would generate [multi field mapping](#multi-field-mappings) for strings, with both text and keyword variant + ``` + get products/_search + { + "size": 10, + "from": 2, + "sort": [ + { "price": "desc" }, + { "name.keyword": "asc" } + ], + "query": { + "match_all": {} + } + } + ``` +- assume field is multi valued (elasticsearch does not care if a field is an [array](#arrays-in-elasticsearch)). we can then inside the sort array, structure the object like so - + ``` + { + "price": { + "order": "desc", + "mode": "avg" + } + } + ``` + +## Metric Aggregations + +- **metric aggregations** - calculate metric like sum, average, etc on the field we specify. e.g. - + ``` + get orders/_search + { + "size": 0, + "aggs": { + "total_sales": { + "sum": { + "field": "total_amount" + } + } + } + } + ``` +- `total_sales` is the name of the aggregation, inside which we specify the type of aggregation e.g. `sum`, and inside `sum`, we provide the name of the field to perform the aggregation on +- we set the size to 0 because retrieving the documents is of no use to us. i the case above, just all documents would be fetched / based on size specified +- similarly, we can use `avg`, `min`, `max`, `cardinality` (for distinct values) +- note - we can also specify `query` etc to filter out the documents on which we want to perform the aggregation +- so, to get the number of documents on which our aggregation was performed, we can use `value_count` +- we can use `stats` for a summary that includes aggregations like min, max, etc + +## Bucket Aggregations + +- **bucket aggregations** - we calculate aggregations for buckets of documents. documents fall into a bucket, and aggregations are not calculated for a specific field like in metric aggregation +- my brain cannot remember this syntax, so just understand and remember the idea for reference, but refer docs for the actual syntax +- there are many more bucket aggregations like [range](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-range-aggregation.html) for custom ranges of numbers / dates, [histogram](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-histogram-aggregation.html) to automate this bucket creation, etc, refer documentation based on use case + +### Term in Bucket Aggregation + +- [term](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html) - based on the field we specify, it will dynamically create the buckets for us. e.g. log level for logs, status for order like below, etc + ``` + get orders/_search + { + "size": 0, + "aggs": { + "status_agg": { + "terms": { + "field": "status" + } + } + } + } + ``` +- this helps us get different buckets for each order status, where each bucket contains the number of documents present in it +- additionally, to get the documents which have for e.g. the status field set to null / do not have the status field, we can add the following inside `terms` above - + ``` + "missing": "N/A", // + "min_doc_count": 0 // + ``` +- `missing` helps set name of bucket with documents containing missing status field to "N/A" +- why set `min_doc_count` - the bucket would not be returned if no faulty documents are present. setting it to 0 helps ensure even buckets with 0 documents are returned +- note - bucket aggregations are not always accurate. when our query reaches the coordinating node, it asks each shard for the top 10 documents. now, the count of status pending can be in top 10 of the first shard, but not necessarily in the second shard. so, all of the pending orders might not be present in the bucket once the coordinating node aggregates the result from both first and second shard. solution - increase the size parameter so that the default of 10 is not used. issue - it will effect performance + +### Nested in Bucket Aggregations + +- unlike metric aggregations, bucket aggregations allow for nesting +- in fact, we can nest a metric aggregation inside a bucket aggregation as well +- e.g. below, we will have stats like min, max, etc for each bucket. we create bucket using term discussed above + ``` + get orders/_search + { + "size": 0, + "aggs": { + "status_agg": { + "terms": { + "field": "status" + }, + "aggs": { + "status_stats": { + "stats": { + "field": "total_amount" + } + } + } + } + } + } + ``` + +### Filter in Bucket Aggregations + +- [filter](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html) - e.g. i want the avg price of all sales, and i also the average price for sales of t-shirt + ``` + get /sales/_search?size=0&filter_path=aggregations + { + "aggs": { + "avg_price": { "avg": { "field": "price" } }, + "t_shirts": { + "filter": { "term": { "type": "t-shirt" } }, + "aggs": { + "avg_price": { "avg": { "field": "price" } } + } + } + } + } + ``` +- response will contain both the average price of t-shirt's sales and average price of all sales +- remember - if we for e.g. wanted just the average sales of t-shirts, we would run the below i.e. a query will filter the documents then the aggs would only run on the filtered documents + ``` + get /sales/_search?size=0&filter_path=aggregations + { + "query": { "term": { "type": "t-shirt" } }, + "aggs": { + "avg_price": { "avg": { "field": "price" } } + } + } + ``` + +### Filters in Bucket Aggregations + +- [filters](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html) - helps us perform aggregations on custom buckets +- e.g. max length of log for errors and warnings + ``` + get logs/_search + { + "size": 0, + "aggs": { + "messages": { + "filters": { + "filters": { + "errors": { "match": { "body": "error" }}, + "warnings": { "match": { "body": "warning" }} + } + }, + "aggs": { + "max_length": { + "max": { + "field": "message_length" + } + } + } + } + } + } + ``` + +## Kibana + +- open source ui to visualize elasticsearch data +- it also stores its data inside elasticsearch itself, thus helping us avoid issues around backups, easily scale kibana horizontally, etc +- dashboards are dynamic as well with interactivity +- **data views** - + - was called **index patterns** in the past + - we specify an index pattern here, and all indexes matching this pattern will be queried by kibana + - e.g. for logs, it is typical to have one index per month to help with scaling, as having all the data inside one index might not scale well + - optionally, we can also set the timestamp field when configuring a data view which helps filter the data in dashboards by time +- kibana has different apps like apm, maps, dashboard, etc +- **kql** or **kibana query language** - quickly put together some querying to filter documents instead of the verbose elasticsearch's query dsl. kql is internally converted to the equivalent elasticsearch query dsl. some tips - + - simply type some words to search for them in all fields - `products fischer` + - search for the exact phrase by surrounding using double quotes - `"products fischer"` + - search for documents with specific values for a field using operators - `http.response.status_code : 400` + - `:` is for equals, we can also use `>`, `<=`, etc + - we can have multiple conditions and combine them using boolean operators like `and` and `or` + - invert condition using `not` + - make groups using parentheses `()` to for e.g. avoid relying on the default precedence + - we can use wildcards for values - `url.path : /brands*` +- kibana -> discover for browsing through index data as is. it is meant for adhoc analysis of data + 1. data view - select the data view to use + 2. kql - enter kql + 3. time - enter time range, absolute or relative. recall the timestamp field we set when creating the data view. this is a common feature in different apps across kibana + 4. histogram - based on our time range, elasticsearch will automatically create the histogram. e.g. since my time range was of three days, it generated buckets of an hour, and shows number of documents inside each bucket + 5. fields - by default all fields are displayed. e.g. to only see values of certain fields in 6., we can select the fields here + 6. messages - the actual documents (log messages in this case) + + ![discover](/assets/img/elasticsearch/discover.drawio.png) + +- note about time - throughout the ui, time is in our timezone, but when queries are sent from kibana, they are sent in utc format + - why is it good - e.g. if i want to see the logs in the last 5 hours. i will simply see the values in my timezone / query using my timezone, without having to care about the conversion myself + - when it can be a problem - i want to see the logs for 1st of january. ist of january can mean different times in different timezones. so, i might want to adjust the times in my query / change the timezone itself in kibana +- to create visualizations - from the sidebar, go to analytics -> visualize library -> create visualization + - my understanding - the kql and time filters at the top are available at the top - the kql we enter is a part of the visualization, but the timestamp we select is not +- we configure from the right pane +- the left pane shows us the actual values +- in the right pane, there are two sections + - metrics - for the actual metric - average of total in this case + - buckets - for the parameter to bucket based on - product category in this case +- metric visualization example -
+ ![metrics](/assets/img/elasticsearch/metrics.png) +- when doing nested aggregations, a typical example can be - + - bucket using date histogram and timestamp field + - create the sub aggregation using [term](#term-in-bucket-aggregation) and e.g. status code field +- in visualizations like line chart etc, we can select the bucket type to be **split series** or **split chart**. split series will show for e.g. in the same chart, whereas split chart will create separate charts in the same visualization +- the order of aggregations might matter sometimes - e.g. if i want the date histogram of the top 5 most accessed url paths throughout - + - if i first bucket by date and then by url path, kibana would show the top 5 urls for every interval + - however, if i reverse this order of bucketing, i get the right output +- example of line chart. notice the configuration on the right, with the right ordering explained above
+ ![line chart](/assets/img/elasticsearch/line-chart.png) +- note - bar, area and line chart are configured in the same way, they are just different to look at +- recall [filters](#filters-in-bucket-aggregations) in bucket aggregations. we use kql to specify custom buckets
+ ![filters](/assets/img/elasticsearch/filters.png) +- note - for above use case, we could have used range as well, but terms might be useful for more custom bucketing use cases +- when using date histogram, the interval can be set to **auto** - kibana decides the best interval automatically, e.g. a day if the range is a few months, or an hour if it is a day, etc +- **data table** - e.g. we want total sales for all salesmen + - we should use terms aggregation (since the buckets are dynamic). the field to use would be salesmen's id + - just like in bar chart etc, data table would have **split rows** and **split table** + - we add the metric to be sum of total + - now, just the salesmen's id and total might not be good to look at - we might want to add the salesmen's name. so, we use a "no op" metric like "top hits". this way, the top document of the bucket is used, and we use the field as salesman's name. in our case, that hardly matters because all orders in the same bucket have the same salesman + - we can order the buckets using one of the metrics - when configuring the bucket using salesmen's id, we configure it to order using the metric we added - sum of total (refer 3rd point) + - we can configure the data table to for e.g. display the total at the end + + ![data table](/assets/img/elasticsearch/data-table.png) + +- **heat maps** - the basic one which we might probably use is matrix based, but other use cases include - + - actual maps - e.g. which region has the most activity on our website + - on websites - e.g. like eye tracker - which areas of our website draw the most attention +- e.g. we would like to see the peak hours on the different pages of our website + - we already have an "hour of day" field to use histogram aggregation on. this way, we get it for each hour + - now, we use terms aggregation for the "url path" field + - each cell shows how many visits were there for a particular hour and url path. clearly, activity is more around 8am to 8pm + + ![heat map](/assets/img/elasticsearch/heat-map.png) + +- **tag clouds** - bubbles would be larger for the tags with higher values. e.g. bucket using cities, and measure sum of order totals
+ ![tag clouds](/assets/img/elasticsearch/tag-clouds.png) +- **dashboards** - orchestration of visualizations. they typically show all the visualizations from the same data view +- when we edit the visualizations for a dashboard, we can either modify the visualization itself, or override the settings of the visualization at the dashboard level, thus leaving the visualization as is +- **interactivity** - when we click on the chart, it automatically adds **filters** (they are like ksql i.e. present at the top) and update other visualizations using these filters as well. similarly, if we select some areas (like rectangles) on the charts, it will automatically set the timestamp filters on the dashboard and update other visualizations using this time range as well. e.g. refer the filter below on the left and the time range on the right, which were added based on our interactivity with the visualizations + ![interactivity](/assets/img/elasticsearch/interactivity.png) diff --git a/_posts/2024-03-02-low-level-design.md b/_posts/2024-03-02-low-level-design.md new file mode 100644 index 0000000..96cd5b5 --- /dev/null +++ b/_posts/2024-03-02-low-level-design.md @@ -0,0 +1,1398 @@ +--- +title: Low Level Design +mermaid: true +--- + +## SOLID Principles + +### Single Responsibility Principle + +- "a class should have only one reason to change" +- it should not handle multiple concerns +- this increases "cohesion" - only related code belongs together +- it improves readability +- it also makes writing focused tests easier + +### Open Closed Principle + +- "open for extension" - extend the functionality without touching existing code +- this is done using principles like composition, inheritance, etc +- "closed for modification" - do not add extra functionality to existing code, since it is already tested +- e.g. instead of bundling everything inside one class, have a generic `Writer` interface, and have different concrete implementations like `DBWriter`. for new functionality, we add a new writer `FileWriter` instead of touching the existing code + +### Liskov Substitution Principle + +- "sub classes should be able to substitute base classes" +- subclass should not reduce the feature set offered by base class, only increase it +- e.g. below violates liskov substitution - + +```java +class Vehicle { + + void startEngine() {} +} + +class Bicycle extends Vehicle { + + void startEngine() { + throw new RuntimeException("no engine present..."); + } +} +``` + +- solution - break into different interfaces - + +```java +class Vehicle {} + +class MotorVehicle { + + void startEngine() {} +} + +class Bicycle extends Vehicle {} +``` + +### Interface Segregation Principle + +- "clients should not be forced to depend on interfaces they do not use" +- this prevents "fat" interfaces +- example can be same as liskov above + +### Dependency Inversion Principle + +- "depend on abstractions, not concrete implementations" +- "decoupling" - modules will not have to change with change in underlying implementations +- "abstractions should not depend on details, but details should depend on abstractions" +- can be achieved through techniques like "dependency injection" - dependencies are provided to the class from outside instead of the class itself instantiating them +- thus implementations can also be swapped easily, e.g. - + +```java +class Computer { + + private final Keyboard keyboard; + private final Mouse mouse; + + Computer(Keyboard keyboard, Mouse mouse) { + this.keyboard = keyboard; + this.mouse = mouse; + } +} + +class BluetoothKeyboard implements Keyboard {} +class WiredKeyboard implements Keyboard {} + +class BluetoothMouse implements Mouse {} +class WiredMouse implements Mouse {} +``` + +## Object Oriented Analysis and Design using UML + +- procedural programming was about organizing code into blocks to help manipulate data +- oop organizes the code and wraps the data and functionality inside an object +- object oriented analysis - + - we identify the objects in a system + - we establish the relationship between them + - finally, we make the design that can be converted to executable code in our object oriented language +- uml or unified modelling language helps model the object oriented analysis +- it helps communicate design decisions easily by breaking down a complex system into smaller, understandable pieces + +### Use Case Diagrams + +- "use case" - set of actions the system can perform +- "actors" - external users of the system +- gives a high level functional behavior of the system +- models the relationship between actors and use cases, as well as between the different use cases +- "system boundary" - limit the scope of the system +- "include" - invocation of one use case by another use case (like invoking a method) +- "extend" - works like the base use case it extends with additional steps +- extend can also be used for conditional use cases. e.g. pay fine only on late returns, not all returns + +![use case](/assets/img/low-level-design/use-case.drawio.png) + +### Class Diagram + +- helps show how different entities relate to each other +- map directly to object oriented language +- the representation of class has three sections - class name, properties and methods +- "visibility" - we can put this ahead of the attributes / methods. `+` for public, `-` for private and `#` for protected and `~` for default +- "associations" - if two classes communicate with each other, there needs to be a link between them +- associations can be bidirectional (both classes are aware of each other) or unidirectional (only one class is aware) +- "multiplicity" - how many instances of the class participate in the relationship +- "inheritance" is also called an "is a" relationship. denoted by open arrows (the head is not filled) +- for abstract class, use italics +- composition / aggregation are also called a "has a" relationship +- "aggregation" - lifecycle of the child class is independent of the parent class. denoted by open arrows with diamonds at end +- "composition" - lifecycle of the child class is dependent on the parent class i.e. the child cannot exist independent of the parent. denoted by closed arrows with diamonds at end +- "generalization" - combining similar classes into a single class +- basic e.g. - + - inheritance between customer / admin and user + - composition (with multiplicity) between orders and customers + +```mermaid +classDiagram + +User <|-- Admin +User <|-- Customer +Order "*" *-- "1" Customer + +class User { + -name +} + +class Order { + -customerId + -creationDate + -shippingDate + +place() +} + +class Admin { + +updateCatalog() +} + +class Customer { + +register() + +login() +} +``` + +### Sequence Diagrams + +- sequence of interactions in terms of messages +- the vertical dimension represents the chronological order of the messages +- the horizontal dimension shows the messages that are sent +- used for "dynamic modelling" i.e. how objects interact with each other + +```mermaid +sequenceDiagram + +participant Customer +participant ATM +participant Account +participant Screen + +Customer->>ATM: Balance Inquiry +ATM->>Account: Get Balance +Account->>ATM: Balance +ATM->>Screen: Display Balance +Screen->>Customer: Show Message +``` + +### Activity Diagrams + +- flow of control from one activity to another +- "activity" - an operation that results in a change of state +- used for "functional modelling" i.e. how inputs map to outputs + +![activity](/assets/img/low-level-design/activity.drawio.png) + +## Design Patterns Introduction + +- problems that occur frequently have well defined solutions +- three broad categories - creational, structural, behavioral +- creational - how objects are constructed from classes +- structural - composition of classes i.e. how classes are constructed +- behavioral - interaction of classes and objects with one another and the delegation of responsibility + +## Creational Patterns + +### Builder Pattern + +- separate the representation of object from its construction process +- e.g. helps prevent "telescoping constructors" - + ```java + Aircraft(Engine engine); + Aircraft(Engine engine, Cockpit cockpit); + Aircraft(Engine engine, Cockpit cockpit, Bathroom bathroom); + ``` +- "product" - what we want to create - aircraft here +- we have a "builder" interface +- implementations of this builder are called "concrete builders" +- the builder has empty / default implementations +- this way, the builder methods can be selectively overridden depending on variant +- "director" - has the "algorithm" to help create products using builders +- sometimes, the director can be skipped - the client invokes the methods on builder directly +- pretty similar to [abstract factory](#abstract-factory-pattern) + +
+code example +
+
+abstract class AircraftBuilder {
+
+  void buildCockpit() {}
+  void buildEngine() {}
+  void buildBathroom() {}
+  Aircraft getResult() {}
+}
+                                          // no bathrooms in f16
+class BoeingBuilder                       class F16Builder {
+    extends AircraftBuilder {                 extends AircraftBuilder {
+
+  @Override void buildCockpit() {}          @Override void buildCockpit() {}
+  @Override void buildEngine() {}           @Override void buildEngine() {}
+  @Override void buildBathroom() {}         @Override Aircraft getResult() {}
+  @Override Aircraft getResult() {}       }
+}
+
+class Director {
+
+  AircraftBuilder aircraftBuilder;
+
+  Aircraft construct(boolean isPassenger) {
+    aircraftBuilder.buildCockpit();
+    aircraftBuilder.buildEngine();
+    if (isPassenger) {
+      aircraftBuilder.buildBathroom();
+    }
+    return aircraftBuilder.getResult();
+  }
+}
+
+
+
+ +### Singleton Pattern + +- create only one instance of a class +- e.g. thread pool, registries, etc +- we make the constructor "private" so that other classes cannot instantiate it +- some methods have been discussed below + +
+not thread safe +
+
+class AirForceOne {
+
+  private static AirForceOne instance;
+
+  private AirForceOne() { }
+
+  public static AirForceOne getInstance() {
+
+    if (instance == null) {
+      instance = new AirForceOne();
+    }
+
+    return instance;
+  }
+}
+
+
+
+ +
+synchronized - makes code slow as every invocation acquires a lock +
+
+synchronized public static AirForceOne getInstance() {
+  // ...
+}
+
+
+
+ +
+static initialization - if instantiation is expensive, it can cost us performance if object is never used +
+
+private static AirForceOne instance = new AirForceOne();
+
+
+
+ +
+"double checked locking" - solves all problems, but not generally recommended +
+
+class AirForceOne {
+
+  // IMP - notice the use of volatile
+  private volatile static AirForceOne instance;
+
+  private AirForceOne() { }
+
+  public static AirForceOne getInstance() {
+
+    if (instance == null) {
+      synchronized(AirForceOne.class) {
+        if (instance == null) {
+          instance = new AirForceOne();
+        }
+      }
+    }
+
+    return instance;
+  }
+}
+
+
+
+ +### Prototype Pattern + +- create new objects by copying existing objects +- "prototype" - the seed object from which other objects get created +- sometimes, cloning can be more performant than creating entirely new instances +- another advantage - instead of too many subclasses, vary behavior by changing fields - two separate classes for boeing and f16 are not required below +- use case - "dynamic loading" - e.g. we do not have access to constructors. the runtime environment registers prototypes with the "prototype manager", so that whenever an object is requested, a copy is returned by this prototype manager +- "shallow" vs "deep" copy - nested fields would be shared in shallow copy unlike in deep + +
+code example +
+
+class F16 implements Aircraft {
+
+  void setEngine(Engine engine) { }
+
+  Aircraft clone() { /* deep copy */ }
+}
+
+Aircraft f16A = aircraft.clone();    Aircraft f16B = aircraft.clone();
+f16A.setEngine(f16AEngine);          f16B.setEngine(f16BEngine);
+
+
+
+ +### Factory Method Pattern + +- delegate the actual instantiation to subclasses +- the factory method may or may not provide a default implementation +- the subclass will override this implementation +- downside - compare with [prototype pattern](#prototype-pattern) - it results in too many subclasses + +
+code example +
+
+class F16 {
+
+  protected Aircraft makeF16() {
+    cockpit = new Cockpit();
+  }
+}
+
+class F16A extends F16 {            class F16B extends F16 {
+
+  @Override                           @Override
+  public Aircraft makeF16() {         public Aircraft makeF16() {
+    super.makeF16();                    super.makeF16();
+    engine = new F16AEngine();          engine = new F16BEngine();
+  }                                   }
+}                                   }
+
+F16 f16A = new F16B(); f16A.makeF16();
+F16 f16B = new F16B(); f16B.makeF16();
+
+
+
+ +### Abstract Factory Pattern + +- creating families of related objects without specifying their concrete classes +- we have "abstract factory" returning "abstract products" +- "concrete factories" override these abstract factory methods and return "concrete products" +- now, only the right concrete factory needs to be passed to the aircraft to construct it +- in [factory method pattern](#factory-method-pattern), we were using inheritance to create a single product +- here, we create a family of products using composition +- concrete factories can be [singleton](#singleton-pattern) + +
+code example +
+
+class Aircraft {
+
+  void makeAircraft(AircraftFactory aircraftFactory) {
+    engine = aircraftFactory.makeEngine();
+    cockpit = aircraftFactory.makeCockpit();
+  }
+}
+
+interface AircraftFactory {
+
+  Engine makeEngine();
+  Cockpit makeCockpit();
+}
+
+class BoeingAircraftFactory implements AircraftFactory {
+
+  @Override Engine makeEngine() { return new BoeingEngine(); }
+  @Override Cockpit makeCockpit() { return new BoeingCockpit(); }
+}
+
+class F16AircraftFactory implements AircraftFactory {
+
+  @Override Engine makeEngine() { return new F16Engine(); }
+  @Override Cockpit makeCockpit() { return new F16Cockpit(); }
+}
+
+
+
+ +## Structural Patterns + +### Adapter Pattern + +- allows incompatible classes to work together by converting the interface of one class into another +- e.g. our aircraft business now needs to accommodate hot air balloons +- "adaptee" is the incompatible class - hot air balloon +- "target" is the interface the client (i.e. our code) understands - aircraft +- "adapter" is the class sitting in between, which is composed using adaptee and implements the target +- usually done after a system is designed to accommodate to fit additional requirements +- this entire process discussed above is called "object adapter" +- we can also use the "class adapter" pattern - where the adapter extends both the adaptee and the target +- disadvantage - multiple inheritance is not supported by java + +
+code example +
+
+interface Aircraft {
+
+  void takeOff();
+}
+
+class Adapter implements Aircraft {
+
+  HotAirBalloon hotAirBalloon;
+
+  Adapter(HotAirBalloon hotAirBalloon) {
+    this.hotAirBalloon = hotAirBalloon;
+  }
+
+  @Override
+  void takeOff() {
+    hotAirBalloon.inflateAndFly();
+  }
+}
+
+// now, client can use adapter like any other `Aircraft`
+
+
+
+ +### Bridge Pattern + +- helps separate abstraction and implementation into two different class hierarchies +- e.g. we have two shapes - circle and square +- now, we want to introduce two colors - blue and red +- we will end up with four classes - blue circle, blue square, red circle, red square +- this can grow exponentially +- another problem - changes to color and shape effect each other - they are not decoupled +- so, we split into two separate hierarchies - shape and color +- so, we have "abstraction" and "refined abstraction" (shapes) +- then, we have "implementation" and "concrete implementation" (colors) +- so, instead of inheritance, we use composition +- we compose the refined abstractions using the concrete implementations + +
+code example +
+
+class Shape {
+
+  private Color color;
+
+  Shape(Color color) {
+    this.color = color;
+  }
+}
+
+class Circle {              class Square {
+
+  Circle(Color color) {       Square(Color color) {
+    super(color);               super(color);
+  }                           }
+}                           }
+
+interface Color {}
+class Red implements Color {}
+class Blue implements Color {}
+
+
+
+ +### Composite Pattern + +- helps compose our model in a tree like structure and work with them +- e.g. an air force can have several levels of nested air forces, and ultimately the last level of air force would be composed of planes +- "composite" - helps model the trees / subtrees +- "leaves" - the last level in these trees +- "component" - both the leaf and composite are coded to this common interface +- now, the client can simply call `getPersonnel` and treat the composite / leaf as the same +- it uses [internal iterator](#iterator-pattern) - the iterator is not exposed, and is handled by the composite itself + +
+code example +
+
+interface Alliance {
+
+  int getPersonnel();
+}
+
+class AirForce implements Alliance {
+
+  private Alliance[] alliances;
+
+  @Override
+  int getPersonnel() {
+
+    int personnel = 0;
+
+    for (Alliance alliance : alliances) {
+      personnel += alliance.getPersonnel();
+    }
+
+    return personnel;
+  }
+}
+
+interface Aircraft { }
+
+class F16 implements Aircraft, Alliance {
+
+  @Override
+  int getPersonnel() {
+    return 2;
+  }
+}
+
+class Boeing implements Aircraft, Alliance {
+
+  @Override
+  int getPersonnel() {
+    return 10;
+  }
+}
+
+
+
+ +### Decorator Pattern + +- extend the behavior of an object dynamically +- the decorator basically adds to the existing functionality, by for e.g. taking some action before / after invoking the method on the wrapped component +- alternative to creating more subclasses +- e.g. below, the luxury and bulletproof variants could have been subclasses of boeing as well +- but then we could not wrap a different aircraft with different decorators +- "component" - the common interface to which the component and decorator is coded +- "concrete component" - what we wrap +- "decorator" - an interface for different decorators. this will also extend the component +- "concrete decorator" - the actual implementation of decorators. they wrap the concrete components +- we can wrap using multiple decorators as well +- e.g. below, we can make an aircraft bulletproof and luxurious, which affects its weight but its flying method stays the same +- the advantage is that the client code is agnostic of all this - it still codes to component +- notice how the decorator is composed using the component + +
+code example +
+
+interface Aircraft {
+  
+  void fly();
+  
+  int getWeight();
+}
+
+class Boeing implements Aircraft {    class F16 implements Aircraft {
+
+  @Override                             @Override
+  public void fly() {                   public void fly() {
+    System.out.println("flying");         System.out.println("soaring");
+  }                                     }
+
+  @Override                             @Override
+  public int getWeight() {              public int getWeight() {
+    return baseWeight;                    return baseWeight;
+  }                                     }
+}                                     }
+
+abstract class Decorator implements Aircraft { }
+
+class BulletProofDecorator extends Decorator {
+
+  Aircraft aircraft;
+
+  @Override
+  public void fly() {
+    aircraft.fly();
+  }
+
+  @Override
+  public int getWeight() {
+    return aircraft.getWeight() + 13;
+  }
+}
+
+class LuxuriousDecorator extends Decorator {
+
+  Aircraft aircraft;
+
+  @Override
+  public void fly() {
+    aircraft.fly();
+  }
+
+  @Override
+  public int getWeight() {
+    return aircraft.getWeight() + 27;
+  }
+}
+
+Aircraft boeing = new Boeing();
+Aircraft ceoPlane = new BulletProofDecorator(new LuxuriousDecorator(boeing));
+boeing.getWeight(); // cumulated weight
+
+
+
+ +### Facade Pattern + +- a single uber interface to a subsystem to make working with it easier +- the client will now interface with the "facade" and not worry about the complexities of the subsystem +- changes to the subsystem will now affect the facade and not the client + +
+code example +
+
+class AutopilotFacade {
+
+  private BoeingAltitudeMonitor altitudeMonitor;
+  private BoeingEngineController engineController;
+  private BoeingNavigationSystem navigationSystem;
+
+  AutopilotFacade(BoeingAltitudeMonitor altitudeMonitor,
+      BoeingEngineController engineController, 
+      BoeingNavigationSystem navigationSystem) {
+    this.altitudeMonitor = altitudeMonitor;
+    this.engineController = engineController;
+    this.navigationSystem = navigationSystem;
+  }
+
+  void autopilotOn() {
+    altitudeMonitor.autoMonitor();
+    engineController.setEngineSpeed(700);
+    navigationSystem.setDirectionBasedOnSpeed(engineController.getEngineSpeed());
+  }
+
+  void autopilotOff() {
+    altitudeMonitor.turnOff();
+    engineController.turnOff();
+    navigationSystem.turnOff();
+  }
+}
+
+
+
+ +### Flyweight + +- sharing state among objects for efficiency +- e.g. if we use a global radar to track air crafts, we will end up with too many air craft objects for the same air craft at different coordinates +- "intrinsic state" - independent of the context of object. e.g. top speed of the air craft +- "extrinsic state" - dependent of the context of object. e.g. coordinates of the air craft +- so, to prevent creation of too many objects, we store intrinsic state inside the object, while extrinsic state outside it +- this way, we automatically end up with less objects, since we only need new objects when the intrinsic state changes, and not every time the extrinsic state changes +- "flyweight" - the object has become light since it only stores intrinsic state now +- "flyweight factory" - used to create the flyweight objects, because we do not want the client to create them directly +- "context" - used to store the extrinsic state + +
+code example +
+
+class F16 implements IAircraft {
+
+  private final int topSpeed = 800;
+
+  int getTimeToDestination(int curX, int curY, int destX, int destY) {
+    int distance = ...;
+    return distance / topSpeed;
+  }
+}
+
+
+
+ +### Proxy Pattern + +- calls to the "real subject" are hidden behind a "proxy" +- this way, the real subject is shielded from the client +- both implement the "subject" interface so that the client code does not change +- e.g. client will call methods like turn left and turn right on remote control +- the remote control will call these methods on the drone +- both of them implement an interface called `IDrone` +- "remote proxy" - when the real subject is located on a remote server, the calls made by the client actually reaches a proxy first +- the proxy sits on the same jvm, and the proxy then makes the request over the network to the real subject on the remote server +- "virtual proxy" - delays the object creation when it is expensive +- e.g. we see loading overlays or wire frames with same height and width while expensive pictures are loading +- "protection proxy" - acts as an authorization layer in between + +## Behavioral Patterns + +### Chain of Responsibility Pattern + +- decoupling the sender of a request from its receiver +- passing it along a chain of handlers till one of the handlers handle it or the request falls off the chain and remains unhandled +- use this pattern when a request can be handled by multiple objects and it is not known in advance which one will end up handling it +- we have a "handler" which all "concrete handlers" implement +- notice how all handlers maintain a reference to their successor + +
+code example +
+
+class ErrorCodes {
+
+  static final int LOW_FUEL = 1;
+  static final int HIGH_ALTITUDE = 2;
+}
+
+class Handler {
+
+  Handler next;
+
+  Handler(Handler next) {
+    this.next = next;
+  }
+
+  void handleRequest(int errorCode) {
+    if (next != null) {
+        next.handleRequest(errorCode);
+    }
+  }
+}
+
+class LowFuelHandler extends Handler {          class HighAltitudeHandler extends Handler {
+
+  LowFuelHandler(Handler next) {                  HighAltitudeHandler(Handler next) {
+    super(next);                                    super(next);
+  }                                               }
+
+  void handleRequest(int errorCode) {             void handleRequest(int errorCode) {
+    if (errorCode == ErrorCodes.LOW_FUEL) {         if (errorCode == ErrorCodes.HIGH_ALTITUDE) {
+      // ...                                          // ...
+    } else {                                        } else {
+      super.handleRequest(errorCode);                 super.handleRequest(errorCode);
+    }                                               }
+  }                                               }
+}                                               }
+
+
+
+ +### Observer Pattern + +- "observers" subscribe to "subjects" for state changes +- so, we have "observer" and "concrete observers", "subject" and "concrete subjects" +- "push model" - the subject will push the new state into the observer when calling its update method +- "pull model" - the subject will call the observer's update method using itself i.e. `this` +- then, the observer can call the getter method on the subject which can expose individual bits of state + +
+code example +
+
+interface ISubject {
+
+  void addObserver(IObserver observer);
+
+  void removeObserver(IObserver observer);
+
+  void notifyObservers();
+}
+
+interface IObserver {
+
+  void update(Object newState);
+}
+
+public class ControlTower implements ISubject {
+
+  List\ observers = new ArrayList<>();
+
+  @Override
+  public void addObserver(IObserver observer) {
+    observers.add(observer);
+  }
+
+  @Override
+  public void removeObserver(IObserver observer) {
+    observers.remove(observer);
+  }
+
+  // assume some poller calls this every 5 seconds
+  // with the current weather conditions etc
+  @Override
+  public void notifyObservers(Object newState) {
+    for (IObserver observer : observers) {
+      observer.update(newState);
+    }
+  }
+}
+
+class F16 implements IObserver {
+
+  ISubject subject;
+
+  public F16(ISubject subject) {
+    this.subject = subject;
+    subject.addObserver(this);
+  }
+
+  @Override
+  public void land() {
+    subject.removeObserver(this);
+  }
+
+  @Override
+  public void update(Object newState) {
+    // take appropriate action based on weather etc
+  }
+}
+
+
+
+ +### Interpreter Pattern + +- a grammar defines if some code is syntactically correct or not +- "context free grammar" - has the following components - + - start symbol + - set of terminal symbols + - set of non terminal symbols + - set of production rules +- we keep expanding the non terminal symbols till we reach the terminal symbols +- any final expression we can derive is called a "sentence" +- the sentence is said to be in the "language of grammar" we defined +- e.g. we have three operations in a flight simulation software - glide, barrel roll, splits +- we cannot perform barrel rolls and splits one after another +- we need to start and end with glide +- the production rules will look like as follows - + ``` + -> + -> glide + -> barrel roll + -> splits + ``` +- ast (abstract syntax tree) - can be used to represent the sentences in our grammar +- in this ast, the internal nodes are non terminal symbols, while leaf nodes are terminal symbols +- an ast example -
+ ![interpreter ast](/assets/img/low-level-design/interpreter-ast.drawio.png) +- "abstract expression" - the interface +- the abstract expression can be a "terminal expression" or a "non terminal expression" +- the non terminal expression will hold a reference to the other abstract expressions based on the production rules +- how we interpret an expression depends on the "context" + +
+code example +
+
+interface AbstractExpression {
+
+  void interpret(Context context);
+}
+
+class Context {}
+
+class Flight implements AbstractExpression {
+
+  private AbstractExpression flightOne;
+  private AbstractExpression showOff;
+  private AbstractExpression flightTwo;
+
+  @Override
+  public void interpret(Context context) {
+  }
+}
+
+class ShowOff implements AbstractExpression {
+
+  private AbstractExpression barrelRoll;
+  private AbstractExpression splits;
+
+  @Override
+  public void interpret(Context context) {
+  }
+}
+
+class Glide implements AbstractExpression {
+
+  @Override
+  public void interpret(Context context) {
+  }
+}
+
+class BarrelRoll implements AbstractExpression { 
+
+  @Override
+  public void interpret(Context context) {
+  }
+}
+
+class Splits implements AbstractExpression {
+
+  @Override
+  public void interpret(Context context) {
+  }
+}
+
+
+
+ +### Command Pattern + +- represent an action or a request as an object +- this can then be passed to other objects as parameters +- these requests can then be queued for later execution +- think of it like "callbacks" +- e.g. when we press a button, it does not need not know what to do +- it only needs to know the object that knows what to do +- "receiver" - the object that knows what to do - `MissileLauncher` in this case +- "command" and "concrete command" - the command is composed of the receiver. it is the abstraction layer - `Command` and `FireMissileCommand` in this case +- "invoker" - invokes the command - it is unaware of the underlying implementation of the command - `AircraftPanel` in this case +- "macro command" - setup a series of command objects in another command object. all these command objects will be invoked when invoking this macro command. this is a combination of [composite pattern](#composite-pattern) + command pattern + +
+code example +
+
+interface Command {
+
+  void execute()
+}
+
+class FireMissileCommand implements Command {
+
+  MissileLauncher missileLauncher;
+
+  @Override
+  void execute() {
+    missileLauncher.fire();
+  }
+}
+
+class AircraftPanel {
+
+  Command[] commands = new Command[10];
+
+  void setCommand(int i, Command command) {
+    commands[i] = command;
+  }
+
+  void fire() {
+    commands[3].execute();
+  }
+}
+
+
+
+ +### Iterator Pattern + +- traverse the elements of a aggregate without exposing the internal implementation +- so, we have "iterator" and "concrete iterator", "aggregate" and "concrete aggregate" +- "external iterator" - the client requests for the next element and performs the operation +- "internal iterator" - the client hands over the operation to perform to the iterator +- this way, the iterator is never exposed to the client +- e.g. [composite pattern](#composite-pattern) typically uses internal iterators +- below, we have multiple aggregates, each having their own iterator but everything is hidden behind one iterator + +
+code example +
+
+public interface Iterator {
+
+  IAircraft next();
+
+  boolean hasNext();
+}
+
+public class AirForceIterator implements Iterator {
+
+  List\ jets;
+  IAircraft[] helis;
+  
+  int jetsPosition = 0;
+  int helisPosition = 0;
+
+  public AirForceIterator(AirForce airForce) {
+    jets = airForce.getJets();
+    helis = airForce.getHelis();
+  }
+
+  @Override
+  public IAircraft next() {
+
+    if (helisPosition < helis.length) {
+      return helis[helisPosition++];
+    }
+
+    if (jetsPosition < jets.size()) {
+      return jets.get(jetsPosition++);
+    }
+
+    throw new RuntimeException("No more elements");
+  }
+
+  @Override
+  boolean hasNext() {
+
+    return helis.length > helisPosition ||
+      jets.size() > jetsPosition;
+  }
+}
+
+
+
+ +### Mediator Pattern + +- encourage lose coupling between interacting objects +- by encapsulating interactions in a "mediator" object +- the interacting objects are called "colleagues" and "concrete colleagues" +- use when interactions between the colleagues becomes very complex +- the colleagues are involved in many to many interactions, but with the mediator, it becomes one to many from mediator to colleagues +- we can often combine the mediator pattern with the [observer pattern](#observer-pattern) as well +- e.g. a runway needs to be free for an air craft to land +- instead of all air crafts looking at each other if the runway is being used, we can use a control tower that manages all of this for us + +
+code example +
+
+class Aircraft {
+    
+  ControlTower controlTower;
+
+  void startLanding() {
+    controlTower.queueForLanding(this);
+  }
+
+  void land() {
+    System.out.println("pull out wheels");
+  }
+}
+
+class ControlTower {
+
+  Queue\ aircraftQueue;
+
+  void queueForLanding(Aircraft aircraft) {
+    aircraftQueue.enqueue(aircraft);
+  }
+
+  @Schedule("2 minutes")
+  void allowLanding() {
+    if (!queue.isEmpty()) {
+      queue.dequeue().land();
+    }
+  }
+}
+
+
+
+ +### Memento Pattern + +- capture the internal state of an object without exposing its internal structure +- so that the object can be restored to this state later +- "originator" - the object whose state is captured +- "memento" - the snapshot / the state which was captured +- "caretaker" - the object that holds the memento +- by making the memento a static class inside originator, we ensure that only the originator can access the state - since `getState` is private, outside classes like for e.g. the caretaker cannot call `getState` + +
+code example +
+
+class State { }
+
+class Originator {
+
+  static class Memento {
+
+    private State state;
+
+    Memento(State state) {
+      this.state = state;
+    }
+
+    private State getState() {
+      return state;
+    }
+  }
+  
+  private State state;
+
+  public Memento save() {
+    return new Memento(state);
+  }
+
+  public void restore(Memento memento) {
+    this.state = memento.getState();
+  }
+}
+
+class Caretaker {
+
+  private Stack\ history;
+  private Originator originator;
+
+  void takeSnapshot() {
+    Memento memento = originator.save();
+    history.push(memento);
+  }
+
+  void undo() {
+    Memento memento = history.pop();
+    originator.restore(memento);
+  }
+}
+
+
+
+ +### State Pattern - TODO + +- alter behavior of the object as its state changes +- so that it appears to change its class +- TODO: remaining + +### Template Method Pattern + +- subclasses define parts of the algorithm without modifying the overall structure of the algorithm +- "template method" - the common part stays in the base class +- "hook method" - the variable part is overridden by the subclasses +- the base class can provide default implementations for these hook methods if needed +- the template method can be made final +- e.g. pre flight checks can be the template method, which checks + - fuel levels + - air pressure + - if the door is locked +- all these can be hooks i.e. specific to the aircraft +- helps avoid "dependency rot" - where dependencies at various levels depend on each other horizontally and vertically +- [factory method pattern](#factory-method-pattern) is a special form of the template method pattern + +### Strategy Pattern + +- make algorithms belonging to the same family easily interchangeable +- "strategy" - the common interface +- "concrete strategy" - the actual implementation of the different algorithms +- "context" - uses the strategy +- the context is composed using the strategy +- context can use a default strategy as well to lessen the burden on client + +
+code example +
+
+interface ISort {
+
+  void sort(int[] input);
+}
+
+class BubbleSort implements ISort {   class MergeSort implements ISort {
+
+  @Override                             @Override
+  void sort(int[] input) {              void sort(int[] input) {
+  }                                     }
+}                                     }
+
+class Context {
+
+  private ISort howDoISort;
+
+  public Context(ISort howDoISort) {
+    this.howDoISort = howDoISort;
+  }
+
+  void sort(int[] numbers) {
+      howDoISort.sort(numbers);
+  }
+}
+
+
+
+ +### Visitor Pattern - TODO + +- define operations for elements of an object without changing the class of this object +- e.g. assume we want to monitor several metrics like fuel, altitude, etc on all the air crafts +- option - introduce all these methods on each of the concrete aircraft classes +- issue - we are bloating our aircraft class +- solution - we use the visitor pattern +- note how the visitor pattern will have a separate method for each of the concrete class +- so, we have "element" and "concrete element", "visitor" and "concrete visitor" +- the concrete element will call its corresponding method on the visitor +- if concrete elements increase, we will have to modify all visitors +- so, use the visitor pattern when the element hierarchy is stable but we keep adding new functionality to visitors + +
+code example +
+
+interface Aircraft {
+
+  void accept(AircraftVisitor visitor);
+}
+
+class Boeing implements Aircraft {          class F16 implements Aircraft {
+
+  void accept(AircraftVisitor visitor) {      void accept(AircraftVisitor visitor) {
+    visitor.visitBoeing(visitor);               visitor.visitF16(visitor);
+  }                                           }
+}                                           }
+
+interface AircraftVisitor {
+
+  void visitBoeing(Boeing boeing);
+
+  void visitF16(F16 f16);
+}
+
+class FuelVisitor implements AircraftVisitor {   class DoorVisitor implements AircraftVisitor {
+
+  void visitBoeing(Boeing boeing) {}               void visitBoeing(Boeing boeing) {}
+  
+  void visitF16(F16 f16) {}                        void visitF16(F16 f16) {}
+}                                                }
+
+
+
+ +## Amazon + +warehouse - + +- product_instance(bar_code) +- product(name, price, product_instance[], amount) + - composition for products + - this allows us to select multiple products +- warehouse(product_instance[], address) + - aggregation for product +- warehouse selection - use [strategy pattern](#strategy-pattern), since there can be different algorithms + - closest warehouse to the customer + - warehouse that can fullfil all items in the order, so we do not have to source from multiple warehouses + - warehouse that will induce the least shipping charge + - so, the algorithm will accept list of warehouses and the order, and spit out the warehouse(s) to source the items from + +actors - + +- guest(cart) + - composition for cart + - can browse products + - can add products to cart + - however, the guest cannot checkout until logged in / registered as a customer +- customer extends guest(account) +- admin(account) +- account(name, email, phone, password) + +cart and coupons - + +- item(product, count, price) +- cart(item[]) +- coupon_decorator extends item() + - n% off on all individual items - individual_coupon_decorator extends coupon_decorator(offer_percentage) + - d% off on nth item of type t - n_items_coupon_decorator extends coupon_decorator(offer_percentage, no_of_items) - it can access "count" field of item and compare it with its no_of_items field +- use [composite pattern](#composite-pattern) for calculating total price for items in cart after applying coupons. calling get price on item will return the decorated price + +order - + +- order(customer, item[], payment, order_log[], current_order_status) + - we can use optimistic concurrency control to handle concurrent users +- order_log(order_status, date) +- shipment(shipment_log[], current_shipment_status) +- shipment_log(shipment_status, date) +- payment(payment_status, total_amount, payment_type) + +## BookMyShow + +actors - same logic as [amazon](#amazon) + +static - + +- city +- movie(name, duration, city[]) + - aggregation - a movie can only play in selected cities + - city to movie is many to many +- cinema(name, address, city, hall[]) + - composition - hall +- hall(number, seat[]) + - composition - seat +- seat(seat_type, row, col) + - seat_type - economy, business + +dynamic - + +- show(movie, start_time, hall, show_seat[]) + - movie - aggregation + - composition - show_seat +- show_seat extends seat(price, is_booked) + - note the inheritance - show_seat "is a" seat +- booking(show, show_seat[], payment) + - side note - for flights, this list might not suffice - we might go with map{seat, passenger} instead +- payment(payment_status, total_amount, payment_type) + +handling concurrency - + +- what if two users try booking the same seat + - pessimistic approach - lock when data is read. now, user 2 would not be able to read and therefore book the same seat + - optimistic approach - allows multiple users to perform the read. once the first user is able to successfully update the data, the version changes to v2. now, the second user on trying to update sees that the version has changed, and therefore the update for the second user fails +- so, optimistic might be better - multiple users might be trying to book but only a few of them actually end up booking. if we try locking for all the users every time, the screen would be stuck for other users most of the time +- we can use redis - locks in redis have the concept of time, so that we can block the seats for a certain duration, e.g. 1 minute, till the payment is completed by the user. if the user exceeds this timeout, they will have to re initiate the booking process from scratch +- also, we can talk about the different isolation levels in a transaction when handing updates + +## Parking Lot + +- account(name, email, password, phone) +- customer(account, ticket[], vehicle[]) +- parking_attendant(account) +- vehicle(number, vehicle_type) + - vehicle_type - bike, cycle, sedan, suv, truck +- parking_spot(parking_spot_type, is_empty) + - parking_spot_type - compact, large, two_wheeler, electric (has charging capability, and might have extra charges for that) +- parking_floor(all_parking_spots: map{parking_spot_type, parking_spot[]}, display_board) +- display_board(free_spots: map{parking_spot_type, no_of_free_spots}) + - can use [observer pattern](#observer-pattern) - as there are vehicles added to / removed from parking floor, update the numbers here +- parking_strategy - uses the strategy pattern - finding the next available parking spot - + - find the nearest parking spot to the entrance - useful if there are multiple entrances + - if no more compact spaces are available, start allocating from empty spots reserved for electric vehicle + - will receive the vehicle type, and return the parking spot of this type if available +- pricing_strategy - calculate the price. will receive just the ticket, and output the final price + - hourly rates may be different i.e. hourly rate decreases as the total time the vehicle is parked increases - 2$ for first hour, 1$ for 2nd hour, 0.5$ for remaining hours + - can have a capped price if the vehicle is to be parked for a whole day / multiple days +- ticket(entry_time, exit_time, payment, parking_spot, vehicle, ticket_status) + - price can change based on type of parking spot +- payment(payment_status, total_amount, payment_type) + +## ATM + +- we use [state design pattern](#state-pattern---todo) for modelling the different states of the atm - state(insert_card(), enter_pin(), select_operation(), perform_operation()) + - idle_state extends state(card) + - enter_pin extends state(pin) + - display_operations extends state(operation_type) + - perform_operation extends state(operation, perform() - call operation.perform()) + - idle +- operation(operation_type, perform) + - withdraw_cash extends operation(amount) + - deposit_cash extends operation(amount) + - deposit_cheque extends operation(cheque) + - print_statement extends operation() +- [chain of responsibility design pattern](#chain-of-responsibility-pattern) for deciding cash withdrawal when deciding denominations to use. denomination_processor(next, amount) + - 2k_processor(500_processor, 2000) + - 500_processor(100_processor, 100) +- atm(dispenser, screen, keypad, current_state) + - we basically call atm.current_state = atm.current_state.transition_action(). the transition_action automatically returns the right next state +- customer(account[]) +- account(account_type, card) + - account_type - checking, savings +- card(number, cvv, expiry) diff --git a/_posts/2024-03-09-high-level-design.md b/_posts/2024-03-09-high-level-design.md new file mode 100644 index 0000000..644a35c --- /dev/null +++ b/_posts/2024-03-09-high-level-design.md @@ -0,0 +1,1622 @@ +--- +title: High Level Design +--- + +## Software Architecture + +- what is software architecture - + - high level design - hide implementations and express in terms of abstractions + - of the different components + - and how they interact with each other + - to fulfil requirements (what it should do) and constraints (what it should not do) +- software development lifecycle - we can repeat this process again and again + - design + - implementation + - testing + - deployment +- software architecture is the output of the first step / input to the second step +- decisions at the bigger level cannot be changed easily, cost a lot of wasted effort, etc so we need to make good decisions + +## System Requirements + +- the scope of the problem / the number of ways to solve a problem increases as the abstraction increases from designing a method -> class -> module -> application +- the ambiguous problem needs to be converted to a technical problem +- we might need to ask clarifying questions to the client +- different types of requirements - + - features of the system + - quality attributes + - system constraints + +### Features of the System + +- express the actual "functional requirements" of the system +- e.g. hitchhiking service - allow users to share rides +- identify all the "actors" and "use cases" +- expand each "use case" through a "flow of events" - we can use a [sequence diagram](/posts/low-level-design/#sequence-diagrams) for this + +![features of the system](/assets/img/high-level-design/features-of-the-system.svg) + +### Quality Attributes + +- to address the "non functional requirements" of the system +- how well a system should perform in a [particular dimension](#important-quality-attributes) +- [important quality attributes](#important-quality-attributes) include [performance](#performance), [scalability](#scalability), [availability](#availability), [fault tolerance](#fault-tolerance), etc +- have a direct impact on the technical decisions of the system unlike [features of the system](#features-of-the-system) +- e.g. show products when searched for under 100ms, system should be available 99.9% of the time, etc +- they have to "measurable" and "testable" +- need to make "tradeoffs" - there is no one architecture that can address all problems +- sometimes, clients might make "infeasible" requirements - 100% availability, unlimited storage, etc. we should call them out + +### System Constraints + +- limitations and boundaries of a system +- three types of constraints - technical, business and regulatory +- "technical constraints" - e.g. lockin to a particular database, cloud vendor, software license, etc +- "business constraints" - time and budget limitations +- "regulatory constraints" - e.g. location specific +- we should avoid tight coupling, else we would have constraints specific to hardware etc + +## Important Quality Attributes + +### Performance + +- "response time" - time between client sending a request and receiving a response +- response time = "processing time" + "waiting time" +- processing time - time spent in performing the actual business logic +- waiting time - time spent in transit, waiting queues, etc +- waiting time is also called "latency", while response time is also called "end to end latency" +- response time is critical when a request is in the path of a user interaction - users do not like to wait +- "throughput" - can be + - either "number of tasks performed per unit of time" + - or "amount of data processed per unit time" i.e. bits per second etc +- throughput can be useful when for e.g. analyzing a constant stream of logs from several sources +- consideration 1 (response time) - e.g. we as developers think our processing time is 10 ms so response time is 10ms, but assume our server can only process one request at a time +- if we get two concurrent requests, the waiting time for the second request will be 10ms, thus increasing its response time to 20ms +- so, response time is affected by waiting time as well +- consideration 2 (response time) - response times for some requests in our system will be very bad, while all others would be relatively better +- these relatively slow response times are called "tail latency" +- so, instead of metrics like median or average, the most effective way to measure response times is a "percentile distribution chart", instead of just using median or average +- in this chart, the "xth percentile" is the value below which x% of the values can be found +- refer the part around 100th percentile in the percentile distribution graph below for tail latency +- so, we would set [slo](#sla-slo-and-sli) like so - 95th percentile of requests should have 30ms response times + +![percentile distribution response time](/assets/img/high-level-design/percentile-distribution-response-time.svg) + +- consideration 3 (both response time and throughput) - effect of load - the point where the response time starts increasing / throughput starts decreasing due to increase in load is called the "degradation point" + +![degradation point](/assets/img/high-level-design/degradation-point.svg) + +### Scalability + +- the load on our system never stays the same - seasonal traffic e.g. during holidays +- "scalability" - systems capability to handle growing amount of load +- scalability are of three types +- "vertical scalability" - adding more resources / upgrading existing resources on a single machine +- advantage - no code changes are needed, migration is straightforward +- disadvantage - + - there is a limit to which we can scale vertically + - does not provide [high availability](#availability) or [fault tolerance](#fault-tolerance) +- "horizontal scalability" - adding more instances on different machines +- advantage - + - no limit to scalability + - more importantly - provides [high availability](#availability) or [fault tolerance](#fault-tolerance) +- disadvantage - + - code changes might be required + - overhead around coordination is introduced +- "team / organization scalability" - as we add more engineers, productivity decreases after a certain point +- we can split codebase into separate modules or better, architecture into separate services to decrease conflicts + +### Availability + +- "availability" - fraction of time our system is operational +- so, availability = uptime / (uptime + downtime) +- mtbf - "mean time between failures" and mttr - "mean time to recovery" (both are self explanatory) +- so, we can also say availability = mtbf / (mtbf + mttr) +- so, one way to ensure high availability is to reduce mttr i.e. detect and resolve issues in near 0 time +- 99.9% means ~9h of downtime in a year + +### Fault Tolerance + +- there can be "human errors" (e.g. faulty config), "software errors" (out of memory exceptions) or "hardware failures" (infrastructure issues / outage) +- failures are inevitable +- "fault tolerance" - helps keep system operational (i.e. [available](#availability)) despite failure of multiple components +- fault tolerance tactics - prevention, detection / isolation and recovery +- "failure prevention" - eliminate single points of failures. use "replication" and "redundancy" for this. two strategies - + - "active active architecture" - requests can go to any replica. so, all of them have to be kept in sync. so, if one of them goes down, the remaining one will still continue to operate. advantage - helps balance load, since it is like [horizontal scalability](#scalability). disadvantage - keeping all replicas in sync is non trivial + - "active passive architecture" - one primary replica takes all the requests, while the passive replicas take periodic snapshots of the active replica. disadvantage - we cannot [scale](#scalability) our system horizontally, since we are still restricted to the one active replica. advantage - this leader follower pattern is much easier to implement +- "failure detection / isolation" - if we have a faulty replica, our system should be able to detect it and isolate it +- this is done by a monitoring service using - + - health checks - monitor service polling the servers periodically + - heartbeats - the servers sending heartbeats to the monitoring service periodically +- monitoring service can be more complex - declare a host to be failed based on its error rate, if its response time has suddenly increased, etc +- "failure recovery" - some strategies - + - stop sending traffic to the faulty instance + - attempt to restart the host + - "rollback" - + - rollback service to a stable version + - rollback databases when it reaches an inconsistent state to a previous consistent state + +### SLA, SLO and SLI + +- sla - "service level agreement" - agreement between the service provider and client +- if we fail to deliver these sla, we have to provide refunds, license extensions, etc to clients +- slo - "service level objective" - goals we set for our systems +- each slo can represent one of the [quality attributes](#important-quality-attributes) +- an sla is basically a collection of slo +- even if we do not have an sla, we should have slo so that our users know what they can expect from us +- sli - "service level indicator" - quantitative measure of the different [quality attributes](#important-quality-attributes) +- achieved using monitoring services +- we can compare what we see in sli to what we define in slo +- this is why we said [quality attributes](#quality-attributes) should be measurable and testable - otherwise, we would not have been able to measure our slo using sli +- general guide - based on what clients ask, we should define slo and then find out matching sli +- another technique - define loser external slo but stricter internal slo + +## API Design + +- api - "application programming interface" +- the interface is a "contract" between our systems and the client +- our system becomes a "black box" - the client need not know the internal implementation of this api, they just have to interact with this api +- once we define the apis, our clients can start integrating with it without us actually having built its implementation entirely +- it is called remotely over the network +- apis can be public, private / internal and partner +- "public api" - exposed to general public and any developer can call them. might require registration from users first +- "private api" - used by other systems inside the organization, but not exposed outside the organization +- "partner api" - to organizations having a business relationship with us +- two types of apis we discuss - rpc and rest api + +### Good Practices for API Design + +- "encapsulation" - clients should not have to care about implementation +- we can change the implementation without the client changing anything on its end +- "ease of use" - descriptive actions and resources, keeping it consistent +- "idempotent operations" - no effect if the operation is performed > once. updating the address is idempotent, increasing balance by 100 is not +- assume there is an error due to some reason - the request is lost / response to the message is lost (but the request was processed) +- now, the client does not know which one happened +- so, even if it retries the operation, it should not have any consequences +- "pagination" for large responses - the client can provide the offset and the number of items to retrieve +- "asynchronous operations" - some operations are very big, and we cannot provide any reasonable response immediately +- instead of the client having to wait for something like this, we can use asynchronous operations +- the immediate response includes an identifier which the client can use to track the progress of the operation +- "versioning" - allows us to make non backward compatible changes to the api + +### RPC + +- rpc - "remote procedure calls" +- ability of a client to execute a subroutine on a remote server +- "location transparency" - calling an rpc looks like calling a local method +- applications written in different programming languages can also talk using rpc +- idl - "interface description language" - we define the api and data types in this language +- then, the rpc framework we use generates 2 separate implementations - "server stub" and "client stub" +- they include the corresponding classes for the api and data types we define in the interface description language +- rpc will also take care of marshalling / unmarshalling the request / response for us automatically +- it might include propagation of exception etc as well +- rpc helps the clients focus on performing an action on the server systems, and not worry about the network communication +- drawbacks - + - remote methods are a lot slower and unreliable. the client execution will thus be blocked. so, we should try writing asynchronous versions for the remote methods + - it is also not useful when we want the features like cookies, headers etc +- popular frameworks - + - grpc by google - high performance rpc. uses "http/2" for transport and "protocol buffers" as the interface description language + - apache thrift - by facebook + - java rmi (remote method invocation) - unlike above two, specific to java - helps one jvm invoke a method on another jvm + +### Rest API + +- rest - "representational state transfer" +- it is not a standard or protocol, but an architectural style +- advantage - helps maintain [quality attributes](#important-quality-attributes) like [performance](#performance), [availability](#availability), [scalability](#scalability) and [fault tolerance](#fault-tolerance) +- an api that obeys the rest architectural style is called a "restful api" +- the only actions a client can take in an rpc api is defined inside the interface definition language - so, it is somewhat static +- in rest, we can use hateoas - "hypermedia as the engine of application state" - the response contains "hypermedia links" around the operations that the client can perform +- rest should be "stateless" - no session information should be maintained by the server +- this way, each request is served in isolation +- advantage of statelessness - multiple requests by a single client can be processed by different horizontally scaled instances +- "cacheable" - the server can declare a response to be as cacheable or non cacheable. if a response is cacheable, the extra round trip to the server is avoided - the response is returned from the cache directly and our server is never even called +- this reduces response time and the load on server is reduced +- "resources" - resources are organized in a hierarchy in using the uri "uniform resource locator" +- a resource can be a "simple resource" or a "collection resource" +- resources can also have "sub resources" +- use nouns only for resources +- "resource identifiers" - should be unique +- for modelling actions, we use the http verbs +- so, unlike rpc, the only actions supported are crud - creating (POST), reading (GET), updating (PUT) and deleting (DELETE) a resource +- GET method is considered "safe" - does not change the state of the system +- GET, PUT and DELETE methods are considered "idempotent" - applying them multiple times will result in the same state change as applying them once +- GET requests are also considered cacheable by default +- the client can send the additional data using json (or xml) +- creating a rest api for a movie streaming service +- identify the resources - movies, users, reviews, actors +- map to uris - + - /users, /users/{user_id} + - /movies, /movies/{movie_id} + - /actors, /actors/{actor_id} + - /movies/{movie_id}/reviews, /movies/{movie_id}/reviews/{review_id} + +## Large Scale Systems Building Blocks + +### Load Balancers + +- if we run our application on multiple instances due to [horizontal scaling](#scalability), the client applications will have to know the ip addresses of all these instances in advance +- this results in tight coupling of clients to our systems, and makes it hard for us to make any changes +- advantages of load balancers - + - acts as a layer of abstraction between clients and our instances, so it looks like one server to the client + - distributes the load from clients among our horizontally scaled instances equally + - "autoscaling policies" - easily add / remove instances to the fleet based on requests per second, network bandwidth, etc, and all of this is hidden behind a single load balancer + - "fault tolerance" - load balancers can be configured with "health checks" to avoid sending traffic to unhealthy instances + - [rolling release](#rolling-deployment-pattern) - we can perform maintenance tasks easily by pulling down hosts one by one, and the load balancer would not direct traffic to these hosts +- types of load balancers - dns, hardware, software and global server +- "dns load balancer" - dns maps human friendly urls to ip addresses +- "dns record" is the response by "dns servers" when asked for ip addresses for a url +- can return multiple ip addresses in this record, ordered differently every time (maybe using round robin) +- the clients typically pick the first address from this list, and we achieve load balancing this way +- disadvantages + - dns servers do not perform health checks, so can return ips of faulty servers + - the dns record can be cached at client, which means they can call the faulty instance till the ttl - "time to live" expires + - exposes the ip addresses of our instances directly, thus exposing implementation details +- "hardware load balancers" and "software load balancers" address all the above problems with dns load balancers +- hardware load balancers run on hardware optimized for load balancers +- software load balancers can run on any general purpose machine +- all the communication is done through the load balancer, thus making our systems much more secure - in dns load balancing, it was happening directly once the client got the ip addresses +- they can monitor the health of our instances and only route traffic to the healthy instances +- they also allow for more advanced setup like take the instance type into account - some instances in our fleet might be more powerful than others, use more powerful techniques like current requests per second when load balancing the traffic, etc +- disadvantages + - typically, hardware and software load balancers are located close to the instances. so, if we run our load on multiple geographical locations called data centers, one group of the instances will have the load balancer located far away + - also, load balancers do not solve the "dns resolution" problem on their own - load balancers are again just an ip address, and we need to map it to a more human friendly url + +![hw and sw lb disadvantage](/assets/img/high-level-design/hw-and-sw-lb-disadvantage.svg) + +- "global server load balancer" - more intelligent than the typical dns load balancer +- it can redirect clients to the data center geographically closer to them, the location that will send a faster response time (this can be different from just using the geographical location due to number of hops), etc +- there is a load balancer deployed at each of the data center +- also, gslb can handle outages in one data center by not routing traffic to this faulty data center + +![gslb](/assets/img/high-level-design/gslb.svg) + +- open source software load balancers - haproxy, nginx +- cloud load balancers - aws elb, which has various types as well +- global server load balancer - route53 +- load balancers are also called "dispatchers" +- if using [microservices](#microservices-architecture), we can have a dispatcher for each micro service, and each microservice can be individually scaled +- below, we use load balancers both for communication from outside and internal clients + +![load balancing microservices](/assets/img/high-level-design/load-balancing-microservices.png) + +### Message Brokers + +- also called mom - "message oriented middleware" +- "synchronous communication" - both sides - client and server need to be healthy and maintain an active connection either with each other or via the load balancer - this is good when the server takes a short time to process and respond +- "message broker" - a queue data structure to store messages between senders and receivers +- message brokers helps with "asynchronous architecture" +- it entirely decouples senders from receivers - the sender does not wait for a confirmation from the receiver - it just puts the message onto the broker. this adds a lot of [fault tolerance](#fault-tolerance) - receivers can be down and still receive the events when they come back up. they also prevent messages from being lost. in synchronous systems, it can happen that the request / response is lost, and the client will never know which one it was, and it might retry, which would lead into further issues if the request is not idempotent +- e.g. the users see a success screen immediately after placing an order, while they get an email later if the order is placed successfully. this placing of an order involves a chain of services like order service, payment service, notification service, etc, and the client gets an immediate response with all this being handled behind the scenes +- message brokers are generally not exposed to outside world unlike load balancers +- it acts like a buffer when there is an increase in the load - assume we use synchronous communication - if there is a sudden spike, we will we will receive a lot of requests concurrently, which can result in our system crashing, dropping requests, etc. this is solved using asynchronous communication +- it can help with [load balancing](#load-balancing-pattern) - multiple instances can listen for an event and the message broker will send it to one of them +- it can also perform transformations on these messages, thus helping with [streaming analytics](#big-data) +- open source message brokers - rabbitmq, kafka +- cloud message brokers - sqs + +### API Gateway + +- we break our services into smaller services due to the [organization scalability](#scalability) +- the client will also need to now know about the different services - one service for fetching videos, another for fetching comments and so on +- api gateway helps with "api composition" - we compose all the different apis in all our services into one single api that the clients can interact with +- now, each service will need its own authentication and authorization. api gateway helps eliminate the duplication of auth logic - api gateway supports not only authentication but authorization as well +- we can have different apis for mobile vs desktop applications, and the client would be abstracted away from all this - [backends for frontends pattern](#backends-for-frontends-pattern) using user agent header +- api gateways can perform "ssl termination" - the traffic is encrypted between clients and api gateway, but decrypted between api gateway and servers +- api gateway can also implement "rate limiting" to prevent dos "denial of service" attacks +- without an api gateway, the client will make a call to fetch the home page, another call to fetch the video and finally another call for all the comments of this video. using "request routing", api gateway makes all the calls itself and sends the aggregated response to the client. this helps improve the performance a lot, since we are saved from these multiple requests going over the internet +- "static content and response caching" - caching to reduce response time for client +- it supports monitoring as well to not route traffic to unhealthy instances +- it can perform "protocol translation" - the api gateway exposes a rest api, while the underlying services use soap and xml, grpc + protocol buffers, etc +- considerations - api gateway can become a single point of failure - deploy multiple api gateways sitting behind a global server load balancer +- do not put business logic into api gateways +- open source api gateway - netflix zuul +- cloud api gateway - amazon api gateway + +### Note - Load Balancers vs API Gateway + +- [load balancers](#load-balancers) are only for balancing load among identical "servers" +- api gateway is the "public facing interface" that routes traffic to "services" and not "servers" +- so, a common pattern is that an api gateway routes traffic to load balancers, which can then route traffic to the individual servers +- apart from that - feature sets of both are different - + - load balancer is more around the [different routing algorithms](#load-balancing-pattern), performing health checks, etc + - api gateway is more around api composition, auth, request routing, protocol translation, throttling, caching, ssl termination, etc +- so, a load balancer might be enough for internal, individual services, while we might need an api gateway for public facing services + +![load balancer vs api gateway](/assets/img/high-level-design/load-balancer-vs-api-gateway.png) + +### CDN + +- cdn - "content delivery network" +- even with hosting on multiple data centers, there is significant latency between end user and server location +- first the 3 way handshake happens, then maybe the html is served and eventually all static assets like images are served +- this involves multiple network round trips and hops from the client to the server +- users do not wait for long for websites to load - they typically abandon it +- we can get the static content like htm, css, js, images and videos closer to our end users +- cdn is a "globally distributed network of servers" +- the servers are called "edge servers" +- the location the cdn servers are present at are called pop - "points of presence" +- page loads are faster now +- cdn also protects us against ddos attacks +- cdn also uses technologies that are more optimized, like using storage optimized for delivering static content, compressing using algorithms like gzip, minification of files, etc +- there are two strategies we can use - pull and push +- "pull strategy" - we tell cdn which content it should cache, and how often this should be "invalidated", which is configured by using a "ttl" property +- the first time, the cdn has to make the request to our servers to cache it +- however, subsequent requests are served by the edge servers of the cdn directly +- after the expiry, the cdn will send our servers a new request to check if the asset has changed, and accordingly refresh the cached asset +- disadvantages + - servers need to be available (first time or when ttl is reached) in order to serve the response + - first request after ttl is reached is slow +- "push strategy" - we publish the content to the cdn directly when the new version of the asset is available +- so, we typically do not set a ttl / set a very long ttl in this +- advantage - using the push strategy, the dependency on our servers to stay available is removed +- disadvantage - not desirable for frequently changing content, since it would require frequent invalidations and pushes from our end +- examples - cloudflare, amazon cloudfront + +## Data Storage + +### Relational Databases + +- refer [relational databases](/posts/relational-databases/) - tables, rows, columns, primary and foreign keys, etc +- advantages - + - perform flexible and complex queries using for e.g. joins + - remove data duplication by storing data efficiently + - intuitive for humans + - provides guarantees around [acid transactions](/posts/spring/#jpa) +- disadvantages - + - rigid structure enforced by schema, which requires planning ahead of time + - hard to maintain and scale due to guarantees around acid transactions - it can only be scaled vertically, not horizontally + - slower reads + +### Non Relational Databases + +- nosql databases - non relational databases +- solve drawbacks of [relational databases](#relational-databases) +- advantages - + - remove rigidity around schema - different records can have different sets of attributes + - eliminate the need for an orm - store data in a more "programming language friendly" and not "human friendly" way, by supporting structures like lists, maps, etc + - support much faster queries + - scale much more than relational databases, which is useful for big data like use cases - it can be scaled horizontally as well + - it follows base - + - basically available - never rejects the reads or writes + - safe state - can change data without user interaction - e.g. when performing reconciliation when there is deviation between replicas + - eventually consistent - we might get stale data +- disadvantages - + - does not support complex querying - operations like joins become hard + - acid transactions are not supported +- several types of non relational databases +- key value store - the value can be anything and it is opaque to the database - we cannot typically query on the value, only on the key. one use case - counters touched by multiple services. e.g. redis, amazon dynamodb +- document store - collections of documents, where documents have relatively more structure compared to a key value store - we can query on value. values are like an object. e.g. cassandra, mongodb +- graph database - an extension of a document store. helps establish relationship between records easily. use case - recommendation engine, social networks, etc. e.g. neo4j, amazon neptune +- we can also use nosql databases as a layer of cache in front of sql databases + +### Choosing the Right Database + +- redis - + - use cases - cache database calls, cache external service calls, etc + - these are key value stores +- s3 - + - used for assets like videos, images, etc + - typically backed by cdn solutions as well +- elasticsearch - + - built on top of apache lucene + - search using different fields of the entities + - supports fuzzy searching to help with typos - we can also configure the edit distance based on use case + - they are not meant to serve as primary sources of data - they should only serve searches +- influxdb - + - it is a time series database + - used for tracking application metrics like cpu utilization, throughput, etc + - it typically supports / is optimized for append only operations - it should not be used for frequently changing data + - read queries are performed in bulk - we query for the last few minutes or hours of data and perform aggregations on them +- cassandra - + - can handle massive amounts of reads and writes + - follows a no master / leaderless strategy + - the entire design of [key value store](/posts/high-level-design-case-studies/#key-value-store) comes in here + - so, horizontally scaling is as simple as adding more nodes + - these key value stores can make queries based on partition key easily - however, they cannot perform any complex searching +- hadoop - + - used for data warehousing to perform analytics + - we can dump all of the data in a large database and support querying on this data + - used for offline reporting +- mysql - + - if we have structured information and we need acid transactions + - we want strong consistency + - use cases - inventory management, payment related, etc +- mongodb - + - this is a document db + - lot of attributes, non rigid schema + - variety of queries - optimized for json like structures +- cassandra - + - this is a columnar db + - used for ever increasing data + - types of queries supported are mostly partition key based + +### Improve Quality Attributes of Databases + +- three techniques - indexing, replication, partitioning +- "indexing" - speed up retrievals by locating them in sub linear time +- without indexing, retrievals would require a full table scan +- this is a [performance](#performance) bottleneck +- underneath, it uses data structures like + - hash maps - e.g. find all people from a particular city. city can be the key, while the value can be a list of row indices containing that city + - balanced b trees - e.g. find all people in a particular age range +- composite indexes - formed using a set of columns +- while the advantage is that reads speed up, disadvantages are + - more storage space is required + - writes become slower +- "replication" - already discussed in [fault tolerance](#fault-tolerance) for compute, same logic +- disadvantage - not trivial to maintain, more common in non relational databases than in relational databases +- "partitioning / sharding" - in replication, we copy the same data in all replicas. in partitioning / sharding, we split the data in different replicas +- now, we are not limited by the storage capability of one machine +- additionally with more storage, queries can now be performed in parallel on the different partitions, thus increasing the speed +- disadvantage + - route the query to the right partition + - avoid hot partitions, etc + - more common in non relational databases than in relational databases +- partitioning can be done for compute as well - e.g. traffic from paid customers go to more powerful machines unlike traffic from free customers + +### Brewer's CAP Theorem + +- in case of a network partition, a distributed database has to chose one of consistency and availability +- e.g. below, a user updates the value to 6 in a replica +- another user queries another replica. the replica then via intercommunication realized that the value has changed, and sends the updated 6 value to the user + +![cap theorem introduction](/assets/img/high-level-design/cap-theorem-introduction.svg) + +- "network partition" - e.g. due to some network issues, one replica is isolated from others +- now, the replica that is isolated has two options - + - favoring availability - return its local value, which may be outdated + - favoring consistency - return an error, asking to try again later +- note - this only happened when there is a network partition, otherwise, all three were guaranteed +- definitions below in cap theorem are a little bit different then what we saw for e.g. [here](#important-quality-attributes) +- "consistency" - read request receives either the most recent write or an error. this helps guarantee all the clients see the same value at the same time, regardless of the database instance they communicate with +- "availability" - every request receives a non error response, which can be outdated +- "partition tolerance" - system continues to operate despite an arbitrary amount of messages being lost over the network +- so, cap theorem states that we can only have two of the three things +- so, we already saw cp and ap, what about ca? +- we can have ca if we have no replicas - only a centralized database + +### Unstructured Data + +- unstructured data - does not follow any "structure" +- e.g. audio / video files etc - they are just a blob "binary large object" +- while both [relational](#relational-databases) and [non relational](#non-relational-databases) databases allow for storing of blobs, they are meant for structured, and not unstructured data. e.g. they impose size limits etc +- some use cases of unstructured data - + - users upload files like videos and images, which we need to process (e.g. transcode, compress, etc) + - relational / non relational database snapshots - these snapshots are unstructured data + - web hosting - static content + - huge datasets used for machine learning, e.g. readings from sensors +- two solutions for unstructured data - dfs and object storage +- dfs - "distributed file system" +- features / advantages - + - internally, can have features like replication, auto healing, etc + - looks like a familiar tree like structure (files within folders) to us + - works like file system - mounting on hosts etc + - we can modify files like we typically do when working locally, e.g. append logs to log files +- disadvantage + - cannot work with web for static content directly - will require a wrapper on top + - has limits on the number of files we can store i.e. the storage space has limits +- "object / blob storage" - scalable storage, but unlike dfs has no limits on how many objects can be stored +- stored in containers called buckets +- also, object storage allows "bigger" files compared to dfs - which makes them ideal for storing database snapshots +- they expose a rest / http api unlike dfs, which can be easily referenced by our static html pages +- they support "object versioning" - for a file system, another wrapper would be needed +- files are stored in a "flat structure" - not a tree like structure like in file systems +- the object has a name and a value associated with it, which is the actual content +- typically, object storage is broken into several classes, which offer different throughput and latency +- object storage uses replication too +- disadvantage - + - files cannot be opened and modified like we can when using dfs - we need to for e.g. create and upload an entirely new version + - cannot be mounted like file systems +- we can also run object storage services on our own storage, if cloud is not an option +- e.g. openio is such a solution +- s3 (simple storage service) is aws's object storage + +## Big Data + +- datasets are either very large in size or come at a very high rate for our system to be able to process +- the output of big data processing can be visualizations, data that can be queried, predictive analysis, etc +- "batch processing" - + - we store the data on distributed file system + - we then run jobs on it based on a schedule + - every time the job runs, it can either pick up the new data that was added to the system since the last time it ran, or it can process the entire dataset from scratch + - after processing, it can write the computed view to a database +- advantages of batch processing + - easy to implement + - more efficient than processing each event individually + - e.g. we push some faulty code. if our dfs still has all the original data, we can push the fixed code and run the job on the entire dataset again + - finally, we have visibility into historic data as well +- drawbacks - not realtime +- e.g. we would like logs and metrics to be analyzed realtime so that we can identify and debug production issues quicker +- so, we use "stream processing" + - the events come on a [message broker](#message-brokers) + - so it reacts realtime, not based on a schedule + - after processing, it can write the computed view to a database +- advantage - react immediately +- disadvantage - complex analysis cannot be done - fusing data from different times is very difficult / not possible - our computations can only use recent data +- going back to the same e.g. of observability systems, we would need historic data as well in anomaly detection +- so, we can use the "lambda architecture" - balance between batch processing, and stream processing +- it has three layers +- "batch layer" - follows the batch processing architecture. it takes all the data into account and typically overwrites its old output +- "speed layer" - follows the stream processing architecture. it helps fill the gap caused by events which came in since the last event that was operated on by the batch job +- "serving layer" - joins the outputs of the batch layer and speed layer and combines them into one + +![lambda architecture](/assets/img/high-level-design/lambda-architecture.svg) + +## Cloud Computing + +- cloud is mostly based on iaas - "infrastructure as a service" +- gives us access to virtually infinite compute, storage and networking +- we only pay for what we use / what we reserve, thus saving costs +- we can improve our scalability and reliability by deploying our software to "multiple regions" and "multiple zones" +- disadvantage of cloud computing - we do not have access to the infrastructure + +## Scalability Patterns + +### Load Balancing Pattern + +- synchronous communication - can be implemented using [load balancers](#load-balancers) +- asynchronous communication - can also be implemented via [message brokers](#message-brokers) +- note - load balancing != load balancer, so do not get confused +- note - message brokers are not exposed outside, so they cannot be used via client directly unlike [load balancers](#load-balancers) +- when using cloud, both load balancers and message brokers are built with redundancy and replication in mind to increase [fault tolerance](#fault-tolerance) +- there are various "routing algorithms" used for load balancing. we discuss three of them below - round robbin, sticky session and least connections +- "round robbin" + - the simplest / most common / default algorithm + - routes each request sequentially to the "next" worker instance + - disadvantage - only works when application is stateless - each request by a client can be handled in isolation by any one of the target servers. it will not work when an "active session" is maintained between a client and a server +- "sticky session / session affinity" - + - use cases - + - auth information of a client is stored in the session so that the client does not have to reauthenticate repeatedly + - client is uploading a very large file in parts. the different parts need to go to the same server for this to work + - requests from the same client are always sent to the same server + - this can be achieved using a cookie / by inspecting client's ip address + - disadvantage - this only works for smaller sessions - otherwise, the same server might end up with too many longstanding connections +- "least connections" - + - route the request to the server with least number of open connections + - so, it solves the problem we saw with sticky sessions + - use case - like sql, ldap, etc +- "auto scaling + load balancing" - most instances run a background process called "agent". it collects metrics around cpu consumption, network traffic, memory consumption, etc. based on these metrics, we can automatically "scale in" (decrease) / "scale out" (increase) the number of our instances. we can tie this to [load balancer](#load-balancers) as well, thus the load balancer would always be aware of the available ip addresses + +### Pipes and Filters Pattern + +- data flows from the "source" to "sinks" +- it encounters multiple "filters" along the way, which does only one thing, and is unaware of one another +- source examples - service that receives requests from users, readings from sensors, etc +- sink examples - databases, distributed file systems +- the pipes in between are typically message brokers + +![pipes and filters](/assets/img/high-level-design/pipes-and-filters.png) + +- if we put all the processing logic in one application, it will end up being a monolith +- we saw the disadvantages of a monolith [here](#multi-tier-architecture) +- by using different filters + - the throughput will increase, as well as different filters can perform different tasks + - each filter can be individually horizontally scaled + - we can use different technology for each filter based on the use case +- till now, we saw a "sequence of filters" that run on some data +- we can also have multiple such sequence of filters all running in "parallel" +- an example of all filters needed for a video streaming platform - + - split into chunks, so that the video can be downloaded in chunks instead of downloading it all at once + - select a frame from each chunk to act as thumbnails, which helps when we try to seek + - resize each chunk to different resolutions, which helps with "adaptive streaming" i.e. decide the quality of the video based on the client's bandwidth + - in parallel to all the filters above, another sequence of filters can convert audio into captions based on nlp etc +- filters should be "stateless" +- this pattern is not ideal if we want to run all the filters as a part of a transaction - performing a distributed transaction is very difficult + +### Scatter and Gather Pattern + +- the client sends a request to the "dispatcher" +- the dispatcher sends the request to the "workers" and gathers the result +- unlike [load balancing](#load-balancing-pattern) where the request is only forwarded to one instance, the request in this case is send to all workers +- each worker is independent of the other, and thus they can all operate in parallel +- throughout this pattern, the client is unaware of all this + +![scatter gather](/assets/img/high-level-design/scatter-gather.png) + +- the workers can be + - completely different services - for add recommendations, we request multiple services and then chose the best add for the user and show it to them + - same service with access to different data - e.g. one worker processes files 1 to 100, a second worker processes files 101 to 200 and so on. i think this is what is used in databases with sharding +- if one of the workers do not respond, we can aggregate the partial results from the other remaining workers +- we can also use a message broker in between the dispatcher and workers for decoupling. if it is not possible to return the result instantaneously, the dispatcher can instead send an id which the client can monitor + +### Execution Orchestrator Pattern + +- imagine we break a monolith into [microservices](#microservices-architecture) +- an extra "orchestration service" is used, which does not perform any business logic itself +- it performs complex flows by calling different services in the right order +- this is in a way like [scatter and gather](#scatter-and-gather-pattern), but here we have a sequence of operations - not one operation sent down to all the workers. again, unlike in scatter and gather where all operations could be performed in parallel, we may or may not be able do that here, as result from one service might be used as a request to another +- the orchestration service maintains all the intermediate state till it is able to construct and return the final result + - what if the orchestration service fails midway / or after performing the entire flow but just before sending the response? + - the orchestration service can store all its intermediate state inside a db, so that if the client re initiates the request, another orchestration service can pick up from where the faulty orchestration service left +- the orchestration service also has logic around handling exceptions and retries - e.g. [saga pattern](#saga-pattern) +- for high availability, we can also deploy the orchestration service in a horizontally scaled manner and have it sit behind a load balancer +- orchestration service != [api gateway](#api-gateway) - api gateways are meant to be dumb, while the orchestration service fully understands the context of a request +- best practice - the orchestration service is not meant for business logic - only for orchestration. the business logic is performed only by the various services sitting behind it + +![execution orchestrator pattern](/assets/img/high-level-design/execution-orchestrator-pattern.png) + +### Choreography Pattern + +- drawback of [execution orchestrator pattern](#execution-orchestrator-pattern) - changes in any of the services involves a change in the orchestration service +- this is called a "distributed monolith" - the orchestration service in the above example has become a distributed monolith because for e.g. multiple teams working on their own services might have to now change the orchestration service code together, again impacting [organization scalability](#scalability) +- instead, the orchestration service is replaced by a message broker +- a message is put onto the message broker, and the services can subscribe to this message as needed +- they can then also put more messages into the queue as a result of which other services can subscribe to them again +- this continues till the flow is complete +- since all this communication is asynchronous, all services are decoupled from each other +- even if one of the services is down, the flow can still continue and the relevant parts will still complete +- disadvantage - tracing the entire flow can become very difficult in case of issues, since we do not have a central orchestrator which was aware of all the steps during the entire flow + +![choreography pattern](/assets/img/high-level-design/choreography-pattern.png) + +## Patterns for Data Intensive Applications + +### Map Reduce Pattern + +- simplified processing pattern +- by google around 2004 +- we need to distribute the processing and huge datasets into several machines +- issues include - + - distributing the data + - parallelizing the workload + - scheduling execution on the different workers + - aggregating results + - recovering from failures +- solution - we model all problems using the map reduce model + - we pass the input data through map function, which outputs key value pairs + - then, the reducer receives all the values for a key, on which it can then perform some computation +- underneath, the map reduce framework takes care of all the issues we listed above - refer [this](/posts/hadoop/#theory) for the entire working of map reduce. e.g. [heartbeats mechanism](/posts/hadoop/#hadoop-2x) might be used to ensure the worker is running. if this fails, the task would be rescheduled on another worker +- if the master itself fails + - the process can be restarted from scratch again + - the master can take frequent snapshots, so when a new master is spun up, it can restore from where the faulty master left off + - a backup master can run alongside the primary master, which stays in sync +- map reduce is great for cloud because - + - we easily get access to a lot of compute and storage + - map reduce is batch processing - so we can run on demand and pay as we go, and not pay for extra compute + +### Saga Pattern + +- in [microservices](#microservices-architecture), we discussed how we should use [one database per service](#database-per-microservice) +- with one database per microservice, we lose out on the [acid transactions](/posts/spring/#jpa) +- so, saga pattern helps us manage consistency across microservices using distributed transactions +- if there is a failure in any of the microservice, a rollback is performed on the other microservices by applying an operation which has the "opposite effect" of the original operation +- saga pattern can be implemented using - + - [execution orchestration pattern](#execution-orchestrator-pattern) - the execution orchestrator decides whether to proceed with the transaction or rollback the transaction on the previous service with a "compensating operation" + - [choreography pattern](#choreography-pattern) - each service can either trigger the event for the next service if successful, or trigger the "compensating event" for the previous service if unsuccessful + +![saga pattern](/assets/img/high-level-design/saga-pattern.png) + +### Transactional Outbox Pattern + +- helps implement reliability in an event driven architecture +- e.g. a service needs to update something in its database and send a message to a message broker + - updating database and sending a message to a message broker is not an atomic operation + - so, if we for e.g. perform the database operation first, it might happen that the database is updated but the message is never sent to the message broker + - if we send the message first, the database might never be updated, but the message would have already been sent to downstream services +- extension of above - we can argue that with [at least once semantics](#message-delivery-semantics), we can always ensure that the message gets sent. issue - + - we successfully update the database and commit the transaction + - we fire the message + - our server goes down at this point - otherwise libraries of kafka etc are "intelligent" enough to resend the message if ack from broker is not received + - the message too gets dropped midway and does not reach the message broker +- to solve this, we use the "transactional outbox pattern" +- step 1 - it instead "as part of the same transaction" updates the actual data and inserts a new event ino an "outbox table". either both the update and the insertion of this new event will succeed, or both will fail, since both of these are a part of the same transaction +- step 2 - another service called "message relay service" polls this outbox table and puts any new entries in this table onto the message broker +- step 3 - it then either deletes the event or marks it as sent + +![transactional outbox pattern](/assets/img/high-level-design/transactional-outbox-pattern.png) + +- issue 1 - "duplicate events" - just before step 3, the message relay service crashes. it then comes back up and again performs steps 2 and 3. this situation is called [at least once delivery semantics](#message-delivery-semantics) +- solutions - + - the service logic is designed to be idempotent + - assume that the outbox table adds a unique id for every event, which the message relay service adds to the event it puts on the message broker as well. the consumer keeps track of the ids it has already consumed, and this way, it knows that when there is a duplicate event, it needs to discard it +- issue 2 - the database does not support transactions, e.g. non relational databases. step 1 of our solution relied on the fact that insertion into the outbox table and update to the regular tables can all be done under one transaction +- solution - instead add an outbox parameter to the object, which contains the list of events to be sent + ``` + { + "name: "...", + "outbox": [ + { ... } + ] + } + ``` +- now, the message relay service can poll all objects with this outbox parameter and after adding the messages onto the queue, it can remove the outbox parameter from these objects +- issue 3 - ensure ordering of events. e.g. user registers and then cancels, but we receive the cancel request first (which is dropped since no user is found), and then the registration is processed - which means the cancellation process was ignored altogether. so, ordering of events might be important based on use case +- for this, use a sequence id when storing events in the outbox table. this way, the message relay service will always put the messages onto the broker after sorting them using this sequence id + +### Materialized View Pattern + +- complex queries that involve different tables or maybe even different databases can be very slow - e.g. when we split our stack into microservices, the data is stored in different databases +- these complex queries also consume compute resources, thus increasing cost +- "materialized view" - a read only table is created with the data of the result +- consideration - additional storage cost +- two strategies to update - + - whenever the base tables get updated + - based on a schedule +- two ways to update - + - some databases support materialized views out of the box. most of such databases are efficient - they only take into account the modifications in the base tables, and do not recompute the entire materialized views from scratch + - we can programmatically compute this materialized view ourselves and store it in an optimized e.g. in memory database +- refer [cqrs + materialized view pattern](#cqrs-pattern) + +### CQRS Pattern + +- cqrs - "command and query responsibility segregation" +- divide service into two different services - + - "command service" - mutation of data - inserts, updates and deletes + - "query service" - reads data and returns to the caller +- these services have their own databases as well - the command database can be optimized for writes - e.g. using an sql database, while the query database can be optimized for reads - e.g. using a nosql database +- cqrs is useful when we have both frequent reads and frequent writes +- "synchronization" - to keep the command and query database in sync, we can either use a message broker, or a function as a service +- using a message broker (in red) - + - an event is published via a message broker by the command service which the query service can consume + - now, the command service could have put the event into message broker directly. but, to prevent loss of messages, we can use the [transactional outbox pattern](#transactional-outbox-pattern) +- using a "function as a service" (in green) - + - a function as a service is sitting between the command and query database + - it will only be triggered when there is a change in the command database + - once triggered, it will go and update the query database + - since it is a function as a service, it only runs when there are updates, thus saving us costs + - doubt - is this essentially the architecture for cdc tools like debezium? + +![cqrs](/assets/img/high-level-design/cqrs.png) + +- cqrs drawbacks - + - we can only guarantee "eventual consistency" between command and query database + - we have additional complexity for two different services and for the logic for synchronization between them +- cqrs + materialized view - + - e.g. when we split our stack into microservices, the data is stored in different databases + - this means complex services will have to hit different databases (via api calls to their services), which can be slow + - so, we use one query service which receives events from "multiple command services" (multiple command services is the key here), and it stores the combined materialized view for all these services at one place + - e.g. one command service for courses, one command service for reviews + - and one query service for the [materialized view](#materialized-view-pattern) that joins the data from both services for an enriched course view + +### Event Sourcing Pattern + +- typically, data in databases is the current state - modifications override the previous state with new state +- sometimes, we need all the events that led to a state - e.g. we need to show all the transactions for a user's bank account +- so, we only store events instead of the current state +- events are "immutable" - we can only "append" events, not change existing ones +- event sourcing has high performance for write intensive workload - in normal databases in case of write heavy workloads, there is a high contention due to concurrent updates for the same tables and rows. with event sourcing, each write is "append-only", which involves lesser locks +- to find the current state, we only have to apply or replay all the events +- we can also store the events in message brokers instead of storing them in databases, but querying message brokers is more difficult than querying databases +- now, replaying all events for all queries every time might not be efficient. so, we can take "snapshots" at certain periods. we still have all the history, but for deriving the current state, we only need the records since the last snapshot +- another popular pattern - cqrs + event sourcing + - the command service just puts the writes to the write events on to the message broker. it can even get rid of its own database + - the query service listens to these events and accordingly populates its e.g. in memory database with the snapshot we discussed about for faster reads + - another pattern being used here is [event streaming](#event-driven-architecture) + - remember - cqrs means eventual consistency + +![event sourcing + cqrs](/assets/img/high-level-design/event-sourcing+cqrs.png) + +## Software Extensibility Patterns + +### Sidecar and Ambassador Pattern + +- apart from performing the core functionality based on [features of the system](#features-of-the-system), a service needs to do things like collect metrics, send its log events to a distributed logging service, connect to a service registry for the most up to date ip addresses of its downstream services, etc +- all these functionalities are also "common" across all our services - so we would not want to repeat ourselves +- one solution - we implement all this as a library, which all our services use +- disadvantage - different services might be implemented using different languages. so we would need to support the library for different languages, which is a lot of overhead +- so, we instead use "sidecar pattern" +- the sidecar is "isolated" from the main process - the additional function is run as a separate process / container on the same server +- the communication between the two is also very fast, since they run on the same host +- since the two use the "same resources" like file system, cpu, memory, etc - the sidecar can report the value for these resources easily +- the sidecar can now be implemented in any language of our choice +- after making the changes related to business logic in the main application, we do not need to test the sidecar + +![sidecar pattern](/assets/img/high-level-design/sidecar-pattern.png) + +- "ambassador pattern" is a particular type of sidecar pattern +- in ambassador pattern, the ambassador acts like a proxy +- the service just sends requests to the ambassador, which then forwards these requests to the actual server, by handling things like authentication, [retries](#retry-pattern), [circuit breaker](#circuit-breaker-pattern), etc +- using the ambassador pattern also allows us to perform "distributed tracing" easily + +### Anti Corruption Adapter / Layer Pattern + +- when we migrate from an old monolith to a new set of microservices +- the new set of microservices need to temporarily interact with the old monolith till the migration is complete +- this means that code for old apis and protocols is scattered in the new microservices +- so, we deploy an "anti corruption service" in between, which performs the translation between the new microservices to the old monolith (both request and response, as needed, to and from both microservices and monolith) +- sometimes, the anti corruption layer can be "temporary" or sometimes "permanent" when we cannot get rid of some parts of the legacy system - e.g. downstream services use the legacy application for reporting and are not ready for a migration yet + +![anti corruption adapter layer pattern](/assets/img/high-level-design/anti-corruption-adapter-layer-pattern.png) + +### Backends for Frontends Pattern + +- usually, we have a separate backend in front of our microservices, to serve the frontend +- now, the frontend just has to interact with this one backend, which performs the logic of relaying the request to the right microservice +- now, assume we have to support multiple frontends like desktops vs mobiles. they tend to interact with the api differently - + - e.g. mobile screens have lesser real estate so display lesser data than desktops + - mobile devices have lesser resources (ram etc) compared to desktop + - mobile app owners might want additional features like scanning barcode, only want products available in a particular location, etc +- now, our backend service starts to become a monolith - it has to support the additional features for the desktop, mobile app and the shared features between the two +- so, we use the bff or "backends for frontends pattern" +- we use a separate backend for each frontend +- each backend now stays slim, and allows its frontend to make use full use of its feature set +- we can now scale each backend individually as well - more server side computation might be needed for mobile apps then for desktops +- how to implement the shared functionality in these backends, e.g. login and register + - use a shared library - this pattern usually does not scale well, because - + - any change in this shared library affect all the backends that use it + - there is also often a "lack of ownership" with such shared libraries + - spin up another common service called a "shared backend service" +- the "user agent" header in requests helps us tell the device a request is coming from, and by placing an api gateway in front of these backends, we can decide which backend to route the request to based on the device type + +![backends for frontends pattern](/assets/img/high-level-design/backends-for-frontends-pattern.png) + +## Reliability, Error Handling and Recovery Patterns + +### Throttling and Rate Limiting Pattern + +- e.g. one client bombards our systems with multiple requests. this leads to high cpu and memory utilization of our resources. thus, our response time increases / services become unavailable, and we would be unable to serve other clients, thus violating our sla etc +- using "throttling and rate limiting", we set a limit on the number of requests in unit time / bandwidth (amount of bytes) in unit time +- "server side throttling" - we are the service providers and would like to limit our systems from over consumption +- server side throttling use case - we can have different grades of customer - premium and so on, and we would like different limits for these different customers +- "client side throttling" - we are calling external services and would like to set limits on the number of calls made to such services +- client side throttling use case - we can throttle requests for different services at different levels, based on their quotas +- we can handle this using different strategies - + - "drop requests" - status code is 429 (too many requests) + - "slow down the service" - queue the requests in a queue and process them later + - "degrade the service" - e.g. a video streaming platform can reduce the resolution of the video + +### Retry Pattern + +- we retry the same operation in case of a failure +- we should retry only if the failure is temporary and recoverable - e.g. not a user error like unauthorized, bad request, etc +- if the request succeeds on a retry, we were able to hide the internal issues from the user successfully +- so, we need to pick the right "delay" and the right "backoff strategy" for this delay + - "fixed delay" - the delay between subsequent requests stays same - 100, 100, 100, 100 + - "incremental delay" - the delay between subsequent requests increases linearly - 100, 200, 300, 400 + - "exponential backoff" - the delay between subsequent requests increases exponentially - 100, 200, 400, 800 +- we can add "jitter" - a random delay between these delays +- e.g. for incremental delay, instead of calculating delay using i * 100, we do i * (100 + random(-15, 15)) +- reason - clients might end up retrying at the same time, thus causing the retry storm. this jitter helps prevent the retry storm +- "retry storm" - some instances of the service were unhealthy, we bombarded the remaining instances with our retry requests and made the entire service unhealthy +- apart from the backoff strategy and delay, we can also configure how many times to retry / how long we should keep retrying for +- note - the operation we retry should be idempotent - the client will not know if the request was lost or the response - and if it was the response that was lost, we cannot retry a non idempotent operation +- retry pattern can be configured in the [ambassador pattern](#sidecar-and-ambassador-pattern) or implemented via popular libraries + +### Circuit Breaker Pattern + +- we were able to recover from temporary and recoverable issues using the [retry pattern](#retry-pattern) +- retry pattern is optimistic, while circuit breaker is pessimistic +- if the errors go above a certain threshold, the circuit breaker does not even allow the requests to go through +- this way, we save on resources and time from calling a service which might anyway be down +- after being in the open state for some time, the circuit breaker automatically goes into the "half open state" +- it allows a small percentage of requests to go through +- if they succeed, the circuit goes back into closed state + +![circuit breaker pattern](/assets/img/high-level-design/circuit-breaker-pattern.png) + +- we can either drop the requests, or save it in one place to be retried later. this approach is called "log and replay". it might be needed for requests that are not just simple get requests, but require calling a mutation endpoint on another service +- we should configure different circuit breakers for different services +- we can also replace the half open state with "asynchronous pings / health checks" to the service - once the health checks start passing, we can mark the circuit as closed. we get rid of the half open state in this technique +- this too can be configured in the [ambassador pattern](#sidecar-and-ambassador-pattern) or implemented via popular libraries + +### DLQ (Dead Letter Queue) Pattern + +- helps handle errors involving [message brokers](#message-brokers) + - producer error - the producer cannot put the message on the broker because the queue is already full, the message is too big, etc + - consumer error - the consumer cannot process the message due to some data discrepancy +- so, we introduce another special topic or queue called the "dead letter queue" +- two strategies - + - so, both the producer and consumer on encountering an error move the message to the dead letter queue themselves + - the message broker itself is configured to move messages to the dead letter queue + - producer errors can be identified easily by the message broker - queue is full, message is too big, etc + - for consumer errors, if the message would not be consumed for a long time, message brokers can conclude that the messages are not getting acknowledged, and it can move these messages to the dlq +- best practices - + - add the reason e.g. stacktrace to the message headers before moving the message to the dlq + - use aggressive monitoring and alerting for messages in the dlq + +## Deployment and Production Testing Patterns + +### Rolling Deployment Pattern + +- when deploying a newer version of our application to servers, we bring down the servers during a "maintenance window" +- sometimes, we might not be able to bring our servers down entirely, e.g. during an emergency release, which is not during the maintenance window +- steps - + - stop the load balancer from forwarding traffic to one server + - upgrade the application on this one server + - run some tests on this new version if needed + - allow the load balancer to send traffic to it again +- keep redoing this one after another till this is done for all the servers + +![rolling deployment pattern](/assets/img/high-level-design/rolling-deployment-pattern.png) + +- this way, our application is always up +- when releasing, if we notice any issues / errors, we can follow the same set of steps to perform a rollback +- advantage - + - no extra cost for hardware + - most widely used due to its simplicity +- drawbacks - + - it can result in "cascading failures" e.g. suppose the new servers start failing. now all the traffic will go to the old servers, which can inturn start failing as well due to "overload". now, this brings down our entire service + - if the new version is "incompatible" with the old version, there might be issues - e.g. db schema changes + +### Blue Green Deployment Pattern + +- "blue environment" - we keep the old version of our servers running as is throughout the release +- "green environment" - we deploy the new version of our servers to this environment +- we carry out tests on the green environment +- if the tests etc run fine, we shift the load balancer to point to the green environment +- if we see a failure at any point, we can shift the load balancer back to point to the blue environment +- finally, we can terminate the blue environment once we are done + +![blue green deployment pattern](/assets/img/high-level-design/blue-green-deployment-pattern.png) + +- advantages - both disadvantages of [rolling deployments](#rolling-deployment-pattern) - + - both environments have an equal number of servers, so the issue of cascading failures is prevented + - we can only run a single version of our software at a given moment, so the issue of incompatibility is prevented +- disadvantage - both advantages of [rolling deployment](#rolling-deployment-pattern) + - extra cost for hardware + - complicated to implement + +### Canary Testing and A/B Testing Deployment Pattern + +- "canary release" - borrows patterns from both [rolling deployment](#rolling-deployment-pattern) and [blue green deployment](#blue-green-deployment-pattern) +- we deploy the new version of the application to a small set of "existing" servers (instead of one by one to all existing servers like in rolling deployment) +- it is considered safer than rest of the deployment patterns because - + - for canary release, the performance etc is monitored for much longer than in other patterns + - only beta users get the traffic to the new servers - this can be done by the load balancer for e.g. by inspecting the origin header +- "ab testing / deployment" - ab testing works just like canary release +- however, in this case, we deploy with the motive of rolling back to the old version +- use case - we test the new feature and how it performs, but are not fully ready with them yet to go into full scale production +- sometimes, the users who are a part of this ab testing do not even know about it - they might be seeing new features and can be asked for feedback about it. this helps with genuine feedback + +![canary testing](/assets/img/high-level-design/canary-testing.png) + +### Chaos Engineering + +- "chaos engineering" deliberately injects random failures into our production systems +- it helps us find single points of failure, performance bottlenecks, etc +- advantage - + - system becomes more reliable with time + - development team becomes more proficient in monitoring and debugging production issues +- the types of failures we can inject - terminate random services, inject random latencies, etc +- e.g. of a tool - chaos monkey by netflix + +## Multi Tier Architecture + +- organize system into multiple "physical" and "logical" tiers +- "logical separation" - different tiers handle different concerns +- "physical separation" - allows each tier to be separately developed, scaled and upgraded +- multi tier != multi layer architecture +- multi layer is when the same application is broken into different modules +- however, it will still run as a single unit during runtime and will be a single tier architecture +- in a multi tier architecture, the different tiers run on different machines altogether +- restriction - communication cannot be skipped between tiers. this helps keep the tiers loosely coupled + +![multi tier constraint](/assets/img/high-level-design/multi-tier-constraint.svg) + +- most common architecture - "three tier architecture" +- tier 1 - "presentation tier" - the ui on web browser, mobile app, desktop gui, etc +- it takes input from the users / shows them the relevant output +- it does not contain business logic +- tier 2 - "application tier", "logic tier", "business tier" +- it has all all the business logic based on the [features of the system](#features-of-the-system) +- tier 3 - "data tier" - responsible for storage and persistence +- it can contain files and or database +- this three tier architecture fits most use cases +- it allows for easy horizontal scaling +- tier 1 does not need any scaling since it runs on user devices +- tier 2 can run behind a load balancer and be scaled easily if it is stateless +- tier 3 can also be scaled well using techniques like partitioning and replication discussed [here](#improve-quality-attributes-of-databases) +- drawback of three tier architecture - tier 2 becomes a monolith +- monolith drawbacks + - high resource (cpu and memory) consumption + - harder to maintain codebase + - a fault can result in the entire system being down +- so, three tier architecture is good for companies who have a small codebase +- "two tier architecture" + - tier 1 - has both ui and business logic + - tier 2 - data tier +- "four tier architecture" - a new tier in the three tier architecture is introduced between tier 1 and tier 2 for [api gateway](#api-gateway), to address caching, security, etc + +## Microservices Architecture + +- recall [monolith drawbacks](#multi-tier-architecture) - high resource consumption, hard maintainability, lack of fault tolerance. microservices removes all these drawbacks - + - "independently deployable" + - each service can be easily scaled horizontally + - unlike monoliths which would relatively be much more resource intensive, microservices are much more efficient to scale and maintain + - we can make the right choice for tech stack for each microservice based on use case + - "loosely coupled" - helps with [organization scalability](#scalability) by breaking down codebase. now, a small team is responsible for this codebase + - helps with [fault tolerance](#fault-tolerance), since faults are now scoped to a smaller component +- disadvantage - + - overhead increases around testing, debugging issues, etc + - latency increases - more so if we do not ensure loose coupling when [decomposing the service](#migration-to-microservices) + - most important - distributed transaction management is much harder when compared to using a single database + +## Migration to Microservices + +- e.g. assume we have a [three tier architecture](#multi-tier-architecture) for our e commerce application, and would like to split the second tier into [microservices](#microservices-architecture) +- 3 principles to follow when creating microservices - + - "cohesive" - elements that are tightly coupled to each other should stay together inside the same microservice, so that each microservice can be developed and maintained independently + - srp or "single responsibility principle" - a microservice should only do one thing. this removes "ambiguity" around which microservice should own what piece of functionality + - "loosely coupled" - there should be minimum communication required between different microservices, and a microservice should be able to do its task independently +- size of a microservice does not matter, it is the 3 principles above that should influence decisions +- popular decomposition techniques - + - "business capabilities" - identify what provides value to business. take stakeholders pov + - "domain / subdomain" - also called "domain driven design" - instead of looking at it from a business side, we take the developers pov in this. types of domains / subdomains are - + - "core" - key differentiator / features of system + - "supporting" - integral in delivering the core capabilities, but not a differentiator - e.g. shipping + - "generic" - not specific to any business - can even be bought off the shelf - e.g. payments +- "incremental and continuous" approach should be used - + - identify the parts which will benefit the most from this migration + - parts requiring frequent changes - most important + - parts that have scalability issues +- "strangler fig pattern" - + - we keep a "strangler facade", which can be implemented using an api gateway, that sits between clients and our backend systems + - now, the api gateway initially routes requests to the monolith + - when the microservice is ready, the api gateway is switched to route requests to the microservice instead + - we can also use [canary testing / ab testing pattern](#canary-testing-and-ab-testing-deployment-pattern) here to direct a part of the traffic to the new decomposed microservices and slowly increase this percentage + - finally, the components of the microservice are removed from the monolith +- because of our incremental and continuous approach, the monolith keeps getting smaller and smaller +- original monolith should have a good "test coverage", to ensure this split does not break anything + +![strangler fig pattern](/assets/img/high-level-design/strangler-fig-pattern.png) + +## Microservices Best Patterns + +### Database Per Microservice + +- if we use the same database across different services, it results in "tight coupling" - recall that one of the principles of microservices was loose coupling +- e.g. if the schema changes due to one microservice, this change needs to be propagated to other microservices that use the same database as well +- if we use a database per microservice, each microservice owns its data and does not expose it to any other service +- the database of another microservice cannot be accessed directly - they have to go through the api of the owning microservice +- advantage - we can chose the database optimized for the workload of the microservice +- downsides - + - "added latency" - sending an additional request to the microservice and parsing the response is slower than accessing the data directly. to prevent the overhead of communication, we can cache the response of the responding microservice in the requestor microservice. however, this caching makes our system "eventually consistent" from "strictly consistent" + - cannot perform joins as easily now, since data is spilt across databases - solved by [cqrs](#cqrs-pattern) + - we lose out on acid transactions - performing a distributed transaction is very hard - solved by [saga](#saga-pattern) + - "data duplication" - data is now duplicated across microservices - e.g. product information might be duplicated in orders service + +### DRY Principle + +- dry - don't repeat yourself - we should not repeat ourselves +- this way, we only need to change the logic in one place +- by this logic, we might want to package the repeated logic of microservices into a shared library +- but, this is not a good practice - dry does not hold for microservices +- sharing a library introduces "tight coupling" - recall that one of the principles of microservices was loose coupling +- because for e.g. if a team makes changes to the shared library's apis, these changes need to be communicated to the other teams as well +- another drawback - "dependency hell" + - e.g. a microservice uses v1 of a library directly + - its shared library uses a different version (v2) of the same library + - now, the microservice needs to upgrade the library to v2 because of the shared library, retest the changes, etc +- solutions - + - we can increase the boundary of some microservice to include this shared logic, and other microservices call this microservice for the same + - we can spin up a new microservices containing that shared logic + - we can use the [sidecar or ambassador pattern](#sidecar-and-ambassador-pattern) as well for e.g. for observability +- note - shared libraries is a good pattern for sharing data models - request and response dto +- for this, we have techniques like code generation tools that can generate implementations for all languages based on an "interface definition" + +### Structured Autonomy + +- myth - teams can chose their own tech stack, databases, tools, etc +- doing things differently in different microservices around building, testing, maintaining codebase, etc introduces a lot of overhead +- autonomous is allowed but under certain boundaries, hence the term "structured autonomy" +- tier 1 - "fully restrictive" - should be uniform across the whole firm - e.g. monitoring and alerting, ci / cd, etc +- tier 2 - "autonomy within boundaries" - database technologies +- tier 3 - "complete autonomy" - e.g. release process + +### Microfrontends + +- we can split the monolithic frontend just like we [split microservices](#microservices-architecture) - based on domain / subdomain or based on business capabilities +- each microfrontend is an spa +- all these microfrontends are assembled inside a "runtime container" +- the runtime container can also handle things like authentication / authorization +- now, each microfrontend has its own ci cd and can be released independently +- best practices - + - microfrontends should be loaded at runtime, and not as compile time dependencies, otherwise the release schedule etc would still be tied to each other + - sharing state should not be done - it is equivalent to [sharing a database in microservice](#database-per-microservice). we should instead use custom events, pass callbacks, use address bar, etc + +## Event Driven Architecture + +- three actors are involved - producer, consumer and event +- use event driven architecture when we can classify actions as "fire and forget" / "asynchronous" +- events are immutable +- events can be stored indefinitely in our system (unlike requests in synchronous communication) +- unlike in the "request response model", where the sender needs to be aware of receiver's api, data models, url, etc. in event driven architecture, the publisher does not care and is not even aware of its consumers. this helps achieve "decoupling", [one of the principles in designing microservices](#migration-to-microservices) +- refer [message brokers](#message-brokers) for more points, advantages and examples of this approach +- 2 event delivery patterns are supported - event streaming and publish / subscribe +- "event streaming" + - the message broker acts like a permanent storage + - the consumer can view any number of past events based on use case + - optionally, the message broker can remove the events from storage after a period of time +- "publish / subscribe" + - the message broker acts like a temporary storage + - only new events from the point the consumer joins are visible +- allows for implementing patterns like [event sourcing](#event-sourcing-pattern), [cqrs](#cqrs-pattern), [saga](#saga-pattern) + +## Message Delivery Semantics + +- failures can happen during multiple stages - (draw quickly in interview using arrows) + - the producer sending the message to the broker fails + - the producer sending the message succeeds but the acknowledgement from the broker fails + - the message broker sending the message to the receiver fails + - the receiver receiving the message succeeds but the processing fails + - the receiver processing succeeds but the acknowledgement to the broker fails +- this is what the "message delivery semantics" help addressing +- "at most once delivery" - + - the producer does not wait for acknowledgement from broker - so, if the message is lost from producer to broker, we loose the event + - the consumer sends the acknowledgement immediately to the broker before starting its processing - so, if the consumer crashes after receiving the event, we loose the event + - use case of at most once delivery - when we are fine with data loss + - we can extrapolate lost events - e.g. location updates in a ride sharing service + - advantage - at most once delivery has the least latency and cost +- "at least once delivery semantics" - + - the producer will resend the event if the acknowledgement is not received - so, it can result in duplicate events if the message is received but the acknowledgement is lost + - consumer sends the acknowledgement to the broker only after successfully processing the event - so, if the consumer crashes after processing the event and before the acknowledgement, it can result in duplicate events + - use of at least once delivery - data loss is not acceptable + - e.g. reviews can be overridden if received multiple times + - disadvantage - more latency, e.g. broker and producer need to wait for acknowledgements etc +- "exactly once delivery" - + - very difficult to achieve + - we generate a unique id / the message broker does this for us automatically + - then, the message broker checks if it has already received this id in the past by checking its log + - the consumer needs to check in its database if the event with this id has already been processed, and accordingly handle the event + - understand that the consumer can still receive the message multiple times like in "at least once delivery". however, our consumer code logic is smart and if it sees a duplicate, it simply ignores it and sends an acknowledgement, thus avoiding processing the event multiple times + - so, my understanding - exactly once from producer to message broker might be guaranteed by message broker, but message broker to consumer needs to be guaranteed by us? + - e.g. processing of payments need to happen exactly once + - note - kafka guarantees exactly once when transferring data between kafka topics +- so, my final understanding - + - for ensuring that the message reaches the broker from the producer, use [transactional outbox pattern](#transactional-outbox-pattern) + - for ensuring that the message reaches the consumer from the broker, use at least once delivery semantics + - to ensure exactly once, maintain the processed ids of events in the consumer database + +## Testing + +- unit test - + - test a class / method / module in isolation + - advantage - cheap to maintain, fast to execute + - we should have a lot of unit tests + - disadvantage - give the least confidence about overall system +- integration test - + - verify the different systems we integrate with, e.g. databases, message brokers, etc + - disadvantage - run slower + - we should have fewer integration tests + - give more confidence about our system +- functional / end to end test - + - run on the entire system + - works from an end user perspective - so each test should test the entire user journey + - very slow to run + - we should have very few end to end tests + +![testing pyramid](/assets/img/high-level-design/testing-pyramid.png) + +- in microservices, for integration tests, we can use "lightweight mocks" for our upstream services +- disadvantage - mocks will not help us identify changes to the api of the actual upstream services +- so, we can use "contract tests" alongside the integration tests +- the idea is that the downstream service saves the results of its integration tests (the requests and responses it expects) in a contract file +- these tests are then run on the actual upstream service - the requests are replayed, and the responses are asserted using the expected response of the downstream service +- contract testing can be used for asynchronous communication as well - the downstream service tells the message it expects, and the upstream service asserts that the message is triggered when the appropriate functionality is called +- so, contract tests are basically a great addition / alternative to integration tests by themselves in microservices +- e.g. spring cloud contract +- if our company cannot afford functional / end to end tests, we can directly test in production + - using [blue green deployment](#blue-green-deployment-pattern), we can test in the blue environment before we switch traffic of the load balancer from blue environment to green environment + - [canary testing](#canary-testing-and-ab-testing-deployment-pattern) + +## Network Protocols + +- "application layer protocol" - two methods are there - + - "client server protocol" - e.g. http, ftp, smtp, websockets + - everything in client server protocol (including websockets) uses tcp + - http - follows a request response model. the client sends a request, while the server returns a response + - websockets - + - client and server have a bidirectional full duplex communication + - note - websockets are not the same as peer to peer - clients can talk to server, but clients cannot talk with each other + - it is an alternative to inefficient continuous polling using the request response model + - "peer to peer protocol" - e.g. web rtc (realtime communication) + - all can talk with each other - even clients can talk to each other + - this makes it fast, since messages need not be "relayed" via the server + - web rtc uses udp, which also makes it fast +- "transport / network layer" - + - tcp - + - transport control protocol + - a single (virtual) connection is maintained + - on this connection, all packets are sent one by one + - maintains an ordering of packets + - receiver sends acknowledgements for every packet + - udp - + - user datagram protocol + - no connection as such is maintained + - packets can be sent in parallel + - no concept of ordering + - this makes it less reliable than tcp + - but, this also makes it faster than tcp + - use case - live streaming - if we miss some bits of a live video call, we will not rewind back to listen what we missed + +## Caching + +- store frequently accessed data in fast memory rather than accessing it every time from slow memory +- it helps reduce latency +- important - it also helps achieve "fault tolerance" +- there are different places where data can be cached - client side (on browser), cdn, api gateway / load balancer and application caching at server side (the focus of this section) +- this application cache (e.g. redis) sits between our server and database +- distributed caching - imagine we had only one cache server - it would become a single point of failure. so, we use [consistent hashing technique](/posts/high-level-design-case-studies/#consistent-hashing---scalability) to help scale the cache server easily - now, based on the key that our application server uses, the request would be directed to the right underlying cache server automatically +- the 5 strategies have been discussed below +- vvimp - all strategies below can be explained nicely if using sequence diagrams + +### Cache Aside Strategy + +- if cache hit, return +- if cache miss - + - application to cache - miss + - application to db to fetch data + - application to cache to populate cache + - application returns response to client +- the application continues to work even if the cache goes down - it falls back to database +- our current strategy does not interact with the cache for db writes, only reads. this results in following problems - + - for new data, there will always be a cache miss first + - inconsistency - we do not invalidate cache for updates, so updates to our data will not be reflected in the cache +- note - here, our application server has the logic for interaction with cache - so, we can also modify the data being stored in cache based on our needs to optimize it + +### Read Through Strategy + +- same as [cache aside strategy](#cache-aside-strategy) +- however, now the cache interacts with the database, and we do not get a chance to modify the data being stored in the cache i.e. the data inside cache would be the same as the data inside database +- how cache miss works - application will never know if it was actually a cache miss or a hit - + - application to cache - miss + - cache to db to fetch data + - cache populates itself + - cache returns response to application + - application returns response to client + +### Write Around Strategy + +- when writing data to the database - invalidate the cache for the key +- the application removes the key from cache / marks the dirty flag as true for this document +- it is used alongside [read through strategy](#read-through-strategy) or [cache aside strategy](#cache-aside-strategy) +- it basically solves the inconsistency problem we had there + +### Write Through Strategy + +- first write into the cache, and then write the same thing into the database +- "2 phase commit" - we need to ensure that both the operations are performed inside a single transaction - either both pass or both fail +- this too is used alongside [read through strategy](#read-through-strategy) or [cache aside strategy](#cache-aside-strategy) +- advantage over [write around strategy](#write-around-strategy) - fetches for new data would not result in a cache miss - write around only solved the inconsistency problem, not this problem +- drawback - our system is now less fault tolerant - if either db or cache goes down, our application will go down + +### Write Back (or Behind) Strategy + +- unlike [write through strategy](#write-through-strategy) where we synchronously write into the database for a successful write, we asynchronously put the write into a queue after updating the cache in this case +- the data gets written into the database from the queue into the database eventually +- advantage - if our system is write heavy, it helps buffer writes into the database +- it also adds a lot of fault tolerance to our system - we no longer depend on the availability of database +- one failure scenario and its solution - + - a write operation is performed - write is performed on the cache and is put onto the queue + - the db is down for 5 hrs / the db is already performing writes which will take another 5 hrs to complete - so the message just sits in the queue + - the cache ttl is 3 hrs - so after 3 hrs, it tries to fetch the data from the database again + - now, since the write has not been processed by the database yet, it will not return this record to the cache, and our system will think that the data does nt exist in the first place + - solution - make the ttl of cache higher + +## Transaction + +- database transactions should be "acid" compliant + - "atomicity" - either all operations are completed successfully or they are all rolled back + - "consistency" - database should go from one consistent state to another. e.g. - + - some operation should not lead to a state where for e.g. the payer's balance has reduced but receiver's balance has not increased + - operations should not violate "integrity constraints". recall - key, domain, entity, referential + - "isolated" - concurrent transactions do not interfere with each other - one transaction will not see the "intermediate state" of another transaction + - "durable" - results are persisted to disk so that they can withstand system failure +- "commit" - make operations of the transaction complete +- "rollback" - revert all changes caused due to a transaction +- "save point" - allows us to rollback parts of transactions +- when executing a transaction, "database locks" are used to lock either tables or rows depending on the database implementation +- so, transactions should be small, since they consume a lot of locks +- when something is locked, other operations will wait on this lock for it to be released +- these concepts work when transactions are local to a particular database. for distributed systems, we can use - + - [2 phase commit](#2-phase-commit) - popular + - [3 phase commit](#3-phase-commit) - not much used due to complexity + - [saga pattern](#saga-pattern) - popular +- both 2 phase and 3 phase commit are said to be "synchronous", while saga pattern is "asynchronous" - because the locks are not held in saga pattern +- typically, saga pattern is used for long transactions, when it is not feasible to keep the locks for such long periods and block all other operations + +## 2 Phase Commit + +- there are two phases - + - voting / prepare phase + - decision / commit / abort phase +- we have a "transaction coordinator" +- all the microservices participating in this flow are called "participants" +- note - before performing any operation - both actors - transaction coordinator and participants write the operation to their local file - i think this is like "write ahead log". before performing any request / any acknowledgements, this file is updated first +- this way, if any of them go down, they can read from this file when they come back up +- voting / prepare phase - all the services are notified about the update to perform. at this point, the services obtain relevant locks for this update and respond with an ok +- if for any reason this operation cannot be performed - e.g. "order service" is the transaction coordinator, but the participant "inventory service" responds that there is not enough stock - then the service responds with a not ok +- based on the response from participants from earlier phase, the transaction coordinator asks all participants to commit / abort the transaction +- disadvantage of 2 phase commit - coordinator service is the single point of failure +- if for some reason the transaction coordinator goes down after the participants have obtained locks, the other transactions performed on the participants would be stalled because of this lock. the lock would be held till the transaction coordinator comes back up and responds + +![two phase commit](/assets/img/high-level-design/two-phase-commit.png) + +## 3 Phase Commit + +- same as [2 phase commit](#2-phase-commit), except that the commit phase is broken into two parts - + - pre commit phase + - commit phase +- during the pre commit phase - the transaction coordinator only sends the decision of commit or abort - this operation is not performed +- the actual commit / abort is only performed the next phase - the commit phase +- now in this pattern, unlike in 2 phase, there is intercommunication between the participants +- this way, if there is a failure at either the pre commit or the commit phase, the participants can make decisions - e.g. if any of the participants had received the commit message from the coordinator, it means that the rest of the participants can also kick off the commit phase + +## Database Indexing + +- data pages - + - internally, data is not stored as tables - that is just a representation + - it creates data pages - generally 8kb i.e. 8192 bytes in size + - it has three parts - + - header - 96 bytes - metadata like page number, free space, checksum, etc + - data records - 8192-(96+36) = 8060 bytes - holds the actual data records + - offset - 36 bytes - using an array, each index stores a pointer to the corresponding data record in the data records section described above + - e.g. if a row is 64 bytes, one data page can store 8060/64 = 125 table rows + - so for storing one table, the underlying dbms will manage multiple data pages +- data blocks - + - data pages ultimately get written to data blocks + - a data block is a section in the actual underlying physical memory that can be read from / written to in one i/o operation + - the dbms does not have control over the actual data block, only data page + - a data block can hold one or more data pages + - so, the dbms maintains a mapping of what data page is stored inside what data block +- indexing - it is used to increase the performance of database queries. without indexing, the database would have to - + - load all the data blocks one by one + - go through all the data pages in this block one by one + - go through all the data records this page one by one +- b+ trees - + - databases instead use b+ tree to help achieve logN time, instead of the n described above for crud operations + - b trees vs b+ trees - in b+ trees, the nodes at the leaf node level also maintain links to each other, unlike in b trees + - m order tree or m ary tree means means a node can have m - 1 keys and m pointers + - this tree maintains the sorted property + - the tree is always height balanced + - the actual values are always in leaf nodes + - the values in all other intermediary nodes just help with traversing the tree / reaching the leaf nodes quickly + - right is greater than or equal to, left is strictly lesser than + - notice how the leaf node level is like a sorted array + - the key is the value of the node, which helps us with efficient traversal + - alongside this, an additional pointer is stored in every (mainly leaf) node as well, which points to the actual data page + - now, using the data page to data block mapping, we can fetch the right data block + +![b+ tree](/assets/img/high-level-design/b+-tree.png) + +- types of indexing present in rdbms - clustered indexing and non clustered indexing +- clustered indexing - + - what order the original b+ tree is constructed in is determined by the column we use for clustered indexing + - this is why only one clustered index is allowed - because it affects how the original b+ tree is constructed + - the records in the "data records" section of data page may be jumbled - they are ordered according to insertion time + - however, we want them to be ordered based on our indexed column + - so, we use the offset field - recall that offset is an array + - assume our id insertion order is 1 4 5 2 + - the offset would look like this - (pointer to 1, pointer to 2, pointer to 4, pointer to 5) = (0, 3, 1, 2) + - if we do not specify anything - the primary key is used for clustered index +- non clustered indexing - + - we have many other keys - secondary index, composite index, etc - they all use non clustered indexing under the hood + - we can have multiple non clustered indices unlike clustered index + - each non clustered index will use a new b+ tree + - so, while clustered indexing determines how the original b+ tree is constructed, non clustered indexing determines how this additional b+ tree is constructed + - the leaf nodes of this new b+ tree contains pointers to the actual data pages + +## Concurrency Control + +- "critical section" - accessing a shared resource +- e.g. multiple users try to book the same seat, which is seen as free by all of them - and they all try to confirm the same seat +- techniques like using `synchronized` work only for contention among multiple threads of the same process +- so, we need to use "distributed concurrency control" for different processes on potentially different machines +- we have two types of distributed concurrency control - "optimistic concurrency control" and "pessimistic concurrency control" +- "shared locks" - + - shared locks are used for reads + - assume one transaction puts a shared lock on some row + - another transaction can also come in and put a shared lock on this row + - however, another transaction cannot come in and put an exclusive lock on this row - it would have to wait till all the shared locks are removed from this row +- "exclusive locks" - + - exclusive locks are used for writes + - assume one transaction puts a exclusive lock on some row + - another transaction cannot come in - neither with shared nor exclusive lock +- "dirty read problem" - + - both transaction a and transaction b start + - transaction a updates the value of a row to 5 + - transaction b reads this value as 5 + - however, due to some error, transaction a has to rollback its changes back to original value + - so, transaction b reads intermediate, uncommitted data of transaction a +- "non repeatable read" - + - transaction a reads the value of balance as 100 + - transaction b comes in, updates the value to 110 and commits + - when transaction a tries reading the value of the row again, it reads it as 110 + - so, transaction a read different values for the same row during different parts of its transaction +- "phantom read" - + - transaction a sees 500 rows in the database + - transaction b comes in and commits 5 new rows + - transaction a now sees 505 rows in the database + - so, transaction a basically saw different number of rows in the database during different points in the transaction +- isolation level - recall isolation of [acid](#transaction) + +| isolation level | dirty read
possible | non repeatable read
possible | phantom read
possible | +|------------------|--------------------------|-----------------------------------|----------------------------| +| read uncommitted | yes | yes | yes | +| read committed | no | yes | yes | +| repeatable read | no | no | yes | +| serializable | no | no | no | + +- "read uncommitted" - + - no locks are used + - only use when system only involves reads +- "read committed" - + - shared lock is acquired for read but released as soon as read is over + - this explains why we can see committed values by other transactions when we try reading twice + - exclusive lock is acquired for write and kept till the end of the transaction +- "repeatable read" - + - shared lock is acquired for read and kept till the end of the transaction + - exclusive lock is acquired for write and kept till the end of the transaction +- "serializable" - + - works just like repeatable read + - additionally, it puts a "range lock" on the rows that it touches +- typically, we can set the transaction isolation level like so - + ```sql + set transaction isolation level repeatable read; + begin_transaction; + ... + commit transaction; + end_transaction; + ``` +- "optimistic concurrency control" - + - uses isolation level of read committed + - solves concurrency problem using "versions" + - in case of the non repeatable read, transaction a would know that the version has changed (refer example of non repeatable read above) + - advantage - allows much higher levels of concurrency as compared to pessimistic concurrency control + - disadvantage - if we have too many concurrent writes, we would fail at the last step for all of them, thus wasting too many resources +- "pessimistic concurrency control" - + - uses isolation level of repeatable read / serializable + - can have much more deadlock scenarios - + - transaction a and transaction b start off in parallel + - transaction a acquires shared lock on row a + - transaction b acquires shared lock on row b + - transaction a tries to acquire exclusive lock on row b - cannot because of transaction b + - transaction b tries to acquire exclusive lock on row a - cannot because of transaction a + - understand how the exact same scenario discussed above would not have resulted in a deadlock scenario in case of optimistic concurrency control, because it does not hold the shared lock + - database systems are able to detect deadlocks like this and then fail the transactions + +## 2 Phase Locking + +- 2 phase locking is a type of [pessimistic concurrency control](#concurrency-control) +- there are 3 types of 2 phase locking - "basic", "conservative" and "strict" +- "basic 2 phase locking" - + - phase 1 - "growing phase" - transaction can only acquire new locks. the lock manager can either grant or reject this request + - phase 2 - "shrinking phase" - transaction cannot acquire any new locks, only release locks +- basic 2 phase locking has two issues - deadlocks and cascading aborts +- "deadlock" example - the exact one we discussed in [pessimistic concurrency control](#concurrency-control) is a good example +- "cascading aborts" example - + - recall how releasing of locks is done one by one in the shrinking phase of basic 2 phase locking + - so, lets say transaction a releases exclusive lock on a row as part of the shrinking phase + - now, lets say transaction b acquires a shared lock on this row as a part of its growing phase + - now, what if transaction a had to be aborted suddenly due to some error + - now, transaction b has an inconsistent value of the row, and it would have to be aborted as well +- deadlocks can be solved by conservative 2 phase locking and wait for graph +- cascading aborts can be solved by strict 2 phase locking +- cascading aborts are considered very expensive, since they can result in a "chain of cascades" +- note - we want to maintain some degree of concurrency as well, not just consistency, like discussed during optimistic and pessimistic concurrency control +- so, we typically use strict 2 phase locking to resolve cascading aborts and wait for graph for resolving deadlocks + +![2 phase locking](/assets/img/high-level-design/2-phase-locking.png) + +- "wait for graph" - + - the scheduler maintains a graph, where the nodes represent the transactions + - e.g. if transaction a is waiting on a lock to be released which has been acquired by transaction b, then there is an edge from transaction a to transaction b + - once there is a cycle that is detected by the scheduler in the graph, it looks for the "victim" in this graph, and then aborts that transaction + - in choosing the victim, it might make considerations like the amount of effort already put in by this transaction, amount of effort to rollback this transaction, how many cycles would be removed by aborting this transaction, etc +- "conservative 2 phase locking" - + - requires transactions to acquire all locks at the beginning itself + - either the scheduler assigns all the locks to the transaction if possible + - or the transaction will have to wait if one or more of the locks are unavailable + - disadvantages - allows very less concurrency, does not prevent cascading aborts +- "strict 2 phase locking" - + - all the locks are released at once when the transaction is aborted / committed + - disadvantages - allows very less concurrency, does not prevent deadlocks + +## OAuth + +- oauth2 - authentication and authorization standard +- e.g. there is a third party app called tweet analyzer that uses tweet data to show analytics to a front user +- option 1 - we give tweet analyzer our credentials. this option is insecure, since - we share our credentials with a third party app, thus we compromise our credentials. tweet analyzer can now do everything that we as an account owner can do, e.g. create tweets, i.e. there is no restricted access +- option 2 - twitter gives temporary access to tweet analyzer app +- oauth2 is a specification / protocol, which we need to implement +- it has various "grant types" - "authorization code" and "client credentials" are the two most important grant type flows for now +- "resource owner" - the end user i.e. us +- end users own "resources", e.g. *tweets* in our case +- "client" - *tweet analyzer* in our case. it is the third party application trying to get restricted access to "resource" +- "authorization server" - "resource owners" should have an account inside this "authorization server" +- "resource server" - the application which maintains the "resources", e.g. *twitter* in our case +- sometimes "resource server" and "authorization server" can be clubbed into one +- "scopes" - the granular permission that the "client" wants, that "authorization server" gives +- general flow - + - first, the tweet analyzer apps needs to register itself with twitter. this gives them the "client credentials" - the "client id" and the "client secret" + - the resource owners then tries logging in with twitter and not our application + - the resource owners are prompted to provide consent to the client to perform the actions specified via scopes on the resources + - if the resource owners consent to this, the client is provided with an "access token" and a "refresh token" to issue api calls to twitter on behalf of the client +- "authorization code" grant type flow - + - resource owner goes to client + - client redirects to authorization server with - + - client id - helps authorization server identify the client + - scope + - redirect uri - where the authentication server redirects post successful authentication + - response type - "code" - tells that we want authorization code + - state - helps with csrf like attacks + - resource owners enter their credentials here + - assume successful authentication here + - client receives an authorization code + - client goes to authorization server with - + - client id + - client secret - to prove itself + - redirect uri + - grant type - "authorization_code" + - the authorization code + - client gets an access token for the resource owner from the authorization server + - client can then use this access token to make requests to the resource server on behalf of resource owner +- this architecture of first getting an authorization code and then getting the access token helps with better security. the first step helps with verifying the resource owner and the second step with verifying the client +- "implicit" grant type flow (deprecated, removed from oauth 2.1) - + - client receives the access token directly i.e. the entire flow authorization code onwards is skipped + - so, the obvious drawback - the client itself is not verified. anyone can mimic the url where they redirect to authorization server. remember it does not have the client secret, only the client id. and in exchange, they can directly obtain the correct access code +- "password" grant type flow (deprecated, removed from oauth 2.1) - + - resource owner "directly gives" the credentials to the client + - so, the obvious drawback is compromise of credentials +- use case of client credentials grant type flow - no resource owner is involved, so useful for service to service communication. organization a (client) interacts with organization b (resource server and authorization server) +- "client credentials" grant type flow - + - client sends request to authorization server with - + - client id + - client secret + - grant type - "client_credentials" + - scope + - client gets back access token + - client uses this access token to request resource server +- "refresh token" helps avoiding resource owners from initiating entire login flow again after access token expires + - client sends request to resource server with expired access token, hence gets a 401 + - client sends request to authorization server with - + - client id + - client secret + - grant type - "refresh_token" + - refresh token + - client receives back a fresh access and refresh token + - the client can use this new access token now to make requests to the resource server +- refresh tokens expiry - + - refresh tokens do not typically have an expiration, but can have one + - also, refresh tokens can be "rolling" i.e. they are single use and should be replaced with the new refresh token received every time a request for a fresh access token is made +- how can a resource server verify the access token provided by the client? - three options - + - api interaction between authorization server and resource server. drawback - an additional api call from resource server to authorization server every time + - both authorization server and resource server can have access to the same shared storage. drawback - shared storage + - recommended - when the resource server boots up, it gets a public certificate from the authorization server. this public certificate is used to validate if the access token has been tampered. also called "jwk endpoint" +- oidc - openid connect - oauth helped with authorization. by adding openid on top of it, we can use it for authentication as well +- a specific scope called "openid" is added to the list of scopes to get the identity details of the resource owner +- this way, we additionally get an id token along with access and refresh tokens +- the id token is in the form of jwt +- unlike access token, id token contains things like user name, email, etc - this is what helps with authentication +- so, two things are being done by our resource server - + - it is verifying the access token using the certificate + - it is parsing the token to get user roles, and this is possible because the token is in jwt format - recall how payload and header are just base64 encoded +- we send the token using `Authorization: Bearer <>` +- authorization code grant type flow by itself would only work when we use jsp, thymeleaf, etc i.e. server side templating languages +- however, we cannot hide the client secret in spa applications, since the entire source code is accessible from the browser +- so, we use pkce - proof key for code exchange +- so, the client generates + - "code verifier" - a random cryptic string + - "code challenge" - base64(sha256(code verifier)) +- the ui first when asking for the authorization code in the "authorization code" grant type flow sends the code challenge +- bts, the authorization server stores this code challenge, and returns the authorization code +- the ui then sends a request for an access token. this request unlike in the regular "authorization code" grant type flow which includes the client secret, includes the code verifier +- the authorization server then compares this code verifier with the code challenge which it had stored +- if the values match, the authorization server returns the right tokens +- so my understanding - "authorization code" grant type flow is almost same as "pkce", except + - the first request from the client includes the code challenge + - the second request from the client does not include the client secret, but includes the code verifier +- so, with a mitm kind of attack - if someone gets access to authorization code, it is not enough, they need the code verifier as well, and they cannot predict code verifier from the code challenge, since it is encrypted using sha256 +- so, in oauth2.1, they have started clubbing authorization code + pkce grant types together +- my understanding - if someone gains access to our client id, why cant they self generate the code verifier and code challenge and ask for a new access token? they can, but the redirect uri might help us here by redirecting to our own website! (note - there is some component of specifying valid redirect uris when registering clients with the authorization server) +- now is there not a second issue above - redirecting to a legitimate app from an illegitimate app? - solved by the "state" parameter, which helped us with csrf attacks + +## Encryption + +- converts our "plain text" data into a "cipher text" +- "symmetric encryption" - + - same "key" is used for encryption and decryption + - two popular algorithms - aes and des (des is no longer recommended, has been cracked) + - advantage - symmetric encryption consumes much less resources / is much faster compared to asymmetric encryption + - disadvantages - + - secure distribution of key is difficult + - managing different keys for every clients - note that we cannot use the same key for different clients, otherwise they can intercept each other's responses +- "asymmetric decryption" - + - use two keys - public and private + - "public key" - used by sender to encrypt + - "private key" - used by receiver to decrypt + - note - the above is not always true - my understanding of an example - in "digital signatures" in [oauth](#oauth), the resource server downloads public key from authorization server to validate tokens - aka public key is being used to decrypt? + - two popular algorithms - rsa, diffie hellman + - advantage - public key can be distributed easily to clients, while private keys are retained by servers + - disadvantage - very computationally expensive diff --git a/_posts/2024-04-12-high-level-design-case-studies.md b/_posts/2024-04-12-high-level-design-case-studies.md new file mode 100644 index 0000000..57d8ac5 --- /dev/null +++ b/_posts/2024-04-12-high-level-design-case-studies.md @@ -0,0 +1,683 @@ +--- +title: High Level Design Case Studies +--- + +## Steps to Follow + +- abstraction - we need to stay at the abstraction level of the system and not its low level implementation +- there is no one correct solution +- step 1 - ~ 5 mins - gathering functional requirements. it also helps "narrow down" the scope +- step 2 - ~ 5 mins - gathering the non functional requirements. helps ensure our system has the right quality attributes for the given workload +- step 3 - ~ 5 mins - combination of sequence and use case diagram. additionally, define the api of system as a part of it +- step 4 - ~ 15 mins - software architecture diagram for functional requirements - what data to store in what type of database, describe the flow of network requests, define the architectural pattern used, etc +- step 5 - ~ 10 mins - optimize the software architecture diagram to address the non functional requirements. add the components, remove the single points of failure, etc +- to help revise efficiently - skipping step 3, merging steps 4 and 5 +- document effectively in the interview - interviewer might take snapshots which would be assessed later + +## Non Functional Requirements Questions to Ask + +following are the typical generic questions to ask - + +- number of users - ask for each actor separately +- performance in terms of percentile distribution graph - of different api calls +- availability percentage +- size of data / objects being stored +- number of events / api calls, etc + +## Social Media Platform + +### Gather Functional Requirements + +- what information should the system store for a particular user? +- what type of media can be shared - only images, or videos / text as well? +- what type of relationship exists between users? - bidirectional i.e. friends, or unidirectional i.e. followers and following - unidirectional +- what kinds of timelines to support? - both user and home page +- social media platforms are typically very read heavy and not so much write heavy +- can anyone post / view, or there is registration / login required +- are the comments organized using a flat list or tree - flat list + +### Software Architecture + +- user service - + - used for storing profile information + - store public information like user name, first name, last name, etc + - store private information like password, email, phone, etc + - store optional fields like location, interests, etc + - instead of storing profile image directly, store the image in an object store, and store the reference to this inside user db + - note - there might be optimizations like resizing around storing thumbnails + - instead of a new followers service, we can also track followers via user service itself + - it has a collection called "followers", which stores the follower id and followee id + - i think we can index on both - + - follower id - retrieve influencers followed by a user + - followee id - retrieve followers of the post's created by + - now, the entire user service can use a sql database, because of the nature of the data and the fact that the number of users should not typically be as much - we can also model the followers table as a many to many constraint + - we saw we can index on followers id, followee id, etc for faster access. optionally, we could have used redis as a layer of cache - + - key = follower id, value = followees - to retrieve all the people this user is following + - key = followee id, value - followers - all the followers of this user + - key = user id, value = profile - we might want to display a short profile of users alongside their posts / comments + - my understanding - we could have used cqrs pattern here to separate the redis into a separate query service. but i think here, its more around caching. cqrs makes sense when we want to use materialized view pattern as well +- posts service - + - a platform like twitter can have a huge number of writes. so, we use cassandra / dynamodb for storing posts + - comments are very similar to posts - have the same up votes / down votes fields, the same structure around the content, etc. so, instead of a new comments service, we can store the comments inside the posts service itself + - we can use the post id when sharding for posts + - we can use the post id when sharding for comments as well - this helps us easily retrieve the comments for a post + - second approach - compound index + range shard strategy + - we use a combination of the post id, comment id + - post id is the partition key, and comment id the sort key + - this way, all comments for a post can be fetched fast, since the comments for the same post will be located close to each other +- search service - + - used to help search for users and posts + - using a specialized search service can also help us with type ahead etc + - it will have its own nosql database with text search capabilities - e.g. elasticsearch + - users service and posts service communicate changes to search service via a message broker + - this is the cqrs pattern - hence, it is eventually consistent + - now, instead of always running elasticsearch through our query because searching through elasticsearch can be expensive, we can cache our results in redis as well. reason - there can be hot topics - e.g. elections, and we can cache the elasticsearch response for such queries +- timeline service - + - approach 1 - construct the timeline on the fly every time + - however, it is very inefficient - the complex query to posts service can become a bottleneck + - so, we use the cqrs + materialized view pattern + - we add a new service called the timeline service, which has the timeline for each user stored inside an in memory key value database, where the key is the user id, and value is the timeline i.e. list of posts + - first, the posts service publishes a message to the message broker every time a new post is created + - then, the timeline service calls the user service with the user id of the post, to retrieve all the followers for this user + - finally, it updates the database to add this new post to all these followers + - we use a queue like data structure to keep track of the latest n posts in the timeline for a user - first in first out i.e. the oldest post would be removed from the timeline + - so now, the client only needs to request the timeline service for the timeline of the current user + - then, it needs to fetch the posts (in bulk) from posts service + - finally, it needs to fetch all the assets from the object store + - downside - we now have eventual consistency as opposed to the strong consistency earlier + - we can also "archive" the timeline data - people might end up scrolling more, and instead of recomputing everything from scratch, the old timeline data can be stored again inside cassandra +- handling influencers - + - some users can be an influencer - they can have thousands or millions of followers, based on our system + - when the timeline service receives a post from such users, it will have to update the timeline of all of its followers, which means there can be millions of potential writes + - instead, we track for each user if they are an influencer or not via a boolean in the user service + - now as usual, for each post that the timeline service received from the post service, it tries to fetch all the followers for that user + - this time, since the user service knows that this user is an influencer, instead of returning all the followers, it will just return true for the influencer field + - the timeline service will just track the posts of all influencers in a separate collection - the key would be the influencer id, and the value all the posts by this influencer + - note - we can still use the redis for recent posts, and cassandra for archival + - now, when the timeline service is called for getting the timeline, it does not return the timeline directly + - it first fetches all the influencers the current user is following from the user service + - it then merges the timeline of the user with the posts by all the influencers this user follows and return this final list. the merge can be performed using the timestamp field + - a user could be following hundreds of normal people, but a very handful of them would classify as influencers. so, this technique of merging works the best +- scaling timeline service further - + - assume the functional requirement wants to support user timeline as well - we can look at the posts by a user after clicking on a user + - the user timeline will be designed in the same as the "influencer timeline" - the key would be the user id, and the value the entire timeline + - however, we maintain the timeline only for active users - and not for all users + - note - the same can apply to home page timelines as well i.e. we only maintain the home page timeline for active users + - e.g. our platform might have 2 billion users, but only 100 million of them are active, rest of them are passive users + - this helps us saves on disk space / infrastructure cost + - the active / inactive flag can be tracked inside user service itself, just like influencer / non influencer + - when an inactive user comes in - we first have to populate redis with the right active data + - then, we generate the entire timeline and populate our key value database with this +- scaling (generic) - + - we can horizontally scale all services and run them behind a load balancer + - sharding for all databases - remember posts service has an sql database, so might or might not be supported + - replication for all databases + - run the system in different geographical regions +- some other considerations - + - we can use connection management as described in [realtime instant messaging](#real-time-instant-messaging-service), for pushing notifications about new posts by followers, when users are tagged in a post, when a user is followed by another user, etc. we use the choreography pattern here to help subscribe to events on the message broker, and then we use websockets to push these events + - assets - for storing media, we can use the optimizations we talked about in [video on demand](#video-on-demand-streaming-service). we can perform compression, perform processing on thumbnails, use cdn, etc. assets of old posts should automatically expire from cdn, thus saving us on the costs for using the cdn + - given that tweets have a character limit, we might want to shorten the urls. we can do this using a [url shortener](#url-shortener) + - to the timeline of a user, we might want to add posts based on their interests. so, we can have analytics running on users and on posts, to tag both these entities based on different parameters. finally, we can add matching posts to the timelines of all the relevant users + +## Video On Demand Streaming Service + +### Gather Functional Requirements + +- can the content be modified - videos can be deleted but not modified +- what kind of information is provided along with the video + - mandatory - title, author, description + - optional - tags + - note - these fields can be updated +- does it support only video on demand or live streaming as well - live streaming is out of scope +- is there any particular video format we would like to support - all formats / codecs should be supported +- what kind of devices do we want to support - all - browsers and apps, with varying network bandwidths +- main functional requirement - close to no buffering +- should we support subscription based content - no + +### Software Architecture + +- challenge - there are different formats, different aspect ratios, different bandwidths, etc that we need to handle - so too many combinations +- handling different formats of videos - + - videos can come inside different formats - each with different formats of audio, video, subtitles, etc + - some videos, e.g. ones taken from cameras can have very high resolution, since they use "lossless" compression algorithms + - this makes them ideal for video editing but not for storage / streaming + - so, we can use "lossy" compression algorithms to reduce the amount of data stored and transferred +- supporting varying devices - + - video size is ~ bitrate * video length + - so, to optimize the video size to support different devices and network conditions, we need to optimize the bitrate + - now, bitrate is directly proportional to the resolution and frame rate of the video + - so, for reducing the bitrate, we need to reduce the resolution and frame rate + - so, using the transcoder, we need to generate videos with different resolution and frame rate to support different devices +- supporting varying network conditions - + - network bandwidth is not stable - it can be different when the user started watching vs when the user is halfway through + - so, we can use "adaptive bitrate" or "adaptive streaming" + - we break the transcoded video into segments, each a few seconds long + - the client first downloads a "manifest file", that contains the different resolutions, frame rate, etc available + - the app then based on this manifest and the device information that it has access to, downloads a few segments of the right encoding + - it evaluates the time taken to download these files, and then accordingly switches to a different bitrate based on the network conditions +- finally, the different devices support different kinds of video protocols - + - i think this is around the application layer protocol being used + - so, we need to package our transcoded video chunks according to the different protocols and then forward it to the client +- we use an api gateway to handle authentication and authorization +- video service - + - store the videos in an object store + - store the metadata (title, description, author, tags) in the document store of the video service +- content processing service - + - "pipes and filter pattern" can be used for it + - runs when the raw video has been finished uploading to the object store + - so, the final sequence of steps using a pipes and filters patter would be - + - chunking + - perform appropriate compression + - perform sanitization - flag piracy, only allow legal content, etc + - generate thumbnails for these chunks, generate subtitles using nlp, etc + - transcoding - convert to different resolutions and frame rates + - package for different protocols + - generate manifest and send the link to video service + - after completion of all these steps, the service publishes an event to the video service for it to store the link to manifest file + - finally, we also need to notify the uploader of the successful upload - this entire process is asynchronous because it can be very time consuming, and the uploader should know once the upload is complete +- search service - + - after the video service has all the necessary details for a video, it publishes an event to this search service + - this search service uses an optimized database for text search, and stores this event there + - note - elasticsearch can take care of type ahead, perform fuzzy searching for typos in complex names, etc + - this is also a cqrs pattern - video service is the command service, and the search service is the query service +- get videos flow - + - when a user searches for videos, their requests go to the search service, which returns the video ids + - then, when the user clicks on a video, they request for the video from the video service, which returns the manifest file, description of video, etc + - finally, the device will start requesting for the right video chunks from the object store + - my doubt - we can extend the presigned url here as well for subscription based content? +- upload videos flow - approach 1 - + - right now, our request for uploading videos goes through the api gateway to make use of the authorization features etc + - then, the video service routes it to the object storage + - this means we will have to scale our api gateway and video service to just support this uploading functionality +- upload videos flow - approach 2 - + - we can use "presigned urls" - this allows the client to make requests to the object storage directly for a limited time + - so now, the request to the video service does not contain the actual video - just metadata containing title etc + - the video service with its permissions then generates a signed url and sends it back to the client + - the client now uses this signed url to upload the video - thus bypassing the api gateway and video service +- cdn and its optimizations - + - to improve the video delivery time, we use a cdn. "push strategy" might work better because videos cannot be updated + - we need not store all the videos in all the cdns + - we can instead have a few main cdns with the actual content, and the smaller local cdns can only have the content that a user is likely to watch - e.g. german content need not be cached at an indian cdn + - we can pre compute and store these likely videos beforehand using ml models to improve on our non functional requirements + - additionally - all cdns need not be sent all chunks of all formats from the main cdns - we can kind of distribute these chunks among the local cdns, and then these local cdns can use a peer to peer like model to distribute the chunks among themselves - this reduces the load on our main cdn as well +- tagging a video - + - during the processing of video, determine tags for the video based on some machine learning + - then, add these tags to the video + - basically, for each chunk, we would determine some tags + - then, we would group all these tags by video id + - finally, we can choose the top x tags which are the most relevant, highest count, etc to obtain the tags for a video + - we can also tag users based on their watch history etc + - now, based on tags assigned to videos and users, we can send the right recommendations to users + +## Real Time Instant Messaging Service + +### Gather Functional Requirements + +- one to one direct messaging or group messaging? + - three types of mediums need to be supported - one to one, groups and channels + - one to one chats are a specialized form of group chats only involving two users + - channels - other users can join or leave channels. useful inside companies, where employees can join or leave channels +- types of media supported - text based, sharing images / documents, video calls +- persisting chat history - e.g. a user is offline when they receive a message. should they see the message after coming back online? + - users should be notified immediately after receiving a message + - a user should be able to see both - previously read messages and all unread messages after going offline +- other messaging statuses to show - + - if a user is online - in scope. a user can click on the profile of a user to see if they are online + - if a user is currently typing a message - out of scope +- system needs to have close to no lag - it is a messaging system, unlike [social media platform](#social-media-platform) etc + +### Software Architecture + +- approach for message delivery - + - user a gets the ip address of user b from our system + - then, user a talks to user b directly, and the communication does not go through our system + - benefit - since the system would not be involved, this approach can be easily scaled to millions of users chatting "one to one" (one to one is key) with each other + - drawback - hard to support groups and channels - the user would have to establish a connection to potentially thousands of users, which is not possible for mobile devices + - another drawback - messages would not be stored and hence be lost for offline users + - so, we proxy the messages instead via our system + - so now, the user sends the message and the target group / channel to our system + - our system then takes care of creating history, pushing it to the right receivers, etc +- delivering the messages - + - in the typical client server model, a request needs to be received first in order to send a response + - so, one approach - clients keep polling the server for messages + - disadvantage - polling from all the end users will lead to too much resource consumption, along with computation for potential inactive channels and chats as well + - so, we instead use "websockets", which allow for full duplex, bidirectional communication + - note - websockets use tcp underneath + - first, the users establish the websocket connection with the server + - then, the server can push the messages / receive the messages using this connection +- user service - + - persist the user information - we can use an sql database + - step 1 - when searching for users, it should return the correct user + - as a part of this, index based on username to make this search faster + - worth pointing out - an additional user search service feels like an overkill - we do not need features like sophisticated autocomplete when searching for users +- groups and channels service - + - used to maintain groups and channels - recall that one to one messaging is a specialized case of group chats + - one groups table - (group_id, created_at, ...) + - one channels table - (channel_id, channel_name, channel_url, owner_id, created_at, ...) - users use channel url to join a channel + - a many to many table for storing which users are a part of which groups + - a many to many table for storing which users are a part of which channels + - index channel table by name for quick searching + - index the two many to many tables by group / channel id to look up all the members in a group / channel quickly + - step 2.1 - a user can make a call to this service to create a group + - step 2.2 - then, they can search for users and add them to the group + - creating a channel has similar steps, just that an extra step of searching and joining the channel might be involved + - step 4.1 - if the user is offline and comes back online later, they first request this service to know about the groups that they are a part of + - optionally, this can be backed by a redis key value store - serves as a cache, retrieving all members of a group becomes very fast - we use group id as key +- chat history service - + - one messages table - (message_id, group_id / channel_id, sender_id, text, created_at, ...) + - step 4.2 - using the ids of the groups and channels that the user receives from the groups and channels service, the user requests for the chat history from the chat history service + - again, the complex sharding problem might arise - one shard might not be able to fit all the messages for a group, and so we use a compound index using group id, message id - + ```sql + select * + from messages + where group_id = xyz + sort by message_id desc + ``` +- messaging service - + - users establish a bidirectional connection with this messaging service + - step 3 - a user sends a message to the messaging service (group_id / channel_id, message). the messaging service does the following - + - step 3.1 - store it in the chat history service (asynchronously) + - step 3.2 - request for the users part of this group / channel from the groups and channels service + - step 3.3 - push the message to the currently online users via the bidirectional connections + - scaling message service - unlike other services, the messaging service cannot be simply horizontally scaled behind a load balancer, since it is not stateless + - e.g. we use a simple round robin load balancer in front of two instances of the messaging service + - assume user a is connected to instance 1, and user b is connected to instance 2 + - if user a wants to send a message to user b, instance 1 will need to communicate this message to instance 2 +- approach 1 - when our user base is "partitioned" + - if in our use case, we have dedicated groups - one group for company 1, one group for company 2, and so on + - we can have all users for a particular group aka company connect to the same instance + - in this case, we would have ensured all users of a particular company are connected to each other + - the idea is that we can be sure that users of one company would not want to communicate with another company + - we can also vertically scale each instance individually depending on the size of that company + - i feel this approach will work well in use cases like games - whenever there are smaller clusters of users, and users of different clusters cannot talk to each other +- approach 2 - when our user base is not partitioned i.e. any user can send a message to any other user + - we introduce a new connection service + - this "manages connections" via a key value store (redis) - it knows which user is connected to which message service instance + - now, when a message service instance receives a message, it asynchronously sends it to the connection service + - advantage of asynchronous communication between messaging service and connection service - the sender does not care about this flow, so it does not have to wait to receive a "message delivered" notification + - then, the connection management service (again asynchronously) asks the chat history service to backup the message and synchronously asks the group and channel service for the members of the group of the message + - finally, it notifies the right message service instances - it knows which message service instance is responsible for which user via its database +- handling race condition - user a sends message and user b comes online simultaneously + - user b's call to chat history service does not return this message because this message had not been persisted yet + - user a's call is unable to push the message to user b because this user has not established an active connection with connection service yet + - one solution - connection service polls chat history service for the messages of users with active connections and pushes them to the messaging service +- asset management - + - should have compression logic, discussed in depth in [video on demand](#video-on-demand-streaming-service) + - once the upload is completed successfully, the message in the connection service needs to be updated with the url before it starts pushing them to messaging / chat history service + - can use cdn for faster delivery, etc +- based on whether or not the messages are end to end encrypted, we can run analytics on message content + +## Type Ahead / Autocomplete for a Search Engine + +### Gather Functional Requirements + +- what criteria to use for suggestions - most popular queries in the last 24 hours +- is spell checking in scope +- how many suggestions to provide - 10 +- what languages to support it for - only english +- maximum length of prefix - 60 characters, beyond this we do not show suggestions + +### Software Architecture + +- we need two api queries + - /complete?query=xyz - to help with autocomplete + - /search?query=xyz - used when the user hits the search button / selects one of the results. note - our analytics will be updated based on this, so "get" http verb might feel wrong +- solution 1 - trie + - a subtree contains words with the prefix the same as the path up to it from the root + - we can store the frequency of search in the terminal nodes of this trie + - disadvantage 1 - can become too big - with 60 character being the maximum limit, there can be 26^60 (if considering only lowercase) + - disadvantage 2 - for a given prefix, we would have to traverse all its branches and then even sort them based on popularity +- observations - + - our autocomplete suggestion has to be very quick + - the update corresponding to our search query can be slow + - so, we can use cqrs along with batch processing +- autocomplete service - + - resolves autocomplete related requests + - uses a key value store underneath, where the key is the prefix and the value is the list of results +- autocomplete updater service - + - triggered once the button / result is clicked + - receives a tuple of (search term, timestamp) + - this is then stored in a dfs for further processing +- now our big data processing workflow is as follows - + - read all the (search term, timestamp) tuples populated by the autocomplete updater service + - we have a mapper with the following steps - + - filter the tuples with timestamp within the last 24 hours + - for each prefix of this search query, emit a tuple of (prefix, search query) + - understand that the above mapper will emit all prefixes of a word twice if the autocomplete updater service populated it twice + - now, all the search queries with the same prefix should end up in the same computer, given our mapper outputs the prefix as the key + - then, the reducer can perform an aggregation to find out all the top k (10 in our case) searches for that prefix + - remember to run multiple instances of both mapper and reducer +- cdc - change data capture - + - we use a cdc pipeline to send changes in our dfs i.e. every time the results for a particular prefix change to the autocomplete service + - the autocomplete service reads these events and updates its key value store + - note how we do not surface the autocomplete queries from the dfs directly since it is inefficient + - instead we use the more optimized key value store + - we could also have used the reducer to write the results to the key value store directly, which too would have been very inefficient + - now, cdc will only send over the changes, as opposed to the reducer, which would have done a complete rewrite +- we can horizontally scale both autocomplete service and autocomplete updater service +- shard manager service - + - used for scaling the key value store + - the key value store being used should have sharding given the amount of data + - we can also use read replicas to help distribute the load + - both replication and sharding should be available for databases by default + - despite of all of the above, some shards like ones storing the prefix "how" can be hot, while others would not even be close + - the default replication mechanism will usually use the same number of replicas for every shard, which might not work in our case + - so, one approach is to have a "proxy" between the autocomplete service and key value store, which can dynamically increase the number of replicas for hot shards i.e. different shards can have different number of replicas based on our workload + - note - this is not a write heavy system, as much as it is a read heavy system. we can also use an sql like database - the number of read replicas of a shard need to be increased - we can use an active passive architecture here for the database, key value store is not necessary + +## URL Shortener + +### Gather Functional Requirements + +- short url and actual url mapping should be maintained in a database + - generate a short url for a long url + - return the long url when queried for a short url +- traffic per day - 10 million urls per day +- we will run this service for a 100 years +- characters we can use - alphanumeric + +### Software Architecture + +- calculation behind how many characters we should use - + - characters allowed = 26 + 26 + 10 = 62 characters + - number of urls to support = 100 * 365 * 10,000,000 = 365 billion + - 62^7 = 3521 614 606 000 - 3 trillion - so, our url shortener would have to use at least 7 characters +- popular hash generation techniques - + - md5 hashes are 16 bytes long = 128 (16 * 8) bits = 32 (128 / 4) hexadecimals + - sha1 is 20 bytes = 20 * 8 / 4 = 40 hexadecimals + - sha256 is 64 (256 / 4) hexadecimals + - sha512 is 128 (512 / 4) hexadecimals +- none of them work because we only need 7 hexadecimals - this feels wrong? we need to check log16(365 billion) = 10 hexadecimals? when we said 7, it included the whole range of both small and capital letters +- one solution - "ticket server" - + - we maintain a counter inside redis - remember - redis is an excellent choice for atomic incrementing counters + - all instances of our shortener request this instance for the next number + - issue - a single redis server might not be able to scale + - solution - + - e.g. we need 7 hexadecimal numbers i.e. 28 bits + - imagine we have 8 redis instances, and number them - 000, 001, 010 and so on using 3 bits + - remaining 25 bits are used by redis to generate the auto incrementing ids - each instance can generate 0 to 2^25 - 1 + - so now, we have a unique number +- another solution - "token service" - + - when our shortener system comes up, it would ask our token service for a range to use + - each instance would be assigned a range - 10000-20000, 20000-30000 and so on + - now, the instance can generate 10000 urls before asking for the next range + - the token service need not worry too much about scaling - it would take some time for our shortening service instance to exhaust the 10000 range it has been assigned - so, it can use a regular mysql database + - a disadvantage - the instance can go down after being assigned a range from the token service and before exhausting this list entirely, and thus we have now wasted a range of numbers +- till now, we only took care of generating a unique 28 bit number - now, we can convert it to a hexadecimal number +- issue - 16 would map to just g, 17 to 10 and so on, but we would like to ensure urls of 7 characters +- solution - pad using a special symbol like `=` +- finally, we can use cassandra to store the short url to actual url mapping +- follow up question - analytics - how many times a short url was accessed etc - solution - put messages onto kafka, have a separate analytics service + +## Key Value Store + +### Gather Functional Requirements + +- equivalent question - dynamodb, maybe others like redis, memcached, etc can draw inspiration +- use cases - customer preferences, shopping cart, etc +- key value stores are "distributed hash tables" +- we want our system to be configurable - applications can chose between high consistency and high availability models + - note - this cannot be done dynamically, only when instantiating our key value store +- we should always be able to write - availability > consistency +- scalability - add or remove servers easily with little to no impact on availability +- fault tolerance - operate uninterrupted despite failures +- get(key) - when choosing eventual consistency model, more than one value can be returned +- put(key, value) - server can store additional metadata alongside as well, e.g. version etc +- we can use md5 for generating a hash for the key +- if amount of data becomes too much, we can store the data in s3 and the link to this object in cassandra + +### Consistent Hashing - Scalability + +- we pass our value through a hash function to obtain a hash +- "mod hashing" - used when the size of our hash table is limited - we can perform % m with the hash obtained from above +- problems when using mod hashing - + - what if we suddenly increase the number of shards? - the hash will change! e.g. we had 3 shards initially, our data was stored in shard 1 (3 % 3) + 1, but after the increasing to 4 shards, we would end up looking in shard 4 (3 % 4) + 1 + - even distribution - we might end up having hot shards +- so, to avoid both these problems, we need to use "consistent hashing" instead +- using consistent hashing, when we add or remove a node, we should only have to re balance (1 / n)% of the data, where n is the number of nodes +- imagine a virtual ring like structure + +![consistent hashing](/assets/img/high-level-design/consistent-hashing.png) + +- we set the servers randomly at some point on this ring +- we go clockwise to decide which key should go into which server +- imagine we have 2 servers initially + - data for keys 2, 3, 4, 5 and 6 go into server 7 + - data for keys 7, 8, 9, 10 and 1 go into server 2 +- suppose, we add a new server at 4 +- now, we only need to re balance the data for keys 2 and 3 +- we can similarly work it out in the cases when we remove a server +- now, we have handled issue 1 - change in number of instances without re balancing +- with our current strategy, we can still end up with skewed partitions - + +![consistent hashing disadvantage](/assets/img/high-level-design/consistent-hashing-disadvantage.png) + +- workaround - we replicate the server in random places on the ring +- for calculating where the data should be in the ring - we use a single hash function and move in clockwise direction to find the responsible node +- for calculating where the node should be in the ring - we use multiple hash functions and place all these replicas on the right parts of the ring +- this is called a "virtual server" - our physical server is present on multiple parts of the ring +- another advantage - if we have a heterogenous architecture i.e. the node being added to the mix has more capacity - we can replicate it more times in the ring + +![consistent hashing workaround](/assets/img/high-level-design/consistent-hashing-workaround.png) + +### Replication + +- why an active passive architecture would not work - + - we want a write heavy system, and the active system can become a bottleneck + - there is a lag for acknowledgements from replicas +- therefore, we use an active active / peer to peer architecture +- the data is replicated into (x - 1) other replicas (not all n servers). this x is typically 3 or 5 + - for quorum, it makes sense to have an odd number of replicas - quorum required for 5 replicas is 3, for 6 replicas is 4. so we can withstand 2 failures in case of both 5 and 6 replicas +- we find the virtual server responsible for our write in the ring - this is called the "coordinator" +- then, we replicate the data to the next x - 1 replicas in clockwise direction +- note - due to the virtual server concept we discussed, skip the virtual servers which point to physical server where the key is already stored. this way, we have our data stored in x different physical servers + +![consistent hashing replication](/assets/img/high-level-design/consistent-hashing-replication.png) + +### Versioning - Vector Clocks + +- issue - during network partitions / node failures, the version history of the same object might diverge across nodes +- so, we need some reconciliation logic +- so, we need to use versioning +- we can use timestamp, but it is not reliable in a distributed system +- so, we use "vector clocks" +- the idea is like git - if automatic merging is possible then good, else the client has to resolve the conflicts for deciding the ultimate value + - note - the client in our case is the [load balancer / another node](#load-balancer) +- so, now our api works as follows - + - get requests return multiple vector clocks in case of conflicts + - put requests accept a vector clock to help resolve conflicts +- e.g. we have 3 replicas, A B and C +- first write goes to A, all nodes will have (A,1), value E1 +- second write goes to A, all nodes will have (A,2), value E2 - this overwrites E1 +- at this point, we have a network partition, and say A becomes unavailable as well +- third write goes to B, B will have (A,2), (B,1), value E3 +- fourth write goes to C, C will have (A,2), (C,1), value E4 +- now suppose the network partition is resolved +- now, when a write comes in, all nodes will have (A, 3), (B, 1), (C, 1), value E5 + +### Load Balancer + +- "generic load balancer" - + - the load balancer can forward the request to any of the replicas + - all servers are aware of the preference list for all key ranges - [gossip protocol](#fault-tolerance) + - thus, they can forward the request to the right coordinating node + - disadvantage - has more latency, since there is an extra hop to reach the coordinating node +- "partition aware load balancer" - + - the load balancer itself is aware of the right partition to direct the read request to + - disadvantage - non trivial load balancer logic + +### r and w + +- we maintain a "preference list" for each key - this contains the servers where the data is stored +- now, if we want to maintain x replicas, we do not necessarily wait for response from all x replicas for writes / reads +- r - for a get request - wait for r - 1 replicas to respond with their vector clocks and values +- if the histories of the total r replicas are divergent, return everything to the client to merge +- w - for a put request - wait for w - 1 replicas to acknowledge +- replicate to remaining x-w replicas "asynchronously" +- we need to ensure r + w > x + - this way, we ensure that at least one replica between r and w is common + - this way, we ensure we always get the latest value + - this is because at least w of them will have the value updated synchronously + - one of them would end up being used as a part of r +- e.g. x is 3, r and w can both be 2 +- if r is 3 and w is 1, we provide speedy reads but slower writes +- similarly, if r is 1 and w is 3, we can have slower writes but much faster reads + +### Fault Tolerance + +- "gossip protocol" - servers are able to communicate things like preference lists using this +- they send each other heartbeats, and this way the servers would know which servers are up and which ones are down +- we know that nodes are responsible for maintaining ranges of hash +- now, using "merkle tree", hash of each key's value is stored at the leaves +- remaining nodes of the tree contain the hash of all of their children +- this way, if the hash of a node in two different merkle trees match, we do not need to recursively check in the subtree and leaves +- e.g. look how we duplicate the value below if number of nodes are odd + +![merkle tree](/assets/img/high-level-design/merkle-tree.png) + +## Ride Sharing Service + +### Gather Functional Requirements + +- should the system design the payment processing system and automate the payments - + - yes, collect payment from users + - track bank information of drivers to pay them +- should we consider eta - + - yes, ride matching should reduce the wait time of rider / reduce the distance traveled by the driver to reach the user + - we can use an external eta service +- can multiple people share a ride - + - yes, a driver can be matched to multiple riders if the riders want to share rides and the driver has capacity left in the vehicle +- how do we calculate the riders fee and driver compensation - + - it has three components - a flat fee, duration of the ride and the distance traveled + - the exact formula is not in scope, but we need to track the three parameters above +- is registering users and drivers supported - + - registering and logging in of users is supported + - registering of drivers is not supported, since they go through a background check, vehicle inspection, etc + - logging in of drivers is however supported + +### Sequence Diagram + +- driver flow - + - the driver logs in + - then, the driver hits the "join button", which adds them to the driver pool + - since this point, their location gets sent to our system every 5-10 secs +- rider flow - + - the rider registers / logs in + - then, the rider requests for a ride. the request contains their location + - the system looks for drivers - close to the rider, about to finish their ride, etc + - if the driver accepts the ride, they start sending the coordinates continuously to our system + - simultaneously, our systems keeps sending the location updates to the rider + - finally, once the trip ends, the driver hits the finish trip button + - the system sends both the driver and the rider the fare details + - once the payment is completed successfully, the driver's account is credited with their pay + +### State Diagram + +- the driver has 5 states - logged out -> logged in -> available for matching -> matched with rider -> in trip +- from in trip, they can either jump to matched with rider (if their current trip is about to end but they already have a match) or available for matching (if their previous trip has ended) +- the driver can transition into the logged in state when they do not wish to accept any further rides + +### Software Architecture + +- user service - + - will contain two tables - riders and drivers. both should have name, auth information, etc + - note - the drivers table might have additional information like vehicle information + - the user service returns an authentication token on successful login +- payment service - + - store user's billing information + - store driver's bank information + - it will integrate with the different banks / credit card companies with their apis +- driver service - + - maintains a bidirectional websocket connection with the driver + - removes the overhead around establishing a new connection for every location update + - another reason - our system needs to "push" the potential riders to the driver +- rider service - + - just like driver service, a long bidirectional connection is maintained + - helps push updates from the system around driver location updates, etc +- location service - + - receives location updates from the driver service via a message broker + - benefit of this event driven model - we can use separation of concerns / decoupling + - location service has another functionality - to serve the matching service + - the matching service sends it the rider's starting coordinates + - the location service can respond to it with the close by drivers + - given the location of user, we try to build a 1km radius and try to look for all the drivers in this range using the location service + - first challenge - how to optimally find drivers in 1km radius + - a technique used by location based services is to divide the earth's surface into cells + - each cell is given a unique id, and the location service alongside the actual coordinates, stores this cell id as well + - now, we only need to know the cells that fall within the range of a given cell + - we also save ourselves from the complex distance computation involved when using latitude and longitude, which are floating point numbers + - this technique is called "geo hash" + - it is readily available in multiple databases and libraries + - second challenge - what if the direct distance is less than 1km, but the arrival time is more than an hour, given the u turn, some new construction and traffic + - so, we need to use an eta service + - while gathering functional requirements, we were told we can use an external service +- matching service - + - match the driver and rider + - the matching service accepts the user location request from the user service + - the matching service forwards this to the location service and receives the response containing (driver, eta) combinations + - after this, the matching service can contain complex logic - + - favor riders who have not earned anything yet + - consider drivers who are about to finish the trip + - consider sharing of ride + - then this gets sent to the driver service for acceptance + - once it receives the accept from a driver, it will notify the trip service about it + - the trip service can now create an entry in its database about the driver rider combination + - finally, the rider is notified about this as well + - i do not think matching service needs a database +- trip service - + - maintains the trip details + - calculates the fare details + - we can use the "event sourcing pattern" from the location service to trace the entire path. actually, this is the event sourcing + cqrs pattern discussed [here](/posts/high-level-design/#event-sourcing-pattern). underneath, the [event streaming](/posts/high-level-design/#event-driven-architecture) capability of the message broker is being used +- the entire architecture is "choreography pattern", since there is an event driven workflow between multiple services +- for scalability, we again hit the same issue for both driver service and rider service as in [instant messaging](#real-time-instant-messaging-service). we solve it by introducing a connection service in between which tracks which user is connected to which instance. the matching service, trip service, etc can communicate with connection service, which calls the right instance of driver / rider service +- we want to minimize the login time - + - essentially as a part of the functional requirement, we want to immediately notify the user (driver or rider) if there are typos + - approach 1 - we use in memory hash set - if the username in the request payload is not present inside the hash set, we avoid performing the expensive database lookup to find the password, profile information, etc and immediately inform the user that the username does not exist + - drawback - storing millions of users in memory in each of our user service instance is infeasible + - solution - we can use bloom filters + - how hash set works - for each hash, it stores a linked list like data structure to handle collisions + - how bloom filter works - for each hash, it just stores a binary 0 or 1 + - drawback - false positives - due to collision, it might happen that a user is actually not present in the database but holds one for the bloom filter + - one solution - multiple hashing functions. thus, the bloom filter will have to have 1 for all the computed hashes + - however, it is a tradeoff we make given our use case + - another drawback - we can only add values to a bloom filter, not remove them. should be fine - + - deleting a user is rare + - the bloom filter is recreated every time a fresh instance of the user service boots up + +## Video Conferencing Service + +### Software Architecture + +- websockets - + - there can be functionalities like calling etc that we want to support + - so, we would need to have a client-server, websocket feature to be able to push such events + - now this connection can additionally be used for validating credentials of meeting (entering the right pass code) etc +- meetings - + - assume there are n participants. zoom has to send n-1 video streams to all the n participants + - the participants try to obtain the public ip addresses of each other - using the websocket described above + - finally, they can now start talking to each other directly + - so, we started from client server protocol and eventually switch to a peer to peer model using web rtc (realtime communication) + - udp is used underneath for faster delivery at the sake of lesser reliability - people would not (or sometimes even cannot) go back to hear what they miss +- issues and solutions for meetings - + - we still typically use ipv4, so we need techniques like nat + - recall how we had to exchange the ip address between each other using websockets + - "stun server" - tells a participant what its public ip address is - this would be a combination of the isp's router's public address and the port which helps with port forwarding + - now that a participant knows about its public ip address, it can send this via the websockets to other participants + - now, all the participants can talk using peer to peer + - issue - some nats or isp might or might not allow peer to peer communication directly + - so, we can use "turn server" instead - it is like the intermediary server through which calls are proxied + - so, we are back to the client server model when using turn server +- webinars / large conferences - + - issue with web rtc discussed in meetings - if there is a large conference, one participant (speaker) needs to send to few thousand participants + - here, the problem statement itself is different from meetings - the speaker is broadcasting, and others are just receiving + - handling so many peer to peer communications might not be possible by the small user device + - so, we use rtmp - realtime messaging protocol + - the speaker relays communication via an rtmp server in our system, which then forwards it to all the remaining clients + - now, unlike in meetings, we want more reliability around the speaker's communication here + - so, rtmp uses tcp instead for guaranteed delivery, unlike web rtc described in meetings + - also, it is more client server here, unlike in meetings which was peer to peer + - my understanding - unlike in peer to peer, the transcoding in webinars is heavier - it supports adaptive streaming as well - the speaker's resolution would depend on the participant's bandwidth +- video recording - + - for meetings - clients send it asynchronously in batches to the "recording server", without affecting the actual meeting + - for large meetings - rtmp server writes it asynchronously maybe to a dfs mounted on it, which can then eventually be sent to an object storage depending on use case + - now, we can perform optimizations like compression etc on these files, [discussed here](#video-on-demand-streaming-service) diff --git a/_sass/addon/commons.scss b/_sass/addon/commons.scss new file mode 100644 index 0000000..86b4899 --- /dev/null +++ b/_sass/addon/commons.scss @@ -0,0 +1,1576 @@ +/* + The common styles +*/ + +html { + @media (prefers-color-scheme: light) { + &:not([data-mode]), + &[data-mode='light'] { + @include light-scheme; + } + + &[data-mode='dark'] { + @include dark-scheme; + } + } + + @media (prefers-color-scheme: dark) { + &:not([data-mode]), + &[data-mode='dark'] { + @include dark-scheme; + } + + &[data-mode='light'] { + @include light-scheme; + } + } + + font-size: 16px; +} + +body { + background: var(--main-bg); + padding: env(safe-area-inset-top) env(safe-area-inset-right) + env(safe-area-inset-bottom) env(safe-area-inset-left); + color: var(--text-color); + -webkit-font-smoothing: antialiased; + font-family: $font-family-base; +} + +/* --- Typography --- */ + +@for $i from 1 through 5 { + h#{$i} { + @extend %heading; + + @if $i > 1 { + @extend %section; + @extend %anchor; + } + + @if $i < 5 { + $factor: 0.18rem; + + @if $i == 1 { + $factor: 0.23rem; + } + + font-size: 1rem + (5 - $i) * $factor; + } @else { + font-size: 1rem; + } + } +} + +a { + @extend %link-color; + + text-decoration: none; +} + +img { + max-width: 100%; + height: auto; + transition: all 0.35s ease-in-out; + + &[data-src] { + &[data-lqip='true'] { + &.lazyload, + &.lazyloading { + -webkit-filter: blur(20px); + filter: blur(20px); + } + } + + &:not([data-lqip='true']) { + &.lazyload, + &.lazyloading { + background: var(--img-bg); + } + + &.lazyloaded { + -webkit-animation: fade-in 0.35s ease-in; + animation: fade-in 0.35s ease-in; + } + } + + &.shadow { + -webkit-filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08)); + filter: drop-shadow(2px 4px 6px rgba(0, 0, 0, 0.08)); + box-shadow: none !important; /* cover the Bootstrap 4.6.1 styles */ + } + + @extend %img-caption; + } + + @-webkit-keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } +} + +blockquote { + border-left: 5px solid var(--blockquote-border-color); + padding-left: 1rem; + color: var(--blockquote-text-color); + + &[class^='prompt-'] { + border-left: 0; + position: relative; + padding: 1rem 1rem 1rem 3rem; + color: var(--prompt-text-color); + + @extend %rounded; + + &::before { + text-align: center; + width: 3rem; + position: absolute; + left: 0.25rem; + margin-top: 0.4rem; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + } + + > p:last-child { + margin-bottom: 0; + } + } + + @include prompt('tip', '\f0eb', 'regular'); + @include prompt('info', '\f06a'); + @include prompt('warning', '\f06a'); + @include prompt('danger', '\f071'); +} + +kbd { + font-family: inherit; + display: inline-block; + vertical-align: middle; + line-height: 1.3rem; + min-width: 1.75rem; + text-align: center; + margin: 0 0.3rem; + padding-top: 0.1rem; + color: var(--kbd-text-color); + background-color: var(--kbd-bg-color); + border-radius: 0.25rem; + border: solid 1px var(--kbd-wrap-color); + box-shadow: inset 0 -2px 0 var(--kbd-wrap-color); +} + +footer { + font-size: 0.8rem; + background-color: var(--main-bg); + + div.d-flex { + height: $footer-height; + line-height: 1.2rem; + padding-bottom: 1rem; + border-top: 1px solid var(--main-border-color); + flex-wrap: wrap; + } + + a { + @extend %text-color; + + &:hover { + @extend %link-hover; + } + } + + p { + width: 100%; + text-align: center; + margin-bottom: 0; + } +} + +/* fontawesome icons */ +i { + &.far, + &.fas { + @extend %no-cursor; + } +} + +/* --- Panels --- */ + +.access { + top: 2rem; + transition: top 0.2s ease-in-out; + margin-top: 3rem; + margin-bottom: 4rem; + + &:only-child { + position: -webkit-sticky; + position: sticky; + } + + > div { + padding-left: 1rem; + border-left: 1px solid var(--main-border-color); + + &:not(:last-child) { + margin-bottom: 4rem; + } + } + + .post-content { + font-size: 0.9rem; + } +} + +#panel-wrapper { + /* the headings */ + .panel-heading { + @include label(inherit); + } + + .post-tag { + line-height: 1.05rem; + font-size: 0.85rem; + border: 1px solid var(--btn-border-color); + border-radius: 0.8rem; + padding: 0.3rem 0.5rem; + margin: 0 0.35rem 0.5rem 0; + + &:hover { + transition: all 0.3s ease-in; + } + } +} + +#access-lastmod { + a { + &:hover { + @extend %link-hover; + } + + @extend %no-bottom-border; + + color: inherit; + } +} + +.footnotes > ol { + padding-left: 2rem; + margin-top: 0.5rem; + + > li { + &:not(:last-child) { + margin-bottom: 0.3rem; + } + + > p { + margin-left: 0.25em; + margin-top: 0; + margin-bottom: 0; + } + } +} + +.footnote { + @at-root a#{&} { + @include ml-mr(1px); + @include pl-pr(2px); + + border-bottom-style: none !important; + transition: background-color 1.5s ease-in-out; + } +} + +.reversefootnote { + @at-root a#{&} { + font-size: 0.6rem; + line-height: 1; + position: relative; + bottom: 0.25em; + margin-left: 0.25em; + border-bottom-style: none !important; + } +} + +/* --- Begin of Markdown table style --- */ + +/* it will be created by Liquid */ +.table-wrapper { + overflow-x: auto; + margin-bottom: 1.5rem; + + > table { + min-width: 100%; + overflow-x: auto; + border-spacing: 0; + + thead { + border-bottom: solid 2px rgba(210, 215, 217, 0.75); + + th { + @extend %table-cell; + } + } + + tbody { + tr { + border-bottom: 1px solid var(--tb-border-color); + + &:nth-child(2n) { + background-color: var(--tb-even-bg); + } + + &:nth-child(2n + 1) { + background-color: var(--tb-odd-bg); + } + + td { + @extend %table-cell; + } + } + } /* tbody */ + } /* table */ +} + +/* --- post --- */ + +.post-preview { + @extend %rounded; + + border: 0; + background: var(--card-bg); + box-shadow: var(--card-shadow); + + &::before { + @extend %rounded; + + content: ''; + width: 100%; + height: 100%; + position: absolute; + background-color: var(--card-hovor-bg); + opacity: 0; + transition: opacity 0.35s ease-in-out; + } + + &:hover { + &::before { + opacity: 0.3; + } + } +} + +.post { + h1 { + margin-top: 2rem; + margin-bottom: 1.5rem; + } + + p { + > img[data-src], + > a.popup { + &:not(.normal):not(.left):not(.right) { + @include align-center; + } + } + } +} + +.post-meta { + font-size: 0.85rem; + + a { + &:not([class]):hover { + @extend %link-hover; + } + } + + em { + @extend %normal-font-style; + } +} + +.post-content { + font-size: 1.08rem; + margin-top: 2rem; + overflow-wrap: break-word; + + a { + &.popup { + @extend %no-cursor; + @extend %img-caption; + @include mt-mb(0.5rem); + + cursor: zoom-in; + } + + &:not(.img-link) { + @extend %link-underline; + + &:hover { + @extend %link-hover; + } + } + } + + ol, + ul { + &:not([class]), + &.task-list { + -webkit-padding-start: 1.75rem; + padding-inline-start: 1.75rem; + + li { + margin: 0.25rem 0; + padding-left: 0.25rem; + } + + ol, + ul { + -webkit-padding-start: 1.25rem; + padding-inline-start: 1.25rem; + margin: 0.5rem 0; + } + } + } + + ul.task-list { + -webkit-padding-start: 1.25rem; + padding-inline-start: 1.25rem; + + li { + list-style-type: none; + padding-left: 0; + + /* checkbox icon */ + > i { + width: 2rem; + margin-left: -1.25rem; + color: var(--checkbox-color); + + &.checked { + color: var(--checkbox-checked-color); + } + } + + ul { + -webkit-padding-start: 1.75rem; + padding-inline-start: 1.75rem; + } + } + + input[type='checkbox'] { + margin: 0 0.5rem 0.2rem -1.3rem; + vertical-align: middle; + } + } /* ul */ + + dl > dd { + margin-left: 1rem; + } + + ::marker { + color: var(--text-muted-color); + } +} /* .post-content */ + +.tag:hover { + @extend %tag-hover; +} + +.post-tag { + display: inline-block; + min-width: 2rem; + text-align: center; + border-radius: 0.3rem; + padding: 0 0.4rem; + color: inherit; + line-height: 1.3rem; + + &:not(:last-child) { + margin-right: 0.2rem; + } +} + +.rounded-10 { + border-radius: 10px !important; +} + +.img-link { + color: transparent; + display: inline-flex; +} + +.shimmer { + overflow: hidden; + position: relative; + background: var(--img-bg); + + &::before { + content: ''; + position: absolute; + background: var(--shimmer-bg); + height: 100%; + width: 100%; + -webkit-animation: shimmer 1s infinite; + animation: shimmer 1s infinite; + } + + @-webkit-keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } + } + + @keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } + } +} + +.embed-video { + width: 100%; + height: 100%; + margin-bottom: 1rem; + + @extend %rounded; + + &.youtube { + aspect-ratio: 16 / 9; + } + + &.twitch { + aspect-ratio: 310 / 189; + } +} + +/* --- buttons --- */ +.btn-lang { + border: 1px solid !important; + padding: 1px 3px; + border-radius: 3px; + color: var(--link-color); + + &:focus { + box-shadow: none; + } +} + +/* --- Effects classes --- */ + +.loaded { + display: block !important; + + @at-root .d-flex#{&} { + display: flex !important; + } +} + +.unloaded { + display: none !important; +} + +.visible { + visibility: visible !important; +} + +.hidden { + visibility: hidden !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.btn-box-shadow { + box-shadow: 0 0 8px 0 var(--btn-box-shadow) !important; +} + +/* overwrite bootstrap muted */ +.text-muted { + color: var(--text-muted-color) !important; +} + +/* Overwrite bootstrap tooltip */ +.tooltip-inner { + font-size: 0.7rem; + max-width: 220px; + text-align: left; +} + +/* Overwrite bootstrap outline button */ +.btn.btn-outline-primary { + &:not(.disabled):hover { + border-color: #007bff !important; + } +} + +.disabled { + color: rgb(206, 196, 196); + pointer-events: auto; + cursor: not-allowed; +} + +.hide-border-bottom { + border-bottom: none !important; +} + +.input-focus { + box-shadow: none; + border-color: var(--input-focus-border-color) !important; + background: center !important; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} + +.left { + float: left; + margin: 0.75rem 1rem 1rem 0 !important; +} + +.right { + float: right; + margin: 0.75rem 0 1rem 1rem !important; +} + +/* --- Overriding --- */ + +/* magnific-popup */ + +figure .mfp-title { + text-align: center; + padding-right: 0; + margin-top: 0.5rem; +} + +.mfp-img { + transition: none; +} + +/* mermaid */ +.mermaid { + text-align: center; +} + +/* MathJax */ +mjx-container { + overflow-y: hidden; + min-width: auto !important; +} + +/* --- sidebar layout --- */ + +$sidebar-display: 'sidebar-display'; +$btn-gap: 0.8rem; // for the bottom icons +$btn-border-width: 3px; +$btn-mb: 0.5rem; + +#sidebar { + @include pl-pr(0); + + position: fixed; + top: 0; + left: 0; + height: 100%; + overflow-y: auto; + width: $sidebar-width; + z-index: 99; + background: var(--sidebar-bg); + + /* Hide scrollbar for Chrome, Safari and Opera */ + &::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + + %sidebar-link-hover { + &:hover { + color: var(--sidebar-active-color); + } + } + + a { + @extend %sidebar-links; + } + + #avatar { + display: block; + width: 7rem; + height: 7rem; + overflow: hidden; + box-shadow: var(--avatar-border-color) 0 0 0 2px; + transform: translateZ(0); /* fixed the zoom in Safari */ + + img { + transition: transform 0.5s; + + &:hover { + transform: scale(1.2); + } + } + } + + .profile-wrapper { + @include mt-mb(2.5rem); + @extend %clickable-transition; + + padding-left: 2.5rem; + padding-right: 1.25rem; + width: 100%; + } + + .site-title { + font-weight: 900; + font-size: 1.75rem; + line-height: 1.2; + letter-spacing: 0.25px; + color: rgba(134, 133, 133, 0.99); + margin-top: 1.25rem; + margin-bottom: 0.5rem; + + a { + @extend %clickable-transition; + @extend %sidebar-link-hover; + } + } + + .site-subtitle { + font-size: 95%; + color: var(--sidebar-muted-color); + margin-top: 0.25rem; + word-spacing: 1px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + + ul { + margin-bottom: 2rem; + + li.nav-item { + opacity: 0.9; + width: 100%; + padding-left: 1.5rem; + padding-right: 1.5rem; + + a.nav-link { + @include pt-pb(0.6rem); + + display: flex; + align-items: center; + border-radius: 0.75rem; + font-weight: 600; + + &:hover { + background-color: var(--sidebar-hover-bg); + } + + i { + font-size: 95%; + opacity: 0.8; + margin-right: 1.5rem; + } + + span { + font-size: 90%; + letter-spacing: 0.2px; + } + } + + &.active { + .nav-link { + color: var(--sidebar-active-color); + background-color: var(--sidebar-hover-bg); + + span { + opacity: 1; + } + } + } + + &:not(:first-child) { + margin-top: 0.25rem; + } + } + } + + .sidebar-bottom { + @include pl-pr(2rem); + + margin-bottom: 1.5rem; + + %button { + width: 1.75rem; + height: 1.75rem; + margin-bottom: $btn-mb; // multi line gap + border-radius: 50%; + color: var(--sidebar-btn-color); + background-color: var(--sidebar-btn-bg); + text-align: center; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + background-color: var(--sidebar-hover-bg); + } + } + + a { + @extend %button; + @extend %sidebar-link-hover; + @extend %clickable-transition; + + &:not(:last-child) { + margin-right: $btn-gap; + } + } + + i { + line-height: 1.75rem; + } + + .mode-toggle { + padding: 0; + border: 0; + + @extend %button; + @extend %sidebar-links; + @extend %sidebar-link-hover; + } + + .icon-border { + @extend %no-cursor; + @include ml-mr(calc(($btn-gap - $btn-border-width) / 2)); + + background-color: var(--sidebar-muted-color); + content: ''; + width: $btn-border-width; + height: $btn-border-width; + border-radius: 50%; + margin-bottom: $btn-mb; + } + } /* .sidebar-bottom */ +} /* #sidebar */ + +@media (hover: hover) { + #sidebar ul > li:last-child::after { + transition: top 0.5s ease; + } + + .nav-link { + transition: background-color 0.3s ease-in-out; + } + + .post-preview { + transition: background-color 0.35s ease-in-out; + } +} + +#search-result-wrapper { + display: none; + height: 100%; + width: 100%; + overflow: auto; + + .post-content { + margin-top: 2rem; + } +} + +/* --- top-bar --- */ + +#topbar-wrapper { + height: $topbar-height; + background-color: var(--topbar-bg); +} + +#topbar { + /* icons */ + i { + color: #999999; + } + + #breadcrumb { + font-size: 1rem; + color: gray; + padding-left: 0.5rem; + + a:hover { + @extend %link-hover; + } + + span { + &:not(:last-child) { + &::after { + content: '›'; + padding: 0 0.3rem; + } + } + } + } +} /* #topbar */ + +#sidebar-trigger, +#search-trigger { + display: none; +} + +#search-wrapper { + display: flex; + width: 100%; + border-radius: 1rem; + border: 1px solid var(--search-wrapper-border-color); + background: var(--main-bg); + padding: 0 0.5rem; + + i { + z-index: 2; + font-size: 0.9rem; + color: var(--search-icon-color); + } +} + +/* 'Cancel' link */ +#search-cancel { + color: var(--link-color); + margin-left: 0.75rem; + display: none; + white-space: nowrap; + + @extend %cursor-pointer; +} + +#search-input { + background: center; + border: 0; + border-radius: 0; + padding: 0.18rem 0.3rem; + color: var(--text-color); + height: auto; + + &:focus { + box-shadow: none; + + &.form-control { + &::-moz-placeholder { + @include input-placeholder; + } + &::-webkit-input-placeholder { + @include input-placeholder; + } + &:-ms-input-placeholder { + @include input-placeholder; + } + &::-ms-input-placeholder { + @include input-placeholder; + } + &::placeholder { + @include input-placeholder; + } + } + } +} + +#search-hints { + padding: 0 1rem; + + h4 { + margin-bottom: 1.5rem; + } + + .post-tag { + display: inline-block; + line-height: 1rem; + font-size: 1rem; + background: var(--search-tag-bg); + border: none; + padding: 0.5rem; + margin: 0 1.25rem 1rem 0; + + &::before { + content: '#'; + color: var(--text-muted-color); + padding-right: 0.2rem; + } + + @extend %link-color; + } +} + +#search-results { + padding-bottom: 3rem; + + a { + &:hover { + @extend %link-hover; + } + + @extend %link-color; + @extend %no-bottom-border; + @extend %heading; + + font-size: 1.4rem; + line-height: 2.5rem; + } + + > div { + width: 100%; + + &:not(:last-child) { + margin-bottom: 1rem; + } + + /* icons */ + i { + color: #818182; + margin-right: 0.15rem; + font-size: 80%; + } + + > p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + } + } +} /* #search-results */ + +#topbar-title { + display: none; + font-size: 1.1rem; + font-weight: 600; + font-family: sans-serif; + color: var(--topbar-text-color); + text-align: center; + width: 70%; + overflow: hidden; + text-overflow: ellipsis; + word-break: keep-all; + white-space: nowrap; +} + +#core-wrapper { + line-height: 1.75; + + .categories, + #tags, + #archives { + a:not(:hover) { + @extend %no-bottom-border; + } + } +} + +#mask { + display: none; + position: fixed; + inset: 0 0 0 0; + height: 100%; + width: 100%; + z-index: 1; + + @at-root [#{$sidebar-display}] & { + display: block !important; + } +} + +/* --- main wrapper --- */ + +#main-wrapper { + background-color: var(--main-bg); + position: relative; + min-height: calc(100vh - $footer-height-mobile); + + @include pl-pr(0); +} + +#topbar-wrapper.row, +#main > .row, +#search-result-wrapper > .row { + @include ml-mr(0); +} + +/* --- button back-to-top --- */ + +#back-to-top { + $size: 3rem; + + display: none; + z-index: 1; + cursor: pointer; + position: fixed; + right: 1rem; + bottom: 2rem; + background: var(--button-bg); + color: var(--btn-backtotop-color); + padding: 0; + width: $size; + height: $size; + border-radius: 50%; + border: 1px solid var(--btn-backtotop-border-color); + transition: transform 0.2s ease-out; + -webkit-transition: transform 0.2s ease-out; + + &:hover { + transform: translate3d(0, -5px, 0); + -webkit-transform: translate3d(0, -5px, 0); + } + + i { + line-height: $size; + position: relative; + bottom: 2px; + } +} + +#notification { + @-webkit-keyframes popup { + from { + opacity: 0; + bottom: 0; + } + } + + @keyframes popup { + from { + opacity: 0; + bottom: 0; + } + } + + .toast-header { + background: none; + border-bottom: none; + color: inherit; + } + + .toast-body { + font-family: Lato, sans-serif; + line-height: 1.25rem; + + button { + font-size: 90%; + min-width: 4rem; + } + } + + &.toast { + &.show { + display: block; + min-width: 20rem; + border-radius: 0.5rem; + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + background-color: rgba(255, 255, 255, 0.5); + color: #1b1b1eba; + position: fixed; + left: 50%; + bottom: 20%; + transform: translateX(-50%); + -webkit-animation: popup 0.8s; + animation: popup 0.8s; + } + } +} + +/* + Responsive Design: + + {sidebar, content, panel} >= 1200px screen width + {sidebar, content} >= 850px screen width + {content} <= 849px screen width + +*/ + +@media all and (max-width: 576px) { + #main-wrapper { + min-height: calc(100vh - #{$footer-height-mobile}); + } + + #core-wrapper { + .post-content { + > blockquote[class^='prompt-'] { + @include ml-mr(-1.25rem); + + border-radius: 0; + max-width: none; + } + } + } + + #avatar { + width: 5rem; + height: 5rem; + } +} + +@media all and (max-width: 768px) { + %full-width { + max-width: 100%; + } + + #topbar { + @extend %full-width; + } + + #main { + @extend %full-width; + @include pl-pr(0); + } +} + +/* hide sidebar and panel */ +@media all and (max-width: 849px) { + @mixin slide($append: null) { + $basic: transform 0.4s ease; + + @if $append { + transition: $basic, $append; + } @else { + transition: $basic; + } + } + + html, + body { + overflow-x: hidden; + } + + footer { + @include slide; + + height: $footer-height-mobile; + + div.d-flex { + padding: 1.5rem 0; + line-height: 1.65; + flex-wrap: wrap; + } + } + + [#{$sidebar-display}] { + #sidebar { + transform: translateX(0); + } + + #main-wrapper, + footer { + transform: translateX(#{$sidebar-width}); + } + + #back-to-top { + visibility: hidden; + } + } + + #sidebar { + @include slide; + + transform: translateX(-#{$sidebar-width}); /* hide */ + -webkit-transform: translateX(-#{$sidebar-width}); + } + + #main-wrapper { + @include slide; + } + + #topbar, + #main, + footer > .container { + max-width: 100%; + } + + #search-result-wrapper { + width: 100%; + } + + #breadcrumb, + #search-wrapper { + display: none; + } + + #topbar-wrapper { + @include slide(top 0.2s ease); + + left: 0; + } + + #core-wrapper, + #panel-wrapper { + margin-top: 0; + } + + #topbar-title, + #sidebar-trigger, + #search-trigger { + display: block; + } + + #search-result-wrapper .post-content { + letter-spacing: 0; + } + + #tags { + justify-content: center !important; + } + + h1.dynamic-title { + display: none; + + ~ .post-content { + margin-top: 2.5rem; + } + } +} /* max-width: 849px */ + +/* Phone & Pad */ +@media all and (min-width: 577px) and (max-width: 1199px) { + footer .d-flex > div { + width: 312px; + } +} + +/* Sidebar is visible */ +@media all and (min-width: 850px) { + /* Solved jumping scrollbar */ + html { + overflow-y: scroll; + } + + #main-wrapper, + footer { + margin-left: $sidebar-width; + } + + #main-wrapper { + min-height: calc(100vh - $footer-height); + } + + footer { + p { + width: auto; + &:last-child { + &::before { + content: '-'; + margin: 0 0.75rem; + opacity: 0.8; + } + } + } + } + + #sidebar { + .profile-wrapper { + margin-top: 3rem; + } + } + + #search-hints { + display: none; + } + + #search-wrapper { + max-width: $search-max-width; + } + + #search-result-wrapper { + max-width: $main-content-max-width; + justify-content: start !important; + } + + .post { + h1 { + margin-top: 3rem; + } + } + + div.post-content .table-wrapper > table { + min-width: 70%; + } + + /* button 'back-to-Top' position */ + #back-to-top { + bottom: 5.5rem; + right: 5%; + } + + #topbar-title { + text-align: left; + } +} + +/* Pad horizontal */ +@media all and (min-width: 992px) and (max-width: 1199px) { + #main .col-lg-11 { + flex: 0 0 96%; + max-width: 96%; + } +} + +/* Compact icons in sidebar & panel hidden */ +@media all and (min-width: 850px) and (max-width: 1199px) { + #search-results > div { + max-width: 700px; + } + + #breadcrumb { + width: 65%; + overflow: hidden; + text-overflow: ellipsis; + word-break: keep-all; + white-space: nowrap; + } +} + +/* panel hidden */ +@media all and (max-width: 1199px) { + #panel-wrapper { + display: none; + } + + #main > div.row { + justify-content: center !important; + } +} + +/* --- desktop mode, both sidebar and panel are visible --- */ + +@media all and (min-width: 1200px) { + #back-to-top { + bottom: 6.5rem; + } + + #search-wrapper { + margin-right: 4rem; + } + + #search-input { + transition: all 0.3s ease-in-out; + } + + #search-results > div { + width: 46%; + + &:nth-child(odd) { + margin-right: 1.5rem; + } + + &:nth-child(even) { + margin-left: 1.5rem; + } + + &:last-child:nth-child(odd) { + position: relative; + right: 24.3%; + } + } + + .post-content { + font-size: 1.03rem; + } + + footer { + div.d-felx { + width: 85%; + } + } +} + +@media all and (min-width: 1400px) { + #back-to-top { + right: calc((100vw - #{$sidebar-width} - 1140px) / 2 + 3rem); + } +} + +@media all and (min-width: 1650px) { + $icon-gap: 1rem; + + #main-wrapper, + footer { + margin-left: $sidebar-width-large; + } + + #topbar-wrapper { + left: $sidebar-width-large; + } + + #search-wrapper { + margin-right: calc( + #{$main-content-max-width} * 0.25 - #{$search-max-width} - 0.75rem + ); + } + + #main, + footer > .container { + max-width: $main-content-max-width; + padding-left: 1.75rem !important; + padding-right: 1.75rem !important; + } + + #core-wrapper, + #tail-wrapper { + padding-right: 4.5rem !important; + } + + #back-to-top { + right: calc( + (100vw - #{$sidebar-width-large} - #{$main-content-max-width}) / 2 + 2rem + ); + } + + #sidebar { + width: $sidebar-width-large; + + $icon-gap: 1rem; // for the bottom icons + + .profile-wrapper { + margin-top: 3.5rem; + margin-bottom: 2.5rem; + padding-left: 3.5rem; + } + + ul { + li.nav-item { + @include pl-pr(2.75rem); + } + } + + .sidebar-bottom { + padding-left: 2.75rem; + margin-bottom: 1.75rem; + + a:not(:last-child) { + margin-right: $icon-gap; + } + + .icon-border { + @include ml-mr(calc(($icon-gap - $btn-border-width) / 2)); + } + } + } +} /* min-width: 1650px */ diff --git a/_sass/addon/module.scss b/_sass/addon/module.scss new file mode 100644 index 0000000..10e0d69 --- /dev/null +++ b/_sass/addon/module.scss @@ -0,0 +1,173 @@ +/* +* Mainly scss modules, only imported to `assets/css/main.scss` +*/ + +/* ---------- scss placeholder --------- */ + +%heading { + color: var(--heading-color); + font-weight: 400; + font-family: $font-family-heading; +} + +%section { + #core-wrapper & { + margin-top: 2.5rem; + margin-bottom: 1.25rem; + + &:focus { + outline: none; /* avoid outline in Safari */ + } + } +} + +%anchor { + .anchor { + font-size: 80%; + } + + @media (hover: hover) { + .anchor { + visibility: hidden; + opacity: 0; + transition: opacity 0.25s ease-in, visibility 0s ease-in 0.25s; + } + + &:hover { + .anchor { + visibility: visible; + opacity: 1; + transition: opacity 0.25s ease-in, visibility 0s ease-in 0s; + } + } + } +} + +%tag-hover { + background: var(--tag-hover); + transition: background 0.35s ease-in-out; +} + +%table-cell { + padding: 0.4rem 1rem; + font-size: 95%; + white-space: nowrap; +} + +%link-hover { + color: #d2603a !important; + border-bottom: 1px solid #d2603a; + text-decoration: none; +} + +%link-color { + color: var(--link-color); +} + +%link-underline { + border-bottom: 1px solid var(--link-underline-color); +} + +%clickable-transition { + transition: all 0.3s ease-in-out; +} + +%no-cursor { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +%no-bottom-border { + border-bottom: none; +} + +%cursor-pointer { + cursor: pointer; +} + +%normal-font-style { + font-style: normal; +} + +%rounded { + border-radius: $base-radius; +} + +%img-caption { + + em { + display: block; + text-align: center; + font-style: normal; + font-size: 80%; + padding: 0; + color: #6d6c6c; + } +} + +%sidebar-links { + color: rgba(117, 117, 117, 0.9); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +%text-clip { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +/* ---------- scss mixin --------- */ + +@mixin mt-mb($value) { + margin-top: $value; + margin-bottom: $value; +} + +@mixin ml-mr($value) { + margin-left: $value; + margin-right: $value; +} + +@mixin pt-pb($val) { + padding-top: $val; + padding-bottom: $val; +} + +@mixin pl-pr($val) { + padding-left: $val; + padding-right: $val; +} + +@mixin input-placeholder { + opacity: 0.6; +} + +@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) { + color: $color; + font-size: $font-size; + font-weight: $font-weight; +} + +@mixin align-center { + position: relative; + left: 50%; + transform: translateX(-50%); +} + +@mixin prompt($type, $fa-content, $fa-style: 'solid') { + &.prompt-#{$type} { + background-color: var(--prompt-#{$type}-bg); + + &::before { + content: $fa-content; + color: var(--prompt-#{$type}-icon-color); + font: var(--fa-font-#{$fa-style}); + } + } +} diff --git a/_sass/addon/syntax.scss b/_sass/addon/syntax.scss new file mode 100644 index 0000000..df756a7 --- /dev/null +++ b/_sass/addon/syntax.scss @@ -0,0 +1,270 @@ +/* +* The syntax highlight. +*/ + +@import 'colors/light-syntax'; +@import 'colors/dark-syntax'; + +html { + @media (prefers-color-scheme: light) { + &:not([data-mode]), + &[data-mode='light'] { + @include light-syntax; + } + + &[data-mode='dark'] { + @include dark-syntax; + } + } + + @media (prefers-color-scheme: dark) { + &:not([data-mode]), + &[data-mode='dark'] { + @include dark-syntax; + } + + &[data-mode='light'] { + @include light-syntax; + } + } +} + +/* -- code snippets -- */ + +%code-snippet-bg { + background-color: var(--highlight-bg-color); +} + +%code-snippet-padding { + padding-left: 1rem; + padding-right: 1.5rem; +} + +.highlighter-rouge { + color: var(--highlighter-rouge-color); + margin-top: 0.5rem; + margin-bottom: 1.2em; /* Override BS Inline-code style */ +} + +.highlight { + @extend %rounded; + @extend %code-snippet-bg; + + @at-root figure#{&} { + @extend %code-snippet-bg; + } + + overflow: auto; + padding-top: 0.5rem; + padding-bottom: 1rem; + + pre { + margin-bottom: 0; + font-size: $code-font-size; + line-height: 1.4rem; + word-wrap: normal; /* Fixed Safari overflow-x */ + } + + table { + td pre { + overflow: visible; /* Fixed iOS safari overflow-x */ + word-break: normal; /* Fixed iOS safari linenos code break */ + } + } + + .lineno { + padding-right: 0.5rem; + min-width: 2.2rem; + text-align: right; + color: var(--highlight-lineno-color); + -webkit-user-select: none; + -moz-user-select: none; + -o-user-select: none; + -ms-user-select: none; + user-select: none; + } +} /* .highlight */ + +code { + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; + + &.highlighter-rouge { + font-size: $code-font-size; + padding: 3px 5px; + word-break: break-word; + border-radius: 4px; + background-color: var(--inline-code-bg); + } + + &.filepath { + background-color: inherit; + color: var(--filepath-text-color); + font-weight: 600; + padding: 0; + } + + a > &.highlighter-rouge { + padding-bottom: 0; /* show link's underlinke */ + color: inherit; + } + + a:hover > &.highlighter-rouge { + border-bottom: none; + } + + blockquote & { + color: inherit; + } +} + +td.rouge-code { + @extend %code-snippet-padding; + + /* + Prevent some browser extends from + changing the URL string of code block. + */ + a { + color: inherit !important; + border-bottom: none !important; + pointer-events: none; + } +} + +div[class^='language-'] { + @extend %rounded; + @extend %code-snippet-bg; + + box-shadow: var(--language-border-color) 0 0 0 1px; + + .post-content > & { + @include ml-mr(-1.25rem); + + border-radius: 0; + } +} + +/* Hide line numbers for default, console, and terminal code snippets */ +div { + &.nolineno, + &.language-plaintext, + &.language-console, + &.language-terminal { + pre.lineno { + display: none; + } + + td.rouge-code { + padding-left: 1.5rem; + } + } +} + +.code-header { + @extend %no-cursor; + + $code-header-height: 2.25rem; + + display: flex; + justify-content: space-between; + align-items: center; + height: $code-header-height; + margin-left: 1rem; + margin-right: 0.5rem; + + /* the label block */ + span { + /* label icon */ + i { + font-size: 1rem; + margin-right: 0.5rem; + color: var(--code-header-icon-color); + + &.small { + font-size: 70%; + } + } + + @at-root [file] #{&} > i { + position: relative; + top: 1px; /* center the file icon */ + } + + /* label text */ + &::after { + content: attr(data-label-text); + font-size: 0.85rem; + font-weight: 600; + color: var(--code-header-text-color); + } + } + + /* clipboard */ + button { + @extend %cursor-pointer; + @extend %rounded; + + border: 1px solid transparent; + height: $code-header-height; + width: $code-header-height; + padding: 0; + background-color: inherit; + + i { + color: var(--code-header-icon-color); + } + + &[timeout] { + &:hover { + border-color: var(--clipboard-checked-color); + } + + i { + color: var(--clipboard-checked-color); + } + } + + &:focus { + outline: none; + } + + &:not([timeout]):hover { + background-color: rgba(128, 128, 128, 0.37); + + i { + color: white; + } + } + } +} + +@media all and (min-width: 576px) { + div[class^='language-'] { + .post-content > & { + @include ml-mr(0); + + border-radius: $base-radius; + } + + .code-header { + @include ml-mr(0); + + &::before { + $dot-size: 0.75rem; + $dot-margin: 0.5rem; + + content: ''; + display: inline-block; + margin-left: 1rem; + width: $dot-size; + height: $dot-size; + border-radius: 50%; + background-color: var(--code-header-muted-color); + box-shadow: ($dot-size + $dot-margin) 0 0 var(--code-header-muted-color), + ($dot-size + $dot-margin) * 2 0 0 var(--code-header-muted-color); + } + } + } +} diff --git a/_sass/addon/variables.scss b/_sass/addon/variables.scss new file mode 100644 index 0000000..0c68281 --- /dev/null +++ b/_sass/addon/variables.scss @@ -0,0 +1,27 @@ +/* + * The SCSS variables + */ + +/* sidebar */ + +$sidebar-width: 260px !default; /* the basic width */ +$sidebar-width-large: 300px !default; /* screen width: >= 1650px */ + +/* other framework sizes */ + +$topbar-height: 3rem !default; +$search-max-width: 210px !default; +$footer-height: 5rem !default; +$footer-height-mobile: 6rem !default; /* screen width: < 850px */ +$main-content-max-width: 1250px !default; +$bottom-min-height: 35rem !default; +$base-radius: 0.5rem; + +/* syntax highlight */ + +$code-font-size: 0.85rem !default; + +/* fonts */ + +$font-family-base: 'Source Sans Pro', 'Microsoft Yahei', sans-serif; +$font-family-heading: Lato, 'Microsoft Yahei', sans-serif; diff --git a/_sass/colors/dark-syntax.scss b/_sass/colors/dark-syntax.scss new file mode 100644 index 0000000..36e9651 --- /dev/null +++ b/_sass/colors/dark-syntax.scss @@ -0,0 +1,91 @@ +/* + * The syntax dark mode styles. + */ + +@mixin dark-syntax { + --language-border-color: rgba(84, 83, 83, 0.27); + --highlight-bg-color: #252525; + --highlighter-rouge-color: #de6b18; + --highlight-lineno-color: #6c6c6d; + --inline-code-bg: #272822; + --code-header-text-color: #6a6a6a; + --code-header-muted-color: rgb(60, 60, 60); + --code-header-icon-color: rgb(86, 86, 86); + --clipboard-checked-color: #2bcc2b; + --filepath-text-color: #bdbdbd; + + /* override Bootstrap */ + pre { + color: #bfbfbf; + } + + .highlight .gp { + color: #818c96; + } + + /* syntax highlight colors from https://raw.githubusercontent.com/jwarby/pygments-css/master/monokai.css */ + + .highlight pre { background-color: var(--highlight-bg-color); } + .highlight .hll { background-color: var(--highlight-bg-color); } + .highlight .c { color: #75715e; } /* Comment */ + .highlight .err { color: #960050; background-color: #1e0010; } /* Error */ + .highlight .k { color: #66d9ef; } /* Keyword */ + .highlight .l { color: #ae81ff; } /* Literal */ + .highlight .n { color: #f8f8f2; } /* Name */ + .highlight .o { color: #f92672; } /* Operator */ + .highlight .p { color: #f8f8f2; } /* Punctuation */ + .highlight .cm { color: #75715e; } /* Comment.Multiline */ + .highlight .cp { color: #75715e; } /* Comment.Preproc */ + .highlight .c1 { color: #75715e; } /* Comment.Single */ + .highlight .cs { color: #75715e; } /* Comment.Special */ + .highlight .ge { color: inherit; font-style: italic; } /* Generic.Emph */ + .highlight .gs { font-weight: bold; } /* Generic.Strong */ + .highlight .kc { color: #66d9ef; } /* Keyword.Constant */ + .highlight .kd { color: #66d9ef; } /* Keyword.Declaration */ + .highlight .kn { color: #f92672; } /* Keyword.Namespace */ + .highlight .kp { color: #66d9ef; } /* Keyword.Pseudo */ + .highlight .kr { color: #66d9ef; } /* Keyword.Reserved */ + .highlight .kt { color: #66d9ef; } /* Keyword.Type */ + .highlight .ld { color: #e6db74; } /* Literal.Date */ + .highlight .m { color: #ae81ff; } /* Literal.Number */ + .highlight .s { color: #e6db74; } /* Literal.String */ + .highlight .na { color: #a6e22e; } /* Name.Attribute */ + .highlight .nb { color: #f8f8f2; } /* Name.Builtin */ + .highlight .nc { color: #a6e22e; } /* Name.Class */ + .highlight .no { color: #66d9ef; } /* Name.Constant */ + .highlight .nd { color: #a6e22e; } /* Name.Decorator */ + .highlight .ni { color: #f8f8f2; } /* Name.Entity */ + .highlight .ne { color: #a6e22e; } /* Name.Exception */ + .highlight .nf { color: #a6e22e; } /* Name.Function */ + .highlight .nl { color: #f8f8f2; } /* Name.Label */ + .highlight .nn { color: #f8f8f2; } /* Name.Namespace */ + .highlight .nx { color: #a6e22e; } /* Name.Other */ + .highlight .py { color: #f8f8f2; } /* Name.Property */ + .highlight .nt { color: #f92672; } /* Name.Tag */ + .highlight .nv { color: #f8f8f2; } /* Name.Variable */ + .highlight .ow { color: #f92672; } /* Operator.Word */ + .highlight .w { color: #f8f8f2; } /* Text.Whitespace */ + .highlight .mf { color: #ae81ff; } /* Literal.Number.Float */ + .highlight .mh { color: #ae81ff; } /* Literal.Number.Hex */ + .highlight .mi { color: #ae81ff; } /* Literal.Number.Integer */ + .highlight .mo { color: #ae81ff; } /* Literal.Number.Oct */ + .highlight .sb { color: #e6db74; } /* Literal.String.Backtick */ + .highlight .sc { color: #e6db74; } /* Literal.String.Char */ + .highlight .sd { color: #e6db74; } /* Literal.String.Doc */ + .highlight .s2 { color: #e6db74; } /* Literal.String.Double */ + .highlight .se { color: #ae81ff; } /* Literal.String.Escape */ + .highlight .sh { color: #e6db74; } /* Literal.String.Heredoc */ + .highlight .si { color: #e6db74; } /* Literal.String.Interpol */ + .highlight .sx { color: #e6db74; } /* Literal.String.Other */ + .highlight .sr { color: #e6db74; } /* Literal.String.Regex */ + .highlight .s1 { color: #e6db74; } /* Literal.String.Single */ + .highlight .ss { color: #e6db74; } /* Literal.String.Symbol */ + .highlight .bp { color: #f8f8f2; } /* Name.Builtin.Pseudo */ + .highlight .vc { color: #f8f8f2; } /* Name.Variable.Class */ + .highlight .vg { color: #f8f8f2; } /* Name.Variable.Global */ + .highlight .vi { color: #f8f8f2; } /* Name.Variable.Instance */ + .highlight .il { color: #ae81ff; } /* Literal.Number.Integer.Long */ + .highlight .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */ + .highlight .gd { color: #f92672; background-color: #561c08; } /* Generic.Deleted & Diff Deleted */ + .highlight .gi { color: #a6e22e; background-color: #0b5858; } /* Generic.Inserted & Diff Inserted */ +} diff --git a/_sass/colors/dark-typography.scss b/_sass/colors/dark-typography.scss new file mode 100644 index 0000000..310828e --- /dev/null +++ b/_sass/colors/dark-typography.scss @@ -0,0 +1,151 @@ +/* + * The main dark mode styles + */ + +@mixin dark-scheme { + /* Framework color */ + --main-bg: rgb(27, 27, 30); + --mask-bg: rgb(68, 69, 70); + --main-border-color: rgb(44, 45, 45); + + /* Common color */ + --text-color: rgb(175, 176, 177); + --text-muted-color: rgb(107, 116, 124); + --heading-color: #cccccc; + --blockquote-border-color: rgb(66, 66, 66); + --blockquote-text-color: rgb(117, 117, 117); + --link-color: rgb(138, 180, 248); + --link-underline-color: rgb(82, 108, 150); + --button-bg: rgb(39, 40, 43); + --btn-border-color: rgb(63, 65, 68); + --btn-backtotop-color: var(--text-color); + --btn-backtotop-border-color: var(--btn-border-color); + --btn-box-shadow: var(--main-bg); + --card-header-bg: rgb(48, 48, 48); + --label-color: rgb(108, 117, 125); + --checkbox-color: rgb(118, 120, 121); + --checkbox-checked-color: var(--link-color); + --img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%); + --shimmer-bg: linear-gradient( + 90deg, + rgba(255, 255, 255, 0) 0%, + rgba(58, 55, 55, 0.4) 50%, + rgba(255, 255, 255, 0) 100% + ); + + /* Sidebar */ + --sidebar-bg: radial-gradient(circle, #242424 0%, #1d1f27 100%); + --sidebar-muted-color: #6d6c6b; + --sidebar-active-color: rgb(255, 255, 255, 0.95); + --sidebar-hover-bg: rgb(54, 54, 54, 0.33); + --sidebar-btn-bg: rgb(84, 83, 83, 0.3); + --sidebar-btn-color: #787878; + --avatar-border-color: rgb(206, 206, 206, 0.9); + + /* Topbar */ + --topbar-bg: rgb(27, 27, 30, 0.64); + --topbar-text-color: var(--text-color); + --search-wrapper-border-color: rgb(55, 55, 55); + --search-icon-color: rgb(100, 102, 105); + --input-focus-border-color: rgb(112, 114, 115); + + /* Home page */ + --post-list-text-color: rgb(175, 176, 177); + --btn-patinator-text-color: var(--text-color); + --btn-paginator-hover-color: rgb(64, 65, 66); + --btn-paginator-border-color: var(--btn-border-color); + --btn-text-color: var(--text-color); + + /* Posts */ + --toc-highlight: rgb(116, 178, 243); + --tag-bg: rgb(41, 40, 40); + --tag-hover: rgb(43, 56, 62); + --tb-odd-bg: rgba(42, 47, 53, 0.52); /* odd rows of the posts' table */ + --tb-even-bg: rgb(31, 31, 34); /* even rows of the posts' table */ + --tb-border-color: var(--tb-odd-bg); + --footnote-target-bg: rgb(63, 81, 181); + --btn-share-color: #6c757d; + --btn-share-hover-color: #bfc1ca; + --relate-post-date: var(--text-muted-color); + --card-bg: #1e1e1e; + --card-hovor-bg: #464d51; + --card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0, + rgb(137, 135, 135, 0.24) 0 0 0 1px; + --kbd-wrap-color: #6a6a6a; + --kbd-text-color: #d3d3d3; + --kbd-bg-color: #242424; + --prompt-text-color: rgb(216, 212, 212, 0.75); + --prompt-tip-bg: rgb(22, 60, 36, 0.64); + --prompt-tip-icon-color: rgb(15, 164, 15, 0.81); + --prompt-info-bg: rgb(7, 59, 104, 0.8); + --prompt-info-icon-color: #0075d1; + --prompt-warning-bg: rgb(90, 69, 3, 0.88); + --prompt-warning-icon-color: rgb(255, 165, 0, 0.8); + --prompt-danger-bg: rgb(86, 28, 8, 0.8); + --prompt-danger-icon-color: #cd0202; + + /* tags */ + --tag-border: rgb(59, 79, 88); + --tag-shadow: rgb(32, 33, 33); + --search-tag-bg: var(--tag-bg); + --dash-color: rgb(63, 65, 68); + + /* categories */ + --categories-border: rgb(64, 66, 69, 0.5); + --categories-hover-bg: rgb(73, 75, 76); + --categories-icon-hover-color: white; + + /* archives */ + --timeline-node-bg: rgb(150, 152, 156); + --timeline-color: rgb(63, 65, 68); + --timeline-year-dot-color: var(--timeline-color); + + .light { + display: none; + } + + hr { + border-color: var(--main-border-color); + } + + /* categories */ + .categories.card, + .list-group-item { + background-color: var(--card-bg); + } + + .categories { + .card-header { + background-color: var(--card-header-bg); + } + + .list-group-item { + border-left: none; + border-right: none; + padding-left: 2rem; + border-color: var(--categories-border); + + &:last-child { + border-bottom-color: var(--card-bg); + } + } + } + + #archives li:nth-child(odd) { + background-image: linear-gradient( + to left, + rgb(26, 26, 30), + rgb(39, 39, 45), + rgb(39, 39, 45), + rgb(39, 39, 45), + rgb(26, 26, 30) + ); + } + + color-scheme: dark; + + /* stylelint-disable-next-line selector-id-pattern */ + #disqus_thread { + color-scheme: none; + } +} /* dark-scheme */ diff --git a/_sass/colors/light-syntax.scss b/_sass/colors/light-syntax.scss new file mode 100644 index 0000000..040a5f5 --- /dev/null +++ b/_sass/colors/light-syntax.scss @@ -0,0 +1,83 @@ +/* + * The syntax light mode code snippet colors. + */ + +@mixin light-syntax { + /* see: */ + .highlight .hll { background-color: #ffffcc; } + .highlight .c { color: #999988; font-style: italic; } /* Comment */ + .highlight .err { color: #a61717; background-color: #e3d2d2; } /* Error */ + .highlight .k { color: #000000; font-weight: bold; } /* Keyword */ + .highlight .o { color: #000000; font-weight: bold; } /* Operator */ + .highlight .cm { color: #999988; font-style: italic; } /* Comment.Multiline */ + .highlight .cp { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Preproc */ + .highlight .c1 { color: #999988; font-style: italic; } /* Comment.Single */ + .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } /* Comment.Special */ + .highlight .gd { color: #d01040; background-color: #ffdddd; } /* Generic.Deleted */ + .highlight .ge { color: #000000; font-style: italic; } /* Generic.Emph */ + .highlight .gr { color: #aa0000; } /* Generic.Error */ + .highlight .gh { color: #999999; } /* Generic.Heading */ + .highlight .gi { color: #008080; background-color: #ddffdd; } /* Generic.Inserted */ + .highlight .go { color: #888888; } /* Generic.Output */ + .highlight .gp { color: #555555; } /* Generic.Prompt */ + .highlight .gs { font-weight: bold; } /* Generic.Strong */ + .highlight .gu { color: #aaaaaa; } /* Generic.Subheading */ + .highlight .gt { color: #aa0000; } /* Generic.Traceback */ + .highlight .kc { color: #000000; font-weight: bold; } /* Keyword.Constant */ + .highlight .kd { color: #000000; font-weight: bold; } /* Keyword.Declaration */ + .highlight .kn { color: #000000; font-weight: bold; } /* Keyword.Namespace */ + .highlight .kp { color: #000000; font-weight: bold; } /* Keyword.Pseudo */ + .highlight .kr { color: #000000; font-weight: bold; } /* Keyword.Reserved */ + .highlight .kt { color: #445588; font-weight: bold; } /* Keyword.Type */ + .highlight .m { color: #009999; } /* Literal.Number */ + .highlight .s { color: #d01040; } /* Literal.String */ + .highlight .na { color: #008080; } /* Name.Attribute */ + .highlight .nb { color: #0086b3; } /* Name.Builtin */ + .highlight .nc { color: #445588; font-weight: bold; } /* Name.Class */ + .highlight .no { color: #008080; } /* Name.Constant */ + .highlight .nd { color: #3c5d5d; font-weight: bold; } /* Name.Decorator */ + .highlight .ni { color: #800080; } /* Name.Entity */ + .highlight .ne { color: #990000; font-weight: bold; } /* Name.Exception */ + .highlight .nf { color: #990000; font-weight: bold; } /* Name.Function */ + .highlight .nl { color: #990000; font-weight: bold; } /* Name.Label */ + .highlight .nn { color: #555555; } /* Name.Namespace */ + .highlight .nt { color: #000080; } /* Name.Tag */ + .highlight .nv { color: #008080; } /* Name.Variable */ + .highlight .ow { color: #000000; font-weight: bold; } /* Operator.Word */ + .highlight .w { color: #bbbbbb; } /* Text.Whitespace */ + .highlight .mf { color: #009999; } /* Literal.Number.Float */ + .highlight .mh { color: #009999; } /* Literal.Number.Hex */ + .highlight .mi { color: #009999; } /* Literal.Number.Integer */ + .highlight .mo { color: #009999; } /* Literal.Number.Oct */ + .highlight .sb { color: #d01040; } /* Literal.String.Backtick */ + .highlight .sc { color: #d01040; } /* Literal.String.Char */ + .highlight .sd { color: #d01040; } /* Literal.String.Doc */ + .highlight .s2 { color: #d01040; } /* Literal.String.Double */ + .highlight .se { color: #d01040; } /* Literal.String.Escape */ + .highlight .sh { color: #d01040; } /* Literal.String.Heredoc */ + .highlight .si { color: #d01040; } /* Literal.String.Interpol */ + .highlight .sx { color: #d01040; } /* Literal.String.Other */ + .highlight .sr { color: #009926; } /* Literal.String.Regex */ + .highlight .s1 { color: #d01040; } /* Literal.String.Single */ + .highlight .ss { color: #990073; } /* Literal.String.Symbol */ + .highlight .bp { color: #999999; } /* Name.Builtin.Pseudo */ + .highlight .vc { color: #008080; } /* Name.Variable.Class */ + .highlight .vg { color: #008080; } /* Name.Variable.Global */ + .highlight .vi { color: #008080; } /* Name.Variable.Instance */ + .highlight .il { color: #009999; } /* Literal.Number.Integer.Long */ + + /* --- custom light colors --- */ + --language-border-color: rgba(172, 169, 169, 0.2); + --highlight-bg-color: #f7f7f7; + --highlighter-rouge-color: #3f596f; + --highlight-lineno-color: #c2c6cc; + --inline-code-bg: #f6f6f7; + --code-header-text-color: #a3a3b1; + --code-header-muted-color: #ebebeb; + --code-header-icon-color: #d1d1d1; + --clipboard-checked-color: #43c743; + + [class^='prompt-'] { + --inline-code-bg: #fbfafa; + } +} /* light-syntax */ diff --git a/_sass/colors/light-typography.scss b/_sass/colors/light-typography.scss new file mode 100644 index 0000000..9fc8162 --- /dev/null +++ b/_sass/colors/light-typography.scss @@ -0,0 +1,109 @@ +/* + * The syntax light mode typography colors + */ + +@mixin light-scheme { + /* Framework color */ + --main-bg: white; + --mask-bg: #c1c3c5; + --main-border-color: #f3f3f3; + + /* Common color */ + --text-color: #34343c; + --text-muted-color: #8e8e8e; + --heading-color: black; + --blockquote-border-color: #eeeeee; + --blockquote-text-color: #9a9a9a; + --link-color: #0153ab; + --link-underline-color: #dee2e6; + --button-bg: #ffffff; + --btn-border-color: #e9ecef; + --btn-backtotop-color: #686868; + --btn-backtotop-border-color: #f1f1f1; + --btn-box-shadow: #eaeaea; + --checkbox-color: #c5c5c5; + --checkbox-checked-color: #07a8f7; + --img-bg: radial-gradient( + circle, + rgb(255, 255, 255) 0%, + rgb(239, 239, 239) 100% + ); + --shimmer-bg: linear-gradient( + 90deg, + rgba(250, 250, 250, 0) 0%, + rgba(232, 230, 230, 1) 50%, + rgba(250, 250, 250, 0) 100% + ); + + /* Sidebar */ + --sidebar-bg: #f6f8fa; + --sidebar-muted-color: #a2a19f; + --sidebar-active-color: #1d1d1d; + --sidebar-hover-bg: rgb(223, 233, 241, 0.64); + --sidebar-btn-bg: white; + --sidebar-btn-color: #8e8e8e; + --avatar-border-color: white; + + /* Topbar */ + --topbar-bg: rgb(255, 255, 255, 0.7); + --topbar-text-color: rgb(78, 78, 78); + --search-wrapper-border-color: rgb(240, 240, 240); + --search-tag-bg: #f8f9fa; + --search-icon-color: #c2c6cc; + --input-focus-border-color: #b8b8b8; + + /* Home page */ + --post-list-text-color: dimgray; + --btn-patinator-text-color: #555555; + --btn-paginator-hover-color: var(--sidebar-bg); + --btn-paginator-border-color: var(--sidebar-bg); + --btn-text-color: #676666; + + /* Posts */ + --toc-highlight: #563d7c; + --btn-share-hover-color: var(--link-color); + --card-bg: white; + --card-hovor-bg: #e2e2e2; + --card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0, + rgba(211, 209, 209, 0.15) 0 0 0 1px; + --label-color: #616161; + --relate-post-date: rgba(30, 55, 70, 0.4); + --footnote-target-bg: lightcyan; + --tag-bg: rgba(0, 0, 0, 0.075); + --tag-border: #dee2e6; + --tag-shadow: var(--btn-border-color); + --tag-hover: rgb(222, 226, 230); + --tb-odd-bg: #fbfcfd; + --tb-border-color: #eaeaea; + --dash-color: silver; + --kbd-wrap-color: #bdbdbd; + --kbd-text-color: var(--text-color); + --kbd-bg-color: white; + --prompt-text-color: rgb(46, 46, 46, 0.77); + --prompt-tip-bg: rgb(123, 247, 144, 0.2); + --prompt-tip-icon-color: #03b303; + --prompt-info-bg: #e1f5fe; + --prompt-info-icon-color: #0070cb; + --prompt-warning-bg: rgb(255, 243, 205); + --prompt-warning-icon-color: #ef9c03; + --prompt-danger-bg: rgb(248, 215, 218, 0.56); + --prompt-danger-icon-color: #df3c30; + + [class^='prompt-'] { + --link-underline-color: rgb(219, 216, 216); + } + + .dark { + display: none; + } + + /* Categories */ + --categories-border: rgba(0, 0, 0, 0.125); + --categories-hover-bg: var(--btn-border-color); + --categories-icon-hover-color: darkslategray; + + /* Archive */ + --timeline-color: rgba(0, 0, 0, 0.075); + --timeline-node-bg: #c2c6cc; + --timeline-year-dot-color: #ffffff; +} /* light-scheme */ diff --git a/_sass/jekyll-theme-chirpy.scss b/_sass/jekyll-theme-chirpy.scss new file mode 100644 index 0000000..83cf7e3 --- /dev/null +++ b/_sass/jekyll-theme-chirpy.scss @@ -0,0 +1,19 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy) + * © 2019 Cotes Chung + * MIT Licensed + */ + +@import 'colors/light-typography'; +@import 'colors/dark-typography'; +@import 'addon/variables'; +@import 'variables-hook'; +@import 'addon/module'; +@import 'addon/syntax'; +@import 'addon/commons'; +@import 'layout/home'; +@import 'layout/post'; +@import 'layout/tags'; +@import 'layout/archives'; +@import 'layout/categories'; +@import 'layout/category-tag'; diff --git a/_sass/layout/archives.scss b/_sass/layout/archives.scss new file mode 100644 index 0000000..3a2e86b --- /dev/null +++ b/_sass/layout/archives.scss @@ -0,0 +1,144 @@ +/* + Style for Archives +*/ + +#archives { + letter-spacing: 0.03rem; + + $timeline-width: 4px; + + %timeline { + content: ''; + width: $timeline-width; + position: relative; + float: left; + background-color: var(--timeline-color); + } + + .year { + height: 3.5rem; + font-size: 1.5rem; + position: relative; + left: 2px; + margin-left: -$timeline-width; + + &::before { + @extend %timeline; + + height: 72px; + left: 79px; + bottom: 16px; + } + + &:first-child::before { + @extend %timeline; + + height: 32px; + top: 24px; + } + + /* Year dot */ + &::after { + content: ''; + display: inline-block; + position: relative; + border-radius: 50%; + width: 12px; + height: 12px; + left: 21.5px; + border: 3px solid; + background-color: var(--timeline-year-dot-color); + border-color: var(--timeline-node-bg); + box-shadow: 0 0 2px 0 #c2c6cc; + z-index: 1; + } + } + + ul { + li { + font-size: 1.1rem; + line-height: 3rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + &:nth-child(odd) { + background-color: var(--main-bg, #ffffff); + background-image: linear-gradient( + to left, + #ffffff, + #fbfbfb, + #fbfbfb, + #fbfbfb, + #ffffff + ); + } + + &::before { + @extend %timeline; + + top: 0; + left: 77px; + height: 3.1rem; + } + } + + &:last-child li:last-child::before { + height: 1.5rem; + } + } /* #archives ul */ + + .date { + white-space: nowrap; + display: inline-block; + position: relative; + right: 0.5rem; + + &.month { + width: 1.4rem; + text-align: center; + } + + &.day { + font-size: 85%; + font-family: Lato, sans-serif; + } + } + + a { + /* post title in Archvies */ + margin-left: 2.5rem; + position: relative; + top: 0.1rem; + + &:hover { + border-bottom: none; + } + + &::before { + /* the dot before post title */ + content: ''; + display: inline-block; + position: relative; + border-radius: 50%; + width: 8px; + height: 8px; + float: left; + top: 1.35rem; + left: 71px; + background-color: var(--timeline-node-bg); + box-shadow: 0 0 3px 0 #c2c6cc; + z-index: 1; + } + } +} /* #archives */ + +@media all and (max-width: 576px) { + #archives { + margin-top: -1rem; + + ul { + letter-spacing: 0; + } + } +} diff --git a/_sass/layout/categories.scss b/_sass/layout/categories.scss new file mode 100644 index 0000000..330d3d3 --- /dev/null +++ b/_sass/layout/categories.scss @@ -0,0 +1,83 @@ +/* + Style for Tab Categories +*/ + +%category-icon-color { + color: gray; +} + +.categories { + margin-bottom: 2rem; + border-color: var(--categories-border); + + &.card, + .list-group { + @extend %rounded; + } + + .card-header { + $radius: calc($base-radius - 1px); + + padding: 0.75rem; + border-radius: $radius; + border-bottom: 0; + + &.hide-border-bottom { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + } + + i { + @extend %category-icon-color; + + font-size: 86%; /* fontawesome icons */ + } + + .list-group-item { + border-left: none; + border-right: none; + padding-left: 2rem; + + &:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + &:last-child { + border-bottom: 0; + } + } +} /* .categories */ + +.category-trigger { + width: 1.7rem; + height: 1.7rem; + border-radius: 50%; + text-align: center; + color: #6c757d !important; + + i { + position: relative; + height: 0.7rem; + width: 1rem; + transition: transform 300ms ease; + } + + &:hover { + i { + color: var(--categories-icon-hover-color); + } + } +} + +/* only works on desktop */ +@media (hover: hover) { + .category-trigger:hover { + background-color: var(--categories-hover-bg); + } +} + +.rotate { + transform: rotate(-90deg); +} diff --git a/_sass/layout/category-tag.scss b/_sass/layout/category-tag.scss new file mode 100644 index 0000000..3b25db5 --- /dev/null +++ b/_sass/layout/category-tag.scss @@ -0,0 +1,77 @@ +/* + Style for page Category and Tag +*/ + +.dash { + margin: 0 0.5rem 0.6rem 0.5rem; + border-bottom: 2px dotted var(--dash-color); +} + +#page-category, +#page-tag { + ul > li { + line-height: 1.5rem; + padding: 0.6rem 0; + + /* dot */ + &::before { + background: #999999; + width: 5px; + height: 5px; + border-radius: 50%; + display: block; + content: ''; + position: relative; + top: 0.6rem; + margin-right: 0.5rem; + } + + /* post's title */ + > a { + @extend %no-bottom-border; + + font-size: 1.1rem; + } + + /* post's date */ + > span:last-child { + white-space: nowrap; + } + } +} + +/* tag icon */ +#page-tag h1 > i { + font-size: 1.2rem; +} + +#page-category h1 > i { + font-size: 1.25rem; +} + +#page-category, +#page-tag, +#access-lastmod { + a:hover { + @extend %link-hover; + + margin-bottom: -1px; /* Avoid jumping */ + } +} + +@media all and (max-width: 576px) { + #page-category, + #page-tag { + ul > li { + &::before { + margin: 0 0.5rem; + } + + > a { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } +} diff --git a/_sass/layout/home.scss b/_sass/layout/home.scss new file mode 100644 index 0000000..499de47 --- /dev/null +++ b/_sass/layout/home.scss @@ -0,0 +1,219 @@ +/* + Style for Homepage +*/ + +#post-list { + margin-top: 2rem; + + a.card-wrapper { + display: block; + + &:hover { + text-decoration: none; + } + + &:not(:last-child) { + margin-bottom: 1.25rem; + } + } + + .card { + %img-radius { + border-radius: $base-radius $base-radius 0 0; + } + + .preview-img { + height: 10rem; + + @extend %img-radius; + + img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; + + @extend %img-radius; + } + } + + .card-body { + min-height: 10.5rem; + padding: 1rem; + + .card-title { + @extend %text-clip; + + font-size: 1.25rem; + } + + %muted { + color: var(--text-muted-color) !important; + } + + .card-text.post-content { + @extend %muted; + + p { + @extend %text-clip; + + line-height: 1.5; + margin: 0; + } + } + + .post-meta { + @extend %muted; + + i { + &:not(:first-child) { + margin-left: 1.5rem; + } + } + + em { + @extend %normal-font-style; + + color: inherit; + } + + > div:first-child { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + } +} /* #post-list */ + +.pagination { + color: var(--btn-patinator-text-color); + font-family: Lato, sans-serif; + + a:hover { + text-decoration: none; + } + + .page-item { + .page-link { + color: inherit; + width: 2.5rem; + height: 2.5rem; + padding: 0; + display: -webkit-box; + -webkit-box-pack: center; + -webkit-box-align: center; + border-radius: 50%; + border: 1px solid var(--btn-paginator-border-color); + background-color: var(--button-bg); + + &:hover { + background-color: var(--btn-paginator-hover-color); + } + } + + &.active { + .page-link { + background-color: var(--btn-paginator-hover-color); + color: var(--btn-text-color); + } + } + + &.disabled { + cursor: not-allowed; + + .page-link { + color: rgba(108, 117, 125, 0.57); + border-color: var(--btn-paginator-border-color); + background-color: var(--button-bg); + } + } + + &:first-child .page-link, + &:last-child .page-link { + border-radius: 50%; + } + } /* .page-item */ +} /* .pagination */ + +/* Tablet */ +@media all and (min-width: 768px) { + #post-list { + %img-radius { + border-radius: 0 $base-radius $base-radius 0; + } + + .card { + .preview-img { + width: 20rem; + height: 11.55rem; // can hold 2 lines each for title and content + } + + .card-body { + min-height: 10.75rem; + width: 60%; + padding: 1.75rem 1.75rem 1.25rem 1.75rem; + + .card-text { + display: inherit !important; + } + + .post-meta { + i { + &:not(:first-child) { + margin-left: 1.75rem; + } + } + } + } + } + } +} + +/* Hide SideBar and TOC */ +@media all and (max-width: 830px) { + .pagination { + justify-content: space-evenly; + + .page-item { + &:not(:first-child):not(:last-child) { + display: none; + } + } + } +} + +/* Sidebar is visible */ +@media all and (min-width: 831px) { + #post-list { + margin-top: 2.5rem; + } + + .pagination { + font-size: 0.85rem; + + .page-item { + &:not(:last-child) { + margin-right: 0.7rem; + } + + .page-link { + width: 2rem; + height: 2rem; + } + } + + .page-index { + display: none; + } + } /* .pagination */ +} + +/* Panel is visible */ +@media all and (min-width: 1200px) { + #post-list { + padding-right: 0.5rem; + } +} diff --git a/_sass/layout/post.scss b/_sass/layout/post.scss new file mode 100644 index 0000000..3d01b4d --- /dev/null +++ b/_sass/layout/post.scss @@ -0,0 +1,417 @@ +/* + Post-specific style +*/ + +@mixin btn-sharing-color($light-color, $important: false) { + @if $important { + color: var(--btn-share-color, $light-color) !important; + } @else { + color: var(--btn-share-color, $light-color); + } +} + +%btn-post-nav { + width: 50%; + position: relative; + border-color: var(--btn-border-color); +} + +@mixin dot($pl: 0.25rem, $pr: 0.25rem) { + content: '\2022'; + padding-left: $pl; + padding-right: $pr; +} + +%text-color { + color: var(--text-color); +} + +.preview-img { + overflow: hidden; + aspect-ratio: 40 / 21; + + @extend %rounded; + + &:not(.no-bg) { + img.lazyloaded { + background: var(--img-bg); + } + } + + img { + -o-object-fit: cover; + object-fit: cover; + + @extend %rounded; + } +} + +h1 + .post-meta { + span + span::before { + @include dot; + } + + em { + @extend %text-color; + + a { + @extend %text-color; + } + } +} + +.post-tail-wrapper { + margin-top: 6rem; + border-bottom: 1px double var(--main-border-color); + font-size: 0.85rem; + + .post-tail-bottom a { + color: inherit; + } + + .license-wrapper { + line-height: 1.2rem; + + > a { + color: var(--text-color); + + &:hover { + @extend %link-hover; + } + } + + span:last-child { + font-size: 0.85rem; + } + } /* .license-wrapper */ + + .post-meta a:not(:hover) { + @extend %link-underline; + } + + .share-wrapper { + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + .share-icons { + font-size: 1.2rem; + + > i { + position: relative; + bottom: 1px; + + @extend %cursor-pointer; + + &:hover { + @extend %btn-share-hovor; + } + } + + a { + &:not(:last-child) { + margin-right: 0.25rem; + } + + &:hover { + text-decoration: none; + + > i { + @extend %btn-share-hovor; + } + } + } + + .fab { + &.fa-twitter { + @include btn-sharing-color(rgba(29, 161, 242, 1)); + } + + &.fa-facebook-square { + @include btn-sharing-color(rgb(66, 95, 156)); + } + + &.fa-telegram { + @include btn-sharing-color(rgb(39, 159, 217)); + } + + &.fa-linkedin { + @include btn-sharing-color(rgb(0, 119, 181)); + } + + &.fa-weibo { + @include btn-sharing-color(rgb(229, 20, 43)); + } + } + } /* .share-icons */ + + .fas.fa-link { + @include btn-sharing-color(rgb(171, 171, 171)); + } + } /* .share-wrapper */ +} + +.post-tags { + line-height: 2rem; + + .post-tag { + background: var(--tag-bg); + + &:hover { + @extend %link-hover; + @extend %tag-hover; + @extend %no-bottom-border; + } + } +} + +.post-navigation { + padding-top: 3rem; + padding-bottom: 4rem; + + .btn { + @extend %btn-post-nav; + + &:not(:hover) { + color: var(--link-color); + } + + &:hover { + &:not(.disabled)::before { + color: whitesmoke; + } + } + + &.disabled { + @extend %btn-post-nav; + + pointer-events: auto; + cursor: not-allowed; + background: none; + color: gray; + } + + &.btn-outline-primary.disabled:focus { + box-shadow: none; + } + + &::before { + color: var(--text-muted-color); + font-size: 0.65rem; + text-transform: uppercase; + content: attr(prompt); + } + + &:first-child { + border-radius: $base-radius 0 0 $base-radius; + left: 0.5px; + } + + &:last-child { + border-radius: 0 $base-radius $base-radius 0; + right: 0.5px; + } + } + + p { + font-size: 1.1rem; + line-height: 1.5rem; + margin-top: 0.3rem; + white-space: normal; + } +} /* .post-navigation */ + +@media (hover: hover) { + .post-navigation { + .btn, + .btn::before { + transition: all 0.35s ease-in-out; + } + } +} + +@-webkit-keyframes fade-up { + from { + opacity: 0; + position: relative; + top: 2rem; + } + + to { + opacity: 1; + position: relative; + top: 0; + } +} + +@keyframes fade-up { + from { + opacity: 0; + position: relative; + top: 2rem; + } + + to { + opacity: 1; + position: relative; + top: 0; + } +} + +#toc-wrapper { + border-left: 1px solid rgba(158, 158, 158, 0.17); + position: -webkit-sticky; + position: sticky; + top: 4rem; + transition: top 0.2s ease-in-out; + -webkit-animation: fade-up 0.8s; + animation: fade-up 0.8s; + + ul { + list-style: none; + font-size: 0.85rem; + line-height: 1.25; + padding-left: 0; + + li { + &:not(:last-child) { + margin: 0.4rem 0; + } + + a { + padding: 0.2rem 0 0.2rem 1.25rem; + } + } + + /* Overwrite TOC plugin style */ + + .toc-link { + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + &:hover { + color: var(--toc-highlight); + text-decoration: none; + } + + &::before { + display: none; + } + } + + .is-active-link { + color: var(--toc-highlight) !important; + font-weight: 600; + + &::before { + display: inline-block; + width: 1px; + left: -1px; + height: 1.25rem; + background-color: var(--toc-highlight) !important; + } + } + + ul { + a { + padding-left: 2rem; + } + } + } +} + +/* --- Related Posts --- */ + +#related-posts { + > h3 { + @include label(1.1rem, 600); + } + + em { + @extend %normal-font-style; + + color: var(--relate-post-date); + } + + p { + font-size: 0.9rem; + margin-bottom: 0.5rem; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + } + + .card { + h4 { + @extend %text-color; + @extend %text-clip; + } + } +} + +#tail-wrapper { + min-height: 2rem; + + > div:last-of-type { + margin-bottom: 2rem; + } + + /* stylelint-disable-next-line selector-id-pattern */ + #disqus_thread { + min-height: 8.5rem; + } +} + +%btn-share-hovor { + color: var(--btn-share-hover-color) !important; +} + +.share-label { + @include label(inherit, 400, inherit); + + &::after { + content: ':'; + } +} + +@media all and (max-width: 576px) { + .preview-img[data-src] { + margin-top: 2.2rem; + } + + .post-tail-bottom { + flex-wrap: wrap-reverse !important; + + > div:first-child { + width: 100%; + margin-top: 1rem; + } + } +} + +@media all and (max-width: 768px) { + .post-content > p > img { + max-width: calc(100% + 1rem); + } +} + +/* Hide SideBar and TOC */ +@media all and (max-width: 849px) { + .post-navigation { + padding-left: 0; + padding-right: 0; + margin-left: -0.5rem; + margin-right: -0.5rem; + } + + .preview-img[data-src] { + max-width: 100vw; + border-radius: 0; + } +} diff --git a/_sass/layout/tags.scss b/_sass/layout/tags.scss new file mode 100644 index 0000000..4cf5d3b --- /dev/null +++ b/_sass/layout/tags.scss @@ -0,0 +1,19 @@ +/* + Styles for Tab Tags +*/ + +.tag { + border-radius: 0.7em; + padding: 6px 8px 7px; + margin-right: 0.8rem; + line-height: 3rem; + letter-spacing: 0; + border: 1px solid var(--tag-border) !important; + box-shadow: 0 0 3px 0 var(--tag-shadow); + + span { + margin-left: 0.6em; + font-size: 0.7em; + font-family: Oswald, sans-serif; + } +} diff --git a/_sass/variables-hook.scss b/_sass/variables-hook.scss new file mode 100644 index 0000000..f27e0eb --- /dev/null +++ b/_sass/variables-hook.scss @@ -0,0 +1,3 @@ +/* + Appending custom SCSS variables will override the default ones in `_sass/addon/variables.scsss` +*/ diff --git a/_tabs/projects.md b/_tabs/projects.md new file mode 100644 index 0000000..826d49b --- /dev/null +++ b/_tabs/projects.md @@ -0,0 +1,5 @@ +--- +# the default layout is 'page' +icon: fas fa-diagram-project +order: 3 +--- diff --git a/_tabs/resume.md b/_tabs/resume.md new file mode 100644 index 0000000..5f94c5c --- /dev/null +++ b/_tabs/resume.md @@ -0,0 +1,11 @@ +--- +# the default layout is 'page' +icon: fas fa-file +order: 2 +--- + +
+ +
diff --git a/assets/404.html b/assets/404.html new file mode 100644 index 0000000..0337bac --- /dev/null +++ b/assets/404.html @@ -0,0 +1,16 @@ +--- +layout: page +title: "404: Page not found" +permalink: /404.html + +redirect_from: + - /norobots/ + - /assets/ + - /posts/ +--- + +{% include lang.html %} + +
+

{{ site.data.locales[lang].not_found.statment }}

+
diff --git a/assets/AWS Certified Solutions Architect - Associate.pdf b/assets/AWS Certified Solutions Architect - Associate.pdf new file mode 100644 index 0000000000000000000000000000000000000000..940423855a702f7b18aae263869310733368369c GIT binary patch literal 32668 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

1#hm=*LjDfe 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 C*|Agr literal 0 HcmV?d00001 diff --git a/assets/CKA: Certified Kubernetes Administrator.pdf b/assets/CKA: Certified Kubernetes Administrator.pdf new file mode 100644 index 0000000000000000000000000000000000000000..285a6ec991efa2aeacc55c8f4f150a0978f46dd3 GIT binary patch literal 717269 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 g#N}$E`XcFbV)BR%t~M+3joao82(#(j2wt#$y$ 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∾caGoa;Cb$UMun6>va9T|4+25=kXICYVSlBaS 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%0D!{{a8J z0IJ4?#^iy&@~@C)T@{jkR9nd|v~5?t9PKmT7+zNmbp2e3{VOLO>{SO-R`bD#3X?bW z*2t3SmE`**|GXGj6K^liSaZ5+tAM@S+64OAxN0e7{UgF-YeRZ#L8#<6bk(Alqt(@& zfJU=a$?Jp5mrhfxIcd+;9!6q>g*>G zx&ML)KuYU`h52XIj4&}#Oztt%bI5i4=U{Gq1dCnpTDe+O!&^|PiAj>EIu4!b&n2-ii6SZ1M9$&Z$6H~ERX=dU^2xTNK=`sG+dcd8MIuz)KF&mi% z&)RE56XmZP(*+Mas;TA|MKpgGT^uV*v7(0XcWDN=7aTWdB!3w8F zVYmE3#ma=oQ=q7UGbjtqDMR}l2`UOISBr5iy`jK;Y8>* zw8;j^#+n8>X(IUE;T!a`)W;uCFF#{ycoj~cXzE9)kJ@6m_6PVc22s(}{I0at>IB3> zY7A}Bk)fqUCsY*_Ag}O-BV9FV9J~Z374}bUL3Z!|E)_e!6*)+2pl}T9t#vWF;o%pm zM&AdlWj$c6+B;pfaQ&pK_D4s4PH*kgbk*=$BG9+6^~1XoM#K_th$RvpreQlqL#&~h`A5f>6%{@v8|eN& zeQ<-o{Hz(Y92Hn2CK5lL=m)H;W)ncFsU<41sRi?MLb|18cR+O8%XF)7nGCit;KsGU zR+HH2b57(F#`(KKm<2<`A{@eud-+R5S{vUJQ*peCb=C9%@>-mB?s6%v1Edy9=(u8v zB@Vdtd`f3B#n*)_h8ck&{7;C+cMIcYL0JSlUS%p=p#5Jkg|7RywHzZtM<-& zXY6iLT%kT^)3FsPX$XixqzKp3Bxyq*lyBRCNe62!FASe?Wc^xE>X!-nhdJc z8RWJ&@pz(V$yyB)&7%5sLaH&v`-90y$n@rWlbY9W`V{}wjp7d7di);r`fBB$AREcN z<0siZHu)T$ee|qfK5scrjOCFT!EtF$@DoDv#zK4tdb(-^f60x0rH+hn&y-FU47LW& z1-o+PX3T>fNg#npdoB+aqHCea1xvomdp#dzsdHEHC}>1% z7QT8zG{`ZrO^Rd2vJjA}hOz}}*pdDxTY2vM)PJr*perz1yH|YV#i_b#EE|aai#lJB zOz0&}j%geDwtzH&pdZ>v*9pz(V=i)z1eL5+9!--0)|0V{qd$NnD^q!E-Q6GEkO%01 zu3ERuX3yN%UFlrj5v10Wt(Fw1FvXIi#3L=9uMHVyA#T7cebjdi?J%t0s|!P|sJSgz zJ?D1^!!*8o4)lbs8gQ5ue403;R>!v|RY*uPp`R4z_0}LlBDv^=j5SF+A7f*bo~|0m z_Ef#@-_liU{Z2BNQTOVsR0V%qguO&%eaasAKsj|=ztAH%0DRP6Yyp?$s%!&VB4 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
t8}H{R~ymg_s+L9M{(9 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 literal 0 HcmV?d00001 diff --git a/assets/Shameek-Agarwal-Resume.pdf b/assets/Shameek-Agarwal-Resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..590e3a300868c7934c762696a11862d7e406a061 GIT binary patch literal 83251 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

_sPq~X(Ze~Fd5u& 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 literal 0 HcmV?d00001 diff --git a/assets/css/style.scss b/assets/css/style.scss new file mode 100644 index 0000000..a8805f4 --- /dev/null +++ b/assets/css/style.scss @@ -0,0 +1,6 @@ +--- +--- + +@import '{{ site.theme }}'; + +/* append your custom style below */ diff --git a/assets/feed.xml b/assets/feed.xml new file mode 100644 index 0000000..a244a56 --- /dev/null +++ b/assets/feed.xml @@ -0,0 +1,61 @@ +--- +layout: compress +permalink: /feed.xml +# Atom Feed, reference: https://validator.w3.org/feed/docs/atom.html +--- + +{% capture source %} + + {{ "/" | absolute_url }} + {{ site.title }} + {{ site.description }} + {{ site.time | date_to_xmlschema }} + + {{ site.social.name }} + {{ "/" | absolute_url }} + + + + Jekyll + © {{ 'now' | date: '%Y' }} {{ site.social.name }} + {{ site.baseurl }}/assets/img/favicons/favicon.ico + {{ site.baseurl }}/assets/img/favicons/favicon-96x96.png + +{% for post in site.posts limit: 5 %} + {% assign post_absolute_url = post.url | absolute_url %} + + {{ post.title }} + + {{ post.date | date_to_xmlschema }} + {% if post.last_modified_at %} + {{ post.last_modified_at | date_to_xmlschema }} + {% else %} + {{ post.date | date_to_xmlschema }} + {% endif %} + {{ post_absolute_url }} + + + {{ post.author | default: site.social.name }} + + + {% if post.categories %} + {% for category in post.categories %} + + {% endfor %} + {% endif %} + + {% if post.summary %} +

{{ post.summary | strip }} + {% else %} + + {% include no-linenos.html content=post.content %} + {{ content | strip_html | truncate: 400 }} + + {% endif %} + + +{% endfor %} + +{% endcapture %} +{{ source | replace: '&', '&' }} diff --git a/assets/img/docker-and-kubernetes/docker-vs-vm.drawio b/assets/img/docker-and-kubernetes/docker-vs-vm.drawio new file mode 100644 index 0000000..43b9d1e --- /dev/null +++ b/assets/img/docker-and-kubernetes/docker-vs-vm.drawio @@ -0,0 +1 @@ +5Zpdb5swFIZ/TS4ngd2Q5LJN03YXVbVF2rRLFxywZmxkTBP263dYDAmYqllUCg03kTk2OH5e+3yETPAy3t0rkkSPMqB8gpxgN8G3E4Tm3hw+C0O+N0xdb28IFQv2JvdgWLM/1BgdY81YQNPaQC0l1yypG30pBPV1zUaUktv6sI3k9VkTElLLsPYJt60/WaAjsyw0O9gfKAujcmbXW+x7YlIONitJIxLI7ZEJryZ4qaTU+1a8W1JesCu57O+7e6W3+mKKCn3KDcHT/TeZ5Rv9dDdDYR59Z+TXF/OUF8Izs+AJ8jg87yZNiIB2WLS/io0iqVaZrzNFyxEw1fEgs0qdl+iUzERAi9kd6N5GTNN1Qvyidwt7BWyRjjlcudXdL1Rpunt1gW6FDbYblTHVKoch5oYrA9rsNDQ319uDbq5nbNGRZuV9xGyVsHrygSY0DND/gOudBPcpoYpoJkIYus5TTePPAhj1DXhuAX7IgeYLS6UaGq2KTG+0Spd6EYe9Ot2DOe0uasE7NEq9H1kXW5TaHGCDGxDQdTiwQeVvupQcTjq+FVLAyJsN47xhIpyFAi59IEbBflPwZBDfr01HzIKgmKZVjbpe7yHIoinI1BbkqkUQ3JkgVyd5haUUmjABCJGzEiG0PotnGIDjbUsEeqY0rUNq8Z5tiLzOEM0sRCRJLtcPnIcfdYbfzqSeGRxpeJrD2fNodHCdvoVYWEKEGU01mGQ6Hhla0pQPlQHZdfGPx6H57Ja49rGQBpjwunhYcQ3Z6e5Fx7Uz+Xe3R+3sdhyBrSlE75GtLHRGFtksHXoPbXYxMoDQ1sTUe2yz65HeGTV/Ozj1SHdW1yK7arjo4HauAN3tUrtaGEd0s5To26tiu2A4+sVsYI6j76QMD7BwwLOBOVc8ssrhXAG626VjLR0sJXp3rnbKOhzn2qTVu3O1M9civ3eulV+wMC91L3XvNsTA2Fajciwf8noN2zny8au0caiCFtO3ZcHvIwtcHv5T9a/v6I9pePUX \ No newline at end of file diff --git a/assets/img/docker-and-kubernetes/docker-vs-vm.drawio.png b/assets/img/docker-and-kubernetes/docker-vs-vm.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbd5a3148fa82c97e71ae84ab78611960d21652 GIT binary patch literal 18331 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 \ No newline at end of file diff --git a/assets/img/docker-and-kubernetes/service-creation.drawio.png b/assets/img/docker-and-kubernetes/service-creation.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..b8818ffcbbdad22a5f764e5d3fae0ed8f101e92f GIT binary patch literal 35871 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 y;LBR{ literal 0 HcmV?d00001 diff --git a/assets/img/elasticsearch/data-table.png b/assets/img/elasticsearch/data-table.png new file mode 100644 index 0000000000000000000000000000000000000000..b25a8777626e87f6a4d68d939ead9d777a8cc771 GIT binary patch literal 51870 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

h$pryO=~ zi7{=k0S-|3$FDub0bAJ$RA+L!2$8LaX6d#|^PT%wy7!EmJ`2as)!(C_jEJ&UVt%ND z_Sl+n3amn>`*J`|q<)ndM4ivo;M>y+EjU8xi*1U%g`Y7bHgDk9h=R~JRW8Xj zc*Bo|X``<CmQhem37Ke-j;kw|i<$w3%OaQ=Qp? z*yrbxk|mb&Q9k}(h%8~V z!&2eF6Ta{{e!QD~wA1zQooCc#cH!;1)_##9?ZmXo&v{<7M!VI4nxk5CHd<`Ni><-S ztVNN3+33}+GWs-L2DZAoIwdgz9*s)=kqDRqA1=07s2>8T{v9R6CmD}6keNI>^lUm7(`? z6)U}ceQ`g2e4K)72?}U#CdkQIB!sjo(|%M?K&#g#J&xF2X(o;@_o7b-UukyEncNb~ zQ5@eQ-hmL%~#q#z?%G*JN$J@f}e$|f5F&4El!bd0q^|h3UFG-FnP;``p@^Ws-)0PKu6?%w~A~V z;3O}<|2+acc@0I<|COCU|?YQUH7Avb3VsqCdc;%yOw&sJb5-O{o9nGeqUdI zidd*tazk}`XF(Xu!ABZn8WBHV(-d^9Q3RV6es5buhA(cc*a;>uEVItozVA?2oBjUTM~)`rc&VZ|q37dKxuV2=}5tenhot`DT0hP&FLo7Exc9!5WoWf6N+wZ8BfL zP+4Eml{;xDdGi!JBoQ?sjL_>nY-3h=MZT2HRU4y_FJFg8qQApwWjr>>cAWxhq!X8F z-Y~ZR{xdW2hkuVv1`iI}`d&=6cOd#^Uh~=RJ>#YQYFk&jC(^y0gI{i@@MzV4xTB9I zJz+Y-GSnoIPA4bd0zCS02>79=Y0NU*)s%)&)mvq#l~V)ay~Fx4udnF2_ePSNUTlR@ zB>G;`XuX=Np%@oZWF7fu*D|9j`UdiQj^S*ZrwLixU&+Qg_{2+V;1}+3$-@Td2>k_Z z)Kb_^(3YVeqsm$sjwB&F#abm;b{ccS=1s>ET9Z96Tgs{F={)P(%)Nb6V)jUQH1oA@ zeOE_wd_7Mw7Zb_#gxs~JyC*S|*E(s!)~F&(n(;&c>O}qIsfr+ zHCEyILR*x4g`N_<$m;I3s(VG)yrn@Zw{<|fxPjtXv9?-`EGg?WOui|7 zn)wP&%Oyssr3br(&u#LL%0&(vM3xHh=bkFG*e*`TLzTnsM|LAD^j*tst_c_LN|;*!a9M8K*j%*(;akg zIaWr5zwvl|CJGOZCZXPXd5#gnJ||7!F%Zra9=zKTqNctNiyV2%#5mOf>;**8wD!y_ zFakDt?_)yTrCJ`f+`fPzy1Be(E$Gn9YVIZ6h*IiuZv$p5T{uBS+&9m-FJgKtZRhSG zz02fziPQ65R@UKgG0oLl{d|{iopISStwt>L_B4*SLk6CT|Gi?0iIO7B6S0db9w%59 z_EQLECgzd1%;$k&(;xIEBau+HWTC%h1^&?jKtm5+Z`!R0DrrkjA%OmK@g0p> zm&ID+pJyB^-aT+nb8=`6ANe6gw1iRN+20Jk9D&E8 zS?wd8Xlf%9|Mehp5t)#mY?}SFZKUF3*SC>pPja}J=YZX=JRcsL5Ag-?MNTb1kZk_YZbQlVa$m{r*g_u?V6O8J)TJC@0!BSWQPW3Aj6Nq1mffEc=6C z;mACLwrUcr@dX^&rC!bebk{d?-$JtNe%yEYXEGi~s@a*4)i+k)5slRR_C-AMJr6XH zH!pUELjZ^Fmroy=!YSo*d3wuX_8cmiC(YB*a4ayDQ_BFAm?)un(Wyqnztaa05{kdP zj1}77F&~Neq_exZ5u6l?!`;;S9$N(?AA#?kJ2<+X0w#!%IVm8Iv~jU@3~%^*-3%8_ntNHf|*I(OD*As=@SMBVJ#a zUEb)?xpq9XFasNMf7%{O$L+-Ibpvv>w@PE`Q=!*ddpn`TZNJ`!cXLCxZ#oPTO>-lz za(D1BAtdH+-SlK_jye(Y+HhUE%`59ie`T)FYng1de|6da9_*_SF=y*kmi4~gs@8WJ z7xmRQcJ`1*xxR(t$30P_;W>NcZqxyfi|4C z7g%WV#4?dWHD8Jk6ZE>G-M*YDl2(CAZM2C3)-Sz8-Me&L+X_YZeYN8-YP6SUt<|a| z5rYP~0tw}ut*rj6=3+5DF@Hh3uGw+0LBJNIy_mzybV=UKw3dSuk$f!%&DAG?N{?)< zBfuZSzB^u1`H2>aZUaquTbtV7e3-0r$kk~oUpo5665*pki@D=H%0wN zPOy3N#!@|2g`U7y(QRHFLeoP1u zRMyMB^(3h}mBsE9wzZ4P_)>xCeR!Hk0~+njmih(Yh+1#=B!K8D>z*}oK@~x3&=o+h zR;rZymF{59{&xV#JB8m;aQm2n)oJ9;VgQaxjJB?Cczj zO4xOrP1Zrm{sXS73uxrZ&$J~FcvGRjeU<|Q3@=;Atf$qmg}1p`hy3D;j~Mig-}TT~ zrvUkKchocv?3K!CEBPp2L1zoZ{=tfj<@1MUUM{QI{(Q%2#zxnfCWM6qCUB}6gU8hw zdA`hY!Ip$%AQrwy#NM8{{ffD;xqOZ)J)Kewwyl6mt~iaxT&3P9no6OesYws8o1pRe zycmJ%_u~0Sz?1J4{HRWS{|7(cCAYm#^Cv=Q56}3{=Fh)@L_omiMFf=T#$#>w76xsG zQ+L(rg6D8OQc+!NImR;U2^l3dE|X#>>zz`!B<+9QE!;qTbJ-WB$$J;IRGl$zi4gUU z!>Xs_8_Y8t>c-ltK$(7ZI`E+Fjw0|siND}7^$snio=Qc&iDls+;<9_w-|wkad*R17 z71GfmOf29|&U%JxB838HxP(?aX~CH?<|s0rAwE)T{&uZpaKK1>x-Lm8qwGPNsn&Bt z?vmo;q;a2SwGABrgH5}?x^vqv{l50M24X`j5HtArSrTcrVqrx_CGsX&jjwp2v>R<> zfN`+;Be!B-4X*Y@euO8y_-bz_B@k(~845$0(8%u8yh@;+tV_X$gmbX{?L-*CALjA)qSN#XyDfNTgi&wtXeHr z2a7f+Q@IVN-@%#U9%aj86+(pj=9T2k761eAXsWAp2oU}!Fx*XJx}!6ems(tHz843Q zP`P{!!*S>t7-M=5Qw?^ux-GJXFH^H42g=+KZZ#?kVLM8a!#UPM4H%npCN^#;;~sc~ zI6|PFei4X_jC3f`j*^K^n0`_%J&DXQB7thKTN{8##njmBX0Q}@xZg5E>9sVU@7_B< z)fnmz<+F>(Iu~vxB@`)@a?9jna@5w%yB!{u7Hf|ZWH1Nh^hiQwEAJZ_LOM7LzqNewiZRNy-rAgW#ax8X(sWEhOYiPn!`5IfVj&U8P>z^?=JkG>!r9@z(3& z!v#Wv>5$>0)3(t8Te^^Q__McAv(G*z5O$1=EK~N~=o4g)7fp`Q+ zXk=*ijfU%lRsEBoJ8D>1m~JPDzjpZ!(j#JW@)nIovu-3a7jzJNbJoQT4t$3nn!lbv zqw~>#5n#D$CXRbKZ@iK9s#w$ef>rEX*dS3 zXWpbmm3vXBwC^-g2A)Q_=Ge3MZISkBO6B1!jYfqoqh8$)Z3B=*pG-7%V~xC}h_En; z|8u4{uhShFU}L2mV+n3sO@*Ji5|(qh0H~C$O$ReS=nb5Fq3@OY8Fx7gY%&+CV9*rUA5K0m?2tT)w>Zt&)G*QmPTJd31 z4F236hnRTuBA-BHc+0lU`M2YA@byX)$=?cG)v-hdJf^3~YR^2LDP%Ho7e*xDll^UQ!WJaV!^0Q0#=frwh$*UA9$asOS^u zO_zZ^Vs234J=E9V`%CbO>Y2OqnPNV2$-}kTqI)=7Oss81OKXcLLmvF=+ytN73AwtO zZRF9B8}L;7ie$OI^0NE&16N@2zEg&vVxl`F9GG#5<_x$*FE?z@%PtR>MW1SA$v*xQ zlh1B_rDbI9BReWR&#!B|ydD@0>TyB!!rs2igPsNkG6@ZG(=VmX0(5j?pH@p>JD2Qg z(!qguL|ZdHvn6r@Bcr2Q4PP+?8twCKnprekjJcSjQXO7=E)bCO+3)QuJ34$@9_$~= zOg|KULteC`DfQHVKR0SSg_PPLT^g0PqUmrjIgp|?)_AmK5*>r*Fv_RrboiKNS+u{o z$>qIPSpI6v_$j|Uo!`H@GIq4KoRaZ82@oFxy#fZxLOwJ2@BDbuk^C~vcW<`#J3a<{ zi)U0r1f01G=F#Kg1Evbcw2LbQ0^!~DP6Se4E)WQT07@KV&^T3MD^ONeuGMA(JIBp^ zw9pWw!(;!0B?|!{dTe6KRrjX^K^K8NaJMG0BB0ll6!v2{FVHfNoVKws1>WmL-ZycH zCHJF9o$)oz<%M5c8ct;+xuy(NjLMun+=pBip8@zXlJSZZolsik{HRVrNx|!S@m5l@ zpVNLaTshxHtIC4_Lere5O0QLC1Irwh=Ct?Qw@o4QW4^MHm09pD0t@GRl=T>ViCWxp z%^G8_RqvafslJF$5)zZyMwBw~w9>7p8F#MB@ot;o^ zd!_z)rw4|=osgGuz4o{e^y(#de`zPDT&FOydXs@=u5v*OW+%4rKHrC%0G zZ|v8$0_RCJahYO|Zw&4WFO$);V$+i=Wo2deR_X=f3dgcd4;z}UA8`G38tu-`x?rGE z>n)@Ko|M!6-tLx92(XK^wDi?e1515Ji8x@lHjnc+2BcYxheCcNNFRaB9^b$eXDU#c zGGhm{DOo{&fA(?L4Y$DIyAeuxt5Zp5R)L=r$Qvt_nx`eFz zo@aY*G}8V9-zo?bsJb|8wk#e{h8FuSdeC&gD{fc3&Ll8gnG~Ecd7L@eOs0s9_X0eWdthHva(iRbCGyZSSaLNfDEg8IFaus>_pCuKu81qe7ZF!Z4jFM;Zi5y;2kP_dwDu zi;v1b1)NGco=QYil+ktg_JW3k;atom@F20rj_nr;yKLkyw!j&}pk$0|JcB`IfOxQS zTN6&H#!HM)t1oa!#|6}S9~~L2Tbi#Qr2HCHT73qy2vlfPnjDO%n`sOj+1<8SySv3| z%WeS&akE>NvDDGwcRPvwpJl(h;wsS)*nTzO6EIU!2Ixq?u)q3wy-x$bC$>x?C4Bl3 zahPR+P0{3cN&+nY1V96D+C89rf4uEF?am_g_V_P;GW2%u-nscX3^>N^Y`+vD3i97d z``rn6+`Qc?8~50kvuAI{JI{)@g#Tt!UrfFR{X>?9x>Ni;1`zvoGxi^BBEWlwYJB+L z7~21LO7zqg(L3V?WB~bxmpw-)RV%*$lY9eu9}oQdwENeeV8r8M*l_=cBh3N4Lih$9 zn1GMiR;<-O?ZC7C-znbz-wFR840Bu_G}sG8_e{_sa7?eYPM-XYc=S3hO zFlTp{K+y-xqJv zXwn*vw*W{rMWnF^K)w=J!t*;<2In27-wO+O<&VI^NXFN*W_ZA+H4loYV+qmiDU;3? zp1GD9GI@XToe6ITfzyRmxxFJE-qQphT^XtQh1_y~0(kHAt%aGj!FmR@67}tc z$)5d-e);5H;qlcbH;du;bCVQdXZaQ~{q>jcK&{InrwtT{s+CG{9qlW7i}f7iCdT^< zgV#}@elU2l!n8I%YeO6k3zJAz(U1%ZA{q60@NlL92V-L+{pRLfcBGz`cAb@6<%!A8Q;tMt?Sa6-6Cgle zih{`k?|iTsHACHq1+Y90%~G#ehL$-j_E>L@9+>npN@hzSs^$E8{B`+XzzqOu76o!j z%8gQ<`msxZ@W8_YbLoqU^<)VOHn;P?~%1GkEZkS5PXtVSo3v!_LfH;uzTc|=I=@8 zab~k71!{VFdcC!1TO9y)^FrO8tV)!t=PB>!|4sR_j@H(0HtVSc`d>f2eRz1V;Cv69 z>HxM23<)tU9iQ>KIq7NPVgO#A*}wQp4ri?g#T)L%4SY6}%Nhbmz|S%=o01=)?l05K z{G@>6F>Bi;cf*0(9u?op^@*S`m4Y{erDOulZl*6RUo=}cG&)?$kUxx5n$XDage*F1 zRhtQ6trnVEn_g{yc`4I67Xc~~JgOaz#6;6ep?;LN?_AhGq z$A(H?XNDFQ9k(W+f#PFg-{mj1)-afd1?rrO9vAm--%nxC9ggV>ildurmP61tIk25c zkBM1~V`6AlL{R1O3oPO#SS^}=8go<_3XLK~$Y)HbEd6ZUMR#K8$}YzXD#6d8T?=_b z=~I>I9I%w$0IL;aVEleyj5Or6E2~tbU1wT@YZ%K|A4*mD}#JJEo z&!GeAFjmR^0PF^byFURgo(~UJKtk+ZQe#k_A`$la9Yr_~%{men0xYo8)>#hE4Q1e+ zJ8zvIX}#6FXugba#%h(4iQw&#{9vcwD~b5K8%T)d2{O@>o=i)9Jqi{$szBqG8UH>0 zrf!~k!^7iYB@$hu_ujN0)W(KUQ-gg^qfpCqnZy@*UoEas0l4p$ow@te89^91cO!pjVATW zv5myR0iaa7!7`%Q(#hdZUj$ydz+s&7T)DaZ&FS*v90=Gs=99frf!}iYyd=4c>hMA} zl_OdODzhsVl6<%W1ob$wcEiwHYoXD``*V`klLMV0%>t8Ad!J}z4}34j@)Ysd!O0e4 zCqV_jg4SCVIQx@vm1$^_yZZLa_p9#^aYv=5P9vfsQ@173nSZF+WoRZGtb_&~zLoSX zH+oGjXc}t`mut0*wE7yKZfO{Ovjy)p#v9pSOvCSI8+goP$H{^*B-5zf^l~Ior?sSG z0TeI0pHD|6oa6zH7>Kgr&>*kEUmy`DY(k;Aa{y$A<1l1a000zD8#EodJ8r;gc!utE zb<$JQ*ZH+|{4YOjHXDwNrkU1g6Lh-BA?R~PrkAN*Zq{E$y4Z5Bak7Hy6;X~Y<}-A3 zOnkP`#QX<7j?*WC{Lsilr(%ezBzikW-mvd-THY_+pJE z3~=@^m2f!iM~2Yy_U2^qTE8EN*{TFNS?ff`V?TbtHzTR`6NXC@wp=jGQuaq20$zT8V}dlefq?^ z-0+m@L~!FfF0`Og^n>}&-c%DE_5EdGdf=eR*FYdSH8s1*@&#N}AnIsV`DM`%&Q-$3 zlCHU)o~&}3^1C0)7f-qUsVqKOy25Ivq8_K!+5x+RN_V;$V;C9G|yLEkX4*}HQ!F=iSKxNsFFMs<2YdI<+( z+<_^xxsm#ucrf;&)Ea&|NwwrBo9`b`Zo0izBn#XuP%Z&gq6V^3v_ zk{}VzQ7R#YEWwR5$!isoHCE>qfevBwWI-cFpp;n4mzlMqV{l0aw$fOJz~V`x`KfT3 zcC}#7Y!uUS-S*5N);=?vGJQg18fOrYe#@j?i|f%hJ0WeSS~BsB(vX7Dg--Wz??W&^ z;IDdJeZ7=KgObnUmmZ$84cLmKkW1s*1^QUDI~~950N!^9GyR$S@q+$b_!(~J2~ZuJ zuErYRPBirK(1AbC!&I<&_1@YebH8~ye{_7`#3@#+nmcJxw46;oUs2!}D*9^gJyk9D z1*pq%bP8_-Bcl83L22%&+`dX{B#<^wXj+X5L6d$3F$IMf-DaoBb}1IO)1?&U28mK` zfQTDvQlfNX8~_&cs(2{ox6_$2qL12}~RQQ zcE+@fDUS@Vf7nSURZW*W#}FR~;x4tTQNRlY?~yY$7v)S&ERK-OKtV)yIjlyk#PrLn zkmrpBTu?;Z8AL;OeG;E?s7@3VZq`S>Tye;F&(wTyu$+yFs@pX=Qk`55BkBQd} z_N%hMiMH0O^+nHDJGgi3-aA(|*OnR$L}svvPg(7)(Gm3Cq`WT#!RT-4L`7kdmg@!F z=I31HuwewM=Ir{q?dG+0&|!MJb*)isBI|KrVR8CcLIYztIz=SSO+`QTNjwXk&Rfqm z-==$ywKIb`#)WcL%Xah@kx?vH`@@8VTJ!nms~oWoX6*;23v*_QHAwv#l33V4L%)y{ z7y|EZif65&iG)8@8}|VsmHQA5pSOiK#1>CqRFIL8J%}*7zs@@@xtahvx1p+^CJyUO zumDruU|pzU{%N7s93VuaEIG_!&;bhjh=9PFBM5yR?R1oIfBKb&+tXeOSYm)%tO0A( zPCEl<@^rwvD76L6py~_n+vD-EW8uFQI%NpjreYl}Nm|?F?6m2!y8ZD5dV}W$tH%O7 zg+bfI%{3+#=KkKyL&U5c{LemB8u%>bZ)bI5&-PeGwcPoRo4AuCD0eiv^8tTA2HAGw z@>Ono2y-2$Po)fu2NO}*?ziM9i#@7fA&cF_Csi?TtNG-)U)mpx<>2VcJs*vTpXu9B z811@eEwL)HTwws3*i}hWTe~3jmwEiEAj1JgAi6=6wB0nH%NbOmeCEJG34oXj_7_{x za&mHN)N|1(rrUjq(`MD~#E>mIw%8%%>JtsdgAQT;XaRb1+O3`R6lP_U*769<}p9Ndr#b?LH{bd$5O$OlqM~;=X{Yd;* zO|_}=AB}$je8InkMSq1)6x07!0sR$P{j_wcZF%#L>Z(J5Z&~(1Vfb-xZN`D ze-vJ!EEH0+4X>7-4~6ruh1-B|@N?RcGSh#nwKi)9m}h}*)~KxiH_;aRsFYmsn4L{{ zwRAL#8Xmy8VzW&uO{pW0cOXpZ1HW;A%ijLBkprv05-rJr`2V3FvLp)rYO_3&{+j0B zqOGs*7xT6M`|=a6inZStE?5Pi8qyHWd8X~`s4GlEneD=~(K!8XAqdGYFfr=_NIo|)T zvhj1fao)e>aZiOa2VZCCSy=~yD>8l6H2~n%D>b1+KdC`KIXOu#ER5PrAkAoQGiE|s?aB7tLLd(FWoi%n~T{LIUBc|u{{0)tk351RfC-0 zEx_7ynw1@X8qz5Gr0YWjWiEeTeRUfIwN+bdvKKnJ#mYrR$M$oU;q^~mnlaX7Rp(>xj|et!O@E5eVfUMQbsWwt6QL$unB`REg=7uk#wZj*Zu{-U+QOxW7<~306Eq6S zE7JfoQlwSNEk`&zTn7FSc!#*KxC?e3R)1){+FF|J6iN0?I~7jPAo6^EPzxTuTM+!B zQPvL}D+dO?y>hv3a)i9UG#e%3=H~7(HA_@zHX#4B^QAINrOd-II2u2yxR?L~V`C(X zBf`Jcz0Na3z&+oybnXKURjvK0o#0%#bZsP{7n$m6M&g$tmVeCHx`n;0doBx(N}H(n zR=`Fi2IS#=Pkgl=1Oy2F!0{i1T9(>=&8N-xIed|$!11#Gnsaz!db;q-Es4v~Ob}3t zJ3=1nkyjzhk3<0a9nT73^EvxH?wu_b%6RKWU%w+hHw#E2KT)f|g!A~RmMYO=r|@*M zX;iF467V6L(?|hNTHhtfz+pvWC*bPj(paokrOpA-~hLR!18U8k-wyNqp$WC zGk}wJl?Gi;DD66@Uxqo|b@tPUKo3qkBVi`XZvF+A{I2~ry5Pv(WRkPWpV_%Jf#Vs5rTl}HL(kGzYb!u?PHC`~V)R#L&2CN`W2KjS# z_7u+uZ0BBLUC<8LuB@!Y$AA6iC@MMwG-f34-hFbVcfHu#+S*FDOb?gKCucr+n(kca zezgn=U5t;?(uPZ^3%3fn^f2Pts4O{BE5~bMF!OcpND@dA<_TakTRo(SgDtD7T0bwG zBB!8$Nkk9R85%92@v8HC+NgfR?069}D(GVLch(Wdi!{`rPYKhN_S2Mi z%fGW7r2djh6R9zqsRHUAvkuj8DYN65PXn|3CgD7e2fY-B`@byDbl2mpw{~&}I1jeQ z!#)TFnDS3qP6r}JEsPdt0rq(4@X6B`m~d}oQh(E`{|>1pN>Xn0fXAd!e5MVgTL4>! z^>R7Kuh?wSv9n_xxEaT-%vZ{ya6WhvT&Yy_QOi4T{p_B+T?CLrdfajmp|V z&xxXGPZEPxK|L6;QTF)kD@`N8bx59+ju!Y}q0nCNmzre-Z!ue_Q&X#Xxq6yCHPmBl zAfhV>7sqe|Aeu{5FcW0!B~@Smj`atC5P`wLWPsYV&JweF&=e?O#$z@4b{Mt~2&xRZ z{ORQ;X((yV$B|6+v*wo5GDet-!v(31UPWN!f1_4o7EPx`w3IRj`^$Zo0*&~I@m!W? z60aULKF2RpF=@kfB3Pm)Pmk4>7T-UAaa$EY<$JZ0C+|iU^8=vpZv6MgV@oyX2`BrX zGd^n@n0Les$A#xt`T}}w3!NDWPPcB-1>A@dUJ81X??&b;P77P z>Hr#5X(WC6hU&T3?o`Pr5KC3yz7*MSekFW&z1&|Lb@R)ymetegwo=qK2 z%ujj+8e{ba(c)Qt;~^AcUVj~*XTw>+EJo5$ofMkd3-$57kM)iREmurrIGp-8>4={p zJxSP`4q!$k5 zal5Byt?TPj1_sQ6>$zc4I0tV%=V{ky2iR0(WYPMPxvUT7W0r2}hqJRV_!c#h@wk(r zmvA2?B{R!>;L{OR38ot;6&XJ~Ki(eQ-F%ORBqSylu)}7O@tG>`bNQ=|AZ*IbBtE%C zx9hUOm|!rBr`H=(>d*0hUT3m_eT0PM&+O12G-6#nQ>2#SB#yk#8Lu21E`R_edDc-F z2VQe7`s~2(B0kLLbF*~@SCB6 z6)5L3v)9!0Yg{#4OwXYwyE-0b>SR&OBPk2}_=n=KxqbA1K=pk|yt#CjyuPmQe>)i- zq1Vaub<2ugtG@eK&l8=nSOq#fJ?(2UVS1vrqzNv6&QPit82Sho`=6{eI_CTw7M&d7 z0}wuZ=uhJb{$!bB0zH`hlO;wXEG8B)*0K}4l=X5I8s#E*K80<^NGbM#RKfSWVvsZU`v=rQb*DjBi@&h)P#n!fefbMFyTSws3;0_XsAN@`( ztT~JzM>RAtgn&K1yv}%;R;#^IG9d2y$U}X4eY)A+ z)g@m!8UAFxu@C&>#uGVofZRxaZ!PJ%@S4nb+{Es6;+rOT97#0=YKPI6-u;hPT@zeBFO3Px(ON?+LN$l)i0J_h*C zu}TF_b~G8LJ{eMAsELp@uHH^y&Ym6bM?NHMTJO(yUb~Y|seiKA9IjeSLBWkjn2ie7 zK7^M3{^VD0B~G@aayiL4<9FChVbgPS#WtuF5k0P6dPTmKU@^QE21BMNmJVN|;j-Ov z3e~)hPL)fpPF%4w6fc4lCr>Uvp3A7ofsO=8LZUa8Mn<4T0|sc4J`OFq!!WY4X1WZh zf(i!T%cIeCc(MHLpfuPwmW3tlSi#?bv3M*sia`15+oLn(EjIM1CD; z-ts9+Uux3h7;ro;oM84yCsb_6B{$n0!%dislgelg%!UChxixzU21Zv;_m{)DrDzCl z7m?P?@P|MKl17igU*Dsu`743AmV%2bVOd-1Vf(7Q`Ri~V6KHC1aBx1?eh{))s*l;Z z3Amq^sf;b|)-eeJMOsR|-C9f1y8(ZH(SE2qA_Rg3JY)6eTODZ#7qE%>!vOop6rm9l z7!%zX()!Hf(x9+S4BmR9atR8K)OCEHPZ|4o+8PaMw{MkKS*-cOJR#+&u#T@$=uF;RC7oa@q2Q69imtfw~<*x$!x7e29pMMK^l5@Xt^( zEK3h=o2-a{iIjqmFLlg=Qm!b;;iTQV{?caUR%M_&^VDeQbH2D@W@aXz^5DSkRQ!8; zisNHzV6J2G9PEF+*#@L~gZ;)p_>S-ODB&H7&*5$M9I}|t8CqRGUL&TJcz$dRY7Q?$ z;j^-cEG8C~&FfP}uqfsY>^3@+x!*i=f=YX9dmFHhANGU2MWqtua@4sDrEJNl7+(^X z(t#BTHajd5?8Q~vsl2YeLD>>l?lZ*tEUfF1&HOYES4J$29Y_!si&cFC4+O zz&$0pIXKX&RJ|!IB=zl1Pi=(0#KWUDefxrhd0}^|d^>sK3EqTB%*ExpKBl1|mNBI# zPxj3SA(1L}2V|CX7WIg{wH~FiHsq(<7NOvNur6^)f}DF}>&MA{V;}c3HdNwYCcz_nR2=l~q!16mIc}Y&Bdtic~M&R03ogfw7Cwvhcy_ z*OuUSToe`+O;^}S|Gbs{`D^TEZ#4R&4|3Gd!r~9;jOwiK@N(~((jvxfv2MeFa1vN2 zh90p$K0%%Hf};3w2lXA2$;%TwNq6m`OhIM^vA6e0_t}K?H+g z!eQy#$eh@Aiomq-nN|6j&Tn^eMSPB~pHq0Ki}pDNxEQ1*SF7ce&ykUu-Yw%5K6B{W zMfakUK74I1n@d+sM*_Jrdlt$k5K=)kC3cpc7{P~i^DG``8~#|h%lGtX^qnY?I#N4E zYRF5$+vW?0=)VB0RV0^V(r>8dY6kXf%nN}e@Rjv11OsIl9io4egVsnQldEBq3Z0)l z*EoqtIhHQS;|lhIAT(!t&b>04LRmEt=Cft5?2eQ(WkdB_cJV;Zr46lz@Zqv5=`Fp4 zzE|$cD{XIdVImL993dYsnm!#{U8{4rnR{hL@({%cfMN6k0hw}<3` zkoMF&UnNuNiHn6mK9^9OB)nU>Tq**`?ER$=!osHPHr8Jm17$}{v}%#r^BwA>g{J9qLgEJ&o3qM`=99I=@sEZr>DDM+UnN?hpiSlP{lf8cUpqKE zR7U6%%RP#JpGt_v0zCk@@*H`?zf7@LwA+Vr#e&&z=SdoRe7_{BA5rMuh6V+Aun*$? zPyg=w|2T`p&~-&ZAaQfEm#f|WkAL6zXa=Cq`=#qVje<)2Bwe$}HHit4=OoM`l6KKm zir~Y)Reb?J!PD2}ObnIvc#pshIx(hINT~C>hi>o$@h|ik^ASA;$ZFtW=zrtG|I;?i z9Qto;^$|8s_%Bnl>xuRu;o8IhcP z_UZcVzqEU+g}~GZRApLU{9ck4KH^DPS>d3X`2HP{IPC#x9Pqe*f8rInr5HeZeY;)K zW+{wRTgqKRRd35(2oLZZm77fHKr=gQixnH&uU7S>)Vx9Yur2}AgT_M!9PEZ?zYvR# zr@O%}Ww*bG;U@?y&?T*Lw761uX9+BLl1XfoB6a6@thz(qZ6N7_t>f5irecM=2PG}V z_2}#*12ibJwuXif$rLUzTZ=v=V0`)k;SD9?@a9E8^*qP|px;|+rGox)`OWT>If{w8 ze3nf{$CX1EP+hbSqi2o&_MbabnPt}lxGXYC=vScSx%0%2UU32KS6CWfcy1h8swSV= z#mt9VqDH=zFxHdx0ibImN=w!PGzvAq6HIy8SLzICz#1wYM!;3I`B)$TYuu!hnLd#7 zDS*%kMGw$O&U3h|u)9yX_I(Am1T{B@)yB5CKW(Bv<7+r4?K5kLH?}u~9=v_zH)<;@ zHE^fal*xJAK+Hy^**?Dw!B+{l!*Co{o<*SOS6Ni^=8o$<6rz zY)d*x+cA%IGT~f}T#*wZMZHwpOiu)8H)pHN#g5t#`jgq8YG`O+(W?xe?@k@@dxnML z&(Hk&qoFqF`%b>j>Y(Vt7GZO6ok96WmKbVwf&3IvR8T3>3UU#ZfFDL;Qs8( z^OLu2qG1qVkqRN^{YH?JL#zBdM2v(4RNxXx&4&BL@^*WGB|`u~45zWhz}=aD5g${{ z_NbB=?LdOrTWY|E_c1euXt8?IkBrEsX@vj$DGab;SWwC9{#nhQZ*mWQES90OU<#$B zrt--f^&4vQV-xXv2!mD;m)!&zXm((=$K#L97Jqqz;-$Qz#tGIKDfN zwd1TGm$4De0^tl_oUtqNFW+%)}#)0#=H2>4mxy2cU0NemUWSQTtfNQY*Q5&em!+d-y$E+X9ITj+Y6WNrgol1sJYOV4BRL zCzM3ZTW!y!IS0p<0f0|>pC_k27SMY%Q!Zco79b61n}Zq&wOi+jC|CiMJR zG3a~PAHY+1l&E3DfY;)&TC@Tb;c(#eX2SH@+5Ui*7~k)9!T*71CIY3W8)JAv0vBii zA&}5rWx$TuZkF6mPWjOjrW_q#=nfCB%vJ$n9GCqoOk;y%wg!TcO?;xsP(qR#qv@ic z60KUugWu`w+J_I`$oQ;Ywnoxp`4SwW;W*-@7Ae+dyS^D2=%S*c@rj8mqghBADRWt$ zw~lNVTxM^>iToJ93TPQhrnGu_3-LMe1HmaaHg*6QII}}QaH0Fq)Hpi?c=v3_=KH;Q zTQ5KX&}#k?m=j}WXV+Q&q0^su@XX}gwXYj!^FMwpyRbdtxnuDY^p2^<1X2m@)5(3X z+9QBSTk~14JIH3p8N6SZ%628*j)6Tq?E8C{v{cKX53}CeLJuS46$I15urvAE&fX#b zPQ?ENb!#pOFg?rc?pWve?5o3R2vwUecsR8IDjB8TWw@ohI!0+} zGpAV0SG7&=Um)sSoaG}EGQAk0<9qLl*9+JhMiv%$)?H)~(Wd3-rBBh~8(sWQ06S|L zFr?%k211(Qq1VTo-0F=se%;;Jhf)s~M+ZXEDephjy};a_&PTeqKGoCFi7@2W(BK7l z7R*O!aowq~ef6d-nYK=;vhwPQ63YBfP#O8V8v0VL=GBp`mqkTI-vN;zhANLmcL#q+ zm-K7PlSD-2k#jgYGp0f#dIDAn@QO8&b|gtDsYeJcWzH>6t(n9b*sz6rHhYgML6`>WzmeKmy{H^%qvO_V0v;D%K|iE5aH;@M3gT6gGswisd&Ydq zjE3Zj^6xAk4zlvEDLL~$Q{gaM!Jxq%V&LOT?6ONs+9XMP#-)PxP#<*Yk^~$S9l^`t z0v+=z|I`A|{hg8G*34{#A|@|yv)=tD>*WCV2gVU$;d}|y*lup`Wo2de7S<&Ef@0*K5V)T0wB1w}@=fQv?}A_Z)vH%Wi@yAG8D!t}Z%lFc8C-~z$I@v=8&9P&I#V+-F%dv_pNoYPWC9**RPyowFYHi` z%I*<3uFR2>}@5v+(rqX=SWI9SL8&#e8>(<>lr5&2HImh5J`Mz6yQWzl#80Fsyg zZ*Z=%&4|V)Ahe~W#S8cYjb`n^w|nPyanmRB1Os%Jm{;xw6b^u{3x4l>3JW+_I`tcr zEA1xAaAH6#`vF@rlTPHE7~PIqUK#vUsg}XRBJY!@&*Vx3JHiVpU#|9j9qEneRV-k( z7!Q1X_alDmt6enrYZ^_0VcNdWnfjlIo+6wwGe>ISPj$`opaa_3P&%m6W}nm5o9AA@Y|H2}|Kw4ilr3%uVDWdN@Ia>G*>%s|>h(cL`MPTqjq?6^ zGedIM{L^3{#NMo0`u=)%%J6?np2nDyJ+r!8f+UkZgfF@)pLbOtZ-9}_0H^>zP##C1 zqrZ2q`~*6L-DyZq+p-Q>pxf~`6g5`-W^xMh(UE*MP1@^yAn`1S^i>g#&~2FotS|E2%1cU=UXa>EJW4%G3GJRYt zz_>87udax09UWy>Bp;$`a8?=zEgQHnZXbAEFG*NgSvy>Q09+eavpLND;ZyaC7`**A zuc}o=0ElR47;8*16g#k$)yKikq!S8#_U&NFXnre#_-^#e1Lc>Rkn*lvPZ{<8QuEaT6rulH`yS5u!dWqDI4%<_MPK2e7j>d-oK4xZu zY`O2N1FzIy_>tN={zH(YRr<~Eh3!Rueo=`(*f8qB^Z@i!8rUFM99o6<;}*j+4+XMv zHspzDj*voox1)Y|?_p(oX2^c8^2vMI>+MID0HDIja<=vwJCQxf%Ji=!O?rNW1Xp_J zcn3=jVslD#@hgzd7X);Jb5dd-M-~XfC(vk@F8F=$Thx;ivX&9guim ze1*go%CLeBpDyz~=bWj@<@@vfig~Q)eXgKI{+TQ^@+W)RJ?|O5nbtAad!y7@8>kR5 zbPl2B7P`uWlv4bdBT38})A+viJ}J>dT9WH|-R_0n*Uf_U$pGI?BNcvA5|3~eMOLvg1*xhL@ zgeK2bCaJA_+L~3!{uEW9yao43=GRt3is_2O`2H7SAFnC>Aye=C1B}}te;u_7s#rt+ z_J!k)%RmU<)kZ#})?h$S7@Zcrj4`F;;|k4+sTA2)Z5_P)jS zIL4~Y(#=nrdxed_Q=eKV?)Hqs@Lu6Ra2O4c9bnkL{HI^zSKy@iY=wEDV<(GP>asu{ zMkwC&axL%ckiyYCaZUtw|IxfAitpBIBzD!)eOL69fgjm(+AWcAhmX1MlzuUd4f-F465T)CW6GyFGN#ywqbV8&e+>$yu#K zBD31klJRyQ{|ou_7;(ca|DPGZqGt4f4^0KYQRi(1gYn$XXgAGTd3;AEw?anwu<2Xe zjfn9m)F>zoX+4NKrNX{{#J&D|u~_EFz!=VE4qG|uw9It#8U+Q#@A-QFwFqt1Ha~W@ zARE(5LYsAVO2`@BB!aNdhK!ww8pfR0oiBWjD8rHc(g$CUPl@NIA?GE2W(#RQd$j7_ zOkE)8eW_)t@m?%iI)<|=&YLbFV{O$IPOGiLPuh zj-uk?W98adTwBQK&=Ro>nxi_UOoqw%PBO1M_kyXaDr7yNVuMfFVfjuVGmE9B{J3p; z>Tz7GiocykKM4`7;o5e&p)QSVx@EQeH&S+G@#NW}(Pr2_>(}wCHMlTxE004J?q9dx z7D^_B$M5_qyj@iue!mWd8O}A^IGM(*G}+ z@SFbGGXW=VgTmBP@{cT;OxrUUq{u;$5dDd`OT;j@)2>{dA5%{>-mG?hf_o92X+}pw zYdagUaP;(*hkB4wZy^t7;+|-wP1pCY z+C$Fa7{Z@-(w>O_s>>!`b2PBZ@?&5O?9LQLQ^j=p_OQ|Lh9xoQ`bymC*y zxU%Oi(#`f%ZY`HqX7{n%>NE9l4|Zw!R}b1zo6nND?OOB}R9hdg zr2#s0tv4e#TV*D#6F>?Cv#{w3)Z63L_y?v_9!H5H!I-&U()hM>Wb+jy6PCp#B|AA> z-DmItSu9qxUz(vzGn(=P|?uZQyP?DTrxFAt!H1 zXRCfjEWAa1B6Ofsf?PfO=L$29nH6yQv&n(@2kLd`2!@#XCMAUl#b)v`^?q$fJlo-( z!$Q%{4cg|g!W5B3z5XBAHI}u=k}5EN_72rNAv{@|UE}e^M@ug$e%eb#V@IsDzSn_I zzO5>o?ftagQQj~Vt-h_#M3KtWK8RQhKmC+oAnUuYX&i z2MfNH*~&4!|9YiDp5@Q%pX6!ipWlwnc7zzT{aJPP!{KV^+MlaPv4|^cf9xQ7lTh3$ z7gJ4LERkqV#Rd&{l5V$Cl(-#;uC69kx=u;^hZ6}+5%F4UHTY}H)mFM~m;l04ykwr8 zHkk(j0Ck;VjvMXedh&)^8s*cg;z!N?VP}zM44gFJEf<=UbP1(3Z3Weqgikn&Iq2yt7^fa`xTS86)7+6`Z9T zC2)KYRAjAnEM4B)){C}a@=8^V3Jm`xb2T^fdqu`c<@C$!4KLTEya12Ws zW@{@|L;HUqQ8M@M-W(uil$wl|eG!S?Y7K7Y+JX8y#Sl*gv1ge!-?TTQuJsgdc?M9E zw1&Hj^&2m9#s>+=sWW0NbDx2EpMjaV~c3b0UHrSX?f-$7p(2Q|ldS3C?9k+b2) ztsFxzlU=p&6dAwVwtk(o;LMKH!oa*uo(`X7A^V;#w5WW4LX+~0mEzM=+1iWK+$Z=C zT5^RG{Yh+5J@UCsdV}vF{qciJrF65WU{>hO1S#%aEOcb>qv?Mlq)|;AtqtULA6$3? z8AuF8)74~I9W{q2Q4J0U*E-!i^$B|+At7LmNCQ7W)^!*d+q>GvM(jsq>TH{XEDH2J0E^vLZnolOjhK0RH zMI<37_XP;UkLc)r|MT5nHz^SiuquV7|1gwhZ&SlpY!>smvOK!cN#ZI$=YP8 zW2jyy>a>B>m462U@X0745S*W%=P#9^yE;NW>@)#Ug3M(LX=l#G{PPFR`EKX#Po3oi zHVUU92Ybgfxfq3_A|Qys-TtVI3w>WMJuxl?KZC$iT|LdFOE>UwkCc=OF}~Gp9vgw4 zo@Nd-9B`vdiaNN@gQM(uQee6&0`7ywEMFg-wqij-YKAHkr>XnBDQIss%afQ16_baxC5 z_Aw%2e=@hvujdG)#(}mVOv{NT(+~}+06{m ze!+fMs0u|23EP#BR~PS*pS}Qk5ar4pG-(1TO=01)pG9dvc1^;UTCAxyz1DCV9K8vk zHqd)#n%nxl)QSUxiW%sR&d$%Dqo8z{uQ~w%2oT;IW!1_ARVgV=p6yJ2cZG%Bz9?P< zfh9m&t(cS(x?>#9W;X8&;x98lZ&_^)(m{q2I{H3JHB&b>Ei~|r$KmgCN1R|%qhk{z zv?RzUdc-|ma^I^O1M!v-fUK0SQI1y2yS6@D@|!$dVE};)bDk%$z*xe3ZC4x+M=xNs3avYJltq~`uNe_OE~AYXp0Ge_;sLF zLneOz5(ZyQ?H;&U0dS0deqw+%CAqe6qoSh1WW0k6&dfWma|w`R zZ*On2058C^3)@HGI;+WOG=Rk)lj{Jy_jRr!fxS4z-NUdyRSZB10`=~NRpUi>WL!4u zAFYdk&JTEpg#dyHM7qEShZRD!+Z!Lz=5+>jI212sKuElw1y4tjmHt{q0xiGf(E3M2 zM+-}uA*6pDP^z2VH3Y5<+tjm;3xHW2#j7w5PM8?57j zwvNvA$dK^!<8vgCx%49dttV~>)ysh}#d>M0!)0h7#6Bf3HI*n#dLM_??iafZNJfrl zoI&w2Z-QNo-ixt`ib~vuFT**wp z%Iq@%B4=j3k?=B9GlYNzRYPOJZa0$Bl256`-smciiB_XL(ST+Oh|Ez00FDbR&CEb7 zU01ef%d*SMF;?w5G~`kOD1lss9Y(#`*MO>f(vmV)TjnO?`BRJm`~74o2^SY`x6{&# zmig9in)L1oJg%ZaYasn_BlF>DYJeYXndhMewNlA9V6yn(v2@^mzYquC9m8{XpZNDU zW(VV#38>!Q24j^uv{5)5a0viBO69zZdH)*7*n!#Xxd1SGJ}Qjc+n>OcXf=ojD}{lo z3+SpPQe4iGy^kQfmsbOfJ_mbFj2=E}pPdj%lf=^(SmbGqyd;0nn3$PC77cP7k;c}}JdvMZ zK-%u)+CN0ADcqy^8u)hSXI2OEB1xOTZ-ES0 z44}Nd*Cr(9_wWsq3jo05c)=Y8z)?HuQpf;vfsTnOLeo{VJ^A#Fr}sCfA}t9po|E5u zgj^7EXH$`ZcKY^8p0M72N8oahP&R*JHvQX6Qd1x)Tk*V4zOV&6_H?tQWq}TBrZ;*gnX4Fw(TWieP$X1GeD=F++N;sVz~nKqPr4rMIzy~vfscq?&nW-TU-uv%8kP;P=PRpzr)CQk30GHF;RQgq-Dkbc;q`N! z{Ni9SW=9=}M2oZE@vB=r}G=d@eVbB7o8L zQ`MiOxJg5Gbf*tw3Hc)vwD`0@LAw5EeJDoMe9qXCh^We68ToFz%x{;kgk~z#n;k*{ zYz@Qdwk30O&;H!j7D@AWAWXXY^@}rn&cFb@jw!g9G@BvjeFGXZ;!_PSYCcT zbvROp2K*x8BMJAP6M!JU%9sI2*xL|3yrx!%h&HcO8^wuPzm82^BOw9qhDE0ee6%=<-u>PIo_L*han&cVsxIBWdBvVaaEoL z1B$8lt`3K*Q-*ZiMn>SaN3NfnS(sI`M{iY%l}zD$EE}Uli|@~*a)ByCOjnK+a7SBI zc1Oz1u|5bFxd|8U_Mggg5&>H?hwn;uaBk{iXPpB$79h&N1gzNBTwz1a9hRVe%D+h& z3Hy?dBf9H-aSRh*w;#_vpp}Dw?I~3=(Y_$`UrZ7*3X1c|7Wx8@BTP$oci=y?*XH+^ z=li3PN?Ov{av);DVBd)NknY#nZn$8^$C1H*Y$-B1lKH40@lrp36qpsCvNlk|&DJh= z1jT7j=P`xgaVzumLW&{91jbXcER75@i*Dn^U((0|9uivBfep}RZrW;ZDWqN^tJ2cX`g7oS+8 z3mDs3ELzFgUB0rbKbkb?)N20>4?iCcF}nfF8?pO>C(Y-wmygP0u)r(PYl++0y>>p` zfbQ+SAmNh%OS3|WT+HLGwbu#?9yr6A4;rmzzO9mXe0MEPHcrgu5+55^-(bf#;j$UB zF;K}-F*Go=z%UwQMX<2VLJagFNPph_`||!CMwZ~$=kz7$wbPGz*QQ;9UAu!#kEW%= zAKrISxeQAs617DAspktC_|@;XW_EHM8yqvt`yf@83z5>6)fCL6-!6*PUJ(aNH}qn(lXur|yf#y-T`vi&ef@9I`neBBE7?NL=i3!Q`ox^1RETU z+$VEy4>_{rFn#T|g3zf4O_;2leqZ|@6e39v7;grTWN^G_X=ppAV@z3BUt8Yr?LpC% z3PX?AMEMnJ25CYyH?p6V9vwE5jJxK;!XTjSZH|qQrJXT<|M+YT3T0mWI+3_psA$xe zmXr^oZh`z5qNC;iZ7Y3u16!XmSMTUWV$ zdI6bwD)GyjEJ%aL(F#QHP+EKuCQ6&K9U9rpx>s*-iP3^kT3BHdW6Ly5TEcwSsxll( zU~yiHoy)#3n>d=Fh%Wr>jkwnNbM~Pl_<{K}$=HqUPK_WX8Du&zEV;Xy>Lq{+QGdBJ za43OYY24cs#llrZ&5I>GyLw~)DB;2|hME44lXE8asxGbKtRa8n$ zp5X)se)MOv>CY|Fs=X*@#uO1|4gz&Fpp$Ke&fka#rwZHIjo+co7Ac#Pdmd|7s+23! zIypJ>jh*SEZteLKGSu)qLhdV$Mt;B79$1VK~sq!D3{6)~(}U2Bm2XAR|2y z2C;js71_aKt~jKmXdU_$ZQ##W$*7nXVc~Ujf>i$M%f^)@)z`q{)I2W{x594dI*XTXU zudRSr1Uw=nrA*m_0`+ObZM7y-)F02mUysocxG*q2|9(Uo{`2LJ?_kaH%KG~oz|Wrv zVzY*w9TS9KYH4LmX-P?qNtsvc4-`ow-)(ukB~1{~Z@14RZTst2i~RInu7!!3S^Xgj zeD8-#YV;mjyXIGqpZQ?;lh5j(S^zw$e5}V~11}or=G(EaK8F5vym=2M)dn`vCGc=P;b$r z@Eso-o^YaV)-nz6*3Dv9RbJ{^m>w6EY~?t7DH04(N1poN?jKwkF1+CkiG=`Dd2;w3 zu)&<~G`A<2&&p*P(j_M+kGg)`mj2h797h%<8_={I1omOZ1j+EJz?lGlDe4@zQf)mv zB}RhdTZB(mQ!dy-f>Zr@y8X0Z-m)g`}nux;8b$F_Br8(lchzp%7%a3FHtOu8@>(G~gY z@~*Ftleg#EjQj5oPO;;Mgurdy6H1t=9KwcPSh639#r>y3=9E+O=W18Y-W$>bqN{nVkymlTGdY-Tnuk$*eeZB z96hxdNL?moz9MT_ibv{MB2VNq5&Y5mQzTBp1@SQYrIGoX5V~Bc^^ym^HnEEgq1{;4 zlBl>cA&)0wKMA6Y66&4&%ndxPkhR~kuUn!LqEO7fK#i$ClAif|ktVGk+qN4MZoFk3 zuZMjq*L;~2-K`pQVz2d6RMD~skt%Nj+4*{vyX7|P&4!0fGS&-=mcIg z9psb3(Wlnc7qW%!EJ4nY_P*RF7AsIrTekdfBf*<$&C)#tb;tA&pSunCuRa`j`8%p@yZ3ltzQ#hSocu+9RTbU6ddlN|tiDqHMiisQg^V`I8Yt z;p1APX$&{Uz29UKUoXK$7!?MFqscejB!VV~#b)~Rt;62Bi87T07QOcM=-c0;W#|K- z^(v+Fd_|l#%X_jN`0=B*$wuTJ5)vitfzrddt?OvMl_um#a+j{_6;$8k@)~%!Lqy4* z`M|>X{7L`k%zU44hRO*CF7iAZ71j*k0=C&hTv=FYVQ(2%i4TV9r{^ zvT776?`h=_hwnGPHkF4iS;^36W2G&sqR3atPbDT_Dc5iu#&8c*TnBT-R>Qsx4_{d* zy$xjF$ad*_7XJlBza`p$0EtERs6)vKfx$4inyU?pX)qUvhQn`)i=cr&nxV_8c9ATB z{v5gamG_tZ*m3#@Y{xG=t7Jlm%{o%QMKv+sZ4&$-u(G3(gFnQFa$b}o`4vQWSsaGb zE|rD8*{o-!L2nJJ>zls2RD8i&TA2y+0(>WgE7-iJDV3j1Hw5L90(~oPnOv&F7sf!#AaDV|6Ys9 zv$*jIBp>+P<8L<<7QdcTfSU@q`OaGJX>N3>@#3vDx?$;@1EY*KCcg%~ln_jRbg3%( z;p#Om)P1U*nu4Vy_e2}AwJ@OajnirQ;N5r$W;By(y zff2jyt?KITQI^M(N#}@fC3BoOQ7&I>wwtu9%g?-%$k=M zHXaT`GvYYemY9rx%C8TZ?VQ)|@aq;Z+;SX`x?fC{zQSA`T6yV-dYCU6d{Et8YfFOt zrXvj50j-gzO~@aHi0*hBeb*qnKS_g%c%y3(sh5$1 z%s044sDeXF<{?&TKubc_;m>a^T+%3wOrSq>`7s`@KteVE@#`Ius z$SlL_6(Eu?2WD{{UoLxo>rpAO8KqzjbNWK>_pXJXsey?PHkrWs31fW(o#~UVTFbSo ze3;fs=P0QN#2$Ufz@6Wu<=bZjLZ!ZPO}ZkaWMsw@w`@UIucb8cTJ@PnR`wmQHgeO5 zrVW925=@721y2g;Yq&2{Vsm@hZj-dEC%vC?2|ZZ~)MahB6N%N|p-{ES{ymHCF@WcC zU^pTxp7mZHbS+S2b6<1yj`Fa!Zgx+cKaToT{&WwK@9Ln#hjZ8QbT6F^;g<$vlGzDw zH>tk`py=ISU7z9FL+%Nm&}-i&zemPn35cb5(;uEjaoDU!x%V8kRMQ_?NavKBMn*0m z`HR0Hwq!FBld}<}dDL?BVxd=9gGb0pxt+Jce1(dbF|r ziIas!Dlq-}CYw&PI05yxo=GSNO+y<;l#-I`AAe>@a~>8@0$|Pr?lD_!bbb$s4?6 z$&!H3qm}+f%bg|V(8!}td}$+m!auOPjTtXA1dj*RwGuvx4;no@Ow-d9gvl@ndG`a3Rg1=QLWHZikhPo$kWy#O>`G+O!!v@-z5-o+haj>|Gs3Jg#leZ~5{R z01@G>5N2-h>vMB1HR7Px`2D;E=-M7DO!q}kY#0OtgxIT+9Oo!eU>nb#9G4%d7Gp?k zTuk1bD%EQNIi<3acn|L=?_}l`FG7`y!6}82r;u`jti6sfBC9qk6a`T|&^tbLBpLOU zhuMk3-&2)pHVYSoOOR?TOYKi(WiAshAh%a-8vFR6qAtIoMCV#A30J;O?3VK_MF}jC zj=Z!QIkd!Rw@)ZRL6gec29oCLT-dBrOBOzlW|Ql{V>bx;yxoU%1#V znk*q^^>l}sdmc|dj%{&paYCLwfWdwd{}P{SK)4 zoc){IS+;sRGcmv>~-JnsB>=I+L(&*~0;9Fj{hs51<9Y zM*c0^AsbVr;^DTcZqI3-)M5~xKaiYeIM(!kiu>xQDA%apK~z*wM5IfR?(R@gIuuYk zq(-_y8buLF=>`=f1*Dsy8%DaDVd#co7~($YIey>0e|+oS@7}fUtg~=&hI!|GpJzWi zetYlVc2*cKw~416)dYm0DFym|x2(1MzFM|ekjboQa;8d)&`(1@h^K4`%$N^Xp?2TqKfL7 zA(^-DuDBIjivs=>*+fBoMvp^EKAUko-^Qn&%l);CH2a%!i7^Gm&=HQSQ#)*ow7Wlz zjE#@X5Aoe4?u0`-&58?wu5sG@m6EL{0qt7q!J`)PJ@b-O95H-Q|23BYH5DQv#Bv<| zE+p)M(y$$0e6Xj04IdJoihT!}EGXw5SF^IwtG6>ziCrv=n2!R~S$ElA;-&Qkj5UC5 zoF6aE?Pz247KmA!n;Xn}A^Nly00^{cwD$Hc_oG-Vsw%(B8Ytz#Q_bM=XH#P>R~Vtt ze0ncqAAUAG4-XGYO3I(wc|z3{x9{HFj?<8S!V@u7?V^hLQ1wHvHUbnb+M{>rInFSg zrd=9_a1Ke97x|5wdfuZKU0B(idZMK&y-R54hC5dewiJNyGwale+2q?Sw#P@#&hiFR z2~*|{b>5j7V$%{z1&~SG1Iw2g-aEn=)F#%Q;t+l7{@|mdH=)$R%~5iMva+&Xu0KJG z!M3gJe8NMegj(f;1b%xLmxl9Z``%=61wbx{URukpsHorqz|I92P->}hp*ey`&P~q> z9GNwDXX)`MZec^7cA=HlmKk&e*!tL;n zyI-KWx^BBaEs?dZB3AwD&SpN6yl5EmzTdGiPy8l}M$MD!0zY&TPw2Z=qgj`ya|Lmc z@H8U?%jGMV>7bhDbtc?YBDH>ge%N3fY|Y>-(RjJ_haR&9U`}dA(kO_#rtnKR1wDyo zOcf$|d414m8Hr^K0c*^;GMG;_TJ8!aVCY@C1CvGnoN4Ru3J3s1u@you^R|_?UInzD z7qV*P+kvqPI3y>M;Q#;w1@!AvwXEm^QN5}{vxA()5qgE_4AtnI?o)JI^=iKMoWiu{ z^ijT6*w(7#gUWsVhlkaTGjG`aS;@4j&>G#l#t2qUG9c(nnFCLM@aAQw&bF6a%D z*qK`_jHW^wIjYe>Y9c;=u5Werd3KJ7#bSCeZk5~TpNV76RNzaSR1&lu680euTc z_QS4#<}C1g5HSPP5&Oc}OB`>DS2}4flz@$irrOp=c-Erl1%)k-|yD@*70Mot#{0jscT84y74ZbBZ1FGU-m zy`S5iGb+^BKLZ#jOy_4@Xedo?DiMXPB%x7VCvS+rU#wo9nDf&`*3|3 zMn+(2x&eS6IkHx%hf1kELN3ZB2%5|8WfZ6us+#7!DA=j@E`q`vJZSd6dLWhgY{vu0 z3{*^;m+kR~kV;zztG$*5b&Bykrsmu7QV^gnmBt(p=6xjuJ&Am@T(f-1)dz2q6zPHAmB`&`$KW6m z_AicY<*%pa`Rh`J{Ztqgl_gx3XWx1#qrB_fZ^qEEKk+=UAWamsg4_e^7}s+P+{bmg zt0coZqE?zzct<#``@L++m?(EP5fR8}|0f}q2 z6q};d8iIlsoK`In4>Miz$OPT#{QU740Wq;_H2-8@Xo!x&N1Q8Hc}&6ZozT-@;XPub zLTzE!&2?+z+rM{`MJYplW-xzY;^;1WC*!H4ymx^^bk3VMCWryKRP5Qg%}4KA-qqHM z<9cJF0gDUwY?=gENF-p2_LC5d(4c%R4k{hu|xp%f7c#1fzoc4Jv4boZ=X}v zVN%8V(7bRmp;g>w|C(nYahhs0izmMqL#hfTe0n1PZ9qEALtF=|gO?X_Ykj6I{>#G~ zB+QMV8SFYPt|@4&dh(RsX7;BU;s)TTX&WD6hFUG|>>Bl~MxPva!9kVuL=UIlBFu{$~l3|f1|mjF2AjOT3kfUUcnboLRXLID*GGcYQN-@-nB#$D_}_VlKY zp!Y~*^;u{YV%PxNP-rjJ%%wYmcdT}#Spiai{%-Likc<#c*YaOjW7k$aKwIFEjY?mcuzc@gGUU0!(gI zyKbcS=xhkP?8`b_-A~c;t{M1FQGM!?!BlP0;vhjL5FuWDn)2FO3Pv?yekRSDlyt{c zcYQJs$65aes@{Ei8g1|7M7K*laM#w=a7I6&ZkSTG+bRcRONTuGP^6~?|>}<<1C)Q_CS85jZA5lq<^r{rc7LmmVK0m%{?Gc;U zySBaN>;F0+`a>y!d~?AY&=Se~|GuPLV-k%8!E2?Pn;hK883JT|?W?Y9TY$@|dhNnyoQVcfL7 zCnhGBn}EYxuS5!A@D>O?!^YwD+1Y|vp&bcfoO*cmU~pr5GNa0_8}J3V>`y9i%9v^6 z{mwrTjwWu5AzWF5+(&w;N^B-Vy#Ti#Q?>cR)niXSU%Au}uWu59U`7$Z8qH4kaRH&t zg-ile%>iDNH&ORAtyPH&wChNO?xcpg&E}8Ic#20iNXh(q-C)#MptrCE!#6CZH;54ht)&*`w;eiaV^XLqO1_mSr) z>cNkf6bo%3%F~M$bGESlVicxZr{XT~1qJdA+T>@Np(((=ebxPN1CadrgKXBE+7D7N zW2U)xIuz7~INV#2hy#Wm%;7jPS(eq+(-U@N2q;YRXAHA#tl-|K*uFmHUK4baVg{bn z8~>%5zoPm-(n^=GFKL2lnjp({C9<#i&{`+5&0%LA)_r0|ZlH8d3@jS}9J*X*ybrB7 zeqQ8G#9mwlea#cewj$N93vCF(K|c!X zmWb_o)4Hg+-x5wsOQ!GXN%=CDD6&I&AouB${%eq zewIFc?MJYx@y!peP##E<{&@rZlnWXDC(#Ce`Cl?;WLH2&@SoRz^S*=i-0>g&dx;13 zIir``=AD1SHEvkl_Sw9~-6lZjWvAqhuSBQz?Dyl+`B{Lmy0tS~QpB#V({J*)ftOwd zt^A3UY!2b06BE1^;ArO?xN1m(GP_y7I+_a~YJGhjXjsx2&x0$E-oAzKnIDR5h&a)C zgeHN`OfGx{d4CITdX8$cWji_6WK3ygEii|_khFBX4FjT8+d0WgdSGSs@ndgSee zTb~=owz;Wzwrg2r*3}xDsxrSE-sJfU`5*z-$Kr+u2_im;5%cF{P?7EP2li7+Cb-e4 zFx_2(X8$y9+2vyi%}I@#etPLQihDOD}Vy<t5z%PkqcV47SRVqV2A3QO?J=0 z@H0r8lz`k_IOTO17m?bT^X)q1U0^;zEPdfNg-{5Bf-71c+Djl0my5NHPQQLR_4>Tx zv)jCNsXeSAs4S%u;uiRa8H5F*R zvWbm1>b9id4gYHQB8i2M;kZ5rM{srQHshA&5AGH_7QN3DqL&8V4APQC{>d7U{W^q| zNvKyQzO4iGvi(K}G$3TZ7!Gabxkn_B7y^I_U3`4#?Ce)CHIMwFZ**|`en)&Huyg#C zc>tifYS?yY?Rwz2GvkAm1t^C>al{wkDT6hR0P)g2?ttqTa@3)gafgtiX^=TGGE*@Y zFlq|emO_WS$u3_>Qa(t^P&$1F;ETN`xFeR3&n8=H2wAjHXwavHER2zO47-*h$eTbu zx2*|7%FZg|^L%Ws*7JI}tPbYFKP|Lf*&p)Fa!+97)i@3izAN${OZS*VW1B-YIu3*It#QjZtq6 zNvzECxi+nt=OC^AGJonJ$X*cI9n;JkEkLf_z-uny3@iP&7664Z1z=ukgWs{^*`zRN z-SjJW^#%nVq+*_Q(07-1^y=_{b%jt;QEmwjxz#gD0kDK?K|0J3RLfLURPh`S>;T^l z3|;e|2?bO^eL*kQ1m@@G1AELKaBv7brO=0qx0R61yyB`4_?jx#ccJ{x@ekbsv2Od! z356%tF**#Onv+JQ*FWWT6f8)cs6{F1ktNBK(4Dnw8{u0sN{j>vP3bxat3bubi62at zi<3xhJdIM*S`WduSEP%4=6_KtA-NldA2Ps*?YX1;#E;;dY_By0%lvB z@sX+k6QTiw3P>ABT{zv)sqy9!pd|p;(eoT9vWu8bCx)#9t2f$GkgiG~Y&kwDe4@0y|Ur+Ay?=J1NniUrTtl0Y$0p-vYQb`fhuNhBg&QwX3 zw`t0J&CTGoLsZDk4d7*p`y?Fc8&^oca%D9m9$H=BL2*WWK6*;gT3t-N6;VK-obq;3 zXdeHo{gaO+ZQmag(MlZ}vT5F`{#B|gP8@JEV4^PmD3G5pQ5g{@Yxebb-ddI+MqK7r zUCIvC$1{m`mKg-7z`g|WIroD20{^IgCz%6O3cfd%3HwzA2G71^Z40Amdd&y6_X=hB@hzAYVPH|z<^&9hG z;Bgd-o?~5E?<+p@AeA4U;Sb(0)(Mkl9W5_^WrK1d1)}Lih_>J~~R;|Sq2*6$p z8<7U{%ggO5lAbCp@-MP9vu}vHT0PhY<3)EgfV&c}?%6I!>6v4E$PqMF%?1%XWV_-= zfb1;DWJ&=~CV5ndH@jV|+t!(SJe^zkd8zS+7c3b+U z{^FpVPirt~>x5o4x8e3Pz!%)CVc^{h6f*>XxNIPvdA%+FK>x@29q7Avq&(ZkpgPMB zl(TUTX5&8m6!D!2WKu4Q#K2r&Yrydnm+F(O5*xZ96sXjJ*Ew0&^uPIT>qtGEc@KmF93W`(g>wS6fp|g^tvHvWlL22dQ!zY7k~d*fi&R zhH$~s6)|iZJL?0~nY3n&*yjv$2>%LV1LY$*t`Vz%G15nPhDsO0_-cE9zs3^x5j6J4 z3it0qB)4n87JY7%c)Egmw3Ruo5|U6#CTvC-Vvw!k>B%zC^!;hm0D?1C>%Lsg6&JRcpRG{-2m8rZs9E|Z| ziEZ2RTe&9JhMRliD!79SUF?nOY*f^c^!$@ zhVx&ci|AEKQ}e~$!v$?6q;FB2sAB-+rh+AdF5s$ip9kL2tq-}=dvDeyy>)f?E?KIN z@>0jkwtoLDML=Vv3tyo`z*@6CA5ba`H%S;U|9o^Z*3?XS9=Ysi+3)e1maMn-QmFR7 z4*iowfj*oOrV6Ir%fTz+5a3(=d7-!d_?>@T)c@_8vj4&}Zryx-1KAn5Wga5+=b}76 zgYH8IJgxx<<9B%((`@qq`NuzgzKNl-GKY%#3}n;>qX#@g3Ov-2-X9wVD(jee(vPs~ z4Ix4F_r3f


3{NUq*4EFkS~jQ}1Q7wLTt0ft%}a5`0(I0UZx5o~trY5W^Hq`Ym$ zPx})$eI}z(%q(@kOD-h8H?(zI%J_&{r=uY@FboXIi56^Z{KTh;h51; z(t39fbsl>^vWZjeI|Sj-M!Pl>bHBIE*9Wc!w>D!c@7pUo2bNM2{afRg*#=f%^SO1s zFZ+&Q8kS#6K;LU@icu~HkN4b_31GJqt8JRDVqeAU@F5TOpXeluuw?!>j8d8E`D|>I zVBGH^%{5vdh=o0@v%)PGAKKvzmN33rw0MW%fpk+3D#9C&St|735UYK_RcHU#XTI|B z7(NY7?(#k-owpumEVQ)nfcw!T{);G^Gn7UIOGcF&tQ*@7y zTZyZYQtXFIJs~WuNegIKbHUV(+F{J}KN;NneobKdQ01>orsRnF1?*zx|20~eVU#&sbSqdy>{V~GRKPe6I_V#F3gfYnf8TIg>m>&5^S=5V?mPKjAs zfb3H28%~v)@|hGw*1u<0OwCofmJl5GHGP!R-)mHGaK!g8~uuhi|)+WHp?>(tuwd&8;Ui%0GlxiuCB1f1YZuBGJvt$&ra`b48h!_csk zAgMF*!?Y=;>AlF^bfer?c(!WW=J;IBOY?)~11ZDo77;U1by6Tm=du#?3oW`vJIb-;d#4qzf~g0=AmCFhUUbmi`e2eg*i_SSa@UH^5T0*kFRAxT<;OfVomW@6 z+@9x6Jn`17`*d@ntk}KJ>A3DC+m7Z9v)%Ie-qmD}(d{(|i@R@Sv*mtrS<;ZsApo)+ z%<#-Vgt5*JelD!T&N90sM$Tj3rG0gn$CzWE+$)paPvye{qgcq6{B$g4l-S}4bH#Fn7{CH?FXUX8DEO-6C-Z@bBkIEt0uTIT8RTdIE+ zf+J_ORV#H1xLuxc@9Lby^BR%n_C72Vu-$#f_@0fb)mP3VfERsd=k#&au(>o$`xkCn8Tv|&_KIw7y5m6yeqpRFD!j&&?xHD9sc)t%P~pD^Qc*XiHUmh)L+_s6d< zWqq$34C#KewA+lgXwIE{likL0AR<{z_-(Q4zUg(7mEf_c&5;xfYk$?ko3}|i`w#{^ zCaYH(Q)c%;c{uOi^S0tX2v%kpmvSsd=)>4n38VAseq*MExO^gtPAS)=sb>l+plN;1 zf33$ohV{KZwixcS5{Q+!H)|8O6B4hkGJfujxoB7D-E_Cwg#FE#z|&J=0(bf-p_*%Y z!ogp=;EXYjcFjF^rJmik8z`tIrz2_qvTnaXalnR@(q^FY|5-}*g?Jp)b=QQoJp>+|m}2^)X9x4(ad3E85srSxHSq{E=J zGtb@LL$gZa^VN+T{bnatH7*ACeey_l?5pdG_>s2JqSeV;k~){4!qVM_^zp1pVZps;D_hM4N^c#^OZYhihh)w(mRU#C8{~U>BNq z5?2soBOe_5rlog)Q9drQAm(Ugs6MP26UBUK|$~{r$;T z+C}@i_G43=cD3(9Hpp^b=*BCKt%+VaQCpCcQK&4M7WznIeA*rEdC*4BHqH5K2{AA9 z!3sGtGcxbW!0N1@|L_w}OJ$)8t>hU|h|Jd_^#ZL(mZ!ycHefL;gc(H#k0~`dZr|Ob zGz}!qe6#bec_X=1apv~qjk{?^J??`n$dI{UnxHz;rW)7-Y9vokfQbk1t&DB(*Jk2~qg+P&UtCwuVtkl$F z{cphEL{R7J;WnA@7;%xlZT3y$PHv<7^Fi?Q{Qlp)=RMTS6$u1=4NfR=y}u^S{jSbk z0yOM@s_g$Sys*E<2yDoIg{%G-O$5fV)7Tg3L-4AM>@fKV{_D#UBLm({56ILN(gBA^ z?4{Sg$B9m=uw2j>_)0mT+ku-rgfzqq6g>mV`!M};=3u!$uHa(fWcLNYv5%@inf(1^ z({Gz={1@-#;m;dmqKzmN>-Exdb@+1!;HMmK=L?eGzlAH_w`b=jB*hCG@$K<%F>+hi z(|G!1aqcg&OqOzSznj-38_DrHteKX9>D+%U|BoAD@`fRjS*nblmey76Uq6wjt}R*m zv}6MKYSn+Q0=C7x^^cSbZuBUl*pfcqJ}+ter>v9gb8RiUu1)p)$Ll5+q-Ekw85yKU zOj&U;42j9kn^~TpZ=}eZUL5R*)MSfMZ*@@Ue{|mkJ@jrCS;8&kb(ryL?}?%wr~X3)myT=Z^}em%$b(Iarzmb?O5i zY^X))c!AR_#I|6Y)cmH%%evF*yVa|0@oOmC`_NMfC$BUPQ+N;15w34GS_7sG3Xt(K*5sBC#gHhaE|e^o?(5yok%FICiN zy|pIQB!#U-ad`XY6B|TzLuLT(WxF(!)7C`^nC}#l*9gK|95j2hN^>p1t?0GQXgRB&HG6+Ee`uismaz>Zwn>ex(39cIjGq2I}FWxjpEmKw)T}eKn$2P7+cEiA{C4 zI`Y%2cqZSs9K6vhZ6E7k{N5aljQKJSBJ-_!ZTj7aj+Qvh&<~ks-#a7!dX+q-?d`J1 zK7(N$2A&xN*q8VBPoy4yq*Ad$LG-+g1V zg?wihx5cio*pDJ}tkmI3n^XfbB#fEH@vg#4&Z0L$1kR%*GwfK+ji>OAVz4JI#j77B zKjjR5DEq)+->~>J|A$RnuKM@LLNlFJivLdYW3r%tG z);&xFJtzgjQ&#Q;Q>tTAz2iQBT-xa|{_I}10k4Un4`6Vh9-XfHX_ukF-r{@8c!Vtb zVthK8;=~peyXpNgb!p|V!iYBjc~88PqX!I1=y&*-gM}`*q|b7dJq41hVD({L(&;4} zSG2ty>SY<#wK+5IZ(|cU88C%Z?C`iCXVdwg(gRQ*ZDLzuk(G{|^^PI0&n--gs0`o- zKlCf~HQ}~hmjX)nGQ7*BqlCpGYauo^?>Ud(vX9i)n&E2?v9<0HouSTxc-_^CwfK!j zRE%Ff#B+i3f3X%7eTP-i{OKm^wVGqQ_|JtQtTj??&oPNXXS0|TM|9y6InbBj;KqA6`El@uA4XRP%7+Lj9iUE zdoXwuWV$FbS3*C%I)L+5M$G~xTbupTh_guds``@B?)TofUm)7ogY{YNPF_(3pC33D#G*Kjo2Rn-ep? z;MFE8WB;M&6e!9l+nR!VuMA+4Hg-|PSTe#jNS?xn>wPex7eDzBmdJYE zYC#TV4f~4PZ+*C_jlw&f7-Fg%hC0)t@(0~h*EufR4d*i#@Rcs8`$}dWq6xft%gCv_ z(Q6Qb_cBi$Py6ZbKxk$5`fjHLg>k!o$bT< zNMCT>*F)Lqkm-Hw0h7<=X2@qdZ_YN(*hcytqB-amVU}XggVb^=iKn%dPKNhm=kLHV zM>#Y?w}jN0p4P3~R5&pu3|5G{w33R2Kz80=xx$#Dp~!V^xpn5Z&avk476yX~CR%wv zjG)JAq_3pCPfB~4(U57<{bp7J&Amg_+C!0VT(#x0wGM4$)*s3&wo0$L%D1t;3{-Cs z8JIT=fBc$^W#hep+_gtHvBIASRGrAbtbadMJSL7jvoA`VGV!4o9-E3Au{0}2dcxqS z4o9B&t!|W;1bnY%e{D%IF(#dF5=#CWI#KMFeHfNVVzAjAvC`Agt>$1Puyh7>HGmz2 zTe;i!eHr1k*F}HyiSy8yiYyJ2NFd`4?F_`74nOxsw*k?f^u*ZO_QdAH?rY@h#BOb|Qt zYj{a&_NdZsQ6?_2weRO6`=_fUa&<>jtc}Nh?`Tk6gOs@y6tEZ*0^3hZm=)QcQg&G_{@2J5# z`*4@GM3Xud#_TX7#hcN!Dq_i)^9**-8{K&l+1o`ACPGtVHeGqguO}44YsF~ZNa+lV zpACo=qgR}IPakIB4ONgq2CZ+PaPXNUPWxa zy3s9t5YKXI1dKsodSQ{qL(87F>$YQBP-GemHAg4c#m$aJ$MgsvRxIpBC!UGK>O1WC zmie4d!6pjoQqc#!o{oE*yOs2e$bKJ#R1MdV9+B_gxzRch2*eOC$@y@sa^H`pThOM? zZE%Frb*{8>MMW|KJz%+&$*G<4y?A1;@lYEw>NL5lyFWZu>Il`3ASxC#>rs=kzNV(E zfm&2dmDtap_R=1KO2r_*&Eyc$?Y+_H-%}hGOZjnBi!k@G@^Yy;ksV%q zr(0&_F)XH@8<6C)levrOaxrO=oQg?=dAsTh*~l#k;-9dFN-TH@+dhJ7`_zc!Zh7!+ z6fYr1Gsxn_*G9(nXIHJ<%^dZU#U+bT$~Y|6V>QmwF-gT)FVUkyoL%0?CM^-hj-4*Y zGhxTw)#A0H&9fI{gWQ~s(6AGGOe>%3%W=W!*qaoo$~tZ~%5nS-HN&G0s!KH08f@s! zrIKjnu0)j_DqFEvTGM<`6@vj~-Kfd|8EW_-u5utlz4`D&~z+*jb&fGe1C1ocD(d{ZjZUO2)(UDp^MT& zA=G59(4vQ-YRem0=DFQeT5pdj+t50WDK}{grK;SI2y)zQRO=rVVwUUw_3Lw(?qT8S zs>jNYG>5sGO7yan%Hke0DWXzM+TJz?`+N;-=26IYMoZA1%!qCztY*$%tj_y1tH84M zv}#fexq5;wmx#(p$xmNEYI$`zqo-r&f+F$_Y`Q~<40_o$6jjtx;IQeVmLFr`cqxUY z(1TihC?dKX(HdFMk!dp~v~Mt3Dlt>DiK$$T6kM9n;G-9Z1Ap+?VbklY%P|x`Pi3S9 zx7bY2qkkZUKg<;4DHv+_BXxV?jL(aF&FN$ZO!1gRpeZqu zy_#t&$-$t`4GObpkhi2hX{f5f)M_9CU7evw1&aRhVVzojP6dt%I!3Fb)h~&y-QH`6 z%K6|;x{!|E9`ug*OnX|jYZjow)9cl%Jdaaw=-c8{=#SeS#@U7Ih(vAkzK z^%(k|kUZ3tv zNsLV8`Y!8ko(?QrbgSZlK{Yz2=4c-G;!ry-+#JbtTOB;v;U8I=p?PCCc$zZg;B zh=FzFRBut2Sw}cUi^^CP(_}>5Yd6wN}2xN9!z_>NobERtpnJ;>7um0-6iF9I_kS%8ULurVSJe8aI zl-}4qtE6p~X!)~6N1r5=zLR}EY^U|aVGT@auHv`Vt`VA=5=VDYKM!8ncs#v0R zOI;QuD4I()*V~~qlD;>i4n*v)M& zY^JQOld90RCZ$0VN<)8HWnah;i&`9_*rl_6( z0`a}xBoYE4Y{zTSaj3Aqd3z!NoU2Agj_Bb{+y547vE~ z|IP(6>}zl?KFJl%2Se1xJFHIdtTYcqSQM?1NXj82B^BHJUo438392{h`<-WuTxEVIoZquM^$wK+tt83ZA+!P{FbaHnyjemgsHU^J%=e z5vfk5BNNjpOAD|VDmbI?*+P7!!*ds}Etn}rr7M1alY+N;FuFI`?$#~B40Rw7kaTSf zAU*x1R8?&OQ^33w-&|?$JV}xxUx~ zginiMHk z5wEBEnCU#X0|VvuKAH;gwrC5ACZ`w5d8HoSagKIzOxoJoIUY1gBG$uSLPSMesCTiz zDdgJW6I7wto%{(89Fk`lO4pvMmC!GZNJ&ZQP8w6)y5IPSRmrxaTLJdD!&c1W*B&BO zJVL|fd_di$ENrLUaNZpeyQK@>JQqeq12dfr=tK zCFu$4N=!-Fyz567`dcrwJ`4XA1?)$g$2|yTdcFfRP_@W)qw2Tz z;eO^pn)jkHN|hsa-~~t6S^z}IP7mSGiExNeg|W1a2es~y-vv)A`?3fHM?_n)($XUCOcH}A{>NodVLS}V4)296Ht(@+@ucr7IjxHTV1YF zSGjUBKD}QuTCsEsAJVE+IAXH$P1d^6DO@$%MUvCPF$d=dg6U$pW`8k9s0R)9H_<-L zDb@H+`&5PbyDEP+!%$Se$XP~ zs;a6-$_L)fUS|#)(_0yJy$Lb4ndxlR{~i@MZCvdW_%=N4_v1?y7`SV$r|9TSiE9+R zoEZI8(C~#5i}XPYmu+C3acx16*Z7SKHBO5CH1Jy$G`{tlEc1|h?$ey7rH8@V8zdZu z60nyz@%<$C=^obNRk}arZlCyuaxSc{x1TlRcDc}NhQS+JO@)VL%cA3nY{b~AZFqZh zc=d5BxP%@)JhNxI>&_4VY$2a)yJnvCy~y$O)pf1HLe%}2r?mCWs(3s3s5MP&Tt8y|TSOu` zzL&EK`g}Un_O0c`_hY4gi^Q$MT7lpd*BX@W^TA=8A1`GH8FRcZlPY*&nu2fh9bOIp zBRFFzH?IYLD|^4NS=DAwNeHQ(aKG72B6HR+^ZS-bNpm{w;pl|vsT>Sdr0AvKy!#^~ zR7(-w9qE6Bi$`@?(~|eu5T1pveWA~q$e}IgZxg6U)bcE`8E^df*{v(SekCY|AvslY z%&QA6wYWOPWLDFLRo_5vQEu_uZU_5~@2{HpC+yMhRg%B$1Y!F<{E}gh%R)a!`7SKZ{|^KD he{F&Pk1v2ePZ&_OX)bzj>*A5+o+>}de{A^fe*k$uZ>9hM literal 0 HcmV?d00001 diff --git a/assets/img/elasticsearch/discover.drawio b/assets/img/elasticsearch/discover.drawio new file mode 100644 index 0000000..41380df --- /dev/null +++ b/assets/img/elasticsearch/discover.drawio @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/elasticsearch/discover.drawio.png b/assets/img/elasticsearch/discover.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..795dd36def5734492a167dcb6eb1089005041b6a GIT binary patch literal 103342 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%0DtQL+GX{b|I#z7MrhC!SSHga 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 WVRM&Q6Fjq$=!vqHQrRQ(xBmeKBl$J} literal 0 HcmV?d00001 diff --git a/assets/img/elasticsearch/heat-map.png b/assets/img/elasticsearch/heat-map.png new file mode 100644 index 0000000000000000000000000000000000000000..3d941cbd2484fe7ebdd8e9bdc8e7a2a56a79cfe5 GIT binary patch literal 57186 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

VR?)A z%o6fw34T{<{3*lEBj!rWvJ11 z6co0cgfcezc3a`TkqbZwJ35>a>>0>W0m{?)a`SQ<_$wmeOk>&X1nBbTo={bGSG%op z;~R|Ku?_k}f&ur?Aoj(;1?tb}4`ajaF_lYRz9zVw#xH9l-uqky@O$1UNWRAd^cE%M ztgtYp3BS}xbJ{Y4ikc9_#3)OD(9AS)7;ynemaxg^*PG5wxjb!+b%$`Z2}YIL%+b=G zx^@s7q$lI(!iw#qa{jrkwe5Hda7!3anJ$fXICObAsvTubsw@!DEBW?Nk9;ij>RXz_ zs#+UL#I01Jr+qlPOT`D9Et>re!O(H}vHn}T_FI1{2lTNMAIGVxJ#6pK?TRHxG0d~=XbXR_4Ufmxh0r^c}=pWE}nT3W+0a~vfha`K0$`0GFJ z@iIjyBWx3)`9(z#kX;H{=a-Z~%R!yfaiXNNvoMtcgec0*&!?xR7kX`Ts7SU4$8Mg^ ztKeEM|3q%z+Hv&|rZ5;aER1%aP@ACRaYpg>Vc5?zIJpk~6VjynQK+M1m_kqYF-#+{ zzgJ##d+30T%bU@6)DYx3AOg<1l^&uQMkTx3={p}Zc6vOgal*{k=n@#C{>5hsR$lxV zLP)fU;k*PK9K)WGNK|5g2giYIm6xC^mV&f53*0m)7GTf-9OPS}s2(+?vf)CIaO~^| zZ}dW&w%Ey|RZYlpXK=Dbq@#zR;lZ0IGT=hkYIA>l5;8|hqRPJW2gM8zH$U;{{2Q-t z9v^iO-%9ft;H(2%NJsDGAAhr7uM+##1JEXvx$Qgc@|(QS=q9~9>Bl+PNVsj=Q@*r# z1IK2`v=w@UPMONSWs@#!Jd)T!tl!d1TPlUrKg&jibuNAA$$4mLtdQ5W^wig2+W+#6 zuQfi#XJKTcdW+2VQFuO&X+CCID9M%O)j11wUua&WnrbC^7YZ@cDOfKCCs%@lLH;a_ zdFJ(qOg>RMOD5}$6a!MPqr|i@y;x1ke`m^Bc93Pc_x~#6TBDLo^LVYzXA^Oj=3%$PNsSt)AXDKSkH%nPETQaMFsiYbap z!bmD!VM_27I|?WdANEHQV4XgC|;%WSH!H@!Z&yY|pr zfXi9*H}$8?Si#zXMD!9IEqTgnZ^pgJ-CG`-5{%zjD?hpSh_lNQZPvAxAfj+^}aw zbIy``$vO}t_XPke;0yOmvqCpsPc$3^!VYf@gy7dvl8PsLe2=msM*kCk_kiI2x){g1 z@>@-ujcyT7^-~$1-72Ev9vZTtg;1)oUMB&5rb6{|y6IQIOAUjCH5t1=79anX6bGdo3jjk<1{PBn`-bppuljd!M z{tlZnv)=YscS%ROeBtNiKIc3^ya!pHp+qM#GZ*cry3rvg8VZb-Rfvfv)kW<6!RM{g z2~SCnF_&Ww(noG*W1h@`&Pc3=DO8A zV#gh3+nvlR7QOsPI1gr8EF=1p(VTFx>)~v% zU?KEYYsAN#XF~z|Le>61u80^xg*u(iD+=J{ zrKRQCHI0_9tptRqdW9!rBZ#wKDB*0?n!k>M_cNCN!w9+~sQS z`9+srQx1ImLEi>6)kUsAY>KJ%uK4m|P$wu4mTa?`|F~RhuFf{C-cyg{$;1OlQh*gg z4V)>%^NvxRc**it2exl>ck^;{R;uJ&(n*GEZ5t0On!HMtu|_4>E`9%fCp%d~p4j^} zre>}7ZhCc((!FKf$77f>_RFgQ6LzA(HjJK8)!7ZpXl$Ix_f^zgIN}le>ff`9#BYgJ z2Lg^_SY65`dGaBgIbm(?4B+OMi%bsORrm?Qfw8nHAa#8(pMtNe7MTo_%_{bh4#Jc57Hvx)k?_`kCNiSktL3X zKqMA_?b9e8S6q)yOl*{Y+BMVyZX|6+pJnSwIt>CSkXp6tTL9v|nDVeiW}txBw>?#G zq8BoQqX+fc2lTi*=bjqs0@y-2vVM=?-dwccMJ@+;=Kq07mcS|CKlic0G2>*7$J2V5<;*d zd;OrM@P=l?D6+e~81z@k?%L-NKO3Nt;*?j6lIX`4-{Z6%zvNpAwdi{%K(n*HI_?~stI@S>)iqcb4& z@c|)QxL`;7!dBtJUM{n=1HX|Elh8*NbSl@cO zW?j7$WD-!t&rX4CPl+ikQOq9w8&Y!#fHj&H0j`Rc_|@!WiL34d&X|kXn7Oym57+vx zPI5v`8*|hjuvqCtAR)!O8DL#F(^QxyRYm42C9OYN57B8viAQEEA54qOc{nW-4D#e- zK82KxkvyG{|G81eO`;xE>;@)opn~(h161P6Y>Jit*;hum#m$(gh=b1u0T5d1q#~Pk zYWl3MFO(;!sKPejlJ1^a!?3Un?SV-9$4rny)Xg zYW$SeKS?;-CYKEch@&La?iQ<=kYP@ zz3J|$?yg?DYSkiCK~4hsBi=^{2nb{;Nl_&Thz}It>qdB3@aJdd&=v467$;#V6?pKE z7raRb_#W3;Ov72(&deEL=x7RIZfj>_O7CRsXliQfWMSug4&A{IZp8Apk%*(Iq4N(r z+b=3VY)m1P4V_&aO$^s7xoiUcy$B;cOzaa?R1l(2l z1+MTrH^kqof84^8^a8`lDFXlJHUOTJV6UL;KlK%K#c7-MU z|IFGcu|xb%2ZwL)me-t+$St|-K}pWk4Vckf7$fspOl6slW2TZyO8=TJ*n$;Dzhz#z z4PAd}?g;JJWt>c)Z3P?i*Pe#|tU@n6Rkq=MEXrmgfNx*JLt5`kg)HJI{dun<1J-Qd z;DQJ5fjotwPD5bl+;KPqTEa)n{DWZ(;dtsYweXQ$nnR|4O>|2@EXaD@ZNVvu;;Xyb z-mmuLG`7}e|5-}{2U7hN48uI_^I_B)7Kyje(+!dE|qA2-=CNwA%9NxnQBpCN!i z;BY*xe)lH?hg(dsuFXp0;V}v-9(*w$=YOx{B{5Y`0~bi-$`T{?-N1JKS1UVx`Kdu2 ztgJm|>V}2N6NHqco**HP?=Tv~&pAtQ@0I{E^sS>J6&fU10n+bcip46Jc#&Q=|6cqD zyP0ArKSjDG3POocmWI}v!QrMv!uFrbA-aYI4$?e3Q z+I3{fa78m9ASl6ELwK@P>^r;NTENUE^$oLDnatD|@X>mb6t3PGYy!{6P@Zr6(oXM7 zqZ%#5^!#}CtS)2SS1Bod^!A`lS`uEgNf8}rw`zg-uUq6sB>TUR4p|6nOt>(U z5LX!J5NNATwcJ%zano)GjHP>;t@^}3ulUYlWo!m(tmnnUw9aj^&l?UJmA22jsUwYU zH~>7zenIEv5!CId=xFoBkQfsalRZ06z>2nssp+o3-SxMNq5T=0mkWR1$pYe(l*3Xj zhs#Iz+gpy5+f$?{Vgc8&OXzr7^~@=|=3}43$cd-unkeyd5K{;(eO6rEWeLZoICpw9b%UTRuz@ zkjy2koa@neOAjA7%J8GjHbhMi^>m;-g^P?T#P%Wed^_fhdeucLYjo}ZDf3P zg?;2^Jj0Ju%ueFe|ILDIn@Png%Do4W#P?@%K@{>l`uI1adfFsEhGf<(M)d0*;cgy# z5c=ydjnevY01s82#?eg$$anI2z>S!iXhl;h*(W2+WxtxV;y7obF)d^yJrJ0J7k|hP z_4DME_UfJgzVXOuy~@s-%IMrXCWMlYQ9E7@PWWbD)sr{1!H01^{K2QXt zIL$B=R8$B10z&O~afXX33lHbZKGc^5`_lE*m8}A~x#}S#@jVnl<%zMI4VH{MjC7$> z?vF8Nf`K<-8zi#E>+jU{yeDuRi84%mC)0*2Qt|Y}fWGZmbPU7{ujj*oN4FJQh(A8J z$P>J`IP7T|sFZS@MpZiMFA%b6Y{u(re5^l~OGV>i`%GWYkCVT7QhH=W`9>q<*mb;l zeS0m5MJbWI@yOsn=Y6~5iwjiV=Sjkqnc|(Gn8?(|s9#^883pDKs-NlKPT^~O)_PW=TQHSP z`s7cEWi&eOnd!4c`^R?=q*cF^zQZ-L$Qggv*nQ?KOU!N|?yGlN`XDuAtAQDPkJti| zy7Ob^ls~60|D%H;;)MYP;+30knAnuziqMZ#3%Jh^Jn985Sot)$Hag8nbGPD?7T)F_ z49`&-FB|aA>-e1!32Ut1OQtyke@8W(>IH5;pg^#G+GS!t2K42b7=FHaYa|-q@!z4t z@m8iH{~pW3lTwS?;;$9_ck~qwyn!N^m6U?;+RSkN?KfE!n%aIQ%hu{&e0KFsMoKJ~ z`+y;y*2vTfdI>9}-5Wmu=gTF;QEN?8G86-@me|(^1ee3%KKvm~{P#vppz5?pFl41Q z=7|RkUc5CckrP%Ty}%|=TN}Kq=#vNhNC|DUA)vd`zGf%fIU`IJTUE@wwN-9j$~Cl2O+e-*%)CygI4kJ1IFwfb1lgfH3QrqHvMgG zCmfO8AQ;vY-yEe)Ii9G)h95X-H$wPocnMiCt?M0P*xJbN9)$Mh1wTQdWV>h^r)5Rq zWnt3Boz*UocVyZhSI-cG9YEIX)io>#$cP_n1-k$e6cIWQ;jMddF zp&{@Rxl>Hmz0{Pz8_0| z5%LeZX{^95#B_am<+yIo`fi|r7LDSbK3U0BiiP;C<29&vrr<9+UCwPy9p1jY%tTv* zsskxyQ>WWSs95okc>vbtZ>a0~m#r$LDk;IlxDjgxU-;-Fi}byuZRHr=t!AR+GR}8L zQ!weU5C@_Ojiy0U9 zc(@h#^7gD{WIUpyl+|Nv-u)c6m{EyQGB%u(C4D8Y+d)f{=l9y>ZTtW0EU4MA1Wn*gQ#+6-Y#8z zA$(1u=&uRKTd1g9ZJ~Thj|U}3thQh2UCTUYzn|V!Ys6CT-2she?}-hD zU0>;3O1st3@Ns`IG;+Kw3rIM$be;A$TYc!t&=bX0Mh5Kt$YOqY@>0Z&2yn*r)xX7} zmcvgRyJjwXjGcTI*T2FA)Jz8tRNLw7zYLJnokI!YV}{PV?H275q=Y_*srObme})*o zCk%f*IX3&w)qQz5VaQ((ZDUVvdhQt+($BZZQI8=sm!??1FA0Gn?*p$Z`E`rPD>_eq zZF{u%hntS8@Ns=^w+M0eWyjrjTKO0yv6!)hnpX71r5) z1qCa6bBY)?0692d?tYT%Y_{SGN-eXeIO_qsd~pE*-%^n@LF1~p%Z!0>M9O_d#94Dl0` zF1EH6YT-wUV6hlky3}*Icm;oWM*~6AA^2jsDz?`!@mtAiGC=orOAs4ndt6eUsuL$f z@BH~TB$U3V5kLj;D=lq+$9Q0}ZQq-Kw=$Y|&s%=gsp{D;$E$g(B z@=~=aMr0bR@zQkP%6bc9fn3JMcJx|-S(%nf8G1Cugv>h}@!qYvgaP}$1Ms{(ARu5e z-xC#uh_^FV46#VJ1?3eEX(w(d&SLI~LC@<=vlb7TxoXX6xylLK=fMZ11wds#K!~hR zG)q0aTVUdLQ#FwM%?b+vq2<6~{q^Q#DLhc%UGzTl{_<#Wb0@{o-E{UC0tXrzv2-Dc z*NI53AiOhMu$CKneJpjTDp$hIZ8DeDW}?+vjhta z$sr-|Yn}iC_dmRPxVLzbcx?S;)bY_Jogqp3r-I*elWha9G8tD(rXV1jw3yiMg+nQs)(3U* zI;}A)yC{;cUt{FKQSjgqhA{l)dW>Grh@-Cdp+98b1=o9d7gB#zin5)>G%~K-;w5KS^0?Q!>RXw9ZlQ& z^meeYh+5j?V}Wtk*5To4Qlt`an)z{l@sL~eTZN2Jw@OH19BUXDjWi4yh zebkp@khy&(S47nibO0YyX6;a0cp0IkF=z9%>d?#HSDizuPy*h-pRlXUb}uMk>Z0R_ zzUoXXR6oO&Gs?Q(c%0nm0{cVzStcUZ^o0wG&Q~~uQ?As~rV0blJ&$i0kvJGApMU2N zs+#M)(;GtblR6$)pFA%ZgIXv%;L=_f^>K<>`%@g@y?1#O@u4Qc?;Z@y(BbWV2S*<8 zD+a-5orXx7#?o`wNioYki}0XtmF z2g7;5w=Y3Q^a#g%nWMN9ziQk_WBmVYtXERGcgT{pzQbwUzlirIMQ5zq5fl-xMoX7a z<$-8T#=Ji~{}w=K-d}ogWHYSlb3A>I<1Z%ygYpV46(hcX#YEBu%EV^Xo}-x;kBX0w zDAF60`jKMweuu--L}M&~|F_z0)5z_^ZGsyQB2e|Y-&5K@KLxNS(9rQFbW6CtxN0ZCrM=z@egAEUYO6Qm;< z*oj2y%&6HBX(CY)w8CBX9ih^0NlF{;)e)|PwjtbDZ`VM6i)VfZ$`3m&CU<5hsii#8U&`(_f?&vm4c1! zLjy>}wj3b&Q?DXdW~ut+CGMX06x7nvxt+@TL)`fgr@xH{vP>;{&e9P4B8aEejw0TF zhv;16^IU8(N3FA5pyc9W?ucqyAA`!)S#s=6h|bljJ1SJMtkojiYvsin&6@b$6SVEj zty$OYDc6z3lQw?u`g_2;?cuq?28{fkd6so}Il0D*p6qXYEr6M0-?iS}{@8f8)RUTP zdm>IZh)(mib{IV9sl(cxlq+iGdOAYxweVG2GG5YHUgh$Ms}onAqN24X#p!9KOGNli zvzpl0bYa`5`xk=6j;w=ZoLNic=lj#X?aOw4snF2)ugX{r1Kv{J5GcWM5lH8+Rkab$Fy?q>CLuV%?T|lV$9zP3I;C&|AsxDGRsjvZ_{YM;LRZ*7L6k(tU&K z>t86iQod$+E19_bC4bL{#_KMpa{=i1pCz}6zAaUgh0Y=&Ho2pyO&pEAk*xvoWzFDT zn`iTkkB3J!Yonw8*qOeWuezI!R;0@eQ_#+&DHy37`-g}KMIRGZC6vD?U#a!*TY{R!;TUke^O z$zFc{bGfy_Wfw4lynKE)4v+g#RpmoCHZu%Q9llE^1)*_`5$(E(}D z6$VYfn>bXj4;!0elkYH*0!DRoVy~uz20iPp_tgF>i(5lpq7QXX{dd!Yx-Ud~ku{ek zYkogL=M;^v3ez24ND0z`>^Z!?Wx;5R9`F!hGky%!P~&+e1c_yCm1nm;>ea++;N-jo z0vr%Wuo-?ht7%)M)5bzuJR*T07--mD&xQ*dh}?cy*I?ImuN|9HIx(9rKmo%!`_qFN z48Vgth#I1eR9T# zpdwQ*$E9oSfp@uj!pAxwlZEq!E7o@&-aVNspR}Og(qvF)jo7jpnyiM*+0+^Ux}FL- z{L&V+E&Uc`cdI|YBO|UKn?a0{(ofuQ<9XhTU_R-hT*xAq#!#RYcmHrC`mG6TJYFQv zXA)T?LHsYh^zvK2@=QbgZ2G?H{2f~47Rv(FRP_i#p`zqBFGLqUW3s_BEO zov+J6^^0Eep)wIvtCRFoGbMwzUY!}(iVov}#Ukr@;@$oQ~*80L46%9kWtdJet zHdU0RQ1^XKeb1_Pp_DlUpQ7bH2G~Av5K;#@!L-}+ zOS_doD?;CHXTr&=?JnmXc4G$T1cA6Ql7u!5imaRF)x3{){g{=#X?j1}I?QLw^rC?) z&#Bb+;3r~hmw}|OqgW)Y^XUvh>`So8cYegNFuQ8fw zydhGRK8LZc;cssNsZI_H2BkD)MRSQPpoG27)PMcFsw?7g;Nfan_!W0S3rBhLrCO75 z_#R*0tB5q45m=7`ZJth)%U(S zn_6!1w!!IIyPQ`z+j2n4o>5&N7bx)Bb`#+Mq%_acF>5!O3!#NC7Oy7zd$&2OpcC|& zh+0xkh}Q(MwIj1#MJg;G>KjhJJpzLRgL4<~%a7cC#_yO|&K7o^1?Z|&DAsIvtk~A# z5!&wtYAPvDC^R{$-kq$;?$W3-y6aWUD85JW;9OpP-$`lh;p&%n%c|ZTj)_l}EL*Po zOBt|P&E*G&D4{RI4d{a8Ob@DT;)e8os7) z^ngQ;jK3XE9?3hXOuIpWrW%vjo9UB6^1~*T^=fPAP7Ol2U!#ugUt8M5W&hd|naU<5 zBSTJ4pD>+o46fXP!Bw$I$<&pK`~l2ny*^#<2MO3W={mPJ(0<2aGy-%pz@oYn zWOrVPN8;>#TbpLiM?gWKoQRjGJDPj6xuwC}C~pB}D-|)r;)RCNizqpw`@^C(<+THw zr`a5|S3MR_?`jZ+B=64G2lz6$uWys|Hym}}V2>^H$*HdQjw@KqPTa)XUr2Fraa&nm zKF2D@K3X2dla_r4m%_>sOr0S?;+Z25dVw4-M7iDwZ6qHo;ye5q{yD8UAToXWz_Az@0ht zF!2u4Y3-ueVTKtTW&TN@IlU16JbFR)NT0jd=)TK&&8@%1P3*XT_s41@Z#a-gIH8dV z$paa-O~6;2@DDG~p(YmplLtQJ8@F6RatIRQ#Zsns@VCYiMR!)q&&-OxDkV6X`s-CQ zTsLk;kPyGSeDeOJ;XW&Ur<4PY9!LT0&)cFrG z&ELIP$&=X8iYQ{{b@zp6pwB6_1o=%}H9CiSzhmL+$8>FL`LZEm8kB6e@%52pF!I^F z6XVdZeJMOu;EnW*;o8;=i!FElY^Ss}YfDhz8rN`Vl_NnXq2EM8qzoIDvonyV#QPWy z1G{$1^yac`yvB+;5Y>lM%qGV5Z2F#4pVOV-6LB-a&|$F|X&r3z?bG}|-zadj*Y!f4 zwM#Mks^4<8Dqyg{ESFIoPS*ab^|Q|ev5?y2vCr?34F6KQOkw>)xf_RDc;X9^Jpr?r zhBpwYO%0eyX`Gfb5V(N5g9aL`wg(IjbadT-uov$t$PO|KE=#7+LBAt8<;genJD`uU zCFvHLvWqLMa;Q0@Y(*TnCe_<#c#6+kpxXTlRlt}^0$9p-8U%qmXTP<%S-WdAFbL*T zKP*^Aw(Hnb1KsA-!@b~~^IsCAT~fdccnS?>J%*B>n2vtokiyA#`8=$w1h*SsygufT znoq%;z`ZqYI;>OMmW1}i!6`juQgN{s3C!thI;#$(-Pv_A{-ODOyNsb#!51_3T)98? zuK4Gfmf&rNL`945lkC}mMiZnaknw|<&^ET@B4NhR$_vJPp1&wN4~R@nF~oW;?aF(t z8Iqn}i+?}9bw`+yl4CVJHW*v*J>e%24V!NR5%p9I2%I$t|Cq<-wY3Hpl89GAq|G6c zGA5rTwxxL>&uaMUG2w0RF~dfp1}wXMtZ5+)b-fc$tM<^RO<|6HS(Ji&y5o{U-M4l8 zmIcH#)&X7HUA125VOw4Gp7g)@)_ZNFI}U>O2mrQt^Bq{|9`88k-K^%GGBhZ(PmRqF z>wAQ$#&6e0KJK>~j#pIl^T)^mff72G$%`zeZu@PhSHwV02Pgr?hZw3XpP;I3Dsa*L z!am-`YT;@RWQgza>Gn)q6#K)3caa-4|U=~%++mtg) zF0Lx9^OFtBw{Ml8HYqLrTfIWf@Wk0Ned02;p1Y3v z%O2kIvBBlKj;V%s2*>Ig2Tp<=6Z6l-t%&*ge^@Sl3-$K(RlRrm{H;9>Y?G7=i}lMV z!*{lFt;b|0su_5{JLg-G(y_+du6kT-!eJ~m*fE|i0}SRP4jWgKh|z&%=<-=cC&?Uc zRxdD7gj_Px(k$OPn!3Z%!Q?KCLYWfhP?38n$T2JtkZ24l$GjsP%9g8B;*aKXBn^)O zsP6eI0%*|oNH9I; zGAt4@V7+-HJ63hQG+)A83!DZ?=aaqxXAa!u*^1Q~uLuklqzQ3^ddae4ZeOXv>1z(H zDx{4J?;Tm1Lw-hQMnb^lSy!@}Pmq3sIE;%|=FJ4$mIGJkwlIbs7Qhuf3>0b9kb@A} zRGg_0wGA}3o<|+Yy1rPvW@6_R(4x;9p#{_725X%7eLu)9&LqNHU%`2+k@a*Mn2B>R z&FrqwQdWT_J4;tlv5cJ92FC*i0@a^K>a(U2N+K!An>X$VmxLt;urEs7vFoAn;jM3( zz{#%31g@U->7;sLFc0mg>ntb5N4Vd#+W7Zf$PkUw@>?=ol9JI2RcCsUTebRkE*6A9j1*2hJn|P#+*bXZmeD z4TxRaj=DE*m4u6e_RqhQIVL2AMtT?XIO@GW(6JYTV{{F1d+>Y~N5N!Dvq_RuRZ7EK z1QnzIWTxE~XFK$Dkme$)^_RR6c+8fB6L&I2OjJYEh`t1mn^g54*S{O$o|>(OYOM9j z6=X>drpLR$j0?CRD+DgcDztsL6G?-&_Thh2*ID3)2*U@+(SVnhP8&#)cg-~2;r3Ad zmm>z_n4rNmB&XboC?T4R#(L-ugAew=CE>yit~x0uYS_rL?vl+neZ&3l`E>7?eW#?h z8=|a15G?HUg7`R5%Nx;;i>@>%Psx=$+%c`rS7HNV^#?td6X-44ueSDSeXq=O;#cQ#ueW^lra7zX2#?HW@! zuzf6@3WLGJdZ`_Ais0X|SbJa}9qw|{IjlK-*2LZvw`-qNr{`csuUqWlu(Efh^D(Qlzn&1^_`eUXY~Y%DtN?J$!L1BVC^5WS`^VrG}7a?J^g{v|~W5i#@L_&N(% z{Wu|jI2T0~gf#sAJTnBQ15T~PZqN6<2JW30GADY}y|EKBVp0@0*c_r}4tsHM2IEAs z%s}(>qi?p9L=%xxl9^6dy$EZb=5(stB~^}()%aRTVEu=-gnhQJCb6s8;zM0t-u|ag zM-%GXJPOV64cLZ4ei0s-gx9oovTHxZbIrB}=O1uud9SXN-WFX`!%QboMM|_tA_Q|Y z!K|pL1Ri8E`x#MCd(}rVMJAluzclIAZ~&9FB$?LDQ&iZla7YxBp3?b4k`}Z5B08RP zhVPXAK!NeH!;7<=FEhW_x(yP3M^G{~*&D2l&+3OmZ#(39Yi=q3@^2v(IC3XTneq34 z!u~&}Qmk!ul(x~r(RY^?votI&2MD7_0TA)736I$o^k zxd1TvLzlJ>uEsdcBL=wQhhEmPxm~d^m%XtHFefyeX$yOHg#TCy)~J6CaNh<5I1`3a zwjwQEd)*EUUgRzM$9sW)?+xgSvU+M6v67 zx)<(jfiL^^_ytUg_5B#|xnZ0-n-1~`J6>cRTmn6B~uL?MvmK%eD6 zA%uY@+{ABZ%#|Y8Cq%6O_!C%oaUqeOeEZQ;uLZGT)vrpJa4Rb-Tsk+`tHU8Z`H^Md zPlsR;mNz3eL*BeDwJnuz!r9+U_vhfAcV$7A(R$;!+XW)xGV5^0(^M}C$UqI%1IItI9nELERA5@}bgDvMJ)^+P%WXH~W6?_Ie#H}xuJzQr zp9`&{ImO<)F%}k)kf@0Xf`qeP3X7?`+oVCQ7Cl~MBJnqmRa+h=xAJ_dVu_t5YtIT>GBUJqEecF9-|7;2*+?3Nvi-!~X3H+frNMJX5& zX_K2tdH=y-snT>soz`8rba)iByK2q)n;D0OqqEs55I}L}Dl!#cEV#$Pq0fj%63|G* zY-iU-vYQ%hLuGT?pyKv0{FujAu`X7|Y-J}&z!AQqj*r#2YA^{oS!)V{%1Yv*faE1o z!0t-NTv)b}zD&GD)vsd>QLvm?VE8Y+tgwx$n8E5X%hv}M1rYiE(J`TA-F+J=j*az8n8^0 zR@VXvOjuNcE0eTmC4=_@Sqv%4N_|Z+p!W$|u%LrUzsS$`>%WJ1*$Ix8I=KT!Te1_1@1SkACd*%TP z8G&uzoA)zD6cZIBhR_Xl04^m0*e+Z|&vWvAPx@Qqe9-1`oWBh>A0BmAi~WUHtO=rM zD-IaILOq@F%$_CiUH}u*J;C3UV^OG>-TD3|0;OIt(75@uhs$KUD7|rHb-Y`oA?r4p zR1QnmX*@JeTwgYK6w){pWP|8X=jh~E3Hqnn^r`h$(~o>Wx)VGq__8|z@K;9A`}r|b z`AUG&>&W^>Lf+8Uohr()DlpA>dRqucgRtF9zmWb523((C;WAe^aWA}qT+2WE0M<%z z?FZYy1;ZFOd}on(d2U=`SYg0cD?u*lqjUNz7Hza`K{0W9ujvywjrpsG6jhAL+xY;t zyrX<)>sArWt#qovAl|R!uzX_~937 z`ERAD5;(x1IYhH{2P-)1+T)_Do2&kTbv~yvLYFF;}`)>iQl~Trghjd^un$?_zw}6XHsA!$mHlG@#SnPibd0(gs6*5L- z^c?i*`J1JiCkUGAhZ%V=t5pc2|F7njDoOk_y`{e%dm26mBM_4};w2Nm z+@Z)6pt=>EVe@ELBD1p{mlZWx6!#y;Yd%x<6{;>dhLhvE3)Nv`?zcH`Cb^YrmY_6I zVz|2}8cjIT5}^`Bw=5nxwXAXyps?bxfhj)2^UQ#evkJ8mgpVJ^6)~%8oOad!CH{UB z%2zUE#X~?q02>zo(!F?X6VD}~tf%wv7cdL|AXbIxlouG68mlr*0zSX8-^=E+rz|h8 zufakpD6lL!7F}MKo%s-fF&G^UR+9UwU(t7sSWF)_njgYt@9VkR+=mJ5*t_8to#-0c z^TKSUe43rq(MFxj@Jw2UHIl+7gBO&cc08gAsU9T1~?PJA?W<7rk+`(WwqI%Z$w$RXv#kAYoh zB^vIaix4G~yaKGoj)8+ylCNRW=x9+}l{xJCpurvd^!V1FT9Ker>iQ#FO4|l}r1s#5 zLKPY)sF%Uv;a#&fL-c>R@Rpfjl?FUA@?AQ4^P^gr3aVYam(y2FWFkx-4hn~-(zJJdu*npCj?=AlwQa));NIxGn_UaHn*JX+AWA|V=D5VQ zcxnW@ zEcFPwwaMzMvP2JK!k7|Y}Y0@y=1F`%eevRT%p`orB_pK|EOB&KSeT>kUOURL~8GHkTt z&5VcMaP?awc4-2Q3jpt`h6ONdxd~|b>6$bGsYy&n683M3;wT7%&?w}ua`~}OSd`fL{YL$% zs#Zd9SXF=URMJS8(Y47S1%49C_0eT2eT;RHf`A>aKM)()Af(ev6fB2h{p12Bs309a z;a&U$#rAfMb<~^&;Qp)z2*}N}x{rclHDQojkVNP%tIWV`OHJ|IXWV*tLB`k)JF3L z$DTmD)3ZX>O#1|l->U`gGpjjZ1_q-@v+r7W-5{+;LQyF4;C@f?ti%ignY=7z@EAia zP6*9~2)C!QJb?+~&*?We?-i(60yNJF$$s9cSa@WEPWnte@YhQ0siGE zYSy$^T-4zSm#h|ldIA6XW3;i=A{V6T)iV9F8dQR zUI0|NXd;j){V+{tLHAxYV`QXI^O!xNUl8SF-7`S~>z3_!yO~QNdY~ZkkM}`S8xoAz zKFfPdxy7qlXwQqqeY*4MJ zd~!OtprMyr#OgT4ESJeS_sm7J+bQh@d&fQJlgwkQ@U!tt73z05i9Ns5=q|BB)2@?-3njU?xsG%(R z-G`~%bgnqZ+t1{0U9DLFgZKSA{Z zdCzDi?ffdeftFug%u%(1sVd#7I7p-n2)Ui@e!fQQC$|Y;a2SNx^zspUeya4MJeI@W zwo+?mzoj|*$3JVpli1?XbbMjmJ>I_W^n3)>vT5npPBaY^|C(+`RI*Yyd{I1cPn!RP zrY1^OjIQ~x#Yfk%FOqoI@iu)!pJg_?8X9pbkZkjZ#n~N*6@9PSy)jX6a(6a_Af5yfFw-HzgLLD%z{BLH@>|?|Xs!%PtmyTQ2Ry`OlBhK7GL=po`AIIUOZ$ z1u`Pw{SVUlwt>ZcS0nBQ5mDWzHufOqw;p%zO#x4OTnoM{!ey#*sxIeEKu-&k*Ccp=k^(?`K}2F3kj(LZ=I`!v`K!)| z+yne5lRaAbnzDONbbm7nW zNUgzN!6%age=G@=$aK?Gn7-QTZm5ryzV{do^OUWmsMlNmri-}*(LX6IyBn=N{gSmT ziFYUr(a~+eWei=^lh|hDLiH?gzjb_0FD=lMF+SiIHz4;CacB144(p+n@(WJiE}e>I zrhk^b$r2W(EM`B}1O})|p#D&~>TwiB?MtPccf4+eliQ3#eA?G=jb7X3yu3eJw9dEO z&t7X)PZ+$oRJJm!mt)?%xit3cThh`f?pso32)}39T>68pgqNT(!D0hlm$D)?&M7t(7fRzl{ zV^zMB*xVBq?`YCpkPE$CFKl-lvKB?Q8y!zL3>&a^;s8P+?Rue&nYv&J$DP4R1 zYb6ami0x19{0DCOMCguc>$H^NcPkm4HJKTCWKYK zo{df~oKC4el&Ja;V1N`Y=;Zt%90Q5fib%eZBy}9{Hoj%!K5IRbxxBfd_V{~fZM-;v zXOMm_Ec4yp<=Tg;k5DXEF9ZI;iQP(0Czc2tjDaI+D9aTIj%|(G%g^^W$M2!%O5MZR z=NBw@A1ZP*sweECqa@bf+^uV}KB!LtOHeEy(a(9O{Ju00iv09P&O+VaRt;70bS26) zYWO9HODasOI8_y}pr1bMizsYwoi@5b;>uDDInCwTFZYZ8VCy5z&0b2PL^8`k7GE}l zt95@I(w7({4g+p!rFvftU`UyIbat73B{Tk)m|d%=E4Puv1MJeRHi>yd?%lS5?*a)y zxlKggWmv40rRHvafagoqk_%=z~ZkH0+#er#9YUY@IP8)u-h>!|v^zNjD{Cs!=kR z9*2lkeX{C!6xCiF8gZHZMRYhtk*8d~%#d8zq^7=5|N?fFK{P#i6pleBDIyay^D4sSnFfKmT>|7i3 zEW-X{yjo3|_eq#yOp5)j)qh3}-ir4pii=Tux7OAXd++N#rVsCdUuW3tS36Os zO$H)()KTL{KY>AtF!5Jz#c!5yX?|%losH4N`_^RY>Y0h&mV&NbbvPxic}}v>2u|#A ziSJxF6m+D?qsCG%*X!FWJLGgOx$w$Prbil<3mlbpX9VbU1|el4ty6vNZ7Da!nxA_@ zy%&*Hi_~aB{X2Gz3ejbft%z&X{|F26HQ$v zdt}N>AP)`^m=>{WlWlaUBhJebLwGZzv~9Ex$IA6LkqD`JTu5#^W3_v2 z+V6fz<)4Kf@S|FC4V;RLIuRXrVTx$nXFi*v+dQ>F1F@hh_djN;N8PZV7{-Viksi)2 z2}2)ER{)V+Us*mW_kI`MA-bmIhEST3LM@gkg=82G69??QU8SY4G9>%V5cwCq;F~%`UTw=3fN8#~GkJ3spqzSX?hu>)~ zkF&jII4)%sr7=Gx6fzaW5LU(!o-Q9Y*IPZmR>kzlElTm7H>54!zO@RRPaI#rwFbAf zu4i#%xp0oo77|O2g=CAMiS}m_mLzSO{+SilSBQxHqDnRoYFkgbncW| z8OCmC*~*F=cihzU`#SvRB&W8T=V~O`w7|(mhYPMWb5b~*?4lt>YrK-q-!#X&LG(oM`16^J_6;|ux!*dq39vhX zS_~YG9X{enn%s~4?1dHMH#E^ZuP&ZQo(^d3dc`1_n+jmSW;SC^`o@kQY(!h5E3jdr zG%c#I;T|83+947=7})@nRHby1tCu1~eRQu|#MbuEt6|nEhp)FdCmY+we?+ zK=TGM@N5;n@l*(EnwV;{2HT#9t7$`d>EBuajQc@}ko5$FalWplG+43kT=f=MfjUv^ zAwrz5Ea5%R+YTRzq~g+udwJYpQ;_W_vg?}Vn|-^wU@i3J!8=N>h8ouAG7t_!M?QIRkk7-W9!P3llFBix<7(r z8}Aon&QJ1NT(nvrLqSd*YE^sM2WtX; zQ6B;~c74D0sYvO+xB~}J#AbGnT5xc@ei>HU!4 zvX&A^ipM4(d9pw;WyHJ6j*;i)xns-Qt|JV6Gcq5Vw&~2Lks27rq`>fAOjv6W-@wL@ zT_Fw*;mw3b_Ms~JPNmg&zHc9w_&@*}GQ_X#6PI>8l+j2-mVj25F$Y>LR#&;-<=juo zaenMNu_0Yhnb!XbYA1QBhY!NLtGNS8j7t@Ug@lC6N<=lT8(z0Gu3gf603}XkKW8lR zXNX^hBDy6gB`iwH)-!Ldx!-hvqE>N&mRfOZAWIh|7h6h9{v?xpw#q~ZH(x5l;o~fP+3ZsN3=98%jJ;)4 zT+6lwiUbG=76@*^-JQmQy9Ot?26vYPcb7&(un^qc-QC@-acHc8*L$D6&%JkyH{N*l zgQi!nRclt&oK@56s}ZGf&0sD%gqg|#ZPw11wJix}9*TJLO@V$8-_Aaz7+%8$PX9bl zN8UGkveFPX>taw4=A4i@s!>#$0Kp1?qRG{av;P7q?e5&_Wy-3BC2 zGhm~BUdBHQzUzKq)k)WA{vN$|Y-D-{L6ox72)>2M)D;>udnJM&KjX#iOMEzejaQqE z2{4D{G<>7bBboGtQzYJ=HBL>E0k|vqENVoCv52ZD6zTZsapKW1f4ctzHghG0V9_-m~wQpr};d zrnYF$53T$o9fTh0!Zj9die#>wgf`-1dYbTk&yGCLieCf|SNeJUJq)HV~n`RtFCTL1S4PeVf@wK94;gY(6F= zq)6QT{Dk6dJbvhX*9o)AfflFoCizvxjKXdv6tch&Monf^dkTn9d`h`KI%gB_*OR(S zft}1Jb6kntqQq zTx3|-;6{+M;n1I=Z4f7lLd8#qSINIV7By~pq5x>GQEN;1sSI}g;3brZ=~xXpoBl%E zi<&cpSdI$e&P?Qr>O2?BucA)$`-UCDD=0SuNzKt;kT5(b5)Co}%=Rc> zntr)B$K-#UZv9b(N4w-e-HBeq6&zIKWJ+CwuPaIa2FXNzO>>$AW4!>iURcAJD`;wU zMb<{0=6dgJJA;bGB78aQ`3hj%uP4@sY^)^YH^4T{E+3>D6@bcWgnUEpYR`y#hP`S* z=k0lyk|LVkLmG)5hk}=3c&SK6_Hcv$iz&V`3-|Za$fokYUc$%EzvZvxz8ssMwl>&JW4c?%G#R$KyXnm;TWx1_x6#=1 z&PC&OVs~gM)eUwP5H0_7TJ)-3-1cj+px1Ua()k3*YMCuCv(e)d9?gMX=}Gn{zDE#g zK!zsSU|>FDR`6|RxsFu#6Ov;`DOP!xucg2hj#Il&1WLd!;STSJ$m0R@wK=w;Ka$wQ z!ci1Pqi#FUKFo7R~ z4I5r2tdq3taIVbA?v6}jI<18UmHGI!9jXD zXAck4_b*apXf5xl8xn|`b5%?r3>iOlG9_hGf;%Ot4${)Odo~a{5fX=jSFyBtVeTg9 zIoX;Z4_TWwv=7T;#EDGNQ39P9A|=XlN6*>it&IY2kLI&5dXN*)PEAkT0YkUw-3{+H zY_*SQ9MIo(6aV~-VWc2H&$sjDY2LT5YM*DS;j0*oDj1^ZRdaH$HVurvLFqsGAxwhWYVgL916)oKugt&qe)5t+{RZLB?20yG4I7@lqm{pk@?r-Ld( zGZ=z_G=ofVt;>_$9kmr~ADk3ee86Rfb8d%DV&1DIn0e3zXHbHE^_eTUrK6Dc0RutU zPukIqANt{OjIF4?$9qFj|0*b<^38@zVqYp}V8aA_$iQk$-YSL%zPD7(f?PT`U}Bjd zjJg~xppHE3QU;Qzfxk#`E0X#viek#wp3nXW^0jD}o5q_Bx!AX8bH`-8^GpZ&qO+cC z2`2(zkaZi3PC3&`+F-@-o}YrMyiZsb|C;O{-lSkBrg?c8TWz3&9M1dW7!(4+FS>Y) zmo9twGC+%^8uES$pM*%P4d4HWqT&#ey15xhCx~r2$a3LpFPt_zC<+qp{6VGUTvxEW z9$4NHG8yzNz65h__ybNMAh}GKl)BY^BVjES-rlft?-J6;RR?)`6ZP3hYZQA`7tGE5 z0&VPPTiM6P6Vw|zga>R8d_BoF-n-J$nA4O;v-BK# zpE01q=n*#LFRH+(XG!SAiG9`(s3*>e18yL{mH@WDxWr{r7@j#XP^-aTfMhy__4_(J zvHb`XpRzJrHSWQOA(0%sJZ-7ed8GX_@R_2Lm@XzfME*XKkA=ymy1uNB8vJvms&yyG{bJ}|)&?gL7Un66{*S?45VB7Ai`x_d(V&nc8eVipao1+o)g&dYex zIL=+`pKmCFgUu$UydQxF9@n>?TtqTt#RHfZ9gob9+*&=4ryCbf(L4?-Szjx+RI8^H zxHr`u8Jbj{s=y%8$H!^2eb0ECbxe_*t~^V1t+4M{Hcxiw+8>>GuP|)AP)r<3uy#!s zrCHp%lvRwY4|(H-&n!0U^6;`VqPgg@l0?xzh4#cFSvk+q+OW`h3OR zUZBLBP(TR_7%OqV@?QUhxV{v{Xw8r0ZcDS1u76|anK>4!s8}#gM^jFuT0<~>H}8F< zABR33cQv9(#PIHyFO{G*pf;FzE3omjoZHltn1+JtJ-u#~J)nEO!p&i%OzaT&!lsMm zRt;vr^|~YI7cO_&q~$iGl|I-kOtt~o9@uUu_TbMw?ph!X_}#}vvlZmnTA6Yljt8_f zZ_?8Cil717S+YEVRiS|hUy&o1#mu~AmlI;+=1vhq?v{pAJI*Oxm4!p3@)I-g6?QA6 zj@BNi`FU}t$E}48?0G+HOu2(>JaHEq0NttHwI&UJX_G<1uTFbJi&tO5ooCQK7LfKd zSs_XD2T|nxkxR1{rQcxm3Cx~o>puwWN@)c?%yjf+TbuW#1Aq{)(_?QDW}P|y#!Xu1 zF0$~2DE71GCvu`zjOa-|@&N`y85j2oj^_`ZGL@dqXqs z4&2VSlb_!p6tFuVMHiTHlc%l@L?x46Y!3tFb*odt7b{;N{7U7r!S#2nyRyQg(d*ka zQw0m-kQ8kb1G6axVj!O%>)A-PMxd6?eqm?5`N%L#*3KZjeSu}6StkrX0(aS<74!-eWNAIk*;5t z&kV80dG_aicW0TFOZ^`MX#L7*pY3LyVn~Zc$4eY&ic5saHbcCvgkFpWqiIf3`*wFl zs-E4Q07>=QNr8fA90}w*xib%;x`dgGIC6E&r0!14PdUdwGD5Z;X4f*d;ULev*{Zix zV~Qj~cu0y}7^>hz=iZly=Mz2)P_5>Nz%CKURGL%l(-Tr$N{YtWWulkCLTHQR>evWN zn~0744gSFD>gxSwo|4D6D-+xXfDV(Ry(d;ft>U{8MG6q(`^W}h82O};tSNtEv3SiEjJjPvZrFn`U0=Nw`(9oeZdbDUVW1EN&r7(BoqP$> z$DP1ztOlkQJp1L&5ccF(fSEu}PVOW_UtbuIfm`nWLKwktAE^S*6S3{b@Or-yG?maD zTjDnFiU&hkn%0{rCBH;pS z@3ATPbj_J;>o0RUY}Oi=U#(iGiPBs)B5anTj!#YX&zY!&?EF)-UA~W7%X4NBC6wDZ z)krd=J7D1_1ZAM?@ps9Op`&}iy&cF6Yz3e5xe|x`Ro!1@kS{6eBNRIE?-H-0ZY?82 zQ?%Ty`h4Tw;s5XD_j@3l-zOOP>2o@&(-%CX0@!OEH8s?we-o7%yS;sNcT&0;7Z#@X z3x%0Ez})9KnYX36dHeV{V#>1DkX8B1moHnS7r4U(-(ib7j$A&|(9q}+B;_PAGBX!8 zE?zdAlK%Co`0K6RU2#W8m8OCBAnxZi9r0b3{<%5qmNktt$D$vtI#H5}&1rt__pa6*@lcdM8{pvLCZ?vw zhK3?7EiKjI0sn4z!9Y(BdJE*f>Gb4EYG!7pPL!;;__v6R41iF(U*_N_Z9|Nj zB7fgH)U%r`BGX|&8(2|s?tFA~q*bN?eYc~#I}I-{Ud!5eI2O&gFkVr$#T#?e{Fz!S zwRi8{9h>q6hlT?9nwsjo6#i4*DbS}y`BC2n2Z+hw(O7biMC}Y7*Jtnvao<>Mve0D@G!na&#&wp zzufJ0@;`U4K2QZ2|3I{>BRbkhRkK43!3y6aad&k^_-Q2_$sXGxG9=&D-7Wg={rjpV z8@y;qI5;?ISy^(HipRo^v$dLxxc%J57H`7_TxBgSEo)?1i@;pdeq$yFCpcVO+^BxU z#j9)RE_3&SgOAwQMs?;}`}-lWNiQj>iz*~ zduJz7E)cQq!=~r;SVw9An*6@u*^&%CXT;3 zwHUFOZYaNya={gkoLn_Bvqo);Jkd-QFuV$GYHVzDIdTN@$^FCAP;Ps#VXlhVxwO~#8&XX&GPIuYwf|lTlXm^XN=Ns1GynRdy7qr1rbI@@!lErt^_VAG<)6yq z(>1MEti8Ez`WCj8;PZ;>ndzL?-+{QNXH*CI;Uf+`8QrbEpC3s~Hl%i{pS}bKmV_K$W=@J5A_B4`Tu=t_K#P566k7GXPuZ(W5H-pf*mb=pdnJq zq^a{7wJqCxR>@$>{%2L~&kwnY1_z`D%oel55;w;yhoxBQQ(IXT9u7-^_xQ~8F8_9M zvBWJoop$yQwAnwcD5NgHE>Y410r%fa)3mKXP6}Lo1Ma9OZmK?RSvon>ku75{t@WG+@1V%QE z)jhrQ$DZxm+o~#)ElP87bmOZ@RtU(`D1dfB0P}~`7afZ9*a4B{15O3@U zRbb^=J=RBpD7qIDbAbnLm35x0!BXU#n>S$=x9=10Y3b8mlqO8&X*d>3LHgW*xSEnV zQ|Jf1*RB~ek6RLF{uASEECS;JB3OoI1KTvf#E*`WS^gx=krjx~on`2LQFDSnJWuS5 zcRHVzJRaVd3%OBzhQZ%pKN#X!jQ2dNc}vQcVb!x@$StxQ(*V5emc@j#-;KARnJkJ& zwi&oLfBAxAtI#)nV5RTZ%7Wu95HA(gsR%PFNMg8e^5Kn9PYQ&oLii350ODc0-tm@B z6N-=k*jnh#9gK&*6>LrWnyrL^5)dz``8DRYg-3b}9$c}l3^EoiXT2Ig1bBddok(*a z;kI|1_h zz__=5P)Icjv?O^zbk>kaY=(Bo>m5P+!@>z@aBXNil%|Rwr!%OpJz6_2)OnycIgQjK z6ZX3W*SFd#lQY^gKQGkN0m09qS!(#$Y)O}Lr>jC%oS*H8k4UHD7lSF9p2lSumu>q@ z-(2*3yrsX3B^q8M?W_#Hn_Mje+zD}o%?9^0x*jTLe)4{pa<$fLng6QL$F}d)KPh%dBN}d7W>^1yr4}0Sm!603V{wn^Z_gDd! z@6NK=!-AT68cpsU_KDi!hwk)X=g+lnW@~(E&qsqOVd0M)Ba=69?7G~(&F6i{D~eym zIx5Ji85%>(Yxuy5>9K(a=kJyCwQ4W6xOG);JySUKh{GHc18*=O1MveM-tVA)rw(c2 z5*iLF+x-51Lj>N0A9JStHa~Zr5e_KDPias;ZNaDjKXBTc|Ja?u)CYSQ$1ZkaNJ957 ze%_i%Tfk<;t0Gjbh2JlofKv@$#zhZsy;H=buKhG9n5-)qB)wXN+|NEJ`OCfMXT+?J>38&qzOnm zvyT5JU@1N}hcs#RjUfv~cAdp~-PBsn1sVGE>%0%BT%og))H!**$kJqBx?$<^V#lX( zIOw*sfpOX0j>*LG{SVBBs$1GlKaE#wVZ83f27HjdHw?gVqbi#A{B1Y9@!P8y^PQLk zp{3_1KN}`kHC@p_2r@xK90Iy>!r^ldDMgEP*sA|LwxAVw@~ymq@W6NRM$klPsNhPB zx0t~vwXC~ke04MmAxj8uay?%wPMfg9H zwKVD<9uBGz6MjM4V~0MMZ*Do^Kf!Bn*UkWn7{vo5T%vaj{-Tmw z#Dmvb##moP3Ax(lTSBMqrXblo&a-EI>3Ra*?p0Mk(N9FI(WHH%z|#%>@WsncnS%nb zAG;kB=3hPU&54fsPKd_tDc&TX`&4nFFrW%mEZZxcEEn2{?-%7|Y;gU|Ysd|fSl$BZ zL8Gk8cdYQ{{4U?r*wvf%Ck->pKEciQQupO%Hh&(>v1=4~srAj4%e|E|n+dELN-zP`RXY$+gSJw#-*6zFp`iz3-p z9T}}lYP#)hZ$!uwuJtK8M*iuZ`Nt^tul0=K{JKdMLfOMGdBAJKYObuMh#D zBi$>{yJ>u%oxvZHJZ#QGS&Q!!78_VhR6e3~M%-2-x3;jO2=}mQj6Mb|3NS?KYxj(X zGu)fP8Lstb9vK)}xB#nkYvf(hcw>#wVM0C%rFQ`HPXV4CJ@V^1jx;dEx*LWe#NDC7 z6Rj6!tCxrS>^m~7kR|jx-NE%FlqoKx?};U zEo4z2UUkOXxLNngOsAIbo#A6218`HvO_#gtR^My6w~o!?F(AJ`nB02+`cz|n3bxk= z4#$AL81LKf?}e8<*yz1eVJlvQ0j+4=3^$DWcwy%l!h3Tv=)a(i@~~be*R0c7ZFCpr z>dLa%?N;;UVAXGZsDFKjw{9rcQgqbdM2qN+$#$Ky6U(_N9DDKNFRNsA{i&y@Cj{Rh z^?}HaKp^O1-ZqWniHZ?NINS3DLEi(64@DwkAoBiquvDEh?b;vqoj77c(TK^ZsP-TP zF5D^F>(#DEXr!y&epAUK;;9E3m(o|1XV9meHX}_fd&Ed5dIa2Qo&D<7^r;)3JUX5UJ~&cMx-_LfA}!r*pa%?*t6(3{285?$RTSGue@J-Ww>j_DPumE{JvKA z;nzR1J7|#5;69|fU*dhobnVf^K}C#)gn)p+g_S&u-ekaLaj)r0EDLL$%1i%kyZuGdV8LjgaTU}=3+mZ|f{Mfgfiik}L{J;& z)+OcN86Ilc4eQNU7$`Y9UKaQ64&6!f0{{$U|DzPojZ^XP+|43EjTfk{uH?(~Z;wOO zWj#e|vcLQk|0&#6et}9 z|5uUz|5SkKsi^)-XubyB|5EzvWMyRjRck*Kt25Vmve_H>xB9?4GSioijSN$j4lV_k z-k7q_sL_`mobH6CrlLbBWs(5jec5%0OHTf5F8M9^_D0}^gp=f0L;cC%Z?f}+{y_KF zHdF|s_Ehvwx|4I-e9=u!mdm^jrz9xPL01t@$w<2aU-pcRL4hE5c!^{^7AOO|5Nc9+ zM4G}e1Y`t9HMG%l~My3&)2gQS=o zc;8i-n{Dsyso4?#zdX%Ecck|Px~@ZWFr(@9uFh>(X}44&iDJ6nrEVR2LfR|^X3K^j z{~^77T9W5~`uP8v73w7|_6BdIvatg*fJx`6ahE3qL=Sw*dg6KCcP@_v8q0eU<&vf> zclUD}*dgQon-07VR-2-ZDr}_wH)PiBS_+@Px0Q=QbfNo;*rExMvQ+B*Uxlu&ua0TS z{~3j1)LVW!V4XdORH~rd3jW5X|C%MFf)F)8Q1E-+NDj?y=&RFG&-u=-@t+;(J=MR| zmXV5alamxuyw}a={K6E_@#(>VQg7uJqnA5dB58)SmyQmx)Z+q=`wQHBg|7E;O-_!m z=3R3LLPdv0sLDSpue3r*!$`w>_C&tNA?I4ZZ(NGZ{le%Uah(tAKGb>~zFwTVy_ZVu zP!68A*|qZx37l{*;#W}^duEFioXH_uQBgRB<*j$# zJ!+8|XIB~%ZxXhcu2iaT2 zM-v)tQ*Kxf4kJ3*AhXh+su=E!I(_+eW^=`dTDGiCJD|Ez0JfBFTX?xHUx}vF7w%0S_X>W7?Kzw~R^c<;i`7m4% zRdIAMXHIm^L?RUis}u8e_<#ki6N@5MxIQ!3J#-#acM@+tCfaygzjAqb+4kGbr-Gm- zs;}f8a)Rn}yXT~zA&`X85NSDyF&=G#gyFRAJvzH~m+|+6DDA6ipO_HS$|!p7O&pl< z@I@Q+l(<>j8?<-4wWt~!m*erfyZ&8$%-)6M+qBAP27Q3Y(?EZBze+E}r8WK67|j6` z;9It$a9@;W@@k6aqO=%Qo#oGS%~@TcNtwBrUHIn8?Fp|F<=K}d>@0pqvxD&>p@IJ1 z%F`m!Bj=uIb<3&2J@|^yM#gf`0#*S&Gt{4Anw`TIoz?N|)n8#J=!G%AT}@wS1ma3! zxHe`56AbRnJ&P>gBEmZu?vIamed6eh2Ba7(Y8m3@8e)+6h4C4*`HP zPCL#>Fc%ce$GH$pZac&qg5H{)A=%OCbbC^ zLM^{$KnW@=-}Uk0k?|+WKWy_`wDSqYSqN6H^v0>msTeRvYW2nvI7aY+Q$h#5v3ma$ z4@G`p;?IB~)FuT}7a!r)zB5o9MZ$QT?MZWLNUZfBpkjzxyJ+4cPIrCx>3S{3)MZ7+ z5-ET;;pO%%)cTf;R*Jiw!=i+E#EHT;a<=7|=Sgk(c|AVdhZda1Qn@?Y$AGF}l}+XP zx9;Ag3cvE&skbd$u)IViW10G1z8UaaR`^ifSPK*x%xc(~hhg71Rg8e5K47_-$W8PX zER@tX7Bkd6UqciE?f1X4&!c@Z zw4DY$`lQVTgrZXHxT{SXoF?DW%xGZ~1Ns&dX;RmaGO8`t$I0WYy~%}ZV4DYEsbFIIMhz!=C1~3^!g#NUt+u0`AsU`(v7xnp z_knOkf&URLZIoe5cspik1(ubYw7axV(CWyR{ON*zzr8W7tx3?+X^D3faLS1`VZ7!X zdj%X}r55ClVi+@YH@#j#ngKQl!EOLHjJMRSdVxJvAcMh1)UTfBY=j)=*%M?)7~CPj z6^Lxi#u~vB`Gp=HURT|6EHn8sYWfcgjBYls!IhObqgk)i+S=L{vkJ1Zy9K}r^~v=3 z^`21UR~Mr9+*C;)3nZ%d4Qg1|v4Z+wmiEiBg&UZ(@9W?Hs%pr}!BsR`FEl*M<_KYE z8>{tsWzre*PjWB2yIj9<*j9bEv|1hpNu`+hZQ}PEkVbrv-e^i{a@KI5Js({ZCC@fG zzCfcInhH`M&2CC-1I{gF{AY=~Rcn)%-KUXAtaXFUz3V_08SbZgbJK)$uK1kWh?g@S zNIN>z+t))lf%8>b|5foJdI>Edbt9{@-y)f(9r&|9zy!dX@NA;Bm&i7IeUww+%f&ML-Vf3@ZNDJ)(aDjFu`VK18MKA z(2Cnxromg~yt+Jz5IG_=xZ#eC)xcfs8yeF`Kx5PLpx$c6J+YYOQd#LRwNJlI57JLV z9^?wepN5mqjj$3>(d!k~b%tEMarAdNs6N=}D(gb7egOofRp?B)St5PH&$z}|7P^ER zZ#oJ0_CqTcOu_PSWMH4r_45;wkdUagn+YlL(uWuEIGKmJe@MMKnTICpvmV2Yk0%$& zN4JGIsW0R7pRS55Z#^Blw*}j47Jjc{Fv%ehUCuB`Yo|grIS6OWeDD2p+r)w+Xl9i^ z#L*H{E(|NA8sV*Yx zPSz9NO`nDk8;ZrWE%!RUa8es^bL9?UUsxz}qo1WBrM(TKua9-JuuDFjH3k|9cy|IO z^}xc3H0VP`)Klu2LA zguwcyYkVjw!-UEd8eb*!2v9+fCYurnz?Tb|a(|E%k`s6e88#-TT{-gN+8-V| zXWPl8l^jDr@vHPjxf_#*i3&nNC3k$tTdfj;uFyMesgh0)g__d6*pYnSk9KnCWD@W( z7k53r`w`9Q>Y9OF+Arfr(_xnmp+xZ72xGOaAL%lw(y?ddtZKUX);yvkU8nFlUky zW^`>-W2{DWG-zyAQulAEyIRm>Nwp_j9sP*CsOZa$5Ml%%2{fo^=^R3iom3>!cOZpP z3_<*eyF6_DCju8`fTPuDXrcIIFltF**qf)uUPBn%cFXN4A+yNd*|g*U(KSzaSj!;N zz2w%WNuaIFUdg2RCa5i?iS_hN7(8|?HG9yZY!lt%Ht&s_wXznoFg0hYlWRGFYZ{8u zv*Ke;ET-kI2OcFqn{k%`%)jk8p$C3FT*rR37Oi}~Vn)sxC#T}a9|#{VT+94)-GMdu z?Fmri0Ots6ry~(5%LF(N}YI0{7e=eluuQZkcB6f4qw@ym~tB2G<*Wx`smy7 z$Avp9c|&MJ+U<#%Y9x$!3i4=uWFrFV^=(VaArfpdS^Y@8HiH$}KuY!g=d}!=@o7Ta zJBD`NCs84`{VN;63P&Su=_`5lAK1CH!yf;OeTb*2c|M18zYElaV7@0#+It=HG%dPF755erP7n3}bbCBI6H|6qFUp&dzcL6G~hckqkVSnkuX>Z$YYx z7@{9<`T?yx%*a@@j3?=64o5d|wo}6f-BWxwjyg&m zS)k{Pp~oX5a2fu%nbNAi1`{E#Y|VTBQR59Hq)TGncM}ZWJKD9;Z|KdR{NSWG&Wq*- z(TW~(hwpSg9Mn{=-)^p1BL>1koeW^{Goj?oX3s+=7@w-+YqeWNYHEg$4uXMz46C_s zWI3ydc%vR(Pi(w4bgy*R+t>&iU2Hp626(W9copg0-mzRz`%3frB!me>mRXhDXAM1( zse;X}zrQ9Wg0Ogag~M9ZQY&&ebujhYS|RFt{Txj{1TkLUr_h}vK**g&46Jf5CH)?Z;WB4^6NhDb4LfKu(FV=reFWNGc1q)mHKxIN zPjc4j&7jsu(&4v=TXJGPO!s5rN=+9~ZzbT&_;kVA!)>22+uw~J|0ub2bm2o!mx=zW zs~PS28J}%^zJ;b;8%@~8I>V0pplr5oQw6=?36IPZ{=w3O;7ojH`VhrKnX{6Y-coQ? zMGVE|DO+o+P}%Crf9%qSlHaKuP+**H{&-&xq~Io?c*iv>Q-7P>{SJe}uIc2r=>gu1 zRaoAaXH2+qQZ+xZ5VSYzlVP>!*<>7bH*4WX8GPU_#;Z)itQAuX%a)odv+g(P6`2n=}j1sD0!|dE( zKT#5@TciSmz|>csFAu1N^goax_ZZoX}$Cc@#B?Wooad zpz_qNH;ULWXS=psfhS;US#TS&?nMZ-$8Z@Dbl@FN3dT*61bp%CeRxpHB)n{>e@)SQz^cv zZf7Yw%&!adT)e%Mbub|=U6HGIglf1ytoyi$-vm7{1}hs;I2}oQsn&(fn%jn|Ooo^2 z;05QpXvg~D%0aVV2_&-}QXx}X{^l6r;^M~i?Bu=2bJ;6kXQ38<;(DowVX@j1tK)2O zymbNh;wI{V-fC=of3Jjf9gK2kK=|d#rnLv3(~R96(KJ5AJ$GUZ(ZiTK)pc|{I|psj zsZ&{077<$$?KIHwAeQPJBrw!M2=Z*kV`q{YIEK%=C=|q?>t<4+pu}@ZsptL6R{3!q)CM<4KpBz z{LaA#sa5Py9de`Vy3rq_}=&$Ff!2}lg{Ea8zs)68sb{%{|AW@ZtPu@=KpkuYt?pKVr3 z%N<->XgI_Q_JLh&V?*~Q&OsFEIPz%aN@?rh>isxPsCGonA2N=0v2ppvyJ(_&(-k3m zztfpekSZq0tRf*}Dy|Vo91hRACVzO%vZ+4jed?mK;OdA34_w-WTF`_LftJ)XbQV?JgJgU%a6D4i)Ag^eC|?N=ZCHK_Io2iJW9J?pp1TPa_-%sA9A1=`^32oHHWmCR7T6 zJTi(FD(<#nOGYj7-P|&o+gEC^)}4ti@_w|UGCp&n_RQG4pf_)C#0CgXl$vk!RTr?0 zdbwizo@z|H^~dRNWiXdQTJ3mZ6}T?Po13$W-LJ9|EZ+a62gVR8g~nu!pA#o~ zR81ib3(O0Yat(z`m8@#yNk)6V^!Zd6YF$S>2k6xo?$7#K zF>grj#@4;g>@Ki>mtQJlkEI7sHd$-7Z&c=E%)&DhIep1Z#N^UfUXBK zetL@2%MF%-uGr($?lJcF0fR-&JKIN*f`T6!HXR7oZr%!MqLrQ~?_nk-B@I%%`o#Se zK-kSQTeNW_;B@G+Yq;J!p6~?4UnWxz<$J9PZle+Kl>0OtE9o{kK$%!4?9hIAGP~tq z!Z_~94M!f(5oBr$cqUH#kM-(w^e0tDM#>LuD^a*_Q@LHRZeJVO55ke|Aa84QGch(3PLzW1K;_^q3K+wqTg5So!T1a+(vog6T*(H$I!W5(QG56LPq zH^^#eAeyt-Qwe?h-nIE-X(XexG|K7Z&=UgPeKA}1=jMMZ5T-IOEE1WG^(Y|fZ~9$X z&&-h8NN#~!J)J1muf)gBp$dCZ_h!?EbymaDUrquINn0Dg=&_a2i^QLl0Nu5O{+Z?P zZd5hk(`HQB{$@M5q?I-HZzwiwkg9)Wg)rdna84t4^MBhMuk(MBYyN-77G$Bheg72c zGNJKVD^`-%Wq1u{gR}=|IaVmr>9@H9GNz7{-q-R+Suu~$k~up zfyH6iq;BGW<@$BdyO*Ec(%S3!^1U#N_%V*mj~dB-+4rn7c5rw1FX!)Za$^6It8rQU zimiFj_utp&FY_h843zY>`LO>ce4$w|Xz`ditKQ!gf9b3M3!gyK{@^A#^Cf_%b64_1 z#u1Sbj!tfc&@?S*9PBTvCaCc+aQEN<6B8$@I8g@$}q92-BNnAZ8 zx%O5|AF37eb5v529D=ZbN1X4zNs67P(*uUXM{Avi)1m2ys(#wrDvGB0Q@X1@8=9nx#BwL6F~~Fn2Ht2JgsR-rqlBUA&&I`F{Cw+dgo4$69F-fd9o@ z6^T?tWt8M5WJH5RTO*s3-;JYfqQeoV=jUZxAl`-G*#y+d41 zfOmf%@&Q}(ZRJ!8Rf(hHFLvqqHOccvIkUOU-vY7?XH_>bC;nsA&K4z(B*L=t4O&FL z%;R30hgch#SzVs3kaUZ)8jIfo`Y~LENRGZ4HO^dLG?I*>j}-Mbf|$q0Rkc+j=9Z%y z{or9P8Yi3}S}VZ5*%$78MgcXcs!>?@Ez> z4E`QyXF2RcAQcg4`r#csQYf|c#RIRNPryakTTG-4JOS$q$9v^CMu8u_`O0RfL_%Mr zJv?~BWq4pW?Ja*&N}HpgTPVxz+yBh}jgiNe`B`i^LxRG z*m~>Q@qZr8x=>`>`r8=kakFZ009?>qN~_|VbC_R&-Kx*l`1agMmRwkP-j<<Bwg}Sp^+@K7 z`u`1bx&JGVDQ&FKEmqTb;Cf%soqe|(z?=R2<5lktC&zO_DwRPt1d^T5T%LEr|7SsN zj*cdT)$0B~u!H}>9@JF+NL6`VB?!3<9TGM%tz7%g)GgxLXP2_yI*O)kF-C5TxNn)?t zGpxq*$o~yEx=^vX;>&rgz|~oT-JP7k&(siu!a;EP^qlKW_rE|*Ul366(grhyN8fYC zBJysP?kYtZH0?XH0Y^OqvI_}*em?l7As13hyQE41J^L0;;TlnRmOEVvchvl<3_k3( zg?7Crrl7+1SEGudaG#=+$CeU1se2HBD~6FNnJAYKvUwLK;mO8jH3as5#*XVBbf?L?#t7-RsNs7O~X%wCtLAt|S_uJ zCD3sxof-=s;m%l&37lHgK;_KbJ=oaon_}i>@(XtFP?z?!OHg*M3Ad%{voF4|?LS-RrvwrLWHqe*H>)T>@@4 zPeI+kKiZw&GBH@R4H~?-(*%b`&21K*`@K2n5hdV_c*pX*Ls4CnTPOL$s-PeqRh>kgd?5?g-z zY6!UNV^n!(*k!KfaH=zY<2a%c1@Ccn%4x?5H(_s*?9X_#r>4bePtb77mCM&*;XH2) zE;79`6u{_6WAgvv`Nxu<^ksdd+B?U*#0+tXa9X)W6?m=i?wVs7FV!?Ko!qUpF3yav zKmkix(#if9rdII%kX9Qi>f%?8;A>`p7OXD4^WV2h71Nmw02EA;GYYF{O%NOSINx>r z5%B+fSv)$H))Pd@kbdG_Z_Z>o#vHv{Yc`rAKot6G8)AnwqCal#uP_t0ScQde!n7TD zkWyKN_X)ku9xYOpCZW}x(OFYCfa6+d+F4%UzMtBh?!@DwNg!bcmz~4xElyq1a|XNT zZPs~{uLQ~U6L#eW@0*qKqO@#vm;enGalUsr4ewCxGNB`|5U_PL>PwfrtqFyyxX-A^iFMitzQJo$kbX;MGy=6n-aDRW7`oV|0p=Hltc}N z&#@02x&{JdO|DnN<^9{j?x6|CHXhe}w#sR@ACFEZSoYeC<2Ceh3KH9!BJLfFdrze; zz#*zOd4;UZRi`H>*xN#9{|Y`78QWPQ^M;gBJAEjj0J!S@Y6_F>=jQf_knKt%pmT>x zj>EC{7CFjYJ&W>?zIWuU0-X$0Q8`IYECV`feYG)Qi{@em@VtOOWakJ*BgFcSJ(F^i z{wlWg6RG0xfDmb{<%znBsIxw_Z6b|T{Q7Eq;&@p^TIG6=Qdqv!pLeDTwtoum)VKG? zX69MlJq#56tY*aiqDWoPtK43aK!&U#fONg6sTWayhxF&1SZ4aChk)a|k-PnfeMM#vgM%HJGv1P0? zvP7D(FEi7agohXtUWT#1dGDOI-}(Ok{0yGx#;lGlGLb|x{m zI45Q@`WiGE8E4`4btBJQ-|(^{FKX)>quL8(b#`{<^hHNSL6FE(juokEqeNV{8fT7? ziXC@+)QUuoF-!PP3rSF2$k=nSy*uoIVYpn}vsF${H72#4BtiAK>hx++OD(@AsW6iJn)gVBfo&<#;7YiqX z`zc#@3^-(KcWJq`uzX~sL2KbRuS{TXtwG;VS2BHGM3NA^J6fpKY@t$u3chgxw>K6`aHs>R^~VvyI8rf z9j=+&w@OUbEW|svf=p=1a6YV}6S>J1;6=Z~R&icj4Y$|O{(aOxf519KRs$xujaH)E4FX z#C@EDy+e987GhBb#zNU7$Pscb@Z*P@K0DM;6sNiSimQ;MbU`sStO0OZQZ=m(zn&J? zN3%kn8ZE4jG*Om%(-3jeofJ2btKql4!q$pkoGToon|h=E@I)XSmiUR^zt{(#p`ow# z4=KeP%c-E7f#w^Po?AjeZIuTDKmkO^5)-o+Rk|N8|BK&?q4hP1t&;MU_TBJWpxc5)B2p}2^*v~)Ss=xMy zxrf`6=Ifb2Jj*s+&;e!Y&UF+Cz?FV!li6vU#d;{jyU~699)25)4`ac4vvkZ%mt`Hv z_5&;EC+v@)=}Wk3CdzOaw|Voi=Z{f*aFo3a+p(sxsmtEoa(1{77I8RKTU&R^baHYs zSjk@i0)b?fm$bsAGcYo7-9Ya8ETdjU=?bHc^QH$9NPKD&rUIpte%8P5G=aW=mT56j zqdodo>ZHvey>r(yy$uG_8Fg~zH$=scBf-$}Fo2-DYuk_&qfSM^|E2ESX;sz3Ljog~ z->Hgc!awVK=>o4*{BIqs(?A$)vY!NulemL;*0eq(&_dw$4_-Sspc~QBGSvH5X?a}~ zOMEL#OSZ8H?M~$c9(l!jGKyivYrD$6m;t+}zFYZooiaP;Axi3=caBzquaBy!#-yy;7%yu_L zz&_r(OUP-ygS`UYSwzFW6MIPOdT2OXd3c+;S;AR6IXhaixSP9KS~|JgID0@4x=ff*g89X(6n{5gp+ZzwJ`Plz{&eT-qgv{)D3pY&dL3OollUHOOS`>gQ}9` z_ADVB+y^*0DRE7ooRf851I_uTo{Onmd@G_RctRKPHJ+5U**TZ7Id;d{ImOjVho`3O zZh}?jEBkDagF93G9JA8I=tmwUJRS8lDnd;!BBGzrJK%@Vj|Bi#QOIJP+nLDS+WuNA zm-~LE`=r*mRXuW#3Hml@@+(kruiv~@mb)_j(c_aW`_#`kI+l99BaLgBxu9MKzizv7 zl{xgJ*+{Na)e-YtW!a)=IvygmiBAl}^z=+|eSLjdn9}d4!m%aZQAx3=zBW$qkcYOs z1JZl`cIiCg98_b{v`%^7Loxk*JPN3(V#(M@L;OmMmq6k9IX4C9)t);Ze@zl!wnvl@ z^foHIVBXGN5bu9lgEeVjrlSa$=43C?ON}pGq9!pTCUT#?DMSC3V)0CN3Tect2U2=Q-K;6KEgbBN)wz! z7_c7y)BS&qft5o^3E8EUpCoers13iWi{#_`#*uQWx#~6U9-(kSCN5m}FJCZZy&h~E z+p;jl|NYbez8yrUIl0~4a~BamVu%{_%jp%FHBj|cJ%f3=<#sAAd#!%I5nqMXw@cX0 zvvEP^)RRd^aesy>cGPCbP%{Lm4fokgn@&cIT2!=)hirMbc-nxY+xFkBGj6R0v486~ z`gppo?`rvMIJ-4xC(6=h9^Z=W*h%1%!|U+GYxeMfV9-hr#}2yUpeRkKY)x8l`PHa@ zHaYK+mtlD6GixYrNs+I&;Ix97V$}Y=lqcgnJHOlw%4*Ll+Z`Bo5^l-QynH_w_si%N z`CVsM*4gm|*2m>4jcriW&+LxiK<97z6rtWapPiJDwMESrS5Ziyp!#%DK@8gaGb~j+ z{Gd+AV9nx^!k^%L-o=a)W6*D8@&3{ffTqIwx8}~!!m%oA79HfM_uPAdbKh>%8vG!X89| zt-f*pUaBAG?Lljn-THsJ9va^!ys%M}l8>oCG-_X%u9bvLx*)iCxl@)2yYhutwqLR{ zv{N7U%@PCew9}ebg-$U!7Xqb+J*jPkFEIj+c&L3Bz&X#mvkF9xrye71#9H1-17i~2 zJc`5^ewzo%y4Q%p*@&~Uk}Ss|R;#b{U8l%J<+FI!E4?YZk0rUal+i%2tGUWXWav{0 za9dHKguxcWVEX}i9dUUnbzzfrxVpoI#cdDUE~;PLN(PCluuyBosAlo%8I5h*L-4_` zH^4z!`a1q_!X5WDDdWZYBk|$9x9o9G&u24dilHg7s=hN9P5sXQSm%ZpD|ynpjA zWb<56@Dg9(+st5AfK&GqtLJcIY`itI(kXJ4o^NWbqn^WTer!TSra3#Ewlyvs z%EW|kIIBz>BjafjIM<6Y{0epN$@Ulk52bftDCK^6_Dhr@U&Hn`B6+ai+vM-Uf|&q# zl`8#&?FAu(w}S^>GLPPTPuHdWFVA5}-B?xG8wpn{vck=~ul!s|KVqcyYlua4?uuN1 zN%t~0gG=CQ&f_>QsLV^20D~Yx$uUG`^`1ny=}o16x_Sds^{Auv!##M_^&M=uE`(n@ z95HRdH=I$Nj%xl32}9l zOVNS_tm4$AW(mgO5T39RV`ZrxA#)~S$o}y-)ttcc zR~Web<_;Gu@ivY}qQ=b+%z6$DfNOGE?~7yWme22kK3MezoRPkMu#=7upm{5n8nd78 z8>^fv$aT`Rih_ws_sN#e-6~jF*^4(8z;5Hh-1&4pxM;Fj(~Xk}T?W2=`}T5stme)6 zmTdm{V9xTuAXGjq5`$R8iuwI}CH}mu(Py^3Kf$kESE5M&wgokc?u|S16F;HWv64-( zO*K48xZBR-k*|+Pc^@I(A3zn(JvDcMHlckkyTz&9UaSif3L)ED{kIY)Bl_&OZKNT6 zj!Yv@hk-8m-UX`m95?>hlGmT{I^P4ga(AHo?B#-ygKOaTnc`NZL^x-3ff@qxQkvCn7oM*mm`dg(u_2b1aZo~j>>B0T) z%b=3yl-GEVC5GodYk0KKM9cZ7ma0aNrF~!2BOlys2xc$%mO@9mimK&mg7&x(-t(N_ zL93$jp1<8;fiq5DxUOK_d~8EZpv{I8@sp71Qx>~-d#+5saWB}b{&ZUVZNsVbY?LV5 zr|!E`{o3MEmzy~jpB%45)}Y+@8_*`>cz=yAA<6oKU}U5t>#v85ALzN&U(Op{FuwoP zoK5~wanO^0knPFpTWP;QtYajYh>JYMcpMBi=T{-4d8)9kqjm28Yim<{Q*kZx?6bqO`*t6q7T^rdI1j;Um0s`-&1$KGj)mO1bb_N06&L1y&JN^3x+>Q^^{>J=OO;5mVW+ zzHZ+HfB2WD4ac@te<0%UB9TACa#lNEwZ1o)N7jHm!9%TuE%x_O5FIpw|7$YW17z1abK_;aKC$k*$S45+>4ViK0< z%wHjkj{FNspcL42mIWxjP0IZS;8U-KZG&(K-0<_YDC!Gy_UATD)Mi#mM^0QpQ~04g z^S^Vp>P`ZVy7nFzHFVDN{!3Ux<|n*wB%j1Xnk7?wPtb)iNtcbqWM5VUh^ooI)d3GU zJ@0SG;yl58xlQmjRkAG6rX#O^t=5?_ggoo*Fl z25m#?2p)GP=Azpn+*d@I6QN2dO zlkO$yE|b4$cSN+9@O_Jin8rbr!9y5m(uvx9fw#NGJSsW;V0I)1f4o5H^6N~xm=6$l z@cHbn20YFm&jn_0i?+F*s2OzixO?F3l-g?ARh|urJAQx&+ z`s$%lM`s8B1=ug|#%j1mUIWv;q0`;x$25(ET<;F7wo3i0G2)CJ`AaL^{>T#5#27~=w zt!Th?gr*1qt3W_pOJr!HyTZ}%>!~?R0 zBS{yR%)2Yd89rhX2QzR?Lqg} zso-T3$YJcyWZOMK$7V|ouNFAGe8B}XS@%W#TI>7|=Fmm%U=Ip$awLS!U@hk+(YYU$ z6JuqwPcv)TV2P2xhp5X`Oq9>@JmgB!iiYDB&&A ze0BNTe?#P}14T2M&g4Z3kX3;sOYlA15|-0Y+6CWU9T$UO3$g5_Hmdgvx|6k>FYp5D zLnd8HNhv3F=qGfv=>ntKpVi)xU05yW{+=rf>zkf)hK~*H)Re{7S>SN%_CKBBz7>Ww z_wj0zPBRiNK<}n+$sN7dyHjOI)_Y4)=xqoSb+HAeY|?536C1|h;!fa++g6=EhZku~ zlM@XL;u>zUzyjb6@e&o#gr?vzTF&9IM8F6 zi98dMq!Pnv#Mw_HMkRMzBK~7V8-LzN_BY)}Hq%%?O>JJdY=*Uuoy>y0OciPZry|zS zOFn)L?&ICuSl}Ta5m>%;9N_y+NzsmPy{BgIRd$SJUr|VE(z~Y6#^b)J8$}}@x%Raa z!2lC4q54*q%?O23Ky0fAo4(3~6xFUZDV&e#03uSTlhr-s|lkT%7VL?qPI-WSOv6&gWn-R^QzQzZ-M zN5|NdnYqT>%gV~uF8{+8*Vnw54!LBuXWIzdh7*a}Hoh4{o<_2`3V%fv0<<%hWu|Qu z#NK?co{qD0DnW$>F5;v{Lfuyt2uDB0Zy-&3X6tR}tGzx)!kuLK6^|*etMnV8_=+RN z_GAgZYp=DG%Mp%KdX@SaU>#u^r~%B4fEhlT@2y)`xm#0;`G*CUnS;8-Q(YmUK*`ay z(n)1*^+u_pioc<-H!D9n9-_Gga(puRc}tGPb6p7CUC@`8Zxbh(oNv2J$lrDB$w>Hb zjMPC&eypTPxMY}GI2y$J?_}?sJx4t9iG1ytd3xpzJjV@~;@453Wwgi5EUM$y5j|N( zXus>3LfcwS`rv_mUEbN*?10P%xWpQyf0Q|S;`^a5GkwGXx_Td($X9g9@ohB%xcjyl z*Ls0Nv+L!)={Tvxh$~VTDXT_HnT7Ici~QazT6&i>TCi3WzHTbbBSI{7lqkAHIW?tw#{E;eRg2Y!6(mPkC={)- zDry-ipCR(j?%YT9DN_x3p?~RNL4MUttcBQf{mV5=^}*4Cpe{&_}FI zF%^GEda+N3_aEMD$$#z(dY!5NF;pw$`?geQP9Gl>bh42aJ-Z8dO+ervLT|A3$7k!j zB%z|xYBz8Ccf4)D?D^RcMrYJpuB_d_Q6#mVW{mT~EE zuXsO*p^o%z#Oy3{leB=;7xS*)wa%Y^z!K1CxD{G`?(%3$X>a?!W@ zS-<&H-Zp9eGZUUzMqb|r$9dI*%KSz20 z4qoSGC|RS4E9F5C!hSesIqQOtZ*nGx4hKUNxTX3e@M-~17lvL@4XGT=__Xq5FWpiK zXN#A;`-1asUxc`E+7cq`!anOQjtfSgvQIt z%(txb^Byfo1X#d{WWHLT*mr8}eTw9=Z>@F?B)s<`i4-p?beT;-U4`HLW3f5PA20ap zeN!9}@2TsGOB%^`)w~@?RJf+^69DjWBLIr;L>WZi4Z4ux93c}^^yXNEv z8x2M$7yT{cfd#Xp?Xw$JbB5ltr7B`D?xx!nKnzSw1G#Jen^*nLZZgG#*#XV#-Pfg* z<^ty#cGc%YHg-vjSDr$+)uo41knPJL~M`of7HVc5yAcEMF53Kp;GP0Ncf z?4LNu_NIb{Ir4M8l(_6OK37vB$A-cvX^@Ca(Iplw1Q{|Rz3xj4_tWX;=dHwi7YdNR zQ{{a5hajpKC_T2YpP)1{FM#u{*$FqEw<(2mOvP`_D46q0<9G*d^xlMJLLl=9Y7dCu zQDL`9N7!OUR@?=?P4GceSS$4*^HSuv3)PdHt~Rcy@a16*SaPQczI_*~CmE(spQZu0 z%x-@3){|%e78m}3bW^|Ud|_>X_Z(jBOg~{^f^l|NIFDXa{>vGGi!0#$TmsG2R0O}< z?DS#+b2*UceS%7-6`Ao1Ymkx<0L$@YePIpmsB;ZF;;Z%`GP_s79oB4h z-z|3-&t{#?t`jek(K?&BcXl%Y6~BHU_#fXf7X(Xs;qsr*&TMqz>kNVJZ@MVEkAbe+ zgR>&22$9MXu?VGy@eOiGE4H=ok5`U=P zl^-EM@7`Uw&(jC&H~#NH703nm_gnmR`Oo>*CJM^uXR1~G-LGNyP3_a|FSC|kx~QtjHnuEa;MaXWZ2Z~C=D|5<;Uk+(siz<^914-~Y|2mlY)P)jgbjXPmMvE8}_VEqb-b4q&YQDL~RFt6nF|-C^Nr z%$(F83248JoL$hql|-=!3V=w@yWSd>^#AtAI1Hwa>NlFD`uDyMZ;{{$_ApY4av5wf z!%2v|cZB84ZK6S5)1EDH%w@FG_cgA2h9zO4VbjMq|CAp75NMtz+Wec;xOQ=h1s9Y^ zVoTt)n++XhX%7`D2;3Q_vHoD)eOHp^N@$q0niU32H^z7$lcl}!-PZk!4XjpBkBU~c zqkn1l|JDlL_XwLiHPVrK{;L$CFOt@3*m7AQ|dB z{Lc`uw{hCdB9#$rW;n~AW`gU`<9k~^CCh%_&IbB0x3O)*dswFg7!9-2z4=0zs;M@PK5kMQ33ERNb-lhbCYqj+DVo3y9 z{%c8RAwL$KO~LBVff?-U!nf6pZB;SA}ZwSBE4VtPBmq<$ILby~UxDSBiEe1jlJ zfjss97D>WeLR(pgVHvBKQ8pr2P8jb7U!Vdc7725KP0k{%psrAAp7NQ?*ky-XIHGv* z3}OEN^bDqJpgR>k_ushkulY0Jmg7eKF9Fsp8j^_r)rC!{gp=^UeUylfql=OGFYy8C z)c=_MzofPSw#v|cyT&;Svj2W6xHd(qX!dXb>(rTl}FHj;xBOGNMhPlIi%r3lNSCplQ{8eixx0BZKGsyYBkjcDHf|;9>t?%C<+{ z&y1qwFNSRu_nmqzdJz31a*wR~L&Lq^*kJ$L(Qny*ZZx;3cV}m`9&`JYjW&K; z#ft^fV<%}FZ%8F>gNDH3u1l)1ZmM5r*vevuOC~rTiCy_~mK<*NT;G$J@untcew{Tf zU_kZj#H`Ym6c2)r!aNg$2x>CoBZa{m8;jUAHtm=h|FhTtPRytTz(=8oh=>-0>Z=v) zDs6L2%w9a~=$e`&gRp-@2G^XhqvL`6uq>F{> zhh{weUu&kfP@Ljr_w|+3;(|#AjiOU-_+n>`iZ5T_;lm?%e$|$}E1iv5J*~!q2Upi-wL z45)fl1jfe3c!-x*S9PluUb*}B?5f>C2y-MD(u0eBuRHeN8*t12RY8mnMv+$gdvtw& ze~&{%6e3@>=X0cnTD8FFXuNvqY`qsc*|F+ji;tcw`gAsXwi&HA`$dgQSPk^v%39DDvSSa5>HErLzh7?x4!#fQ5`nLzw`T@sF}FJ+B}cVG0P?WRz^_A z+M#yVFB3&qgN~?G9z>15NAVw#{KWk2Rp{B(!i2lNrKMl+5V`V`Wl&`WQ%3cFtLfFX z6$q=rl9ravp!)dFWEh~t#>SrC%rQ;JfVm@c=6@zEm;k2lUAKSYf6fBv8D4mH1Hs}& z)5AQ`Ft~E1AoC*qEiY>RZ6!CjLV}{0K$h+0aA*5!d-wturXSYGJE|A*>K~B%{|~TB z{Qt&S?VEOGG^$BJ>k-o2`%^WEkE)1sz+8Va6+h1EA1wUdQ1#g@lz;TiF-FqsnC9{p z%vk=@fqQEh%wiLMzPOO|26L5B3uSz*=Hx?iH=nDjmR$!R-%^5xG=3OMs{IQu=a{v= zn0tiL`_&}J66YCsYPV{Ptz`y-b)N*PC9_%e<6%t>q?KHheR_uOx@Y`48%wp}P6Aw% zi61y-^WQFepyp&)*32v8^Tb$nB8=Q0efl$FFG!-Mfk!D8AoGef*sUC~JC~e$K`asm zXvNyD(`VE0(6Z*tY;nIPT4_oED6Lkw@ROaaHb>>IHrK(j#ky698MKK=9AM&;=17&` zFQI#NYl{`pyY)ePWlw)jx`qyloXj0ONI;Xul75bk6;xSN<~3Ubeai!5{&}z^L@Vfa zL~V+g+MX0f*W4&l!zYOe8h%w{h#3l|)tF29 z6<%i$8+)GA@v{hCBZp7z#7P80<_xtQOFsW zVB>pDH#E;_y{7%1y!_~I;B~6-vyDJ777(XA^4f7sw`&W#x}KMJ=EHBE!lO7WaDGi> zqV#kSFEcdeSI$w5-ntzTn3CuVcqU)sQO1Mvg2)_Mddt|ZRj`3)9XY}3Ixy+tJe;05 z7^3TR2#Of`Rvg511sP_+0x8`2%~RUXj|edRQ!GLkhgGWz)~IHRGg@b{3g6CkGuIiG z)jkp6bn{F<@!6yADKr*E2KstvlU-zsQ7?Fik{+Rup5x7CIGC*ONi9H|Vu`1)s1?22 z!poni6~7Yg8@`T7l*AuPjIhp8c?7r!UIod02y%Z@kr6zC*1xLur?rrWPw_DYvOt5~ z?TP>j6i)v6E|8WZGrA4Jwb#juz221M>m`LA=0S}Nzp;P~*?j_g98kG<8{a$iHsH)+>;Orev2 z4ui>G7`>|1bVfqkS@acpq=yMU{JLRI{whlb3OL7G?~}(bJ8vyJ@zfjfb-~>GS$cnR z730xR1?~iz9j;c8id4s$UMmf6P3H%PfAX!CDXWK zy>CAB95HV}j~Uv#=RpIy2M8fXAjMBqi??12bpj6GRJ@X%@H~^ zX&vLKGFRn0_WIN>$R_FBnoydTJ6wddK1Ev7r6@1&Hq!QEN3!Gbk|r-`TaB*snGpdQ zsNGMIYvHUvpmQY(j++U-3f^@lTyj$v$g&mk=L)0-v>Qs7ot33P`IRc1A!BPqYyU=PwV2f}R7hrRa;}l!B*TWXty<+`xw6zIB@lgVxqC>P`6#HQ zLl}KMYq907iE8cX*6tdCj?-7s9`aagsu<+?mg=I0%WnxzMrBobspXTfNY4|kpu;_0 zNjy6JMOYNE->Qv~fu7VIJ;*G8UZjBDt`CpSQ_1?JzM0GA9+#Q*1h}(!#zybzp|>=A zsCd>GwFq1vdor$}rY*f+naUHFUo$Z3esxXf@e7yh?;ET6yq=X@qht!F;Nvt0cjj|~ zt6me7a+u_KL5IX>JDaHprQ?A1YM($4D9(sDvlfG9U5_g?S{kYLK|?Ee`j&MD;ebAg zbmo_=^Yci;42OZxVkcv>)ttJexhQzU8(r3hWHjF%j=w14pxS+xvRijV!!jHhL{07=B+_jNg}~51g{11$(?;!pWuM9lh(2w zPrVCYRZ+uh>W&)=rtLh+L3aoXRo$;+K*IPy+IWx`9-Gr~-)z#I2=D=0V*E;j2*jKD zFtsuH_dOODQzH-9I55kJ?t{bIR8UKHts&+4Kr}phE_+(|_btVsAfE@Zmiuh>)@|S5 z0qjUjp&P!C{d7yXzn3qc6e-@i)+AbO)=n#~6HG4g(c$9iIvuk=NF1fm%g^(K7v6RB zD+`%W45K-VNQ~{M_?X?po&9WqQi zZg`UhEJ@s17?~v|{*zmdg=w-`X8pC8bm&KhjOMfXh-IPbUF5~i3qCM8BK6a~KRxUi zSaqK;DyHM^(oFfz=_9#x(IB`(Gv6e`{J_J8P*Gg9<&4zrsPTg^fD38j@lSs#v>lg> z>qk$dr>aH>i$G!nh)`WqwejZnP_ss}Ke|l)`(lQKP(w7i)fSXe($8_#r@BWTXQ4IS z@Tf`2-JZPkxL#XG>@v7({&?RK`llJRPk`VNU6JhP9JD8^D%${|!cw!kVzuwr!ft;#i5Qx-jXP(K7FH^3L=x896_^#6mR>3I^?71{4Zx1p0BIN z@RBo1);G~sS^e0n5lDXvWL*(bY=l_ny8}x+gBJZRM8|*SSm6&^rAMB+cvJH&%pP?<5RB+j2cd1qgy|ZKmtR46`D( zYLNAv80CU1Edt#H`q#BQ4@BMGQmtD5;jX&}h+Yexb##ix)DtG#%+D5pF+Ad&B+8PI zbksZoC`npPd#UveVMPJOG`O0&_oBkj= zc(*>493X_OAtF-V9ndq5rIWJ#MqSh-Xq=s{*)buJMiCl0J^d#qN>o=VmYkn6;jaDG z{IQ_-r#1`KxQS_hrAlTSGeyW;Yd#L21(J?zL{H)uv!{sE^AQo|ji2yjW-ko_1I#4i z4o@mR!R`WL6j2GAhwp2B`h;k9!e<@((Bdg^lzvXijQ%dKL=DJV`VrM~chxwsArf6n zo1c?=ZOawClpdwa{fvvF4wue;bJZ1ach4@^ML4yAy4nDzaHpdyP{k7`vp#u(K-Y$G z1aEI_arB3L>DyeAsEI3NDux_;WV>}Mtzmkgs$QEz6e@ru+D`H`IHY~M+}^Sj%a~}{ zFFm5IB+yryz+a|eR_J(*%p-Qt9CI%^4@|D+|RNk9m)dZPic^3@>%U| zCNQQtdhYY8-f?}S^%NQt^$WYxA%Ej(Kg4z)TGmMUeHrrJEK#XwN)m09=Jh81l-bW8 zjN~XqcVh1FD+RS(q-uI2R@+J z=VqRb-Vs4Vrm5Ui@Jv5rvV3_&#CCMwXo0C6)TrxNW)qY?VJv zxdO!0D(5ax@NC^y$}?Zwp&NUfz!ICo^pi1q^nRhK^Y;VPL5uM5)Tl2?0`1T?W#~cK z>cCtx;ddK&^}Wl-HHu0yo*!jXsb84ugGE^Uy{If8WM{dgDs(+5d_R|6@l}Ago1GIt z#>CTR)`5n4?7MO9Z5+oQ4y*3gke@YCIIAx3^%}o@Fb&_pt8p+eV!#e9X z+}+aMwB*3Ni}%QO%Z><%=S0zTszh%gUM2ENU*O)kts{3~v*L$e%9y^#R_`l)@I?7Bib~Jag^)j9YrElMGp@%`y3Q zBH}L3{^bfp%{~uMN~p? zTW+R3Jdpx0B{=G*7K$@{45+A>NXwxQQNUNs=Cx}I=F4Uiefj~KIsV(IZ;!s4TVH5+ zxX2aXabtXb__|@f@f*hP(0?f)VDMw&cGJPmsUF*ck?&<^t8ydPU5{x;7{al&3NW3+ zrg9;Gw~@Jx$|$Hn>j4kV8$F}05CEmgW!UK#s0ChNoA=J%YaCG6jx*_&`DTl3CP|-^ zWk2RU0uletSKgmdTrW+R{;Rq{nPb}%gbU^~mt#W0cfn{KBWRFB6twwd*GnR=>jnqn znA0Aw+jLDQb4YdA-%5NIPhK3+z)(W#TxB@ZcR+_fsaaX@rd77Kf%%!s5 z%e9#L{=jzgjbxRjH!LvMHdwFy!wU~wsI%!s#i@rkB-P`cPVTUOIs_lD^lw1D`t%wl zbZki-PoNj}1T`X&oq}derytEL_|x6;^RBF#S092#B#suURDjBcY-Nd^_I!m9f$xd5 zgez17*T)h^E1niVj!^M=pAqS9#?4>CiP}6UdvGfPq61$(IWe4xTDu?GF4v%yJA)=C za5Hjl{OTMGdQLRtWUha7v*0`Btk3Cc z96X`oAB*-=@u!W%$tv2zSu;kZQP=lRxR2@AkFyoMdyJmfhKCk<9{^u9;5eIEOkYxz z2E~MbvS;>qOi+*O;sB38+xJ!rOan6b-H6b+$1hKEkXQu6T!k~W651! zqE1m5u;YKKwt@T?;3%K94V@f-I{ngZ#@CiX9c*=j$-4+?K8FMv;LE9uWX54$I8b@_WZ6(DB=^gC;9R- zF9z=*5@;HX7r|%rQ;2vab%DpC)ve|D@4I47sw4vNPqS<3xEIJwPn$FyoIbF8a~zqL z;$<{~2#&8H<`>oxnz+OJJ}n0i$c(9S+09JK&+S4R!+oC&bkRBu`)BV?=%Fk2?=F!i z?@Cw%MM#=)^^=>CLvN&n6~vfc+|-oQ=e;b1VwN|cd*mXD=_QCSbRP;@60)((J>f^} zmo_?hFc`Bcq%42Aj8A=N3uYd zRC4F3RyJ>V0qRcKm3=MrR=|~rX5^pOm=<*G5qLG!N}PxjuNt%-;C28BCkP!g!2RAt zI)MC)b-!xnZw@k^U@7~&4O|m)z-*dBKl!{jgzvyF9G^JRXL?$`!55`_yDJD$J;+g_ zAqycTiS+l^HvH3bErlNZEg6H4rPve{{0s^Mma+=|HiMKfL3; zD{f}kN4Ygi1bqsx1d8=c4!Dxf!L=u!gyMy%5ztmgMWMlT+QilSJ$Qb*a+So12G)2-rpGszVBDgP=G$VIvJT#U;RR?{oZm-s6G^5 zU@0jgmP-=UZI4pFK>7Qe$AaRD7^HF#I+@lRIhDV;EDf9#+8aFpP;MPk`Du3^Dp5pg z`55Iq800(%p6Xxt_Izb~|FKOuRQ$d{N=`ID?ux)4D@b z2(aV+f#bR=^5Vc;$4 z>yJ^-Ub3HY6|Jd1D#5Z1VFA1BBErK?2#$#TbdlR`X^0uxHl4lAeLBBK0;toPi){7O zSll-d7~1g1no}--OEvr_C5_!Ku|o**Q5R*g4S;Zah1|YoHp_wSRW>&!BG1UJzK$sI zP&klzu&GE>Txe%79+sstRq$d^sDJ#&?Y!e!isdMtU93w?gD?4)f(Mf5J~LjXECMxT zc+gJD{dvdfD5Bbk@S>JmQxUJWp#9{)r8P%|Q9`;Z;DQ~t>0L+E%`j`FtXFb=!^?QC z79$MyT27_IZ^>fh_a%@1yoLg>gRZ!UNSbH^PXqomGk1r085!+j6jsMj&6c**Cjowg zp%J^9I2S)=2uH0QGqj+TR)l~cDEsZnhT-m|e~Q<1t!dFHn)Vk-n`VFC`*B-FF7Q|W z*CfWp_jm_MZQ_(eqAR5*zn?XqwKm@x_z2G$ivYGTb*w*5I=}k5jJi=4cspY_Gy* z-WnT8o@o_j6Zkpw2k^1O^*PE&g6piRxnN&);&Q_EI2h=hFZzP#Nx6S9m5#37`$I_* z6XT0Zg_3u#uyod*G+>3YEqQvJsT;`E)=~>x4(4_LYusseDg0j$2R<<0czdnsWII&E z_()YS(I>V}L?71-?youOT&h8vcOFab_>3=qDLJd(UPtWDXg?Q0XN)V;=>g=gUcXYd zt%KeX>$xA3&Jr7Yv#^Q2$jPylTmkImQ~eHU=vOz7ybMlPdhPX9j9m^%BFsfo29(jT ziDH-2mG^w1d)gy}kFlbp6Ilz z8aV<#V<~o54$L`Yv)t8e4r-Eu6*9OQ>2Afa*f)<{oYe_L=sYQe6e1~CV6|@T!{iZz zN2H?WNF1-5&qE-t+{0UcA0MY1r3#b8%whf4MXa%XERLHDuGCX&!K+q=eNVq5$HLM5 zZ+UbWl5$E*7>_|xjr>EAhs7&|ILbdE;@e&;pUGpE#gfM3M%@lPsoV#d)F{1M3bq2MEduVHW~ZlczFLhU zK+X?C5sJG!E6#&#g)>kW{1XF#TP=>3-Og=Q{AlnCskfG>53qmb+AO`1Y*%~hNg;KM zHIyd6(mO z-*^;H)qx1VIEXz{&Q)%#ME@%6$MXgjekKC6ac2VgxBBxW)ygk0?ByQYYF^&MN@7De zvHRP~LaHe?!k|+-1lWICRt;~w#iZ5FeOPHyHMDONX`lbJpP-z0?4%%TI;ytfx@^h6 zWWuVOjCXC76q+d>e_UPesM_uvl@J_R3zOkV$jk z4v8v#dG$oOy7lpQ;Eg7pGI@1tl2nP?sPo`)vVK@ZLh%9fgGv7~f5biqF+Wczp#P%X#yVdT*5#Cl>zjDJUN0ADC;Bdq;bmV$R|~XhWI9rUyfPa;5*rZkRO;UGjH~Ts-@(xX?s_o0WYzS6|*E@jE{PUYRMAeF3yhg`E)DGFM+}J~m-3 z-V;W#0CX3?a}XRXS;(oAg`YsU>jXt8WkEK4O)^+qgoZfoCqQ%T5krxbOeChrx`L`H z#UP54*<#ge=?I#LxHl^q@%C=X)DrKhbnNb7p1B4kw9v%LR)^>d+L8wJMRrB}3>=S_7ow350`r;;=52GN zBXsZh+9Jh`cOa)Rv@GNb97%N_2d(}P;wc;k4F9!jT=NeWo6HlKi1f6tt|vtEPiLmz zy)u&05{x$9XTKfSmx(>SEPwla2pvThJ`+pgP!aB3kV4ZW87D+TGFaA9>st9m4)$5$ zNQ5j8xK6b_FYE_>w0ia4=sGT>{snqcBqknu#6sqxK{C>H-^4CfL*aFF5SF)bDUBFH>4@^=e?U^PW<(%VDx&9NAnRMHgmVpji) zTpiBE_8X)UnwGuP1_GSbyv&XONR15>@pLhrIVZZwXeV7t>R7dCC&M^O)L)(Qu$ut0 zZ>QHlEjnKx}-^2z2BP>XVFSr>|P?q0MZt#=q-!3p`iwqawz;fR7AfG z9@ERJd7|al&wxsXOVIsV8tbBSRH?LEwgsBSLDP5A`@42E=aotShqbp3tLp38g$V@& zDe0DO=`LyMM!LI^&W+NoB3%N~-CfeTr5mKXV*?vDXYqU9=Xu}r&-Y#DI_DoQS+2!g zYtAu8++&P;=A`k>2Dp7N68v_X$~EYYWY(4k&(J=hZU33qi);U|z}0sgt=C!Uy>2<{ z$z5PK+hC{;!lC)#h@Op0sTxT=^(zH+-iAv#V9Y&cLqUAYMAf=sh2t4`Ru_mowcFwA zaaQlpO|&`FOPep&AJnX(S{Lue&_3v0qJ@=Q8_4y~>;7_jJZ!mtW3tp7v5~AQP<^bY ziNB7!6uCK2y!O-d+fsP=9PPVz*+XH`fL1;fmXq79X!=#48>Q8r=qpOrhIrn7WT;?y z_FFY3vHj@WPr#{CITPs`g{$9in_4nN!cWlspN zq@ObTlTt&Kc0<=|EK(}tKd#3AXpz@C;~sGRyHVxRb_SW+exfdzj30()Ql^;Skmp1w z33~5enYia>kRo|eQzDeux|^>yAy0<~8FKEd;^B&DsSk+u2l~8^SR8!4 zgfG8nQ9ur9V=ARK8-}aW;@_6P6snMu^mW<L6}Xm^~ zg2neO`qF{m3UXa_Y!G1yJJi{UWoxC$YrsYnOYNJ_A_y0>;UKR2YWe$1+}XWXSDep7 z$E5^Mf|ud%;9>iUcObpaTUzrTzVnMSj$~T4E*`PJ97Qv?HFxkHQqz@@+k@gCzk~lo zP*SM8WpbjD%x-5HLiy?))HH2EMSO4E!disA4tsU9kgP(RERu?wfZaJPScZ)0vRujG zctF%mC^H?s8F4Y%Wzq1yo?KXjAtuF`z%X+fP7&()ZBHXPVgzZCFnyYK5O*M_iHdY; zy9_Ge-Yf6jgP(jLSMP=88lJQn4*1MF9NNF;QR8T{ksDIn1^G@ue<=YiqjYqTNPFn; zM3qFxOIKn{k^6P(eVnpD{Fby@Xr_uY*l~ca~Wnv~LH{PYgNLT}L+jG#OIz^Q%<$Sa1 zi~z2iG_BF8KKQ-&cm(H;2C_V?zc5`7zB8GGD_avAN_djvB=!S!JqT19@iy*QUicVE z+_w)mnI69@U7E!v*2DXr@S!@m+7;7x4KIv`l_+5dLHs!4HAl4{q`Oq8bUKdGxl{gB zFButEv50~uO9?@e@LPZ{mMOQXV0z3Q6l7+gu;!o5( zrC(x^P|xoYrqx8R_JxCrd`(2sV}?-sTlKI^1-fQew)J^Tl!Zh5#;jg8s1Vp#@Uz5KOdKLCyM1Hmf@vFE zEsg6`Vo+xNCdfosC^mOdB=4+Z3PIAF&EM{&geU2&ePSiUific#PNhupyZ$OHT#JNy zR;1{Hm!BaR-K9>rMvhr|@;&cAVY2rAc-a6lALK^fn6ktb^;r6g%@M*>eqf-D@=JWq z0i_!fPg&(k^4e7Gmb)Z=(KRl^ZO+&@wdI;k`QZVT-l|>kpdsqp8PmJRDvAkAXmwjp zm+Q?LPeK@Krff&!lBd)rzrH8i#)eM)CjrQ{&(FbQ=#^gtPwB@*!}l*;7ppfv$0uVX zBB^6iyd9$cG8-HGhf#dnFr617)*rx%W|aAWdgG1pV4r7IYUQ0J+%*yXg!~56g`YYi zLdd@Ljb+$ds`NQ=j|Vu}F%uO9dPxGss%&OCiy~|}vTU=X8%5GradzBJ+GN4z=Lb&#&PahF0f8S66YK*n#QsJ_Mpz<1W{fXvez*R7t ztuVhYEl3Ve=5&2?f2jl;yIq!x{f(!yJ36DHva*bRDJ}YAkUT5Vtr_OSWY->ri(znH zed3o_sIT0{F2hLrf3km(_`+dCm_&AWiyU*j#_;5rC&SfH7`j*7`Mn6!?HcEejOthB zmG3qF}LrLp0Io+90LEIF^)FtDK5^C=>#p2V$!gGkvg143|X-#l*;T_$~(~ zUl3yu%dYL1-p<$!d?i4}ssWKt+>MQ!i}lY+3R3B>!4Ft-?JvF1>m(T4(8Y;}dJ3B> zd`HFc2?3;h9PF_}D7xYu3u+0+$8Hyk2{f0*(Pd8gxr0c^*YuJR4P@G0UuBLUA;__n z+AVbtpAw;4^;#qSiKD@b`b)`7{`Fq<6|d6{MEaF9zYI0@qmhXexFsJ)zg$%K@y15) zBU9)+YGgjm@|ExX)iHR#H{?4#Q8!QaT8+8X)oJ`wzjW_|*GmgOgds+(#j|%0btW-{ zUGt(jI!9TzP`qs|OH=TP`JSNg*!<^Xlwy3vLBk%RrNVaw<>?EKFJoXnmFUzzuQ58@ zD-Z)SWw}oJL|<$tFPBY+SA!e3Zp-8zGVxvZJ+#Lt%A+K*qrVszhGrn&ksjudA)~a^ zl8N6Kj^4WP&Kj*afy%u;=$T@>p`@Zo`RSWU$WccCi%i$0KrT9%^q5AwigOVOq*Kt!%_1DQ zg|WUuMWt)oy^J|L2Iu5o@>?JulLdI+kG*N*Dh7=}jEMCx43H!3LGJ)tPUtZiMH| zI2UEE0xl7e8d}cCMq6JZ8V6)oKk9D~XeJj~ujM-DXFiB}5vY1QwJBQouAC-bPNmw@j3UbScwUKxXK>|b7rMKTb_3T$AG+0Zg_NiG(7S?+Z=TU#& z>UmPC`t{A@mVNvylJ_+GR}TxW-JQU=yvIlH29mfa?lSrvH@j^r2e{_YWsooaE0FFh z8#3wlbMF|AcG)Si`chK}NrTM6+;7k&QEa#){`M1-E({DU-U`SG;RL-<&$a#;a}Wud z!)F-k_w{8hBp9cHrnv=sZ%%x|`uOXIGI)KydUJk!oQiT${(U+Ff}n@EsoYz8=q`=p z{1Gu_CSFf!=j#_T*S|Xz&@zai{GFmm(v4XJg2QyoJ8t6~DA}`lXR}*o3L>L-v|Rkz znl+!7liUUr>H>U9KS&n2nRm+KEpC)FQ(x!7no7#KHc4lB#Fl>!qVny|8Q;3CtLv>U zq$!ci63jOkLKh%fqYlbu!FpT2!c>9Hokx$9zQa!&189@E#YnUBSA^yB(fFSJ$Q zc7G61iMn(?^|x5GCvm))EM(a$nd89?|798ceo_~7CH}@l z55M5OKh`g8}r0>Ju z#eaRAdp(=k;=hX@=VYKX=0xV>Z9`JS1$Om@8htO(Mx?bkx=&9uBC}n9FbW<{&%2Gg z**#HdlQ#tEbCAy;iS+hs=IAfMzjkz@rE^|89ZeO_y~pa^%ym8pT&8lD z2h%BFS&Z5~63^}Q&GfqI944SHJhNQ7l-{UN9{-JRRPjX)d;6z1O?M47zi;ZGNTlRlbLd+EKa1?m^!i_5;hle~aW z3WU8$FjM+jqM&I(xcHU5V07P28q65o|7Wv)oAlo9H4ZusA%_o!xrcU~bLzn1rnQj{ z(M>0dLuM^X0Z?-{S$ONSLrC6kmUd|!ZQb)Kg4GSNoLn1EGh2Sv9yu~=V3=<$)=y#lD8F_4@s8`}<@b0N^Zr)0+L?Qi&4H)!`7-NDJ>R`f#b~2l z+NX12uD^(ZzOyI`uSlZ;k~t_?y_9_ZJSptNw>dQ3Fr!5vD2@O#lD|!8U!S*RD0BzK zsSxa}S6ZCtUy8U%)g1-xTr_!|+h&VD_}Bd0%|)r4LI4N*$MNiZG|TeNE<80HAGs7Y zA8i3wG=V06ZY!2=#h*BQ>d@+e^KQ)Z5Frc1c0SkN9XYM4f{pRUL}m>gR{C;!ZrOA^ zJhIk#;tY7PT5LpT8y1CO(3XHeG1i@wzVV?y_U4E-#p0@iJ56Ahf@QYII*>y`x-s|I z6opjCy97HWlU`&r!W>>#f2gn#XuGye-nf%4fNB&FYJ)$Vz%;^W|u^vlRqt8j80&rPirUSHE?0G3aVEWMiOo7nd?BNVDPJ-s`wA3LFIO^ z&Xh>AN$ty#KV!}0f;-A`2#_Osm%?^+WYe<2_~2qbIH zcNRV{E(`zh1Yv9GMB6u1Q>;XI3|V9(9gYz0T|4!Xi5Qrq|NQxOJfpcElx`n!FrP|b zs^i+iy>AEESr@9+;k18gjhaTFjhn3=i%N2X7GJ8e zMJ4C!mON@f;^n~zMph=0_iR8qSQ|9MsNh5C_u{1^YxK%?nWV_93z z=*Q70%PqZfMgLRD*>c04#d)ox1pQ00O31CI+eR0hC-gWDPP-ci>CMd4?lfO zKgd`+PoRmHPiOj3MA`m|pF2DBaI@NbmbNB~Z5MMOS^YcqU*T}b0M0@SwWG3h?WO}p z($U7)wJw8z3ec^ksY}ovf3iBK=8cS3+)hoKwd^7G!&Z?`jBNdw#C-8l$p=|o3P0`% zMiUPc3Zje`?hk>-L7B9#PDzjx_6#boP9PEl#oEIoQ8HmUUMh#szoS2)`@o5yFW#-+6b>6hzOX>uzKMau=_2~qtdie$VI zU9*ntw?27w*5)FO!F4>fAA}6YgYPPPjtwTfsefomZ%WIksF0IiF#yY>)@T$!*Dm(0 zGnu6$SE;98>DFWtw_g;(?FTvPsCd-GOb4pTxHk1KD_>M4@^dNEvA-dC(lV$^SN8AX~veD z_~>RCVTnIexeOo8&Z9e9>$!={H8MRti&SB~`A1X+h*{o2T7^4pN**_+sUCORpWWJ8 z?#+=P@aX7*ZfFBny4#<_YrePtwB9XaT=|L!2qZ}?Sz7$cnQL7Mig@m9OV8Hc4Qp)V zBib(xZ73hSYs~G{-jd3jbjJvtF~|+-Ef+WC$>Yvsu3PyA!ra{7SF^FqYWgmd*FQBC zO#MXuuFlcZlUF_;!ON=$Jwow$`WiXCybzfZ5o(*yzz>W=a`VTYuaWM$fwW!-Lj*8b zcBdFqebm;k-)@X}JWtxw2CCKl^-N%j%CE@GPNbnTF&7W#RE=WfUbvWEUhaZqOo{S4 z7tKha5})PsB?_n3*H6aJoARU=$JYT8CtHcqnT_pj+Do(NwzXWHcjIWs+uNZsd6d*W zAuCR7?n13A%4QP6a9LS0+(2vpKTGpY6<9(KCvV?7)#gul%gf6j6!{~2)Xszl3AE}S z^j$xRql$@%(FaNBp8dv2b|XY|J!p5eTYfL9x_qCZjN2^0FlsA3Y_wZwRW8`%=lwO^ zzQ?TkZy8)dI?^pP;YWtSs_9QvhClo6Hr#eV|F?keuQU1nCv~Po!q-SwzI@YmcR&AW z!_2MKW8K=)VNV~Emgh85&R1XGr3fl4a{bKr z4B&?)kDV_S%o9Mp+_R+o>ql||?dSj5n*A)-|NcMVE~!YlT($q)EPv{y!f- zhz9LlpKKF_|JOT2q(>}dXstd|2Naq7`hPpt|K+RxA3k0@A_NCW>Z|%z^0fjlRe=)5 zW}<}*-R8s?N%|`NvTd@oe^0xs{2N>nM7mla?d}pomTy` zGEy9XfK&yJC^sA}gOf6$M4ay4KH-{H0a$_$tR||K@d4ZJoKAel`JBmN6YynaQplF-abBRt;+l}C3Al*9wOgB0HT5od1)n@ur;;h zFm#ejXvTu{3A90x+peB?adieB^aQ6^@Y?KS`CDdYw0!lUOvgoRQUko`zTvbP<_}6r zef#d}fXO-FiFjYES?#llq?{%Ex#yjhhQtrP)`c&$w1}+>QF@g+O}1OJ`TP4v2>Jdv?RW%&Q{Er@ffU5-UpsT3XoQ$c6(Q8`&d=BnelUTx2|V14uw*D(e_JxZR8diZL8hmc1H5GY{R8;j?zutI;N1a=0`ta& zi$#yU>Ckm*S!_+(h;~1(%aahkJM(TTpesLNHG43_801=iIG_4C9)ps*j1KiBsmQ00 z)6T~z^ut*r<`o@(MBp5(byotlg+i2(L-F zrOGE%OFj7;3`j0_$4#LPV^Z99Uu5#SM@G`W{z+poA{^TYMYEZ2;&2i)^q~mD+CZr9 zM$cD{RWB5G{F9@)lH~08+~v!GMbYoU#nLg^79RKj(}{GnS`!*;%i zV?kFpL&z^qCN`aYd#cg~e_^9#6IWt+u}qseFPpS~MUBkI>~@gK(M?~QTf6v8?*%By zq;W~WeGiUYM&*c?WX3+EDqzXVftQ4SQ{~SuTQ^N69^jhG(H{1va&6%9keuA@{T-0? zMh%zTF~rSnD;BvbdgpJWNwT80zfxssmF)KH3G^P1b@~`GdBsSXU%|cQqmJfcZv5J| z{XS z^e$!DfcZF2aI)HszzB3r3wJQ*+*QlgHdsX&e{qDyW;Q(dQ}+^IvqUqsz155Jyqs@n ztp4KoD)sj6?)(w6_SWMD{BSWfTH_Zam8EQG*i+zjJU@Q-!$Os^VJdxuJ&d~f^3aJ-B-?? z1;7SXd~)UGk&xJ*EJp^hrhwfD?)7SY@haQ+k)r#4(($+5Y+G(;t58dr9J!!(kocpa z+(OQi-*=fjq+8X06o-`#Dh|F+0ZYjRRux6_J8xezC~8=#Z-H1cU($OuhO$MC|$93L3irN!e?qPy}%M9qIg zGr=I$tZv6sR7Z>}KUdkHr-EqLuKf?siWJ}+8zmoLx=Wc)@2(VF-~7BsB!fp);^mEv zu~HE8p%$IPdD~}Yxa$R>2zoOE-^%d9{%)c_;>a!U{N`qT?;B`h-<{iWmNdvf|6Pxa@OD(6&5O59c035oS{us?TyTIREqd$C zbZGXm)(iYDi%jGVG}N{(YI4W7&S?oFh&7$J#xL34oz}}QelPyTUjrvc0O9K ze7y(g1lH5{7cR7o^qTW+2d#o2IIfIop_d_JqGh#`OF z>upx}_%U~4X#hEYl1F5`+0FW*K}BBPY$&($q5^tX{BoO#Ts%12;$5Gol}JD#)O~QQ2(OGk_pJ8l71ZaKin3ZKF0zWY#90PKKS|)=TPRnY&ge687;L#%O3jqG@*B0O}aB)f*H$c|2?+$1S@BL6~K!&pI`yn&C8h7hZTW*Kx5Z~)V zH*kBvvypM`go={PR#F09$p^H_{bHSC_=3Yu zVl~+Cd{ar>sTB_gFu1nG#V?SwC5koQyaA5mh~Xy1pg%vSFEZT407zZ5O10=kM95lK z`iF4nQA%~u%C*D8TajTfScZz+Hvr-(f}2L-`=Q6$Or$$MhF|;->y#7xQlnG8QtQng z`bTZ)Rkzc}n1FpeIABhT-r#0<8N0Y>O{!}E3$?YQH(|^6c(!N7zMRq}T}>D(qgU64 z6T~L=6tWY0xNW%DXqyGeZva$=4hw#R^Af`QwLnA^z}lD20Cu14yg$T?5Vpkte8u5h zA3{Z+W>_pC5WVGy2g~@MP0+V-tdrTzV9?Xkhpz~E!Lk2cmt{B5d7v+mqz`=9_Ug!l z;Sk4$!3UFXCktHOnOtakp3L{hoOW&xq)x$qOpFf?m;JVgdqZdtcz))BzGl=ptM!>^ zq0MsDj5PpyP5<^ST#$#oS+!m{smKKzT>I&9aC{{NTs%6F?@S2M~U?vo@a{rbP<3gg%jo`4{ z6vyj$THw)olfuavVOWolJ~sTVC%mcl*zjt9i6XjB;^+WxYiH+sQj+{bB){*n8-;xS z7eK$6RO<{w*+Z~`DO7@M$r2>X4rpD&R4+aa=%5nIbDjL`QD?U62E?$9}OQN z=K2K*o#c%{J@LM+?G*)k(O`A@*uwOy&frVN-RdPr=~ZQ1V`!1G&&;pGxr*kE4&XEw zU~-i$E|c6(CSy+v1Nx@p>Caa%#c*_r-?;6t_Bu7@sTafD!j>xG=c^r=M_@)0yA>-$ z7rpG{0Y~R;yyx_BwGY{}aQ+t)Ko>!Z+-AYpt@XBEO)cl;8;>;=Xw>qu0k5+Tc#uB3 zz%$b&sjrNhave9vv_e{&w@iPexz;**dPfgXG0bxgEgQVG3!{c!yqmk(fj{*jS(=sD zzvtE-gZj*dNR&HxJ@M?#Kf<%S^*1Vd?@E?vmyU0Mw7+LM_S@BOX*n3x+4cywK#rsV z2lHyr2QxJ_6?h(@>p?7#t-qEoqzMn#I<9}Cg%u}OH#PO4)_q;8ap~A|wjyrGD?Pvu zQssP_RfC~~qNZr)MJAsamXToH_3B9}_XhB5dF*HCxLIO?k#8<<^AHKox2CuqmS425#)2>@Hg>bEs@%_W+m4M$ zAa9Lj?1Z0oj@dU_Oh^Dr8XW#QUtSff5C_NGc|+e{?9v(thLpqY9Y0H>5txh* znf|2?euZ8tmp?3nakMr-;bw*NxZ8FZ_gpKku)e#y`+~jc3e=j}=b&{*L^%&#%($OUlh+DFYaKRx@=71Pz}Rn?`6*6a zqFo6vlA!AII=}d76pUguevckxEgNgHvN(V7S`EcDz4#0-cBRFGj;TcCaMrokD(Tl} zAd)5^2(C_btJ>9Z(J8YLMlZS+{1@5YHiORyyc`p%T0b$LV?P(T9j@!ViT~55(diOH zk|1CqYh5?*FJ7ylxRR6re;6RZN|Xe3r_+{Irm;ILB>ar(MCd0i7(C4UklsI>fd-O$pNUII{088v41s_&Esl{?z-v>a z(^w}1a3jX&F*-Ur2xG}f#R7AuwS6#9iloBF4PE(<_&?*g4ggyn4I?~QXsM2xzljMy zIuQu{zNV!`P3`}3YQLYh$NH>ZYusnc%p6b0M8y4KdulE{!+ z0N`+FP+%UKc~u$BI@kZu>{etz8xbL+G+*U}?%V$PUomd1dhsvG!gn;8LXw`Ip2fY? zAx)x8!6fqKNPeCep7!sWQy1pl%JvWgR9pWCMAr1}$2Qq}Q>(`ZW^kMjc66V*T>$ax zldY67{>*V^r%EI05YUrI#F*8l#lx$%Hh1Pd8ohLh3uQxP2N+ZDd%2*8aV;J@6 z?3Js6Mr&)%v~88;ZW9x+lJ2}4OHr(^rmv$03XLffKVKP5{w04#s26|}{cFI8H>GE^K438jH`-HL zv{5Bny(lJyVAtY2;SNkRJx>;6Dp$*%n^>vC@n4>AdfC^lP^|6aizu1azIv1CzV#_R zHq2??#!qpo{{|MD0yJ-<`nQ?Q=0ShoHa9ot&lWOLQ=gs!IB`Lslq4=Ht(6-uk{2Sr z0tOHYwXX)z(ua?hDK3k|FeJ(YE&#agkArUi?|c&GN);u0n)G_X3O;-S9(mL}*DJz^|AR zqkjG^u}I}~6(s8&$o}b>DWqCDqgk$+1tuuzwyNl=IlyoXjGUTlE_sQ~^oIg+lA-hZb1Gm~QO zd8+k53)8FMV3b$rl-$3Nt`Fz(tt*{wp?Bx+*TOl{6|7NyEjU0Z-Clp(Qh342D}eqqhq1*D;~gx7yFw zu?iuFZ%_J3Iu#K4#o^Vb&uUE+X$DDZM-u#728Q)Qbzkq~VyJm>S&thm)^#MT_}y@t zZE;C)7lq4ftxMoZ{K$(&>z=Q1bJ1bbPh8#awHgMFlaV&RdSC9v-1+uDAG!1)v=m79 zkiB?uJJsgHh0kgf1^6?#mNk`hV^o0g>C4@_1Dx0&^0ZzJwz7Z=%!1EsuU+|;hX=24 z3TQgKE}nafkgwji6HCJHbMXSBwOw)JjRfvHXUdc#(xaqh=97`J(Uz|^(|Mn!%tn|p z?+pJvG>WSuUWKB|{-k9aFU%5n1^d}D>p}DQD#s;HAgNS*GO)CSY-|j|jZ%;s)vNER z-d;=*^TJqabfn8w!{H`IH!@lc37NGx|80ZMX7IkJKh||>XxUlf2Yr1jiF_uK{w#=z z`15j%!;t{Nj_ve_z1Dw32%E`3+I+M`Cy6bdl7|%?09uZWL9+Rp0B|DjNP!yqWry|D z0y@iD=LqszJ^nudwes9?eo92-s*wPolk%?q#GX92o$zzGylwmM%)*9D5j$RNR#ui~ zIna=h4f@g;Pw*KY9{5es#RUt8t}RUYqwmlcJ&)gVa>`U9B6x+D>bZYR*uQ2b#$NtD zsQ-^592^}TRbaA8Q{1~o!W~Av1a$5aFtF-D-A7g=L=!Gcb1wY}!WGN^F*H&!Ff?l# zpLy?~>7Kh@f&arg9;9y|dsG3I_`|5O(DT^EO#4CO7n2-4szI$3%UUo>2?_J|LfFcHq;Hom~$jmTU%dK6C+#0vGdg< zd)B*pY-o6RUKYMi$Ita=z%9CRD&n>~+95rfWd?B%j&ZjFWP*nVZrn_Gf4@>7|3|^s zXy)|8^vbnid}iEEPEMpk__7a?-X$-zx{abrg(&VI?43_HT%Aw%T%d=0E=ESVGJ^(S z`^o!1yt12XMy%IUnz5UaQ&AakYIMEmeFflRK&}nQzJ2cO6x-EMw+IA+^GLl)$^0pk zS{)!Wa<&#_U5KM^#p@Z3S0659M+vf;{|$&LjvTTq8@~#v_5z=%msa6Q;AS8E zeu%kYL5q80dEut!6lQ;0*I$(U()2$cPV)2j>&%Y5lh#wS-%F>a^?HDMX}h}cUiI@r zs11ZAE-ydepweQCfSgv>fO9VEOU*AF8=X(dZ;n?q4xj`QxNCUK%KDYxY}%SG>Lylr z{QskIu`Ek|YjLM3(jCmU2g`r{`~v9()X8?=FT>TikVAr)9T3bJ0x8@3nUWcw%sBe>G{*DaAq+#Gs*x7&InW-W zt?!E`mz8DYzCRl*`glKenFT$&x{}CI{Rx1sQxzi53)c>T^vuoioqo(}xjwk;3Vz(5 z1HI*u_^n!^nU5cjmFqo?)YvAqS*=Ro+{_S+uoPl>2} zeN-1OHlaOIvX_p8CIgXu;MUQowZNSz8z=8WSU)`qxB(Gf^&s{IMuuW+BcJ-_m<|H6 zvV`SXFKZp+=U`EUuEt$A&A<(2xMdPgfP56~RRBmxD?2^hFVD%69JKpxg@ZU2&Kr6= zDOxh6<#;gb+yxOEw_4dD8#Sy-iOV!}6%loK5pXZ^qU$Q#ifeCTfarSE&0(QA`ze;R z??UTvPwWgENt82%Z#6J^hgIL`z@a=`r)lzv`ZXAkfF%^|pE=1{lBpJ&DQYV@%7=Voitm#p*?kyBG(s9DF= zZZEM1#qvcDxLdPDcOZEIRD)cWSP(oO>nY>{F=wySe3*9Wb^^F_XZyU8fbpg^PY^(! z1fI$adIB)7sI89acGwJ1-`5}T+-{_wKJQjb4tpZ#u=n&qjd9G!#+Aag}|%FPgCfFt>pudvn;bfWultDiBlsvEc^t z!8icG*oT&<+vWm~PQur(v@?vAyIk~IP*V`Sq0Igx_lEoTblZNXA!&2&!Lw&G&liT{ zupp3J0o!fC+Tc{C-)HW4*`->@0|yJ}-<+sJ)?LcwpjeHNoyxksA`Cu$kW43+M-R<7XB2BUF5=L`Uq#q9yGVf|hj%Qs{0~>X8>7*MzSO>56dsCil<$Pgd zJX<#Cn#|+(sR@jtGa=R1>}X`ucBO$#DNXv~DrHx|Z-+Zu>5-7l*;({{3ynLC8Ao~` z4mR>Rz|UuIT^xWYHDMW0At3gr5i>U?SD8Bz(Wzkv^3!~i<+3VS{=Tn0(_;ZJ6qk*S zjojY`Ko%b@PrUx;b>}wsU1$5O6I3H?X;J>oC0K5AiCWM?^qKxrJFgJR(LI;z>TiBTgKm z`z*EJFQ#)xJ9J}Cby{AR5R&`vncj;%d|(vW*znX`4^vi2IXl6dv!5;+-;^Y0ow=i) z?KjfX)vKH{AA0s%)Z1lH0FSias@9bg_ChI*S2kZ=1GqL2M@~6s*JoAxE#pT>Www}r zKp{ZvoR6Q3m5cHN^`ms2OzfEdag+?)v*%Fz5`g)E8UUw;<*xUDd%PT%fq|@BIKE!B zl{;^F;P zOU`IIwm6Oz&zW?&Xg@J&%yqw%GA?~-S1B~{BE(EV>?7Uz$$SSoK!OIP@cz06N*@ad zApg7ft>SP4xaIm};?>?ldOUq681PwafJ8BXbN=o| zgziuGX%RtYth3JsPCF5>7IH0DMTI;Lz7!VH8wc`+60Lz0KG-k>lLwIU@gWM9m%`Bv zeDBE#MkW-zHC1J(xX&WSB8(VUQqdVp`;}jKepg6=GgHmwxVYN4VN1%+)!4v~4f0ajvw~rQTqdOk&jW1IQK~NrmBfqsr z`FC+b8wbqt2t$Zy-x9JqUnGZj& z5#iy;BEHuJGO?;awS(W-=28{q)B5hJ(dv5`c&u;z#ys0E4aoe-Df0K}3G#lsV&D0?ylRwaiNraR76d9`%@+KL%)Jhc%z-lvb7Tb_Qg zr{xF%eWXChC44P>cbjJb+GJ%hZ200XIHnO_xf{OrbW&yh@OMBgudXa6`{5Sqe?DRi z&<#CQ(rmce9TvnlbZ5UhD&Jfd6aLS_ zgt9RHh~Z8)=mD|gI`i}#vIZlEb97|&hmshZgR@o$>hRYuc(%XvpFVDinGhXN!2c}K zCHJuqNmaBms4VQPOb&-#`5hF1O(wouwsqWHDS7hH(7fNs?6K)}Ar@~Ue9enC94XFj zU1SxK6V)GLG*P6}H)|`7^}=*xC@QA3g9_p-r{)5#$Z;O{9NmPTyXy7tS^y^Tlw6uu zkQoZZx1Kg!-@89dtccOfOi7J&u1WJ^=N!NssoD56LpJoT;g8TiPCX4ihBSyq>?U>g zwOeg8`itJ(n)_dH8UNMDex%xWPqWVU{}LZ?U)!7wx!yxGf*l(N4mXsi!w1;8Fz^Ft z>~~=xT`6Li38$%4`Wc;#y}TgIPxK0#xATVB`PesD3BkUwmmMuznGLtqr}XJ^?Igr0^ndEZV~pCt9t(r?e&y|81Y zy!Y!9AfH)A+IHh0*r=gZdgaUK9jyy3mX}1%wPQ}ZW0}q_kj%zS_m(DzB*k`ry7Rh- zS6lqr!$Gq7Jy}L6AR;DG^S%vBo^;kN0kDm!@ZdY2yS!Dt01?A3VbSaAPD)(VTn1FS z+SIs)S&caMi*w3MS$J)RU*U0mw7#8x+x#){OSQzZXs|KDZ4q;A!(QfB^*LcVQANQm$?3oNpj6lR`1!WMFL z`(eS{#q$Y*AoWd zS={Tta=aI@AxwcA#2Pfud( z^D2EzhBrOG(fW4wJizaU9kfmr_%M~7AZM+rg(t0MV{c35*>UtIz@%14r_GzObPl5v z)2U^f_n;8`cUKH*9TgqjeECRWvc5rU-8RN13SoJ=Y!#bWn*$?)9z^cQ14^ABszHLf zY9%Se@gB-To2vlXp5cJm#U6Q3u){o`X=cJ}v{ zT0CpeZk5{!%nk(xLaKxzcCQovXVr2h_H>=jQ5i6@qh!HJbn^H|mYqn6rP)l^iJ-8+ z_F)qOk^-K6g79_rZ(bw(S()M4*+ly-q?BsP4hh&sdsvw}-K3`INXC2``|~8`&t`nT zv3ona1`04JRIW5=kD~%{)UasiX)E*NN=?<&)p2Wl6hj0mcyxVUcAH>njs00%9<58$ zQ>5bpPKC+_54;C;?tvLl2)c{$VyzFrC|@!91~ZCmaPl%d z(>t)JY`UE|4rvsN+PE^!_7hnj15pK9Fpo2@#=7nMMI3p%PdfE%#*4o0GC!msIAWH$4{-TjmV1LyxJMf1cM%TJ__FstRbHL2?lMI8w%N`2qpVm5@cMrARs>a!!#&% z|KtQOdqP`*gM=Qg=*296*=?&^e;Ej?1r-!ErKo^TqAfU?K#-ZrKZ}#XM}(lK*v{>1 zrOIlvZM!4`*O!=2cksOJ4c~wpFME*Eic(*T!MY*9$}B_bozG_Vo!?L#%vtlM-%VSK zsyI8dVTzpj1#(Rvo<$qq>m%JmW!nKStbG}h55`7)3EU(mtK=y1ba(jlH*$dP6ehUj zD3o5iQdsybJixH$@oO+TqwM(jzzq!@7VVC^Ybd|FYGvTlHXAH4X@{<&?Vgy4iAksZ`7e6qN4nIDW8sAYlAI*=8Kw#*6 ztL|uE;cFVP$3lvX^@uMnR^R6iXW$%e9->>mf^Nf|O*n};QWdACHQlxb)woT31IUmu z$#z=T9z};N>pYs(mdvmF>?ktu%e^>Viuv z;Al0);IalwC((L3EJ-N1;gpnQUAH)RB7djBiI(}a*7WL&3#={LTHUwjli6{5omgwA zxAoedbrMa<8i*{Ed3W-vkYI1MPM_k55d~06IPbq(X7J>XKKzD8c-+)JWd|w@)qhm| z^vK!5cUo}QjZWYf`Gvh=<9x5r2)Nx`RYy}wdu(!UE*enmEtd3-F!SHF6r(rX(XkkyE_D=yFcy72szhDxHFU4G3plL))N#c{&%EGw&D~K+)oJ0T4@h! zbe3@l@*U^{eJ zeTRef8MAxV4SVG_Q^UIgNo6&zMXk{i3z_Fe)brGauL+p%lYn$ma1Sb;$A#@t%eM7V z!?yKj8=1Q?!HCHIRF9NO0$8tGFit(Mm);SZ05?3l2Ne@nFeV=|rd$lbh_y;$EJXJF zxa_|+5sFm57J<)~=Nmbg!s55mkIBBd1+1dX9P=aW} zjbd78HNu&dkmNB9M^p3o_PPj#YNt;}^Gek`Ew_YaiU6p-;2WuiOnG@UbUO9ER1QS3 z%C2;t`?>Npqlw)r722@4c3s2E1xJ@=-t}?JGV7(!%-HWqRB=&Xnj%C=2aefq(CT7^=kS``Q zMSI!tfL!wWy@7yQ>AJr%vz2Ou(rE=j#506+TkaVBpLY;MUycP7f4zfr16~;Z{oLxw zX@pneItt%YwgB&Cf5cf7ve&zuadzuj2Ag&PPA*Q>=M&$LE^hdU_S<^&n7>L=WJuH2 z#sl#UXGac)lIkFG#(ylPi7GiF%JSW^gWs6;+oQeu=-&PWQmnqqK9-EpL8Njq2JqM) zQlRGzI}U6&lC^{8Hn zGX(~7sb)p0jmJKI!*Ofd#-PqEr_SRZn_7iF7K|`f-M*a$sl+TW|}K@9b=CV zniTvP=Q+g7Ryi;Bl!|Tn6B@Ny;-7;?B#vpRZ28mQFvhH-mn+~=RY3`6)mrF_;Td+G zR<7{>o--lVh!N}T?3|s!V8OU9tB`VIKC7axE=5t|IEBf6#&ThCp|6mVH6=`yIez~Q zR)lDU>d+i65@8f9fK1=T*h8ny1yT5O2&5=|hkf*Ce0wUCK{JywTF6_7oWTJ7DyhH! zv8za4t40KxqW5NdpWS-j2?7)3o_n1fP}PX(>q7U>2Cvag#qN*aTriEEUY2=~%;HpJ zW`5^;SbN2oRE6xpu2SPTS)p1C7AGrw!bV@4?}rwXw5atd`ipUCfj1%liU_T>GbxipXY$`EJFCY;IzRBSNE}x*()1 zi!dgAo@6do#_1RG5o7jQUK5Hp0&o*4Kjw2LJ`Go^1+dW}1Xilxc_GeZ0&yFnDJ+ON%fZBh>$gSirv1Y7=KcQlo9`EE@@P_KT& zq=tI(ucD0hQnp%!zjUOS2-$^L>M1E|t#&LWG{dSx=;qw+gMORlUM?1Y*T4*VWsT zQ`Elq;qsR&MPH{?2r1we$hpj+_%XedCXF@!-}8dIaKG7hN;W?~I#+%>M<&?4Cm6EmP;}(EH`ipSbB4zTiJ|c`w zxTmH(?Kv5$>G#&s5Xbb}s)c}{W>T&ZHGDU<3yxp);ft%KR2bZIDJen9pB8O^#17%Oi5>GHQ znrsH*|ZJIZS92qQ9LUCh&use}<|3HgSpa zzu`r?A@ek4^@j5DvWB^?notsjDxS`0Jlo&>p6fcK^@k6=NagtVaWf)R=}gkmmOC3t z#yJ{tQlcc)hi2a%Q%Sa<6$ogSpQ<6;en_kt=jfI%0fC)=l~pS|uP{d@#gpvCp^Qnj zPt4!U(&TQAtB3_=qc(rxuU8BbKm||RPo_2YGhcH|Rr6q*DdQ1kd6~yFxu@D}+WqjpoA>>(VPkF*X_dN?|WWQ;aycNYf4 z5=&y-;Oz7bf<)BHU(Dk()|!Hg`Mz(GMbeNcVSVVMh=tq#l<$;vN1g8S(@635XCgp{ zsdb2|_c&pxb$m&T$nA5%82)YnoA6rN0R=2XB1%9TrX)(L zR__OZR=Lr+g=z_FVWEY~U4L(sQBqN9L-5tb6M zE6fjOr_cfj=D89vm?SA?@A#ylGf_SF5edP2xWlV&mg- z5Fa~0+?}hj=Sq?an29$=r`Ghz#w;i(ehJqTztF(nwytP%YvTtA;mn^G!&IT)7q}nC zfrk*kfH8eKm-Gv-)k5K)(LvEr`^0j+@}s2s-S^)|M1B#qQ9&eqc}(@j%IirQf$i2L z<=f;m5!S@xOkbl^JX~Q?;<9VbPid@v>(;%_G-4rE1IR<~sy_267CtfT27Q!xVM3S^ zvnBJynh_I3*qHY$PTu?m7Hp^KuTmY2R6||rA3G$*E0@Wsm9M&x-Do8@FA zQD8DZ?ey|NOXFOI88+WBlPVBJ7*x&w5H@Il>viD{?$+-)`bs}G5e@%=XpLUE2vIzK zjoU{gW>IEdn(FIJ>?bU=;%?r;6=#}d9A}2|{dd2<9z>^pCQk{SlWO${G6 z>Q(>ponlnnj=({?cVdcqJf1e1sqm{Jx&cKW*}{b5NH4=2_21EwZk8Mr2+6F#;^dz; z`@D?f@QW~JR5ZVt+VEyWB^bw{wCGy+cTVPN|7uBz)Iq9PVMSAe^Dbe2G9>t()OUWL z)XS46T!Jr?PiIOf_@u(Ax~jS@5)B%JW{V08;0-MfNpV|G=o)E_fM?ZbijgiVsOaj} zM#|(n;)dU=Ky&?3cm2+6FEu)DAe!3X)Q!Bs6Ke%}GAcGJo<7>IWn%Q8?1_aZ<$COK zfOfph1}+i-h8w&hO&aufujSXNlM*0k$}|^c2+2YetxAqB_(x8QT}C|eP^2iEc{#yH zZQ$ONsfTuN=RMT2F!P+O3oU=-PxO%q2)#3*L-ZXFZP)!AZ%Dk`ap(IML?R5CN#;uR zcqvjr(h?KXXostE+X1MswukPvvH5vn1$+432)6O5DJc~dHZZ)yx8T#KR}(*W>@E2- z+x3LwKjgXqm-AM*XdBGf#+_$=P_dyH%0CM)`qjK)E)b|8=5QG!o;NmurH|`@aKy(; z0-34sfjUEQH*AoB(<&E6;N!z)M*d$#9g7O&XQhynp|W0G9BrPI9i&L4-Z5sL&#c=` z^qX8@dFKs(Yb(FNo@S~)Jt0-4sm%e{2+B+VBo%jS8|HYcTCg3;wvGI0-+CXBAao6J zz$cS!@%`bOBW5aVC=yPsK7Q#PoMz3Y(4yOqkH=7NQFva#tZ+*0aYMG865t@t4Tg|w zvf#T3zmFy~xOAg$Jiu_!^tg9`aC2mc&pwC8HmZ6*?{fCda=>2h_Q)|-(+xUHkOu1N z<0lr(okdd3X2LjDrB8Gxr@qm}5rZuap5`{2P5`!3Rf_=jBhMWJq|UOYN|nTeb5xIL zI#p1k4|jU`T!q25iXS5CL*s|_Y5Q>Q<4m#pSNL7;eEg8>81F5v<;sh_z0(3=ad8(v zC!G_DyI{zWd0Eo{$ac5NEwz6ahU)C$LmwPtRbHKiT!dmAf+(y^yVv-F0@sMe1)|W< zVtm?l36g%~m|;glC6m5dFl)n1X5`;E_IxJGQ&N%F(&}z>ETXu&7td#^uC1Mzni^_* zURTNef_mT1{4d>&YMLA{ZBCRV_AW@IoGZ1jQi?UDd(8m__9Daahsdo?N#4$YFuAcu zQ@%b+#@v|9jVjJBIjEdrk!+iHEb(1DRd5y+D##vtRCc{!{ob1$5U@b|ip-n-R?_h{ z;cvmyMuc`IjRjkv! z2lfV3G+o-tKP*`VlnqV}H=wTB2yqa*n%=sluKAa+&31W|3UQ zc|*!=$<4vR$!mEN^m9yb*HO||x@<_PD_2mSGksoQG`_{8#1G5;p5505fAn$jz)=A# zz0am=ram3r>(A18VuAVyP{?UDXBNdTsg5Z~bpkI*;-p0YcLs13af(a~cBt;9+a=|f z>k~N!R9Wq>vXd?*_@_s&QZGM%L;(tS#vZTdj}|+miU+hht0d`1A{I0mtTa}@)&0@p zCUVwhNg{M8PXc&2GmvPc(e9&Cx7fh^a{;Y-9jrz}MtWEiES`D#N#w|ZBP4b|gYwRt z1l);E3+AX#4F15mu`H3z74wv8w97GsI;HPVdisSCp1Ihg(&Wl#(H-1 z{dr8_l_#h&>c8^Q1IM02fjcYnh0u@SEjiNzuUMccDqY{vv=?Ml`b7s?%}UtgC{K< zOLVX_m|9N2gUTzIeVitF*}X!lUhUGlBziYZc8kFt64O{|81OGH2}4t}f6AjiB1BM_ zGOG@Q(0g}J<@!gb+>W;Yb7VVDZ_m&C^IN$gk)^79d8a|jV*gviDm6o4ere*}<;I9B zle*{wo_S;bFKCvV{;|vTFOF5hMm_3Yt&&e{kcf_{zKo$x@{f@4ogq>*h@faC8e(e$ z4VaebFiyBzb2b@x_pgZGcANKnMf&tJw+|2iFV&fm1x9A+PL2{qFUxS-lryXdI!Vm) zRPc`h3!(L=wCUbCg-~O4%qD~kQnXxIf+bKZ)?EiqJ7xIYyhFUsN3~egdG1L;Z zq$HE$CDYtxk5lkNHWM;t%i|_H zN>UPhHT(5fJM1rA%y~nhXd}X2F0nUsmXf9M(-(z3No0W?LL+OPjV7MBtyIRJa1g7x z9~fU2PTJ&R#bQ(VFI{4|iMH0!6}j;wR^29KuCKg)T1yw#y*#Qo0GS6LJPl)B0l&x7 z^7{G$ZavKd;eb~lo9sKbEXwg78OJ;9gr`!GgtYAGbHM5%69=VB+l)W%X>@j2bXyA4 zV!rwsdrzUsgRkPjQQ6OaplVL|HW`nWi!x9JVtx>wqSc84rYY`^H|ZB&y`GesKEd$? z=z0?srt*8(l86?OY>hIwm@t@P65g}z>9r)41o)36YGpbqF=pWN)ehJ>i$UXNfLORY z*NUf~D`DRs2-M2RX@nAW?9YV?GuFWiH~aaWm%ml_HdTJqf{H5lh^P+b`0cx;Rk0H} zrX3mFxM;-r$gvqr!cBp&$H&J>+@A~ zX(lx6#l(cdoyX30L^^s!kPyZd<4hIEM4!%WfoJ;Fc)qu^A2`3CcVti(Gh9G?4rOzpug&HyL~pEo^a*k39V`vIe-kd6w_R*j<2?D+Yf2Jzhp zx13Z(@@bid*myEDIV(IsOV!1zKjLNf%hE`RNM^OY0frNj{Vqiu-frCu7^88$VO-H@ z;vsFery`8;(}Nk!nhXD>ygjb6Pc|~rN6di2JjTj2+0eMKUS>1Tq(})(<$Rox(z~U1!~!w7aH7cy|MuL%c3Mf!_Fg^wdDs7(Q#qVikD`wVH`IrEO^Y6P zwQ`=_VnD|2(dR2eDkilqbFxq$Ibhm?ck<&)Dw!7eI%fM}cF7g4Bk zuyI!?6T=KF?@?0_*&U|(ig=04qX+mj+)-0o~E} zcdP7T)g^(Jb`OwRl2L)d&Ly2nIx^>iI6KRgHc|;yacFX$i{@w8<~#1Yh@3i0rCy0{ zZ&b9fjM&OL)KtQOtVA?*K!S*3Q!MdbHWqFvh!;4QZ@qEleKrRm`Hd^Qjb^ z$}sMX0@?+A^W(4K4V15&qrb8)^5W*Gg6;B+^xsB%@JD<2iUl)PdyI1&*v(4??3~KH zc8iFT&hO7-^b4D7PgvbJX;a3epnuYW>K-Eu0Zhrf-m44JSaAe#bi_vLgo{l>Q1(4ge-p z#NCvmZK3k6@DFys(-jRcL#5%A=8l0jm7E)1pAKu*7pvGw~%+b{7$R z)rWVSOA@-*QShF${UVScBq)0QaScU!JjL7J$vO4PAY53mzZy&lbHR`@S>RyIda>C43;C%t0nzUd)_%$ zEWh5?_EDFbMnJMuPNJ;m+gwrwA#5)CIhw??)Qe+IA#iv{yq0~wuS|LtizqW0SE%EX z8_X?#dZ|Sr78asJh(;2Bn}ga@D8i<@&$K1n9RAhLX2V(8FQ)s<01^=~R+cN|5fDLP zQj&nJ{YjShkC!)lSgt}i;&NKS|NS8(2`i%w)$QB+XzC~=Veu>Iek6a4_YiyW{x@2!polw3AP%R1{^&;i-+cqIdB6cmhCi zY`$886s76U$*m%Yx>J)f9aWj>*-Gd1-!u&s%m76Wi*G@+f=V#6BFTx#vF|u20_k70 zwbo`QPkYcOwC;y>*inC(0^8>M*m`c(~DiPq<93!8C} zcUCD&fUdX!8x6tsN*GXa%LbBs(ZgeM97NR+4`6BFbO|MMi9+q?alh$f+?8{X`Va)- z=IR7Y@XSc>I@dfh^$O4LKPv_Z&EI~gx*c=0@rngYJ*BEklfoBLkeo(Cp|Yv5cH@Qg1*!Ve0}Yc^@rtC=GA*Hg zM@jJu#EH`bbb#8pH;fRFsDittz+309rqy%>+VoR{l40U`8lcVkNFjrcUNvgZ3$KRP z^_Fz|v|Inw{RY`ROVdq16+%C=QgnT??B*bZY2vT|&_-9&T~rv1$M3OhtiQwQ@kNzf zaq;rvqU)Jv4Fntxx&C=?w24}LNNEt7 z#Q>UWsgA5{Qy13mWCl)>Q+rNgbl>fgu4rsgGh|78|eIuu6V@nE0jwOQp=z+Ra4K=0O93 z5C{j&RT00_i7pP=>9?-oy7fDhRKgnwGQe>Kb;Jg5i}2(x4;JXUSDW5>QA$;P0h3;0 zpvs|0Ah0^a1MJRW;r`4LtRcxP?a!NJ5+L_+xrPAg|Ccp#aB7>Ah}ymjLDCe3FJKEO zRONW?=Ki7_kGFQMJ0h}c7Cf$_*p2G~HG+A=%)3$x;JC6$zc{qrq2rEPan#|$MElKe z7%sH1Z4^!yJpf;?g|nLN_()~IH^Lr`=I^tKsJQA#)9?Mx&Fh43yVXJ<`s-+cVUNi% z`?uu0_Z%zy*IPUY2b^_ng3x-@J$TIFAD^;~SPqa9Fdqm3xOh9x9A-)!yNKwt&f>1R zL+;ZPWK_i!Nt~q09F0S7S4u3LwHID=qQ!vIpE-8cM+LHi5Z7=e?Py|o_u=R)nvnP^ z9f%*b4yYE#pT=}z^hA1 zkgKrY;3IF}&4;nakAHtI?7k_}%tcOrD;(I-$**71l8=}lO3M|^{|Pl%`-b>Hp;M$P z>d({0h1F`=wKMmov#mbWPeA1C;1WAz200jBz{vpjT2wwW)cdD8YUhY-9-nYxN_@5U zF=oc)Ic*3J!@p=75CM9s!qOo0FQhNI_hi8vm!*K176oW>aUT~GzMxkAmb=Z8P9joK zjYmAjiodzinwQjxGT>YSn^Mo16S_f&lZvL6w_E=5ph8QE8#I15SA@D^@Rb=9edO&P zD>ZATet|5;!{R4fgd(}btfUQneVgsn??I4OgD3{4Jk+hr6a(ichU5pT1eh-8?@miS zK_sAV`SK~b#xa%&P^HR79B?~a`d`NMFC+a--cv7w+u@PdVP3SqT zKnlUYSq!j9IzuAoYWet=zgZVOn=TlmLSbaPtF0L`WNgT8q1ek#!86pEH|9J`d#jE= zN)frr(Ok(}kKh1F98_~Xadt8Yh0Kz11whg(0F???ysWItC+2||1t2-CvV)05gVfIZ zV!)iYS$_ilML3LfXTJJ{_h>u0PIacAqjo``+DKFmz?NmKKPJy2DoI?D8RDIl+Ycil zqD>es0QngpQ^7Mu(U8Jiv!Q%k2&4BQ2BnjN#`6~(C+1IBUE&qDVs#&wCS8%-m%f-8cR1Xqii5B=FQPLs@oBl790?1kFHV&5<0A>5(SUto-gk*fn8h|1~ z=7C2zR~wn<>5!Lft&%XOM}ZhpZ=xL*RO}}%&qn0wsDRuXj;{v46&jSt&FQ5;%|!g_ z&0Bn{lt^VH1Cke$Sa;HN`~dLG;3*$B-`1c+rPS#q&}$ujG4$2jf#0A`qdUmFJXIn4 zI^D5pZONa*dQhT@WA2z`rj|NlkC{vS64l?Xo&1p#&S7qjwk5YjPe;hL#aej&Ze@B1uD^$6Dud;gn2K^Sbo24o^SY!4t8(IZI{tF@PmGy|6>yNQ-=@W zRVV-p1PJb#UY(rnOCF5F+QcO!z*qGd6aD&(nKKw}Vofu07yMo$W<%@oqO~>QN$ZWh z#yya)%T3#W8~}#+=lM@I5nKdanyYBOIwVlI5wdwH>vi>JJ*Tx>XMNq| zeo&zi0ki&u*850(@p8@Y;>V^w!}jX}8Q8?-04>bwIP#%TcgFKTH#s^HIQH2a4J9$! zEjfwOe_5n*Zjz}2lmhbvr7VD!{!mxa9(z1hw>RMGf&!rUZB~NF zqrl$ZOHPVbqjf@ zeUS5&!B^F{c&4P|O!NcC?SkEh7JV5i`PVHTc1#|N*BMvMsL~86UuO~wXokoZW_&qT z{XxRG#8eoNCOgTDqV))BMueb<)VY!Z3Zcr%V#6(LdH`uVBahuQnFM{rZ^6%>-^jiq zs?#eYCmiSbJZOL;$}QU)1GvAzkOJ3LmbrloEo@V4;AoMaU0a@<+qvir2+0_vi0 zJ6sz8{&&2bm2?FJp$YcL*fk11BGUgTOcDrqOk-uM(#5h%W0OMt~U;W(18mf!vh6ZN}kap}W&W;F_ z&H4TP{NqnMAYE{Y=GlJCCj{2a1s(^hsRnc31y+e_e{v}Jwp66sBY10N@j~u&DXRd^ z+Pyjqcw$g10UVKW8BVu;Hb?;%G8QGW?=SGj=<-lwy3V&}UXL|d@!{sH6_r$fKhv0v zWNS(e$8a92(d&i2#z=#OX@Va0*#$`WM@bjkfk|>9$}y;(iB_Py23)Fz)?7}UJ}86L z)12x}qgVx@3UE3MoQE&Pa1CyF6Y1UZlB8YTSirXf%0ZDn8i&--VQ#FFvPI*1{HiN2 z#1)^zVvwTEk!2)#Vlsn&@C7|1;LZ8>$!uTCfcxTVqbnxQfR!Y&LyW#2}(_UF{V*-hGphipl(?-W3nfh!HzM ziT|ll-JxAp2V1hPX|dyq{=}Em;{^#;bxmO28y#)~0%wLD)Hto1cow;8r?nrmCzcY& zRhY+noj}+D*b@D!zph5CPgh9{9=qf?Xn>l{eZ3ZBL&UXu3Y=Vot9SM!!xiQrHhHOR@MR_zRlWj3+x5Uz{Q zc#o|PGjSUQCmY37yL=6Dzs^2fHmI)VDsREx31Mb;8CK+J2>o?-!M z=-L-lIOs?t4h+Ut`}=BG>|WEY;`t%-L|$#RjKWH5c0J|I07(grUZ#D=bXT>@vH`TZU>Egw?xf(oeGGXd`N zd;_X0Bpf`*yU2*ztdbgYYTGDfcjIq}ljKciBv%q%N7bk?S~(@l1>;aa$Rw)t*0}6N zDFNiN{;G@qh{}m#fPHcvM|g4f3|K+c4*MF=gYXQExObh0vG3ZR!yv2q&N)v@f8Ey) zS|p0h(-f5_Wc>6ZcHQ?6->%!$$fF~y>h-@4R&&7^fsiIDKgK*QeFX#t#u+#k;;(A; zR}%vagftpW-R$hG|I8>FQqhdvQ;w8!7}%_$`n(CZzi3M*W(t^v0rD7738heF2(;uB z{8Q4&{PfiD_K|Stuag`ox&U7t2D>Q}w{KKzCY0Rt;_4y~n%J#qdpdNhUOw=1mQIir zOFS^gR1LAJmu0;fkTAIwzJkx&Yav(uE2`wmOyDC#UNSU5TdF*~*S`2RIUreLyLPlF z2+c~?DtrIuc%6z4fW>PCw0biM$GnH5OchYk#AzSD=bPnrFf3#&35{;?#MFP`9}6Qf z<*q4Mn|caW``2B9@rvK6`-$$DeV#TSIl`ZtxEq$gDJspLT*O2W4Kk`|+2gkGXm#mh z)M;Nn|+ zi+t1*!1?w&4$?Osf=YFv&8wC^J+o|+?;Bq3NGetw{ht$0qGsOXCx^*!Maz$qc}x5$ zrXA1s9R1aO;JEoZ15_bO6P%@YBi~;*rmIf_W;1GJ8-$t@g=*th-w;_EO8!3D;2D2C zuAsnSeBH%$2avrTzX59;jCk4a%DWb#5qzsdAbYaoT2TaP-G$`}(>i2+ZeJpgHJr*w zcU|$ToJkR&p7354&2#931tSl|f(2M(^!^NYc5%60(sX~50XASe6AP-M#IBHCoFd0K zoNCdKpE%Q(C3>qgWbf?(8S~@_U!j5?gW$Kbdddo@?LHA-UR?ug8qgy^NCg+Q0g5vD z*7b;y2kLLUDdyDQ<7#L7*z?GoK0_SbKJH8E6xM z^^tjA)S8rWTKq@iE4?u0bs;9W(RF3^u2Z)sSMSIjsI@>xGHFbIx%;L$XaU(ZwIOng z=T$?M9|!6n0DME-j9DtewL!G({OhDkMc1Xh)~luz>MpTy59~k>(5Cr{HqGa@`k8~O zWEV1y)A;qTR@brmNQstT@LTs`1D``)!K9bE^H1@=gCmbrT7Wzg)7tJ!wF3|5Ba3`)j|Nd-ZM(CByY=l&Ae zxC}{crGR^giN3>p5VJFi`~6M9q5&O=NCK|!H1}rPclLH5vbY4$f?|lwy;v*bqi4`{ zfP$ql=osvk-Vxg`Pmctccio~C6zKUmQF3hdTjBA-9V(K}KE|%rqN`|e0PYfy@q`Wm zpVSo6o~|djDOcS{Ad;? z!4;$`MM-1c#z;?RSs^WkYm83TAHwd?_fUOxnWa(xX_ZR=*CNnQWt?_>#$=z*m$yvA zi}^XIGBL9tVG@W(J(9$gAwyz6Hp-AW?+m0oL7>myTlbew+hH3pvgrw4-2r5E=#H_dq(P^jA zTp7V*PPcxC;5wE#yl&@4>f-+*k#&KGzSLrH9qaqyO;2e0(bwpomkaUm@qf#yTpnbGtk$2aVEJlMU2*kSt4>_CKR$r{qROZ;v} zlxwio?7ItfK)Y3kC0EsVlY+M55N#}jrAd@W5H+~DAm`y6>(@UEtNC^Cg-}me*?2dso zK$0Z|119g=C<@6Lj4w>2?hl$WXq?=-A9&httKBpCw9*hTyO>?f{--tLMT3g4oy@gh z$y(ZQ<(ls9{#ZVVL9Lz&k2Tt>g@0qg`#4Vr$ zbeful0TG^9;!t4*^z4|KKX2LD9;XlcD!afCXR%-#SD-frf*A0NbhxCh%|d9*W#8&J zxq3grD5i?X&?pjo7=NW?CHEMiKWS#kMD-eP;Dzu!+Nuw@6o%ZX?30K`OF5Q`8nKqawQKLPP4%k5x;)h zcWP=TTB+(_xhe4ZZn%uy<O zH-%%Z_$3-POUniW1k6cEl-I<>pVCr1#rsJ5rH`Z=#627Or9Zvnd?m2c&Ca|y*Hgb( zuW__DJRz~r%EfhlZ*bV%V;AQK&6}}3UNtc?#C1GmF1o<9&2!v|Txon+_=?j&0QPiE zVbt+|6QtZzvB(}z9V{0cp}zyoFYoQrCVVLvV}*x0#MQC(^=$SH-g+aBH8BrQ+EFR( zz`)?`jPrAvjr)BQ#7E948I=UKagxr=($e^F!N71cldS^|&~Hvwu_&u){~TOYx~9^0 zi)&EWqhGV|l|4Hg}Y_ghpt z_H$Hled+du?d<7wM&#$5|IRbyKkSR#m846_K)BQTcF6+Kd^U03Tk`x%c2!DToPuU} z*nKa+qJAxz>gI~AHN13x=_E)tDj{Q3=lMZ2-Ti?9f|;hLB%?9v&6CqH!=a&((fP*n z%`2e5*#_PAJl1?pO*~ljnk{=;=$ecPMHrd`-jDYci-$`NgC!6{$vkhq^E6r1pDs|{ z9t>yv&ALA}cx+@rz-4X5ABlV?fPlp4@ZTv?U4c783fOFI*LaARmuMd_?8m#$O)V{R ztBX_R$orzZZEUx-objukV)x7-92^~OAHy=Fc)=*PuML`^IDFpmTU!c8&S2a-wMOIL z6WQ^N_y}CKSNW4~e-k0E$daQGqxob!ACSc&V+kbG!GEunnBgY!Ct9`V?JZ<5jfgB4U(g~@^VJKLY`e6wu1eR@_~)<6&vLUP45 z<}10wQseF}7DOl}NA!ClQM@{C8k)!ItKIWknMQ7&jYp@2MfI4~<9V&l^ktU*jOWuE z1Mn0bp-ELqUbi2H+8*Et7(y<+9=9W28UxKPMPWa|KtjreYYy?fvx)tGJNe4F_Eis& zw#Ege&cnbgCQn{)RE`K_`N?L2t5#i8Q;1K8K)TnJ+0#kW>Xq#%+1B9&Y1`=VV17#r z?)Nn!5ysr?*JZPVd(J8-uu%2)Z=9pkqxh%iY(uem0xU|Kygz-2TlzNZby7p;q4)a^ zygTI2x@M7Iu-k6dBA#LzFh(K4+y#IiT@S>qTQ`}gz1%3SpEhNS)f--aufCWZ zEJYLe5%IeJpZVM`qs|z<-X#yX#HwJl4o#U&zEZsz7$nm?{zaDYCwh>UtS$39+0!jG zE-tR2i3#M%N?zE(VhXshzKV*$peCD~`+i*j&tvBmUh{M7+uLQLpr$57398he*KgLQ3(%vtn=%y%`z4?x zU98m-e0QgQ;qst~AN;QsyF;aEUD$30Z-OYWX4mv>LnlP0K7I9ggR0IeoX&HzNKrOJ zTwR?qEDVua>jB-%>#rUHQN{D&V(nSe>H{*{vKo?JcomFvc3n!pcfO-R zWInIt7@3$5A@cVh#AjP|&(H+22w1qB>D_O{mhg~q*h)?MA|)m!nda*CXujP-Bm62b zoF4c9u51F+t-BW`R|S-mwnmy_yKS09=rOrBTfy-P&PGAFVL*5kWas>M2qLBnxc4M? zFaqkFKD3LQKHyb=xAhKYfQ-5M)^F!8V8&_N-qF!#c|}EGXkmW&SfM$2aVY#Z9&5kp zR-QQUTu-zQoZQ-Kk}`CDKef31=-rr_I>^m4#;}#n$*m6MadXNt!@hK^0n_vi7?UU{ zXbhfPTe`C4UwiTeE-d!<4GAc{dE7<)&oIp&{5kld^58l%_COg29{dZzd<%0YATd4l z#Lly1OahHAK^U51{POR$w6s^WDiAv9zjCHQLAL)*s{@JKvUTUC)1;b8U?~|R$|Em6 zQXs0Z5`O}<@PDU0f-iybkXQ+JUfGNi#V11#xs-HME{Z!i_{hnLbh>UYJ2^Gi=Lb&< zBFsf&D?cH$A_uK9)%E&+=lX%EZ|wSGZ?MZ6z^HA9Yh*BZ;&DQo808Zt!q=1Eyv))D z$46RVXkbnuWfmAEJs4!?qS?^7MvQ{AfqY}zz|)^KVI2`DNB-l}eCU5(_@6155cuAo zbFwKDhw_M6NbaR(9UGgq?dGlX>b5Q47B!33I~#rYsT%uqaq?!IvYc_n{G3uSo~x0C8Uk%8jLf43(h zXEM$4Zl|{^VTcoa6~2n<~z&ACDQSN*0ibSWLv5R^ds2U-f-MbALs-14p1s)Gle}7>i zLV0CsjnLWsZh8cfaO~j%2Bm_+pqe5Tc^#b)PwbeN8G!%#3|L!UOb73t=ym<4?b$X1 zFrcq%1CnWKZqx2dmBpLI+U7tf#S^=^lPFV$FpPA!t%6C*_> zqoZa?GaCzVn2^Mt|M#Q8OBY}<$F%3>=7OQt9rmMbePaV~;CO)hti(NWvG$koQ)MvL zi{{D!bUIHmdB6rA@2^loMBd&!el)isBVvMA!e!3?-!+3^ ziR{hC3|~fEua++!_Gj?j_Tz-Bc|Ia$kfOm|4z_-z#rXCOS}_ba0=QMK!Bx_CCmRl& zZ()4;Aq>gUep}Z8FS%P>BshzT74MmW9M~C@U6?rtMfdLkXNVj!hA%XaHbnm9w$f}_bVxVpD{vYxAqoreo*3VU2#4d`y0OAYXWBmAg+U}rkC2&|*df^keggcdv}93Yn81m!rwVoGJ-p(ht$U-S zH13F7*XujG=>7k!ltGuc?+m>kA)YQ}*oE(S)zr0-N__BUGIzej_zDGnw?*!bbe-#GLFI~?qX7-zM>)%zI zdp>MD>u;B0J7}5QlxHn@TqC<&jQ0k0-kf3h;gJmtj z%TP6dfTe{9-^bHQa<5Kr{w%$MfG=%CS5i`~GyV`ImaB6IuBMof=cSHcmZDeqh4+tDbG`_wwLJ^nNo@JFda5vsoMfIOV?L zeg1l<=X#REcoBq&j{cQraeDdwcan|pFDE4g$x@XI;Q32 z86Vx$9lt}m_Gq;F{uVf;3 zt8-#usr6Q?a5%85OKtdXr<2mPeJ`{{RjsjuMhc7pQ2?FB9ZN|miR<_aK)A3lzK;_a z|L6UA_rTddb$&ipVP>oQT3#Ct`3A}EM3;t!rlbqm1o3F8A%xCzcmJ`HPFOyX`)6|4 z{w#yRRqEe!lAlJFOXcX&lLci(Mjc)KiBiTA5`!;yoK~2kNl&s*t;mQNqpy91Y^1Fr z`afP8li9ncH^U|P)22~uLIQ)yh}7Bn*^h4Kz5RU-m-2YN$6IYMI7O?Wl`K?i%%#svz-S;dv$sY@ zB(Vu`my1yJVBUY0U|^NQDUNBf)4(Mn8rtVI-}{8OX8)dDeR?W#>fB!yr<%@!u%AY7 z_8N|UzfnS<*bb)JGN@8-IPKZ5e*)EuW+SS`6+YB5H1rP}b`1?@$@>kbc^Y7tv+)th zIk=SNA17f_X`S>!HZ>&Ixl*z`0zZgTd_ z;9EHdZH>-N%iPyzRGN;%HIJ1U$ab7s50Ag{lUO}^)av9}4aqa^4iav*uAgJdypFBW zHSfj0e3`tfNDzRHqThKPw)(I&ds@Fd)Z&8F8Hi|fxNy1Tv{<4_-7+fVk#}`8Kg{&( z?qibf>SL1O>JuLB6yJP{J#HHN{|hgCx&%h~kE!cNnirI9{KQD#&I7Zu;zw6zwy*F! z|9DDB4kq$!XB(tHUzB8IRaM2P=zMD!z2A{0N7LWcu=%2*;ikM8QHVWSlW~V2jab9| zJeBjX-)(Z@@}>UvT&FuGdSSGMry_L7vh_MghZxlbUY@=i+24I$wlyqFR|)QJVV=VM`@40S`|(Dwx~`VqYNi`< z%-~bk?a*HbPA@p!3eFK*6_h-ww4teAF<5M+!TA~A(kqmd(9qFO7WQq@m8H9xl&UOD z?2Iis=?jW@`hX{VY1_?`BX7_KWDZxYjnREAjl;K=d@ZI4eUJ&kRj8u<+W$8LzNsIp zo>Q|lBE~;-+7_SXMj6^K0{2-&0dy_Rwkjan`|0Xn#bd_muynq=W_J0z-VV56+V}sX z>@CBp?7Fs53qe}CQ5vLMx;vz#ySuwox+SE$K|*rT9U|S`-QD#~?&tP--@X6rZ~yV& zfaP_~HAkOwj&pe5PC$;`I9>0`L}hFDzkMiOyM44})4ra;?@MrJ(A1)Htf~S`2M6w3 zx?EOBfQ9t=QsQpOW&rQQn-Gj90WN~g={T(nqe&Sxb+up9dmg*>i|f$Ni~V_4O@1pY zdaOm-ad#T-m67^gkI zF~1~#nXmo0Fki{cGBi35^@W`DhxObwDr<>nTurX+c^F%CLQ1=D&v;++&FjK0O}=+a zd0CBNf0naqwyQgkFLn~_#Rq@u4VLU1-!g)Nn}~=B&UWqQ~(E?bS$V!leqf#SZ&Hu6|A48wTuz1kjbA_ITvZ zbH1JQ#7DkvXS-{ewo3PSd8@?>?R}5C_>Q;vOR4v@q{qG_L;<)0AgqyHFMB&UlYHK( z-SX-QBUWoMso#Z#WL7oT_E`R{s7Q}LHd8%(i;}s3(f5qj`hK`{1OL7lXJe2H|r5>g6iZc3>& zgw87|4|e6&Y*Ne$lMj#fAKinfdj)^#dWCwpYSU zU7dneh2AwI&trnRO06DL3O;_rL#gnqm(M}nf!MNfxd75y=h}TZi2Z4Cn(k??bdh>} z^<=f3{pnPb)CaPHIWG zs#kXkiim{bB1RLG5MI5-1I@ifbwO$z!&CpNSNA-2r*I7L#0j?85$5--(?5~*ju_H* z5%Cx-XB3V4;=76xMgf(2kM0Oa8e)F@I0C#V&yAxK>HhTuD<00-cRzH`8e>KNEdGMP6fvLR<1p-+oE1qH+>5kRIxDThd zZd=SM?L!nK?PW^ZxdsRD&WEXl$t(1yo`xO)5m%ZU_4hy*3X|I zw};vuHC?)oV&dY4JC)lt+>{^-1vN+T;G|C`#S_k;tNS)mEC#(7W0hMY!geixI21?0 zuP{-i-VGg4R%|tnwfs#q7-}ej{~&qaq2@{zZ$O%F4AaOj&u;IZy?XH#c<&v|W}Ci2 z%>^Oub|_`7PR!;LC5)ysqTX2AjFRfuwEGj~?kdpdCBuTWlQ{nKs!uviZ>Q2UG>!gi z^V}sHFb@KZrn?c_-RdeoJvR)GW_e?V%dK}75L{SEt3M^XGjU$n?w&M z-H)sNY+8iBJX1`t&gWcDU2Y1zpK$S)V2BwAY1*MxkL(-Q?((p4B85f_)tYOKP3VjODUmZ*+QOtrlsf6b24qlku%6^~u#hrGFv z{&P5=;%L(S0SxPD2cBcG(Od6e?qj^vy>ixZ%DSYfsg=m2BVK^{XDokyaZ_yfi#>r+ zkV=_}OG|efFe=Eab%C>kAmOZ6cV389km$$+ze2>i(Z7RxRwx#44w{(`M7n)B- z;0TjFuiJ+|Ew-$|<$e0BB_nQ1={$d*rOzW9j?0_6&17^0aert7F#{KsTw3qM5A$MX z0_kDZ>fmYv^1F91&*L|;QD364r{{5N&Ti$YvVreneJR@VfDF+2X8cdlqX_3#YP{O2rO)d}E zDLy*%AY_FSusxTR*ul2^04jPchsbhu>ucsmj~i9c6?u4Rf9Q#HG(9*M+Nrlac@L1Z z)1V|P-Kjviz1a#}>CyinJ_Z;6O(KtP@3-7mNp{Vq2Wpz z!E=W^cz0T0KM`^JaDxdl($l==gj;Y%$#-Da$J(C;pLb?(XAL z0{87XuPl#;b$M=PNw@1kkLZwNih9!#i&f3~X(cNgAWlz{sjl!i-u3&aYNG! zM0jfMEPG@`KNtI9NvSmMi0M;W-YiQ$WI}uiBct5sOAa|{yG_rIrm~QZZh7y5fPrQ1 za%72yt(DY200m!16v$8*jCIWQMuDN>;)qF#tvBvzoQ?UR8(_0ZOQZmx)fW}exeOWQK??d2hHi7C0|;pX6<0af6LDf9b{N2nYue*z6;*W z@Z8t&iHWY|{bjQ$o;%vt-`~$&F12%=cdT-qwcLA}foa|Yn9D~!y|0{{ozp3(f-^}7 zzpkyO7Yw^}Bw5oe8}r`3)w0I)*L@ns`2h|y!}Ol*SVF{z45TM@B^A!j2wB~sf=Y@Y zua=3679(MZnOU|$c@uC9eOEI_pr|A~=?E}SEo*3h+OLBDMmMZbFpF)Ft?2^Y%xNFg zs&7H9+VzC@+#kx8n=2zIDP;i^O|#yq!tGqGQo#T*HE5e@^Ox8D)44k(1$EoxXqfKS z*!Vc3!xRi_iMFJb77r*CJ63VdtE!$Hu%{-CQ&LJ%5jEgu{Qf`in%+_5JAh_+)V!V_ z+HPz6W>B~O79+%OW~R;yZZ9V{mqC95PlJ~2tIij6Yr59WU4A8{LgT*7U+IBjByA^# zA;(TmpzzJ=R%Ea{Q&CjXoljI68z&$k;B}16`FEfOcsd@!MaC2IHlU#$AcIuLw+c7N z>o;%3dvLvLeZ`#dX$$Wx-}?WJuzB2h?3pnyoVOEZQ3XvW_hZ0S7)j@?eu6Gj*~7a8 znBd=}8OD|f)YmEs6`S#CvokYS-p%)`dqW&C*{nC>y zuc0C3EXx*9vH!p7L1dpH@TuymD*ZB&IzuclH3)IR!~6|^6BaLYS=Hk|x+7vIsQSL( zkEK(WdbcDhr&yRbnEmS)*p5HJU_0CzK}PgjE(@C_7gmX-%;}tJXV-jKR-X~;f0p}x z0NRIa$i<*~dsEwGyT%Zs0$W%vO4#?-Y|b}`nT@6FZl5$JCWgUij~xupko>=nEU68A zxqqW5c-v+Oz!L6G(;gs`)435_gQ|JEhy>Z-%*TZ*9MUUkYf4E0`~RbCW)lC`n1sAX z9r2Zv1|8YJ5c`HKCm#%`&e>7Zwulygox$P?W zSt7+M7cZ8@#dS~oMqQlO?F2-nx8#+Tdxvz1>67}=(Bp>Y=cTzyOZgW~6bQlwU_x3|U zsj1K2RPhkE%!SZprRQ(i)W7yhi(u1I7Xq&Uc$*&-fQ8s=vPlOU7sXPDEjn-z|+Bk z7hyhDjPVT(8eaEFk2$rqP@tAAE?yn(-!?yrmk>EMp8CrlN z+Ctc}x%;sg+m-tBhu}=)5aF*639aB@SLl&}b3a}a(Loxzwty6@A(>S=B&GAS$jPvk z^M$c9_>Bh)QRL9F?&zU+>pOgoV(_9|>2*l+JvUD?VLScnBHC47II^tW*WBFmJzsR! zhnD}Z@%zQ6r?WG5A%Pq8sw(mtXJca{4F=pzjR>1{>MQUCpW!edKJj#c1fv6vPb&et z4^BP``LarOrRsEEXfDvkHZ>-@aPjEe&Q!ZH4XeboW$J~tJC8rXbKtNqF;`Aoxz{%+ znjxVtCMLGbdr?bom?AOPHoq|?w2!)N`8D>){aYO;P8$q^tQl%wbpO}@C#v4wx5o-@2=hqDjF+sQp`#L3jswyVu653FQB$5Kn? z^Zd}{8D{cekISrFjKPKOXP`wN6;H?4?XT&Z$VvbD2J=#qb$70AxI)wq;MhKimKX6Y0bD^Y&hIIL$r zR6{Vx5xX9{>dqi>T(FbsT7op&lP}vm8nTIGc0<S=Bhs~UXCp_?`@fy+NzfABv$0W>L)-hft->Yq2@T8+2y(nVPFv;6 zs-OsHyB>F;3i;9zkiG$#K)69F!-zmNmO}*mo%yvs`IF94Hj3cNa!tzCFqRs3RT%{Vw zSQ??s4lC#wLO@gEuTm8!R2ILfk$|U>=_70l+>Pf(1V3Je`&=P0>pIQQ*W=X$+uQzF z&x%)k+M32Dkr!cvj6f_unURcjS--<@7|Gy>4=%i3$@q%>c9^heo8V+qrcEi?2P1f8 zzC7+iNj+|qC>N;n9lCcq6ME4{e+m93)^kH+VsProw-1WOt=bOd@j*uHE zIrKgP;}s);!R<#H#bOLtx}I@!$#veX};AB}0YzwZc$VPUguNvZ8t8=~nqb1r8Et*;5xeI4xOcY$Z}{&A@`nw{AzzXw-@&{envVGA1W%^D8(!Q7lD)x#oOaqr(Nk7m$i zcdZ~_`aLMYlcuTZH*K0{cbI&mJuQ?|%`_sc9a`HGyeAt=S8AXTAH?d!Aq}bYTPKh}PHyk+E69+r)j~)?TE?_XAz{-JtWT za9RjBgexRgq~FLY?oJ%F73AL?mnr&aq1EW6vU7aIMA?>|=-i~*6XJsEGm*^;p<~){ z)o2W4aQHW}-!@k7{_cNgJs`9)OrfcMiDbfB!ZI)T=SbcHo6_VfebYU{tKHd~xe`6b zW$-!s5tt%V0uI)_Ok-JYH)c8S-pDlZgT6QHu;oJ@{2Z*~L$zhOgSY!|<9b~yPsw(0 zX1ZFRffU|XU{A4~yB{mPpxqpf;B!9H7$pP#G$|~Ji%{G6A`E(X`GC0Z-p3@BI`J;- z{?nG-nu$n!`8htG5ls^5CFgS&^H!vWDl3O!dh+7fT7Rz6Jh2aBxg9KLBdoPwzSfaE zMc#iy;%yy;MrwO+KQ*vL7G+lP{i81Xwi5c39n-c7#3y%B`LdTG0gqL}I$09P++7=K}rvQ{|&J=$p&5AKtmUDV?xX=G2;MR=?$D4SbAK zKrbhYXp4=6<@@tXFIo6wP|}Zog803`5EKrf%hB7S&mX2$Rnz&@)j7+irqQr@?Ekrx zAWnkPMGp@gU!)C|cS}U?J}6EcG`shYm(HDZl8KTStPe;SyA(6k`mS~pO||P^j%VxH z&Di`{i{y1iAqznGGGiP&Qfn$;WRbo*waYNP_Pe1-JN__u02@S0S8 zB|>7ou?c^ETYCocS;9TcV7xe|iN|xATZb}fdiJ&Mv&St?U_h294}r2Rt+4W7M`Y4- zcuuR@3{wg+R0>$NcS1FdaNN1N<*L83Ysy@bDRPCF`A?zVR5>AUpS|6^(C?KYH&kIT z%ERx+1Zqq=uow?p$rq?1i)>y8y}0l?aY0RVNoVxSICMo#ih=A;BIk)$Mcb)sr^las zZOqA+2MF}$y%a;B28W3DR858IJ(%fKW%J9pYrUKt(YN(K075zknsCxi;e|Qzwf+>L zUm0P1g1G)AsAdQ0r;YPMobEUKSW+^$g`J^2X7BY^VC-@uI%5;ATC%z;g<|Q0zK8-x zk*%b(G+!Puk%J4vTzP?G;}EwF2r;PT{eL_gx|`rgj4L9Zz~6#+U3R5Lf2}7$su)Ei zdC?Ny(5E%YqDr&YhvnQ>4eTfN&x%%@Dwm9%QK%rC@Ai!CGeO*`^dJ@%z|7JD$xAhX zJOY#~yH31-T0jon?E=7GT{atr%Tzt2#f4EZ8NxxAnY!P3bg_%t>gqVnFyQmV zZJ=S6DKESq^T0D%9hLI)tofS%)(A9#=$HZepGTFTW+-xtEby*GBGzA9wY%8f%WiJmn(1b~6);V(# zB!fdj-?ZDV86sO)bbJ2_(hLl;`@CESj+r>+vfYe0z&hatLXsPh=>=wpM?`96I zNu^L2S&-h$)jZpin3MWsi80cRMBG@265apJ`IO*-r{QRf^D`RoQ9x$xnp)4kxK6kr z7EgQ4nY(`OHe`rq@KQOsZ3v-#@_3o^Uxf-@33e+*LGvAtGX;t2$6HKj-J14_8}G?B ziLGWjLobHC7j9LGk?uLiT&C)kb&9dShDB>N}05&tb!1|7AZ)fg;jST*0X$}6Bg z_TAij9e6M4V$gZH^O><~x%QtoG_Fa%;Nfi-2`8bUNdYIpQAu&K!t3;(i#5VWw=>;t zq`+}WXd#6L^C6%xxW1tz_rbpImt6*$#ZZtp9_PX?kzba==Lu&N@!_ph@a`2N^YGoq zj8{)8)3jyi)dsmO`etT+P)5Z$9Zk3Q(HY& z`5^m5dth`M9TYw=cYPSj~$LWgW z{R#i4s`#=^L!Chx(TENkB+7TYZNpO|3iJ*s`I7;9pM$Qy;i*-mgd@}ko;MJxC=_D= z$>}xmm9|4$CKU8!WR#3(0Q&|4Cc>uh7g{QP$T6%eU09$KM6SpS&Cq!OnHzRD7omko zmTQk&UG+hG)QS+C$gkYGo_ZIQZG9^Gj}}0KXt2mOkWltd-hLeOnKlLT4q+jNI?tbM zWxq?^p8ExNIMLWWmbWLXiW#13^Psp_8?*{m2C~U0e)s5he;OwAigy1J)2j>Sp$f=X zmAHs_Ua_4(A&in9t4;{yYY9H|(A|5*kT>pDub;w=JtInj+LsL6D|2-d_f2k)2FNy4 zNs%#o=P#CTS|k*pX)=TrQ3mlT$V$^#et;mGm=I6wcSo%d8JfI_Rm3byea7v+1M<+a zTvwYl!|&Xd)TUVh&qx;aMVnbgIitQ#B)O1C+!k6gH`nG49+D3Z=>?Z0%luj9Drq+_2J4u!JGR9_c7BHJhZ$`UE$`rFmT*y?zkyu@6$F$G9@bfL+=|MMfv1un7QAW#BiB>Ph_>h&N9mwf%*var@pXa*~aftBP@tI@z+UnIx3>_fiIC4L~D zT_nSUBmn#hcz5aZ?~Dyt#{3ryvu0nBt7PdmhHg?kIcTH%1s+HhC>k1W&e#~?L9hgM zU287l-gE(bh@D)&krd(w5X~}hL3%rUwNvlV1gV$x+(U|0Wb0J!e`mgfg(m!-An2`y zi7=e+){O1u5i))E7Uk5WF z+9`c_Oe?lT_}m?L{Gm1BJ!Y+{@hR|%!u9t-eH`ak=>~n6I=9vY-pwj|nYAPN5m<@un(9x28w=+S{DN-{`DsbA625&!keBlaZ3)3@!v3xjk2j zyZE)Mon>?84a9NfcW;}fTzo#RN^FE#70GOHrL(QcJ>rbAHTleRSVr2l&Doi)AZ6nN zk%ekdi$iurz>F~lC{mWN4KX-E>;fGe(!BVj<$jlxWZFE88Hl7}1P|SH;mj<~OB6-0 zATg1LWp4#<_lQ%4Z_PBN<+4p6vro+(p3_-kQ=)0I_?+3c(@%%Hr64*ESLyTO@0!Dm zK?o2Fw@g}(un{Ta$cluL-C{@7|-^2jDlss6`VAuJ;qe76UCFRpMaFy=1d!;z}hmTCO&ncuk$nMo%H zWX5z}a!ed%ANU#GMvMh6&!yY0}nYoVAjV z=(}OR)O-6C8x7%F&~~O6k|1Wx1`5zD$LZV(9@>go{)13kASu)@CUI%8Ik+ZX=9Zn+;twhUP!H| z!_LizEgA9fpX1<7SjRhsGIe)`+y4Mbp7^B;9`k2NZ?86?!|e`01Ha?hiCphlGI0v$ zgE3%+>nuL$Lb^ zS6X-%xpqUM%YF{l zi{5Rl_QujA)(0IOx1;n!-*gp|epI6;p|TM*20TV6fP~2kxUqEHS3Bwv*V;en(3IZm zkBE(k#_C^?l&>p=U=tJMou~9OH{Q^ewJfEM$#_)$1AhMp>a_N{hkLl)eDoQNyF!kS zi|a)?ym9ujnT)t`WQ<1=1ev^nEOwY#8OX^4x+XuP^6p^GtzT!u(~u1f`CH4r1hr{u zTo4m)NZYkS^!Y43{2jDZenLCT7wMR_XV)>|)O8x} z0sd!3+44yVI-oD3rK04$P7Og_8_7-vr8s(v9r5r|`c)F**Fxlc%M5#c>67;TAOl%^ z!QmfFzjED8w5!k$V;j%*N_aQ$kVq=YKVkW-&~QDo-x zF~kl~Rk2bEhD2ja0xM;v)d;fIZvP_lYqfwP)25XfBw9nO9EGafWac}+k2XNU*6p8C zNj=S1bH5g?osYrvWE!0AdUn5^K}|EW89P!@e-Ps-ulQrd+$f4kpNp*ihYPdFV2N6t zGXcq`Ns0WbRhwK*hGUx;6$pTZ2(VH8m#O3* zA-q8fmNx0zPZFel!c2gbsKr{bXDy}c$@e6)C$~WzLhog1@__eA?v{t;%@0h2y#&Pp zMXi(5iN~v*S(CfTdKbtZ_qOAS5H$gLEmL>2cMsZ`N@(~wr>S~bLO$IWf}mx9(|B5t zn(CuC^1H(|TuMxWa`)J3R&+CW{s|2$S7oTjC->S1lLz=&g_Wgv_jht zz$Ed>3C}Ae8cWC!~Lyf3dj-XtRJrEG)D<hjV%<-s<2?P@QF%YjZQUG2umt^5H@yrmUp$*J z5lGa#qISAKPFEg3tk00Rs3Cbe64oJT96O%?P+w5Ym1Wm#&8Y~^24BK3;}dzY#~Tm! z1IUnXVvHfEuN@WMnM(~+uZUdN9Fa`F(N&eDMkvZq8>v9SK8-O zp|vvVH*^l$Ytj80YNILQ*|0;p#YdCOO;yXk##`%{pQOYT0-Om8Do%-f#{&B`z|fZG zn}A^u0cio?yk-@o@k1;K+=Y>h4Zd^JsA2^a9IU4mSxKG|G;I*bVLPhq?x!M9_*gM} zBNJQU4P;}>%;Ymt6DTucr9-ukHCKKEb|Ir;J{p@K0X&x&AsgEHQC~v_D;;oeE{n6C zGpcm}IO$2?K~y)QdYIX0XTg<~YtWMWWt=DH;>v=(8bIn}@GJvl8^AxC>|xW8h#mx__=Rq@kp>GY%zxjOqcL(oNh5%uUt7 zzcXm{nwA(W6Xy}ZX-j}PTAiFC2w{q=K8x=g%w#z;FM zAP~z*+AAQWBsq18?y?Gfxts0M5_YYI+$TBl2*iRS>?pDSDoCH(lI(@s;`wI6~ zEBds?GeH_0IDHEqq-8HYKacPFO0Jz}KYCE{^R$S<<+9#OO4I799o3!PC+jEF-#(ATeHDpox7bZ$zqq(a2pBM4!HBbN#GZOc0A?oIqJJ)ot zaV8|*)Wwy!cz2QWC;9$n)Pm7_<4%k6*nus`QgdlpN-V_r49>73cHmuAA)2s~TN2Hd zoTA^SxR3$OfFqX53?>|yO3vf4>STySzrye=4cej`)HW0Oxq8xw!n{zg`t0_Cvb{%W zupL(n)o-FLhtZ=I&SP>pVhb*Z>XAZ;9u1C{k|i&phNk<1wrh1E5#LAs7&>LrvjR3) zW^M3`@Xy?5qIT1dy4JI$KXf|Qr21nnezaab?AarAHRwzD#?Tp_IjP&z-x3pB`<5oF=EIH7Xe(112Ie88Z^z9_OwnRR${mSR;AzK1o696gF5?;H60RU(Ip z$ND^z3?`V4L$mTc^pNgj~Tly~PQ$)bQCDLjE!NW{s;V|D!r97;)ihoZe zY)2j;^i1;cuW4*;+3}c20eMrNuCdjyqDqxeK6A`sT&L06Q@#eA(#!Y)bm2Aa3M_M7 zCy&P7y3a2(X`>`g=nZq1I1~xJGt6JORV z0U-quSg1+buCnx~U){31bt&M)&TxteSw_^FC7Q<^RFuU+A?0 zgK=&q4uXqW;>VLD%mF~JBiyHH_BIvsNa`@fK z`EdC%_srxW*&2?AMQ~x)WM{ILe=$jfjysz_30y4dM0x1z_ARN`0Ju;9k5xHShl&hMk?UU=z*;xJD~K@S95)MTD?mFA zmV_x6CD(K%4I_K6*!L5GE%}!D>2xj0;eg#ni$guFIHrIU&C7&x;*L7A6`3QNp)6MW zSFax=H{nwRw7WRL#GRC)PwGtGVy5Tm0>c~RfsUxOo{rg48DC<-B7cibkK? z;~l~4JSm#@_Q%XoGHPthLkAt#3%Yf@?Ea-0VS&7XnUne-`iLGAg|nq-T9p???%{B^ zrg{4uUk*M`>A|ulD6JR~t1809b7v_dpjmRI_RHym__|;Bq(q2_EtsP-YMwOc z?zr(OXE0G}8KF14RJG9bRlSCT_b2Je5+5Klx$|Q(j)aiH-x?~yQ|no-{j6$i4Qxds z%30Fe_s)^t=K@jW((iVVR*KC#)fZ7pIk;xxRoWG-E50*0!@B<5=+4tJ$2rJC7<;sQ zd7!_U8+{%~0V_`GDs>frK1IHPV2bH&jtSI?!xAd){j|u&%Jv%I_4B!R$)d8>gsYNm zbR1~L0G8Uw9`_AQ$f6q{-Mh$ws1Kdfb|b@y!Z_9rp+V`FBc$|vX|4*nX)Y%G#Nx`c zEhQ2~hOXBm(XKEVJYew7bHYIW1G(Oo=1&KTO0k&KmsNNk79OA5!RN|j2MyY!B-m#l*$i0*RYF%4`{$ z@WoQotJ(TtY@pvs$843TJI6Y9**XJK#HRA^{ZSJk8J&|i2UAUH1D3Z(EYRLr>-vc;^LwMDZlI!Lse9P z(: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 XOz-PaZ7}l(0YOq!PNYo8;Pd|gNl1wK literal 0 HcmV?d00001 diff --git a/assets/img/elasticsearch/metrics.png b/assets/img/elasticsearch/metrics.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6e0e562d86f2a81cd86de82f706f74e2587789 GIT binary patch literal 96504 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�i;a- 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

K31tBu7>DC-)7&G61ce*`_ByTWKLhcPfC` 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 J3N`zv{{tBvFN6R9 literal 0 HcmV?d00001 diff --git a/assets/img/elasticsearch/tag-clouds.png b/assets/img/elasticsearch/tag-clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebac0c66922ff79963b572130d432ca87b1af8d GIT binary patch literal 86820 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

_!YBfRG$<%T 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 JQUS9L{|}k3Os)U` literal 0 HcmV?d00001 diff --git a/assets/img/favicons/android-chrome-192x192.png b/assets/img/favicons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a949d2fe5d15c0764e5570b1ba8477a8961bef9e GIT binary patch literal 19952 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 T@_Asq(vYQ$F;StVh{*&_>vrfq=vsX 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%0AKd}u#mAizaXi! zzk%MdI2O%RF3BgCIkeO$bQFeKsaIZOP$KzI{n#yeb1kc#Lp`${wnT?Uo+T`XPoi}YiVeeYX zrVx@rT>if+!*te~snZTeGlGFEjpPjmfE!-nZz#{-Ey7v=i|2hN80!ac~EBX3-<0#C*63Sc_K{YhdnD| zi!JJ2_!@C_*{>wYa2P7gMI?EU_W=}J7zO*YgbSGxk#gXe54wt!Af>90AFU*?hQmlT z<%n<=Bj?tMF&}*2Ythu7Nav#{Z%FG1&$S44*60!s~F{QRyg*I5Gi&ch_sy{D7)XM+dB;bsb z&d7mxDz3%c6*dBJZ5g~=*KJA6! zwb5v%9(6kx-N$F1bI10iWPk=D@+TFh$dOnkIE*o2L{jS9Qjgz=#1yhizjI*3MM;qr zMwR;kL+w$3`4+!AlO=;420fG`F=(DMQ@l}Rl%0aD&E;mUz0Je=!8e8-21k^ioJVa2 zb|{FFW%wIMGE#<6klxk2sf{iwcDm=Y7Cpb%Gwd1MrXT0(HZu%aJLZ$0B9fZQc=1I4 zbxXzI51k#iMbsqJpq3C02oCOJ8F_puu36`AIu5CxzQJDngSRCb*L|0~IxD2_n@mT01V-JOAh~A{& zQ9dRF4T@@#q=%jN@>JDqvovK2EB-@-6!Y&_KMA&qZ> zO|kRp@_1=^tvE&-=6@d`!Q>Z}mPHcwLP)Vc$gENjxuh_d8N@!!tFqaBvP*cD$+Upq z#my(Q;d061WqcB^^jNL-`0dtWa0ccLm6V~8ip!Zcgl=@)5kWCWMgsTnR3gV&K7I5$ zo%CRT^7G?wO|CmXSpPEnJj-A8FJZ+|Nrw zE^;KFTG}>?-6lc#xi|IW2sop9S&ZpxTzOa=O3EvPEV}Oe(no=-=if@-^J+ab71ZL6 z+;X1(*-X6uK^`&f0- z$C?zF+yAg-2j4L#M!tG7@N0=wbSDFC;~Tf|bt3|bL{EduCRpXe#7L4GQHo6zKW?Ot zmTv~-RV5@ZfB${KOih-=?Pk{}QC^2;$}j!G)QkQ6sJdR^jmmt$;u`x&%Kg)(Z;&0pB912ehx+{2nCjTnW$`6^k{0V z;i$&}c*dzi>hr%pHn#q8$dgv-75}x~f9o;-2*Wl)u|$<5KC77DQLnH%_#>TEO-u&I zXNqglRT?T)@&c0(spx+g2CO|p`;LviWaM{NZ^{-%1W^m~Hv_4jvfJ?`*yw~ps920K zp_~y0jAfdn5vnyY(~O(uJfnV|VaiX+EO>AN_h>WMzetA17O`L{bpFPV3ZgtXzStA# z+d5w~2&&BYb`6`K^ygn0P{?6;NJvOaL&dyYECf`+r?1@OuW*#=n5#5KXXG=r`YJTt z4C6Spir7C`2*mflPqE#KlOJaA)Bf~fg+9Tn4>FIFl!FzAFkqlZZ=>VWU!aC165oaq ztx1WpVW5UlnnrI5lbD1{KJ>6<P>vZj!*rizDL9tV)%@ip0^%z=cEJ90%G@CtyV{;~Mk&#y3Z36GYkpIqDU` zm3nOWk@MOPd=03O&ol4(BJ_WM-RJ+~dqF?%(dvqK*KfJ#d4Q!w>mjA%VPWcFDPZnq z32q=xc1{i!c5W6e8vHUyK8QIMBKuyR75YO=;Bk!PNdq4N$w?_oRwGTq F{tp(By7K@4 literal 0 HcmV?d00001 diff --git a/assets/img/favicons/browserconfig.xml b/assets/img/favicons/browserconfig.xml new file mode 100644 index 0000000..a02a5c7 --- /dev/null +++ b/assets/img/favicons/browserconfig.xml @@ -0,0 +1,13 @@ +--- +layout: compress +--- + + + + + + + #da532c + + + diff --git a/assets/img/favicons/favicon-16x16.png b/assets/img/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..f44237a9a42f93a98c435c3fc958cc9a52c2e38c GIT binary patch literal 1247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>YRSpT$B!RBc<^9PPY+N*S63I%ZFY8c zWo2cjPoH*ianaDwsIRYYsBf4%ckbcChbK&!z{SfhAi%@M!45PbJUm=bP%x+4yW7Xl zPhMMDKvcs-cCt&rNsp`;YqOv(2cVgidERRZlk*Ea7&IAX9?iV^e=@%~pQ4tes=kbw zr{>~|g>z2i0Dao9))(l_$@`P197yrcGRm3k6kBVV+2uCvaN5Lui8GI8fx=;(A5cx} zrr^4j{%xB>dUwVEg9Rc8Br6tq=1p~}UFnlE$q7gTRo1Ton&}G+cA(3FUenUj0(x!s z?AceYTmgCw7&89;{+^zmz_{4Fd2?lDWl&I%gM)*Qj}I_pmMvT6dZ*~uuJ9?G;p&rS2#igev$wwjJ=t0k-RjftT|)dbe^xNF zu{-Qpp(4%B!YEm=d}?d&x`R2zq6)iy{QG@Vjoq$n_QqWsXO~&CXwLGN90NPZ!4!iOb0e z2?;4v!UIxLLW05)Q<8w(q@*Q&-OKA04+s*Ddbe=9-$ne|{!h`^3(2j*m-BAf<_uqqXH6CwIR<8+V6` z+u7c}PSIA*j-yA_Rn%0MFIm><&A_U1+1P0FrsAT{pSZcYmozY4I;y(#^E3U39V^!C zSro+fBL3#8SF>*In)Ivf*s^D0mTU~uW|=--XIj_*^s;J+YeY#(Vo9o1a#1RfVlXl= zGSoFN(KRv)F*LI>Ft9SQ&^9mvGD6KA{7^LH=BH$)RpQp5lJ(;gP(yfCNJL3cV!1*= zQGQxxPO3slWkIS!W2I`Q&6e6=(&6r>mdKI;Vst0Gj@< AT>t<8 literal 0 HcmV?d00001 diff --git a/assets/img/favicons/favicon-32x32.png b/assets/img/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d021d85c808e4ae23408203e5e34223d752de2 GIT binary patch literal 2312 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 Xzm)TfVf8Kqig90xcU%sOkih=~MJbl= literal 0 HcmV?d00001 diff --git a/assets/img/favicons/mstile-150x150.png b/assets/img/favicons/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d045e25de42fc422567313f9e4e6f2717e8040 GIT binary patch literal 12172 zcmc(FXEst@nM`+AHd{rV_~m+6N#Ih(twMK?elFBK`MEh!0%( zP^56x5{+NS6Vrd}I z6PK(;Z3*B5{C8?f3ZVOcKY1<1Nx&5XcNGmqf^}S4au8o~WTznr#LcCmAglXfZg%IRO0jf`?;W+&9kSRY6g^Ylp}eO-*6v|x^`xN`et0gNq9`kd@*kE5EV>> zWvOsm@{J=8r}r`LFUneS>};7{#j@fN+wlJD@n^Y}kbjY;l8a^J@rq>cTt^gM>( zDPmrd*Ep)r3zK#JcmJH)r@Je?&ySa7F!dRp4ARrldH28{{Aa7std%9QM(9BnQ5MNV zoYVG})_vy}Cza0&ub$dFb{YDn*VN7$a%Kkx*LWt>cpB%&YcZHC$T0=YN#|^46Ww5c z`+Hc0^$JIO`1pV!Db23jl8~7##vl98^MqEzf=&{vB?!d3g)d2lAP%>(+-?c})iP#aPk=MG5yycA%+jw&ig+{{=U+(;sQnlC)3uq?r|tZ~wIr>9IS~=-I?7#_AM{FR0ize0)*1e;vrZ zR-;Go3I|2eW4MF;Xf3eC>#8+(q0?ry{j$9+VL1OM_B2TNvNhK`6;TSl5IN98TQW~w z>J$9P_8WSqbt*6)M0VYJ?}x=xs`EXj#xuI+ta3<-seEd#Vbu2I)4hR#y;kMa-K1gW zo_c9H{~~93jg4Z#D0FHr_pLo#@+uEl@t;%NKc?p7%s2~m$)@IjkCeojCI+YG&Y8aZ zD-~#?41Iwm*W0`spPIWatAUr*tT)js71o@+u-{d+-$e{L2D~dTe|{pUqq-|=GlZEO zinu1S-~Hs(IIPUNYG5zzT)sHguzWf-=lqwJ*He^q+EDzLp>JZ1XL5~x6As5DV2QLv zx#RXrM&kg&v-3ViS&X9nu5Ve5p-s_*%)9cqxAynN$FgP=G2IAng6jDfqz8`w`9*xNk1YMxlxY(6&m#?q@}PH|~{LH5=@ zhV&g%F18ftYcSJwYg_#Ydm*Vb3B3}<^0_}6>qt_)7(}3JTsbv`W%g8hYE24F_ECym zkJ_-*|HPYOMy}QV>RL=ZhUBTVvGf!MzPl#w^f;zF zHWK_y+6+a1BtJ(mei`}{61j$IrK!GtBdgG8w!D6ek2Xa+LymOWlHPNjG<@$=!$E

_nQW8n*?}ESWU%R`ze^O_AZ*R}?Sv8@5 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 Q14DpR6g3r)a^@lb2j + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/hadoop/hadoop1.x.drawio.png b/assets/img/hadoop/hadoop1.x.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e83234791a60f8253f3b138f8acda8af43be52 GIT binary patch literal 20599 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 Tasq!zkl?(Uu4?YNE7$)I&FvLk literal 0 HcmV?d00001 diff --git a/assets/img/hadoop/hadoop2.x.drawio b/assets/img/hadoop/hadoop2.x.drawio new file mode 100644 index 0000000..7dc200b --- /dev/null +++ b/assets/img/hadoop/hadoop2.x.drawio @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/hadoop/hadoop2.x.drawio.png b/assets/img/hadoop/hadoop2.x.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc44da608ea31614ed81f86fbcd8cb789d705a2 GIT binary patch literal 43200 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

hCJ)DS_>1Xrb()J9ETLfB$jNk!Ga$9Gz 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 Sa48({rzoo?Q!e%H^Zx))Hrnn0 literal 0 HcmV?d00001 diff --git a/assets/img/hadoop/hdfs.drawio b/assets/img/hadoop/hdfs.drawio new file mode 100644 index 0000000..b104b4d --- /dev/null +++ b/assets/img/hadoop/hdfs.drawio @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/hadoop/hdfs.drawio.png b/assets/img/hadoop/hdfs.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..a01b444afd6210aee9970d804a35161987621f77 GIT binary patch literal 36623 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%0A@5V@9ZDC;};vBp> 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

i|u-s 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 N1fH&bF6*2UngDB6U10zK literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/b+-tree.png b/assets/img/high-level-design/b+-tree.png new file mode 100644 index 0000000000000000000000000000000000000000..3db915ce383d717e1c09c0ce40fac75889ec6898 GIT binary patch literal 19052 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�(enD{#85ZlV8MC2-vHu&~! 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

MoN-e|_KCuAJKV1lkk=I!0=oXEN^vn(NPp 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 + + + + + + + 655 \ No newline at end of file diff --git a/assets/img/high-level-design/choreography-pattern.png b/assets/img/high-level-design/choreography-pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..9a8531df3dab06362dc65b30a373b052151521dc GIT binary patch literal 45909 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 literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/circuit-breaker-pattern.png b/assets/img/high-level-design/circuit-breaker-pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..63773b5473e5a410d08248555b22447851212183 GIT binary patch literal 50943 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¥1rD5 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 literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/consistent-hashing-disadvantage.png b/assets/img/high-level-design/consistent-hashing-disadvantage.png new file mode 100644 index 0000000000000000000000000000000000000000..327adb6420a92a538ff3b96e28ba33f5c06e5aca GIT binary patch literal 45471 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%0D%*p&( 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 Cp%01x literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/consistent-hashing-replication.png b/assets/img/high-level-design/consistent-hashing-replication.png new file mode 100644 index 0000000000000000000000000000000000000000..d15e66da06e45b7289636d5b9f5ed86563570a84 GIT binary patch literal 39604 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 literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/consistent-hashing.png b/assets/img/high-level-design/consistent-hashing.png new file mode 100644 index 0000000000000000000000000000000000000000..e87ca945b00a54a1338bbd45467ddf1759ef532b GIT binary patch literal 47627 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 literal 0 HcmV?d00001 diff --git a/assets/img/high-level-design/cqrs.png b/assets/img/high-level-design/cqrs.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa5e59d4c41f02945bad6fc8abb3bd5e65082fe GIT binary patch literal 79027 zcmZsDcRba9*uJEU#6cvoj;)MCksXe85Kc0)G9sa}cVrxU$1y`z94ZcpP&NlyN14eu zM)uynx9>ChKF{;>53lp`S?|yNzVGY4uIoPGI`>pBQ!r5w5fNQhSA!#oh=@0ch|X1z zT?C(Kd2BL*U*}wqs)|HqJ=YhAh}enL;R<@5W`F$1Q?EZ5+Nr7bVMwqb=8Hrza)qMH zOu8FUYmql8B5tf4)=!mv5+>&&f#|{ITP{dEo4Oyb{M-OS&vBsjy39mYi86@dcW45f zwqI;~_h?)HT`NMYIzyJ6jhZ#f8acl_g<#)tg_@CziAHSgb_u*$J6GXj) z>@ytoTetr`?SEVZ;w4G?zwd+rei!9?$=_bo`hVOZxDKi=eL8)6|7oEku5@u%W5nXL&(ZBL zdI!A_P`=(O5xAU=njeO5X+S^Y88^eoE72Q5iZg|jnYXU|UErFiyEPBxx+Qmopi(wM z)9fyjg2a>k#@YAzu3UUf%*(MM7Wi(9|L@W}MmCOM9U@s+SWY$IvR0Zeq{U8?(B&>Y z8~eVbVjeRuYGRBrcy&07@e&m@V$v$zrA%y}GFw8n(8^X7evf~4&CG$N;rHp@ z_0=W0a+_202HC>^j9a(l)#~2a7oO51=8qpg#^{$kSdYbjrdV2Bj4*epdFbZp`6;cJ z;NUsg*QfjC^yIL_r0QugtM`1)kP?;T%*ny(GYbm~GXsO+DdVMJ6M45-FReVuI|8}r2zT`rr3?Ofl!`J-JvwC|j1{*$dOq^4B)GkLMUs>A>fg0B zg1^xd_@eJ{9P(MoUwUIkXlZ$Q{7$4&ywYtLu>wR!n}1suDs}7HoELoSB6LKX-wjRh zDo-n$x)h%+#FfwXH#Y1{NG_6+elf<_R?z7oz6@;EMUJ}ni+%`&kOln`%^$pxa8C#d zow?tbWffKPIj1MF6};&4$_q+=_tFSMAlK7J804aE2UqnIjP{Ky6cX6ww>FOkg6={{ zoOKa?6q(9|UV7Zoqx?ZOuud{8q!6e)3m<~*?;3rtA~STDQa?5nRp7GCa*EpbAH8SD zBaQ)|_VVUZzibrS^oLhUh-EJxp7b)y#zFQ~Xp(mRbvz#Y=P;yCH{4*`G>hO@hvB`M znC?zeif!P|wGw3s7+~DYRiWmB*XxqxfBC!RD+R%NT`x#NL>`phZoNKUm6#mf%}6}^ zqUKkIQjBuvm+EU)kL){DG*P~s^Xex5S~v%iZz8^Q*4%W?M`AL)wPpWY5C%T1i$G^* zva)CQ3NJ4#?E7(&UV%=MdH3u8YsHuXMJVOFan81LA7QP0`Jevt*u^g!h~le0Sz+HE z-52NBxF33tiQ>OA)7@H53(S{5)IFYDn^wm8z({i9`znpbm-6%4a?fM7+bBZ5`4o&9 z-ALMWw0`mLtC0k%K;Gj|GEqCj#_}~fd~Xnisq7*)U}=hu4m#exGH0}6m7nbiZkHg= ztfc=NWbUfq>^15SiuD+_cXyqgcK17vY#9Py)cC$}Sy>5wHEA1V)Zb3SU0Fc0^%nC# zmUIb^F-htrthSKcNJcyk2sl+6y{FG3?r`>wX!_#et|_p&I2Ed!@cRFAXwm#TY&|vI zmW*&=Qjmw4Cd7{HY_VE!&fy6~rwfNCC(*7v|L3^d#P|`z{EI=iF?agF4c57=4C{=q z`%OCRNRB;kV;MK8b~@%46Xwo+e9g+qX$Pk5?u#EG(DhZL>>^>dQ`V!8cbz*DKgN@5 z{Oc7%NO&SZA`ge&mOV^HHy^+Dq&X5%eJ4bLR2tjZoE-`ooo1GXx}Ndm%*e+>2;Oo7op$fi5fZ1JBLC z!6o;VcsTzaJrME|Ta}GEah8%P9JpQ3u`}=_=XPSI`HdAelCPGCVtF{0{GG02P>jkP z`~O)HK@h|Hu7oix+%+3!yK0*~|JiNnUMFFb&v-}`ZW2D<`2>5g>??N~`Qg!wMt*-& z5|SX0e=oAKdzT|up001WwzgK-@T0XlcV;u4tYsebVzAXT zeVi^eV@eL#5!LYd4*0EDv~!GJ=)}b6D6{yc#{;1hw&@I$%P=l0O%F~h`v0?c7(h5o zHsewteP3Er{nEX1!wD=L{A+7YR&!d2;xLuqT?hEqM{j6$9N`>P>JHi<8MV=IxXNsm zC3i92JTK|soLECPDl{2s0O>o2^Zg9+aqs56j>?)C6l=QTn3`JOQzT70Yg_# zPR{YWp+#-cY}p9Z4r^?Cp0KUI(3}c zRUSwTdC)Ip{@@a7o(k$+K=68H$tcGQZ8qo5y$AJ%+iZ z6JT?z663A|6PKEO}&bz*{?pRKecxdq}7SN-8wUjG4ZgL%T^7{lfP!g`a$~HH<5=exUOG) zyMCwNRKjJ%vZoGD^3gSBjkr~%PjLjVuJn~i#6@e2vL~%#(8-giukSjNv`|M$IfwJnW*`0?aWt=XOucbVLg@LB%AZJ*8__ScuMva`C#!;k|edjYjMo)kv>-zKAz}3T+b<~lj&kP1jhLsdW)X9PuX4*e6uvvZE z0Y6jw`Li5jw4-uTyHsJgFJtIrjJ{gd)s~G@j)+iuDKD=d4x9>lH z{yg>S;^F}v&A5579@XON>SRWYFe1qBQ4+~vBJ9!3>4jKHG5N{e;~N9VViUienXK5^ z&|2;+!<-Gzr(4UGN2`@!wvn)lIk)n_>b4~#ANROHoiWF(G_slKfYrm3ew7~X|IdTI z$1CC?Fv3za?7OYAaRvTj{G({gIbpbfkh30Q2-K-+zU*G5kc)4h^A4qfLc_+rUe9Va z^-yRRmz9-eg2DD85ej7=Z%{}ERKe!bI%xN~;u)xEFID0TbohvrxW?sPql7Hya`6Wm z02wZ~Jfbn)rGD>Djro9Ad_qTUNZoFq`iGnc?*9?haq>4VMR?C@au(_}r0*qcuCH5W z0hFyYmlaa@+Z=6HdglXD8rho^&lMC(2-;yWGGehy@!D!W2XQZRkq&6DdSs_|gu36& zSJMO0u*qtCmNuN%T5cCbHsRZ@@o1LlV3Ut$J7nf7RETWo9c)7ZGFFtNDAZ)9xUSbL z2!Mt1y%F-iz`_Ioiwp7a`6j{E)YIWViI;picE}`2WLKL?}B@c-FbkRf|S<@sQ{|!oud+Zh%mZ+^kpCn|%j*RdUEQ@Y4 zMZJfT*k1J6TU2Gw?r|QIWCQ?y-xI6;E+hbsBnl9Ld3mPfE*tZsw4Ixgt<7ZjdltR7asQAoRsfXm-*m9hVp*&Y+r z=mg%*#65Tr#$&r9+P(C zMvM=oFx%H~V})3i4_T)on_+K0D#GP&waQ@ac?Hfp@RJ0w??oaPa|YslINe{dK7pkUR3#<&{X=UsXjgi!w%glYMva5@@%rV0gpIz6=xcSF6 zt0W5J22oq0(^RF!LiX|d6E<)Ez8w*Aa0PA7+$EkquJLUZD_n;qqyHs;&{^*5N<{Y>uL#ki^H z%Mfa5oU_H;nwlcM47afm3<2$iLo(72QM@GEE1e(z_0s>wV_IR2XDR$vz{%0D*ya+{ z`5=!+>aK0Q91?qtTVDb4@CtWJeIjb^R=jXBf;uwEcZDlA0#@MT;rY62wkgwvd1?(qLlWGXuQ(&ds}CWO0C0>ecaqU6 zCi}-v*&VZi9c~FxvVX(Nphi6!Mkb~aXKQPc2@l9#Q|mmz9A0UDOu*rus51On1tC#9 z$r?I^#vMJkJu#o$HJ2G$@7AxiW#9N&10Lyorb_@lv|;m_1?Jd@OEx??`&6v;`at_W z2+RM8%>Teh#GS_W;y@m5BgsOu!CLP+z34H`>Lm={A>i?jvH9G(H{a#uP5+dYm2D_@ zcE%`M770_tXM5U3L-yALsPH3faOzlXj@<3m)cSRkKi<^;J5nw1AW~UhuA#Z2=BBpK zqiD$+x^U*VTOVdRRp85bp?dZq3g&WDc^$Jacy|Ekd{U}TqOc~DKUf_;pAG;;_W_*O z^RC0PMELxL=|3lQRyg|wIVB~f*mwFR%n7FksCi+y>vQ62s`96HT0$veSmWic zc&6`tMgAp82RX>a^C5~;&f9I-QL6rDFsh_vX&it_>jySBX0Ay~Ny$}4hL!r~52mB{ zf6QAhS;8x?(u}LZPXVoA#CN4$LSfI=Pr_lj8a2P)UMSw0s&et)z}$y15d3&$W@eHK zN*gxfjSNf8*{uC90DKuz(C2I$+RwVi=eOdALgr04`|XEY zV%exS)3J-S$Mvg|Sv!uH5bJ5`aK7}r(u!~)bQfJTjLh5~QGxdlMNO!|nWJE;w?x(c z6$YssB+t%YXJwUxaAl&XN{61njM{u`<#ZhUAZFq73Szf{J6sR1<`1gap7^-B9Mrn3 zlsy#kxIwXag(75>XCVI14YH_^#?Z^mRIIG5F^PuBNNUU|Axq7Sc1nzWEpNu9)E{Kt z*GP&i9Y&d*@*ga}0k+OWH?-jzw*BO}+qDk4Z_{#S$8B$-=4aVET2l*S6lQc~mmY&x zCT#TCbwRdc_k|zwmVavCk)%ti0P~8(AlEXrQq3kS>)Y;@Hn>^q*imuZ2 zWwxf028U`Dfby28pt180OJNZ~mW1Grn@WA_fVnJI80?qL?~Zm92c;z)okR7!8o5{w zniTv&c~4F4=DzQdm$o+bH}clXV4@>7uESjao;5%D%L+g2Pm_L#Y-;#To~pd4xcGGe zGxS7OSLS&+@?99(2UX;fQ8OM$?+;a^{e4#`#bjV~H1b14_j3|_nW>MRsw!!_^vO>7 zE34ZwYmp3spO4~{sA>W}>KHj_i?%jf`^#KvTC;Apr|Zj(f?077#0n;K<0iwIq~1R{Y2Mo;#~8z6}@P56LpY94RY~1PTOZ54coq1&Y8(-q&^EPzuU7c~1^_@f+uSB=ZNe z(bpuZ<)=c!cXgkxX1}Nz8=t1x3TG7~3(8AIo<|hlknPn_qUIU##T}Po4MkU;_iWo? za=0&3s$jpgJqad_<2!M`Ow$sexWaruVO;jSSkE|$1RvZe|H+9MMNqjznV|i+CE?Bs z&j4nghZV42;j~`OZ%rH;a*{@Dh=n)oDME-7R4d>o=Pu+VEY>`KT1W8Of2!8Sg_2?Y z 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

xI8ng&sg_y#P9!?yz9PN`H1Fn>GOFYv;n!c_xa z1IdyyA)cP-6FX+O$PB^B2XsyS=;-Ln*Ng;8z(zB?KTjqH_jI2TS{ho1?e_Z9;Uy;0 z!0)BeYws@f9%iyznnv>_>mo*<>ehtTV+r7$9N`E0>%iaHKwk-G8?_f^E>;8xxw$cA zhb^=#h+&og{G@K{2&e<=GSpwA2-Oi+l8{Sa9U2o)N)b!_u(VIXpC;4hp`pMR{Jz6S z-;iRPfs%gJXLrd`v({W1Q}rAAVy=L|muR2=jQ~5j0z$;>fV1nJIS17?v=eBy1o5)5 zKnb_5^H1Bl{z2jcFI&ap{ohN7I0a57a?DX`B@$w#9F+3n8iE=A06c+2Kj}-#O)2+` zcwz+bEbW5qd3N(P%|6cAaM&#fQ_+ZwQS+zD-v%CIwN60oCO-poTo_Pzn(ex6Wr8I5sLKwhKb23LMBKUI0j`Axb z3b97mwMckd7}m)mU(5}xm%vjg2RxNadG%_4KQIHNm&>df0Cu$lPo*yKR0gk9W&QP3 zCIF$;Dd8^rU&m%Y9k6c}$+&|(-JH?6TmS^-J#tY0>)6}_Cc!M{Pb@gsC#MteE!sH= iOhNz0F4b{Cz*XH65$XC}3;b_8cp69@M74@d%zp#Kd3@af literal 0 HcmV?d00001 diff --git a/assets/img/docker-and-kubernetes/networks.drawio b/assets/img/docker-and-kubernetes/networks.drawio new file mode 100644 index 0000000..2bff8ce --- /dev/null +++ b/assets/img/docker-and-kubernetes/networks.drawio @@ -0,0 +1 @@ +3ZbdjpswEIWfhsuusElIctnQbFeqKm0VVb12sQNWjI2MKaFP33EwEC9s1UpNhVaRIvvM+O87AziIkuLyUZMy/6woEwEO6SWIPgQYb+Mt/Fuh7YQ1ijsh05x2EhqFI//JnBg6teaUVV6iUUoYXvpiqqRkqfE0orVq/LSTEv6qJcnYRDimREzVb5ya3B0Lb0b9ifEs71dG8a6LFKRPdiepckJVcyNFhyBKtFKmaxWXhAnLrufSjXt8JTpsTDNp/mQATb4envnzU9a0fPdllXw/40/v3Cw/iKjdgd1mTdsT0KqWlNlJwiDaNzk37FiS1EYbsBy03BQCegiabjqmDbu8uk80nB6qhqmCGd1Cihuwcrxav9uM9FGPNL8lv3EicY5nw8wjFGg4Ln/BCE8YofABwQ8WfMSrCTCYEqoTOnuwvLRiKlRN/wu8tQ9vPQMvnIF3N3bR8uoLh0srsNV8geElFtjwYl5Kha2n8Hb4AcVb+4iiCTs4ufGhVEarM0uUUBoUqaQFe+JCvJCI4Jm0rIEUA31vOXL4Urx3gYJTapeZdcGv8n9gxMb3YfDlxoh4xofoXj7Ev/Nh+tS/GR8GoksxYjMxwuTMDrK4JLHjJTON0mcrVterCrUJ6uSFJClYZeFBSmIn5NrU1+FVw02adyoz6dv19sXXFEX3e9lBd7wKXmM39+no8As= \ No newline at end of file diff --git a/assets/img/docker-and-kubernetes/networks.drawio.png b/assets/img/docker-and-kubernetes/networks.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..ee70b6a8a277ddc2c723fb19efae176a60d49a74 GIT binary patch literal 11898 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 DC;tGL literal 0 HcmV?d00001 diff --git a/assets/img/docker-and-kubernetes/pod-creation.drawio b/assets/img/docker-and-kubernetes/pod-creation.drawio new file mode 100644 index 0000000..bd4042d --- /dev/null +++ b/assets/img/docker-and-kubernetes/pod-creation.drawio @@ -0,0 +1 @@ +mxfile host="Electron" modified="2023-06-30T11:18:18.069Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/19.0.3 Chrome/102.0.5005.63 Electron/19.0.3 Safari/537.36" etag="IFS0dK-y9SUW6tHiZXQp" version="19.0.3" type="device">5ZrNctowEICfhmM72MIQjglJfw7tpENn2h5Va4M1CMuR5QB9+kpYNlgyCSE4ZsyFQWt5Je/ut7sy9NBksfoscBJ94wRYz++TVQ/d9nz/anilPrVgnQsCb5gLZoKSXORtBVP6D4ywb6QZJZBWJkrOmaRJVRjyOIZQVmRYCL6sTnvgrLpqgmfgCKYhZq70FyUyMo/lj7byL0BnUbGyNxznVxa4mGyeJI0w4csdEbrroYngXObfFqsJMG27wi75fZ/2XC03JiCWh9zwdbS8i39+J17qzeePD9Pk/sf0g9HyhFlmHnie/VV2ZGbPcl0YQvAsJqB19XvoZhlRCdMEh/rqUnleySK5YGrkqa9GKwgJq73b9UojqOABvgAp1mqKuWFgzLauDpc7TjCiaMf+xTRs3D4r9W4to74Y47zCUL5jKMdCEJNrHXFqFPMYqhapmk/ZQKx/68HHoBj+MTM3g9vV7szbtRnlawJxYtayqoIEixnIlzzvWn/HvkGNfQuZAIYlfapuo87oZoV7TtUGS+deWc613ZbyTIRgbtqNaUuPF1QVeSNLUW4GR9EmBMqnPj4qkBMVOKE6KkCo4G+dIW94XhANugYRahMiv38iivxRuxQFTlikYQQkY2eAkJOqWkZo2DWEgjYRQv6JEELjdhEaOWGh+zgGsnWABnaWahmgq64BNGoToIHdph8LUOC1C9DYCQvCw/kZFKDATlEt81P4qTsAjdsEKLBb9GMBGqJ2AfLcVwnPxUXIcJrS8LnQONTFZ3KI9dCRnrP7eEdR057zHc8JeMwg1XuUXH2EArAEvSNtf04cx6r0JquuTKXgc5hwxsU2CzxQxiwRZnQW63hQPlXZFt3oZElDzK7NhQUlRC9Tm2rrAuZtJ2bLF+PDsq3tsdNl29cdmTtAld2SO3nsaKzeOyG6R7UllmHU02+hVV/Rz2LtrFmsXLOhKu0uVr7d3SGXqxK99wHLPTFdGFj+8ERgOYqaBss9wuUg6XIVQVGi8tKlK1bMCWzMLDV8mKjilpezMMm0INazF7DgJq4uA8Ga0laLoO3d0yHonrk6jqB9Wi6RfCuCjqKGESyW21vb8nLW3ylwGxqpTEseuwoaGuxJjy/0kEFTnBVYXS5n5TvIt3LmKGqaM/cHxiwhefHKi1wqscw63DnaNKEDaWqscfQv7kTmVK1jG0f7XZejqGmaan5oTKhuG7Ok7B1DHktM45o3v51hamD7wW+MKTXc/sMp9+P2b2Lo7j8= \ No newline at end of file diff --git a/assets/img/docker-and-kubernetes/pod-creation.drawio.png b/assets/img/docker-and-kubernetes/pod-creation.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..80692bd066296c54b96dd851cb91aa6600a4dc38 GIT binary patch literal 31473 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 literal 0 HcmV?d00001 diff --git a/assets/img/docker-and-kubernetes/replica-set-creation.drawio b/assets/img/docker-and-kubernetes/replica-set-creation.drawio new file mode 100644 index 0000000..e5c4fa4 --- /dev/null +++ b/assets/img/docker-and-kubernetes/replica-set-creation.drawio @@ -0,0 +1 @@ +5VhNU9swEP01PjYT2SQkR0iA9tCZDsy05SisTSyQrVRWcNJfX8mWPySZFlJCmHDJaFfyavXe7mqjIJqlmyuBV8lXToAF4ZBsgmgehOFkPFG/WrGtFCM0rhRLQUmlQq3ihv4Goxwa7ZoSyK2FknMm6cpWxjzLIJaWDgvBC3vZgjN71xVegqe4iTHztT8okYk5Vnja6j8DXSb1zmg8rWZSXC82J8kTTHjRUUUXQTQTnMtqlG5mwDR2NS7Vd5dPzDaOCcjkcz4oRleT++js+vvtff5lO59eTxZ3n4yVR8zW5sAP6zuFIzM+y20NhODrjIC2NQyi8yKhEm5WONazhWJe6RKZMiUhNTRWQUjYPOkuakBQwQM8BSm2aon54MTAtrXFokOCUSUd/Otl2NC+bOy2yKiBAecFQIUeUHhFNUIg1DEPjhYavy+4Ig8uAStGY1xCJquElYIz9g7Aa6B5J+CdeOB5EEFGznR1U1LGM7AhsfGDDZU/9XgwMtKtWafH801n2XxbCxm5pNrpUqp2B+JVSgdg5SFfixj+VW98IjpIj3qQrnUCGJb00XajD36zwzdOM9nhObR5bi6Z2kTlvvmqW0odQ068NHJtR2KxBOnZKYOhOfXu8TE63vgIDxkfU5vW6Y7REQ4PGx7j4w2P6KDlA71OfERuGXrj+Dh9UXzEDOc5jf8WIs8l+FDEOeUauRf3rontGdozcROPOAG/1pDL8k+R7qkEYAnaoRI0q+FyGFbdkrQ5zVU79gAzzrhoy8JCpbGjwowuMx0YilzVvEXnuvdSG7EzM5FSQvQ2vZ1bX+T8V/PmFG009Ju3RteNrWhf3dv0o6WXW8/Qa12cnqE951dd3zvUFVjGSaDfDYSbUvnx5lSTHDURIz+pTt8yp5D/TvHBkiocv1JSeYb2nVT+y0lzTbX5lPGB+uULTQEnenh3D/FR55jLC+q5uMKeANvbswPqe7Qpm4uSF6pHNNe9RqLJy3EKlRs1ZyWvlGeDweCIeXMajkbu8Bb28bZDcVRi+z5cJWT7yB5d/AE= \ No newline at end of file diff --git a/assets/img/docker-and-kubernetes/replica-set-creation.drawio.png b/assets/img/docker-and-kubernetes/replica-set-creation.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..e28bdae4b51a21c2ce85f9f450dbcdb1e2692a85 GIT binary patch literal 17757 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

&g?wp&i?umiv8XBpe>_5~oF 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%0Ac`?U9>W zERB|f9n2*4$R?|7;he>sSD=;~6<@sA=C;(Lz70Lju*-xGp4855TkMdVjZy_FC^W_L z7le&pW02*eky9%?E?M^=Tl7m@7kF(fFSdj7>#eajqyu)WJO3A9UmX-z_iYIzL4yQ> zTL>B;xVyW%ySuvtcXxMpx8TxvV6*3;kjn|ZIM>eb9&UDfCI?S1dr$JW|=Z3Ls1 zTQ1~9`?{aW)w&aTAlD5E0}n?x=V9_p$Jyn((+4I{R#Fk2s~A%}CIlCdIAH`OY>+Oh zw&wr=fqrwJ1hrZi4pdItY;BlcT&*fpkaxpCt_JtH`Vc|8?>mwHj4l;6YBIv2z_frM z2KF!SJmGn&z^V7I@G+?BTDiZET24~(J`0CasYsl|fRMd7eg$MBoL0AvD9ic9{GR{NjF7ZSk#$r9mvf5;{ieZl7)dshDTXSkh!e5KNZIq>R&7sK@eXH$s)$ehwoAfMH|!I9-@p$4Yb zfc{+XE)p5yKM&FjGXFuJ3sSqoFf`%6tKGnxW~gmmz1un>P6!2xTtEEn`Q(5o$s^wv z;1^0B##)t6*_I3}_71~69-!%Xk^%=eLa%=txC?oD-I7&HlQ`^xaNXD9(Y=UkYA`y> zVtdH!G~XHDe&$7-?~7>{vc!}%m=T>XRQP4JI>~4)DN45&gq}{Y*ZxZ?vlWtd#Sbir z1a90!AAXm4+`RoffI5&)B2ISm4jQB_yy&)G1@oR(tC%3aOW0?nGz5qbQ$*>~wlAiAmj zuwR?yX}2=Mdb=}@6aR|1R|8^KPkH20p8|eQE0TO#Ko@e^2vaHM9a>SUGO=h_rUnO3 z6Ly?FU8rYA?6ReQQ;>5^lPGyJJ%8)L1LUzNYlc9|pK5&#Clh#|FtXDQIf-+<-Fjl0 z0KUPnA}?i+5A?3xzroL>N!gDn&C{}NHFn)`aD&({8hP+sPwJe^k7Ff@#EKLveNR=Y zpLa8;a~S~}b}#|tF@|$zn9r91sxzRaEb*V-tW8R46&Fh~ofn>??YRdc)0qZNjBP$t ztUVkwcBu8sZ(iV2B_3<{<@f%oL!J!8iGV}&8MAc;M1K0lVsis^jA^kzGinJY)GuKd z4Jc4l2H(Pj8kr^GT$0Vv^*M0$1jf$t`2s)xxcU;V$NN_7uuCUp1*q2at>zp(IbI}I z<9-9nSGjH#>OK^f_droz0V)IGXPKDaF*F>!ASrepsp4~xiM%SLNKmHpn~TG)W&SCi4zA{Y*r9KG}CmU6^Mb`a9p^~HY4odg(it~fJ- zqeClFig%SHeElE!?ACg3i-}s~f4w)*W=WiS_@XRMgAW)IwZoP4-~j`mWEpDJnUnWb(xvh zBI^dRtPcR%$LlY=RU%8%Frh@vsD9G|@@wOjq44?nz6zh`uK*S%b27eSwGOg?T{n$} z6L*5;NT3#F3cYW(Ri&Dz$L6E1Pp5CNtZiqwZ%hT!HGzu-S1Xmtu#pxP77iNgOk^EpSkGBMX?3)><57lFE;x2-e@z_EPG0v|;;3 z<*$#O9``HK6ZQ+aB>WNiS79^@9mt7Bl1Ssf&bNx0UQa(BzUMIP1!JoDg&AWHHVsM= z9PW63^a8SjjGu9w`{^1jm33~jO)iK*0Cw87v98V-gUx{UhC@it2Gz~mrHakv%;%R) zET?M(YKNP2O9+6ogobirMGT66Xp*Ut^4BDT8STaSY9SH7c?kYtW*Tr#pGUDvh+=g> zvH8NXWUOnAqEyp{Zd*H!&`0=)W1ZV1;cEXI<-vV%uTL@ZU&bj?!h!ldN zrFEs9q5DAqmU?!ygD)8pye{K?Iu<|Yfph1G63JgV2ZvxEJji^wFFMYCDz6=}^yZ2kWN6Le7IhcY;U#djs)P@&TU1ji1soA>+fn@pfxW z^n2TLk|i5;bKr>VM@C2qO+JU=AG)Q7!qe7fkc&|Mw{XVa1eV>uZ)otmpnrnjIFl{^ z3`CpFZ%cgSMLT9<%0O6iR6!b%FL!!4WX1XrP-6_>BA8O{uMMrwN!@!dzN|6Qntj2I zQ?L8&kgJDUI$GyGNv5^jEM6^;#0pZ9(!lSez>H^>jH^2};#gH2uN_9DAKr zmDRs{!jWMs;qGve{>dYL{DiQNYG|-Cw37;DXVuunzn6Bi^#a%L>P;00EHv^u;Qqk| zZ#t_(S9sK0PmN!)<&Mf}s?C@}vrna2Thf+T6hS&|)_<;^T(&4w6<6~u=J`;G8j1g7;|W@{ZI1hEfEOQ^>~DkTSkD_gdNsuedE z{_6cQ1!YSA*-)2y7XGSI!Seo{{-urr9OJz`@2q8Tt!5^jv@Z@Pyx*4qt~*1eN;X!1 zvyfFqvZruv%9%lmQ6tG2J_^pXNKsC&S}OuH)UZ#CKaA8?67s(MIQ|QjDxC z(x2@)@4w?ka*j1a`s&He0?E;Nt4yiEv`U=K1==jiuTgnK$~y4a^+I4ZbfT}I%n>-X z=-n+gnJlwxuz0TpW0uV8K76H7_Nn=x>=74+KRBZm^ZnzX!XLgF!^#gTcCh+TyN76E z@#^A|W+zzHpTCVP3yEqcKvz+E^i#oeGZSNOUJ8cWJZ`D8aoRp<*@;G>*i7N*XLzXj z3?+F|5*KId>@uWJIkkm(1Cnd_%A4jg?_5by|xU0$)9gu!R4#6>d5-CzZyO{$g^*WpyG=H5Fulz-3$x_nrh< zH%C_bQWxI5CucMJ0~=DQ#O(-`;S-0GuF!IwclJhQrY-BA^JasXcMW~Hw|H~d69vpB z$F$d=z-E}II}BI}n#Vqs@z4~s=0rYXp-2{dSJ-=A)cY#@=GAbUSL+!5>^k|b(-YJ{ zyG+^ltfiiK_sy*|YjaRU`^v5tAFbZSaNHx;r1haSV5hhHuzZy_U&%lK-Emi(mW~Ee zM6>;D9%|cq>$K=JTx}Wt0B9zea^drgF1fIC(D**eEDMluS_{gOPGP>qghn+2N1Uk9 zqh{c$b7p{Rk_%qr57x2=qy_XYjo$3H5$JFPe8Nf=Cc)gzLlc4srtl8>eyS@c_RRC` zd!W_o0%1|F?HQ4kIym#rADs5{J3LLQc$!{V6H01K2rJ(VPs45^F%~nX%6NR&P<^(U zu;kH3!44#`P@@wP@*{b?P5F51E%WhneEL1}zz!UDNYHs=L@r9XmO_%JF`eSpL9oMq zBw!buA8#Edf9+0r?`lZIjU5iB8Zu?8ly+6)oC|EaJ1 zF!`O`gy4C;$(6bogg^N=-SLs}WJCJ`YQx6_V_rp-ru7uHoe3_5PV;=MOFKXBriPcN zY5ay@Gtw(!`B#88%@aDH8Oe;P<+OJ&%&r+C%XyQi)0v7ijad}mBrspePI}>`|n50z;>$+=&@4M0s zlruZ!BVoUtT9ZN3MR!_63B{SO+$lkrkk|m4P-SQ}cu$ag?E{|@bU9&EB{gLXT0cpR zaaO4nvqb8?)&Fq!p~6^u$E|MnRuSJ8l?cF(J{sKaU?s+OPeSf&v1-7=F5N3RP#ZAWuj@DaH-nYvp;{&_BD0RU5fTuiM(?hoWkL|6#?GQ!Uhdq-l%Y9Ri|bh63ybwNQ6KZ$X=Jf_NYqrsCqDtpbqIC z(=eazD#zHK9>|}8d6!qy4*U_F9u9Zg@$3oR`NqI=gzRfI=DV6V!%NS$<8e!Dh6Yx& zjkj1*%UttUZuUap2KC<^K9li@lbbPu4nHs`ucW@;DGYR2?3UTf!+o(|-D}3<_M#l? z#9w;c>pE*t40Z>-Z~{Lo>a8}o@3sN4?ZB$7+#Xo#qT>eEv+L}CWvNsq-!LwFCP-XI z5v6dSiI}~S5A#bdh@bDiCtKU~YWLn94%O@J>LT6D_N>7DWh5Gm^M-NAW*Ujc9~@8) zN(t)E%mdyYs|T>{MVGW5#!h=RYE3y@76{yt6%8P0u>{d#e>L8fhn&qG|MJPR632tl z70-^>m*YN$>+R$EFQ*3?f@&L+c?%2-;bs>4;^STc5D#ya-$X(*{tGQ<&bNu1>jdD{ zahodii!J!R#HSCNW4fvQzgw}V&RF-tcci>C#4BFxcIZPIX0314B$R-Dml=e4_oS{4 zw|}z2Dzo~_n@b#@*G=csZh<*ZoU~pfaSFAwWxm_lx4V^^t)WGds#n^SlP>G+4Wh4P zSj>*@$0x7Pxgz&tx%c9}JJk)gMiZC_YJc6ZPtVA#x&a$bma0MWj436)uB?idQBzNM znPJU%PEw)+D{+xIiFrKua^8%2RU}`)mDAOePYM~Jvot!spA7h+&!`ap&>-j~4QSEN zigTTvz5k8Z8}JA;!q;oM90_7Y-09QAq<4Mc>UwF$Aa5hiLgM*DW1Vkw$TbPd{(w(2 zw8CGE2?B$#gK1WAu9jbiOiG(^aXIr2^S|}}Og27lg01d0NIvzvlnX%lqbiU}b*9s~ z=KRA&jOhm+i%Yvd9A0=&qf{XAiJDJU4y(j#4o*m_iC z@IsEJnG5lGBQvD!VoihQbr<`NZ6E5vfLqs>D@^|o*<_99k-pG0E+n%kvh_)+3(Fhs z6D?QtJFxvvK|Zz$?YqA^GAOEKsF)?sD}1>{d$?z?d%J$@#qOv_vNS(9>6VOPZ{gL= zY?%BDEq_y*Bfz$`dSv45A@kD_b1j;#FH?33v<`6GF!<`pZ)Ad5vC{2?quR!qJ7AJK z64Livn9JY?!=?RLsXcY+db<`Q3+En3F_LeLvv*8hP+hibh%8bY*Dp6mg6$PY3v8$J zG(7v0ASY99Didj=;Xj_(-IsdV$8Fv+6>xiN@&4Goa|lOH4>fB=2jaYl&F1N1o{%-V z4mi4zU8#PU1OT2Aq^&EwPVbwgDlSfzpsf2bQAsmvMExTcFrAh$%d^@*xL4j_Mbn+f z%kA(Edf65KihV`6?kk7|OVorLYrIc8<hq(Oh6oy7?yR5SKJp9K_TJnFB&V$0_~Y z1C&d%2=reCv?G6HgnCywr z4qUZ1Jq}y0XQ+Mxyos6096B%~!<`eXpNJO`4x>n8AONccn5Ru%$5LhEtrKux_>_bw zbFbW_n)<6+tF^jfQ9vD6>k+itaoI`{{ph!w)5*yZzGQ%DXj}J)V|dB!5;ZNBP9HYJ zq&QByDP)-5iR&2_PP#O>F$fJGu7@f7IgxDN#@BbN7ZOI{%eH&B&Rg&L+Qs$}p4mn-+3HNc0f$G1k%HctzWCIo*2~;$|G>J;p$A(! z5_gnpl;==|La{g|5d3^CWy+hdwQ}&8RzSo4&kbANoH6rMiCAs_06_q(_*A>d##UC;EG#Ug7Hh3GRU){X zVJsg{=}6`bA4}N2nSM{E24+m@tyD4eb!zJBdD9j<0DD0J7_owB6m;~Y+CTpA^mX)M z98$%rOv%8zYJafh0;X|0g?5Ib3qwO>;2KmWbhD4XGR7%&ci6sPccVnIWKwDy>-kA< z)Q#TYZOg~J-oa2 z+LDr#>w{3FR{sdB?O+v4+E$cHNI89_ud^RJ!r^ouDyn40k@otLfNCfT)T0}4ZI7}Z zSPF}b^y0^zRxuu)oR4f!8!pB0wU@37<*gPUBgDqW&Y^YO4-7QDO~p63^D^+d?!T`B@)r(ETE0uEqj2as>0-=qKIQ)%0*UQ3?JZH*|+TQtw7^# za32eG{h5h?c-KB6qa&YR-tFV9h~hixHmAv1Anxe|li8HH^EJP>l+;(S=Uu-tAR#g~ z6V3i%EP4(a+6PJlLxwz zP>0yiW{?o%{H=*WCNMS8-ra5XuaKxPxrV| z%%hsoX0dgk>6$Hlq5B#uO-C;*JY2&5*SVLhW>Q|q&P&Ur?YzE@`((;-r#HOcj4ZHXM9*OH%j*zxbtGaq&Dv~7mTP?dTC3q^;X(hPUPZV z&HTq1xvs*<{ivKPA6LeRWF({B)Vjaik9d~0>Ax~W!f+YlgE!|2@6$@PD1U9FG3b!S zAcyB53(`-BdTo_M6}>Pz$k{`wct@RTQ&m=>sW{Y6sgtbAz9~#t2*AjeFtZy|nnZ`O z0_rY7)-+Ei2z1vzFW}PjmX=;*NefkpBL^i(#vlGm|d=#&{%xwLs zSgW6 z(=jrd4@FV-`9&h1le<{*Pf4S6&;X{kf~09?j*+2ZfOLGux1o2OQ(79gh%v`C(@M1F z60*;(LqDi}s3dm8pAK$J-YU)IjBvP0)Q}QfqWr~q(3*|YeWd~jcq(j+O8k%=YgX_$7haXI+?aVONb&NNe;QBg zqXnkR=SC8@uM!>P1SAF%IhXA(voRfh$&q@}f;Zo7F3?le81(Fwt<-jj6BFh))Icut zVeyeQnI#?doOw*z%VG3}FkUlNT+UAO;ybCRA$=K-*pMvpnP@Ix`pjcKA*ivzS~P7Y zr=T85-*hP#%;5&C(CRfR)tzZ0Ae%2uz16S3SV z{$Tj_fqe+VTIE|YEh61e(U^1&C%gD-OoMFx-YI78Ywj)^`d0?(2a(WAkbC{3EiiNP zi+PT7CF(_2+Wy6II(D2YHYN+du>9;)9*p5#;+2L4A)`C*V6>0KtN7R}kn_wW;0g2M zbP)6B%q$UW%d?O>Ga3_FLgU#1jY8q}Tr72r_^mz-au}2_(LjZSrKRPopavS|EPLUV z3<+ckSn_b2XPceva)S+8<*&uhHs6cy7Z3XMj5cEZhbAT0%*ng387yDlgt-{;F2!+GoQEP3=>+`F zkH$STMstOV(?av{_oBp@xtmz%A$Biyfk|?9$rE1S=-W@&woq#S*p|*nVU$3W=Y%%! zhgb?Gwf~R6VQwSXOcViF$S?xv%oRb)AhC&v>=LrTVRuvrIHJJe$9QR}6q!mCfjxDH zZe3WSK=8G3wnjVS|p^1K&u-Iy6qp;AFqpDq||7L%S7n1Cn&nI(8`XyPq%V>Y%{cU0M8oez%UvJSF zho+_Z+F3K>tfRT6YILge0*^g0=&=7y>V(l*f!93)Z!?qhKBuG;#~YJK=pwH|YV-0{ z{^G?V*$PqStLG0PkGMPXsB2~+wPM-9(t zUWd&aeJd;upSLv~qfMa_?;)E5=fW(!w6Mkw$SWF(NZ=?3wPpxD%F??k%|sBv zFMK+z2Ysk(mCTcW*q35RKV3y~irS19gDlNcO_Mh6!2JM?Itx!U!{1xHs|LLoy|-2< ztraEy(Pa(%^>*(`O#SmyoBJ`mDXoa1ax;cA2lC-9(z)5&F;=k^k{AYCS#Jt^GcaaK z$Qut_#XJ6-MDTd}^?I|9I5L$n)zzcYaAv5a%`3fQboSi0&Q4B|tOWS!qg#61 za8zdvA~MuiMe#HtV+46;w#xKZJ9?yG#v}-rQf?pmqt0k3<&NzLdo6E#^ZtW*_>g&^ zUlYP3qHd-=Q{9(`9=%o&=HkJh^xUi_u6u^H4%l)`tS2Dj%thcC?ld zoy>dQ@sq)Vvfb37gic{>j>%2Ha&1KAd)t?2?8*tJLs9#}q1>2R6`e5^FW*~^i)vlQ zmmGXNq&p)}Z<$l2MwXA{$FAHKdUPvL{|c8y+@Yw*ZkJz5tHzP_uIQ9 zZ#n1Q4xym7vq)>!?(n?skpji@YWcgS*Y@^goFSq7;*%H{N0IObTrbCyQgb)ss%|pk zwRYtoa+=Wj*fklQlSe0`5?1f`yraFXD2n<83qHMV{Rh zNfuHhABeuot*(8hM+eVbiuz=n(K26TRJD96Z%)kE`>Q|{cbRIWKZz@oZyYtO#x`wr z&etl@yp-a*$UgcDe{I45{io$q*JE{erIv#Q2%<}MdPHL>7yXOn-vkdUjhAUBYFQnj z7n4uNYF4{)`3Klte!FfDy!+4LyfHJHI+qMbOg<&=A9vZIcOy~tCFugT-p=X$8QqhZ zCZ4C2^A=-vXO(p#7T%9gJVSqj)_aP#QHn2gdsE{N?bTf}OKMzA`jFS99`Xv-YP;1M z4ox>~%zDO*(Z@g<{XVo*I9^Oy`yFKRye%^Dp`F32EV>5gnp4$T+VzAsrz%-y$7VgC zZf-XrUSE0DAQ|0G(Zv-Ge{R`Y-(`n|DvmzqvEaL`xK_DggfjcBtEfuAid+)iVNw|%D)kSs=g%;F0fwgsN)4g=C)Wr0 z;U~RW57r@R^W+R*`g#EdE{CQ{-cQ*I>kq^{W&vS)H(_G~W>nLy&ev<+P?3+3mJPm! zW7brZoxFY*MSeT$ZoXd9Ru{I$2f8UUzSKKqSO$o>YKpC`PEJ8_5_5jets8c^Bc(P6 zhdFRW160(i$bO0v7<0_2x+CWfd$!;FrK>0Ey zG-h{Sr2J;xwLFoH64&J1%YB(eUEJ<;ZW&u7;m46cuOcJXv@eh94!Qb~8kYy8rD?Ru zjAsTm$F9c>+!ebFFzej&>SZqNgDcc)iiPOJ zA0ANz;y`H&tdxU~J`CDFYSkA!0|DEerH}7g#oyJ3n(<58&K|#~-6Q}9-D;hS$ODSM z<}TvmraJSu0#nfhLhpvxG5J2ZHrTx1Zo&LGAge||Mu{Yr?wBL>AtGl^)y#g(as6mi zL#GZjyw3mr8+CBL!Ie%;rPyMAFQxWtOLLvqduL$u)vO{O*VE_uawv3N+3olgYi8&g zjb2x7YIb(_&xD|4=3d$Mn*!)v*K3>h(TZ-@7#I&e5CrHIdM>tO4MCnCk$CGvkwPu< zCyV`R1&0&ez4a&ij8p$^V%XKOdp<8WXE%Zuv3_nQdz>-_W~iU>q;Yk z<#!yU zjpVKOe_hR#%NPm0*K%y|Efm{xzl0H-RPppr^0>!PEG&j-hLIsv1oFUr8idw#?0!i{ zb<%9iyitZ1obqw8y&avY0346RSkG5Sewa9|jJ=*=+ZROVhlWFC3!@edofE&PGf}9h zssGAllPl17Z^V)GsN$BX`F>MQs}k9VXS?u)BFKzRc$)`_;(7@KW+ru~e zAJq0T2HeZvIPOYab!kRXUBZP`SaoEjLsm9pgnNs|QS0Dlr;}r*aizau%+* z!+eW5PiMrcHX_}6oIfw&R$|5$t{YETW0ATE0Hh^g!4ed85?2_$Z`)xZcMyRgXk}2% zEK69NwCK>c0b@exnj3pp_1M&G-T?qvLpgc3s?G1kkrY898C(zw1%{#GELs|KHvsc&+Mk39J67;`L^&YhoQMXr-NVtt+ib zFn+F<)9s^$00>(61Ri6W^bQXotc`O?9&V>hS=AEXr2@BkVF&YPm1;z6{v7`OC6_s^ zbj%h(<)m##fzUNlRT#c-Ft?8b%lJOu)DVH-)z=>;2kE3lz~XNb67&W1c&tA3b`X@tzP>CZTIC9uS)(WM9IXgO!zlO9 zC%#*OlhGM&l9xFlI5WK*fn%~+30oj-ZlFJqUTLcB+vYl$^)-JjV08{{@)kL!{|W}J zt@9}q@a!C^xb{_@+?tf+vo&7w5qFrn*(~Q6wWg4gjslu;#tw7HDu63dI%7`w6yJ2* zv{mz*h;fvL_lDv}KHdO|f^GZnC;`n(#+f>H=R%tPCbI{(v$+Cm>F;nk(j9za9-e&Z zGfKYw-v&`e16E~qydH_7j+ytfC@SXBye5D~eqZ&YanPlybIqD+F538vqPHP!KzKh& zl~`Y#>t$zGAcBE^v&%pj(|=%gedryeVA}z!Nznt-WWcG@{ueQ>WQwNT^0n z8m=m&^2xO7c=;@nrsswbVL8<(cALv5sKa3-;=iC1XQ-Ks%~YT4etLWOfVZ(Ir+4Tz zN=NrlPk_sZyF(rwx;eSl>GX^E#$h4#6esVTKtpOR9HwGBdpXh9<~5>~RLkALhHfG~ zq4Vi@vjnm^u4Ji&ied!WUf|WeKtE6D{(0pO5PO9$;o0HDd%58SO1~ZF>ytU`{26L@ z)%PmNEK2OGC=lump=`|N^=)7&i&BLy`~E7RJ-#uuD>et3-NEwU3G*|rhD7tR)b64+ zT23Srk`loqbN}ftiVx2vPmP@3yOBrLY8^y))bPWwikc0SR_c=8x?8o4W9^`y;xsH} z3+P98J}?rN2G`ua$`>DdhVn2hwY$m0(lCvAcKK-GexfOV;pQyMraEz%rBx*4tShG5 zT$P=IQM_o@QXs@&<0|$}i0sNiis8O3{$C~@?Ou`vu9LIe8lutjJbg^A`FC?0)c!8K zjqUsGnz5ehVl-{^K6}bF>Tq&2&pRCVAci;6CgHacpG{qQy{e)m%i#3QZN@OVjoT=s zG9&~UwAEUnXZMqtXu2cvP(Aq=cw@Y+r@_HI+$==Dx4v@m+fz$6CI2>8o5+^b#p~ba zle-{TKye854*6-m>ioT5>G!lv2OC~06JF^4=n0}0!I4zMF;(ia0U_qaFSZ49!H#4~ z)#!~Pu?&N>@ld~>d0vKs5wEV3dv-@;*R7`wgf%3US}N6q;B(6zkTNcf&e*V9WlEfH zLTA>-*fc=GNWzGpwJZ#`K1`e!f8HJadCBsU16T?`h7IkKbMaM>J7=P-F1o6l8qrIT0VaijxG z?=fvgYBwXM2BmLQ%e;$$PTx_hlV?}RNlO(0HFFG_+Yyj0rIz-NAA}Y2#cPf#9&QsESbQ^N=lJXf?f#%YNB+rdwVqtCT^$t- zujkX|tkshbE2lQW!3R>@OW-UGzUX;b*?7V2&+0ZB zAStTGXoUfDGGU;s@)@PBWf?RrXVZ>oI=sa)cgh`#kt`p$cE3A%V_wObd0kTdH}Q?P zBrr$sRm8VF=3FY|1Z20)=#H~0fTRYlIaDqa0XaWmMH=pJ1KQn0@ZbYlFV3G)Y-DOM zZwPdLfq)>`5*OlE8kH{+R<2~44un}dczfZtO6v#~Tr7}+I=?HHm8x0_duaOlxn{L* zx=E5u^G z1Kh{MQ$)qfoI!&Wt}dzyzpXoG)1)yl+ua0%%gxQrU_PxllkYE{F*Kt$=um0(U_4jc zR5uDH3`$Qrs*GkF*Cj_7f5SM*mgP*~U;bw@1kC@OJ=4j?zDQ-w$!?GVSWU&>56#;= zkz!GPKDKqF2}@q;ZF(|sk9D)TSIgIP_QPP1>fKARn2KJ3H)R5$sshynP~?HbQTbPC zj6u5D%msYM0%kTrdmr1e6iZ1ATb*0v3*h`4`1K}K0azj-m4tuhCLjImv-j2U&$(KX zq-)-cW9yC_gy7b|Ve>TPKVSXaDz%0gsyJgDK*n2V#>o3Jb?Tb-)%9S zoX9L3!5^lWK!dJE!Z=JUsJ2D}NXa5@Q^YdhocQ~mwS$*q@|_5$cC_gu2!502+%v%hC?!Wt>T&I?2D{nEZdgRAca?H5wmt z`Jz>P90O0&d@IX`ZNXo(IAChBM8`i6>v*r!JE_;E&5yx|c}~JBz{rQhkD9^#4`Tpx!ekl}&rY{UISB~bXc*MBBW|kRW`w!IdR9@1D zvZq95EXuXMV+D7rFOi%up!iskO1eB5iZ%P)m9$uKgt~HcB~!d72#%$;>^Cpp)i~QH z-_f#n7MC+t$oj?=KQxp|tD0ml0&KgrE@k7bdC!jElh52@!Ruwp_IbFN2beoMo|iC8 z>ju3uH61#yZ<Lr`)l}e~c(2)hq|r(8n3b7Rlh3R(Fi*FH&8f!@LXr^`8@3rJc)#@fKlEGemqAH8n)4KG(q=m28hngQlN{%4fD2Kiq;_b)T^ z|LXq#@uvS@S4M@{=lF8mHjNMy%lwswIE1`HjpaE$iS_YT(^u5|t}WhQd(pggZDnZD z+FH)xpW`xkkTx(ZU{bGyZfwfz`_ka5U)o2$x5(5145=bgWDm}h2Wy9Sq{6u*H2tPS zs<*!}Wkjniw-Ra_zxZs%I4r6*7+KOm-=_8EjnI)*Z$^&Iqn&lPhs=Xy^v%Y89@Uee z9k2Vi9Fn(yvHbsLXN*ie{~f(u$#oFJ$G@Q?&1KK?|KcWL`%Xsh#?H)taEs zhNMgsWHqJ`WfE^985fA*{uzQlHI1lc+FpEN=#`e7jMlqqC%(@Fwl-OP8zt%qBX7d8wU6xnjvTn|LB&k?A}xdTPMFozM5QL} z^X1Cg!5?$D*26 z7?Yp%he8awSq}bf)!~!wz0slGc?`znS(ZZ-{!j*VZN&t@u;Xn-y%M{+5M%=ewwox- zq)g;=vRP>6PdbJ)s`Z6&i4a%RDGU=gqceL4G<*^;_1pcjC=qnelU0^+9I& z<#|O3ojjgC*?BUTCWF{CfXCf4B6qtw$8y0BfTs*bt59?2qFI6n<>=0ww*ksYy5>tF zjD0;M>Rbh0yg}qH$yYCuzqMN9YSv`!Y(@23ad!H#-|`l@dV4kiTJ+vOylRcmExDuX zKnL_%vekMkuIr^LbV1%`cy67*5U_Q$=<~rWx7D~&q=!@J}iqW z8mH3uwx96-%+jd|Ma1*el&-nL%s*ZrA3x1u7RyqNwG&>gM&>1Y+Qmh9)?AG@GtFl- zf}!)Ji%)ujMQ{kI&+5vRP&D2gj|D_wJVGYB0bV8;j z6B2tJF%SLLGPz~R3&XS|cezW5t+qRuGxIMgL8pi2Fc}VCq_Aw)F+6t4F2q zySLVo4-NJ7^>2DR9I(o+))wpjT7@6EYH)C*1EjrHXufm(<(Lo=Y`2eJ9AJ6^4IwCzw_^K z>i8GFK@Iw+*@eUfbpy?Ic;|HGqS6cc6rZ%Q3sLn%LFzKbd^7^a;M)g(FdTS^ViB%V z;!pp$zj;s)Q?CCyl~ki4s|V<8tYc=I1jX{B1}T>rB>`^a+J3a$ zAL%}uMZX|s=1ZkQ9SJwIooTBZH0)qDv$ckLCcVwH?|8KcjOjwfOx>B$L$3P?wJF>z zpow3AhvC;h@(iz!zEozhr;A@&n;b=+Vuc<|=AExWPO0QRc_thwobX(nw$zeS8ZJwx zeNjG99qdE-ljAxXL6~Sq8Ke@mzkLpa#S~OV@AhM&iF~R4_03Tez5_HELae%jZsH{f z;1x8jcUln}idmcNXt?A7W&RH=1N(nihGX0U)a~y|fm<*=C`Un;pU|h|o~l^O ztg8UF&t5K@l1HdGP)N0IVdNeaCx7QB;1Hn+a(Dpvo%qZ+Dgp?(RRde|G?mY;Ov=s> z8l%jm!bJCwDKhI}r>cmX;`Uai+-6TZCckK|XzSMJXe8mbhb!;G2Ht>V zl)HAe9%9X`zOg9#|A6_P%Z!iAgA~dOIKrUV5M%|3!v2K~_#ld(eRoq=++DBt+#(;B ztQ(eaLP98IloSsxOGai&Ivy?my!Y>xmDXa{Pdsi{;4xA))lGPBMPP3=g7o$qLB6#1 z8kl_~_}YeIEDVek6S_lrbEHhyWNAuXkNz2rR*P_-h3? zreyt;P0HD&e44^vA#c|0MtiQfVlth74Nz^WlDQv+U*n8=jrzJr`;+SeD!h|B&3x$J zUHXC11m2H##_X5uzWaz6ca`y=U%FDpbJzUiU9sq$+MkFZeZfW1jbRD0*G&CG+jRFL_U*{#`JJc$#$cCQDTSclh*1H)FFslz(=qD9}5 zPO)e}w*RZU^Zsf=+4eXhiby-6p!5SAKuS=WKqx_q^w6XxG(kE@M_M9Ek(P)eAT0t) zktR)gkQR^@Lhl%QlimU$T=1;B&VBEfyVm>h%^$GWnwdSb_x|kfthv=2%DKCdN9S`~ zD9|8rJx`w^ZS;HWA>2M!w_la348_8(tlba$$})m85gYQjxuUj8a5 z*EDce`i`(1gHdVQG?@CY4AY{~37g!!)-csp-<(1I=V{f5Oba(>6Oq?ObwIf(@r=*$ z;BNPs1SQI7!(GYhstvX%j+UFO-^XeUrDgrEkCXG}Pk!QMZ*RbE6}KEYm4ZwrdfM;Z z1B|5(?|i|Bg@5_De67Ln<-6Nn`n-3@1K9GioY_2mD2P40{kuPhL-sTSqLToj5p{fS z#>)6I-cn;4ipgr^nA)`lz2C<&K;!`#lJ~6rwiby#E`&-@!clX=fBLCjyv6S<>7u-wSeiEN zO^0kyqjDQhVFIig=$|BL@rM|!SFI?YZciWH6Q_iKH_(+gu4L8gQV7!e@Xi2G!t!#Y z2C`fUme|ze3Zc~;${uO&nd`S}htf+XK&I(M9kmQG0-sH-u&3o56wDRUk_B2f23S=! zA394G#P)85bvc}hRnMCLUJH%hKMu%dlp&^K_6%JOijZs($zK^WmIlhzet40lJK4+5aU)`R#<7 z`E?0j4B^)k$36OO>5xs{o;cAzDzLOz2Xjl#ZH`}Be77_N##3;c!;e^hwUN%;F-!c5 zL^C;V-$9mBj-Dc2?|GHKa1L}{<}+#Wy}qSU2lMrHKg8%#M)IaBg3AckqC=cC8IA9U zDe&DDG70H$S`jSa*c@W5zLS}a3FBlo8WH)S%_^i>5ts^l#spTltQMlwH)s0TO{UYN z1946LKbUdbMEdbS@p=ta%3{l%;Z{BcRHAQ$ctyHo=jqfs&>r?W+kDBE3Fz{+2iuq-4sY5veX$Q_)tjhi8kqDr1pVCFK z!Aq)=wg1JiHy;U@CjpHNfYaukLj?~XDs9Vo8vV@|xVxTOUrS4TJH@{Pmj}(Q0IW79 z13R+$1-~u0=+*goy1u_l90A*oMJ0{;)>LMUc>}i(bEgOkj!xq>X^UvQa9ga#k|Qv5H;J}>=o8Smj)d2~`!QpoLzFe}0Pv#8Rz694schLYcV?Aw?{!UU z{;S*Dbthq?B zHEFo~Ew(Pbd?&+Iqi;=1CoQg^=G{4$KRx!5-Hu|YlE9GO$rg5L^dWiGE5`NCp-(m^ zDM#?3h?tRXHX1iGmP#SyVw6xM0!<9?{avn~i2Xs<=H=T)lNctE18eC_C^kX}UIB=P zUG>;p_Cpj~G#&qfnN^TO%~fZ2mx5wy02b z>mRz_W@Xbc-Ez&3AmyA^y`0)OmBTr~{?m~aA2`V>p{speCRobwM5Ej%Nh%_>t6jXK zoIYEDS#cs!p1Hs0ZSqetj-w3wmcw&p-A2lTavagiLqB1a{nk2VG427%R=l9 z6kk4iWQV>Xfaf1Y<4_y6vICjNAn2h)k|wXunQpLLD^m1k;6T<1+3MX)x%!It;qV@t zsrZlGpd|r|3G9Xbrv2BZ(Wrl(?tY?09;A>gQIt!r-s^Q`Bf$Q1%(Jq&wMKUa+xo!! z^QV>-uH)~~>^{pV3I>n4b1mo?mUQ-ZUf|%t35carrwUKQJQ)$#K#6M>i+)oFgPJMC z`9}6&tqp|yvO)lto7TR0>^a$A7r3~>Z8Cln-$OAM)AwDy^>*eS9_nC+hju&=2t*hF z7&vPZd-VZ*=KaOZ+rIBp`HpoDv@3~rCT_FZo-z7Mc){Fd&1hSG&9W}Wu(RHb2 z6?=3C4Qd1B!C;3+pYrVdBj|-Szps99P5h~Lac7RH{3Bbovo#jm94oJ{UHj10CM?Unmg1h|I3s%0F9$cv_Ty zUd)6m>^bt=IA`Cc-m!M&s9GJ#Fp5QTqqyc6vah(r0glV_u z)-mW?9V^|h>q{o@lF$JNWv!X!gYYQHTg>I;RVPc*Pl$Ep=}|gXN(zQ=i;0ai-zv-k z6M3qP#d4g%OR5*>4!&bUX7^{S+a*KLQ8cH*QQ~L!raN9ht=XYZMc)-iyxD5D#o3Fz zfa3FSiFdBa)`!g~pgJqCaQlV$`vh3jq<~4V)%ixxhnXyWQ)7zW^0JM&{Q_|;nZ`Wy z=*NmMRlI|Wg=}lD3mNc>Nf0u##~Y~jJN2d7!L$FHwZq<%WEB&Ol06om1qPkA)VCKg zkLUk&wWO%~*hh$I4nBKY{1i7O)4GF1JG3m^?E~VlPkH8C(rxwYJPT{{`KB}e?upbi zi;~>;sZu%Q;8vyCP;6-|#}uM=$g-u0J31H1;juJHbpSB$9`?@sYy2%HUJ9dQN32E+ z7F(p8?@=Ehg(M;JYrznb9>$@Zn*+WjAvgPF4Wx~#h>dB| zFc7+uw{viEo>qRgiDMWQz*9U=w?E605r!`OFl79ihi%FF2eL1KEKXlq?rbYG-PC!_#pTv+bdtQ2vtrRA zqFsXv7r?-?5xf2a^kYYT5<0-0cO1+=bOSq6UtfryJCdX1ogRPwv(pwN;%rFVBaGy*=9-*1dQJKon{Yv+5SRmB{8~a|G`ho;f*c zPxDgRaedb^?pMA^j+kIzjyoUJ|PDvI>Co}5=+ z=d5|xehgWMto4r0tl~;_Wrm3XLfdIC#-~=GMhjybMeA@!BIBT*Pse6Asq)4Hf3Ua5 zFA*Y-tA{Wo)EPk8cXrJ54MnZW*?5Ch5Dr9{p^TMkJQLWxMRr;`F;`i1?UvAUO$yE4V77_a9OB1%rqY?%;R#N zF{|(AG{oTEe_kUlXtP5(HmrX3VT>l}B3?4C_RYS^kKLaBapa4)2RR!ZD%%qk61?a| zygWAi;v(;-?=_uAb^2TBx*yf7mK9%7+NNo?W z#cKX7OEwvL7qg`Mvqt=lhlPG;m8;eabB~kpzA}dNJmWs2Udwj!2>|3~tY{dEK_PMt z^J82IUOXI_7y6tp4&SMS>sZ11d3XpKx&bLl^#uIA!9x4+ zUD@JEjd8^RVb(Q%9s<_!G-0JDp^{O+0RC#M6NB zQyJv5pfQhAEHZg7l2X?|3zZT(Z)KAB4c%}m4*T#5~VEJG;~$)^^-c$M%VB+fK)}%@cOiv2Ay3Tb+*Wj%{_4j-B)6&b>49&UgOU_?_BS zwHInVwf3_jl)gxPhR1^k0|WakBQ3511_m|$aSein`8ZyVD*yEd6i`$~4ff;b18Wxk zagXaNq2;RTXyNK%>|zdP>ELK@&HyxZF*kPrS~6oKeFfbA@8F3Lc z&+OkhUfBc^8=x&W*XfB1N|Zk9wo6!-FeTpw6M6 z_fBN;_-7}U2uB%jQ8hs%DiPjva;|2GH7XhY>}7iI%9EccZunoP=_9D_Cb~L1(s)@w zh&1R7F{1u+5B9hIovJ|{If)Dmyz042zB=-V@?=yMK!`Xjirbdge;)oYS21>c5Scq{>LCa1sJr#v&(-5x--qz*liG{cn41+L2=YfN4&~w>`um?)Zuw0_%p=$nw|)6v>A#6q_x3JrjGuE6Pj+nj zkA2L8(hv893IbeIjl9MsSMC!DhODbu2ZnSo+P1uf5M{gyDeVgLe7ZSWSh-6teV%^! z?Ye0A1Xy(?V&?xRr@`J2>57sx*RYPOT7BjgGqJ;KGL$WZ;ho5)-xwi&E&OLts6+&aZK*^r`sPg zyu0mhkZ1lq{>f$8`K*vO57%P&!AYWj(BUNYvI>e(_wN7i?VrBS#-{UnAF~{eVq5^T zeP6v}jEi!6AH5CD{k+Jm1h*FyeNgb@hUdASjkR0s@_DsWy`BUA*KH6je(^^8J_>%Z zd8U(!?g%~^ovVo--qTJ^5WxPga{tzcAhBot#Q#WXcyIKN$^S8ye;H!Zj%lh_$KWu% zE(}U!sxXQK-0WPPO9wB3;3qL0H9iwk(An(0c=&wOVXlAbx8o5>b2ClxNXNu3r zf1yZ@gsYf|j>bl#xNCOh&N9+FT34ij*SC_Ss7~IcAXgpbZx1B5wjVywfu&KQUAQl8 z4%Pa!UzA^6S@B;towh{zSUC^^)H04CxBp&uiu&Rjv26K*0l|`$w=YQaGA0eIA7)wL z^O;}@CmP@GTG$b#j9HNy(OHeW0m)1l=MYveVT3z4o}DJ5Ih6AgEBX|3=q?!h3XfbT zO`deTCYtd)u(L_HHUv9NSPpyfsJ^!vd)1Y^&dOHy5FWiqnRm{fe+bGDTc? z)|8k+g$U@+yd@B&E}ElGq6Y?MC;{@>lOs`67T40LHTIiD(}RU&gBvlb<+u)}NQ+5P zNE;dDsym9BwE#1uDS*NOrHT#>Z8Nz~EoAj4JPf~Xv*`S{%ITo=AWF%TfbY#^J zs+wT|O5E8Pu$C+Z{T2#x5{!HX+jUdQ?5QsIHWZkXbEqq7u1VkOL+`6{Rj73^Fwj*G zG%{KYwfjlelyNC2;B~2}WzA}!WgtY!^n&Z*i!syP6B~|;uBoe0RZ0X*(B<_8Qm2`2 zpm;(Q2t;XuNt%x%$7+HgGVlXkSTvFcO@m@qSz5%>F<8UkA%f)@;Pq7o$YoNT2nzZL zR3e*@K3As`OcjeZuu;^3%gX*NNwq8xSE+EZ#^7-k{F$OtdD_r4y3Q12SCwv(gI_{P z&7MCdMq@`wTmot;wn5+s89SJj1qAnJ1e4R2oU1{*@I*AC(GXI`qVk4egcdDJ&JF*l zTQq4FM+m~D-#Gq{e)#2Z{xYVt!7DUr5y<+9g~2CQExOqTJL^T|DL3QU{p|czt05jp z(bB*^)@EBwYKD4eR5{9QX!wZ!Wi=?eheBYDn0&vnJ}sWC-e84dF=rh#0x*>k6fe5M8oL;vKZa zUV0=%H%XHJFrSm5VUpV&U4Oy;_ts? z?L>|tc}lB z2Og$?rp727UN*;=4;ifRl_oi5!xn#@>Om)M>g0B-#leBkt|{C^EmnK+M0VgDA-vPA zKe@~Y9h}9vKHLog_Yls-OV8VVEBNQ2{Xjh$jsBs1xemBsxlt6w<{!U%@o zn!Zai-~T7f=1#MI#6S#`5m(^WD5-pbYm2G-N8sK#KM(olfPg4Vu2R&8LrQ{($w;f* zK-x@+#+fw!{f9Tf3HE|XQ8Qy>i_5@bf@*oX1)%YZ97EGsO^O7a)l}8bukK{%P^_41 zk=o|b&Q=U?!4!;3(>x{!&=kVlkw|?Njp8k`$IjL{VkwLHI*8G%a;({8A_cUv6=d#8 z@o3icscHl0Q;Y2v#TwRkiSh^VoW0r^_mwhESlI|FO9n?yC0YwqSlCk1ge6!;Db9y= zGTKHF^)lg$;H+ONs-OxZIWpx)s~kjaA{6w#3eJB?G~@7~h=!Y?6(*<1MvU(>*;Dx{ zqdI`MVXUt%c{mfIC$%QeS5if}278v7AZv^cX;qZiR@B;iLs&e3!oiMOtSH#RXkD0m z5-#Jce2M&aavjl;c2I)@*OoD5e)4l2uZG&bs501URWTq~LC~n<4e*zv0V<{`)K2GGCnC&A z-7tY9O`@ymCX2|NUzGGSZd?P-_GPuP=EpSrA^|y)&9=X3*S^=F)p1nl(>7Qu|3+8gSFx|YOwtUPvEAB0iZ=p zP+3eaXE3*YSzncJt`;0vh_+1|%!WikLxBzy&A&+hT_dB+Q{v)ldy*WHkJczpQX~oE zmCQIy&$c{Z0g>G+6N7Q$bH;!bc5GtvxdfN0Nc{VZf*4;6lWwu4TLn*CYGjUDq{ z$bZ2YJyCqb%kri4pmN1rY8qzepa3-QfqM2+lAx-81W1QXiA_WFPs4LhTBLX>f zZYE3T;zkL>43fDYr*s-B%g(Vfu&NQhDh;x1f`HgH=k-l>qtPXnMcY)wF? zHlun|dSL=F1$Ootm7L@)H|k?7i>sBp;iG;L80A^k)KK{-MxSMZSP$A9eAC9sMVEgK zHmonwYlobv)f5WN`7br=j#TV5h=Vc4P#w}sm!q<~N4QRzA6lj)nS(9|39GO!^rD-2 zlE(rdu!nt*;{t&FdUM>i&f35G6sep8gw36w{sUX$j&4LtQRZ_g#HPQ>9HEW>P=YD% zEElH*XQYf|V4YAMIhw~Y$T-llWB4L{t@6DwIvG5+EeZ-YCcJtOUIM@uhIZnW*)RYv zkOZ%$B6}_R9c8~k%hb8HQwVe2)mkRH<6wn3>%X4QXTU&2HIgJt!i!8E zH=_>0s@24s_p3=`766|dV#c1M;vr7#f~xAf`G1(B-wWKC#lBqJSMB@T^XIX>K0f@t zYHGWmfcCOh!}oGCr}iUC8%ELU74gTwxfJ(`d6s~W;k^&ZG$@!+xnm$YL)zrz6G=_j zBBczik99kBkh(HCfjY$^ysFK}LKIhf#$WlVv1*4|CU6Fz^NsBTMe>~wy2~mjn55=R z^T=h@lVB?7BqUi!*ZeTs22Ra6sLWQ&An*OmDrLDUw0#})`+yIh7Cw$ zaSOQXtQDILRLKPB%vOn~-ZjRR#c*GgYkHops4k0pFf8)eh9^Mz=902-MhbJG?uVi5 z1C8*sO>wJGNAwVQu>%=Qc6sr+(D&4cavUXTq8Kpw^rGz(iZFsE3U3&W^#C~tn3Y{n zs0BDj8KY%j zQ~H1!=MyI2ONDIWw`(u7`QezW(oLaeZhTY{lIL&e_bdPXq^j1>cVjq#-=4Up|-A z?%H|mSr$uMys{C65;STQE8hlFvCK?IjUo}oIQlWL1M!AN$bR&<#;pfc_pk>VE5t6Y zI5Hpfdbgc3aa}*ke}ek`SX%mYGb`5MeBne{;=3u;#byo>rw60}JwC{*&=gAd zah_rgZ|Ix<^=}hcXSl{15DnGmp2YF#j$qXipCp7KCIT&EN19s4AfhcHxdcVy*R)xD zr$-Q9ASxT<-chR`x3nS7KM01N57DH)Duv454a1a4Z=@;?X3aFOpWK=2Lc3*H-e-}L z9oB2X89ECExy6DBhLc9c6+B=n0a+DwHX~dmnLZz#zF9?p%~K z-!iTD6^6j&Zj0L#q;7m6PbuWiw1-Wtq2-Uzg6B<3H|>}0d^BCPYK3bN*BMl5AxR<@ zT2)W8_WPCNN6(q&vgz60(H3$`J#NnnnYzP@76g;K@VZ=qK9mfSl-yC z2~PL2hi!bzi3(VWX5@3-2f6On{|9MYww+d&pbOIW^uhCe@yL@4)p~-%I76uZ9?!Q{ zQSr7!a6`Ya^nTHxlHHWRL+FkODPV$O*e1(y{L7Y5R?fp(cHX5QFS37|CtKP0JL(MQ zPGM*S#j_;-JQGjCyhc}QRLv{H{QV=`!;iIjY5kU?T1#uT^dUw6A%8 zH|j=FhVKc6zkA@Li1_k|iF`3tk37g(M{2v-3YWB$Jfe5*@Ik~q-Nqt=A)X^GLc6sd zzIh6Y+%aMxo>beCr3H&A&l>(KJ%i)(YKP6-4R_+cz!#>YisL1{+dF|3<93kKWtYna z;^q2%&+Btbg=wEY&k@~Pqs9FA`t@F;CpR1$LhF4b9Z-AZ6zKc4DC{}=6?kE*n|-gb zXXSs7HzjZ|ilk}861~CL6D368M>0(Cj!o3Pe?Hhiiu?F(?V8{v&wW!F&D+@eiGKWM zsqq%qY_D{BuP1H<^|!}sE`86o$VJ!QUT<>Jz~31J%MA1QkY**jKT(|-U4J+XXhG++ zhv7IwOAh`N3~ZMoez)e(Prf{$y$VyIAE{!R=RPr*Ej-bAo1XX{Jx^%pNAf!n<*m+F zmq;f2GqkOvPL_Um&xn*8ZoHb2Jfx8qO%z4NgUgA_qY3L>r(r;=VzfvmqXFKzKE7kk+r=S0M zlRXz?#TxgeGpw@q3EFVWq8&VvCauE_Pl^J(PnbkwCGOJ4QsB0rwC#4FM;*@mgd@r^ zW-s7M{eq8?Bd!9|gaCocpubv?BHW0K^Cgk2CeCbmgW>{lHprNAp9I`P+7=t;i1 zwF`!Bp#U1RRwfe07Po;{`~iA*?+t!~+&`3Xfhigw`aw#($Ge`=yUAM6+wVMCp{G0l z?Iq9;vZakU-&O=`|5re+c3U#-&fijM@*H@!Fgp97bJ)G{F-rrs~4C`LgUkF@AcCz1QHYc*4!94VC1WkY3 zV1D5_V>^r+(}-JqWZ695OTdUO66Sex%WG)J~P~U5shi!d|3< z`{Mm&ATL)WPkk)@`=?PJln?if{5~53T}zpkk2+`dqsNXe%h7934+Bqf0B;jV6vP#K z#I+{j+n@UUuNNjOr0RO%#VXbl-F|s=(;A+d)|=~?+hDuFZddrw+`cvECwH%Yqap7PAUgoCtuHA>r1G1- z+Um;G)UD*Ssk9$n9M{x7CkGv*I>zoOGWCe*HZSHg9fk8_u(+H%x}270&EEEQ zzq%}`wm)>c>H?;F;u?v%lWTKbDZ@Z#N;R3AR-LE~lOD)MbC*bak3tH?UH-Flz6oxw zPoloKLT@<8HVXH=HW=fW!#8UJJ>%8HYWD2?n2&vbc1e&bs@%kOquzL0R z;q{j#zH~yy={ii_ANJml;09J}Avwc#)3Vq-Q=e9j?z=s_w!n6MH}lS&cKEvZwgPkq z!Y&!U&C;>(D>_2Rag@z{{p~T~-b7ye=V-pBe1#gEyfJUDeMOzPt-Xt-m>@(V0iQLv zq)Rdajg4}$@1hAD-=5r9!=ES({~=Bd&DQSdy*`u4&t7pc-ah)}hNDZ5+n|l zQFJ%A#rf%toW`cNA}5{J=Ih=8{~v?l&=J2|9RJQ|%zMzJwELC^Lrw0xWdA2Wt}E8} zqq*1^G~w%6x~|2z#d|M)E#du9Z1K#Lx*vhFR9#$IBGE=qm}yc*8KBWXL0J08&#~M= zY^^cER+$Hh&G4O(&LIo@4I!v{8j=IzH#_2-?+ndm+1<)EbPK+pJbdRGIgGDd&_Fy_EJr|6DmoQmOKxNdCv+S zd*t&RoNP7y%d~)d&B`@7O9noLQ|g1v-eZ*$tyvBCBh9m2vqqO0%x?i#T|!E=lP{|V z2;{YF7r9H^_m+iEPh?9C3+Hhx)_oWy0w7vPpBc`Pt>Xu-%vh6VeWabU&ScPK_?B;? zknf9Gjh};Zzp~?2N2Y1(slw04ZwmKYDe9hKpNMI6Z*Vq!Z)rApU!dH%x5xL1aTM$G zI4-??Q`z6FYt1*Cw~Qx{^T;JhZpIsj7EQUY*V!It?fL4i>cg(b{r%gtOdbE+PNNOf zf;K)}A(S5dtjDUvD;#X;i*6+vrCE_fs9QYdfHyDA}Bwwhp7;X+H zhG+X+=n&6?T(MX#f(f~wLZML@hci2g`k9zO;6hzH{!gB9No_ahn;pm2E+Jr=HdM4* zP1|z6TOMp+UpQ@vpV__$P`~I^M=%Fs-V^kvwqNnHfi0>A1r9pY_G2Ag->bGdT`V80 zSoK-^97GpB4(nsH+F!ZQ(<{T6{a|G5&bVYH3E$k&?|FadB0?H@X8OqYCetL|8ov>v zq+Z?iV2PnYiss+#O2iZJyGF;Du(lbBfkW|o3 zBt;Lbrq?+Zw!(UQ(9ZR>J_#FaiNcz*AaHpyMogLUH8Yx|9QF$%44d5Bxg?shZk;Iq zO08Ve6;6jpV3^~qwF(Prj@mZ@cD&76Z zATH&?Z%9bL{Wlk&|Cj?)w08WMxN7YwUftca_1tfqZ4YZ}pGGM&KWFufnj+N3URF*a zsZLIO8F%D<%%kLL>{IOI(n@jy9c+m&wF}~S5*C?KWzRheM1%T^< zKB2s@5c``sx!};%YJ9h@p(yvGVF`~H3Fu@mJ*OOrSLHmV z)Bx~eh(LeIh-dj%uzKR3onD#=LbPP2^d8?*k6Pz9$a&?Ite!+NT{M^oMJSpJ|81hP z;D|MM*^C71`fU-9!n~RzZsz!y!@z5jbZI%3kaG;xN?l#Dz-DT8Alywug3^)Ie0O~{ zjFBghp_O>nEh|+V)b`Z%e)^)-%}K^(TW+7V`Ry|o(rHy1qT{qDJ{i1S-BZUeJX30o zH9PWgnf|r;ty7mqHJ+r#rnN!LaV&rSbcx1{_mS$?6J4SG(=>*i65V=hpku83R_3R< z1aXPTVl-tFV=%7W9A|o;->A8cAx^)*f3pE9tsEKO7Zx27X7s#mR+xPa$21FFl z0z~V3{W|MIGpFCSReLnv{(_lP*mbAv7vdrcU#80X!QxcI-pO%#U1a+%nks@u4^KV z7^7-8%!qstR%lS@^)k-uM-COE&;3m|5hp6%Mc8ln@8#8}gZ@lWjmAMRZ$ie&MqyE> zlr9gaKN{chpqO)VM0IL6eKPBe=nz=dG0(+qwq)E5R0h_(wB}A3#{gJlI+PRO)j?pk z7B15q=-Nd+BdAA2gD_94TyZXg49h-{GA3wMG3htG{8a{NA38KpAO5xw$DLEyTD_I6 zwq!1ItJp{9!9PI1Hc&=PFgYUHo^2HJ7Ha`=t6ZbCnoE>G7MvJAPrQp2jIE8GNePo; z@xdM<>V%{HnsP*xEXiN)XdEqw}Y2V1FX{t zDetz=T&WC&fkCER+=PA+Padr}P+JNRj3G^9MT;>K)@!1u@$kO!dY;L}!ch3QQ#{;o zq7*U5bNxgKA3~YBW`%rD*ezRnCS5#gZVvy%pZ_TI?z_|NL%z5lZ%8x-qX2*p7%L7E zh7G7eBvPoE5m(KRC=m^)^Kt1$?Y!t@Yj!Sr;10fNWyx$1qlnWSHt&C)1J;~5mts-+i*(#`S5>$1#%=O{PGbp6dWlBB{ z=T2K}{JFaI2*X!P;#Au+P$f|zB4CbvH}Nbbo$0z7rV`#%Q_&GkQsq#YxPOX;1Hce# zBGu$F98Zmvt#CM`TWPk9vrjBgZST6^R*X7bc9o^ELV^NBwf`867d6JQJ$Gi8@-a{0 z1=@U3>t|NsCGWb4FkFhk{dI)54T}ckkiI^sd9Mb=-zMtrpOqc_)Mj+;0*dVa`%i zz_=~Qd@s+v3GvAlj_7#j$=Ykd|Du{N%m@p6qp+{`!}JY1k_0i`Ys=GOh0>k(YRzu$ z*R0{fSx-e3p%)haJ-6x_#TkJcfp_hK-pTN5MIqf8sPLgHr&&|&6c_4*aH+u^3?4Ur zy!1>mUx_3S;pBF+LhkvBKfW5Y5b7#R8_L)ULl%m#-p4~unR9v9qd?fhcY=e|IE|n) zKgwKt+F4@IJj@Jyy_o<)OFA?YO=$(Id_L6WMG`BXze>B))jDC9iMJ&sK3=WYGq4Sz zoN)6o7&(GdAC?o&cfo*f|H9PQ=Y!6(v4&4J(_Ru=pO0UIcl^DDsJ+64R$l0m9l7Ia z5=AsWNbk9m6vCxFUU;-7ue{n^%j$f zbhi>vr`}gm_1tF-vR_Bue*0||@`F}=2I@GLt$uy+@!GQ}$$iHF`S~~? zYoL@zeLGX32fEcn!PrvpuFZ5*OmDrsF!6YV**@Ma`44d<-J7iYCV6@@B5I$>+4Vde zc0DDXd%dfN0VxbR?(@2Q9%X*JkM^{g9KCq%=xaHTZ>#{D%ue?lS$yIaI?BE*y|FzR z#$A2&{!j{J;aguT9C~|JvAU z1r17IpN|`U*@`n16bw}M__7a5Oj+6e>AUQ5hsMUpo96$;BN$DVGJhigBXeivYEc`D zTm}oW9GI7t(rQ*KuqetMR*ffw?|Wza`vLBo@buSM@8NE--`{YTt~%#i_v5f*%khzI zSzSt%?V6R@R27MbKO<+kcAdEK96#G~GiUVOD9Rfj^4&y)RZShfoKJEZT3N0-I+&R- z4X~Dz_YLW{d5d&hO%T@S{|m`+{XZ2kNavC zlR^1s4pWP3wWGt>1OsGyf+KsNzLrsW z&)K>&_s+%_i!^4_NbwHR;sR*gMEtptCkzM**c9Oiq*@CWAIl#PM+X_EYyf0wJ)09V zgU+NV&>!|2c~SWXhjdxmOmgud6h0J{L`^g_RrKVZ4esD%X)u#iuM@ka!BCNm4`NzP&Z;#E%WrvGv%Lt>qgK+X zFQMl z`H7V)tH)#!xc)Lw)wGF(7^pWhHjXTycqYi_G|`-<^eA*9gPA#9s$BkugFYPuw%z= zYV88v@9u8C?RvBu$Kz6bvqBd{r5N`um}Y5XU|cGDpzNmhX!rc`sCXq3vvoN|z`dm5 zT}nAZh4gfNIx^)Blx_-#I8T)+Dy!3LI2iZ3u=Q4fZWf#G&9%Nw0QZNuL^css_YIy7M3KuR z`j)^!t>C0U8GoxoEneP^KW4I<%Ou6sSL zYBlwGtNltebLKL0=YRCg6COP`y$}C#Vi-|BiQ)bQ-q4^r#=56HVR)5ZRz_6QeMd2* z0Yz?f+0~9(#-J29$~_}WqSt*;EIi9X>|OA93mFZ1L_s3xCbMNp(H1Qfk3M(p5{Aws zXH;g#DiU2Z)c#b)U4Vg$k~qdE2>3}kP(R2UPfG#|JXYbWhqgqcZ@~Ap zQ3frMJYN|-7=?Ov-dFY#_(fKnOj)7G7*SlMK)~R6N91oD=gM3*z}h_8`})chR&O$i z-*&frxqh?E^kV2bJj&1gu5ZHuH~z8&3Y^#A&Do1v4sgtErg{=4l~n{@1ntq9;0|>8 zZqN{1T`xV}j~ZIumO*m+Y{h$Cg!%j#f^y(_5xFp&m~e?f$#{{obXF)xpM0b8N#Y`Y z;*=t6=hG$riqRQLA^6m@l;N@fa(XK~;nahT$Z>}j;xz+MS@=B9q7ttq zm#jX@y|f+B!{V?nlI?SnpEER_+rt+p& z-)BI|@ymWJkZ8N+^q!K<>rbC8PRGNdUDvpuUHg~|)U2LG&npgBjyI3y<}JK{tvLh$ zFDB%a6rMq!qOGkFu3ouJsZe|_W@Hgzwe)7149RR2b=dhfp|kOz=A}-8t*ILXqgwj{ z*}8cJE-I%YL4Gc6iAI`4f#M{Cg2;U+{jM3`vr+F2fX{sT=QEx@ z;mt3Mcb6R?;+hBYA~NEoAWyQmO@UWG+(a$NSb+?6w@Ee zP-nd2xHQmD!bOf3gabp$>_}PXMje%k*T2{qdycIS@0LpgmEh5mTnFkKL$#~|c`F(B zSmij+>iTwOs#2OCf~fK;;c*N?eDmPqO3yd^@?z@H4a&8ak3UP@G=G+3+2BoSKTC|5Qi^PEAqo~*)#-mE{PUf z@2V}{K$B$reoMo?hM;0eIXS)GPHbNaaMWRy(B_nMk!%?jwe?7thfG2SGql%VHpD#N zX3@D1%VzDoj+LVw>fRy6ncgyzkad32^av*E_xRE4Hhx=C9Ri-`gT@PW?@ZndpRlu? z29O9`hSD?Ny?_ox)fCRzf2I^lohK?^oE{&LO>WEHc~%{GS#&p_arUm6f$lZpQ2RfJI_G#5I+En1C2iCI>pVYC-2 zs_KubQdBdT@n>IeYgZ0FUrDF1S(H19g{7Ff{OgnxxpM^h1#BtmVZWNZ99ncaT35r% zuX(n}$)P?=inqXjrH=Bj2mb8zd%vC&ebg~Li8Z4R$8;v4_tEj#g!N{{D9D6Z<9zoc zktQx74=ob;V+?>C+XSD==m?{as0ycqputq(mQPd@cq~3*>fvbS>}4EX7W#b5`_rE* ze23um^6K?#7}euKsL*!JQxT&fWq$P-UZFOf-h!p*2X8hRZQlN{tfuh{4qgXfFIuT^ z>D%bqMA^~+m{Ccn^+>YTDgs|Y&a`Su!+Ihn0n3cQ*&x~7A0~lxn zCdDECbL0A=5=tvJp9yBfYKyx=5c$Yaf(&0V6g-azn0S4$S?5-C^02tB3I34e>1u=g zTmgP38n306+4t`hoGciPS4rfdXo*-1;b>y?t81}%fFXa$#b|JrVIohUB?x(nuCf6&GSH7IQg&F1PIqs|AQ_OIbp z=@U`nr{xmw(Kr!&3@Wq=+$3QYP+-dNoEP2T4>yY?6yktHeLhIq^O6$j(|}!f*`Yg| zAEcqcKZJ_Ti%4<6`_QeUEq&TqeKY>wldHkPAzq@;Q#w`6>EtI#S_m^KXS$Blb6x`F zIaD8X=Z-(0IVkf#%QT`Tqe055qMTfYCqxF;YbM&%$dTY0OKi2RKGx?03;Zl|Jd5V{XcEYc!(j;xCp6JJ@*X99ok z91W#`aCrhdnS03%?L2;cSz6#%GDhb~`SHCxJWzlnm~te<$~Yo&Fp`?F$ifQjy!fI~ zABML`1_x`%;=~;4Z$|9A0C^CGW-c%CnPwdvd#J1vbU}TyEA_hR*4D8FGu-Q@n9q=J3<9fQfDa9 zqO7vtx-`7&#|88T>Y9uu8-^wHw70df=21b#aby=Vu=uy!1vuGg!2#rTvCG0{8)(bP z+y#swHMy6i!0ls#q{>WT8katm2|WQqYoD$k48JxOfKJLx5R2%#LCz2iP&(4^D&J%B zyDw03+P6+8Hk#7uBVM*Rkmf^17RUE;AZPWX$s?vhr14d0Q#a03P-|*A&c9B15Pzye zZ3i%m;V_Zs>aC5z5K8Qs4$tuzm%En0cg$9=0 zP0kVFV1)Z4wm~vziA4$FDL)3(bP7}C86x(kG+bgghwydBa0CASAa{$)l**vo5JqPC z!NOFxx%>5~{o~3sd7Q{0N6rb#il*M8u83sG=cI~{$8ng;>p9`*>5{MdIHhOgm<-tr z;R@dWWwIwj-=0|sGfM&%r41bWJsPM*0}ExfBVEBr5&~vPqi!#ne7wq1Fbi4dhEycH z_nad$ixY)_sWT8$ZB{k7AQz=V+Tr?ee5kzPrrf7ZUoaL@GF#tGt?CxzXUu?P~09$jBPZVD&zodgz&p~x9nP*nR+UKz!Uh?es_bAJ-Oa3oz_3{{Z7yo#zzU-7KM zNl@@sYsnj`YF%XaS=Bp6%}RyiNIJ=E*{`)5C}7W%JjBY)?}q*t8ysi;wI}BtkleP?RRQGa4#`k! zSy8Kz_%8i7_w{4?d8PEBv&9l-+K5@F+FNrZV{$>7IhB(;%87dIE)c*~w)t z?BYG^`q%q$=^~6aa>{ZYbl#qu`t*SUw{I=*cGhqai&&=gL&60v`(h!aC+d{yM~E_J z(kRq~-_@lVQBI;p$tmk02%)Hpl`@+B)#y2zbX*sW6ZETQ&3PB^Y9hn!stF0E-Twai zH|AOYTeaYbE3UhV9S;Lb#+?3Az?pd3kw24(_)7ntNaH6%_T-tO;WW?DTL_<_O)U*W zF?m|MGPDY*{?f_fOB9gtGg6gshfe-LF{OU_IFYsF&+iC;K2l{;w<8yIiRfl>l?26< zAiMrNohEU04ZDrSS#fg4xTymt=j@>^GQ zq`}t;-);BBUGdC_1s%=1Za@S>JBieBLz`#@bP;p$L_vQ%`GWZz7)X{k5$^#r3`i=# z30ygUgV~H<{zd|;tccRih>)Km{FYII)Eik30q90Tuvdis^5$yT`oMs zBFVeD8(vkYEep>WHA^8J#eSi2S=C06;0z@@ORhi>5r_t1$)HS00+#^uz*%%7KCdmW zll>L%j9DcyE!I6NGD&1(#q@07h_m$y<**S5D7YLC*CelYC@_pV@#;sI#P$>kBvJs4Sem>hHeE=mG z5Fon*hIy>R(rEDmZxjE4B&nwjLD$ce-ZXXEqY89nI2u%obwb>&orNJn;!J5@7|;9J zc1AZO=f~jE8PgPx3Dqb~2wN(7)|O5n$4NHVR6-J3(x6F`Xfg16+JYRLp^k|u3qpz0 z66gy!E4FVj%IGe6NO==EAxM@q@zy*R9s(ohC}%QwOPD87g^WuoAlZ%6cj`_jJdIX< zxMlP-f3CUu;pTgx0%ZiV%&A2=WQ*)^R^ z$y$F7M`mFQA$bZFYQ@cl)d4OUX;#PFacG{thBCH7&*OAl%MJ~dqIoe!G-N-}wI80) zS>H^Fq!u5xi?g8nH)oRhPx;0{-l}qY+Xt5MuUy!8!hg|R!*5kUe6hqlTmlOMEzQJI8hu8nQV7P2IxcBZj&>8fJx?~Eun&Ug13nFL9E40IA?qy&9Fsbjg%Fvf!YSaC$j~_%De!U@ zl{4iH9Uw}~(Qs-n^?YJEFUDDlst2e^f53xQrpBomUMbCJ4u&Y&&IZluwx9R zz*{AxN;n6Z!7D|~N~shaHyZz|WRR`wxJRocy3TBXHDIm-*oB@3^XyTi0nOoDehTp_ zSFU;$<+^vEhga6}YLpRa$_mt!C$1Y0h!&ch{3#r1-VFXOKs0RxC}j^|Yw{a|6Xy@g zp{MpKuTHD~$)7tx(UKH?uPvbj3n`8^yI9`7;hUDC+E8+hY)sy6`P}oYIRD zQWP`Tb0s~BG8j7B1KDu)wphRN=LS%@jmuZB6vac4DhTdA*yMST>qN0LmO$cK70Goe z9iCu91k8ZzXzf1Jr{-xB6mtVG%8Sh>@o2?uyjB!6r74_ctd%GnuK%tE{ksVFDH{+% zQtBFpUtiC`n3_9HM+z*zaJsbr{eFJ+s}K&s7|)UA-6uk5ab?JvE~gqHY6cg*`RVE4 zFQ(u$iTO-~dBI0<0goTDMxIcBzu_A_v9E!_7rzqcCW>x&VE6Ll)kmqayje^u);0T2 zl(f}P{8y1jH^QRjZ}U$%|I{Env0I@mdYJ9uVsCb8_C(dg_iqu%Nb| z+3cw2%kE&i2XMEf88DEx|CnG)IKFk%H8hZQUs^sb#q`DdQ~%SySxtY%%_kpbSdWFj ziP<@9L7%5Sh}rH$b0lnYrO_YE`Z$H7;y6a*+6z{LuQ1?2POtQ5^a)qQ4QDA#*SjBd zXXpDZo~AF`^J_W18#j1xNzjYD+h$YVe*i?@j(F&nLc<$zuL(&=+Ifd#F^hKhYf_%Z zJGNcF_O?#=J$qZ;nCs7N-#B!0AGn$5eL^Z@b&DN#FcF^?Q{?rygQOTY1HQjH*AWW& zoAWaH`Y>#1HDedH)gJtx`On9T9EE1g4c*Fp*>A$EJt&~_A8!)y>+8OJE3z@)kG92yY_DePM7K*uH;t{{OC-^Fwm~!}UF2F6!y5B`Kkx465l}DfX>-hs; z-FiW5`t47D&!w87L&KG*OFeLvcnJ*G@axM3h?gj`2NibCe~_xmxAvZN z^Y%6(TjNdNi{iAii9VRF|7WI+^vu$OtUo7B`!Wp8e`UyZlIBtb8DB(?PUx$Y61(nM z!nJxtVHSCG zk>)>a%85n^i^6sXCxQiFNV{7ez9$Itk^|rdA8z=cf^r%=k0x?Ajxvakx{?$oa7f9% zi{|Baar=>bUlwhsF|0-)|EN*C80mif%@NNN-~sMLy_J>6<*U%ID73dwT+0TEo|4D| zG51l;CJ|<`oF05lcI6o}>=!gwaGiQEgarhnh{6H}=6B%MLo?uP9BAFV^JXhG8sGc2 z9`)}`t1pS8ac475q0#K6RQUh=7EG?iqBq*v$+7Ff8+oUD(Q0-hCGIf@;*XdP-4z)g z1b5bL?pwNfN5JE5J{YbO*KJeTxF||^7`*W5`WcpD`Fhp)&b1c%$o&5D#q&_s+&20D z5%!j0adpeOb_hX&yGsZTjRgn}!GpWII|O$PuEE{i8h3Yh_dw(B4*juSTWjy{taIkS z?rUD%a}KFdb&qFM3CiIi5l^hHqBO8y|7MkKVZqv9&T_%{%kzeY=n28*p81?7e>a`I&@22S!%3pjV<5?!fuO18D zAqBngZ+t11gfB;fbSB(8kH>YOi&-+umD{|ECy;DKJk?{ZCy zU!tIzk(UZGn5XF%uD5o-gQssjp~TK{lzQ_M!ykR(kFsTUu?+-BFi3n{mP{KeA|fZ* zW?b>ywST49rcsE6J`3;O>2+Iw(J}N`33a$PraBqRC0Ol<6{H2C8V$)b70?~rNEqNL z5`EiXxJ5O4Z;S!ckGvNafL8=%`g|}@OYP;)x1Ko=?cM-4Q(?=(eeu#w7w2L{5DQ*O zdDaVBYIop0vNqo?Uk^?U4A(QBu|u$CPWXv>F(G$3?Xb$-e@iDKd5)wk%`5HDwP$wq zWSF8UUCtiItQ0h1IE>Buqjh(pz_ql=5^J*wsr-Ps3e|D=W-mexCPW;h$gw~)Y}0XD z=rX8>RL&tDZed%(YASMq1}E`zyvl7{d;K+^_oO-AU_I$KnZ^uY!ZAw=Ghi^D*RnBY zNy-9RB_V2OgtW{8>`c0Ld ztKh!<+w5XBtJ z$&Nqm6D6MO+&MIFx4cCy72E<2&k--2kL~KX?yObpKbWW#5XzjGulZubxYU53P7xk= zVDBzDC46b(s&IV77N>g(ZymT8ui|1Cn$Lb$a&s3pnQ%6H^-bF0&c1IC zxK^!AlF{%S??7Xlj`q3k~KjgzM+rY#uJg=6{co;a|x|0pi06i^t^zLw9lDs^%B|yJPWW?!HQv6P!HG^^FmAw#pcj ze;j^yoOrj1Zz|!^**bL4aRz0C7kTP>PW3DE+0_7c*&CuK`+Yo3{#9HOMPN2%v*|+7 zVkuXhR`=o;Gu%W%yJ)T`uG6Nqq4b=^5C9h^mk=~_7I&}o2=7M1 zmbK2_PYwr?%IVUL%POpxeTvkRCFHDWh~uNlqs_nkK_dHD1rxB}oUikQS85xwlf62w zPAWd~R9`{yQ zqGt@qk{rZD@wV0+_E>>r7`ai41NBx7OoSt{z+=$8*ksf70C&A;T(|o-^i_F_oaU{= z51q{03d@adLX1@n$2?bvScMsEQ081| z=yc9@wnN`@(d{R{DDu*NYxvKMvIBs4K~J%MSU58FrH}PcAMBQa@-6zVa26WuiBpym zLsA?Q-9@*$@1IFyfNA2~#MM4tk7Ro>0Ix40jhG)pndyO1g@*~Q2Bh%VTKU3J+O6E? zv?D}|?6CvYa)FQktRo?}ia|ytsa(JmKUAXe69>y7g^}B>ft!uV$qNE5;|QbB4K?f4 zdc7Rk$}1I*xkA{Igdrp9P<-oCxW)Gm8(B=2A0<5IfLW$^p~bnPX;GzSdCgl}1wOdK zlHq~EkUf)3lJD@RP;Je^3zBe}AxiveO5sCs#S9gP$@;^C$%YkwINNu*P z=@kw+nSLArpH56VrJHV5#XB}!O|_~p+w~FYFN6Jts%|txB{Y8+tdr36iGRj-{wyEK zScoGRE!J@H-q;YsS+cVaYHxH~O1#@6I8>ZteIGzjfosu|@JuI(E*ld#z;TEKQ}BSY zdS=ypLp?BTHH3sOCnSn%2JIGF$}A0sBPU1Ao0@j<>lN}q>{9ZIDc|#N%Y5oy(({G% zi=XM5&=`oH9+N0-Teax1Kb7Si)&%5};c>ZeL#9Dh%IexXo+KwEl9Z(y%w3h(_R1M* z-iMaimRt}Cq*UiK7D2((^V#x?jr9!)EuhwIFwpJm8^Z&0Lqf_jHsNDN6gU3fErAd_ z`b_;cuxTjj2Ti9-lJbrYzN20%l%+WP_!^{ct&#BIH`Eq*Dwv#F>hz}6a3l%5{iSG1 z7CY!LhMS;j>-hB7;f$T%;bCAHTy%(Z(AF*2qpt!@4!qDc()4hc_JSnbV%LUr>Tw<=A-0>`Dnv6#YcRLO=o;aO z=(6%+WFR8us)1#qg)R2KC*DQIX^PPl1Ob;`Rzi_Py4|uM9+zyHq@Lmv?(1z!^0l8L zok+P`-!w1oTU(_1gr*qtSN?d9oFTX%uCP(cLZgf4bnL|CwAQJ}!ooTwTx}bx;H$z2 z$S>Ah!xUU#l9g400$>(xn+ZdNKlz4_KV)6)hcaWDCy*bQvWCu{lQopspWZLA^i*Fn zH6C7Jw^(ys=uh0vp4`IK5%w(cI`impxMJF@Z(U!M;v~o`79FNtC)J^4WZ*?vpvI{W z#lj6$bCwoT8UdhD`MWg7BvlR8oB4>jEgH!QQ}f?r(rOT|xXiGEYy4~j92FMOwO3QE zt?VhEc>7U)V+SMB#vdt3C}WR9Ot{VckazI&jLLImTeQ6Ed`(?#_JW6mqD(Zr!i7?C zR>6?8UTb`roXh-sXjL!F5GEWHsAseP36s^spY9rrJ%v(ODUn zuiWMl;s-<9=k6)8!HEn@I;yeSXgx41E?*+4o}DH==_h{6Nn0!{iJg9)@R^!FAo zBm8l!S%_w1FYjhhBLuXdCwa#vNS=zJRwi4Vhy0C_6Ji{2rbAo(t2__9zNpO8EqOF% z7E*0nEhOGX<)3@CI*ftKP@D81Xr=cGY#A6XDINsyG_|S-I$#4@31Ozot7l$F=j|${ zJKW{siXh9>FZZv&a@<8=6(mA($%UfH3(S%xa?bs&kh@Z)DxA#^gstbQj}wzDkNtinf9bVMJT^!kKkZbjyQeM(pKAz^6C{#E~jeE}e zygCH0>Cv4jY1SGjnE1)N9IMu{#LnZ&L+i?bU_)`rz_}~F`hK+BaIl`n8 zyHrr(?6XjMhs63;)Oz9QBtwA0iVLgzL=uM8JW|Cna8>h#C-y5vS`k7N+meTB z)8}7<&l59`bDuT&Y=hoo#@v$TR%DtXCxKzWtKG$At^DR?e7rTU1q;p-n`LC>Z6=!6 zn|o6yMYo zi#2q?_{Q49tY$)EXh{Axcw^yo&I;`X`P}OUURiGDdrMxCj=2<7%(J5&?%!;w$HLN= zFLDGCA}vH1Eo6+L|6T$o0t>kTkjHy!99i&`Y_0qq?b_TMb;x4``i-`)7~V2Z2@fIk zyjG%=%w-BJXA%2SH9(t7?uL&Xtq})WUiwe)vG=s)l?Xp+?fLd%-)Axvsd&11%%D-0 zhN9J^PT_;Pzd%7%+FFmhUvthUd-XI==JCV0)z|66BkvrV@p-(~Ww1&B`)nE%NGeUDQOo74mDL7Gt+x4rawDh)@4+E0Dt|pAPCLm^4(qAawb|`9An`< z8>7M2hXMx9hhWes9P)mLm+y`z7y9L{?&FQM$jSJeEqQ2VEQ~6*8K*+w@s^#rdr_U= z?EY#pUU6Ic2})tVl(9)s#>4Hq)21H^?|8y#6D@IZEB{3@-Xbh+`#6t>OP*`-2Gwv; z>1%Qg(~>}IL&rWFs4;!9rl7f5&|z$Lj+yzi!1@r}b7=`VkQX-#MQ2cF0i^tn`eDD- z5Qg;726PnqQ_XfnNRCcb5xqrgBKqW)`R3`f-M+>l)a&=X1O<+}q|gF*`E+CfL&AXP z7n3SC0nh7l(t~MR2oiaAsXy(|1@i561;8C3>Ckcl!M4Fd8oh_whv6TS${pAJ55>!wKT(dpv)I!UQW`2ggX$Cw{d^u`>^p&qs~&rD})- z*EOTyhNurlf4*(7H}}U8B3k&l4z+${#PLe^83<|3@NW4^I4O7M-yGyV2VnK?9fH;$ zO7L^J3KQxW^eexRD&m7;Ym%GT6;H<#4Km6eKE09cf?z*}Q^S9WsOi4(;EM`3r7vdLn}X zXBq$8DwGgYDakEcqL=*7SG~+MeTaks|9tkpFMPY_FN6Q~yumIqnyLkjO8FpV}}&+vbHFI$<%Az^}}gP$TbOC=YGy^XH9c5J`jG23spo#VVN>`m7!qO+A* zo>PGwvo7*p2-=%sNakwEM89~y5=+zFKr>gsfbK-yHI-^!0Bt5 zXM9$#|2)ZORvBFy-M#MBC|74i6wLPIPWOm4IilCR@TuWR?-AQ)LCQ&*HfIM(0sc9F zDqy~mkM6-tlHIyawMrFWT9V>GAl`l9&qpVR&l(RxhD)p#pT6QNtJ0Xy^!_%7A*nU+ z9n_d(UW9|wFL=gxvF*P7kbno1BE>Vh8LW$>lOeWX2$7k8id}{f1y7+BLttAFcgN_Z z+Tlw_GH~9~8Wo@VI?|#w3~~eitd|9~ND+j>_Jgy%2h_j{gn*@WZ}>W|#o_GWcLj)m zxMTOM->=Jx&!7DkS=xE$-H|npF3mb^pL>jF%71Vg+ls9G-MTImM$dR`qC)l_-6*_6 ze5sj*UISH$yoNXVL2J=Wq3Jqz+2BQ3djA5N0VH@qTjM3-&+W+Xgyb0)#Pp zyH1-xPsQ}phxAl_n5N`(&*q6WczXutIyEPG! zYeilzRLZEKr(ga1x$U~q8xfgFS!g`kV}6D-1mr8(i(h1cwtO1DZXUUUp%BxSFAY?4 z_6nL`#7WP>)*f7Zk!dIHLC!BW^@JCC&v)tPqwz(_f(Grpn7yx-y<*x$kB3jGx8a4Nj(b8f@>8caJF~J1dDd{lZ6GZ86n!zU%b6{JKX!tG@h+IS zJ^R&inJogjC9dm$>GX?2rF`Wamodx$ zVL%O)=mDipdiOC(mIxf7XMJ>|snby@u4w7Ak`oOGUq~05bRpS7>kCsG1|aK4OE9jz z0ys}8*b*d-^xj|win|>N^J{DP!Q*=?u7u$w;sA$#u()nvtbxXig*BI*(TiONF#C<}8%Tz)KAe}Nq@!-X|A0Iedz;L=+o zmhYHxC2`zjO)8>w4*z2M7t^SvdSv!Gc<1~?Xu@aPa4;PkjjwKhwC|QM z(Jm0iroG!{Q(xJBqz^RE#nDZnu!V>Ye2XVL8g3Z998=8nbFzwPN($_(ggFP`v#|1Z zDz0#5+EAhgzSdYyn;rKZP8v@urs#}SZ>ixH%n^*Ot_I!$sVNjB zdd>dFq}j~ugp)BgzBWngjjHP-&H$f5_pZPIvlnlZuKQPy>)kKf;D_0lJ)AWbC$#?EEYMOeupKu9b^C8e#f< zk0}C*zrW5Cu`&{KYX7jj|4Qsc=QrjIfLxZ^6+-aoKhEf={C$@|#i5lV5uq`ck2N;- ze_)iq>+x}`4xKzsO2R$bfB*j|R@?Yvq3Kw|sipfiHq zQaE+86Uj2vkV39Uk(_LkY|Q01G1}95tA*S=n=&%-bV9vS1Vybp{IRcfXig%Uy8d>V zKH$fiER}o?hA<24_)sSe&wn)Vph7z$Gnbj-@m%^cy`E)qZQKZw>-pdjDtJ%&y5Er? zv|heSSPPDfGfZTV9Jue}6+oLPHF_SV*;<^tLJHf4_OS`>*93Llo%v zXud0~+nkJxf-V?&_?-g~kkUWQ%+cW?ssxgbv$aCB-|L4ldRJcqcyJ_SyU41#yHbr9 z&2zyjaj+Eo$eO~_F}9^T+s15!((FJ{DosgPaXHDH>;w;5wc7V_jt!FI2=sIS>`&`wz=%`afXamU=b-ikX=FBcr#;~02O2<+P?@S^XV;yY_9A@?&kuF^C3cejJK-aj3DR!W+$Nzs=O^}v zlnxcLNsWH}d-+9K+Na(KOpd@{TV2Jhgu3kDH&{eV;1&*s7mjNoNn79#sTe1Ac9uYt zQer~v{2)9f%L+Ba_zqJEQfW^1bOVtYXq+4xLez01FUO)tzS)>lQUsUO9No?>Xd41= zJ<27NuPSB;k`}Tokr|;cDar2LP?`x2CF5M$Vq!j|{}+@aw`U`k)wH!$=nNNkY@JeL z*Jhp%q2%TWJDvb^f5Fq-H{%Hnlfu>5%uvPJ#48 zJ*c$fr$`4L*=1ST#k##V6^dGGKjcWhOzF<8p0d;GiirFhr=>gS8=!k@D{HQng)AQ~ z>Jzsj&Q%V?)Yxw2&O|X7Zr(z8EH%JPJdxvPq7LU@F(oekNGI-aqua~JSNaW+(&zfEZjB2K!3k3H|cBgQ@SLf78}IP>wIUNRrg13 z7bGoODbI@OA?dgf>jpiE+r-L}zHbXBw$9ZoQpZmCPCN&8gguo5JVap4mJAjuW+|Qn z+ZI9|(o*A5jWk{_%pUnrIHmMhq8jDy83hUFn;Ox#B)t1hr|IwOVkj|V3?1R-#WAT3 zn1W&9cFm2u@vg86-&g3Wii6a8=nfX&h@9$DiUCM!slj2ip-fj(Z*BI*AN#IAV`X({ z*AfB3%XhI-zDb)kW*vX_-)syeK0?bQ3+8rXd;UfPhl;(4EOmmavAHEj*Y2p_ifE+! zAF4PJ?ro~-6o$WWlB6ys9xql-gX!}>SeJtoRz16Xqa0f^%aw}<$tdI!N4*CrNg#d% z%uU|&i-Sc9QHj8Z1lG@N0NuWWRhH8o;dL_fncs(@ zJNLp=+b8V5tmDy7zv$83(Y&-^3x{xamXPleSu9>>z3Ol{#4&2+3Jjak8sX3-NE^a>+l8chD0SUdcAj5?gfme z6A90Sd!mvX&jd$bGrF|Pkm%aNP#jZZ>e+~zD{JEVdXx3Nc^fUQz!G~wXuTgI|Uo%!@7O?s4zF=x}(T;7$LVXy-vkOyF=#+7? zr^;rI#w9p5+5m%*INiEfOvu35`@7NjL(Q$B@%i6AeZ~hFN7VwQlhH!-mRP=_oNT*V z{1?cREwGWsEzwcE*7th#q2I%+6AyWvCJ2X0nM514y+b8Ay~n$MfR4TOfXWDa`}N#~ zsmNB|W2Ka@*99gTFqUi;wl}p5-VvG;%j64omgEv{{rD{oI7iN!q4*WJ!v%V655Gq# z5sue_BL(qMT@T-t2DJx(C9dwP+>so)ao4;*pH0w?{bFdDY||ndt<-f2$M3smviK-g z3&jiqwRP1ayI-vbY__fyGNo_W^q#~%sXpB5MmnkX%Ip|~gn0TdOw?YFHvefJ zAytTltqv`4_oF?peA7n8?fp%1;#wsoYECVu3BTGI9)h0KzQ0Wx$xO?g1%8A|xI2*? zO#OMV(1KgXr7{pt)h$h=dy#h_nO+?>a;vByb-0)x+hE`+mGz6;4#zzC`_`BI25hB<4saL`jJr_sO2jkmw#c z7ml1azK#mPXsCw#du>DV{|Zt_GStDNDMnk#JNu^z`b~NNfld5B7=12n`U{N!UjL0o zU@zj_OB(dxqT>P%Hvpg@Xp_aZgLjnlB6`%S0R?Sb=V@r2*WPrS)gN#_mvYSKS$mp% zo|iJ5Zy)H0R{ATL@6C<2O4{W~uZZKxsU{28tG)M^{ZW4XN4Mm~8*#l6f zL%FQ~JT7c>9T{K*gW0Pt-mm1BxW5sFMnt{=4o$)nZ72T`aLdS~Mwrp?z=r4rWCm@@&F# zohRYUXl9Cz4vj{ z8=qL$xmV`3D9XP|xBG|Is4AyJV=q73B7pHFaJP%Iiv>^I~&JjYtaQMSymR-y2er8{@7dl`(5!sMTxU}1$l|KuF<2e`2&fV^)8_*A$m ztLeFYUp@3JbxS>MnFspnraJ(@Ssk>dH?Zhw4tcffEuDzXBmcU{-afiNLW$OWO6EO~ zbSd(hXHS}Y0>SuE=K=o;3A^{H1wv8mjL?*L*f-Jmb?glxJ(EiRVCVK}+pFKKxy24d zHWMFGoHousw~+iOQGRy!8d>vN$obJ7go(^akL2?0Nf+tSQ)o`{>rBgAj{nG&uKSJK zy@hpG1r7!*^OwqaK~xAyd{wF?lidGGlFom&*I}7^G=vBu?>na$NVEMPB%;AE)C(l~6*3PHXU?#lg>~^)3 znJ7Q%4eFPxFX!PGiV-Wf=e)Nr;TbY@zn%fSS~0&AcJz0S+q;0Hj@0g6m>lV?Z}rZg z5EuN&i&YDu+VI*X6JNt{mv$uP(5Bk71e zjOc0d4v%3Vx5yQGLTXmLjzuq)aBs9Tx$ZK6j3Zx6lUCVlBQdY8$o(D6^)ik$Gh-4^ zkO0dABrI??&F`nCA8G29IcHI`Ew$qt6KJV~qSpq|}IWf$Z_fr9`A_E@9h z&qNVsF!7`_JTYf-vjZ$6V* zS}f<`Rc{+T(}kX^%UTP5W2GBKKr&gW0&b+CWjU#N21r zV}*GklPQg4CLxh;0lYk}w$I;h*N1WzF#j}2&$&FlD~vUB$Xj2=TYUjqsH?zXUYr49z{iH2X;CHTeAtcpwgN~owp{SIYA6VMl`pPCu2+RLMY zO0r7uQc7}YurB8hh6cO=`fBH1xBibcC&9>|4)=iJrZ@H(;coS2U@;{vnDD&6`ZkF^ zpCjIw%(R<%EaoFft2G}D_~uxx8>~jAA2+%sY57VdGnUX9q1({S{HM$@jqg8Yj*v5> zTSHv#KiNGFu$Onmb_^R`FHVv_ArZdD?VVzZEBxQYoW)KWxw9}~94NMNRa$8mMJqw5 zrSmm6=I`1QovJKPkR8h6%B<5;QpMNSO|DDk$~w;3yi{IPkDg!*L>vl4N}M@le@Gd% z&q?wE(+>Hv60Ag5nvqtQntgdti(3H{sQ47j){pB#{J7r$*x1r~!j--$4PWbMP1+0A zNkeXpuKG2KSXX8^xt>t$LrzHB^|iA?X5e4;=h#PXJquD5dJ}f6=Y|*_FY73uO2a1R#KTB+AML@;;vsN>LUAF|5x|Si*r56H}=siz6}j+E60p# zJNLnR@5^ggA~oj0K(&~?nl}r!6@`?MYEM}U)q**aad%k;22YKzaID9oV>xUDAI`w_ zQic4M_IOsN!A)A*s;x_;)7o%;()WZt&PiaXz&14T*Su;^z{rwJrI#&AvpcDJTN+oN zaE-=QJf4Eg{Rgk(T|%G zO?Rpex)*|qZoT^owUPO?#7bqGHyLI~h9Nb7>V{_$mlY#JeAu>4=EG=uV{keI#oPvN zUn*Uie5-ZJ)k%ldP+}t=#}v4cD7r(~fJWow!!h^wKy0Yws@_FO#xu0oVQDc|8!1k& z3vyDgrwoP;V#$Vi%%K+_Zra=v&|6mWy^Y1%OBPc(7I*J^eaNNiM?kZ(Pcwt-?)jw_ zrMWv>Kk4l!_j*yZHhY+$(?+=pPo9ji#!)gikVitML*a!6A-Y%Q-%%7QchlRP4G`Cd2XUs61O-1o4%EmkL>M0%aeNhB2R=h9hWTMop^%(+RC~^2MbFe z&|qPB(rnnF{nBZ7vSWSw#r9RGpN$oPEADhm#h`WYgezg8MVjRIIzK@22+RfFf4BGZ zRbrp#6a)JAqRXfM!UWag#LW6Ge{6!r5z^g=1m_rQ)&8ew@p~tk<-zBAa4890OPj!) zEuZc7YyB5d^BYSUG1hQQd$w5SmJWw;fSS~A6Jq%Wd*(}kW=fGrEY}Se8%cw0s4%bZ zN5_a`%KOqF><)sq?+#n`CdrZ&MzlD*zqL3euMN5aW~Iv@8IaD6!FOx8*CWwSH#GpL z64`#ciZ=1+g$__D5qV>a6~a%q(NBytn}({PvpWym)D83b92?rF-(x*W(RVfK@4!T~ z84ND^tU%jK)&3(1HJZ9SS8~jkZLE6ee1xJodF@tS?kUJKB!i+2g!cUhbgqhgkB0F2 zC<8QCK(K@x`f!IVCMCTg_q7CDx;^E%ULisNO?;Oy$LNXB1_Ze`I`m5hpAjMxbIc0} z957L3xcA+5FF-H%p)YL@-GddKLGVBvgfBJv$}!2xPOo}4;qjP{ph zgS7!O<}7#9P`t-onTG43^U=4J)1lYqx@_ZU#f0}X(s3Teq=ec>X~z|atZ?L3XR-rf z{Q*+a*2{fHkc?&lUy}xIgXLY2O)tZNS?GUS^zA(F#o_AF zDVfY|&6qwo3e<+r{I>mltnpzQb&OUN6FG{)$c|E0uK3p9X--LBQjcj~*un6F21 zj_vqg;!Xh!xYKgZ=~kbi;)Ae@D6td5>JZy#MBX4A^+NjcTlA z%=~4ex(<9t1#E1l)m2@edE_#&-g3Vd}Y1z2g9a2fYJ=)d@+GckAo3A%% zTwi)hUT$Yce91|wTyR*~h69ZkRMvR@SPMJXrPZN(htEtiVV>>8WMRtxR+%~n{bhJ% z-V)+WcZJvKNmLopw4bV)W3Q?6iYIdRB!HphO5N>wAIm9&nnz{ue5kA&n`m|6x4nP% zSCRv6P`bmLJ6#E7HMjiGu8`!WhE|pv(WC7G{lDR^N>D$_Vi0A|=bF3})Gx%pyq)@6031!$5YOEt4} z&fT&dC8SAJ2guT`gb^=z3knX{A1ARUPTqtFJE>c(5i|vXiT_A2G zmvgiqP*Py*?rBQ*Z3{a{w^>>Pf8cb&&oWg7z~$|Em8t8ghi7(mH1ATJ7y5dfZ}>O_ zvFt`zm8}u*x2)$EY4#BI@jd&VC9U7SB{3*?=Y+r1CO45XKv??T_`aNs_OAL)s&uB+ z5fuYOkl%u|mn(e{WkD|I5YS53R7#E9UTQs1;e=zeIRm9j&q5I#_ zF-$bIVkjMy)7A*(J(Z1%fYyygZwCkiLsKm@zhhyF#gs|&^_957;IP+IuM=L@cqv#c zvpMdL-wKy;q(TO~#4^#_=$-&&if1b6#zFyG6^n05xvjVTFiiY$a_VE@IkxpYUr}~^ znCtD>4j^T7+mQuE? z;!1!3sPqy3!l6O^R#Cm;P2rgsywH4r6ilMjQkJZJ%EC(|&x(~#2wi{RN2+47SKFxM zMFXpY5RpvS$BO{KDz6X2)9r89j&0)e8aC}enTXJ>tB83*pUyUwa@qXxx=uWj2o7ab zpdQY`;`tP8LWX@#zX^CVy*b1jI(hR05qA(UzMx&@AjlhKmrk0vBUF!CIG|+699fNa z^Po7t5z^4OIG(%s7r?#7%}u^v9|aX-bdGEx8(PKlRe!;XQu}x*!)=XIeuXLR#C{>R zU%%*K+Lu_rBw{_ZaJGy?Vhnv@3 z=Hj4g^15GbmTpWht;-i6kh7#$cK(j*yQzu!NlCYyz|SnO)IiO+qEgj2RWu3YAg|RZ z^DL)eU85y?C|&Tx-4y3fsV&9z#z%|QSg_H{`n?^~nvm>Q+CmFQ(O|tgevU{;gb#u{ zDgaWpHnOcP?@E6KXLen{{n^&lW6Wp?xSE`f5G^r@C63~;V|6Xey{%ONRf4;=%H@)o zVm-x~Puh9;=(W12uTxmu8&82=tXi=FT9Fvmvk~-T+*`yA_LdJK0tjq)$cJJN?n<{) zRI^6!PDTvZivD5$f)Zk!2xh|C-HYuGd_yC@lG(miJMR=k+za{GJlf?y?XR`xfsF~rpV<>CN7xtvM#V}DZ@Fr0@?9z>_B93`_cwFB zLX~P>f@>ACC!$_1B$cToXk}BE734-Ix3EXFeEfGb5y}EcL#~G~{;PXah^Xz38*Z3|mh#xt| zOo+4Z70+fvitfMeHno*4+fu_bBuRd5hyopbbWD1+l@WQVP1S~ELoxQVwL>BeTG+bF z)L^olQCBZp8uk6HK}AGfG+T+vpy;$SXwsru&1$_P`~T3bs?8X@$g`7ofMc5?RBF!3 z1fmP9&Pz^)$L2Pe%?v^{FyF}?r?OgS3_dzX{dHm_%Np98tYZi zpMF!ih?l}$R|Vp;fDqMr^4UdyH53Q25;T8!u&B#2Qivzjn20&c{~Wc5{_|I|&X?v_ zfJiH6+7gU({LoDOQDx3*f;MGG6bL=C2Ax(N;9)-^4 zCu4iMN)Ftx&5?~*R%AGdM8h0>cJ?;5nQhzS&GR(;R((6vqT=^RH>5vx#~XD8m?-+H4#1T4HH&4pnwcy3(7)s84s zzRpn-#_aJXezM8)sCFH}-ss^RJFL$V9wX*x)fuRFhelth)mLoklDx6#%&_8LWxSFH zijkTp{P^TCV`^+EmOq{Lw=}nK>Mv<--yPl68<&+XNdLa(;qs37C~BgtjsvRKt&^d)DiWE`0K-5}IK|?cGXgyOUg+#|GTcd?LNw4b|hb{ENU>+?- zq`XkIBfgApE|G0GL;vQzw|qYz+`mwGPBsl(5_B^UR_a=#H$)jVjdV&VbW+ly!%rM$ zLhQkzrx^hS;rj_}i;8g2{kb{Pipy9fpjvjJgC*I5@+FfsqEH5T}cn=r68-*Il^;pQw3y{nHD zTNz3*iiYJ#i98-Vq|2zM;X*HYJbA}nRlAXzwIsekTtS9lPW3Y|t^MwMUs(S^=C8di^#RKuc2?^zT!J$y7}8bETSZGDO%|f|PQrEh z+&W*^I;YILx++nxCZnYHy8RxG3AAIenqte#M~g3vcb^;gx}_kl8G)MOXIAom`)R^M zi3}Tp41A$|F55yn)d22rTj!k3XL2y7G#r@EoWy}Wwde* znUlg0?vqkrLP*C!R}}6O3sBYCv&KSHZqZrP=n_+q3vXQb3L(i%cyouDMu&&h$>Q+& z?bwfP1oGzf?3-g*VA`mrbo^B#A-%A+h+G@g(59m>z9+?rv?A<8N2CY3C?#5y}#l>4tS%%S<@0ge)5v-x|5N)k0n2gecKmv%Rlp= zW>+s~$Em+Ar*}W3+CJk8n?pa$wILKsjD&}EO}TCVbM9XtxEU)a?6ChK7G;g-ek{Nx zj_iY?0h^q)_T(3x^1gBy8IQDOExMm+8K@{KTIxnYNtA_5Eo$|D?f6>@fEIBf6^>`1 zKWob3WYE=%X3)D{`7jQkzAYBU=^IqCrRPtKOo3jm#EtD>k@g(GAGV#0{ zx5TsYfLV+oJ}Iqek7Muy_!z$pwh~gz?dW@-R)n>Rh4=IKHIq@~$i_iVPw~pv%i>rrWzE4-Ifd8xjf}%n{ zt98-m`i$RT2B9!F1$_1j8ppVo-;(hCkXG|ye%_^4)dE!@>jyhE%DBEzYISk`=U5Nz zKgw0t$52X$3IBBXpqv#83TMSYqMXAL=b&B&SZA7w+CGl2jQ?*T7KYf*TO=R;#+VjI!~xfVAnsgtBsDhrxa? z2r2m>$d2TXs?~^aRi9E8=?tNFTw!tDF`A2l-!k`aE{Z2E${Q?oAC049@J_hSAI~C!G$V;;EK4H07Ak)uV04m1NxN9N+@^DS~ZDK zS<(I5cKhY|N;xmXZg>n5dbhJ-4$J>@VZE2HvIPDJX^8&@cNlC0 zOlM2zQV&TmlBuZ&X%^}Qp6Dc2o$F&06-&~$u|6TM#2G2CM0z6WK(4n$Xn5wkQjgO9Wm64)a7@jl!!xa1KIP1Mj5(EIT`?{gsm zUBTlc8JwWS_P4i6^;<2AGh>_*{sQo@Xf**Srf)&%k*vH=`57jqrVs|6BE?TTsGJx9 zBM*OA+V|zm#4(nl6R$3Y<)p2#*O2?b=yB?G1t82eBtnW=Ps9!WBxz#fp0H%`7s z!WS+I4?^MJY4*QG2|1tlh8j3hNgv^}##snq(*y{)rKeR{yI7etx=0Ox*W?zlXu>k3 zxM{+mDKUm)t?p1ry86509DBRfDT3|F4ODw;>^6^#Ejy4=@? zk9Pd@#RZob6%#fT%K>^K=qsl9rx)%FC!u_-aC9n$pu{l&i|n-rjA47B{9Tu4rOyhY zB>fZFwVh<4wX#I=c#<~?KGu(=;dMxbAl9ok^pP+4HFIA%QZgD7HVv?3`Ge#BebI~c zRYUoF>rZuG@S>%X+fkJ;shXcmE+F;)(D1vP!QD?)4MKEZKpNU70%4drRys%xI_Tc7Pc-#!1-cQ? zWZnvN3;a=_+u>L2zY27#_M!vTE5lAAJWDyFHLUz=zMQI{Zvxo&Nc@9^;S|aa(Zk>& z^KK20D~E*~7K@IpF!YUOwyJ0;bVH#m?Yt~yQEjy_bRCI`$-mm!x)*%IAWvvP>vu8T zA<03LcKfbZrAN)1PpuyzQisf+fa?G(7tdmblH~X>1FgE?qX>tO`;9cdR~Q0mfX(1+ zv%ku*rN}NKe-On%nYR`@Y+SfJ4vm$P=4*qy$|oLVz0eOK&cx$rN=KyiLaOoS6T;-- zZ$C0;FpY_~BW5`%X&A%wF$`xecshoP@%ssh)^`;Di)VNVobu9k1PpNr%|!vjE#62! zv@e;$2l~R#B}oMJu4xmP!AixW@cae#%RT6H(#2 zcJ=oAmK?XL5e3(8-L3Gyp(Zt0_ax=I#RfncQXBt*V>1qs`Bf%F1)|`u0@aj+Er$?N z?``ugE`@^SxZFb+1X{RkurG|>+@vxD8R1mG41%?Icy~V=X z%KFoq)ng(V18&(`r)=Obxi>w($pym~f>D1~^4_iS-jk6j^XTVQ9Ei z2F^atuY?6jgNyEK(K3R21BVneMM9B(5{hG6DYjgaJ>z%{n= z6Z!}=#}>zR%YD;5M>_zQ&8dD&e=s`#S-!;A15T9yrl{b~qCMl$2Sr9%>HmcG@&C>) z)n&SrQ|c)1gTjqP%AfFlysr#}SVUq>A<1yI(}c300@GS8j>q-pdD3QS)S904;V^)A zpAtG|LpJ6=uQQh{zxJy%kkaQDnp5&oIdY@CasEP!^eZz()Ym@2aNtlx5Tj9UX@h^& z$0%F#hR!E^*P^5kjUYW*_HbA%Dk+d}j4^h`aMCW}lax&Bd#+SFWQ_VLmfsi`y%(=+ zDVB{3_*_2*sd}niUyJRF8_K5$r$!x?if&vRe;}xKtOw~@tca^6M~1Rq;T{Veip*N| zxsQ(xrj|%ZW!ZBSU5}&rL6uH0j_P$8hr}og@=%BBw+3JIU8= zVAY2M`7~9;iGH@?gm%0N1>ETxAX|20nm&dKe9;TH)M5~#l_gq=MEld&K`{N98L8d| zX(>?U3;NO-YD7FaN@v9cleS^r`2@9PtpYhe^17VhgUg-PxSM{i2doUdG#)j%@Q`b! zY!z|DaNfPL!mgZg)upi*T%qh>-G3L-WN7ghqmtw&i3cxf8c8^9X+QAhfJtSvGjnS^ zX@iuAEOSo3}TBkg2V z8EGji(%{8hiX@(kEB}EIa?37-ZYMVnZoFX}9hYVo*8rvx zOU$YvPqgi?cvsy;jdFO3unwOs?*kuhW3r=PbL*?m|4S_y2c;*U_ty)QQwOI_qPiLK zkZcyQBq_nJ!tio6eoZQO_z-$TPBGFDu`*uK_R2A3>TgeY5g)2}giZPe?4_I-y3)Tp zf1~@(_)oz%l=R|NaHZ3dN0LWJgwuN#5e@}tL`Fv^ZAuQQlx6Es!oRL3ZXlA4N`=#J zSvnHP4Dt2*&?WpjsTsAmVfdky*QtO%^!pB)MDaD)g20j&lpGEG1Ywg{06}E;*B;dp zUOzj0Lo+fO%R>x}Pf2=FPF#@2S5$A4^{FEj<3z9M*}PS;Fy3mH*7e93K&WEfz@Z+P z`_+nM7oq~&G0~U6C`aN4s@yMUmhj*3iITl$}p&r%BPY< z*U)HulhZ^If{-KaJh!uZwF4G19(^m(`vT~^8?>_>9jO#pf>a;?gkl5g%%Y^pB-N0> z;g1Wu^jnbImNrT-fXud3^J(k|dR9xozYTfW1;z$?Z2b2dk`6;KhgMQ>`dSN%ph(ah zah)-fo4|>Yo6hjfZm_i-P=FvVE=_(7eT7zLExg7m8Sv+g7mPopw#A|eQ1|1;na~S% z{35;Xb-}_w zX19GPlv)2-l=6xlzr%?nrC+w3b!rad+e8F;Cb@Y2P}Z1o_z!1EKFf5>MFh`;!2>@ao6`);FU=br&CW^9y5`3 z4kw4jlXFy1!Ds8k%37nxT_abnji_0X(6a57_*NjM3TwRdtx{r;FF1s{;2uKV=Tq^5 zoL0KHmTe^hSv1hONlNWU(1TR@EDhS!m1uTQG&q@-fB-*u$LnE8H^{)ZV?r;0+Z_ z7S`j~U-K+M`;|D=7*K*uonDNXWwAND-UuxIkAx3`9`GU}M)F_QFV&ub!`K|<>kbb* zXBH@W<`Fr*xEe| zi!&PZTJ1V?B4piDr}p89EsxW2V}@C>Ow%>A+{+%-YjYS@18kMOIL;n4r}H{f;+{7% zmR)!>g1xg6{5LUTjC%aiu0{Y!_-{Mt6|3nqY2yjkYU>tGxxnfmgCt{r;poGX_oy@Q z%Qu>=yKrkTf0F7uYYNwNd*VC{GZcYdBmJ=83wM%*L2rEY8Ktr}!P0lEQ>^&cUD8A} zC6e7f6lnG%7LfP*MBKgkptvGwe1_}eDCR!Cz?+lXnKksLJ$krIcu8-tGsy(KBi0`; zz84&*PN4trd06%CeS~c7L&$KwLEfF^e^=tMK(lQ7{>e;{f&N>TD-m)&8njyF(y@e{XeK zOHB9MzF6`34Fhq`mU~8-SKL=>1NWh|NJ$+4uNcT~?S+Y={x}-fy9K&Pp@UV|WA{PQ zX~JAyE^Bp}Ec0LQN&ZFOuv&?DZF*=BGWcAp!8mu;(w+7%T z>HN@-%TY@1hqu)Un%46e&X##E@zc$naz)J*bQsAX&`vQF!jWYi~MeY}yXx*0ZeV%)1qMe!# z0+3&dhAt_ii#4s$qt~g8U7x2RM>jyRdj0a$i>Y{Ft|?X>(Km02jne8wCI7+{r})~{ z2ei^D$YH~CFTDFz<7qm^=L&ME?!S}X73IT2-mHh{VCYZqCzHr&5Lw&*q-w&AGlpQw z-!K|&Yt6Pp+b>ta&Qhpj;fam@y8h8#?&U%|&?{7V5d#EWV8Dmk@V^HSDW*`9*gjVi9J{F6x`KUbj zNeO+cY{3O=`J;<#zD7$b3TA>XbA%OBKI0a?IW>}N1=w$gaEmMUge{P00v5`J`H z_Bv4huHc>Hm>0KyUF+_6-3nVXo2c%rie$7Yu5gqsaCsntX=ti81Bdm3*EhZ?^EnlOw7PPGO4ce3Tya?soyjPp1>ciGgO-Q78JlReiSk#!%{S?2Dx zDweQb)Yl3=Z*XNh4m>Z|5MwcbouI0@JA2JxkML?16S7}Mq;g+g<%bmf6JUwKh%c3u zUn~2R6}v|VwB4_h)Xyp`8@WZiukEP)+z?@z1e%-a1~b7AtkvpaFz#vd^!4Nd*}hcZ zOu^WXaa`Y~XFV{u zP6miUN6hi>jjEKc#4zc=9ISbzF z+kMBq#{17>8CFyBKNp=raowTs<@OUzH17fX#lln8?lhJQHnr29G#m?^y*B%XMt$Oj zGX-fzcSNwxE9#J|ZaMo;qYlF}=bx7Q$~ChG9l(FSGLQCbXOHGG$Q@P9J6JlciVpkq z5^!xrWMZRsXA``4!OBi#j{JSO+=-~hjbB@Nnz zbgTT3hTnI&bWVLRNSjwj^_=h6Dn6bKlh`{*rT@bZ7N}s`RIu}2N^*THVz>*?wCj%# z(gfT`ZC73^&1aqW$KOFsqHd2T{wq^?E%;F9MSng@ z&;4Tm+-IFQ+ha;eCukmzbH^t4{camipJ$@};V-t^e)hKEL|1w9%~;0p%}aZUD_wE~ zmD^76S=w=W(j*thdn96uyNvqgFtm|~M@9Qno5wxkRu+3XDo<&md0bn(Gm3t~9thXD zFTeRpL)}`g^IYTAYPKvla%(qN-2JeOM>xOnJA7L}Ke0!6eXK}`ZxzvS&O9R;tKCAs z9Hdft-Gbt@+4P~s)tW!?F{gx9l^Yb`&D9+T-y2_&#D&6vJI!u(!)4-b!*h@=`)U4# zckkw*_E+~I{Kt}lup+&D0}`q-a+39tZzghqcHeBkDA1Q2RYy6D=HMm=KmB>NFX8ZT z`7RiHGdIk8nNhy_knD`-_8_`(>n7wcp2rlsoptTcABrw>&K_T%&@mq=O(1DRyX4ngBAkz19LZ+ zxo_Rupv#9NU)Y08gPrT)%+}YPecniUx@f_iv?E^bYUhgX!zv`bq3f+mmYY)O^ic-I z&X7%GShrQ?;d;e}>B@!1H}}qEGI2aZ5fAuf!A2nfN_((~fasYsz}&l|4>JBwkfaNS;}`!zN8~0xkC<48m1_9QcZvrE?O*qhBUIYPhk|__!zCQg ztoTVfIb@O!-%M|*mtVa+Vm>4=eECD!@-#Ykx{my-)9PvI*x#NLrhg>Uvbnx;p5NQl z-LGL3Pfil5f7m*b*{0?V{#o9fE_p9N(y9P%E|ugOiJhS!ZMfQ`cI^2IH)r166HG+b zr6?~W0b(Kr(#?w%huBv8;6a!$FzkXUyuda{@4+(WlTGPm>k$|16@}= zt5aGJf#5}K%FULur~O4cG5oKbAo(q(Zt$e@2DnGg?PXNye(UH`jyQ#u8hM@FrQ3X` ze|H1y52UHM*l(qGA6xOxv$*dJb7VEV9w}mR!B9Ad04S6-Fnz?Nb%uK2tddd zFc0SIR7GWa*<~VZ*XDtLf0^-P!uH&?;%@4aF9-rosQ|Ez#in=9?5i9yj1#18#mcn6WGtxyEV`{`VEeBAF^4ytIR|Zw88JqMs#y?sE zQs4aXRp>ttLOAvsODZ9KH5)NIqEqS$yMM6t;m}46$tc-~HrJEofQIF~|FbKQ0J0aQ zxMtT*rc;T=@oJt-h8}abvG-V`I3v%LZx0j{n>~gPB+Ud*L;iDdc+L({VLZ!u#9%!I ztp7YEa_%t|2-BVU9|ynBK#a)fqiO-!Qx=`|MClYreS z&K&)oLWA#^acV`xQ@=8pHE3(D$DB-gN&59C;pA@ZK3e>p0BHwi&VpYs&KZgrGg=!gL7q#3-X93AV zP~JEmXg{#V2ppvCf-BYUA%WLKw5n^2!|rLl0b$y)#hqFk2)%eMo{RH#=0j_3&r*PrSfWY|_%|o+ zutTRs9)r=0Zem`qtAkpA8+LqmYo>TSx71s@aKv$6EKTELrfTZbx#o8cKH=!f^+b2^ zRomGYEb<-{KpwN?+fYf?zt;}e0)MRvy1ugd`A(;)?;q99PF>G&C`;91krs+Y7{GZ~ zg&a}Cip}3#Fht{%EWH)ZXxH%zcQvjCjLgsUP7YFRA2*784mr}u9+_YH{d?2Rkdu3c zl+f6j0bOa@aVY&X#49;Hhn$cgMOCT>|EzGcnL&`N0!J{rTE97>6-;woQ|hk$ztGQ^dvu6j+>$q; zp@<7~a}2zeS+y$PkF2h8r=yDAwI*bDAkO#Nqj=GZzg@f6{XE9=-u=wsZgl1iZJuq^uXj~dsH&}>8CLCY z5S(=8Nk1G^HBuvrX6BE^{**oV*lc^6?557(%h10d+teQgsRBIXEnj(W!K_x~_T0=(K zulPncjR&u9J|W+k%FpGVB?oM3yO%g+!ni&qHks31nWqprptyVR3pu7%t%2*!TVVp{urh6n;y_R16kWa z2vw91ss2ku+GNtS`8AXjOV-4pAilbH_INJOn{99C?r{j;UB6Y1xEwz7Kl_VQZQ5aoHv0A&r}LK)l~!OSYz+ zRo&4?8)%6H@Wmk1wyI-F@YOa~?v71t_sLw~bR+ANTBsg#kOpzaSSx!3kNJ8hdER)^ z;@#1AcelWJ;tX3`N#-<)tZQY&o3n%)_e4tFMvX80;oFVd0x>ewHk40OWj4;Q2C(|g zh`}mSHgGX9;P!s>OgZMTY8Q6!o*#%Ihx(e`vo5zPXZ-Mqg43@Uc&Eo5Rc&Stj4+$9 zS&oYY#9f?(+?v@-HE7yM7N54{RtC9QVj}>}M?4UMC8_uK)%A4&QiAY9ZtrOGe6q=e z%d1>bZV!Ne!1a)z%X}@Ebkx?%I>`(=4HNM8`SgviUrKGyZkagL?b><6@{f@{iJ`8I z$j0jrnei~^(7tgN_Iy%puQ+|}ZJTYKbuj(C;X4$^pv?J07NnK}e|A0Za3EM2yQ3di z@|v@pSzqx`-u-iKsr5o+9$p5akG6m=67Kk%AF3;OWMH^aEhGcqCLQxz!_u9KWAIXb zu!M<+!)^J58z1+I2~(kK3e7?vAB3q@1QJuk!}qGX-3CrcbZ7FYUi9>EKIMUIr@y%$ zD6Tz$V!c6}IM@lR+zgp%2#su%F2KNvgIl+R5gTga`Ie!=AV$8~pyO0WNJH?IF?OW` zv38j2`feG8M$>HdPz<36jX{XLtLi!0_%!E%wRETUXcXYIFoXj4JnGCjT#24H%J?MT2nwP<4C2Pcm^q2oo}v%efiON7nFOey z^*qsTBOSiN}^ z*ZMwax@|@!OXMLat{KClqmA!f+9(kk2wiEG@{6%YTc=W7D#9fc=PVvuRO5F9vsZyWpe*qM65_VZUak`^i5baQf; zr4QshaXw= z0EQRWI63c6ty%e)EUDw3&~G}3*McnS)D2%P>ps{(DUn!_-^c;=YZ?UedDPUMS2*Yp za$o5<;ecfF5h};=IuxH<2NVdsfrEM;pdv0%esTLJ8wi=f8$PVuOU(gzOiH(JD3*{2 z5ji0>c87yD21b44gC+^2P9L@FiYKjjP~!m1x5&Xy6r7FxVG=L+4XjXuVl)rMO^7+wGpvUIXQfP5> z=u!i@2E_vduU}N|PzxAqCF!hQ+D# zj_V>hpGKf>5ta^JG*=3V@1){;P&+kBXarT8Ag}r~$2{(6>VnqRKclf(Kjw5eKCZaG0`2n?}ye%pyq^t_9u$;dpQX})|*LY&%)v;ntamI%M`3W(ez zRd>B0oAg9hbZ*|;b}2wQyt*k8`?CoP<9S1-Z3?H4`#G`m2zR5z2|W`}M%hj5K&I}F zyCX2RQcGwQG*BWj-S>O9?3KN>-cOKagD0G9{lUBzD@Cg=c|xl$AsDJGU`+QeyRQ@d zb`rD=wiXj2Bql?>lC^z_p(o2*!z~5hBmT;qvqu1^j3_GRrRaM23(+2R1{5!dg8$|5 z-h69u-gZ`I2K_ZPCQXwx&201S-t>~i^z)+cEkay$Y?LMx%l63jdp!Xzi5CoyP(6H{ z$ld4J8(nsfOLOa|mJt(%0b;1Zo9u>AB`ZNXG@KrF!KG}u4w#UBG7LpVw1F*K@@@p( zbCF=CSB#9|Df7p1$D}IX@Y+TRmBFW_Hf=u+ZNI5Q-%EF z%eI^B(R#g{pFfJ*?4h>lx<{A1@C)>XZGaEc;^p9Cu!uOYD%jiLt;qGW?HW^3rPfc3Dtk5sQ^Pf9Udjh?v$ ztYYR|DuE};136+g5y*(x#-kFS#SUk5FhWs^u+uS&F)m0#&}GzxHqq&Euw_IU(OSY; z)o8olyh5C4^|ShI73*(YElZ%yUVW{QmiT&%3bvqt+6ekSuy+>%OXw>DvWtA=W{g#o zsLg`Aa0N}5!lsNm41&h++2U{k1G~YL41`o?HKR5{-Q*#OD40VLpJVQ3>8Fwwdv!3; zQfZM z30{6xgd z{#^*^%JXp;WS{Wfcxk5Ly~z__c>#xBPXp|a#2u)bcn?0on3tpK1x$ufwHMCOQs??J z>}PqsIDfCbF=(#|wM-X&PLVN}B0#sc7Ui%YI>$ z>HCm$jDB2~itVsdyng~3Z`}3S`JiQHPVNO#?DZ4)4Rd+N?ko!sPCenq?A55|Dniks zy)Buw8`~^_5293Cb{!(LH0oC`IjxMV{IvuCtWpiZD&w*n?hl;zeAX;(24Jr(4YX#%;Wr0_Xe zy_*qLxk^e})ThT-4&LWUA$+&J_w$y`Eu{5vn%8GUVeq!r1)o2qqM(wx(30;UsGC1< zzBp%aI&LGtS8*%%2pn^GJ?}SK*m-fZ#|0sm?7{On{A2kL$j$5W=Nx`>L2cqY)%s#( ze6;?j^{t@%X&9(#b#i^|;#P?fK!FEBqu3TnG}ZLZlf3lF!H6hPqB?DL^C46d%wqRr zjEBiDGF!JuZGQj!dbB34RbWx0X_wTHr|x|RSE z0!J;BT%9__nV%8G%c>q$(}ZC)JJET3{9Z13Ek`-{o@dsc?n{Pq_us?_o$TSBZtv&$ z&SQM}P8Ue(_uagmcMOPUmkqD9*|&+iFQbU<^}ZFc+v@$ye-=uMwmWCaRLvZc2#(IC za?v-u+(88Q?UbEW5^t9%3I!VaUD^1#NxWQl=E$O+B2s;H?32uuo25;Q&?M8$zC*L|Btalz}e}bw-QC_rI z{nPq-Y1XMx((kmiH^X(tH8iEaR$&hej%3}p9My?x8eiW|SJ(i(=UVF2COteMam{eF{vh9bS4R z^ShyClW-*g(qw%>r`f>f{()$H{7b@G-Bs?@Va#*RYvKDgMNwqA$|R^f~x^>BF z*0*)9QKarpH_fTXzW-^%rhO@P8BLQqSvf%EKuKk%l$UTuThhu3bZfQUs4`3XK^}WM zP0G>CNap+@s%EJ`ne){^*4B)c8blL`RCM4hY6ch2`6GfW^mVr1^LEURbvkD{;AL|( z`oJuA?jX3x%0zjDY=l0k21{HMW5rJegqi7 z#(SeG{_?Im&^7CK6<786W|Le))e$vcM_Y2Yvl6?I5Q~`U1BMm}QmmItggP(dgP){B z)DWn8Z(9(|I&jV`t^SrJt|K45NXwcf)mG;$vujg?jJPCz5^ieAS6cKmd~K zc)2h^00CD564$G4eF`)WI|!p5E98UxMAff^T@As~$HffO(yG2b>z#Z*g|$%wP1e0m zJ-H?nj=nFx$j}u=f(=)G_xoJh62avw<%Vfs>>^P|h8K8+2tlb(8(7H%a!Dvlskv@r zsmxDfCd(M7fd=P=J<-`{iT8ii~w5MRzQ&u{&p*pKN zT@60ub6Y%}MmdM}3Jd15hnI%(z11O^#)ye>;J9-3e#DL3+CS->op_>v7&djMfB{R}0&ZI{`m){R^ zwv`~pNt(=BTsTVnN{q2>oB#fJB>w&NX^Y-i;`f+|V#w|L;8ToPz?kNVwGUvLaLhQ~8>ItQC zW`SN!jxAb^fXw&>xgdk>tfRo(E%)%w-vzX!v?<});pJcN;beOU_-F*)R}~lt?s3v8 zimDJ$@o=ZD5BGj5(0M1qmVXIRQM+j$^#7cYlp?bUij|NFh!QJ^OsoFAZ#QH@9<@NM zQ_5@B6~}n|lNb{NhDs*jbLp}55DNfFS*cKq7EOYgIXhuI>24gF!z}w;BwLBqSQiG)zM9Il3m)?WtRRKe@6PX;O^n6I#+i z{MgW#Xx(m{kPd{6Hx~E4+}DG;kCp@6P%WChl1=hR1`~d9GaRN6un-`O54hfMka!=alz*_MvWD5F4kOz*`s=|Ux)v#EHnx9~^youx<*%HWg z#!a4@zJz$jO7Tx}^tbQu+>Gch1Y6b-6@5v8Q@Fn*WF;50&x>aswMncYB1H|O)&JpX z8YYAqPf!m{(r~Ea~ud>od;zD;Q9a&mM1EOtn%|BRjBGP{<4%T|4CxO$YfT z!%4-5;}xhVTV?E1*J=orQ#9$VBSzME*_`8EB=UW$6TyRgQSh>MA*d31Cko@dd6``3 z#%N2(sPld>ii1t*zuROCZ7b*S1zD!b8y1LZ9QPa{SAT9EYMFdRS-!<5>9|39(0@lI z&g7(-O2dRv&li9w@@>$NRv?dxfe3VK{TX~S>LI;VPr6jYJ1luZ9Qs7inOUsPS&dkM-f*j+yIa$0ygK_ePJL}pbpC3CXUs<@D~;Vp z7TDTxjdf{N%Sf@;O=3>*OPY=End%xQS5wrbnp7`oyASLd7!ZX~5-f%Og5TY>6f{#o zD|D+|JaTrLGO?4ulUSjAtpu@7IQ=#0SQ4x>i6a8kP?N&#Be%yBcU_VtUE&aE2bY`% zFVc0$J#BqvrdL;ouADgnXG5FoF0wewEdyu@06ACZX&f|(5TFQR#>b3X_xk!fA z#@(%q(m$(WT@x|#qK{SDU|cFf(?E8#jhPx%Gg#?X6-^?P{4oC5i)<-pWd|@a5^lm) z!Dn#Hs6DM7)7ueZOwQSLnV%>|zck=1o_Rlv=t3RFQh>6Xn&VGGX$|ki$`gEZEu>yb z{=-fJ3(EB-+_e$q8HJ83W^MLMdK=lWj3=jztg}{0Is~Qhuz_B_i||U?ziWi-4}~VH zdSpsE?nop~)T5SU`z1MxYzROJW;$1@3Cj0M5}LBgr%^g=dQS)fl6s?%x|OLe%<;dY z0m+GT;;(j(gW>b5b-tnJQy)_rs15r!oneR1oZ4RFR3K|GHR3bbukmh|1+fNLKAJ7w154KJ;d=ca@<=a zi6yG)<3dY4<&)0p7|9d<_@ar@05$k~I0awTuLTZD?8Qv*ItatRF#fSm`3Ja0REj;3 zSE4CtnqDLhAd`$!qiOcf2l-IQH~z0OyPuI1*$C|>&Uaf|`Ec_wRP2OcwdRnAB~-A2 zv~}Fj^pj)PV9i1p-#Lz7Mg1KKC+|8llbEF3OlDQ}zoGn)WHm-v?N7Wqf4o)&KmM=_ z8Nz0+rY)HtuTLd^8nL?Y6)l_=d+ze-ALRcMl|FAeZ+lbpP2T=Tpz*fq)VTbe660hkC$`PZ*JV~&un}DIwSS+?+x)|S3F!VP(ZFp_Uz?S zG{3<;`#Dpj={y@@v*W)GqfWN`%;)ZNhhl0^v_aASs_qV0XumK$xTTXz2caZo7XMt_ zeLGVtd$uP}1H<$9J~8jV*OR;*Nxm?Uj8__VjkmOiCgw#=zm#80ow$o!bppX%{gykf z`x%dS{jVlLv3IztN3d_JFCwbxw};($O+MScF^tDAmVWEo*F9;bttKlfuH8t0t=y-1 z5kwY{Q)f=~_SQqU(X1~E;G{bDutWc)=wa+XT?VZdWY5@__2ZS*9F9|F%$v(+S5?iY zetMiwOw?0^qtGu*Q4s%WL0DMbUKjK`IkJL^0zX~~f+htzUa!zAv>Zg3()NF$SF`VC zIqLZ?)PZK$(C6P>sY_ms>1}e|sY;N~_h8%cdi*H1&imfoJ?%E|E2;ri{zveQ)RHLO z*?(YBjh=m*e{Pa6?~j4rhs3K>j`-j!^~`)jb02shjeAq%Xg}+R`QB)sQ1Zn2c zv>ztwIvtaM`?e*8$H4XOOS{T?x}U(46GNCAM1iWNS<^KC#|0>C(RB=L_DI-M`5lsq z<6iPLf3TAzD94VdqXoP9*tC?*8^JC*YLmY%sNP+ZGDEe!BgT?+M~N%lq4%M*wrS{plq` znbZ83tC}Z7sHxThoMnda(;vdKFcGQacuJ@nyFunG;y0KFugpILb@<(+T~(NW0$=W% zdLI4%#mPa`U+rSLt%Qs)z--eFLo5n@kDM-v3z~qn1_X&CFrC8zv(gOR66Fay2acHV>&OOoxE#LoNq!uO606Oa_+4p-w_ye0mqtgSf(zD^ z8WN;&P;q1%e_#H+*An#Z19_tedXPj?8)}zvUrw?x=_>pC7!KL{$XKYWv%UX-oA)dI zg_m#UwZf+Wmc@VgV@G`~A|!^D-(M^=aT*^+`Y@iY>oBfMMN`ymEq)d;ZnaTC8?;tE z$Rv0KiBa_O+LtcssRUuTe*((gNNr8B)(g9Aq##_RYRu%y*8*{?jRS^>UT98O{A_Dp zA^3FVEcY*Rlf!)i`gc1$#;E=-mokVDmC2v@38ni@h~zZwV%|O^VN9fyZgc#!CS`d` zoDJ`Nj_dvUlEDmB*GMA0{R4gD(Gi!J?#saKND|E3Ystvi`{231`mj>yOmY%nkAX-mom_y^ zd?Rb?uPa$1D>Co226vy65oP-GR=(Jf!{|HB&9}C?i{%`_@o1~an}94;{#hd#oeSiF z>*?(b&)zE*g(yE0c+g;fFONJBVYS|rO6+m{A=qL}Mm&r$`S-e^^NALHd=`f!o8yz+ z)-VEtamHr06a{8990mF4p9YtaNObBUG-BcmTC05Tnh4{fw4FOmYVedGB4#i!R{^2;{(3R<1Qk>$qn$&|wkI??6_fl9@q*NN$x7X&8 zz4tGL{vp4TU|V*!BT@R>lua)A1-ql+8Y2IRG0OqVyNlSS{gZMC`i3 zZdKath}@V7c)t4Z((zkJ^H2PN5D*b?%j9?&zayUh8U@@nV`@2F5aM>|w;npjV7jB$ zTc1&ORi+5#GRpjR2>gowORNTj&fIc}Ryn5BL7oZBvsu>L+qh@z#%rTcbnydz{<`QqXW=b_;Au<)s7?ROodqrD}P34@s zw)Gt@+w(s2|J=B6puVjZi!H2ZHu{!9++B0q2Yv3N*Lvukgz4tb*5yD|N5z*tFHHQk zVB&JPx!MR_aX<`pYD{dp4HLn|jjKWB7a>!!_5R z@NVBN!sD~_ct5&w7DKrY!Kx9H|F>(<=Y>zZSZ4fED`c8SVJS9cGgOEn>}l|=W+(Gy zMoKFJ@vgW+ZpXZZ#I}chl<5O%G0Ti^PCv=wY*ACj+(aY>(@IQVVH4@(WFNSGR#H+j z!`EJtWx@I%vd%fUvaVV9Gnp6@+qTUU+qP{R6Wg|JJDDUC+fF97dBQKxd*A2Qt@`?p zQ|DBzy=(2Wd#&!h``6tp<}9L+vo_)h;Kb1Zs+E!5VhE%p3Q@K~fdqe=b5-9*@LFiF zT=AX0|9RVH@HWN1C7GuNX7iqf%KeQ4HH=@1%9#r||CyQAx=PChS-LkFE#Iw!ffexx z3~csmA&l)sPPK8ff9V#k8G{3wE(o%**P9xz7jHl*e+%!QJXI2e-r230@0!%j8NxkN zV(UdD)V5{1GqsYXA zGJul>|hYL8)^gF<&+3(ev@?)ys#XR*k|P5$H^ zRthn0dSRX%nvVD+f8olDrF##ZQk(|?h1 zB%pYVoGiOPGhLFY2pG-u%G&k?!7nCQ(_limKH5<3&t{5qf)*7 z2{#Dj)i&uXdW^RZ(K(xqwbvKNQerq4MZ^%oi zEJG=3DLde8HaoCTlwn%c&MiwhN_Cr^z$=Z{N%N=ar&afnQC6g2`#^&Bw{Rd9^WRo9 zlqC!!jV7K&Y*mulS#Dbyy{S?5@Z9SlVP5jW>iZ49xbSK+hJr~-GF*5`)z3q@ z+OHnP#Uu~8j8WyRZ9ih1ycn#DnHkTlWVRxb7QSLGZf?v{pB7WQ_#yR|k|uPz_D8s! z^= zkKFeD$n4U=Mmnsk#rtX`(p?ihN(cB#8gE4jY^QuczYuzSufsocfnWd#LRaa6k6+3jjW)-|P32r@EHm?yQ#5%sI~L zgoz;}8bWA$J1QSx|I|OVhOyX6wLd8}9Ro#0;lBd(`+EnI0!7A>(+nA1j|hS_##SLc zB}4C?*e|SEM5VZ8g%Q8<|!L8MHE~4-^3WaOI#F zaa=(BQNWMX*N}F`cpPVf7>&_5PjlH*_A^cKJaY;~ilmo5pBvqNMdrImXh9s^yD=P+ ziPuwJM>~LAb$!<;D=@2lwz+R`@PZnp7|zJNm>R}-pDc1BmFM!7T;)CN+HoU?D3$QC<1mE zHfIL#RhPu0&j0NVQtRn-(G$k`?_6=L_i`)AQnB!LY`dW#(7_2q`GXLtk z5I8B(V&jE~J`?3Vl&?~Xxza_X&eJQM>2L02reru<)jhwH1+kwAM{y%+1j!2S?S z)ox*S&w$VDbo%`mCSxo0y9vT&5%z^cQ!RlELP9DNQ8EL)OM%O)n~ChoiB3bukuD?B zw=@Y)|7HL^A}4EqIHm4uyAea?@zdz6RM@Q$s#?=n$hR(C30@Hrym&>A-(!0Il~E;+ zM7pYqfqjtxYR8?UN7z<9#PLAbo$?0}aIL8*B0cIT*NXE3_o=&KTZGNl^Veh*G>e^D zmdvGGA}m5N7ar_^QfzJ$(P6Q;gA?eck#|>b(%cpJ+WK+t_?GVT>9;;~J$$giXH?zq z&=dk)Hy@BPw+ZVg4Fp)Zznr^zF@+x=52I!C+;0r`6aS`bwo3oI6Ayml8^|yL!Sd!{ zbwoM46pkysV=1|(%__*dZIpo>Q3eDsW zAKvsUi~^}Sk_OLE8LQ+x)FxHZJDXPa(Q=hqky#D-P)D}SY{LHC7)sEUYKbO>ts|RISNA0ygY0jYoU(su$<5?@XR(;O%Aw5Sw0!SI}4`keYL_ zyDPUwuFdxm26;y&&GQN0Xa-xP)QOceWtVg7?%o!{*FGlCDrS`w0?6=R9RE$Z-ybV=~i#3WdiW^{>@5peXM&+$AtU{IjDpsq z<6AQGPuK59H(&%AZbK0y?;^A?Z}Bmz@{~q_hly{fmBkNJW;xy z_#DHR<{-!BvJk858<74&k`%v2N1~Am?FJ*Dq2WTnmv!erK$C0($wNRy`yK#AMwXjr zsqMM74O;*TA%YuYXc0WvtAHW*ueKaS9^S2Mln6WeJ?fX(-U-`l3T-wTS+Ka#@z%f@ zF7Hi5nxEu&+%kbsS?T@-vM|T=N=Ff3<%dI|P;xnQb!V82j5N@({VE|KlE9j=EOhmu zfR3Obf`;Z25kM$VLQ59U0{HtXUS*M{sDcQ0)O)Q6(!G#(FDL})-3mhFk+M+WfQ6?X z)sjHUTHJK`ran1-VOez1nDAke(oy?;0r(gVnceyHKAA-847t??G)`4vL&FADl^!^ll8! z<&6T|efxj&o-LezA)(+j$1$@HpX+IijCOgwvjwBD`1A0VF#G&s<%8j3w#)RopW@Kd zcAMU51ySMPsALBG+#VWCufgPUCx#B+?e>%(7d#xj{IMZbrr*ayWnUhIgp+V>AcBOI zW{-nG)tmD7Hv@`vUEN$>7w6>pT4_4&W`+YR%mgSH=VAMIg1eV%hb+^jBGc5v{mqV4 z_WeAE))#f*t)u&VGsH6)4B$w8ln@b}SXb@nBtijk57-DhS zNZ7CTV$J|0X?gqI(tJ>G#41R2jf_IV@@V1mFCzt9*c(Q0HYffrAXpgQyZqERDDQ=R z=9Yw^g!W(*jI^vJ5<`g?_ppoo@nPDpW*HR+%8#86^&qRF{9pOletruuId;DQQc>{^ zd*C*rv6`Gky+i@M2wJV#;uNj-orL0>%}w~jYBb2G%uPrSi5h6mHmQk;2_irms`4nf zj5P$4STGP#r6afQZat30pvWlXzY7S>3}A1xrLH-ug-$!+8%rW$;iQ;*R0M?})<8m% zkzt(F>NVT7b$ep9s>um8(1@pV!I^V9bNH-38Z3F@^JrE{IXuZK?|p3aykY39k1g1! z;@mtU4+Mf_C??gK2MjqAWO_r8IS8Q+ZMd3AKeHbCvi|Dsao|OvrC~%T6u*)JlZq@O z(6C1cUy89HHBD7gBp1lQD1LF!DcDf;kuG0q_?a>$wt<6Bu5NvL?bt|AC=gbopw$5UO`zM<*5;LM};PFaQN%qK-js#ejIC3JH(XqU?>Ui?@3Q%7j9` z3W4awNSMU!raujuX-iITPzpE6XUg&PRM?W;Tx>qzbrpR!DO@0JB0gi(HwOYEK*&Tvvie(KY_CtA z@8+2ibQRwZfE$sPsND{F{SmaCtqa@Inu`hE+lwhSl9-7@G~(;q_1eEs{O>EW+p9aw z5`$CZ(L$9(jWdK0jZMZ0EWPjvK4xkwg@TXLB^XZ5 z0ej$sj;Iug`n2ZC`5>gMO#XPW?%7jc^&pWX%RmfU&ec!cq(&sdnc5Ti+=(V3F)*bF z(&A`SH3}*-a8?=7QBkVdlw57p*{%dS6NvI%Updp2<0PQ|mcLpV%Q%cFOA^E?a8fCY zyU&E=-=4X<%!j)*1i1{H?l0L%kBByh9L$b<=inxRw5Igc=K0GXW&x+UhC(3M>AKJY zdvy6RPg%lJvZfbBson6cU@7snb!)iwr=dYlO(w&G=CD)j(J?6Vm@;j0UQ&*59~J5d z-KqQK$2syv1F>m>`KihwoZ61zKr>>n@NbWE}YdzhM3$v1eG`>owir`Zd#mg;YvW zd2Z+Gk-~wOAN5~JR(^gv+CYR~{n*RhfMP1%orb~CV87`g4G)tb+$_k(W+^nu|A(yJ*zbgJU1=A_gm=18jb_3a~o%rKzbF$v5o~4~(=!~-%q5bT% zy2Q9S_@4Z?l;>`aPz4x5CbHL0jK=zUrz2DdOUF0h;N%^I#(WBUD&+BQU}7kfN+?rD zk`Stv4LNZvs5~Ndhp!o*`J}z(8B)YN(bR^=8QN+sQE1Rjfs1XEJhE-Wz($IEn1D&= z_uNdJ2c=%utvrUwtw$5x3LUmPfaEMGfRQ^)%LL(_s(6ihtn9 zKv^)tey{(=ImRy#7_>L6@66NEI|(ru6~Q|G@w#4_{B5gyu|Rx~BF7wOSii0Ny^G=g zeUbu+)Y4ak4W!-eK%nBg2BDczh>iMG0j(5<{MGo2gzUdon$+rfc^S$=;H)QD!zr`T z$XDj&gVo1O$LC2v3E_k2^&agc0u1nhJu#&~&6TOr0gkA_4+_5m@qvmD{1^F5D-ojKsDw z?Jd`8G*+P+P30BJLY{G4J_|mjfCoH{Iz5xSX2+da~x%yLEWf*>8qB zSZUu4C$G|bO2C-%T-F8ySY>ZOf(*-Lovln`c3r}R%mNdVDRy7DK33)vM7oC>Zv=FO>&dDcNoJz;ILQ$GVzXiAzs`oZ8I!hVZb) zO=d?wC5A2XeX~xDmryt>zgC0GgMOCA?%>uhrir`d;EZU;{f#j-`|@O34Eav2R3tJX z4f zpCiYSq|L_X#ZJS2^(RDEfOFp6&Qwk$Pk78UmbG0YhS00k%4?=TQNef-{_&*A-jmKN=4VU2%13*{d1o-ln(bB`8RCckFh5&Gy?2BQxX&rkR8 zV<1O>3MSS)RpLE)ZAXKtg(<{1sBpBXomNhe=no36CN9nj^Ii&3uuj7;wZDK4_bv*N z><}o(kz>P%*I{27Wo(c<3P)#w!y*s@i8JyuB{?FG9v7N!9j3lS=_m81LD2LGxC?-cmH^ROTKTb?*e=H-@sDp(nA}=hg+wv8G6WKpNVqP zOh!AUNJ$y%vSa|aDB{(PL%q@b#-jDwSq-}L>~5Co@zEUO0{Nc#H!4UkM|@@ zr;zqaNBji@KGHpX(cbap`()b%DF$mhHt*UI|BYYJJ3g~U&o#;xre=}YZi_KXua>Nt za&1P_xn9Qd6P?3#sKkavPqIuiQ_HwKRNEAOb;sW0ynIh{xlE(K3nOt*>+}X^w>v~; zO735SfV?W@2E2<`Z)Ct^i!iUXr0~0$u&WnZt;1YrS-#-5UAZ;Uo%gh_ZD=t`9RAVp z{Q>#39>!WLVYV1M$?>R-Y!qI9w_QtPo0#Zp?@ccF!oZr8Xh%wlj;2vH+e}VNqx34$)d{8afxsise>t)1KxtQ#3^Nt|f z0UB5@j_C7z?mr{za0f8G==&wMpMl1pdV7B_(Z8%n3|sP2-Kj4bj)Fm+?{3`9<|B9S z{(H1R_t~tIr<8QGaL~2Y1h2_(;tDb;Y;&tdWZygM_4_2GVY+Km4b`>j8Q(de#2`w; zB$A6#<0!UPZB33#^?zUCToLV0Wpgj48}D3aY^sSW*iXx6 zz_&{63U~bpD+sDO{d%A}0EDPF!TW8dMLhTmIO91b!=B$L1FIN{U;2@)F^-2Lz`KD* z3YH&I1k=B1v(y#fvo~QoT(-iWdh0h8{@v*h8h7t%HA)gBAonXYf{7Ah)ME8~UkcX# zi9O^Z-j2V&H9tae_F{`3AyrVn)e@kcj==js?>3uIzAC~ceOJGBnWw@y%W<&Z`pzm} z@{gMro%3h-yq(M7HL!`0uySfHSd;jQlOM#8W|5(VH$ZqLgC-IT>}1DqkQ=N z4)1&HrXg&7UFNcX%}HJ5{x1)&C6o zKc7g^|KG^3_B^ssvDkQAii1m6DC0Tjv?TDkGY3=MxW6!E`x1 z5Q(siEUEI%U5rV3s^ z`D0|IIG-*-<~7ydwcT!5R8CV) z?AM6@gn8*_0@v-b9j-fvAK0JTZVvg_w>w1i+>Ry^*320S`%W`Cp0|&_irH)X?fr>f zmeuw!9qu8H#Mo-a;gpGvpFu)I6Kzu!U}5SLk2p;-Nkv`p`{G+-pVSxG)#d`nDwxOL z4UHvtb3a8p4#I)PV=wWi(!0l@X~AtFV_%aH^V>;32e8Z1mj{a?%%-IoTAGHWr&}mr z%gdPy7zLDnRUij|vXq#nnLBrFJi-{60`kxA0l;DnHer&e$q5E#<^ky|<^YB79V;Eh z6w{mQd*zlWi`$2pR}N2mJ}GX@;fNrK$86D3uBJ;qZdq^B482|oQGn7`w(hhh)0|i_ zrVa;#P55>I^5rdM`FnjPv4RXpZ7h)gw zftH$~;6BJl`|}y0)a@0RuWcG-PD|hV-XGh@L&0nVW`t$33o1M!Q5sl7xwgI@15l#e z3S=l$4`rMHIEBD$(QVwf_s!l>Ki6lvfcV)6cdPvLM0~ z7w_AudXNjGk7x&Ik*5HQ?R!7LI}T(vY#7~4xF*zxLbM*WeJ{pjt}0h@J_75vzsf~h z?>X!NYo^J1WEj3jU&+l2WqoRHNF*Ltlqi!QasvL=Y+IPR&>=ib6=?uK+Iw~SfZyP2 zaLANr5UuLPtM9S`LZqDOu=A&C9z{poy z@kUs5wRdlSx6=?rK{3vbfsgsfnc`(+-bGFw}=SjJ48(Ngk|5fA%u zL6r}k7tK$dZcr4D;9RoMQXV^a_R1lqTo58d?0C*G@fxIsL#$_SH7x+b`gKRJwwLnj zj)V8MGTq02Ed?I!gg=R#o{^uREAG5+Dp5WzOJTcRi4C`g4UvU?6&YA2A}(NL8(L8( zFrW8nzld*TF7*OmZ61{Rw=O)U5h;BJ%hDTD#r}W?dQdzJ6p|aZ5hR>|TI4Y#Z zxHIIdJg_Sc?)GBdk$F8p9h=gohBkRA5P=|}170^tQu4J*YQ9{`nRD-+OnYg5=kAa$ zog)V9-{2OhU<>{BoZV=o7%F(uERd-PL@CnWm{lS1#>MWWF8$P7eA#MfeGm65rM;yL z&#Ucr*-Y@&c)hHG9>&m|`Mm`xm+;$V^`ia5b&0M~a2?kLz*A&+e5v#?4Q%5YH7`fYwHE*Z#!|{bh ze~8nj%P#t+H1v@7jl@@&YSur!<<4B|8g)1XR==d$uIoxh2LNpcPq%Z`1DC#GO;X66 z^S4##>fx=4zlF^Rb892w8v9PYVSpXkx`w~yk@#4P79iPzrmugsa*h(9`A6tdK z7m(ld5KrD>Bp02<*hthuXx$eKEhBF5oeyoI*r;jBU#zDNmb&X|T;PA|o!h(sCjv}N zl{4SSd)N2Lk9Q44pVogl@keEVN=va6NX*98yF~_fT+c6f8pC(=HJ}Nto}z*OayaRs z;RYmwBl{Ju$NO7*6+EFzatQd#AHM1?Xz~SO=Z}sO#TDLx4mFPs4Bt6nESOQpJ`~sn zh%lZuQ4f8!DH*Q(5t-)7f3-IxlfK$PH#niQ03!W%vzqxr$AjfNKR%rNnZ5xBEmUK)$LFUjjJWvP zwhwHf-ORh~8oV~R9xuB`D_6vG8AUwl4feKe%o+V?WMn_a24g>8>>TvK4GlV~vV?{e z{Wr2$BeqjEcYMy%;_4=BrG-O!_=o5H$e7$Wg*G;}^K6>a?!36k8d0@EUk^{D*R!4@ z;?_e%WNl`7c_$2B>)K#S7BSk&xJiSC&(CKQNmG9)e7l?6TXi?2V1p5L=(h!D59s-I zqp#@ym9t(r(+;a3PR{%tSRGYI0OE z_jh^w*mONNTkZijAZD2Rh|x_<|2{|}>}#O`EuZPVTdTRTH}|lezo18KQCe}IStQTY z?7~9Y7zwLGk=NmFz(>gu{=-m=iH)dTrsRA8ejB3;Wbelb(o5M z+^gs`yI_MWjVQ1d*hIZQd1D~)TFY`G<{N%-b#`q0#7tWfoj0`F&N0*_X1a*M&`1m< z($QddAfHzBJ-0yVVz>xtCK(=P#^F1UO<23y(ct{gGRuWGh725v75rWPL;KoJB-CJ& zqTY=+C!Ni0Oz;)$)xT-==)O63@D|$`Fj>ZBVRHU*GyH*V|AF8n^Sj7cC<6sb+RP8k z(HRfF6Ax#@?Mu;@I08%*PMc`4y74AJm0urC;uoi>$Gss#updB7zCjyI(>bku$T%12k?4iWF0?4RyP5NPZSJBeAjUp5Sj56dh{&wD(xLSx zN)o8K<{an{Vt2TWr1!_o%h&8It5bbnsa?gTmj}-S?fpB{Q|Vs(i~xoJD*feDCW-eG zH`V_XLEuLyAek2xMMBIph4OE0sr&4R(pQeDV69?cWE~bp_L27|(AVrGg>ww~>wd}A zI>mK8TYxv2p;c1zw<#{lmqcd4&qDY+HS%|2p*0jx(4^KMoLL{HJIxOeJHuwwWKEE$Dh&2m8*TTS^b-%e@yk5F)&%Us~bY+gp)UZ+cj` zE?ECk&1aB@*=3>>&t8qMo_Zrg0LZ5{wWp^yCG|5jJXxE30xwf3cuy!=A6k3JGns1< zoLy=Ctet0IlD-RHTV8p_@TDL+sT`d-o-D`8+hVM5d)OOEaZ5H~596y{wC}p*j@Lk_ zGZm8#P9%h#VpaKt8v^jf=iS2w(gJLT8}22Oc+@t2)_a?BOKOmyo5-%e8y;NV+ZqbY zoCHh13jw}v1Th5xi%st_25SD`cBuno+hok@!w4pIPt@lo^@hiF$c(cbkqET+dg9Qk zi~BiOP~=w7S1TCwHBA`d6+44SAN{H-!kEkzPd1Evb1iGE(q7L@gR4SJR6oGT!>`Ua z=6sx+r(sMb(>L83aE?Yl*~vdAlo(2`=hooKT~lL}rQ#TNePvvLO{cx7_i$yY(Q8X8 zrvAQc?pRa#C+4*tykK$POb);9D}jw#*7(@R!Iv}F?8s6kN(IP{=HPd=W=PS4GF4uy ziaSzK61^uxZ!Jxd{S743D(CQCW;Ljt!SG2OC&?xm;;G!VB9`qDP$;AKRC;nTSp6Y? zlDE|F#~U98v!~=EOT3uu1=jcUl}Ll&az$#K!RXkBH?c|~tqR`=)LRR6aE$~nrW|=2 z{mu~@m16jP-sZJ7xaVri`76g6w2sr29)DkB-v6ZRC8B0G`0{Xlx%PB4Yi8TEvR zr2IK+aGVo2$6OVzPpEUrvHxV3_}p*G5lu``B}ep;m|uEaEg)2R6hUI<@nFPJ(Z>D6 z4|6{Y5i!L)PS% zOXyM{rcWQ3yGa(N(R7db(YxQJ$f-faD2#_A-?bc%qEU6MT~zqXs+)vY!}L zz8`W~j#{?VmxXn>p`x1fJGorLRhRJ2;l=aeGN4@1lxG{Br_YMh=wdi->4rcBcQk@F z1vH0mwC7H~OoLnVttp8Lb@F)o?i)QaPixaAy+WIYkEA%^$_3v*C(eQSMn0bjGzQ|! zShiMa?KOqM0vS|Pq>S7)Cxte zDvse?cskva>+b%M-?Gj(XI-B&#$2l6W!t<1HuLj&)Nf&^PcL?s!y_>qipj?dTWK?w zUg9;7D+xBV$M!i}Ar*JEND8Th(q5dPvPz@&j-_D0Nv*l&aLI=eUR-LV2LnK4=@V4z z;tG+HC830~dZV?5T0l*|4=IN|F5^i&TeX_|>9jnmrQOk>0?>}|MI;1&Rc)8h?-%9B z$Vfx=*-m5ra7Ca9%32?dKfHOjAcF~2Z-SdQd|Mv*F1>z~48_L_JTXRJ$=+#8x>YAxzpujr#YC#tlr_F>=!`LzPHVzm+W%g1J% z<`RIx{17)FQ9)(wmPyOV;jE7btby?F zrw0%6Vvmo&BW<^FvY+xrHKDg^U&C&)q!G~wPv=!U#WXLXAs;k4yNLYO-5NDT{7%IE z?O`>Ie3?2UwB)t;_HR)xC;dibpTqm2_2qT-!?cAa#qmI7^lRLO#11ER2J$DapEx}c zcZu*AFIp8<(IiBQe->6CDHTJ}NV#Ou{EoC2h8VxkLvPR4$3P;&+jrsdySpb{7sUTE zRLnM|bt2@}*%{IT3&z%VT9_;Hkh0XsIWQb5G`YE-e>l6Kaa$OQsQA`kn0Kdyf+8&J z-W3igQ=G>!-MgCX>mW zH&-(B&damE^yXfme#Y}6Lj`ZtjZY-O_Gc!dP0Ah)$u}acUag@ixIu(nRKYN>Aq71X z>FPcKA++J$&{mEk3dX4b`hVOAJYiDw0$-rB5}!ezBLd!XJ^#trz`h>O^!tz=Vk^$(vxK8yDw5qptgg=jQpIWL{I_x(pu@?00rGIQ zq>g)VA!7=gjj1>g)6EQix3u`FkW4c@%%S_zxq<-6+Z*3(Pv#dXbTUm;k@=0!VKmKQ zf#xUQLTXK;TO;wubT^cerF@<;V$?HA9}~eXl$Yp4(aWI7z0NyzYsU0`hIVYd6@(Jq zGm}%O%^zYKe+B01kzdI|^*yaoJzBbiN_62N1NQAVzecX8HVcj`@W%|+Wr*+~?>%Dq{k>BDY>hg6ZgF&NF=d9?F|1R2Xb*?HE zfa)Ee#P$zgL%L-#Jw{oWv;HXI(6i9WJ?qpd?qAeAe;p^LEt$(9L+LJRo1I|ke zQ_V$C&ZC_IYt<;h$6#k;Z*Q=yO0o-p02>U()sVQbdX{lu4ool2z=x0N!|$+LR%(5c z-ktcfb?GdWNR+Q~3zWQ(NUj!y170@$GSkYE!InzIp*bZ@@T<#}V3k?jkhAE5jVZdJ zvDasRXPwo35_RZN2m;hnV{f4OsU)@tkHf4qPuW=0Fi%<%9~*mrC0VZTe% z6X+>#b_s5J6s`&1!Sj>Boj1*+>=CYq$ex({91f|5^)bvLi6sZWq<6>>04K29Xt5emy|+%3t?* z*k&rL*-H964e;;L?)~htxF8#0xvO_(b%y{%lb&>&lP*@CPh-g~uLY{NJ(BWvT#}7JV6ORc z?T^AvP|er@^~Yf7>)(BlYwEcz=jdb4U6QIhyLY8U{~-VT@bM>vTc0m7QbE(TCtyN; z$^7z6dO1g1F6d{5q@{^+9n2RoL)b0^3u9OrIc?FWe->Z(5;q($iJ?T!IC$dgUI3G~ zV5YA*eg`OCh%vc{;CIyM29;U?S^$#$Fd50E!%NL?Ym$FHo_I2j z*T`oG$t&4?==>>xhsYjM6J*yO6o|_ljZRIr?` z;ghYzG;MAWP`E>|F~x2P)PGd#)rYDx5hF9e#NyP2K3iQD$Q$oTfBbN>Gf7~_7~Ed09X`b$e*nefqGjWM{(=HEWr;1An`O~Ie|lZ|Sq8-cWYr2cDr@8FF(*n=_2Ya-r0+3<#LPsPoRT;xjl zy?+RLPqS>$T)=+_`j-+qk5t}+X6s{bAril{6lKQ5n>Qz1vwJ4yBz9Npjkj-^>8R#g zH5{3nJc&*44RpJmX1v`h5OAQjtEgZm+rhe5HfF(EB5ayq53Je7_0SlT1g(kZVo4M zR&ySiQ;e8({CL|kg-Us$K9c-V7JEco&HxtM_ajuF<_MptUYWlC>?<7-qx_^!G9GR* z-LHD{U1oNg(@lH!3G85dJq|pZPgQxA<3kG;@_`jDmh#Pe-zwZLg{}tXF_}+6Yx_ln z8L3nhRg=mDZ$%vjO-P~2b$SxM!$ve23%9!fTI14@_k$`l8^o+;&TGKf*-G zgl!lS!y#M$bO`ziUl40wkv})n+!9`1awQ>Ap72M$VtOTT#8LP_a#AR;!51tAhQcES zQ4;amJI&{lu;^-{$I#i&z7BBb=&cQI)O@6Azb5{a=_!>;?yho7fU^Ve-WsFG7--hM zMJhBCw==(sp=G}#JZUo##7@0`k3}x34{qSf9+rC;(u9yr+c(z ze3#;8`|z_%uCVl1s$9oMEK-@@?LcW=-C#K666SPq9yNI5t@uBs-k56GV@Iwn0xdHxS9n{Ap zzm+pB>{lT-_hGfMv@Zw7rVeOe7bCOF)0)pMr)g_=c>2m#m9T(uat>| zR;HpR>h0>Q9=34mGCf#hx_4WH#(4_xVZO zgiS}6$0%vP6=|pc9b9<9ffNB{K98fMdqDlqT(3*e5j}+hZzvXbG6#Dp%{K+e7_Hdb z-B*0`)lNP?-4A6M%h z0nt9Po4zHV{zV#iq!>@p$RER79-*8nHa^drr6lPF-xN^5z)<9WZ&4Bvs3Tk#lxhD7 zfulZc)`M}aCvvU*g~~01SX2fnY4-zUu1MkvmRUk}_4RcxYl0*_h2K;d;5&_+8=rOF z=&EIP(X5ugp8C#N|Gt_vd#fyKjpl}j^MTR2#gLSooD5w7)C^;21cx;^X=Zl< zs=#3YoiJmx*~eEU?^syOQN+KrN7C)+mbQGyJa` zo{IxZZfo!pZuR6lHx}bdz3}I!TF6ewu=aR}kl#B;NJA zLCSN@i%v5}zmXERmByldphX%LNCdJbj8RE-OQc4pIi3k9UH4WNvQSh z+{RBy51#b4ZWEY8P@W)@vXXd&+uvD8;k@*AO9j%@dlXVsvxOaT!HJK@182*AQzriK*C{UIx-J3K}jVv+Q{SO zzMkj8&nibfm?l52-dBwZTK#QOuBxq)F?tZo7niZuUA@Q`R;|YsdH9VpO}BP}STpBO znnJPB}939c1yXOdc0U)8b__#Fch#Cy;!B4 zb3(0)J`5fdV_-}tlsHl@iK;{3cB!uhEkuard^E`DV~(jkSOl-T(~U{J(lK7C>pMaU ze>b8Mnt$SzX05&-r=;?$JB;3wcRE%}(pUPR_QsJZoXX-9JK#LaI%v$y&G!bV;L$m% z7Er;tiXq=`z{KjYKY=;Keph?&7=!Ng=#Pxi{Z6o^JsV=VgahtfUvx_qs@BrukAFe% zZFow5YRf06_kxis^5gco)OdJFXA4*_>H=!Te806D=V6t`Y|Y>l0tXK2?`h_A_e-s< zWxSB*dY*pc@goNfQ5^misHNTc$?}o%D@BVoB&*+*D_RL5I6te7n7^l`J7 z8{>ek<#cD2Ui0^GB5nDu(_(0`Fe-mYaK^;WBU|IQYBh(e$*0@%ufnuV-Ld3Xk~QDj zQz3KykgBl_g-x0MIg*l+SJYmr){dlxwOp*sCK+L|T&k227iW8`cb#^MC~CytBdEw8 zqP^PqJ-Y*Ey`qzAYqupAi6sG#DK^_Cfv|U+1FPNJRE9MhW7mG+jyr*T%zO7#5TRsA zepgB-rV7Z}!&2ExY9Wtfzx3I{?+!1ym@4vo-{WjStIFmgcRDy@4(IUjG0&zN3}KOf zW%xOV;`nf?c+lM7+TeL^#e3?RWY9Q5Y}8y-~R% zwR?UBqbc1*QU{IPa{de>T3pE%02#U)W}g=<`Xp)_A0fmoonJ_+`^uDfR$Oj1;jYhM&X(CC?z_w0y#+|{4$0+qf8_57e$MdQu1&N+ zbFh9EztR3EGk+OB%%!VDr+Ju;6-)K=oxng@s>t;?8?{@ZXyk04lu$-n-<;l#xQ_kD zbP;@+t`Gk=Hl1^&DvqmC{Iq0v|1V3dR?0J1K$BGuiJdq!86(A224+5Y&LP-uvN{1Q zRvqTI)t~S(T6J(Yqx*jVtw2)0zp#2*gQ21p4xkxEh6hox{o7ahaGFK+3wzVEc}y|a zY1FYTN9a5GzQ>82ShZ2Yr&+fV>=1`=cE=ORn7K@DV9a~t{PC%_Z!MMzfz7hlAK~3; z5we=~=81co7Og9_ljVyxB8~bqJwC}eYc%5MCg$D;J{5!sE6}P{r)p9e=lYEfN^D>4 zC8Mphs`qwAev2)VK-tbji*o%h@9LuKjeO9n*wH!Ng9Qjhk|$A<0|3 zl#TA5Jnyn*&H{ExjoJI-?AE4S4dgf1!N5w)vhJuF{6u#*|TWh*E_!y0&GH zbk+)&r)9{meHki`KNhY>>UF4hR0fsq{6#ESD$$NOlhYfPH`)Q}99av^SwZg1?TMEM zS{+VqmTZuZgL3^S0S!$rE$_z;7R_FbtJkM_`}*b2ecJkl%j(6ea77l4PCP0p^`XvT zCpM%Dud$muwvR6~FEZaa#9IG`qYDrv!H}>Ep3%sm!xvCCc9zjQU4$gzmCs z(bD3{;4_B5h`(hF6-a-X{8O=OLecs0oWm>Es8Dg|!7{L)zxntF^0#40s7|XZ+9xT%8i#bcg_|xrmV=VlXXq$8-`SBmn!}Qr zi!zcUECKFHhP^zB&7v-sJk*ss8ekkln+uOZi_B&El;TMSBU655PFSPX1?@RDbIxVt zkNcEwSClk9`yP}N^+GH62G$Zj>HQkBcZXD20a zJ)MqBzJ1X-qFpDNHOfic^jdX}?fp2{o@Sude$V%XF}&%vpYHQ}0OK&u>Hh)GUtNnO zFWp?ap=>Yd(du;O>VMZR63FI}{OjhnRA)02znSBEDpf*%WAq%-fh&8|EsB{p>T=O- z=W-xhm^ge^u_7a>J|FqzJAPcRIN+k|xvXj2u{zX{ORj54mfFemak*uBW~r?cc=@)$ ztkfEF)jRjm{D2H}SRBkb*PY8jZ0F~X#+9n1SW`yu{U4IR+1GMSiz0<9>y&G``rIn0 zKS%T3#FBEIN!Bf2jUx`^*fZ;uoKv54_alJLVOKuGV?7RI^XHH9)MxA1H2evk_;4*X zx;)NPH`Xtj6K4S<9(33ZDvKtk z9h14-AntNTeK3RFMpLeOp(jmp62I0CIhm82#FQnAE$g=-jiWf_%y>h%$>CQ#z}07z zaT%s|vTdt_((6*URKD-B__MFbEih=(yARi#l%3RGkXmP5&LwSX`2U`+z9HH8{aEIQ zHIBUM2HG7KSEa6ID|+@k7TsFJkKd)RzsiBy`UAti-GuIb4g2|<_ltide~U*2$;Y&?Z}VGmU@LAK z(2wUoc#&(GSIiaRK9#c!3Yh)moxIp!0QX;TKOfG!gjql5^5-s%0~(yfsm$61x8SI1yP5mMa||iZb<)aZ$OrSd;^~vf z5{a?Sfg{i1rf2WwrmZXZZTbRMt;Z|oO9xf%$?~%=oEUq)Q!dlpw;HY zAfTNJQMSJ9`X^fh*7KzRgH}~V&tB=Cmv5>8Ycjcb9yCw~w!@~C-=kr<4 z9?|1L;rzLa1}}WY2W>_%W0g*wb{EqA#4NUa(}(~4SY)W)v-Z=6yLJahJo5z~wHn3L z6;Qj)g|t7V3fo6L!#m@P8-r4QK5r5Op7?=QZ=cIueRJ!}oJoY-C>Dz|t z%LjA&{XgKb=^add^J_E4S9%Vq9DMY}T^6B_dYGx7weS^P3N zn~N^aLH_my^GnGUvM)fb8A`vt9XamlX52l#1bO}Ba}4<-HI+1f`~W_i(}~_^-NQP~#WS*Joy-+47MG8gzuuR#eEImze+Myhmp{+D zrqKVI7dT?b{j}{roNsQJ%8WVdC{{l{}zmJ#v1=2`hUT@twu9vt)S+~Z8^8K#{3B@IjG%XCBH`HG3)!8uD+pGe8J28I`Qs2RPvEGw-1y90+*sOqaN+yBUP0%7n<3EbuX4mKRi#u|9AWCTTV|+LzgS7bA$Bbn__;)_P;vyDYaRXOfaSkW9>%^&5 zpkTuv%>U?Rz8JPPju}}jee))+S=WnOZ|lVA9lCI`$Y;}{aSVE^KLfvBMpTq%@pM`9 z>0o}j|3uEI9={Bkp+K(#T`GhU2Wy(|6IwPYwqXft6Fi%U1zat*)&Gpd@H|Q^ffOv zu!u&J+fs$ED*m2iSS)(!HXh39!)@J9^ES6>**x_DWf z?)ap+9%A&kxo>gTC-u4Q;jVP+cmQh4QYO9f1g}2-J!{=Pf8Hy}emB=_y^dS&zL*wW zuck%NV#kUFeE;kq-hOpFs}tPHRKlM{wC6Mb`3Lx4>(9CU@~3#@=LOvTiC2wJKe8De zd$dao2dm$lPW8P%t?H9_;hnj0EgLlLaVf_KC9A&pnwjCU#z?Vk%wt^NWf`|U(2Z7I zx^t??WBuG=^nalrAOEzm)R08AWh~EL+K0&VH`4x!8)zQV5!O_8d_0VKh1qh`*pE4< zam#=^IobT3K{vn1l$~)j=gs7u8{g#Av3Jq)fA=$|-IGi%^)yhlK8md!xt82%>yf9| z;EjPH5d-8YdtB z%|{akvMQEhu4*G%c5hT71HTgIr?#|>?+y>qHJ5eoOuJD;^QA9g}t%ozf13n3%K*KD`|7t z^_;%RU5RlCDV;n^2v_>5`|3ty2kG^8!&P=pe3H&Wh{w&gJzoO~iL;hJ%&iQfZ+QR*nUVmLSe(@9! zIe*c4ur%!FZ+{#9wpXYC`S?%bw<4z+IRbFEuzsyw5gH2Opo0!7x79k){D4vYo8wM+oUUCyO>}C= z5dLn_@cXeJe<^}hbBeiR>h(Kv!5KQ%j7epB>FvjU?8koW$A0WbamY1a^X9wDsc~5^ zy42sVn!>)SZv<)D>l&I>DPY=%BUrN!93(3eTJ4LtuE$}l{orN3O4U%N1<;KQ6n*+f zKtnS^Xxd*q8vEyDpF^g1;yON>L4yh1B8SIN; znESCG`z#EO?=ynFEmko3hgmH7GauuSrnJ8DB2E$u8TjNd)>mG_f+Xk!LP3NbChGpP z40gf@5i%svh*gRCAoimyRLY!a0YX6yClbM_ge9$+Sp+qkNYp9EiTkhEYu-BzU#WDh zzr#Kk7=a+Bt|0*FM2Oh?&JNzsSN1hTS@6n(JP~e9_7OGER&M=&GA|ltFof<#h&b^* z4szmC-_f_(GNw+*Wyz`?P%~cN7|v!Rn`}SRh;pMuEO)O0Q1n1H0iuMh;)fKiRx>W{ zelmw1)sl;PG=yaz^8VMG{#J8j1hNT~F1do~P2{ zZ^9%L(s3gZ>{QmXFbRds!s3K>s=rG>2IONpI<+1oD*#qFnvl+S;ZWMi4o z1DL|acFH?&{*`-eU*6|Q&;n!yHJoS^Z)*R7OqRkR7&1}OFqTaI>K|q-E2FRb6#g!B zRvHAl89Ci5G+;Sh#9%|)>x()K@4oH5@eTt>irBGe*;H2JNR?T zaNfG-6-F;juUN@nEw>8kC}+Gf!y63rUagqee(MRB55h0cl4v(XI~H@f#3pkni5MXWT>0hKT(1TeA!sAxWJiIzbFEf7T0 zbc6tui?qXO(xamXt03Hb9Ov(PzKuIiH9ee~W$?GkKwA7QU1Qna{w|)*z2Twh=+wd> zUyz&bRA9j*Zj)GNnmtE-wXT%lu{z4OqwhWUDpt?=aj^C zi-fn(bTpwM1PCNfxrexaKK@!`*}jZ@`4Ij0FqUNo`;BGkVc#*9rH=i^vQ!}S5Fv9< z4m6o0V!yF$pTpmU&V2^u@A*s_%QAvMb8Z`Y7iR=Z_)chOC}eyBcWX8S{{1|Y%Bsqq zVN{N>tP)U$u?#eXCO`{fm>SZGc;hbP`&@a(vdqEX4^EiqzNHxWD9c#p8M!p!;Mx{S zfzS*D4z81qx7$C#SoSx@{|94PDfrv)Mj!i)WhtVO>}WJ$!)kf}(=@#J zbtQ3a3(Frbp@+x{ln|$_Y$A~&%eT-?0;b^^GL=F)7FK1Ao6iVKWJDrBC{)Cx_MT4f zHrh0F1PbXmpqmh0~m&e21x1RSaEx; z1c9jsvIvMofg*I1fZ?wn6ws0sVMJX4@van@3`?ZXNb2;-W%q)VsLZYGJ;y4Q3 zG!V)uG-!GAs&HK4U*!0_DGk1n5XuyX_%O^=`s#(nI#{lTY3POXAC0E4UlPI|5~#q6 z@!*u!aN?Xv>EKvaii)PkV+>r-bcA%UrG{x}DAyutDvj$i001BWNkl5uQ!%yXl53gUgTY*oJgGELm;#ux@md_ zFC|e<1lRG$ThGQU!D|d@;Y1^eebTZpgE}&@yJ#;X&;mK=dIA6G4nnu!NjwE^avA)0^~cjDWz6 zbo%XRfe^Z`d7f>KM3@>Xl3%z+gcd|I1HO!wC^w30$Iq!im{l+|8`ss*VrxW3aiR`d zs0zYKH0B8-8^chzk#MCMT7(`TVCZO?=aeF)gJat`u?a}!oP*}4l<>yFbtIapW!zX+ zmdwcr4^2g<)&gV&4SyZGL`w|A^mRnTvr$MpSvIDiH~C?nwk6ShS_E`*W7<5foCofIt(Jz#L=W$KWERhM~ng%|K`xf_P6dl~k_1s12cMCB5Wt2VK{Q zM#ET2!w7~j0|u_IYzZwuFrXvtC{b5=8zB(HjE1o#C^teuxNOg|SR2Z=h`JJlff)!A zpptH<d~MU4!Jy9-(QTVN_*?PLEM&xK;#PdWZRdplD2lK_F-%T#IPL1Rysd;VFfCf^@RVk$RMB|G`l?)9WuhAzb}VO-(9t!88;$Kh9W&^K!dMX(DRc}o zzAxn=mA;lYUgg8J3MioL+Y-$TVj2p^iV%&hjbIR!hH~kxQ3K^zL@gJEhHh#JY^dxx zDG#Zx4GqJP*j5Bv=$HXBZvA;-LjeOEJAxxY(@o4k5YkX$q#dTfju~f47>n}uT1xPF zo^Y|F5nTU9+0XO99Zf}uMkHtfg28m= z6_gX9z$wGCERDVj&BRnTRy2xI8k#OrJAf&hNZ2mdi>W-mVgy5&IM`9oXr!A#%wPbO zhPRwhF43sO44N3qA{x~Q1Pu(~V5?O2tA-gc5z-=RdwWsS;}&X)eN6?rCWuDExJqCI zLIeV4k#SN8kPf!($+6g8Gos0BL!g@mjvXc9O3(O)$|#+Cj7pKw5-GvdG;oW(1Wm}o zuw*A%fD_AEmceeOhZrx88IjV5&;ytTIME1E1wv@V+hJ0XTjir19tsGdJOi$jD4}7P zK>}&W*UEy>L+Cn4D<9X_SqdXn0JI=_&_LM{T+8*1A6e++<2VxB0_-s5c$Sp~g|zaJ zWqOv0LgR+C3p_6=J%|y=hIpfja&T-HJs3n+VVtOr9t}TE@5t?}Ew>qojnwcPJdoLgC;> zcHx%kSym362(&;Jy5{0W!zgsLKnOv+vBNXAAtN{u$19Ey$U;}L`1`Z~nu>aDDKDxD zJOi9zmxym$F#{q=A1>>hBhUju0-D5%+PG+#fdCpZ zqie7{nUfhF>h-lOof>Ho4qJuBtP*JzI=Zm1A~H^Yi(TfVqc`c82H2LT3kW@43YIk| z<L9+ZhD35c-}-P2Up^IJOV<;&^+bTRm$^3uwBp% zO1iMzJGeNOgR3O2wyj-J9W(Q&XW zC$29J=z8W3F_ki2I)*M#PW;-iafMFGTggA{3Ta{4-um%w@RM)o%bJr+!5c3}N~CM! zxN++b9mCL&cGT~y&o`uoZe&WdmA}_gf@WZ7%JUeK9<9=~3UdQxZoifdC0(R)k<$Cy z_5T(L^XB3>p0|*a4l={@nqFVMbte@l64Ml924$>a&BV|owq+I0nPYiIZas}jk<#@( z3Y6>ke|w(fsqI(KV^+Ct;a+qLWoc$1-B`O`5^SZ#@g`|w*$%FZ?KQj9J+Is%k258U z`0QVg%8=0tS4!~tl+aCrruVyegWNv}G4H3?+K|%0&h(_0!$Z9_YvIK9iFCb#y`EVf znh^*M?-JcbDT$I6u3O~Ir5ORw*x}gz_fcF|A@s_u=4hZ98p;mix(>?sv~s0}h?B2M zIwf0w2(;!4}=jw2nT6d9vyBJ*C}oNx&Cv?qu=$s z&y;JUgi$0Pgo&m}Wby?<1;f)XymO^e632Fs!aI`}p^S5mFQYx(QWom%nPuUXd44TR zr%n|T$8wN94|ZJ841bNLr8g;DJBlN{C_L#pak8H3Lmmj1s)JFbu7*>JmUCD$`DYu2j5$Q&1>OHQ&uLJ^{3M zJ1eRlN5^YhQ)lONh7Fp^mQq_6Xc`C+Br7ZV#YG-{sX#Zg2*$#)aIwNsQp+Zwkgi1N z8UoMIrz6oE(1bv`UbyYv)9H_w8#i9Q0FF^Dywg=eTT&`8(q)P&NwHT&FY&{KW!$uS zVZ^ae+O%F&HWf<6-A1W|z9zfU7XEu2UD9|Nm8DBK}OzYdU>ZGPAe0$tY_L3!$N* z5eOCcwsA8yAgSzE7spiu0wF?v?o-dOmw81&CDY-{D{m4KLn~sCqB!%Cr7iTmgvdFT z4!zn@clR7de=>{B681$It)xVm{y6Cdny%0t2dQZwD<(XxG7vxhqduC#8voy=;~))_ zU`Rts??CKi*sxt54+Y-~*euEy>|x)_>7-m6Wdt!ox@TN+9nU}lfbQ9CL>6Z90?e3P zO98^qryQt?nf#q9WD0n@Az5Nn2tnwEj&h=Mg^ zmoFPLNNL8-ujQkRzNXrOk_mc~RI2cDh_v*kviNz~bS9?FDS9U5aZ2<2u+Lq%{F9)h zgX1_juJrPb#WO#F7ltV%UI73%;l^`cgX>80t)h=zSuftbnE9I;bJ>e;@Z2p8%MB5b zc9?>2LEpiL!KBc5pG#7=ReJ#0s zWgtNF*CsP{^S9h~++PWKag|Ud(Ts znsC{RZ}4oddWrn=|J}My9}1UfF`kfmzQxi}V*ZBGsj$LCqL!DFMl%S6LX?!kvm&7f zf|#1ZiG+PVSz4&G+T*pA-Qr9Gz!t>@xc|`UUMg2{mp9E<2_Dtq(A6bn5 z$B+M0Hyu^PPn1nG9Ko_(q#w2v3K|Fm2mI?5e%SUCecD&8Sg$DI<@Lj{3iW_+EFWn_ zzIRWcqBxP=IJWJ1VFj`=f`J4&mAxA~yesh&iBvM%mdI#caXPF@I{_3z_#P`|mb~!z)z}TAc;uX%#Qm7iaK-GxOq^f$1yr2g6oZBl44^45OtYZec`cpNRL>9l zre#L2L6a-)rSGWGj9W90nOk%D`L|)b{>lxsX_#yS%%WcB-t-+ij-S>oV8;4sjQrs> z?&#W(DhV7ZK%4jGGBTaE&Ts~N)Q1}`Z9+8xU~t0IKQJe6DY*%sCCtrR!rWcIGkg0&X6;-;Zr<;Ved%;` zWpZZ!smv~Xb}_TJ&Slc_ANlH=7r6P7M&y(s;d3tT&!k;T$=#L98&@7!GV`t4g;zHx z(-imFGLWt{W4|nWeDpK_%ZTkunfhrbg393d68l@y=Xb`wbXqwsjIq#&cnfhXbk%0{ z$MV$|*(AC?qww@au(T(ldL;JsfLz{cZRDJm&72&x`*`yf;%yqSwEO zXXY(n_NFmB(dDqzL-C|U3W2WcDA&P}c*#2T26P|v3fG=ngLNZ5WWY21c&$%AzMZ`% zWwiaAF|kmR>c`UQ@mF|n@(=vD{x_zsn#9miFLBSMM|KKFZZtO&ZNt+fi zYtuBon>3K8|9c?~i*0y~gHFGgo=-hXztJNZyY6@9<|P_uixAttikl}rfMOU#=Dk4@S+{DX5U7%Pug0*Sh`&r(eG>&m=<}qXQEXGYAOy7q)&@iW@ zfzUaq#Wg(k&1lB2ozL{OlNtWqb6nHZWuP@;j`%#H1vKLlnVMU`jDoC66=O@aqxP@XK*@frkFJkWI zu{`O^uM)>6o=0q&&8Qd8#6WP+rLXbh&V~FuzkG6iTbjB|~R2edEvc zzw*%Z_-1JW$Y@0OXRn~n;*WXf>rJH`5FFO{`ar|SUgeInsuc5tEElE8Xn(Jx*Qdw# zbD6f`Rn9M|qGL*Maiw1s-46#8x`D1GdMKoZ(wK2FD##?1ATJ!&e0(2wKJy1hKGKig zt*R!-4cE1?tte5;3mwx@>=^kbpUgdk&QIS!(>)%~WFBhL;*IHXdv^(Qx6kG0-$yfe z=yUY)`9r*1i(mh+e2qiPu$q{-6L+gNw@GZ;AS3dHXAw|CqFRV=A+EEMWGw zTxM;W$&8J2n7ncVUw!i|y)LRx)uiyN65HRA%gjx={y4<9AE(c+eVa?`B#vd#d8cDB zuZqI+*LNcry>trGHqR~b{3Q;(f_K)=V%B!=Tr+#~EN1OkLT=t7W^bO&?464e`7M-l zo@(l!r%FOBOs%}gnzHug_qmUFHWdb*}86K2++}lLOOQQ zSu@=^Q4&e&DMt3aFw9URx(*u1e>)ut+m|u>r%_DWrE_4zlQ^a4Jsh%r0ux_c=5JJ! z1~=`>$&|Ufux}VfBySGk2px;3v%Vca&WJ8{5kv#;A7@PmFk$4u}28w>MtP6T{b+ zI1Y04aGvZiozS)wah`V4E9PJ*oQOmUi3l2Khn`8x<4o)yUgoabM-lOpr`wK;rs>`X zCoca+Sx~r+iy1I5>z>b}BVOd920GzC7cu{b8RVHYIOM3)=-8nVuYb85$M%wFn}$Hz zZpyb5+EMNK_f6-MvuZgjbEmOzdl;iuV@_<-o%`CION)E1;+{{|qniPA%LdIiODL73 z&?uAyq3LMCGsKjn?*xv!k;m?9f@Z0-%=lgim+qD0R-UJskrZ*L)ow}4V|CmKukye> zquJ?1iNsZqQI3Oa1PBC7EGL$yNk`X}7n`3lHD&Zw9L9NX59W!EHOOB)k?{k*VY^n7 z25sAM?*08ZtIZKy-|<}*MPonEY1rdFdS71?mA8=<>$h`I&Ou(EmGbBlu9yD|mkpD@ z;afN8zuPkadZo#;sN42DPCR%svnMUbRTAAVc;MI)G{eg!5bvVyAJk35OGvHI&;xbp zFz6GW>|B%l#gq7H&^K(dtI?p{1)TrDE3|I+Dz{wp4s&-Gc9p1Pi1uWn<-7Ufk2PTsHD;dCDK z1y6RaNx_ndj2ke5Evg0$&pDs-ALz%~ZC~N$OFv?XlRU2lEbf0B_tzRszqg-c&N+88 zX7gSRO41Pd{B}dqhzK2R)517@TO_X!$X~_mao@7WIgAs|KcAlOwdC}tuHpKZej}RD zNRfO*3sCil<2b!lqI}$yv|v=;QYMd_&sIN4zovT?t6eGCHFHbRc-pI({nZF|2{%DL z&i-l!f4T~sB`hxhBW}*Jj=PfQzJ8e2he>w)K7(mPCXiC(s{I~VZ+}wF24-DJx?NePtIErc)+{Ml3G08?ectndGsoJ zzMRLJO)gTH#bmUQu^W8dcP<_p}eqI{?=VQSo2+8^vD1E4ZbY$!&r5{`nwk; z`v*hc{E?mmdvL?QKI6fm+vDU`8c5)w_-Q;`HcTAOFUu^@v#4J0SWa!}^M})J=GLcj z$xo61DsL&1zgx%-VlpyDg<_}AAC&Z>LA(g#QurGs>yst#uf+C+9`d6|T-HwSZ zp_x>v-I&u`b)i?A^J#b59o+cH6t>&m`V&U5c>6;4!u9+-TM7Kl-|?c#nOu6skqmie zkryr{llF@8l8Fmpqe2boIxz11HDL_D?lw5!$m2Mr=RMTgIFVmo`4i<9RWtPH`HgMD z%R8);<|XQu7CYkUN#Q&-Ys5n4l(hGSfuSp$NGe{Ld&VDref)Z^e|0CTw|F65Lf1eQ zg(51)LK<0K;(H&O9z-|2YJl+}i%JR4@F9x|xB)2FLdtCPU^ZCZZ-g)q!ohVM-;iba zbE-T~Gef6%7^d{?Sq8!h^Lzi>xv%C2UVq!)&zLPi^ne7%pASt(XfZk+l&jE;EHoKG zDX)@ce7Lf5Y?Ki~3j|QM16q&+I^9H%6CzAWi$6ck!VZrzc7q8rQielT+5AfA0YU*C zX{TANO-Ymrv+RvKxbMLC>G$3NI>~jG==8rC2q7> zL92btSeC^}55LAkooccBrx&^X>H*B(Sr`pXsD3M2AF-?OX|49f-2G^Cs_&jkzxFrr z(V_?dfreMo?}tZe`M`s8{iY`$FOPeLin2Qo8eP?$(_ej@so~OS5ggFvUhcY}CcA!k zn(KRf#IiW6o0e0LGdmnnm@{MTkQeDQ#GeSEqX%2_*!j(A5to{tcscByF3>YzE&x+xt6sKF@VNlRCyczPRH7#wMOf(i|U`KZm@)V?*Np zDbR)|{QiE``vFELSSbCn^ra0opxh`?JBVp`WucXlxK^}Cu~a*l{>Z;*`H1kVUSyF4 zpll)$+gETbPia(n%zO87o}D1QoHveDVky{?px5op<0GEq!rJQ?+3Q*!AGWUa!**l? zi>GZ!`bRIxyii_PEy_h=AgWfSss@oQ+bQrXcmxcSU?@QB*2+yo2q@RWl1FmM8_#jk zQF+XMrZ@k6<2SZPViiers@BNC){5RCooI@Rz6W>VAbKDF3ai)U#g&ZDruvCD@bZY; zY0>9)&i?vdeu@MLgbYN`^Kg)|cs>Bvw$Xzo!H}0A)U}daa)V8{`t@Ga9zTHL4SLb- zn3T!%jE-7>Kq%WgL`Vn6)iC34f~r@iss`aLJBXr6xZ!fJqo4w&SE&yQlUS!Gj7smT zaas><>Tn=x;XCy1@HW3kK)MdL7{qmBhI8BL*VCizhdlCq#Ba;xj}IQ;hIf~+aPdam z^IqhKFaJdVPnmJ_0A?u5|NkhzzyBDIz7Jl-r~roH-TtT=9eAq4dAQ3*Fnp5Nwrx8E z%@85o8!y*YiRH+BW0}&uet?2gdeE!m!N}jYppcsi-SrNbbY6^Qdb3y_uN?H9+d)~8$x%L!nHvN4tN6SSu*Iwejt0)YTV zFyzgd@{-GY107}a{2A;F7-(7+!9el-YMgeJH~tIW=GG4Hup}xFNUWzmqUZPC`nkNt zr#$_mC_b-h2QwbKly-e=B9@D`CnfJngUVy(YY*|nk4Z^_W7RPIF2u|0SI)bYFP6J# zLSQuL&hy{hPm6mW;L;)2FnC2gk8)Y|>9agNcvqpIAlmWijDscJP$IQT7V1@{ZO^kZvJuVv8oA!_0 z!l`4QVP=7a7BC6cIFsw1{1>(C1q^)nYgVSM{klH?3F4)Qlvq|xI`%r319pvN#PBWU z^V~vxAoX`{Up$-bvEBxX%Vq6f(e#CZ~EA+k-6 z)@VYtZ!dAZ77P#wnckj{B&G-O2S(*~001BWNkl-oY&{FP!bn z>2on>J?K|6*L5@_fMI&xA5uD4(IVsH&e22oam#shzVRXsANDb8;^bD?PW3t?o`(i8 z{Hl9@eD)kqf3nl_{xE{nXnr@Z4Y`hEd)><=gRkVHKN4F}TPN|}t=dF$8#98%+FZl zSK3HyUqdsqe1i%g!_w@PQf(G3$HG!4 z$U-*^LPws(*>x#K!p2{bc^5ek8*%>~!B;(%Ra z(&x`w7G}`&3~*(Re_8y>U;Al?KYGQ#0s)x+%)e>(v_d)(VU`tdpx8NPI6rM|OQ&94 zssH8wSYbu613`jWrf2YSUF04WJ@R;Izzh;HD0Y60rf@DSN%v2khn5GgGP4=ytPsrd zyh){9RIy$u7grfYXG=T&jIB!0b^W3*8KSaiUPFWo<>j7r99*sVyp}ay(urabz%YXZ zW4e`eOY~mdr@}Brt&UuOeFKc$zw*Xy1LF*30E)=UiHw;PbN|#hr1QTxqpD)tu=n_K zQPH8uTJ|M_zF3c{avB}F)J^Q9%Hx+$$FZ$;CobKPTO-zjDboYDUVM&aIuo&m6aPMoS+bT z3pW;j9F9b=+>$~DRYGp60-w21ea-Esqab zTkN1=w0xA&2_bI9!{S^kOhLp#)w!AhTYqQ9rd*~@yp5v`LA5IfFe7g%b9XFc`j(lz zaEU=Afli$RPw&RPpAKQcXG4C0 zZz%J|Ja79>B7T0Ea5zlVc2S}V4KBTxm&T9h$8`&swRtu_F8Gc?A3VgRr&mw(Q`otN zKi1|YC@8K~z_wY#_;G=YR<#jF*9AN3y(1Ei?Lk46W4m(yun==fbe81qnIJMC~hhd)+)Hes~^wYz;at zDi&tFb25F-Nj8$`)Vq5qv+{o9<*r%OIP)qV9r+z&R?Xz+W#jm4*kg2P=rM4!-Vq$4 zD|Squ%KYtN3c?<(ZuAdkP2Y^ts&HVftc0+Z&2uL)Ytcr+#gs_5aNG;R1xdnE;uP+Y z2nTe>M!=EdFd5zxmQixfYQ~0bx~>Gyd}ugJwynQBaY}m=hj&$ zWfOJkaqUlYn7r(H+Ew*ikQR|x&bXZRJhfsmGpG0F7?qfK*7f;D`2W~D@8~G1E`a}L zb~ior9(r%mdoMv+Km?^LRf-@MR0NTt2%^$N1(BjO>AknmYv_a)AOuK4Cn0Uy%zS^O zu-R3Y)#mTe6`XjXv%*TGGBIW70?4_ck~F z$w;wf#ooorU;9U5h_g)*SC+9T&R=)vQX;`$E3!H62`4Hwk$ z+qe*$3PXw=Oj_Q;vF|R%xS(FbYAGcy z7_5I8n^O@pl0L#Jk$Xz>DNv&BadPc3Y%Ty3v}iRTnarsNY3w4geYg;IiL)WU^G=>f zOfeA_&xBVg2VP#~+~W;=Tnlh+&(z?HoO^LCc02FWzv*5mHn6EkF_`tSdBQxa`tVsI z`>>js6W^q)Q(R6meH4yjASEdkWvvbLsVl zMfP{ah-8sZ&TRQy6%&#%GC_AthG-t`;ZDZ%;zOLta-{+ih#+e^#*M~huRjrz9tyydR=6|A& zri8PVi1KG8`KTG*onl8)3#2UD6dsDb5ZN>Vemwq|4}}SbZQ!WuT(x7@YYK|ro->?2 zd-y&v*e@{Zn2G(Vv`qYXg&(Ok#QZ%{B18Dax~YD=p@`Fkzo*5E_RU|#NnT#HS{<8GR!7id#qumTu7Z-W zfKV;a(WPQ{5FgbQDi68S4pLjoHTMcym+Fr%?34AWmNf)UZ%{{&Bgu8YrN8M9o?K}m zdFTDw72`qcvt2GxI%!l>r(IZscUTlS19|i~w>;aD;(dF6SX53!zr?5 zw|AuP+~-almO^x^$#Hv~BOaE_Dk(ZL-wOo=u#Il4o6yf#69j!NB)dwmxH>E#+x5+d z?&IwiG2#|X~ zO1n#eMrn7efAkZH!^FPe}U@>>q5oXyko(jf=C)f()Tst&AI;|DE*q*5em%F1{fAiu^QSt1}QTAy% zIN@_36Bxyqe8E3>UmOy%xKk?j!1bK6`B4xa-~m{tCPA}3|B=L)Qfr{Yo=K>0{CSHX zNE1{x(~5ufu^H%T0>xy1%bg#OLeB03k`|(EdhKF>D5g`!Y>2u+OR3+qlrM-#Y6EQh z${21zNew6TIv^Zq!6Qu5Gb84V@;==bVe6`RB5MHa!_?eSn7iyg7oAGNR#};LA-?i` zhs;t(Fi9vwBLwJyA3>kJc)YHVQ8UbjNOh^nm6ftO-5hg6C&9WtFp`HiG;|xU;~<2- zSnwP=tzvbK3+B)rIePc#dX6WFRXknXEID+WuO@L=E!KN@p|!c34HR}>z_fQ{$N~8K zy%eX$?89q)RAgUe36ywUfriY0tPwG0fV7CyE8JWo}Bqg6(sLF z070|_wQi`lZAHBQ$Q{QR9KDbEa>wT=6h#vCSL-;~cf@~Y`_u|e6NkfvljXtSh-G0G z?jy!X)%ai{L)e^SDn!_{*GO5tSxtw+#V3X=c9-~cq%)(gRd@iOR6fH-KiOAkG}Q8c zXl6pDwWrvUjfloW)Pd-c>mVm$@xevQ&W_0S67wZMhNCme|3ZM!;DMPlS!8S#%Aw{z zQFFp>c(+ENozU5E@Cym>oZWs4k{xOHd&r1!cyZMz&Ve{lKGEgjoX`J0>2xS2w%f+N zRBV#LH;fhSc$?G(;JzE=Q!J#qRrBG0y8l5(T#gAG#W{mWBcRzO2SmZ)SAYH+i_lKR!> zB5ExQ?Oe+RM*GgE&RL%VxSpI@VmAG`0jVRG+GM54WgtLnhO~W$#4+o3Xk#q)pX%*Y zkat|4_L#cwey6Q_Xm~Wkj5Q6v`t6Ht>oxF8s3$Y7*eObYFeT+CLBja<2pPu zz%}ZGSYH7LQ7MbCF@_jr3xzB%E>qmB4jjCMlozF|qb9JQwYY?pp=)6Ktq~4GShJlr zSm_5Fy@Mr~-44|vpZXz+hr4vI?=FOC^H2Jg9gYs4ch!;acY5bev-CwrZ3vMbcTU00 zYXdD8aVM6akvn1=y;;|9UC^TRYFXxY>cwB==+B}%nbaFMT3;NlL`cc4o~Is{?1T)K zi8V#eD-$)Ok4zIzJl+IX+vTigng}r){V{?H&|0UxU*36&PJSW<>RELPPY=hR%A%Vk=Lm_Q4VUbcGuOKiKcvwt>Y6R?mx3aaq)uz9q-F%cM7m7jvvL?M5EaN#yH~dA zHwE!+3h6~(;Its_Y;1MH>g{gRM}YGLpO7O>F@98o_P&o0YP$8yAm1G#J037b4pb?eW>lTrQrNj!)Py3xN@PPa|rpIb#6Z<3#s)GUdk|wKxam2;u&Bpw(k9n6TJ9H!;^hO(3fw2Su|Si_fFxbX&nf z7!huqb#`|8;$sTasgb?yYmn~VLS)>s-ftYbx0-}1f0NeR0}&yLcMqJ+=!naf_K4hm zWPBT=20c}HPe?H&q;pL%-#Zv)zHc`Xk|x1#qIzQ$(= zV^&!fj~6lKSPx ztj=M*;$1!>r(j{_BpP*+EH=8ae!9dWhrZd9%`I*=a8Jht{Hb-060gn-Rl(!Ak9T`Z z&X=`7$sPpk$qpzKGnMYjVK(Va;Hw~YMKEdROpTQE?QS(w~JMF``Q1FPQMdOv_ZnQ zzf})4EDykcYQ;kx7llP8xMflmcJLIkZvp#379*-Ba`(RP@>|wD!zd`|=1#TWYl z)_**d(3h~Hir-GTRqf^?U!$y4I(==vbbS@77<`U9Ex`Ul*Bsdf!>0uIO|;#}H>iVU z_{Xp`Z&6|9)cbM?h<-3x} z{PtPA2&Mlnuiy81&VI=kF8`a9?NM5M%B_Iti{~I2=AW|3?^h1z z4RuZI{Gma-(^Wq5E$x9(&{dmz-&(0O1qkzBpg@6YTWPlT7wLh9{LfM)?{GvLk9++S zwv8Bw4!h~_2fN*kvgkK{oo7?5^?E*==dmdh06}r#p1TP|woz&aqYwGZ!fPFsN;^E; z170Qr9RQEJ`T%VR!wt%1I00wOvo|(QxH?^!L>TdQAAZGxHELc;H41}zk#SMHd8?7p zc{-F&Z3^9D4x3R*=YTxGCI%3Rc64b7wfKX(_fG-xx5fMqKRxt_Z?_o=Q1#Z;F12*5 zA7vlFvCGFe(Pb7};tehDL0o@9nQpByaLHBmUVJwNVvg8XyEOW>vzk4@>9ak({qIcQ zL40I&^td4lHevi(Cnq&)9hmqZ1p}y*;`*ulLMShzrGsUXm!WwtGJFoqqI_gFfQA3j z!Of;iQ!qgTUOe{3pBv=pH*_j1jeHf?s5RT6a*t(Ih@O{g#uIl=%rpigh}pgjj{tF0 zHQuG?gzdL?-SGr_MJjmnGFf(|3epze++Q8F|A$8cH6+ zf~>*p=&m6uQRNOR&rQ9VFR1@{LrkjvK0LQbShwQ1SmPCtd;v!~ES%{5BqP!N)t`&G z{K;ZVqBz;JV(j~f$1G> zh6ixO|Gx6NJ1jvsri07Bj8Q=L|)7(tq9% z1|1hZlgM^cl#iV8m+0~{9q#_a1P0@>#$Xu!3{QgEs6v4@PN^<>Vgf-u1fl;z`0%B` zjCvXLw>LipOC11P1aRCpZ?d$fHpt%(SU~ThQH?^_a@{HTHFlkKo@2S$GC!l3ua0!u zHny(UlpV2%K-V&`Dn}k%N=EA=+b^bZ_Pg^oBP@KnU^}wC1oPm=wyUB!<7)SZQ~6GG zMJ~~hASZ}1fz9S*(1=Uvoh$7vqwZfL$C*lP(sj9%<<1*hxQmP*KA?5ZcD}2uaf6e> zcrR8^-zL`&US!bVz#!YA&ECC&P}pyJSwK0FI3dWxhf50;M8iVKexO|6+lxk2VRe?B z1aulV0l8Ay-p;5hx@%l^o zxu(Z%mTf-q?PaPM9&2eDMnGTgcSk55i8qXs-pf`9SGr!*p@!FAR5^CGYza~05YF$c z{;1Q?temoq6MbrbM@Ol##2AiCZ%WQV_MY-1+0V^Qkwo3Ard1B?$oF@?@;$Ft!k3kvq-_U5_u##5YvepcFms9-v!5 zcNCvViO5$U5EJ|dgE@axapOQR|K#BeO70V{^~0^Qxu?D4a+yG=Ad&)Pv?Mm>64ZjB zTo{mhv$SMw%^m#Mub1*B3b-)LEF4m3#;1JK9oh@oeUr zBt8;i+Uem*Su<+idv-%GOLhWnjKtUxj?0-(&s`$Wg7t{ohHR?-2wmI9AjFG{8ycm2 zZR2shP@Smr9L>KaB^ujRkTcAis}Ld`kT1R4YRX}fiM%u1$S!XGY=CRUV^(&l7G8Ry z$!E_rx)W@+&aB21cP<3;r@ge5uB5EaUL3Wnc}FGw-7DpvEHV(GaS|%EiK^EE!-90h zC)Mbph`2FUZRDAW3x(K@c9qTPud^qwSAeql*8FKiG7UKN43*pWH;D(s`DJnI z&DtE&H$*4rEhSq4xmlrpF^K{gTlW^q3v~Yw-b;UfY8IZAF#XY214hkC!DxyopjH=v zQ4^4r{^gkCZY?fI-gHdu#z&6SZqV zGdyB_J;yL2L65#W+0b8|YH!;hEZV@tix}gr_px8bo8G5Qw|31)$;Qxc@97sw;XnR3 zlB0CJapOYDNAb?^6zx@mGTA?jv&$ZrF6YvOP4(I5D+iRfz@Rq2Gf;YIVc&|nezu0x z=4Tym5|`*k<$aG#1y!nWu_yfscz80p6|hHEexZZo3?hwxh1$#UhUxaM4`uQ$Q;uOk zocm?jR7F2i{EEF=drhd-qph$oKmG2*7!^+)+{oRvnVIZsDLbjpP~H)M`&iBvxblqhKSmFg!o!r>2IfiB}0tnmZt#+l`d`Q=_(feVT~ zw1had8evA1v;5KYT9f6FY5;)k-YhHjzL}0zr~l80M~AU;@CXbVrO8pwQ<|UoiE0$P z5+E_N+{o(rMxjbV<8f#TW0tV3)S3)-P+NcCjx*VaxDrTXtm5sOS{-*OXsApZL^s>K z8c&5olu4MOm+I!!Vx?h^CLbh+S5Xry49R1v!IEe!Do?Gxdu*A1=sYHrcux4EU`ZWe#k-mD7ZVI0Qrlo2Qu6LFFFT{Q=? zr`Yqyr4{)03&7w^GL1NMRR5e6sPvsQPvnv@A)W-qXiolz(s?F;J9#`q!369R^36cn zwRWmzMX#*XxI&L}FPcLxWz_3@1_R?eSG^j}^!5!K`9nzSZ ziN$k6_&2B%>-X)4&-+iax*U_sy=Zw{xsV*QbZ)72jn?Rh z87&$gzBu5*Mpa}tYf!p#iFU*~Y|aqgO7CyQAe}7ena=ou+|gFN4JeMmpRh;sn-Mi? zm!Xhls@?AK-o*axSmL*ScsG$puxm?fiD&B(m`P6B7YmEA?KdHjo>SkHJo|&tgio|t z>>kbL)DzM;R!^@YUhrVmgy0UhW44%W#_Po-t-wPeSLd4TZqywuBIZ2$Gxm3=LpWcG zcw4(sT|(M>QPVA}EcDKQy7za=3vSxvkL9v**iSHmuvX6#&WD62TOQ~HHw&6aLsQri zvY#lFHk~C|5cyvecjs|2|^BUWXq4)i<+cOSiWp8^ZKH`0_j}jQEu8K)m zYG7Mf8lIaz8eW~9w>H3jo>yvoQt!~8dVLw?+iVRPVsj&`?ZN>(NQWG}n z82o*4G7o4U5&0NFpFON;wv!e0TK!6Kiyr^`^KRK)k~n1Q``{C!O#T2iPf0(mdjj#? z$BEV5*8sS?7}pR;U9DQJ0(>}vQtI;njz{KG%ZHJ(-@5XcoeWRRm3j8-%JeA1SHWz*Y)iFmO0? z>r+^vKFQzfxtLTaWa8d1Z>L`5BQ0-11GK&}m`ge7Mywv za;(0m&z`HbKK%tf?eyjp`n-e_)Dk4!-N^v^@oe$3%{u&t@P7M)wWKel?PLsq7aeO` z6eS&#Uv7^gLCA=EqGtdOJKPS%cbL~VULark!-_`HHd8pDJKaRi&7MUuPbwnXeaZ1? zAo?n;nGqa%HiMzTXoB7|%A&`tJz2$Ojl7SKcD6;=H(Sr$Ux$2O+Rq24-cB7Je{*YY~|a(cW!gWwNjU}xt7j`)WK;BAjN7{Tfhvno>IBCaIu;6 zpF;=_^`+2>&}F*Co0Dy+dU01;I9W8qA}KMMoLq2y&)L((p)G5@^odMsJR46`Q%k)( zZ_y`m--8?IUM%q^)Ll!a+M*Iy+(U(0$q+Vee^6h5|B3m?QsGEOq5cKE(j@4gY=@BF zolk5!<%%dE-St^i)n&>6Y>KD#5hyyyT%a>=OStQetug%yHLzN}uNgeFvE=W+yJ%Yre^5+%E!e);?-pJ7b%v3Ez_=%s9g1!8lmG4juZ? z&!1vYhSKhUG3aa8qrBpKx>Mb{4yG)7+vZ65^dB z(3e>B#XbS8Revx>SR0Y<=a z_EB2(R#cv_BWS(_Z-Ph7I66l#zM9L$%elxTKWSaOY>sxa{5zu4uUXW03x^Dkn54sq_SKs2qzg@^!6SVpk;DT(18_W^MN*DYTino^dL z;O=p3?@&vEkuuU)i|VOlsQ$tx}~YIL(o>gy&1B z7c{4%!3jyST}#?N*?6VUmts>69pgx7P5VrN5kq1LC|(+O+RB_8N<1;8?e6LnDfSt2 z97^Zubg{lBfi7Qv@b5jYB}?jvGgIrNU{qiKG&|R$)e=$np%MamXttgt^X!ez$;%wI zuboY0uYBr-*k~Uu%1!y7^~3_?MxPer9)UTB`nAu>GDTfi*TD_4)2A+(awqInw}Br8 zueTQ4SnwxnfefS>$R2NWyb``W1B+uXWs(vH>h4`$Bmr&fUzvIYY!|Z;t0EA2SR5=z zLz;AVa;8nGsFOEMA+Uh4ko8>|#A^Ojku4c7A31fP!Tj2cH(wqj{U*McjUKAw4st}> z$M_DOK5IO4aAfq+vU&6!>RG1 z_ZK6zbz>HMAoJm@p#*z}P>KT7bgK`3`lET^V;D=ITV(BAxUTADE@Tmn{>vAL>62 z-=!a^a6H$nguut)pWl6ct-g#r!g$;r%Kb#^fNyOONtP8RwT#_A_a%{kl$>wfrAuf2 zLBdl7r350*@rx-n7F2jT-)S}v1rh??cqDSh-1Fc|hK7fdvN7Kegep98#k>dItuJD7 zVBnAg^NZ*qj*3y3Zripr8Y{A1EZ`jYK@!T7>8vHD6pBzPEfGmUt)xib)HYa9cFSB5 z9i4l9O5BL!%5+Je1x2ZD2Jx*GGK!T!-XM~hY~KvEX%f~Xz@ILS347ubai}c+Kej8> zZ|L)UvCo;PDHzI75FPiMy^m%E4$D$*tG5qSA$6{W698Sh=YWv}!2QI3t6Zf`Dtupa zy{qVufKUpNPh`f)4-1t{*|WmU-8o;4CpoJ&x1ZHEB%kXN5o#$ z>@^G8CcJIrIa8M*%6;l1M>v}r- z)smG6*XJ%;$m@+H_BBZ~95hCq;jx-F7>x8I0tpYSq@tpdsv+hfGj9x)`o4FN7@0bb zli7qL)?nRKPHUk%0ETe<=xcKunmh6{JNb&UmwgvKV`(kTOgL26$1Ir)9THt!L@mIC z=0EnS3I9Cx9zMc6;Xs>=dvnR^QuNSG06LWqmvSh-Jta8#PFN$Mr1Szf>Nd#v=~ZNi z>+*G*>7iTcrJSkp`=E1NtvlAN?3s~DHA9vCcH;AXbi^Yp^>oD2ixo|H3ETS9E!+7C z%%@Qr0v<|7;SGb4!k?DBMY#^W3(~y?t>P?cZI+halUiGOi8D0A#pc;M0{y3UT_z*H zWJ=qn`$KL`oJ6rg0Vjw*Au*G@nYD zI4p*LDd(N!Ka@ctk2IE@cqEm17Ieh_F>>9~UX~9{HVB!j#;8=1Au zPo;nCCFU1jublwp^M%V;-ap+SKcC`ReS|A~B{C4I5+zC^Bq4!Az89jAhq4g| zMHm@bj2bVA1yUSJIFg@yc7~Z%oQ1SN_^41E9YQP$ji<`bIvKC!NlzkKc;4Lb z0E_Lo5(ydEh0CJJJn;F?EXm-9{J)R&-^YW8{AxNC2M|+PD8)?Yx)M3m?(p-k>|{vL ztVzf$5HPsESSP1Zcqg{!?knH2ki7llhFChWZ42x1om;;xI$CsP~0#Q7fS%xLtL_r08`q+M!yVH`k0Hqb7bzzY4ve5PMboJfj1s$ z0GWK>3(&^gP!T65`1$#BRsoTx>gH&-!Q}pS6mdn3MUy}dG8nIYvX!-N9=?R)9 z@31=XYkC-}qo?yrpyeUMJ`VFJpYfQb!^{#GjgwU8Msv)ZXg9mL@nRpgIx**OXL^%{ zyXDgrYxceoU1}UL;=XRI={o6Qcxk|uZ~R&~`i26k6WKBnR9le=&(r^^>-6F%<`hne z-TBS^@g;#Z`N7L0z)4}U?sFZ-RN+eQ!XF!3e1%qlC%Yy#g8{d?*xpB|K0r98`N)3X z1O!W8Z-1%F!&466;2PpR>LVXgJ zY^n0-BmmipUpxnrzOH)u!7X^cJhJ(ga_!|BC#ufD;&y1Dl^6v;c9=RlF!A-2NhyTM zdP2g3N7^1wXK-I_5kI{sE10P%p+EIb`1T8!+2R%3r0r|0vE=B!Y{{Z4Z0U22;DmTN z#5qsc9a6I5<%{+$Mc(+DH)-V8O-AFH0%mh}r}+=&o~N&S8sC{{eElZJz4>NE@v*i~ z?7nAsD3{%v8P>4uIT`DI_QweYCpvw!V=sjJ_8G@4C)4EW1mpeM1$uPV8$>fK+Oc5C z;r6Q)a%#*JJ)(@l3NI3bEA2N+q?mG3T#arnr*Y$o}Qfb?1V=@ zXnkHYPk?NlrLR{)A4{>#N`e&DDWX;O;iC*l?05d z>w;w}zA#=H=E*Ca47+`M)6Z>-aVXe=Q<*OcrKiY|(0BP7fj*onP*?D8*#mUg^kJS@ zmg)Ul6SId1F0(@p_oLw)|77K+P#`99gyLJ)t9w}Qa}~E-D153Nvaytwlh?kqg3p{R z&%u-$6)F;9<lAz7@#maH!?| zQBZNLS{{#}^J;{fnz}MQ3-73*=rkm@bheRluz@jK$|6~QKV5}CX_Vn^qu1-_$`QHV z#XRzMv)?ZY<}_9$B=t(?O^DBI){~4{+3BgbkY!`^mHQvg*_^B!#nA&xZh1m7f@gO z(Ew8?WrU-?@M~2tKtW(ttflG?R>Z8ujb+zGV$ASa$jZ|ZMK*OS^;#Rg&Cqzh=9nS; z=`-{aye5MHi2P4MgFdVznNp2h$j|_!H&ceRjOYhE`x*&mN&903lGjb)o zk3)W_@z8Bx!g=n^iX6ee&ej+=nW7K3!@K0PeUjmfvl%YVqR#%)n88}gR?t%Z+rpBr$5?`w27HQYhO~aSj6Iy8l?c-WfYED+ zZdxOiU&aNd!gsEh$|^z6mPQ;^%PS112GNlY!$J6uMh` z->Q<)GWJF2TZ{7Enf~`Pl~}2*obN9{5eCX}5=fmN97P^=DcIdnx?kQ@>qw)b*6}6% zLbR=Ug?4CzFTe0hf7Zvs4RbRV`rgfvNUnBShE!>iE;u2g`qBK;R1Qk^N?3Xalh*5gyW}qlmET+Z z4BaX-dJdsP{e~MVWdVp7+~aE`Xp^pc>k;njqt@R5_Z0qSL8r&4q7Apd%Z+E+@&kn> z@6I|oMN%Ct4$)XOdy5<+wzvO;t)+!g_uW?!{~sEzJ|ny)GaG=~JCo$)q1PXBndMj# zJ0)5u6tmNzB2V@o9{+uTL=h@i46V@!R-4h3=`_XEqn5a}CvnP$+PNnn*XV-d5 zmJhKy*GEsv!M9fx{*>6fGf-qc>ZQGJrg&UEy^4TIKE8?QfNthCyCgB~>G%QU@g3Mb zO<%d*B6)x(r`+EzO!7$D5^!eH*lu&s5c*rGW-yZ{|?Cpx8qv^QyU5W{ql>FK|`O( z;)B#Rs&TU%ORf=H5^UanJ7x)ypDJ3yt>&=&D(L!1$a*)d z6wTi{UT2k&%GwHElpwdiFBYVv@?G^5!l`?6Km~dr|9lP*2bQ&&pIy>-7X_$4T&;j& z+0^>GyO2k9>2f?>6liqu3+K6cmG-YCB$i~{(d7#$90uwAo& zAtz{U%Jkg_o%K@xHF(LAfm>i0wz%J;7H>wG&zHjhp0@yUV-pzpPgMpoV~F=3x!(pB z8F#X)U`t{%Bm`XSiE*|TysWFYhm}3*nGNfzWj9ozp61?GI`8?!wOw*Gr|QNXJVcs( z*F1^~pFGvey;}nz_sVzPpGn?Qu835rWuqo9+^?P}=4n~|ekV-DoknQvv3t9%njaQv=GsQUnPY%A*FY3mSXJsS)5eH8r_y3pJnSDyK07TRSjXlkK}Me-l-FwE-Lye}+DyjB^mMHA^w)|;Dwwi}+z7IwUS3|FRe`bakf z^T{!kuk}Y82w~Ql#jhdbFJl3r8@!rcLjSDr0(cTElQ!JDk9aP%vC&I7gRdu!<8^R8 zVYLZbn3stWEWbQSsa4M;lgZ&@-=v}{S)w|-Bhps`Wpt?~9QU`TIVF(v@y7xH`m8%R z-^D6cG7*N$ljG*Q80^t|+*vB`!hY1N$@F=PKbd*PK@ZZsWnDfEO0y806$D$=&_HthDN#Xt5c*>69^Bx@)jW=oUU4=rzW- z&Js`q?nJcvBMK$qSdW{ZQ(n5*u<_FeHo*%sB=#GgUbnv&Bavj;DI1PJnlPv9&CTgE zr?4hbO!$B72SvhfgEW!CPXzxW)5IzjNUY1f(ky}h21%od{tG1CvONCPHvUSEb$UKK^JR68hofAztVeLgT7J98Qu#L3`L@6XW>oO*vj~ve|*n2ew)M!VVN=ltO zp#xS&`oX(z7bW*jnqGA=^%QK(sZpF+VOWc(H1g1G`-0Rx@{sMz)-q=1GDyL3miW-C z))JwT*dVIY$EPX?%=#J>q_drm8@8phl;)nR+ZR|9|8n!2@o3v==v?V!B-`8)>2r;a zn8CqOa$lMidsJ}DKP*RFeNLRKh=$RaIA9uI>b1p{`lv_@;r;~}YnAldP@`9eWmF|a zBAP3t{J5HJ&BGk9&t|3ERmV$hZQBDuf_^CMefpLb?*@9tNw{}=!KA!KZ`uqj{5{@G zDRD`-Ip_l-M-AtF&3zFOXm2}lxZmtI1mS3DLj;muUUdA_#A)j$Uu(5M9Qj9#w>uCU z(7apnTU68j9>E()=ZL$NdaeV(tqt^H%l1^4^i;Ss!DbA-bhePUlL z+y?+(BrT%h_-@I^7_a^lwf#Y#&QBc{3*rDW#-B7{nNP(YX3F??-@p$=4RBD+2NB9| z=RY5>OUi+~TAvY#k0J%Bun2I%n0JZ=`uaE)^0lTT*x8Vf1?rY6rOwRGI>O2%FyB}U zLR&{N^r6H026*7y4@89u6~p?>LlKf!e*WX~cXEr5_okOg&|=!zs=8xgfM(nwL+@fGy%W!KS0K{$&R_TXFM%1M)TmL9 z|5wmfEW0IX=a82-?Q<*)oa57^g+v_An4{^0` zmYui;${nSI%lVl6>XBYNZI*;DY1W}r>bI*+=^+i;^BCbdqQ}qR_x=>|h??Cy8*(id zs@~l*H)Y)-b2vblG>ZL5QUV@WSb#~=+Vq&CV)1v6!{(%k3VD0M1jiit;n&k z03gc+sDiNQ&Y%Fg{GrvEbm_;%m*UQqLu8E^gm8p*-tD}lUX=eXxc89nU%_U*6OZ}d zC*C}(S=0%vmti@`%KVkz`wy8zr|KcQ$HS=5RCKqN7xeo9}q7Ytk@`V zFJB_a4l$A_26_oJLulysZ>NY+l3C+ z(M6Yoih~)AFH4XxhFyK>gX3i?Xov|_t;(mk+xmt{d=(!E2tI?fn6Rq2qG4#Xyk`?C zMt~mZ%wK#?6uj>BMGnnhHT4;S6Kp`0*P4NiImqAN^GV0e&ydVcD}nB?ox_C7iDgPk z{ZwEK*#s?cx$5^iJkFpW+7A}1-K64=Hbi9AVDctgMG8mjp)f6;Edw^9f116$Y7``s zlCaiW(Q^)D0vbvvZ5g!K{D0&6KE-7u7KlKiT$;^fBg$d(Jl4d7ywG&}+^FXZVf%64 zqnC&@NTC1wHB(6<+RH*t!@}`W8DchTbj<4K?ZymlwUUyn?$H&)env1;Zf3VC|3&bz z0p;m5A|Am#mFR30%>=NA>sztEIuWIU)+y~)ra}(i9V>+@PTb`>$uNzDub4X-Om)kO z`?N*7p6E?D`3w~^giebQJ7)q+r*o8jD-AhqlGqr2hTSY$TJ*qP8OLz z65ifr;V-sxRp^urNoDwXpqEt1Z>9Tlj~YyUYx(tOo-4xT_AcDZFhMy>j_h`| z(HsJ=R2)qU1r~%VEE`h>gIQkGcEPhre>otZ%B}LI8I}H2YJVTc0`?w%v`-A3XS*ID zXC0>j6Ugg#LnH__rqd`QuDx@-b_WiEmqB*0%IvU{Q})YLamyq|8R95LVN@=4!qLE~ zQK!%5?027mnUw?9Z3C5C6U{a(F01pOu6HGAgMc5O`gtI;HiGi&=MvgG$duJ1iVVOp z_f``EAZtd^)#pGg;#R}EkQE{xtXNI~9>SJo3oY7G{JsLS!5AHM*aqW|&aiI)8F-GGxryPURwQKqhRbHOdf=sj_*boAxuVmv76|4S*sXfSUhM> zf7*53i*Abt8~{ygy}Iwf)W&JPQqAO#CpO~NZG6AxkYg22Dh1}T>aH^P0z-+aHdn-u z8V~uJBw*Z^9aOL_Jjut+ahIyJ?r4>!8p*0_goQ6cVX(L#m(+=s(OY zY-5o8f5EnTU-dZwXkag%vc`s=EP=r3pt7;*p_kl{=dXHG>OtjoJ8KNyY}VLa2_IDGw_ik(F+_}(efHo z2;p-jNxqy=@S>Pq<_;wVOc?a0wetZiM1*sNmTn>eHB9*wXZ|MnUvx7LC^ubXN_l|t ze`d&+nAkc4&907pRAJxSz@wFI@dRfd1S>?O!?PzZ<+sQrp+nyFwqFv|TAB42y4zY% zQ+I0U#^Msl?0+a3!u?kO>|g)gKI`Hy^%;BxLs2RSYgg^1lO9gieu4l6h185!Qbdku zH0gK4rz(z9@ztc}-|uM_tf!@Fk1|C!Bq>mW;N)9pH^9)t;9GaVLYIx3v4H8Yq*CgF z&>|DDTd!+%nZSA36tCt>EYmBeNxFr37IZaM9QO6V`~4@Kb0WeDxv|Is`0Jz)3*B0J z>{W%!VHtud6`lgU7N)0*Wvee2{cnX9q$7+vYsc#x&f6+0bvSco zE`K-E;hb{iM>~Ix+}ZF=m$rMnp}H#5I`8n+mTmFJqQJbR5_k!DJF5?Su0|;WX|Z#m zh9yDIY<52`0WOrnQRb>Ihvc3}6vxAjqMqZ#RdUiqEX+-NKWi(F9(zTs%=M8b)FoM) z*EWSn;eZo5-?~u%gi@Rst=}Iu3|ig-7wj+K6x=#dIZDZ_hIQ0F^Qz*}Y(ms4X-WPg zNnJUmuiHTG&NVk0>P(zp@8jr#L*PTqCqGq%ToEDtXz97}lr z&%igxxDN6TdlX}l%P)NNK^3;Uuek2-3LA$~6cwK#l?OYjy6w6Q7hiAJ?Hr}T>Ws3< zHWAJNqS4m2o_F12n)v5}Vv{DE-~`$JFibu~5TXH5AG=9qQ`d*ihw!!-xf1H)^F9&F@8}lC!&}@z)yF}X*QZpF@RH>HTHTqM4 zOrC&n)547^j?bTpL<_zKU0j|^nDOy5Oud5olDurI$S2*gk}vfQt=)fCrDj}=$38l_tzLJAXYF_yY86kS2&v%VJkZKQdx5HL=a2%#@f_Dh zGM>PLB{J9%Ut3ugZL(Tm;(G)6%?(a9zOU($pa9#MMph2u+b_nJ=LnCS9h0xn=x`4bOph7dXyvbb0eg19QOlBO8CJvxTO zx(0;V;0yPjyTk#fpxI!W!*@3abQ66sC1Fs_etb|)4iqsl4kZrpUJ&BKx6bk{!VPJj zHxU@&tE0@!ghD&42bzcUrDnSY?evwn#|y97)*bj_+v@S`WH-KutE1{P1*V;Z$#s_j z{Cm463M3yz&(kpzNm!5z4^`NVbX})fR(2AR6=_iRD0@8lQyb#uV%s9HPVzPDCvY*6MnMqzQ zLc4IC^9VaKz3|$M_&2D*{8@zjFn`umMl`hdYbse5WBuUp2ra z)xm4a^LH92vAI*pf`}T=E*JZ?(G9uCr%6N^*MV zRsQ9*AaV39SBsi&>aY3F^IM#^1sGdfdzvFW2e>LrPFi5aCI(+?2ajIAMi<~iPR-OJ zeVr|oVQ62DKgk#613EJ}tom?cCF4gIgsjD|_~$bgXQS%5KHu-7qZE_g5QV=2J}sqP zBpOfH6~5*DT~X=*z{RId71$M+L#7km>33 za(xHSs=_q20&@NueuODtf4a$*+MF?V%SFR?R$tOzRgdq$GSEyt%FmT}M-k{YS98TW ztR}}8GuXbGw8vvS*V4gz97hBMcE4ibm@Ss)wmGR7^iT!oMyEO(+usFOOfv9qTdVwS%OepbE#*?tl9S^GFc`|vdk!BohW3NY7mA9*}@Qs$ewlVF_>X&$uh=R zMl*Q5@9*3D`{TXm`R6(J-p}Vg_qq3+=brQ2^Nb}DCrTZ$=x1{MKqQl73bjeXs4i%r zeMGp!1_)N4fen6bUYJ6<%r%&x8#){UgKd6OnW%-37>E*!wah+&&L3nGUaqd*6Cugo zBH0`KE1UJ(k`mggLUSSG5KVsA*g?7#`^Sc@ARumJO0jAA^A;H)076Jq6~5gJvbO_K z8O0}M4|_g+?LA!OfV!-oHki*1+p5p8UPu0PpH9kvl*LRkl&c6P82hL#F2DlOL;()w zy|r6*INWX!fPX|-ngE~2NbCJhK{S0B`+d_JVfpA@?KN6<#`!zUe#jCeEL{onH1($T{+2Siw`59Xy=aS_HR!99 zI*%VW@KaVZS5l~6Cw97BAbN+g z%4?WGQwk-k-zZY2d`L5osoma&d^mjlWbduTgU5{~7Z8aGOk7a3M~~loyQl*kpDbE5 zSl^>CWxO0ZKiC;0?X1Tkm_|%a9OkVW73`a^aqOQ+z}ivAnHo%g4eMuH&=0fd%8!mx z4h*SO9O=W=P;Aq?j(w)i%0^SP^{cTOpk~yQ1c*}nNP$M&Smy8_+ac`F8w-swrAj%y z-hp()Gin{*pEptt@Ys&9owEk9*IxPa$Jth^&ZkgS28%{p!B9?4x-YmDO77mDMs~&)iEm!tcX!qM@2=d6z5j^1A7iA zX9T^K-__So_r2i$X8Y&B&5KZ0G`R)t_n1su(+u9+i6Hk(!}mI?=67})Z@ufv-kDEi zIU`dsCwD;U4-+<0mZ1>?WRJdFhBUf!XVk1Uk0~cEu1&%{TQ6d566U%p0W6{r_6|l- z^0@wDLqp;U*`p_W(U{b0cb!)Blm#E45(`9=zhmrsClzX=MG>jVfqSQ>WW)G8aHtma zH=!4kwmU!oZY6}DSFT)pr`t?b?dt{- zO^4z)xe|cLm?h=j*|~(oIjLpi)G_%9`K9BSz+mVyo8`OBK2-f4w;&LoH4Jp`$s#xC zL@V%AO$Zv4^hnKoP!6^WJ2Wlu20QzA2REh)9kk|k9|l>OommTcwTE(FLhYD$Osl+& zgZ}DcvnU+&$J4#4#fNr&v&&JA5;A}Is&(0XMz;hWVpM)R|sg_Ufl9xU!MK5-K zIB!osw>vG9wYGB%4+%hZU!AF zrAgjKsZvIIR>z8}J>72u+xcyvMvEpCzS?D%hmdjeW+kTy<#h<_V+Bl;W3U1j`YG&S z#bCUe#WUOY^yB)^&U4v#>}roY_qHyx&4O@gdHwy-BRHG!3H&I6wZ(2ZO>y24uZz zQa`8XAp8;E=YF_CN(z|g%C4}HaNv7G&dp`rhaT+ufs3%0m#b)u=CCc|mc2J%D&c7@ zYmQj@Dh+=8b(C8B$GauxAZN{^bh3gG32ZUzgyuyE!DaKRMW7#p?gfG)q_y>_adibs zl+cA-J6EsCAF*8)>6ERLj?g;#_nmoA0E*pTjkn#mg*!`Wf@1!4TemwX?V zJ8Bad!aEWxKtOZLWh=|Rv~5wy&bJh+P@jc@#w^8p1V?|-S$d7ngM~KTK#zOcQVrK- zG0?YDu3r*u1X0g3#GV!|C9k9_`mowN9*AqUc>6b$UY0beer0=q%ICa{MO#S`r5N1~x6Mw6AW|JU*Uc<4? z;&i8b9*0g+R+{eX7nhq&05`u+1(uf2u#Zd4T@_rxXN(50FX9E41}jnaL*t!EP*fLy zLmf9R9xI63Jf{xm2a0F?SVPrCsZFnt!fbmYI@gzC&MaX+7snxc=(rPlkJq<@|QB>RihFOcq4;kYkMzuo^Pw z!`k3^tClz%&2Doar{u{oi8gT=*G!^L1)n0rFE5m&msiY>$0>fhf8(BZuB+FdOa*bH zhf@`HA?aotsMyUKD1o*a6RH-W@`=z1JP5j)>Y$K}81EZfAm3Pgr<+Dxtz3S>pwT=hhJ2RV>{tR3XDp&9imoKWMXRIwN0j{UF4)#i|38gj$*JE=kEyc z7$Q#NvYUN`^S%__Um&hI9ED~Oo5-5o!Or_#&j5+A9-3~tc>)(~^zOl>+RVvXUP4}P zxJdWW-2VVD3$edC2X3_-@t(J(5SwH@+nkHxo#@|M?>9y3NyIv2t^t2MT#@(C?!B2# zI17TysozfEQW+OLSt7xD1`g`ujFI(v`9x{$^{&r9fJe|T^=-mk)33S=Ueu8)X7mfF zUBpvUx;I%dXTG#?>Mz}XRBc=gKnOVvZFbXeISI|~$D*r_E75mLGPN>qBD=OxQirle z|F-Y{Ak6|nVG6xaIbFUs{qbkxoamZp{uu{7zKhebRmWxOw3GimFic8#?aThCI^0p8 ze=e_wZ-3>CovC)f+9&_fHDrlB3iNzGJl`eT`Gs9Kd!0AW9pNWj{{8^c$50r!gF}2Zmnh`mb2=CK>>a{FgQ| z6MQ$(_dAw=#@+DJ=$^fN(=a1dlR4+~lN!j6Dk6W`1d?NI(CKr_@_y{)jUhM0_enem zP&H*kRs8^Vj@^YY*SItnD5$d{Tnv{JQ|eFqkai;JNH5W}naCr>T;@Hkxc2^SYm^53 zST}O!MCnn1v+t+B$clcwh%XPPsJ_7}0!XIUxHO8M`?Z-xluox{cbquxtcYHptF$hm zu9zmK{@q}+&+L1X8?9)Bt(zJCV%B#!`y)yAGw#(ge5W+hUV9Jl;c_zDqhem%ZH~%p z$0J$v`KxyZq^^MNPZz^~Su)<}5pb{YG$oGw5uJ9~$^x;#y%uK2d&VK>9E-)KvaR$} zwDaOmfN!e29#FphzFOD2#;9<%koLgEmKSK^@G=2*K`f!jxF~Xv9S|20lk@om@A-%1 zR%IYWQgWHheSXp47{8&XQ8jk_iWWaGUqA}2%{RX~ns4fOPjw=){nT;V1@&8< z-*D*XRd<+_Bmmi%UFelJQSlUu0UaiGFK5+K%|Lld2$K^}r90Szfjx_@;_BpVHZah> z@W6$AVUMDe2C&#fN|f_p%3puA;3A%3p5u=EK+4xKl|sv%2{F8PNm+c+%|`y(Kh7ih ziU*^uUbf<;F+V_?ePJX&H^2T_hnJsoEFEEKLzf~&Sv5-$if&w8p9RnZ_%;`%weTS; z2m8f4EmwHdjd`6BO&k>(a)hNTu|^`L4r$bHaVX#$m?kaLZ-jD^8+4!oxUSlWH?jO2 znZv4_qBARGMu8=YZ1WzAV{@h~q4n|-S|X2AU{Ml*hf&7u)Ne@6KBYHMLTJO$ky8^B zl{E8MB+V6t8aBElbh_s?M=Cz@>(=BhhJ#r+)`BTou6#4_q>pbXSQ#(A)&*Cb*E2R3 zN>d$^14(9Kq0fG<6YAgX@Z_(xcPu4~z$GWnC5+9aV43tKDtKV3@!faRUevvHjl`Q? zD*JBrL?SV+y(BR{32WBEhs1Dbypcv%u_Dy1N3}A}1A00F9aYV^r=cCNU>@E$lJJE$ zsj*A>GcCset}c(8c{r_{uQ`0+>ENp#9M8G!P?2N{zP2%iT;SF+^=P*|*}r$C+F;%%}kwqV9BQN(F>qTafLaL&TMI{4*$bdQ^JJ9Ha;7$gzW!lu3wThLt6`N?Xui7t>y(b6z3zz4hK2B#UxE<>3mv=U zG3M9xA%hhGvx*qZ*YFnkyQ14}*O6*?T8zF(bizZw`TXa-?%wr-2n`-+%Zi!lr7TQ&@evFrRQ`HEj@@kCjC#_r_NH;BXgR!lgHFSb0( z_q`=Y4%Q=I^WWMH_IeLXlldL6n)*`V8ZL*q3mI^+H7<*zcKC49MLGsnC`Cl_OwACv z6$x!LFduHCh&W?DJOBz*T6!NEnv9G|{U3qwL3dKp;^o0<3=qJO9r{#ejIt#K?hg-wjP=uJJP{X#q7m4GOE#>TBbzEQ=bN5t<4X#^e6Y=X!t-436~Qe*f5!34 z^`)> zdGDP(II~`i%s5x`c8zh4=(;*Z?g?wK8;%RCG#yc?75{cdPN`y#E2HlR|0FYaa(VIU zK%<&oLz}_>2yZ+D0kab-IJ-{_%Q`Hgu!c@@%=NU0%8y1!SlU^qlLEf=LhY;_K1REJ zKYjcrMO9M|yc~$9rD@q~OSO-vVL%6z=NiF9?vMy`r(92Pgg&@D&Zov_00V?N^6FIb zRm*&lzC?_c#ClYBzQE=^3s}b-n{+$`u!9c@%3HYt9bSG1HnU5 zK^yt?6^LvV{d!H}DWm79dnfBRTIQZ!?pEf06dW8BsxIEvP8Qbg6rAjwTomlwf*b;ZJUkTYDsXH+ zcHX?9c%vXKq3xT0_RXiuNM<>tkl`?YJr8+C^71X>o|ZOtRY^z)oV2(<3M2hZ)sj$= z1&CX(;f)T=^$s-X@d3kpqwVa&Gq~-vh%Z>HU&bG3NTk4n8Z(LlLU0k-4 z0ULg{iF(fM`yY%O47!y0vXTTQ1;Vk>j3T!wrz763q%%|ys!NMd{xlktPw*s>mBw!^ z)>b9aGqi-BOi>OvnJpEUC>GpK~$=suE84zcYy1G>vXU-|W*hujxt;HI2{%m^kHsvRcTP#5? zyXF!K*bSe^4S2 zYLpb3)8TwlkQwacXTWZx*!B@4CxdPA^z^!&s^R!8z3ror{U+#so02L1UmTIp??wQ% z09kSp&3FoiGHe1A<(Q^v{MghMzCj9gjg;hc{*eaxUP-u|`6;RP2?|eX4)%1VdrLK3 z{8&38twgT;WCRTy>s(>ma5_fBCHEMeq@shlWoC(J0us*S9h4uEHQvL&mND2|&BLjs z$`O-)vH#9N$XTX4eoGX|pGPsP=#RZE9jVME&a+qFx-N^0^C>zwt-N1`(u$*`YGPVd zG$xKJUx`t0WbD)w_=dm?J}SCd5mKiUYzSfk>%!?6S{aE+wAGpVEC>}eN>PL*i(B>U z?|!6D7Nlq(oV_{tKm#0$whY70rC_Ak93n|w|Rqv7XQr+We`68*E=rMdzxk*jm5`^1jY1S$G3NlkPo9v9=lhid`l4w{N zEjgmMIGf7dw9amt?E+OGmR~*en37Y=Wjm1(I-Cc+ZHg#G^E+@dxf2>CaVn$5Np@86 zx6v2g(O0n#ZmHW<{mx|CH7v>)T+S}dt)rH-j!76XO-59?4Dr4lbDb4I6Tw89oKGMM z#SZbv{*|ScbLhB}%0xRP{a@lF;&9=mGf(gVHM&ZzJu;TSWe zbgsrMN`B0Xu18|2h!tixrkhgi!rFv97UId6sKoI*bUEhb{BE-=*hQR88`%mQ$6n4r zHP;u$tlyr6jxBg33T)O(%L-%0WmG5}8>LG>_(Z){;6E+b{<2MhZ(uO$GK z$<&13Qgf+;C{*b5`0)Ag4CrnvP9wEo(~|FRNBh$?!|-rF%HsEiYs#6#(_v+g7ng+x z(*?&}({hJKwygD9+Tkg7qnzs^8?@GIfmV1tlCQ<=AeK>F?T^3on~fH>LdhC!>-w@a zo$`gk+%Q=L=j&;CP(o2-zQ(e!qTAnxQgbUV#kygb4cAC8MX)0-vUaD@wd9#b=3VHA zkC?{yiOI;+D&iB*Ffgy{8HZ0C(NRLIteCq`_yN5?0L6G{uy2no%$<9 zeXjsJU7taeCTiJU$Z4$?vE^_RzC%`vOoRU}O&v>wj_aM_-Z3js{YZRg24AbKr7?us zn2^li$b2jBjJ<(GLE!tBvy++?qHi2_FkO>3O}`E(M>wUh8S%@v1t{%!HDUtS1CtpX zudZ|0JRa0tyuEJ&zwq^}j`8UoJnRA?5FS~*D1xu$lOKoZMcdwer92_}ZC$D_8!LT^ zY~4Y+Nj6nU$!%WQ;KiiM$*ieI@BHL!FA7Lf-stcwcI~CA8H16@%Uf8@JK*9s^i3De z`GLxTVK&-yzowIcz2Z#X2q~Io->4Nd<44pL@gm_Qk!QGR6~M5@g`(DSJ!V`4v_be5 zGi>>fIQH_p;o~S^u}PK%RPCZ$q-u3L7Pkc*mC!%8LdlF2$oP`T;d6HH%B#Ijx|B5_ z&u>mUjlq&eJv_t}$dU>8Zz&1Pi(Je9JmJR{sh46O(+%p_-k^NMjZU``_nkD`Z#xCV zNtJkQ0Fh%B-ftVhvK)(J{QZv@5HR?9#3N)-i|h7u?O0AsELIch&-XQwr*hVKxqZZ8C0&1(wFXuI=n- zB)%NsP&9q1di zl`^)oeZv`dBa}wF@=eCK3^Yv^^qq-g^)^`1lA#Q?Ea+i6`)$VnTlrD@4WLB9Y)(AC za}!)$Row@DTz{d<%p@zTi8o5J|=~c29*kd&>_tL88MZDzT^}kw)c&Z zZ0f=Q3YtnK0-eK$%}j13@ps{Z(pwF@l*e&$_E{I#=-f2ZRu6miyFrkl~t{50nB+sH$UUf(~V(c%|*msSS^~d zZo7j#FYnEqoEUURU*_3Vw8F9J%NUs=Ko@5<&CS`uWJyE2`s`L5-TI%ZYYGN1vv3}5 zKGrs3iQ5@b9<2hYlur^4Wx_RhiqdFgs&ey0$2jvn@Z$zVzmvElc~oil&JV1;lMu%a zr!VV*JAajpEXnq|&pKN3XM>DUfS{Q+hMfb(0%pAB7^f7m;=xqmCegvGg54)_t7IiV z*}iuEug+9Szoa{+=dBMLxzgEx8hI6JiFn@f%%HgCMCj|NK~%bXsLRXkzxMxC5i}pi zu%kp!9PPP^XI8@bI$A~g-y5%O^-jEHFS=zs75NLg+<^bDOs~y7>Aykr++_)=ut;8wYs@<<>wxbS?m684tU`6uU}N^67m#Wj=bUC)zKD5@`@w4rOo~; zM=nd?6od$>(RBI>?<=N0GE}N^zKinmX=2!00)m*9VN=F@O4f{#+@Ptd+F(H!;J>a2 zMF!VGelBbqIg2mOJ~6nck%rU#{aUl81PwHq=~+1%9_=Px!(F^dF~?cltc(Xl#VFkk zhP)cVm$%>k)z9TRKy2~I+}HqF8lUgTT~Ikd+dYbrdy~Z#ew#Ok(~MO1lvFlE$y-@T z7Qb#n<+~D3!(xi{tv+fq%@VNl;OP3-a9*=<~g@boG zVEbyA1y0TbuCCGdSL=bTFc7w?+QSPzl@|M`!7-kfpjL&_ht2Y5*|8|94G-eU4sA{K zg9d|LDu7@7SPWJggAwijJ2rlq>O^r?`_xmGD{G(p8o;&>EP*a#5ges7R;OtfyMLB- zujdm8hLa`LutXxT8D7;qs-S?(KbErn?(IieJI>KE6MrQRorrJ=DP5)E9o#a_m?gzt zbsqvWrf^z@Ec*M*5ovK^ZLci0S_jS1?(Vxx+#1vv#9COla)%irRyRcL!BC~-EA~0A zVj1Y}AyXdx$gAf!iHq1k%Pk$w0ImPw<4?UCB9&XF&-UM9ZoBr;ZMj~X886&aaw)u? z&3OqrXUiDrzd2j^1pKjAf4mtTQfUZ5PlMh>gm)MO4~(rS0-Ww=1tzmsls>C)dJ>ly zNw&`^F*G7GfXlFc6k-knKEvF+UdF%=SZS(k_QT*DiQMFV!R)U-Mns8tf0rcTl7Y=< z;vd1`bm#=Ub@!%ZyTaMbXa<0U|LIjo%8(DU?O;evY_f%^XR5fubY!Alr2n4p;~3_t znpG0ebW){W9w?A<`y)7}CZI5mNnZsbVW!)TTfhl8MN-Zrv&+qFp_o zdY9W(Qs=Ef{UrBG(npWo@49X)Ibvp0Dp_PtOKD>b*V|%;=>eBJlYHa{nMhOnOVpy{ za>2f|kKF-mz$FG^O^^MK=j&zwBs`3+yU;pPN7`1px_JT%I=q~;HYVaCI-c;DKg#!L z6p$PR-09A{7;A%hap;OZvd?Z5Ox7kD{k}|G&q&Cem8TS^Zz0rkU;@8j0^1K5>w<#? zAG<+s_$Gek&Q5_T1DqZ<4s61Waxp|<7{Pw?+I0c;g0m*TC?=SP;1JA{O|+$?CY{Y~ za!0)eG=T=XB%RG}TIA1MelZJnzrSC*0V|hJbfk^dfiMb#fG24|-Q*@CklTWt;*&x} z^hV4$>CadtV|=mm%FD^0y+Med*4&VMy8Oxcgne-UPs_G?wnjY0bNjl?oyVddf)?71 zuKFQsw-27qL3o8D~7qQp1z)fS_6LFWQuv*!I3sO zRwlp2eqWYlU2z*#{#qLV2EAPTGWLUMW;jGhe(vMz{k(J&@X2*BsLf-@0n5G5xWe_$ zmTyZ7(48h^+9|wg`FAl`oO!_iIXH`fZ*!cbe$s5kVfNQaCh(>fp3j0I_gJp+fRF8< z$1jP~ddfl+THjG%Xaa~2uvs4|`-zr0fi~~Xa zNw+yu^o{?tF8k2gU_dCOO1gt8pwdGO0# zGZG)}PpH?tHzJJuA2MDZV|?UTy$w{&qJa5*E)V)Cen}g{)_{Oa$N7mRP^s4PMQf!3 z;>3?r2|c`sA{;N;JTqmt0Dyu1&NTh6P9fLXXXK0Q(YTT@M=man(1WETVttsuk*d z5r5yD>}x$ub16|W+!TLL+`lD#%debSToP?T|9k%vPpLg?4tPr!w5z{++zl0E?f$5< z2A&PPIl_DTJGh(k0s`E68cc{KdSQWC0O0jc`rEZpzs_eoejS|02KRtTCzrg9p+1jd zxAY?6Z-+;ND%i7W=+LB4MKsRwqu^{oI{T*YYqNHwa6E4ERzv#Fxu! z&(D`PeYZ5j1WVxOP3yyXvV)S#f+=cyT4~zgh$!2|fG(bDa@V(?3V(UbLf5-D^R(^0Z-~cK>lH);8qE2#9O%UlOx{+NCx#Zbc{z`ByVypJZ4ATQ9arSjQO0 zvYtum-Oq!b1{e8CuUq$sDK?S)9N z3npyV^GC@s3Te|%-t1Qw@zwBzau9+U!(M^dITuB~N{o^{5ZBrZYvYH~?M~anRwWRa z9A$@4(R3-3b=9pFl-B3nl}m2SLu9Kp^BHsN8Mu~Mc2UqvsdCSi^Bt@GS9zg-K4pSZ zX#x=5OkoVf5%2cxnEm0RhF{Hd) z)eOb(fFBZtxCGy4Y;qW{DK;F7ExGiftMZ=_vj*;V3pYOi7$0|K*7S4LnoS%WZ3(j~ zb5v6^fPWo@wMz~5Ed%$uy&`oU5Qxs68C3J3xZU@t3!fS{t#xm@rGVoP0KsSv(+2Tg zEk2_`t@Wddv}=Hw(@We$(t#mTU1ZP^TcBTs7<-V(M)~X`6doq%lvVz?$Oml15vezx zND{qPsS9pzl6i#H9c1T0doN(m)DO@{lYFpVH;TbMYm_5+z_|VKY05)7?YeL`d)4BF z&&g%=+Ld?{Iz#LA`24>0IVei?;_*Gzhbd0HOj`kq!Khm6o7bZ@ZH~DUgpUn4UX93J ze{;fw$@ffaQgHrzV)tJEvR9L-!N_`kX`&}Wi7fzrA*a7IX>nq7x6N$ER`=^+-CmR7 zsdrP%+W|5S0hyxWojoU;iIZBxg{+!}UCh7+JKvl9=BKIE)@Gx_O)o^EwR!t92ZyuH zDYr*`;GtaMM&dc2K)7YF2L@Yhi-_sd*s{^}lUKgy4$j%#Gz#}EL7Uud==x7vT7e`X zsJH5XFCu%F|8|uT$nkrjd?OV4e6wA^*A8;Yx>0;G$<%kw87+ML8?f6d{Fk%=S|K`# zI!{LUE>^^|Qcb*e%$5!if4z)83A!MG#M8dH9bI1&`QA!mb14v0Sg6NE_NHmk_G+(Y z8+3MlswMDT$To-Gc_+XsdTp>_PV#d(Xf_raRa6)eTRh@oQZVl$*2C#=_1qYcf=G_F zToZY{wXvNO^<%J^%HX7%nakWS)0Fif=Gmk_^0W~OmJ;D@GKARizMNs!um*rG3#ax{ z{N~-6U5xw@bwy@<0Sa`1{z%XYJHH3=PafxEt)9=|iF|MH_iQ_=!ZquOOuVDvL>R}f z{~CXSzEx>G)-<7LiydP6tY{{=G}?UxX=(g@^5zhe3&_xZm+N1mC36@HXx533i~LW3 z_Y?DK?UpaNMaj2vV>Ml5qE=UQVDHj-%*Ta4PKC86BH+?5n&eSzkgNWI*H;bSLD>jR zCZ>WsxCf9M6gE@=OkDl)(vWMQOL1EWV#|Wv0F9v4mipFXYFx*^;g=47yIh~b`y9@x zosGs|dAIK|Y>XM4vL%g^9gdK6LuO}&{LVPS44a|gvgNDq4kcEu^Z-LpqQ!Du z0T$Z%s+S2roQ`||EodlA z+pkkZ2mPX8xp^Co8qSw-U4JX)(n)~19FKwtpdR(L%$wMuQ_BxQHAkDs=o zd2@Tc4g+p%wZ4ak(bl1J!;jm$F^{h>6`rF`UV~j4!Yu8{1Qv7@_QK`g~tppZTJzGET`b4~~11z5VI(qtv5l=1Br5bVBw2&UEjdx zw5mFrRX>ko9!$`NwZ7uay+DV}?~dzX3je`bYI76gYl|2DSSr5KfR9p(Q@y>C^Z=h- ziRNi@Q>!>@8;?GshkYTUuFr?}p99TS%~5AtgMU2gV(kuMbOHSb`N(Q_=_gJHV#o%Q zwEhxfh&g}Q4X6ILs8qcgBs~NpUc3C~<~vU0NPN@U<$e9`<#7Ei`ML{k9st@L$e%lL zZfiP}=cJP{v8L<$GKdDcg_Cmwf6u&vCqIA>Qnl`j<0>4AraFbHNg0(G6<~<6n`6VT zq|lP6A|Ob_RevQ|y7Gv+4MVFx=*Y>sdNw8Rmy1hs2dTlb;Ca^~gC1c7hsHwEyClCS zwsUgo&F^z-+RUYrzcj$%efj~t>0B1}hTRgk5|VEQ*HU^})J>uByTR(+!PJp!FL-d{ z>Sg?py<`|nZV&~vpw|IyJ?k61FDL{#D#80plf*r*|MS2Ya~w?BJT71u`46lfO<)~n zQ}ao7dw6|0rwm@}s5+eW~5$+I!PRXv|^JWa=)}q8ox`6KCy^ zVV0`@?OyKrg8to3SG|$cIh!Z^mV~KDK?nX#>iiUZH4S7{|z?XgLXY0^K(vE zPK&CgNakXFd*U(e$O=+W%(-rzN}2`8DLZfpNqxj}&2#?tJ8n65@~f>ot=IP^P2@jM zdfC+1;`fZ}jcyx!oe)AK!rxiQhaQW|x||L`DSfA}+xtMHagm9K(qpfs-7~Hwo}lai z=b&s`6aTC;k?QL|Q-Qe?Ito%Ov<9;vO{p$iCq35gBJe~cMF*2J6P12_I zjl3dLU(!zJ>TE=7Rm47D9H_GDHRZ!%oLP; zF7_EBuN;b1ms^<9bxjt)4!lv|ee7K~@>*4b#N*%II4(TxgYvs4=GX3PEcczn`Y_2! zhJgqhxFI*M=+-%?{p7E2-W|Ch8bGF{n%zGlmfe5dRy*pQrD~aJoTB2rnxmo< z=l2r6EAZG@JS65R6f6r1uBY^0u$UDQ?JGA|_Pkf)_ZY6d`)7c&-rX=x03762Ywn}j0SgxmtJ;FR;#J)ezmOM&s8$5CvjQUGP+%zJzn-}4hHA* zKnPV~1EzULc*7=JqilhR6?H=KQkWZ|Nf$xbg~*m0!P^XEqW6dSK^|yCI!MD9k9z@t z)u{dF+R&OY+u(arQ7w?J`|;whi=SEG5o)|39@5~KoiEw0a5nb$k(~EiL;yoh7so9x6f`Dw`v?$K z>}<9}{Qi8+h4>hd@yI;j3zyC3=amVIj(y!Ja7!__t+^WuH0Z=-k$9K6?*~22Ld0xu zhl0lngkHWK%DGasz<( zHID`Bt|On&0O0}-3WF~%A+&t054KD8Trz=E=WEXwsm{Xi@s?@lqVjeHyE~>PdkOzS zh4z24BV30wcx{s)yygR~ZB}jY3lSAlJMnRYz9=iNk&a?JUeN>h;O+sgHNRbm@b!-H zT`Xzid1&V~B}dq7a4<^!(+F}2)=gs)QBJ_QslaVrag-fP%29Ly{bs|3qhfpd)8T6B z*T2#O$lrWK722gwgaD1UXBI`e>ycpqu#C=>&Fu_ea&Kr;Fx38b<>21|5$E^K4U1O0 zPnZ+v2x@9oVIBLcz5eR%o2|!MJ*?Ln>)|Jxg#rZ>3#jJ;AKX~9uczI}KBmR-xkK~vFo6xQ8nKB5q3_&_-QM<0qtgXqsqLJZ$+W_9$w80GsL7Fx4L zeZ^F())+nduk1AHxUNgglnPumr!+uuIT2}$dL{ierF<{OYH>tLjUpUYT2@+&%^ABa z(b)a!=mN>K@2KDY1s3y`asnlZ=n*o1<#vkqRWQQe z9!_?9hPZEpkkOKKNa5n6+T~$aAb!G^z^7{F+@DL`T#|X4^-5|H%3#abk!mR_BY}!H z?vf>>OIZ{I{&>>-5SNpAo04MlmBN(TVz{~9?%=|$eh9d%m>O_?=^>5j>jJeRde;oOJ+`lWpDUQ8VuT1yQ7 z?VgsPZD7u>4o6Qpgu_2i-p8>W;BZQ$u^hx#!5F2l6UBmLXU zuZ-sQI?f>@?%&%l!HJmD!x(nwqy6PM!S57_kl9Ohu;~}gwiH`fixlLQtzW8;_bn_e zzjV`Z7h}5W=d>(;SY{0}A0qu52M0piN|r0+E0PNxU1K5OO^^2F#yI*C^zAcy`Op#y zWitF4J*07gHMBwxxj}zocb}6JPrcGNO@gYdFTI+qF))VVFK+0c)(I?72(}b^0aLq* zvH%x9!L(!O4`c9AR$*H`xNVTMC@44-^{q5v8*f1b9rHhgjkN+omKv7HMxbagquB~T zSNL)igP&Ss6aAAJ7z9IuqpMZoOB9dAtavMzX*0K0i(5v^TTSxz+g-gnW${m%GMzz> z3zUVQ+K(2C3eP{1co1DCC?H%~;R$e)`b+OBnqR-LPuyQxEv|QzSb{iGe6CQH0k%iV^X)d`b{m79z+g zQu)W2!};FW*wFiA+)wTSvgP{LfVKZ&#ZqYhDpfu}kW>uk`Y2|G=wiD6o1rmL2d!VI-I2vVi3AQDRJ?B%_>Fcr_E2&7^jNo5V{9cJPI-cL*gYerb z__q%BA2&tigR^jk5GlDOw8aOlQ-9!4O2rNoT^dOpM&ckX#80yV^yED&DaW#|Zn3kY z={+G*%=wfoSw~Ml-^TnWuT=o~P)ieI=*;PWDj%S+=fMriO$ z8`y?eVDlbnit4u6v(;~U)ofz!xhQo)U064>iT_GqQ-xD7WHowUp)3z@3|OR4AS(x2?Jfb<91BZd^z$Cy^)`X=CpM><+O1u4wAWE0dWEp;*#9*YT&LapN4^ zsC9ZL4(pVH`q42F`Rc@N)%p{mB)4x?M^V`ICKURfx~30xS~$2p*z_!#YkWeBm3o3x zlg2=fes=xo!B-Ze7)2_g*3d20Jf&CCt#46_j}I*Zk8s+q5;Nef-RDRt8tZ-vrd3rW z{yfU?L3=HbUq(wPV5Q3(h^!pipN{_G5ZtF&!qPO3~^dcl3Vw&fh8CUmwC_am0 z(}!atS52cT>z>Z}<;?q*g)aDX-bMThbYNG-34hOkAj#M(zO5W~&44daEKm8x-O42D z|Hqr=6$TdFLS^Jz7LX6$C%&JR77@9_|4PW$Bk2&Tfj;&|=Y&;9xG>ms4DH)M>g8h9TCtW=Xp~Vl?Hd7IuTqz3>rjAjsgmbC9pBg{m zCuc%i-G3%eA3Y`Ti*ME{k?9zn?ZBAEL)E1>Bb~afVIzMNgGQBKmlv)bqD7ce9zD0m zF;zQ9Z3V;d`-T#g_G1Qv)5SCmMVb3N4|6X{VnxgoBs&aWtM8w{qbJ+bS97>g{Dsk> zRzneY$PMUwu=ebjqN&bI=rJXedS|?wPpyDkLNDo{lF4#Giuz8GsWiNDN$S3}_<@J% zf9ceam;4n2Wbw|INE%h-zGw@MO;+of?9yEie_Dw~c|ATdG?CmDfwA)$B2N(ISZx~_ z-kqaKkU8&2$V+C+2VF_#+~c-banzX7YtJ~$eLOe~`kPs@+|lJ9FT9XTbOnKlXTD(% z!8DwqV{v%b1}WxrS+rT#bp21~9vB|q95j;pXv*jcjt3tY2J5?UcgIP)Ue<(Y_?u{C zWhnoXGuxpbj)GU%|6g?VA!9u-xNaS5s|JDnrzx_70^Fd5&h!;1dSzc%Qgv%Wx-Z!0H3vOdzN}Cy?3$v&A4!$|ZYr zaS)OKX?vpPY7QJ})nm4({cgm1-x;{}%Z)}sF|!Qe6}Q@RE4I%~E^lQKZ;vuiXUq`X zQ2%9D0Dn&Md2Z!{e;-ev)0*k?V1+H^;N#-(&blo?)b5kEs)Xxjwyq=7hf|=x+HxvQ##EYPq6>}nkY7(j;sO7InGzC2;={8n zz&LF;?^#6uUR2JVDNL^K-{!N|8gYE3#q$>Y%68uL#WcAcJ5ivm;EyS5Fs2rfP)#dc zY%KGAj1>P-+St54IMc^PC@qaOpiv<($0|aN{LkLUPo9C0@NbD*e?Q7TfDO=Fta?>V z$tb4s4X21p0|5}%`Yh7GoaRfgx7_Y+%Q@Y31=5$oGb7?X)0w(Q$o~ED{cb&Z)oBon z^#|DWj#v{p%Jq@a!Oe=86^W^M?)BAb)}i?sKz0O?elCqEW#5-P0`4 z(S>ow=K1~l=xe{Br-z=RqT~UqUZy?3jmO2_!0yG0#i`W5?#oRXZCD)HcW+cV0tV|~ zZR6bgAboYk3;=TF0Edh@F%CkmX4Tw%l=ch5hXS}KEo4HLKtKYsNnzOTeY5ZGv(KL< z;#0t!Sg9t=`p=1+Rt*nJ!l8{R>#OhUzi=-h;ou(rD}wyj07n+*b>GHuFF}m?Wm$0%h!p@dlDBb z&}TK#+3NTcGQTDSA#nEDa99E_X#O$Cx71v2ByN{_!<6b8SSjU&Zn*>9{raECOl9V@ z#Q6+=aG*~sQZ+0wQ!8k>N4YkUt}_Eq3-|B*rFn10qcDY=TKc6@@v9_`wN}2iJj3tO z{(Ddv9lBHtf^Bms)}i-}Plz_I`N>I58FvPo!b}gbJ;4KZOuX`|A>7J6t@nEtS~PWl zw4DOCk8Q6W6u!O^$P2=$|KX3VBZ`b+Kb43oE9Fbyy>NK4;AwNh z%eP~33fH<;pJp{t8i``@rNtgp+$Q&!eiSRcBJ3~90t2m1fB;DAJfIUw`ZE~O!8Gc< z^D^*!<|7^JG^wsg#d>C861l#U*y~^5uiII~D?i1J3-`9y0*i8w@!dJiB6*xld5{x^94`{NOqj;}~*#sHepuwmHG}T+oZl@Y{wC zV77`rJJmU_3dNbx{4B~mxF<*Y(2S=nBWkokNXf`2)%no2xVZ&(S$r*^Hum5pdkQ_L zS)ZPKUKRw3YY!$>`|7FiZD{1-W+|rc;2)yfw@X)PmuRap@%q~C2JnN&RP>cJFUs2R zEv>{$qd4bL(-)Ane0t+~h_e8-pT#d!u(Vk(qZcn<|E2{xzF2ou(JFYU6co{@?NRo> zae?Ad@3c)ZLme7`;2fF-bk{4dwj!aclRqV5t7Bq;D;aZa>on<#eZyknfUr}b@w1%d zzvRo0#`c!@qnC9xYgdyK@`sGDi>ATi(<$>ElP_6^h#i@@9SI9WsI?#U9Z&WeOWnRA z!=nzoITS~g%GZ(GLSFcfFq!|9rk|v#KN$`=1`{njw0F*lYBbgTo31AXotKi%CH|U2C#dxNEp$T#BFPQ-bM?AZPHn}H zcNDCI^j+qUKpunR5(rV#0vYJO!RWDiym+5$d2vFINLS^Go}-wlPUA zo}6Vx#nyx_8OU-UwME6o+cU@=%M8=m^g-2!9+zF8{3=rqiv`+lAhjn*wzQ@z;B=B= zskbSqR`?sa)QVMqs} zBT~0Et~+o_3DebXun=-gAr}>^65pk6(QWQo&rdX*qR_=(8eWjHQo!YZR<0k(w=f*{opE#9sOrZ@)r3 zJDsNXF>x@Oy;L2&s(?xZh+w3YbR<+(v`cIxmq|0M2%5CPC`LNpyTndQU3qI>8M7NI z8`+AD@2~zgU#Wv#a<$d8aa*l^r>4Gs2h>cgh|k!|ur4maKT zYYyE+D&`dZ1%iwo^WVpw|3gR4jIcM6Od8a*rjMe?eu=#Kp-;VsSE0I#^_&>y=i~ZP zZn`tG7}f*b@7p|hsm8P!sFG_w@6pBfG48RRoT#|Etv896Y#cP%JV|iHWntCl0@KF?=Etaz$9^G-#7Up z%PmC&o{T?dH&twb;rX_OvdSQuVP2wRQ>-u^q53br$I+@ZxDiLb-r5E6aqOWXiz)K*fj`PyDtx zMvhq={{25N@R)*#c;=V%7*k}1v%(m}7Lb>Ibp9yS)1Q9_NxoyMu6_AvKC(lMBZD8C z%gw6g@|`~q=TnBDHf$D8S(BW4C0t_l()Sr!W#l$_!*iKv6oVCXv0GDY>$Vx;bL+0t z={*TBE#^~wCJ}g5C?g1Zeb70$&A5Y-VWR%@*?G)Gd^j-7yv;;2PxIpAk|c+-$AhTd zM^@SWtVl}D}KyT8VQ2PXd|(U}Tcp>P+Rx<+O> zcSLuZXvgO@AfCEBC_HSQ%(nPpzdlvqzt06Y^IMYn(0Q1Y4PG0zldbEZHFWxryulyg z^1%zmgYfrP$>wVy&DN_ve$!PwtcA0Qw47|=d#MW>$d~yYQZUvH0KhN_ni%0 z9)@b*jW(;R3s_TXeL+u3erCU*6jM|q7M?#-EdGg0MjPwPyZ71O`OdxL-ua_tjqXvhYE?~nX4P#cj7wnM zl?A-&`VAdpHm_PX&o8R+U0=4Zpgaei3DPG!=kwV3iw%Q4=W}7zAv1cp%Pt+$HF5|0pB z<0WBdlnI}X7?*B%EjLr``k~m$)6&Yy>O*kHG#F%+x^`Gm<8xhce_g3N59W4XyH&~H z%^9ZrN$bCE>t#VrPCqy(MJ#XRR<=A*vLIo$M!B}XRINC5_i3qK0#s`-Fy}c1bZ&c_ z+yBfTmzmwYS);{@!&wPp0$2KOd)L;iKJ`kwt+*oR8+vo!cDArZUl__hRrPw=;0~m7 zUreodf6G(9+DEt&=T35#njdy7518W6ABb_RfxI&MCEc@^ssAn_2k$j|)^zCt|LVmM zS*O?oD??2ds4-QG7&iFTq5Y1_V+?ou-F)DmP|7oq@{m&C5SF|h?!j2U-K^=)1#F{qTWmx3Gt7_g=J~;?l<4Vq!DTU@ zP>qCVz#|EuDr-0e0^l{hlD-mTBEi&E^+z35d%Bg>CCLX%5D%P0lNCoHV)yJ)`ZSNa zcTMH_Q(24TY50~w}fT6pJ@6=%%XRTQ4uhp5n^;7aGTUKUL z7-jyG@%n59mAja_yUoCmMzNPwPKoSrO^(NSGI=vR_KJ)vDb*q!<^FLZ*=XiU&umXx z#A$gR=VE5GX>RWuqU?oL|J^S$qI+Wx4&UxunjQx*$BeLK!O2oshqzZp!>xYrekI3l zjc33({;eL?Q`MkX`R(E*F?^Ks5qPprzEF;Jf0wDKr{nl|f7HFx#_F)+kF}F$;X>wt$e3q|e`a{NI}Zd$Gx+~4qdCG=(M)>Hh|Pi6AqU1|>>(r4gs z2CYW^QWTwut6_)D<`%jUBcTf_fmtBrw$u5k(hqPrdi|N(s=t{>ckpg=Gu!L&&a)Ll zg>$)3>vI8i{0^zz=U%t~1(IWfvA3EZN*N#kUziNsja^-gKOt@0ipO=196yX*sN{*c z(Ta&CCk;4-iES7I^x~r-B$J=BBH(cyPLNlR!76#J`}y7#)$E&tp;V+g@VbYW+6PA5$ttl8D~;yNg|a{SHwo^BCVVSi_; zvP&z<^7$z^u@K?`?;c~6?L0(&@gtiuWNTv$IgYCPJxr;;vW{rp-C7aRI-eDY3Al_t ze!y9!^4{y4^@2WtnV4@s@Pw{Y#q9i5u7wHl!|$9o=qw)GftVVw?ir89=A;HvAR>4Db6y6{?J&Q-T&0lM_?E}SifoB*(^ zd^}!S&D*`+aZG#Kb4ZbP=1+Yq`Zr!e0{Xt|#%OT=2p+$weE65)ybN=*n^9|sH>ksw z10$UgYwHu$VW{w}q0#%dulW=rTW~2-TjFf6t?HDkLv z0)827I8#%RjY>!+5g4>WB@(me*q*)Od}nhmNqP6HM*YZ1kIRxq51WHk{wGdT*>i-G zxs+1W*}_(=DqoR?8N!t4dixgjQ1z%oOyw4kKRWR(vJ3{&PvSxPObd~L54r&(x+Bfe zyk>$_0RlmGQ^M)V9xr=>Tz5>@Im&zdvVuNlOIR+s0YAwOnpY&SaFh<9{Ao=bg%l##=+jfo2ULrGpb!1YJQ8bAjI<-s1czJRxocBYAyUrAuM#)5K*C0o#u}-h$ z7Q=?vD;jn;e_;5$Kk9b2p2EF7RkAXwVM+kDm{VVJ(|b>fEayV=q%|29CPV*o>x+|p zDobfA)AU|ZSTfAxvot?@Gv#_`i?{EV#p-&GfV|o$P3;U$yt#89@#lU~|Kih&FKs(5 z8=@Cyd60a#P*~w@=o+c|J|2)Vx{^cnfT1RRAIJ|v}tjwh5K)O=Dt-H6O z%mMUI#`1ek$7qA)HrX7tkVfR>&@2Ch8z9y7|1sp>(Zr6d{u&1UVGQpGt5xetuVqEj zSit7oOSiBqz@gSFCm3&;>i^JuB{u(Nck+%<-A?vls=9(1Da@{e$>b|>>YUU!^U=rD zyZiNH@Q3YA?rq8C#y`)mqQV|8?yAV2u>s$HIBB1qk}ou%$m^432wrKi=pjjo{A7Qy z=ycRWX)oJb2YTX3q5E`oOYsy`{l&-F+trcYRgL;Ik#A!J_x<6i)hG-4D&wu%6d>o2dlBu06 zqfY`RcR+i{WE?Gbcl=;mNjf=VKKjpgWyohJYANLs<8Sxd;9&FhK6GJT)iZEela&&y;e z^lP0#L|%@kQgef;e;VgAq3-bn^>A~=4naSMgx{Ue_>-JlYZ1;vs+c0*%aGJ;Z(9Fr z^&?^IlbwXsfcz0xTu+W~jX2Ub2(kFRy(4npohkQ__{#zMfZ5#Vy2HPJrVzIs9xWdaXL!no&1!xOOrNys&xnFnzk{w!Khbkss)EQAc>~U3t*6 zJaX^Op|ld+)pD>`BzGBreBu;n&mm zrYS~I9cS-hM=1AZ0d&4^kPA~kBl9+S-1NJLfm+$)3SDn^-@-|)_R=mR0bFI&l9PRB2c}<374%u-xdtO(un(YJIX{dq(_MmlMS`Qyd~UD1nS|=$rJPK%n9zABf#6|*oL}G(-8vPZ@}y{kuK+YlVN7N%crNDNsF2)WJatK+%3 zbjXu8TffcXzvh>|iK2>dJp*#4J)m!^#6~Xk}Z^5QL+T*O4<~p$?B| z>Xx(xvW}yJFP(_uHtM7R4N}40=K!yb!notseg2wmnCoBWAS^%k2X;)cUBWl(w@kV! zXZ>2UrVz(pvO8L@Urds*&)fz4s{LHwTbUPJFAQ7Q1}bV2zJa#W%6$Jc=BWDv+QrY` z8zuKF(bjA?aHiwguY25C>|bAH&W1$Sb_6A>@2j2FFihR+R2lMwd7e@9@8eb0zuBtf zH}l%~-Vr6?Mv{APICg=DWuk7`Z+BM4fZCK*w{Qaq&v)2`1~ATSXAv;#i^i(gbSE$6 zhF>_*O07-_pJR5!RR=P?D3%{plpjC ze!gUe^iU_x?NLot7l2sbsY7yo#jCaRTL7YI-QqEdE#$rBgxz!dTxXk=upYTvC-<}B zeZPx9PE<1UyWlF3N(J@w^Wf&vo&$%)9J+Z)4LH*lMs6K0G=3+)L=c z?7F#DM!-!+bHNY4zruK@yBG@S!HvD$3tfM(Qgvl``pp|3Fc~fvvOFguk2iq;kD z+ljULwk#S;oh~t$KeYP$x0R#Gt_^(WNRqFvJ1(@7MqhOp*J9>A5NLH1CE}QCwi@R4%F4qUr8_S#4^NYXYCp z$j#))740*-VeiBIV+o_=ku{EuO~=!XMQ$t0IiKq9EUU=JE$;_46{q71bq!E-`54tX1l91HG~2xm36A z@ZJFV3B(B2r@;(Pt3#|b3`@^p1=1%3rGG-&dT0G{lOcXMskETa_*-f_CBlq?aj_(9 zLu8ciM3MszeO<$szg@KbMkga*s^CCFMemfHRa786SCgxRkDH$&Sh}x{H?CrKnxDW3 z6$u^e>D2k-iPIcO`Ld4pa!(lPx$Gd+F|^dsc25jgpsnRU9Krc20XyCu0SuCn-b6q-YLYD7=v1I zytzre^?}AnMgRP4jm9w`ESsrUH7}b53q$$VxvPTgML8VA<%l~m)m{wE<@Co$Kci=2#(van z*9qDjjuiUQ_*xfF^L=PvosqT$t@M6I_-|Fg`44%n3jkBP2Tr_M8<7H>;dg0VmrXdZ zY9&y5#Z{n9d&I}0bmdxfaWzr31IWjgNYa2qgdD9NC{VY-UmuZPW+?jC$0cVaa-CC0 z9oqcoy=2D|4YjYB%3ALqQ#K82m=Q}t$8xB~G_-eJaoZ(JN#pqAijEu8adfu5hRg#z8jU1nwNJ5C}OE|#lo~*v<94|_+2myH+jWO8iRrzN2 zQuBP&PUaqZW+bgqFpsKVzx>~0b~B7ZT#q9Cdhj9lboW`Z0^PJ5mh?g$8v*FjiM+)! zZ{-^zLU%UQiD1@S=y#5K3iBoFz z`cszdhX+BxeHy2PP4K7tMNmwW788KJt9%KH!PhU@ik350WmRYNq_G@pn;{)8j1oiuvG6_9h3s%&I)aWizb5JS? zQsxpggZ2`bF1avDUKsB|UG#IOVSKqM- z)M=M|Us6&~kbo$l)eYML)JXvGsEd4sK9f~Q&m84A`1*XP=KutRhV!_kFoe*ei=iBp zT3z6pQa?!6{65qK+lo zZ*J#Q{CKZFpUEd%R-e5ma3DO)zY?`8GVK<i~K z$PvwP36Z4%{#JLDMf)xP-kqX+HHN%j8C*SpD(tC^>{NszUq8Qpu#?;eXR}4+&Kzd zxTwPfS+j+X&+=6c9e?D8j0U*pca$DdCi#0=78 zIm(~0)v1BEK{`^;r4A6850|C&_(M^5Xb}KHf);sS!*q*rbb(DDiHY%3>LZB@QnEh> z47%M2r$(PqW{`3UV4K=%RA=3y6rJO9E8zoKMKTW%#SWz67{x{`2P%GjryhHi}SdjigadTI9PFFcXEuAGQ31y?gyNCotl z52KI#zddJ<_x!GvjcNVN`=scw^a0B2;D$tQgsfmkCYe6f@Pv{pUe70GF%Xi4dDD*u zaE}9~bs!e6vEL7?rh}@QaM4u6VP|JC9BBbAObVj~CvrxR)W!;r6k9d5AwFS>)_eEY z{kN<}yOWuKHadLDkNd=*kuoFA(n;}V=t%j;ruelh;wt0uO;T2lnMUwv>wJ3!SL(ha;*e?pr;0g525|TSF zRItK$K1v|gEP!$XmqC{YzEcUP$F^`yj6W|=Fs?{1`X2BZ_zc_0e|mN|ldNo-@VcEkToH5aH=n8~=b}Qrzjv{6dIq7|UsZc?hfX9ST%Tsia8X#Q`i25jN{*Xf zQSTGbk$`pm`@>4h%Mkfwm-*ZW&%o}L%b0L0EL5f{oBQ&aGH$!jfHbN7T<%^Fjm(5p zrs$1Q@LNi>vUYmizi|Au9|hiMrg0JY_-l=k86MYW@591tSXZmokNocS6kpQ*SkXku zmZSxFR&@KWh){TSZzEy2Ugt^*6z6Y6H?Hh)S`Bw*;4Zhd_I}^IQ-}t5t?bfVcufl` zJA+b6;Y*yqFHM=nbSd*R_lqi^*UqA3(!6ysCF~rcIWs76(|vfC?E)yj+4-3-g`Szw+uJ;--= zN<}vK5EQa>AOl`EfSq4gDfP*GJfl_?HsjwBnv^6MH^aqpTC%1zXPNR@8u6pDw{=)J z51k;IxhUo1oQKo6d8cdBp{{hZ%v16l>ucd;p9{$q7Ss|4lYYVP|>(QL;vg9edS}=eYVMr)jyZ`G9QQASTlht zz1|wpDGiLh(Bp(hjBW(df{RO{#HnfdweY8no!4UffKZtQ_fSm|vQ)RK?}+F$a`dkO z(hJDl$!*>Y`2oAi>V+x!5X`&B`|3;$n$kRbKz&|j*{wE1Pv?F9*|Px=1kY=`B6*n6 zdj>Q3-bU~9GAq5{(A3P8WJp*z15!6j4?<(7v2GD~MrL?W@hp3%zO#mYIDML{;9@f)=k0C(h34#she*!ymmsm~OCF^6 zq@K}v!dO;i5KS^=ir!g_yIWAdfHPB?CN%B*THE34~WHj#OPp@u=oUF>UFOKH8z4Pm<#Ly|VTIi)ZJz_wt1HrxO~n?XZL&6J0rY zv2sqU8|3>{sR@YE0^jM$ffb!mPTBVfN(%o-Kk!&;svI@LVei>j^a_eio~S3X7c1XML{r zP@zH3XhiRYk+Rz{k-w1BbsK!6A!K-J;hn=}GUsL~fHWFQ^9>PiE?qcI8||_nrwuk+tfH5jj(SrQ6aHNWo8;D`HCBebzh|>84B-i3XiFUSbQw|I=rVym ziEm!JyZbNpVCg(##gm3PMXF-lL1Q=B6ayq=M~04PVSLN`7#V!F;$+Gv@{aVE3uP;N z-*e-Hv-8qVqz`9VDOq#ky*Vloj9}NGfL1<(mpvHw8xGuI0gxK_8Z5)AfhDwHRAX=Y z2=N0d8iZzP>u1XfNuQ$ zsh0LjwS-~#)cSUB{KS78p`*;!_QNv(5cQG2IraeR&~xQbYQ1TF-i^yYhPror{>u{G zI#;|U??Rt+T0)@{s!aLcvVR4_zcib`1V)JW&-XhL{v#4Ugar!b-#ucte54lx6-Km( zzvp``oxVwwVynQ^^Y34UE9O#}mHFjQOLdC9pT;DRZohN*ZtM7Znysj`FK%fb)S;Rn zAJCK*KM*PNr<2&3@ir*M5&5us} z7TC~feDoGSmT(Ck$^FX^p5wN9YG{!#5xFBd5#U2(dMxqdnPp8@H-^a}b&^g?l%r3zeH?F|;E=Ita1mDn{h#&JwF1>mPYW0BSFKsjj{; zJ$rS%pG%_z-9J*27W&5RwJd7B%&HtUHw~UjKcl5@3P<(P;()SY%8Q-$E^RaYc0kc- zo7B`Z_asxY!b}-e zg@Kcj&00-ZhU25z*h?eSQM&DOJLggw(&cF?I8nEx=gE1yS1zt?Zn}sCX5k}wt zx}~=2){+9BQugRo-%x?Hh5<)aRD(5x;D&ZP$aiY>@YLwNOq;qP@11QCI#V@VQxnBiucC>NYNfMmChE@~ z5;zN5GUi6%Iy$oAsZIaY^EdzWJbjBE{q&^5vdJD|stH-z_}S8c<~y8jGc&R`;e=A? zJRb$2S}Tt_<$-a3wI8F;EQmGd*?XGjBm{m|?0^y4c8U?Rb?9Ti0D0`c1kYiqNGs=Z z&>$7kll?R0)wAP~PGhC4K8uFg4cFPV2ULq1uJj}0;;+SgB_%a3`r+KyGznO_Po}0S zFGLI5OZB(!`U^?#(d`$BRMUo@1?i8-?`M>T=PN*POmkf4ft#b8|BM;)hf=8k1$v~C z8d~J{d~QZXDf#FJ=Tfstl)p<5>_~J@Y=a%->XgJHSytq@rN)k5TxHxRw=cer9$Itg zK#JSzisoyaI1S7l+9a}NHWk$r;6jaG*co%<3=|kw8hoZR9G0sb0Bk8&5pNnC)_w2J zUM?a0ay|qUBx!9;vdOBG1aRpGrT|aC`cSlg$*B5%utUL}IB_B(A70MRR}tp33M)n@ z)ntX>RAJ=8F|yXTc}GQh?=-Z6(A8{zDVv%8qfltxq{ub?e)U$Z3TXwD-qVP{5od** zJ&m+6G_Gdy^V^e=NHCWwjYjf}mLPtdZkn+jOb{)n9_s(%dK1y0k$~-_Ke_^;T;l8O7w|>3ab(Vu*}aq1waU6CK~?3RgH*_gbFbmHWM^36#w^<1w#V` zuYYu3bU_*}QEVw8l{5I)lKsz%5ni~{e=Wx^Z`vX4+yzaq+a8Z#6B!<~C=pWB2Em#L+Pf+blouag8ce<`p!lNJT36CnpBhP zf}Hqu;Ul|>VE)|yT&2G}W1S!94_jB0a0Q4re3qCx_)BG!nULTU_cse+n~2MIk^sxP zGb0E3Xm3f#Zu<8}I?Q!QIV@oHBxW_^#DZzec&&C1Y$k5?c;=efZi-G7>z`x?0>}5A zc!7)TeX$&C00YNGR4^!n*T#^e36BDhF*H#mJF(97<7n9?NUbA+fvdrq5(MZr7?PHs zZas5VVZTqTi*G4A?)W%Vw<_$2(C}}Vkm307aOHD?dPtg;g2EFWUx9SJZ++NJ&>n;$SToIlYow(s@~ zommle@9*WyxQ$@{-q#{ll-uEKnw%oV;31sJQ6`||A8930c6k2|AAe>V6>C3%J!tr4 zo1qMDnEdCJKsTd9+JBYQP=x>X+sz`pNSr*E@l>u^FrDnw78EC&409|yHT?XWZ=aPgc2SqZNFM<&&{BTz0?;1E&e zF1H12A%^$~R}6bb(oPm$cbU<2qk3=UyU%ErVp;7MC2^*ql{&o$Z%&+G(jPdU$@k-K z{hOC_6&Qbcm}8@&cS&JZCJF+B9CI&=$*ysdca5Hhijx^G=Cg$S_~EZ9;d^?=S{dF( zSUXzmPvyq2dW*n3Kucu#Sx+mOvBn_F8{<$hbzqdPmPHk}H;l2ynRdk`N> zV4NyB$kJ0G=Z;ZdI6C&*N6YcJ4(W6o6Mt+Pe{X58w2LR=3Jr|l{uzjYkHN?T%|uS& zdmu2%^G-_+5NP20@WStQ4>Yt;#5LJ|Fatb z#SvTCZ8iK*e5uv%^>e}D?GslT&Kr2>$`)}urgvT(E7{amtH&L{dn;AW{@LyAS&Y`P zvy!gx+Bs816MI2mt>+hg4?bsph}O5Ka!Z)vPTn5$cjOaO4o{kT#8e5S+(_`C559dd zVmoyvkGEQ8OF=7!hmPaVv+vrO345+!|fA;#*7q~+;PQzeSF z&cDZl!CcT^KCJP2TQ80V^YrNFehQ*fMZZ32!=(q=T|yw`^gZRU%TAobq06oOdfP7o z^?;s~45f~I@fQTtZ-71BxPK|+9|TnV>*dNo;^UiwCd-9!hoW)H@yv@Glo)1sqsqJ` zIAHa9gydMz0{6AA`1tB1(EWdBXtxn|>vUbrdeZJ1^0&r#skR@A3RG(!VchFpg{(CF zYN^$nJ40kRWnUqTs{vzRn7JO;>{x`v=Bcx~^Hh`P^g}gRSYMys>dtJtfr zH@4~Q#J$p^Zrux9L9T*c)3nU}DA68W9d+r3{Snf`8m?ptb>356a+3&)2;R>|LRf;8 z{W_0Npvk%(iUHtS__-Om04Sn5;a&A+>_h5=#J=;f&ayyf0_&%o9`;Ile6SSV`>d zh&Fofl$h;T%Aey~h^!3V=wesfI$ut%gTz?9@`SahWTwBfD*Jmm>)E5R_1gOXhn*tN z2K4_MJH^YJe)t&2_ND)>m-cRLHHx8wPw|VO7UfuT}I{<6Jl=@kOugK=<0gy7*-O%1^O1pJQx^_?-|mdj1r3_dh~A$7;tM z(HVSRUuL}CoPW7Ey^MJ*-~2-NT%plY9m0zZ8BFf_1 z7q`b>V{MxNyX$(S{ptfJ`mY?vxe@W)c1%LVzD&hWmQ}`@OvlhJ>QB@-cP3-?~Ah#N#`c~x6VNj`pCj!QvCGp7=;_l?- zCtpWk`y9UGv*ZhC*u+eBa(amOz@9?G6RJ2`2^V+Arma{mE?Q`)fQwmzDyvC>SM(vMHSL`q5 zU+*s+vjX@2-?yTE67c&@`?-vdSdUm_i`rojzcxoIN=jDhRknwov>RkSpj!`LU zYmaq`Rc8&?lFwSN+wo#aF`RZU{u1JFJE-0;ma!O<4zxynEDA%^<{lg*d>6#Llw*U4 zflf;JUYlEXP_L@Gh~`IXfpamU+lZ;;LzO{YnxCnQCFWlL*&C-xy*-ziscn*`03zX= zlM(D2mAt@9`Q|LJ?pvgx%pV$tni}GD=+N?>pGieK74pmAA3vg)alvz?1Z3`XgE!$cb0m5+z#mdu<%$knd0@{)3y&A-^IXF_#29`(gOq8-6JQF%Xr7p zOet+_hZZXhQM#@ittmI3N#Ae zm=BB+zSCrStEPd*v2@YN67$)So2o}RcbrNr^K>nn$8t5(O+-k^eybzq-i9^KLx&}w zDU1;FZHV=@JAIrL$JMWi!b*3M z6^mN-5VPa03qd7jnnYC1-Kbi&yz$jA@kYU{;@e50Xq%a$YX^l}#_sIq?ngRWgXz;& zF&4+4&~s5_1(xch<=>qoJzF-_*5EdsfWq=vw!9WZfTL`-G+C-dw*ol-HTDc|93S+~ zqPN!TCE-Y(N@4pu6P}j(y1ZF@KaQ#V!Np1um3cl^A_Q79sDI`lgDMlCELn^WxQB zM6dduvWiLT^-6|DPAT9c&J`=E;<{c@Dw;-tUKrv1@0m)C2$yS4N%X|O-OFj5xTC!k zQD3B<_brFIxx%s7J7$lnC=!Dbc)SB+!+76qe07?>h_D=}%Wf2U{zTJfwwZFqB1TyD z5eqYzk{MnMY~w7UpRU%<4&#`f&Fi13%8+>Sky++XljN1*k5eVE_Ce5S;5sRL)$oWE zlJX9(7+1O0`aKh}rd%X3vP`VXla{?<2LhE;qlOtxxSoRpi@jl_WS#SxTuO|2i6iYD zEAi7R@rTBJxmpKRp5^o;^%AbE#JWyD7XPaBYyf)X7rA9}25y?LCV<8aTanQ2lv|0O zWN=f{%_pQ2<$N5zhM=E%y0b7{$m_fQZUCLnCj{fx^dSof&B5 z-#$TcL8APGxD3BGT~47W;#`DPJ-dz93)!u;qD@38>Kh9N-H5c^WkuO2$jl}adyP_C z--t2hMjS%h&?z6I-M3e?%)Y8Q-2Co1{JlACz*#2&pb(7feaPshBE7*t{>akqW8T1Vb<`n{ICBs4ore6F zUCiWH@e0(3qVh$V=vHQ6`ze0jZBuS@YO0ob}UK~HfgfQakY z0%hdZf#2gZr+0tpnC%ABYHQ!ER9kOP*A=A1T+2Mpft9`Zn6YroO>ZBu{I@cbp+OU#2QPN|SNjer{aH%{Ouc6`()L@y;T#-a%+8|$9;+N*NgPwc7IAr zLx8@e?}J;%2CiG+>q{#(`B|jABW=AJtf(#S;BE?V1FcB9Z&1nj9yzv6PFe;>{y~op z3(+LzZiGw~otHRj@#-b@i^q%#-Gnj0xom7IqB;P((F7^`fqYo1+;Fx8^h5V_Yx9QF z#US3m%X|4ig`7VY@E3#h%pY|)*IQ5m{v>EQ)q;?|#Mv{I(=9N45!K?oTcR;x$Y8x( zLz}Cf<_8}H9lPjX9=B*@XNvof4jL`uPB< zI}cRfYp*L7a-S0{o)~$!FKGz;Pi&y7b?+jMRlO!ZWV&Ih#AqBTI?pT8 z#PzsDYJ0O?Je)&|;>33`j;w_BABs)^%|goocYy^foy5^^0&4tZy) z#UC)j0qU6>71;W4F}kl}D3fNqV1Ms=GkYWQd^rY>k}V$Z*{ReqDG~oC8IKo3a?7iB zS$weCB}A`GaJ*WSb*tW7dj%jgMNj<*W8wPQ5QiOXNsKBGtd)7q<~9)-Rg+WS5Zq-! zws;iW;sx8$P%++`eN1t16Rr=s&R+#3fRewblKNcs3qeBP5i`B-+w?_!A^p9CU@DM? za=U~vYGbuPY}2`)VfGF#f@S&nGgQQY=>?$(QzMik6GH|3>p)4eMHLk3YkV^88wPQNX_B z0x?gK1QNMpjsdRN62)Q<$DanOe5p3p=-ushnW;kG@Yhj>VPam+aOpubAUY{A`sVNk z$K-Rd6fV{{iNZoOss;D)9bM8|16w%}K-b7@F=%JKMwi=b?81-N1mS3I>eyEk1sgnT z-oF^g>-IhVoM7>wuKPZ~EpVS2JJzB+`2iz;{eds}^Zf1aH^G*&byu=}SNDGRtL|JH z8UdWqm)GN%&sQp^2QK^|^`qY{1Vq16CIP|ei_Im@pNSi09D#iMDL7qwiN9M4N&>X#hdc=qC$ zQS|M9M>;mGk%gJ&D~fVJmo5Mdc0>>5{PdAp6gev#`prBQu?~4Grho_Bl7lpJ-LL@i zO!TmMq8sCxJ!O2sg8QVFDc`?7)je|m4+{Va!nL_oR#)egfXQ4Mh9;xCYsw+fiz4x~ z%E3^FrL^@BQ2Th@u;>*>b%FC`bJ8awBQh4f^}W~o4BfkqMz5FoR5AO1JCoaYppzA@ z0$`7a;%vn8(a{f{Tk3(`ky;Z-N9i1vHF4;3^o& zv$T9vXx(e~vS_DE)ZDNdx)}M*x~cY%0ZO|v`Fb?y2feRi%f{!`@N%g6s*a3uv+?h2 z43uwxsry^$oYcojN@of)hUa(0`L_IKwI}0P5^EEXC$*iN9*+X+3qJ9-oBW9b(G(QU zpHokl3jpTS@he1|uZIPG(LX6gk&e*`8kKx3v;wazB_^+Ho42w=ri!f=7=AWI-@P0h z4z1U3T+;vw5Tj(IxY7VM@k(Fm zw=T9?CgYb)$WntQiN(peE|=v-SQV+4(9=WSNdA;a3gQpF25ZuOl%C(NAT^7w+TdR= z?5I+|Ors^a$GSIpTD6lELo^jdUy07O7_QMKy=e;F*HOFL%XzHZ*}By-3*`3ZAKdAN zzoF3_dt1?Jo9C`Lz?a*8U1Wnv^+@x-7<wi zZ!x=ZlX>C+qo8kA<9v@9E_^NVCqSY^>8$_1_PAS5(7iY|y|r*Hn+#F#+DX%H0!drF#vX&hB68x8(w=cN?ao7@*;cwVqK+~nA3Ai~r9Q@L(8 zg2rcRho_f=asW)hPwO8V!;0Q_=ybhOTNIe?m+jWug#IIB+>vC$4$v6p1dnYB_$_pS zXFrUgJ_lB+B}Y4-GI(lW_q^x%pLO+>EW$7TSeUZF3S~9?^78(IACyjm9jQm}5tAp4 zlN08ACz0SI0nD784PX?GbC`h!>pWM|I0y|5B)jt_I-!n_^wDGAzTGF3%m%CfS7*vn zdl(G1kL2mVl8KViHK(vm__S0MK@@g7{Zfs#6gs7HID9BpJ{{Rd^>c>@drpw(#(MjD zXXmPLO91r#%Topk@1CEivnPqMaxEM5=%EG`!ZYhVXs=PqS8H@8pXORkZI z0+}??J1dcvf1C^q7ISlR7vy@)mc5=t)@GaVEpM|FMU?L?L6=6yKHgb7&aQpIBU`Wizpspkt+E13i$ zX|K3*P6w>QmZE*;--nJ(_ zQSP)v4kf8*Xi6^{rjEk~rDp9}(khXoh`EiwcIwVG#Z7WF_h&iAV`2=Vr1(WA^%-&SI#wVA0Ks4}Q0Mt% zTzjCry+mJd|9KlPD#+evNkEomf{@Ogpj^5whIH_-?1XPJd zeD7QLZb{TrDYIQnWd7={0)n9QO4zV@L=-C`?-}_oCVxobR{?8vj)Li!c!+Xg+!vRn zcvsGXz--UZgx_&Z0j8@u7@9;l{2$7aQuvOzIG9veuf=%7mRHtR)%{1u|8ma*3jJot z_dfs17;s8RIiOSHqmQ6F!Ca&OGDJ}-lDMPoSs|I!xbMz9ybqEKtK~)dA<+75Vc|_{ zPL4$-(iVS@fpGCjIk4=#I;))PNYIpO$6%~yM$iahE%uB(Ds_He03&fC^bBgZd~Q;V z8qP{WYxlMM3fttg3^p3nPf$#}UhH)2V=yZ>WcTQCavf(*KO(j2-~`f{4MSWE zQ3vU<$&o03eRF&1&^7NkUk^=LNXf`Bw)Y|e-`8Hsf<~7LEAc0P*Q`Clh@tPrC-6xH zMG1W!wG9dvc7NRvyC3IbJHI+e7v-+}ScjbH>1$xQ2%>;T)Mx1V)m>uR!!~fwM8(_* zK9fa%hU#&XE6gG6wz4_f?760V7wm=X4jLmTcq5B zy&}1czkQ0rcML0)EX+1TT&jA?q z;`r3Dhq$V!t?T$As#R?tv=8!k`W`Fim<-LxXn}_{a^2gfc#q#!yw%LJPJaVI~k6e7MF5x0bWAZJPl`bWz)X?sMeL# zsTWaRsK_f>mr36fBQWr=R`y9irU9)aVX-h!s+~swA(nce{sSW^M6JWNwF7Y*-niY0 zn1Yd6*d_{1i}8qpJwBp%orls_a#w*HGh%nvX_lUtQ5d!@l`dS*({{(Re>|z`=Qzuv z$Yd1U*fvOV@M`$f`_%EQFZUqh&$$Ug0OXR%MG>oDiSJ6kFSe1OO<&Q=c*~(pls2OY zar4**jW(l`+hjjq==pTfcGn`)eO6&GJX*-(tMsSVzI0>ehgyn3v&40T}VpbDEDCV0aD67M-tHS#PKsiAu*F;{tg=TpC&4aM#no< z+jTotO*$PgQgG83amrS??E+z0Vj zP?mK`_Gsh-$5&)way^TqR6}SW{{H4XSth>}C7POac zS$1TJaldu=!vHToPF@&$rKGWJiuwKKUs2>$le5V^zq#^g6`LF&mD^)hoMrz7>%s60 zqStzux+^z+&%c;(iIs%c-J@_^iu}`@7JM=o2GN(uQQ+}97&O2lQA;A#lxSO$`qU36 zae@~VV82|#C+a`*agSEHBDqUO&B6#F?m`6l>874|RiX@UegHg6FymhP>63A!#J5$P zk{lWEe2LD^5)X&Ux#%cGtF}U&H5$hohkk6Pl)quDsD!bpZa>M0&6y(4MH@z*9BrGO zqHBnk7a}7$1;5dkL;y$_Op5u8t~Jshlmg;)nA()o$()I=R@P*$%)U z%P7|`8d^ZAK^9KW9-tgF>hCy?#v1i-jt8yB{5L?{!@2qn3Q*0@xq*PG}t zl2`w!V=nl_nrSWIp;gXCs#+Z8OS;usFhim|>ZVNoVSZ%rk<#&RLzKfn^00d)9}+wR zG4%fVB=)4ixJZAIw$xBiO?w)*aR zex_Wr8i##r`o(Jq@&k5JrtJDUobBL1l8NEY(M48{JkIM)>BihPQI*fLN=_xcgwDzd zZ2p|Ui<0R}R-q|^D-)S92KFT$HR}xYg`97b2n&d2&*=eecQ7#@#b-p1enDQOp8@YS;}l5wdvZMa z1HKQ4xJPeKm_H=RzMv~3^PO|_at7S{l`d1Kw^>>y7B2&5ogOU zs)3~#`SZySX{^;>r8G@+v}^$;T!^&5F-in-`|W5wC`|z8{ZGNx$@C!(R>=WtFR=R^ z2;s9tMB)J&uYHLDIz}(Xpo~|TQBK|r@~@y+^}+=i5G){!6?ZHu2yh4XKKKbu_PV7wN=7dbYyvoWun3S~1B{Vr zuB{`-Zfq(GF6l46GKUx!&XmHs5)GbRlMudt-~H{qJHyPRXL`r~dH>$Tt=JUF>U|ac zbTJr7_@d!{jFs)~@r;@^78n%cv`}OlFus|&lbzAiCmq8o>tl%0bpTDn_O0bw1xIoq@&4Z`<42EjFl#HOo6i9(VxJBsi8Qtz}8snu+BH&LRkA@P_{f<#zK7 zzo(};YbAq6I!n8bHaB;lJA3NeNt^X-Sjj~*ZuT5PysK50*2|^MoBh{DV_REjN`IdT zy}6CXs0k84zGx-+@%_&2O;hgkN@TBA%6f0Us)0Nxlbh4XCo9D$OQ8Y$#rGn&d(G`m zrGn=IHS?DY4Eqt~i_7;(ivXotzC_dLW0?+v>^Q(piQy&^Z13@ajfvPGQx;G3ResTp z8!ni@br9obd~gSk_d21mpwpHxQ@Be8$dKoEoYHUSaxQjXh2cTT%b!*b^!RYH5VPwj zOEmew`UtaV=qh4Kau2tmzZSI)gea<;r6;A;cK6rsXb`rJAZ9Yz}W z`N&+YH8c}rjOkVY-Sv0c;fy4`# zvkB?KM+%;gVu7wZPcl=WOT>LX9s~B{W(>V5f=}jLc_2Kk;^1B5oCU)v!#Qh*1i3gAj#1{ z-J;Rfa5GmYs$eo@RacUs$JqCcG*yoFBSMKYB0w!k2;}Uu1HU8Y>rt=Q)rK{f!=rt4 z>w^eN+KCq3)Wq}6kO-|yZ){~Lp>X0N3GrmnCV#Lb>}&k02EgUmi?vQ|))fdo7RA_w zReo3m`QPdgK4@!8&0Y>*3IQM4Gr-`4qnq0RU!yBRRTjbXc1#v>QqY_6@^TfF#>QLh znmKsMebaF0lKzfS`kp0JZ!FX@7<0{sD8%uVOZ9~E$V07fh%w}9d>W)TKjQ{vGtV2) zT_Z3Pglwe@-Zk#vz|RrfPTXvA5W~Fezr=m|IOUAU)3N);SM)$Mfb1W=sL#J_;NXS= zYJaj?AofGV&2l2uNX90C@C2}QgwQ&)$7cJz=}xqoTg)yN+*Wk2z3%~(FnXOHd;;rv zGI};y+MH!Blrhrr<(T!`MGLYbi)he=C_C*F zmCJ+n<2(?~X<(YxY3P~t>U5C+J{3HHI0jqOWEOCt4Fa_>ZBb?UTYa>AbNWzx{)7i4 z#B3U){gu?A9zfd78dG>)B#iA8&exdDJ)0Ts&@c3_AG= zdZui4bba!>ElaM9P>cB2H{u&zVP;Iy>tSmwEuebONqP*L;e>te#@;Fl_jbyud59PIIteZU$iREM6I6q`t z@=%LDq9R|P7fL{pXLY8$ijZK~I(EG+PFK-#>ZA7&ypdmFmf=K8>dnMb!s!X?)h4x} zA9Y?rjWCCs+uZ!Tu`W!1iTEZ`xoFS8D3vK7MSiDZ@1|#^XN7;v#PIzIC{CtU@W&uqYQav4nPiy!(X{NB2@({Cr7=%&)kA&fc5^z2+cYcYzH zMQd6+gURk>3^_{aWhzD{qQ(ANs-e5m6B=<#YpXf)J;PrEec3v$Em%z{-He21Lymnh zHjN)Y%{W~V5#~z1+KH`I-KtbvqeOykK(j?f#AU~E{{5*xs#dR2e9lf{Rj0aG-%hv<< zU&Fmu=DXyew}bljz9S-&D<-x>$2g(@*IsXMlV942U&GSZTp#so+o$+rk2;#iN+cd$ zgwM00JrQyyU6+*4D*3-k7XiMLTV}Llvvws+Qd6fX5z8qz#c2U3qzr=-Kg_G)y%11+ z|D?6NmP4tW0bEf~CHuLwXeGAvQPC>zH5}v$Q|D{6IR1oAmg!59Ii|`m$G!6Saa3g| z8PEMU-v|cR`lpZdh6bZDODgh5e>-vU1rA(cTO6+@8PRV^Gt(h%&-wU!$dPKqN1${bF(XGoZddj6jd(U1&gGAwKi;7{qBk*eo)%KlM zlqw>`ryt@UzixHIpZVzO2OSjzr{n+nY8Q#)u>6>uOE|=1g@%88{Hbt<^=d|5cQIMa zKpn_Jm|v<6l*Te*76x%H?YS}tD9pb;;2fSjI>t*_4=^-C^FTR~C@qdZeXxMNQgQWxu)Q9PxRH7&ae z69a^^iZ*kn%kpyC%ou@T>`aC~)y9KeTtfxVs zc>f?nZiDQ@(XRpbepwGscYidNpTO6Ahx-t8?25I0$Y=d|&(XV@&sX*645Fl-(Z^)a zGv9Owr$Yb8HkevFjU#SNu{#;`6IS4Ix~(1bE#MG+-^DS^!TeMbN*1Z6m;Y6B-#%8Z zG_047-D-})!v7U}WFy1gLn$S>x!F8~nCfF}-Yq%o_<&0+V#%^Utm|pQC``lsMsr+9IJ(O4vO}dBW>9wq%h1F?Qqe-r9ySY^qSwtsz#in( zCPguj*kG-ydLb(q6MpTQK&9PD&}xop^6bu%!duw~QG`&&qokTx0V?=joM+k_Hx}KN zPeEi!PVkDyXmgbsA!7BePSAQ!=0~<4KaT2-tj2WpZY#%F{=E_&z165Un^wpA<>ppInY%J?=g^>=241#=7`IBGS{nH ze7oQz9=osyu*QYYS{ou#wyEWPB*=NMGtO?C6Q(w5nXrT zpY9rTi#7_fBYB@og*saxSPXl)nKNN(g7k?eTnASMu0E2v1(`!>6Qi4&LaeF+nFUF# z^UY#E&T=~zvN_9Hy+23b$XMBO@~q}H7JnIQ0E!Iv$)ulEw9v&COEx(T# zGoGAIq_WZRSeYZLN^J+A$*p!by{AZIi{vjOgfkR~t?ZQWig3*IW(PMbtyH?EF)9jp zM#B(DwI`}#%G&p@YbgTm?raUs`Sk@_c!oL51(eISKULlsE${!{4IcbHvFwKi^K?4S zcRzDcM}p{iuw2{VEhjB)jBppCgntcN|1}u8iZ7d(Bj_sSR$z~7c&T9)TuU5 zY{*^2K&{VssRH7@jfkBeS&NVAT#pEQd=XfQ!|C^G=iJJ)Y!@xpBF!rIn@>w_u(!5y_kw}O#+;rq z9Wk^p9nf9&bE&vCH*UZnPz$|vK!$*TzlYn)xK|&ol2OsolCL zE(`GfJ(NOe-ydl*wc%sT_rg_WLuurJ6m&Mg@#};N3u;Cs=6`GzM-FcB=M<{oAq3ZI zP#TjGOf-XvHp9X#M@%a}xfkmn8mm(JGeYJQl!QE)#3yte_o#;onNR#?Ja3p%IoNr0 zzKW|bPj$n0L58k=LGY9{8GR*?pZnMf)t=$Y zfxJoOHD^ib^|a2an54tH6QDgf^L-4;;Bx59EDNtcWz;0}fWzUE&0_yy?Fc`{8O-hT z{b4hDyDYc*I#YXNJK#tWU6|LrJpjd|`t11e5ch(8_smgi#3*+>zlGILdCnf?(U)L6 zayuf{pj($uFqHCb1+(L*%9WI_GN4SSF?;TsgcATcRgn~K63>U7~!x^!Qmf$BkBLWBv`JWP>mc1*=*1ZnK){C<hej}`I#Uwg|v)3G`E4*0`k;9voXGX ze>N{9^wh8pn5XmKi^XW8?yZ;t|A6yRcflT(HBt}XA_A_#oTscpw_2t%*?N205hKsC zas^`-#8U{^uQA%yZ*Y|RxWnHZ$FF!d{#11Z6{w-gjY@o~_k3#e1!~0ta3QNEL1Gjz zC2SMbf2I0r73;y2aTuEZFeoN@atZPAeJ$!%^ym_lu8|THpX3y@k-ie8G;GrQ%r>lX zr4>dQtiVvt>fDY*n_=*L1Ro3byr3&9c(WzVLf50xpV)YCElXkOiYEO|TCZS>kyQ>}_=M_i@n)GjM#$ zpGv;_U_ySLx9V?0UpubOQ_PJ-`a1^whq(zMzZ54{vN?esRP?eGuW!!1wvL?jHAm60 zlO$ktXiV;kt!ozmCW^W-z(^GRMO z0|;O`w%qe6GiCT=59BwxD1UbL*dzO<=)pIYw(D=lmeG6j<&ZxivO+yk#f>d@3G&>q zYGku5$p!Q!>M&-60!}9?|DTLpTk#(m`Aa(LwCA?yA zN}zWfzclHW>DAkVV^H?S{v)hp)%M*MfauGd?Z8a#WE4I!AP00v|s&20sr;9=ijHgM??1I-a{sN9kfUCwvkx{ zw`3ghg;`e3F%c*Ai+L=ichW@Hk9${{npD!tLZ`3o=S&EjzWuDb{fOYh8m)BkmTaV6MAqD^$VfAYL zNjz!m&2+tvVik0ymJM7$x+M78&2LC_ zyTjEI4d3MoNB2DB+cje;KPOuu9~HY(-vH*_7$RcULBqLUJ`W%J5-J~8e5f2v#zxE5eo&qxhqV~ z`{~+A9FnIYWb->af%?1%(m3NuK}DEkj>AGv_zR)fYFE)@l_dH4>T511vCt|-boi}? zcL7u8oCb5JbAn)Ww735<3BGK?XcJ3)jYdIc%Ppj*N7*Md#|zW4)W2ECT%yfdonq*u zy3d(PApEy>)b))vh2q_{ia->SqH3+xm9LeXgDpKU;-%c?rK4{L|3xY}q>?*1^g5l) zHWpN=!B;`tdfQ2EaK1LW{6e#%?+spg7Ud6;d{^l!mT0xDTLDX+)^JIq>eI4n=wT|Y zXgHY|rR3%vGZls!d-Vhs3azE<_v%?df z>7soaH?pP;!sz#cS-F~`kby71?F;V#?;&rW1~{537$h560b*_MpuexkQ`ZH}XALB+ zXm4Rf<6Ixq8YEW6nom~lYw&$qahYZi3${Uy{At9DF1OlSPkswck(tpk6)8dgb8l(5 zEU2c&K1{1@+0&uC1J;_KPo=Jbp&-isi?fzBGY1Xo^6Le&k$PES_3?AMt@Rh9{=StS zr?cHhF6%7;9D!&>Qmmey_uY^ecJx^JmwyF(suDAyl=%y{i(~+W4GGX^bmy=+Mw-w4 zlW7Xp03bJR$=(0RK+bMe#>()S4422Ks8ZSeog`2**2Ka2sto*;oKEw;**ZBm`NF(f z(rDBA(Lfx8c=JshWLpMmyeee?Hon;I;s=}qC zqa%@cmP@C}6b>=Wr8zReM8}Cy_SfBLx_(Hh`CgFZNoXq%prp%6Km_YNHcQaQHYE|g zy%!+~>%y;3ovXz6;V|D)0C zaX5)s!^|k0gQ9aUDQNXt{e7NAX>KWN*6U13wLfJ_)#+&E;Y#Eg!mZDR>>X*vFKnP; z80Tsv@eF_dZqN`Kmz$@l%{Z^o_LJzn06B9IyrdK!E&D9B@#T947wXOuKQRoNtz6q^ zr|N~S-v}Dcz@`<*jOPUlVNb0)d5s++eYc|JZ+EaQ_P#Lu@1Y0uEJcPhC<1JlM``g# z`;?f^uOAlgXEx*H{?Ol_6Q^xu<ilI%iX~oo=*#FybNSm>IW)Zjp^%o$V%QdPT(< zyV5i$5i_eEmC5i8N-862r4$KlC>W@f(dcnftwtK5`E(?N#<|34eaZ)>f2B`z4GFho zy+T4iD92Zg%uI)}eHfHqfiph?Oy7T%%+oLm>#m-0r$_;GGgfW;b~M`~9ajCM7~^he zeJVXeR_9LCMi*z%n?S{)>#@_n(^drN-q})sa(hy8u=GlsOo`m2{%RkQ5^q^DVpn|; zA&$4TqtuoM$Fpww2i2|;j~GF-76B%?yq66uAP?wO?N=;W>1xkG5|t9K2H2nVl0>tK zUbuLg;&qhYLm{!FEN^gZ;dg?-g$5SIYCWL-S-CjGh7e6Vu!n!DGWXZ^qpWg$btK1^L^aSFMRI*hyX%ABg(AiVx zE~|KQyndrHxGL8-ebKRs_PRa^)UdeyEN*T1^;p|Dxu~?(dQz(Lx>+eEU|SfIY73w+ zy|g4|+W!Rde&a1ZQuiV!ZQG(|P4ng#`BY#kh1Lw2S<~`%68b)C0fPU+6Ov;pRi#dh zuw}XGX}pLAGjwfLRp%XXlVT?@=j0Fl%{Cnas`A>BO}j`M5^mBo-&HpO?;>4ZgAixi z4ldl|mJ;DOE-{ox?I7&s;M*9RAA+JU3G-E!bvjn+ zVJAh2>%(dgYo8q`xbXf5WvD=@xJ5%5t*fykRK&@|E=ve_-l3y-ue!AHU(~^tf^qx@ zj{0^hOR_mN`=wLl#KkoZ#q!UyB_1cD9XN5g^FQ4G=?qUGI>|&#ag<`O@I%xEoK)p$ zQLR1PqMKat%5%K~a4kM=z_MuKV#tt0lcbRHs%)#wlEO%D`%Yr~+oLPC!2FLUCdAP?_+K^K z!&u4GwH3(}R+XQB)s%Mp3v9ffHud$840^?4ef+tuA4iz}9$&vHYM}wYX`0{*R-T)B zNOz5i=7OrEc7LSypviN+z0zC7a_W^~V?`@?lO48UJ|uzEE6ox%TXvJeXEA;OfmjiD zkUg1;#Hts;$3>j;C_YWe~$DXOBWMN4O=$qdpI9BFY}Bdl8;-~{_m(EOqXj{yX%&u zKMSL;8V#6I0!JoPlE$W8Azr6PuY2I&S5hj%`}Rb{=ry#@PnSsj@g5}GSqByx=P?sz z3%Lg#th=YZ-Z=fg>5@@^Ehhf4cHeIc4Ls+9xer*Ai}SB}3BmEmFNO;eSqm$+*B(m# zt?TAOJlB@oM+Z5*FD`?R5*hxBu|WG#$AQt?;v>=oQ2urLm7(Da@XoYVXv*Y>YXiK< zImU2$fw{hPTtd0joi)(Ts%kF3;g4k_LJFj;v8M%Mgyb9;(K_!_>rZ!ZvsoBDVmu@v zr`ij`lOJ{sI%RmtZ^pm6Fz!wQ;_mK6esZ!dx9z_s?H&!io+S>B;$)b@7o9#4 ziX&m7iz7irs(Kah2XFE}o)gR>KiDVM4E;YItEWs(tY>S2jVU{g;MZECmJ;^!zpmqo z!w8mSa3ZR%iL?8!n^Z6e2*a-Y!!P~Qn@$27Y{UOL2TCNA{eRDEfHoETU)1UB58l*& zejHX(@c+4qVf;DK+b$Lji+4sn54Ysp7c-PsD=d&A#i7%7B@%ew-rqyY zL+k88>R&6j%G_(BlxkL9cKL(-YH|7PJ#&!A1#{|{59j9JT3Y{MdY=a_*zjDQ3g*^t zOI$Q8Edlu*Djm_C$j}h3Smh$&5n zIjZhW&5()Y;__VG*KI=~9)C%d$JvLaTF$$FMR>cUv(e%jf)!y_l%&v&n?n z2GAN0)56DY{Y}FEWrcIibDw4))X0J0ACjr%e@Ld0qO4qD_%>1xn1ge4wrkQi6FnV% z)fmbu)2SQKeqtxFMHgGDWmbCl+74Eg|2^Qf>J65$Wb&*MRKItW*H`a(UzN+{07Oa2 zm>KoV{bwwusC6A=wYV&?-XK?gNbf~=Sd+0Mg;JE^HhOY^w>zPtZ=sTa)?i~rLAja6 z@Ki?;l0n{by-04D*3W}R-dMuPT@x;o%wpOj2`d2+5NBBZQ2f`MG0vxxcZpqWT~gF^ zYBa_9RayJ`dUcVb&Y$1h$`PE&tePTSzdK*-W!pV{3%ccM!t-U#9w^tN`S%8;psPZg zTm*^oX?2?#qIg&N|3-8_T=gIY891umFHPu)Uor8#4Rb~s-lI2X{4N^oI=Egx+A&}B>Lm5cJz=C>iNVJD zn_2X-9!AFt8!9qj#mtO162C9sk&En^Nb*gR+(s-B1n`u=S0IJE>d87u^p| zG1|IgrD3;#=ok^-usXEeYr3!36gnV|c3%x%FQhBhxL>G(h_zf%*#B|r+?}IGH3ed{ zKmu13(M6~EqWf2Jk9997zkQW&YmB5@i}oWEa6|)HexD|lq2=mlCrP(A0O#SnKnh7x zU|OrUsk>+{>A~v`+5N^bMVAK{jw_Iq)7XykAhQ8c(4Hyn(rXXx^R%g@`za%Qu>YUA z4`MSfzXb7ISGzs4qjtw-0VXPvzm3u#%!?)A*#0J1;&E7f9z9@6;49^d0KCD0-s%YB zxdaWLZBvVd95-n>yHn~j3E zSw!K-w|^ee>i@@r&GKV!w*Rk5(9d)I^8u(7z~qC7e-J6SxK{3u#S?8*svO^?7|NrH z<2l&M9i!fe;;pRE>s3Gw!+5KOC7K#4D*WRwHVNhj@IMQp;E94>WGmZtN`5>2u;2WV z9z||*rW58D5id90$d=A)#0fgdz>+1x^PyySlMkcJaF+?$rwaS!DNo~DqI-L+3AUr@ zfGrQni`_m_$Zx1O{!DSwgGZ}fte#nqZz=0Sk3#xa;r9;hwVi~VrgI^~cNOD&*K5$a zybmlufn$@b-`clkE{pjO&#hWKMf2enM}gXS99jW~;-0Up{Pr)$il6SIS8H~!H69_D zE*SZFFO09ppa8y|!vsDvaEj;s$)4{={dA|@R=8S+b3=&d?n7CV_B#%?xG@uRp6{^r zi}T!E!8o?Y>u-NVXj{GQxnN|Z`0p1{Mi zj~pV2l@BXvSoPLs%I^rp{{RZ>tZr*sw$4`X>WKK^dL?BXm6#idhbqDq1X;ZJ;}Nr( z5h9Y+-!r|FMtsqavbjNU5+vWZu#oX|sZ4ay^@nuAKh-*}-(qtkjl`RzI%dQNBo*!| z^Fym|FWI>!l;1_5s?rKZz`A6tI`Ta}s46AZ(}VGGt5yC*#3xG@ZjzkEvnDUb^P*Em zg|voR|Do~kNk^Re`Bu2(FEYFP?|ZZMieyuCZE?d>YevR9-YiX6V$qH`{W|Js^vF7P zKKEkxV@!X?LyU~&V>WKjNzh@T;(iU}RzRbm@%=rRG&5~CyuV+ z$bCt*WvdCwjsmt0QVe%<5DZ(V7prSY>}|%u1ml_uS$JkexC)?i9O79d4dF?952(lR zX7|!;b1h{0v+;7#+!Zez$>@oxtj<*?NW>Nz>qff#jcMI#`uR_f(B&dTKR5i*3Ud_5;trUk_(x9;+^s|3WYYUcq5N=OS1M9YXGnfS!jkmx z9eW1aIqF^2Y$;vtco7SYCY zkvshApxzQ|c5lY%M8F>NAD$Q5cd7~=Em?5|MidwAM7{&uD%^@{Mh5jAd5q`P73kE3X!5f#^oe>#?;8;F|v2uF!v0eJ|E%fgvzRJ$ucFrFeO!F zw?ZqQQ?#5n9|z44Hquz~PC4Q6unpRYYre|Yc+iw!qnhE{S)D8I-WE<&_F0<_3~FtS zld$-WGQj@THVzHzqxGsBapg4{_CL$S24y&6$9D9P&3iJCsGnichA+MLrbrM95)c+E zVxQTrR}R~(%^a=m=W}p!3`u827A&()u|6yz{3~i2o5*gTu!s4}94O6o=%=0Fi+ym& zOYK|k$<1Z4e%(zK%2k1rk`3J)2FKk1Vynqkl7S}#oyhIZKZ6X$D!W=%WSCj|HBH;H zB6W1#dDhI}2a?u?41={Y(Sfig0X8kY0Q~1hDFrq0z!{v9-CS10b6YAcjW$@5o_uZk43Lf5-fo4)VP^ID%scXqR$6|9*`GR=hYZT^QAH07pdkxePWfp&6KqveZ-M6 zoOgKR+pv;IM8bW!CNaKZ4i2za9i}9ftU=C;1m_pu<&DgD^QWLQss}MFjIW6xVa-LL zZnBYpKL)*6(9?^m>_4)xz*oXIy?5E5`wO;K>pzp%RACM8hNmeGi-8;(Q}LCheV=i& z@L1G=!=GDy)`JirQSZ#X$fgaM!%bM;@B(k1bg+XPjv9eJecSvOS}tQh)A+oU%ju!C zl3owvgUa?DqAteKjh66`I=|MN_LsWzny95C{mVVzfQB=Y3s*MkIfR&W4J=sU#$$2f zhq61Q$g-1RIfjjV`CbCsGL{aA3)Xn&%~6O{WyT8oK$6c! zE%;Y$1-IVr8>mMhv09AzTlXRYvrpZI_s6cXMBe?;v~0`>`}buA=P^e%Chst-4zPZs zAaJ`}6-35V4GKd5FLDL4yNISsGBugykNZ%j>1yiLLH6arE*99wF=;nPxP2z8RG??1 zD5Z>Dg?giGWx3D&ud1LwfH)Q#g3Xglo~3yEhoyvG7M0tlwsz2Vz3KT5<%e}K$xc{f z4N<>$zB7@rH7H%hIDe{?%UbN^&MZmhUMJ=pBUD@(y>`dA^aq)P&yW7+&O>tYEYJ^W z;@xO_{Wn`L7;8pH{T%>fI9q}Xe@eUde$ zgrepW5@J*|MM&7vG!r4CCEi0}6`9Ts*sy|0*D&DV?c>Oq{ny$jVPx74<+wuJQWEjI36 z9V|WO@qyK$lrR+$7NisO{S~cF_hmO}-Z1?4^>O${p*hHNn%Smh2J>!o`;Fj5k^oab zHn%sJ=I`l$zRql}Ch~GL#Kpp#zexw`0L(K}U8F;N0afS3_IYDR)qlsn{po4iWL8&? z4@I|7p2XLE_4=uN*v3aMs*s{%duku%RJs%Mykx7Mrp);jJfTOx=4!U5`B;eq;vu;u z{Tf?-6|BNGWCfYKx>e@ZzKClaZ+@$76dI&;R8#gr6+z)a*LM}$ak5ln+!)H7jpG>I(#zW3z(tgys>-CXHw6Uh( z9&EGT3|32S8Fl32)^B%C^4$)jlpc0aWaG)3-?#D9fc_vFGOJq?X9%VEzu7!HnGA(M z(`uRs_pi#7zVoC8*d`osRk3$?} ziZuxKw4h6I`Fo|vyN9s)+5Nl_tKe3&SA>lCeett%4<3aXV&AwBLyJeJlYNZe0pkc_ z@o!U{h@X}yMV1yFT;86z!8JBa=Z}S=VtBn^`h0&ILBG1hqU&WP#$b+a;Vr%bzUEG! z^445C9e(!an=W+nYFZBp-#?GP52!e?FFl6aGX{?UFfymYg?S~6W--PgrUvN_08LIIfhF_9DV ze&B|t_9bRgS;fHnd}6S-N%Yns0ULKch7vvcXAPXt+THOk-(vV`XV*1m!EwynhW&*O6+!xbE3p zt@trR|JGWNN4ZpbD3AK!ly+&78@umt zfW7lsm==C~oRQRaJv2c8c@jlWbwDh%jBNGgyDr6F0$7F|;xp2;xg)_I6Mb)x_Rk(M zKg$oLi9N*MJE^^#Uuh16sjfyZT3uuz*`Yq`_J_GV+52we=a5|0$jNP&4MF9Zete`s zrI6Sdrkjiwy<7vbK6zd%=UIDF%A6JasZ?o36>Vyrtt1<9V$4C9^ooj@K6$*$`0cGZ z`;DXFT{?>cXJ#V7mgL;F{B`q0vxv%@en#YB}9Sm=5G)l6VG7(Pn@G@{8E2yJnw--?uue z;#tUku3pO%o3b?nNkX|~#dsxSxy`5p}B)H zdG(mjj_EI7zO=1$z8xCsJ@Izx*U>!^`Y6)okF|GlluYMl-VM1r&OaHQ3FR3x8gI2x zQJ^b81;(tZ>8JS$av-ILW0<&+5J8|vJp6a6K$*pcxPnCYE|!I^nfL)L$c z;Jn<$=>wZ$+sm^+-7huG3Pj~xL8{p`tIyQpP8GMM$Sn}zvbvm_O{(oD(OqK&`ar!% zJ7x@2@iNjRHE zl~v+vJ=dHxNt2+-bIYvg*l8tT~%;UBs?z<`EzlMP<&o8CTZ?+GMf zB}o8VPbG-G{>;^-7KrFD75Bie7Txcni1 zk-Uo^w(!rMiKt{^l7j(acde!IujhxO9W;IgKi%K=;Aa)>G~4;dNS9j~k3h4c>j`T0#&DL2a9hL%3) zV)86wPaNu&90k>*W8XX%FVO$-}lh{WKUzF1JuJiK*IJKwJlDla4D%PQ!)N%)&=6Oo(iDca(32 zwW_r~pz3*}fkjN(4JQ|mi{?kQ@_O}7JDpTg7fOt7%g-miK4lPM87WTr#b6)~XRT^t zVtsvC0tmJX^Q76NloB|mhW}(_3Z)l5%ygNYULIRe$Jd`XFIUPwR&JDzrkf`Cr8u1s zrspdQ|LORj2aE!g*#TEaS5AnSmNXzD>?)mib*N$swR2`b8ed~?N6QE$5Bf@IHfs6h z!%nJ5(7u1U;(ZnyR$5|!b_AHOEi|LAO9CzK3}(Bx6Y0l zqvj;?SIN&+wNUA74e(|rb`^&C@giyA&E6+r{c1jJY zeb08l|9=&5@En6HXgzVE`h#@ei5;ipF>Sm5?bQEjXCk0_LE2Zdu!=E*u4o_G9XDv1 oLL&{aCDs|N5Q`GdwRemQ>AWO~0YVPTiU`HQ&e691oPX;70L_cB6aWAK literal 0 HcmV?d00001 diff --git a/assets/img/spring/mapped-superclass.png b/assets/img/spring/mapped-superclass.png new file mode 100644 index 0000000000000000000000000000000000000000..04facbf575ca61a24a0117e7c5772bf341c85d23 GIT binary patch literal 129123 zcma&NWl&r}w}y)acbDK6+}#Q87F>cuaQ7iWgS)#2cYF(*-()(S{icnLLMMEY=hJu1Zlb4gyfP#YAc;9dl;onObu%GMRKj7RX z<+Tvs<&S9b^L?MlU0T;&)5*%+%hc5p%G%M%!IH(z+||<3(apxm9R%AW`d*3aU!~8k zmZt8uPL32>whoq1S~ec8ZWg9K6zl>NDo&o34rZ3F6rAjwT<-;f?=KE^3N_^moUiUs zP!v$|QW9F;*=IRkt$2fv4`N)69f#R|64GZMq|KdX;ry8EsfjzxK3_Ku67r<}sfnN^ z{=AT0D`EyhBe^4^&ZmN*x`Ss7Lfr717BH{^1fJ#ks&<7Q0CEpS$1+wkysUsZ0f#wW zR?=^;5Hvhpmq9!x$VZ(2(>$E31PbQ=?Kbk`kZf@LpStAiornMYS2tAkeWd?abw273 zyqD7di4FVz{}*)^v8|@E1;qA$M*LTL%;n#l*?>!B^G+HS#(1T~`Up7yt|5vLU8uSD z{+Z>X%O6}e(*L8-RQ_Tby8o(_p!{UV5x;~+GIbRM4@3IZ{VXB!zs)|{&QZhvb}-P@ z-Y;Y}-|=M?oDos~@^8@hSTN<-h_*j|e*7R~-V}%4fEix>=Y}7qz&=Fn(OJ$MbqFrK z7uGB%N-zG;)9U)o&%WwpX-v4*8lCG7OqgL8Iezrq!=2|G^Lhf5ke? z7L=5vq^9EQYsi08oZCN7o13Ve-ng#>`otnP#mfeXevhTf)b_$)M zht+620>&2u$5|Rh&CWzV+hk17eK9jlLeO7<vSbW@-a$wz zW&AOC7JAKV))?NF9&66ASgP1^mmdim388~;h@+s+f$3vas5Di^p9%wIw(&2_nq}Nk zQk=8jqs7o%hoX@To9@_UaC}kFhK??O_ey`FH*_gC#vW^^Kkv^giQF=hG^Nk}1*9Eo zi7z~RQ@nQXux#ExMyqJ4f8^BiKY(E;zil+&_O5l?os;x+@(YmThBsUu1PcoTYagsp zS3IfNep}7HJp7F@^#3dHa{C8N^f>pCn_>p;hbktV4X#Qx@U@qFVkZ)hsI#eB_E!bgPh<1$+~I}h zd@JCwyg%b&X0{(5>uFV*ovU%zD9&z(NK@lyscxe2Rj=X97}L{TdM>W2`;CaHLB;g4 z1^(H|k+duzWwR$&DRt;7gZ9Pm3xxxTV&n+;le$WxR>M(urcM19xvCeM>Z7+P@QwI7 z<5-fyS02+VIU$L{jC-dNUf%Kk!hDqM$ErLd{Kf=7miU(7bN&^SWBZC>Ugf1CEB**H z&lJMTi^SJ$X_)}1uUFvPSnCzf??@w7jq2zaLW`39E%CW=?#zfVYWNB^omB+H$8-G+ zG%&&FFfWEmzI&uhrSSyr+dBxi^P&5D)|RObrc5ye%#KBpLbZ8ba09XvyQf4hN`VtE z(iKvBv$4j^8qz(F-zD@-+hdJIWf0_2#Gf;eOCpXeE#$o1<3}xBSg={-6FtSltqX0q zf-z@T)VZ~_o~n!e88C;`u8Y&5*hu!!&>3hnLfBfJKVpBPj|f(5AD|TrNggQ?T24rl zScq?nRNBWK*DV)mgQLVuCIzn?|5o7Sjpg{Nhc7BBb9mA5M+3hb_&mNVx%xHIU1g+y zPJ~WrnHa|hKNJabYzWSAkrNg;FbUKReVM!^2Wz856g<~|3cb-!Yzci24W@*biF~*pd{^jBYqF#gN!x zM_^))yQqa7N$>8$_A4YR=*yYUAQr>^$f7%kH>DRu@4vl*Nt$Mg?xTp0RgPCqiZymk znSb00eF?&+KA?|?*CuQvrThXzYQZrp@Fw}Z z(_nk^LU>M{qFGXRf0AdLn(K0GxX9BT&E zuGA-b)W*-|aB#*6jgq?W6<_YS*HjYgXcK8z=IFDgwu|Zd}H^4p`)fLAkIhtGhmBlznf z]kDCBqynfa>XD3U?PpNq@swdLF1nvfF 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 K3e|FEq5ltd*v8WU literal 0 HcmV?d00001 diff --git a/assets/img/spring/order-column.png b/assets/img/spring/order-column.png new file mode 100644 index 0000000000000000000000000000000000000000..6eca471904e5c32d9dad1f6845c4271baa7fa6d9 GIT binary patch literal 102368 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Ïs0BAHzVhdcV|jG-BfPGJnhwHU-5@>HZO_PavWbqZ z#OsS}aXyE&I=1~l(6LnW(*gR3t|SVp@I_MH^Cw-`JSE-VwdKW2yp!yxAfVFV=4pce zEb+_uS1d}p`sRs!tfeegf-W%xv$N81L?xVf3>uDRK6+Uj0}PmqDZe;qSib;9T8mnU z7s9LSacBH65FlTs%wsjlvN5U>FZqG2tZX{&mi}ei=18S{fg31+uFPy?A;!n-9Uz3Y z^~v2cpR1+MtgsRsSXo4=(^;FxzCA0sj5q%!$}5gdwhd}n*}-u% zTccYr@T&4Afp{axJlW(AfWR{0(!CceYb+(2qaZNFYMJ!nO5Xd25iwctZ!>>~xaqVv5*($UM85uF)I3Rx*kao!cZ3I69e`>Zv3}ag%JoZNHR^h(T zt@04cVL1I7{Vn)*P9le%Z%h*&7Mbjn;QE@VPQ+|dSIPkI9fUmpOA6NB1Dh7*?nx>j zG>eLNGjlNRfyhHtx5!g5U20-b9IK^{_6vX00P{}qeUF6TDW~Ux1;ovRif2{oPzQJa z<~kEPVjc1gUGR+mr(`fL>thnZtZ-j%yijPi-VNPv?pP1e-(zn6V+knUaqV9mn-GY! zbKYVWT?nWAS<+l0JCzA4C;6;{At9zj+Q)g!ubeS+@7GjiKb^|q9a5{QP{y4&6xp4F zkXV_zqR#6k#0^Mf;I?hW*oej$g`|Zb3beVTr zIF$(;8SLcQ<5EP7>(o1&vU!#*7lSHvBs2Gj6QyR&!SU8B-l-a)Q*EdITi@JQ9u|AQ zpWPENt)-hZ=Z3lbu6c>>o&2-%5DsHog*-HG&9Zc+Djk4Xt+BxwIXqKF?6)e%bE282 zUfqGB57>Aq4(Fl!5#l0JQ$J~>p6;+6lm=u|=HQh+jZyiohys)X#6c;DN+VBI^Dmrn7FwKUy^GgHjPtlHW zrkY2Dceq$-%kOPbdQjQ;D{ocY6m1uu>8q1JF#^l~$~m&_lIx2FzARrngA zUr%zy<@K}8BlDnwoz54~u0zi2Q+4|hxSQ{`oelz80cJk;OGv#ouiBL7uDBP=Y(e&4 zJs*a>5+`=5W>o>b?JN1lLoe;yThAub+?Ph*b#w!QtnQ|*L9OS2-3>|qS(e(%;kNqP z>k}dIZ8u))PQRX6y57w=hD$eldA*t*6rZymQu+4@7L(1z_$&I)H|5;Z(KK&A`>I_+ zl}efL*3;Ix(HDm;WWxOq@ut&;;SHlau~R;Klr?@WZLr%H&=Xn+M|8&X!72B7C(P)k zHw}u1ipf$D`T(2Peh*&8>V_~lostlaXrzPa0UI!W0&b`WI!Xe&y za`P4iZgi-lfYDa|4d1Ml_~_V`NYcFl!4zVDdkYg=ZRUs&BL>)?v}AOE&?FJH(E z(uVV#+lKFJ3?f;V)mD!UHJ#s!z6!rBTNv~kd^_9L5#(CsU`~r|Crq@)NRyQ7-j-G5 zfX#wcI8Zo_FYi1VF_CEYS&-E1uS78P@8^+?t#-fP8W8|b=wk81IbH952$jcPpQd}! zN%6Rl(*#0S`xA))PZ4MEYcgHFvGa~0 zvnl;u=}5y)vHe>CX@~Ks5Z`Qf7GJuRhavOTn)*!nR$&ciVo#kV+xoA+7RIzY9V7Al z2aco3&YGkC1Le9?QQLFzt0z?=D#Hw3!ihasw5wXS;?4qw9wRbaohOe0zezSYt-LL- zbfZhd6CXrGH$;Yu%4?365SoK4bpK_6CxilL*VS&Wi;l`mYnjEf5Q0&)A~)j2Ll zhe~=I9K)SUrtjX`pKI|tDjm#wR8-0m{x5->WFP@USee8Wr0_m|=gQz=*<$f~V~UgD zAGiNPM@4`|WO43FvCaR*86WGyPySQtTZ{jn1hPmUb@e~}Oq!wrZ+b4#jbP4gy3)@# zfII0Nk-Pg(UFXf~qC74K<1&ZmMXLTGo;P}WC?4NVQt^xT;k9|9v@ZKhV(Mp$hUZcL zWuV?HcgR2BDX2$Qdj3I`TVkI?wMew_+eCulZbwfIyqMigpSByAO)r5n!*|xFD^T5* z`u$GV`WIs~63w1J0?#)~bohST98~}Z;AZ@Jz+^*6cfKHAGpcB}Th;lj-v4sITausr z|3hFoO#0p}=mj-5zF-8a9^HYg>)O|4Z2Lbwd$hi^|DE=&^Be#5lr!YyQ=?aOXonlu z8EQA`t1{UQIalqS*rMZbuB~C}r7O7{e*rA4-<&INuijq=r8_!G=Oyb;p-t*}x6h4l zh(MvozN76^)@aDu5?z+cLa2?g9^zJbPdbJ`vn{o#b_EAB+y=@`PN>`Idl1 zZ%l)`?@X|);n+kuazA?A3O`5PAEo{U2SL}NAsBRyKNz2J!KJT!%Q}G$U%&j17J%gJ zuH4vm?0pO$$j4CIUsY~9`DweX^<+J}NAMDOH-pwZzkPLlMt|3YfY5Bq<)<^LndaY* zY}E5aA)--lP<;cuxm0?ZygWa_TMX!BL3`nn6&)s-^_PV=k!X0^&7UxO!M;%j5W<2f zT{@eZQIOOHmr>^{hDa(Q$+sy^z8>DV7hG8j+nF$jvdb-yB|={9VRi@eHjCP+(?+8? ze=~?MZe>?t3#mh)tA%4^=o6I$?9;DsqdMLw)cW+>&Bqs@Y7>I9 z*P6bQ0~U@+9P-H#_7V1 zh%>R+YC&5P+A6S(#^X4#ENof3g4dF2WAE@RV%F5oyXXEsjDY2PGwrKV71*RT4iGP` z4nHTLzYkRV={Y<(dkFs*a#aI_R&A0Y1HJe#V^H-NXRG5>N%oP*i7_i+6@X(F z&snoArFIE0pHMCOex#I#8m-1_G z+FT;2j}E@$0yjM_no7d?#43yH{hCcs-zb{TfH@8N05&!|1&#*#Y*M0e!TwOMn}ngp zL{_*aQiWQsrh2q@v_ln3u#I%fMX|4tx9aMqvb8_9yXdNcm#-xrb0Bde?h{wA;-_QdjoF4?|!n+ACfYz^`_PD**v^JTfa0c}c|3^lt@)g@Iuyc%8C~ zTs>~&6k}!bW5BI z33cL?jblxlw$*AXUmlF|3AOy*vg2i8$x@f5y@Z19MdM|&|;=+k~bBa({-wVW? za>ErG7+Atj^wby%eUcDu;DbNe;Y&38DVblum7WqRhOc?Y;^_L-Z2WhkMin;g&nDL9 z7JG)hNr&+)HY$xfX;VT6Q;nbMIvfE9%D zg-4_mk(29Wd|hKThW{;YkH9;3tC1XvjgDJG^ud9W$=lE+NlN~A`#T3@^gUpMje1Ui zw2-xpx!GU@1p`gW$}95RhOPiz^io+-)Z<`RYNH-xjSk3^6bXwco-vumJ&kUaEsr;W zgdic=FktdK&6gG#Y1RZ^=0ztTMvesBD!<;mnD+MB+2z}>#cO+GC6Onyd=0y1Lb{Cs zWQRcRlf}a+WDuy;E<4=LL5X8gPmKm5k=O+usL)m7!Bmt%Pg*yf2nO_W7CH(iH;3Wub__8;4WXl-)z@j@%HVxUb>8<--(Tl zUu58HG3}gie2ZTNERH*LtRp^xEaC!AOjdk=4)JOAOSt-4N^668U45)t~fy3V&(gwib4|El67qKdT_2eHqv`yel;?iIoY_R+d=1H4Sdwl&kuMY1} zVDg^VNq5-yVDomL2cg1D(VIFy@~P;XH+CGeEfIN2G$p;SS~G(klS4I&V(v>FtY!NA zChkesrAPcdB+jov3qK)pR9^sdnmQw`CNbfNaO&OYKoZub4n0P1{NUCWaMd zYXr|>^oD?i+MYH>D_bs$6GyvJp2H7h1FfLE}_M8&uXT6x8AYjL!XeekKx@lQWXEjTGM5MTSDVUn5ZW>TWWRTi4 zj?I;4O&`9-G&Fl}j2VJ3HiQ=TJ&BuIScr}sYa$4o4cZT{rU*S{Y%pyeXKTQ=P=Z0J zpX@A-8U}AW)TI$+T=(j#HeLz(Rp-J;o?`E}x2S??j%VFSd zgoU^=R^8mTaHue$nC{4Wl@6#keATwVWlm;u7DR?u#CByco3x0&A*8a51o3s`yIOiR zTR1dVJB-bjTI#P!Dkp~|c*c?6z&JaNGLF*dCiQ_EnVbJ$O3jW~=p9kC#$RZb2 zUsUhm*`beIBxIph37wmH7ig>qsf};AQw+r{d#0-2m)2R-I6vZsZC64$6rCtHz$17J znICqOX!sc5@o84`*uG2(qL6xP+@0i>({jL8U22YIeg4$=w9Y25p>Oyb%DAjwR_)=- zER2I7eL4`uRP*Ds1*d9GBP{ZzOac0aj@D;n&(;!+S&@7{P^l%NA^Ouwswf(;iBn>* z@FP&5574ZxgpY^}_kJ<#F`@{peFJ8gKb+MhupUfHo)OsJ7(Hnoum~2vP|X2{1$)BD zJmB0WD&o0au`K%8*~9QUB+`nIq8J{lUgDEf&%Gsd{sYBcKsNo<7Xpn!1)R$)hlo=~ zYEGMK^Y&}e;oig73O8|G`v9VAhP) zwzQNblN%QG5&5bwmCgDd!@+=?Mseqmb*W+4#YipgBROnMeb_l44kMM>L$8A znPzLXC|M)Zw)E@F=HFM(q|fE?Xgg(&#dkA6JR*M#D;Is{d8dtAUR-@A5l&7clg`ZB zs<{MiX`xWWOLK_PMP!SVJ7HU@R6~qGP!w76rd@*<;)NzGbsRTXA+Nr}tdXReYcAL` zXM>k0p_2DfUza3Fs%VBSlWZuIoKO#Gr{`2UJ%o`-p0)*ZH8@jCH>%b{!=#!*RZiLj=t6k3?Yc&%B+ zV>VotH-Ut@nK3*C1_rk9oYNpA)xFQ$QiAQVw8zIIS|sQpq&24$Ddbato<+i7ap3$g zUX>a>hM#HcJj^kB49;GHT6)Mb)1U6ppMW#-?YpAMAl7SrM_oUQ^CkF@7~huhCodw+ z8&FM0WMdV<0Ul{I;y2=fik7;>(AI7TW_jZ+dGx1*FY<3PNAxgpj-;psnIY`rxt}(c z1y!o+Y<9Z(>j|Z&6FhFd$nGEK{1%BgWRffXHWD^77&=whYjb4f)K-Wr;6LZ6o?MWV zz;dS=02-e)Lc}HzbxO5QYhkeVtQQ_g+G|{}TObGXpie=nW$l#BZ>ZO9gQz-nn=+qb zs#KBZCt*`Qjb>u|)vUlFmjHQopXfPQA}V1-W5wqRo5AmdXdD3SYI`ZwUfq0 zn1LvBY#59xY&6T9i)qGb+%uLR#3Qo5JJEwU7T^0HC(2QSt`L;5|Bj_nWFGPO_AoJ9 zvH1BFPiI%_13yX(;mRb(OIOYD$yFd_a~GokKr$j2y2EbhX5ZTRGgc%R7@u4B1(1HV z*y^UIBtEHDaI%&Th16$DbuqAC;x4!oG3hZ=RW=3g$@H`|;BouuVq{f&n-xcHW++V7 zNG>g{>3w&rpjFgKbI@%`pvL@Va=s+9yrSfI;s&2?F%iwYMhnooK-hI;k%rZfcTLb| ze7a)RN&$>koDM;<9(q*K!z@L5%LZl}JK+a^d`GC(9>Fh3U@`OafD?ena7;>xNEtGq zC1OK396O?xXOo|ZP4TKO7Z*Eb`0|yo&3NCMGs5BnZ{`ryFD@O-fr`N)kap#5 z-uI1$QoQQmBst7PEklM+vPYjA>8Z6Sx)bR~SxR^Xsx(yX+g*#MvkG|<0fjNo$W#GW z^Bv$-#v*(CV4k9qo+KOk>ZW>uL^EcRR+B$}Oqps3Wv~dfsyb(2ykj`)7pf7>$C^35veF@l^PnWzYB@ z%W8?(mKIvY1Lwuhmj9jzXsD{Qu)1JutBD4BvG}76CMeOuh;e4dJi9QB9Xhk@#jrUP zX)@SNTI`vZGx_yQrs$j`$$9hHI15Bg8)!&WCQ@{4gO|tM2&a<(K$}08rNP-o0vbB8 zrzDQ%KG%!cBH(U32@0j*#NR9yIPhANW}7m-tq&DQlm8x0up}r%N&&=^BO@rJ*i>NW zo#IygRbX)LA#+%oMB3|Ut6APpxolxKg*$1AaW@N6k}n!7N}q;E5nZ5|qLZfue|B5= zcpbH4$I{|BTw6CbzY~HVegGLCD#E9kYF9wx*lM)`@%o&D0~?&U`!v<`;iSan)?l5d+SC~ zuJ&}+(Td=h4Diy;|I#Dt>3zpt#{BrB6<2lt7uA!SCjE?KPyYHOCwosf;rgrFoJ)ty zjrC>ch|@*99n-A$NHcNwCjHhqc+5BpGHW~=T3!_+Q9sk)d$^L@*)dZZI*5xWGF@F> ztvQZFvsk<>&^P`#|AqpFg#~&~d4FYA z#G7j)2`6o&C}zu>t3Wipz5x<&k@T6KDyurW_}c&;w}QBi-_4L+^WGWmBasS2R}R%c ztozhZE&JEO$)3tPm`ji2~0cN+1ZUR0PH4KkdwOs9z(Pv zu{voV^WJU1OJuLecHZS^0)%VJWFiT^X9E*F92@{-LrZ%;IG^zH0gU#Ad3f$LiLx)r zgf`sBD5VWYn+z7mn~dQEnEE~`Z=`9fonFj(nX{T6XEl1A4Vm*_7Oqa#?xFmcZOVoY ze1xP19_XF%P6k6JW68i!5nj$ltTg0dM5f<55>^*N^WCF(j+uSFPn^8ZV6(ED znrhoLQn~U`oGGhDc#12b)~oUo%JgdvJ@Y2o^lNpE)KUzICNA7Ivq4eO5u#{O=10rc zlk4hZQ43h>ja%|~|7TpRUcYR-a*?q^Jdz<=CfA@=12YnL=tAlSj~gadk5{xc-PRZY z%_#n$!CftaaEN18*?eN7li%uv@rC5cS2@!KE4+rl5brG(A9uNB{mk;jVRL-)d>v4G zHNmS%aDQO~b-FV`R?@2eX*W9AU~i5KnlPNb+RPfn7pV%Ugw{Eqo40{F(K20MRZsNY zhfOD=^QsPfd(QUnF3P9JL9h_j0zwG8%Nzk@i=xpopEG?DF?pf#MQBNy$w5@h~|F)JEyb`_q z{it5Q!AzRh{p5x1(Pc++!F>D5`e7RV<9MOLokQg8Lu)ICZ>*)Iifa98KAG9`Kx^Ci zR4l{&7tkA)d+F-9G9>M?f%k(|{4E;g79f~49=&b3*w63?@IVF%L6O<~g>xetjSqL} z*be(*&5NxBFFz?RFPx-ZvLo9%I&KafJn=tIP|b%f&#cU6v5m&;Rb~3A7X|)T%*@g~ zC?E?>wtHcwH z?e^z?wcCFGXt#Uy8Z;$+hKY`f?Hx#w z?JXPE%|vlu4W@$n;R)J13ynV83PpFCKXU)8`F@5NAvojs-;8e8U#@AkKQ*mqX0?)s z8(+^nTUxTJUSC*RJ0ITNUq6W&jj+A)22C1AyA~~?sT|e@Jc}sd59hOGVBfzc-K+k6 z^`8!aawRoetC~*y-y-!TJ4I4|wlm%P;E%_VBHKl5>v@m7P=PM9q(4X*o`A4hu3(ak=-Nr#($`A(w5?QH~{O(SB-ayUQSD(R>6P7*@}!Fm^6X4KYsSLm{_ zS*sMiEP&Bu$a&%as}B06!9(U0|0vGuhf~02Vt3eU$h6E$F`s;b$?0G?huX~H+ENGvcJ$=z&L`zTq~u`);18-^l(<{{+A?N^85TN`xEuQqGzqGH#hN^P&^ z?-p@Soz8T9=C43@LSD1c2fwt4x@KR(&u6qWdkfmn6p!>!$*%DO_@K+g-*2TZ9;*bc zW{LBAZ|L)3e%^jP40#*Uw-tH6hojq3vhb^ywMvJhg2Sy zU!z%p{T8n+(O?LnS3a(Ty!Wa5kF*$vY3m(@3u#;8sK`vX-dVxJxwu@32K{PtYUbNU z>na0a@?wg--gBTE=jVTSPaw;Q z@hwCXS)?cr={b1ozbVib}&2YI!Yx>AE({@-+kiYZi)gOjkhlvfwx+B;w6f zYr}x~qFwU(i>VR(gZWYwN__4xw$sld3Dnb*y@8Ofqlx|~q+*1IT~4M|rlY0h-O}Sh z_x!DDeei*XPT1kleM}kqtIw)=cXToVi|vZvz4w|8zH6z2;NW}mMm{x~Tdr-P3CHDG zLzcGLAIk+>T?Q?QB5+n**8}NK8eVg2>jJ8O>HH&%rKv&N@nRJa>E=wHp3gybA_=!( zl&8&&M8(Bm;8Bvg$phv5tTFAp6cVt*mJ~ zw6HwO>!n5Z;p{lS5r`oOu61Jj9a3F)Z`dFQWCAZ*%yi^8R3s7~@9)F(Prt zktbhV1s;+&rLGe#xYVeAaQ_b`2ANMyC%=k^7g02)TnQ#Vi5a+;s2f{_vzo@P!dJNa z?2&z2WYQ1KcQ_tRFsOSrAdusH!cZu?&n9+>y!6b{Xy2Mqr+DqW4p`9lrGeJcs-uVCTz@+A5$Zce}f3-Re%;( zOTH}l6Y>yFjETlu9Ft}@YKyjRJeYHG-|4D|Ql`Iq8CQO`KlSD{AjB2&;jlKWr{T?m z;LQvG_w8hyK~%XUI5Z|B3;RDY$!m~(L~oeA^T3-p5h6DyOnvz?-E@W%*DjU4Jjx3| z7GH@_bQa&a7jl7y&O(YU8hV{KW$eedL*Mc#6PRI;_)qyaMK-4F@Df1g-KI;AGC@No+pp3v6)}=_F?UnH^dE+pfH`mhW&c@XCgiQW zdYfbgjzzobcj`5Hm?OGcQ9Pd}%b&F^(iB4BV zcbz2dL@&;oZJ@kwZ=X(|emz>vJ6z@n=Hxfs=N&mOU(jTpNIVHvJ{ZhW+~&VG>f6cQ zNB;GEr;-2Z_%ovV7_*@~7uQHv-)K2tU}Vn)%6oLqdFl!*fH=;yRx{q*`5${RH%@qD z&f8~w?Hc>>{p$_XleVXNy}iAWMjRa-wmyjEsKL_|o-*|Gff|!^dfMx7o#qd(`y{&; zjpCjsYRG#T0eS>lWP~6MJ3R}IFA5aDkI8MEzIZasgT8C|du@ng6b#aLC!oerVSo^V z#WMnwsQ9Ih_kjzHc*{&%xN)buKhaZyF$qOa@yNj6X;n8wGO=XO2cS>2Qwy_~gLQ@) zC8NT9EAf@eA3wawUf~$NesP{^v$3b9>F55ufE^NI^?wL^%eXj#_FFIncXxMpXK;52 z?ykYzAp{Gq!C`O+kl+ji3+^7=A$V|?VRrJq|GT^Q!`_{5Jzc+^?&_L)&U4Ors$k-G zuZ&)M{TVumGrxW?KE=M;ZygdakN%P@IURNd(oA&vtvkU9w{SsEjisBcwRBXU8&#}l z=wZ4r7SGe1+HFM263WWjq17$2YNVa{Jns6{$QBgg{v5I{cn&uua^T*YV<1;Lnzbd3 zhbvZ7-Y6@<850?NH%s{V&dq$<9Ma7SDgeRuyiHGM^Zi8-p8!ziG2{{~1%?{4hB72? zL7xX=co95Ds#)7HOGPH#oqvU`c7@P^ai_5%w^9rVE(AYWzMj9iskrJ79(3r8 zYTdjc3R;%FdgINyA@#J~`y*5yaw%Y14fKRfLqdba>ssAO%z66iTMkQMA0o=f4eca+ zI%P|?YZ7y&Zw19^bt0A>FYc5WR&hfHu>J%mxO;4nD1SEmHO$*B4>-Nu2oGHSE)_{|f$ zfe?1p#x;6jDJ+&1s!|vRaWq;a5-CX#KX`3Gi6QUIwZyB2C zRxx4-av?NyV;&x4_)k0fBQ#}w9%N+rU^g|OU$Hw`6y664`rRvceo zS@$!N19G5-j+TwZ)yC$!ztR`YrGI^k4=?}RY4C=ffr%ToP}mv7=kpm{BySU~mAqB2VN@3G*o!yWzoVt1DmjWxEB!>Hl$t=7$|PKAYtQKI2Y$=W*;px9*~p37 zC@?*F3cgqWSp)ritnL9X8oP0a4du@4{-#;d=o2irE0~{|P zOxMK?wTdwfKM3jYP`@`;Jp9e!H(#v&S`*246~KEH$b0py8o4vz7&%bHK$j^IuUbdw zW=8;HY$0_0!mrHMLufvO;JEt`IErFGg=WG5Yx#U-XSX{!LC5M)3NRH)cMJevv6L=R z^4_sNOk4boge97MzMg|UEWIckiaaKMB7xdz$&WW$5R7C~gimG~E_8M5IGct!kqsA0 z)=pEi+V*x)jx2k2W)dQ%nAv}Nj4v?CW%d<2zF$L$o-!8T*(?z%wmy2l#?wHrxQ5oA zH*#bcLq@qj@;5p$)A$iNoZ;`~6ICYpPX^^F0%!UuQ>I9SR^kD^i0oF`__um28k25! zL)rl2)N8|?w=|8wHTmc|YAt^Oys zFtdjE^^v@Q8;FafWoL}nGt~Y#>uzU}00WLHGCIZg$7J6xyO(G7;;WtO*CE6t>JSv% z$9U}ITl>)ug6NcCd5CX2$iNY(uh{?A_Sqz#f_JlUv60o(2#CkKDL;feEb)AO9YKgE zQdq`!p4%LF=MyL}Gh%c}zcrCmJHQzTrj!2^0>HE&wV!WuY8G=((<0L4ujjoc+uvegf_1!D zSbd*T?=cQS1fua3q&e8a17Q6j9Ri*6U}W)pe{Stcx1rhq;xmy&DzEtD^pAt$5iaoD zw1wPuSlT2+KM^YAW)A!3(8<(c)f|p!{wUK%!s-XY^Qpu_K27&c`K}`$0Lys$t$|e*xN0CDwM}^2m#k`z0pe{CzrPpYcW?SM~hhYav`34VFq?B1vZ$AunNX`#eg! zG!H(u6BYM?BUF2hkinlWee$WS_d7QGJKjHybHfFFGu_rhH|!3OKUCsBgy}`ao$b#n zOAWDcW5ic(za_TY5kUgZKFW9c5QD<5;d;#ONO~w!mrtW_pm3MBXsbo^dOq1iY~P-s z4v48@({ScAmXPcapEsuu7vU1QQo&DAv*NFHzm^rU#qC+5$KjWqUw5Sf**anY6zx&0d46R< zL5#f-LCakpFcO_SiQlXr227i&9yInQjm>FJCp#S1z#O^lKC%|#G2ImXacJa|JM!Ds zi|G$H1B(jnl`r_~ubQYlf*f|&G7t5&lS{84r_Kc1zY0 zaR$)Ay$=m*?eRsk#LrMk82!Sb{AvuU@0DnCr@XyWsB^LnWB(7oayS3bg}Z(mFbLNHV?43P82DOej_UE z3>ZYyf+gj_fa*`u@sVj0tj&Ann0M6P=$6Jsj*4p&N@+HRUJ_2!wn`#yI8z-CP6BML zp}e2lHB2WKxB+DdhBsS?0j+)GqRU{d)eR4fj?77`+XBe&T&p?vt*2l2L&i(R)et*p z+MS;H>Rnr2m~1kp$AEX^u{LS?BrI@m?{xU`_gB!(b)MJJ)eI+DhSVFy8;ni)K z?Ja4gtL*459jO-|HlR$KAi2{W@ZGH|UPY+yzPyQOZr{|-{F!-c_{;bA&tZ8xXkDV` z1Ot+d;1#@fut zSkv_OYwX-`4z`JrNxA%>eUZ#`^CWD(2kv6POc}AQ7$z{8BiYePp>QKfoz#?a*6}7| zFfQ^m{txy*<6hbHls4kH{89UOp{C(YkRA#PG}=1}gWEOY-)e6O3kC6XKQXG9WtCiZ zok`niDicvRYc6Xme!FUCa^U}YJv+DL@bkIH+fk57w2(|;%pc5zBGuw{Tyi2oJyyF9 zAdb7CXOA4A?}RCHp-$*yAMbPD^;G`cD(NT09hta=_ViH&PI_s!-)gE@YObNxIlX9q zVBdR>j_!a=9Wj@Dz)k7bP-8EbN!wp4EnasbI^pT#5~(e5K9z^Y?Qsw1Nsdz4Azj8N z@?@;In%ZL#>1b2V`UdV9KEUvW;rwj9G=zZUCr7;+YHR`}k<8}|f>y2>A7cC~dhhAK zF_{eybA0GF%|w_n7|nfezjF!p&8TN0Cv49+(TbyL=WslwDG7W7rj}&h=Lss6sg1aq z${!X;8lna+c1l@!ex;A?EX9;tt^3uff)nfV4Wux-Q?k=leD&vnb67r+5hY6cL#Pn- zz(WI7xhyV8tLR(t59fJlq4l!Z6fU&K*GLl(>?16RYh@mvg5t!QfSf_TE$;0TmMbAf z7AYfje8Cps2tkWf59P*L-;O8snI_qF@RE;walvAO`Ua`j$AW|PO zjU?p$)Oq6afhk*bjP}%{pW(%F(7C>&F5{8MPu@S% z_qILz5NBeykFifj--`F)p-G0o2q{+924{Yd+On27RgM#FC2(oRa=4PCyf{m!~*bO1AF`hTP9_k^8^zPf&Rd#C%Q=$iVIU`UV}#!y;Xw> zH4auE9f~;~?!BR>B$KR{(1s_5z&gcNf(n=6d_w6@1xsQK&lIx|_6FK`gtL6>r!2AQ zCcDZO6h)vH`P@{C1y`uyUdnV6flj8TVmI7Pl95o(yf?g9Wl1OXN7GSqPPt^p3wqH) zCOi~5!%~OcwawvOYD!*B^NCGQ*IcfC>g{WpXxhL(cTZFFp8SX$AY9nIPcG?zK5KDT zoZ^W+AgeNXc;k}(;mM|+u%};5cS}jA>(%L9S2g5 zStIUB72hv(m&aE_BAHe{kK@s#!eF~mgi-!YB5DeY84qQUTgw%cr4Q{>XcJ8)Ep+i%sPf!EkS9n6GD(6RlaKPb&yjXI>uNH z$>OMf!!35$HLg>uWLKj$6E8>91zh$al%Zxanrfv0E4V zl(Hyt->6eFi3wuf7ds&tXI`FHyzl4YQsZ@mp+G|zdQ&x#$-_RGMos6SL#G@To*Gczf|G!h3}#mquUN<*s7|Q_18>WJNmJf<^ z9#u(Wf9>#bIg@@v=A-`AdX-0zInfQHF4GU4R0UdXcLdM=1|3Dig6g@kk82?o^whx_mh^AJ>K9Wf3>+EXUM8?2rrnJ$_p7v-Xd!EI=J|_v=l? zl8@9-KIfDF?~1Y;4Hb>yysuvY;FgfRO3EH|(#x{)o$o8GJI{~`@b}>B7|C4m_j7WI zrx(TgdFiudQMRi^j*p?_Lke4NG;|N}KgT0bDK|fRTGCyZiFyYkolEu_fCMDa z4ynFnG<)6?DP0t>#Smj`;*;hFm*}J)5U}mkJ(#;Y$}&d zw*EboYP~q%a>w(MXd6?p+Rr})u%;uU99|r=j)6HzGL*s$;4X_2%%&Y8Z&e#?eV9AU zJvqvaP8w)r$C#!VN*M)Uw<={4R}*izZ!Z>E_Z)M}IWlmdOaqJNP;|DlKZvQ@vPHuwB&o{|(ns;-g?PrDS$A0k8 z)@sn1I@=;)T`7RO0!JWXhGqON4&?~V!06tVy}8C!(|zdqz~xx6FqPstWX<*HgQ zqXn(|$p5$vg2lal@*oI%slMIk3{gsA98JP}s@#gUMa6orwp7pdA_NT^&l|l;Xk;B< zok_2DS|*-+(Maz`{_5$3s6VBvN-w(9Zqy1>Q9FBOB2}Brr5c|L11dz#Raauao|(}$ zILB%`=uB3=0yWmdWsp3D+Z3xj9Yd!(qL$mcOA-#RhNq`X=PAv`*CC0P*0NGxP=0q+ zsI~Qgb2hdj$-eJOsei{u=ID4N#VMYiQf~ZwiNH3qQP$zy*a_ooxqUCx(Ac>XEa?@f zh#SfSK5^3hpo-@q%3J_HMt#N3UNf*k8##0BBZe(KE?luxJe}}OH0_O9%s8}uZ(8jiM!hG0VME(||a-~{b4aJK0wh8sNDnr^;atw>$+9OihMj*FuUK~5EmGt3+; z6bnigmML}=BEyi)hneF-L!%YASCv{SBay@3q?eZdC~1|$K!iZ@exukr&+fN=T|#;? zicW>l2kfiia-26MJi5;KvqJd%akr`uzU==dSTc4izRgw_K(9sp_HX2E-*yj?f;Q80 zlVSA!U;CcWsn80}KNNa>X7%@)B;8|Da*! zPnkR_sfO$D9*ZQJLHg}{$Ey|2bjh;-boPf;4yRjTR{6`h`!3gQus9wHK%@8&8q-RI zxZe4muPe#R%R6S#m(SkKAj*71a`Q-V(?^|$1C2-3!>(u#qeRhg;;dyl$0nHqMb&v}UcR|}>Ya~< zdcU7!-7IkHeN5C5IV4x1Ad3#Mw9h0t>8=wRV)0;iYn!Ih;E^xd#JAvWs~m}bCOI08 zh<1Bn$AfYhYt5vV@Z=pIg9-7I8O7|<3qH?8Lc3@0?%?W4e)wx)G{pqUlS_R4G)OSM z2n{&BbO;D`n^ejjj=i-#Ad4Sm+`S>Eny(`R;eCr*&0vW!5#JgvG)|cIWAT^}--;>< zhK6@J587(o8olkK+}cMD$Fa0W0W?JQN?yy-mJBQ;IIc-+KSV92F;eB=!=izQE17>F z;KTaBk5C;v(h6c7X(OmFUntFj>I=!Ye__I35qwGWU-SS4X2MecpO_(I8uSlhjG=v$ zDua%PQ>O9%9REWUAEf__P5yJ43@qhf*8kuPDBPfzogDy~0lRzNM$_ap+(R4u6ZK2_ zM|9cNAov?j^v1G`?Bd1)a}m(`_xD{wDEiNMGGHfraC-5}Qp5HdhJRZ3v%xAW{}Ry zON0#cn@&-8IXjmaJAWY&BW?~88&8&hTWq-fMLA&xh_W;n8)u(XXBhsyvmK{F(8$Mf z*4SV3bar7FEV0wGzSK^Ef4yj5o_7r56oH6_y~NDzXXv;@+PvgR?SbqYZjVS19>n;k zRSYy64iDKxp9v-IdfqGisV`;Ls52bD2KTprmw$hk;v5L=+mf;)KP3h)^P|Cn3)^}Z zjVHsEb8nHWmyqQTYgVK`!vT|toUAoyZds=5XS(7q5hah<$CGU>eq!=H4Fom6GB8dy z1wT<=m`LrH<{94Z`M0j|J9wY*uirsgN8u*IhwdJfFyyZQ-G=1X(b`#+6}Jd?o!#H^ zSzb?*ejXk%PL9{pKSU+$1ciGvc-(N{L6Za&sJJ>RtGNK;3(6gPM)_~7@*1KS}V$J-KvZ}{cp=MuX6_pO6 zVPfik8LsNMEYhXFRe@Mp#v?eCjddaBYS*>ydIicUC)|4R!Jgcm^xA^WthxmuWk!?g zucw2oRl(lk;I)nZdR_5%`FE~|5kRxDr}=5mwMf8|T`8Qi^Eks@xdpfTwtn~P5-D5a zUop-(;ft$j;_JD66UcQzu;3MYru~JATf`qs=FyNivXAqsMZEVJr9aoi{2XB zmgu)OUc`|XZKJ#0`r#DNWUc*?B&hMLX!rt^j3UR~$+5U6RJiwTCh#xP zNNTix*s{Jkkux*bnHmmJ87oSOra2|&ckEAu%DFu z`W(B^i)RajVI^;PW4Is;+{|ilgnid@6W{7df~N&|oIII6K4dGYZZ)KBfhPadNQF4) z@So(!>AI41iDVoWJBs>#!#Kb1Y~nmId+FAhZ?PrM>0NiL@Y=q`SYIq=c>+~TeG~NE zy^c$RwT3Q3pG($4XdswYymcm9VLs+V?gWeDIF76BKP+Q+efWtpCq$=Yp*!V9gZ1bu z&8Wd8yu<`AcG5H7$F$dzv&84`z>J#EeG(nWDA@(R;uVEvrTN!LKvl64Y4PPx!wMF|7_iUxyLo!&P;Ed`nU=1K(o1piuerVUOzqgO9kcrm{*yU2Z9nzr2i)#6_x zxbqVR*0F`vEQmfQjOZ+3s*}5w;}{jH(C?`HBl^Gp6jPCSFmr9U#(ANq;x$~qU@j#6 z7U7G+UKpBo>XeetL;SzI0N=O6l0zor6mgA%3<4CDY8w;jpvuq?sJpQ6!Mo(Xs@ORe z5c{XB*B0F!$L8!6KfpxgeeK&BX7GdQaJw2OovG`tVvY|cD~D{-3|sR@x>PYwK2rrc zPo*5{+5hQb#bA}BAGxC$y6?VX6__(=It%A*4ex;#sV-lF);Bz;!k*rFNBcp(V8gCb zCzU$6|GJoNl~jOhvlQY&Bk$?KJCKbEpOJQDHml20T?-#CF3#~C+0r_4;6Zh(zz=OW z7TQpk<%*vuLU$0Fn{x*^cZRRKA$Hl}w~DRg#E5TwM!sCl@&;S-X_(*8J(vo9J!Bw9 zuT=ffMV7TSjtg3ne!F6RFkec>SAgM*-das|LjYn|cBPF=e4gDVOA?)l>ZbLL4CY`} z+g}NYXg^!cbM(2k8T$KG@{>ywVar|lO^Jud#NFCheLjijp$Xe^2i>CK zG^ST|-8*;^9ec~Ef2O|#px~c1MWckw^GD_fGK?=)&(?(D5gohg{8&K4F#-ZZxCLF5 z8W$_Cyg%%6P{rlK67(uq>l4|@VSlJ}9Rv1k@m$nvbr*M|EIh-WXB|B}DJ zrwdT@+&4lfrY}K8v-3FXUsf+5b6&uns>tR>9LiOi!?8{k zm89Ly-OyX1Z3Q6^F11iSmtp1>w~eyE8{RMYl7%z)k%cpKHCf|e(&CX-O$pR`v&U-w zXMzl-$V)x>(EqJpKVYX+FyQ9pLqgsYUX}=m`zGh`$=5W150!D|-;{@}fnwO5E~&Fq z>!l&jyVU6FQ>e?{+fr+2O+78z4N5?|`~u&38!1RNdD#W;Sm-?$!O$!D=@YT7coIi0 z7LsH7h|Q-iU-Z*!gRn_{r)7tae8LZ8>ht#3evKEZA98-8tIP2&HGB-9aMHize0!aj zF8pd!_+;T?GQDMYi>)-Yql)F|uYT+A!N}wZL6d*0&#URU+g{bT7MsSA5;{r! zs|Ip8bn#H1xkbSXitDMa;39M16x~hL#38I&k*?w}`}M1U`b@Wt8-+5k`f#R7T8um*a;!1|iTJnH&(-hokRBL2`v5Sg5NmC<%*l<|au4 zbp3Xj^nnR)P-X>hiwD>3(KhFN^o77XMQ_$H7?jy~izqjV-GZfU6{F9!UxUboiwj$+ zjafPCUKZdEu+B4Asr$q@ZTW$^fDh*S=)>;B7@@jvP{8GYBc}$u!umK~++I|R9UZNG z-tW_m0tUwb_0^!2hJ|FjuR`DL0w*p;Jf4qr=IQPizyEFJmt8(nNfqL8&t{*0zPYtd zUkOttr3h<+t<0DNX-MNOZ>7M2rRc6oZKINuCL}d|c%w@4wFF`$0Vdi8PtkgXi5`q1_Z$@%xkJT9~ElzwPv)Qmo5P zlJtE1wG(Lq4@LDWrOt6~s(OjQUW|_S?B{2_!YfuE{>M=9vARlg-Bqx#xjFL9ghMb~ zQZx&V*pogrt(J{5C&w%}bueRYAS(x-b>NIj+>If}jMH#awX@q|J>0Y=R1EYWN^8&k z$pb-9+#j8>A$i4`5Z@z4A|1MKM#I9r`ygzWV+#4EzWW?{*Rf_UDm7I7|10=U{r~Wz zvJXFJUV+Qfn%?N%VO*)b`<~4=k#f8bO==+T^p+4xAVRAL}%W7TN z@MUItP7ktrPqmm!UYVEs^(k6*YEv8k@x2jO%0sv7a8MVe)ePq$x8*C4OspMwX+tXl z_OwxGKYx8+Q2;_i%WEL&gPpTvE(PR#*(1IJtnsqd`!?GAQ5C2%JsHCc-%lX9M-(%2 zQqBEzG;I`g$|UZ8gTUe6MGSd%e9sVuq))>$S~3rv6BgnNXY<<;bl! zK<3eVjK9;fKO(rhUbtt{XdEU0$H%y(=z|MmOlV*_r=8v4fn&bRFlg(bPpFa$axknf zZhKB)czX-Y{bUu%uQuv=H9}Uurh6GmpUk}_f*dH{^ez6^fl~{D#1k8{m<5a?cfG&AwwW6NU~r!%YY3 zL5A}0C1gSC%v$LBll?JaXqv8!ltJ~EgxPPSw2h|wIsxhEIc5lU9dw@N8zCi4$7)1VTH( z-Qhabkbx93@TtCC@D2M`u+W!Yx3IqL(0*dEj~q^ZHRaB6jf+6-_>mzt;r~5_@B5F+ zvKwjQ{!NqV_vdjYPxdyQe-e>$DS-);h5z^CP#Pf;x|~`mQ8aAjyi)V*Rx7E#u(8%jo-NaCaCv zs{E$v;2f)bc$w)Hne_u_k@>@k?ZB3b=6=OPj)w&UXX|&xhVQkSd!twMQ776*B+(pk zbr*P1c-540+(oM(?+;Mr!&U}1gBHbzEKrmn2|*3lO;2yaoC*ud6AgAaO@%~76PQMK zLZ)=}*!=>^)wr;bjJr@rZe$0m6dnWvHBam6h%WmnuGKNVptLy5oxv1R3a4G@zYcYV z)MSG!Ma&cZGpDk26T!tlf9xj~gf*~Po96fEqCFpuw!>>Q9>b)NtbJk2H)@`Zv z`)@GrW9fA4%Y=$ICYdwdm-u#GsGWI>Bpde4(Z)YMCXqONs+vugdRc0EbqEb}%DFe= zHTjvTt&ybd=sAsg`?7CucWyLUvVoe@?MxQY6PVNC=BQXc_xE0!icczcjcU?m+xM7g zr9jc54NbIAG>n5?IJNe)to`o28O{5R8F!JEM@N*d?%MyIq%mp-jyT+t;bPX=??6O$ zk;#j%)}Wghc%w(W6y_d2!Q%&oPW6?BU1>vD-DNQVx!1S3Eo@s7`D-8PW|T)Opo$oM z+%pHWWj+UCrlVzU??0Y0-1X=&q}!^!&UWo;uq2!Q`9zI4P9LdJ8+pwo*eU(Bd@H@;6p;-GN zvM(%6MRPvM9$O3eSKxbui=^e)M9Fz+7E`<0Jy0y`GU1*Gy>O$yL?*jT0Mrnknf@I^#x$IUBWH{+hDcd(WHaS#KZB1L@`TO6k zBJ$=-`1mG%`iiZA5*@}tWxUkQ1mmD3>swN%2IUSeD9vj7VYed^`4PNAaP;M!AR1zH z@!mt0R;N>OsS>AI9eQp$Uoxoz6>8nm`+uCdhlAAn)@avH$2U05bV#sS!?FE*$OGA) zK75TM*G7tb`HmF%80odyk&N$*)K<6Fl2{ZfxLwz~+oT89uKtI9!q)ppD=}P`k|9wob?&fA~rBD z=tgyYZJ0*;Q(>qvb6$@482aqQCPE^fwU`YsZ%;kx)kO;ogv*<}yt<^ZZ4cv+p$LqS zdt3ib$48DHOHWT#<$04X>bo&Y_H@jDe)2?r%3C_8Clpb!v}C8@=yO-^W2T(5u~cSj zE$rV-w9?r$`0lr*wTbO4eX&j72c>>G=X00aHBg#?@sL3Fb-D zu8itpJ*W^0-q>S+-t|jsPB4EJW@7b0!)jbL-_bMHbl3~~7JJ@!?S_*<+o>PJ+ck6( z8V_vU65zy2+M!^r?M|fq5wAB5uOFxV^EBuD`8tC4bFiqyg;_5rszk|JRDdAf+_ykO z{lZ5(JX`^G``$N+N83Rtn(5+2XCZW9(fFsO4s+esA5CFzmJ@&sB(lW47VEuV6q@Ut zt=9xH@%0SmhLqigQArmYZC29r-Cm^ojBDikT`{kJ&u~5lj+)q=8TGCwHW2}Cv}t z;5CZ9M5Xj6k5fvv<*t-(s6G4N2|L_B-1%?lZ!48RL?0#vqaJ|yamwAVpM+izRt0_1 z?#8`C0XU4tbPAQ2f56l?rICVAUV#>o+p;UsR|}V9c(g-y#N^jBFGeZ<$*-2fuUf=u z117u)e&WW-rXW(tPsn=xSE<8^4q(MgK)vndDVi|>Qe|e;>pfrOJLA>J+A)k1kh3&= zK=uj{%$aqGkfH$Mg1iJcbCxG(jD!N9YV8_yMvO9*NF!?HquS;jy*4z+CCEjFt!HcO zWH1bkZKi)?!>wByASKv*r$^<@#!6+)A8NU@hBJ>bIS>UzG9^@;S2x{3r{c|ine@iU z-wa<9(NSZU@PiHyt+Is2q@se^9Kj*+UiwY?SD|3Gp0nDCr;WmLbI83;JjG;!*YV?= zjJLxdo2~11RbsyE9rM?Tz$II6hy$FAnVWo+Xen^Ek@sxEFd?s*_SAmEvB-PD@d zItDzHDzbEaq_U*2(O={{jrkaOQnT(GI|#H^;Oc}x9-lM>)hL4FIT<9R(rH9|4hXi( z**ak+da}6#+4TkqOuW>}v$LWr7h0Nylp1aS+UTW6|4Y#ZFp z6CMNg+TMDsw#U_~u)Iq1^EcEe4$>Q@=Y9-{XKLh(arU?ld+g})eIxhrD-~EmCmOu$ z#hj@)|L{h{|G7?_d@x@(4fP@{r^Bej`dl*~%$OTFM#+L*X|j=aL&o5Az(MV3osEWt zq?{uD>LDuAT%Fi<3@JQ}(l9%On1!Vn*8#G|;E(of=3_>7liS0veoq$%+P$5V7DvhUy5%$nl}5{<=w`x+V-~&%H5%9g3HOweEp<#p)?SMe-^%# zz?7Z&T-WnQ@yEmQ*Lo02-pSPd*P+C37eteFFf%8cQ}GvOD*Nyk9)~Uw1_ftyPF#Pc zU=oh}7&SI|qt~|9ux_+eBEP&#e)T)HY6zIHSri2eW%+fdvEYXNk-Tq@`bWr?>Por zXep~;a2w4UWVvcHMMR#iOFj``w)f=Pay1#4_wp0dc5=3=KCV)*T*;P~;n3z~dYBco zlgMEO17>W$R&aOUEJt@=4l)3JG@lERtJ_MdnOdk9gx=z+fp)d8o$ihhRJ5Uza9}453)qj$LuM50bYC&yd?Tw zL-D7Qam#+H_pwLV!&Bw_>95#N*#ZJ-sxvf#yP&8KHFOq@f!EW2f7XyrZW8r5F=E>M zZVRY22>YVtam5ii0*y1S{UGxC%N+P`ds<{!Y^2&JL_d+9{;c`dIvKOznDkb0X3pNU zxOzKY<5RM!4pKmIuyS4ouhmLevi;)-xp2I0((6>Mp+d?Jk$h9e>b7gDytgk%jO6;| zEIQvqc^LI?ntW#kobAP?!~`Gq4A($S<=R!51Y>n( z53YPyf2|Mftyhj~r58Tx_J`qLz1`BPbYV=n%qM6k6(f|hIsfc{Tj9!aRAHMlGS#R_ z_ri#0(Vx3N@iySi`BvkSf)fiDkTS{ofQ9u=dUfOIegfs6+jHw6Vr*HL(J9HdpZQ^~wV?mnZ`TSl>cxvW z6p<}?rhs(k)8^>g^Dx1~*zXA;zDPACluN77jdD4!E#d{5zXgbA6|5%YiFA%&s_=gE ze=_aluV>|Nu~q~=1o)j>B-6VW1RyMoC&+1dy1xQ~dG?qX{la1d1A$2oS#P(bU4rHj zwN>sIldc`9_oiNNKYG5?p1E}t#ygQ58C9iqN^}kOP*6@IoOt!Kf}gC8-ygWVrE+!$ zCau*0@^0~XV(bBKWturCj5gp!Z}b@I`bnX4R_55jd$%4t-=Q4u&JNxD6$xlI1Kmyt z)Z!r)cF5zP%!6V7S+PI;Ffr5DHR$}cN4(iB2!@|k*t5r^Ecq5C;CJM-!pP#^;S0oI z!^lNlrT5+MkO(=l-hIf4&MFN5A$%lc#X)|#p^Alnbr=8?}@ri9crR~PK;T~u+Mk!UMU7YqVCrXevR)F`T=a~ZVa(iDY zv-_6oLRBK8V{r0oLYR~7?{M&|*r~DEMJMG_9p&8Bn3?xacRET=P+X=sCeIC%A&%@| z95X!|>fmPYBjhEYLtm^n$_l?9NIcs5{%3mE6Y6<8-NoneqszSarm!{)VHg3Q*W~Xj zKdkBTxp*)q<_Z+gLU+#a^wJ1S3Q2vrcn+Uz*ovY5GJv*<6qBSqHWT9|o~%3YSLzc3 z68k`cg46@kpFl??=a}g50pJC?7G`@G0&UpxuF%k|g zn1#%e%81O-C+Kp^k#lzaPS7j5Yx)pXumPgTL}qq3HGLCYN8<1^laZ8olm%~{>Z3W4 zql%==Jj{o16nuENrOS;jx0{>pN7$Z;^|4GXBOUs3S)_1Ac65!}2f6%PETn-C@1blR z@tDQKqY_)tz7|J!G5lA=WSitF>2VGSmDnRzu%D|Q`+6D5PH$Th{}>cMCC<7BJW44i)2Lu z^BFymj)l2?pUCyQ*f$63r#rk;ZVw~S4x8GJUYjoKmBYs#$Hey^mYqlK$G-02kD!~` z&_Z#VXJ|#(mbOOC6BuCal8lr=M}a{iH$`M-cQ#JznDnes0$8J}3;D3o(d+H?tx~m=^Fua<>dy{15 zWv$j^N&+x5cH{OJ?G*TV$t}oCwAGMmfU(Gj^$%b5h8^ZobI2xybEq2GxG1j}762t)ri1(JxO!7#4JJRfjPDxVE>xu)d%`4Y1U$*2AywO1XV@G+A&X za=R0W^10ZW?yqD2qo{RZ5nroHnUXYrR^r|cw0QowP*oD%V$X@Fb#v&BrdUQE$iz$! zWl;AY66U5LWH^wmp39Y*JqL+mMl~bBp{K#$krMeyqMVt?Y z0EaYuPM~CGFdYm~X-6LN`U4ZU(6&B~pCI7M;ydx^$jZZ|$;COJVG5{U@$;L7FX_Hq zWdA~TxCOCC3sepmP4g7rirp!*E6|?(pXxyvpPa=T=#?JVcW3RLpMka#ui3+cCE2HxR9^fwiz^N-d7g$FduKK#@As3b zc$eD(8C%WLc~3=9)oXx5y5R2Zv(1I4Q}9c`kwlLd(+a3gFCCQxm{8BV-0)gq(MzP)28B9>=PBrhfwM{b)#o161aX#B&1C(p~rw}x?%Ydlo% z$L%x2hp}*?xJ1fwc#N3V|AJ{r>t1j%@%d0R!EG#eZDB*8^L|hsN0MjI>e{3yD5ho111hW z3&#u5%{#a|f?q3h6G%)pAS#>ZAuM5CLFUwb#+AN#7<_bFy&P1EfGF`Sl94m* zoM+>rFUQswev9RVTCr%E)25~e>*`4oB$eL&pSnSX8ZDisTxZTA;(@UI{OLUe^yeJj z>&To3_qI7UwuX3kzv*-vBJ4a}xtQe-Zn0ID4PrCJRz0fH=h zZp@qC-05JA)hv&Fdq)$E=g*ZB@q3&rjPgi^y%F0(h3Z5XvZuw{q7_1O#}>3hq5JXD zeyMJ$+A4w1TGX)L=e;3%8SmwJ@%$1a`iQC>Hdb_}<~OTwVxyKfz!`KcZmAA7Uw{A* zpzi)VOaVZ*f07`CJAu$GAkH%Whvj{S+-r!Y=G6qMgRd#AfW&4(c^HAMoUu}d1R}&u zJEseTOTNZ;SeupAAP%)>9wxjzU&&uId5{@Rz8RVN?>2F8+nRx&R9@X0kR5)X+|mGV zJ-sZz2ydI61zOhcx%acM!6Lw6+K@M#2!>}K?*6kcvGu2sgLXNv$N0_Du7n7&DK|-LaK{{ zg}l>oG#GjQUupnV7OA@XCYE@C=bMn$;s5dipx3QmQUN)gr`(zrJtYfeH}u#Ybk;_T zft!Egb38(whJ?L?UtBm69(eiw%iO!(`WO7i6-1Nq;R^j=EL?PMbexuRUH#PfVizZ= z-Ws~8pm#u)a8}6Bh&6%6{}eE7PLL z6d@BcG_lT}VB?1Y&3>}`t-d_Oja5*5xzK5v^4GJ3RYCN8wayT=WX)yaM@yl6A|4Fv(+|J)~2m@9GrM&JqfPU)NB7llu@BP~_+{2z*1{skmB8Ck{R| zdltOtz4RHpEa9*U)0?I8#FCa7Q%nfv7svZj4ZKeLxHTuY5GI}R0q7Q0;%w>m6t02b zT6XgN!PBdt@uq41)s1Wp$?&hq&rgH#pwx*UD}%krhd1bC)6aytu#>4t6&;O`$OB2` zcpFfIK2x0hNdlv7>i>!856GX*$FGm*&WAVtQ~|((R(sukR-KWOCK56g@%?2kAULF% z!3>oG$o?NGU|k&#Np>QBt@X3Rr-PA>UMxkrxm)Tpq48{5MNli{})$p71dVPwr#f*io3g8DemqL#fw{U zcZXoX-QBIli#rr|io3fMCph`jyYKUFd>a{qjF7cfre5Zmxj^$4 z$5vNhG8y#D?e0xhe)}blU0p|@V?S!(`Sn(B*rLOsPfp@iHQ2eKkuJWeWOQS7Ou zR}*Y=71kz5&ypvbAR+HZG6uV4$oem6l;&9RsO%4`4RFwA&Qryw#k@Ti^`jztB!5>6 z#K{j#eb6reJtka{rvK$xpXKW<1ODG^suoSD<2TFqP+S4A#xe?dFh?+Ynxk>WbY(yo zF0Q8N?#I9e#k1tEtJ82qOvn=rml@=ujQ0=)|6pa2~-G-J&&Nt2J8sTydZQ~t5+ib{KL13~B zKL;ygAJ`^?rUj`XAja`%$-Ez?B>xmEaz|vaQY~Ecr~p+|%x~sP#HN-n#pVwPo;yp9 z#zxg|78F?E8WtNEvuR;M>DcC)9omnZY@}`KCGOQuj22#3O6%GQ5uLKPu$=O2f=4Z~ zC$udz2E2U7ie$pq?nu$Meo%J2Uk_X*hxhFC>@=wJeeXPBsY^q{7h1jh+iqOOwzs!h zEm>UES0EuVKCd~#OdeP|An{I)5$V%>b)U9H4seJ(UKBHL^UEmnDnhy`OmC_+J!@6% z_c)5xa+1UQjN!Wy>BxKT0oKBQauJ*)=BBqDpC50=G^LMAQ(aD)fYXWLC{{EA1$9D% zLjgaF^Td&EIt?BZZkydfETX}d8)QeBTpTTimF^O{e?%<|uN%;m=yt^wFHUS=Bd_WN15SUQ`grrOX=AB+D#xK^V`gd%CBSR5`!Y?nd{JhhQA zB&(7Q2J36A3$nKp1qI=fgi8$&4j^J=8N0Os*9U5=QoIdXZU2Q4`WBnKEQ z`#-?+6LMxpl95q(LIqJAPEJeDU&Q4?&bP=BG*2@L^zJrzRxNF-$Spt5c$=G562y*= zN~EeN-wo@6kKmvt5ho7Cn-aH(V#{dQ5{NSUQ`ZIKm!|q~-r(6wMpaGwyER_#jaIY` zC8E)-3*x?HyQOty_Y25doMrv9Cx+9hl_QjTCX*$N=GKge)&@zL`9l8gA6rc=8;4cjR-NiQSD^1XU*L1dx8Cd`!`hbS6zqU*aN#bB6}cb1B1 z^lQbzv^_v{{LO|J->89a%QEO$_H9;4!cl_G`e>W&;l{f)Mjp)>E4{n|m#>%)Lvvzc z=Cb!DOs1C!>rp{toD3V@;XZlKb>mR^qj4ARw;@Qp))VuaB(V-tyM{g;@pSYoe5T7; z;;VO_E4$p4&t6_h_p6e~08*}o-Tg^iR@;{vU5F7#>&@%VmEJw5=6LtdgYDAL>S=pd zEO<~cN?`NbfbF2*719j?;-&{qj{W;pDPEz|=PS@tb=hvW(=5f5#|L$# zkKJsMW91jymBHXi>6nfMJwiN_Yr$&)jA`cJJU;sqSnf% zJkWgsk-IOK?b)4v^U{?Ade!)i-G8QAfBn2Z4MaLXYT&>3W{k#=80P;Bt?E)O^~XK< zzZFIQwe{jUXb+d;8mWVLqK&l;ctZ@o{(UL65x8zTRHx&lkGps$*HpJK7(Zdoy5fEC zpUc=!+cijo)vju(mS#$eY2KOKr3+JMlch;&tQpiq#289BVyX1aa@pRZ##)&|Z@N>3 z3(2~4EFrsQ-y^V9vj67{CiK-;_bY>#GDXMxUOEZ5@8xowJR5l8Ooy0~T=6_1~F$I+HXq@KQs?~2&ax{$S1xpi4M;({NlIop~iIRPaOyfRrc9JLUv3 z1j=3(y2mvqz2u@{vwEB2b(zz_`gxf&(;0EdNmC+wNfR(m-zDwvoiacpW_}bO;3Nx2 z2Y~s>;q0P7ZQtD;UML`tPMU@=+2dW>oMNXtaUy*hUDDuUz^zOPmNAWZKFo}4ybK+X zl?<9@JYgavUCwrtwBkeX?k5p41sSF+%FnnKGs&HIBa6f(?9d#GUrb&j;te8!lnGQa zKf=kfsDCrIGpX>28zGdI$wU$z>#4i0L&sA77EO&NZG18RTkTP1f<1o=62K%)k?`(2 z_7=oYiziZ#X|bFyMcp%(aPb0Gq78$*Jixmfwj%_>lE##CleqJomG6bf2Qt{BaTqVOYoT8m!(G&bx?%?Dur9n}|r zflV|yQsE4bKe;Rw^{8c?w!V)c{S>*1CmUXHUJM<|p+j{?>(e5F*p@efbkIB3;;Yw2 z+hEmVy2UKN}J>*z1? zepG}wWX1R&5in*Mb-z(rVuQ>7C`)K56Yz=IC}QnP7EVj(keT7f`E;F=Mc)h|8pHL$ zZGT^3jzV#U_N2mq*Mo9ybl(%~Q4xw3M*xmM49@J>GJBXk50Lrb!hykRV8T@>pRD2$ z_snA@N|VJsH>-u*a27q>UR_S&jU-atdLcLmXnQe=qHtR-swCu*kS$LH4d3Hp5rW@h z$}bw>FY&H?RO{hJ_W%7{0jT{?L>#TQ5C>#*_=v-mSF+DI^3Oex?%#+7?fL7&2F~`n zIZz~BisXEMG+Ok~B=l6s#;jc|K_+E%VCFMpCfRRwYHSrQUDGfLFL;bAl!yGjV(pyr??cgbL zRqBQrQ7G;W?(lyCzR0}S!Gw=c4RYkPsIV#r9P?5E$)QYz&V?_d1a4G!_66^y2*oHJ z!-pT-PN@Wx3a@kRijYMUEDYs-2Tq0=;P;B8wPj}BMkB5ji&-P9Qb-B_0Cs*84K-Ll zfccJNv=!HJ%Q8tLRtoj6Q_ZA6EQ3$7i{#{y&&-bcAw`jA%u9e6^qf& zw;XooD5vKSOv^_~%#ddc-xpY(K@8;ZDHI=@MeOPem!CpdfB*?D!h|U3YKEHwcp}Zh z2AU-Jkp}{m3&hGbUmkggp;*M_Sc3{%*<2=BW&8V-3P*)Ad?gD?isj$zOz*q5c+=Pn zvZfP3Md1p3R7p{r$$M;%+%PcPtF~ZWmZs`nbV*PY#dD@zx7n*hrys;tl2@lvRw9h# z7T=Xs6P0vQZ5BMlzd5;;(`tebTGGg#X^zskB19YHpp?>)DW+sw{+wak#I&J%xA&rH zas5`f%KK@0ZiJj1CAaKa_yL1kLvkjG+H7x(XexxIm}_)-IbzmMO88(wcWY2x5AM!uKfI+Z~D z*Cw5MqCIS0--T31|5DAyVHI!9)!eWyPmTY*lmRb27w?g8wU<2=<)MPnTG|EM&H&^i z@Bx(`s#$MnZrO`gi{es+9%>n@6E$?KZn{YSP-=tP3@L8ekB0>FnkXs4kX<@xsN)t> zgRZzC;iJh2?$_iE#dXxv=)y`S6(JnG(NTfNQ=sRs%3TBnw8V*dA4+m)IXnux9Xxkx z9TI{$3?1d}>Cy%ED#{piw+$U~vdHUi(|En!W4H=yojh0w;#d+7*yFAx(Wi?v)t@6R zYcF+e)K&p{2HMZ14@+zu^I)81(uHMGXmrt6R_nso)Z1=GkoM=)QmX=U99N;cxHTW} ze)f#NO@9#n%f-NA#*usD6}JmzMK|*!VhkG0|64SC_W&g-DA`qS^@Z&r2H)FZ(=4gAXysnND4C zT?KY@NIc)bPI87}QwF|~7P(m=OV3zLemkN7|DCU{m5?j7MHbIM8~=GW#Hju?1%t-{ z!BMyaX#?rVaOo2@=G8Ua@}H*{9q;`C10&C^<9^##xx~DLAfXV$SkE9ESo@Wpip@t@ zO_!DNLFE6cBc%{RG$sn=iDI)piTnh z-feA}#YH37EA+=oob;%f8^sN+r-ks&?_220`PGx0$;bVAhkZ8l%@6BaxAv<4Tx=U; zA+Y)<5yY?t-N}Z|Wg28}s|*~oHokWyBB0XTMfDuGvr%jc3JK(khEpKoOOWF&#wg$R z4lg~k83|M5AzN7i^dT^u`hR$Cq_3B03A!PCtyT6n`&T_q;~p(WP)Y^>(!MaIy^55O zntbWFdi&i#f0DicU4ST9rF;Jl+h%wMIWyd>eslNL&2G?|49*uL!gM!RG(}7fUQ9Vf zE&=U|*K8VM>ZQz#>xwwqe?Y|BBAiv}nQ@r=jPqe{=6ELwe*B*2K9zmRz_-_=40Wf* zp{nPdhIq|ZU>eij(W(Ea3$x)AP~+}e)h16t@dt56W`5Jg-_-~;MJp=qx~H5T7~kS@ zvH9!Z-92Q-m*?p~hwGMGG_&R2oxoy-wPr)U(wLGK0-a z+dG=kgdbNofps4*wFR!}4W8ZK(dv0(=puE;DXnT7xml&ZK2f$IV)-N?%Fv^U#mkJW zm;f=LE38DVbWgcI5>Y4U6eU~{;_7>g97zM?{e6lY^<~wuR#bdTfXO^FbD_C-qk1E9 zZ5u(LRRzpuoe$4uFXja$P#qJm&5&83FvP{July%?#{o5(8Dry}kRft+9InvxaJAo( z#bHxdi@NQ7g++SDwYWV$=Ku|C_82E~*Z66aIh*ktzX1Q!SAf=9=+W>Oii z#h3jQO;5L9NHqR8BsG(s39uw>k!sKG_PZupKWD*&BgrW)={gTK6bHH>p19|SPeaT?z{zP@w9aRdFY!F1nSx+9tVrnVx7z+;GcfS!KpS-j_sq_x}U zqU8lyH8nL%aEahYq^y2^L#6$kN6MDUxPbnjFWWaiI@&EiC3R(u%sG%A+%gg#i?=H3 zWzu2t6HPh6dYW$Fje!X=ki21Y`dK@n-&(>vE!QGf4!?L`2Me$@ef&A`6G?z$x$Tm$ z$O-kuSml*rY|&q9JvOfdghecT99TD$=FptsNRIDsXzy)IRdhIIbiEVN!SUF=#(n$g z%X*C(zLMeFlMo1NYAS0K^3a|pPyVg1rD{u!E+(zZ{Pj1-X)ZUzxcILF95hUs{YSD& zj;D=fbr$!%opy4o-+p@-(NtF4d%#NdeeE{8IiuyrL7X> zbpy3m_u8Q?&U!xEopuj=vtqEDa{uQ0(i1R}s2lTKOZEJc-F`tZ&V^WZz40A&MC0D* zJ{YxZiYw^Q{6q259}n@zMGc=strv)Y#1jVMMCzH}4r}(!l=#u=>CnsG6a5@CDXW`v z=FOLt;Ps|th1bHDDE6Nt=eHZ8Titvi+Cl-Q6~8>Ldx*mlAAALB1gP=4wyoIrM9Q0?v2mZ1+>|6KWVabw)&&v?#v`w`{cJ<9DvAaqzXyU7nVr~ z#I>Po+%w0rAG>+|yp3SWjqmXuZa)vLcI=fq-$>>pWOh| z6jpaZNh4+xyg)#|8%>O6 z;b%3)Hh`BOA3{0Ph|g}Fa7D3{uQe`7unU)*Z?94nAvh2L?44)_2kU8h7?|ug)V`Je zCJ@$5mL7JAB>DQ0nBWqNzRW0+{1S1II`$Wepdkg^uvI|=G(|oQvqjy9_w?7Q?MBHksKk-0g&Bg$#|C`Up*Fz4H z2fDGaT?>rtCI+9glmKQnGhJ8EN|b&_xDt&*)T-L5^Iq%gQ8w|AqV#KWSvS*@@pW6> zy!kR00(4(Fehs_zM-ke7`o#trU;g&<;m9bZ{h%S7ez703met;eo7sR{S)!(8`RIqz z6ybbqkS2&P%m(bukwd#N7(aVqV!lnWec2Q5<8>BG{_t_YE_`K*<56!`hY_Pvg~*~QJ&w$Yt% zC~8iBbKVrK4ah8t*n4Y+?@C|$^)BvWJlCT7i%)pX1uyKt;{EWvpWk~b-CTc4P1Kdp zvn>CeLUvNqh4MD8>?)LerNcty3=AX&i*a*+D_$pPJ%-AVi_J<$4bOEh-7a8Sy+L@c zjb;W|-Rpu3Fe3PZ)j*>Qwy0gRz;i`Qu;NfrG1;G3ta**U?(R23`)SDx0uWY>m}Nb{ zaM1{(TPn7a52tRR^3gRmFN1FGfB>0R{)*){Lh-HUg|~xMhx3=n>bQY#Khm2Rf6Cq+ zbaaE0_50HVeC9ulTT;0;bEeDQJNF5nKp4>$PZ}4Te*Qx@;U^i8f|Zcpo?&!`;l1fx zl;Pp80`>@ucIW=9Rr2Z284p5+QuAkR7qM57K8=(XNYBi1Zx$^4{O=;|?$>h^#}^f{ z;_urcAc5Zlu5dY+@YH`O2F)ud-wiu{svm=^Meu2*xk8p^B9O{yf05M#A=MmXsfHe{zv*`vmnau(Jsiyqg-3|<>otcw*rDT~HKYgadB9RO$fPd8t@hckM+rzO@Na zAiXPa%zj!G#ew^woiPxfFD?yRZ;8YWBJPWMRQ0H_R_)E#oR7Ck*{EuGY&%=dte~V?rA3rh&wLki^)B0_Ur$rmahUlAQ&YcGg1&@X(Y)c7G)2 zB^QhJrF{pUxVZ)aW%-eERsP1Vj_dbQ9lRio;Y>mFyo=T|{(UJzTT zx%*Z%B})Fysc!A+0Sj38LM_ppUvE6wr`l{(aIuijekAt!es>s=X(!uc>LBi(d2jdq zJ*$IXB#d2bDrj-8*1F{VcJ1}=sbssoO6x?tPylBj^keUwP8hh<-ipP0I~ z&De>pl9+-c=Bsv!s+Kt8S(|cG#wB+(RzBC2zfLPOtEh_smST6r!*Gw zfXn-^$62qen=3n90 zH>)vnzJ=k&h@c6d>tZema_p?kA(&`B(_DjNOevTebwEE-sRujujDX%}*PBFzOhGMN= zG{fd-jleogH5k+WRRfmut&Eon|17eYmX(S%;Kw64D)WpZ{cwJkNjiz9-lQo-uKabEGE4Xy}P_*n{fy8d_ znJsH4lSJEm)E7YMorv{L7IcPw*t4;_m-ItB^J4dK*UM_{rLn%HzV|ItiDdg}^Sn>6 znRLLcCiVcf$iQSY8#|myaOp8#e97U^TBzfiIM>g_%4)7rdn9=}=?5>!=%et9M>$DW z&r1rr1frM2!|6EVDC=PxQ}t;|f1QoVuz7tt4TyK@)q%so&xMVaXgcmsP1Y#w{@TDY zJyPej)srxQ&q7!*$bfQVPpwlBHrJO=+-S*e%A2zsLo>cbQ=Vm8B=KpeD=-!uq5@kd9NoT8{qHbeDICP zu*9t&zAe)k_{`Gq)I$cUu~5Y*lPa)k}=UkaJseigE@$YqqNu%Sk9D z<}+AA3^-QXw9${J%H^@gWA?AGGafgSEpMtgfQOIb4sBtuVg3@js_J7KWtXe|xxdV* zFG#$d)+U;r_1+BM>eE==*Iu|9XTN9o{=TExrTPm%ZXvz3X;%p4(#fWz9;{?K$)p zNY?k}=yc!K0r;{rNe352LlCp*zqomBy2NmIY8V4bHnG#&yhJp3IsP$D{A@BQ?C|b6 z*PSWMhc^|#n}+)4M;X^;@TQTlbj%aGAz%BDP=?pMHkke2Y|$rW+jd;4DD=mBudR|% zS0{wE^y*I><0ZV!rRcLaQ`PwRRtk74D<&7U@O~K`SZs=>b@}yt?p{% z`(Ise1>4345o=6JL@lXco>c{*H{O+Ic5CY14V&SI!%HE{aCGW`u4V%oZx|dWDwN20GR0=~xQR%s*vUjF8|a<$@l;1a z7YES|ld3s)MOEy~WqcHoA<{Gsa?G)tn**S^t~GM6cYEa+dvx?_63##!G%CChT5dxB z?FUZ*$oxMm-GOKjL8X_40+Ok}4SZy~Jnp25lyCh4@b=D85mjzOt?#_;Z891jiw^#`Z zm1pge-gcqf!^E)xc__>X=nUHsas-<48{1R3Do&cwMPrTx96EXt9vD;cT(@!VE>9#y6%y_;ecJ2yDM2n(HbdK2 zfnP#KPibclnR^iJBl?x5$QBJYQ>Y#n1yu2AJQ_NFcaRXgECsy^#4r1#(Z>NX@RXhi z9_n|(;QeA9vRr~Qd78fT=Be8{1WmBwgs8L&aCb1Cy1@Gr_HvjZxImUWlAXbPbSGbr zW#<_BVRmw~zrxS~xXEAy6fGhXB2lE+8p2XacP2xYEY@JMjts?3o?tA&#epY6C)ul( zt|yV)ybc$riq^wV$J7;8uFdeuqU`@^lVb!$WIc%B zO&nk0@7UK}o27~iS%Y}dXvt^sOwbtOmIU-^7%Ix3K_iGFx*jx6n+gh!2#*%!SaP3N zc0NT2?5TW?Fjb?AFmbKA{K%3(c*T$NV zD=wD4RFO+s50T$C-qT-Q=Xw<(7ohWCd2LAQRbT%hw1W$3gOIYsM;%+-z(A%PPEITT zv&S@@;A9!}xHv;yL-s!mlAp+}H$$l)debySZyK=S&ph|Na~ zct!*@=D!|P8`dulefwFd0)aCsRlcUlM7XMZeV45uK!BIs@iHbtjqShEgS+|0hY%sN z(<(}Y$%K_#ffnM2e{#VG~X0sO=&*81p}s^Htu}dBk#6lS$9*vIz;_dx$GeHgH-n!V&4HCqvbLl0p-NQz%)-fEE?9xaaFlr|A@#2%Y0_ z=`!;ZBLnuN-(58Nin^ra^jj-ZsYfj0BLG|o0O^oJ-32h{wO2!xgYrYzF->|@Fn(|n zL=@4*__2omj@vO}B6rja(PjQzxFkeQ9m@gz2-!n%<`5A$(YR@ziPndFmiEYv$Vj~D zJYVC$T|H3u-o&G&0TN;#ph1z3dt*35J(>jp1EpFJrpAW+xLJfzWR>q0GOUs11`G_Z zwN*}@NWlEJ;%pfY%#hq`q3ofxQ9!i#2?Im z30K1AZr)4>;Z0<;emiww#Gjf*=3HN_3)xamy0S^YqDBkyA{6%uVD-rXGA?s0{6%HB zoS{{*hr}ziD%0U|a6ey($fq4zGa&AKCYfO5{#`K0GtfG|i+A{2jViH@Nmq(I zDs5DG0g_h2 z7AQS7c*;q0DM9d^WxCqjzevw=J_~d!++qrq>LbzQ@^>?m^=T%vyEm z6lkO3GO!YWH!BXQu=L>}n*PTB{-dt6c4xItg}gY}Q5BCkpE7R+x=)OvSj?Lk;^kfR zhbj3VI`mZ-(!aR~zHR47z-AOS*m@}dr_sfLGTiXSO1F{vOC9(vdKD(nq0xMJ7%QOUhNrReD+vM5JYj#e;x{u*?I1XRu2 z#+q4{W=pR13*w?)>wjodDl*h_WwR|7-2MRTI?OgB_KfWOpsze_pgIW}qGOS`#M|b+ z3ePASG{HVk%&==27NIPWvK>Jf>tb&0C;@=)Y^x(F2rV8EkNBYhOd zvXoE}kxkkcOZe{0TF~PJ%{QEQMH$aDQXGcyNL`Si#D%*jZU8-_7=Md}7mS8>P`4+x zu8{HXr!+=jZ>Gk4Ah*HQL?9PYX6PW_C|?6gime{CDbOJ^^f_Vi-A)gpNs&}j!UqMV zYk0!r261pg!W8>YA@WPT&LVWhBk|P{*NJ-D)PitqZiiHARQif5aUwjPxm3e*Xt?cE zdJ#yRZ9nR`P%Ho4Qmz)V+LJGVgO$ebRsIl47ad=%c5kMN5?Lz~Z387-e&fTfiDE?2 zTYF0s7Ei_jM~>Eu7K+|W-ycDU1hvoOlpcvPyx-f=VqZS~%}P*AmWVo2o7nj8%KBU7 z;cA_e@}+4OoC#7o&v`r7nM8kUx8mN=zGUw86Wov}Ihp|m%+*iT9T`%?4`O5rf;Dy1 z=|K`!)g7Sv9Vr+wIt+RZZ<$|Gm^&6Qxu*%`iAG{jn?tB>vu3FRP68cRPzn<2*AE?YHIyYhoVm3}@zYwb?Q}pa2OvLdYDH}YZZyGjCVor; zYlHGX9;ogw4+NL>L$eJ99zEe|^|3_<(pjt_Xw;Zg;54}yU*k7jY2IQvBMG?l6}BW? zjjQgl5`yH%_#`4xby_SA2wky#NWt=v5*ouA23~bxz?ECmpy|U$6EWvwy>;F@)CeeN z6%mv`R}3mlNLwQ3P)yU7=y;c=d2t{B1ZS<}H3tq|C z89ii`>zdNJKol+_E8a7foKSs+K|CEXf-Z+v3LvurTTGQvE93+j7k&{ia@p-0UEV03zcFRC>#+hFU=mn%`p~ipmF2dmU`*SbpsCs`fwBUsF zx@hDWwzpn8OF-xg`>J-;{0=O7<_q{Vh@EH<&uM|^sjsh(i&-ijCi?N<1~guDbr#S2 zKl~=qi9Axfhaubn5gh12iIwS(U3f+Cl#y&laBIclg-6s;uEeSa>m#Es-^(Mxs>%l04XwDWvH=Z{W2lQ!X5PKW0Nfv zokWMPctz{=-?&Xf&%XvX{y0F7=RW!JT-`~rGROM)AQRCOIDAjxZe_D zvl;z^MZn|_1+>xkJ5Qf#k#w!_Ea#+;@G9}RGlOW7TQVv$`O_h?@uJcMNrn$r7xqyDGaEnuj_}5=;a8gE$+!;X zYBIFxn_AM(6-~PFfpH!LM{C9>+folE_wR3Z-dF91d;$5 zCJKBXGFAaDZTVSKqqOUn(6d!Zgt|@K(iTTzfqyyF5!{Z zXBeP}(Fu*Llu5K&JO1pGh#i%OiPOm-TIk2ciTlR42%7+Jopw>(P*3MA?xwb-ziTTK zu0-ljiHyvEL|KMImd4BGGi1P`5~u%(&d_eW56#WnOoCpAk57Yx+wX|LJ_{DN5thj_ zl{cK^Rd71&Uxgg=!>;D;X?oN0tgkP0$M%rcq&0_eymRIDbIG(BIg$Ka;w*k6vIDJV9e8erf==!pLxQ@g#iXhVz z=ntYy#qJk$CU9cn6a|hqzm}X@$!|H?$Yp7ELn=$?50O>S$n_=Ju$yZrV@Ml!MIjmP zRD>m&er{7C@0dd&D9EV;i-=VZ24!=XAkIU!y`~i3Mo&Mjj)kvWO>fl>c&_SzKs&w4 z>1l7*bqd9!PXdcuu>0RykVUyZ8-Q2QOyFJyV_6@TEk~?WJ5t zrgf58W%bOet2?It{U++80`{r=+3iy>M9FEXrb>w1Z3)IXWBVJ&q&A9=G>;U%yV>tP~!1upW~ltx#f<)-)Y<{AJCWl^i!v%rcev zU4FHbUcD`%ID5PstH_u9uc&}RuA+3XmqU^mzc46ELm>&hWSAXyF(WNHa~ zrinXTcPP6WoEvIA?-e?G21~J-4Vc;s4BE9BiX~%jIERVqftN0L?;moGXB4pQD1IV` zy`7_wWN;;1MQt3WT-{$)s5Q|pf3H(>J@)z7?R`t1oA)e)*_AO$IGcL_B2@ae_{HoC z#{4bc9m3no^;pOCyekc3=6D5Z>|S7jW-6)DyXA}=rDquKPL{;!JSDTCM2<|F-7J}lIDp{?<{{Rdk}O^;3vHjXSk11Uz5RNx z?#ug$zU)>v7q$hHF%zcUrsj=rYlWzuJ_m5;E$3S9bcCMz+Yb$qsVlRQZ(n_dD-Ypz zU}91xq&_qL!h;f~$bug+t-OQ;lBpmG$y^6Ww9MoDpeAs?L!Rw@lA*^9!b?>o?W;%i zn+V7wnqYpr)u^@J^T%(mRi;?B zzRVGD94ep^BAsH0>lhBo#LBX7{?L9$+Mgenx4kSo7S*)yp7`C_$JcB+`}Ol%r2q43%G(6P72rPXyBX~X-PKG)|~a^uz0ENQv=lbE|j zk8r5d>GArHj7Ng0xQArN(^uZ7ynCmI9f=G~q9)!`uJgy|X;!}p)XOI?-8UDjsN|0W&<6M*3`FZh+cte>_fz3;cJoD2rJm(b zlXF1)>EzPKpO+stybqkZv=DN<&j&;HdIA8W(r`dTH-4$6MDlH!Bnm(k&DxF%k3Sxtrcb*GS8mG*V{G8Er>*FmZd2`xnt1Rd#py3ws z&dC3Z;Tu9C`z|P>oYUUq2wznFkGnvednb-iuGWs2a` z*0td+&EumZ;Of-|?_NK<<75-u8W|>yB2`y7A6zKxA1&|QExwtgv;$=KA4UZLh^1d% z{`&SO%3tB8=wq6-<$UNNOtnWx3zCs z?bug7+Teb;a|;4&QO|m+NHg?m-b?a5gHE z@M839midVy6$A$G_|Pp}1iQ=)?g!`Gq18t|9oe=DKikh}=~WH^gz<-yvtU^-t5NBX zbjwz&Z(Xf54SzZh5=Ljf{|*18t4(r8*M2_Zv70wV9{fs89>5uS=w#{;wnc3>Ft)wsDPq;u2F94^mXHhWM$;Cm`3 zP#ih3d{A0}5+WRNalr9XkxW!ic~@jr+cW}>g+ZK=j5C*QE{Zj+QSZ+lB00#pK%frI zyb|}a_FXy{YB6}k$0TVDu80#1qI^a=XcLYze@m6V-fbt@evFfHxyZqF90#mhtBMQ zIXp~!KKN|An!>UfZN60GRe*@*J6P}0J+9j3cogAxv%7hHbzDv4Sk40Hx`zp4RY(>S z`=XW1uK_pxklkPgQkN^a@B26$N}yx%ciks1_(|6>V*=weh^Un)ej*lr z{1u#HeoZ-bGter$JzW3fbf{aS7M#DEKzsFSAKHo zrOMy50wB$Pc~;N!dS>V}woH4yh5BWWlvJHAwx7nfdA4-ek;}!rRDLXIc|05cTN9&D z7km48JA@5D@^vNpKv>`K9~w{`2muW`AK=9SYIswN83Il^0=ZEqKAnN(8@F${{l1)m z5iShaKIHX=fUKIu0I6u9%#mzwE9_qF`gGh}xx5_jpCR7CQ*QD@W&Ha3aUmHBXU9x~ z5_rVq5&^DB;c(GbN5^rH?+Ej0S#hnb_?a@}O7i>Y*rc)1LO+q-d+E!UTXH?` zml2|cJ7g)w_2j-OzU(h=&jOcuaq_z{@ab-+XiNsq^x~7GJu2M-@t7s=l6JGMl$=%v znpvKbf)Fs(-M&ku6IjpOVds(8Qv@5kMO;8dD!QM`cfSvtsR7>~753zT>2Gu~*D1=s zm*W_*%@v5%LO0iN2)|oemAEh%$N_uV`8n=eQKjc#aHOa&ay`i76Itmm5Kh%ta+f z@VDs_g4lN3R+yxRf60CDzm@u3Drc58OXiq-U#a6SyI0$90x2rbn9Y*l=LjseAO#YcFH4|oDn8$&H19R~PW+KJktIJ7G zPZC8a9EktN0-SAe@c`!KKJ*&TXJ08;{wNdt3pap!Ag_RvT5A4tf0hpbck)9bAFjn$ z8}j@24r;Eo3h zXddmJfa)?SJx6FPGPHryDnx*9kPH>vaS)SR`w$4v+8OX?VR1&K7&<&tV=g`XH}fo@ z$j3+R@zv%7%xCWd`VH*_({6TH=dEMfY1*IBPJITY=!bTU)1x8dfIF*m zzGqdE?1C%zi@x*5$+K`~;iqhw;-khx_mZ6Wte-dM>se@P1 zUjoW9^Syn;m9X|f5%~7}RlmV&T<>24N_tZK zGn18b!bsuj9)asz{q%r|BiUf<3mirKgZBgDh%PMF*A*+j&sOMc zTRgev3e&ud&qhO;5B3kvoO_zo7uE0!`xb2HVQxpMebX3y%e6VoKhLs9=1lU%1-CEc zs5gQiv)zr_ou>f{8QSmGV?(bIOsCXZPTm-J{%k?JfL&-cNpC*H@@+xccex<3 z(f#{D?b(nxa0Kb3J?fUQ{C7x-1&R>OqaEB#O_kKBa+AKyk8XuJorAh=!VZf+r(cI5|84Qt5yy=>yJN4}jU z@y{qaT__nkRSLZt+WgZe40fl298^4TFWo(v%sYmz-(-9UcwO>1v^LkfUv0u#gF=EVAtz>dY=Cya?C^MBEX5M z`{{O3&vBCc}M-A6vubysFoAN7s_waWwbKE!g&h#(Nj0;3<36cggOM-<%qfm4tvs2Nc5na-N zDYg@W6-#$>(Qfb^N{*m+_LqBHPmFjwkAW3;ZuU3=DRVFG&I0zq(EBh!i6F6sy=x%; zmf;^4h_^~w&aKhle*_vNaKpXho*lezj)CFB`JTiAk>7-J*gMY|=26}cF5=J#2&$U4VTh8mVo z|8w~r*hbXOXlE~G@Ab)}$KwOs^dn*^kr#B!K0MaUT(V`%F{JPY=FaJIMwH0*N7ab4 ze^A1>Qv*v#o&`;OPkZw?4w5C!Ui+B#ZeE(?JC0sJ1=DMhAXiwwX{m8sdJdv zIOVuGLZ~Fmd;j5Dy)51%QKE;|ih;?~f{6DRzc9SLOD%pA zFb74l{w&Lj;C}vkdoG8gsCYT~o;e>!2_ec*Y%t^}85!AO7HTAKzUY55A8clCW&n4J5v4gJ_(muk3>&u7)BUDtF<#H<`k6Yh|;vBq4opup6Y$pqs@Gu`&IVm8w zu*(n8dq*15e9kq3x zwIYXch(X{xkw~9yIg(I|f25RuD)a>Fein(0=YSpa?yU0N$G~b~m{UIQ8+WdT5rMu< z)dFECTI|RzrNOS;0qYjL8y7k`ZBBBX>|JS0WZpQU`L0u;-^rpTmW*}K;NImDceOg%jbG|}5zWEP$5a>_Um&%2mmO~uG4P6V zlwu4vf&6#mP{bOr!o~YU8~+%dG(mx&Uyi?(FOZO~^7&FMhb}Ir zc6KrKg4TCt#BGm)0NGMRP^fu7I&H;Z)odA7)}SX`5?G5VWlDoZh;9vtXHPXme6KoW zBgxSuCI%M&d&Yt!8bmVcPCnM1w~%4oeyEc(>S9M1no4$cNGDDOA4#wZv)r7JugG(P zRBs#J246nP`Wg~Hs253D(2A~h)(BFbfwvtY%~^1%mhv{bZ8wn8)!7|AdQSN~_E7Qg zB#L%+(#?b1jGg$)#7NSnQCWKjVw3{coqts@XNidli_(%Tbo0((2z~Grics*)f9vhA zEdrc$tgv{GI>cHSSO6TLhH`Jp0r|Xia~+Qdx*}s;?(xPsLd08Hy1g9Kk;BaM-G0Ig z^B^>RE{IRssC=wy)sf<5=|ViU$IZW(AL~ECdIv9Edeu-?_EU~0B8EPjeOY_{GTSTs zr1f<8mSN>!JluXZI@_T2vDYn0DtQM&WE8*tyIjaYo0E6Hh_Psvq8l}veb^+GY!#kP z{Rr@meC%q5 zYD>47)(VdX5#dZ~5D9%vmohx!I#$^@9I^Z_>4eFjbtV+nlHpW4|A_K(B(*y6z(r#fuS|38C zG=w`N-ppj|%Wdub%CJt#h>2@}_IHg{MD*YmW5}1ceLeo2NSy0ht(oAz<%?kB*~73Q zhO|>Wx=-|JgT;7g*cY+WnF*#EQ3cwP1b{>NKwb&jM4UkZZVKtgG=bdFD3m z<{KikSR6J#E%J>R;cOd;BT6(%So>>AiyjQ2dP}ni-w0WBIvLlHoneAQm)xE=9S45O zv5*8u@SW6%#$U-vmG#YrRb>sg*7qQXp%BZNr)K3~njb)4u`NzMPHS@og<6Hy^reUq-L91Kt6MVa3`TU|UQu8rk!6 z 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%0Aw?;^6{q;;<4v* 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�FL?-`+m2>wfH4)PyP-WTU-IJe)yc?`cswCP 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 m + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/spring/spring-security-architecture.drawio.png b/assets/img/spring/spring-security-architecture.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..61c7cf862e639c0388776c7df6468126ae3e384f GIT binary patch literal 59160 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

$c$s8i;A=+V1KL$ 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 literal 0 HcmV?d00001 diff --git a/assets/img/spring/webmvc-architecture.drawio b/assets/img/spring/webmvc-architecture.drawio new file mode 100644 index 0000000..cd714ee --- /dev/null +++ b/assets/img/spring/webmvc-architecture.drawio @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/spring/webmvc-architecture.drawio.png b/assets/img/spring/webmvc-architecture.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..6a645c88e531fb07a6a60801f849e0c8d8f674f5 GIT binary patch literal 14538 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 E50>^v?*IS* literal 0 HcmV?d00001 diff --git a/assets/img/warehouse-and-snowflake/b-tree.drawio b/assets/img/warehouse-and-snowflake/b-tree.drawio new file mode 100644 index 0000000..7466061 --- /dev/null +++ b/assets/img/warehouse-and-snowflake/b-tree.drawio @@ -0,0 +1 @@ +7VZNb9swDP01BrZDh/gjaXNM7G7doUGxHNaeBsFibaGyFShKbO/Xj6rkD9kpuhYDOhS9WOITRYp8z7K9MC7qb5Ls8mtBgXvBjNZemHhBcLG4wKcGGgPM/cgAmWTUQH4PbNlvsODMogdGYe84KiG4YjsXTEVZQqocjEgpKtftXnA3645kMAG2KeFT9CejKrdlBec9fgUsy9vM/mJpVgrSOttK9jmhohpA4aUXxlIIZWZFHQPXvWv7YvZ9fWK1O5iEUv3NhmSxuf21fLhJo/PrDVnRIN58P7NRjoQfbMHxCu1PiMc4BmYIzRB9tpWopm2PghqTr3NVcAR8nO6VFA8QCy4kIqUo0XN9zzgfQYSzrEQzxeMD4usjSMWw8Su7UDBKdZp1lTMF2x1Jdc4KVYaYFIeSgq5shpYtAgNA/WR3/K7nqFUQBSjZoEsrVMuSlWlkzWrAuYXyAd2hxYhVWdbF7YnAieXiBbwEJ3j5kQyYec9cRC4X/uyNyYhOkLG90mS078c7JsMP/jM25hM2Js2Hkq703a+7yMl+z1KXCrdJUDN1q+df5ta6s356ntQDt6RpjRJLGWzS5t1wrd/2aDUOIUAnH50RHViOOMgUnr+6FZEZqOeukim9A/rmJ+hrMQmcKHZ0j3uKU5vhRjAspFNPuHTV00mlDWHKtLuGX69RoGh0KUz0ZfowCfQosa7s16tu8aG6F6kuelPVLUZiWb5Wdf4oUPSvVIdm/+tn3Pv/5/DyDw== \ No newline at end of file diff --git a/assets/img/warehouse-and-snowflake/b-tree.drawio.png b/assets/img/warehouse-and-snowflake/b-tree.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..85be4c292fc3a091ff2376eed2a0067176ace77b GIT binary patch literal 4403 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/warehouse-and-snowflake/data-warehouse.png b/assets/img/warehouse-and-snowflake/data-warehouse.png new file mode 100644 index 0000000000000000000000000000000000000000..6057f9e22476e3831e76cd47a411573177be62f4 GIT binary patch literal 28340 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 BwzdEO literal 0 HcmV?d00001 diff --git a/assets/img/warehouse-and-snowflake/role-hierarchy.png b/assets/img/warehouse-and-snowflake/role-hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..bd11e70365b46d6ef403391992b02e0d91d25480 GIT binary patch literal 19998 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 literal 0 HcmV?d00001 diff --git a/assets/img/warehouse-and-snowflake/warehouse-architecture.jpg b/assets/img/warehouse-and-snowflake/warehouse-architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e1a7b1f839b17c3a28acbee95823097b4a718d4 GIT binary patch literal 14970 zcmb8Wbx>Tv_a{0?aCZsr8X&ln1Q{d{2!liL5Oi?YKyY^g!6m=|gAMKu!3TGDcYAzy z-|qWu?Y^q_y6zvht8bm#)qU>yeEQtad6|7#0DJ@>BO(3gLPkPU0;K z{yJ=c2S7wXe(fP6qoCnoqP_vV-UE=|;G+=Gp%U^E(aU_{GX}?@5tA?kwEv#m;cB9 z>k^^94!*;Gof!fW65^ZJ)%)+WLqNnwLMEVl!z)7wCZgy2V*Ea*is8e@HT8hFmw5md z(yKLmBz%Ar;NiZpH56&vy6W<;l*k#tq3joBT?!RfPpc`dEmK>(Dl>ejZe}>8z~6&B zS$OKQRAk)cs8S%Qe(jByb=t6=xh+`BA-|#D#%5Pi>-*NfOZ73q zOeK-dJwzHdRiZb!S)>?(OYctDFJT5*IK4dxBkoJX@ayxz9Q02XkDHm8vxG~nNC&rC zwJy#$1=@(XCTPpMxS0+{KW$eMV(e5*BWlcg&5MQ;Tn;-2ugB({7Z~1)DwZF`1t*dJ z447^=;KNDr`?+9NSx+h~DduBN)kYn|<>AL)Hz{w)036@sQ?sp%0_<4CX_ZBk~>{R!K=xN<}V)cP?Dw>HB*g9G(}pR2wC5Is_f%t2q3O^cqD1sM+A zQj&<3u*br^c%f*cteN5%aJ`;|07sj&B*0tpFH#GeB7&m2KdAgHq1$FAnm#+$wKAPkl4-FF?kNey{S6*O9D(HF>9^rzl@mC=}I}YiMix`OV zlGb15mI6s;^#y=VV^z~(XnyAU{MlZ_HmpWZDO1$e)}$fz>WM%6dS^gF^f3EIBAUeX zG_5)1*Jx}9m}A$Gz+oX8NCZ_Po^DAeYOvN2O5XVK-2bF2x#m7~n7p?#;@{Iy#}y4V zwdPQ89B1F!&d?-NHVx-(@S*X!Zq6&+c5h7P0I?m!Pdpk?VLwTZrG;Ikf&~!|@KG%E z&EU5`GpJK;3a`l-s;^5CoO2q{O_r2tF>~r~i?5dYP@{xEH*%e0iwi);%0b&nh)}{F zw63n8mC^IjdT=GmgiD!uh13{7&=nTi_dQ~3Q0C3d$7;M`Oq_cYN&Yu(oy%TAp^G4_ zrGH3ted$2{N<(5}dLk_#gUjJANLmmu$??v|X6XQvG_#& z!44>!|Ify0z!S6ii+Ik0SbCb}GBB#vqS@ifMCvl)F;q+A{fnbW;#|`c%985+8rfI0 zvB?H@*;Ok)pRyFs*|f-QEq{fq2yh)uFRL>e=*pV&6MT39$bCu|+ik)lBasL-sMEUi z*tii72R+7mcwoo8drZ5K;o$gbBHNS>Q^QbCL`*CIlryczLTokP4P*fE=x@G- zB6($JR?^_>)m1{y1chz{Q-tbVXGlqG4Ci%>wcNE2%*mokM5+JKNn15Zb&3vNybJC9 z*b9wc*4N+68_?_GS04&j0>Vk&`+IuUbABEy`@lf5Z;MkhisNne*(0UT)Q%^?n7JQZ zYA0iLL>f1Agr~RyL*K^}_xW_W_ZxtA6ZItAOTq-zJ`=vwBlX~tu8Bk=f2d}$caHzu z55HN4ayiUCa0G!ZO|9)k0>%9JScxeIRW6y^R}>HTd{F)sW34G-s9^+d>I-2GQFNbE zzW1zqkDe1bO5dx^S9u`&4f;-^^7dPJ$|?E?7=L z52eaOHVDcA-8jqCn;X^4sQw6g;P=}KkB~0e@a9@iO>CDpk4os@xDdZhWopg(UQU%T zG%t7j)j5YfNH>yzu*lL4Ah0LB-}OU==1XCZf=B_Iv{pk3%EmM8x)jj`mYIhV0!wOD z6O`C4`GaO+2&KG>sKoT#=MLIF`88GCzm7tIe*Z!iD=1kew4 zfAz#{q5{@8|2_QumyU+>8*V>zVU_8r6fJSPUh6QWG-_E+eTm)HZ?0Y?4T$PRbr04C zrKE(b6-XT$++bL%7&3_#$PM)VlSR_~(Xl$&c4V@Nrw-RQ1N$ZIMDAcCPyeeUl`%YF zZsMQ~53CS*e2a0TO@=^@(l9&5v`qz#T*iG@6Ji6&;I_tqfJ=T<{{MS= zt7GX%=~_mLBvegfR3-Xa{HQ1;$@Sx#<=>kBdHpEwwx(z0+GJ(k&+)Z_+ymWSh#FPbS_r4+%#Ge*ShC3 z+S%p0!|6T$&x63nCj=qIuniB)$SjKa?VG{tkOLhoMNOaJLGk~-udh1} zW7*Oa<6L3wpVM2`HLh$Ob)py{O-oJE%L$qJriX_UI*WXBn~u2f#iJ~&uLm*r=-8YW zmDRxXhCG5Vdeh36Ml|aB*wDvemgaJ5}raGj9#WmU;l5YWQPFYke z$8aeEvJB6TA1zmICxoy8-PxB2zo0qF#JzViz-#+3Zx&H>h#~qb=Za+l`k4YQi)ie^ z{pTA zu=QBMRG!gQDZ#3I6!w!&)_Co7X&7A1*WgcUYbQrSa39Z9av1HMf==Heuq?uwQi)a~ zdLGlq=Gl(PXubG0jJpdQ_j905k^FJ|ZkFkMuDLE!s>dkMlKT1Lf_O?D0!DPA>igm8zWSVh$VgFLe(XFBQtR$He-pDcvd(x&qY*B*I#Js zyb3*PQ|Y020Z>M1{k~f)^Q!`v?mXC)C%ypKbi!EXTm2rH?}B#_p`DhTCys)}h2N=c zHpMI~BJwX?ifs{>3+q~501U%A3!EcCA%Y$xtR{cx|DN~v$)GA$uI!Bg;-!hdob4dt z=tXKTFX=EHwF;gUHeAqMsIw}6#)@oYk!eJyrNX%%E6GqTT@Rv_gB$de z(nuH^>oax}p5hP~{VFC}ZMKbqw&mF@t(>qXO~K2vGlDZhSe{11u|vhi$mEFrUd3aY zE9O+1^amvGC6b5c29N`|Aod2i&W`c1K-6q!R_>=Ho!X0)AD4|j6eIiMg95}GPp;y= zK2Fi%_P}_nq3*W%8_C_%gIL3J2xZjpmO9z-JMTH74+UR)wqc?EK#2`BU+9l%&12$U z2{GWeB-9!!l+krHlvj_7tVLHrApAW;`GHGD7g5oZv%lDNvapeSvd8J9Bj|i~Ft=&F z)moCwL?tV_x?C6*N~=Ys$4;ouXQ_7LWg-}z7UdXS(Ao(Tmn5qT} zl`4Vr!;=y&=^A!K`T@B;4b2ESRQ(hDOqO7=-}d)qnqs@zuDNXxFPlZZZ zJ;i@IcY%hdL!~uxBy^_OqZ9u+1YSCMUWER%(Ce4g_Zn)x@=*($<_8Y)w~OClCF+nu zYhVpQ%h&G5)C?RYW?{@E3BjDMqPV7odl%JbT152@ALBMa2Tp8t*1>gNmU;?XA=42a zEuMeW4gSV(+5}We#%OU}Lfq3LCb>?A9li*uZs_S4-NaTU#mxRi7g(O(HvH&eR!1UK zH7DbkLSV4i{!N{T0I}3+Hr`hnBX2_rOZEu8838$84GYt!49$a3~?mlMF;bzvJ{(aBNDeqLF z*posrgo?TuQdTi%dDcLzVH#fpV_8k8P`eL5`8M^dr6RZQ5P7EcW6U~Vh6txY!2%5^ zc}e@}eo49>b*)|~#taOSgvW&$5;;PulFdQvIGyoj2$vEpTlzZA1NG;l*Sv>J*DnAf ziiFLZMZ?!OX|2jJWsd zLuT}SDGtVw6IqjWsehC(Hw4R2Pi`$7nlv|w$Uo0$L*+WH6#Jvvqg5>Z@tZ%l5aS-z zO)%*6+A9vLvo;v5)8i0>T~i0FfJ+|=GvmYRS&}9x~F4sA~y?HXxEqxXv=5CHi|!ezK4r7r!Wt-F>Q@f zb-T`_v1SIB!fuR}%nV~#Oy!53;(UCG*Q{3Mw35KhKF6vw5$ie;6Cux?DDmG{qbxz} zzx3hSh!a3W+6ZmMSA&n{a zupo@XeHE7Fu}phT1WN5S+f$#HR{nCW2H2xO^zU!i2K#=A?y=yV)svxWs;asEt==I} z-B+yRNrlusXo6mjCy7(JfEwL)o^ zT-kh~&&Paeo(xKsd(c@*eX^+j{)SDT0x5m{PhoRWCf8cLj%c`C!Kh-gDAhmzW8V(x zj}D^;o->akZAqSg{`R4^)-`nWP?epHZoRMOw=8i!9&YI~t)*-2#O>D1@H0?4?l*|G zQVnKDC+-j!vDPo2zfi^F6PG*Tk`$u}uL|6@rql~Uz9UI(y`hg?C&EDZI?nlgh5@ir z>@ff5^eoVOj9q6cVEJadx19KKA*d~ptzODSz9LlJpq~`8`%X{==ZdXTk6-HD!aG9i zgYl9>Qi?8chOu?uS+aY-%aU!5_I)c<-qE)jYAt%d$7uuM&Ns{tWKQxws?7eQajg-k z=)d`U-kHm`lgqZR-DoHN{R_bSZQj*PwV~6U49~joNNeA>yNEDnUwP0$V?_0qyZ{lO zp`-9=!U#sc4FTC&GS46xidCJqzkG8x(rMX&zCIzOjne$YWp6UY#P6_HheS|Ewra;c z?kTVP1u%N-mtG;`w~maV4Ey}vdH%3!dndy3azVh&hDfR*fxl?yc6q0Mc@u;+-VtL; zyG4#k9V>GIRU0h5U@}K_u~&&-AO5x3Jh5Up-jN5pKXi&yc%_q~JNFDsHSyd|k>}nY z3P;m#t6hKMYE0Wq?D|-0P9hCa=x;$-7BmFjbUP9^hfj4gxOc`!wqJ_S)gN0I8Fb7F zxQ~^o>lyH?Rji8iQEd^RRf=R#?%iY7HYy|cw+V*s&0GfPyj8FcUwy@Kx>rPNA$xR5Ft8 z$8zn&2Qi%I<4#=AqT_2YGWE|#W?jc6u1Pfz*A(fvV0XMZHlcO0i(LLvQN z*pcl?H9UnJoX{_8%Qcm&cbUjz%AjCSEA^60CK`*p}k0_4JhA%D`?GDd+8D@cbAgyUrT@qB+Kf7b;c$@mzo%XcTQ1{do zvm*J_i`4K9r{$^yN6Z+ErD0@_pr3hxnkgED_7&F=&sP!G$Fo}Gc8b|^`5?}m#9OqF zW%IGs#yAwy#VH4dez}X`m9WQ>yj-B=(EX|ATYW`ichWcoi%HR*n)YASwF-iUA)PJr zjoIziYQ_$hSXAKo1l@6TACQ7|R)S8hRvVN>2)5=(+m3k~4K+J*{L<;uzZ$;`7yGVB zEGqLUn)X8*C^g~KFr$YR;~Deks{6>&$TB9my}88jmk--K?PwcRtl{~w;i$)75w52L z6SIYvK$}~9`u#(Jy+g54+Qp6WW`RqgS9?x%e#z5{CmSF($3;#Lf&kI06=Ly-!Sh9gzhI(kh#7_E_ zX*f3FSsh=8L_87bLYxKa-Jk@su~CX~#tyF9{8jiFbzp{q(Ty};3NT-&-l2<(iE3pc zdXC`(6(5#23)TxO4IMmWG?}g^|oG;feMm@4ayMWNQRywsEOD^_` z;f5+dHPxJij{+(dtX@gA`_lO$KaY6armbE04ex?7bf6*(1Lxl_AMC890Eto^210(C z@IODPeftu&g;$V6`e>+`&Fh*6mOsr9@b?h+htq0)Wpxl;tQ!zDz|Q>Qwr(WRuVDD_ z+u}av*mjs?5O<0p)Vq~&%1B&~GbOYcehycFFr)}^^tf3IMwEomo^nEJ7MpQ5tYs2copnSTMeuye<$y=*kZi&43D=j!>7iBp}wNltpW zC-suwMo>H6?Ti^B9MehDjU!m@l+aYUrF}~Zaj&qAhuZ~Hb*hrY@&cY%|Bc#Bmr7)< zMoG#U#!Hf%A>HgZ+kwXBbMVP5ExB>X>SfbHFrBJ! z441ifz9j_JY{GPK70u5MeU)5)J-O^^nQl7jnT>PkLKdP;J>)~1uV;j8kMKKr)fXC@ z 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.length)&&(t=e.length);for(var r=0,o=new Array(t);r.row"),v=$("#topbar-title"),m=$("#search-wrapper"),g=$("#search-result-wrapper"),y=$("#search-results"),h=$("#search-input"),C=$("#search-hints"),w=$("html,body"),k="loaded",A="unloaded",S="input-focus",T="d-flex",j=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){t.offset=window.scrollY,w.scrollTop(0)}},{key:"off",value:function(){w.scrollTop(t.offset)}}]),t}();o(j,"offset",0),o(j,"resultVisible",!1);var E=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){f.addClass(A),v.addClass(A),d.addClass(A),m.addClass(T),p.addClass(k)}},{key:"off",value:function(){p.removeClass(k),m.removeClass(T),f.removeClass(A),v.removeClass(A),d.removeClass(A)}}]),t}(),O=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){j.resultVisible||(j.on(),g.removeClass(A),b.addClass(A),j.resultVisible=!0)}},{key:"off",value:function(){j.resultVisible&&(y.empty(),C.hasClass(A)&&C.removeClass(A),g.addClass(A),b.removeClass(A),j.off(),h.val(""),j.resultVisible=!1)}}]),t}();function x(){return p.hasClass(k)}var P=$(".collapse");var V,I;$(".code-header>button").children().attr("class"),V=$(window),I=$("#back-to-top"),V.on("scroll",(function(){V.scrollTop()>50?I.fadeIn():I.fadeOut()})),I.on("click",(function(){V.scrollTop(0)})),n(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(e){return new bootstrap.Tooltip(e)})),0!==i.length&&i.off().on("click",(function(e){var t=$(e.target),r=t.prop("tagName")==="button".toUpperCase()?t:t.parent();modeToggle.flipMode(),r.trigger("blur")})),$("#sidebar-trigger").on("click",c.toggle),$("#mask").on("click",c.toggle),d.on("click",(function(){E.on(),O.on(),h.trigger("focus")})),p.on("click",(function(){E.off(),O.off()})),h.on("focus",(function(){m.addClass(S)})),h.on("focusout",(function(){m.removeClass(S)})),h.on("input",(function(){""===h.val()?x()?C.removeClass(A):O.off():(O.on(),x()&&C.addClass(A))})),P.on("hide.bs.collapse",(function(){var e="h_"+$(this).attr("id").substring(2);e&&($("#".concat(e," .far.fa-folder-open")).attr("class","far fa-folder fa-fw"),$("#".concat(e," i.fas")).addClass("rotate"),$("#".concat(e)).removeClass("hide-border-bottom"))})),P.on("show.bs.collapse",(function(){var e="h_"+$(this).attr("id").substring(2);e&&($("#".concat(e," .far.fa-folder")).attr("class","far fa-folder-open fa-fw"),$("#".concat(e," i.fas")).removeClass("rotate"),$("#".concat(e)).addClass("hide-border-bottom"))}))}(); diff --git a/assets/js/dist/commons.min.js b/assets/js/dist/commons.min.js new file mode 100644 index 0000000..97d930b --- /dev/null +++ b/assets/js/dist/commons.min.js @@ -0,0 +1,6 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy/) + * © 2019 Cotes Chung + * MIT Licensed + */ +!function(){"use strict";function e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function t(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r.row"),m=$("#topbar-title"),v=$("#search-wrapper"),y=$("#search-result-wrapper"),g=$("#search-results"),h=$("#search-input"),C=$("#search-hints"),w=$("html,body"),k="loaded",A="unloaded",S="input-focus",T="d-flex",j=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){t.offset=window.scrollY,w.scrollTop(0)}},{key:"off",value:function(){w.scrollTop(t.offset)}}]),t}();n(j,"offset",0),n(j,"resultVisible",!1);var E,O,x=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){c.addClass(A),m.addClass(A),d.addClass(A),v.addClass(T),p.addClass(k)}},{key:"off",value:function(){p.removeClass(k),v.removeClass(T),c.removeClass(A),m.removeClass(A),d.removeClass(A)}}]),t}(),P=function(){function t(){e(this,t)}return r(t,null,[{key:"on",value:function(){j.resultVisible||(j.on(),y.removeClass(A),b.addClass(A),j.resultVisible=!0)}},{key:"off",value:function(){j.resultVisible&&(g.empty(),C.hasClass(A)&&C.removeClass(A),y.addClass(A),b.removeClass(A),j.off(),h.val(""),j.resultVisible=!1)}}]),t}();function V(){return p.hasClass(k)}E=$(window),O=$("#back-to-top"),E.on("scroll",(function(){E.scrollTop()>50?O.fadeIn():O.fadeOut()})),O.on("click",(function(){E.scrollTop(0)})),o(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(e){return new bootstrap.Tooltip(e)})),0!==l.length&&l.off().on("click",(function(e){var t=$(e.target),r=t.prop("tagName")==="button".toUpperCase()?t:t.parent();modeToggle.flipMode(),r.trigger("blur")})),$("#sidebar-trigger").on("click",f.toggle),$("#mask").on("click",f.toggle),d.on("click",(function(){x.on(),P.on(),h.trigger("focus")})),p.on("click",(function(){x.off(),P.off()})),h.on("focus",(function(){v.addClass(S)})),h.on("focusout",(function(){v.removeClass(S)})),h.on("input",(function(){""===h.val()?V()?C.removeClass(A):P.off():(P.on(),V()&&C.addClass(A))}))}(); diff --git a/assets/js/dist/home.min.js b/assets/js/dist/home.min.js new file mode 100644 index 0000000..f8cd3f1 --- /dev/null +++ b/assets/js/dist/home.min.js @@ -0,0 +1,6 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy/) + * © 2019 Cotes Chung + * MIT Licensed + */ +!function(){"use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.row"),g=$("#topbar-title"),v=$("#search-wrapper"),y=$("#search-result-wrapper"),b=$("#search-results"),h=$("#search-input"),C=$("#search-hints"),w=$("html,body"),k="loaded",T="unloaded",j="input-focus",A="d-flex",S=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){e.offset=window.scrollY,w.scrollTop(0)}},{key:"off",value:function(){w.scrollTop(e.offset)}}]),e}();n(S,"offset",0),n(S,"resultVisible",!1);var x=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){f.addClass(T),g.addClass(T),d.addClass(T),v.addClass(A),m.addClass(k)}},{key:"off",value:function(){m.removeClass(k),v.removeClass(A),f.removeClass(T),g.removeClass(T),d.removeClass(T)}}]),e}(),E=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){S.resultVisible||(S.on(),y.removeClass(T),p.addClass(T),S.resultVisible=!0)}},{key:"off",value:function(){S.resultVisible&&(b.empty(),C.hasClass(T)&&C.removeClass(T),y.addClass(T),p.removeClass(T),S.off(),h.val(""),S.resultVisible=!1)}}]),e}();function F(){return m.hasClass(k)}$(".collapse");function O(t){t.parent().removeClass("shimmer")}$(".code-header>button").children().attr("class");var D,P,V,I=function(){function e(){t(this,e)}return r(e,null,[{key:"attrTimestamp",get:function(){return"data-ts"}},{key:"attrDateFormat",get:function(){return"data-df"}},{key:"locale",get:function(){return $("html").attr("lang").substring(0,2)}},{key:"getTimestamp",value:function(t){return Number(t.attr(e.attrTimestamp))}},{key:"getDateFormat",value:function(t){return t.attr(e.attrDateFormat)}}]),e}();D=$(window),P=$("#back-to-top"),D.on("scroll",(function(){D.scrollTop()>50?P.fadeIn():P.fadeOut()})),P.on("click",(function(){D.scrollTop(0)})),o(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new bootstrap.Tooltip(t)})),0!==l.length&&l.off().on("click",(function(t){var e=$(t.target),r=e.prop("tagName")==="button".toUpperCase()?e:e.parent();modeToggle.flipMode(),r.trigger("blur")})),$("#sidebar-trigger").on("click",c.toggle),$("#mask").on("click",c.toggle),d.on("click",(function(){x.on(),E.on(),h.trigger("focus")})),m.on("click",(function(){x.off(),E.off()})),h.on("focus",(function(){v.addClass(j)})),h.on("focusout",(function(){v.removeClass(j)})),h.on("input",(function(){""===h.val()?F()?C.removeClass(T):E.off():(E.on(),F()&&C.addClass(T))})),dayjs.locale(I.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),$("[".concat(I.attrTimestamp,"]")).each((function(){var t=dayjs.unix(I.getTimestamp($(this))),e=t.format(I.getDateFormat($(this)));$(this).text(e),$(this).removeAttr(I.attrTimestamp),$(this).removeAttr(I.attrDateFormat);var r=$(this).attr("data-bs-toggle");if(void 0!==r&&"tooltip"===r){var n=t.format("llll");$(this).attr("data-bs-title",n),new bootstrap.Tooltip($(this))}})),(V=$("#core-wrapper img[data-src]")).length<=0||(document.addEventListener("lazyloaded",(function(t){O($(t.target))})),V.each((function(){$(this).hasClass("ls-is-cached")&&O($(this))})))}(); diff --git a/assets/js/dist/misc.min.js b/assets/js/dist/misc.min.js new file mode 100644 index 0000000..f365a6f --- /dev/null +++ b/assets/js/dist/misc.min.js @@ -0,0 +1,6 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy/) + * © 2019 Cotes Chung + * MIT Licensed + */ +!function(){"use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.row"),v=$("#topbar-title"),g=$("#search-wrapper"),y=$("#search-result-wrapper"),b=$("#search-results"),h=$("#search-input"),C=$("#search-hints"),k=$("html,body"),w="loaded",T="unloaded",j="input-focus",A="d-flex",S=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){e.offset=window.scrollY,k.scrollTop(0)}},{key:"off",value:function(){k.scrollTop(e.offset)}}]),e}();n(S,"offset",0),n(S,"resultVisible",!1);var x=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){f.addClass(T),v.addClass(T),d.addClass(T),g.addClass(A),m.addClass(w)}},{key:"off",value:function(){m.removeClass(w),g.removeClass(A),f.removeClass(T),v.removeClass(T),d.removeClass(T)}}]),e}(),E=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){S.resultVisible||(S.on(),y.removeClass(T),p.addClass(T),S.resultVisible=!0)}},{key:"off",value:function(){S.resultVisible&&(b.empty(),C.hasClass(T)&&C.removeClass(T),y.addClass(T),p.removeClass(T),S.off(),h.val(""),S.resultVisible=!1)}}]),e}();function F(){return m.hasClass(w)}$(".collapse");$(".code-header>button").children().attr("class");var O,D,P=function(){function e(){t(this,e)}return r(e,null,[{key:"attrTimestamp",get:function(){return"data-ts"}},{key:"attrDateFormat",get:function(){return"data-df"}},{key:"locale",get:function(){return $("html").attr("lang").substring(0,2)}},{key:"getTimestamp",value:function(t){return Number(t.attr(e.attrTimestamp))}},{key:"getDateFormat",value:function(t){return t.attr(e.attrDateFormat)}}]),e}();O=$(window),D=$("#back-to-top"),O.on("scroll",(function(){O.scrollTop()>50?D.fadeIn():D.fadeOut()})),D.on("click",(function(){O.scrollTop(0)})),o(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new bootstrap.Tooltip(t)})),0!==l.length&&l.off().on("click",(function(t){var e=$(t.target),r=e.prop("tagName")==="button".toUpperCase()?e:e.parent();modeToggle.flipMode(),r.trigger("blur")})),$("#sidebar-trigger").on("click",c.toggle),$("#mask").on("click",c.toggle),d.on("click",(function(){x.on(),E.on(),h.trigger("focus")})),m.on("click",(function(){x.off(),E.off()})),h.on("focus",(function(){g.addClass(j)})),h.on("focusout",(function(){g.removeClass(j)})),h.on("input",(function(){""===h.val()?F()?C.removeClass(T):E.off():(E.on(),F()&&C.addClass(T))})),dayjs.locale(P.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),$("[".concat(P.attrTimestamp,"]")).each((function(){var t=dayjs.unix(P.getTimestamp($(this))),e=t.format(P.getDateFormat($(this)));$(this).text(e),$(this).removeAttr(P.attrTimestamp),$(this).removeAttr(P.attrDateFormat);var r=$(this).attr("data-bs-toggle");if(void 0!==r&&"tooltip"===r){var n=t.format("llll");$(this).attr("data-bs-title",n),new bootstrap.Tooltip($(this))}}))}(); diff --git a/assets/js/dist/page.min.js b/assets/js/dist/page.min.js new file mode 100644 index 0000000..dcce2df --- /dev/null +++ b/assets/js/dist/page.min.js @@ -0,0 +1,6 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy/) + * © 2019 Cotes Chung + * MIT Licensed + */ +!function(){"use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n.row"),v=$("#topbar-title"),g=$("#search-wrapper"),b=$("#search-result-wrapper"),h=$("#search-results"),y=$("#search-input"),C=$("#search-hints"),w=$("html,body"),k="loaded",S="unloaded",A="input-focus",T="d-flex",E=function(){function e(){t(this,e)}return n(e,null,[{key:"on",value:function(){e.offset=window.scrollY,w.scrollTop(0)}},{key:"off",value:function(){w.scrollTop(e.offset)}}]),e}();r(E,"offset",0),r(E,"resultVisible",!1);var j=function(){function e(){t(this,e)}return n(e,null,[{key:"on",value:function(){f.addClass(S),v.addClass(S),d.addClass(S),g.addClass(T),p.addClass(k)}},{key:"off",value:function(){p.removeClass(k),g.removeClass(T),f.removeClass(S),v.removeClass(S),d.removeClass(S)}}]),e}(),x=function(){function e(){t(this,e)}return n(e,null,[{key:"on",value:function(){E.resultVisible||(E.on(),b.removeClass(S),m.addClass(S),E.resultVisible=!0)}},{key:"off",value:function(){E.resultVisible&&(h.empty(),C.hasClass(S)&&C.removeClass(S),b.addClass(S),m.removeClass(S),E.off(),y.val(""),E.resultVisible=!1)}}]),e}();function O(){return p.hasClass(k)}$(".collapse");var P=".code-header>button",V="fas fa-check",I="timeout",N="data-title-succeed",q="data-bs-original-title",z=2e3;function D(t){if($(t)[0].hasAttribute(I)){var e=$(t).attr(I);if(Number(e)>Date.now())return!0}return!1}function M(t){$(t).attr(I,Date.now()+z)}function U(t){$(t).removeAttr(I)}var B,J,L,Y=$(P).children().attr("class");function F(t){t.parent().removeClass("shimmer")}B=$(window),J=$("#back-to-top"),B.on("scroll",(function(){B.scrollTop()>50?J.fadeIn():J.fadeOut()})),J.on("click",(function(){B.scrollTop(0)})),o(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new bootstrap.Tooltip(t)})),0!==l.length&&l.off().on("click",(function(t){var e=$(t.target),n=e.prop("tagName")==="button".toUpperCase()?e:e.parent();modeToggle.flipMode(),n.trigger("blur")})),$("#sidebar-trigger").on("click",c.toggle),$("#mask").on("click",c.toggle),d.on("click",(function(){j.on(),x.on(),y.trigger("focus")})),p.on("click",(function(){j.off(),x.off()})),y.on("focus",(function(){g.addClass(A)})),y.on("focusout",(function(){g.removeClass(A)})),y.on("input",(function(){""===y.val()?O()?C.removeClass(S):x.off():(x.on(),O()&&C.addClass(S))})),(L=$("#core-wrapper img[data-src]")).length<=0||(document.addEventListener("lazyloaded",(function(t){F($(t.target))})),L.each((function(){$(this).hasClass("ls-is-cached")&&F($(this))}))),$(".popup")<=0||$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),function(){if($(P).length){var t=new ClipboardJS(P,{target:function(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});o(document.querySelectorAll(P)).map((function(t){return new bootstrap.Tooltip(t,{placement:"left"})})),t.on("success",(function(t){t.clearSelection();var e=t.trigger;D(e)||(!function(t){$(t).children().attr("class",V)}(e),function(t){var e=$(t).attr(N);$(t).attr(q,e).tooltip("show")}(e),M(e),setTimeout((function(){!function(t){$(t).tooltip("hide").removeAttr(q)}(e),function(t){$(t).children().attr("class",Y)}(e),U(e)}),z))}))}$("#copy-link").on("click",(function(t){var e=$(t.target);D(e)||navigator.clipboard.writeText(window.location.href).then((function(){var t=e.attr(q),n=e.attr(N);e.attr(q,n).tooltip("show"),M(e),setTimeout((function(){e.attr(q,t),U(e)}),z)}))}))}()}(); diff --git a/assets/js/dist/post.min.js b/assets/js/dist/post.min.js new file mode 100644 index 0000000..916e367 --- /dev/null +++ b/assets/js/dist/post.min.js @@ -0,0 +1,6 @@ +/*! + * Chirpy v6.1.0 (https://github.com/cotes2020/jekyll-theme-chirpy/) + * © 2019 Cotes Chung + * MIT Licensed + */ +!function(){"use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r.row"),g=$("#topbar-title"),v=$("#search-wrapper"),h=$("#search-result-wrapper"),b=$("#search-results"),y=$("#search-input"),w=$("#search-hints"),C=$("html,body"),k="loaded",S="unloaded",T="input-focus",A="d-flex",j=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){e.offset=window.scrollY,C.scrollTop(0)}},{key:"off",value:function(){C.scrollTop(e.offset)}}]),e}();n(j,"offset",0),n(j,"resultVisible",!1);var x=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){f.addClass(S),g.addClass(S),d.addClass(S),v.addClass(A),p.addClass(k)}},{key:"off",value:function(){p.removeClass(k),v.removeClass(A),f.removeClass(S),g.removeClass(S),d.removeClass(S)}}]),e}(),E=function(){function e(){t(this,e)}return r(e,null,[{key:"on",value:function(){j.resultVisible||(j.on(),h.removeClass(S),m.addClass(S),j.resultVisible=!0)}},{key:"off",value:function(){j.resultVisible&&(b.empty(),w.hasClass(S)&&w.removeClass(S),h.addClass(S),m.removeClass(S),j.off(),y.val(""),j.resultVisible=!1)}}]),e}();function D(){return p.hasClass(k)}$(".collapse");var O=".code-header>button",F="fas fa-check",P="timeout",N="data-title-succeed",V="data-bs-original-title",q=2e3;function I(t){if($(t)[0].hasAttribute(P)){var e=$(t).attr(P);if(Number(e)>Date.now())return!0}return!1}function z(t){$(t).attr(P,Date.now()+q)}function L(t){$(t).removeAttr(P)}var M=$(O).children().attr("class");function U(t){t.parent().removeClass("shimmer")}var _,B,J,Y=function(){function e(){t(this,e)}return r(e,null,[{key:"attrTimestamp",get:function(){return"data-ts"}},{key:"attrDateFormat",get:function(){return"data-df"}},{key:"locale",get:function(){return $("html").attr("lang").substring(0,2)}},{key:"getTimestamp",value:function(t){return Number(t.attr(e.attrTimestamp))}},{key:"getDateFormat",value:function(t){return t.attr(e.attrDateFormat)}}]),e}();_=$(window),B=$("#back-to-top"),_.on("scroll",(function(){_.scrollTop()>50?B.fadeIn():B.fadeOut()})),B.on("click",(function(){_.scrollTop(0)})),o(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new bootstrap.Tooltip(t)})),0!==l.length&&l.off().on("click",(function(t){var e=$(t.target),r=e.prop("tagName")==="button".toUpperCase()?e:e.parent();modeToggle.flipMode(),r.trigger("blur")})),$("#sidebar-trigger").on("click",u.toggle),$("#mask").on("click",u.toggle),d.on("click",(function(){x.on(),E.on(),y.trigger("focus")})),p.on("click",(function(){x.off(),E.off()})),y.on("focus",(function(){v.addClass(T)})),y.on("focusout",(function(){v.removeClass(T)})),y.on("input",(function(){""===y.val()?D()?w.removeClass(S):E.off():(E.on(),D()&&w.addClass(S))})),(J=$("#core-wrapper img[data-src]")).length<=0||(document.addEventListener("lazyloaded",(function(t){U($(t.target))})),J.each((function(){$(this).hasClass("ls-is-cached")&&U($(this))}))),$(".popup")<=0||$(".popup").magnificPopup({type:"image",closeOnContentClick:!0,showCloseBtn:!1,zoom:{enabled:!0,duration:300,easing:"ease-in-out"}}),dayjs.locale(Y.locale),dayjs.extend(window.dayjs_plugin_localizedFormat),$("[".concat(Y.attrTimestamp,"]")).each((function(){var t=dayjs.unix(Y.getTimestamp($(this))),e=t.format(Y.getDateFormat($(this)));$(this).text(e),$(this).removeAttr(Y.attrTimestamp),$(this).removeAttr(Y.attrDateFormat);var r=$(this).attr("data-bs-toggle");if(void 0!==r&&"tooltip"===r){var n=t.format("llll");$(this).attr("data-bs-title",n),new bootstrap.Tooltip($(this))}})),function(){if($(O).length){var t=new ClipboardJS(O,{target:function(t){return t.parentNode.nextElementSibling.querySelector("code .rouge-code")}});o(document.querySelectorAll(O)).map((function(t){return new bootstrap.Tooltip(t,{placement:"left"})})),t.on("success",(function(t){t.clearSelection();var e=t.trigger;I(e)||(!function(t){$(t).children().attr("class",F)}(e),function(t){var e=$(t).attr(N);$(t).attr(V,e).tooltip("show")}(e),z(e),setTimeout((function(){!function(t){$(t).tooltip("hide").removeAttr(V)}(e),function(t){$(t).children().attr("class",M)}(e),L(e)}),q))}))}$("#copy-link").on("click",(function(t){var e=$(t.target);I(e)||navigator.clipboard.writeText(window.location.href).then((function(){var t=e.attr(V),r=e.attr(N);e.attr(V,r).tooltip("show"),z(e),setTimeout((function(){e.attr(V,t),L(e)}),q)}))}))}(),document.querySelector("#core-wrapper h2,#core-wrapper h3")&&tocbot.init({tocSelector:"#toc",contentSelector:".post-content",ignoreSelector:"[data-toc-skip]",headingSelector:"h2, h3",orderedList:!1,scrollSmooth:!1})}(); diff --git a/assets/js/pwa/app.js b/assets/js/pwa/app.js new file mode 100644 index 0000000..c798fe2 --- /dev/null +++ b/assets/js/pwa/app.js @@ -0,0 +1,47 @@ +--- +layout: compress +permalink: '/app.js' +--- + +const $notification = $('#notification'); +const $btnRefresh = $('#notification .toast-body>button'); + +if ('serviceWorker' in navigator) { + /* Registering Service Worker */ + navigator.serviceWorker.register('{{ "/sw.js" | relative_url }}') + .then(registration => { + + /* in case the user ignores the notification */ + if (registration.waiting) { + $notification.toast('show'); + } + + registration.addEventListener('updatefound', () => { + registration.installing.addEventListener('statechange', () => { + if (registration.waiting) { + if (navigator.serviceWorker.controller) { + $notification.toast('show'); + } + } + }); + }); + + $btnRefresh.click(() => { + if (registration.waiting) { + registration.waiting.postMessage('SKIP_WAITING'); + } + $notification.toast('hide'); + }); + }); + + let refreshing = false; + + /* Detect controller change and refresh all the opened tabs */ + navigator.serviceWorker.addEventListener('controllerchange', () => { + if (!refreshing) { + window.location.reload(); + refreshing = true; + } + }); +} + diff --git a/assets/js/pwa/sw.js b/assets/js/pwa/sw.js new file mode 100644 index 0000000..3213b4f --- /dev/null +++ b/assets/js/pwa/sw.js @@ -0,0 +1,90 @@ +--- +layout: compress +permalink: '/sw.js' +# PWA service worker +--- + +self.importScripts('{{ "/assets/js/data/swcache.js" | relative_url }}'); + +const cacheName = 'chirpy-{{ "now" | date: "%Y%m%d.%H%M%S" }}'; + +function verifyDomain(url) { + for (const domain of allowedDomains) { + const regex = RegExp(`^http(s)?:\/\/${domain}\/`); + if (regex.test(url)) { + return true; + } + } + + return false; +} + +function isExcluded(url) { + for (const item of denyUrls) { + if (url === item) { + return true; + } + } + return false; +} + +self.addEventListener('install', event => { + event.waitUntil( + caches.open(cacheName).then(cache => { + return cache.addAll(resource); + }) + ); +}); + +self.addEventListener('activate', event => { + event.waitUntil( + caches.keys().then(keyList => { + return Promise.all( + keyList.map(key => { + if (key !== cacheName) { + return caches.delete(key); + } + }) + ); + }) + ); +}); + +self.addEventListener('message', (event) => { + if (event.data === 'SKIP_WAITING') { + self.skipWaiting(); + } +}); + +self.addEventListener('fetch', event => { + event.respondWith( + caches.match(event.request).then(response => { + if (response) { + return response; + } + + return fetch(event.request).then(response => { + const url = event.request.url; + + if (event.request.method !== 'GET' || + !verifyDomain(url) || + isExcluded(url)) { + return response; + } + + /* + see: + */ + let responseToCache = response.clone(); + + caches.open(cacheName).then(cache => { + /* console.log('[sw] Caching new resource: ' + event.request.url); */ + cache.put(event.request, responseToCache); + }); + + return response; + }); + }) + ); +}); + diff --git a/assets/js/pwa/unregister.js b/assets/js/pwa/unregister.js new file mode 100644 index 0000000..bd91150 --- /dev/null +++ b/assets/js/pwa/unregister.js @@ -0,0 +1,12 @@ +--- +layout: compress +permalink: '/unregister.js' +--- + +if ('serviceWorker' in navigator) { + navigator.serviceWorker.getRegistrations().then((registrations) => { + for (let reg of registrations) { + reg.unregister(); + } + }); +} diff --git a/assets/robots.txt b/assets/robots.txt new file mode 100644 index 0000000..45c34e0 --- /dev/null +++ b/assets/robots.txt @@ -0,0 +1,10 @@ +--- +permalink: /robots.txt +# The robots rules +--- + +User-agent: * + +Disallow: /norobots/ + +Sitemap: {{ '/sitemap.xml' | absolute_url }} diff --git a/index.html b/index.html new file mode 100644 index 0000000..1357b08 --- /dev/null +++ b/index.html @@ -0,0 +1,4 @@ +--- +layout: home +# Index page +--- diff --git a/jekyll-theme-chirpy.gemspec b/jekyll-theme-chirpy.gemspec new file mode 100644 index 0000000..c577306 --- /dev/null +++ b/jekyll-theme-chirpy.gemspec @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +Gem::Specification.new do |spec| + spec.name = "jekyll-theme-chirpy" + spec.version = "6.1.0" + spec.authors = ["Cotes Chung"] + spec.email = ["cotes.chung@gmail.com"] + + spec.summary = "A minimal, responsive and feature-rich Jekyll theme for technical writing." + spec.homepage = "https://github.com/cotes2020/jekyll-theme-chirpy" + spec.license = "MIT" + + spec.files = `git ls-files -z`.split("\x0").select { |f| + f.match(%r!^((_(includes|layouts|sass|data)|assets)\/|README|LICENSE)!i) + } + + spec.metadata = { + "bug_tracker_uri" => "https://github.com/cotes2020/jekyll-theme-chirpy/issues", + "documentation_uri" => "https://github.com/cotes2020/jekyll-theme-chirpy/#readme", + "homepage_uri" => "https://cotes2020.github.io/chirpy-demo", + "source_code_uri" => "https://github.com/cotes2020/jekyll-theme-chirpy", + "wiki_uri" => "https://github.com/cotes2020/jekyll-theme-chirpy/wiki", + "plugin_type" => "theme" + } + + spec.required_ruby_version = ">= 2.6" + + spec.add_runtime_dependency "jekyll", "~> 4.3" + spec.add_runtime_dependency "jekyll-paginate", "~> 1.1" + spec.add_runtime_dependency "jekyll-redirect-from", "~> 0.16" + spec.add_runtime_dependency "jekyll-seo-tag", "~> 2.7" + spec.add_runtime_dependency "jekyll-archives", "~> 2.2" + spec.add_runtime_dependency "jekyll-sitemap", "~> 1.4" + spec.add_runtime_dependency "jekyll-include-cache", "~> 0.2" + +end diff --git a/package.json b/package.json new file mode 100644 index 0000000..674f76e --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "jekyll-theme-chirpy", + "version": "6.1.0", + "description": "A minimal, responsive and feature-rich Jekyll theme for technical writing.", + "repository": { + "type": "git", + "url": "git+https://github.com/cotes2020/jekyll-theme-chirpy.git" + }, + "author": "Cotes Chung", + "license": "MIT", + "bugs": { + "url": "https://github.com/cotes2020/jekyll-theme-chirpy/issues" + }, + "homepage": "https://github.com/cotes2020/jekyll-theme-chirpy/", + "scripts": { + "prebuild": "npx rimraf assets/js/dist", + "build": "NODE_ENV=production npx rollup -c --bundleConfigAsCjs", + "prewatch": "npx rimraf assets/js/dist", + "watch": "npx rollup -c --bundleConfigAsCjs -w", + "test": "npx stylelint _sass/**/*.scss", + "fixlint": "npm run test -- --fix" + }, + "devDependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/preset-env": "^7.20.2", + "@rollup/plugin-babel": "^6.0.3", + "@rollup/plugin-terser": "^0.4.0", + "rimraf": "^5.0.1", + "rollup": "^3.20.2", + "rollup-plugin-license": "^3.0.1", + "stylelint": "^15.3.0", + "stylelint-config-standard-scss": "^9.0.0" + } +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..907ca3e --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,46 @@ +import babel from '@rollup/plugin-babel'; +import terser from '@rollup/plugin-terser'; +import license from 'rollup-plugin-license'; +import path from 'path'; + +const JS_SRC = '_javascript'; +const JS_DIST = 'assets/js/dist'; +const isProd = process.env.NODE_ENV === 'production'; + +function build(filename) { + return { + input: [`${JS_SRC}/${filename}.js`], + output: { + file: `${JS_DIST}/${filename}.min.js`, + format: 'iife', + name: 'Chirpy', + sourcemap: !isProd + }, + watch: { + include: `${JS_SRC}/**` + }, + plugins: [ + babel({ + babelHelpers: 'bundled', + presets: ['@babel/env'], + plugins: ['@babel/plugin-proposal-class-properties'] + }), + license({ + banner: { + commentStyle: 'ignored', + content: { file: path.join(__dirname, JS_SRC, '_copyright') } + } + }), + isProd && terser() + ] + }; +} + +export default [ + build('commons'), + build('home'), + build('categories'), + build('page'), + build('post'), + build('misc') +]; diff --git a/tools/init b/tools/init new file mode 100755 index 0000000..5baac5d --- /dev/null +++ b/tools/init @@ -0,0 +1,141 @@ +#!/usr/bin/env bash +# +# Init the environment for new user. + +set -eu + +# CLI Dependencies +CLI=("git" "npm") + +ACTIONS_WORKFLOW=pages-deploy.yml + +# temporary file suffixes that make `sed -i` compatible with BSD and Linux +TEMP_SUFFIX="to-delete" + +_no_gh=false + +help() { + echo "Usage:" + echo + echo " bash /path/to/init [options]" + echo + echo "Options:" + echo " --no-gh Do not deploy to Github." + echo " -h, --help Print this help information." +} + +# BSD and GNU compatible sed +_sedi() { + regex=$1 + file=$2 + sed -i.$TEMP_SUFFIX "$regex" "$file" + rm -f "$file".$TEMP_SUFFIX +} + +_check_cli() { + for i in "${!CLI[@]}"; do + cli="${CLI[$i]}" + if ! command -v "$cli" &>/dev/null; then + echo "Command '$cli' not found! Hint: you should install it." + exit 1 + fi + done +} + +_check_status() { + if [[ -n $(git status . -s) ]]; then + echo "Error: Commit unstaged files first, and then run this tool again." + exit 1 + fi +} + +_check_init() { + local _has_inited=false + + if [[ ! -d .github ]]; then # using option `--no-gh` + _has_inited=true + else + if [[ -f .github/workflows/$ACTIONS_WORKFLOW ]]; then + # on BSD, the `wc` could contains blank + local _count + _count=$(find .github/workflows/ -type f -name "*.yml" | wc -l) + if [[ ${_count//[[:blank:]]/} == 1 ]]; then + _has_inited=true + fi + fi + fi + + if $_has_inited; then + echo "Already initialized." + exit 0 + fi +} + +check_env() { + _check_cli + _check_status + _check_init +} + +checkout_latest_release() { + hash=$(git log --grep="chore(release):" -1 --pretty="%H") + git reset --hard "$hash" +} + +init_files() { + if $_no_gh; then + rm -rf .github + else + ## Change the files of `.github` + mv .github/workflows/$ACTIONS_WORKFLOW.hook . + rm -rf .github + mkdir -p .github/workflows + mv ./${ACTIONS_WORKFLOW}.hook .github/workflows/${ACTIONS_WORKFLOW} + + ## Cleanup image settings in site config + _sedi "s/^img_cdn:.*/img_cdn:/;s/^avatar:.*/avatar:/" _config.yml + fi + + # remove the other files + rm -rf _posts/* + + # build assets + npm i && npm run build + + # track the js output + _sedi "/^assets.*\/dist/d" .gitignore +} + +commit() { + git add -A + git commit -m "chore: initialize the environment" -q + echo -e "\n[INFO] Initialization successful!\n" +} + +main() { + check_env + checkout_latest_release + init_files + commit +} + +while (($#)); do + opt="$1" + case $opt in + --no-gh) + _no_gh=true + shift + ;; + -h | --help) + help + exit 0 + ;; + *) + # unknown option + help + exit 1 + ;; + esac +done + +main diff --git a/tools/release b/tools/release new file mode 100755 index 0000000..43182eb --- /dev/null +++ b/tools/release @@ -0,0 +1,240 @@ +#!/usr/bin/env bash +# +# Release a new version to the GitLab flow production branch. +# +# For a new major/minor version, bump version on the main branch, and then merge into the production branch. +# +# For a patch version, bump the version number on the patch branch, then merge that branch into the main branch +# and production branch. +# +# +# Usage: run on main branch or the patch branch +# +# Requires: Git, NPM and RubyGems + +set -eu + +opt_pre=false # preview mode option +opt_skip_ver=false # option for skip versioning + +working_branch="$(git branch --show-current)" + +STAGING_BRANCH="$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')" + +PROD_BRANCH="production" + +GEM_SPEC="jekyll-theme-chirpy.gemspec" + +NODE_CONFIG="package.json" + +JS_DIST="assets/js/dist" +BACKUP_PATH="$(mktemp -d)" + +FILES=( + "_sass/jekyll-theme-chirpy.scss" + "$GEM_SPEC" + "$NODE_CONFIG" +) + +TOOLS=( + "git" + "npm" + "standard-version" + "gem" +) + +help() { + echo "A tool to release new version Chirpy gem" + echo + echo "Usage:" + echo + echo " bash ./tools/release [options]" + echo + echo "Options:" + echo " -k, --skip-versioning Skip the step of generating the version number." + echo " -p, --preview Enable preview mode, only package, and will not modify the branches" + echo " -h, --help Print this information." +} + +_check_git() { + # ensure nothing is uncommitted + if [[ -n $(git status . -s) ]]; then + echo "Abort: Commit the staged files first, and then run this tool again." + exit 1 + fi + + # ensure the working branch is the main/patch branch + if [[ $working_branch != "$STAGING_BRANCH" && $working_branch != hotfix/* ]]; then + echo "Abort: Please run on the main branch or patch branches." + exit 1 + fi +} + +_check_src() { + for i in "${!FILES[@]}"; do + _src="${FILES[$i]}" + if [[ ! -f $_src && ! -d $_src ]]; then + echo -e "Error: Missing file \"$_src\"!\n" + exit 1 + fi + done + +} + +_check_command() { + for i in "${!TOOLS[@]}"; do + cli="${TOOLS[$i]}" + if ! command -v "$cli" &>/dev/null; then + echo "Command '$cli' not found!" + exit 1 + fi + done +} + +_check_node_packages() { + if [[ ! -d node_modules || "$(du node_modules | awk '{print $1}')" == "0" ]]; then + npm i + fi +} + +check() { + _check_command + _check_git + _check_src + _check_node_packages +} + +_bump_files() { + for i in "${!FILES[@]}"; do + if [[ ${FILES[$i]} == "$NODE_CONFIG" ]]; then + continue + fi + + sed -i "s/v[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+/v$1/" "${FILES[$i]}" + done + + npm run build +} + +_bump_gemspec() { + sed -i "s/[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+/$1/" "$GEM_SPEC" +} + +# 1. Bump latest version number to the following files: +# +# - _sass/jekyll-theme-chirpy.scss +# - _javascript/copyright +# - assets/js/dist/*.js (will be built by gulp later) +# - jekyll-theme-chirpy.gemspec +# +# 2. Create a commit to save the changes. +bump() { + _bump_files "$1" + _bump_gemspec "$1" + + if [[ $opt_pre = false && -n $(git status . -s) ]]; then + git add . + git commit -m "chore(release): $1" + fi +} + +## Remove unnecessary theme settings +cleanup_config() { + cp _config.yml _config.yml.bak + sed -i "s/^img_cdn:.*/img_cdn:/;s/^avatar:.*/avatar:/" _config.yml +} + +resume_config() { + mv _config.yml.bak _config.yml +} + +# build a gem package +build_gem() { + echo -e "Build the gem package for v$_version\n" + cleanup_config + rm -f ./*.gem + git add "$JS_DIST" -f # add JS dist to gem + gem build "$GEM_SPEC" + cp "$JS_DIST"/* "$BACKUP_PATH" + git restore --staged "$JS_DIST" # resume the git status + resume_config +} + +# Update the git branch graph, tag, and then build the gem package. +release() { + _version="$1" # X.Y.Z + + git checkout "$PROD_BRANCH" + git merge --no-ff --no-edit "$working_branch" + + # Create a new tag on working branch + echo -e "Create tag v$_version\n" + git tag "v$_version" + + # Merge from patch branch to the staging branch + if [[ $working_branch == hotfix/* ]]; then + git checkout "$STAGING_BRANCH" + git merge --no-ff --no-edit "$working_branch" + git branch -D "$working_branch" + fi +} + +main() { + if [[ $opt_skip_ver = false ]]; then + check + + # auto-generate a new version number to the file 'package.json' + if $opt_pre; then + standard-version --prerelease rc + else + standard-version + fi + fi + + # Change heading of Patch version to level 2 (a bug from `standard-version`) + sed -i "s/^### \[/## \[/g" CHANGELOG.md + # Replace multiple empty lines with a single empty line + sed -i "/^$/N;/^\n$/D" CHANGELOG.md + + _version="$(grep '"version":' "$NODE_CONFIG" | sed 's/.*: "//;s/".*//')" + + echo -e "Bump version number to $_version\n" + bump "$_version" + + build_gem + + if [[ $opt_pre = true ]]; then + # Undo all changes on Git + git reset --hard && git clean -fd + else + release "$_version" + fi + + # restore the dist files for future development + mkdir -p "$JS_DIST" && cp "$BACKUP_PATH"/* "$JS_DIST" +} + +while (($#)); do + opt="$1" + case $opt in + -p | --preview) + opt_pre=true + shift + ;; + -k | --skip-versioning) + opt_skip_ver=true + shift + ;; + -h | --help) + help + exit 0 + ;; + *) + # unknown option + help + exit 1 + ;; + esac +done + +main diff --git a/tools/run b/tools/run new file mode 100755 index 0000000..8072e41 --- /dev/null +++ b/tools/run @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# +# Run jekyll serve and then launch the site + +bundle exec jekyll s -H 0.0.0.0 -l diff --git a/tools/test b/tools/test new file mode 100755 index 0000000..83a9490 --- /dev/null +++ b/tools/test @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +# +# Build and test the site content +# +# Requirement: html-proofer, jekyll +# +# Usage: See help information + +set -eu + +SITE_DIR="_site" + +_config="_config.yml" + +_baseurl="" + +help() { + echo "Build and test the site content" + echo + echo "Usage:" + echo + echo " bash ./tools/test [options]" + echo + echo "Options:" + echo ' -c, --config "" Specify config file(s)' + echo " -h, --help Print this information." +} + +read_baseurl() { + if [[ $_config == *","* ]]; then + # multiple config + IFS="," + read -ra config_array <<<"$_config" + + # reverse loop the config files + for ((i = ${#config_array[@]} - 1; i >= 0; i--)); do + _tmp_baseurl="$(grep '^baseurl:' "${config_array[i]}" | sed "s/.*: *//;s/['\"]//g;s/#.*//")" + + if [[ -n $_tmp_baseurl ]]; then + _baseurl="$_tmp_baseurl" + break + fi + done + + else + # single config + _baseurl="$(grep '^baseurl:' "$_config" | sed "s/.*: *//;s/['\"]//g;s/#.*//")" + fi +} + +main() { + # clean up + if [[ -d $SITE_DIR ]]; then + rm -rf "$SITE_DIR" + fi + + read_baseurl + + # build + JEKYLL_ENV=production bundle exec jekyll b \ + -d "$SITE_DIR$_baseurl" -c "$_config" + + # test + bundle exec htmlproofer "$SITE_DIR" \ + --disable-external \ + --check-html \ + --allow_hash_href +} + +while (($#)); do + opt="$1" + case $opt in + -c | --config) + _config="$2" + shift + shift + ;; + -h | --help) + help + exit 0 + ;; + *) + # unknown option + help + exit 1 + ;; + esac +done + +main