[yocto] [meta-raspberrypi][PATCH 4/5] bluez5: Add bluez5 support for brcm43438 on raspberrypi3.

Andrei Gherzan andrei at gherzan.ro
Fri Apr 22 07:46:14 PDT 2016


From: toolmmy <toolmmy at gmail.com>

This patch adds the bluetooth support for the brcm43438 module on the raspberrypi3 by
deploying the modules firmware and changing the targeting firmware path. In addition
the brcm43438.service adds the automatically attaching (hciattach) for systemd environments.
The following steps can be used to manually configure the brcm43438:

root at raspberrypi3:~# hciattach /dev/ttyAMA0 bcm43xx-3wire
bcm43xx_init
Flash firmware /lib/firmware/brcm/BCM43430A1.hcd
Set Controller UART speed to 3000000 bit/s
Device setup complete
root at raspberrypi3:~# hciconfig
hci0:   Type: BR/EDR  Bus: UART
        BD Address: B8:27:EB:6C:85:BE  ACL MTU: 1021:8  SCO MTU: 64:1
        DOWN
        RX bytes:983 acl:0 sco:0 events:33 errors:0
        TX bytes:887 acl:0 sco:0 commands:33 errors:0

root at raspberrypi3:~# /usr/lib/bluez5/bluetooth/bluetoothd -e -n -E
root at raspberrypi3:~# bluetoothctl
[NEW] Controller B8:27:EB:6C:85:BE raspberrypi3 [default]
[bluetooth]# power on
[CHG] Controller B8:27:EB:6C:85:BE Class: 0x400000
Changing power on succeeded
[CHG] Controller B8:27:EB:6C:85:BE Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:6C:85:BE Discovering: yes
[NEW] Device 00:1C:05:FF:F9:F8 Nonin3230_501585326

NOTE: SERIAL_CONSOLE must configured to ttyS0 instead of ttyAMA0 (used by the brcm43438). See pending patch from Martin Bergek

Signed-off-by: Tom Doehring <toolmmy at gmail.com>
Signed-off-by: Andrei Gherzan <andrei at gherzan.ro>
---
 .../0001-bcm43xx-Add-bcm43xx-3wire-variant.patch   |  26 +++++++++++++++
 ...-UART-speed-must-be-reset-after-the-firmw.patch |  37 +++++++++++++++++++++
 ...003-Increase-firmware-load-timeout-to-30s.patch |  25 ++++++++++++++
 ...-Move-the-43xx-firmware-into-lib-firmware.patch |  25 ++++++++++++++
 recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd  | Bin 0 -> 35976 bytes
 .../bluez5/bluez5/brcm43438.service                |  12 +++++++
 recipes-connectivity/bluez5/bluez5_%.bbappend      |  26 +++++++++++++++
 7 files changed, 151 insertions(+)
 create mode 100644 recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch
 create mode 100644 recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch
 create mode 100644 recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch
 create mode 100644 recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch
 create mode 100644 recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd
 create mode 100644 recipes-connectivity/bluez5/bluez5/brcm43438.service
 create mode 100644 recipes-connectivity/bluez5/bluez5_%.bbappend

