From 35b80a83b1dbdcec76857fd4c333687d9df98231 Mon Sep 17 00:00:00 2001 From: gu12530 <2629144335@qq.com> Date: Wed, 20 Nov 2024 16:47:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=A3=E7=BD=A9?= =?UTF-8?q?=E4=BD=A9=E6=88=B4=E5=88=86=E7=B1=BB=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../special/maskwear_classfication/README.md | 51 +++++++ .../maskwear_classfication/python/README.md | 121 ++++++++++++++++ .../python/images/img.png | Bin 0 -> 286664 bytes .../python/images/img_1.png | Bin 0 -> 36292 bytes .../python/test_mask_classification.py | 46 ++++++ utils/create_classification_dataset.py | 135 ++++++++++++++++++ utils/extera_images_from_video.py | 84 +++++++++++ 8 files changed, 438 insertions(+), 1 deletion(-) create mode 100644 example/special/maskwear_classfication/README.md create mode 100644 example/special/maskwear_classfication/python/README.md create mode 100644 example/special/maskwear_classfication/python/images/img.png create mode 100644 example/special/maskwear_classfication/python/images/img_1.png create mode 100644 example/special/maskwear_classfication/python/test_mask_classification.py create mode 100644 utils/create_classification_dataset.py create mode 100644 utils/extera_images_from_video.py diff --git a/README.md b/README.md index 12382f9..faf2d7d 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ Lockzhiner Vision Module 拥有丰富的 IO 接口,其接口图片如下图所 * [凌智视觉模块手写数字分类部署指南](./example/special/digit_handwritten_recognition) * [凌智视觉模块猫狗分类部署指南](example/special/cat_and_dog_classification) * [凌智视觉模块花卉分类部署指南](example/special/flower_classfication/) - +* [凌智视觉模块口罩佩戴分类模型部署指南](example/vision/maskwear_classfication) ### 👍 目标检测案例 目标检测(Object Detection)是深度学习中计算机视觉领域的重要任务之一,旨在识别图像或视频中所有感兴趣的物体,并准确地定位这些物体的边界框(Bounding Box)。与目标分类不同,目标检测不仅需要预测物体的类别,还需要标注它们在图像中的位置。一般来说,目标检测任务的标注过程比较复杂,适合既需要对目标进行分类,有需要对目标进行定位的场景。 diff --git a/example/special/maskwear_classfication/README.md b/example/special/maskwear_classfication/README.md new file mode 100644 index 0000000..c27f6cd --- /dev/null +++ b/example/special/maskwear_classfication/README.md @@ -0,0 +1,51 @@ +
XMxQdo^@+#Aiq_{s#K4CY(NKMAkOJD&X|U2kD>YFW&S|`i$(d#Y67= zmmz!TGKb~P_BIOn;E^NmlE^#zXE{}`$?+h1YnpX{o=y0l4nTk2d+_Obia3#m5V^f++y9>hzvd!2I z=nRj#ih(@R+CG#X64G)jL8V?>D@4pS7aKzf9+RHf21F06P)ly9{iV!h-;I=#FNcMc z9c@4SB6cRhl3N|<|J~2KJ}~SK>r6p)e5TevC%3U7+r+)fkbJu@3YB(lp8Y8lrR%>) z)Xvk~s@y6CJcK8?XxBIO%Pji6`OAWM)UboxMKMy#Z|L|KXvy!nJH~fSC~tD?Y%;-2 z)M>(Ph-3mUlak%*;CjOgTISc(muiF6m;2|-qkThPaLM=TTuP=i9DR2e|IGXd@%~sZ zV{DN#D>Zj}@Rvm)Xnmnlci)nwaIicj{Pwu+7PhLyED81sV=^B5>iZZP#S7ipU0=OE zIFa2oK5}QR1S{6wL1_(@ETrke2aB}?9y*c%q#Y3<2&Kx$C{vj@I?; ayK=l&?GCX~V`C$oH0+@r1!Sv#J$-q#~%{kwQLQ{4z6I4)!47m^D+n m~Sl z&oKRfer3GT^snVT7{Z4n#WNGK$rRg0(+n5^mukf0x7E98BHI*5WOB7e4P7mLU)gRz zkE8T4PC7XgY+7odTu#rSh4)*YTivM-Nn1quIZ0}#lk?pgmOA`pOIWM0`St^5$=@XZ zR0}4XNt$-Z6iN|_rSHMFyLNT5tMl!L=NuMccd;SIH7+3`NK?H?Q7$1;>(ktdDc4sy zT0PVB&~Y(QNyEa{O7Oe2j%4HO<&s|AL=-8$_-G!ACDM1Swp-JGY{E7(_gDpQ> z6>CFOrC;x^Tz%W#-bbDO_Yz4te K7g8rII!Uv{A9^*Z; z>65eH-2@#-8Y8-ofgm*RPf`@Kq;5n;to@nKJ`d2v(C4Q-Sm+~9v!h+Z>l+HpXV6f% z2I3A%CTXahLoVvbaX7o*bW7F+g9&o0G+5* 7rzZG z*h>Lm1^iTMF3NIR2d?cP$PGaV&eWGkVj_=s@$1n)BF$5UDlXpo20exmI>scNq|JD{ zo; -)u1bfUN!ntzbZ>ys4~wSatVLTqEvD4^)t;{7=dAgtDL?D% z*W_NK1E$4mgJ+%bCh|D51qUy&pzu98xUF5dSEH}HWJ|4hwEa^MDkl8*j3+=5>Ilnf z>`JXcccnj5YtAvMJ(6g^FOfOPTT^HP$4EHnA 9X`+ZzMO&px z&e;#A1W4XRlKd@yu00hH8>}GXs9rE*A_Nt*aMdjvP;c7&v;)&kK#DSrH?5Rajgz|l zCKt^ZXB1-cdDS28&ByH?;~P}t@86j0A6_12g- $|V=X1Gl-DuE$f3-37P^xM5{kE)%j>I!=D)$S$zXDw#O zo^|o JFKoW+t026WQa$fAj0{+&8L{PUZ7@vTvrfp;C@2osm=U)v%cSut zDi}YzeQpVTgw{i;^L2woVVvNo&A%w480lC229#|?9D?AWr~L=O8}lyUi=~93hj~M9 zFPWMl$8`#Ezt5Jhw|uHfu5w9GLn_;X5b2mL6OhrMV=aqquyj`W;j=30d@e>nzk~b! z75D19x~remVW)0Eoux@x1F09+z1RcN&W526WG=8%M;YQpeTP46c=yFuTE}p5O7rE_ z3H!9u6R$owXX~HCBF>TDxo0$>bQPqF#|xDyKaiNc>&IqJ-zA>SN{e22{?IBIpWp^o z7Bqd&+8QZYOVdELPakZSrw|iUI3g!5mO`F1;f)9|h-T h= zGw~MS9(<&752~N0LW%~!D>RP02e9uQS_4KUs<7n6x={JBN{XF^y_KQal;i+pabGLs z$1yE}7WN>^F
41Id`LbYKcRWLZQ_%LDmYJWBs7~p}K^vWJSK+%>Xq9u>;;6%< zqNY0F)C|BPtuUIR_*mCWGCYW5>l;^{clJfOQSWjxLZ0Nuo6aOE$JLcR2%GwWtSfAa z$Cb4$zKqI|K)6?8blyOAxmK=sRwflhvG%vUMT-X{DmGS_xiaY*`(antk2QC&i52X4 zk{=A`1 kTa2v|W!;F6EBrVr5;T*XT8ii=lnoW);gts5Q{YUe&{tq$~M zOb*6=XHnxftWvBKtO?O*EJjUP)XmmO;~e{W#+_W6>hjWJl=TbnN~n&@j_*E~dHclB zkB_8Ih}VX+7 65UmOsxu qb=PR%u`Hir(&+Wt9{2YC6iD|b?b4Bz||I=dP99X>p6)?re zY*AB&I^#lQl#UKtg@xv>ueMRcr{Sj^ySibBwvahVjy ?w(egr}h@)xM{PMbq;K z!^B}+0cF+k=Ny)S`(sgR1fik+jQvm3wV&7FUPJ;<8L8u?7?@wcqrPG8j|qSRfO?4} zOq1Pbw!Y0nx`u(%zR`}+4)*D~@#S%`qN3%fqYvXB2I>aNeT*+{T)uml=k5-OZXPX1 z)fKfaN3o%CN!9jBJ^`VD9$hQx-wa$TqJ;uIJ3o$a*H1kb@k~wg1Vz|u2F4w$FPWMR z8qBo)rqP*F8JV#dQjx_(x}O Fjt$RYaBZ7bf7)t;Sj%*_KDyB3c}-p@A@TUp0T6Cq(qNAWn^*%GOODV zvY`fVZ)VpNZi_FvEOWo#UYzjV1|H!!Ae&c{_HDd3C9)Q4VlD90HJw^sc^&2AQ!o>` z3rsj#$!jyrVvfVIeK`-j*TeM_?Btmjx=~3+TQ}|_8O{0E3u=u-%B>!9PMw)S3wU2> zqMiD4b>y4I(`L3ji^D{9jp@bI;g@bt4dAkWjR49So33-2^-S+84%4?Un=V;=R(8 zFCMVF1ggG733k(O(099Dq(3ttR)Xr-Jt;-Yza$sJ@jkf(I&uUF_%fl!{WiWi9l!`T z|BiHfZCTkH$qWA7SH`~VGq+QLn-N-$mST%P>&r@QS>bBdDLtZL&ICMbpd8j8guv6e zl9kWeesZuzJs*-=PW5v<#i5g$Bt|wymE)Kyq)5e;i&_$LXO bh5ZS7cqrH z{E>ThvQCP;FrzInu3W)Kb|UTHq?(6SX*r3;4rK!W(uysl1A^Feu=iwt_b7$4W^L+% z^fBGe$qA1UT?BW(@l#e;LiA#uq!p%XR`4B~dy6^%3zUxUs-i0Twwp!@_11!BEB^7? z0rHonKIhB$h-{?rUu%<$XLioQ&;^(~&$X6_s8S|Fj|N?gtga54=|(gy%e7~1Q% zO&HY(LpGB18K<~$ON5Y1jAG^_qgqf@fBBIL^iH3FQgfS3ruXjES0A *%)eT^tI zAeg;@?DIT^SHx%DaW^5xNIYSxvFFLhbJQo66eI6@&Ycz~++9>R+PmLvG{5g@XnE^m z9{SZF>&zwb$LC1`jL@>n9m(4RFG){$4sgmw ~QG(W?;Tl=2m*a}h%!9 vuNv~k!vz-xeK8E*|D`%z)9Ej)w4%GLJky<3;Jm_CIvj*pZC>QA% zJI_CM1%&9CPdr(^v}Ov%dG n~jNppo(zs zUeWUqwXy0&82%`{!bxZTdS(Nak{o^zhP&!pjy_g&TwLs(D7qQ_MPO5Hq}%&1^{Zl; zB-ukpW#QJ-2b-IlOdR ToI+jwO@|tZ))>xp5@N&=MftdGLO|cGf4Sn znDTXS>|{JDsT@B0!N$h y uaJ2f$-J!IGH;Z*D4-4aj eQ%;rYYDKb>+$Vt~m% zA+VMg0;!%zqel9p(G3!>jUiQZv`fziSS9%`c6KWUmh8kB_icw?J(E$8mX{@VL5eq{ z=zD`?d=)XOn{9!_6 xx{;?IWIEX z6~ACb2c@AfWgay|rL+lXgoNUvfaq5xJSgLv>FL0WlJ-3;agEo(if`bcXxlM_D&Ov2 zg`is{mXo%W0EIDO7u~hzF&8Z9MV6S|X+#Y309d0rr|_b;_dI*5t+sUU_mKNL^vd|f z2e*FqsXUTaf>fII@>Z3USiWXH<&++kR-c0}{U(k(R#t%lM|^vD;?!Xm(l_EfE(s0s zKl $VZabT-R-Kp8pr+ @t*P_}fldzxik%`udWZ+FG6;&0}Qqq5> zhzE!vx?;MTPro)g{-Ze6c73M^9;gF!lwYiNG8RVAi}bZuU7vbE5!}+pV(qY!dRjb5 zu-az1PKx>nl>Orw+}EgXCxUFU*XNEKx18qiWO|wst8eiy*{CVu-g7(o%a<#Lf#|k@ zCPVXPc|RR|Ao1r)9e%2_nzX0G$YNgD-4*e&?&&9wyBs~Y`}-oM3v2TV8|Sj&zopM| zR0n8dtT4aiRqE>M3Tr^sC>@^tG)n>7&lz&hvGu_(zka<7ONuOBNE@7_UjhOklM|%J zK#bZXr}S%YTDthhDJS(~&zyfViZlK&^1&U8^({5ia)GzW3-l?|Q&KZ#N{M*SOD 0<5OrN#{X_R)` z_XCx6?*NqZj`lI=VL-x^Mn5+!s6%JGIVT2;15l=ut+VA(U&&N~{u7Qb8*4byFl||Z zr0%3qoUbTe&=OyC{yihQblexT`M>IN2&uci6(D2sw+d(I|9~hulw_ZJiqSbdlV>K! zsI3#nkhEN0a`^kTVt*IK!;^WtDZh-|k(?rs-vsRD*}LSzzB;k737CyFuchOpo`A5B zbL{%L$HZ!^#n?<|i3k{MIW`+|v!wv-L>hz#UNQyUSl_X8&=im;-2m`d|9?l+5e*+i zBj}-vNt1Tq>hQq(MhSIRhzOW%X`(bT5%3r)IkRWjHq*(L=9&T_I4M!Z1lo7^q_fF} z27DFalFt4UgrF~S`B4pApVa{O&Bphd=%<072Ocyujt^&$yD$&ewqEjjIFxqVLJ-lQ zv6klvxbyoVWwLA|zCE&Mn;p|i=?k4QADGG54qJ{HDR6&JR9M%>_xqs-oF`gR!leXW z{3mc!mJjityssa3sRCf4x^p+aw~WH4VK*I@XSZ(FZULg-jy+|j JPbF47saC5-CKq6fc=o9)m9(wwvcpOwG zf%Eka@LS?F@^KiaPjv`|)~;clA)e6MO+c9P0FEU$${~v9GlO=^dZG<@SaF_IVn8ql zbNJ?nH*26x(?mhJk>CS9hR1aHLI})z-t}hthefNuH!%Uo+hdOshxx8>N%v=>>7Y8X zP|I=t#ktz2zxBB?^d-|tXG1RexCTsDfog#NcM6eY-NdcD%7&FBr@xuf%#wwJLmRk? zw5KLeG2{ezmv-DwN;}H)0-20D9#sU|mzv8Ml }~d{O&Lnf$BoDzwNG1XL5+*O}op;WUH%EoH{0d_bbk=RTI!< zD&TX3%@Ojjt-+0o^17+6h=dO!XwAa+_YC)P7{;m(e^Yq zW%)=d@ZV9LWmx^K$6mVdTy{m(GW_H >a!ND=w{%4a=20#HD{J-|_mkwe&BzIuLaS1~&Tnw1tN{^SV51krpeD+?L4D&CA6X zL8wqaLJm9VyA)To(l;0I# z)E_J@g?hm?@>%yd*ml_;;CVgU#MKcy2)}Pf*Q5F#2*w>9{OASn>JZK|oO=#sOjgOk zXnDKdDmg!UgCjYQEi$}g9&YbTv~+b9{=kPRHSJr(NIs=;81c;2(aEn{w@}FN2?epz z26w>!BKlr;I8yY)+K26~mnNSVe4o)wp=xnVBTkmk$-OjX1Nw;ca1*YeRO_jhtHtEQ zZ!HtSP^jlRU`0F=4^|8NiHGBh$!k3$3C*e>N@ARm`4p-_BO+2W_-QrNIekJ~11nB8 zI9bp8$)CZr&s|CJ01OBRPm@v-y|TK!HO_j)qC|9srzbB75h-7?k=`JwZR}8iWEla; z!xNs_zO=)APM5Dgg~I|4=NKLE^epFaEtZO<9^pZUYt{Xd^JdRlaQV9aiP~}xn1e?Y z4)qOhC1rw|1ZmDbivPVdz9+7PsFvG~VfR0#O3{h6R~}Ut$WULaGmf g`gvL5mZ0^;s5{%j9a-BV02x)`;LzAtc ziNbn$y#j{jG&~-jhFISVu6nsuBzu$Lqq0)}OL07BkJ6C-WB8gMK~|o8nKdL8n0cM5 z5k9Lae1K4*{A=qs98zyr&&Sdr)|ExMz#Dz;>TnTK?G%;qp|zpBE2)%Ew%T%gp4ClW zR 4;7_4kMAwB5Q(kQg|C!tta0AMjt`%7h5qU2v*Y z#y)oe)hTXpdyOp<`reVG^qOXiA-i}bl#`tj!?(Vs%F7oVtJ?f8mi>%U1pw_{p)x?A zvhgLuiKFLA$G+{^t413xg}U$KS6Py}a~Ii1UvVz_LCI+9th|+aw|=xthFtK#jVolv zmFVmr@ofBmIR~Y-bomIy+#q}!n}@uTgpu#T_d{=@? FPxDi^ZQkMe=H)ZdHmLGPXb4#tyT;oh|?$Xj1U#q_ewrFaV?s|+KX65Fwo`KIFF zUL=yU??ZAmD65<7x9es>Dd1IfE@W^a+rb$Ox2NM%Wsq@h#^!G6s~NzM)N>_!ZgxAN z^DiCxM(09~gHa+5rS?i9N)3_O>SQZrDw&6$7F2Too|r#` BGh4Zk%u9DsQcynETB8M4~~e=QY2U(CdzO#4Wcrm>#g^XOj)b z7RA4PnAJyrM5KWlU{GQf=dl+>6@VT(?p6s$fd$=}vBwghj*WpF DK fz|BKn)BC6-UJ1&m(iGm7g`c EggjokH?@&%oGMv|PHpaQ7g+EJ EWSg= zRriv?xXuRHlm5qdZ#%>i{k6si8Fsj{BRRjgskq|;cs}Lp>LiF1frY=iZ6Vi^;cv8@ zuoL_vptGaHoAXPyvx-1TDr%7o0RMn0&$EDaqj(wpNd52TiqLAAN#aspi_r7+0mf&i z7rvja)v0OzlGFA*;8Krg>$i0s$GY8pYzu1E+x{dA2G>Gk4!(%~hg3%j6N&h_R$tPI zpdRk@5Bb{r1ICa>dPIrx*Y_ Ypgn!d7`0y^QR7~J)i<~iZEqckYr{khv&dSb| zZ2kIH1|^efV8df7^2qM0lA7M@D!SGL?9y*z=b3|IlKOqU*0* !8qbwp9Zdg_3Q$ fJv7#pE$klozo$ z+J~D`7ho8$6^jl*n+QdM|0>o2`;qWpXDdod` C(G4L*P zJzhx!cjL&=%Be!dgiXIKOxVzcg#Y)oJyFL&(CZNhg@PMXt>uqokzd*6nEpA@m<*b2 zi3A#5wh&hYa);&WDO@PZG+@e1`ruymL#3yNa}Qr?WfJpmAzD=#WQ>Mh#*Oxc<+4kV ztMR`WJ#fbPc4Z^gTzKl&We0jDXUu5Rq?|k>MG>l5A kF_V-9yWd@X}-1R>9~ilUMJCu2H-VHj>UT!sghVOwpf{#bs0OZb4h)eMn4D;Y&;u zn7@S8Qw*i~PI6t@=iGb;NKZ07*x6(`jT`6gkF~?{E~#A?^^9&y%Gx93O=5eRdmJv| zC1ZW?o%}1Z&UUt=d6Md(m*oY(+Uub*fAJ~J9 f6g6kKIs=tml8J zgI*+|CTtZ`ddrty2FD@6Q!03`2|^-Wg@@S(D?d~z+>mom`DkRxHi9apP?xYCO?=2T zjdCGPURQcvzB8p(&z)owC2YEb^F1E0S^w4{gOWw?rjqSb8}{!j4|0_@#BC;)3jdZ> zv5`eReANFGmv!8XD4c(GA)1{Qu=^XfzQIny-{+%56zf&|HlLXg^`lATJom$Ct=d@s z2k%5;AhRW^YVS6e0MuGJp8eX(yV)=-shi{zEg_-fs#z<)wgI^Lftb b%l%{4}1l79X{~Xm`V5E#e)D!_KSeH z*H}9j4k1!n%kc^_8R>MkcT#HbEub9EvFU)C4HA{ZAP!i1ACf;O>yu`%ddh&M#}|pu zp^4DnPviZhQ+@PAUS}s1ImF{p(gYVd%N{$uyPe>#2p=%6FV?_^V32ZtM*pdft}ifd zpEkvJ(Fcw>%cBr#+a_&cfX>8gmYZpoQ3weN4GQ$P@~5p$<`u)?Vb*o4>s#WX$4BX> zr3haaa-w(Ooi-)a+-lI)2v3C0$c%9{;4%=OWDcC4J!beE1vX@U;TTwE#P48C%#~qA z=%QLQIyG|Dd;aQn-*#`|fzgrDHxbc}EMG}!%khCcQ*4OT(@W>uUceJ!h_>mPn%<Q`FwITASFT zv1)HxvncKRyYJ_`?{mNBIR11J=Q`i(`hMn3otPQbFp5V9J;BzI34Z|-`>4dn+p)#c zc`I<%dZ2T)&`Ivz@i!*zf8XVzPszk`lo&GY1oG`*|I|}JynLazyZ>C!UtFpJd(xtx zTGz_6b3^ITXsx%tqGKbih5s7IM31wqOoZbG!<{~o8=AB2z#YG67VfnPyK@h(@D2sC z%)6Z1)MrsL5GUzU<_F2WjJ?WPr;2=@O5rTOhfl?@d`&GYTSshHARox`C0#pTkM@$E z=?t=I#N)bcQ1lKYw*+3#*BE5nj>$89bDVi^I-fzeXh91pDQORBIhXle3Vd7fogGJ! z+0HAG`25pV)9Z- 5M$=H<&WO#7g<>fOm5Ycz=Y5*=S}6Pi-zA= i6uI>8sDk1~AZonhS|58dTcG0`}W2?cVAw z?Z5`J5AU*1#tkVekXU;|Y5FyaORIboiV2x>#KKODP}l0VK2uF&1lm$js@az|I(T z7eS?Wp{o%LPl}&+Kij#QO<8W)N@UJb$~L{xp`YimaY1BwVkq_AW``h7t2lM)#}xhz zvvgkN_WZB#CfR~16ErH&IeP!4sI17dr4JT^hNt%Bs%aUH9zVWl*pkXG2P3w* z66B2rA>bLIj;VqWhPQU#V@^N~T7%`x9J^V-w_R7 9-Z5RH+}DNS-a0emh#c zL7p873rK#|8SO`|ZEZe8=e5a;SrgW8yhV>roRfCWGzT6ZZO3|qR$pKL-kziSqmm$U zPfuZo10UhFuD}U$bU{_#037x~3(t5rYN %q^sDq9}_|lNaQB*zJN8H2PQ!9 zv(uk2EN&cS$|7LZ=wG}P?D)L+nO)kPXrkt!gO=^r?p4gVJvGahdV_SjFC9MzA$|Hv z)KBv4CVyi`2I$>g%+}8O#%-tBOR9^SbH1YJWZACI>J9;t2#4 8;FC zIulV_vxQcGd$h)Tc+nFnCbw!T^r91DZ(QZ|;I `Mz?!~GIWQ>!Ifxh zXVEXP=8#yMQ9Cj6*}Pl|ef=@2Bp6k)-dU0^Gh(W+!dZvSOk~Q2k!V&z=4^F0xn^AR zRdK+@;a*edmy0NywI9 =nO_at6KpeK-*LUZ=Bp|OFu}k%yS`!m?2meD0uBMh| z@OnszSasYT>V_?8b$sy+cTBjh03*hTp;fN$AHsZ_-U5}AL(H5lbIMQ3Y~l>sa+QlR zMNwpGDsR1pR`!Y|GhJJ<4xRneI!t~zIoCcLwp!a~2y-P>{%QC}Gn*mbIWy6oD=-1{ zfctu^DaG((KR){y@$7@85IbutXny${)d#Jj X~X|NUe}-gB H+O($nE(1^0s_ETK4W1$gHZGY|LWl9Vi{ z$*5iHcO-B#cM|)*ixDK2z&7>jP1y +uV5$Q%Tl>KqkKvRVa z-s0O>TNYSa7h3 RmjHT7Vst~)l44Jch>>DpBi;9*8 -&XN^9IhsQFzq=0Z%zF2>cr>n zRSkIu6i5IehIDuNVi86AkN%g)2k)MZac*pWWms_7y2ejS(^=Q5Dx8B$;}gdO5vF~1 zWHIhDy^|Lj bN^E5z42zJ}NF#4(*(Y}-TQz>8qFa>eRjUmghP zq(_*ht3=QHPltc}6T@(xG ^sO537hXU+ zd^+C}(lLZBPP L4AiKEX0i|#&OsRqT$ygYjn5QNyvyPd|ht?0Np1{KBQ6_K<3yD2WsmFgR!40rhH z%E(b(bpbTV+XU%y*JUSzE`h*%m$Fw >g +H z%_Bi)XSgf~gc3oZM2^xgu#SQNAi$@O4BPZlul;FV#!8xMfGj` TnZ;MsG>ux?vw^%POUD+n{__`=;V*+?vd4B*t zP(jD({*si9)2y8UHP~AUhj|5Wx=WTl34~J*0i?l~!m2>N|3jt}gbkuJhFW~&M=!ox zdFaKz0GmL}pu4_>stdDcJ4$u=Jt)~IlXJYXDW(It?V+j|pw99St@-HYjE1ni3xB3W z(;1nq_C1advB%EajkTaE>(0w!{uLW--r~lu>I6k7k 7S*er|yXkw^9DM(iP zh;bU)z*0mgF}D2od{9KeDr~*&eV_XFcb|W{%?KxgqN}82>wQFHqV8wtZ%NDDoxt&> zA5szu^71Sxe3QEpCd9AMApWWFEw82Airt?yCC0>o;*j?I@k+VbdVC9E9!G-wL7!_! zC#0dG?Dws$47{S*An&@3MQ;f+?F@l&8Q;lb-PYXlzDaI}`zvH=_}6EPKv=RKRlf4@ z=-Dgpv66{)${_%!1m>2VV90LCy4s0KqT6#N_~hEg@N+7wZ@dF1)n<{@;}aWT&x{Uq z$;A7*O3;Q|LC4G&=zNQUJXH33yPSNBf?^v~R_)i#)-~?@!5W~?$wkz$?`&P)texCt z)e_0*0O`Fi8*|6YZq`O*9A5Q``uGJo83zS6NZv}cdU)<(AGO% u9hI|u%BT~_P- z+k@MvCIy-68OIXcZkS_Ws)IHVf-SFt9IL=$$~kd=>3#ketaK_joKsA{*qZuByH;{j z(b}JF(%6iio>LwEq#hLhy!6eeaTy8)E+1{@Rp^l5yaOV*!zO(9A=(&^!$N+|)=SLZ zQ;z8=PtM2V2`2Ay3A5TV$e5x0orksnbTTu|uM04|bz9lzv j)Cf%{K{ zZ&i+{O7`#>4ii#KrdX&sHPZ;=S~YYHY96sc?=FAVIQb+OE$_q6G@SHBhv|dcp8{`$ zHY|^tDN~Qnd&fdCM7AwVvaOzE{D2V|P#K&mz+)Zc`p7ERcFxZQ=vA8|iGXN;9G<)< zGZjbb(kJvyyG|q0mCCAGS|=MBc+KFo+sk*(@Z80g7o1QH8?w2z9@N?RSAJ+S@@RZk zv_ByM!n~pJhQ2`w@W~5LuJ9K*_ns@Mr$6C)?-gE+Y0kBEgVM+XvRt6@L@c$bJ6z=b zwa_2)SsvrP24x#tPv)NK=D|xlYy~OwhuIr4Kn4<$peMO!hn;Hot={UL=)PKIA2>PZ zlTrdUgx*0>U*A`Lubt5jD4N{4Y(72>PR;PG-pzRB!Bg7mt*c&)7OD^lr{RN&uAGg~ zDcV-T>NuAo(b-Q-5R(?YDL1!|Vj%Xl=(rU6I9lO61onYX zL!qfWvIvmu(e}$DmXn^$d1cE-f5)_(*1Aod8cW_x>K9Kf-DS?Jb 4Tf9kHWv7OsA3KKlEO9<^9vcF+?I#Q@HT@ ?9=_^yO8gP@3+ z_qWliF4el`u1~>}p~c^Gk5|>Y<1_^9ovI4>v|VP6Vk9XTiyGQCl=;kP^;cxes+@J& zED{?Vj#3&~`ei{8p&gyC{HlXnI| u~gR4tz3nix+WdU9-R-}V*>A0J6y86bmtQk=T(q>baQcIdx!9rLl{{4r1{ zuNb<2I_!@Pt0)Lr94erd;4KV&S>7N{T|`In;BJ-->fr3
OWEnYz@ zl^o5 wJ7L&EDRu8 ikU8wWYPpiWYPfVwBG0v~*Ui%L%%#jRM zzzjh4cZZjR3_wY`#}GiNZmJ6JITsN00=zLjtWYI!X`88I2;_$R^#0`rJwYM$qpCgA zj1S@H SDjiSA&FfcW|_+8&@nIa$y%Y@q)i!e6|dy;qJ 8T6f}dk=Zz-!m|B<&D;dl^3>72Hu;b;;AEUI1-crlk|4sWL;U2VD8$u+(` z$Hsd)Ik_0tp}}4o+z#6-($NLU?_aF|tHHR6|EF|?FUwbh3FW{4u5T49%H5V=N9h)Q z1`J2^L?Jj5Fi-;NiK*NEEpyi9^ 4wG3J#TTy3l#`P*~DY z<%XU$ |P%I&LYv-vf*VfRJp zw4&GK8QJIMe@nYn3O_EFa|Oo!fg8d)Of3Q>ByYWbcj;Ia6a!nW7KWSXp6s6>5_L!J zgozy$$pro5NNXCqXQdc$8~nOr_kqmG7GfR-2Ed#GOw00$-cIeyR6tgnPb!;BYO((( z7coC4H*YR~Ccf)rpEkbQitGS?zzz~WiPrn9bq^>~!i?wG!-O@Z2t(F3KKMFn+f&f8 zRg~C?rd~(`NvhQFAMS6!O*ECGDHO0}<^Y@Q&h`6J@=()msglqyxE?9WFQKjNLrWX_ zzYpIOlFFKF_XER*!I96gOwuFt_0`5;M%h?F=&9_F(CZuA`4pc?*Qg`<&7Vz5r<3c0 zui+cVxZSHw;?EyQMWGW%90!rg$S1!g8x$AcjP&g+lmmAyLYtf?60~jqA*Q|ogVnpc zVh1xzwHDack%8Nbr)l=AC3vq6=<+}z3`}`ByX?&S>`cF>b{qi8KOYn-@%S>plgw@V za^pGwq>VfM=gz>h V-L=Q^~zvX2; zxdUBDpPzKu@(wD2+t8S1>Y(WI*_n3b#>w;enwTOY0^bp2-t9O@Hz=YmG0knYx##H# zR1OEeb2~0ogk;>NL$l3~Mj33)Wo^8F+x&oDcI#)fITF5)Aq56mT{iJ&^86n=kB7%( zY-sm(*cq8~3&=%E43UPIuTTvXgg1DUEo#~hJEUDK7_*3 Ty(Q2KO!pH =QC(L-qX6?`g#D@SVBDqVxSg$)oDK=Q%_EVi zV4=443B7iu#YK;`wi?x0K>T)8;eDRfjs0e2@qK6GY-8urlS8brR30x|Noxh 9f*{v+Ggwh*h)M(S7fv~KD)0%tp&Srs`yN0J8Nk~hm} z@d8-0SLv$V*VOsu9U_P(b(A$_VmOx|QbfcU&C{t9z zILz~w EtuNE#8y|VaseW0!Nrw|VXiSh|zem3W8z|sDz^sR>|9b|P^j|n5Po0feT{?X(9 zc;<`ir=!mM>OT^vFZox1-Z; )aPz4ql3Z++^|2t )h_~__w+UhaV z)AfGgVyU5)i_6d*AFD%6`u9_FM2K{-GLkONyVCli0-MFG1n7LiK_ 7S8OlkLxTFA0~>w&>3VTpF`?ns;NS#KCiQe>=W^#}jg|Up z12 =)9B-)iHVEu< >uzLT1`g?f2V{_NIH`0|&Zf`l_`?Y3y3|zPYD1pT SIm4akN)#TUE%?(dJ3 z!jQ9{dKm6_wz>>YFwdik-G0zZstF)CTuICx-hBH1%`57KbO|8qipjfOb6~$lVEp{f z`=T(6+3DmFA5YCYI#&-N6_4NG7)V22siK}>SyNxP@#nqm`f~dh+Iw=EZ*960SVhW4 zX$gj-Mi^B-Il#KLxpc^~36yYe3D0o0vM>5AxF&b$JToPrRc|r7-L|p@jhwYhf9Ytl zGy*HX4p|&O{d{MpMq_f{PW3gz)3Ly0In_&j9re9(JDB#brz8}JlTVj`FeGGYHn*l@ zYsf#$92)$Ze~vN7;-CN}6|;DYH8RhD+`4F3W-Kepk $vbR~ gg*JoEGFy2E&+eLst6KHW(J j2;AwdxZAy=z~n{*LR z+uSg(#*f)zn0dvIIE#Ur5Q{U-*9q)Jg+-!IZDGh(+ce7=!n5{k=h5d=>+p3G)10qq zbD^z^evL{7-##3fh`yNKzw1yF<@IX -sCjb68y4#eIp=3N$!kdSYruYEkO3Ya=>Q*g>pCyR^|rNGG2=McNGpOIrb% z!DUf2mmLnTy=N{_;}`EH`hvXu`xlC77RlFeI8)Ly#v^>Qqay&LRVFK;JrvDxddc=M zkpLPG>u+P}0-5{sd}_~PZdl^~DQLn&-83ftZ~jFxTn@s0H2+{tRcq|Pvg)8J3v8Ch zLj<-k-ea#3R}0D+izA`N8OEudfg@7r)+>X^ZRk4cZ)bRa?z_!$z5H#CUUZ*rd{^#t z-+M@~<7MN)^e6DA&RL1z*!iEQ7hAwacJWsjb$E!yo}Zt$x3@>Fe=DBK80ORet*_UW zMjcLL8sBA_^M@3{*w*Bs qMwDGzzD#ha7f`{$^#eC%hn!=*E+BC_EaH3-8dqyFgPtC5DMMf0WJDbtX zS@Qs6=;a64tK>A_;cInfHIZln7MwF#wf{YXh68L7juu{P=ufq~uJK2|o6uI;AS;X9 z`GaV8g+I9(g?8Ekdfl$vqkbnD&lHGY*i6=y@%Jx7Tx8ZaBfh9b3BoVL&`HFEKK!84 zvw_F0?*T7p_wKQ6Z`%C8bP@RF{LGrlp>pkm<7u0x)3dvBTmf2mPwUWU0|8831<%=F zw?yeoU>Ge=Jp3}{ZojD9jL*lH+w@6^uAAwh&KH`90*rgf*`Zh#d~9jD39(2gWfY_r zdWGBb50$73dfb{5DED9waJ~mCS=hi?VY73pzdn|CIzIPtwGDCsvFh8MT-ml*Zr<_v zF(Fa0J12QkyKM*C8s9~@^h_h7$k1IdC$||Rn7NI`^1P|&PD_o-tla#9yv%ooW+H>g zi0|a@w-0u@?1F#)9?7ZnMFcVjn)&9N+PDow>;2-jDEgjVgZ86mo247KLww?{WLcD3 z{HW6X;CMqvW@dbFHbPH4N9J`Qgo(96klg9v7Uqkaz5-yk60=Gc;RtClt5PD1hNvOV z_x21+Ta3Cn?hQBWX)oo1Y8q>6=UpQqCdMWx0T|vIFs&wVSIftuIW*?D$3)~ks!AfX z`Q;WC;X2iil Sx~1u zJFT{4KZLGEb2`Yn2UQ?NO2TsoU1^$SI-Btp6MNR*JGr__N=V2oDN5om5+S^XKm@tZ zIQE(Hk8+a})iT(;cUO(vZf!#C|Ju6#hWNg-d|9flFW<$n&O1Js-L16tf3d1MG||H! zUvJ7KMLc{(0k_?-_UmWH7ja==c@(5Ql;aLDrHA~?sVtKdng_ghmET?FJnM5*N|yhy z?4Pk69kB^Uc0G{7Tx=5?`|o^{b$1o*t>rlA9OLqk&Y6|xkem)0_n*R(juI(}IYQx^ z-Ypar+mEME;8~_bvU7ZrR~1l^SKAI)T*cF?$tH5nBEze|V`-uFe-DGowTi1u`AQ0z zZp1`xu25SwfKcxDZQ;Ew6LtDpHrf})0q-$W6S71@JP3uIqyK0M{qH3u!Ny`f9Q#N* zYO~F_fngSVWR-l+I;|oc%HhW7VmEUXMkI^ne8{lUw4A Z z#I%HI``|9?tV4CABwwX+YgA-nkMdDd$CRL(2m_b(nu|aDgV&UijqSac$VZQE${Jp7 z!I+^Nyk^Qj@1}~ *U_7UofFRL&X+?&V5#bSi^(}Qrhc{@@ zA9YY0iAD>&)Qnw1dKn^d>}mJO+xDozj;lVn_I!(UuJDHM%CL&kD{g8qH(^R^XxhY{ z_?o5D?V0 JM}f-`tVDnfKJlNZleBoi z&v);j0*0(5U#<6cst*eZ3K5oLizfg-0`8U KzI#N^$q@jjhd#^u8btq!~S z_8Qk2Cp?SncPtMQkWR3PQI|?Xaml&8zU#i(Es!RFLjHapX8*c!!m=-6)hF14;TGGF zm47Qw gSPM>7?Z5JGC#sxKv*CF%1qdMN?B9xNCD)6XG>F-?v=~`e z;YkdS8@GRzs<@ggWVYZo`(X7si#+=hywXNhw1K|J3#VA+GkBDRmx*)*TXZGyoTe9I&uV_QDl|cQikbHJA8P` zkJ9d~!`X4AJeQ Grn-1Aj^Lr<9Gp>4XXePC+kj=N`_!ALlScDKjY<(0zyq@Hc=<7O@Nm>S4Ig>W74 zi0Bz?b;XgJ26+d3a125Fb7d?mxc^<*zMS(vKjvVa1u`7g=sGfeTDC?VCCl9fUIihd zc$`1$t5q$S{r_HtVm9!}%|s7{Tg7fbcGk28h_@4QgKSabs7>WVPo^HM RNR8c0Dg0)5<*RpJ&}M34+Jha(pZ^M?!0novQN^C`{iM{yM*M}_ z^;&!ca-n4e$tbWdwS*W%S-V0%Fxy*1zg=Evq2=*_=bf#)8_t##$=l&wNy~4PNQfwH zCf`UbV$9%WU(Ykni}UmXStQ+I*s~~lV`!5>BRLZ@jRVG4IT}^ xx){1@Hjjl#?e+O)2LY>rXzBcw9Y&Z-MN+SF=lqXwb0J; z!ml<0n|yj;*4}fXy9HZA`W6P2t9>*RsuF%?oUP5GP#TZZ8n+}JWV)7+j`Ks{qI3>H zfTN^~cYkE~x`fjPXkh+|g8mi~wb3#4E;cp=Z+4-|H*eG%cmS)nA|tcSyjLlIGuTFU zrPg%dl}7Mid;{Pgl%K+Nq2wu6piu zxYPT1jLezRR2{mWn$g|PHYgy(#n! pYtX0&*b?B;I7N zTiEvk=}_w(FY2wnz4U`zOP>wdm53Awz23JO={&nYY0!{qzr}*d&lc7iAM7N?i2O7= z9sNH7<<^`aVYCD6ND;#}R6cvOtv*t{k57=l9AHmveMOG2`Z%CjgWi~Jhs&z>?YCr6 zfwdo5e%_nQT3E_%1QhO)?pJ9jZh-%iPdy_la{w$e@9lg8sULc5_FAY7ZHx@Bw4<~e z$PyNlEqCB7?{qUWnAygsxdE!Y?BE6BxSlwl>bs1*O5Qb%2Sfi;#iW`<2DDwDrO3{e zSfJi^@MkG-`kdG2p?wmM_dP%9t}~D0?uGreJuD105B?i<<>hV1wIF|gj}Zw_L3J?u zIlQKdknd8H5DC%8GK8~vd6fO>$Pk6GK;JbdZRY$PtqB-FKFi|eQwAHk_~HqKd%d_{ zc)fcS6Ts8hMK9lM#Baj6;vkkSPLcMuRIr)Wv$fXnvy`?@QSSpX`38r&j@CO5K0Uij zLL!PpxDPU%mVPi3u_-4|7Q#fjVPhT@7z;|^nHsM=ChHjteA{ *L zWdqV^fw&hXq(^XRdVjXD$YwUeUiPZivWgKE4fwaASp)XE`QE9#HDdVV`Xyf{zE2-m z^3(LDM1gn>5|t#Okf|lb=^62HMQMU&A~=oIU^e4pNqNUrvFIQ4c_)2HO^Mo6GPU)( zQ;O#3*yoHS&v~L5d6?t-BdTlc?g-g_iEZ&D3Qtf}1jwh?n7fq{Lk{rptdlL2$x^=3 zuA9N`I_Nhg4esrc*+ x)X4Qy1r0&0U+wt B$jP3LuCru 7S2Kzjn5U=%b?62?@GU-nM~v_7EG~9lkFe=pa^%hbMt}eo?PV3Hs5-} zv7H!l%pu`Qg)2MuQOt)2adlmOn4DrKPv*4>=1iiG_vciZMVTI}D<0R_>$>Mm763d` zNe+s2m#jx?r=&(Zm?qBo*MuQZ%4IHWXRIw#kF}*&xw{svE7oqk8ob5wgksh;6Q*@) z86;Y$mFeX$YA>0u3tFpj;-NuN#yr6ToReaT9)27#zi9ChfCfitW#D*_X+A@q@SD}^ zs9Wy!*M#4`6=&GNoa{neJOfzIa8hzmX{e}#Bze)sg&cLLn-Y>bG*C5OH&itL37-;e zRMNhTxa@;F%4D2hgjPVFkJI#KKE gD`JnBaaDeT2nZ>k!*zdI3mIE8fUpLL%`<2_c>Mj5k@A