From 324ee933fef937266b82bf239a86a3dae960a73b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lenain Date: Mon, 29 Jul 2024 17:49:51 +0200 Subject: [PATCH] Automatic documentation (#130) * Follow template from repository https://github.com/cta-observatory/project-template-python-pure * Try to implement first auto-generated doc with Sphinx * Accept PNG for logo in doc * Try to deploy GitHub pages in CI * Try to include all imported sub-modules in API doc. * Try doc with sphinx-automodapi * Add sphinx-automodapi as dependency * Try doc with sphinx-automodapi * Try doc with autosummary * Try doc piece by piece * Try doc again * Try doc with autosummary * Try doc with sphinx-autoapi * Revert "Try doc with autosummary" This reverts commit 9d09952d687a60d632f56aedd74d0549649480c1. * Revert "Try doc with sphinx-autoapi" This reverts commit 5baf40911cb4208a52cf584a9009e779d0a8edfc. * Simplify doc conf * Back to pydata sphinx theme * The alabaster theme works for the doc! * Revert "The alabaster theme works for the doc!" This reverts commit c295b6b13453d53ce62eb25b008811bab7264a96. * Revert "Back to pydata sphinx theme" This reverts commit 4ad177da024734508e1f7480ba14e69761d98e6b. * Revert "Simplify doc conf" This reverts commit af71ab4c657291a34c3620df133dbcb4c7413b2a. * Revert "Revert "Try doc with sphinx-autoapi"" This reverts commit 7f9a0b49107fa6e7600f49f80f84f50f2703bb98. * Revert "Revert "Try doc with autosummary"" This reverts commit 14c400f944da6f135f1bf716478bb6ab45391a87. * Revert "Try doc with sphinx-autoapi" This reverts commit 5baf40911cb4208a52cf584a9009e779d0a8edfc. * Revert "Try doc with autosummary" This reverts commit 9d09952d687a60d632f56aedd74d0549649480c1. * Revert "Try doc with autosummary" This reverts commit f3084a66746c2c631b1fffff8c7773bd53a6c9c2. * Revert "Try doc again" This reverts commit 47d5b335cd6c5493076c934ddb41166d5300d9f4. * Revert "Disable autosummary in doc" This reverts commit 6a2203ee468862d43cf583939f7ea0cd32528597. * Revert "Try doc piece by piece" This reverts commit 372b1f330cd5a8886726aa6eb87feb346e76ff5c. * Revert "Try doc with autosummary" This reverts commit 9fbb84b86e9b1f1b46b1a40086fe26a74b44e033. * Revert "Try doc with sphinx-automodapi" This reverts commit 25a8a45ca40211fb0131fc1568d62652bd9d1e83. * Revert "Try doc with sphinx-automodapi" This reverts commit 885e41ff318b53914e16e32e8d3927986b0e8d10. * Revert "Add sphinx-automodapi as dependency" This reverts commit 69431a21f15d5261b5e10ddf7f1a56bf04789879. * Revert "Try doc with sphinx-automodapi" This reverts commit c15670d2610ab3b93228b86e38f036ee1dcc1a57. * Re-structure API documentation, using automodapi * Fix docstrings * Blank line missing in doc for Sphinx & pre-commit hooks * Alabaster theme * Add more doc * Work on Sphinx configuration. * Add configuration for Read the Docs. * Avoid building all branches on push * Only deploy github-pages (if we want to) on push in main branch * Remove Read the Docs configuration, to deploy doc as GitHub pages only. * Add more auto-docs for some submodules. * Lint code * Restore chargesComponent.py from main * Try to solve errors for docs in CI * Try to solve errors for docs in CI * Fix typo * Try to fix errors in docs in CI * Try to fix errors in docs in CI * Test excluding components from doc * Try fixing doc for makers submodule * Try fixing doc for makers submodule * Try fixing doc for makers submodule * Try fixing doc for makers submodule * Fix clean in Makefile * Try to deploy with alabaster theme. * Force a doc CI run in ultra-verbose mode, to understand why the docs are not properly built in CI. * Makefile for Sphinx back to initial state * Force a doc CI run in ultra-verbose mode * Force a doc CI run in verbose mode * Do not explicitly pass options to sphinx in CI, but rely on docs Makefile itself. * Only use automodule with Sphinx * Fix typo in docstring. * Use Sphinx nitpick_ignore * Force a test deployment of github-pages * Fix typo and force a test deployment of github-pages * Deploy doc using token * Add write permission to docs CI * Changed syntax for arguments to github-pages-deploy GitHub action. * Changed syntax for arguments to github-pages-deploy GitHub action. * Play with github-pages-deploy GitHub action * Force doc deployment * Only deploy doc on PR on main branch * Force test deployment of doc * Force test deployment of doc * Force test deployment of doc * Force test deployment of doc * Force test deployment of doc * Force test deployment of doc * Force test deployment of doc * Force version of github-pages-deploy action to last one. * Test forcing doc deployment * Deploy doc on Read the Docs instead of GitHub pages * Change doc target recipe to docs, needed, apparently, to deploy on Read the Docs. * Add a skeleton for a developer guide. --------- Co-authored-by: Jean-Philippe Lenain --- .github/release-drafter.yml | 6 +- .github/workflows/ci.yml | 34 ++++- .github/workflows/release-drafter.yml | 2 + .gitignore | 1 - .readthedocs.yaml | 35 +++++ docs/Makefile | 24 +++ docs/_static/nectarcam.png | Bin 0 -> 120605 bytes docs/api-reference/data/index.rst | 11 ++ docs/api-reference/display/index.rst | 10 ++ docs/api-reference/dqm/index.rst | 12 ++ docs/api-reference/index.rst | 8 + docs/api-reference/tools/index.rst | 12 ++ docs/api-reference/utils/index.rst | 12 ++ docs/conf.py | 138 ++++++++++++++++++ docs/developer-guide/getting-started.rst | 19 +++ docs/developer-guide/index.rst | 9 ++ docs/index.rst | 25 ++++ environment.yml | 3 + pyproject.toml | 12 +- src/nectarchain/data/container/core.py | 1 + .../data/container/pedestalContainer.py | 57 +++++--- src/nectarchain/data/management.py | 16 +- .../makers/component/PedestalComponent.py | 67 +++++---- .../makers/component/chargesComponent.py | 10 ++ 24 files changed, 457 insertions(+), 67 deletions(-) create mode 100644 .readthedocs.yaml create mode 100644 docs/Makefile create mode 100644 docs/_static/nectarcam.png create mode 100644 docs/api-reference/data/index.rst create mode 100644 docs/api-reference/display/index.rst create mode 100644 docs/api-reference/dqm/index.rst create mode 100644 docs/api-reference/index.rst create mode 100644 docs/api-reference/tools/index.rst create mode 100644 docs/api-reference/utils/index.rst create mode 100644 docs/conf.py create mode 100644 docs/developer-guide/getting-started.rst create mode 100644 docs/developer-guide/index.rst create mode 100644 docs/index.rst diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 266c3fe0..f1af21ea 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -1,4 +1,8 @@ template: | - ## What’s Changed + ## What’s Changed since $PREVIOUS_TAG $CHANGES + + ## Contributors + + $CONTRIBUTORS \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e90073d9..5cfc2962 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,10 +3,12 @@ name: CI # by not building all branches on push, we avoid the duplicated builds in PRs on: push: - branches: - - main - tags: - - '**' + # TODO + # Remove comment: just a test to force CI on push + # branches: + # - main + # tags: + # - '**' pull_request: env: @@ -111,3 +113,27 @@ jobs: pytest -n auto --dist loadscope --cov=nectarchain --cov-report=xml - uses: codecov/codecov-action@v4 + + docs: + needs: lint + permissions: + contents: write + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.9 + + - name: Install doc dependencies + run: | + pip install -e .[docs] + # git describe --tags + python -c 'import nectarchain; print(nectarchain.__version__)' + + - name: Build docs + run: make -C docs html diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 340cea3e..9760b1c6 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -2,6 +2,7 @@ name: Release Drafter on: push: + # branches to consider in the event; optional, defaults to all branches: - main @@ -9,6 +10,7 @@ jobs: update_release_draft: runs-on: ubuntu-latest steps: + # Drafts your next Release notes as Pull Requests are merged into "master" - uses: release-drafter/release-drafter@v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 93112cd3..43202e4b 100644 --- a/.gitignore +++ b/.gitignore @@ -92,7 +92,6 @@ src/nectarchain/user_scripts/**/test **.log **.pdf **.csv -**.png #VScode .vscode/ diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..246ca4af --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,35 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - method: pip + path: . + extra_requirements: + - docs \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..3f474726 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,24 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= -W --keep-going -n --color -j auto +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +clean: + rm -rf api + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/nectarcam.png b/docs/_static/nectarcam.png new file mode 100644 index 0000000000000000000000000000000000000000..8f28b617faad6f4a9ea0548571fc83472fb10a69 GIT binary patch literal 120605 zcmeFYWmH_v5;i)xyZhh}+}#Ha9^BpC-Q69M;1Jvi7Tn!ExI^&Ze#v`$-S5XeYu)eP znOS>g@9wIntDdUvwfA0Kk&5z?NbvaZ0000)I=$s8H6q7`Lq=?sJ%>*yZ4sCw~#n{0W#jQ0;g{pGx;yiqJLIbOZ$6rI)Cb~jo5 z`hs`%{POVf;WDnXuEx8L!N z9pSHjiJh-}>T32_>(u?tpQO0_i>{Bslim*KTwi}*n9HJ|AktplCH%ZQAW`oLdS2sw zd7W?0-}$!R={uFJ3=SJ)X zlaj!4gX^UCg?AV>*@~+uGTpU9&uhm7b4wrL9TuH`q~pM~@0A=!Blqm&>m^^N#&U0} z-mR)&>_wTc= z^1SUDo=9a=%E6#fLUi7m)?tFel zabtM?*>HcFf>P1x9(%sR&2nS=&Fz4(=}c&~#ec1-bEScDecXP~uWm}b z9b`mzt5pMXfB#9}ql9%W``DPQ&N3>g|(gdc z^O8D^>%cd!N8onEs5IyCJZiPJrS5?U=FpEVyi<}FTGmoBf zMN{Zo7_aU>WEX83YqkIMaH78nsbfR&8feo@5tw#t7c96SvrXri^sshQiil=aCWiPy z{@Y#0I*9>?Pg12~=E>5r%d3t0+$F(=e2s0exG@DOjC)ZGbl}aIPhKf-+k6GY+1U`J^dzGOs7_n)*X7F=T zhYely&92BT_GYQTs{`yyJ%-O$tX24>T8~*d@Q?wmK}Sb8$GdU0D$F}7{a!L9^LYAu zf{**2xo{Nhk>uMqz6)%F@)*oyr@e=+bDY)G<_l5OJ!_EDTBSmeFQ4@DuPY?*ckcuy zPfV~&Z^fx66((PbF*{yUM&I`7?r*LKuupZRCQ@fVdN~cR@`;uYupmt~9th^uv7#(H zZc}Xn+ESJd-6xi`+L~BgHz<}gC8eNhox;Ti8|3j!`vn#)p=dmtvoJ}PQdgM(yCq-M zO|vw|srT4ER_dfCF8%~)a^>C&;_xiJxWgjhlHT8Gxbnlr7^)9NBb5X!ojNex_3A%* zZt$f|J6G&JT_NTM70OjE3^Sr+UySi1w)#>YYP9=7I2X|OqbhT0dxwIK=c`R;WN2ByQ`3eI5d zdoICUt#Zc;8i*h=!uKRaut#;~Vh%D0pkZCC5oTuI#UtpUz4@{=H$|e%>7Y6+WyYX6 zHa$GbA{NAsLB_HrNcGu`*x_=&ZY0{$pk=-1Ywvd*wNsmEh>3}*S#Pt0g`uM2w(wTa zCRrrxFRW0tMA#5dH-%z68dhS*?-AKeV)5t5#dzqG1{)*2@G%pud*E*!auL6}luA9R zB1(JxBDUHiW+6xPOs3az(wfVfbQVL3|oA2I$a}jA+|l^-nAW9lcYTV&h;EMcT>v?_ zQ{;-@(3KvN3CQsH4zSuYTNbDp#|qx^CFH$RmmQn_7L}K5RaOF#2=I7=BAF)G#X*xA z33W9Dx&A?ozoPm+Whp|aAghGO4K*u&P9k!Ef5f^Er8mkV4T_+6@QHv_kRSiej@_PQ zXdjngiMPtrr7A6kmJ}P-7VzVuF;*EMJ&l+fK7_lh3g904Z7`;V!gypEKp)waU-)T# zVLEK_%IAq!&qPm$;Hw&3LF0#W83%No)w{b7iF{Ni`WjvUQxR~Q8j(c4hai0FhnEVB#-jzuq+$8@{Ji?_5m9)qll@z9BAh*Zx z@my?pUV)CYO;0F;lH1K}Bxy{fn4!hq9qE1;#ijN`&Qs zVQ-(2NY@IBd0xgU43z^jjas-IbkV|Pa6dHf!evMnxArHX1Zv~~WuEqsl*6`pW5T1) z2FJ!RZ2*!KGCI!Y7pyzt!QP(?+~ES*Ba(Bra0HIA=u4EUj98&RWRt1cOYTHJ$Gbaz z?JZ#tx`q*)yeFSK^M6V`1&c(}nv7pg{>k3{g|eeJbsGX*qz5G~)Xb7x&1Qh+99EYb}xhr&N9$ts|UrYsH?4L|mWC z#D`s62O(pZcnD_;=3rbM$$KEP9Mn40NYmPwSwfFAgLqWxsAaRsB0wh>!lu&H$**5G1bR2E7G0$Xp zF+&dpxHi#Du%_vmAjsxXd}Yli)v(aAW;xX58$tR6Ea5biGVf+U0w!HF3*pd{nnqdf zEA=JU{%Q9s8ODXz9e^Xy`q^XxhnB$O&ZW?x3g$Q{)UI%h*fkM1x*T{O3BqJ@A`TGR zg(rki1qjj$oTxHlqDp)v`iVP%gLv3b7>J4E)pOvIxJR$FXe|iKuMa0<>bPj2dIO3e z+lDRtDE){+)7ntRx_^Pvr^QX5rBXZx2;pMR9PTcl{^+K#ncqq@ zAXf>X-Qj^q1`wi>V-@?BOIWP z5M#GlZKFgXi7bdPC8YtE0(=61+8${+(Z7aPub0K$<(><{^{fl*#95U64Bl!J!8Q67 z3eL>$!Kqk;mg<3=TW+)iFWcJ9(GeZhXSv|^ir~&t%Y%{s^l6?a2Ie);!Km|_tLU}w zHxUi`F}e*?QN|1WXl7|gAYWFAKBotlXK=`I4!fVoXLxi2_EU~bLBS*t?EZV=BVah6 z1Z)D3TO%xXqflT6vQSmOSS-@STx#rj0a^mWR)R}{$NH|^JRxdntUg$sPUAo#5`0cN zi-=S8HZj7>Y#aQbkz8HZeG7R_cM**u+|r3dyi2+IYZt#ekF&ufnn=9Sc$14h`o0sdg!e$w%}IOg zAr3&&i>zKN#ZHoY6nGCY)w5a(gz_L85SQgBdRhR|vIG2ayeZ$2%#J`XI}pWA7Iz70 zcoYB5bIs5|j;mfOdQyn|;Vu&U!oB$cPGSe?o6ub<>@>KgFzl8{zqXMm8}^W2t=!TH zl4LlVra(+9=(_o_WFC4Cx&I0NykjUwZU!i)?{`6;|7duShyq6q54EFB)*2S5QkjUm z&wg)|IJ`@$gL?h~{(CK>11C@OqL-CyL(#f-$I~cD`C$eNONE78ChWQ=6s_q?`EI*) zA5q>njW|VQw}Nj3U!hO09Mr(Eka{tGU?9c{Pi61Z6Jt0(wGjj^c6gthvQ|t_Oh$yC zdv@l%mi(wRmSiEgslnvm7GS3h54EiynLuS`nW+Q;BAGvc^IuSZiKS>}@F25R1p6$D z5W2tg=U*;C(L3l50QZDDWz}4q z3+;9`d_sxn`Dr9J?Y-){l?v4h*Qgl>1nd-yNc)QQ-0&pKG?4%g+Ru26J*srr?4wq7 za1HW9EduzKU8J!XLMg(DD{aY?nqJ{+gW6@XDyp$a!RgQ{3Sk`~MuD2m$Dz$y!;cV? z+op*GOixi)dc0ao6qL+hPGRhgshz7uP-_RG9Rbm5AjhD3LRHA?H9lp_ICnSjC1~9U z2w4`UM(Jaym>Q%*xHf|@r{q|5k8E=rSid!kdj%YWn3fC;AQp&zQsbL+P1h#?Z`Vnn zil!4yH)Lk29fv&(`V%5)yC z>mmkwE{I6l_rpE5q9=t?Mm;8i@J%v=%x~DtyU{NzQ9AyttWYR*W!K2!7)3M&%g&56 z)IfQw4@8PSn;tiKq}^wnlt<$7b<#CtkYsSAJ@+h6Li)!x9%PU>Rz``R(RvL&fw>L` zkyGd9#gYIKk;~Hh0^4}o^kHEg_ykK7=n1B~8{Dlm3LVfufHZ2mU_vB54xOz~HiIVw z?@+bR2v@L7mz`D(b&&>`m?lU^HU)RudTRIfC2KIwn2UuEO&`BDc`_E(SXy}I zOP92YPWciFCWg9OVrtc4d`rjOlTan4SOwM^AZOr4(7xtVfnE3a{%Wg2Fwi%CVH|5F z0x|EVZ`z6?lmK)JX;j8-uN2cjm&qmiKtzl}*R>z2;v_VpRw|jH+JP6Fv7?RLh-O+M z79ncE9tP_4wCg8j6|^5A+BnMjZxiFlQ6FWT@CK;O6jK1iUNp|0eFBgT3Gzl7StUhT zPpU15L*+qTt)2`32>i3g?I7@$92Eyz{m7)gvnCo&>Yj_NT(PLFfjJZLzNee{G0^}a zxPB%8M4&1?VY3jFJjKYW4R(4WDK|fTHj%5pL4+4_VdT`~d==T^D_L$2b)|ipD>iOa zlXt3^#`lo@H`wrt2EmaTJ+&bRVDXX5X?P1_@TP^u?Eb481s_wIlzPSqu}mON@r5mo zqG9>PaC#`AK|a9p(O+{jyYGG!K<_Mw57OFM$R_J-YgT3Of!&y0OL<2yB2{WC^8fCr(yQGqU+qXKE zpPEFDJUu=G;U33?i)YBj07^39`bl-|pBJ1Rl=>wwXn`-(n{e)ii6%KuffJs;L%-T5 z+Q6Oxz!6775}?0TCrn!;2ODqpc)nG-Nz71TvM0Xyh=dQ4 z`3YfDXC>6b{L;eW_R_T3U<$eZo6RMsl#-IVC9C5pLm4pLI?~1@3{z_X=XhIvQk@4~ zbLKvdEsUIo+nR>zMF#u)5z(+jNk?jtXP6_XNzG(@<`Wk?!I$qPyBPR*ERTZUY6KeG zSF{PV@ar65WNT8{$cT)Gt@mLRhZbLdv3Di2nj26xj`vGZp>gV$w$<)0fu)5lNk(3Q zKQ$I0sPC}C66#&)Sny88&b53a3(dW8pEyUze>$iL+5 zB|t_CRGxP4a_@zwlD{I95qrIcEk;%4hvZ0y4>CSl6n@NvCPokz^&8dbRlPvxYWd+Y zDf<%`b{Q{9V3(3Zx*(Nx<+qI|V5v{l>)gla-LnJzQA?)TgAtih)CJJsh)4=^YnHc5 z0aj{JpRzS=`elj72uM-lzv4)TR3ZNPCt1RaKT>&x&NcXr=RFhsTB9;$A>U1}P! z95P`e;}gUJue+we+;GP_`3gTE6AJCb#OcG>BcVyK7Ic8086!k~4u_L+eu8!LCf@>= zh8dx|ShUf)*S}L-$-nR zwyXls3Pe}s`%C667&bRuf@(bMhy;16wKgRZ$DhyJ=A&7)MV?}+*TQli2Cx))DHTSM zC=~kin95DK=t5WUaT3W!g@ZH~F9v++&_E`vfu=4ozz>`|TP6kM)r1@4t6|pm*%L=aY zFjsM(qK8G6P^%#&g$Fj|cVAyYsQuCxpew>X-bnW9rV;v9(Eh|NnfD|2O|7fh zrQ4>Zy*nVFG@yjifi;4inhM|*B#efEX%li%AvJ0Y2HC*;&~((MKgxvLXjcK6^&;q%24HNGvjm3~ z)tUIHg79=$%y$>GHrFdbW zY-k%h!LOI(AG^(#8t-(`(6c6@o_+?F{}jkH*(MtpN$ge;QhS^_EzATA4 z=PpS_+|kb(;r>O)D%G;`w)zR`;WbKgkQ7oMWi|aPs_CN$A-3jvh1vAL`JYrE# z0_!`vu&mH2e7+OFKD)-c`@%}^19*Ow9Mz0gD5LON+}INW$`LHb@NbRJA9|PKpd5QIj%8bHNkt#z5yw;-A?H2iXZZ8T%rPB;kf!zHhmAAC*E0niCW=UnlOY&a z5|wZpUQ%#!Z>sN-1>Y3q-H6M1dpx{8Eb2s%9MjrJRn@?iJ0|xcoOsz*_RiaMaMX%E zqV2zYtz5?YxZ!UVr3l$Uf(znQND&oYb0@Y5jKvZVYkYsh)-Fs%`k9%poJ>qQ4U8ub zPworBkv7wHw@n=18e2PuEVxd%1rjRc0n*6vl0!q`U=IrFH9$Yaj*F7~IsEI7_X&g?I38F0Q zl(jURPMO!AM%Vz@rsqlCc<8y5k+CSvBGK=&+g|#gP_3Ft6}$4jz-+mmmDw+0iw|#) zO{CqGCp@hq5Jgk%J-{+5ONV$b_IDs?w+9=UCOGyBuGK^eJbuy^S>xgUac;;E|Fn%1 zId}y7hVU;8u#loa_AH68qr zEvrwEY}MFR1MSl8Bi=;BEA8rxcjYU$Xi!eOXO!>A=Eb1r2?MPUL4u_#ndT*=dASo4 z&s8kE=`eI3&79wclSEikR()}lao3iZ1@psNSQKM$b~t9#@)wjg$%TEGimcVncEsy( z4gfeLjpft!FiYkFgk~XWDXFHE4Qp6&ft7$~u(4l&`&3t++;w%hAS5TnhQTtTF((?c zE3XwlS0+Z*K>6{R6y z4d>O)PmZbt*=gncCj#b6zG^5u!*!S>9|y}O`?$HMKq~GrO9DgGDr|_p3Vi+`>F+%@ zOy7S^DLS6gMd&S;-3Gf??yF4EZ@#IjAUoz-Hpd3pk}tP}wK8!0Y6TjaywYM#B8VJ3 zImPV`;#Tb+UUM7o+BP8A?3fC>P*W+If9(@mD<#`~8Jqu1SBFv@=miffbS{ECi#i-= z4cwHuc-Vz~_HPe=TDiz3bacQGa`eA*_Ymx+6<~JKM?NYi8J#IJt|$6DoPjZhR34Pq zzXgV!rl^4$bEvqbDJ~(~F(pm30Lz#}%BOGB@Mi8*cND1CBBaIVe`>e&9q5n(-IPrf z>I6xOeTesxjJ1O^jk3ZY8bPdZ?sc?Jq2{;mbDNUxo8Q5fa2f&re6u2K7O&D})8xFL z$PIq+MN(Yq17<8175aVyFCUETwG_=J@)wEQl+O`*#mbpTk+&z)?%gdv!P1w(LzXhV zO2V||L8nBg&4FeX+T|Cc#PHvn2taL>BH^U+d$IX#W%~o#;kIaDv*;DYys+`26|{4k zdI(DQvYfH4(8`*Xc!p@VdZ~yY{h*pkqFlUJ@l1>fwyh!$SLQyMW?Sl+9H5gPLb3w< zPv+2DWWqS+?oQp&M65~FO)H`mzbA;BR{mTY&(2=2!2;S3&^A5yCLC?ipJim|9FX;- z(g#0GHzQAKdUa_S2rV0bB!7V$VlxK;wN>HH&-kM-WKVbv5IVK3dfjzsGL3cZbFlpA zk!IYr-dD;T3$zJO4FdRz$E${qfp2<5wHv6*ER~5IZkB|O*bB<^(0DcA?zg9)0k2Ci z3?$M*Nya8@0xh3K)?cJwQn&yQ^DL8AWGk`l!74~|49K6!+9dAi10Z-q*(FBmtaSvb z2%U_R1*hYVeI=TIhV*JEx_<1hX}fumVf@B3shF~x2wPcK`e7h(Gl@UzFv5>@@%bmC zllB&7KBXf{i@dT`aDBH$Aj%P`ZT6N5fspYXwF@L63PDkCBj(R! zEM7Di27=tuxLLgey34Xk)d6BS7p-xpb4vhq4HwIxaRFCwP@yU4Gv4%#FjNBj7E0Lj~;MNtq7KL(8B}ac}Pa>EBI+8hBFIwby*u+nYhb?NAdc1{W6$5 z;}9vvH5oWqi-ET*k4u8!o3l5On`7p*WGn0vNTfFzPVMA;3%rvR&m>^e*fz%rg94(} zuG&0!_#*fl#l=m7hSiHJ@At07K|OWXIh^Rw--G(AoL{?*W1VWuebCg$w{+cnNWiy6 zEE3B&ms3({e>F7)TaH4Pek(B$QqZr3Cr-JBn(BNYpZ;*OsWZWadXf6<={|Y4iRn5H zNe&hm1n1@rKiLsEUc8T+n-Z$fn!wFn-Z2kDOxNX;Xcdr(^-$%~U*GX-q>xn_2t7oS z>I_s8ax+@Tx=kfUfdVWYPO8FLuP=1#6OxS{FXc2ut3*t|8t%eW8* zTYiir$7`ABFe%1dRvLx5jb1j0=FJ_$sew(maYxign-+F=lMKe*3#z7PwH=-fELF1jXwZ{h1&spZXXJpRo*z0#9v+lSGf@vt*Y63)tRdcbk1#bqHS z+ne58j@t2X3Rk>r{s1HslfW80nF8`%78zWAu>8^i5rvwGB%py@y^TemQXbBBenx@B z2xq`HBjvFwOf4QXZ{}bcmXG0W?alIGVb3p0SQRbWvs=4sBLe%H<;`J2j-F>jIz38v z5S+>R>SgtC5$B7(wZ^k=9!LBKslD4^G^dMLW1-P2;tKz}8rhNnp&-Js-$lD)1%CGJjf5m06hJwnnz_43`W|HmswUSVFYuFSRl#jb% z>BGG~dyNlc5JI_?e`Ue_uygIW7$V0~hL-vZq0IaZDt96X&p6L!|5_og_Z z{ajqUWrG9V+BA`CBE|*?QncsGsTHw<58zg^YesRKnO+@{;0%W%&_PT^79##YtT1qw zn!9Bq`Q$-H++Da}wYasJ9^!%D@xdWFDxRjbBA4mfXFty7L_@}5b*WpbFGkYAh$1qG zE#2Gu`Ws);WKxo5mr7ITSqpgrZ1QbUoZs2Zp(AW;Oy73^xLX%dWw&r59@uU(+QdYF zFjE(8dJF%h7Z_pp{k$@1P7^r#JVB;Bct_LO{0G4$Ic2B7QqCAW;b~Y9JBRz2sOJ|y zPVLbNr#eY6x;g=D2foC5b~~TRgr~B4WH>XQqu03epqaGN%xEUqN?Xs8y4sCQM?OZa zMLWKc15$KZj)?lpIRK^6aWWqT##W?efKZ|{edA!*mx^FLJ>opysZ}Zc9-=kZOi{<4 z@aHXXDf9S+-cL=T5{zTL&IuY+PoDn3=z}dffrG6F`YOuR2f(!aYOsNVZ@8G+NK^ zI1k43O#}gc+O(^D#$P&ItaeTY(#6@5p36C4HvzB3cM7xd1SAT1RLpiMXI6b=V|u3k?x?3)&Vpr zci%G+u$}BphPM4sDtZm@>V2g#<2~o2wB@%^YV>58f zL;Ngb52-#g>e&F!LovfQ8l`J;*VS~Gaplu%L2T91cm;x?U=$^W+)NZg+4?|{;A4ek zZG(&?dw29&is4m#NafU-^g*HRgtn4eQ>SHlEaL9IXr`bS7kj519M$0ag!D^SKQ_ZF7noN*p& z?}9SdbPN_m@N}>7szfmxA2*Bgn~(Du^6zB!6Kak7J^ZI%{FCnJ+E6pcL;_?XAMip5 zElh}@IR-<)Y*ndTQTrk8S9+~qzJI)w<_{p(K$1G}z#HY|}=(|QG8^cY#+i}Q~SAI;vyHS^kS6NPIquC2~30|7arq~eh~!d z6Gn|0`m^|#@e;SU5iPCr2tUQK9TU7Nu%`{4Qx(8a- z=J)KKa({fYK>5_%!Gjh9v|Cx=B_%;pK48-6ZP7922J1AI=Tw+6==Qu>=u|N3hUc zNT2PxJ0`FI`IhsY${;S0eN?qOPT(enP;3C;mj)a$>DRxzx_Qn+V|o#` zhu77oOp!XU9t4LAwAC8F>Yt7s_dIh~4x*W4`rfcH*KlTF^-X>Y?jRSsK_qrOl45V# zs(pyG(bg{)i3z_`GNi#qkztCSL#E~>j>b?nf5L+>K-MU_eG=>{P-Be%91>Ru2-8GH zfwi=Xp);ujyMvafr8eS^4t1U`F+Tf!*p{dKVGBFH=a7c+49a3qM(KZa&!Y|aGIBW8 z*lMBkXwQb1;>u%d_H;8{@B#%Zn4iew9a&L zRbP9KWG%mpg=gx4Q@e#cHZC_A4I$J46%o}}>h(t7(;feVXB*iGgd$Lo1GQ2^gja9R zLX7O2RyzgVQOt*n+<8QyQ!sYW@u;O=I9*UZp0y#Vfx>Ftc)_9LmA31>aGYsGFSf{sFeBYE-_~uG%miDk42^m$SD7qplt!!0)xY}=!zY}wtQ z2(LK>RUAD}&tcn!48CO7vD^wAj6H!kV8@W**{77?+r3V%_*I72C{$JTPnFh^!%R14 zE^g`Tp~>C5X92hL9*2P5O_)Jvs1?T01nM~I76`|6kfY;swhbi7Cb2pk+?5hOI8Uw? z(OVgIpKa*;W303e$ZoQ`9s#Hd%JM~Nw}n`t_^F-AFp}B(>g3%54^hg_$dw0nIqmt~ z2`qGvZ$191rtg;zc-yJt7L{)*f8$j=pmUK?(xU^?GhDnQ5?@j-(nkYwCy+ga)@5AZ z8*4GjhMWutdm@mOGxvahQ{{YfudjDPD=S6jS&_e3-5o?+Z-(Dq%Cc^-HyVF*WuuHy zHH7UG!T%b!!lP1y!@|xW`shh@Lu%Rj>3oGaYL?OuHMtUrb(8I38A3AYOoW06hGO(# ze$I0ffs(VUy7aiBc@Q6QN~yG&*5W!U%+h!tig|?DKLI3 zSixw4>#!A)g2Bl7F$;Kd6ejKieWeL`$(%kjtR(n~>QwU_H7K5IsJl@F^D66nVUd^I zK~m}bq6nphMpL652PCUYo$|d7+5c{j?msupg&Vp~@11W2xQZk6svXchhty` zIoc{lT0SMP+ajqB@n~?_EtcmvcJPZreo|)zY?E3!b;W~&^_2y8#OEkrPRq8gScspBJ&ug|_-E2oY#bYAdoo*EmfL9{lz zs*>>+wM(<`>>#|K@tpMoA3+L`Dx$VtX8;Ic;XPkRZQ(tqn3F8uZPnU0zVJ2XBl8Vr z9M*86I#Ht*F~3_(CrWR=zR)(!!(If8U6CNHP9hH}nxIz(A#nj}3jwznj{Y(8*3?qp z9Qsn+<2%w>!}OC|?J{%AY287~O{+0(YPtNUZb6+Hi0I@rY-+6tgk{8aOg`o{jG@GI z!#pN)rShB(@O_xNiAgF4oSoFPcXA}7z;Y^d*tB_`{j@gsP(uE3FT_Ng`$Xb6M z7}qXI!0{Ux%`pc2YXH-S_tK0IOEED;X)&>XRAao?U}X9x3P|+|6ZY$CH;`e8@JTri zDQ3|}$T-e@z|0dZ!P0VNZn;MI!cIZU7#C#S-5uXw793q)gno4>>4H%I?&9)> zaiG3!@`dLywQU%XBg{YQ(o41ujI-C`J@DOTrjv%hKG)65J6T|YSg2z31oIXXmY!xdm54K_`{P1P)Tlcx$c+XtnS4EhXC1MxV-P@ zf0~)dfPaa&SPPJ8$SDHF?43-3?2PP;%naflmTs(Mg783oClfPXWst<*A>OY9$Sho3 z9C(?S+}+(7-PsuJoy?h7czAf2m|2-vSsC6X7@R%rTns%J?3~H}K>Q5@Wa@0}Wa;2y zX>SMogK21F@9H8zM)uwh{D*zE4svq;gtv44I}7i8FnJg{FtIQ)GuhfQ{kw* zmj4*?eHV-3KQ;bPU~Xya@R!y*+5aKwVrlj-vi`%iKRtiB^Y4bdtN#=CKcxTR`(MKE zQgU*+ z2^SCNdj|(6>%T!s+c~=!+8LYvfqDmLw0y@gWn*VGGi5em;4tAfVPNMp;bAaj=U{$6 zV`pXNGGsR4F#dN41t-h*tTeRwcdPzDnY=?8aJq(Eo}|WO_?0*%>U~6LpZO9qO<@RDE>@DH0TTr527%>Ml{tUNsb5>hjDa(>UmKbS1c zjBJ0y{Sy}6cW2&-HT;vO?*M;ky!*l{=45K z-O$NY#QfdUcW>Sk=r3=8G=EV^`=7SBTbTagiJ6t1ftizml~aX;0|meR+9bt(g9~T>YK1KQ#Vd{QNx@{})Gi zhyLFn{}sRgqw9Zk{Z|b9SHl0xuK&^XUor4s3I8v<{(qwj{$CF~rgralLGJI5GtRy` z9Pf`p&_*96L4dbE-`w`%~w z2LJ#8(jXBPkDn)5o*9Jwo^L|)YtHAsQgoJ~XTiFtL8%FpsQ7^Za^|I_fy|EUlam*0c5e|+4Jwlf>&)Bu?-!?=*if9((yD0Y!?k`Ll%yT?Q zS2`r*O;YuIgrXW!w5XzGvqkUdGE%gdGN8c1^CW<(CJ8MX z+53wmeZrh-NfRGiblfq? zs?_-t5NFO&NM&R$>;I2 z%O%c9!tD+CHH*{MYjbiZ;kP(e6+B#~Acx3p#?uleM7jXvt+7!jY_d~}$~=Btc*_!B zn-J^`la>S^2s@zu3c(*>Nsj?`4J$1v%^t2>HH@cz@LRz<(u!Rtn_>VF6791_Pgg_{u-G+ztb8%jCz9=$^!rJJood@i3^3m`Ydo`qLv9sX^%$Kk`vSYYd@p6 zg^%1esL`6gw%?PaKQd44loqr2tK&}8{VerB(uq(!mv?m@+ta&wCWJs-?v|$+jxeWE z^p>ODK9|gV6vIPblNJAuY||D3VZeg{!swWO)QP zJC9A3tSwJQ2kW)v(u~E8&Wa5bAs0(Xzq}QUAX7NL0kfl5F!%zlNca5i;&$ag z`JX&22BYQZF+>^8uJ?3%ar$!S6Zty#fE(6jo=J=bb>_#<`;bW&OlY3yW)@&i4;2cL z>93aLJ;tcU;Tf@B5R&p9(6)JF)hzJPZT9cA1RaW^-`uH&ufJ6YT_`nDFcva9m=PMX zA`t6tj|<8~-a{nQaU~HQ_Us%Log_Qvk7H*{;FZXSdVAqK8Wuy_f=}V{EttK!CJml_ zbi7WD43g>-Q&0$ifB}aD*BcSzU1pW`aSA&bWB+P@O0=5zBNhw3e|l<;R*^>DlOTEb zStNVCIc4MIM^@TN8=C|OETkep*^oscIbWj$RasLd12wFv3QZ!-Ad z>rO|S?1RuUK%Qa%-lBKQgWeH5@DpEDb1JAn(`pds(=g(Pm@8>4e@vyi%re?fQu?~^ zQawdcKj|=|c5oTqf0IWIvRa38ZrKF+($0#Uj~H8m8EYf*1CAkFi?*a32&GK(`mU(N z+l6`#RzMcNIn&-;go=h7i$LbGp9;ji9(I_hr`7~g1N(3f?>wFldD_XOrByRWrqsZ- zaI6>IP$H=V9F{iAzJlBMTXM=-o7XOSbEtK*gADK+6MIQKKKtz`iDFsT*7I4kGnLv| zyl2RJSR5Z$(m*mK$rBwxDqF=v*#3~?82seob9pAt!i_N1SMc34Ie7|JMSExI6D7{t z?FPucx;UcqwogG4)jBXor6CHG6fMfQuV!t!`uaC$DmfaO&r zuc`hh%%LCn>?`X*&XXs^Qya5#{M0q0Pp#Il>DzMeSSUlvh$`mNN@TGPLAVL>qcZB$ zW39KpM4cDW@9oNa94ZMLpq%B+v4((B43Yjox?U{l2B^tx)3p)(fsx>aWsnvn|ZQcd?}m3bS#89~gN^^~)4F@5QdKuN8?4VJ(>2JG!Kp3|mR3>u}@ zI?67+g9&o^o8i!F28t>dn)i2vS`^%=Hi(fyX-jgtY4<1#NoLc!_ zpjx<_E!5V(iDe?FDs}a^C0^T!T!@KMRQ8Jyly0>tP*v8u8b`MvLVy%AzM{tNy5!TBP#=vsB;@a56LzcKB2@M@*JV(A;!{1V>j< z)x>t$57wlosHIyAG_Y3Ga$~~MI+^P}ANX6nxT1LRj!6(^z+gbdUbptWbdYYPY~=~1 z1a-NZXTXUiL2&@^F&Xl*YK^;;`!iQ|0qAav&E=%WE)za0q?&1{{)ju`iN+QAr498^ z7TGl!ZwWGNQBrXfH!K!gc4l6vOUR%6v%Tc6b#)p{`?VH2c~f9-RuJC^RD$F@<6x8& zlE2ojKhaNl2&A4qkW3+}m=bO5A-srlxWTHd$PsI})UFg!iV9k(l7(#N$fxh^Tyy&B zdR_13qNsZnwqNDFZ^>9oMKe=Sw#LZF&2tfkc&aw1)(6MwvVwcAy{N42J~5wh%EQGkYd9!Q+1CGg4K{SJOg;aw8Qwor# zi3VsjHONQ=Ie1)VLtbvx*UKYq{{!D9sv~|vy`^|%Ir}?j)1RxOVC=_``V>-@2an-; z4t=0+cAzH#<-T>)PW(QT&)J3$`+4vyeWys2>x50gqM79ca|VHgMv*tm6Hjy!jXEc| zPxm@6jEu*lkKy3K~7shd-s>HUSC9Yq7sm9 zBXg)QiU1UzotXe|;e#{UU;LECCt7$Zh2( z52aaf)hp4iH#2PCZXbtO)-X+n2Ub;a??26?Rr?6N-fD`4>uzpKKmEoPlv{CncW>hU zbtzg}I@PsSC=^OaosMorAf+6YqeMNUrt=_nm@twES44>sg2+UOn&S{rBUGAf0MSHL zxGzNH;0GcRWHjpj9_|>qL79K=2RtGbj_Jg(DEXp6_RD{YU2+?e@n}L2RDs)LqH7>E zI5=<)jlHw!d#VTMK6$e9mB8zKzKWgO&!d}9V(FLTGjy`HpeS<|<^Ao9t;kY1c^})i z@8zwg_?9fukg}NO^)tA4LYTh(DoO&wEln3t5P+<87Q464K*YKj2==NAtxzbAgz6zq zk(e6PM~6JqwV`v~fuv(73gsOBUiYcq45IP`bJ?Oa%P0{ELJEP5MiC7Su9%8MfM%6c zei)VaNUplAh+TKgKxA*GFEtS%bPUx*j*Fld5@I54o-l80t6=4$!IPJQx!sd7TB>l8 z7hrj=CF2Acuzh6l(&0Ieg9CHuYMV$$M`3A#^IyE&cR)+JM+}FZ5!>`J`Y!V|9%-!ic6M%?>s5B4V{!k!k zc%`2h+=r|mwf|@oYHLRvP5t4Ad-A4X-lIgLHcKw6#c7{|tOybCz5hI*PWjVBhirNR z2NP3y`d3?l)JfUyO3?zON7YK*xE^;?ODpLM#v42OhGCQ zeMvB+gC_QpDcDcZ`Q3EPQ|{&ph2qF#NOcNM8N;23$Upo|S2+oDF#0rVnOr1;z}&M%Kc%qEIhQw!l5 zb%93lWTS^x&s4JhdFZ;XWair$mI=sOUbN6cGA*ky&7GW#I(0pIhFLQ@agqn=7dn>h zdUhe*;>4b=r1=A0HA`a`g1w z5d;_YK*J$61|v5v#i8y8+d(b`3H1UY9Hi8k*HFfuEpth?p9^*lP20qqxh+D_CBbQ^ zMX=&T%|GAgYnRFqe6$6W<{am7HsM&aAP*}SuJOuBRr zx!=7;X5f!l#!_@gkhQ^+*n(ewmGN`hNq7^qRvY}`#X`nfMLhM;T#TYcAUve|+j-*G zZ$kD}R+&leF&$#qELgms>X~sKYu?MI>?S<;xlr$AhU}vLJL{Qu%i#2+tuC%Yp-@8V z3=mmI?oOg&*k!!_m>rJ56cJ38fm7%H*a#dXf=@qC!rVWbLhF`V?4CuCoeu2A@a@M_ zxE(2l5JF-iO{6l88bM)KixIab>iDYE$#^FS0XmYJ>WNG)odRs8p+V!FsP>MIG%3xY zV)BdlHfP9XpCy$D(ADc8le-C3t>Y8_ZyRf)@Y+|icxO%}>kre^9R_(Bx+X~H9DJG0 zl(l}3$Q658pYRa==M*)QdZ8%EBj0XeDFu|G^KWFSAcYW0JSh|kC8XZvvAL^#^1nBL zYsOihFS-hD0b!yLX?8`F7_7)DBty}y{B#{?P(zewL=+@+NQej|f;%W-?GxwIz2#D} zee;o-YBZ6+>+c~{(ZQul2Syx=fCeELT^H?xY=sb%XmKkm@TnX39V#i%F&JMtj>^yk zq})j?mf?sVX~#><;<1M!{k}cH65=T-3qth`?Nt#VxihfIa{oIjjvU6bgkBQfGjm8cZ0^ zi=(I@)-0e&(p)RSln8T#cp9|SLand;&U(w3;UC@57O=gHAhf-z&uDJZD~LO|xE zY}Z8avCs5!#~nI}q(&B4eqAq5JtdI&R#H>rr{lmlx*RV)FGKbf67YIpARXlK{pA#- z2Iy!WI8r-RC=?1Mq~6^=M9QJWakt*x@S|GhBSH;=s0qzLO~kEtC)~oQa_Ff(ET|gX z$dw=x0m7~rlhV&$KUd1*Kc7bH-it_gUV@#eb*(?WTksV9kqI?1=8xINM?aMwafq&% za?5zgBP+iTpcTU0PdMyqw8+}vSBqIs3i?S9D5j|qLu2wJgT7e;7Nzj{dickGbR%4= zR}VKm08P^fdV_QeOq>35wHE00`C6)WDdM~9{ug}$ix@nSW^&s93!v} zZ^?6voAnZR-TNjNkpOfW^HYfdG*U?Fu+=Dh1SN|syj%C6(?Zsotn3fo0hVL&+8b}O zecu*lp54QmHE(}f&omvR^bnjU#5}Jm5nj*p#Qiw=1B2o*L;DjT?zEIGh^)N0!ex5lh zZ)qqpB!uKm>Eqr|`y{DM$An#2a{)!U?Mxf8{3r{PW#R#io@2 zXA!4+0Z=3BHsww=D7btE$r@p|4r76^`nOwPTnbj_XOI+ZuS zEp1-ix}PUr-pkcjSe%%}x%=L)e?3S+M(20&sm!{uoSJzy)8@s2R!Vzp4qZhzxQt`{ zdWZ2dTPRPiChb{)oeiLA0?UDd>`qF(uXEAzIE$8L_)UW(svcJgg+d9bGfYIeQ*zPB z3f$FrQ9(0ex)(tWaw^EW;re>{X+Y#mVtEl09;z+VFv@01YFzj8a^84!E{Tpy$PFyS z$;|>ggy!9c?ps6AnBTMTvh_Uh`E~}qruGd@a0u#vMjQf2Rw7l7)Cd};r1|(aJ818D zikyBi@$3YG-uH)yGDzds_mb0cNUe-?wu*q~)Wjntpa}<`KZ#SAdfQw1r++f|=*mlZ zbN@fkAD>Fv`303rzXwPfkMYS#lLY1Sx8l71a}rxOuz%Zl(0v5UEP@3G2~Awb7cbv3 zO0+2y3WX9%FC7BmR*Ra%CfpF8M~%{0rUgyjf#a<{9iKM>@C zuTQ3ZM;+<*Ffz3eX-`JzX^g;Y_=?sLtaz4%mu=#KPj}?~qzph(ogcY3BcK`TYVx)H z1n=12=lz6f8r0Ws<}Yq4psjx+S>FVAwby&Rug%&};O*n=f?v`Rc$2oC5LxS+B&jBF zDk4)7ga$r;n!9iB$22ue(>d;jbML(Yw!c1(^Zw*pv?rG_keh-dAe#-6nc0gF8S3sm z`hhR_eGXH!@{H`^o1bZB*DIxXy*j1ib4*&)M^|&^5ZR|tC=^Oaok>X7;Xs%~VLKWd z(WV#Ra22)*4#E`U7^lZ*m0{`~Kt_pb_i&Gh5z9Z?>$QAj%i)f`B7XDt(>b_#3CZrI zkeiFrba`| zqUGfTki+K_Wc`xL`Eg<`>ONN}6em4&qBxmC$~6}dVbEgDXzWH1z?NYg1TxAhZ7NeW zfI8}IKsL}IOiY1^BwrJcc3Hq@zA}-md(S1&TSumUF?RYKqzs}NyYU8IC0Oz_Qx?Q{ zrhY3zOI8-) zH{RQ4sXqxbCp2@}+`qze@C9CbX%Riva&{Mdf~==}$RgmKVmV+~UFiGoqM-aI+`Mex zTM8*RVkOzN%g4hHPUi8Q*RrkqR(evC2>IP(FY-Uc>^Zl}=kH7iq3&0OLUCrHB2p(k zsDVV9B1V&>ro*8oCQXoT@CPkIvm0r`l~Mrp)Js$59nI_U5!)2t3wKUu=dQ&hJHlA$ za}d^eG+`q=ThWW2BT)4evz9kvEFGvx>{~m5C9vwR4Hox1fQB{?J@~z}{#F0)hslq>{z<+XvR2d6G zi5Dq#wlH(*z|rhAMp1(SWNCVCI`_YNCp$Z?q9_D~0q7fm(!ej78NZ$9?~DsI>{BQd zXJWsvPQfXPYS55BxAjsA;aU%b5me^I%g|~eQws8n0Yw;Vdq2=2pWq~(!fN`DwPIcAueB~P(SiU@ajQh*o*;SDW%E!-T!@k>i zv*RNa1>J(g=`0`|ip2FCc>Fi&zEmg_XDTWpbxP!^kc0Um?i#*`fDS=821^iZLr@Bg zM+(!lky3C^bBIs;M>Q?mFQ9MVGBUjvBeRpygojWli4fb+eJ@Z@wVIEA|7Fag&Jp_q zWL`iCH|k`%9o4cPH19(6R2)eoBI4RE5RHOqLS9TMhJ}=4VrnMWb~5qW?a02rrOmpL zUU>rr!P7hR7|J<%hdUJ-IF29L?JwhY5g}qnsZLOlY{u^X5t)+DVi%k<sV0^9>l$QXz*AX0V6x|P_N!1pQQS3jFU-}Z~h z#KYuL7a*-_G8v7aZveyFM5y?Wl#hFcv!}mGePPd_b%6w}0jM8d0O*RSCLo5WtAjuQ z$NNXb_I9+sMx44j&SG4aN7e4PtOCZ`cR4Pr`4*F17? z#h@+0`wk;UnhttOq&|$N>9^4gU^DfKRy>K9*xEjh{(^Ic%B;Mdd-F`R1LkbGhi_zrLs0_IOM@{J+ zUnknwC`nIvnOwlc)A~&Y2F|4*c#5M?!a^Dy=un{$7clOu zu9QT=I?-s3<>&X~*LQN@sa8@ljV=A?;zZ64B(hMHevP2>L*m7o>FsMBN+3U$wZ{3` z5bNY!#Iv8IFyM+PAs~^0!az54{RR+>KgJ5Z(<7qX?+`Ps{7Tv&jTn3z*q0YsCBP?e zJxxl;0vUuDK5kQ4j3^ZE?~dYwqmINOp(QB~DG)3WQc6Svh$avn?&>?nH6mJfBB;cv z590`dGxD=X4qbr>qJF3s8$8)UBBcfxeCowzG6i68Aq*tIuU+USjlH)hyItB zQ@Ha^;)&@LhTLhWlTFqFucw2w{71$Fo0wVY5D3lZjXhV=-ZhK3Q-#+Uj!+#>3zk4S z17p+Q<;OSN%{C*&Ew}X3)a0S2#^TaTuHsGSTXY2$pO6V@)&gl~DeAtLc7jC)5;E8QI0~i#>bxQG2 zUXx;AXEE8VpMHMvue?)}IVhlp@o@Ry&t(6OOGtMuCYPKG)>KkS4~7ngw+%h8 z4kPq9o-u1U@B2HrU8D!2Wi%if%;EedA>2us!Qb=xN*uCJIatC^iKr9BN_P;GKD+9* zOtSxP2+0p)h>wxT6cO;AT+>cNhjgZxLg!*;`Zsa$yaViL?_+v=J?Z^3NT%ju_$H&3 zTu#o`(6!^=|JceBCeN?JXLYb@Rf1^L!ZanvPxTp7Q2Mm#6l6;s_&*QXs z`|gW3*t})K0J_S)OLy0&-AI%eZZGi!j4xZmn~(mIkKE#ib*Et{nQtRf3U0Wom~HDy z8Sq!p-ancB>&IXlXJL<70GdH})_`^cgoYHtE_P>K-N+oU3Ba+jOY$XbdK|JnHu}^~ z0xhd?3cB%z;>?_~kDDR~2-BuSltQ6|)cY%Fg%k)u-iUx6pf$f%tFi{CrUn@WSml;o zS+PPmgMG$ed}>5$lyq&O7#1{A8vNJq3c2$BsqB4Y83V1$v9sp_#YjgZ;CGN5#0b1Z zVbyBJ*F4LLD|T^JcGw^9B>CKvbnI*7mov9;<+l&exx1GGg-I@6mLa-gaOz#5P$(gF zhKQpfIdNzX_%V73AtVw?!Ktf33xG(0xCdm^jqJF&Q_qBTI#x&`s~mU34MI{c8)y(< z3X=v*S??Z!lpa3%^D6c{eLlV2i^=s~f|Wg+T(%I$ai@uNV>d=9Msd}XOuOJ^e)E+U zgs?D8jToAU33mY8U;_1{<4Ve8=hSm?bB3s}x#79pIJs#`U1&cdFc~(kZ}s|9%BWc$R~t5nH`)}{u&?u_an0 zuDpP>bsc`+=xNbp1}Y0*XNvebu^+vTJ4!kEV#1Ufrf}#vx0LYzRWt z0%ZNu$#|#W(Op60Xzq%~0{=T5p@HSNs}zz>0g1$4(ATt>SDW_Y)n3D2@D%5a*}J#$TR;*ELpcAQ=1PtB z4#y0~99Pzuf?*+rIXJR3rI+>pGMSb)=96f>f?WI}WNs2d7&x|r?WAy=HoT!{DWCiZ z3vXJ-e_z&x5EfDz+`U?d?NC)^(HxP0MiY|S5f59nD(LjFYL%BrMDl|l%;4$YEn}ni zZ|HX_@aQKmZz|_Nf$U~#?tds|74sHvqM;!*c(Ea-@$D-MS@-KpXcbFn4SkXvRRnxT z?#R;_DCz$@zBBLN_`*H$d@{6q|J?gzF)No@Tyyi4tnd6OX*-1X7`iB#g+hBLmAzk~ zY2y<>`ly}1yK+w>xL_{+vImK$&!IRl`klQAhuSfJ!>iHnam#%=_uZ0vhmGEi+?uA2 zlwQ`aH|W~sp;Hf0G;1sao^zmg8UtcEX=gh9*+M*qJFV)`PyLfoN;e-Yor6MO5|4O; zQv1J|QLq-rXk&Lrf~MHOh^wbiD9&KC572iNp=g5|Rc1+a5+VHbQF* zNn@QL70_vn3kX9^sU!@s7+QmgaJ>W?L_PI#NJQ4x{li2%FtoTx}Cu8S} z3PTpeUi9EI_{KiQ_<0++e_0zsSVKp&XpF<6MGln_!4fpCK@5qgrl_DPDh^AgSDZRl ztjHlmj<0=f3$xDI$l~(vGEsXR$8pP~oD4h~bXjF=7uRuc_n5p(xWqICm=44&zIR72 zpR0ccr{s6!0{7wx?k9B&`=9pfrgP1GMzEBa=TJ04L=8^ql>|2OofZFy5Y9yQnBDFyk`7$1G4gzLXuL(k3+k?IZOq%Op<$07t68c3M}Z8y5_IRcfdnYeHr zPyA&Y;xgrt4+ng7^DJ1o7c+IVwr+63cC$~eCavdEzTDiTUhfKRpr@ahY zy6)WX6u$=&nXz=2FXr}}b|K{!mM+b^U*?bF#^rHXwE^rtj2GjCwtb02YT~HXaDxKK z@;JX=`!Q!ZcaPrBE%RJqwRdkD!uTViY}yf%&fT0JhYIhrOg{T@#@{@^Ra*tCn~!|_ z5z|A|%u>GmI+E#g4zrE09PoJ@yn%;UvBF)Ucl*jcpo z&fs9>rKEl5lM>~4Z1=l)Jn!x#n#7HOd34BFGe{QBz;m5H5c=3&nwmO^MjcGk zQq4}GP(te62}2F8Vv{(dgp}((E*K0yF~UqUPd)YSRAAJU(I^rb2A1Ui8Xo>PQo{n@4oVO&PdgugBu)Tr!!2fu&$9$1y@^0&+R<`&vi__WeEI z)Zp$z#})2>CXeZ(KR!UOa5z%5+IGOBYqLVZj#)kysuU>Y@ORjYJXtgw;y>dd)zKK*^?kjl)%2`+)+ zAW3a3x&gs6G|1yMz}6rmFQuhq8rkkO+%P#xP0d=axyZt#Pc=A&LJ6sNSy4$wPUN|! zn_~F);neL>Jxo3IvYvX^??51tIKLXz2B%d>xzUrw7x#jmhJ`x}ZXdAxJ3<)QtC8@w%dQOGi3L9Bv1YPWyAl1j zyI`OTNHHpw(vSwyIjZ~dgb$K@VTW6*t|~&n>n4T=3p*(|t9xxvwR6|S1I8rU zjhlF(&Cfk|dui$0jFkP#DnX$*Gx>nc!H?2AgDFx15P4xG^U5=Ncer7_qs= z5!ROg5A5=@?0aX?x#3a=CvD1^;p*W^WUz7ro&>6E!Pfz?YGPr6esra3A ze{RfFqm>V_uDO;swrN1#R^w3iWl28NihtZzij9{E(LplpCN+yxn&6%;5cySMN9dHd zSq^OlU8FtzI7iT14j|)AWOsLPv4}J78vTgd;dU<|k=1`jGBbvdf3%1aKs*US{b8bi zyT%oz_3~{u>IDm?apyl=#kOrL*kb)H3EvmUa2AFk2ztS%zlUxm;fm+16s$dXJ^%5< zM|tt}@=<^uYpx^NdLyT zmWNj1Ugd*GG1uNWi#3m5$jcp{rn%rN^n|V;=c^*%Ik`ruryHLEY1`mHd?Bqnr*ZQ? zOh8J5h6W|16pAy953(WWp${Zs4(1z;m^P`&zb`VPE39|N^EP2zD}o=y%6M|kR9d$z zA(OZU$C`)m1rZ+bdcd*3l1Ut~58WT5bn>Iz@b8U$lLU7S^;7wM)+0<4cg0SvfHlxj zqWxqtoj~@GV1|1iObukH{CX4XfADKO89#P1hw!$M$n`+u(f2by zoMYleX*T@t23~KRLozoWpJ%wWWU}BXw;7n*2mf>U=QnKdFmGOtf`MALwLXew_$WLi z!Q9CgWS&s?1Wnzq54XbOo3?6bKmZO!mxs_^T+H)(mJ@Q$CRwnUtjA5ze?Lf#!D-!$ zHkAyYWzXX_f8M;7AN_2vYHJFGib%answqEhCxviRo(_9#Ij)G3!;vcK3aE%{#3@D! ztbC|l@>hQ>;upU;haDTQBiVC3IOm~xg9tspDG82kp^1HXi=L+Vtlx3L6`T2%h!2MA zB~mniXrLkA%}PPXtpc+iYHB2rh@_!G5{(ieidpX-7a)luX+R30>gSyaY~U6*Vfypk zeLVfcC-}@Yk1%=QKPj_cC7F5q_6QyWl41h;^=n!8*j&aK#Q>P*;cYk?wYevnA)H?_0(;W5(KBaStbg+OpGjC+IfZ(B!fVs&+b z=bkHNSKsGI=K>%PcSujB;jH3^+3~=)5skUyZoU8yJm5E=0F{4&Pfc2x`IRq zoKdxf87jTv0J1qRTt?(k!Sz3^;F15GN9&HON%dcil; zYjlK=ywIFs{GK$;(Hv(NWRAIyzNQot*u(DF7BZ>S(CaxH408Az$0<*z3zAX^ryXqCSO9lWF>l01Ig?x zibL)+nD#!^6`F9})q6!9+fo;tv;CT4cN`biRcliy&Y0)^`(H!>A{xz4(M9s#If{%% zp*f1IcVkBqQ)<*8+~U450UdJGioBs!Gg5Hr5681--327}Ujf-Lnl=O7<3s4KJauv) zYzOJIV1(8XnD9F$EL_jypV^NP&ai+Q+#nK@!Dw0j^%!uEe1@oip%tDT1v{200PO~lg`6!=eE0Hm@|o>|8X?f>zYUwV;;AI=bsCQim_ z3WqUbF|1{maQ0KLUHlMf-vxwxZnAn%Yi0V`-(lVzjodxp&1h$%RR50B67U(*AiWx=Bzz#DjxqRKxo z`NDPl@-wXn;h0D*23nY?gywt+;v*gQJu*U+5h7}^%aV-tyiy|S=mQ0}IPXCj;L%+L zbZjZ6x2uTWUY$Td7%3?Ng=nMz%SW7mja4S8o@P_w@5R{B$J`2wKmD@KM`mWYm!x~E z#B@gcIUS9>57@pGflGH&pglq=-9-`ClBABbqvJV&z_7=Fq^FLZnHs+L{2mN{D{xYT zR4nG+M?0Ibk(wBm`4SwNBfWh$<^H4P=tvUsN_q$8Q(klg0hocp&;iE!A11Rm{g(PE zZ+D6i4tL#I#lt^cz}|x&;-GdJnj!Ffz|uQC1_*J!bwR<^jNhQ~*nj>WRg+JlP(tc- z(+nI)A$vNIOGo)i<$DY>pYvVs{s)!_N_Pq(5w~o`$_*ZN|6&qN8^dH1SAlZ@La#!2 zG<2T@!obRckPfba!{MX6*p2JA3($q9kpBK4yQh7kO`jf{$b|tSoI?vb4;12-iAtM5u6|xm^s-ZgaisUSBU8Et*_=+l_miY|wd062Ku3NjC*{WI z?5viQ=%@G!ARP!(XeR6fxP;&Z6EE^0hNpa@Oy!3yo5eoyy zp@1dNJmY7}#_=?5n#J1gPt(qaaE#D<%Ff`V2`L>0tP1?hrODRyc($oUAp0?n%-ysps7Wx&pYE)Sr4pCwfIDCf?2iTl5}FJC0ql}B#( z1k~e}lM#ZLsS#TO&1)R$-TE)97+RS(GU_A`AG|9Li9$Ji|M^0Gbk}SS9=wo)T!@FU zkXwo)4RlQ)HSkSvfAXi$84U7eBy_a75=c}-%IRfG_bZ6FMOLJ-v=jxQekvxsNI>r3 ztb#p!;ln+A^Rvl8D~m(#!J%Vw>)dT()v9iG-+chD;yMh^NlOAHOCP zKhQV;G9sdS6y9N-x>djmGAsZYcLQ#=1KwOKM&D+vbob#=kX1UYu=n}P=A(OWC2)l3 znv~!*BvO9`fVFFnnX6^u=1!SkyQdmY%ZKPF`YZ>I5 zE?JVFI#wtYN=ThzG37dco5D3O0BZBONGnF0Z#IKm0>UIJ&B0FbQx6q!>EF(v=Z(dr z;+KP109rYk4|GosDKxSv9ZiC!wV``ops4&&CeL`52kH+Zgu|*;Iz;kQhe8SvCgzBd z{Ssgen5LxO#2ogn8u=(yqUor;uc=|0l5c&hh^C#z{HkF#@xJ-!MV}*{n}XK^-n_|# zeQ4F4Bh-`|TzH@fu=P^nC6^5uU^ougHf(LZl7j3Dcy~R)rZ+oT^~+AeH+Et5bkVWh zV&TFZ4?dW|G(|pYFns-*n-9=pZ@@DC55GQ>RAvGJ-*Mm21biUHq5*&5Tq-`dFKYZg zNsDxNC%JOrO5wVT&lHGF?qUhsfk5B$gzTNno}Xb?Y}EE^sMVW!ass{wzD*{p;WZ9F z)|>?%Z<6eg$UH{JFNKM4xbP?CbgZ6A(*HU7Wf;Hr{hLsJyx0;_sW<}z34Xh(j|c7+ zgu}LK{0fBw-#TF5MTM?IrO$% zj+MRy$!vsCitYj3>ma2>T3}~D_w=FrUM5uW2PVy2$8WyliYTPuo(4g1^LTpZ(bt#0%=sv?7W_Z!@r!N5h@o zI#g^8WG3Ml6VRq!K~_5SbiabVtC4Xy zS;G( z85B@TH@!7wetz+bIlQ>xL+sFRrpuU*p>xWTl7)bv4{XOECn}IYw&=rH1s|qe?Bmsa z53=&(8~Fe1y?J~b<(2OLJ#STSl3J@JdEc-NNX8Brvx8-JLNXys>tjaKGr8)K z?M~kr1WUh&sg7(y&xd-5TueIIil||*+H=nM$Al$BWet!9Fv432ht8zDw1o>Mzs4n{ zyLiVfsWB6~AflOe*#i3dt|L571!C3)VTcPC{g6k$dkHgk$MYPbYm2rJ5iKH6&nUMPvoTWc#Y!fUIjR4ZSu9J z%J}2m=g_~a4m-IVEejB{7z_{-L=@TvG9b%?n81-~!ml6uR zHItyBM)#uuQ$y08&bH!PY0I`#^zuduva8sUc$KT`p5wKTXu5up09Z+f1ITtVgOp8e zLF@IT(r1mEust4;Lm&~jh>qP)qSCKf)~~UwV?UKO40`uhRkh8e#lNGnH^HRnW29v( zq3?!+X{XTYWzK}`f2e!dUWuUTn8-I80&uDE;Q-`}xugZN-$b0sx&aGhM zpD$;yavA1P5*f$!65EyXj?`oTv-=6mK!(BsjRdj`n<+9zhC&6iQf-tu!-!UF4$Yw} z7{JXMgwjD6DngfCNj5O)05$SNz;VDeyD^GexUQ~~-#_T*MfvdI6REd)x*a2dTUui+ zaj+VJ<&0PftXSb9;?klEc=(s+(7W~RWYd=;#+j%<6bXPB8WF+Cgx&?hk|~-cWiB*o>Mdz6LopRyQ**SklQ1TY`ILr* zr7T*6*u_D%^b2b`fDMYeCsJ(uRtcN`I1O=QB#p}n2TzQWAi00S0mwMzq$$T%3rQ5z zp?iMMZ{InYY}=DenWE|FNYhjU^|)MkRhsI#uhRL~U$J%j-;qdF6A2!{)2m=OW6*6} zL%H2-S(eHvQpc!Db$fp|W8pB9roTo+^-xf@nccg$apQHv`)qg7BF&Y57vq&}U!h7dhSE@A4v^UU2aL;hvV2YoEJe;5#fJ|cK9PE>r#kU^4CmQX zF5$br-a%`F*tbi#Mq?Mq4O>u|MsWO+d%Ae9u&n9UCwCUd*B6H6;B zIR?d|)w_?@oZrFAdVn<)@GXTEvCHkYJ=+=2iAAOJ~3K~%4_eT&}VGD-`_ zCs6_zp-1%#*awYPT9$!j+0;xerhFQHMN@i;}C%WyD z>p~#A6J@L>qFVWLV|#uz=uclheE3A_Err%dVmBu3R&Ywxkh|{FKCjz4Y?lLHg8`q%6w>Tpqi#jCXvY zg7}xtChbheb}AVf3}Yvv7%U?ZD#B(4rt-o%6A4N{8DJWaOfMij|Ldf;{DepU^ejac zZ6xVI3Nw7*(mqffvO*~VDh(_`>6 zZSo)Qnnp%nO3FQlg3$Q4bJor!T^nGi3{~n$io!1vnDY{<(E+n&1oLNOh z;r~UQ+eYn;Ce4w}AH1`SU*55V z;jVX(OIhIJ^b7o zL`RSOLsbHfgy|hPk7w_Fjvd2oMAoG^GS~Hk5!i#1u;y7oAjOWUE9l)lozkKM-{To@ z?nRk*bH^n~I7CmqO{+uve}6lfp`PoY;C%%5tDe(9+V)6PL=6%SZXyzSlwhQrN%o7( zyL1bspBdr@^de#-AN5q{R%^6t~{lBs+YP7pojJ?#I!Lv6Rd z9#vb5EL#SvR^c`@GC5nX6Ie0<;Pd2!jMXl|wrkCndNk2c7Oi z%%_RYigWn~SMie@b|aEOYqg(T?3t_S`q#urW!>>a-Os`dt)0cj4NYXyizo;m_@3TDD3AOn zdmi}&2Ms;vlp(H~VbHbMDX#t|DQby^bJcb^Gf)MDQyXwq50TI#RGjr3^FFzQixzF; z?zpD%&J@kJYN&UQX=SluMSw@97%bXQLWK^pW@jzi3-2IpUvt8}tCAUrX4f%C{WH%# z{sd?fdL4#De?lw%f7umc9Gun=xIY2VfPqd7}D1lV3jJ*X#Q5F`+P#mh*Cu*FNu=I~Ubmg~}bfih-h~MW|b* zXhEXsiaUy>zIY8l<)2qfeCb%I_DG*z$I=!&f85T#QiIBT+_f?+&;raMK`e z60Ke*RQ(9GvB!Dvww)s_L9Eep*hg^^$rCF*mOzbFk7V@s`&u9D_mZ(M7_$w@yG?of z*GDtdT4Rpc60qciTPs+Wi`D^#x=To>=8|>glp#@L@Aje)xLT3m42C(2gw&7@%|wej z>dDeDz_A4}&*GM!&p>M-)})T(XX1rZov?wExsbx}_?3E&hF~C#X>L072LHYk?y0er zyO414^$evW*fwar8{~c}ru>-8uK3@4@;%>TN9S*7+tkc0SFB~zceZf%^d8=b)BlPU z0dIlx`EoA5c@fXtT*t6{oZ-kPu+{ur4%UQNUE;U{?0mJ4sZ+hGN#B6ehYz1f9YT%b zfE8@xSSsaxGdPH@t%257q`7%SZqnS^t*OQ9o!5xanEy)w8YOqGqvY&gh_a?>F@syK zMGr4S0)e7L3SWD4Fpbzj<#PB54g0qsf5yNNDb@46zBK zkDq?ja9G{zExI9u##W)_RYfvsV;ZMsDwxKbup>bz$h|`5u_+FQf|L`%DZPr;)S0ZL zf@cXHw_~lTEC4hG*-w(nI0sd0QW+?YbTZGl_s|>68nC4hmtKa_cVp^iaO1{s_G_fo zofMzFhA(_$Bi0x9AmXVpmi5M3;8?j_tyF3XH!i=9$6ow6TXub$J=?!XR>jZ)h2e>n zYv;Q5q@>U4$K3}h4geBq!oyRrooe%Xl%?8sD^`S01hG=>xokC z`}(=`Zo3|P=qg0bM;QfPbyd*wic;G1igHq*TnE?PK_K!pk?O~&tlms6nOCsHqEh0l z8av2)aWa|M1E3eqn}BU+1m^KY=`wd2gP|&rsQ;uM(bH^zrj((cMf|31C-V|*>?C2as6za_I>Fp%y zhj{+{AeS`SjOJMBqq~EE+inZ8b*n+IGT<3_>Nf>ky|A41uPnq3U%~F^yXneKBM^Xa z?)puzCltpaT8!G$@88}&eE39ad=*N@OyK(_m}^8v6Sl{yR=T+v-Max=9!2Xqw0IT( z0xfwJ$|c8S&|?}E1H7OM_~aKC(Y@hDGDBAa^DtBqVrt9)i1PNNT_Kw$*M*@2Bm5lE zvd39`-iy5Zvpu;(G3r2SKwH*wmNj79w+3MiG&bU#3}k9wH0G{T!wEiSVLG!V6~-KN zY(FRDND&G`Dm9D#mu^CD+ClZ~HjbCi*pF6Kv%Tj#^d)9c6gh}`lG{yj^!xnua|zD> z{2}&zcMs^jux_(M#)TzmkQ6+WV-RDi?v8aq_URuK^3#>m*t@Qn&B>{}o?L=6I29+j zfK2fcw3rkZOyK)VgBdK^>QO$}08 zy8ygEL%;ufa_*PJ@yHbdmPT^r+@JexDXSh|OxM;M$qZhNW*$Z;jLL`eaw}5T_G}K^ ztj5s&DB~px%N}9!jOX~}XS+v|%Yixo;xyEF#Bf~+s^?my=6PIvua{%SPTI6%qS4B~ zibtnPDFz3YVzkdAk_fz!dr+fCYyV&Gyo7=NcM^>pJoJ^xLbT{9&Zv2T^Cj!mFdTI2 zx!>GAxc}I2l#7qtc2<}yY73%=gUqW8P+3{cS3fkDq2V)Wx9jNBHS`5%VN`j&`wYc| zX#H}yGYf>ml*}z47W2jv@s|}oe4O?~YCk1v+`)Tf9MNOP6t6I^0kma}4z!jv>Q)Zg z&5b`gzq66m+g2UseV<#%?$>T2o4OjUW@3bb7=bLx2mrZmu`W0^xLFYT!E7NMd6ETZ zK1*oP&io{xEid7_hPZ0wPFeXVvLc4en+Nki56wPVZwX7wiFQranoYHF&DKw62!8gefaQ+6o(^F`^5srj2adembL^ev}(w`tuenmw!q4_#n3r2mM2k{J{{$K zH`ma!=Ng>kG879?!2l}cU<4E>K@eOAv;#PRn?^|+p`s_5w%}>L|4-YPBMxzG#E1*D z=E?wLZhfp?^@K21uEbcd05@8PbHhZ^QS|;*geL)NV=#Ot42e&qj#kBRHP{97Nd*c# zv1W?F%42Xkw=AKiCcyP8=Aq>5!@9<6AYimUpfV&=o(zPj8ybu(2BIJk9+e`MbwEwJlu6~)XdR??{jn{WtQO&$zbs%~`z<6h>ad|O z#|3fi90^m${V8b7(EIvFJBs?gMNs_{!`#MR`!ZY%v=YKWuYt5W zNy$ghfRs5CyKEsFUoGR2t^#5)<=^B!e4OTrln7eu0~M!H%K$w#^f%53*q{Mv0g2N< zj7AOdQJcCZ6ul_GL2F_0&2#DRScWrvCE_eZ%p!~c5CBo$U@tPN)Yuszpp&T3I*O`S zvG}T2`TNpd{(eL?lYA}~G>-7Sg$r@hY3#~MWX&36%Mv7Z(h;f#?Ge@qF!9s?)lt|w z;M3A$AyYWum{ojd$0T}#2{@MOy(X6(@BA=>i8}~~3|H0R7GDPDBwQC<1%;y z_W&vX2KV8^SEPD^JLO`WZY6Fp?r`(KTF2)9)&1+kK3FQlc?rHd*KJhNxK^!ol6# z9B$`$RSM>94@y^riAHB)lwHgA@~_hoxt+n87OBdc(7{OrgP#ABp-$1yGE+cePZ^!B zg%9Z{;lqcI6M_@Be9L!78J9OT0xh}kYc({CIQr(>sWdXG3ke7<2=OMNUc9EB-P>lf zXXsio!`B0~7=dC`$U&J3Q6qV@xn{(WNkRaP8EC@{tzycw)qM7SyAa9LgAt2Cj266h z6m?^cEuQPyhiK4$_=9&&4RuG>2hhhjXvW~7-v`;cIelCtYm%GjFt7)!T2w&qC}S43bV& z^2CRx5!~~BGDXXA0%zfrdPA2fobn`F1l()^nf_7+HiTKRMX?gUaj_2{K9L${{>k@= z%Z;Nka%P*^LtLTtnwFiwNCdZ924mUv^jr;u5e@AY!b zxU)V$CR0k#naVJw7$?DG>Es&i8bD!i7_f0&8^?9fN;A^cXq0t$H+$}@Rs{?X7a+>( z@fdsqkERmHxFMz#pUc^$XHj0Ykxl549)^cQtjQo=@38zwwXFH?4^eoSYPWP2iVM0a z4*Z;W_ZuBkyyxaUH%#FN-(Jkx)`jd!oQqxbH;7>p37%fhf}tQ4y^Msjns9e1|Fy>E z_$huqeE2vOh?F3DtR;d4)PPii#DMxSW!rk+{3$)Md~ImZh^5h5@v(1Aqod=|`M=lNQ2BS+b*F$lr5c9kxnCW++6CvD0 zG5y0;DCOA=hg3+P9o;5I`HH*!Cm_ zlF{6A>BqW#`0$C;*yM6V1e%(V%1Up5sH}s!W@rX!x)T+%&{zkSZsnqLf{3R?z3Zoy z?AUk#gMIJBwJ*mAOhy|*ASm9cs$5Q#^0wtVf}H}x)fjwL{`_D6lYn{XeQ6B=1H}9lrRNS1-tN$Q6xTHtQ^eyA^>K%r znwRb|g`)AvgG@6Y%7s+12OK9L$1 z8=}aRyxP=_rWKi6hN6XBA3F^+5~oFCH0?Wx-2PAnZR^fuVDB|#vzG!hF@m518ZiWI zFzVZh=NDyX0NVxKjf7sLboNtR{`JlI0ZOBDkw$T`5L!L{ru6~ix*#JBGV+elC-Wfp z)*rj4N4m^=vJ(BzQ|K-GAia7%MH4`cvRyF51^NkvyD&o!V)wm>xoZQZXY_N?I|rD( zbO>wt5ChXpW>>{X` z$yX^R{RJ03e)t}CW$SJ1q3M|Bk*k4j#$g%5+;fB(^EW&g;({B5N54Odoqw)nci&ZX z*cXrvo{tz1F;C(r>v*eD3hYFd_KiaC>$zLX@~?{zA3l-V7p<+HP86&2tPB7eEHoD6 zlpwHB8`^W4(ycW@J@5z-HviL^^ln~GdhiMqXLzk&3@^$iA|4;grB`Xd$$FJ~I9Y`4 z1PY&_s_c1|1@|DLV>B6YAVzH5V{P$z_yNlpt>8NqaKcu&LU(P1Z{I$j-p*_24SoXK zDJEi^_=z;@KtOs4M<1d5`j<&=?xN?>K|;YSX0J`HNBqosY8CH$=3rnP&3 z*d-gOE!o2Sg;RL!*H81@wxx8*RbXC8%86hao)fk{K+zD0meSf^&c?EVBhdwUIC(jH z`_88zd?cS7q;1FyCs{5wbrx(o=#t6HPqYx4Ru{50QjEEAKAi(G_DGDBVNhuL89)bI zV+Brz(7<|04;1;=!-tQFw$?d;I+UQbSlaU)ZfHPT7On`o#cGlkt4ZR-WMna4gERvR zK7ej$#vvAi9Xi6dem;Y}uU}5O`zo-{MgoOMP+x03HTw`U-0ZMCLMoQ6=WgV(iIbexO5G zmg4x)0F7n2#N!S$+r+<@!m@_=(EB#>pG~V-Jnw#HWL7eD_}{6vo6#B)nem=8%}{rk z*Y1zd`^cfyqT3z}0vf};hD@sBh$;td7b1Z@6uVw#)DsN{5AAt*hnfbhNj)%)_OHL4 zwzVIj&xqlQK{Vu(sPV^25JRUa$-q=MzpC`%!^i2aNHsPJSkyFl3RB*5$-w8pz=R;1NEMTgZMe1N324DW@sqH zSH3-!)<@5!*SL2!po)z>?`^in6E{N!HT^e(ovy~fkK`q=H9&v1G=0W+5X zj+ecc>)LqG3(H-*sJpyp!{jKGn#<{3)Ctm0p??j5fp|8*!OO7q?C7V_eY z5w1UfCYj`AxX~|R8`CkhM_9+(ovTNW!*RWz^KaD0_^9pEHzD_fY2<|K3Fu9wT`+=* z(m5&252V@i6@T>b;ln3V9to*ihKi3F3iC-wV}?ji1+oweOOFhw8b#xpa{lW_OGxgz z2JM`O1WG&wD&V3K++3pgh}8ia*A^TbaI0;2Bq8Cv_8oLziVf3@^jFlnG?H^lfu_YSl%oA3TTjjQ@cnRTKvIRkz$RkG|`Ay%vK3 z$k-0D_pfND6QjhWz=SBET!(BnOE!~bIGHAy%pm*SK!%|R228@C0ELk-Mkq)E7zCUl zAfYg;uRt5cIIeg-1ChyT7uP^JN&V6|n{(UQf-K$!{cFr}HGQQA3k{DLe`i+qLvg)TZkr0 z+6B=)*gL-yr0%h)u&Ip&3f5$a&CP}Bjx(`}$5XVnwi7PuVoKQ-&MAGBoyje{GWaoe zC#oq37?`$1D+bJ-0pyS!_g;Fki0BN9{=^JQiw>_y^(UYx{0gS}+4OpXJNNJBmsg_Z zUl!!)n-{QVRUPfY579McDUPc!4M?QD{b&tQl|V?N4UH3UP@<`=Y2%FPTiN#NYqV}z zOMmqcYLRAk1zZZ0XR`F}OtNQtidD}g>WaN)bbUZL_i6(=qa}*77KJ%$VU(h(0@eU8 z14A1W$=4Oth0Rn~FJjl;i|N`^j$sS7QNfVoCG9KaRY|_pYL%lQr1wyf{0q^7?Npbg zS%W@-`HVh%_?R$6s-ZzcjnI0h5U+$-eEfvn7(#88;vF^KO6=~33%L7{v+3D+E!o87 zh??T{&kMK+f@ndMM(08yuFe^6y5OWivMH2$onZ7YOe%hz+emVIeo_L66DKCEG)hCx zrF_2w*I*F?sRashp6DaQ>m+Lna{}_ZJRsdbYnGAz=hDi85gp|XyOYNQ0RRKdugZm#p__jj*0hnGy=m^4kjtk*Hit^~6Sn>CJ zcYgIp2mV20vjNx?PpRPN_nu28@|Xfh}xOSpXvg}RqSS(?tO zL8hPI$KpkB)|3RZt9Ot{_t1HrOZf*iH;^kf#Q|&}i-_HPaMlN}JZSA7@ly96h78Lo2%W-yEy%Gn#>k*2&PB}#)o{>NEXl2`_c`u-I~(>5LB7!*V<%c`$)AtBX^PZHi;`y|bbh*;a3Dr1 z@^M50gv^uo>M0qWR09TNoho$rT`0kc^j?jTxSvgH?_+7*4tmTaTLLMT>~>kR#vXU^ zaI75fg_X9*N=?jK$L;SOVB>}!OuGO{CMgRP($#q=A|*()2sd4FM5>GJKw)^0WlJ9* zHWv!c)7<{^ecw}4rO?{s+xJ$}(Ot&+p843p9%h&RmWa6)2HFUucSE3`qJkl&o~v10 zmF1xq1}LtC{=E)eX{cz?{NY)LHAxr#8@2~vK8!T*ZEYQ|iQ$20Y;>uqNdc*mzbyd% z_$(|b8>C`N2eT_o9$Y=dr@vT5bns6oqmop58fkkDFYR8+w)6!g^fXLmkaRp!^`<)S zYnNl(NjP);wH>xe|3=Y6+t;`4KcxyuSb zoF?r#sjmXB?}y|Z4y;2SygQai`Av!sHW%c}-Yu86eQq`zzq0^U`7Uhp6NolXY7#Y` zVr3c-jpW+Lq-PP3TS*Q~VWZkbxbPJ&JNsq+?ZKT~C_VeAbZ>ZVlFy;C62xhtPY?6Z z<5L*k8De@xH-(|0@gKolZ@s{*Pq4RVDkae)J5h}$lNe-f*#P(NJs6vC*ju=l!9WWk z{U0o-=w|x)?S$tIamMAnG?We@GMbeC%l(wg`1i)yWZWAt;zv#74}Oi;;IM}5$i9F4 zue*WWXuSm}egwaqv3Iy4#5qKFidZEqrcvlF#Rkqxnvu3e^p;8>nk^ z(K=VEJw`zz?{+SpL1%tOvBua2b-L1W)-1ONw1QH*{ zF+PZ^je}NeoeB_vf-pF42xrp!$=YBB*3-M=m;B#M9GD7N%3HKFczr7Kxm72Y4tvi^W1|2AXg$QPicYSd+05&GQwb+#knEYp zuKrs33YL?KEFwV>LBspp)f-Gy&)5(&9n9cgFq7M{;`&W{K7IJ`F>#30n2^`LE98Ss z=#2>0e%Tl?pc!gGk1RMJqJYh-YZ=^m6;5g?7}ba&n8Eyxyb3+7K|47m%5`z_m3kQ$ zvV$mR1BKD&nRVe-z@bSSfUcvNq98JV9<x^A|wtHeeTb{=A$=nqH>umB;9rT89yujf57FR%fDAkYvX277@Arh~pWijx&go z%s?n$6NvmAncqa9V-M6j{y^fx$0<&vawJOj9}^BrrWz4i#vOolU7h!`Xb@U%E#k{R zm{0$X%dv+p0X-cRP@WQ{ayd~NujE;I4T-h52rgs=omFUi0Fg~7b1l_@P2Bt80q*&b zq7nsheQO=u;Dza^IowcZjXg(yad>1zszvz3Bc*iim_b@DB4f@uZAeu9K}gwN;&8+r zAgv~o$`r7Dum~_{sd+PRq|t5HA8azN@nTZW5%4(?7#xOzNH?Wt+(WbF9Qr{xr3ip` zo{fzP%gVB3Ne@;1y`+kEP6&b0w(`Xdmyn7})*DfPFbUElb*aQigImdFm0ZF5AG@t|( z@O)r!1#FP4M%*sU;IkB!{*}MEpo`{Tc_BlsfmW{(Of!1r2Bf0{p`pPYZ)NOVk8$Rf zv6XKpU^Ok03q+2+h6k>!k8Scj9$2zP(eXl*z1?$3nir$AIxU_q$Ms%@Kv8xL+TBgC z|5-|-YYCNgF=O>9wj=-eXDUNMtz4TDi5~SOotbF)5DHJJdUqxwuU!g-yup_N8 zD#xyK8Ohf^+{C=EG9_rVHu%bqs#*WaQU-Tlg>Ba&W`v*t%Gh^>taZ-FPvul96xs%H z91Oc3WCNkH)hvGRYkdCZG0(}x(jR8WVv+u zB>J;wlacwDr*Ifl@QfuhSx}O}bYG`PHB&Qf4YMj==7raH(VHBE7MGN#f{skgCkl1T zyzri)52ai*>Y$P8#4t>)evqBN{u97yN210b5kx@q?8E)+{mlUBK|v*jNJcp88iQ9K zarwr_A{f_{vokn_R~`=Y@V~jC;nz(<-E(Eg9!ebHK* z!G{kY6PHMh7m_>7G%+5@k|Q8n`=ZwKZL&PVB{A~(Mv|A$OIX$VHv0Q6$IhOEqszR; ztfuFZ;JP^$m2dr$rxIG{a-|g5X_V|l05ybfOvdj9CzI+mu5hhe~;4aM@VHN<9qd{

hO1Io@Kp-n`myhPRPorsJKblu$}=i_>FK7Liqn|7Bu#UNAAx^TkvF*{xa z%5fm;fGHUY!*^3K_m50pu$Jx5?q%EBEKUEO_bZ!t3Qk@T>oImy8u=-9@-~us-yELd zG*lHm&$W|o;}^eZ=go7!modjB)YOP)buh;7V8sf>)TzR(S&FtviVmP1SOc>=7LKd# zwehNA3h+)~3NU+*%eHMU?d{$>&kq z8=;c>m~-uY+PIBI0GflX55ZHqKey?eBNKU@c(RKrR+JmPUam2@P}baZ~9l#gCC?Y&+1L+l(6H6_8}(S{QoOrF(DrJRF;Jc715|r zSSa*HybINiXSI|_YMyO%=*Fe8MN`|PbE@ufoY-$p!ykmcs(<8+=y#Yut$^*DQ|x&` zQ(To~@fQ*!&&3-eQCgr;s6#RMfDk>$peU$NodzF1FU=1(RnW21prR+I;N&Xl=MyX+K2BFfiZOJgam>#R`zc8WQ>5NN&XAX&{=^ePU7a@& z#h(rG9}m5aw$&dbmADa%$w=5l1q_rDuZ6J&aYt(m1;lh;Q7zgiXKsI{iaeQ5ZQju9)pY zDgzZpD~rPaLA2;4!sorhFTRvGs!4T)4$%4khk4heD07R8nOPa7q$oWx%YY~`lK zJ;Y*(G1tf^Q$Bp0#){PbCG>JU2-9K6m&UT7t}bsyU~tc`XVS6rA~Kot5H$@61u;Td zwBhAGNv=H4OH=TcoMPn6ICFM3$^jvb5!lS+xvQBzeJgcja|WQA__*ObeD&!~2x&gF z2_8ZUX%8f#j+`={r5e!L6qAG7I6wG9&N=H3luz&G{`;K+?;|Z(je^x8&@C((6t<^A zynAk#7q?aL>#0SU!4g&XkBT%&fvtT-eBJ^ub7ERc7QQ1L;2A<=|S6|`ra2G%R zSwEk;v4h5DfE3gL&AI)?AQpq#R(--N0>@jo&G}k2^FLNWQEwIDz-%fe)v{slyXbN! z6PTw_uEDS_#L+P9j0{lTf+;s-r8MmBgP;keMTft0jmRje+R$5q)+M9Ils9~Lym2JI zEf)wDLm+w$0}2L3<0f7D+n;6krpMWM?`r2B37wsV zWX(AQiWd^l5mMP8qQex23n?uqU?6lRy-qQKF;-iy_6S39b}jvhE+9d)FpWckO#2ID zckf~-J%nAHrE0NIwoo%=$}n?h3~<*?JGiA;@$==W338ulW_@D{WxJ{=8J+>|Y_c+o zUA=Ye8d%~r0Up!0PRWV?yd8J6akbJS7AI|TE z_jdSGj1M2Dks`GpS<*-9RK7o1I%4H&?4)zYf0pv}vkU1Px(qw}HV8~Yg)|ZXEeh?* zXi}62T4ZFEs&hQZb-+!7A$E)=L%p@wA zfdW}aB>C?|qA&63Pj`>xD&=w43t_ZQv;5|>dE)-F*_*DVcW5?!1y_?%71%jL*^l4Vh zrD!Q7U@msbI<8@8>mLYZU%-g2;%!@ZvUX12KB}A#A3jb^A~lx$h)6zXYOFPajI78G zGTtAGKpoIZMQf8UKR=0`yUrmqd=c86gNhgt5WjA~Y;i zMHR4~4`1*YXPi|<%RmY1dhVyYw~A!{bo$a)k;p8hKQWbn0fynJRLF@90cyOa#DS0( zhIKNN2=Gw?!Rr}FEob11O%&hz5)r4JvmJ-#TT*Xok$?{$J|?6hB{jKkS`RY8=1I~B zks6Or3Hyfh?tQ3$ryn?z#NMUY&Y6fRMFm|X=mil+OgCMxT4!V)Ta4vi)MZGdGe9UVt`c5K!JEe>5Q}+w~@7 z5%$TIIvnzfm78l4FqGKMK;dq>izh~lk&zI)P#R@<5@_^V4;q zETx5~&_a_!!@gJ)LI_z%h?RX+7BBL?O17-U+U|a5=A7q`nR_MKk|ifjY}xbSbzeBr zy`#DJ&Ybf(pY!>CzSCB02DZ?=C&P)SltK zs0L4AiXYv-HJS=@I>_*E-h2G~jT#{`{N$HuUVN#Av~dx6r@~bcCK1wEm{t1<7cFik z8tUWjyJ6ENlNp~jcw3ofPiPMJedH`Msa14VypO!D!O{>m$L|LqaQ#n~Jw$*?L;|UD zXbf_JN`e87sp2tbK~Qv%$Ze(MulAAt)UkcPaV@?46MZ6@aN}0=O4bO?fxGfN)p3X= zoBG)pmRvcll_mAR;`x$#dYrT9e{Bh=9ZQiVE3u7Q25g81A!wZVJ2z;$ikanHKt8>U zX!jEgZu&W&`caT=`#T_>_bdB+_&9}#lt+Y)xq3@@9;F7FBtR3Zm0pW%X+bVepjlbe zr!-niFX|w`&fiwh-nkendojvB3nLiA47jJDy|G1ku`|+J=^+FT0_Db=qm^5(tdxUN zJrLYV$<*zMw$~kA<6iIQg-$VAC-@IKdEmzz*}3&8^6MYLnRgYz@Env{K-#G# z9N>fpzzPAT0hSYHAbTy(Z>r?AJ?j`;@|$wLVh<4S^QR#nK28%wYGP<29!F4vi0ncz zw>T+lSSv^T-CfTvB-wc-N-qOhfiyrEZZN0TfO2i^LLXT>C?se!I0Ee`P+7D-h#B5N z-I;A%wlMoT!UXjMe|D;pspF5;UK7{Pd?rh}ax3BFBjj`gN(WB(7R<3gN(fPdHFy=a zW7D0o*tC5%>E1Agm`%!&FLtXg$)^aw26*Q>8NPgB{mk8+TyY z(_R0Pd1ANxgmBd)*v7wFZ*al3$e2mFVJ%jw*`oNV$kq@0cjfCwlrXj34yMo3q2^2Dqm zgS+7pDPaqgCBSyjx)&|?V1{<{o*R3-RkQ>g0O5bnClo8c^@`Pe(ZX&bhaMrDsU;PC z8zFP@yn$Et6yQAPxo*PwquLb2qTyD$Pn9z@Xu4<^1V^v&be_pq+&fh+qUPgkhkRn|^KJ@*wFc zP(_u>BU(a%ax^M05RMIUA4E1#QrA{&OzigL6Q>J_@^ZflI zh#EzFrAC6Ds`b-Mt;4L2N{$vl@9 zZiA_zEcm7dU^N6Ha};yk2qednt1 zb3iy6p+GxH2yR18dyVLdu3@L8h;Ctwd9NiRQvv2l&b>?F9Os zBOF{sTFxdCm^>e{ED-zG_XUx$pd`PAaAF-{`zflgZ{e}8>_7;Ic7X2=Wwc#-X)Oo0 z)RUcd2T8T!sAltY9>TN{H2$56+wbS8Ihz}vT5B}D9-7+Mo~LTb0s6M?XZ=%Wv$f-0 zl*&AHXYB?0Ir%$IYwo_of;$Az&3649U;pMHgTL=4WA&4aT!oea#7XczB0(NK6I^-5iR)ID=rwU@Zbr1WB58%Gpm$t~ zV%{ggT;%FZ-+Hl(z5`3i4qT2_a}lP*2)gOzLJEY`2&p_Hx$v^1JW5c=icz2}z!pfI z2i1i%w-LNz2Q`0{Scf(>S{7>v8xeqXkE8uvz7v7QM$HZLbA0pz2dJ#vKsfX&wguVK zVDYWBYXGk?TUj9QVut)4mhk|GUTsGRMLb@-2gT|J$&EKg(W&WVtP4ryS77PNG5tN+ zJe0@-)Nl_KnWxD8p$!mCG`zk_uz_EunavJfyJs`&U#zCR=NvlwZyt)17nCTCjSx^al+eJ|;hrIwq5LBaIrMbQ@xC5Ru8CYe2C)uDSkB zhdFa>9^Dn=so%{dJ#Ze%S%gw$2vZ{r5W;X*{DwwKH*6E_Do{!fIh};pB0|}qEP)__ zkh?JhyO{o0hiDScw&AK+S5k~ydi ztY=yH-6aLfEv@!DLw)+B8$rIS_Ur{9Sa zs2nrEGjBss9Uzdpi}L!%h?VYV)88cB8|QVZ8ISL=5yIl>t$k$5&cP9o6-(*axr)?p zXY$Rpk+Bk8U-cK~M56e06*N4VUY0v9Y62>*Wv~@05{Jes8g8p#f!^h+$Qm(NGQS7zX zdcJSLr?bhynF9BQ07FJx=`Dh@tPm zzO<9lk2O=V^xvq}KO&~~kj%RM%1$M!o3S7!Qd}5&gv+bG%N6H7L~ZFSv^Hf&5C)e( zxr*s?uTDdli%3uXG-*9+%ql&lTs6uxo+n%PNA|t_C0d&Hz0p%%+3dO<>pRX-C}9&a zAggQ0Wv*sm;~6}1PsyA9xy9oGtwa1Qc{Y2VTt#B{Ee!PiH9cJ)B(?X?*!TEF-2cB9 z@jG40Gs(!XMUvoXZK+K25dZS%)0`XlAq$f~B9!YOa}p?`Qn+0lvZ0$8u&ytC>i#;O z-50=z4;zf+)cDjh7Q`4}M)Kz@tNa-Y zXS~SY$M^A_@8npw&M6XnS5Xmkch?aA-QjiH4hAZ(qgm#rlHAIgIYnjYSc=_(?odWfjRUh&d0Kr zphYd10yF3!ghJwN<>3-2Erly|4GW7D(*1Acm7W7g!$t(UD4*KKCGYQLb+H^;0L0lO z=Sk zC!AS+FJ~-$nDmtG#Yu62Hjt-e&c&pYrX%!WU8c0Z6R#B$IK}ctLBKiraMr=7n5u(}c*qjuV%BvT_s6TX(QKzniSwOwN+nI!Zov1F68RWaX!@ zr+$${b)3P}O{B9cFwzT2_f6&ClVxZvTtXF>#lIVm3xr71Q{KwVlAlo@c^pTb_>rMd z$%kA>%qJU;oqi;v>;bRhD%&NWkv8^PFTQ^Nj(A)s9QX_<-@sFkKfB8JpJr|?J zOfW-WIIhy91=^w57Dk#N3*M;0WU4{p5-F`DN(t}vy#yld)J{FX*XE}9`tZ|PEgEQ| zY2`{-P=C4;C~-I^Ik6Re9+7B`=Yc$s1KOGU_B?~hPLy#8M)2(@Rf0GPdZ$g499j-& z6d|L7DY^gVoS6^tvA=8Oyz}}wybVu7gF#c1!<;!4eB!p{v~^$1tM-TK$WEsuOE2EQo$uOBeC_e`)2v?Y$}`gz^|Jm?8wt<4iJUfw1RS`kN@+tzA>2H?F9R?% z5obBNbt~U?lBzvJiTXG>=UhSo2zlytPAqa2rTjT`btX~du?{}KA+?PuZ{J09_D=No zHzVSTh6aOp+$DyQ^AE8!*23P`?jqk6qAPbXrJ)l`s0yk)v76b}@(j2AQ;M#e(?G(X zrhNFAghWbf*BezcF)}qm#cBYW3qOl%lc)cwo>b>@?A$U$s1y-&5QZ#r$gVo@pPb* zQJHhqjXu2{W7>Wys-7c}cmguFl1jLx|0jERXU+z#EOhC;Ge1tBy{OpwrQjjU zIVC7ng4PhM{W!wWII@Mr-XF8zBQf6nl^t|@8pC#nf5(801R-wPO9W;Efi^jQw zG!x=Iw;tl2|9XzT&^zg}&LJ8)!K1N+locWqxrRgg{zSI7%^x0o_&E6?C!k*NWG;ZsC9MfvbPXjZ*5Ky{rZBMc3|jZy%**M&rq8M) z8XWr*Nn2oMcEgVUCgZ$J^9u(6QS4**CZIF{WJWo>Awi4zlmsr}Pmi9D)>Alez~J!3 zR@;F-mM?yueBUc5D}ex#_B;-h{T=OrzooC|UHs&W7jnh7YoNg>n$*Waetw#HceWBJ z`x7G73=Y_1h*?s&=NSxu#XPe1Rb*qIXQ1wz>^bm$T0V0D)y>m+@AE-c+#yH~Bq&e3 zNKQ#?7mmZhmXmiNDcMOJMx}=9Ej5(ph4g@zthEma}5w@ zC5Z1f3_C#UV3c&nV(jz<2ssmJxY5v3xMa$WO%NzAbzFKq^$MZG(wkV7aR06F0;McK z^$`y2V9A2LTw9kJN&;>eY7i&{tZfi9Z1T?YaiHT~%G(Ro7LYl6>2bqSVdR z`O@#`3$G*gbiE86aVd34e(Ky5ku+4wDzs99GGtFE-kf$O*AmI-P5jnUoIPhv2i|Sx zyTTmLwq<|qZz7JTP&wSUO&T6ly+@Hc+;R)?liB? zc?U0B+?}5{!zJ|K39Qnox}9%{R)*IrTCb&JKJb%o zrzzf>^jyr~*OBeYXuLopN7Xe*)NEdzgY3<0f?$s7ZN%AoUgYtR1*jamLjJ4l7K>V} zD+G-gNFvW0*+aiY>%LoJ9Ye?ob^>}7oOy@=AS8zoL#A+UzItXs&miUI4x-7a7zF~2 z8d3zd@h1)s_$!0a8q(M65rjyEp;)cZlY$`kNR=o4H8b^=Tp%U~8xBrUeBTZ_7r8zK z&OgZ`h-u1Z@HKp#Wd)JV@9{r7f+}4fdjDF0jn1u7oLq(7-2?pJjOa;N;$61cAD{#W z^d7Ov#5a|t)e4=Mb6%+%KY59jM@c0ALdbFkoIE^)jvV9P zxx3y=Cc~f_CIG{GDvG^z$%`i*B^T#{@{BC34hB(+!yEi&e9xp)LUe=IFIi&HH-GWK zAoS{aaq$2I$u<9y(s$Q+_1O=*_!!CN9bvL%HlT(LNat;YWZ?Q4mE)CYaah&)vT6-u z2pV+lV}8)IRLdc?aK=}+^vLJ2EspQBB`^8NJ1c=pzOP2g1BYJO6(OjOc62Qfma`X0 z3I-yOXjOqaO(Tq&*e1uMxE_@H9?k1u|Iayh?-BodV2L0Tu;%m?spV4fsnCLmx zfVz%{CT!?7Egy{NSVkEyw^!TYkTLexAsWRcKhgyGFF+|<9HIq0Dpv%m z9VtGKk-;fLSl}C1>1<|$G}{GY34?cx+|i1~Ru<8a$O}0@#+26dPVo2dPvSM)9%5F1 z=&CGu?XiIxZpBn9|K^aE&lQq(z3vo_6!f=X5H9_pMfG)_DtA$bsM=pgE#vT%0L8SXpNK5IA5RxWnbl|+EOX9;BnYqThZsV zS2^0&e!%GRU8HUp{|$@R4)@)Y(){ObShbFSk_yUCyhs!OQJ4GkNv#{&8Xp&az75%L zWM~ULQ^G3c5}yO;rw71QOgh>P;UH-5|pUPINS+kf~! z2%fmLNS?CT^}fd>bP=ZU_uIzlLFXiu5p>mmH=eZzA9i3Xe^+a*8pm3o}=rudGWFaPo>o6=J-bGUiZuU zuP*?OBAX1G`Rrbdfk{6~#>qnMmGw&J=mWU6J+IXOP8)+C3Vs0B+vi(X@!CQ!keDZFc5aZIT0Fi#H;8?V;m%qJ-;46*O4_ge~AZ#@)8=6<_C1>3^AWyKh;l z>gJZ$IZ|3LL(YcbFGP)`8QubAO*BAS7Twd3=+P;B)UH%(U z+J-d*#2#GY2s@XE98lF>SVwXf8n}5km!X;aBZmiUC0;{XeDs45+HHz@?FW}s9U1>t z`MWeuUE7J7@GA&>4Sw}0|JktUgSj_6URtOGN&f|wxen=WsF_6z-tJS6{zrDY;URXR z$*IzxKpKZK5#v45L&`p-hd`X4UFAzCZAm3e#?Zg@|Bcu+v*O{~H#^XL~1mpyBu(xK59dFf7ZqcPbz5kk^zTf^HTJXmT zaX}ETKEJYMyFY`v-4b90`TEZlv|g{BYKX*fhvK2##SO;!2J9FxVlTPgMJdd7O4QN_ zsE}BlEDwf)bp_8Vau}59i>=XaUQjaMWn>gs*NjgzOnshqAN?C|h6W-j;T{l3L$f^i zfDI3LgqmF``)esoWeaZ^lx)+|xC4cz>q7MFj|WCdNL7kAmq|acNh70|gWUQXZS$nP zc6@BiLFW;?i9OK{1DG}{yY|kTI=YU5%70p_NPWEmX;j(?ClDE2M##F+*S6y3yr0yG z*9#k+Es-|^xL%SKVg%7WwS67>y!Nga1wC+TRMuRRxA`ZL1D>9QE5pSqjfl=c|Y|abfJAKh-7ZDlM!7zb8q@0Jq{Fk*UranWhuS z`l*0amyqEgdrb)@8Mugqc|=H+?JPLII;1MkJ-Btd8pxAPOS8smO>=0(UALnqN1dU( zjzqSB1WIuAS|n|44%@e*21c$5llpTm_j*8~26}^z!~I=RSxdWbGV|~Pm-39)L`c6T zs&ch7g*(2^(KyL0mkO-`EDJ947d=uNvTdK=6+_XwsL2~6F@Qjt1@SL`+@CH4Zd1=+ zTF~Xcn!e5a8P~W<_C?P!cigXeq>cwR)npF8UNF`{(fh|$qqBWx_qRWRRcIGtXG}$G zfJlJ1o0TQ=>m2RUgF8cSUHUH9V+Ja^Ax$II0Z&_rG|Y-ONeIqz#!E!o?~I>^tF50e zQlzGwg-Y0*^tfU$cwNgDIJf^=HNb7aP$}cm?GGiL@>C{VK%5>f$LCtC!SC%^uyR4h^!#V#1edGjgJFG>ZQVI9BjeQvV529YO%w7y6BOG}YR zO_G+XAlVP$Uk2ZgR5W{XOopJx#E+ESVlJ=oA&HF{16K#++RRAD5PkQd?5utvTp7Nq zxizk++A5UO>BuUjINnc5+Ff357RuwcTbSRHyJ1AEi|3=Jp(+q{TL^T zb%@LmcxypL65-&C1)?_Q?ghacZD+tw=k#m)p`KE>cyb%J8bE%}^v%tYPCkPH@2=CZ z=z1>4U!ADNKc5O;imKcl$NHyi{*hT&skr1N!#U=rE|h2N{b7SBDf{O`+89cFMCdJ06`WFqji1-B6b}d9&X;N_D zcJT#RqIcE3wF>BdNhH)Glez>H@C`b3&gcK^g0Qd(LNc~eH}B z1oN~&C)!BoW3z-6XAs&+Fb`yn#AN9KfFL&ZSR0y+D2Bho(`NL%S>bb49Rse=Yvn{S!>8M zyJG4`Psr#kgz}i2wro!VX+)N<3mAraSvT3(ObP=x?7wAuwlLC@eY%La%x^(BHvO#vWCnYn^L4;4_bR5MYt8XG=$GxD&<&-^_rN_ zC(v(mUYspoohj8lY&mIWwi4)IM9GXxOh3wW!Tr6n2lR8T!MPd1qxPESHezIph6g%{ zRL_Dwz6EuK9loGXIBNQsh@4{3+vgJ+h%meWv~LKi_UjXr;x#yhOi0c3+-9sy(Nbe; z7fpzt(M59459G zjYHEDXYe3Kh{HlR2O6Eh>)i<(j;=s?9L}ea6z8A6J~LxPZ5dCupkY@S`jypbL2!1t&?7rn>UE)hNX9OH2nIy3pG#KGxTPQAeRvtgAkJHN47wt)&nVunMNTwlIdj!#r_fM)LP56>9{lOFlyil|(9h zb7OmIUbqaRwZWg%P{Rk*-{&T~uhQ40^*er6{hR-^y8xHAglC5L z&@t%)`}=AEWu>J!N{!+C#e(O3*D=+VG2!ukjS$uJTaS4Sp3UdiQlWoI@wvQuk2D0Sgm%gLI;HqN$D^#4 zAt`F9%Y$7QtYg&Tolh9*X1UQ!ZH9u6Nkl$9z%fml>XoWvfz=#`#wQ-3HXUYBfUH_g ziOCm%0(;dyVUM~$Fd`i@CqY;^^3xfKGgp>_eQ9B{8)97mT%KA>wgj|)7KWQH+$uwY ztnr2f5y{ygRt4kGOw?2eK}m&ubjTcWy`GEDl3$<>!h%ph51Ay9=IgrWFWCM}LMgD* zpNc>pN$7NeD75A4K9@>BOBwEUSlXjzsa2}Yc@4(-7K{Xq=g8xUx~>pgw(Z_I z^MPqLsYEL)k;djAI}9zDhuSFqUDUtC$)3&)W8G8c2>>qW>hfS>lrTxt5(W-Jx3MHK z+8JhMxe@I8Srf&W**G|DZxtGR%E$y*7_(N85%ty(5mEp=?E{q12s_)G+W5%rkZC?G z`McW~ykLgpgs*+^z>9M|kJt%fMh-nZ*tD^j+2x)pAq-mlG37)1Q7c(`)xnTpp1A&6 zht#P`QCQU;LCTUCPI2|^WzrpG|Bp2nb|56085Ik(Vo!{6-Uc`gMaN#}O!$HVg_X`;5kZl323+GHF2|JW3v>-vEl)4~ie`$!3!2q={M@mmBlIS=IJu^VUYKSxZrg-Q!MiMdKh=PmE@c}>4&P-Rqr50%K!U1ziAYNVQoqoSRnYMHYfdK>gfG&2 z$I<+Kud1YfcZ&nh_cD+Xzb9t1DJn;undI`Lv3$7v}DuU0v*WS5E`Q#%wTOtxerv2Qa-DWb@JZ1Zd( zrVKZ7K>Ny5I9F?Z$7Ieeh?+GC#t`$Tg-AiDL+*u9E27N#uH^lvvVa~Vgf#%n#mA55 zy~mv%_T0E67S}#P%(A!nM}J>=rr%Qo+nBDl?4?=Hl2OwT<39gnR{55m1>g(8$g3vXvpnw_ zv!GJX^s^B>xtaSO2 zS2eRXv>ic4OF1ih*?k3ad5X*T-A~TN{wuLKWY+NWy%F5X978LIG$ns=0@b9Mpmc_( zsDCOY!5P9+53K=J@4g!kzaBx9}K+6A0 zmhQyRxNeUbs?u&j$5^4PXIGxSo-7(65F-@iX~-`2+DO&hgv(;=g$oY@_wEZe1-MSI z@Gm_!4&pMHUDj6Qr75HCaJR4^z-&i)E!#E9c&te8IqFRmY6=0pVC3=Pi>JcSG(;SnIR(hrH9-z zr|j9am;CEk!{>--?%-&_3tJD5MCdnjI^cBM9~gFOiCe9D`B*q#juIGuw{^#;*;@IOH*Dc)Lf0h=@ue z0R+(Z!RAWSxg1oYOCe-UM&OvwBik_^1iK4tMi$X>wm2CuG z)sqHL-Z1INOy<)}*U&~rU<(cdKpy7(LQSytBq@xA_ADDWsJU53B|Hb`pt6+i$-SXX zx{k$Vbm{GxWy#UUUueIzL|U(Yhz{WwC*pvos8)|L#LsdFjvvAO`SSAO`3e#ch@~Ij zdZ^?Q6-lFVdjY6ur{8qsFVSVdIC4-Zos>y>)GrEVxo3Awp@~cm%WwB;M^B z-=R`h!wZBl7c=YDld?U3lgO-JacfNLgeWUd#?g3ilq|wD22RJBqe{!Ue_GAr2oD;ElrWjn zP)r{%9#hq6szH~KO^%S4w~|ZT7d1(V$q(MqvDAa=`;x(zV2n6wEdk+(m5l&>a#_`< zFeQ49i(`huS~92NsqO|gf=WfsA1doDlj=>kQh#-YeYW@DLgwh4e;n!!;0Ei%_@$Rt zjx+dMyiW*tMRDwtVJtrl-BvWNJ=XDZzIOQZ8960Ug-aPVI7D)KO68v<<^+h|H@`!y za4tG*Rv$BEbSHLtg6_iFG0K1nFQ`Uz*}C0BG%7J85D^l0xYOjn<`CT5*;;@U-1Dh2 z^PBAClv$IjiU_o#PKJH%gB^L?UD1A}|1lEIAc>ZX!xl;0Z|Dg5BoRmx$3Ot+m1 zS9!XH{}g`rYZT0e9t~n((CFqAz?I#LL_;82XlB6Jl#CLKa3B5D{8~BOmlvJdPkQ-B zMD9laWFq?swfkzX*}~i@a*r3!WE-x50A93V|a(r-6nIg_M4h zaRy;vqWS=ldwAi|ZW{2f ze*t?L1o0h=6Vbg+5Wmq~Bz8U@--G?AX3ghPPQ0;@Dxc!|6C?tDR%mr4^VEKoN4s!x zl#OB*1zm)!qu52@lUN zqsu6l-e$=&Q<9@HAt0nXkIM@Msa0&2hxH`NHW`$?4>mssj0?hm=w>5r9L^^pi$Di9 z3wY@?i(bIj9_i0JW7}jVjDG4H-imiFxIA0rq%CwHJzfIFqgWhiq6$DnA?zZqi)p9> ze@N+OWZV@h+rFykns+JqNR+lN_?ir@1GIYZ{L0&%g$cY6QWSyMyI{xFggwAs*R3{W z#}g6q4lpORWga*;%(8@`a&^w#phV6WS5t>OHlUV_zxyA4Di(L0k;Kk&1o25()77() z>~4g|uS9$I7$>a~lIPQl!|%6ZvuMbqQk9;b)kkCd4rtk9vW$=sR*S#M^G~;2P6(TvPFrMSOO^v$h3lqiq>m4E}wVQ)bR9S!w2^J1sqzLHXYT zpPWsIRS>FXX(5%t!S)6|rII#t)eoFmm7mnuK;@i0-df!uVkJW!UMBtyG@u||qZhLq zke0-vdThQb*T@}JDGLnueSHQ6Cvqb|&5*m~82jkRFG?MeqMn_H`+d38=UHCs_LT|t zz-s%W7{3Yb;INB{%IT3uCGHDv{;{&E$qJ?&ihb-mYZvU6IGK&6F8~n1Po(W$zL^Voh z<`7M7U~|RfW+}u7?iZ-O(whh*`ouZI4T|O{evaP`{;y#VC3YejSSkCSWBljf3J4-% zQW*s_ii_PJqWqjNmBW*Mw*nlApN&+NvRYmpP6H#8ur~!p2qJZ%F;Kfib*N#26)zsD z%&xWK_>=MrgIi=Im`FltYh=~{VanOe(}VjYjh8`F{w~a7S+sCM>u~)-82rOFXOgU> zF6o1Af{awjTnSW}G(_dD+`AogomGbjO8>;?Ybl`2=Gq+}2uB=cB?7R>PHSZTY^br3 z!wmRlW}687xg5M1Gk9s53bO8AX!nT7zirFs~Tk7AsY373n{YBoD_mHSuB~V76Lnw zK#;``g`x)s4mA^TBDV3_oA!E_!QK0e>&!dmTiPRekzNPF{c2_fNGc*agfybeAcFzr z(M8XttmiJl8Rv5+7rRY4rdE{FDQWw5L4XbP9ahRMgxQNSOUI^SdE45py#!Dw$Okvv zWC|anbNo?aRdD#_NTsquUTeyGQn`{+oIdw3=w5+zu-Cw+uu1|X+GXzn)dW0r5fXk&6|xS~tb!#jBNYg=HYhYye_*k&`)Z&&a}qJIAqU<)BgBfi`@r zVNTH2@cYb^c;n$|m*4#{uPf8HLGvhZ7HI%RN73ed^~RU z$B;X+XJw1%3@%NY55JJEN}=fzA?wIya)m36oN~ztJzz1a3!PR8HT8m?A|K&MFcT5c zf@?q$xObo^M6hx8ETAim8+*$KrVy=sL!xuOhL9#Tv|>Yc@Pngng3w?X9B=hGT;Lh~ zejf>V{>N~!5GkG)K4ETq)5we*Sr%9chlKwdizXfiBh6~TmoA870Yue}cR|9?qv8Yv z7E=n94DNpK{=M>%!*AIrc%56|{wEh&N+#@|eT`V?z}ww<52F7yhxN1i%J^$$u=VfT z06q7E0bxp6T_nb*2_+zHp99!C9h#4S{LL0a;x`6_d<0H#j`kyE*-y3w>%Ye7Tar6S zJ-}Y6@v5OxnEmh$sZ=eoH|X){38xuIR&f1HUAY{vGR3LqkpSVMgI(GA0jZ^3(ik^z zt|kJNp)fyMAv_C&9LHv&P1a{jD#E{nstjYy)vlzkgT9UHD}^R6DI7dKYqNUk!GBV- zzE+dRK8U*%g;xuT+db?^dwHpyPz@Sd1PJNf4GTgbNkc_APP^IO)on z8c>0Y0;GtAgNiZW!gJ~)P28C%Ul3@qua1taSMCSfkpw=U!M{TPq!M*_>E%op;rWi3~~b+%AKO3DB`W# z7%2#vi)tKDttg_qFiO3Rlu5(R~{*9y3nfyt{rK0s#`h6~NhrktUwT?;e~hRl-?96)06x4vx;s zGh=Da7lcKuNVOl)DE%{)v&$FQtuYGSrO}gtWKx64WS6kvjx&%YUGI+(DQ|op@nJbM zmKziv&VO09*71`~c&iB~dLd5w2|E{{IG~TrMwCMaI?wi5;NB0Pl?9j*^nU=!kLnq{ z5>y~X(-WJn;k)`o9?=derH7edD?R-#(-G)vRL|D%k;MLHp^rq-TpifCS#be@c0r-y z>y@7wCkZ)6^hWg9f$qKpCiztpq!0-|A*vDsvW=4zhm>A_!;}@k5|u*zR^D?!wE}Zm zG|Z#ky(Gd4OBLbr65gBF3PRdFAzI7H2CHlm!3QV4lL8v;KKgGin8KIMH2Kb(Psuf2 zgPW7D=Y?coDYG1#6q}bMazm=V^WSs^bziS(*?S{F;$Kx?oEu4yuq-bs&{aFoRL3cG)7Wv@Ar#gKyczbN42v*Px~ir)ga}L1Wj`ni%vW{|dwxsippOzB*x~>Z9xg*aPT{G@0WsCgZ;N`bpH>h4_K2TxJtV{2TrvHC>-N4ho^J@Ki(`0)}dGWbU#P>t16;Q4NT9c}Y3$kiAk8JQVZ z3nSo&ChT#EbeRkqIr&^x6yPk~Z7AGuXDva**@`s8^2xEk7tsC|iouEb_a%56Nm}uA z_pm^D`o5v3@Nog#3F+T^6SLyrW&q2YZG5h_R$iWvV2I;~#_G@bNhk=ZxHyZg&P5bl z@NU5eBdY&}Mt>ikfcuNJB-%nwA!mz(3qd2m}<_ z--8jT#VRDF6$kX3l}IgD8L?;haz&{70meS(iA|7&V86-tt(X`rm922ZeOc4(d*S|Q zR6<#2;|TBud%JTMWC;%*F{%jY(QN(3E*6j~hqkok?+tKIYAAQRdozt^F23|~%YD&( zdTeA(u_i)2m&YVN??Z47!TmL!*zPmv5#*Www$^lu2)MK*6cnI$-y;N?p3 z5ab_-{`@ic(gr_*7gev>Wqb}-%vZ}cTUgyMuUsn(|&teI6>65X$%gt6_JXaSklMb zE?HN{k%4o=-J9}jpb8vTvGPKnns8ZvY6&x>Ef8{w*~_v2IDL3xOkev-wj0;a(tgHl zBuAt5^q8ceo#$1TO`h2?7ZyK%P9LK_3vNQsW`dl=-xM5}M*7%r(%Oxwb%nKcb3yPk zZ*x4S&(;K~6O5q?qw573hoCizRT4Wv?oBlKxNj1d$@|qAXL|Pgf`i3d&*)Gl{?!@! zWG1KgTyXMkshn$`G~!{mz3wjua0}E$Nus5}D`3X+{d@^}JPuqRuKbbPwzkbJJV2-D z4U+m4I+TVw7fDQmNqgQIm~e5&Ixg>+PYh#HZgstvErh>>hVgl2rV{^nL};!rOzzF(4|Qy!xb& zr);Tx$?e%moOxC_6EQF6xT(8lG`F~wLHhoHL;7+dZ|f%WNN5O=8 zeA(3`8kJN+t_1FcH;IUo3B8U!!jXv-f{WduPn=Gk z+=P1aWAD2A9-7v?F+wR)Z}7VYRam^P8P*B@rjtA8!f`yg0)-*Bwa*@?GiX@)nTN$K zJ%hY|{bI_t^b<2X;Ho0iFB!UXpkbBq|3)vT&Nz*jBNG|ib(~XFQ)= zzjSS5MChCN>&i}_gUF1A*=W!Mx4oh z`Zc-vaRSrvN*7gAwwV)_ljacjr)^dakzh$``v=0(sMN(U>!Rw2fW1-L zUK~{via?FE8~|nu&K42^o^}30=H)3Cqhd~vkSwPRW|M=%%tnhrySw=IS}oCsZT53) zH|TF+W&XMR=N)@a1SZZ*Igj^yh{tgG$9(x@p5&4YT%6~9JGG3Ay{Gn$Pea}(%pI>H z|B_^ev~i3FBW~+ONcsif#KvX7;~Enhn zAKg@&abaKE-V(QzjPhNgI}6 z`U|2+DmRw9PjH)}%(Sx~%?Czvf?} zY}_*cf_T;7k=4y_H1oH3*79$N`}*)T?;EPgX@aBWT?}gZQiB;l2nb-Cq zv#o>)&Eu;zqF}2dVn_N3-gRUclvV{beF3-#2M8jo>VGn^1mioOoMulIzvH#Ji6_K% zi7u_MJ|{0(0Hh#IUEh;+C})N788MCPBQW@Ggam)jbPrw>ULt%QgH3x8_C@6XJk=p~ z=_3!GA-0 z-J030(%BjpHw-qE4K7c)80k=^m+Xa3vrQ0WA72WyBX)%5#)SkE8TFZPe*HP#?BGm! zV4BGf^3pdaE!aC_-2CEJ z%d>|#xz2^5Pt<4Q>pT7Bh^!f{3vX)HAUclEJ+u7lGa&P>Nj48E0r6zLWA_c?R_?KSH zSlFGtJMs|V4U4wKOU)t`AB<+mNtIj$O>l01~7a-g;%W(*;UUZmLK zYO#NY$;`IzvG;b+C^g>Ey=qR#4zWhAVwpX+ulX_75whTsG^TVp@#a?9?A7-eW~f@H zD&z2C|5)Cz>{nyt2oh2zq&;cf6F34{`fNtGJ5J62)dE!XRLxZOWZQAUSIaXx)!FUR zDLNZ0+p*xAFYzkYKl_UQ*(SU$`R@>lp(a&%M_FX8pb+|@7OmR$(g#$_`v_o_osY~C zr7CQ26Hzlt7Xyu7B@X-Qh4?`|_QH(#hgNdu&-y*LD0mToG_arW{2m$0yC!H^M|Kgk7snJ-_;eewPxsbrKE(;q3NtOQ5= z+3l^bM_rTY1RzgkpK-X_aliu{)fg@kBOnU&yx^<5vvY#prROjiZKV*(Gd(X-XMwaw zRB152uznKEo?5dbg7Gpx@(g$0axF8AA;GNxyaX}bt{3t$LRu~6cQ_=(3T7I^W<2Ky zIH3Oh)`N1{ld~(BHDgXq!&?e6IzfqMu=4M7%9OBbvE;O0a?B?xHobo!{)p#GBmu!{ zD!IZi9#Bp=#|ctD#7Cq0qCloVo1D*%vNSEtcx&Cjy_%1{&a{yYUjLy;#ypLSG3sL@ka{KTI^{bWb4+ni&x;B=dbTj&n17kwmWlvPy0 z7vNbo$n`9C=CbqezH}@!5?VBsQWedK1=YVFMzjneB9@9Gq#b4$g!L9G&Dm?j$&F4R z?!zv=YR65Ob<{3_Jh9W8*(k@m#PITs4!g8{td21A794HsIWtpRT7DwVP`nb5<tm6oBbP^NlR^@5$Dj(E+1OFU-u}VaiS$ zh5{tRLV2_12rSJ+>IjZxz0GNU(&@RSu~(aG`YtJNc}+;yq_ZCQUI>B-5DFgsC$udb&xjl)vxGN!PInN zhd|dp;8O#no6>Az6sob85Z4Cx9h7vlY=r=pPqpcrNg2+H2)_6pp( z?fJ_2-e21pWyDk4Qy2L!(vd@s!DzNr6OVzci+BOutwg0D%Ssna=qyr0RF$cvol%lP z7L_W1kxqF*gV}+HOM>`|Y04ekaP*3X2y-!-T=IjsBbgc30I2@Vd*Z_XGon5T``;xa zw7eeMno(EEP+=W7lL`jWb_pbHn^HJ*eE6t{U>0yw)UI;IBmZv$&;*A*20$?db29MQ z`OhC3$ss0sVRnnl3_@M8>Ep2e4KB#iN0p3Bspwg+F(WY@(=LhPN(}Nkv)@Q&3cvG# zir1S47u23|?=W)-=!S5^dC*dt4>;GJ<+<09F&4o5e}fKYn2@CQk_3v&)It^&%hlBP z;;dky`g^x3qe&|rC7iYe1w-o(O_Mf=&1(1YVzJcOrEn=a{x_ZfT+MjoqPDW!yeJuw zs-cfsMz<-8S~BSwTxpKXV0C?SCXXb%`?1RDb6M#BXa0GM20!TVWbh2u01wp zT+JuM+9L^-GOYm0#Oq#Esqy=l>wmNPp9RS%G5qLKEEzNjw8?mwR$NjsTB4R!INSY7 zP703jX4DVI)zIz#O-lPR$9W8Gq6mugLu6ijDLPj9e-;EBVvIzkatLk*agUfKCW%}P z?^l(uP}_^-pfQlkju(?y%?QF6!RP~`#tM7E`z@94^Q0(&vyI`cc|l{jNDLjaQfAC| z_@r$*)=ph;CH$Bo1V3)vCS*Vl9*=mh(mmx;Q} zoH{%Y>f(yq-i}b0r}lp`j*3VD^8O8tf*7%UP4hpZSB7B`AV#PXr^-S`$f#sGB2f<% zi`Y_!hJY&s7ftq0)Rg(3sQZ|%qcvNJRxAktc2E7?xcoL!)QJ99)~Lk{QYoK}ZPdZZ z7b6o$ML+8b;Tc`(#K)BR5%~9QA?Te>+0VHD)$qZJR4M5(yUyWV!w_LLmVl|_rTaBi zv9(SWCk#YY8d$lON{ywuu@s3&J*fjSB6Y+H-7roMT<(q>cMDRG>T|lPU+YE5TpXwt`0nT#NBj_O zu6DGknzCcrXwREIh!y?(VyB5HV?(phn`EOAvmlFV|LTWN zfvS@{#3qwz?8O<926JOT&=)^iwR6kg!bbVMGjUp!q>JKCDFSC$t?!9#KwodCs}#vm z(u7xND^@Cd%|;>j|BPdJ0^?BEn^n7kZR$$AWXAncGruvyLO_5zMHuFieZQP)XDu83rnA<*nuc zp>*QdR)*$kL|c3067=@DCyo>~xs?C2=|kl$64x=>aL>I=*3pJ81NyvU?Vy-QF+AAN zUgy+*h^*{ZrZnC2Z4pIC2T}%I(FP~#Ise=d^)hmrBv!h^t0>!D9r_t^RiD*W>Y%M+s@TW@Wo$y;Z(}n3! z;*R!UOiI?knAs%i8iA<3R0hoAxL=h-_9MFk+c;w|L4Kb@EkO=kN8s{!n38_?u zxJM*{C9?QUE>s*#_4(phX=e8RI9ciKi!cD{t;qM>xre|zT7J(PSH2m@B??bsE-;jy zl`j_wpWnIy_3KolB&o5AYV5@>iLJR4lNOth7SLg0R;K0nB$W`*c=TM`Si=AKmwf!^ zBk!v%N8x!;_lYINf?%zi_B8p}^KFPyiT^Nvwa{|VZZoQoHd1nWtBQ2 zWt^%4PHVD6Y+5vW3AiBZt5$_Qo}DpgmF}}2w}ajU#%oi*5*@a}Msxc*KFmIp%62=( z7){P01~%DnG}=x%!Y;7l?6^5xS@S=pAbGLU^Yz}X@m3B=U8@El`4qD2<8=m|7LtSk z4|H))$x;c}!x-g4Wj?ei7|OMijUM6hG2evOx*$O z{|CoFIKP$D!=L{52`p5gjvxuaB%1NO)$|^C1K;`XYL3zXzQw64stPIyJJaI2{?$AD zq=H(grCV0bK~aewh-h$a6CR^#P)+aV@XiSjzUQL+p8jX!neRNoywn_4Y`B3{oBtJf zc*H;*zsqw>pf;|_6R4>s8_C2IlTN0VZd`$J{`G<%i%XG}T~+r}asHyNb+~~0wi)AZ z7RT#F~TLPe_{Q&Z)H~nRtRl8x~I5^{2Z_uU=#EL@}#nec3)* zD=zT9orp~Pigpwefu@!|lD$Xp^c0?*iOo4A8^m|-Q6hH`(RwN;Ul8RM(erdXZS0Ru-Fx>;Y5B1$XqsC%ZoZ0y^WPA;J${$dnB+E? z|5w+Eb0TOm8-UN$pD3OOF1>n<#ij6csH*l*k5G-5QQtPjbVr~a&AaR_TF^_P=>TGm z10K1Yzk9F1hR%WWO4JW>mx2s~I2JJ$j6sb-9KmTcNMa5)cNINHU(fT;UJN*(Fzbur z$3OWu(8hXcrBfg+5e8lLogD`a56(MzggTj$Yc|ctZoLZ%D>u9)5@U0F{4S>{R&9QL zuzT%>X;UYWJ6XDMMcv8bdEwHl<5(O;HG%v|`IEYre}VUHQ{WAu>8G#OEtW+b2QVKK$+8rDs{&8Nkf_j>gYjN+z zZoLZ&i#9AooS#(nPUClZE=bgSfQP4L-5Sgr>w3NO!KGL4vA9-ZUFpIn?%N}YRA(oW zP9t=>`P=83-|D4h@nM|ganK?B)OQv&1z(+x7b8`;Tv_#V(UC{tkBp4L3WTh}6g8@f zVtg$Iqc{o0Bm{8;5)SIj#q(Z8@2NNQ^MAXB&)hu=5r0=+8q-M!?X>E(?69~9DL0UC z4=P<^nJUtYQis?r=<$cEQ@?4OpZ%pGFzPD~ynhKYm z&@}DF;wX`+93QX$v$^p5c9Cl@orY8!LZ`0)&RgC(z`|8WaGVpMLl_iQ4{O!emC`CH zgO2gJjT}1qc^c;VizG2tD_{j| zir|L21f5TnOE00zr{!4e<4nbbb241KFN1M9Poz3J(6wvPwXFy{U4brPIT?QY)h9@B z0<<4A2cG7wLP9}lyjtI$sGkTqv@{jv+_S}>sVdQId11M}OHnZDlPAG|8b5VR0-OXS z8UUvm%PIzQSF!u}6@2}Nivb5$EI`^%Qfz2OcymCewqjh(XHzzj!_PQa;8RK<$5|wa zaK2#K#x-?ctySaRtF?T~EwL-;0%=c{TjB>dWhCnLbs$mOfSbtL%joH!%iep1z4r<| z{d0jg1b?psIgz<_xW?aH(0!*~ShQi`q!7-R$v9nPk?IIG?X`ahf#ZsZ<-Kq1$2cbt z=Ok)}usMU~Bw`vG%|J8ZH{c)T5G7q2<#7czC&m{Km4rePG|`O5t2ll5dY*pp)%?OY z#VRPN;Ia(}`w$KzbeC!_jKvnuwz4yi{-AR*UDAhItlm}O7at$@EB;Q& z`r~ENx1;h0q_-k%DW9EmvEKi@6^m&+fesyj+@+A42?+t?0S1|%^(7yTRFry80)C=J zL?zHAC=e}Sbd4%}sVPYaj(|E~vr8E6{cVo!Il`yDvk%p0Ma1e>EL{ja$gW)&P9m$X z7?TwWxOC#uF_J}w5(=TX)pTcB@12yZF1z`v3Ulw(R(?J5`bDvH;|h|x8g(v3bT-QB zvV-t+Nx(WUHHR6^i%975aqA4AdYk{#K98sS8OZFNq?O`(&-uG7eXk>v>#k!g7luy) z&g7q$agH-=4^4|iyQAg2Q@sPVkCNe$vOBcqrRI<{6HzGN#<2Y}4sEII84TIa)9l=S z&YsiKjVmyw77NQwoIAH?b$v%TQ8$8JiF&>29f({-HSWL3?Az0kNOii%x^ARBAOddG zG}L_2DUt&R$PD+O-eRl)$B`l;Q;tvBz+z=YMm6F{Ig3s{L9vv4tRuf?N3n!S-aO*x z%riwHG(BDyM^k@lK;UxA3eY z&o(%(!N97`+kpFPPO4n(GgG~TefNE`*uoOHUrL8mk=qdmnt>IYZ=tt;Yf&9%&-lOu z`ua8oy$@8ih5qQ4W31SGOWpN|DxTSDaOtVuMphr9!A$?L*m4WP?25jd)01QVz0!Po zY9B?aAjdBwmwjTyCuzvLy28gXZ}}-so;=8K-$}@2QPY4lm}1Xhr7Gp45UMfVW05p6 zMW1Pe22P2b*~nLx`7VdUhv|%Al=ED_lOE=s= zL(}()h$Yn8cB&^)`TBb=f>U`ps@uUnPEJpflfyM9F|O66H)OZqNE7D*)wT^U_b86@ z!HT9^HK#}Y+sX}ZK`MGyH({KXDI2HHS0dHXfzkU@W928ZsnFZL~H4L44iC=&1Ab)&f z7&x6uVKy3$70_i{!RCFZclJmi0_1;Om_6;oCxQ2sYeZKDH*J>`Firq?v zyIHwuMUf?8LKdi&^^?A;H}XN6oe#3?=BulCw(p(v)>&y?R&IDpkQZ#KL?v$^nYe*v z8!sEDeNXI}_4Gf>q74gacK)fVd&}lN${J{y2FO}uf+eT0S51G@lWlF~B^WGxW zhSG|(f*g-Bl?Cm+G=J|PeH2OG(vumMH<_ zD4MWHG6C6EhWoDL%!?=3)s^8N9(-Cp)ZUMXDk>vsP-jqx8<42;9FytRD_&(iU)S<$ zF&FzTl{=?wq7}KFm7AClnewd&A7?5Rr~N!2Ioc(9qOaHHos`jYSjKM7FeB@5YK_qQ<%pk)6QaDTy1y?L~1x>i?X{Ad40q<>XT@q4pTqIp8&rR|k-hRw1i8 z!ZK7OtSOPWDjD6Nl>eRys$@rsSB-G_m7FhuaHjl^Th&HN^&NdQ0O0{skHAaPWjy{B&z0pHM;eN ze}$$TSR1^LbwGRIiuJD@X%>3UG;>65XT^VgRPX!F4~sr;FS|P;x*AYfwdpUZ-4!!2 zG?@=8`ac6pt|@dptVpn$Imd22MMY+AY-K@}B%|Ii@S>u*=-KP7t{18YI(WD7(&j6#jA#9;NcXn;X z-JUA`dm`GF3K=!Va6ODRw1)e6I)OGs{$l+*YjWu|4gY;gasCR-YcJU)=$h&u*Q{g$ z-P!=B6~3YEbkPB{NBXu1Fz3oS%wMpOnG0spxY(hgMLB)u%?u7z*EeQXp|Pc@z`vTN zJ$TMtSKV+iXDhID`y}(H!8lq~9aWL&yy=#mpi^Z|PV3gl_fp~5I3h=HKq^Ej*M2%x z#0@s)7oQeth!mP5B zj)}B2f1q9bhYMuorZ3bz7OF}DC<`{d@?5taJ-FqmQL8u|NK}YnSr$wZT7C?xvAsK0 z#_(Cai(Oy(Y|%itzkL+Fr#|X=$Mc3+#kL$aqFZL)Onu3nzHpzr4T;ybPv0K`aDl!m=x2Vo z*a31G{5Yw=@}!~VNGR5Mfj4Q1Bt$UYrPUTL7lF2>*_ z3{DeBaxOM^4ZSDU@zjG?@wdko00vhq9fb{1W7oGt`CO;DAm>!LWqr(n&s!tDw{gmLL+<(phdQ4ae;)R3(*xhy#jd6QuUUo5?HL3~?55{3SeSJxESDFLgp zJ}**X@7^rGK5>wr|6n(n!BZGk7RNf7k;G0TyWY$wbi`6dB4IqM)2M_dBx_Rohk`P? zmAvwKQXrdguyzUA!Pj%VyO;0(<5@o5@eq*n*=F$e(!n*mgGzKzNXe%T();ViCntRk&MNw1Kg%M=sh7U|Dk;R;+(5)qXUBV?XxI**Z$$e&L za-Y<`Ehi8V6$`Gg=j7GYn*PnRX*#jAA*7Hl(CwgZIBAKfhO44ZfV8@9y4ZyhB|BO) zS>?w}LD&kk`V+hy2Hjn-WYHl7w~Qdsyr&X+%AgZ2+4)XPvide*^ld!!*)Ygm+dHvP zqnNrktng!nYw?eHxTLj1%2){sCIuyzy{0e{d2R|Hy%ZZPiozP8}~cLX2#ojlA>qIu5X@0K@rgUk#1Qg`XB?uIrg z^&@wxA7r4r&}V(0h8tmO!QAg6U0s;t?PwZU>$l5dk|M5}kwnEUU+$_^IsWMVCz-Wy zKZ(R463zgi*r<}`802P*wMAvegeHd2knEev!fY;*0H+ZoX;8b8%$ao@e)27>`|Rbc z>S&6bT$sPzif?8*qc+z}DC$_{%3A*4yH^)8Zc|hFdMxVh>7uZUGV)R`G9RvqL|MIy zgn1+4tYXhs412y}{InMb=92BX8ZUcWP0!46?)3Xrkz-hJRYkDwB_C*Iux1jq4I}Sm z=8QJ>d?k@TX0Qa4eH&cmR4 z<$E>t_ZRPdFkcZtaa9?dU)w{=3|Y9_!WxBZHMCMjkIv9#vmQfdz$C1_shVOQeBnD! zSNAgQ0avj3W95e52N{2Sv;#Nlsonklb52&*e)oJOaO<^6(Z(z{c*deZT$7HR=nI}K z1vmoIJzB$?=v?cTkbBxjUat+AH48}tX;RUdCQ|Q?f?Z zKO+_oLDgUkI1Rp7U)F0ty;Wq+zLh->4$*RvVXHpPdKnf_O`)M4L^xJzB;sw9!CNBc z@cJ&=OB7Hm4tDnw3fHz<&hs86nW(<9%?+;scKMUxJ1-$A)tB#alfNqUA9s76PIakE z7p}O<%1s}w+MQ?hE^_*54&L`tWHnMyr#~%c`E#D8jc4Se?>>mr{EZ2}x@eQJ**`<1 zdJ<*5TiCzlo)T-Q|8wV8jsZtmw&?{Lq$bOpEZ)%S9@%oD4Qwi`_f)y{MstlPn?F?( z*&OcwGd;BRrBS=;?t6{__poyFHC0=?j583vQdNXbiB25I+-I-EG*94}={9WNJ!B3) z!jXrLgBq^-@CpV8-@ve4s)xS%{Zg7C3;u95Gi!VAMQ&9WO?UXjCcpR(+?R-qwy2a5 z?c8_Deo zms%#ZcU12b{U>{V>anMu2lDTBLGXBjMdyInrN5>XLM64>}H|6rX z@q2s2vQog-vPC6IS5^|NF*Gt3Kqs!a7S$XJTTilo)-JNS19)C5*-R4C0LB(}$3^D~ z!S8f98dw+uCt{_6>5(0KXqo;x-ke3?W>Z1LAb5T~14VS>1dFFe!49{O9lQc>*pf&L z^1uGRk1y(OZj~%ieTBC0;RJ(8r&~x=SgwK-aPx&G^s#-x)mTWXNGM!1P~;vBv`cES z%DflfRU|m`*40%0pna_HpRIJU-nw8u6u1EbVY%vpv@N%=|Gq#x^FA4K<+2sguYT*> z^1e;)t!PD8NyGGa!c-r}l^wiV4}9w>KVP_L;FKR(|3hEhU$eTjBTa75>GBQF*Gwud z=N0e21+`zS>e_wwGCgtM3uBpeN8pmpH&p-JbsK|+KcGh*I9}0kQA^4VFL!A4)vhbd zeDS*4TS@i~&i>#|J$1UD=nU}W=l28qkx|k*G|gOBbD2YSd-T8SBW|IN@+S`zYs_lh?In^oX%k4?$E#?p@Qqjc8Msr{pd6^ zo`0Uf!9CD-IXSP{590O;7F`4kCcnWI6PWW1U?b635{aGCF=xCHM9PeD|5EatL%WfG zjzQGlWg#Y58;M{NK`^?^#OSNY^!*NJetCv_lOC$OMZ~I$a0tU`d^h-M=xRrC-N5(T zF}j#lgiL9fd^#g6N~#j&Ra z7Jc4D@3^SiL7x^^OA9XBE-wGmmE`ohHQi<3z(1Ai^L~jn=I)im!jeoFI+mwE1Xxv# zn_9Q&fgkM3kAW+#R;1palLLbI)?~+2mQU~Cx1P+;W7WCRx3T+6FHo#?#5e?~tQAF3 z39Ut;BS@>XMdaIOfe%QUwD`8Al<(gdxg*f}tt_sM{e5-O!C8l`^C|HSpe% zW@q5q%ex2C0&PIIx*(l&(t)e48)4CF*PLa~RWES**mG##br_uk)+bHI3EGWBT8ke6 z8Qw_I=T*%?wHjn1{nF>eCf@+_rauJZfHZ*D2%4RT4!?%MV?!K%(DK^fC|}h5a;s!D zg>V?*-+(1Zdk1W74OHOQBYX&97Q(d?wIE5QU#Pqs->p{*?k}=TnHt=CN%I<6eseR) z36>vuZyg#~>Q+{rxqKV@?)ywtZ$rk9_NxlD2nS}px9YJiPYGYE%#v?}_H=(04}IkQ1SBu0^GlKXMv3%iLO0a7Wh~vef`ncL=AHGv z7g@OB)#b8qRn$Ju4%}Hpz$1a)krz91LAGGiD@SH}sMta~VNuFaNLFRb_&|C%WU&Uo2EI{S5^c=F0NvW%ZtXdt3JIS64M& z8>ze0Oqm^?6)jjtLyDAk67G?}kSa2KC~3rxY$xwpOBa%tC~fO~nTE8h;v%>%fEIdr zIxVzz3+-)+bf|Bca=}G9I-nzLBJzqMww^l7(+|Hu=F}b%EJAZL!7*4-j1#diNywT7 zwZ5BN1dJ(l8cg*0jDNoB=$7XEpNx`hQgR4hZXwyh-(vWvlJzYAaOclZ-76vh^d zLfbrq6tLcf_I1MZ?ZUOS)G&;<@^{2^R-H(v0=izSTQ3`NtJUh>gZJVjwoSPF(oVMQ z=BsMZUHaQvo@+qbs4!d_P5(Oo$eXW;86DY&D>o3 z4#6sOqmA|cY7!`}B>X`{YtE$?ic5~Uz^N+>(7N@VtUOlIrYmo^)#THQs-Qc~)zwku zu_{S+RqZGGSs9|PrPm+j|9+fQDsAX)75tbs|GMeO5nMA(TG9apL&Wz!b#(ZoD7{{A z+XcF8q1kkID{XCrKFtnXO^3>#U4)9veu1fZy?nZ59|H})L545EdNV)_jZpaii| zn!iW2k+gVIy{RqGkU|wn6a*Pi!7A9GZVrM;c$lQ(WgAet0-H5t&kS>V#}LpH;w|vw)7RVdVJz3`m`rf2Ra+=h*HQA2I*Jsv3NEMow%|%0Y0YlE zl6+z{y7z*KYvSb>4M#T4or9I)v_kc5U|W^B=_ZCn8y1q#B{;GI zF>8tlx0&$O$G?|a`kRLFJ2k@Ux|%FC00Wu5On20pOAo>T^YgLq)ZT9f2YYB}sXU+F zMC!QvOV1b0d7}}@3Jj0Ycq$o%YL)zwkHL}>OSS}Y-i4rM3CWVWov0hc`ni#cbp-q4 zx;y<15a|w}(>3heDWum!YO9i3tEAgteOF+S@}t=c{<}zwIy*+_Bl$#W(X7J^v_3`O zk+s<2i&0JBG+8uAzL(!HXG7CdwhaT}9gAtqVKsrHOVG^g z7(SX~-=N2hAA5+K|L!O$ES(6uZ*lJ4aW`MQ1-9N2nh7N^ztwb~obNQdz3BU&SRHj7>tbbF zKLTv6?0Zqg{HR4bm`mFTQ{=1xxi;mCgSK}e9c~bJ=n6gw>d<^*m~ftT0bIp(6Lfcl zbW2GUawg^Bx`A9+^dVe}mc;uAJ22evniI6X`Wc+WZftIdTo$}sph7Hy8b2N>-1#b{ znhjIRqVNOWO}I}vuta%aJ^y}<3G}7ZL2)n%i_?@tni3!@(9G{JboT$_xfkEUmpd;8 z1XnC~-lW{%>W}9IJ2rM8bYXlw6&dL>j~sy#nU*z!ca1r*isTC@BcET^a#IJlUWlp8 z>OG2E&%Y?e1%WZoP?5MjO|#V#5ur-1I3{ZB`o0KHy>C8&jfa zKi<96*57U#H(~Tx@Dt0{I!4y--K^a7QC4k!&jc24<*{n>d(MM}Q~mqSMEZ@XFrVJO z5|`&x*0I=tkpI0aI9kgblt1#RhEy>wA_Yx1-_y2c2ePyqc{50R7w|kn8xk0iBu(3R zo3<=;*>F={z?>ve-mIq5DI)7!q`jk{h2ayuPH65BK9m~Z;IsSr#`YHwJp{HHFPi|z z-~=-JDutXeMkuI>oC6{y;y(jxOUz;cfii^kGpIO-0jI%YP&{pd+$*qN69Z=(IPe=` z{hj~G3wnsv4Ab5&>9i~9G;+-~$ZFpVXDE}pc?2V$Dh2dBTHEHZeQ09Vnp(H+6YTD+3)y)+ zVZ!ZX0#`kSe`s`mVaq{flSjgc*C=? zxg|&rOw!jY5KM4Lku+IU{$NT-RPZb{utq7q1u8V(sTKt4F&5OI>L6lBG=bwlE@QC6 zOR(A3(|5+>H#;3}|LQ}0bK`y>3vlEJ^7!NE>QrD+I_?LeE8_3AP%W=~o^N$h*wWmN z=E-!&L|5;1bn6v*$1kSf<=sCC_cVnArfjc6o$sG^_chh`F)uZT*)u+HPLnxTb1$_# zpL)1&#aVbxpUR>Q3xSW9os`W4NmbI^$%TN4y7d4Oa#7vtQ!Xa2);bna2T95FRz#-C z?-LOl;X~FPhfIY7>pFbV&Tc<{AFUwA3A6=$YmtVM8bMsK&3_IB2VTk-0Y%mDa%^q^l50dQh~ry&M70pq9ax6s9Ar?j>MN~dLUnZCrKk8- zs!#&K7_eC1;}*nq2}(kQtTh;x;SIfsz9WX`9)$PwczpB2`&m!+$_Ej)LsuuX?+gR; z{Z>-OG9@Ly7rQ=-^9m7Z2qO{+j(hL*bnAua>3^0vEtC7s#&qi?uABCQW@-J;wL7d{ zn9BQDcJoyv6Q8P^1(#@3tGeu*jIAM>DoD>%N~#P` zv-jR#j(N_C&40qQN>V+AeP^=!|JguOYl3x*SfFZbfW^{MZiTx(-I6?lrRj`9*I1!$ zp;aQxf+$vm&L;F{|Lj^AdcMJg)dGxITZSPGgemAM4#?bZW0o$g`w zraLAv9%UT&iN0oWK-FCL`NX?-*IxRo3FOYIFVX z897}QqBI_H?x^7CFu zcnU;H@k5-XyX2&f(G3@cxa3YXq>j&|?}52o_mKr0-Fqd2r+x=-__ZkW5y_HF9wOPW zm-!1%^7c1mc=%yRVdy>{7-S+kQUYuRNrlyG_tm<01{Jsjv~e|h(c{ScU6}R*XjeNP ze?6y%A78SMvwNPyX4Zl?6Ps!AV~!F5bBYRdqJbGts8+PCX5>9;K5zCs0?7a;Pzttr zl~A!#$VKf0vH~F?G@uSx;~<`InaUk)X7_*0;n?mUqxu^}JPGVy;D&--{@d#y2xKdp z(j&}f9Y$-7`gDAfC8M^I37Tn(&9!4bR{1`)q&TTZ`L*nPt5SrsuJGL+)f1`dwv%eA z+U%HetNT`+OBqLRY#b6*Tl`Wvi%1j~ic7Dywo$%ah|aD9 zXW7R7E!!roj-_I<749w{`&$L2@;nhzKd{*?(wK@)iX#nFMZx3`(aekAxQy&0*OEDQ zIktZ-o~{9%ha*QxHay*q6q7OovrH2Lc62OkEPRaNsx2!G-xmA z8sKm%y7+Mnt$7oQ@;~l7$xCydC71mTc6cc^Gt-~z4Uq7Enmm6fBs-Z(gM#F(W4`9G z6%Asyj8E(WA=79QSdHe$2=B)Mr$MpV1U9n_n`uI`Gw^V@veRMtLoaaPjf1`&&ILEv z5#UzL_{N~*BfeJ9bQn#^IpMsmrsq{j;Ok_%_r@x}n(e=Z8TRpWI*2A@?v$3dV$(lj zg7Cg?>Q7Ls(TBT=e%Fl0Yp<*v7n*S%jP zoc}f{eQhc%C5twEuj*ZczT2%)*YD z&%ggTU|D+D_co<=LigHyz)m7cb5r>!a97i5WNj<@u6F1J-5&TN+u9M*cwO63wg<62 zzyHQQo;vtELytVeP-ZR0TMV8-ZJ^NP0M_5>?{EDN;+3Y*8Wkv6`5!s>!R9uw@>xR| zIwnz9uY!8MManqf1lRFY{Bx56xp}C)l3b6&@y8lz8Tv7s^=a;vp@1rD!5WokXHmCY zHK|_w?VK)G!wW z&ske9C;nRPbDx*Gvm#Qx?B=U*oDX8CO^(2~5Wjp}dex4_<#zlQ-t)x9Th%+tx{|AH zzmc|EnnG)`NmQOBNtqnAs)CFnE3{J^_~W~lGVtUT3?6?y>Rp4)U4q($Xl^dX86eU4 zEX}hXVA-WztZ8|M&%gf+B3V=eK~8)@PCB8}Hwq<2qjl-EXnH&9wuhg%1d;BlsnD<# z;2o>8eEW}H;>>TJBHME%HoFALE+l7!WHR`&0ldI{CdE`@st8qqzy)#)VQf^ex3I9C zut0CDCGXxdCW!SCKbYPj2gab;1z39x^foZ~{7nAi&u6mY>rb%%k53m$*D|E36JIC{ zpj(T)x}8W6URC}nwFWu;LLyZTb6PI1k;(j^iotsl+%=%*zL?|xr$jE?ja{njv#o^yo3|cbFz9D`^O>e7m`b_ zrnWH&V_@DIHA&8nM z>b;C?|K*Um8aw<-2Kt(4ZdQzQfJEXkn&$qD`EA?zmrp;(Lh0kne``=Rbap~2pS=9~~6zDXsJl2kv3q99^X?c;{IyBIj}C_}kr*xXEVG84xG<7i$% z+=w7k9BiI1DbHi1V4o`5MHpDDqIuPQ$#eflV2BE1$wdUm0W}8oW`VB7J3W`&z#L?_ zf!}`NG2Xhm2Umti5>`JzuC0*QN4it4x`7r#3d~OOvFee`&8}b1SqRMtZTMOk+&}|Nk_z}XGPa`vqI==E^lE7vqqU29sW}s@$xWkLKqp#9 z9cP2o7&CKW{?Z`NY?tW*+WlO3Kw5Ti+Vs+;?X-Imh6sV_Dx9y8fOG>S*|EEczwBz| z*Z+PQ#}B=Zq2BB8vX_F+#nBn4Bxq^Mf!#|o`4BT^KfvZgSdzrqf8u&pyqL9Y}X4nsV1`nzgz%V6stmE{M%*|S4sJv4%K+|Z?JOHT5{gEM+75BSKHL&t{8iQ$jO1KGN~7@&Yxq|=9?Jw zep>Ww!n7z>H%-7oa8t!Q#%kGhs3yg{)QMao>cd}~p z!4c0V%(a(HT+T#AJjZL7wYv4{X~jIcmtHMxW2|=3+&mE? zH8P*xWYlq7PFW<@34rVR)`?E{|7Y*b#0okqV{Uam8De6kP!&XX(am; zLFR6jtlrCYJMZT!e{cv9r{fr^Axu2(W-OY&V8gUpdw%la0WePKhNtuz5s5cKbmzI!9vw^nB*GdDZO8ho&a=P-IaipKeEcA=4C(AddO!v#+MHvd61|FkkU}HlG=j1W zEf2%l?j~&1rAX`5o`wZX@6F-+FJ{3I`7dNM|AiG9Sg~L`?mL)>eqq*$Wqjh;MKX6^ zqBCgD5||5qj@~;bhAsvr7jnIg{1Pjc{L-{*t=u~8cQ4A~WR~l5DaPeXoz_b}GWv5& zaCri$O7#`I@P&Qn*)&{uN>8IVPqR9iPi(v8O-S%>7xcFxdw@?a%-C3@v|gj1-b;6k zk^)tZZz>|Cl1tO{^q{$1sDQZFMe`v#LXJ`_T@V8rahjH{U`GRf?JLW8>+fyk_@S$r z7`cvU>;|IBb--58<)B%z0kpR(*b|5h)3#)g!9-1B995;+2Uadz^~MHkAwkY}V~KXP6WbulSDtDoiIMSv){ z*oKsMF4)+ZZCp5G?uEZT3weyQGf}Z8UYg|~mqP{z-3xtv?)PpVLZ+5t=s|A^vE9Q( zEe`YoVeF}=K;%EXjsI(K9S6RC9cK=`%86-~uR_?2F>6rU?!0xYkilZ~2toFKmMz=M z#_jje_vZb4^v6%|rJqU@MQK)LK0vDGku%pz8iEXi6zNwqG(g1KrO$C@?LCx7ub>ij zqbwsbf)OD=P|*Z@U9$9^Hn|>&aC^Lco(}9{G0|j)jrCmtf%{X>N(nyGXTTb;fs;pw zs!J%JS;67qRea)utNF^-hfqC=NF;*l0NV5WD2HM9ZlDj?gA~D(ilPwGOJ0j!EW=-P z1+)NA@}gwZyY&`7t+&u1VLsnqw)fQ4C%qJ*`g@!i|HC;;2UMf~K{j(a0IB(bsKo#| z71_`CPTXzv}cD{*)_=3J@@g& z|N0y-!AD~NRWwaN0&@dW)7(euRJiLZ<&#=$C%CRfkm6ubShmWr8zoqFgzH~*FL&Ry zo$~k&h;~t(%#zK34XjfQk7=RB22$F1__dcsQF}%+RgK?tN|`jjnQtdzfJz zaNa|jluhORs4Nulf}c`netap@ddZ+zi1gk(zW?yw9%S3keB>qbU$flG!O#8qy#D5e zFFee)mzb5h*!0IjMYDp}i>V`<4~VoZo7bXkxntJ%FPF4l90xyt2U~yUvlrD_w=f%x zxr^XlT$kQ^7hEo7p<rt~3$tLqiUh6vGOt zhj`^L-OI$G9YkX*iKey?B#XWCyu0iiJ{lP^pMZ0TG?N${*EFy+=>Uvn5{$=(K^DYV zv@BFAU0`=nnOa8l;!;X~x0-AJ`?q<+-#yJ;?;91cs^|g1>;~-{gpnMwiX70Z4ypo0 zkCaO}O_UOH1L74FUYfLC91D@&oA38e+RxJ&?BUX<_+H1s^Z0|!e9WJwGq~ZBAG6iZ zQq_-h`12RG;8gX*f`J?-C(#6G{_Va+ESA25O7(X=nEij}HTg74L)M?q<&oB_`+S?H zGuX^alm5N~_}HvEQR%q2F15p#;!o4RcN)-6>Dc|AVpq6IHfcF&}c90 z712{r3BY;s`9IKF}$`?hh znZoCL6_wn8s7MiI0CDcsLg_YPun!m%=(FVWuCt&YO?bjfoz{!vV$*vU^8Lp?f1J%f z{kvo{@4Q5l;zu|${udWz+j8vl$60^NFVGqM#U)zg?m(kIzUcaq@u_E7ky)VYXz!hc zG5cd=fs3UZ@7qE$f|pZTuh}?jH-$^gOwBKCeDPg+AG>Tp)FteMoB1`jEiVBW9{VRzm84lF!;G~k|xm(c&G>v`_ct(-k_J>#c;fU@mHWF2HW zF_|m`LI6Y-Yz2%eQayv(X9?PdShDg?HgEY3*T3yqepaUVfG38EC`Aa#lk-hpMT!QF z1Unc~*xg**GZkhwHcnAj8ZNbqQ>zzq^;CrdQgl`;Xiap<6@vY2?ik%0A0eB07-J7X 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 IM6N<$f(v*i$N&HU literal 0 HcmV?d00001 diff --git a/docs/api-reference/data/index.rst b/docs/api-reference/data/index.rst new file mode 100644 index 00000000..74e2ce05 --- /dev/null +++ b/docs/api-reference/data/index.rst @@ -0,0 +1,11 @@ +.. _data: + +Data (`data`) +============= +Module containing functions and classes holding NectarCAM data structure, and interaction with DIRAC. + +Reference/API +============= +.. automodule:: nectarchain.data + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/api-reference/display/index.rst b/docs/api-reference/display/index.rst new file mode 100644 index 00000000..2420ad5e --- /dev/null +++ b/docs/api-reference/display/index.rst @@ -0,0 +1,10 @@ +.. _display: + +Display (`display`) +=================== + +Reference/API +============= +.. automodule:: nectarchain.display + :members: + :undoc-members: diff --git a/docs/api-reference/dqm/index.rst b/docs/api-reference/dqm/index.rst new file mode 100644 index 00000000..ac61a127 --- /dev/null +++ b/docs/api-reference/dqm/index.rst @@ -0,0 +1,12 @@ +.. _dqm: + +Data Quality Monitoring (`dqm`) +=============================== + +Module for the NectarCAM data quality monitoring. + +Reference/API +============= +.. automodule:: nectarchain.dqm + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/api-reference/index.rst b/docs/api-reference/index.rst new file mode 100644 index 00000000..2303e42c --- /dev/null +++ b/docs/api-reference/index.rst @@ -0,0 +1,8 @@ +API Docs +======== + +.. toctree:: + :maxdepth: 1 + :glob: + + */index diff --git a/docs/api-reference/tools/index.rst b/docs/api-reference/tools/index.rst new file mode 100644 index 00000000..0cf536e7 --- /dev/null +++ b/docs/api-reference/tools/index.rst @@ -0,0 +1,12 @@ +.. _tools: + +Tools (`tools`) +=============== + +Tools submodule. + +Reference/API +============= +.. automodule:: nectarchain.tools + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/api-reference/utils/index.rst b/docs/api-reference/utils/index.rst new file mode 100644 index 00000000..d115fbce --- /dev/null +++ b/docs/api-reference/utils/index.rst @@ -0,0 +1,12 @@ +.. _utils: + +Utilities (`utils`) +=================== + +Utilities submodule. + +Reference/API +============= +.. automodule:: nectarchain.utils + :members: + :undoc-members: \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..486b563a --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,138 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information +import datetime +import sys +from pathlib import Path + +import nectarchain + +if sys.version_info < (3, 11): + import tomli as tomllib +else: + import tomllib + +pyproject_path = Path(__file__).parent.parent / "pyproject.toml" +pyproject = tomllib.loads(pyproject_path.read_text()) + +project = pyproject["project"]["name"] +author = pyproject["project"]["authors"][0]["name"] +copyright = "{}. Last updated {}".format( + author, datetime.datetime.now().strftime("%d %b %Y %H:%M") +) +python_requires = pyproject["project"]["requires-python"] + +# make some variables available to each page +rst_epilog = f""" +.. |python_requires| replace:: {python_requires} +""" + +version = nectarchain.__version__ +# The full version, including alpha/beta/rc tags. +release = version + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.githubpages", + "sphinx.ext.intersphinx", + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.viewcode", + "sphinx_automodapi.automodapi", + "sphinx_automodapi.smart_resolver", + "numpydoc", +] + +numpydoc_show_class_members = False +autosummary_generate = True + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +templates_path = [] # ["_templates"] + +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# intersphinx allows referencing other packages sphinx docs +intersphinx_mapping = { + "python": ("https://docs.python.org/3.9", None), + "astropy": ("https://docs.astropy.org/en/latest/", None), + "ctapipe": ("https://ctapipe.readthedocs.io/en/v0.19.3/", None), + "matplotlib": ("https://matplotlib.org/", None), + "traitlets": ("https://traitlets.readthedocs.io/en/stable/", None), +} + +# These links are ignored in the checks, necessary due to broken intersphinx for these +nitpick_ignore = [ + ("py:obj", "enum.auto"), + ("py:obj", "enum.IntFlag"), + ("py:obj", "enum.unique"), + # coming from inherited traitlets docs + ("py:class", "t.Union"), + ("py:class", "t.Dict"), + ("py:class", "t.Tuple"), + ("py:class", "t.List"), + ("py:class", "t.Any"), + ("py:class", "t.Type"), + ("py:class", "Config"), + ("py:class", "Unicode"), + ("py:class", "StrDict"), + ("py:class", "ClassesType"), +] + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = "pydata_sphinx_theme" +# html_theme = "alabaster" + +# Output file base name for HTML help builder. +htmlhelp_basename = f"{project}doc" + +html_logo = "_static/nectarcam.png" + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] +html_context = { + "default_mode": "light", + "github_user": "cta-observatory", + "github_repo": f"{project}", + "github_version": "main", + "doc_path": "docs", +} +html_file_suffix = ".html" + +html_theme_options = { + "navigation_with_keys": False, + "github_url": f"https://github.com/cta-observatory/{project}", + "navbar_start": ["navbar-logo", "version-switcher"], + "announcement": """ +

nectarchain is not stable yet, so expect large and rapid + changes to structure and functionality as we explore various + design choices before the 1.0 release.

+ """, +} + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +# html_title = f"{project} v{release}" diff --git a/docs/developer-guide/getting-started.rst b/docs/developer-guide/getting-started.rst new file mode 100644 index 00000000..88b17ebb --- /dev/null +++ b/docs/developer-guide/getting-started.rst @@ -0,0 +1,19 @@ +.. _getting_started_dev: + +Getting Started For Developers +============================== + +Building the documentation +-------------------------- + +To locally build the documentation, optional dependencies should be installed with: + +.. code-block:: + + $ pip install -e ".[docs]" + +The documentation can then be compiled with: + +.. code-block:: + + $ make -C docs html \ No newline at end of file diff --git a/docs/developer-guide/index.rst b/docs/developer-guide/index.rst new file mode 100644 index 00000000..42c13e8d --- /dev/null +++ b/docs/developer-guide/index.rst @@ -0,0 +1,9 @@ +.. _developer-guide: + +Developer Guide +=============== + +.. toctree:: + :maxdepth: 2 + + getting-started diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..82d05db6 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,25 @@ +.. _nectarchain: + +Welcome to nectarchain's documentation! +======================================= + +.. currentmodule:: nectarchain + +**version**: |version| **Date**: |today| + +.. _nectarchain_docs: + +.. toctree:: + :maxdepth: 1 + :hidden: + + developer-guide/index + api-reference/index + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` \ No newline at end of file diff --git a/environment.yml b/environment.yml index f99de826..3e01867c 100644 --- a/environment.yml +++ b/environment.yml @@ -14,6 +14,9 @@ dependencies: - pip - pandas - scipy=1.11 + - sphinx + - sphinx-automodapi + - pydata-sphinx-theme - pip: - zeo - zodb diff --git a/pyproject.toml b/pyproject.toml index f4d196ad..cb56c3b8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta" name = "nectarchain" description = "Analysis chain for the CTA MSTN NectarCAM prototype" readme = "README.md" -authors = [{name = "NectarCAM collaboration"}] +authors = [{name = "CTAO NectarCAM collaboration"}] license = {text = "BSD-3-Clause"} classifiers = [ "Development Status :: 3 - Alpha", @@ -46,9 +46,17 @@ dev = [ "setuptools_scm", ] +docs = [ + "sphinx", + "sphinx-automodapi", + "pydata_sphinx_theme", + "numpydoc", + "tomli; python_version < '3.11'" +] + # we can use self-references to simplify all all = [ - "nectarchain[test,dev]", + "nectarchain[test,docs,dev]", ] [tool.setuptools.packages.find] diff --git a/src/nectarchain/data/container/core.py b/src/nectarchain/data/container/core.py index 87e41c0d..0f7aa4e7 100644 --- a/src/nectarchain/data/container/core.py +++ b/src/nectarchain/data/container/core.py @@ -105,6 +105,7 @@ def from_hdf5(cls, path): class ArrayDataContainer(NectarCAMContainer): """ A container that holds information about waveforms from a specific run. + Attributes: run_number (int): The run number associated with the waveforms. nevents (int): The number of events. diff --git a/src/nectarchain/data/container/pedestalContainer.py b/src/nectarchain/data/container/pedestalContainer.py index 5a1c1b2f..77959b95 100644 --- a/src/nectarchain/data/container/pedestalContainer.py +++ b/src/nectarchain/data/container/pedestalContainer.py @@ -1,28 +1,29 @@ import logging - -logging.basicConfig(format="%(asctime)s %(name)s %(levelname)s %(message)s") -log = logging.getLogger(__name__) -log.handlers = logging.getLogger("__main__").handlers +from enum import IntFlag, auto, unique import numpy as np from ctapipe.containers import Field from .core import NectarCAMContainer -from enum import IntFlag, auto, unique +logging.basicConfig(format="%(asctime)s %(name)s %(levelname)s %(message)s") +log = logging.getLogger(__name__) +log.handlers = logging.getLogger("__main__").handlers @unique class PedestalFlagBits(IntFlag): - ''' + """ Define the bits corresponding to pedestal-related flags + NEVENTS: Number of events below the acceptable minimum value MEAN_PEDESTAL: Mean pedestal outside acceptable range - STD_SAMPLE: Pedestal standard deviation for all samples in channel/pixel below the - minimum acceptable value + STD_SAMPLE: Pedestal standard deviation for all samples in channel/pixel below + the minimum acceptable value STD_PIXEL: Pedestal standard deviation in a channel/pixel above the maximum - acceptable value - ''' + acceptable value + """ + NEVENTS = auto() MEAN_PEDESTAL = auto() STD_SAMPLE = auto() @@ -35,14 +36,17 @@ class NectarCAMPedestalContainer(NectarCAMContainer): Fields: nsamples (int): The number of samples in the waveforms. - nevents (np.ndarray): The number of events used to estimate the pedestals for each pixel. + nevents (np.ndarray): The number of events used to estimate the pedestals for + each pixel. pixels_id (np.ndarray): An array of pixel IDs. ucts_timestamp_min (int): The minimum of the input events UCTS timestamps. ucts_timestamp_max (int): The maximum of the input events UCTS timestamps. pedestal_mean_hg (np.ndarray): An array of high gain mean pedestals. pedestal_mean_lg (np.ndarray): An array of low gain mean pedestals. - pedestal_std_hg (np.ndarray): An array of standard deviations of high gain pedestals. - pedestal_std_lg (np.ndarray): An array of standard deviations of low gain pedestals. + pedestal_std_hg (np.ndarray): An array of standard deviations of high gain + pedestals. + pedestal_std_lg (np.ndarray): An array of standard deviations of low gain + pedestals. """ nsamples = Field( @@ -51,7 +55,9 @@ class NectarCAMPedestalContainer(NectarCAMContainer): ) nevents = Field( - type=np.ndarray, dtype=np.float64, ndim=1, + type=np.ndarray, + dtype=np.float64, + ndim=1, description="number of events used to estimate the pedestals for each pixel", ) @@ -68,7 +74,10 @@ class NectarCAMPedestalContainer(NectarCAMContainer): ) pedestal_mean_hg = Field( - type=np.ndarray, dtype=np.float64, ndim=2, description="high gain mean pedestals" + type=np.ndarray, + dtype=np.float64, + ndim=2, + description="high gain mean pedestals", ) pedestal_mean_lg = Field( @@ -76,17 +85,23 @@ class NectarCAMPedestalContainer(NectarCAMContainer): ) pedestal_std_hg = Field( - type=np.ndarray, dtype=np.float64, ndim=2, - description="high gain pedestals standard deviations" + type=np.ndarray, + dtype=np.float64, + ndim=2, + description="high gain pedestals standard deviations", ) pedestal_std_lg = Field( - type=np.ndarray, dtype=np.float64, ndim=2, - description="low gain pedestals standard deviations" + type=np.ndarray, + dtype=np.float64, + ndim=2, + description="low gain pedestals standard deviations", ) pixel_mask = Field( - type=np.ndarray, dtype=np.int8, ndim=2, + type=np.ndarray, + dtype=np.int8, + ndim=2, description="Flag that identifies bad pixels. The flag is a binary mask. \ The meaning of the mask bits is defined in the class\ - ~nectarchain.data.container.PedestalFlagBits" + ~nectarchain.data.container.PedestalFlagBits", ) diff --git a/src/nectarchain/data/management.py b/src/nectarchain/data/management.py index a8ebf5d5..e438c292 100644 --- a/src/nectarchain/data/management.py +++ b/src/nectarchain/data/management.py @@ -33,14 +33,14 @@ class DataManagement: @staticmethod def findrun(run_number: int, search_on_GRID=True) -> Tuple[Path, List[Path]]: - """method to find in NECTARCAMDATA the list of *.fits.fz files associated to + """method to find in NECTARCAMDATA the list of `*.fits.fz` files associated to run_number Args: run_number (int): the run number Returns: - (PosixPath,list): the path list of *fits.fz files + (PosixPath,list): the path list of `*fits.fz` files """ basepath = f"{os.environ['NECTARCAMDATA']}/runs/" list = glob.glob( @@ -108,16 +108,14 @@ def get_GRID_location( username=None, password=None, ): - """method to get run location on GRID from Elog (work in progress!) + """ + Method to get run location on GRID from Elog (work in progress!) Args: run_number (int): run number - output_lfns (bool, optional): if True, return lfns path of fits.gz files, - else return parent directory of run location. Defaults to True. - basepath (str) : the path on GRID where nectarCAM data are stored. - Default to /vo.cta.in2p3.fr/nectarcam/. - fromElog (bool,optionnl): To force to use the method which read the Elog. - Default to False. To use the method with DIRAC API. + output_lfns (bool, optional): if True, return lfns path of fits.gz files, else return parent directory of run location. Defaults to True. + basepath (str) : the path on GRID where nectarCAM data are stored. Default to /vo.cta.in2p3.fr/nectarcam/. + fromElog (bool,optional): To force to use the method which read the Elog. Default to False. To use the method with DIRAC API. username (_type_, optional): username for Elog login. Defaults to None. password (_type_, optional): password for Elog login. Defaults to None. diff --git a/src/nectarchain/makers/component/PedestalComponent.py b/src/nectarchain/makers/component/PedestalComponent.py index 36c63e0c..d01bad7e 100644 --- a/src/nectarchain/makers/component/PedestalComponent.py +++ b/src/nectarchain/makers/component/PedestalComponent.py @@ -26,7 +26,7 @@ class PedestalEstimationComponent(NectarCAMComponent): """ Component that computes calibration pedestal coefficients from raw data. - Waveforms can be filtered based on time, stanndard deviation of the waveforms + Waveforms can be filtered based on time, standard deviation of the waveforms or charge distribution within the sample. Use the `events_per_slice' parameter of `NectarCAMComponent' to reduce memory load. @@ -38,7 +38,7 @@ class PedestalEstimationComponent(NectarCAMComponent): Maximum UCTS timestamp for events used in pedestal estimation filter_method : str The waveforms filter method to be used. - Inplemented methods: WaveformsStdFilter (standard deviation of waveforms), + Implemented methods: WaveformsStdFilter (standard deviation of waveforms), ChargeDistributionFilter (charge distribution). wfs_std_threshold : float Threshold of waveforms standard deviation in ADC counts above which a @@ -75,9 +75,9 @@ class PedestalEstimationComponent(NectarCAMComponent): filter_method = Unicode( None, - help="The waveforms filter method to be used.\n" - "Inplemented methods: WaveformsStdFilter (standard deviation of waveforms),\n" - " ChargeDistributionFilter (charge distribution).", + help="""The waveforms filter method to be used. +Implemented methods: WaveformsStdFilter (standard deviation of waveforms), + ChargeDistributionFilter (charge distribution).""", read_only=False, allow_none=True, ).tag(config=True) @@ -106,12 +106,12 @@ class PedestalEstimationComponent(NectarCAMComponent): ).tag(config=True) pixel_mask_mean_min = Float( - 200., + 200.0, help="Minimum value of pedestal mean below which the pixel is flagged as bad", ).tag(config=True) pixel_mask_mean_max = Float( - 300., + 300.0, help="Maximum value of pedestal mean above which the pixel is flagged as bad", ).tag(config=True) @@ -159,8 +159,8 @@ def __init__(self, subarray, config=None, parent=None, *args, **kwargs): Maximum UCTS timestamp for events used in pedestal estimation filter_method : str The waveforms filter method to be used. - Inplemented methods: WaveformsStdFilter (standard deviation of waveforms), - ChargeDistributionFilter (charge distribution). + Implemented methods: WaveformsStdFilter (standard deviation of + waveforms), ChargeDistributionFilter (charge distribution). wfs_std_threshold : float Threshold of waveforms standard deviation in ADC counts above which a waveform is excluded from pedestal computation. @@ -213,7 +213,7 @@ def calculate_stats(waveformsContainers, wfs_mask, statistics): Names of the statistics (numpy.ma attributes) to compute Returns - ---------- + ------- ped_stats : `dict` A dictionary containing 3D (n_chan,n_pixels,n_samples) arrays for each statistic. @@ -254,18 +254,19 @@ def flag_bad_pixels(self, ped_stats, nevents): for each pixel Returns + ------- pixel_mask : `np.ndarray` An array that contains the binary mask of shape (nchannels,npixels) to flag bad pixels - ---------- """ # Initialize mask to False (all pixels are good) - pixel_mask = np.int8(np.zeros(np.shape(ped_stats['mean'])[:2])) + pixel_mask = np.int8(np.zeros(np.shape(ped_stats["mean"])[:2])) # Flag on number of events log.info( - f"Flag pixels with number of events below the acceptable minimum value {self.pixel_mask_nevents_min}") + f"Flag pixels with number of events below the acceptable minimum value {self.pixel_mask_nevents_min}" + ) flag_nevents = np.int8(nevents < self.pixel_mask_nevents_min) # Bitwise OR pixel_mask = pixel_mask | flag_nevents[np.newaxis, :] * PedestalFlagBits.NEVENTS @@ -273,29 +274,37 @@ def flag_bad_pixels(self, ped_stats, nevents): # Flag on mean pedestal value # Average over all samples for each channel/pixel log.info( - f"Flag pixels with mean pedestal outside acceptable range {self.pixel_mask_mean_min}-{self.pixel_mask_mean_max}") - ped_mean = np.mean(ped_stats['mean'], axis=2) + f"Flag pixels with mean pedestal outside acceptable range {self.pixel_mask_mean_min}-{self.pixel_mask_mean_max}" + ) + ped_mean = np.mean(ped_stats["mean"], axis=2) # Apply thresholds - flag_mean = np.int8(np.logical_or(ped_mean < self.pixel_mask_mean_min, - ped_mean > self.pixel_mask_mean_max)) + flag_mean = np.int8( + np.logical_or( + ped_mean < self.pixel_mask_mean_min, ped_mean > self.pixel_mask_mean_max + ) + ) # Bitwise OR pixel_mask = pixel_mask | flag_mean * PedestalFlagBits.MEAN_PEDESTAL # Flag on standard deviation per sample # all samples in channel/pixel below threshold log.info( - f"Flag pixels with pedestal standard deviation for all samples in channel/pixel below the minimum acceptable value {self.pixel_mask_std_sample_min}") - flag_sample_std = np.int8(np.all(ped_stats['std'] < self.pixel_mask_std_sample_min, - axis=2)) + f"Flag pixels with pedestal standard deviation for all samples in channel/pixel below the minimum acceptable value {self.pixel_mask_std_sample_min}" + ) + flag_sample_std = np.int8( + np.all(ped_stats["std"] < self.pixel_mask_std_sample_min, axis=2) + ) # Bitwise OR pixel_mask = pixel_mask | flag_sample_std * PedestalFlagBits.STD_SAMPLE # Flag on standard deviation per pixel # Standard deviation of pedestal in channel/pixel above threshold log.info( - f"Flag pixels with pedestal standard deviation in a chennel/pixel above the maximum acceptable value {self.pixel_mask_std_pixel_max}") + f"Flag pixels with pedestal standard deviation in a chennel/pixel above the maximum acceptable value {self.pixel_mask_std_pixel_max}" + ) flag_pixel_std = np.int8( - np.std(ped_stats['mean'], axis=2) > self.pixel_mask_std_pixel_max) + np.std(ped_stats["mean"], axis=2) > self.pixel_mask_std_pixel_max + ) # Bitwise OR pixel_mask = pixel_mask | flag_pixel_std * PedestalFlagBits.STD_PIXEL @@ -324,7 +333,7 @@ def timestamp_mask(self, tmin, tmax): Maximum time of the required interval Returns - ---------- + ------- mask : `~numpy.ndarray` A boolean array of shape (n_events,n_pixels,n_samples) that identifies waveforms to be masked. @@ -372,7 +381,7 @@ def waveformsStdFilter_mask(self, threshold): filtered out Returns - ---------- + ------- mask : `~numpy.ndarray` A boolean array of shape (n_events,n_pixels,n_samples) that identifies waveforms to be masked @@ -420,7 +429,7 @@ def chargeDistributionFilter_mask(self, sigma_low, sigma_high): filtered out Returns - ---------- + ------- mask : `~numpy.ndarray` A boolean array of shape (n_events,n_pixels,n_samples) that identifies waveforms to be masked @@ -589,10 +598,10 @@ def finish(self, *args, **kwargs): pixels_id=self._waveformsContainers.pixels_id, ucts_timestamp_min=np.uint64(tmin), ucts_timestamp_max=np.uint64(tmax), - pedestal_mean_hg=self._ped_stats['mean'][HIGH_GAIN], - pedestal_mean_lg=self._ped_stats['mean'][LOW_GAIN], - pedestal_std_hg=self._ped_stats['std'][HIGH_GAIN], - pedestal_std_lg=self._ped_stats['std'][LOW_GAIN], + pedestal_mean_hg=self._ped_stats["mean"][HIGH_GAIN], + pedestal_mean_lg=self._ped_stats["mean"][LOW_GAIN], + pedestal_std_hg=self._ped_stats["std"][HIGH_GAIN], + pedestal_std_lg=self._ped_stats["std"][LOW_GAIN], pixel_mask=pixel_mask, ) diff --git a/src/nectarchain/makers/component/chargesComponent.py b/src/nectarchain/makers/component/chargesComponent.py index c35dc026..c699a789 100644 --- a/src/nectarchain/makers/component/chargesComponent.py +++ b/src/nectarchain/makers/component/chargesComponent.py @@ -235,6 +235,7 @@ def _get_imageExtractor(method: str, subarray: SubarrayDescription, **kwargs): def finish(self, *args, **kwargs): """ Create an output container for the specified trigger type and method. + Args: trigger_type (EventType): The type of trigger. method (str): The name of the charge extraction method. @@ -276,6 +277,7 @@ def finish(self, *args, **kwargs): def sort(chargesContainer: ChargesContainer, method: str = "event_id"): """ Sorts the charges in a ChargesContainer object based on the specified method. + Args: chargesContainer (ChargesContainer): The ChargesContainer object to be sorted. method (str, optional): The sorting method. Defaults to 'event_id'. @@ -316,6 +318,7 @@ def sort(chargesContainer: ChargesContainer, method: str = "event_id"): def select_charges_hg(chargesContainer: ChargesContainer, pixel_id: np.ndarray): """ Selects the charges from the ChargesContainer object for the given pixel_id and returns the result transposed. + Args: chargesContainer (ChargesContainer): The ChargesContainer object. pixel_id (np.ndarray): An array of pixel IDs. @@ -332,6 +335,7 @@ def select_charges_hg(chargesContainer: ChargesContainer, pixel_id: np.ndarray): def select_charges_lg(chargesContainer: ChargesContainer, pixel_id: np.ndarray): """ Selects the charges from the ChargesContainer object for the given pixel_id and returns the result transposed. + Args: chargesContainer (ChargesContainer): The ChargesContainer object. pixel_id (np.ndarray): An array of pixel IDs. @@ -347,6 +351,7 @@ def select_charges_lg(chargesContainer: ChargesContainer, pixel_id: np.ndarray): def charges_hg(self, trigger: EventType): """ Returns the charges for a specific trigger type as a NumPy array of unsigned 16-bit integers. + Args: trigger (EventType): The specific trigger type. Returns: @@ -360,6 +365,7 @@ def charges_hg(self, trigger: EventType): def charges_lg(self, trigger: EventType): """ Returns the charges for a specific trigger type as a NumPy array of unsigned 16-bit integers. + Args: trigger (EventType): The specific trigger type. Returns: @@ -373,6 +379,7 @@ def charges_lg(self, trigger: EventType): def peak_hg(self, trigger: EventType): """ Returns the peak charges for a specific trigger type as a NumPy array of unsigned 16-bit integers. + Args: trigger (EventType): The specific trigger type. Returns: @@ -386,6 +393,7 @@ def peak_hg(self, trigger: EventType): def peak_lg(self, trigger: EventType): """ Returns the peak charges for a specific trigger type as a NumPy array of unsigned 16-bit integers. + Args: trigger (EventType): The specific trigger type. Returns: @@ -416,6 +424,7 @@ def create_from_waveforms( ) -> ChargesContainer: """ Create a ChargesContainer object from waveforms using the specified charge extraction method. + Args: waveformsContainer (WaveformsContainer): The waveforms container object. method (str, optional): The charge extraction method to use (default is "FullWaveformSum"). @@ -461,6 +470,7 @@ def compute_charges( ): """ Compute charge from waveforms. + Args: waveformContainer (WaveformsContainer): The waveforms container object. channel (int): The channel to compute charges for.