diff --git a/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch b/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch
new file mode 100644
index 0000000..3bc02c4
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0001-bcm43xx-Add-bcm43xx-3wire-variant.patch
@@ -0,0 +1,26 @@
+From b4f2b77472aeb967d3a7595e8a965785c7a37c87 Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil at raspberrypi.org>
+Date: Tue, 16 Feb 2016 16:40:46 +0000
+Subject: [PATCH 1/4] bcm43xx: Add bcm43xx-3wire variant
+
+---
+ tools/hciattach.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/tools/hciattach.c b/tools/hciattach.c
+index 59a76a7..5861d33 100644
+--- a/tools/hciattach.c
++++ b/tools/hciattach.c
+@@ -1144,6 +1144,9 @@ struct uart_t uart[] = {
+ 	{ "bcm43xx",    0x0000, 0x0000, HCI_UART_H4,   115200, 3000000,
+ 				FLOW_CTL, DISABLE_PM, NULL, bcm43xx, NULL  },
+ 
++	{ "bcm43xx-3wire",    0x0000, 0x0000, HCI_UART_3WIRE, 115200, 3000000,
++				0, DISABLE_PM, NULL, bcm43xx, NULL  },
++
+ 	{ "ath3k",    0x0000, 0x0000, HCI_UART_ATH3K, 115200, 115200,
+ 			FLOW_CTL, DISABLE_PM, NULL, ath3k_ps, ath3k_pm  },
+ 
+-- 
+1.9.1
+
diff --git a/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch b/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch
new file mode 100644
index 0000000..5a0a434
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch
@@ -0,0 +1,37 @@
+From e145c9621f976063e5c573db1f2053d906f63427 Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil at raspberrypi.org>
+Date: Tue, 16 Feb 2016 16:39:09 +0000
+Subject: [PATCH 2/4] bcm43xx: The UART speed must be reset after the firmware download
+
+---
+ tools/hciattach_bcm43xx.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c
+index 81f38cb..0b792e0 100644
+--- a/tools/hciattach_bcm43xx.c
++++ b/tools/hciattach_bcm43xx.c
+@@ -366,11 +366,8 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
+ 		return -1;
+ 
+ 	if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) {
+-		fprintf(stderr, "Patch not found, continue anyway\n");
++		fprintf(stderr, "Patch not found for %s, continue anyway\n", chip_name);
+ 	} else {
+-		if (bcm43xx_set_speed(fd, ti, speed))
+-			return -1;
+-
+ 		if (bcm43xx_load_firmware(fd, fw_path))
+ 			return -1;
+ 
+@@ -380,6 +377,7 @@ int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
+ 			return -1;
+ 		}
+ 
++		sleep(1);
+ 		if (bcm43xx_reset(fd))
+ 			return -1;
+ 	}
+-- 
+1.9.1
+
diff --git a/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch b/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch
new file mode 100644
index 0000000..f9f09eb
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0003-Increase-firmware-load-timeout-to-30s.patch
@@ -0,0 +1,25 @@
+From d41dc2046dd08d8c95197f677e224506f5b39bdd Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil at raspberrypi.org>
+Date: Wed, 20 Jan 2016 16:00:37 +0000
+Subject: [PATCH 3/4] Increase firmware load timeout to 30s
+
+---
+ tools/hciattach.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hciattach.c b/tools/hciattach.c
+index 5861d33..4141796 100644
+--- a/tools/hciattach.c
++++ b/tools/hciattach.c
+@@ -1293,7 +1293,7 @@ int main(int argc, char *argv[])
+ {
+ 	struct uart_t *u = NULL;
+ 	int detach, printpid, raw, opt, i, n, ld, err;
+-	int to = 10;
++	int to = 30;
+ 	int init_speed = 0;
+ 	int send_break = 0;
+ 	pid_t pid;
+-- 
+1.9.1
+
diff --git a/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch b/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch
new file mode 100644
index 0000000..dadce35
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/0004-Move-the-43xx-firmware-into-lib-firmware.patch
@@ -0,0 +1,25 @@
+From 76681284b0ea49852041fdb97a35175089a08781 Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil at raspberrypi.org>
+Date: Tue, 23 Feb 2016 17:52:29 +0000
+Subject: [PATCH 4/4] Move the 43xx firmware into /lib/firmware
+
+---
+ tools/hciattach_bcm43xx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hciattach_bcm43xx.c b/tools/hciattach_bcm43xx.c
+index 0b792e0..207f668 100644
+--- a/tools/hciattach_bcm43xx.c
++++ b/tools/hciattach_bcm43xx.c
+@@ -43,7 +43,7 @@
+ #include "hciattach.h"
+ 
+ #ifndef FIRMWARE_DIR
+-#define FIRMWARE_DIR "/etc/firmware"
++#define FIRMWARE_DIR "/lib/firmware"
+ #endif
+ 
+ #define FW_EXT ".hcd"
+-- 
+1.9.1
+
diff --git a/recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd b/recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd
new file mode 100644
index 0000000000000000000000000000000000000000..162275ac0b18c7c29ec0589e00a303867d5a998f
GIT binary patch
literal 35976
zcmce;3w%`7wLiZ1IcHvZkVyy-<0PC(0!$#l at KA$NolL at ECIk}^Eh at _JP$v*%0 at MzV
z$^?Rjmqr at BL9Gpn7OdJ#1e+*mplG$%-a7-N7b?9TTWTOtJ3MrsJm>%2C$Y7?_y76)
zKEMCx^Pl9*+0V7tUVH7e*Is+=DeG6P8Fu1cP&|M6Ll56c at R^Q>QYm9E-lFmKv1$8@
ziwU(YK(YU~&mbXX{c&Dm7*Gi>`EQ#6Ky<i^=g*umb4Fp&G<n8NQ)bThY?K!)T^CsP
z;M%nt<cdmp#$=~+=8SSOS`^+U0)0U;)9HkwK7Tkm at f1RqnF$Gy6(ocd{=Cl9<8c(3
zN_KOUV<=@!rNN=}cw1|0tFJ&Nag^mBD_|1TAS5HBiu!onI6#uXa5xF!^~2!|goDFj
z8^W9QFd at AEwZrM-5%w92bci!VLRJ`yK!N$!p$u;%|7Jbu?_vLNQNMwZs^RcKCz>A)
zU%VB~4~K2QG&mf7cLtgt4m&M`RER at OS^;O_aM*(M#ovX|C*N>5#RMFN!v>^R4Tndd
z{QB?G5e^QAtqFv<=s)0>42L=VvhTuxQ!yOo at D~n;IsC;G6!2u)$q)$MjPJW_gjWoQ
zc{A#8m#Sq#Uf>i3HH~;y3{#hfJ;S5Nxxnm_NfnylpKDH8FVEA*h*BDnsD(;GDj_+d
z06w5r2|12Ye7v^|&a}z`l6c{NNkZ9wNot}PNMhA%0#GbQ(!UqZ_+HpH94;#(L`FCs
z?~NO%(U=Dc6kl&A!`XoLPfg7H4g}H*zgMPWIQ%>GyTG!7j6gnrG%)-fcw6xV%_|5;
znSZG1h$tBoa%bQB$WIJ~Ql0byp0m<==_I~SO6i7Xi5Sui#86 at QR#FW28Wh8`hS`SQ
zh9*4c4O<PT3}4{MF{a1=@pn-8?(c%|-JdLe_xF(a-QVltcYjyJ at BaP)B^?yF)n+Gg
zK7>AEctMCa3Go9${GbqjUBEaa?IR)ni4czn at iRjF>~LD07~d_%>&1A37;hAZ%Do`Q
zo5c75F at 8{tzdoE6663W<HpUMN at j{bcPCQ_YFE+*-jqx)6DdL~)_|(4o3O)y}Wr)2G
zik~dupZWY#i_f-K4)D*lOtJSN at sle4S;Rlz&l{`faY)-M`R9M;?c<;I{PX=hP+(S;
zouK-|;wNwM&sP5Vei5FR8|TAFz8l8H;;o`bT#Tnt+$h%KyH+QDKn#cr#EHn=sQ)d%
zK-B7gy!24$d*qLo2u at +VkS5rKkWeKo6K)q42}d!sNA*8J{2GHB5&kH6#F>CP8f`oY
zxB<X=Nc=vW|1aYQ3e3#5lmFXcES`1KO@)Ow+;HO!b&o&(`1XUZzWOSLYG at eC<`lV$
zU9)ewW%l>;hK6zR0(|Dp#pnBZL&Lao`I03oet74C1$X|>yv@~*JW{>%{>6*$|Cc<B
z-|m_%TWZ$$AAZ>XuX(v~!L&s({_pb-6qq{JPW~^ZA(vGDbKdBjt+TMst2$Ha+^6#w
z5Ftjx|HeUQ#J9zE at eH0!sb4fonUYcRNp7hO-(}LP5F2~(y;u7F$p7yc=!2qDe=(@I
zK&PipIGsYoB;5wYMS7B&6J%mGbA4c<Y$rs5G`2#3Aqh(_<e>v1Q-+)?7z#VF3KkU+
zGIJ&&UN6t1w4#ELygW)5Ey9ZAqIBm@(8NdSu3cCnR#3WoH;)U#o;^G+2v0sqh~F;=
zPd$ZIu1XM|eHJTgKoDMe1*=tsD8BkCR;q=f_ at _T%<y$X`fBh at uX;2iu`ihXoMp69w
zYeM?_Me%QcBjo7Of4oJy;v at 9N1&RBwPZ5?KFUg}7STYx3om)UW^iC|33$Z-jg=O(>
zvIrCyXSWmjL#&Jskw*FmX{C>nv-B~d(JiF^e>@_+*^wv{kRSh8-;)W+($|4(LZBW%
z2^vcXsJsO##{c*isljZPNh01!!*46zDTt@@w`6Lh(sTd-NE;=Y0vRKaQE6o4T_kk{
zNl7ImM3S6N5-Ui;3S!A6=3HVDiD@)3jv|JU#4wsjBZ)MgNY at e3KtwYUClWy<!e}B`
zh%ku=KOn+wgbIX?A~b{0n+eV0JRs+Q0%Hk%iqO9idK;xrQTm^hrU<lLpj!m`D}nx}
zFw|v^BKiLt#s5RxMAIZ7$p?mz^aRXn{gWUJCSDk{QU37oW$2*%F_`k=)ND>7W>Dbz
zTu?v~h}bV_hHJ){3CaHyPZ1qLFn!CtBwa|)=0weYZN_zm|0JP=y}T7 at SuYJW$LE(J
zW2Bv&#QWnMna7jPXMts?lL!e3JezAx6z{wldbZ(qgZ?&}v++g&bE|^~bWmT7Lr at Zv
zWFnLF^vs76MuG1{nOyIvh{tb3aBR{E%*8hg-$^h)#WDS5I%z%lVLVloTs0hkl?chi
z6_d$_T8!M!t{f9-MiP>q*3R0g-+s+S6T)049Gzz;--PI5HVq}xWt4cT8B at n|a_MRo
zI!bPn0V~6a<b#y~<{xOj99lz9Rk6flRV<CyC_$F2ke>(+8kLp$xvQDdDpK1*BugGB
zMqv{Bv{#g8u$+M^_TYQzqp|c*YZbEXP~-m8+w`NrF^=zuAd;*(2U+F7AvP8u(zYT&
z=m6~4p1y<Z`FDA#gnA^BSXZAFZI6Byk(XFBp3&y>o5Me1+k0PT54|hW%!9}XvvK|Q
z;PaY9YTWen%WU5JFS9?rhs^hoIj!yZQ#4<UHiH7G<LpFJtOwY#wgYT!n at +qlyqO~;
zc4gpxP3jKJ#aOC5DfV9f5V}bh5nabt^si;5?*Q2tqO!7zWyPJ!kJwvUfa5o)Cz9BO
z{*3S$tx;aVe)&E}Jl!hlM2lU*9IVx{=tFD<PnL(1KOathkkubWvJ=VJLJgS1udr>$
zUSUt`1WR`z`DJwN7tC?A#QqC5{wPO1y at Ho^2oa7=ch3s;nog^9AChY|C*|~fzkfeF
zqIWbYAc6u(<LwY=G<MUVtZ>AWf+&3KqE<{}Iqze%LWs(W5L>0uyxr_8l*rhvC*>pY
znr04{v+#T6>^JXm1Z+*n`g{YZ8<8F2=~_1GSS`!MlcS at Z*NSW@@Dp~e?*aBo|9xx;
zo+JGvHalK^tz9Pe`&d7QFykzW35T8RWUp{kR-EkUpp(7$K5xMJC9*8 at t`E)#H}qs$
zm1+0po6p|KZhfD}Mor7kr-<G3{+%of#WQq%vt>x&w~gQ7bSE2&>|8u493m)SngBVF
z?nEh{e;#{u;7Qij?_slbiq3Q)dG3{TTIUv{X7Dr#TaTILAF-<%B|Q=32n}u_N^_`3
z2<&EewI(f3<^vHxwNYD)lWF9Hmg#z&oz^)xDTHJpcHO|U%myyE)*;GiJ8j_D#n{ly
zZ9vjRAC(V2x{np<G_^J%=_Ac-6=E+AtYzylC}poBDamUI7KM|%=Aa`?WOE?FTOOmt
z9I$wkWV6rWp_N53O6gMS*WW%O2j;#v#!mhX0w)<*&cuGkM<3*Cf#Bd1GvgYdKE&Sb
z&uCLC+l6)P<F<9|Bb`-jW<xSDMERt)w)uW?H at l~mkh__$^?d*osVpO#ILr}}Z;aHr
zKYHJl+4{aEvnLvu%UjhsV>XI3Xg?z|kgUbqFVc=Rtf_4cJJ=@DyoJa%N3c`tXwVLV
zM&}3GA8R*>kp``StYJ|Ui=tT0dK7Ec&RP$)1Xyi<PhFi``jgXNk1CIVT>Qb*+lxX@
zzYzQFfVu4v_R_IO*nXY;Mjt?iAwrI<WU~iXGH;w5dy%!i&v{?~6riKu=18>FY9&6c
zrB=I at yvS<xAxQrS8MRs+p_s9D@)K66Ge^={Bnz?M>7xhwsXVIBy#rc<wvd>^%h at hX
zpY+#w*5qRs11=g_#hk}hv1c)ptdenv0sb;r%lbi5%pfb0MEgqi>7eMLem;>$XyA?~
zs;0 at vPH^z-Sge;%)r2W}BvYT{=9!3CkMP#ag?f4jQz>b-9^8T=9C|{D9=#rd3`|;z
zNXlU`R?-g&X!&-Ma`f0mtLta1jLXq`kxOKr|89TE(Z|`dy|RB7Tccx{6wu+k80UP;
zWd@=MmP at fzjFL5k=rZ<k-y2#IS-~FVc<e@!6nh0S=|92was#6I%5+7FJ=1Gc3c|Ax
z+SY4Qma)6vU&a=L$J3ipgiIDA227&mY;EgMQwi-lAhX_sv=0%%?32q_R;v^%?dQFh
z&mfV?zN;yDQf!bcW~~E7>@N^hQtZ*e#ViLLVvV7QLovkW_Hn43GN8cKiFT6S&mqPh
z?UR*!Wj#CEU%>?6n~-Dz=V0m4$)2W15_J at kG7uqk?cXetdE at CaqL|X&>FmGyUuB;k
zP4?;Xz^PZcu^(b0?^QOwwd&`5G?QF<@{|43nHj>~=0Q|al7ZOXers4LozCVS<4exT
z3|`vmLpGM$bET~8{Zcj`L>f_rBpKyD>n~%A_`><9o{*2EYyIE#Exi_r6J>cBFFA5R
zaFntifeN*>0qKDwlCqfHtBnB#zMf<!^Pkbq(!#e!d&ZO&`HQZGtS+0?cd}curk9fL
zTC30<BK2Ckoa!-6934q5P4h3v7JRbuftHkdAG_SYp8a6(8SPvumpR+<Ue9I?LIxZY
z at z9)0ogr!`0cb`CZjj0AKaxok*!rN(+O~8vXW;cr9+V*S%LZhHbK`nu)90Y0K+iVK
zBRO|!Ij-H1x~`Z=tj8AE5+;80sS9Godd#_uQ(LY;(W1>lzBwX7Ad$_Z9b#mRgGRV8
zqIh`Ut59b0rNQFs%N`0gK~*s-IiSF$0y|M_+1<V7 at c3YsI>tlBH7SuxBrW78PyhZB
zmDeag)W#9XZ&Ky4adswd4L54UC#iXUp5ElX8eMJsszsdKeHs!t_ at vtuF$TouY3NF<
zSdiDV2&UNJHbO>WZIXfQA|2zjFM-V at 53$pwMN4az9$(6F%<M%XktfWfigm`FnqBtV
zti at 7(&uO07NUfG+GI%8Cc8QEt%45V}ylgc}5n2Evf at 5-IrfT(*`ue&zpaTi7`ITzc
z8PC9qQRkj;D&!b<s>niO(EfAo*6dE9mt08-|Fk$o1qCilwv&-=8W}TgjQW}8Y&XTI
z=?T|j&F*R_o?Tpq_sC)emCP!UsiJ5y7({aPo+fJAIEONLtZ-E_nU~M`^&@%!C{Df<
zn=2{x+9{|p>w1jJVa-DhYo%5!s1WWlbeFa9Ipl^=Y2>h$lPW7K*sprGDsmMWFJBAE
z<=@6P$Sb67#q?{<K|OPBiWHFwWeppQH}`#WIiwi+QbWH$&XO*Vb<~*#wDJ(M^}49s
zQ63BVc$vy#ml9yBdw3Y7DN3ihsI`N`6LKdi#J-%-IEO*yW|til_-u-uRJC8l?zb!C
zl2<%xGfp{v8sql_hQyx$&Cf&p#3*&Fg?zTh1WJ9-@*v}$6(2+H<V*caj7li at 2Tf|a
z93-(6DWRJZ43PP^8!A1YX$Qh|90?v*JZ(~eDe@*e-z$ed)d(T>kk+623$~(<LYvl1
zE23|*|L7$SU*tZlx=xgqqP$$a)=vZPvfv$xRFKJ2tT!w4o0`DyFA;hNMAqIxo<<rI
zHqw2CB at 1kpY3o^?o at U;Na at B<;zipYz6&Xi!(A8y<vm!J$z4wEb5>H;(2<DMMfj>^Q
zlLA9zylMzIm6zEP&90K*c6WAUTo<9KG0{Ayix|d4LUTq%pmSK#)Hm6Vo>-X5!yr)C
zsB$!FfGkycnW<iLU}|}xzuhpZ<DJVSB`s3m32kgQj_BYmjL{~mzhEz*>-o_npfNtm
zQ**T(l@^Eyzr?<dH;3C$FCns|>!W}vlFe0-u+7uV9*@7oK8UC5 at w>toP0%9bV;B2>
zUg&oj1VG=<7C{1i(<#!0)+8=r64X at B4)$_fQe4<MtY;rU(yV7E29l7vD^47L0|h#q
zb`s%hX8&{;xN$`BCFUu?*6kj=zd_myVDUvWWm5l)O#16MyU+IN(ATrxK1q3lkpW-$
z4fewUPg}bDGJCk+5jM(iu%3R&OQEcNC)+MUFT4tH5L%6>F6lE=JSBQ*w~GvEPhQ><
zCKZ;8!zhyO9qBRqxClr;iYVX6lwb3VwC4Qr!3UxF0?;Q&KE7#ITfMf+y3=Uru*YN?
zLYPZFE&)aAxTqH)`Q~W7mX%8LrKnZgHMR%^X at Ki%pg?4roh(LY3-r0XJ}G%<sd$q)
z`pse2c%qW=tJopU+O~?R8hMM1YtSZ;X^QB`jwH!zST{7F3Gzt~op{14_=PSi2tMjh
zi?o-f7E at nVxM@>>m1#{&IUxeB18n?zE1A?s$9>wFEPvKn6bn^%W5leR(d^q`ows$W
zaon4PI;26W6dj&#RFahZU|cp{wwY+Y5G_<H+1>rW at +SD*F|r`R_onw~m=@d`5eiBp
zV!>Szso;T#p`a at IEKsEmf5fS*WX}&0$8v-)!HW*C*N;sM(upIYaZupjr`w4mDPjp8
z54T?xQ_cCtD5f*S*!kY}mN<JizKYH03x=VY_BFc`qib0DfGf<wtYK;I?8OL%VEnq&
zIRtuDrzJ at 8r$_RGG=FMz2;L+e9<}GH9Pz1r*03ZWViS65!OI-ZA=cc=%a4i19it*!
zAa;0ad&^IBSV=l83x{PjI}A}`H|w1sv4`G4IjCjX2S#vyFUVQvT at T)VWbjv4CZ$$;
z=+bJh*~hh&weO(-C#9&Em3V$vgyh7>lgkRNnm<MX1wNbs?Y_HMx;H=Z>@t13L1J=m
zzTXuK5!zi#>#EOmex|Med`&DPX+-x{YVjv^7g29ZaVF_V%skf;cGI(Clo84T+o=}A
z#IH^}{7 at mt6V+`P+Ju6XWKxQr@<IKxFdZ?Di9vByRWq$uB5z`Oh!ARTVg$StAqUv%
zLBnMmQcR%Mzx7c&r`j`pM1OzOI|uZUA1v{}kmfJ;9)SK`<N-p?<5xqewc6d*XEcYk
zR{Noq_;0!0x7>Q;o9ydeUwD=$-AN#oOdU>t)AAd${Aj(c_f7VLzI3h+9G__iQ_B!W
zhX&L-^48KFm%}b{K>HATnFux}J%jt}=(ruklC_3C&|ltFK~8F)kRp0r$6 at V5Ye-*%
zE?=R2X{d9O2=Zuk2;EzT(VjKjjjCQE&+6oLn*07yo?yFihNwZ(_SXQF^E+{XIoPmm
z8WsymUopv~`N3qO+mj?&-|RL*lFWv3Rfl)$%Vx5uDw*s?xE2pdxQR6Gng%g4qTc$Q
z7>Tod=$#XvLxL50;H&I|!8g!#>aaxPY<xeL14nPbEHFg&uO1RvB=*Br&N|L^y-pJ9
z)W%7H8RbXy6NeO$_^Nm<luE&2b&wyeXuC>pH|a}Mv3ai_7GLgb!>zu~=JqzT8+-kb
zm&wCzf7|B_r+aGt-sptZ2CbAx4hSm1FB*m~(p#sea at 3QQ*V)QGQjipFW}~oZnj>*`
zwvVG@{2n at l90o$40HOY`zeDN_t<oVRDvviy%G2Nz={50k1*v8q^yP!)L4jZ2XeV{<
zJg7}MrzVsRDNYNZj?vt0u1t4EB)1eXYtH85E*hgm_EN|A$f$`4{(?x(wUChDt7eA2
z>r1KMGd<OpniZ-u`!awOdD`Wt^-Y_ELu=T;K&2uaT*J-`n4P;FBTuD(iNEWmvDtcz
zLlYuyK>M#wcg!W6>CC}*v~vxcrxC0wHND-PT<7v&nc(`DAM_4v)yH~vS~3~S6-%F4
z;WO<usvsqBBx^n<qhm(I=FKXz1apFS6t8C=16VvK-!H1Pn~ZeXGOKfgjc!n&<tA9k
zPLJ}?JQ^IuwI7XMpAH$4?o9{^fsq~|IC3a;Qd+6iml%|~i$yVD^;=6V!8C}nfXiAE
z&v}`VqkK2>5|+(_c=q9G#N)@Z`a0gtcwWR)iTGi>Tk$-PN2IPVb({?l_vQp*|2g}?
z0I`D^&OM_=<h>@+LB_shGDZGeyw_xiilu46dN(;m+9)Jq;8=kU!s8eT4ZD=s7x<5N
z9~Xu0ZQ at URGMwAoBhK#&52pxwk&@OU75paCnz;>@1#h;XdTk>>fj0{6B>%6Uj>sp`
zWV@$@Q?jB85MxI&%Wn?ubdQb1C(<a%zdkaiY*v8ew0E}~gOGMx#Vr4i!gqux`%AQ(
z3ex>JK^nQ<-(H#F6V!!T4ivlvHsi#LpT_v4Y6VD>m#;DaK)imwh8Vo<l?2*=xg??q
z&<RxVa4jZwz`{v0C|p3D$(Q2g+nVEc^0aZEH{9c$7yO-H=oZt`{CiDfJCZ8X)Ni~=
ze!G8%De;VX;^<Q+x=&ErT|=er<Ipv$M(!{rbx2nxr?+1<*rgZSvFjrf_Fp!dY5m(-
zKT-!}P~hM!J25q5VR>pA7P9Jy$L5;z$oW8Uv}0-XZB1w<IRRT43u-kAZEVmA?!X$6
z0JU*4`D4~NL-%%)u36;;b26gFefi;2UP~nu9O|_h)QH!DZn`M_=HIF%bhBAA$@k8Y
zqQ)GlF~DMjv9|z?uFl@>J{xUsAs`4!QK at l@P4FMrs2r->uNfeX3#gu_S)2YI2DB#4
z)cpN;NVC-QxXacK3r_*fb_l1rlr5m6HJW&^o6!B2so7Z4dYPu|JpWXfs8o&1TRRP)
zz{@w=2|B`&bZ;!3BSbH at koqq=Imj)xKX;PGwOH0l9vC&Wko~Nz$=}-ci{KZ*R{Fwx
z(rrwoSEi*plyz)Y+|d1mm1dp1B;0{?gzQTjyyVI>tJ%j at SH5)L`y#+NkL;P}-ta-)
zd4IG;>ZYmV!pT0vj^vu{8zr^;8kv*qBjb{5_N<k<h13r={(h~nDPf(kiB7aco3&(l
zXXwPH(sjb-o$H#lRPs?MBj~ba1e{>Ad#?d_?8s-D`gzF)GXB3|r6JhhQ-6N=MJVmw
z>?iSU^kIKDE>-<+SRM_%65|$<7jFRtLTMwbZgCqU?-q|-Ax1}6Cj=K{Cj>Y_U(^I_
z>n@$<tQ at 1Iqlfr1q>#Lt=BE{_QRpy2VW#TuHB!IWJ2-)i-{XHrnVdys(ku4msE%MH
z{LbZpl*EW<jwSkxc8j%Wjv?x|k>`Yc0Y(O)cixb!UR-7EN=y;3^B71dQg2cUlqB^j
zn8JDJQQNmIil+wq?z5*kq-ha1Vo$jzpIY%&En2PBZV7$9>bka&p9Z})8u)yb&sNlx
zNIzfB+gQ&UG~v0{%R-9KZK0M(>t!*;h;KuR3E##PP+;F|oE=BZs&qM(pbFmEc&}%h
zw0D#W#nAl37b4wDZycj{eF+&~uXnpVW=tgNZ<Jhbd;%G_+rLxE8|rjVrYZ*yhT~I5
zMqP7KqYdaXX{>Q4MekL7Hi}N~8F03#=&%JHo~n#jjH+uUH!wU0QLx>up62g6lqcK?
zr*03&Ryn({t6wffoq;;u!E73knhUv7_;ZmiItip=N2K{Am*&0ZAFHHg?RMEzLM}p{
z*dQa at AXE4bXD^W8D5M7O2uD}hVZqp690kxZfkS>!py3C0G9vhB_K1LM`hB)fTMh+x
zxi9KNz9=I at XZ^W7<uwX4c;it&c7Eo(EHZACims7Rn;dM0X<@4)F}gAM`6_cSJb>KT
zE9NY<d9X>h4-|%Z_gb;n{Ni++PlYEgw)A0E{RgcYf?d2<BcUD53vDK46co!#O3|F_
zqS#!MQYA$-VEW#&_-QS*UF=E{M=s1=?A<JOQ89NRxlBoWOSAi{)6*5Z;!$R)8K;Vs
zQl$_ZwF?78E>#lL{EU%{Z{Iw_HB>LrmAjDhbdlnkbNO at vYGtd5r~wK*b*r5eK_`5J
z{cd1}BE43m7&te?UhX4unIgUM-aNB<^Wyx)39ihAIrz at e0X4g?oo at 9`SN!Pc;eHF3
zq}xRLoN(iHoM=~<)F@#O8Gn;f>)(f6eqNU75KnOn3*XA_)3^nJCYl_hBj)o>mjz;Q
zJap=_izJqmG-8C6q&tj}QBZnDJ8p at Lb=(uBsvv_mWujW;tqPGH>T{l2KOYF2Y7e%B
zF&Hx4x6_>#bz>M3^<lt9r`t?IwjAXSCC=`M%Wa9hhM2K<ZkPJwA)ecTskF!a-=M(G
z+wA1DxjO+g1+vzVvcEfl7R~w3^J7&q?lVo=ItI-={r6^)qm2;M-!){6<S2sOf=<Ml
zJ?_y*{HvBm$c{bkznpd|vy{3{-t_S?#^RLXZ!!8gWtqt&QNgm5TID(6cLjxRSUCLc
zCK}05&VDhd?`ca{qEPI}gY#?A;n)0C!L%%pYy?$AWkj#^?XQAXH9fdE4DNQVm}81|
zth&K1MMm_B*W}`&t_#&e%>1tVOP!Su3eA8v`I1(i0s|3N#c_9d>Xe<}xE;!IJ`1+H
z?8Fs(W2{Yqs$>-=36a5x2FQiMiN+}LyG&GtmSn<F+^2(JW9_L7(6lv9>USyT;)f#d
zXF1ivVCXHE?Vx+|d7(hU?$m@`>ZnMz8VrWA4Gz<}6ok at Yw;T(*<tRs5)DC8iv;IL>
zm)Ts at m5^XT{%D7BI6XFKL^mv!F<8a&GrigKTTCT%@+W{T0Ja%$b3MmFIgTya;W8Q3
zvEPexOq2geo}bi}Ky$my#9W*f$?Y<dNnI9dE>4OhtK_)^h)HvofIKNW8Wac>fdZDU
zL}D!FhSjG!<MJMiRl=F;VWiF-%vs4Je?&w?<Y7dbsEQch<C$&;MdhZ;M)HSC!h&@e
zPOhn(G8)ee%Kv_0NFu$!w=P*Dz(>{LQrlK{;`wDk^TdRRWuiIa%5-I~u(?{2N~q)O
z^Km(RVR9Ckz-7%Cbz*RD7%K<13L~O&(3QQ_op63#@DgN=2w5XV_S^in0L#Gk!ga$I
zTfC(?_=Nky>GPe1%99sFdO+B08yfdv3=_IN$=teX;>2sy2b=gqMtTMm*yOg8L3v!K
zL5?$ZaGOG&HW#mrypgpK3)w}CZN;1g=l#LBqa=EMX!ebt1!-RgedZRcA>SFzhlH+k
z7o2|qCfa%&;eDo+ZA(<`8S{cWw~Tbn3*=|)2&THsm|$EG*@HFi*x48KiNw1)Bs`NN
zIl&LSK6L5rUb)TO3onLZs*Z-%;_Xs5xMuPN at iQ%U;svY|kGtPLJqrBs8pNbGyS%ri
z*HH2f^qgOuKm0vj2pLTsoD)nWS08;7xSH%UbtRfCU6cSi2K$#^#N|Vvz at x=>f(7qI
z;f1UrswHER8ZZ)szU<k7`NFC8i_1on&UStm=r$-fd|?E^%7+Q|2nbd>Ot4n>To7!u
zV|MhX!vvcOf>r1QGv<#UCRon*2v)H5|BPT%u6Oa3CMWoqPOJ&N*0;VR&V}PdO;m>n
z^jn=kvoL|mTMQ+1YRmcR?~%p at Yb7U*1*A#9!~g}VORyS7QdDj`c47XNcBvcHPVyX|
z7zteh3UPX6gI+ce>I?dIwmt=x{8V|Mw7q4gLSY}S2t at s494FBfrM@T8N&T1JBAc9H
z0SEaMkDv-Lx6$znJrPYL^*xj}x_|Jerxmkw>zR9?b;Q~J0h1EPW{wujhzzAH9*jFC
zMQHBL%5c0l?#PWmG}n+k^W}7Nxw1&hlX+hK+_=LQX~V&Q>C}dx<|k^3O1g1|w=o!A
zVY|>G6<j*4r|W4HTk0(Es{O*Cqc7qF1*+!QiIR2U`$euqxQg-@%=syeV~3_Z8D~=J
zprGa5Zc^P4 at iMU98aEX47Gl9#tc?yO8x+brfeNz6dIYn~L_1z*?S0pI$OZyI$Pa_!
z?EQDR_2K3}qnPzbI&^GDcz;mJ5xQ$q*Rg>f)t?dmJZPco80(QMGs3PblaYS8hsbik
z7m%xY<-!aZyDUI0Y_nk78ZsF=aI)_wFb02TBK?O9;`Uu`>*X2}%nfCz8aOgSF(~QE
zTkcWkxV8LY#ZD$AMdCSDy9`Tp{=jsc9ZHvz2;cawWB>K8BPa*_L0=#)tAYAJ04SUg
z9tWVwmst5$cm!ue4r>+G!`kg6IrAAeIX6milpH`zt~!K}ykhA}>9Q3H07)SAceK^8
z*?k!p0)xI8lPi78PHF{BXSBSKbos8tAF7A7GON0BMCO}-G)388X}+9fDlAF#Pglf!
zjdMk8e-;vFSY0_?Iey(DrGf2 at o1vZEMI7Ht3&hoxZ(Q#zQI~OO5K>W>Qp5UsrORf@
zLsxovn^0BRx4odivblD0HhfacYq~$oyK$)7U}@?$z~;p}!9(&2wGugUjsINu_^y99
zW^^3CN<})!2<gJRfK9^WSE65bZrk-!w{&io$sFY&!)bfWN{?^b>aVG+pW9S<d{>bk
zmw|TQfJX^+5)4WMJ!#j)Pq9Smlrc({k{t0>5=UZW9lH%DPU<c$(|ncr$}{Y&CgR)*
zEAloX7Z$$(O>2)PROI at _oJz%|G|r`puW}-wHw-SV{HQXlW4vF-ICU6fLC5T$a0CVJ
z_t?qzP<3LPXX$Y$zsDSSU}4VC9FWKeD6Mit-L=u%ezk^7)2yWFo50fetkIDMEe{sy
zw5YE#6kZ48xe0i1eD`V`pJ~A8i$PtJFIvac)*+K}DpE~grg!L at e{Z3E7a$w&(EEQo
ztlAscoBakHk>ATc?XL?j at sREhP4}{n{=&EJ2g_Tpxl(+U&03i+ArhN1@|;siQ+fP$
zE40(126p~fa0*2#Opx+HcjBqw6yw?8IFlMfOga at q-VMl$jq`y5i at bJHIYO^q=9`VI
zX~>#wKZJrj#tY6K$Gdd1-lbW(t-67IeGE-u!`n|+<PMR^K-zcR%n4-t5SwF|Osuei
znEn>=V at SW$yEM69BAt<`9=Kh0e`vgy{ixsf*5u*t_<45%Vk9;->0F_bs0OD}ym<$j
zcn7AU19`jyO}qoho6S3r=dZMbn4NKdWsXklTLv9Ee)qDz*8kEjSnGtu4k+X5bid2i
z+`TZR_q6>QvHn)OKwj<~Y7rE;v(!#z1LQ2d<NJBXhZ~rk$HBil41S2V$vD+MJWVEM
z>kVWPTypqfI1X<X=W)SS#eSj at DD@PFf?r`Utgclo^!|_!N1YHv8R$_<=Af_H?UM4u
z?ju^6OjhnvKDk<B9<2}v^y%Kuv`?BWb-Rq^u~XD?=8qb2&S-nrbYF_SSG at XZ@$)82
zgvZXoXem-C6czzaTXXcu5&QX)uH8#-I}>DY;7sCOoVsO2T8*URQR`Umajkjp=ex2?
zk6*2!cPxI=W%G{kUGKH at nq#2A?epx!Jj?8ZwbI=ml~;1KlANQxFR_7M6Ig at TF*vfk
zGRgT88{KDL2_r^Doe!vyjIfMYdr^(AR+~^?S;cF5l+=>S74LNBuS#-$ftk)dCAr%G
zsh>s)uxT~#nMQ(7aw})y=5bss8*qw2$Jc8wlOtN9>(EA*h2$t~8V-0Y5m#LkY=V+9
zaid*vD)ZS3J&^U7Ja;#vDz|+T`$%~Un>sMap6!{5V+no=I|C<AGrZinYKHgtr3A7Y
zieoi<zBdEMJXY6E_Hiqf?_nSJ9 at Z>`*r$O4-ZDF36EvPpW52~|9DM$V;3wqVWlxf)
zF{efqvopuvt_kuod>iGQ9qt-l!3?j5W>ncY1yyc6LM~e*!tEvXLj4&m`~=@7LhBD}
ziR2B<Oh#cVS;sz)+c#N^W6q>IMx9RaCgfPMRNERh3VlwBs89=64AiqZ{c^aTt?E~8
zads at egZ;es)?;b1zxvi=+z*WVgK at 95j3Ul}=?BpGI8TlLgl4q1<2wN+M=X4YksLUZ
zQ#L{YUWWaZ)56W at G+*J8>~PR~-{z at i`P`4FWWJpoVtf0p_q?(c7A`3R88}Iho%+I8
z at U;$yJGqR;$*fg#w2|CQ<vK->2bt8vSI(gm!L95rxTxGbdIE2jlVX&zl|4S_hbmx-
z=45 at YTa{tTK(#MhxmDS^RVLT|hO-YW*2}k3bmgHkR3180;s8b{^$MqmCEgxBUU~fL
zNh;-!jF`|L2Mw@!@usj=33L6KLjP`@=sCl){D~N at N3}wKHM91*As2>Z!e+Mqm|Vvv
zaT<Ca#DLxS=HDCQw&L4vhepI(9HWGGi1q*+&79$zzgNHEy`lO7>Mue4*Qq)L0FDyL
z${=eSERUHiT-D0=*Jy@%wDp9%A<fRp1&8^pcxu^(TY}HI#Z!*9mp0Og!a0Y(sQSy!
zDgMv2_HD6hc|&2CI<AWda4`8L`+dAHn5lM^`ZlD&BFwkV8R2~Y7}-;Ox)Yu&<Yw5)
z|NE4TR$m+xRQ~>8a8{7#m@}Pg9ex)G{$5nx5Ub|6(E3)aXw9_FF}$Sd_&&(-HB-l2
zluMfc3fx?7hoh4DtZ>S{NywMZep0%0Lt5}@w}=zKxz*@S%@pWu)G;z5Kvey>`kPL9
zQ=$Tkv9LdjU_{>@9CYMG1{|r;AyohRFZs53+;I+iF)w?6d<e<Y!$=<X0L>8bzvU%C
zOOSWs!%m%yp%XxTkj~84QP)XL#t*U)!^B>V`p~#f?GJvO{U0smu{85X(7;EY-5(V4
zt)~UY=(9f??uF%);7B=TonkmEOi7GLQ!Ekd6w}a9g=ThMHuZo4H&ob3^ilI)I;Z-b
zL!*I1p(iv$XhNqNT)shc!1e92k(weRx}c!D)6iWZay<+;-vV7eK573{(x8|81=RZA
zLuC?V4Y^AJXQZC~=fNQ&oIocujMR at g5$cKm(P1JKuI>Ipkh_KmQU6yc+8UiQ@%v-A
zcfd4(I#x$>H}I|tlT2ruf}%q at z5MS(H$=oqo$c8tTGZeazY#jQ3C4-#Fp}qn=_GqZ
zm^3{yTRm+OBA|ft4m)`q9Uk4ez-)jpN>q#v-sQxI5nVnrFzC1$T{cE0z^t}EOOmf)
zAAM!G>-}FC90`A~VbN<$L)Y6Q*5T6MqBLp%1&)Ss*xF?P<Q2oDctht0hkurLZr~;l
z4&VK7NC!9k#}}Lj{~aV~q&btgblKg^C+qJu2X<<P at q2KZut%dlHMm+a<HV0!*`(yO
zF=K2tTfSG`U=Hko7&gi%Lq at 9!hxkrr_F(F8XxCuUPzV&5v;b?t`9afg*21`;rlFdF
zB<v&k3Gfqrnmrp&Xe`=5!%E;F{EMCJ=7FT<z%g^7lYQ0S19rXrZD5Ffj&cV}>>UAD
zUvoIwL+a!j57s9!s;(8WQpxLx>|4i`gKn&f+?;z2PYh2N9`3ku6kfUuAs1n9q at -YI
z*wJTd*yP%D`v&XUXR6z;7SVKghf~uZs>OUmBp-ewsd9xrSJUL)PH8ed^{|(!4|y$F
zzciJ1ovupo$8*Krq^r*rlisA5wb)l`_F4VqUE9U-SPG at R+^cr{opy3rhS|XCdm=^!
zZWnMUPqCZ&CxrPsum8gqQRQ;=DQ4~eq8i<({usS3cosP7Qr|!}3HEd)+#N{~&N_il
z;Mh|vsb8(W7;Msu^Cf)ZdnnGA at U`rBeRE1rX(Tm0Tyza*<SMi at dIE92ysl;M!%6G*
z3p#8rXxFm0`)0$r?zGkb$0Z7<C859=v8Xvf)u_5-q97tH;37px$hj7<CWpy4A^A6O
zNao9)8TFq7z=A20dFzwP3d2NR0#_>;?h#nHar_Mm*cU<y`(-_WBf*P|g2*qqTdyT4
zIXFDMH%upvfgz8=E^;&uDv^cZ``Mv>i)x20GtOG#Luc=&I`3y6_YZ{|I{8+1^s at ky
z?iDtDw0YUp$E_c&=SO#c0149%A|u7qzL_V~gH#~hTqsJdNDdsaIMbC6g1^~FH at LGL
z$^d%_CU75UOE5{MlR7*^z5z?>4TRs+9#RYr(l1drcEnz0pJ(^GGoEt`r_3d?FLtb@
z at 9Jf-FIAR(207dpyP8>A;ir8fsqpbLBimh|fJsUBn|jGN1#tRH&ltDy>x}VhUA9!m
zRUE#-qg1qQnHgTZYd73QmTaTyip<5^TsE@<c6ao^Ws01^K0TNbws?fPgc2cS2F+4S
zXdrg%OfC++FH&;GH-zTi at lcrXlp!6AQ9osfG0199IKA|+_JY-Qr8+k)cyI9?#cSD`
zo*`0}v0FgOTi+fo{8P54SB8<k9Xga18?%>5yD_N)9`RRCk_0FpGWNeW^~mtWvATRL
z<*4=8O;F=S>WS$9xN6ZpEeywe;Ymv!KQkJ0x1CI+kwht_!!j>5?>_(an+|v1nIc9~
zU at YDtNgc$$jXB|?W<8dRM^|%o{AbUc%JH|9$##pUk&W#!d)6{9u=cb0a8TXNw)7di
zyWs54=l)0Mp!<Lf2l0HllWWDBt57|Fd0~W)Sc7(iw41pxDsW873BgjagW3Ai=ZiSb
z^83jq_&W-tRK1tfoSzsS;kDFR45=MNN;xC at 1MH`R53p0P*8BZQxkIJL0LH^?`2g1%
zcCsJ#bA6hS1Hhd30B$B1(0r<g`;esl&<-p5rKD8OgQZ{VXpx+h`Bo)WxifcOu>q&?
z=PSPu5;}gWJ at 1pI7$YaIo|Mc5Li8<d1zBM8+7k1-KBW_hjy`q^P*weI-iSQY3CC>M
zi$a^^wq5M^1Lm**8gg3VmiB$T$bZlZlnEU90X!Z;n^v>m59a$neq=Sf1MgY4&zkqN
z_LY1h{IvF0`MI{6%A(pwa-Kg2=bKM!4X!++<;=`rliPT9nrC_$@#p#FVgV;uF9eCY
zIEXsfxMVEG&f=V;z<rmS{5#GEqgp$0*+xg|(Au+T1r$hL1bskjx2|UP!CWtN*iR?o
za4haTfugrze<7-7Si$%PB at lFl=M)&D4nM!uP{weTI-G+2qr+dxoIUWq2yWMA5-#_w
znbY{>C-4;Degd4fw~t2>7ljYAt8q^oze*8cqqTbNC1S=>&B;RX#2%4JJJtke9(Gfh
zE{B~mDL}Xo1DAofj3*f2#JeB`0Ff)vl2Ws&{F;(s{)YcFLlHb*L$t{E1Ul_(d)!m6
zIf*sAn#HtWnDeKhhk!l&?Ct&rZK*W`3YhP)la`&Z<R_nXWj at i8sy1zEWT$%hcd!rB
z(hkR`Sa)ZGwoKmXu0Fffz2>Zd6XIIU=W7BTErTH&zdBOW(xBZ3b2%(#WbU`|wdPFw
z9&;wo3ANN at KkX)`1-TX9g^F+cPt>M8uJE#XIsWVY&$%s8AH3DmVC|Flpu{PY^6>U5
zHD}K|2#-M+5M?oUN9OOw(C)OgIk6OBN9G>1w#+KzTOwkw;c|nvNZ!#h{jF(T_)&z2
zQ>F4jSFN_lSJPrsOG_KHdkFVDNk7$~-3#@Xoc;+2BEom=9&iIFAl_>ywTR$SLo{8x
zH^pVcjDaqkp>iNZmbzWS-aXU01Ocw?Hml>?(^hCfAOO4 at d_)+Jd;)*ywV^#}D&Kxo
zv9s at Uv}o}gwz?KWEXBZMJ6h`9)<{k9h{)TvU%S6PyL1nTn?w7AScA4$c89&TrQ377
z2KCqI_N~f8+rRD{i>Yod84G_N>GIvuSzL2jx)B?TZtFA}vl0ketmiH);_2Gm*IB|L
zq>X}yWln6YAQUI~MtbUdjARRYwU^jmWt{^J+7Gc8u3|?AR<jj7#IYwjU2a;xvy;n#
zK~R8HV6Vw%<^?bvXSlEMzJe!)Ckc*AuRlJG%+n=^Co*G5fF;jg%~*e^C4cv7wqW4%
zUCrG^Dbl&7P1d%9o2NjBtVRn4%#2#C7&D_mn at gJ3b7AxXn$ZAOqzlq#a!?bz<KXQ?
z^0OjlC(ZeM*H%}qC$;$VZJd3ljB5<ry at z{jgnP*w&%4}kQ9s|H-H4k_254&!Kxrio
z5_tunn|58pBD-vv4m7Qd=4^F+zKf3!2S)5gwJDw{<2ca9 at Q8na1O<BTvy=Y?@|*tz
zc?j{bkffYWvc48vpzV5N5++qf9~n=_Eebygzb+$OiC<tx;KKX@`(~h4yRRZ}j8DA3
zz!|RxSbx6j1@`IypFx}Z_gAiFwEy#6J8<ljbe7kk{f}YT^~YoIt!8)j{{(S9!y3c)
zVH59#y at 2AhURLg7)3w5IgSLjq;acsH3R!ucZSF&RD7}hYgs5>qxl7g!nQ*YNwqF&<
z at vDM<Z>~Yh$9zZxHlV<@#ddNZOZgwb?!lECu2;Q)JA-gtZMuOAvL&AT%L;NN-veG*
zd4he_`>QKgiO<J1pI+e|l;DEtUhhtL?pgdK|FP&IE{Looe?ue!VS8O$1WuR4u`!}<
zqK+R&nsyM!daQ(%m{5MJEAzK4oGyKE!CcLHdLTp0O_eSp)T^7E=#P^W5utH4E9nvH
z$vE+u25sVS$}K&=zhpEtZ89HP%?A7M{-vM at 2>%4qjE9W~|G4*0mjue4^8a+nh_^)5
zUH;-CJ`4VKKV|^{U*ALOhY}^k(tF5wsXkMc4*4-KulE+dC0(8<HEpm5%_ZesF3M{N
zsL`|`U7L8Fxdivzk<z2_6F#Y)qYDJB<`VpbiyA0yb^q}kKZFq`zXug7p_$7W!R}I4
zv$`ItkVcnzHA{no<d>h4#v&zTb`e1DbD1x}&eo3=!8}1GO*R~T;5mTj%gu03N80Rt
z=D$y1IHWso!gX4&bJ(NvBU*^~&|)#!Td&<sEMw<naBl2C=ZHgAtPwv01-c%vlR15K
zf;l`jK-4LLrm7d&=(vjSYlC1ZT`Kz7^L@==xcf*(TT at j%Jhm&^?qkb(y=>1QPQ}2I
z_c9^Q8Ibc$tOyL+%A4ANUj28(5e)rPT at UJ(pzfN#*S#<}1ykofTs`2e|JR^e#i6{&
z-hy2=9U>|Ty%p*2Xg|6XJ8~5&r!aAGRI-!2@@u~%bVa+?T;#QxaUJJ4E?5fmxKCOU
z(WC{JyeSjr1<Sj(B_(b!^(KA$Jo&ln*5V_ at PX^037!gMd6!_~BJ1L%0ECCEz_8Wh0
zOb~wq$H||W4J(wYpP9ZI0p%bmsn@{XD^8v8E7wiMb5}?!++E_x;%lMh?OMk4kAu6+
z;)*#{yG);sNa_{)h4JIMk_<1prW7lBNty~L*=g;XEe*Ea)OJlyqxN<!FD-_-v+zVA
zpIlqn)c!bYjJJD^dr6M4G|^uibBT$*_q-oherz1oLG3lwN9UcWc5loKkd1Qq9gk4y
zzDAY_ONS^B(L%W9CDV4i^(jfyX6eJfq!|!?XI$Iy`t7fk!YH-(&GOH*=9fOxT3b+4
zBIEeEq3W}frHyY1<3|U!!r%KGEKXb5oqb!umT`7heB6pNnoV$B3k6Q%U09iT*$Eo~
z at f9xJso|F#CQJy-z2dC+C8TrW<wn at A2^jcd&nuya0<J56cF8rhnx|s!mD`CAA#b2S
zjd#+RiPkHrXzloLYc{m at X>Xim$GN at B1l?Z6Rt+5K<8KM?AuQx!EUGu6ZL4!*M!2xj
zrQ@<ob5?+Dmh58p at N<lx!+2}HnJ+Zxr-9`7D-TuvXx{by=Y at hZJA{cHA;HlBo43`!
zv;Y+Nbg7-J#yH=o!ja_zP4zXI(mOhErtpDw!DqepSUHK%oMrl8h#l}b=y1mbAv4VF
zdRv)iK*a^x4>Wmclm5<I%7y1v=EeBl`k0PGP4Hy!-ue1i<>M4N-x?KE@`%Hiq`DsQ
z`*@>uY at gO-k~;kU_Ny*yoK1}n8O7UaD<JTRTr!{J%_%>)VY~u3=JxQ#4cr&uVzr2~
zsyC~@uGT7XAG71E=9Ast1m9U`>mFYSccX-yRBT<hvi^Qv;)V`Kr6+u7<INs8-9ei;
zw6<QG0Sf$K8TvAadxUS++z9QQ?^T=JIgx7iY=6FA!ZzF<bJ3!%t*QCGk2D{4 at v)+6
zw)<$kHdChX8Kkj8JJQ1D;)69*ttmcKb8v^3z20wjoIOYL{?LiiHL%UDzXi9y;mA#3
z?9KE(tuGHFB5CkIg%Kv2Sqhs6Nrg6RMMK1z;kEjPZr7}Q6%}#+&tDP#)s?U8)Hi}F
zJ=aKDg6~&Xew|vg^jBBrSglws19LY)K)N6@>hZQhbCLMUeH)H+5a%m+9o~oWaCPJ;
z-c?Yqhi_g-m&2bB9{aUO#!+F?>|}DEr~F!|n)s=Y`tI at E>)q;4SiW`T&gF~do$zP+
z7R?hXGkrgt=hnZs;`{D-C-iS&Wv0))GQqddi)&53g}DE1AHM&szk#Pn|41J~3;d+y
zO%~P4(7WO?61$Da%e|h$Lbz02-A+qWabbw4%jiTY8p0hxm(Ar?m)+{AaPoZ7dBQ5k
z%yj8;o?jC)>G{6pZ`dxjz)(V`d0GpfVb$@eUW$!rfrqXtis5HPmUE*}4ZdxZ`lkN<
zZaR42lNELXUw4kGFV8#o%5h@$<$BAnwY$u|9Qeu4gT_nYNs;3RBTS>dvD~4*)E?VH
z(~u(2BCrVcU56SUpa$O;8E5|heME29-ikn~H(^zZXRFT&<^P0l=c=vCMj#|C<=^h5
z$@t!?f1g;I#M75q{6)(W;gehhf)NtA9+$5$v>%Zb<S6ywre_i9$8*tGL>A%gz;gj%
zKAb19qr#EJ>u9vMH0}`2PsagoU~b%A-*@@)irhuT$Gd56ec#nsi}sO|=S|mAt)Ref
zAGDM9%oc5M+I1!75{`Hi{WE~@`A6(u&P%|t)(Ff$GPi5K&2Ltx`X>3O_ at 0-ZPs%JI
z*eQ5z`{6&)gaZLNv!xF|j;0d1{MyE94}S2BZ>n5b2^@tOzp~Wy4RJMn^JjRXhe&x>
zh`6s<t9f1rdfe1a=^3y@`{hKK5?ydOj}E00?xXF>pdBtZ{#u46R^el}a!!(9$97Q6
zNRq7VV-LoSFo(Vxr^JGj+I{Sm_ at lObCDyW!Ey7YglW^+;>@qE=%6F;nqcu)}6A$6^
zd@#ilIp%o+zgdwHE-5aT5BJ5cNo_O_S_A52o<*HjZ1i1qadt6&#2X?Nv-WH40?!P7
ztpi-ea^i(;%h)?`Ufjky;^wv|*sptEFRPe+SUVv&!%dedepZDf9YD+yIS5_x7UD8p
z-|<ozY<A`mQH%N#HWAzg$4hYg&J*m;_kIq8tIK5WpgCClA=0vS3m?@je319cZsTMi
z<5scG!Jncje>h#<$4dL2V9Wb{>ank;<EU at x>LTA^ZIPAMEMseMWq2RU93bisV5->1
z=ENI7fnyKjhQ;6TivdrtAM|b?#?0EWMaN8x*8B?&e;MFbMveog=gntz95#9$E&K6&
zQg`5Th2(<s43$OI4{9xmhv13PE<6HiyUYS~Bfh}$F7nF85w4-x5)rKk;U>XcGC@*q
zg$dynT!#E{q>3eDFR>1K^K at wOYa$QnoBhJ at g8(PD{TplPZ~n%%WjVHE!l5em+d-jm
z$$TqrX5;kQ0jEaCh=}MIgQbVsg~nvn;TQM0vTEGMQ^G!I$JPW at Xw-Mdt$xfNRY0LC
zSa?Z24m7g#`!P_cE0ro%G2q8{`Jh4hOuGnucRKk at OR70^S+MwV1zWIkuUT`+LAP-B
z2<E_VTgbTbm|#(`Nv}oO1~4D|bqC*I1A{0{8Z}YouB+QJ==j8vU%ER_P0CCx$;ABQ
zGstE8 at 6KCQUWYUHK9&XJL%S~CCV8G=w+$$Ii-3U^y-+*Icv0n0z3k7h&h2A&4)VIU
zI}GR0cD<}@VK)qjD%Z!4xlf;N&}Ktu^7{v~Q6}LW?+dq-zEx?*nSb=VDq{!svFq>y
z3-Koid5w!8h!-w)Y7yq5rVj7jc<S$#$>uXK{9zf%D8fpE_n#gcT6y?hyJQkpB#18D
zSUF#mOg4j8B}K?jiAecb`k)dV7T$Av(<V;kD+8ply*OmzcJRBnEVwFIo7S0B+BnT$
z=l=5S8 at ONm295}UWW{E1Pa}1>`COh~#&1!~2Av@{+A6V^P at jamezy8}B}<I2WJTH>
z&la{0K8nSFO2$^Qe~-J7va+`jTdi9NPBTD(H&?=ssFEEVsAQS(t?YNW6!#>n>65Vr
z)6G)8DO%|D2JO6p)zSuW1~T)i2J9-14S3<b&y8D^tOR_^qF#2mkMGjk=~18<IN~Vd
ztT3BYvUhvI9N)$R<CdzAzp}KFofxcSTHFqFCIZ2+!w7DTSF-u>Y|mePTUd54 at 6_Oc
zpUoYl!08s?gi}`FBt=I7Cyq^Ukl#Tzhx^(7UMl;sRmo^e229fH2>V$z at bdsaSYJI9
z%8}@|D)(ji*<HO?I{66Y!Ri4D99o6FAykJF=mWFy at Ijr4H~&#7T&fU*#e9lt<&Tvc
zxLc~Z5L3{ByWEdOaaW+Hnk~a6hoC11>I!Ui*OBqK(zQ&of2>JqxFnoD{vpJD(`7F^
zs0BRggXP!eq?X4*iO031=8us2GtCi%o|k~tS5o26b#&>&9;5G!)-TAhB;0K57YhBJ
zaKbmufqzvlNMki~p!Q59@>V0(pY80O0cz(ZXZf&efGQ^}75w_!=TSITz^SDxNG1Y$
z4(_(alK5#0C~%+(YeACWj+q5CnBy(op``jMgL6xFWSen;t}?hIJ8f*Lufz+M=F8kV
zbRvx^F55mgRUcMIsKVK(-(vg*inhm!MROW`h<9y<hVDH5W~Yh^3tV#gu9_rc{&hIs
z1655UCQO_n$803SIYK>o)g%v<NXfJCn4K#pOYw6eE*u8&dY6K{%+jmd5KGB(Y%n=e
z&JtrNnJ<p1svLv=WGDZYot^r-$@!N~GfsCc;8e5vOpk#)#{Q#6P!DeS30pQ8Qp~Y9
zO@&}__9c2ifuFC2PUwTvV7Sn4#r5Lc_^m#EFGzbzq|Oy{_;gEGlALj70H4!n8jfzP
z$6m)(&~_*zL`Wjm+Gzy#P?Dt2`n-C*%64|+z;-rafZxv?(zf^lx1F6kD&dSrq^-0W
z<+#p~tc-{AP-8pE-4V2DqHDifJi9pCI7vEXRQZh$<D{#n4Y^XDpeDA_T#{$I9rwEo
zq44#d-*k&(OeIrG#+3Y<_ELcHpA8vPSmG$LmT(Jns+#T*ySJH0_is%@WmZ=+pVVE;
zQ^-)M)wCHDc<vE9 at u6uFz_&!4K7;2DHrO9`kaPO2keXxAvaKUww7x?o-J at hO8ew=<
zN-Gq-3*}EV!<d5KR^>lC(a)@XA)HYBwiiDS5s(gL-&Ck9VJCY&(~cg-S!_gVgt9~N
zYXwkxYKYON_#XF(s&sG(d$A|>mKi6u3H<U!!X7QL2}i#He)0DWOrt&U!FfXyd`sBA
z-aYVzfu|(O2^N at jb!)W#%Nq`Q3h#RE6nRXO;K<GM>fH34E7O2Q>=b#0eb{T*w+0i$
zTw*{u4}M_<6nJJ0?wAN$L3t0sFKeiw>^+(h(ltt&!({Sfk;B?Y90 at e~JB|c$I>-){
z<gUtbUD-da&l6xrwV~U3bizGsQamI40FyM*MkXBAN{Gu~=x9Z4Yna!ysQ5h&a*N^y
zG!IN%evl`j?-+6 at R;No|uiur8bG<91FAb_c)!XH$8(ynaUSUu5dfpv^d7TckIb4d%
zGJfUvT2lQI7}p|g3%-jtEn!#t>f87g9KRwyyM%q&x2R2oy=w_;>2<boqH;`J<PA`u
zJ^+nK0M!V&KYRe)<p>=>cYg+2*P^>))C84Zsvb)Ja5()8Nkn%}4io3YVd9)2e1xP%
z{+kpSZGqwvCa!P!=yPtL at Z44(nY`uNs$c1xpr56LHq>f=AWN}&92H*j4Dpmf{}Gd2
z%{$>o^t_VolnyOnuft0(7}?1V^bB!P6JI-UuhQ%%^&UU1uk#D_Nq%F4$8SQ|Tn|?=
zpT}3{Gw7WjKX?QVrf_w$`V}9W+ao|_Ar?8QT(Q)H0=ug1<Q+af`&>|3`AF5c4N*hm
zcAUKOf-d|7Lo1x~aITY=tq#%gx?bwYjEap1-D7Yqidyp3MBKOsiLAtry?}lbo%795
z=}QB=WLIQ`tz=HuX->#ccBqB7^bQEct?a_-M{P+{{{8e8+v;p_>aS1ppWu)p>5bw(
zib;YiHT!s%hC07&sPn{#Jk!1+pLt&mWPM`uhw!!dgZM`;UxfK3>z&-zIZpPAAmB(%
z4y%<!GIr2$k}4j2fPD+0wlT6$KR0}Qt(~9y@&bex(B~q>cOnkexf_P;U&HR{;WP2D
z);v7sEyH7eSRZrFY7gL)5`1KJ-~JKq2kYGohq7zj=0AaqIF3=GoFqJ54kx$8aCw7{
z3#m6 at HFvZf)?NebgB5UijpD7tE>NApLLDpV42V^6Kx?U(0IoZV3AG((fd(ZItkd&H
zbj0emyA#hnz<x2{a`R0W;8_jWT-D(C#eg5fdCf|5Cj!SMY<UmI09UuvyTI2iMB+Cr
zYS!8H`B;cWV}7JLDBuUNB4IjtTx5po4}V^1krK`v)?UYjJ>#jvT8s5c-O~^*2ejAG
z9fIl7JUlH9lk3$?wE_p#CL$2hG at Z;v_!Fp+Uc5P+#9=t5zrzu9IKsFIUa^tnz`zc)
z^&hps_)?6ofbo at Z%J(e$x#m!ea9n}i{`GmuB&(GFo<!;f0!NY>w|MSU-E-(I?qXwW
zyYfR6;CnwSp&;mMWK?O|1~SneNh at 8jq28T!dfBR<V()_WMLlKWTJh%f_$3xG7Z)IM
z4{Hy}>4`LQUzR~lyB1hOBcIv`mZWVs at 7tEWlecniq_QhyJ;poAJ9h@^lSsFU1!Y5O
z6Ul=i3)7;8*|3o)W5okM#c$G(m`e9 at 122xWQj2H#W{pko7bB($Vr;CKS)AazIcuc<
z|7q>p!=gB{zN>q#;2?u2f}qZDQ9#f^je;5-1{h|BJ8~CH6Hy1Rlf+HP#w4Swd2yo&
z8uP`^m~S!BUETO?)ToJxy2RXY*VREy;wEJ6<aMJ#v)dSOMj_$-ogPrblRWPq at 7vE)
zU0tV6UHVjYb=9d;=QR2F7KJ1#bkbN|2AwYyo^cQqDtvzez2sxB26k!#A=cW$9 at j~t
zjx;Uhb}-#v07-?E-o^I_qU$Wt={l8K9P~Ty9&;MarNjUZ--KfeV_FgB#8w|D at Yt^~
zCp3NcrZU;?fl?<V)tZpGLHJ(DBTK`g9P^Y>fa_Vbq{p7zC?V at jMe=ly)~QTp9`~43
z!Q|ZruJ~-v5-V?9VK8B3O1<N~gXtZ50|&+;n2>2qdYZAG0Lgri#V2@*9X#}VY`(>C
zLVi>`C+cu2Wb-W!{Vep$<p-3>Lp+GbSrlFf7X5WPd_{}@MC%nlT!GPn&UOSOeSSXG
zY07Llm at 4>ZFwby*%%hQDuD9E#w9fT<eJb3!Tl;T?>-XOpWvI_6=vZUquAK}i==kbk
z?%Ebm;NeG&tf-)4r!nB5A6Q&_Dg>wgjbjtomt&3bj-rS5-x`kOVXU at 4d5gZFLwtx`
z+gw=C(QIHyN1-C2h0+;<<Jp(Nh9-!-C^$Elluuof*8PzVy>ny^lipXpa7(QRtCD4Q
zxRt|&5f0(|u_4=Lgb1OI5GN;z%F4$%X)LG97%qTmgq{+Z5d_hwKq1gxk_Pc-39MT5
z8;wJl9O9(3A=tIjD+RVgV*smJU>DFkhflXK{WJ at D=%_uY!c@%6;Do6%_h~BryK7{o
z-6&9C`C~?Q0ytBE1NNCPS;m=&yB}vAcLA}k!;@_4aV*a5oS4h4j!u|})1q90-h+v*
zN1qVqF+zpScriX<q$d%Y3MM2(dE(G2F7szsntXd%l-TEO?HdP{LZA0+UmW}<Um8<j
zDRtwD`T2|+>J+V|({mlT0#l3TC71EE5S_FMd)i$5<+e-sU51qu5G~hx-}e=HIav-m
z+xr7_0?u9}N9b}5P}{^Avc12<X<37d#571PGPs?L)FJyo7E+f?Dw1g(R0rky&~gF_
zI2-U4pnzsMpH at e!{gkZ`LOQLG(bl6G!ww?iL;J_J_Ow>vV>|2KCioe-Ngq&z<D(p`
zF~N=qXbW#tqtAxBWf?k8#!X(Y2c0u+4%Oer8`!SP1-$DxmaCm?zWM3`f3jh1hDPe@
z?t=!m9Xff2c>ce=J?&KEd)@A$4F_w#AFDS at TFAMfm7NO^@**pjsgT-amt$AX-rQjg
z?KAmnYk9 at Bll-2%;wQJx+LMoU7L+jspjPTOs?8{msnH;Ch6>Q$fTB$9^FC$mL;(eY
z0t+684vGMe?M5G`HS=JAVpHB=5E#(k_bH98<MB at T9QEm0J5aLz@K*cQoEIH0=5p90
z=OHf`4#u#-NtM((!v($5AZW4CF$WTEHb&BW1}t#?jf%%!K=R)@P(6;Mka?^!^v*^o
zrE9F$3yt-JM(=0s0veEbfBwVU&h at VpgG73pAP<WVY-_}m)-w=8L^=s9S2jV+SXEL+
zrfEe%tlsf(PWWU$wF6OA4X7P1P)2&E!ej0N1?K<S$lPXXEo{k{skKZGQp%iq$1kUI
z3zPus{S>X4WGZ8yLy{`{1CFS)yDvvwMGMMc;s(|g)oB~|C*aX~sG^`WpNkI%8HTr+
zoM}#ML%ASWScJ`~RoG<9nkw9nHT6nwP+u%IisHK5=_Vl!-<2dwX at +?Q(g0shhcq$<
zwvb%u$fqAWy_M8vohZPYVZ?T#!s%MG3G4V4IqW`Y1_dggFtRSQ%Ospb6{{`9q$DEF
z5tlP1Z))!98N!r%dy at h(M0&J$xL`u3j2FVu-b7AsTc|BG_f!LGXrCqP%zyw<!U58c
z>)xnGclzc^%WsLc&vDz4{}_iMXVr|K|8}svmWdl@=(&PP1r}vVA^2vULF^D%8iy7_
z@)Z6)Fs<VC1~v{Z2`(0{9YbLz{5rM3Z17ERun59Z;jU`1O%9*<?6csT;S%AnMg;{*
zR%5>)b}kMXTTO?UAtbRFYj|D?aAeP(nV`!G&dQ$Ya3mz;Gt;qhZ|k4w-g9Cm{?seK
z4^~)wO=)SlGjdc3!Sc#quh56-8Q-~@FRHiQY*eIoD7d290_ok95W#fJl^x*>IMBBE
z)|Fak&y`}|>ah{RPG^WvRKK7xBBQAGyDOCYKTd=kAb+S_)`UOvhOcD!r4y!OT5Gx2
zBEvgRKqn!Hy80rj9%awMtT_S-B8f?{_W<i`VjkZvy|HU`QF at oJs0Gj1<>+!5(Lcb;
zNndUR3nG1Cb0 at 6}3ZBGBcqfT82U{Rxu?Z_DkzBRu604PyVE;FLA#Gwbkw9m-k!@WP
z#29!3_-qPGXk>bCB)isDn~M#fv0T=umEIl*pNi37)LvW1?=_#qzApV8R(ijO#OnOj
zNK%($Ivk$)8%^LRg+6}PhB1*kcT}h=GH|YI!$H22=L<SED}%&BpK at lXtDqw^u9WUs
zFVcO%c^BWQ<YU;bPENV&;Pti*8U-XD^)41zC~GBo>QfXj^l(0=-CX>%wmhsR^6Zek
zhB%HkV`AGR?|!Td5<N>m0moBDW(_owZ0zyAS1^?+j5oHu;)9Ze_|fn&!39h674Q#W
z<ORNxH5`2fa at PXxYG%V-!%VnqAzDDINz$0j?O6`i{7{UY^9xJm8EX7^oc~FIXu}ly
zWZb99_h1zHP~Tm6BVtL8uThw6WA&UW#Rk5+k%?$Em&rcKW)u3nJNkOOANEefRw2pX
zL2BZUC_rh{8p^%j;*5*#Ac6`x_)i2oxOe38-?*`ojYpb3Z+GuF`)I at XT$?M-)?7Ev
z_68`B^|X=Qh~qx+Ik`AnI(8(}xHW>+`;S}EHi#ECXk9V(XjD2 at zQ@?a#WA)xdo%7N
zEc#T)LZ(B1a6_*lsiFU_Jcu>MK(}E9ILq*B;P=KE*xs at rRswBVr)q*&!+HFa*ZTK0
zZQv^3X9{AMtFgC<_(N$1_9p!ENEcpgVE02?Q}~m3N91J(?w4RYA2Y$$0rnSK;2#G+
zHi6j2s6zwF2MwB0RDqp6p at sTEXb$D~AS at kXu{t3yS2e-qQMYpwFz1}G)T5YC-!=ji
zFuOr!^@K$p?Su%=oCy!MO%yY8-BSY+dC1j1(WVgNoIygJ^I>r}{L9W2q9U=|GbeFH
z+wNruFIyz)6N5a%5`#S>p|~L`@xiv;O8{R|CGK7de`%Sxdj<Rz#bVq_<g+qg{5G-B
zGqgQ6F%Fd(o;bl1k=W)Lm1u2?5aSZZde$eVx5bI(8(Cqm-pCqp&@uy4uUEU>znXJ@
zqK8XP^6<$iZ3*Jg<dL3X$w_VDVq86Pt&b6R!@pcVR*XaGbxR_}F=8CbuUi@>#-W~d
z%Z7=&mjh$@P%$Vkxq(X_+7^d!-EvT1<{BeYi at Q<1%PV;?4%Mw&kt^t&405y5F{?NB
zn1mrL7)0KN5C1r3R+y4pM_beK3+fUf5)kc)5qEWq=D^gUZO?c&|Dd<)ZEL(=_=eho
z?W~a&dz^EKtub3CW2sa5Hk?+u6(EO(r>fdCn0&!tfVjbX7&6l|ncIan*9l-=Z_&!9
z%Ak$90^I@|e`wdJYCLM6uxOd#=|r3!fyyk- at mu_QH%}z}mW8VjEgcTA2it=4ZMDoW
zZ8SH&%x5xH1z;hjD)L2}HMdpYM`fhrNev22TMK<eEqqRWu~Tu)tRVLC$?l5iQEqe8
zHy-JD{L&!iSF{|~f}AJDbLYW;&o($L&|2%S(RS_}V)Tc{*p>LQZ}g3}N5cPCA2wCt
zcl1TtU%*HmX*-KixIp>_60d9EkA$>O0qr~ESAlUE_Z$3L+|TeQarf~2g9Xx6er;WW
z)XJNEO-TjPb@&^T%)Z8`0E`z(%(jU2pg&$Q0;gsxgV-i~Vt;_k4YIJUoQ18%(g6Fw
zS|{S at n7GDz3A$rfy~doH?q6qOj>3cW4GN_E#>iZm8J{C^*$c%{DyQ;VDTAupo9Z5w
z<R(Tt`^2W|;X9jrY(LjCL|X67?P1YvIqOOMEZPJA&+yN}&*)w64e2>!*SgQx+)hkG
zEG^%MvfVw5bBCvQ;vB`0Q#MOSx`oG-#HMG?k8nnp*Mk5$KF0MX7e5gbq>0$;o9I!(
zso>Ob?_tfWbso!6_CN>EwPNl-&y7yLhr7XFE97abEnHxc3>(XbvH9L)iM;ssH6^NS
zwlrBrTm(DDqW?Q4s^So#{ffc>wMz!Is5U4?t$`OYBM?D>q;*CXjy5`bg<kf{Z#ngP
z?>}zuf|}^{P|vx+>b8PnX8(TpdT-n99IM63;oR1G at 0p(U-W|6&>vkLO+-}=yQJx<Y
zoh+`$nd=)@UP5)YLa9_tbgcMd|8sow81aSv=j7;cadZE(HF}u%eE)M{v`*aA|6CQV
z7N6~Zu8U^kifCR4j3xp+<M8+}`u1o$hcz at ZX54Ij-OK&3HfISm!#%)KiQJ06V=_{h
z-l8x^5b;?|srR|w<{s5Fu18hNqFE0gvVDl9V+|-Ue!Y=dHVpYBvbK|{AHgr<5nGB?
zCB$3TdtJ9#bQRh*$;YBA;d^}Rz2j~#vorJr$aQFORM+ at 6*n%vEPT`b#g<j?O at wWrK
zJtJozRN1 at 0uCd~`CAZKe-?}vgQoxWk)+%cwdJ~I@$C<`bueBHAgB@#JEizUG^vpF|
zjOVn`z%dNqO#KN?vnAwQ;7{UX2gP&es02u5-N_-eH&0v8VN#~simfb0DVS|6A`65m
zC3(W=XD|}>&bE(@hX%F3k410bfkZ0YOJ!}mX%Lh>rBVt79j6KxLVHf7(NEQAV3m5m
z?U`(+C;BGELS~Ey{o|1Fmp#dM;Csw|_)5Urdg4K3+L8J3dFFnXh2vZ84aVkdh>`7q
zbFUkd?p`-Bok6l at AHqyOndyfanGQ}1X9xw%{Ji;X#C5?PgKL5N0In78G at J+S0^DA>
zi*W65*Wr5M_QU-VPJ}xINBf4O{{wl{Fdu at K;Uog1C?y>JuIn(eK$_20ipeN=bQ=-W
zVVY$k>k(M+NLT>E_KiFw(J(#k_drm~2&y{>17nseI|zT2b&SR*Ln{!KSXL|IHRmh5
zokuY;gkVun*t*brg=U__UAYV#T1Jh+gsw$1(SvDk{|3~^g4J`NrCD;bRAEFuXD|s_
z-Xp&IopCZG*tRN_Fby2ojS$cxpT#OglOYS@!%EB|O{62_!sMjx^PoU at BV<bDgxGhJ
zS6_??;n*4n2jP%%GOE(Z3G->a6qy^_z$Izg_IH0ZN8<_4jdNy6oGMNjncIv5NMX55
z49kV^iKLI$eenTi$ir8~g~UQni!u@`D6C(p!fH`v4R^9w1D<J38!mj<?RM$0n{~lu
z)<=)BK$c94br;M;fm%_ at X-xRfFvg~>;MlTu9_9uvqbejl!{UZoNm_#Uv~((&GIN}5
zg?EH+T+TSh>;vJ>VNNb$vnAl7${HaM(;~vjBC&gPUS-t_QNUD#@k;Cc$s|u0y1~dE
z7|3;{cMA+F7@#VBQIC>A7Q?vGYwuCXkU2djz at NG8PwS|<C(#rAi3*TN<6%fNxj#{S
zk5W8rMB}<vc=bP02K90VE==HP61Q5O$hn&3%))Y;u_-;yvl1KsoRyS=CV5Nxb~c!A
z-e)PwXt}mViQ3#A3I)#b4J1Iwl7_S=c^e_O6Nuj7Z)<FTf~6VnB4rn}2)XYa7syGb
z5T at e49tO^?0c3?@JDm`O)zd{#VCZl0b<t7&rff_8C7*T;+-7Cx{=h=(YVYJe at Z}$G
zJg~okbT)_F#^|EgKu?{X!&swVfde!214+e;X>MQeT{O^1^rq~uux1MvP{JgVJ$gL+
zK$3S3)*;Np$#eM at ZWZFFdqcw2J=98qq~e?3yxF3;-}8`D-Kk|eyG6^o8NqE?jo6Uv
z3}7q0r(x$J(P|tWU|Q*Yr)QQm`^FqLS|q&m8PRPjYp-`}pN5TwoK7e>Le2&@dXBfi
zSKrXwsa0->N_QK4$|sgIBv`lLp#S!s>>F#DAe2H?gAo)6cor)oV%KtFGDdx>ju|Ij
zsJZgMa3iJ!Cok5CjzmMEB~1|_MP#Z4>)viU6zE)XfV1xG;Z-a~(Zd(xET1vl5s@>@
z8Htl~O3{4tT1s;d$JIrfj?wtJ3GBV%MMx|i3dZkl$${XUC}%Ki^i*dkth;&?Y8I#J
zQ7nLV at 038XE?QxI4O!zrN)d}y^e97+-DFA5XxY)rsFeu!cR0)k4<S>UtY&$ueK=1S
zuXRN)3GrZR@=#z#^n(HR07rmx7*y9%7DX9#(FZ^Q<whgJFIMFsj;q`F-4(_fBktx(
zCFr?ecKu79y(($n!AhD(AzUyQ`w{jRr6X at MMrJVp;Tul#>@}$sIAlBv5JmhK3bsZ1
z^}7tm7G;RC at U()xApHwCWG4$as`hh)bMViMk$EgY)JbOvXUkEX>-0l3u}2has}y~L
zF*1e)9PP0!8dfH?Bb96miwh1=ZqTrD>G(0oMf-6ATc&FneFOdrsfO$aM3I2KSos1(
z2MY9o0;dx-tVR-1Q8Jo^h#==I4Xc&{Pykse0A%Ra1Pz-n%|f+gz4%;kuq%ylHls+g
zt_2+ZDl<XCfkS4s014TcrD5}=mr!-Gr3J{aeZN<*7o}l<kmW2uLSxrzScOy#Qi^`a
zaMySx+a$e%%9HIZHK!z1_COtRx&&h%Etm)1Agr}i!M00VkR9380?tUGSixSF@{k=F
z)dD2ky<EZmuk;b9PS&&liO8*{R8G7wC~$id#sNg299acA7d&d#d=0CT8mOK85u^kg
z2_v^YL3O==gl2yPX{km;)VjZE*j(u{Qjk?GKt{hEq(Lp8wcn}hm<wS<!c5dv at Z*e4
z+D@%DA0#B5#Ykmnx<dJk1cY>30b-23s$oUaE)c`zPZjNi9Br}mDH?}#QvoNY&ZTBc
zrC_`>X^H|Qws)zT)l0`vQL at klNZjdVgmV%#Bo#w|jJr at z5Ky4|IU`$&B1tn4BF48n
zDZ+vxNzD!*@xoaZdqf(F#BP6f37O+G>;Wm9x*#c`;er!I#<TrW30j{_egQJ!LLQD}
z%S37RLz3Qpmp+>xQ7tm=1)SuD8Q8iq7?6rCKqeYO89OUg;bq9O7a)@wEIivMy$uK%
z^a8{r$dJzgA$whbr0n0wvA3iX$eC<&0Ww+lA=P;sYH0RDrWlr~*y9peKO>7<z?o`T
zsAlvPNYA4W6lUD1#C^x=h<+jxyZxxshVP?}n~KC_hzp6Qi!T$-9#maEddmf;M(tFy
zMbbNfZ1v-$HBF(e{0u7E?1#)y&Q`LGQZXt at cDazx%%)U=n9wh}{E%56Eacf<sTrkf
zRWi=~hFtoPo<iwlJqxL3pZ+(E3TEU?CsqNOvk^S3CaDbhkohb?%(`0yp^<|uW&x6}
zyP;s4rGuy;8OH*|(vJBAC~&O_`k<vswD1;xM24YT&1&TW$PyM%Gh1&E<X1>cwyyxm
z+Vu}5TPro;Wm^3Zt6`OfRZ7${WbX<%*(HzCH}e5rhD=@oVp|OeE&uP3+n!`mvDMPo
z$eC<k0mspsO?`()Dl&ToNKULl!FEbFfkVgh0Lfh at Lv8^=XY26&%ICni;Jo2KsM!Lk
z2-Ko;UqH<_e?=8tgxAyivnyz7)iCoY_d$OpK!I;IV_krGB98DNMd6;sD)yvw8JW|e
z07Q_8KO%}U$7)%=<ib0Xc`ZPS-D3#y2_R%+3y`^2Wymf-WJ6nAaLIl-l?4#8w*{Qi
z;WExJRFceY0aE7sQq3NeVgVt`TY!{LJ+5M_qz!<O`7J;yb{tc&25CI1C5th0!IjtF
zCCE{t!W<c=D)TKl6=+9hxsYn!x=5b=Nm at mNh#yj&YgVvkDG>D`F(}}G0$*)0vKmhg
zji1FpB|BY+n7<0=zF(Hsp%P at O3y=q*vI%ko1(2mKK!mCHDcCF0pU~`NtP7CZ9n%$T
zhtvq1{eH-U`y7zb!aV;@voE*~>!oi>W6&zJ=Z;i$)e!`tc9Qp5x!{GVA9H}5L_TE9
z3pk7PnGm&?no&b}|Bwq_tdwys0p}w>j&t34p8Y{O0|;^dk*Z!gNB?IDWFnJaXiwst
z!Xq{k;+J%N1`4#lfK?Z>NUM=h@@KVFdV^!{NIrZ-v^W9kGM$EJZ%8+RLk7SASzec>
z#gM!j)uvSgAS)V6mF!um1q2~$V1TTwD<eoLAY>8 at 5Z5d~nxsu2EX}F`d8lL;4Ilz4
zNtVI at dHAY}zNb-WCxajI$hyS at xq#BiP8e`jl}uvnZ&DX<%zntP#1w)YM19Cg7;ql#
zJ<PGg(teaK_#uz=%0#0^B)ee1X{gKX9rxK*tSgD)|A7dy4~B at x3lCA^ZKxI*2m4X}
zZIV4I5;`S;(<C?+I9xun^7cgo3;)c(a^c)?hv2TlMFCz2w+ at c3$L1+m_7VmAC;s4c
z9mhXj_8(BNfMp7HtyaM{J*Z$a%M`4pO~WpIreUwIrhh79 at 8PdY*URv~eM-X)KdE7R
zpT;!!3??%DxL5E;rfW)wAGaI0yAk*LISpHkya=}s at ljz|{bEaraPPgoh=g%UxF at 56
z*ej#`c~JZp-|#GLI&CsXE&wzL!5`rMdYzY3|8UjsKl?4u7GLAptt&j^cqQYM_hycN
z9)jflH?KN5vy($!8 at 7IAe&nJt3S)MRHBLYNPx0}IznSo1QfG3&B)ushr7Pv!<lj$m
zO-;G4<Gz=tS*LeQZ%j3$y_sg2 at z)teGtbW~n)TONmiv#~KYsR$v)LTyoU?PLn75j{
z%th(@($$vvmO~b8#ynDJ8dev?_GR>DI5J<#{5mr^>(Q*^SxT$j`kb}R8k$|2{bKfo
z>`+^gZIkVkO=+KFZ?GS*e`_~5${m{=CmmkLgq-;~n{(dJ>CPFKTbBDw?vdPo=7#2_
z=dH}!k=L5nm1oG$$$vDzIsY&DUHPL6tOY9y{!hV)f`1n13a1oS7Cv3LyYMfC|1JzI
zN-e4`au>Z;^ik2bMY`gN#f8NW7r#(^xcJjzZ}G^v)904YeQfSabC1mZWNz2o(2|sr
z!jcsw8%y?<d|Yz5gex6WI-|6_^pVo%OJ6Vjxb#0ue=LnCn_5;-wxn!b+3(7ZmYpyA
zu1r&ID4$V2w|rUo`ttu*{#LoC{AxLEvxh8%RknzVlnQ%AZAC*xQ^g-DPE>qa at m+<o
za#UqXrLA&)<*LeOD|c4DRr$BduPc3(L#tw{QmgW-7F0D<ZK~Q?b)@RARhO!|s<iW>
z=B3QbnpZh***y2Wt at HNGdw1TMd0)@#o~Nyjte#k%UR_eXxcb-C8>@d;eW3dN>QAe$
zR^P7H)r_ez)mUmuY8KW!R<ogId(G=L$7{~iT&j_3xcPVcmWzYz1%d-Tj!q!m8*U+C
zU|fClMc_&)#3l@`3|thZ(@gi`8;|gEJSd=B6vPJ53``(w`MV-N3Ssj-;qXE6!x08&
z`wl);gNhlbMiSyp_r%8{Of~GUC3|I1HLvpi at +eQb>X6?%=DYa`2)7j84SxvfjeB2n
zDmI_p;dkQ&yml$_87L1NMTYPCPW{@|>7amSF~)(;wRgev8b(UipRN&Mx(342AuDii
zu?q%;KN<8|JMda^dijp2<e>1bLE$}v!utk=TL*<t4+?t*g)a;WU;IfJ6yULm&)9c^
zsJZ4Xe<vB}9TJYkaljj(=4FIoOyW*hMEKs;?tj}mUN4HhH~m1T9LR5Qr`4hL=o*NB
zeh`@lK7xT}8Td#B!amgJ5~c6YfR6Q{bKD72Z^x{Fk@>G5WC|eQ at AQ;npjhhk!S{rz
z)889ExKj`A^d$YDy(j%u^d|n~-TVi4a_Yp)hWP#p&_|I)>HEX~UGE$GQ4DU at mm%kI
zZ|{8rWCaC$^*;p<{s=M#CF>s4$^WOlV at Na4cA^KS!7qn95BJ1Qo*jn!@Kt=YxDLc&
z=MX-ZgsC43U at yT3tD3z8WmVvNvc2#XOv84Mqy9XUEzAmn8f7&*jBpGfJF(GBc#{yO
z9AYLA9%FA!z<j{|JxNR`knH&r)J at gw-*Pr;Hgdc_o1 at 5H2Y8+wX6z04{z(dBaY(Uz
zl0UoLUKMfKKvfkngvlp1I{r5*+KGp+)xtk|^xdO)RNi at 1k=zEb)jaul(2;~3meaD!
z?Tsfn!s11}y|asd_#tujk3WVb_Vw{$SW565_xZng{-e(oii001p{H7N7N~L_s=v__
ziY5_R^3V8v^*Q)WR2MpH7BAy!>8Kg?b)dcHM^lmNpm>DI_%po$S(Qe-n$*nELmy4R
zcHmRp$P26yZX4WI^zm(QG(6B%1E=oym!T~cZhsi!7(W{auw0LyOLrS_BYq)W7vPb<
z5ce;@smec>=T*SR|3ci?fG7V#Tsu)<??@sAX6!$k^{0UUTpZ`dDriug9^q<`hvNP+
wD2}S_=#Ts0XW}yZ<7h;q^6tF`;?R6#CLPVFA(OOfB{lSLnn36GD*JH#7qZ%vwg3PC

literal 0
HcmV?d00001

diff --git a/recipes-connectivity/bluez5/bluez5/brcm43438.service b/recipes-connectivity/bluez5/bluez5/brcm43438.service
new file mode 100644
index 0000000..d57125c
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5/brcm43438.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Broadcom BCM43438 bluetooth HCI
+ConditionPathIsDirectory=/proc/device-tree/soc/gpio at 7e200000/bt_pins
+Before=bluetooth.service
+After=dev-ttyAMA0.device
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/hciattach -n /dev/ttyAMA0 bcm43xx 921600 noflow -
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-connectivity/bluez5/bluez5_%.bbappend b/recipes-connectivity/bluez5/bluez5_%.bbappend
new file mode 100644
index 0000000..eec52e0
--- /dev/null
+++ b/recipes-connectivity/bluez5/bluez5_%.bbappend
@@ -0,0 +1,26 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI_append_raspberrypi3 = " \
+    file://BCM43430A1.hcd \
+    file://0001-bcm43xx-Add-bcm43xx-3wire-variant.patch \
+    file://0002-bcm43xx-The-UART-speed-must-be-reset-after-the-firmw.patch \
+    file://0003-Increase-firmware-load-timeout-to-30s.patch \
+    file://0004-Move-the-43xx-firmware-into-lib-firmware.patch \
+    file://brcm43438.service \
+    "
+
+do_install_append_raspberrypi3() {
+    install -d ${D}/lib/firmware/brcm/
+    install -m 0644 ${WORKDIR}/BCM43430A1.hcd ${D}/lib/firmware/brcm/BCM43430A1.hcd
+
+    if ${@base_contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+        install -d ${D}${systemd_unitdir}/system
+        install -m 0644 ${WORKDIR}/brcm43438.service ${D}${systemd_unitdir}/system
+    fi
+}
+
+FILES_${PN}_append_raspberrypi3 = " \
+    /lib/firmware/brcm/BCM43430A1.hcd \
+    "
+
+SYSTEMD_SERVICE_${PN}_raspberrypi3 += "brcm43438.service"
-- 
2.8.0




More information about the yocto mailing list