From b3e7e3fd58d00725a6eadedc7c8b4ac4f50550b0 Mon Sep 17 00:00:00 2001
From: rguevarax
Intel® QAT API Conventionsdc);
-however, the flow of the calls is similar for the cryptographic service.
dc
)
+as well as the cryptographic service.
+In the below example, the number of dc
instances available to the application is
queried via the cpaDcGetNumInstances
call. The application obtains the
instance handle of the first instance.
Note
+This note is pertinent to customers utilizing legacy QuickAssist Technology (QAT) generations, such as QAT1.7. It is not applicable to customers operating on QAT2.0 or newer generations.
+For cryptographic operations on legacy QAT generations, it is imperative to use the APIs cpaCyGetNumInstances
and cpaCyGetInstances
.
A notable distinction is that legacy QAT generations support both symmetric (sym
) and asymmetric (asym
) cryptographic instances within a single instance.
+In contrast, starting with QAT2.0, each instance is dedicated to either symmetric or asymmetric operations exclusively.
Cryptography instance types are delineated by the enumeration CpaAccelerationServiceType
, which can be found in the cpa.h
header file.
The currently supported instance types are:
+CPA_ACC_SVC_TYPE_CRYPTO_ASYM
for asymmetric cryptographic services
CPA_ACC_SVC_TYPE_CRYPTO_SYM
for symmetric cryptographic services
Consider the following example, where an additional parameter is provided to specify the desired service type. The application first queries the number of available instances for the requested service type using the cpaGetNumInstances
API.
Subsequently, the application acquires the handle for the first instance returned by the cpaGetInstances
API call.
void sampleCyGetInstance(CpaInstanceHandle *pCyInstHandle, CpaAccelerationServiceType service_type)
+{
+ CpaInstanceHandle cyInstHandles[MAX_INSTANCES];
+ Cpa16U numInstances = 0;
+ CpaStatus status = CPA_STATUS_SUCCESS;
+
+ *pCyInstHandle = NULL;
+ status = cpaGetNumInstances(service_type, &numInstances);
+ if (numInstances >= MAX_INSTANCES)
+ {
+ numInstances = MAX_INSTANCES;
+ }
+ if ((status == CPA_STATUS_SUCCESS) && (numInstances > 0))
+ {
+ status = cpaGetInstances(service_type, numInstances, cyInstHandles);
+ if (status == CPA_STATUS_SUCCESS)
+ {
+ *pCyInstHandle = cyInstHandles[0];
+ }
+ }
+
+ if (0 == numInstances)
+ {
+ PRINT_ERR("No instances found for 'SSL'\n");
+ PRINT_ERR("Please check your section names");
+ PRINT_ERR(" in the config file.\n");
+ PRINT_ERR("Also make sure to use config file version 2.\n");
+ }
+}
+
Note
+This section describes the querying capabilities for data compression (dc); however, the flow of the calls is similar for the cryptographic service.
+The next example shows the application querying the capabilities of the data -compression implementation, and veryfing the required functionality is present. +compression implementation, and verifying the required functionality is present. Each service implementation exposes the capabilities that have been implemented and are available. Capabilities include algorithms, common features, and limits to variables. Each service has a unique capability matrix, and each implementation diff --git a/docs/API_PG/introduction.html b/docs/API_PG/introduction.html index 944254f..8b669bd 100644 --- a/docs/API_PG/introduction.html +++ b/docs/API_PG/introduction.html @@ -300,19 +300,16 @@
SKU
Stock Keeping Unit
sIOV
Scalable IOV
SR-IOV
SR-IOV
Single Root-I/O Virtualization
SSL
SSL
Secure Sockets Layer
TLS
TLS
Transport Layer Security (SSL successor)
VF
VF
Virtual Function
SKU
Stock Keeping Unit
sIOV
Scalable IOV
SR-IOV
SR-IOV
Single Root-I/O Virtualization
VF
VF
Virtual Function
002
003
Removed S-IOV References
April 2024
002
Updates for 1.1.40 Release
March 2024
001
001
Initial Release
February 2023
Secure Hash Algorithm.
Intel® Scalable I/O Virtualization
-System-on-a-Chip.
Sign-Of-Life.
diff --git a/docs/PG/index.html b/docs/PG/index.html index d325293..60d23be 100644 --- a/docs/PG/index.html +++ b/docs/PG/index.html @@ -156,7 +156,6 @@vqat
Contains sIOV Virtual QAT device details. Refer to Scalable IOV for additional information.
QAT 2.0
8
4
Number of s-IOV -ADIs per Endpoint
N/A
64
When SR-IOV is enabled, each bundle shows up as a separate Virtual Function.
When s-IOV is enabled each QP is exposed as a separate Assignable Device Interface (ADI).
Within each bundle, by default, a separate QP is used for each of the three possible services:
SKU
Stock Keeping Unit
sIOV
Scalable IOV
SR-IOV
SR-IOV
Single Root-I/O Virtualization
VF
VF
Virtual Function
004
005
Removed S-IOV References
April 2024
004
Updates for 1.1.40 Release
March 2024
003
003
RSA-1024 added as Opt-in.
June 2023
002
002
Note added about using SR-IOV and S-IOV simultaneously on same PF (not supported).
May 2023
001
001
Initial Release
February 2023
Three different methods of virtualization are supported as shown in the below image.
-Note
-Single Root IOV (SR-IOV) and Scalable IOV (S-IOV) virtualization methods cannot be used simultaneously on the same Physical Function (PF).
-Two different methods of virtualization are supported as shown in the below image.
@@ -140,22 +135,6 @@Scalable I/O Virtualization enables flexible composition of Virtual Functions by software from native hardware interfaces. -Rather than implementing a complete SR-IOV virtual function (VF) interface, an S-IOV device exposes light-weight Assignable Device -Interfaces (ADIs) that are optimized for fast-path (data-path) operations from the guest.
-S-IOV uses PASID rather than BDF to identify unique address spaces which allow greater scalability. Number of supported ADIs is defined in Dimensions.
-The public specification is available at Introducing Intel® Scalable I/O Virtualization.
-Note
-S-IOV is disabled in Linux Kernel after v5.16. Effort is underway to reenable in future kernel version.
-For details on enabling S-IOV refer to the Virtualization Deployment Guide.
-Disable all VFs on a specific device (6b:00.0 in this example):
-echo 0 > /sys/bus/pci/devices/0000\:6b:00.0/sriov_numvfs +echo 0 | sudo tee /sys/bus/pci/devices/0000:76:00.0/sriov_numvfs
Enable number of desired VFs for specific device (4 VFs on 6b:00.0 in this example):
---echo 4 > /sys/bus/pci/devices/0000\:6b:00.0/sriov_numvfs +diff --git a/docs/RN/Linux/2.X/description.html b/docs/RN/Linux/2.X/description.html index 930a65b..7b5d453 100644 --- a/docs/RN/Linux/2.X/description.html +++ b/docs/RN/Linux/2.X/description.html @@ -132,7 +132,6 @@echo 4 | sudo tee /sys/bus/pci/devices/0000:76:00.0/sriov_numvfs
Telemetry.
Power Management.
- -
SM3/SM4.
Scalable IOV (sIOV).
Asynchronous E2E support for compression.
Extended RAS (uncorrectable and fatal error support).
- diff --git a/docs/VIRT/index.html b/docs/VIRT/index.html index 05c0f40..d5b389a 100644 --- a/docs/VIRT/index.html +++ b/docs/VIRT/index.html @@ -112,8 +112,7 @@
LZ4 E2E CRC32.
- Virtualization with OOT
diff --git a/docs/VIRT/introduction.html b/docs/VIRT/introduction.html index 952bb4a..5e285d0 100644 --- a/docs/VIRT/introduction.html +++ b/docs/VIRT/introduction.html @@ -102,11 +102,6 @@Introduction
This document provides details on using Intel® Virtualization Technology (Intel® VT) with the Intel® QuickAssist Technology (Intel® QAT).
-This document also includes instructions for both SR-IOV and Intel Scalable IOV (sIOV).
--Note
-At this time sIOV is only supported with OOT QAT2.0 driver
-Installation Overview
diff --git a/docs/VIRT/oot_installation.html b/docs/VIRT/oot_installation.html index c4eaa51..3986bcc 100644 --- a/docs/VIRT/oot_installation.html +++ b/docs/VIRT/oot_installation.html @@ -67,13 +67,8 @@- Software Installation on the Host Demo
-- Setting Up sIOV -
-- Passing-through the VF/VQAT to the Guest
+
- Passing-through the VF to the Guest
- Installing Intel QAT on the Guest
@@ -132,10 +127,6 @@Installing Intel QAT on the Host
./configure --enable-icp-sriov=host
-Note
-This is required for both SR-IOV and sIOV.
-Install the Intel QAT software using the following command:
@@ -173,106 +164,11 @@Software Installation on the Host Demo -
Setting Up sIOV
---Note
-If sIOV is required rather than SR-IOV, the PF configuration files under
-/etc/
need to be modified. Detailed steps are listed below.-
-- -
Modify the PF configuration file to enable sIOV.
-----vim /etc/4xxx_dev0.conf -
The configuration file for the sIOV section looks like the example below. By default,
- -NumberAdis
is set to0
which disables sIOV. This value needs to be modified to a value within the range[1,64]
. This needs to be done for each Intel QAT endpoint that sIOV is required.- -
Restart the Intel QAT driver to enable the new configuration by running the following command:
-----service qat_service restart -
--Important
-Enabling sIOV and SR-IOV on a per device basis is mutually exclusive. By setting different values of
-NumberAdis
in the device configuration file, you can enable sIOV onqat_dev0
and enable SR-IOV on other devices at same time.- -
Verify sIOV is enabled on the device using the
vqat_ctl
utility. Refer to the section Using the vqat_ctl utility for more details.- - -Using the vqat_ctl utility
-The
-vqat_ctl
utility returns the availablesym
,asym
ordc
ADI resources on the PFs. If sIOV is not enabled, availablesym
,asym
ordc
will return0
. For devices that have already enabled sIOV, you can create the required vdev/vqat devices.--Note
--
-- -
In the example output below
NumberAdis
is set to4
andServicesEnabled
is set tosym;dc
in the/etc/4xxx_dev0.conf
configuration file.- -
The
vqat_ctl
utility is located in the$ICP_ROOT/build
folder where$ICP_ROOT
is the directory where the Intel QAT package was extracted.The command to return the available ADI resources (
-sym
,asym
ordc
) is the following:--- --./build/vqat_ctl show -
The
--help
parameter can be used to return usage instructions:--- --./build/vqat_ctl -help -
The following example will create 1 VQAT for
-sym
and 1 VQAT fordc
on the first Intel QAT endpoint.-
-- -
Create
-sym
VQAT:--- --./build/vqat_ctl create 0000:6b:00.0 sym -
- -
Create
-dc
VQAT:--- --./build/vqat_ctl create 0000:6b:00.0 dc -
- -
Display the VQAT devices that were created:
---- --./build/vqat_ctl show -
- Passing-through the VF/VQAT to the Guest
++ Passing-through the VF to the Guest
Note
-When using
+libvirt
, both sIOV VQATs or SR-IOV VFs are attached to a guest OS using a xml configuration file. However, -the addressing scheme of both differ because VQATs are identified using UUIDs, while VFs use PCIe BDF (Bus:Device.Function
) numbering.When using
libvirt
, SR-IOV VFs are attached to a guest OS using a xml configuration file.- SR-IOV VF Configuration
@@ -327,108 +223,16 @@SR-IOV VF Configuration
- sIOV VQAT Configuration
--
-- -
Create the VQAT device file needed.
-----touch dev1.xml -
The
-uuid
used below is created byvqat_ctl
. The commandvqat_ctl show
can be used to return the VQATs and their UUIDs. Contents of the file -should look like the following:----<?xml version="1.0" encoding="UTF-8"?> -<hostdev mode='subsystem' type='mdev' model='vfio-pci'> - <source> - <address uuid='679fdae3-1930-4815-8896-220bfc5354b5'/> - </source> -</hostdev> ---Note
--
-- -
The
uuid
in the file above can be seen with thevqat_ctl show
command.- -
Repeat this step for each additional VQAT that needs to be mapped. This can be done in the same file or a separate files.
- -
Assign the VQAT to the guest Virtual Machine (VM).
-----Important
-Currently, VQAT doesn’t support hot plug-in, so when the VM configuration file changes, the guest OS needs to be restarted.
-The following commands attach the VQAT devices to the guest named
-$VM_NAME
and restart the guest:----virsh attach-device {$VM_NAME} dev1.xml --config -virsh shutdown {$VM_NAME} -virsh start {$VM_NAME} -- -
Remove the VQAT from the guest VM.
---The following commands remove the specified VQAT device from the guest named
-$VM_NAME
and restart the guest:----virsh detach-device {$VM_NAME} dev1.xml --config -virsh shutdown {$VM_NAME} -virsh start {$VM_NAME} -Installing Intel QAT on the Guest
Verify the Intel QAT devices are assigned.
-If SRIOV is utilized:
--lspci -vnd:4941
If sIOV is utilized:
-----Note
-VQATs share the same device ID in guest. They can be distinguished with the subsystem ID
-SDevice
.-
-- -
This command returns the symmetric VQAT devices:
-----lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0000' -
- -
This command returns the asymmetric VQAT devices:
-----lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0001' -
- -
This command returns the data compression VQAT devices:
-----lspci -v -d 8086:0da5 -vmm \| grep -E 'SDevice \| 0002' -
Obtain the official released Intel QAT package: Intel® QuickAssist Technology Driver for Linux* - HW Version 2.0
Configure the Intel QAT driver to enable the SR-IOV feature on the guest using the following command:
@@ -436,10 +240,6 @@Installing Intel QAT on the Guest
./configure --enable-icp-sriov=guest
-Note
-This is required for both SR-IOV and sIOV.
-Install the Intel QAT software and sample codes using the following commands:
diff --git a/docs/VIRT/revision_history.html b/docs/VIRT/revision_history.html index 566caf2..e7415b2 100644 --- a/docs/VIRT/revision_history.html +++ b/docs/VIRT/revision_history.html @@ -115,7 +115,11 @@ -+ 001
+ + 002
+ Removed S-IOV References
+ April 2024
diff --git a/docs/VIRT/system_preparation.html b/docs/VIRT/system_preparation.html index 038ec79..db51249 100644 --- a/docs/VIRT/system_preparation.html +++ b/docs/VIRT/system_preparation.html @@ -120,22 +120,14 @@ 001
Initial Release
April 2023
Updating the BIOS SettingsSocket configuration > IIO configuration > Intel VT-d.
----Note
-VT-d is required for both sIOV and SR-IOV.
-For sIOV:
----grubby --update-kernel=ALL --args="intel_iommu=on,sm_on" -
Note
@@ -185,42 +171,19 @@
grubby --remove-args
argument can be used to remove any arguments that are not required.Configuring the Host OS
Kernel Requirements
--
- - -- - - - - - SR-IOV
- sIOV
- - - No special limitations. Any -kernel version which is -supported by Intel QAT 2.0 can -be used.
- Official kernel: 5.11 <= version -< 5.16
Kernel Boot Parameters
@@ -238,7 +201,7 @@
- - + - SR-IOV
sIOV
-
intel_iommu=on
intel_iommu=on,sm_on
Install Virtualization Packages
(lspci -vnd 8086:4940 || lspci -vnd 8086:4942) | (grep SR-IOV || grep PASID) +diff --git a/docs/_images/configure_sIOV.png b/docs/_images/configure_sIOV.png deleted file mode 100644 index ca5d00ce17bb8ccc8642eb91af336b98fee6aede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3492 zcmcgud0bOTw!Vrj+OjlCq9Dr{Bw`a9X-L4ZO@mkVB}4>4LsU8-f*_GypcPQy$`V9C z*)#+Q+D$}uSp*FrL4qKg2}>IUBoYx>lr?kH^ZuJRGw-igzk93Bsq>xhoT^(@x00M4 ztz^Gf{vH4TSsUwPE(lspci -vnd 8086:4940 || lspci -vnd 8086:4942) | (grep SR-IOV)@@ -247,7 +210,6 @@ Install Virtualization Packages
Note
-
For sIOV,
Process Address Space ID (PASID)
needs to be present.For SR-IOV,
Single Root I/O Virtualization (SR-IOV)
needs to be present.^gJ=MO z0ziXe1V8~0=|tF($OqAQG_HmyLGnQy1qbpG=yZ@MCV~_Mf`UWi0R*0iqo5H02s@%{ z00adj@`=P65QhhG>10>{;U^sjheiN6Tn!q5#~~ ;RdFgg?nLA zEC~xc$1~%xBo2oIW3dt)7MV=gk2wotnIsY%52l7II6RyJ>=Td0!U#AE*cArC$(c@3 zBuP@QxHuBwN&bH>z#PPify3_%vOYxx0J#^EcS}bg(;EPGx!N52 afTzg_9( zDdVvm6)9}_Uf%=p@%@)PO26W&1)6QAQvzGJ?WkhZSA}$4;BAV%R>!7F27HHPE{F!^ zj&_WN71IpvMVKh37<806<_ottZ^vw%Y(Y88{kz5pqEN=u)!B)B0VNNlZWvBV>j`S= zlze*EXKLU7Q?B%_3!0h@dY6Z>xMj50hYa1=72Pp2cYyMPwv9i>0Dv$SvoG6A?4?4% zTrU${^F)Q(Hl #$c*AV4D_RZQda%@t-7P!R%ACXfi-Tv5Y3i3r AbNbm)|=&eL{fYygDj~OvevBd=@%zS6|=w zUXHEb{3vOz$! BX;3OkH82mYNr??1N_oCl zj-kgqJfWuTaFX4 zDM;MfZ$o4pw~Q?F{&b}2_P&!nX
bRHo&@^6H$P@SuN0OV1=85OYKuB>`?a{39EHg)Lz+3-n$u2$eDpq1{s;!?PVyCgo~aFv7=B4 `xnbV9ZvVrj3>8~b6=qZJYDJFGgZ4%Pw(#Y z s;^PutZUWCC5_YQtM|S&`gvmnjgt$8h{xdDw qAEt{=wDmT#{It#>1ghxCT zr=!hS$|2CKvCmPnRmDC(T8MSM;YZtc*8m9g5G)Yti$g~IX~lPk=|<5TJFpn@18rAh zMQ)4l skmP3`%>ULmji+@Z(;!nS%!R-Kt*YX^clMkTXt3^TTPDeRTpK7xiG| zcdF=0t-(W~-rKsIhI3V^W5|`1iOH21f)Pu(*}jo??@C$hgP9X0J1VsFr>%9r^T2y7 zoo_FXrLNRg4a_l0?cAi*!s GAd#6O+|Z28EK*HQQ^Ys5hX$MOYJ;OQa?AFSEZNc(~t|W>M_2TZpPRi@Wu1 zxGp)9aYoqzh~^yY5?#Js{`f}PnF2OEYA*etIYAAx{#x#SspZXE*$wk3)wJ&~WGp0G za}GwPmOOgZb^(;^;x8$N*lxex9G}$}c6)tir00aSt}&~Zyy%zD3pASdJoL;=J@aNx z4>{0Lj 2Ejgj*uNtrush9P+^l&rfbL{#$rOFRX@u6Lp4JTy$X;B~Jv{rkp5);Z&9PVx> z)4)X4x5JqiTFQO@$8US3Rzcd0eV2dY-bbn~iM E_V|65sd*p M zcH?05b2@hqCQ_?VQN={KWY#e6{_N6N-;KnS$j07=h8Nwhms33^c#LTG{s1A8Kx9z% zjnSh6Vi_w+pVUkq7 vtq#!)^B_iMv4@wC_9&K1`@SCW; z2CDk7>7x9Hk&z43ji3E!F`T~F{;l*>{d0slrP0^7t)~c;U~u%CwX55aA$bHSaXNOS zLXVyYj&z28U3<)2Fz{eM8UDj#6t%|9_YW(Shwx7ADDmj2%(0@16S2V;$%N_7Q;e@) zXyAOfLWOJ74q=Ogy?3vn*xsQ#`wpq)IygU!ZSApa413I+xaH1vYTFk>%8HUKL;bCA zPzC6QAt_zk%T!=gp%n?QqObfgh)fvjT!K=!VT4Albhnr$slXdo)ZDjmE+e;m7XIrm z($ipMz<6np*6~@*TAOb? 8D>=W+fM{Yu6fGp5vvuRJpTB>osdpnZ9}J~ z!SRm0l^=AC52m{_YJ4XHU1OWvOh+2sHUi?Z)jyq(jveYQ*ofn)-0jlMmGwF~P`V!Q zjAwj>b>1#`RKeV9UU{TA;1P=_t~l00f-YiJ)(iEZ&3d~#qhy84pHucdc8%^DuX6la z&7ya|id=G^T3!gPs?JqLO%3m-Re(=TB3TU8sF^-e^|p@Pl^;6ImMF>?UQuD1VV&vU ziqry~*Pb^ObbCsFogA}ayR%528;f4Vb|xPRo$t-9wj6&uxWTDTT7DC?IoFT+Xt~Fx zmJ=uqrNW!9+fzOlBS?sHN$^)ZaAA2RoAq|ddH%^=Qk=i0-OEDmcC(zQH##NVbf4OS zv1?$5k`E#9<8uCXNG%cPM>x{)lWk}ORd;dE6X|?3>H%Nj9VR11e(?;)<~Q&V5ZJrS zjYC4~v-)KY@Fhd}T=Nf4G}c6KhIE9gG0$_K2DD#`>D}1^f5XxJ=LyX2kiczwFkiAY zJ;-+ZF(|V&`d9;()Ekr*y7e=1X;8jduKL*+8OBwe-GP{8U8$-lR+`y+IOckW#zlp8 z$Ps8om0Rh(U!FD*`S;VmsW}|KS@10L-V(C@ArjP*)lqA*;;;7<$rjAvX7bHMisy$q z^2rJV`a=y|wbhzdl&WsViZ71DI2R7}y&dKq=?tei{JN)TWcDDRVlrr37Wb$7?o-D? zx?LNhS@=5E=-qz0_w1^s>+hq!5zu;q hl5*4fHIgnffaLzy9m8 k{dc$6{|#BZ7%BeFSoH0pg_qbGzI6jOpyRP}3-a}U0JUW7iU0rr diff --git a/docs/_images/siov_updated.png b/docs/_images/siov_updated.png deleted file mode 100644 index 5f0611046bd68702b4cbb60594b1cb2902cae808..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56710 zcmdqIWmHu0zc)Gvf`p)=A{`PcF~CR-ttbsj_ed)#F*J-wi6|*0rASB%NXG~$Lku9@ zB@II}3^g;)M*rvBXRYU~`{v&J=FVCy_uyvl{flpWVn;sFQoc;ZL 3~3F zXb|Xv@+ETMH%|0j4}gD2Jam*FfJ%E=)_^Z$_KKQ{AW(S>^_k^G;5+3@6=M$&h_?0o zhvdc`wO1g}G_$IbqMnZhW|}%cZ@6xUc!Tp5WqfSB!fS;qBqUFtJS{wW?L*=}fxJ_4 zs23B6^(mV$ajo(x8ZE4vcspu>^(oHZy!&=jO1VJ!$0#!u)!SFERj#OVeCAZV77RM> ztF+r3cWl)VO+Y(u<4=R+m@`v>FP$?G$IPaY{l%*AJHT_De +3gq
3<=!`f`pHfBo29yAPj;-=j<+nZGlv*iV91Td zkcB)?|3Yz@_O*5YMu@>Ge#Sz7G=8j4bvUqQ>6ZxSf+A>5p_QiNny)q3bf8eke6(=J zRn(9v3-e^%p4nvhw{6KfY;;TW-Y(C~3>$$^fitCN^W?E=>otJ4b~Ua4)Gu+c_)<6U zl5M|(&U6?*+>evm1?4vDvP8o!2f~zNUbKkkR&P
;rFuSv++Nv(!PL*uXUw2~J-N zX8MX4&??O}JB6E=vB|=`Vy9u!S8Shg1Q>0XZg=}~f!M;{P+{BtP+-Wu-mJ^~Bw>wR zP3)J{XK}|*1GCnyW$(Lmbx%T(LbDRG_hVImeNtfC&$&_JVEKHGi#LK?1|0oz8`uAN z9@WV2X*e3tU+6MDC%3xg>+A4X)hG6L%-X!>E_=*WAGnzY(Ik981-FW$rQZYNKb&O6 z`NnCoCG4BM$zT5fl{=8O@r%7*%Aswpmp2slSu= +s&n+3O*8qTYiRTw=2P$ouTXWf>L)7&badUiA^xGR`%&-J z@NQAkSEM-aKXD_kL`)X`q1C~xEPr&rf%A@8`jn}bF(Co2=(IKw_LIl@KHpiM!cp|7 zO;0X6+1KOMUu627eZmi6KA#qdd~Uf00;!l4wrj3J!S5&;=`N_;IA4w8nX3d?Z#>%& zKT8dd{oLYZ!YMu;@i1|lwHa9#dm*Zs>hg1@*4=l_YSYj=hw7+LnZ6G5&%K4+Vb3}K z(7X;0Cx5b%xb|(DdnU@XttNS8+4Qrb*1e8Er2I&r8M1KAhZ2ahj>~Io5}a-pZ1kdR zWU&J0_kAZEBAZ$m)G}d!wbXT(EndRRGC_`F6Wkv9hcEP2PzXrSI3a!v%y6uFLdN1| zPq*Hm5_(0k1TgUuDq@R$M(0 ;d-`UBxN^HPd2F1N~(-qyW68kKDa?IfW )Rz8GZ=oN169lM~+dfQ4q *UW$;A)1ck&UKQwewS_{foo*p|Vszx!NGg>l%j4^Xb}u vP30R%5UfGQiG>G7jvFB4lStVRDN0Q>N{4|FM@hI*V?5m%s#Z{_AQQV z?#s7soJ; 32m;TN=H*WusURAFP zPjFmad3&4c!^zP%nPI4#Joc9lE(m-naJnwW=I?^_C%WlYY*)o!lH%}WUrD}K N&PG!x&kbM0mkEAcOUwGpYNadbtCi8QJ@0 zjkS;%dJqV?imtsojx*tmjKwNr@`L1^ U@5AWhQ2o zU?0@?KQh=N&iQVgVnUfI{FZKBJN18p><$oQw6PK!+o3a0ay_EcIo*4Cp;nsMo1!6T zsnh4)1mC)hV7-dPp3xT^9DLOyVdNsL#+JP!oeH0w-DZ5S0(P!mlfUu{#}KCFY{{~B zqQtDXKiSTsct}m{@3sJ$M-$4yGD#|9e}b=hn+UD oK%lcb{eM@Gw%{_HFwwML8#C=ZKve^=$%gKG{OS2xk)VE9{Iz;O%3`NGC3ctN zl~SBAsrv_-BpVZWw#{$LtU#y9d#24o_O=;hX_db=Tx>SJ3Kuy~M;l;0oh73UbA}1N z?p|UUzX+_6GNqlL6=Tv%qHCl=?lB5m7+xi?rjumirPHzRcSZ+z`caf1g(uw7E^i;% zZJ!~sLLDE nUfCGbCV$uwe{v>tn9_HR6 z&30V3wS4K`?}b>V+u5$(xqSwxNlayE@Ae$cPWqqkK*)dFmM}2&V0; ro2X&a-{N~8e!HgUF zt&qFP>}uc9m&iob`|5GtEA~T6pE(El S&U_WV{Bg$`<6t@3 z_b|k^;d4t_q3JLsf1ABeMoZlF*(&yAyphcu-)3#bUF=>>{H*#!eGTiCiCNr(CeJb| zgm!k7_=Fq _cmFPFy{`NVec}x!Cuu}muN<&d8jJZC@@!@uoe$l`RSD_DI_V^p z$M!+J@`#Z_7n-IlX=IkClIPo2@BfVVypRDUMF(i-VlB0F9M!URY+ry0m6zwYwAzxx zYSc&TLgenAeMB>I`M=0(+_kVFH!|mO{p}j<#$NLso*e90j5;f7>Ay^2Rqp5}sYQGF zUA@kjzDeoi<;$h`Y< u$*EE~qB#!t_SZ4%VqNTM+^I_5 zNO&Of5Eu@0Wu=FG^Cs68W`PX!qo^M0qPE;Lk}1fo%CFkXS|u|Te8w(#Z|~N5t$}zE zcSg6TzH%Y6ikYs&EBPJHMcbR_`ZvaISU+eFnJ*(*tv`e{fpWsQt8Tud_4cjLM(QZv z{0P1kaiFuF9I`hw@@4N&W}IUT{_#EgtoY3e#u(3yI23;3tBhDlkForU2!iP(qqKDO zNMth1B8-OoT83&e&06M?O!6*UGEF HuhiT((&qzl|PxtK`%cm3%qH zKXW?xgseQzN#KpH+PkSZ6TYj9@7%bhY8s`^Dwj@3uLVSHcJ;-jcc|aq^Q2JXi{y^c zw^JHsTl0G2q|FP&4)b~J{ATnm;p82$>rH>bm3!XIa{=9eWTUW!l?DX}^t<`6T|FoB zKh6371O{UN&wl^^2dAl9IKGLjN`=^eR4I`1SWdYUm?UIgnCbI}Qs30nv6N)sOL4JA zhVOFfdMLe?@MsR*saXBJgj2`*mn z<7-LmZMR;m1(q=*u0%x1AE(~`AAtA2fw^zo^ua%ZE`xWw32kn#JiC|Wmc#JU%rS8b zGybbiOd724Y-{ADJSTXj9fCU3=+vaT{mSMv7;+8}U%kq%d?5@Uij2l{r9daZ17UbU zpNgt7o~Xar?aC8R@yn%$(Ef55nV~rJdIj=g0z-Xz<^RnckJ2t`b0Itqqvkr7XVdY5 zMt|^4l~wHDy^;R|uKa(n&j8q)Vw5K3kr(;lBg8&Ba)59Abh6R6vi@+wQD0X#q0SEW zMLEV`mT*`zEP`UOE~Qjo^k;n-L96dQ D@GMn#DGoAIqqEej%UQN;D!^94J42zVGW{NQ9=To}ZX47ScB__Epjk}Lo*#i&y z*H1ReM%`o%XJ_hUPpgPFeh5v5Xwv8qU@gl3ge}}>ju9C@)v(F3H%p#bkefbLHO!1T zoT0apb=|}}oi;u0*gsnR5>uF+%@rt>Az$_dSH0AoTvX?=QfS+ql Cb~H+U7u6Oa3rb;e9xn{2atPY(vQ>FW_Tqi?R>9(t oa3~7D;D&Go*WXMl)so4@Tn?*Rw`P zk_1hMdL(9xU7D~XU+D^4$5%>g|4?BE)WNBa_+Wf?pyD)mAULoj5aY z0$l(DEn^pd*{bBt(~Gdfo^or{`dB* zqRB+ixIzil>pYpTp2ZN=nAIuQZ1syO(AZ9=D`@>}8eG51)wI1m(_|`pim7zN1%j=R zZ@?X=kD%YmexaI^ZfWzOPjK61(UO1OeBFFaE%XF8?G3Ye$s=u4tQZ!czz+t;H1I$- zpU^f}&-%{=Q>?GW;ZLxGH3daQQOCD1=$%iBAwxXLX4l5=E-7d!0b`R>m~rnGjALYG z7I%6A3)l^dj`OFLJ@`$FGn{XniyG9D78IQx0mfGLM{ Sswcx930=!c z;6h{>RVvQ};>__#fgWeqyGgf)<;w(pUAB-!LdWTNs(oew{pSkI*l~k)nz$zZWE2@K zLn~!`u$<<)KGr=3{zJVN6i173+$}HT=}lG_U5bG^4BcThG&C$?mG)YdOtAT(YiwMw zFfcHXVlQS(kywSYYJbP*urt@ H6Sr|08UQkNrwI(%(Pi*-F?`^8Gzd zF6ObaI3X5_$OTD--@>K)%Whe{D_=_3Wc|Ln2JNRoljvFxF;@!~ZdcNW4F#*) KyEpa z8 6~#49Y$ki<7G|n z7Cu?CP+a0_htEiF4IT&lv_^dOu(KJ1h+t50Z}f;V%Kn{wK8xIOv3Om!5W{lVPliQ2 z7wg#QA8VL;bUwXZ)J?&GFvCqv^84OXZV?1Oe@5LG41UK;$*8HIy@ae)R?(|;z{ZrD zCH|z>UJcnkoh1fM6_@R|lx xX8H$R|zSs#Coz=e1=G&Dv6D4Pwp&02yM!M5&yDZMgF#JdSM7Jbuwi^q_^IN0G zE4A9g`*8yPkHZ6gc-G(Z_TqhfzCmu>xKU_WX0faj;4Ury45^~=`!LG$8BCq#)C47y zA)LT^Hf#ucKOsjv^T3NqN#+dp@65MhmoySGOeVf{rFK-?<1i%AHje(dEmo EIa7mNd*Jc#%%amrPrdk&{7v|~Z+$ Fe>qF5SIfyFcmWt#{))IWRz8)T3q)8iGCa z8Uw!pX4gK$ZxX^?{tZ?M^Jhf`NBv8X?5MzdSuwpY9j;4V^PPRJU5Lm$n@%UE-D_#C zt~Nkz#^D}v;sm!7EPe*{H=E6ZF{4W36KcyF*6r^^M)N36O-^5*Fbx@JYNd33KWo^k z=XXe`d?5;dns?VO3KJ@Nkr2-8@;iA_NYGvGh$nj!SFP+d!%o BOl^Hqe@Wfy0VSEYK%4 {WJ^>c2BEkNgH0{v#k}U{?;gKjAP`! zZ9mcMs^fY#zD2v2YGT~WKcO ?=gB>{rU|cOMgMLr5~{&W@Fv)P_9{T!tsi7 z(&ef1y73}UbZKv^VSA*cy{NG80G_R#C6}Jqan(60vwO~P?DPrmH`wj8e~&p3v(W4~ zfDhnSi+>|Z{jgdI`UB2AEUz6zEGlb;y1T2$HFk@N #3&6hQZ{V z)ROOVN;ed*BpEEYzfyTmJ#Mo?#BU?YU`CP;;{v_ Fswz9`SS-Emo+1Rs! ?N zXjBN~`ZyngFMqWz7OCxTuOb@xce7n#N0G$(vfx;|7l8-bW0~@rbgnP>S?jiduCgSh zpw(MR_lVZ|qZU6>GzN}m2>qK%<5A5c<&7g(=pEhdx;Qud2L%Ul5znlU;mJp~L;xz( z+j_9?w-PemqdMHSWzTwE^Ti>hP9N>q?7Q|7ZVK!YX2vJzCK_ON|E~%#dnOMxihI(f z29?x$QXwd%wS=|Phr<6eJi)P@x`xk1dZ$;w$V|m&b*~B>HYfdsE8R5b+7rj8z5RVn zvf43ltZLBoES36Up<=|QPT IW~ 8P9YR_*80P zuKnja@fyuE@gAj9E99zCe-NH4E$e#?EGG(vs~HF}843ojWvxXpNn{_eDh<2Md}>l* z6d$SZ?0=lWm`_Z|Mtwm?Dnzjf{3vKW77xF~?!PmIkciWf_dSGZkkt|nmf;Q$rz4 )gHQ&ZR z<$ay}cR*6k{ZZ_Nqr`7Y&XX0>W~87xo_m(n-DEo@vV#5^IeIl`F1#1aurTK*(x$Bo zNv#%vSn}=80-jU_AOPFc8yj;X7eEEE`G>mn)LQz}`>k1zlLPVfCl1>NtdpXF{~JWT zRCpty&mfCU_8}^w2l1HojDXm
UuU>yH=W 7LYPWj*=fITF;Q_qhu)%G*bsAvs4kz*%%MN9nNE z$xyhQE$ZRyJ_ZZ^y@9~B@ahzL;TU+|wwGV g ;ZFF5aWD65uuNR49S+dkf#0p~HS6eQD8&YT9tj%{mGL^FMA_HXNi zlC#heu+k2=%$JI7{LQk;SoC&@^ Dm!;if@7=ADvmxCnWh11&zrB6jgy!Q1wnt0#i;a9<9S4QkhZ asL!ajhYSS$-e4PJ()6{ <>?}s|idMBk zBgy8i9Nuq((GC>QY7xKI5SprwdS{#3JmNI-MM?1~n4Uy!RH$fnE9t`>erSi%4%aoi zo#?kDyq7GEd1VypZKRUKs@8K;LD1@h?W`1)g55!*F3=BVa--a0V7bT=xVzI|6L~0T zvgeSfIN=cQCr9jTx78szNvYOb2EF2>tOdu#TEit}qvZk~jDa%UA|$Xi+-3UEA!m_b z`ET41$;0ozdnn7tyG6R+-fHt FFm6V)dQ%K8R4ceGR`tx6wT`Ic%oMnUcKVo zmNlp`8=;r4LH{E;y@KR{8U={9VGbd6ktiDz%GlVp^}%?ll$yeQ{C<&MH~(dTI+?i5 zt}ueoa~8TQb{IO(dtr`QCwZhF!^?X1Bh#`vRg^}7V_3XcEKbMv7g~59dOrSvpe>G~ z&mxT^QZ828jbFw0b-HO3oVr)aqCMH9Uk-uvp*cz@P(aQPt(4;$bzZo7@Lb%4ZPk01 z)_06{Gs?hb(XoWuQrV@pka8Q_F%V%L6&f78sviWiknO L(Uv z@V){&PY&2{CE2vv@^$9~8RJ|&B<`F)Nz%N5sl|Fq%WYovXRl+Et3QGiK2&YHz8MO= zD=-1OEInWnPWMB;>m-#Uryph?N50s=*CAdd{DtMx$B%wB-4fj*_+VgGa;;ubK3M%g z8I$t#5A7!gXIFjc=fz|g>+#uX#pT);Xd%)$S ;*tensN6FLsP=~BFESvK3Q`^!D+0C%LX zskv3ZTm3kOt)v;h=~`qRE!A#DpVWbahSRbZZZ+;}4OiwLf0&F0BhPeX@dtzFj740Q z?8`X?G519kY}0n2c4A`U+C~LH{RpntAn_$8 ~7ZbG*eQ zCj*)8sQ(^Q_5BXKmuFs59#)XgPDRYJzJ_Q09~mk+%v2^GdU^`yLTsy#Ru!VeBVaBF zoy>f;TYq|?`~1-%2m2FlSNdiVxN4K*$F*A#+}&DrJ4UQ46+%tPwkqOm))lzaj`HqW zp^qylINbC@{ZwPG`osKjT&Q){E$qAnHnKCfm>CIM3}rl9D#&X7TJ1buy0DK3gu>CE zysDiH>F|a}*e4Fj<^*kzua?VKH=AOP-NVPb68VRla5F`0K}VJzntqt^O6BQ5-1It1 zo=|R5?PNUk%6Xyvy#wLwcpYGr^bse6S?H?N8plx~F~^bOj!#|t+*0DduM?6N#~-_n ziZF{ ^KjuN;ekIXqd%p zuFLrPBmL!TzX;{vcDT^&`wbg`708eX>Fa{(e)DMK0skwVqFFl!G?nMgqiO i=n=idGD};h> zBw7As^)@y_{)}^Zp@Z9hIb3Guu5R9{k$_q4lRyANoOox5JDV()=bI)2tZ J@}nAO@Q{Lh({MVjL;F>-}(-@Y9y^LU2TTHF>?hjhu0 zF&DsYhF12nP^>NeTHr|fMZ}i-ZS>8L9_)pv4;xEpkGhp^V7Aj#0jj%mhHs&M@yO21 zdj$EBV^JF^5iEbUZ(p(=W7^7IX2BB2ppUvv5IKcqjZSC$%8kj$^}89%LRpWK_kSvA zL`aE7UB*{KUrgPAKHhTN4nz+^{!ij7>z;tXP>pe;Px(Zh$82-2Xv&>){;NvjYdj l$F{nhB9j(~6bm zC=H98$w}z74S!6@?eb>SjA-xzhi{N?AWXdP-eDi6Lc!W>R0I~i5zsDlHhZNv|3^f+ zO)7^m`P0f_*1iLNCI>E`3~;hd*E74JuTP;#!M~zer9IQ{6&aQps3!^Zmk;$tdWSz{ zLpj$>=an{WL9t)h@hWsKu@`#dHJ)y6@}xeH ZAUf!<+O2h(Rn-CrwFCDF@h} zCz@N<|FR_$N>R8Z5D{V#f0rui(6BA~J5vLQd;!XSPe54lO&=8zC-H~~Y+R2*P(@Dr zy(8GuYe9Xlas51%^cXrP`*gSP=!H1CVCSeIXwKK-^p@}T?o*zFnj-Rd 9lZP)Xy}J%tXdv^L+YR2^2H?h>*U`=udW!)6+`kKOm;>(1DR?OU z6#K53_tIzG W=DsHeop^!Yu4^KARgu& z)hLtmX+1SgyI$P{u=#&(en>neE`bpR@)}V1{l&K2;;QrT#V(b`pT=g_0NdutqFktq zctILxjBHWPmv|4mih^+ld)^3uL+dk(GJ4cE>$C8_Lnn?AV)s+Fs3(XOCWIMXpxV!# z=t;OA)$VqscobKU#jbbjr+ErQR+Q^1uiknd +!ehII8Z=-@bV=H>*bmKHhR75BhVDy?G&vAq=hLH{-1;fRh`v#`Xpwlzj|RVk z)z6N3m!#Ai1CHHUsTo(B0agy0gq$2Jw}!Json=^U4px-IR@#GPzm%Dy&}6@XCB>dJ z2Lzvb-*Pt!vxtv;W^J}YT#(BiQ}Yu)+2|223?Fx)2klf%v{(Htr+&pjf7U`%X+#0= zGyHXPzpqXG07wDTA>nlFrQrOB_Uq5b*iX)DXVf?}geBG34LfY8Y-fbdkd| 4(A$KNPxukE_4^p8_W|6$Eu 0+C|J+m&8=d(o^F7cBMJUnr9Ddtu14FfE8bp8UG zRkpdf@D|W0VP~=|dH>vyMF4y%_8Qgrtn@wi-XK;}q0Q03sOjK??9Gz&K$nmOj$5c; zpn;`h$$hA%cifT-ef&+Nl$!cyZD|M8Uys?sVVfawL>C>efpBnn8ME-(%1-(Af#}Fw zCYb;~n;q9t@cCE-i9nWmJCQTC4#+X}eXlqYq4zYL6CnP3ir^8(N1nmvM@Xm{DT)pg zsGeliK}gu*TA@AMK*#1X>2#xa)ky8LCjUt8AanPpAmt0%mTMPUZ;f7jW8Q|2NViRu zKCBR+-)YEWHT^ AH)|@nXWcDCGB&XK*HC zWEI?WFd+A+WRosDqa?TgM&Rk8{^>TmoNk5B?w>&N&_iI6)iy{g1v(E@BX}BC>oDx` z0 z&{?`Uc9!`JjzL^*VhzOH!r`Hcqst3*p^T)QlA}i7{UL3{iEh=oR>ZvWFf(AgUzxq6 zEJ3lmq-KWcSnlpiLDF)KK;d_f@|L9^)r^*y=2L|A&UG=~fyRJ~Y(9zozITQc38D}H zmuDe-XSN%* pesEP6f&K+(SOfM+dsG #CStylKR=>qa$Bf(_ka(R;N$tT^sHX*;QH=~c`hk-S*w%V2% z?ruCW2$QQ3aI_Mhz6q>^&8g(qvKM;#?D}cyYOGl2xA@x e#iqs-(b!X-Zw{mTt;&FiE(i*NHpL{Rm!9_vr0^ YL?uFH61)aRmH)FBTPI{kv@hK)WRhx=PJzkcc zz4Cy3rB^|QeynT|2~)2?3lWgNVXRo)*9#o76@e@Q0Q&g{lP%&Y7pbC8X`(mYmL#y7 z5-cweZ~bl~ UCkuAi4g`Rp zN>^(bHTIL*PY3PHr)?!-e;lU@zA01ydB5+D8%1AKb 09&YSSA6iV8{El?)Vbx^=e1(-=^6^zl$WNYM4($FIk*1zZS*v zt-AF%Www4;0?F{f+8{h#Of&=ejf188SrKPF u1?Xn#M=oKZY;$C zgR IfwdG>&eI0fV%; ^*d$OE; ad1SDD34$)>2d_&%(Y z^9HHLl|Ns!QdP3dCdzWhke=x4-5*W#Z@{%;Ia6h5&q3Ho^LDdbOa^pH2_)J{zW~kp z=9scOLwl5P{cLu;!W^ZugZ%nxqB!WBC9?YmnSU_bD9D!AG&qGo?RLHZslBqSEt(}q zt;_iEBAG>Sfg*o^Nk|gZjxap6Ix=moYWH$@s7y3Y=LU}e>VO|W{?)-tyqDs5QU%|s z%n2r(rf`G;7h+y}Tj%#Qv5xx}!MGH}@$ `!@;ZCO;_^kpNk>9d++an-${IUEA8IQj!opttL33H9$is4`^Ycf7(E! zz?_Q*rm)R6_1DPH+v_RE-M!1^yz#w#1`!lwYR(~(oR!%&A0p=@xY2WgUajw1i94Sd z1E+17%kHOuc51 ;3rwpCUmQGC-{MWn20 z4p((QOCW1ncXL =miQ)Ok(0dD#I?{#N5`QIY1 zAI97E^&&M;k1pbe!v-^lMH-8mc6CNzb^H4-ennmHDA!8GjH- {| zqXA`|BZU^t?!uKDeR6n 6G8-{S_m%L^(70L_BQ_Q z0q-LE^i5K$q%Qcl)ru&~sGJxDdvB0b+i?x*G_l4vtIT8p5?%h U?P*OpC_zr_>#QX-+`9@VmjpQK&Z!(O=HD;kSt_ZCuEipX zUf*C}Al$0Uu_V<)^1GtZA 7Pz-r}XdT9f-^ zad&gS;8ml&mE*UZa39-H%!j@rW1j&xuu;F;u!F$z(t~EKfQWukMEQz^FS5dRUrr?X z19Uy>&LJJyqkI(nkf!pSr-!}$YDs>i2FKr{@5G2w5hzF~fv&iT8$v-vB+YO$fzgKw zOxa!FK$Q@`nt(g613_2B8KDn^ g&`jpo=3JSc_n9Erpl9FBXV6S`)AaiQvCkOhV zfuQz#k@tLzwbYhe(tS $_f)w=Bgsx)z4O+3E`SaT zd5=s+= kkK`G3ZE4NGi);`&z^D7zvSCshH6OT^9yweyf>(?JF zPP|v<3JFHNWI37y rHD%3*nvMcTBw z=%lPQK_tg3bx8Q3Fkl}gaM|DEr%0pb91;mp9?uX3sP$oWNU&K&K#K#g5GO~L^$&SL z9430K5UA~iOuflfA(X(H?3>p_l6Y*WvCs{0xV9b*(6l5$Z7X13ifmrVmI|lePx#13 zUE{l5d><8zIA`1ccK4qH;Y{lESK8fTaz0=oiYn9c8gpRM;=bX_E=@i@*CA+tYi)6U zsrOX0OX<>UAiCTOd_+WVZ(=nut;FFpjaXwK+lJi@)VLyA)=$RP>NW@CpY_y!Oe5`n zr38Dm#f@F&1^cM4SseC76ceCgT&{dpIKDpOv}t&M2)N*1p&er1dp}OcV;L>-^n}|V zktX44Flymn;^5#QI*M^TSnXe*oF!C4ms70KVwRBsW!9^|Kd%Gbx}L1R$^O^(M)E8F zZ4J#XF{x6U21uc0oz-7r2N1vx`cz-fX4v`Cc%^;J$t)2MYYHUPom$$QV-&z@`~=17 zoqms>A2J#~9 T60njO*(p=Oo`%c{_{OU(EtdUj0^(mV1VH*(J}niRoCF>qtQ zT%B-zE&6zxS?ei9^m^F>$8PJ!)4v=( X34* z;cv|V8~JNOWs{US+i6?=c#tOTT?){=`E`r&ithqSZi^~Fw;T6|=(T08ihaGtEa9Tp zCyPt3KNwKQZeQOBitjHmm4E~MPEioPb#QJ;U Pq`8kcH?cl2kJcBWP4yq(mvYnEV$438kY}k#2`??jLMuTLx1;@H+N5(bu~Su}krt zVcRG0)i0gyeYrmo` 9YP_Q=9c0rBS{&D@x*SE3XsJA^T0RMX~kd`f$;0`?K`P>MB5wfbaK6Y*a>`i!|qc zkNR^UuyEAl8uSHVSEo9*4@OK~3(kF#wfq3Vc2(?&-(sAyp7oc8Wp%c}5IVW9*1l{m z^=o;dnK4Q^P0f*>X72Sus!@A@G(AQ-mNmg=-;*JD>8~P}Wy=0;%Y=nuv-{BPTL9ra zYyK4n>!aPwSB|aBl5=~P*X+DIbAn@VVqyW#T)9+Hca^V@4P&?5HByZqw-BH0dbSoL zh=lbwx1--o2-VJAfX@cv9+7j2jzz+kwR+nVlao=?6IyXGD>(^TZ`1n|6tzvan@>xD z7aA9TrA;8cHchH*)g=o&e%&zqI;bsgu5Vzlj&cKhtc8FNRr6fpI>+2P$>v_;a=HX* zM}RH|>`lJWYyk9Q?H<=<9FvN H-P9*m%Jli~F)(g};dRRN;61SD2P$*ow!K59%aS{l0mzP~$_i4XvNaL{4RTtI@ zAPLf$T)lY)27m5+`uoV8t$@bU<~Ii*An3X;3$aOk!2xRmFckqi!6udMvim}VyGu@A zQ-m!aOhJ72ZiS_XeQ2=~5WSKP=rB_)#`c=2qK{bNLr >H<+(2F}hWh zo&A6ao(1c!o}0IpG-658%yEA{N3adVD0Ykw0?hR4m`AuN*e>hQC~YSkqrIE!1e9r( z3ZyAf>AcaQSisyzDF%!~|Dr iUD+{x9O_VK#W^!NhhzZiHV81)!1~5w-xB-ua8MFzsL&v zP=MRi3}hFvQd)GHV}J#Grhw{1JxrQZc^^qU>mzDxJOkb>qvi~0(Hp7hs67|z3uwJ7 zcBu~YkLtf;+S&l^fB&q`%9fplV%K&<(g@lo+Xe+1f`BIq?ZTyi^|T#+(V!KbFNP+A zqd~3?6XjxsbMn(7A$%K@kW{8Er%sda&*Mt_p1BUZJ&l&$`VC7i*!e4jOvZbCPKE{f zqBY4G53ipojoII}eTfC$<>2$Ysnap8aQ88PjDAq~!=NP3@RJ30;#Ue&(ckeeu#vIB zUu2@I(`crw$|=0LW?l_J$dmXJU6+4!$D?WJTI(xd)Q5ayS{sh%y@$pe2@3^5iZ+LT z8Q_&6#eXpnhlydde>;5l;vXz3-(2+K`I8r(mv}&;6T1BBS*KsC203+ak^m!j r_ z)3m{QQ*wQs=kTK)wC7Gm-{UT0g#C%XvOOoOXe|^ln-2q2Taok~JjPyLmoF>8U5|p7 z@p 8ylwn_54~S(Px90a4;@ 6mxIj@^9P;@;d}0O1-a)(uqfF 4%oD7Ps)&wW|9_i_7#jY5Aa$@uxZ z7}>(U0R!`QjRzD}-*#HKck-+Q-19)pT067rec1cysset45|bN@muT5!Bz15P*1fp> zAB*RYb&JXl-5mrTHzGZ?I>AooO#Y4}t$W+v#Vu<#X)y>TH5uJP{m@*XB#x%sF(s@| z7PRxK-q}SEv)4T2ayc95C2X!NICaJsY>DoCt2x&gwZHT|eji>vIBWYPu@Le(g4N4t zsBh~{I%8ss?WCghB&4~)YjeO}AWX)-X2#DkXDclIxN#}T6v)=fQM}_}M2H!xnE$jY z1W#Gr3A7}8^~zeU9xO)-l1J{tcKS8V7N~(69vHnOYp&)}7Tme#cXLBK4!b-uH@h1w z+g2 v$_OM0Lwy zmGUj(=PneF8b9lBMpUqTbVx43JL|S;lIj4>8@?N;z|uJ^pNKirDE6DEYEY@AU6Ye& z8@k~m(-duL*e?L@2l4zO `LEjlS`bd zN fdp9yFkd=NM}MN~{o@D6U(7W6)~}XaPfJ_^?NZI~ZUBwZ>}{-|O{_H-o+4_i zwurVb+_2~ve`2p*q_**>1X@RHT=yDJ86DZQ&-ExIw=HQ%l$t6!1QU07>^SS4{5>X9 z2~SH#T_(@EF;Lt4;y3r%6i;OY AUFvUwq@m8 *eQ>`wJlXG?|i;YA1=|aYWgjvQbosqTdwmLg&=n5-{oz-W?J5S+9OSO zgs5Dz3ycfucNh)jtr2@QYrkArE9>UzE#3gqF+8c~^rw;QFcDO7rD0WcX8IDr8F$AUtUeA|OSl9V$5RHl-T9aJ;v 7sNi|^otI0-$9bF@*CfKWFV;p0c`9c0t>h5?>Dl1 z8Vyn#W+{i+q}mAq@{hP`5+3jEx?wc2l11DYgufF8V`l%pMb|R8ggpKw54TV5X;v;6 zcxkAO949t4IYb!uk3!?5s4Z-e;OPIN8E6oGt4O=T48ciw!2EZ6{iliu);7e1Kl{Qk z6T!~A>r9|Bj2Ns}gee%RZQZG$W%LA3wF8Fxz5!%|`c jxG2KwQG=?UwR~+HhnW+mbzGrb|(X{Cq=nEqU5_A0uX9v&d=)nm)))3 zmq`m>Y{?>?t#sVf%g2f-c1-z^Pbq$gTzHl$)}WD;as6h$9J|8Du`puVG}F@{Ywxb9 zpD%|Jvgz%Hg!e0%iU1=Rw)=u0zyoRA06$g${BQAg(S=}*SPKCABm)uQi5KNmhr0V3 zQ=oz+{uf*C9Z&WD{*NCjC0ewUJrfy62pN^+SQQz^OjcIO3>lS_hH-FgO2=MtjO @cP&*x)Y*L_`>o5KaOrRtj1@!yvYdha_J=*eFA z>mKhu2wfQ|>{TiXyKdbg!pQLgju)B9Od{v$;N#feVRhbboI}ie!sKT10(DP0y5Zqe zkOXCyKJ>SU$Z-eyQ{G)8i_ #Xtiu$^_#!`Gxw zt~b&@Rgx=v5A&~@bZ6uY9yY{YkF-d9C`z3TQopDuKc)@wR%?%3nJP7D3u$|@(}9}D zE18s3>4nD%a`g04nU`x65&>O1U#e |`;|@RGVe z+h18G;RJl n=%tK?fO;It8^73u;!YE>Q!}LMohS z|3_w~$6(RQ!ibW_&BHc4Q0q2Sl;PSs+WRW{lpBx~AZ~;sR_iaMiv0lyzX+_349O_e zTy|Tg<9 z^)ow-y@3#9Y zd=%Uw&(&^%n(#g<_=Ql=B*EGL{pX>qg!kmgo2x@kg&ogi_+H8-J>z`>i0?;YL;XvB zbt(qSeJ^(uni$?kck;CP)?CPu@96NG5e8F~RG(AeVy;EWn0Ee}ooEFGmSZ1+Wu9>^ zTec{a1u*K2IVQQS(D3E<#z(r)gxo2v-amI3{mNQDeUdq&>BXG+S1m)h*YklZi>VkD zj49oeoj#i$$dq){H&)B2vR+ZM^7RwSjkEthz_W`Yx!{88jghC9uW3~ld(8~VF>dI6 zU8;1Lj2M`AO7c&+A8ntxCB4t*x %<=9rKl`4i4>vLAnB@z%4JS3#R-2g{o-jFlZzydm^WH1X2otuzB&ttSo?mhg z85LA$%jz+1|6bY=F;n{8o0V!TDU*vK3wt6c+j~pipWnP<6VbRm8x?ZOQumSPL2(jw zA_7WVMb^dS*ga?UNG+yOW-QgR)b^N+%)QQ~m3*S~=`@t3!CX)=nGCG2E9a@vY!4^r zZla8;J|29LBQH+6*oeW?;w-kcD!r}%jpz7@9cS?!sY%4N^WLz^_8LBY8!2HQ9f0P3 z`i#<((k3vxp>Z%q2X>UZl#W2uFnhTs!pSW xvCXZwFW@b!E28h>OUI*rKGb+C$Zg=eF@L4aX-L(2yh@>dZUCUwO zaVLK}0;+)hX-oXGQI|D@j8?z9xzJM{jy~P!sF|c>4>ML9Ck9?zb!MreI0DQVELwF4 zeM#Bn4K3<^DD{`;k(f&|%bJ^P0S0T;y~=r+&dRiPXjJjLZ G+`Vvo_;exk4W%c1u6QsN9YkoGjK*ltxC84Kzt&bmBM(pj*!i(c_0+n!pY7pu8B z#ER@%9BXHL#&I93ke8)>4QO=~dj`3%*r-Z%L(e7W$U~q=1zo>nzJ%*?I3Jk2sPWm* z#ovjei(POGnqE8Ds*0v!&scyaUXe^%k1Q7qm9`xGdA{z*z~b7zX~~YI3~)}k(=Ijq z_;vT%2YSIn2kJ@6N%vmO?zPw#h`@rJ_LGnG%s&bL$2`??dSWbn87#wY%mt2B=fHcS z;){M{Vb$QOP0@bH`D{l_=KIu->B%*?W^JS`zOYpv8@ozQR8~KVvwUH(w%K80<@C|v z!9*~Fw!7Z5Kq^#}sNX3|1&uU&=Lj?WA6CWBK8hTs{y&)RWvQABS13>$^L?YR&=p0Y zKEMO^YCJ6)aEb-x=qFpHrh{75%k40;5Tg}qegXX7duI7Gdk3pQ-LTi_BRgwHOZ3xj z4gfk)4~NcAE>@S(Frt(?u63jXupVgfLEiN&h|fn}%;+2tOL&!TdOUuP?ht%XPlMvz z)99>w&q>}_uc+@v7S9|)%I$kb`N;)pAtp;8>hs!n-NXy)0Spvs5zDbRSS)ruFR@2m zZM6kuTW~_0 Ea*fQPpSKUGFUJXP$RT|;M$vpbDXT=N3oj$I3MHs;7)@;p}jRQ$vXf 65?c5fw>jd_79v6fiTXTVoaLpWg*OEr znB-vMFLV_>%2DM|hCddicx;=`n#R157b-Jrwvy*&Ca{XtTv^0G>TbntJ%+d*_GOOJ zb?!I|E_m)|-@C)8Y#LRm0g0=JpEv*v$dkk^_1!rc@U|nvkBRMK+u($K`4U*^6t&d` zYcKV~3#~eg?7=p28Cp9`vXSUDw&vT16%OV_nA3o|fVBGrDEnDU)HbfP1!mpcLrL;y z`VKKPyF&%*ob@BS>}kLLp#O|eJ^AI@)7`d0><;+NB7-TPsrDo3R#e~YsM!0UN;5Y> zI48_j-c4TWM0ht2AcRZD;%OoST17R2 z^MxAOLM2y{FZ|~@@SVaj8U!{Xhs;=6!hXE@`jr8Rl|>VG6Pq$l38)OR|1Hozu_a?i zZyQ_R_Q!s&{p7v&D5IOgPrsXL AlHWX0i68Fzh)*eJw7^}ING*UA8G@~-j96|}bh# tM$ay7CBlF6gBpezbrUS`yg +OZy5F&<#bWhrv%suf_1ym_uD$J!;!aVsp0!U_-%zMws 0 EGTgO{bxDfhcsX70Y}w`dl6|D#gAU7rQLH(2C~4D6h4 z8hi}<2(UO`Opr6K=}v=hEFp@58OYn&Krgp;%>`2n6wfXuQtl{J&|Z$T!1qo0VX64u zJ$hF%C|g{MQ_Fu2C*|~yr)r14;M7)wk5b$O|E%mk;g|Wy%$~611^UBuXXSuED)#Xn zBea)smD-IO`r3p1tCd8!w32@KAidnKT=+g8w1G0JJ!KjB*(do}6uY_cQ`#S@xHAS4 z&9Y|Ffjt(evifl&^wk~GY3%&CV%Tj=@(Q9ax%vD3ZCW#)d~nJIJXN2N??;FH`DI^2x{G2`6Ro`sN^|ze)CfxAkzv9#C~S)1%^V+I1Yh z`^TrHai VI-~b%jh-;Ag4woqn92e qw2L#)L^c?>PLmL-)%YH73UJyb0ie^Z=YBuXGp%4g(y8>Re{B 8hdkEIe5}He`vDo@=fVhMaOLUSXwC@TJb{GdxHXRyFHN{v6RcJ zj(Py@$NhAdb0W9C (c)dj+;~z!R;@Ha&j0Wv5O#$BixYy#Dd_ZCIimVwFXKkC)+>eEr;c$`ua!6sVzh zEh6Tncx{um)O5LY353`0GgI4*Vl{VzOAy%LBT%m}VvEy@A3O(JC@fg3j=v2L*zfML z(TXV`H0i!L^iQp}Opkh`LWnQ;%i93B-L6gb!yc?uDCfGP&h>w2QgQ=t^A@?;_pYY} zT&^)T0TdCu%P0<2bevesfj5ttQaSVpfmq?i^vcXMZS86LnmJacGU0?-p&DkN{m*Qv zKH1Xzfj yFrQL@*{Oyng(^9 zXcg75RypTGnc>~nqt-%+Eg<&9ZFdnr)jNI>gFc~xHU<&18Bl`Af9d%SJ{baLVPvz3EO}8md52N*qV6<&)LC>2BFG9^{^d8 z$@^z_%J#=3?X5+tpDQC2gXola)@n~jq4kD=oOF<9wa&ZUzwj*d7AyB2N -~m=)AtDV%Evo1&jRSM^f4zVqyW!Ih zN`<;_AN#3y3UzTs?*h%Ev9f|Ja#YEjD&^eXu{47#r^`%1zf1 8srFeBmR(PvN#h*JOm=QKdhVQxeI{* ?|eVVK1ryKBD!EFB-IXUPErynV5B?XzB?}C@t?m`t4I}n9Xp(I zXKCQ_(ukT%oA}lehaRPubWCvmX85mV)W!kj+jZcB&T6ipnB=smQQB3>diIBbae|@i z76YX%6GsD(lM;$R(Bf%1DtX?S{Y_wU9IBV>Oi!+MP*1=uaLQKE*NV4_w)FTCj_CnD z@}*IIQz$*KM`$p}DP(a_0DLr(N6HeD2jk*QbVzkd+;FSi&iJ=UT5Zlp(1iSs-L=*r ztQHN?G)p-sc_i3?;2%z;!U%l89noavLQQEz9hgz%Me%DEHQJBq^p3MLQX$)`8%{NC zlE_mZb)-PGj2x}_PabF_ngsH|)!v!g?Q{t2Un97pEVcWg0aBCkYa3tQLhpQ&P|(|{ zI$`&-$B9v~MYr-@7j8U?R-k;P3~b2SPYexw9{ej4B;RM3#MCHS?ZW9G1sW9=*E5uj zc+6{=8ao};PE9{-Zo*HeZ)ePL?@Ke{g%aN!j Vp4m4<+P0q+S|?>u^jX{^o6`ok9lM z+h8Yvz`66d2@4 9i5%g2AqtVy-Xb%kp;U6{!!vT zpPjNSw)#f^R*zH5N$VlI)=nXM4~1V4OKsmHMmn>3h%IA^Y0!_m;kdmO)-oGgo_e;m z$ymSVkW8zG7d7==#J^d#*rWw68Nc<-#ou|f|Eo_xGPN>YXSg?lX{{$;mk6*Mp%({2 zbz}4&ve9U!LG92?FXl``EB5wWseg|W+!jNYVIOxbxqsH%`o#~hT|ATQ&P}nqE!(Jc zCnYO7I{Mbi%s_|Kc zG24ncd6BY9$gljkY^8ebR6!MVYT<3_I!1L>0=88xc{v!J0O6Vb| zwFC}8;l5LDw#Zh-oD$8|teGn^s5JM-T(s@V);1`#YneZ$Yxqt>e#==K0-Wj_8af{D zWlhzPnLfV+NnshUgi4fw$F~3vlJd~;iK|xa*%Qas&yP80CHrG%9$31+`jTkO`{cx} zu2Mc0Sm=8wEl9Ah9 Dfx4pG7`7sOZlWEp%$!Un&(l+=W|MY8pJ07WBXy~knq*OD!!E$7>Orn9e zB;#i~o6`fQK8*4_kKCtx5aKzH@27CFb7LiP-JIur%oAc;j5jJadc_ch#O1@m=U-(Z zOnRl~%00wJnVOz{)~lGSNmFf&m7}1s2~vH$2E@AziPy7;h*x*Odt*Apk~(hyjC15y z!pm_Fwjr%TaVz#2-3fBiJI4Xgs#xDkYVXW4=s+TCQkC|!5`H8_7^922Besa