From dacad4db10fe1c5a0a5b4969737635d33fbf7f39 Mon Sep 17 00:00:00 2001 From: Felix Date: Wed, 23 Aug 2023 13:02:25 +0200 Subject: [PATCH] [Building the struct for a webcam video stream flask app] --- .gitignore | 52 +----- README.md | 84 ++------- camera.py | 52 +++--- main.py | 45 +++-- readme/.DS_Store | Bin 6148 -> 0 bytes readme/pi-stream-client.jpg | Bin 46824 -> 0 bytes readme/pi-stream-screen-capture.jpg | Bin 18072 -> 0 bytes requirements.txt | 10 ++ static/favicon.ico | Bin 15086 -> 0 bytes static/script.js | 45 +++++ static/style.css | 84 +++++++++ templates/images.html | 13 ++ templates/index.html | 260 ++++++---------------------- util.py | 13 ++ 14 files changed, 296 insertions(+), 362 deletions(-) delete mode 100644 readme/.DS_Store delete mode 100755 readme/pi-stream-client.jpg delete mode 100644 readme/pi-stream-screen-capture.jpg create mode 100644 requirements.txt delete mode 100644 static/favicon.ico create mode 100644 static/script.js create mode 100644 static/style.css create mode 100644 templates/images.html create mode 100644 util.py diff --git a/.gitignore b/.gitignore index 747fae6..e2e18de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,4 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -env -.env/ -.env -.env.local -.env.development.local -.env.test.local -.env.production.local -dev.env - -# vercel -.vercel - -#logs -*.log - - -#_pycache __pycache__/ - -#image_files -*.jpg -*.jpeg -*.png +test.py +static/images/* +venv/ \ No newline at end of file diff --git a/README.md b/README.md index d9bb6a4..7fd480d 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,38 @@ -# Make you own Raspberry Pi Camera Stream +# Flask Camera Live Stream -Create your own live stream from a Raspberry Pi using the Pi camera module. Build your own applications from here. +[Original Project](https://github.com/EbenKouao/pi-camera-stream-flask) -## How it works -The Pi streams the output of the camera module over the web via Flask. Devices connected to the same network would be able to access the camera stream via +## Usage + +### Creating the virtual environment ``` - +pip install venv +python -m venv venv ``` -## Screenshots -| ![Setup](readme/pi-stream-client.jpg) | ![Live Pi Camera Stream](readme/pi-stream-screen-capture.jpg) | -| ------------------------------------- | ------------------------------------------------------------- | -| Pi Setup | Pi - Live Stream | +### Activate the virtual environment -## Preconditions - -* Raspberry Pi 4, 2GB is recommended for optimal performance. However you can use a Pi 3 or older, you may see a increase in latency. -* Raspberry Pi 4 Camera Module or Pi HQ Camera Module (Newer version) -* Python 3 recommended. - -## Library dependencies -Install the following dependencies to create camera stream. +*Windows (CMD)* ``` -sudo apt-get update -sudo apt-get upgrade - -sudo apt-get install libatlas-base-dev -sudo apt-get install libjasper-dev -sudo apt-get install libqtgui4 -sudo apt-get install libqt4-test -sudo apt-get install libhdf5-dev - -sudo pip3 install flask -sudo pip3 install numpy -sudo pip3 install opencv-contrib-python -sudo pip3 install imutils -sudo pip3 install opencv-python - +venv\Scripts\activate.bat ``` -Note: This installation of opencv may take a while depending on your pi model. - -OpenCV alternate installation (in the event of failed opencv builds): +*Linux / Mac OS* ``` -sudo apt-get install libopencv-dev python3-opencv +source venv/bin/activate ``` -## Step 1 – Cloning Raspberry Pi Camera Stream -Open up terminal and clone the Camera Stream repo: +### Installing the dependencies ``` -cd /home/pi -git clone https://github.com/EbenKouao/pi-camera-stream-flask.git +pip install -r requirements.txt ``` -## Step 2 – Launch Web Stream - -Note: Creating an Autostart of the main.py script is recommended to keep the stream running on bootup. -```bash cd modules -sudo python3 /home/pi/pi-camera-stream-flask/main.py -``` - -## Step 3 – Autostart your Pi Stream - -Optional: A good idea is to make the the camera stream auto start at bootup of your pi. You will now not need to re-run the script every time you want to create the stream. You can do this by going editing the /etc/profile to: +### Running the app (not recommended for production) ``` -sudo nano /etc/profile -``` - -Go the end of the and add the following (from above): - -``` -sudo python3 /home/pi/pi-camera-stream-flask/main.py -``` - -This would cause the following terminal command to auto-start each time the Raspberry Pi boots up. This in effect creates a headless setup - which would be accessed via SSH. -Note: make sure SSH is enabled. - -## More Projects / Next Steps -View the latest Build: [Pi Smart Cam with Motion Sensor](https://github.com/EbenKouao/pi-smart-cam) - -Alternatively, view more projects that build on the Pi Camera on [smartbuilds.io](https://smartbuilds.io). - +python main.py +``` \ No newline at end of file diff --git a/camera.py b/camera.py index f70338e..ad164fc 100644 --- a/camera.py +++ b/camera.py @@ -1,25 +1,17 @@ -#Modified by smartbuilds.io -#Date: 27.09.20 -#Desc: This scrtipt script.. - -import cv2 as cv -from imutils.video.pivideostream import PiVideoStream -import imutils -import time +import cv2 from datetime import datetime import numpy as np class VideoCamera(object): - def __init__(self, flip = False, file_type = ".jpg", photo_string= "stream_photo"): - # self.vs = PiVideoStream(resolution=(1920, 1080), framerate=30).start() - self.vs = PiVideoStream().start() - self.flip = flip # Flip frame vertically - self.file_type = file_type # image type i.e. .jpg - self.photo_string = photo_string # Name to save the photo - time.sleep(2.0) + def __init__(self, flip=False, file_type=".jpg", photo_string="stream_photo"): + self.vs = cv2.VideoCapture(0) + self.flip = flip + self.file_type = file_type + self.photo_string = photo_string + self.exposure_value = self.vs.get(cv2.CAP_PROP_EXPOSURE) def __del__(self): - self.vs.stop() + self.vs.release() def flip_if_needed(self, frame): if self.flip: @@ -27,14 +19,26 @@ class VideoCamera(object): return frame def get_frame(self): - frame = self.flip_if_needed(self.vs.read()) - ret, jpeg = cv.imencode(self.file_type, frame) - self.previous_frame = jpeg + ret, frame = self.vs.read() + if not ret: + return None + + frame = self.flip_if_needed(frame) + ret, jpeg = cv2.imencode(self.file_type, frame) return jpeg.tobytes() - # Take a photo, called by camera button def take_picture(self): - frame = self.flip_if_needed(self.vs.read()) - ret, image = cv.imencode(self.file_type, frame) - today_date = datetime.now().strftime("%m%d%Y-%H%M%S") # get current time - cv.imwrite(str(self.photo_string + "_" + today_date + self.file_type), frame) + ret, frame = self.vs.read() + if not ret: + return + + frame = self.flip_if_needed(frame) + today_date = datetime.now().strftime("%m%d%Y-%H%M%S") + cv2.imwrite(str("static/images/" + self.photo_string + "_" + today_date + self.file_type), frame) + + def set_exposure(self, exposure_value): + self.vs.set(cv2.CAP_PROP_EXPOSURE, exposure_value) + self.exposure_value = exposure_value + + def get_exposure(self): + return self.exposure_value diff --git a/main.py b/main.py index 603aa34..e32da11 100644 --- a/main.py +++ b/main.py @@ -1,23 +1,26 @@ -#Modified by smartbuilds.io -#Date: 27.09.20 -#Desc: This web application serves a motion JPEG stream -# main.py -# import the necessary packages -from flask import Flask, render_template, Response, request, send_from_directory +from flask import Flask, render_template, Response from camera import VideoCamera -import os +from util import list_files_in_dir, generate_url -pi_camera = VideoCamera(flip=False) # flip pi camera if upside down. +camera = VideoCamera(flip=False) -# App Globals (do not edit) app = Flask(__name__) @app.route('/') def index(): - return render_template('index.html') #you can customze index.html here + return render_template('index.html') + +@app.route('/images') +def images_view(): + file_directory = 'images' + url_list = list() + + for file in list_files_in_dir('static/'+file_directory): + url_list.append(generate_url(file_directory, file)) + + return render_template('images.html', urls=url_list) def gen(camera): - #get camera frame while True: frame = camera.get_frame() yield (b'--frame\r\n' @@ -25,15 +28,25 @@ def gen(camera): @app.route('/video_feed') def video_feed(): - return Response(gen(pi_camera), + return Response(gen(camera), mimetype='multipart/x-mixed-replace; boundary=frame') -# Take a photo when pressing camera button @app.route('/picture') def take_picture(): - pi_camera.take_picture() + camera.take_picture() + return "None" + +@app.route('/moreexposure') +def more_exposure(): + exposure = camera.get_exposure() + camera.set_exposure(exposure + 1) + return "None" + +@app.route('/lessexposure') +def less_exposure(): + exposure = camera.get_exposure() + camera.set_exposure(exposure - 1) return "None" if __name__ == '__main__': - - app.run(host='0.0.0.0', debug=False) + app.run(host='0.0.0.0', debug=False) \ No newline at end of file diff --git a/readme/.DS_Store b/readme/.DS_Store deleted file mode 100644 index 1be2f782abf9540f9f4d544d53a359a4652e74d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJx>EM41IwPl~_73Ffe3fDN<*aQ&k3L{s8S!A*zES+V1z$_-F8*9Z)MWB7~4F zInQxyC-d;XM7AC8)#VeMW;|b$Rp}*+T+E4LHUyrt-u{o=$%*aZSPA(bJJ^X4WY)e?DH4%}#%|aHPgD+F&3UIAq}1 zyCa?d*ZgIwkNm@w=mi78z&~Rk4Q98qDL<;5t=~RRXKkk5Q6-A&Wl(4zTmsn9K5}M* cKAvSWt|{0%s*3!UPK=9y5fV)>@Cyul0LhOs`Tzg` diff --git a/readme/pi-stream-client.jpg b/readme/pi-stream-client.jpg deleted file mode 100755 index f4be707824f8d9e8d8eae2f0b2389f8799c5cbee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46824 zcmb4qWl$VUu3i(8Pz-4=I(li=>|!3kt{aSiV75Ind`aCZv?2^J*4cXR92 zt9pN5&(H4a?y8yUnLd5yzm@-X0B@9`N>Bh25&(eoZvp;W2gm}@P*BlOQP9v((a_P+ zFtFZWVPRro5#izEydfnbBO@guA)%mRq@kb$gGfkdIcUL5%&cszjViM9UTh;ix3NokcEPTg602P{_6!0U?9aIcL9;;0muYMKmw%y1_4z6@7oNLF#oCFzX2d40g;i>QGpofsHo`3=t#&w015#r-CG_sLV9T}b9Zzi-mpaC zf>|)1jCOc(LmvhSgRX@~5=7^H#ICHRXXF(r8NXags`k5cGDQmD250qETxaqCS%bgpkkYw|C(vMU_Sfp2) z`9S0w24Nm0dd#BQcTV~pxeXG+aao!i*M!+|w9H}+s=7`W0%beNJuLQ$Y2u#ns}}C| z8TYc^FlSXB0be3Tzt+_uI`AhfS{;~0m!|KJVkzO3b454z7J_hue=$hH%T7SShH6|Q zr5Eb2n-u3u-`yM2_M@263>zOw)dygUTr9%1{$mw95(Ow#u*IF!%&v2<-~{1x*Pn(=11fRJY`bqSGvA(Nd=O!t_y_3U=u+bmeL!+r-#Zz`gAND5M6@ zU*eVocI*o#^1%{2kGd_0LGQ@5AnOY{idnRz6|Sfsh0;aiVrBrYto*nxFDD^YR8IjpESO=&!*kxxyG!HH55EawnJ@6agMCF}|Cv?@$z2{m#L>cbR$&hc}Y zHAQoNhR2g8Y7AndiZriWAFffVC{hKGytF90UOD0fa$$A{`I-KPgA zOoErh0$W=LW0Zz+))wu%z#Idvn95DmBua^D!Zigp?x3y;P+{C5q}7VKUD^w5^@Z8Z zh}$7}VUBl%`8^>RH&(j+vLc-VT4=>d#KTv}BFx?}{CoYV4>hkvA18mx#)ikVo6er2 zUbvQZCAbaHyYmUHSmFE!kgP#3*8h`+mADEml^-8|gEX)g6nk}iVl)+~*D%i!x5+j{ zbSg86EQA{5gA3n5IlJ zN3YedHOk@7DMroHiHo@l@r%IMFYqoj^w(5*#&J?c{g_c-z4CQqZ~-P$7zrS|S0W|z zGh%_po4|!A9!tGlX_#$l1e{F3OhBOcfm+_EIjQyW$5m zQhhG{yg$U>Xbp4@-^{0w-T(YVJwC** z@ZQX#J=TlcV2cA`ld8T>@j;;@n-^n>f_7(s5~P)KfF-9H7)6Ezo0VxO!2}|I?H|Y} zVs~x>XeVIfR_ePu0nk44>Z9PyuW?wKD-s3}@xuWK%K%5<1}b6XQF7?bs~6;l4)QAP zc{ew368^Kg7-W$u-A6VgwF+ur20`v-qQr|XKvT>}cLfb-gs%ju?30P|b_jvHf{w)a zLrvB&+SeM~__*1OY|F?6TioQ(1vFKtQ?}bY1-H7Nr~0`ch0KV1H=2l9Js-T>HPpAa zh=vWABtV;mW7XG2#th`A3O{DR;v02`1uqC#Kz;H>%s#^qGSPi}4S#=@>L8?kWI>sk z_@Eh1)TExtccqD~9wE(U1Br+TFfD@{O^KX%go{G6eWZY(sLn*idStwj%(%}s(I7wx zcRD6h@OKgM2eTc`123KM?cg_X7tUxqh8{7y!7{HD&QADSHo)`%b4&n@(Qy{RiJS+} zY5!2xmiC6MR2pqgl7pZdx72I}uvgqfO$ehPVD9341N_x6lS7wH@E<@K?2|4;UXa+Z zqH{LT#>dL+)>fJhmBe_|iO-s|?2NQ1?X|N9-#MHTgkMnMx(^>s|m4|C}WJ;GrGGdCweKX!FR{2n5bZ@@M>%Iz91H4mvE`i=6 zvwS)~4L&)2;UoD#4&gKVl65es(h~~@v3V}9WcBg}SK)1PgAs$L*#Ur+q9K_9^CPGt z;E&F}VpH^bq)qcC#Se)^S$B^dwJcBfsrb-JTSmA^1S?CGwF}%bxJqqtO*)l^D8~Au zj*(^Q&ozc%n=;;wNi^kat%rpVDPEP^(B^wi5&HW4VGEP}rS?IiX8rqu%Xe0Z3@dV1 zZ}>LbrWZ1PTTQoc7Fy-nYziuv|G0Ax8uI!{Y(Cvb3V7esR4!d&f8^Le=0nRCvBo^! zV5@IRJr1Pmmx(7kgXX^t65L*D56YLS4$OrA2|8hWq{P>f2zv5PF^feO{l6 zxnhdWW)Ee0Gk;GGJdD3p+e?NFGW4)3OBd#u-^B17Z5thy-2@NogAiSVs6p*vOYK$X z&j*er9B&+^Kd3gQRL?5RVVAw*=x5o9)gZ;%X}=)9s_Mos6}VX+0c9(R+0p@nEGK?f zM$WBk$Eg_f#Z9ufw4f>3h~}m7=p6mDqN1ErTQiZmuXQI%#{-WnCsr~v@RyZ;P#P|p zqTKfQhL~c;u#yoOy_p0)K|n|>o}j+e7F2b&yQQQXn`h$T&+9X`a6vxKd2DM15b?1IT4Wz?OGa(Jt4%9XaRCD;4f&_hnfe&bcyzY zzcX)yy|1fM)6OueTtvEld=7d>(XH)tF`Lhl2ZM7cgJb2yN8D#hcpgRuW`@hG15c`T zG9bED1&{KYLD5p7 zV@#!st&xjWkPLC1a^9Gk2?-07Evav|X|Z^xXb!w=%-;51gZ$0K%BzEsOd zvorsPS#3t}*&vae|_eoxQ&l z$4F}yk)_3?pNh*N5LPWFhfJ9V=V+ilgK3ex|L}Bg0&`Q`9**K(qa&bY&Px^jHjqS7 z%tM*fyB9r&Ec{&IYx3il8)Jrx-wTUXtLNHCi6RHa#-*%8GY1PWjRwObm<zZFq;XNKj}8i(U11xe>r3UE?$$zBa zW01R~=4;^|qTwRE%U>g>6*r&h=lP{Llcc0`SDZA>bUbv5OTShflsQW6<$|J$g; z6O<$_Qx_jowQ48|ddo7BikTc4;*LKae{sEoXpo%O+S=N|-6A|~K2>RF!5+!!Q#*lU zfU}O`%#$grq0zG{VUG-wA_AR}ghTzJ@zaq5Krx2rler;o(S8XvS+4~ANy&1^uaIK& zXdJiryMk}jkNEO^Kqg_&1N-{p_Z@|_Eov4igL~vK&4O2RYeM(D7QaC20CPo$w`+OwPJV2O?c%x9`ci?e4#eK#r z6Kq$Aa+-mYGDS!Bg0__fs()}3cN|*peTKiqXMnl0j-+xQgI4fGJ~Tw5(Lmtr{x59r z2^u_#pFbHn!Q5A@OVdR!BvQ6`UTJca84-AY@y2fJ(A_-0l?cL+HL&t>AR?V^ksH}K z6e)yiv$*tXt~v&Bso&HW>UPA$)l334PJ*bY=Yz*5qPV-*sy5iAOQlKWMQDvwIWBUX zif^WcgQ^aDG98n>zL>NnX8-MI06e}IBgH*#i>bPhJGwG~rUpH|yH-dx=520glQpPSdH4+9M*lj;UTFV?X?>Qs!LzH) zdC0rQK#({zl*Sl(TYX7U4Z}`lPQ0i?Z4*R(tEJ*X){6AFgpX>k(hv`JUOP3NvFAlL zG9UtOv%T`W&z_6y)Mp;67sFH4{i?(Zf9ii*D~~%T2g5tfZY17sh=>-+J1>rLNOb_T z#eyVIUWvbanb<8sIj^^bcP8a$;U&zNo24gV`rZIuVAjb!?(hkHUaa(5!S zlQ6?I?)JBDfPP_dQFAYJE+tJlkx`iJT-?2u!F`VxY^Ph+^5@~fs1)P_e4!=R_{f5R z7P&;}eEPV;P-TQp#Ysi5&m1|7AfF+eFY0Q@_98i?c0Ec*k`SjU=$BHBY1J5KvBttE zLJl#u>O-~7bzUXzj&i6PC-Or$V}$hgp^>{Vmu=DTxr>az%$6lYpvBGSz3@%pU5pSz zyq4M?)p?##w}7c4_WG!#tgDgZ;3}nryLMYT+33@pcgE-xl`0;Cc03HteZK`ap?nSc zq}#``cW%=~rPTLIw3cV4MW7PW_N3!ij2qT3uVMofYdDc%a9uTGlgl@?>i(IM;|Py~ z`RisE(BR$9k=}(o33L)FkqPfT;Id}8;}mIS>Qe%*i+6NJ6Mw1MeN9~RGBGzkRwq?~ z{|AU7E<6lpE#yUe7*hG%JnVh-+DehR4BXCQh4CJ+6#Pb-VyQH{qmk!6x5?@E5ns5Y zg+I=x_h#$!PTMU~?(BUgvP>1C@DueYtp{Q!L$M>2GibE{w}oFVI>_8%Sn2>Znn>ps zf50>kGy`pf8tu7iGUISOcAzKZ)H782chRUOPEiKY5?BG^h8rF1sfUw)o`tQ@ zf{i7I49|OKM3l%Qw*E_}I35JYD7Y$V6_F1#{_fcV7-0T8kf+@0#oz>W5M}q*To6&L zPGapW-gt;ZNt~I0+0+P`Jm^p`(`LKsXr2(`G{Ga{poYt2?srw>U^8E!1T_3qYRt4! z7?FtdvV;GxC!$ml8r#8*7fEI2_?_+dqb(Xw`bl#!7#;jIb{V7>kt)Eg(zcUOLid~Bt4P5d@i5M!C3;URi~Ig1;E!R&ti!yIp!&{pVDLKp({ ze3D{8Y56c4ww25#ddg=slGFITMOI)}9VmPYd9uI`RvJo;5w9qI_qm)(T4=BlX;<3r zBlFvD)1^@xtUW`CyTktTBF$i&s@rnO6lnxU9!Q&AdBkQ&jrw3ggL@dg|GP3YnwO`y z1!qi1OzZ_Wur`}!>gCpp`&2H%CDbXx73;b`V+M&v1ZzVjV&(6z;ghQl>fl8-xn{*v zLQtMW^U^n+(eF!4L@uemuPr*^-102jE&I{( z#Q3&J$?J#B>ohi@D~TW(S>NNOAwkWSw*^{TYZBk81(MGF`we#m{z|rqM>#tEutvZ3 zrCN5Aitf0A66x}Wb8~MxTI2CobET?U_)o!0x+F*cjlnRj|oamEUv7oS3}_$T)~+Mv~nBRT?9Bn^oL_NZ-+DRi3k(_%Al=jHDoTEK?)Zvh=?)@6-+)ay@Lu8u{) z=`MY>wZ^+Ng*{B|zVhCv^I%raX3r6(X-eAt(YT85SsxN_EB%d5u#$5d^>#E-?Y(x3 zPbRS=D#p9li>3Yp5Z>#%TNt>rh_7#E5RV(x!hK@QovTe!=F~QvI&&K(AT-Uw`kG0D zYsSXIGwIm<9{!1wOW3P-o5N*Q9k5{SAdEC+eEO&^qUYb_N6x}IEfK!)RGvt)iG*ywsU)7bgtu*m^i+@m7l$ZUw$fa zOwNh1`NeK0R369waM`Vw>>BHtZC>=mD|3PQ&7f3vkF+h()GB^u=n(onTHB4GW~-1p zr}H?t0{<*N+-|*;bvQo4F02#Yh(|&*{xxbe+iRj=xlg<~vG}_Z8Z*6A;ELx8ZOb-~|`+M^tOH)GH& z;+Uvm@VSptQyEnhKL=bfJopUf<`Cs5yG@xVW&~WZNThXr}^L9V6fLLQA{_Wbh%Ek9Zh z-Ll0`ar2hM1D%j{q=uy(N|oXuqGTShgC16LpD$W2?r_W?IG1HBUw=3n{W} zz5O$TheWi1P7g;ODHlE-|BQy`87I9eRECT%p}P^vDnzv)U&JOax-SdX}I)kJYJVC@?};x2^e8t6Q?RrP79PAI5&8m(v| ze`Ln{^%g2#NcDne_(}88^@kO%x z2c6Pvc<=gm2iGp-VjSB}2YnKQ5?M^m&M;{@o_eCA>CC0Zb8d9n8sYzigq`@W(uSq=uH>IUoUv ze&qXNIh)VP?U4hUB;&0mh2YteyS!)>p*~~Grv&*5)?tr?|03kNh)!~U>6Eue}BikohgD<+K zicS$};}A3&ASYF$NY%V%fYY!pFHUot37~5xP-M zoSa;$D|pr|@tnEF<;T}GoMUs1{1i6n1tP(>0byAeem3(3XwFcS(tL9*=nx%MPAo$bDqGJg_#J>cDPv zwmo-e4fd^p4ZZL_CV|5Al+~bz}-M%;_^H?Pvl8{zLw&ia6X+4&m=HV+hHUv3u zerWii+~0Icy7VVOVBZs*CvWodP*W!Zsp0x_uDvyTfwcY)B6;&^g6#N)zeqxHn6rDl zC~9mQtaDcXPRE-|Na+KyrB;Be@7&!oZtEA^W*=ZE=1TZX{WR~V)Q=N&vexz$MkjxM zPZ5Wsrh-9um_jQES@OeO11j}he)f#xINMClOcih~b1U#JY@_ZW%Ja9Si;MSvfX*Ba zKQLCS>XNI=(E{UN=(VsjgBTB@k>8FChZtS>W?1wT_iVDZvEUb-!4L0Bv4-za9-XnS zUVkg{+tI`QMeaCze1*(HTD(bGSUU|;;{ajm&qK}=eI7wm88>XAg0kKMy!m?v^7^;q z_+HBwi|+jgir<_0o;}}-aE@g3{EE)u-X)#nQC{&LnA^`y<(9eIoJr9L{-o|in* zbmtL;ciX>aRKB-wh+v&Tuuee6o|FeB6OFdGCReM!F(7T;7SyZyq=uw^;3^*JE&dOX zm0&uqh>HPyUL;{sQ_R&9_!wsALH|Zt`ntU5!2<~vw#OQL7`OueJ4E$X&Y62W5e6hL zCA08(pt2V~0c_Tbvx;Bv@`AJ~yqE@ZvArpyku#iktXC41xnx1sig(4oMpxin}b5`U}FX`kDQQ{xCTT+{m z!Qw?$E_n7mN3Yo01Fn-gDy=?!M7jsKEKf+f@mRd@7>)&Qn#^Ol58Pdij!en0H6|7( z7vC~A(7h%h3^x0Qn#*ee%qR;=8c(DTpY(&?iJq;eu3wuN_E9;!^5d(#4K8v}abBw3 z7O`GU*iaS<1t~l%eJ+Pmlx$SA3){nDzqzdErPeDKN{wj3;h5H^<;_(V@j^I ztRDZ>U~tTAgB*E4u&Gz1(%hC@+4|j(SrQ9k4Wt2lqA1T`aMAkv4>UqRE61V+e2j4_ zHO!rzj=C~Rs%@Z@*&u+}jJL8g$?xMzZq;6wMAhnTWe5+Xn>^FWW0H96-eWjr zi&9Gdes+~XCjmN0;TsQnyYRIU>iIRmNLMjYX-}sKUT=pbg-(mF+%v~TyU?NU>?!)i zpF(j|Dq9A+LZf<9IcrY5)I^+`x^2ANjtZ0a(}?ElM(^M7mfq};t-d`~Zf)$*j&Va( z2%>gi8^6&&tWxm!HJ$>Z1ZIa7r$eZ@42c@;^_C{-7rceeFFq-=?D0lQ;0#bc*`!Zc z9lp#u%;4YgeyxgaiWgNFt_$I z)QD`?Ue*7?f*a|Yyu?HRx_178ezlVnJT6RY;+!aB_kKiRy}#O}xvDeRXl}A&jCh?{ z$CFx_w_!NQ=Mt?%qhP?=ZRx4BzI7QShhku)inljN)igsn&qey~H8B4%JJ5AzHAP%= z7@rt7)qU#p=>uZJa18A5tzpe58d+FNwL7Hu5HJkI*x1jJUAm1u=QQuG??5~aLrYYH)_FeLf-^@a^cj`zeYF$di78+}_Pa@r09EZTwN=KR>WR53{pyObApg zrorOQ+Hta=Zm&@N3glKK`lGNE{)+{@DSoX2&Ct!GQcP4AFznL&1rN%JO7`6Retorb=Na#5Wln2!P z!YwwkY5W>zRBaUGIuQO+SrnTWgC~_-Y;UGXgq2R{t&bI$p-DH4X3u2|;J&Ekcd~L> zH9mJ$5t(VqF(UfFY9{Rw`YFQm-loU(XGjTgq0H3~W_#2_k@_F-pl|l$@=~kzh&wt; zD6dG0wfN5RC>8&#_0Lc0u4h8VRfgCy3MX`%ijVrmPiXJcK@YxDE{KoBe#NCK3oho0 zNq@Zbx>F}hJYfx%dAs*Z>54s3d0REN>wf&0qI3mk99TY^{{ajhT@6%LmiCO@3Gcr2 z!Kmsz^Nx*j=w2ryKW_XUH4`^2X*;kU84TvjGtqbDAjvvq5*B2d9+_Q#@DkE;Esa#4 z`aRsmc1!w z=|s9N7YAo=Zhl$TY?{vR!0mHUyBiMiR=~e~s9?47S=A>1-}hY5p9>4 z&9VX6=^(lHpgo^%u`@^B_8G>L;)~_hM#kF&sFKDr=3I{mOQ!+e0&bY#v$?51|8(@! zi3ON*y3kZ*w2xptyo=`1@}{waj*kW>zm<1}ICkda_O;QPS!Ptf|E73JsomDvaSGFL z=HsXbM2#Ss*OOgT8$9@1EgZDxkjV(07#1%Exbnl#zoCpT-Q&$Ew;_cK42TJ#cOBK+ z*O=IE(r13D)*d`?&p~+3h@IkY{JGaNHQ`I-umr>XRJc6jQ$=1!9g>VpuIh*qqdc>H zmMx#-r#pn&{48~sd8;!S-*u>*aNe8}7R}I}`r0iL0m{AuJDEM-_sev^Lc%M}4UHb; z=`15)gnH!ri}iwluojb@!m1S~e^8P4!Y@-CF@2sVthGSJSSkpDD_HuKzHt+&^_^P` zC5~SFTFJOVmBAY9h|+o*J(mB#W1}qxvGuN-kn9S@BpN&c5sb~`t(%yDG^%!qA_v=} z&P9=#{*qa6U7?V|JU7cz)^SbnAW7dM%67~8(1z!DTY3jHleo+Y54$N2^aav+{?#?) zdgI#bTZUOgYt|aXvJpB*Pi9hQ$32q6JxJ#1TB7D}$>sy0W^hVSe$ruW)TSGA;t3t3 z;gPxb*C%6$%Y6{byC{vCKw3h&Dbumjr=Zax|n>HbV z{<)}{LJ{OEXBE!A>Gdod%hq=_DJ0PhKK@?9o7VsdOw95}J}8*t+d8Bv(w^a*)+iAS zQyd!(W-~ftSAC)~%mV@}dp^HMU_emzM$d8l=7&A6KmmHF3am-G)JQQjA|geedqZ+^ z<3WZ*)_cQ19VW1RbowAa`-i1ZEZ>KVH)d>?$A)YMqebt^f?wE(zuftzT`Q^+41oNw zICfRW*DnU+WTm}!n!EeZP3U*$Vh?YxHJ-onaib}2|6+= zFSLlP_9eZ+GelYtf$7qcQQ`+2=9J{{Ww7qlTIV<_E}ZevyKl1ewLUqM+?wcAT^R z!`aNI8aHJrg$4TaWj7=|0d?DdQKB9oRg*c5d4mhVL{$z6RM7_kXZ99pj7@E^J*-%X z*He7zX`+E`M;?BfIWZ*+HZ7LE6VDCVA2MtIy}u+lL&ic?7~*Q!347be0G?Y#{eRv} zCsp5*LvhgcM0>o}jWZ(OIeU-|8h_@!fnE_+G37aI26S#Hmep5hv*(GQPHCko>20r2 z7&V_+&5v+>EpIk7$lb*NwVqQ%l*!F=_WcU@>Mgz0j&fjYj<}HvEOwSS5*$l1)KhDB z!utfr*XaHhN1oq~yP%9_D8UF$ys6ACVjbSrxHc%^rhwzd%Z!>+?{-Vjt? z^Q8C#jSG=SWc!``NUS{g1DpV#adF`kFQ5S*Q=&{%GrBlEhO>M7&#A%Mrx4M*ZJ%T%tJgCh9;5y|B=#uPBwlrb|xB$pP+heVY~|wcfh`=!^UP+>=nZ53e7Jq zC|S7;-}-~;LP4C+Su_;hBO83OaCNFKmQwfRM8!8Zf3*Lxg0xWe#;bH?x+s#b$3HuY z!TFbLA|#X1lkx7+h9Sv0-Sf304EMg{qrAH_-P_@3v)_xU6F+?$zeb2JCJRsW*WbnA zf5IGHU#g0nkIvE${`6#*Vw79uZHoS3LqQ;??Bq#y!^E^?+R|Q=NvNJ%P<$UkB|}LW z*bXhJFxmV-!ldJjVZC<=QXLSz-%Hvz`t~hr)IOm@+M3y@RC+D-8qb(IyMoK==gYyR z2UnfBAth}6Gw_WDH>FsQ?zC2tx7ztxyVtfG%eeU5_U6s2eClNE;;qywM=7Dl03U$z z=F4v4zF|m`hC5exg&+p=7LDij8o#&y93?9vnl{|PV*Ze0Y#?{$ZQ^%-A>kYToW;7d zUpk$+j0y4#)%)!5*eP{p1``L!V@QPC%0Y?8{fi1$nwr}mBLIs5HtM=qr}G1rbF$it z{9+&qfiDsu?{~MtlDDGE&b&5b0%f2U;ell{Ibz$$*!jbj1Y&EYabj5wqRmC>#NzZH zfIwxBIZb2zFJ8l#rONi-6zPjkI*>8O4p~Hbo(!8t7Zlx2GM){%F*w3LEG}=k-OxfX zHMR5@I}!s{x+KMqSZvIN7DF1`UCzW=tN6eF?Z>73gC(UhHT2k&X9Nv|`B*YfwosL} z&Kx6dhm!;j+4skz{-S-Zb{Q3d(d1y%ENv&7JT06-g*Oz@-KGSinP~qG=4m}>EuK*^ zNVz1s(Uad5>v&P#0A7Doz(EY>Zu=8)iG`t{ngN=%iW(oLB!+O$P)p##5140CAp3O{ zS{(E7KRlJE0FI~UL&GDliV%3O+=Tpz@&1RYjRimzU!*Zr|I16U>ju=$l{B)y#t^Bv zj%Qk!=xMH62R@4Ov=Bk^A0UrtNe}%cKOQSs=7fHXcmRZWV=vz_aQwMcto*Ez=GDyh zhc(Ksoz}${dse!z-IfEEa$^WRm#GXV%Z5!oCK$QA@?4SPtvjR)E7za^}G1w!Z+Fx{OoUkn_1;d2RX`~C$AplP%RWMc(tuIe~sSj{|~TAIHi#u zW#v`%w?zKiHyfQROdkg)&&9(rgNT)A(BsXvNj#=(cw;C1g5lVWJt0|tl!=-o!Eg9DrE;nP7ezR#IWtc`>#RS z3&Bw9_bQ6tbRXhlYx0`JaW88ZAMnvU)J3ak2vaSGIFdyC^0W65V(F(ot~Me{;wnPN zYZ9r_^PF-H;!HiMLPp##MtO|ukNQ&GZ83%21Zk&Gf(`Xmgd13eVvB}o4c(Jf@kfk&pYB?ks}Oa^2WyXqA^Zv?285in zbev2XbWkQnsh)AUWrdkhd%U^Xsji{+7!sm7znH>V5oUsvh%+5NA)%28V!>reBTG=L zz!a6#9Mm?Q_RhZ`vlt!3e4^87mSBLisS>d@p`+ixayijY3Z(y>i5~K?zmQ{d<7PXK zcd~fDzrJ`{R(dvul<&3z8+MS_Q8+}OoK95_ygybPG1CoK+|Vh~9spWGL&YqYk3XQ40|y`GDPw)smr{hU zP<$7xXokYk9xfqr?*V3JzCSR;z&Jc|3gecaDOhlPu@J_Ox;`jM^{9bO%GZDmHYtaj z?|77-{j`WEJK)3UHMsYEV9TDxV^Hw^_&-WCmk(u5B?>-?;7Bn4s-Gh8qEIQUekDMM zs&{zX8!3@mM(S0Ul)+WO2WNzA;|HV5Sp>YoV9b#GfK7!ap`dH9&TUG<>T)`$lJ(pb z-Zk`&eo$!Cy>34`jgs%`tpO;DMN^5FWyAM} zmGnTU0A$Uzz{&@$FLtGt6_89*C=VHQlZt1`AtJmsz*|7PJu@i|Q-*nzO-|GN3bTT(LVS| zmFS6w+1W5N)Qa)Q5GYpb!*Cw8x_9n(bbZ?_nUGBX4WtsrBmE9^5KWRzvY237F8s>* z;x=m`F$oBdU)yE^zEN(eKtHj?>K-ibdN1-wI@{YSKqu=QpVbomm+G%s4F`E}Cvx24 zigU)oJJ@b8kFwnAdMLu64!cd`q@pbLJwl%>|J)0gmbr$K_g^1*5LS4MNQ{^{nl!E7VnasF8)90e#KuQ$d_L1ORy`HF;t#6%FN;GZW}rVe$ENQJ zmnXan`iUDYsSF?WTqJP&6qPtzxfs&>3#XVoy9Mn1py(p844s~}CKhZm6D-JKsK3_K z8Dv|1^QV||AO^=aj47OJCd>{~)Z=#t?qG z7d`Lm8^33byEAaOZ?PBr3>c&+`KHgUtvJB`euejF$F>gdS0%5_0A^*<$|F8US@<~> zCu5~?Nr_Ln3|UH7hm^xI#e z6s&MhqwhW_Wl6n+`az+5`ULjN^`pa{M6|3xgx25F1qg^(`HDr@albXC2jW;AJg zcu64gm=|vypYhqA?@H*3)4xQ~$!~jesPn>7Go^&OX=mt7UByf8t<1LK zeCkoZ^xLa3uoIqSs*#sueupjecC$z&&BYvR#j(`-v-5GM*svFjK>j<2Ovsw;cve#1~)4 z5Q<@5N-(u@#m4c|0d6wMVj%wATyY0Ivjrb*)hS)thz1;dsEI)|)WY30#d0o0Cl zX0Y=*^pWSFH#GFTUuqj5vPy&2wH~Qv7B81*`ro=#`&^jMxT6)Sl_3kZf01bUn!IKc zi{8h&Ms z<8R%jvB3WTyM7%(4x+w1=f~3#9`*ga%qDsspB%E}_`I=a|Hk;lSHu0tNI}A*=$({L zt}>tOTe+ODy(~UZ)=ec-Qr91oY5n>Z%$ydlaUq!ztpC$wMvSu|#Y&UGO<&BASbJ*$ zk~%*$f9t-)pInvNk=zf5?dSg0ybv!lWcbGO4obxsB^NFD4NP$0gHYcX-m)m#HD640 zf7jq(6CVMxbY(-b8$aOL4tf9Kb*^S|X@Uky9JL_s{QUrGMaIlvYaS)397WUO_hAmx z^5>ap`&0C!%GHjK)Fb>M5-N+0v+<$adZl&L)!{WtQ<6t7fmZ~%!@H{sj$ zj*2vsX)A)jnTN;fd27L^rb;e3R4s4+emBX<7~hWs<%vJq9?FgnS`Vpw8?$K*H>tPh zIbivdWrZ{T?82ZA0OOfOeBZoZ#QMj6!#119U$52|mYQxr{9te$Mf%4D$b|=Lb}qG$ zHYQDP&F$g|Y4eY*T;K^iEB}Uye!o9(<&(Vs4-lQ^$odAUH|7tY5^l;lOp4n-M7{Xq z>9L-OYUVmY)&I)H(vW{*rh4+d3 zeR}4=E7(q07Q)YyT57|0VXh;7ZxrM+|N8)y+JN}28r>Za13sD4F%BM{LX=7;*4M(+ z>3<}_Thq}@{UGY*Q+D9Ua zuqBuhqXqdTFyNzi2o7G|WreecpVAJ)P5IFunH7TB_M`;CCXXVH%&XEbtkSCqPe-uj zM%wYxSMoaSBe2`Rq4p6~^cN*vGmM!6$h@uaj0MkM8`wLOH|PX2A*@@EwCgy-QIn9* z-)+YatP0}+YW~f=`XJkb;o`ps85?gLCwynV#7h8l7ZV_#kB0eyts|5{Hr*E(E7QHc zn7E`{ebbtGss1j#|7IkqDj7aV7uM>twfL~;oQs&?hM#+JE^R5%fOs4owGG;{Hs(GD zhYSJo3kQtV7Z3I^8(FFhy!|MMMo_#k?WfY*ce>AvEDo8h1X+EXugDr%aWUSd+%{r3 zAu_eWf5~>=OE5*d3?TbyOy{WEnX*mhY-L$$Z=g_r!Zo^O`nz%YVNC|b(_@{gGToh5 zGQCFEq%j&74OlTfT&Lr2w#z@M52tKD*tpaz$vDcle@f_T2FYQj+t5sRb9Cwv#}3W2 z*>N=9+>}o-6XYv#`BQjdeI#~>q9fDQK5sF#Pf(&nhsV_)$SX9qFjMNq^{)Bkc*u=9FqHY!8C!`SE$Nfr3r~3ETEhR}XJnK6tRUXae=xmn9 zMY53MA0#uYy=3hL6Y8_NUHvTm`WLkANHJeQnuo@n;Fa1Q23OP)KA{7t+bZij38p|5 zaNRS@dzwxnTM@~#OU1cQtInL9fTPo*&(DvGwRIJCreyU=dlrn=pc(()#5!|`WTT(I z3B|fR30A&{X6c#pE>pQTg~(+1q5=&n)07a z7t9G8VxBr7ok?Z(-AM2!;0(UTX}XjJH^o1NSfckF?q8f7`^JVOyf{}{Ct zve=+-o*i5@$9fiuOo3jB%%bppa@cYt8zpw0$wHV*5jwmvut|lrAc?-UH$=r!l?Bg} z#9fd2l&>j^D6JT80e)Lz_y&@&2?n>knJK|oA5`CsX6s$IR&bOkOjtv1zq~CqWG@F9 znmF%>t@b>b83&oA13Rk4H_*^&my2VVQE+^9szc}WBO@Y1C-H0e!X&r3M|>OtjlS{3 z*RXzLl)@;Yx($-wpukWX>S1O|j12X$1@~s9E^woGJA~-=7iW`s^rUzf3MICcSH7IchQ1K)O zwUg4v+FZR{t8B4(9oD6~Myi4nfEeU(8wG2~DpC&Dm|H~IE4&4g0BvkUf7*ADo-5zX z-U)nbQ?GXyvevHlnNsYriGOcnp^i-uv7Oa4>#dNk87CmL=X^C@myU}$V|?WK9E>@P zF!!9rOM>XR|81#2jO#GiStUnn2hP|w28{%hNWgD1&APrNu`om%itn0k$@D$$c9NMV z1^w!(;)8$fi4ZiPBxmYig~BGlPCJ4|c=gLB`t|FT;{{flmqU1HeB|sCRKpn%XA^H; zp#~;`#VD~LuDlwUk8#>whoqv&{{VtOeZSAPr7XQ>K)^ngSvA5dD3LI%aChZY%1J$o z7E0z}KdZN@suo*bI7w((k%>9|7Z~jhblLhjcOi9Wh(#xC@Tn~m{{V%L=|7|10f%v2`z_CxjYpfK zx2?k5aB;)}#>OB+Ci^(z-1la>-lb+<+_WheML8MUinEUly{;h`0Oa{m)CVdsiP5P* zD3gGwc%go+OT^m~zZT;;*!a_==-WFUvf+BS8I=SI0e$ex+U(Z;ILVx+6d2s`l^CI3 zr%(o3Hsb_#M;~0#(4~IJx=NpGEY@^xLPnxM0l?D-$ru zRL*#I{wA*1X5u4<>QvGCsRt$*`q!E%6*63BzzQ359a$Dl$OXnc zI2-V%p;b}`2=l@GDOqPbqc0Dd(;QqC!0N^-e^OcFCipI&L-<#Ws!kt({?2G*N;$GG zt$Tt{G76F8O&UWX;&mATaq=RN+yXI?zk_0$qF_!=G2N3-ell{MpF(I-2;MlOIc(?5 z(Ib*6HUts=Y8aWrV}l-iR9M@^Rljb7L=a(#13B>zUOXsxT#@@!MB^FZ3J0wR3|}lW z^A!Qik!oOKds+2r3p`w8aRK{O(#JUJPp(CIkukJmC&v{UK|&UYk`FQdDsnn0KM2p5 zrtsrDFsb@eNZ&0G$?^uJA%p%;x$)iCjr-sZ7fXZ#86F|-xd$@if;Z_jeCDeRL zkbBhZMMCP;Hf1O2Rnx}S^NDT29y^NDrDWOjDw;2WC9pfqTxqbD#%hO2ypDDYE+c<4 zv8|q)Z^-lWtXxBI*_5)|PPNEgs`}E`7}}!g>B1KydcL+%fn1EUc2y=m-W&l_qD`qH zK~hmbs!^766$Ke~6w!g+DmCT&7LhcQNUDl5NjL(T6jPI=OL+n=Nvt1CdUF<@9@|eV zE!QI1?5E>dPMh@pTh1#@9m++?r2}^Ku6EMRA;}<<&o$HGxCZ@sKk(m!giF;jW~nvZ z{o`C+Tr{$=+>=6%7yWbdsO6g<3WMWFC43AjpFG!DMb#sssS-`Rh4Qk1JSilGQs10f zi`FoZ4rA7f)@%Zd{OHp}w8r%}0lqPhT5*oxj0aj$#132f(@P$E=8dq@7#8tZl2DHd zBQ4on#~PA5vrRIbV+NchU^_f{skp2M9r6>Hm*mt~uI_=!fYQ8-M>4e4l1$-Ri`{OJ z7xN^g-N`2~ntNT&23i;TP||0|XznTE>6ms%+n#Esy@vjy4xqq*(a1hVpYO!{D<`HY z{_+Uq3G$+Kz^K3(pzEHhlxR=e&rJ zGfVFgkTAm(He@-(W9dTSOk^cZD4dA~<}71~ADw%xiIniR{&f(;3CZBWru8uqfJijT z5d*eNC3CY3(u22kLlB`kS2*>h>IpxbB8HXR4YRWa0FD!oDB!L$!@r$JR^b2xP7*6% zch)nW$`i?viMnT> zja}%|aa!9bX5lJZ0OP*1&8scbsTlZdH5G8pr_93uaFrsg%r}RFIy|6{)!Mb}LGFL` znq-7^X92U1*FTL`+6-dRkiL>jU>@!%729Ntt_Ev8cI?t+(5Y_>3YF4Jsjjs9Q7p`d z-X9E4AS*Mf$V}t5*$OaxcA%MS$8x4y##LMl@9Rr{C7a4)wpojh(sD3;D;jxj3?`fNVI`edA zM3Izzo`XAN%J}{?ZynKps*H5r&@cFmaine!GsBA5bYEP&7Vym&Mqo)`yW@y&K-79S zqG{}>?4+15CyF^3#M>f5D{9FtizZdtmH)&UqfJ5@3PkJ8VrXP3F%!tMy4YjRQ4=N~%J z+RxUuGpso{1L;+*DGmAMU)iE9z$y8~C&VxPYItO_S&^5X z2g;GB$1uN2iN-V9kYm&Sw2dN;PNY%LO+=w{{!#L#_3NF=R3k3f4x{#S{OiHkjha0F z0G6kQ9Yo%}Nc|dNn16uOF0sbNqW=I*G|J#M3}TALOD4R-8!Avty|0C8A6UR(tS8Sn z{#3~%Livum?)=EQ6o3*h+NuNxwNVISP z`%c&Qf`N0>T@KhB>Imn;Fj~HGHxhFtepKNrFv)BhrF|b7=Gk9^7Itl8+H4_NG`n)| z%Z_7!K0>g1$4IpeRf)U1;$Qb`vX7NzRzkd)Ppx=N!;>KO6{{Zuj~CrV_|##^76x)N zi3TaFIbpP!9%7)0&oasMr4j?lm*gu)hFz?m#K&;U^sfhTjF5g+U&q=%lpdI`G?~~q zA1a<1HIw?%80@FzUNW&6RUb;OR#iQz0ne2XI17-&hL46#Wb|euCx_`z1-ao!^A%o_ z#z+E9>RK4c8FTWg?_R>&%|gZ3M0I2 zk;5S$DsWEDL*|~*G~nn)_{s6A*luCuOXPR( zkwlJo%k~R=#bK??EU-qvIUsM{M~Y?rCmvhXcV3{CCmG(JvcNzbM0jF~UBr=WlPTD` zyTG z?#%pPeXR&xvoQWNEmA_dlQG}F2iBitc=elA9rEYyr|S@}+KL;I;m_8z`xqZ4$@Y4q z_0e^Kcs3llRsFP#Rhn@MKj{^Y-~c~BmV$g)~icn?$+-Z z1$vM(npq&FZI;c76~V$V9Pyk}RhR}%H zHl|CsX8k1V*kg|BNS09|s}(F1kGR*m=%ZV7F)0X1Cje)0kKk$2D=ISqf^u@*^;Ft} zHs;0)K1LMgKp7paeUVnscRb)24<53Wyf&ER9eX*>yWPj7@0>KDd8LQK2*pr z46}vmQBOUySDIjExQJxAX&10q@ROeUJw|hQ-ANmZ)-NLhcFEjRM6iPbq-z;d+J1an z^E9`SyH4xEej+yYr^^J76l$<6eP4Qv6YEu8?#+o>MQ2N6x_i55t;=;~31>_Z&mIPi z(ftzEZjS10IG2tv#ZFm%d-&p@bc$g=Qj%GTT}BDOKQc+E`X-rtbj$N&F98b0m#!m- z9_$Ua!K9u_GIvV*xi)rhvyaMevCp5*$ z1GM6uBwTB|x6c&O6An@m2aYQ#VnV2MfFxr?!-3f+=|WiePI5E;L5e6+6z&P~6dNKL znH90deKAdwtQq2SgXK=k;|GTxINq8Bq@G25`Oyx*`$S=mameDFOOf#rNy8$Xq2Ivo zUh5o=-ZMpz4+9VTLP_zb7L|Dw+np1v*aPcAd* z(+r>wgtwLjD#;lc3aa1b6l>T6gE8+~MwPx2sfuWr4&|h2m%TyxRHxXMA#?huK6KTU zxUf}m>rW3Gjra$srDctm9h}krXowkovY~TAa7oV!@8?8iMdl;=Q##e*;p0J{4AHK^ zup|@kpr-I~eu9cGSi50{J!!cEC2{qp+#3RQA%NF_xmI9V0lHWblAIb4@Zfa543#^BW2q z9ubhBpIUS+o)R`ParLJMe(ZeBFgFk!NHIsHt6oeyk0+6JB zpE{co#WHQ0_gvV(J09vlBhEjaDr-M~h$T750MwW+NZ61*bqvOv9Jkhn$$~go ziY_UWQ$~*7;1wJ1>qj|!5I_~0f!Pku+tt;i#nnd`HJ2tGJEKNCy0#^jVfteg=4T^3 zKnh+DpQRyIQ2GjbMUZmDQo0I5)>$}++XIz2JcRB( z`truRfXCL1sJO;y8$sjeD#zOGpo@qwd z!icFFWkK~cWgUQDhrkMlkU>3Q@~1QKs4RB!sbFZFq>gC2 za>YGabB+;{P?li85X9}_y%H%x<0RnuQFbj8E#m&)8+QSk(OI4qnD|8B!n5`=E8HAz z0Idu!8rjZxMtCut`0ZOUy^>}e=_@n3N(bo$mggbP-y>7?^ed{b0)}NPu@y+uwXUli z@sgr9-N$g`YDT@Ppw!;ytVWB71!UhN6{RjmK3{f`X>}B&p#mgkIR!DbP8WAkTf{h` zBn}WqA)gV-py~4a_MUE5?4kw8GB5|8Fe$S?3?+>GY6jrA;S|=t=Vb0ddf zagodAQuIT6d3hbYQ_7JI*oHV&p+RMFEWyRBg--b3AYk&Xu8pU|1)*5fE4Ri+jTi0= zYE9W<71M!Z-2letdM^@_fI%XJWLS7rvV7^w0-4fBZmoTGH4?Js5CX?xlU~$x+e_^| z?e$oaXjp8nGlSwN(p}`$JCm8&OAUrkDuA9OLnnD@wCiv0`5&IYjJDf?bBgyw^t+8GUKg;=(@MGF99hL* zR;{xW%-pL_Q?1Q-sXtd3X(mo<%BIF{<(Xah5lGk*n#c4~>I=O}`dv==LvhIzpNRL0 zxYTBqo+OS!7aYYaO)E7;^eTO)w6^+sO$#bakHW<{5mbE~3~U~9*9J)j7#R)#?&L*l zFXDo02}Rs;OaS64yv=1gJ*?;{dvOiV+BRxNIPk+5<@!9T$Zo=&F6S=kt(R4*qA4x; zJdy|anyFGW#uzq7ooPB}aI#-OVh!*%ayR&o{{WvlqRA`?U@6p{9c)QyOlXZs7zBA{ zuWTY6P#v$4s(r(DNHwC<8H_8EJu_5hlS^XwrDC~d5;!O4xgLvfrHD=7p zJ|Mq38xxFz7*RV;muh}rBA{R)Fx6# z!ZA*!4G4hiI2&9O`y!*}=aSrK)oR6&Ny*#~8m7I!R%Z!?jd_vZSK?12q*0$FaYs`n zwZ+7HywPJHt4#OD&U)Csl|s@NQzVkCNOQn2S)0*DO+;I}g5Q&~ypVW^O>U0`eNJS) zrR-}O>j&b5pBigjzBXux9oek8xw-GLy$7G>O(R`SqqS#vJz+F_h(6POjX%CVeh9v8 zMEBW2&lEWD$*hsT#zRAJ51eL(+JX*iH~I}vBV_whx*EwZ8INfqK6$1KtmlbfK3S}x z)FIo5$iAp)hW6b50NRo2rjL;V`l5XeSh-y99ANig)0XN%zXIddvb}Ok14y!#jywX` zI2q;q=sj(@KkY*vrjL>v?Mmoumi3$TS3b0jcz8}!eDPTXNJz@wsQscT2t_1|16(B%13*6b?aMBggMy})8Ww~tObQ9k1rtNY3ifni@&k3?&l>;w6? z6eDm8<(0>tYcwVq8M}=7$S8|&M&jlp{{S#h@@)t0IQ2#Jj~g8Ck6MRu8fS=c4?|V{ z@t^xxzj!O%acuVE{otmL4J1eP9CGG@%aC%dCMXX$QNPNUv_{+q{$QcB4E)d${$Wb!ubHP+q2qMKWSe=|7!gG_5_xfrJZ07;?Y zAbHeGH+kbxb}H)O^Ke)Lln#s}u|JnJ)p?rFOwU=73VOO*%XIj9Pkj-(!_ zeCaxi#c*>DJ!p7-;ne#R-zQ{opD|t;D~2HYRB;`_9koJynv@Cm{F;y2rPJ<94r4gT zZK-z&jwSUq9lhi(LMi>KVQY>9`7xg=I$v^FY)PHU4+`<)KdDhsrvULGq!P+Uz-hFB zzUM?qFgTYOJ=voI8{*+VI)WvP4idq>MvEMXxyK5FzWJ(@m??B7EMyGhe=}ZeDFMa@j%p)JK?8|%=4h(<8CDP8);xj(Ib?Mq6`6p-BuTnPL}*51}VTL!N_0w)<23yl@$?~@eGhT zR<7b_YiANNgn~39vyw?9bI#XS%yX;zJIJnW1eUxj zD=218@m!|Yq%y&2ExK4+TrnhvbS(b>E$UT{qj4FI?%RnEFbCc$H+z()IP*HfJVq61 z$PfCI2aWEe;}3|&z-Fl6)cx)V+D;hmU2;#{4poaR za!J}ch2d_u2Q>ANBx=e#N@|whS^G>0ZPY3e%+$&5Vm2}soUFil3gP)omAUI55e|Va zw4b%C=SRF2?2X06o>ZDHqos6y$lKiCG{h6y117S%EVomQNKYY=8wE~kzGxLmSq438 zy@LX9QE!pqINm=d4DwNrGE|zE9=RRVF2w}FvQKtvw5-BgYk5Zex38bjEOIiZE_K?v zFL&=f8->Z-Ao_}KCJHH0Z_%?kxkdi~GeIb3jHvx3JnI#wbZ+NbySlcUQtFY12Vw!R z3{Q`lt%#6G5-~W(g>#)^8SJ&2#?nr#*JN?3!NyRwPTx#cd}+6_-FqV)uBaNEsKlNE zQ|L&l*N!vHpGvaUn}&34!#E|lj``v>Q`VM~8Ry?pot>ODp#~8~Saw(r?W*>|6zYag zFAzM~2K=3tlr(BPB8OBF;e;T7Im26!aCWxaP`(Ahgk>Za$$?_ta_aN+7BgcqP z%&n3~A-Nn?pG<>jdt0d7aF0AwI-oW(E`2M_a>Na`@ucej0f|yPc~qy=DWS3hp2Glp zjwwmc#N_9lA(k_aWA7B;cFy?o6lstVP-GvJ!v6r4hbA&eU>Cb>>GC>`dE3r{@(yE% z(3*6Zq-|18r%#?*It|)khL}9aW!R=_$~u^zZG`+ojNqf>p`OacoC-DlWHU(35Lz_B_x$#!N^hCjoeS z{(cq8IuGnP^ruAAZr7yN*0-1T=H@#_wq{^~isw8)a}}W<(UVc(4gF()1IYWEfBWk9 zU5sxkT-!Ch9@6?NE6g>2bOWnWm}89omVEhnQDxCO9{m)WNWIwVqEo;L?G@wOZeI;# zKlfqPGl9}8ZT|rNmB0Pe@BP?yeyo-06{&SRz1@fZ0IG)FiQ*^JB$^(bAi=kQk3mr7 z=$4Tn{{Ur(XTVd3^k?Y`&ylNG#9JK~HP&i{hu$hTRF$2spKi z?%b{{VF;{#12)1!PaDSN%@2 zjd2(#JOMNY=yj3(9G_aaKES=8rx5#Y&B@y)_HDlE5cUV{8@pJxKl$lD3RkD_jp8nh ztWJp7rUzEI2RJGX6Z)m6zc^#T=h+o8y@h*BLUF2FoO1r(C*ear#J#Ad>wgLKzi+~o z!Y%#Lmk`(eh=0_5D4pZZ)$i&)kCDX}*R}=aZs-1FCWLwg?SVG; zDVz48G*&ov1LB+NSGPfIbFg9arZ+(Bn~{)w>UrpAwgkvJWx@GEX+NsI*OQ))a&i9v zcNgPLq8)_s{{S&udIf9T@{igy*61WX(@Z@W)sg7$wZ;Dc`5n>!0F@u(OgbmElpU=C z>5u*b{xvj1u{?jwR{sD|)lSzF{{X1c9)>vhZte%|pT?{Xo9$6f{TsSJ`G5M;8sFM_ zd|ep2KlxMm(9sUW^AGVNy!1xpF~O)@kJ>diN$4i8soXp^T8+y}6tG@1k}0k|q_4%% zd!zpVlz+yX1^2XzNtRf8H+vMRxMj4E5mUo~9}xcl5h~Z&-$^H&K^4u~$;Z|9$pa_5 zdbFF_7fvA{d&JL^!+_zjRi~xC)DWvlqUr>z^?;jMPiw}df9*Hgq*E-9rQdO=*!!FQ z6+Ac!_=$9pp6N$NIz!Q~dR;!i=DZ)voTdf&BSgRd6`+=5diCH5%fO(3| zl5{gc%TtOVmj5>oy{F?wU4N&w_UOgQ_=7fdbu8=c+ zsQK5E&5uOfdmirwUlSUW>J%!2%x0b$2*Jg8BN4tSPI39LO;OCc#_=fUkCCPaMq|Rj zk6I{?h-H)mUU&pwtMsX8mJF2SSbb@{QJs?+^`|T`xa7I?uR5xHDU(gGEb`!toPB8u zpggHK7lW4x?-ZdIAN8mcR?zqGu=JtIqOq-dpxQJ+eDaf9%xu&C>G0Ydd+MTAn&q=Bj>Pzy>fGYgwOcSwIOiQIJ6YAW9+hd+iKMxB)g&a8 zINbVG6ul(q?5f>uypl6^e>PPxm%F`|3;06mSvH6$Tm9VMOi;DvuM?;xaf}1o`h*y)Jo{ zSmjbe$e`9&LbjC1vW3hlz!Tw`=vu9xzG&96xyV)FHB|J%dmP`WMYN{ME{53M>od+F zPB9YkJ7)k_WA<-k(Z}xBhw?mScCLNUur!!&5e^K%VDiQ*sPt!4(wC!BMUr(e`BJ_g z{${b~o1Ckmr|I}{MJ%y?r?IrXv#_?)r4axbS0IyE)dow^b#HWGkjIhP*q>T$-OQ4b z9oXb@%}0!{x^NZp@K~JHM0QAsc+oTD zYgy9WQaxVrO}-K+SA}zq*8I&-WMgymrFkDDb}+#xDeKD89sX%LN^J8;O` z_jQd<_axy9#W(uR5Gg~Kz!)ymvGSv=D{oPf>BUUoF#^*bD z(8CSFuo?5KBRL4-jMqr*!q_vZaskfmwP!3cT}OWqt!GIP4LV*&ddXOReKGpNyF3%T zY~X!KX~?Lgzf#vSfy_H?%f6$iBOvWkH7&2FALBp9g)uC^;10+eS6V!g!;-dr6YQhf zy|$evL^K|&`!ZTRoy>+M0%u*c)ke6D0H<0sj%^DEdc6aGAbp`t6^&|S95u96XQHDAO^Ai);dFV(ftAj)0i#g)xyCZd`@eeA7{NO z*L4{Np{rZQKn*Eb2`W!<^TkGI%f#f1(~dUIsddx69vxBa*7DdkJ2FWstZZ@1imhyV zN2gsf#xCtlrFfVm%D^8CgM(aF^PxQj=(`y@RnkduVz^soLo` z4nB9{ZeS2yTKO)S$zjdi>Gcv%-KERqEd zKN|L{?T?|FaVm9HxN+SAm;3otwcObrCK8UObbY+23^%TGW$kl8zJ$wamo7XwMo-H% ze{0iCG3T|0^_s?OrQ(HWAaVK-dDEtf-gr-urlHQoBP4U8D+U0m1Rg|C?hJid>m5{h zlZ;bXA0iVM;SI!aeCc|*Oh#TV$n)n}ZjkirqnZ|1QPyo0m-H4u&GZ}BJ=edaCWUN< zJvP?r^sghdYJR)Yxg=**)a?=Vk~mdz3Gp-{&Lk?*5C(I-e7UNBNN$q6+0txmtp|4= zWIxKVn!mLEm+IH%;{O0rl%pQhF&?c5?-&%XEKqzl*SYqNrL5U$)-QQ^cMMkPyF1N{ zZ;$6vZDecPA$4u}NEmSkSvijpUk?p_ON}Y?_SCP^&P?VOiDbq|Byndvz^|-*jbF9z zv%NH1%`?W4^+d8@oNePlPg5q8pQz#A()t!Ur$??12zX^sag5=IKdpT3b6->c089-% zzpMHM=MEM-i6Y;hX+i%0^w-Y)4CvL*O7+O}+essdiZqWSot0E%oOjUbbU0W1GK0FM z>8JZr4;+dO+(HYPqDSLYa-s2#AP+oKtPc&;XZ%zp$khkBH~klBjl7EkAPU=ttvo{U zMn5D^m1FuU$L%tJkgeP+eGGX3vHI7Sh-I8(tBo<lnigR6=#HyJ0y8kbHt3<5kyaZMIylzcs~g685K093w+CVo-lj| zA>l%v_SzwlyLbbdq`A6W@Intg&k_7-uv;{(#KeGY&x2R^*8G7Ty&D28TMJARJO%TnL6TGgOzlny!0UG`by( zmF`*0>z^u(9mfot)g$VKhdru0Up8_L9SpKD?rA2SLFY|L72;f;O^>Zmd($%KJgC<9 zM}dJmk(vq=#K|3wiKX;gO|`g&;_CB=NV(x&;%f)eOG_r{Uud|tw?nV3Urb7w zNZ>fwRc^H;rf+!8SdIMaTwOXxHh5c2&DhrHh385|{Q5n=JN{ zDmt4*2A!@&W1vfBkcN^&o-A)$9*(o>9UGnHR$i`7{{S(XjRR=5O`Cfl@l+g_FI z-r6W)jwj|6RTFx-BR>(v;>jI0L*py(oK>er?hIOnSdbY=s(=X|CZ=iX>2n*XCvnJC za!JLU-WpPlSjl%c3wH8Cj0q&{O;+j;EykOF3o{-O#4A~#Xisrxnb(99mBH?!>KZMb zn7QLDWO&X8a23tokADo2I75uFz!VnTU@m;>-dNCF%As5+WBN56;obw|i_|%k>TZ_1Fcn1RpmEA`*C%=}| zX8=EKa>u+4siSd_zsjhzJpt=@n>k;Q0+}R;TeJ}Rfkrl{Nh$$vGfftefJupS{%U06 z3TPOYgzQ%|)^JedDfv^{-VXS{Z(PzW5w`psyhs#P6LK`|9snq~@)QF3+Z$2mf;DW8 zEO})A06H5Yjr&8^tW<#Prs)A5;`%mt~lNmeKb51|n6a2!u{2%;m z^Zx)-{{WR0cd(f?3xGSE{{R{U+b~=Lct-SF_v-H^E6lrR>rqP@j5E9PxO+kU%qbn6UpS;QM)7l`B3)nvQ|x*@tm-%xmf~HuRmN(!H!aMWy=}KD zG&+w*bla$n%-Tidw&!-ZvAh!F%z_P6MbNK$j!F6*sjc*=GS*X$s^LeF}JmY4eWeQUi|y4#ZZX_g%H=KAtWhw~tNf6}ROCmi>;iAEdbZ#T!I}lovZjLgP}t zlS!7!{bWm@SzKGgM`ii@9{OtHME7J>V`HGhrdnM?8pJRrF@}>Krz7sHzPHnklIw(> zPg=g5H#9Pkzv&nsb!3!~F`6Q|UBSgOvHTdWNHLj-%N(CNPCTA<9KKI|G_cMyLrF9e z44Zj)((w{G)P60+6v>pqME!~HnA1l_Tu6-1x#lfIb1_K^{{a4A ze>(VMzOH=DJS(`cx0f>BT}yFt{Bum@-LZ_ZIVPKKaVqcML&Z8BoOot~H7;h$Lzk-6 zBOv1@w=v3DM(5>R?#@oG{vxA1jc%=Rz;802lcBYN}BpaRLu!nvAV@;cYpFI;(XfDfg4ddy{9W1l*VZWjXx0HsO5IpGIA z!j6U;CUx(&T#u!BrCNXq&6z#PyhwM#M8?NpCeZjT8_&XE^1!q8=3)GL`QJg!~7zlCHy;YK3=jv8QFp zbKuoXV&v%+&Pp4ybj2|m%;F>i&(o|p;hIYTNY!-)O09LF;;famfIBjOF+q<`nR*P#t5u) znW`xbw6Gb;tD9S3F|~R)2m=*1B`Ue98?rY@WRa?`Az7VoQjW;C5ymS)s9Y>ilE%3A zPj!B=iXq=MvxbJJMN-{aH&W>;NW>#^s#&!sk+NE`>vF-tEwQO_-Di=mi{a8585J54 zs4&|*QI_~98`fd&z~z%n7jFA+icbd1RIJyoqA`GKWwp>}LQd6?v}bZRB-Y15(x$mU z#2j~4Y_X0q*A2HPTPOB|ld}qweF%GF!?^;c+h`L_Dw4%iRpc5(5s-uyZv56+W$KJg z#ca+ebn^?AM~sjTHWgu}G|;zM0V>$W;=4HL{g4?p>679pXF${6BdJh)g=&9MbyRum z-$TcePEnOJkjO4K8Gg~<9rWv6A5gwzowzh@R@T z%2MXd82An!7fb$TCePXak!=eOt)+Y%7CrUNHA{;fGWtj-mH4A_3Pzl(=v9RG>?@P> z!${L1=>*ctY9)C)Tk@(i#-nWNa8bvuk}7&L((7_=BCv|%h%XT{0s+T`SM)w-zn;$c|7L#ZDPOW)kXE};?J zlq3AYmP?pja3W7ybe6niBki{koV2`CRq(F8gb^WS}V2qLRg&eqYDXj{r2dsUl zD5ca5zQn$zSx*$DvrJf{jCLO#*(RVlLULWxxE<-Gm9PcJ@IT6*!*8f977cE$K{K+S z@R3L$0H4a1^{8zN{*0N&ijUbfB;$~&rS~P*LQK}^ADJV{qspvuqko-8l4*L* z5Xv_16vJ~e96wj{+MPmO#k5y+fU@bbDc^D5%Cgo+hUPCf6{6SYk?hYAr^PoS5x*MtwW-8=GEs_5!~k8oc@m&BlX2{s}>>{zspxPQ#?~EqhXYW z1a}&y+LfG~iQ7K-P3WLjTiLF>y(H*`h5kXCfJZR!aj~sf6|yeXkq8AiQsR^fY7HI~ zw188p42DYLIGxylstF|bSI_-5x@~essj3%j+D zNeuF-^Dv?zq+Wbze#D5I>Q2t#Ca&Wrm{_q{Oa9XWt%T5N-YJEk9& zfcG5tfmv-{+D#W*XrP;lH9T<2IWnF{=~=tg99h86IaHY0GN7Ha zM1b*H$r<&lpL2VADG>qB%AQoZz=Aro zB-MAhn^(a0i~S<~dVibKM# zNFzQ62V>-FfleEhLv5N(IaXWSKu$P-A3ErER%jIG1bWvu(w`F9w}T4lmdhg?3}E@! z2kLg3Jy+4G!a>r`Jmj2j+)XxHD{%Zkl7Gx`v7PIFENdFr;pNFJuGrw@vEO>Iv4x!EV;SEy4&DwaJgZ5kT6RW7 z47n)>7B<;B!XOk5b#rZQ%ti$Y%GV4IcC8hRNB{>F&B-&OmXMZK{ef2Y@bHc5J^}%X zkdusHn$J!06|z#0C|5UY411b`ai}an<$$b)y{~M_jaI`Gku=y|m1}`fksEVdpI(^A zS(xPWt36Knrjd&_YJ%}zbaqfmF6?}(tHa_^+>?zeMNEa{1Ar2I1xbe9;kZ>%zLn5A zC#C8B=&mDIEsXJ2kKApP_98*ywKiTkMd?UfTs?C+eWsIhApoNc_|^5FM^s?XBB1j% zxc4a8MgXXi>FRbOvCoQ>y^V0jqC(T`w2Mw2DSF2p$}?M?A!9J9jW{F6eP;As7BN3t zAjk)5(cWC8yf{(^b!5o(y^8bCq9)wlEPa^Bqv@~2#zx+=b_CsAw)tM_)G95#rU%7} zD;}Mhk7O2m)dv(cnOx)@>W*nikkRd2@ec}FK+>?rwlx+qe|i zjJGjew{@||Sgr2MT~ArJw6!zL{4i%6Sk7ym^siU6)hCKe6>O-(GY)jRuSweLqn~A% zQDa#$A3dyZx8GTdd~lJ)Sh$R~st(Sd3&ZI3NmDH>E*=}GWF!t22O_!#ul=t^xI#${ z8O3u*SP2w2B77^Ps6nHNGm*iAn$3+jXtO<9XB2hdXH$`bxWz;)+(dvt&Nmf5R1X#X z!m2sL5(1`bIB6Yl%2(A$s<|CixXu#dui_K|S5t!wG^4QQ`GsVoX&n$sO0A$KDkbAk}qR5~MpDU-cH0WiSPmhuyZl0N#ZY=>ZZ=BDb7W4^cmZ`L>Qs3UxnT}Y=^aVN8*Lt)v1 zBg?Z^F-hOunya)tP(`2B0;gN4E>r{QRK1zb$s26?1Nt=djN5A0dL_i4lDZviAf8S+ zkC^@y^pF+thqB!}RFkDTeEMy?(#Z_U#Kt)e{GSY0+9)!rNWsS9v|*K@V6`DJNs2Bh zIBL?(BP+t4iuNiIMD=lRY#kU|-DXSdl_nv}zZ+L;0nr%cI|@ zk{MT$p7cHh9jhLb76~^LbNkpD-sO?Ixq4B3`P$MLI=GZZNe&mZbK+|CW3;=q5#F&` zbA@m@3a`4*W`cV0zVr2zrR4$Hd%6%Aaedh@Xn# zhDUHUEO5yv;Q$H0gk!yjEvr!$ zi)+#w?GK}RVsTE+4aDP?<0t9-s>9lMNHkp!rEOuSD3%=})7`C=MpVs=aUVi+@}QHd zGpS1?G_L0nzFb~PrdHiihCoL=ozDLNby=&Sz2v2#qnS#a60q*gG7iyyJ~Qod!ddfn1V;rrF2(Cv(zk%@?5|tM#ohnVB^M_&rEHWc&S5Cn298l3lg&v z+@o_^E{*gXqtR zQs+>f1%d7^Sn#O8*kd%X$*s|u@e*#5I8KB89Qspw6zVeCSjKtrKN}B_{A;4k@ znR#%|ec!FKEl4#ojoK*h+4E6%rlOM7=$V{^EGHA8jrkkeCokfQj@~|(OK5WLi?Q{- zAq3=50eC$n=+YhJE*=Bad{--Va1&52Om-3K;n|T*VBV0EMd}!g>x-||2F6}_ycge( z+X#1Ttya{t5DDw`jmjh%(oedg67(Y6FjJK5GH&X#ETe=tcf5Fn5Q!00eXfTNyH0oJ z+lfMZX-RIWISwrlny+#Z>h=?`nNB6=Ss+;LPa2Wf{9yOvB~2s`lM+_q=2B3$RGPue z7xPmMxOI@t!)i2gAcA;R1UohbQmKniYJ%4wAoTr!myvy2%X_)d|)5$X61PvE^c)+FewaYvp)(4&_nQc`WFBO?Lg+~^cT5E+T8S0m{Mnd8)20E zV=K!*Hi`%@?QXT3Q;|?>BhVb4&RZ!g$4r4}9=H=0q7?_`^jRxvoikq~+kP5atYGGo zATX_482)xbasF!~oGg|TI?ZKBsIg>(=axQHS{kfaN#f0h8B5Ra?s0=AhgZ!lpgmFn zj6H7FU05B0OoN# zh^mb!qG0W~2@>BOcgVVZ!tA?`H&Tma^4>2a_Q*U-*9>VH!OEj-m^Nd+VrtVqy$&8a zC+SK{smitpUCGa05%vQPq(E}Chb5r~p3ow$83$omD!m_SJb88K!VKzTGUyePBAD>D z@w3fHW_g>klnuQ!SDg!Dl?LocadhbdC1IZ~Y^sl;MWOEtFwi{4aV>o#{0J5j;eN;j z=~i^g($2$X5j<%zwCx6_>e?4qaWL`d&EqXF@GTT@P%F6>BG#+FnvDTIo8KvT;K~j; zuLyB=&Df{<<9-QMLe)8lD3M%9r%;;P-ubGne)MZF1XNqY1@%c+v)LL%AnxqCnJ8PB zEPtDr)QXjgLaedK4{+9KX5*+_F_EegmoPIa;f3yWGKc*R>Q1p8qgCYpWBHRD#(E{@ zgeZ;Oh9UJTRcqZ?b;Zs9@+X`+xY7vI(DvoNI^sfY)2x<%P*`s0d%w*Ff9l7nm_@d{ zr2y#~7_FFBRAONh7A2TiXuC60nd@%5($lk#Wc^(jGi7z1Y*#$y3PPZ%8q;|eVMPXQ z3ipm@z}hdzZE#84XJMXVR4&vIJt;vB(*P5shPf#zb+SWiuwR6)%7GL6Ea%*Cd>P*hq z-UA)W4iuvk*IGQr(l&oy)DV@(YVo|I0yy0+~~=Y%M$sY z{&{duNdlqsOJUJpD0vBnW#jb$PJaP|zbH(BJA0jMb_U@tl0ChZxj>&Hj{f%nsXz0r zC|{xNs|F{;k8756LBHQBg z6aaT8Y0cx2=UA0xsG5I7_P5p}M|q5Hpo`Dl$w@TLF_JY$_#`;z=+@O}mCp`fv=Y^r zbQ+eTvKkiEsDFl2ZVdnaE~GKIZRT6n#*f)}Xcy z&g*7cxfrUTJC)w@td=Iuk!Sv3LQB@ET52F9yL#OczlRX4fb?569G?mJ84E6?($Qh0 ziim7u+XK>rUMU~Ms*O%SHa83`l)W&`9`OWam%ppC{{lcosZ{o+njxWvG;O6 zGgnaim}+E~pXn4oDYLllDnQR}SFT7b+b3xmu-0|VFl{i~o#zXhl3fks#-a#7HJTN* zdE+Fl+%2m_<2nc^%DEbpxK$g*4mrJ;qBKy65$o~}q6iS<84r+JbsIhXswux6JZLj)G;`r7wpPI z@W>E_MoDr1h_rrqNL9I4&Lx$6+B(zUT8*hJn^o0VL32mS;Tyk^RjeE#Vsl*;2WFhy z-2HN&{Y|VAe{g6mGE!||F?YgOFX9x)*8M4RvysWHYtA8MJkibtpBg&X*0pi4gtD(m z=W69yWBHqG^&I!kmf1Ob(SS`18cU3qHY76r@ul(OjNA-Wy{2K^rdZ02K*gaSzRKP# ziN(}!HU)>yaJRIwhcH`9d|>%0cT8GThXcxn&XvB4gQX9j)ckXeMW#%~83yPsG&4ig zDss8-(kKVGR2h=i!03kzg@2;RK8y}D;(L9|c#?Y&(er6;oQ!9JMWSnY&d<=nY! zU7`~^Fy!3Z`+9<OHv=aV}MdnKG*|KVhnfatUp!S zEwb@K_d)7Ul9kICV&}M;i$krdWXO8Bz=qsX{JnJEyP5B%kN=uAl$inVcC`#x7)_cX z(K}xF7)u8+dtiw~@tgSvsH}&AU@vNa{-P#4OEPSs^eM*0*jXu^kfWugPG`)^8IO7e zl?~`UBrsDDF7~FErRQGGnnMgmu5b&OwmtB~XJyObrAUT3Bvai#Y+INoIs|ahr#mc-M^On$6xSsCMDSqAs?2z<_)ZigkU_U%}-dVkhyd zYj%w0Jv9#?qkh)ymZ9fBU$R7~vGZFW7zv`1lY}yGK4)D@Po@o`DA?bp%o3%7E63xx0 z5mEi4GE$^ErxO324$wrUNWxWcA2ca>&ov=-u2eQ)$M?gSEN0J~2CiyJ^t%XWawu*~ zBydmTyI)4@I{d6PA6;XwFl^;BTlqT3L`IEU(}iJMwj+E(B1tt7VbF>-o=4G|lmE;f zTiW}=OuIk@oH4C5Bcz_AGTD8AN_yF?1;U$wEY-L2&6eZdpXE}#xRq|&KKe;RWHA4rDowg> z`HNl&LLE*2oz~q032{4C$fa~EJ`Ka!;XE{!gMN1w?+R9tAo{yjOIyCvCp=SdQ%R~H)2heOw8)M4+t z5MXI-9s#yJAq1r=koA|*#Qne^XE5gKK6f;#m;30@#+inV=Vs$5G=G?JlCmuSMm05p&4#Qj(X;5l)g|M-12hmX+lY37-6 zZ|@h8ct}{0M(aUPF;MHFyA!iVFjZU5XGVdF!Rbnm8dY#%I!ww0uAye&MATQ3$DT?9 z5!bAWF=lJEE#Ps@aTES=HI;Y^Tv+Z!pJu2dW6k_2hkQ?Dr(#c4Gx|0w_in_&J)n_6 zxJ&QjN~>$W_T$z5wMYLK7EodX;_wV+>m7Z4DfapQwFT_ZIIRp*bFUl|@&?58Iq z38^(A4N#D_P`1;&3R~eUN8aqWVlrJgD*2L^jK( zSBv|Y@KuY)&eeP9*&}8$d8e>!Ql4Bvt05Z-#nCi&UT$=CqIE|u^l~#k6}CQw)|N4n z0n)p5db4G`tEt-ebkGij=CP?$MGX##R@ZAJeyS6Sytv5$e1#_q4>19Zg(GD;t(rYM zDN481qy!12&@wo{D;ljNieIRZ7+wqXVaLV+icza8?Teg(bS&5R*YYKIYK__zsm&SI zL{z;HwGQr3y`5cL6?qX-2{kAP1p1jA^yNQi&`?Rv06T-86~q><1wLP=fpQBCA}&S6 zrh)B`Ic=b<)5km~$|31Lvqr&D)I!N_G;0i3CP_jc4hhEz^UnW6r+-3Hz-=B(sb#-Qz=@ zCwv0A;OHlGeG79H_L?uhDWJyH*cF7_kTb+L=x_Upu59z&3=mVrnVl~=C+_y5g7hXM z+p%e?R=#CdWZ%QCzS1uK5-KLZC+VoXeY?Hzqwd~2F(0z8xa;? zTrR&>&jb@xl87De*EB)+8h;h@%NYF;gv&>@{`kt&uU` z4wC2LlX{C1N|i`MtCW5yhKwaV1ZL5%?JD$rXhTZT%j+y!#$wWN;W@%5lR9WYE26?;MN1hYl+mwS<{ z@rw6F4{^mxC05f>w1ni*CK77V3k2e+G7MVd?#H@Oi~%JNsRYU^ABNwW)})n* z@p&8b^MBWvXv*$crDNfrP)myRO(^Ff$1pRUNr5&q2*DB0`ix=htx?_SQh^(b+D&E? ziXW;8F^H0l!>gdja;;|MK_*SvV3$2N7)*J*Jt?7(;cnh%99iD-1M3r$giY{;i$%^? z!@D}*VLvFI%C>Nr=ei0x!)r9Y7G=@B7#Zs`I@UFHDLp;o^{Ds>ND} zOtp|!Cw^8nHQU2XS>{ocOwcRBYCP0rtE@GI$8E(4v!2RA^@W99{jl_uQ$dF@GJ}>F z1`y|1vQm2iGgX%@q2F0ca}fcHhU>;DM;4@mmEj_o z{#o1jTwRKxCPBQYB)$J2LjwxUDMN%|pJ24WVMnb^qF~ItZ2c=!AmBj6P^_&SYtY>H zbuV~7Q?up7<`35vg*3YU4+NQh0oVZ^eI5cy37B?F+}spzLt=p;LzgOr08#@vWkL|Hu{u132tfpSA4*zCqe6iqvYelx1pS?3POj)1ABtugh1}mjH2Va zUkkZormk^C?oYZ`8$H&gJ?A9!lE%mWu@; zbjv+3lWlaRdku4zYyLwRGSh@~VCnP_nV}+g5e%XuAjTPwuWg(UWjmK2?DR5Xfo=)f zlE|y!a`jh#W<(9NKAMq6e0fJ!xB;q@d}`^L?=4{EOirmDwVDgO3kR;>Dz%uzKfM;a zi1CL$V;S$(RVKA0tkBq{umt)HASHY5RKpFgj^$gNv zvuC(6DMai!30rDCco6(iSN`7jM3q81E*=~JyqLpIZ6C~JNKD=g!Lw@ddF&}`v)%S? zR%*Yg^JH-$3^b9Ck6E22n!jE*ac@Pfln1*ia3L7@;@ptZY!fL1N8s}H+b9<NSYvnXuVbt)G^6I44PEU_Yqu27d2=#X@8c+wVP?%PjvY%0&(`iNA_j=!Mlr-T4 zObd#=7=6NDW}2oe`gRYiO=(V2TFxk6wh|6>qkJ67S7|nuXmZgrSgmo`cWuOYYH7V5 zN`9r?FP$k^LEuYw>)K0?UrVF9W_fA}K9oXq)W&-bj@=30SI1p!$87jF#)1!A{P0S6 z>GaQoN3*dFI(@r|!%e(___L@P9R`@;B*W>0YjcVrv;c;1y)-_&z4g;4wm%v=S&EsS zi(>^BpH4tSf#qcl#BTME!R~gml4C>Ix=>j+y|+SM2fB)}CsmaBlRF98S=@AE10y`_ zj&pmI=@eFZ<|KA~vr+v&o#OjncEjvT#QGX8q%Zc$Y|R~m2L^rn@NQL;9n;S-r_qKB z>_YCLJCaCv)v~xutciyo9Na_sUN>tshmIKLA1)8pH=hr+S@g?-*TV z2oc%#RJ-%nk^^C(Hi85F!_n|yxV<@I_*o}K)0H&KaJTGyJ^wwa&7lO)A|c*h!@c&T`!{<<9=>do3{)fMGoRcw>+t zC~^}4y8C`53T}>p!Vu703*gVW#s+DJwsIfbIgwYzyRAy(;Cu*4D?x~BdwPbo&PJWg z1Q!l(yM^zHwVil;tM4!hpVsN{IZa`z6Sn_pFvAMPk}Rtwox_xYD6W#GlMSdJ1Y&Hd z06bsTd_tOX){;~&OE0X6r`OsgCzfr9Q_{JP9TB|8;^!PTTVBY{io*|yR~X}BJka`sM1gt7PK)46*jK{~GAH4hgkHTAVu?YN#7?qh0fDO5PtNL1t^n?o^` zKf4zG$=89=?FB$#x+B^yn9b8WRWyn(HU4s|!1nw$D2d8`jmPQ^3ZtrwO$a<0Qsb63 zhp5%~%EJltf=blXfu?o1plSu`6#sN?Wl$mnV5ONOf(!R6R117H=*Xvjk|U8`EUUWP zXi;WzSW41~c*69><^wtTS)qo)H9+e@d<~zV8H2YJSgF5^p$XDZ>A+`?+Eh`!uW-(F4cQ~C=JpBmQ zh+%FG-#rVUyePvx;_G$9v3^h=Mpcm)>{Ri_Mjby~oMrZqG-q=yZa;M8@wbsixT!tS`~t;4bszW4mipMb;4qVsM(o{x-->EadL+P7p)+ zG2wEZLA=aOH}q;GOt54kpvYIjgZAR@cB%BiHaJ$?Nmthpxj1{B-y9)IMsJtvsebvM zch@QPYHJ)2SqdX{q4;qJch6BG(uSJo(5|y=k$w#>6hhTnNe_TIHkdfaE=CNbJR^NK zUOypy2%DqG>PVZQ^OPL=cDGp?8sfd-mZK{%;~0gg&pbZIL`}Sl{b#&8_>KeHaJtQ! zWAu89gN8RBtkCL{>c4t)-TvM;JM(Q!*`ti68+D5 zPVgPmJyG^uxhG;86#xSg)HF0%ATqa^)H8^8R>i*zaEorWTWyH{tWWuIV85)*w$}IgaWmL07k<>53=$@=*cg##+u);+DXdU893vevoGT`igc<7Zp>ID$X zraveQL8!TbQ@9W6>pa+YN|R~hJ?)^hxq6qHLfR#x&@Ai z`e3(tr8>%~S2^WdWdnbx2M^1+{nA%_wH*Kjl)pD_zEt69ISU$C1~0OaPrpS#i$UFU zDfHJ-^7)b2gj9DA_FTQkGl@jW>8Xf{ZF4w=dHv#olFeMe7dn%ZI#TNDfRr!Rbu1L) z+s~0Gkzp@kul(FE!%f$=(y-OfeUhY`dMCQnftUyN;J>A z0m$kC>wLn2!bSUOoHrs0!Ul*+-C{|*EBR3ho;=u#e*q$DA(dIYdyYl4O-{VcKneOi zbg~!qG^IrH)w4f&3iq{lDo^SbGwzqHDr_~6F+)k`k3S|2WQ+3W{Q@T&@@I9!>|@lJ0;ghrDM{~U zLLqMOM}>I($}-fSB*Jva9h?2!QLJW;SHFQ~+(=QeA|kS-H#*q&w6&R-&Zi4KQHZgH zU*BVz%?@HWh6ET`+Lr9vY)tqscQ9sH>=q{XK z{{lD>`vV~{Zx89mh+J2`9Z1GA=5{)fBLoV%8e$j0z-=9fq7pHUf^H^!%9Gm2<8GDb zzN`t_(!h0DUwVMKS4%^40|6zjhGz@S6c$ZS{41fn2nVfOz|Dq>7WClg1u~_O<#Q!; z&>*|a4pxcTS%o$eHe$hIp_`aw-1%~FLQmG^mNKaaW0!=Ep6rZlb+ksBlLSRpvTj{} z>;?|%U}-ymtI(IVGEDMCx*5W_!yi}jH}GYN_A`W9g8qp_Nvm3HB4fWu@((V~iAJB$ zSx)b^Tu7dM0bBc71qVW|g`jVXp78r^DYu*Y4Rr*myaPskCXW6=sR{_r%ntiN(HmCY z^7aTP>qm9~YxZfI4o~cspSyDpIkbFCJDRnN%y8+z)bK1fd$4S{_F{7B=tgbAPVHy; zP&Vo1OVOslYmKZgiLMzsBcwYBXt2XP-)<{tj2W`11Nh|J)}aYbPZwtt;fYf$lgHfP zibTJ;?}6#obpd&>L*&Z3%Q!cZum|F?rijc8Lv_KNnG8{&ffaVGF0kBjD2D~}6lQY5 zE5*;AspIlPA_0gTsbSmY8fZ zy&b^#OSnrdmkdR*guXgT!I7Ow~mR354cU*O5?Y-QnSJyt6L09()v5LdO`qFy2Q|yFAQHPRf zlJUp_`ZWAI_JYo`TWa9i!`G`U*?d`wChl|(B?%pU-N{B7r)Qhr)1&~Q)H{sgS?&FT z;G3MYmqkHzj!2UDat=Z~Jk$r2lD8I#N8DSzvT29t^6qaUCK}*P)m2;ETKPKR4Ve}D zaLYUM*9KMwsn&V#V9~^LEpubNw|USeQ6-Ed_3&YFn0~O;wHNX}%N37s2&6vG@DBN# zXxt^NTN1LUX0prtw$B?0K6n>++fgI@$**N2sZ+`O-4p;ja3tjmv) zAhR@50xh-<-C>+7XvnOl#66hsh4@7DZcC_s6^(rJwa}6%rhXL(rFItF0nYQacvX}l zJrm-q90s+YDg;gB11OkbBI-?bNTZ-z$c*V>*gxk$UrrY^7JdP6NoWjjwBudb9*Y(2 zD&z{z)-axUQ!?Vck5|0SR)s=sDH1sy8c*QVWL%`eXA=?jrXJRvL?rKA6Mh@lW1D#= zW(t)!KDwdB(S$+lh+&o6+`6XW9ogPv!Y}Rfe}EsmyIYELs4Za0F-*iwcmQQwZUyWM zisN_r@6^(E%-}4xwe4l;)fMI)#mL`n>dY`rd7cPwVqcbk*#MtAx|@+gT+O&xa|o?8I2X zT5LpLd06}u<(^*h?ivJ?pJy3G!@B3udj#B=Vfy*l;a@;cvYrgjqX7B1>T6~81*=|r z6|v~_UMzCF;GdV^TyMrIZJI#Tc-&Z*<-yOv|~d7E#J7)8_1r01`;V^-`d^s(<1c{cAvGkn4nNagy5ik3fk z^P8J@ka|bqEKO^1hoL^5E4ve7%jZbhn~G$dROKa@wl(JvnhEItLItUfaZ<)QH*B8e zlJ|?saAXTLm{ZLjMQ-92Mi;U}Ewm%T^z`)H=f3_zh`&BsY%`Ks6BR_7=4)vreddqz z7>@v*A$vV+1t6au{lUjoW&a?ROBKSG;om2~70_;40I!-VYlDD*fC|A<=TsPeKTL`| z{5Wef_8dou)N8KNb9uI1w+zl&a5I7Ni<;n??=?8-SyWDU6OQ;75Siiy`vkLC+=NH| z>#O4=B3POO25?P7)S&rW7_vFlwpY>)3h#4iCM5(b>We9E5es{CC{CHatPrWFwH}XH z@K{?&on82Zo%)3gQR87uEEk7I%JdgmKkKe5sqcsByimp#(7zA;)hq1!eWB)OU;D#M zu!)M3Hl^3-J`*czxD#HiQ#YX#H5{jMOq$0?r58g}I}i&bD5Rc~%FB^K0JZZJ{zx9D z*7XM8u1vW^&xWeDqOlS#Lzl0q4$c&BQW&chbfm{~LqcQ-Ask9@=rWW37~;qi5yV+6}SrMDzk!85=1ZGTCLB~XP=f1N;jkIu;ecjWS!nTk;1$F}T+9|q{j6Gi5b#;WOHxS@lnX-j< z>qrl@U67p?-en%0gv}4iO#|$4B3Xc$@yk@EuoU+={Ud3w(Wz))oK;N>MT6~ENgyI? zBLF1cvoh1yns_TtzNfRB0(+S7up{K5RaN=+Ar@H^EaFjCdc1=Y`l|!YSY8V7y~sLc zmpB@$^|BJ>Bu&#N@Q%Lo7t(#3VL+uTH)oI=~P?XZkh^XCgMYCDlD ziaMq*c*IcXHy0dtk}9cyI6kD;#LloWqym<4S>J29`LF6fqak*BX|ouoz#xmq+M=x% zE2l_I!Cz`Z#%fP0$f8sq>I+ajyFwg4<5%#fVJo-ev%>{n0VFB1_;U9d^?>2Jqptp{44_1D@3;+4#u??=hi5VeGtS3|gFA`k#Vir+av^ zh$r^d5+;|GKeN<-fo!_F@%lP~ugZc10NvEE1#L=j$pns|eet6q6CJvZxhqz&i%zWj zd$RDAy_XQ#v5` zzSaMe1N%Xvcyj}cfr4j4g$th?<(tpyDNVBq&%PK$PTp{37aKIPf|Z+pJjZwAInEeP zcR^0=2CG>o890F_0+*@K-6DzdV?O7zyUExI#@Vcr?u`g?v2`yEDeUpZ^is3bP8ppv zf;yAP(A2Y}JOy2;<9=PG_S)@sTVMl`w{pv%K8%yAqUS+ZiX!Z;g$;hZCz z=z{0sdmh8AzIzm|=4j4OxU8RbpbyOY_X#0u zZ;YeOp`78)PqVL_`Em^J`iOvl2|ty4lCC+CnW1QA>sS}0^gEi~-3SRQo0R9+NWw>I zy9GR4aosb)q_fubSt`oRvRkK;Qle+$8B)Xb#6t4kdMJ*782_UNbUz|tdF3RVja=Q6 zLo%YAd<&(lka)BW;`=2W4v5m^@%k4{mvsz@s!d8#vg^wk8>jOz&Bn; zmvahz{|QP&FO2>j_(jUwhPGLHjWUgQeUBrrKp%NN{R*d`S)uo`lqqkco+29VLbEuE zLyNJ$|M8k&e)7w5zt=s-90EJQ2x>I6d7V$0GX_%{EC+;y_5-s%4xUXrI_bB+n^~he zza&gHQ{#GsP$9JEPQNqgSuG^Gey7MH+6zjPrZP8(?8PJ@ncr!D-}5jm{L+MHZ9M`h z+6ii5XD9&cFrvSdwHJF@ZS?2vpQIx(WhKf%-&32;<@xwuBU`S9+k#Iem;%&L;5#@} z?WE8PmcqD>nW1(G;~Et#PbGIJxN^fQ^W7q8^CF-_;iKL#?6*?-0cn5Z2qE5kj2zY`LD)%=j`g7K9n?^C(csI&XG&NzUN&L3dL_>4wVTJO#n)#{bOJ1gu) za7g>Kd|ZRsglIZi392pr0(A1P|KJ=x@G-`p|B&3RLiM<61(d2MC!*5*<(33>aFyp65jWwY0nQaO5O!bISz(r99DKCm-!1a5nor{ z?9`O`dbJ(vn;e;pV&d3_ohmjIRBp{sPJZ220c6{N#29 zFCYDt@}CeR)%P%@t6m|yoIXIdrm3K^fP1B|uYl9vE)M|jb|^Mex%CBJv^=NNgBs2cv2q&@%3i*qjLNGa~8 z?Z+16SlrgdTaKuXWE@&u*1q~v9`06(?+kKxr6fy6Q*OcN!O(3;YT5JcD2egpCw_>S|E+!bMf#J0MN45)>^aL z7WR17y~VvJ^8l_feLSn#Y~E8kc>jPnax58{)wJ$8uka1wJxqdv^-q})n(zL2cYi&6 zvlg2BUu*Hr>e+oA=w6*844NGnQRPVqs_~iR4Xw6(NO^o*%K;B2_rG!1{*5a&#u!9p}{b=)o9sEGP6(iMKy?=WNn(KV!hrK>i@ac({qj_Fp ze-(Xv-59#myRJc!e0)8a0=EhdOxlvBx`q_>dSZQMqmK5WHyg)4=DLSo?U%qm7xJY% z2(LK=eBX*;PKlxh`o(5AY>k~M$o-H!5SjA7AOD!`8hSPVH&TsXfnW2(*uM!%jTX%V zy&s-N3i=|;7$nY_WpJ_%(;$Xd<+?9Jj-5FPIS-^kGHCtU#8mska`r+!&L5y&DMJ)L2A7ENz;efg}axnl`kR2;t z&A!p-60&elI;Pw~e4BY)LujN5=D;)bf9}Ss8PhTfeBK(naZhk0QI?OES?wSt?dFpq z>|dhB8!UBy^?2DR?-uoWjexK%i zz<(V&ADX~B?@Rmptv@F=*d`^uZj_Nlc^&+Am!e2k9Di(c>d98-)z!E+(Mxc|&H7c8 z9=&({YtGzEU87Id^xe33Q6nX=pKoN`j6QEHFOk1$seFKGD8aF0yJd4Ky!Bt8qtO00 zVZ{zh;lc|cx7i^FENUV5;mL|pBG1QvwkF%GhJ&d#|Laandx7$wdn(%Y`X`YAp z#`FWu?d633Gi52Zs&qTR@t@@!U25y}ac|wipyj&B^sg8%cvqs(7Xr?a`%v2RS1_yG zEyR!KPjf$9LQvt8U+I8N6;0M&vUjXyeANNHIq%mT0#l24s+P)R>*_P@8_w-v^&3lFh zmTClz^k8mH!EQXD+IrmoY+4*Ee-qF0G)W6@A=Gyexdzi{tS**%pK6tS`1o_=*q!EF z|L@;YqxR!O0XN{2MBA)QC45_1DJs&cvBUlV$TJ`JlkhCDsiHI~DZoSNgWaE_+vb#a zs(S-$5N9S4)n zW0V5G5w+?6-i=pwHS4?2oh_FP4nvR(e$(hO5ny_DrKNV3pBVXcpIqnPDgOA+b)k*r z$hs+)ms?;zWPtBpzkMGMp5J488GhTP2(v3;l|x@toakGf@ueS?Zst6nKP`1F|GOsl zziXDH1cVFyZ(^3(I|x7Iyq8jvQGziCKK|>H1MZRrHtU1j=k?*u##?w?YUtlg{#3Es z2S-n5FLY5YFA?xH734g;{&$>J7rcM`3&A-iI8T^W;o-X#NJwtoBB8oNPDVjPMN3OVMNLi5$j(fE zpOt}{`T_3)Rt`=OH;9gz?-3u@BX%wj*Ci678#iu{+$6b2LUNCbo|>NP|Mhk86+n5D z=8!$vR-9t; z3U9x$+i+z3A|Ru`?B??NcTayIyH0>{Qxb{^9TQ(6j0SMo4*^Db_3lGm;(LNZR8Lqe zuL*lxXO(|*F%BRj)F8kp0dj!T-0S7y+f3g)3Vtn}vySqMPG480pZw7Tzt&RSn0yrV ztYXBE?t!ycAms)P{m(n@b24w|&1P)g;JQy$zL+}KNY;NiAdPtO2JwH;{2$ukD>Ry({h;;f3@&4`efE91tvi2IEY;eh*&=6$7cN#XhfZmxT5VZSt~`_J8IB;G$X z@u?)ypVjKoHgmPd%Q<#tipPC9eburxTdEwP1aiusRxSveGn5GED#(F*IeO7o^~Q$O zIP3MwXjU=9AU68n3R&T#4*er>>*_)5G)Zx>?F+6WeY8-ka>Egt_2y02S#z|B{^Z24 zhK)69su0%g7y+3*3hq8Dt#Rs@9STjCp37~4rr4lPigq9oxcdyk27?G-w)sj ziMROPw2e&=8}GRruAjpmi(#iq8DHtn?>ZTsP_F;wm4XpTL*gCxK6C6txjUOuRn(dT z6Kkc*GM)U)f`c5vbvXeZK3o_B{kyv8BrQJ7(hmFuZ31>0h$v23)>5(u)y?qoxAsMHLcIaqost9S+U@^$)WBXu`t>2U8b#b(M%&QN&P%vhjzBM zwwb^q2~dLpCvCIcL_5vYgkM!g^3EdlLKVt2aAmkrkU^}I6sLp0@l@>%+Kp>-t7kY1 zoa!ciFq2d)R(`(%X1$Dx&XKQI!~cymY2Jm&gQob@FV<_i>nI ze`ymFqe-dyXmCfND3{ZYn%GV+dg<^@YSc5}qg?D{c40K|TG2Ch}Sde{TK02nlG3$ZHaBRz7&($vE^qj6*Uv(|P=lZ*BH zrg9X^d=~)h>`|hu02GgDXl!2hHIOhK%PyC6KQkh4lKc}5hfdh=2KM=vZU3owZE7(` z+}~*Lc>XvpVE!08w_nYj!YgfFZmSm@k>u=!yZ{V6KUGL6KhJwVXLD5R){#R>PV>Lg z@5BGQLH$1f{!b<=9eg>YJM#Z|z&k)VVLFl||9P@)1_V;zB}r=kBt_vrNfGlW^veSG zf!-yJPyb0{hG6rKm%NhnwQ)xT64(EO#44;t#c8B>lnZTT2^9Vx&<<_nG&IKKjrCp< zc=w+K_7sIn{`#`ubl~-$`iwB|A@s?en(`m|WY;6~$%?>?^-hX87X5Q7QSJI0%UhQ1 z`p1aF+et3}WUBR!foxXoxAxvOjsMj0vX~*|Jgc_RE}7vUH28FSS^U4!a6I-He|SCX zJpU4@^gogQ4XgW)FvM};B>m-|m}Bujrx<||z@B}({QD0m@t4gm|Nh5jdHgwBtcGSf z1W@TeF@{}&$kLvUWsm%WyIf9n*|)_i|FI|q0k`Y^TtFZGrmf~5SKa?wGk?+S9tB|H z@8$XaFKkW!{lfm=i=)&#^Z*AMNMO%n8|dJW{L4DL`uU5_+1==y8xeP$V|SivZIOlJ zCMzlLj&Iz^LKNo=qy0=Fz|1%10x-5Qlu~+nbgt66km!E&yU<+7xvJ{GaBtGoQO^T8 zw2*G?tb~gL{bJ3indhW!?T&0%lq`v-Ev53T=uEI%ZVYSA6*v(&ddlM@;6w6~YpVj% zAD)FrEoq9z6R)zTsRh&>kJa_ua8+_o*9oSa8-x=oZKP^BxryEzUV)L*IhkbRdjEU%)DK32(x)t|N5X#ibKF9LcplV^Zl`e`Va&wL+YB*c;h^0wx>Z zrKxV8m$T$ZN^FSM9-ck|SF75gu9wuw=8fO_Ih)8)Eg^Z|g4($`y)Z2m8)^U7Sd{i` z>bAf3Ks3fMRFC~-;$^9L$}`9GW>x(0IIe6&`{uN#mdN<3V#T7Y$)=v8rE;wbPMajf z(9=H`_A-?Qn?K97zYrN__Q|zzwU?D&Mf<2dYjp}5_i3v8x5)XEXDCR3tdRi&ex0eSrg3DSDvpY zPF2Mfc&7MxjYmq%`JCDbnqZM-CLdkeyu01)10x>g$Vb`Uq0-|q))J?ubl!MV8|X|o zPl*P`*$uz~J$_=%`*H1~ea|y*hjIPnZ8#jO*eOoe5>Mr_KU80INN#@$`Pun&k9MDv z2M$lvTUhIDPx0(@bQAudU+it|mPyx<S7Y4bkJv(_HE<3PFzSWeVCyKhj6`5#lc3=Zl^`g z`1AQsGCU@Oi_Tj5=@4gy_U*BqNNreRE-rE*>2iG=-Mz5Pg7;gd18|4*xV8 zMZAi)I^yNcofyoyAq%GO?_qL`-Yi8RGE<=KGJ2z{{13gfJNhXwh(e9dv3g6h)X98r zFfjdQhf}8RFeGbt8X7*G;kG)@1I^U{_3H*`OOo-Sylcf`;;Gvn$aN2efnfGDMAmvq_LxwW{c>l)+W<%Mzj}3AL z@W_uqEefv=%HzCABQBM-LJuzpzLILt(^OefjvXGw8P2ud$rc6iK1KF2ht{mAjxcu^ zw(K|Rg`bZRZjFkuU9=DZtf0edy$vwEeIx)9O%Vk3NBL-kcc;qO;%-4uVedbR(H zZ1)%Bb>Vqd-~n99YcL6M+DkN}?)m=RZAP_{)O@eD!#s~|N&NW>3+$ogV}ZPDbS)ZP z$o}KL+=Wu%!A?6BGPd0z*Tq3IdV~f$XF`c)j?b#MVOT_oKFVDXD9NSloiz>L;r2vA z#CFzhcIfUxl`1u~j1)^#Z+YgqE5qBKdX=g_-sOrz^Wj|+#80^=%7wbn7`xzF@mrGJ zHi%W0p>_S-<37zC5HFgeSu20X)lMxgsc*o&ecoNhI|*iA<3Dt_Dr_aPp#bb8=`3A~ zc1ZW%Ax)Xlxz$GKy5J-{&8H=gHEbJY05=|v_L0_XFL1iI#Pv<6XFN4QFrM~=FP)h>K7 zdj4E!u*1DLrlylm){EQ`Lf<3QBf#NxRPC-@+uMSLYx_dPCR}SKR(Y&>s_|MXCdWb+ zelxMWUdZeMccZ+|Sk+3iRW?O5|3^6(lrglcY^`ybP9ArwCT_UbvG+0enm;x<(EW)X z$YWNYnqx=wQ8-*L4OkuH|>xVViydFvnna9 zvC=C|h4i6DE2MXX*9YTOQWh4DC%Q0ZBbkgQ2KKc39PWj1?VvgR0*qc(0k%@obm` zKS9`i0d{FLStebl_@?we_r8OMlqma+1L+T`i=DYk>w_bmy!)tmUq-Di=9l4OLpBWh9jJW2VPW7_wzW7&;|sXP0M%0Mi)jvW?$$8iL^vLl`Kn{9Wn*X~urzSgD`T(m@ejjCY% zDMm)yoW3YQZ{==nw#@w;b>T`xFS{sb-ey-5Tx>7lH0LE|jR)ItA3toDZB`2IIe9VG z@4bhL;MJ~i?zk_SQi=??Sx!~b>O41Oeak@K^z?(TBlUD(eqd^URkH-B6~ zo)jEEY@4XK>gL#F>h@*R9=BkdWZn5~8B*+(}0K=xV$oI|C3ADmV)N}Q|DWE59s*H1>Ftp>;Y))E60U-pMgR0YCb zEe{ptI<0gq)TOWV?#&;+^nC?C2o*W~4Ofy8Z2IpsA|aO?kkjKBu<+Eveiv&2Bazw* zTlK#HBy5Ba=%}85x>Sf=Y=BEmdSlDtO5r)}3W1GlO~+)0O)q!97C3*4j9gwRlKrUT zDN8OeT^GV^Y>G$Pe)zblpyGini3W&LcvF0Q_*xLc8$wLc{xC-4Q@&mBGaeX8i&g!X zI36pq=C-gbp-OjNE7faOCBpD)U7?0-iPqDG$Lhc>%E;ztJa<*?cwgf_97Z;ABa~e5 z@{h0!dP1vIZMhltqI%is-TIj*Xh#;5Z_$ejtK?Fq1m>k`2e#qi>SI}YEEr@L)>cUq zYnzX?zOQipV8bE0Dw z?GBe~Tb=&+pI8_v+u_ZvWQ{^_ zF7ly)5N54@j4~?1V0}pC<#}K0-fxC!uY?k?`N5O5=l>U;X+MdkP-WBpL-|Sc7-hfW zXxj?jqFMK3C9AGIkVfTahDDI~Du0*V{LWbn(#cV%lfL4#-o`e8Ipj6bK*&*H)WqrM zH6AUWj-6M&1#nNUpN-!B2N!@_wN0PX)jNhIJ8(u=Lg?u~78yX^@UGJEfU?m*G~+m| z>C~dzov-Qwuyv3oef3b~O?=whsr#pFI&h6{Y4JCrf4{u|#{85@Sr!=8{lh*shPKN~HKB-%uDB%=$2#z;0>< zLE2G6R(km|s&F+ybd53}xCl!3ktHZP+?VZjfvqrKqW&R0mF9A;1uM#uN&{vZ#=Z>f z^*|f3BqH&cAOjYR8()lm1Pdl!6|dyUZ6Gvlz?tYBYWpR(KnXkv!F=}$P!BX@@_#s~BWezLtS%Tns`B;_NHQ%y5fS?=Q}a@+hCV| z`mVYbIf59q z@2azYzW1mf3IIG1CVt}kut?3uoARjwn;|9f-8LJFW^19!N4Zvb)n^JoM6->)c!{9~ zC7$TRVR&;_IvcBks$oOS7LRSj1`qt}M>onS7Q%{-k8kre5(-@~5NZc%7E$SV^s;8y z%g7fDcEa?->f)PWxE@{=`E8|M7%RM#(Hdb}>v{R_TdB79W5X-$>f ztqR+Y-?1Z74_PafE<0~=7@tMSpm%-h+p_l443&N319xbKsH8jGb>WoB$oKCtDOnxd zdI`Gq3S?dd15iqXMJaEafld+k`(x~W`F7);kuWCho#b$oeMu|7>C$R{q{FUykI#Ck z^q}Ezuf-h`(>jJEnG``R`KC-yO8e=1cGO-JU5HcdgB*G|*uH4sL*+A1=XBP(fSpK- zGv~#wx5iAZseh`ft8DUg05)yK3`m^3;=)ark50jN_0<$??1q#TM8AA$6~vEgrHlG9 zQa?K9PMDU@@-c2bN`jo(So2o1L~tE@E)%pD!gH^wtG{`%gh@xU@VMfRTFgeBuluT9+m}H2^`JT&`Im+DJlpXbHk4ra=`- z2c;|ep0c`*flO<8-^9;& zflYmMvdeED3%2n-26bHOsZ*oaXDhQ8cAhT+qI8PXsm1l<={UiH&?+%HYKdASckW`C zbaB@oF%eeG-N<&Tw8A zny=iSDkbY}6MMku(dl8Qlkx*A*4@hI6lEp3%^+LL%Vc0lmLr-Rpi)}WSLzixqGvJt z)E!dXeWcV+Pm%p=Lyj|Vp+j}=d8gx0d9Sy-Xk>ryE0=?DSB_t5o1IqDZsFhaq^;sg z%^{oiHT_kTC?Hq&0)8A`=@~20BYae+5o@!i!PgRR>#AV$GTXxtS6FEirQh-6Jt-A{ zsDz*j!-E;`epJk$t zJb5Ht?|(SE{}FIC`Puy|By1sc(QRm#w~%X!6z#z1KX3~K`=>xzl!ce4xE4Phy-0ofR_v;(z}ES172cgL5Z91eP7 zx?*NB&G)9Sd2+|{#Xz3`RkPE*JM2sPxnn^nSb{3n_ALfTu!>$H+|g0bHz0gL82wI% z2lhb6I|6DkI|(TrBvVWduRNM-D@;gI0=$!0i{6_;+e7$D#g<_7rHe8fW{EGW zr_S>|bu7!%kGi>y-vt}S*;M)W0>L^QUV3@pcw32@#DQCC$s6>#G%D8%!L9A7FOm@_ zI$;)&ag%lRnmFuFSeov)qTI=uj^Iu$G}2{zTsJe$eRAzPCT@D_gxrX6Ds{@%@09ay z4zCH-$~X35SI1_%FA0QgU097ADenFJ;JltwufKT7Sm3shJBDdJQpRsDdEm7c?i?p{rhkPt?JJsHT-mMKCB_oc=)IN=s!AemI^_6DIn zOR*OKPsxnPPTu%tftpCzOU}(^befLoxdmRZJAmide|fy##)hd*E*}86Pr!cC_%&^( zP?_MS-J8g4^1F9#u<~P;1@1NDc>%!J9tBuEwNth!zJ2E{fL5R4tD!Ez(-yi34ClE* zcN@`U`E)c3PfO8uU4bS3Ql@TN6@5ZnVcMqc{xGU9$R+B{4t6hp?115ivzazY?VBDVtJ7}7$Va|{c@ygflEIq#Ct`}tm- zE5q1^W9c{13Sg;S7#k#Lx+5E;9mgD-80+;ys`_3Br*_!#&Q#Tplt{m-&Z$lB@qxI8 zbQ291-JRoIk6m+z6DE|3k+PF)uH8$JY0XZo4CDQ+9@wE7cfVGA6|N|5UQC=Vxto5I zZq1+JI&3z9{3W8BHjl=8*T4y;7=!B=-UZ{h0S@kedKPrHiqljR@}=~z8rJ8`Q-Z5?HRtp zYqxCs!2utAX8f#mqfu>!2eGR=A6avEqr`X$0y3KdssXzwWgR z{iws?GbT3&3Rv)1MyZ%Z^$?!y<$}`qwRj2AL$IEaE{^sCBbV0GYp8YqHQ?$q06^}= z5!K(K^RkzGM)v~HP-CLP6+($Sh44r;<#2_IoHzTe$S%=5VQDF;B4K z;ir90S;)G5%^F%9A?&v=_G>xeg{>MZvKVp?48OxYWUgr$IqibAhF}({ouD1spknF~ zNrQ2JQomLM{+MnyO}8GT-Ef3LYzuB;DlvNIK*XPnUs4KacvPE%dReV8wR!qrP)C`2 z;R3KCdxPF}X^gOcl*fHUHFtp1oA*I^c|<+gXemnB!U}N4^l4{hlzqrZFH`d2;cF}N zk^HF@F0>niqe1PQDyYncT8X$h@>R9hM2U7*)P^6{krz6S#O4@rjQsIwF?gDP682(1 z9*uqsYS3awjQU*wZi>4}z=wXYjyUq#8{K`X!_}I*ee7(@J^YxxVzt>PWn#?UzSEYI zGnr~V&z{?zrJg3{z)rVS{g2Y`2-aAK>X7(1{E|X9=5Vs(fiNF}OtrF#(g4>^uwm7YZ9v>RU*YL0}$_q&E zh&64}*Cez&2bIZS0|6LxS0hAW6B=S$F_M@II3~Am6aXO5-`W2*M^r ze5oHr?#j2>_p?&)a3?y02x1IM=1by=(bep*Gb4C>Bw3e+7oULvYL;F4df;gTS;QDn zwc3D84Ji}sBTkI{gs=pa7)aXfvMY%m{Crg8o5QG7GFV^nRHu;jj^0ReTsebR0c5&Y z_~V3>k8s;!5FV~Y=CmY~tnv9|~I+w&gRB2FWrhrA2LkFDQp z!Zs&V?u2-Djl3Iz-_f|qPTcdcCW@1Nt>9BjaH)fMp74v?xuvF*^Naz8$GuP9m~Loi zc8d3Vtqzn)O|0+_O+Fi<8aaDR9%khxHd2}nELBT`mwO;7i+wS_ZnNzOhQ%Yhef__* zy6hYjfQI7IMh!sHZHqU(v|Jx|dG9W2u#IgP6J}@GJ8QN|s zl6@!=oHk}*h9xN?fw*^)cH#Yv&6`sBKQ3J~iPfJ{8wXS1leQMs#YO?cC-X?cfxbeNiAQN1NFv?RG z5Wi`nrfy;9(lTJ`Mtd$}xD_m}KK>|z{t_LSsb zkx7-DT<3WQ!S4$pKA)4HvN z&&D&FNottP|Avu5)f2G81%vaos7$6D?fF~Ja}RPitiWhe(Y6*@u#k6|&ni@bcP^0w z=4sCsz~}21+Bb;d+84sN=YYzZoLSdfDgGc*`~q$Ke3Mx)I)))MPU3^L2qUXvWDIid zmO`svo`>Y7u&R9tYYFw7@EXfdo@Jjc+ZM+40)SyiYBdNw=e~3c1>-hCOY&AH{?xWO zw8dZAR!5s4vwwxa6EjACg}|Fp_h$5dLoTD?&3{{PFLqa|_?nhvH8Q#@H*LsxxL#W( zUVU~~$DvCZctuRu>a|P*;*jK!i0q>qo1qd9FuW;-SP;U}9;_G?O>hVm#U6ASDkO zPAm0;5M4!tm;-`e&8WPl%e4u@mbvg_lC0or5Lf`OPP0y$0Zc7TrC)_^;JGXureWw} zZ8vQWA8Q-C75+VuF?0DxoK}=ma&E8(?`M1xU+pJ1=psXeKQI#$^HJSgUCNcFpmuXc1657+^4wghsc0N z@Ox-Sya1<6GI@fjkv3tgV#-e~e`@dZvF>jBw{;hpmwv5eTWhvvrLjCCZSglyPk3O9 zMRvZag1u@ve2!ViI=CaL;-FvEAN41IH03+8YR>LpoDVSymZtXAy+-e9Whq*2J3(c^ zb8(=YY^$+}r)A)7a*8RktdUjgXQttFoW5sQ=x7|zl$62Cy@Mq?N7Maz6~49_2LB${ zt@7d?$s%ZX^o=1xs+TxJbyDrBqNSA@myM(eAsj_Kt!0ZAx}T*l#Qw1A3MhKINxO(T zS%0-Cu$iFa7Q0KlM{5dlm-l1B>*$RBB{5pApuh7d{*R8o0*F2X0L<0WBrd-onQ6fv zH<7zde!z3XmE}L<2(Q20zwma+GUOi=PX(du(QUb8Um*Yuhx}+n7s+U*;2*U4NFHma zNCcf^XdCb{8y`)y9*WueDm2kyS)Hq@7hH`h9-2jEG2j+bDzI(@2zt>te zOhLxX(M|Tn=Xh)FpnGtg&yyn&k4X@{yqSs5Q>W0i0%3m2)r*4dxwRi{VC=ek$@FS+ zbWM3W($mF)w$!MBk;r`5&Toh|q}Orn3#q!17Km*^`Yr4}EeD84z0Y++875d>!#X+V z$6f{u?%7cT*?#$ba4Ss0S~z8KL2IFJO9XN3Hx0l*YcX~^vWA<^Pcg|lBHbR=k>Jgh z`BnpT_|rwfni%wGDb^3Bzp zFRS$0_|X~oW2O0=BzWmqcoU*hE3xDEhZe+>YEy3O+*RS^C$H^p2P-@v3Vw2zE#%4)53=hcHT0|D6W-SkL%(;2QWe6;V$6R5 zi)ep755H-3neZj#I$$@aZEijhfRSCZD#|kA{DM`fQ4<^u&&4X~O+v*9Q3REqFp7}X z;C>XE1@3d1R?;lGc^Kcl@R&Q1psW<|mBsQHU>D5J=mD0nQGjgA{yff;d%)mh?z-et zo5N?k$SRg8OcS1CFVTu-7Ow;6nCRLM7VI0)aSr;C+5IrjM^kAEAr7A}wR!|4+u)k} zGKP0-sUpvGcenUG$Dy=Uneu!jy&6@>e57WPNrR3sf)CfKRjZPuIU848kYy8X)E>uIcUC6;OuS&DaNY zq=^p%xq{k-09XEyd9M}HStSQ!AQ-Klt%U!HocR1(PS*ZQI6nUSvGs2`QKeAp&LUz1 zKK-Nj`R6CM5p6c$GTsm?Awu*St;9nk_$eP7(##(H2Lc%0{J@ZhF0=tDFD4yid9$qx zslbASsxKIKEIdU_vNC?;(A7WO#pw$qDk&T4w-rF&2e5m#ePKfp{B%Ov zUnu=PccKldzcS8nOh2;9a2I>Pij}a2cbR7D-8b&ahC}LiAmq0o_pmVY(A{E5Y?=T2 zpll;)dOo_!UQQ*y6curIw(fYn~1JC+kVQSR8nt91J*HCyV)!I*uHTA zcp#3D0ErN2p-n7@;WfMH58ENEK5CSR)jX$9NLqDukA*u+Gu48?!S$Z8;Vi@jJrxBQPMJ;>2Z?-C4_hh+2-; zNhJMIfU%t5Nt7=`Ma^%I#rhC$t3}qKnbDV^v8w)Q*vfazE!VI^rc40las1qvOw&?l zxlJQ!-Io9U6b(uAbXKtd?tMKHGBS&3~IXr&X1K7tDlY zM`i)DG2rUJO2IwH56}FSyu5C3m-%9G)M#XWX?kl9#gQ7 z8q7i*xC@I6H-yljX@gT!OkG#?hk~HJ?9t3c(zoY)sb12qY)X|Qf2FuurP%6nL^6!82`%YT-obmH~cyBkX z4lf*FC&vVHo-FLI=e4X$b3QKm$+{RWKCl^R$hlPW!`SY4ERc!teaEWK-|b`m?uco3 z*Umj(IKX;)IsTAmFX3;js(yct0~^&{S@)%TKlT!8k;Nnsa_m#Mmd+kFJDuu$oO?Q- zy#BC!n9#G1$MNIEmyZWMZ#?|2;*kHdh z=F59jPj}5>h&wK-6{X{I%s4k1m;-%hD^=_RyAax2<1eok^@K@;XuZ6SM43X>g+)3VNOaLUCHJ5)PZ^ zMun)=;VWf=Phks(7SI1x8VQ>-G*56p{&1A+f~zkfjJmht1lr_M%m03jrP9jKJYHd+ za@+2_&*s2gph&u~(!w6eYMaor;*o)|qJ9;x5W#%k-ENz}!BLcs#{tMn?6U0E{DCWa zUSFbbn=qdS0m%&bz4om@o$u7*6#-J9>gtz-@kG84Gv*s1oI}ZtddD$n*w6L@(kiD@ zKT#)LKd^;w&JW=Ku}@J*U9?xloEsHXcHHc`pHhfMK@aP5rfkEE3-`U{bb+0;_`NCy zha>CQbznQ<7_t~}0a!ic3>!n^x8BoJ&QqI-6GriCnRA%GcwP9&tNrH%K!o%Hk zgaByw2pcoVUD(Pcgev~B4;GHwylhX^7SrIz0qJvMvV@rcJ1L3+*SI_~=kK@}i4W^E zp};!?6vgVt&4lPCy(JX=g0Of8pU$haivBQmuEU@6?sPBwSUr%iFmCi|zIFjf;;E?l zlDBO7J@9wte2;s+iddDFj@DU`CyH4wPlGJkJt4g%(y8o|&9G_h9k!R<-9b(^1ENP4 zfC6XhqL#VK8n0(nq z9HIsgIs8F)I^qtS8H<+d%lIj0O--iXvHpP0Q1Jsb`$vmafWr~W_hU8JCDB&%_KmH! zpV&+GL`7aX%jkuc-8R3Ew9DZT<;~yxis#L9HcU&s9%|Ay;`DxaTqDp?S298M%e;@m z1E%kjlw={hoI3hEkuMSFDA|)6*;sA* zJiErW)jO1PeT&b^ywj9wQtUl+o0pOwiA0k4`DhN$bsc+d6f?GVf4awB8Xe`_6Nym0 zPWeEd4M6l3K+p6tAR~fYR`xr`;j%E7K<)3Y4pLbF;2L4m>Y(;oPRER&jnqsO`U%%J zB{!9xQ-+c+`2upeQ5l)D$0z<-uNnzHYS3!0+z*Gfh7D&cqd^=W!pBJ(>27tRWooaq zO(sr(cEMDw<#nXYl&S3pgqYLKYoEXW;CwWUU)UF43K(uhZa)rW8r)7bz~xm#HzbZ< zF~Dr&3Hl3ku8`1YAJJ%NG4k`gPA1Dl5ccMKy2;$rRH^FwQD;JHk33~^f=WNW%%OR) zD{w+z=e~S^68^l{9VxMFC*XdxW%|29aA5&IG5aRV8|=M?uD5>FtCr>JmnFNs6qUJJ za5TTey!5=4+$gT;(Um*Bap7fnI^GZ<;j9w?KoA=>z#orT6iLVsbn>sSJ}^fx?Wn>V z(nH&=YG)K4zI%vNR@`Z=D3^K@Ldk}Ui50)B5 zObSo4PI|VFUv3B&C#%{#dWZ)>0HgL_-q?V64Lcr&j*9WHJp9lSosW4s8s*SW8Bfw? zgC_~Ls-4G|9V97=5l&Kl`9RMSMZv_r*Qfa+VL;eW3Y3|Vs3p_s)Va z-Z^yYfSG5=1D-t6xpe^u+28H=be1cy5U>m}A8vHVm_bFb1F-xf}j<^UaXc8Qq)duE*2eXIna0C&KNiI?3D+>do6@c%omK@^* zA$*~uB!pcIeKM6AyC!ZHdAu?D4{1gE2hc0WwiE(672U?GITb5!dUZTrUe!*rSG?or z&3Ma&%d2xW1z#SzF7tR2#wU^xOYA*&($qOS{~BdYlrociBGHu;XVK$+nT|*>q%hYxJqPSEn5Tbk%klvjXKbh49#d%bP}QMJ5%?m zf_>6&r(x^B7wNdNVmkbJ7cG9T$m$SgTgdFOAUW~&*l8x=xmWqMy`gXX^E6?Bf)i1L zJ01s(JaT9L*wKh?{Xwiq6|ylBy6f_7*^M-<*NC|KU226uHvg>`)E;Bw%3h0|h@aAB zQx6&l;MK6VX5V@yX$AP%9@VQ2Xx9!YY zL=hycC!hHeO|ZYgyJM@_1P>{pUp~sSWKI8iXITAq_K*50%>5%|gh@!qp$q6<+zGE? z)Ws_ZR`vz?o6ID5FswAl@I9}a?Mnz=i$DndRX!Wg%V-5d_Xv826sxAzDIL4F7H1h3_^u-`Vx;FF;R~)RPcpy2k{3AD?$N8ZXlC@Yq@R zGYIz^k!}H3uiszg2~H_wdc`QUy)$5y7{%Ne@bEca*1WO!cf+jBLGiCzzu%66nj=w` z)6o^ig^Z1751$vy4!@!)Waa}2k&Q%Jo<~}%XFhXb59 zWCUIS&LA@Rr;L8T9R%sVZYMKM!9Nw!7HuX}CXDwsm~QX#d!o(LJ1@V+TLR!gkO(&S!}MHJ7M;+f)u1 zqVAP!1{Sj}J~r=z6Uu8iO?TGdZIZI!(m#uN%tuayPGEjgISJ3URjxF-!YwvhA~~Jv z3Hr@W$DJT;JKrOBGZNz&z`(zP%`nZ0eOP7z!Z^X%wE`$-2h*=*`;)h}Xgo p05O=~+XtbVOnO@TZ(Nsq?4Cls*rod8%pKz|7ybXQFQSXF{|3n;8a)62 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..902fe0a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +blinker==1.6.2 +click==8.1.7 +colorama==0.4.6 +Flask==2.3.3 +itsdangerous==2.1.2 +Jinja2==3.1.2 +MarkupSafe==2.1.3 +numpy==1.25.2 +opencv-python==4.8.0.76 +Werkzeug==2.3.7 diff --git a/static/favicon.ico b/static/favicon.ico deleted file mode 100644 index dcdebc4e892387070ebf34f60324dd862f89a1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 bnpIt1a!Vxg^BL9Ua^!0C5{p(7^ilo?hq&Ej diff --git a/static/script.js b/static/script.js new file mode 100644 index 0000000..21b4865 --- /dev/null +++ b/static/script.js @@ -0,0 +1,45 @@ +$(function() { + $('a#take-picture').on('click', function(e) { + e.preventDefault() + $.getJSON('/picture', + function(data) { + //do nothing + }); + return false; + }); +}); + +$(function() { + $('a#more-exposure').on('click', function(e) { + e.preventDefault() + $.getJSON('/moreexposure', + function(data) { + //do nothing + }); + return false; + }); +}); + +$(function() { + $('a#less-exposure').on('click', function(e) { + e.preventDefault() + $.getJSON('/lessexposure', + function(data) { + //do nothing + }); + return false; + }); +}); + +$(function() { + $('a#copy-video-stream-url').on('click', function(e) { + const textArea = document.createElement("textarea"); + const video_stream_path = document.getElementById("bg").src; + textArea.value = video_stream_path; + document.body.appendChild(textArea); + textArea.select(); + document.execCommand("copy"); + document.body.removeChild(textArea); + return false; + }); +}); \ No newline at end of file diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..1ae085e --- /dev/null +++ b/static/style.css @@ -0,0 +1,84 @@ +body { + margin: 0; + padding: 0; + width: 100vw; + height: 100vh; + overflow: hidden; + background-color: black; + font-family: Arial, Helvetica, sans-serif; +} + +.navbar { + overflow: hidden; + position: fixed; + bottom: 0; + width: 100%; + margin: auto; + text-align: center; + background-color: black; + opacity:0.6; +} + +.navbar div { + display: inline-block; +} + +.navbar a { + float: left; + display: block; + color: #f2f2f2; + text-align: center; + padding: 14px 16px; + text-decoration: none; + font-size: 17px; +} + +.navbar a.active { + background-color: #4CAF50; + color: white; +} + +.main { + padding: 16px; + margin-bottom: 30px; +} + +i.fa { + display: inline-block; + border-radius: 60px; + box-shadow: 0px 0px 2px #888; + padding: 0.5em 0.6em; + background: blue; + color: white; +} + +img { + display: block; + margin-left: auto; + margin-right: auto; + width: 35% +} + +button { + background-color: Transparent; + background-repeat:no-repeat; + border: none; + cursor:pointer; + overflow: hidden; + outline:none; +} + +.camera-bg { + display: block; + margin: auto; + + max-height: 100vh; + max-width: 100vh; + + width: 100%; + + background-position: center; + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; +} \ No newline at end of file diff --git a/templates/images.html b/templates/images.html new file mode 100644 index 0000000..fd18d28 --- /dev/null +++ b/templates/images.html @@ -0,0 +1,13 @@ + + + + + + Camera Live Feed - Images + + + {% for url in urls %} + Taken Image + {% endfor %} + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 07bc3e7..f86dfad 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,214 +1,62 @@ - - - - - - -Make - PiStream - - - - - -
- - - -
- - - - -