From 7efed430992cb5f5cf6374ecfe6a72b39a7ff751 Mon Sep 17 00:00:00 2001 From: wyq Date: Wed, 28 Jun 2023 00:10:47 +0800 Subject: [PATCH] add cond function in linalg package --- README.md | 4 +- meteoinfo-lab/milconfig.xml | 30 +- .../pylib/mipylib/numeric/core/_ndarray.py | 41 +- .../mipylib/numeric/core/fromnumeric$py.class | Bin 13972 -> 13941 bytes .../pylib/mipylib/numeric/core/fromnumeric.py | 10 +- .../mipylib/numeric/core/numeric$py.class | Bin 152553 -> 153563 bytes .../pylib/mipylib/numeric/core/numeric.py | 28 +- .../mipylib/numeric/linalg/linalg$py.class | Bin 21801 -> 29847 bytes .../pylib/mipylib/numeric/linalg/linalg.py | 223 +++- .../pylib/mipylib/plotlib/_axes3dgl$py.class | Bin 104762 -> 105441 bytes .../pylib/mipylib/plotlib/_axes3dgl.py | 13 +- meteoinfo-math/pom.xml | 10 + .../java/org/meteoinfo/math/blas/BLAS.java | 4 +- .../java/org/meteoinfo/math/blas/LAPACK.java | 4 +- .../java/org/meteoinfo/math/blas/mkl/MKL.java | 1062 +++++++++++++++++ .../org/meteoinfo/ndarray/math/ArrayMath.java | 49 +- 16 files changed, 1392 insertions(+), 86 deletions(-) create mode 100644 meteoinfo-math/src/main/java/org/meteoinfo/math/blas/mkl/MKL.java diff --git a/README.md b/README.md index 3cd91f2b..f656cbf4 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ MeteoInfo: GIS and scientific computation environment for meteorological communi [![DOI](https://zenodo.org/badge/172686439.svg)](https://zenodo.org/badge/latestdoi/172686439) [![Project Map](https://sourcespy.com/shield.svg)](https://sourcespy.com/github/meteoinfometeoinfo/) -**MeteoInfo** is an intergrated framework for GIS application (**MeteoInfoMap**), scientific computation and +**MeteoInfo** is an integrated framework for GIS application (**MeteoInfoMap**), scientific computation and visualization environment (**MeteoInfoLab**), especially for meteorological community. **MeteoInfoMap** is a GIS application which enables the user to visualize and analyze @@ -18,8 +18,6 @@ ability of multiple dimensional array calculation and 2D/3D plotting. ![MeteoInfoLab GUI](images/MeteoInfoLab.PNG) -**MeteoInfoLib** is a Java library providing main functions of MeteoInfoMap and MeteoInfoLab. - It requires that Java 8 or greater be installed on your computer. See the http://www.java.com website for a free download of Java if you do not have it already installed. diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index 13d7a0d8..c27edf08 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,36 +1,36 @@ - - - - - - + - - - + + + + + + + + - - - + + + - - - + + + diff --git a/meteoinfo-lab/pylib/mipylib/numeric/core/_ndarray.py b/meteoinfo-lab/pylib/mipylib/numeric/core/_ndarray.py index 5992aaae..b7a38fa0 100644 --- a/meteoinfo-lab/pylib/mipylib/numeric/core/_ndarray.py +++ b/meteoinfo-lab/pylib/mipylib/numeric/core/_ndarray.py @@ -698,6 +698,16 @@ class NDArray(object): else: ArrayMath.setImage(self._array, val) + def conj(self): + """ + Return the complex conjugate, element-wise. + + The complex conjugate of a complex number is obtained by changing the sign of its imaginary part. + + :return: (*array*) Complex conjugate array. + """ + return NDArray(ArrayMath.conj(self._array)) + def min(self, axis=None): """ Get minimum value along an axis. @@ -707,8 +717,13 @@ class NDArray(object): :returns: Minimum values. """ - if isinstance(axis, (list, tuple)) and len(axis) == self.ndim: + if self.ndim == 1: axis = None + elif isinstance(axis, (list, tuple)): + if len(axis) == 1: + axis = axis[0] + elif len(axis) == self.ndim: + axis = None if axis is None: r = ArrayMath.min(self._array) @@ -768,8 +783,13 @@ class NDArray(object): :returns: Maximum values. """ - if isinstance(axis, (list, tuple)) and len(axis) == self.ndim: + if self.ndim == 1: axis = None + elif isinstance(axis, (list, tuple)): + if len(axis) == 1: + axis = axis[0] + elif len(axis) == self.ndim: + axis = None if axis is None: r = ArrayMath.max(self._array) @@ -787,12 +807,27 @@ class NDArray(object): returns: (*array_like*) Sum result """ - if isinstance(axis, (list, tuple)) and len(axis) == self.ndim: + if self.ndim == 1: axis = None + elif isinstance(axis, (list, tuple)): + if len(axis) == 1: + axis = axis[0] + elif len(axis) == self.ndim: + axis = None if axis is None: return ArrayMath.sum(self._array) else: + if isinstance(axis, (list, tuple)): + aa = [] + for a in axis: + if a < 0: + a = self.ndim + a + aa.append(a) + axis = aa + else: + if axis < 0: + axis = self.ndim + axis r = ArrayMath.sum(self._array, axis) return NDArray(r) diff --git a/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric$py.class b/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric$py.class index 078a2375260caed25ea2e5f8829fd38a22a7f7ed..c6222f249d3eaa47e740ac8534e48476f01de3a8 100644 GIT binary patch delta 296 zcmYk1F-yci5QX37vTjUw=~A3UK!nUH9H_-LqJ<#BHG*;|$YFbmAlTU-2%5{N5d0Ay z2G_z`Ed3k)0UJT$tc}9V@Uic`8TRJ*b2ROC^!WRJTh*(b<#=`tF$~Z;sm~Txf?>;H zKiP0Nv=jcA9EO|2}nXp6Ya980&9M|G_K|Xjy{~4PSivGn5 zUeA}*girHKmCQNK7h?B@hn`OLTT{sf{=MP%S~C7d#7#Gw6Xn(`{;5yF6OI)x7+h7a&PtgDmX{TLCbRu0!d*=F;-s2yJ6-fgC delta 187 zcmeyGGbML}p)6~g^yA4oo6TfRxH#h&xER<^Xnw+93IeC>1H!r&+%Ql9Y zj8-h#f((6=59#PI_D`O#A!%~1cJ!I^=LouQVUfrXth5@@>) h5HT?PVhEe;q#Z0ck%56>5)e-Y;wd2Z=4IOFxd7TFGeH0V diff --git a/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric.py b/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric.py index d4c9b06f..35572adf 100644 --- a/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric.py +++ b/meteoinfo-lab/pylib/mipylib/numeric/core/fromnumeric.py @@ -138,15 +138,15 @@ def sum(x, axis=None): r = ArrayMath.sum(x.asarray()) return r else: - r = ArrayMath.sum(x.asarray(), axis) - if type(x) is NDArray: - return NDArray(r) - else: + r = x.sum(axis) + if isinstance(x, DimArray): dims = [] for i in range(0, x.ndim): if i != axis: dims.append(x.dims[i]) - return DimArray(NDArray(r), dims, x.fill_value, x.proj) + return DimArray(r, dims, x.fill_value, x.proj) + else: + return r def prod(x, axis=None): diff --git a/meteoinfo-lab/pylib/mipylib/numeric/core/numeric$py.class b/meteoinfo-lab/pylib/mipylib/numeric/core/numeric$py.class index 2206520e5387dbd80e26d68f82324f04221c1f1f..86f678c0f0faf08de489a1e5d360880fd44ac1f2 100644 GIT binary patch literal 153563 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 O;V0pz#e*-xuKxj{nV0$i literal 152553 zcmeEv3t(JFb@tx758ap>NGu2;ycV)0vMtHl)x(yZ1ROgKhFCGS2?1lIm3AeqE$u41 zD_aT;g#v}r0Oe5%El{3?mPZTa)dDRA3Y7BGQu?5@KhOf@Stx~{0xk6azH?^g-n+Y! zofOgsn4mj*?>x?&IdjgLGiT0x_y@oD`>9l_6ij=m^n78&OC24!zR_IRxw76~Y}9wo zHJa6(N7fHE%gfchT_27wHml{zv39v#-Mg*p>yh;vW=~b;+Izj!JvXSbFO~LEeXVMH zsaCIgsm#EkZ8wIgY$~@Ul}Yt^sqEZxxxE;qF7Q(QomJG9SNc+S@lqEc(P*}BUQWtf0qc3$|FO^%a zt+s1RLF)cqYKwOJV6(C8r5@V@t`oNl6(=?xzA*KG)B}l&%Q05<)#cf06F~nIdem5{ zHp}fsGe}+GrS394J-b?4YS-%1(?Mz*y2w5Zb0~t;4s`Lb4CN5IaiFm}y97M!w3)P5 zMO3-Jyi~1M%BXVGOKruN4=-2S)kdv8-xvl0%Ry=!xvp#0DhK4(E>yu^`KagVcU6b=RqC zd;fuhtmhD53sTp5se2>~vl{}`bs%H|-ytt`Sqb2&&o5>*~q-``kXS*orDsYhWrrYr6B6?}R$ za8;=-8>mm9wj=8ircV-+wPn*0@QVwNtS3-i26-&k+C*=Vn!`XGS&!iwvon}>C|N+> zsRO32nwPpyvRiYFdaJQi9X=&oC`g?KEDw{k_6#K7w@_`@!Iiw!a1Y|&bZR$JE1Z)z zdny0Op&-@rQkSCn4wk2LxG%LTl#Ry9?RIl|I!v8q=`*P{lwPR?saw31cWsdRX*|&F zCwQrgkKAzV(D6ezUORng>foWNL&qN-q@D=w3K9-dKa0dvc`8Uf1&MmO9;AK_Gh?bz zN7<)ydR5Ps*J_wv&+t;0bOUvLt<~;J-G(s(Pb!dI-)~@(nY-=Ao?TPM*q8c6FBQ&% ze;lfV7uBnk^GBs&tzqi9spoA;Jty^ibfP@h0NgJ?zsj>nypV|{@TyMyri%4oFQyI4iyEGIiyQL z>I3YQCO^dX&QzzD8+FRR4>Q{tFk52lBlxxmLTD^NDhH{LViaeajdEpWGYf&2 z1JH{Y*tyezhulG}QmwaZfW_N_exl2@IrP&D`H9nJ1!L>oRX*_-TDXWm47qt*<%iO~ zcXt+Q&DZLX{egE08m)o2<^%6iNfJ@sWs;`_Z38mUyAOT=&#jg697@~|onC4H$UO2R zQ5*@p2crK-)=*%&4(xda7HKS)A`b$Nm&*%iakYXP22cYL;%x_9NYs{BmjiDQI9aZ; z^bIl<~lqU6MZx0^*8XR5-&ygjHEj1Abj z64{v2QS`0`_>EPdEASqI22l@ym2vbl7r?s0$QF*h`o&^4mOLDc2 zF5ZYPwyJZ1cN2=XY76M>WB7`_eyqHzF9zP@P{1@dgSK1CjYfNMJn&}SkIBHRFgqEQ zHxH0nD~nZ#UT=|EZeFccZ^4gKtVbA@x5V5xGk2Z2Z(c1k_X^u?1Fj|z(>hyTDX$Ti zZDekjF&Vrw$Ur9It;s6_cMDTB$Y1ZLf$}!kYiosU*Lwn5!_Spl0`G~)bA}Vm`&n?Y z)p`?*Woep|8FcX!)Om)K_j7>cjF|^dM`2DbwEhgBUy^1hZ}U?3U#_iy8O-j4YFKU7 z=5)1_I}NK*#)VL_i{i|6Zt{bRe;L6g_9VVs&k6I3N=Dk&?-ak*G1FtUV{5_{*k1yuo`Tv>flZFgo+oOOPy3 z(!4{V_a^VnM8oeuvFK6r{zj#`H}qcVz4Zc&_S?MFscx{{vT&0T+^Fgv@1wPr_gwEC zTfCQgzbj+nB)a!bsKK?kur8EB@7)UG?_&xiz6IWUFh7nrS239HMVB8Qc<%@K9|VEm z%?D65R5U6~3sua^`}H15^BtJ@koU)1K!_g(8bx&|jC$!;Zpq`{ek`5a)qJ_0mk-18 zQvU2&fiAS1Z^+_#Pkvy#WRMBBeOrECUKQc|5>$YEqnWSN7NB%5nfzLhsY3L6)^Gr{ zdK@}F$}^d#z8`OEuCcPte6v`PBF~}ud>a_Z4^*o2<<+J3w!wURv0CRJ(@ehB%A-)N zT1hn6XhJ1mMXh!d^&DFPr=DMza?91_Msq#CR9*+`&o|HlDvNd9fZST0ZJbVm!oe^A z;Oo#FsIgUT<O1X{lLluTsa=CSBqA zMsp4?+YQ!K&d-)xRc*lJa~Mc;vtEG&B#=-6TsLcgiG4D{F|R9S_7rQXYP|)H!wls% zb2%s>yMSPbCevVRv9Y>T$uEK_4{y;SQqWs$&n%hH<~~C=c05{G^S0*KSrLI~3Fa|8 z`DXRz)mpO(2-+>}1d$W}C#_t&R_2PZB|o&?JyDw3ufFm3Saj-NvdUBh5=O-CP zzRs5h^YIT+nbP?1L{|a6j8!A`9mXn^XsYL-F~m?8gJw@G-2oXvJ2{v?F*-PQGFGzz z@I-NV1TYSdoOGbGd>;AvVGJKkp}_k;P^_k*Qi)ng4xAp?_L$K7Q}55n7e59j!ATQ% zANNv|-Apddo6o^#|C06nmGF{H*<0#j?-P^@f8(W&ZQkG})olDJ^xok8EkXG^7&qDt zV<6Zk77XuGJxzGWS3xm--e-UdGNZuz2WlC78F-)D;{82kdm84P!21Fc(+f~tCb}Va z@?cXueaZVWf%}S#3S=o%=w+cfIcskbgs`u^52%{C!ro)DFG>kjnfNkf7^Y z-$$lt@T}0!=(nuMbejGEyWb~O`2m!o^2!R#UV*;_>c#XlGt{eV04MZA&2%9$;f-Xv zTj+g6#Fu|D)D5%ND2#cjR|#3~U#!lZ&e!JiwfYKKt;i8FY%6OhHPBh*22#W@-!gfO z=BE^h6_4kQ@gvF$EF6%TOqy+y`E1m#RucGk5B+|H{}K!*h7JFN(Wn5+-ZQlaMmFYS z7NmrHiv!K_gxlGg2o3AY^UDT+$0|nl*snx0fq$>izf?iJH-=7a6om;d8wdnPMX2Pf zXR7t3b?{uQ(kl5g<)u{-PwmATm~?)jhR?tW#uT5Vocy^_^Fi0oFI4L^q@wWInv^0I z7t2fYL$I($W%DyLC!lCH+k<(m{#Q=U%;X2qgb2F)S;*d&ND9T#e7Th$83w;+Q!2uY zKyJ)~MoC>1s5Ik&F+lWa^@rLd!`W&Zuuvyb#p__cu|i$GOts}0`$vImkv*J0F65X%g@|c@A>*WQQ3NojQFqW$RwNk+@QCKJ z8VXP!0f1(&tyeZ_w9-I>#D@+9Wt(k0(p4}V)fHyRw;Ic)@A3++XMx*aOm_Kr?fW1UK3 z6=cmOFl=Y57+XP0YdC)pLj@yS9(9q;NS!2zn(7d29YB*nDxd)_k6ab)vyFVYathN0 zKx=)2AOzHOqPC-WGC#yhPt-u*I)Y|gT(5|de5-Z~SWPQm9Hzb+p~z4X)1!-fYR`|0zgs z|3QFxrLhwD0}$3Spn<=gVz|X23;e;*zpt`=Si~+crs={i&;KRC^Bv&(u~Bk-1WYEu zNbWHIGBtuFvOaJE(D0OO)RAafs@ap_T0t|MKcFi+(((AnaQ-l7h@)GuZu0$l6$W8Q zuf$~G+)G0J-=06Xeo11_k9dj|2e1el@0v4Q8DWWmPlNgRq9>YcT5ynpwY#(~TsTpO zQB!Fcb(Mz4+$4k@N;g4d(iH=LH1tQ5f}vGyu{PwwZZGq<8E zaY<-|J+v**s46km1fhegwi6NHNh-agx`CUm9a7)GYP19cYzvF+DkR-tezlIpbSvr& z<{7r^I0qdyicJZ^i*^-Q1*q_-LS<{Q`V$6Z9^wnu4#-*Jg!VYTo0-7?nz5Nj=dc?Li#zfXA?)gbp$F zBVtCDSlFgnizM2GxTYaX$&9^r*i*a==WoCpu@XUui*_1Q)hfeL-(&oeOPvHu{ISp< zEDITc`2?(te=yir^#0wJ*I7Wyqs0+BD zI3`XEN| zLw~=20M=$7t|(jV7GPo0%dW``HA)KxjSf6^wQ9IUgDX{($#dt?S{}ifh{`fne#B-6 za}pj4qXJfX;9U9b+s(2GGm*c+={VVB4^OlZS$uB8lA*!@=5n#UD1b%98!MZrNwU^~ zVslNRH8ZCL7_L%u(bmC^6SI{Jko=;%K4pxA8hf;`sQ0YPvG(nj`N-ld#tOOeNiucd zoLt&0bzm-~fmVzK-I5V&K#aqX!8kf{cCp3QXC&18yg)fO^)x{Jw7%988bF9He4LvJvp(vG&xx;m7r`RGjexIo(-BB6e_q1 z06ipPLnJK|E)0;$L{}@v6tg>zlDwS#r`%o3JkVp<|?9=Td8d0oG@(RFo#bBg- zT_O0oLb`rMMVv>k(B{c&6^_kUb>g!i2$TMG;!|c=R3mG(|D^WK3@b8#1KoO%P-*v{ z4q7y&2i2@}mGr!e`apZpe?2SU=oGhg6+A)Wmmb*eV6ThsoWAr35Gb%6_{T#3h!W@{ zL6w59Lb2%i3sU@cP~|-KWsM~}FV*~n6xT5YWG9XD>qkh6QuQ4sMN|5YlcH8|he`3K z(0`OtAl$All*+{Ep-?P&-fcpLMu&|yvbxX-`3vPrco{WKvA|-p!fwN;8CU9(KSsjJ z29kU;%qpsZ23=)W7`rmJ2%r*^i9pAd#^@JZ!^#{hWy3wK&ZUg4H=opvNwjtYY%TDx zlU)flA3M`CIk9f8Bou_1nJH|I&&&+wPgh|FXRdCmGl3PW@ytxw@@nz`?X_c;8&Ty( zXw=RGKApj7*rtnr;A5Neu{v^PjGVAEGjgMz_p6DKi$qJrjW=q{Y@L}g`|%pDjm8NY zqm}kxvIFJjYz=;W&Gl_U1Lwpk+$P%%P6|7amC&Elp@XMl=$teQ#WBx&Mq=cg!wL38 zuwi%3rhYQzjLh9=D9;azcA#pZzo-Ls8r}*lTPTiu{;bq~2gNgM`H6H+Nay6B{4n)I z*4#rji%U}XpAIcg3vVu(u{jX^*Q@+Sk{PXcDT#dNl*D@IFDvcADY=jC^M&Gs=e;Sx zA7Y#x!lx5+x+I9}hD=Y3iA70Vr^%hPUWpp#sz}}KA&d{wr!WRn*8FKEzH z(Ew{A3oMsm%!1$k0{t_(2RY_J8Cjm1jk7I?HK=ZLjiuG)dJA@vIyXAN4O= zO~w%=@NWtIbsaYN`R8yDrcm7N`Ok`vSUF!BInt5p?`liM>;7#a?A zk3q59K$uj~;F=-jh{lT1sUp&8jjso`Y8o7Ni(@m^;u?(gDylui6AM=5wjJ7&AIT4} zZd1)RD9~`tklOeVN2v9Sv8JUUt{C7a;^ztin;Qxx#h zgpMOCF6WOsnf^@ZKS9a#Nst@FU!geZ`Bw{;uU&)UItRZThc23y=rV>ayX1Sb0x@VXiMx&l^jADmi zGkzqNq%)_l9#JKDKOcrvX}Dtg|O)U`jF>UM28yKZ_zOSV`p1U(V@89$+A(B(46-9#}t z&4|K*wq>`&W@ak1mk97)dGUBG+s&$(!JRK99H%Sr;jxd@41EZ*FyiL z3g^pd0p&UKLJ1yr2~(LeT73G^fhjGs`d&c3D)jXPrvK{zQk=pIr3o+fVZ|n$#4ThM z9MD^atAlb_rzX?s1A2xM-R+_?(uJMGT6au>9Z0s8uxev%6Q@x}%@BM?32`UO`;E|l zt&YU&pabYav{2gRr9RL}GjZy$E7myu*oM{gu+coy!z6JK(Xne|gqL62z6Rw@1$u`` zTlN=uXkv|w3o`-#Vf74O8#ve0=CQVoy|A?QMxGv8UR?_P-&W7+H--Kiw9CJPNy52Q zDDC#Vn>#yf*_-L?P!mVg37A!aIwuUrOgpv_3XX#{82NE_5eLfSHKQluXClW8&2i8U zG<7g0$9#Gq3r?kL+u=N#WJ|V3QZK>P@pe6n&jKO>_%)N06_!OQ}Uj3oQiIiSf0;;qMJ!lk6bJD%!o)Dur|0u2%8U@t6A|| z+#c%y8J??5zn9Da1U`;f_ZcY>`0ojQJ$dcpaP@^zAcw-}h?n}bKoH~h(RVwqtfcNl zjg;JPB_|Gr?1Y@s4t3JBm=1Vi#Yjeyh~-$cQW8}%Uy<a>CDorzZ=2M$;IYK<_TVg-$vmQ05|1gwfewHZD(mX@&W1zvy4q9|G~{_WO&!e zuHwkVuHD7r?uqd+dPa>5@1B?#DZw>sbk}ZpYVDqYu8&;>1uyXbHuOKK1Mz<;&1&_< z!YEX}mkY!X#YAk*HkLLR2FYV4ZMVSQ*F6MUU^DbDCR^NOBm)04q5o+G9Vec1h>lbk z9rwITq>&^I;oF@{McUvd&C9V+e`%n!v!`tzaxIYk%FfkPIwFw#&*UoD`-M!Gk$bm(r!bkhRoIo9XISKxm+ z^uMIwf0Z1gI#(Eln)woGCOO*pR;C3n$uoWg9ngk08RfwLdgy;mq5cM-#`(*_D0IcE zdO(eDI2YChHkrol20bdY8U9U+o4_v(Z$_o4!cytbN^MZcbOS1dBk07~#4fmmj_n#9 zA1#4Gg%wSVj)Hb4@v1mEKDz5#z6IU(%I=ufw?hA$iq&s}lmP@t88IhcBk;yZc>|o@ zZhUHi&2SmxTjxe=;D0ytzoQ*M1OtS{gZvwV;q-(wl%(bwRS)X=Jvi9r9fA5iG>7#s zj-As?WUSwCUBM}*T64}FFo++;ODG|fhw;_+hD5o3hr%F4Msblp-}ad4*-3j-e{Z4WVBAm%Irl(_{S1*Vmaq~rr@_^52KymQa*h&V z8X)1)w?jxaYWsY~Z({*>$0iUK!r-$ByZEMKhxR2h&`_~^Z7mAr=x}kYI6hh0Wv5Fz z2-AH!N(hJ2hb0&$3v~2XY%*Ck;I|G{afU*xL%9yyusIP4`^(JCdj2ZD9ay7_J9r3v z4%YCFtq-jC+z04ZJk{c=h7$VBvoNZoZD$3c{&cn9so!H5;_Hfy#`FfPSh=GC*wpXT z805uZ0z)=7n}n9Y7~~vdjDWh>UOv{~rh~`Mi;aGRv4h^fdwg_qw~ZbUq%RE9p^hCQ zXOq>TiozJ234ihSkDiu@iGn*ia#GQTGxd&-n$~+KjhHkR8!h=w0yix3_K(%pFnzI( z)!kvVBC(bVWAG__m^Kx+ZDJrfJ*X#A7GrL}!h%B}`MJdgmpHn60B@iQHaH;V5k3}i zN0!#D-NcBiZiChK^|-2VPP0{#t0D@?_O;UXyu|mwzK+{!mGD0>IUqbXwr4qI9JbuP z>-II+uwbJ8kZln`0>vpHa4fw66bOiG1*a z^nLLK`--Q6^!>y1B}$YJKptfvAj=8Q-}}FhEZrzIPk;U!&lsy`=QcyGA8|7jG6j4_CNsiAV&^{LqJ&@ zfpKrw*jNdtEsK+*lViKUBlvpP_}JLQ$RyT4I0QK{4sL|Eqa$Oxu`U`dP4dL#FJ=A<-Q92?s;GP-+mbYv7fgyndwvN$?9Uc~Fs(g;f7JSOU%9NoQpVypxJcEP@s zsA)H98W}I`+C4EjIW}43_tDZY8Xq4UAK5hu%j6iU0S_AnoRi}d<9LjL%i%;P_!djx z|F8lSi#B#;klq%i2b5fPfLw5Tw=f3t$s45IsWM`Tf;jND+=SEXa&nAfBYYg9088Lx zZkD4?NI79wS=4OsGfsN*CQNaps7mA8QF=f}Xxny(0HFYNQtE05jW`%7rR0#aIr<@$ zotI7&>(7Q1+qsEm*B8Gia$#fu1DeRDWt96r|Y6F z;+6Fo5=wew?(6i#l=vyUharE%QIK*4KFsuU!w_IAi%}lnG#1G%j-l~U$8iVNbrk|J z)e$WMNz8mx23{gy2)0&<7D9alsEDd^4vfwVF2=OZhk5Tq6i0Q76buFF>%#Ow9Sz)9 zltY7sajf8bjRs)($!PqLM*}!bj0OWnOxMblN|>G!uYvRpVfx`ZK99&<{kiYF_358o z{6_BTYuBIk40TP9AGg((*=aYD@!qV+&NE9}2!s0*5@E}Z2@>#k)L0rD?74LoG zdtU_1A*LE}B~GPeI)m}Af;=0t9z3sw(^Oy*f<#JTMKfxS)kuwvY8&ZGkJ!W+X%EJ` z(I`WJ=|Godmt+>zK-Y{9ESpfzSBDtIC1Hb4^(;;zVf5j=3XoV@eb-v{*aInxW*~UX zS^^Ues+9!ko51O7t^INbR2s+ok8d87Ym=)Xdd0socR(P7dHS)4qm{<#^xTxV><8)T zFs)Gq(q+a-G#617#$iyrY!rqJ>L#^5*VaU({c$5d5~TX(|Qg+ z-JpFEhGSgHRv3qI;7d~b9UFEjYW2(w1mx{kNr^5*#^cc|9I>jNsp+~5195xDzeg?S zK@4ZBwS~oYH>UU5(+3nxng`;u)tCc-7=0N`!md502t*K*;rz8cYbEdSN-)MT#V2%! zQLi)zi&-|Ck;#|muo)ro@9}|aop?jiwps3ML>BvWh?A6oyMNNt^=g=It46kp&9391 zlxv$!+&q^)>!tR}0>SP~MAICC7*XCCphnbnm8lj9ytEIzH%PC;J9Zhjd|fMn;jxbB zdCSPAS7*4Qd&BhO(?5;Ckm*~!)b8Q|hjLhvut`INpBGF&1A4!amll{#KFLdsU+-ed z+b%GEDya*k#yc2vV!GRCgvkZzCu2HIi$?oY#UIY`rCYd*E{(g!GRzdDpW&qz?y#27 zz)m+E??m4&gY@STKWT&NYe42M~ z_8-Cu^gO0}v}!z#`L!{>zhm>gQfbVSdFcV|1JxyXPaBV6nkNq8j!5`6>=B6qFX$Ss z$m0=3dg#bIES@D~w62@o44=Y<0IV7j@8n8^Da^$cFlxH4OS$NLpf%LTk3mXVE~|Oa z{XFErG3A);7{^qppk;&f^TYJ>lssMl^1yX@g$bC&KA9j7yv2ou*jfCqCI|;eoa>)2 z8Mwmd!R-Hc4E~LF+>%57qA>kJ9r9lVr`Ibo3ls3*Qisa8(ASUu<>TIC2Hz11=uypP zv>pV=yHsUqwc*b?Y1bNMb#Tx4iC zMr{i4n_`7VK)arHwHZr-Ff-+Z^KxPcrD6zWQF3jVKd?Z9_KQFOdXpuq*X!Wve8FSs z1Pb?i6CAA3O$cFN1sq?D!O)%oo!nN;kS*+=w8Tz|8xiVA8ijdp54$T}R6uYYdcG*6txOiA>3k2)x`60)+3AvoQ zlYUS!6eTOh@1xBtVlhTbYeg|^tYMQWP6NaFqqzQA-O#6BwQj%8up(hvSYCwY0$b zvk7IBH2yP09rc0@VK)m`6dI)&2NPS=bK_+8V?gAu4b!htBL7WtZEU*YI_Sd0SZ}Va zpYIf|&8B|BwWF=P|8-nDq9wl{fWBXN{YnEb5(13-3FUDie%+Tx=k~R zR&i3HUJp>CCh4B46yXmi)zi3KueAj zs%e(lBc6!zEkqZB#|XX8>UN2YP!ib|j`m|;?N6~MKRu0YLA}r0OYQ15`MX_?O)l5E zF-(6f{pU2{e>_ZUV2bo#dZ~+6>rHF~EltbhD(r&6?hllNG_D5vq~Y##^1t#hKpnRXmn9}*&tYI9Iq0w) z2}GV)kvM8mTpvQ_kk3Pd_|dW_^$b{iMVMSy0E~@tm>>ZK4sw_=1Zh$-sH6?Z^ew*V z)zv(zb`_g|k7nCWt21_f&C~ld8!5=5-E~_^Tk`otn0mVRvJ0@E^~o^(*UBYuX?=)+ zo?gaA;9_AH&UB`wu-&}l-fdn!k`g5mhhAqQGZ8m70OUR@3N{Lic7UI>pus0X+ScKF zBsjI@TpZ&462ch1s<@M)tEAlhYKx$0%z@>qwkF9~3F%6tzzl4UU09A1rjv*z)N$>3 zkp48L+9_5Zr2n3*7AQJQ6b0$ehUrf!?miFPAtqJ3u>dcs!Y&xAzA6oJ6{8LexQyI> zmsPy%PNq!3DO;Wbfh;1IOv(G?-OB{U-P*ti>f&(`XeTgG?H;Gu*Ml%8Nx zAZfYHQB6W!TSWBwK&ZG1JestS8m5%*JCf5ATmwb;9fM*Fqur*)TicYoN2#khRGhC? zaC;_CgxPD2NZN=nv)Ep4z@wF)5ioBFAyzr3IK_DBuDKG7pkebAKpNg+=Wi9RW9@a4 zsd2Od0l=UvUJiPESa&W^7>9{l*m$%{W&<_igX^yxOGTs7!^lCyRAwZBZoXsW z*%g?0XUnsQ$JZu)1gyOC<%V_HRn5$(c@X_;LLA`U?uysbw;^8WIk^^*T zwiqWc$7PPAN~4|`Xd;>#U{Ws{G%f2;z+6Y!`OH z-}RVupqHK~aG!0gE}jYaM(gsN1bP2`)-(c>& z9nSCT(hV9?jSL%eD-9^OiizjgoSNtE0hJGyiL~b88DmGMTpFEYZ&p! z=f|Xfaohyye+tuIRb+o1rbB3iY@)CW@pE*;NAV50%=aJ^8d|AIM#VdPi` z>2HPUZ|LYEKFSsYQeoGG*ViALO>V+qscbg#$pT4WwilSyaOuazNX9$I3L{Gf#ub1? zTC1}{?i3};?F4YkA9!#?BFPE>*wJ2RTa7yIkdDwJ2bNn1hbQ|^szOWtBi6N8HC-2F zd`P}JgtZXiy7N*!$w3|bIDw2`uc!UuCk+g_N1rfnn0fAs9-!Vr7c|OUcGhl7OAf=E zByAv*H0uXI+}JZ(7%0n3TnNn^qRI7$sd z6%ka(Vd(@<27&0RDv=q4s`LsiVr2<;h3fIyW7TSY-%_g~Fj!)dAIroEMpz%v7#Eq+ zQoMmXMqiSjL}Qj=ib&HSB`vl=5#y1A6+hjBnY4mCY3)o>aW8dYv?AaMIU+RcL4J~y zql+jHw3cDGQP$u-8NHm5y3nY_J1&K6Vs=T8=H}FpU=2-~D`;nCrfkgZWIwd0D2$!* z&hqiIVQyM0J)Jm>s3UfYt5P>*qwjNeSkB=lwSYS_a~k#m6qGrgzjh6AIOb}IOb|ct z%#k>88l6UOYL+}|=n+@{wbMFC_OPN%Iw_Shy*pcCfb<-i{ARN1If z6fbpDigx5J&IAewq)Llu#5$uABMw|@9l#fwuxP!teA)~sq2ZBo;0Fv9u@MGJBin|- z%*Yl87*!y`1G>!suuGexbM1u9cd`>XJ^I13z6f(j$rOO^fCC{(>eo>%}p#Khqi5UQX))$Km7x`ef|d)c+-eh z+ZLnC^t6{cwMm^DTUj>#vYBsX#>@CH%w!OINh6PCvN#}FYvF87VHXVHpHjl&AwOdT zkvQJ6AcE@vD9PPTU=|}JHh0WKCPjRWV619ghL_lhqgzm7ktO8b!@O3wA8`VtU zdaOn4a}l488Uv#E-5du59$lNjAV@t9Z&CxYE*_=@t-*FC+Js?!GJNDPWzt5<`}#bM^I zqBdvxc@0-fI#(_1!cp~$HbISM!@Y92GK+rK7At}({05f;OjB|a3b!n1|8;(JcpuY< z5RYkb-l$@;4qdi=tn}^ONYN{tvHO0>?5U^T@EN{tUXe?t^E1)9_N8B`S$Dp&jJ0QNWMdt}ar?R90m280xyds0n>Fo;ai zg$JaFyJwBCG;lWE1bA@1fO3{4b~Q*(ju>Z=7FihPEe0dtRzYSg%oG(@6H3yc;KFWL z<31Og%V27e7q7@)*Z_uv3c-Zsb|mVbG?igepoSh!sON_@C7Z_VDI!kPCmM7S1I_N< zV0`dfCl6=@TAcB=jX?x;SZQ86-EHY3OW-u>VcS#qRm__O5slF{q5~j{1r@-$S?WN) z)f9-&g7hf*AjdYEDS|SEibNtPjs)aBXyJMv8uCS?;buT|sENC!Xv#W1h;@mbaezq8 zY=Ue7Z*|*EZ=#9;5oBZ&7>I6x7WRVC@l0Qkxhl-;R;qX~W)RFgL^NZ|7IwpMcuH!2 zSOc0mB(PDOWuwBJX}1(n1x&Ph>S9nzX_pOmkn9*~yDKA*;RZ?>9IZbR>kIo-md8q5sNM1LbyALDPg1mpxkD8ALD zc8%Mo(ZsL}*J59GHKa!LavwWm?BqNv#0y}gqIh{yl$lOOK1?^7*iM$v8y01ptnQvZ zGIM7uh-Vh6bbGTnyB{;8OQ+bDMQsA0DRY$Gpx^Kx44K&Ed%&d=z=1?cRb#hn2OZ@O zF?NqQUvbWH_Zy6nlh`FSBRxP8k39C7O%o@c-zzQ z!@`V)3CSQtMPP^kq0vVa6nT-aGyplZM7xuONeZzcN3Z1!7&ftk%ne~?N~!7*IQdv^ z%gKc4Vx_Pf4m&#qfE#OAbjd;l>;wNST7uDsjzABG>8!J_hhnZuF&KqOsECHQ3$Ji$Toew(czxrQ^PD(Kq z>u%sd_ux&?@F3J3w#iF{9ES7CH>`HH1h@any5950&e+k5I)#GKQFGagXgb%uJ9+#N zPBjw6`x`5q^3*TOXBxu&bb)G59DrQ0&NzcfVN~^4{~ThH{RGV+6dh%PWC${k4l_3? znVf*Kbp~g>=1vzT;b-+R$$*29bEgevF#wLx87&o|46t>*o*$r*lDE;tZ}GF*A0|c( zYAl1sVu&J{LcbMfrZrAjs{F{_q~nZgDJFZA-4j}jx6SBi&Q@`r1apWVpYRR?NDmiJNDLb+*}y1I*}3n;YiNlcIQ=C zw33>FTE?S6mP#XiD_Uohc z6NjlQD_)*~R)&WO@TAo%LxQ4qwAzAxXe)NPZ66T+Aj44&GAm(bSqZd>edjaM9Yl&# zBeF7VnUwfI2NgzP<4h-WQ~=^y0alz?ZF3zzGsCK|O|%HE%9zfgt~&M!&lE#))(sOo zNGyr_?Hh390tq@jM|u{8Z$k)bqS(L!9Uol7EWqgCM?+U2u{ON;j;gf6&}Zr_GZ`bJoOAr}#JJy90L} zvzOJKqk@jXj^cS8NRAS;8Sd0UuFcHMLK;%#ma;(x0XF&!+Jem4Fw<5dSO*isk`lM= zP2%pT&r9aGDMh|nF=NRfJe=;%>G>D;w|DRcvYc7P4#F>z#QhS7BZ zeFDLGPpR*5?Igl>&z?9H?HXl%I?Oy?`~L(g-jsobNyO-UuXHFj3siQ2{%H=Ou;^HF zIfyJp9NNeT%$!z)QaU*!04EoIYfHM7OyMLiRo=OL?=0$QGl^6eh8X{)~*{bwDGenV7l^dZT?+QU5_GQA|(9wmDyi z%zdNLxCD#P(TxIM&z>wq`Gh&4RNVZ6;gJ@GF)l5KU z2{O;ekWW*EmMvs2^@M>CZvk_`s{UW4Uq|I^lZo{gcNlY43c39|VhIW66QO4#rmGBybZi+`RK{rw z9b)V_#!Q*6pjc(BERTU-QZKB6tFw$fW|&npYJ6jcyOi8Qzym64_~F{=discY;AdTLj1`N6H`d3TM(P(EN?Ydn>^X2 zstn(nMmsAx)m7AHG%Ub4D`3=&506efRtfW;*+E2vvT9||9{8Z|j@_h6|2|Aw`0d*$ zs5%zfeXU34F4hG+iO}WL$(~3C@pd;yyx_)-Ifd1VLKY8Tr2@ki+8UX#AnjoDKqy3##~cU_lKqNXD&K&Bh7> zVPTo2QkoM+d|rp?oM0DUfLAx*m(C&vaa7T&oKZuQn0YWfSFgH4IP4WOd)Zm_z<@cn z0yT-VVYVuPam?B)3R27*z{lfF>B0OJXPf1fEAX6Ks;yjcYlI=!^f42>jj?FXlIn*V z^Fy<|hn|Zzp>wOB(8LoF&-T1&B|kKTTYz8~qwWm_1Mm&lQzWh#=pSm{<7Hna4o7L?`15W%+TuwyOB0NUvyBakJI};@eiouaj z3sowh1KcPsAH@IP@P21#fj&lZ)**FJNonD}h*U&{T`(tHS(tU?Bch(FM)c|GMTsD8 zG*8g$L;2uPxpmc)_TW0`JCdyHse|f6z}-h8qFu+`yL0tjdHSs#ni-)7iH0|6>YnpORYMWiH@w5w~OmPd3 zhc~(73w{Ly-3)sJ*IW=f=02iI3c*y!oby=aE^DAm>_OA>UTRAUX;QUpX%vUh1nd4! z$;|Tq` zs+r~Zp1ENI)?%65ETg`2J2ewbmvUT4sueYdS?DAWexaKez-MCp*xlwD_GA&1O#NL=gve1na70f>Arlmjo*4d{VX6Zx)*Qn~H-s zv4xwa_K0h)!B)NlFahv|YjwQ|K!uwwD&dDyy9&vHwc0kEsgv5NVrm1BV(8%%h+t}T z5Y0@10mN+u%F%<&8@$v{QKZS58Qx4yv$+IjYp|_@^nf7qTUdHR;i|WnU^3s-Ky_o7 zc~j=iw1fRln9H78JgJ5HyderOXhzm<}4TrnfBwbMKmzZk;Q zq8}5*%^A{8A2?mE0S3?*c z0Bw$sS)*Fj43ZbQX+1O}0UZsR2v#lYjtFt&i?P-hZ2)e!Z6+6W>uamYTcEYKW*9ae z#pTUMQORG|szK)6xd;DqO8$ANdv+UNk5M7$%lx62dc-CM*E?hnlg-fgZOObh^M1sN z5F_nsySB7*pO{7ZG9SRU6K|>XQUfs0MMhj}Y3q7}?bXbOGJm`!^TEuA!_2#s9zKG) z-OZ%a?FMK98*ty3ak!@0C|6*VjCo6mA;H;J72)x@(|x3vQ%ER-GtIS>7%E{aoi==3 zl9{y{G(j9!NjQ6HtA-h}aO~76SXj9tdrx#hfN)fCXidEejxYmGF6H>ro}Dj$3PYNM zHOPF-OWl7zg*+s!d(Hl^xD*6;`*@i7sNxi{J#d#+vpLtO&I6y=0sMqOdsI9e@<*yT z%?OyxuG`RZgZpck)G+kIGnf7cEIE&(VBB}>Msl}%{64WlV-8|V-C!HL&OBUC!Q#Bz zBx15GcF0H?usSx+NP}_jAPHno#|hwmEs{{2uC}}~BGHP?ZaR#ZXo>MhqDol-Ep1p= zKzYVlKcP z)I%cO0RPHMosY2tz>>-*Fb!dIJsM;_8D=!#M+N~uF2q5tI?n92D6QZjtbR?$?aOGO zx`#KKLtv)SfO7i4CShwZ))a$2URA+KV4Xu%d|{PkR`qo0qTNWhz9JP6)&A4;g6*4tMDaej8R`0(n6^RY(_uzqdu0Ben`vjuD{Kr{!XDut zN)w0RVAz!F-~cZ6#swG>lQBvsrBDK0i7i5c>F`r)$^FiX7_+xbyMR)HvH0UfiD=YZ zb_ZFqbx_Pc-VH+F>ER;`#S+Bl!pvut5Bwwg$6#w*M5BKbUS>sVIgEE*ogzCSW7YF2 zP+hgY8#p|gSvPiM-3s~FjJB?Dg@nBmruQE);(hc73(5*H?035nE|lsYQ4cSW7l6R&82=IgP0TdClIZ@sRF_un?8ye z$ONd($}i8^+<{o;s6{Tug^K|=;5ou5VMw%%Lsgu94txuUyimR#GjR;*0eq;p{D~vTz+$`v?-a)| zUE%IB3_PjJcC-zUEeMD52mYuvFh3R6+>O$4Q4Pz1}LU4I4_oA0hp0l~G!g3JWmgj}3o753xzT~Cu?n2v$J#Sj}%Y)2Uuyd%>HOTxE z7VEJI6=c5dr5-k;UyajC>@(gtub>{DglaM+h1rd`AoC40##2SLdYJj9dT4)3+NZB< zkU>C>^ewfOAoCr(Lz)2`9x($7i-x*<-E zK;SK4HAHi+4EP*O)}ZDg+&MURnm&K9fAHWlUCD&CsT&@}Of)&9dNDyu6Jp~he^53^ zEkh1t(<+uP#mXsTlG0Z0P?|_Fr`E{CC+9(j0Kb+o*-uBpM-N8I+{bAR)oZkUa0o3b zo|jRVrCn{@3E_^$kDC5SMcQ(Z`HwL313`1v1De4(R&D{B;oAPkQW?3y0#ATDle$%z z#W<|iSYn6P=mz3HiITEXy#HWX0%&2LBalK$o;ozBa1d)~hQA&|O7Z#^p_L zl}jFKv8($?!H9-9s$O?=bbCW~D|(G3Ob*cJfnI|fa5gCA+{Hp@R*a931Bb60^+7fh zX45*zIjs1a*j)x{uxZ4L!(70u7&O|C?s3rJi@8SR57Wgs zvH}exOq9kU+n^mW#wv}o5n_(PjAx}D*dIaCED2(m!|JFiHVAX@93yrNeiWp|rSfcb z3E0tJn$y;3s*0O%W@hA2xb<ubDf^Y+CgB~YBH#jQf&x?Azr0aNmbQiR^f1pxpOOk z5w8*;s2Id%rqVF2Jj9SJ{ak=0h1x(PE?}+} z0FO1U0fw5IbE@E^g!Nc}WtFm(=iInx{O2yPtB9N^0!h&-?6fyldu#&l146`ohzk*= zp-oYHO>8X)03%359-%I`g%2_VsAgC&_kdJ6`Cxnj&^hZg=PJ=9HY$N?1wU%L7}!KH zrdF(5Ca#hj%ytC<(qKuk!Id)>;CJV-E6S;2a4GXmh9hy`S$-C0M;Jc^BL?-LhOKCL z?dd7DeAxj+;>SN7Cp*`4ta|Nf_FQ|FjBm!V)s+S|!U;<$s6-Ll80#XbOSh^@42_WVZ=I&Kym~6+fZitF^ z)N2AA={RjvFV_=4l8SA;9f$z-BDgvL2G*ngoD<-VisKmWj3X7H2rbx(gX~?!zY(#N zgX~3K>Tck!jkD7g1VolY??HB}m%2~4@%}(f)&U5**O$Hfmh3%v>L?3~ZLw$#?&8#~ z2KBz|rLgMFPq&~PRpeY!3%=7m4DVs~vh2MtNM*A3@lqGVGI(7Tehs+pyD4%MtFeJ? z-PZard%x`camFc|53~1F{o#RF39YU`qpF740ye|4_sISf;A1T6R*<~{$>|!Lhr;YO zSx#lQV|Q&D*M2TcPlwq-?|X2V%?`A^5qNIiNFpo1_gQ^CRuDNe3+9HL^iKIB@Wdlp@Hu=YWM`%_jW zV{OXm@P1iUi$pb%CK2P5#%d!o2%-YYo{`Lvbt-DxRaahsS=mT2PfC`PWy>sY8C0N;^~#yJpsoZX_Ech_P4)hGIdh zJ8>Ijjg8NsdbTP$M)Fs}&%lmkMcsL>q)+DZj36Y);$+IceL%mQF@PW1t#HNQU_bs= zTA=8>fo>S*GOk(`+j!>&0$GDB0%GLw8S9WBiz=@5FrC6~oL zcp3~Pvf5QAA-6$9M@aD-w(PzqowUz_Z~u4VU`Of38n?a6>~QQyeo+{q*9?Ls%m^kE z6SKo{IM{y|bWwDpyG1%#R*Qm28OfC97WqsQJU0jAM=_>f@wO;Cews8XuR>qINH8RHrS;WD(Fp($79tyJ$QC|9RSb1B^ z4Q%<1gGu5-JdKEg9Rjj$u!sCOYzp9uxEX`FgfHnXw><)gP1Kk((s3{?v&%sr4n}^E zSfg4Aa8)+WoIyKV zt0E*OnI?9+l&ZBD?LPuk3o#0`Zt`c1mdO;1MA+yyRXJc;)5!3+Qn`%BKCo+p8uSTk zW5X_M!jB0%_T%g&=b6paR8_ai`_wtnd=`AWRHZ|!#XvNx~VaVsWI-QGt$x6)R_Fq z)X+(WsezTI=sAejfpfy-7-WkwAvq;GUieUOb%&loRm@Zbn}Xm|gWMc)o9#HMPyU!b zB^*0AlWXzw-<0VlBUU0c-MIlFf+ZZ_{*K%~BodVDoSdq=$v7U}mf2C|bHX+>Ly&z; zn0>Tj;jzHN;@oPJW_|2Ls$a$a^3vSu5_AF;V^sdR7StWFI-R==2rP)RXjm?u!TN!* zzSnVU3;QOFJzBTI-4Q3sB}xR(F>trC3qPxIHu%U`V=>SThR(#Z-q<^+ohDnOl&3dYFBhW_|{2wb;G~U0^1es>Z|YZTb~aGD3)!YI6lq>WZZa&mR?V z56Qa*Ilu1bl*M0@ZN}+oqdoJRz=+{IM<+I`rdm-|mZNN{StW?L+i~L2cc7MAy5tO?xRcH{zlX}h6= z$AQA|;utEAIu7SgTmdHtIAdRt|LOb{Oknf!ij#_Nsu!^{9yVuuSe>Zs@DGSlMTc|1 zFTy1NQc>_6WSOrYEB9y*$bV(F+LI!W;Am~dC3e068Wmdc%u2~VL$~J2Zk5+4; zB}Uwug(l-Ho>SEN^`CcrYqc(tC5+J|g!+b)?n?56RQL)tTDDd;G0r;}RdmcJG45tA zadpmpgIF7ixgh&$5(8#_340qs_BCPlRXRSu0cNw(SSrnxarIcS1Y`O)q)G9orkw^z zcF5Uy#*yYrC?$Zy6TMA&|GYEVeaT6f|hZBIE1}RYZY#q ztjVHrJu2luj`u|h1=-hQ3r=c1-f-E1>>I=E>l91B4J;8uC1e7YpdEc(N=8_6#p1OS zQ&O#DRsc6<&#r$x>x!4|#g@;bv{vCT1ZpIqfo}oh5uSQuH^}}Da6}x)upe(6Az1|3 zw}#m_D~{d{3bQy0vcC(40K?^JxT23j0sFSJjk74Hu_LfrH*1V|pTsf)E+Aee6quOP z-7H?o+057o4anQg$P;<>bn5h)l%c5_MT`pwyaW)ln^#V@6G!D{W_V2ky|m(pbEJt1 zlKrtZD`6jY-n|QKcY399Hq8FMZk+x>?jd)lDnVu90tZ!)eP5W>JG!%f1Y<1Xw=}Wu z`avojl?r!Bz_ox%oS@q;(Cn*#+voWq;%6i`#>i^#KX6dF2u^Gn^LZTA2=gT8)tmrR zpDR<4Wn@RO6Mr3r4E8oHB^SFM0NXhZK!LD*3bD{?qWU%u+7Y!5CYHc{E_Qnd&Dko_d)3dW5;4&eV{9tg637iRxh=gOyW zx-=TsAp04NGh>w3=ZJlbGd9L^GGr3Uy~Wcs5Rx%mi}0Y6W9*&wt#hQ^Ngd$7_dv(4 z*EKT>ba_Wc8#KzT=?nj^S9gN!XR%ZuazIDrgFp}F#plE9KPV=@ z08B=h3$k!PzfcB`fB=!WRYDKoUk6`J`2d4Fh^&n8GS}h^S*^9$1(UMqWp)D$322jh zf~|kyK#}vTSTbwgAp2Di$*FQZ$bJop`RZ(t{bwYW$sPX%iSh~(-;y^Vq;Df}Y89Ek zBMG>We2;ln7lQ1+Bhjj^1lb=T(U@xoIk1Ryy>TYU`AAf%b3qP{wO^5r=ipd-k9aV^ zV>p9bU)a0tMw}k(c0M_1cQ4!$qJm2d=spY_#2?jlhi&+bQ5887u~1Bc=cDh8mK_sNED z4n5{EJr1oVVBXuS?jFq@I@Bw)8v#Tgw&wbA$~$-WFy$!{FTqq_puQF4E=97X$;&XU zHKIq5yANK=k)t4YKjv7SZJZ8rc_ixOO9TD zOv70w3qFHW2Dw2Zz1>&|a>J6sc;_G=y=IWZ5;#rmEQgh2fZGd2n+EJrEz_tCKr|6x@lBI*JD6-1KxE#GX5jdQMlXE124- z2UO>;tp&N8(3IJk3UZG@ht4hlxW^*VnnN9rL!x|UA;`_3om!BaMeUVJV?M}LPyrSv zIZ$Ix;+_B~1eVk^06T?}FuMl1CA<`66s^`#%c&r@0`$tOAlC#`I3&u+kMC`KNAqV; z_bEKr@DokkLL9;=C&>LYpf%Su2e~KU>tc|5A~IKif}aIracm2DpMuX*LGI@O2i8bI z?&(P2dysnuDlrbmLGCt`E`uDN#pg(n`$asP7~ALai7q{#2;hqsAORW+axX-GL}Ngm zzan3ec(EkbgWOBu^@T+ny_e!QGz7VqA;;+|a=ZdHw}8r5@riNyb$n>CbFY;;fa~8x z3ji4_t|0e%yoB3Ikb5J#H+`ZsvU_a0GjJAol@00QHCP zxFyJa7$YYOh9LJ5HVlW6Aoo$c}B56CCq0Kn(i)Ie!s3{CCc z7UcdB^_EfZ7x8R?M81rA=wOMgUq!LT{5&_zb6>**0qUkPUf4*_{WE?7?e^!t0N!bw z_X={~!iOtiT4r=0@X&9Ae!wP3vO(@U+RI&|BWN1E{2uBDl?mnlJ3(wKi~0dTS-Uyt zOX0bWr;l&C`VIOrNQ;Km3i@))R}1A< zThT>P0)oD~BPr@x(02(k!Ui1lU5aY!?V#^6d}9H$bRW#THb9kr^xY3RmzS4=zC0R+ zVc;;l;Jnmja7OHwO~RbfG6RWvsY?>!1)Nk1yk{X?doI}GJ-hFUuaIs9foij_ZwG|roW$%nCgGZJ#S<7Q4y|~p$zBl@1e9(V`PvoT8}<$L4R7fi?AwXH zHCOA}xAE@!lEr!mE5u0XEB2Kjllq{iTm(ENia;>;Kv*IR?ghHM69GrokFM716!Z?} zzCJ`P-G=(9KXHU$GX@?I5xmhnTAgRGJ(#Lob}va5ixlyDM~uy3+&&z8R3 zeSqmgP|4D?UFdnKV*`hJ47`RY?)reR#t5izjK|e_G*QwyR0Oik57 z|GAnv9r`cQ)N<&*R8x)6H~qai^k1v*TA}|2O|6FhTQzky^bI!FL;wBy?(v~-@N#SD ze_Y@FOz3}7Q%?&0PiyMQq5nBeJvH>dq^YNc{?|11^P&GuP5naXe@9c#4E^tG>e*r1 z*VJ>ubf2c47p6l^{Zg2|SW~|orZ3Udi^BBfn)=l+J)o(Vgy|to{aTnVY3k)++KkaF z!}Qhq?$u#>zouRjrVncBH^TJ8HTAkMZN}{lVR}yA{Z^PZqxGgReY3v%oiP18O}#Zt zzfe;Vfr33@CkHYkOH1)wS z{XtFrahNuv@F!vVul3#k3Dcj_)SrgwFKFsxVfw3@`Zz9=*VJF)?pRIzHEs~q)ZgIF zOileQZh+L(|HXxfnnDN!gWbQ!?R)y}v$$JMQ=i9uVw(B_uCvnAmvEbrroMv9h&1(2 zxJO4*U&mD`n)(K=$k5a`akGM^{vU27(A2*oG`*(2iy-Zq`Zomn*3|bAU0G8&5&B|D z1s=kAX)29COq$9fn2@IW5JpB*7a;hFrtX3$7@E2efgUtQqzr zz|lla-4loBG<7fds%z@raERB`ec=EYClX3nz|NCWldd&wWFpE^$?qp)aVNy?xpfcw!FLo!O`5g@5rGW5!VB< z0!%(DN=6!%tSb;IzGwc!w1Di*rc&P1-+SLLe-}PdJ+oPqnZn9KO7~ zQ=$qTMx3w4q56E|K=sT{_hTpaRjRNG%r}N`{1Q>>xqRJh89ThP-Xo%YOxW}VkL);O zVYH9F;8A_qdqYE^z{5V@^{`Y-$xX7doQAlAu$nu4xV&P1Z#gExdD$&5buUQcHqdZm ztyP0e-dBg6QFew}sRv*|y(Q%Z*QcJA3b?`sE-&TUluz%K=J{^({D?mNe)GK4Jnw6s zBj&lwJg+m)Bj))i^L(s%&Y35!L}7bAE)$Vw(>&MB^9knpWb=Hwc|OxTpKG2kGS8Qq zr-9#pt@-^1^L(p$ntu83H@|KFK5l-0(mX$Ho}V+%FPZ1p%=4S(`5p88zCP2wdE%O7 z_A4El=f&oEiFsabo&)ANWS%ASH26$kZGP`JPh9vW^*-D@4Sv&e=C{FX`eyU{dFJ^- z^L&YUzQQ~a$x!Nhy?MULJl|%XFb~W3_n7Ag&C}p5{nzIAr_A#U=J{3g{DyfNJn{Nz z*2n9X<%z3<<%xTA}pvUo_7j=rfx(&%it{ zG|zjQ=cswYjhXe(XH%Z=Op_;kv*h_W^MnhH{H~j4%RJZ2^H%eOr-0;pnt9%4p4cgs z_t=q>C-$7=iG3A$nsKM?SboFuDNh&z@w^RcFce{Mk;kM``RAl^DX`o7c{?r&-j)is zZrS0#BX!Z#j;&jU-j=$%H?`xU3;6mH`}z|5dJA7)YF}S!U*CnVFSD;Nv#&$GzE9@e zsryY0rMKpf4eiLiBUM1Uv?sG;YyMstHiqOy7c%36Z21S-@^|Iy0sDHuzP=k@Z?~_v z+t(NI^YsK{{YzKiJXm!6@V1nem}Edzpe~caS%lP`Sb|@Z4FlRUvvmG@( z&emjLopHYv_p|o*j*ITiDk~PG`HqU_qm1`q#zmX)6f$OFly)l0cwc5*vKi|gHP)ky zd1TzNb@*+m=GOMxQtOzGkGCCtK=kQW{q!^T(*xzx2unRlKRwxgx;*;yRQ>cc`>7zG zejcUJ%rDrt55n7brk?rei&IZ}ck0Ze-{C#y?cVdJcJzBMusJ4>$=}Ke@&(P>0_wmeUi>hAM5x2=pCtF z8k)|^>krE7-1M>ZJG?&`n(muE7D3=|?e{*4yaLA7*O>+`PCdB`4F8_}{yl8Yey`tU zeI~MEgc88S8n{otf0-?|_3N(GFLyVvv){kJ%lUGb^Fzpq*>q;=qLRRmzGftWj>g)V z==V#m^ebKIPoZ>QvUD6%NGp1XDuYa5Dpv19`u#~;Z@+hcSMm2ZulVl%zIXTsbqIRa zd$`{}6xDl$t=GFB>J@bM`#0dbjBN~@8~gpEw%FEhx>9>LFLk2df3z*t?^&9?*t^LV zvwa70V~x%B`;Uu?J=3*T+q~F9zhAY*w*Eg?>Xyw*E%p1SY^i?l!LHaZ*kZjAa&y1m zh>Bh1ioMnr>)o}re!m?ROS@v2Lz|)h)_(u-QL($YVjn{>@Y2L2(CNnMXhsq=7DMjO z_WMt?Rc-yQtLbwV04<&zkf-(gPjzL!;>!HHEz`TNxAptau%-IF8*DM3vMat$Zo%MzN{_|Z{-*UN&{XN}TU()aYs?ECfMXu6^b?1CVzyC6q^DkY_M|bCZ zO~3zYm-G8B=OS{-^y!7Z*Z2FsY0LC`k8*|9yQ_aozyDiN)|*|{r*~(4SHJ)EC~L!I zeOY(b_x1aK5M{m2WqqfGy7vJ7Nx%PrsMy0@u|Mf<;m`a1h@XGn<@{uK&cEsR|1zrd zkjwg|?yR5c_x~=+deUZ1``uYT+wcEBTf-Q;adDchkXi(|ZjmB!mE=7t=eYCJr3}ga9Fg5US~f5Rwqb z*v9|Q%&u0eyL-sv8vNwMlMFLRh;G?|LP;@km`^#(uUj#fNs5a& z%okG3sM?A-FextQFrRanGL>qQb8u1|%+>}iu9_5APBD|Pze63{%5=@7xJHJ$ ztV2D#6?Ofj=nd+-I@Hr!Q8!778>L(uZ#&FOS}}+Fm~T1EtHJDfepK8#DQ@ZbU*o9m z>YZwbq&U)1UFoP~^wMFdZ*jCvKNvpx7RTr%1Cc-5$ws2$K1tD=9W3OyeK23##wW#W z^uNk66U)+Roaf@4Jh`b{@yMj;%>-6XS;P{hwy?01t2~EGlH$=$Juf>38@6HKMrltW zmnFqZQ}QG{+R<+}m-N3%idSUxY2Z+g_lCX~Q@AcEUXzin>WXb+l{Y8F8#B})4)qF3 zXzFXXC&gP+)W&Rw`Cu#NJxTGd6f+6ea;UGgqCS`u@6S*}hx$eDHGDKFKAe#ab!5|f zC!3NKf1Qzar(~r{?_|#=#V1p;#!ZfD(cY9L?s? zG_}S%N%5^zrX)Paq3+d+`bkoJKSgc4=rD(mHme*R;CyCq$ zn1qWtRLQk8q4rIpu2hyJ?B`IIYeiiwi5AXK7j~#aTTz!uq9rrbB^;`FlqLaIOrmTQ z{M=zmsMUnIN)ioDnKouP%mZ36*Gi(*Q_Lh>&Y_+FYR?WO+9-*JrDTmy9o0`$sy1`v zXm}EB>S*3{G}rY;Gct*?G3-u9^L%eKJ9sonc$g!48=@vXjZLC4PNXRgb6P9rZb`I@ z!+avetSsD$IX;Q@Ofi%20*5MToTlOrO(JhNsyfuxR84er61iZs@r}dWzLn{TNpxIR z{#g$7;8xVrlIWBSbz_Ix8nr~1B+;1}>fR3ZyjHGPCXqMBjdZA&wxZscL|12A4{@ls zg4!JPrlY%rz0u83X$mBBmC@}<GdWf)Hn5jZ8Ad9 zV@dQ#CiX#&T=I8HZitv7bs0XnIYjhw68$D6Z%lR6!&>G1Qxg5bVZQ1xN48?VlSIz@ zH{NlW`+(U?H~uh*+(3|or#Z4CTMPI!i9Sw6Ny1|t>dCFBvy$kG40Txn%ra62F+0@PQ*6)LO!4N&HcU z`h`PXs|B@$i~7o;hU-|=!h_)h_Z8p1ho#}LvTG2qn~)&$l8)&tH0E(R_Go(J9q zW+B>=z`DTBz(K%?z(v3GLYJfb2fxs|eYhWC3ATSX)AGj8H40sXv3-Eam zumdqDQiozUus*N_um>;!xDdD=fTs8c@O2PG=!RW#K?H6z7C0O@9k>Lz8n_EUuIK{* z{1|=38v@$_djsIcR{$)@$FBfi0Mmn@Q~?$R1_PS|djZD)=%aKqFgXayMF3rwmji|Z z@GYa4@&UjJz)ykefaig?foU}7!T`Fipy$f=z`+3esGJ8}3fu~ON0Y<1O1o5t0V9EZ zfFpsEfyaS2Fo_VLJ{{u$>d|o@@Oywdbikw50rUf?Lv15q1h5Nm1aLM$8`SOv;8pt+ zpx&K}0)v3Hu(%%uKQ`MFqCW>kHY)_tOM{9HS*aL3C~An88$Bp)oTa~|#(DZ%Zd|6n zmB!`z+f`~vl794{u5#llb5UtXK7u>d#&zbRqj7_|s5Ndf7oCks=AutS=5-)1(74@P zEZ7hS!JV$g-R7d+xYt}X8j?QXQPOzOT=Z>75}i8>HDuPt#Sa>fnTv%R;u5&CNMnk* z=+}6{TrApn%3Lhgc*a~T-gwSjEYWzuTrAlT*8urajhD^E(v4TlMgPXD=3<$~>*iwF z#vA5hK;unwv0Ou@Y>+SCc-veIY`kMGR%pCuE>>(v(i@yXjj86MyCL&1?hI~xYA%K} zJ~tODHNG?#D>uZufU`>DYjd$`;~R6aT0;VA9$NHnW+9e4$HdnhQ;il$lwSXd>=IWFrJkMO6N(^qUPGfyquj;|+NqDhb;`#VrDDNN`FUPnS2NCxMba%yRxSkx|Gpbug>LK?Ct&G!b+`=;kYr*N)?Knwf*TiX`UO5ee6T8ff zOz{KwVK#W?r zPXfm>aev}7`!Fc>~4qzMqQJ`cYGeT z?yh}XdF<@*7~0*npU0zdIM0&sJ&{u-f?=L#;i2v>$!WyRFqHYw^*k5cZt zs7Ak4jS8L`NR--hvAau>+THR*w={*f4B2yX_+M$onc63o>h3x=#b^+qvBAryK3<-6 z@&05BIUQ`B?k-7_x+-ob?S8v!TrE`v_WJ?T+O88F*ChO2%dAiWk`+Q@U%?CAT_=Gg z+r9{6biY>@k+AgA?k-8WbSDK|5*8|yMnc1Dasg@InOvySotI}PDLdK1zjSwW#v@K)_- z?xfhwo;8Q*dCfv)H~i&xL48KB&&;52{9RC(5o|gm7(Fw1Ii3;hG9$R5P~g^9>(2;>!%FozEI z1@;4&qX*2Jg9Cws0OsMrA;6))VE}PNz&tsa02~D{_YaN*jt7|A2PXn20nEpPQ|#}l z{GJA!5rp#YnjKZPwWG@FDC9yEVm7>u<*$oGJ^4Y#`fyKOW{~NCT@YLdTmw;nts#3GAz8l$@H-~;}{JQF^nx~-{C z3SQy%BkjtI!IKV?mbU|lkGAm6%9Sk*TCTDCul;g0FPSe_>iL_L#EF`*o02|j!|u1~ zGm()2!Bq#IPslSnMmEG>Bn6Vj^e`EuyQM#MYdEpOd6R zVnUu2MyL}I+cK8XWHaI7f@TN0COtJo8zD)Aki*$Z;>_TXxbKW$ zg!YVOB#jrY3akdK4y*x?ZVT4})&|x=t7F@0brh1AeYT?2ZTYLcR%I7SelTg(>h^*o z-ln})N6TaBKE76W^!fIn)iHuI7h2s(@&0eMItuM=3y{zYw+BW8I|5^XozN;TeOp@{ zW^6T>fgUBIG24(us~WvX#mzLwufB#YQtjp`By+%3AvHmZ8dQPs2@6p^g>J6Z2e=vK zwqWl+7s@n2&74hC!b#k_=Ne(g7WFY3(?xA(ySnQv+c&>+ z$tn|!HU%o)`a($VNmUHVN+nV25=xu&hc6iHm$fAD5GNYkaL~j^z0mOkjFymH_wee-yZDp zCc&8tyS!QP=2xNZha6Tw!fSwQf$M-9fE$6EfSb`OCtVn=7P`qZMcjQAJ<1ZYd67Z1 zdOv^pT6J^w@Bxu{4qDZKL1RS|da4R>jCLS*A%Qn14<#0Ge06f1PXMfmR2mp~T1^W0 z2y1#cG98K+3+!+tu)qLW#E>dOO+kHgI;q(V z6b&5m9=oVQ>)c;x8u!ZIB<9-8U187~L4-{V+R!oGG_#VfAhxrTon{2P&j|L_xyfp> zq!_Yv6y6UodzZIULuT$FGxw00d&sOkWY!)sYY&;VhfiQQ9E@TNhxxnC0E0`A?v;9yr8EQ`2BHH3T%*Wy&B(b2?H51yGsK(0x zt7YLUROi&RI^hC#F8(^gy`$AR-A-uV6%nM7+ROwN1N%LBZXARg^TjaUm;0$^zz4vG=;o|cH^HBbj|e6q$uuM}uMJ64|JSdh2r~~|iyFADC8XN5(!8j|p`ip~ zxyEmN>1v(z7^!}5?SH7({?n-2e*soJ!|$l$`Dq=)FRUN@d3T*;n$+<^)Bc6BUq{t- zehgU=iV8U5D`igs*=E5a!^{htzC{$OKBsxpRzdd6q>iYqw#3b5_9iGsb*Up7fS8?v zB9EN*vP`sSywFDw#FX0D`YJqMK&3Eo5h014^;*wJLc$sCY9PxNs&13;kod(%PTiHG z0KKm0#>S<)s68|VSh%to!OrT%Hk}!46R)IgyOQjXC}7J4CbI=Xt^&IQ3ao+``4xUuf+B z)V|%9Y3APA?#l{FZ|y!nOEK+A*4S?V_ut<`7{UXgW4x`lx_tpk?O|RNMN7bs$6`~4H8xWbK zgXguAf{LL;d2BaWlbW3w?8Jb*SFEa2A6+1QP#}F!Abn663Xno5tc|)jYs?PEU)yZ+ zLzKITs_RPYzcw}1yh-OUVg%@Js+V?Qnp4$bs)LpkV@Z|;cHGdb{3cX(Q(!Y-IIuaeC6&LrZRI7`VP5+bTiKyS?AFSU zR?&K^d@dKFDr~8|rb4vxZ?sl^td_8-R9>IXL*+?r6m|eeZxl#x6i9E7Fbd^Fxi&3N zCW6Y}WLtjkxv0FRKzj8r`?hdtsr-I|qLrW3TKNOyVM8mgPv@cXdr?_(69sY;{pX zL$qQ?Nv3wr10ApBNT*0~l$8uN>UNt(KTbcJ5ga-r818kBBT)%!RYY__fjmTkJVfDm zRCH&mqTn0PGn`I==2c`-(HT;Ft`hmq!9=}qriz&B9Bk@nZRN9Cc;&2wR8Qe-K`{zx z!{FTXsj-j3eW{+DYt-tqOt_I({nM%L8NivqS-{!Axm2Gc740}Og6cDlNT#}QDP@?~ ztEKw*;yG6TGQr7r4|cb-R{xhRyjrS{+e@q8hQXET(_xVeCprQ>%8@)e0u4mkU#TS0 zjjRC8{RkXMi*R&M&p1w(ePoChUCs(N3(QEP$?C$TDDW4+Wxy|i%YiF_UjbL6Shv>& zObq}Fq@xPAP_TI!T@-t(h|!B($%u2Cikh>lrn%_tJ{L3pY8kig@VJ;>L-)$fx$pG3 zw02ZNn!;T^iWZb>yDdSvTg$N{Ir|81k;RpCn&c+a+QZ#n`IrPI_s%_&7FtQhIF+`_ zxFPH{E2EMR?rt>8I0w-t`|MRqN#O~qsd6v{5(9ilaqOZ}J3j@^BU(i@Qcpoye9+|3 z8bOJ%9)~s~xNzMW!5%Y$EwpbBlWop;`Jiwsa2s$ta0hTFa2Iela4$gaqCoDVFc~0s zQFsIs<>*v9G)}go!+D7I45FEX55z>DZLaVBtq;+L4w74=&On8B5 z;TdFq7I+SLfjYR2VBxa14xc0SYgz|+H&p8I`u|XeKhCiZOjI(9YwbA05a3VBB-bnc z(Aq2V6J5yutYkVN_}HO)GiT?d((!Jb=kQ-cL9YXU1l|Dt1pFC=y`DCDIKV25Ws1TF z6lD&k5QTl%T%~zv^rNoSZgV=3Yh3=rm70 z_H5B?QPVm(Ud@^tc%DvLInZFrh(i!%q!7D*En$=ejk+i?DL zP$X|tTo52{Q*5AF&bYRk-Q3zNS*xPtSIp@zqS^kfmC4N;27$AT3YxRo#(S-bUABc) zPO${N#Q}mMifu=~d<%WvVhIz91635!tKrZ_tt%>uI!qO^8O3R}DzmzA8_ozeSC6UI zT3j04k!mR}11t*+0G0;^0xP1^&)e#BHOe&Sx~8D0PTSCHQYA;y&&;I{ka9)4O8b^&%nv;S?Y+5IWj9N8qA)pW)j zG&^1e&25t zwCeOel`^kWTBdn0%!T!$xO~hYI@PdVb=ro0PI0@~=|d`t+NpAAqf?BNUZpy1i_*KD z-h=Ll#f$d=#N$Qc@gnhfk$AjFJT4y+X`|EMsZJL#v25{0kzfuweMzOv>-3pco#wV5 zwAZQbK2V*up(liG7A2Pp5uLuOqNq-lLmQoHbZ&Io7NvKc{tn%}2)qQaVWG%|h2kH8 zSAo~jX}zsZKSC^X5}(-V$E_7<@u#0?Mdql}Pg_{E_|wk>r6-+!(L&$a_rFw8de!My zilTNpA37!YEfV||KLI`kJ_Ei0z68EPr+nPT+UZD>+6)&!i?b=yoLPuYBaIz%cA8Vf z!=QvJz?`1u;_9O;TKxYt4t5%QVsFc1cI1vYO1Vv6q*LW1TvpchOztu6>6< z)SeXC&OOnVvSfBia5Ry9>1hfI@>s~tB7eFP5tWstYBrO$$Gn~HBYBNCcoK~>bQ5WD zHg79p)O^h>hzbCqa1;Z4^Gv=L)T-L3ABCDj9!0firn%yx#54sds$EQ_oNv{lpym>q zRl9_iFyE?OO30g3+h1A!FRG3Dp+@%MM~eZA1FWP+tfEK#QSAy&wcgAs((p}B#T3=f zMfeuA3*V+;JNYb5H0SUw%EGrc^m7ruMeC@>)DtL&R__|En<=#|O0V8EB7BPo-y*`d zi0~~Ue2WO*BEq+b@J&8sWzAJqkFe^ngci4enq^%sn%Jt@{JLC3eAs08 zEjm3}P>fD@ZEX~Z`pj%Iku;2XE!FDGf6dxwx5oenQU<=IBSt#2>`oaz>L* z3i1m8(NBa#^x1g3NuADY(zTK?*;+|-0cyDrxCpoy_!00E)U;`;roelRG`f;PGBy25 zrF>iG7*cY6wZThEMTAg%4=$8%`I){Q++;2AIBKga!+IvMDF0UBn(t1zzAYAbo0i<0 zlJ5`y8d)#>ZqO6j%E&?9GA5 zBJv}1A@ZYh6!~$%5INgytmGZu=-0|YR&5)!LvFU{X&%HWDI;&6K$z|mSP6vRW(c+m zeh)+0Pf*;BFZ}SnH?NoK#`x$7E!4Nf=CacnpeKW~xCJHIyyMJZOE#;G;Pvb*<;+3k zLG%dlD8LSKcEtwK6yUc2yU5AAS-ltbH~q8_Be_In=Im(E`zs=xZz}W9Pc?+gXEvMq z>1#fBX_tB6ZX!Elpw9ICO$X5%K6f$Hycb|AZuBQXQ5zla>z zOfK#*s@uJo9R1aot)j9mFO!DiUKEl}*cYaj?+BtGc;Ux;DwMH0dDPCf8nVxqold;1 zuqpp$20u4@RMwO;(D;^Q5WNBr5J#^8uLG%r4g3{&2Y3&Y+c!12;9L{j z1qUPF-;l)|FfJx%!pkew=W!g7{QeIL%h${In14ei2{;c-Wg^8_X1i-p_$yL;r!vVI zu_Dt9(U#v0_+u)PSuGb117~J4j@^)&vzTyWFlT|;_MM&xCt>W-oFcJuci9{wQIBTJ z6ETYP)Lm}4+JE%P+eLQVLVN7BA#xqG3qyR#%B=5dx5TlNFzSOaIjEu5b1 z$v(PSYcg__kR#JGZnvb`luxYHV~w??vZ#6(A5a~Pu8A4{!lR1F->mDTc(`^eQM3}n zi<3Lze(`g&pW{|lE6tnd%-VCBrZjUDh$**2@kG>is_WFJxnURjVk)uV5tdCev`j{T<{(Z0uy+RKD_%2vs zda&~V9bk5nQx2o=fEmC{U>3m2dnEY>ei_Asm>fh*4k9LWi@6cgx8Tc0H~U-Vw*%+| z@F?*D^u`HkZ{$0-9h4jtUqiWzQ44eYzi5APsZ--_XRc~})@}0`BTB=6J)OumUebo~ zQu4f6eR&Hu*#c97(d#?t)i)o)hm^_Q*o8dR29ZB>m_N==2f}?Ra)4kVB5?+>3~vB|B^swT9IwiaC8e(x zlj23A`$hEh;*ZciIL5=8zNy(4QHV-6xo}@%*x7>Lu_uJQ0GZ#VHPzz#Pt*>Iy1slv zFH9?~B{lPVB=^?gUd~f>`MMY;6!z31X*f^CG5{I>#kp9{fvqb9T{1!pD;Xt}n0R6< zs0a_vYeDgPilQp>UJbQASxGrRg?jL&D4RQC5y5kKzu?yT!olW0r8?#e3rzSY*g{fN zSDyaS#`XgoMKsPWLSOr)WAQKgniHgZW#cKiU0K7If(cQxIW+U*AH4(tK!NlmXxYg#sZj+>guB+5<}WeOM{24>dby;r+pW*Mf==@ig-0%(qqCo&qP zQ$VS3(-ct2^Habhh0IO?@v7L19nrkgk>Ux0QaT0HBwe$vb5lSe z_B^6Y0VfK-hM5B9G~G1JoTzwa3fQW;ll5uN0YKk01w2KNOwTYS$xvs89e+SORnVk} z77wuI|2q4N52o`R0vrk)1{@9?VSkV0cLHz}a13xPa2!C&FeYWFzZ3aA5jYt*1(4L? z^=U^etVBn|F@aJC(~EZD$KAahEdlY^Omwz@{givCP4A?)HUlHJuA7=AQX2rpa>dRX+1= zIrke$=go2s$8v7Op-Y!$sFGf+yUGP+y&eX+ymST+>hnl;Vj4ZI!_{o`FNUm zou`aYUe9aw7f)-wbDq0t>h_G!r3cG-*5lINa-LHzbF>`sI?pRJ&vH06d!9|_1z+k` z(-E)pyZJ7s$#z~;M)PeuFB?&Z{!d=#N$lb&;A!9);91}~;CbK$;CH}_z{}Xqy=`sh z9mGiVYkFck?;4?cwVn60-o4q*`#zT*Z07@yOMBb-P`S*N?Mzi>Iok>6*>*nirEYIK zAJ2C=O}6uiGMaDO`OJv=zu69%?)Y8cJ>Y%d1K>koD)15TG4KiS8MZSywH=P+G@;~= zv6g=$hWVtT*v_{`sLXceA(Z@&>Z3QCnkE?1Dx9mYP3w%N-6Ed%s$BeU>hLY_A7C1F zd8}PsN>q`${MwAZrD*=^Qqrt%Z!@}*WP5F0y634br6R}3lcOv#-z=4=%Wqv>W-z0}aUJZbBaNNJ+2HcN@a!R{;1?V=CkLi1p)^F+7ZthA6|$I2}Yp-Kz)&Or-j z;+O9OrA3s=bXsBPg=H@Kr;d_!(a};*wkS2Ic>?qW$n2ID1{OgR&$ZRW0Lm~Q)Wkwd znz-ym6U%$`U?iD?CI$+2lO|T|okI_r7^GD5stM9WrR9L-fq?+2qS7EV;a&yhpcFl% zHspZh5@RWvu&;ua*47g5bz_g}-sPoBlH{`n`aOE^g8q_b_*91y$;t^T>2c)CQi`VY zL?@=E#q;t}NJ%nr66BgBD`ET}R0K^lBZHiQWMY1Ko!_O0N*l}zS$YI|y|kfJ!NXOe9y z&vlFuLF9t~`iH^%noP8}dRp2{ko`1lzI&YOEp?X22bR_b$O)Fn36{tSmevP005$|R z0yYLV0X79T!(iS_yH4Ro!V#7{3O_&}+fl0dTC8-P?M;Plau$<67%_YooE_3i`SvoJ zn^{`JZ`2)?r9GiOJ)XyUb!o)_@bdHB`Mn&U7GklgY2 zh_n+l@(_}WCQL%E>ZP%M(ZW(06whnsE72-B>v&SI207z?v=xhPrJaRZ+Cyz3Jt~=2 zyKh*TV&M0ekSkLRrLy)0?Q^qPA1RF!TJ0dhfOof$$7aKgXuAl47)6>ovl(t#%qvMo z(@^VO6@p^17uc|7pd}+MODrYLS^A8mRP-u*MD;H9_Wd>7*+V#+PhEHhZ9TmF*iVj` zJyvT3rCGs+CeuADI4@mwTV*!K+-Iq9bDKeFda&4c!7A#+H<1sKm9_)62X+8P13Lm^ zfSrJ`z|Qt}9KX8&WI{`1K^1QgEcV^hV#C{Q0KFA;IEXr!j}}WEB`0b>rcq=n=_eDj ze%hKU)uj+=cf0&hl1!=RvZSB7K-QeuX1n#I;BbnSq^NK2S)bRWsF0`WQnN4vjpjYY z4AV9j+i->0HWPB!X0ur_FHO)IZbC;$iXUkWg@-Xpbt{E|{*mt`lLtLOJ5FOG{n5j` zrL#%$v}q!>v@DmN6VDC?d#kPK>ITcOb#2f=%m;(gK>%5{5?QtqS+)`xwh|e((vkL; z3|r|a8t&7y;dm)g$EL#BROECjVm=lv4R?lAE6sPQTWpD6OJ{1;dzvrq2A8v1xHOhm zP3?uI()Q(33#GF&R!z+;t*eUh_t})r^%;x*LDs2oPI;2lE3pLNl6uxfH4TIpv~tNE zG|L%cr3;md9J1DUMVmKgduD|7mQf}J8$k5KITLx7(m7}f6UT^r13bo;u8=|6OfIs)a=yvh40wU3M2*jJe6uXJCnX7Sx7H}P}4T% zT6jT+0lVVKp#iv2`BIN?l{MSck}34kRwnH*-GI7~Jz#_*1BbK5H!~PUvgS3oC}->TmW1M{16}&SRxfzA`Ms~4Ok)#SmN6m#lNK;Aow%Wb*A#cO^A6d zVwx|XO9!}4G(3k6aJ}I48f4s{7-BtqhO0O8$>#PqDoOA2P;ZZpo|H-LoGsTWdE%kOOPrGafauB!7FPn*rOHLOi%GwylTB>#n5>#l@$bL8n-Ejc%L zuzndhqf%_?7&^&h4@1*lKHYJ^KF=cG3mH9xl_EAAjPjP;N;8CYQsl!R>;$qxnnCR2 zeo_2zL@!~#!fLGGS9FfV>V3aBlE3Ywi5qBUrb>8SDxu7L#DOqtW7~teGcMU%sPZsl zQhEBtu#_DTarzM;8>*nx|Z3sM9?Nv3eF| z&TNXv0NlFPKO1@%?5>wXArY69`Woj!`peNC-H&M2WOSX&Uff zU^*}Zm z2@3!V0!$vubs#}03#3kl&yARz)CZKb1hOPimsQG=M(mrM*z=&2rG&Our7Uf@w<={V z1nIBj#+jPzO4M*QZ@+K9ysXj~HD$={)Rb=D-_BFi5-5hfBxUxJl$Qqj1IwbQh1x2L zB|Q`+U(UoEmsc`XnJ-1HtWx(h8DmdQc@@LGy`olC@|>dj%}G(KD~(Z9hCH{58iHb0 z0#*iA0agW8M^THXisI{C#-esbc-eoHL`zylNd}{(o5=^eImX$WVVb@s-gxvl!qsSL zxia4nOuGdx!`tLrX6H_sT|0cFINj_1jTu!6ha$x0D#UVDh%MR)(fgMR$7w(_U~Eoy zw;4gSuM=4F@h9ojTS^(dn*UbKQsnjz2cu!KwKCBS*S3hry zL|GFisuNScRcuZJ{w_C?3YFi?OhF=;Fz^I>id&K(X+MxH8&swRhcb{2oDm%LeXt6F zw(PB)5p4fm(4X%Ea6MR^&(`uy@$%-t7QmLkR>0Q42w)^I3fLCd4%puQP3T`H^e+?o zmkIs#m(TD-gHrPkUbhqEYY}r##7v^W*8Bc8s%ZtoGw9!BM?y||D<1~?B$96j zOG6zlg{9_dDwvB7Nwt=b5FB}yes@$pbC>!So*&uDL%mQMr!ET4gp>zgy7WkoZYG_} zQB(TRF+!WyJ2sx*6I4D{kxX|O>QwJKQB$WlPO*Dey&j0N!>}2_UTTwifOz>ZRDL*c z1aKrU0XP~s1~?Wtj^olw4l+FuF$3b@MtUd`_{XvDo&$y*9lc}plF9bCSh z@{(vvs}bGvqvj$_?XTkSb&B$xBAYRm@2P}|Hf1fx#-+w0?#i%mwiZjiWSJSj-Jp0$ zwYJMWSvh2~y{NN%55&e0-TOb~do4rvz1yrT%@yRjQSP%FA+I-=?-!BHZIk6TEmL?w zweLQjTQ5tFz!O}v?M&Z(Zt;<`D--HL;i{7g9h{>PJguf5I~cBY0`stP5ks-@tOT(V-h#t_vtU&jW;Qv+wACX@F8GG^ zm9pqySwE^0*p)bCY51yD7SGf23Ii!mZm2DIr9GyMbqeHd&S&iUSSw^L+iuXOx{nLK z@Yf(*CD#{C)AbopMAobV<0i@KT=_Rbr|Q*@7C+zJRZHccq9W7`Pmx5HfzYvC1`^}{ zt)R#wDYd4PLLM8{JR#3g%QQ6?UcFcQNiB2ktNoNOqqh>J^~x&Co4w_yTjY^qtT^-! z{?JB9*CNZ$%%d#NI{X%Ayn9fa8SD_x4)<%yTLj0+$COv?J2OadN8bgP%?|qJKdU^O zSzz{3mho9ZFf-UZo*tYsGdPMn>c375Bt*R(V4qw0PT(%!Zr~o^UVs!^nG{?30pLMk zGVl=au>F06-$#MRfX4y(`!~Q8;J3gNz>~mJfZTr?cm{YD-#E&R78~FhCH?vxDt`@) zWWMor(NB-Q@sIK}^I1Lk#y2voo_yn<1f^$x6|9F~3?X^XqCuQk^q-ZQL+RultY|yj zI&MSW!7@humOO6UseMp{)vjY?l_9!mrANOBw*#5(lMC8LdV)mxHFWkm@JHYc;7`Dt zz@LG)(B){S%csyJ<4m{%g2~pTBpPGKna}ylA9=I+^cNzbh-MtpJ$Ac09KKZ9O%x{0 zK*i{`ZgmrkzX^ssGG8+v7RxZ9i@(dHyT1Xr(Hmy9N#Wx(2Ou$P*h9v~AEzO)z?I zP`)Nr>CDhvgQ{a>Z&9vMPXf75hAfkqVXKKqku#d_-v_%P*mGetl_X``VluGf39y?F4dWa56o7&tC0D&(W`x zc}tC5AeAc60n~s_pbxMB&;`^1dENjLU?J>h_tbvEDicqcieEtuC8wE0ds_P$AhI$w z#%+liJrwOT&U7v>2UJlcXG+1K%#`$rD0gsoL%uiQ-VidqQYoE+XaA1kEk(4y(Oc`D z{`G@`yusHpc5$@haplTR<>2Dk!Sdc%$L%0{rrk|#=T8w}0O={+Uz;`yfC zsg-S&+QjE}7)W{J*vvMlv4OcG-fgIrM!QeP6PY>d%u0&EHl z2S}P$NSIbgm{vvr+W@10Z86MaoHxA>PE1w9y{WkD>Pn*HtYPk9)NoU#hI|W4AC=T; zQw!%4P!(pVnR&NqUg2VrrDjrQo7XuI)3*Bw7crr{zi`2>aM|DC$k}3TPO+&RAQ)0W zFI>hu9FL2i4XYd|81~gQQh9T1`<9mVUi2Eys5xBQP!m%X_Muhw0LblD$m>?f>sIyy z_6H6C#sde^ekZy1lidN*e$4$U6Ob&4PO(u_TH`1wawjC>zeSYOhBtg0iR@oC0Y@cpbq%h69} z2J4rj3(c~h9x+xqol2YuoDG~qWwMv{_b{`CfD>FRmuO`!wUzlJ?wjqukdhAPvts6wX0Ubkntl`CQonRX%==+QSasG%8jXr z<|S6@T9x@);*5MR_Y| z*FZ5zDD2@9dHI!(F*UArwJZJP>C&*$i81%`Buc9PuKGwt+H_rQYURI zf0JZIwk_H2MvtFpb|k4+FnfIm2lT-NrY~l`BXLV?K!+v z!>MWvtacUVqtPN~op2xX<7oY=1j0#l4-!8dJ;2`@@#@~CjNYKuezXA#q5*|SC=-?=Fp~dN%X1&wZ4wrdPP;kS`98V0V`|I2=Ese zH-xdICDSg`ZtYp=Gl8ClP9xf;L~&M2*DV(JV%QnMwljl~WE5F|-j^<77NB)cc@@83 zrQxf%u`1DPmFToe^jal)trERfiC*>Dg8UM}R*7J%M6dcQ+ld}>&hW=(*+h;*sxGb# z@`yE|C8Vke>XT__5-ugb5+%hzcjF`(KR7Q)x`f6#oEB6V=;IljCIlHFhv+Uk*@L$l zDsZ{3ei6Iqyv&BA!mCS)5cV4|((W`NW$dmprO_W!s1wbts8p9S;v3YtAtiR?T?Q!> zr{xN@g=8gUyLPL~fG5)oyCX)-!fm)^BaGXkm-==$GHDE5U7QAC8&h>jU@2f}U>O?c z@w9OY^8O)BT{r}x22)rP{l+%V5L3Gz8b#ERHHtSSsjg(`Zc+tG+xh!=(pYI-id$I_ zO-GkLV)xq!g;Y_0TXu{yXRof(T)^DV!>W=d=ymp9r7w$3ZtRKwo?hDq)(KeF!!^{; zp{KUv<7fR|LwwKF`$kh9E^JPLpSc1tK>js$?3f zYXWNlYh%m5Pi;9o6HCUH!?iGyO%N%G{$Ooc!+L*oZfBDO!qv@8>tlR)B(ZTbj`@Lb zRb%`dvwW0D9-z8~@X1FL%(C)%fU4#J%n%a2rbCDry_*;shtT|?JB``bu(adU<-hN zyGp=a-5MA{d$`x%!WWseOQ3cR3fWoP<1O1BYH1673Kr7 zs=mIJHiR}-E0^88hENwS^I$)?tx5{O2Dfrx>s$o4E|XZ*gn`|SYG|d5tOaxJ+2lFA zL_+5NvMcF*(ut&vWT~9%?4i!SxuZz(Fm;rfquEQUB|WgEbu}K8ufArfy(({rRe3wC z%G+VpU4h*IBJ(Pdd6me#x)%-W-V*a)TCW~LIZ5=sZP-Jl)U-*Y_VeJI57UO|Wg1*P zTrh-d5}uZya?N3aTRnt2910u;@I9<(YU(tC9dH>KX|N_HH&N^Iv8~IAS!smtc7mtv zp)Ki(^g_YvMEIWw|IbqXMLF4;IaJ|h_)9dDL|<6`w`TmMHg2QGq+r+9773B($03&^}X ziT;riWS!z3CCI-~I?9c3*5|N@S3E8x-N8(q1=#AnN|d^+e+pOUvL4`>*uKBIkqtib zG(98H6HQ0a>ZnP}R zc5t7!cEeyhJJ{IE(V9qG^0ch-Z02F|K<~~BcI0wKu#NhjQ2}dRRYL9Rt-$TT9RM2` zs%&7W-UHkVJkSG7<~|!4h!=w@n-;2%((k@^{ca0-9q~(n-ZmqLB){XSn6lY$<@Zk>zNn-tVK9x$RW4&NbaL_Y za-OKm>t7KJ9NXP!hg$McwR`;m)-MTbG3PX>R4=NZEE3*sLs9kRo)PW(6*eTc_Ip9J zN0Vy2=1*a5=15+IO;0IZ!=18ReWm9ztd;8dqqYz)Kg4bfmZGb#dPR#+&bMThl0Me1 zXr@^`>7l7;Da0?Da$gtXd}_*iGgYl|K68_r8ZU>RUdXG!6TH5|LCLbdF*~@(d*@r$ z;iT`dTZp&87s{j4`Bv`%cV^IlOgq^IfrRMK0M7!?0nY=!16~AP0$v7w54>W3U*-2T zKz?5j!nl}rs(2qWm_-tXy@xiEIJTYYebJ3S@bkx1ELmE?zSmU!K=s$#06$eQv=ue2 z)3QkVHRXOJIMOrPY|UMV=O1e+CXs$do9=Czj4Zl!*^>g9pMEM-src332*XE+z2D!mhguLQv;O!DwJ6q85N z*B`2Xm#4OmdTKQTkV)z?Hlh$28^0E08Tit1@9Q3ty48OOrWr+ZuXFSZ0!b4}sb0^y z#$@dNDMV6#WNZ_*Yz*PQ1jRb$o?1?|!3+g1?p=;a!B3#hWnkO1poC?9rq#9}jLbJV zP??c*+8o5lHDWt?C`c2wO#_BhT*ig`!O$e@tJAeaGiJD9+RQI`%4nY-Gwfbd)5bG} zb}o*HcI`Y%2wdyYApM$;h^{iV14ZW=-Y(Sih-fn_%8rPxiU?kVb3}A?ws6S1N?S2I zZ85Hz+*|s|yq?ndM+aT{nUjgKZn$nTOB0pqCr3)Mi$$Q>xTkEpiP^Sg{NH!77iBO1 zAu|?TTjr}4BYHS!`nzD9`px44$(+3hybpW;Oa(pyJ_bGoJ_9}nz5xCPdg1<5hTom6!j*eCIVwyGnwu)B30Ej86i ztb4(tW0X7=8QY8pTf=Nyd7gyZJNhK9OI2B0Q-7q>n!>=`iyXQ#spX`-uww^hW8x;s z#?qUmP&%``ZEakzghbqs@3|!5Q>LrO{t@(Xl0SmpTXyR}|8$vGRZP{p{my}^pTixj zOtP`U1$9(!N5~$F7aI3a{DX1npW)Txx*rIyXOcM#-*#WTZ1_<4C=pNFp+NWWRR^^-Y%#1^ed5Z=SDfb z0k@rmn|OoN3xTGQ&)37O*XhSD3%-`b*+2bC{VKdSZe{SC3?9Eja!N9pX3>k+MJ3aa zUD<4Mx)I%-h($)FbJRf9 z(}1S7H0>8bSVvS-9SSEJO zjXvoODh2C(g|##&sQj0vl=^q*jXwN0tv{$zjjZys_u>IlJv7Vqh^lT*?Fl z>^z+jTsJ$|IjA&$Dggu&NlXvkoDm#8JGi(xMsTMl>=7)CAKnIFEbSNtYzyoFj0SeJ zFoxfq0Qn_P*f92>Mrp|C zelZSgba%h_!FY*#x*v#_(EF?XHaKn+kK`A-njH5Z_e6Bz<-F(+{bUOF2yC_dEQxZk z=0)VREM4)Oxu+!}Pe}DhB!Yp--uOqu zQO1ERG1l0kJm9E~^nEFJ!r+N;n<(^Vh{2U`Oj3uYJrkRWi`Sx@M7~l&!b#9Pj)j5r zPP3}eak8*+MC*D)+8a~?i3C&pQw6`?p+AD*WJ7ojZfaW4q@YWyWh_NrnR8iJGs##g zAd2QIicZDG^hq$SJa`+_t=iQsPaVf&mL~ucffIp~fm0R2c%xL)g*Stmt|84tIySeU z=}oMrbz4l+lzx=&B=sFFb*mcriW{Xl$S#^1?FvUp0B0jscVh+hVk|n@RR(KVj*Hc_Wt`)|&ay3AyUVu`j*pBw7-9GE9EB(n@3Z>Zi^ zowl@_u?}r)=^nx)>mK5>m2H_V&`9qj=f0+^%|v0Q*^9cC?A85D*(dSl`m5qdvIf%h znZ4(yh6sz_GXpJYoQ|gjr?-W<4#~G_m$kc2B|qr5CNITyNESAUx2Ig)n$uxZtojBP zQ*+yFCYvg+NhcwLtL-N4&32c5f#C}+qHFw_CZO2%*YP`*+#D0FrY()`eTu|>yU5&a z3P>S;Ny$yrV?0`G)T8fT^Ht8R2v>ioji%dNJD#Kwo&uf*$i;P#i|Zg4*Fi3>;|1V% zz)LjJj%^$1T~*djwvi?$qYegF5ih zq~1D2hvvBQX%*uT-!Uzz34MFHBrNS^t0|itm(h}D+YiD*8d;08$NRa*ZvRfLB#&**5malt`9{e8lF=-Q53qc6Fv|Yak5#(SwpLco z#@X2Y7Ba%3Oxr4p!^U3r(pIAP++ne`pfD}iig9H|@QLbQw|dnIK~O6K`1KlDt{QXg zTA4ODsBIfG5H5)iv2BousQ*hF^c4m@x4}Z$<92QE19@!Q0ImHWw!y;6`TtoPG|)LK znzg>bLckAzg=vGs(>5s7=?An<_ymUAAK{YtNZSU>h^X`12Is?WSx<{A&Pj`Tzfv2} zs;Bw#E4AfXYavdC;(F-K_NmVK_o5cd&tol!;=CkUZJ?4Hzh-NY#tbk=Eu!NivVl`< zmPC&UGIUJm_-FYlrKBBv#)E`ZIHv4e$Vcp!_QwlP)NZ+tc1ztcRqKxlECVbH3;>n` zmInp`D*~J_A0M5XN4TcljPehJU4s&n_*iQmLyhP+WuiB>Hi}i%G33|Q6cp=ev|iqH zT*HLg+O14{{qF)3BE240*B0jaFnKQAQ$28Rz4V?vfYy#&ZgK?527=;EN3y}KXe41sg$=iJI^_z!9o|@)0nw!Veo~I_o z>d)yEH67?g^_n+rQoW==eZ96Ds`UuSZP)b13Nk!3GCVaB4K=blHL^RkovG>BX-$h$ z@KcN+MYbK)G~Jl5+a8|jiDi1=lohDCBh8Hmi#=?J#*mJuX!@4T!iVsqS__NNzp97+7OUVfuZ~jEPHV zgLaH{X+h3%&b1eieDH@3^iLUg9Bs{fuOAYr=@xxF*q!7s`Y@M(mFe@=_ zpjoph+a(;^UBWTDgw1k=c_wUzH9br-YmsEu%xVBR%;ue|weeDxG*l+M{MDoI2d4PG z@V90VK;90D9hXFkt$=9g?|-X1GCQe?~bCBHMX2f8*v zP_%dGhtHGv0_mJOt#(yBs+Eo3xmSkG(J7n8{rS$FE}5sw0r!|zc76{(7nEZKrS~3w zoS?Mrh`sf2$)~C<)5blx4o$MQW!zg2*VL*=oOP03d$=ZE1;g(oeh)uMB$bBwf6&7< zp*s&f{FGFSzVLnzKee6k|3CHc)1<7%u>YlppDrvUUh}Nt(LA^k$QHf4B6$!0}avf!vq9q6uu>@q2^2Qu1lYl(`TtX)b)CKXlK>hkZcpsw-$Yc+~6VE z1VoCIiFc!iB>H6@nIdI!-sB-w@<^G$H+x9w2I`cRC;B8o6T?gjL}e2PC$YSZoy3>% zU*=2fQqF|CMR0XH(x@c990cEFBxt-<%hW7!Oao3FTw&o5yMeuVElQN5uQF+u9<)8X#xU87%R5p z*Kc_cb)CZ^Vh|JcB}s3p4~njD*yzG;33u_An|*Mk+|1w&$xP1(_nQ%nV-u9Rr+tD& z=*gD?zW^=+ehFL-Tmf7OTm@VWTmxJSTnAha+yLAN+yvYVOag8JZUtC_sIdl7V-2Eq zH(uh#)JqgU{E@I;9Z{ z&n?PL#UYwSxsTbNlYl+JS~{UrfCG0O===s zwkRgv_z7PqF~qqODm)q5C!1-luQ9=WD*lmRJ_V+)uB;nAEj+X*>-)tk$(|g#8yh`q z&&VU`ziD;U{&V#a>a0G`P6|GR?ztWddp=*-sa|0($fLAzw4mMfBS+<$&B3d{ z-K@B26azaiE)p8?zCvz2lk`aGFT% z_l~XgqM1Hlkwva9HXM;qla1zS+D4sRzGJ^G zkB#$7S0~fW21A2B?l`g;!FWAK{6;cRgZd8UmCD7}EG#-ZIH7q#G0+}=K+um~`6%!h z@Hp^m;5Wb&`}Y(4J_$SpJPkZ!e_6DuJrA&GRb$br_M-j!C4PSoyaN0IVDorQHjm$) z_WJMvdVS0U;#eyE4z)_+J8iFj*H@GDalf52;^j==0cu-*~#2+-nQU3fug&;J>wm-dgZm52Jkx{->>!bJ2pb z)aD88HI%i!|Gfpjrlr_$T>A!K9j^9o;9KB7fULv0PxMA>*i^vd-Sy4_f+ey2L~mzN z>eoC!Pfw@@JCf&OcW$drI%%grcgBWV4-4p;#S})SvR$jnoHe&|xU*ys&5;i>rkZR3 zGrs(p4Q9JK4&R>H;D+RI)TEG?fI7=gp5_@7`yo3k@>J}wb(-E;H6q-E%dn?b=T5c` zNM3Yy7@T~4vc!d*^J^xrvu1Grrz!=vP-vfCgw`F`QX$*By?CZ`L7~(6N&B~Ewt;t7 zi;!lzGcS4%7LC^8qg zJdF>e=RAcy>4=j>Ih_j$vYp4Uy^i^AC-WY42lhk{QIz;^(U6>VD6M| znB-i!&gXx_eEtG`so};M;RGGs^}Wi@LJ)Kofe2vS?PSK?Sq3UV73ctJKp$WMU_qb@ zU=_2oFR&2s1Axy#$1k`sU}ckXkgbTF1CT6Mt=W-%vV+|dNUlu>EDMJ^=buKT@ zrJl0)i^pu&Orx|UW_~p>JIg4EnH5dc_9>K1;3lpoiJ1+7CgGd;`wjhDf;jW{oBB7A zoc;SP{kvi!J7(&g12ZAs=9!VvP4hZe&^m0cbzqL-&nC19ti^9IR_9`NUEZWbbQ?tH z02HD`e2Ia29n z<>-Q`(CO1OBYZijBWtUU3+&3f5h=t^Op?r7*_-P4##SFH`*Xr(LW z>DGmA$BeGC4c!=}lebBoU7FE#tk8+SZSj8fpmS!hYrH1^Tg&`Uo!{ZXV)O^rg*(>= zHUKsRHUc&VHUTyTHUowOn*&<_TLN1FTLUA2ZGe%$C}3M)J79Z&rPEH9PCHpT?HmJ) z4Z`q}QpLQlwfJHIN2dhA;tLLXs8kzte`&#@yj(DnUA3ipu~@v18(~UaB0bTyjv~b#(v+@JS2g9e#OT41e0p*) zpLqP^=)t9=wAARq<)qYq^kABF+0i)Oq_iAAWtKnr;pRX%H*W7*PZ^go#)U>!IuwYQ z)Pu7WtL$NA6)7GroW8CH7b{Z5Ls~rU;*4KY-4#W|l8VS)eGzeG6>(J+adj0@YQSnv zJ-952P+XTU*2*Qu4#Ns^SPhlhmLTtL+)xjm*TTDe5!XaRO*9k<4U`nWmKMK`6tCrS zLQ_3>*Rb&`u@P)sElkm^Y}QTLh@zX9HC3LRv7DL$O5uOmU zWM=GT!&C<#*XrR@2D$DbpHfasDJgPkV>Ogbr4(b7)9c}@hOXh!otYIfT#XWn?#7q( z@FRnpc(~`enwUl@Z6RfFW~0=^n9R2IaHb*b>k>#8QKH|mA04b~za*7Z$Tv+9L$2CJWk zHOVPVN~9NWrA;`tUO3PoFX|!Rk!P8N6Y7PD25m79?SW>rBkG0o4cg)!+T*V1(g-bj zq!ztJy>P8TUcy6u${`y$t%n#tTJ?g!Mta*ln-|cvxTM zv666Hy|}(XTh2rKXEWNwdT|Sbw!DWntr_j4dT|efHqb+xnMZ3pQZG(0SSw^$#jpwM zp?dK`gSDcERcgYztX{m{U=8xHYE4+r)Qh&wyFIL~CakCG#WxJE!5-E^S=V(o#{eX~ zz41c5__d)J;!!Nq3&nHwsA?!y@+by2NiwY-Eo-n=_OJ%$v68TVJ+h6riifspGupEC zXsqG3s)x2_Gup28=x~F!nuoT29Iw}Z|afaIJ+Cy z)T65n?obbR>$bR8)}y-&?wTI%4wY<@po3*;TlM|ht6v_ilY}wp9EAa7p?YKokhMH6 z`&3weG^0%~Ou8Fa)uRuL3~PJT}0IU07Is7<2)Hwu1D5%*73L;S?bCQ zVY%$8Ty|G3dny;10+x6QMkj=&eMONk*W)fD*f5XfC2q{h$+f>XW*uFRH#CIndW4tF znee=NyqzIj&m;U*oYo;%B06A{LuE=)m=Ri4Ky&xy(tt-$jn!&BArV!gDN;kBj5>ywO^otmAZyiQYI z5Mr%oC@*}9$aj`>wO8t;V+^mYJYHY+tl}gbUoTx|NVfJ!{?Ri@7n(>d-){nS1&JQ&_;P^eVfr1u9ufHXxn;di#fE?#aieR_3}`Iww;HzOw?qB;ykGD zkF|k*s`dSu*7s6rna}HG>&v$Hn5-DNNJ6`d8NO%K%QlSK!NXl8!@W$6OROgem#dc# zFw%|okk@ifvSg4i7vZF%pm`x|d|EG`VCZ)A=r(dbvUH{P3Mi=5RZ545)<-tpte1ak zsKPTel=&Bj}Xxv#Z zUuTNj$t!MTR>`)dp`F9(<>w9ISdVar$i-wUs+briwY*(xd8cS+O1=EH32Jus=*G^G z?umMNnxPx#(d`zck$LHEE$?0}?|yB-3+k1HjflH=B;&K949SB^@{o#X2&?tV@`i9% zk1z{_t>3^uP&aM!Z|W73?djUhqd2W8|V?TtdBKBd$F?hD|-^U}r-Rt|tfTk!taVG^oq4ZCwog2NZ zUax#-q~F)$GTBRE(Ki?_p3$ayPPq&hE;3P}W4u6Dfboke(n0mAb#D84%pUUwMGA!( zENSf*A%B=<=}cq4sztr7B*)gPM;elYJd#gK zT^*@EQkv-RLKFQ%#0yVT@s?7hykRtq&cq+R$q$-(iy!=vG1qnL)ssyL2YV&Va`m^p zZPQd^W)ciD{1|pPre1yAkROtf$Az++g^1>uh0s#y?`>^0e6P`8#iUkIsW?T<0t<)d z8TINLhUcLk&$9E1wn^SmmhWkk7<(LD?+6XyVIE;;scV6pwn`rer5!Y;sxTj`wmwA) zg!x>BDSgQg+WLwgwDmPVcyE-3_m+Ou)tQvO;ipeh`j?8meZ9lR1BZL1ualoC$T5>?O8 z+G)Yj-|8K9MnA#hvW=6{D%U7<-+IS=rpTi_$`C*y7 zUg+WWHY|@|i)@ycteu9U4d|TYR>$Qyx--#aX$!^AG77QM% z*G3qu6Fsam$}arV$+_)nbUV5#sbAW^pD6pmdTkd&eUe9g?p#veU#}fus89B&FPby; zY$^NK_1f8n`V^1)M{%|sv!b?ix7x;wD!S*}%OU-&l$4A7l-UE#4;|B(=z{gy`DW?k zRFCxySzup|g>|_stjkqlU9O2%%Jkt%QeIG5i_*kH8lLrf?Or49X&%qpGRt^bS=OB; zC*kmV&G@W(aJolxucNX3ie|ARPZB>`uYIb;)PplTnuopd(^m^lymiP!E%DRh9>PuQ zwdtyedT^%4?b*yfloJ(uAr;|x)x^T83G4$+EGBH?59*yJHf0IRWAmQ#OywmqF6E_^ z=8JmgAX|~MJ(|y)pOCpPZO~r@U8ml;mc>3N!!F5ZxcOgLUZ%XPJ=n1;2>E{yu(GxA zJ^Hj-9#CG+KJCvUqC8#bvGB*^lJfEol~um->jwgnbY z3*Z!3C@ru!T3|u6z#?dYh0nsyz;3`^z<$7iz@fmAz%jrHz{$Yrz}dk0zz>0+06z!V zU0(PVa4m2na0_q;a1ZbR@G$T=@LS+%;CbLB;19qbfjOff0zL!&2K)o~H}GFz zCi}|+AOb2tC(s4-1r`Ao2bKl~04o54fmMJtfVF}3fQ^97fGvS-fbD=Cft`WffW3hI zfCGU;fg^!qfD?d|f&Z_)JN&FF3&aCR3BiWHOmdCP(JFGMP*!lgVT2%Rm1AUR;{+#Zr-Rd+;VkDk&jl`WiOXE!8rQkO zO>S|UPVUgfUAnnX4-e?&5q&(SpC=6PltG>`#B+vu!3ZyjdBrGMa=d1YH;nU^3EnZu zd#3onG#{Da6SI6~jxWsfl?A@B$aj|b!7@Kt;TNm?W{p2_HcC)HiVZ|;q=?NFvxO42 zQpz^U*g-ivsbCkC?52u6RI`^F_EF1z>Nr3>4K&h3GwC=PORHqmo=9xUCGM@8IP%@s zv@TEC-dQuN$b+`@b^Gjoy_z2Eo$ zzW?{{$L=|E&f06Qz4m(Veaa($`N+qF5WU)%6rr*9)l%&47$}s+R~2U}6NUV$(L%{u zH8iumWKLQe8(!?0C|PD^xMEhUjhzi|hh}z-Tx*S1HcD~o94NygBt^JvRdU(9B}G$5 zf9Jl4XcjH4qDh3MSc-nhNvmQNviY$>a?-3!BmrvX#&xkkis-fGl({Nr=EqkJS4!FZ zcvviyqIG~F_ExevT`ZC!UO#wtvKSUi0EnAHsj|IPn3Uq`j)8h?8xJ%-3Yev0PJict zfOj?rBBD*iT18aErO;`*g;6sn#j1cY=SD)TIa!=StT|PR(*jsi#!8fRu~do$v?yi8 zf@M+&T|5u$rPb8MSyE{EqAt#s;*@&U49yH=%ayP=M-5OX25L58ajq22$W{ab zI;+tsMPv-@?ax=NQr^l)kqnq}kmx838zZ7iBwEEv(GA9pP84!h`MMchtm4V!GrH)3 z+-9tbF3!iSa#dZd#r0rG7whq&JOzjgaARd5Fp$GgHb13{O&~v4u9Oez;vy2iTw$D1 zY=K1av{Dcz2vs#_0?}5Cl`oVgb#W=~ij3hhDOxVf=ChT}Qk>Z_&%)E1^^51XigvLB zL#0w?E|*H_Vkeg9(&dk?%n}c-5LpO%^iMoJB;u06a~lXi)lf71Ng~jM9&*rM$4!z@N*kyj9AM8bfRk zx-Ez1?hGDJSsA0iI&PHAY#F~sW{ezbpD|X=kJ9AINe_>iGm6zxu~4=Q7m+cVGt1?K z;ou{2u}51`_P~-Zw-}w>saPtE!!*GzWT8;G8HbE)zJUzm(1evYOalzD%n~C3r>v2Z z*fm;o9&k3`Qk?7Wk^PUKp}wE|{V znQU+`w`xnNWX_bsq5!oT%jRGYJD^IQ5w=;=_=J?|peVJ9q5%DoODBsJ+tuLbvUzBa zh^m-c074E)ae5&l8Dk9z`-c1vF4@@xWnrpoOK*?o)M0`Mekc9JIuwbx|w<6*&N$a)ZLlN;(WhEYv;@WvAnn#-g zrq2c_;JG6p>3Rnloc0P=5YhkijtypEU*v4{e+8nJcH!vhy@`RC2 zPp8vB$`;)?WaV;jap3SIM$aUSY|=_5;0ba$MpiQO*Cm`m>nH;%bK2NsjHJ`b8E}tu zddQ?G8Ys)@bSpnIjXtAeXTsRosRTNe%U-9v3Ax^_1#4_9JDMdIq=r!FM$qd;9XmS{ z+;>Ok4T+%MyGj{2;)+FVTAs0rRz5?Brc8u3BROk1?s8SjW)KZ$Q@Pu!R7-i6#OeCM zjC_WbkHM)QmPt9oN`YBxuZd|e50ZwVFv7oCc~Jn`e7-8Fys(fs1LB?vPKz=_G@?(FzPrF+86Lk_V1jyfY!bLYfFaAFi1LPR6+geDyw^?Im zHCG`lb17Vu@G39YpdgAe=4w*Wsdm^V6|B(sNlQf&_s50!T~R^wJOc{ptHPo1b`w# zuA9wOrW5uA^f=C*$-113bOi~U(NUh6goUMi1-<><45Ci4XUc+MAEV^W0sH6IWDtel0&rUK;!dx>h8_6Ayc43gn&9&XH4ZF=HY z85hi6c=ZmpqE^tI{(g;MP&Hk`%9w0D;CtI(@cqENlikZog+UvH#FfD@Fd6{1f;vtD zEN~}ad)0!J{iB)g^op`WZG4yU|Q%_)H%YF&Kl zb0}MxFshJB#*oRH;~eNZvH?2}3Eo??j8vcS5&XA^rwXBA6P+2WFhtRArE+r{4 z?Xc1X!-ZG&A6DNqIwp|{pp;j_OTtd%nE6qAgwY9W^tzPN_Y)d|J779yh3Di~H^<+U zl?$?wB26DbQ0HmRwrm+87P(}ijFJ>31`c7yIDA&Z7-2O=&B7|PPs*dtj4D za-9q_CK3xfey#5@z;4_p-=GDaplDrR$Yv1u+1l+&z2Qi_VqQxJi|;vk zFhp#U5~Uxg6!3|_n)IG(F=vIvk6Oi(Vn;+guI$NAU{4N~+Sf~MF=KV?$rZa@ZBbRD zU^}wa%#A`*$rCnMlysUb$Q8!!beif@F#lJO(I7KmmS$F=I6YBdJHP|;Ut|V$|LtaA zFfirVsd6kR8WL&O6lA>7=aQW(uwG-i0(1uJOp!>=nr_Gxc8%F7fRY)`;OKTor;29N zNYbrMD-g-#3zON=7090qV-O~zWcy;KgM1Tt0~@+TVEkhDbEaVsju!NG>_`~k2S?O_ zG^EozuuKTDiQ2(VXFy&2JR*Lkgyff05}(SnZ;(x|W@?6^|74(zeUxXx&j!b5+u09h zuebA3TP-NW$>y;PC}ud)pj2iQfP2{&?3-Ypz=N4aPxm&J1sYI$@Yxw%WqC#ig%!$* z2%$Ijp=`xeAdSL9E0{T*lE~3`K>U zvO$W>XeMFXTxB-=3HXWmr{f8xE0t=|DI-rY*T9)MJxKqUK~c2Pfyj>%0IYkJnK(6J zOqj6Gq?$alveA)DBGb3CawwbnJxB|mAX{BT2^j3l%_ss$9Cwj>I)nmv!jFieITsmZ zoHSScW_hbc=CHd)(9{SdI4E4Cs#AT(caS!)H$8HZ8M~|vfhs2zCs3%jdErfi*KaNj zhZ9Ds=F!4Q05Mg~*>PeN@z9P!rb4!q#e#V&db;WQN$$t--I#c<_5m2&Nc^49y1 zy~+$avWA7C{yA%`;*)QzMxlgJ%P>2+>ZG&Zz{}#;n{*nAyTjGna==)7NC0Y;CV}cu zi2_Ejklb%JKME}(AQ%m7S9px`4BL(bgoK^i95!R$M8M#|6D?83>?6vXX{m6?=hWTN zG0nk*-#qC#KgaedNb4GSoC4;1eCqT?0Y!xniQfoq3s_Kc3XC^tDD^heE)F~IW&v@j^s~st$5=X6BLuhUad8k` zo#bH)qodUlQRI~cie|Q?D4ya4@v5M1cVZCjyqY=qN7zmZi;U$tD?eVDSl(&Vq68GW z>Nqo^*hQgi0)mC91AU3?H3+jXF97&EgDC9lp+teL6Scs844zN`%b^2=L&?4_{zEC1 zg$>-_N5oTtcisLATf^8RZtuZaikp}Yzp8b(a%1~ofFgI`g$~F;`@lhS(l8;hD_JnO zLcFrm=;tCpy(adlKnZ@Z-$twA35VeSj)*@hD*p$iN!rS8@4=?7~RGeWBSD;9|-ialO%G_*~mG;3)4)NXn>qmL(#LN z*NN6T)euxdg^Q{;N?bGbbyssxU5;z#sB#Z~P>*vUkb_A>nM*rB$I>7T27|d`4 z5~tcKV-29tyW1KEwsLCMz_2bgDPH}*U)ld_YyPqcHGkP05yx1JWf+D4J4o$4=S%VX z8X+e8^(Aj9&WW=m#q=GKyf01(zSiaroCs46kl)PMmakU22gyA zEvsq?6;Kq&#^En36TG`OFUJ_$i5R2=REZ1!aI9`Lhc``kg;-KGEI9h6>}Q2Vp^aTQ$uY4n-v+Jq<=Pwg$1fU(Uv@I zPWrH5V&w@wje|wAAP=YmnlR90deY{k3Dk6lEih*ya|tr+29?=-bqfE4h-PGoL@I^^ zeNI|KyP@`8sp2x1ITX><$(Q>fI-zy2RoO`crjv9e17@uk(T976!56<1tCWv)#-Ys7 zo-2t2`=crpfi}UXvyFmzRE;yT%U12b=@s(XRKc9=l#{rcrwq{B z*;*z$Hij~uyJOGsE3^cdZ8(UBU7K;IKr)p7Jir<{duL%3~wZ!V>dBS8;9v1}2R< zq=i!v*nk91W75K=Caqs_W`&n`rSS@i!#h?gzq4yBWEYqXJS*ZS5v*nntC_&GRlNja zfZt^wm7b-kSqc^-KE#EoqDp|ORCbJN{=`Hcz&5;Qu7IS*&aVqDSDk2p=n3DY1puaWjRrpdzv(`VC$6uFib;up;??-)ln zs#l8!gT{{0MFuuQKsi8lk}D>_z~-|8wT(TtQ)ru+Y`v42+bieC<*nd#mQ{o)pSR#x zvHdcRdy}>BN@dJ0wIF2ZiFRl??QF3waD5974ij|;w|y6)7tetx|58StLZ$^7JZ&KI zpi01566}t(6_ZlI%y1FFKG2Gygh^XcR2INW6;S`7GrSaqGX=ZVks!YJZvyA%bEbo& zN033^+Pmhpqip9rx?DjA3$x{j?BtCZxe_7&m@X4|46W5=lHcbeau{T)Dv2&Pz{Hajp>CqfKKKTzQRwnQ+))qK$$y>1w_4-4WZ#fEtnZ~hNdh_HMoFJ8Gi5|Qsx?0z>O5J2eiE-9$IRxb)v%W%9|QkVAtbq=4> z=<>ZlWgC%y<=tqgyxNVHVtpg8TxFYQYWpJc1M-73gL|boub+-S;M{{9PLk2}c?q~4 zT2GL4I3mwek@5X(9`l*@p7m1yKHK%JzWo5`g1up+0#w52_|Lh5;!(56;SxZVALUXi zyh#JHDrG4=Cb@IKm+31DU*t^W@&_TlT!p*{n;YtoE~Ys`Vscrs~C+kSUaZcLFkFriwjzPDC&#ucnSvoG{&Huw5vFv zacC7H@lgZOmzn=eaAFXA@VDm zdOFn^A_Aa5pWv`XKQCMl0ndSNwI81X48-S$>s9#dtfd3{{o@wGC=&6c5?CLN3b+j0 ziai|v&K@}$cgiQicNdtZt#T345WBvEhfWsa#ox6IM!f6dpq`~dq0(I#>jv}q!gX4; z7RLz!M@j0rCc=WQ@@e7<=}&{oKznI8Hk8vzV<*l>p{@gh)p<-6Zw@2*+L9})WW}j_ zGPw=)E7gH>GX`L2zME@!yTXI;p3e|Y@yL8&5c)OM?CTjEM z%?4umNoXg3*OtUI`I|!Z`K|M%9#&#ti`xNbQH*>s$@Phj0|#JCF=BVmH3{PYZs;f7 zs>eOoT%)v%Mp6ezoqh!A^km%jybjPq_41mU2_JBJ7&TZ2wj@cGJ4`iDPjXGqn%%Fkz^I>d~8A z9R$+thv^B1>6ssc{d$hhz0YNa-8S^<%$S@H1ou#=6PEZs1z)f2!xz5tldbX-@>7WU%2p29 z%kqKaeZz^s{xkBk_)JrN4isLfKFZy!%P$}_Lux=DQc3ZSj{bmpsPBVFo7~1H{a0NT z5I@$?zcC1Rz;OM6pDwCTP30rMT##TrhNzg&Kheik4(jqJ_pUE3OseTD0KNd{BpJ_borm?QNVbA0O*V^{~H9WDv2(! zD;`2(r^{#1!>RG;@>zgPr&I~yFMQ8M1Pya;DIX-)p=%ntBJkCP9YP$tUAJj`bOEVy3+S&Me7<{Vfg0wt< zVKpEdr8uWim3LS3dD3E+=CF3I6rI4oJ&Oth%II71?RuqDrQ>CAx;ezLIKl6NOVR7M z8~iPGz`ub}OG!jqp>?!s=V_e~YufBeIr|Fq8ESu!#!^AQvHs&vs2kV9O(97uH4=hu z`Y4?5R?&x_eAh!Cr19PP^tln=t)-7B_-;KNf9AUj=!`4h;RDoPtGi8f+=ZWAL`O>a zZVMgY;JdA~2hMkw(jGA1T}FGNeAiDKG<>&%5>md~Nd}qkb_Iy*(2TQMVeJYjj9NZT z7O`NZRa=Jo_n~-%HQE?Lg#~rRWr1)z_aMC6*o+#?jeoxJ&in8QbRd``1(2R=w)L&r zIWwgGsex5om)eP4??ONRNs?{W)GGJKD*C#U|D}>{Y-8fz&Y+L@=XC_hB5F?!r8(c~ zhPA80VhZIjziQZJjIef1-3!|kgf&#>nn?7p14i-RAjg&LwIF!-r$I)q+i4c<->t)i zYH8G>3F9AJ0jDYc-G?G3v|~#irAy8-%i?TU_fH6^?G|yNlk)SNxj;e8pGA ze8snpe8qQce8smpe8ri1zT((4UvWN>uQ)x$SDa7cE6xJ(6^AM4N=FI!ij8%?Vvmon zsA%vN{v6j+K@UV8RGLCGy+gF%-;xnc>${>0W`!PWZF*Ql2D?MC#lziQ+7WRQ?tA;1 zx?+o$HqBxT+(s7?;OP$F8FheXcz}xt@Jt8L0ARBZ<8lvh2>>4w?favP9~S5B55+o; zh~)78rr2t}HphDT+7esC*KlkdU-j4qzD8SOed;D0yHMTevCZmcLF{66(;B-(-7Ji4 zQ#X;=c6GBTb~)WVC7emFI>P4F5vwD zY*uV@spyKS+osg8ZxX+a{l@Lz=k|ZHaiBlMe&+&S=mH*V1pHI%X%}#_11KYnfPaZS z>jGZx0xoR;lzLoZaqZQ)*oEwAgj^Jt3th-HF66dG$dlqS>Ox-PLPE&u#78cV%Tpc5 zxNLVpa{z5&9>*mlO37xIa}O?e#gx=E`x!1Dh)Yr|C2HGUY)=835_AUxB;8vl`EXnw zal7@}-Lwb9eTT*U_rjn^Z3KVs!@s*E!~(R1Xp7L6pvBS7L^~I4GumFXgJ`#*-H-Mp z+A*Mrpe;q~LEDBlgqA~l3Z@EPSs5$weEc&FCOW&KXA@9t->kSJ5qk${@;c0l zf1VY09TD&SxEcd&e19KsfBx8=T|QoF+9>Ei6!2#e3ybsc-!tM0=5Gvh7vd~51MO_S zmlU1YbNC46KoGZdMc0E0HY#Ak2BzpCqR5`sU3hu{KV6Kcu@1~ey^4K;ZfC`(71hqK zS@F5Su4d5t4`dblxaV@}`33HYxr0}C4R*CSAR7s!1&;@LX5AkDPa#($)}w7ey8x{Z zZ6nqKv6VfK8|`^abVW%c*wBIEE1oOGE;+mFDJIgGV&c1xy2UJ8kUVh(+HO#VIM1f) zr8ZTmt|%!Vn^I6U=~10ATRd{sHIl<~Zn9UYO}w$56cX+bqZQMqO&<)JP%xYB4FdJE$z%R~0HwK;r}WL8 zmLPD>N^{X(+NN7MHK>k}8<78e#1h)a}6 z^z#msJVEFQz$Zh>!nO!hELxh`vM$HJ{3oF6LVO49QMAX<9!L8g+V|0(0H2Y|1<2LY z7=fb`;`9ITY?#mg*~sTQxq60yeTH;y^*b5_>R%0yNzVc_K(6X}gE=X$t>o%y{Qe)b zXV8wKJ&XAwW3}h|9vB<)EHCeBlR%_%kcIh5a2DQ7~INAKqZ{89e5JW;3c?n23&4jhL|8?i|4KJ z%=e2z?K@^=i|4c3WD*#BQlXYikxQEE=_c9V`nR5-`Lzp_DhXn*DHHhFjg}OWsu}j2 z3by3z!YnAGQ6VzT>0+J}i^ZDb@^}jY)0};3>>nI~rMwtz3kFB%WDkC;ZT>45ZU+xe zQ8x`f;0_*_vEz=u6VN{95gj(eh+Fj2=FmLs*#YVX&~}1C6m}Ga@Z+uQ%KiwN#+X8i z_KCuArjRr%E|HbkYEwrA4bM&!PSSf7{R^BeULkkCg(zZCaLu)xAk1VA5_XaXk8lUy zBc&x%xwMHAT}~kGz&(-)%HR8%mo|sua@p|GrlrlZ@=VkLI3cD{x?Lc|vj9S#kC+)S zgM(eJsh3$ASjPYji>QK@JngKOm@;DgtI%X4PF~p{uTsA3f z2r@u76AZCwP$furbf;!zmmH*!UE2U86hU!E4(tcJJYFGYapaCOBd6hJO<&4O|(Tla}#qBg17Vo+jUJsHmy9Z&CH-K&m zpP25rM8MC1yWjA>#e01LUZV)1#EE{yC1Ui~`w)s30pVM{9-Fv_w|KXCuP)+Oo?n)? z(>q$&xP+oYROuc@TX|&XA-iWhot4{=Mc6#PTXbODw|U4F0y1c9^&L0>-9bS16t?p) zQIb{#<`MdK0weKehHpW~chHllqVICL1q@0 zyZA~qIGPjwL)T^p<=x_w=z*uy1DOzd5O%veVz*hjhY{ZnuzM8PJ{PP3*^aIw@+wL` zxv~Xkk-kl=S=w~J9PL9K)d~eiu7}$;`Cf&~B3yAf4xt7zN@9ih_|m421LA#vAPrE= zbnQ_s^~A~dD^%Cjl11ES-mJBG6Z!>UKR~dg5kORT8xzFnNA>||dP8OmDL+z4Whc*MMzCQPLamIt{*aRj0eUFawkI((Qq z)EbqA;Oujp0XXcFpN|qwM@vbL@Z%+z3TY|neiGw8tYBWI)an&btGIj>QOrUQeE5$` zMQ!rqJ`!t0jOG&Y%?05s>|BHegV8X5UhRQl+)uhN&vA-`MfVN%DMmy_wXf+UdE*gz zlcHSS?2W46G3uvXU>}=4Ll5J!&KxwXYxqk*@L7T-9VVOAd_>;L(MWG!OILK!(iS#W zElZo5_`zc50fYu!!E<+o;V{AB=ptGZ+t7ZFCbq~ovClWcFRq8@oe&sE!v6(=XOx7A zKx@VFEWmt`VB*qV?YDYH6z?9Pcgor{%w1dpfG?@e?QAwln4JkQS+?xL1;2h)-a#a| zt8{nsXVCr29)1oCYpJ6FzH%Z1z=;M7FpBP9^#*9P5I+aN*9d?)!@PDl^v~cQ>q94C zzV3r@vAl;l%4?&1?l%a^o-vykieLd`KdR9V%#)&6UK!liMzMa&U+XBG6`b2s)bh9~ z4eGz?vB06F(OVHKkeLMuOARZ&?SrXhg%VT63RTfj0o{qR!WPaGW(DbqV&fc6vz8U1 zy_n&5JyuX=P%CZ3f=79JL<;q`hnST$EO^WZQ_BLSd5Q&(6V(5{H2D4YbCm{dH)i-f zj|C2SBn=Jm195{&S^?Ihh8sWd!PIiYFAz`s72G%hfvDlea})@<4Kw_q#|;X(?NYCD z?p~s_zu8Wm5QnqO^g7nz6~OT$-`uvd4G&m$GL3N=?DmxuJ5k`=3IMNLE7M%^deWOh zT;2`qT`SdOLw`&l*r1!&NRys67->Nc;-{*+?I8Z8#zFjy-oeMcl8xm(fd09HexEy7 zoMP+O+r%&NIkR5?l0=3kwFD@b19t5KVDdiY!+seAM*UE-_ksP2#;r-D7-=KZDBAzE z3+(gxzoCb&Bm9szPa#9+gtmwJk@$0YR=!Z2drW*wG=&BJslleOcA%LmedirSJ1V}~ zepF1Iq&+Lj%}Kgn~sV}{GTF# z^EF4s;8F4DpJhu}ySn+PNF5dFWB51V!#-r#j>9`b_!j^3X6I?i{}foA=fTj=4R`f9 z;65robyS$gu*d169#p;%v>z3-e-bBA*;{TFyYTnx&~8Gz84X)15?dKkl3n__n{p|!=|r% z0BsiSL9`=iA4dBq+QVqbEafNAK8f}zv`?db2JN$GpF{gR+85Bii1rBDm(ae9_7$|R zqJ0hR>uBFV`zG4A&`{c!DDBJdqM^JmQQns*?@N^TCCdBq2WU^A{SfU(XiuX3811KM zKSTRD+Aq+4iS{eBU!(m7B`O@pQYEU;GL)#mUG2WEHVvf}6gp|g93?94LXvs5S96xA zG$d>D)R|TV7l&>ar`Rtzu=5pjk>MKC%a17p$%O2&vOsRx~vH@iE^cZ(dxx+HL{ zIT19D<(4YvAL|K>1up~UfrZ|txvws$UB<5gbVov+!ti*Dm=;`yi=jb?EBizB1=;Qt zPGxXNRbMXciurI-l}fGG--HuoEtip)SwE590@RLKhT&8@VjZISn0Q%($$eIQH>{

+8__OA+k}Q9ymk@V#b}qHZAZHdtslD_IB;t#$}>0_5)vZx z)XE3tr&oSRem)dJb$KUMz`hs?g%0C^l%cjL{@)j0`H=jY^ES3G8t1o7-di!z1O}sT zC@#M-oInBOTf+$)wThnEM0lDRQW739+Z=Wv0RzbI3?~qBJUX0ciOa{SS4Z?*#^2)W z^+-!#ukUj&^zDjmi*Dv#VPCIrG(#p7Rcb82V=NwJb#yPo>pu9$n)F(DKmz^=9_2^F ziEv#0n8sQcJ;;5deiDD$R5zIF{8Q?%0f)9!4?lUoYKhj(>gPP(GKUu!@0Y^~Sg>CY zC!%1_ZwOako48-$@{|7CraDw=^xrb7|Db*swuvWIzXiT2|G`^0#Uf_T<~DIm!M6Hf z{}c#&d7F$V*o8jWztpo{Ei+@kxJ@oqJtAHYsRv?T(>?lRqCnV7+T=C`yVwVN zQaI`^3?u~-_j~5@e=%$R$gBD^bNNqT6C%epIi#>G@nKmWjz%5XP*{#K7K5?;8CYVk zWhBRVsWgd8IIe|o(c@Y(E(_vX7?;+#wg8ufytL6sTw91=IIsqyqKo4aR7ID>wMDdI z+uLMLQ4;l0@<6jIq>2!TCxjG&q7(?DE}`DNZSpDAyUo}8VK{&Mk#yW%*#Z1t{^$@Y z&Yd2XU!#)@I60=pw7C8DY}g2Td-6lV+8@_WdQdxMRy*y8cIL_>+H!?#fp(78ZiB}d zScsOGbwpdK&`GUJOQ`qSJ@z)_T`Lpa%MhT@pF8<)f&b^A5HCQx8ZC{MLBkf5$e|U{ zDrnPaFGhPA+N;oRL_^#pZbrKm?X75Uo7Ix{&T6aCdePRPtwY;@)`xZ>+Gezi(Jn#T zhPEB;aE`*`KJ5i`Q`YwX9{`WYLI3~& literal 21801 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 diff --git a/meteoinfo-lab/pylib/mipylib/numeric/linalg/linalg.py b/meteoinfo-lab/pylib/mipylib/numeric/linalg/linalg.py index b1f014ad..19f245e8 100644 --- a/meteoinfo-lab/pylib/mipylib/numeric/linalg/linalg.py +++ b/meteoinfo-lab/pylib/mipylib/numeric/linalg/linalg.py @@ -12,7 +12,7 @@ from org.meteoinfo.math.stats import StatsUtil from .. import core as np -__all__ = ['solve', 'cholesky', 'det', 'lu', 'qr', 'svd', 'eig', 'inv', 'lstsq', 'slogdet', +__all__ = ['solve', 'cholesky', 'cond', 'det', 'lu', 'qr', 'svd', 'eig', 'inv', 'lstsq', 'slogdet', 'solve_triangular', 'norm', 'pinv'] @@ -177,7 +177,7 @@ def qr(a): return q, r -def svd(a, full_matrices=True): +def svd(a, full_matrices=True, compute_uv=True): """ Singular Value Decomposition. @@ -193,9 +193,13 @@ def svd(a, full_matrices=True): full_matrices: bool, optional If True (default), u and vh have the shapes (..., M, M) and (..., N, N), respectively. Otherwise, the shapes are (..., M, K) and (..., K, N), respectively, where K = min(M, N). + compute_uv:bool, optional + Whether to compute u and vh in addition to s. True by default. Returns ------- + When `compute_uv` is True, the result is a namedtuple with the following attribute names: + U : ndarray Unitary matrix having left singular vectors as columns. Of shape ``(M,K)``. @@ -208,10 +212,13 @@ def svd(a, full_matrices=True): """ r = LinalgUtil.svd(a.asarray(), full_matrices) # r = LinalgUtil.svd_EJML(a.asarray()) - U = np.NDArray(r[0]) s = np.NDArray(r[1]) - Vh = np.NDArray(r[2]) - return U, s, Vh + if compute_uv: + U = np.NDArray(r[0]) + Vh = np.NDArray(r[2]) + return U, s, Vh + else: + return s def eig(a): @@ -326,6 +333,34 @@ def slogdet(a): return r[0], r[1] +def _multi_svd_norm(x, row_axis, col_axis, op): + """Compute a function of the singular values of the 2-D matrices in `x`. + + This is a private utility function used by `numpy.linalg.norm()`. + + Parameters + ---------- + x : ndarray + row_axis, col_axis : int + The axes of `x` that hold the 2-D matrices. + op : callable + This should be either amin or `amax` or `sum`. + + Returns + ------- + result : float or ndarray + If `x` is 2-D, the return values is a float. + Otherwise, it is an array with ``x.ndim - 2`` dimensions. + The return values are either the minimum or maximum or sum of the + singular values of the matrices, depending on whether `op` + is `amin` or `amax` or `sum`. + + """ + y = np.moveaxis(x, (row_axis, col_axis), (-2, -1)) + result = op(svd(y, compute_uv=False), axis=-1) + return result + + def norm(x, ord=None, axis=None, keepdims=False): """ Matrix or vector norm. @@ -407,50 +442,144 @@ def norm(x, ord=None, axis=None, keepdims=False): # None of the str-type keywords for ord ('fro', 'nuc') # are valid for vectors elif isinstance(ord, str): - raise ValueError("Invalid norm order '{ord}' for vectors".format(ord)) + raise ValueError("Invalid norm order {} for vectors".format(ord)) else: absx = np.abs(x) absx **= ord ret = absx.sum(axis=axis) - ret **= np.reciprocal(ord) + ret **= (1. / ord) return ret - # elif len(axis) == 2: - # row_axis, col_axis = axis - # row_axis = np.normalize_axis_index(row_axis, nd) - # col_axis = np.normalize_axis_index(col_axis, nd) - # if row_axis == col_axis: - # raise ValueError('Duplicate axes given.') - # if ord == 2: - # ret = _multi_svd_norm(x, row_axis, col_axis, amax) - # elif ord == -2: - # ret = _multi_svd_norm(x, row_axis, col_axis, amin) - # elif ord == 1: - # if col_axis > row_axis: - # col_axis -= 1 - # ret = add.reduce(np.abs(x), axis=row_axis).max(axis=col_axis) - # elif ord == np.inf: - # if row_axis > col_axis: - # row_axis -= 1 - # ret = add.reduce(np.abs(x), axis=col_axis).max(axis=row_axis) - # elif ord == -1: - # if col_axis > row_axis: - # col_axis -= 1 - # ret = add.reduce(np.abs(x), axis=row_axis).min(axis=col_axis) - # elif ord == -np.inf: - # if row_axis > col_axis: - # row_axis -= 1 - # ret = add.reduce(np.abs(x), axis=col_axis).min(axis=row_axis) - # elif ord in [None, 'fro', 'f']: - # ret = np.sqrt(add.reduce((x.conj() * x).real, axis=axis)) - # elif ord == 'nuc': - # ret = _multi_svd_norm(x, row_axis, col_axis, sum) - # else: - # raise ValueError("Invalid norm order for matrices.") - # if keepdims: - # ret_shape = list(x.shape) - # ret_shape[axis[0]] = 1 - # ret_shape[axis[1]] = 1 - # ret = ret.reshape(ret_shape) - # return ret - # else: - # raise ValueError("Improper number of dimensions to norm.") + elif len(axis) == 2: + row_axis, col_axis = axis + row_axis = np.normalize_axis_index(row_axis, nd) + col_axis = np.normalize_axis_index(col_axis, nd) + if row_axis == col_axis: + raise ValueError('Duplicate axes given.') + if ord == 2: + ret = _multi_svd_norm(x, row_axis, col_axis, np.amax) + elif ord == -2: + ret = _multi_svd_norm(x, row_axis, col_axis, np.amin) + elif ord == 1: + if col_axis > row_axis: + col_axis -= 1 + ret = np.sum(np.abs(x), axis=row_axis).max(axis=col_axis) + elif ord == np.inf: + if row_axis > col_axis: + row_axis -= 1 + ret = np.sum(np.abs(x), axis=col_axis).max(axis=row_axis) + elif ord == -1: + if col_axis > row_axis: + col_axis -= 1 + ret = np.sum(np.abs(x), axis=row_axis).min(axis=col_axis) + elif ord == -np.inf: + if row_axis > col_axis: + row_axis -= 1 + ret = np.sum(np.abs(x), axis=col_axis).min(axis=row_axis) + elif ord in [None, 'fro', 'f']: + ret = np.sqrt(np.sum((x.conj() * x).real, axis=axis)) + elif ord == 'nuc': + ret = _multi_svd_norm(x, row_axis, col_axis, np.sum) + else: + raise ValueError("Invalid norm order for matrices.") + if keepdims: + ret_shape = list(x.shape) + ret_shape[axis[0]] = 1 + ret_shape[axis[1]] = 1 + ret = ret.reshape(ret_shape) + return ret + else: + raise ValueError("Improper number of dimensions to norm.") + + +def cond(x, p=None): + """ + Compute the condition number of a matrix. + + This function is capable of returning the condition number using + one of seven different norms, depending on the value of `p` (see + Parameters below). + + Parameters + ---------- + x : (..., M, N) array_like + The matrix whose condition number is sought. + p : {None, 1, -1, 2, -2, inf, -inf, 'fro'}, optional + Order of the norm used in the condition number computation: + + ===== ============================ + p norm for matrices + ===== ============================ + None 2-norm, computed directly using the ``SVD`` + 'fro' Frobenius norm + inf max(sum(abs(x), axis=1)) + -inf min(sum(abs(x), axis=1)) + 1 max(sum(abs(x), axis=0)) + -1 min(sum(abs(x), axis=0)) + 2 2-norm (largest sing. value) + -2 smallest singular value + ===== ============================ + + inf means the `numpy.inf` object, and the Frobenius norm is + the root-of-sum-of-squares norm. + + Returns + ------- + c : {float, inf} + The condition number of the matrix. May be infinite. + + See Also + -------- + numpy.linalg.norm + + Notes + ----- + The condition number of `x` is defined as the norm of `x` times the + norm of the inverse of `x` [1]_; the norm can be the usual L2-norm + (root-of-sum-of-squares) or one of a number of other matrix norms. + + References + ---------- + .. [1] G. Strang, *Linear Algebra and Its Applications*, Orlando, FL, + Academic Press, Inc., 1980, pg. 285. + + Examples + -------- + >>> from mipylib.numeric import linalg as LA + >>> a = np.array([[1, 0, -1], [0, 1, 0], [1, 0, 1]]) + >>> a + array([[ 1, 0, -1], + [ 0, 1, 0], + [ 1, 0, 1]]) + >>> LA.cond(a) + 1.4142135623730951 + >>> LA.cond(a, 'fro') + 3.1622776601683795 + >>> LA.cond(a, np.inf) + 2.0 + >>> LA.cond(a, -np.inf) + 1.0 + >>> LA.cond(a, 1) + 2.0 + >>> LA.cond(a, -1) + 1.0 + >>> LA.cond(a, 2) + 1.4142135623730951 + >>> LA.cond(a, -2) + 0.70710678118654746 # may vary + >>> min(LA.svd(a, compute_uv=False))*min(LA.svd(LA.inv(a), compute_uv=False)) + 0.70710678118654746 # may vary + """ + x = np.asarray(x) # in case we have a matrix + if p is None or p == 2 or p == -2: + s = svd(x, compute_uv=False) + if p == -2: + r = s[..., -1] / s[..., 0] + else: + r = s[..., 0] / s[..., -1] + else: + # Call inv(x) ignoring errors. The result array will + # contain nans in the entries where inversion failed. + invx = inv(x) + r = norm(x, p, axis=(-2, -1)) * norm(invx, p, axis=(-2, -1)) + + return r \ No newline at end of file diff --git a/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl$py.class b/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl$py.class index ffc2eb52f5fde7696c5dc9b8ea2a077777b653c3..c81e4d1a2882221840cbc6ff5ab15524e6def353 100644 GIT binary patch delta 19378 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 G$NvF)RO(s) delta 19583 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 PXOzB54~kBue#id+8DIc6 diff --git a/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl.py b/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl.py index 0014c78d..cf7c7f67 100644 --- a/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl.py +++ b/meteoinfo-lab/pylib/mipylib/plotlib/_axes3dgl.py @@ -1501,16 +1501,19 @@ class Axes3DGL(Axes3D): def isosurface(self, *args, **kwargs): """ - creates a three-dimensional isosurface plot + creates a three-dimensional isosurface plot. :param x: (*array_like*) Optional. X coordinate array. :param y: (*array_like*) Optional. Y coordinate array. :param z: (*array_like*) Optional. Z coordinate array. - :param data: (*array_like*) 3D data array. - :param cmap: (*string*) Color map string. - :param nthread: (*int*) Thread number. Default is 4. + :param data: (*array_like*) Volume data array. + :param isovalue: (*float*) Specified isosurface value. + :param cdata: (*array_like*) Optional. Volume color data array. + :param facecolor: (*color*) Optional. Color map string. + :param cmap: (*string*) Optional. Color map string. + :param nthread: (*int*) Optional. Thread number. Default is 4. - :returns: 3D Mesh graphic + :returns: 3D Mesh graphic. """ if len(args) <= 3: x = args[0].dimvalue(2) diff --git a/meteoinfo-math/pom.xml b/meteoinfo-math/pom.xml index 86624e23..4ba9e124 100644 --- a/meteoinfo-math/pom.xml +++ b/meteoinfo-math/pom.xml @@ -53,6 +53,16 @@ openblas-platform 0.3.10-1.5.4 + + org.bytedeco + mkl-platform + 2020.3-1.5.4 + + + org.bytedeco + mkl-platform-redist + 2020.3-1.5.4 + org.junit.jupiter junit-jupiter diff --git a/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/BLAS.java b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/BLAS.java index 18c5bfb4..0040b846 100644 --- a/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/BLAS.java +++ b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/BLAS.java @@ -53,8 +53,8 @@ public interface BLAS { Logger logger = Logger.getLogger("BLAS.class"); try { - Class clazz = Class.forName("smile.math.blas.mkl.MKL"); - logger.info("smile-mkl module is available."); + Class clazz = Class.forName("org.meteoinfo.math.blas.mkl.MKL"); + logger.info("mkl module is available."); return (BLAS) clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { logger.info(String.format("Failed to create MKL instance: %s", e)); diff --git a/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/LAPACK.java b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/LAPACK.java index bbcf08e5..43877ab5 100644 --- a/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/LAPACK.java +++ b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/LAPACK.java @@ -53,8 +53,8 @@ public interface LAPACK { Logger logger = Logger.getLogger("LAPACK.class"); try { - Class clazz = Class.forName("smile.math.blas.mkl.MKL"); - logger.info("smile-mkl module is available."); + Class clazz = Class.forName("org.meteoinfo.math.blas.mkl.MKL"); + logger.info("mkl module is available."); return (LAPACK) clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { logger.info(String.format("Failed to create MKL instance: %s", e)); diff --git a/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/mkl/MKL.java b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/mkl/MKL.java new file mode 100644 index 00000000..e3306c66 --- /dev/null +++ b/meteoinfo-math/src/main/java/org/meteoinfo/math/blas/mkl/MKL.java @@ -0,0 +1,1062 @@ +/******************************************************************************* + * Copyright (c) 2010-2020 Haifeng Li. All rights reserved. + * + * Smile is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * Smile is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Smile. If not, see . + ******************************************************************************/ + +package org.meteoinfo.math.blas.mkl; + +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import org.meteoinfo.math.blas.*; +import static org.bytedeco.mkl.global.mkl_rt.*; +import static org.bytedeco.openblas.global.openblas.LAPACKE_dorgqr; +import static org.bytedeco.openblas.global.openblas.LAPACKE_dorgrq; + +/** + * Intel MKL library wrapper. + * + * @author Haifeng Li + */ +public class MKL implements BLAS, LAPACK { + @Override + public double asum(int n, double[] x, int incx) { + return cblas_dasum(n, x, incx); + } + + @Override + public float asum(int n, float[] x, int incx) { + return cblas_sasum(n, x, incx); + } + + @Override + public void axpy(int n, double alpha, double[] x, int incx, double[] y, int incy) { + cblas_daxpy(n, alpha, x, incx, y, incy); + } + + @Override + public void axpy(int n, float alpha, float[] x, int incx, float[] y, int incy) { + cblas_saxpy(n, alpha, x, incx, y, incy); + } + + @Override + public double dot(int n, double[] x, int incx, double[] y, int incy) { + return cblas_ddot(n, x, incx, y, incy); + } + + @Override + public float dot(int n, float[] x, int incx, float[] y, int incy) { + return cblas_sdot(n, x, incx, y, incy); + } + + @Override + public double nrm2(int n, double[] x, int incx) { + return cblas_dnrm2(n, x, incx); + } + + @Override + public float nrm2(int n, float[] x, int incx) { + return cblas_snrm2(n, x, incx); + } + + @Override + public void scal(int n, double alpha, double[] x, int incx) { + cblas_dscal(n, alpha, x, incx); + } + + @Override + public void scal(int n, float alpha, float[] x, int incx) { + cblas_sscal(n, alpha, x, incx); + } + + @Override + public void swap(int n, double[] x, int incx, double[] y, int incy) { + cblas_dswap(n, x, incx, y, incy); + } + + @Override + public void swap(int n, float[] x, int incx, float[] y, int incy) { + cblas_sswap(n, x, incx, y, incy); + } + + @Override + public long iamax(int n, double[] x, int incx) { + return cblas_idamax(n, x, incx); + } + + @Override + public long iamax(int n, float[] x, int incx) { + return cblas_isamax(n, x, incx); + } + + @Override + public void gemv(Layout layout, Transpose trans, int m, int n, double alpha, double[] A, int lda, double[] x, int incx, double beta, double[] y, int incy) { + cblas_dgemv(layout.blas(), trans.blas(), m, n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gemv(Layout layout, Transpose trans, int m, int n, double alpha, DoubleBuffer A, int lda, DoubleBuffer x, int incx, double beta, DoubleBuffer y, int incy) { + cblas_dgemv(layout.blas(), trans.blas(), m, n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gemv(Layout layout, Transpose trans, int m, int n, float alpha, float[] A, int lda, float[] x, int incx, float beta, float[] y, int incy) { + cblas_sgemv(layout.blas(), trans.blas(), m, n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gemv(Layout layout, Transpose trans, int m, int n, float alpha, FloatBuffer A, int lda, FloatBuffer x, int incx, float beta, FloatBuffer y, int incy) { + cblas_sgemv(layout.blas(), trans.blas(), m, n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void symv(Layout layout, UPLO uplo, int n, double alpha, double[] A, int lda, double[] x, int incx, double beta, double[] y, int incy) { + cblas_dsymv(layout.blas(), uplo.blas(), n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void symv(Layout layout, UPLO uplo, int n, double alpha, DoubleBuffer A, int lda, DoubleBuffer x, int incx, double beta, DoubleBuffer y, int incy) { + cblas_dsymv(layout.blas(), uplo.blas(), n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void symv(Layout layout, UPLO uplo, int n, float alpha, float[] A, int lda, float[] x, int incx, float beta, float[] y, int incy) { + cblas_ssymv(layout.blas(), uplo.blas(), n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void symv(Layout layout, UPLO uplo, int n, float alpha, FloatBuffer A, int lda, FloatBuffer x, int incx, float beta, FloatBuffer y, int incy) { + cblas_ssymv(layout.blas(), uplo.blas(), n, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void spmv(Layout layout, UPLO uplo, int n, double alpha, double[] A, double[] x, int incx, double beta, double[] y, int incy) { + cblas_dspmv(layout.blas(), uplo.blas(), n, alpha, A, x, incx, beta, y, incy); + } + + @Override + public void spmv(Layout layout, UPLO uplo, int n, double alpha, DoubleBuffer A, DoubleBuffer x, int incx, double beta, DoubleBuffer y, int incy) { + cblas_dspmv(layout.blas(), uplo.blas(), n, alpha, A, x, incx, beta, y, incy); + } + + @Override + public void spmv(Layout layout, UPLO uplo, int n, float alpha, float[] A, float[] x, int incx, float beta, float[] y, int incy) { + cblas_sspmv(layout.blas(), uplo.blas(), n, alpha, A, x, incx, beta, y, incy); + } + + @Override + public void spmv(Layout layout, UPLO uplo, int n, float alpha, FloatBuffer A, FloatBuffer x, int incx, float beta, FloatBuffer y, int incy) { + cblas_sspmv(layout.blas(), uplo.blas(), n, alpha, A, x, incx, beta, y, incy); + } + + @Override + public void trmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, double[] A, int lda, double[] x, int incx) { + cblas_dtrmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, lda, x, incx); + } + + @Override + public void trmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, DoubleBuffer A, int lda, DoubleBuffer x, int incx) { + cblas_dtrmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, lda, x, incx); + } + + @Override + public void trmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, float[] A, int lda, float[] x, int incx) { + cblas_strmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, lda, x, incx); + } + + @Override + public void trmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, FloatBuffer A, int lda, FloatBuffer x, int incx) { + cblas_strmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, lda, x, incx); + } + + @Override + public void tpmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, double[] A, double[] x, int incx) { + cblas_dtpmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, x, incx); + } + + @Override + public void tpmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, DoubleBuffer A, DoubleBuffer x, int incx) { + cblas_dtpmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, x, incx); + } + + @Override + public void tpmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, float[] A, float[] x, int incx) { + cblas_stpmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, x, incx); + } + + @Override + public void tpmv(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, FloatBuffer A, FloatBuffer x, int incx) { + cblas_stpmv(layout.blas(), uplo.blas(), trans.blas(), diag.blas(), n, A, x, incx); + } + + @Override + public void gbmv(Layout layout, Transpose trans, int m, int n, int kl, int ku, double alpha, double[] A, int lda, double[] x, int incx, double beta, double[] y, int incy) { + cblas_dgbmv(layout.blas(), trans.blas(), m, n, kl, ku, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gbmv(Layout layout, Transpose trans, int m, int n, int kl, int ku, double alpha, DoubleBuffer A, int lda, DoubleBuffer x, int incx, double beta, DoubleBuffer y, int incy) { + cblas_dgbmv(layout.blas(), trans.blas(), m, n, kl, ku, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gbmv(Layout layout, Transpose trans, int m, int n, int kl, int ku, float alpha, float[] A, int lda, float[] x, int incx, float beta, float[] y, int incy) { + cblas_sgbmv(layout.blas(), trans.blas(), m, n, kl, ku, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void gbmv(Layout layout, Transpose trans, int m, int n, int kl, int ku, float alpha, FloatBuffer A, int lda, FloatBuffer x, int incx, float beta, FloatBuffer y, int incy) { + cblas_sgbmv(layout.blas(), trans.blas(), m, n, kl, ku, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void sbmv(Layout layout, UPLO uplo, int n, int k, double alpha, double[] A, int lda, double[] x, int incx, double beta, double[] y, int incy) { + cblas_dsbmv(layout.blas(), uplo.blas(), n, k, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void sbmv(Layout layout, UPLO uplo, int n, int k, double alpha, DoubleBuffer A, int lda, DoubleBuffer x, int incx, double beta, DoubleBuffer y, int incy) { + cblas_dsbmv(layout.blas(), uplo.blas(), n, k, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void sbmv(Layout layout, UPLO uplo, int n, int k, float alpha, float[] A, int lda, float[] x, int incx, float beta, float[] y, int incy) { + cblas_ssbmv(layout.blas(), uplo.blas(), n, k, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void sbmv(Layout layout, UPLO uplo, int n, int k, float alpha, FloatBuffer A, int lda, FloatBuffer x, int incx, float beta, FloatBuffer y, int incy) { + cblas_ssbmv(layout.blas(), uplo.blas(), n, k, alpha, A, lda, x, incx, beta, y, incy); + } + + @Override + public void ger(Layout layout, int m, int n, double alpha, double[] x, int incx, double[] y, int incy, double[] A, int lda) { + cblas_dger(layout.blas(), m, n, alpha, x, incx, y, incy, A, lda); + } + + @Override + public void ger(Layout layout, int m, int n, double alpha, DoubleBuffer x, int incx, DoubleBuffer y, int incy, DoubleBuffer A, int lda) { + cblas_dger(layout.blas(), m, n, alpha, x, incx, y, incy, A, lda); + } + + @Override + public void ger(Layout layout, int m, int n, float alpha, float[] x, int incx, float[] y, int incy, float[] A, int lda) { + cblas_sger(layout.blas(), m, n, alpha, x, incx, y, incy, A, lda); + } + + @Override + public void ger(Layout layout, int m, int n, float alpha, FloatBuffer x, int incx, FloatBuffer y, int incy, FloatBuffer A, int lda) { + cblas_sger(layout.blas(), m, n, alpha, x, incx, y, incy, A, lda); + } + + @Override + public void syr(Layout layout, UPLO uplo, int n, double alpha, double[] x, int incx, double[] A, int lda) { + cblas_dsyr(layout.blas(), uplo.blas(), n, alpha, x, incx, A, lda); + } + + @Override + public void syr(Layout layout, UPLO uplo, int n, double alpha, DoubleBuffer x, int incx, DoubleBuffer A, int lda) { + cblas_dsyr(layout.blas(), uplo.blas(), n, alpha, x, incx, A, lda); + } + + @Override + public void syr(Layout layout, UPLO uplo, int n, float alpha, float[] x, int incx, float[] A, int lda) { + cblas_ssyr(layout.blas(), uplo.blas(), n, alpha, x, incx, A, lda); + } + + @Override + public void syr(Layout layout, UPLO uplo, int n, float alpha, FloatBuffer x, int incx, FloatBuffer A, int lda) { + cblas_ssyr(layout.blas(), uplo.blas(), n, alpha, x, incx, A, lda); + } + + @Override + public void spr(Layout layout, UPLO uplo, int n, double alpha, double[] x, int incx, double[] A) { + cblas_dspr(layout.blas(), uplo.blas(), n, alpha, x, incx, A); + } + + @Override + public void spr(Layout layout, UPLO uplo, int n, double alpha, DoubleBuffer x, int incx, DoubleBuffer A) { + cblas_dspr(layout.blas(), uplo.blas(), n, alpha, x, incx, A); + } + + @Override + public void spr(Layout layout, UPLO uplo, int n, float alpha, float[] x, int incx, float[] A) { + cblas_sspr(layout.blas(), uplo.blas(), n, alpha, x, incx, A); + } + + @Override + public void spr(Layout layout, UPLO uplo, int n, float alpha, FloatBuffer x, int incx, FloatBuffer A) { + cblas_sspr(layout.blas(), uplo.blas(), n, alpha, x, incx, A); + } + + @Override + public void gemm(Layout layout, Transpose transA, Transpose transB, int m, int n, int k, double alpha, double[] A, int lda, double[] B, int ldb, double beta, double[] C, int ldc) { + cblas_dgemm(layout.blas(), transA.blas(), transB.blas(), m, n, k, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void gemm(Layout layout, Transpose transA, Transpose transB, int m, int n, int k, double alpha, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, double beta, DoubleBuffer C, int ldc) { + cblas_dgemm(layout.blas(), transA.blas(), transB.blas(), m, n, k, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void gemm(Layout layout, Transpose transA, Transpose transB, int m, int n, int k, float alpha, float[] A, int lda, float[] B, int ldb, float beta, float[] C, int ldc) { + cblas_sgemm(layout.blas(), transA.blas(), transB.blas(), m, n, k, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void gemm(Layout layout, Transpose transA, Transpose transB, int m, int n, int k, float alpha, FloatBuffer A, int lda, FloatBuffer B, int ldb, float beta, FloatBuffer C, int ldc) { + cblas_sgemm(layout.blas(), transA.blas(), transB.blas(), m, n, k, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void symm(Layout layout, Side side, UPLO uplo, int m, int n, double alpha, double[] A, int lda, double[] B, int ldb, double beta, double[] C, int ldc) { + cblas_dsymm(layout.blas(), side.blas(), uplo.blas(), m, n, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void symm(Layout layout, Side side, UPLO uplo, int m, int n, double alpha, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, double beta, DoubleBuffer C, int ldc) { + cblas_dsymm(layout.blas(), side.blas(), uplo.blas(), m, n, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void symm(Layout layout, Side side, UPLO uplo, int m, int n, float alpha, float[] A, int lda, float[] B, int ldb, float beta, float[] C, int ldc) { + cblas_ssymm(layout.blas(), side.blas(), uplo.blas(), m, n, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public void symm(Layout layout, Side side, UPLO uplo, int m, int n, float alpha, FloatBuffer A, int lda, FloatBuffer B, int ldb, float beta, FloatBuffer C, int ldc) { + cblas_ssymm(layout.blas(), side.blas(), uplo.blas(), m, n, alpha, A, lda, B, ldb, beta, C, ldc); + } + + @Override + public int gesv(Layout layout, int n, int nrhs, double[] A, int lda, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dgesv(layout.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gesv(Layout layout, int n, int nrhs, DoubleBuffer A, int lda, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dgesv(layout.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gesv(Layout layout, int n, int nrhs, float[] A, int lda, int[] ipiv, float[] B, int ldb) { + return LAPACKE_sgesv(layout.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gesv(Layout layout, int n, int nrhs, FloatBuffer A, int lda, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_sgesv(layout.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int sysv(Layout layout, UPLO uplo, int n, int nrhs, double[] A, int lda, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dsysv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int sysv(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer A, int lda, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dsysv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int sysv(Layout layout, UPLO uplo, int n, int nrhs, float[] A, int lda, int[] ipiv, float[] B, int ldb) { + return LAPACKE_ssysv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int sysv(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer A, int lda, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_ssysv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int spsv(Layout layout, UPLO uplo, int n, int nrhs, double[] A, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dspsv(layout.lapack(), uplo.lapack(), n, nrhs, A, ipiv, B, ldb); + } + + @Override + public int spsv(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer A, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dspsv(layout.lapack(), uplo.lapack(), n, nrhs, A, ipiv, B, ldb); + } + + @Override + public int spsv(Layout layout, UPLO uplo, int n, int nrhs, float[] A, int[] ipiv, float[] B, int ldb) { + return LAPACKE_sspsv(layout.lapack(), uplo.lapack(), n, nrhs, A, ipiv, B, ldb); + } + + @Override + public int spsv(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer A, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_sspsv(layout.lapack(), uplo.lapack(), n, nrhs, A, ipiv, B, ldb); + } + + @Override + public int posv(Layout layout, UPLO uplo, int n, int nrhs, double[] A, int lda, double[] B, int ldb) { + return LAPACKE_dposv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int posv(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb) { + return LAPACKE_dposv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int posv(Layout layout, UPLO uplo, int n, int nrhs, float[] A, int lda, float[] B, int ldb) { + return LAPACKE_sposv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int posv(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb) { + return LAPACKE_sposv(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int ppsv(Layout layout, UPLO uplo, int n, int nrhs, double[] A, double[] B, int ldb) { + return LAPACKE_dppsv(layout.lapack(), uplo.lapack(), n, nrhs, A, B, ldb); + } + + @Override + public int ppsv(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer A, DoubleBuffer B, int ldb) { + return LAPACKE_dppsv(layout.lapack(), uplo.lapack(), n, nrhs, A, B, ldb); + } + + @Override + public int ppsv(Layout layout, UPLO uplo, int n, int nrhs, float[] A, float[] B, int ldb) { + return LAPACKE_sppsv(layout.lapack(), uplo.lapack(), n, nrhs, A, B, ldb); + } + + @Override + public int ppsv(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer A, FloatBuffer B, int ldb) { + return LAPACKE_sppsv(layout.lapack(), uplo.lapack(), n, nrhs, A, B, ldb); + } + + @Override + public int gbsv(Layout layout, int n, int kl, int ku, int nrhs, double[] A, int lda, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dgbsv(layout.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbsv(Layout layout, int n, int kl, int ku, int nrhs, DoubleBuffer A, int lda, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dgbsv(layout.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbsv(Layout layout, int n, int kl, int ku, int nrhs, float[] A, int lda, int[] ipiv, float[] B, int ldb) { + return LAPACKE_sgbsv(layout.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbsv(Layout layout, int n, int kl, int ku, int nrhs, FloatBuffer A, int lda, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_sgbsv(layout.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gels(Layout layout, Transpose trans, int m, int n, int nrhs, double[] A, int lda, double[] B, int ldb) { + return LAPACKE_dgels(layout.lapack(), trans.lapack(), m, n, nrhs, A, lda, B, ldb); + } + + @Override + public int gels(Layout layout, Transpose trans, int m, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb) { + return LAPACKE_dgels(layout.lapack(), trans.lapack(), m, n, nrhs, A, lda, B, ldb); + } + + @Override + public int gels(Layout layout, Transpose trans, int m, int n, int nrhs, float[] A, int lda, float[] B, int ldb) { + return LAPACKE_sgels(layout.lapack(), trans.lapack(), m, n, nrhs, A, lda, B, ldb); + } + + @Override + public int gels(Layout layout, Transpose trans, int m, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb) { + return LAPACKE_sgels(layout.lapack(), trans.lapack(), m, n, nrhs, A, lda, B, ldb); + } + + @Override + public int gelsy(Layout layout, int m, int n, int nrhs, double[] A, int lda, double[] B, int ldb, int[] jpvt, double rcond, int[] rank) { + return LAPACKE_dgelsy(layout.lapack(), m, n, nrhs, A, lda, B, ldb, jpvt, rcond, rank); + } + + @Override + public int gelsy(Layout layout, int m, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, IntBuffer jpvt, double rcond, IntBuffer rank) { + return LAPACKE_dgelsy(layout.lapack(), m, n, nrhs, A, lda, B, ldb, jpvt, rcond, rank); + } + + @Override + public int gelsy(Layout layout, int m, int n, int nrhs, float[] A, int lda, float[] B, int ldb, int[] jpvt, float rcond, int[] rank) { + return LAPACKE_sgelsy(layout.lapack(), m, n, nrhs, A, lda, B, ldb, jpvt, rcond, rank); + } + + @Override + public int gelsy(Layout layout, int m, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb, IntBuffer jpvt, float rcond, IntBuffer rank) { + return LAPACKE_sgelsy(layout.lapack(), m, n, nrhs, A, lda, B, ldb, jpvt, rcond, rank); + } + + @Override + public int gelss(Layout layout, int m, int n, int nrhs, double[] A, int lda, double[] B, int ldb, double[] s, double rcond, int[] rank) { + return LAPACKE_dgelss(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelss(Layout layout, int m, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, DoubleBuffer s, double rcond, IntBuffer rank) { + return LAPACKE_dgelss(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelss(Layout layout, int m, int n, int nrhs, float[] A, int lda, float[] B, int ldb, float[] s, float rcond, int[] rank) { + return LAPACKE_sgelss(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelss(Layout layout, int m, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb, FloatBuffer s, float rcond, IntBuffer rank) { + return LAPACKE_sgelss(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelsd(Layout layout, int m, int n, int nrhs, double[] A, int lda, double[] B, int ldb, double[] s, double rcond, int[] rank) { + return LAPACKE_dgelsd(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelsd(Layout layout, int m, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, DoubleBuffer s, double rcond, IntBuffer rank) { + return LAPACKE_dgelsd(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelsd(Layout layout, int m, int n, int nrhs, float[] A, int lda, float[] B, int ldb, float[] s, float rcond, int[] rank) { + return LAPACKE_sgelsd(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gelsd(Layout layout, int m, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb, FloatBuffer s, float rcond, IntBuffer rank) { + return LAPACKE_sgelsd(layout.lapack(), m, n, nrhs, A, lda, B, ldb, s, rcond, rank); + } + + @Override + public int gglse(Layout layout, int m, int n, int p, double[] A, int lda, double[] B, int ldb, double[] c, double[] d, double[] x) { + return LAPACKE_dgglse(layout.lapack(), m, n, p, A, lda, B, ldb, c, d, x); + } + + @Override + public int gglse(Layout layout, int m, int n, int p, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, DoubleBuffer c, DoubleBuffer d, DoubleBuffer x) { + return LAPACKE_dgglse(layout.lapack(), m, n, p, A, lda, B, ldb, c, d, x); + } + + @Override + public int gglse(Layout layout, int m, int n, int p, float[] A, int lda, float[] B, int ldb, float[] c, float[] d, float[] x) { + return LAPACKE_sgglse(layout.lapack(), m, n, p, A, lda, B, ldb, c, d, x); + } + + @Override + public int gglse(Layout layout, int m, int n, int p, FloatBuffer A, int lda, FloatBuffer B, int ldb, FloatBuffer c, FloatBuffer d, FloatBuffer x) { + return LAPACKE_sgglse(layout.lapack(), m, n, p, A, lda, B, ldb, c, d, x); + } + + @Override + public int ggglm(Layout layout, int n, int m, int p, double[] A, int lda, double[] B, int ldb, double[] d, double[] x, double[] y) { + return LAPACKE_dggglm(layout.lapack(), n, m, p, A, lda, B, ldb, d, x, y); + } + + @Override + public int ggglm(Layout layout, int n, int m, int p, DoubleBuffer A, int lda, DoubleBuffer B, int ldb, DoubleBuffer d, DoubleBuffer x, DoubleBuffer y) { + return LAPACKE_dggglm(layout.lapack(), n, m, p, A, lda, B, ldb, d, x, y); + } + + @Override + public int ggglm(Layout layout, int n, int m, int p, float[] A, int lda, float[] B, int ldb, float[] d, float[] x, float[] y) { + return LAPACKE_sggglm(layout.lapack(), n, m, p, A, lda, B, ldb, d, x, y); + } + + @Override + public int ggglm(Layout layout, int n, int m, int p, FloatBuffer A, int lda, FloatBuffer B, int ldb, FloatBuffer d, FloatBuffer x, FloatBuffer y) { + return LAPACKE_sggglm(layout.lapack(), n, m, p, A, lda, B, ldb, d, x, y); + } + + @Override + public int geev(Layout layout, EVDJob jobvl, EVDJob jobvr, int n, double[] A, int lda, double[] wr, double[] wi, double[] Vl, int ldvl, double[] Vr, int ldvr) { + return LAPACKE_dgeev(layout.lapack(), jobvl.lapack(), jobvr.lapack(), n, A, lda, wr, wi, Vl, ldvl, Vr, ldvr); + } + + @Override + public int geev(Layout layout, EVDJob jobvl, EVDJob jobvr, int n, DoubleBuffer A, int lda, DoubleBuffer wr, DoubleBuffer wi, DoubleBuffer Vl, int ldvl, DoubleBuffer Vr, int ldvr) { + return LAPACKE_dgeev(layout.lapack(), jobvl.lapack(), jobvr.lapack(), n, A, lda, wr, wi, Vl, ldvl, Vr, ldvr); + } + + @Override + public int geev(Layout layout, EVDJob jobvl, EVDJob jobvr, int n, float[] A, int lda, float[] wr, float[] wi, float[] Vl, int ldvl, float[] Vr, int ldvr) { + return LAPACKE_sgeev(layout.lapack(), jobvl.lapack(), jobvr.lapack(), n, A, lda, wr, wi, Vl, ldvl, Vr, ldvr); + } + + @Override + public int geev(Layout layout, EVDJob jobvl, EVDJob jobvr, int n, FloatBuffer A, int lda, FloatBuffer wr, FloatBuffer wi, FloatBuffer Vl, int ldvl, FloatBuffer Vr, int ldvr) { + return LAPACKE_sgeev(layout.lapack(), jobvl.lapack(), jobvr.lapack(), n, A, lda, wr, wi, Vl, ldvl, Vr, ldvr); + } + + @Override + public int syev(Layout layout, EVDJob jobz, UPLO uplo, int n, double[] A, int lda, double[] w) { + return LAPACKE_dsyev(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syev(Layout layout, EVDJob jobz, UPLO uplo, int n, DoubleBuffer A, int lda, DoubleBuffer w) { + return LAPACKE_dsyev(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syev(Layout layout, EVDJob jobz, UPLO uplo, int n, float[] A, int lda, float[] w) { + return LAPACKE_ssyev(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syev(Layout layout, EVDJob jobz, UPLO uplo, int n, FloatBuffer A, int lda, FloatBuffer w) { + return LAPACKE_ssyev(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syevd(Layout layout, EVDJob jobz, UPLO uplo, int n, double[] A, int lda, double[] w) { + return LAPACKE_dsyevd(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syevd(Layout layout, EVDJob jobz, UPLO uplo, int n, DoubleBuffer A, int lda, DoubleBuffer w) { + return LAPACKE_dsyevd(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syevd(Layout layout, EVDJob jobz, UPLO uplo, int n, float[] A, int lda, float[] w) { + return LAPACKE_ssyevd(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syevd(Layout layout, EVDJob jobz, UPLO uplo, int n, FloatBuffer A, int lda, FloatBuffer w) { + return LAPACKE_ssyevd(layout.lapack(), jobz.lapack(), uplo.lapack(), n, A, lda, w); + } + + @Override + public int syevr(Layout layout, EVDJob jobz, EigenRange range, UPLO uplo, int n, double[] A, int lda, double vl, double vu, int il, int iu, double abstol, int[] m, double[] w, double[] Z, int ldz, int[] isuppz) { + return LAPACKE_dsyevr(layout.lapack(), jobz.lapack(), range.lapack(), uplo.lapack(), n, A, lda, vl, vu, il, iu, abstol, m, w, Z, ldz, isuppz); + } + + @Override + public int syevr(Layout layout, EVDJob jobz, EigenRange range, UPLO uplo, int n, DoubleBuffer A, int lda, double vl, double vu, int il, int iu, double abstol, IntBuffer m, DoubleBuffer w, DoubleBuffer Z, int ldz, IntBuffer isuppz) { + return LAPACKE_dsyevr(layout.lapack(), jobz.lapack(), range.lapack(), uplo.lapack(), n, A, lda, vl, vu, il, iu, abstol, m, w, Z, ldz, isuppz); + } + + @Override + public int syevr(Layout layout, EVDJob jobz, EigenRange range, UPLO uplo, int n, float[] A, int lda, float vl, float vu, int il, int iu, float abstol, int[] m, float[] w, float[] Z, int ldz, int[] isuppz) { + return LAPACKE_ssyevr(layout.lapack(), jobz.lapack(), range.lapack(), uplo.lapack(), n, A, lda, vl, vu, il, iu, abstol, m, w, Z, ldz, isuppz); + } + + @Override + public int syevr(Layout layout, EVDJob jobz, EigenRange range, UPLO uplo, int n, FloatBuffer A, int lda, float vl, float vu, int il, int iu, float abstol, IntBuffer m, FloatBuffer w, FloatBuffer Z, int ldz, IntBuffer isuppz) { + return LAPACKE_ssyevr(layout.lapack(), jobz.lapack(), range.lapack(), uplo.lapack(), n, A, lda, vl, vu, il, iu, abstol, m, w, Z, ldz, isuppz); + } + + @Override + public int gesvd(Layout layout, SVDJob jobu, SVDJob jobvt, int m, int n, double[] A, int lda, double[] s, double[] U, int ldu, double[] VT, int ldvt, double[] superb) { + return LAPACKE_dgesvd(layout.lapack(), jobu.lapack(), jobvt.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt, superb); + } + + @Override + public int gesvd(Layout layout, SVDJob jobu, SVDJob jobvt, int m, int n, DoubleBuffer A, int lda, DoubleBuffer s, DoubleBuffer U, int ldu, DoubleBuffer VT, int ldvt, DoubleBuffer superb) { + return LAPACKE_dgesvd(layout.lapack(), jobu.lapack(), jobvt.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt, superb); + } + + @Override + public int gesvd(Layout layout, SVDJob jobu, SVDJob jobvt, int m, int n, float[] A, int lda, float[] s, float[] U, int ldu, float[] VT, int ldvt, float[] superb) { + return LAPACKE_sgesvd(layout.lapack(), jobu.lapack(), jobvt.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt, superb); + } + + @Override + public int gesvd(Layout layout, SVDJob jobu, SVDJob jobvt, int m, int n, FloatBuffer A, int lda, FloatBuffer s, FloatBuffer U, int ldu, FloatBuffer VT, int ldvt, FloatBuffer superb) { + return LAPACKE_sgesvd(layout.lapack(), jobu.lapack(), jobvt.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt, superb); + } + + @Override + public int gesdd(Layout layout, SVDJob jobz, int m, int n, double[] A, int lda, double[] s, double[] U, int ldu, double[] VT, int ldvt) { + return LAPACKE_dgesdd(layout.lapack(), jobz.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt); + } + + @Override + public int gesdd(Layout layout, SVDJob jobz, int m, int n, DoubleBuffer A, int lda, DoubleBuffer s, DoubleBuffer U, int ldu, DoubleBuffer VT, int ldvt) { + return LAPACKE_dgesdd(layout.lapack(), jobz.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt); + } + + @Override + public int gesdd(Layout layout, SVDJob jobz, int m, int n, float[] A, int lda, float[] s, float[] U, int ldu, float[] VT, int ldvt) { + return LAPACKE_sgesdd(layout.lapack(), jobz.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt); + } + + @Override + public int gesdd(Layout layout, SVDJob jobz, int m, int n, FloatBuffer A, int lda, FloatBuffer s, FloatBuffer U, int ldu, FloatBuffer VT, int ldvt) { + return LAPACKE_sgesdd(layout.lapack(), jobz.lapack(), m, n, A, lda, s, U, ldu, VT, ldvt); + } + + @Override + public int getrf(Layout layout, int m, int n, DoubleBuffer A, int lda, IntBuffer ipiv) { + return LAPACKE_dgetrf(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf(Layout layout, int m, int n, double[] A, int lda, int[] ipiv) { + return LAPACKE_dgetrf(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf(Layout layout, int m, int n, float[] A, int lda, int[] ipiv) { + return LAPACKE_sgetrf(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf(Layout layout, int m, int n, FloatBuffer A, int lda, IntBuffer ipiv) { + return LAPACKE_sgetrf(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf2(Layout layout, int m, int n, double[] A, int lda, int[] ipiv) { + return LAPACKE_dgetrf2(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf2(Layout layout, int m, int n, DoubleBuffer A, int lda, IntBuffer ipiv) { + return LAPACKE_dgetrf2(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf2(Layout layout, int m, int n, float[] A, int lda, int[] ipiv) { + return LAPACKE_sgetrf2(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int getrf2(Layout layout, int m, int n, FloatBuffer A, int lda, IntBuffer ipiv) { + return LAPACKE_sgetrf2(layout.lapack(), m, n, A, lda, ipiv); + } + + @Override + public int gbtrf(Layout layout, int m, int n, int kl, int ku, double[] AB, int ldab, int[] ipiv) { + return LAPACKE_dgbtrf(layout.lapack(), m, n, kl, ku, AB, ldab, ipiv); + } + + @Override + public int gbtrf(Layout layout, int m, int n, int kl, int ku, DoubleBuffer AB, int ldab, IntBuffer ipiv) { + return LAPACKE_dgbtrf(layout.lapack(), m, n, kl, ku, AB, ldab, ipiv); + } + + @Override + public int gbtrf(Layout layout, int m, int n, int kl, int ku, float[] AB, int ldab, int[] ipiv) { + return LAPACKE_sgbtrf(layout.lapack(), m, n, kl, ku, AB, ldab, ipiv); + } + + @Override + public int gbtrf(Layout layout, int m, int n, int kl, int ku, FloatBuffer AB, int ldab, IntBuffer ipiv) { + return LAPACKE_sgbtrf(layout.lapack(), m, n, kl, ku, AB, ldab, ipiv); + } + + @Override + public int sptrf(Layout layout, UPLO uplo, int n, double[] AP, int[] ipiv) { + return LAPACKE_dsptrf(layout.lapack(), uplo.lapack(), n, AP, ipiv); + } + + @Override + public int sptrf(Layout layout, UPLO uplo, int n, DoubleBuffer AP, IntBuffer ipiv) { + return LAPACKE_dsptrf(layout.lapack(), uplo.lapack(), n, AP, ipiv); + } + + @Override + public int sptrf(Layout layout, UPLO uplo, int n, float[] AP, int[] ipiv) { + return LAPACKE_ssptrf(layout.lapack(), uplo.lapack(), n, AP, ipiv); + } + + @Override + public int sptrf(Layout layout, UPLO uplo, int n, FloatBuffer AP, IntBuffer ipiv) { + return LAPACKE_ssptrf(layout.lapack(), uplo.lapack(), n, AP, ipiv); + } + + @Override + public int getrs(Layout layout, Transpose trans, int n, int nrhs, double[] A, int lda, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dgetrs(layout.lapack(), trans.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int getrs(Layout layout, Transpose trans, int n, int nrhs, DoubleBuffer A, int lda, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dgetrs(layout.lapack(), trans.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int getrs(Layout layout, Transpose trans, int n, int nrhs, float[] A, int lda, int[] ipiv, float[] B, int ldb) { + return LAPACKE_sgetrs(layout.lapack(), trans.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int getrs(Layout layout, Transpose trans, int n, int nrhs, FloatBuffer A, int lda, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_sgetrs(layout.lapack(), trans.lapack(), n, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbtrs(Layout layout, Transpose trans, int n, int kl, int ku, int nrhs, double[] A, int lda, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dgbtrs(layout.lapack(), trans.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbtrs(Layout layout, Transpose trans, int n, int kl, int ku, int nrhs, DoubleBuffer A, int lda, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dgbtrs(layout.lapack(), trans.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbtrs(Layout layout, Transpose trans, int n, int kl, int ku, int nrhs, float[] A, int lda, int[] ipiv, float[] B, int ldb) { + return LAPACKE_sgbtrs(layout.lapack(), trans.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int gbtrs(Layout layout, Transpose trans, int n, int kl, int ku, int nrhs, FloatBuffer A, int lda, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_sgbtrs(layout.lapack(), trans.lapack(), n, kl, ku, nrhs, A, lda, ipiv, B, ldb); + } + + @Override + public int sptrs(Layout layout, UPLO uplo, int n, int nrhs, double[] AP, int[] ipiv, double[] B, int ldb) { + return LAPACKE_dsptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, ipiv, B, ldb); + } + + @Override + public int sptrs(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer AP, IntBuffer ipiv, DoubleBuffer B, int ldb) { + return LAPACKE_dsptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, ipiv, B, ldb); + } + + @Override + public int sptrs(Layout layout, UPLO uplo, int n, int nrhs, float[] AP, int[] ipiv, float[] B, int ldb) { + return LAPACKE_ssptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, ipiv, B, ldb); + } + + @Override + public int sptrs(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer AP, IntBuffer ipiv, FloatBuffer B, int ldb) { + return LAPACKE_ssptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, ipiv, B, ldb); + } + + @Override + public int potrf(Layout layout, UPLO uplo, int n, double[] A, int lda) { + return LAPACKE_dpotrf(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf(Layout layout, UPLO uplo, int n, DoubleBuffer A, int lda) { + return LAPACKE_dpotrf(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf(Layout layout, UPLO uplo, int n, float[] A, int lda) { + return LAPACKE_spotrf(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf(Layout layout, UPLO uplo, int n, FloatBuffer A, int lda) { + return LAPACKE_spotrf(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf2(Layout layout, UPLO uplo, int n, double[] A, int lda) { + return LAPACKE_dpotrf2(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf2(Layout layout, UPLO uplo, int n, DoubleBuffer A, int lda) { + return LAPACKE_dpotrf2(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf2(Layout layout, UPLO uplo, int n, float[] A, int lda) { + return LAPACKE_spotrf2(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int potrf2(Layout layout, UPLO uplo, int n, FloatBuffer A, int lda) { + return LAPACKE_spotrf2(layout.lapack(), uplo.lapack(), n, A, lda); + } + + @Override + public int pbtrf(Layout layout, UPLO uplo, int n, int kd, double[] AB, int ldab) { + return LAPACKE_dpbtrf(layout.lapack(), uplo.lapack(), n, kd, AB, ldab); + } + + @Override + public int pbtrf(Layout layout, UPLO uplo, int n, int kd, DoubleBuffer AB, int ldab) { + return LAPACKE_dpbtrf(layout.lapack(), uplo.lapack(), n, kd, AB, ldab); + } + + @Override + public int pbtrf(Layout layout, UPLO uplo, int n, int kd, float[] AB, int ldab) { + return LAPACKE_spbtrf(layout.lapack(), uplo.lapack(), n, kd, AB, ldab); + } + + @Override + public int pbtrf(Layout layout, UPLO uplo, int n, int kd, FloatBuffer AB, int ldab) { + return LAPACKE_spbtrf(layout.lapack(), uplo.lapack(), n, kd, AB, ldab); + } + + @Override + public int pptrf(Layout layout, UPLO uplo, int n, double[] AP) { + return LAPACKE_dpptrf(layout.lapack(), uplo.lapack(), n, AP); + } + + @Override + public int pptrf(Layout layout, UPLO uplo, int n, DoubleBuffer AP) { + return LAPACKE_dpptrf(layout.lapack(), uplo.lapack(), n, AP); + } + + @Override + public int pptrf(Layout layout, UPLO uplo, int n, float[] AP) { + return LAPACKE_spptrf(layout.lapack(), uplo.lapack(), n, AP); + } + + @Override + public int pptrf(Layout layout, UPLO uplo, int n, FloatBuffer AP) { + return LAPACKE_spptrf(layout.lapack(), uplo.lapack(), n, AP); + } + + @Override + public int potrs(Layout layout, UPLO uplo, int n, int nrhs, double[] A, int lda, double[] B, int ldb) { + return LAPACKE_dpotrs(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int potrs(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb) { + return LAPACKE_dpotrs(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int potrs(Layout layout, UPLO uplo, int n, int nrhs, float[] A, int lda, float[] B, int ldb) { + return LAPACKE_spotrs(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int potrs(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb) { + return LAPACKE_spotrs(layout.lapack(), uplo.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int pbtrs(Layout layout, UPLO uplo, int n, int kd, int nrhs, double[] AB, int ldab, double[] B, int ldb) { + return LAPACKE_dpbtrs(layout.lapack(), uplo.lapack(), n, kd, nrhs, AB, ldab, B, ldb); + } + + @Override + public int pbtrs(Layout layout, UPLO uplo, int n, int kd, int nrhs, DoubleBuffer AB, int ldab, DoubleBuffer B, int ldb) { + return LAPACKE_dpbtrs(layout.lapack(), uplo.lapack(), n, kd, nrhs, AB, ldab, B, ldb); + } + + @Override + public int pbtrs(Layout layout, UPLO uplo, int n, int kd, int nrhs, float[] AB, int ldab, float[] B, int ldb) { + return LAPACKE_spbtrs(layout.lapack(), uplo.lapack(), n, kd, nrhs, AB, ldab, B, ldb); + } + + @Override + public int pbtrs(Layout layout, UPLO uplo, int n, int kd, int nrhs, FloatBuffer AB, int ldab, FloatBuffer B, int ldb) { + return LAPACKE_spbtrs(layout.lapack(), uplo.lapack(), n, kd, nrhs, AB, ldab, B, ldb); + } + + @Override + public int pptrs(Layout layout, UPLO uplo, int n, int nrhs, double[] AP, double[] B, int ldb) { + return LAPACKE_dpptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, B, ldb); + } + + @Override + public int pptrs(Layout layout, UPLO uplo, int n, int nrhs, DoubleBuffer AP, DoubleBuffer B, int ldb) { + return LAPACKE_dpptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, B, ldb); + } + + @Override + public int pptrs(Layout layout, UPLO uplo, int n, int nrhs, float[] AP, float[] B, int ldb) { + return LAPACKE_spptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, B, ldb); + } + + @Override + public int pptrs(Layout layout, UPLO uplo, int n, int nrhs, FloatBuffer AP, FloatBuffer B, int ldb) { + return LAPACKE_spptrs(layout.lapack(), uplo.lapack(), n, nrhs, AP, B, ldb); + } + + @Override + public int geqrf(Layout layout, int m, int n, double[] A, int lda, double[] tau) { + return LAPACKE_dgeqrf(layout.lapack(), m, n, A, lda, tau); + } + + @Override + public int geqrf(Layout layout, int m, int n, DoubleBuffer A, int lda, DoubleBuffer tau) { + return LAPACKE_dgeqrf(layout.lapack(), m, n, A, lda, tau); + } + + @Override + public int geqrf(Layout layout, int m, int n, float[] A, int lda, float[] tau) { + return LAPACKE_sgeqrf(layout.lapack(), m, n, A, lda, tau); + } + + @Override + public int geqrf(Layout layout, int m, int n, FloatBuffer A, int lda, FloatBuffer tau) { + return LAPACKE_sgeqrf(layout.lapack(), m, n, A, lda, tau); + } + + @Override + public int orgqr(Layout layout, int m, int n, int k, double[] A, int lda, double[] tau) { + return LAPACKE_dorgqr(layout.lapack(), m, n, k, A, lda, tau); + } + + @Override + public int orgqr(Layout layout, int m, int n, int k, DoubleBuffer A, int lda, DoubleBuffer tau) { + return LAPACKE_dorgqr(layout.lapack(), m, n, k, A, lda, tau); + } + + @Override + public int orgrq(Layout layout, int m, int n, int k, double[] A, int lda, double[] tau) { + return LAPACKE_dorgrq(layout.lapack(), m, n, k, A, lda, tau); + } + + @Override + public int orgrq(Layout layout, int m, int n, int k, DoubleBuffer A, int lda, DoubleBuffer tau) { + return LAPACKE_dorgrq(layout.lapack(), m, n, k, A, lda, tau); + } + + @Override + public int ormqr(Layout layout, Side side, Transpose trans, int m, int n, int k, double[] A, int lda, double[] tau, double[] C, int ldc) { + return LAPACKE_dormqr(layout.lapack(), side.lapack(), trans.lapack(), m, n, k, A, lda, tau, C, ldc); + } + @Override + public int ormqr(Layout layout, Side side, Transpose trans, int m, int n, int k, DoubleBuffer A, int lda, DoubleBuffer tau, DoubleBuffer C, int ldc) { + return LAPACKE_dormqr(layout.lapack(), side.lapack(), trans.lapack(), m, n, k, A, lda, tau, C, ldc); + } + + @Override + public int ormqr(Layout layout, Side side, Transpose trans, int m, int n, int k, float[] A, int lda, float[] tau, float[] C, int ldc) { + return LAPACKE_sormqr(layout.lapack(), side.lapack(), trans.lapack(), m, n, k, A, lda, tau, C, ldc); + } + + @Override + public int ormqr(Layout layout, Side side, Transpose trans, int m, int n, int k, FloatBuffer A, int lda, FloatBuffer tau, FloatBuffer C, int ldc) { + return LAPACKE_sormqr(layout.lapack(), side.lapack(), trans.lapack(), m, n, k, A, lda, tau, C, ldc); + } + + @Override + public int trtrs(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, int nrhs, double[] A, int lda, double[] B, int ldb) { + return LAPACKE_dtrtrs(layout.lapack(), uplo.lapack(), trans.lapack(), diag.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int trtrs(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, int nrhs, DoubleBuffer A, int lda, DoubleBuffer B, int ldb) { + return LAPACKE_dtrtrs(layout.lapack(), uplo.lapack(), trans.lapack(), diag.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int trtrs(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, int nrhs, float[] A, int lda, float[] B, int ldb) { + return LAPACKE_strtrs(layout.lapack(), uplo.lapack(), trans.lapack(), diag.lapack(), n, nrhs, A, lda, B, ldb); + } + + @Override + public int trtrs(Layout layout, UPLO uplo, Transpose trans, Diag diag, int n, int nrhs, FloatBuffer A, int lda, FloatBuffer B, int ldb) { + return LAPACKE_strtrs(layout.lapack(), uplo.lapack(), trans.lapack(), diag.lapack(), n, nrhs, A, lda, B, ldb); + } +} diff --git a/meteoinfo-ndarray/src/main/java/org/meteoinfo/ndarray/math/ArrayMath.java b/meteoinfo-ndarray/src/main/java/org/meteoinfo/ndarray/math/ArrayMath.java index 39541f47..206aaeae 100644 --- a/meteoinfo-ndarray/src/main/java/org/meteoinfo/ndarray/math/ArrayMath.java +++ b/meteoinfo-ndarray/src/main/java/org/meteoinfo/ndarray/math/ArrayMath.java @@ -6729,7 +6729,50 @@ public class ArrayMath { ranges.add(new Range(current[idx], current[idx], 1)); } } - s = sum(a, ranges); + s = sumRange(a, ranges); + r.setDouble(i, s); + indexr.incr(); + } + + return r; + } + + /** + * Compute sum value of an array along axes (dimension) + * + * @param a Array a + * @param axes Axes + * @return Sum value array + * @throws InvalidRangeException + */ + public static Array sum(Array a, List axes) throws InvalidRangeException { + int[] dataShape = a.getShape(); + int[] shape = new int[dataShape.length - axes.size()]; + int idx = 0; + for (int i = 0; i < dataShape.length; i++) { + if (axes.contains(i)) { + continue; + } + shape[idx] = dataShape[i]; + idx += 1; + } + Array r = Array.factory(a.getDataType(), shape); + double s; + Index indexr = r.getIndex(); + int[] current; + for (int i = 0; i < r.getSize(); i++) { + current = indexr.getCurrentCounter(); + List ranges = new ArrayList<>(); + idx = 0; + for (int j = 0; j < dataShape.length; j++) { + if (axes.contains(j)) { + ranges.add(new Range(0, dataShape[j] - 1, 1)); + } else { + ranges.add(new Range(current[idx], current[idx], 1)); + idx += 1; + } + } + s = sumRange(a, ranges); r.setDouble(i, s); indexr.incr(); } @@ -6745,7 +6788,7 @@ public class ArrayMath { * @return Sum value * @throws InvalidRangeException */ - public static double sum(Array a, List ranges) throws InvalidRangeException { + public static double sumRange(Array a, List ranges) throws InvalidRangeException { double s = 0.0, v; int n = 0; IndexIterator ii = a.getRangeIterator(ranges); @@ -6763,7 +6806,7 @@ public class ArrayMath { } /** - * Compute the sum arry from a list of arrays + * Compute the sum array from a list of arrays * * @param alist list of arrays * @return Sum array