From 1e5cd5df29db25f536b71e478e80f9798e3db424 Mon Sep 17 00:00:00 2001 From: David Young Date: Wed, 13 Jan 2021 12:36:50 +1300 Subject: [PATCH] Add Linx, apply formatting fixes (#145) * Add Linx, apply formatting fixes Fixes #143 Signed-off-by: David Young * Add macros plugin Signed-off-by: David Young --- .devcontainer/requirements.txt | 3 +- Dockerfile | 3 +- _snippets/convertkit-subscribe-form.html | 1 + _snippets/premix-cta.md | 4 +- _snippets/recipe-footer.md | 2 +- manuscript/CHANGELOG.md | 39 +++--- .../extras/javascript/auto-expand-nav.js | 27 ---- .../extras/javascript/sortable-tables.js | 6 + manuscript/images/linx.png | Bin 0 -> 101843 bytes manuscript/index.md | 5 + manuscript/premix/ansible/design.md | 4 +- manuscript/recipes/linx.md | 99 +++++++++++++++ manuscript/recipes/swarmprom.md | 3 +- manuscript/recipes/template.md | 118 ++++++++---------- mkdocs.yml | 27 ++-- requirements.txt | 3 +- 16 files changed, 210 insertions(+), 134 deletions(-) create mode 100644 _snippets/convertkit-subscribe-form.html delete mode 100644 manuscript/extras/javascript/auto-expand-nav.js create mode 100644 manuscript/extras/javascript/sortable-tables.js create mode 100644 manuscript/images/linx.png create mode 100644 manuscript/recipes/linx.md diff --git a/.devcontainer/requirements.txt b/.devcontainer/requirements.txt index dd031f6..2fb1105 100644 --- a/.devcontainer/requirements.txt +++ b/.devcontainer/requirements.txt @@ -1,4 +1,5 @@ mkdocs-material mkdocs-autolinks-plugin mkdocs-htmlproofer-plugin -mkdocs-git-revision-date-localized-plugin \ No newline at end of file +mkdocs-git-revision-date-localized-plugin +mkdocs-macros-plugin \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 556387d..652a72a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,4 +3,5 @@ FROM ghcr.io/squidfunk/mkdocs-material-insiders RUN pip install \ mkdocs-autolinks-plugin \ mkdocs-htmlproofer-plugin \ - mkdocs-git-revision-date-localized-plugin + mkdocs-git-revision-date-localized-plugin \ + mkdocs-macros-plugin diff --git a/_snippets/convertkit-subscribe-form.html b/_snippets/convertkit-subscribe-form.html new file mode 100644 index 0000000..8a65adf --- /dev/null +++ b/_snippets/convertkit-subscribe-form.html @@ -0,0 +1 @@ +

Notify me 🔔

Be the first to know when recipes are added / improved!

    We won't send you spam. Unsubscribe at any time. No monkey-business.

    Powered By ConvertKit
    \ No newline at end of file diff --git a/_snippets/premix-cta.md b/_snippets/premix-cta.md index 7f69d50..6c7cebe 100644 --- a/_snippets/premix-cta.md +++ b/_snippets/premix-cta.md @@ -1,4 +1,4 @@ -!!! tip +!!! tip inline end I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "[_premix_](https://geek-cookbook.funkypenguin.co.nz/premix/)" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍. - 🚀 **Update**: Premix now includes an ansible playbook, so that sponsors can deploy an entire stack + recipes, with a single ansible command! (more [here](https://geek-cookbook.funkypenguin.co.nz/premix/ansible/operation/)) \ No newline at end of file + 🚀 **Update**: Premix now includes an ansible playbook, so that sponsors can deploy an entire stack + recipes, with a single ansible command! (*more [here](https://geek-cookbook.funkypenguin.co.nz/premix/ansible/operation/)*) \ No newline at end of file diff --git a/_snippets/recipe-footer.md b/_snippets/recipe-footer.md index f4bddac..1a5ee5b 100644 --- a/_snippets/recipe-footer.md +++ b/_snippets/recipe-footer.md @@ -10,7 +10,7 @@ Did you receive excellent service? Want to make your waiter happy? (_..and suppo Want to know now when this recipe gets updated, or when future recipes are added? Subscribe to the [RSS feed](https://mastodon.social/@geekcookbook_changes.atom), or leave your email address below, and we'll keep you updated. (*double-opt-in, no monkey business, no spam) -

    Notify me 🔔

    Be the first to know when recipes are added / improved!

      We won't send you spam. Unsubscribe at any time. No monkey-business.

      Powered By ConvertKit
      +--8<-- "convertkit-subscribe-form.html" ## Your comments? 💬 diff --git a/manuscript/CHANGELOG.md b/manuscript/CHANGELOG.md index 4d7f0ec..2f55a5a 100644 --- a/manuscript/CHANGELOG.md +++ b/manuscript/CHANGELOG.md @@ -1,28 +1,31 @@ +--- +hide: + - navigation # Hide navigation +--- # CHANGELOG +## Recent additions + +Recipe | Description | Date +-----------------------------------|-------------------------------------------------------------------------------------|-------------- +[Linx](/recipes/linx/) | Quickly and securely share media/files with optional password-protection and expiry | _13 Jan 2021_ +[Komga](/recipes/komga/) | Beautiful interface to manage and enjoy your comics / graphic novels | _5 Jan 2021_ +[Photoprism](/recipes/photoprism/) | Self-hosted photo-management app incorporating automated tagging using Tensorflow | _6 Aug 2020_ + + +## Recent updates + +Recipe | Description | Date +---------------------------------------------------------------|---------------------------------------|-------------- +[Traefik Forward Auth](/ha-docker-swarm/traefik-forward-auth/) | Now uses for latest @thomseddon image | _11 Jun 2020_ + + ## Subscribe to updates - -

      Notify me 🔔

      Be the first to know when recipes are added / improved!

        We won't send you spam. Unsubscribe at any time. No monkey-business.

        Powered By ConvertKit
        +--8<-- "convertkit-subscribe-form.html" Also available via: * Mastodon: https://mastodon.social/@geekcookbook_changes * RSS: https://mastodon.social/@geekcookbook_changes.rss * The #changelog channel in our [Discord server](http://chat.funkypenguin.co.nz) - -## Recently added recipes - -* Added recipe for [Komga](/recipes/komga/), a beautiful interface to manage and enjoy your comics / graphic novels (_5 Jan 2021_) -* Added recipe for [Photoprism](/recipes/photoprism/), self-hosted photo app incorporating automated tagging using Tensorflow (_6 Aug 2020_) -* Added recipe for [JellyFin](/recipes/jellyfin/), the [FOSS fork](https://www.linuxuprising.com/2018/12/jellyfin-free-software-emby-media.html#:~:text=The%20free%20software%20Emby%20fork,differences%20with%20the%20core%20developers.) of [Emby](/recipes/emby/) (_6 Aug 2020_) -* Added recipe for [Restic](/recipes/restic/), simple and secure backup solution with **huge** range of target platforms via rclone (_25 June 2020_) -* Added recipe for [Duplicati](/recipes/duplicati/), all-in-one backup solution with a handy GUI (_18 June 2020_) -* Overhauled [Ceph (Shared Storage)](/ha-docker-swarm/shared-storage-ceph/) recipe for Ceph Octopus (v15) (_25 May 2020_) - - -## Recent improvements - -* Updated [Traefik Forward Auth](/ha-docker-swarm/traefik-forward-auth/) for latest @thomseddon image (_11 Jun 2020_) -* Added recipe for [automated snapshots of Kubernetes Persistent Volumes](/kubernetes/snapshots/), instructions for using [Helm](/kubernetes/helm/), and recipe for deploying [Traefik](/kubernetes/traefik/), which completes the Kubernetes cluster design! (_9 Feb 2019_) -* Added detailed description (_and diagram_) of our [Kubernetes design](/kubernetes/design/), plus a [simple load-balancer design](kubernetes/loadbalancer/) to avoid the complexities/costs of permitting ingress access to a cluster (_7 Feb 2019_) \ No newline at end of file diff --git a/manuscript/extras/javascript/auto-expand-nav.js b/manuscript/extras/javascript/auto-expand-nav.js deleted file mode 100644 index 00c64e3..0000000 --- a/manuscript/extras/javascript/auto-expand-nav.js +++ /dev/null @@ -1,27 +0,0 @@ -document.addEventListener("DOMContentLoaded", function() { - load_navpane(); -}); - -function load_navpane() { - var width = window.innerWidth; - if (width <= 1200) { - return; - } - - var nav = document.getElementsByClassName("md-nav"); - for(var i = 0; i < nav.length; i++) { - if (typeof nav.item(i).style === "undefined") { - continue; - } - - if (nav.item(i).getAttribute("data-md-level") && nav.item(i).getAttribute("data-md-component")) { - nav.item(i).style.display = 'block'; - nav.item(i).style.overflow = 'visible'; - } - } - - var nav = document.getElementsByClassName("md-nav__toggle"); - for(var i = 0; i < nav.length; i++) { - nav.item(i).checked = true; - } -} \ No newline at end of file diff --git a/manuscript/extras/javascript/sortable-tables.js b/manuscript/extras/javascript/sortable-tables.js new file mode 100644 index 0000000..fadda78 --- /dev/null +++ b/manuscript/extras/javascript/sortable-tables.js @@ -0,0 +1,6 @@ +app.document$.subscribe(function() { + var tables = document.querySelectorAll("article table") + tables.forEach(function(table) { + new Tablesort(table) + }) + }) \ No newline at end of file diff --git a/manuscript/images/linx.png b/manuscript/images/linx.png new file mode 100644 index 0000000000000000000000000000000000000000..f4c3c214e1b031403447db258e0f7617a6437a52 GIT binary patch literal 101843 zcmeFZbx>T}w=POIjT1DudvJ%~?oNURX*_5M?lcgByAw1(fZ!G+Ksva)26qpx0rHyc z?ETxRciyXWZq=>2e_U#H^{QsBxrWR+=9uIA)(TTsm3xFrj0y(__eeorS`!Wqcm(?p zAtS3C#AINl?JRT^ELBwCm|*9~a3BCN90KeN z0Q-mnNd7sO1w4U+|Mfc%4lcwR4)nW?D(w5=FBbNBxaO~KU=Hx_7Qmw%_M5_r zKF%Y=Q>L4XFR*H1O4+ln@6#%uEH5$GaGKS6Vf4BA^I;jO#U5kAd--sILKEU4^pFHx zL@4Ff`~vciJGC`F2Zo%0#z$bspCKJCmyZ~3zc+5(54*QImlqc0n;H?yLqPvN*ie9r zO4KO>v?#G~|2iO4;(+0BaUku#jub2a>Xp*ADQC&Qf2D;r6#Q2!*#G`_Gz_Rs+C1;6 zT4NRo?oRl(q;M!KQsB$-%zjerZz^a$nyDUG|Iz~v#SR_#_=sdpkb~e4sbe3*l*#8f zro^EH{O6b<1U*^i?{WpR{o6+Jl#H-G6iikn{^+8T6ImVlDsm5M@Q3NdHDP@uv~>ji z(FNEHD+jVfI33XV@B2{(zrY_2zapHO@|}1D@7<+g#li78ZSj)5df}JEi4HforP&cufZ@huW#r!YEr3BPz0= zJGRN$(B|CNx`_DF%jY+=+{{vL_V)2jyQsae3qmhV z{Xjw7tC%1ukZZRjI{;nG)YwOZ+jZK!C3U{#jqL2HRt{N@2xkXaZEMs{n3e0S(>gJ@;I6b3p zZ%Q!zCCI(O6=BmQQDzRRZcn3#bk7LTuRWmR^TUI~y+=K%%4$gYm6S_77c01DXtIEP zZJ#~iz0}6W>msChISR!pO!hqwKbTt@QlN$1s=YsUH+6KL5iu`YS#D%rVk&xih8eWx z(J=y+W)~P1W-8gu#Dd~5t2e_9AL{cLM_)c$p}YRwW2`Rv$p=F9o}#-rm~$%n{@575mXMeKA&>EPQ(YrJPY zdtl zAQNB|s^{%5<2S%F1L=KaIliE(kWqyaQmw5oF9))3C ztr7Gbc~YrcwJXABvkJHb^i`r>KgndFYN{%G@T-YcMej1deW?HB-dCirG*U@@c7fTq z<4iU-JIC&SG>PQ;l>3ow@6TQu2`V*_Ai>s-Ve*b*Q#_lAc@R)i? zTx_S)yHK5DOj#Q-Q5WTt342_NA6Fw90>$N;%WrRI;AIKRXX+*!XiS9qvg6`R$`P_e z+z3d1c;2c4Rbfl6dpPZy0#N{hAvwRFt~ZvX-v{!qQjY+BkshI>V!o>7ji!YLB_%T% zqW%)1x9i+%Oxyw@tn5YEHeRyn!asLEn;c`*r?u1@<6{1VMLWuX2r5U}IkHgw zhMipBlU=SR4%+8hi62Wk;j0UB>FK?YPqViLD&g9V$?)&&Tz@vKCEIQ|kP*Gn^*6j5 zG4@)6Ps>QxG(P9S>*khi@IU@Ow|?=if|KkmW^GH5P)~le@_YM!O)*#G)$r=oR33IW zcmtw{h?7BiaWMT$(1F$Nr<3(Vqm=K906b`}uvguwW9H3`*nN+PO=wzN_Rme3>$7b} zGm8-9u6vU5Mgxa0JH*#@(VyC)5LOD+TA%ozMakt?ebV&Hv$$DKpfN!cyP@%Z)u{UY z^QmRKb)AL4xR*qe_f4IYI-UEXTMMax=M$cj zISwqTp)>5tbOL%b95kAS%-38xGkvp)dLrg@8|mpWuzR>x_#z52Jf$Fmx$S6GuP=L~ z-VyZPkb&{8dpP^i3&kTy(B#G^k_tVyvYSML$cLe8M+|)VsxpJEgZFk-Ez>r^%Gm40 z&&7B#pWCmYPHpzdg z6x5z~@;PN`YFpT8c8awtc>C^7ZeV*mPcYlMKG|Ej?BI*nCY}Vzf|q@v`Cf-w=w+r2 zhv(US%UkSuvZ@1&gEu}~dzig3_ooU`qh^~jyc62}{rVr&T-pv@bqqheztbO27CT*i zagy9*$Ty|aKbdmKkr|Mb+~2TQ1eQZWV>C`QkLq$8BXo3-VSOtBjD8sD=yWvtn84s*&yxc7#bUq1V0us8 zxhg@>yvgQSE=slsGjtd9<&xs(Em1(W$XlgjaIK`CLY%P2u)WC_Pg@}|1=#Ll*%U?m z@uF8d`5I6&k9peXV>!eTjfmuh!63*wvKY?Jeviw6#C=CN>wTNg8vfcP(uT3$%?nTe zpH`Z#{%Hoj8yH{vkIP5!RAsvvXpIrPn)EkUngXzU*j!79h{?I9u1efq@z2U30TIy| z+5(1Ed#LcfA#dm8hyZmBn782^Tk1O(JbD*arpynZC+ zoPjpo!&c|h?z;Ip^KhaV|Hu3Hz`74sM8+<<_00WBuDrxwNX5o&J{dQ9zaz2`zey=! z?zgt^R9|3oFa9Ya%dAa|7$Q5lbYBX!IK2@`Nz;ffsUxKzzf!*N_j)eszOb=!hIN_d zd~h=D|ML|+Q6hj04rH(;H&ivmmfQNly)m4TBtl(iM=3Gd$7vq&b3 z{qULKpf5FcFR3GU;66gA1HN@X{IX|hT~t=hcbxE$o3G+jmX?1MHM=mIl>%j}9dx1L zk{+Ybz$Z&eLpKFo5d_?J4X#usEko{|jkeC9otAUSUTZ%b?7LA}Qir*7fnN-w9#y_H z+ep83aTtDs3T_ySED0v@n|XOj8NLz?TykW7UOX(KeI59Du=6brE9Sf&hZ733kDhha z&5jPSzf1qZx(yjwXMDoXJ7a%3#}^sTnR$H{sXUG;PMkBtEp+EsxZa#H^+jxa*eg#Q zIGZVWVzNL!YC$@x;CU0w-|ka}(s@*m^m7u~V}M`05GfOD9RYwysVv(?8k8W|h&NCM z@kGJeOI3lZFRG50l;|$4D%bx)pcewuUQ-sfN3nQGbgYlnGuMx7*ud^f0!&3lH^c*d6OaJ!Sh-h<+5R;sz@sb?K$_sTl z;de0VZ5~oS>?bM2-O^gaD%-Hbx0C>kP7^)9Gyc9 zTmX3eecVFgIL!5~Y%gpGqv5@oJ*{PU?b) zcU`n_c=7jtTs`wu7{)gfkev$(`-n7I2V!GUiQ?VOBgaX=daDa0@EarKd;{%Pd@(ya zyMkwizgEswQco&2`SJ91d9r5Re)?%$RN#_lR=J;(F6$JBIJ7OQHzyP~`M}pE6*3F- zlt2P*eYM#9U|Yd4*EDHG;@LCO`-6alQrEYS(#sW}+32b}TeE~$``h(Bg`b|{1RbKm zeRoVYvYz&H$3q?e+ZYVexVg!cJ0W9#>9ReulPuI7D;EbidgymOtRq4ValMn1>L?{_ zZL-fYDaCgB98D0q+aD`krrxBwdU_YQz!t47Qt?tV)2f9)jOnbOmrH(hKQPHBc?j;7 zzY3$q~N=wbp1{0S=L%G2mkSg>@h$HS7W7ia31u57;(LnOgmoD@k*9gll)GS>n{Mw7Nw*$&bA49 z%w#2*1_iim$EyNWD()=m0j>5*L3%?+o`#F~t0e3MZEtjt&q*p4Sbgu>KSZ@jPonKE z0s_zgXqPy;XDeBONzW_yX|;Dh>gc4LjN$NV?(=s=dQLk& zWQFvPSf7*e@2!{2bVVdlPK3zHZcv>MtLbEWu<$_O++{le?garWCKleRcYF2Qpi$P7 z@K%o9G=ina&3o{`8v)m_H*iZIMK2vg46LEefyccHjVs?sltbG67It0rl#beK;PX&; zwJeyUvbqz*6_HDuKNQlEL{2;c9btLt-0|W*dTsgfkbZHM!0)r+nEFIwf;3crV0f1a zCD~ti-nx$Ct{DrqYgkM|G%O^PYDIt8Fk;1sN0;xPOv<%Vs)_t;I@S{_!`;FL zCk4N{3UXii$R1Qules&J5-Vz0unup?Xq#O{pI7F6^!>ZrQP=1}$%-n;;PEbdJGL$QA`lJ7k))rex5yZLmX1hSR1n$j*B>l)S!m3UNU&MhABj{FQZzzH)WwYFHI~HFMrG*l85b z0^wjcGzbZ3l+LRHUn4_-r?3=bR90|Ebpa%CcOLn}Jmf|}kc=aDFNt3a{e}Bc&Ko*( zrIfqwiY#tSll`&(W~2hYyBT&N338Tsz6!bhWQgT@kQ zQPs+W!uI4UNb7TLgZ#bvU4=;^beGZbnM60h{zBAOg7mlV6W$zkvd>db7pG=xDv2)og`ZNiUY-Wl&3^VqblK^JOuTI5s3Q2G zO&mM?%6G$W?H<&6+=iE8pG0xbzQmo$pEbc@fH>{{%8`jE)@=eF;y z3Xnhv0=zdxIl0Y8fvR*?^oP=+RtCOcH&t{Qu&Fh41jIVVa=wxhsy67EsE=$bL+~F3m`>u9 zPPO{D_I{<%<_#mD9AnLOSi;n>L%1q#&z}1}Zh!FNfI(Kh>YE}LpyYdP5i|DvK9!md zS`Dx-Y6$Iq6(RJbXB3_D6mf*8N|5$=NXdfS3tr_soglt8bX$@O@anzF2M1bQ zf*7iRm#{L#sPxqwC$RDZ*p=W)h#q$&)|3#pJ@<&Jj$BpX8>HRz4P-j5T`;Iu9r>E6 zqg|8MP+sDOu7%OL%X%cFQ4v;}{5m z)upKgkXC~yqDh@MSshf(vtHZz059sM5_(z5-Co)aHnj?J_Ji!54=}~NGq5h)vXym5 zR6@QAYF(P8IwLB5nzd<4icVs^bm7Vh*oLO-5`eAcpT7{SQ$W(OVlzn2Xq>pY*$P_Aj1} zwzj<&E%w{d4O+-js~y(eB@o>UDDssjK*Vo;j=8r;qgo3Ehq7$!$pbf;O*S~ZGkTEx z)(X_eZ=6cDeLaXCvn*Xe@E}IsKWMB+UFRxBle||E64BTs+%_+q0zIQm$_>svO@`T1 z&1eA$;cJ}TqNM@Gg}A0f@?ZhrXZPSue-?LA)}wyx)%ytQ*q32d8`Qk5!6=)GtauFM zsBTrS3UFV&tHaFR25tZR6?H3F0A_=RSglj;wIWy10;0)Jx?Wvr`LCSv7s+FWdH)b~ zzH0M4)!0f~b1{Ch*z>fEXK*`DPVOmo9HOnz5K5*Mb<|9VS^JNHtR8=kYdrrj$)d=( z9V%73`myfDmBUYGvE{RcZHu>77s1iI*KM9nm|uWS+JCt@BB17% zy$c_#AO~+uuXA_cSg*}E`sH0x{hX=z8qS?)EDA<{e7{Br&|fB#>J9y;`ucDJJ_p6u zL2Hy6yt;&cWy$~icPax`?oOw%3j9ws5*GO?y7-X%Vv-QN2cd z<5Q&)wj{~mpQtzbZpW7S1{C|dt2H^)ZjAXsVmwvnJe?B zeU!cAWMBOX1(#Wk`fBxyr>@M;FV2f!C@tuO?P|AG3wan@nCG)kl=bY1mR#apy^pFy zayDjMs)aQ?_Qm_+kgFoGke(T(48K!W>k#}c@#$sKCy}t-DgAk!m-SqAQAZuMFOCmO z3ci(fT;k2`dkmLs|3JN@%t9(+j#H!cezfI|)9@5nrM3_e0jt`Jg8tm<f^OTc}+~pgTz;%G!kqpu6bACm|bnC27#mA3RJc`POpAIt!DN;VM zO_W*xuylTvlA~~!Q?*cz{l8-R%k9(UtIzk`%FD{PoHjavpOuZpo7?o*R_-Jotlu=#( z=t5CP$4Z&Fpul3YHPE9L$tC*R3n3Mxu2!<{v?eXmIfrwX7C{2Cx9>gdeG_fBrLo@8^QVR=v z?Krx5Y}`iQBIU?YkLT8}WIWsoSxY z`)ICcG#nSP4GzKIvpuGLi<|I>JHyPwZn7#J=$a~UCRsNE1hEa(z$%6x9db!WFSVNa z;Ovr1UwE;1pyf6dY{z&^XffL0e0+iC|heXU&hDKN}n#|ZxQMg|VGy>V! zvMlz%6lsuTMi4Rw~72-jUBDAp~&HMi^u34HCV&ah&Yb% za0tx_JVZLF(EJ<6Y(dYqt73g>(dL9-$=t(ApMVRksmRM)5Jo#zHm3wIz?N(wg@o6^ zC}2ryddsh_h`4%0zn65V3g~G6-Lw^DRS1cp}R8*Rg-`mgzqMYXh^eKOc;67&X zq5SfYuRf%#mb5v;qQdaUEFIi&0iX;RvEh(brAy|IWPp(#2CADv9iqtl^HvI^!jhrR z%mm5req|9*5m4K3TM?bdf)s>K1rJaTpUqUw7E|9`YQWUjzuG!EzVTAm=Pyh)1?vej zd&+Gf&^7P4XCNH^zzu~G-+2V>mRJ9VD_C2air!9mha?`uXj#<-J{a1{eh{HWhK(<<)vxYf$YNRIi& zx`L{a#BESR5=dJDf`6qYzQ)*(o0^fq5jC~m(Q$%wiu@ajo_Pbak)-cm?s&4C33JDP z5-^zjl$|hfo}s6X{vi&`b^nvL4X9DS#*ny%M%?VvZa(z z8;Q=3_s+r)9+nK+!p%l0JjTaYu#|1`5GLox&$gidO|tk}Q<;;aejAXZtbDET21H5& z8yAF%vgQnME8ow@r22>6Ed6ECc^SB2$-QAiIxFjEDiBoW$u~q|e|X?2%rA=)sgdFT zN;)ARO%+&K^S^2`gB>^H6+P46_E!gbAg=1ojL%7t(=I=Op^9>^ zxw!tJ2|S$0v%-eS#EHfJ9~txiQrid!JF5y87Z)h|*DeE=crVKWMUA)hQa`|cS*8U{ zJz=osD(47jY7*=nc*$20i}7lm;I}l6*a7;!_)`;8;bK^cVT@lQ6o=k_NQV(mKB9c) z@r&uEF=9vZFz~w8v-|4;I*3*7xg6y~w@fUsZrT3SiW8>QV|dH6KeeKTS>V5Fdjl;b ztbCD|otBmaVW1Sv9=>f%g6~)P6$+M(fHgHWfnvhAMDkFD2W)@L+`t6b(z3wC$;Skv zU}zdXBUv0`|9z)rd|->n!r0Ohd*d~Nruy^UWYd}qTX6^*&#y5Dx&@?VWW23z}r`5uHGu(>xVYb7SI)o%VC|GYi}c}%7anwSL1OQnV4cTGDuT!z*WBowJO|j z+dwJHu?J)Qyb(bLo0x6lxHM5VRcv-PyIvYm{@)Cxa=O@*6!xokQ%SR3426dM0SN9{ zaE324tojK56v^U2q_@e~f6nmJhZ+9gZu>NB((^;41`7J4M}5jr_G<)$CSn!NwBL~& zvWJY0iP<}|U6gNOuHa?)X|Hb>SQrh*dQ@z-x0@>WRxZEhG%yk!^K&{pn%dt^^*~Iw zT0zbZ{$7Sq%qW21W7EK;{pT1$ff+s#Y?1$`;fWs%ztX4sr&!qL^Yw9&IMe)Ck`!69o;59_Z52qJ{COr)!?PoFj`@EruzER2M?zi$MVosPq9 z8aCZ7LGC^cO3r$S9`i~$wYAT~mBKqIQsa7eAl?#{>(RI{0FRWB1_Y>>W)`I=A+Ux2 z6@DPzC>}>Fk1IrRx8~6T=+saE>2m*-XzI|yx6EdAe{jnZVXQSZ6m40>KUTqFDshI5 zUuyXMtOddQ_4f3{4h$$ypHjm8WwA@_qaSxT$RKkEzeV3*tFUK^uvH;()%DeSi%5&p z?)vMUy@S{6pyZ6d7S2h~5iA3!tgoM*B-QoUdRWtk6FHdzW@q(K5Q8=o#Q$E=qaMcW znwIf9u4mASM^+zxF*yElM>I@WcMuKD1Hk^z5l{!CGJfI9NJITI7E8inF?M7mZ8`+D zYdkx1@g*r?_agBBJt`s0$VYnH;r-2Q!RuV{dx5^E4ElOnbiBNivK_DP$Ex4_zA2Vc z&iiV`a3w_xHwPmiw{sPeBN|F6EQ`5i`g&YjfC9d|EFFj}z+5%@Ez(Q}=!m6bsa7lp z=;wu-k|^`S76@CzZC90J{#X^*U~~Ug2D(;ETRDpiqgy$AqHg>o{IIM2GB8JBWf|B{ zzNQah`L)E`fnirs=D9c;=NK6>;hJ~_G7oNsG$Grzv@1wB1Oeq*Cd^I}~cNse+^ z*_OGbC4I&)k8wJNt(DF72`xLjzu}gRxb)@4Sx-+-CG6jdCK_?DS*N6@*SN{5CirbG zDNW60Z#UkOUqpn?YB(b~evGU5Ifa42_%?)KAVbJ|DzT+C_q7UrhMIC@e=r&uXXe|p zTAtp?J@xml%pwa!)1L)cDU3|A%fF+QWGct}$b-$-nI9w)Q9N2>2j)C&hZqM;OFa2vj`p-{Vk|zPHp2 zp4sjR9T;R2V?;ZaY{xsPA0I#6 zR*a7?-fn`xm9#HZke5@`p&Y(E*xySZ(RI%Az&umPeaeNJohdFjK`v>o%1kbCW8`BV z+T=M(nUMapfMA_Xv~V0OQhNe<7@q!`5Z}w$@I1{l_4S#Ov?k4~0VvAFgkMHxa|5ll zcPE;V_X^cm$FCNamKY3eJog($%9BT%L+9HAqt~n^-)Cl-)VB`rHDaZmG7-1*>qk&U zmzvSwgx&x~DFn5ZGu$L>?7R6&oMU_1vQtu+&(EW}!UYRW30JF>g4tM>$SdU1-+hu# zXY(Z{W3Zdf3f6#6AQ;3PJC$XPv&jtEXW#5J)0M_!yv5y8j*NQeG&wa@eBLsX5fK-# zzn^jRdeqo)(Uf=*IWBr=EYwZ+1PygS9(Bl2SoGu@^jr310-eZ$2-9Xn@&NNH=Z22k zaXI^i-aeJvSLALPBs;k#*Sd4d>E@}F9qTW(b#>{gtFY+)7%%0`1#2Sib+_kevP+4< z)!8m@hde^yZ29?9LiF99{?gw1r1~R21GzhFU$Uwt)Tf0XK26QzPW3>vhSb05tKJQV zxA$QV#SAfjBJxWw$L~t)&SKb?gA-y^4W;8MTGDXy*4-7HiCMcmXBZh@pxe&h+D3k6 zByoIW6)G^p0}Ju|g9Y=t2x;0S#4I6=jg2JCW&qby*N>R-yDMi;`X<%bbgyes)g59_ zl+NCq4F>=UF!0Nj)yhR_5th@ZIj7k?BIlsNj#aMoX;*w?5_N-4{w$rKBcPh*a2Y|u zBFa=;x~&a8g{;Fke{1uj5{~pc5wO@$S}H03JGr`y?J;vJ3+pX+$+1b|>~aUuQGicK z2%?3uo*9VNcp(Eii*rlJ81Rx+QzDvc&4`qAfBGo{0vSPNAjxBc5Uz8fz5rEpSvpkI zRbzISUDoy6!rr5hoho33gDTueJ=QLA>L_ zhY$4UO&DpmZ){USoVEqDTPjc9s7**rh!`**p@MG5rsr%0>y`z}2gd4*@NGljflD1F z(?f->IM+``H{j!@)eXrx$sT`k(;ji|8R|_Qi|4vScb$ku?2CB%`flX)TU+c;DQxRx zo|3bUEgYH&NiB|KJY_HAV$6u9vLWXzXS;V9I+gd=CK!B}u!LdInN<%5M?M{{gZ&M< z^n1F{eFiBP9v+@z4m3i}?>Z}{2%&L)=V>96kJ}KwteA=BzsK2<$dHh3t7w(*Euq3c z0GJ;7*p>*82cowz8EtF#G#F}Z)IU2Gd+ckbuR@O5ec$xXk{H*$CR zqGWJ#!F^Ayf$&h8c25E^0Vrs~C!QDk)->8xnBDE?*5DlDPxebD(u{($Qt2_T4_rEM zkK|7SPj<$KaAw*Dk;s@`MEjVT@+IVWZ||+o?O*X9Bi0UioI^9_d*VpEXY;-U)oFFd zy1O917|!H1#iJ%!70Hn#vsf6b);iS#mlFv(&LHJRVBpI}a|nX!Ge$KU$V{T;inz7% zwf!6DGKHMK1O-7_k82jqzh3Qh^4x-#h93j^^ zdFhzTbJQL5?emU1NCQ%m``)#-gwIqX)(@;bSaoo~)q4D{fo&V^L&3H3Le+`s;J7$L z?>z1|Dv3s_&DWR{Q&S2_ZcPvMhj}SjdLc5MPDdBO5de1V(!Cg)@JfvXxA-AHQnGua z7I})$hMT-=fM=&N_~N?@ zm98~8DI4qlaXX0em7R^ov95XPNLf0;m2>-8RCFj_UthnL`XtG*rK@CurG!{od_^`%UHBXatE;(GhzjeZLY(rTbrVL-mM&EhA(U&V^$oPzR}=A&P=UD2aw;mC#;X z4&=E|WmafzBWEQ|^r=3R-@;+c=e?Pe_7=bRNL~W6cIsh3G>|^O?PC;%YKa>?RfZA| ztBZUBN{`iPGV5D}`AYS|nsI0IZq>nvAsUJ9_bP^g9Ml$|<|$nC3Z7S0f=;JSt5=-k zjmS24G9mDpxa*Ay3|@IPygWRV_FHp_F-;TO{>!7|bM~?spX?TF#=6csU7;Z720Fbw zj^4z8Zdj6U@C~*supjJo&nG~4k&EPm)q`d5@z*91L)ja=DN#cgG7#M18mhqOn4nMv zP^eU?7my10bzx-YvDq;X(ymzL2h%nhgXfg1ls-|mYAR*e?(H;ECV&_hV%J*AZ#qli zwzI>*tKRl)6dNz?Y`BvBk>y;-DS;6YaRf2FN-C~p8N^~Hg6zqVVa@v3j~|I?ps@}X z76q>Xl4%;`4dFBJZ*n>*OnLN$=VB1Vbf>YGKLMyHZpfWbh{qJ#mcy~5V_zViq&cjH zd`8fI77*N`{&P7Tjw{9=%s~&0J009YC@wBaVe_)RQQ1z;% zJh@2n?j>5JjE=1^E1yj7o(DrP^RE%|Skk^VLLg-16uhPcG?YCwC-$-=wa%lt4*Wfs z^O94VS zk`6}Y#}V0v9;fuXfFS^dOOYcP>*5m%zaX?lu>FFRg$3R>31W^*;OZMKicEsFzMvG~ z4h66el`1BV6xAc>&Cgg^hOZ9&yvkJ*ON*rdEtERLiqUPul59)Qu@Xa-x~-&5PSTm- zm-ETi;>1J0iIV5{TSW7ws${XHFU>&4dQw?xMgihvS+ur3E~|A63FzZ;px`r!TEYS+ zdq_0vF-cQp=#YGPK2Hq|w?$~!U&aL7Pa_i+i!YWzn%}%xdGC!ah9>XvKKXQHfd45*rBZg7$)r4gIKoKEa5 zMsZCDKp-Yl$;>akt^pEG7tP2Og2<3{_eV9PMT*Lc(IUWm9zO3|sj_?61GJp6k^2VBQs#){Cxyy%xyfh_e{$ayj-EM2SsE=1;!l;U8mlI_4BAOrm6 zel&MLXyG$zg;m!m17;WsgW|ZEE^#0~9kqc=HkX>SPw7Iiph|wr zAAtnew!CPeuaQ-++}hR1@CQpvN!R*G*e|ijv81tr@8Eqmg;u-Pg|BF=O2jHRaNu%7 zl8msHHGu@-fq|muDba?OkCWv)qVQgh^g>^)qxmgj9gW^krmt61(SEQx_rV*(vKPD= z@mvYql+h8(ipaw%({41COL@u(I^% zIF$E-ogO>^YQs$6`ij^(DGzUZV&+6M&$sLrP)qqq!zfgr1p)Odu@iuaPx7!M%#5ob zkLoGncU~|WbHl>NR~vYygga*+Cn<2B#qqr<*a2-zBu~x@-kXZ4WZ}!&^tqlDN*bzF zu43=foDh8zW3?K};7h)3YC>F-gipc0T9)Eye_xiyr}tIhs(l-2-i0GPKoI3?M1y+a z&5srT!|@@@9=vVSey|utIr}ogC6Nnw^!g1inWqd?Bm~boR&Ic?N9&UQNY-e1yp^)0Ywu&KTsKv6QxlO#--N|oz!9L`o|ohVEcqx{hlQ^&(xk6w zS56c`M96=*>*h$k;+@n|eZHQSf>JyZltjSnA&%9FhIOgSg`F{!DO9rBJacttcEWbs z!)ZNyQ|9wIJ9oYgv-gLq}1B@;;^ z(kV{la7$AGv?+4vv4Q+Z7;Ghjd*(ahydQ7b;gD z8Q3lZEt2;qZo-_g9b>?0$}Z)@83F~)MB(^?ZMj;Z`+1t1pnEA8Yor*3MO2U9l~eC2 z>;aCKKrF>nN8}Y?F3K^SM8HAiNA10jY*b=ycneHVDDgQXW8l76BR?XI2=g9nx={`Z zR}9sU>IjWy@(m!+rU`%xunp$T#o3a2Y^rJOZ~WzW%i(1Y=W7!R;A-bC%~MQm1>HUq zf{-8LDk_=1+;13JK4SIFq&%TyBgIAEzS&{&!v@<2%RKgj6*6>JAI)j-b=V?gERD>( z^jW5AE^UUQhNs+$KW={?4(EV%zKoK5w9&=s=&A4+ikFEKVNd*aj-W5N_AA%{zg*f; zu8%*#mi-APvVO4r)vEqi5%`UcP&irfQats_M1~Xest7n8qS6LnG%OIx5apXiC8h@1 z{e(I#G#AJSJtDL0Ks;VeHwD32NZp&LU^H6D4B=MFn6*l}(8RO`dp&Mhx-m2|vKF+H zN6Vx#AkeKaInSQZz-Ty}$TPU1=9&<2F@+*g6EKrV@Z<@55CG^yF>FGr8;Yc5d>V}i z4E-Ln3GO1rz^$P9drg#W!)ZT(O+3Qf`CQwY2F;k_C4DQOreV}6zKjS#jp96I$F!Ys zJO~fws$1)4&uU(iw4IADe9bqQKyxX2oe70{VG~IU3tA)h@XJ!Q-JfXF z!x+>L9`*=VWTMVgPGS5WXV#q}5cpX^oR(eAkbPUyS>ZWCD1t7fRQrtt9uTXO%Gjm^ zZi+KG^y{%~&c~ukAj=2BF<22uc{^wsdW?J=9TFRO{+JpikikftIF!IM=!sOug;~{b z-?Qe^GW(|(uk`?1Ge1iYu9P2dX?g}kfRYj3Jnd{+)V+9RWJtzw1HNXP8?W?_u?%vl ze6%4=9!CL6TtJ;coVuzl$BUMMkc<>3FhoWmPbt^0LTtnCJUTF$?}`&%j*B#bR@oB# zaTPNBV;M4HJYwmGjGOUKy`m(Q)b+1Jaf2HXizt)~o%e(jG5a&$XXQK#t}Q()Tgnv< zUi^f50k+?IY#Py99O1W#Z(K5Naa=PNb&uYeo5{KHY7*d6pMtCWzJmKC+${ER#51?x z#cQ_c&Wjv3pCdB%bYdd%Q4K8Ls$@6eSmQ_xSTU|Gk;wMqMW%9z@-}pJUcGT`No>?& zZmO}GqlPT<0MQ>H_1$DTd>n1X5O?fd0AhU zoG86EEv<3J`s@966ILIt_E?yx(3wyNUv;#e&)VxK0;MO>BjhC*(i8-TUUO@hnFPCp zbHkk(h_E<2(#KW#UB_fXv4XX9-_q}G)AY=tQi<~MSZ(*WILeAUe-mc8)k=2;WugBfW08>N(x^H3RlE^*udEzM{D7*g;3>Iu6 zuN{qMSR8q~xQWUi38LTkU~qc329lhnK6BI6UBIqnQjd<#Qg0TD_Ew?kptUYN(<)*Q zU@i$Yd~K`3-QK~62V2opTm|$9VG;A3I@S}LJwZ_>YlWfJpz^aNi#y9@VHTXA(UsXl zy*^+ASy~W@&7J4+4`>JurIZ=gi)-g_#~%<2_yI`L>57p1qcyY%_Bffb&h0z?*UdhN zCB{b^)bB2dYs~+u*DK*7i=ic?CRDp9&np4rKu^PXb$& zF4Z^CB7+ToI{B_SiyJHQZD6)kUB~x47B_ACJh9mJNz!kzsa>wsav!tjGNSb1X)=_L#~MKa-H`a=VGUYMhv<67SSzTy|j z{QtkLoAs?xw$7Lf0&zu()6{Msk4q|~2Zny*`3 zU4s(zTMq+;oZ3=lCue7i#kB-a9UO4(vxoN>Xqg+5vlEw=4xpzz10Vm!F_kG97<7*K z4={VK)@$EsRPJNo=J*G-ixZLkfeYosup1wy9WIAI6mv|4@lyW#Z5gTr(Gy35k_~b(@44q_rv$t8)-Q5i%a_Mw+ zcP&H)STOv;u^c%Aj;n&Laz+0QIY)rn&=%i*Vfnts|1Vhsv|uQpF|T0OpCndWH5eu2 zAdOq*Urhlxx)1)+%3BNj!(Wvbpa#^zZ`|%O;hxvm@o`!7S1_i{Ul;P@K)EY@+*G-$ zYZi2Uk_CbvU{2)eL5-BeL`6&4bdMI&_1DfK;MoVOLkD447Yh>;zCT!&zVOaL_G`6} zGOR9Uk`u`$4c$8r9p0kB_$`nlDeknD1bMEdrDXQ3Mv1X<<}ceg(2p!kGA=9_YU&y=S>R3nR)&oS1Kz^r z5A($;J^;e`{SALaE2s(V*Z*l-Dj>NpZpri>Ud;V3Ry_MIA)9ONg<3;LLv8V)!7`GHJpw7)(7%TEE1AKpNMtt+eaCmsxYT}d|T z$H+gq*P7C>xhMl(AV1iD;OGwYWcYFYZGI9M)E#O?l@<1j2cl}~8c)B5io3nH6W1HY z$;ir@)c0}s$j$F>B)1-Gd+#7FAOO(Y+n>@LXj=dH-G%`?uohYYFz2V|6cJ%HGs_E9 zL;QO%(Evoz7Ca`WKMcUAJ?&}5zi;~+XQzP;TC%S_@_#Uo!1l1g_5Y12htV$|dv)xc zhj+I#;Saw3@;j2;u-aqz_4w?=#Bl|I2ijmDG38o|lrH`(hUE|7j>~diuTgjOX-byRlI(Ej!zp69pgkkllktqF`LUcJ7hAb47jP zLei!xjQr|>QjOyLz10TT3sB7I)hPu88kv@5gvklo!J~h9$3PD5fzWq)3Lj`i4UYn& z#sC);(j%E4mI5`VzCJob*5iN1KOeBNSw~w-Nx?cTQcbm&1u1Vq8$naw=wrz*-h#7@ zXX@k>lZZ$MB_Vp>`uZDKKzW;cRr^|LxJP}@r`FTY2pEu)B}O7TbrWBX-9-|f@$TKY zGtlN>`i=e9z4KHavvDkmEK5sEJGqcnYQKD3GAwt>*3!vj)}T7l8hvtaxc6tZE{5SO7s&{PU@VLJY^wBZy1sJjfsU1TMf+h_Y=##( zo6O0tiuQ@((k6|mS^*m*h5I{1fv4}KR;#@SdBfZnG}JOazSv2x@R(lcZ3=E8tk@6R zOJ3ATuh_1Jaa7MimliJaF2=!Eh|j!?SG@A>1>KG9JDQR{9BBVP?EPg|oXge*3MYgh z!65{vaR?CHJ;5DCQ{An+LSv7#EmSi;{(I6cHiYlWMdQdE6;1{OM>h1)**>Gb4k1q5e3! zZ$WUlbi3!!%E%4%3Fft;@PPMYZgv9=@%v&!LwHdWh}q zpqkedbJp449UUE|m||xiOEWQcn}tTzk+yZyZ%;&ts^J&a4x2o!_4LZ01mq=3JU#4= z*R`8;2MJ!aepsTVrwt7$E@+nK;h8t8!#Ut@$b0Eb_mMtl0;9r5wuZVQ%kX)337?(a`QyqcIt`1K zw`JR@It&|Qr`>%ZiH=UjSX!QPDX^jZJFkbgO}SiZ6SlkF8rNj$cvV$$!|mOj41sTx zHQG%oU^C3-iY&p+hGTY}n4Xql+QmpUKi?=qI*j>*0NUCN#oPN0rzI2!ZJ~Su+%~X$ zBHW(ONWDvgVDP#5h_}BJW6mB=d7YLF5l3-uUn{8c-L6W7%>~(njGydw^4j7z5xEBs zB_*?cA9;^okt+^}@+1X~^&0W^<8Y!Z!845Q;Ev^x3FzXdO6X4NajO$o#?x>%LfJMV8G*mPSb!#nLm7q~a1a&F;Zu66JwXYfJf4ZM_M* zU(M-O`V`vgo#JM=@A*ScL=UTz^ZlG6HOYyC%`Z}eB`JG7_nITJvfZ;3E@$2|bis&O z4;%*y`n!%60u54pl(50dwQQm9?kO%- z0buO@uh*UyW0#!X%_jYs-yW%eXBvh7sse2c?sgPxn=?Q84j`V5 z+;Gr!YO72>1zZA|dpi|6dXT(%w&)5dXnA&ybz+93<2*Um^N z)7zkO)y^4cC;hul&HB0gI;tP_W0%PwNfKh;rDm6&1;XkG7y&p$&i_FXZSzLqrQyXmoDM|MHo3ypt?e%_VwmBn*I-_qJRPq>gORr|2w=GDSD&s zf>!vBDv8E&lFbx25=k(|U9H(rC@qm7-Xi^KFUa3yrh!u}>+;42oDR0Hb!oz>oFW7c@ z7O==y6Omb%Iq^d@yfpAII|QZGH+nDf`o-sgn4?L4EA`Yg2`{Ay)BD3&k7S{@YrQ9Q z=Z6$4`U)*llEXb)_;k19V=@^U8|Si<5b`R12$LJ7s-|vk8}nwqT2|&QIo+|~X35d@ zI2JK<^X>b&n;b4HBdKZ{*m^ofH>Z)ZZKqv7v=>(X>g>}-YgbRm1s*)2H5<&tgm(*o zYQvOHXQfF~Ihm2%2&-sln^Nx>1tdslof1UfloY%<@M*!>vCh_F z)Ts;$kd9A;+zDlk$;rAGI|3cNX|x1ijaIj1Uo+2p?Q5s;J*;bu3o=pEP9;D&$~K#d z8R7`a8?`e%k5tYBJIV!J%0usDfiF0H#!|yHB=O7SG@1vx0o%**RW;r zeL6loYp2fY6NiuL_qmxi66@;acgW!Qeh$fjcz!$rDJ?_|WY`LBPkEVYTGAfSEaQ}w z&-01^Bw37{8j8+eW<&;R*^uWy1U6))%^YRrtvRo>1VQ!e}dHgH1 zNC`97a_g0OiWEy{@h=qs<4Y~3_&D4f z{=$oJafK=&ZWhHhshSc)<54IpKD`m6(Lz0@(fhEnz)7*Q&`g1=yj9l@GmkRiy(;I@ z@WA9?#k+RCM=t{>{Op~HLbr#L3Ju-K&kQy9T&7;~azJLBOt)JHf&xMYnDjB6{ zz&_d6>_Kj4YCJV7uSnP$(Zl_{B)$h-MNL9xwn%t2*OhPF`QL$D>6w==p%iRl#zMSr z0$#d*)Kw*{8zh%SZX}Or^)*PD1WqceB?ApsULFRwspRKZ4d#Zd-3s3JbW%m_#_R8T z6PprioqPtyW@Q;^2UfT{d43S>{$^ZAC!^wCSowM$l~a$DFB){T?AdoGUR~GZEw-n8zOJ@Drn%d}ZBscb_6?8Q4*NXi4P*5ZK+fIUC zTWHew;o!vi!a}=Qi$*u1mdUm7tu}hjR{85K)7IF*mcSPUsL0Rrv|$G)}s@hRlWmDJ}g0v)~+Kd^*D>rWlp<>F927NYc|yYkci3BZT0;%tlT6qLc;srT?< zzOaPQ>p#a#3Su~tZGsyyAr>PY6-Ju^gOekJ$w`ZY35?YNLGth4m$@?y7dE~~+*Dh+ zQMdx|*s995bu#eMN$ZHY^znPxeSFVP0l7La$SceL@Xp?AUrq3>g{97Xi(|3pDN=nh zym>kCIh4juDl1g|Ix4AHze{-L)h;0)WZvV`uT5_9lZhImF$FbBv>!+^d9RjT1-U5T zqtcnyKP$Yf5yWLeb89Hory+JfG0!eNb6x> zVW=XPJbGn61#F)$LCGyV0A58ISRjGLmVEM)3Kw0b3p+F;+A|+;|HAwju1fJE@ctqM zXLFyxJJ;K(q%&UpNC18TF=WH4is^RST`wDS6LSad>2f+7bZ@C&W_QMQl=xI#y>-NE8_(bD+I6Vy0!I1i$Oxi4 z)LF8e%VM>8aRh0$ZP69I`EviO59gw_KWPQh|H8CvXu!^kCTrIVA&I}{{c+)dyrh9I zKK89_FM;eZ`rEvEiJAgSj~d$X~XW5x~CC>d%D zX3U9;YM0#3T+0Uz_XFJ~oYew(e{Hu>JR+L+E|=RVHbsWZ$;c$LzCuE(#i}HsQ?8NQ z6PcB?u`=iz85m%_J0XAz^E}jdd&9G7WMs4ry<0`7G<kSNr~QsSj_xO-y1w54T6Fu&&ZtlZSY<06M{D3eIw@5-nA^s-ot%Q_oMk$rv>f zSZL|>S6+sXBotby`w^lKt7g>UQx6_1p33jEHt=^|dNFPF+sZns1Ei?sveYoo} z=ol7ggQ7BGpo~EYbgnk68G&WQPE`33<}IFPVUqBB&Q6yT?0p`CFu+b#Qn&l!QN}8$@?Jat)Ub-SWCMkLBUpe? zpUCID<)Q!R#fGV4gp1oMtIuwA+-*fFyFhzIB$S0ws@*9TvK=Y{+rUX?5|Z$PA*nEThSPjdhWYrCw_w3=-#Bh*yvo@hkYl( zF7~D0U@*Ye`OCa7{5oleS;C`hTsE+XPW1RLV+)IC^ja3wD+E;`*DHK?O}D)`5{_OG z5B99{7tnLZ0{#-XSEF|DbKx|u^lbd#Ztzs?aG6S$Ckp=DQy0oTSU4khK41rAjJQWA@BGdwCXQvL~bIj~HttUO>-z23) zUYgA>dqVZ)m}R(mxZ784`3;xNCR9FvLu_-^y8++*rX3#elhNl!y0EM)v3~jUz~)Z# z%0rpwp_Lvh*i1_+?S4WK66bj_CT?l{HhSf*WhJhc*h5Cw^HkLR?y!C{Oegs>7(qDG09oc?1`;_eG+OZ(JYv zG3$Ev{fM$@fQvZ@R!ylPsQPr4#B0BXv5_It!^=r$NUYiFWD-KDP%uL+&}2Awe$*A5T`4U5Oh& zZ6>fcUvRk!cF0!WyMcG?;#)ZNir-Wz-t_uBHdfN}m&J)1oPJ0#hzQaOX19(!XR3LO z)*MIYnd;u0EMJhJhBjd5Zj^%%j<8bb-p1a}#9wj(*xlTC|E_@jgTnWY`!u~Kc~K8vRK}6L;O^({yGJ7g z4qrXLkS|&_O|rNPl|EK*7<#|Z&ghwJF}F9DiL?|)VURKTOoS_;&kj4-^s6Ks zf%8K(d5BL_Q`2S$b!If9*PirQug|^L&C+pZ0_gDolz31M(zUd*+6sc)p}kCWLO6jY zo(5L#hgNXIZl+7MwiqAR88_F00EsOg;Qq&ly9jegzgjC9JQ{JlAmm&y$>XT8x9hGt z>p|x6*T|!c_i30O^ukWCbyZOOl&Vc{X$^^zjY^V&AF2zO^}zn|t4!0NLh z-tD{``OO4B;ynW0&);9G`hNj%-hW{HaX0WBds!Xx^eU~4Injzw!k{o?Y#Q1*T0-`G zbdC1HfSPaed8Cv!ofXbgY=%LL9Hb3C?Y=4t+FC5SIqfC>IITSIRf ztsonVZQ#IK=2_TEt1%BOm-mMOcpq($UKUL;azz=MWoiy>H007uoJtxX5qq1Yg6E21mtjoGfY2FN#0)#>Xk1lU#|=7t`E?v5c7G<;pGd0+=KD8Dqj z5&fwi@J{sx1lda3ZhZvSS=j4U!-!4P{YY5Wd~PMJR0_-^H;v=5#9{n4p;Z_NgCKtW z(@xO{jt3rhOc+j|(CwEm?_f*d`I?>&^Ydv}^(FAHIdbR)w@M2{K2g{`V;QMUo)K!u zHM~F;$o&yz!w3?r*=g785ETL?z&p3B3^WhuW*}3-7jB7sUBZDIQ+gxbyJg#DgQOo~ z@X$``#bZ&??{}Pi=C4kqR(vh*lnb*C$H1zl*D5SmUzet0_r@YL6iiP}U()dF)If{I ze^{t>-`Tspw7-p*DI0Gl%@-dXGm(W9TL`;1aJOVQZA>88T1K}XUS_^dq^{OW zZUK7Tpt%++Qjyg|$ZQJV_uz;Kd1>c!RHwuiZtIw|C_*|9bbMny(-t@_D?iFNl^tJmC zdH*^w@PRtrEpfrym_;ARLr(@=89T1cmptM!mWoaCHhUPr_2Z*=VR<>{X;MOhXpQK0 z8~e5R(n^FI8te!EY8L)aLmV-0YOU@sP%eG5Fx_{>qT=5K-`@@J6uQZ<<^^>G^qBUl z`=zrW)}vPx;?=)S+0wRx5jX};#t%x4M4NALFrsN6$51ch$1GRED3(WKzvR2Noemmz zclNk}5)q&EF8~TfEz0rm15I!r$C8S-7K`6eQ>AtE5H51)?u z*>S+ociE?Lmv@dO&q9-gB(v~gs!d0Jl-|Y{_n-RckD~f9b(zj5k?e4jvRd}@Vb&}W zwXe&`ZDfLr3yY%jZ!N2fhUx6Q^gXW#CSg#)@l*bMUR;6wEbkWT*;2>+zP&nydY9gY zCH>NeJQyCFlc*p!A9d=P>ti5(6@N)$aBIC-35nGz%gd zA!=V=*y-43s(H+ej!N(0p5JnNC4E)n-S3spNJ_dC0E+RJF4Rwo8yCv$d=`rD2=$H_ z9%v8N0o~3(&i0ZbwD9&hwg>fXQ5G*1j+tjnw4_@WE6nOckjgB%dYqnJY`1yhFOt7R zBL9qm*mL6>Q&!5u6Mp5N85d@W$$%Tf7ZpuS0 zLJj1DMcv*3L*KZg zAkl4~ppGVqyz2o+mW0JU?rZ0zgRY6t8_Kmele1{d7gIw`- z_$m=@La}4TmJF(luX$udhi9`H5Cpga) zg4*hbHDB^=6AATH>@v=R;Y`lr_t_Ju5ceA9Wbfd%xkJn<%A`UfRM5i7);}q?USn)3LM5Mph(wn( zo%ACq=3%z>!yrI;1tZ8<^`{deR&e54Un8(sEFx8>;*mQtV1%El%=@#5j^o8zQvREUgUOFBpv<82 z^YbcMPZvRT_2$(uOWEYkv#?~5z@(nGq9{o-=zr|1%)Tho^fHOnFvAP1EuFwp>^S#I zmY2Gt{)#W{+x-NWt3usyJF6o5S|EZR$9U;84%;3aEEp0n`oqs0<-X&}Z0XM>8f)d8 zy7k1BnH6nM>#P*bm8Q<8rp}|?Srpe~OE|HLo?@D)s zMMMvwKp;DYfG@b)q|qtf!+1WAmXBi`<|fKKddw2oxxd>hXfEUxK1(Kv@xc$Iiegb< zw4M?iD`K{@z~jBgi_u4v5TlgJ%j-4%W~VOr(=I)MC@%4Gd_SAgxN5Nxztp+>mhXI4 zj6hZ>EHaIyaWUAns8sk|ere*}{M(6KNvu+a=t!K*Wos&=<|z!WcO?$!-x&pKZ>W@B zB3%eZwvnK(YGkn#R@J{li}#m%ht=-hnj$32yLDsAa&rtiGm)k78BtX?^bgsAudeeI z3ou^*o!6Rml&{>jZTC41x6kVUo+~7Q(z?s=9okb{Y@cjI?wi` zb^=_h*B5R!DbwS~L2i1BriBhj(xq<6 zrckQ!WNe;7P%T4DAF6zokOUQTU5`WdFt8o_`!@vcY^TX%(JmB(noi^=5BY>dd>9>& z3oz;HP}wP|^Rkf$?Uk9*1=Ui#5KNCuG#(i4tpp`^M&$WJUVHmd2mbZWh_=Ee;K|D4 z&PT7Bi*+kI6oQ?B)@ojAPY25nKN%%-J1o5jaGV1n+gq)d)5qBCiAlg8l;ah6TSf#k z&l)@|WD>iK{f0t6cBH)RrfTV*40Ij{3w_1ncXY??Y%FUoFgsoOe9_>O`5n{5d*Prr z>8O+XL^%k~ENJ@c7TZ(`ezHErZceRCR$nEU`|M9Bn-WC8uCRfT&*D^5BzR;!2u2%0 zaT^(5Z;<^LWE_s-h1NjRpU>@l8g%HG`59T08^ylv#jlj|(nkp1$ubpPW~hN!er)oM z)Z$omh`d!OD%#eBH&sA{5B9$ziuK{_BIp>IKS{CbMkC=V*0noCSp(gHYMqR$tA>na zU$n%tbV!Fbcj`gBrQJMJCc#I9zVAsY4Clt*cg4ckDpc~tlG~#p#77<=s!TL@?9BtC z)f5P!IqfvL`Bh{TDTDX&>ReWCy4L8fF5E;#!W+ZKs;I02SaKE@Oyn1Gbd0w6Ak@plc*Oe7A|-OmDv};n! z?$Z>(4Jns~J&rRF$1$fF{aBIcdA%=~V-?{qjXeFS7i;U=Ev-C77uU~4$8Dvg7b}9x zEGPf3Pe4_7f=;>$`$*a}rwhGq@}JrL=ND8)eZjh}^g(NZgMRA2zJrDVBex3po_46> z{G^J1zJq&*kc;FP^^od@LM#ERUK_4+!=lr)Y+FaI+HH8TIAKbavIRb`jCy9nvT$hk zD`%ViFIBc-;4;9bx1r(0GMEX$^6>CGoIvnS;)js`V9PAtpCgOQ> z1rTr$9tSQ0nH)Z7sH?LtaPSzwkKG;4irRyHbJl*{%%3EfwZ49Jb_{%T^1u)`0KkKt zB{W;u@#r|0w|#}xn-n2K%BS|Xj)U-h??ya{E!_Y|{lfE%x?DI-Jo9ji!LaX4m5k(R z%F{9X2k2~JimR*X2)R62fW?Pxy-|#ajodM8t}Ygi7&i1DwY6WjUfpl3^$i`=X!Jc$ zP7=`$JPP-AmU#trI?7u+!T3xpeRkusWYB$e?0w-r3-r!|n$%96hb+;P>Tp#MxO@RB z^&9Q9GUDPM2xJRZs^w6w%SG9QgT%m=x-y1zE_YKQm@F!N);K}PFsJa1e?tmF7iim1 z=XwNkU3{{DCV)gR!*IN03zS|6tk(tEN`@s+H=~>KjO$vpFhuy+;;Jcsi}5Xsrnccp z%dD}gAyIq0!JEIla=DQdGkE{rZTnQbGv^@DDyZeF&>U}Gf*ISFCCo62VxhFm)#$nT zX(|nFUzSA+c#)dBQk%oCMFYlB1Zwdb#=Le)ZfX52atn9Zv=AAyo5Eoy!_WkdiJF|| z=H7mB_m~Br%`ZH9YBv)#jn<^eTw+3Pp@%p|^S*jG`t#Ytnyq!XW?cd2v4;Cg)JQS$ zYfbxO*+f+50V*Lp`Y9%Pag#;&5^8*9CxLPrB|$EJlMh4%Oh-XgD!N2eWN_z50fe8*5jV1}ON_qWNBy>4CS(NUdr@Mzc7_g& zT?}{s>xB4tWCS>oQqOe}jAjB^<6H5-P1!Q~8JATo4?ijCu+Bj|rH-4_rqSiH$PX5h zKkTegvyOStBQtocj2#p&7c1UxwpMw5&9ky@CA|8HyuBI|C-!w`C>7&GtFD2EUPB#w zS<&oUNeP9uyK!xdAi|OrXz7iqd=|bcy$(84#*an?!1hQ6c4P)00V)x%iOA({NVUQA zVBuQG&_To(?>Z|VF86#fSSCh#9d#mNjh32vzcH=n86=R!fTjvF$e8`UwQR%u`1cGf z>LBrHdbF^e5oVYLhN?zKaJ&7*CbzQ-e*DPm0LE$-A_vL5wZ&j%Hy13(Butm78?vw*v~fFMe=woX;?l*P3JAW~-Bf1}A&G$0_`au~UIXR>?YRnhaB#2#M5i3-vk*6=JGbcGt<|~;yi%f4@h7JqR!{SI43W*g=~qelM1&^3 z#pzrn7HXRwI|e`nx%@uMj(DNR+c9q!ngiVUXH!dcy8sc?{jmkEYfNLdsc)aW)HiQF z*t86q_k@Jw1SU>TpX6i#O+{RW2Q8=$YwHDBzTRc5+(<A6%1kt^l z3ICZrC1%xP{-{l!jlH#zH>O7llLZ(RvV$1vnQJZEu0ac#ubROF{@Z;KWT`tH3&(Z^ zU&Xk_lo^vbS?}-lR;nXmO}_9w-q*TDthSy_70_o5T26E7qOL%Kd=OFg-DJ{uC@*M0 zBa_ePTz5sT%OUG%A`}Ci1a@{v$DR%R%JK3w!yR>p%@Gohd-ZxOu@9X9NO4V1hQV!( zB-xFbh<=pxz!KH>R{Hyk8N0A=0G4qL&5wl35Vs&_{l|#$Hxglx4Ig(_ZRG;}qhEMy z>v@3{JFAKqd(vxY0W+Xi%~5s7uO{-9r4F=lmsjdo2|qr7z&jwEp5p5GJxhk^G)Y7^ zS*$fv?+yac!|XOgG!8kO;LVnn!Ew8h!EL;xi`VY;+q4x0Dh(%k@5gzMwb3ypgW+Em zV##_QW@$^!K6eG>uXf}qkK+^+nMq}$hi(d*sL?Ht4q`S6gyRsd#zm)I(N)Uzn(>0? z(!(f`wgd2MV>nmt*h;i&CpRCGvRa85rZ@xU`U|ov-`;Cy03;p&5^um^a)d;$e)1F5 zZH4Uw={;_HIcM%qIV4kg%FjRamw>W(pWwxl_nQ-IL-ee}0N)?s`=ZAD0^LC#B`NqY zy#@(+=6OYDr8?EJmMl%t?SOZcHS1;_8{<{27xzZ%Q;lNyf;WcpT=Z4yq!EleTEsd; ztq+%sX?VR+qO^kdPCGhD)Uu=RP;R9xzWRW-%!Ve{amqmi!(q>S?g&PLA`aA&LwdoG zN4*Z})RW+pkq;IgtVHvW$jCCNs{_Pcc@ud(KQIQ8miic-V^8qqyv!;^?RAB$npmWU zMd*7|V9LWA&a{%_d+j1Xw$WN`@$G7^eIV7G9XCixY_aw{)@t)xv@3vzBejTV+m%Ma z`_(LOY=IRoq0=2)cfD^RZ7c4V#o1b>)X^?tqPvsnAO$OO9G{bZBo5k>Mlo#M#vjd- zZdkqra$m^?W9uH8X_4kH>jh_tcZIyDN^i-nk~DO~MS!q0d-CFKa@DdHLtN2 zS`ljZzv%NgYLk=C4vZEy&>KbxZnIdaF<_pq5bWdQchc#3@L11P^z#TnwzBl(F1;<;6ym+7k|dnVVlhg2rcyv4hm3TsNDhovtgs)CMQiAQB23f}HnQ9(XJ37t2k zQDn0v{TsAg1_@@$*a%#IEi#MxPOcP_>mk@%eis(tXW{fE0dPC;B)-?w{WUXI732*| z{O%#k^G=jN@_H%_;BT66`ju^+Yfx+yL2u$`$1S_G#~}o;P%~XKG;0WgoDMUYO|y|7 zPX<+eO92#Mgt&@YRxa4KdQ#qB@ z^p&ziu)16&(-S4l4Wm8o%^395yd58xM=J+j*X+-m^%%dDePo*X;vvGbI2~bSynGgr zGN6C(SO9{2YWOxhv~X;LhO*xR)JOSaO--h6gjxIL{W&(ZgyX{KuAA5g;R9r+TZj6H6 z&)m@=ZR;8+2c7s2N>JezcFWNsY@D5w&Q@E$OqWI> z8~x~Dl$6P{xomrhPbK)>1e7p4gxm+`Rp$+iSAoBeE^!k(Vuo z1PL0Sh7$hpW6yYmW4YW>t$YMX@aK!pPJk|t3RtqaEwL0zGm$xeD$4Ks2c}_sIcL$D ztA+a_zR2V>hVR`ckIwZal$PC=#QIDfM8uwI;H?)ohkQ`U`o3D~YC=ZN z7#mmhwfkvfZ)d;Bxhx^anM_&9bgmKtB`gY=9=ln7fN=E0V0QLlNPUZ%>ddwR@M-0>p4x2}i?L!`f^rb7`P?)E=J~T(VZ=&K zSnsUl1C;uY{p4NdXy8m4yT>!-(aRu5%_}U;PKjst_IJZ4js0E5dcPJRm!)W>a!5sH z8U+z@&!zbdy}R!N5y|$kQ;i1@;Nw)77utQbN zlTt_|)n%!xU`(S(MoN?rnc%fkP^nYLJ{xGXOJa~qT@@210uI7il^{;%vHvUJBn>RU z{6VZWnllmE-3ihU!#V_2rz*G{ojLFH<=?VvhuLG}HJ-)&Jf#eh9gA`*-Xmpmlo#@sSj@wrj< z#Oom=ihb-n{OG;c>OG1qDkb5eAQp$uy9uJR)Q{YX898JV3al2Fjwwa@osoDb#RKv3 z$@V*mnSErxS{PSVFVkAC%sD@Qp;iQkIsaE_ZL`ZRturE|rR3YlCMKF1xj>f7 zrnTTtyi=je=-$;q!v~I8SommW0%(f{QLoOiq zwJU*;OUQlprqo6mSISvsP|xtK;KKu>b(j7}(Z)H+Fak}!$QHT1yJqS-KEt}%1%ZV; z#9WV3$2R;kJ@;E_gF02Fy<_4S8(!X_M?b2}s#Mf@L)EzVaZztR4+KtCy;#xrKR<4T zV8t8|vWCo2#6=H9mAsO!IeS&N>4d4SLKXYCS0$)tMU+@BP(3Aa4Y`8c`;BkUo4+V7 zDw!USNWQHI-@q9!f1;wfn+E)zDf#JOH_O6=Yf; z_JrGSwB5ptx!_CNynXPw&+Gq4Grq#W3%01z)3XH!m;f|vW91Mx0kKf-85XDfll1&N zz}uBKvL8&Qh*W0`J}_pW^4Kt1j-Rs_NQzg0wD^2<-3$kK=oT_x^ctUI%}jtM`XwK> zu516a8n07Z zb>_4b&?lD+#x3#F<+AC%F?ii4Kg3LfrRm(?MoTlRV8rl&n`v+Nc>GM?7RDfh*``W1 zwyO)84gG^LRP$g@iFz(-Eb1}xashI>V`pA^f1}y@ zsW8DY-&oPkI6EY$i*^5f=Fg5AxI}R^O)L{O+QwQi>6>m zN5NgLI6N6QLak}iK_0LDM`5#ZK3~mC9_i|-5Q!b3T!)9<-+3|Qm%i8oiKw*D+}`{4 z&6pm1nDycDrsdX2`mkUZ9?FyYC@*j}`Y+zs*=oD`>&s2-s%J)5thj`B zYN!KYg7prrQa)+9oUkZx#{`(y0sk0SD7rn$JxvpyZu~E@FBY&^;>-jF0hq4fK%s%! z15=kS{JlM%6EIbu68G;Y28|P@%-5&k7&POJj!!3O8a5U=gX8HSv zLvvGXFr18e%)7b7W4{lnzY})$uvHPz+@Ll2(ak>t{~aX>3$-EMqqm*s{%_7OQm78Y z9wy7Ci(l|x0e_9AkMM-GVcaq&{}A$%0~&`{M>Op0{9d@f^P0%dp~yq{*+?AE?@9d` zq5XGO5-P-(lw=jw8)4P`;~%m~7ND|6IMy?>erxpaG$#}6Q%3SRpZxwGvW=fo({o~r z=l|fKzhwn}fhvUb%Z}t*V$Lt{hW~VRc8=O6^Oz&_#Ska)>5^W3 z`LDG;7Z*YZ2M7w3Xfz9i)6ue!p%pTYyXzcwD`Y%)M@#|ozCybQ{!3_ zR2VC0v`tTEG;~v)twj_=r^XlrT)by0Z{mTzw?ZQs;s6^M+7?mj`D2`~<-fNRIQW_I zU5o1qDy!KDBDFjr8n3_#@vE>`qT?RnB#fFswh|o>DWQNT6C1~5(2kxPb4`sl%5m$t zsXEX&1>qh@@Tt`;n+o`_ZIyj^dl^kWzWlBVr# z(pf#?Ls?T_8vypcOT@U39FA1b*2XLw7~CNMoqHJU*X$*(EZDVRaPT#~b&_0ewgcgn z)z)-H3d_l<*P7a>*M83Ef7JL<$Zh8S1_vjoUox&Ew@=BICQFYC1|0e&ZFG_DQ|9o$ zhe9Csa|8}!f{x|6skd>dbrtqwm@zwc0eGyY0S_Kve{J%<18hdjLmL1PCp33Xx79Gg zqMsGX>3Y<6baC=^9p9CR+f5pXfJ!!%kmPbmHo^crJd&r#h|K79K6SEH4m9q1h_eAC z2e!ykc&AH%6HB9lE~EG?jUPwbAE<6md>^uv=C4Awunl_67KG!BZI*Ab$OX&24R~Sd^7zV)aCS4h$e= zc>~`mE2{?fDdh)Jj!(|a=)Fo}Kdru{f?n6?Sy2&g#EF21goSxXv=NtW7ZgM;m16j8FY6C za6=E^7L-bvf=GoO1EBcyg-|ooc*Eam$6arwpUeQAsIRKj1&W<#k&!x{WG+x+IoYGs;6 z^LMrpuV26Z;Tam09@;NimBYyC;f0A4MOTUHk9Y=cAYdYcdNtg3C&hm~i#-IR;af;S zmK}s^FqvK2l;dz52m(NhSeu|>P(TmKlhap6%V zcndQ_n^M)z_Z}mmT<8y%1RNF}2We|Fp!>!xX*ca5s!G>mteDWV9C9Xlgv|&#hKJ*0 zv2pO@0|=D1OFZ-M<{|XeB73ITLuguuz(Us=ADq7zfM1m3sIU*kq9-Z~ohm%b+>{>u=mzOcsFPidr}|OM zeG?ClZ~#?3gI487x;c83mzpe9xivBa?}t&LFGvYy4sw?%yw@-Z9Dat{>~Vi?{8ji7 zsa9&ZU&Tt;V$Ln)ely@LEic`Se$mD-1}-v;&m9O7)GmVb)D*$IfM2uVy1M#pztgYXaJO&djiMHRLA@76QI z_T_r+qTk>7F;>{wd{$>bK>0QQ!xD-8xlBZ}?y*LDj35aL?`wQPZ6dk@opE&DHE);9Wt znb_|6{t2=E#%s|kPnZeYc4Y9sR`{>_D*h8@3d}0_r@ZqwUaJa)$}Z_RO!+?mRu~Fk zM^DZt|Bx-D`UGHA8u(fNTl3J-^v$0DEWUTVtL{4GmE6k1|XUAr3m6ToIeOZ496*Y5v?&i@kf|96Y=WW^qVR2~0k>d*iI8q0Xr zMPGUTIeCMpkb>#UF4>F_+zQsn4a)Hu8WHItjn)+{Zz=eC-A1{KT z)#v{PTx}RX-#pn#K+Vp7dBnedIP!}p<9#lIv-XDp86!PKAs^EX@4&g(x_tlKkFMu`mdh9R`AnOK(w~#=L5FcI^#uq!pMU>5 zRHQ)Igwofv+@Wz1N47x|qT2{@^~dnrb)Q8sVObWyLf;zTyh)T7|4-zVhY(KVd%U;D ztUkU$)BQ7S3jrD5cd#yd< zz(xDQ?6)#y^k@MuUqZ|7yiVx#KbV{fBYv>^Cr+zcVX2krB5g=Zcle*?wb&Tfs61Tv zIT{@O+RGNbY=)v6nG|I_<(H3XIW`4{9yJL|1CC$>Cl{BwhruZiI+x{7lVuxA+f7=6 zk&WDq*)2Kbn}tI-ue+e_ByBbPC+R1x8{B8^zI71_|e2zq66wIa?Ue&>tF-T~@}-S7oZ9-t=StefNWJxtf}qE0@E*c7uJP zE(Mi814ev^NnX6hx=~~Q`bi`t~7<&EjqS>XDxg}~)Wag_PMVhz7W<=OOm$$`LH8RAF=2~Q2 zquOHP%sRN7ISB9>7Fq(MlM*78c4~+2d7=K<+uQp`Dl7RY2g#Pxhx4h#z3B1644%S{ z`TLF{?zNl|mmp|LD_~-W0r$q|R+@l*cqwU6>F+JV_Y)x;*EdS@XL`l)Xr=v)rL?(~ z73ccI_&9!%#d6XL+ zJ+%YEUK?8qGo$8@l;(4yS7W2nqIjwd8t4qVmI%^sR0FmL)Wq1G%(b;9z45$$D5Vt0 zrx6Zkf^cd3sRLQbOrq>`Ig1941DbhZc|@V~P{TZ0O2vvfFcTGeKMs*mWRp5&mhPmM zz?qq-SgGXi_=raN;Ufc2Emz!c+_MXBLiurC2Ha$;*uV|l#bB9rP`qV1%L@S%mzB0G zWjbcU^DsLpLjn7Ljv~O*YLAI{-So-gs~*Mg`G;oX@OvXu3NJEc*mJsIv?=SSh$-M& z{67E-LG-?nYO>d?AgvJ{I80`A2(8!K!p!MY?3adf`^Sms(-trzsHm7=LFMWI7_sk- zIJ!>e&YB)R+qpl?P<@szt`cFJ5XvW(g|_z2uwv=_aQ%9_IyJ?ktI%GWdqx1Q`SrFo z8&#R5dyWYhZJQA&%)<)u@{P=o(@4^WHA`(Y3Jp7*SN<_VQy>j})8(sSoJOOzZd_xd zRlExc8>?o7zj*Dv@QtrNY3+UY{v%=S$|V7lp?q~(7-<8eVvS7sTmGJ#-aRF3)yPn8 z9%g*8bI6EiYSM+FUwcQpI-z+s8lIAuNk*{PT6!Ls)g#1ij!N%^oDqf z!$=i@{o6-sPk%%FF>p~=-)Mv#P5j9-=fmEE$4m>qc)`5z*{=OzsYcVDe`@nh^&JCM z8`DKRDw8i9BZSP!=oTaA{o2vh8A`^D3+FG?S!b)U`LcCNcke%H^O2Z$L|YVRm$_Gq znM1Bvx-ish{t_M4Pj~DKlP8tyx;f04Iyr25WaXH~$qVlYj0FTnjKGftaJ-C;z}+GM z0qf7v`;)S}mFe+EF9ML7Txl!^9Bkp?+ z9J3K3OdIK(UDf=J6-yVG7QRvQKQIkL`@V7A3e(y@AaD(;8jK*<%3N~J%;|>JC3Rxj zg)yVb?nVXyQ<m3x&qt<41Lr!T1b!&s4qP4geHakP)M!5p_4PVB0%HvU zwCmSJY$_&>4^M5~pyKD)h$|D+|M*)kS{Q!rvWEbqeEE|3X7*BB-=Gz;DnvMQZKMQq zE))+C`qJWJo0q{n44b!3Mq9;HmpPQovnkiRroOQ`OsTBU+{&X`y{;|HR|k}NNOVfg zDNXIAMw@TRoIFhWa3@Zmx6bM{<$d~mtt~phNFi1PGp0?^f&>L7$0CoSKO;uqxd#)p zTEkeLs5Of2<3m%F4rz;+Aedh;IP;wB1EXGl_A~VyA3y~7cf zih;b{FAE6p&Ba`XHU+u7m19(ic^Wvh@B=!@f=EGdAnwRa9r-*=2nt~A~G#}{P|v65P$^+ zSRep1#)C&shP5je8;@8blRn-_$0UQ%rlVR0dgtDQ8c`~k7(Ev2=j1aN}aH>>5 zqkrJYadD0!TQLp}GFN6%1=I3XqB}nanfYhyd;|%6Tz%yIk9S(niXIjOt&>^pdTG#0 zWd)NJOR5BPyLv`vZ75~&g1O;Qtr72T^doSozBybHS!b!piJAnp=iqTYkS#WWYEkuE zb83q7ok$+5>rDf6T|8b}~i7!+fyt$HurqZ6E)r+8do85ChHsI06qb0+?r9)l#yr zzq8HAVX-Cy^L#UU!8z}B2>X^dp*WNI^@utf> zD>ZKc(+k>1X0nuI%^KAx)ZQBNW{KRNtFcM(sWABC(na&a;`#H8^rIkTuZ zrjfcQjWWq$)5X+5=+`V?tPa5}ncy4`o7Szg`-I62-|ErmMwGyFLndhl&gDz0wHs%% z5qGrh)w(hCu$UZ%MxLJ55)pR@y%U_#*o+1)6A#i9J#5%o@-(vRZc8$WYPvRa;(U&5 zD=%r&qe?9gi8)o1NKlE0Iz$P=3mGE)>SYUThz!y{njOP*AAYvS)_`ZJHZY)<K= z4FS@An>57ABqx>@+_-L;mYqDPmwA4erQyKGH?4W7hMz~ny{uRJ`_VtYp|)Bc7$usa zwmDHB5%w$i#cw_^+igC=bTkXp9-n=DOZXptT&ALTg}?fy6cJ7Jp-b)c=!vstqEIX? z&*9@|wKn`k-OshA34*vYOv{I!Wknfgr;QirBhSa2Ho^|X?`+#)@o6`&eC5f}0M9*@ zLB)6XkRm{rlMZaURON#X!?ekj;nkO(F)c7;e!8yVDohrhq|FLZUg2hF)On`tsd+Dq zQiblQxK(`j*K65XT$A>F!R!b-cpQYD@Tk}jj5;U0xVXraCtxg3vs*_Qg4?hfg|A*n zyps}MK^v{oIq!I6U?PLL3=@yh+*iq*hUnH&kSWh-T^4mj*$@+9HmqK30M41wH)9(> zGu>8s+?nXZXGp9v6%Cw|&X7=4<{2(ycQKDr}9UAG>@sRSMz4Y9djNH>M zSUF)dJBZq28a8cgzG@m4Z1ULWfXO$MpSA5FZ@lQ!HqCNwn;%(WrbPYQ{%Ef2gHkry z+*hC8V&-|>YH>vcg@H+atbhIVm)6^Ez_i3B-BYwS6(Zm>D!Rj^W|oB1dr72znm!^$ zy3gtTL;E&kTBSZXm7zv$fXP&*+1GoF5Bhbz!_exmPCT19UD7DbIDLdj|LkKMY;=l| ztLxWW#~jT1yc$Ngw4WYxHSz-A4FY_hYh*WET-x_uznk=9EiS}w)v|@REOxZn?h9T% zetzGDpWTFjDZHf6!0`^g8;7PHH*tI)j~Gn)c~TnVST1!ext#LKsc@u0yL|@^4m$3g zBDS@)YIyn%_RK2XoeOy97_s|xrxFc9&LE=PDVITo-`Iy4RFa1!QemNnD5bF;4!2_2 z(i_AKrG1NgNsFtErZ~9^hqlV*0Nh0yk2;Dp$lbgD!0ih#451KsM&8^+U>Ly6vItp=Ns}BiW&Y~Dw7NEpo}W2; zA(V{2JMwieRUL`;eJ|zoG>*W%AduO<2TDIYENCFfgYYXV($~+OBk+JA01>~aCBz2N z;~Z3twYz2g4)@tpACp&ZTk2;te)d11wDR#=JilkQX|%m97VWze_C zBRT>@MqtDUJW5K2oU!$E=LifI0X|I3M$eV$!Dw@4^O?uc-|!G-e=yN2lI|BC$fe~aunxI&i6F%GVkyc)~+^dx^?Sx)pH@tf7I`PpP&(6$Gu7LPR%Eckch*V zmus&}lbBbAe{Y1|s`BlVOLeq5>YC)KPj3?W_e#o?pXA#cKZ(R4%1I?e0Tyh3uo9Mw z-ti zw)tnZwYAm>m@#8UICSVx_^ZGAE9($3r^lTm;0R<7fe|F|>an+75C8D9?`zG?Q}&YJ z1;9H1ZG>^ngmCf#v6q9c31K-Pf->XrF(9+#0Wki{I+C|M? zSO`f(*?|Oj*^!r9l#>dJ!IGh9#Ei4=$uFKqe{v(&B$Cc61~#ANfpoSC{bx##ZF`;;qoZVF9<7_u2XiSb6sri^JGoBp-s7S z1cr(L&)LPgdaVN=Cv*)}-bkcpg!S32kJt)KtkhGdCD~?arH3xPr;0`5Svr_!e%h2c z`RrcG$UCQ9dxw;1W56m+Mq4s}t|k>%-ixUFo`%tfnOd-cRgHK#@~z;#k$&G|0klU7 zHY`JM5bkT&u7!;oHyY_?>CzHy;?&sKBm%D`^^|XmR>kV?a=Y_G+qDAauT@hfM&gbf z)Sq}1fCZ!i}hm` z!Hd2pS4&TI3m_4>6elCpy6DbfS*nD{>*a4RK0P;SJmbZ^7qKZBky4yEK@jjs$7?e> zqn;w2ygaQ-(9_vF)M$}%q9&qOZLegO1^x&zVHr17vg7TI`9Snla?8wayoJXYeGP$Y z=qm>uEf~^j-l@PCW^p(rK5-Pu{&NnEhrr`u^gk&}BA2v8P7W#Qw@dRzhOUrpC!8kn zB`KbF_iBq`y1uxnoJ<*g=}m0%CmyW45PrHJB+`Ghb#`jyCtmcAN3|8*C)>m+LP(aQ z&hdec?d|5G@e$<55Vku<;7$ne&a(&NP7z0Gc>0bTubIC5aI>^BRqD@m`GmezA28Fn zS688BKY6yEee4lwwIlhxmAsKKpGoV*CNfO$9gMqG`R|k#d@*I=yNbC>rbBCfJNL?C zIpM3D;-_uAZdq>5IK!1RnB?H5O`B%N{(o-u-s>OlLAx%|va#b!-E`r@>l0+uYkwBxxT;&lCn3u)F-AF5UJ1%iB_2uzr=qm9QY7J8Xy>8 z$gj2anqg2{Qfk+!Z7Lr@!mT}k0c}E^T>OwhJa&phRw@&}*k*wZWHkv*Dztpf6JV69 zOB)4|2H7zl8%o7AbSCiQW8dA~rOrjv406p7e^Fu7sHJ5BZ{nw}yyi9J!fI;sjg;sl-#v$44JW3J2Sm%i*X-vk7r(bo7L zVCuht8c%zHwU;?`Su*1fS>&QWMw>_=qL8F8jzG9bM~-bC1&NL^`P*k3pOg$SMBteG zARF=J9Hk~kFqT95(ze%Pl8kgnv)G(-q9X_MQ(01HoJ_uyKSvi92LjC*|6>I6H$lO!M!3mw>zQpDmSA%+kN zMphrY;E$XYC+6K3GX{;NzZWiC2ves{?ftkhB;DB5sEvEtLsgYFG1HKAeZ!?>B3{1j z>{(K*9a&XrNbuw-GC9yn5a-XGmjtL^6o-_z4rj z!ubos-hF#)gCIVxU_5#9C&YN?+MM#O=0=66?V@L9z3AQZ4<2A_4W03yDG{nHLQO% z6w_%@+Jy@jg>&c5TA44_UDU3H#kM@?71`;67v;UG9a3pSZ0OafIU~$Ql{0V2j3gS~w+A?M1*_@!~G97_S%aq0?ue4Ln zd72N$v>YimXwoUmXmHroA3l6o&+|gN&!eGC4?-DOfr^&4N4tWe{9|`f+5#2>aFzJX z&`yGO4m}Yr$~LpU5lvvyQeD|R+OXga0wfie0^C;cYwuHq4J3wQi$L3NdSAOJ) zi`>LMz$TyF!r4%fc1T*@_iR*!X;zswCo~HRg`L*&p;KhOR-*YFy0o+><;UI^$Y5Ry zVdTg2L7a3_JLOAdTRAfrg2__8=D1J^(`N+Uz<2WW`HNQ90xgd6u((lB(}cDqH#-yf z^ak}ZL++p0rKPY@(q0N|4Z&KwqHyzRIoxJ$H2>mRk{99T5i=zoKWj9`q|gd<+!@V8Kllg5*;$%?6{ zP8woK&4W07f?}IjnN40I+%8md9ec6noQIe&{#ZiJkw<>YNiUC>vt1FGac!4&ZE++V z*?sY2Z2WF=NjYxv?@fJk$XM`!bY#}|YRlCyE%~U^=CCD&41g~ryj6C=RJp3EO18Zn zHsSC3bv6=e3hUQB5?|bkXSfQ-3fZ(4X=o3-*=yIXhcazqF;3UK;OEYsYcFrp`0Kuo zPc-CHr%biHQqlyOm_2K@y;Ms}OZ9SY3p1wA)TUF-CL38LB_#oJeX0JEUeZ(Sr8#%b zTC!a>0gpzS_lDX!%+zU+pxV{0Q;J?b)-(?(>Hqe5hv5`$RVE zA_G&@Q6gww7!yo?8WX+#HKh)IJnBVs8+r!+s zbM3jLOv{!n3va&pX86m${7WO?bZqHF{N^{m3C})5>hupJz z3!QY@J$1mWh0gN&_3N#!AAR(Z;Y69&tXX4qhSc-?Lri#PcrHHu^iz{b-p@VvoOK$g z|42K^+S=M`3W$*|%Y%|X&&}H(exdfF_qe``XV2G#%U4@$Q#j^#)Lv=`OBc=y`;VN| zoRX_9zYJ&na=A zGjnRVqB#`@4xb9Y^R*|#iPPsbzeUQV;=-`^z%eP6iY#rVOx@P3Sgf5-XNUJc-KFo# z)$sE3kA+?PC|_+@tobVkR43}#s9jjuSgEzO&6KE>D$_NMh|m~a z>4;~hHXQX7@DJL^&qUy_zAfa$WSVCh7>{XOj;S-by683IQD9GQB*#{eq%6cI-&6+I zsYcxV@E|m?wz10?I~ibzb+f-#Rz7y*AfM=|4-<tc zWah-l<5vE*>n*1JoIY)ak)synO*=p{gBG-v<>{oIhjfvayxffq1h|j0XV136&YL&S zj#X7vrU_rPXpyxC2tFERw9{yn(X69!r;X8(Te4({X|dCh9NHN&`O%JOV>4&Y42u>o zGWn4G6)RR)n<9T?RaaMA*qXI#jM&q5=`axfw5I!bnHis1xL$c2C(iY}jDW5;E7VTW2E>q(c^I7&)V? z>F5*nLUTW7&Kx_^{>d}d=BM}|V>CE$ayL8(u#@+-*6U&JtZCu=#Y@`Nd6G!6I+t^2 zgrg_UiGWv0<6LVby1ublgngn&{ETo;B%L^y8sf@+P1^OlU8_8u)y}w+HTMG2{K{9J z5CPX{s}@|iq}8F&#GjS+8kvyr3HtV&67h%Z=jt7N=G?`=uF!{$omTtJ55N6zM|fiM zT6G>y*skK&+d3jy*EejA%F8oF*+1E_FEopwvntd~Y2JBmmoKW8ybIRhIIl9DJW~^1 ze0Hnlw{pq+@YV;P=~*ZY4NaHz&eu_OV~N=o$%C*TK7Piu?38O!^_;L*qZ5>yGIXj# zu~>fO|FF0bC-Aody7wOFUU1G2o(CO<2I`cHc*TW<#dzGn8-D4~OCmH)OB{xy`r`JL zCiUy}vAmF<7{@4W5BWeW<*Y;|pX*qdq?BCsy7W9AlNX*2y>-nhlI?{#&xR*veb zYLS;&;p0!YshQ*$0iiQN#{#WNeqMoT(XUH0($H9Mn*T!C&67{9CjPW29@^DM9@$`Z z{^XO7?RUqBAoV1#Y)LChgR`yVM@`z|fDax#XvCWKU?hCbY`e!0bcid@2ltuwNQV)^%yUAA5HlAv?XXy7Re&mVWBe!&@gUX6B5%@DSIkKmML-tiz@KZ#H+4rg<)Pf~z4xA#kGNn0d8eL`bn--F z4<6)6-FP0E*FxT-LHj=H8{il%VEF__Q42%O#d`Z;27@+w*Z!kn{@j^i=Jd&Ga|Pj` zwAGs*S!wT32=Mufb>WLWhm9Z?ifli+W@)IAhB{x*A)4)#(z2g8buKKEIZn~I0_z}L zYG^hx4^&N;uSywIY8v{ygfwJ&Ufgd!htm{@THZ!4}(%_eAm8CQ4)G)e0_;9*}wG5}oVUacR z1m1v-@Icl;9`Nx=s42cTI<&~?9U_oqX)H^RjO1rGJIW+hy3Kt|o)HfjNt)iw61hmfAJSK0`$|L{?y{qP9fNYfBf;sM(C*%oehqk zeDaBnSV68=u3TyL{^c)!X`Kz8sh3`UDSYv1_ zDU)m|*2N3v^v1*F5uRgC{nvl^IK)ye~hw zu{S*PWVK9H?&P*Uy6T1~%NAAHHMaD)uRgQcj{G5PVHF+v_-*M8805+Gk3Txdm=9L8 zktgurDPq$5)1`4Z`C+L6X~E$KVc|a{+$dghPPj!&uZd>qm4YLI@qh0z%1y&#eB|KL z`0)aQ856@LO$7GVqa!HdVsiQwDYsLzTNGAlE zkX|R5aA!0&0!Q94|C~II(b@8x_>(^sF&E3+Ba&?-p7cpL_2k1Ak9hY{daFuC2@_FC z86}%CK;k7gO%*5Jkbjc34rwXu%)pJ=6N#|oE++|;kg{b8NJ2*Y0Sz7>;FQ2XAkZpy zN<)E0kou#&E}vL#ctb8QkD;z;Cm1DxfJ25bX@N*wxOl;cJmxr^ogLxa`LnXCpRSKO zrZr7Uid}JsZbhz<156RlNPCaQ5Uo2T0U`uZie@m;#=KUVceLQ9`JTT}Hu&vk_g*H_ zf<}_|fOZ~YMOnJqyYw+Bu@~=I5wVK$3eyl$9&99gM9eW2I(6z~GU+LHKB#L=&G}F+ znP?cBG@@WlK=LUg4gyv#d8s3wyRnA=lN))L(0*`LRaMsEMDxzQhIm6xY1c2k^pg2O z`spb0%s{?zJVUfu2=uG3zH0Glk1xOcaxa1B*&;7YuTq=(<;%6HlRal4yzs&cmNyel zc?Qs=(QW0coD$- zWZA+hYdc7W>}Ha8{Mch*<}{f(>Yik}g{I-6Jrf z1fC{lCM-H~KF}j?cGJ8d6eE(s#FkoqH#X5I15azbA~1=Mj?wj!LZ#(AgNIuL()Bj{ ze#tGjq;ts2>4vznpSyF0+_XdzQmd6fUC@_X60pz3jQ5mf;)t*rRJYt$8T)te3 zCRtTu85A#Z7HVasC#3&YZ~0n}fJi!zJtLlNg~!?L7J>&cEP%6E2fGL0Bp=H+Mk7M6 zv-+iZDJC*fBA-T2kFiWjYH@l+kQ=o!ta?8NR{6d-W95vGeA+%JGn&6rX;S#m<4?b- zzP>@np3o`6OgJVb5PTdNr5sJyC*<`Zmx%213!9xd41GDw9$Bi&R(2pEBtn+K3RHOicgrgHtT|M8fDbK~) zi_#=6v3$-;&NY#ZtFmW5f1xI2&YUqVGv+F621MK9o0yCM`Bml}-d?A9WJ|r|D4iW8i+^^W90`HMTim2zoX7lASxGv(50Xcj_|GxZNtgx2?2;T5!Fn-7 zB!2qidh9qfW{?ycAyKjUDD%NiCz$e4U$5m6Q_L4GTx|GoZFqA34WDSYOU<`z-fA+z z5iPxSgp>H|)~+{j$d7!H!ExiGn{=*wCVAwKMidPw<}0!D7Vl+xZy*q8)X|nNS+cZO z)*4MpP2GwWtBh!n2l8>8S4rb&&$X_R$B(@6OUtxn^Or1s{G)m#?K}<72=vo2iU4g8 z!U`#dl;UXbHX&8by1t>_$S<8!+8bdId9=|S(RibEM#ia=r}PHs32(jimYKRR`4k7a zhESumM`MjPo&3;%Lz3x0(0Rbb4Eu6OHuOeR)`4Dw} zT>tvlzqYoHOdMK$CX++LA?`c}#O=^XShG5)l!ZSUy5Mwr)7E}j9( zpN?8s2BY*3Wd%Fxml#4zwTr=$5<9+{&BNjQfzxlYpw zE@|?NSYzfCEn8Jpm1*}VGz0<%VM!f?B6WNaZ*YAccq%pSZI%IX7+Fj6kIw z2Fgb`d65t2&p!98rKKMHkcCE`a;DF#6~_NK0*-(q&<}w=2GK7ddzX4aL+W@>r@xHM z)0Zi)RDyBwrEWAkNedl~WHBCzl?qMLp#hHX~(BvJp#Bg#x=$K-@1xuinunC6vP zri7=Gac@4bWAaR8=$)--aaH+PFNNSq8vU~xh|~7bS_`uBnF)=>!cQ`ivRe#gVpU7Z zn`%Dw4K%5yiBIYtD?)vhQZka1F?|%)TP7|sGa@OalRj5vLCd04R_p|cL=N#RFN>i+ z1GyyM7?gZ0ld>5W)Frt#c`9hcF!3Bn<|y|=;|A$)=LkG(2=Gip&NCgvm0y3?KLd$A zjsO5a07*naR9V3(HXdtBYv7DjeDznAls=OeHyp_vA^9q zX$C4sY7^f-yeo96XJ|F!IEhX`AMbH2gNWUFp5z8XeUoNVbD^jJ%VBl64~;%`j9qp zY27Rf{L*YWv2*GsM_za(7rnJ6p~XlN5_b$ZKFFDb1u~D#H4_ElIE|=Y|~jardUgE zVOLK)ND5^_1Byf2*dWsec7Vlv3lkd<=MEE(e0XNB$xMK>`LZEKPG%iVkpFQ6905nb z5x6f1@GkD(DZDQk4N)i~PngJIPIfD2Jj1^4eK7{|<9jnur?)TF!*w<~2t1e@H-mJ> z^LQ_lYrK-13yHu%WXw;O_z`Tx!j2Xt5gFr~j~F4uBgRYoGlG#}Br^?4@|362sS_Z7 z@*=aeJaI*wNGMZ+N?vh|_*f1jKe2!bPmPq+q#;h_!pB@JgyliL$h0s!w`rrvHBpjs zC@JTCWr0NFhjn~k8SDb{8>8J;Dn*LncA$T9f!L z+r+>oy*S6q6ad>`@+Z!uO08~jxhdqSeIRq|mmUi>nv8nl#BtMNLijsXz6y0N&YnGE z>(*bsdPVE@R@evQye8{aS5?^>zYu*o7nG;Es#!#?AC&LMt+fgEpS@{au=lu#=iF zTc!4$I>P$r$@7$!FAW<=ZYtwpJH{`=!&Ymr@2wC(nPdvpB*FoG?^u~B{Vp*Vh35%n z7xO~+{vAGY*e0E$P)geq{_gq^7-0gR5KxuJ-l=-8a*XHPGQyL>qH(rs{OqhZ+@kcR zO%ucyz9N}GOOt5&NgZ8$G26L)BoGqwPxFmsiLqn;QLbsC6DiPSBiUlEd}<(|*1<^f zi98fmn#i#{_%K1b6Cue*iYu!rbyQfl;vf%Exj9-d+icH~MR<&3of69{#xw%j7&>@K=u`3h;+HPk5k zc*q9rix(Ph(c&eB3mYAwg=c~sYoxRC4Dry!&@Na_qfMK3=JQR!9=8 z5RUea&L`~@l23c*8Ng%(GXe}l|d|iNFa_5oROE# z;|oz`Hl`e}Vs6lJWF%?qs1RMIjwD8)?GJ+0(MX6NAE&evVWisfCc{Jk2VI(eOC5+F zRy+{_r37(x9ONZHZlV;&LJX$F=^qYiQ@&z zufLl&ugbiv9VUSj!^Hm4jNoU+xhaBsJd_B~{vqNJZZk_NuC?jI`7KQaNmn1i^-s6Ne5!s@2DD*REZG z38`rsIs%llU7L}yCOwXh1ODkV!jb%ucTGD^LMDjI>NDiaa+Rq}6X1Uw0Y|_P;5nm{ zn>sq*kawOrp8FFgPT2Q~%>wBJ^Gzg-_d%*iBCTuSQv~C2#0k9at8P+4I3agXI2dI@ zwj*&gimEW;^$~N@+46acWMmd$@xRs12)oI~Q*lkMPT@al7%`Im>KeH?j`kyNdTsd< z-*Sn^Bpx4=K4MQCgvYe;7|B-jl0SK+SzDelKP6IFlpkpK;y{emO?jiGvn{=?{tE?2Nz_WjI{C-@_p(X(zW4HQ2lc8}Bw*dC&uh03Tn-G%jr;XuVk)GIeO@acMZ3bAG%J zQisV6viM~>(hx809B`pRnd>h^=_I(J)4%bMyku$xpbraFD$ZbmDTZqbOis z+=RRvVJ1-NP2LRzTK>8wFC1jt8VP(;o9V=mB;TY1kXat&@sC_hHYHGljOR#{v%q*t zHkKkS54E-WCG|FW#3e$S5RwbQ)lsB2HfE@K;_M_|S>6gU91?#H5Nt~iTefgk!_n?} zn(W*6P{ee(D!=8dKQSy`+quGUQJEjlxi>RBDC+_9Q|WC^_Zhml$PD+rC8 zN8(~HV3C}ZnCp#iBn|=}weImFKs7M>=+;~jiV^$Z;|cX66s71@?{-_7#oVJqy$(QILDUV>St0UKk0lR&+4ON zOsB}m)5Ozm$?Vn=j(NI<#G4t6DjelR`D6p}BOL0n>tfL|p z-=#XUN{eb7{gt8+oUAHVXp=G){xB5J(0jT(-2RVFh60iG#@d!JY3BIQcC8~cUA!8m zR+Sq$uRGHeib}N6($un0wQ9OHq4`|q041iK;3Ww8xGb4yF^X}gmaAXb(vg48hbAYHGh-IIT6z%(YVsbBhGtl{QJ! zEtw!fmm<1EE^(DzQbIey42FLUWZ>uvfTO%5PdgKmqi~^5RybrM4A}VT6(BE)H)LFRNEgzVVaSc;*YZ<UNcdBiJo{NXe5~MHB@Q_v=g3iFBeoPX)(;8%Qm1kfC>Q4p=tzF%k;F6+CLxwh zCP9&eN4lLO2HlI7Qj*rly##aBV;u$2YKXT8waG`EG4ohITUS0Qhn1Ujlp*7&lN6DIn@hZvD=8zGHh896fr(I;^yH!m){^Gw|ns{^#1m;MV3eqpkj4 z9!J0ta0Kob0wYS`p)U|JNMzqHdPY-@K7aUNB*vnC;?Aah#LsxN2{AqniGfY)086!MLl90GNOzt;LI!H6_)=^{>NRs`%nYZsmi)Zw)5ExalUN@P6up*?fFs}t+>F48 z5_pOOEsLZX0;;RXti|6VsY_{YO5h^VCL!dS15BI~9hAm2=e;aiSMoRW6&+Kpxka^@ zF+Btr>T9H3W*gB)JrQg9kXKA)#Uu{YlC%RkBK-I^-wmO*Zn08}l-d(x_wP2=)sW zEaCI6ArAlTXC9Flnh=Pt$g;>bA!$52 zMMK}~#~GUUNZcXBy~|CS9OP53z8@JH35{aKMI({DDURYr{)wiVSfZ*)#?}$g1^*KD zbPR*oriFv$+O^7udL1bUv|}_$Dab1b<4Y^TjLNx2-dWWr)nFsHySvj!d8ah)HbGP* z9tnB*#i~Z0G+Kp9J10yopC0NOFN9MUj)Yc`dhFG^MY`^#52nqyTC&ZKbgc}k^>G{*PCXZy0FR&$%U1jC@wCpF|Q+O70$0i`ROpG9QTWj zDj+H8w%1LXyvn52w$_eNRI1Su*}8Xjsv{#C|9ow>)OuB$&McoM?EioE-t5Ve^Sbui zXP$>THFQlqcLNPHCK4bBkc0$5@};Q34vP_XI21P=;RpNW-UmBE5B8tn2uJu|(1V{W zDI|tvT344M?3{|tnu_bs5` zu4GVW3QT?vWwGBk4&U{8mgK60R;?2{tnb?}{PbX3U_d468qe8q`t7wqpDO6l%&8ngMJwi(Sr?*fxb_7vduo4vrIV>^8hw)J>7AXn>Zo&#ZD zs1?}D;dwQ*EEdI4DRk4TtjeoC)l9DArK(JT?d8$!JR;G zcXzh{!QCNfaM!`%a6R|?oqy14_1e4luBxtL1zdE-m=diulcQ0+Lw4T*`++~z9;CD5 z6WP7jZA5Rsnku$AF`mIp)waR#o+tUuD{iZ4HzEz@2OSUZ`D7#$2v`Q(DuBF|yG<5w zVt^OmAw_3f)}Pu2ELDr}rfbD#pp8esZ-zs9gxnV9Be%nsj+M$Ki$!yP4bgXk@ttxs zkcgTL7{%Ui<*8dmXX}UpgfhIiE=f9Lv;oK6o1RC3i0DU;F~Q>wG7H$rxqvU+u9LDe zgRfA1MbjVW}#R;>k}*2`>6%&C)4xd6Si^pD^Z-ZNJS8tBG3B5kxIf!*e@ zi$!dY-txdL(4H5(r7lu^la{CXj@1DpL}q)ZV%o+HpBb!vZixiP0X~KM!4=}k z^w*U{vV&@odIRQKCmFJ9d6oe-(A8Mvd*q4LyuZ+m$H)9t8Q^K%%X%JYN^M9o$%SBf zeEAowHRH#P{-ew~mhEhbp5+TJjy+s^Q^kx>wLP4@Fhr>k-~oMQQ;zecOXeKFmO7^wCY6}{8Q(sUeV?MPIsl%#DgkB-hs z4TLmbQp`gs-p~BhWx}_0IdeO5y*)WSElW>h#oS(RyW$n@cyeOh(Xk7>kN7#VEvD6s zIPt9Pvl%%F8u$_b?3Q!GzFwKzJ2|mybKLx1HovgW=|*Fd2yp2S!^cF?@H@O zUrK6>XF5a-xr-N0Fzi69-NgbsrwF;5<_4pg<TVcKhv}{>pzBT<+q=p$Sr`5 z#7T&?-s)xNRlsw}`k~ba6`&oxL6%7k{#3bGcgM_Pu-{apnM<#}H5(RU?am?j+)*Y0ENGhR>3h{htiFpH2liF8qq8TMpMZ7)~*!&V?jAMzXHrK__c*E9q_6mPZ&zKDG+g>G{wYBI zYo?NP+`DPd*{@$Vop7Vh7X6-+FytfCKZMsdUZanj$N2^e?XjDEbkXur!5zXXngn6R zB51iDzolW9uk-Ir>Xd0$*<`;z^r&19rK7XLPc6#wTb8fryzMw^>18ERTy=5t_xcyb zZzyb>$Q5PF?96fQfBLrtX+N~LGKdhF9b12c-#ozl?Ts4w9{=014%v%Zjmecsz4BG! zYm5@=d<|bjBD3JfY^~X39}zoi2+iqBhL^AQg|X8P1w3Ao4qEv^oGHEMH{phpL}G{; z2HzFrPPd|h&x<~%fGv@5GjmV$!AODV?K`H=E8-z5QqYFch2bQRCSOq2k6q%C`Z#1hsJZ5?q!Y6-gBrf_{g6> zDGc*KXl`refe*^$F|?>2Cc>_5&bHipzwPq2RIcN!O1q9E%aM*BB}DdFS8tdgfcZc- z-id{Q9!J&JO%J`b2&n@pbsz7n40ecx|5?-UEgshx9hEFfY*aMYiOxDblBucgcn2=j zHFEBVzu6DfFQc4ItfzQ9i5?Myb#EcMHo`G&5=0e-0N<%yub8k#&w4+?z)mDURQw8S z>asI=KGe-{&ci7;XtEb z(l*dAXj-78+C07mT>GV(Kir3*R&MIP2hb7b>DNJE(;9Ge%Sd<^iCe|`Nmu2jF4UR2bSasq87&U!+#eAB_+vX$iq-!H2gOM+^AQ3nBt(995TO#-MGd_$*$5Wb{8 z#dqPA5k2s>xIIDc842^xS-y(K8%mtwXsTXf)$4J~xz>O1SKdk6Cd&HfEePq6Nvj<- zX5!w@N!nzhtc5f%k{@NPAFbGy!Ti8#pysA*%X&9Pq&IJnVMhgZR?Sc6NV;G?H@Mbbv4$+0 zs`NjMRYm;fBLGMB5bxi+|PJ9`RYW4qBJ`YemQSs>-HYvB-j?E{n(4|!_!g^L< zj}xyG)~|bF)-#(AIS7;jX!{&$&4x-(To(QSF;X;sH^`8`Gw_c`$3Ex8+8)}R2sgY z$W#M&+51K5@Cu|l9)L2+xWV|B$@^naaYvqVj3t_o(gig%meWb>$-i1tw;3435_xt_ zyi7>tk4}7gW8hwW-`IfJ2>60xM<{c@`t?_8?esq_Vr95^JT1y}%tJmzLzKZkPVn_T z#4Iu~3K}#YWil~KW4_7zBZMPtbuh(GTspz$-k|KicU;5L*I943H{h>o^H%mkiCz2J zTg5oVsdk-#lpSa-ag$wR?qUD8v5hH>e6~$&n!3{%w5*1@<`-b?SE&&24yLE)|GV>v zs?)maDJ{Mr`zx~hNXeuZ_!ZNv+5BWlq$7r2n;CEh!H{FU?*Gac(!HK{&X(LkFM``QzEx1}e+VR&dA)#bd z>v7-dOV{)zP5jI~1|A-Lv{?MECB^fr{r@YpAi}#zcE@8i*N~%-I7b3P+;eQGn|CCf zQ-Gc%4EmWC4fz-H^~W%|EChW+Jz0fygGv1W7i_3R1&1k0HBL49B*xj6DQb5cQa55d z+8{T=W1i?T5rO;%2&&zt=^5bpv{AdszJ?G`k$$7#e`Sj0h@n8U%o5!aWuR`&l-?I; z6@;qdg!v_PSnmk;L}w+p37t7TQG%DjM85_Nt<3#uBf0^&FUce1DB}2~y*GDzdvmoY zdu6t%Y6S=`7OPL&xxyDQ%aj9n_UYBc=IKTmoU3DXzhI#@(f`LblK=1h z5d(^1(QRM0hiPw1Kks9Q_*2y)73QETU_i`X6n%G=AtlLBM^t&v&r~;qh$8CcGA5?h z>O6xVossOw=fluDpN}pI9oP(>NgSirP=}z}w{Y`?pB+8QP?J4F2<_|L4V3*X6&b!SZIm-b z9#&V8VWYFU)QS`|bHLPo`9|s1{0T@T1ciwU!G(tF;XU-d>_(sHJ~n!L+s3>%LNwJa z*IRK?7m>g+?Dmb+P!=?)#gH9G3Yq*V7JB<0zAP^Y+gz53_c_o`;Fi~>DYURIPp4yZ z;P254Vee>(a(J;HVSmbZ`pxZI^a~+s+vJIM z+ZdC(zi`$$)gN;Z{5lb|gg5W^vTlRlOdgt&jlG8=QbjNN@Cw^;FE;v<7a$P#tOba^ zYTf!#OV)lJ!`Oc_(Er{+y$w&Gh=j7_Sq)%KRGq)qDTGO-{l*8%4uE1}FUh^um-y%A zpd9^4?;TI?wG)v$UR2MHok1GZ`Jgw_&yJN2+7RcK89|X?@Spnt)kF8J_$#?Xzg7-6 zY(w}3ncsv>4?+d))TI4Q(%_o3?qp+i8u8s)Qrx-{kYfcd(lAO9!=4yQ}bTCOcbFmF3nY6!!s9Xek! zpZ7CVR)n*W@gJ2hpikQ_x+lSEqGmoP4428N96n}5OX$KElA_xMC;6h^;TEgj z8~5Kh@OxCWG?`r;jp#tLjDvIY{7QN$g9}X*^RV$6Xb_E1VV>)Xr-xD*X8bJFKL^#b zQ5;3_jo?0r7v8QcT`p-^}7w<=G{5hlDX^IrJ=zu;GWTuSV2B3}AKioT{fAM&6 zBj4{6b0!#kTCw3?zVX-3b^6);GTkfwH38Z`Kc95vv8T|;+H)W}JZtR$H=5>d^UtU8 zgGW!^xzaanuA_#wb;q_C1_-M~GRaiflA)v$595Tfe2q%;m_rr!ekFURhOlaMZsv{~;tvSLf#-S&KqxDupjB(Mg6N$hofrRWXy+kWHfc=uB`#0XHxDdFQKNyO2lUDKJ&UIq)*$}MQCVYy*kF%Zf-)+*r zYu-x@ePJz-T<-yvoSdz!opv^ms>JI!38`n2NF6ECeQtF3j>Z~3cvMb0uTzf4xu=>XZ`A_#A7_dt2>*XLK?MehHW<(zfm=R zL52GWyDCWV{?72cQ6Q0*OcNlVp$cvvDZA+s_C!FV!H1!R3^D5Hh^^}P{S2kr?s4lx_ z5%LqHObF&;!>tLO2wdna+=}I)`-TyxSQUSG1mJ;m>4(7tB*W`{R*pmTUIx5Yj|G%2 ztsFwa3s(aOoU5mRtvk+tD6_BweiYWWcUl(oyJ=Ys%QP!~4mNmi#ZJmDsrhv=1x+xV zrAMBzcI|6Z_VTE-ne9mKXI#Kw_1&b)40dq$|@LN2Pn zff0h8<-+~jCez`y5MN9jhGxRhT4@;Z+3zQfDz5~DBy1*67A9^j{`*E6?TLYnx<939 z9kQ_Fc;jf-ylDh}I()M`Ml+?s>(q@ir?kN8c z*0u)@NQ*>#{E}})k*#d@PJKV#KYYB%Onl$34)p2F*<{Ma;0$z)HhD$acK`&OM_*NA zbQ>sO<@FC9Z=b}<T$Z z=pdO)I}hYn1HgtfaJ9*3wpcp*Uh?N>tle{9vFOT)O)GK{KceL~hVPst9lm;OM5%&* z2mF5L*Y?4)ZV7hpw$Gh=yRVn5vPFlUr^8&pjz(XEVB#nBMNbfDgllr){oNPgVK*8_ z{tb9{l^!8ZJ-@dZCs4eVJMgf>Y*AhFn1* zcR&+eHb-l8st9vJdIm&JP)p2M!vlflyL<|dGfy_lsm zuq~r{VfQGE#i zyHzIxQ!}Tq!*K=6^}qnhZrx`gpHnF)wK ztQ#4iFCqMv$rNl%VIho+1?apg!3t<5BQf1;&Z^5@TK*l^)VSGJyq{ZNYy^B4AQkZE zc1njFbM7LjB4QpC|{YU)AY#=ePf@OVxJ09c#X{CRBapxSjBm zD|-cNP%$#f-g7SmWwKw$+joaL><^&${aus=Cxu9kLYX^ub+BL%aZNUL}dxW-KlH# zK_@hW7N{p`a;=69MG2fJhNBY`J_mOuAyS%y>`u|G?(RE!O*Y}EHM-bdvHoepZGGK&p%0_`SK7>K1-E< z&*Fc+z7p(yZz=_xLGl!G2Vg1nDi9M&ql6CBB-0##R`quis(PL0FA^LDOeEC%u%DAN z2nYz<@rd#1`y_J$6&u*AJ)55#$<#L=r`#K7ULe!0-_T4`=%+h7zzt$Nsl*ZnEZhh8 z;RJy549nh#cPD>4?B1Tv$__}`;f5CF%B99qW#-t5=Ah7@?40e`uyUBkvFTAGeb{$- zfN`K0Aa#364&xgJ*bxYm^D#Y%Qi(U&t9Yjt>tFX-iKP!OM5w0IaZR=Ab~FDqaJ8j# zb3mLX%?&^$G|ov6Xcd(MV6hp|<&(7mX%5lH@thbLN zdh7ps>%KcmV({rx^_!D`w^*2qmfH4Ia0ccZF#A@KA^(GBEu<1aiJ+yIpW+%Hr<8%R zNIzbZL#v>o3D64rYtSj^BqU9!S?dEo^w%hof;aJ6lZH(@d8jw-=i0jv&bYNZ9@S|) z;rUKIYE!{r8)olt*mQRM0qjpeL97q{ga|MM!bOP<)J-I_gSpE`d3C`sbNN1TNI-~j zzJ`>gXMGCT_aX|}sL)-{1$~Q-`w>b3D84N&UxsfkQpkiKiqw|u8w{BRw zMk}y7Z>h@}_nxf1Oi<{Ndn{P&Bd=E*2BTN948qnNwlV-X==YbiJeW@?+ zKtELFx#uXGJVfzz8^^4bX;@;b>qulZZBdTE9$}Vt(ie20JZ}oY1PZE8r7R|Oel_qV zYSMLdK5e)(_1_RUOsAqp-y^={NC@&s{OWeVOkPph;r8$K&!{;ofzC0ko7cE6pFAk+0~(|q2z~fiGA}hn57(6uqV(K-*ibklpGbG) zECZ_CZ~RyxXXtXmi@2zUjpINg?B&yDW4pPUJSM7|Z?%p*t#AVj=hU z;DcCuA5wtlk_m^$Z}>Z`fcD%2rPkSE8FaFdXg`s9;S51@A*4>3BMp`e2=n1-QPza{ z;f6O6rab1U5$O0rGERRhauB)|2khXB$CQB(DX7ZgLf$&&dOaIpm-1jvH*T4?##ntybIMGT1Sp!L zDE4t){S`AHKc0?Y?#Am_BJT5v<|7GC%RIg$_|F{pGmu!@i5XalIh!a(RtB+a`sgYY zCs5rFp5mgb!c;8QxXAYvLR3K*QjF&otsNy)qO4d@e6gT%vUqK^_Ud~0XOn~@RnUX! z>vh4eDKlu!IcxTdUqY`?6hMbZ!Z8{r5`Kw+Jo)%5ul1Xt!J89#w)kNDcn^ZMt2#`?o;-qiT~D)1cm;KAtUoSd>gr7BVEc8EA=($^43-& zgMz2*6k?|@(s{aiKKUX$wm4w%wmOVFUz*i>-Ew30q^}h(W*Lbt72pWBbpfZfp(CN8 z>3Di0LC8MPHjz|6%r@n=?XGAYf^Q)HMwxXii!&!kgt%^yMg1^pcI;tQpe#6hyg3q3 zg%d7b-G1tR?vJe)udHAfQ>0mczt@E)0RE*qROtlp6Km@({zy=yzMvByw1DDBtjig|K}-A%QV9<<`?N*G(`bFoG5^BlEMp}_OPYH}YAId#dZyCNEQahQCj zN&gSG{Xbgk6R^GeS9b%EI&Ss9wrvE2<31!^eDI`R>OV|SN|jO>cd1;pEYzVPvyq5z zp*43I`48F|+J|t2JlM79#(<5DY~YPi7=|;xRy8wIze-to_Hcn+;};+X>%A-BLuDhP zOqqdgjVzb;a^WZubfR!0Gca#1NvN)EokqVh(lTDL=n>YT>kp;VUl|{#2Q1K4PL~K^ z6)OvEX8TZ=C^W8=x*bCyeXP=FZPCiuLNTdP>G70vMj_{WdIaj}5^+G4dwV=RC2N8D zCHj)N1lgqlPaZ%q8Q9ac_rBBMXa#f50IlSQk$!rUqBo^C>h!OF#be1-H3tQ)7~!J0 zmWtLHwXY~6A5y#PnPi1ba(5!D!&Znw6b6c(53(B!O~w9*jHj;{ME?wQJ3dQfkUdY~ zbQ(BvBssE~=DhE7Zqcc2c}q8yaC%7Kxpy0Gpq8Nd+McHhIz)Qo7;KJw7V~T(T#~D) zhDHVzlxSaeclm+WNP~*IgE@<}Geu&S29FNFV-n_JHX2AP`j}1DEqxj9sbdr$@sJnF zdkC!92(<}~{X9-jqAN{G%nFT#4GH1ItNCnX(i*>fGXF7RUT~NPjfdRrG4GiBFT?-p zlq&c?0tE>vpUer6Sp=1gNjyTt(1}3aMnSw>{Yv^K^ab>GUwHH7>%S;)~)w!?GN;Wlw$K0vPSS@Mlp_`f#WxX!}e@t=x@l<2B@RoL8 z=)FI-&&M_8^Nc@>K?OZ6S635)@haOi|8Xi?hQZr2#=C=49u!q9H7u7eTbi$dX{y)lTzMA?vR8=oK?i( z2s-s&>vERhJRt2n0Z}^u@LqyD#ZIHj{dnFuq}XfWJ^Pp@r#9FHm9-{IkdkSrS<9Mf zd$ww&zoC{L3^;_!Ofk(O`T{@ZHDv~tYGiwMi@#o#0Y1dzU!kz#YswfLU`vbDyfHfD5C`sL*Yf%8+>o*O<_e2@t_a1%>GCRyrl5t zcC+AoGsvvl-_~yPJd9MC@=}{17$ao<%abh{t&5l_`u!^4>bLmP=h8mV(kG4#IK4ox z9_#R=uiJs0F7FfNv*FFyuV9}_aWHr}CM2--O;O1SL>+hf1=QzElH{=_mL6>=?JuES zW8Hx)?aZL6+dO5sVveZYLZh}vjG|6Dr)9+FBz6wt{%C2R$KB+PrGk5Trc*M1Cv+{>o$*VH>JF*kP*#4{UkSUP7 zG(J^rfuWR!R;09gF_{ZCFA=_l*e}&{)zr=Q`zW&JL3yCOP_J!{UBEZl2Hp}3*%FG7 z(l4DO;By7K^@dTwOHc}6R8MPd1#f;<9bouRKwG!L1ZXCE&pm13oB~hnz3+QPx4w|P z@mn5n2srtYE2aIzPgAC2;(hriEYjiKfaV=egOrardQ}>gM2hmR9R+R1G*WHe7bpfI zx5QYq0M~q*lpWcloT4R?JW;j$E~slZpgo))W$Gv(pQ$WbaR9F$FO*S}(8}w3^05Fp zixO5AB@*2<+J+-5U-r3H+`iqgQVWyNrPB&EN|Q@l6wgk(sNaRACAyJ37ACptNSMZB z0E1Zf$_bl#1sI*5%ilti#0r)n7@}a{?xqwq{&OYsbb=i2VZR8o_W>qgx%QD9KFZHJ zXX0I4vdXjJJ&Gki32Tv2_oeN|EJzb_zDbg2!JtWdVa?l2w2cir!(p*;1Q&+GHkbY zS{s=BmT9>P;z?szCu*_EGBIeHA0yKd^6&YvVnFysFL9ZWqA^8U+PEju5%qs7jAB!F z4cr|-AJNiP0@Zc~A7S5X7Wvh>56)W0-XubiFI%n-YgDwPn|`BJKKx1N+MN#=Kc zIk+@@uQ_1n0tJf$je72B8KkX8l7g3UD=k zYNgR}>Ztx;k`6x{a6)eF5F1%(Y}S&}=dwTO>r;~1Awb~Bn$X+1&gIR4>o3JmJIhSIknJ+_uf?G_BYJ9kUX#cy} z3xkcf87olSGzS{((z;3sTG7Wv_eZ@$u4f6*sKO@Ar|xc}23Ad2`lU*Mzz)@%M;r@Ao;XD_zkWQCwF%M<;_Ww-n9%wMzRa5!Upl!NF zbB#U9?AcByny!p@Rf=o0&U70yb>dw-n7UYe-j1)s#z>Kt$ET;Qs8P*L@+pL@$t{0Q zm&N_A{F_|LvNrUEZO+yntmM8cy{zm@O-u`_z+FD7+xXos`R`4~%P;9Rt5^s8YlK1{ zA~-s&P2TJ!-Xf2WDz~pMM>tl*gw8cwg$5u;XI~p|BgmWklF$?DSn`dx36O;j)sWoEO3>TmrAPSU}ZFebNW48$XP`Bon zwWS1^)c_=bZa)~nvzAD)jNvl?vX<3njqHRQYxn*?F8~%Ujvyv`cWmIizNC!tFLm-; z_#ucBOEwEvy6FwNuuub^gCK5RVX^zQyiAn~1uAF50Um4dYN+Q~`ADY>4j5#er~pou znL<_KC{ktr^lqk(VizMW#ISgq7*(~$U#&*)kWb(fUKF)m_6ocd*PbX1vNo@=uA}5JGOXQ*FmQ+vU>tnhc zNDq1CUC5BK{AoYy!q=<5Z=tubpQ9jeZAE`kCWjVRfJomK?pswrXW*i5wW{L_59s%4 z2a>(h`n=t^ZxtIW+9NU?tCRh+@;)iDYS^VqMI!ME&7OfSRE~BT;FZynz{Tuc%ym9e zloUo>82#6d!sT6?Mb`7|>+a7_vRV2@$hjA!?4;5S;W?z+wB&|9PI9)Yi8;}>DUQAC za%fB@GVQlS#-2TyKBt1G^pR4aN&1mPAaT<3O0xe%VLM~If z^-aE?p0{x)a%&pALW^ol#c&6|p(bfg%`!tJt0;qEO)>04&>+1bANLWA^9K+AlQkQP zC(%ZR(7DwDV2$&qOi7&#zXC{w<-FiXmQ1K!IrY zx0L*{k452H-|S)sh3aV(%c}JNRrubx^674j(x@M9Ncn~dL)VI8AJgiTIxQ;f$Hp^T zq28l{!iy~!9~^M>imdSm2qHfX0w#?f0H&1Q;iESBQc40EEl&STKSuFcljcO{eXB)q z-3Te>L(kbLHr1^343{w=$EQq8aV4~W$z5IQ2kb8oS`Dw@cPD2+ zuD|c}JV`+0CXE#gqg5m63@EB#IqW;JVXd_3RW7F=){}?4%sCcCMp*mdgvNaXUdgsPS3bBVAC%zgq5FlLAkG%iq zZRd%u-|x+BLe52l^@lPfw*o3vO6_Cx4h6V@*#B@P}ihW_avOzEsO5U7mKhU zBk%9Fxem(SDgZX{03Otpfe@gAEVt|qiSkA~TqB-!L6L?`2~eqo=ch(a>vgfM5KZp; zxm0rSF}Tg#{4R~Q)5bU}6P8FvT46w7=K=mS>!CXhjK$QdMxj)1>cA4UT*p<{n_l92 zq;WRT>lNIOH}wADad)!csRr2RmL(G1mU&hL+|?oEQyppN-dPV&P3vose`5;?{-@oy zcEC!0hOIXe_)I#0T}KIi_2g2yWUmsqrWQZ_Rq;Nf(ID+Cmv$WILo0RSi7Em0UxoB^ z;{IHPaST(BbN-&8-=m%HL*(d;49-<6s*&?Z@gBI~BdrA0A_NR7gSdl6I5vIcP~b0j z5|uMxc(#J3##k?%>2%6pM8}(6ob**k^KpnSHeyO8^5BdNybrSp!RkM4o3gVLv(iz;URo&L-b_ zd^q+gP*u`*#xjgp9kaAVgP1R4le6dWclXpbrhXXxKY)0O&9NL{Y%~sf8pr)vXdKH6 zgm{E8@P{RR45O3o6P2y+kiVdl9hMCw0bG(oJK5s?@qq6Iz{_;4hg0* zl>e&1e|B*lkzL;cG^w<7I4=&YF&L(ae6ui-)2G#W!}vt<1{HF`}m zjar!ZO2>2*o;j-mwQomsk}~vM3PLhN8oRfswQ^A~QQFn0j|561f>OiltP&RE8;i`N zk&zgr*Uy7JGym8M^y`p{PC9MTm3(v}Wce1|w9|r8n>FjhlgjBrIeigV@n(LExE~{M z2a)^W-nNan@d;(XhKyoW!EXADG>=JCP>;Br6$uI^O%>-%u+>Ycx^q%|QO(1WPq9eG zZ9RS6?SGxi;G3#1v}wg{f!hpW zQ)c+u6EgD9X=+Z*5z!tEQ}E(KEmVbxr#_l)r6mSiPaYg-*v7N)E z>?%U@mk7gh+DuqBJ)xW^5}sV0-9-U@HSb}~W0EynN1~oF$}2rVvdR494<_}em1$jT zT+jeX_<3Z`A9Qac@*qr(+;f@!FL1J%a!gaj;_+2|O*QZ$M-~iY57JQI0l5sqXp~?T zz?~9EyWSvMOp?$MQAj@gowaOTq57BBlhi0D9SsFN1`U$5UN0q!5}Ak@Jo?LtJCGoN zHoZJ(&apm7mY0hL;!C1l@4E!F#c1kTBySSgsjQt+`Ij_-GT3Sl7egry&inc z@!c%43SO5+OIJV}yvQ&ytoMIcMDPu(eGz0gyM(e= zB0JW$3H)q75JAcoc0>?Vib*c$qO0~P824OH-714h3=^@a$d0aZBHi>xG2;hsMz z03&jz0MR&o__fdK!un7xu%rfPe3T4M$7Rb>`U?&{gPeu8Qm98MjdJ=hu|)V-dAAUK zBT4RZjV}&7gENu&V+S;TIr^6O}S-92ag>SRrHkK$-Cs%BOKG-rqu0fZT-< zj?KQ6&Rkj*!uJZHqaQ$)z&y|F11d4_sKP<_+;AD3ylymPoOI@&nV#1cAq0;})nT~4 zZZCO_CSCSdI}yI~gW+1%*}pD^b6(dDj}hGm-pz{82k9DkO#U$G#!)h;>xg2ni}c*d zVT_F&JIm1!QHei3dVx5d<~A|wYbSxJtB|?{|5kLGU*U(5*7&I_{+c2q=V>T#-@bG6 znKRuEwQK80%^KMWE|V8Lc1#Od1hpbD9a0J;wqhWSZ#*-^1(qi>HiG{DBokJ`|Ed2s z;=--cw)ElF;-QlwS(;F}oLK;&{uc~ zPPt-HP%Tl9B|srcPW{KbhcX2SZZ?yjP@m)cJIRCzMUfz430A4!Ir0kwGA)~41AU6} zQ{pux8iZH~ z%V^4j99h(3GL^^y0+>9LPX0RQk?}y={r7~&I$;XPBqB|7?(BWd77=Pt$@8?1vF zsO5^tw2B@VKf1kn0_T}vJ&1MSj~bk|{1Q!-5NK|@U}dfU#^Wla!p!%U@Ysv|bC<8n zoE;qzbpSDuj@3wP*bNBr>LG@LwX#`PlYRaQJpn{ke#(B50p?pZ;TTMm2oo9lx^y6O ze*Gh5#mXHMdR{uUfT#oWNSE0iEo*q$M5X`@L?i`wSsF}e*1x;!yXdRaf%1Q1zyzA0 z=>T1L<1B>j7%uj4qsG7ojK}Gw7qvFW2U*k~KZ#YoF1@MIO|j@7q*iHA1OwkcE&Y7^ z=9XsSE@31QR)~?EDbFt!rZnBg|H_TZJ955F#0gGbinSr0+heIYMmcgFe*R=8o^Pc!ZBk*n{ zTy_KH!ZI-sK*bl4{Z{Vmfymq=TBtLk-K`jPYIZAQMYt+WY(a4e%{KE7LLT^XG1*WZ zv~wP2c>41boa^3@q`MQA2cGT{M+uc#lc@tvYQM#|4{13w*~p3HsU!lCo3b**J=Syh zW66{PkAP2VKs~1#iSMZO3m@wC7>PwGcn^6X0^smYH2`g|*^!|u$+ zOdd?hC|Sg-KGE|sy5KclGl9y-K9f|RnPD^WsF<4Q$;bkw*$c-VFVy3?*b9hX61weT zED=|KcL}-qZKe3>x!#1k7aU?EH=Q2YdR{fZ43OadooLWtMfuDDCXg#oSvp{df98mj-6H5M{< z1u&)SI(lymt2KYhS1dR8hjt^tWQBO`Q2Ub6Y|2N5FyDA=s&3E&B=k|Nt>~-f*vwJj zclQSF$CCr&lJ&o8ucwxeX%)9KBMtswxCY-w<&{w}n|s?<|CjRB#~AZQeW!|oQO59uIkcw0?C3s4IO%$tu?iF`urxK5jzDf0-y zVNs&A_s*p)MV!*_{+u;vkEg89m?$hMR3kaKCV0F*h_?UHKty!~()~Fy)H^X~LZQqG zXE_v9J5aumgXNVQ9&UU~qgP4?{H3?xwJ$R)PsbRoKuqwOwju~6jxALvBS(Ls%bD*E zbcz-I9j8!~a}V&IA&==Mn1J`Ep29$Ca}7iGUN?065nd)@52$PxV338$pQcNMVGCIL zkXrfx%|9>8Owi_bTg!mj=m8h23{x}qG2vC=Ni=aN+9eYg7>M6}H{5_e%liq`tk3r{ z;rX8^J(Xx06jv|Hz-3bGrINi0F$n_1iy_ZkYnzAIAx4hsnUkS_Zk0q*wRgKulO)HZ zg1gr&ExHD!)SBPZ-^6Lz5v#4`fn*gQ`19P;;(C{ zzRmuSF^=7&Gn3IUUvaSd$y?*P+(Dc4`px{N1~LQEL;O!{OzIf3e5d_cL2E4A`QE5X zS_HB7;N}u77O(GjdUSLR$^I^rdgwi8;|{Z=gCPK)pFMIbpCqVL*6~;^uJJq z=kc?rXop9$MFv~i|8cV1XyhDFq~e}-hR+c^?>6iuv>*yHt+Lzg6H$r2nn-8arrl-8 zZ0C!>Z8&JDL@^y1(WY@8Rp1tC@AD*Yd`R3HOZGXGSB~y`yv{-TEl>Lq@bCi$T={qW zf0L%I(AAP!1H~WVXSd`c?h$mYpxS=^ka0V6nj<)Jkf=f*2Ud4eu8fSOL?URk_2M=x ziIr2!)Yz5!U>+~N{+IJd|% z6GUr0(Uc|H_sLO9LW%#`FAWKo7V}vs4~2Y0sfX_^>O*+S{_X7;aN6;rALI?iEje>x zlg@4WDhK95Nhgb(&e|%j?vz7>ALI;;sSefYBfmSvD`P2*&gh%cxiL_KE39fZCFj8L z1&Hp}z%B7x|E3@j^n4?B1ZM&vgdJ%&2GCBqcccLU|HrXxFtSriJWYS(SQ3Bf6<-uS z>pVi)P|HE%5L))=x}xY>z-)=BsH|{WIc-)NBNV!LGn2c@cOrm1q;=hsRc$})=fy0q zKd-JY)lG;Ujrc{16r2X6rKP!FY{?ci4b>PM8#msrd4*)7d65e&Gy(RTnCJ>_#?uA= z%MIXsOzV1Kl}kiM|H9>tWF=85;3I$$w6*&Gqv@Q&>x#BEymxHdjcvQJt;T3t@Y02j)Azk7m+dds9CUTh{+L+dUH$Oe^_r;rxHgv$cKyg|QV^SZ=}x?o_=6C2>p z8xah>>=J?eX1389-c(CXC7ZnR4Z8@!{!@ZtYePwL8LAMUAR(})5gwBg>@wOEFa(;w zQi)}p9?TVdK1=vIt$o>8k;I8=@_lS1@_EOsrV>rL)A*Oi#-!6TVGlP*cgmr*u~9CP z(<_y|sKygdCN7o%(Da)(QoABZnTN1pvX76nh_M8zPytIgQ9@o_xo{izyEN$OyVoXKQab%WW{ot#u+*?ddAusC zUN0`NAxdSoe5FV<(3;5B5hLI}lbdCV-W;AP#JP{2oO94(L$M4_=9+Qk4z?Mc`XJ!X zA&jA}LPRN>#}<|N)SRMnl2RwCX&5R}Oq&Hhp%C<*OSUJRxA@kpJ%@Dso`-|pYQWVL zreJO|O<$1T69%eHtfEWCQqfQrNSr$a%L9j=gz7#Bq@}Dny;_|k^81K%)3b}!o(ApN z`_(R|)d85~n7XI`rQ9Tiq!*X;>|i3d`QKpq!HIimSu?0(HuwE?;$!uJNxbaSqL1fJ zoJ2ptL;NMhB34qq3+XpP!4>*>Dt4;E5~cEEDU)7ZF}6Viciww<;Ty(84ohJM_M_g$ z(rQhqW3TJUGz%6JljDU1Pjpv~NjqA?W4z!Ev+mXw%cq1}wBu7_0{1NqsY!hzkPcfNZ zSoS>ztfujq)-^L&J~xR1&^WyaSv+-$vC+4vnp!~FLfD$XH4Q53K~TD2$)-l3T>z%w zh8tq~yXJRYb@i{WSoz0v5{@sAejVz@rw-$mXv^?z#cTQ+MJ$1PJ zV!-_x4Vc%7o)!DqAK(jFqN3Ap03TG3;AWUvo%r*x7syUpFjhy4JR~#Z-J3u5mE0{Y z=x0(=VL!7A^5!~3S$juG`Koc$7tHT3N?veMAN0yC5&Jf|ruYm_xOtK^OokMS8$4JL zT$QxiXug#_-b|Yf>SbuMo&fjcWEeU=S{5y&MB)asERb})tuP&y$h~V zh~dD?9^WtN8#UX5qW*&Gyr7{_XM@X!apL7i%2AEM$B6dU_J0oog5iJp$ec+4k20-T z(1I;D)b#mp&vWOU)ZH~0fG$|WK`4FYR}1A^LO*v>8pGi?!aUq46){*mIZ~Cnxm5yX zPtr@!9WTH@cZU>phrGIFmq5B)^}FsYVH#a%7o3WxSjm*<2EK-Eb)krY<$uX3Tz70t${)Eyf=9EAdE6I*09+o(1o(xlF;n{_uwyoCV1Mt8W z66{6PuNIuT*H;Y5Ec#A%JcQ%B1AO({WQDC|A&7#Al?H1aghd(_RwgSr13MON`RK$N zRJj04R5?t_&Kg6YPv@uFVd^*}jO(UpQ@ZRID!?(kmBAz!fU3iPDePo~qZ z2CHt6Enw{Freo#3P|XVFcy8%ubDlm@1zB0>ESg6Vfa5u3$l(p<2RRJ~*F5uTYT9-0 zyv1QAHpQGlMMv&Rk?Z$5$^fsoNR;VmB}nNHaNEVas1a({>{3qvot_-o@h+rI3Y)N5 zWgzW%d=SWO?*I>HAA zK9`@@(B0Ai`n>UrTWp1o0Q{SaJR(*-F0C8eKAJ5DX(ncH||VA4~wxky;GQr*_lXz9pE z8_T3$0(LQ|3NFO){psxR<*dCquT=e4hwwTCbfGd)W4(9j=gg#MyYoYnb4(}MR&Llh zSlc;q;o-C*UmkMymtOGyA?`K-CXkmRETmFWh)`DT*xpQ`MZ5Ir`R zD2E_V%8n@0*pkR>;49`sd>goKOSv32FZ>^AuAlVU!W#q`@^GHR)Fc$5vjP(Anj>tO z)Oaj_7}^e6r>f&BQEG-4uBKlG!{0hog1ba9a6&TCjv0zi32svX$>E8lhI7_)dF8W} z&;aZYy`ExOf3csaxjOu}+#tzg_Q-ztda zNNwR#h?i87NOi;S`QwS!3Nxr$P$f9iZD;YP$}hleD9B*p{Dpuil@iMdCz7!6R+X&0k+f3VgiYd?nWRUt7`sreDwWX0Xw$ zt2`osryQx}NMSlK7yS0u-$ydFDJ6B+1Igw{4!5+{99rjlh6CXs&qajkpXkiPv&o^lc&3jc7zZ9U@Q~|11&8Nm^gm^-Twv^pN4o!nGxkDgBdXYa<=_)`FCNS7DWMC%t3%dmzWkIGcWK|GMtDulE0Gl1ZEN)l7a=o zP=&yfC$;8{mZWSdBnNDQz%VBok)aj&48raY43d0xb0W zOjO^JKF3&KZEwMJ@I<^^If-*BCuAB1O$w4Ai+r44J=$N$^{MhfX(`qW656rwozt0I zB2;(rCR}5O%@Sq!v#6Rz*JZtV!j)BiC7h~`(^A^{XR2j+DAx>vLR8#C?xR;yUnca^ zKRGQLsO1jleQPCji?UPSvryQt_8Jh9Nn{I-NZWs^t&qRn(|2;)A2=YblRR-m-0Wgd z6HroY{@J>cwcR)7F>#eZ++~*fT`JlQpLK&V!r^*aLE@d25TLp%5FQ~ESiqjR&a?bh zUh+3T8wZ7{=Y5DQ?vZDPXU?_gXym4}bzHKkMuR-;i`}=L`tiR}qh~lCA+I(HqJGz19$AWH zsFJyZ`8gY%^|i`pxF!jkqA&Nin zid}3r(lJ;9aI!^9`O7VMls8Lm*MU7?Z;{V?`Q}n|`np%Jx7Y#uKoS8k2PTv)^{adq z{?RY7Ut@fCAxeO_%EBz$31#@?mGvUzS;0!-^B75Z%S*;YfI1{i0x@Z!0TW^wGt|yU zAUi4$j|VI8d!z(hOi)VJHgl*pX{lJ|GuS<($n{}6>1DQPUR9`iwt9kZhVy0+j|H6c zXdh>h1<7};AQf^FM%;R%YD7T4^j7_MoEuXB(FJY8Y}pyF68v*uVr;`%t$qDet#PZx znc0dqfc582czHg}fW@GL@HRDMHZQ|eJlZ)yQQ0D{XarTP$?UnbIMjg@29gc;5i8tR zpN;{R(oZad0}wUCc?Nb!ksi0Ea|9+CSnpC}e!|Vrhmqy`-UxW{4W$hXRN{tCs~)oG z#Y@iTJmJW9=of4JVl{eH!#&&uX%lbMEfbznsn}Zt(?QLkN09Le?|TR9zA1dgpRQnj zNE-fC75dw0Nh`^M3D32q@lG#`q~PgJ=W~2Lq3-|=m=!1CJDV{6t+RD_d8Bj5LBZS2 z?GC+3(-+ws6%NsDrtu_FENmdviTfXgzS!D`-GQU}(_^6URb^DGlYN3?;Bctnu*bjS zh0_%theafYW?EilHbQTUU*dpC+tf5hnTiMLf)DZd;cX`UHT|VKG?$naK3s$oKV-^v z`nA*)qpM%7PPvs?PsLu90W{?NwLV3eYCHgB5HtcwT}D^sEfB zA4GUK5QB0oK(fqv6%er4)v;m`5 zc1d~OAv^(=KNM@N5z8kGmDO<8uL!mQPSW4*<4NQlUO5~NPFV{9uR@$vhZ1mFiKefxR_1y$@gk zo}ADiU)v|E71SA@c+bwe^t4`*J73Pdk=!60Al5l7y9JND%GQfCMDS^63u3tZ<-l$N z#H)&I>kS&=u^AywLi|6cw+Y}^#p(2TPi3iFZfR7gdS1i)AH(z^j;cSNtM$^4GB;jJ z3?$q3A$(FU8J5S~yI=G^)(*LDq5UtRk$xD2JyTp(708X;O>(^4uh@%X>bSI}ThWzq zC&4knc2wXb3E!CuzTvhzTm|}W!5duO8~8n$UZh%B(>{_P2rC3jjIx8>r}{so-XAIY zFFVU82fwU3Pqb2Y06KeGo=Z5zRA=aN|E`=9d8&jN>PM>50*db;H~)t<5I6n98mh^@ zJTh)Fi1gn_b8iH%Ms%+zkXbbYb5VCKDaqHRiR!p4Jk|IVidYH`=}%0jq=~;umX#xt z4*1#~vJgRBJq6l|rUDDVvLbG&6Eh{+<1LKQACU>%+a%yXm0*hK0851BFl@ibaWX>b zUJ_vykg~25ML_w874ak;Gka9oq24KGC3SdF!(2{zy~r07X3c(S5MNFNPiIMCzs@ri z?jXi(1cYyi^*Em*us;koz_k%w$%=JIdgRNbM^K{EV8am(d<~)E&L2QcQDhQHV9YwD z@=9H&s{c%3*OG4NXVD9C&2)n})*)}E?OiV=rln6IqpjHai#O#2?RlF1e*BeAJlz$; z^0_ZmeskJ<$$&w7^FX2?b}XM+$}lx^t7@QV$UiCsS*BS z9h85Uyj_4osKu3ec*BPA?)P>wb4n}QGPZ98BbX9|8PQ#vc9T%3mJ)jR4&h$(&Yd3G z+^|W2;GO_JZQVY}?2I!88-v=r;!=i*vTzB#Su+&K=*77x|9%c|b-2wOg%qBH$?=*c zoR=H}-vsCQMm17<=rNrv)k76a3zgUNP_n)64Fbb1P>T;I3p@rD>!Hv1bh%Ahjv>|} zNEn~Esq^Rniy4Gzx^l^9hw}0-J;~*BssD57`4Ak;3DJ(SOV6vxs~}e1c?xjbv*4iZ z;4sqbcog?sT8XgLGrINSq)ir0c>XK%Kw_`ePzm5C*+43$DQ9`K1{LFhJoiECiJxv#;$PL1Ri9( za}Qyhx6cHyZP_oD^ZL}8*uj8*tjxCaHw?{_@`Am``d@nO3qqKW{~sU|t^0@2X;v(T zD0T`pL_XG0H}qE&D9YKOj^FXm1zM4`(5{|wD_^5^98%`xjLH$WRihqflUTBf%S?qa zN~@ijnt*O{DuYl;ccLYKL;=24pThOX0}YF21VcloyX(!tx$i^x^}%mrS*Bi{#Z>kq zD=I$h5Dq_w+DWS-J?KUlL0R9+w3aUlYCK-i zZGKq@X7YF_)>RgvqLVm@pQsnBqa_zCQ3KWT+J{Bu2)rqVkhsTTte8;IR4^^oGhu~W zX@8g7!zOB}QXlO`K~}JVp^ED#9TdB3cDU|A!%Q|y>5lzYH$#s*je?d}efI^yDT++J zA|#WqQ!PPO*y%U_B#45wEtu1nNH6&<^)>RadwD`cuT4w%2Rgtr%x1^SU{FpU@TPZs zZyO-fp!cIW0nC=5CuUHYXTXsH2}*+|p-3)M@3bBC#vz;oJ&NsU(-c*3ofn}fa?Sbn z_u5cEI;jdeMHf3&Z%RbjIF?l!v*dF!rrF*H7tjr`-S1die8d9mcYvR*9rJ;ZlGEWT zluXteW=eBvjr~Gy1naEbyT&Is~nRH9=#`0R&rGETa% ztjg4V`tWCtDz{~!-$bnQ1+Z1^dsfjT!9uZzUs;`d|FVrs%~4QW#;skc-}g=4S&_{D zaGbE+=cx|->{AvO+6~oE-)6S;gH*rgO>+h-B;&J=i(D6a+D*Fuw9;LY1cMmo0DBr` zn|Qpd?s~caNp%q*iBEy^=-+Gv72G(m_M~En*{!qMI?Max7@yqru zvO!V!f7QAghJR4t2&p&5*%Ij43GVHh+zLzmwi{inI!sJ$KQ_cc+#(p6>(nVjG=Fz|Jz8Fu%TVu=LL_P`D`8M zirJ69)IY^GtyJ@<)9c}Xf@$wU_=Gb?1~KM%B6QxN0zy5gU{c|VFpQ_YlMe+~u?ij| zg{@rxc7k;gqR;f=c+kfnC-E%dBl37KG0P+k3t5*Gz_$}%QMgyIMNh6a@75VSlyZ!zD%15&R?ar9Ct^W1T|T|6`bhJ zl8B_huAJZ`#LQl}xxVJpDyP?JDDG{QxL2;&#Ls4m$Rxfwj5-n&aLyLUL^=D8BSrT%}JA=d@@wiZ+S?bYuF; z?lS{5UtHO^M57%pHGLtPvNPxzCw|>tvoegon0*>t-`n9*W>XbXgQB1$yrg;Q0D&F8 zACBJ|EiJXE=#WE2KVs59Y}Tff^AXvJ%6M!AKvHqW&YLgQ@wl%?dWANbU0~0oH7sZlKeJ7Hw?FF(k^Ig z79J=G@BGz(yJ1DWM!O~lFDske>_u7t zn;@w&W?0D-0h&BjfueFH|0h@)@u%IEXTNfPk<*$Su|BtA(k_&|_x|&8f1c{_{UM*U zG5pneu}Q=~a`BK{KC)x1Oyfb4MCg!Zb?qs@c^?1FR!2yj$NiAm(t;VBn%Q}PO~ZP< z*2yo%%#|>)3;~Cj1ut>p*VCtFLfeqb-RNcr&ea1``tlxI_g{o-y3OP2U&5JF{T!GK zmDjP(#jl|$RF+WB8fNQ^;~(^gu$*uop;(W1^zpmz@4fI$9t}FEKH@8`1IG{K=8q9n zIW3w~TI%|H)Ye^z5-A8(5Lz)Fu!d2JOv^E(NA=>0csJoFvcug zNx(K3M}O-9H}Sad158uFBJj~I4WdyT;5EeZ#{-5sgOR$Dwpj3r5~aBRtN8Fh<^@~> znRH>WhJc#3#aKnWLSUE*_8tDuZR$6TjbahDL(cH>zKv3Ql`m7^i~~V3!t!lb<>Te| zjl_529X`aAKdvzAN;$-fT%t`JM|t!S4v~VEhqes|B1#UzSE*+7_`ttf22j6xn-m=V zS~lG+f_HYE4rT1^;#<4}vo)PMv=>f@*muN`!RX4!i|Sr8_B~5Ljg~<(%}-Y(qF>HU{dSK-}qF(p= zT{T($vSSZD2_sTl*Gcil%>8{6_@gh{J>)3lG-NsCskracr?T?dEMb6Mfa{p5m|oI) zic4Ev+xCyXdKjt*z+!@)*?k^<+B*rX$6nmp-&7CYV4+3*aAAq;*1 zK7t)(6h)nF;*Jc1%DM_JBWo11y9&-W(@)sWWQrkGVrO(AwjuAIE@rdH8?wG9`k^ap z($J}&6}>2V=T-JNyRk-dUy13Nz}QnBR*-7lWl*!Tj}X^1I-gR&(!?L28r}cgQ5I64 zY9y;6S{VSMfUwnJss!Ei|3+5^BYDTdJcc`~2GO#aVgN&=G6ze_$7vw(cod|mnUl^q zA@lQg90b))ONsYZ^D)zZqaGE$&zOGPAtqY79%8s#{m!>9081Ws7AOiIa_%|?4c8L1 zP(y~}Kt>ekv;APB>dT3j?t4+OMD>W+TQZc zmqm9?hI59Zw|~8~u~*(VWs*$$b-KI+Tkt8c`-9hiyFyXNW=m!B)Dj|iBSgZ>>+rsh z?Zq_%sTq;s()p91c>hOGbie-X<_4v*#`Lt#ntck&?p{PT$WllM>-f06jf+|S6H+Gt z{dN4&QS|-GCrzV#0k#cx=XKFjt(nhGQDmj_sRg2P-MT#24(Mo7?F?b^J(8`mDun5l zkRtB9F5`n1dLZdd|Nks4{6ATm;V<|y+lUIp1)h;fAL9yJ6M(>1Pc-g!hx{oPs&YOJ zV`{uBStV;@Xkd#S*!4kp8&%|`7cdkW5RDS=j~tAd>&xwV;DJnBn=O`N2%+ zhweh_f#6M=vze(py%{D|LbCXD2DQwBrj=CF%K!)ustULQ3WM*vc$@qX{$TNAel_gj z#H$JLKI2?&3Wb-g8}+RELU-VNJ*xWQ_o5d66OATz;CrHX(zk;wZd5+EU*YIim5tqZ z45U1gm+cSQ*)>jGXvbo$)(%Hh)$ymEFeqITMgBl&z^9_)GGR1Q#VuG`w(t&Wk?dTA z*Qt`(b>Jw>Lh&@pS5B*QSa1yZd5A+5GYA_Q-9Lvc%zsT)EFc^M?JapEgfd?nUBq1I z!+RAQ;D=TsD+yy8#|`8wpZQkgr0x14K~ViI4h|3+_m;-i!-uY7Lt-BhZP=bn9!$XZ zyNI(u%zQ@5HctO?St)@mV9LWkl2(C## zq+SqG7kXR|mFm}8b_lp2+{KT@2?)@J0Zqt)Jt?eoKqaqq-vGfZ9zhA#$th|O6X%W5 zU3{RLSY?zhy6bqKXpN_nlys=5nr+^!Tn4wAIm~Z(gygBDX1WgzNchYIL11U1`$e-S z!<t`@)p@SzwNtc1Be~F7&pbGAwADZ z?KRyz=LwRTv2p-cvhe(U{xw_L+tC}?xnUYxzrsgmcC&u^Hep)z^0|!%(#eI)S6XvO z-n-v533fab8A60!>V={%-hKrceiv%|9`J9?)b;!X^Z0Gzm_#Z}mdG5?g^e1Ndv@RV z1$B!i&v^@N6WeMOK|BN4<2L$M7Y--O5|;G^3m=R%RVh3RK+6YsoCiot*^NS4vWiW> zhK4P~LFEtowyPfGgH}l&Id+xAEYXV%Hle!Zwn`~c?ZLW@#Mqtt4!r}!zLC?J%o1)g z7{>X7z7I;j&gOYS+>((a-<0i)3Lj8rKTp;SC8OT5?9ibYHP_K7BHO)Bssl=ixcZ`z z(Z04>aTbsQU6qB$tc#)?qWy&WEm4l_*}#o3=NeNad>)6gAHEj#7kBIuOg#=C;&fS1 z%%+j%$k_qw7^Hd;AgTl1_vqHXtwJL+<%o+7D^Ex4P+rFsvVLK4S|r0ZGz|b*3lVgC z@*(j2S(!Gv9#WV#7*2;Ey%Im|k~iLi!^prhtmb0~^>sqlXG{e7{3LQ)qAHEP6q;G2 zQwtUk@|V}=8{8ORAw?pVxx8+_-2l%{^$2guqgV@M>z*j!JU2VlMPMULejOmGwy|2mTgEj3=d%uJL5TPr zB`#b-mSrhKPEW5aH11>eVcY5*Y{E0q zPGYPHNK1N{K3#q78s?tt^nfpR&{%my{*P59n6(9^-C#NDA&&rEsy>w=1jrrWchKeb zz*p9q*AT=2aRwQQFOS=f>KxDv+vw@q{dZ0(m!;h9z)%XrODjNrK7R#;BsEWXgyTTK z0;kCC51N+CF4F(q5yV;E{qlz{A92tRIy0@vx^YEta0#qK6RzH9>N?_bMsk}Ru1I9GMp&AZbA!% zH{dVXJrA^25_bYg0d;UE*Pyf%@&<05 zQyd7HdDf4@_H4_m>?%WmKK4m}*9)LoucU1vC5KR@ui-0_>exJIgdk?Q ztVQ3>yV_0qu3k)Xn=jLyp~lK^OKDVY zf`n%RE=2!a8ENqvz=cg(NQv$f{LVI~XES4;jnO=lELT)s^KPot!0ywBju?QeOHzAu zng3D_RoiGKR%4n5`8y)$4}1U7J5hwzgX8xC`5 z*&ZRbMd87LKG_0r6ccOn6$4VB5m}2ZPW+ze zLXLmOTl&GoG#hYz7y-_TtfL2@PjGSI75ti(5Y0u%0`IUjr4-^d4Hf?*oEI6OZ_=WGL*4W2(u$W#s2v&V+Xb(m$I^}t0!*#L5it`T;tuifns^a# zXEK9oayz;e=OD*TPQHB4r&hn`oZGJf&y9MFJZl%pMx>JdJme>G3`<7C>0s-XMa&2} zAAr;^d|)@ZDwwO7V0iMCJWuC2IGW=)HZu|#=Fl4_- z5VGF)FU4hQk2hONgbFhbK z5f{MN2yxMFqmGU$aI4&<@(_IQ&Kl8%Z?sVuL~*6tbSKO{%GMCqEWPB{2k>8Mx9muF zD9qrljf^5_8=E82UikZ9YecMxWt33E23*MoKbi4IeiOF>HQU||?D(WhS$6%+EGiYI zo54WU6DhY??h-iE+g8EOHxve{V*wG<-AzL-4C55heHNU^!G(|<)j_v5G}_$734pLc zK(*g&VGRmK7OwKEF*ZovbZrEx9&8tTlvyd)WK>=`kOZ}fi*dWAEOjD3V*-Vct)ij8 zNp%Y+En7*ZZd3~k|IT4@d2k7>Wd}h@8STlRAISO3(LPi484OUZN?1s5d~m=iUhAXx z?ORONa$g_#V`Fk?oI-Ld>^_6TIH>{ra}pcF;?R4ChEGbA_1}VcMt9$4XKzB;4av;f zoLu!s2m0$v-@A#CiYRU$yOW15Uhll@HNky<2ZbWG$LyUZB%)z5~JKK#6Yx|qN z7?W-7S{aA=(ieB{hqDJ2(gK;J?sPsATR^mnAYtlBIY6DneSp+tKfZ}fT>}HbJ3UuX|3e!Xa z0isqH1Es1)21`AYP6usma?8=w@+!~8hP&m$xH>ix5$P1hPi0otgmt}CvFIe*JUet? z1CYf5Q1lthB!RjR(Zpa#aDZg4`+HH?@;?}O;}~<9V`HsW;VZB?i*y(%JmKV;Y}-=m zsyHjR$ck8mBeF@ygj@zy1M3IJ|_H|M7p31(1is90<%!3qj?e)1jZ?1iJ_3|(Fvfl+)*A0TV(^# z0Vu+HeYmuB8>E~KILR3&-X0=ke{}jR(>GxdCOaptGQygxj^%U89@E4&zg82v>9nV{ zfJ=!~5DrVWz8u=%DI8>N!bk-ez4@9$I$(`6%#r!~3Js3J4rJkpO~s|zRROy~vovYG z?hLcsL)(aW8?#Kg#S+JFlwJUvn5Nv72|tirh=jFMOis4TQt-iqGz7^2`gs)@5>N{D z)UUu{kMVGqpNt(H9cUESey`nr1OaEXp!Yj2{kXRIPCKSR17LaH!{;OXi8cOJJ2a68 zbI0YUZ!pd$r58@pHhvmaIe14qnbJnql0$WI#63UR{V5x~va*G*D1?sWfLFwYz~f(8 zh*i&(a@kn@xm&v5+t7TJ8s%R9eB(Bo7h~3M0%KZ87~CJW*jW_3>Q6GdS*5fhVv>ju zZ2r{jGIL=rAm42EBkOoxu9%Fl>vt4*4jCkkISdne|JvenBAUddV?-Bl*wT z+^Gjhox0#Z^6ut&-0lX0a}SFnt`+(%l00iuz4DQ0+hA~O;9|DIezG*GaBpQl{b0<} z!Pfae-Efl+uav_{7Zz9KnBY{&<#IY%f>6QFBm8e_|cn+L@ z2OTn%=6$`sNDJ@4c;qLsgEHjnszGtf!(s^0Ui?|m9A`@xZ6Zk5gAmyYcDaLpS`W=2 zZ51!w9qXJhWEbbWOs;8!kk)XS;t7dvj_v>$p(I0(s5B-v0^z*Vvj^PFRcMlVpbkk) z{_RP5($y+MtE8L&H=NP604wVbFbN8#G+gRmIN_=)^n62E5LjS(b7<=Iw1By%*&8`K zZ@++x#Z{|~ao&nKsSc~8)4B4_2Cv+Gmy>c^d-{dc3bi<2zy(H^4N1sHcRfyraMNz+ z`};BonI9sL6Ye5M)Z=I`)tEFFPL?-NIWU=Nb+EVBcy-VuPGJ0WbX8gRYv6=04o5TW z<=(ru529J`>I7H!)tHA3E%K*r01Gd~9q+*M`7it1w^vH(p4VpC>Ft!4Y6pTwX-kRA6b5bradcGG2vkcp7vO^^zo&RhMlKr2Jg5Y^AbOD(D|9Jet;eF4zn z2D(3iSP*9b=w0ZEugFK2&&x;|yAE5D0I4GmHb7ZcCRSQufY%7BQ`pO8XQ|jCABGRD zA~a~wstgQkQuB*vQm}l%YQ>4f`Q|rxvE3DLnFu}6JXp17r z=EwxXVhHt~xOd>Es3T31uD22HX7`BS12S1|r@Vp0zUC*O-v=BzG0w|Hob>zjNCP{j zlO1Kn5bi}c!wF?56Ht<~;^>(xrc?k+jEc7J?aK01lI@cDQW4@D1!6>N3m?VaJm%XL zyz-A_ELd5u89N2L0q#O2f89%EVhAxtR6;%+M;$(6tElY)3=%uI!eE;9{{o_&5MV=Q zIxr*DG)spHXzIXNb5lWw@d20!@_fI~0*oqyY|UibV#7~ zFm+vqqjqWIxh-RH+_d9^GEHCH^yqwFOEGrgVy@q>`du?ken@)<31vd?FK$;RS4UG* zjxV9>-o|qee%vsn_@Acnwg_5udB^?tVQSqjFQod3z?T`D*qt4Mpz%}aP6bj$}ZCZ6qF7!5B*QQhNi4@N>p7@V*lOHuV8 z;`|f!KK(owAOU^G=yj=P8pDpNrX=iv4*FmLIQF=_z~%WsF|$uEni~jM;CoV&BdVEj za{i!J`p!zdNUUT~&E5x=_f5cEYz$bmQzKv|H^~R3M#N#%01(bqfohaUnLJ9PZcN4{ z2)B;D>((XRN;=%FJoh?84e)>eQ(05*jl$b5HcNGRC0)V*UL-5ldb1K{lsn{QUNeYu zy@h4PjD1{o4Vd))v_~pff($>!+Cg2_%!6h4T6knsVHZ}Qa-{|6<`&i?T{ijCEcM+v zys)ml`)_TTC-NJ_+MS>YgVGp#AnW4^1-ju<7u*~vvSg<+v~Hbm*xRfCkr@`$arear z95i7)#^%}%!rtcM15L2HA*E<(0kr8)1PhxTgcRVRIO!gt8J(9>BFryz=>r^Q)07+B zInScuP3GPB42*E>G{kShxaJ5{f^y%WC4ZLVp$Pl;&x)qpm?t`fl%2pmx}i#z_PCO& zAJMb_WSiFV!TGB>L7G52LtkL$GFult$JdPf4De@icpLZj{E)qH{kY&rM7D~1IA-$w z7}gSYD1R-$RP%qo$qlRae>+jG(DQYT%9KX5zT%r~MF+%<-E6KOxd}qM1XlKXoh>&W z!gN0$S2&st+9q4xaTOzVynRn*Nu^_>xf_X`)lhAmE+0re9oz(A>QvU0^Txg;uA9}h zcFSX$z24NHJa!@#zf9q}=Q6qr>E*x@W$wJ5bibcmE}Fy*)b^XS-n=wVCNEUu-SLif zJuI#*DEdFEn&HY~9Pf0Eu#LR6*uzUbeXD#q?b;F$3+qd#U%2v)Tk^rYJ5t}5{ufg> zZ%hJIAus_(UiK>C)xi8u|G2Od*W0m2W?U(clnYA|TTy zS+V=)0WT(pq~c}xd{`)?=}sf=Gprp~#%x(Z`vJ@p>_M2qOU&$(f(8cqr3G|sV3K8x zJ@WQF;#H~imdJX0t5#`=E?&dIYNU@0q~n1njg@ngT2Kxbn7x^o%NyhcZ`)tkVLkTQ zh$Jx6x5Q4T+;=4e4#po^hO6l-!(i*-&=ci#l(exnS1xqKV7=AosHa?Xw$kpj5GGA^ zK=-^IxAmQ!*7att5n`Km+$8x|Kr_m6hvg07xXy7$ zPHVbJ8z_PsV;2;WdWA+cXQcT2e$=5tX`$X&@gx)AQQdMafr(*LP}pK}dJwKOIN|A> znB>MykT{uZVGnri-@Xa4JrkaJfIrw1H@xZ}(R1LNGaS#uoDhR$!-#h4yY zztNv-zvb#<)gA|T=PcYB6o<}SN*c-1N!tSjg@;P1_7!h>TtgvG-R^SxmyxDU@6OZq z_SDjehjp-Y^q1G0iEj08cZY}6U<>~52mY}QzpxE_Soj^z0@BR4p22J?s^L01iROGi zF8rT23fa%&{9kuqG(L`U-)XAI!kdK5!|7jlD==76>>(O7tMy|@xK_+Hb z=l^L%_Rc5@5x(yTy_11mc7MEdBO5&SVv`=a3sgJ$d!O4oJG1@U<<`j|nEdd6>a9op zAm4eZiBkW5!mHaH3_S}|D4>t^i#L52Fc+)jziM?Vr9B(1zAf1gFoQc?uEtqoH}4MT z1j(&j>)|h4sHhuDFurjfSf?gcC`TCtxIZMEt{GRq7ZF=)I`Em~D4h1J5_YqykNsh1eGWNcJzrqj5wHy)V;Lhp4gM6g+5o9|f*%f` z96l4KEu7U-e#D(Yp$JYZdXZ9`W@&_hDAq~v<&v6F9PA%s*l z*mV@>0O~Im_xtPE+GQ{8;8>7jeJw%j(xvw1uS}QYR^z5XlM0OmKzP~D9`)wMX%=LH z-`+@JQHBBv7yzQ3(HipraxF^u@H}ThZgYWxw?vz!bjWblM0z?W!q0-%PEPuNWFS@vOwmcuczl5C9)0vZ7v;%{89PRYz%Q-`f-(% zRz`z35SgSXc%{Z{dBX`?nt9oijmop@gWv#wGRwgz%GdGjucB+Ksxl; zO<)SnMYqIYk4`_k)ZV9sYRS9p!#OnxyrG<2Xq^1DZ^VB+M8@*%_R}*kQ&PP3ef0p( z1)nUIC>1GighR8r>d&rrk`W}gN?;a?HF5Kk?q1u_pf*H>bp;^W4uT>O#q$DL@KMR* z<~frkkei?*RFn%^1}vSb>-IYYo6yry_n>CnmKLb*WVq~*v>W@y#3LLV1*$FR88T?Or;}*)SZ720uKdey@5h95_pp5- zsq}*1eT9!IhCeq?gYtc)L-5z+F>j7Hy7`%8>GYBelU+d7LfOf8)bp~Y{(Jo-#*gdN zZi2yb@U1RaO26Ae;t+eE9el?uMrWIQinM=?0@jD0qG!2-k82lxT<;pX6Sc3uiC@1G zRD85l(`i=qn|=x)`|{|=4Zj_7YhBHqH3k^!DOHb#uhuQvM4l zquT#^#)iFVd^mzw6y?8TI3vbLrFn!!6NcOq$_r#c<8x>-l;oP6GUPEot)mkyBbsnvv1q7g9bTUydIe=T!v4)$2j^JasRI^`B zgFU$|N2KbijZ(v)k+p@hAqz*yZv#gn@*bqiAbY?G)ODw%neptw?1;i_ddwXPAZTWetlC{iESrYfUeEk zd)qPjfui$CKvm++b8Lr8+*F(_Qy;4g0KOrr$*0AXcdVP(M=|X8mtzCG%CTB4%^Y3 zQ$f+QPeC{rmv>}ev0OrM2#ufFQh>mGc=BkOop)s z#QS={TyJ__cJ_)*DS8B1G`R5$C*@f=`<|Bky(`~Y%JR{-&EnL3*h!(6r3q4$akF%V z*rBrf7fXo++xM#T_5JU$1H%s&v(?Ji?p90JNhwL6cCP*}*&1&lrtkC7(I4eMVgz&s ztrxo8t=HM=w(XbYsP@-BL*>C*ll0%D|5kSE5}2h91QKtP^?;s2X(SKkkyO#xV&U)Y za46Io5s?6d&_HX_$-luPr51_RRam{Me~TT!mAb+Rq93c+iiXgX*TG36v+)#!k+osB zmhsenth*uaVQeBwXP0=pk(ojmLYDDR7Nmib3~k-77!e=w@7{C%;M_F0U?$3f0`vyF zq1RRc-klSW3K^T(Q4Yx_rQu=*lz@*1z==CnP*d|*Z!xv^w}3>p;>Rha94>%qy|mcP zz9Y_Aq3sw>Sms}&o!5|>89_KxVf$DM-&`R`F1X;j;^AZf>!8DVEmAqN#XNFs0l5k6 z`jb2bmGu9W_0>^P{agDpLxUnicXvuicY~CG0@5HM(jg5)C|yz_UD6>)#}LZUB^}O? zgAzk`{NQ`nz4v|J-|RK(oWIUGvCsaT9nbR|I_?KORv%6*Ll#otvH{wJg;LT!Bu3^v zY4dg9=K0`MEWA?wlvq|I$&Hp6P1Yxh{W9es0jU2htqhuz{3D*|Y3f)!k>znvY_iY~ zFeTdH{1CM%ilITb1+Y`wQQ|*ji6*)vYqvlSV(J+H5Nx;)zi|o6)liz-k%h z5PaJ3m|f+x_cn42>@_>U6g{N&DjoiAvl4R7&1fs6>6-D3#Hc`#X|{0$wbvG4p0(1y zPGD-QkLt#vTNR;iA5mf<3kikjmuS7iZpWB@V&eal_sqYgQy0gCtpf7)hk3(iU+A?3 z;4i1ZeEJKoLZ9l~XJ@fy;nU+zX_2oiKzLKWQ#SD^kC%5=#1M zt#NYCTmD2XvBxOVAFU`yA}5_pH_3^ zi!O!32I_jn^DOd6?~Zz;@eH z1<%fbI^OsM@uO{al%#%PKi3*@)@7uOq07hIRoxnlhyE#lBtcm6#TDy@*Lkn}1spA)}7)yz>vQ?co%? zE#;}WC6OrQu@IqXwKj?CkLBPgXD3q@u{~v2{#R6!u;aUU}a|SM}I4>;-ob?^5y8&bj9rIaCiNf)KE*r>d!{yUs7j# zzYcKAF(&th)?yb4-Gsi_lUSW?w~8bVPyIPRtO;gOzP>w}&xLu#^}XZT6@eN&{nI<= zN&C9L_6rqbB6N@+da${@GH;g38~4UOdrYo$_PF$-f26e&Fc{e+YzWiU1&@On9TcCTMtRw)f^SO++|K!7frnhymYcncGPSN zZu%PNxuxx#T$Ov`d)Vf^&BpUk4H19-WbW3aH2MK|k ztc98%Z4``+G%FGZM&l0Zn@IpV@Uf{!5qP+07_^FSBetr3xuy8&OR*w_k3}pf;j20} zvQ{x(cAxq(O!?Z(X~~syF!Gf(utW(>FFA}`NC=E0UQeQ^<%1bootZ!1a!RV6=Hn7a zxz-fC*JG$Np>M0lrq8K*W_f`S`hM1{xy29|O_>VVnpBN%IXJU}Tr26nnwzCnYwHkJ ziyLv6`v8+*S}?~-8BfcCCSM{GpH(jSyNqRkjM@E(j@w-&`S&WCB z5^ToKNAOcwGiU3ZoZci2s%`GH&aa|~ED@z`V8m&fQx?~VGs4!F>}6fL0L26So-$~M z2bzR`4O_N#y~Nn=SaFsNYT1|Sx&|O+?QEj1!(N~bJa7IxUAJ(^Y~z0Id-_(iGwK&V zMy2<8dwhMv)TU)rk2d&m5K-LoxnoMD5;HOK2tK{k*^CU(cD(3}2MLM2?aGPumAHgv zZAO_%R?%Z@Z2b;`r&l^Be#XY839`Q;sv*<&vTJ#0s_6aFtr$4s=;?f>@ydyv%umxD z3O$&*8f7*pGRF;;;xV$u0??)ZcHr3;jW<`TYgY$5TMN1`q^GGK+tO7RCL_GXX>{MF zR31-Db3r&^j>cd8D(NeFU4HTpI^~WPtwg#}zpLN^H2J#c1o&ThwJiEjpH6Qyl_)U! zd`Uo3Ctb7?8-|u)V^AS1C4pi#lF~lc_Tf|tkpjiHL^-s)F4E9lA zW!_%=;6XfdJYJ?oPqp-HUcZ-)j*yA9Zt**D@LBml)^i5EyYZ>I*@fRat>?GJA(xC& zp;v9t7$_6m|0eiq5gs2^AamaRq(Bd$p*4fby}QVTp^pV$!-8XptE;N2K5LX0A~f`b znGnwklaZ+5cN3i>x#!vNi|j3v>t2~_g(BMyWjR4;@ZYi$SAyI)2jN@gK)!_EH@82{ zuaz`3#^QfTJDs9Vkh!x}19iF{l9*>DR&f`stVfrN_Z?Lg@8DpWQLTZ(^dpzmYB5&M z$>z>>|KLK}m@ChWD^H1*tHYza`;+IHockVkMwyL%C;5aEc;6yUTRVqB|3%pVY~$%bQdr#rPNBf-kXs!HFmX=E1SA zRbp@mqZz#1)>!zB+}&{jCl*2{25 z;-hlm=(P}>{*x~i5{RgeHjRdqQ!7<|HZA?6At8J5HNGSAEtn%c6zwjHUosdS4iK36Oc7b=rh{PoeUAEPmv~k+$C2)#Q|` zE1eH@wg5w22m0>B4}A0Cjvrc^U>H5kyiwkP!#@Sut+_)fU^4Y?ewq)fOxwdMgGzyu z`vIDy3AJ9>17pL+R{X|#q!CWIrf(EQeF3KH;(382iIQPjmg_w3<=xX-g$I>Mbd)euXJ80v)5`I5>|G5;;)?c&~9t1u{#Ya5NY_#NMA)xRQ$K4RI8&$B%rY z`}8fV3JtvsVG3HchIEIR#U^l^Z~D#0h0)8N*K?UWYu^ERd21R|UMg3#34kKiqAcw5 z6zdXnXHjuX3;FC9QFh`R-Ti1a3g3z`Pbp*FSVd)uCO)zXd?B40xatZoAh(Bvve%msWYHsuEv`3lY_A`%HU!J_~E`MUn56FF?~eVRBP)N#umlye7EWI2Yl&rReR;FT(9`?+fxIx25|R}W zgwwS*w>kK<3cDQrTGz3tbE(~ni8fbjaAlWHpe8#D1YlJ#wazXdR)sOyDn`Q$L#6G?&^qrxA$W{nR8 zN_K3Lfbw;#Ur{6wKd16RD;bcV3|?Bt`;95P+_)UP){aI=RQbSMu6qphA`?n+rsR5w(YA9_yy8s z(m<|tWK4N^IrrvIKlZQ}b{+raU-CM5+1l`Fa$K*&@Tl{A0@V6y+GtYvplM9%UKM=BiP~+JTUa^4<9Upo z3{?s|cA$yer=TgU0WgdP7}vHhh61%EuIQg#vcIE~JG^*RQ8AcJI)(EvWWYRDMgLf zE9CcBUIs6LF-85AXg7>j@>(I*evwalR9DO#-q_f z`gvjueUMu#Igz0?oA<37UG?@UNSr3}h}l^JA1ZhuWDGL`5EDXhtYaV>ioN%0`6bsbAx?ayz=J7=>rdB z-1hYd{8|&eNgU_yknfJL@NcM5;kmJ~@xd8FGD$!px0l;Vr&jt`{_ra^>M*|}+K9kQ&gS<^^OX>N1}B8eD13dk^R%IfaWnK? zf&%jOU`*@5LrZ~zUI~SI(w=O_K8LWK|?hYojBmJHa z_`P;|{+QZ_@BF?Wv1SkTsr{4t&>|3Yd1#Eib|I(eIT;RRxJ!c)jYzfv}Fx zOGV52CzmQ#VLtI!4P`aCq!4K#O`)KGiP2IE-WFvM%Wc`5!fl}zc+MXk!(NXp=n5`j zHNQ%@5x4NaBbOEcUkgN4E3C6bY-Kb>jT!*9d>Lnc9k@~J;q2X{IDBKtiW0vu56_wG z^PO{o;}?2R5yvw|K1t6p{eX)f{`VOR;0{~MKL|I1ye2$;^@t*qYpbzNZq-J^z?1~yeCn@88f@`(P65-Q|a`}C|WjKpOU^^|sgXEKrCY_%2tihXQbZyor2meUn z#AA@%W;;?O%Croh&AYuB(hlluOK{9iu0ef|hovsqje$Z}W7Vznmp5G)jCs$G{WOK5tN4|8;qcApf4Pu>DqMtxjU=A{)%-CriK{uLzvsyc^+)RBBPf>O>7_gmlngm!! zQxn(tb@6Yb;_0&|N6DF&x-_ac+g14K3xO5{u1?t?|=+4S$iq1-9P?f2$`|K;% zTFTdPp8xCYgGblD3o#F{%I$G`q!XINS>+d8fQE*NCY zI>qgkh#G#Sf*pj;9OP=wpyrYBW`ef;Xjd3lEY=^S5}@j7o_)%XxD_@zWw{K1pe}dT zgheh1*YX{8w_G0y+Vf3*9E8kSLvsAi3GS@x$`*$vY6zqG2pbFzzbSQ7+X;`Fiqd_} zCaou&!{}P3W2`c;4saidIDsx{;5}5Q;~-Os+N_DMUQx*ZH3-! zUaL-evpN1XS1wLWWun|H;c#`wV=#)#s*M`y9KK`=-mj5l@A!!o*QKjc2*F~eDbh%} zYxW|z9Dc0}xZ#bS{9 zG5!j+U1{i%z-GP0Vnk(EK}=^GU;(Q>U^zw+?nRA(8%hZbG4TOLkKB4<;)*7VXEm@2 z74HhaX9cE;1DQ%yCk-|cpgkjp0Z=Xkqdf7BG%9$9WfJxKGiu(;p%_oLDOA(v(?`kxXJzI>OcgE znhk8uS!}KXyJSL{&e$HSMEuzGD#Adzp2DUOGz& zP?v=Hvr{&fQR{TMoE>+g@R6{jTt8MrA?`1DTQ zMfzQRv1431>g(p(Kp5*6d12X@c0!_k2)`vwA{$LHMj{2au#w7OUpVtbFW7HFyGyY$sQ#3-^gQJ;tv#!m_%SdGtq2iCrC=~H6x`b3c=(HYowoknnr_KPN zp7mi&q7-@Gy{?g+$ zJn$S6gitHUoRB`M3h>{Helc=^+*Icgf3C~|JwH#EN7m9YohaWq?ZM#?NVn~=R-(-j z7#$EeC-#b7oNf(Z84ImLSNqd$bXNF&0s=l@2=hvc3QR~D7WG~1p^Hz=N zXo2(*-q%3Byc3Dc+0k zeIjyv3^ypDQQ#9>qL-gZm(vk>anrfCx5p@>Kf)GHu_0*nS*jlc$Di4clkDyHJ=Rv# z-7fUTESA`I@tiVS$Ly@SsRw$e{mEE_((-K;?Q8$x@kCk2q9Bwq7br3Aiqs9ntE}n! z(!EtR7Z>p|Ykq^AHeCZIPqQaC%fOprlTck)G`Hw`G+ zDA#w>SX9tOf}ahR@jLjGyDM7+q|;s1^(zfHm9S=yx{X^}w!@r3ncW7-K#lJ*1d~oY z&iwYyk|jqSsY@>WCTGO)*|H;kQ5!6H*LB$~gP^hW(%np?vA{qeLftiLNDifp4kXQF zE-0T801WR@pY`y*@MEfDZB{GRIX#HP$5gJ6s|W;~rm(wHD5W#NpG48)eS8OrRg$$W zo(+8?`1r;TJlddCnCA{Cf9@?b#HKH{8!N7u9%rlf6bCCGuwjiGxwG=-kt_8_{Ya8G zAi?f}dpyp2V#_{7DIikr&ck^Mi}TWzy#-?T9+*(VX(ek6a>)`Z}XZ zU!|X3kkdvMh4W4N^Ve9mvDol(X*62`+nuoi+>1ZDzL#^I*ht#%qb*t68HE_ca-ssL zeBjT*kjEl8(j)uE{s;vHizJG+)QF#8(gt4Qg1v3i_hZvVUTh=859Qia z-*g57SYnH;WGdvD5dyk<=X?d2)(31fcnupEXVr}H9SZ*hV}(%4G0?=L5`I+Tptp` z%=!k{3BJ)Hl`X+RZIkIRQE74ENyZ|$VOE*E?k*0BQ(%%E( zOAzc$T2O-830*j!X-IV$Y3bs{+e>iTf9L9Oz9y;R>gs7&1aGGO*u&qw`;;j?d5Cp? z4R|>>$ywJFb$KRXe^C*EYRN`@Izf*R7Z!Dht@#Wq>(R=g@&JzN67`qz?Dh`-*?5At zs`+N*drk5BTy9j?D~ar|3*OdWcNE#|g-2TTRNvCWxX$K^W~`!G0iu1Ie(YGS@7=0p zYNSLcN&*jMW@BcbsH-X>xKhPR3{8DtX0)mK3QJ=eJ&Ow`E}a*B#?#u_9N=-gEVGyI zub=OF*aE3t^sx$(&%`7SJ(~^bXG|DeQy);656_+h%?I)fk&n$5fIH3ww&cN`%=d^@ z!{$jVvruQg>bK_xuSkMVlTyeTVSdk+*T_ zu++5!9?MI461~0GZ(EyokG-q`AUr}@N|_}Tul@JChVnMVg+iyNpF2MP0SzW+4I`X* z4{^kq1~u|ohtU)wSc^chDv$&9sPLELHMqQ*Ss~5|<^JrSG+eE?m8Y$_ZOm$fS6&sA z*Q@C6*JI61twG8K(f75+Z2mEWlDJ-pJMPC^1)0(h!iOMc)iIek%?r}(727ptk z`zDmEgD|iV(u`+#bG53CZ>ess&|dw{hg)BWiwcua69~s6K`wZl_-K}obc0RiSj5Pa zKPruyMjTag+k3x;CCT$+jsMA=2pDst#p<#$*0Y!Qx~#TJ7Dgu4h*j7X;)DxsL_L}c z`kcg7XcxX*pfM_BlJAHE4@@}%hVrLm zzfZ8%t%$0kxHH|)d6p`yUpa2+e(_GnmV5ZPzc)cqtyRROoq{%S{abT9+*s6MU5;rL^}Mji|P>VJxL4+XouYz!@$uHG$Kza)FX7pJs&&Y0}$7__1jHmcKl z1j_^#5`yl}*E5?e6aW$kIrR^KnaBVjf#gT)Dt#Z?@e+`_#v@|%(8I+_5vvX$!r$sm zwpYxt-bYf95eCh|q6fF8ZCr@ChVE*4$ouym?GWnE)@7=S283ZeHj zW)VWo`klD%jnx*m(=nwVGVpSK7u3G8ssBzCC^>uC|0*=hO)CYPSr;P#8XNr_3$V;` zDaC4HDjx*iMEg*hH$$+(2dow z*9V?F{Q+Rp>=Z5uvxfOvRz9u{<0NJc2~JA>5_U+u@nQ5)K<*Gvxemj58rx+B;ds!r z_Vu3S;Pl5l(^WW<{_!O5tgZd|XuhsT-V3gV8Ik7wS88v)(x!))dUa z*La13Gp;xbh8}|Ar{*%aw6)#!CJ^bWT zhv1YBI!+htTpTT2ncxuu++R_^IBgAzv&1A97OPV&KmxkNF|O5lAg^c_+~w(4H1a@? zV8o1}J$mT-3Ns8KEq;bHJb~h(Qb`xWx3F-Ht|ojX;BBYh3DGI4vKz9h&Q!3bd|Sf) zqcnn-m8R@(0n#pC)EbGF7hd=wn-n|!G|FBp@iR9!xXRX^UmE}@7Vdwv z*IEZruqE~jmAD)#JP8~&2S@cqyr6n3xECnx4Sn_2FDk&{GDC46Q2nkoLR5MQ~il=(!;8=Ob}3(;OB$A2E0 z6kwkUZTv_r^G?*Ev05da=e5kmfVL}j#zeP8c|Udl&v=3Q$Eh?8inZm-2HcvcN;AHp z{;bCL99GJ74H&it3m&`MeS{?2!IQkdB z0~1xk<#LMG)+<8Q41eTVXU*FDcwW6Z5vgxzD25XRoz~|n2kubH24^!b{U-?gQ@L+` zKpqj@J@&Uam6D^%Gw3+QnQ#|7uqI-SlJ89ew&ZK{;ECcVVsCA9pz%Q-F@|OHF&h}> zPoZli;xBGJ0{H#WqZHm^0g-cXd_x1ow!4K?g4b170Nh$pl?t9w68(kW3BMA%7x0+? zO8JkZE$aYtFS|q1&?3_Xb0Vx5S%9(V=Ginv-}br{60EWIGbcIoxO`2-Ip`-tQ6#3} zP!}=BiefF`7O4;=5VD}7Q*_o(g#z`^%RSY~!tNAtkWpglR9v7g5ihwfFnv;zKpnqGg0bUj-B;iGupWqZ_N($C>k7IgE)vjD18 z(nwpT4eShTJDf!UTDxZstn0c)UXtNZEn3;INEEikeZ{Po=%-yH+E;u##q^KGbDg2@ zZ?GxB+&N1z^8f&zkD8*KKBc`7>#}>Z!<-?XSpSc7-n7_4rl&aL&Zn-%Y8B3D%vLi-srfYO^a{8(2-^X+2 z&0sG=Sk1(2m^NdzZmdKO?A%sOc6&6G`MA8+4CiGLQ(VtG{TS)_?=^Lw9-qHKGKm;FYUpaKN`8CLekZZIn$gyh1*?E#vPj~ zRvn#HZ?v69ee*T(FzIs_9`kJnS+Zs3#Q6D>D!%8u&C;#j&HWjYM${Ne^ zI1O!voi4&}-%AdNm@O%wf(bB(7udNj&P7lOfexD+9xl&K_V#wei+|cod2ABXBpbRU zNnTAQYyW&RKWi4u6L2vLCCtWxdEzxt5gA~dvt`0GcCPNlDS|KYsJdW`4j0)HgZ zlFOq<*W-VI8y|p&yUg#!>p9v1_tdE=pMJMKYO;~z8oj^j_*p1UzzD%)gqRAl1hp|W zBM7AP$lFKC0&5C=sYsVPHWyv@cfGx5ESW;y&eWmmXPYIf1{%$ zHs~#IXVmu`c#g@fRxW&xp)*F~Q(Icc$-x_Q+ReoXar2FJ{-yaXvc9dldfk{E6wQ*3hnk;R2)BY|l%(e6@TdW8;{-mp1877GqtF z^L2l>$IV2gCC?!5=~VU{Lku@Oj_y+ z)cTehv-7=Gno3QbCdWy3uofD|Ez|N( zPZY08u6-T;k@QGNc0VJ0U2TzyhEKNSQ?xBJy!6Y549}djac@+wHS})q)jfpbJ?K^o zDaulqBV^^5%e_z0(8YP&M8f`FtC|9G6y%m;B$J6+d$gT>=4N@x_5gLrd4M`xOG(vD z`POxD80U>l9mY|KSfMYLUPNH*i#VGks1@>c95X%{Y#|)c{G`TH`n|rMh{&jTi#yT8 z@8&WyY0}F5UHv>Z{ATYglvBt>6519tOl*coG5E9StsjZ#*1w}OhuQ7`Xc$I2D ztTJaPLpJLMf2f?{w8NeHkH!8$?LT1m5wyniz;k~`#MBLP7Nl!#=DU$vI_n(zC&DS? za(H03c(NUCD_5_6({Y5UVc040i5J-k`I4l`_9J{cc{jW7{o&QI^nZ?af4sFOSpfjxk({{+{6ud4$f zx@izjSFk?b*IgN5yi(L1-yQspid4sBp!Y=0~FI+8&Ba+L!ds)E>fdvHaR|}DrPDh zrZ%7Och6R{pPsY0*@u_d9G?s;CE~!oN(K1CJSSr)DI+ik|96ueS!5R-o!yx+w`?O-L}Ln(Lppx5pxZ-~Q#3<-QZJ+bX`!(X+L z0Iz8YKix-G$I?}V>RU1S`epShEG+*6)v@fwBKlu`MSIu#Dl(BuMH;15T!Iuf%q1%W zY&p0RZEcoUGn$aYl+N<}7&LmTcu8MbujI}R=;B$z-E2aSz+s9LHRlE=Oq9s^=pM5g zLB%}vdZ;_lq%(jn^)*>*<_No!@Aga;_ISfjv{~9%3!~aw+<`ie zRxJj}>+xQG-?pASDj7!v#~PB)944IgL&1@4O1XvJg|k7AAH{G30u*Wqfo zIH?JwX=}(A=%7x3xxE{62|R*^r_ENhcGrmlB&b3aJHZx!UNcojyyhCZIHrrK)y z_$@4kj87>#X=3%!xpN+-HO8u~2S4W|IhbrXbN{d5`}f|Zq7^mKT)8dTG! zSi-g@EI(bv|0)WzkU@@_yC!c5&5dn5PX}Jcvnm=5badRO!wCoq*!JYl7`HYc_=NCA z)YxL(KlxxQoZ~~;s^+UDhm3G@J2cKzu_kk!Ky1kGr8k&ioCBOYbJQM{j>G=uD#tSE zf8M-@xQQ#%5W-$yE>);hbxhTt_2bU<@NWr;X1e9vBDEN%(~M@LTO9rvZ)rrl4Rk_N z33nh-^_UU+_&>4^>Bpq1fZJcLq?6>*$)v8Ba(V1s!sR!XnTVH^(L$7X;%XePfr-!2 zzM;T?*_ndzh9)ebCS9n7OL2$~p)(k4&^vG6B0Jq*ZvnTpD$g^0 z{d{H&6Y^R;`Fq-ZmK;3_nRq)3KF9SGyzxzVIj8}JqtTCTu%<#icXR`m(r?;wU`27f zD+KIu9OGyHFqSUi%c|s6{tIbw>e&3(9n_b^abVZ&6yoPf)E{(<5I#%JTr?^Uv4Uv# zFutFG>TzzQRxZIJud=+T@FpD{vwG8f`vfDmaW1o2*yYLwkYtftV>BW5dH>4~jOm-& z{q}m9V)SSO76Sj{AP-LRkE0+*Ku~VX8{c|a@!$VW+5fv0d=r9>7#kl@S9lmo{67Ye zHbwhyJo@*ZUH^St%FRzs{rC{K|BnFzS~36q^8a@`nutLNkx^jddi?Bv#K?bfrrf)+ z=i>*izW;4m4EK>E_@mYc1EG@4Y)ZnI?u` U$nIPU!2M56NlUR>-Xiq>0S<_vr~m)} literal 0 HcmV?d00001 diff --git a/manuscript/index.md b/manuscript/index.md index 77a8343..04735b6 100644 --- a/manuscript/index.md +++ b/manuscript/index.md @@ -6,8 +6,13 @@ hide: # Welcome, fellow geek :wave: +## What is this? + Funky Penguin's "**[Geek Cookbook](https://geek-cookbook.funkypenguin.co.nz)**" is a collection of how-to guides for establishing your own container-based self-hosting platform, using either [Docker Swarm](/ha-docker-swarm/design/) or [Kubernetes](/kubernetes/). +[Dive into Docker Swarm](/ha-docker-swarm/design/){: .md-button .md-button--primary} +[Kick it with Kubernetes](/kubernetes/){: .md-button} + Running such a platform enables you to run self-hosted tools such as [AutoPirate](/recipes/autopirate/) (*Radarr, Sonarr, NZBGet and friends*), [Plex](https://www.plex.tv/), [NextCloud](https://nextcloud.com/), and includes elements such as: * [Automatic SSL-secured access](/ha-docker-swarm/traefik/) to all services (*with LetsEncrypt*) diff --git a/manuscript/premix/ansible/design.md b/manuscript/premix/ansible/design.md index 4861f8d..bc8b945 100644 --- a/manuscript/premix/ansible/design.md +++ b/manuscript/premix/ansible/design.md @@ -40,7 +40,7 @@ config: # cloudflare_api_key: # if you're using route53 - AWS_ACCESS_KEY_ID: "{{ vault_config.traefik.aws_access_key_id }}" - AWS_SECRET_ACCESS_KEY: "{{ vault_config.traefik.aws_secret_access_key }}" + AWS_ACCESS_KEY_ID: {{ "{{ vault_config.traefik.aws_access_key_id }}" }} + AWS_SECRET_ACCESS_KEY: {{ "{{ vault_config.traefik.aws_secret_access_key }}" }} AWS_REGION: "" ``` \ No newline at end of file diff --git a/manuscript/recipes/linx.md b/manuscript/recipes/linx.md new file mode 100644 index 0000000..5feb98d --- /dev/null +++ b/manuscript/recipes/linx.md @@ -0,0 +1,99 @@ +# Linx + +Ever wanted to quickly share a screenshot, but don't want to use imgur, sign up for a service, or have your image tracked across the internet for all time? + +Want to privately share some log output with a password, or a self-destructing cat picture? + +![Linx Screenshot](../images/linx.png){: loading=lazy } + +[Linx](https://github.com/andreimarcu/linx-server) is self-hosted file/media-sharing service, which features: + +- :white_check_mark: Display common filetypes (*image, video, audio, markdown, pdf*) +- :white_check_mark: Display syntax-highlighted code with in-place editing +- :white_check_mark: Documented API with keys for restricting uploads +- :white_check_mark: Torrent download of files using web seeding +- :white_check_mark: File expiry, deletion key, file access key, and random filename options + + +## Ingredients + +!!! summary "Ingredients" + Already deployed: + + * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) + * [X] [Traefik](/ha-docker-swarm/traefik) configured per design + * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP + + +## Preparation + +### Setup data locations + +First we create a directory to hold the data which linx will serve: + +``` +mkdir /var/data/linx +``` + +### Create config file + +Linx is configured using a flat text file, so create this on the Docker host, and then we'll mount it (*read-only*) into the container, below. + +``` +mkdir /var/data/config/linx +cat << EOF > /var/data/config/linx/linx.conf +# Refer to https://github.com/andreimarcu/linx-server for details +cleanup-every-minutes = 5 +EOF +``` + +### Setup Docker Swarm + +Create a docker swarm config file in docker-compose syntax (v3), something like this: + +--8<-- "premix-cta.md" + +``` +version: "3.2" # https://docs.docker.com/compose/compose-file/compose-versioning/#version-3 + +services: + linx: + image: andreimarcu/linx-server + env_file: /var/data/config/linx/linx.env + command: -config /linx.conf + volumes: + - /var/data/linx/:/files/ + - /var/data/config/linx/linx.conf:/linx.conf:ro + deploy: + labels: + # traefik common + - traefik.enable=true + - traefik.docker.network=traefik_public + + # traefikv1 + - traefik.frontend.rule=Host:linx.example.com + - traefik.port=8080 + + # traefikv2 + - "traefik.http.routers.linx.rule=Host(`linx.example.com`)" + - "traefik.http.routers.linx.entrypoints=https" + - "traefik.http.services.linx.loadbalancer.server.port=8080" + + networks: + - traefik_public + +networks: + traefik_public: + external: true +``` + +## Serving + +### Launch the Linx! + +Launch the Linx stack by running ```docker stack deploy linx -c ``` + + +[^1]: Since the whole purpose of media/file sharing is to share stuff with **strangers**, this recipe doesn't take into account any sort of authentication using [Traefik Forward Auth](/ha-docker-swarm/traefik-forward-auth/). + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/swarmprom.md b/manuscript/recipes/swarmprom.md index b4e06ba..2a5a65b 100644 --- a/manuscript/recipes/swarmprom.md +++ b/manuscript/recipes/swarmprom.md @@ -97,6 +97,7 @@ Create a docker swarm config file in docker-compose syntax (v3), based on the or --8<-- "premix-cta.md" +{% raw %} ???+ note "This example is 274 lines long. Click here to collapse it for better readability" ``` @@ -379,7 +380,7 @@ Create a docker swarm config file in docker-compose syntax (v3), based on the or !!! note Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - +{% endraw %} ## Serving diff --git a/manuscript/recipes/template.md b/manuscript/recipes/template.md index 5ea2253..c0e5bab 100644 --- a/manuscript/recipes/template.md +++ b/manuscript/recipes/template.md @@ -1,47 +1,50 @@ -hero: Not all heroes wear capes +# -!!! danger "This recipe is a work in progress" - This recipe is **incomplete**, and is featured to align the [sponsors](https://github.com/sponsors/funkypenguin)'s "premix" repository with the cookbook. "_premix_" is a private git repository available to [GitHub sponsors](https://github.com/sponsors/funkypenguin), which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +Ever wanted to quickly share a screenshot, but don't want to use imgur, sign up for a service, or have your image tracked across the internet for all time? - So... There may be errors and inaccuracies. Jump into [Discord](http://chat.funkypenguin.co.nz) if you're encountering issues 😁 +Want to privately share some log output with a password, or a self-destructing cat picture? -# NAME +![Linx Screenshot](../images/linx.png) -Intro +[Linx](https://github.com/andreimarcu/linx-server) is self-hosted file/media-sharing service, which features: -![NAME Screenshot](../images/name.jpg) +- :white_check_mark: Display common filetypes (*image, video, audio, markdown, pdf*) +- :white_check_mark: Display syntax-highlighted code with in-place editing +- :white_check_mark: Documented API with keys for restricting uploads +- :white_check_mark: Torrent download of files using web seeding +- :white_check_mark: File expiry, deletion key, file access key, and random filename options -Details ## Ingredients -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +!!! summary "Ingredients" + Already deployed: + + * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) + * [X] [Traefik](/ha-docker-swarm/traefik) configured per design + * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP + ## Preparation ### Setup data locations -We'll need several directories to bind-mount into our container, so create them in /var/data/wekan: +First we create a directory to hold the data which linx will serve: ``` -mkdir /var/data/wekan -cd /var/data/wekan -mkdir -p {wekan-db,wekan-db-dump} +mkdir /var/data/linx ``` -### Prepare environment +### Create config file + +Linx is configured using a flat text file, so create this on the Docker host, and then we'll mount it (*read-only*) into the container, below. -Create wekan.env, and populate with the following variables ``` -OAUTH2_PROXY_CLIENT_ID= -OAUTH2_PROXY_CLIENT_SECRET= -OAUTH2_PROXY_COOKIE_SECRET= -MONGO_URL=mongodb://wekandb:27017/wekan -ROOT_URL=https://wekan.example.com -MAIL_URL=smtp://wekan@wekan.example.com:password@mail.example.com:587/ -MAIL_FROM="Wekan " +mkdir /var/data/config/linx +cat << EOF > /var/data/config/linx/linx.conf +# Refer to https://github.com/andreimarcu/linx-server for details +cleanup-every-minutes = 5 +EOF ``` ### Setup Docker Swarm @@ -51,67 +54,46 @@ Create a docker swarm config file in docker-compose syntax (v3), something like --8<-- "premix-cta.md" ``` -version: '3' +version: "3.2" # https://docs.docker.com/compose/compose-file/compose-versioning/#version-3 services: - - wekandb: - image: mongo:3.2.15 - command: mongod --smallfiles --oplogSize 128 - networks: - - internal + linx: + image: andreimarcu/linx-server + env_file: /var/data/config/linx/linx.env + command: -config /linx.conf volumes: - - /var/data/wekan/wekan-db:/data/db - - /var/data/wekan/wekan-db-dump:/dump - - proxy: - image: a5huynh/oauth2_proxy - env_file: /var/data/wekan/wekan.env - networks: - - traefik_public - - internal + - /var/data/linx/:/files/ + - /var/data/config/linx/linx.conf:/linx.conf:ro deploy: labels: - - traefik_public.frontend.rule=Host:wekan.example.com - - traefik_public.docker.network=traefik_public - - traefik_public.port=4180 - command: | - -cookie-secure=false - -upstream=http://wekan:80 - -redirect-url=https://wekan.example.com - -http-address=http://0.0.0.0:4180 - -email-domain=example.com - -provider=github + # traefik common + - traefik.enable=true + - traefik.docker.network=traefik_public + + # traefikv1 + - traefik.frontend.rule=Host:linx.example.com + - traefik.port=8080 + + # traefikv2 + - "traefik.http.routers.linx.rule=Host(`linx.example.com`)" + - "traefik.http.routers.linx.entrypoints=https" + - "traefik.http.services.linx.loadbalancer.server.port=8080" - wekan: - image: wekanteam/wekan:latest networks: - - internal - env_file: /var/data/wekan/wekan.env + - traefik_public networks: traefik_public: external: true - internal: - driver: overlay - ipam: - config: - - subnet: 172.16.3.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - - ## Serving -### Launch Wekan stack +### Launch the Linx! -Launch the Wekan stack by running ```docker stack deploy wekan -c ``` +Launch the Linx stack by running ```docker stack deploy linx -c ``` -Log into your new instance at https://**YOUR-FQDN**, with user "root" and the password you specified in gitlab.env. -[^1]: If you wanted to expose the Wekan UI directly, you could remove the oauth2_proxy from the design, and move the traefik_public-related labels directly to the wekan container. You'd also need to add the traefik_public network to the wekan container. +[^1]: Since the whole purpose of media/file sharing is to share stuff with **strangers**, this recipe doesn't take into account any sort of authentication using [Traefik Forward Auth](/ha-docker-swarm/traefik-forward-auth/). --8<-- "recipe-footer.md" \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 118af62..d86794b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -25,6 +25,8 @@ plugins: - git-revision-date-localized: type: date - autolinks + - macros: + verbose: true @@ -104,6 +106,7 @@ nav: - OIDC Provider: recipes/keycloak/setup-oidc-provider.md - OpenLDAP: recipes/keycloak/authenticate-against-openldap.md - Komga: recipes/komga.md + - Linx: recipes/linx.md - Minio: recipes/minio.md - OpenLDAP: recipes/openldap.md - OwnTracks: recipes/owntracks.md @@ -150,24 +153,22 @@ nav: - Chef's Favorites: - Kanboard: recipes/kubernetes/kanboard.md - Miniflux: recipes/kubernetes/miniflux.md - - 🍰 Get Premix!: + - 🚀 Get Premix!: - Start: premix.md - Ansible: - Operation: premix/ansible/operation.md - Design: premix/ansible/design.md - Swarm: premix/swarm.md - Kubernetes: premix/kubernetes.md - - CHANGELOG: - - Start: CHANGELOG.md - - Support: - - Start: support.md - - Contribute: - - Start: community/contribute.md + - CHANGELOG: CHANGELOG.md + - Support: support.md + - Contribute: community/contribute.md - Community: - - Code of Conduct: community/code-of-conduct.md + - Discord: community/discord.md - Support: support.md - Contribute: community/contribute.md - - Discord: community/discord.md + - Code of Conduct: community/code-of-conduct.md + # # - Discourse: community/discourse.md # # - GitHub: community/github.md @@ -231,14 +232,16 @@ google_analytics: - 'UA-139253-18' - 'auto' -extra_css: - - 'stylesheets/mailchimp.css' +# extra_css: extra_javascript: - - 'extras/javascript/discord.js' + - extras/javascript/discord.js + - extras/javascript/sortable-tables.js + - https://cdnjs.cloudflare.com/ajax/libs/tablesort/5.2.1/tablesort.min.js # Extensions markdown_extensions: + - attr_list - admonition - codehilite: linenums: true diff --git a/requirements.txt b/requirements.txt index 5f4c260..52f28f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ Markdown>=3.0.1 mkdocs-minify-plugin>=0.2 mkdocs-autolinks-plugin>=0.2.0 mkdocs-htmlproofer-plugin>=0.0.3 -mkdocs-git-revision-date-localized-plugin>=0.4.8 \ No newline at end of file +mkdocs-git-revision-date-localized-plugin>=0.4.8 +mkdocs-macros-plugin \ No newline at end of file