* [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver
@ 2021-06-16 21:51 manickavasakam karpagavinayagam
2021-07-29 1:19 ` Nate DeSimone
2021-07-29 1:31 ` Nate DeSimone
0 siblings, 2 replies; 4+ messages in thread
From: manickavasakam karpagavinayagam @ 2021-06-16 21:51 UTC (permalink / raw)
To: devel
Cc: isaac.w.oram, nathaniel.l.desimone, Felixp, Harikrishnad, manishj,
zacharyb, manickavasakamk
Add X64 ASpeedAst2500Gop UEFI Driver
---
.../ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf | 4 ++++
.../ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi | Bin 0 -> 36928 bytes
2 files changed, 4 insertions(+)
create mode 100644 Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
index b3cee45..b563f76 100644
--- a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
+++ b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
@@ -3,6 +3,7 @@
#
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2020, ASPEED Technology Inc. All rights reserved.<BR>
+# Copyright (c) 2021, American Megatrends International LLC.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -17,3 +18,6 @@
[Binaries.AArch64]
PE32|AArch64/ASpeedAst2500Gop.efi|*
+
+[Binaries.X64]
+ PE32|X64/ASpeedAst2500Gop.efi|*
diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi b/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
new file mode 100644
index 0000000000000000000000000000000000000000..07d9de0fe5241bf26d516f3522a930880a57f5c5
GIT binary patch
literal 36928
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
b8aJ)p<lEG?Y5k@rHf`9nc~ko)MKS*$P$*9B
literal 0
HcmV?d00001
--
2.25.0.windows.1
Please consider the environment before printing this email.
The information contained in this message may be confidential and proprietary to American Megatrends (AMI). This communication is intended to be read only by the individual or entity to whom it is addressed or by their designee. If the reader of this message is not the intended recipient, you are on notice that any distribution of this message, in any form, is strictly prohibited. Please promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and then delete or destroy all copies of the transmission.
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver
2021-06-16 21:51 [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver manickavasakam karpagavinayagam
@ 2021-07-29 1:19 ` Nate DeSimone
2021-07-29 1:31 ` Nate DeSimone
1 sibling, 0 replies; 4+ messages in thread
From: Nate DeSimone @ 2021-07-29 1:19 UTC (permalink / raw)
To: KARPAGAVINAYAGAM, MANICKAVASAKAM, devel@edk2.groups.io
Cc: Oram, Isaac W, Felixp@ami.com, DOPPALAPUDI, HARIKRISHNA,
Jha, Manish, Bobroff, Zachary, KARPAGAVINAYAGAM, MANICKAVASAKAM
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
> -----Original Message-----
> From: manickavasakam karpagavinayagam <manickavasakamk@ami.com>
> Sent: Wednesday, June 16, 2021 2:51 PM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Felixp@ami.com; DOPPALAPUDI,
> HARIKRISHNA <harikrishnad@ami.com>; Jha, Manish <manishj@ami.com>;
> Bobroff, Zachary <zacharyb@ami.com>; KARPAGAVINAYAGAM,
> MANICKAVASAKAM <manickavasakamk@ami.com>
> Subject: [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64
> ASpeedAst2500Gop UEFI Driver
>
> Add X64 ASpeedAst2500Gop UEFI Driver
> ---
> .../ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf | 4 ++++
> .../ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi | Bin 0 -> 36928 bytes
> 2 files changed, 4 insertions(+)
> create mode 100644
> Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
>
> diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> index b3cee45..b563f76 100644
> --- a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> +++ b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> @@ -3,6 +3,7 @@
> #
>
> # Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
>
> # Copyright (c) 2020, ASPEED Technology Inc. All rights reserved.<BR>
>
> +# Copyright (c) 2021, American Megatrends International LLC.<BR>
>
> #
>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
>
> #
>
> @@ -17,3 +18,6 @@
>
>
> [Binaries.AArch64]
>
> PE32|AArch64/ASpeedAst2500Gop.efi|*
>
> +
>
> +[Binaries.X64]
>
> + PE32|X64/ASpeedAst2500Gop.efi|*
>
> diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
> b/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..07d9de0fe5241bf26d516f3522
> a930880a57f5c5
> GIT binary patch
> literal 36928
> zcmeIbeS8$v^*=tF-H;^-nMH#Q5@nT*Mjj*()Ih-
> Ogk6}GU5SKfT0u8LLQ;8%$u198
> zba4~S?zon=+G;<x#nu9?w#Gg{TwBcok|4;FRRd}b*pJS-
> NC6ds5A5%K?#%3NLh#dX
> zKfgb|ukWiXleu&5x#ym9?z!ild*{y8^&Rft{<Z(xCI9_`6?TqW{7`y70w=gD%~@$
> V
> z+=hCNGZ!dXzBG=bOZ%CTpljgIx;}}QH8Ar6&!!8&2LpG0pX2VMi~z^w4~Fn>!
> mjny
> zuJ)j;A2O4iBzvm7MApo4_17-
> 0@zfx_;c`6RoxD@N_Oo(ax0deIb6h8Q)$SUc?pBT~
> zzjn1ku#of{0!+Q1hu2iQbj2b?cG7_l2y{>VSwT+>EU*}F6aB}`Vqn-W9^yDrIxI?O
> z#nxTkOG394i=konuH`sqD7_Ll`KLDnA#m9e!fSoUdkNsr0v@WI3dCCoV>Mw&
> Gu>h!
> z-NCRr8P?ATtD+28;|Ob>f>jNy;uNfJ-A`B(fmMK%Jf30gle59JC@ruQiT)ktJGbv~
> zO7A)Xw;LUSO4F_2-
> 0JWzI>Cvd^v!4kM_{Jx3=Oj*3CQ1<5M+)C&|dI5SAjl3x4^I(
> z1-
> (ZMjTk}@Dg7s{ETe*<4RhcYUoYw?tLJ6#;1gRr*UWQDohb3lYL1ik$~qTQ&dYcT
> zk0#8}uySJk9)e5Tf%rWIvB${}A1B0H(Plt=5ouWjB5J-
> 2HG@Io*IvA<EB#F*GPyLM
> zjmSh&3^^^;30{beu?icPfrbb^)+pq!C-O@b^4}ryQNTs;0qs>ld)7O)@7c3Qly-=L
> zYLggf%%hfXbV`mwXUJ+4r7uM3<V)1OL}_23x?K!ZYz7A%bp%LX(?a^lBPm-
> uS1%Vs
> zHcOFB+ARib7IUcblqj`Wd?;!!?i8i&ctsJkMu?W;cRKW!a$Mb1;Cr(>IJ1(T?8y{g
> zg0<7n2lAJKJSv-
> m%AC@yLZ`G3OvKllnf|vsLkld84(awhhtzC#NFTrq_AuKO1M@AW
> zs#|Xp<_lHAt-@`hbPO_8ymSIua7ZVlH=I(`KKUPVC269ylW+MiWJqs-
> MS1B>Bo{Hs
> zx3rSdx;UY7eu*=*+UW3KjrM3XiIPhMQ(I~YGkukx<6P2Cm*gt!vRMk5q5@8f
> S=EZv
> zN2J=0gJXv@#2K2C2VE2&WZGCQs=51>T(q*#kq7aSEBr|(gw~`<Z^tWEgTflfH-
> zPL
> z$d}&kUw%E)NBXe`$zbd!R0h+*V0`@(P^DH+J>j*U_7;Y2HHsluwS2z=03_<V?
> A2-d
> zF8cybr}N1c>SLj*>KIREv<=qS(&@cOl-
> >g26Y}A?$PLU~9ZMJei&mpuX0CR%c6u&{
> zF75^c(99!?AuN;yejU_YN_W{UTdzj8D)M`bt=+O^LK3!%V19HCzU5&xdngYO#
> 2>Gi
> zcDa}1UPP8pehQqUb9@_su$9CL4O@$}oK5ZLUu-
> D>WM)0tVUZY`Q;mLq6}X~jnDxvO
> zF#Ga4qA=|FMFd8Jf$>j~PT`oEZuJcgDFa#E$f7nzQ<HkBsg1-
> V89IpF17fKyzUEf6
> z7m9nX6MSFkyu+a-H2f}V*w8IHw5dztLA8l0m(q(-
> +9B<7N%lg`xYI`iCQ7^G6=Ez?
> zd}S!=!p|p4U83}q1p_3c+)*LiDcm6}6c*fh$HJuTFSVc>dn{(^$3+e)!n$x2ZR8!}
> zlmv95*HC4r4-
> `TpPTs|8R%(s%I_hWC@ojJo5^Q8dFA#wK1E7=4X;g9GzJz&`ZNEb>
> z#hGmH7T1+hfAL&~#+i=6F#Hy1qH%hg(Ksta4HHJgngK0UNUiW~R?Qr$aXBSb
> wO)#9
> z<LfJkgfs^noxm96xk8j2MoMIg(ulqXfH6-5i^q{7ENBciz9wCicE)C6*fBxxr2eGt
> zfgB;^(1=qtBrvL#_Bm6P|4T-
> TluwRpfyF9HOD(9xW2uJPi{NOW+Y%U64VZOG=+3v8
> z#L{k;)a{U7;~(pU@DC%W4aOlKCU5TFQGzlwu8M&H?Gsf-
> SL#E&*rA6q@$*G#To$G4
> zdWb`%InuKgre^@8xf-Xm7e+#aHHQO}9Ss3{G2%eL;Y`5YPO{qFN-
> M{HD!!P@DuFqb
> zM!b?!a$4Mw<#FJO(rqR%|659y_KDK#5Qa&S%f_U^G_hxov<)h@2he!AKB?
> sg&w#kU
> z&*-_{-
> )HiC%im}Ae#g;e&DH_z3W&M(fS4bfCUjX%Tp!2bp4*!NBkZ!~jRr<6k8*mE
> zq8y6OD2KFy=j=4POICxwGsEB8Cj_kK<k$tx*0b?T46HT_6a<*X(6_s#k5!X&NG
> Dw|
> zAnB}U6eQem4{S3Ca<ENH6KwMhJ4ye(?<JWkp{BSPcl>-
> &AO6CmJomWpXQ?R7&MPf!
> zUi^v$VCii+XBKh;)Y-k+Vu#jIV>dejH;N&{?|=llmx%gT(E?J7|0z5N$_@Rq0N=pi
> zM(ItbG(`UGxp=&|6CJ;Un8DAd#5%A-
> xGoRb<9)D4ggydBZ)$!>zSNSJ==Tu)o^A}?
> z>u#jpC`yNz(9bqP=uVJ>&=a8m`R_Jj?o;%VywZ}URP(zG%_T~Y_M(0<H2xK}y
> QK&2
> zLw7?5^KYaaPI~P3Bv0gMnw&xU3p~UMKoy{+sUmtn!DJ&*DE&q^5F<y?Klh6
> I{qidl
> zsiK*Afz<}OiIQlPS{T)UkP6uVA^`zC6$TG97zycLl<r26wMJ>7!6|h~Z^(^b$Ky`v
> zRv59<QpAQ@^hhE8Lm!Z(*-(4-
> e@Tx$%1o5mkbhf7<YPVm{5Jmi*{~qHS(IqVkVK4U
> z)*K3XhX9%v%MkV5V!)NR^C4y*id%qUmr`4Jl(zUE;t#hNTGQ<exO&BPWz;Hy
> )Z>)C
> za7rgVqhXNz3bc(HF8&B<xqK$M7FVxBI_LjVziN#rc@YVm_8>I-
> 9ZBPA{lv3a^#8RD
> zY0jGicPB=A)5Jh40UXk-Jg4M!JEhu2Ni;|Y#1M2BGWc*k41r{c^M9%H&YBa-
> z7~#a
> z)hI_OdlK?~sOI-bK5AHGt(=l-
> gil#E5ZJ%NojUY@%6OvkCWgj(QNK6#XLz7H?!{P5
> z;ZVE+c4<G+`VQYRDIKmMrsG@E(4$%6PS_bZVdKST%b<b~v$$dFmqP_*<s27
> 1F@&1g
> z)g!#Z?Liwp$=dEqv)3rRVg?|V?f=r$VM5Bu+xkSwUN3aeG)t7Kdd1TH&3ac>p
> MaRb
> z#JNg8qo=d3);>?J7=KNScZ>SBMEy=N0MvlJ-
> qm{6lkJG_b;S3$^q;%*|1GT}CHS{z
> zz~4k-`WO4+@i=U1OeD<th^c-
> 2^F8vdQ_ulEFog{O*(j{uC(i^3cwwW0B^TovoXO#A
> z1(1~oMENp6G3wNZO@KNgy(Sd3XYG*F6?ktrHx<59{-
> hXGA|IN<d4LO9p99?{?UdgF
> z*e-
> R2rz^DOorDG^J_MQQAEEF$A;Y!Q<j&F)y#JQ~h|<Cymvr38KmR+j71y{Ag_ji3
> z4#L3rmcIcAjrY1jH=Pp^KftV<<GP(81GNp%Uw7$Wb?LiY<Ms)!^u^I8e%2;%^
> o0Vy
> zg~L@57p3o$D~R+Ov-SgEJr_BOltaI(Jdmr4)nI7w-
> XH|6am!cy7DC|agfU%pk>2z=
> z;0LYeI%Pe-
> rCXF9CMtE2qx!n619d1{5i6i<At=Uy;ydzDX15UJEWMpkeWr#kv}LC`
> z;@celPJ^@bE&jm;Xf~&`R<ubHwI}p3MUseR!5_(RjoBTKKo#9$B&v7nUG+%s
> 68Y!%
> zQsk7ibF<!?g`Bi7i5@d;)_F6<1JN+7mW!oP9M2d;V>>Z&vhb1xlg#PN%X8|Ph8
> ^*p
> ziiVw~UYURJF?jdrNCV?!ywWngyx$0bQ(A`p{w}KjnbI<!F`I+!^r%(Xq&AX4TCef
> %
> z9J31oT}2XvZqm8*uQNFygZ~Q?-$D_c{|htU@?#P=7_nwTB9&>zEyeYFg-
> }Hr3CUQ8
> ztE1?#_@E+#2||)lRD%-
> rE>~!_4o<@F)OV_Mg4t=lBfUbKs7nQW)p<lOv>9C?E4(;U
> zQZU;j#<z7I83NQV#nQK$UWw`%QI^XT%veIbi~}J)Ppe!BG41uRK|d@{Bj{Y8C
> bZ#?
> z`YdIyk3@|GNpi9t#;_jMQhnXgA3+OhyJ{#&Ehrouh$>phWIV8jPE~}b@&Zb5R
> _J_3
> z`ckyOZ_Tc#gH8F4d^J!H6-*CMkD`aah<euCj`$AN+|JTkSV;z1$)`*~RXsK-s5JOl
> zljjz}f7a|N7J_qiLNEhe03CsP!R$1(8}M5qZLSJ_Yj<7bh_NoKyDs3`&u@*yD$vhn
> z>+ol88ZxrFk;*_KHUo*<(mJRs*Ns8%o2|2ag)W!QZ|P*cF+=H$S}zP#f!a3s*B+
> @m
> za>PU~EUP=<`WqrxzLjPsHtC0CqmI&3e5(%$A>`13dOS|1X%F3$;T+Sg^)eU#{2
> mAY
> z{Oj;Dj;siJ+qV#3nK1kO8%^R1VVRj^nXz%O|IKK#*(O+QsA@ktp@uLtmIFuyd
> kh;<
> zpE8}J^@hCYAMiXUlz*+W^i$sdYdny*3llR?X~G+*$|Y~`TGAW1^a(Z-
> ?Bz1nSYH8q
> z;Y?7B6~HT8oXS*~LZ9=v0`Cwag*j3oTmvakVTqW0a4{)LN*~?KobZWwg}Jyh`X
> D&g
> z<_{i=Nm-l=t*HnXq9(-
> dXFsDths1zTf;b2O`EvjQf)&YzGb|~FZh9AVyAbTgE37oN
> zbvdPsu!RUn>Fof+VH!g>^{TlOMTsvyDEX;H1L*Q|5bb1iSq*WRiRk|oi~n}|DH
> _tn
> zE3HaEguuyz2o-TD#X__SL*g1~vINn?jofmCRZfdl{=o$JFq;KKi+)%H71*TI+-Brr
> zhGRwsmr|$`-
> ~z4)?AR<8l(rObK*7ApfLNL0Hgmj_CXVYcKef(raw{+CUuizd1M_nK
> zeHIJn+1NibKAz(`(A(6x+Bfk2CNMSLTT!4t?^}^O2=9jfCGT#Ky&&&1`}3~pyin+
> %
> z#tM5>wHL{k0ukX+oQsF=O90b}G)6K6%(4Sc2hlqzbfgA5nS`Zl8Y)Ed!XA~jJ-
> ?nm
> zj2on$p8=@RJc2M?t>+HrW0mS(OM+)B?wE1)$0WEYOmjg6`>7;2!L029%%<?_
> <I=eB
> zl!W+07_U61H^X@-
> _E{vK97_Vkd1$XB0eqJMZEd!;ur&efV!*a5%PnDB0{908yb`~#
> zm;nAP33MiaZ43yJeBp`&uo*zIPGg$JPmK!6OF-
> tT5OV@DLxmJ3Amda>Q35hjg=|hh
> zGE_)=0`mDatnoPRp|CXp>{WmdK_RvTaJPo(3yTTh76$a;7j`CqPXh?IP`F)dhZ6J
> =
> z@?Fp}B2q5wR)x39D}jn0TFCLOe@2ehmtvXcckt#bQp)|3%Ju5VH?R)wO^c<)c
> 5A-C
> zb9I>0Yu;xSPzz`=J&9~2eyIDis=ZT5{YjpVg4Gu@kqb}x&@wpC^?i6akM);;7PZ2
> E
> z3murWqzd&kav*=n_I`dPY)DA`4<Pt^zaoahxe4fAKnpk!B)2AX*k+asVN7K<C{
> EOg
> zT%n`nhU>2*;Ccmk0|Sm9H})C=wkg0X8PGKP^2-S5Q-H$&Ordrc9%oPu-
> a_)N{%$=n
> z!yKKQR{%f4p)Z=Vx}^v)6O~B7WVO_oGl&&$fl@jxS=w}7=~zVyb5Se{&me}iq
> O1*-
> zijC(N9YHzgfo)W4iav`#lwjr*ZRP{U8X?7Zm86t$BcEiWVtiQ6CdZy^p}$`Rfs>EL
> z3bHy5aYh=4dexGd{YyTBlIPVcbPUzIzk(Vxqr4wjLPtO6WR)8L>;gMfFPZXs+?y|
> l
> zaZ2-P-I<2cSwNwBG20>LV?8wgP4RG6*}^Dq-
> rROcm@{kD@c@P!6OW7Wh%VtH1r)MA
> z;2DjIExlv79|;}ii*>N(E3~q205e8C#==>+A1SIgCrJGnxi2n;d7!g=`@33aQ5BHr
> z|3Zg>ENDT+YBeOdAH@VVzJzTFU;_hI%?75J0M2K?i>bIX0W70hH$0@HT0dy
> eY85&@
> zjhCgR)RM=_uA;K@6J_-
> bIG{a_BQi>9o|(WQ{X#cp&U4^ACDU?XLdKN92ZN&?Lsr6a
> zisZ+E$%Gg0?gY0^ONmV~=)xv6Ej<;<o)iRxyc&Y$7K-G`6a-
> 9uG=#hag~=%hnC@u^
> z<^;m<6a>uAGz3cm;l!9ElUS+)0(eBHFp_DHPoV8eK^u~!Q<Om13<RO$_hTJtV
> J<Nm
> z{D=W{CQ?fRcs~PXW%X8tvlGAu21IL_!=?mqK7g76Gm@3&CJ>5K5U^sXN!Ob
> |xF`i-
> zXcFNc351hZCab_}291K8K-iyxkd;I@mOywu1tB|$a3X>5XbQrxB*JG2gk>oRSl-
> ik
> z=u03tfgp4kv9uLlp8(##fJ4Z@I}^Yw8Sn?GZlOpX1|X3wl9yn1p(zxrP+Co9oo10o
> zub`UNE%<GDI6Kj_uQT9}o`-
> 8lMpGRCYNYV`5TvABX2V6Y?kvqwsJ;ijpdr#oJmx3J
> z-OtF;V3!hdH2{cSMR7w)pQ?uI!Ri)sjaKzuqTZ*|UFf)2pVH^t@)ap;F`?`G^*Oi9
> zr64eV6$Gu%x#joGNx@j3QxLR1=ayeiL12AOLD2e~TmD%J0_$@Mg4XBU@_i
> `?tk2aC
> z(&yZARSFvGa|#`;&$;C(Kwy2YJkjUe@@NL+3b~<)KIfJ*8L(fUbIYHPrs7;`pL5H-
> z0BY^Z`kYd!*5};vD=7%9&nXC6pL5GUPeEXPPC?N6oLgR-
> g24Kmf}r&|x4a+)f%Q2B
> zLF;pFxikfV^*IGW>vL}T(i8;N=M)63&$;EZmnX$!eNI8p`kY(t0m6Vj=a#oK;PmN
> v
> z)5AN|KIfKy&wx3XFXF=83E-
> 0q_=Df1^clC@0w63JZNcuCj$wGEaCbbL&yL5CGv2`a
> zr|DR9YDQo@5lNI_wyu>#%$c9k>D}@Kg=~>kBUi-
> 86(No&@&U&CKfqrKbhSPW`7cu-
> zTIlPRKLP}-
> 6k#Qo`Yy$PGz9EPh_n+3)UDmJ8H*4Y!54swB*jgM?Antw=kqM0U`3gz
> zhxe-
> ?xm*4R&?xjkW?@7&B1vIIA&c`=xDA^{3RfBdwrQAvOm8+3A|TUoFT&j#8_EX
> h
> zm1(i`Xgd5!^aV@`k!e+Au%0hN8fw?{i2H?F;1u-
> 5Nb{{9AqmVWapkUgA2S{aj^R~p
> zLkkm?O-Zc0|5<?hYy4p}TIyuOEqeh0w-
> #{g?;b+R)*QK8{x<RyW&iQiAj+PW$nN_m
> zQ+5#usmdmj(AN~EK@0RWMTL|!lTHazqH4}VnxlD4^ei;jpWnAf4dnM#KtNy$
> Is1^!
> zs5>Bo6pM=oli(-7RwOtHd(d188+DYvrj0soc_~l_j5==lHU{iB>bT`{05wu<)TviT
> z9k(n&PfC45nR)gbb=<O%k?S|=xaChTWus0t7C92}DrsSSB4RuM41y%%&sP9Zz
> 2<te
> z7AXH#0b0=`9!mfp2QVe_{uqylEqyeBm`)UYT=>2Oay@djur~Y7WLV44lHt41pX
> QJ8
> zh(<7@S<Il#rGfSc&?ZKbw6lRls<Fy-pDIeS$_v;+BEeoej*&Q7!^{CBbs&jF&k_3s
> zjmWnVMZ|^!lwGcYP9>=A|Aa00q{SW$TNA?lb0qpxw?HPI1g-
> =yoSnegjmH9*;#o}|
> z1fls<B8g(763Lm_lX%pShjCnyk+755mmpi{xaOiu%;7dpYbYIn+S(R&YNWKg@
> WN)H
> z-
> 535F;t54pm*=5;`~DQjj&CVjJ%Z3S*31ih&^WYnRe!9X_s8=0T7mO!%%hfK&)zz
> r
> zW57IZ2~{_6t~d`sg_{Lf14~if&yb<@K7Y5BlFIZfsozVethygXS-+!js<0bO<30sJ
> zIo+q{Ltvr(`w21K@_U!`6Vu;opap;0D3H*uTh32qfQgu?QDrkmicPq1vX38wR*1
> `R
> zqZ(|w<wFX{3gfkEE4)Oc<oFHhw6mo5TE#{Bdq<<NNbakkw+ycv<#aqVi3_++
> dd?x@
> zl#e?bNV%2di^r#}yqIo!xVl`>E;4|v*hQ2|qZCbUiy#>}Hk-dQjeHy4ut^alM1LfW
> ze;#9D!!8+0Dn5ATB#6`KGo61P8a&WjeDFnbGYnn`N_Zi~C>2t^6S-
> 7Q$;Apgl%Ilb
> z3p(-
> Iqy32##XmQKwHUdhgg>g@X|qh`@TVBjstx;hBrD#UI4#BGunI*~Y9{uD7iZGn
> zcJ`{0w)sd7Q@o;(%8mKva_Gb7m+SCt#ycWNi+2Gjm6i;wbiPtJv9hbx+wnB?{J
> $tK
> zyl{okt_$yg`V^o3gItc3Flk*Z6a8q?Iohl=iBjl?Gky*(9vF$eNj8F{DD-xeitR(W
> zA`Ur4!1ebT?n@_tp7dWNv_F}GJ|5_JkMibp+#tJ^D%?N{um)+17hZZGiTBYgld
> 1x6
> z3f&cU7)4@XN(#*$EMKs4c=bJlf(Y;Lg%@-
> }`y(khe*%v1f>CH+p91^^1D+7tx26Dt
> z1Z>}u0x1H7c+=$Tw$PI*Tq@#RRy66(5dUAqicUt+$>h#D!5#JVQ7|YhW?cHo
> @53DD
> zW@{C0xtof2;2jVbZb<<D2q2A)Z3)QJ46UDQbIXqam>6N)@)1009f<}lBm5)$A$
> )&4
> zoUe|&82=e1@={?#0$9#~Y?;WI08U^){K0UN0OsMDbw4Z<{pGggcshW!lh8q8
> vCJ*c
> zLMdVmE@QgR%NBn)V`3zA%iDn7-
> &wW~SM)EmA4qAHpDIvIwf<fcWHcq($UtorD@-B$
> zItXhO$GtiIF|{Xh#GWasqm5fG8dwwIB+DCFP1mMqf00@fY<apCjtsz8ttWL%7
> >;UE
> z+2C7GLElQ>q<7f^hBLSP1PUaEZnyji9<?_2_kK-D^4`-
> ^Q0jovU$*&ZeekbovA~Ba
> z@iJ-
> ld6kW$%8Y6#;g)@=m322KD@&rBr8TMXi4r%blt2*j6|KXo3?`9YMH!*}nUrS!
> zBi<X4f;G)_>*z^UUn=53AhMwGRM-
> Y76uqT`o|3v98pMlL|BmYI)~d>Z``N2u!e`-W
> zvE{qhUVOUCE|MQ{2JUg=O|UI+Pqpx;>3C`^K8T0<mpQmz?E9OGLDU)WR^z
> I`mMVBs
> zq<ZYZ<6U+cD0(4y&em4@&pKPcdosS>iat-
> Til>WGCH9Zm@s=GUixXSMu??aZHH)+p
> z-
> 9#uOZBxCX_hRfitEPRDn8B~Dz@9aCY&y`u(r&yV?~(gRIPxaH0<V;fx8FV3S{`Vw
> zmOrD}OJF8&Y3H?PvQ28P#ttWxlW9ZK2v{h3Ulm?(+XBt?4(Tm<8%jWQ6lz2X?
> +ol(
> zs-Ufk>9U1QJLkBSr%UkUoZ9U6VBuj-
> qntsR9U0&NKVS4X{(_1%xb~DSxa_1YSo=>K
> zzjf`${8q1=w7lK&yND(&>%`EHo<ITNB^qC$&>$2#-Dl^wykVF2+NGU#-
> u71A)O-H1
> zGF=GnjNMpgo4V%1Ri9yt#g3`Mu~o6tI<qI;-
> g3}$<h0H}sZTs_pVk>Y>DHFG=k?P%
> zlgEg1!n7|vXo~G9ea}BU8Fc&53&75nPEUa?kj8Hn{()VjxP2HXH{vD-
> %CjZmSfJb_
> z`nToU^}7+JnC<%Qg1_%F{=ud2p#t_Z1=!ns#iWuO_-@DMaT~v-
> d}Ifgj%9(ZnL@m~
> zw3~mJw(RmP??TLVQ8EO+<wd0Z(F(rhNtS5ztnKh2HLlyUa9wl*Ql1;vMSJN!8
> U$L;
> zA%(qxJ`A3PyD-
> BD8M?)g&)URs+g0%JBzVKUN$?ll3GBx2CBYvg!4;k)cux{+O~L+i
> z66{-
> <#Qu2_Y@#YV%;*EePTkb<G;n&qn(u|Z`%VzAxHr;$U9^Jq)AAg|@<)g8Eo8&~
> z=uLc!9|=_fw?IFh>(-
> q;0gy*u+_}A@1RXDh{^hCktzL!xi4<|Z?n(%6Z6*d=`ZM^R
> zn$H+)R0)*a2TWC|e@PNJaZeKb>m)djN-
> 6tEoaoTlpNZAg^FEky+lxODLu<PQ={=`(
> z#1`DnT%1GNBOk=O(6)^Db}`=N|8iv0Kb%rkg&>t%r2TfO+#q$^rD-
> <$`<?6ptT}W3
> zBSzssG~kj2q#_@u*`+i7qeemMJJTZ_Mmf`{T|(rz-
> hZSp@=v{O+@bQ&l(cb&01@=x
> zG1~Np?Q|Q550P9Iwot`6VO&H2qM+}w>wARwK5WgDZpjt=$I}HQ<NM-!1^-
> 76#CHqv
> z-JzS}0arEt3i@4fY*IQ#Gy?X|Bu8FI05GE87O?MtFRPHO`Sch8uD%-
> pZ1z0?FCZF(
> zkTpYyM{I50?ue`xu!YImwsw~dvjIWsvbK3&3%Yi%JJL(0&^sDpq+w%~|3hn=Y
> d7-!
> zz2>%sdxEal1?iywh#Na8kxRUHAY$SUd@M-
> lp&uEkr2hlFT(xI?DcP&rfIp_w)>gGw
> zdTreiA4pRflw5a|)G66_Ap1bnCfSc=bsvZdQfC2?W9h8dY*JM<0k<*TW3kJ=g
> QX5c
> zv$})!eF!?ReJQJ(aWJN@&9%>#b!N;7a@S*eh<{twY324Q-
> A>Q87$Cc7Yg=3G$qd>L
> zVE&!aW<L;g9YDP{Y2l7_N8SgA(!vwM%fwwoHV9+hg5aomdz<Tkzn8bQE$j)p
> 4y`*v
> zoq`zptj%@kMH-
> MG<6+yFL$)^id$utL+U$Q9vJM{jm`P(B6A`lZLq%C{V25_r{>aCM
> zGYjQWo&FDsFjvmnuJ6p+kNs?xwkjn=wY9n43Ei>{4TNR0iLkUXSSo;#HhYCFXs
> ?i?
> zaQH9NJYHxYF1<x&oP}8$a`B9O2|PalC_{Hu$k!uN3@z-
> o1+(nIS209Ui7NmU;;)Kv
> zG~3rBn?A4wU82zboSLggE+ExH`|ni9Nz@5Qr_la;74p6Ui3siOD&%!Q5WK5Tt
> MCLC
> zz>vSUjCg5XWr5zYpD!HEz_vb61H&5j4}eV{1Z{v~+jWQ(`t8eR^F{W}iAUWtCIo
> wg
> z;8|M`+xJd}yP*sD4ZJEs*Tyc;mv-
> S9Tj(PUg3a`R$$w%G_#B8ms$U^!d%U7QMlQ`s
> z7g)^ac@IpB1e5Rz>=GOvqK}Y5F42xJ_%J~=3)0(m+DNK=6qx+Ls|J&J8f1L(O9;
> 8K
> zEq*ls;Wy!SG1C6U3Vz37GRAM6Z4mwfWphI54o`u<FK1;wb`-
> D7@na7%wg+BUHw6<s
> zY}LE&N=jrEpT?%v&~=B4iIuly6JA6Kf87CT?ZGZV!mf3EAk!;<jau65R=|QTE5QC;
> z<~ElVnNYb^z8azihX|pnbHHIhyH)-
> %iU=?0G1pPZ$U0ylln{c>>vbqBARNH=c0+@9
> ztH0Zff<$U|$bgT^s8;zP%G>p41phfh({ACfs&T5cmMQ!&>ty`&K7cYR5&0)nwD
> `0$
> zbU)&Z40~`VGC-9oAj+$Wv-
> nO&ybHufHoY4@3~?#rdGtD<q8zpnfKe(M?nEYll)s&N
> zCHQ490{j7h1f|@j*M*k}TWHS}=!3xB@(+>E6u_QZ2s?D^rIcf%bUTTyqAp>mr
> $ztH
> z$-
> yBC%i+BsrZG)*qbd>GrTyoIHoc>)y{Wp|h)fs0Ql*a{@hu^>Vf**hymI7GHLs9O
> zfO(+>?TSEE3{A0ONWUE+nim$3esmg?pvUC7Qz>W*=EygrtSxvm=H3yN+H_
> *0{U!D3
> zLq#_LfG}Y2XQ+zb;=(m6t)LS%W_452->Z-
> G8nPl_4+zX?PBBewP$@m7Py(5P@1vCe
> zf!vFMxYC5^?g2xSVkC`fQK4Nc^?OERvr3~nN#kqK05&VVQYoF5D6Qc)0-
> xVH*Ra!W
> zWr`WM&vUsyn&HXyM|GY||5<FO6|%Zw!~ETb82n~hOz+2R1sZJs6-
> l7hI+l2NVYSe{
> zNd=5#0JqS-
> Q3V(QAc0oiAe^>YENPyJFH;A@YK>wg8!$33vO0(_y@fhc)U+F!_TqT)
> zX?tjiF?1`5w8XG-EbQ}T8rKjz)8}i_e$1lGwjexmr)>EW?H}K1D?Q!R8(U5il0cXE
> z&t`aQSs`a=#*XV)7l{>sF};V!-;2B#0X}{*oI(Z?mGBPIDO7{`%0%ia*!ql$>_Ofh
> zoE=BCZ&8hM2feP2?{tM8&{KVf!d7UWsuW81cude?M-
> c(++aO?!G;Jc)VJ%11%`wPe
> z3(g%Ww1-
> s4VFi*av_Gmsx&b*oJKrp{|3HCw8e#qN3ksq^X#b&#_zMMM654;HLP89}
> z3+<1ofcq2_SoGs6<hu$aO=$nI3aM5gdZGO%3M2+Ewo4WOCdrWIw`Sn;2&Yt
> OqOa|0
> zD-
> hoFA^5@ftC@&>(Bt8Su?`x6TgR*ri;lE!KO*BJ0_Y5T_w!!S41jgmUntfJgCGNV
> zyMSVb6cgxXk55_J=<eT9l$@O`+|ItW#9%^Su40K3n$@uiX)|eeVyQD;K?^BX6
> s84y
> zoCjcU!*^oznWj?Ifp4!-
> 5}*E`U<DmrGi6B2K2K80u<tXKt<~(n19>Z^O_*dqX2+mJ
> zyZ@AJe`2T-
> R<cj7Ww|(l07g=RsuTO3Q8(2K`{~5A@BrAZ6Y%*<oh@rW@j{H$*#nh%
> z#LA1r0ur(<7{OOsY}2|b0+S(dAsN)|vEAp3p?sS<h`zKUsVZYjmx}nxe1JZCQ1+J
> #
> z_)`9`O+u(}R#?{y>EmGo0yrjjm_th0twpMs2UYM}-@s&j-8Nba1Z-
> faFcBzPJi>Gg
> z$_V~b2%{c(D6j_5K8;t9pbe55ZSB;D=*1~C+2<N+;~jd%=|il?abKbNnDs?LWDJ
> }L
> zJ-|M#a!-
> FiiQF|1uw@|N*8>6c9nYAZAXh?K<ioxBP3!4J0X^Zv+LnY0*q54jVh@Y<
> z{V$esZWY%Zqc;pr=@gD65JU5^FJ=seFMMjB`W<FEP(<w5W<LZ$BzvI6QV(!({
> I8G_
> zFy&D!?crN~Ljd&@j;azmg=0Dbr)H$&Q?Ot<_TkKa(chQRoQL4*SAd6aWHg4&
> C7iv4
> z<L|~y{Sj7$I4+VvewmOFjiJI}R}%8mgdBQIL6mk2Y(XWMR-(gqu<-
> ~!adG%%o%cAu
> zWhlQT4W9?%o7#96B4@GmYyQDm5Qq{jCM4)o4CzhzGZ1u~|0Qj@7`PVSSB
> 0KpZ)9-Z
> zgV`b74R7;-
> aL1j>*%i=hUTXa5KZY+Y4tAx{dX}wizNK0S9&W>F7tl4<wQ}*oD2n@h
> zOT7>(7rM#~0ylZOJ$M+fc|!$$>lb!@>rs2~HTwE9V{&J750otgU$bLPYJ@1gDo
> Fd&
> zjI`YE|5)e!yk(d7UA+GS#-FdJX|xet{_8sX)ZB?)o8Y@|qW){X^;ROlZ*fi>Y7Z`$
> zI0WC~2)G;Zxm#MDzS{=Ys_XQ-
> h{HNt>5)2tpN;jHtw*Alqa4WDCK~W}!Nd$9*a`Ns
> zCt6PMTlxe9A|Ps;m?q#odtKxsLmj?!3~oo})-
> (K;9!w~e{PeoW2gt+R?gJypzR@wd
> zHFnFHBdo06menb}7Kx@~kx;)Aj5Xj}A253cKGG)97ecm)Lu@E}E@Iao#$y8E)4
> HkC
> zE&P`G;F+I2-BLGofu-ISvg+yrc;IK_N!rPzLF3djk%VanNGcH7#m|0?idGBL_P04L
> z6~RLQb^|Dk+eQ=6;2}V(OLyKsLI~O>4!2w`?3^`JH~ms?Iue<1zECsXmY|IV-
> >Vl<
> zJ21`TYa{eXd&@4*D1NJrY7NXv!=D@BZR-
> p|+Z{vfZFgi~@W2=SZa7&}>L8=}CfE_2
> zH{RoZQGEIg+(p#?k<Qw7p9PbytwFSqy3G5!ycZEDJb!igO(=|B?_f#vb-
> ~wr&X&1d
> zUdzH$?G?@I^3!<6=5)fx`=x4NS4@j|GUGefVU0}3HT{fuqOr@Y9Oa<+;#6KD
> A7R&7
> z^vv7-j|_vdQ+5G%z9e>z(^7omjnV7!MT{MK-
> EclTCT<`*%x@_l)Juod8T3|6SK&+L
> zZcwHffBRO5r@%nfDz^^`FOi?P0Ni&0c>M+76$)I@X$f>nBd~Q^gl~1jp-
> `H6UklBN
> z&FVMu#tX<`V6@WDli?UXoWdLB0q_#}Zx?|7<pS_$E&zW-
> f&ZV$pbl|oU!pHMRb$*I
> zA36<piVv#2pD2S48Im^MXydsxcnTBoSFmEhKEv59XJhXGwc#_+m^Jv8HMsB
> K$9VP~
> z)yZqstN^n9fOg$2zyFnjyb2KiKXq&VqEwXny;pL4qrsS+BV<O6*2$;;nymCEDjk
> Xk
> z6w1TZx-LsVnpK=EK#CcQYk-
> 51F*Dw^E{^@K+<nBTd^NheMJK&}5O3V^Y|T6&m#9Ve
> zBg_AZZcUJ}X$@lRXU8TiO@?WEtd-
> Q$spugYp#rPu36xXVx>toflz_a8IR{ni0fbd3
> z->Tx=mB8sxaLDRzkIn%YekHY@CsZ0mi4qs7G%im-
> JSt8$AXJ|f!k^x+nDXsxPm;E#
> zLr1aXDQ8_^Y{P_s83gvLP%P!eCx9f%K6wlyxKDlwgoyEd@^BUM8$cACI3_ui^
> AkYm
> zo&mO?aT@>1F$@uC4{^AGQomG@u0#Xjjl??&(MMEhwgSbP**=-
> +^Jz*gS96bp3d(GH
> z`2mV0knt)q7=d7qyhi1MY(gRWsS3f%H<i;W74iunLfhr|f>QJ!*LnX$w8&00S`$>
> f
> zR}&>SsgOS=AVXEi(|}+!X~SFXee!4Uj&y&70V%ayMI)O~)U{v5sZT&|QgO&86r
> AT&
> z92+3YsDm{zT06tx9n9C`@DA2z)IN;`?n4xF;E=WJ5M&i#lM8~hA-
> Kucu_i$9)`MeN
> zR#NO%25|U#QekM=mlJ?;5ksK>H|YYRfN^^;PM(frc&`%uUl^Orn2tE{u`Q-
> @j=Lj$
> zID*3!Fgft$rvnpc@29bAPe=3&)sTXk2Gp;BYG<eh6;%&9V(URqw!O{dP~)M`@
> TIJ>
> zPX%uj*t-QMt@l;lhH#fo57Lg3JIIcJ`z?eBRnCA29VF#kaNALi)jttOG)!|M2(3U7
> zM2BHo2B5j0S>DH1Jk$HIq(d(WbFuLSulzbaSrkH>*#yccuG>L%-
> HFbEYDJ=fD7^^h
> z3<={<3{e`6I7(lOD%oNrc1bJLt@06t`cDU?ZdIvwA>c*{`q2SrlqL>7MYU8H%~uO
> C
> zZCnT<baapPMG6n;t6EGBtgz13PLUU1gQDOi=tIh+4LI=TQ#y<fslC+1+1Q5~p2
> ~O|
> z)<*gvpGhY`krnhXD|iv$@H7RbmQbkgiP9VLYPy4|i!mGU<gfr6rqL}|TtZB1Gbr
> ds
> z;q?Vr5<564an#n^*JvxTlh9$o&2a$2#fWv#T3?XCJx%V3BuMg~G+>;4Gwc``Lc
> v#w
> zFXl7B+3pznz;5|>q&sZ7X|khxiDwSrAfi>%M17y=kAJyp5@Ec}wA({GThaLN7_?
> #}
> zd(?tBmncPy$(^y2nx9Sba6fpcS9o}ucsK#)5Y#i*yj}6hDlRGe0bqn5BkG}H#e}_$
> zuxGOP0d{mA{#?RmVuXh23IB({7yaAQm|@>CmJItU(0TxCO!7+P@mtlZ&!<J
> @!>=lJ
> zZza{vB3h94A!<cE3<{&kAUx~_ZukSG+yhiDM=f^>O*8!g(vea!)y9h7!Qen{hNK
> P<
> z1%#j^^$eo02fm6t-
> g?vwonsIDKAFbS>2Yt`A9eJeAZa`2>7<mXUC+Aeuz$jM<@<@6
> zrjr>kpirfNn(oFzynGk(*f$_`feW=sj5@$A3cX(ty=zfM`EU%|O#d4YD2a&}U5(c
> T
> z%np<57mA?LN!kK1NxluLfk5b(dt+Jh8nRtF4XRr{%94AL7nLue^tdx(C|~o`sRFC
> ?
> z)$_aZFo(y{f)qhOqX?~-
> QYXS8ilG?};*Gb%qpRyg*z(ZQ0zK2$`O<!QC{uG!%tI&o
> zyeEh82nOotjmz(q^mnM}Sk{~OI;9ixXe6C*521>$9QwCpC617(i%+2K7Q@-
> WbgYXn
> zyNL86yISL(iyWbwzjC2U91DW&5|u3HJ@qg%CYqH-BsvDtOp_tRjO-
> l9LC(@*LgKI@
> z$mbmgl|snH<V<<{S>lvtUc^kjDqtZCFnVH`6z!E?VbaRr-5|fuhDo-
> ;W4eeVjBqp_
> zy<DS~_!D;9(B2P_JH$$K%TZ>~Z#zKbe%4M{SL%^xGvXA=(ZT^4q!Qc>I1@`f!<
> 0_2
> z)W+3s!}>lcVs7d8SHYm(!w@ZvTK55z3m+b5efM!>gl;3u?ZA}7gpxs9khxO0Bh;
> q$
> zD>~v}&jt16l1|dP4lN``p)S7VBwF7^37NWE>p{Myn?Yb0uOJajYeDMINck|?<U
> Awc
> z#YO3Lxfm5Ar}alv%D-J7vlho=nbS+L!6x1nG>k@!c8ckoy-
> ?bP4Mk`MZ+eMgqGyq)
> ze?O>)UEMXk)H@U_FZAI3G^md~){jPMe;Ta{4NnP*`${>_Mev!@ZiPf7s8dM
> b?@M@(
> zV-lsyX}#%q^5nW0)<|aIAl4x`L*QRKz-(Z@LZ8C9g-{>1{Xl(ZPe*hfa#mAl1Uf-_
> z2o0-
> 1S{{vwn|L7RlwjR&umwP&!%F$EAm$d)S}<_+=svP?I=XL9GAyCdk4_2`mGM#;
> zjwxQk5PbjDV(DwmSBlv4SE#eK4fSNw$uamgrA^R@dRp&}Z*!IIzYniA5%CNn
> 1D2`!
> zcG6ntDS;$8q?*^y;p{`V(Sf$l(6DhkCV_|vLc?~#dD0<XSRgy|Iee3}Eod;d>ER%}
> z=pg4AJ9=#5yfGGHr7nPlmRfMi*fBF)r%O77WACt@k1ZTHd~CBz+D|dt1lmhr#
> %r+&
> zG!#%cbS-
> *wxLgS(KF07RM=+<v(IcN_V?9Vg_FU{jTjv1z3PQdK$gu+s32za1TCAsg
> zM#a~CNP*g!_r-
> wM6z_sCXL<r_pTX&<qdEnw^v1Eix2_X^Ib=8k_D<KRPaJ37bHrbD
> z29_CJU<>2THVSV>?Q)Je5*y08357Dn@1Rk{D;A<u)p{|ou+7!_4=l!oz7vOY!zo
> <O
> zKy8mh|1RZ_!sz@8qrksBQ-
> `H7tSx1UPl#FFjxltETL<6rmn<+Mz2TC!6PcmT(hqq5
> z(}0QoS|46S9duq%)jb&;e`vh|+Y{{@tdrx|B!^dX^~(EfXJBo+we7EM5Cr@@A^
> Oi|
> z@-2%fbo8Gc#<#G5(0{hTgICcDI~;uYcqSE(-
> phi^pZTbmWbY&n^zS(X3+Y(5Z)O>E
> zC-4t<prE?MOMy3BNdvSk`eifU5=0(SnI0IdtV7u6@6++Ew;|u*-
> )oHCpd`|w*HVHH
> zf0)%YnHU>NjKM2;(UCC<Z-
> ?V&{Kc{ylFs3e7|CSBfZZ3p8Lhw&ol<E(M3*#GLnOUK
> z$y1_ELv%Y>LP8e}Gv3Z#%eOqMq>4NR{6jA(>8UFVaW>tb#NWJ+a(wHrl|rUy
> D<v4C
> zn3?P~6Q9&Fin@!Mrb8uDS52N9%Kagf=nBn~Zw}?&^396$pDk*}0en?YxW>J
> wkiJOO
> zL6wg+(04J!xNsz2psGE32hx<A#d0d}gg2BpDQ-
> 0h>68vD_5&`K@DCf&5%?B*A1nH!
> zFa<@-sNPe9=UHen>Q(+|I^XgL#n1leP`>5o3M>t);{LNZ5ifw8=pGDrOvx-
> *OtwZg
> zmVHy3V?PXQf0Sn77qTF65iQ<ghPKcL%NNJEI?41=RVLs19Offp=(3@OsPSW@
> K?9Fp
> zTus(Ih%sJ}6ioeDA_b*He@S#;N5fNWLzHgsBSRXg*$0gj*{JGbR25x{5;oXU=z9j
> ?
> zuNZO@<L`*ka5&f>5gIm=ocuI=z{PL90eCoLQyHN@y&Sf|Fs>ksJi^#ACx_osISl
> (4
> zXJ+HioGc`GBq}rU=XSh;xE<Rh%P<XW#C)_KFD-
> j94RnKw4X|pw&a?qufhpoc;Dufe
> zh&HTTTXB_Ok)?>=dKzn5g*K$kavU8QTi%{PEA(1}iXV_*`cEpY+sL;(#X4p*4JRE
> c
> zDYWpf6#LL&Xvb6=EzWYz>iL#?k&5m|P@{IRtP~~2vNi3wBu5`1kOoJB$tZg(&u
> ?)U
> zU>(EphCtAx$%S;J9CZ4I6$0UmS|(@_Nm-~$X@-
> <?0hAo7xJoW2rvy1jo@ft@l8m1D
> ztAD9EO+Y`L363U$Aaxaow6g%GVUULxM|C>K^hNz3$^;XoeuBX=hHA1A2k>
> ZX3dIh%
> z0s1{4;&td47<xHo5PjxV<FS2X5$Zq$w!aXcnfcGAugU{#E`#NFV{<ajd+gy`b5R`x
> zWixvSI*Rh41SagPAyC^zpziR0cnEF<3m<#UByfhk<@9QB^WoR@l!JKFf5hY+e
> Vz&y
> z!J@}H7BP#CU3OmfK!eA?*x9S6ufk3Ur+21xjDrdA_7l*Nzt<S>Zm{x?V+-
> NhdaB(j
> zbm09LMQ<K>ybs^EhgP3Khgow8IQlTBi3h7`)-
> 4lIN<8yUY#iy?WCi{V4u8F)V&B3j
> zC3IkIlp~5Xs%KE~GzqhlH%J3=H9`$1hJR?vIc`65rRb0*2Zm5}$UQ(nN5`|jResbe
> z4n165r{l~~dcA+(V=-
> iyryRjFu3H>;0M&@R?EqXrH|<}BMh<%N9N0sNGUAydDB#p%
> z!Lf?DU26-
> rg(GTWmBhP9)7e(|HEAaqPQeurUz}k^^LZ=DZ@Hu|iEivBSXa#$vM&4T
> z*bK#4x$u0RvsWFJ=I<~Tlh1SV_QT}Y6q0*|bw}`85Dq2+q3Q3agW{RPbVA^n9
> )u&p
> zy8l+flvgQCA=PI$8wo)=6}yE7pwLX6;9DJMC$64?0eEf@d?lP`lB@LXrc7W_k*ua
> G
> z5qwbOhwww;${MEtr1f>QEfk>N77LRWT%}*Q_;L(5YujDYIbq#LI!NyfFpuKEN;
> m1k
> zVUt|XAXEYW?XGd#sWE8Rh0ea7sv6dW)siX}4vlAFAa*GVFPg!-
> d>z(*saIof8<B`*
> z69r090koFlktF*D%n)n>dYi6FC3!uCMU!y&Y#Y9v!Y&3^>5=9u?QI5p`u2qmN2
> H={
> z5eEx+(W7(fkJ8It3}F-
> qSFH!5*c1AUYuq+sR5}M<w`1WD4Y_{ZM;!R#TepBYRKU0V
> z4hiDL7MhEAA7MGR5y}tXlTmQY4%Mz&9}N+*1gXz~q+L3sh`*i0SLk_160^CW
> VP*tq
> zmu9I#1ELX25O0=4kNE*2M+_j-pcAIA>u~aD@h(^C(dNg6wp@#Yj-
> kb=0oxL?x%3|-
> zWQ#6`*PxOh3hx5lJkf%ev5!MH5#CRWRXAZ3JCnTim@;{DMgKV+|0tWyeNTt
> jfFc46
> zN;>d?QCY;Pi)5wX$T8-
> 1Vrnu8F#+=qaC0S&tW0pjW*kh@jGJxL0*a<Z{ok?Z3eVvY
> zv31GekL$f<2vGn7OU*M<BrYW4V~PPk+MF-
> !G+4$nS<~%!t%(yuA!H|oi}$@xvOGAQ
> z3F>WhN}3sxQF^V|Iqeh2x!N(^NoiDKz5oZxGL4$CAgnb4H3%(4K99i}?HMx=5-
> bq?
> zaG4PwewZ#4xj?m>2lQkL+FR$KQKhxdpbZo&ZO)eV(IKVixF=)tAR=4P>cRSEx
> Qn6^
> zoa>D+LH;s|V*4D@4(hvxk&e>N=8-
> #*4U6>{c4BE!)YD!Crq`p+ahOJ61>{Nb3|2Ls
> zvbbr8Ubn-H+kkh)*yH00%rRpES;GETBaYC_Li+!V$ah0tOf+c^(s}D+qs(A#n!?;i
> zh;rmRz+7=>i5{!hnD)gx$#y<x3tDV#0UZJXx%U2!Eho@g2CWa%496q?6m2E?J
> 9SL-
> zH$gF6n9f8G5OogJX)5f|uqI>XwvVu`QLq*f)?pc+ZRh#Qu;ef;!#jd3cO`ae(B6JA
> zzLzZ-9OYlm;9t&y$6pjlthXe#J6(7UMD*{AJ3{qfqKl4RABVzNCp#pT$}8!A6JtSJ
> zg>Iw&P0T@J<Q6a@jyoro{*x_j-
> %Kqz75xVJf1vzHlwbOHZ#q_eVmWNRi@k!z$2@Q&
> zY!!&jk_R4-4*qbG@3zeuh<t(Sz}fWtgTJIgr3Y5d!hF~%?Q&p?x#R9_ee6`*G<-
> sX
> z1q>E&J7|-~F=(7`Sqv+1j5|;sG-
> L{GI!8Rh_P3mfIsxbXv+x&FkTi$1|K?D(&VMw+
> zGr|ck7=O(X-z5ZbP%V~{LF+i9l}EJV-
> 41+FKpi$Tug@W+xk8RURxP&89E*Mq4ma!h
> z)@Kx+4g7;YRe822c*c8~ZC`<BiC8uWjAgu?K{cPSYF?nSgRuN0;Jlxfl=`u(zc9<5
> z28CT5tW4~FB`|isVpS5mF$Zb$GN=+2d!{2a7^tV%)y)O2kQjG`D&kK4F2n_dc
> @b0t
> z9WjOOQZ@|HdI~tZ@bC1L?0nxFUkDo<!Tn1wt@~}w!y^}LzNF#ipNtQ@wPt?
> bW$^{~
> ze)o{vI5&LQ`)pCc-
> rOH7zinvQvV+4Poyu+4)zDPR{o!+GNByszKR@<|8_O!ve){*{
> zl&^nxOvz0@{_@_x@AuvE-CIqM{Pp@@9JBp!^Ty%_)~$Ky*-
> 0DnX8!3?*RMOXhhBC0
> zFYXz?>R!{4H~%*Lr?a^ASC>Uxlm2u}Z2Gd({+la5t3GGQdeeg*PQU5sW%MgS
> I7~nN
> zaJ2d$KQ)_sW~h?cquwoRmFIzQvkKQp6{^qf0q}wOMHk5D4Wr{4F5Pdq*}dq
> =FYb+U
> z^w~PT!=-
> r1giD7<3qh{o^cy%XC!fpVhD189%NSxbaznZQ;xer{cKba~M)1*5>aWD*
> zUi@Tw14<>KjhE-8S@Fo|UCgCz0KHM5mkxSH!%!n?W%MQvLeH1ht21-
> ZFD^I+ZX_-&
> zrEvyTy;{Bq80JZw85hgPI7UA$e-
> 6_9@>Tw{{3_&A#7;c2^3VbO%=+pyGw#>~$Bn^7
> z`B*7V)UV|ee?-
> 4f%UA2y@`*nxhwaEpd9{8mpZJ@Ynm?d^;_rG~#0RTiwKuev-V7Mk
> zPjCU(BwU()wES6sk%OgrSiZ`imQQe^L9b<5zRI7LPxaez-KpiP{Bh}=!3-
> Fcwc=We
> zi)2jHujUi|3S19s`C9#IKGDA&*Uz<lwSMc6_5^*R@k?BIqm-
> cUGr09;JX79GTvUH4
> zE~?**`>p9o{g8gC9?}ElQ(Ibxw6OBTKi=VTHMpkXqWtl=56oYw<%55`?c;nIB?<
> n@
> z@l0<Osf{%HT)H_ypY$>x*L7+>(I1#UTgzAJZ%9w_M|8i9i|jz-Z(#o2TE1F-{g6xh
> z@wW>3B&Sw>U_Ol#EMG0}%Sh_~Cgjn$L~?8LEkQ?5yK`>EgH`KrD%jj%ImqLl
> di48+
> zqksJ3ui~68O>aog%_x~Vt#tZ~8_TjeUU7h?94`KWj^~CbMYC??tW*#)cIo{>?jy
> qo
> z=M_a{tzdBJe0&Uw=1|f3zGTslA9=sf`jJ7abx4MBXl7RSupBxUU-?=8{i6SiTB)eU
> z0qlw6Hl!<k)ePv*VdwPCCz(64I0Qmm01u5=sv$h;Gf&{!H~{Y=z#O=Uo)3M|inI
> ?G
> z(Q@M=nQ`N?aj8QLQlLeZsP#7@IhOh{u7UU(o(b9O2f-
> T#7}4!i=~<E9fQucjl0uK{
> zA+>&zNvq$C<PBibjEi_BQX_DY{OeV^<Trh|$_C&K2aMz|f}RMs2x&7e`T+M*
> TpGP^
> z0Y>yXVRwXAkLPw=!T`LB0V8_sH<lX<&5Wf#?8cJdtc)8wf*V^lmK!maD;qm@
> #MrTA
> z#4tS}69D8BjG>I+MwD@7Be=4%u_H!|9Z@#6Y{b|yJfj4#PzZ=b5#(6W5kLhVA
> +eGu
> zMrA;TN&|!k!az17Iby_!GW<893`8k~8!pnN4}F)qnH$$Iq<hi0xUma2?j$a&ibw
> 5R
> zh>MoB2~V>F!Y4d21<#7-&wwxxF9Ntmk9-
> teUk|_o8IJJGV9bX$)7t9|v_pGJdl5g>
> zUL0`XyE!Y8jkrb;3>V$VH1cqfT|J@Ft45mqX)S1x4d5S{8JCM|C>2tFy(nx=v6s~T
> zNB9(9Q2kcWB|M_L8CPomBfLv-
> {l8!@CNwmKexxTWE)SloaRJ11NP0w5B!1&R(m#He
> ze#s);%0;^4OLPz3rQ5k!_t;%J-(v22i?}6sarfQDJ$e^+ccpL1mE3o)<XleQ`c=L{
> zhwlc5Z?xSvd#SIW)>q;#pS;BP-
> DN((JTpN#CDFhCp}(MO(QgoYN2&DmbfeLjm6er~
> zlQVqy@Z8+oyu7^p{Cu<7Y_V7h3kxSqm@s+r<dTvS^bd476IV8xE1QU3ME@q
> 1aihyP
> z(}0W=X#Wyg#^}*ySC1~6IJ)eH(Pd@y?}oC`6U#<lUDiJ%1v+@fgb8JnCX`)2p={
> cO
> zvNHNNt!%>eWfLZq_0LFw4xWMkyKM%SpTp&k;PUh7-
> v~tP`CLYR|BMvq;2AkN`NMPa
> zN95$^<>cqnzr6gM5&1d8^ZRF{KnKsr&CS0gH$N{o|I*z2eEN53er{fV?j`yCGg6
> >~
> zXRz6b3FqEsb0!o0%QkUF6K8;*z%(V1kpdk&!)P>R8co?oQ;yMOqJKFiW46hdY
> 3iSm
> z0v$XfE6bFfWg3=c;<HR9`p28HhMBUmP5m=cpo3?mSbM)D^+hW#xF6;t2lL-
> &QcC>)
> z(jTjJYJaqy*B`Cq?BE2*-?rhpihL<9x{)6yJ|nn_{s%nr)r4nO@yO4+=~<-*kr_?A
> z7ht}}t>P8o*^R4k0A7}gw*kJ2!$on94cB1&bpf9EK^Cf$<PmY*gR+{xBT`fi@nTl-
> z3X%5V8q6;e9?g}BUJ25xas5=KSAaC>hptq5BzFa_)Ox8-5|{AuRC;Elt+-
> aD@JD#$
> ziwUn0il_0(igYKgqbNt?DCH3z1<R!KOrf&UK5zb=_F0ZQ?epf%oo6nr^wfB~&E
> ^^A
> zf~IRo-RyV8c?j1qxKLSPx7%hn)il;OENZr`u2u0DO<PdA`0mLI<~Dj7RxF>lVp+xA
> zOBS4mJOFa-BCfEoeC}MQUAXz0!lD^7CS9Y{g1Or~bA3&-
> xx8kvxw2u&a&Xwhs;XVS
> zgsWYSaeeucQo0LVCG=;<e>Tp{&E}dgV{1fI*T5~}ngOu^(!j0cYH_FE|Ab$GS)&
> 8x
> z1a2{-
> <WWohTk_5IdK$eRNXc>kR(aQo#kI|>I9KkitE+7?Uopd6Sh#XU!(#K;Ys^JZ
> zmPXgLxRx~TY`CkbrfJQB@|xyaSM9PDO=|#I@SWPG6?nQ0t=3rE#0WZ}Ku^7
> SI_MRx
> zo;BcC<#d`Sm<y{MH_yNM8nxze=1J5xw%TS-1DXSkd?A)d&Hox-
> GgmBYtZ5=fQ(0r>
> zwLgU_qZ3g5zryW#{HX@@e@drvg|}%@ts)|kn6;v5S&ipk)_+xPU4yOmF7Fb
> kztXeV
> z-qf@}dsNy}>4xUp3u+dc3u+1r7GE<B_e^eyV_D6TTCryN;-
> $6c*LFd@QhntsR(L9F
> zn^ra~s%@TMbJx;ZYWfRhC|q#dlFIpmRl_YQuN)M90ehor6nhhv;{P+x?1QQw
> 1g6TL
> zK&x!HxAtFYS#v)_TrzKPzQ2LLdEVuohGn&bs^|iFnwH4!Nv{<(=riZ_L9*3vs5e=
> Z
> zG?IL(@-!@M@H8kr{AP6Z!6-
> ivhZFy1`dTyFni^KtHj&R*n&cbduF{Q}pKtQaty69K
> z8uL}=qSZy{RWoLoi!Q`J`H_mIhUFfrL`x9$O79|=Su=NAP1Ev*<x9*}%kN&kV%
> 2i<
> z?4@fO>%p%Ex79AK_0*bY)if++9$bUp*3^&+PT;GJJb%RsbLFy{rAwLcDfBQ{p
> <~!;
> zJT*#=a|K2SbgvbPd*>X>SJo_rd#tEws#%7bRWMhzyxH5>xT48ZyO<TEfkmy0
> 3{dm0
> z=hb`j3XgeSZO!5}DkDnsC2LgVsAyW@sa-
> _0;quKZ>QJPaIgn<x7<cQ6rQT(==9w#+
> zn!Jr3%w?75SzcAdn^%}!wTl~6sqo&L9?XmCYnCrz91|b2R(O{y++!SL>NneJmp
> 7>S
> zRA=Lg<;}{740_Ap?a?#}2lHY1<`rJlto(>xv!^DZ4`FE&Ntu8NcPYAZ%yd;GrNw&X
> ztoi+(N%9qoRxH(U9LpDxQ};B$|Cn#BZED6qK{Zy^F7l$u*O+f@Sh1A32ZfKB^JZ
> #A
> z8Nj}LG3hU%3kU_5R=e0-
> IC(1h;pB5M4S$@9KdWJ>BDdE5PAJX`PpZ^{cmiBCtytF3
> z3{pw!xnRE?)b1V2VNc6zSnn!Sjc0%}P)8fYr-Kg|iTvry(eltX`qq*g!KCuM#M`i#
> zo^b4SQOW8F1w~U5e<rUkD4I-
> 9N@C!h6~Z5d4*5Ba&g8`tflPm<EH;}dIgS1(byQQi
> zVTk%@{f>T{A5`w`>b+aN_p0|k^`7Tf@QT#CRlQfM_j>idTD`AV?;F&6yL#_b?>
> *{W
> zR_}f4-
> Poeklc(Mb)q9D07u9>UdaqaStJQm(dS9>JH>me^_1>x8d(`_0_0F{_^_tYX
> zS-lsjcdL4@R__Wn<~@@p7f-
> qF`Ws573gt6x_E{Gg7s$TIrB*TnfJ0Rh=Z^qF^P+|Z
> zWU^7Ra8^T8vqwQyEvbJ#dfAHQi&GK)hx)5v&Iqq-
> 7i%Mitzl(D^9mMd(p2l4#sxN-
> zHLR?<e#+|N$@6NL)if+$tVWmLSWbxvsPxPgjcdLs_|ug7pZk9_@E;BQM+5)S
> z<)IG
> zf4c_U%07b5XS<)>|7_p0+;hg~OwZ*#XMV2exsvB9o~wQi0{E2oNWP728`p1q
> V&jI5
> zn>V&^?AX}3v3ukGjXfKCH_97NZ0y^}Z8B~$ZOYqZ-c-
> 1$Xj921>n3qi#ir^_?oIWZ
> b8aJ)p<lEG?Y5k@rHf`9nc~ko)MKS*$P$*9B
>
> literal 0
> HcmV?d00001
>
> --
> 2.25.0.windows.1
>
>
> Please consider the environment before printing this email.
>
> The information contained in this message may be confidential and
> proprietary to American Megatrends (AMI). This communication is intended
> to be read only by the individual or entity to whom it is addressed or by their
> designee. If the reader of this message is not the intended recipient, you are
> on notice that any distribution of this message, in any form, is strictly
> prohibited. Please promptly notify the sender by reply e-mail or by
> telephone at 770-246-8600, and then delete or destroy all copies of the
> transmission.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver
2021-06-16 21:51 [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver manickavasakam karpagavinayagam
2021-07-29 1:19 ` Nate DeSimone
@ 2021-07-29 1:31 ` Nate DeSimone
1 sibling, 0 replies; 4+ messages in thread
From: Nate DeSimone @ 2021-07-29 1:31 UTC (permalink / raw)
To: KARPAGAVINAYAGAM, MANICKAVASAKAM, devel@edk2.groups.io
Cc: Oram, Isaac W, Felixp@ami.com, DOPPALAPUDI, HARIKRISHNA,
Jha, Manish, Bobroff, Zachary, KARPAGAVINAYAGAM, MANICKAVASAKAM
Pushed: https://github.com/tianocore/edk2-non-osi/commit/7c28b7d
> -----Original Message-----
> From: manickavasakam karpagavinayagam <manickavasakamk@ami.com>
> Sent: Wednesday, June 16, 2021 2:51 PM
> To: devel@edk2.groups.io
> Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Felixp@ami.com; DOPPALAPUDI,
> HARIKRISHNA <harikrishnad@ami.com>; Jha, Manish <manishj@ami.com>;
> Bobroff, Zachary <zacharyb@ami.com>; KARPAGAVINAYAGAM,
> MANICKAVASAKAM <manickavasakamk@ami.com>
> Subject: [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64
> ASpeedAst2500Gop UEFI Driver
>
> Add X64 ASpeedAst2500Gop UEFI Driver
> ---
> .../ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf | 4 ++++
> .../ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi | Bin 0 -> 36928 bytes
> 2 files changed, 4 insertions(+)
> create mode 100644
> Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
>
> diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> index b3cee45..b563f76 100644
> --- a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> +++ b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
> @@ -3,6 +3,7 @@
> #
>
> # Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
>
> # Copyright (c) 2020, ASPEED Technology Inc. All rights reserved.<BR>
>
> +# Copyright (c) 2021, American Megatrends International LLC.<BR>
>
> #
>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
>
> #
>
> @@ -17,3 +18,6 @@
>
>
> [Binaries.AArch64]
>
> PE32|AArch64/ASpeedAst2500Gop.efi|*
>
> +
>
> +[Binaries.X64]
>
> + PE32|X64/ASpeedAst2500Gop.efi|*
>
> diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
> b/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..07d9de0fe5241bf26d516f3522
> a930880a57f5c5
> GIT binary patch
> literal 36928
> zcmeIbeS8$v^*=tF-H;^-nMH#Q5@nT*Mjj*()Ih-
> Ogk6}GU5SKfT0u8LLQ;8%$u198
> zba4~S?zon=+G;<x#nu9?w#Gg{TwBcok|4;FRRd}b*pJS-
> NC6ds5A5%K?#%3NLh#dX
> zKfgb|ukWiXleu&5x#ym9?z!ild*{y8^&Rft{<Z(xCI9_`6?TqW{7`y70w=gD%~@$
> V
> z+=hCNGZ!dXzBG=bOZ%CTpljgIx;}}QH8Ar6&!!8&2LpG0pX2VMi~z^w4~Fn>!
> mjny
> zuJ)j;A2O4iBzvm7MApo4_17-
> 0@zfx_;c`6RoxD@N_Oo(ax0deIb6h8Q)$SUc?pBT~
> zzjn1ku#of{0!+Q1hu2iQbj2b?cG7_l2y{>VSwT+>EU*}F6aB}`Vqn-W9^yDrIxI?O
> z#nxTkOG394i=konuH`sqD7_Ll`KLDnA#m9e!fSoUdkNsr0v@WI3dCCoV>Mw&
> Gu>h!
> z-NCRr8P?ATtD+28;|Ob>f>jNy;uNfJ-A`B(fmMK%Jf30gle59JC@ruQiT)ktJGbv~
> zO7A)Xw;LUSO4F_2-
> 0JWzI>Cvd^v!4kM_{Jx3=Oj*3CQ1<5M+)C&|dI5SAjl3x4^I(
> z1-
> (ZMjTk}@Dg7s{ETe*<4RhcYUoYw?tLJ6#;1gRr*UWQDohb3lYL1ik$~qTQ&dYcT
> zk0#8}uySJk9)e5Tf%rWIvB${}A1B0H(Plt=5ouWjB5J-
> 2HG@Io*IvA<EB#F*GPyLM
> zjmSh&3^^^;30{beu?icPfrbb^)+pq!C-O@b^4}ryQNTs;0qs>ld)7O)@7c3Qly-=L
> zYLggf%%hfXbV`mwXUJ+4r7uM3<V)1OL}_23x?K!ZYz7A%bp%LX(?a^lBPm-
> uS1%Vs
> zHcOFB+ARib7IUcblqj`Wd?;!!?i8i&ctsJkMu?W;cRKW!a$Mb1;Cr(>IJ1(T?8y{g
> zg0<7n2lAJKJSv-
> m%AC@yLZ`G3OvKllnf|vsLkld84(awhhtzC#NFTrq_AuKO1M@AW
> zs#|Xp<_lHAt-@`hbPO_8ymSIua7ZVlH=I(`KKUPVC269ylW+MiWJqs-
> MS1B>Bo{Hs
> zx3rSdx;UY7eu*=*+UW3KjrM3XiIPhMQ(I~YGkukx<6P2Cm*gt!vRMk5q5@8f
> S=EZv
> zN2J=0gJXv@#2K2C2VE2&WZGCQs=51>T(q*#kq7aSEBr|(gw~`<Z^tWEgTflfH-
> zPL
> z$d}&kUw%E)NBXe`$zbd!R0h+*V0`@(P^DH+J>j*U_7;Y2HHsluwS2z=03_<V?
> A2-d
> zF8cybr}N1c>SLj*>KIREv<=qS(&@cOl-
> >g26Y}A?$PLU~9ZMJei&mpuX0CR%c6u&{
> zF75^c(99!?AuN;yejU_YN_W{UTdzj8D)M`bt=+O^LK3!%V19HCzU5&xdngYO#
> 2>Gi
> zcDa}1UPP8pehQqUb9@_su$9CL4O@$}oK5ZLUu-
> D>WM)0tVUZY`Q;mLq6}X~jnDxvO
> zF#Ga4qA=|FMFd8Jf$>j~PT`oEZuJcgDFa#E$f7nzQ<HkBsg1-
> V89IpF17fKyzUEf6
> z7m9nX6MSFkyu+a-H2f}V*w8IHw5dztLA8l0m(q(-
> +9B<7N%lg`xYI`iCQ7^G6=Ez?
> zd}S!=!p|p4U83}q1p_3c+)*LiDcm6}6c*fh$HJuTFSVc>dn{(^$3+e)!n$x2ZR8!}
> zlmv95*HC4r4-
> `TpPTs|8R%(s%I_hWC@ojJo5^Q8dFA#wK1E7=4X;g9GzJz&`ZNEb>
> z#hGmH7T1+hfAL&~#+i=6F#Hy1qH%hg(Ksta4HHJgngK0UNUiW~R?Qr$aXBSb
> wO)#9
> z<LfJkgfs^noxm96xk8j2MoMIg(ulqXfH6-5i^q{7ENBciz9wCicE)C6*fBxxr2eGt
> zfgB;^(1=qtBrvL#_Bm6P|4T-
> TluwRpfyF9HOD(9xW2uJPi{NOW+Y%U64VZOG=+3v8
> z#L{k;)a{U7;~(pU@DC%W4aOlKCU5TFQGzlwu8M&H?Gsf-
> SL#E&*rA6q@$*G#To$G4
> zdWb`%InuKgre^@8xf-Xm7e+#aHHQO}9Ss3{G2%eL;Y`5YPO{qFN-
> M{HD!!P@DuFqb
> zM!b?!a$4Mw<#FJO(rqR%|659y_KDK#5Qa&S%f_U^G_hxov<)h@2he!AKB?
> sg&w#kU
> z&*-_{-
> )HiC%im}Ae#g;e&DH_z3W&M(fS4bfCUjX%Tp!2bp4*!NBkZ!~jRr<6k8*mE
> zq8y6OD2KFy=j=4POICxwGsEB8Cj_kK<k$tx*0b?T46HT_6a<*X(6_s#k5!X&NG
> Dw|
> zAnB}U6eQem4{S3Ca<ENH6KwMhJ4ye(?<JWkp{BSPcl>-
> &AO6CmJomWpXQ?R7&MPf!
> zUi^v$VCii+XBKh;)Y-k+Vu#jIV>dejH;N&{?|=llmx%gT(E?J7|0z5N$_@Rq0N=pi
> zM(ItbG(`UGxp=&|6CJ;Un8DAd#5%A-
> xGoRb<9)D4ggydBZ)$!>zSNSJ==Tu)o^A}?
> z>u#jpC`yNz(9bqP=uVJ>&=a8m`R_Jj?o;%VywZ}URP(zG%_T~Y_M(0<H2xK}y
> QK&2
> zLw7?5^KYaaPI~P3Bv0gMnw&xU3p~UMKoy{+sUmtn!DJ&*DE&q^5F<y?Klh6
> I{qidl
> zsiK*Afz<}OiIQlPS{T)UkP6uVA^`zC6$TG97zycLl<r26wMJ>7!6|h~Z^(^b$Ky`v
> zRv59<QpAQ@^hhE8Lm!Z(*-(4-
> e@Tx$%1o5mkbhf7<YPVm{5Jmi*{~qHS(IqVkVK4U
> z)*K3XhX9%v%MkV5V!)NR^C4y*id%qUmr`4Jl(zUE;t#hNTGQ<exO&BPWz;Hy
> )Z>)C
> za7rgVqhXNz3bc(HF8&B<xqK$M7FVxBI_LjVziN#rc@YVm_8>I-
> 9ZBPA{lv3a^#8RD
> zY0jGicPB=A)5Jh40UXk-Jg4M!JEhu2Ni;|Y#1M2BGWc*k41r{c^M9%H&YBa-
> z7~#a
> z)hI_OdlK?~sOI-bK5AHGt(=l-
> gil#E5ZJ%NojUY@%6OvkCWgj(QNK6#XLz7H?!{P5
> z;ZVE+c4<G+`VQYRDIKmMrsG@E(4$%6PS_bZVdKST%b<b~v$$dFmqP_*<s27
> 1F@&1g
> z)g!#Z?Liwp$=dEqv)3rRVg?|V?f=r$VM5Bu+xkSwUN3aeG)t7Kdd1TH&3ac>p
> MaRb
> z#JNg8qo=d3);>?J7=KNScZ>SBMEy=N0MvlJ-
> qm{6lkJG_b;S3$^q;%*|1GT}CHS{z
> zz~4k-`WO4+@i=U1OeD<th^c-
> 2^F8vdQ_ulEFog{O*(j{uC(i^3cwwW0B^TovoXO#A
> z1(1~oMENp6G3wNZO@KNgy(Sd3XYG*F6?ktrHx<59{-
> hXGA|IN<d4LO9p99?{?UdgF
> z*e-
> R2rz^DOorDG^J_MQQAEEF$A;Y!Q<j&F)y#JQ~h|<Cymvr38KmR+j71y{Ag_ji3
> z4#L3rmcIcAjrY1jH=Pp^KftV<<GP(81GNp%Uw7$Wb?LiY<Ms)!^u^I8e%2;%^
> o0Vy
> zg~L@57p3o$D~R+Ov-SgEJr_BOltaI(Jdmr4)nI7w-
> XH|6am!cy7DC|agfU%pk>2z=
> z;0LYeI%Pe-
> rCXF9CMtE2qx!n619d1{5i6i<At=Uy;ydzDX15UJEWMpkeWr#kv}LC`
> z;@celPJ^@bE&jm;Xf~&`R<ubHwI}p3MUseR!5_(RjoBTKKo#9$B&v7nUG+%s
> 68Y!%
> zQsk7ibF<!?g`Bi7i5@d;)_F6<1JN+7mW!oP9M2d;V>>Z&vhb1xlg#PN%X8|Ph8
> ^*p
> ziiVw~UYURJF?jdrNCV?!ywWngyx$0bQ(A`p{w}KjnbI<!F`I+!^r%(Xq&AX4TCef
> %
> z9J31oT}2XvZqm8*uQNFygZ~Q?-$D_c{|htU@?#P=7_nwTB9&>zEyeYFg-
> }Hr3CUQ8
> ztE1?#_@E+#2||)lRD%-
> rE>~!_4o<@F)OV_Mg4t=lBfUbKs7nQW)p<lOv>9C?E4(;U
> zQZU;j#<z7I83NQV#nQK$UWw`%QI^XT%veIbi~}J)Ppe!BG41uRK|d@{Bj{Y8C
> bZ#?
> z`YdIyk3@|GNpi9t#;_jMQhnXgA3+OhyJ{#&Ehrouh$>phWIV8jPE~}b@&Zb5R
> _J_3
> z`ckyOZ_Tc#gH8F4d^J!H6-*CMkD`aah<euCj`$AN+|JTkSV;z1$)`*~RXsK-s5JOl
> zljjz}f7a|N7J_qiLNEhe03CsP!R$1(8}M5qZLSJ_Yj<7bh_NoKyDs3`&u@*yD$vhn
> z>+ol88ZxrFk;*_KHUo*<(mJRs*Ns8%o2|2ag)W!QZ|P*cF+=H$S}zP#f!a3s*B+
> @m
> za>PU~EUP=<`WqrxzLjPsHtC0CqmI&3e5(%$A>`13dOS|1X%F3$;T+Sg^)eU#{2
> mAY
> z{Oj;Dj;siJ+qV#3nK1kO8%^R1VVRj^nXz%O|IKK#*(O+QsA@ktp@uLtmIFuyd
> kh;<
> zpE8}J^@hCYAMiXUlz*+W^i$sdYdny*3llR?X~G+*$|Y~`TGAW1^a(Z-
> ?Bz1nSYH8q
> z;Y?7B6~HT8oXS*~LZ9=v0`Cwag*j3oTmvakVTqW0a4{)LN*~?KobZWwg}Jyh`X
> D&g
> z<_{i=Nm-l=t*HnXq9(-
> dXFsDths1zTf;b2O`EvjQf)&YzGb|~FZh9AVyAbTgE37oN
> zbvdPsu!RUn>Fof+VH!g>^{TlOMTsvyDEX;H1L*Q|5bb1iSq*WRiRk|oi~n}|DH
> _tn
> zE3HaEguuyz2o-TD#X__SL*g1~vINn?jofmCRZfdl{=o$JFq;KKi+)%H71*TI+-Brr
> zhGRwsmr|$`-
> ~z4)?AR<8l(rObK*7ApfLNL0Hgmj_CXVYcKef(raw{+CUuizd1M_nK
> zeHIJn+1NibKAz(`(A(6x+Bfk2CNMSLTT!4t?^}^O2=9jfCGT#Ky&&&1`}3~pyin+
> %
> z#tM5>wHL{k0ukX+oQsF=O90b}G)6K6%(4Sc2hlqzbfgA5nS`Zl8Y)Ed!XA~jJ-
> ?nm
> zj2on$p8=@RJc2M?t>+HrW0mS(OM+)B?wE1)$0WEYOmjg6`>7;2!L029%%<?_
> <I=eB
> zl!W+07_U61H^X@-
> _E{vK97_Vkd1$XB0eqJMZEd!;ur&efV!*a5%PnDB0{908yb`~#
> zm;nAP33MiaZ43yJeBp`&uo*zIPGg$JPmK!6OF-
> tT5OV@DLxmJ3Amda>Q35hjg=|hh
> zGE_)=0`mDatnoPRp|CXp>{WmdK_RvTaJPo(3yTTh76$a;7j`CqPXh?IP`F)dhZ6J
> =
> z@?Fp}B2q5wR)x39D}jn0TFCLOe@2ehmtvXcckt#bQp)|3%Ju5VH?R)wO^c<)c
> 5A-C
> zb9I>0Yu;xSPzz`=J&9~2eyIDis=ZT5{YjpVg4Gu@kqb}x&@wpC^?i6akM);;7PZ2
> E
> z3murWqzd&kav*=n_I`dPY)DA`4<Pt^zaoahxe4fAKnpk!B)2AX*k+asVN7K<C{
> EOg
> zT%n`nhU>2*;Ccmk0|Sm9H})C=wkg0X8PGKP^2-S5Q-H$&Ordrc9%oPu-
> a_)N{%$=n
> z!yKKQR{%f4p)Z=Vx}^v)6O~B7WVO_oGl&&$fl@jxS=w}7=~zVyb5Se{&me}iq
> O1*-
> zijC(N9YHzgfo)W4iav`#lwjr*ZRP{U8X?7Zm86t$BcEiWVtiQ6CdZy^p}$`Rfs>EL
> z3bHy5aYh=4dexGd{YyTBlIPVcbPUzIzk(Vxqr4wjLPtO6WR)8L>;gMfFPZXs+?y|
> l
> zaZ2-P-I<2cSwNwBG20>LV?8wgP4RG6*}^Dq-
> rROcm@{kD@c@P!6OW7Wh%VtH1r)MA
> z;2DjIExlv79|;}ii*>N(E3~q205e8C#==>+A1SIgCrJGnxi2n;d7!g=`@33aQ5BHr
> z|3Zg>ENDT+YBeOdAH@VVzJzTFU;_hI%?75J0M2K?i>bIX0W70hH$0@HT0dy
> eY85&@
> zjhCgR)RM=_uA;K@6J_-
> bIG{a_BQi>9o|(WQ{X#cp&U4^ACDU?XLdKN92ZN&?Lsr6a
> zisZ+E$%Gg0?gY0^ONmV~=)xv6Ej<;<o)iRxyc&Y$7K-G`6a-
> 9uG=#hag~=%hnC@u^
> z<^;m<6a>uAGz3cm;l!9ElUS+)0(eBHFp_DHPoV8eK^u~!Q<Om13<RO$_hTJtV
> J<Nm
> z{D=W{CQ?fRcs~PXW%X8tvlGAu21IL_!=?mqK7g76Gm@3&CJ>5K5U^sXN!Ob
> |xF`i-
> zXcFNc351hZCab_}291K8K-iyxkd;I@mOywu1tB|$a3X>5XbQrxB*JG2gk>oRSl-
> ik
> z=u03tfgp4kv9uLlp8(##fJ4Z@I}^Yw8Sn?GZlOpX1|X3wl9yn1p(zxrP+Co9oo10o
> zub`UNE%<GDI6Kj_uQT9}o`-
> 8lMpGRCYNYV`5TvABX2V6Y?kvqwsJ;ijpdr#oJmx3J
> z-OtF;V3!hdH2{cSMR7w)pQ?uI!Ri)sjaKzuqTZ*|UFf)2pVH^t@)ap;F`?`G^*Oi9
> zr64eV6$Gu%x#joGNx@j3QxLR1=ayeiL12AOLD2e~TmD%J0_$@Mg4XBU@_i
> `?tk2aC
> z(&yZARSFvGa|#`;&$;C(Kwy2YJkjUe@@NL+3b~<)KIfJ*8L(fUbIYHPrs7;`pL5H-
> z0BY^Z`kYd!*5};vD=7%9&nXC6pL5GUPeEXPPC?N6oLgR-
> g24Kmf}r&|x4a+)f%Q2B
> zLF;pFxikfV^*IGW>vL}T(i8;N=M)63&$;EZmnX$!eNI8p`kY(t0m6Vj=a#oK;PmN
> v
> z)5AN|KIfKy&wx3XFXF=83E-
> 0q_=Df1^clC@0w63JZNcuCj$wGEaCbbL&yL5CGv2`a
> zr|DR9YDQo@5lNI_wyu>#%$c9k>D}@Kg=~>kBUi-
> 86(No&@&U&CKfqrKbhSPW`7cu-
> zTIlPRKLP}-
> 6k#Qo`Yy$PGz9EPh_n+3)UDmJ8H*4Y!54swB*jgM?Antw=kqM0U`3gz
> zhxe-
> ?xm*4R&?xjkW?@7&B1vIIA&c`=xDA^{3RfBdwrQAvOm8+3A|TUoFT&j#8_EX
> h
> zm1(i`Xgd5!^aV@`k!e+Au%0hN8fw?{i2H?F;1u-
> 5Nb{{9AqmVWapkUgA2S{aj^R~p
> zLkkm?O-Zc0|5<?hYy4p}TIyuOEqeh0w-
> #{g?;b+R)*QK8{x<RyW&iQiAj+PW$nN_m
> zQ+5#usmdmj(AN~EK@0RWMTL|!lTHazqH4}VnxlD4^ei;jpWnAf4dnM#KtNy$
> Is1^!
> zs5>Bo6pM=oli(-7RwOtHd(d188+DYvrj0soc_~l_j5==lHU{iB>bT`{05wu<)TviT
> z9k(n&PfC45nR)gbb=<O%k?S|=xaChTWus0t7C92}DrsSSB4RuM41y%%&sP9Zz
> 2<te
> z7AXH#0b0=`9!mfp2QVe_{uqylEqyeBm`)UYT=>2Oay@djur~Y7WLV44lHt41pX
> QJ8
> zh(<7@S<Il#rGfSc&?ZKbw6lRls<Fy-pDIeS$_v;+BEeoej*&Q7!^{CBbs&jF&k_3s
> zjmWnVMZ|^!lwGcYP9>=A|Aa00q{SW$TNA?lb0qpxw?HPI1g-
> =yoSnegjmH9*;#o}|
> z1fls<B8g(763Lm_lX%pShjCnyk+755mmpi{xaOiu%;7dpYbYIn+S(R&YNWKg@
> WN)H
> z-
> 535F;t54pm*=5;`~DQjj&CVjJ%Z3S*31ih&^WYnRe!9X_s8=0T7mO!%%hfK&)zz
> r
> zW57IZ2~{_6t~d`sg_{Lf14~if&yb<@K7Y5BlFIZfsozVethygXS-+!js<0bO<30sJ
> zIo+q{Ltvr(`w21K@_U!`6Vu;opap;0D3H*uTh32qfQgu?QDrkmicPq1vX38wR*1
> `R
> zqZ(|w<wFX{3gfkEE4)Oc<oFHhw6mo5TE#{Bdq<<NNbakkw+ycv<#aqVi3_++
> dd?x@
> zl#e?bNV%2di^r#}yqIo!xVl`>E;4|v*hQ2|qZCbUiy#>}Hk-dQjeHy4ut^alM1LfW
> ze;#9D!!8+0Dn5ATB#6`KGo61P8a&WjeDFnbGYnn`N_Zi~C>2t^6S-
> 7Q$;Apgl%Ilb
> z3p(-
> Iqy32##XmQKwHUdhgg>g@X|qh`@TVBjstx;hBrD#UI4#BGunI*~Y9{uD7iZGn
> zcJ`{0w)sd7Q@o;(%8mKva_Gb7m+SCt#ycWNi+2Gjm6i;wbiPtJv9hbx+wnB?{J
> $tK
> zyl{okt_$yg`V^o3gItc3Flk*Z6a8q?Iohl=iBjl?Gky*(9vF$eNj8F{DD-xeitR(W
> zA`Ur4!1ebT?n@_tp7dWNv_F}GJ|5_JkMibp+#tJ^D%?N{um)+17hZZGiTBYgld
> 1x6
> z3f&cU7)4@XN(#*$EMKs4c=bJlf(Y;Lg%@-
> }`y(khe*%v1f>CH+p91^^1D+7tx26Dt
> z1Z>}u0x1H7c+=$Tw$PI*Tq@#RRy66(5dUAqicUt+$>h#D!5#JVQ7|YhW?cHo
> @53DD
> zW@{C0xtof2;2jVbZb<<D2q2A)Z3)QJ46UDQbIXqam>6N)@)1009f<}lBm5)$A$
> )&4
> zoUe|&82=e1@={?#0$9#~Y?;WI08U^){K0UN0OsMDbw4Z<{pGggcshW!lh8q8
> vCJ*c
> zLMdVmE@QgR%NBn)V`3zA%iDn7-
> &wW~SM)EmA4qAHpDIvIwf<fcWHcq($UtorD@-B$
> zItXhO$GtiIF|{Xh#GWasqm5fG8dwwIB+DCFP1mMqf00@fY<apCjtsz8ttWL%7
> >;UE
> z+2C7GLElQ>q<7f^hBLSP1PUaEZnyji9<?_2_kK-D^4`-
> ^Q0jovU$*&ZeekbovA~Ba
> z@iJ-
> ld6kW$%8Y6#;g)@=m322KD@&rBr8TMXi4r%blt2*j6|KXo3?`9YMH!*}nUrS!
> zBi<X4f;G)_>*z^UUn=53AhMwGRM-
> Y76uqT`o|3v98pMlL|BmYI)~d>Z``N2u!e`-W
> zvE{qhUVOUCE|MQ{2JUg=O|UI+Pqpx;>3C`^K8T0<mpQmz?E9OGLDU)WR^z
> I`mMVBs
> zq<ZYZ<6U+cD0(4y&em4@&pKPcdosS>iat-
> Til>WGCH9Zm@s=GUixXSMu??aZHH)+p
> z-
> 9#uOZBxCX_hRfitEPRDn8B~Dz@9aCY&y`u(r&yV?~(gRIPxaH0<V;fx8FV3S{`Vw
> zmOrD}OJF8&Y3H?PvQ28P#ttWxlW9ZK2v{h3Ulm?(+XBt?4(Tm<8%jWQ6lz2X?
> +ol(
> zs-Ufk>9U1QJLkBSr%UkUoZ9U6VBuj-
> qntsR9U0&NKVS4X{(_1%xb~DSxa_1YSo=>K
> zzjf`${8q1=w7lK&yND(&>%`EHo<ITNB^qC$&>$2#-Dl^wykVF2+NGU#-
> u71A)O-H1
> zGF=GnjNMpgo4V%1Ri9yt#g3`Mu~o6tI<qI;-
> g3}$<h0H}sZTs_pVk>Y>DHFG=k?P%
> zlgEg1!n7|vXo~G9ea}BU8Fc&53&75nPEUa?kj8Hn{()VjxP2HXH{vD-
> %CjZmSfJb_
> z`nToU^}7+JnC<%Qg1_%F{=ud2p#t_Z1=!ns#iWuO_-@DMaT~v-
> d}Ifgj%9(ZnL@m~
> zw3~mJw(RmP??TLVQ8EO+<wd0Z(F(rhNtS5ztnKh2HLlyUa9wl*Ql1;vMSJN!8
> U$L;
> zA%(qxJ`A3PyD-
> BD8M?)g&)URs+g0%JBzVKUN$?ll3GBx2CBYvg!4;k)cux{+O~L+i
> z66{-
> <#Qu2_Y@#YV%;*EePTkb<G;n&qn(u|Z`%VzAxHr;$U9^Jq)AAg|@<)g8Eo8&~
> z=uLc!9|=_fw?IFh>(-
> q;0gy*u+_}A@1RXDh{^hCktzL!xi4<|Z?n(%6Z6*d=`ZM^R
> zn$H+)R0)*a2TWC|e@PNJaZeKb>m)djN-
> 6tEoaoTlpNZAg^FEky+lxODLu<PQ={=`(
> z#1`DnT%1GNBOk=O(6)^Db}`=N|8iv0Kb%rkg&>t%r2TfO+#q$^rD-
> <$`<?6ptT}W3
> zBSzssG~kj2q#_@u*`+i7qeemMJJTZ_Mmf`{T|(rz-
> hZSp@=v{O+@bQ&l(cb&01@=x
> zG1~Np?Q|Q550P9Iwot`6VO&H2qM+}w>wARwK5WgDZpjt=$I}HQ<NM-!1^-
> 76#CHqv
> z-JzS}0arEt3i@4fY*IQ#Gy?X|Bu8FI05GE87O?MtFRPHO`Sch8uD%-
> pZ1z0?FCZF(
> zkTpYyM{I50?ue`xu!YImwsw~dvjIWsvbK3&3%Yi%JJL(0&^sDpq+w%~|3hn=Y
> d7-!
> zz2>%sdxEal1?iywh#Na8kxRUHAY$SUd@M-
> lp&uEkr2hlFT(xI?DcP&rfIp_w)>gGw
> zdTreiA4pRflw5a|)G66_Ap1bnCfSc=bsvZdQfC2?W9h8dY*JM<0k<*TW3kJ=g
> QX5c
> zv$})!eF!?ReJQJ(aWJN@&9%>#b!N;7a@S*eh<{twY324Q-
> A>Q87$Cc7Yg=3G$qd>L
> zVE&!aW<L;g9YDP{Y2l7_N8SgA(!vwM%fwwoHV9+hg5aomdz<Tkzn8bQE$j)p
> 4y`*v
> zoq`zptj%@kMH-
> MG<6+yFL$)^id$utL+U$Q9vJM{jm`P(B6A`lZLq%C{V25_r{>aCM
> zGYjQWo&FDsFjvmnuJ6p+kNs?xwkjn=wY9n43Ei>{4TNR0iLkUXSSo;#HhYCFXs
> ?i?
> zaQH9NJYHxYF1<x&oP}8$a`B9O2|PalC_{Hu$k!uN3@z-
> o1+(nIS209Ui7NmU;;)Kv
> zG~3rBn?A4wU82zboSLggE+ExH`|ni9Nz@5Qr_la;74p6Ui3siOD&%!Q5WK5Tt
> MCLC
> zz>vSUjCg5XWr5zYpD!HEz_vb61H&5j4}eV{1Z{v~+jWQ(`t8eR^F{W}iAUWtCIo
> wg
> z;8|M`+xJd}yP*sD4ZJEs*Tyc;mv-
> S9Tj(PUg3a`R$$w%G_#B8ms$U^!d%U7QMlQ`s
> z7g)^ac@IpB1e5Rz>=GOvqK}Y5F42xJ_%J~=3)0(m+DNK=6qx+Ls|J&J8f1L(O9;
> 8K
> zEq*ls;Wy!SG1C6U3Vz37GRAM6Z4mwfWphI54o`u<FK1;wb`-
> D7@na7%wg+BUHw6<s
> zY}LE&N=jrEpT?%v&~=B4iIuly6JA6Kf87CT?ZGZV!mf3EAk!;<jau65R=|QTE5QC;
> z<~ElVnNYb^z8azihX|pnbHHIhyH)-
> %iU=?0G1pPZ$U0ylln{c>>vbqBARNH=c0+@9
> ztH0Zff<$U|$bgT^s8;zP%G>p41phfh({ACfs&T5cmMQ!&>ty`&K7cYR5&0)nwD
> `0$
> zbU)&Z40~`VGC-9oAj+$Wv-
> nO&ybHufHoY4@3~?#rdGtD<q8zpnfKe(M?nEYll)s&N
> zCHQ490{j7h1f|@j*M*k}TWHS}=!3xB@(+>E6u_QZ2s?D^rIcf%bUTTyqAp>mr
> $ztH
> z$-
> yBC%i+BsrZG)*qbd>GrTyoIHoc>)y{Wp|h)fs0Ql*a{@hu^>Vf**hymI7GHLs9O
> zfO(+>?TSEE3{A0ONWUE+nim$3esmg?pvUC7Qz>W*=EygrtSxvm=H3yN+H_
> *0{U!D3
> zLq#_LfG}Y2XQ+zb;=(m6t)LS%W_452->Z-
> G8nPl_4+zX?PBBewP$@m7Py(5P@1vCe
> zf!vFMxYC5^?g2xSVkC`fQK4Nc^?OERvr3~nN#kqK05&VVQYoF5D6Qc)0-
> xVH*Ra!W
> zWr`WM&vUsyn&HXyM|GY||5<FO6|%Zw!~ETb82n~hOz+2R1sZJs6-
> l7hI+l2NVYSe{
> zNd=5#0JqS-
> Q3V(QAc0oiAe^>YENPyJFH;A@YK>wg8!$33vO0(_y@fhc)U+F!_TqT)
> zX?tjiF?1`5w8XG-EbQ}T8rKjz)8}i_e$1lGwjexmr)>EW?H}K1D?Q!R8(U5il0cXE
> z&t`aQSs`a=#*XV)7l{>sF};V!-;2B#0X}{*oI(Z?mGBPIDO7{`%0%ia*!ql$>_Ofh
> zoE=BCZ&8hM2feP2?{tM8&{KVf!d7UWsuW81cude?M-
> c(++aO?!G;Jc)VJ%11%`wPe
> z3(g%Ww1-
> s4VFi*av_Gmsx&b*oJKrp{|3HCw8e#qN3ksq^X#b&#_zMMM654;HLP89}
> z3+<1ofcq2_SoGs6<hu$aO=$nI3aM5gdZGO%3M2+Ewo4WOCdrWIw`Sn;2&Yt
> OqOa|0
> zD-
> hoFA^5@ftC@&>(Bt8Su?`x6TgR*ri;lE!KO*BJ0_Y5T_w!!S41jgmUntfJgCGNV
> zyMSVb6cgxXk55_J=<eT9l$@O`+|ItW#9%^Su40K3n$@uiX)|eeVyQD;K?^BX6
> s84y
> zoCjcU!*^oznWj?Ifp4!-
> 5}*E`U<DmrGi6B2K2K80u<tXKt<~(n19>Z^O_*dqX2+mJ
> zyZ@AJe`2T-
> R<cj7Ww|(l07g=RsuTO3Q8(2K`{~5A@BrAZ6Y%*<oh@rW@j{H$*#nh%
> z#LA1r0ur(<7{OOsY}2|b0+S(dAsN)|vEAp3p?sS<h`zKUsVZYjmx}nxe1JZCQ1+J
> #
> z_)`9`O+u(}R#?{y>EmGo0yrjjm_th0twpMs2UYM}-@s&j-8Nba1Z-
> faFcBzPJi>Gg
> z$_V~b2%{c(D6j_5K8;t9pbe55ZSB;D=*1~C+2<N+;~jd%=|il?abKbNnDs?LWDJ
> }L
> zJ-|M#a!-
> FiiQF|1uw@|N*8>6c9nYAZAXh?K<ioxBP3!4J0X^Zv+LnY0*q54jVh@Y<
> z{V$esZWY%Zqc;pr=@gD65JU5^FJ=seFMMjB`W<FEP(<w5W<LZ$BzvI6QV(!({
> I8G_
> zFy&D!?crN~Ljd&@j;azmg=0Dbr)H$&Q?Ot<_TkKa(chQRoQL4*SAd6aWHg4&
> C7iv4
> z<L|~y{Sj7$I4+VvewmOFjiJI}R}%8mgdBQIL6mk2Y(XWMR-(gqu<-
> ~!adG%%o%cAu
> zWhlQT4W9?%o7#96B4@GmYyQDm5Qq{jCM4)o4CzhzGZ1u~|0Qj@7`PVSSB
> 0KpZ)9-Z
> zgV`b74R7;-
> aL1j>*%i=hUTXa5KZY+Y4tAx{dX}wizNK0S9&W>F7tl4<wQ}*oD2n@h
> zOT7>(7rM#~0ylZOJ$M+fc|!$$>lb!@>rs2~HTwE9V{&J750otgU$bLPYJ@1gDo
> Fd&
> zjI`YE|5)e!yk(d7UA+GS#-FdJX|xet{_8sX)ZB?)o8Y@|qW){X^;ROlZ*fi>Y7Z`$
> zI0WC~2)G;Zxm#MDzS{=Ys_XQ-
> h{HNt>5)2tpN;jHtw*Alqa4WDCK~W}!Nd$9*a`Ns
> zCt6PMTlxe9A|Ps;m?q#odtKxsLmj?!3~oo})-
> (K;9!w~e{PeoW2gt+R?gJypzR@wd
> zHFnFHBdo06menb}7Kx@~kx;)Aj5Xj}A253cKGG)97ecm)Lu@E}E@Iao#$y8E)4
> HkC
> zE&P`G;F+I2-BLGofu-ISvg+yrc;IK_N!rPzLF3djk%VanNGcH7#m|0?idGBL_P04L
> z6~RLQb^|Dk+eQ=6;2}V(OLyKsLI~O>4!2w`?3^`JH~ms?Iue<1zECsXmY|IV-
> >Vl<
> zJ21`TYa{eXd&@4*D1NJrY7NXv!=D@BZR-
> p|+Z{vfZFgi~@W2=SZa7&}>L8=}CfE_2
> zH{RoZQGEIg+(p#?k<Qw7p9PbytwFSqy3G5!ycZEDJb!igO(=|B?_f#vb-
> ~wr&X&1d
> zUdzH$?G?@I^3!<6=5)fx`=x4NS4@j|GUGefVU0}3HT{fuqOr@Y9Oa<+;#6KD
> A7R&7
> z^vv7-j|_vdQ+5G%z9e>z(^7omjnV7!MT{MK-
> EclTCT<`*%x@_l)Juod8T3|6SK&+L
> zZcwHffBRO5r@%nfDz^^`FOi?P0Ni&0c>M+76$)I@X$f>nBd~Q^gl~1jp-
> `H6UklBN
> z&FVMu#tX<`V6@WDli?UXoWdLB0q_#}Zx?|7<pS_$E&zW-
> f&ZV$pbl|oU!pHMRb$*I
> zA36<piVv#2pD2S48Im^MXydsxcnTBoSFmEhKEv59XJhXGwc#_+m^Jv8HMsB
> K$9VP~
> z)yZqstN^n9fOg$2zyFnjyb2KiKXq&VqEwXny;pL4qrsS+BV<O6*2$;;nymCEDjk
> Xk
> z6w1TZx-LsVnpK=EK#CcQYk-
> 51F*Dw^E{^@K+<nBTd^NheMJK&}5O3V^Y|T6&m#9Ve
> zBg_AZZcUJ}X$@lRXU8TiO@?WEtd-
> Q$spugYp#rPu36xXVx>toflz_a8IR{ni0fbd3
> z->Tx=mB8sxaLDRzkIn%YekHY@CsZ0mi4qs7G%im-
> JSt8$AXJ|f!k^x+nDXsxPm;E#
> zLr1aXDQ8_^Y{P_s83gvLP%P!eCx9f%K6wlyxKDlwgoyEd@^BUM8$cACI3_ui^
> AkYm
> zo&mO?aT@>1F$@uC4{^AGQomG@u0#Xjjl??&(MMEhwgSbP**=-
> +^Jz*gS96bp3d(GH
> z`2mV0knt)q7=d7qyhi1MY(gRWsS3f%H<i;W74iunLfhr|f>QJ!*LnX$w8&00S`$>
> f
> zR}&>SsgOS=AVXEi(|}+!X~SFXee!4Uj&y&70V%ayMI)O~)U{v5sZT&|QgO&86r
> AT&
> z92+3YsDm{zT06tx9n9C`@DA2z)IN;`?n4xF;E=WJ5M&i#lM8~hA-
> Kucu_i$9)`MeN
> zR#NO%25|U#QekM=mlJ?;5ksK>H|YYRfN^^;PM(frc&`%uUl^Orn2tE{u`Q-
> @j=Lj$
> zID*3!Fgft$rvnpc@29bAPe=3&)sTXk2Gp;BYG<eh6;%&9V(URqw!O{dP~)M`@
> TIJ>
> zPX%uj*t-QMt@l;lhH#fo57Lg3JIIcJ`z?eBRnCA29VF#kaNALi)jttOG)!|M2(3U7
> zM2BHo2B5j0S>DH1Jk$HIq(d(WbFuLSulzbaSrkH>*#yccuG>L%-
> HFbEYDJ=fD7^^h
> z3<={<3{e`6I7(lOD%oNrc1bJLt@06t`cDU?ZdIvwA>c*{`q2SrlqL>7MYU8H%~uO
> C
> zZCnT<baapPMG6n;t6EGBtgz13PLUU1gQDOi=tIh+4LI=TQ#y<fslC+1+1Q5~p2
> ~O|
> z)<*gvpGhY`krnhXD|iv$@H7RbmQbkgiP9VLYPy4|i!mGU<gfr6rqL}|TtZB1Gbr
> ds
> z;q?Vr5<564an#n^*JvxTlh9$o&2a$2#fWv#T3?XCJx%V3BuMg~G+>;4Gwc``Lc
> v#w
> zFXl7B+3pznz;5|>q&sZ7X|khxiDwSrAfi>%M17y=kAJyp5@Ec}wA({GThaLN7_?
> #}
> zd(?tBmncPy$(^y2nx9Sba6fpcS9o}ucsK#)5Y#i*yj}6hDlRGe0bqn5BkG}H#e}_$
> zuxGOP0d{mA{#?RmVuXh23IB({7yaAQm|@>CmJItU(0TxCO!7+P@mtlZ&!<J
> @!>=lJ
> zZza{vB3h94A!<cE3<{&kAUx~_ZukSG+yhiDM=f^>O*8!g(vea!)y9h7!Qen{hNK
> P<
> z1%#j^^$eo02fm6t-
> g?vwonsIDKAFbS>2Yt`A9eJeAZa`2>7<mXUC+Aeuz$jM<@<@6
> zrjr>kpirfNn(oFzynGk(*f$_`feW=sj5@$A3cX(ty=zfM`EU%|O#d4YD2a&}U5(c
> T
> z%np<57mA?LN!kK1NxluLfk5b(dt+Jh8nRtF4XRr{%94AL7nLue^tdx(C|~o`sRFC
> ?
> z)$_aZFo(y{f)qhOqX?~-
> QYXS8ilG?};*Gb%qpRyg*z(ZQ0zK2$`O<!QC{uG!%tI&o
> zyeEh82nOotjmz(q^mnM}Sk{~OI;9ixXe6C*521>$9QwCpC617(i%+2K7Q@-
> WbgYXn
> zyNL86yISL(iyWbwzjC2U91DW&5|u3HJ@qg%CYqH-BsvDtOp_tRjO-
> l9LC(@*LgKI@
> z$mbmgl|snH<V<<{S>lvtUc^kjDqtZCFnVH`6z!E?VbaRr-5|fuhDo-
> ;W4eeVjBqp_
> zy<DS~_!D;9(B2P_JH$$K%TZ>~Z#zKbe%4M{SL%^xGvXA=(ZT^4q!Qc>I1@`f!<
> 0_2
> z)W+3s!}>lcVs7d8SHYm(!w@ZvTK55z3m+b5efM!>gl;3u?ZA}7gpxs9khxO0Bh;
> q$
> zD>~v}&jt16l1|dP4lN``p)S7VBwF7^37NWE>p{Myn?Yb0uOJajYeDMINck|?<U
> Awc
> z#YO3Lxfm5Ar}alv%D-J7vlho=nbS+L!6x1nG>k@!c8ckoy-
> ?bP4Mk`MZ+eMgqGyq)
> ze?O>)UEMXk)H@U_FZAI3G^md~){jPMe;Ta{4NnP*`${>_Mev!@ZiPf7s8dM
> b?@M@(
> zV-lsyX}#%q^5nW0)<|aIAl4x`L*QRKz-(Z@LZ8C9g-{>1{Xl(ZPe*hfa#mAl1Uf-_
> z2o0-
> 1S{{vwn|L7RlwjR&umwP&!%F$EAm$d)S}<_+=svP?I=XL9GAyCdk4_2`mGM#;
> zjwxQk5PbjDV(DwmSBlv4SE#eK4fSNw$uamgrA^R@dRp&}Z*!IIzYniA5%CNn
> 1D2`!
> zcG6ntDS;$8q?*^y;p{`V(Sf$l(6DhkCV_|vLc?~#dD0<XSRgy|Iee3}Eod;d>ER%}
> z=pg4AJ9=#5yfGGHr7nPlmRfMi*fBF)r%O77WACt@k1ZTHd~CBz+D|dt1lmhr#
> %r+&
> zG!#%cbS-
> *wxLgS(KF07RM=+<v(IcN_V?9Vg_FU{jTjv1z3PQdK$gu+s32za1TCAsg
> zM#a~CNP*g!_r-
> wM6z_sCXL<r_pTX&<qdEnw^v1Eix2_X^Ib=8k_D<KRPaJ37bHrbD
> z29_CJU<>2THVSV>?Q)Je5*y08357Dn@1Rk{D;A<u)p{|ou+7!_4=l!oz7vOY!zo
> <O
> zKy8mh|1RZ_!sz@8qrksBQ-
> `H7tSx1UPl#FFjxltETL<6rmn<+Mz2TC!6PcmT(hqq5
> z(}0QoS|46S9duq%)jb&;e`vh|+Y{{@tdrx|B!^dX^~(EfXJBo+we7EM5Cr@@A^
> Oi|
> z@-2%fbo8Gc#<#G5(0{hTgICcDI~;uYcqSE(-
> phi^pZTbmWbY&n^zS(X3+Y(5Z)O>E
> zC-4t<prE?MOMy3BNdvSk`eifU5=0(SnI0IdtV7u6@6++Ew;|u*-
> )oHCpd`|w*HVHH
> zf0)%YnHU>NjKM2;(UCC<Z-
> ?V&{Kc{ylFs3e7|CSBfZZ3p8Lhw&ol<E(M3*#GLnOUK
> z$y1_ELv%Y>LP8e}Gv3Z#%eOqMq>4NR{6jA(>8UFVaW>tb#NWJ+a(wHrl|rUy
> D<v4C
> zn3?P~6Q9&Fin@!Mrb8uDS52N9%Kagf=nBn~Zw}?&^396$pDk*}0en?YxW>J
> wkiJOO
> zL6wg+(04J!xNsz2psGE32hx<A#d0d}gg2BpDQ-
> 0h>68vD_5&`K@DCf&5%?B*A1nH!
> zFa<@-sNPe9=UHen>Q(+|I^XgL#n1leP`>5o3M>t);{LNZ5ifw8=pGDrOvx-
> *OtwZg
> zmVHy3V?PXQf0Sn77qTF65iQ<ghPKcL%NNJEI?41=RVLs19Offp=(3@OsPSW@
> K?9Fp
> zTus(Ih%sJ}6ioeDA_b*He@S#;N5fNWLzHgsBSRXg*$0gj*{JGbR25x{5;oXU=z9j
> ?
> zuNZO@<L`*ka5&f>5gIm=ocuI=z{PL90eCoLQyHN@y&Sf|Fs>ksJi^#ACx_osISl
> (4
> zXJ+HioGc`GBq}rU=XSh;xE<Rh%P<XW#C)_KFD-
> j94RnKw4X|pw&a?qufhpoc;Dufe
> zh&HTTTXB_Ok)?>=dKzn5g*K$kavU8QTi%{PEA(1}iXV_*`cEpY+sL;(#X4p*4JRE
> c
> zDYWpf6#LL&Xvb6=EzWYz>iL#?k&5m|P@{IRtP~~2vNi3wBu5`1kOoJB$tZg(&u
> ?)U
> zU>(EphCtAx$%S;J9CZ4I6$0UmS|(@_Nm-~$X@-
> <?0hAo7xJoW2rvy1jo@ft@l8m1D
> ztAD9EO+Y`L363U$Aaxaow6g%GVUULxM|C>K^hNz3$^;XoeuBX=hHA1A2k>
> ZX3dIh%
> z0s1{4;&td47<xHo5PjxV<FS2X5$Zq$w!aXcnfcGAugU{#E`#NFV{<ajd+gy`b5R`x
> zWixvSI*Rh41SagPAyC^zpziR0cnEF<3m<#UByfhk<@9QB^WoR@l!JKFf5hY+e
> Vz&y
> z!J@}H7BP#CU3OmfK!eA?*x9S6ufk3Ur+21xjDrdA_7l*Nzt<S>Zm{x?V+-
> NhdaB(j
> zbm09LMQ<K>ybs^EhgP3Khgow8IQlTBi3h7`)-
> 4lIN<8yUY#iy?WCi{V4u8F)V&B3j
> zC3IkIlp~5Xs%KE~GzqhlH%J3=H9`$1hJR?vIc`65rRb0*2Zm5}$UQ(nN5`|jResbe
> z4n165r{l~~dcA+(V=-
> iyryRjFu3H>;0M&@R?EqXrH|<}BMh<%N9N0sNGUAydDB#p%
> z!Lf?DU26-
> rg(GTWmBhP9)7e(|HEAaqPQeurUz}k^^LZ=DZ@Hu|iEivBSXa#$vM&4T
> z*bK#4x$u0RvsWFJ=I<~Tlh1SV_QT}Y6q0*|bw}`85Dq2+q3Q3agW{RPbVA^n9
> )u&p
> zy8l+flvgQCA=PI$8wo)=6}yE7pwLX6;9DJMC$64?0eEf@d?lP`lB@LXrc7W_k*ua
> G
> z5qwbOhwww;${MEtr1f>QEfk>N77LRWT%}*Q_;L(5YujDYIbq#LI!NyfFpuKEN;
> m1k
> zVUt|XAXEYW?XGd#sWE8Rh0ea7sv6dW)siX}4vlAFAa*GVFPg!-
> d>z(*saIof8<B`*
> z69r090koFlktF*D%n)n>dYi6FC3!uCMU!y&Y#Y9v!Y&3^>5=9u?QI5p`u2qmN2
> H={
> z5eEx+(W7(fkJ8It3}F-
> qSFH!5*c1AUYuq+sR5}M<w`1WD4Y_{ZM;!R#TepBYRKU0V
> z4hiDL7MhEAA7MGR5y}tXlTmQY4%Mz&9}N+*1gXz~q+L3sh`*i0SLk_160^CW
> VP*tq
> zmu9I#1ELX25O0=4kNE*2M+_j-pcAIA>u~aD@h(^C(dNg6wp@#Yj-
> kb=0oxL?x%3|-
> zWQ#6`*PxOh3hx5lJkf%ev5!MH5#CRWRXAZ3JCnTim@;{DMgKV+|0tWyeNTt
> jfFc46
> zN;>d?QCY;Pi)5wX$T8-
> 1Vrnu8F#+=qaC0S&tW0pjW*kh@jGJxL0*a<Z{ok?Z3eVvY
> zv31GekL$f<2vGn7OU*M<BrYW4V~PPk+MF-
> !G+4$nS<~%!t%(yuA!H|oi}$@xvOGAQ
> z3F>WhN}3sxQF^V|Iqeh2x!N(^NoiDKz5oZxGL4$CAgnb4H3%(4K99i}?HMx=5-
> bq?
> zaG4PwewZ#4xj?m>2lQkL+FR$KQKhxdpbZo&ZO)eV(IKVixF=)tAR=4P>cRSEx
> Qn6^
> zoa>D+LH;s|V*4D@4(hvxk&e>N=8-
> #*4U6>{c4BE!)YD!Crq`p+ahOJ61>{Nb3|2Ls
> zvbbr8Ubn-H+kkh)*yH00%rRpES;GETBaYC_Li+!V$ah0tOf+c^(s}D+qs(A#n!?;i
> zh;rmRz+7=>i5{!hnD)gx$#y<x3tDV#0UZJXx%U2!Eho@g2CWa%496q?6m2E?J
> 9SL-
> zH$gF6n9f8G5OogJX)5f|uqI>XwvVu`QLq*f)?pc+ZRh#Qu;ef;!#jd3cO`ae(B6JA
> zzLzZ-9OYlm;9t&y$6pjlthXe#J6(7UMD*{AJ3{qfqKl4RABVzNCp#pT$}8!A6JtSJ
> zg>Iw&P0T@J<Q6a@jyoro{*x_j-
> %Kqz75xVJf1vzHlwbOHZ#q_eVmWNRi@k!z$2@Q&
> zY!!&jk_R4-4*qbG@3zeuh<t(Sz}fWtgTJIgr3Y5d!hF~%?Q&p?x#R9_ee6`*G<-
> sX
> z1q>E&J7|-~F=(7`Sqv+1j5|;sG-
> L{GI!8Rh_P3mfIsxbXv+x&FkTi$1|K?D(&VMw+
> zGr|ck7=O(X-z5ZbP%V~{LF+i9l}EJV-
> 41+FKpi$Tug@W+xk8RURxP&89E*Mq4ma!h
> z)@Kx+4g7;YRe822c*c8~ZC`<BiC8uWjAgu?K{cPSYF?nSgRuN0;Jlxfl=`u(zc9<5
> z28CT5tW4~FB`|isVpS5mF$Zb$GN=+2d!{2a7^tV%)y)O2kQjG`D&kK4F2n_dc
> @b0t
> z9WjOOQZ@|HdI~tZ@bC1L?0nxFUkDo<!Tn1wt@~}w!y^}LzNF#ipNtQ@wPt?
> bW$^{~
> ze)o{vI5&LQ`)pCc-
> rOH7zinvQvV+4Poyu+4)zDPR{o!+GNByszKR@<|8_O!ve){*{
> zl&^nxOvz0@{_@_x@AuvE-CIqM{Pp@@9JBp!^Ty%_)~$Ky*-
> 0DnX8!3?*RMOXhhBC0
> zFYXz?>R!{4H~%*Lr?a^ASC>Uxlm2u}Z2Gd({+la5t3GGQdeeg*PQU5sW%MgS
> I7~nN
> zaJ2d$KQ)_sW~h?cquwoRmFIzQvkKQp6{^qf0q}wOMHk5D4Wr{4F5Pdq*}dq
> =FYb+U
> z^w~PT!=-
> r1giD7<3qh{o^cy%XC!fpVhD189%NSxbaznZQ;xer{cKba~M)1*5>aWD*
> zUi@Tw14<>KjhE-8S@Fo|UCgCz0KHM5mkxSH!%!n?W%MQvLeH1ht21-
> ZFD^I+ZX_-&
> zrEvyTy;{Bq80JZw85hgPI7UA$e-
> 6_9@>Tw{{3_&A#7;c2^3VbO%=+pyGw#>~$Bn^7
> z`B*7V)UV|ee?-
> 4f%UA2y@`*nxhwaEpd9{8mpZJ@Ynm?d^;_rG~#0RTiwKuev-V7Mk
> zPjCU(BwU()wES6sk%OgrSiZ`imQQe^L9b<5zRI7LPxaez-KpiP{Bh}=!3-
> Fcwc=We
> zi)2jHujUi|3S19s`C9#IKGDA&*Uz<lwSMc6_5^*R@k?BIqm-
> cUGr09;JX79GTvUH4
> zE~?**`>p9o{g8gC9?}ElQ(Ibxw6OBTKi=VTHMpkXqWtl=56oYw<%55`?c;nIB?<
> n@
> z@l0<Osf{%HT)H_ypY$>x*L7+>(I1#UTgzAJZ%9w_M|8i9i|jz-Z(#o2TE1F-{g6xh
> z@wW>3B&Sw>U_Ol#EMG0}%Sh_~Cgjn$L~?8LEkQ?5yK`>EgH`KrD%jj%ImqLl
> di48+
> zqksJ3ui~68O>aog%_x~Vt#tZ~8_TjeUU7h?94`KWj^~CbMYC??tW*#)cIo{>?jy
> qo
> z=M_a{tzdBJe0&Uw=1|f3zGTslA9=sf`jJ7abx4MBXl7RSupBxUU-?=8{i6SiTB)eU
> z0qlw6Hl!<k)ePv*VdwPCCz(64I0Qmm01u5=sv$h;Gf&{!H~{Y=z#O=Uo)3M|inI
> ?G
> z(Q@M=nQ`N?aj8QLQlLeZsP#7@IhOh{u7UU(o(b9O2f-
> T#7}4!i=~<E9fQucjl0uK{
> zA+>&zNvq$C<PBibjEi_BQX_DY{OeV^<Trh|$_C&K2aMz|f}RMs2x&7e`T+M*
> TpGP^
> z0Y>yXVRwXAkLPw=!T`LB0V8_sH<lX<&5Wf#?8cJdtc)8wf*V^lmK!maD;qm@
> #MrTA
> z#4tS}69D8BjG>I+MwD@7Be=4%u_H!|9Z@#6Y{b|yJfj4#PzZ=b5#(6W5kLhVA
> +eGu
> zMrA;TN&|!k!az17Iby_!GW<893`8k~8!pnN4}F)qnH$$Iq<hi0xUma2?j$a&ibw
> 5R
> zh>MoB2~V>F!Y4d21<#7-&wwxxF9Ntmk9-
> teUk|_o8IJJGV9bX$)7t9|v_pGJdl5g>
> zUL0`XyE!Y8jkrb;3>V$VH1cqfT|J@Ft45mqX)S1x4d5S{8JCM|C>2tFy(nx=v6s~T
> zNB9(9Q2kcWB|M_L8CPomBfLv-
> {l8!@CNwmKexxTWE)SloaRJ11NP0w5B!1&R(m#He
> ze#s);%0;^4OLPz3rQ5k!_t;%J-(v22i?}6sarfQDJ$e^+ccpL1mE3o)<XleQ`c=L{
> zhwlc5Z?xSvd#SIW)>q;#pS;BP-
> DN((JTpN#CDFhCp}(MO(QgoYN2&DmbfeLjm6er~
> zlQVqy@Z8+oyu7^p{Cu<7Y_V7h3kxSqm@s+r<dTvS^bd476IV8xE1QU3ME@q
> 1aihyP
> z(}0W=X#Wyg#^}*ySC1~6IJ)eH(Pd@y?}oC`6U#<lUDiJ%1v+@fgb8JnCX`)2p={
> cO
> zvNHNNt!%>eWfLZq_0LFw4xWMkyKM%SpTp&k;PUh7-
> v~tP`CLYR|BMvq;2AkN`NMPa
> zN95$^<>cqnzr6gM5&1d8^ZRF{KnKsr&CS0gH$N{o|I*z2eEN53er{fV?j`yCGg6
> >~
> zXRz6b3FqEsb0!o0%QkUF6K8;*z%(V1kpdk&!)P>R8co?oQ;yMOqJKFiW46hdY
> 3iSm
> z0v$XfE6bFfWg3=c;<HR9`p28HhMBUmP5m=cpo3?mSbM)D^+hW#xF6;t2lL-
> &QcC>)
> z(jTjJYJaqy*B`Cq?BE2*-?rhpihL<9x{)6yJ|nn_{s%nr)r4nO@yO4+=~<-*kr_?A
> z7ht}}t>P8o*^R4k0A7}gw*kJ2!$on94cB1&bpf9EK^Cf$<PmY*gR+{xBT`fi@nTl-
> z3X%5V8q6;e9?g}BUJ25xas5=KSAaC>hptq5BzFa_)Ox8-5|{AuRC;Elt+-
> aD@JD#$
> ziwUn0il_0(igYKgqbNt?DCH3z1<R!KOrf&UK5zb=_F0ZQ?epf%oo6nr^wfB~&E
> ^^A
> zf~IRo-RyV8c?j1qxKLSPx7%hn)il;OENZr`u2u0DO<PdA`0mLI<~Dj7RxF>lVp+xA
> zOBS4mJOFa-BCfEoeC}MQUAXz0!lD^7CS9Y{g1Or~bA3&-
> xx8kvxw2u&a&Xwhs;XVS
> zgsWYSaeeucQo0LVCG=;<e>Tp{&E}dgV{1fI*T5~}ngOu^(!j0cYH_FE|Ab$GS)&
> 8x
> z1a2{-
> <WWohTk_5IdK$eRNXc>kR(aQo#kI|>I9KkitE+7?Uopd6Sh#XU!(#K;Ys^JZ
> zmPXgLxRx~TY`CkbrfJQB@|xyaSM9PDO=|#I@SWPG6?nQ0t=3rE#0WZ}Ku^7
> SI_MRx
> zo;BcC<#d`Sm<y{MH_yNM8nxze=1J5xw%TS-1DXSkd?A)d&Hox-
> GgmBYtZ5=fQ(0r>
> zwLgU_qZ3g5zryW#{HX@@e@drvg|}%@ts)|kn6;v5S&ipk)_+xPU4yOmF7Fb
> kztXeV
> z-qf@}dsNy}>4xUp3u+dc3u+1r7GE<B_e^eyV_D6TTCryN;-
> $6c*LFd@QhntsR(L9F
> zn^ra~s%@TMbJx;ZYWfRhC|q#dlFIpmRl_YQuN)M90ehor6nhhv;{P+x?1QQw
> 1g6TL
> zK&x!HxAtFYS#v)_TrzKPzQ2LLdEVuohGn&bs^|iFnwH4!Nv{<(=riZ_L9*3vs5e=
> Z
> zG?IL(@-!@M@H8kr{AP6Z!6-
> ivhZFy1`dTyFni^KtHj&R*n&cbduF{Q}pKtQaty69K
> z8uL}=qSZy{RWoLoi!Q`J`H_mIhUFfrL`x9$O79|=Su=NAP1Ev*<x9*}%kN&kV%
> 2i<
> z?4@fO>%p%Ex79AK_0*bY)if++9$bUp*3^&+PT;GJJb%RsbLFy{rAwLcDfBQ{p
> <~!;
> zJT*#=a|K2SbgvbPd*>X>SJo_rd#tEws#%7bRWMhzyxH5>xT48ZyO<TEfkmy0
> 3{dm0
> z=hb`j3XgeSZO!5}DkDnsC2LgVsAyW@sa-
> _0;quKZ>QJPaIgn<x7<cQ6rQT(==9w#+
> zn!Jr3%w?75SzcAdn^%}!wTl~6sqo&L9?XmCYnCrz91|b2R(O{y++!SL>NneJmp
> 7>S
> zRA=Lg<;}{740_Ap?a?#}2lHY1<`rJlto(>xv!^DZ4`FE&Ntu8NcPYAZ%yd;GrNw&X
> ztoi+(N%9qoRxH(U9LpDxQ};B$|Cn#BZED6qK{Zy^F7l$u*O+f@Sh1A32ZfKB^JZ
> #A
> z8Nj}LG3hU%3kU_5R=e0-
> IC(1h;pB5M4S$@9KdWJ>BDdE5PAJX`PpZ^{cmiBCtytF3
> z3{pw!xnRE?)b1V2VNc6zSnn!Sjc0%}P)8fYr-Kg|iTvry(eltX`qq*g!KCuM#M`i#
> zo^b4SQOW8F1w~U5e<rUkD4I-
> 9N@C!h6~Z5d4*5Ba&g8`tflPm<EH;}dIgS1(byQQi
> zVTk%@{f>T{A5`w`>b+aN_p0|k^`7Tf@QT#CRlQfM_j>idTD`AV?;F&6yL#_b?>
> *{W
> zR_}f4-
> Poeklc(Mb)q9D07u9>UdaqaStJQm(dS9>JH>me^_1>x8d(`_0_0F{_^_tYX
> zS-lsjcdL4@R__Wn<~@@p7f-
> qF`Ws573gt6x_E{Gg7s$TIrB*TnfJ0Rh=Z^qF^P+|Z
> zWU^7Ra8^T8vqwQyEvbJ#dfAHQi&GK)hx)5v&Iqq-
> 7i%Mitzl(D^9mMd(p2l4#sxN-
> zHLR?<e#+|N$@6NL)if+$tVWmLSWbxvsPxPgjcdLs_|ug7pZk9_@E;BQM+5)S
> z<)IG
> zf4c_U%07b5XS<)>|7_p0+;hg~OwZ*#XMV2exsvB9o~wQi0{E2oNWP728`p1q
> V&jI5
> zn>V&^?AX}3v3ukGjXfKCH_97NZ0y^}Z8B~$ZOYqZ-c-
> 1$Xj921>n3qi#ir^_?oIWZ
> b8aJ)p<lEG?Y5k@rHf`9nc~ko)MKS*$P$*9B
>
> literal 0
> HcmV?d00001
>
> --
> 2.25.0.windows.1
>
>
> Please consider the environment before printing this email.
>
> The information contained in this message may be confidential and
> proprietary to American Megatrends (AMI). This communication is intended
> to be read only by the individual or entity to whom it is addressed or by their
> designee. If the reader of this message is not the intended recipient, you are
> on notice that any distribution of this message, in any form, is strictly
> prohibited. Please promptly notify the sender by reply e-mail or by
> telephone at 770-246-8600, and then delete or destroy all copies of the
> transmission.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINUX Boot
@ 2021-06-17 0:51 Nate DeSimone
2021-06-17 0:51 ` [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver Nate DeSimone
0 siblings, 1 reply; 4+ messages in thread
From: Nate DeSimone @ 2021-06-17 0:51 UTC (permalink / raw)
To: devel
Cc: Manickavasakam Karpagavinayagam, Isaac Oram, Felix Polyudov,
Harikrishna Doppalapudi, Manish Jha, Zachary Bobroff
From: Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
Support for LINUX Boot
To enable/disable feature, PcdLinuxBootEnable can be used
1. Follow directions on http://osresearch.net/Building/ to compile the heads kernel and initrd for qemu-system_x86_64
2. Copy the following built files
(1) initrd.cpio.xz to LinuxBootPkg/LinuxBinaries/initrd.cpio.xz
(2) bzimage to LinuxBootPkg/LinuxBinaries/linux.efi
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Felix Polyudov <Felixp@ami.com>
Cc: Harikrishna Doppalapudi <harikrishnad@ami.com>
Cc: Manish Jha <manishj@ami.com>
Cc: Zachary Bobroff <zacharyb@ami.com>
Cc: Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
---
.../BoardTiogaPass/CoreDxeInclude.dsc | 5 +-
.../BoardTiogaPass/CoreUefiBootInclude.fdf | 5 +-
.../BoardTiogaPass/OpenBoardPkg.dsc | 7 +
.../BoardTiogaPass/OpenBoardPkg.fdf | 57 ++-
.../BoardTiogaPass/PlatformPkgConfig.dsc | 7 +
.../LinuxBinaries/LinuxKernel.inf | 9 +
.../LinuxBootPkg/LinuxBinaries/initrd.cpio.xz | Bin 0 -> 16 bytes
.../LinuxBootPkg/LinuxBinaries/linux.efi | Bin 0 -> 16 bytes
.../LinuxBootPkg/LinuxBoot.c | 422 ++++++++++++++++++
.../LinuxBootPkg/LinuxBoot.h | 193 ++++++++
.../LinuxBootPkg/LinuxBoot.inf | 46 ++
.../LinuxBootPkg/LinuxBootNull.c | 43 ++
.../LinuxBootPkg/LinuxBootNull.inf | 31 ++
.../Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec | 2 +
.../DxePlatformBootManagerLib/BdsPlatform.c | 9 +
.../DxePlatformBootManagerLib.inf | 2 +
Platform/Intel/Readme.md | 42 ++
17 files changed, 872 insertions(+), 8 deletions(-)
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/LinuxKernel.inf
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/initrd.cpio.xz
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/linux.efi
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c
create mode 100644 Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf
diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc
index b0660d72dd..a17015704b 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc
+++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreDxeInclude.dsc
@@ -83,6 +83,7 @@
$(PLATFORM_BOARD_PACKAGE)/Override/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
#TiogaPass Override END
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == FALSE
MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
@@ -97,10 +98,11 @@
MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
FatPkg/EnhancedFatDxe/Fat.inf
-
+!endif
#MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDxe.inf
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == FALSE
MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
@@ -124,6 +126,7 @@
<LibraryClasses>
PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
}
+!endif
!if gMinPlatformPkgTokenSpaceGuid.PcdBootToShellOnly == FALSE
MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf
diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclude.fdf b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclude.fdf
index 141ce5dda3..6cd8ba6626 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclude.fdf
+++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/CoreUefiBootInclude.fdf
@@ -47,6 +47,7 @@ INF PcAtChipsetPkg/HpetTimerDxe/HpetTimerDxe.inf
INF $(PLATFORM_BOARD_PACKAGE)/Override/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
#TiogaPass Override END
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == FALSE
INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
@@ -62,10 +63,12 @@ INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
INF FatPkg/EnhancedFatDxe/Fat.inf
+!endif
#INF MdeModulePkg/Universal/Console/GraphicsOutputDxe/GraphicsOutputDxe.inf
INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == FALSE
INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
@@ -79,4 +82,4 @@ INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
INF MdeModulePkg/Application/UiApp/UiApp.inf
INF MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf
-
+!endif
diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc
index e4c8e7fbf1..06ed3f610e 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc
+++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.dsc
@@ -104,6 +104,13 @@
################################################################################
[LibraryClasses.common]
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == TRUE
+ LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBoot.inf
+ LoadLinuxLib|OvmfPkg/Library/LoadLinuxLib/LoadLinuxLib.inf
+!else
+ LinuxBootLib|$(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBootNull.inf
+!endif
+
!if gPlatformTokenSpaceGuid.PcdFastBoot == FALSE
PlatformBootManagerLib|$(PLATFORM_PACKAGE)/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
!else
diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf
index 43cd8d94e1..adbf28a936 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf
+++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/OpenBoardPkg.fdf
@@ -19,6 +19,38 @@
# Also all values will have a PCD assigned so that they can be used in the system, and
# the FlashMap edit tool can be used to change the values here, without effecting the code.
# This requires all code to only use the PCD tokens to recover the values.
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == TRUE
+
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset = 0x00000000 # Flash addr (0xFF840000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize = 0x00300000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset = 0x00300000 # Flash addr (0xFF8A0000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize = 0x00100000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset = 0x00400000 # Flash addr (0xFF910000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize = 0x00100000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset = 0x00500000 # Flash addr (0xFFE00000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize = 0x00100000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset = 0x00600000 # Flash addr (0xFF9A0000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize = 0x00600000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset = 0x00C00000 # Flash addr (0xFF800000)
+SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = 0x0007C000 #
+
+!else
+
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset = 0x00000000 # Flash addr (0xFF840000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize = 0x00500000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset = 0x00500000 # Flash addr (0xFF8A0000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize = 0x00100000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset = 0x00600000 # Flash addr (0xFF910000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize = 0x00100000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset = 0x00700000 # Flash addr (0xFFE00000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize = 0x00200000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset = 0x00900000 # Flash addr (0xFF9A0000)
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize = 0x00300000 #
+SET gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset = 0x00C00000 # Flash addr (0xFF800000)
+SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize = 0x0007C000 #
+
+!endif
+
[FD.Platform]
BaseAddress = 0xFF000000 | gEfiPchTokenSpaceGuid.PcdFlashAreaBaseAddress
@@ -27,27 +59,27 @@ ErasePolarity = 1
BlockSize = 0x10000
NumBlocks = 0x100
-0x00000000|0x00500000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize
gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedBase|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvAdvancedSize
FV = FvAdvanced
-0x00500000|0x00100000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecurityBase|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvSecuritySize
FV = FvSecurity
-0x00600000|0x00100000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize
gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootBase|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvOsBootSize
FV = FvOsBoot
-0x00700000|0x00200000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize
gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUBase|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvFspUSize
FV = FvLateSiliconCompressed
-0x00900000|0x00300000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootOffset|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize
gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootBase|gMinPlatformPkgTokenSpaceGuid.PcdFlashFvUefiBootSize
FV = FvUefiBoot
-0x00C00000|0x0007C000
+gMinPlatformPkgTokenSpaceGuid.PcdFlashNvStorageVariableOffset|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize
#NV_VARIABLE_STORE
DATA = {
@@ -303,6 +335,19 @@ FILE DRIVER = db90bb7e-e4ba-4f07-96d6-b7076713bd2c {
INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == TRUE
+
+FILE DRIVER = 81339b04-fa8c-4be0-9ca7-916fc5319eb5 {
+ SECTION DXE_DEPEX_EXP = {FALSE}
+ SECTION PE32 = $(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBinaries/linux.efi
+}
+
+FILE FREEFORM = 16b60e5d-f1c5-42f0-9b34-08C81C430473 {
+ SECTION RAW = $(PLATFORM_BOARD_PACKAGE)/LinuxBootPkg/LinuxBinaries/initrd.cpio.xz
+}
+
+!endif
+
[FV.FvUefiBoot]
FvAlignment = 16
diff --git a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.dsc b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.dsc
index 36a29c8d68..ff27252233 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.dsc
+++ b/Platform/Intel/PurleyOpenBoardPkg/BoardTiogaPass/PlatformPkgConfig.dsc
@@ -51,7 +51,14 @@
gMinPlatformPkgTokenSpaceGuid.PcdPerformanceEnable|TRUE
+ gPlatformTokenSpaceGuid.PcdLinuxBootEnable|FALSE
+
+!if gPlatformTokenSpaceGuid.PcdLinuxBootEnable == TRUE
+ gPlatformTokenSpaceGuid.PcdFastBoot|TRUE
+!else
gPlatformTokenSpaceGuid.PcdFastBoot|FALSE
+!endif
+
!if gPlatformTokenSpaceGuid.PcdFastBoot == TRUE
gIpmiFeaturePkgTokenSpaceGuid.PcdIpmiFeatureEnable|FALSE
gPlatformTokenSpaceGuid.PcdUpdateConsoleInBds|FALSE
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/LinuxKernel.inf b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/LinuxKernel.inf
new file mode 100644
index 0000000000..a249027d22
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/LinuxKernel.inf
@@ -0,0 +1,9 @@
+[Defines]
+ INF_VERSION = 1.27
+ BASE_NAME = LinuxKernel
+ FILE_GUID = 81339b04-fa8c-4be0-9ca7-916fc5319eb5
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+
+[Binaries.common.AARCH64]
+ PE32|linux.efi|*
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/initrd.cpio.xz b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/initrd.cpio.xz
new file mode 100644
index 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911d0c8cc43a4170a9
GIT binary patch
literal 16
KcmZQzKm`B*5C8!H
literal 0
HcmV?d00001
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/linux.efi b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBinaries/linux.efi
new file mode 100644
index 0000000000000000000000000000000000000000..01d633b27e8ea9b17084fc911d0c8cc43a4170a9
GIT binary patch
literal 16
KcmZQzKm`B*5C8!H
literal 0
HcmV?d00001
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c
new file mode 100644
index 0000000000..eec05824d6
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.c
@@ -0,0 +1,422 @@
+/** @file
+
+Copyright (c) 2021, American Megatrends International LLC. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/**
+ *
+ * This library will load the Linux kernel and initrd from the BIOS and launch it.
+ *
+ */
+
+//---------------------------------------------------------------------------
+
+#include <PiDxe.h>
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Guid/DxeServices.h>
+#include <Library/DxeServicesTableLib.h>
+#include <Library/UefiLib.h>
+#include <Protocol/FirmwareVolume2.h>
+#include <Protocol/LoadedImage.h>
+#include <Guid/MemoryTypeInformation.h>
+#include <Pi/PiDxeCis.h>
+#include <Pi/PiHob.h>
+#include <Library/PcdLib.h>
+#include <Library/DxeServicesLib.h>
+#include "LinuxBoot.h"
+
+//16b60e5d-f1c5-42f0-9b34-08C81C430473
+#define LINUX_BOOT_INITRD_GUID \
+ { \
+ 0x16b60e5d, 0xf1c5, 0x42f0, {0x9b, 0x34, 0x08, 0xc8, 0x1c, 0x43, 0x04, 0x73} \
+ }
+
+#define LINUX_BOOT_KERNEL_GUID \
+ { \
+ 0x81339b04, 0xfa8c, 0x4be0, {0x9c, 0xa7, 0x91, 0x6f, 0xc5, 0x31, 0x9e, 0xb5} \
+ }
+
+
+EFI_STATUS
+EFIAPI
+LoadLinuxCheckKernelSetup (
+ IN VOID *KernelSetup,
+ IN UINTN KernelSetupSize
+ );
+
+VOID*
+EFIAPI
+LoadLinuxAllocateKernelSetupPages (
+ IN UINTN Pages
+ );
+
+EFI_STATUS
+EFIAPI
+LoadLinuxInitializeKernelSetup (
+ IN VOID *KernelSetup
+ );
+
+VOID*
+EFIAPI
+LoadLinuxAllocateKernelPages (
+ IN VOID *KernelSetup,
+ IN UINTN Pages
+ );
+
+EFI_STATUS
+EFIAPI
+LoadLinuxSetCommandLine (
+ IN OUT VOID *KernelSetup,
+ IN CHAR8 *CommandLine
+ );
+
+EFI_STATUS
+EFIAPI
+LoadLinux (
+ IN VOID *Kernel,
+ IN OUT VOID *KernelSetup
+ );
+
+VOID*
+EFIAPI
+LoadLinuxAllocateInitrdPages (
+ IN VOID *KernelSetup,
+ IN UINTN Pages
+ );
+
+EFI_GUID gLinuxBootInitrdFileGuid = LINUX_BOOT_INITRD_GUID;
+
+EFI_GUID gLinuxBootKernelFileGuid = LINUX_BOOT_KERNEL_GUID;
+
+//---------------------------------------------------------------------------
+
+/**
+ Dump some hexadecimal data to the screen.
+
+ @note Function taken from ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c in EDKII
+
+ @param[in] Indent How many spaces to indent the output.
+ @param[in] Offset The offset of the printing.
+ @param[in] DataSize The size in bytes of UserData.
+ @param[in] UserData The data to print out.
+**/
+static
+VOID
+DumpHex (
+ IN UINTN Indent,
+ IN UINTN Offset,
+ IN UINTN DataSize,
+ IN VOID *UserData
+ )
+{
+ UINT8 *Data;
+ CHAR8 Val[50];
+ CHAR8 Str[20];
+ UINT8 TempByte;
+ UINTN Size;
+ UINTN Index;
+ CHAR8 Hex[] = {
+ '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
+ };
+
+ DEBUG((DEBUG_INFO, "%*a 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n", Indent, ""));
+ DEBUG((DEBUG_INFO, "%*a ------------------------------------------------\n", Indent, ""));
+
+ Data = UserData;
+ while (DataSize != 0) {
+ Size = 16;
+ if (Size > DataSize) {
+ Size = DataSize;
+ }
+
+ for (Index = 0; Index < Size; Index += 1) {
+ TempByte = Data[Index];
+ Val[Index * 3 + 0] = Hex[TempByte >> 4];
+ Val[Index * 3 + 1] = Hex[TempByte & 0xF];
+ Val[Index * 3 + 2] = (CHAR8) ((Index == 7) ? '-' : ' ');
+ Str[Index] = (CHAR8) ((TempByte < ' ' || TempByte > 'z') ? '.' : TempByte);
+ }
+
+ Val[Index * 3] = 0;
+ Str[Index] = 0;
+ DEBUG((DEBUG_INFO, "%*a%08X: %-48a %a\n", Indent, "", Offset, Val, Str));
+
+ Data += Size;
+ Offset += Size;
+ DataSize -= Size;
+ }
+}
+
+
+/**
+ * This function completes a minimal amount of the necessary BDS functions to prepare
+ * for booting the kernel.
+ *
+ * @param None
+ *
+ * @retval EFI_SUCCESS Successfully completed remaining tasks
+ * @return EFI_ERROR Could not complete BDS tasks
+ */
+EFI_STATUS
+CompleteBdsTasks (
+ VOID
+)
+{
+
+ return EFI_SUCCESS;
+}
+
+/**
+ * This function will load and launch the Linux kernel from a BIOS FV.
+ *
+ * @note This function is not intended to return. Any exiting from this function indicates
+ * a problem loading or launching the kernel.
+ *
+ * @param None
+ *
+ * @return EFI_ERROR Any error code
+ */
+EFI_STATUS
+LoadAndLaunchKernel (
+ VOID
+)
+{
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage = NULL;
+ EFI_STATUS Status;
+ EFI_HANDLE KernelHandle = NULL;
+ VOID *KernelBuffer = NULL;
+ VOID *KernelFfsBuffer = NULL;
+ UINTN KernelFfsSize = 0;
+ VOID *InitrdData = NULL;
+ VOID *InitrdBuffer = NULL;
+ UINTN InitrdSize = 0;
+ struct boot_params *BootParams = NULL;
+ struct boot_params *HandoverParams = NULL;
+ UINT32 StartOffset = 0;
+ UINT32 KernelLength = 0;
+ UINT8 *Temp;
+ UINT8 CmdLine[] = " ";
+
+ DEBUG((DEBUG_INFO, "LoadAndLaunchKernel Entry\n"));
+
+ ///
+ /// Kernel load and preparation
+ ///
+ DEBUG((DEBUG_INFO, "Preparing the kernel...\n"));
+
+ // Retrieve the kernel from the firmware volume
+ Status = GetSectionFromAnyFv(
+ &gLinuxBootKernelFileGuid,
+ EFI_SECTION_PE32,
+ 0,
+ &KernelFfsBuffer,
+ &KernelFfsSize
+ );
+
+ DEBUG((DEBUG_INFO, "Status %r\n",Status));
+ DEBUG((DEBUG_INFO, "KernelFfsBuffer %x\n",KernelFfsBuffer));
+ DEBUG((DEBUG_INFO, "KernelFfsSize %x\n",KernelFfsSize));
+
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "Could not retrieve kernel; %r.\n", Status));
+ goto FatalError;
+ }
+
+ DEBUG((DEBUG_INFO, "Loaded kernel to buffer at 0x%p with size 0x%X.\n", KernelFfsBuffer, KernelFfsSize));
+ DEBUG((DEBUG_INFO, "Printing first 0x%X bytes:\n", MIN(KernelFfsSize, 0x100)));
+
+ DumpHex(2, 0, MIN(0x100, KernelFfsSize), KernelFfsBuffer);
+
+ // Create a LoadImage protocol for the kernel
+ Status = gBS->LoadImage(TRUE, gImageHandle, NULL, KernelFfsBuffer, KernelFfsSize, &KernelHandle);
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "Could not create LoadImage for kernel %r\n", Status));
+ goto FatalError;
+ }
+
+ // Get the new LoadedImage protocol to retrieve information about the kernel
+ Status = gBS->HandleProtocol(KernelHandle, &gEfiLoadedImageProtocolGuid, (VOID **) &LoadedImage);
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "Could not get kernel LoadedImage protocol; %r\n", Status));
+ goto FatalError;
+ }
+
+ DEBUG((DEBUG_INFO, "Kernel LoadedImage information:\n"));
+ DEBUG((DEBUG_INFO, " ImageBase = 0x%p\n", LoadedImage->ImageBase));
+ DEBUG((DEBUG_INFO, " ImageSize = 0x%p\n", LoadedImage->ImageSize));
+
+ // Verify the kernel boot parameters from the LoadedImage and allocate an initalization buffer once verified
+ BootParams = (struct boot_params*) LoadedImage->ImageBase;
+
+ Status = LoadLinuxCheckKernelSetup((VOID *) BootParams, sizeof(struct boot_params));
+ if (EFI_ERROR (Status)) {
+ DEBUG((DEBUG_ERROR, "LoadLinuxCheckKernelSetup failed; %r.\n", Status));
+ goto FatalError;
+ }
+
+ HandoverParams = LoadLinuxAllocateKernelSetupPages(EFI_SIZE_TO_PAGES(KERNEL_SETUP_SIZE));
+ if (HandoverParams == NULL) {
+ DEBUG((DEBUG_ERROR, "Could not allocate memory for kernel handover parameters.\n"));
+ goto FatalError;
+ }
+ DEBUG((DEBUG_INFO, "Handover parameters allocated at 0x%p\n", HandoverParams));
+
+ gBS->CopyMem(&HandoverParams->hdr, &BootParams->hdr, sizeof(struct setup_header));
+
+ Status = LoadLinuxInitializeKernelSetup(HandoverParams);
+ if (EFI_ERROR (Status)) {
+ DEBUG((DEBUG_ERROR, "Unable to initialize the handover parameters; %r.\n", Status));
+ goto FatalError;
+ }
+
+ // Allocate space for the kernel and copy it into the new buffer
+ KernelBuffer = LoadLinuxAllocateKernelPages(HandoverParams, EFI_SIZE_TO_PAGES(HandoverParams->hdr.init_size));
+ if (KernelBuffer == NULL) {
+ DEBUG((DEBUG_ERROR, "Unable to allocate memory for kernel.\n"));
+ goto FatalError;
+ }
+
+ StartOffset = (HandoverParams->hdr.setup_secs + 1) * 512;
+ KernelLength = (UINT32) (KernelFfsSize - StartOffset);
+ Temp = (UINT8 *) LoadedImage->ImageBase;
+
+ DEBUG((DEBUG_INFO, "Kernel starts at offset 0x%X with length 0x%X\n", StartOffset, KernelLength));
+
+ gBS->CopyMem(KernelBuffer, (Temp + StartOffset), KernelLength);
+ DEBUG((DEBUG_INFO, "First 0x%X bytes of new kernel buffer contents:\n", MIN(0x100, KernelLength)));
+
+ DumpHex(2, 0, MIN(0x100, KernelLength), KernelBuffer);
+
+ // Prepare the command line
+ Status = LoadLinuxSetCommandLine(HandoverParams, (UINT8 *) &CmdLine);
+ if (EFI_ERROR (Status)) {
+ DEBUG((EFI_D_INFO, "Unable to set linux command line; %r.\n", Status));
+ goto FatalError;
+ }
+
+ HandoverParams->hdr.code32_start = (UINT32)(UINTN) KernelBuffer;
+ HandoverParams->hdr.loader_id = 0x21;
+
+ DEBUG((DEBUG_INFO, "Kernel loaded.\n"));
+
+#if 1
+//#if defined(INTEGRATED_INITRAM_FS) && (INTEGRATED_INITRAM_FS ==0)
+ ///
+ /// Initrd load and preparation
+ ///
+ DEBUG((DEBUG_INFO, "Preparing the initrd...\n"));
+
+ // Retrieve the initrd from the firmware volume
+ Status = GetSectionFromAnyFv(
+ &gLinuxBootInitrdFileGuid,
+ EFI_SECTION_RAW,
+ 0,
+ &InitrdBuffer,
+ &InitrdSize
+ );
+
+ if (EFI_ERROR(Status)) {
+ DEBUG((DEBUG_ERROR, "Could not retrieve initrd; %r.\n", Status));
+ goto FatalError;
+ }
+
+ DEBUG((DEBUG_INFO, "Loaded initrd to buffer at 0x%p with size 0x%X.\n", InitrdBuffer, InitrdSize));
+ DEBUG((DEBUG_INFO, "Printing first 0x%X bytes:\n", MIN(0x100, InitrdSize)));
+ DumpHex(2, 0, MIN(0x100, InitrdSize), InitrdBuffer);
+
+ // Allocate the initrd for the kernel and copy it in
+ InitrdData = LoadLinuxAllocateInitrdPages(HandoverParams, EFI_SIZE_TO_PAGES(InitrdSize));
+ if (InitrdData == NULL) {
+ DEBUG((DEBUG_ERROR, "Unable to allocate memory for initrd.\n"));
+ goto FatalError;
+ }
+
+ gBS->CopyMem(InitrdData, InitrdBuffer, InitrdSize);
+
+ HandoverParams->hdr.ramdisk_start = (UINT32)(UINTN) InitrdData;
+ HandoverParams->hdr.ramdisk_len = (UINT32) InitrdSize;
+
+ DEBUG((DEBUG_INFO, "Initrd loaded.\n"));
+ DEBUG((DEBUG_INFO, "Printing first 0x%X bytes of initrd buffer:\n", MIN(0x100, InitrdSize)));
+ DumpHex(2, 0, MIN(0x100, InitrdSize), InitrdData);
+
+ // General cleanup before launching the kernel
+ gBS->FreePool(InitrdBuffer);
+ InitrdBuffer = NULL;
+#endif
+
+ gBS->UnloadImage(KernelHandle);
+ gBS->FreePool(KernelFfsBuffer);
+ KernelFfsBuffer = NULL;
+
+ DEBUG((DEBUG_ERROR, "Launching the kernel\n"));
+
+
+ //
+ // Signal the EFI_EVENT_GROUP_READY_TO_BOOT event.
+ //
+ EfiSignalEventReadyToBoot();
+
+
+ // Launch the kernel
+ Status = LoadLinux(KernelBuffer, HandoverParams);
+
+ ///
+ /// LoadLinux should never return if the kernel boots. Anything past here is an error scenario
+ ///
+ DEBUG((DEBUG_ERROR, "ERROR: LoadLinux has returned with status; %r.\n", Status));
+
+FatalError:
+ // Free everything
+ if (InitrdData != NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) InitrdData, EFI_SIZE_TO_PAGES(InitrdSize));
+ if (KernelBuffer != NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) KernelBuffer, EFI_SIZE_TO_PAGES(HandoverParams->hdr.init_size));
+ if (HandoverParams != NULL) gBS->FreePages((EFI_PHYSICAL_ADDRESS) HandoverParams, EFI_SIZE_TO_PAGES(KERNEL_SETUP_SIZE));
+ if (InitrdBuffer != NULL) gBS->FreePool(InitrdBuffer);
+ if (KernelHandle != NULL) gBS->UnloadImage(KernelHandle);
+ if (KernelFfsBuffer != NULL) gBS->FreePool(KernelFfsBuffer);
+
+ return EFI_NOT_FOUND;
+}
+
+/**
+ * This is the main function for this feature. This will handle finding and launching
+ * the Linux kernel.
+ *
+ * @note In general, this function will never return to BDS. The LINUXBOOT_ALLOW_RETURN_TO_BDS
+ * token will allow you to return to BDS if the kernel fails to launch for some reason.
+ *
+ * @param None
+ *
+ * @retval None
+ */
+
+EFI_STATUS
+LinuxBootStart (
+ VOID
+ )
+{
+ EFI_STATUS Status = EFI_SUCCESS;
+
+ // Finish BDS and then try to launch the kernel
+ //Status = CompleteBdsTasks();
+
+ if (!EFI_ERROR(Status)) {
+ LoadAndLaunchKernel();
+ }
+
+ DEBUG((DEBUG_ERROR, "-----------------------------------\n"));
+ DEBUG((DEBUG_ERROR, " ERROR: Kernel failed to launch.\n"));
+ DEBUG((DEBUG_ERROR, "-----------------------------------\n"));
+ return Status;
+}
+
+//---------------------------------------------------------------------------
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h
new file mode 100644
index 0000000000..479fb8cbfd
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.h
@@ -0,0 +1,193 @@
+/** @file
+
+Copyright (c) 2021, American Megatrends International LLC. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/**
+ *
+ * Header for library definitions and prototypes.
+ *
+ */
+
+#ifndef __LINUX_BOOT_PRIVATE__H__
+#define __LINUX_BOOT_PRIVATE__H__
+#ifdef __cplusplus
+extern "C" {
+#endif // #ifdef __cplusplus
+
+//---------------------------------------------------------------------------
+
+//#include <Token.h>
+
+#define BOOTSIG 0x1FE
+#define SETUP_HDR 0x53726448 /* 0x53726448 == "HdrS" */
+
+#define E820_RAM 1
+#define E820_RESERVED 2
+#define E820_ACPI 3
+#define E820_NVS 4
+#define E820_UNUSABLE 5
+
+#pragma pack(1)
+
+struct setup_header {
+ UINT8 setup_secs; /* Sectors for setup code */
+ UINT16 root_flags;
+ UINT32 sys_size;
+ UINT16 ram_size;
+ UINT16 video_mode;
+ UINT16 root_dev;
+ UINT16 signature; /* Boot signature */
+ UINT16 jump;
+ UINT32 header;
+ UINT16 version;
+ UINT16 su_switch;
+ UINT16 setup_seg;
+ UINT16 start_sys;
+ UINT16 kernel_ver;
+ UINT8 loader_id;
+ UINT8 load_flags;
+ UINT16 movesize;
+ UINT32 code32_start; /* Start of code loaded high */
+ UINT32 ramdisk_start; /* Start of initial ramdisk */
+ UINT32 ramdisk_len; /* Length of initial ramdisk */
+ UINT32 bootsect_kludge;
+ UINT16 heap_end;
+ UINT8 ext_loader_ver; /* Extended boot loader version */
+ UINT8 ext_loader_type; /* Extended boot loader ID */
+ UINT32 cmd_line_ptr; /* 32-bit pointer to the kernel command line */
+ UINT32 ramdisk_max; /* Highest legal initrd address */
+ UINT32 kernel_alignment; /* Physical addr alignment required for kernel */
+ UINT8 relocatable_kernel; /* Whether kernel is relocatable or not */
+ UINT8 min_alignment;
+ UINT16 xloadflags;
+ UINT32 cmdline_size;
+ UINT32 hardware_subarch;
+ UINT64 hardware_subarch_data;
+ UINT32 payload_offset;
+ UINT32 payload_length;
+ UINT64 setup_data;
+ UINT64 pref_address;
+ UINT32 init_size;
+ UINT32 handover_offset;
+};
+
+struct efi_info {
+ UINT32 efi_loader_signature;
+ UINT32 efi_systab;
+ UINT32 efi_memdesc_size;
+ UINT32 efi_memdesc_version;
+ UINT32 efi_memmap;
+ UINT32 efi_memmap_size;
+ UINT32 efi_systab_hi;
+ UINT32 efi_memmap_hi;
+};
+
+struct e820_entry {
+ UINT64 addr; /* start of memory segment */
+ UINT64 size; /* size of memory segment */
+ UINT32 type; /* type of memory segment */
+};
+
+struct screen_info {
+ UINT8 orig_x; /* 0x00 */
+ UINT8 orig_y; /* 0x01 */
+ UINT16 ext_mem_k; /* 0x02 */
+ UINT16 orig_video_page; /* 0x04 */
+ UINT8 orig_video_mode; /* 0x06 */
+ UINT8 orig_video_cols; /* 0x07 */
+ UINT8 flags; /* 0x08 */
+ UINT8 unused2; /* 0x09 */
+ UINT16 orig_video_ega_bx;/* 0x0a */
+ UINT16 unused3; /* 0x0c */
+ UINT8 orig_video_lines; /* 0x0e */
+ UINT8 orig_video_isVGA; /* 0x0f */
+ UINT16 orig_video_points;/* 0x10 */
+
+ /* VESA graphic mode -- linear frame buffer */
+ UINT16 lfb_width; /* 0x12 */
+ UINT16 lfb_height; /* 0x14 */
+ UINT16 lfb_depth; /* 0x16 */
+ UINT32 lfb_base; /* 0x18 */
+ UINT32 lfb_size; /* 0x1c */
+ UINT16 cl_magic, cl_offset; /* 0x20 */
+ UINT16 lfb_linelength; /* 0x24 */
+ UINT8 red_size; /* 0x26 */
+ UINT8 red_pos; /* 0x27 */
+ UINT8 green_size; /* 0x28 */
+ UINT8 green_pos; /* 0x29 */
+ UINT8 blue_size; /* 0x2a */
+ UINT8 blue_pos; /* 0x2b */
+ UINT8 rsvd_size; /* 0x2c */
+ UINT8 rsvd_pos; /* 0x2d */
+ UINT16 vesapm_seg; /* 0x2e */
+ UINT16 vesapm_off; /* 0x30 */
+ UINT16 pages; /* 0x32 */
+ UINT16 vesa_attributes; /* 0x34 */
+ UINT32 capabilities; /* 0x36 */
+ UINT8 _reserved[6]; /* 0x3a */
+};
+
+struct boot_params {
+ struct screen_info screen_info;
+ UINT8 apm_bios_info[0x14];
+ UINT8 _pad2[4];
+ UINT64 tboot_addr;
+ UINT8 ist_info[0x10];
+ UINT8 _pad3[16];
+ UINT8 hd0_info[16];
+ UINT8 hd1_info[16];
+ UINT8 sys_desc_table[0x10];
+ UINT8 olpc_ofw_header[0x10];
+ UINT8 _pad4[128];
+ UINT8 edid_info[0x80];
+ struct efi_info efi_info;
+ UINT32 alt_mem_k;
+ UINT32 scratch;
+ UINT8 e820_entries;
+ UINT8 eddbuf_entries;
+ UINT8 edd_mbr_sig_buf_entries;
+ UINT8 _pad6[6];
+ struct setup_header hdr;
+ UINT8 _pad7[0x290-0x1f1-sizeof(struct setup_header)];
+ UINT32 edd_mbr_sig_buffer[16];
+ struct e820_entry e820_map[128];
+ UINT8 _pad8[48];
+ UINT8 eddbuf[0x1ec];
+ UINT8 _pad9[276];
+};
+#pragma pack ()
+
+//---------------------------------------------------------------------------
+
+#ifndef MIN
+#define MIN(x,y) ((x) < (y) ? (x) : (y))
+#endif // #ifndef MIN
+
+#define KERNEL_SETUP_SIZE 16384
+
+//---------------------------------------------------------------------------
+
+///
+/// Function prototypes from Bds module
+///
+VOID ConnectEverything();
+VOID RecoverTheMemoryAbove4Gb();
+VOID SignalAllDriversConnectedEvent();
+VOID SignalProtocolEvent(IN EFI_GUID *ProtocolGuid);
+
+#if LINUXBOOT_SIGNAL_EXITPMAUTH == 1
+VOID SignalExitPmAuthProtocolEvent(VOID);
+#endif // #if LINUXBOOT_SIGNAL_EXITPMAUTH == 1
+
+typedef VOID (BDS_CONTROL_FLOW_FUNCTION)();
+
+//---------------------------------------------------------------------------
+
+/****** DO NOT WRITE BELOW THIS LINE *******/
+#ifdef __cplusplus
+}
+#endif // #ifdef __cplusplus
+#endif // #ifndef __LINUX_BOOT_PRIVATE__H__
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf
new file mode 100644
index 0000000000..62e09a75c8
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBoot.inf
@@ -0,0 +1,46 @@
+## @file
+#
+# Copyright (c) 2021, American Megatrends International LLC. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+##
+#
+# This library links with the Bds module to launch the Linux kernel.
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ VERSION_STRING = 1.0
+ BASE_NAME = LinuxBoot
+ FILE_GUID = 74a41ddc-fac5-4787-afad-d81ee30a8b63 # {0x74a41ddc, 0xfac5, 0x4787, {0xaf, 0xad, 0xd8, 0x1e, 0xe3, 0x0a, 0x8b, 0x63}}
+ MODULE_TYPE = DXE_DRIVER
+ LIBRARY_CLASS = LinuxBootLib|DXE_DRIVER
+[Sources]
+ LinuxBoot.c
+ LinuxBoot.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ MinPlatformPkg/MinPlatformPkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ DxeServicesLib
+ BaseMemoryLib
+ DebugLib
+ UefiRuntimeServicesTableLib
+ UefiBootServicesTableLib
+ UefiLib
+ LoadLinuxLib
+
+[Guids]
+
+[Protocols]
+ gEfiLoadedImageProtocolGuid
+
+[Pcd]
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c
new file mode 100644
index 0000000000..fa6ea117f4
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.c
@@ -0,0 +1,43 @@
+/** @file
+
+Copyright (c) 2021, American Megatrends International LLC. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+/**
+ *
+ * This library will load the Linux kernel and initrd from the BIOS and launch it.
+ *
+ */
+
+//---------------------------------------------------------------------------
+
+#include <PiDxe.h>
+#include <Uefi.h>
+#include <Library/BaseLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+
+/**
+ * This is the main function for this feature. This will handle finding and launching
+ * the Linux kernel.
+ *
+ * @note In general, this function will never return to BDS. The LINUXBOOT_ALLOW_RETURN_TO_BDS
+ * token will allow you to return to BDS if the kernel fails to launch for some reason.
+ *
+ * @param None
+ *
+ * @retval None
+ */
+
+EFI_STATUS
+LinuxBootStart (
+ VOID
+ )
+{
+
+ return EFI_SUCCESS;
+}
+
+//---------------------------------------------------------------------------
diff --git a/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf
new file mode 100644
index 0000000000..3ed53c6ba0
--- /dev/null
+++ b/Platform/Intel/PurleyOpenBoardPkg/LinuxBootPkg/LinuxBootNull.inf
@@ -0,0 +1,31 @@
+## @file
+#
+# Copyright (c) 2021, American Megatrends International LLC. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+##
+#
+# This library links with the Bds module to launch the Linux kernel.
+#
+##
+
+[Defines]
+ INF_VERSION = 0x00010005
+ VERSION_STRING = 1.0
+ BASE_NAME = LinuxBoot
+ FILE_GUID = 0551B6D3-0594-4B02-AF42-5A9C7515CEC8
+ MODULE_TYPE = DXE_DRIVER
+ LIBRARY_CLASS = LinuxBootLib|DXE_DRIVER
+[Sources]
+ LinuxBootNull.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+ UefiDriverEntryPoint
+ DxeServicesLib
\ No newline at end of file
diff --git a/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec b/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec
index 4dcec5430b..0c1ab318b8 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec
+++ b/Platform/Intel/PurleyOpenBoardPkg/OpenBoardPkg.dec
@@ -49,6 +49,8 @@
gPlatformTokenSpaceGuid.PcdUpdateConsoleInBds|TRUE|BOOLEAN|0x30000035
+ gPlatformTokenSpaceGuid.PcdLinuxBootEnable|FALSE|BOOLEAN|0x30000036
+
[PcdsDynamicEx]
gPlatformTokenSpaceGuid.PcdDfxAdvDebugJumper|FALSE|BOOLEAN|0x6000001D
diff --git a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c
index b3b8ceba6f..bd0509ab10 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c
+++ b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/BdsPlatform.c
@@ -2,6 +2,7 @@
This file include all platform action which can be customized by IBV/OEM.
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2021, American Megatrends International LLC.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -31,6 +32,12 @@ BOOLEAN gPPRequireUIConfirm;
extern UINTN mBootMenuOptionNumber;
+EFI_STATUS
+LinuxBootStart (
+ VOID
+ );
+
+
GLOBAL_REMOVE_IF_UNREFERENCED USB_CLASS_FORMAT_DEVICE_PATH gUsbClassKeyboardDevicePath = {
{
{
@@ -1268,6 +1275,8 @@ PlatformBootManagerAfterConsole (
LocalBootMode = gBootMode;
DEBUG ((DEBUG_INFO, "Current local bootmode - %x\n", LocalBootMode));
+ LinuxBootStart();
+
//
// Go the different platform policy with different boot mode
// Notes: this part code can be change with the table policy
diff --git a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
index 5790743565..21ac65257c 100644
--- a/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
+++ b/Platform/Intel/PurleyOpenBoardPkg/Override/Platform/Intel/MinPlatformPkg/Bds/Library/DxePlatformBootManagerLib/DxePlatformBootManagerLib.inf
@@ -2,6 +2,7 @@
# Component name for module DxePlatformBootManagerLib
#
# Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2021, American Megatrends International LLC.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -40,6 +41,7 @@
PerformanceLib
TimerLib
Tcg2PhysicalPresenceLib
+ LinuxBootLib
[Packages]
MdePkg/MdePkg.dec
diff --git a/Platform/Intel/Readme.md b/Platform/Intel/Readme.md
index 06c5f32b1e..a34784ccb8 100644
--- a/Platform/Intel/Readme.md
+++ b/Platform/Intel/Readme.md
@@ -87,6 +87,11 @@ A UEFI firmware implementation using MinPlatformPkg is constructed using the fol
----------------------------------------|--------------------------------------------|------------------------------|--------------------|
| Mt. Olympus | Purley | PurleyOpenBoardPkg | BoardMtOlympus |
+| Machine Name | Supported Chipsets | BoardPkg | Board Name |
+----------------------------------------|--------------------------------------------|------------------------------|--------------------|
+| TiogaPass | Purley | PurleyOpenBoardPkg | BoardTiogaPass |
+
+
#### Simics
| Machine Name | Supported Chipsets | BoardPkg | Board Name |
@@ -250,6 +255,12 @@ return back to the minimum platform caller.
| | | | build settings, environment variables.
| | | |---build_board.py: Optional board-specific pre-build,
| | | build, post-build and clean functions.
+ | | |------PurleyOpenBoardPkg
+ | | | |------BoardTiogaPass
+ | | | |---build_config.cfg: BoardTiogaPass specific
+ | | | | build settings, environment variables.
+ | | | |---build_board.py: Optional board-specific pre-build,
+ | | | build, post-build and clean functions.
| | |
| | |------SimicsOpenBoardPkg
| | | |------BoardX58Ich10
@@ -292,6 +303,18 @@ For PurleyOpenBoardPkg
"bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
used "BinCache" as default path.
+For PurleyOpenBoardPkg (TiogaPass)
+1. Open command window, go to the workspace directory, e.g. c:\Edk2Workspace.
+2. Type "cd edk2-platforms\Platform\Intel\PurleyOpenBoardPkg\BoardTiogaPass".
+3. Type "GitEdk2MinBoardTiogaPass.bat" to setup GIT environment.
+4. Type "bld" to build Purley BoardTiogaPass board UEFI firmware image, "bld release" for release build, "bld clean" to
+ remove intermediate files."bld cache-produce" Generate a cache of binary files in the specified directory,
+ "bld cache-consume" Consume a cache of binary files from the specified directory, BINARY_CACHE_PATH is empty,
+ used "BinCache" as default path.
+5. Final BIOS image will be Build\PurleyOpenBoardPkg\BoardTiagoPass\DEBUG_VS2015x86\FV\PLATFORM.fd or
+ Build\PurleyOpenBoardPkg\BoardTiagoPass\RELEASE_VS2015x86\FV\PLATFORM.fd, depending on bld batch script input.
+6. This BIOS image needs to be merged with SPS FW
+
### **Known limitations**
**KabylakeOpenBoardPkg**
@@ -307,6 +330,25 @@ For PurleyOpenBoardPkg
2. This firmware project does not build with the GCC compiler.
3. The validated version of iASL compiler that can build MinPurley is 20180629. Older versions may generate ACPI build errors.
+**PurleyOpenBoardPkg Tioga Pass **
+1. This firmware project has only been tested on the Tioga Pass hardware.
+2. This firmware project build has only been tested using the Microsoft Visual Studio 2015 build tools.
+3. This firmware project does not build with the GCC compiler.
+4. The validated version of iASL compiler that can build MinPurley is 20180629. Older versions may generate ACPI build errors.
+5. Installed and booted to UEFI Windows 2016 on M.2 NVME slot
+6. Installed and booted to UEFI Windows 2019 on M.2 NVME slot and with SATA HDD.
+7. Installed and booted to UEFI RHEL 7.3 on SATA HDD
+8. Installed and booted to Ubuntu 18.04 on M.2 NVME slot.
+9. Verified Mellanox card detection during POST and OS
+10. LINUX Boot Support (PcdLinuxBootEnable needs to be enabled)
+
+1. Follow directions on http://osresearch.net/Building/ to compile the heads kernel and initrd for qemu-system_x86_64
+2. Copy the following built files
+(1) initrd.cpio.xz to LinuxBootPkg/LinuxBinaries/initrd.cpio.xz
+(2) bzimage to LinuxBootPkg/LinuxBinaries/linux.efi
+
+
+
**SimicsOpenBoardPkg**
1. This firmware project has only been tested booting to Microsoft Windows 10 x64 and Ubuntu 17.10 with AHCI mode.
--
2.25.0.windows.1
Please consider the environment before printing this email.
The information contained in this message may be confidential and proprietary to American Megatrends (AMI). This communication is intended to be read only by the individual or entity to whom it is addressed or by their designee. If the reader of this message is not the intended recipient, you are on notice that any distribution of this message, in any form, is strictly prohibited. Please promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and then delete or destroy all copies of the transmission.
GitPatchExtractor 1.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver
2021-06-17 0:51 [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINUX Boot Nate DeSimone
@ 2021-06-17 0:51 ` Nate DeSimone
0 siblings, 0 replies; 4+ messages in thread
From: Nate DeSimone @ 2021-06-17 0:51 UTC (permalink / raw)
To: devel
Cc: manickavasakam karpagavinayagam, Isaac Oram, Felix Polyudov,
Harikrishna Doppalapudi, Manish Jha, Zachary Bobroff
From: manickavasakam karpagavinayagam <manickavasakamk@ami.com>
Add X64 ASpeedAst2500Gop UEFI Driver
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Felix Polyudov <Felixp@ami.com>
Cc: Harikrishna Doppalapudi <harikrishnad@ami.com>
Cc: Manish Jha <manishj@ami.com>
Cc: Zachary Bobroff <zacharyb@ami.com>
Cc: Manickavasakam Karpagavinayagam <manickavasakamk@ami.com>
---
.../ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf | 4 ++++
.../ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi | Bin 0 -> 36928 bytes
2 files changed, 4 insertions(+)
create mode 100644 Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
index b3cee45..b563f76 100644
--- a/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
+++ b/Drivers/ASpeed/ASpeedGopBinPkg/ASpeedAst2500GopDxe.inf
@@ -3,6 +3,7 @@
#
# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
# Copyright (c) 2020, ASPEED Technology Inc. All rights reserved.<BR>
+# Copyright (c) 2021, American Megatrends International LLC.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -17,3 +18,6 @@
[Binaries.AArch64]
PE32|AArch64/ASpeedAst2500Gop.efi|*
+
+[Binaries.X64]
+ PE32|X64/ASpeedAst2500Gop.efi|*
diff --git a/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi b/Drivers/ASpeed/ASpeedGopBinPkg/X64/ASpeedAst2500Gop.efi
new file mode 100644
index 0000000000000000000000000000000000000000..07d9de0fe5241bf26d516f3522a930880a57f5c5
GIT binary patch
literal 36928
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
b8aJ)p<lEG?Y5k@rHf`9nc~ko)MKS*$P$*9B
literal 0
HcmV?d00001
--
2.25.0.windows.1
Please consider the environment before printing this email.
The information contained in this message may be confidential and proprietary to American Megatrends (AMI). This communication is intended to be read only by the individual or entity to whom it is addressed or by their designee. If the reader of this message is not the intended recipient, you are on notice that any distribution of this message, in any form, is strictly prohibited. Please promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and then delete or destroy all copies of the transmission.
GitPatchExtractor 1.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-07-29 1:31 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-16 21:51 [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver manickavasakam karpagavinayagam
2021-07-29 1:19 ` Nate DeSimone
2021-07-29 1:31 ` Nate DeSimone
-- strict thread matches above, loose matches on Subject: below --
2021-06-17 0:51 [edk2-platforms] [PATCH V1] PurleyOpenBoardPkg : Support for LINUX Boot Nate DeSimone
2021-06-17 0:51 ` [edk2-non-osi] [PATCH] ASpeed : ASpeedGopBinPkg : Add X64 ASpeedAst2500Gop UEFI Driver Nate DeSimone
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox