From f054c181810e84d8cbe32561c193af11ca6e6b29 Mon Sep 17 00:00:00 2001 From: Deepak S Date: Thu, 31 Aug 2017 20:35:32 -0700 Subject: [PATCH] Adding ixia latency support for dynamic cgnapt Change-Id: I346f6064c39cb5662c2b17ca0f520addbe5eae4c Signed-off-by: Deepak S --- ...ith_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml | 52 ++++++++++++++ .../cgnat_ipv4_profile_1flows_3node_latency.ixncfg | Bin 0 -> 70874 bytes .../traffic_profile/test_ixia_rfc2544.py | 1 + .../vnf_generic/vnf/test_tg_rfc2544_ixia.py | 4 +- .../traffic_profile/ixia_rfc2544.py | 20 ++++-- .../vnf_generic/vnf/tg_rfc2544_ixia.py | 78 ++++++++++++++++----- 6 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml create mode 100644 samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml new file mode 100644 index 000000000..55292a371 --- /dev/null +++ b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_with_latency_ipv4_1flow_dynamic_cgnapt_ixia.yaml @@ -0,0 +1,52 @@ +# Copyright (c) 2016 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the License); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an AS IS BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +schema: yardstick:task:0.1 +scenarios: +- type: NSPerf + traffic_profile: "../../traffic_profiles/ixia_ipv4_latency.yaml" + topology: cgnapt-vnf-topology-ixia-3node.yaml + nodes: + tg__1: trafficgen_1.yardstick + vnf__1: vnf.yardstick + tg__2: trafficgen_2.yardstick + options: + framesize: + private: {64B: 100} + public: {64B: 100} + flow: + src_ip: [{'tg__1': 'xe0'}] + dst_ip: [{'tg__2': 'xe0'}] + count: 1 + traffic_type: 4 + rfc2544: + allowed_drop_rate: 0.0001 - 0.0001 + correlated_traffic: true + latency: true + fec_port_mode: '10G' + vnf__1: + vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1} + napt: 'dynamic' + nfvi_enable: True + runner: + type: Iteration + iterations: 28 + interval: 35 + ixia_profile: ../../traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg +context: + type: Node + name: yardstick + nfvi_type: baremetal + file: /etc/yardstick/nodes/pod_ixia_3node.yaml diff --git a/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg b/samples/vnf_samples/traffic_profiles/cgnapt/cgnat_ipv4_profile_1flows_3node_latency.ixncfg new file mode 100644 index 0000000000000000000000000000000000000000..fdf47dad88b50e20712bd1cb4d763f8918e0ab47 GIT binary patch literal 70874 zcmZ6xV{m2B7OtI6(y?tj>DcCuopfy5wrz9Aww;b`bkK3f*s<~TIpXr)sD%$xJK)K?Ntsh5jS zGOvDeRK@m~yU$!`%Tp})nwqPMnFCnH84%dBbKfX>mxcs3wnDO&0SRG{wWUE|u;7rE zg1^P=GFiD0mcz|1hLVo-KYXHI8l_sb@KFjp0;RM+O6V4u&d$K1>8 z&gbR7N7Cc!&*`qv+nxXWSl*7wQ&hkXwTSmldH-|I&eD4Qj_;#g1kjUuuJ1!Pq3;yA zukY?jUr*of@pb(!z9WDI&(eSWwAX79lr@{9$fx(Akxeh~OnhzP;C%D=wto0!@xI%) z9{2Ww_=WES=I?(e`z6?^Sl0f2FwuLJQ19d9=QRNhGPqxH)7atB^ZXjy>U)1>A-48; z6Cx!3yqg$N=vxjkD&Ki~aSDZJLI>Rz{!p5$DM*hN%!_k z3iP@`^w@;{VUuT?!!=z$x0Ubk#q(2y_we1Pp_+9)(Bdoo<9z$%SmXwe>FqapY!P$< zG~okO04=f5sSt9U;MtVFN95I@)Wd?I(eu=K{QGMfAR(SNqia(nq4#hI-I;aJV(4vz zP#>{_g;1-{@iXaZ+Wq7?=>3-aL-JtH>-cNtt0r!VxNm=`-a!A!+q>bm;9cW+qTVC# z>!aAG{&Vkz`XwU3A6fO>>N7!T2>A8u^J9)G&N0Ay?k2LwA%R#iMW|Fx*-TwC!OSo?U!eE%S{Vt&6$Bwj9+W?y1bqB>vvWVN5Lg2GyHLOWKF)t?A(zZt3yi$M zym~+2^YFhEYUO$?L-f%1N_$%gh{wO4?KKGe> z)NcN>4)46%RXCe37X8BbGjy(^<-#+~xYI7oPXrt!mO>@@U>H&uPr zfbb7XbM}7C<1>SNRsS3bcwp+w`KS#S-sv2?Wzi+p?|);`6jbZifXWy8`nGy8;PRp1 zamN?%#6__hV`Q;L{L6kq2qA#&3&o(9(CJ$>`CI3k;@$DY=fl|7tp{Vjw=2ilFVQA? zrApHNx4F-5gACt-QDVfqX3+M_)z_!N#u(jRryi1vXYbd(#=$`V72D7r-=o$LPo5F! zug`bWel-JAa5P4Sol`8|~%`0RXGZBGj^aNPm@ zziz8#HMLTpdf$qt>Pzg#j=P@B?>PgmKwoP_<{9a-TlfNeb3&g3iqXw?Imf`w7#e}p z5TuQs9eTkJB*Du=dEaAdp`Lf^imxN>C)02BJ7b6Qd3oE_pX&Xa0jdmW#Oq>`5DbD# z363-HK3nQ|#V28WJCf%XU)?SiZRF7w6doUZPoJ$XKi>B>+!1!i2|@zi17hc1o$Ni| zZ-nM@o~aM1J`X^>_&LolKd$@~pKKwj_tT#Mp!#U4=aXWEo0lh0+RuEDpW-h#!g{dB zo}HH{!j=cl&jkkq|CP=b)te=euSLPD=6!DuyYojQh>3+_Tg+LIgU;`3B82XV!l%Bk zKfqXWg2&>3K$GhvFBg`?5i6lYjWXwu9mvmk=!xBRb$<+!Yss%-yRlv~Y5m0SAJ<%hmuC*dd2gY~F$UY6vKMKW$g}S$&N*MGqvuLb%V9)_Mt<_z z*!2sSPxX*kzxO%*v+qs;zbtz%5DwkGx_l?~G{NeD`p*YLAb*edxq{cZhS#}wiRh5x zvv#K&MY-gl^sYOF45FJ1PiKUO?dv8sI=^?|*WRJVyZ3Uy>X3LxTT0?)mOAe~d5vpu z^>j0yzrPvc>XIQ8-p^KS6OjB%%*=j)CQ;tlVLVXSX?k?e=2ukRR& zK|pL4yN%fz*=OlnE8qI$%ET@f>DNrXkWh!-;$A#UQh^X)xV~&(0OWD?ehT-$KYEov zJ(RDCGW7M>;4^~`saLT_r$1SVP1dV@Z)gJ2x={gt$`xOMe~XWZ_kh=w@Cv(k|L&Yj zzlR9bak`^AMZvefJfJPat7N_xiWd>D@y7-L}@-qYeI|2GY9fG4MP}eAf9@3DF3xR40ps9WnUFX`oCq}M z>V>?Z&+Tq|)+cuIh5Yoi$v^|?FZ&P87s}U}&%ZOUNBSAQuPEz%z!6yQK`PefY0ULc z&vm_pOx0i4tK4l5k?*B2c|CP$#snZj$Nk8ON(o$IBfImMx`ehdy+C@$BJHpE6zbkG z*x2dMZ%?uN@qWkm*vv<~2YO+CR_6 z{tT1g`+16fyJ8WB?(Og%W$;E(;fJ;=SlFsqv_b83nNo5OYm3RRXr3XsqNktP^<;Q< zgmseZaLN23yD8YOVQ+486u0@pI3>BimfHAPMwxaI*?MVBn+e+M@0Qs7d2|6Xj*fHq zDB3xXo&SaF6nVhbee!f+@TqXxm%x}G2a0z3V*0ue`fUH|H=qi50ewV#jhq6%EWRF? zMu}V;`!lDypKJr1Lj*RzCXg;U_%{>$bsbyQ%E>7zd^(oBI%bF5i0bYf%b)pohGuA` zgkK{r_Exp`Lhc=HYOh7SJ6eA}lL-9LruR)GvaiJy%hO?=QS}`fF^)T;FIm*MF?-2hx@CD+u8GnZ9~v}{p$-C(4-qhIdq-s)bY_AF#=md zea%k7Fmz8v$gBGBcXLM8M<2ICfkeMhlZo-OCcZ6Ld;~<>x_N!W^Z33tIp1^L0z#?6 zd7J_aCjO?1zq}m0j|iAJT2avgv*`OQBdL)Pj6;EpL|W9(Jk37QFEcDj!d`iT1QDpY z0u2U-4%vho%7%t^ayN!YkediYZ=dTSr>KW_%()G+{KCTaoIbakx%@Q5A(xjEQd)mt z>Rmz2v-ph6ghYP++r0o9yH1{c=ET_2Npu!$BEeIH`@hq1qo8KDlQgI1;tu?vwc=jk><`F`KUcvNrqUnh~A z@xKA%_MB{r^kfXww@LZVQ*Iu84+-EmSig$=0lm-v=M@Kwxx6L#bvONdAEVk2r+R35PNPG?sSUqB0S?iP zJ=W0E0=0k8lfL~OWxq8RX_X{5?n!-KUSg24q{AqzauOJQGfqL59ncu^ZztzF022(I zFrI6`AoQA@WRtOwC2^f5 z|3oVk*Q)0fw%Fcmp)Uiuhk2o6=@yTg)8ckr=;N$Kh$eBuOei9!b=0t8bAsF^$MMTT~Hp)Y}zX1 zYMOkQ+Wy8)vHqy!_wY{3-@6!KxK8hHai1JXOJB`vrg!;t#{#l}N}5J?9C^znQK)5a)xicSxRWpWE2RGV*-Y{pr5xX!rT8eD#g$pw~=F67*+PYNdD0md2vu^^v@Aob%N zvW7nDCuurX<}Cd5Q5Ck92rM_$iUYkNR{$-euiRP}+hxLmLu>*qIq6a;xIsO3EDi+;6QV$C)ZhgKlj`6>@D37^HSzIKbrI4v$Q%eS{MSqiraD-g;u@|X}=Lg18RQ?clc+8wHQ<(OT zp>V(Y{{GE8>m-q`Z+LBenviGzc1zrqt>~6o~wieNZMYCirC8}uw9tuH~0DsMaxsYQ8^&ZaLDOQel zuo;%|$Em81+~xUcVg;DUwv;>Ebk1#Q{geYLZ8}tvbkF$MBP%5-g3_Qd6K28NKKq{0 z__+g%7i6sSg{dL+jg z?Geu7{+AV(~3N4+XyWcbFqWM;2jh0ZrM_UlC z?do}G(&((oKlQ`bc^*L~6|jGwsE1%Cua!!7Hp0qU(A1y_TN#@%FNH&{f@Wk8K&50C z{9Oxs8OrkWcI38cvk<}MX$W^xe)?tFFwg3Fz1bo@AA$VWLbw<{`z)N;CQj@jXv(k1!*lv@c5o4RvG!GVraoVGEi*WiCf@*{G&&6} zKcz|ys33*EZk}j^i=nKM_}Vf)jrCL%KE@NAJ}>mJx17oOvaUyjaR<{_KTMuOkd*Hf zZILU__K@#ex5tDeF_7-!ME~~cRGMoE_wAV-;fxw91;?g2PAK043~6F|553#c-#0po z568@d*AHinIpkt0D+5PpecJ1lPROn|g*7aj0n%oK&&?YpzZG1e9N7S|?qQ#L`nQol zg@8aX2^Avm-QjwOHuMaUQ89COk18U}pe#0Ujws+|){SE{jVQ*HP*p?G$GmN>4r=4% zTds@D=$h79L3x>nMH>vd_oTV_rjD+GScr9N+pLYz@#~!7QI{l?o;N!F{aE7Z7 zi#(zkbhMV7<<~i05SpMaawvnGi%1DFuj-A-CSYh#k7^|lUMcINnVrsDop7tls1IM7 zZv36GnMArkO3m`%3+n+4HxyJwcUBCZOh|({pom6lM}x^Z;B&g8KK)f{#$A5Ksq>vA zqGvd&ZUF+FYv=mPu@^nB+Tf}=rI{9%#mG(902H(8WFumAP58$ih&}E(%7*ztJub%h zco)4@NGBUN!c`sa`uX>rgVVdrLR}=_eFR>>dy}c7bKe_iA@15&hLM3otknxJH^#JC z4Bp~Df2?T%S|Hp0Sr`&QKDzl^dd!P|kt&G{izrIwr$|nTtSlxf8z_ zP6M=Dj_90P_+{!)+1vdvoQOZqnJcDFzM%m`6GLP8EJq~59aG$!CRQ=SHJn!t4ZR3e zU%9r8!S3k(?}S^TaNqteL`Cz6R6sfxpnyxOii@*~7yAUWh}&QAcV537(Z><02x#p`Tgw|o1_ z2A!Y#J+$h;Z|K5nA1xSMVM@3W8kWp{Fe4%!g*9F{H|mRWNB4Yv3C!3%{K9Pvu^+;j9$#Y`j< zvKinB+x=B32RTb8R&>=cG6U(8M|-S_G4HznT`5$98^xhE4&EjOb^ms4)H7%F zSZ27RHpe#Wl0W%r9aY%Fnf3MzSUhx89oM8TRJiuep?~nB$h*fU? zXz|4AmsdgTeUaMGQUXP)9)i%;@U(*!>b1hr~D4CSebKNUbkXK0KQkbo3c`he@h;L)2w&G#Ec-u-BWWmM(>HM=4 zWyh-L&-CdbU@~&f*koWI+O@5DZW21qr_y)%s>+6)|NSq^5&Zq{jXKZqbu|c|oQ(l9 zd5g%)DP~biAu)BU$ekFlv=UX=@4o4wMkR=Js7zZ$+&R>&EhkQAIeg7o$f2^~ycto{ zmZ8V6mewQJSr#Ozli(%d6t*vSf${jZq@xK%T|o|@deMtjr8gAXHXDAmDk?hl$P60> zsCjVG6VG=JulEDCgP(|n?s~oE8hqq+^5nC|H>NDj$W5&{0hTC0D%0KXvBlh!agR}yT}k}NnMbc9bH+lcKMms@|EBe87^$NJf?ThdWx@)9p5(wxRs5zQmR zC4QnnF>`z{Bhm_xD0>7-?AWb${K&a6b=TpvpBlAWkL(BdY2x3NV8q1|t1!W$Et65M zwKwX*q=t&3!6_l?5;jz%nA|*#?i2q%=YiN}8+{pSg0+{>w%(XEmXLvy)V%kANx>aH zG#BwtODfjaE8P&~PFOsH@KZtfy#@vH3rbc{T7DF!6+8fC{R~#(?5T?S^U}f@K0~>( zn##p#DCJswGq1cK9(Q9u&xg!bOdDh^WC_#pR%V03Ml^F|8tbs@0yrgddz!JP@V8PQ zv-(s@tCv=hgD0WGJ-MP?+@+6-tl1 z!sBS}zsVG-5VS97*VL04w_Y|QC3E3Wra-L!p;Ze{{8n|x)m1f2V+ zAbKUKYcsV?{>gwn1OKifGR>?8{!Ii`B8x=K6a_F`4&8!J*xt`&|Mk4P?Dn|L zyIBi?JHY(urj$K^$5CthSNB4`!&-kEO5dfGZW4X3$~TREof3VdYDNp2nL!Q**DDIy zCHs{|FBd>s;+c{-7HlLhn^WT1Zmbs@sa7!X8VC;VAdozc{--ILtG6cCk0v|cLZQR^z)K zt%{P+u*;t@$k<>EZPqGmz7-Ol7b(gGI8I2ya4a{uOmvr1>uve4dB5FQ;pEQlI)o2g zwq^~*ase1B$;{JrjT zZrhI3(uveE+;t&+Y+9Y16Nd53KPz!t=f9xgjogj837@;X%*mO=k>!%qHY{h$R5fLx zNd0)W9%4aX87rq)LHI8ftR=d?uXxOk@pj#VJ=D9UA>-#9Ji4V}wt^eEsR^!+u(QSs zm#d^eN`IAJ;;qYB@+u@Hm2SP3gTantm6|R8CgNKvjV_~trm~f4(1n>7u^)iI0fssy zt=b|U?9Ip^Z^9()i}4uj37aO_Apzpf=itddV4M8;;H0NfzrHd{VY5WBDUfI3Dw>=s z78F=I&$N&%ViZlH8>Cv*+Qy;=ji90Fw$Uajzx97b1Xt2*jH*OPCU^|wA|$OvA+<4} zz=D_!XSR^Iq0H`t(4Lh$+`<82?q;C!{G!*bO$T~I7kahi4ldc`E%y22yUJx5_%6Q+ z6VpdK&s{Pru$1bj{)uYN92}(%mh;s};~pt^Xh`C1={@o)lg%a5eu2L4dZIHiKxUHr zA#=6i+zif)B}-}UcdS#KXrMM%=^v2ecfFN5kE`eGtLK|qU|qE$aUY)Ux!DBY3p3Dh zaipn%-EXWmUxICKE+m2klWsySS@&~c zt2V+v?zTx@>#EEv3ekX>1HE|8%&LMRYZ1|ND77D*N;)Fy=>QwJD(&YrbZU2dI~r}9 zdWldhYq1q%Mrbt=XKAZ_bVZf}@?jk^j>I>26B_wKq_N7#bT;io_a1LpnM-9wzm3a) zX7F|m0p~XERM@avaugf(UnV3S(MITbXo@BglZv82wGU;B#5&5pDzK;}i*Wfg)m6A5 z`?6LSxMet#09pZQR`a49qQmf^<=glE1 zy&5W!xQK9r=J{)`f<9_9rmb1e)-KPLr{nzzZ0Ius(3}kgA2u%{CtHGV{2~! z={i*)1A_k13v0xzKW1lYUj(E=lEGvNyV4%;423BLN)yFFGbwYMO^)p+IWBeSlEy-ir}gsAU1+K z^7Yz_?S0=?Uj?sX4!}MSBMhE5niZ@jf||9xzp#4g@XR?=a>2b_B&0qpye8wTK@KBZ z2Uwx{>^_TJo)15%2uUaL5|S!vMZgvzX9t_v%x7^;&eR8}`82CU7-|{F(#@?z&>c81S=4suX)}{*N`{_ZgFpmN7x#I&!xONv_$Emb|!b_8enJG6#8M| z=twp-Ix|P#7c??8h%1p+u|LpPH26i);F$pPaOR6Dkt_Xl1hjtryzT&@k0{ebN64ct z>)8D&kBW?yN-`n0jgJHTDv>I1L3tvw`fQ;okYtTK7Htpj>m= zvUsDozPnhV?MGi*aQQzwVe+F)KsC53mOsbglyD<+*pWMxCram^on7mF`Fu^*5ZFdj zo~Kc$goQ{zsTLYRB^*&9@)E>C7)&xu=|X&_g+1WhJx;eDmDBwBbINGc6_SvM?a1L5 zu}2gQmJAwzv>{SUy$>UeF*F!gT1i_iSzN+s`R|0W-0E~PVq6r!0qbdFFi}%ToeKGz z?$(ynZ%2O+06O&$T2L8Wch z8oVw{24mEmB~{+nSHYA*8YQZ1CfhDm9w%ea0(G(vE@XT|TuhTI{+jC#P|TT96t*(_ z4dnRXS~HdZm(luYrbe=FwGZ3d*Sg%nlBTn6`+ry$j_gHz;F2knIBCNU36 zU$q{#d9h3HW*@EP7 zTxrS$7#}sqln$SIrZ-%z3%+j>W zrs7EHOyGACJeQ$Lh~otz1AcxpMfK9=EveB?eh$q_ltx~mMQt4i7pJFWeM~I^Kg?7K zACzOW#VpE@;xV_cpOD^6!=dlJ?+QMxFR8YF=pNcQS0&Q1F)~|xkdng#+l!@IOoAt zr^D7n!JB@%I!bm?S|H1y_p_%rcdYup9cww1Kr7|_!N6{b_A^t$ktvhnFHMRPz_=oh z^e$a|DqXeWhF5H93bgynIX4uRhV#7A@ag$yZmvvyV@FFZu3u@66D10{?R z`#Yj8e?q8mB>~-FgO#jfwHl#J*k5raCKXOg%IJ;^?S^QGNLQ-ltWXXsH+$2OwGN1k zey3U&%6nwRWnapg5t?nlF(*%1^n;s$I0QV{p-9N_nL<*zpV{J4H)T;b zk+&vvs0RQk?q)x>DZjlH8yAlD0&JV5-4Y&m6LO~br8Z`Y^u+=9>FIH|bNY;`yMn;= zv%}trw zg2#-25Czc8>Cgw|8O2ymMKOeoFYGJ?FU?OsqBK#@!2XdzL)omVNG^CPyOfF$&q)fU zHLk%`&a+}jw6}>QY5o*#Gb{jjGF5~QUmkg1`9)l|lWJBPGhQ?%D=;PD?ZckRLi4}q zDvwK-M^6J(SzRu`wrOF%_2;Xr^G%%a#JXs*A-Y#-T}_5GHp5znLLVTvlp3M5$1fOa zpCHuHsq|Yvhi7_xE&ZlGWE9Nsv^OhPHW@ICoQ4f!@&pI54@>VwOj3`MrgZJFzkH`wSa2Ns5~}NoGbVT@wlm+ov@AYaB(jB*K7)aXJdcpa5%{Aj-l$f zEzQzMwK^N^$D|_f4byoi_hW;{9$hEaQt{+ER<^i|BgFx;P?MRD2?jpQfV@>5x7^H3`xrHbeh*`~IfYZ@Dt z8dj~5XQkbejGLlN?Q5&{1(mgIS@i3DOHRxz&?%Jy6_TyYo5s+n$-L5qQuGb|7ph2% zQ0xe%BZxgjv>0PVElKh#J?+tnsVbG+n1eATO}8*|f$i7@7gn_O&5&CwptJOM8}Rs}0POG!PpMel!U-t<;2huP4En;C{XYHlcorjjqqe z_;lFBOq&iAUqNMDq-_1sAO%ID>3>X&$vmDl0nb+R#Om*IAhuXC z7t93g`bKJl&$QC<+N(-s?Ru1N%s))XD&kNNfOA?6)CxG0^Doi6+lSsi+s$+0HJL{Fw8qTfD6VgFVoK+|4stczjr zn9z#UsKvaBx)c+f7*p^c3})IXFJ=)r;a!%)vCt%qL`H-V6-&TJZ6-lrw@#n4#lB*J zuvP!}tBP<7a_v2DPHSya7Vvkp>XC?Ja>aLt>JGLtv+U)=DS_vWs)*RZdQ;H>X!j{1 z2LlP2oi};*eO!kBDOf!VP;K)T@B9((Jlc6vIgK=N_iq?kTmc{6=DKy}o8@^v8M zOtbqvLbFQOFlx231~~*5Y-%n5p{?A&o-JAfHZ521yu{;dAo)0Ns!VEPk@V2ceOw4S zkx{a%P8rQ88B!uw4h;5A2{!qJCLRHJ<6~`MU+y8;admnpVsN&HLc2Z! z_TDxG66(Tpy8tTIO@C0uS*J)%9DsQfpb6qQXOlC@ivV%+6GNqJgU3vdD$RQv5g)U4 zm;b)eN8&K0(|58Uwit#9pxGZ8-Y`QyG=i1FI~juOX}XS{J4Ds&;7~+dC0o7Vn$Yxl=ZrH()<_TK=35$ZAk8A`jCD7{GcAJrGo zG`=IhlWB&$`>XVg85$~TchU(II1v9vsUAeY-0}?pUbw)P<=st$ z_X3GN5$3xun4EZ}a1{JxfdR6WF|u1D8l|d1xYJTu3>z8Jfd;`pf>dJ(L7xsLg3AQ; zDi3X?8?rUtEZglen#ZVzY$5j2`C57RV#vbVm~RDB->TkaGWJGeYe)w&iZII3=6IatbgDBl>bk_wsb=MK%`J5ECMFTn@8cp7!BRN)CA2 zPyJA_xJGjko}Wcv5x5+|7r+sZ=88rF_{oZ(!0rV{_FX=9_6n-e-xX{`1DH1zilmG7 z=YG_*xA}{y&e^-~A6S&s*W*ZtdznJ>bHK5>f}QNh zJe?wE*ijmh>muz#M^DC(hlYHR*P+Q|bsX^|vrO=s*f&);Jl;SRO|VYJDBYiQkw^!I ztJ~EQN0)5fd$Atf*CYVHbr6z^%N|ch>)ach5to@!elt-&!=J<=HQATi--Hw^E}M9i zoLik%si{EM5u;mQPxTgadD|vm9v@w=4q;}#e`5vLX!ax*0QS%=G6R#-@?l{m8aZDU zbXF~5#$s!6sTj2@00E5b#JMA26o#>6#ki1{b;pZBa3?1-KA9`CV)HXU zcaszTjc7#~3{>iugx~AQKf-wAbI*=6>_5aYo=wSwkE)50x${Gb;S4GkxE$kJnoYLEDeT zw=k-M*sxKSD$=VxGUqr7SB$F<-`~_1jlBrzNCvN-qGhg3nk=Y{(3PU!jxz+y4mCSG9JBhdBe__ zyL=lt>DP5eugV5cM%_jN;ZjG*$D8*V9?&LDqA#Y|m7r7qxavP|_gw$K-a@$ZLUxUD zE#9d!=pn#j$fqqTrb%4eXWu=GZjX0B`O%3Q;4Tn?9x zt2`eb3@s<;AGk;f&GCDsm#es)7^vdTdl~{h{4=%UCSYKk z$@Cgt^x}(lZSiG+oJ+gu=mg(pV8e%^W@dmpC&b&p0@=DjDO;RV>ap|d_NJhC`(zI* zu`n%iX-(ygw(+0reh`Nd$bqp>o?$O1wTZTIO*9g*6Sy+Z+uFj9sz+jNO1t`%$Pxo* zHhkh%pO0x3?Sk`gm@8vSwrq}pAq_E35cn5!us%zQ#0{=`YkafP-@~`|Ag}k-*aF%SAU!0ZqdUjJI}v-yfQUn8?5ta;cC!(dYr z2$Qr0Cn}&Jqa-D+(r@J9FBv&6)m3|BgR@O|rgLiWUzcJDfsHjNj7x88`K`p5dbk2xd{RqHBe=gYCeUE7z~`3^ipf)G{u@n23xJiArWkT$V6Z+ zWS=5(Nq0c1s?m%6vC(Nnu`Njirk$Y#1Wu|GM9^%S_Me#8=nU026HY{a3Au)P$P=05 zz=%k{Z@rhHp0tZLQe+ajnE;=`qRk>5uF@d*vvaw7z{~h|Xg#=Cv`|ti-dJ_(oAbml zbdBur0xCVc=j@=WsYZ9bChRfAMp|Mo#)E)QKz>*QTLx42)&@OewHxJ#?u@C;6F4%Gi zhe`4s$!x}ljja`d8KY;1o~d)1E^XX6;oo3%Ec#I;T3oWEwXwYly2NmXTkv4-S<(d* zRx1WT6Cxl>wRaHr{jJJB%|98Yvur+oRS`#wkTlVucyu-7Y=3Yla>>rm2B* zyL3`VVvD{B5kj6_*_PUt_~r)*XJll7)B``@pV!bMOC}G-i9_ifHuc@32Od#%Pd zF-fLgM_5r_;I&3qBiWmfij1f+KT5I5lBG?MWsG!s2ADPtxqS6!jSqr5wC^7*9WNKz z&#W9YVMb9o`0Rj{nCw|xS#GWbZ}`xghk_OLVTYE=O+PEqS*=zG&8#ZKNorWc1%zU> zBCTVCP=8kDLWY*2(P5nlOYhP27hj3MJVQ(X#**a$Sin2tRZh3v+PbQ zBc1lZ{;}J{P8F#?5j2ige%sKA%*JdwP!*)*LXcnKhf+?^-{tH(p2D48K>{qH36~hc zAhI|a8($Qz6*P`zvP7p3qpH6wbm&lTrW0*%zti(sLPIxXIq-xi{x1|yS%HN3JC6$B zV$lwSfuyGt^`Q{WBc(%OC4oGPL>mcX+Q3q!dq*BPx*+*8mAG>fyz6hV~5^C{2%b}Rhbygf5S1cWs+?GNqUPY2| z4r3{#C}|1e+BBs1)gLxIaPH7Pd04D1#n-C>(coJS$oNncvOvSf@|<8jMN8wg;`!&W za)lPTTV%7&34`zi(VW-3NR&?5;>DI10^i+|iJ-{c)oWQ>F$Ex!G9D?`G;oiZK29Pi zyI})*7d)Nr;|?3h@$H~T&DpTuV6`ikgF|-{WZ_HfL^vAl@LKVmpp-$r z6~@anJNcb8El2(m*WQyrcy|dNlQPo182n~@SB{4+s*Lr9oIK|$p-?+#^5vid&i?LY z!*<`oAn*RU^z-?Ch`zIFF*&sGa6d_pzX{Wd>;+j0N7UROb0;sKzk;C?{FC zOA|4*ad-cV8;I`;-A7(0rCMQ1W{Lg`d;XE51P8 z-u;5b@PQbt#KxgvP!{hYL(Wx3hTSV9qvfCpS!_u#vHKWFpLd?Pp@~`wMH~MbK@GOW zBqu^1=$0B%KIObtwaUJoZ!BA}-9jXFQ?K6UIk4e9Xhq7_LyS>p1$B&l_(wD_lT&%mEy6WTwsg|pAf1|RtBaVHAp>u=XWq<&%PKTb2q^!faCt!o1nPv_w`9+ zmXk-{$EET9e`9d1lCkIC15X#6;}AQrpr(3p$2P)CXEF2v+4boh(_jq+haZ^yx-6JI z_bupCPX3I~)gtAadX)G*&W4o4{HTk_%0r{#X!!F`!J2ZSvHUk#w-7?iB=zQU@!Eo( zKeB98w;9anR3N=h{qf)u&LX|QLvcO%44{^Wm6uP_?0#imvcXP#eJAfv6v;o3cCfG> ztz&I_T-AjCxl6wO)mMwF!=afOh+C1ukavFgD4kCg>xa1Fj7-^)*hGpVGxP!Tsuit$ z3#1Fxp56UjGv)dx(TQ(~>k$&S+lB!eH>=lQ$%XJGYU|3SKlGonU89>~izoe7OY)sC z9Iu2)x|a1Hoh{)t3^L~}m@qOl*6@n$#y^{yh#V?&BQ!YYCb5KovDV6mrw4a9v!Rfd z^Ua5(If$a8UXHN#ks(1~@S?$#e8x|BF+wR!^49q==VC>$8K>|e_>YKp%tJB$BjQb^ z%+#c=s;LE5spBNykiUh|irArv9>uW3&>6u$pR&${%5t1Hq|Og3e6HCdvedYTQ&@2mh!4 zE`ULq{TZ)9=@-|%{-0pR{w8snSndnSRK)bDJ(VQyia;*)`qua;ni|}c?Fz#ag8-g} zyTA(f-J*w<+^0JBnwf-E0)zF64#fzqXdI0EIVV=NE);1XZ`S^4dV}r9aBt_hDRx$_ zQOL(3T!>;ecwD2DB&0zn&CrJ=uC{D*i+I6GjPIO8%uozd#&P^GZ@4ur-7gAox5|n~ zRZDl_kXR!K0$mPRNS?tzNsmRg898YuiN*4Rmi04On%PKfP;ZI?Jy}T;g>n*j7K;+2 zKP{zpH^XT~f;~%qrK1z&P_+>hS95B(BR$f5Y9!TRP2{wE## zu)+7}VrHyxZ%0;?9sgI?a@#@-5G+WwR4pQ=&RC;f!#sPZ?gJBV)396!_i$q3mC=*LqzmV8~q|~`Z^W@|e0AX&rg(~6Adi=FL z!ny)_)Pl|0qB_p!)~kssk4P*5Z4XoUkkfzJ?y*E#RE1c5ez%1_T51$5sh!!=YpwPF zN7Y+Jwbh1ggLrY5;O-XOEx5Z=+#QNr(Gc8Sin|uq;!xb(t+*Eo1v90E;orX4!MIGDo*w>)(--E3qbiZfw{Y3fJA?}d1=P^8aGk&kq>8IlS zCugGi#~Fq!rX$&Js~-Z=0sXf}v!#g1hb+-)1nz`=m`QSl3KiG1(0I`c6sB%KNz*0H z;rl4v*fAHO*Z1OT_0jj|!|_d*b>gR_^!^KLA5(x=A%9YSAD1uk%V!whf}o0=#}U5O zu41hNCdlxhjr0Rr> z#5+kOzl}|V1uaJmD~seIO7n*ODuRfOo#={?W(`Z^{ed~EpH=sRl#HUmap@v?EN+?( zZY1wdt{KXQ!ITc$Va~w=2039crSIFKiRdAWQJCXg3Y3cmZWLjb2>SUn$kU99Jn#K8Dq&~?w?@Zk4UWIqVtSQGuT?h$XGZ-oD*`yVpZRf+r>UVn> zpsBP=6Y*Hb`ld{XOv>0Nf!qpBOFU1JK7NweIQRz(4+&R?FGTkX<>3|BAMH%xviFMZ zdd=g?5iV19g@56xvUS{zW@l4JqcHQbly~Qxw=S)kxqZ=0)b*P;xcCELO9yqZ9c8gT zXOp{e5PA5ys7=^FcXjew^xO#6Vy(ZV%hiOvc3$dTA6xXJZnl20$PA7<9&^kdN zv5pdu@p{bE$+B=HZ<}p4^SH|D;dR4iO!a|6r6eQ48#MI@O2No`W@ zmvZ^1H<;h2^s2nZX4s^%rj?rPS}-hv=`5;%p6OYZ9PpvAuAT(!qSMt(3yU7$l_Xl8W^~&zU0!9zM!KBfmk)Y+bpfrt}<9wfp2V zR<_jX7odeW-uh|D0|Ppf|3+%&-GNiurd<2q-S1jc%ET@BeK#~5NQ{ddpQxCzkOrhE z6-O}wht`mW%zy}`X_-HRBdO9QR+|r^%-n3lomGJ)k7cEJLSZq*ODXpM)&491-zZj^ z4S9Hi%nOu#Q~Oe3MAq>|&}w;NceM$Hk#mxE){0gG{*i^~B7w}s5A8~&f3 z@zPCL)_w4y0y3v26cZ(l&+TR%`3&8ZW)>NgX&!feVX?rO|2XAX-{EQcuN3R7@Jr?g zaqjxkbH}EOMT16#+rE=z;c3_fmn$al6%B0XCsRsruh=tN-1bK0-`%d0PNkD8C|cy_ z49*``u=G?14mQnHMaI!;kB`EuosoSN{Bjr#V%7$idZ0D1<6))mmo@nZD~@I8l?Ewc z?==FjA{OVHSzrWWj+o;hP*{V+4kRv;y>Nx>O_#FS>whKNQ0+Vm%)~LzA&g(F z71Smwzfu?!XzAZ?DLwq9KvRXxtgBhYT0Zd4_HXSw*Ve64x6c>13rK0-8u>qOzToG$ zFgCAPFX-k5`r3G0@0|2T9ma?Y`(wj^QEQ}z1l4ebG%Etr;TUpqq_{as7=II`l=ABG z<(kC@tmT~8)y7z36$MX){U2#vGpQl1$s?^hvEyiu)}J)&hYL>^^DdtW4UgSUj`TE5 z!HT)Gimsx2SMRL9)MM zTtTX=+3ug_)Va}X?Z2MDbHKe;hGR+)Nkz$m;O$i$Qg@u0fZw%mT}DE~%eZe)r7+Y& znZ%K5;C@@(5=y?gq!xgH%m2;Ip~Y{1Qn#M2XJl+HXJ_5v@~BS~6lvZ&r^?EhC4LXO zTXf1rZboLNNO_9J_b{+y%4LrS3IFv!Uim`|W65&;W1T6`YxI&5ZRPkrjvhIX!N?|G&nsmr^j18D|k2iQIN@_(+I>XOCw5=~fMx zlN3ARvwJ%Rr#HM$la|C0T8YqU!Q3frCoTC+F`}hPPw2~0<-TTYdh(J zrT1#~vOC&lTXz=rAywsim}1RxV$1R`F!UIB1=x{;=o!d{twOOmpjQcCvP3Qj)ppu_ zD&#Z1iG1h>ex2Zp_$+sIlJ)p~Ev4^rJgD>hY0Hz`zGTTwzK_HJvS?6-#3>+O4IdEx zqCz5o%;GAM0pquQcm41C{vT>K?~W+Sng_;FT+_rS(T$}AFO*_q zFh0(gLl53hB3MkxP=^k{HKkh>T-qu3Sd&%c&jBR3ctQaN>~ySC~;9t77;`N~4@ zSxRKFZ{2}5X9bEC%J3{RZ}Y%W0P|N#a+g>XyD@J5FYF3X=&6#!%C^B_AOj96Zpwg4 z8(MaZ2o$qj*M6qZ8d}FTgS>$)=<>k`$0<8Jf|CO#&hF5&iwxbZy=T4|zr4A!F-$^+ z3><8KN;3*6jZ_6}l58_!7%gBwq+V%3#@I=Jirm@_=C~WaaZb$GX*MDK@My<2Y!9$8 zx(54R zdM+MX9X6OrRD9vRG@#trq!P<=WvQZ#QMANtGSEV8I8?oB=ZyLkVI;hT!l!@|VH{mM zd}&WoB4>X_ifGgo%h5_(<4|miHLBNfdM=x z9fs(y=vf1A71Pzok5%O@pq5}~gb?27GVipt?WlET)`PZG14+qNwGWN#HRfJRV?QQP zOi3D9t^f-aA<8_af;miM3K|G<0Q1kU^(=~9YF&((x(1ZI{AunTh9$N{O%rk=|Acla zK6r6aZ!t(O)Q2ER^~xTlhK-RW%Pr0(wqSP%pJdJ?r?$Yp=v)snIr-7CETWGlE$Zkx z$YEYS2!3oR6#iSidUMqFdD~x*WX&KyrxPnyma|W#l;9br-E`rX1Yd!DSF9vRqxy?4 zMUGkNMZ?k~huy%u;i(FV1F=AW?I-eaM73eC>h|Z~WLeWA4dU1-6^rAqa)^yCr(QDGV$UC$0D3#$ z9@yFIC8T! zyiyu?XJpn$2Lz!6M4^6C7IJGP<^2BHaG#43M=?&CO+JokMN{%%1{RmgSHF}185hTA zrgK_?Xe3e+yCoBfY)=nLr3bz82To@PPx{5HR|ch{`P=v+zAyr6AjF15WJzkm2rW^l zb%6d=?vQq6Dm6P1G_*9t(%B%xwVj-q*ezO)ZH++-Z?r?y1TWNth}p)zGaoPCh^_gW z%qM11pJJ}PMrCjLW)}xtW}4uUO(<^6xSt;uWLkAhBx_W~9FLdWp1q4WgYKVhS~NXV zk0VBa%oc9@Pfm6gWBj2eAoT*M_TbN{3{V{*0dCPhio|#`Coe21L4C-?_Spy zSowfIj)no%1YrzK67LIp8i^re)HmCU%2|G=Dx+TZ&DGpVacK-2TNW;EuN850fpzit zGzv3T)U|n&TkYV*L}0{jn@h2PS}lUM-$IQusv>A_lv7w~T8=i({R`r)H=lHT6sAb; zvKy3pDimiV&X&ZpD>;@iXPjCEjRYgJeWKeq)kWuv=pi$9o%AG;_h%=xG-dr&y)Squ zukRISKdh_>wqs%<*8=J z*xcmQb3(A;dmZg4wzAaP-8V4RP~*w9@%Mj)@p<_qCyJN$*evo(J4x?^Bd3&jv#wnt zsTc&1ElC#g-*SleNiw~+;qqp>R0}{*IJyQ>c5=e4>HjctPW8N+m&z`v|9P7$17rJC`RS6F%hCU z7k)A@$_H@T-ruuD$;4Ckc3^C{8mm}3Y>)ElT2kM8n5ZKb*!~`+`m!==r9wiU+d1vk zdQkgeU#PLMih;2c;TIc0-j~DQDJxqNWri>hvmV1J1xrCVfOfr(8JzrEoG4Fy(xZ2vecxt)x9UXje@7DoS#n;IR^%5M~HBuvNp zt!HBGLu8iphUYfD-9N27+kmN}ljgV6{@B}qNq|nA(-*0mRAs~STS@jMhZFt z;6iCxq+}!)mj4Ia^mh$l8>p%_@OL@}7DJ)F`npcGN5#gNBft+zo<`6Od6@wu)uI~~ zV{l8k;hPVeHgTcpeNnkY}N0R*G%{3AyXd+30SKs>BSlVm z5!gW&o&@_JN)!eZZ49*c;$qJlut*a4Tir2d_Kn_8rIckwvAMb8C*(BM^l--KT!c^ z%MZxR@dTP{lYspigTjTc3{jLwAyc_oak&O)x4G>`9_IumZ0uxYG)iMbaK?Q+RCV&P zi)=EPzhW3vN_pYzh`AD6H|PH zeRv0I$v&w=<~Z}cs3CkZNjT)p)l4{NwG77b*sKe5^B-QAMyk*{XC7n$4|ad0+Hk`v3fE)@3M&mDM{8?g(Ox2 z;)~{iF)3u2e9Vnn61Ty+|LP>vqB9q|_%__6Sp)$0*F*~9>2Mb7g;fC}u6v$yFGV~3obs!B}o1s#VVIY;YDUPFTyvA56bMb>q zMq2U#C^+ii-zx5*s5s}$4vTi<=TWB^Y|keL3uz2YP?Pv&uaRp@=+%lA*9At{GUs7T zOuAV9-_%jspVFb1Xb_IeDIeE-Q6IBqh9pzl9-7JNqsT#DC~|4V9#2lM1^hokY5d9K zI!p=mIwgg@-&_?X>;#Lr0o|tkRNC^N@I>*gtdFSnn9t$zi3~(xm|H=XK%g94mQLivk)OtF? zlRum)ZStFb>&Jeb{#TpgM3T&lr%{b6rZG#AGsPN5j8!Gb6&y59<4FC<#<0PL6R<1W z&CLNe+X)BLHink!-Q**22h*~A*+P-fKU)+apLjf1GiV^fSQ=-9&;vB4OjJLyuDYEX zPrhb`pH0DwtSn9Uo_{C?4xPAY`Ah-xFj8o6UMj(m0rC6_3& zI)!bbeT49do^9$7Vh04rG4Pp>9YfHSANuQUGq*c3wJ8bKz3azV=St2>-hIm$x4KF!~46-tu| zYMKiO{|6!qHiOZJ7wgRiQk*{>jn``QmsRvFXc5LGqN-p&h^Xv)QExOcgO7M*6t{Mp7|2rGr$rK6`aX1JFh(iqFb2$fx3UDBHTNg6Ks2_KN zj<+rzF}}!dF>rG}y`(rcE^hpB5PWhN?{I{i_&7y4okdlE4>poyGINXi4(HyiJC96R z9F;-KY{IJ<{zv}N#=P*jnTdak20ew6Z*At4=c1ak(uc3*LosH*@PnIWG=HeLf5~RY z5gA#OK<5+=`>R@ZBn~Au`x4e9cxd#oG*<6S$k+SoaO=b8HJzb@TgLqw9368fXp}oh zwv>3sAL+QA(Rtvw82I$Fje3ii>Z9I~b)WSTD@GVZP5qp+s#V@=;!h+p$WSuNNj{my zVR#I#!r-{aQ?GcQZC4hU&(QsB+l}{g3q?UwltIkxSsCnSYqIYT0o;LA5Ie90gI z1;<51*+MjirADBVBlas|Y87I(~PrKU;!>rht&rMbhp#f9}ZZR-H9 zii;UxW^@#T5=g$3vJ^c@c(_>N7Pl+xQ7U!z({Aeho%iO3icJ+oky10ZWdNcTnja9=XdRwa>)(0%_fNMH$tG0DkReEP9(x!RGZ(PYZ}7IO5w z8@|=JG0+Arl-{+KRQnrHoEbV}VLQ&DHHl57L&l4N8CD=EW;Nw-?bL9=88k3 zThh##02SBfqgsl9o#s8-s`GU*zg2&&4- z$=br5TdR-FV1T%=APVd-pO-)J0G)NJFz9mV~sfEcBnnPr0km%WG;DD+X5Ga!x)3v zB_A+;>S$i^EuAab+axhf&LUK=6p>6BOL3g?A7gB+6HBEWZn#)u*SvV(Hz#VQdY-v? znxx1!S?yI!9{UcN0C@LP9O?k3BZ70Qk%V)kB1AiqPEDA#i62U(K{Zt^n?J53onA1Z z#W9W1?!&YEoM^WKuD*U*j~XW^`6{yha=d;?3>hCC9_i=6w^VLhk8OkovnN&Qv9<}C zJzW~~9E8?X(5O)5ah~wPySl;<`k{s#j(uN*iHf#6$)Ve^X1>bBNjmAHNPtk@rSCf% zXNUHwR+8t?AX1av57t&xgU=irs|2rJ!)|LuC+oa=wR3uxt~&1Z#9vq7#!(_9rin`W zp{G}Eq9Jr3TpWN zhX_*~CqWKKS>nzMIOuIKm^6RHBJoHZD7#V0HHYWw?$RbrNtp4n()F`{YZ!Z?X7pH0 zg*tPUII8{k9|!a70`H)9#>r2$AdpJ_gI{`NZ=ho5ZKX zA5ZOxX8J~%T!4qcyw(}qa|KBp0RPu{HnL(!*8ia5qZONOw>(Tf{6-9L;WswglC~^% z#@R2WW#q*J@bf*C@Y_GO_0U<&XJ56{sO1l!2<1f~z>2V9er)Lg#=Y=}8pbOt*@}kw zt6lrvArSl)F&fH$6956{@loGn==Yxw3qQp$2-I?(k47pI-Rs2J#K~7nV0@!P#Pf@m zd3QtqP*S_)at|AjP%^=xEZ~r`#o~^eYvD_ADgA)v|RX##WptlxOUgW#Rfn0 zsCiXM13m#aA`@WY=9eZ%pRTHEx>0zUMaJx1MaQx4xC^qJ`+VqZfQ3#_QUk$G>T!5B~wP8F-O(eoFXe4gy<&&+r9vu|jJomm>P7_#738R87WIm?j7lMGM}lpbWi9s6!EFZ7($KFLQOB zH8W8VPkN+#yK9PTVdndNq8T$g3{R9LazL{%^+iOV&Wn_j*9?Ff1_x*Sp=Oeub_v=$ zz!(nB*ITA(MZ73wz(=ywS%CgYLe31_$4pCin zS|7D7!E2M$L(s?;iy-<`Y}6dnP#={s1Nw{wJ|AWn@+t}wBLUuAaAij&5KaB#l26|_ zaWt!sYC&%){{oQ&^Cp=k4L3N|6kF4&pi0(ilA6oH{N`8t2HO}PT~2g{*(-H5G}Q#i zrJob$xTpysVQPjT4lF%q(FLQ$md>#!6Ee76&pV;(4mt zUYKUxNJtq*{UXO2x*GBfqfxsYC?Zj7DJAis@b?CFgkh_m8HtKtqtUq^7x^Dx3aI! ztdOe+Jhh(?txM?AiI*y;m9zAF5P>)1BwmFU7SGV%F;C3UNp?+hBET>*s)lnDkg{X`0Ug18c5gs(~o~|*FW$@vGKkJRT9p8>k%&X zx%M}kpkR>dt)cwwKJkP+gkw`jDm6Aj*slu%J!yt_DTK)E%(2u+!X+Avj}}os1PBA4 zLRajPJ!bol{V>dR_}0<5L@Zt5pB+8a7kv#cY{x;9h_6BVrx8nL?8y4ldpkq3=67p` zB3`!(g&@2+{b&Z%d4w-|xCrZyr~Xpqes7CY=+$k^aW6pk2A!UKOJT87?^owj51__i zJP%%wMzr-Q(Lno}+#!59W2Oja$?bP4>tTz}<$^WKHB|Z&nXkW5PO-{u=B=HwhZJb7 zN#Rleyje?*9N8Lvbd65LnDG>}R<@Mgu~Aw~A(aNMWZu*Z9*$vI7M~?k#6u4d+#m03 z>9uvWE%>vCZggza?%UHNZSkR4lFzA{9V#5gdW2-AVE+z5b@ku9?-rTb z===Qc&m)iC5hKEAS8FNsPpSf!TpHz!U?bJzPq%OgzT;9g!NjzT>k;wBdz`53?iu4V zfx{9Btl_ARDH+>fFmzzu++Pu=nY&~K>5^Z}vFK>XCE;^y_a7-p|B{%t!JhK#+j$$L znHDc>{kEeMk9k9MHUgVxvaM##4lRx7TEOXH1ne}MC7;I5C?b1Ya0>=$C#MJ&$-sI) zH%-QuA2@M1E(+Dkv_#+16b>_m#m9!}W{mE`Q-WnRz-2VdxAi@71$Vj<=iCg{*NrV#v2 zEcYt@_@0=WFK*|(+xROtHC!aWvi$CXot=9F(Hk~G1Xbnrk&(MM0zQMqE$u$>3rX;o z{Bffi5u9S-+TbMd`O4ggC1FgEd^pXKRYd(*;vj`zH0x(EQ(F1+yeu%1kYkeBg8AV*K4DJM}yEY!BJ#n3&Jn7IjB73(aM6tM+=5Rw(y?4>|1k+ zOWj1z&7&D0v~Orvuh+518?!$=uSMoo+H7=Um&tTZqo0zzgTkbmwH4yd<8KJ~vk^bs zP&s!JI9+oghTSs*?Iomk5;n1gh8e|zX4guTCj*g!ZOhi+>qf?M4Gg?ml}DCDZ)E=Z z)$DYDR$+ghInODQzCGzBh9@*XKrt;hogS2XH`9^vS#OrZZ$SAnZr2b zCeyw_RL%feWH1e5dnbUrL;7 z8HfK#7jgbMB-}UVvZ6JBvnjqI?f|1pgpCc=2%ld8O{qthx-GP0++aoDp&I+)_-;1WRDQ3s31K~S$k)56o`unbAlGB51sOdw21 zV@GYDEM70eVHJL6L!)@W6a}~W#zN1#`o%v?eogKovcOH}E74}c`v_r&gs3Z!1#T;7 zKtvi5O~54PP~_rd6G|d0xn*D<le((SA3h`!&hM^tWM(yd48p#<$V>iA}A^F`lG0;~l65~kgd1lq2%g~~86 z_J<>C*8FN1tKt$rp?QpCE5@M}z8_DO&Q?@oPQ*88U>MenRLmPVgvDtvM|WT}3vja` zjI;r>SBr*v@x<^Hx7If`Fa&rSMj}cLKV=l=2?^O2W3f)xteBUg6JsQX)N0snJmpew zQV+)qBgck2&V^V>O8yd0E~X~oiWylWvM_~(6Gyda@@h=cIFXOrFl`fwUfsekYy3-Y z4L@~~H_=sJo`OrI$X8G#^kWYCTqA*^WsT|gEQ#(tslr{6goF)|=w_ZLy+**0#4NRL zT))j#KAg{dUPGMZ4vDmyI3mh>e0(1cwWcMkl1OyJ;3w(EMfk5D`oz<*mMqhkzJ;yU z$}x>2mSN|}ptQV*3Liit{ya=Fv?UH>{dl%f_qG%LMu7P=Wygo6$%wuKslFT>D3@bDS5v6PuDcR7T!tTFLuFmZWZl&)zxP3GNOG*=3fEpl z9(8lci#0ofrnzM?9r!WkwtHFil%_QdlzO zBw;c>8aD+-?#zzW-RuEP^42$1!f9vvWbV}Mc5MGKv(W(Zj;aex0t-XU3n;9zta8D4 zQ5C7qe~5z*FxhCf@fwQ33vQax2Z2L;N*LnsW~+t+eSBY$83}S`Ggv-b?X}c?M`n^T z@2now+eX8>R*tZWb@_|71WV*`MU(X>|@G_h1unXO>HnHRqlAD#y zYrGiRfA;&R5d>{le)pMoVa_rtS{U}9UW40WjR27rDEQdBB0qFhFpJBgJ@nY?p4}&MV zZ8y!jNC^lxR$%bf?6At9-7b`f=deEWUo)l`a*%dVQf;h8BCKuzD;SI{eJBob?OpPZ zLuH;27xm^a(#T>ZdQg_Xdmn2&>6Cqqdy1?hIH3TAp%-Us-gzDR^lZ?jE_f$NNXtgnu)F?Gx-@cnfp{_ z72&IH``9MO>sDUJB7E((qCsBixPJ7OrxW4GsqS4=yYME}c6*s40 z8E(CuJI^WWPe7`z#S3nPL$ONj)r+i#EF80mqMe_P|BzAsgylU7OEb7%=xeyNS;1Xr zf=^}D;l2TI6nLk~a7`gugqcaO+kEI*RdJf%(HsjJCuh-%dktq1q;%vqT*mwh5p@Ja zpwP^kkbiZM#`1w}Ekxq}KGg0GihC;0fTPgw_WO~yC7}#yzG&(>a_n$k&U%jilx{1~ z{7H>u;Ub%o7aoE4+TfEFN}@y{4llpE=%wpP3pr%VGtt;&euAtWA4w#DR&=l`@NuE( z>f__aIL6e9Y^@=Sd+3gjub+z$aO~vhiV;5!0Yn2upzsz=>nkLtYt0mNZd#qG@k*xc^|H@(p=zO zj4ieQE#G>E4{saAL$H3&FWBJg&qN8wI5*_#MZuCHwzY~9Mu~s9@$aKZBX47S&Xz}xz2D5^ zH?IEojiHa<7_Png;r4qz2c7M6d@*H9)1I1r65u%x_A?JA*;M=>@DAg+;t1{wg5!@FMb>MNhx*jxqPL^%reTtIy$WO$+J9M87g)iS_uyoaJ1Ta75I0 zfNw>SUqpHWiN>ag&W=hUxm6dIZ3N_18(8`pZ^|0KwDI(P_szq~+Q9AQBvv})W#ara zMd;^O?x}6G(GbVHS#*_QS~3$@G+Z3=hm;>?F;abMfR!oG)~*VN!WGT(!40vEVFv8A z6P>idDh`Q;`jzqP>~8|-Ixl9XPd`=g$20G$XVYwy7U?R!|EDHO^S4mz3z(#J{Wb>6 zng|WmCA{`+>fBbcKESrku0NLb2G_vYa<1EVY}5X}d?E*&a0UOtovo~1PFNHVQ^+>& zpDv*h8iepp2@O~Z7I{n`B8WSZiv&dB)tajQs2 zD5$!LOCSvM1CY2wPx~cSZm^`}J1)h=y4+ z_4SWvhMriX?jbs63iB=p+X+#55MT`jaDf;&G6o=>f~XY%0G%p`E%@KTY|K+(ur+by zc^;!~4|ToXN1Y}ZJu@b&mWt8*1s_jF$Y;As$iZfZiw+frV>4K~nn09mv&8^f+=NIV zp*obUUatJTf~Ebn9TkSb_P>SMg53^Wf~nt`gtzRN<~QUVK9mBnN2~sbR)C$6Z9j*? zCw6VowkSz+d)Q`P|NbLenW;$ z|912&@l;+?fu?bxlick6&;cWIv!0!CTLiNeZi`-5U@KN*?Y8s9s?;&cpav+Rs7{lN zGNUrRXz)^skNfZ;YLqb8Wlw73yW1>)S^x`1k`;syhfc`-Q9KL3{T*8MSy77f)_z7z z=@-UMEW=_21G+u&y{1=mnSMKDWE+-ZbP~f`$3iGYHL=9TVgaD&{$ME{%Q zv1?*p0r{-OAX&(Tr_iC}J=Zx%j1A2UuOxQ7DmtxHUq(D_dq zI#q&tO`+m%l~TVXDjaNrMs4gp0k&&s^fPU9$Ho=TK| z<`|L`B;QzF9zEK{Q%NSQ-&e%A6fCqy|bX!)N`PGlytKN05c;9WxuM*^89n zJ}2%6SFNank>aRi$KQa5@Y^c(b^=97s+N3-syh?I5p#$3O>ihj{u}-* z-(*X>sF_FObf&IJ@`x3i)toS(mvcC zFQ85D3q-FIQ3n0PQV1K~q$mD{!I2NMoTh#ym$7qMiF4hg0wtddY!h>6V># zXdHSB8;wNKd|{%NZd*;T@TDWHEIa(|JUB6#%rvI+Uq_^*!b*JXf{b)`eav&Se!L#r> zMI=yu4V9!-N_HG2Y{76W$HaugvRE#?=%4T3s-3gCg`18;){^X3hKIQ)#qI%Gb|K>% zLJ{O#LS!q<3~v8F!1%U}xCWTv45Ochc8Od>*Y%@A-7)+&U_IE2c)+x)87|Wika3}mTT)u%q_<$I+3Y9*NI}Hbw@o$V{B_?^aMzJ!6YQZJ znWJ<;lxi>%UNsu4CE`xH1en=`>I@qqT=h?^xL=l&CvTw+FcQ{V?2rv_TGSsy0AQds zSiMX#+;x{St3Za3tsTX+cd2{4OMJ`l`Y|S4y^=()?-dXGI8ya7DVBSiO}^daH{zH_ z|A*p4O~H6w@S0>$ViIc6PG6aW_*)%IhfFIgsJLQ6Em@L6r7Dv4Pcdo01}CHFTCsk@ z({Rv0!c`4;8}I6 zjC;|%0L2W~z^kv8@;b1tF zlw)|2#;hvHk>&!LO=Oc|s-(?Cx1j}K1 zZTpcp7KX-a-02;Dmg{}=!)S?@1m1^GS&AYkGB5FkzUr8SD%rn4OryP)@t+R?;A?-d zrLX1=i~CVqqm3NAiaCqM5t=V9=h8+BwWi7%H)lkCF;y|#CWuh#-5Sx--Dwy9uJ#nc z1Nw&elHi>jkld2Y^`vZ}=}hboR(_#bP31boTJ?CYWgeYTj#YgwT>u=N(gnou{2?`j zUX)M8VMoODl(pflNVg$8gOahcHoy~mGYTB@IrnKSWdtKtTWT%^4tv9zaKO+%V!^Mj z^tdGt4PU|$wJLA4=BeqTZqS-3g#$du=38XJ=hZAg^POm~>vZADct7H~pI4J7O|V7B zS9OZ1i(U0SjOl(?s~-RmS_~6R8Gnb>cby%Bxt#pIl51My&n9>(3UBpy!w7@?td^6C zH7UqHhv+V%%E)b38ziT0H|3Bd^J*XrTpeLP4@rB&?ah^)WpRqhsIi0;Q08k-o6&N^ zOWF zgDZUw$yoWg{(IJ73R@$p7?A?9jos`2dGf=agzW9~|FgaYy27G$nc~OIMvR3$^E$tv z4tyPr!aJ-AUMLL7L{c~4&G`ip8yyj z2fTP~1YL(gnibh*ag5}kCG}C6$JO{hMllv}JTh1Gq@A!2AAfp7@&rqZh^5!(Mj|&m z`de&R(o;iXkQaR!6fk`tR_dCKQdLs=eYNuMXlRGt87M%du&Lye<2MVIf117LPx0_p z>rQQPr!g~58xal&plXU$906a-ixiikvQP%M?6Mq$ZXU1ObuPw;Z6WoW_b!o(ubFsM zSv|NvFG~Ih$C@wQieP6`1K}pA&4+4a`R%Pcpji@Gj-}qLQ{Ive(DA=|+l*^ru+42C ze0*Z_l&F46)*&~#?YJUxbL7fII|I&eWrd{lA$dqIIk7Ic^toZRl%p;LA}jfL)M0+J zxpz`5Ax`Wf*#Ck=^xmPZ+wPPLo1^QyDcYI5&n;)RQ@8W@q!7@nDe!V}DL*rMbg}`- z)-~P!aWq7jUM7GJGtQ)bA`a`=S2kb_aycVh= z_6&%(9YZ#;I5*KLMD+w*X3h~N;0O2V!N=%i;!PG~*CWqG#RxMDj%@)}O#%r!J&-Sr zMs9)8D=-_I8*{U@Wm6dG*i;CvKlp1M8I>y7Nw57Rd6NsWOLGNW;x*cIW%bXvb5}`{ z01#n!P#_{nWRe9Vhc*zv{Wrjzg5aYb4ayA>7u{Ml>KA$KtJA!HLKp!t_w$O1g$;Ff|5f729#xC~%kAP&2=?8$^#BbZA3XFa z6)l9)3nj(~PDxw|iv4k4EoOi9{%_j$)wGO!BECY3A-nR{ya%&nqFVyEL+@H2m?Mn3 zdeJ-XVlm^DCeU9uPJ9Ou@hn`(^-(=aQ@&;#H4Ukk2&@>$G30>7aT6s8Z+Zf4-38$L zf=iz&F(NM*L%0WBqc7?;ebUInkSr`m?=4yq0M11M3cx9EH)1isq^M3d5ni4PcWs92NOUL#F(>=KFhj6Fvjn`^b zs0wJ(es$7MjQ_m~M*gj0bV7L{45dFrxb|G*zQC92#j3~E34x2KaNwuHq{0TzV-3(p zCWY0wqsLbU0vHQ`{}%vqK#jkYX5BQD6A4YRKlcu11HdAqw!RHV;n?2awjFES2OWqQxmKrj|x7AFB z*sie)d5;w%;)`nPh8Am@XOD|53(`2?8zVNwPDKtZuHg^fpE;aHhx;5@o~}SMX=HOo zi*yurxL9qDV4+m=NpW#sTe#q|-_RkJB2 zxe=?by$>UA@15-6;1asMgISN3_n!)djCSW`v$eO7fN+a&gq%?TK3w z7sniFOQ#`&B@URjjZ+aA%+PcdDY#?i!Y(<)x#b%^vb{Q%YQ@N-quIOU)_9fOoGVvZ zeZ6xP5dhLAapEpMniCWrjYADU4zx+~euK>rqPS0t7j`Xq>#mZ+#RY8h)JFM%9dlBcmdNx zOUK!-F>nE95F_J}fjpWv5~hWL$`GY%oUV1?yd0|l%RA}zCz21$Ed_iC>^2p@db_;9 z{)A9L2KIss$bFwe$Hh*ihCl{>t+{29fax+sFmOD@W(Z$kMkXR1g@#V4brHQ4H-m%7 z6x^P2fhiJ$=>e#q1$#jYdiy?24R+E#dC{*{rFEMmHY=5O=Ujt=c`l@fK}NTNACP%i z@_ha_>qVL0#-4dmQvR25zR7t*?m}vDKz?()9!~B?nOit*5AH;WR;PtbfxjeTRv96} zu*R07s7~Ok4hv(4_1m=BX+iAtGq}6DuSE`6P0!X~b~EQ3Wj^p&BC zC>x#;*`Ym7Hn9g3dbF-m?xSNnkd1t_tO7l6N?L*Py$v;1qC=%Os+|h=tm^s#O?s;B z9n5-D?6P8lMiw+<=V?a1rC&DL!B+V@79p3Q>gb5tY(uhX!@L2O!AyyL-DH03Yq7eE z7I~BIgl+J5cV=FagG=;^r7lto9-tJ1S*n~lEf;rE)&$OCo4)X>894!N`HJSji_f%l zgk;kqRdGq@g=Dve9)@FdTo}Xvq1hr&RM_k8l)di23T2QKOStR&Z?V=pwbljSo?KJ- z?_IS|Dr& zxP9SZETKYnKEKqA=g(dSp>MKQ=hg|o%~r3mD(f`rPq7Ovq{V5qSahk4j2rdlMrZ9- zleOoLDM+J`FKX-O-kN>~**Xd@c>(9q=DjiKaHJa`&OQQ}K)VX(9v3ldEzgDG6H#Nm zaGZ0`9#H7LlLPO+yThcX+TOve;KBEj2j5ZIx#LkNdlM#rU@cALG*di-BH25-6ESA{ zW?ab5+1#-Me&`=uqF2by3)y)gJC}JfI3eoF;4^&lc4g;b6f)KIT*V695RwKTxi0Bo zh&9)Q`GtdvzFo-9{c4*H^E@LSVgK7s?Z2a-kewH@^WnB1cT61FY01uaD6ok(mB1#$ zCFjjXt8=M&5q93$GQ%)qu;fXmoU3fXy~ZG1-JQAAg`RUS^_&OS?%ZX}GaPV_F4Hx{R)PgOWDcRCN0wtF zrLbc;*6ff%d=o_?9N#|y1>QI2qFm?a-)8hb*?s| zte%xK&{DEP$&6qd!k=Y}AwE}U`DD7B=4~f5_%Qi+s@Fv-bFy)xJ}4WPkzmn()E<=8)M>e z+2t~lU>*Snva#AxXkoaFJk{D_r+WR=%?_)#p#+dk_RG%Ks@Km{8-ZUXk$Jat+5+8U zOmlS0f={jKDJDWuDy~L?5?zfW@Sl^!8e;QQ?C+819qB_6)!-rAKAwU#6CVD@1=xQauk(mozVE%Yp2JcJkcv$4?% z*_l>jqbXn5DDVy{G|8Y2y--uteb)F%16kQT+S>eh%TU z=fsOIdPVZ(;mg{*I%L~I(P@N@YP&SIR%@QQw7gOY=CK~kuT|>n3A|2J z8{svg!5_iT>+UXw ze{T7FlhsdG8#m~C@{FESVDjX5*;HY^1Zdc0%|QvX%o}rU&ofQa!xNi7DV2D=vW8}C zwBVGVJXLFUZoOVSp1d6$we_SC4POj&X`vGb14MTil~&g99`i8EnnfMr*(3#%8EmdN zns!{>b6t;mNqsGwx@UT}qk9$~Z}#obg0v2Vn0@PDmRFWnFVH+DY$rXGp`8)vd;d|_ zPv>=gYUS+mCc36}mIm8#%4aXEte!u9c9TufPVa+8(v-3WfMAIy1qs@rrb=(7-$0ub znj7WKkL$!>GgzhLOBj?f>5$Yi4d~2ZOGbI=Gyp}jOa7a1*{Qi4*c;^&r%%$ZnXnl` ziXkJj%BPmkT*M?d)mYNp3oua)8?_1A*q+z!zD{2>qVxA|)UVa+;QH~sM5J62fB9)O z*8y;&^maV3499alQ*~%ML|^EiUe>L$qv9LEKeM_Ciqi{1J&rG`W4g9#5UEHW&?_DP zhQ3H`qSV*yE(eW7UQA6z!ff6dfaE%+Wx{8azIm#tY9LXm`l+wkriKqhGl96C<|JJp z3%7-9f(imRr4DEX5~v%cEBKxa*Q4c5{u2+hd@y%s*Zl&h4xOf2mR-?yGV`0{>y~OF z^)(ALwD$1BXwWGASa0A!hRk7fU+Jk*>8`wI34UbX%zV|)l}g8Ro;|GzkW3jIVgg@? z33$W60o?%MD_@T^Y=;6y0{QJ|)y;2J119mUlr)TU6aQl?;ZLh<;(My`)YoAPz^OL2 zsOveyI!v{a`Z~}chD<9e$?d?-#s*GRPkrrgiC`uH@s(&36vG5D8bU4z3==jiH~WMY z&@1&RhjNP#MKg`P7>gXlH4FmmQZC^nxN&FzA^;aLr(h<_Mvo#SC3vY6{8L~1mqK>? z!?d*MHFFfN(z!nI=`zt8O|KB4;%|siC)2jet1#EBgtVs9>t~l+Dy{>-aO~goy`i`c zl%5{kpJutZ4uBA5Zg=VPDMiYP>p*fV&H^i;ngp`!bwGdNsm@h|?q!{_QdU)+&WM3) z!67`PpX30+RiL;QfN;^prMMQ1;x~$GLEcuBY*=wE;6%kJ71x49TqzNwxE6r2rszuQ zYxYpPO|J#BVqbg{K5@Gt5!ytO^v%i8!FO-2LMa)SWCM)S7hrr7-o6R7C)7U>Iq==ovsR!Dh!K>u63 zqsku!|3{w#Odf9@FOtthDPiMwosko4Qs#i>_|LFW_A#G)?7aW6qm?k2=4jK4`o&`8 z9}pc4Eb2Xe;*>e@k_tU4+C5~6?}ySl)hAw9yYg)1U1?n`%FcWe<@qEZ?`b@xKj_&; zv{7Y=D)On2YjAU0ex!CqR7pA@vxH=RGhdD_zK1I1G@q%H^pe-S@}f+^RO2s0<6LF@ z#=)^?>SU&{NXqI5?}zD6#tsAWp75GfS+AZ=W-_0AoQ8E%qjf9K)MA2aY3mCubXce( zM38RizG50dtON|H2`$ezy~qy(HySW$H8p8`v3P?oAgT4mSm^7yMudbO3wf&g2}ak| z->1>@d4Zn)HNpSV0D9j4mbJA?ja4i4$%&3wT*A6e?n2)Mqo$5f;LkjYV#_p))Z)r6 z=g(H6sLF2mEjBNoWf16a8uLGRPwh$tR#Vb6z=L%`o!#v8tP9Y~AJB+CFw;Y%q`mXO zI|#&Isy+8y@0IK_Zy0Ns!W&aI2RUWmSQbVYN4eRBH*dIaEH5F2_C|{xt+S0z%dft% zd|@M~R>Ci0x7HfhSp8^yqgs92+e));4C^l5tVC;m zP-V&U*-NiVo{P%d0%QrcaqHNvv~HsH$4jO6oTl$Ey^&&? zD8EsoB2VNDEe9rIFi)gGtK46^62qE<@+u|0l@5U>$1T6c&bK1gf=yn1+RxsJ&r-IZu<_NBEeeic2Ot<)>EjoN8ydA0H`+2Rap zCjlCkPOUXAoD$;}wP!GvcE?|bEf9LcG(pA5{&d$Rog%l_BGxKUP z?1^F9b9IIJ5Fo*JDQ=u#aihhKH=Dh3kJYYJ{nk2L6$aj?TCGNF?J8AlRJ-;=uc=*u zL06|z=g5aagx3HRGUr)k9Xwta#NmOnFQUE#CzBGya)C2i z$7#PVd%zMknSX7i;YWCSku`Bx@x7G+$4eyWPa-wk@k;xAJ+pUVv38gmOds*dF`&FV(54$Ie2-iyjPSzRGQUtNbSjy)S=hj zU4Mk{__^yd$>$4xQ&8l4(iB<80emGT)-d(#AR3t?{{LQ!-{|J?v%R#%| znkFbP``E}r=$-JGe&j-K@$+z53_ZgtzY45!wbDDD@9jgG(i^Djv13G;KPQ8{(oXg9 z;a9!;Pv7$4&+cd+G=BU%O}}<(9`E_Nzkc%h_uRdsebD$zrH7xU-#ayr4>gb8|B3H? z$&U6xjxN6~2$nX8+wo-fY zHDsDxCLuih47+CCWD!{aW)<^8&-25!X^F^D51v zvQNSqOrYIq`A}5J%J@7<-{*7q-PLjO3(<)D;5Wj-g_;%bU)cBgi1>R>e7@zub@CjW z$Nhw4Uk{Sxf}}3%#QeXws$J?-s*t<|x1T_&7lA65Z{p_<( zqk~uBzVKJ#qWayuL(;uHjelU=4}V&`nUM@e<|6S%2;~| z5cesQ$=ACg$XREgbXs^V>$T_QH`xMu6_@PC_-zrrKOrzUb8&F*s$IFpq&VekxI8d* z=}Y|Dk|{h2xIg;))W}u`l{WwbH<#cRRwwDC^e`@A5C_TaLAY>+Ug?_z1O)I8pS<2$ z_@$41=Ed)L#ZSNJyMFB(KKDN=mBpq2b-9jf`q4Rgf1E2rssi`yTXcKxJuWXV&y}%R z>Jjke=-l$DQ>V(Vs?QsW=6Nn&aR>Coq%a`-C1?LflmRr>+ z5P5KK@Oe;+xpEy+UaGBYE&}kys)F$2$lVD+I{eHLvXw=#p*gl@Fx#6uwiwfu`Wc8x zapg_sah3V_W7sU75pQKTu^xvJ90C!WD@L+t#9~E?P$Uc0t-ygZiybi?p;+4+0q>}N zbgtcv!jbeXdQFLDg?ne;2vX9S^4a4{k8(a&QnOL%}-O*-nW0kLY{&Y-aT6H|c35abKF?L-Gnd$;WzA=2y zaZK9}JsWWXc6~Y=>#lU5X6RcViT(=7VtQy8*i7e5V!M)O>8Q%BA+@6I-Hhn!Op)wuhc%^emz4#o&8;_t;|7zg2}KR*pRRt8d(Ljmj6qYgEe;vE>Wb zG0ea|pSLy(n~D3iPK&h)H02NIH*-a1nPSCbhcKp!OU<090usX-4O9wJzsHs18bn0hN&55pgLIa)NnU7y7ZnzYygA;fZCA`!&WDe z^d6m)czA-XS1@M8i|M{ea8ZDOQI%nt@kbb>c2k9o;hoPG}bGkK!M7IwtKo}|O z?EwXO-y$pa48<}LTpXcVe8r2bP|;Wn-+0doT?-T-bGDH#th<)0Ts4Msq0!DoU3#9~ zYis9Md)=#!9UCf9%~(aG7+t4$=QfB-6#6FI`b@-;>FZtwxXPSBIJlrv0$)2o#!@dN z9kW%(V?o4}0MS6uDMM6uizXgAp@E=lL7=BjQKLIod5HG#men_EV*bRxNK-uiJ!aIq$n;%~1D((pDSDPEO z!f6%{TDtBF2}f18eN{ztde3!e|5J<=6WPEpZZ8T{)z-ot8)yqgIevf}OQ#>27t?R# zPz{O)V}Nl(ws#<#8z4533ezMvW;W2laW&K1DVWxv5Ca+LA19Qs;;|fLXvL9d;e60N z1LuQl1PZvJKw(x4*2uSzj{wNHGYh{_hq517pIP)v;-MU%Z&^{Sn;`gJ5P*U*#B~Z) zZ~>8r(dme^L&Rc|0gh#H1`q!%E0Eq(okqv6=9~j-^jsVRqHi8?!ly|_s$@DyGbz7(x=!y zG4#0VulFA%r;}%Lpn<7V(he{nI!0?6p{;RxPn zp{_)X^0>rck^>Xq_hTb+m>L-_OWkp`QQXEvM5eoY#J=ftATY^L^|iH?@{?qWRPHp& z)yj32qKT^O-$&R;nUGb~1L#=eK)^Lw&P6CBQTy%vBXTTstMO`_Pgo5w7Hp6C7A~gW>7OH{b zx*^1IdgyzBY8a-SLQ1+b4dsX{O<-uhlnZ8EFzh2+ql*w-Hn2LwMO`Gr8ytCBa5pe~ zBhWQFbX*KSGH^g>pa7l~D^U=IhR$N!j8bg!^oO4%X_LrMxHx2}{N&Qf3w;a6pY-Iu zTacP;M9m>W6Xxl$?rV??sv5El#~PS+6BJ3)uoECX3H?ZyH&3z4(AbrBE49F_ zN}nu-Svv6EH4u*zLVHt(AltJrbPzScj2 zci35wB|!uj@njG#DJgCYtM;lON@Y=jRi!TTr~f$Tv#R?dY5aJZW+2 zesu0MMUYR1Bx*yPCixBen#kaWJWSs=PcNifPI zX}B}1aSXAOhGX4TLt?)jh#_q?cJd@3vf!UNxXX)upvI^^egD zmGQF|Xey=Bvlj#~G7dqnhS5XfF#%0D|Cz~Hn^Fu|88sHKFMSa9%{WTao(d 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 10 class IxiaResourceHelper(ClientResourceHelper): + LATENCY_TIME_SLEEP = 120 + def __init__(self, setup_helper, rfc_helper_type=None): super(IxiaResourceHelper, self).__init__(setup_helper) self.scenario_helper = setup_helper.scenario_helper @@ -69,7 +72,7 @@ class IxiaResourceHelper(ClientResourceHelper): self.my_ports = list(set(self.priv_ports).union(set(self.pub_ports))) def get_stats(self, *args, **kwargs): - return self.client.ix_get_statistics()[1] + return self.client.ix_get_statistics() def stop_collect(self): self._terminated.value = 0 @@ -77,27 +80,44 @@ class IxiaResourceHelper(ClientResourceHelper): self.client.ix_stop_traffic() def generate_samples(self, key=None, default=None): - last_result = self.get_stats() + stats = self.get_stats() + last_result = stats[1] + latency = stats[0] samples = {} for vpci_idx, interface in enumerate(self.vnfd_helper.interfaces): - name = "xe{0}".format(vpci_idx) - samples[name] = { - "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][vpci_idx]), - "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][vpci_idx]), - "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][vpci_idx]), - "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][vpci_idx]), - "in_packets": int(last_result["Valid_Frames_Rx"][vpci_idx]), - "out_packets": int(last_result["Frames_Tx"][vpci_idx]), - "RxThroughput": int(last_result["Valid_Frames_Rx"][vpci_idx]) / 30, - "TxThroughput": int(last_result["Frames_Tx"][vpci_idx]) / 30, - } + try: + name = "xe{0}".format(vpci_idx) + samples[name] = { + "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][vpci_idx]), + "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][vpci_idx]), + "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][vpci_idx]), + "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][vpci_idx]), + "in_packets": int(last_result["Valid_Frames_Rx"][vpci_idx]), + "out_packets": int(last_result["Frames_Tx"][vpci_idx]), + "RxThroughput": int(last_result["Valid_Frames_Rx"][vpci_idx]) / 30, + "TxThroughput": int(last_result["Frames_Tx"][vpci_idx]) / 30, + } + if key: + avg_latency = latency["Store-Forward_Avg_latency_ns"][vpci_idx] + min_latency = latency["Store-Forward_Min_latency_ns"][vpci_idx] + max_latency = latency["Store-Forward_Max_latency_ns"][vpci_idx] + samples[name][key] = \ + {"Store-Forward_Avg_latency_ns": avg_latency, + "Store-Forward_Min_latency_ns": min_latency, + "Store-Forward_Max_latency_ns": max_latency} + except IndexError: + pass return samples def run_traffic(self, traffic_profile): + if self._terminated.value: + return + min_tol = self.rfc_helper.tolerance_low max_tol = self.rfc_helper.tolerance_high + default = "00:00:00:00:00:00" self._build_ports() self._connect() @@ -115,8 +135,8 @@ class IxiaResourceHelper(ClientResourceHelper): for index, interface in enumerate(self.vnfd_helper.interfaces, 1): virt_intf = interface["virtual-interface"] mac.update({ - "src_mac_{}".format(index): virt_intf["local_mac"], - "dst_mac_{}".format(index): virt_intf["dst_mac"], + "src_mac_{}".format(index): virt_intf.get("local_mac", default), + "dst_mac_{}".format(index): virt_intf.get("dst_mac", default), }) samples = {} @@ -136,12 +156,34 @@ class IxiaResourceHelper(ClientResourceHelper): ixia_file) current = samples['CurrentDropPercentage'] - if min_tol <= current <= max_tol or status == 'Completed': - self._terminated.value = 1 + if min_tol <= current <= max_tol or status == 'Completed' or \ + self.rfc_helper.is_done(): + break self.client.ix_stop_traffic() self._queue.put(samples) + if not self.rfc_helper.is_done(): + self._terminated.value = 1 + return + + traffic_profile.execute(self, self.client, mac, ixia_file) + for _ in range(5): + time.sleep(self.LATENCY_TIME_SLEEP) + self.client.ix_stop_traffic() + samples = self.generate_samples('latency', {}) + self._queue.put(samples) + traffic_profile.start_ixia_latency(self, self.client, mac, ixia_file) + if self._terminated.value: + break + + self.client.ix_stop_traffic() + self._terminated.value = 1 + + def collect_kpi(self): + self.rfc_helper.iteration.value += 1 + return super(IxiaResourceHelper, self).collect_kpi() + class IxiaTrafficGen(SampleVNFTrafficGen): -- 2.16.6