From 961c212c4f97846f00004b37e8dbd94b124a2f99 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= Date: Mon, 1 Jul 2013 21:43:32 -0300 Subject: [PATCH] Imported Upstream version 2013.06.34 --- README.md | 4 +- README.txt | 4 +- devscripts/youtube_genalgo.py | 76 ++++++++++++++++ test/helper.py | 33 +++++++ test/test_youtube_lists.py | 24 +---- test/test_youtube_sig.py | 57 ++++++++++++ test/test_youtube_subtitles.py | 38 +++----- test/tests.json | 19 ++++ youtube-dl | Bin 117178 -> 118827 bytes youtube-dl.1 | 4 +- youtube-dl.bash-completion | 2 +- youtube_dl/FileDownloader.py | 2 +- youtube_dl/YoutubeDL.py | 5 +- youtube_dl/__init__.py | 6 +- youtube_dl/extractor/__init__.py | 4 + youtube_dl/extractor/arte.py | 122 ++++++++------------------ youtube_dl/extractor/comedycentral.py | 2 +- youtube_dl/extractor/cspan.py | 44 ++++++++++ youtube_dl/extractor/vevo.py | 1 - youtube_dl/extractor/wimp.py | 28 ++++++ youtube_dl/extractor/youtube.py | 48 ++++++---- youtube_dl/version.py | 2 +- 22 files changed, 361 insertions(+), 164 deletions(-) create mode 100644 devscripts/youtube_genalgo.py create mode 100644 test/helper.py create mode 100755 test/test_youtube_sig.py create mode 100644 youtube_dl/extractor/cspan.py create mode 100644 youtube_dl/extractor/wimp.py diff --git a/README.md b/README.md index 7d19024..81b86e2 100644 --- a/README.md +++ b/README.md @@ -116,12 +116,14 @@ which means you can modify it, redistribute it or use it however you like. -F, --list-formats list all available formats (currently youtube only) --write-sub write subtitle file (currently youtube only) + --write-auto-sub write automatic subtitle file (currently youtube + only) --only-sub [deprecated] alias of --skip-download --all-subs downloads all the available subtitles of the video (currently youtube only) --list-subs lists all available subtitles for the video (currently youtube only) - --sub-format FORMAT subtitle format [srt/sbv] (default=srt) + --sub-format FORMAT subtitle format [srt/sbv/vtt] (default=srt) (currently youtube only) --sub-lang LANG language of the subtitles to download (optional) use IETF language tags like 'en' diff --git a/README.txt b/README.txt index 56e2512..239709b 100644 --- a/README.txt +++ b/README.txt @@ -131,12 +131,14 @@ Video Format Options: -F, --list-formats list all available formats (currently youtube only) --write-sub write subtitle file (currently youtube only) + --write-auto-sub write automatic subtitle file (currently youtube + only) --only-sub [deprecated] alias of --skip-download --all-subs downloads all the available subtitles of the video (currently youtube only) --list-subs lists all available subtitles for the video (currently youtube only) - --sub-format FORMAT subtitle format [srt/sbv] (default=srt) + --sub-format FORMAT subtitle format [srt/sbv/vtt] (default=srt) (currently youtube only) --sub-lang LANG language of the subtitles to download (optional) use IETF language tags like 'en' diff --git a/devscripts/youtube_genalgo.py b/devscripts/youtube_genalgo.py new file mode 100644 index 0000000..b168cea --- /dev/null +++ b/devscripts/youtube_genalgo.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +# Generate youtube signature algorithm from test cases + +import sys + +tests = [ + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<", + "J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej"), + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$^&*()_-+={[]}|:;?/>.<", + "!?;:|}][{=+-_)(*&^$#@/MNBVCXZASqFGHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr"), + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[|};?/>.<", + "ertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!/#$%^&*()_-+={[|};?@"), + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?/>.<", + "{>/?;}[.=+-_)(*&^%$#@!MqBVCXZASDFwHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr"), + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?>.<", + "<.>?;}[{=+-_)(*&^%$#@!MNBVCXZASDFGHJKLPOIUYTREWe098765432rmnbvcxzasdfghjklpoiuyt1"), + ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<", + "D.>/?;}[{=+_)(*&^%$#!MNBVCXeAS.<", + "Q>/?;}[{=+-(*<^%$#@!MNBVCXZASDFGHKLPOIUY8REWT0q&7654321mnbvcxzasdfghjklpoiuytrew9"), +] + +def find_matching(wrong, right): + idxs = [wrong.index(c) for c in right] + return compress(idxs) + return ('s[%d]' % i for i in idxs) + +def compress(idxs): + def _genslice(start, end, step): + starts = '' if start == 0 else str(start) + ends = ':%d' % (end+step) + steps = '' if step == 1 else (':%d' % step) + return 's[%s%s%s]' % (starts, ends, steps) + + step = None + for i, prev in zip(idxs[1:], idxs[:-1]): + if step is not None: + if i - prev == step: + continue + yield _genslice(start, prev, step) + step = None + continue + if i - prev in [-1, 1]: + step = i - prev + start = prev + continue + else: + yield 's[%d]' % prev + if step is None: + yield 's[%d]' % i + else: + yield _genslice(start, i, step) + +def _assert_compress(inp, exp): + res = list(compress(inp)) + if res != exp: + print('Got %r, expected %r' % (res, exp)) + assert res == exp +_assert_compress([0,2,4,6], ['s[0]', 's[2]', 's[4]', 's[6]']) +_assert_compress([0,1,2,4,6,7], ['s[:3]', 's[4]', 's[6:8]']) +_assert_compress([8,0,1,2,4,7,6,9], ['s[8]', 's[:3]', 's[4]', 's[7:5:-1]', 's[9]']) + +def gen(wrong, right, indent): + code = ' + '.join(find_matching(wrong, right)) + return 'if len(s) == %d:\n%s return %s\n' % (len(wrong), indent, code) + +def genall(tests): + indent = ' ' * 8 + return indent + (indent + 'el').join(gen(wrong, right, indent) for wrong,right in tests) + +def main(): + print(genall(tests)) + +if __name__ == '__main__': + main() diff --git a/test/helper.py b/test/helper.py new file mode 100644 index 0000000..842ffc2 --- /dev/null +++ b/test/helper.py @@ -0,0 +1,33 @@ +import io +import json +import os.path + +from youtube_dl import YoutubeDL, YoutubeDLHandler +from youtube_dl.utils import ( + compat_cookiejar, + compat_urllib_request, +) + +# General configuration (from __init__, not very elegant...) +jar = compat_cookiejar.CookieJar() +cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) +proxy_handler = compat_urllib_request.ProxyHandler() +opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) +compat_urllib_request.install_opener(opener) + +PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") +with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: + parameters = json.load(pf) + +class FakeYDL(YoutubeDL): + def __init__(self): + self.result = [] + # Different instances of the downloader can't share the same dictionary + # some test set the "sublang" parameter, which would break the md5 checks. + self.params = dict(parameters) + def to_screen(self, s): + print(s) + def trouble(self, s, tb=None): + raise Exception(s) + def download(self, x): + self.result.append(x) \ No newline at end of file diff --git a/test/test_youtube_lists.py b/test/test_youtube_lists.py index 320b440..4486b7e 100644 --- a/test/test_youtube_lists.py +++ b/test/test_youtube_lists.py @@ -10,30 +10,8 @@ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from youtube_dl.extractor import YoutubeUserIE, YoutubePlaylistIE, YoutubeIE, YoutubeChannelIE from youtube_dl.utils import * -from youtube_dl import YoutubeDL -PARAMETERS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "parameters.json") -with io.open(PARAMETERS_FILE, encoding='utf-8') as pf: - parameters = json.load(pf) - -# General configuration (from __init__, not very elegant...) -jar = compat_cookiejar.CookieJar() -cookie_processor = compat_urllib_request.HTTPCookieProcessor(jar) -proxy_handler = compat_urllib_request.ProxyHandler() -opener = compat_urllib_request.build_opener(proxy_handler, cookie_processor, YoutubeDLHandler()) -compat_urllib_request.install_opener(opener) - -class FakeYDL(YoutubeDL): - def __init__(self): - self.result = [] - self.params = parameters - def to_screen(self, s): - print(s) - def trouble(self, s, tb=None): - raise Exception(s) - def extract_info(self, url): - self.result.append(url) - return url +from helper import FakeYDL class TestYoutubeLists(unittest.TestCase): def assertIsPlaylist(self,info): diff --git a/test/test_youtube_sig.py b/test/test_youtube_sig.py new file mode 100755 index 0000000..e87b625 --- /dev/null +++ b/test/test_youtube_sig.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import unittest +import sys + +# Allow direct execution +import os +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from youtube_dl.extractor.youtube import YoutubeIE +from helper import FakeYDL + +sig = YoutubeIE(FakeYDL())._decrypt_signature + +class TestYoutubeSig(unittest.TestCase): + def test_43_43(self): + wrong = '5AEEAE0EC39677BC65FD9021CCD115F1F2DBD5A59E4.C0B243A3E2DED6769199AF3461781E75122AE135135' + right = '931EA22157E1871643FA9519676DED253A342B0C.4E95A5DBD2F1F511DCC1209DF56CB77693CE0EAE' + self.assertEqual(sig(wrong), right) + + def test_88(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[]}|:;?/>.<" + right = "J:|}][{=+-_)(*&;%$#@>MNBVCXZASDFGH^KLPOIUYTREWQ0987654321mnbvcxzasdfghrklpoiuytej" + self.assertEqual(sig(wrong), right) + + def test_87(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$^&*()_-+={[]}|:;?/>.<" + right = "!?;:|}][{=+-_)(*&^$#@/MNBVCXZASqFGHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr" + self.assertEqual(sig(wrong), right) + + def test_86(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[|};?/>.<" + right = "ertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!/#$%^&*()_-+={[|};?@" + self.assertEqual(sig(wrong), right) + + def test_85(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?/>.<" + right = "{>/?;}[.=+-_)(*&^%$#@!MqBVCXZASDFwHJKLPOIUYTREWQ0987654321mnbvcxzasdfghjklpoiuytr" + self.assertEqual(sig(wrong), right) + + def test_84(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?>.<" + right = "<.>?;}[{=+-_)(*&^%$#@!MNBVCXZASDFGHJKLPOIUYTREWe098765432rmnbvcxzasdfghjklpoiuyt1" + self.assertEqual(sig(wrong), right) + + def test_83(self): + wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<" + right = "D.>/?;}[{=+_)(*&^%$#!MNBVCXeASCR zE71QCQ#}cnyt?7?bjWC{OUC({;yW|@7ex&)Z^ad5bX<4?s&ZILgO5Xc4Cbn%I=XHG zdV}_`<6mS~X-6^GFfpYFWKh#EemS8;IlwR9lt6Nbc8t?;kE+%4o}|bbN|40NJIokd z0y1HX4lj&(+VBbM3d!$Vf8YRFgEWWCcPF5uQ_;lK2EJN{Xm_LtU|x>@+ARM_6T>=O zTfa~(sRq@i(CV>kC_9`MbrNkJk&_xEaIx_w9zOeQQ2;+a*oHMGlKdvE>dNOiTBdJh zUtiB)L?#sNp6ZZR_;PcHUK_2ka-F2c_8}lk)f}&-EBMYL+<~}2e;G|No+lL+Bzy&K z7@zaw3H)dqUu;6qw0*Z>$qkH(ED2S!F$HctI6^NQ5%g9@M`V}T^|-?_M=|gNJdv0< z>@XoibnLvfP&9P+hKkYt+xKtKW1V6=Dsecq5y3 z4Ves^nPZkkkUOaAe_Xgs9D6AXpIECyHOZ`69)f;bh+m0K(~tvngc z`z^E+S2f8mACf@r8oC zi(ipVcMHAaj6+D8r8x>BO#JiB(d_(tk6_p@fB$fXf5v`83jQg3-uO`-3g%y z3uTfU>ea5qu%+QfV@gYHO9(7fl04(+w;Nm-Z9!Rl={Suo3f_U(! zX7e;ptL0{Vv_^=A4)gBiWd>>FGKM=TJTUm4KYL7ZoEY#< z&tAX(bk@};nMjP8OfCA@?4%MO&)$7#MJfUQ#<&1EYihQy@ZCom|<(AehL2BhESP*AZ%tHHs4YBNZ@yQcjRX>or6JwDn+S#_f7L2$-Uj z*1T!61lV}Z?+W*-tfCB%rE=fPZ(qLse?HJKW>J;KA=bNSG1(9kmxd@fr6(1{n-uWV z5akQg3bg8jC?V^*$%rxVLmYWBsjlb$J-_u#?X#guMZ614?DMJ2yjG1nh>}L%2_|&H zKAvF_EU3ab+y!JE3nVT4BvZ`R?ED-w7kfw(j+~faxQD-vyo-zTz9PHaVx(pJe`3&N zyPDwC)?8adV8p(?b-LzN=Oy@wEDL{W3R+gnqSY*kXmXe&dBM*GE%~i|>K#zKF})wz znl3HPTN;aOOcxP*EU-7_HfO_U&ElffT<|n2R6Pv5MG|L#^c}1~%^^)jEAH4^Q9oAA zu9p}isKzH?3(%D7f1Rbtb;+-2f795Bu1Ek|#A2&mk}%ZIAyrQra;~OGaTBe*VT7bc z+n6*E&)a(Hm%$VlV9DH6oUf!!VmZY4yt886PaRvLy$Sa&4AH*SqHK`p!dXvg%HK;O z)P7Cr6Ae+A-3_e4&kUlxOZ({qc3OZlM*`z&D#wjXNE;T-C@+~~>G_}Rf7!F(KMw-% z9=TVGh$e!_UsQz)!+GtD-D9!#CEvZEHO(HC7?g!q+Pi8;jGpOwi97db&#Uw;ag;-t z3w}tTT;YtP1S?T##c3;Q;CNP~U4b|7VEeIRK7{#P+7uxF9 z7JB~CA%NE=31XezI~L=Qf4fa-GtJgk3L9*qQ0%tC?E(#g@l+J=*{y!-jj+%x>=Jy7 z73pUGbH3k06(xfDsLY^8V z9&%q9QR0IujG{b@xW&IQ{sDTdZs~udj4&wrU#hlSk(U!SnCXHXfBWv)f{FD1k!0cB zyHj+VAJ0xV<_rf_PqqL;guFPPUa)OqB*^DP_mUI=yQ|m#!!6oDW!o}e&U-Aa+W(ui zKg_Ht#k;pvGtHW|Y#n2U2QflC@nPr>W*#T)n{y8yco#k81UktgYgQ0zRN%q~(}JEn zLKXRUS~kdBLO~uIHC9ePb(q+*8Wm}_8`l|>g4}f(6ZB7u&-Q+DdEOv{@ zZm4nD)veCtwtciP$@LkXo~yklzaOMb&i{P?Rbu{cgD8@E1#Yw(Q>7gk;^}Htd9~(ec7D zhb_o9Xc8G|$$x3^V9yClI zBnbsD-}@Nle+vi{J@Tz5(+TE=Q_m9HHy~}Z3~ZS$BdVnZ5Qas)G|?G0@>ZPU;-(hM z?i=oOeX<2}+D-|BQ`~WZ0`6VUtP?&)pD#M$*pBXQLvG!>VrecCy1lmZ>mZr9D~&D? zYqF6s*?yW0(Tx@XtsGsh2lj3}6t93NQ@6q;;5u7;tDru(DBX#OWcQ0s581k3dEsA5faL#OrgV!#D&w&MiUnF+tCe|B|JtLR zzK5fjK*;<0Yqf5-IT>pS!_)>Ba2w+3{E4Q3NOxCax* z0~CFuUZgR&No-78y(X6;4Sr#YmkIBeYRm0hX zqd$GAHU*UYibol4ja)|cmO&seI)lK7sI!t+G! zf4RiT4#&_BSPWKmA+Jsl)S)s*mEpk(APQBhBM})xMh4oxs@h^Q24+>jPKzz0yoJ0t zP7|DXfeTL=RiE)7Q?pnI%R-2VYB}z8N)x%$9&y?>2f5S0;-T8a-_9vX>EZy8;;ItI zvQfTT@@*MK-amni#h=TlOjuH;SA1Anf9{_P_d>c`^`{ra*7Vx_?3QkKdTmX=-Oq2s z$oCb0+|RIC!;i27(mW*v7Y2%skB!+i7Y7UM;~#kHV`mzRnW9-goxH((wP_S~6>eR0liGb`Z{@Lu$T>#MOX(knD1%~~$79aO5XEU}3(e@rm_ zC0~7-+;Y$&+Eq?k@VM`+jd>Qmf4Sd)kM5^EP5#huJXR09MZ)Oi#^C$rEff1LP6Qyj zF#+^IFs_^Eg@9)X~$c*|@ub$mPYQ84Xe>Tqdh1Kr9^EEH@0C;`VeX-MY4P3TOwKZrhYpMySXqko5A7v6X19Yb=0%+Lx^=uuSH(4who*vu*LxHMKO2)OU-YzA8SzGjD#{@s{gsE51X&@2c0K(bDyks3s|}2l zZuPcy>y*wJF%zra{=2X0s?WxC$-%s8_;^&Iwo1sW!j9$kaUcRF^gY^&pN$5pms^6M z0m;54FnyET?aY^+*x;hqfA;AUPNY@aCq87AH>?<$*KZ9J=(-lky}&|f^+Z~Wv8#F= z-TR|HV$XXpiU2N-89gbaAG`z_AD zPQ^MjSQ3aFZbiwDw7uG8Z@IL&aaL4j1Yqapbc|waoEYt)U3`H0@@E^PfFiM0U!-3W7x4? zVqn;J{hqVmcUhr>&lQ(r_6=oeIODXsG-qJQ3QU6Tc9Ylmk*6xS zz}MV^Bu3tzPX;ztT|8SCEqZ^UOBL~A+eHI<2x2L!qcg4;6V(vdfYJcIF(jEpe?dZn zP?o*2s#chxH!<#Xn>SftN`Rwswx9*HUpVnWZ1(;IP)h>@m+h?q7_)#EJ`4?KklI3> zRA2Og8vp=$lglF`f5H&UQNj?*QFV9=009K(0{{R7=mP)%%{^;#+sKjM^(!V)=>V=N z*xs$w=9F+#&RX8+;&@%Movkaa3I!5F5i1Zt@Q}<)<-cEd&wDVSsC`@=t8A0NOixe0 zrn{$SeDb^JL)SiE7S(fJ-Lq!bZ|dskgq?kH##VJ+RJZ4Bf9Tg|f50b4N9(rUvNT-} z{m}9>WyQ9s+n#01t}ch3r{ed~k$hg%>Ra8ZZ!K5fy3NoRrT$f~?s%_%?R1B}*y=8Q zo2~dVTir=i5`@qxG`^4z`Dbj`*R6VS%lovb)^)1i$d+%4lE1DWsWX(jh_0!t zu2`1vV9jzlAdno}5ClMV$Vzr!k@WZv2ES;e{7X?fD^vqz?ga{bG9TzSpy_M zC{0`6w%Imeuev$AE$(^6GKt!!tG9DPAUCwkYu;5+&+e-Ffo)$|nAQQ%In0LO;51?S4RQwI01o&YF|LUkTgiquAP4=X z0HntZf7xXBKvTBmAojT!5%8)XI_l{S4$y%lEx#>*vMu2ZeFY`z7UrC=A2#qE_)>I) zn52JZ2;`#x7*u%)lo!mzChMZ@yoswhuZt@01ez^JQSAUD6om|h2>J_X&^%!u0h9|w zQeMnWk>8>_KmqLNsbDMgp)ZEOEnjn@#2h8jf0J?$kQJBQkYo9bZR!pMeg~3DXp^cD z7)uLLsO2w%%(PCeR=feWv9j)w^Gyaq%7H;bxQQ{Ws)@W^26ij!#fYScf(a|o!@eDe zN)JW90Y$wXw!G>)6gQaliUXHnEYP+U&LnGhFcyKS8+-r^1Q0ySiSQlQk5T2b`>ZGh ze~UJ4J=|_+Y(i8rqwm{d2?ms{NmzM6^gy=-Qw<5SvJ*O`WD>=w!Vov)4{tE&x6 zYibBd5>x=hI7gj?QPFgCHR%rub;gdj1KA`oWJ`QKmdtsj=P74@E}o-Vs(>lyOn*Mf zM}$o_06tY;tb`agLkn`k!HkmG0X=#Ee=b^`-^)jjcP7zsA-J7Ecsgaq5`}EV`*!6b z%jj8XK*e`49&eX0y49DxZ;Pr&f)*q=B`E|6W1j;jMZbRz1@G-%s1PKz4RzmwUS+qu z^ZNllD?YTP)%6WN65UY6z+}Lfpu1LwzUWJXqt}66T8#^v@_ysX*EZPAuw7Ole*)(r zui*2FW|FyUUL(l_jv$E)Sst+3Zb|-oP8~bfzGmm}b@F0_h0NyuXkZ~ds zBk&o(QmlG4zwTVkgqAIK{2#~Ue)Rfjee-YTnr3zDs`L_t^Nf51nU{8?`iUd9sp$y%+K1PM*aPaT0_hd{#i33l+{xSDI= z7^N+?FhK#u?b;1XL80>y3i@rRD;Uxm9fK9LI=8y&=abz**xhjr>pSh)n9jl<6etNk zqF}lJ-r^(bYgTImL9Lkve}sN#jKl}|NU8dD*Y?l5<^A*fzQ18{&ez#c_6vAAb3v3D zhFOFKd>fF`5@m+~NUW30#D;E`v@ShfbY0Nt+sOuA=d9|esTEY=XG>@1&1I6&lV@2HtX&~pf(#mcOrf6622|Dc=57VI5_HuNL~NbvjmM*M0T`5k@zxL65e5gb5uYO zcH+*=Ja(pNJ(lE4H+6j%Y!RTw3$KY!6aT$Snd@%XCBmZ59+~_O_WtHtP$jwLeH>ZK zL^Nk_z)j~f4>QeGD+na|9KO?#^Jkw)|I5K_6+6r_m9xOnp+Bt6^`T^cTV1sTj zGVwH44bauVCue8MF*(zo30s%hZTzq)RvQXbV7S!)&7iw5AG`$!96gtrcA}%15j$|1 zy`+sKLcv|(dzFJzPp;}P| zumnX=SOR?gvS}W{vah8aOXQ@-G8cxL*X2S;se|!*JM=J-2Z|foUXU^hTi6!eU>jG= zd|@Q1`%MbJFeKm0suxhLnebh4$+SlGz6$O*J?61 zPJ8J^FZ4{FSsB5LG4NQ=r4Y(*rvJ2eaQ^*Hrr7S?*SJa{uwimh_PiUN6?%R;t~qFpzC_5^11TGO-6((@>o;p zmvfu}IZAU%xtYw7-u#7y?Xilb9_b2898KXop6VzbzpdyoujL|3Zv|14s;> z5emsqby3BdPl?P6X_NUaK>|$GlRPdxB-j$q-xZA=Faq+R(oRf+#ZGZk=fD{OPvaVeAvnwvjUvPhxM8Mk; zK;DQ-0EF6u6E(^mm=wSeUE{iOLn(Lc6WT5~XAwkM5}7dWIytRGd03_@{qqR^R%ZQI z!rso53)~%a!ZT3&Cn~W7KOZGML;@LkPlUO4TAzaXKSuP{Kmpu;efa*Jo`ghcggy?Q zW`AW1_GoAFKDnF-y&bbbPDLXw`-=&zhqBz6sL2fy`*t@GJLsvYo;P4H$IuO2G^PeW zV+n+pAAhO}bXqPbUM7!chD5;~w}TO&ZG+$>Ei^2e78L-&au1UT4#d`%s+EYX+njcq zMae|hfxC)JUo~u(qJ)KKtBqI%$7wt_=Ry3;anN8H2II`N=vuOwV)coO)OWn%Wc00g zUvGZz<)F$65Kyp~_)ly`Iht;K9f2IJHqj0A0?#nE47=;T;zpj6HZeK^6C9IrF-QW@ zLzBEQ9Si7%snV9F-6z2cgp=ekGJhj02mZ8CFRN}?uZvZIrV%`QEY-kLvyS()ghBH* znE0GVN*lwJ$}m!Z-0t=pLRhD?D|K zlaLuRZ*{7|NyV8`6<_~RxlQWTG@LW}54^nm?%nrS7vH}6a4{R(07*Az0e?J3x(j5V zvFKQS&5N9dqd^#GBe=1ZXlu<5I~cQPmCFP}2lF~Oal6{apShW})#~Zf4$qY)1Z)a%W2g4VD;)Nm|top$JJ;L4?h8t}7}6@4bF7F~T$MPaq?SL)> zaNNpG@Ayvc4p1NJvG~`&ClVM+%QM=?mBqStRW2HEa=k=Y@W82P+GHXw*DO*<0M%({ z+PGr65T#2j%c#&2*$rAku#O`uDwW5lHtZgar>IrRbL|7d@->u};eWTMW6P1Cg{LMc zHsjL^v1mK<(uGr-)ovRqlqk3{ZR0$NXrwpBjiE&97FaZnO@g)zaTtmo>!)JictCSi z3Cz(%_lLT@qXlBzHC(ZP?!G*n08vaOL_yVDitU>YYs+-3w$0i*unqXLt?zK3CA@dw ze};&TUtoF?_o6Z^WPhjq9>7?aE~wAQ;TD8Vg*c#<;VQjOgc`S9Tg{c*%TCxE5W5a- zn~H2=Ow|K9Kz@anRV)jf{vSz4gbs^Zjdcr)G&D0S;}e9gRIw-5$LcP#5T7C>3n|@6prgJsb_{kjdfpxHcYVK{5p8AZPRx23EIj(M8?SJX5uh3@KSQ#{)Y9|<-=J5XK&)DBOXab0T zzg#@NLHHB}pO!n?lG?L$gd&6r({o}?aI3V=rT^jBKPwaB3y`Y+8jF!|C#F0II}!2` zOA9DhE>vAsTopXV&3!V7d9f~dF193~RbApCF);c=C4YYz8KbZUVj5U5<4;#_ySXl7 zr<(O{W^L_X%B?cT=dfH3Qd8}l7zaf8JQ8U_z|wzbmKI|8l1vq;tZGfNCoC8&do*w~ z1C_cI>#r!#M70_kJVyhwi1Y!Oxp>;D95mH4ll2y1pX>Qs<1f@mBbPzvAr7%hCrHAA zP8DLkE`PEv)AXKRYfZ9)%$MV^?rCggQAS+~b6#`8OVPrM4zPwE40-iiORWMF1SRq4 zcfx+);s~R3IW1RJ))WdL==ZF$f!N7}n0tVvKdTNk28n7LcgMfCh=)ktOs|E`M^W&= z<}z0BL|HryWrTts%R+<}%pl>l^aQA{&ODN*Pk(6&RSh2`p*9X9l~ge_g_n%nYHj7l-5P)9%JdU37|G=(lxQlBdK@a~UQV;FQPq3G`D{ioBg2v(wR} z;;?gQR=>F`CUb-TD20l$KG&+lt6@t!8fu2~ms5e@0b(y^cXCQ+fXLT~3m2CWyC{<1 z=l|OV!J6*@?d6IBaR7VfD#RY^H4X}7sDEsG^hCH|#EBoWRG5ynPG;9F)ftNAy+RMn zF6EJpD|Kjp3{f22f3U$VMQykMDPz;jVt;Fk{sX zoSppP>#u|TXxiflB_y3e)!dnoZz5`;RtGLGqt7VL`MH4ng=;LizUfv61?*Y+xeB1M zLBb;`9-v>~lN3060RxkeIC}!)$CC{?Kq1Ka3gZo)+af#KiuUVBLbV+y;`)SKpGxSC ze2i^6nA;dh8z|q^q=KB)rY4>{jeL%X0#qI6hJG`wX1e%L@-IRhB+vI~|vIC=7kM zW4CzCoj7Gkw_A|l43$jI)4fbCFomJ(npso2e&I$SF&0mA!GCl7iZ_(dw;8$@vY$Uh zD(^iBI8fegDdRFvJ>FrP{>LBiB15?cxIt-xVf3j=J=(D+&cOuTWZJ|oAh*;%X}bpe z>o`g%ONnRB$RMbibEK8~WY3QF$WT~C^-leIsPjI9;q=~THlX3O)sSSc3M2h`VymYiuTDWtVlPl ziazsxnL6TU&mq+*wbV5Hja73r*{7-}e*SM%)FR7cs*0Z{s;f_kUqfZ_bFky4j_FJt z1Ew=FBL_`icILWgBbMqzKEv2DwUa>oZHX20=icL=J`CDU4Q94OX%6u-itlRg!yvOh<<8r$6}K@LexIL+8B4*iX8QU95cslKrt)^`1b&iTd@S#w zK4eU(hf6rLol9XV>BV|t<)Zt>lU3d9uxGveDIVyiIP5YWZJLtm#dF zxhEU5*(f_Zb{*_X_x479qNnYisP^agZC&+%_Q$&Zuz``~yq=Ef zN`JrsRBNn9ZUMBa;KV}bCP5|MHWeQ ztlQq6CVtlCZ(u$SkiZb#aCmc-=aX1U?{LpgYmYvek$RQecrTL@Aa%z*m5|hHyujJL zyHW0ZX)x>?_ENGAHP*ef%1?}vl6?RYqJLev&{tXnE}L?XAyCCarExzXk#}<0PoMV~ zwU#xRi$J~Gs9aw%IA|&kbG4@QHVO_D*a|wNMn;@Iht9=z*s7z-)_*<0MXDbE`v`)W zL;VNfPyC!gS^Nh90Z0n3Uqb@aviz+<#tol&tn|v*ir;E8N>n_pJ32S+)j(<4L z%)Rf^)<)4 zfbl-Nwz$q!c88_{$C|186vBB3@ZegGhkOp)8d6J@bdcsux=aTj#`>fU znHbkLF6N47Ff9KIP)h>@6aWAK2moi0+CtJe8-%kS001&~000&M8~}N5b(4cX7=OYL z%TdA*%TaZB3jhHG=mP)%1n2_*0JL0NcN;g7e%G(S%E#NygiT3KoXsjnbB=7uwqnWB zQc^NmMcW5tgCwlJ8Qo2Zo@5^OpX}p4?Cbu4oc&*0g*o0r{cH&iP>lJh6(Z8e}BaRx8nYuO(x{ENQ%rtzRYMu$@>{V3{2VuAI~TY$&WOw zH2Gpcexg~DjL2;m(piJ&`y%8ZkT-%NvnbP{3m4=fA=i)8w)yx8O8=11vFWQG>QBhW zEY29{&k@MJ7{NC=Ng~Q)XJ>~;X(Dn|JT}hE*OcWc&Fp8A!l%fX{eQMO!lq@jkUiOt zWc5j#0I zR5n2qTqRk4r5c`8>VMb?*n~)VUZ#2GCV)-wfE|lz5wSSWjy@zY>mADeLsDNb8UQKa z&)f+Bk7>mG(IRJ=roz8mEXoi3OC-kx`aDTl++?(*>}kx>oSa>r3XzC<5rXA~h{@eO zc}8$l#5s)b?186*PY4!Bct+v`I!&+)a#w?ad;oHHUrU5;CVwG;fvus|Sq$5kM@qK_ zSsL=(4f~+0krLF6C|KE&36E(Qwo73!4wHZ>AY z$8m`3cwmc&<9RCE=@IWQ#7p|b^HeG1;`HYDhvOko@9b32XgSyHtyMXF zV3|LsVFBVltX1!j=NbIpP)01Lb1EvO=uX<*9ehlr0&z*xvlOZ1r#>ZeJ@u`5-U%zFl`BxWoic|slq zO$kzx2!9#|&Obw;KQc!!0$h|p!3;V9Vv~^V)O)e5w|5%dRs*LK6^u!gOGBvq*x)P< zz<{ve9bkDQhbt89O3ou&Mt`|sM@uO^Q~aRKcqrg484A_IBjo?BG%VUnIq>_i>a_YL z$;6;_fCQ?oWECh;Om?1w>P*R@PWDM?|jb+JO74ie95(GzvNf&~lH1s@<7Nw`_3puWn*8$D32Hm?`15(=7C<&A) z$A8hjrF<~1@U(RRU1}7Dei`DcoJCs|_NF9nG>?f9D*0kdd0X;5a?PV6Y>KR^2?H7g zdO(0DoheU>j9Ab*}@ehzUA5C<&FkDN+0YeDFESGL(e0ecEE z1{MQq9Tu*z@M#S7c??6nYC z&=N1?5ziZ_6adWDxkQHvN6z`##o3L81C|-IE-IlQ4{_OGIv_9i9|**nUw=LLCV%R! z6Vp(mVPK?LQ$QMu$t!^jPj7~2r`HxrTtp)ay~6wtvp550|8caeH`9o{$r31W>J z`Syy2YKDxhe5xfuB4-?6$YBPHmVX&SenNwfMTRzknTBC01M+HNVE3Du*t~ins_KBq z$s5JE2|PTwAsM@(@KBq0Uce)c8v=m zfR2nr@`!$#V|c?S+HZA%yb`T8P8Cc>wNf_b6X*j#0ZoYr(hx&q)$#Ut-G9IXg@KM) z>T)yWbl$2OH9;S%#&{4#BE2)n7@Z{cHS{iw#c{48Q3z*YEXXC0dX1Gq{iY(fa;DG@ zKjh$&%N2s{dm0)2m5i#r=RiY1MPXWz;u-=&-(xtWE5Zif4$m|Eu^^905e7uXbY1!$ zJj>I`1B~a)p95}LhAcx3cEkN|L>j7zsHUKtky1u=-8lGNX`|nQA zuXH?QgW6_Sz{r+5mE}~l4@EVG*R9p}^d8YKNwVRCe zp8P7E0(U&ZMNK+^8Got8h{zPPnvAsC(Uov`>`AWna7JU{v0ovQP^g@-z*LQfPSZo(D% zm4TPatoYUI)8U8Xi!#cGXeTKk479{;iyrm5Q&l&v`8_6Lg&DV*W!+cD*VjK@4o{Zq zw#1w3j#b?;Op?YO=EoV+9A>d2e-odxKEh}RU*@7L`tyv!=<05dr+^EKY#Gn`& z$wN8{O~`LcmkY_j3`Co8sRnuz!Pr*#YAUIiePs5_>VI3KQAJ9Sw2qe)v2@(j^uSn7 zQsm6#QvubmU~?;s?8T2l*M0KS}`i4LC^Sfh6_!)XrnL?shOVG2Hc(_t{y3$-O{$J++^Jqn&P4`L^UR(~!9;A@~t7AQbPX03xx zk`P0q_J2`VLT-^nYG#`OZJay9ddPpkHNDITU(*u1q=oy z&If~gP$*6_Ga^0NO#xfn&Yi*x*~LJ(}lI^(`l2FPA_5G{LL6Xs7nb zx#`*lNs7i8E*pXqoqs?}aAMTKomxDd{A#KG%70ScfeqQqM)SRSp5NPf?GdE*wrQDz zCTOdcg*2Y3K@TkYt4k|2f4Rnf{NZhT-vMDkr_AVE*>4rEK=cU%8usMU+}Y{P8)7+g zI)y0@e_-Tihs8fTW{=2jJk{IxNww=!!C41;tjTSVn)5ksnh=>zA_#d_Xiz(dObb_S zaDR2!)hRjZ>)2LQl{L#aAUao@)p(Js={|^-XAhkaH|^N(G@P4IcfzDqbjotC5aITi zrg#`3tZZs1nf7&WjtbnU!|gg;aqI$!m4NhGOb1A2^=1>Oa^+|1zC%E~L#F{f54M29 zS2?sbIPzH$jbgCV-GsA(Yoo9XU+2D*V1J?hvEb@xRu{Od`8EMoW4FfN6|^~`*9q|o zrcH3c)1>fGa(4#1(T6TWZDZLMsBym?V8-k*4Mu3zGjiN7`~%WiHT_%@Ev&+H ztT4&RzdD1`VfG13tvt0OEfo!uAkRhhbFGF>mhHE2GCtfOG1A^Pu&s{0mo*W(Elw=4ilK@DqIQ8c|clA=g=zo=yQj;V# zr%y^6p9igEeEcB6@Ck(Q6Sr zcyg?4fR9@kOAU}48^rwy{w^*~PI~JqQpXZ1MS$(W@g|6?r?;vj$8-X}SUz4|T1}K{ z%<_OBShHnZt;XykSBTNutbZ)sFo4Mo*i*G6bBbB+dR0osiP`h#l8zER@=40X7&>9l zUJYuTCl8z`rIfqxc<_5bUSp4jSwcp*rml{ql=CW>29}BfzraL*SQjf=gOJ!01wCg3 zV;ABjFsa^)7JGKlXs@crdv+9fO3VYTBtJW3;Pf_F;8HzTpGhle{D0;aso7U3yaNWcFp>48KGJytV`BH8cjZ@>(lN`7 zThrBaF~?Myc)fqz8p2M#e?xfdmYI?Oj?GH5|(r2`}>Rh6&z)>X+}^igd?{jQZ6 z$+~H6Mh)Vnb$=M;O9#~ytw3FRK!L}}q4zQC3?2De*p_jlPUEQs4I23d$oTsq|Bhul z$+&*uPGK$=>3Aep^jED<>q|uXnoAw$lQN+?bOi4laGVsZ!KX?UP+f$N0}Y5hI@AuPFUW{_{1(f0DGoRDiqtNawrX5#%EydnA4v z@b)l4iT>YikI&C;eyYPS=`8-2t>Bep_l#JP*B&b{2Op$?=@WIi6o!F1fInjSBZFvf zpSbW7B7dNs?3I5d?qecA$z&|?!>gg}pYjmJi0ASqh}>v8c=7G~@>uE14gCi(cM>qq z>~E~}Xc!sA!)NUcn5o3nu)~Q%jw+HRQ`gBoHFjHR|UYsMGSwQlOPwSNbRvr2QMr@*sUUZQs` z+kAOv($$C1duxg80mt=ZrFU3QXIC{hkX5#y*HhL{*sZ5E-K^Im@$z`{Q3UhS01m72 zx_>g>2#1~*@}jLSUH;=^+Vay1&5QEcK(B>1?r<-%fx3r1kbUnKxJ)-HruXDh7m1Ub z37;MkhkOaKW-3}LgB<5)6JWBiTFX-~^;HS}EP*(B`Ih=$Pu}{kFF(9Fd+Wcuyf}4g z&>QS^^mzL7HDuz=PE~M9^O?Fr-(Uo@pnn%-ydWH4Mx~xQ;!P!+5B8LTSw>3N`MZOQ zI|Egrv$is&qp#J26}1;HoIRG0_f~TnP))un*peD=%LBf19y85^oekPDzdJa*CzcLV zRHlLTWm(gg&0@AyNG$b_>)^GzuDhgxCD^*^ZBgVc-q~6z&@{Mnaj%tlJlq$P(toHF z+7Mk?wk%w~H(;(6m-1B4reF_;KHl4svaCLp@(gPQ733qX4k_{{eTwKu9>eT3GqweB zn^$JY(GhVTdHmH2rxgD)GRyNcJKWowatLup_{74Vn0{4J!abg41} zAYi78FB-WajYa{LE5wH;GlZ!p7=JuRzVGDpq^rjjDugjkzj?X8f8fZ0r{AWin9Y8R za$VvBGD@km3@%gfH8cflnhM-Q0-@k!_j@X=X+@PQC(>wG>qZsl#rS*z3e#7FkTkFb zxork*=^cy}rCcPRc^J~Num+sEiXmJWo$?Z2ld_LlL;v!9Z~5IAtO*w*Dt`}R=yz^h z{m@OHTwco`J>0_u9X?#Dc;(Pk?WJQjqT`2w+Bv^A6B=%5x0vYTCP}0j^J{u9|H<;Yzd3zhA@FLT=s{dVj*lh4$rKPAx1B zGDgLC<_hOO?w;*^cMpNXQ}4bxkXs+DvOR3a+NkW{vAh|R81%!O$>*M|dysoOuq8J@DL|nNaWTE z?$>elmz1<$zHMh<>P^D-s(75`I3{#u>K}bEPd*I@V?5W>VO&Ut!ria-_j}OeFGo13fj1DUv?^vW-gDY zwB=Tss@x4{gMYJAA8+4*sc;?QzP=p}Pe0t8|3qF5FW;Yj=s7aDLlt5J|HsSW`?C*k zRcPm!9ai%v@AI_W#XYOK%%D5We?UY*7?ip_2Sa4(%d3 z1bMVU5Y$K?moy00-nAe!k`2jnszd*KIULUL8**1#7k@5LU*sJQ$>DI9ubKHcwqtHG zQuP%=r0{M-%{eyTYL~F&6OYl!ZdCYX{%Ut{&V3P3rR~<| z*qWY`xIfQY>S~3(D&hc0$A3H&Nyr@}!csA8&OBg^lboa4LKvaoVr|)&?nW6(l-f>` z5Jw$oI}IxI!e+ACfjW_-NTWEDVOLClIMiAAbrSu$zio>& z^Brk5o-)h({$Yhx_E+vqE^1V8J zWns7eJK2B^Y}or=X;<{V;LkK|u5QW{KI?F|0pIbyi_D!pXX_l?eTZMx+j~aNyuz=t zzTx2x;bgFPOhSHmY4bgs7pDn&YQ5aH(0#5o7vfOIc~%77bt!&#_kvpRz?Yy$W4E@h zF#n~x>sJRs(R3)ok^5CadA^>17t=GCjWLas6qhNO(4o@taCK4hwb}f)}H@_H>+6a3)~0t;30J+nCt4GqG*k$$YVG+qP}n zwryw6f2#J`Rr}PrSl91OS9iU=dOg{y6&n=aCuJ{6B%thH^}w0mABsCMeDLq_tM|C& z7buvr8)F}Sl8(hejrLLu?@lbqfE`Vo=oWg@wPdZE3-xG%+3>-?fNWM!*u{_-=vajg zeV30!Wv{O_aoyOuwTr)Xn57o<(Gh&b_F^tK$a5u=5h>RvK3%$v(Jp$H+0`g#EaHdH zs%Mgwalj_~VsX#3{$0}e9M>JRIWoE8-BjC^5ikHdVFx}1nD`J>+E3EmxRmhukC*o0 z#=j(bS()0`=+__508TUZ4DcN3%$zJhOmMiq%XzJ;Yvn6xw zRkw{$^L=_1ErRWDhPi7a9TX0$Q&YgG2OHDGXY1`wl;UsW7ZjO^^H?5i-2vOjUB&w- zNbC4Q8E1~{XHGeUaw5As-^+>N#%uNH12_)taY3vBcs^ZcfWXX0ur6y+5|DY7I&ad} z0M6pMuL`QhCv)xTUoCj70p?nDp6p(;(B4VLJ(WM05V+&clSIR>=InEP{mY~k2)KxI zYlx%gvC%AlRp zDfW#_>e?w60nqdo-#z$=gNpeLiBw9zV3$+t*8j}B<0Zyg^y)uhk{1Kh>>nxLZ8FFD zDi~H!V|^0QMeUZ(1J5TA3FGhm8LKCj^p*Lg$#qKtH=%}TPNfFfYs~WnN-!VU8F^T# z_%5ywq4fljapIH4bUw7V{d;MsS$mg%7es=1FJ9= zI0$bl^dO^-2c_4OF|-Aj(H*3)g1&ue(S!sVTELfRiUy*1k0M7px2IE#Tm+t7$ooZ{QfKQ%2PxXw;9J>Z`{@3^Qg1+h}|^>JEnlu?dDF9&9Ro zJ-%yT3Q%+<24T)^QU$Nk0hl7p+KZ8m89m5~^DI?s$MUhc5H(w%$@e9icemnR$@a9+ zLSax5f$1bud_uzdAnl@Y2px|7@eLt@-+bgJ6)oA0tp-~J-7gQv_DwFOH3G+Gi;yEW zhY`~;JihEfxzIkgJy=d|=*W=2uCU%<095Oa2_#drGLz9;L+H&l+!DH9#n^rWmU8O5H|Oo%#;lf`XzK9hbp(cd zCwy@UY#`m->Jbv1!X^(a7w$(?qWLoA0Hq}>1U*huZk*h>RqyX7BS$)d?}k16;~BWu z0Q^?R(wfQIz2xt2S1p-0kTS*2xBh8OU4KU&DnrHB5)trc)uSvp)hD`%8&nl+m^Yco zNB`X21G}gBR$Ck<6|w3W77Gy+mO+_`=kZM(v#8uHadSncHwEzmpSO3`A95KK?`0PIE+ zF@i=8_T8TJ44+rK?X2!$PYJ5%THP7wY&lj6OQEIopzrzu7ouv@YEIhX9U0RhJ;_uRPtZFesF5S&bxfd~Kj zXN%zCPhPzP3nJdHwgzF{VRA?v^9>=22_o$Tq#$yLJ)B8}e@fsBqQYUJfc_s7T+?hr z2r2lkGad{GND3h#F99b7u?`px00jhkfjz14AN{YOmyMdV(*_%2_l26hcNp)~>w4Pr zp_$2woVKKEmMIf{XrPD)X|I1F?c0hOFk%OcRD0--@UCN9Z#6lM)%m6NDzTD_k#&mB zWc7_LdE7PWy?xheej{r8sOXl+n`5tWsq%u2!Y@Fhdt1jFk2Y`1eEgDB-Pj&=I-VFS zy9(J#{iT&r!2z|s(g>pwU4#$4i%VAL_vJ=ccnn!2wnUp6^8t&u#1a+kHfsRy`sTim8w)U|bOmh!7vW_^}Q5&D#2>-;^}|GeJa2fO7d z0x+z3+Fljf`{;C;RP(ALO<&GWMx+X~V_fdR6c;NiQsMLjAze##A(2n;cz~ zGI(HWn&J%^p6@*IM`nhLJ@g@|b1a6>Eo=!93*7(HxO zN-uxkHd0#&Fd!l8&h6R54wAAl0aw8r0zmX4bdD2E5M$7I^TvRZ2dp0@ojK(2!KcEa zu8_c#Z3|bmyprR;I6l#A$XzLPgB^EPJ@a;%=|CSetn^L!F{~IR% zgbLNTYC=~@i7Lj>;oX_a=}%j~Yc*+Hw@cGl98wTcVj3OEZ4Wu6VQy2f3)E+12*4*C z%ku574eBG#L6}?-JFkFNG>rt|zu{1>hYmlIqCg+UJz;&v{WMJMMptC*ozJBk2 zq~z!=^wiLp#}z^vU#{2B1{LvuVg2z!)x#x}v}GK}XeAe1QWpIU&mbwS$kNs3Ci-=t zH{?0eQKte-)l}p!MG{j$ROecr4k#n~s77Tq#>jbg!DhgEgnxOwNLf)s_P#qfc7Ga@ z&oKHe6@c(G1+4bx+t69!O7=&|$2)iB@dc=@^DM3PtnIKF3T2CYkLmZf9q>Ct|B({e zbCMmZ#L#LiV6{`-&44hU}=s$)_g)epH_wTsJebBP&12Eg>1nVH#( ze(4FRVSGKDreRW@X4zuqc$T{<)iJZ)?O-KzwoiTXH%t_YUaJ>|2G)5-)A_dkdy*?x zZM;AH)J;>jec!IjIyav1HDA&5D(qx!zyo#yuz|SlhOl`;C|hEdGeS&$7>e%bCK9T_ zM_fdTca$j`3{77s8%r~W1jyKAOFRa4v5s?=*n^fu&5TOeAaYAhGuWX(Ai#m95EsTu zF~61s^q%lm?L&OtAKd@fDlG*}bqh$6bC3HDiC*#;N zkwbz|f@!Bm#Gkp_ry(?Z`9x;Rhs_&k~?_0Sk;6{Q^T+J1`5D zIK>&H*{d6zlA!AGhBc} z-iOVY)rxj@_7$Z8RxXu$*@1^Y8_+s5EXXG&Hso$NoL*`=XG^T85YCOYy`>G6G!3X| zjRQ9U-y0?WCM7?44^V?(coiso2>gbS>|$uz#J`pn51UeB2#fNpgeLUfUHO7=_PMo+0qf7 zefs{Gs*JKBe5`IF_P=7cGuxi-79>xbPqr{0+utZqu&8L7r8el(CJU3&cr#6<2Q2Qc zSu(arrGyf;FtKq5t{A#^nI0q!ngt*IB4*oQ>HtZmmafG_mZ0Mc_O~EixgD}Zgp%&9 zRz9S(-;-HoSaF~=GazsDbDiiaL&h|(a^B#bP-=@s3>rR{P#1ZxTIN9?uC=l;=){Nb z?ArXQhJm@M5g+*bda@O&!#LHY3ve^BS-x`q+%|3SfCT#m;ku=9%;XQ>t$S*R^!f<* z16!z&O;7aoD~v^~eDM|Y?8%mY^z>y{HpaJwKrzm@;{o5Z52t4&qDXw;L$Ik{hQz%) zRa^IyjTZo^$`%IL6Kxt0e0_Ug08-%my+E~-JIel*p{XDyR4+7!jM%rY4ltP!=rm_m zZdTr7^{Hh|F6~z@l-86U@f$O=;N9N)KHUFm^h+!yH4G(Jw;b(p z(sU01QEsCs6nAgV%?kFFarb2Y*wcb`q_x*=$bQ#0elXf5v9=(J1&Ab^s^U9z)xHU( zLD!nCmX>qm90k;WX|is*F$<5%KkCD}t5ho?seuJ~p8|cH zjfbYZ&yry%w*lu>%)13|R%3qZu;!>hH#t_v1+myOgm-2xG#W6z)jH@}rOpoRZupy! z&zMVqgc~LCgX)+Z>=wl3hI=pF1{7sSW*KT-u=IUn~-*m7Xzo_FrQGxJCsZiDkAmY5%DFgK5pjF&8;Hi{of`WQgL{7LV z#sVPhQ^t`R;8g>zK=+u^7>;$J&};wv4cy6^rVazy_f$X>A!5v5*`sb>p9u71l8Ow> zkffj2?!QKK*H@M~B2JR5`OG2{x;-K;mK^uQTT;r^A(J#NY>2JlcyMTyCzIgHk{dx` zksX_$)c?McW?;(Oe;=>LJd|0ywQY%*k^~5lK`dx&%jQOTZ!+A6J32`7S?A;Bd>P!A3-yd`2$RhiPgA|)PdUHDF(jH-I=gwZvo9c z$6DymD_G78S_Q>dVe#SEMlPkt#gD%G-4<6A;mP00AGA^s2XkX*XKRF!&6;1QL8=5I z`pWHjiuHjZ7k@`x&-AQ;y`hh(zWXBQ?A`g)>y+>5(7w!bREqSw^d}udm72)N?ha)r-!ME zQW&UC=7T+a9J3}!>R&O9T-TGs@l1}UDTYQJ2)&Y^<`M==nZW)yQq3m3m*R2x+xls= zqgv+;2tmU$He~Y>z*phd%_iOYIGS!Be_XbCM(tVI`YtA7AS$S*mUA$W?Lc2)+Y40^ z;wLDSp@S}*^d(r9@dAJoGDg+l__X3!4v^L6o<-INb}c~o_-a?#5s`_2iUW~1A28QZ z$Q!_le;CIw_aMN~oR5M_4&TQ``Ns_Y@mbn{+X*Zk5gbIQt_*H+)YyMsUqWa?fJ87Q z@9Cj6N*J7xgkclg8rG;#D)1Tg$TE@=ZN8Gd%;=fw;OV1+uK`d95#8YpIDsQ)6r69Q zcdTBS({%T%+b@viE;#fT)oFveM=WwG=erC+i$_OAL0Xk8ZGj4P3>r(5Rqg14ji3HR z>=X(Wtsz5(q_lC^u$9CGOJn4TC6%fSt7$HHLLj?*)o+13at8O~nR0lGIur`%8>&d( zbS2>cZTPnqIsha$Cc?O1JG>tPWyqM>vX4h6c5M~(FBB>-L`!CiZHSMD2!8}?G1|EM zp|W;w7>`uYzmqr9v)ozB<~GwgLj;V61F++m9^|!|5Pw$T4dNBy`Y>)*;lp7N|H=Ya zIpMaGhBqeGO(`zc`h|E;3P=GwL*Ki~ZWq zK~zO+ekLHeL`HhT5Hqb)_-b}6{xv(7W_822YxL^Jw($m|^SZt2KZEcuS?irGkT)Px zS~seMXRevZBB4gVy}vB(yshk zWhEY9@AO&4Z*A;zS1oVm89+HRg+hg^;ggk^2Dmu$0?(4hYMm2U5v|K@p~V7|Ooyj; zn5TQeqWAW7>!n`Xp{)gz(t7>aDx?09CyXAJ<7Tf3&FuOWHIg&wX>z;!D!UjJ*x&HY zA3IQga(vW+@vFK~7A4tKh@e=iqW5bwpm-UeMTSumsTjr%<~l7NMl|M6M0^DSmBv}8VTNs99chNa_atwZ3b@7t1IZ@^T-zkij#UxJHd@pSrUyIE(}3ZiH(e9J5e-uenaW-@pMs{6fgiWR zKpW}GdruZ1EIHX#Q%=2h`}9km%5?6W9>mit4A#&IC3k|mNL{ogJ$fgtI{HySD1lYs z2lfvdinnh86SlJa&1H}2-zZu20$J&!$R!nkzWYY1RWR8qql;)wIVw;5GP#&)myMud z!e1cuJS#lFq}6yLB{5vIDsR0FUL6>8w`vu_cuC6Od!#;WO+;S05_<*%6pxj5<-#i1 z3aS*-sq5dm^L8Av94;Te)^0CJVO*dpgYX0rc7mPm5zFf1Z|U@U#je00Y+PE7%(><` z8j;qAt=O?XHGBk!2zLTG`Rx7+PmZoVhr<{4f(1rywoWWL11muVTqc5^9r%*h_m#)P z&&M^GPY+hO{X2agK0LUjWXe4&{N;b&?@5{oeVP+9T;XgLC#>d##u^ro(5Hm+8p_|b zuv8e-xxqHn-pQU&F)GDri5At1+;T35FPf+dWM|Qa+|A0_CsILY-?+*5{sqho)>FKa=eTADTKJuEuR-3x16cK_;o_r0R5^W z0ZF2uSUAJ2p9oXB-*!>tL2>Of5&*W~JJ%GXUy$(1REGCa$C*`*qR!F>gwX!}3C*H8 z-8A#G^aH$&luk)+F%L)k#6925B2I-4Hj(4=&K+CiLm}wnw(625#4btHbTqOe*yK0F zxUKu~)e6;Adz@GL1IhO;k-p*xb}_LPdgz(t{;Bz{oMAT`MF?xnvfGG)d4NGx@}y)O zH2k+nIvpy-HTMwZahm}$ss}zq5Zy}$@4SWh2FFrssyR_OXlhR!%S{^NBV3kjQ9Fmu z3pA3;a3q?#5t=X}UslFXFg|mo(fHsOd~`F=Aa@|n%iVkU###`wS4e(OXjoNCZqTR{ z*OfMEo3d^LaGM3z*ZglPcR;?SOYoc*#nD?P(EAMYHfwYjX=5LT54IKcA_DBazA zqPz9?5P{e5sWu#)`0*)ZZw)IO1vuPY2I8>3F_8yY4dk*ICGJ(w9!Tr#-Q5ThDi7(C zfuZ#=&C(@QT_WOan}8GV$iw2IwR6Drot|#xcf9eIY*y&NS1_gSLk5)L>NG=xQbwqT zZrec;rzgt4+@{&V2dAiWt?Y5tr`NX8Em#9e7g0K#$G^hfv7-`i{#V$lDS~Ril%U6m z6De`v!2f`d2|E9(7d80i4NZKFI)gsIwnKQTTxzONVv9xA#{D&q=*4ZrnE?*lHWU303e9rG`-ASbZYMGX=B4=vjgSDYN1gnt}=D zN)-r%zFJ8dHQ5peWB}oTh*j!BRi^BnFADj#DGLDm?ZhQ{&blB^G5K7_x+)F^tPq5} zw~`7~F=-IUQGASfLNB&uNTUc9E%+vPo+ac6zI$iNY{7n)C`)f=+IId!uZ00Ph(Q;p zL2|#f`l9p+ZDr8-f`hB){^$1hb9FzW-dCsb+sY}AcMM3(gavR}eqc$X%EUzW zQuHoH%5+(bt|d*!M{*u>A8h%Q9uXWUb+)oEK4=S>;U9UhYuG4zG6YaNLY~04ygHn; z0U}x}%lZv+m>Xo{+B0c8%jD>-`pCu>(gF1B#-a`xcSN;9>|R(XGI+b^-Zz zx-F;%>G-m2)w5lM(sF$gs}$RZr&7-L;5WOrvTg#X;5HG);tTSwbV+Q}u98;|@}eBf z9R}c=V6Un8e1A1@m+CmL(_e)PtV2vN{i3Qxn?O2T+{41trJ&rOgC%bac_;(4wwWA8 zQOsP$61oApIXI>qS7guo1kYX(O5EozD)it6pQHXs6$$T_2VU#Z-*pIb)NxgIn|=LH z)D&1llwwAK{p^CucnZ}?byuZx`+J6WIjwsBfEFQ5;2dbU!T5C{h6Go@3@{K7Y)Z8u zFfPE&!p8o;yEX&bgu){7|Fa|WiI=y_WI!Cc@rI6wkPV2`6y?mdRaiQ%Rg|k*$9F|B z*4NiDz`;^dRQbBb`=-6jXW`TMYxmdAIz~CFE?WKeuyH~J#;qk=O|t-UCQ4B(L1W`$ zev_Y@#?h=2aN^-Xx1Rhd-~yPb9wdB*tbY6$3HdsC+(?0_CrPd+<>Oo#R6r$dz4`ba z4JaIWKZr%G8&G<5M-f@XseqxBv=m&VlF?ok(g`kXc$y?gW?Gx^gV%;i$q_@)3!wPe z|0aWBD5I@4q&!Sw)fw2X4#uw+Q}%raqn4?$A_;c}pkwa$gEuU5o}D+9gBv`cu<7+N zH#~NMP=umGyZ!~Xu{Aj;oZ}mda?RbEHv1%p@<#T_-NQvi<|>vk_Kb5rS1t~!RI)yL z8XQjlRr%5NAnOuYBy>5Ec48HBGU+rdYHK2+GN5KwRIMBRL@`031p8YM3y=V|sJ9oG zj7$Ip*!bpmP3OlTBuQ(5H%yaLsEC%zMr+kfv4#Al>x=HjQJ#c^p-ddLpyo51 zN5Tj4OWn2BCKk{q5R{_h{MNNjR;D_L-&_BrJ_DwGNNe0lNCS~%!rAxQa&nKln1j%E z1Lb6Q2!JJQ>rz~%!H(AP#=O3XHL3u-ZqvLjRERi7Cvf5PlPC<2J#3%8tx)cAI!TOk zQVNA%e~rN@q8CDdE^9EGVr;vWhyDRjS6hJr9z&~~8o%dvthFF-!$$$4jQPH~64p`7{w^47>h%5&q_NNA6`^YgahS1bGO4AhsC#@$Czg;O+bBIvc$|pyaVBSeiM21l-_;K8O&80yZd*sX3W1 zn!N^LU!6IaHK6B(MYmvL7TIn=cXC_B)yA!8N+?b&7RE^6?p8=1*_s%J_3D<03y8cC zN4T|Mj6lX?KR{sT){9($N;ZBN*DxI{@awrn!A@XQ>Tx+Qpk)69<_D zP8a$mbc$7DomjYVwmnR{6SMx&=<6Q7bVLvv>8xb@b5YOEE8rhCGl~G1EBGXJ1|cgq z!tS4kD6bR3MZ*px+aLE;!sc>Y1b`Y@-|nr1eEinE{z+;0ar63le)|<3p8)(IhSZVc z-G|i2PVH64-Q5Wye2AY5UPL`8gjoq+U%NyjwdkSyrZRgEWhuZVYZ#^Hk zJ9IA`CP0KvePJ$|BU~p+cnFH6Fh`IdGF`X&=yV(;Po@``~HL z{!akP=g(;$9Ppod5xoi56@><$$NW5RFV9Z+lmHh&)Fvvu2T z`|4|?H#a6^foHB2(^N%~v>ann%?rpoN)O<|#^r;BN0^x9sJ(Nqyxm%1bwu|H=o7wq zETk{`9@`rj+pVQ9TPPR^*`7uTnt>xYlHGQ`+`ed1=@w zERyy}W1cu!T&m9VIC(+YyHp!U{u4PwLbo3-%KgW^=qUo>SE3aRp|~*z*WpiSt}z#- zqrqd~8bVfp63Z00F)L2^GNoW_;}(H!fd&Mvshu=?us6=dlo7jrkjo`xekjTh;Zp!> z$u%BwPK_fe#i_;O#Gy#gE4}{#`XZU(+b4y*xE!GyQ^(}`k#`y$SoH}jhAK%58y5|4 zg^OT?w@uE@v1!SIMal?Zf{TeBLhd$}Wn72^v}g2um8k+$ zFQ>G^QQyLrZ1hQq21T|!Z*1-=Jw12{v6{_>uAEA;I8CVky)Jvzj)N!mx1NgQBbo*K zxmG4^ayj=O$qq=~9T()d*HJjrqXW69uw^&3ogc`LP0FxMN^^=-x2ZgLmb_70kE~kW z^Whjk?UVjDt+T$x6lzYHa~Jv+2XJogr(ONNSm?VHI+gV3W?Km&Di}*9nN#E?#1{`n zD1rLpUfLL!F$=MonWd^Y{pF>ny{mNgz)r*V?V)q)PC`%g;7&rq-k8FiC#{y(K%d68 zrz7<@yj)0EzMbCZ*;DXWr!2@7-qvyBtNBrDrn`N9o0Kyn5i?2GL2S4$I3WZ8WIjsHQz`xVK9bGCKoAL}G zU6#}RhlP7#Jz*~w(O$292cST1VxJn9KPg*$`&D27)xYanAwpb$R*p-68}4ZeM1N2c z`sB~pmP1YmwZB(~S} zAX@3MwzqAgqhe;ci#7}V!q*|D(RIQ@z)6DvBdt=pQL1%g-Gc?OifRqfI(++ z04wAitncn8R_XRot5V)FjxCa^Nz87uKKd2DG> z_s_8Y!XLreIS|VO#*Nj+OH4rYXxM0pHplsb zmwTd8F<&}8vOA>&Exr$JDY(DpefRYIZx2>bRhT}ViVw|;HU^6ayVE8>xvKVS2zg+Q zPaVCS#r||fD=hD#b)&oL+(mmHrv>ufudyZ_v$C}+mxib&OI<(_X`wQ%=P3Lp!L;!_ z^ahy#Ig`cb?=?o%1G_zHp)kEJam$Uy!i-<{*r9re&$a7QWS{B{0BM;F(Y^&Te#k72w_WYcUhw`S46ooui(Y|Hy8z&L@WEsAd}+W8?ds?)GStlv3~>&h81tQ+WwnibAw(>vU9D*rrK1F zTEKZ^9c;jKqk+<^{2I*HMux6~90T!+D046x&iNieE)n!zazkKLaLR9$_NpdSwW>>^x;~g6@b-?{)N{!ux`cymu2LC8e0D2f-mTykF*hJ&}c$hF`l!41|)URJ- zhHTjL&@OLkQ+6TR$>*}!nPceArcGfsl4pvxktzM9g}hV>Ul4`v%QNC}?^GDK)-1oD zI2BwFY6O5bp<3y%5BvqX>ZQl&Oh^D9gK1NMa3QVY{p1y~lo54LQ6qX2knVe7 z7|e(Fkct$$?cQ)bnFM4}M-h`W2@nsj?2xs0k$&HXod|lOLh^doQ5@agWOm3}b2<(H zqb0ccvm_il2nvjnOjJpf%91+eMFRE-Oz5vTXp6~qK8}f5a0-c+S8;7<#u~DEWn_4U2y}PtH-d{=MCT|rg;QljIPuiIH~~TIYXFgZ2mjDxg#RTuqL0OP&?UM z#!39V3;iVqEUrFPd1VU*$()&E7SA2>=K`NzM2&gr%MqQxnA{eS;!nn>FnAGxS1)3Dx=HT4;v1#UHpGa*+F(ih}3nUD%y^tzC z$*<$n01(TTrA$Tf5xc)6r{Bf03)A38v0aKqo~vqgL_%&Xy{xn$uN z>RPzmESKH4f2#J1$tVo3(&EF!E*7MgU`W=>sHM|)am<8w^4X!Z1Ln7YyGlM?Wl`RL z>NpQ4_VwK=5>%8I0G!815C8z>xQwYrJr8J7APB=bNIN(-Gq^iQA_m;;jzQ_kKJwFR z!4XxZ;`s4lO6!Gvi6eo`Z#7sV#@;@P+ON>^oV|+Ud0gmp(hqaEY{qJ4untAD z9J5)Rqe)X}vmR=~`SZ>{uVJo)zoA@KF!hJ!H`e6WL~45qGegF68X5qv7?2Vx%TjGY z@GO=JyiI3j;Ctt25&QZI+75`!OO7LgP;=?>z)v#Tfryar_^Lgog(RGBv$Xsn4!RD| z?#dHgCST=eRAZIN3t5r4_QZUxv=o$54p2SmF?z4SvaV=pGnhS#VO}_Y17vMSfH-!% z&6dgJdI`HDSmTqvStbBjhc6rL)DMceN!AJq+IbN&cek=uvU@caiL>JxK29=EKMcNs%QwB9s3D4QAFlju%@clU;8 zou6ZWCF1~7W2N3Q_$cp(OV4_9fYX}Q#*X-O4go~$JLOHY6ifi(rO>FkGqz%#2HDS% zUQZmvn|aU_8!C=9>k-Yuq$k@po5$ST)D-Y%z>c=T?hRjee6N4DcTL%B*^}P8uP8b? zB$+7kJk)Ma8)FsxwSE-NDs*hHVUXvzf}g53V#PYzunL`6QBRq23vFbSg}%`nH!Pvqc#b&2E{1HWb048b;~b zgSAe@J?m1I!8Geclhls1_6QkbM)by0h7VZ&pS6q?q6(N}Lig(bgI*;*w;NyI@iKYW zHTi|AU(I~lqApcIzS0Es5B9y0nRR6tq>71x;(Ht)>_#*R7pIOEGj!7umS2jQS&w2J zF((tZaWJ1${+nwJg`&CcvW}SW@1n8(U-s~o@U}3TB={yaU9xW`hj18){b$p^N0Jwo z*w^MN)nWjs-802YcT_=de5)a;q$+qUNNq^uJ>b4^sq_g?Bul}Z=q061 zFJu*ByYa(iQi@_pg$((Bui{**XF zz{UNmezEf~maz288%p-eNloe%4N~{eNZ0TzA00244ARNm?>4~` zzXRJ{+TJvU21d(j-sqHqE1a$>#f)$pNoyLhu{AwkTG%F zq#I4?lmL556&w+LV|6XYErYsys$>CSjl2ioE>~1izld691iB1GR$!{8J0A5^Hx@*T zY~7zUsXXBY<)aPR1YFoQMXV zM*&~+Hp^cfY%D!LfvnN7mq%P5?sxRxbwZP)YhAR``7ZYBG^s#-BaZ!a4C^kNQ48{N5r>x9PhE{afIb>*OXE4x>T64aEz zbd6bFcRWA9HrrO1gHRdLK}pq@t!4Ar%A$JqI;n1$6;dO{s`)l_Ulb! z7+S8Pp9p62>fCyhx}ZPzYp4R)ewwP(j;Vd(G1M*e2w#&MA?#{Nms8hD|g^2nTwG*oG}23+u<>! z=~$?unEW~su+xVazIt!9hgfc-NQ0*fEOylMoiIn^E8Aymzs%=csf%iD>St^HZxC0N zxAE?uLLV(h*j^E1jQOb%+>4>`4WWR96dYPe_U8{jAPcmT41<;F97Y#{OcK}AwFl%g z)8aJnL;4$(y?-<1JP8vPB}#jrG16MA0kL+Am4u`Rd6;UnxS#%pUs&-F)c%jpj^pFlM*ZZ!~PA zJJ<;5b|thKyrCDtiPN^equ0Ypn9a9Bl62<{u05BlSNf#Mrz0=x>8St*Xd2s1jpJ_a z&O;G$OhqlQohyY_R|Zx@j@1(_pRVBo6=ea_Z4(}&YLDw$;pGWyuvLOu4|-9*fc@aI zc=Btegc*IC{4`KO#np#ajI&P#t67oT(c0TpToe&IS3h0GGr+m>?XKuhU+21vRRpX7 zWanH)v`LztWAHSj$1()FR zky#4tWqm~=9)aJXixV~NKBcIjD66 zCR)6n)*G8TN`w$v@!4zwmaH^cRnKKgT}Bcd-XjuJt6==&zyO*jOmIZQVdFD z0Ub4yj;shogMPO!GwR2G{+2o9F;a&~Oj3vQr(s_e-n^`vTVoSbo(x)xaFym;Tpn0( z7vnlt-2AY*nM~Pi2)y$4_@jsy8*8bpce>|$vNWf+%UZ|8=!TCQ(2g5a44{z_gx&8% z=;%8jR z=LcbqcCdZtT|VH`U@aFEt+YB9;f#Cu=IR}2v6##R2GaLw;QZJSBy9WycjvqVc2PWW zW{(wRXm`K~o^k@vU%aQV0~79Fd6?HlNZ3fMyt1nBLk*vL%3RV@%31%bHd zB{VNExZ;j*YwulmByEz&Z?s7ai$zyZC%@M96jgvi)-TUf%G@-|T#4zw2bB4nZM8^G zOLx`tXO@qnA@rUSChZkbaJ($KD~3&@`bVwLl`PWKw;pNE()VVEn1{tqbmybc@$@P$ zpO>35HOi0aqoIdBqOUTyhZ3S_Xjh)k4@cIVGx1BZ>6>D++{PXiV?LxE?cpad?qUe4 zr-lG^ciq1o6wKq+dp#=^?m>c=pBB2R*5Gg4`*zji<@_F9=T|lK^p;-KG*Z0S-qtOy zd~ech&71shO0rlsNw($W4=I^1+nJr$*)Nx{Bx?4=teg5`l1!5f_L-R>reqr#gKjQ$ z?c7PuC{N)oJY0P%8Pg9_?wzN;`JT)X;!uE@-sLo=J^J~e&a-dqtmkQZ-JBdo5Z%Vx zG7_CWde#sA6S`Nod4$RXEO|TxmX(s4gJ56VDk20a$*NmFVT$kTu{`e-U3(5*;CV+q zMuC;}Gvw-p#v|c5kbJ7Q+h?C~Q-tD$qlTH0G4-dU-10aPMvg|4Gj~+$Iw287UVT8K z9fXZj1DaRo{j8^FgJ~=sZC77NI(GeSBr`GC)(1)qumBqDW& z!P={B?v}6pYh{E9CWv%gIIBi0EqD#kHbjE^EIc&&!3=cFfquoBk ztHTeG3~i>tPyICjmhJgHrFh0}B|9gwFwL#zYmK|zr7TT$;Ly{+o7ytXu#FpK)kQC+o+TP04iWOP^>CnM{_s~puh`8+zyIkUX>F`aH@ubd zo4LC{0D@91m+3F!G?&dkXPYDCl(bM*5cG_swSyxtK)2Sp{)($I2~zYa}WUUPhdsL!IASG z#}Pf^AY@Hf)qBvJfjQ?=w~;bnC6epl@P`hgMvu!vg4PCIS(roi#9jBYD1AMzpZwAb zNW|hux;!B~E*YwEQ3N__8!`VUa^5)G1D$vNe2bMFIl*XE0B@qUT;(X6ZqzBAZpR_% zsXw(-X7ew&4ZD8Ndj|lsK*W-VRKMu><$WI6e|D&cGBcX7oX^=tj`ypj>Nm)WVJ(M2 zP=TeYa?Z*p(KEjWdW;4>x*+GM&Y-VU6`FH4aF3<)ZZmK8u9731Bnb3LW-6tfW?1@$ zGi3Bd<}dc>hFgni>QZiHo;qa88JaR*&b%o+mKQ)yo)nqC5*xt-Z5}>n z`8BO@5tSz7Zj9ptmSt)9#XH6Wiv~sxFrHN|^IT}%vXlNLvGj3Hz~Jt6JVtO3kAo|G zMA~gc#ba*1sf|mIFTmAmi4S95MzbIj9>zc|jt`2;8ksgs7teX7qm`+kVPMBgii-5F zM$bO^N~G3!c^;sw5XWRkc48ch_ zInZsZ=j*A7V3lvbCh81XlCR}&vOd92A?z?D-j1sB;qM@WRX(Y+6TSV(g-x?|DJRIn z@-vcHZVCNIL#fZhSPPLWcg_qE24AZhf9>RlDHe{etwBnzWuL1y6wdq~9S0bE!+nxy zhlux7wIZZ);`4F3*`ZN7O<(YT5^O12A#X9fQtTq};)wH!P}+ZuFVoPR=2OSbK_c}4i8Y6-Qk$zGO}=~_dVu-2HYJ(RA(@A|uf z91;Q5^BKn2|5eu2#x!|F;rG4>j6!LZF+NtY#lS>tfcde3%V?$(r9j0@Ga?@wA5pRi z1O|v>fHRB*4Z^x{VIb<_7}FpWC>3Z6LJK9EqEsD@Ad;{ka|X$>wZR#8-k#v-{PpH} z?sLyM@BR99&b=}50cR9`OQGp=slK_qy6_^EV@>{@?`~gTdTqVAKB?i`GoM?7RkdRu zY*at!8V*YkgdDlxBb9s)SFo7lj`SpD98Ht|U8W+%=2H1!?a=Ti-Puke#LMN+Q0D^odNYhCv(oIQa@y2RL=I3B z&4nov+t)!ejMz?2%jse-@#0FOg?ATGqVb(XE`Fh~$Ih*P zGxnm*Yq(*AIv)(*wF|<3(uVfm?jlmLeJ(GgmL4&a8~Re-B&lYe)>6Fo&(v^G;NLh3sJu{;^D~ zrur)&U%!BIuO5&WEFviGA<^vCzYt9Kkln1pf_E$=RIz(@I$g-6?Z!HDT8N2Ie_ zN2=1na*;U@7cP1kyX1__jXrqnB!|ZVZ~BH7d_5E($l((=`lA-KEuP3oJ%}^q>0p{a zq3t^2OP9O|k7fhGYS(g-G`1#y`+8BS9%9SdfS^iG_Od0L5Lomij`a&cklYVoAq;`B zAG}X&Mvxdr1T=gAOk3YXrg$5~)5I}l+mW#hz&N+c5TslMQ+MA%kR*e^Zd?UzQWP>l zgYcgVdk~x+gy^;_5Ii1)k*kbH;I1I9G{0 z2`DW!5I0+XF1MTMMFa6;e@n!s83TBX$Uv~uNP@+7$&XMaY`;y99kNLU&+{Q+nL|FL z?VO<5MzDM~6OHjQ$jh|X2;rA}jLiHY!l&Y4U{Z3BDH?|5b~6{jTUjuub6j&sK3yDv zHPDa)OC)*(nDWm!#+NpaK!2aq5Q*rwS+TUD1d_!a;FVv#KSv208Se}8A-qV-0Y6)1j) zIi3Va?%eQoI##sxB;$Ndft{K5i)segwc?6WIWF7)l{YMH!N(yz20PW!8C@^|g+W8u zaV)Z{G@uw|n3z)NF{ok~xSUXi9N?F4iXM4FJGkliMb+wgPd4NXB}if>9A@w>0hzEx zhZn{?ZTN(Bh2-}we{g`TL7GG6yA#l1sc2%V0bi{{G&oWOFd@f(ZI*weiD3b*EnKLU zRD5c4XZ6^%kR48o0*SVZ$Vm+nxY&3T51)OuD1aXyjKUf-NPd%6b>;IMP13irudin? zBHM`uPjyHue7U(puW{B`x!zG@`w)<&GLF~M6`W=f?m%3ie~hLW&yxx(5xxR9jL-S; z1b(!QFE$})8ok@FnC>pwZLse-1?fW-q^2Y4_Dg6K$sIVy7<2@{c+IUS)Pb|`*nq*cHk7D>@?kJF}Je?7S0!TM5*;V=nVTqC=hL#;% ztXy9<+XX!wnWityu`H_i62!<=5o$UVH>*ba-2?V^ft74l%&yX+sWOc9uc9nXu*AZv z-VwGskd8J0eT7`K65$*EWvpR$pm4LA<5Nb?%+wrJ{R#wSSzkcOb1ARqt@WR?pmT}UmV zXWXd+w<-XF2XRC#Tobm$SqNW&Kz3H+k8-n52P5m!=|w3IV7PB_d`o1tCkhj>LWlvEXY6w;Ez+x&CBCZU~_Vvw51Q z)p9dFS|db5hk5t%GJ_6P4Hp-yH8^;pre@@J<7>`P3$Ji1WxZM_&1&5VQkxQ&MziRa zm!bF_EqJJ(h8QA_Ssmjex0KKmbF?9Ve-`o8x=jcq&N}~bA_n|CV6T=uzNGX~VJ#M- z2ed}-(+O|`f`9I*p1=ifvh*&-aw-4BFV;XS75gUqDhK_9M%UhGG?qI6P7HXbXRqIX zI_v6_OeDrkrWSo{c2bFtXYW3=B9#DtV_bQhH8tB;`0k?_%@S3QE1TT2Yicq8eIgN*8bt~HkqQ_;DJRIH^%|l9+H){7<959d1WZv%i`}$K z0&KkIcZHi&R#67XQl0PRw=ds*e;;TVv#3hr5bIsEifo99OG6Z#(vu3}O$zvFi1LML z1zPn%l#q4ZWW*TwA&xwmRM+$Wp5J<=_SsOSBHjfi_W4w1UaQ6(L`kFX1QR-8AJ4D| z7F1yz?gFxo1(Ftik|}0uc76_;i#?dr;aVr-h_J>hG<`EQ8q|);Vh&yeFRH?Y;k{h?^Mp$STb_u@4QgpNb zIp6Q0iW35AyNi($L_M^@kOHQIMC95i69W<7rucp(f{4EG{tt=Tbwni*Ax{kw54o?5 zDDlA+Mo}I{+~VID{{TH!xAZ?!Mi>L^)U1YGmn$@&AA5;yo;W40v%zIH7kfUDsbV0X+cjOp^E%F zEt~08=4~t7f17Q=refsp64(EI=`v{lvaL}k{Z#~$2f(_3HYbSXZt|8J7Q4k{H`KW7 z>Q-lR+df*D^70yo-?snQM%@pQGSJlfRJWp;HJ zW~+e54s}{IcMM=ua}jn}=Sak4<(}I#kFzEb$8BEHf6=xHmC|w6;=qmWBmTu`=pWus zVznvBCV4Tz90;`%A}&-c)D`bHlU80+fuMnG;NoGLw=A)#A_q7(pkv30=y>6n!xm&4 zG>MF~&K2^YwE@L&cSrWKEj6w5@n`AdG)C$;9l7s@7 z?|qE&e+2}J9{JXj=>&7bsb`7p8<4hH2DVI>5!KQH2*aXYn&=E0c`HtFaZ`(B_YHTt zKG}jfZKs66DekyH0r#$F*3llL&ljC=Y)5yuA-C>bu{0M6-Co=Ib&yQll|~ncHQC6R zY(LG0=thfxR*o*$1A8|fidR6CsaxR^aGsy&eKeL6a0+stEsp0n zC-<`x|1EdXk1>AGgy0?tVNUTZ695lT5dG1)_e#8-{6KGeM3HFyd&Nh6OqOkuqRqYW z(=QB!WUsYRAJF@oXocH`hzVpY@jSQfe`9*^^&R>d>nSMiTLU`72D1sC*n^4VNevt9 z2%Z`ZA7Vq-iFK!Bto$ciwl{2n^yUTvH@V{sj}!yoXjWX2EQ_P|$7JNHs^RRx(VxCl zn*vIH#iIQI@Z%J4)55QVDMk%){TBLi(;Rc$dD1G6e%r^S|0-a=j+rwLBH zz=fxbs?T_WsaY(9Wg$dFwH)_4rHR~Wk2r0cgWPFg@lb8zZ|9VxbYlQWaaD=)*eG8u z`L>KAFP=cg;?HGNCM+q_D?ThOfA`OYdm-Je`qK+yYkKW|c1yQAy|$*`?&r5*VWLi-QIB@ee%pu``c58-<1^wK4wf`*cH<2V%pR^-M%w z4^P;U8!!(Cd+toczBp&MnU(MecrW_F_0`xG=@lB1W-S-k4l31Gme|A?es-CUTN&EW9-32?lHI_g>ZA;dbS*CH=iTL;dbe=~8)cPJS7xv6T3 zBFys~5*b;->pcpBpN&bCFM3+5jCd7873C0+{>np2f~=51yPkdz6;%-2)dogNw|ZN< zbxP-qn2A+y|J_%0)o0_np#yU7Q+}C)nPdmvz{wHa>do0pXA@6< z5Nw?Oux7gD_MWcZiE|(p4CBfii&mNfCY^RB;YJGG?QD%Le+~Cv5Vr`_?P0HrYj@w% zu(gHI&@{>2ws&3VG;Trcu5~(E@p8S!Ywq+(_AZ%>GxUPF1B|m4LI%9p{TAn6r(zu% zED1yox1!`n+FtFlw_MuXI4deM0Kl{k$XQXGF4ZPj zN7<|t!#(@8e>LIP?H{mDbibYmGsH30SXQZ=ll~p++}_LwMu&EjI?F9>DPEo1q*XeN zqkBxWla^U$gL~Fww=3q|l+sbifreX^Y`BzRYF1|p0qqB|C#CPB0FVZiG3;0`F)-}A zchA{xy!2)Nb`)HhvihiVs!RJ=5DtQid3YxlmLiM1e|r#hEUzjx?x6jTO|nV9V%A)I)WJv&g_i zVM#$Eb-ZVc=ZecQ`-ZYKoN-!RnlmtD1tvk4y2<}@b#a+u;A`$d z5+kooO9LCLZk(-)7QMgFZHjoK?V%OfL~ z|7igif6YB>bKJ&}-}x&hWbuHtmXKsu$~h+Mlwwg1FN&<9B)hI?77DwV<-)`Q2p**N zQu*)K-SZv{mP^OJx~-D53(WNN^lQ3%dPXO|dp>mS^JP&z=hZ!HcKxQVj!xLw7iVl$ z=S6jU&W3({_6K}&bhK{kElbn&&<`z7Q&w!7f4c2iw(RP1=y@uBA05f(MXkQoo%+^t z^{v|seNpOP_3DoI`qxf(=!>oH(zn@)FSFI1L?uB8okHUa`H+9cc75Hd7q`4mi)vk` z`i*S)rYQOA`k^Z8Ea$qp`}FAOXjNui$Nsy9X)pQfw{gAvnXmfU`4NN9@$s>K!>DC) ze?%|LQ_;R-S<6|!;jFHB2ZZRFy6TE$2@lpRmjeRHu?;~0REMl&_eIWYwg#+NR^{xW zEqZKK06l7!7u_8z)&zIxU=o`QVgF;`UC(m@Q}lC|ZENV#)ms=0nzpRZy1Oo6mlfOA zUC&lo2RPvy4veXXGG|Ldlr=yCgwnM2e{Gv>6ZWc`v)kgHS1gmLeY$!(Cj@ds%e>}Y z74__{svp<}{`570kt|?YSyGpZ^PJ}l+0$;bzNo7?;RY|W9?)CY7m8^e0G-2Z2o6pY zrr#iE5DwsgzY*h_sIir7cms0KZwf$q%#clX4>V<44q~5+5dp9Ip`)JO-~b&+f70^X z0w~)O&d^s-qHbZ%3Hxya-+?bhM~F%KXNEvN3V=bCmq2;JOl-0)+RmG}n)AA-@=l=H zaun4LFhWttP>7(vfCkMI_7On2KqTeG+!XmOx&suzj-Cp(LLd5K2;A~DCrZpw5I5QSR)GRREp)M~{WU>hsz9y#A+Afy}^B!rt7 z!>XFd+ht(4vR;fxiYS<{0zK^8fvEIQ^czsr+hNPAzC&??S+6*78O8!_Tj5Nyb_Zh- zn7Y9Sz(4@Ovz!Ruas3!oKD*C~Qm|;#*2C?F#wJ81Gy1+QmS8~HnuL`He?$*-TQJp- zAS*keQ%WXLj5=PfS=RaL2(r4`z_g}@kR(9`K#X(LNf;GPM^}^npipP*csr0y5<|Ac z*JH_?S9+du_UGa`nxzVua?bSUlYB(jWCP$+^~FkvVKcNKCmhTunH|uh2jHUB`MrGf zcxMtF7lPXvgr`$xEK$f-f4py3F0zcCg$7i77vu4E38Pzm+55JrdL(E;f>V-0kTCW+ za8mU9$58Oz?u80LQrl4XE$CHt%R9dx;IraGTUuS;;3LruRSZl9j0w7Hb?A$}G&p)4 z=%v-Tuqp31zI<(i-3;4h1tM@B0;^tnxa7QBwFQaG`KXii(&~Z>f1wel;CxjR(W@)A zLkVhcO+-?6Y-gxzr$+Gz9Rz0fUSakr;u`0G49atNC^3Y9_R7vE%{X0a>5 zLUeuBN|L;nkHDz#t&rployXqo!7D9sqaN^1w+CvjHm)eEMFi#nYYa8eBCRQi7T@W1 zMUV8vJEDECb6MZ^;4FbXZB^&D^{ua+@K#v`T##&iB?`JCfBz#svgFTti|{g**iY7K zy(CCzN`CGL3_Ao8wokBw2glW11IH+Bv4sf=C~ntoSPBZAhfvUOy{;gwZb!qrPP-A!T`Pve@G^Yt}}ThUDWxG^M)`ns{c25tzk_^pQ%5Sz7+^00m#8bv@o1y z(q6IG@bC&BO1EZibeZ%)1qls4N)ZGu>0l%9DM6Fw@~&u7)m04e0Ul8^8Ic&kYY%CH zK!2gHvaZoAp&A*tj2sNKIIz+}kg>BI8sWW=r@W(Pf3k`8*WAeLT-qjp4U-)joDxQh zbG97T=%^O|1K-i%Bf~sr+oDRzM$wCH_SyOcqTJ6Vz?Pl~AOHZC{(^%m2yP;nxq;{9 z97n}?2zWxzA^sK1stO5@r1OG49$Tl^W_Y3yH$tSJnMi;L5-8n&si zQT7{9e{;^o%+zxsC43FRdQla9n#O{%0wEc>N>smXIm$xjQCB&~P(Rm+9fFV{J|a49KiZ}puWlL{*me>lbb6TO>tIH1+WA~P*?(d{jzBu!LqNV982V+yD=Arn%Ct*NU4MIdpmA0VFQXA z+Fp<{iaFR8eOMb;Oj}^4ZP)NvcAv4uLOd9vXl6?;IgXMn6)aB`Gz6$O*J?61PJ8JB zFZ4{FSsF>Ud-V<}AYL!iX>p%x;rGEERv5Q1&H=97c#bGlBrftJ9|B zxv?Y;LJs=kOTsHOWN|}zlomX}N+en18Q>&*bBn-6bgW4v&Xm3qO)L&M_UizIJ?5Jz((L8E$NGk^J^~D zkvu~gX!O|~XAc|74{JveEGz)tGBki$t5W3ndCk!zqK}B#l(nC@!aVO1_b#Xhi zGBHKUqJel(D~br%rnyL5$@K0v+ff4U0T&$p8PkS{v1KVo(3}zC5(>JY>w2j2x$?zL zI)f|nSX1ejbDRM=N^{DWnY54Iy09~%laVbL0?ba6t1TfwfdPkTdqtC(Ez5d!H-aok z26_heBKQ(U0Kmc|xG2250aKuUgGr#Ihu=j1LX3k0NDQ743dzrPQN@~1iA?HflMF6F z0yNW;PcA(qdm9f$S>m=9E^fHIh;T3Z@zvG4%XimzlM!4I;4RP_Y*jbaEFKvH*B3}vwK3P{T``Hy2wJW%} zN+RIp^N}}V8y}(e;6#mb2POqDMAx`(+)%0=`-F1+=PZIKOCl4-T_>lNC=bh2rGFm5 z-^!~0O4!?(a)G;pPIv}t^Ft+;;OC>Hhe#kJ?};$iPU}-J|6xRL4HUrr*N5-l=}AbG zM(E?V2^et?~}`k(AzN^UjeOa}3?U zMPq94GnPPj`SGW!K&Rz`;$`x9W=Is=E;|?j+BOJI(n7@V`DVC17NPWjE zPDbB~_w~;8UJk0P009MyiT}iAl%wg!*Ad9kY7^Z+FYpXw%dordYc}+?lSwf;0tXwD zg)vA1#X^(MF&zu!g{jh(rrjsO@`020F*1LUl>>j;sFzhYtk=b=K+_1GJ=R%Zomj_v zTEd`t8%%soBc+XDN;MQIKyG*Y4I!-4*k6iVv0lqU$kMJwHRj*!uabDsmi@xOzK-Zo zWOfovsYu9-nYTJs;iTeBor$misN5#?Y8uX&{0ClMe)sPCtBY@6eYlv7ZGfbkvjBe{ zBi#kE&scOUzve|w!_goNv=Q9cO0>0RhaHUBvua&}p@VrHoVZ;o`zk?^n?SzyJZt-1;30E@E_-lU#k$EkWg1ED!N1Yvcqd8VYE3Qf$Qc_DO?$DN| zoMiE_9XM{~rgwZNcL%5s^;rD#UlR!orR5pzeh*-*OBd8<(eN10+1M5zg%|VTkdr z3!>Ix%|=$Oc&xFU(|`fK;pc??C5+}ds{xnG3#llwaxMr1`Kbs}8R~ybZ_J4IiKy#} zjV6aDYjfwHlQ5$cH>e|s&!ta`la9t7scw(n3#be9Fq8_m{@3W~^d61|b;#s!dt4ij zNUZ>m&`-a}%py+i#eQ}YN-l#6;(H?0|D)35f zucCR!^GFXEg!9i0U-f@hc29lAPOBA+mk=Ype_!Pqh<_PIGww^B3%I z9W(*Nzh5pM-ynR7f=|mGZAtA}Izkabh3Pr5Cb(5v=hFXh?4Okh@dZfLe~raRxD!(z zgq;Zah@}OTD;KIRE3OJ2)B3Az;;@^ALwv zr4uA!K}Q0yUKf8^muY%WueB!GLFUVGSobuxvM8f2g*j|F;iYKdMF&_z4~D$@t)*50 z3WAb&^gCfca&i7px}27)Dr*V_5cGRi*+A@MLd-ot(w|i)5`#pwjl1LDTf{>oZ>HBm z=c6ciU~?HOc%m$xhB89Ik7Xf33uch;T6zN1R|gi!)2Dwlg{p=Rl299mkxHrkRr=!?Vg^=Wrwq%Jx|FZA2GEXh-1r@0K13vkL~`}p{&Dn;JT zj@jvGQgPThG^^j-6_dHaf0RN+S)Xgw;nlFE9St?Z`OB$5@BpzFvpYGZ^FQQk#D$B? zh+P!P@ALm{gJ8|~fcA1lfjEFYa}{Eb^%@5SGE{%IJ$fQsFyh1ySt?A&TF0vEmg)?} z@?N0_W|#8F#+5p8KZYpI-9OmimZCOXfRwRmX7VuGp~J=JZoK#kh~3aiccTH(g6W(C z8kn)_2F_0Y@b%Zhel+cIgc6d@pla?+$TtzSP^$x%m(gbw=loJY{=zkuT;Fu7g97#} z{agyr*dXDN6c5n9;gcsgdjTVpqd0p4v%`}hIY1%6`3mC=p4%cj+KTq;NJ6z8C*tmd zT%Stlj(m)5I+&{;lYu!O8sVIUoX8;gbnEI|A#clSVp9e_gB>&BWFSG%5T-3uhMQ?C0Y;zL&B4 zw`LVrzs)Mz9;F*SMkUL3eX$SiV4mu-U(fED=Z@8*m$pBoo89=yJyTHZ9}J}1tz>+= z&8qBH>?Otla zK)84fDXWqZ3j`-Pg^mIxsH4T4b)f`Rs zsp^TJ{~Hyx$nuz~;^&F#>J#GEP+9yOymYI>H&cgu>Ez4E?b7#;xlY%JrTS=(e>y>9 zw+>1nwoZ+mu!_X*ow{(7&XP6ZDqVud@)^aA;tthNR+4Z_X(*gm><%g=#R!u`{u;EBKX|XJTZcBi9K96SCUwY3HdN#GA zVh=K5zFah-pPSpU^Di5P44J`&e^9Y4nGHJ3M<>gL`+BEzccXphv$|^!bA^FzJMR;_ zc{;O;=ciZ3QZTHUzLWq2zATohyf8X}pJW#w%Vww#8B^-v5)N(WQkY75v7T7D=nC*; zRX02ASucN%2fF_ayNpMhrldMgXsC#X@F;cuYY}qp$;NCp%DIkR2m30$e?1o=`2Fnr zHeJ`q3-u>+1_5(2tY`;d!LZ)y-}Ay1BzfZ*-dmuj854!5U?pLL}hn2!S_Fhn;T-dxc6 zB$m=U+{x40qt9EUUOhJ6wxk3|T{};OA@v&XRCaG1p44Eu(?f0V34jdic0^3$E9 zWFLTpXjd-uMHPW7q};;=REJP$+z&|4om}?Qr#MEfWu@gJP{lSX!j}vVnu^0*ttq{Y zf&&FMcn+z25ogMwbFm$^>HxC!zd>-3fXDyQfnX+4z^S9EUj5jv^c&qLV{IMVI%7_r zOU>b;w$43)K2-W{e_l)E>AJ1Tx*>FQZd%@zBMvEZuWFBO>xr-ru4}XdIXY8`_vNO- zXnOUWD0WSwFU`a|77q|R1226jy3M@e59&gnrb*gC_&>o?e6Q>NBfjB2(;=NRPp?-v zY%Cq{(+8~8=LFufRmrm!gkV+R{dsK1@$d)7d?!83!$m$%e?m}dMZmmHRM~s?=cwyl zD4OBPw!3vUl-wzkd!#o*M$VMJZTTr12P0K|&GCj`yrr%!ZuKSexGu)@e~_Hrp{c;J zX6lxNa2^6YxR&G5odY*~)KVoKq&br=)4@lqK50WH#bn_O5P^%7aFoJPG4mo(>R`!qa+OZl*T6Y4U0d~h{xo| zWEN+MP5+5z^YEiXexi?JKAsg1CgW$GCt*O|P%#h7)GPYL{`Wt~6-`BwQ1ZO&PPYz-)hRe?CzWgUZ|QG^F_?5z*GxL?jUz6gdwwqBFlT ziD^J{W>VFcpRsVF^B^OOf!-NJ*G>d1?xuD}bu^Ceq`!+Gt zRKFxeUX0lBxuLQNn&2wQ@+;Nwq*BLLz$Qe>^D@mdHvw#d2kcNxi-^T}cJO~8iCJ%7 z_8*e^g3$m-0e|LB0C-Fz=8xt%%QO}Kd}j|lC454#K*BQ;C(vnvWstiZ4CDilyZc%qbTbJF3~UXx z&SKcUK2W+f$kLGKZrBH1jg)_&ZbZS#mP~j|!?0ZngK?N-%q@v^)1ZQ_QqZV(H1`#c zpXCA+(^X#;Njr{1T*m`jL>$jk*-npme<5DdC!VKDAr~h%hd&(-fqHAJf=0{1CV?bX z5d%L1D=%x$7TS;vXbQa;xQn!RyZ61e(!wO3ZdjNlZI%UHjzn3H{Dpt)wUoobtccv* z14+RDdTp)B=>yCBM;aC&{{33@4tbfu{|#lta{5R`r4-#s+uMUr3D-!f-Noa;2SXb9 z<0LF17#)>f(n+ZP*#P`37f=P*HP<=1Jiop8a1Ds%K&xWbOs%7U$GNNXD-ahnJxig= z(&B*;z|nW-WO+VEA!UEyq@4Rc$?^cq#X*(w?CM0OgFR@b_v*4Q@;(q@Md<)XLlHwb zkXQA)0US8=`03s4-8V;ny#>NzjxaC5fP6;QTWb`V(^mBfv!o6wII#AT|lvR=s~0+j@Je(QP$wI#I!x zM7cDC%8w1s;s6W?3*G^iQ#o9rU{`V;*fRQy4Lev!>6zjOZN@_ZZ^=-o9-bioZ>3?; zUdn;r`&FmaFG(f_tpg-bZ6&KfiDI(z5>#hO?o^H0Jt;&;?%+Rz!QkGhaDb#I5Deu0 zjK)Ez%7nfE=|6v(IOaEnREkYhMW`Iol}vZP`s(4SXF6O}OQsMGrAm>&eKJ8qQ}044 zZ;{khb@VZkROH&{IZDRh-q~1|yip-Pfhs|8WSDdz7)nFW<7iQOy1J0VI(Z$?Bi5jM zcVj?G+ZrW-GUYhhHh$bek76-=5FZJ(U zMM`_SD?oXpVlrXElaWIkB$cnSOH|iq|9WB}VI~5y(osBGK6|^bzC{7;efQ8?i**~R zw^!kf6ObU*sF823XsBk$*vh9`5+riQ0froAuxObf)vRAguqm}wZ6G9Yi}26n%h ziOqkj7ow^Th@8ApjGMs2gBy~uD+&)KI_RL=UQk4-SAc!=z%$29)m|Y7Wb~2IZ)4Pg z;1JN!xop?C5CZ7PNF-0_r#Xf#k~bJSXDuwH}E1S)|-SK+{s%>y|^1}g!gmt74=Q?voFVbk^P z)z$Fi`r3bYa(<=bAsf^-y8=eG)Tu0|qJ1bD5=~Kx`@`+Uo0DM~z-T%>B0%{i2Z1Pb zty}7C1`;OoDaFv6Bh;Kl`;vS;*^V~Q1nQo%gkQ&YNLbDpwb;XXln1CmNyjY%%JSzx$m_IJev zfs%u*U_Jq14n|SB@wUKlyAw>1+IpBEvMw+~DyDx|lxpTtqB}mkDbeZ7 zHpSO?id3$T2e?Kn=N>`b&Ta-^#6V|P!>}ZqfKkMM0+7_!m3R!rCUBJQFGsW0vhYv` zRp^N##7($DzclbtnH9f!eKLRiaClKh`4H_S1%!c?xNXs+UU#bM#x=jEL@Y7mHnXhz z>hSvd=gZ;oLfw{leciFDJBCTpxWoK7W17QEjv*Ks$fV}-4)h0Y4}ey|@?;OM7KtR; zNG{5$8B*dt@`xo;lh814EvzKfu}qYRRMsjPS@9Us64L4A@Z#{MHL`zH;Pes}ZUOd9 zNT=o%fLKjrQx#&zV+P8F_B{iKJY(5D+4d&n)vKMof7;pme!FF5tRY*l!@4!AgJfI; z&KDci7?2ngLnC=eN1+M%ZRv6$8JK}+JucNiZz34m2wzPl6|;}bep!8MG^$7mlGgE( zB9@MunjRR-Ns64gd@g^W8WyZ?1$w2=1w^&^yo0j%3rj0TWi;p+pU!ZhNf&Jt1|l`n z6KkQJDn*vzVrTgxS1DJ8DKwL!vj2@FT|FHJV?9?}vUa?!k>8WxIrAWPQfT$(LIA!3 zs$_uzRAkmV=p+d-G-@ApDdbk`wW0;cr5dm)Vhk^BVAl%xE?|G4wm4%7?m^_7W@r*T z4>`S(vm;Wp1OT*y8UV*?$=dK#Dh3*`QaLOqVlNj6{%(R-v$am`k+Zjz4U!ZMEiW5_ zQ-S}7mf+N(gTt|SI(eQ_{go}bgHg7VjUMmqtnUC)dYiP$!2!Bat3n!2)yM`G{ne#~ zn!j9uKK$^uz2AR;u%J_Bbgk^Oip?Z?|DA?Cxo~xMa&t;7XHKUuA>a>;d~{g+(J?zH zc3Y<2zR#*%p9{`9SSw9#L%5tj;+6uD=_G=HV2Sp$gUGaS)%H(^J&%&3zRGJwRaw!C z1EO=4A%*!IL){6JR?#WTy+VJ4n`4^dR()7m@>eqL>)sp{ zxQ&IIS-2k81rRF%>6MBOkj&b~I#A`h$i{t#fOv;a19~280EI7eW-D;yvmzSBV57SU zX9?F@VHv*8eJR00{bRw^!KE&6m-DRytj2DQzbj~SfUOhaB~0t!f~QI0qvY-kcCG(h zgxbckDNujodON_3*;B~l4&sy>&oD*tpLjm=ExX33kr*N}qJlu62xJ85mh1^H1($fH zq%OOMB~RTVS2poAwr+6rk)*EXPqVdg)%Wl$G9H`bPs$*6MOq$lfZPs9Eko_p0|Yrd zDKelL71JsDSRN}?>pX(xRw$IoM8pD)yZtGi|LT9ZC0Z@O*9A1@*)395jWJ%C1w?Yn zcmW%R(ucr0%3J_H*DYW@6L6L1Y3fbNm8d(a1O$3@kBE_2_}2}yIb$qsYwJQJWaUvBR%azQCl^=eaz%R)s_Qgd8-Y6U z$UPen+|+&PO3C)*=m4iALs*#vKx)OQKj)>Z7s5raoRFF%sX2X8()c`RCFA1<35HJ~ zgrCTj#(ZgoWoMKyY1}x>!Q-)Dkv!x{6!Cx3^4N1;0c8aP$t=cmRb>NwT;N}5fL!(` z?l16nadCXyTUC+Tw67Eawg<z&`)yzT;I@;w=I@f0Ni7&!Z&{hd4YS%A6dL`zI0)OTb;16k$MO3Zg`imDgg{N zmBpT^vpg`~53i5T&IsO+f?Al!`cfb1V*+Dh`yaRESC-N-%Zyvo)pRk(RGH(EJX?T7 z?Z@#jTjf@k!p_dieLCq?@%$v^c=t&k-Knk&eRMofHdI^~5IpX!k^Ph2NlSk`yiKIm zpu5D)RjzvEY;zX2@;8vzSiv$UMLPw~lEV+m^$bvv0<<+nmnuzs)7@6El^27SYAYT( z+631Go7oPmbp={VZ7o(jvZ0RQ$k1TKAi9n#hc%YM9w*7evZJXgZ@uP$rs0(`qRTP| z9>I}8jIC42Cz!wSwPPOVX^VdclvdBt)N!SnyyO;cD#g)V%Me7A^EE32^?pz!v+auoRELh>odb@Of))5Qsi9muI|h>mHr_1JDeHvtMSi)RSX!*l1;-ni zlS!1aDTWL55xJ%9m`rdQ%~Y!V*=yWxS%{Ocg5{e=HdF$#h4n3GBoAD+G-n%gw)l&FygtqCm}bQ_FjGezC3jKdQJa9%$)?xGy8uV%lc1|HFrVeVd546 zoWw|7nWdm6f+?QinF+O12y?`k;i+ya=GE;%dpLTZMCrG`PQu4ulj-!=CpL;!x8y+$ zu?NOd+nN>Q3+Y-nb=um4#95^|(o^8cBrpW_+pd3w=&;%X6Xg7`&^8NhtfsT8nrp}^+s~^h>*vo_)0%G9>ydc1y7^>)xrdL#s=UmL_obodg}jEUOPBxn zn6~)vK=T@THqdLKjT_GMY@lu_4`koF1uoN#is?PM)J1>dDgQV-Q~rJQ-j`MucODakw=h;_a0Tj zDa~i^R zaCTTe-dTUnX+Smks$ffMyh{%F&Uwr<6LvOe%j4bN{ynjDn4&Tbtgp+OzHSz?sX}6@ ze_jW#)n(QN4J^UdRd0hLZ}CRcLV>2ior^nC;_+}_OiH6tXhU>m*|Knb8{b^IE#;{m z6~P`3eZ18qWm$blJcfVSX=ZE-;x=!vkb?u_Jn{IOS57JZ z7i5;_X|}(!GvyHCj_?739Wni;qJ%p<%L#&zVI-l zWnm3CbrnOnFgoQGwO?x0aU|+x;cr@zvx$yTi3<;T_6bjQ8sDd$j<`Q>jtkK&(}#(>ADUs4qC$ zicE33hGSfpS<i4+p&GEb5h_2((|4OQSWKMWjJ+k8fsN-n&us#@08~l z+~u@)&jVbaPF*$Idd8Jzn}5H8t%cmYzVnPv@9fICoLX2MWQ>aO%oWbR-M!fP;T{5q z=iYsDAh$l}WP8|-wNcr@V|i&5>wterJhs+c;0Qy%Dhv7hYvptr`SOX8ss!-e5guET zd!tw8fe+c5()_U$k&JA2Y8uNnMwP?miq}G52`AZyouVbgmn_s zw}!f52A8i^{q46EL0^T;LBHtiSIPz5lD@K*_*;vAC`)N?ExyO5NGj^5EKh&s&Mn$Z z{8SeQCTiD)xSPA{-Pg77OEn04(BMNg)J>8yEwfssa;It0uGNwprLYpUd3S2j)wGm_+?%6cXduUs21b;2}=DkjSkS+^^&8FDPlheEH45)SHCu zRq;5>aZKpS)Ia*#ntV79#(00Or^C3A428Sj?C$oU$6u3(#|0kI&1Q1I!eC`_QcP#W zozMsm>)=gUf_II~GgXzl;s=eF?A*$n5*4&@8@=pQ9L-!FQEAJqG*!79&IV^EKHg0O zQ{g(qJ-QtZPd?n7|3cmjFW;Yh=s7aDLlt5J|L4o$`?C*kRcPm!9aewyCvUs5;I=d} zZN>%5gR-)M=NLb@kk+f)+=iuERtP3(-LBNU_;OuTG)NX5PfaHO*W9)Aws8aDdw<0i zMWGcc$&cjFE}}z_M;in|jr4IzgJA7l3qm8=kSwP<^uL$G;S9eaccpdV0`*1S;gB2- zmt2xF^KmyS{4#&FJNRDBeGxF3mg~jDbv7gXc(@rip|4x&VLlz$nx2!WIL}(@YK6Tj z;si*?e>@dQKpG^%QZa1KJe-S@oMXO1ke#4LZP}RaW*JJ9+D?)HK%HniD)ho;vf7C{ zk)%jt9Fv?^OnnA7tKfvyp63Ac@*TQ`-|;#<<_8A9IWQ5wGf`+ z9KnNImbN(aO|zwBZR=3)a_wOvif~R&*%bBy7LG|1=C&r&P>f!GoVH?#kJMZvWN(8F z*TFVJDEuR}8A^PtHlvXJZAPv`Z5H&WVY?ucWzMLLK!3{j>NLv2ZvA(%0Ug+|_r21t z=zYP%G;OYK$`oAcaJK>9@xF`9ojqsk9Nc|~?$q0RM$Wv#ud=@3=?=kGuy;&Cet2o~ zJ)0M&3ASjx+_untt~D3pP{(;z1Z;IFes}j0)BnJiphsi3wyyB~OLf<;4gzZFP=+J- ztAg@;J%2BzXYe(~G*VJrreH#cO2@<1Nkxb<7jA=lCrBGry#-VpOBXH7;1(>nySqC< zg1fr}cXt`wCFtPp?h@P`g1bX-*Fb=u`{lm({=3%ntl7Jcl=Re0ch@f=N&Xoa`Ba@kv1&j-gG;}?wRd=g=;uEavoo>7${gDf*)RYAhPxg+`jicV8eLU1< za;dZ<2mW*COhQ%B&0W9>D8_Q54u2TWp*1OpHI%@o0~+X`{rIWVN}3LEp%rgK+aAW1 zIt3V|s(&&!oOx}=XALzsth3+Z-YeJ;dx6zStQ2(kB4#d1 zTp`Lk`=r(cwyeQ0$fH56Jl1n9oQ%O{s?FI`XH(BQKU_1mmdIN0V!E&}%N{h8qMioM zs{Y_tfd;Gs%NUx5A^e05h55OTal^W_++*}j=+s?Nq!(!GONZ-Pv-0# z{YhWU9}(HKhKL1al?T}Ppfl+~;RrBcR?>hJS#X>hlHK*RFY6=p)}wkj{NH59k$kme%lH7y;YpR2WzsgptH^W$nT`32+$l>jh+t# zdfopy=&vcQv+LUcY8a%qwTf`cbSJ1SjXXQabRSUFXf0I_AWDKZ(IM5b14%084+@56b@2BI&+XL?g8GVwtcuE8uTI3DVj4pxn zudnCLsW);`Mclta4_X`SUcikrN$hJRWYEERhyl3l4|N9j# zHpw<_JT)YW%&oNSnJmGE-?2!o;!3+0a0U8|0en5-WJFF1@n~-sM;|>D#xo22I+dBq z*luXgc@+g$L2^4s$H^*}EG3-cGEDPVTmj}iadX<|4bsJ&hDl%h5h^D5II3>oTP>O$_flag9N8L;4RnHp(v+YZpxRCvvx;DGV6|@_!UJh)xyr>KzS{ zvrb!Y-T--HntwhxjN|E?W^n z$tNrFg#-h;MoMIv#!K7|K>3Bp z*$faH;WS z$$h^}tunlkVv0Pcp(xC7iAP_=zj?|Me37z54dG+J?qq#WtYv-Ay=&O|qU^5Jf&6{c zwuC+TqI38oW~^UadOf#$2PZ_@))cA;ZxE&jxg&{WoD_==xSl->NEAN58N2hqCW4WL zjy#PIQN3IfZ*2V>_tF+5yIC%Rn_z%1rp3e(V!+7s-A;Ng%{0fJ{9^pGk_nr7Mzz7N zhQL>F1~)API`|OO2}U9&vsmIN`X^jAE&3<;s^cBMow78tJv$5$XH4xi>Q;&?##9(d zC#qa#8>8A0;333qQ~YyzAiB1()y3ufYGnEfL@#~9c!CttKIJezJ@f?PlVcR#kKpz$ zW&wC4<}!Wt6!worz4cA>sfS=6Va=28go9Wxk_kG|H&EG9iX3Vm_fchM6VT=O9_?(@ zzWlN&%gwDd_;YG8l9N?#W>so?Caoljc3q%f^3m=~;MGx=pQkTH?-F-*fQG@I3-m)i zJN63~jPAx$*o()b%6fd7R3HdvH5QCVFKSLSr_ww@s6QxsH1+^IECb8jV>Z$ z3}aDJ7x`d~qMzvtcM^4xr|<5*2zMsRBWlo~-x=#|NDDY?+1alwquYo3`;hY5OQIvB z&P-DiK-$kJ-EIT0J8kY>_$J(P{6QLfZte$eDI+o``k4FX;M zmZj&hRmXjOKw!Xjl=N{ERkk_uAq)NcTIkO%?`=P%Sr@MdPx@~nu@)rm62YklWXjUB zF_SAMZrdWOr>zO=g`?J@mV}DKm{R7b)jzj;fGgY~1WsXTII-?G*LC&|PV9z`5knbw z$WLcO82t5__#0=#MM*@fzG%FhvnBz1OTIT@dp@721S8fAM9EZI*%BB^y0~vbb#`kV z`sfFLbB8!jJ=)0QuUF|7I#QNlaZ(rK+z14zEK72a;(93qd|-cxq-JpM>F8_Q_M;>Y z06*(+Q&~<)D|6s699{PBCyRbOCV_Y(O7zjkmzZV!OcS7D?G<}>bh$g99UR#IMOkzC zPr_30Z!S-%qb(^Y3bxnMlfC%_pEdzWBa1i7d&GXHbP1s(a{IVVq8sA@&n}`eSZR9T-(ju!MQ2$9m^`H-?pa2C1wu=e|hM!mm!cMf0Mf@ih6|hrNM`fK8-EYevPfOaC zDhfnC(P#>eQ%tX7Mm<{CGcF>~m*Sp0f<>M-UikY`KqBR`9VJ2j9%WHb!}oA5Ucn>5 zT>0~;c*mcj`YX1%0wwx};3uOLaxLk~Gwzs%mCh9Q`Lsq{zq~fZXh`4E6ej`D>Se!k6`?;dBFV=h2i?X|nZ!vB z`?f^2Z)VANy0`FuOZ#y*Ge^;y9>|>XE;f;ol3(`TM+3~t#5b6*BI1u(eqHqOK5eN0 zf!>s4@{)OVKuRFZ#ViAX~N^%AsC9S62WMtF#TQMXg*VlvelL=?Q& z{W;B7vn@Oj-2-5GJy7&}!6>3wuLxn&sz6}Pk{+C@U)u_ zB-O00Fs`T~t=Pn`K`m_>!eFVQPjLIn-|gL{z!Rb_TVa$!u#RK^n=5*@ApC8 zVV!Nh@u0cnQ9_OoFiuD6GB4~#GNjYEfwVr-Ndetn;k3qm21^k^)t~&+&zWPO2&rqI zZd~U(B4vbhC+*39lWN)T85(L7&L)l z{}YgF{S%}d*0Olvl^SEKTUOcLWQ$w1c6zg7D1d;s$;E-B#;c~Vz@(MS?G@{COuqzl z=6og9dt3A_q_tFC>IE0 zTSr7MKu$gtgOt>=m`;ApFN*eD`Oz28pk@Y?i!6(qQh9Hxntk_BOu1f=7BJ@SPz$7& zm#XetQB@hQAT**Z^fXeu=_sCD;};AUd9DAo%$2u@|IDTFy4evLw@@CT3Bp55WGA7K zTi)azwd28qV3SoH-6dmOZbSDDHMs3&%DSG`U@9k6tUABg^ZCiw{rk?{(Oz+Qfp>bE zr(qhh^dr0=X*0#8m-j4&YXN&o3K6JRkAPrPM6(oUc;`L2h%HDXh2xWB@#D#W_{E-O zPsuaOL$dN!-Pnrhkb%`<>!>p;eao7|5xl(VQqVbJ2aa;vSp?U)9C$j$c5nDo&yo z14#qkbl4rc)3!V^Sg+BvLhZ5XJl8Fi*g0ff&Z2fRdYv*XY)y9gCZQ&qn$&?g6pQXB*W$c z(pojYeZjytfsPn`4i0?a_k*!E#F zt9u2hD(l{EfMtFpzKSs_5=dE)Tkpay={IusI1K$(ZIT`3Q18{xi#)oEKNtJP$RqeM z)#4vn0rV0N(EgYIk0%h3)Ey2CY%@`znB|{IHxX1!4h$tFfrEQe22a|LxZP?;@JHX; zZ%x~SQGvvqW+bF{!(v8AFI5tt{+Ku%MEwS7d2Z*brWY z{mH>&8z}YNg*Pj9T7YC^oV&31T!xwT{^>qhk7XpSbZ5g3D`W0wBBE@GCszRHjicx& zUEHBIVar;ZsgG_%?^NQO85qJWa;bvo z&jlfz2Z{c~nVu-S7whICC193ti@WuFqkyBfl5u71{CX0h;yPE=tLn_`R=xkwH)g`D z%`5qMuarzebMu_4OF;ov&d5VjLl46c#QqC@*{dn4gTn+Y$6D+J9? zV}#Iy8nC7%jEg+45AE%%4H({9Jw=PjLrh<76wbyUyTLO`X$!GfQQS>qFaO+4QFm6P zCIKyFGUZP*N3vp6&=TECiNGB<6H`lBAthNyXA-AM2~_&lz#BFb=0cDV!12GC33vPks@-zd0PB z_=kU!+8jhZM-OF03lCs*=hRW`IzhcvtJjiRS+s9+|3&)wbbHp~C>vN?dQ`#PF6==s zI66udQL|#q(lTP~y+u~KXxm!ZUX13QJjbn87SxZf3<7~L?doRtl~1liM$66Y7Mfu9 z4zLj0cp|h11?Vx!j3VX@4KZ-4wCbDIKtrz%fj(ZCQKCaL!8{731Wd0iFVvxc<3 z>3n@^$)tUA9c{@Inga;#1~mJswkGRIBNg2MEzp$yBHHvg$#zx{yF3iXpuLFEK`l$+@f zoUHrr!L{YJP4AF~SaF?(Mkbhe3-)y8R$v5KZ4Va^f}unf4O!hkLoQ<&p8gPb6|x)B zp!3cL<3{l>1QdUj3UWEvWw7%VJCys1m5%5))#k(;uShf{@rH^(*zvrx<}rTc&2%r4 zr=?d%eZ}3v@Zto#u?{4F%(7ekq*O2CABNa<(X4N!UU|AqN!(i(?P*8df(jYQa9gH` zI-2c!F_iR}l9F z!QvuJWBxNbEh;g^x`b3j<$5(l)mqHwZ~mR|o*YbKZ{=32*d4=A4U);^tdtfwo}ccQ z#rcer5(O&>fTl+eY5^;wf3`K0zB~e{rzbzt;A=r-C0RP0o_a%N$Sz!!CXvO*VW(@&CW3`wD17|6$Y?ii`_#v5U%d!yUDY46Z4OoKejxbeXz8wMIJnH+ZNW5W*dP`i}tF3>)$d`J~JY;j^+1QrNc+dV45}pjSNIPX*2GwS9WD3oo&M8 zV!xUrbmQiE88I98q-%4BA{4`>a#hWOFw`;#2yb_TZAeKS;q+%v#1q}r9ahDIenoSj?yex%uT z0FC-dyGf8fM_>7rEl{b0G1N+a!={h?s?xCzGXky}T$=UB&9Cm{2OdQZudiThm-q2k zZZK`KfJ8DbqOGoBtLk5GG73MHJA*@T@#(QMXPWEAwLBXU*2BkoHBt~^qD+Y76teqH zy|_D#r10;!3g%ciJ8AOm+toe+^rz|@#OfFcx}ipNbo5+h1=8` zbHR>fY=UmwknYeNUo>0I8Rti0cnv$a*1877+9Sk<-EOS(|6SaPR5`!*frEirL;rhm2Z|j7z$Lon;{ttE z_3T%f(S4_DYL{vG^io{b@MtS&lcgj#*yR|QFd{Seq1Smh8wix=@4KhnB*BxWz$u=x zoiDg5wPj4d2l_YJ$7x3rQzus{W{#I9fS=Q|DUBT`DzS4ZpQAY1VlNQ{LXKo>*Cq(Z zTNS`t5#N9W9Ltkbl~ACCr^*&BkbrnR83_>A4re?CGb2JZxA-?r;!X9{9a}LJZAaf# zKa$a@`%9P6TA{cVU$fEa*B&NxsKW>E=%`v#D>i@Ky8P8(>9I|cWw146H~V7HViAZ= zX<|Czl}Ro)H;`3Rm`7juEh-$O>67MjQwvs2QCl6HbsFEka>!o0rg|6q&13zZn#HzfWL>d~HT^gX<5l&^h z)^W$Rk3wGQWZ3%l$L7MlkB-*Cdgc=#G0=s!=Gkhm!Le1-xTI1l=LM`vxf}2quZweF zN^VrFH@YgV52O!cnXDjgM_i@A7q79i{Q8l5(>S=GfBw;0&+S>ZfC#AUzs7(R*w{jn zF8gzkx#NO*j2+*Wv+TMv7YD|Ke3fGJ*O7GNQlR_MN6rl~3}V|T6OB20H?m~T*o*+* zw=x=YGjB~m3qY_qEG`FA!qsN-6$NM!zfq4bZdhmo2{@>kXWD~hoK+D6cEz8bGJqVKD6SAfn`JQih&|tT99qhQdw=tc`rjZYa z>8H*3ra3wPnBr65yimmS?Rt+i3^4eScRZztUtoNcm`OF7q~I}tltzI24Ra2dS?gvI zduB?kCg$r>>mjq$VOpNQU@TcC)(x)$%Dz!GU}<5l*=^r4<1MZkQ%SYGT9>o`l0tb> z$)JMknd8qD{s9B`&T&`2z2+b*PenWmn;p%D^b!JzyUYq|aF7bPc^4ApJG zaEHf4Zp=nRUMm=;3%bXeP?wMM^Xl8qD<0=JIQDnh$*Q`XY+cQux!>@(`Bf{zcfu z%63ozV`b4T0{uyrw^6{=1(N!9CIff78=BCVN^|%uy-Nx|K|P+3PESscbJl>drQm&j z(O#G(6UXA-_2A+&BH0rH)gAa$=1;wzz;tH(`H9=l7iNe9jYQke{0WE|K z+Uk-%jfj;BHZ`ZHlx3XI50l8>bI;@g{H#C})RVTr`M}ks3f`zD* z@7rhb0aG*RHw^Rkz0(;6AFuiR(BZ+S{=r4_J+)}l!5?VAQJPziZKl^~Dw}9*6qRN{ z9R$+ws|PRe4k%XdVSjEgmFq9eow*zYroU~PJ2^*}3f=?-RMsU<$B-Sw(`lM-^X=r^ zQH_3;oV|1(3k$+#f<^46hHXE8VYfpOhk(h8IKpv|5&T{c|t{^pf2TGzC81EVPu^*R_xUB8PR(KA|9fgB)U(=2u*{81kFU>Y2V6@Hkw(hA_u< z&`@zY`6h3xKmWjPfB{PPXM^YaDs zg3+P9I+4e`>Uha@A>JPw@4J>6GGPjjb~%LSO+5F5y_@H6y=(`gJ4(afMMZ9pRyNNY zra2Hdw}Pl%rjZ|3Z3Nd}cEK#X-x?=vKH>M;e;iH(Q-SAlh>({G3TG`$-J-4&bU@!i zDq!9SaJ1p;zEaSzIf}_MPI<^NG>U&cj@ClEN2h_9dpy(NYhoIJ8 z5Dcm%*qtL%*nGc#X-EX{V#4|?uK}s|@hC#zhO@E>xOdiNJ(;c1BwxNzjX$wYX=2tT znIrNY8q#6#I@BhAbvp?hg`HgI-qQ+|FFdkETveQrtbxMx3M@KCx+~O)~sY9j0=*>@uPn5hS^v4~;vsmX1<7l@DxPdRV3xBdu zhiQbMUY?&^CH*_Kf0+Xm-ckM-FtmDyjDYlGlVLZIz0)!+h=m4@C4)j`Tc?57PD!u{ z@t#TAap8;&Fue$&5S@sXLQ9#rHCh>R?oC$z@e^exUTA-rO7_ zrnR1MKKg%Qc*Y4!IB zU%RBQcIbCxvU=lM{MnA=Ef-WaaqXi7HUi2(Lf&m{gkA-;4*e**U?3PQ^=rm z*<)K)(A17ThN0<~kWN5YDUzS_k}fjkp%lg7?MVVRl@f#u-_nO$IoDs%3ZnLrpd62< zv2fZW66mzG0#+6C*@22bDXT%&W1nUA1uJ=A(2SxuVwA(dRl#xTOs~FQK`GI*FfL1a zJdm*r`lgT|j+yZC__^`8PTs~2nh-L`0X$b3w)Ol}Ig?+kvtaq$yu5}{Bk7pHelEmR3`;>uzKF# z`kV;U>g~#zvR3kL0%ODlUghG^Ar1p$+maa+%WPRCn%&ru3H3gnE zjSyh(O&&6V%QadYK?3pf_vtmsDF`hG@1g1yWrNASN8nGZSn>VQ<`?;J<3FdhqcNv( zoi^0jsisL01N7Ehzsd0n(l^VOd%X^5jkHNxk0Y5NAF?t8oICZY?n_g5Uz(46qpF-c zCBMawOQm^7-7EB@pK?nWfqFe#UAr3+r2t9VA8C#Osc$9*`9)5avZY+O)XzYh+s6#s zVH4DzI`tx#d!U&+tetjcS^}`8`vW~pm??toUGbd>39rem%Hh4ZAf^~ADOy{}o|GbI z>5k6Gn;tTzz-+}J$erfj)EisJ*m`pG(&$PBaaSNbFTU zA2$C2N+o^#*yd7A0Ls4Ll})gZezM_YOwLZA*U_Xs1ADEf57~;zwkVsO&>Cv;`>IlK z8Whd$2QL~k%lVP3-0Pg%6_v6LO>u*s=8jrv$psAc4h4=%4p-9$pMA2<#VF9%)lAT6 zsClSx+=!u*rrx5M)qEqtU%0|lgMF3dCql*)FiDS7pm*zu0O!>k&c+n^fU*uk^}fzan(**3S90R5iYD3lNB3y}H{3{8G8f#F)V773Xx? zf&TK`kyyL_%I4D-NgE~#Mxwrnb>Q&{qiv|-6QAK~W8=va@I0;OX=a?UjD!WxXl{Zac&bYhCDwyEpJQ_aBS zbb_g+%CBOK%+gamAzfYf>0fgaj(B1<*|Yg*9ZgQ z%C`;KO!S;~3Hc`E!Dd{^((DWPW(t3kMAb?b5>lKvlOVqQX0rNZCi_q~~$3w{$rw*P~UoxnN$?D^&eK9iwvbYA!5tdVSScH>cJzM7MGu#|; zbH6&f-bnOQ;VV8`5M<`r!JOOK5&^Y+#2)lf?lIrH`j7O;uVY$JRp63Jy!W@%{ z6K0#%u`&2cOE>70USSG7)N3S?pUXfNl}(K297?9hQR_yVG^q^PxuVO9;RlxOlG z4L|I|w0jeJdFC$9-@h(1u1;6socLS)Yg{Y<#`-|u+sz~%egmv8lxsMV05rjky5Z z+?r(=HKdfX@8dmmoa+*7i$bkL?zw@~%ORR|LXpHX1SCQZ?qiW5$73fYMaiGB4WB0qnnlZ0} z2d?NoHRUr!h#~7&-|NN=J$fiFj1Uqk{n^xu*mZ9PyHr?m)3)5|cC6jPjk$oc9?_=? zZ|ss4_v1|HOUsY6F%3}IuqSy2ok{J7GiqEu=+P=Hy*NIDXgqpcvddYf3;!!-qdDtCNc{#RNx3}1QOGUZ4xB&yBWZ33pp3|~+|G=z-t(n2^jVCBP zuo`ACq~Odha|3kW8l_TsK^3stufO4vB$wljy={Jx;(dikA4sZM&xfL zH7*09f7Sv^j0D3b{0*^0#EpN(M>1G7P5V7-6Ydvax}7S1E97Fkk##=3_LwWoFNliL zdxGhfGTeSA=y0(UR#>&B^{_ez2^z+SK#54AhWNl=F)_+o`}1k;fj5I!7HH;WIjNde zRD*Hc!|#<77R_#bwY0_@8se|5^FiO+i>R9vcE19~wuSMriFXTR_hu(vd>=`%_9NJF z-%~DugVaSabfaa+4piG1UW2mB9n2kegjY023XWXEx3_7o@!%AaW@#rcL#1ren$z>l zRc1Y-_Bws`&%HuDm{>YR#uXF&aoU%Z!LMhcre5N)6t+^_hB1nVW79U!>%7oTkf_kB ztY-_f7|K(>iyq8oW{*)1I%1X@JU^Mg?(F-cIwu>s!c>=}E>~^+`I$hGGa_?xOq4D- z0_uzFXnzIDVyIMUcx*c2#HIMC zG^e{#(Qe)*p<=wyc;-oDL~D+QzST^6daMqRJ7%2e+YLV^A7Kb;j=1(g8T_Rpn2`(X zBBI_{2?3usD*TG$_oW3hWkZ?)8Bt|{Tt$)y3n{s!W`PBb03v-B*{=gq=y9BY3b|&< zC!59R@6W8kri zuBzC(Mfk315s*xMxZjrpk`wIn9kOam;qMzTR5s%x;3arnkdW8t#3MOnQ<|(G*jGbG zX$UvY4BcVh^;56RuNLg!=bIW!{N8GTU8H4C*s`0Vv}FCG7Y>IBq@s)Phz9}<;@kOC z%N_(NTHfVXV|!%??c9StjTp${3RoB(C2HGkbSF^7nnwXI70tkjOJF}$RnUdy~Vr7lHh$f>cqI7okm z*!(A!txa7Hx835`>d^8fZP&il0KIv41D8@aLV=rw;!HCy?B5s&>KY^4FbzAaVH;nW zD3C)kNRU!!So*r1muVH$oD4tOzs)OrRrakS#rDLsr6XSdp;Gtel57eYRrx5*Ya%q6pfUZa7@I4gP|kQ^TW?1*51b%c)0;V2Kh^bTSEq^-j;VSOQD z@78d&@l~l=YwLQcA<;VJeXM+I7hJ=={ATkp==qg`v0&3ElKGDW{o!|@sgp~Z*Q0g_S0Ey~RP}!+l>8^@F#%j&?FF_dJ=W*=vu*7Wdmy9<#nX1Ff{Ha<(Zv2;Z zIdMWm>v;$um&ux2+|q^6OCw1Fk=mux=c9xelvl+{lcmuz zv<;~%Xlu922pI$YFv9EHK< zH7=(z*=}p1h{kEr==U>*uhg|a)^rG>7vt>8z2=5OJzIal3ah{J9 zJO{?Qo7M_8Ac=;|y_ddZ6<6?p9Vv|Z%7pp-@UnFOf+T1legEWXR**Ue9_)+z?Hu+* zHtAB&^LvR1#C1@D`)Be3hkb1NfD*hf@z*s>z;r0WUIL5y>wv?r+%_%G8mtC3dOYDa z(AP~hQ!BE#PkAN&Mt{OcLp}o(P|t~jV~&6VmsT&?!f{?l1!0rsFhk2%qNlE8&tdQm z(H)0{W;4AB6@?Z`LInec!*P%Gu^r?}GM#vshi=j-^-Ct0$=h@{=-FuHNouOiCxg?M zz+ZHA8v0vid+m^3VWjo~oeHWNOUK{frk{FovlgXqzjPdz)1$9F-M{kc8EZB=ScNxj z=Q>FAO)h-BH?LWI?Z018E2vtn>DEw`5(m%#PMWh>utC zcM_^B7Ej4iyMJr~<9fNY-vM;IKe-V>x$1~f5FnXCZe4ljS^VAox!&iqf%S!l3HO{2 zp5S5eLALJ=dedwL{6?R*`S6LJU++a2wbBN0L;)|h&9NuCZIp7@`%vT8d>$$;WIAT?n{_^Xfk*l&t4`CV3XyHQY{&ZU1nt2Zy>80F^qd zzCbc%@(ZL~$j^y^A+&5P?n*@j+bnoW8}cEE;V-ktB(Q@GN8DY^;g_K4&FNdjx|o{j zb$gZ(t!G3KWx8XT<@(L6LU7BSJw!!#7|PSnaAw*XGFv(O-vJvFirOs#nLv(S9ms%d z3o)k1{@3pcOsq&uPXs6;gfuRE%R~u9h!D5AL^K5Y`)1pe%R@MP!i8Uj$YxMv!m+uY zaz$(*ZbeGX%0;f5s>3oI#bP?a{n_zAgbA1XpdRI8KOFHQ;BwF0#EJ%use!QqXWiki za#~?dLZDK0QHl!raRKbZY&YO@pCY>`V}0Y~nS)lj;s2^_uM*8?G4fq9Nqaq` zk^&=7!Ozhj(^^&ZXf@mGt=X70APxs#N|Q{LAu|0|dwt-I%H|sT!2y=`%LOYyHA3TO zJUGAW48`)jUx30_LS@LLDV~ogVeN|ab{oj*pJG8o!#q!o4zxfE-fhIfE*x<*E3u?# zsOZBc*}lx>WTa5K5o-I?T7?O2Q%uAoC0_(g+R3Y6ur~`(Tzo+J$YQsy$)4Ob&d)jk zZ(@vQhd!9G#&3^n3Q0t}en=xt*-e&kY;fK0#IKy zt2df*>u@c(rzdc}{fxw%5^K2ou}Mktt=@Cc+XTlwT8(T?lOtjB-N|QOsL61hl=CN? zm;r8wXB`J(5VZxTAHMcBF~Js^I&&cGs$@?|j;2gK>o-Pza3RV%tgVT65Uh|5ZMu4w$; zXO*ZER}%7Kc)x?18cWXZh(T$NHTsAejJIWNH3a~!wH0?9D@%fK&R2R5o8Mmh7w;8c zIG@lTXrX{>k@o$hSh)=39eC(Adn_5~VXZylgS5>6SP$I$0dSqbV+1rYg@(970qrl9 zx();ICarGpLT&nTlnUueoSTDUyvt-g)MZC0zqAExkbNm+UKTpJN2+UjCJn6 zgadro&RFaf(geWxrdCj9?2jGHw$kyoLha^(*pHUAC*q%B*UfGsKdB;Y7Qoewdrzly z9gal!~4fF@*13GbxzklUtW~nHXZP!nt zLbN`Zb?9s{+v95^WZr@5;sXmS$y=mj#DS2?Hg@?LWnI#LzZ!F$o^ICgBbBgy>cA(B zRX)}ic9JxgQOb(oFJ`M02!#D0niQF9tS|e{olRKK=zFQ7Eo^wfare(cpuqb|4sG^ z28IcS{gDM03=Hsb6b8tGHX8wi|A>--h?)Sn0A>(x6F>)G2TExIXaQ#=Y0|O)ekA`Xp7$}b#fcX)h_X+Al zP5Knn+X^57T{Z)7A?PCiEu4si1<|$uNI}~@07!!W#K-){+EmQH3ih#ZAoW%NWukQ= z5~!yIfC%B7_;1no#83Y#0%5m)xTpmEr9m>S02v6E+<#F`D?koHGXGzM(FS1q>-zt$ z4*zI7#eZDO7yl~^Yy)8Y9gdc^4+rG6|MDko0EYh=0r~y-;9oob@`(sND1WP}Ie>)x z{~r+h-hU;02T(zD?SL;3a)bXeIwOB|KtI|)Of`@E>*Boqqt=2G{|d=Ye*zhHe5moy z{>w-&ApC9mNyo?dzJc;O05~ARPJldw{PMpdx@)MQl+F(&y!C&LUUmXxA(Hn0MXFr@ z1&Ea6e^EylKnX(s>|b4*OT@n|Nx%MYOX@EEmFT{P|676f?vHvq-27|iq8lIy5qbA7 zQs@ClgZn?G^a5}azdyr+x_ST~d-S|~U=#31a1hA|01M>X3y=cmfcguzdI56a6)=B6 z8$96O@%88f;DS?r`b$^zeaP&g{ROD~07>u~tiPZW7k~)z>;Lfai2IjW>IcYzPmulv z`~x4dWfXrw)&M{eyp85B7^Vjx{cR2J;D;wI`oFa8AV40Rmgz6xX8ka}J@{e#Gs|Cw zX9%DG&c^u{%Nf7m+`_)FUjf7nC+@)s-&fAmeN*gwDoKno%s z0pNmiM*!mBZnFPy*eRnQ{W2*3zt14!(GTHrrN5f3svkA^=PLnv8vU?-q4Jmh^RcVK z|7iUGEKK~*sg17jSN3C}BH}-1_TQ-l)H(KHhhF<{+11#GuYhlVfyy|5?w{#~5WLsq zFLPuGKnKxHeDp)E`Cn$(=KqXS%fyGB0PDZ>$;3wkZf*Yp*~yRYQF8bT>Lx!tlz99F zQ@$TnA)flMC+z)~@tguk1JXf8Qvf{B*3>`#Kc))&|F`rE42.*?)/(?P.*?)(\?.*)?' _LIVE_URL = r'index-[0-9]+\.html$' IE_NAME = u'arte.tv' - def fetch_webpage(self, url): - request = compat_urllib_request.Request(url) - try: - self.report_download_webpage(url) - webpage = compat_urllib_request.urlopen(request).read() - except (compat_urllib_error.URLError, compat_http_client.HTTPException, socket.error) as err: - raise ExtractorError(u'Unable to retrieve video webpage: %s' % compat_str(err)) - except ValueError as err: - raise ExtractorError(u'Invalid URL: %s' % url) - return webpage - - def grep_webpage(self, url, regex, regexFlags, matchTuples): - page = self.fetch_webpage(url) - mobj = re.search(regex, page, regexFlags) - info = {} - - if mobj is None: - raise ExtractorError(u'Invalid URL: %s' % url) - - for (i, key, err) in matchTuples: - if mobj.group(i) is None: - raise ExtractorError(err) - else: - info[key] = mobj.group(i) - - return info - # TODO implement Live Stream # def extractLiveStream(self, url): # video_lang = url.split('/')[-4] @@ -75,62 +43,44 @@ class ArteTvIE(InfoExtractor): # ) # video_url = u'%s/%s' % (info.get('url'), info.get('path')) - def extractPlus7Stream(self, url): - video_lang = url.split('/')[-3] - info = self.grep_webpage( - url, - r'param name="movie".*?videorefFileUrl=(http[^\'"&]*)', - 0, - [ - (1, 'url', u'Invalid URL: %s' % url) - ] - ) - next_url = compat_urllib_parse.unquote(info.get('url')) - info = self.grep_webpage( - next_url, - r'