From b987471e5810835c1c2f4b23d6395a606b941ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E6=A3=AE?= Date: Tue, 6 Aug 2024 17:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20RssHub?= =?UTF-8?q?=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 萌森 --- .github/README.md | 1 + README.md | 1 + apps/rsshub/2024-08-06/data.yml | 43 +++++++++++++++++++ apps/rsshub/2024-08-06/docker-compose.yml | 30 +++++++++++++ apps/rsshub/2024-08-06/scripts/init.sh | 15 +++++++ apps/rsshub/2024-08-06/scripts/uninstall.sh | 10 +++++ apps/rsshub/2024-08-06/scripts/upgrade.sh | 15 +++++++ apps/rsshub/README.md | 44 ++++++++++++++++++++ apps/rsshub/data.yml | 19 +++++++++ apps/rsshub/logo.png | Bin 0 -> 12581 bytes 10 files changed, 178 insertions(+) create mode 100644 apps/rsshub/2024-08-06/data.yml create mode 100644 apps/rsshub/2024-08-06/docker-compose.yml create mode 100644 apps/rsshub/2024-08-06/scripts/init.sh create mode 100644 apps/rsshub/2024-08-06/scripts/uninstall.sh create mode 100644 apps/rsshub/2024-08-06/scripts/upgrade.sh create mode 100644 apps/rsshub/README.md create mode 100644 apps/rsshub/data.yml create mode 100644 apps/rsshub/logo.png diff --git a/.github/README.md b/.github/README.md index ce4689d0..5faf04f7 100644 --- a/.github/README.md +++ b/.github/README.md @@ -119,6 +119,7 @@ | 🟢 | | QingLong | https://github.com/whyour/qinglong/ | 【青龙】支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台 | | | 🟢 | | Reader3 | https://github.com/hectorqin/reader/ | 【阅读3】阅读3服务器版,不需要手机 | | | 🟢 | | Redis | https://redis.io/ | 从世界上最快的内存数据库创建者那里获取该数据库 | | +| 🟢 | | RssHub | https://rsshub.app/ | 从任何内容生成 RSS/Atom/JSON 订阅源 | | | 🟢 | | Sentinel | https://sentinelguard.io/ | 面向分布式、多语言异构化服务架构的流量治理组件 | | | 🟢 | | SiYuan | https://b3log.org/siyuan/ | 【思源笔记】一款隐私优先、自托管、完全开源的个人知识管理软件 | | | 🟢 | | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | SpeedTest | diff --git a/README.md b/README.md index 0effd2d9..93b7af7f 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,7 @@ | 🟢 | | QingLong | https://github.com/whyour/qinglong/ | 【青龙】支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台 | | | 🟢 | | Reader3 | https://github.com/hectorqin/reader/ | 【阅读3】阅读3服务器版,不需要手机 | | | 🟢 | | Redis | https://redis.io/ | 从世界上最快的内存数据库创建者那里获取该数据库 | | +| 🟢 | | RssHub | https://rsshub.app/ | 从任何内容生成 RSS/Atom/JSON 订阅源 | | | 🟢 | | Sentinel | https://sentinelguard.io/ | 面向分布式、多语言异构化服务架构的流量治理组件 | | | 🟢 | | SiYuan | https://b3log.org/siyuan/ | 【思源笔记】一款隐私优先、自托管、完全开源的个人知识管理软件 | | | 🟢 | | SpeedTest | https://www.speedtest.net/ | 互联网速度测试 | SpeedTest | diff --git a/apps/rsshub/2024-08-06/data.yml b/apps/rsshub/2024-08-06/data.yml new file mode 100644 index 00000000..bcf3f520 --- /dev/null +++ b/apps/rsshub/2024-08-06/data.yml @@ -0,0 +1,43 @@ +additionalProperties: + formFields: + - default: 1200 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ACCESS_KEY + labelZh: 访问密钥 + labelEn: Access key + required: true + type: text + - default: "memory" + edit: true + envKey: CACHE_TYPE + labelZh: 缓存类型 + labelEn: Cache type + required: true + type: select + values: + - label: 内存 + value: "memory" + - label: Redis + value: "redis" + - default: "redis://127.0.0.1:6379/" + edit: true + envKey: REDIS_URL + labelZh: Redis URL 地址 + labelEn: Redis URL address + required: false + type: text + - default: "" + edit: true + envKey: PROXY_URI + labelZh: 代理 URL 地址 + labelEn: Proxy URL address + required: false + type: text diff --git a/apps/rsshub/2024-08-06/docker-compose.yml b/apps/rsshub/2024-08-06/docker-compose.yml new file mode 100644 index 00000000..a5617eff --- /dev/null +++ b/apps/rsshub/2024-08-06/docker-compose.yml @@ -0,0 +1,30 @@ +version: "3.8" + +networks: + 1panel-network: + external: true + +services: + rsshub: + image: diygod/rsshub:chromium-bundled-2024-08-06 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1200 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + environment: + - NODE_ENV=production + - PORT=1200 + - LISTEN_INADDR_ANY=1 + - REQUEST_RETRY=2 + - REQUEST_TIMEOUT=3000 + - ALLOW_ORIGIN=* + - CACHE_CONTENT_EXPIRE=360 + - CACHE_EXPIRE=300 + - MEMORY_MAX=256 diff --git a/apps/rsshub/2024-08-06/scripts/init.sh b/apps/rsshub/2024-08-06/scripts/init.sh new file mode 100644 index 00000000..77b84912 --- /dev/null +++ b/apps/rsshub/2024-08-06/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/rsshub/2024-08-06/scripts/uninstall.sh b/apps/rsshub/2024-08-06/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/apps/rsshub/2024-08-06/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/rsshub/2024-08-06/scripts/upgrade.sh b/apps/rsshub/2024-08-06/scripts/upgrade.sh new file mode 100644 index 00000000..77b84912 --- /dev/null +++ b/apps/rsshub/2024-08-06/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/rsshub/README.md b/apps/rsshub/README.md new file mode 100644 index 00000000..6de0afc6 --- /dev/null +++ b/apps/rsshub/README.md @@ -0,0 +1,44 @@ +# RssHub + +万物皆可 RSS + +![RssHub](https://file.lifebus.top/imgs/rsshub_cover.png) + +从任何内容生成 RSS/Atom/JSON 订阅源 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +我们建议您使用 Redis 作为缓存数据库,以提高性能。 + +## 使用说明 + +请参考官方文档:[RssHub 使用说明](https://docs.rsshub.app/zh/guide/) + +## 配置说明 + +一些站点的RSS Feed需要登录后才能访问,这时候就需要配置一些鉴权配置 + +具体配置方法请参考官方文档:[RssHub 配置说明](https://docs.rsshub.app/zh/deploy/config/) + +## 注意事项 + +1. 请勿滥用本软件,否则后果自负 +2. 请遵守各网站的使用规定 +3. 请勿将本软件用于商业用途 +4. 请勿将本软件用于违法用途 +5. 请勿将本软件用于违反道德用途 +6. 请勿将本软件用于违反社会公德用途 +7. 请勿将本软件用于违反国家法律用途 +8. 请勿将本软件用于违反国家政策用途 +9. 请勿将本软件用于违反国家战略用途 +10. 请勿将本软件用于违反国家安全用途 +11. 请勿将本软件用于违反国家利益用途 +12. 请勿将本软件用于违反国家尊严用途 +13. 请勿将本软件用于违反国家权益用途 +14. 总而言之,请遵守法律法规,文明上网 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/rsshub/data.yml b/apps/rsshub/data.yml new file mode 100644 index 00000000..76e3cf49 --- /dev/null +++ b/apps/rsshub/data.yml @@ -0,0 +1,19 @@ +name: RssHub +title: 从任何内容生成 RSS/Atom/JSON 订阅源 +description: +additionalProperties: + key: rsshub + name: RssHub + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 从任何内容生成 RSS/Atom/JSON 订阅源 + shortDescEn: Generate RSS/Atom/JSON feeds from any content + type: website + crossVersionUpdate: true + limit: 0 + website: https://rsshub.app/ + github: https://github.com/DIYgod/RSSHub/ + document: https://docs.rsshub.app/ diff --git a/apps/rsshub/logo.png b/apps/rsshub/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca374f04abdeeb6840be55ac2fedda0fbed80a3 GIT binary patch literal 12581 zcmV+=G1|_FP)|HhU7j#2-{ zmH*tV|HhU7&!7Lzod3j>|J<$r&7A+2RsYeT|JFRsY14|9?gQjZgoOQUAk||H_&F%$xs$M*rNc|AR>X%9{U@Qvckn|AI*W z+^qkTQvckn|IVEM%$)z3R{!0t|IC~J-K_u0ng4%9|9nLM-K_tZR{zSG|HG31dP4uu zpZ}Fp|Jo=D|A9yU zlT!b4KL2br|63^kmsS5M0RJ-x|E6mHL>2#xP5(X-|3nr4pj`incN|4JGExq<(p zUH>Tn|IeTQb3Omip#RaK|JbPi(xU&)p8wOL|J0=apIZOTo&VLP|Djv|ay|dnrvJ>F z|JSGgdqV%1RsY(m|I3>H%9;OtME{Xd|H+vDbwB@hK>wau|D9O>oLK*pQvb-8|DRj` zmQ??LMgMp~|C(0+f=BC2O#j@i|A|chhD!g$lmEk# z|A|Zg+pPbFN&lNz|Aa~Z!jb=fM*nv||DIa^lT-iIr2oQ@|CUq#icSBHQ2)e~|As9RHzU|3nr4yodj=d;euF|6VHpNf`g8 zW&dn7|EhKWa5w)_A^$%S|C(L@tZ@INZU3li|F?kuw0!@kasQKD|7kM+I}QJtWdC9; z|5qgco@M`ySO0}i|8qM3TPOdLSpTzu|B6!oplUY3_f7x+0DE*&PE!B_2P8#A6k9QK zZwU46n}cf;?a#{e?B3m*a4HSt{P4Puc5GWwMMFb0Bk11D#hGyY>*?j=-@d-7mXL^p zJ1MW7R`m4M($KWDshg8?Tpr!WzOtEwPWtuqV!`Ur9tkRCwC#noCQRVHk$L866LUQDBN(zG{_ox}WE{Klc~+dzja(Cp0lNK3RW% z@OEo=_v`Zf+}u&r@$oT^%&kxP^AsJ^PCs1HUgs3;?b7D%^8C_tZ&%)~uC5rT8|#}J z8|mcaVL>jbQcNl?rnC(@2deYP7NX~V5JYhsFMvWf0u4iGy8#Vj!ldTRm!0YHp^9#0 zs{VHQ;tY{eYySl(?TmIzF+M5Sdy^oV#ucuT&`L3^d_!2R{THCLv+iJNXPsc_jZZJ9 zh9S4r+T*P`kV+txJX)A4vXLq7sHXet4<@+vIZ%Vs5Oo`D8CoQ?5=cE$yaa70Q^xzu z=Jt3s8(@vq_YJ8*b>^YcA*{+PYq9c5@%2#SXdMnnF$tu>5C^7U$mi6V&P@~@pi=x< zo>y(KDcB}fG-vi+j%9P&>FvVG)*eYKl5_g_7eiIr#dyY-*oPPDzNB^xTa|}o{XeZQ+MgqlpytS1uSffqS;!1JrHEa-Y;JpRO-47 zEQN`zj>8a5!5-_LW0tbTB*2#Kut+;Ba0QmaL{`UPhze|ZS_M`DEKtKrOs{|I^L@5D zxn)RA?O}E1^QwD}8J-@8tt2r`5-X%iY!E@EByeI1t23Wh-E++F^f>&-xWY7zs}hR{ zYqQxZtTtErcbi>$KJSq_r-OW4Q35uiJ;F-Rc0D*Tu#JHgTHv-{bnYBjI>^TrC15>T zuwrFs!HNm3*isycBU-DX_2}JF){m;~LlZfqj8#Ai({vS9SW}|fU#TRo`iWRnF_UwM z>gOgWkCd_UNO3;t{%R#TqIg#YqMcMRlX+p)veOfBZ52gpZ#?TWRVLT2uWzkr6sc;1 zr9msQO01772H2Qb2bHhZVQ(l!%Lr|_!bY}tN^Ek46k7DCS0BJ>2xJgHeGi=1N?xKx-|sSVvqb zI>eQt1(wm~+WnUqw`Ey0R{~;t*GgHd}w$>tHKSfQld+z#_=f>E{SHn*_mx7OD{4Ng0vco($8_5Mm~Tijl)?wv-j zd+(nqD)o;JDJFq5m@cnaAUd4yuasMhJy*!up}5Dcu~Tb6^-Oau!rEGO95y#&hWq{1 zpfW&>n(d{PxcdH0?i7|`fknw_7zgU;{nfnX@V4n&&zy;CuNn?%h%1)s)YN{{@kim& z`>QoXiK=coXrVWLDSo!t$R)s*?66Uz_t)h8HSDlaJ3a7w;)hp48WSs^G)Se<`)il? z*HjDNvximX@ta0Y%l($pGOwJ*ypPNSS zuYY`hZP%Bv?7=ko(Wnwu45erpp&h-y{`LK}J+U(@*~6&1*g!yS7daKwKz8*0`Y-RV ziFO|3s`GiR5tKXYh%03c)Y1FvzrVjqv!Ap7uG;*sM#I`6MGe|>jZo3({q;BdW{=ZM z420oLqVJ242%r!NDkK6W5~4&18mMSc?!bX4(oHufaG92yvEy<4Y6TSRj=jyiwkHR8 zH1W@q{K>z9?4tS=c73;vR28b!OjU475>@xFfA+7)K~po+dtr*8Q>7|Xo$gZxAu)my#Kit3e^smUKnys7NWTupVxzx&tT{uMc|bc20bZnasZD%89b zt%7y`I>^7~EUG*u&Yww$%0#;6Rox?gR;RiL_mt>a%0-wjRNGH_s-0+muB#=*(`Yc2n} zn3-AgGe#0xVTzV@|60+%8hQ2UinUn*H4bdB?q6&A*Ui)f>wO5y6~ULV#Qkes|N3fj zVGV+{i+8RZ$dqLvI5oL{9l^g2{{8UVGURT>4oexV``0o2>*8(b zaVf-bq$;(09CrUYj(&X7~v9GrI zi7F?i?qA3Dub*G+oK0&JK^(@hR;{4o8&tH2;v49}gNWeELGd7hAHjnM{SJPBN}wQ0 zg|@K)k>(U>b6gO1ky406$ZeCbq=&^r;%<)Koo8pVlg-O!w^cLg{GaSjpw}PI?9Ts3 zvm==^H*27+oGQNLMhv{Ls(^oen4ao20}(C7cjT>! z{HqfFHT4j2Y8Fr>S{WcE|Eh+6J(G6WbYBqVP{o3vs^ni)@vkq^QJpzokyYi3EGzj} zb^Pm0%0UED0aC$Mq9y;TkbgauW+?H@FiiPqE#j7KCI70De@&s(51up`)=EegP{T7U z`B$a<>(PVBkE~{QS@|ORYLI_b%)cg9bmz{SCcxqf!|Pfk|EijQ{g(8t=|X^%-4*r; zkp_Jw|EivUy_1aU6*GuYi8i)~i~OsC{`E?t!_6#XTH#Q6BvkURD*D$%v!>&Cu9{dt zHuCC3{#8x?dMUv$_=XiiMPJ2I#6td6P5*j(DoI&I3~_~ZCI70bf4wxitPH3nxT3H8 zM##S^>tAn;s_Qc|l8P)V`B#Pg>xdEJ+znLK>Xa302QB$mh5hT%xe;Zx*oQ9&UYPho z{#9xJdN}^f3Y@qR-d6E!CI70lf4v)B190)nRd6_V<>(?bjP+^CS7!-TT)& zgQ)Je02S$hn$o|P8$KiHI;EA(b&*fe?jQ8O=bWmHoJu6} zuK`ZiS?Odw4OW@FZ_nnC_Gy?=c%U>tlSz`7;Snt;mJ5&jiG+by@Wyu5t2#%J=cY5eQ0ef<+A5RKH8bB*<{CTpnYEc5(TtRhX<_N(v7zb5pr{gb9+fVu^= zXsrpTd>!UrYpkO4OG`@t`Y*7`ymdUkO8zy0f4$ki2MeTFWXys7)vDXx>JsuFup(<~ zYkAjhd?5cC?_c|N;cI}(nM$r`Yp;K;`Y0*#f3YGtr&Tw|zsC62>ApP}>1@McBK{Rf zop~@F3s#Y)SN}-iD;B|4`qzf-&a;diEArc}l7AiKUwa0K2e!&6 zD+k;6gcUWNR|V?^%ckdlB>&pyU#Fw;h9i}Y6+uy1O;;IB#jqldT_yh-^{-KlGrJYm zRTdUk!wzbyCf1Gb8_l0p@~>U~^-N?Q%&3+HRV*x6`Qub+tl4a~X_v{rcKmB(E_^(I zid&+^-n%-l1lAw1SUFkpuiWNb>UMJ7P;u43l&6nv2^m*gHzLUbYe<&-EBksPsZKpE zv%2CFz^%63OeUic)*qv>B98x#{Oggat`Sog)JDt6WF``8Hk)fzwfC>nQni*5yfyKn zPApbbw*5hG|N1~aTFbnt^%lc9;aIcTHLs?#f4vh<4j-eeRU1W($12l*O~Ct+Q9C+r?4(AX1%JO{0hl+WFVpoa%|p@a%dMmWjcdY`~Phtw`Q} zubY46KSg_WBC#fFD^l37-|OXH`9R`q8m#Fz;jv>aFtG1*@~`~oLGJE(tc5~udqE%n z`Y^!yTm!5OY4TMlt?A%jui!;k6Rcmp;QsQ<*!%wVFkXc9!up53d-s_k3c~xl3GKd++rfx0-ngD8G8S^HDlc^_>@tUu1;9#7fcXEV0-RE;Qi|k@qDvztgY7D z*FpEM;t6N(g0L2%Mc!WsxPM(CF8UXewe{>{!2RpeWIbH$4vSyK4JDthV5c}8V$)N>cg{aIbGJ6+b z|GF*NVucldBEg-t(;1%$u7BN-?61UHgy*zUZXzIx%-)68zwS(SQCN9Ss}`%s^~uq& z`q$0Lo&{iqXbJ1}(et4C*Hw`KQAh)f#Ji_S*mcHFQ?$AuQ7Q z=zaehS!LFF-Zwq(Un8r`T4Z$1@BUS=7SXst)MtgLn$_aAB<0y_ulv`?`ft|Dt-jCw zYh*29ZC@UE+`k6Q3eo>#y*z1n+rKhq?Yd@#Xpw2t*Zvi(RcyVQ*1v4kq6ln9XFTm+ z8MAiXvqH4U?75%)Yrw1!C9@)}cV70dVX{J0i&f-$-^cznvVs+&QoefFza}}2H>`?I zj{L}~-jtDlUg{TqMyF=gl*T`Ch_3p&8{?#8=Y)h_LMaF*h zuLY|d(hcHM5e-)2pD~diS$jRwO|UGAd{2GqU;Salw7O(Prm08$Yxu0fQim0;4S)Jq ztE~9!vNKkQnqo!1H@xXzBdc;-k~8+Ef1R@$T!)<0d3ex<7>f5;e~%^2(3?HL?;|MFw8J$Eih; z4<7WdkrkqqSRdWH{EmPB8d=G#k9yD9_pc$bLewtnqi1Kh_pdxz6`hLQOV*!%waJS6evYhFwk2R9H;S}hGyeQ5SZTJ((v?1~5Ctp!-jLqg(6=R|cbo6` z58GtLv~pz4Lzc`E&T?O&Z>VM ztg|h>6p|Hxts>vfWSCsu|GGe|mCxTB6jo#^hLy?tUn6S;R*0%tANPeTkN3ZN%?eR# ztg@(@wRcRQvgltIgO#u?X|O&XH$*t}uXEO?A_`l=I$Xk9gvu&+a_XB1%iB^J=C9nm zdGlTF%AkK;3|7MVtHnBN=AQNUuU@k{-0*4e*;m9P$5Vpabc({VYRwxyeYWRRoQ+`n>WEq}J*v@QL~`tm~V zT3`RleOjxrI=h5Wvm)QqT(!pj)d?#;yKIb=)3zie<-CDwJ^gEB#kORK6MVi z&bCBn6`7>@wAR$xI?>tNyq6Mb6(CZfiii_Y_|K&`8P<;2?6XQiLNc35X=if!0^|H^??qr9=TE$Oj} zd@M-o>0db1bi4y*caz`;uI@xoKKY|C*c>fvCEE zwLGo#PR`D@L|=XX&bNGA5vTntk=60El33~IuT|Dt16(0G?_Ygnl@4KB+mb$O`9$g0%=~9k$F$x{0v2 zEm3Dw1i(Wq!%q9xAXy3LuR&H|A}`Mr&#tceS6`=9@yKdxTcWcflSb~Ermp+f#buQ- zjkBIVpZ&Z%Q%tGD{x!g9C2UKESb>Rv_53gu5u|SWSFkE9Yb;N?)wO;>T(K%I^@)OtYLe%8G4?&PrdDq1!o5@S8?)3cKuI`LW{J#uO{gUz4mdW;yFrsOGRP`&VyR z6?Ghu6{4nDfr;FDP>`n1`q#x{g{T=;V3ub5Yh2y+uUuHWI;^GN(+*J)eOA?smgfEm zpt|Z`3s$x5QxO#_Vrg1Qb)4?Dq`xT18UC79XZLBAz>hiS%lT3hqkx69L=8$fFRz{*;i!KFt+-oy90sj()v({$UG1(l>y4#I zL`#i&bFJIj-s;`Ge=SWbeu*HYrB5+WC(;ssPy!Y-E1=a)|H`cO$zrE9h(tEgptZGg z?*myYK7a9Ul_MzOTK9spqdDxRe`VDAq}OVQqtR$>)Ie*_M^?I4FzPHQfmY4(*^yT# z{VSK&YJasZ2xzsvHw;=`1tnbT-$ZJllsf5OOK)v!J+rXg6#qwk^%g-Zl9sIHUobkA z)|cgj*XpK!h1W`Oi)gKG8BXbDcWb6rq_=UHmgqsrWF^)bXtQqm*V0>yTF>{}VtUp( z_m84=hG~hebq^k^i~iN7)^n{$*dglfq-c$$60|a$m1sf9;Fi08Ej_fO^~~Zx z*ksTfN=14bS80j9Q72gslvXX)MgLlgPd{(x9!{zCQhy+9)7*G~X?@I>mh1#2laJb} z{^6p3ogBh+w{yLw;Go`lQdMZDLuhHqbW3=n#38(p&*uP)viGmC)|k0z7VO+cU2xI( z`Z!JN6h{b4L5Z&Qdz^$J4RiOe6GND)^;}bMQtz8}+%##)Vo;)M-48|+IB?LvDyN-n{aTe({{B^IRp|d;M~!2O*11k3_=&zg2Cdm?DZhkc z2ucL4-?dTwX4(5!WC&}}`ZXK~H#B!X($f-tf8Y;F;UV?|1w2;P{wfZD^={?vUqP$+WO1!my23r}8feAR60X%*PzqC~ zuoA1)^7gOj5YBe%cmTs7hP0G_gutRNAt;eN;;bv9!zj$$zb0Bqxd{fab9V28Ry-}? zS`nFyTK58tmdf0}CR!=E>3mnrj`qDQt)y!q;f-3<`u>r2s(&!|ub>q`bJLYIF-r!u z46USVVO~(OsrCJP^-r^syj5+Mw|_OXnwdCNYjq%IOY=ICmIzvrH_E1UGtg+Iy!~tG z#sNpkP50_z)--M@rNp!Z(br;73aR{&K_G(!-u~6lnwy)#B{6%Jc8F;y{~LwuTHzzk z!GmS(Uk$B!hl#~V_(0U7r6u|oMQv)meqH@bSPvwmCeHrV)Qab(zVL<4m{u(m$kS>u zC?R_^=6VY1BMz8l>|YJ7cy3x0{?LQ8MAiBnaIQ7HDT4zz``1J(U>G$B{g}WB(N1bw zf>WVCK?#O%%nzx&CT=*?+Pz zY1~y>GfOzvLeHT32AT28{h{>5k$?3S&d~VORJ_`(Dodfe@4skJLSi@>j+LL%8}^ zR4W{vwuGN-=V(opIa{s2brK%#SFZjQ(+WfQuJDyUepW)>C|^dx39m{C%ayHv#kFdx zzJ*|*Q95Ewl`5xf{cEn)itw9$mR3`yH(KA7)ngsr5ZU_IJgpb}U96+^ znxmB-l!zW_S}V)rQn~uqJgqI^J6%L8b)(XkDP8L~nLJnRm8*Zv(Rxn!PcQqdAU(ZV>+nGg;k6Ocv$#R82%+SB0 zTJQVRoM#i=O4AB5ooA#9%Cbz*UYYt=Osm(2h;iBzTIXxzWeR%~08N&(mM6eeQ1V&pAEgz`^+K zvJ6vLGW4(6S_^SD9H$=ZEQr?MN~SWaoig;V*;@ViHL9c1Asmx1kNjGnmt!QnSBCyI zORIlh_s*l4t99ySTCv1ykg8zlUo*58=fDJP6h`Y8{an=_^_Qc6&Cu$9dp=29$+WRd zD{S0NSdrsWIr`VqsWhwAVpKOK(Yc~%T`w!Zs`dW$Sm|_{)?%F^Mtq&Ol9BkeZVsK6 zlR#|0e?3+@k*3wh-=xZCFh3zRt&f?#*1cr6!l}u2|9ZT1GR5i}QB3}^cRs%{gkcBT|B)xlpd*{jzg4Ds#&J|m9(CWYOPpOdE2;{rc~=3?U~Rid;WR=2BTVKMRGwVglPRd zj^j)(JC!z4Kgi5Yt@x%Q@OI|uZJNQ z(JFBsY?!$bCZ$>z$tvF1^Vcj4M6^men%2ma46QZaDyikoU)MojqgAORCe2b>v=)km zc*et0FLLLvYhZVyR+(dd!w)<<4K%!=`RpS}m)b7OhyV@jTLdCS#U6 ze_ac3K5SLgsqZMIOCq$swr#TN>g3H|Hv{PDA#ul&&5{VMZ?sc$XU<=b0>I#l7uR2q z)+I|eAK0{#AAa7uJ_E}ubN+f901n*>AvKgUR8q1jYW-=L!yZiQD|7yO0swMht+IDa zmQ`lZ+WBhzg2n1rE8ckX*DL@GgscksQfqT2L}>l3rBWMa&0lu`z@CuRF^OjmgG`Fh zI*(RSEv>MO`Ri%`$eapll^ow_mRe~=Nok8zKl&6>Y%&Vb9YpjNpjBMe`QaipkP zt2W|`MX8+m>pnov1hq;|KniKebhI%9+1z1tix^&o`D;k)U~>$2@b z%PU*{+6$U9V}#6a-voJC5I{{STLsNB=C21qlN%$X51A}$svv-xZKGC2iz{FLngz}7 zF+z6QDn{!AG>VrQH8JL|>p_z_^{h_1Ug!BQlnMeE*G{Pm^X0ENW73?YYL%~bvLJwQ z*QyGN<;!0WfZ^P=I?^ZoLbMirr^;C6%U?Hwp^vm$@+n9Fi`BjAQu*@N9x!Y;^}kwI zmZI%RrE+DaUs<*!>-L5MTH zR{5tRW+Z4`)KbYTQ~tUYplKKGg0oB_v^oK=_#adLNcZNq^jZJp(_sP3qgBT^bz#Y0dovK>tkx=h%rr5Ypb4)S-#w>PvNlWpdKd_r3wv6n zKe(2kMj0K&D*^1EhR=?29Ea-F=Ez@h9vtPQr&anBPDO;)Io*T_j{NliG-JTiD(`hw zVWzLPCLK-qy;rIZwPB9@bsaQggSTnAX~||*gw|im^GZ?~@>d!hHrq7G4$@0k+GtHj z6MpA7Bo>V_zS@STNP^{;=hN`Yv+DO@BzgXNVH?CSh*~AR5c@62k~V3U9FOTPEX0E&3D>LK_ux$BV<5M!eY5uI z_$K`OzH{HHgNtjz{B_HAfOh37_pMbkLbT2qq2^Kv^VgjKZOc{e35jnh)Y^<+SgrVn zQWf5k<*&V~pbfcu_wGsU!qkIVwel~&f7-j3)+VATfa5oc4-BX&V)21dL2avsDn(Sp z7PYt#tB4O&P|<}?e1pP}50Hf$A=wBPE!0;99~9Gt35abMf+dMTEx|^#4Y<(SR%@w( zb8c=u9b(71lj-E%ssE<>0e+m^n>nq%xrt?I^V`2pA^*y~s-a;(k+XJ5SZl*W!;15o z$Nm+ERj2dvK4|I=sQC?q)K+_AI;_uCQi_V@wSS#XFul*Na{eaHs{l=W*6%kTJa_=K zh?>X#6+g4;wxOXx&d2>-vat5RTQHbn`Rrd85ku{0xFh4wAI3ij#j11i{>n}(yAD&- zJoc}viLom0HORPh%>-m&{Rp5iuJ}G|e*d~+4l&r;moolDQ#z0nB6Cw)?~M(zqZLdU zt@-`yEMhdz%Ew<7*@^}Jo`9^cfmAcB=J&4~ClbTWek|XwSPe+STK53DshL>Q``0PN zc&^QlWc%sdII(8;ughJ8qf+TUpH@hdsVL@Q(Y3Vsu$s~`o(CetjYcBvT=m7#dl@;QMF`1 zBG%VHN~56gx5@qM1j5|`nSRNt%P$XWi#n{?X~kQUx&7-b!k=fmJf~}-QzF*yK#EaP zQ~TFtbBT#cPb#vM_G1Xlp=_R-AH9bitzpe=n1BDeVm&d{aao=WXZ$j;ehh;uprWgp z{p&PhE|*V^MNa&KRIG0)tA^Ih{uLiY@K$z8k)bZXOsusLxG`y`)x`dF<9K4a8W|oT z#sX5Y_ES{&!f`dRf1O0~Xs056X+OpR%%NXvT4VcHNb}6li63)fogoQX-$Vcv{=oB60)`cCp}x+a8!-& zUl$VMY}a^qNJiE#5eUW=Y6DWp;Qn45J+YtSO9bqqC!RsVp+bZqSgeiF?NE7IZttKGjAFCl{DK6IzC!`e?f zuhOcfgIIe2m4&Fe``3Bv#u0HU^*wvmor+sz8c)GRNsl$xR&dt0%~AM*7rqlmbM~(@ zCKI7@m3yBxUQd6u0QKuY@JhWAR^r^1Tn?AIgl})_wuD@EZVYTRhEiiEC4Vcmwqm2Nn zX8$^W4iUB8+Z&%lt-bFP+@u3PuBthb^$QFuyrP=GlU2Nk2%PJD1+X@$`O~SS(XCr* zpc6znS#xbgWgU!CSN5m+iU2C^Uzbi7?@-m|F0aV4K52S#qqU ziVCt2z_JrIGGCadzg$%w^O|K9_};|L`UFXbO>EHuaX+X2D|d~rY0R_!Qb(1(3qwqG z{v=uMNh4IYt72qUjEfaRQOpio%)k>S0Hw0*&a`yecp`tUk}cjb%-RFPN>M57(y2?N zyC&($TF5HMy~z-3@a-_vA_tic$sXHo6{{cztRdF#fJ$YH7ff)NDXXl!$~)Fr2Px^M z`O}?no{pHiWS7s&&C37bRo~V=;GZvEY??o9iRAZQL%B-Jt189@>;ALTCp+_