From e150d89242ee6b3ea6829fd5ce7ae436bc38f769 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 26 Mar 2023 17:24:17 +0200 Subject: [PATCH] :fire: Remove LEDFX add-on --- .addons.yml | 4 -- README.md | 23 ------- ledfx/CHANGELOG.md | 4 -- ledfx/DOCS.md | 152 --------------------------------------------- ledfx/README.md | 49 --------------- ledfx/config.yaml | 35 ----------- ledfx/icon.png | Bin 9907 -> 0 bytes ledfx/logo.png | Bin 9907 -> 0 bytes 8 files changed, 267 deletions(-) delete mode 100644 ledfx/CHANGELOG.md delete mode 100644 ledfx/DOCS.md delete mode 100644 ledfx/README.md delete mode 100644 ledfx/config.yaml delete mode 100644 ledfx/icon.png delete mode 100644 ledfx/logo.png diff --git a/.addons.yml b/.addons.yml index 47e19fb3c..b3b0c2ddb 100644 --- a/.addons.yml +++ b/.addons.yml @@ -69,10 +69,6 @@ addons: repository: hassio-addons/addon-jupyterlab target: jupyterlab image: ghcr.io/hassio-addons/jupyterlab/{arch} - ledfx: - repository: hassio-addons/addon-ledfx - target: ledfx - image: ghcr.io/hassio-addons/ledfx/{arch} log-viewer: repository: hassio-addons/addon-log-viewer target: log-viewer diff --git a/README.md b/README.md index 5aa578232..8b72a9d65 100644 --- a/README.md +++ b/README.md @@ -560,19 +560,6 @@ A local NTP (Network Time Protocol) server for cameras etc. [:books: chrony add-on documentation][addon-doc-chrony] -### ✓ [ledfx][addon-ledfx] - -![Latest Version][ledfx-version-shield] -![Supports armhf Architecture][ledfx-armhf-shield] -![Supports armv7 Architecture][ledfx-armv7-shield] -![Supports aarch64 Architecture][ledfx-aarch64-shield] -![Supports amd64 Architecture][ledfx-amd64-shield] -![Supports i386 Architecture][ledfx-i386-shield] - -A network based LED effect controller with support for advanced real-time audio effects! - -[:books: ledfx add-on documentation][addon-doc-ledfx] - ### ✓ [motionEye][addon-motioneye] ![Latest Version][motioneye-version-shield] @@ -660,7 +647,6 @@ on the correct GitHub repository matching the add-on. - [Open an issue for the add-on: Z-Wave JS UI][zwave-js-ui-issue] - [Open an issue for the add-on: ZeroTier One][zerotier-issue] - [Open an issue for the add-on: chrony][chrony-issue] -- [Open an issue for the add-on: ledfx][ledfx-issue] - [Open an issue for the add-on: motionEye][motioneye-issue] - [Open an issue for the add-on: phpMyAdmin][phpmyadmin-issue] @@ -1070,15 +1056,6 @@ SOFTWARE. [chrony-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg [chrony-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg [chrony-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg -[addon-ledfx]: https://github.com/hassio-addons/addon-ledfx/tree/d7e3146 -[addon-doc-ledfx]: https://github.com/hassio-addons/addon-ledfx/blob/d7e3146/README.md -[ledfx-issue]: https://github.com/hassio-addons/addon-ledfx/issues -[ledfx-version-shield]: https://img.shields.io/badge/version-d7e3146-blue.svg -[ledfx-aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg -[ledfx-amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg -[ledfx-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg -[ledfx-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg -[ledfx-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg [addon-motioneye]: https://github.com/hassio-addons/addon-motioneye/tree/fa26f20 [addon-doc-motioneye]: https://github.com/hassio-addons/addon-motioneye/blob/fa26f20/README.md [motioneye-issue]: https://github.com/hassio-addons/addon-motioneye/issues diff --git a/ledfx/CHANGELOG.md b/ledfx/CHANGELOG.md deleted file mode 100644 index a0b01ffc5..000000000 --- a/ledfx/CHANGELOG.md +++ /dev/null @@ -1,4 +0,0 @@ -- Bump ledfx to 2.0.60 (#129) - -Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -Co-authored-by: Franck Nijhof diff --git a/ledfx/DOCS.md b/ledfx/DOCS.md deleted file mode 100644 index b251d3c47..000000000 --- a/ledfx/DOCS.md +++ /dev/null @@ -1,152 +0,0 @@ -# Home Assistant Community Add-on: ledfx - -LedFx is a network based LED effect controller with support for advanced -real-time audio effects! LedFx can control multiple devices and works great -with cheap ESP8266 nodes allowing for cost effective syncronised effects across -your entire house! - -## Important - -This application is designed to be run locally, not exposed to the Internet. -Please do not allow access to it externally. - -## Installation - -The installation of this add-on is pretty straightforward and not different in -comparison to installing any other Home Assistant add-on. - -1. Search for the "ledfx" add-on in the add-on store and install it. -1. Select the correct audio device for input. -1. Start the "ledfx" add-on -1. Check the logs of the "ledfx" add-on to see if everything went well. - -## Configuration - -**Note**: _Remember to restart the add-on when the configuration is changed._ - -Example add-on configuration: - -```yaml -ssl: false -certfile: fullchain.pem -keyfile: privkey.pem -``` - -**Note**: _This is just an example, don't copy and paste it! Create your own!_ - -### Option: `log_level` - -The `log_level` option controls the level of log output by the addon and can -be changed to be more or less verbose, which might be useful when you are -dealing with an unknown issue. Possible values are: - -- `trace`: Show every detail, like all called internal functions. -- `debug`: Shows detailed debug information. -- `info`: Normal (usually) interesting events. -- `warning`: Exceptional occurrences that are not errors. -- `error`: Runtime errors that do not require immediate action. -- `fatal`: Something went terribly wrong. Add-on becomes unusable. - -Please note that each level automatically includes log messages from a -more severe level, e.g., `debug` also shows `info` messages. By default, -the `log_level` is set to `info`, which is the recommended setting unless -you are troubleshooting. - -### Option: `ssl` - -Enables/Disables SSL (HTTPS) on the web interface of ledfx -Panel. Set it `true` to enable it, `false` otherwise. - -### Option: `certfile` - -The certificate file to use for SSL. - -**Note**: _The file MUST be stored in `/ssl/`, which is the default_ - -### Option: `keyfile` - -The private key file to use for SSL. - -**Note**: _The file MUST be stored in `/ssl/`, which is the default_ - -### Option: `leave_front_door_open` - -Adding this option to the add-on configuration allows you to disable -authentication on the add-on by setting it to `true`. - -**Note**: _We STRONGLY suggest, not to use this, even if this add-on is -only exposed to your internal network. USE AT YOUR OWN RISK!_ - -## Known issues and limitations - -- Alsa errors may be logged on startup, these should not cause an issue. -- Ingress is currently unsupported. - -## Changelog & Releases - -This repository keeps a change log using [GitHub's releases][releases] -functionality. - -Releases are based on [Semantic Versioning][semver], and use the format -of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented -based on the following: - -- `MAJOR`: Incompatible or major changes. -- `MINOR`: Backwards-compatible new features and enhancements. -- `PATCH`: Backwards-compatible bugfixes and package updates. - -## Support - -Got questions? - -You have several options to get them answered: - -- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on - support and feature requests. -- The [Home Assistant Discord chat server][discord-ha] for general Home - Assistant discussions and questions. -- The Home Assistant [Community Forum][forum]. -- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] - -You could also [open an issue here][issue] GitHub. - -## Authors & contributors - -The original setup of this repository is by [Paul Sinclair][sinclairpaul]. - -For a full list of all authors and contributors, -check [the contributor's page][contributors]. - -## License - -MIT License - -Copyright (c) 2019-2022 Paul Sinclair - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -[contributors]: https://github.com/hassio-addons/addon-ledfx/graphs/contributors -[discord-ha]: https://discord.gg/c5DvZ4e -[discord]: https://discord.me/hassioaddons -[forum]: https://community.home-assistant.io/t/community-hass-io-xxxxx/xxxxx -[sinclairpaul]: https://github.com/sinclairpaul -[issue]: https://github.com/hassio-addons/addon-ledfx/issues -[reddit]: https://reddit.com/r/homeassistant -[releases]: https://github.com/hassio-addons/addon-ledfx/releases -[semver]: http://semver.org/spec/v2.0.0.htm diff --git a/ledfx/README.md b/ledfx/README.md deleted file mode 100644 index ca9af35ee..000000000 --- a/ledfx/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Home Assistant Community Add-on: ledfx - -[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield] - -[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] - -[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee] - -ledfx - -## About - -LedFx is a network based LED effect controller with support for advanced -real-time audio effects! LedFx can control multiple devices and works great with -cheap ESP8266 nodes allowing for cost effective syncronized effects across your -entire house!. - -![ledfx screenshot][screenshot] - -## WARNING! THIS IS AN EDGE VERSION! - -This Home Assistant Add-ons repository contains edge builds of add-ons. -Edge builds add-ons are based upon the latest development version. - -- They may not work at all. -- They might stop working at any time. -- They could have a negative impact on your system. - -This repository was created for: - -- Anybody willing to test. -- Anybody interested in trying out upcoming add-ons or add-on features. -- Developers. - -If you are more interested in stable releases of our add-ons: - - - -[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg -[buymeacoffee]: https://www.buymeacoffee.com/sinclairpaul -[discord-shield]: https://img.shields.io/discord/478094546522079232.svg -[discord]: https://discord.me/hassioaddons -[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg -[forum]: https://community.home-assistant.io/?u=frenck -[maintenance-shield]: https://img.shields.io/maintenance/yes/2022.svg -[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg -[release-shield]: https://img.shields.io/badge/version-d7e3146-blue.svg -[release]: https://github.com/hassio-addons/addon-ledfx/tree/d7e3146 -[screenshot]: https://github.com/hassio-addons/addon-ledfx/raw/main/images/screenshot.png \ No newline at end of file diff --git a/ledfx/config.yaml b/ledfx/config.yaml deleted file mode 100644 index 6a1867da9..000000000 --- a/ledfx/config.yaml +++ /dev/null @@ -1,35 +0,0 @@ -arch: -- aarch64 -- amd64 -- armhf -- armv7 -- i386 -audio: true -auth_api: true -codenotary: codenotary@frenck.dev -description: A network based LED effect controller with support for advanced real-time - audio effects! -hassio_api: true -image: ghcr.io/hassio-addons/ledfx/{arch} -init: false -map: -- ssl -name: ledfx -options: - certfile: fullchain.pem - keyfile: privkey.pem - ssl: true -ports: - 80/tcp: 5333 -ports_description: - 80/tcp: Web interface -schema: - certfile: str - keyfile: str - leave_front_door_open: bool? - log_level: list(trace|debug|info|notice|warning|error|fatal)? - ssl: bool -slug: ledfx -url: https://github.com/hassio-addons/addon-ledfx -version: d7e3146 -webui: '[PROTO:ssl]://[HOST]:[PORT:80]' diff --git a/ledfx/icon.png b/ledfx/icon.png deleted file mode 100644 index 5e4d80f4840c698b30b5ba558ef6e9215faf1318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9907 zcmV;kCQR9hP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKACP+y{K~#8N?Oh3+ z6Ghg4-RX4BxtaT7ECs$QKy8^`bR`eby3P4^O31MZkna}Q3@hy_atO4EBj2-&f^nNC&O2?CyPXr528Y1ZS~VSQ z4!7>0RnvahAyB3ExV`)HTdH@w2GiW+>%SWu@dogNY0HQlu3#b~7$))pJJu~|k0L@# z1S`c$cK2ygdZ&R9q3kX@#sA7t&YvB$?Hi}zz*qHcC+;I39kDp#3}92z`h*FVVN(+M zL6bFt>1-pPlnS5+7cca$?N(bhvQ+V!!<)cjGBe$NNBwUawY@)3h0 z!T>%>f7mpvspP^0chYp75O*dkm>B>a`9$v%9@qeKf)T4s3ze=+Q+_5F7kL_d97@k| zl-~KiM%TJ&P||yESO0XKm3-2#(XS0)k73>TbVt%GJ#W55Czy>&(&ZwM&p47DB}qy$ zF$@*&Dh)$PlseCnKlm83$D?$13(az`u)3Om+P)q7BT4O-=ywLN1ST=FwC7BXbI0Er z$0v*nDA}M!VDN+vphJ>}p)wvSE!g*ig(w^;K_S>9Nogdc+4i3`Z2JnQY0D;ft$#U@ z{l)+uE1sj9dN6)QJRg6Di8tj1l%lU>Ly5uT2gpfM#>0_d-w*bCQs~r>KfxYH`RHf} zT5CDYv_I%7ed`(c={hG#?Q`_G0W5(f^ek=T)roHNJx1OrBVJj8p~PGJF?5T5fRZ#T z@er!D^-xEonQ4X=rWIN>O<*Hq1s7>G+yd#u-SHr}5`c21kpW>kIGw5FHz?n4NTU3G zx0d{oKZabCSrD^DGuCnqG~Mm|XYPw6MIh2==u-pOr@QR*45w+8i8qe)m5xv3B^OFM z$wxsypj=xAKby8gslE*M>-R%B3G3M^a8eHPo$x{NI$#{RK-u#_u$O?-b`;o&*qj-i z#vpJ0gBbvdJPT6RM4>g7pIKM^Jp0PRFG)(Dpic~7mvM4t1{eQWqT4W)3RW_HB`1ZF z$V=J)hu9X_62Aj}FmH#grXA48G?Db415a8AyJa+3I>tdu#{_WDnVpXm$_P;8*^vv& zg9chQ8Z71WEf0>VCn>#(UN?Y4+CR@scj;HMfTY)4nupy&uc6lrV2AOz zjBLAhLn5y~%b$3q$V;nJEE*c#PuvS{CjScCjeSdcDAHuFX%1$iPSB_NlP|^PCE{OVhjb2jIi-{k zznd6=x_-Q`z*9PC)lY_o{As!tu|C_q75+{sX%dkxr9hKDu+ zd69^5O5+kVT;pQbIT=eyN{^w(4B-9bG%qFc+A03ThcW6$4F1I=#%Y&j ztFF5AFSawsR*{sLBIX9LOPe&Jz}5btUVv->oFxg8BcGtIhi^$)EX`?$a$Uce9P4p7 zjj2$5@@>#I>~#O)kQa*-ibC=B3T^ei$&M37{zg(_hL{>axgld*y507XPT-OO&|#yA zNV$;b$eU9ut%DU=0I#Pwe>aW28ng~Q6RQ5Q5Zp-#Qjr7}m86rpLF&V9@Z4l=&Snv4d3A^tDqx$@?8yHO7d^I53Cq(3m6aj8)Ge-A*% zuyIn+_!pO4&%n2bapKq%OXhC=!M ztH6~xNI|~5T)lB(1eN;V_D-;kKKC$5hzQs=M}+6o&oB+O>)zE1Izql=s>(LYE0wGX zE-yZ6fc!9EDBBH%^Jf5Cd&paSKJxu56mC})bW{#kobg`j<~0#FsS&pT&6@LGO?30q zI%~Y#I;Dqn!d^WO*A*r~y%u*)3?N*%Qc~c+`nA9n=MYV40P-?-0^QpBHlKL<`9x7Y zn2M+csAi_$mgqJR@|Cq+-V*3wpI#3$i;@S(j{r<#BNSYFJ?P3xiH4igC6OC~SNH_x zJf`N2#Y9mJ)h$4o{_=@=9P@Spy6WFS{$z1-7Pe?-8P}Kr_mGFN_S&q1u89_(L_tx^xTHjgo>$NOg zUq}s*9|JJ;O)&U|#lSS-UJFe~ofpkg| z>2f3RN(Zfl8w>1E#j5U(1`q;lWi902yd1rLqDe*|7tsjxe7Y?!ZUa%mM%V^$kiGq) zBzN5OV5Cced-CqgYlGbe>=FhLOBi+>fb4q-w*qcQl|ffb+^aV!fFAATLwL(6HKIU310J2zBAk5$&6YOA3#qcW7UUX{AE9h$!orU zYap<$BzrEik|^DxTLai*ST;V6H_!AZ+IYocfJL5M?2Bv zM&K{*c(_zwI%g75x)-BOS}}nKW7i|{ILldKyQFO+zOcwe?ekM zwp9BSegW+OM<)F!QMw$8b!h;V+GnT5@d*<`dHiSuA1BnorwP?0K7igt(wlq0{LKLp zQxGqU^Je#GZN=4>5+x);8o&}*!X&yAmP$m+NtdKeL%~0Cej@P!^aZk({s=UOC(tGG z1C79)EIa_4C*cA1pa|JKRBGRtk?l-;+B?gK2U_K!SC(gOhK;G)NL(Ez96uf=o^+z9 zMGt}eM|IuO1)#mX9o9cZve!#E?bK6X?3gj4rVcxI{RSU=_>rjjqi$9q)ZLg*Vx7GB z^W_F@jcukg^NpaH4O(h=VDmQmw7n)?Td4do>3?!SR|^*m`4_k-^{(HYciaw_Ts%$G z`VM#AeGk0z?)#$Fb2xtdaj@=*)u7el9!YgLR8av}U41RoHv~T?!s}?*`_{4G%)k+S zCqJEhxq-Gi5Ag4?B{1zZOz=a{F5nvNDbr1S0wG`C?E7~Ct1`cehvkwb%oHe=Vu`X0!U`dXD2@ z&fHt!;K6b+B{UM>Zvx%^HWHH?f!q*?FOcY%Pa**bFo0c#uO`IvN#e~M!DW5==MnGX zrD+=Sa&e8jf8gTjQ(?%EqeLxsFqurSZp~`QNKY42!UxauaL1jCVcRdiiYeWIG{mX@ z#Kj_|0Z2kd1o7N>!>`8?Ui}eZ09lT#8@)sa)_jzG`Ud!K{03* zx!#z(F<#FnTog!rr@k@uGmqCDDe`i2#aRErvBw+(Q_eYC)S?4LQLtq3oiJg-@nVWP zY<%G*kEjJj+`E()NGHS@{7J{qd(OF4c( z+xc+)teK*w4qLbV0*mfi?CJj_1x*@C)?*h#w52;7Obi%G->p8-4<_eKgak<;*N z4xqpZ8Zv^^`WeHU$sglaqe6de0T35m_%|4K^iWY#hm%e`0T$nNhp4FodiuA_TL5-D z5)~bi-b70AcjPUAB)F5c8d0pcDggaV-rz24Pck1?ZpIl z-2X}B;|Fp>cqU^#Je~d&iA4^bj)g5>ZYCkND&gVkYi7a!ev0fY}xebt-I!H_jA2yo}X3V@EcI@0Kro;xdH#R{1EF2cfiO1=3 zo`?WUyXJXEy!%R$=;7A`USQ6U8VY6Of%@inTz-rWX{l+d$VVJ3KP1M~qoJV@)~@@f zsD+QYH_wKo#6(dGjrjO@Si9!2h{$)l-LP=c-7zO0k?t~;Y#Tdr#CzcuWou>)OrSq-^TmhRws|6X!Gr!-9p|jKro&VihOMT zx5dTgvg;g`LqJ>!iv_lB+XipF{jR8m2b|DZv~WSt8NzwD+ze+;K2y}x;r$Ojg4L^^ z5Vf9z>HD~##CNs=!gvyR4ZtO6j}1jW%5KwE@;7=E6&8rG@DNS^uf!v(RzquRtEh#C z;lqc)MHl={)V#p8gBe#{A!_RI?9U}}KyMC;eHX3!K+=5OcCta%fC}qZ7 z|sV+Y_gq%BPHjErO0#+=4(6e}?7WMTFaO3Q` z(AI`aw!H^-mob2NNerx@VUF21icaK8@tE+3ol-`48k1=F7fMUqC4yCOWKLm*mWdt=k zJcJNEa2F6dR^b9SL^L)widyWjefy5ECwU~`b4Rjs2uCmrZeIku_v{f4$SvZUbu|Mgt@s%m@rRA(>i4TS~RO$+ve& z-b=UX%ixnC(?u;hyz%-gP*PkhYCQ{FJeo1{x^8FxMv!s-iyNPf>2|PhzWokn-#ibT zPCTjG_ZaouZiqi7_#t6etEPdrQSJ<7?U$sTX(oT82M(Qjb1OJb(S|cqw}T7`V>uRYB1qi797}8*-UA)dDHvqY`$LRe#DapxT45L|&CFaeY9oDeziM3Bc zQ&aT$tf{Sqo94^~i>2Em`MnCEN$Vk7*#)2zXwV8e+DRlB`6wMRGJu@i992WWSRgYq z6J}m>wWx(gYg?OVnm8KZF|+G$oC9@rz5dRpZb5Zu{A#`25R5vW@{k{F4#49GYVZtt z^eD*3vunMNa904a-?rH>*Xn`I{k-|NLs?mD=1XD?iu1mgO%iD_2*p6^q-TpKW?eZ4 zfT7FJC5#;TgY(2#@8S6uUi38Y-2uC%#~*uyj2y5?)B_Kge*Z(ieKjz!#J`o-dU+g; zq09H|yZOipMTxxJ-Zg-iU)cmJR(8L=8lBVS5B&p%4;v{=RH{Z;6q_8_FPLG#A#E59+*`P z{H^o|&H(lX5)#}#!qE`q#(;NAQWI!PDe$HetS?I8jXS_u684pIL6MY{1Ydmik*dj- z&o_Soc00C9;iIOe239}*1nIWACx6O0XTgI@ABgG5DEW+_Z5wgSbN7EeY4Wfr>CXC+Q%R3(HlYX^Yh@Ue&i6Q=W?F0elYS; zbOLpVc4};gl{H^3PANhu_WDn*%L`#mJ zd<5Vf22uxUPN087q63T1kO(hpz@15IfJ@Q0 zFSu3I`W6L6wt(@!L_UU;liouM<~@fb^5sV0iIe8TVvqd#6!iSnZUn8WiruA?*e@?x ze3$3sZY02E z?jWNz7x9tY#P<`(w`{!U1W`mtOh{1O=f?7s>)Fs532<(I?k)3SPiZN<^zy4> zYWTQw(d`j!B8??R4hu8@Pt#9?IDoD_LhE)y_cXU#>)yeOge(7rlgR|9JC!KvkxlwS zHRFFAO5rFV7Wms=&x7lU0Yrk@+B&!aw{f?77sJ-BTMyOM>RP7ktSq?d%F9Kq_mP(7 zfWes#C7nLe3e+$6odzxsI~42O<}(dRWZ$;Bk0lZH$j?*f0OB_ASX`2Tw~#Km=dOq* zdT?p?#@RRf5pE;Tw0s5LyQ~f~i9@L7E`(TO%&`_Aqd?;6`_n23?Vvozy*vg$>up;+ zsWQ^#x&Be}~DM+CTcpf_;VnC4FMB|-8X)xGy;m-*a6{(v+#B+325geeLJLe|PuAE4KTe?mm5NJ@_8f@ z9@Jh5i)R6?R($(K_?SNJBF|NDkpMmYTZzXX>3RK!S3atG$ci(Plh5?s&(tIM+i{IP zvIB&qyDZeZ)8|*>Ouq*{13+ll=GXmR4VASa?vg2sC2Ea9F-*KGzre_?&^F}s;883!J!j(oqbi0La`r-RxzZ0u|C0P00bQ{fBU-ctiBwq>} z3N9f-hVBbKTjd-;xI;kv-8HKp4eJ1?64>0&owp!nd-(D9a09AZ;3m={mHQ;R15E*3 zeoSp}@Q7=!sZ;BX?QZ^{2>uXavrp1{fQ`DL+vC`IHchHeNV1k?Kx_u z7U<~VOBf=(bu<*d`g)7%t88(JdeOq$Vmd>3W??hr83@aA@?~+J#H*_eYl-HE00XeT za@1Cu?)W<7s{)DCkGh7m0-+xsYiGL3oxleV;(KpG1E*CVedJ*n9N{UWWMF9lW|xr4 zqafTPqUTR)|E`ibj-c0-gz)AlK|{4I^^lDmONJl|9jRH+a9r@WlB#_v1m2((>Lkw< zmtP8(T}m9!2!Inkcrjyd03AYHEK&=6e`2KX7D8N^TLak|!nBfnNytadt(t$3SWtv+ zr>Abx&|}Wo&Ff9YfV-&Wf=A&SS{l46>%ybm*X4}O-N<34tQ(KPB7phKamq3Ke!rBLJLptGB4sskRCZ` z4eRnz+50Olatz9O>al@})4YYzyRXm`jua^fuNN?1hObZ2_Ff<)D?lpx`0Le~1BtJeUvr}{bg6=Bf2yI zgw9@dGsUayFwF-YCa-vA;<7U}aB#aH-<_K_|NU3N-1+@haHv@X%D0odjb z`GMx!pZ1WAMj(ky=M&9PIr{-JD!_JU06htYbmhy82f*wUr+j5KUM_7N^txeBS-YL} z>ec`d#>%~SP!w0^X8;PZjye`#QFXZHD4f7XJu|UqQ@CTXxM%De8cFLem31(0CgyZt&!uvhq6fFQ!h>!JMdN5Rog4oLnUkn7@LP2)b$bA)_F zjrWMy8rbag!JqB%s>bB1XIS)~?LURf&fP2+7&^cbQ5b>zsuS3X15h~QW?<@Lf93lh z38^k8Ja>2x_%AR(oE>s7SVx-B&M-jFLygZA2oJeD2hTR|fg;?|;VEAt z_zGaDSfwH+VsX;ny=}>kcu6th764(`x;5KAbjS~ap3d?;k?#qmr$i6M2~1N1XVXn^zfd09+eg8cfEWSC(sg?c+7n0C zb7dqYVnl5K28rm2%7tCW05l-LT;pN5imvtg z(BiNzK*VC@c&e#VZ#=cQqhmWsi3%|>0EDjMyVD)%$!`i;KCVjx5OZhTS`ImPeF|)q zh3J1=WHAm{mT~|_Q=}Xu;=3>a&Oxa-` zVZgEeb!+yqV_xjYW(Sk*V3gOCrPe@-`-{N1pkurdTBgJS)9L{IKJwk)i5=h$`6-1> zuxer%oRQf=MsOr!m^Zl~g2Y<{=AB=;#B+}?ZHsuQ*A;rC1(1WO`PZ%PWbJZ6>n6q~ znYGf~14Xyb0%=dRK*A^FJ4fhX0r#?=aa1$R8dD8NnZ06xlk`&1-VvZg+0EE75#Y8UC@UmbKasqPdD*-7@UP2tO6*fqDk%OeSNP!05INa}m zr*zL9-3XVBtAoL2k{|yp`HQ?b#L&)B_4QWvioDM_-#PxCLa!JABH^n$k}M+=*Sizw zsX=q?36&z1oE>PZgNznMZPn+?P1@XUw8NuNwfu{J&X)Y(<6@ z?s(x!pwS5oRw{Clm!K546A#u2rfL@AzmEsww{f7|W(KMjm&79=j_}G#th!@CrS}e?_16J+4vCr6IdsB88=o15wpf9_6q9cu3#hcw@ zgO`w8OkTZX*`&nwjNE!y}ZWi?>%Wed5S=gRfLMK&ld zvBAg@9gr_xzlyhT1|?knnDWn16y#eh^w0I}?5%~5+SOe+6hri>0f?Zqho@fbPINEj zjjn>w1|W&IL@6SK)<6RYB6!__rcMh~4QU@=`sY=W;=GbgwpKEVx1 z$xcYia6lTV=|*BR0ly`Mr{UWb&Sy;48V&e zlNjwR!&J#MTnOy9^kmkQD@4! zA%pAlosZ=Ih@!Y{lwfV6KCW%lt}3~{=ZAG_(f03suYUh! z@mtCZnffD+2m_EKd1G?CbyE8jCXt`aYJ{^{BcCQGMG_@h$~5KYp~6sUl5nkbox?(X z+*(h+v-PL=56++27@JqF_Y#gc15hIWTl3L$zWr34Ss16Ih4DH@I9jh0G;)%{CAGUa z?Vxy#i`qjusI5e{)E;2BOqdY6wfVll5pMuWOxg?#M<Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKACP+y{K~#8N?Oh3+ z6Ghg4-RX4BxtaT7ECs$QKy8^`bR`eby3P4^O31MZkna}Q3@hy_atO4EBj2-&f^nNC&O2?CyPXr528Y1ZS~VSQ z4!7>0RnvahAyB3ExV`)HTdH@w2GiW+>%SWu@dogNY0HQlu3#b~7$))pJJu~|k0L@# z1S`c$cK2ygdZ&R9q3kX@#sA7t&YvB$?Hi}zz*qHcC+;I39kDp#3}92z`h*FVVN(+M zL6bFt>1-pPlnS5+7cca$?N(bhvQ+V!!<)cjGBe$NNBwUawY@)3h0 z!T>%>f7mpvspP^0chYp75O*dkm>B>a`9$v%9@qeKf)T4s3ze=+Q+_5F7kL_d97@k| zl-~KiM%TJ&P||yESO0XKm3-2#(XS0)k73>TbVt%GJ#W55Czy>&(&ZwM&p47DB}qy$ zF$@*&Dh)$PlseCnKlm83$D?$13(az`u)3Om+P)q7BT4O-=ywLN1ST=FwC7BXbI0Er z$0v*nDA}M!VDN+vphJ>}p)wvSE!g*ig(w^;K_S>9Nogdc+4i3`Z2JnQY0D;ft$#U@ z{l)+uE1sj9dN6)QJRg6Di8tj1l%lU>Ly5uT2gpfM#>0_d-w*bCQs~r>KfxYH`RHf} zT5CDYv_I%7ed`(c={hG#?Q`_G0W5(f^ek=T)roHNJx1OrBVJj8p~PGJF?5T5fRZ#T z@er!D^-xEonQ4X=rWIN>O<*Hq1s7>G+yd#u-SHr}5`c21kpW>kIGw5FHz?n4NTU3G zx0d{oKZabCSrD^DGuCnqG~Mm|XYPw6MIh2==u-pOr@QR*45w+8i8qe)m5xv3B^OFM z$wxsypj=xAKby8gslE*M>-R%B3G3M^a8eHPo$x{NI$#{RK-u#_u$O?-b`;o&*qj-i z#vpJ0gBbvdJPT6RM4>g7pIKM^Jp0PRFG)(Dpic~7mvM4t1{eQWqT4W)3RW_HB`1ZF z$V=J)hu9X_62Aj}FmH#grXA48G?Db415a8AyJa+3I>tdu#{_WDnVpXm$_P;8*^vv& zg9chQ8Z71WEf0>VCn>#(UN?Y4+CR@scj;HMfTY)4nupy&uc6lrV2AOz zjBLAhLn5y~%b$3q$V;nJEE*c#PuvS{CjScCjeSdcDAHuFX%1$iPSB_NlP|^PCE{OVhjb2jIi-{k zznd6=x_-Q`z*9PC)lY_o{As!tu|C_q75+{sX%dkxr9hKDu+ zd69^5O5+kVT;pQbIT=eyN{^w(4B-9bG%qFc+A03ThcW6$4F1I=#%Y&j ztFF5AFSawsR*{sLBIX9LOPe&Jz}5btUVv->oFxg8BcGtIhi^$)EX`?$a$Uce9P4p7 zjj2$5@@>#I>~#O)kQa*-ibC=B3T^ei$&M37{zg(_hL{>axgld*y507XPT-OO&|#yA zNV$;b$eU9ut%DU=0I#Pwe>aW28ng~Q6RQ5Q5Zp-#Qjr7}m86rpLF&V9@Z4l=&Snv4d3A^tDqx$@?8yHO7d^I53Cq(3m6aj8)Ge-A*% zuyIn+_!pO4&%n2bapKq%OXhC=!M ztH6~xNI|~5T)lB(1eN;V_D-;kKKC$5hzQs=M}+6o&oB+O>)zE1Izql=s>(LYE0wGX zE-yZ6fc!9EDBBH%^Jf5Cd&paSKJxu56mC})bW{#kobg`j<~0#FsS&pT&6@LGO?30q zI%~Y#I;Dqn!d^WO*A*r~y%u*)3?N*%Qc~c+`nA9n=MYV40P-?-0^QpBHlKL<`9x7Y zn2M+csAi_$mgqJR@|Cq+-V*3wpI#3$i;@S(j{r<#BNSYFJ?P3xiH4igC6OC~SNH_x zJf`N2#Y9mJ)h$4o{_=@=9P@Spy6WFS{$z1-7Pe?-8P}Kr_mGFN_S&q1u89_(L_tx^xTHjgo>$NOg zUq}s*9|JJ;O)&U|#lSS-UJFe~ofpkg| z>2f3RN(Zfl8w>1E#j5U(1`q;lWi902yd1rLqDe*|7tsjxe7Y?!ZUa%mM%V^$kiGq) zBzN5OV5Cced-CqgYlGbe>=FhLOBi+>fb4q-w*qcQl|ffb+^aV!fFAATLwL(6HKIU310J2zBAk5$&6YOA3#qcW7UUX{AE9h$!orU zYap<$BzrEik|^DxTLai*ST;V6H_!AZ+IYocfJL5M?2Bv zM&K{*c(_zwI%g75x)-BOS}}nKW7i|{ILldKyQFO+zOcwe?ekM zwp9BSegW+OM<)F!QMw$8b!h;V+GnT5@d*<`dHiSuA1BnorwP?0K7igt(wlq0{LKLp zQxGqU^Je#GZN=4>5+x);8o&}*!X&yAmP$m+NtdKeL%~0Cej@P!^aZk({s=UOC(tGG z1C79)EIa_4C*cA1pa|JKRBGRtk?l-;+B?gK2U_K!SC(gOhK;G)NL(Ez96uf=o^+z9 zMGt}eM|IuO1)#mX9o9cZve!#E?bK6X?3gj4rVcxI{RSU=_>rjjqi$9q)ZLg*Vx7GB z^W_F@jcukg^NpaH4O(h=VDmQmw7n)?Td4do>3?!SR|^*m`4_k-^{(HYciaw_Ts%$G z`VM#AeGk0z?)#$Fb2xtdaj@=*)u7el9!YgLR8av}U41RoHv~T?!s}?*`_{4G%)k+S zCqJEhxq-Gi5Ag4?B{1zZOz=a{F5nvNDbr1S0wG`C?E7~Ct1`cehvkwb%oHe=Vu`X0!U`dXD2@ z&fHt!;K6b+B{UM>Zvx%^HWHH?f!q*?FOcY%Pa**bFo0c#uO`IvN#e~M!DW5==MnGX zrD+=Sa&e8jf8gTjQ(?%EqeLxsFqurSZp~`QNKY42!UxauaL1jCVcRdiiYeWIG{mX@ z#Kj_|0Z2kd1o7N>!>`8?Ui}eZ09lT#8@)sa)_jzG`Ud!K{03* zx!#z(F<#FnTog!rr@k@uGmqCDDe`i2#aRErvBw+(Q_eYC)S?4LQLtq3oiJg-@nVWP zY<%G*kEjJj+`E()NGHS@{7J{qd(OF4c( z+xc+)teK*w4qLbV0*mfi?CJj_1x*@C)?*h#w52;7Obi%G->p8-4<_eKgak<;*N z4xqpZ8Zv^^`WeHU$sglaqe6de0T35m_%|4K^iWY#hm%e`0T$nNhp4FodiuA_TL5-D z5)~bi-b70AcjPUAB)F5c8d0pcDggaV-rz24Pck1?ZpIl z-2X}B;|Fp>cqU^#Je~d&iA4^bj)g5>ZYCkND&gVkYi7a!ev0fY}xebt-I!H_jA2yo}X3V@EcI@0Kro;xdH#R{1EF2cfiO1=3 zo`?WUyXJXEy!%R$=;7A`USQ6U8VY6Of%@inTz-rWX{l+d$VVJ3KP1M~qoJV@)~@@f zsD+QYH_wKo#6(dGjrjO@Si9!2h{$)l-LP=c-7zO0k?t~;Y#Tdr#CzcuWou>)OrSq-^TmhRws|6X!Gr!-9p|jKro&VihOMT zx5dTgvg;g`LqJ>!iv_lB+XipF{jR8m2b|DZv~WSt8NzwD+ze+;K2y}x;r$Ojg4L^^ z5Vf9z>HD~##CNs=!gvyR4ZtO6j}1jW%5KwE@;7=E6&8rG@DNS^uf!v(RzquRtEh#C z;lqc)MHl={)V#p8gBe#{A!_RI?9U}}KyMC;eHX3!K+=5OcCta%fC}qZ7 z|sV+Y_gq%BPHjErO0#+=4(6e}?7WMTFaO3Q` z(AI`aw!H^-mob2NNerx@VUF21icaK8@tE+3ol-`48k1=F7fMUqC4yCOWKLm*mWdt=k zJcJNEa2F6dR^b9SL^L)widyWjefy5ECwU~`b4Rjs2uCmrZeIku_v{f4$SvZUbu|Mgt@s%m@rRA(>i4TS~RO$+ve& z-b=UX%ixnC(?u;hyz%-gP*PkhYCQ{FJeo1{x^8FxMv!s-iyNPf>2|PhzWokn-#ibT zPCTjG_ZaouZiqi7_#t6etEPdrQSJ<7?U$sTX(oT82M(Qjb1OJb(S|cqw}T7`V>uRYB1qi797}8*-UA)dDHvqY`$LRe#DapxT45L|&CFaeY9oDeziM3Bc zQ&aT$tf{Sqo94^~i>2Em`MnCEN$Vk7*#)2zXwV8e+DRlB`6wMRGJu@i992WWSRgYq z6J}m>wWx(gYg?OVnm8KZF|+G$oC9@rz5dRpZb5Zu{A#`25R5vW@{k{F4#49GYVZtt z^eD*3vunMNa904a-?rH>*Xn`I{k-|NLs?mD=1XD?iu1mgO%iD_2*p6^q-TpKW?eZ4 zfT7FJC5#;TgY(2#@8S6uUi38Y-2uC%#~*uyj2y5?)B_Kge*Z(ieKjz!#J`o-dU+g; zq09H|yZOipMTxxJ-Zg-iU)cmJR(8L=8lBVS5B&p%4;v{=RH{Z;6q_8_FPLG#A#E59+*`P z{H^o|&H(lX5)#}#!qE`q#(;NAQWI!PDe$HetS?I8jXS_u684pIL6MY{1Ydmik*dj- z&o_Soc00C9;iIOe239}*1nIWACx6O0XTgI@ABgG5DEW+_Z5wgSbN7EeY4Wfr>CXC+Q%R3(HlYX^Yh@Ue&i6Q=W?F0elYS; zbOLpVc4};gl{H^3PANhu_WDn*%L`#mJ zd<5Vf22uxUPN087q63T1kO(hpz@15IfJ@Q0 zFSu3I`W6L6wt(@!L_UU;liouM<~@fb^5sV0iIe8TVvqd#6!iSnZUn8WiruA?*e@?x ze3$3sZY02E z?jWNz7x9tY#P<`(w`{!U1W`mtOh{1O=f?7s>)Fs532<(I?k)3SPiZN<^zy4> zYWTQw(d`j!B8??R4hu8@Pt#9?IDoD_LhE)y_cXU#>)yeOge(7rlgR|9JC!KvkxlwS zHRFFAO5rFV7Wms=&x7lU0Yrk@+B&!aw{f?77sJ-BTMyOM>RP7ktSq?d%F9Kq_mP(7 zfWes#C7nLe3e+$6odzxsI~42O<}(dRWZ$;Bk0lZH$j?*f0OB_ASX`2Tw~#Km=dOq* zdT?p?#@RRf5pE;Tw0s5LyQ~f~i9@L7E`(TO%&`_Aqd?;6`_n23?Vvozy*vg$>up;+ zsWQ^#x&Be}~DM+CTcpf_;VnC4FMB|-8X)xGy;m-*a6{(v+#B+325geeLJLe|PuAE4KTe?mm5NJ@_8f@ z9@Jh5i)R6?R($(K_?SNJBF|NDkpMmYTZzXX>3RK!S3atG$ci(Plh5?s&(tIM+i{IP zvIB&qyDZeZ)8|*>Ouq*{13+ll=GXmR4VASa?vg2sC2Ea9F-*KGzre_?&^F}s;883!J!j(oqbi0La`r-RxzZ0u|C0P00bQ{fBU-ctiBwq>} z3N9f-hVBbKTjd-;xI;kv-8HKp4eJ1?64>0&owp!nd-(D9a09AZ;3m={mHQ;R15E*3 zeoSp}@Q7=!sZ;BX?QZ^{2>uXavrp1{fQ`DL+vC`IHchHeNV1k?Kx_u z7U<~VOBf=(bu<*d`g)7%t88(JdeOq$Vmd>3W??hr83@aA@?~+J#H*_eYl-HE00XeT za@1Cu?)W<7s{)DCkGh7m0-+xsYiGL3oxleV;(KpG1E*CVedJ*n9N{UWWMF9lW|xr4 zqafTPqUTR)|E`ibj-c0-gz)AlK|{4I^^lDmONJl|9jRH+a9r@WlB#_v1m2((>Lkw< zmtP8(T}m9!2!Inkcrjyd03AYHEK&=6e`2KX7D8N^TLak|!nBfnNytadt(t$3SWtv+ zr>Abx&|}Wo&Ff9YfV-&Wf=A&SS{l46>%ybm*X4}O-N<34tQ(KPB7phKamq3Ke!rBLJLptGB4sskRCZ` z4eRnz+50Olatz9O>al@})4YYzyRXm`jua^fuNN?1hObZ2_Ff<)D?lpx`0Le~1BtJeUvr}{bg6=Bf2yI zgw9@dGsUayFwF-YCa-vA;<7U}aB#aH-<_K_|NU3N-1+@haHv@X%D0odjb z`GMx!pZ1WAMj(ky=M&9PIr{-JD!_JU06htYbmhy82f*wUr+j5KUM_7N^txeBS-YL} z>ec`d#>%~SP!w0^X8;PZjye`#QFXZHD4f7XJu|UqQ@CTXxM%De8cFLem31(0CgyZt&!uvhq6fFQ!h>!JMdN5Rog4oLnUkn7@LP2)b$bA)_F zjrWMy8rbag!JqB%s>bB1XIS)~?LURf&fP2+7&^cbQ5b>zsuS3X15h~QW?<@Lf93lh z38^k8Ja>2x_%AR(oE>s7SVx-B&M-jFLygZA2oJeD2hTR|fg;?|;VEAt z_zGaDSfwH+VsX;ny=}>kcu6th764(`x;5KAbjS~ap3d?;k?#qmr$i6M2~1N1XVXn^zfd09+eg8cfEWSC(sg?c+7n0C zb7dqYVnl5K28rm2%7tCW05l-LT;pN5imvtg z(BiNzK*VC@c&e#VZ#=cQqhmWsi3%|>0EDjMyVD)%$!`i;KCVjx5OZhTS`ImPeF|)q zh3J1=WHAm{mT~|_Q=}Xu;=3>a&Oxa-` zVZgEeb!+yqV_xjYW(Sk*V3gOCrPe@-`-{N1pkurdTBgJS)9L{IKJwk)i5=h$`6-1> zuxer%oRQf=MsOr!m^Zl~g2Y<{=AB=;#B+}?ZHsuQ*A;rC1(1WO`PZ%PWbJZ6>n6q~ znYGf~14Xyb0%=dRK*A^FJ4fhX0r#?=aa1$R8dD8NnZ06xlk`&1-VvZg+0EE75#Y8UC@UmbKasqPdD*-7@UP2tO6*fqDk%OeSNP!05INa}m zr*zL9-3XVBtAoL2k{|yp`HQ?b#L&)B_4QWvioDM_-#PxCLa!JABH^n$k}M+=*Sizw zsX=q?36&z1oE>PZgNznMZPn+?P1@XUw8NuNwfu{J&X)Y(<6@ z?s(x!pwS5oRw{Clm!K546A#u2rfL@AzmEsww{f7|W(KMjm&79=j_}G#th!@CrS}e?_16J+4vCr6IdsB88=o15wpf9_6q9cu3#hcw@ zgO`w8OkTZX*`&nwjNE!y}ZWi?>%Wed5S=gRfLMK&ld zvBAg@9gr_xzlyhT1|?knnDWn16y#eh^w0I}?5%~5+SOe+6hri>0f?Zqho@fbPINEj zjjn>w1|W&IL@6SK)<6RYB6!__rcMh~4QU@=`sY=W;=GbgwpKEVx1 z$xcYia6lTV=|*BR0ly`Mr{UWb&Sy;48V&e zlNjwR!&J#MTnOy9^kmkQD@4! zA%pAlosZ=Ih@!Y{lwfV6KCW%lt}3~{=ZAG_(f03suYUh! z@mtCZnffD+2m_EKd1G?CbyE8jCXt`aYJ{^{BcCQGMG_@h$~5KYp~6sUl5nkbox?(X z+*(h+v-PL=56++27@JqF_Y#gc15hIWTl3L$zWr34Ss16Ih4DH@I9jh0G;)%{CAGUa z?Vxy#i`qjusI5e{)E;2BOqdY6wfVll5pMuWOxg?#M<