From 0d2711a69397d2971079121df4326d84736c181e Mon Sep 17 00:00:00 2001 From: lgao4 Date: Sat, 29 Oct 2011 06:59:30 +0000 Subject: [PATCH] Sync BaseTools Trunk (version r2387) to EDKII main trunk. Signed-off-by: lgao4 Reviewed-by: gikidy git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12602 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Bin/Win32/BPDG.exe | Bin 579301 -> 579301 bytes BaseTools/Bin/Win32/BootSectImage.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/EfiLdrImage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/EfiRom.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/Fpd2Dsc.exe | Bin 1436918 -> 1437217 bytes BaseTools/Bin/Win32/GenBootSector.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenCrc32.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/GenDepex.exe | Bin 637047 -> 637593 bytes BaseTools/Bin/Win32/GenFds.exe | Bin 1610088 -> 1640544 bytes BaseTools/Bin/Win32/GenFfs.exe | Bin 430080 -> 430080 bytes BaseTools/Bin/Win32/GenFv.exe | Bin 479232 -> 479232 bytes BaseTools/Bin/Win32/GenFw.exe | Bin 495616 -> 495616 bytes BaseTools/Bin/Win32/GenPage.exe | Bin 421888 -> 421888 bytes BaseTools/Bin/Win32/GenPatchPcdTable.exe | Bin 631051 -> 631597 bytes BaseTools/Bin/Win32/GenSec.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/GenVtf.exe | Bin 446464 -> 446464 bytes BaseTools/Bin/Win32/LzmaCompress.exe | Bin 397312 -> 397312 bytes BaseTools/Bin/Win32/MigrationMsa2Inf.exe | Bin 1382578 -> 1382631 bytes BaseTools/Bin/Win32/PatchPcdValue.exe | Bin 563443 -> 563443 bytes BaseTools/Bin/Win32/Spd2Dec.exe | Bin 1410672 -> 1411218 bytes BaseTools/Bin/Win32/Split.exe | Bin 425984 -> 425984 bytes BaseTools/Bin/Win32/TargetTool.exe | Bin 585238 -> 585291 bytes BaseTools/Bin/Win32/TianoCompress.exe | Bin 434176 -> 434176 bytes BaseTools/Bin/Win32/Trim.exe | Bin 842269 -> 842815 bytes BaseTools/Bin/Win32/UPT.exe | Bin 2329281 -> 2329471 bytes BaseTools/Bin/Win32/VfrCompile.exe | Bin 1273856 -> 1273856 bytes BaseTools/Bin/Win32/VolInfo.exe | Bin 471040 -> 471040 bytes BaseTools/Bin/Win32/build.exe | Bin 3028851 -> 3056838 bytes .../Conf/XMLSchema/DistributionPackage.xsd | 5742 ++++++++--------- BaseTools/Conf/build_rule.template | 2 +- BaseTools/Conf/tools_def.template | 8 +- BaseTools/ReadMe.txt | 120 +- BaseTools/Source/C/Common/BasePeCoff.c | 2 + BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c | 4 +- BaseTools/Source/C/GenFv/GenFvInternalLib.c | 6 +- BaseTools/Source/C/GenFw/Elf32Convert.c | 10 - BaseTools/Source/C/GenFw/Elf64Convert.c | 14 +- BaseTools/Source/C/GenSec/GenSec.c | 4 +- BaseTools/Source/C/GenVtf/GenVtf.c | 18 +- .../C/GnuGenBootSector/GnuGenBootSector.c | 4 +- .../Source/C/Include/Common/BuildVersion.h | 2 +- .../Source/C/LzmaCompress/Sdk/C/LzmaEnc.c | 21 +- BaseTools/Source/C/Makefiles/ms.app | 22 +- BaseTools/Source/C/Split/Split.c | 5 +- BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp | 7 + BaseTools/Source/C/VfrCompile/VfrFormPkg.h | 8 +- BaseTools/Source/C/VfrCompile/VfrSyntax.g | 33 +- BaseTools/Source/C/VolInfo/VolInfo.c | 1 - BaseTools/Source/Python/AutoGen/AutoGen.py | 77 +- .../Source/Python/AutoGen/BuildEngine.py | 2 +- BaseTools/Source/Python/AutoGen/GenC.py | 8 + BaseTools/Source/Python/AutoGen/GenMake.py | 14 +- .../Source/Python/Common/BuildVersion.py | 2 +- BaseTools/Source/Python/Common/DataType.py | 1 + BaseTools/Source/Python/Common/Expression.py | 555 ++ BaseTools/Source/Python/Common/GlobalData.py | 11 +- BaseTools/Source/Python/Common/Misc.py | 8 +- BaseTools/Source/Python/Common/String.py | 56 +- .../Python/CommonDataClass/DataClass.py | 4 +- .../Python/CommonDataClass/Exceptions.py | 29 + .../Source/Python/GenFds/AprioriSection.py | 4 +- .../Source/Python/GenFds/DepexSection.py | 5 +- BaseTools/Source/Python/GenFds/Fd.py | 8 +- BaseTools/Source/Python/GenFds/FdfParser.py | 268 +- .../Source/Python/GenFds/FfsFileStatement.py | 4 +- .../Source/Python/GenFds/FfsInfStatement.py | 14 +- BaseTools/Source/Python/GenFds/Fv.py | 8 +- BaseTools/Source/Python/GenFds/GenFds.py | 37 +- .../Python/GenFds/GenFdsGlobalVariable.py | 73 +- BaseTools/Source/Python/GenFds/Section.py | 2 +- .../Python/PatchPcdValue/PatchPcdValue.py | 1 - .../Python/UPT/Library/ParserValidate.py | 12 +- .../Source/Python/Workspace/MetaDataTable.py | 31 +- .../Source/Python/Workspace/MetaFileParser.py | 1126 ++-- .../Source/Python/Workspace/MetaFileTable.py | 106 +- .../Python/Workspace/WorkspaceDatabase.py | 509 +- BaseTools/Source/Python/build/BuildReport.py | 46 +- BaseTools/Source/Python/build/build.py | 344 +- .../Intel_UEFI_Packaging_Tool_Man_Page.rtf | 29 +- .../UserManuals/Trim_Utility_Man_Page.rtf | 46 +- 80 files changed, 5143 insertions(+), 4330 deletions(-) create mode 100644 BaseTools/Source/Python/Common/Expression.py create mode 100644 BaseTools/Source/Python/CommonDataClass/Exceptions.py diff --git a/BaseTools/Bin/Win32/BPDG.exe b/BaseTools/Bin/Win32/BPDG.exe index 016bee5d840c122adec6de0bc305dae8381edde1..1628a4f4536593be33f015fc1a5db048718f54f4 100644 GIT binary patch delta 327 zcmaF5R{7~#=d&F4U`dd3w|AZ82xNx4W&7g`9QjOe MtG7p8=ICYy0HmOMqyPW_ delta 327 zcmaF5R{7~#?d4*96OmYQJs16yh)R_6OEb73@0ZfPUYyU^s;Z#Ipi?; zZ=wqGomrDMt0e6_$gv(M+V}9@zv)kv8ReO!XHVMBuENN61gv`A?7)-LMPD##f|PG} ze8KouKpmw1!PR4$tN0igK$wStfgwIVH!(9WK3=b&GI{eSUM`?1?V&#zw}<{@S|1O# zA>n_q%XFSdW+{*j?V6FyK+LjTGm_OJ7i^Q(7RPhbGmo(;XG+BHaK0 delta 73 zcmZoTAk}a{YQh8N8S^GJK5l)?*!q~M^)YknW0tLtSwAL#gtuQ$WIg&oVBVQ?HMf1; dyr%VRo!nnHrF#1sC$<<_CNsnBTnTL7>;YiLBRc>9 diff --git a/BaseTools/Bin/Win32/EfiLdrImage.exe b/BaseTools/Bin/Win32/EfiLdrImage.exe index e06cbedc51ca47a95828ab41b6d4278a83763979..574713ff1ca37c003f21c5e6a8707f6d5715cfc7 100755 GIT binary patch delta 8243 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�ZQqBM>@ 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 diff --git a/BaseTools/Bin/Win32/EfiRom.exe b/BaseTools/Bin/Win32/EfiRom.exe index 01ad3703d0114ccdfc4f2b042c4c90c5b8d3c8c3..1b5831ff2b4a89e5080d2cd12639e4e5d619dac8 100755 GIT binary patch delta 73 zcmZozAlSszXS32(nXk@fEbfn5pO->0gm dxi;{m`9&KUeBb`0h%HBx$;@zj&>XgP#sEdaA`Jil diff --git a/BaseTools/Bin/Win32/Fpd2Dsc.exe b/BaseTools/Bin/Win32/Fpd2Dsc.exe index fd41b60624b4d57b6783f36bdedec45feefe60f9..d2d509c7609aa6d695bdc48b88ba488d67b41fa8 100755 GIT binary patch delta 3173 zcmZt|2~GzjO$n(> z2$oIHVpL*tbl7(R6%;UT$chz{g1cV=7mPUSER``rWFrF=6ris{UkPw|6Sx1OY zF766(w-pfjNF_@jyB@aW#lLokFG?J z5uF=Bxhs8Tq`Y1eknDo$BzY(K`mTx!)U95XjC*k4?A88$Nq$B*{I6*S&m#wnD*h=}}o( z3p26=V|lgK$=`ut;%cNDP+2g;Yr(LzfJu zN)R~nU@E^NQ!33$ig+Hn-3_9z^8tKH_;EOxKtrJWsB)qC(RDuFUF6Uht89Qp{rnV> z!}@-{WPQIC!Z-wL1RL}Ee(9-?6-w1=X!}sch|SQQl}Sm_PVf_9Z7- zXkK(c=Hn%C1N}LfqaA)9P8E|El(|tySmQ=*%paVWo#(CgaD+gum&D7QUL_0WO7>RE z5NyqRtL=WFQ`*tuuAzU)eHURGA=sg`xLmzqVV+@H-o~`kPZYLFbSk>c(OlDHH*Pp0 z&Cg=SL*q%gH}j`?=%jr92GP&zeHYh4jE}-k#2bAS$%P{RMf6M%>57RKZDq(>L8JO(NlHDH0c{TNfD|0 zJEuX)WJez>)4b!$Ao+@XiWs?h1sPce&GZ?wLP{=9b~Im{?4*7ynl*9Kw^yLmnFcXe z4g1&Ag{}w_KiZv8?}x$!I!W{+X7s@=uk<>Iy+K!UgOkctlU(4;4eB5ELjWQ9SjoBB z%%b=u63&S@p`C<`RMrD)LKsjHJF<0@g1d!ANnSvbg)Xo;Sw=`%@J7qxV; zG;EKAdgDy;357xKLI@Zs2m&`s1-CaDjN$tZlJDWY{XuoYNXCwzySC) z(s|sG=aAh+`UaQA!_Foe z#Z_8?h2f_tK-!E}n<62$8M)q0fL+aW7I&%&YMSY9xkH!1riIStcKO4+7Q}nTLQxCS z^+@5LEp$5PJqPZwv+8Zow9>iUmm6SBD-GxDis4`@;ynkUsTJvpFMvZEoyEW1DTT5Q zsViJ=pblVcLlxibh23p5l=FT9HEl?8sbF6_)o8|aMeK}hZj3JbVu)-<>&JZ!+uBk8 z%y-~YI}(>2hv)4mZ&@?U>_EL0R*=_$0XrCK2OoymxqvW$a%(%Nd&qYi>@Zrd=FjU| z)2P_WX3%z`t`ZICI_UyVI0A<|>3A(umbIq)e4A_t!T`9iMdy__U+h#*R7e;A( z4rF#wtw_bX-nXa%gR#l~!(lklMHh3=%q-;7Mj4)MxFNcW51{{ z!1#V_Rh#o6rJsiIRXZG^^3RU0aH=2Od$9sK`!SjC_JQjFHUwE3#1CMsA7?_@0Cf{X z$fn?5m4q-DtKJhAxHdqS%&qgGgh}0yug`ncKvwH)R31Qm8H{aAWh)?I5aq322_Fq& sL(EGB%OEEHdz(Rh9~*DMyYS|HJeQRN+{Yv-xdgTMsh9OC3mcIC0~nU}od5s; delta 2862 zcmZuz2~<;O7XIIRED0n)5`KtiA-Dj_rnUltmQ_Wn7O^eoq;4?@i?YdL-RMvqn{fk5 zI$o#Ng`71Ez9F0;s*5%YXZABIXC?Fu91hLwV*jk;={hxXe>pSOrdH;6*d%wG- zvORUUE%kFJjZ5igO?YIKFe?Ki78aZDY@Z~ceaAd@ znA^nJ(k9PaP^0I9*|e!!&mnkAw_ZqDBiV=5<{2ZW;~-6pBo8_#a8v(2vl=ygIERH$%#ZgzHVPH2LzQ1{k` zJYz`S2K})glj(}U4)K`)&Bibm=@C}5ONyCLD z0gaY*Wm1KcWzS!vbv!r6vgA{#zmH|H7k!1Z9Ium}U|%U0-390_l_{}Oj&QLg zR=O(eM4y%YtO^HRm8 z7af)#K;l;|ZjiQ{O{hK17=z%g+lymffvOPqyeG^7o%Z+8Q(@*7Z zXFgD|2zFeM`9Zs%O2&sxGuix97Mq{D@}6kNj+H@CV5g>`%nm?$-7QIKx;Ro?obs>O zOK>=aP7oI{Xu~YOrO=Gx7qT6SF4HCa{qgXh%QTjM90>9Ts@6Qql{*fEFi`a9$kYEP znA1RGIY%%x&;~MR!OW3-V_rTa4^em6-9){F<$vQ~ zZ8b;XG;ZLdzlFgj8qZG>U}`g+$)~o#nr0eqw<=d4P+lUqLv1q+bejHwKvrcI81;qF zZAD3c+%34tMyx5>1wL13Bwu+P-n~L+#2q~^5M#D3Gb_}Xqt7)M^9xuIC%?h*?!;X@ z_N*ox!4bo_5n=fC>LqBrLKAsKJ&dzH<&ss3SOp;r9;0@L4ZvGg8pnV35cXPWG@nSI z&59&8eg=vb8qW7MKvD~ihkk}FE%Y@Zo41D&!QKPvTabZT0e)qxQ)TdKD~%D}kG6-8 zV(dL(cPp+ACBvy!8o__@CH&M%XWLbuwD@40XE>Sp#r;WA&UJLwnNc1bl8essJ({9h1`RmuA%zh7eZh=)revDVxb&i zOT7iwv?E1Vzk9lI_>pcOA;Cpcb5eSE)$ z`PVTYc3pt7>vWbN>5xHkr_3Yh`Pg|$og2B8%;~@ae(3Ov$jk2hDi24G#4n&F4-+cMqMxXPpD}4Wzf}E~MO` zaZbzcyFASgh-pPnuN->F^s)qF1$^FgLKsFT*u*0+tq&8d$_ktMP|^3VKwTdeugG8E zw?6cL@mz@Pr(?xvVx_(U%Q*wKl;@r#BNX)`)v6Mx>qql6AH#4zjdJGCD9HNktk448 zdMIf{Cf~k^OdhX?qMLNQSkPIUfP**D5vFbha5lx*;NO)8)+B2D31RSk?p8wPKiYGP zE)-@?RKf?7ljf&BwiHqx1D1~B9oO@fO9n8-)udjMn3V2L)F()quxsI%U>TKS~OX>kHq@*X6w!HcSp{d;8E12KGN| z(D7}*1h)xSPWF&FK^lG dxi&TS>4Q)o$L(7T*bEezEX=k)3uKeh0|5CKAZ`Ev delta 73 zcmZo@kZNdDE0)}s#u=KbqFy=c~c dmp!jaE(*!dShszR5nGHblZDxKt^l@g`T#k#BDnwn delta 73 zcmZo@kZNdn&b&#DpIbjOwti-6{mk6@nPux|)`tNg;qBK0S&u#t@VQsMf9=HI d4*MDxrcH@9wAsGKh%H8z$;@y&R{+~LeE>($B3u9f diff --git a/BaseTools/Bin/Win32/GenDepex.exe b/BaseTools/Bin/Win32/GenDepex.exe index cf6ff7fed94ff3d1d04318a6f3eb989d4bef45bc..4ffd690528221a099e4411c204655578a09bfbda 100755 GIT binary patch delta 7289 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 Qr1QVyytbTff;XK12Vdc-1^@s6 delta 6911 zcmbtYdt6l2zTa!lFt8cLK?D&MQ9uS%)Ih}tDyStsP&eiSMID(5QDAUpRLG8A(=tzX zQdhR}on>it4?ad5@R6qWI9d7XXirnKbG-Jju08E^JL~(~;2^jA*M-mi&RW0qTfg^O zd+oL1hps<;+jUQPLhHX&j~epPR^>0pRYk!Qt%z^`sOJpKM&0U#v9zndR?L z`FNM|{DdJR<|s;`RdF(MpA0NuEyOK=OcYmt~dd5V6x+wQi*Xmu0 zvU(RE^H4h)oAc1rh^0Pf}FHsVVK8;qbYkZ*A6Z(X8LH zSwEs#zg4roO=*{Pmx9P<46U2>qk?^2^>`NR!1q4hQBC&pbB}vi7+K(S%7ptb8WIULpJTG5Ixub6{QT>a#aRr_`v3_bX8Ep<8nCl4BlpaAJ&JDTHnFaA3}QZvi0|}(cHg2$(k++ zc1Y55`PKD3*l54)>50rb29$WfDDD;=Sw4S4WF?LV0mkT4B-l+7NX>AE&!OjnUc{H3 zE#L#6d7tHR+lDktK8OxJbVFt|O);DRQ6^Wi`&Vrk&n)EhK>ueO51Wj3KfZly^w@IA z;)4=+Sb+|v&vlnp=<{VmuWTgAnsw?HkjTFQXbl9oCD>b_<>97n3z?5Uxb0UPMA2k@ z0a`1>-Xt}OpT01HmH96{YheQ@ywJ7CQ8rH>3?`(+7bc;??J2Kx_~z(UAY+~A;S%iB z^78oS3Ro@$;q~WUZ**qO^D)sBHY2BCHv-{5^n6d&B+j02|1dw|8c+zW)E&xkO#sS5ixv1UnYB5w@W0b)Y2z z$lz+Uk^mH0Qbp=fHxvT9RkkQH#&+TI8kN972LEKYXP&pxQS74L2>$EKZKIo*2RTmx z*27T$gRfjwSzlgMlejdfo6HLu5DWrYF#(#8n%NGotHM$4GVDTD^vwVYXvG339##I|_9Us+8W45^_E5-|`k!b{ z^UvMyRGEjLKCqW9;L8GYqwB$63OFdij9U3PY=e`?(=#%lT4gMH#gNvbzQLek=7 z@1JN{8o4{jHy_MRqUj{)5T=vgWL=f)QhKCF^-v)@%8L&DlJp3e9tE5LtOT3{&|)}_ z*1N$KQOD08UKE8|pcv(Ob4x26o@%|G7ai##U3vV-Ea}QuN3yN&NuEXrUb|4hj{6^b z^*poGLSP+t9GhhEpm~lTIo6vU;Wv+^vctUHYaVunuYT==xHA}p3}a!vD_eG2(jLC# zcs4slF>Q5XVG_L3&jN^t77|Im3feUQm?y70*=}&q*AGDdP=XIa-LvPqihX(=h@>Rw zJK6CC2L2I@LM`8Oa=$D~*X#A{I`8yGru2N`8_AY0!S@x1y9@aFH(s^=7YNq@U-Qjx zc46P}qi^;#*8T-awW}B+Yrmyg$M}r57IwM;D(vtf%Q>^%9v^M42IqJFTW>wZ(kFun z@`>qzvIX8b4VoHhrQQOUPj9fP_U$w)<}X0NGx9UTMhHsD7IKJ39>pTk#LT<-GC zaXa;&@91LJ{Vm_kVKRW@-fJu4DuZc3I;NTgn__9h-+yl+3*o7!6PZU`8XcOz%TJGB z7VbYi#S#K_gL&kcc%!yL`SxoCOyjH0H(NtQZL4FzMhN3Xb={jlRd;fm#|F$yc)5(0sh5TreLIQ3{Y;+7|c#B70 zEQ-IQC0IuE?wseU_8Rh848L}gud$ z;#vVcP0JnYWChnh&$FaJz$m``^FdA4kOh8UF^TO~ON==Eq8h>{UmIYf;topbN@abE z|8OlY!;pd?z)iz!;_L=m+8x@Rgy|hH+XC(zCh^);Q+vMf^W@Z^97O65JTvDR$q{6PyE}Z1=_|H;iCFAaqGUW*w0b1by;`$cGPVnV7 zy0Kn-_l>p|de_e9@7!q5?%~&O^lXe-$1l^^H9qpo*=&XXl`o^!)LszN2hdwWLz%&f zfuIcl*w8hC*w3H+%|4cX_atLo8U^})&dl=9|Mmkm_XHTIt}-Ax6M)rX98-dF`(gkV z>D>Tu)`(g#F<}_!4&W8tBr~U>aOQc+Vf+w9>nY%#Gpf$LLsCN#~H!uIfB& z(8iiGrVQl||Cll%n0|^$FdUQ&@}KOcHBNQW4+dlbXvq&oYY1SdgoX;~#`AwVV8xuq z_i3x2aqy}9`N6K_3dy8Y2iGA2M%ym7O78f({LL5Nh&j|EL}`9vvigb__LYWnbiTsvjN58NC@jz>8r2ye0l!citrHaY*;&iUu~=ni)%J! z1}oXKN~E@CZ{H={ILleYw+ZXE}+2(aW;y10%|mSNsXY~ldo_{Y`I5m zn_$Fv6Ep?=y%TbI0RFZu%Sc}a`40mSOI_woX%a*7nQlzT*fKF8mhEI4#V@gJ$bH!U z^x)zp8))$&GWwq(=?TD-fHeSGN*mF-7tmFLvFCJpNH){u+V!@Ub1keDi|wa{Yb~`l znn??3)j9BcJLWO5JmKlcE?IU#eukJ7&k8IXAShq#j%Q`YK08GY8efc_K(|iJ%tBz( z$v|cTQ<;t2sKK1~AcRhDFEtsbP0ASGCC9B|cNZ4hWUnGmF;mB|;YP?N z**q%xC$c_$DAK=5CA50HK2K>y2{nCl=%(r$=>Hu++m8dS9pd>!Ha;0!5v_r-_m7#F zHzqHC1l@n#pPx5u-0%_ld9V%_u}Q4g((Y*Y0Z{m}(HaS$P|rlm1(*jY15hokMeAw6 zMgSGbvuN!A{3oC*U>{&V;Gck6z;yr}-aD~DvY8~UHQunfXypS60n-4}0p$Q}K*r)l zvh_`jFMD>Hn32quv9&8NC$qriWHpu1)#=tv6aFS5Q`A)4j|Q?+)URzRLSCNk-90P8 zAp?sCXU~~4%N?Z^GiRn(Ru|)z`J0XFR!+!L0~4}L_kS@A*R6+dWWTglUTWcqk~4<6 z%gfyrJ#mRQvAWXLIPtFQY1H*l`FJB+2)0ez8dw=`-Vz@5f>PLxIbT!?yEErbrLYHc zz9jmkn)BK_4=B!n;;d7g^@{VL;yk33gervtnDekAwx*gphn2KY3I{UhTjFG@xu2=P zelB26Ge?F8k}}PQRW>4UrLQ@q6YC__PBKS{8I#PRft*R^gC_GjRj%dUV@;hzWue&; zNGdd^sVm1%H_Im^Fn+pa>L`j<+WwsP#NHPziHO$9i!WN_6B@YqV%Xdy8Xr;_c2MM< z3Zt9oK;@~hSy$;QI(SzvF8x(2P=DwmGHSFeri!u}Ek2>~e)~-s3OslP2LG-VicJ9{t zs;%dX&*blb%^g(5;d51$`jD^jqnX;KK@YT}SZ>JGil^OOa$6^haeK6su*T96OZI3n zYDQo2^d2osebpt-?9p=6nmHnBua>QDb_;#4HdKA?G4YiA4fAbOl}fj_RE(?FqQ!T6 zwRrWhw?*VWt-m_`q8PJJ%T-TZ7i;!OLvw!;Z|#$Y&(9RhFGW2zMhx|9_o%0q2%lfe zv7BFNQYw66e7)92T&~s3;!vH*h5~N*J9a?a^lR-YOwB8{kw;N>w-;&qwIS;KLNRZ@ zmZ^SMEVl2L+CMrbKE!XCNkrC4$NtqtjF!JG9JfN0`{n2Q@X}(R=v*gtSGBb?RXZ|T z9IcfCd&NI}K+6gfqb>3@Rp}9D_etJ~2edeK?<`R%htyZA#mll!2BO@sVc@}%3jY0R zhq!h?8xo%Pf<-Bo$KhhHp*FT#Xj8S244GTNpD^#*oR*PBCcQ_#R#TAJU0$LyS zM2TosCv%b7K}@KV7QQxEtgDlDESV?XsgnuFeny1WOZxZQ#K?NB1KEW#_sA84=k6+u z{+n1)FQwI=5^vONIbjQKhACc;Yo-`qD>F+8u^-gpEOmo4#qEXr(W2;})-G}LW=-+A Z=ea73x(mVHsq~fqM`iM!dj-doe*;zyUYP&@ diff --git a/BaseTools/Bin/Win32/GenFds.exe b/BaseTools/Bin/Win32/GenFds.exe index 9209a7dd863814e33d899f6d58a6bf28624eb6ce..d32f23963e2a8bd657e1f88102a4a6b57013791e 100755 GIT binary patch delta 116736 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 G;{OFn9n0bX delta 92366 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 C#zVUn{l)4>P(xZK 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 delta 16819 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 diff --git a/BaseTools/Bin/Win32/GenPage.exe b/BaseTools/Bin/Win32/GenPage.exe index 2cdca2ad6c220701a854d11dad80cc4ca62d76d5..639b88ad21c1a59279a9e17b5b61ed3a213117a3 100755 GIT binary patch delta 73 zcmZp8AldLha>4`VW~Wt+k6RxzwmxQReazhYm}To@){g-o;qBK0S@%8=*sAz^UH~h< d4`V`ST_x03z86$KnNy~2PEMUAUu4 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 L10m-*I?4VY5`X*q diff --git a/BaseTools/Bin/Win32/GenSec.exe b/BaseTools/Bin/Win32/GenSec.exe index 64730c5fa5c66c88a90962bbfb300f43e49a607c..035dcc6ae58827f7c5592d27fe8be64ddce0326b 100755 GIT binary patch delta 12190 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 delta 12248 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 diff --git a/BaseTools/Bin/Win32/GenVtf.exe b/BaseTools/Bin/Win32/GenVtf.exe index e15f567a31abedfd35e5f9c78f58dd79b7c0586a..ea7ccf135068c55a500125e9ed31c5bd83e0036f 100755 GIT binary patch delta 11741 zcmaia3tUx2*Z0ic=Nt|Q0s?ZssURvQ2#Q=(&dpm87p16B@m9oRuUCr4Krlc#9#M2l zyNj9Tr7Thua;sT^p{bFfS&~uWBi2DEvCyzkzW?lfw7&26zVFBH_dn}0Yu3!HS!-s_ z(c&Gx#XEc}t$eBez0IBebg5uZFHuA7Rhl!93c?H*KbIHg5K_|U(wS{BX;ZB&vxOI2 z0{qIen9{M+J6B~%Znk7-D~t|(sTIlHY1Ze38W%6>E}U^0>Q$3XNaj;>Ey;aRUs~Pf zvpx~=UDoFWmFvH`{`o?YYXCQSuF#O>CLD78b>(pOD$`}?Enm6?^g zV`lNQ|1sotjK8KaNEz~0mQd)PL`#IT?$O-2MO!@loD$`cRZ;brxKSA4F_DG}&w2z< zJ7KNI2=0fq!a~doJKn^Qx!Rl!JEoAG@bzq5E`V}sJIBNc_k)UC|PL0I5_g{~J20Z9X$W-4=a$6U{+3vULb&{W}E|@1*$>U{3nv199oUsBZ(d1b7*q#pKMB&(z&l&mh%U+&cLigM8&i~iUN9;b zt_L?e{rs4sVL^eXAxr4{!q}m^olYeydPnHj3)hCuN0g@w3!%$|#lwQ>0b%1Xljn#X z%>S@lhn(!Ur;v&=ccfXWb(e5sm=AY)o1h8F)c==-nK+gdwv&~PmW=jvYu{Em3=cBz z-4IO6D@mTbQdBQtRBJXhl@vCSyigRjnzf|nEQMh%%_YeGK_i%v`w z14l^I1#@z{Im2o(wWnH-VkhC>Y-%nkY$kaQN9@_~W@ewb9vr7Q_oEyqfG4< zr&(ZpldWb`w>i0|)6?RS$XYVmcN$rP$!gB%Hk*1B*YZez(!8JwQ%hC>|Myg`=a?or7tmW&?Xj8=1Uw>hH+ zi!V8%Ofb{=u#+DqP;!^%CBePfgH70C>e8aB%~@W*xEv7!@7|I-ldVhL~T<;}~vv9fuK(Jh&{h6g7 zH9@k`-i@0{3;s>;EjE4=_(t$3TT&`)9u;k8#F=pXsH@O4%6rNmZ^*NGP-MfAf@>Ps z0g#rn60xuy09S`9fshY?K5T(JQ*k)dK4;Jph>qjAxJF#a^b=c&I#ny-IkWU5kS%fTV zDQQTwWVDuCAUh+FxT6{@PSK#gXHl%?%s(p>ixYEO(h*_tV17$36LWGG&VpQ8VVd49*OeusE8V*OCYv)3n|2)3 zs3W*~klaoGNbXjQ(UNWrU(1sFxH+TVVmdy+R4+_^Wbp94!E8|XBl7MvV1t!Zwsi^H z#iH6|OXVh(%0*58O)57jsoa8vTuikti)TLB5h|zhMLCrb%zaNWy~<*0#S&Ur*m2!Z zTsJ$H;{JvXZ>@};bSrgv7>Ea19ySJ9Zq_5qgP)pP(r84QCqZIq4hJLx&F!{iP7t0P zlZtEoy)kjrOSnEJ9B-sS5z9I4FT&c0AwKP0O3acknv>h`E{fR0PM)@O>r29kh#@X# zu?aZ|(B-7!!|E;cM6^B99Es7dp+NC~oKw;mjnVf&Vxw2G;akvt(KdX0q`-}RoJI>z zjvbQW+G!iC3+H=IwLBDZ?Wrm`K-g(^TIB_>izlZBt+u+F;m_KYi?wqmZgIrLQND_L zQmy_%^H}$J@8TR`vCQa=&v3-;!#p%H4;(g-SnvA%!vpu=ZQve-b!?x+)`3LBD&~V% zjtaI6KQtpc@{tfGn4-2(U*SJd>+s0WjZSc#Qovj~M%5z%!_fCzL5hBn&Jo6p8$#oS z^l>3>c_!H+*M;3cY&We7g!SX*(`@0FalX_j*pK(sg^kA)1SH7AxA>g|)+?OtDAa5= z$VCzXJ9ccb<7p9ic5ERn$TVTm_*Jw}Xd53yHwZMwT^Q#vNEjL8Q1nqX^P|P>=AdMA z3(Rw-?PWI%F5+#Kax<>llEQA17tD%2Ckd^#m~Zf6?Y76vo9K%BDb>1mlPxeZl6$!bKgM{+|CP@?;N{lG z>cP~PYJCllPWWW=fred{FTN~mqUx0gY)-5a5Fuegpm&ptOPTo|71_u~BNe+1unkv=8V#)r}<;c~o>pO?GRaVc&mrK24--(m_% z#dk!PgfMzhh)oEfdxXq{7|#ESusI=+W(fxq(uVo`$tLP(Tfs^v>xjSl`?30t-!N-y z5)K2aoe(;40=_2AofuAc3L7R)qrJj66Gzg~TPAsG%c5+d9pm9OAy;eFPn09C?C--{ zrAf{M_5d^E1?Pz8LXOuye2*$c>rhVDJil9mq4oZ znPIj(s*uwVk?+P!HMzT_!wa?Dn{NGP3G0Kr=tb@*Z#S#!PNs8_zlq{80IRoNl0DnT zLY`UQ445ISZ2N@>D5>+pSY>^+lP1UVsK9)Ect(yM^^LC-Dir&#;M?vgdQo5e1UK@CB`-Mu|$#$6aog|^;(*muAvFStjEJcjE^UhUM!IyrB;FO#iJifhUeu4j!Jcrh!H^w=WTmQ@=t+m*xJ5-~U2 zDQNEBE#bA#&2{1EEMe8WfXJ+QXuxFI0k$1H3QOi+1>b7pw}7t$9|W5XwP)sWDq1Hr zEeaoae9_-tPcN#~JQHP46Kms^ETc40s9rjnRtlGwM$*b!$7Mw-nq9jgFVGI8x?rvv z#PQ_=8j$1VDU?a;zhWk>8=X0juF54)3Rzo9>B`!xTfXL;oP^T?)yK@Ia3`S-!^!$2Fxn0RA+R(w3d`?U5YL}P)zNdd!6>F`SPU1nrfFQsNZ~?Rc z0eTM#;}1=9W0sbFHe42v0~83G4=svst7ZB>zQY_U!NQs4^J6?>TXI*m+_9vMA9WgO z*A9DFFyqP|@LpgNg~-|SsTVkVQoYRGk}Y&Alrc5Ks8VY90wYKOSQs<+G%de zxZP0n0@}Jn;#WJmZlk;h$DZQov|7)PSF(-SaN6P`LU*H=dd4%U&Wpfe$_h28`5cF;QM z=n$$$GD>|T=sah8RSFxmtop7Y)c^;;ZsAVxg@C(UJ3{ENnNv_^X29^0BH#EtjqM5vqY(?FKiT`t^LChAwE)kKHD&}*iu}tytMch${F3)gx zsU|4Eh^M+ZFXw@Mkd&3f$vc(xFD`TtO^`|oxj9t3(!%Ccl_hno=A5uXMJ$)@7hw>4 z?FQCb(PWY0)^K`dQl zTQ`h$!>9rD0O+w|y*Rm#kBmzx)ssFb5?IF zhxZDeoU=bes#{Dh_(2SL$-Yvi=XA3^8UIWBZulSfk9L&G(oL*Xr0^|V37bfb!2RMy zqowWD+)ZA4(dq;Ft|=n%0JYTSm0UlynlMD zp1c6O4txUq2hjYWCr<$*rK&4jDX&C-;Qd$TagWkOoDRrQt~*QG-_A)K81dPkxkF6h zYvq2WcHJzN0e>)STsY$F8{8xm%eEUFP8>13lPf|nt2;UNaF85taVc(WmsR{Qyko>Q zYCdqXyjkzyX@zGiJE?8k`S)hB0oMIL?T+$xYtwQP#Vc@v>Aa%h126$8NW%|chiteL zFP{y4gLr2x8{3yp!I>dujpkQ@TpGj4Nk> z&j)sho5%A(JaodW+Tk)?T{~tNv%#!-V9^JtAUXo>fFCdnh!G=W_~~xS(5X;l0y#i| zSP{d|LBzUZ_-Pz<5y!>xp)AgE`~epBc>a?ZZSfj5m$D$~!g7A&z&SUH4dfJ%u);t# ztTd3@FBr(S7Y*dYe;Y{1O9pZQ7+Po`fkg(=0lW^|s^tdK4*Tdl19=SgbMg&j0PM3? z8OVwP1F2taAjz=pDwaN3!ymHKHg1&1d{xXh^8wUL6wQ1b4U;aId5wBR=>`LNe!YS8 znhhi#cmcQw_(7Kl)By(}SBZ2J|AhZjVCMnP0?#uwunl+{cvs5X#IMlMVNypG{}Odo ziw5%hD{ui!1FEGwk-tuKmB!Hu!kcK(vs9ASXf2hkW%l1Gx)b z2;?-##~@#Td>=L=Aq$Y-hkOY#4|y@+E;~ zFF#+JPVgxj?6lt*lnhEByBs3Xwx0yr7!r|lt|;6_`|HMy1rD(Yw=h70F`#a z64Qk_0*`bQR`D7Pt*iabh1I6<^Ge{K)@utYUw0L>TA4p3RNHQq*6=&wq%9aRIVeTyPCdP^&v zRMAvx^kL0aTB&BBN;_a&#Q-Cz1AYc(I~vJ*z+vDnFn%Bassly=K|l(SDgNTE@^pK~ z$w+*d31|ptcri0%|wNNY+C42IO8BBO&e>2mBXk`vCL| zuwPo^quOFmiReB|^^JDIOnD(e(yd{tIE^-27ORq^s8On1s%=ulN@-8H>hdtEl8Vz* z^>qBDp++)tn322$IENU?Ps5GmHgI$#)(~za-$MU0a1y8k{sJ6A#9zHtgWV!W83_-Y zJFs;J4GmWo6u)eOk>o(}OQeyUm}n#u#u&*4=t`lpKwdJ=NIWJP$r11lV~u1V=sDoc zWH`9O#rhc1jO1Cs0vrIo28O2_$scLboLMS=R^kPZt2VLBam-ZJ+2bT@n5UXU9kQ0P z7*rUS8pX()e4Myof$D;`R8cOKCN5M(QEj&@meoo5i&R|><4flm$?Ew=au684z(`gC z#lUC4{e_4;=m6k0+HU~f;D;$3F_QR2MzZP|BY85{NUnq5 z16?|33}o?HBY7P(9jJuObkIeBK^nbGbwbdPu;{0bu-?@=vba`+vUo5O&ub|zLm`5>ZBt#Nx7{Kulx=kW5Wv1+W;{0(gn% z?bHj#eGj$|@a0TI4;a-ZQVm)NoCBuu=n8~D|1)5RQHi)rs~#?P|4Fstt6Fu0_t!A+ zSHa*P&}mF$zI0Wq9>!_2oY;&jrb$i%)Gu*^%LbUp$3U}#i8wf#NCtp2@v4RMmLwhy_r2n#f6@8~hJmCbAdk_ZC>ptq!o^+wOf2{hN_T5-{HpSv=QR)-+j&V#X>x-2ZMyspw8=vGFqZT+* z-&hm554>)pbxEKs*%)xNL9skNeGoH}As zDD;zocY#jfvIgPVFy!tW&?uYo|?@-2{oxn$%xtw<=PO6gNe^ zg4(yrVp-F4@$gjj9DCIa*|u-GQocS2aW*uriwl@)I&5^ z6kb0=y+T|3s2rYb@#7ilYyQQU>TaMGI04)Q&I4^gfcWvF>J!vmEKX9FX%mv=e$k>+ zvU+N$A<0A-(ruUrx&T;iLo?{FNz$rh_1bhHn@c>rLtROyy8MD)vX|(H%cnY08Hs02 zEUx?QI1X)p-S~AU;-rye|C;zfMaWx!w=*UFgPwG0r~1k16Kj6Z5%*54_S6)Ty%28= z8=p8EZ~PmIKJ^I$>9+BeGx6($jn9^z?^O5a(_-=Yg&I$F{b4*%CG$effB{a4JB*~D zbPB28i5pqmxkTgZU%VSE&i z0aHjfsLMJNNd+AyOuX$g?ZdXYRUYlHZ;;t6bW_rO3-lf()j#uO+9oy02X+9bfnFf2QY}X?XhkCVCmw_~75aw|P3ts6 zxf}Un?mA5Xcd1BR4@x7%ed{!V^l9-7BY|QE2sf)zXFP=o@c~W zyv0b6=(-++ijnIz`1R^mBDr--yn$Z)8GD`huXP%Kx?kLkHZ_;7BO37_W1};4WP*5} zvHo*(WT0Xo_ft5nt`Am!rcy9U#uwgiQ<9%Zujz zoG3bMLcEXbV1R{jPS1;HH$ri?Qt`n5v_&s|!NT&{4Ta&NJH_?Pr2bdE64ZcON@rfJ zHYmgH5vNzmQ+y7Dw+uC~&Gc5=J%Vo(;=W3auifwn1JOko*sQ$m#^Kml6lqYr-HnkM zZ@XvX@TE1*CiutWt93l=S@dVt800nY5SMM%j0x;Up|igUP59?!{IQK;)Dft8+bD;` zx$~G}^bzRkV+Jt=13Q2Fv7)?m9ADCp8(6Y<*ctJ!;xiiLm3Z6DJYgVDo-nWwc-zs> z@B_nVHo^OhfrOs132#Dp?}6ZR)nqz|pL=@tRfL+^O qosh;YkoGrde$$2|t~TOV-Tx1ylV>$46sLtpljaM&YOgjSX#WTD%6+^5 delta 11729 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 diff --git a/BaseTools/Bin/Win32/LzmaCompress.exe b/BaseTools/Bin/Win32/LzmaCompress.exe index 2652a7b5bdc6bd747097292e233cbf9b14bb2a09..506ecb19afba5534c5894d4fb9ac1c5c2c9e3e91 100755 GIT binary patch delta 8758 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 F`af%LGyDJm delta 8831 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 XLu*BD_(zUOTOzql5_(&93-kP6Da%;| diff --git a/BaseTools/Bin/Win32/MigrationMsa2Inf.exe b/BaseTools/Bin/Win32/MigrationMsa2Inf.exe index 2c7b28d59c5c01d03fdcad22edc826f69a047ee2..65ecae11ebd5ae37fdc4e7e8ba294a250d7a7e3c 100755 GIT binary patch delta 1173 zcmZuxYfKzf6ux(sZkc^Q=CDXp=qCALdtN+0YG6Jr{i7+=w}{HPK2hl$l%H8Cxo*{B<%H~HqwJ?G3l z=YHqQWY6?{ccyRrFh4Au)tp@@{$Z%!_4!`&XLxZzvrSXeKA&D&&=86U8wgs$MrCcG zc=U=_%{_6|`0@wsjH$3Q#(eQuEIv}_52wO?2NTiS#KFko&qf^`v@b&8{4&zhO-MSF z%oAd(-af~I_j3777Odg&TP%1VmrvpMN5nl_g3VlBVzR>Ib4*@l@_8m-VDd#au#p8@ zICiDQtsCSI*?<8bON$L+Fu>(cSnu{vm3PykRcF#sk$}H5w7aX@>*-Q*FNv1~-k}^i zCRSH$zKeo=9&gCs>kIh<9eef#dP9`_SMJG0@e57SF@Z7sNfE1+*A;QQkiNVu5_AMT z!9Xw)Ov>eDbJOp6?v}2-u^;tW%MO)0r6Fs%{$g?YaKCHLU^ii<&swfIN`9BmdNY^z zUs~HXi_IEaRo)-c*uKgX?;7cM9muTKqIWf~~g8vivc^oh{J{dimi51+>`MQGq3 zqeTZz{CV7~gJ#}^&*-3$ui}ahd|G`%&*I7BW{_}`9?JNS=+r}i_u`X!XyMoJoVweM zcl6N4-^W%1c=-){$^h+r5?2i1<_B=yK&2i*kCB`~95+&p5xigox1fC+ZyTXa*i2uV zD0d1EspcVEF@aMMocODWIvK<|Gx+!~m^4Ex9edgg9$}|~H_g;R57t@84B?Ok>UkDl zvp}OzrNyfj*vZeM$x7!c%N61-EqIM^l+)f^)0U3 z=<*r#*vSmx({^w-S2?Y0Aeu^qlm99Ew_a}K7*k;=)TB2b-nPT0f_N$=DB%xdg9I*N zYaNbBP*G6OtQw5qk_3Jp!apP;@&()lL}V1lfTn&5PXoo~@D@P5u;U)ADFG+%#7GGd zxsI6;9g zd!Ogt=lwq4+>fdDbgF&$5Iw|Y_)OA#ba3nDwcCeVaU#jD;lFt!9-B?_3=<=Vk;}-_ zXOrf>X`c~0@pJR|NDCnb4nl}8+|v^dt!)iPg6)I7o$lVj-DmDd7WSdXceCY%A+f86 z(Qg-VC>#(rpe(fyLbfTRj+Iga7 ziFSc><&lm}RGT2UEhelqcZsBGD4ny=Zui$O>vG8OaU#{uj)b#htuZ;F(zdNhJ}&OFy<1&s!Lg0<=q95s9+q~-69m43(sS#{H0a(j{x1Cbpv5ak*%Qe$s42uLdy} z!@RPJH{Or(%Ga-(Up=sO^Rcgf*oD!AQpz8HD~@j`lv=J~UF=#y(XS;Ozkk0_K}E)U z1!soU)h0vTcXrA8tF-#w}6kk5yr-RSWmO~d_MST5vKB?iJrhYW2RuO2+i~; z?iJw?dI2*cw9p+mFM@}!E|+kqTw>cvP(f>Pp9C$!LpvqX8}9EOz;!aHc-jOeye>f@ z-H5j(@NhF9;Cd@GbGN2&uN6FW7p9F{3C>%gft#+!N*gP!4mBJ2=p>%B!NY97SsQq{ zKhI*B3{ANYOj$`Ng4HqYv;td%Zxw#ya?d)W)pwG_geHLUq z4YCv8w6l5(@v@!8{NzWfFlnl=Nr4qh9tbGl??_QVsVRw+1}t0MF1|y`6M*MtXz&{f0H3Xrr7;)P?H)&qj-N6Jqt*mznC`Ov6&6 zm4p~5OKI$>j8}*^8VNtz8S>+P73#QO+?Z6Mc;%wyF0&{D*Rni!Lc!sLQh+(Y4p)IS zz=VGqyMYN`gGpev>Bm`sRvN(yC)9Jlm0-{b4b+LRu_^rwuQ;Kx>GSO>iF6J`_V)#Q z?>(~NQNzz;Y-0oCSF$vYpx4D(zXK1tn8mvBq6@tIOXDhjF|IoQ@$i}gDB?q>RJ?df j1$?FeD)Nq8Qc1LL4+hKt_%2(g!+5Cx9?Wh3%h366ho^vP diff --git a/BaseTools/Bin/Win32/PatchPcdValue.exe b/BaseTools/Bin/Win32/PatchPcdValue.exe index 4500f21a84fb022d0f41f89714048795dac7babb..ed1a92e77464d8915e79b5b3785eebd89aee386a 100755 GIT binary patch delta 286 zcmeyoQR(wWr42t5I85?l?2~5R)tk(isLovCv}&?;qA`<&+2n-8sT^;zW9+YgcbA#` zH&KOI$8J@#O44?fBu2{`u#C{O{b|!v?=fnEq_$7I$M{x2{RU9STN`ghYjFk!5awZE zV2F>;P0Y-TkJl@xOy2y7mx}|adg*({LtKn{+cSPK-eY6DxZRzRNr;8<&-N%*rW{5_ z#`fcEOhC*G#4Ov7v$4uHfo!g*rLTu)zH?{aG)E mE!_3nwfi{27!gkH?B}rOfH`#gg?^3+tZ>t}XH4bjW(EL=&1pdZ delta 286 zcmeyoQR(wWr42t5I6AAn>?d4*96OmYQJs16yh)R_6OEb73@0ZfPUYyU^s;Z#Ipi?; zZ=wqGomrEbRg$)=Br#gnfMw>*4m>$M^&X=pNNW4UdyH=d)GL8HTq5_avKD7x0AU^m z28Q_f+{Dbh_;|g7%H++Tc)7L#RWE(dc!-Npe|yF+#(Qjxm$thzG6}IT{@otM%9O*% z$kcwE4TPD2m}UEMHdfgtu#H+<9M4UE)4{3?vawyLlNE^BfS7%|P$$P37Pw!gKkMbN lg}Z*cb{|I=Bf`m@{T%ijFo$lx(9bb}6>j?WjHw*m%mC-IZa)A3 diff --git a/BaseTools/Bin/Win32/Spd2Dec.exe b/BaseTools/Bin/Win32/Spd2Dec.exe index 5a5bb7b59c11148323ee58278d7882df8199fbbd..31b0aae270d192952915454bb8ea2040b218cc35 100755 GIT binary patch delta 8442 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 bO<*PEr17x3AQn?BeBNDhoG#EQ!`}Y|mFx;% delta 7999 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 MgsZ+W3si&u1@(Q9?f?J) diff --git a/BaseTools/Bin/Win32/Split.exe b/BaseTools/Bin/Win32/Split.exe index 250cedba6e5ebe0bada516f9061c846a8ca20e86..9ef3e122818d3717ab0d92350b4fb75f8f8dfc51 100755 GIT binary patch delta 1396 zcmYjRZ)h839DXlNvSY?1{gdQ!O=!EYc3lnoSKH1Ft+O|`NnCPxZk-HUCwNrHC^SPH zXNx!K&bJwZw+zJkP3CZ&I4mSWHV!O)v3}A|k`E%NZ`TSPs}iu|{JnRVCOHm%_j{k` z_dI#tmv?4HoS6}CY&6Xt`|94~(N>ae+ZDgwj*!0W)is{Whp73VWtBV#q17tEZC%q> zhrF=Le{4?0)Xuk#Bb*7~W|>~BwetZw36w+T>f#QB)IAI$1u&nZry3wZ2VwvObWrGe z!VBPj237*tlcmWT7-WX(GJet*=?OlFFo$i9trQuHq=dVJbz5p(^CtN$vNw37wE_PP z`8m=p3^w5B>$07sIU3~-lReSSV5y~nl_sx8yM?8Jy2?tO^*Nc3_HYU*M|*`=8X(oW z@qY3IAnRmzte5+poQ_5J{`jmrD<8uOuRr7rg@>ec(`!h9)yq#T%Z>IULSn<*IQb=( ziYL>|lUJ{LF27O8%;ns){Am&vqTKVON9g8?T4Ia1O2wYZv8B4JNvd! zYv<1tq=oE+-OqVtnhG$bfFW(^+7{AwO(1m)Xlhd!p$T~CK`6F2;malj+sy0KV@N!V z*2#w8Ke+=uI1betz=aXp?8hO-7Mv|qfxY@G90^_9M0qB4n@MpssUOG-agn=1&c!=8 zOg@OW_f7XXIhf%rZGFzJ4XLbaWt8twE4CIh2{sjC#^VEP?=lRpZo(3l%31o*Y2ZxR z$WUFYp!_>n*_3HZ!{A#aBqljZ(qg>tLw7*WC7IqoZYQC>$4p8zOBcxD_Ku^Ajl?b>s#ooQ0h7ls+PN5#scR<6 zcR}>mU~PhfgCJG1bdt=spBy=J(4Koux`U-^mYz6Zf5H{uS!>0aUwaC`3LCb<`1_{YwRI!}; zDX3SV=AnD7|$+yCOdOA6qPIB;i;BA7}TTCZ?#SwOc7XKRe?fxyi k|GaSO(u?1X+!|=^d1e%UQcN84uO~f21I3+V{(n3E2dpah5C8xG delta 1352 zcmY*ZZ)h837=JIlY)6evw)B$AC84QxYr75B*gq5Y!7{xJ!Q1W*1N)=+Z?IdPD6UZv zLL;Ya^_H>iEr=rfv=3V=+k}jU5lY0eDMtL}r!uB8d};?444UEU`Mh`Ol5xE7yuau7 z{GR9i-OF1j$c2J@cD3W;h4Wwkbui4|RAxE)LiZD~PveAGi@cQ=xLgn_|2j_DM+jMd zKu>n}nuVu%%nF}WC!=QS^$fAqfW66pW9x7(0B>Q*aCQ0GMncR1Mo|K`phKpO(&4b<&T(NA9z`?$-rfa&w}GjUtju5eqr zM1K;u?i}9L8giy3nplT(*`iw0S*ty~2BY-JNUE!}xlJaGG7)MF0D>jtokB+b9i2@hlml_mKj$H#(@?9&M=%yz$VITkCKx&g{3dg7pVCofXhAtIAI+ zf#rAC9H*)GA+@99+(BB4_HiOzjYeYs?O-GG7Wjt0*EQEUtBU50(H?0lca>(OzJXH@ z9LIc-we*ag8);2)fWh9dGxVG!adA2;rMPYM2dR(ipnpnocqPbMNS^m*2VR4pX(A>c zS#a^@KiQ4Ax#)`3bvW@hD-ouZhLvxST<-)izr)-FH-R(M4Y1lv36@%UAi1NqQrF=9 z?cRy1Aq^g*U&NA{x``ppMmO*x+G-vDT*ZLj-gNtzb=Fv^Xz;5C*lJ~31uMVAL|Mbm zHqi@oqnzAvC)6gYGEr=9t7RSDYl?=BFvrRU7aYXcD7`|^$cV1=5aPI)1RT~cn^1x>Twyb%5jX3(bMtgr}jVP5>F{}w$jjG zJne4rJie8%tuE@ph3uRG%dS(x$|aW+Z`G&`9RiQkWUEGSL7CIwdb6fxC=;}lGJkSly*&`q+*DSgl~Kw3;%5u6%D%VYy^JO@=sJBB?t` zLfn=OELdAuWYE+U8#LOI(h6;jfh8~IR`rqhB_;Rr|9f!@!^XyJ^X<)4Koewwa2JW7$n+HA7?Bf_tehfQP8Q?`_rNy<)t0nO+i Af&c&j delta 748 zcmY+BUr5tY6vyxV-TgV}3{8u&NMzEQe+sdbDbuABN+L8hXc6=0elmsJq!}@jpe$A| zkz0Dga@d24Vi*7g7tzgjIK&=bkbK#zQ?)RL}U0Bu*E^A-@ zZh;3k>#80ttzPj_QOA6KudhHX5lV}FE#d$?bk|kgDg0#e#l<|fJml@mYnAg_si8NS z@jq?&f^9*nPo(7jAdRK#+`Pi^%;mpaL`Xs!LWtGcDRwxl*5h4n+v{IxDe{olGrC3P z(Ji6nR!zbq5H?QqR}zv?Ca|=irjaX1q50vn> z0>&Nka`h@)q`SCB)}RWuAwp9cN=uu4;4v Zak{X6jkmsM6S8R;>NnxA%D4i&|G)Ud3}OHP diff --git a/BaseTools/Bin/Win32/TianoCompress.exe b/BaseTools/Bin/Win32/TianoCompress.exe index 7bf2896f70be72b8620536537d5f0b4b45bf1698..020ed1e50a3085b1d0f3a2eb4a1ffdd4fb9cf807 100755 GIT binary patch delta 73 zcmZoTAk}a{YQh8N4yRR(k6RxzwmxQReazhYm}To@){hM!;qBKOS~jG@ d|B3AzCtcR#$=kjqiEWN7lZDy#pa!;e@&GzyA~^s6 delta 73 zcmZoTAk}a{YQh8NCG#dVK5l)?*!q~M^)YknW0tLtSwA*_gtuRBWIg*pKz>Wq0wx;? dw+#Z#Dz+)MZriscvCWZXGBeyB)WEh*9sn1yAO!#b diff --git a/BaseTools/Bin/Win32/Trim.exe b/BaseTools/Bin/Win32/Trim.exe index a094bb11027dd00b035dc197ea85d9ea805b2945..8684aa46b80a68bb943e4f191b200bb45c98bb6d 100755 GIT binary patch delta 7227 zcmbtZd013Ow!d|If$qL6vI%Gq6(fr*1`u##$MJ!n7bhCTrJ);aY#Qu)C7?#*xZqP` zmNJ%mCX+l9mrP>XNL&(QOw=sy`{X4vFY}U_EQ2v|#xc=1ug59|No- z#_#rJ#6A|dRP_@ae!^lwh*)kAh=&No;V-EE!eUWyScE8tRah=|*KK|3QlEN2pL$@Q zdQhKwun?7f-vIskFog7}hw61&l$uRq=o6_A8D|VrX3}k`USgp^X-T1KAUCGMe@{V07I8Ba?y4hN?JIU67c zAeBaB4zp$OV!RRRg}#!^X@(Tw;(ikZx69*HoXvU<71)}ZogOTBopy(uK|jgPB%>(F z8E762LPpY|IVGfwHsr+FQaK?WB*}$zb51fT^PS9@N)jdkB?h3BgKCA6-K98-z1}8o zJXXy>tDr?=vSX$|5tNi4;}CD)fWsHrRl8ismd!GU(u$%Y8av%Y|1stq`8RrUY@)dW zI@HkHV>80Bn`R&oodC0ZdE+J%Gdg6fZ{zqQhPge?Q6Zuy}TgL?5S@??tqOh~vBG9uZ zXNYp6@A)D#c^E?gV?1tm&y#b34Z_9~R}ef+-o|FTI#+I^$BILVN-q~zl0uqaB%=$S zEIBq(Hw8K<&2E?KY*po_i#Ih_-brBBn0nm_{ij4s*%r56Bx3(!jg-wX0h5~rK?J7`Do{h<^IfCjbs z_D_uyZLb624S;>82d;qW-;6s2Gfa3sX=*T(K$w9hi&f}qweCW!FN`cE`_qNH0XqY{jTT)=3 z!!3EqKF)TQ^XU3llH%g5zJL;px z>-JuU#y@aSL3&e7gR@qZ4+0TK)9puvzJ`XspeGK{`nmgg3J!D~B;U|0t_*Iytznq? zdtmt+SFe&gVok%lwr_#(4L~QYoHvBrpe^%8h2#9a%Bk@pG@-UPvDYyg?rtI9(RJ=f z%|$=@cDpx_lWW5reoe%n6rAae7r)Jp|bgMnI2X!2IdAk3UR;P@xd&Y+V&N*=6N@WRS)l!5|oanwz!B)90N3ungkjDp)J%EqmX`&QB9lm2w;qWb6u zFv_@nX-YIL_6&Le3nm!fYZ|+SMbgPnOtD4waqp9*CTdtx5*!6q^}nyNlGx~LOY*cP z7*MxCrfC%>I&~@20&Ar=mxhOE-sB=w2$Q2lwqT4Jo>aR`0O`6P{b59n1!i=`GG8z# zhs$p~%nn&$gI@OQPZNH#s!2~}oXikH*$N;51ONmAK)~e?0E}M*l)(LHn&veeBpMoQ z00RJG00seIUc@o-BY~4lF)`7{m){7Eg(l1!O@G?5qMok|U#xhGl+q0=GqlAExxk0L zSz+)VQ!Dv&$Xhih9649=rd|t&HYHY4OZ!AKcv>!{)7!`PPHZdfY_AGNHS~!v9255z z-Me~Xy4DRw1cNkRBWDuOl6q)8k&+*R-X`GwmhM{;O5@s75_Boxkq1iQbRHg9>Ba+3 zC-;g10|_J^ch3if3(VDGh5^xBt~+{|@6s9yt*0 z1Ul@1+A1{7<#yECy$)@!h0~uJ!eREKcDKvX-B`w#DLI|Kus*fhm6z5hlCS8$*4L1g zzM7}Q#RL>P3S>XRp)2=5+p$0!0}u>V&DGhyThG2pQtt1B>Gps1%<;u&-QP(|ufd^y^J0vvIdU#UR=7dNRSOmhyE=J8gn~c(UN6 zi5`cuRhxa0Lh%kVNiLC_nzBQOkTIckiv9Wy5z)Xo9G$)5|QJb-*XhelA-)&qgi zN1s>h?kEyT?>UOiKwn~H=Z9Mc&VtWC9XiUs8BU z#xuiXzRnlkB6w)SWYMlb3u@$4-+>puCaIIb6;l9Y05l7esuHSbDxPqs@+#l_=((2$ zh;kL!;2ZsN!vCi~9sRQ83)pECNh%F_HHBpO@?Q-gWDc#^6_H*8qt^mB0Gu4~z*}N> zD^4ucK}oKM*0}&Kx@p(2Fw`GX1GhwXlc$~=dVbdlBF*AVD*uGx@=p5Fo?*d2kefJY zG2iLCw&xzP>0WN7e|l{oX`}aEdxxx}hkrkd-N+Lyd;q5v-W^tmLX}N$N`lj0SWbkh z04!Uu94N?@+T8+g$jQF^*Pj(j8Xzcz06l|fo2_E6QDhaA2G8faRi{^OYEpaM%@#qg z#h`F2jeK*+a0<+DFD&5KnR2+!YygfG0FA&l6iVl){mqJWob@;?3?VOrX5={s)um8f z4X_em6+pYTg3>JC0vn7B3wzhHZ9dM6^(NNulwkl(+CMcMry;5b=5X*=aQK z)H3q?^1Y|p_nspB6Fc^vGPD&G!Ncl+Rjqs8HV6WI;e6n(ht&!0rW(5&p4)moua?(x z2K>R?%;TT(HgnmGxl8#};)~l{L8y`t0}uldgAjuShf%2NhZrI_`5X)t940J;!Fy~~ zcsJ3EOJYQK)eo!vyQ|vb87Vj|LRAz@;Yxm1VVySPh}p33RL51v$Ir-5u9`VxHpjH& zoSBIU)d@-zZ<`fgR9rH#ym)bOQR(anWfcYaWeGE4Ei;ppe$cA*(mKtanHZE) zZEH~}`{S!G+63rs3PB2GF1~V}m!uf;_5`)@<0*xI(fu??c41nR237)1s=YO z9j$jv{j7m7x%J3&tTve65lKl$iP=1S5Q$>ThMGeyyj=@ihkKa$iov*nUk2Eer~C&o zo7F$CLrE|X5!r$xQV6R}GDo)`O)_^JP4Wx=oj=%m_4b5;?CNR1I0HAc<9|;3?MXs< z$i|~}Y~LNf1f+j{$IpEm={KG>2C^wP{Wbp9oBrRQ_J7D-o%{3i!76hfwG1?@<#N^@ zwcJee&+t^|)@=Sfg{}C(GTfjR>}J3J!IEys9#zhkzHf=_xch^pW(!KS?G4$?>egC^ z!f5U5)>`>z>sYr|dO0uf{{M8a@t;bQ#8*CIPkkzl5}$dPeF%U3GTFUPrED>*oMoNn ze{e|Fjgw?wyvR#TCD1QD>waQ8~n> zo{=)ewvX7_GhC=)0Xu$1$`T{Cvb#`^d7ovR<$pJP%-mt#&Pn;=y&&c}Cp}`#D=-QkwVA(PYpT3^PKx$Ro^Ry;R#4fU8UA*TR_R}TqJl|$E>M~a}`Xp<o>sj3u-nHK%_S-Ac81bi9*ymTcz8@ZBgRV-0W4n{M zGmT%V`3G+<`fu?uHs`7oJ-9oiPx2=CV0qPl8-BE~r+=_SGT&7`@-siNKVIeeb2N=b zUXwD!+|jK38rR_LV{G*`DR*2)ja7huM?CJeH$NzjFezZ8gzx@1wmfBJ^VeF#Smbp+ nPQiLsbe-qzcbnLv>)c77ZDsFX=N7;ID!X%CiZPd*0bBkTU0;@X delta 6976 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 Z_x|uEcKsUne%%f>;43Lq8~G>j;@?v!ZW#ao diff --git a/BaseTools/Bin/Win32/UPT.exe b/BaseTools/Bin/Win32/UPT.exe index a1cf4d889f1122931ad60dac7e51c745dd132821..ad67a6a8ccd7e77772b7cff1caa3bfa741a69ed8 100644 GIT binary patch delta 5730 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 Nr;EBNrF6=u{XY?n4nY6_ delta 5552 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 diff --git a/BaseTools/Bin/Win32/VfrCompile.exe b/BaseTools/Bin/Win32/VfrCompile.exe index 03d35d7b2dc6e176ad1ae090e51b2ec55df7ba5d..5647e50a4d348dd8e95db6e8333be088cf9b1a96 100755 GIT binary patch delta 244595 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

gaUy zIf}mpV_UL$Tl#2qmpCFy#v-|>p_2U3K+T%mv7`2_Sk#NQ^i(8UfUJ+RG^ZsS@v@Q4Mr-3H(phtx9hNP zuiDVFby(zU&w2$B3hPBrj(-@}WN!F1>ZSVG%m_XX zqK;N{iIKtN)5EbLIAyGDw)>zoo6>fhSyb+OS|yx?=DAfi4ljve7B)twSaS3z4j=Kj z?c6OkI*+@-6?qAh?pObp8@zx7)RCVs$aZ!>CX~9t^)jK<4K9!grEV}?CWr-8Ywj0^ z%LK82;>IuiE)$F=@oIuNC0?eOaDpEvG?57vIKiD00%d|JCs=cWMkbhXf|?U7Wr8^; z@PR7*swNs^!3lYskS7x?If1V(CP@!uiWR2_7x9-&u;zsGyv#wFV8aPVIAMcK5Iw(x z6F?@|agH^dFij@dbHYMS7$FlJ&ZUpWBtNM-mp&Yy*r4}AX>L{a;(a8o)extPVEQer z)X7f%prJ>?*y<0%Xv;9>lpjjX%H$5r$1&T0&CZXapZ(Z_{7Ccq4di}N>Lka>9`(bx<@YKG9BlkJdv9m%vweOB>vqAJNp4bSHC)#T?Ox-5j9 z_#8#z*x--u%&$O0)4f@%f@to2xDMM2>}ixYJ6+&uHab|*;DedaAR(BU{S#xWMskjA zMbtocMr*3Dlz%+!ZqzGLL8cF>!j}ExNmtZk$Nx!G9jL5^rCo?83;t5o{AXP~CZvIk z$*eCLy1g!9;>P~M#}}1Y?w4rlQ&;E|`_-OqsKokw^)$O3r05h=LFlwIh;98EWBVJD za|XL|oy54ub(HxxPrE=QE3nA)t6r?}H&6Pj4(s_Xkve*@1K*;}JJr!^(>+AiCh)t4 zTGU~2-|>jRlj*)k)2X$ECZE3BQzK7i^25_KsJ5cXW;W-m8?~y<+Wv^OJz5JDx#+|d z5re9$hVA^}X{SZ9UJ*gBs$nmGc+!rwn9du@{TWU71hP#(G13w!aIh)FNJ~Xl zyD*wQsfo2$r#&mOt%aUuvui3f8>s~bDK%L^VN8S@l5_kWc-3OC9(L!GQFT5UWr@FH zfh?Ys1#(V}QmsUh8SZS_FHgF!2HWr}iT>rr)J4(Mq6UjAilQe1gjNTNH1r==cCRR! zgs_Q)F04_pJw4>g+7)}6N!1m_x)Y(;sp@P=ag6P7Btp!l*HIx#`_6553INn!VL{@f>o4w+ATr4UJH>C>I642 zgC_gK7fO245suJFg|!{Pwh)TFlqY*eEr%vaIG zv{2S$pfBXBQ4h*r zRC&KGbTCGhUsX|5?($t$IlBrhH%66*U`Ea)Q?9abzc#k;3k%paM!Ft6k@46D0!inOy5yt5!a)ZY#qEJ;Ip$PC(95>HPF@9p3!lTR#Co*7@Cr1E+cN|GJSM=m1Bz_cw**6F48&nVvGCCiTKiX_F(Fa>Y4}| zzsvwboQXyiM%2KZNlQA#jz`L%z!^KDsU5hxkQn;e7W%nh+r}HH;lXp_Vk1W^HrWb8 z%9rN8grhDbjaJWvrmolp7j3XYH`wNi2ox8=Riv4=d8@)%HdA_Cv|t$;mA#FCI2l(p zar_9@{;f(J$-lRT!EUJEYHO~u(C>~Lin;v@zPTaX?$$!RBzNLtnkR9QsnXP6Fw>oQ z`s}hQFLM{>C+}$*gL@cW4_+HF1$8Tu=JbVSNqq|{Vtr19 zu)iW{Yrn29-?o_G2~SVu3QECGaP`3PUCB~u{k<0u;X%Br-tH}SI5|~u@v4onj!VwQ zs-?gZ0i6{A6Mw=SE?|p=BB1hfIP5{(s`gO?9KwK!Ho`hK`8*epovhcOiz2}C=K>9u z57U?b{V7z_5cjJ8^pX{5#mjRAuJQ71OUmmNSoQ;kZ~+(16$N%ZhNT)*AYBn~50`I3 zfxBG5lRxwdbW{`w_yNzjfX;dWO&^1~Cvo$2kOk!S7u7%IrH7W3?x2*;{tj(CvGjX0 zrTX44VT>nnr|W+Q@Fc$S&6rj`aK@7aQm60mm2*evxvM{dN?yd<;UA2b;f6BjJGNGl zyz3iu@j~9Grix_a$1vTC_=L|^cv&fL>u)ObYTS`%g*y=!UgRfbcR5xs<>O;`$7`&r zNU2dO<;_>{t%Nl?=y@+af%rjqxTVRKz&IlwfO``dAfsIcqSgggGzol?A+AQ z%#Q@q=PHpA=z|%+GuEjvXlDo4zG4giMuI9uWduc2)lOjUkJ+_&wi`t9=id3y*PleH zHd7<8iAIi#NL3BR)H{FDM&*SMjjED*R3buT>QSs?ZdEL}g_QV!%RK$`J-n|)VT?rs}VQVYXc(~Q;oEYS!#f@*diSF7%t!ucJ9)YYnmj?(7D`6h@Z$r?3~d2DHwKndC9C(`E=-Wj{Udn~7S)NLnJ8d*D3y{l$2R6{;P#KQj^}X=3Qz;y z$enr66<4RRPl^=D?YU%JkfrBy9j&!G@v9H>a4vmarO4XqTixlh-0CKIaG9@p2NglB zxx@|vpJ30L)NhOMC{;(Oeu{WoRA5nv4b5lp)_`|LMD{P4ra*&JTu5fjHQ~Np=~W3n)M~fs)a+c zp#;}!5l^drKZGF&oL?IVn-hk9X&%bcmtMouuE!uhwBXxXxs15x(-UJ^%|Dd!S(6zZ?YuAAe@sw zzXG=)TpM_OD-j__XtG~H8_b~Zzsgc>e1*&)l=ATugW}l|xWK z(lZzyf&!L(h7%zu!2KBnw?P3>pGyUZz*5drNWl#1^jQ}0^Ar4DpR}V6PvKyF5=}Zn zYB26byh2gCJ5OM8TjJ^>cZA`mQc+@;yygj{grcY$A7xSdKEj4j6m{(}6osNLb|2;T z_i2E#<~@e-4N#%%{8A~x6uUo$?U+Gz`LdKD`S7j*O3^-oW??Ah$_H7><}j2J^9W9a z5l{PZA4;W&y|L>f6}$9QLnA-PQmTId%l2qdF%8j3{&^358zM++-h)?H9LM}n0d6%! zkDUA-b}mCUn?{&e`T%M-!Wy5vlWSbu2q(bU2XL$r@wA!vPIwlKA!ehW%1GY;b3<_k z?D!6h8soCB!aGQ8j8z=S<7MsOLsP8cL}QdXK2KE2JPSi?xk! zLaNXsZ_8ADv0z>jSH=u{%Sz{Ekw<*CRe~}^d z_oXdzz_}R-qS?2hO*8DG_Yw?lM!eeaJFjwhFixAb2S+BZg!7a)Ahz2p4OnmhooG6b zA)<#Dqkrl%m4Udb+Jz71EFOT2m)hQjC(TG;rC*L%4!xEI-_*tK=W{{&hBAe_K7(4# ziE|Bc-?j!-D)~n+>XsrSM$|&OJ-9wm;yl1wRe{5CS7)bSh0gi^=<;i^!z)bT%-38g{f%U6L!p%KF)aEij0 zvb$b|AyGI5^t=jNqi_nC{Y>C5_WJCqJOvDR1|Oqvz+_&5rqMVB+;}Qmfn0I-2T&Y~QYM~<*f^AO;=U~9 zKpaX5KMz;pP|CpjrBcK!U~wKuJW6SBUzVb|4~^r|>DE67S@9@k{5@I9uXti#@8?;* z)DkCVS>mq0*bdcvd8bs2m>bg0fEF|8&O5S{tUGX_9ZK1L8Z?PGS$%?M@i}-!-GV_)^E4;&mD*L2L zAD%abnjJ`0s=6iXKC%N=JLM!~c0k9y7^dV69IZIUn~)8RObNa8-YB1AljDZ4J2z_$uJh@#r87Ml@8sezn8!q8sscZpTZd z81eZeV;P?lz9F0R{t$R}$NqBH%Vet{x;q(b`^O<}wsUIe0#Po+)0mc=%I=Ere&xqZ>^3!P4qQw$r{tH0{T^5h3 z$4fQ`p<+)GXm$KMa^Z|%$vJHoLzkY!xuTftRIilse=WxSPXOQZp);It0Os~2UZe}` z?nx>&oc@;#kunR9{-TuWj%7Hz6VApN>572o&2J&&cT>o#KY#yxpLX<&%lOWC^ILzU%D%ExpNGLU-OP z^L`sV{{zR^shwb!Od6@ucB;f1Ztz<&v9GdVCt?#ZUyJ{9RAT1qUx>PVN_0=Y)O;Z< zPR1!=%_%sPOhOwbV+P*%B*_bF|M#7@Xv{2mn{R{k5baBTpQ&BnCI(X1Q&6ifaiaF8 zAgV9Pq+$1!TYklTNkZV*?d4V+3#GnDP*xncVeTxas7@Ej!v|ZA!;}=#fLd*b<0&|5 z?Y6_u6r8!6oDf|pcp|pTGq>ghH13By3ERL%B2F-`AE`wbWy6_%q`I5iHf|jTC{x%O zcfh(tywO;Bn+h&3Q#nJG{=`Y+m0iwSsU({kz9gF`In0);`EVRxU?5E>s^&EaJJB6>^w?&I z9Y`GM+0BqVkOcaj=5Jl``Wh?{p%49NefYYJF55F@T{4cst$`RsZg`YSM5lHXx(>n` zcWi=*gNVQXt+Is|hdXa|>VR!k*Ok-IqhKa4?CdLk~mVU|g^!md_q}2%LwIAXWHb z#l~A=l)dB<-P=R^hYul{gmyUybQq~my$(XdVZ=?NK4_@CJeN8Qjm;aA9mRW}&2gFg z<^YTuMh4O0_dyy)ly?TJLY?6lIUKeYIu9q^=%4%H@Nm+dHr)^IBk=dxKA6CNQ}@AR z{;SysjYs0|vAwX8|90IAWE6>0ja{vR?fEK4=r;;yJl$%TJc>A(o!%p$%9nDdgES5| zD)aY%)p+drSEFzx*mVz((de5sd!X@X49Czt&}B4+Y3%p#A!27V9(BIB8`x;Fo31FY zGaG|C+pUDdV@My`U>8&#i@Mz32~+v+n4R#7|2pr47UNL2y2};ac8o*aBA3g$P1>R8 zwk}Q9t?dr3TV3kB16qtHVVe8f#UQtq2l>C=#yq+mR*gqpuWm2Zb=r2gJDzN#U+$N_ z-|7!{ClKFCmvIs)^QO~M=?D_|xK_^lmu&^Fi6nydSpvxuNvJAii3(iat2I^&x1yE` z)6yjv-b}Nz8i_P~1Ji)V;ttKE@XL(4g4HDAPpfQ&&`G4RDq*ooyp#&_CJ~>CK{$_M zU3|xZ7g&u}srX@6J^mbud{(v9nu^I=L^UF+*dHe!*-%At>oTxO#ons51&VH9*F~lh zcbjjUg)!^Z_um2|Qb`NCYBL;7MPr^?K6~$G$VnxBs&ShQ<#$(WZibqZ$$q{~mnN46 zm+MaVd;birEB{r=Zib1~@i_#JjpT>=D7?_5hVa)~}B6NdWY3LS`H^7%Pl0fY?K=f1$iCta~ zbElFRyNT;@>Gvm2;CjrDPKA$C(Vx^>4*}`8#^^C02BxD2Tel8+&cl0E_--QnolflC z4Q0&*@R`yb#8n19Q!<+m*LM-u%JQ|(`s;*>V)5K?z8-y%oCpv;jkwxSWGMqeo%PUf z8fj5$^IC4B$*CA#{hxD@7W2y#JF*U*Pa}SG%33g=&i7(#!EZWwOlLg+lNqG4@-8?e z&LF;av2)Ay!&0g7T$nurfuHv$>@cBj@MZ?Cv)lh^2t|8Tu24AxA$0u{K4zfrwn|kS zLKmc{o~<@y+t0ef!VDZN&U0X2270Rjt2tY+ItbtMf>jUHE)X#j_mBH#i;?N@ZWY48 zyRz3<;p9!E=s)FtJF`lbzhx#az%y6Dtn1i$?`C4nv8%vRi+y6h3Zk?)i#%8fnroQ3 zT#NPE&VnOa?5LhAd2wg!4%(t(Jj$cFgZLoG(Sdg+MyH%sD%H+H3&Q$Mq^wo)DdC3| zFesC>(5zpfO#7pQ{yXi@Tmd&T5!*Q{pePfuZN36rbz~|1`2Y^+N^QKtEaDTm45x`Q z?jTdjL;~+8K15TciE;|33VwVQPU%9nT zOQGc)433>&0t@EgPV3DKcryou2Q1+=hSHCVVZdCRxt1-46LXQT&0?^ghkU;l@yhY7 zxka*OJLaKg|4idc6DP=@hs%uyfmdWDSQc1pMYo3tDX<)R|9O(H&1<;(X#`C9`ziaV4i7;kn_E_SfX;5fH5!=DQBU|Anj-@CJlyL>C!pqqW{Svh{+<= z>|I4$xCitpJZ^JICu{(2USUWUVe>ny%Y4W-YPU+>?b!k@TQJUtRp{v;KvzUqMe_>K2t zscl{FiL^q|w{d7e|0<4Ptj;1XTYU&o;kKFK;Pdd!QxB zmpL;>a433kD6+&~VTa;LvBN{6a5}G6boZei^3G=dbogrxdWgvBBB~)yDQd07+Q$!v z__Y|2IX(?mtVQqFWH?-2i~e;Ge?5;k_;nI|TT2>Q)a%aG=!Jr%i^Cx7HgRn&e+1-v zdU<`ncf;1Jo0qffSDa?TX{D-NN17tA&oC8C@TV@-Wr_1;iM$bFtj_19&4t7gJX5>L zcqXNTdOgl5X6cZy9#LF06tdP6A5G7)UAZO!BP#LeRF#|CK||sGdg9x#^HkADle7~i z_~9^AK7C1^Ee=oK|K}!>Kxo7x__n!p{m^O) z@oCm|KslG4DYZsI>H49OoGQJ55g-$UzfR`ubsqq`wxBMn`$P4u=qK0phvcoq)9L0! z4k2DT;*;DR91MH|Jg7gcz)ZSqBAnPtTvSsg8iI#2PU;0)(d1f9lvlm{4q4zfBuwZB zaof=6o|=H)C0XbMySEWn(-rNxtV}7mAKcl7m-%{65PfBhsOC$_n3-&k79oH6Ghgb^ z9-Oul53lJD_!|rPR{Q2|#1(G(jp5e(GoL1LDfn@?eCc~@`LfvO@z8HO8Aw0(g$LVl z^Ypc^3Xa!OyHu3z&wG5Cs{9hU9;s4xUud%f_rUKVdniijpXnK}G^KG20_UX~EcsCBN5u+hzH}Nytd>fZUVdDE5 zP-71&V>KGu?ja*I3rC41hC11~9AFl1#>*#HDO)CpBQ-v* zrR_379H~|3gyk|p9I5fSQqpn4q=-Ueex%0N8`5~0MI5Q|HHy?vCWs@oLiEW}l1vas zYJ7T?TFC@)r1p{%LS%wCQoG9uzA{0)hjED$9A$!d4g`Ww#mcw78RBn>__JlXcqe;~B zjBkPK+6-j+h~1ztNj<>lAPRESGwE95tb;teOL;c+fL_R>xjR&;Y<8sJ$w<7JJ3^7u zzlRC}#;RSsQ%BH-t9FH#oV(*7h1)6utd8OkuQLd$9YyY#E-?8h2@iO2qc3d+BVhR6HCifrO$yP7lUbQ93P#56Uu8C=T7`+tM_!G~;Acz8!h zI)OUvPl5g?QKyq9P^WPzverdBvAqLmP9n#rzMLbJ?1SUS@r>@&Nz8lOo?m@%f}bae ze-#ORH7=foqGFib5rhqbAO_Oe_7Hgrr;CDQNI6B^qV6OsEm)(pK>R8#IK(q?W2M*p zM`Lur))|S{aD^;K|J}~19?i00r;O{fo3vK(r^|KhJsB{*?2#$T^lE0tDl2HjT^(>au_2wMa zt61TDpOHR8G)|20B6PmEd=&)Y1K!1h*EwvhTW@G~j#R4owU^S`RHe1zS845io~hGC z>0A3(Bba{<10u6~!PRqUoArBv_j%mD81#Z}=TXt1I9Plh)fx3WSH~HO&*LEa9t#c^ z(87Ix=QZ(7Km!QBK%A-icSyQ`rOyAhf58P3N9c&2kn`8q0aEr}}- zO6Mo>2or{`ucIOzlfdW(c9bRw8sEUogqASw2F6GhbrKOKcyt4qdUWCu)9Unj3$Yb& zw(g`TFuhi(0&ZR9I$w2!F@NJl=g%i$^WW&M_Md@sf0JWwqbg8?+#&o0lzizym!jgd zZ@ovD^296)Sb3AQGjl#g4036%Vb0hhX!1~P2e!9R>jljr?rZ^ficY? z>lVHgv%bB+T)3Id=)Q3&!KVw6Hbbwd(;4uN3zv(U@jk869NuEl+VOHxk>4JR^66A0 z4kEMiV&VHFQ6;|PJ5{>TjPETxdl|^(ZepKE>e4Djx|hBl`Mtz5dW~hl`{X1BUxa?^ zF?sOr6kL`M@D)q#^b5l~@S55*gKVrRaeN{NIU--#Uh@mM{EM!*A;_P6atF?N@yUF< zD$BTvGITnAVM)4)(-Z>5r*4$C4sA(})lQY}H^m_NC6%V42^X!fn>Q2esFo-l(?SlC zUvDP|$v51=Ao;>}BKWEw2rixA)*aHbh7Xc4fJ2i*g8v&utWdtp%#P6OE(upj35M|G z6TWY@l!Z|PYlx!_ees`ndmpmL=+cFW00U9p_x)YIVDDDs?@bH47rap zt$AZOc^}=+szms8pBrok@OXeX#||}ub`S6dmW1Cn#l6#LZVh>j}CSXlS~EngQ4 z*B_we$HmHLd43Nu+MC``1x3$Qo{;ho$NI&#z#gLg$25c!5Agsku_4@hhyyX9EfxVB7w94`=aT?(RQJf|=@sRhqZf&92BV0CLZ6lv1ZhC}TvNrrQ(G6bnM29wD{20~o zXv5VArST15{9_!53uE9cr+1H$PZMpQphA^npurO)zHKdwoBaeOY-mx z+@KgV(pzAv6ch~ipW_Kyu;51H66XZ#Lsii8Dt-f^S}UmY0^9g068gWu z;NrYUxbyMPPfb+V2UXs-O4R92nEROf*zja5N}Xo6trk1!*U-3pW(Fn2kxQ)J?o2^cS7$m2e&)v|BV> z%OxFEYXVeI(+xL7P4du!HehPG8=i>XZd?lf{Q%id>}d>}@cBZQvVXvX{ zs%j3W-;p7879s)$R#PwG)S|WE3F!>(o-kmPe!*($K2AmEd1l;~$l2{%Lh^eOXxXj| z?LbRdhcsHR8r*$PyuG?N#74?~WxfTjh*88tQxu_CS&vrW@qt9B>bH{H{~}DjH@)Bk zI-D(GuPiFK!Nyz;#_>u5;$|2N{Hxlu>2&5m!V&1Xz@6!%ZKHhb&9#&38>dv6a|^qsU;pX;TU zMSq~I@Y>+<17%s&hPFSjWuI#4WzG44vg~S?m36BYWc(oSgKyzK5|lF)`&HKUbzRm-ca3LyC z2a~0Z`KRXozJ>S(FI`asj{hQFrsMHyBZuzh1bF)kJ3Dg-)Goq9=iC4oRzzxs9SRW3 zzVPIbP##p{{{l|wx!p3%l+W#67GYJ#Fj-nvYQX--MSMROP(7;_{?jz3)#aLgo08Rq zwxF&fvewYXbWF9ZSF~nWWHnKZN%GwW|E;DPX3EucBu(+(gzo9{{Wv;ng zpye0XPieKVu}H<$ucxdZ{#z5)Wnk!vnX-OWRH)xXOqS{w?!VtdMXM0%>Ico$G?t$C zg$4X~q%TPPw+cE0L;Str1DX6c)dwCM(kL3_167S^UHZ!#dKw`_m%Npp5D@)Kh3%Lr zt8mi@Rk(&pSp|NAI?o#}8PUZw=ous%Q{}a6e>h-FeeK`bl+3Zp3Bi(D{KAA2n3~Wk zbUA;EpN7)aHqhUMdRkqp%pIP5`f$@mUI=Zg%x_kNdJn}s{pw_&0X5L+L?ATRPFZT; zN8F38!KwoFtR5hX5&5-H1KI0{7~;y)aOy zj}8qFS~p1kVftH(CZ-6(rb>n|@dSQ#zFVaQrgR-0{0ugjmICn26am<3`ELL^*OUQ> zGD85mS;Am58mjuu5?89taU!4NS&G1XOL<*35NZ0B@A?IWW;EEwA8FVuy`ru)p}9G> zN0E7W+j240)fIdn^TmCswC%8zggR(4GaO4 z#>#leqW?$AZGJG?m=ue(@Hg=Pa)$YKw5@84vmwkGN1fo89SRJ0<~6uMeS1u(ogvAd zcA@K>;D9~#QrV>vnEV3o9DU)rEuFy0fkx6_j?mMAHda+vD|^sW4%EG(1+F8oC&Xet zReFL;2YFkcD%m05_7^G_yo1I6;l3u00+A|Qw+OW;gll?{oMtT6^fso*g0l43cJ_te z9cg@x^$x0Y@l=O;EFSK zHZ$_(s}G!70-nQ1XIhPh+kuA*b< z<%xfc_9ue)sSTxWsgUQQ^Sp}iTy!2*5qwv~*GoH|$l$V~yBPXJjx38I`+2cK^2_@e z**})WV46^j$G$8AVOhLbj0S(0Y=MCF*iX-Z8I-igPu&1+j1;hOdL-dlu&vb)S@@-S zLl?3LKV=5>rVCm2`_kMBl^ZD~#aAA6VKR30Rro7M0e^_E#y=P#an8px!7y%hl|xd5k8D;>Ocra3sydEQ8? z*Hu^h1@>mHX5lfpy$WQL#<}uN6%kxx?eDbRU&7JEKK~~Vb-qmGp}YQpaA5U<<2??Z zzb)%j6|T;{gkF~k$mKG470D>N+!fjxBjya;@i7;2O2K^M8XbkyYl|mJPVnce{@d~+ z;4Hb^$vEkVY_GbFCV~3;x8(_>xrS33vFO5SW>FSpx*`-GAKw!4%uiNi{mLfSNBMHa zBbUcKp0Qt2wWDzyY!)KNR1+P1);O@XppNPz<#*LY+rr%t&R$@?#vrR#$9`GDQAl>E zE@p{&&*V?lMVOfQOyI_yyV<-#~2=Gs*c3wC5vAx}1_E&7N=T(= zTZD_aC)EBjqVAJzRqJ5?_i9w#!Kbb=a_nox=w7Z}8S=B{u zcwUqex1Y*`&x>ZUd#@E(ffMb`h|nvr5-eA#2wsGFYoDhgJl27+D#G&ycC3okWJHrKhws(IuAM7>z|^o|4vzev{I!;uowhmYhIP z7gA+R3H+O)FyXmO{XiLnx0$~2cu7X*E883)(zQasiCCbV>{*b#~dLWyv5MjPm zO~R=N8TBF-`zQBhRC6r<^m@?u7TUv2To$2*6kkC?$gR7+?B2uMM!YT zd$fPhP~dWH(*AxX<3@_ozK<{Hir0pvI&({iAMYykB?$Z_gg?^LRUIFb6Oim*UhHhH? zPxLkI=3?!9|4yBCFIc4BAr^)8eh;kRp00~p)NF+&H_`TI^alxj8vn8;mmzI3+31ee z!F_dzWfYp=`fPXff`GS)(yyxB`&q8e_&;RapKu#EosenHaeiLMQZ5iJyQ#7i{$&dh zhV*^@4ufNXs_Zzsmk3NlbasG`;m;!Zc|%OWiC`1c6cwsi+A>#7!Iw!QLpJ zZyeU2Z^q$`GaAK`QalbbZ|56_Uzx39APD*B=D^F$iI zSnZ}BGRMCE_mJUAzCqTx-T4E6bg2B}hA!|e3Se-l@lj?EqO;+`R?qwI?mUH(tz%2^c)B!*=_BKW6YY51mt)Z{e!O-fscUku+8$q57@ zUkovzu$N%~7dv1n1_Z$u3r0t*m#JlQ5XsG4WFDiQ2P6)bh{H*G54u2>hLATy^|s2e7JoH z?FB^HuRvj-NbY?L%vlWP$V)FcOUl3)QM7k$uz`7bA<$$ya*R3Coj5c8BylE@8kt7F zNoi!&1kQvcvwagd!#B(8gy9Sq8zmHHw%E*>QlI{!Yw3Ynbdl#ziqtpmM;0GUFNCSt z_4cUYuUr>c4Q($O(9>B)roq*}%L}=(_Xju}*;C#0IBsfs0uqX=&gQl16xz=uy@%|I z^0$sMNnMDf(kF?DT=4jDAxj>@V8_{1QMPW^e++hidReTlPj1+!bL5SdqS>(b5SQH+C;}Gf4rN6!Z#sKNzb+atZ~WRY-C4YVH_S-JXrPfM-Z>2!P_~s8aEn1UV)J zC#Mi#@3r75;$;yWo18WpC6m%Rs*HZg2?W9Y5q{${>DMs{Ba?%BTuCV-kUPicKmz?G zsWmx`prkaCc0Ku3@!jD`2}5*#`pfxK2ufnN;gCvW?Z&@QPYgmNo;J|0dfGsczHxnn z{Ua#rnKzL;8yYbpG8F@xiHt$rATl&QlOQIN0DFRiF7NsQ6}6cDatjzrN@z)?VCd_Y zoI+qy%6k09XVNc`%#a$4WoDj=@_)?J}eW^GN&(mP;LT#~UB0EmPB%O5CQLj4jwB<%%@^Ogwh)xp8 ze3PBj-YZ!hMw)vohj>ZtK^70_TiG zPN+VPBg!-CTUTrVA;Nf2|L0Q({oaY+dsQ4?{U{;GZ_D2d(t zqm*BAS|emmisf7O_{@!r0)heo@w;8hl?5Sa>qbCO68nJiQre@Vf9A3rHFOO@6G>1RE%;TC++n*zMTx`K1 z846>Y0{r5f-+^4sFR+WFE+Q&Bgf;=J16UuJU6p|r>(kkDAdU0As9vmf;4`9%>WX=hzzk!(OTq1$g# zC&7ic!u$Fm-dZbAJBu74Zif>+Y4n?v7K&f=OL%euLD*WuX=`oz=qbfQAHl^OkDki; z7Cw5~{-T!ZO*J|2dksBAtUuo6>at%QraDSc9qN}k$6?L6%NLk)v_|s@eST5cFN{&G zJ@MO9+(^%>*9?)9G?u6Fie$7I?uE-(p`$ z>2Z~ZaZ0CC7}6`djiAgl?yrMK%(isoGV5L!9NAGZh7Eo(YzR&%fnQii;ny*#B2?4P zSuN!V5Suu{)?$-3jJb0;x|5%e%+WUK$!Wj z!d!S)X zdI@koQja32u46{@fJEL6^c1}7Uo=h>iR}Y>v03{RYxq3i-5UM{@D>dp2E0|?Tu>#=PfLp!%+9*f!k&`+Np7@5NYr7$i*012F zm7_yvM{7sxx{j`$Wt;AzcZuX@g*!BNoNm|LF|}=TN8vWj9k9UM++9quuAF`y2QlYo|`%Bi@CNq^;Gt+B`QXq$<&K~gjT5J+LL$Eo(X$)+(yey zWvo*5Zxmq`)ROne#|tC(2o8}7xG_P26F zUlHnGDBE=6O8by4yL=`}Si!)%G07@r72W<+?s{yM4m$r+KIW{o$J(;?tD;)$Dnx^! z;y)QWyI`3R+b}eA0JydYsRfs`0rC4rVEA_;oLI-^(dc(kR?V0=z=pwZ1I~I@NzL&w z2$}w48q$PTAhMChPU{n8GCiu9dmnGXdB_VLc*fiB_g?D^v*U zcNgHaFUkx3L`1ou49)F*SYZ@bzue05BrQ{Rx9uWz?ncuh<#*;X_65$; z89|Efxn0Q5E?bfQvk$XO$F(GGm*aDB0r}ctIcp|l{|)^`A)nscbe+C((;*RJRXOY> zgRWR*e8Nq_&vMUnE5vzI1`ZJ6QJ2sl7T!{|%$sY!^EJ28kJ<=lf1L)1@)pSLF zB-)h8jEozL{`eQDfbdks;+4KGp!PdG{xgDdrfLh>%+R|U{)MgO_cWWGv#*4J;S|1 z{Ldf4TG2t3y!?}_F-W*Xz2>rOX=iBRG^Azslg`~4n#=eZo39J z-}-j)vOG9gR2xzhr7?xQ)f8@3&;swqfdZ&A|L~w5pAYrWf~b2UsCKt=Loj`RJ;0_k za!{;QBsLisX?CZybNFF?U!@FS4Q}mBk}KW;_OzfhY z*?n5g6R zB3dJ7HF1_Mej3<$>99~C6(1pc3>VR@=VMdHI^~6?LMpjo2hD>-r~LgCKF79pH|#GK zK>M3XSsar(QYJrSs?TL6H6mPjSXM-I^NNH^J-+ITB00k-uj4~n-ts?4`t~05^$(qI zwV~uyNJd~%1H!XVRv96p{WHn8mcsMre06Wh$OkrxFb6QwTs*N)_ElFPoNQl zQxJDlwaYSi6wt4gFN_keHt<6RTrUJ72kYnh!MOn4hPq!!{rDswy0XZv@l2FIjDl2- zkB9(Go$gdD+0(2w$%KZurZ=77{Ah;FRlE&}`xe^)KU#uzbg$k>P; zkR|&~y{q1^pW7>Mydk1Qz&aT)T11FTnaoY`3tWIwcugkj;#_jA<}U6rb@$c%l>3M- zBJ5N0lhLA5@j!^Us*gDK=*g#S(-H>v!?;5h{%d967}2EE2cOXvJcKsegc11V@%m^b zkNA+(ogNzG9!*2)?!R0jU6IhHC30lHi#?1w?2oJe)&Y%bN+~taJ{}Og^mcc{{^1jD zGAU~8u`*z+sMPp>Crpz$b~u75DW@ny$Mw9fuy31j=ubOrqfvEnu;V&qU|V+D4xYDM zXy!UDgelI!UF(H zEe78VYSB9?$isX*VD|>O(0&cU>{Qw1O;I&=0X*TEXSV9>aD(1nx%CYbke;v3R|?j7 z5BJ+hHFaK7L9X*O;CyxdfS}qU#!bK$(E(^lMwSoW6hX1wU|K(G-&*tq_KW-9sQqFd zZm}IxkohXep-0Z!C#U%)fE>Oe09 zsQak09)M{Q!?x7%GGLn5FadIO08BHO@-zWV3nsyJ08_VC09<{dJULFhEo1IG3&|ei z#Tct^=2O}4I6kZP;>Xe+k4@G)Ll&MOD)>w|O_LdC>qD~c1e~qcZ{uy&IU=+ro#P5_ zvmYW+@$lXx@Ngr7YMbo`woRate743)>BvI{bG9D$mPZm92KbzAa(}>vZ`}anY#qU8 z>kbHfj!fteM@ztMTaO+*e4?YHyb~{K$sMPiz9QlG)XH<*U*1fbhy%xwj|*(RbM2jo zpuwRI9AB!CPy%Vp4tW8E%7w1d6VU}Gs-&+!;)yr~4Y2!sEK;j|TCUPUNWN;Qb94^` z;l%>7aP?;Je0FG3D>`z#{IPsN2UBMqEm5&2HR&4=#|w{HD|79hE12F%MDJr6|CXo_^ukYuT#kKkL}t7t zY6d@8MXhd&jLMmFbi9y9!=1rF4yyRBUdnQ9C%(V%wup+l0L)z3@9w1O%ek`AR9WOI zIq+?ql=>bqwQ+RV5t;h7s98LWYoj@!YU}VWAKrp0euc{L0#;KQogp8-Ey@Y8LWWNk z)q=j?jN}ZA9Mzlqx5?g|SQl?O8v{8dF3y?=72n9(l<@ zQ$$ETiI6E=Ennftf`tPSRP(FCbWEA~o0N3FdkPeitq37cFUa?}SaVdTEMN{z{v&|R ztlA4WOUG{qyida$0Yi}G{ObU((eMhu=^9=Jc&>(*0FKje`t%~r9i1F49i1WmHcidj z=_9=Vkm*xBNB(TU&BiSM#|-R;2%=lfz|Jb}}u*mO}xlnscgQJ&!XF;|I&^?Q~gdhKTUp{RPQ;bL|mJg&bSWE7G}0PM#sE z`%MKxuA``zgQt>zd*n2y=FXdC)(q&WPRTnn@UTF9A^qNg+;dmTYWQpITdx%r+oZnlYwN4NN1sWwt%+)Okxevw={Q$#qs%RTSF%K6fiqQPwz=?4Ca zX-lW)lj-vMcX)j0^|@Xur^jO-(&M1%5$-CV)1P6;VErlFkpH^ffuVDLBSLqGyQPvA9f^9mzCaqu^J zCKg(QAT$BZDnY12a9O9Q=3vjIN^5XtozfbJBMW8MI8mnUs&z(U;eofBY|vOrV#MXq z1_YhNg;EOUk>LwC-#U`_-BanxwnF5=I2?Yf10`z`cvo&!P?Hc)u)e^8_09jzQ(uCD zxxT4@^VK&BLACT8jK{i?vsQ^m_l6`DgW2NEaOfB6g5lWbKSEMIHA5C<2YYB4S~c6V z3`xLd8TtUQS%zixjNkt!Pnm>5g~(on$E zDHQ+@nl1g`6+5kN>-jPvO4M8+bKk{WbbKoP<3(h^MX1$SbxP0kjzC;+dkjn5SLh>`ZMmR@_n$?4oJYCQWuo<460h{6360jMb zjRBkC`5a&~JZmSZYlN*fzR#ePKkt+B2TBIhH{dapKZu~Ij@?fki853~KIM;!@Vv!Z zq#`_Tu@Y2-=PlMG72$b{^}344_ZF+0it)U~YNjGQZ?S5t2+v!rNEP9Ei{-B(Jl`XH z`T-Ne?;S}cZQoE4{&;?M31Np^nJ8SX5AWq{0ov0LzkAZ&hSFvr+bZ@ouRiHrj6Dve z%tmx_2rIDC5&;iewNVyM60WER$$Cha2~)%UhMhWxm-k1 zZ7xMWk07ae8lrtk2@nXLC8zK&8y_;HtvyDr>aaV%lxRwoP zU5>*@lIN4e3tnxU5Dn?ok+?ob)|msrVaG?N$euN_?;HpYE6_;ZqP}xK!fBYq?Jhx8 zU6f1bKxb42(z$9j$DYm5I-`moDV*@hO_ULg|d=%PPqts`xGhu{BZaS(_6O zEoY8|K(jhYPE8gOArp~q^evM=W@1jYlB?c;7Cy8U>s!iJK$h%&p-NeCU_WfUYq(#T zgnlfoxo~H4KT#7?TFy$wdxrh^%mrS2$#FfMg~ZN8IdCpyh?M30KtRML%B2+UicF~@ z%+=Bq9)YWK#n;R4F((3v6AAMETu~_~6W1V$6C68ptIV1sLY&Lw{3W1g$NO?n3UJO{ zMz6_&C4G3+75lz!)yM7zhbzQ>gm|~yo&uH6!>rhx zMct)W%PYPVkP3B=G47V@FGq=5oDe>~J55bfjUm2!w>unpjTeEvf} z5{E?udV=$WGU zIbL?8$d&2pb>bp4iuu01xUBObdRk|uM+C0ECUK_w#mHZ?m^FhQfn+y>g zyKs{x;(~M&;d}gDUCqNF)yPkzdXJcH5_SeL!)uI`n8N7GDW+>}Fz}zoTcfH{=XHKp z9$5fdB2`5^4SYik!uq-`mFeHNjp7OXM9`ztwW+EIkFupEbr-~2wJ_Cthne$`m~&39 zScDEJf$I#lFmdb&NR&KPB2zu1EW}`{UraUi_XTQ{od!PD_kQlam)JK}z9XkgkT8CM z8Y4qYzC@Kzys*GSn{Q>4+R=~EJ0HoQbYQtXLsm}*mfiF7QT5dfUFEO7hN>>pnW}q4 z)jj!MI;g7txuJ?bf)J`%8tZ_G=&T z2tRJ-#cRVcFKnI{6vy+TGvc(t!f*1|rI;5%|0oqST+NG|6lR;+IxbI<4VHnR%_(Z^ ze1e8^GY)B^@wZd*jh&GuHKm9enhjFa=23f!%po*Rotvga)V;|XSE$>>eE!?a7n}I< z!Zg`>IaogCe}*v}UGsl>^h}xS89ies%P*D#f77{Y^gK6NW>eVWJfXgifR~#cp{~Q6 zKggIB=&#JT<$x8)_d&9U3Nh<#xr8FSC9B<|ttmWOn`)QVxp`vynN+xg)4jWH5>s)N zsOThXe1zUjSYwFb*w$chQfELpTtRH@zN7ka5>Fo!6ynwI~~Pc7o;>9b;9=DdU;#$BFIXZ^?nH zMRddNs|?>cIs`#@*rx_Op3Dt!5u0vM#G&a%AH%`Na`$Qx6<+y$ZZj9D{+4Mo2gk^# zt06Alc~8xC`WC(KRkVQz8cbVh6Nvr#J=V?m>%MsJb4GzL+j1o@t>ot6dBj6%LS+>+ zR=uTF(3raVsGu=*eFDWgIA}~=Z>XR#bv>_wvBuW*Clxkky}MKpYE16vjVcJe=n(4n zRVrxi*%qjvx$}xwK|XO#2JAi~=)1@IMd@*MRE_>ZH&WWw}gj2E%}s?u!I%;;^#PpeB&)3|LzTm zoA-!{sc|@}x3Zyp%fiEtb9e-@rpu@nq{~ivLsvJhu*9xXLiE+;xpAG|kb6*Gl#S!Y zxq?jYhwdwgFGq6YCQ%!@$*|9G1(AY_3Q&)hact+ss%7c1o|gF}gC<@HC&*Qmogsex zVwKh+*M4obT>lxYESipzKYxb0Ax-n;0XN7RC4E0f6O~$-7=zgD>eoUDu#U7-WXoAapcvH0&^n6iHoxDp~#Vvmp-ayVW_Jwdo#+c;cNDkPxo9=_R1vSi?5kpr($K=^BL{y~1 zWU9oO4&oDO0oz2wJu_jm6lX7xVPA^q(mST3BC=V^weg71kxjZ@N`6K5{SqvjMah&n zLMD7EDhe@DuE*c7YMx?)s8}*)AQjs?LZp8AcIiOna^=o6UHX&^*&r%9C&-2yM0ByG z6s_vaYR?xl;nNV6^Rnu#nXy{6M0cp(&;mytgICX1tlF(rjWW8gO*2!O>8N_Hy$P^; zr%Jb1Bbf8%qK%?bj}udQcM4Ry(?33Mm4QT>=+yd-`Ow7_L{|qvwW>S5!m7S`Dqp0= z9tPc5&xcVBtg)wiRBy_G&ZXsT17M@1{{(QBj$a0NpN1Cz&d_i&;58bK1Dvkm>441z z#@m47I36`j`bw7EB-+avFIz?B&`n~fX#S3@-b0jkzAke&iE!9h727N#eH=^m9mO{J z;%1m-ESbzqfnQ$Qvj1V0@eUFdwccNYmK6y0c0YL-L?xM6W&aq6EcbLX$5VC<4+m^W z9{||wU#|e(=7&reYL1QwXe$i9qG**}zpI?k~4t^K+J#6il2~} zZ!!&>Yes+8H|XF?6TIZ^8P1X;B;nw@k$H4Aa*7gl@Au#C>HSv#n}OdRuo?I;^s#0jNTLUlPm150~GE4KUf zd0{+w;DwLobdX0ga5d+Ju(1&Pui<}noEiQrcYvZo$gYMz8UG$YB4{R~Xl$X5wa8&c zf6<*DNzMWIl;*_)_p{biT!;(xw{`|5cxs;H6yejV%Ca(#d3qf=`Zm9r{BLRdOh2?HOP1Y^ycYgg;d z+gwYu-2Pd9umi$?Pomk`IQGZ)l`s&Zs~|C@xVOPH8rlomFDA>vJ4Lyobq_X2v(xR- zvd&IyCrifY3D;Hj+bKdtQtdbwN9zjqHxZ7+g!Xc9HONHUNAu&1A}lX$>?J#A!q#EdXl3gl zCiRkY5FuKPb_)Qmdc8Eumbq<3PV`{TkT7gdl~*&tnJrL{D=~><-%3z>KEBe%@(yt( zcymvUsU$EFXQJxM{@;oy-`k5XYrN4hI3Or;Vq&Z*SMUP4~4?u_)2l!2<7DF^O`pVqRyWZZ61 z(XWlC;0(EGw+IP|MvPj}s*k0a+cF@bw@4i?g9BPp`J&x5cgC+C_F ztQg_xlliacy!YKJaLsPqCyl62j>+Ub=#yg5oU1&pJ_%Kb_?1j?UxNukKKIEq zX?=&$+MT;3&VEzY{7ys-Ts~Y=*}XB1$|0yFDQyIPvo|tB;_PZYD1nYI$?Sj?CU!8k z>oS>$RqJ1_y$6ClZWpJtA*l)evP)p=Z_P53|5#+p{vAywj>F7pFSeB-2j#}S zqP8nM85Rozl37d86~22=akpfifaqUu`^chwBC2gQ*k|WN%t>j7)UI>VI#8xL3GMNR zGc7~15usuryaDFnQWtQ(O{8M19Jx(P5CZ#-fIwG}pxydn8 z)Uy%c*JbE_&qgs4aI+&_{;^T)LMsnVFIC86D7RciK;2OfwAo+IQHF9cG(-YB z>xs6~eSrO32X>C^HvV1E>J{6OQeKAT7u}x(GSCx>uxs{A(Dp8vXlS zSj=}0mU9n?=fupt@Oy8C6_4tqE82v$kqU2=HxJ-($LYaTG@&|Lh5?pq_o)ThRXy(L zJY73dzF&tPcTg6`r1q4lJ2KVhGV~}T-EJxS92C(d#}F>HaIQuXO7VGF$a;OeBCFS< zG%CBRCaXPr6Dv{^8D_S;KZk|pT>J0ZOn~3RL1sDod+4G=BC6ck4w{5F+~?^j?U`4( z#H;YmLS~i0i=#e=gkMlETofplaboB+wKlyr$g^3C9v$SmLn5MRG-{$X_b2%?>Vfs& zokMufak0IO`~g?-8wYx3{+1zn=F2+4_!Qfay`oIeV5Dakavy+S8zPteKqvC{au^GDIJ)IOXM@exs4C)vFNGrd-G=BfXo{-8y_>O1n9taF&`3EJ>M-Z@K- zJ}erGy9u;qL^q?ps*kp?!r+iwls?&-n|GBsKCQj{G6zqPo*Whdk((hDsy1@kL<%P0 zA?h<;3cJfHN5u2a7}@`bh<<5gKleacQJpm8d4%q_jy#R>S@mJ!C=Vd48u?9bKSEZ0 zR9F`YY0pJ4F&IP7PTH#PRb$oHT3hwK%1fP@f}3Y^F{5)SkJ|z?U0L-hn8$-J;Cu^V z-Xv|+xArHp>H|u)>ie&yHK1U9u7dT=$DM|$FG0av-&DZ)>KlciT6hm0#hRMa_up21 zqtzn(5t6i=3^Co2McKi5T7q{R^DM!e0GlOvEnu?*uK=8(^Gm>H37!i$UB}M>Y?k0e zz*vHxdA)!N5)h#7p~~U`(`2p-cqU+4GAMpLVCtX>fJYybkAD`soO|W=EKx&*43ODb z*d*_?kj0MT$|FfH05)A$`GnklOte;ZiS4f!uuFX97ZDx&TMN&I#)tk1 zugbYdDBHf7p8r3%m#06P()=g0#1_gd@l77f7{4$}1Wb$mD&R9_i46XiSz-@ume@n@ z3(LXKf0`v$WV6Je*~pWPkB#URGNG@WdK^P$aEx4j9LMzvl>Dh%P_5Wko~C3hHcyX> znn8QIBe|tJ`MW-{(Fr84XetMtK=J@ezU*G#2KJF3QF6nkaxW!6c?HQc-N|{qr8tS? zQ%z*_Nz}cRlFPc2m-UvfQSy`~^1YKNU5}D?pl_61Uca~eo{~eF$ZRB6KG6-!v3|~Q z8pj~FP)YWdJ-qoj!=_AlDCXx3_1Y*k!!# zi$r3+#bqO8ST!tXpTRh*(~T`KhhOVz#v{Zz(lgAZR6W{)&U!{+5x{0G`5Sr6T5=Dt zSxasLHfzZhz-B;RI-^W5w_KMQr#!+{(bISbR0D@eG!r$GQ4coda755zse~(k6~fBh z5{6fE~A8~ucduPM2B4H?A{xLQG}|Q-U#OxSM_z2Lfdj} zLa(nEy>Rynn429sjTfg}`^~aSgc^wwYUI873W-pzj`cMKC*89t`z2-+@1H3$>nzT7 z2cdsgjN;g&;YxP;rISaJ@!4NbW9mYu$)d885}}&P0p}n>jgfKZ@Ia!A$#h1j2NDrc z$d}VYwW%UblzPN#BTby7!bI;je3T0Mxg+L|M?sj?RaQHX&-=8;I%p1JA9N)Q^FrI< zAa=zG=V%S&(aBKnOliwAC7>apIE~p!T)QwyUfzT+lV_b5gUqSCrd(fV8lMX>RftZR~dH(nV&NuI$y)Nfogn9OJD2=s3$XypjNSly?xLW7Kwd8dV zt`7j`!xf95T0=Ho!7AZs&nH7!^AcV>ZE42~$zHl&%%D_ogG7Oazj@Y>Ie^U?G7IoN zoo6y&vxbZVyhg_l1#H%k*8v-OWH4ZsM}U7IU`&QcmO=U=Kr@ai?gW_lNis;=-|!t_ z@s;zgoO2m6NUKgt28nuJ$sjiuU4aO)x5Ph1kXh6IQv_)c@-GpjZrl7K$e~jI5J5%& zbv_Z~5rTTTxHU+LAgxQ3|9^=fhbQnX&$G*yk~^-TD+{;bu7sZWstAeAZf)d^W!J!V zA0+0JH-1EFK6zsevKV=z&hMUHssz}`8)X3-c_SDw9(uC4;Ro1=8-)O?o&l>LUQ_bM z;oro7uwyu(#XoGTbj4)NV3f$;w3n@}ipnCrt#TMKw3T)kvGS@2^{(5BY4T>8MwLQH z4YbjJppo?u^eBlRw^Sod-H=Q|21C&az*lwm9|n9%!`}futl=GiGc>&MkAFCbcs)nf z`-wmG%b(3UbWKFRHU=l#0vl96L}0S%4XU#Wc~1Y0RfOlWS=Cj9=d)R1Dgwq5mC+EG zFLwPMd)fyz^$N9Cn*%~&T!U9AJ_ABw{5$qEpZ+{MVRyl?KlW35+As2l-?67TTkxvF zXbaU*d)h_m{|EN8ypMTL^Zf`oc_IA9hZWX-d21{HkdQ$Ig3Iol(y;^K2TvN2=?}{!rR+pB2s2w$ZwlJX+i;Q$&3)Zjzj8 zWB2G~a*r>nc8@ZZk=?BQ)o~Cd6MtI!F9(tmF3g!Bo##dApwlr}_KRo(L0k^CQYZ3l z)nxl@9KI7{@-=BXC}H~3yp_VfV~kSRH#G@;wEK-*`&<>Kn$Nem(+IFj}5q z;^(?Wq=3py&N=GDujCgwxERZU5UR-G*!8{C&i?>zZs|!PY1zwXqZrq00Tbxmn<6?g!IQGxPdMfANqlm05 z-@Ogpe_M)Iine#;SGVB+?R$ClHW+uSzB{43kMz%lUG*ecJr|5y?nyaTlo&^~8O8+; zXU6%ALMGx_@z-deRcuFa?+Tg~6Wo&0{c_9-vWK-7%LBP^c5xK4oEkVBy8uD0tejkh zmq*X1)>>m4D6LLEB6V`KkWb(Cij4TA9@?%8t;4Bap<{*T^(soQGq#@A>kKY0SKbk2 zhQ5F@$Y++$ow zyB^3d?~3Erv4PxKy(&@N-iLm77Gwkq7K$6$2nv$azU4e9uBnzY$Tn=fQ_W{9AG2qR0C`z zoeF^e!=uIgoC0c<77w6Sx$E*s3anOnx1Lg~^ewBW)LZT;^;bAeDdFqb z$xE)?p){|;EN$JEV;@5rtlG}3!W^3e^*s%oyYjQgkOre_@d8Uz(XJSwq`_zM)?-M6 z;qzD;6uU~xrcdxJa$Zd%1TK1>g}`zXQ5*02-@C=pz))@g3qD)Igsc_jRWiamIV}V8 z8_pf)+PB-7=5U^kZIp2IxQ0jm5;sF-P#%0Nd|N|Fg2RAlMHqZ6ER=onAOucEC0y?z zA0-5av_(!M1a^Fmg}{vV@{6yWE_vrK+{Zksj$u8}Evi1Q!_uGMucb7iDjJbkTiw$R z-=!w`rV>q^uw!@%xoMz@-{h7j^Fo+zx_Y)(%FL$_1JAZHlydB{R*KT!t9j%m-_s>^ z1F993U9ZE7Wb?m8S;#em|Hf6$fdC~24zA`A1BcdDVqn*GVWM7pB?p#9dUmY0TMqQ~ zF)?mx^&;IVJ}&zgWzv z6(Va1D>`U6^yG?R99_AYV%P+QNy&jj4XSO}6SYKgN3IuERCr`1&7;ga4F2V3CJP>NRkSt3&{tCI7I+(8Mxo`e{A)3VAs=Sx2?D>`y} zMR$qY_nC84nc>_F+11MmDe)dMsXbwCRT_dF0}^iI^RU5zqu|;v*B%+DnX*IP83w1i z4JzspS0hj!^|J8ptb&_^;!c1pR>+F5zN>%_u;Ihv;_Cp}4iO>mRq#yXIXIl)EQe`K z*Q%m-d)5H9c?nsvmt&8lTF-O@+j`ir#?Hbruh6%Zd|8*x*O z_&81ljrcfN1zCLTpi!UnwYp3m0upwV|Ezppkp;yPa zHVxUWf~FyxRFE6;iGsNyivfEYQrw<{uo7g~`m}J^zU7nw$xd`E#I#*eyo-~KA4#tp zDGP=q3686MTe!FJbiigC{}8a*#uEUWZG0wRvyD##Y_{?7fQ|I}CSbSpIvN2Zy^a7( zQ;sSg0@z5euK}hllcd-FfT_btdhP8ifA_ZbS=}lcPbI$EQ;AD^DuG&uh1UJIopek)a8;7XvZ!2I$SM zU^9qo2ey#U!bKaAb3=OjW2x^Vp_J?rbI#k-Q#}2CLs}r077TWJ@fzw)xdwR)>8$EiGP+Q58Xe!*clXk|+|4*`bDn+(Qcn*- z-f>l7m9(G?FPL1-B5x&cj+5^MSkH-+>FP$Ub|GEuJ6e|%`G>q1U^NgeI&gl!%+h8n z+FMpO48&Hr63t=}=BC=n$CuU{`4E$^NpIvYly+}JQI$>NTkehgd%^U15q%>I%TM8F zI(V+V1`;K>2ckG(=yPf--vBYyXuzUYTe=CiX)A}ITc@+V8UnRu^_84-tPt$x1!5!Ero1q6VLg>>Bydi$!#tQrx3nYvUhRpKNBe* z_7J;oHqVNNY)G7F_kJt?V6U$LFEjd8E^Y|C7Z z$U>sIl{+4$_u`iw`ETXY)t($Q6Irt_x^L5C!{m%$E6UZ+saXOqrCN4)^em4A3kUIc zxy%f=rJPSR>O!qPG@)-AQM z_vPSXxhcd7vm#39o4>$kdGbbxRl4ofV3r=t6fV??izva=~ibsSKyo~Oh=Z7gUmvVtCv>y*B<5@$y12$`D2f$_xZ3ft^p$!0= zHMACBvxe3HYy^R7fa5g&Du5?FbE(QIArONE+VG~SE>U3Xsu^_OZ1S_#3M?KC{>+o4jBXwFR@`xr1ruGyIL3@BBIf{7Ppj}fD z9ye&mRfNY4+Flir&kfpU72|P(wn{~K+@Q@<5gs>au`0sj25qd0@VG(iuOd8d&^oFJ zj~g^sq~&Ves4*{a|G#d~-UF_3J@4yjQp)WH?e1OPPeSQ%D*tlIwn?H~>tp44su(|L zsR)w0hoyg!R^{MRdiB7+|MG)&s3>nB>4fcwtnIQwLO(?m%}BWA#~Bm{YaY^PvGNB8!(p1a@(1KKoYbR)HO% zS%vQA$!Wy^kDjM`%@R7jT3&-A~4sgVfj?t>=bl zM`%@wc>LK|k$>jNL38nlEw?axX0d*|lPB@gB3x`K%pPsZeR@Y1_qal9iI3i);eo^t z`>s>|HCI$D?s6G^aQx*+&5vq@+3Ay27KjI@0P$_esKy^!xhp`$jq~_Ji@nX*{Rn$` zVBeVn?5{=|>>M8+sodHOgDVxdwJFudpvmVE?b@GC+28{a`CM=z;bINdVT#xSH~Lb9`hEt~ z+-~C(Z8}ssE0A+6at6&u&Za`Ojl7~+&mp!G#aeKpy$t0a;Y)>F9&XXtW7QAX0yQb# zfp(h^Ix9PYSBWmDJM_+nnr-zf&8agEl_p?bNINzks* zL@^YD>!)%Kli=}pwWNBb~7a*3oY+LOv3lFs#(E)z2OI0AE5ANvYHiDJnSDC z!+zySBJMwxmupzT$}L(BTF6ytw`g#RP^Y>TZf$@E`K&asJ`TC5VLZSlBGzw_2zR!m zT*fb21B1i(Mf25V$bC||zyHuRc>JO*{hitJkl51nx>K%P1m;i1oq=Ku$Jc`x%Ra>3 z&Ew{#2A(P8JH_BKp3&OD&pma3YcX8&G%~4AwcE2|Tr||O{>YOvB$|C(&aY_&r`A4M z)b{||z=RtgY3WZqg!(3%RO2J9AC)X^b^AR})<_3i%In-rVo8(R<0S2?t4!iOBC(h4 zl!@se@k88dC=xloO9@TllE-cmt$Ek-xB^SlhKgMpOwTb|rNp3_!6^vsoV3xCtdJs#8Q zDC9Q?`H5>z>9Z8bi@A|={7*qNTT0*_*E3ms4XS*8( zVA^)14Tj=){n>;#eLilDa;H(Q_@sZ7o0O&IPUpXvhu-W`u;rCJ*>D+13;BzA=<5v< zm}SOy+UW=R#?;}B{r@{6eS$Lu9&9e?p-$}KG`V9b!ZoA+wXb^5?@@9U0<{!iqFI+ zj0*TsTh4ye%D4QNAGO?j`0lgEkJ?}u_-G6E{g<5VN3Du_R(|hKHkiL*zwsk0sxoNb zcp0U&d#%~XzI3ICEVbEWtdcKd4RGisE7Cbvj(^E2Z;iNP$x^Fekls>$^ODsmfKHqs zoIR<{x#*N>t3+g_j5{=Pl`FNK7dZn2+KyE3^1u0O)tKTRKaj81v#N^Fj_f(DlU!NP zDqF6}In5+GU@MXP>=|bGabkGv1*aUeT2ySf&BrjDXs6*R8F#;Bli4K_dpjq|jZRnT|_i%~(h^RzlDY+Qqt zQ$grkd(&YuSOuZl8bU!Y6@+SwkDB+rxs_Oy`6&9k3i5&C3}E-sdZGOzg4y**!DpPO z9cy4k#y+_P^Xhve;-E^=nywr4B-;JGqO(ZP$E2Mw!bZ?AslTevFsZW&8YVSWLBpil zDrlG#MZs8)i@D+|*>K5HL0l-3>dC%`8x>S+m~>4A4UX&03a7r`gwSp>z^Y)0<$ z>v4_ff-<6An@x>Smcl+uP2y@cy)8C6nQ)V@ThTzFDT@##O!DHEB8Ppu~?m8xGHAj2q{UP^UvBJv6n_PIUu4!={r3D`v z&I8Bgm$_Cce}CMCVDe(d&9jd=)csNTAD(uLfMfDvbE|H{smDnb8kda!$tzi>xMc0g zV&m_;2jJLEB7DtYyq8&hdu%84a3vC_Y#6;Aa zyAU%Dcjg1AsM|s?kaFlbo(9+`%##6U>G*d6@6+%Uz!@4I4|t7+hXGF4@DRXcA=ps5 zT3e&6*KlgXH_)T3CO^T8z$T~<0)Mk)z-D|0y>>}`CGe|!&>B|)+pjQL_`WRI0ozu3 zteIzAb1X-qBFk=vMt_T7Z?{vhI4a3hsV6VF$YL%9y0-Vw*aonnu?b+aC_fL_?G&s! z0{NYSJ-b!FDcJLEVGMBhCy!E?r|-Ksn~_tn$i9d5r13Zf`|Afi9aj7Vy+oKOS?U^Y z3e0?12bhM|CM4EGqMv<953Zj#J7t$JI6L?TG5Oy8ZNDb#wzJCpA6?f0pX2rY^FGgm z$dZ_mK|+YVs>DcbwfBgM2R9|1ve^`(*8ne?V@T`YtO3D+NIt!XsFub|2^m4 z`wslukG$vJd+xdCo_o%@`#$E9V=u+htwyPUPL%HJFu%^X#Ue_tg7jyU{_Gmkolk>3 zza<_~`uU?TMW<~>soYB`-T5}y=a`Kx-i9Xo1PD8~;gRHMLU6tg_7M;s5JC_T@@)r& zD_4Qwd>`y8=3T9~ zv~wW!{Qea;J&y;XREUi&(83;9ML;vNKiE{-O}0m9{|=GUJ9_* z@G!ty!wUk|8tw;JYq$?!`6yVLX+#ODxmi5l0nC^j-Zd<)1vJ+_SJY|_hq>U8=+@jU z65s7IWJK3^$>G1WcSjC-iP)C{XPRJ*_PQgjE~mAXX=B7ytP!ozARizot+yR~(tp2m zll?TG_VdOeU7PMdgsU3wHehYKmjUa>I}4Z^51XeR9>);as50zpU5`HQCZ@DB2ZdOe z2CC*MmH@;!7Qo4uxHx-N7_H2b6~4Q~?Au~5wxI3amox}=IG=?`#5d<7!0cy)hryrd z*2?S_UkOvfX-}I=aep`f;=Ty#Qf~PLywHgzxy ziry{EARL-p)f!FbeUa;q2b8JqZ#mxk7j)AtYKP{?1zg#5^c>w8B$71vQ&DM1*G=~d z@GaF6j{sj(@ZW&-u=r2FWNX;0!0UbOsJZx4)V^YV8#A`UBh1&(X2cVoSRG?z)|WNC z%<(fh9xrrqOQt_VOBRvoyE%P6r{DCK=~(xCgBSRW%r&BQTeIW`{myfZ@&4p{YTO8k zs%@=kFb=-hQoQ-k7HHl%XNr+^@liSN_BiOU{T$1}ilsbnYyMIss&2OZIux|X10PDuD3YZ$-BBL)8<7oVx;(B|tbNuFuEN58_PbtA+ zX%Npshj`{O%1lPNq1xFSO_4cDN@6(D9pZZk8`2``z!{b3!=#A5Oh?9QNsp2n9LLD@ zqS)QR^fR8eloxSdoHgZ_+h28nypEn_dDWKkddpfiAW_QeTqnruB!W(P&8M77UYC)q z}PR8o|PF(boY?QxD!Fal1q z-$ew*9GC=;fY`AyIwA(A+M{98n|M&b%3se)N{m1Ra;DjLV5dV?gmK0rsGg1JzK>-^+w;JyaFExZ z@J2zJy)Ovi#mB;h7M|j2)+g#qeq?k=go79M*~CY^jDofRX0X?Bl+R1YYj{xrtM9eDLo?=Y7u~yKF5T;x=>8bl zJ8HD@a_ykRF`i?G1?%{K9h3AOTe(JoRHLrqL3cAEKw#5E)`w$bZi$M2nt9DHkD4N& zsa3!$b(>;h1kLA-fk%nAJYsm5;hDFqPOFR(=#XUQ_cnfQvp~V4YC1CiOJ05EdLP85 zB<8X{_m60keRNXnoq!K=pV=xxd!kBT9+5R)3_iK$L;1*J-u}oz2D<{?p|sP!C&eby zDq_^$D!xTdzW{~N7#NvrQ%;X7==FSyB63!Q_c!z9J9gN)u5s!F`HGpTt@*-}5!jlK zB;}g~l#Ez%2FmaJ@D+wW@gvOqVZAi9Y7SrVdJ{`CFG=%D@l7u?qUsflrKL1Eb_Ig! zQuQ<}9Uw)$VA39^_Hl}lUoe@q%_dHkwG|He{t)X(38MGIHb#e3$PJiLm*X(M%`6p%EV#f;M&c0X{8oJrxN0O6=0N>u_XDM9qdc2uG{K|Jq!RSp^ zsg@JIWtHel$b~kG2kY@AXCrBGSA_YjcP9+*xpm~ad=P@?ORc>KhC#){gbqktDkEtS#wxgNy4{c7%=== zD~wsdP*zeM9J8q%7gMWQ`9i#bq8FNS9adIC3r*@-d(p6$8RWnF0I>RLD|!8e2p<9U zT(v#Ka-$$aEaW**2$ zHCs6ddgOnA)GR3e;C`uM)H9`10!k$Xt2NlEU>^e33RVWNRkuTh+Pp!k)%CqjwYs%Is?{FE zNwqq7P^#6cbyBTH?UicPZ=F=DD!?S?J8X$otI7wZTKTV&YIS3e#3%?1rB+ARx~tVP zplG%F;wKli3X|)XB0ChvzZqdU)N1ZBsa6%&vRZ{@L#m5f701Op7mxPY1@UCCS-RP- zA6cbpzjyev9EmO@_FzBMg+$>CTBZDlLvvRCC{?N*QH0kbl?tQ;rBWLKYoGNsV69Ti z0c({?0jyPO4q&ZPQvqw0iU+J!Y8>E?Te|6#n0(2~AysP6C7Y+QI7>7d>fFp&3OGD@ ztwX11kTb_V2@#}H$;myzExzn}eW)24{?FH{RgO7^1arP()ha_+71oLsd(4PH45X14 zJqpK`L6Eem@>)@9ry1`111l4g?Y~wkQ*FdaWoo#OmC389F6j+lZZsb4l0Ew!6vyu7 zC)u;_*dPaG)f6378(i^eg7hSuS3aP?_Z3Q zJ$>$DJJHks;L_83iLenETy0n*J{n<$7M_B1S)=KDn9$QU)dbL>9w8gj%i$6i}B8Hvs8VLP}b7z24sKa1XA@?!UVs|nc ztH^F_xVR|)hBM;iNV9au>)*5e7_n4iRMzeF!=I4oLhg|q)G)b5?&PW=DBbhZIGD^X z(Q1?#96yYR^8f%B%dw>BG^XuohH+U870wM6vu|4&wsR4*%69i zJKCr0XsfcLB!?aCluml#7ozKM^!EFn`9$-h z;kf&Ea?4vr0W2pzw|>-m#iTX-=z2 zT`9JYFpCEKiaik*vsrXpn$6YCPP3_SX8F5j6D?axnN6<$InActO3`$r8CGcIW~beZ zS?Ojs+gD4wsZbp_F74eV!)Z5rkGa{+Mg%iQiL+zP$e2GjvF-T3*LHqEq6^78xIl&= z+fGw=k~I;Ow)1ELEab;cqV*^YZAKDxnst-yyrdMR=UXN^ZD%cDZ96LgYui}@SliA# zz}j}E1J<_lDPV0o34pcjj0ar#ji)rExQU|BPi70zGY6*M?H-7zt}btRjHkY6`P;UG z2$zZv6!U`Pcr*r8ozTb&1#b<4*Vrry%>N9ErP-SfrHq+W<#WC37%(Az=`v#9_c7X=ibU{6l&IM6V zRa<^fp$$)L`}k6M&|yW%k1^+yho5>g0oo+HwL2HFR(9o`0}Q-Y_J>f6!MqfeaZ9+l z=!l0sQ zjkQJD?@ZXI?)G+ztCP*}#(#gqP0q;omohT6gM;OvX&)TH1E$Z_z0($w7~PP;peW3R zSi7aRl%7WmM)0*a;eb`H`e8Gibe7G0Cix=g`+M!|4;N=bY@u4=`j14cCx4To@NI1^reFSa#*S#qs)(K2hVU*b;p07fw5nIzp-DP z|BkUwoaZ!leEOS>y)(wx(l@iQ2k(`}-tQ}ivDb*vl-_UbI~ThedlD>98~fgc;@V_0 ztns}yPHTU#(9PN_L5Zopvl3bi>0+!XaO7-9UYGA znFz8Q`SnLPYd?q}1^_1$arofLYPNWPw)o!>a3S&HcPEJ+?j%|vC@uc_Ojz`p)h-sF zNF=G(rzJBxB`bs9ILm49Ujx<#zZ~#Eg_8nU8~hx=YgGJHz}n#B0c(Sw3|JfdCx9!w z!8#@x`A7svKm-q&C0@^f!SB9g^D;airlg;6>>{OqhFzrOd2aTeW}k!zDTomuVTZkc zMw8JwO3BdGDOI17#7Y)RSQX~cI!Dof!PulhX1I8cE`!%{s7Lu^mDs-(H(Um4Dw%Ra z$f&+bOzmvu@j3ubsiQ1AN1U07lXtJhKQqmO#-k+RH46jjpI0(kivJPMupKCtjk>zS zV%pDUPWloj&qUu@n8#Jd7MEm%WB=PJ8L72Wd^gJs%=@7x@;wTsU7v%=wv_v)3m1C$ z1vHpA890vD!dV7a=<*9Tz!F8^Y%|<%3*o5!ukVxDYn54mI2WlsL=FU*bpD+#8kla+ zu~U3D8~sgnXr8ksePeIW{$y!S4i!{ za~2+JC=~*Md-e#M>r}q{fVJ}Z0^X`{48Z9M_5hrw;8&nSLLgmw3Yb?r+Ex^sysYwq zmpJM_6zN`iSXoj8&M_nNg(f+)N}XG-ao#58&$Q)_96{1eo~asfJIG4US?V)x#5j~? zKRMebMtU1Xf^uTFMT(W{0U}*zsvB_9ebnj?QI? z3fVmEbJwO+6h&g+09enGR|D2!{~WLu`#iu}?8$(MWfJvFz|F+SOIG=mr@Q@(1a}#y z&xMSWXTB}tZ_crd^OcUB2@)jd=ZWvgSxk4zxdt|7S7u76Fp$n1D1M%2;u{yAizkU@q4L+4y5*?jo})K%ND-f2 z2qFHt)FI-o0vSofcrS^Be38==AtId$H{<#CK`kJ06-6Eb%5*c7u`eD5V(ch6X&_x90}21t~msJR59 z=#QWjMSUDBDnU8XrerDgk*o!=kWf{HX9Ct16c2cxijM=#YxqK3vPFsti_9?*9TOD0 zL79QXCtVtMvRiU726&Cckwtiq>g6Kl8K16s56{<-D0yBZz=#L(Ie9)nIl*%h+xL1P zXs(|Vvf?fau;%&>V9oVqz~EXezGN#cyo6a@oLg+x@xC*~!FbB`puD2;5}cHslfpcP zy_d(~NR&M0U5aAoBk1I@4drz37y<;%;~+v-JoW^vdF%*S^VkfqD~}TkkDcsb?>%yD zEY=9Kj1jU>faBoqZx(3IrhksY!WO!6b`yzC&gK9?bM`wSE6z>>)|?#ztU25Lc|Eb< zlC8W5x^43@?mfhvN9VfwCBPNCO>sCxIfZP72=Z$3D8WZEgt19G6lK5mvrSy@ikpa= zCUOO{W%O|zCTKB%ePkHnJ)CS4`v%#g3ogL8A#|iGQm9v@0z<4>xR@g6MK6^5lUR2|B)##BV)M9w7Kw z$KzrpT@DDGCl3&K>v-&cs2(+a9M>X*YSBytEW@zqvvgepj%}1K4-hPzs}2y%9Iv>n z&Qq;UbLILSA0TL^(_Ui;NHg?5CfdYcJHF$&!$kT z0aY#Z{5@6`lE#M$LVuV8C!jvWvKNy$OvK0qxNbSbw3mkq1_CvsJdH5bnos&beYl{7 zrt0AsfM$+iNe7ao=ZRy>&4>?=V!K1?3dbfPsE!AWn8aGC4j0r-(9@^{`zIn|1)j!S zlf-INf~cjBXJmb}AVc(8VFpJH1qO&~Ri3+F>N&lB^l%NA%MJ7wU`LmnYQL~XY+Zq4 z1YXFEVGo`m?(puJqkFU6Nc*{v9_2#1zdPxU2uhE1aTQGY;%x4_<9#3@xcWJuNrq38 zqU)57nvvUI^QF_&KL@P)?gfAkDxA*%>pm|5@ER3A25_o^M+4TAqLF|TRD95I1jrg` zL^TjFiIm{JU(z{(7AXmF*^SQsx_OeNE9p?uCvSO@If!t2k|{Ez#s7u4zmg6mjaJ&$ z)8R+vj&k~uN}o9V$WZJ%x%iQC2-2!Z6=1L*={wWuM`Aybex&Y9=|`e;DgTpxA?HkK zI4@BY8`NOwM^1dke#F=}N=*42Q>X=>N&oSg#(OONN6cr^e>Bzc*p^fN!#=|4KQJ%* z68_^5_E03}>_29%l>X!F4COx#k5pV#W&g2shKv80qtjj}{}CJ~{YR+01lxFq@*w-V zJ3UC;e(6C9AyLi~B9i1Li*2NcPD91cCQ1SP3~pHfmE|VOl0@k`PIlFagC9A9o0t>TLf7AaBo6DKhQReoYioU5Nm#C%jALfSb}6kCD4kvr3z zjv{lUo1-W*MlOv+Z3GVJYh7)<*Xb%gL|I5;S5XqMi>nA)F5GIcWO`i`pV>?A^ z7$=TKP#u$v8Nt=(-GMZFDd@A*;52)8QEMGG#plE`+x3a){Gp7D8glT=2;STaDh(7D z5zdHbEM8doJ=I0A((T7m#ZT*Sr1td`)>&LKqwejkJ@FezbRn19gKB%>kz=xG7+2KkArj0vnkc(C|A1Ek|fbRoGM_d^k6g>3CkvMz#BgR(Y3M}C?hHHen#`i-R`ph56+ zv|9I+5Kv`OqS2e3N;D9#R-&GOwGy=ltd*!OV68;00c#~{wpslComtbUrS+uNMzd|6 zqZppU8>1W#Jo7?QjuBsN#G`Fh`>M8Rrkv7U`?=oS7BPf1u0Iy#=j0c!Hkv+xTNZMQ zz^`#y9D>Qs*WeAJ@J-N+b>mnwnE1E-`DK$5GZB~E{1#Rij$^gqB2MRTY#qA_Owdy@ z6Z@#5=X;0;ezv>;%?LZOC(1?3-nCCIC^l`vk;Mvq#K}!&e)BL6;V!6U%M*%c3*nKcdkWE-&8(Jt?%-?JV z#xFW);;n$K;2wk9szlw{l2O3B1qP@kzXyC#!5aYUb(}STH>&uhfY&Hk04AxC*)IT0 z0`Lbs2k^&Z2KM!6Gms9|i^wfzEhAMoD_%q{DRykZTK?odj<%&KZ<>7wB3yK}+mfwj zSor0hO4=J7OZnq_IE_EF4=?2xjKLlf^1>gp^%q2ttUtVuJf_%kjMMzv_F-!?%8ub> zej}`>xVjalj`v))!PNb?!TfLa5JB7E6Sl>PteIw@`Av_PV#ps>2tDJn4SnKpu)waM zwxdt<>F#s|8+)<(g<46ATR|!~pPOdSOx7H-Us#_k*Z3cg<~4q=yU5NIe-sO1t$g&A z~c;$*rbNM-nR!_LixOL>EbJ!D(Y{^@p&j;ZT`$ z`;Ix{{C0FhnWI?ia9i>{PUIvKUC7mPA=lQOTzv$k2HxEX4g7hO(}@fjPenlW_#W&d zN>++AVwcl}^are6NH@URg|q>zT}Ugy+J&?LtX)VWz#Zz7&b4(}@PGKo?M&mq9XNw^ z0%LaNR^-~tZbZl$k`~)Hj1)J9njzukyQ)SR>zHO7@663yhR{ZI7lnr5Ajvn_(Lrt~ zA4d;CkY-46-9_hNI7ss42v$C({53uZPZt#u5GT8k8Dr!cL!U0HtZ(ERL*)^2rVy#) zhs&A5)8P;!I*zTsiIJtp*7Ob%f1<7NLs}<%S4IMLvIU41hTw~}46urjKD^ATA z+}0RG@vm^G#2a`S14!4^0z;E#@&N6&r0hns|J>}Q;2zjZ zXs5UA#Rm~C_Hu8PxG@^`65m0!ah$_mLfSj+WnYZ6mlxA@BeT8iMv&~~V2revhl8B< z@;FA?%W1?(dpSQ`&ZxJv7t40SMNc0j?PM$pV(lLy?W7TMkewvd(RR{sxSUZJX)ns` z!i@UgffA!MFw~6tayv!jjGR$#0E#|ou?h2GtieUa$S)Zk+y%Snj&wJ>Sl&?DMeTNM z7xe;E89NvJe|GVv?K^gn*2ZZUwL6GmKVarP@l!1`HjJ7GD%}p3ZJ`X~Unssl=n&aK z8b1g!!QmFV8g(R+3zuobx3p} zcWi}|TzPkLVF*gY@c$XwziNOqjP^vGdJD3PKuS^idZ$7L{uIb@B&z$_`$d_9_=3*A zu%Uyz-aq^xo^1ZSjhp$*w9i5WNe7*e+>RV4Bb-k*50DYgC!0IS2y0bZ@3y!OSRWEd z@?A-AawCHCts!`EGr+6T8Ko7Ytnb~n5OCTd&_5~PMx^wgwKxW$A(B1 zo-y6~t>q(uhx_n@b^Z}VaStd;8};U)voWuad@S%&olwDBzRik38oz2tFKv1^)TxiW zWVQl*_?0~`U!8!H8%vFR#?{_37d;vnex|u9EFLN(Yc#AG*9aH+-q>@u63q^oMRPZw zq^rcyev@9xr#53i3onE6Q=2U`sh2q=1BH7#pW4fvTc_^B2gvB@`5b()TpB6*gL_H2bk_+!Iaw}2iwlR%Hno3kswhpxY=2sGD%#s4*Yph75as%iawYjvtbO20x>o7|9hkM)!e2_y zS56E(f=iQ8=f#{OX1VN)7%lc4F++MWoSBH1hZ^)x;%`Q@?w_=n^so)S?nS?va>E%w z3Y#r)W=oXWZWvpELFF|o>l91{5q;EbXyjZa< zVJFN8??E3c2?kmzwyeBHjjr5Ax!My_MV)v}Wck_h8AexDVXyxhs!XfJf}V)~rHj)> zi|o{i1Jr=wuDwG8ZrB8B*yoLG;@Vg&-Az1c<_f4ZMz=2~{u?Kjox}!|M`KdtDB#om z=)3j`ke)j4^s~4KjHrJ*D?>c`0qYwnYwIN6MPvq_ea=xAskn(a;|uTRrE(7u6;I(( z(&v<0eQ0lm=yA#nt~Ux%(hYLHKIq*thf2L1fSDnW66mC~e_WuHU~7(@Pd(+do4A*j zSxZ!`V=Iv3X~&ixu@^gvtEbGsfM=aBnBa>;?0%nj7dcMjjO*F@N`MJ!u8A*A)ngfr zBc}6wELs39cT;S&NS-*_XY@BZazywLW zg~%Q+JMOC^h)qGJUjSP-2x4ST^ESJu41%*s6nutl7o@Tqy$9GaAYWv^I#O&ogRiCe zfjkD}wPj!2z$3aGpf0<;OWBRx%dU=~9He+;{|#f2A3Dl+ z7!Q0)Yb%%0Fj!mZhq8IdLaQL2K)Zz+(NMn3dFRSX5x~b)d_lnb6r2mNp6q%8Ua8_= zfzBcYzW_W_!Os9s>ZSru5Flw%VUGZlpb35mxISQd>hL~bY7ZLw-vLbChH!odOj=Cw zCje865`6eK(fL<%RNhI)>v?p6^)WC{Z_ix*)$EEFTdSSJw*Xgn7G2KagB|g; zMf^G3*l8`&&Y6YFvUQcgoDp5%OM9MT@c8Y0+RSe7J;I*$dP`Np^9a~ZQ(-@cqb^t4 zQOm|Apmf!^?#~|mh;-QshcBQJt|BN;lF-M5S5jv6<{BNlIt`RZs*d$9I>(RI0qgN& zMZmfNieD_kUt*y}W{<*1&>vz61nmAj;cLG^+e<%odxov;dHNo^p+>3C8l<+&lwgOD2DuQ zmiB6o1fK9e6{~(X^Mpkq>~KS=_9NJhkV+VP1zOdlCBO4F$VRzX{nR4)2ufA@_a9)b zbD4nkoaH9qg9_&&;2jD+19**se*v7T;DdnqEkoYZ`}DC${X?HBDkUenIVoqPx2~29u zZrY+H+nyr&iWy#SZZqy~xQ|$f@pJ5(HyAp}KI5T82ZNm47E>d&4;Ls?vJoK++CV5@ zDM^UjpuHRjkx+gS7m!r^QB!47!G#^;0(%b!an7=@wOlRUh0onl?Q{7Up2mhMqV-iX zD0C_a$lfZ=o)23=4mC-)XYVIwUWGPQ0}8YWcV1bW%7nON+1S@D%PIt=X3f6=-6_&k zE}rJPhRZqUo3MIeorrevQYl^OMDd$W-3kG$bt?~GM~4D9UEya3oTgw4Fo}@-{cF&q z8Wa2!a5F5VR^q=EJz9vx*UXB>^T*=wHLY-^M8WH3@!FwP-4qVDi4g&rsAFuet8j=X zwsD|tzb7Lw8fZkp79##S)U#)0rJj>fJ!#*sDzQ4{C9G9dY$+QLksUvu?iUWzi#R1#%x zBK+mY@>I*>N@5^|`+v-*TD-fWYV1zOtA~Nhek_l*gz1E6HP6Yi|5$;=;7?+}cXDsy zSW6nVL}bl5wp&kmtmS_V<*^oHc}3CdPZT$-A+aML)XCkeqAGI=&il}EXO`ITCnl+d z8Y&xDT!?LetGZU+6Ug^(11-#Fn1M}uIw)7-GlRZtoof))`#gB#di*O-_x!H`KM5T6 zxsIm~DN9LLEzi}UL5KYh@#!s8BR|H(vKkzFp}TZ5;SHSc@aE2|Dd9u%;5xy+T0FmH zhUdpuzGz&5Z(0{{ay>^>ylv)-_!?>Nv{QdVP6HFn?@l`J<1-Y9lDpB3Mbd3EG_ajU z7)kvqoC-^$+#GfR9|rXnX2` zmh*wqy^Tbzzresso#{uOe5p(myw zxLX(0e|2=Q_dXT@ckqDn(XxuAJG{DSEUQbR4mReN6(jCIVS3c%_AAmx;|+I^_@^|t zpC`3nN_m^`J7nY!!teJ%VLb}D3pGTNLjvO&++aopJ|aHNdl;4g?#WouvF zmXda~aM5XXRGY5L%WWD$Wxbw7zMVlc$;S8B@JjSbyBQ+B`pXPzoFADoo1j$fQ2HSQ zf*9hnyIFz_4+QyPq1h5p?yMSFvx`Lo|^6l=ziFXH0myay^#=_T^fYdRd%}u=U)&N%IJh~D# zBmz6|D0|Q8@{0o2EN5ww}oWO7i_FuTUc09 zHG4P5=%aiIQmE!D?dP%hF{?ppQuEYV%@@QI(5W+6`|$yaUUzZ)Bff-)zYFDW z6)h@mhcVPEA$~yEmY0(8L3J!{WZAuR-rsn4*7&2Qldy3TXZr7f!WT8210-W%q!@A! zOTqmaGq`N0NaoGRj08P-+&@d-PAFT`WrUe--_u^4zK72qKd8aV==ok{JcmSwTBY0j zVGOONMp;mlziQB^G*7D$(4*xgcf&{eCrhviwGbB2$CWH&>GfL(_G%A<@TI;~q40h>riop=mjbvZl?qZxkD{ z%s{^QnIEOQjwR8& z9pyb*W1Nt>huJZ5<`oG);xYfKI&lH3US3aRCmGewrT3ZWtbY+hBa_UJCFSYsgN;` zp>iFoutE+V2Zi*bob1@>Fi}rRRvLC2@MQ)60a$C~S-{${9R{o&+kU{>v26#e9otsG zZRyQ-o+nL#hbm_{RQ1nCP}M#~SXCQUre?TVSP6Z*<1BQ1A*D3Mi;#Ponbdsdtmf0D zdz#MU&!O0RknU-|yD5^$m6OA;(jSPB z=O*5`FC^}Pg7L7Db42BJJ5Qs`0 z$qj|8{Pk4nYu#+$Xg2gL@Z8t^mbBOk0kjl26?a6O#c^Xs5k>Q5QqSte*o9vJy zE?W<=;<;JKXcZ)FBLb)nFPv)M)<|SLhi%x)v2D~=wo&*P!Y*iC8)@4(_X^5?MYMWh z2KU7`)uf*$tGG-F$`X3Lc3MS8z}hNW0M=GfAF#HHXu#SkDgoA3QQJ>>S7xEyzZ9gBdpb&f z{9IrsBCmD2v>H%fl+BxCDIzk~=HMw#Un+Js%3!mbL6b+LOKE8Zbj8T4g-&ZCHq8aS z!llKv*LXEGpNm(&aFzhNTUMV2GPo}LcCV$*fjQG=18FPOS1!X zLLWje85OBL%SV`x@GaC_iCCcK?XE0)NkmS2T0B=`?j@ycAzr4={D%Ef#JS?{nO|a? zGRuB6KyihqY5H6FjAg~SNxbIj_}TJkN)J#VeDUg)dULj0X?cXJn#TN)Db)5-n00}f zxmJE0AwDPO7Ue~@_>~YN zh9=#JDvgzCmCc_Jln-7FSdUDW0@glwK49&GX8_hdI3BR}!Eu1K4;}?rPq{__ZtB7B zdkO)+Y&?CEQew9A!HXPLBpzlyox`eAuJl8BL;lx$m^Nb@CAonoFMo`73|KA|hbGgb z|G5%xi~Xgnyrn2WTDHkYHCPu%qqp!TZ!K3h9{S-6c%K;gLv2ZkwNYD4%F^v+YpB7E z#JOLchsj1%xcJ4>Dr_D?o|PMHg#-T!}hu(+bR!4czA1emL<+ zT>IqYR)kYeG|6dI_n+y<-3rh-_J~-N(<*6Pt0wm5v`RW)H1YKXOl%YE37D@tw3M$OyqcKPDEZXwg^4I{E7I`w5xu;v!p5AU;!|&{cv#<@ zs!h&;i0naap4=w9YVnmg>}^E^T*nGMtFc_mSXGtZsmqxeih4EhX_YK~_p?GpRUa$7 z>>9+OMY$njvFWD3=vaJn$^f&D(MP(yU{#Um12H!vGLHs%N(*{R%;k~jl4oBPE#|mf zkYb%s7Bf94(fz*=EoE$c(8k*&!ccO{0IbdC8elEw^MJLSj{(+lJ_1_a!P-oQAVUd=2W zEK&lj2%D#f^0C4y-U@O`bVomjM3ZqN;cba_s*Kwh9Yy0@R%G-XWP?=w-z(MONOX~^ z2l7c@R5>?fHZ{m8)enh`-cBN^)+7ui)wO`NRKEbMrMd*LmTD4UE!A0owN$4At|OI| zq?+U|)gAs&*5vFW+z-m?Q%D#A5bG`T9kEU|oMJ7OU5d45B{#8#W5PgU9ULgy=7m_Z zu~^GS1Ukj)+1DY~D*)dX>(YuMTW%=oajc;7O!IyI;5#I`h_p7wj#8wL@(Ak-81 zZaN9IS+F>e2SSaoy(859Z(fjBW)INMltNuu-c6{z@DM+Qn)91{s0&;`k_hs#LT#p$ zZC}J{ClJ%yA=|RJSMj!NFO?HN=Y?#2h!7p7c%N+l$?GQD1gtVk*={WW$=UKbWxEZS zZnE7?7)rLK1D&!B2drfq2w2P37qFJCH()JW3vk_zN?}R19?x7aGDhXMB6IuN+-5Cl z*!dfo-wF+zf@w;w?enQ-@+rbG*)lvF%R)T^#W(rkilbh?kR$w?j_&cdm)sCF!9R8~ zALNHC-ik3H&u8SG=$JCRwq1O0Zq&QEPiuT_j~BhZ19`MdlIOJjSjY64&@_7Z7U;fUWAU6kE3(Nf%x)TTw({qWGr(*xHVf zpk#|<$Cl=PI&y!2J6oGjwYS(xvp2){+Gkin_2dgF6OaYm)hFU}nL7sifIEDqC|kzO zS9l#x-5k4*ai)vST`MJa2U?}Qa#N{vQ$I#L2({k!l3I6w8CHurjs$xLIRRS$hiF zQr&@zg?Gq!=CFm5m}W)W#Sf*xgWb1K;9@eCwIvrE`%xq- zplzlYgH$8W3$ZK&T-5PpF3J!Wi9Lu520KH~GF~{$t~4fE(HYD|DS2Ww%Wk6LJpX>~ zKwJ5kxj0B%)PL?FzRSemHG5Jb9pB~iH1QY;OP&~~c5%tmY%w|%Jmq^XmWEnkCF=Pw zPqd$GAKQ(1Vz3#mnYfr^*#L1P6y}%>RcAh^<>i3w%m0{>D|6nG}ebhm=KNP}zO&E?aV*X;u_G?yP?w||85`)qI-FWBG=(xaUbOc$#u z^X(fX%(}M$ur|;?0c!)j2v{5FZ-BLdo&`K# zx`K}bCjE`@C;>}DfOLl}cOPJCGlF*kCQ%Z+wTNgFX0NadTSyA zvaxYz+MJH^X4%I%%x;gbi{W~@bswvJ#o%x##>9V>VmP~xz=y0D+ZhLFWB=)WPx_TvoKvWNAC(_oiy<7fAv7Cs4?#m_W~bFrTj5FbHJ{@B6GlC zcGw3ilzln&8YfPEsJdS(FDdiD%BTF>qS)_Rr+SnHV`Fo~E{#dPvML!vABgZGaBs^@7hUS? z)Fpr}x|HZCW)+7nb-VwLE1tP5VXgwDDU9v1kQ0md5QqYq^hKnAZ zwYln18l@{eDplI4M`3`q9u)wr^~eXX)}x$&wH{>$to6tSSnJVC&~Hl$REM>wl80DZ z!iqK;KX*AiRZ>Kiv?9ZN@4ux(FR@}m0+xe``y#%i6&f)Db6BN1j&Ur#Y9(#H4N{~3 zkt2wIpwi^QN@c3%yz4+ag#HBMJBxhFVDY9TH0kSt+?qHl!Lb7hvL;1t!q?MX$Fw)# z4&NF)rrT@Y6T?eE%?1G(Wcw1?Lb!;gz<&X{^z7{{@qH<1c$vQyU-uoo`4Kzw#eMHk z@v0Q~O2@bzLI7VJJ1~&7toRnx*_E$9QMb4FO0$0?hLpC#%M1Z7*kUd9??`MhcpIRL z_IEHLI-G+lfMHLT5?wjSiM=XCNC_Xi!z}Wf(8I-x(qM5Nb|WN<96PvxWO3UocNTA> zns2c^2SldlJU~M;XfVJI>1g!057~uJe&S1c#JLHS|1EyAr2tc400wfPg z=vqNME^9TU%c&EdJ7<5T#L{vYoNo~O%2|1fMS0Moy-%*h|B=cYWCg_#g=O;8ZWwl7 zH*!r+=A&!EKheq-{^GW3=EjcBKJ^wib7hojuW1*R%A@n7y%83?yf+b*m)p7Yr_T+g z8#6IypZ2usn7Z#A0;@_a47@GADsP1cRzZf0i4LW&%DJM()J-`(JHL0J=B2+OR#mV9 zbKl0uJOj5_R2hH0ej!R$utJPOx5UR4tnl26DE$&7BlUAJ(kD>*C$~f@rPrhMnU3`O zNIypD#cqiVq-TGKA$?|bQRjjYXzM0d=6^s`MyR;H3FltQKR2^^t^ZRA=s7R*n?%ui|&LgC@72!;~w9ZzU`I!;?=q zQ%%aW8HsOY;`j;ec`gqWKK))JK=i2u?H-1#&~A&hJFGQA4iiYV-^5mh)Z$hjLPh&L zVJ((Jhys*R>M-^yJz@v}v}p`stK!t*Cy3WNd>`;Zg>wt=4h3HUyhg!i0jDbXG++`0 zsp?U{R1bm=0`_dzo;rbcb!o*dkNncoa9<;b@y&DBk9Xy)Y!&Yj{im}t;1ll0pTBq$ zeI1m>R5+ zK8JO9#^E5Va~UH6uUTbWawuR$S5$v@)Z6`m`mF;syDMs#J8G#k46_tu_d?tE+XyprTj2EyoDmkKOgF^HL)IC??Ut+3d=(Ygx>hjbUnq@>#AjjDOL{z2l&fNeM}CK7DE|<& zvwbyAi@SSx89%sP~I14OnY?Rlr)?%L3Ng zUL3I2_F%wT+Y17wnv;g-1>AxMIsCq@n0U#`DRn&Xw$0DD{M>CLBqqv=wA~X4QC86+ z123!QS>$M*?0<0c#F13jUG)%n={disQQz|Q_tK5TXn~*F z9y>r>w{TamVKu9wvG@-$z8Y3W`wLOcDi`pv#4$3*(1P5hD;}bnk5xD_M;5o_Br4Op zGtk9MeXWXL0y1o>Ud)Vd%U|58RwoS8zup=?aD->X=ePx zZAaTEG1Z9-J1Sc3uT06R>GF4`Yl}>$WF_GT zfOU)90jyi(Dq!6rzXH}Rat5$&k>h~*74PyQ?IUZLVVoB}weYaeIZ?8fRnFMklcLe2iIC`);jB>I*$>*P20p*e6e+8i{ zcoAS-mn6XZRD1&92_of^t*mHK+v;lczAx6-#v)eD`{FG9=D#nV(r?y1QK$}nkKPmY z>37XNF^GPr+!OQZH|Cz$PQR7ziOY4Ya3j|}@rHhJe7HzmtCEr0oxcHZn=6LbwJOAS zyTcXsRBh*e|F1R@WrgcEKn;2!C@b6y6)s9SWlv8BU7Gi$ZRT;D2X`%mmZO4Xv2f)09GHIH12 z4zx*1r0xn4S@xW`cJ4NglH}P=UJ3sOR=$7>x7@5G_O)1W5o3|Y4XnVL%a8_B@qe$W zOmWYc3mYX;`VoyF{rO^L11q>&eWIZBj67EvN>egj3RvsbJiyvcW&qZ9G7+%0lktGH zox}mI@7$-1cqw8U>ZSNnVlCkK<)@tkCM+%CW88>9{ngc@DKbP$@p4aXsEpt@HDXEr zU1fwt7+oo%sf?hfROHEo>N0{p`y#hSO3H{FhZ226i;t~RVT(?v_WurRp>jN4@i@0X zuk8LNQa`pLa{FUP37q9ni@axEyb!IsnR!D_W63hPeQF!~jZ+>tp+-yC@@!ndCV4jQ zqs$uy>gN8SQtV*}np*!VO5(2X83t^!@QKH`aNZLrd`h%zWEIWb85>8kbdC;2>HGH^ zd5nHH#H;Bz>(fP(`NW&Qd~cMwA;NoD!C{4ULUjlI-A9=|ulDy8zKyMjh-Db_N%9;^ z1It5+A&@7y0WCP439yQ{ z5PKV2!M0K2kH%I|!S7Fypy+{z)=9@_eMKw$$qf=(;a03)6YE3oo!8h>@I2NI(V~eJ zS~c7Y5yTzIYtgqJ9+{DxkrwEa+b6WK*JgrrXFe&>0#97#VDV)Wt9Z^u(Ior?`(<&a zi4~s13&dw7;$lE)TRz);k*ldy(71I(lxk{)7T9)GPYHj(%qjXds-7#c8&;u8+46W% zh{{hnA|?Xa?0XgWXeZi&!a5#N4LAxboU#EQ9by6R21E8#@mo_XGWaw$AEbaeb^(I= zdW$H~%nJ8DctzDZbEEKUYXt|cK*Y2k%TOESO2oP(YLRNMcFaSR{S_~u&ueC7_Z>ia zl9Mk}Im^VC&8)JvE8;Y$1$#?sPH)o_I4qV2!l$_vmTzAzdiNqZf?7~f@U1QCG`E7h zd)3CIuOpTAvFP92s#Buy%;GWjxLO#nuSIj@eq?s8U+L7v(0V( zP?8$|ElVnA8AK4f=ftHJR-Ga@f2VXF`)Ap29{{__mS*=n<`lG7*UAbK*ZNzY#Sxy(ujzBb`=Npkq+Cl&3? zk#>MN+(;Z^Yq7Nz88Qw#3z9>Qt%jiThadeSMzprVyoX#=ET()TS!{?1V)4G%+Zrss zyx=0nH+#V%K9;Fi%(^TJwXuqOA4b8<;-Bh-;nE9|$vHZ~nWyA_W^z3-c|xpgV?}

yM9XBy+f~)PiT{75ic9B>TT2g4mxZDz&xh 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

`P5B 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�han1-G}!MJ2Kz#j#pf>AI?O=Up}3ocJp8(8oj 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 z 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 Yq`uYUabipG-^*tOM^*31xhr!21CjA!&j0`b diff --git a/BaseTools/Bin/Win32/VolInfo.exe b/BaseTools/Bin/Win32/VolInfo.exe index 754857cc1e98a723a879f272a7e94e5885100597..ef33d1e1d90b1240084a1becc0f8e40e8054eea0 100755 GIT binary patch delta 101 zcmZp8Ak*+bX2K2T4yRQcZ+{YH%x^v?)_zWm5r~<9m>Gy!wx1JY6*~=5viK delta 101 zcmZp8Ak*+bX2K2TrSm3jy!}a(v7q^!So=9KMj&PaVrC#_*?vxpRqQlK$@b?DS(m;M znD!&3;8o@f_ZfQYyuXxrTWp_mj;%pa$k0H+$iUE$!KpMeCq==?*vxRd-Uqfz_5d${ BD*pfg diff --git a/BaseTools/Bin/Win32/build.exe b/BaseTools/Bin/Win32/build.exe index 8536c7249bdbca0d2dec914051f1603231ebe285..16404a22521a6baad48c6e785b7482a662e28978 100755 GIT binary patch delta 163147 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�-5GHETu}+3%Z1UmqFHN1)5hn?0&xVq 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 delta 139926 zcmc${2Yg(`@dy6i-Mf?YPSxsNvWg`axmVm|$-SS9Wei4^eP>&?ta`>au{m0R(BT40 z=nw;@V+@fg0aF4AC72LO2%&`*Iw=G~LjK?H>^0jmA^HFQpFj9U^Y(4u+1Z)d*?mv^ z>VEStpYAj7vda=r-#%~JnH5J(4h<+9>LJf* zhdien`4bK*Amfk-0}gr4j6H{5zG#A36iUCi*iqFR8hLS#nHc)R1$m(dFU}18^@6s& z^Fwzy5{4Ou;T>+MFLqVtgmNxjX^shXUwVo;CG?j|A4nh0m*WX05Y&YpQdOSOKx-^M z&)EB^YIf!_7P`YQ+S@w(z5cFn3RQZxGuz=E9qPSetT{Gx^A$zziA*&j^z;?8%=v0b zXF+bL_R17b9YSlE-a8{yf8{W9{@%_jmzkag3@IU)7y9*8#pa^W$5%}#S;7ET!Mg&W z#t9H$Wg1%pt=<``e0ol1=#AZTLswsYz?>WEyk@X_5hJ&TuDNDRu_Vz|XCMaF@U8*~ zm;j;cE?p9ue(hIoY4uTir(XA zYx^eeRKDi`1QG!{I(s&EwFWkLw=p=0zy_!htT(iCcau3|@AJF!%y6|spWU33Eq$ej zk8ySD_ZHkT+>9IEA2F|Op<`|>a?c=o+TI`BTH=_Zh)Z_}5$IS9+e#qCx`Bl=W!Py1 zml6CV^!)CoQ0*O~&2f8I-Eop5I1Zt0?C6>lzGuR?yf5Zs1%Xs}JF!Xvp&2PkiYKv1 z`)fSFq+9CS+h?`4`+L1o^$>#@zqzw#Q*T%6TE9Ha46WRgn;lm@=JR8MOIXppzuWV+ z!yFfS@ScibtZZp|tOBu4kXkHdNgS6ot-bz^*3EuhFAj0RRm83)xQ5{18c1@l zzrA${hBd$zE%NU@{@z#3%2=;o$7Is>Tw-|y(jVLQ9@kgt@Z7g9|BOmWE*U+*5-haP<7>&hQ8(isGg5u8cz zIDt%pM~OWvGhtt7)MHySNe0qAb9-mBb+qU(UY$f9NCTQ{olwaJd7mecI5LMM=eHU54uOt*>{G>KV(ol|FMbCQ zV6L5OHu~2Fy!#j^rNr8OKy}`ho_oos=6v*g+SB)d5FdZ~KJ$anNzaTygZDmD<^G7t zJ`S;!TSB9reaQ1C27Ey9N$8tr2b!OTN`5^~&-RxPTI1j=spRL9YJceGzdoV#Lx!^S z0LQg{O=nL)c&Lu~#a{1oKQ`-{8HxEzq;>6EdN+hiiiEZGHu(eIaGkQAAM9bi;UYtG zpFiIGGPL`7RiLZK+@!%W*y zHbJeLX!bMg9|T_l1juN61FeC!wVVBc4V^ykS3*x8>}`Lc-bA>6>b;vpBn0VsYH`cg8JgV#KzEppQpK#@XF^@tN)af zr4~#doTR!EQu0F;FJ~g(=XW=U&VPBfhsh&ENftQzm6_=h78{Xpj{C1n3;q6;g#~;o zU5%B)zb$U$VkMiYp-X@Fo551GR7Pi?v~~3Qdjeiy=wOyA9VKI)5W4u)YBM!jb2B59 z^80fuCB014SRxESm{2U_;f<9UN`GzEchvm8*Sy)1pJeqHz(}jv!+!|{{;;YfT3(FE zWZB&0-`*Qnl9>}~czwO}gI>{Mb&|z1u1>jcbd>g&E6KSn;NN^uwz;9N-dO6%W!K;r z=5V2#-kg`7$EN1Qy+EB^HlA-)_05AbRoM+`NujbgOEbI@leLJ?;;Xl=7$UVGK?pYv zaCA4FpqD~D1b8K(z7s;zf43|&;E#cvXqs4mcoWRfg)c1+{rQjkGFel}t%l8!IjKgJ zr)Pzpf9H(O*nAMi!2$P5@g8Ey1Ste04{rv640JXzj*c|fEBz_uQ+wteuy>THR1I&$fs?oSWx`O{qYAm%df;twbHJ0st6s?Oczg`uB) zI4ND`L2RZ~$7aA^Ld!myJ6h+&?qGv;OCG(U6PuP3l%U8^e zk1cm`EV?m72>cJ(*!sVjblUt^4|l zbc!01k1l0oDB~Z6x_{ytIW=^~KTb;*!B2NLvlsJE><*X!Sp{ z^H@C*Xy*I3&n2VR6Ed!d>7lp&IcPzQ8l*>JogsrFt(OW57Z5TT&#Fuy5T-Dd*ffIa z@dPs@bo;-4=3%PHLf!E#1*zx0J+V-lCArF=$ENCJQ(ZeKAt&_lqg);L|9iE1<73m6 zeMl@Jh(_J5Skx{#&#WnkHABWU#mct9>ey7X zDxD!-*e1e*dqdxasph{-PpoIRs>{;NB6FL%H{JZXxmERMn8()`hCj)GHRE)LvC=mD z9>bq#oMsv;lMQc^o>ZcM5A91GU|!^y)yBS`K@iPX%PqaFYkIxCtSY;=zCGaY@pg6w zwAvzz!HG=u16FdYdN<1)IOt-=ruH-g+S4LxPa#G*ji8axwnqh)GK!7Rjk zGT%$2=lFOMAI~H>o#2NAXT&D?7G>p_TRf~mWDVzP|0tfc^310W${TW^dLZ9iQ*ajRA;d4a(n=61A9A5OyTB|B zJ=T=bx4qE3%pqnK-R5>xRALsEN^`GZNwGFZyWP7@P4iads?8;4QQavl=u`rBsuu%j z#C4{$Tg)p`<95|oV%}t4u3AdXX){uoAU0J;^HHWMd&he=b2^XU0)h((WY%0xY!*Rv zjK$P?cOaw=Q?+*hQoGGGGjDv7os^Q4mE=rvrIm|-zQjLwvpTTLQK0T~<_zn*x6B;q zH0P>UD$Lj2yIJUH^VhS0LnJbxo}~R-0hHQLomT1=*jnCjTZ7j?_wQmr5FJF0sg+)FVTN6eM_G zU~r>4X|OpWIF$HU0vVDi#O4r4_qP!96Ko=AClErrh}fkBmlFu}TuW>h!EFT91a}kM zL-0Pqy#yZ+hzd|@P6k@Z*2xk(gV-X1l?2BU97nL3fP6^LYz{xVAoS*q$EwGNn5UQ* z_01Y;-tm^$TwiQ`YPZXFRC1;_Mh#T zn0N&u%sfz4pv-d|!<}Cu;plT586(6V+_-*9rdsfTV;Bv>x)v8a;OIC}US{2W&!fsU z&RNTseW>E^>m=L`{&tPZ@;j>}e6rv9ryOb0y20z-Q^R&RE2T-T_vB}uxqgSUZ~YFd zK20K|J2Sshcb#KZFhbu;=UDGrl40%demq${cA+&`YSBF-A+yhUkrhhFq{({TrkwW^ z78wSAr67)rw$+s-?EQ0!%}O1(%z7%x{8n9Yy)`e0bpclCHWyiTo7)HgPaqyf9L7$k zvB5BQTH%l#mf>?4lbI&b;Db{?B*}xNA8dJW=?9NIxQ)py%E`Q$ECDZ_u;nGH5M zcHkdUWyYmKkS~kT`6By}7dep^x$1;n*0f=$F^bPLHad;YGQ)(8euvoZ+wem7OqQ|E zGV*sO8r=)j+q}ZnP9cK3)hin4uNHn?<472-VwfqKaV#?c&=I)Qp<{fUM zsU}Zdd4u&Qb=i&9qoqzvtKLA5EOiV0fmWI-MSE{YXj_-+yvZ8hcgIcE7Bjm8Q4L3e zX~Ptf=twpb01MTGo2|0Gl{Z@}o#t|N?`_s5_iWD8CRKgAH9z%e;9{0;_4&NhRPc6d zmA0HOWF)V8|8}c1NdyQMtPb2TXrgMo0}J9Zv6ZXRyB*`yg-=+e>ajblLi1kr#vRs9 z50{Gu{CfXt_N~9uDl+RAaQqurH5xk;WEe62dOQcPgV#BXd~|wexnXkj`+KQgyUVH# z&ez#Ad`C7}GH^%8Cd=T!oo$-n!ZbloG zIqJ;^tZ5z*WJJunTwVR3Rhi(;K@#urYVd;)c~+_w4_afZ1B}(s+TK2M8$|Su*7jwc zo$WOwUM)2!VomCU2d#6}ngw>f<_z!r+{(;228(+ymL$kfnP#F{>`;z}teK|S=Y7aJ z!>s-hUu!#V3SOs}g^sm}h|C~}XnJBCrSAHbH8qHJhZ94Vl=UvoXb?LTiH#1UGeZw1 zXq%mps3(al8ty(Q+)YY}OdcUm5WMtfI3dD7^x-~EG`4kdqp}bis$j?HZIY`4GvpX! zC!!&;M_s+&%2}RZtVbHBWL=92VX|?fH%$WabPYkZIvBi<743csYr#`SGe=Kn2090M z%ILA%<45nrN32<@`KsCATmJEJp;x$5~xt#IXvWo(b1d#n3a#w>wL_b<0zH=saT0ZIhP=^ zSIWLoz4QyK%VM4?{m1q!QpH4bci&S_Snrz)`%5d;+s_Q7j?%PP9iPGrSpsLB(A0LK z-^+}>zaaRD%DCInC{%ap8xx=aoEjWwj8pX&8?wYLSlH>$4RSd$~g%Zi)+f|YER^%cKhwK}2n z2VcTOou+obWDPd|re1i-`n~yQb?3|0Ku4mf${)8I*e@k+>C$0p(ks?KxQPESu}EEb zM!BWZC%KDN*_RHN+WI>y)scBnnt!2j&FcAo}8KGk~vplsFs26)O#oE;E?u~s#%`ej&>gqX|FB;hP~V&3Ax zHg>v=Z9mmZqoN!Fo`I=Mi4ZJ+av~-^IMG&_=Ukl}^1NO@W2s7z6}AwoQ7Sn#maae$ za)@x6sE-Kq$}qrcxEdc6SBorh?j(#lfMPn>U{m+G;3MZ6&E0G9cdgO9?cqqvGSRX< z!l{xX&A2AgjNt!KJO0;Z6p7q$P&>R3(!6GKH%y3|-m>a3;J3eJEpE)hAnLhVPwYVe znZzOudp~2COhPgHQF>d_-Wpg3&xZwVy#eoZzCTShzHN<3Zz2v#FuY;1IqPk!B7;)c zlGe4GTG#uTqQ+JaziriJ)F7hB;7iu}mbbQV@hj&at(%sd|=F z%@o6JWtvGM`q?m3rkjQQIg-pQ2j2DjCf%{9W@6}z+A>x4j^%=MS^bVR+9SIx1t{D* zTlwCx#-)GD3jdS9!BD5Vf?8K%1Fy` zqP>N6X-WK>mZg@wXU$6&Ylc`0rZbmom0990QLFDNv-+NS58PJt-=VYipNm~!t4j3W z86Q}WI#Lu=+&}*4o=ZBW!J$QEd}IxDehS5Q+(*_e={7m{`h~4)dpcG9jg?t_=0B~Y z&kzg2DUaT~Ssj0>t2W}~rTWTGbDfeT`t-BUc*@l+=envzL4V;~*RdWcf5Ew5U9QGm z=92Q&$bp%eechM2#-=B-5)bXX>jHJhZoFjqFYR_cGd7j_cira4OLk8;jNQ}KU9Y@_sI4V9td{%9f$p~2J7+vaQKE`59G1{g^ zVuT~0XwwIcn6K2uAGoT5aAK2qz5?jj(+po>_?ePExFlr!>1>c0sOP>WWGA*^25}+{ zlsDQMjm{jz5Ug#2;VWXiofv602RY0%0=CgM%J3CyopBal24*w&ynbG?klCu~Pp+Ea z9K%;)1m=?OGZaX_+2I`ovM3kcwuA{9SIr^c42(P|5o9{iTjxoJs1}sdB$zhh@{L4U zV3eZXEenk9feFoQ-9n=i{F!Yjmv%2yBR_P_^DmMdy7wnEcQil&o2CmNFNJ3tZ8=6; zrF4Lll+WZt3}2~{OKceQS9B$?a4v5rG;g~z9MHIG7qvKftKR(3HOVYfg&(@y znA|-mv6+K6MVf_$XJ(TV$p_P4pBR>!tf1L*2k{78T$_ju29D_xWGO* zcBR_)v1{GZ&kc(?uQfK>Mkg9&LURj8gr?T!GXj3YS4HKmZJpt(7G%BQ!D$E)c`ouMS*#cx}n!XwXV)CX<#?CZucCf~^Mxev+4Q56@ z^pVcR>5!6PX@W(moy3UYHW85-o5l)=^i4HG`v!mN@;Fj@seVk_?BCqkvwc!u^XIM` z%)XjGyYijtGjBz9t#8xp_Rck}?XqJr%eQVxYY)9CQjutGN7t5saG}PwwE=bF-&}v{ z>;BSJ=`a_llbWhZ)xBT2&M{9_^bY<8(8r~7!b zSKaM&Ut`WxUdz1{^3^WOy&~x+%xMXLn*2^hg{pD6bIn0&y31W}wyINI?y7XkX5KP_ z5d`B@pUYjAa}972)phr1f6UX_@?~ysFt9MJgUtB7^n;B&*fh>64>LZVPTE1AdnU9PW{rZ~d*M~ixhGh2> zF2-Nkmzv@})lpZ*v{H=@Vp0RFPvIRysfLs>o?%Kol;-X<_p7>ecfR?Mnv?Fn%DkZO zy>$0W&e0OLo6+VGNT-Y>hILDe9U`{OI-#+xN0&27eU{}eopmzbdkK~jR1vWIrSfw- z)-C8ExeTz6FwbZjlkV#ZSRbc(96 ziiMI$6!C3iCei;v2BqzSFO!+ z4|8+!c~_|$fSbQpFXXw`m=~&X`R=Rdoq#v*pw_*Eff!~E_E$9R(_9Nl&0wz4ra!4l3fw~yH?ZZ6t5&O}1@6osn*uZPwtCvfApbY68b^Vj zT?B}KmUIypG*~HNw1O=H3?If9K#yKKz*D-HK?1LXHZS5oqe7d`K7v&Q3kd$KE+};8jucUib3&xl_5Q#Klv2GX zGs^u0uL9IaxBiWfXQ-D8-Gj~Zm7~agx_Bu5i=CQ>cZQjVy*GAhj%fpCnpMQqLk&5V zU_Q?kxhpDVddMW(!rVBAv;;{a^Ky)^#kgu|0+hK@_bhdCG2G(jt22t-T^^YVuP{b4 zrM|1oed?MLccr;lrM_>Kt9MJ>3*Ak8?N$fOifpy8)IG)AqxKY~XO?;I;)@>>h%*xM$j9>f$oD7VRD=b3d9Z;qDiIdyo3z1b4Z}XE#r9 zUpqo}hPEyE$9rmNn|nBShWbuxbLV@^;eA&H+$9O-Z~7kmfg4*~|LRLS*?pU7I{F?w z#eK`evSD=L=hvmEj{1b5+%VERN_U-DI7{WvNEjjo{_Z!IPE-qKBn*@Sv1haEZV^nI z&wa8;ojp~ z)}>9_*E@WcFOraZJl7W_-kK@$YuducPfE=U#R2|=n2 zUxgrp3}2-nSk0?|sMphTa@w%AGlQXA(uoY?s!pVi3pP z4i{v!;Ts{y7{fPGkgD z%B`Fxk7bk}R!)z@>jf{D@EL*+6ud$33c(u%uM~Wy;8lXp0vJAxUo7|t!Iua=(m0w8S}G5tQ_%Ysv3v zlHp%ji}tD!d8su);kGSciQu`|n*=)|2AN&6VP}K^Z>u2FZCq6-7T`p#GWpzX5IYQY znaSkB;k060!3rk)J;69qTJUijIZ5IR4OPFcJje8?J@f5x86wd2%1YbP(C%;TQLP=- zMWrH!h$P4(BqEippBWVni&gh2cBZ;|XLYLjbJdUmj+!KuM8o)*(^FGyE=4+9Rkzy4 zhVwGpKcuCtqb<xrMF0kuwebIt1%)r?>t#)uzqTi-l7;p_i0tq}KHY@gJJ%G4 zlq8jQvpq0<2r}>v1<(#D0&owD2>g{OO#+dBqdWtrW@vNi__MCImI0z@Ft0`h7p zG$L<{)Va-e(QHr~cC}!g>lzx32vc4pFc*t^vFuYI1Iz~GL#yCm1PhJ&pi^Or;4%pq!I0E)u1j##JRUG0|GtNQ7L7 zf4&SOw;bJJc4u47n7(XOMYK_s(kLi(+p~>8mC;rm*MZnugyd<)x^GqhD+W|O%@%Nq z&S`REeMQ`$)kw}5xMr+UEUK1@VpB~v36^eJ;45m~N_%r(!LjyuN3xeMYA9Gj4*lX9 zSE)tfQzP>;v(@FR?BWD(0pE>Lk4&y9Qg5xY^R1j{gxZ44j0!R|9>!^CZ|&_B4M($t z=xHMF1U373d%ZbU9cZ!h)UU6#-Rjxn?L=!_G^0+LVT@9)7JHBb8}kzRcLkZL zs;9*+H>c}>+gd;+^~C2_&0x(&18B#)az54&)B=dQ053VUbiu$9)v?;X+hRkMkmJ=UpV?I^c!E7cP5;6!E$Bj>^zMRe zJ@%V63F1^!mw#=Vq%KlJ+rV}1UuU11K8DSTPt!Wpk)>9z2U#C;gJY)VL@%#LE%Vd| z>+N&P#~zXZkD`p#dmHAoESTH0EXwlgpue-SQrud$hW2lfAk$$at|7Q}7sOj(pLm%GcT04{En< zbFw>!jIVB=|@Uks?efL$NcX|D_Tu|C6_8tQ=)pc z(@u84f%b@n4>)q+f9tZd9jm@0Ed=KNn_a5%dysbBccc}Kz5j}5ZLxD4ow2m*(x)G} zAZg`-6VS?S@hR&6LyC=Ck>ZqCio+&>%>4fAhe1hH=WVk+jO{QPM4AgsJwIV!cA+=Q zjO?dwLL! zw9pb*ARJh^CJUYj9PVv9;qv8>J$N(_s|wbtZELmoaI6Ib2##4&tB2za?Bj?@qbqX4 zzFt&hb(q|YLkyP~6NtHiVWC1V!aXHHP09ZvBx3&8gc3pKJrosx`}3>i7JBU=S_ z*aL$wD(4z)dErK|X~+Rhi!~1|WWszSpyL*Z87H4bb&ZOvaiEYsJaD{;)f>B^u=C_c zt7K`{Hwj~}6&acAlVW4CYyhIiQLz$Lv(v5$q7L+CiFP;6x*xH-Q4Ts8r{CGh@UUSg zvwr_WA5%(U-_4L3!Sg7cGovd7(iI*uWSUIE11PAilnx~09T3ZWaK=IHON|`X86#8% z*+iwDWEW2>r!UTA)QS-XM*U6Xp$$5WM`)~j5L^QXIhwcq(FnlEUu6WU4G1`a8ny8x zdtR`XHfuC!C*+tc8K0dHkp}aDBMvtf%jl$?4lmJBJ9CTZAZ4i9BT3b=+-caV~0D>*nxi-rMhtBEa**>yLUL7yPKS%Qel{etJy)j zAvi)>1aWsqp(Gh$?8rBE6j1b@+&#-OnN3_+{>~y}M-iMM4p=2IKQQ7@zLIfnJPEGDlGw#!7-{-`pNc2Fqt2mY|kncYb(`H;Us#K z*aw5WmpmnqPtB|-(<|BqEl6S2ZEcsDc4tb?aO!4Tx_odR(K25XGg?HjjNoX37)Q!c zV^6U=JOPGoAvi&m?;KR1etC+0wbhCM<@u`oSoMoj?cwfbzF(#OajLyFJtn0MVrZ>8 z^E7*i8-lgr-O#u1G-z}=yU52bMF{zr2X37?W{H`uyg#%Lc#dL3a{j;owI|7wsivO+ zejgDUuqG#Y($oWI*h!{K{o)L}Y(NXxzwX;G!=I!6euh12tf%e}7#If{DuCNq z=fsv9a+E0t<_jJr>V^pxN4ADY;xWj&fxtC=aGIJsgLnrO17s|`niD=*JPW~zL_Lcz z)f_S>OakyHRt40LX#lrGxXPh9VP?rGj`f;J9`xSCUYhjKIP~)W&_(L$ zAK4Yy*F`?jVM6sVlTk{np6CVq!!sI&F)pThCTw7*Lpz4bt0vi^SOiWF;ysVxd;$vf z-V4<+XTye2rLH{No;|Sb-}tYW_Mu6>Et@xQpH##3+&h^-m0lE7*1$?JwkLg z>jNw?L$T;>*D{_=+UtNt-JbiK+Eja>@N}GG55W%C^ffgVc{GiSaXoV4s79pWa`nzR z_OSFCCeV|Z*j`nBu061nyEnpE7IyluOSNo!m*2aG@AVW{YtFR;MNcBYgYAjlH9$mK zaizgkM9=fj&$TD!YpYKUwllJ^sZnBjzzVY5h@h5^NXs0+W5K%H!?XHRReqbD6=WC~ zwFm_qHysCNk?;%g{O|9DOuoZjz;jz%au0ift#O%rhrC$I9T5l=2tMQu1uwYb_V)sL z36UL^0$HW0CFk1(L!{fO^JpTt1Q={8kXdK@18~pLhgELi`y18e=i7gaV~8{`4M3dU zh3s#RsPwl=xzMf}@=H7&)Qx-kk%q<6VX3tj+LQ9I7X;4OJx;Gsl$GVJOYOtkaW4J# zEaM>BN4ePL$^z6U2B!kk?GP%yT@Aa)uBwf#3y<>sV+4;A+(&Rf!2<*js<*b-o7B^F zgOV3vUK_oXils?#(TA(5SrGnPqBp?Ub*cC@;MY3)3#nG! ze>v3HmW!cye{;E=udccn+T>Ac_r)+zS!(ZoyJ7;En9##<*ceQqM>eYYy0A$Ogj9pbMzJ_~Tc=yiXB4O(0z(bNd-S%8JKk z)WZdN`-y%GsNCOk3t!$$a4SG~dh+pJ0vbGoP8hvS-50V`=gX}98Q=C1>?4plOL}V3 zI(N9I5g@Z4sl@?IOaLf$%VwF?53BOq?X~GIBN`89_l^N#m~QpMAKMMX=w{Y$PlF9` zVMSk|d$iHgsh+*uu0tRH^K!e&oS+t7VizS~ml1JXstXV5x&3wmE=lQMj+g_=`8GN_-uLhr8KMQ_>9BXC0n)|jIlw&rMDQWO!|KIL?auU9fM3pm7zcy{ zQGXT8ZSBe)R(!vi(`ol%Cu#CVrwX1=X&OY1wNFkN z?8M0ybTURr#}kz*pA!IEy<$-YEm%7;)N?4HPKchw9M`4&5xwqLHS#BR>GJ;ia{#mG zr$6-(z3c*eg6WtFnpN};)zY6^E_)c7Lxjpm$S8BfS3cE1nAZk|ouCR+;IB*sw z+sOwrmj8}y)rc$Y(qMnxdn9tzx7d82?nPe;&sg5&TfA;vFD}4&m_f+^bFt;q*4i$7 zCDQk=A^hX`z6SwcF=7#ukU43AqE}y*MXvAV>o2jJ2!2QKdxAd@>?U}f;0=N|32qjfcHcBu#Ldc~47rwIFu`zw5d@;u z6%uPu_45icD?5pI6Z8;lCD=}|li*~6QBXOvuw-vfLh1PyZB4>MiQL$GOJ-)J{oDPqO6y!lY!Jd!D26cY(5#_@6pz z7xo96ciBzmBkI;&_O*5@7ZfNj*n7X+su`&sez&$HwgDgfjtzK!mEq4b{IK6(BfHw* zVtJAs?si zj=2eo-+=oET{<|~Qs?isR}UbyY$a8aqjKvsS=H^f8?uLR1V~hI zGh~=D$E0I3^mhAbIc|N5Q$0U6vG6-LP7&8dI{cx!@cx9NOKWXgUGtosdHCijb9Iqe ze-yhBNKFkC)~NkEvWBSxx7gY0>5YXc1+r9%&0mg6$l@x?L6*wC)gI@b%$iS$Zi<9= zRnKD^bM&rix;Mc(@~$e*STrDuE2P4*qna&}6z9;vn+A|yTr&}RlWM)g9+JLq!#=csG_ShBQdoQXa z!As`xn4~S@X4J;GjS?AyxN5{kAVJv8GfwVQ z58Ae?3r?NcDt#Z=_h%2n38Dsm2~pFEzVs$;+(cB+gEyPqHjhBMaxSnM>G#PDJ7iwP z6o6~^_Q+!^g2wk4+-I1LFd$iA%K7*_!EXp+W4)J;Qo-L6BR2~31Y&yVfiZyq^~n~y zMa_T6PR4AolW$)qh?jN#$Kgg(vZcuU0Ta*`RXi)sC0=H@y0eoQV< zNJ09ryE|Alus39djU5`%YL8r4BRauXOz}0rE`mb_@plaS52^>E z1d3F~V|JnH%*))kPDI7;P(7ICOahTk3PAxPN@zW#jE@xr)dX~p^VSl)#T24v$l1Lr zb>U5ASxH|q)WUo9@%3eO2@z$X`+aL}*o}^cx+Rp8R#I80fo`DngjBWvaXZ_UpX5oZ zRj)m6k9FK_Mcs2NM_bs+aQJhuy)8&Ckqm_75g7m^pGYPUoY-1fNJ>$yMKxL2tMJ@i zHdJLaCgcPw7^f0kx{^p0kZK}XKn5XI5uIY&N({K^5`kg>rJ_vMVmRzN;H!(sLx2n= zG7Lx^QkBy$7ynQq{c@e+DXjf+D}J4DxN0@oQmfQGR5#M z5M-+1TPO&Q%`FmSy5U<)B)GEP@GX&`8HR7EAPt7kD@dc^YZ7Fp;aeuiEW>xSAhQkM zazW-8zGgw@8om{R%rkt)2m*&;_z6dSjNvDYM<{!PWf0*ij7Qug1!lDpzQTAICOCYB zfomUPxC#T;KE!Yp20l{az*QKyb|HqVFmUZc3|C>`+JzXd!oal)akJpsg?NSF+J*QS zI7B1T1j%%z;1dNuR`5xJA1C-xg0B*Mvf#%HK1J{r!L<|gYQd*Uc&p&k1YaZgbivmO zUT*~1dY?SZkQaWz8w6h`c%$I!1)nMS2Ek_u-X{2L!8Zy%NAOL8&lS8~@Ogr7rjERl zECCZ9XN+Dw$DMhQvRs>)h8HdMTLPVM|6lI!>22%m=&O0k9_TPnqvkw%9t`!mAKDh#S{a2|| zcH5h6>hSMaV0Ss{uQ@@u2|7YuaDe!JC8edxKqWcpH|APka9*L;`u#~yb zQ|K6HD)WK?x$3|%g*faS*5XT|p3r?`BA(C{Y#Dn%%tkG9a2KV&r^PGxY>s80OeB!2 zI47v5pSO$iCLsVDV(5H*S-H0Ed5^mEH})?wCo?B11T72N*7UUYwE270ThFIuWrsUn zpH}bHQq5FlzF=2GJrcv_f^XTKjoMtW}J|Iu7f$(s$e1NMJ17mQGQUa}`TR+wt( z4UUD{eR9RiP*umr<*|Y-KFs6*^>#xtoVX*jGo4vwr;)PQ84dXLuC`V8D|TtgD^AhZ z4mi1A1+@%Nls!s(PDB0VXuB4RmE4FlUP$|D{V+iuY&gTfl<$m^He8Xlbd`=70Ks2R z5Pk0pW(2Z_>_o?H%m^MS2;X%kSbjL^1SG}&KQ_0poe5!UGT!QRhz>C?C+w*JHAQ4E z?$@7&L#W+PRE?&QDf*o z(N2h_!yPtAw@_XCs$DiozlLzZFiNQv(e8yyS-kUtgaJ>x^stI{lzOKP{q@kVLuY~ zpe`vKf3i>(%7&9wKNMaR>maXA2`>)rVpr&0Y&dP;?k?Pzbgn~Gs1l>AEWT=Rb<2x* z;J_nI``m|P1~S#A*X(IQePux!dIH^800K_Lu~8q+SNJTRh>T4b?d1aL5qEsSVXlZ` z2?)3ml!||c%^>VHWA;SU?Z^!78iu*8Ngj8XB^X^n9ODR-%djC1JTGxu0LULEaSqTJ zO*^;@0KRyj+k;w%NsI>SO+MYa?)k20iACZT}xNW~AD<0wBz+B-^$sqw_|zSG)yD2vs7p z5Ub(2cOsbju#TWraG!#pjBp%}C()Y6fp5Uy5Bv@)q8T-lM8=4rgT+`9=@K$B3`4|B zg3KXsM`wnfgu#{}Q9dw4W}7y-bvM~&$0MM8q#DYr3=V3?(8CE0B7CIWctRU0jT$EX zPrpNCH%x+tYWXEt5-lFG|4`}6B6Ja0A)?li!axqVAPkQ!>Cw0#z2Oo=+m^t=>4A#F zLuq>DNpK#Qz!gOMmuYtgYzfnW7yTuN51GHim`!dB^&4k<<3brIrVfN70f;-ienDb( zic^+kjki#dIQ%2kGBQbIshP1j(wNQ!v`Pf+2%VsIxL!^-^t;IfHi`eQ=;TOb!WN>{;|yFivIB0wU(C z4!M{Ru^_C9u<%(}g2IWRhxNn!Cg{P22{6o`!FwSDXKNyw$O8B#e`luA;XxoCgIs`N z9vo%t$b|PIybp1QBwTOdlr2V&da6i6)^xFx`MtP(m_(ho@-v6_1l?0-cqcJ(D1j#clQkRPa3* zq_@9qU$4skXji+$K}5~^qh0F4L@?-7UI%@mQmY&#j3B$)$5Q|mt%O!kbxKKE=JGfT_)~CgXConH3KwC#ZUH9(+ zc}K~O$e6ZtIK~FE)(&DeU7FCvU=Nm!G3eaVvlbt#TF1}{>cS7~95;0e7^UT?>AyRx z-Q|qfqkF^q6!62g1k`~K?ApOo@d~moxZtwIix;#sEN-0H;$6)^Rz}~bwGw&bLRxO! zWpS%YyD;!>0l83XFZOWloYgTUSy@CE9jcxM~*30i~7`SAWcNAp9D-yS*;D_rT;1`*Wn^dyQWc+ZB z5>NcuxWgb92g!=VA$j4y8MvbLyK$z^#D|5l9T{dyvYCqL`M6#e`*3RihxW`NxTQtP zLjDLWa?CEN@nU|uEvhDZTC56}~n8> z)b?De-uu`d;P}$T4aXu?@`-(YrKpi{kT{N>%UvDln9+wg8^lUV@ zQgumi&;T4Y{O#xVIR#gdtT?;%hbQ7v#U*&}3p*QbD^mEtKikI^uyCD9E)nlPmGu`p z1FRu86ZJEXp@xyd1!mn!T>CwbQT z=Jq!Bw4LDZnI7)DFYS|SPiFNwH}%&{;;PTEbD5{i)?4HH00){cA$Kl*utsa4;XK({t`35Q9qE{u z#RL}QEa*=C9T^*9in*fHq|gWX8W885lEv*=F4Cc($BV?Vv;)&8#h|P}c?b8@_saxf zSIF;N2tfz?o`{4eoSmSw0hu#VpZ9@=!(5>JL%YZQyp+x%BS8}i9|%IaM57cLb|=aC zXc`VEmq>W{L>1ct83)2PPNhR{m!|oWf?_yGjNBP1*J2-}F~l}jPC>rSaDfi{Xzu|E|P3laR7;1U8!a|YAIWCdCMSMaTf0EaBaGDVNLflk(V z&;~k0CVd1u5pT#%qlW-M5Qed=wFj5=c)8MfWfhg?fCR#O>}z?jHmOoRVaU|IS0Ys} zEts+eiA8QO78h9v)$g62kppHz?mCE=>r{#58T9{#mY>nIy#K$VWfEBU)FVk3#uiP~ zphnr=1QkHr#$|=j$)5-5!gn0hi>S0hQ)87@K!ZU<$l-AR2O$Yz@>~mO3@Sf#6KJnm zu?79=*<~E8)#@8mHw7US%jqF~yE~|oIu@>O(1#jv7zoaEFlCW+b)g_#Exv zuf^R1AafXOFn{lu+?jpDRJTLfcQv`MJ__h}CV{DWqjZVAtb9#V~ds~j&P~OZ0O?F0%{f)Ab$ceI(}t^sPvNe) z>f00lr#U9l&LJ~P_6s<(L_WqH<01g+>zV1SA|m3})}9V6sV`wwS^;VX9yaUnrk1bw z5Kxv>7j394NSA5W-waDspCouZ1^YO;CL{XclWRbtXG|f}H{jQMKfpn=?5C)LHi8x+Di~MRs)PcvU(`dQ-h;* z2WeYz-uJ9xOq^ygcf;rNpei+hTvPE-iD}C4ZQ>wa&T(cF=(8}6_k2Q2{tz<#9C#~SJU?mD!|Pq zXV{)WYh_0X7MO4&M5B9-6^SwH{^}oKlq~>KN4Xf=zb&9?K!nM-7AcR%b7tPhtbGGFSCM-BK$(Np5D^n=h54`&jID?p!Fx2Td(}b?N3z&&VLS0mHSa7atAL<~asI z2!c@vM(dfFMOY5Rd<^>wWgr^Xg(5N0ptwL2XVcP~-K~~}x3PdX`OnDLe^0qY& zylGsu+(Ci{zXuG;u~kSWzlw6y%ky7?pbm(LrTGj72P=rKEI!xdgxK19970Cie zGvyFCYQY*Wk%i{4EP^<*>OjOu9%w?I2!pUEV%cOX^kx!mo!I3l;I0K5Dh7T^joAIl zk9)^z;bI>c*tBU9CUKptR05?Fkp>au^CPrG;-3UyPK#9>E74)~Y%BZ!rkeQH#`mh{ zA=T_o#PWSNnvES5JtXXt|Dop~K}5UtzwEk0tAy&HN(ZgPDVPF_aC9rO=2E_u`@a@- zmL1zhH_M>UzpAVk-+;z`e;K~Pfv*<$V#2Si+PEbRskj)%o7VLC+Vc>KLw-L7{8Vwf8mi{zj{2!Q-Q;A;!1wWZxhlKZYlFO)+V6cT-P<5 zw_%Mba#Y|B-LkNasMxH=rJ!}NlFV|C=IS^GQfkbsd&wthh z`_upK)q=pyV)T#RVG(sNrZNZyq?daOlzq5+F(gtshkG2T-fe_$=nqQ^v5P_=W5B~0 z`XF`-H6PN~g&eGMi6F~ng|9C~d`*+!Q=%}M-5U?4N16rWBtvjr{09#WXTE2MX9Gzj zEdM>ynpzr+(Tldb%6R^mDPl@iOxWXi_UnQyE+wsad*~fjgP4LsiY9oG>a>o8ut0(u z`A19coGTqi;+KQKVXp{$j3wSRxkzkrRF@*BscUhUUY?wz#wQg$_tZ^cDbhAs6Q%wy zGi(>Z4Foq5+(Z!PAnNwMg^;$s*9$#`W+hFlakfC4gG24`HJNZv??ws22|y08T?LSQ0^$E_~k6lRb|Z_ZIZ+EYQdz0o3KT{g9r~jjMK= z+8hDH0XI{)ogo)8L?~vc5v$GC)lF7;Nu)n_ONoT zZ^U}dZ57n87>$EBg>3V1KUof}59t1l<0RRNqwB5SD24Eg$tqJR2U_HgRB6d9-IDP2 zF8AV778A_oZDY9#HLj`^)eash=>PbB)zdQC&y&0B)#7qbN%m~cxETZs3FZ^bRi~DF zUd<-c*QE9<(23sd$W`3~J$W;Q*!TfX;hy4J1m_`b)!56(FA~JKc~ruT=jQ6y13k6D zR>YKC{2jjDt!;q~`aW(7f)xAY}7$6)n9a@AR0ILGRwAMzm2o14mLp8-{M~9b6SC#3?ml{LvH-5$&@C# zXTqWUza_8F4(9sol0~v}2RYAJ!}UVe33Rbo-DcrYzKQ4E$WawG8Ao+^>wSSQgzyfL z2wvoi9|Oc|O{(RhL3ug-488Z&up;xzYENFt1LWe>$e!!_030?wXh{3Mt@d2!!o5E@ zS(w+iZ>Z-DGsx=JFom3Y@Jc1cawn`f%7wMuGm2FcIu){&W<@Es-}xaqzsu}zA&@P` zn~8B*fI?gek8RA9HhgsXHU{6zU>iWlS1VI~b=?|At{R^1u+_1{Jq1DeUhapC{xHEq zOhev}Ti;=?Zr#!zkc2g2gDGbeW~&Q$kJv{9oL1hS5%dx4Bamq&b-s^}vVI;maWe7d z67~cO_C7-Jyh<41dC>{{<;6?&A|9c(wMLgWWRG*uP z+iFL8=BQJuYO>U%>Y8LVJ|{Cv?Wo3?)*Yif@99t3p3iE%P4Gtm*$6#)(Ohm=dM{#V zh+r_w9!@~>X#7cGKF%cA#CY=M=XO3`&c`bVt|Yjc;2MH!2|5`i*iCpHpRXtQDZwrR zZjX3xAh?m>CW74rHxt}Ja4*3=f(Hm5BlrculLXHZ{D$Bymhle3@A>!#0`@t+@dJ@4 zZuEY|HwXCUMfFAyAFsM{j3>=4T-Q>2#&{ady=uwzWyh;!V?B9Azh!K)e>qbi%rxdf znvtKLoh{@p1bPQEeT8vf(_bW(uleX}e8(X8Vhc0ybDlq_bXrNKnmf)jF*`MU5TP0e zmJ@JH*-p9*XO(|4&NHYW72j=6m;Z+)W#WKBM$$O^Jvq%xQ}vtba@6PJJgJwC_e@Z? zE+3ZUz(=08E=?U20cAxaeN+=-c1yn;+4I*hQDpCDmX=+K5 zIA7GQ^Q}|nQFfjBYJw*xp`29Waqx3;Yh0XfH>n*HJ%fX=K5(B4%cwTJz@{1Ae!_Tg zJq$bEVmTAfSgy9P*zjYw7IM)pC2}hcg2A}4hoLuLWU99`)HlqT*`jxTr3zQ`{Xhb8 zwi-2MP(hNayWL(M9Es;!vAXw?*&0~z`Tc@aefv!kLb$>;;MZG;f>2wKO+G|t-2g)D zfc>Xt#3En=EY?o$!=+l<#VFiR)&5XTSpmdYtkzgov8aMBDIDM*x&S`tM|rX`M5>mn z3$<;_Ex|kuhHN6{E?x%4o?1~E&Ge%WGg3rGTi zG-0&pui|JQoH#A+-~rQL5oaOZ+X!;h>ytgbi^#V3a_q(c(PO7a4$`OOatWS zK>?jb7+q)d|1@}jEYf%W=+#NxF~u`k-8wooy>3?HEN=?iMNa1BaVjsK!tzThUr4KE z0U3#{g26*_WA`)+_S%T?W7ew(iQM>fyuOd!V?{Bi+X+^fs9u@s31+Y};!f6wr;D4p zzmlj9O!JI!m$US%<&u?hw)!>Z&MFzErt;VVJNWSWWFzLwOu@N>ugO_!iMa6NU!m@^ z(8hqF_B>gg8T5&!BsW+Jy>sIWpOA$K2KFXUQW%lzy?AF6$O}R%_N(A`Cm%-Q_8+DO z_bk>#(?JP~%ykOB;Y^@8!J2`KL7@gR2+EUN0!-C?EWWQo^^oDvk|ed+{e+<{iSmVS z79<8*_#C1hEwEdlHqgwlyC=pF@eI_@;&mPOtnC=F_ zTW}pF?zuz>xvVn_#3iRtOv52+{S40tn~X%?Q>(6=;kkJ!Wj#&njcXd(JA3`US?#Us zy=fQ}Ef9k}gl~Zq#YhCnVumeaN;09A#u+V3>X*%F@lq&O*WGR9s~Z|TN1IB0)8Hvh zl&zSCEj_BV(KBsf5_2XEdeaFw`XUxC>uK%i<);m`Ct7SzM>dul*YF;4vA)I6Nwurd zb3ztr@m*375&6P^qd*Ov=_w032bgP}2+P7R9Y3L_9)zG(;LYF`U^?h5;hVzp85%{v z%EX)yCLhoRz6*r&3p%kF7m&E~@1O!51okEL(fJNkaGZC80b=`5_7Z}za?s=p!W08O zSRK;RLIEZR6&w}ko$wY0gC7^e0R;TlF+l#rqF^6%1$ZSV0qFM!C|C}WBPVp?MtD(d z0C(0*7VekWrtMsYI2o+dkZj3t}eKa>SizL z{uUODZ=stt;A@t%wf_Zpf7e=EaX&iJN}B&7tqj77p!0$~4>mlfwx;}7t!3r)yp46c zj9FKrRICYI!YSR!#|%RrF`Tf=1hRrWF~X@9<`H_3VCBc>=VX%bdRqiy+JHx3*%woyFe+_-A60Y7Y9uEpc0u-jr-!*(cK!cZoca?y}<2@c*| zf(v#};7whPtMJt~{RMh70>&L|>wu_}>81dt0}i9}(ryCNP&sLIxJjULFgEd^W>Ya{ zpw~=x#zuHEz;9napl7-#VE5rEl>8K~_Y69Cx2?`e&myLP009SNHXd!Ct8dth3=7Dp zN!B#IYWI?Ptl84m?yK9}x;6mbVe|;xDyz86`*l5?C&EC|rKZpJ{NebKY6c>5 zoXv)eM;mU0KZyccK+fVuytdwTa5d3Oy@hAod(y4u!mYWIVI^W$T!zEJ6vIiut$ zfSWDFJj9zm#KT4S;Zukx?>G6k_X>iGJiAom98XJdG2VHvi$vJk+O7o-Z!xQUAF8K6 zWme7@T-(6u@X@xxd^?O4rMMw-2Hj$W*V&Pfg{^_L8${h+(Auj%#n&tSv`%u8RO;h7 zo>vwYA*USlYVV0i%Ui6?m|>PUcBNE+hD zV%Sdg!d%Zk%A)P^Riq5eq z>Wh?=(OHyCWD&ykF6_Cvz8Z(>de+|T#*IG4nMraiQeE(Dj;;2)Q*vr0z6aTa<8yFh z(v37vXQQ6K(q8RejZDrtG?Qw{gv&`JleW$Nra6R5D7j!gA!r&V6#{PjuWyz(bRDlKD9Cqr%?2z`r;GY zHylZ#At81fb2PNhK+3~HsnTRw^4kL<*EDsv%haS@x5MY}Si4=des25f8aDXXZkpQ>@UQP_3v5>$ z2N*vv4o*0oWSfarx|uKgHt7gSR9`F~kU5E)lUTaY#UKf6ROB=XH7t@#=~}9K@vnw? z#1Vlg9PzXkB&|hiyPL(v4L=E=B+!6g??})aisBL^`mVP3a=peH29qwv9jlqFr?|pN zb9lr=tEuuK8i+v_V#+X4kt9f&S_Ep9`TIivbIld5S4MIew!78VVLlaO49OxiCxr}5G zq!bJ>o-xr_WFa!!Y1q?1(P%F|c#Bop1~IZf7YXszWB?VJv_-3w^)nU(!%C$lD&djj zM0%|f^6KE@S^^BQ;oVFi^PTJso=Uisk5gXLb2Hv*@mxw+Qtzdsx={Emd|In_gWsp` zn3aVEgg;-rGGSxw)D{IHkU^{`S+{(+)CcB-GGSgZyj*F8i3pb=-NfSc2oD@ZjqXko zQZ*0*%LKL6WGowLV8fZTUpum#nQ%iI;3&cZQiQMOeQ{HI=F%mIy&gOTXU-agUMO}> zkexl8OoRD=E-97aeLN5%X%2D|FjNX7z)|TglV5Xpy3xEt?fE(CWUtDb4a2f zQa99M#$deh7V+^If`!Ks9#0^Xi_7$(Q%a^8Y1g}rZ$WUlM3cZl3OSLO(8^Yadh-Uy z9J!n(=uJX6n1s+5SQ7=;s(N?)c3rpE$mt}#yOWj?% z3aGJH5J8Cwc(Gy>QBa8p2Id+bHk-ISUS4#zc{Qsx;dt~U7Irbynv8TZYW>Qc7 z3)Hc~o^O2(-Y<8oupgHu>31g@XH#&Ky-3n)Hrb1#2c3=lFT1Xbee^_&g?}#8JB7(~ z=)H7w_4Ik?{0IeIaf1B;7ma=`Hlde~Iaet`gvGMqA>LXPhYfam>f&2u-Qxx%);-&Z z8X^)_;8l5Mw2S2)xdVYhfG`I%$%M5-i1owy^bXlq#bqIl#S@94g*)u;Yw%cIex7~1_B6e49@IBe zLkrHgC+J9BaiRT8ZC~j73+)T|(fphJLM?_q|C@b-_D-nv68oGeq~3FdeY!R_6mzBh z1J3mMRrZD2ays;CdzUsObobTvcdfP-RA+9b*(C+Zbk|P%7;S6l>zz1NLH2Ps*h{s$ z=z19Fxml{MI-BOSijUZ<)u>hZu`0RB|JEd94w`T`|R0NbDupmQHE>t`cu?VcW_L9ecn1vA9IR5npnFUvZF33;$^!kK29px5c^1 zbj?5QRa#5vi+|b|;Rb7H)>C#}OPB)`qQtKDxXGczp0+<54VNrb`htBiR13DgVBe-K zqpTP0=R5k_Wu|KM(2Mr_v@xL*U$O(4E~8gpu@_(r^jD!Dd{(IIRr}4+c+7v({=K#{ zCAi-7NUPeqG8k&c`BOMdwP@ zV`f)Iq76WktdNmQ_IYx+KF@MPfs-!AX6k7rxS76pF!V!o< zy;0TH0+OKqN0fPDS*DgNr)nb0N7_)U^sO>ZRBrSU>kA#Q!%da_>!Z8O2P7Yl3 z*yr{s0IuT;`_gKGy1*;RsNKJGPfTD6J_pN_U*fv-yE&$7=0tDz!P* zYjZMuq9?cpSu_GsmC-NL z|KGIB?N4Fw#I#roipsnb*ErOr$}A$1S-{XwbEq!yg8g85y>^n z46y?+>!;qcV>Eo5rZyX-;dB}@P)oql0pmuT3Ho!$VDx8z);FHBEaaG#;A6e+oIWvZ zn))EO|I=K_nrB%X19x(d@82PuZ~uSjP2rz)XTR2BlDGOvt4YWmkuMxSi^y4^4QFZS zRBKS=xcwIsIjPX%=*U6_;Ey6&Sd);MjFWv>>w$=ywFd{ucWHD=O+tF_U`sPJ0Wb{s z4jZ&JEV2g-hx8pG6sx)<3A-=Ot5}5FZ-|6_ruDs(hT(~!T^g2$!+Z`Go}xTn@%%s; zxDSbl*HR#Eu)>MzAj;S;W7uL2&8STXv<#IZhlRgYrFz4p$8cs2AV>n+%`e0hUnk}a zryeqpq*{m!u*s)L(UE=a6tK6B3_V+$Fkjb3QIVOjC*-V8Xw}nwQB1BoG(T?H^JRGT zlm?yZ)XsaHA@o)=__>FyEMUPz$sT)I**+N;{Wh5;0Ac2 zO-PMmDbB(3iQq(A`vB)N`bzU1SX!6~c538mN=S)fxtkRCn~dsEa_z!!Mpkn@c)d7; zVYd2m@+?aj2O(9LP0wNz<_oJ#}g!kUPcrvWpJ2i0gA(R3V9$$a3}>!n;r|a zWg4K(qJikP(bDS^inCZ~c3AFVg@ub6%ZnQpOE|Q6?BYR1hZPm3&?na?T+Y78J$5F~ zSC+T6L6AXvZb(=j&z$B;B^=*+W5V${empyL8w@9e|L=?OUn~DoLX&qT)C?EK==oEB zdX~<98@Q4?SC-`+MRmvIkD`T%x$e-EcM^=!*v){%cYh6jLd!hPTHz?Fa9;kPYL(tW{%J;ZGZs`yZ{tXZecYaQC-2LUD$y8 zptio$7|WKh@{f(mpDaoN8_=E}n@YbL0EYMgBw1ILnq;O9K)yPWT6nAPhh}E6g}T6UI6Jqs5DO6LNx93zZ%3nnE?@ zxk*~|_DumV-SBuY&L`}8bu;@9Q)1|rHDC{$x;E0L*MqgxxhD`s{yEOLY-WXu@e4~L z<-3a7S+i$pl2pIzt!T& zQR{4@5oOLYTQq;+pd-qhyR-%xQtnKHb9-&9a~v%xcluK0Y^18Gt-HnK2AEuwY0%MY zp&##mH8^#kfqWieNySg3LNY;I2(3vJHN{y-kG-4frn<+1NmKqe=mNA@2)_j_Wf7Ijce+JwFe6|ul1zcWxVc>o{-C3lqra(0$`hR^O*3rbc;7_M6W-RV0 z1E#~vSm^jVXYT*a=wuh6 zu-mvr%v}p!Oq8jg5~rnS7RGKrV^BV|&p}hS6bF;3Zj#-$|Kfp?(ECvdbZmDp+Rsyy zrNfEV)Y+-E1EeS8$>UFn`jmR-IWm+$%-E8x1l;YZ7mL5h+lgL<*EHmHH&eTBSY-rAwtgi39Uw z#`g_Sx=fJ>lrGU4I5pC2wVy^MQ;Fu9O4FlUi{k|ei|Hl0Cd$xb>-0|R@X|c zh<0s;r`N2n{BiVDv}+Fiv)yjjv6zZ%uFcv=+G%s$uS4}~ZH%iLZeL@UII}ZE$XwCZ z($rqx(*>P$CH-gNvFW6*Vq6_O28gF;qrS;HvcGvUE`78;7wLVrehri+$OFPY6j^%N1 zkTR75qTqhUwxTmH(n85M^OcM_JLZ zZmW(FEta+AAdt%ycNv)h-y@$7gevx9WSEc7!3RfHsT#XB4ys&;Mrs3hbEk3(^SX;n zn}8~s?gP~tNu-uvnVXy`Q!fR1)t)SqdK4bb(FkZ_l53-X1Y#^~?+zm1Gc2nm24`;` zEn4TBfC=HxD}>{9!_;-WpimVbD^ZSvPIpjWofo4D`_14lIk*SvN07>hS!xb zT(-gL@B$V6z6$7hK<}nMjR7Lo(Bv$nVijriwkn<_i8h(zNufKuuH&^_fmSTn711hw zoWTK?VtT1*J&;KH=>dmZS)@`;;deE3rq6YTHiL50T+dD!SY+~{1U%c-`jVx^-BQ5M z=NJ30Dl>8o9h>eNp>3pF(_PKEjB1p)QVJ2U@K~xe8O8)^x_NNq@}mq_l6D$hli_+= zE2ASaT}2>GFVA!pDjeda=Q3TRokCm7O&MOq>UHqvT(4l{`5j%WyE|dmks%S$ z5}qMpJ+)K$gRLB##(`=I$4=+qILaLCN-N&R@iRHt&Vf{S0%9^-ME680IEP@%e$t}(s50wrffM^_iF|NB`s+|=W5?e;52hyCD_ zuE1K{py_X`EI1L1`iYB|d!4D#Vzy)rvsa#gYds-z7j18_fR zEiQE>!wo@KscSBs9nxL)XScZ>~4n^0&t6qm`9)y${YN4RG7Ek(4l0OyH2M!HIIa`fm( zS7(|aZh_SyoS(~9#6udHqg1`{@vir>r}w|OoeRH% z11Up&b|An`o8SV67rK0cD@Fm#6zneTlpSMW%}4=uE^jLRYocqiZ8^thlW!8J(0Dp? zl514OFeJ%oURR5vIe7~9o&C!UUdrWurxxr;a^_TJ2<$I z10H>~<}TwH&v^5SVh*q3;A#$TD@Rzv zVL^{4G`if?scT2lRTZwM?T3ozX9p<1$#mRQSAqVGg|40Inx~c0#7b9M3Y48i&X3~< zoC8AR8|T^`{3=uV-it`*41I=Y8s*plhYtW0(|kC==uysspacy@4QgVr*oHGhKNp|c zC&=ex=0MmY4o;8xP%&uf0ndiaIE~<=acEjXPZ|Aflt zC`FVw4Xa~ND1Vv@hgyR}>!-WQw9t#yuD@vD?rLVZzKRZN3DzK0&2%lGvzx8Sv~;p{ z;yE=g_X)FHx6MjS-#C~smObZQdHm5&fVjtxmsi*WOews;RP?1M

fywH&2sW; zWpbnfzwUxiVX}LiuI143RCkX4a4ema>Yj(kH&Wf1S{?nI>RvHuiU{T>S+$KYgbihS zIEV$l1NSXnU`68qCmFbCnMHfN?!j6%H5u+9pnMmArf0!4JZ2m2pyucFL%adeikOHo zht?p><>875q^3dnh<4-BTM_C2OP|9d*y+R|qUapUXsGh9J<_JF?X|I;b1pZHuJcK` zYklq^S$M~GxpRM~c+TV6|NHdF@AV^Xbh_bA*MfAAtQnD6`>M+SgQ}vXD*7_bU7;1w z+6;FQHKw~0`5Fhh!z#fz-oo5x?T{i1Oh&Z(aI-1=YEa)RSg^ol1ZKhT3O5g6be}o3 zL`#o9e0>3NlmzqR8`>;ASRK$R4TfJ~9SF;Yb40iDKamV|Gc1-I&H!WIqD7o1$4FlI z;_{-DwJor*4(}ib=E^@X*L*IM2L~6hhFDT?)j?W`#nM+joO*c=2YMbIInq%W>JkRW zpdv_iN>L};KUA4ecPV{Tj4kw?F^o9d#Nk=$VTQsS3^>tKfU$HKN(T~RZ4#?GIRh8Urglcr;!Jl&FVv#Mpa<|se}?`~ zfsyw6bnVUYeFguIwT>C64ui2GirO;W3F%m1zt;%zXSs``#-STDJIn0}jF+tFDhy3R zX(knAguA6$J%N76a%Tt8?*kj(-qjD4f#N3qNpX{;IEazbvfX2AC$rAa0JOy=f}BvU z&9V0ZrcCmP@{YXX3s~X7DCbv_*v!0rMd;FO_ZfPqF6eI6qJ^BIy|di&Lato*(Ax0O+deZbl50!nWdDG2< zRdg7CP(hnEr+es`!i;GDXiiv;K*Vj(-e7^Y+=UTxp^0XXaJOkwLidbt-|UGK?rx4b zw-OtIduFs_D1XQ#U(hV2r)Ie~XeFU(HSRRsA!3B8@|pFO-MMtpS8xP=T%CK>6zQ^b z9v@lEG7gwHlI(S>aL5$V+5G_`4w-v`3w-q0;@pwCS$)pFsAPw5fo2WYI+on45|T5dM~8Q`whOpKNHMi?%G_y< z!_0BC#&j1(F`(%+({0c$(>*`uVg7gl2TWPX=i(@s_bl^14o1`9diTwVOmj)MDx{s` zXEf$l{y>TKJ8&1s5$gH;`-0gq3;{qIaY0SD07MX6-|4PzHM}m0(eT6x(l?) zG;b-kraiQAsXMcf=bF%>E5m*Q!qQgZ!6K@odzQM(oCz3gA;*!~e1jZK?&~xobVrjr z*@{EUr<&bMJTjx=kk5=qAmS@(a=U|}_9gDk8k9-!=0Ofv{-pGbxKu^l&*^K;)E3Aq z#G1AUHAO>5rhFpj-NWCzImXSG%h5_dKC;2HR=Ou8O3|&HiH~#8J8b#MdFD4Kn#KZDBK-FexyoPyth3sf1qm`umFy93&u(BIqLS7^l% z_2UbHYt6bfmF+!U8|yI1db-UVZbq(ZiwxP5otUzxgg)tX!-irEP3&?HN%>8CP*w_k zex;sl6L3tX9bN8h4B_ov?t+|yS30+yZ@X2mX@Vs04K+LFb>pLFL+iWU6SdrdI^O5b zF>n=I6;T|$)Z;#0f7eFY8{K|7W}W*g+hlHf84X$QK74$C5lRKDtD~o5xpItf@Zz|h za{hjbw!N&Yf`+bhCsOWT+*2PC8jp1ATHR>QKZXOrM>4r&3P_dh{DL_)8N=|>0D6?_`50SCAR}S5>nOL^CY)9| zJ$0139pv-GquozN+3L8gLP|W&?bQyY!sD=Eyu?Y5(&FRX!IT45y=)S%(^<#44^NRn z5eaQ%MV`$-9pBN4&F*pV8F0yF_s!b;(A+H;DJ?Iw=L9$IRZXV7CxS}eLqDGA_UHYD zVg5Wp<^!BP&EaUg@Ykz;}xj^Nlpr@Q&_I1XfW^UZ+Y zjGiUEuaP1qoo+7Y{5WfXCV#|aP21{rYR`p=wqgcp-_VfL+@~dqD1-N3*@=4+Y3;L4 z4^4{m)KT&2?#`K0_?7I`GTRQ=$1Pli#(|Xs!Hlo+7q4-!mjmgT^l1~7t{-HK9m+XN zIVjPw<$AS_86Yl2L<%O21I}= zVb6M;jRq*y3Os;v^zqcGu^HAqC`{k?W&(?%e(G8IUK(3UH91uv8+UM z*33OWQ1w^td{Lhf9h~gHCXM2&8u6hIzH(1FP0or>x^Vt#8h%_-z9=m&IxcDFQV(k> z-SyGLtIxnTz&{VR>ZX%Rl4EZEG9jKddRT6tyB$<}f_DhjhJ0P258qC@Fy3>8rD3qv ze5Ivfh}Qgf9DHicSJS!slB(02Z?iOqEX}uDn(weQ|HIOJr)6b~rD2@be3#{%&yoVM zD;<`G@mlkvl>b@MXls4pbDlR^iYJ`A4D5|1a=C=?Q50+myACRF&|qNqH& zy~Oj5OrqEB{qiNcywsD=ljy`JOFj4{hn_4=IpaB*CGpmp8MH!ARgnCvo~j=ny9Kl4 zgI}h8N@uqr{V`07-f8JqhL)~L?M#nlDaEpHSFfR$PfE?TLKZ>4o|L*8mL-%j=hkj0v0TmHZc-Kl?Fi8|jr>HlisPx^|@Z)kJC7 zqT=14{i?hrGQ{^(c}JI@c!|>yy2P2VS`P)bdTl-rOTT*Nb}WLGN{qV3_AJP~tt2Ib zr!zDp2Gk!01B7Mxb!S^y{b4-$&y9+qrxWr9(W?^^aD4T5?>1aHTy0p|3^oeIcRV4@ zSnadS;aHSqb(*CuoozzNn`q1G3`<+4rGZ@m;=RqXI?K|Q&Gw+=IY#pPSvx_VHOuON zr2#BG@**CDbtro4orIu$h23(PolQhFWwyILY7t z;b=>5b3oEW^uvQf6r_XR(yVu_+Rp z-|k1raHR$lAkc5s8Y=L1s->lZi%CXoc>@ZoF43?_5X#+qaauH;bAz`{J1k_q(K|+i6B{khnM&p^q;-Yv z-R0e@X(!QzH+#3?UQo#`-f~^Llsa!ip%+j>$Q#hVvupFbt$GG9G2vDvajpza=QQ1@*Yl*LQn!HSG;L{fzv(=*4@zqf%xdyE&5sVH;*~tcC)+ zy;o_UP}}zWJ81KL-ZV%rFS^eQ8-BRtRHWLMw8p$iM8PaBO?cAVi#d1Klip6PCsh2Dw?N0^+-JN;gM)qk882+b zv{CwV-W$>Ee?Et~^!HHf^WInV;w20QA%5yP##9(Auv;v18Y`xk!y#Ag+$k{CHG6I? zF74M+$BW)Jn?PZ{;8srDecc;+=Oypw zR-6vJu*W;jb`;msN!u>88dUt6*Ne%%so0rJub*X)b*OVx7DtJm`C5I&ceRjROhF%pmWpp!n9$<;dQc*Tw;mWn zkQr^{$v{87;muQ{0l6&_ad87;Q1spd$vgXW;GYg-x%dX>I)3EqfP8=8)e2Et+GCyn7{M>(GaM=f)vG6pF8GDL?9u9K;zs}gTC)u?2dMW#V zo2zQ7;`;Y*7eW{ijIJ`TrP1IhuPU1Mt~awT zj5EUTBVNmAeKQ8w6V5}hd2xe8adE%-jH_T_q?abUMxq>}GNoT%n2lYnhIYQ^ogK|P zu!RP{@6GNN8+-*dwQ~ymu(Q?GB>p|xJ9_$je6YTcUvB02+aaazcHzsG4V}=)X=(Nc z*vRw>p;!YG<4a*8lX!U>WzNxhjcQB-?H&OQZ-65YJh2B_tI?>O4^zIRNi4bS@* zHDJ_v|AIuLhZ^7arVbZXq5tx$G*n<7N%0?mcxtCpKkypv4o(u9VH(HsEp%9}&u(<8LqIeDrfW_%a&?sf!vuW@u;@1;khcpB4;*iE3XxSh}A>P=bu3>~@ zHZ2_~kazz!ZL}_l|6dx1|=qFxx zY~HRH#EiURH{5*P5%dzaK@@@vZ2k&%>ljmjw5nhGHE<`2Qi{LeikbLN2M`Oe7!87)(C`+$&k{k4LxasHuXT{t7vcfO~gX17M zg=msaszTB1-^r<{E(V9ni7gXk+;0l)gCOQTtJa|ZYKW~CNELZ7Hl*qxQl~C<>S0?> zAnMeReuu_GOGC&}+->vmuKbSbkeUGCsRt$iE*1AGQ&8bK04E#j`46W-d{o3VfbfH- zff$sEoC&rlH50;_)lAqgvrL9w)%(cYzdISC&=K`gYU9bm1i&m+TGl`vQ>EqZ|i{Kwd^CZ za};qQg&Yh*5TOR$&1o!bQ2KQkXtgUyzOb%6IC3;r9%O&TgDCoOc@_!Cd4qQbo%Wd5 zMknp_dU~Jaec()f4Xn>NKS3*oJ!-Z{od908|F1p`h?uQ??U#DsvmUGag#XROn?u6o zz*d-)BY*WeM(zFIW&BQoC@52>2lsh@O>0Eklq1uz;*j3hSlul?DMnjEn?Co#gvEoLdkO~!D{C&j{)M*$ynMo!-ZcBeoNXNkkI?Wh zy&E-?uKUtkL@OrbIYTG^$9tr9s1zr%3K>@xSg6wFnCFE4dQ>Cvs4f8Tt}Y`p2bW|k zRyB2*>qK6muJ; zn+kw0sv0^Tz+AiW2UKwb{o@DkXSO4``Z3}vB!w3xRKJ(6QhF=-{7Ml?^wEzHC_NQA z{3q{NZH)9+x+)b9Kto`_-B)Lk{arRM;G!a$5I?uQxkKi~8&vU&_wVDLLIxozSBU=! ziB_qD(0_4xSQuyv2RzK`QHl>2depBFp;@Eo)L*@?+V19jN1fef3`yS~{-Rqxy=4Ow zC(PEfZ#LHJ@liBbGmcDCVBqiW;h-Ok=Iboh+n{Gg(G1<_iO45e?&ZwVEXlWwj=92! zqZwAit(QiHmROAmnsyDHA7z}Umqmp}M;obn9(D_h`8t9gFM`IZ=CI+n#>V>9t(|ie zSZGm<;m0yKD#qA`Bjbcvqem-|X)ePoAeU|qEJJCAjDU>KJh~yyD6~JswLQ$iIttth zcPOqKyod5EcWcMc?0Dlr+qZamUKBk$GB%z5_P!oXTYvTkXlFd6Q7i1mis{QA)HMB^u`GGks}IfsTV zHN13WvQd~aFpM%hY9i3=G{ciBO}U2a5kUDk_L;PQv`ujdl$B!m>^Jd?W)5yvOXh}$ zy>WdG-QN#gn_@JweNem4xL1p#U6&fk^oGw^{0CLrBdQK{q#2nS&hEFS8z<=*(d5lA zE>HZ7tK$}jC-(OH{uLf5S+6CTMx3@JG$zxC<>|!T$&#M(CnEk;7JwNzqQO*0U0KF) z+M3YUS;iSw?Rh#eXbgc>tznZ4PZYy|%F?;rLBpd5HM;QwZ-9Ob8bxk%H(n~m7pVX@ zLvxH_9zXV0*(y7iH`g__b|DAty3IR}wiRNQ?9DM;IGgx1$M{IIiOHaAXm6e|CO03S zsS;&0;uK==ADwC6TsZ5Yp0cSF}%#j@I=3oS;Nj-uaY@8+&QR*9ox1u65rLAN6 z>iX6rTA)cHUB_SUIyDV8j?%uM*9RLH>;5npwm#;Kq1T20nm!wSF~oRIyMmgMjWl|_ z*hov`Lmx#tNTd5l&b)?_N{qZTnU8|jqV{hLY)hVs`=PR80RcnLx6z{|#$r)|iok(= z&Dec6M&pBFhQr!jChf=$Jy>ekG+cZrzfrX&iM}0bz~dVOL7=0cmpITUK~G;%)i5KN z{ktt2%ilMvv3X;dk%DusuZJ0*>3Y0I?~O3-OswP#RS1+fseIZs(n!wT&Ha<%`3qvg zL7OcrafwZIb!1Rfdn$7Hds!CJ23bMeUa(KV1k0OiSFC`Q3p2>s`UkjgoOsw^w(8Af zpoMv(jH4W^i6&p7HrnO$Eh02JE+JfZ)5eZI z@>8XG-1rE{*M=v+>%#!~PsSP!?Rwff$rwyqCm6rbMdJ*E#*H^}v?^LM-dGSWb&x8R zVKJNA&o^<@jQpL_d0d^Uu@z07tn&G!)Dl81V>N9mJu=Z~{T~ZIC&w2}?UjZ-jHVqL`0O#E&6UPZMw-K_jraSI zX7Qm${vROC{0OAUwFtg;GNh*BQG_W~>!BZe$)QHN&BN&_bpN47kxdk9QbS)HY7EkF z?3OXpSl}1aVFCV*mwVNEMv{sJSr6wHW*VI}(>Pgc31!VPwrJ4Ix~v9MIx&w+73CQw zN3ef3K4utGBXoR@F&sd^jEjmKY~nyPZom^-OdO0_OlS(QD_e4HH8SYE zS|ih~lpznqW_bhaQTDJd{!Z|f5JF*mrEsu6+K6{otuJqDUD?hTdT)i?tvii|?KC{0 zL9>lxwBO)L9KFrHKj6uhl_=$J?=RoVz*gnc_oi_oln^)78^>#z=3V^ec?Kfq8MS4( zSOhnm!!?*(3m}n$sxV4|jA%lG;n3}|p+g(6%lB=g3lT`8xrWYbHVXW#!7FQRU1u}9CYZ$E%V^0NsTs)prB#O8*2xfFLt3=Y zOVO=H(5Lndqza0k(bCdswqW-L>r&Qgc%vHehTeKL-%DMshM6L?4383K1+Z!NI$Zl* zM6a|Omua_zjy~L29n}YX9<=2C87H&dJ+Pm> zPK_N#1~d=ud(yjvUhOavw10;_=rA_xQ9N3-`$5C2Rr3Bkgl_IKa&azy!9zw)+CG%Y zRB?C%9assUF(?e}bt>sL#udoO?qZnA?ih;?7`d@QT=Sot%)K|Cq|>_%|9lpam``!= zGzZUc@GJ)c!RI(8;|>JUhXXk6c@7pKkPW+Pg`DCu-V`d}rSPo4Cgrq)t;MATAfZ4U zt?M!VW&a$XskvK6bJiK#^o4PB`Wr?Sw33a%;BOYJH_p*oL!YfT;;h(vg-pp9Ya|Cm zXIzZn^dCl4O_dW0~jL_NzY#> z`6#1O(?bnM8T0g#b^L*7&x(fY27VL`(SeQQ7*10=1(j_z{PfE)hRyaXr^#{=p;cP$bdjZsP~ zkUJz{ivGIE*qe4I7cUz4lcXXJWa88*$R%tx#@Q4+Xx3)qJnhTS2b&FBoc^swpPvfM z@T*33c1K3a?{>09dzG%-YRrKu{*PM?oGJVVb;zbtS6yL#rBT}HMzif9uJ~cva=LMh zy?>N3zzN&1U=(bM9NeE2jGF8#b(Mz~f#6nJ-=F}znt9z~tE3%02NG=8A)`0S9!AM0d zf4LveLnIh!ZfoC%hjE`OIFMa;F~7>C|_1|ZQ! zFP&iw&-;qgt2kgpE)A~S(Afo*8&KD3Kl;u>xn~+x+6T1yOrs>@36v?E4mYl!a~wdf zhW0o;b*3>&@nMT7e!GzcbX>IEC`gp$B~i?Ye@Ge*$oml(Sh6`ul|_(0hOwC_^G^#{a! zqy&V9US^~iOv%fZIkz>u35(z&ixyvI%!GL4n#+t+^$B(wbGh-47+E5zBBw|t*A)<= z_0e}nUty$c?V)q8FdoxqGx|2`Ihcb$0e&t&&f|a`cN{d0m#rdtm@`EiP-g05@jf5F-Th!s-7Y=2=Cj1PQvg4_cO4y4ea7Fv;&0OOzt||(FozjYm)ps z4ZF6Be!boZ(5#)tE|_TP+jX5@wZkg4?gN`K;o!|^R?U#j_4k`W&z@1>p?hxgRui|v zQPtc}Dm)%STPA3I#48#zD{-K1#Rkeo7bgwiPE+Id=9V0AOD>|4ROcjHR}BxF_$@ zwwJ()E1EcQ9|~7=UYIy|`XS>vw}ng4IGD_{;7`d9KUp6!#+NYJU^3-lrgH2njh)07YW%XBQt>c z1=InCgWw<;qXDu_cB0><&>|4Oh}tt{T!mPYQIoA$M(u1=K*QFgCl69PPmn9@CutP< zwxXYG{2F5i8zIB?7&(-^$B40A%M(4DhU~$Zi3^)AG-}>s%y0Y~ms7-njQ0+Xi9na9 zS;X_xKUU%*+0au7k!aeb`7RN3DK#qKH0*!h}~tj8pTPIwJ0T-rf~-DFgNA%9}8 zQJ*S6VfaRfFfcs@$DZ=K5zwxq)7}7Y|HK(FarDpEjY2<9pD@qJ{rsJ84}Sx4)jRpy z>9#%i!hDrpd&3C)S$$qQ_Dv&Rdpz{lH;t=w*nJxDwlS_yI1t8N^_3Nk%ts6$1;JRH z3~s_p=e%tcO_46AqmKe4em8YNrQ#<9d-Q)Yw_0$B>@l1TSg*diw#M|4_6|_+MP$5V zm zcR;bB)BWcYC#!xMpF8aVoO$(FIs3;X>?MKryO)Q%E=2-qt=EQc6oy9@_#8-AR zMVv8?UySDB9-1 z84Z6x4CMVeF~Db%#h)9c7&^=^VJ=#5(lG^Q4?4NOBKTt7Z0qO7q>-zTq=91bKK z@K)yHyq*=jfL~xR^)YBWulL5pKz4z5Q$x*P7)QrC-r@Yn1Ao*G`t*C_Ol=+=`-Aaj zALp~;M`KyW3wSTE$}OBzE3c?5GMPgMbN}S({ zHiq;Gcpxfdh@JVfQD74RXg=NhvynZHp{IBu8^;8M_n~ES?V1_Sej1gbC;R4pAjA%t zVcQCdv-?ICw4`{w^;DP4ozCcU| z0~WWqWf?y6k~f+@-(*D7Yq~E^_qamu>%OD3sQZzL_O3LB`DGv?1!DYpF?v@h2Pj!| zdlb}PALUe$sT%gjqyp~0np)WhNWu($HHrfUS5FrGtoaP8i}uCm4M+^5`MtnTc9wr} znFoR@p5BP|CF$c_p|7HS{-`O!WHY(0?4_k}j1h6>`pG1{WgI=k<2&B=mRAulVds?8e+PD$ou z_luOmfT{LgS{U-b~$~S+K$lE zPG7Rt!sn!d`%9KLb*f!j2t)z>Xmnp>&+OyaoX#zp&4J0mF$^@JG6WM0Ok-xpgjoPD zB*JJPO;5zEx-;}jqVGv<0jc**QE(CHs!q(EG?0q35&-=0>f7j!4Xos`VOZKgj73&YyL-Tuv;{R3e zxU*I3Rp+mLa#^AHz~g7rpZYC%6a>n{rkPOU}KFC z0}F|yBh9pu3%8wgEitqWf3;z%Tc`z6XDamp_dUghcRf!&-C&nDZtr<`4 zK3^V;GoR)2U96`hhDN6OuD7KKTm<}5x{QXMzVrKrKzg1R@U?+Ur9_VZNYDL$D8~skecbult%AjwTUYtm2Ilkw$HMB3sH?;RbZhSolCvdQYgSR-C z$H5#9Hgj-12aO#3$iXih{KUa^91JK3UCoboav;;_dXDk7ZOY0PJpUO#%JSN2=|xmF ze!+%<-tUo*d1wV`3#TNMudvTTynn}8VmQms9Q&067A+|sS;-t*!oeU8glfG!%dRKCM6$c`J6&$*nA9*8FME6Jh_&oi@v8 zSbi&_Hz8?6c&YJ=8T_J_gE|fxI9SBNVH{XFODD&eSAZ|i282Q_UCGavb8s04S8yP- zl+K^*=Eo?Gy~!~_PH%B6nWwFX12+eD4tRQ-`Br-K?7~_a`k>d5B)Ir~fKjd^*lclL zdL-YM6PFaX*>$)h-H}0G=liCmWXEO4x#H>_g|3pg$*wVRiE&OxIn6Hc9oNh988eX^ zFpUG5@ONzisgIOF5-2JWL$65}yoKxiUMQuWq+ON#_ z4Lyz%Pvqcn4tQlLb>a?=@op;8xXKO7TRQnp4Yd{dRyt%Z<}+ArxUBoVjh!z-<~4bc zk1b1YdNdC{8zu&`l5ra&o;@@0|1h=bNSv;x(4~WXL$&{eo*(3Eohp_HV!s~NL6dLs zWs4;OIP}?ixR@`v^ZUPB>6@&y95Hv0k)8IhV#$AJZ;6Y(o0%rw!f5T37*FVsS!vBN z^0I5;gB$4LIrxY@IEe8M|Gx@GopYZaLu2Nq4VFxge$=4R>bYsTl1WOqVs2V&Og{UJ zxUQ^i+Nvse6~)gE091DLl;YQC9g-dHJbzf)A#=s_!qZ7xo+Rf@XbY#q{6i*etKFQ| z0Gb;`eN%Vr)pYAEsE2JzzIIDmcB9n)N$$AA$(o#ABt0%oPA~QpvaN-*jV&7<0)fH5 z1XK;HlvT~$rB&GjW>4y%N#x~^bUPueKq-Tq*iX*qApLpb!4E!?j%fc@^bmSKQ-3bEx$(^zP zpt3Xl%GQMH*p}`71)7*hssCWv7xd0q{t`Bka$?Ha{!q%hgXpeDzy5aNsW6Ig zD%Cz1$oC@0fSm{iXc>OpufmYAr-0r(!5(MBjR$xoqRV$g2YX=?BG%FdFDr4Dws>}{ z(gyPlxM_;Z#4WIohs$mQE{kB05H5>gR~4xPE{ovrDYh>a?uNoP8`x`TUn)Gdgj3-U z3brvFa^FNeO3>n}_)I5ew$jm@(#FQm-`JC%N8dgaNTLg$3cwKN!eCtSQ^?W+V*;9( zjnE~;T?Pvmjn2T^Ml)K4f4XIhm4=Lr@1$qo%qI_26;z^5&^3f$O3m54OPFw=#58n`|ZPJuO9Uw)`Ck)1C7c2vqqhW?MOHZH6 zzVIuUa!{|}TSS!z+o^JOxG}viGd!2@ML-+6TO;gHqw?|0oN_<2)`JI#Q5kRoslrUe z_9OmyfeCVJ?9&MoMs!w7PZKB5-DlYYz4C5qYnRZb%R4$ZN)e56)1h19E$!=DyE@uc zLu&uh4nOKV7>!Jt$X7KT?JZJrV+FE7Yd{FgM!Dg^be;OL9)&9#^^L4BuUr&3hI2_3 z>tM3HUG(Th6f>)KYURwvxivFtYUkI;;bvp__>mRc=wHtT=2FS?fufP3bs}wGm%w7W zSsK#cUv8*^9RpK!iY|OUa8z(6p1VsBSb)Q0!-ggd+@eUf!q^0U25DwY3jOEbw&6a3 zB$uGv$San22%c%!2eHWz-~~)OzizDW>F8=%O<&|X3TSAh!%2J79X_gUjEbg_KL?uP zxji7~x_UY&@UAU`u6QvpQ#l?=#~XMq`RT=gF_5)!DnQ#!y)VHx*vzs)apHXf6Aa8w zCtdic!|UmDqRb0gSy>oOpLQi@($h=RM^WO-fsAyXHI1O51rEpHp_`iudqEJxx+lgD z665=Y8V&n7&_a7&4kT(@=#tB!JO1VnTmiY}&X{;@2qj*SZ_tgigY)UUR|0k_tA@1b zGhAzIWtI|C@hG{fjR-IT793yJ;v0Y(qpqXX#WHTU@-U)VfIaI4iZzAY77={OIQFoE z6CM_sW3$(_bZrbno7{T>M>$W&t8n|_P>(j<5a*%$_XNtQ z_JP5YwIH_@cveziPhc^f^IE{|KaUHILSVu8F9)?^;fH>Vb0dB9b6~I!?c*+pr$6+P z-8r`7y4-3DP5v?9?VZJzqBsMVH&6_lj}UYT$&*|=#Dlu{7=sJJ^W~}?<|^`p3yt`A z0^ZMW$6Y)@13a`f7;y|RQ!nCkN7?KQaN1N3vKTjpPw?<8z*8E0HZjFFSZTuRffc>7u$6E7 z?quYh+YZkI9V^?Rx7+Mr9>xU>N?wmLyu9);3D6{-mHkc#q<4bvRC@F3nH?)v0@3it ze`)G!SEu2AJektzEW`@I0r8xbMJ1OmcGB860)9vZ&wL}0p!)@SPUNf+z)8IkGL@P1 z^jm=ucA+F|xa3-L{yWf|$vsg*kX*!M8nKQtZ$7xp06!TSbnU+b$x$r*q|=@VWL6He zP9V){BaEob9R4K8!E6pH5lC@O&CLS3rp``W%vN3$hEUwwfvat|BTx4jy8Z3I_+*)h zIue+s;Oe_KTIh`YpqKpb1mbaEz%x>o+h8^CFe`o7UHES4D4Km?9{d}$24iFSCG2>_ z(%L}KlP*wU=+`KKAQmQzXVR&`VA^4khIH^wvH7a^cog20{TEfvo?AXM?8S(OL(M)B z2`}Ksg&c^G&yQH&BEIBq*v;w3P4vTi0eA1~cpu*TQ!vSr`xc=U>HS@=$E;yIBS=J% z9WVtC)B*^g&ps@^9=VeY?1TOEa9~KcARylFvC|4raA8yIw1KL^ya!1ILh2~6tbhcp zmT=j))2nX9;vFo4Y_`ImE#FWU497)bgz;y;s(+_+7`I00e_nX6m_|SsI4|yMh7HB^ zcSd226kr3P7my{~WYSO6;E)21Q$_XV;~s?L`@Qh3(1C_~9e{I<2#oy$ zQ=*k8o?@3~^7t^PRMX*K)3m&+L-hAb*EhATYw@paUEk7vz?A9s9GF>UQ$ni#sT7_u zbGV{|Oc^nfEVlxL1Tb4V+u+|t_HgmorL;f>5E;*Dc`HN$WB2LYGeycMEcG6qyE712 zv=r=rxtM9Wm~n3YYfZ+5`V?!SGBLE@+_TfR{9uqe-Vdxu3Scr|957+9*ch5N`r-XR zW+vu~+8NZH^>Snb0SY1$lqf`|rNL}?Da5U5{=`9xKM0J06{*QXgELxc(HzCkG8R() zbOvCwoZm9$Q2ruTaLhm;czb!ry7nF=MLh@rBLPHp9|n#e@)JJn_9Ni_r=q`ZIHq;u zZ$QsvhgbODEu>IQp>O*aMgD9^E5g2@mOI%H(?F0HI(&fASX#}@4O{dwYIl*uWD(gKx29p?>p&b;;pj)@5J5(yG*nt#Cejk z@Qow;2ArzWg$sj*zFZH@a0IOy***)5=xrFxs~hdu z0(Jx*_cUQ)N_ZV_0kcxd_=6)u8F6p~*71Y~W9xWu_==Q6!u(eQEaSyW%1CC2qFP2- zT1Q*-7H|?#EyEFs<_HqUARfcEK=>^_&CH9BH}KNAA&?TM@Asx>5HWF zMZA3xUtc7hBSVonlOw2@tH_Rs2Q0$}UgYqLk;sw9kzt4wgtKxdiYyZv#xr{suN>3f zyF5KQjYnIFPGzO>A`=0-Swc8&7=b_A}iCGo7tO3tmr> z>{LM@Y$U`YLAfC3y$sz;W*|vRM!m06gu~>`?S}qO!UnibL;^NBWxD~M&4IJfcK?3@ zse?*kZV9gj>MK=w2kP4|e=p}p&*EVsOPYy>1z>}YA+WYV-XYzqI-&-+y-=D1Q(I^- zOyL0Y0X7}sZYXOvVaVVE^^c7=0T#-kxpH9+w-iWPiBF~bV3n1ni2+D%XqR!%6vM0# zxx$(nTTVlzSrWo-6XN&~oejs>ZjnlJAO^l)<{14PU-(f$=G9 zGgsGCQs*~;S;J)qC=4Q1h+go@is%)@*45I~+$O#)naK|$eERg8Kw3#2Crsx+$V;J@ z23&ZGs9p+O(c0c@HW0i|jf(SgcBZ2#`{$%VF$z!T(5?^Svlh%pvheRX6zb~f{!44m zDy5$*G@hKFW$@<^;DvXAG>!?iHx4m%jLo=0T3)lJX*IlLwztq*BV67X^H9!QL$`e& z*qqNtVik-pjzvTqE^67>fikT&9gGGXro-KtmQGDS1TvOrF<{f(U_O#zASWmxoOZ*A zPP~?i+ln#PB%Phi$3(}A@1uC6$IE_ZlfN8y>2T+$IS<0%!AIhcfx!lo(-_T21}`6m zJacH$j{ze&TKg@3M;m?&1T-t1_hTRzf<2&}Y%g$;pbik4Kv!a^53>g-p_2`us8m&j zq>7){L)05=Qm{9JWx|p=7=q>8NP}D5a2ksVf#ge{#*8!Wq%Rlvz#9V7ydCc`U!Q#t1wAq4x#3Zx7dO! z4mn`z$m#PRLoADKyx*D}V+x&FMPp)u+wwkP*yN)+hK&dRvy~gRcm`GtR?_52r%z*o zb@l)Qfd{5fl({oDm^j=Dz=!G4n!*X3rJVyg{FBX=ryh$l!qR4QK7DaNiK5%;J z&2@!obW=$oI5wJndVDe!#s|j*#AbvNmV=ULWDVW^LiwSdK3bihA#JNOYv1%_~AU@si;K1f{I~-AQ3*vn6OqdkM|9RuAQDElc z$mIy;1f(xhyO%58ofn?`$3oC4_;sHgI@A%25+<*Lj!y_?^@4K)7pClswe;DWYXKiF zhUZ#D_OltsT3LN5@qH0TUj&{BRc5$YQ<0>;NOE5!wJ&1yMc~X3nITDP$p|N{bTQYs z3Y!)nw*{vRyj-Ic%c+APKwOwj9fT?3!e;8&nGhESQ^&TCc)a?SnMR!ANjc0kf((^7 zGmXuOD(<%QPGJ5NUhd)f4*xusEmlhdth6U{hKA8>rIaIM*fcyxKr+DXJtE`!%)!GF zyH8Rkz@eT*Cic0#pVa5}9>&*|+xs%b0yC={Ks#E>d)eB0m>Dj&v{oQ4{P1K%gc+WQ zi15E05$2a8!ufJUIA4wk=gSe{d^sYVFGqy)<%n>;lMoTkw+xZ&S<(ti>r^}l%Z)}< zB3>0v=lC=*xzm}+Wdc^H3QSGb4^dPFlNU$9e`bB5g5O0}v^A|+*4#8{ zK4TO-D;3KCJ+-7LGuaB#pVL%;9PmsQ1%2NMItomb4}C0vJMcsP z`oVr#e0qw>pD*0+^NHclqyGH!Wci%cQU+Q*Nmb4a%b!%PzGi)vfv+d1uh|sbpM0&F z&WbSdwe);qxbpw{^TqppJ}KODHqrlI)xKoE&nNu%pXUnT8u$Br;)MNArDJK*H#UPV zKF$@l{fz?K)Xks>A%+Hy!6a%F0=@5qE()zx7*lX8&p46cHC959s;?AqNP{ zP((;B@)J}E`{qjO&O~yD;)$dseAuoI>0wzC4NDL{n`1b0S4K2pJCdJaTo}!SH%zS; z2`DfM@{q)S0SOX7&G)z^AuL%)V%ST4AY;Oxgz5dk0EIf9Phe}&Tr`|ys5AKg!`^#< zM_HwR!_PBGCcTl~$Yh?(JRu>W7b!wWLMMTtsfZyY0|X%*3{nQv727I^dUUN=acx+~ z)m<9iJg3+D+~+>`xo?=t z(D(l-2J5;%oEFNxc%}-FArmSuw|{vdP6pCYH@U7N5IEC>YLp+Y(K3kvYo@3oY*L2K zbyQG{?;^I2EUA9o1@FO(e7qw-n=@c$F(z1NF4{yz0E=0m)0c>?O$?l7(1f*nYJPOF0(XWX^pB$05GbyX9IaZ}`siusK90y*wbdGd;og!pWObS0YpqX#_j#kcd!rKxS z7O|>6hRmjm*D`Y4k%y&|>2(^t5&-74x8NBkZ=Ce&AXciq?Z|H?jO5i^T$*CN^H zIAlvgYm5~9YVhm+PEN47V}O^iU&s-BEpXgepyDuJ6}yhc0+^c;YbJ0mh<+)2{a1m(3unll&DFeY4vXr@6d~z%meBkD%U>cF65bWb( zG7$l3sq#IEkAx^xmZx*W%mafU2Xi-9GY*~b3(v{1(P~M)TYnbSn=REyZKhwK0i4!iBN0(}Ew1^VVS>$RmWYF||MzXx8i*pa76W&odA* zxav5QL6SLpvwD9t+hc+Q8ONH*Q~|C-%F9L4dxBDI{spSZHiQ zgRpi%F`%E9wxRkU9>Wb79BBXqA8A`#*Zvsh4USwfJwd;)4JC9FDdcG5K$$ue_I z_yNK#*Fn4#f?I0B`oN9)fPxbU^BS#g@kINvXSW4l*pii;iZh)&@3zsaUizuO+2OqnnwXJ#Gh8DjaRtdgt zUHeIpB-_x|;_q^G>#fx#xpFc4sNt!bm|=Poi{e+>a}%qls){gp#`Y+F8>jhmu*-tE!es(DJG(9pGwd_jkA1JucCutO^FZkH%FG z8j=&>U{T_s!z0C&5#?$Ias;CbG8eojC@(@%$+cP-+i9tb ze4`CH2o9ILN|7O?j4_6@bO%=JehZ1r`glI{WinDUfLPwnqt`3~*&`mJE1e*jz#@?Q zJ=r71sqJN{nSmZA3Nagx!6WK=NPpGV%|{>B)z=)0iGyzF(Gq*OI@ChHT5X*0@#L7h zflB25!0e9)kTkH;A+m5jKUBE&Xl6NkE5rt7G*+s%v~OOKmJ)_)sI@H=F4Who(9RYT zV8ns>DWu9ot-48M@)AT#yrh8yDlkj%oo%LI8`HE*-(6vZnn{XI#vbB<#f)L5&8Hpm zHwyQMQSeQ53<>+?z?eri*wTr(UP*?zxMb`;$pK`a4#Ekhkj;EYGkb@s5ljFescrBAy#7yH(>7@lcs zaoL_S5u+W_Z4Y&I;Ik01^S30Rz-5qyU1mL$okPE`-tETG@f(0_%kDozz61|U+!RdIXuW}Ae}=4t$iuWxln7+*fPBWx1|LRGW+XeZ z%fQc|X^JFcVdpPI_($^AbwM8m`YHpV7!=*FE}1`Bm(Isww&LkfMra=8L~*{rYKb&Y zm|l6Hiu!Vd2V0jN&JiA=*1@2SbUDbK!;)`jWCGE|!`apUywlB?DvU`V%_2YDO* ze}r#1b*{ssPhA|U@Xh|!pp(Fz3ShuOs~__VTbW3)a}N|@Zp6Tv;Ud5+Ll~pVqCkua zAVw}IgllvPk!VKllf$LAW&`vk%ER6X7HJ0z{)RFFBRS;RJ^?dXOXy<%#32sFXe^6` z6o-vc@0wr|XwD>91>g#Vk*+R+qJ~n$k8(r0pUf?;FFUo%cIV;++>N%|a)Z~PkuMK^ z(ifrnvPG!q7KiGLap&Yj;=#ysB%UfPb6ZZ%JRGihLyw#L-ZJ-5?(i8~UU5Ktdwxx= zi`!qH-1c}??WoAekg0Y))9)d;06^_^x@(sRon1q}RRnTA7m~4-pK_@$3n;clHx5A9ZaD+c^BR+f z!u2E(FByHctK40nMIu;TWP~E1ZlXgI-Lka2@arehL`t|%YG8DQJG1QftQKh_12kO` zs5(-O&6vRkS5$aT&!PxYmKt8_PFCkuxIdZ$s)e<|~iA+eKO<<6rRQMOtzJT=3daN*vp3^!Wp!uaUH(7k~9 zsXv7}n53rORhpMC6$%%rClssE*Zqg8+;-9HEG=3}%QoxFSh?`nc;2(Bf#oZt$AeE_Qdxs(zIG(xs7c9%PEhEGqv+8dXV8`D_7c3J?CJ-P0f#&BX}wj-fX+kR$qY8vLvZ>X=UU$juQ z??@P>UK^BA=I~vr=3996v%Arql{c%tX71wJI*s{}qVKy*E!gTEk~nL+oTiwUnzz+k znLTSd4yk%yVC?B+FZK+T$a(q%D~Bm2Kwy0&xI72vWMs$L&QKnk5v8Y`Y0J~_B~*J~ zkZRcK9Ucf5gkvEhYYyJi?EaSsJ|ZY27)e0xw-ziR`%X@5KG`d|NBM{!eE%T$lHe-> zPKthVChPg>BOng(J;1dNBh>wbPac8~6%%w{ak%hFk|RAvrJrvWj!KQD$jRYR zI}CO3x{|C3(hKZCeX@p%BkJnz{%J9NMq}3UG)9$tRI)t4q`Al>w8mfplBkVmF!Bnd z{5|Ni|BvpHhXzED|0nK}2RVM?F8O%e8{!{uieQt&ZjW(7;W-(Y6w>$LOKQY}tvbfY z!P_S69pNLAzF3y~yMQL*v1RZ+IaRn~Je0r#_kN)ZX0XYaZ@O_Ra9*hYljU-FrbGoR z7GwfS=wr-@(OwGD^|)WK z8LSI#tMwTol2tgT-lt^e$-!0Y!^ZJ)SB#@T=-dYeu%^?I1M&=nG7Cw>!!sVILOC2V zL^FzYCx(ca@CTBgD$H*%WP6uLk;y1>j=@nvsd|6THG06K)q|mn>{lYpVup^s;OX+3 zCj@oYW~T@Dxp$gN`**qAbr#AaSafjgr<5yZkJ*C}D)*#h~OlG2nEy2&zS_=u>?idM8xVx_Pf_Cz}gXZ){$45+nIU|fkhyjZ3kUx!dsI& z8M%%bq8@Ha$(;?{KM$DSHvw@XQuHB-dH8|&!Q#|wT`nMf&(W92K<*ofNGNGvkGJJm zs(Q7%JS{>@ArqV>)#laiiHV=Xt=V3GR1dFqubv#Kax-MvBsU6bR`F)3^8$;rc$chxxxReao-Si1mXVbI(I{#5cbIR?r%*^qvv^8 z#Q6ka8eI;*TZB>{pU#j-ooo3Sq0b`|`-qCyiOE1UB^ss$gy+`1VWlsMiN65oHw~w& z=+&I&j{6F%JTUR;0^VG4ha`Z6275t0oA%+WZH2Il%+kA zu5kn_3EW(!thS~hTIiZX;FC~-2MGF653#;{B>Evro!#j!Nl1!`Ul2bcesFxXx~J1! zmN|&AxnIf(>}g%^hhEXouaC(y=kM9QwL~rKa@UmzG1k6vE$%LKx!p|l5CQY{wMA$Z zb>D7RvfAG5j&ZvXE(8gtq( zyAZWI4#2>XAj^z1%QE?LRNe8iJ2OqXpM50v53o=9(#!6l&aw2EaN(Pew&eVpl1 zn_qFe&8Xm2ueb{w=Jmnf{?+X@t2im-+-l&Fu6~@_C$1p;bXGEa6gyqrG1<{mE}Sav zJm4~bT!6GZY$^+@xL&S+^a|(xp{8z0%T_BkL`ADjM>`7ZiR47=M02In@F`fIw+quZ ztXoIb3G&EQs9ySZ(1)`?CV;QKy+;-hlp4UE)rd`a8z~+3>TB+l!H*-FT$34KujJxR z!0z87b^Dv{)vE1v_Xzc$H{2=ej@Lo$zoi_5)bp>qPc>gvSH0=(RnNZRo@~~uHefh_=8UreS`S<(Zs(KkM)jw++?nP-)kkl+F9N!5x;i#g z$@kuNXM$a)o~@56fHqtAwJ7L!@3;%h1?uH@+?!@6p?gB3T!`9Zl-cvXi3F1fvI%6Q ziQx3!AS-JTKO;#0*uG(3kTV$}m*FR4?2LDs@hPCQGlMzry6-kIDV~1M{dLk%77Rp# z>6NRhA;S`U>wWiZ(7?<=>~XLa9K?xbYVTXovfL&MZF z4r?&=R%wM_jwmZ;lqC9~=Dh1w>R8K7C0Ghdu&!4t)@R2D-yUn7m1JKCby&Wln)hye z#4z|vLivr2>zi8J8XNnRYJC8d(3|XWI?c<2feg=O(ZN8ywLHqq4nADq83q$p3$2r3 zMs!<|XGbu8u&3HIr>Hr_p37lX`^5DHZ^?<{6*EXtAL$+#0N6%RGbA1ow6^pp#&YT5y78!@L}F;%YHS5{3SP->EwPfp%V1l2(|mP49Lf zirnVH%r8fdFa>3LEpqX|Z+?rL76`Oq6xQx2wY+Yk?JM4djw zvnY+RTr3j*(+qx2ER<~F~OIao@GKDk)4L8S` zn&0@N8k~ukUBO>fc|J3p8Y`(?!#x#cf-25Kpd6_eHbW}`(=BYocO>`eBuI zv^h^5z1pfauMKWrZN)^J=c%=0Jozx8w)aHKV@^{yjq!NR+3J%Mt^JATGwmLNCiTm) zoAr0xm=%^42z4a?+=n$GKQ14Cg3^H5Qw^Kat_D%eEr+SK)G%-$qKko4Cfls zCk&bO_wX}Fa4!J|Tc0{)T5y1UPHFoMTokStj_awxy}g)@=E>?;HJ)+#(!)eADR&Yl{R(P~FLq?8*N-cR`w=!g;VHy87b{-mFPurzGt$Luhx|zfoQ7Zb za{zwu5>09!)c>#}LhT4PQ9wFyBNYAzeq)mAT;j~m$Ga>113&CEhjARVM&c83@!HIx zhEGjitSbNJC@9CdAQJ^h1={#vU+y59v*5>H41P8EbuWuj-@CKCYWO&BfqG*TKwPIc z1MI9VpgF)60tXHbd}{eUd_utmeDEo9lhAhoxj*`7O^J}11lLTn^&r+L$}JcwIxSAs zJkK1X2ihZ0IXtn`f{2hR5Y|#i_OB3^!bOrP*s3~BF}sBsxr{CPp@+PVXtl^fqJJqN zTuPF>IzRWlnl3&&{Xm>>2MlBI=nIH zmySMKY`>@6XswX<2hdhB)M$mIF`l!4ZJAAmUnCR?gmfsFlRplP!M*bm5QV;QA+=jmT3T z5d|g5#KENN3t=Z=)`DgPhqp>|Kk*G#ExsuRj;_-czyt&GLgc=rBA)>t)alIR$Pzr>{MP%BN6wSbT(4=T_G^ z=$f^@X|>-~>xUALR=h7z4{x)o5=SDPFbjQM>b04k()>7P1fo-PZW48bw;9#(G&C1S z!E1WUD%t9$w}=kJy#XsDOXBm~K-zB=Xg^V)wQrWEQB`lZW~=S9Jy{8w7#xmR>T^#; zW*qRAQM(fCk_We2W7S);JtG6@@S5A+)B-J_t6EoY=mHLg{1x$+i10PeSl7O?X`S3d zbjyAMwR$c7RZWollUUVWe;pQ{dsvQq z7{VJYKggbOHgPb>-l)N^duFsMc^m3B&ztLU!Vb3Qg8*kX4pVsO6cPXj77gDsgf1>1 z+JM!aXh1facLhw9`^mz?G&H&Hg!WkT=*K4=}`8orA zt$-V{BP*Y$Zao#-J?_h}Mk)0HnXT`%%ocV!NR;)?lhv4qi-u_;wyk9Y@KU?b=qWPt zC_tBszQBuZYyq;pQF@M;x-$uKZ4gF-*twt{dMst92|mM>1JQjs(-!cq2Z?cW!FmAO zpaB~3=cyH^S(&lA0WQ^8@5v36=tg0KL65qK;h9r1u!A6d>^z-cI?Nt-UpUIs` zk4UAhq^kac=KbH0huXXG*22mrS-oS9@g1xBKtKu4P>c~>V8aySY ztrj$RvM0Y9Wp2TdS_=iHU|b-mg$p2D3w0uh9oE0i$rVdd9b(gMq9 zEhn1psbD*J*^^*wg;)dRX3z#8Wz4#8cJxKhLE{sLvNl@wOTn6{!6zC#i_Apf=v1|I zH03p~BiAHhSJd&)D_XA3-OiGN|Z5PdK^;`3Mz zScrky@?!I^YQE3oRXdUs3)H1PPhI@OjLC(oJ}<}^8Bf#)YTNg+ntG-+X*fDhAN0u8 zs{xAb*5XveppcwuZK0fUAwIOm!i{R%LeFtdK_4%x*A{w4s0Ax<=zs8RD>vbvh?a@` zyVt4{&aw*Py=H!t{M4F7o|=*phyW++Rm~GP5s$2D6IhIM$55XQi_cW=E%GEor5Lv@ zbe*gva!K_2TeWeBhMpP})NkwL;626llKa1q3FO|IYPYwb#R8r^VA=ywQ$uQK-M-`+) z#FHyI^js93s0qjj`ot2_7%cQi8Q(fduP!=^^f`+qT0yaRaf8~V67RBRS;Uk=;UOBk zBP+b-bD1)5cvAFjIBD*YNpp?PK@bAI2?gbGTyZH2^wp!^#K`3|$|3^Ai&hkk8ALT{ z`GQ0HzA50@1665I)X=%dv2;s7uqEeN?;J^$izHL!CK*z$GT=n0Eyt>>v)bAH7d+TS~_OlraQYuFVzpmB>fL zn5q#WdHz^FnvkD@6#YjYq$s9ZxI_CgkN9|u08$Gr$)$IyuAXGszn&bURfpFGMEwyJ zVy)w-l$NLyM>Acl3`?ZIA5|ehtd1&hhGN+YHm;DH483|h(k(-O+<`;;wL3I5k$I)D zHQs3RqOMha^^=H^x>hpXR8|&CFy2_q*^42VbVS!d9HD=|NvepCw9rj4+=Hi3ZxL?uF_{SQS6Z*@xxO`L0^>yizQDf(eIEVc==7gn=m_N?02hW9@OQc0oW7oOM( zE!r)8)dN95E_C2q)PW_*knX^Y`XMfys!5UJzMqs&xn z|3zsKf=)(2r75yq96FvxYVhkG6g1DVR+s@EWTAivBp9|};3e56prQhlYiL^np$m== z^3ZVp-&idy3`s~0j;VSOYUsge1XnE z`N(F}K|!`^p&YP4DMl5ej=s!Nsa9y_AX98PPW8@Z*2q}BCB~_u%dKK4*P48}RWTlK z!H~1;F`bWqOuru)-Vd!3IBwt(EtU+jkJum}63{qXU3$4S9(SlOTy7l~>l=aw0eMWk z!g6PcIlCE%D19i8CV}ia*LX6<%xAPU1Y(mbn_Y8|U@`ncG&Vn%;!`$-rA@wL)qPi3 z({T@NUTHNXHAiDO$082w!vv4N(rSq{X9pj?-dgK$f+-4tAT{DfD?0#Q9B#e{b`YFG zfUOM*8vrzC{1^N@onR;Zkgwr8gP&&-oJDXp1GqQ&&f(`T`8kQ7bNR^$)6ce;Omo4R z1%`U;Mk_5*Siz4l)&ceAjn?o|nJ!)QSjY^7r;)=?vNJT(c#V3k$1`mNF{6)sVa-%# zAIYW=Q8OVzUp|?N-yu}p`fKZ&w1=5Owh`Ga<_DW@vR*c$xwzDV)Qll2t=E&A1zN%= zD`8YwIqYoo^5kC6Z4T&Z_@o!d$LH0$Tdkm3q@Ld7X)(_Xo_QN?a-EYIbB#*b;;E?O zi0Pt!qBC@FMsnY%9=P3_=zz7$f8TC-Tt(>9-fV|n0kz8$Del?pkZ%)I=0DZrk6Fh9 zH-OB2aj*%r};HCKyX`;#nw)>FZTvz%y8#9`FoR)d#F? z>WsUs{6vd$>Q#cjsukNkdE+P0Ep(48jL-P_0RhkRnidiQ<_&(nNk9Sz9JPnGdy2EZ zrh6>sSsj5aoG;X;+dV__&Snr90GeUgjXU73rmjuCXVi!tp6u!ajK7V5R_e4QkIcpc zOeafnBSU3{9t)Qs8!!PdF^zdmQ2zM(JyxaD#&*zsjM{dgry`c7-7=!mRL2<}7wCrQ zTr*7-pW?|X334*;4^QUnWHMhCp3J))>WRm!6)oV3^v&A-vv{@UY^@4U)McDZ)K7&$ z!AM|kgWks(8nXqT*z%#*8mE3-LTLJ&8^E>t=oqa!9xu)cfIo#j95Vy{A~CCPOpu>2 zpE&VRDrx(pFt2gB0eN)ryTCHTfn830EC~}r4jMQulAg!9(bee_#NZd0czOk4>hc@2 zD^?#|haI{2kQ~87l` z*uJ&rmbI6N!xk4GHZV(VKh2XJFdZ`eu^LPD;zR#o{o&gaQlc=a)5Pi2gv9aZSbTPf zkHLcwT7{~BPlBq2-udDXje!2d6?!4GSo+r45Q&2>N3>B`Sj?w9>PN&$Wp>8~OgoiTb!&e!q3mDi92q&K305%Z#ok7~y|)r7?qX%%G4iz2cN> zrzgAg6?(`ShwIGuFhOJ;%69pry7{-36^Lv&PcbK1n@`h4`bQ2l+VtZQt1^M1Kd~w` zyS|CH5qg2rMy-#l)b}g__p36b)u200eR7YLq`u$jNgK3=3zm2SR;@svq1SMIWT2tI5d0+vrFozCTq zg^DE#G6@tL*&$e;D7!aWmOuBMZ%i&{QGvp8a@2!odIksXk_Fqllh1g`j^VDc$s~CP zS$LT>hpl?B<+194k^6W~q8#q)FvAF}YP@>}`{e>X(+Z8Gj?mE`L3)Yuc{Y|r5f?gn z8+t=RmBKNINg{b3o`=?y4ek!}KQUbkgak0-L15n0mRPM`Qu7KYRzGj8d z3N}PYEkBciM*%B9+{E!wh4S=GrN)M6GMl~h@La=na3R%yQAFomNPQPl|3p0_4LLHC zz)w_E_d@9T`MjS-pHP2=>l)H7K%e@(N(g(Sjq8sn z{sey}^x@Bun1%gmmr*Kk4$$Y$C>dRh^=OSgF=RM@;CqbGI+lGqsdFc?+X;PiCq*so zfqq#aY4DM7Ai>b0DtM)js)cBi@w^d021J8>(*_#{h&IH5_KTjQxCC0EiZ(`$yfgSU zF-+=AlH^z;nh5L5VRFd(Cy{G55JJ6r=n-qVHkGcisrt)6222>aiOOf_O8o{FH= zeJtZRf@J{0uIRhr4ODOFX@~XG2&NVGj;8awwHYxz@%T}uNC z%_WHZJH$)(33k7oNd(0U=~bZGc6o}N_Y<98CG=NfnwcDxr1>tY{4r~FAT2sSIw!gr z4KmX3<8D%eU-vuk>3vmpTw?V@Cb9bC@=dJ%0L?e_-YwrW8uM$D*CCiC0saLzOrUJhI$8es z?8O1ZiC)Mvwn8{41xm6}P4u{E3~|hw-Fb_-6yAD|H9O033<(`Ya$0y6;Z)Nm%Nm7t zpT0z`-{ZkshdrL^p;-vjT+9fubi|oEOg5>`s}rDeK95O0QbRBBjBv^sJzG8axK&#I zF#UzGA)E?MI6cE+AdSep0dgVJCKaSXY?`mLwh;C_4V>>J-m*{HV?`jJU~zY+~xGm zGiD(202z-uv{A1azHlzU7hRxB=?|QISafX9-~c>j4H+NLHoZb1p9fc z_h*8S2wnsz!w;RJMWRzK_9P^&V<)hy3{YH~pSI2!brd7t%y_pDd`a*X!94_0hF~|M zGtGF}s3tsP9c6A(MVENqN|fQEX(`{As_9wFllBjB1N6n7@+;32^ORuVSCDOX>QMFR zK`ZyDeo0xD1XaT&d~I^-p?Hc$TXl24?3bmyj%Yl=N>(eLgWTU4YVc*A!a#i)cNO0b zf>Q{jU!<=n3F6~*ue=1NF(T8u`UQC2fHgO)+E?=y+9I;4=3W8Nez zPPre(RWxp}F~bfI6FwrmLK6JGc2uI36_HyY%y+adnxE2*(!bOA>0{d&(4!7LZ?$Ay z$cZ%w-!vA4cZ(qP2bt=-D?Bfo539--El>2jNTJN{VzMc0pR6{$XyurD)$SK9w|P`> z`Bk2?9C6^OEC5o93eNqrb-rmj)&6TCfDpht4(ndc#cffqyR4to5S#vbySe&pGBRs`3WUX7j*BuUdDSkErGQJg1uP zsW(<6lq>b8V?i*IS_Ni&= z;60Ff=nd-(^KWX_n_zRl8{GURq|(i|gTH&rx`#~XqT4+8m_Gz7{$|ZKcaAw|rpT*n|NF0|~nU3ThN0pQr|UodkzywhJ_P@pnmUmy zu%Br(Rv4X#CN!et*#4xh2=antpLn7C_T$37BO*mfuv+l3RZutV2wztEutH7_Y33Xm z%Cvu=E~XX4bkH-d_QgnbMhkk!Dm$`LqnZEDS8DW6R!R~@${lTVF4h7!J-Sk(`_&k3 zw0*RJO3nVn8h7-59h078ey&nuezsC-&c{|sLZpvW@x7iLdw7iWd#Lm={Yr;h3ThpN zW2>6?i8VTKwvJ4Hn5odXhg?|wT@l{d@Qr&aT&ClUfkSbKW7&fv1;!g>1HyIND#VSG z1bik4oG4J2jWY!Naby5I8s*It7era`Jyl?}z-a<&1l9_y6Np1kX5Wc_I;Sl3pPq}W zv>EE`-*^U_GnM(NRauSK?^#CcEQa^YCToCvw4OOe>s)%}V2t(51jRE?<}C=(wm63w z-BWL@O)%PTRJ(rzjHGkR|M}e1v!7ZyGaHPa`83)=I&T4$fYRY3rA5a=TJHes`cy}> ziFhn&k%^KPNlC|03dihOOn%37&zBaid*@4WX4~gTsYY1djN+Nn4_s<&>=J%K z?J8+Zpn=wZQkbvy{dVzT7tDpGUhPvRblIX4|C`}JChQrA9WBKq zB#Ju0Xl;~+9m6e7U$Z7)*K?DWrSuZK(QiaS^tQwsypNVrb?|d5^Mn;fPm|HJG9(F~ zi!s;#wx$^^9%CyAYRKL-3tb1zIUe)}c0{mMy$nD{v_Sf$FGg;54iboV)=(t%;cq$1So>ZLVZ-uY~(5s&01JC zH2B;X)^TPOO+@4vEg&5`P%hdkNl zU{&?CHMmALaT0s7zb&crO>0$p<_>bGKS? zz*BDS!n18pu~QStYX1SxG$&Z$Qj+se<2oiYsdAmB%{g6NoB`Lb{3w?n0=X zjux%-?NYz}##-b2g8O@lD*x7+8RHlf9cwDrqn;{t;kQXt`6^NTx};WGqs?I+!PK1-jIi6Q$0wA03|%GCCIT6u2D*g5&_)+<39e-cgwOF5T{1W_8>oxRC&bH0x>ghH zV3ZliStgjjw^i-?kJUS6MSMOC1&_~|l%18Gp7Dc`lu-=GzaJ(g%ERND_}i0lJj*u{ z%=vSoqBD^X9_Qd~?TXKrZ&i)oTVtaBidVGid+XED@+x=PEvbJ{=Z-2p@>TB2(WQS( zjJpIWKfUIHDQe`@((g;>JI)|5NqY1Er;W1RVVMfzofBac6FxJ!RLQ-d?Ug zd9>7y+H=MED)+I{QBh+@)TM@UW2K)=FXaQ_Gxtv~Z^Jz1j|aS!8(P=347?7; zSz+LHurcsDIQ%}DxMtvW@WAWff!D!H)WGXtkP`O-Aq>0@9(WxL2D;n<@xWJt;}*_Q z1FwT4&wAz3O2q$ps4VY$oQtFL!0TWfMh0F754;XufoU-CI#}4-#Ga5M(a)0yUI#+^;pk@f!DzUuY>=8dmWq=tn2n9nE7&nJs+p>A3fq#58(~*!1G;p4If)UsCVG` zE`@6#i9hgsm$Tv{g4YNJp6^nx(yEZGeeLpr=eu$#0{Bc)m+i`aG%e;dK3;VBq=g!1G5;UH#B`;Q1~e_YOSYDt_JP2G^|gK57PFFb_`~ zTILvjQ3lpB*YJyO)RuXMU(Bzx)Ej=M#A%>`Jw~2y_~XQ}!0^Y5!)N#t#IexuCyHZ{ z;ZG9BV#5zbT1d6T@TZ7lso_r*$1#RKkS4BU4S%{gjx+p&#IelqXNco?!=EXR<%VCh zO|+a~__M{Q(eUSpV};?*6-Sfd&lAT=!=EpXX2V|~juyjTC=S2jFA~Qp!#_A6uGNOW zSR88%ze^mghQCA{YYo3!948unOC0MAf2lau8-9;C+6=!}9PNgGh&Vb7f4Mk14S$6= z!gcL3{I>XX8~!pQz@F(b{6ocSgW<0f$40|nC61E}|1fd%8vfzp*kt%eh~s3#KT;f< z4gV-{Y%%C41cva&Nlqh#Bq+{uMx*D4gU-} zR@WKF%{E%jHT-joRd{oB-a_Lv*r79wV~?9_wCw8h-W~RZ4w3WweD{QX>y4HR`g|`8 z`@(V;wJ=>2j9u+rWIC1~P|MeNbAsE}c+X8RpHa!(-n-4Gg9p03nNUZf{=C6^6|Ayv z+USjTK*z(jUhfs=h+xqs@83+=x{ccGy)2cw*TtBV6DAVMVEDegBKY!V@AIbmYOD7_ zryIekG3vSEj4ZXiIK!!am{sZ4uE4a)w6JTmniKF|E^D{^uIgvhX92IpwX3EM&Kav* zFW6)EJak!X@XYPr7ZSu^cJ(1MNBPh8R?=X0@WQjbV}_;h4gD`R)V%%|Xm|KahWhh; z-XgxF5B}>uZ&Ok#bwTjydkvR%z@gUs!8Q^6{fg@oKLBS4)Y62R(~7;P|-L#5x)IlUORWm_VtC z?uX7j(CP=jkUm$q%EIxIjCQK3g&%Y%iyA=Dk`roIx%x}H4FfVcn7z>R09yoZz_Ka; zUowFD^ck-|oh~u{5VFAHR|}u@o}%J^ms8{xeQ!(KyH4!xXlnM?uKck{Lbd0h_m^tv zbKdt8MRADe1hmxbLtffbTX)F2I=+nM4Pkko9rC(kwI=^kWxiIPttLG0ZO&MSFvF1y zeU*K`B$e`Pd4UD(Y*A@ZuITJ&>H$oEHozqOO@k>CsGo?U(&Fsk_!qpNMJI@SlqhIW zl`nher--KWy563yCbmkQ^0K!wQM8_DLptiNm%VM#Q&^|Aml6xrq*uIyouVFPgj(^6 z_vrZX2on9H>WZ1pTs1v8CR1JVWJ!j4_7!irS*gB##hZ`So%I)QmB(USQ5ZTFF6lDq zPsmyNVX)W3V6WP{(vhRi`iu9s=2A7|uimld@oL*&y>G?LMsQrv|El*3hq+uG^M>~X z^8^)q!>gPln6OkWdeb{*QbfH+JAFB3q9r9_4ARFfSo&79c%0PK)h704V1nS$H@!6| zF8(cVsi{=@LVJnRHw&=?>a4fC`w}Jo+V<8qpRKC@?rl=PdfS_1-mc#KWnQ5=@V0k$ z+T6Y}eWJkTYE|@(ce8o7y5t>ije6*}aWUp~I_1szc3ixkOs!q_Ym4mjU&^wgOOb=H zoz>NU^R}B0MuN;zRdTZ{Q!RhjyVg7q@pm!_EL5;Y$#HNu&hYol*wEVYhe#Zxz41No z7V}B%<+?64UVVQ}NwR8q-B?vOCHmog@3_Qy;Z{m(dK@pA zD)@Kr%EbC`zz9|Pf%kOB>t^ug54;aXIX*Sj`cJ%V`FAqLHi7_vR<9_^WbcvgP7|xi z(O84j0BiV`t7V^h=U|+-f8t&C-z9cR;vCicnYT3{bK(-_aS?#b=#5S5Hb5I=G`_oG ze_WLBt%HtSDzcGDA#0JN#Wen5brR0Y$Z5aJ^Q_PYyKR#Wi2;G>LCkmUU1b9-U3rkKfy2KFFeOS3kF7VOgqLj zuTh_0l#-)XT;YXv8i##M+6T;aH32);H(p)muy@4J{dlk<%09=$dbu~+wnHe1aYVzb zjGXkDpuK|(_&dR405HXX84$Ag)o1J0_eTczYr7f|V~=$@c;ouC4127P8NTcYJ`rPY zODI{6k8XOh-`6nlQVK2yZ zslDCNl^PBIT2&X?O))niOj) zK%w1M`~^I96=Vb}`6*o>Lu6^Zowg4fN=V!1YfT< z_VrWdgmVt}tKh)a?xvN{63$STA-D}b9WZCwZ%LqJw8u%T^I?>FzS!>0nitM6Qo-xg z?jg26R`AdFQR?;KcD8!eg*lv}ep_Pay6VGed@L&wU}49))}DqAG4O1uFH7w9m^^P{RGYpq6Ma}iv z6VtxNN538&O3loJ)!knED5swBYFlz*@eo<=de4d%ulfHBmmThNz1Ch}KW#D>2NTQfbTjK; z;dnCYL;2aFMpW3vC4wqhQ5l$x{;rkn-G0573RUSNVp*yJm)mjb@d`T?$EgP@?Gp8E zh5dcjH$Rzga;06CAI{fzGMe=>8Qxln4A(HjPRF-~8c}5z16wYrvQLN3=|5N5t6cvM zmms!sgggnb7vm66S35^F4Y!*^wHt=awy2kf*{ia?`>AAV(Qx}r^Az>kaQiN;qApqO zx+*$X?H^%hMOPq+T7Ok^o_cG9eX)7A+C0*JIO#v(j8aWC?8U^q7~dF1TsO+jH&?5j zqwK*Bhp9@gw->ALM%kI>MJj!?-JB@e@RFH$x?WRnjJER}dto1YqP-|lFkSypp_FPj z!C+u(b7Ld|`q z3QV;ZA?gcL?P>Tgr`j$mf?+1;w8x>o^K00?_&RE7?+LWN+r9*fRP)q=YP-Xfegv8CpCc0XM(%{Ad%ur8oeC z_+h!X);&Q~GUtoSC9>QqLFVtg~w;UQAyuBu$kNMd{g0az*Hfj`j|X)!P`$&j^CT%hh>xsLTv? zU7fwaDWu!c>bp8%gR51}bh~`;PR3_}vPQ!+Tzks~s0+PXHBPq|g08r8x_wga11u~W zpuWAuFOJ4#BbNIT)wCJ*cE=ad>i0A3IXG>n&9u*nwk}}CLeg>F&1>xzyM-_lOX{v? zQ-|Mof_iW+x^1nBn`hUTB%%&5*N7tEFg6Pu8bS-xs~68*q;}7b zX21~Gu-@0sSP{CND!P3_AcB2ps9(lsjLXv0W(~_GO#~ydvs${=g47)$X(NrwI)tl?r!2zmbn(vG+1lB42%ElfjmpkE7o*^`y`C7L?H~>h$krKj3G~ z_X#z6lS*1>w>$n46Wq%GQR9yn+wQ&zo3+F)4y-`*GU-^UgiKAT6GvT6PTG=OtG`=w zAEX2KvT`!RucV9ZlnK>BvjIZ3pU6sG+UL*tQpP>BUpsDQO6OgK>FPI2>^-J4IBzK? zJD4ZU$Jpb|RqC>1Y)^q~?NS@kS2fzw>LO0SF7?-A>{HDl!4=2a?XgwzG7H%mK5#Ad zT-4OmGL|6?&1C4&1mo3zR@k|VI1`Q}jJR55Q9^sJUX;>YX}GlQerE6rQ|=%D(t<{Q z`r$_1@NH79O?El-=3mfcPt^pE>|A0Tq6;x(QNWg~*z=mKzG|{>j}R|!~WtO8AS1itpdpz3NYgWsrz)%MbWXw@Ce zD1RbIV(!-vNH;%2*OLU(31}rQ(7MD_F=+E)8IGdh^I)~<*RtY^#!9y^MkemV z*0qetyNv!GfwcO4y0ZHcu5JKH-qqUTC!<6bp2sk9LYvjUS#@d7-tlW{`1uBUG|-h9}Kms+g7B=f9SSP zE9WMs%^1tnlr{=+C&+aWGn4g%BQNOSB{7_F>A|=S_6XC-iMJwF?H!p~Fz9krmt1o# z{D(vG>1y3Z`@}0}G>hl}zCPl8W zs@!77Vc&G^u*c%R^;_&MIM{@~O19ePo9D@wQxbyh+s9Mb)6csfJ3)zeti;X_QS86l zi*hax*a_yPeL24#u+P9bBUH|n+wJXOn}xoX?yyfYZ|IlL7omLQ2oy3kwgiWf*7mlW z)UH$PQ}biOJs|~O&A#WH1TRlG=jWb^E&Mih`Kk7qBV=mJutvrtGFUQ-?=h(?&r!&D z&vO@KsuNGMPl&kz{`ab9PP2cJ&$XfZK9Y-!b{+e6g;TKO@743au(#yLg=_ayarHRF z_bss}gMT?4%Ob@YPQ)guU9-wERn-}G`o#BH@)2{YhkmSezrz)2H8}&5IVgMYT1^nK z8`aBaphpg=_s_8B@sfa}N-X}Kbh}gf<95w(xdYyx#HuN0*=IycRbIU;5fcZ#^P8Ga zY+4;6GWwM)_%xkkuveGZe72qM_$oFSINSchG@CBkZ5OI@e`$LXbHa@ruO9fNU6Yp2 zR4m0ek3mPP^mFZuIWy>Slw=ql+4b}j6e(+x10{rFnJf)KL(EL@SFOLp-z!^px@tey z-eEd|pPy?-I}#T#6|uUHl`5LHkj_N_z%}ShAw5K&zRZ{L3|&mHgkUMbk1E`Vd`4mE zhUjFOh5wVfs@u>jNz!Y_G2>+py?GBk-!3t|3ib7>p7ZVLSfux#Z=d0q9jDBBi3MuK z9=j&%Tb3tvl#!Diac7vTAjf5AlD_=XY_8y_3+yfjI5pQ_WN!-a$lyDHKqz7qZ}^&7 ziCDNaUWd9OoN)+n#0}}EUqctq4?gfSjWT`D$j?YkWdG@9ewzSfFy`T0F>CIu`Z}TB zYa13-PXG&zyRFPt5LtEPKg<5KshwqaJFD%=?FKj?SCnMY8@3c76)&#+HVTPUNTz_jNIK2f-K2dmq6J z_0XmEILE{gVRrBga66V>hLw1RT6Gy%N{Q-+%k04*rUgHPqn3j+qq^J}4L|OA{xIL=+-xXbK|o7u1zDE+?R!M*nAsG0fU zY=y#&Se~E_b$z@OdkX9_Y16E3T{)k$SC-sPgsHtLF@>?dvzRJdwO?n~=0{M&Hu#ot zRP}jft$O-8dvf+<4hv__!uAba&3@mROq))$v?Nx#=*2j-^?Lh@{GYF*I`anmBJe?6 z`|JkiB}`us9-lb%+CK0UE7T|Za4{f(h5Z6AyAgrI`UMs-u*)1pufdvG&$;ER*NLKT z0>@=y&~=mD?8q0?fk2p;V4*?@CeW3v9-5z??eOKOyKljDhv1=&>b+a+qQub*myzG5 zQg5{ne%RjRT*(;ARL&#zfl=QR&q*C+SXH>*7t=L}p%7`(n8}wz zR~~G|*aZRJ&}+t#46mS-9~dtC`!a^!LLit&TEopsP;QsMV;$sRd@ERlOm*_8gu7PL z-qNIP+UfnDIZPrT5|N|%y7rU&UB1>#7A4!2pisf{SE>6C*yCE)GDx~JLca;lmnF$% z+V5B{m6tBQlEv&LkhXA#kt$Vpb0_Y>L9ezIawt;Y2N-RwTK0Q;Rm?%SpAA0tdoZXM z|DFEQkz}3gQ#toN-z+xuF}Ng4y~uv{7MKa77p3pUtMWhC6HR>|?36sm1t0l?{guPX z^Ox^R^}8o z65s*VH-;(45{x4_ieMta%?!PjU=lx%CYVYvji830mf!|PxshNdKj#wc=jR;+4g5Tw zppl@7U?ssO2e~B>*aPE=0GxFgrzenR$d2xnOOFvYPw|T+v$=uDAVOSW-X&D2BQ%h^CzKjD!q&YGxLoRRNA)to8u4e`&}v~$-vW%vyV?mDOZ zu_#G5_4DuFQ77ywuN2wU&S|k3!M(f6-_5C_XzGe<#@({&G{fMJYbE>y5GiKFqRoe?I?3}~>T$Qb^(#@+j zZdDHzR^;X#8CYAoc|A`8TZ3N~R_t`7kpDrRQVo9H->7GjE7q!i6jv-szYUjFkc)*> zYrNb*U8#<9Rn(X()fKLaW0kL@BC`rNSP(shY%DA?!tfl-yo2wQB9~lXH;vmGYqZtj zONVBv3rZ?HW|q3Iq#{3%9ga9iN5oawYGej;+M$a#+|=Q^4|a+X(#LGd5zdZ@i^2q6 zjKP$3?>t@!LXCLs@@cdRNX}1gUo1?zXxz!c)Ex|NgKNZ_Juw^aI2tzTCuP%)HH;&o z7%^*Yc203DWg2FJ3pzj)+oz6RJXgr9Vj#$utGU0niVL5J2&JW40m40T?}`A z$nAo=AmlEAyO3@a;_fR7vbN|@2kamo8BnSN1|t9_P<4w{rd3ga^X*itA~VC5Jmf~w z(NfCviE6b~VT~K$*z(o8`-B8IAue?&ZLqFr$o?*1RMD~70V?1~&pv&Nd~!L+i9F{ZgH zIDJS(oN0EbhVqJg%_YIOii+tD^U%(Q$_o631{*3X_b(9hX1C|0EK{+8N^MO|q`rSR zDSMK-B2ZZ&ORu#u?sfHCpmMMnQ~M%Nd10Cef**SOm}Av>yWmej@cp|gE8dU{cUluC zskb|-dL;F^4be}l#?Gp0N%O**>poHYI;&1j;bW0My^;N=J^R43+NXwhRn2oOtWbfj zs_KMgqfG;%hAr*u)vgPwGSzEcRr!wE-Rj$}szS-;#il1VslnY<*+=~Y$KJa3o?*>g z#PjEvj!c7m5W_eP`M>+&S$U;6Wbwy!ANli}F=~BxRf&tWs2D$Q>nAvL@s|~e0$0jZ zb!&H3wPV-}^?7$yjiX?@8rxIlira)#_g?k4&(#S%AeaZAsW$dhmAUxLrS707e{Ch0 zp!gLZme;?|R1fr2&2d~AREZm^id{5QSG#(0#++os;IHVg*fsa5*&C{6MLqrphkEso zkomo3LshwB;S1{J4OL?uPrRklH&%^z{OR9n&c>?z66Te8$6b%y48os3@{=Nez8f8- z(#A&RtE)C5kJpb@Pi?Hql{5)~7goNTZTvrNT?M$xhpL20(BY1I2wLSaw9jvVW*v{R%g+QT*uY3SgJWgUY`ADUQ~LjBi#u- zh#*>4Rf4PIe4?bm7v0vLE36qKpgBji#A;Bj=RTgK!GhWcyXGP5BZwOO+Gq}uP3FqL z(N0Y2954KP-MJa~^d&;Py=>$UrziArCk0T?`isF~BK#yij{)0z9U_p6v(cA|4)`Hi%Ejr2MJ<-d}Nh+MAeS z2pG(x+GJ;_E#huc4B0O1DuqKu*d?0;XNvf2tFXRtEG=_QEbc=7Q!ZvYO);u?rV-{8 z^Wf0S$DUyL*hWIeRAU`UzPIn&zI6nhjX;dT(0=|I4i@v-rk~t~zG6PtwA>t~l%P=` z$|1RgdwA}^tJ|)7G#_>`VFYnNS|hDsaITdGT(@%@__~CvQESc^K@68e8=;_-PkfoS#r)RxopEQ8uoFb- z?P{%u-XvL;kcA7Y#;TJC+LWx#I*K`fAm&YTM;q|4m#g8WGOo3Hq{LTSa;7Gv=R;&M zca(D8eogSY>CZDpP#J87M{W@|aJr1olWp2*1M+h2=1JAzax2?<3hzS@!|(1P8+f{$ zM+9FxY=g);z5nq%>kt2grQ0{ zBIG?sxm4<+X#SBMn*_1sF?J=~43aCjN~ZRgLuCb@8sa!f&XUqH7j5nNvM@e_&BgrT_aZDtU$*ezk`|~bbsvwAoY~6qy`YX9w8pbKp zC;y0+V+7I5(q@i_DI57*%c`jHEHg_F_Q0K>ej``QZYylz9~*h_xZWA~ooq%<7OZXM z3Qx+i`sM?bg`Xq8MPP0o)nbm>g3l&CTV}P%4wh`UcY*br(6{bwwPS1OsgvP=ps`yt zko-URauZtZ>C1LdcgmA*TwE$N9%VA(M}1)(+t7dnk@)mp zw1?O#uHiIJlMa8{iB81`Vx(xA1);(JRKUO1Cs7Y3Us)k3%PVG>@w!MyyP_dEQ z!TNtX+Koz@M>`bITEl0|IopZP5@xQ^<9jK_N|N+evPI9jVNE88&ba@+Bdj%5DxjeO zyPsOiRl&C~cxhrhmL%R7oO`Ppy@()obN&@4D6hr(R+H|;Vqy|=^|{#zF)_xSko&|9 zq^5t2BTEpY*0InD9@lbDDVdZ7o{9*>(I<$f$%>pHatqgm#Wpyx+>8{Qe~;CgeC)Qi zF0~2oLJ%EwrGpYa-hz(mp-{r_crdHQU&+$rXBZ1i9@5&f^jsfaPY~nh%>X52Y~_AZ zn7uf;v)jT9*BcOOyrZF=3spi>w6h0gS{t~!6~oI~rv#Ha9wuA7UI~$P+!L;r;>RHc z_;DGZ0Poguwdrd`&{M~~B+jINF7w6wN)tv9&G8n1T|JL@V!693mcX2pp#%=;_1Hu5 zLfBHz-K8GJ-Fq@qkC~YumXYRIkZ;2x7#a`HY~x|3OOdT^<2uv-w8CfGkTa7Jjy-%s zmW$p)5W{3iw=0-V9YGM) z-=zbSo!m>x@qfJ$*FT6=l^{k-_+K<|r$OTZ`K_pS=1z3u{Fk9_Cy%tAUWPCAXGqV! z4spOcJCOs*>cAR!NNDsG4a-VdlbSY$Ur;sw=t^n^nhad=!i6BGX&4d+kp*d5FcW(x zIE<18*>$HEY;8ssODuAkd(F{Pb$+`NJG-IbF8KiCIX#x(@npPgIl|CNuXm51nt3@#?3-V+Ji~=as?dNgMVMO6|U?-0?>ER7o1yh zf<@U^`l%3ID=K&4eP58f`)Noyt?clpzVLc0@`knjzVIV{B1N_E10n_y@aVVSeIY2$ zPYq3&0sN_F`XK|#vIH^Hu6Fg49`Mb~kft%vxRw$^**UaDdtZp{tEgGd0VB zhizzL_g4boWOslQJhdNnxRwX{{rJ~@C3Nf`ru?+9eh%phLDc`Ww-!?Bwd$dqCe1?> z?U=gGg+fp}caqj(j91R86Am*6g@x0+``MiEiywb?h`la7h#t7oIA9};S*SO309@c}8 MA7WiK!!Tw42OC&ZivR!s diff --git a/BaseTools/Conf/XMLSchema/DistributionPackage.xsd b/BaseTools/Conf/XMLSchema/DistributionPackage.xsd index 1d3c690441..8f136ae04e 100644 --- a/BaseTools/Conf/XMLSchema/DistributionPackage.xsd +++ b/BaseTools/Conf/XMLSchema/DistributionPackage.xsd @@ -12,2876 +12,2876 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. --> - - - - This schema defines the UEFI/PI - Distribution Package description (PKG) file. It describes the content - of: - 1) Package descriptions with - definitions and headers. - 2) Modules in either source or binary - format. (Note that Binary format is for FFS leaf section file types - only, complete FFS files cannot be distributed using this distribution - format.) - 3) The distribution of custom tools - used to modify the binary images to create UEFI/PI compliant images. - 4) Finally, it can be used to - distribute other miscellaneous content that is not specific to UEFI/PI - images. - The Package Surface Area describes the - content of packages, while the Module Surface Area provides information - relevant to source and/or binary distributions. - - - - - - This header contains (legal) - information usually required for distributing both binary and/or - source code. - - - - - The list of packages in this - distribution. - Packages are groups of files - and/or modules that are similar in nature. - Packages are uniquely identified - by a package GUID and a package version. - A package can declare public - mappings of C names to GUID values. - A package can provide header - files for library classes and/or other industry standard - definitions. - A package can also declare - public mappings of platform configuration database (PCD) - "knobs" to control features and operation of - modules within a platform. - Finally, a package lists the - library instances and/or modules that are provided in a - distribution package. - - - - - The listing of UEFI/PI compliant - modules in this distribution that are NOT part of a Package. Every - module that is provided as part of a package needs to be described - in a PackageSurfaceArea.Modules section. - The ModuleSurfaceArea section - describes how each module in a distribution is coded, or, in the - case of a binary module distribution, how it was built. - UEFI/PI compliant libraries and - modules are uniquely identified by the Module's GUID and version - number. - This section will typically be - used for modules that don't require any additional files that - would be included in a package. For example, the Enhanced FAT - driver binary does not need to have a package description, as no - additional files are provided. - - - - - This section is for distributing - vendor specific executable tools, tool source code and/or - configuration files. These tools are primarily for manipulating - code and/or binary images. - Tools in this section - can: - 1) Parse build meta-data files - to create source code files and build scripts. - 2) Modify image files to conform - to UEFI/PI specifications. - 3) Generate binary files from - certain types of text/unicode files. - 4) Generate PCI Option Roms or - Firmware Device images. - 5) Implement external - encoding/decoding/signature/GUIDed tools. - 6) Distribution Package - create/install/remove tools. - - - - - The list of miscellaneous files - in this distribution. Any files that are not listed in either the - Package, Module or Tools sections can be listed here. This section - can be used to distribute specifications for packages and modules - that are not "industry standards" such as a - specification for a chipset or a video device. - - - - - The UserExtensions section is - used to disseminate processing instructions that may be custom to - the content provided by the distribution. This section contains - information that is common to all aspects of this disribution. - - - - - - - - - - - - This section defines the content of - the UEIF/PI compliant Distribution Package Header. This is the only - required element of a UEFI/PI compliant distribution package. - - - - - - - This is the User Interface Name - for this Distribution Package. - Each Distribution Package is - uniquely identified by it's GUID and Version number. - - - - - - - - The reference name of - the Distribution Package file. This single word name can - be used by tools as a keyword or for directory and/or file - creation. - White space and special - characters (dash and underscore characters may be used) - are not permitted in this name. - - - - - - - - - This 128-bit GUID and the - Version attribute uniquely identify this Distribution Package. - Backward compatible releases of - a distribution package need only change the version number, while - non-backward compatible changes require the GUID to change - (resetting the version number to 1.0 is optional.) - - - - - - - - This value, along with - the GUID, is used to uniquely identify this object. The - higher the number, the more recent the content. - - - - - - - - - - A string identifying who created - this distribution package. - - - - - The date and time this - distribution was created. The format is: YYYY-MM-DDThh:mm:ss, for - example: 2001-01-31T13:30:00 (note the T character separator - between the calendar date and the time. - - - - - The copyright for this file that - is generated by the creator of the distribution. If a derivative - work is generated from an existing distribution, then the existing - copyright must be maintained, and additional copyrights may be - appended to the end of this element. It may also be the primary - copyright for all code provided in the Distribution Package. - - - - - - A license that describes any - restrictions on the use of this distribution. If a derivative work - is allowed by the original license and a derivative work is - generated from an existing distribution, then the existing license - must be maintained, and additional licenses may be appended to the - end of this element. It may also be the primary license for all - code provided in the distribution file. Alternatively, this may - point to a filename that contains the License. The file (included - in the content zip file) will be stored in the same location as - the distribution package's .pkg file. - - - - - A one line description of the - Distribution Package. - - - - - A complete description of the - Distribution Package. This description may include the release - name of the file, the version of the file, and a complete - description of the file contents and/or features including a - description of the updates since the previous file release. - - - - - - The packaging utilities will use this - MD5 sum value of the included ZIP file containing files and/or code. If - this element is not present, then installation tools should assume that - the content is correct, or that other methods may be needed to verify - content. - - - - - This version of this XML Schema is 1.1 - Changes to 1.1 from 1.0 - #1 Updated to present date and new - version which is important to reflect the present state of the - matter - #2 Added definition/enumeration of - UNDEFIND type 2 is important since there is a large body of legacy code - for which the GUID’s and other code/data objects were not decorated with - their usage. This document will allow for importing today’s source - artifacts and producing decorations using the ‘Undefined’ versus having - an error - #3 Allow for inclusion of ARM and future - architecture types - - - - - - If set to true, all content within - this Distribution Package should NOT be modified. The default - permits modification of all content. - - - - - If set to true, then the content - can be repackaged into another distribution package. The default - prohibits repackaging the Distribution content. - - - - - - - - - A package is a collection of related - objects - Includes, Libraries and Modules. - Each package is uniquely identified by - it's GUID and Version number. Backward compatible releases of a package - need only change the version number, while non-backward compatible - changes require the GUID to change (resetting the version number to 1.0 - is optional.) - - - - - - - - - - This is the User Interface - Name for this package. - - - - - - - This is a single - word BaseName of the package. This BaseName can be - used by tools as a keyword and for directory/file - creation. - - - - - - - - - This GUID and the Version - attribute uniquely identify a given package. - - - - - - - - This value, along - with the GUID, is used to uniquely identify this - object. - Backward - compatible changes must make sure this number is - incremented from the most recent version. - Non-backward compatible changes require a new GUID, - and the version can be reset. - - - - - - - - - If the package requires a - different copyright than the distribution package, this - element can list one or more copyright lines. - - - - - - If the package requires - licenses that are different from the distribution package - license, this element can contain one or more license text - paragraphs (or license filenames.) - - - - - A one line description of - this package. - - - - - A complete description of - a package. This description may include the release name of - the package, the version of the package, and a complete - description of the package contents and/or features - including a description of the updates since the previous - package’s release. - - - - - This element is the - location (in the ZIP file) for the root directory of a - package. - - - - - - - - - - The term cloned is used here to - indicate that this package as been copied and modified to a - completely different package. An example might be for a new - generation of chipsets that have few or no elements in common with - the original. - - - - - - This GUID and the Version - attribute uniquely identify the Package that this Package - was copied from. - - - - - - - This value, along - with the GUID, is used to uniquely identify the - package that this package was cloned from. - - - - - - - - - - - - - - - Library Classes are public - interfaces that can be used by modules. One or more library - instances can implement a library class, however only one library - instance can be linked to an individual module. This provides the - platform integrator with the flexibility of choosing one library - instance's implementation over a different library instance. - - - - - - - - - - The header file - provides definitions and function prototypes for a - library class. Modules can be coded against these - functions, using the definitions in this header, - without concerning themselves about the libraries' - implementation details. This is a PackagePath relative - path and filename for the include file. - - - - - - - - - This GUID and - the Version attribute uniquely identify the - Recommended Library Instance. - - - - - - - - This - value, along with the GUID, is used to - uniquely identify this object. If this - value is not specified, then any version - of the library instance is recommended. - - - - - - - - - - - - - - - The single word name - of the Library Class that module developers will use to - identify a library class dependency. - - - - - - - - - - - - - This section is used to list - header files for industry standards not under the auspices of - UEFI.org. For example, headers that contain definitions and data - structures for the USB specifications. - - - - - - - - - The package relative - path and filename (in the content zip file) of the - industry standard include file. - - - - - - - - - - - - - - All top level header files that - are included by a package that are not listed above. They cannot - be: - 1) Local to a module (module - specific.) - 2) An industry standard header. - 3) A library class header. - - - - - - - - - - This is the Package - relative path and filename location within the content - ZIP file. - - - - - - - - - - - - - - - - - - - - - - - - This section lists the - Module Surface Area for all modules provided with this - package. - - - - - - - - - - This section defines the mapping - of GUID C names to GUID values as a Registry Format GUID. - Modules that use these GUIDs - must specify their dependency on this package. - - - - - - Individual GUID - Declarations - - - - - - - - - - - - - - - - - - - - This section defines the mapping - of Protocol C names to GUID values as a Registry Format GUID. - Modules that use these Protocols - must specify their dependency on this package. - - - - - - Individual Protocol - Declarations - - - - - - - - - - - - - - - - - - - This section defines the mapping - of Ppi C names to GUID values as a Registry Format GUID. - Modules that use these Ppis must - specify their dependency on this package. - - - - - - Individual PPI - Declarations - - - - - - - - - - - - - - - - - - - This section is used to declare - platform configuration knobs that are defined by this package. - Modules that use these PCD - values must specify their dependency on this package. - - - - - - - - - - Specifies the C name - of the Token Space GUID of which this PCD Entry is a - member. This C name should also be listed in the GUIDs - section, (specified above,) where the C name is - assigned to a GUID value. - - - - - Specifies the 32-bit - token value for this PCD Entry. The Token number must - be unique to the Token Space that declares the PCD. - The minLength of 3 - is required to handle the "0x" prefix to the hex - number. - - - - - - - - - - - - A string that - contains the data type of this PCD Entry. PCD data - types are restricted to the following set:UINT8, - UINT16, UINT32, UINT64, VOID*, BOOLEAN. - - - - - - A string that - contains one or more PCD Item types separated by - spaces. The PCD Item types are restricted to - FeaturePcd, FixedPcd, PatchPcd, Pcd and/or PcdEx. - - - - - - - This is a - recommended maximum data size for VOID* data types, - the actual value should be defined by the Platform - Integrator. It is not required for the other data - types. - The minLength of 3 - is required to handle the "0x" prefix to the hex - number. - - - - - - - - - - - - - Valid Error messages - that may be implemented in a module for the PCD Entry. - Only One Error Number per PcdError, (multiple - ErrorMessage entries are permitted) and multiple - PcdError elements are permitted. - - - - - - One of the - following types of comparisons, which must be - able to evaluate to either true or false. - - - - - The PCD - Value must be space separated list of values. - Values are restricted to the data type of this - PCD. - - - - - - - - - - - - The PCD must - be within a specifed range of numeric values. - Restricted to C style Relational, Equality and - Logicial Operators and parenthesis are valid. - Only the CName for this PCD is permitted in - the ValidValueRange expression. All other - values must be numeric. - LValue (op - RValue)+ - - - - - A in-fix - logical expression using C style logical - operators. - - - - - - A hexadecimal - value for the error message as defined by - specifications. - The minLength - of 3 is required to handle the "0x" prefix to - the hex number. - - - - - - - - - - - This string - should be defined by specifications. There are - pre-defined error number ranges in the UEFI/PI - specificaiton. - - - - - - - - - - - - - - - - - - - - - - - - This section is used to describe - any PCD interdependencies or relationships. - - - - - - This entry must used - TokenSpaceGuidCName.PcdCname for every named PCD. Restricted - to Relational, Equality and Logical Operators (NOT, AND, OR, - GT, GE, EQ, LE, LT and XOR) and parenthesis are valid. Only - the TokenSpaceGuidCName.PcdCname us permitted to name PCDs - in the expression. All other values must be numeric. - LValue (op RValue)+ - - - - - - - - - - This section contains files that - are not part of the code distributed with this package. - - - - - - - Only required if different - from the Package Copyright. - - - - - Only required if different - from the Package License. - - - - - A one line description of - this section's content. - - - - - A complete description of - the files in this section. - - - - - This is the PackagePath - relative path and filename location within the ZIP file. - - - - - - - - If true, used by - installation tools to ensure that a file that must - be executable has the correct properties to permit - execution. - - - - - - - - - - - - - - - This section is used for any - processing instructions that may be custom to the content provided - by this package that are common to this package. - - - - - - - - - This is a single word - identifier for grouping similar content that does not fit into - previously defined sections or other sections of the - Distribution. - - - - - This can be used to - differentiate multiple sections with a grouping. - For example, a PRE_PROCESS - Identifier might indicate specific steps and tools required - before processing module content, while a different - UserExtensions section with a POST_PROCESS Identifier might - describe steps that need to be executed after operations on - the modules in this package. - - - - - - - - - - - - - - - Each module is uniquely identified by - it's GUID and Version number. Backward compatible releases of a module - need only change the version number, while non-backward compatible - changes require the GUID to change (resetting the version number to 1.0 - is optional.) - - - - - - - - - - This is the User Interface - Name for this Module. - - - - - - - This is a single - word BaseName that will be used to create a module - meta-data file. - This name should - also be used to create output file names and - directories. - - - - - - - - - This GUID and the Version - attribute uniquely identify a given Module. - - - - - - - - This value, along - with the GUID, is used to uniquely identify this - object. - Backward - compatible changes must make sure this number is - incremented from the most recent version. - Non-backward compatible changes require a new GUID, - and the version can be reset. - - - - - - - - - This is only required if - the Copyright is different from either the Package or - Distribution copyright. Multiple copyright lines are - permitted within this section. - - - - - This is only required if - the license is different from either the Package or - Distribution license. Multiple licenses are permitted - within this section. - - - - - A brief text description - of the module. - - - - - A complete description of - the module contents and/or features including a description - of the updates since the previous module release. - - - - - - - - - - - List general information about a - module, including the Supported Architectures, this module's type, - specifications the module is coded against, and other - informational content. - - - - - - One of the Enumerated - module types that limit the use of a module. - - - - - - For stand-alone modules - that are NOT part of any package, this is the path to the - root of the module as listed in the ZIP file. For modules - included in a package, this is the location, relative to the - root of the package (PackagePath) this module belongs to. - - - - - - This element is only - required for the PEIM that produces the PCD PPI or the DXE - Driver that produces the PCD Protocol. - - - - - - - - - - - - - - - - This is a list of other - specifications that this module is written against. These - entries can be used in #define statements (depending on the - build system implementation, they may be autogenerated.) - - - - - - - - - - - - - - Different firmware - execution paths may be taken based on a given state of the - hardware, firmware, or through feature settings. A BootMode - may be declared (PRODUCES) or discovered (CONSUMES) based on - these states and feature settings. The supported boot modes - map to the PI specification Boot Modes. The boot modes - listed with Recovery are to indicate that the BootMode is - valid during a recovery boot. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The module - always supports the given boot modes. - - - - - - The module may - support a given mode on some execution paths. - - - - - - The module will - change the boot mode. - - - - - The module will - change the boot mode on some exection paths. - - - - - - The package - creator does not know how the boot mode is used. - - - - - - - - - - - - - - The functions that make up - the Event, Timer, and Task Priority Services are used during - preboot to create, close, signal, and wait for events; to - set timers; and to raise and restore task priority levels as - defined in the UEFI specification. GUIDed events should be - listed in the Guids section. - - - - - - - - - - - The module will - register a notification function and calls the - function when it is signaled. - - - - - The module will - register a notification function and calls the - function when it is signaled on some execution - paths. - - - - - The module will - signal all events in an event group. - - - - - - The module will - signal all events in an event group under some - execution paths. - - - - - The package - creator does not know how an event is used. - - - - - - - - - - - - - - - - - - - - - - - - - This is a list of - non-GUIDed Hand Off Blocks (HOBs) produced or consumed by - this module. - - - - - - - - - - - - - - - - - - - - - - - A HOB must be - present in the system. - - - - - If present, the - HOB will be used. - - - - - The HOB is - always produced by the module. - - - - - The HOB may be - produced by the module under some execution paths. - - - - - - The package - creator knows that a HOB is used, but does not - know how it is used. - - - - - - - - - - - - - - - - - - - - This section may be included for - Modules that are copied from a different module. - - - - - - - This GUID and the Version - attribute uniquely identify the Module that this Module was - copied from. - - - - - - - This value, along - with the GUID, is used to uniquely identify this - object. - - - - - - - - - - - - - - A list of the different Library - Classes consumed by a driver, core and/or application module, or - produced by a Library module. - - - - - - - - - Used by tools to - identify different instances of libraries that provide - the library class. This keyword identifies the library - class this module needs to be linked against. - - - - - - - - - This GUID and - the Version attribute uniquely identify the - recommended Library Instance for this module . - - - - - - - - This - value, along with the GUID, is used to - uniquely identify this object. - - - - - - - - - - - - - - - - Library instances - can provide code for a library class, or may require - other library instances themselves. Since different - execution paths in a library (or module) may need - different library classes based on some setting, - library classes may not alway be required. - - - - - - - - - - - - - - - A FeatureFlag - attribute must evaluate to either true or false - it may - be a fixed value of true or false, a C name or an in-fix - expression. - - - - - - - - - - - - - - - This is the module - relative (ModuleProperties.Path) path and filename location - within the ZIP file. - - - - - - - The Family - attribute is used to restrict usage to a given - family of compilers, such as GCC or MSFT. Since not - all code processing tools use the same syntax, - especially for assembly, this field can be used to - identify different syntax. - - - - - - - - - - - - - - - - - - - - - - This is the module - relative (ModuleProperties.Path) path and filename - location within the ZIP file. - - - - - - - - - Binary - file distribution is limited to UEFI/PI - FFS leaf section file types. - - - - - - - - A - UEFI/PI FFS Leaf section file type, not - a raw PE32 file. - - - - - - - - - - - - - - - - - - - - - - This section - contains information about how the module was coded, - such as Compiler Tools, Flags, PCDs (only PatchPcd - and/or PcdEx) and Library Class Instances used to - build the binary. - - - - - - - The element is - the Patchable PCD Value that was used during the - build. - - - - - - - - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - - This - field is required if the Pcd Datum Type is - VOID* - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - Error - information implemented by the module. - - - - - - - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - - - - - - - - - - - - - - - - The element is - the DynamicEx PCD Value that was used during the - build. - - - - - - - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - - This - field is required if the Pcd Datum Type is - VOID* - - - - - - - - - - - - Error - information implemented by the module. - - - - - - - The - minLength of 3 is required to handle the - "0x" prefix to the hex number. - - - - - - - - - - - - - - - - - - - - - - - - - - - This is the - actual library instance that was used to link - against the module. - - - - - - This - GUID and the Version attribute uniquely - identify the actual Library Instance - linked in this module. - - - - - - - This - value, along with the GUID, is used to - uniquely identify this object. - - - - - - - - - - - - - - - - Any - description of OS, Tool, and flags for the - individual tool can go in this section. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This GUID and the - Version attribute uniquely identify Package that this - Module depends on. - - - - - - - This value, - along with the GUID, is used to uniquely - identify this object. If the version attribute - is not specified, the most recent version of - the package can be used. - - - - - - - - - - - - - - - - - - - - - - - - - - Only valid for - Variable GUID types. - This can be either a Hex Array or - Unicode Data. - - - - - - - - - - The module does - not install the GUID, and the GUID must be present - for the module to execute. - - - - - The module does - not install the GUID, however, the GUID will be - used if it is present. - - - - - The module - always installs the GUID. - - - - - The Module will - install the GUID under certain execution paths. - - - - - - The package - creator knows that a GUID is used, but does not - know how it is used. - - - - - - - - - - - - - - - - - - A listing of protocols required - or produced by this module. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A listing of PPIs required or - produced by this module. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - These elements specify - additional information about the module. This area may be used by - tools to generate code. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This section describes how a - platform is coded with respect to the platform configuration - knobs. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This is the PEI dependency - expression for a Dependency Section. - - - - - - An in-fix expression, of C - identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER - as well as parenthesis () in the in-fix notation. The - operators are restricted to grammar defined in the PI - specification. - - - - - - - - - - - This is the DXE dependency - expression for a Dependency Section. - - - - - - An in-fix expression, of C - identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER - as well as parenthesis () in the in-fix notation. The - operators are restricted to grammar defined in the PI - specification. - - - - - - - - - - - This is the SMM dependency - expression for a Dependency Section. - - - - - - An in-fix expression, of C - identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER - as well as parenthesis () in the in-fix notation. The - operators are restricted to grammar defined in the PI - specification. - - - - - - - - - - - - This section is used to provide - comments and/or list auxiliary files, such as pdb or map files. - - - - - - - - This is the path and - filename location within the ZIP file. - - - - - - - If true, used by - installation tools to ensure that a file that must - be executable has the correct properties to permit - execution. - - - - - - - - - - - - - - This section is used for any - processing instructions that may be custom to the content provided - by the distribution that are common to module. - The content is vendor specific. - The content can be plain text as - well as any user-defined, properly formatted XML structure. - - - - - - This is a single word - identifier for grouping similar content. For example, - ReferenceBuild might be used to identify non-PI compliant - build steps, with two different UserExtensions sections, one - with an Identifier of Prebuild, and another of PostBuild. Both - UserExtensions sections would use the same UserId. - - - - - - This can be any string used - to differentiate or identify this section from other - UserExtensions sections. - For example, a PRE_PROCESS - Identifier might indicate specific steps and tools required - before processing module content, while a different - UserExtensions section with a POST_PROCESS Identifier might - describe steps that need to be executed after operations on - this module. - - - - - - - - - - - This attribute is used when the - binaries are distributed for this module and no code generation from - source files is required. If set, then the BinaryFiles section - should be used, and any files listed in the SourceFiles section do - not have to be built. Additionally, the AsBuilt section for each - binary file must be included. - - - - - - - - - - - - - - - - This is the User Interface - Name for this Tools Distribution. - - - - - This is only required if - the Copyright is different from the Distribution Package - copyright. - - - - - This is only required if - the License is different from the Distribution Package - license. - - - - - This is only required if - the Abstract is different from the Distribution Package - Abstract. - - - - - This is only required if - the Description is different from the Distribution Package - Description. - - - - - - - - This is the path and filename - location within the ZIP file. - - - - - - - This is required for - tools that execute; it should not be used for - configuration files. - - - - - If true, used by - installation tools to ensure that a file that must be - executable has the correct properties to permit execution. - - - - - - - - - - - - - - - This section contains a list of files - that are not part of the code distributed with modules, packages or - tools. - - - - - - - - - The User interface name - for this content. - - - - - This is only required if - the Copyright is different from the Distribution Package - Copyright. - - - - - This is only required if - the License is different from the Distribution Package - License. - - - - - - - - - - This is the path and filename - location within the ZIP file. - - - - - - - If true, used by - installation tools to ensure that a file that must be - executable has the correct properties to permit execution. - - - - - - - - - - - - - - - - - - - - This is a single word identifier - for grouping similar content. For example, ReferenceBuild might be - used to identify non-PI compliant build steps, with two different - UserExtensions sections, one with an Identifier of Prebuild, and - another of PostBuild. Both UserExtensions sections would use the - same UserId. - - - - - This can be any string used to - differentiate or identify this section from other UserExtensions - sections. - For example, a PRE_PROCESS - Identifier might indicate specific steps and tools required before - processing distribution package content, while a different - UserExtensions section with a POST_PROCESS Identifier might describe - steps that need to be executed after operations on this content. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Any processor architecture not - listed above. The Architecture must be a target architecture of one - or more compiler tool chains. - - - - - - - - - - - - - Any other family of build - utilities for which compiler tools exist. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following module types are defined - by specifications. - Module types for components and - libraries defined for this distribution mechanism. - - - - - Use of this module is not - restricted. - - - - - This module is only applicable to - the DXE core. - - - - - This module is only applicable to - a DXE driver. - - - - - This module is only applicable to - a DXE runtime driver. - - - - - This module is only applicable to - an IPF DXE runtime driver. - - - - - This module is only applicable to - a DXE SMM driver. - - - - - This module is only applicable to - the PEI core. - - - - - This module is only valid for PEI - modules. - - - - - This module is only applicable to - Security phase. - - - - - This module is only valid for UEFI - drivers. - - - - - This module is only valid for UEFI - runtime drivers. - - - - - This module is only valid for UEFI - applications. - - - - - This module is only applicable to the SMM - core. - - - - - This content is restricted to a specific - implementation. - - - - - This enumeration is for use in a list that - where the package creator does not know the what module types are supported - by a module. - - - - - This pattern has been added for use in a - module lists - for future expansion. - - - - - - - - The following data types are defined - by the PCD specification (or PCD section of the UEFI/PI specifications.) - - - - - - - - - - - - - - - - - - - - - The Feature PCD is a binary, - evaluating to either true or false. This is used during build to - include/exclude content. It can also be used during execution to - force execution paths within drivers, or to enable/disable features - within a driver for a given platform. - - - - - The Fixed PCD is a #define value - that is set at build time. - - - - - The Patch PCD is a #define that is - set at build time, and that can be modified within a binary file. - Additional information, such as the offset location of the value, - along with it's length may need to be provided. - - - - - This PCD type has an overloaded - definition. Prior to build, the platform integrator may choose to - implement a PCD as Fixed, Patchable or a Dynamic PCD. If the - platform integrator choose to use the PCD as dynamic, then a PCD - driver is required in the platform (PEI/DXE/both) to track the PCD - in some sort of 'database' of these items. For Dynamic PCDs, the - PcdGet* must pass in the token space guid and the token number to - retrieve data (PcdSet* also needs these values.) - - - - - The PCD can only be used as - Dynamic, and the platform firmware must contain a driver to maintain - a 'database' of these items. For Dynamic PCDs, the PcdGet* must pass - in the token space guid and the token number to retrieve data - (PcdSet* also needs these values.) - - - - - - - - - - A GUID must contain five different - Hexadecimal character sets that are separated by a dash (-) character. - - - - - - - - - - The EDK II build system supports - workstations running one of the following supported operating systems. - This is the OS for the developer's workstation, not the target platform. - - - - - - For Windows 2003, Windows XP and - Windows Vista. - - - - - For Windows 2003, Windows XP and - Windows Vista. - - - - - - - - - Typically, this is used for - Windows Batch files. - - - - - Typically use for shell scripts - - valid for any Linux and Mac OS/X. - - - - - + + + + This schema defines the UEFI/PI Distribution Package + description (PKG) file. It describes the content of: + 1) Package descriptions with definitions and + headers. + 2) Modules in either source or binary format. (Note + that Binary format is for FFS leaf section file types only, complete FFS files + cannot be distributed using this distribution format.) + 3) The distribution of custom tools used to modify + the binary images to create UEFI/PI compliant images. + 4) Finally, it can be used to distribute other + miscellaneous content that is not specific to UEFI/PI images. + The Package Surface Area describes the content of + packages, while the Module Surface Area provides information relevant to source + and/or binary distributions. + + + + + + This header contains (legal) information + usually required for distributing both binary and/or source code. + + + + + + The list of packages in this + distribution. + Packages are groups of files and/or + modules that are similar in nature. + Packages are uniquely identified by a + package GUID and a package version. + A package can declare public mappings of + C names to GUID values. + A package can provide header files for + library classes and/or other industry standard definitions. + A package can also declare public + mappings of platform configuration database (PCD) "knobs" to + control features and operation of modules within a platform. + Finally, a package lists the library + instances and/or modules that are provided in a distribution package. + + + + + + The listing of UEFI/PI compliant modules + in this distribution that are NOT part of a Package. Every module that + is provided as part of a package needs to be described in a + PackageSurfaceArea.Modules section. + The ModuleSurfaceArea section describes + how each module in a distribution is coded, or, in the case of a binary + module distribution, how it was built. + UEFI/PI compliant libraries and modules + are uniquely identified by the Module's GUID and version number. + This section will typically be used for + modules that don't require any additional files that would be included + in a package. For example, the Enhanced FAT driver binary does not need + to have a package description, as no additional files are provided. + + + + + + This section is for distributing vendor + specific executable tools, tool source code and/or configuration files. + These tools are primarily for manipulating code and/or binary images. + Tools in this section + can: + 1) Parse build meta-data files to create + source code files and build scripts. + 2) Modify image files to conform to + UEFI/PI specifications. + 3) Generate binary files from certain + types of text/unicode files. + 4) Generate PCI Option Roms or Firmware + Device images. + 5) Implement external + encoding/decoding/signature/GUIDed tools. + 6) Distribution Package + create/install/remove tools. + + + + + The list of miscellaneous files in this + distribution. Any files that are not listed in either the Package, + Module or Tools sections can be listed here. This section can be used to + distribute specifications for packages and modules that are not + "industry standards" such as a specification for a chipset or + a video device. + + + + + The UserExtensions section is used to + disseminate processing instructions that may be custom to the content + provided by the distribution. This section contains information that is + common to all aspects of this disribution. + + + + + + + + + + + This section defines the content of the UEIF/PI + compliant Distribution Package Header. This is the only required element of a + UEFI/PI compliant distribution package. + + + + + + This is the User Interface Name for this + Distribution Package. + Each Distribution Package is uniquely + identified by it's GUID and Version number. + + + + + + + The reference name of + the Distribution Package file. This single word name can + be used by tools as a keyword or for directory and/or + file creation. + White space and special + characters (dash and underscore characters may be used) + are not permitted in this name. + + + + + + + + + This 128-bit GUID and the Version + attribute uniquely identify this Distribution Package. + Backward compatible releases of a + distribution package need only change the version number, while + non-backward compatible changes require the GUID to change (resetting + the version number to 1.0 is optional.) + + + + + + + This value, along with + the GUID, is used to uniquely identify this object. The + higher the number, the more recent the content. + + + + + + + + + + A string identifying who created this + distribution package. + + + + + The date and time this distribution was + created. The format is: YYYY-MM-DDThh:mm:ss, for example: + 2001-01-31T13:30:00 (note the T character separator between the calendar + date and the time. + + + + + The copyright for this file that is + generated by the creator of the distribution. If a derivative work is + generated from an existing distribution, then the existing copyright + must be maintained, and additional copyrights may be appended to the end + of this element. It may also be the primary copyright for all code + provided in the Distribution Package. + + + + + A license that describes any + restrictions on the use of this distribution. If a derivative work is + allowed by the original license and a derivative work is generated from + an existing distribution, then the existing license must be maintained, + and additional licenses may be appended to the end of this element. It + may also be the primary license for all code provided in the + distribution file. Alternatively, this may point to a filename that + contains the License. The file (included in the content zip file) will + be stored in the same location as the distribution package's .pkg file. + + + + + + A one line description of the + Distribution Package. + + + + + A complete description of the + Distribution Package. This description may include the release name of + the file, the version of the file, and a complete description of the + file contents and/or features including a description of the updates + since the previous file release. + + + + + The packaging utilities will use this + MD5 sum value of the included ZIP file containing files and/or code. If + this element is not present, then installation tools should assume that + the content is correct, or that other methods may be needed to verify + content. + + + + + This version of this XML Schema is 1.1 + Changes to 1.1 from 1.0 + #1 Updated to present date and new + version which is important to reflect the present state of the + matter + #2 Added definition/enumeration of + UNDEFIND type 2 is important since there is a large body of legacy code + for which the GUID’s and other code/data objects were not decorated with + their usage. This document will allow for importing today’s source + artifacts and producing decorations using the ‘Undefined’ versus having + an error + #3 Allow for inclusion of ARM and future + architecture types + + + + + + If set to true, all content within this + Distribution Package should NOT be modified. The default permits + modification of all content. + + + + + If set to true, then the content can be + repackaged into another distribution package. The default prohibits + repackaging the Distribution content. + + + + + + + + + A package is a collection of related objects - + Includes, Libraries and Modules. + Each package is uniquely identified by it's GUID and + Version number. Backward compatible releases of a package need only change the + version number, while non-backward compatible changes require the GUID to change + (resetting the version number to 1.0 is optional.) + + + + + + + + + + This is the User Interface + Name for this package. + + + + + + + This is a + single word BaseName of the package. This BaseName + can be used by tools as a keyword and for + directory/file creation. + + + + + + + + + This GUID and the Version + attribute uniquely identify a given package. + + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. + Backward + compatible changes must make sure this number is + incremented from the most recent version. + Non-backward compatible changes require a new + GUID, and the version can be reset. + + + + + + + + + + If the package requires a + different copyright than the distribution package, this + element can list one or more copyright lines. + + + + + + If the package requires + licenses that are different from the distribution package + license, this element can contain one or more license text + paragraphs (or license filenames.) + + + + + A one line description of + this package. + + + + + A complete description of a + package. This description may include the release name of + the package, the version of the package, and a complete + description of the package contents and/or features + including a description of the updates since the previous + package’s release. + + + + + This element is the location + (in the ZIP file) for the root directory of a package. + + + + + + + + + + + The term cloned is used here to indicate + that this package as been copied and modified to a completely different + package. An example might be for a new generation of chipsets that have + few or no elements in common with the original. + + + + + + This GUID and the Version + attribute uniquely identify the Package that this Package + was copied from. + + + + + + + This value, + along with the GUID, is used to uniquely identify + the package that this package was cloned from. + + + + + + + + + + + + + + + Library Classes are public interfaces + that can be used by modules. One or more library instances can implement + a library class, however only one library instance can be linked to an + individual module. This provides the platform integrator with the + flexibility of choosing one library instance's implementation over a + different library instance. + + + + + + + + + The header file + provides definitions and function prototypes for a + library class. Modules can be coded against these + functions, using the definitions in this header, + without concerning themselves about the libraries' + implementation details. This is a PackagePath + relative path and filename for the include file. + + + + + + + + + This GUID and + the Version attribute uniquely identify the + Recommended Library Instance. + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. If this value is not specified, then + any version of the library instance is + recommended. + + + + + + + + + + + + + + The single word name + of the Library Class that module developers will use + to identify a library class dependency. + + + + + + + + + + + + + + This section is used to list header + files for industry standards not under the auspices of UEFI.org. For + example, headers that contain definitions and data structures for the + USB specifications. + + + + + + + + + The package + relative path and filename (in the content zip + file) of the industry standard include file. + + + + + + + + + + + + + + + All top level header files that are + included by a package that are not listed above. They cannot + be: + 1) Local to a module (module specific.) + 2) An industry standard header. + 3) A library class header. + + + + + + + + + + This is the + Package relative path and filename location within + the content ZIP file. + + + + + + + + + + + + + + + + + + + + + + + + This section lists the + Module Surface Area for all modules provided with this + package. + + + + + + + + + + This section defines the mapping of GUID + C names to GUID values as a Registry Format GUID. + Modules that use these GUIDs must + specify their dependency on this package. + + + + + + Individual GUID Declarations + + + + + + + + + + + + + + + + + + + + + This section defines the mapping of + Protocol C names to GUID values as a Registry Format GUID. + Modules that use these Protocols must + specify their dependency on this package. + + + + + + Individual Protocol + Declarations + + + + + + + + + + + + + + + + + + + This section defines the mapping of Ppi + C names to GUID values as a Registry Format GUID. + Modules that use these Ppis must specify + their dependency on this package. + + + + + + Individual PPI Declarations + + + + + + + + + + + + + + + + + + + + This section is used to declare platform + configuration knobs that are defined by this package. + Modules that use these PCD values must + specify their dependency on this package. + + + + + + + + + Specifies the C + name of the Token Space GUID of which this PCD + Entry is a member. This C name should also be + listed in the GUIDs section, (specified above,) + where the C name is assigned to a GUID value. + + + + + + Specifies the + 32-bit token value for this PCD Entry. The Token + number must be unique to the Token Space that + declares the PCD. + The minLength of + 3 is required to handle the "0x" prefix to the hex + number. + + + + + + + + + + + + A string that + contains the data type of this PCD Entry. PCD data + types are restricted to the following set:UINT8, + UINT16, UINT32, UINT64, VOID*, BOOLEAN. + + + + + + A string that + contains one or more PCD Item types separated by + spaces. The PCD Item types are restricted to + FeaturePcd, FixedPcd, PatchPcd, Pcd and/or PcdEx. + + + + + + + This is a + recommended maximum data size for VOID* data + types, the actual value should be defined by the + Platform Integrator. It is not required for the + other data types. + The minLength of + 3 is required to handle the "0x" prefix to the hex + number. + + + + + + + + + + + + + Valid Error + messages that may be implemented in a module for + the PCD Entry. Only One Error Number per PcdError, + (multiple ErrorMessage entries are permitted) and + multiple PcdError elements are permitted. + + + + + + + One of the + following types of comparisons, which must be able + to evaluate to either true or false. + + + + + The PCD Value + must be space separated list of values. Values are + restricted to the data type of this PCD. + + + + + + + + + + + + + The PCD must + be within a specifed range of numeric values. + Restricted to C style Relational, Equality and + Logicial Operators and parenthesis are valid. Only + the CName for this PCD is permitted in the + ValidValueRange expression. All other values must + be numeric. + LValue (op + RValue)+ + + + + + A in-fix + logical expression using C style logical + operators. + + + + + + A hexadecimal + value for the error message as defined by + specifications. + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + This string + should be defined by specifications. There are + pre-defined error number ranges in the UEFI/PI + specificaiton. + + + + + + + + + + + + + + + + + + + + + + + + This section is used to describe any PCD + interdependencies or relationships. + + + + + + This entry must used + TokenSpaceGuidCName.PcdCname for every named PCD. Restricted + to Relational, Equality and Logical Operators (NOT, AND, OR, + GT, GE, EQ, LE, LT and XOR) and parenthesis are valid. Only + the TokenSpaceGuidCName.PcdCname us permitted to name PCDs + in the expression. All other values must be numeric. + LValue (op RValue)+ + + + + + + + + + + This section contains files that are not + part of the code distributed with this package. + + + + + + Only required if different + from the Package Copyright. + + + + + Only required if different + from the Package License. + + + + + A one line description of + this section's content. + + + + + A complete description of + the files in this section. + + + + + This is the PackagePath + relative path and filename location within the ZIP file. + + + + + + + + If true, used + by installation tools to ensure that a file that + must be executable has the correct properties to + permit execution. + + + + + + + + + + + + + + + This section is used for any processing + instructions that may be custom to the content provided by this package + that are common to this package. + + + + + + + + This is a single word identifier + for grouping similar content that does not fit into previously + defined sections or other sections of the Distribution. + + + + + + This can be used to + differentiate multiple sections with a grouping. + For example, a PRE_PROCESS + Identifier might indicate specific steps and tools required + before processing module content, while a different + UserExtensions section with a POST_PROCESS Identifier might + describe steps that need to be executed after operations on the + modules in this package. + + + + + + + + + + + + + + + Each module is uniquely identified by it's GUID and + Version number. Backward compatible releases of a module need only change the + version number, while non-backward compatible changes require the GUID to change + (resetting the version number to 1.0 is optional.) + + + + + + + + + + This is the User Interface + Name for this Module. + + + + + + + This is a + single word BaseName that will be used to create a + module meta-data file. + This name + should also be used to create output file names + and directories. + + + + + + + + + This GUID and the Version + attribute uniquely identify a given Module. + + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. + Backward + compatible changes must make sure this number is + incremented from the most recent version. + Non-backward compatible changes require a new + GUID, and the version can be reset. + + + + + + + + + + This is only required if the + Copyright is different from either the Package or + Distribution copyright. Multiple copyright lines are + permitted within this section. + + + + + This is only required if the + license is different from either the Package or Distribution + license. Multiple licenses are permitted within this + section. + + + + + A brief text description of + the module. + + + + + A complete description of + the module contents and/or features including a description + of the updates since the previous module release. + + + + + + + + + + + List general information about a module, + including the Supported Architectures, this module's type, + specifications the module is coded against, and other informational + content. + + + + + + One of the Enumerated module + types that limit the use of a module. + + + + + For stand-alone modules that + are NOT part of any package, this is the path to the root of + the module as listed in the ZIP file. For modules included + in a package, this is the location, relative to the root of + the package (PackagePath) this module belongs to. + + + + + + This element is only + required for the PEIM that produces the PCD PPI or the DXE + Driver that produces the PCD Protocol. + + + + + + + + + + + + + + + + This is a list of other + specifications that this module is written against. These + entries can be used in #define statements (depending on the + build system implementation, they may be autogenerated.) + + + + + + + + + + + + + + Different firmware execution + paths may be taken based on a given state of the hardware, + firmware, or through feature settings. A BootMode may be + declared (PRODUCES) or discovered (CONSUMES) based on these + states and feature settings. If the usage is UNDEFINE, it + implies that a Boot Mode is used, but the package creator + does not know how it is used. The supported boot modes map + to the PI specification Boot Modes. The boot modes listed + with Recovery are to indicate that the BootMode is valid + during a recovery boot. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The module + always supports the given boot modes. + + + + + + The module may + support a given mode on some execution paths. + + + + + + The module + will change the boot mode. + + + + + The module + will change the boot mode on some exection paths. + + + + + + The package + creator does not know how the boot mode is used. + + + + + + + + + + + + + + The functions that make up + the Event, Timer, and Task Priority Services are used during + preboot to create, close, signal, and wait for events; to + set timers; and to raise and restore task priority levels as + defined in the UEFI specification. GUIDed events should be + listed in the Guids section. + + + + + + + + + + + The module + will register a notification function and calls + the function when it is signaled. + + + + + + The module + will register a notification function and calls + the function when it is signaled on some execution + paths. + + + + + The module + will signal all events in an event group. + + + + + + The module + will signal all events in an event group under + some execution paths. + + + + + The package + creator does not know how an event is used. + + + + + + + + + + + + + + + + + + + + + + + + + This is a list of non-GUIDed + Hand Off Blocks (HOBs) produced or consumed by this module. + + + + + + + + + + + + + + + + + + + + + + + + A HOB must be + present in the system. + + + + + If present, + the HOB will be used. + + + + + The HOB is + always produced by the module. + + + + + The HOB may be + produced by the module under some execution paths. + + + + + + The package + creator knows that a HOB is used, but does not + know how it is used. + + + + + + + + + + + + + + + + + + + This section may be included for Modules + that are copied from a different module. + + + + + + This GUID and the Version + attribute uniquely identify the Module that this Module was + copied from. + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. + + + + + + + + + + + + + + A list of the different Library Classes + consumed by a driver, core and/or application module, or produced by a + Library module. + + + + + + + + + Used by tools + to identify different instances of libraries that + provide the library class. This keyword identifies + the library class this module needs to be linked + against. + + + + + + + + This GUID and + the Version attribute uniquely identify the + recommended Library Instance for this module . + + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. + + + + + + + + + + + + + + + Library + instances can provide code for a library class, or + may require other library instances themselves. + Since different execution paths in a library (or + module) may need different library classes based + on some setting, library classes may not alway be + required. + + + + + + + + + + + + + + A FeatureFlag + attribute must evaluate to either true or false - it + may be a fixed value of true or false, a C name or + an in-fix expression. + + + + + + + + + + + + + + + This is the module relative + (ModuleProperties.Path) path and filename location within + the ZIP file. + + + + + + + The Family + attribute is used to restrict usage to a given + family of compilers, such as GCC or MSFT. Since + not all code processing tools use the same syntax, + especially for assembly, this field can be used to + identify different syntax. + + + + + + + + + + + + + + + + + + + + + + + + This is the + module relative (ModuleProperties.Path) path and + filename location within the ZIP file. + + + + + + + + + + Binary file + distribution is limited to UEFI/PI FFS leaf + section file types. + + + + + + + A UEFI/PI FFS + Leaf section file type, not a raw PE32 file. + + + + + + + + + + + + + + + + + + + + + + + + + + + This section + contains information about how the module was + coded, such as Compiler Tools, Flags, PCDs (only + PatchPcd and/or PcdEx) and Library Class Instances + used to build the binary. + + + + + + + The element is + the Patchable PCD Value that was used during the + build. + + + + + + + + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + + This field is + required if the Pcd Datum Type is VOID* + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + Error + information implemented by the module. + + + + + + + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + + + + + + + + + + + + + + + + The element is + the DynamicEx PCD Value that was used during the + build. + + + + + + + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + + This field is + required if the Pcd Datum Type is VOID* + + + + + + + + + + + + + Error + information implemented by the module. + + + + + + + The minLength + of 3 is required to handle the "0x" prefix to the + hex number. + + + + + + + + + + + + + + + + + + + + + + + + + + This is the + actual library instance that was used to link + against the module. + + + + + + This GUID and + the Version attribute uniquely identify the actual + Library Instance linked in this module. + + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. + + + + + + + + + + + + + + + Any + description of OS, Tool, and flags for the + individual tool can go in this section. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This GUID and + the Version attribute uniquely identify Package + that this Module depends on. + + + + + + + This value, + along with the GUID, is used to uniquely identify + this object. If the version attribute is not + specified, the most recent version of the package + can be used. + + + + + + + + + + + + + + + + + + + + + + + + + + + Only valid for + Variable GUID types. + This can be either a Hex Array or + C string in unicode format: L"string" Data. + + + + + + + + + + + The module does + not install the GUID, and the GUID must be present + for the module to execute. + + + + + The module + does not install the GUID, however, the GUID will + be used if it is present. + + + + + The module + always installs the GUID. + + + + + The Module + will install the GUID under certain execution + paths. + + + + + The package + creator knows that a GUID is used, but does not + know how it is used. + + + + + + + + + + + + + + + + + + + A listing of protocols required or + produced by this module. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A listing of PPIs required or produced + by this module. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + These elements specify additional + information about the module. This area may be used by tools to generate + code. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This section describes how a platform is + coded with respect to the platform configuration knobs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is the PEI dependency expression + for a Dependency Section. + + + + + + An in-fix expression, of C + identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER + as well as parenthesis () in the in-fix notation. The + operators are restricted to grammar defined in the PI + specification. + + + + + + + + + + + + + + This is the DXE dependency expression + for a Dependency Section. + + + + + + An in-fix expression, of C + identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER + as well as parenthesis () in the in-fix notation. The + operators are restricted to grammar defined in the PI + specification. + + + + + + + + + + + + + + This is the SMM dependency expression + for a Dependency Section. + + + + + + An in-fix expression, of C + identifiers and TRUE, FALSE, AND, OR, NOT, BEFORE, and AFTER + as well as parenthesis () in the in-fix notation. The + operators are restricted to grammar defined in the PI + specification. + + + + + + + + + + + + + + + This section is used to provide comments + and/or list auxiliary files, such as pdb or map files. + + + + + + + + + + + + + + + + This is the path and + filename location within the ZIP file. + + + + + + + If true, used + by installation tools to ensure that a file that + must be executable has the correct properties to + permit execution. + + + + + + + + + + + + + + This section is used for any processing + instructions that may be custom to the content provided by the + distribution that are common to module. + The content is vendor specific. + The content can be plain text as well as + any user-defined, properly formatted XML structure. + + + + + This is a single word identifier + for grouping similar content. For example, ReferenceBuild might + be used to identify non-PI compliant build steps, with two + different UserExtensions sections, one with an Identifier of + Prebuild, and another of PostBuild. Both UserExtensions sections + would use the same UserId. + + + + + This can be any string used to + differentiate or identify this section from other UserExtensions + sections. + For example, a PRE_PROCESS + Identifier might indicate specific steps and tools required + before processing module content, while a different + UserExtensions section with a POST_PROCESS Identifier might + describe steps that need to be executed after operations on this + module. + + + + + + + + + + + This attribute is used when the binaries are + distributed for this module and no code generation from source files is + required. If set, then the BinaryFiles section should be used, and any files + listed in the SourceFiles section do not have to be built. Additionally, the + AsBuilt section for each binary file must be included. + + + + + + + + + + + + + + + + This is the User Interface + Name for this Tools Distribution. + + + + + This is only required if the + Copyright is different from the Distribution Package + copyright. + + + + + This is only required if the + License is different from the Distribution Package license. + + + + + + This is only required if the + Abstract is different from the Distribution Package + Abstract. + + + + + This is only required if the + Description is different from the Distribution Package + Description. + + + + + + + + This is the path and filename location + within the ZIP file. + + + + + + + This is required for + tools that execute; it should not be used for + configuration files. + + + + + If true, used by + installation tools to ensure that a file that must be + executable has the correct properties to permit + execution. + + + + + + + + + + + + + + This section contains a list of files that are not + part of the code distributed with modules, packages or tools. + + + + + + + + + The User interface name for + this content. + + + + + This is only required if the + Copyright is different from the Distribution Package + Copyright. + + + + + This is only required if the + License is different from the Distribution Package License. + + + + + + + + + + + + + + + + + + + This is the path and filename location + within the ZIP file. + + + + + + + If true, used by + installation tools to ensure that a file that must be + executable has the correct properties to permit + execution. + + + + + + + + + + + + + + + + + + + This is a single word identifier for + grouping similar content. For example, ReferenceBuild might be used to + identify non-PI compliant build steps, with two different UserExtensions + sections, one with an Identifier of Prebuild, and another of PostBuild. Both + UserExtensions sections would use the same UserId. + + + + + This can be any string used to differentiate + or identify this section from other UserExtensions sections. + For example, a PRE_PROCESS Identifier might + indicate specific steps and tools required before processing distribution + package content, while a different UserExtensions section with a + POST_PROCESS Identifier might describe steps that need to be executed after + operations on this content. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any processor architecture not listed above. + The Architecture must be a target architecture of one or more compiler tool + chains. + + + + + + + + + + + + + Any other family of build utilities for + which compiler tools exist. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The following module types are defined by + specifications. + Module types for components and libraries defined + for this distribution mechanism. + + + + + Use of this module is not restricted. + + + + + + This module is only applicable to the DXE + core. + + + + + This module is only applicable to a DXE + driver. + + + + + This module is only applicable to a DXE + runtime driver. + + + + + This module is only applicable to an IPF DXE + runtime driver. + + + + + This module is only applicable to a DXE SMM + driver. + + + + + This module is only applicable to the PEI + core. + + + + + This module is only valid for PEI modules. + + + + + + This module is only applicable to Security + phase. + + + + + This module is only valid for UEFI drivers. + + + + + + This module is only valid for UEFI runtime + drivers. + + + + + This module is only valid for UEFI + applications. + + + + + This module is only applicable to the SMM + core. + + + + + This content is restricted to a specific + implementation. + + + + + This enumeration is for use in a list that + where the package creator does not know the what module types are supported + by a module. + + + + + This pattern has been added for use in a + module lists - for future expansion. + + + + + + + + The following data types are defined by the PCD + specification (or PCD section of the UEFI/PI specifications.) + + + + + + + + + + + + + + + + + + + + The Feature PCD is a binary, evaluating to + either true or false. This is used during build to include/exclude content. + It can also be used during execution to force execution paths within + drivers, or to enable/disable features within a driver for a given platform. + + + + + + The Fixed PCD is a #define value that is set + at build time. + + + + + The Patch PCD is a #define that is set at + build time, and that can be modified within a binary file. Additional + information, such as the offset location of the value, along with it's + length may need to be provided. + + + + + This PCD type has an overloaded definition. + Prior to build, the platform integrator may choose to implement a PCD as + Fixed, Patchable or a Dynamic PCD. If the platform integrator choose to use + the PCD as dynamic, then a PCD driver is required in the platform + (PEI/DXE/both) to track the PCD in some sort of 'database' of these items. + For Dynamic PCDs, the PcdGet* must pass in the token space guid and the + token number to retrieve data (PcdSet* also needs these values.) + + + + + + The PCD can only be used as Dynamic, and the + platform firmware must contain a driver to maintain a 'database' of these + items. For Dynamic PCDs, the PcdGet* must pass in the token space guid and + the token number to retrieve data (PcdSet* also needs these values.) + + + + + + + + + + + A GUID must contain five different Hexadecimal + character sets that are separated by a dash (-) character. + + + + + + + + + The EDK II build system supports workstations + running one of the following supported operating systems. This is the OS for the + developer's workstation, not the target platform. + + + + + For Windows 2003, Windows XP and Windows + Vista. + + + + + For Windows 2003, Windows XP and Windows + Vista. + + + + + + + + + Typically, this is used for Windows Batch + files. + + + + + Typically use for shell scripts - valid for + any Linux and Mac OS/X. + + + + + diff --git a/BaseTools/Conf/build_rule.template b/BaseTools/Conf/build_rule.template index ff5af1ce78..652c9f3ee7 100644 --- a/BaseTools/Conf/build_rule.template +++ b/BaseTools/Conf/build_rule.template @@ -305,7 +305,7 @@ # #The below 2 lines are only needed for UNIXGCC tool chain, which genereates PE image directly # - -$(OBJCOPY) --add-gnu-debuglink=$(DEBUG_DIR)(+)$(MODULE_NAME).debug ${src} + -$(OBJCOPY) $(OBJCOPY_ADDDEBUGFLAG) ${src} -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR) "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS) diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template index c8af70495d..f1176d6214 100644 --- a/BaseTools/Conf/tools_def.template +++ b/BaseTools/Conf/tools_def.template @@ -1969,6 +1969,8 @@ NOOPT_DDK3790xASL_IPF_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /LTCG /DLL /OPT:REF *_*_*_OBJCOPY_FLAGS = objcopy not needed for *_*_*_SYMRENAME_PATH = echo *_*_*_SYMRENAME_FLAGS = Symbol renaming not needed for +DEBUG_*_*_OBJCOPY_ADDDEBUGFLAG = --add-gnu-debuglink=$(DEBUG_DIR)\$(MODULE_NAME).debug +RELEASE_*_*_OBJCOPY_ADDDEBUGFLAG = DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-array-bounds -c -include AutoGen.h DEFINE GCC_IA32_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 -mno-stack-arg-probe @@ -2473,7 +2475,7 @@ DEFINE GCC45_ASM_FLAGS = DEF(GCC44_ASM_FLAGS) *_ELFGCC_IA32_CC_FLAGS = -m32 -g -fshort-wchar -fno-strict-aliasing -Wall -malign-double -c -include $(DEST_DIR_DEBUG)/AutoGen.h -DSTRING_ARRAY_NAME=$(BASE_NAME)Strings *_ELFGCC_IA32_SLINK_FLAGS = -*_ELFGCC_IA32_DLINK_FLAGS = -melf_i386 -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) +*_ELFGCC_IA32_DLINK_FLAGS = -melf_i386 -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map #*_ELFGCC_IA32_DLINK_FLAGS = -melf_i386 -nostdlib -n -q -Ttext 0x220 --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) *_ELFGCC_IA32_ASM_FLAGS = -m32 -c -x assembler -imacros $(DEST_DIR_DEBUG)/AutoGen.h *_ELFGCC_IA32_PP_FLAGS = -m32 -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h @@ -2496,7 +2498,7 @@ DEFINE GCC45_ASM_FLAGS = DEF(GCC44_ASM_FLAGS) *_ELFGCC_X64_RC_PATH = DEF(ELFGCC_BIN)/objcopy *_ELFGCC_X64_CC_FLAGS = -Os -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-missing-braces -Wno-address -Wno-array-bounds -c -include AutoGen.h -D_EFI_P64 -*_ELFGCC_X64_DLINK_FLAGS = -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) +*_ELFGCC_X64_DLINK_FLAGS = -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map *_ELFGCC_X64_SLINK_FLAGS = *_ELFGCC_X64_ASM_FLAGS = -c -x assembler -imacros $(DEST_DIR_DEBUG)/AutoGen.h *_ELFGCC_X64_PP_FLAGS = -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h @@ -2518,7 +2520,7 @@ DEFINE GCC45_ASM_FLAGS = DEF(GCC44_ASM_FLAGS) *_ELFGCC_IPF_RC_PATH = DEF(ELFGCC_BIN)/objcopy *_ELFGCC_IPF_CC_FLAGS = -Os -fshort-wchar -Wall -Werror -c -include AutoGen.h -D_EFI_P64 -*_ELFGCC_IPF_DLINK_FLAGS = -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) +*_ELFGCC_IPF_DLINK_FLAGS = -nostdlib --shared --entry $(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map *_ELFGCC_IPF_SLINK_FLAGS = *_ELFGCC_IPF_ASM_FLAGS = -c -x assembler -imacros $(DEST_DIR_DEBUG)/AutoGen.h *_ELFGCC_IPF_PP_FLAGS = -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h diff --git a/BaseTools/ReadMe.txt b/BaseTools/ReadMe.txt index 37691e98fd..beda3a81a6 100644 --- a/BaseTools/ReadMe.txt +++ b/BaseTools/ReadMe.txt @@ -49,122 +49,4 @@ Current state of the tools is Proto-Type - not all tool functions have been impl and there may be bugs in these tools. These tools are under constant development at this time. -3. Tool usage introduction. -BaseTools Simple Usage: -1) Change the directory to the EDK2 root directory, where the edksetup.bat is -2) Run "edksetup.bat NewBuild" -3) Set the ACTIVE_PLATFORM to your desired platform description file - (%WORKSPACE%\Conf\target.txt) -4) To build platform, run "build" command in non-module directory -5) To build module individually, run "build" command in module directory, i.e. where the - *.inf file is - -Notes: -1) The tree structure generated by build tools is similar to Ant build system. -2) Makefile can be called directly by nmake for both top level platform and module. But - after you call "nmake cleanall", you have to call "build" command to rebuild platform - or modules because the AutoGen.* files have been be removed. The "makefile" itself - cannot generate AutoGen.* files. Only "build" command can. -3) All .exe binary file including C and python tools are generated from: - r1911 \BaseTools\Source\. - -Brief usage for Migration Tool MigrationMsa2Inf.exe: -1. Command line format: - MigrationMsa2Inf [options] -2. Input Files: - A syntactically valid MSA file -3. Output Files: - An extended INF file with possible auto-generated EntryPoint.c, CommonHeader.h/CommonHeader.txt, depending on options and module contents. -4. Prerequisite: - a. The workspace directory must be specified either by environment variable or -w option. - b. The Framework Database file must exist to specify the available packages in current workspace. - Two possible locations are: (The first location overrides the second) - $(WORKSPACE)\Tools\Conf\FrameworkDatabase.db - $(WORKSPACE)\Conf\FrameworkDatabase.db. - The field in FrameworkDatabase.db lists all available packages in current workspace. - One example: - - MdePkg/MdePkg.nspd - MdeModulePkg/MdeModulePkg.spd - IntelFrameworkPkg/IntelFrameworkPkg.spd - - The package list in FrameworkDatabase.db is important to the final quality of migration: - (1) It suggests the new package location: Translate package dependency Guid in MSA to Workspace relative path. - If the package dependency Guid cannot be found in current workspace a warning message is raised. - (2) It collects the Protocol/Guid/Ppi GuidCName a package contains. - The GuidCName acts as "clue" to add e.g. #include in CommonHeader.h - -5. Example: - WORKSAPCE has already been set: $(WORKSPACE) = c:\work\EdkII. - - a. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -o c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.inf - b. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a - Example a & b are equivalent to migrate WinNtThunk driver from EDKII to EDKII' code base. - - c. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a -c - The extra "-c" option performs several hardcode mapping due to the naming change in EDKII': - OldMdePkg Guid -> MdePkgGuid, - EdkModulePkg Guid -> MdeModulePkgGuid, - EdkGraphicsLib -> GraphicsLib - HiiLib -> HiiLibFramework - ... - - d. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -m - The extra "-m" option suppresses the generation of "CommonHeader.h" and leave all C files intact. - Instead, it generates "CommonHeader.txt". Developers can manually copy its content to a local common header file in a module. - -6. Known Limitations: - a. Tool does not handle Exit Boot Services Callback & Virtual Address Changed Event. Developers need to handle it manually. - b. The #include is based on library class naming convention: The header filename for "AbcLib" class are "AbcLib.h" by convention. - c. The #include , and are added based on gGuidCName listed in MSA. - If a GuidCName cannot map to a package Guid/Protocol/Ppi header file, a warning message is raised. - If a module uses the definition in a pakcage Guid/Protocol/Ppi header file without list its associative GuidCName, the build will beak. Developer needs to manually add the include statement. - d. The [Depex] sections are generated from DXS files with Guid Macro translated to Guid CName by naming convention, etc. - If tool fails to "guess" the Guid CName from Guid Macro, it will leave the GuidMacro in [Depex] section for manual resolution. - e. When tool generates [Sources] section, the modifiers for source files are lost. (Need to add proper tool chain, etc) - f. When tool generates [LibraryClasses] section, the recommended library instances are lost. (No impact to build) - -7. Pyton Source - BaseTools\Source\Python\MigrationMsa2Inf - -Brief usage for Migration Tool Spd2Dec.exe: -1. Command line format: - Spd2Dec [options] input_filename -2. Input File: - A syntactically valid SPD file -3. Output Files: - A DEC file whose syntax confirms to DEC spec. - -4. Example: - a. Spd2Dec -o c:\work\EdkII\Nt32Pkg\Nt32.spd c:\work\EdkII\Nt32Pkg\Nt32.dec - b. Spd2Dec -a c:\work\EdkII\Nt32Pkg\Nt32.spd - Example a & b are equivalent to migrate Nt32 package SPD file from EDKII to EDKII' snytax. - -6. Pyton Source - BaseTools\Source\Python\spd2dec - -Brief usage for Migration Tool Fpd2Dsc.exe: -1. Command line format: - Fpd2Dsc [options] input_filename -2. Input File: - A syntactically valid FPD file -3. Output Files: - A DSC file which syntax confirms to DSC spec. -4. Prerequisite: - a. The workspace directory must be specified either by environment variable or -w option. - -5. Example: - WORKSAPCE has already been set: $(WORKSPACE) = c:\work\EdkII. - - a. Fpd2Dsc -o c:\work\EdkII\Nt32Pkg\Nt32.dsc c:\work\EdkII\Nt32Pkg\Nt32.fpd - b. Fpd2Dsc -a c:\work\EdkII\Nt32Pkg\Nt32.fpd - Example a & b are equivalent to migrate Nt32 platform description file from EDKII to EDKII' snytax. - -6. Known Limitations: - a. Tool does not handle Libraries Section since no related info in original FPD file. Developers need to handle it manually in the output DSC file. - b. If MSA file which is corresponds to module guid could not be found in currect workspace, tool will dump the module guid. - -7. Pyton Source - BaseTools\Source\Python\fpd2dsc - -4-Mar-2010 +26-OCT-2011 diff --git a/BaseTools/Source/C/Common/BasePeCoff.c b/BaseTools/Source/C/Common/BasePeCoff.c index 54bd099e1d..816f309f66 100644 --- a/BaseTools/Source/C/Common/BasePeCoff.c +++ b/BaseTools/Source/C/Common/BasePeCoff.c @@ -979,6 +979,7 @@ Returns: ImageContext, Section->VirtualAddress + Section->Misc.VirtualSize - 1 ); + // // If the base start or end address resolved to 0, then fail. // @@ -987,6 +988,7 @@ Returns: return RETURN_LOAD_ERROR; } + if (ImageContext->IsTeImage) { Base = (CHAR8 *) ((UINTN) Base + sizeof (EFI_TE_IMAGE_HEADER) - (UINTN) TeHdr->StrippedSize); End = (CHAR8 *) ((UINTN) End + sizeof (EFI_TE_IMAGE_HEADER) - (UINTN) TeHdr->StrippedSize); diff --git a/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c b/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c index 01685964f1..f83c532b25 100644 --- a/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c +++ b/BaseTools/Source/C/EfiLdrImage/EfiLdrImage.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -181,7 +181,6 @@ Returns: CHAR8* OutputFileName = NULL; CHAR8* InputFileNames[MAX_PE_IMAGES + 1]; UINT8 InputFileCount = 0; - BOOLEAN QuietFlag = FALSE; UINT64 DebugLevel = 0; UINT64 VerboseLevel = 0; EFI_STATUS Status = EFI_SUCCESS; @@ -220,7 +219,6 @@ Returns: } if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) { - QuietFlag = TRUE; argc --; argv ++; continue; diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c index 9fdcb47d6b..45a2c8022d 100644 --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -2801,7 +2801,6 @@ Returns: PE_COFF_LOADER_IMAGE_CONTEXT OrigImageContext; EFI_PHYSICAL_ADDRESS XipBase; EFI_PHYSICAL_ADDRESS NewPe32BaseAddress; - EFI_PHYSICAL_ADDRESS *BaseToUpdate; UINTN Index; EFI_FILE_SECTION_POINTER CurrentPe32Section; EFI_FFS_FILE_STATE SavedState; @@ -2818,7 +2817,6 @@ Returns: Index = 0; MemoryImagePointer = NULL; - BaseToUpdate = NULL; TEImageHeader = NULL; ImgHdr = NULL; SectionHeader = NULL; @@ -2992,7 +2990,6 @@ Returns: } NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; - BaseToUpdate = &XipBase; break; case EFI_FV_FILETYPE_DRIVER: @@ -3008,7 +3005,6 @@ Returns: return EFI_ABORTED; } NewPe32BaseAddress = XipBase + (UINTN) CurrentPe32Section.Pe32Section + sizeof (EFI_PE32_SECTION) - (UINTN)FfsFile; - BaseToUpdate = &XipBase; break; default: diff --git a/BaseTools/Source/C/GenFw/Elf32Convert.c b/BaseTools/Source/C/GenFw/Elf32Convert.c index 42ae35bfef..ddb45acc86 100644 --- a/BaseTools/Source/C/GenFw/Elf32Convert.c +++ b/BaseTools/Source/C/GenFw/Elf32Convert.c @@ -738,10 +738,6 @@ WriteRelocations32 ( UINT8 *Targ; Elf32_Phdr *DynamicSegment; Elf32_Phdr *TargetSegment; - Elf_Sym *Sym; - Elf_Shdr *SymtabShdr; - UINT8 *Symtab; - for (Index = 0, FoundRelocations = FALSE; Index < mEhdr->e_shnum; Index++) { Elf_Shdr *RelShdr = GetShdrByIndex(Index); @@ -750,16 +746,10 @@ WriteRelocations32 ( if (IsTextShdr(SecShdr) || IsDataShdr(SecShdr)) { UINT32 RelIdx; - SymtabShdr = GetShdrByIndex (RelShdr->sh_link); - Symtab = (UINT8*)mEhdr + SymtabShdr->sh_offset; FoundRelocations = TRUE; for (RelIdx = 0; RelIdx < RelShdr->sh_size; RelIdx += RelShdr->sh_entsize) { Elf_Rel *Rel = (Elf_Rel *)((UINT8*)mEhdr + RelShdr->sh_offset + RelIdx); - Elf_Shdr *SymShdr; - Sym = (Elf_Sym *)(Symtab + ELF_R_SYM(Rel->r_info) * SymtabShdr->sh_entsize); - SymShdr = GetShdrByIndex (Sym->st_shndx); - if (mEhdr->e_machine == EM_386) { switch (ELF_R_TYPE(Rel->r_info)) { case R_386_NONE: diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c b/BaseTools/Source/C/GenFw/Elf64Convert.c index fbe6ff8232..e7c5d4997a 100644 --- a/BaseTools/Source/C/GenFw/Elf64Convert.c +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c @@ -637,28 +637,16 @@ WriteRelocations64 ( UINT32 Index; EFI_IMAGE_OPTIONAL_HEADER_UNION *NtHdr; EFI_IMAGE_DATA_DIRECTORY *Dir; - BOOLEAN FoundRelocations; - Elf_Sym *Sym; - Elf_Shdr *SymtabShdr; - UINT8 *Symtab; - - for (Index = 0, FoundRelocations = FALSE; Index < mEhdr->e_shnum; Index++) { + for (Index = 0; Index < mEhdr->e_shnum; Index++) { Elf_Shdr *RelShdr = GetShdrByIndex(Index); if ((RelShdr->sh_type == SHT_REL) || (RelShdr->sh_type == SHT_RELA)) { Elf_Shdr *SecShdr = GetShdrByIndex (RelShdr->sh_info); if (IsTextShdr(SecShdr) || IsDataShdr(SecShdr)) { UINT64 RelIdx; - SymtabShdr = GetShdrByIndex (RelShdr->sh_link); - Symtab = (UINT8*)mEhdr + SymtabShdr->sh_offset; - FoundRelocations = TRUE; for (RelIdx = 0; RelIdx < RelShdr->sh_size; RelIdx += RelShdr->sh_entsize) { Elf_Rela *Rel = (Elf_Rela *)((UINT8*)mEhdr + RelShdr->sh_offset + RelIdx); - Elf_Shdr *SymShdr; - - Sym = (Elf_Sym *)(Symtab + ELF_R_SYM(Rel->r_info) * SymtabShdr->sh_entsize); - SymShdr = GetShdrByIndex (Sym->st_shndx); if (mEhdr->e_machine == EM_X86_64) { switch (ELF_R_TYPE(Rel->r_info)) { diff --git a/BaseTools/Source/C/GenSec/GenSec.c b/BaseTools/Source/C/GenSec/GenSec.c index ffa0ee62fb..79e8e1bebb 100644 --- a/BaseTools/Source/C/GenSec/GenSec.c +++ b/BaseTools/Source/C/GenSec/GenSec.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -915,7 +915,6 @@ Returns: { UINT32 Index; UINT32 InputFileNum; - FILE *InFile; FILE *OutFile; CHAR8 **InputFileName; CHAR8 *OutputFileName; @@ -944,7 +943,6 @@ Returns: SectionName = NULL; CompressionName = NULL; StringBuffer = ""; - InFile = NULL; OutFile = NULL; VersionNumber = 0; InputFileNum = 0; diff --git a/BaseTools/Source/C/GenVtf/GenVtf.c b/BaseTools/Source/C/GenVtf/GenVtf.c index e56544e544..eaf2f56fed 100644 --- a/BaseTools/Source/C/GenVtf/GenVtf.c +++ b/BaseTools/Source/C/GenVtf/GenVtf.c @@ -1,6 +1,6 @@ /** -Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 1999 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -1141,7 +1141,6 @@ Returns: EFI_STATUS Status; UINT64 CompStartAddress; UINT64 FileSize; - UINT64 NumByteRead; UINT64 NumAdjustByte; UINT8 *Buffer; FILE *Fp; @@ -1189,7 +1188,7 @@ Returns: // // Read first 64 bytes of PAL header and use it to find version info // - NumByteRead = fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp); + fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp); // // PAL header contains the version info. Currently, we will use the header @@ -1200,7 +1199,7 @@ Returns: } } - NumByteRead = fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); + fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); fclose (Fp); // @@ -1329,7 +1328,6 @@ Returns: UINT64 AbsAddress; UINTN RelativeAddress; UINT64 FileSize; - UINT64 NumByteRead; UINT8 *Buffer; FILE *Fp; FIT_TABLE *PalFitPtr; @@ -1367,7 +1365,7 @@ Returns: // // Read, Get version Info and discard the PAL header. // - NumByteRead = fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp); + fread (Buffer, sizeof (UINT8), SIZE_OF_PAL_HEADER, Fp); // // Extract the version info from header of PAL_A. Once done, discrad this buffer @@ -1379,7 +1377,7 @@ Returns: // // Read PAL_A file in a buffer // - NumByteRead = fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); + fread (Buffer, sizeof (UINT8), (UINTN) FileSize, Fp); fclose (Fp); PalStartAddress = Fv1EndAddress - (SIZE_TO_OFFSET_PAL_A_END + FileSize); @@ -1759,7 +1757,6 @@ Returns: UINT8 *Buffer; UINT8 *LocalVtfBuffer; UINTN FileSize; - UINTN NumByteRead; FILE *Fp; if (!strcmp (FileName, "")) { @@ -1784,7 +1781,7 @@ Returns: return EFI_OUT_OF_RESOURCES; } - NumByteRead = fread (Buffer, sizeof (UINT8), FileSize, Fp); + fread (Buffer, sizeof (UINT8), FileSize, Fp); LocalVtfBuffer = (UINT8 *) Vtf1EndBuffer - SIZE_IA32_RESET_VECT; memcpy (LocalVtfBuffer, Buffer, FileSize); @@ -2121,7 +2118,6 @@ Returns: FILE *Fp; UINT64 *StartAddressPtr; UINTN FirstFwVSize; - UINTN NumByte; StartAddressPtr = malloc (sizeof (UINT64)); if (StartAddressPtr == NULL) { @@ -2141,7 +2137,7 @@ Returns: FirstFwVSize = _filelength (fileno (Fp)); fseek (Fp, (long) (FirstFwVSize - (UINTN) (SIZE_IA32_RESET_VECT + SIZE_SALE_ENTRY_POINT)), SEEK_SET); - NumByte = fwrite ((VOID *) StartAddressPtr, sizeof (UINT64), 1, Fp); + fwrite ((VOID *) StartAddressPtr, sizeof (UINT64), 1, Fp); if (Fp) { fclose (Fp); diff --git a/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c b/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c index 1ce22fc8fa..b0ec271b05 100644 --- a/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c +++ b/BaseTools/Source/C/GnuGenBootSector/GnuGenBootSector.c @@ -1,6 +1,6 @@ /** @file -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -305,7 +305,6 @@ main ( char *argv[] ) { - CHAR8 *AppName; INTN Index; BOOLEAN ProcessMbr; ERROR_STATUS Status; @@ -319,7 +318,6 @@ main ( ZeroMem(&InputPathInfo, sizeof(PATH_INFO)); ZeroMem(&OutputPathInfo, sizeof(PATH_INFO)); - AppName = *argv; argv ++; argc --; diff --git a/BaseTools/Source/C/Include/Common/BuildVersion.h b/BaseTools/Source/C/Include/Common/BuildVersion.h index ec4acc338a..6619780239 100644 --- a/BaseTools/Source/C/Include/Common/BuildVersion.h +++ b/BaseTools/Source/C/Include/Common/BuildVersion.h @@ -1,3 +1,3 @@ //This file is for build version number auto generation // -#define __BUILD_VERSION "Build 2361" +#define __BUILD_VERSION "Build 2386" diff --git a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c index 529fd98f87..7272272784 100644 --- a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c +++ b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c @@ -1,5 +1,18 @@ -/* LzmaEnc.c -- LZMA Encoder -2009-02-02 : Igor Pavlov : Public domain */ +/** @file + Based on LZMA SDK 4.65: + LzmaEnc.c -- LZMA Encoder + 2009-02-02 : Igor Pavlov : Public domain + + Copyright (c) 2011, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ #include @@ -1919,11 +1932,13 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, Bool useLimits, UInt32 maxPackSize static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAlloc *alloc, ISzAlloc *allocBig) { UInt32 beforeSize = kNumOpts; + #ifdef COMPRESS_MF_MT Bool btMode; + #endif if (!RangeEnc_Alloc(&p->rc, alloc)) return SZ_ERROR_MEM; - btMode = (p->matchFinderBase.btMode != 0); #ifdef COMPRESS_MF_MT + btMode = (p->matchFinderBase.btMode != 0); p->mtMode = (p->multiThread && !p->fastMode && btMode); #endif diff --git a/BaseTools/Source/C/Makefiles/ms.app b/BaseTools/Source/C/Makefiles/ms.app index 84173e5da4..7812175e7f 100644 --- a/BaseTools/Source/C/Makefiles/ms.app +++ b/BaseTools/Source/C/Makefiles/ms.app @@ -1,12 +1,12 @@ -## @file -# -# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
-# This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +## @file +# +# Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.
+# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. !INCLUDE ..\Makefiles\ms.common @@ -19,8 +19,8 @@ $(APPLICATION) : $(OBJECTS) -@if not exist $(BIN_PATH) mkdir $(BIN_PATH) $(LD) /nologo /debug /incremental:no /nodefaultlib:libc.lib /out:$@ $(LIBS) $** -$(OBJECTS) : ..\Include\Common\BuildVersion.h - +$(OBJECTS) : ..\Include\Common\BuildVersion.h + .PHONY:clean .PHONY:cleanall diff --git a/BaseTools/Source/C/Split/Split.c b/BaseTools/Source/C/Split/Split.c index 9b81eeb762..544da91f4b 100644 --- a/BaseTools/Source/C/Split/Split.c +++ b/BaseTools/Source/C/Split/Split.c @@ -2,7 +2,7 @@ Split a file into two pieces at the request offset. -Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.
+Copyright (c) 1999 - 2011, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -26,7 +26,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "ParseInf.h" #include "CommonLib.h" #include "EfiUtilityMsgs.h" - // // Utility Name // @@ -230,7 +229,6 @@ Returns: CHAR8 *CurrentDir = NULL; UINT64 Index; CHAR8 CharC; - BOOLEAN QuietFlag = TRUE; UINT64 DebugLevel = 0; UINT64 VerboseLevel = 0; @@ -308,7 +306,6 @@ Returns: } if ((stricmp (argv[0], "-q") == 0) || (stricmp (argv[0], "--quiet") == 0)) { - QuietFlag = TRUE; argc --; argv ++; continue; diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp index f0678ca3cb..94ad55b1bb 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp @@ -662,6 +662,13 @@ CFormPkg::DeclarePendingQuestion ( CNObj.SetQuestionId (QId); CNObj.SetVarStoreInfo (&Info); + // + // Numeric doesn't support BOOLEAN data type. + // BOOLEAN type has the same data size to UINT8. + // + if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) { + Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8; + } CNObj.SetFlags (0, Info.mVarType); // diff --git a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h index f908718c02..92e47d97a3 100644 --- a/BaseTools/Source/C/VfrCompile/VfrFormPkg.h +++ b/BaseTools/Source/C/VfrCompile/VfrFormPkg.h @@ -847,7 +847,7 @@ private: public: CIfrImage () : CIfrObj (EFI_IFR_IMAGE_OP, (CHAR8 **)&mImage), - CIfrOpHeader (EFI_IFR_FORM_OP, &mImage->Header) { + CIfrOpHeader (EFI_IFR_IMAGE_OP, &mImage->Header) { mImage->Id = EFI_IMAGE_ID_INVALID; } @@ -1061,12 +1061,8 @@ public: mRef2->FormId = FormId; } - EFI_VFR_RETURN_CODE SetQuestionId (IN EFI_QUESTION_ID QuestionId) { - if (QuestionId == EFI_QUESTION_ID_INVALID) { - return VFR_RETURN_UNDEFINED; - } + VOID SetQuestionId (IN EFI_QUESTION_ID QuestionId) { mRef2->QuestionId = QuestionId; - return VFR_RETURN_SUCCESS; } }; diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source/C/VfrCompile/VfrSyntax.g index d9f8dd99a7..f27f05b689 100644 --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g @@ -524,28 +524,28 @@ vfrFormSetDefinition : FSObj->SetClassGuid(&DefaultClassGuid); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 1: if (mOverrideClassGuid != NULL) { ClassGuidNum ++; - } + } FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 2: if (mOverrideClassGuid != NULL) { ClassGuidNum ++; - } + } FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); FSObj->SetClassGuid(&ClassGuid1); FSObj->SetClassGuid(&ClassGuid2); if (mOverrideClassGuid != NULL) { FSObj->SetClassGuid(mOverrideClassGuid); - } + } break; case 3: FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID)); @@ -1646,6 +1646,7 @@ vfrStatementGoto : EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID; UINT32 BitMask; CIfrQuestionHeader *QHObj = NULL; + CIfrOpHeader *OHObj = NULL; CIfrRef *R1Obj = NULL; CIfrRef2 *R2Obj = NULL; CIfrRef3 *R3Obj = NULL; @@ -1682,8 +1683,13 @@ vfrStatementGoto : FormId "=" F3:Number "," << RefType = 2; FId = _STOFID(F3->getText()); >> Question "=" ( - QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >> - | QN3:Number "," << QId = _STOQID(QN3->getText()); >> + QN3:StringIdentifier "," << + mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); + if (QId == EFI_QUESTION_ID_INVALID) { + _PCATCH(VFR_RETURN_UNDEFINED, QN3); + } + >> + | QN4:Number "," << QId = _STOQID(QN4->getText()); >> ) ) | @@ -1700,6 +1706,7 @@ vfrStatementGoto : { R5Obj = new CIfrRef5; QHObj = R5Obj; + OHObj = R5Obj; R5Obj->SetLineNo(G->getLine()); break; } @@ -1707,6 +1714,7 @@ vfrStatementGoto : { R4Obj = new CIfrRef4; QHObj = R4Obj; + OHObj = R4Obj; R4Obj->SetLineNo(G->getLine()); R4Obj->SetDevicePath (DevPath); R4Obj->SetFormSetId (FSId); @@ -1718,6 +1726,7 @@ vfrStatementGoto : { R3Obj = new CIfrRef3; QHObj = R3Obj; + OHObj = R3Obj; R3Obj->SetLineNo(G->getLine()); R3Obj->SetFormSetId (FSId); R3Obj->SetFormId (FId); @@ -1728,15 +1737,17 @@ vfrStatementGoto : { R2Obj = new CIfrRef2; QHObj = R2Obj; + OHObj = R2Obj; R2Obj->SetLineNo(G->getLine()); R2Obj->SetFormId (FId); - _PCATCH(R2Obj->SetQuestionId (QId), QN3); + R2Obj->SetQuestionId (QId); break; } case 1: { R1Obj = new CIfrRef; QHObj = R1Obj; + OHObj = R1Obj; R1Obj->SetLineNo(G->getLine()); R1Obj->SetFormId (FId); break; @@ -1745,11 +1756,14 @@ vfrStatementGoto : } >> vfrQuestionHeader[*QHObj, QUESTION_REF] - { "," vfrStatementStatTagList } { "," F:FLAGS "=" vfrGotoFlags[QHObj, F->getLine()] } { "," Key "=" KN:Number << AssignQuestionKey (*QHObj, KN); >> } + { + E:"," + vfrStatementQuestionOptionList << OHObj->SetScope(1); CRT_END_OP (E);>> + } ";" << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) {delete R4Obj;} if (R5Obj != NULL) {delete R5Obj;}>> ; @@ -3615,6 +3629,7 @@ vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] : | question2refExp[$RootLevel, $ExpOpCount] | stringref2Exp[$RootLevel, $ExpOpCount] | toboolExp[$RootLevel, $ExpOpCount] + | tostringExp[$RootLevel, $ExpOpCount] | unintExp[$RootLevel, $ExpOpCount] | toupperExp[$RootLevel, $ExpOpCount] | tolwerExp[$RootLevel, $ExpOpCount] diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c index 78c6cf6561..f514ba8c38 100644 --- a/BaseTools/Source/C/VolInfo/VolInfo.c +++ b/BaseTools/Source/C/VolInfo/VolInfo.c @@ -30,7 +30,6 @@ Abstract: #include #include #include - #include #include #include diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 8150ea0b69..2def474b17 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -180,16 +180,16 @@ class WorkspaceAutoGen(AutoGen): Fvs = [] if Caps is None: Caps = [] - self.MetaFile = ActivePlatform.MetaFile + self.BuildDatabase = MetaFileDb + self.MetaFile = ActivePlatform self.WorkspaceDir = WorkspaceDir - self.Platform = ActivePlatform + self.Platform = self.BuildDatabase[self.MetaFile, 'COMMON', Target, Toolchain] self.BuildTarget = Target self.ToolChain = Toolchain self.ArchList = ArchList self.SkuId = SkuId self.UniFlag = UniFlag - self.BuildDatabase = MetaFileDb self.TargetTxt = BuildConfig self.ToolDef = ToolDefinition self.FdfFile = FlashDefinitionFile @@ -201,30 +201,74 @@ class WorkspaceAutoGen(AutoGen): # there's many relative directory operations, so ... os.chdir(self.WorkspaceDir) + # + # Merge Arch + # + if not self.ArchList: + ArchList = set(self.Platform.SupArchList) + else: + ArchList = set(self.ArchList) & set(self.Platform.SupArchList) + if not ArchList: + EdkLogger.error("build", PARAMETER_INVALID, + ExtraData = "Invalid ARCH specified. [Valid ARCH: %s]" % (" ".join(self.Platform.SupArchList))) + elif self.ArchList and len(ArchList) != len(self.ArchList): + SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList)) + EdkLogger.verbose("\nArch [%s] is ignored because the platform supports [%s] only!" + % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList))) + self.ArchList = tuple(ArchList) + + # Validate build target + if self.BuildTarget not in self.Platform.BuildTargets: + EdkLogger.error("build", PARAMETER_INVALID, + ExtraData="Build target [%s] is not supported by the platform. [Valid target: %s]" + % (self.BuildTarget, " ".join(self.Platform.BuildTargets))) + + # Validate SKU ID + if not self.SkuId: + self.SkuId = 'DEFAULT' + + if self.SkuId not in self.Platform.SkuIds: + EdkLogger.error("build", PARAMETER_INVALID, + ExtraData="SKU-ID [%s] is not supported by the platform. [Valid SKU-ID: %s]" + % (self.SkuId, " ".join(self.Platform.SkuIds.keys()))) + # parse FDF file to get PCDs in it, if any - if self.FdfFile != None and self.FdfFile != '': - # - # Make global macros available when parsing FDF file - # - InputMacroDict.update(self.BuildDatabase.WorkspaceDb._GlobalMacros) + if not self.FdfFile: + self.FdfFile = self.Platform.FlashDefinition + EdkLogger.verbose("\nFLASH_DEFINITION = %s" % self.FdfFile) + + if self.FdfFile: # # Mark now build in AutoGen Phase # - GlobalData.gAutoGenPhase = True + GlobalData.gAutoGenPhase = True Fdf = FdfParser(self.FdfFile.Path) Fdf.ParseFile() - GlobalData.gAutoGenPhase = False + GlobalData.gAutoGenPhase = False PcdSet = Fdf.Profile.PcdDict ModuleList = Fdf.Profile.InfList self.FdfProfile = Fdf.Profile + for fvname in self.FvTargetList: + if fvname.upper() not in self.FdfProfile.FvDict: + EdkLogger.error("build", OPTION_VALUE_INVALID, + "No such an FV in FDF file: %s" % fvname) else: PcdSet = {} ModuleList = [] self.FdfProfile = None + if self.FdTargetList: + EdkLogger.info("No flash definition file found. FD [%s] will be ignored." % " ".join(self.FdTargetList)) + self.FdTargetList = [] + if self.FvTargetList: + EdkLogger.info("No flash definition file found. FV [%s] will be ignored." % " ".join(self.FvTargetList)) + self.FvTargetList = [] + if self.CapTargetList: + EdkLogger.info("No flash definition file found. Capsule [%s] will be ignored." % " ".join(self.CapTargetList)) + self.CapTargetList = [] # apply SKU and inject PCDs from Flash Definition file for Arch in self.ArchList: - Platform = self.BuildDatabase[self.MetaFile, Arch] + Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain] Platform.SkuName = self.SkuId for Name, Guid in PcdSet: Platform.AddPcd(Name, Guid, PcdSet[Name, Guid]) @@ -971,7 +1015,7 @@ class PlatformAutoGen(AutoGen): ## Return the platform build data object def _GetPlatform(self): if self._Platform == None: - self._Platform = self.BuildDatabase[self.MetaFile, self.Arch] + self._Platform = self.BuildDatabase[self.MetaFile, self.Arch, self.BuildTarget, self.ToolChain] return self._Platform ## Return platform name @@ -1309,7 +1353,7 @@ class PlatformAutoGen(AutoGen): File=self.MetaFile, ExtraData="in [%s] [%s]\n\tconsumed by module [%s]" % (str(M), self.Arch, str(Module))) - LibraryModule = self.BuildDatabase[LibraryPath, self.Arch] + LibraryModule = self.BuildDatabase[LibraryPath, self.Arch, self.BuildTarget, self.ToolChain] # for those forced library instance (NULL library), add a fake library class if LibraryClassName.startswith("NULL"): LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName, [ModuleType])) @@ -1907,6 +1951,7 @@ class ModuleAutoGen(AutoGen): self._Macro["ARCH" ] = self.Arch self._Macro["TOOLCHAIN" ] = self.ToolChain self._Macro["TOOLCHAIN_TAG" ] = self.ToolChain + self._Macro["TOOL_CHAIN_TAG" ] = self.ToolChain self._Macro["TARGET" ] = self.BuildTarget self._Macro["BUILD_DIR" ] = self.PlatformInfo.BuildDir @@ -1920,7 +1965,7 @@ class ModuleAutoGen(AutoGen): ## Return the module build data object def _GetModule(self): if self._Module == None: - self._Module = self.Workspace.BuildDatabase[self.MetaFile, self.Arch] + self._Module = self.Workspace.BuildDatabase[self.MetaFile, self.Arch, self.BuildTarget, self.ToolChain] return self._Module ## Return the module name @@ -2279,7 +2324,7 @@ class ModuleAutoGen(AutoGen): if File.IsBinary and File == Source and self._BinaryFileList != None and File in self._BinaryFileList: # Skip all files that are not binary libraries if not self.IsLibrary: - continue + continue RuleObject = self.BuildRules[TAB_DEFAULT_BINARY_FILE] elif FileType in self.BuildRules: RuleObject = self.BuildRules[FileType] @@ -2672,7 +2717,7 @@ class ModuleAutoGen(AutoGen): DpxFile = gAutoGenDepexFileName % {"module_name" : self.Name} if len(Dpx.PostfixNotation) <> 0: - self.DepexGenerated = True + self.DepexGenerated = True if Dpx.Generate(path.join(self.OutputDir, DpxFile)): AutoGenList.append(str(DpxFile)) diff --git a/BaseTools/Source/Python/AutoGen/BuildEngine.py b/BaseTools/Source/Python/AutoGen/BuildEngine.py index 73b4a97417..45a560448e 100644 --- a/BaseTools/Source/Python/AutoGen/BuildEngine.py +++ b/BaseTools/Source/Python/AutoGen/BuildEngine.py @@ -137,7 +137,7 @@ class FileBuildRule: self.MacroList = [] self.CommandList = [] for CmdLine in Command: - self.MacroList.extend(gMacroPattern.findall(CmdLine)) + self.MacroList.extend(gMacroRefPattern.findall(CmdLine)) # replace path separator with native one self.CommandList.append(CmdLine) diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index f733ac3e8d..c6b65f4924 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -956,6 +956,14 @@ def CreateModulePcdCode(Info, AutoGenC, AutoGenH, Pcd): Value = Pcd.DefaultValue Unicode = False ValueNumber = 0 + + if Pcd.DatumType == 'BOOLEAN': + BoolValue = Value.upper() + if BoolValue == 'TRUE': + Value = 1 + elif BoolValue == 'FALSE': + Value = 0 + if Pcd.DatumType in ['UINT64', 'UINT32', 'UINT16', 'UINT8']: try: if Value.upper().startswith('0X'): diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index 3720c8bfed..478ab0f01b 100644 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -493,7 +493,7 @@ cleanlib: # convert source files and binary files to build targets self.ResultFileList = [str(T.Target) for T in self._AutoGenObject.CodaTargetList] - if len(self.ResultFileList) == 0 and len(self._AutoGenObject.SourceFileList) <> 0: + if len(self.ResultFileList) == 0 and len(self._AutoGenObject.SourceFileList) <> 0: EdkLogger.error("build", AUTOGEN_ERROR, "Nothing to build", ExtraData="[%s]" % str(self._AutoGenObject)) @@ -1253,7 +1253,7 @@ ${END}\t@cd $(BUILD_DIR) # fds: init \t-@cd $(FV_DIR) -${BEGIN}\tGenFds -f ${fdf_file} -o $(BUILD_DIR) -t $(TOOLCHAIN) -b $(TARGET) -p ${active_platform} -a ${build_architecture_list}${END}${BEGIN}${extra_options}${END}${BEGIN} -r ${fd}${END}${BEGIN} -i ${fv}${END}${BEGIN} -C ${cap}${END}${BEGIN} -D${macro}${END} +${BEGIN}\tGenFds -f ${fdf_file} -o $(BUILD_DIR) -t $(TOOLCHAIN) -b $(TARGET) -p ${active_platform} -a ${build_architecture_list} ${extra_options}${END}${BEGIN} -r ${fd} ${END}${BEGIN} -i ${fv} ${END}${BEGIN} -C ${cap} ${END}${BEGIN} -D ${macro} ${END} # # run command for emulator platform only @@ -1320,6 +1320,11 @@ ${END}\t@cd $(BUILD_DIR)\n MacroList.append('"%s=%s"' % (MacroName, GlobalData.gGlobalDefines[MacroName])) else: MacroList.append('"%s"' % MacroName) + for MacroName in GlobalData.gCommandLineDefines: + if GlobalData.gCommandLineDefines[MacroName] != "": + MacroList.append('"%s=%s"' % (MacroName, GlobalData.gCommandLineDefines[MacroName])) + else: + MacroList.append('"%s"' % MacroName) else: FdfFileList = [] @@ -1335,9 +1340,6 @@ ${END}\t@cd $(BUILD_DIR)\n if GlobalData.gCaseInsensitive: ExtraOption += " -c" - ExtraOptionList = [] - if ExtraOption: - ExtraOptionList.append(ExtraOption) MakefileName = self._FILE_NAME_[self._FileType] SubBuildCommandList = [] @@ -1369,7 +1371,7 @@ ${END}\t@cd $(BUILD_DIR)\n "fd" : PlatformInfo.FdTargetList, "fv" : PlatformInfo.FvTargetList, "cap" : PlatformInfo.CapTargetList, - "extra_options" : ExtraOptionList, + "extra_options" : ExtraOption, "macro" : MacroList, } diff --git a/BaseTools/Source/Python/Common/BuildVersion.py b/BaseTools/Source/Python/Common/BuildVersion.py index fecc40e84a..82597c0945 100644 --- a/BaseTools/Source/Python/Common/BuildVersion.py +++ b/BaseTools/Source/Python/Common/BuildVersion.py @@ -1,3 +1,3 @@ #This file is for build version number auto generation # -gBUILD_VERSION = "Build 2361" +gBUILD_VERSION = "Build 2386" diff --git a/BaseTools/Source/Python/Common/DataType.py b/BaseTools/Source/Python/Common/DataType.py index 9a2556749a..fc0a7ad026 100644 --- a/BaseTools/Source/Python/Common/DataType.py +++ b/BaseTools/Source/Python/Common/DataType.py @@ -360,6 +360,7 @@ TAB_DSC_DEFINES_ISO_LANGUAGES = 'ISO_LANGUAGES' TAB_DSC_DEFINES_DEFINE = 'DEFINE' TAB_DSC_DEFINES_VPD_TOOL_GUID = 'VPD_TOOL_GUID' TAB_FIX_LOAD_TOP_MEMORY_ADDRESS = 'FIX_LOAD_TOP_MEMORY_ADDRESS' +TAB_DSC_DEFINES_EDKGLOBAL = 'EDK_GLOBAL' # # TargetTxt Definitions diff --git a/BaseTools/Source/Python/Common/Expression.py b/BaseTools/Source/Python/Common/Expression.py new file mode 100644 index 0000000000..e2889a8dd3 --- /dev/null +++ b/BaseTools/Source/Python/Common/Expression.py @@ -0,0 +1,555 @@ +## @file +# This file is used to parse and evaluate expression in directive or PCD value. +# +# Copyright (c) 2011, Intel Corporation. All rights reserved.
+# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +## Import Modules +# +from Common.GlobalData import * +from CommonDataClass.Exceptions import BadExpression +from CommonDataClass.Exceptions import SymbolNotFound +from CommonDataClass.Exceptions import WrnExpression +from Misc import GuidStringToGuidStructureString + +ERR_STRING_EXPR = 'This operator cannot be used in string expression: [%s].' +ERR_SNYTAX = 'Syntax error, the rest of expression cannot be evaluated: [%s].' +ERR_MATCH = 'No matching right parenthesis.' +ERR_STRING_TOKEN = 'Bad string token: [%s].' +ERR_MACRO_TOKEN = 'Bad macro token: [%s].' +ERR_EMPTY_TOKEN = 'Empty token is not allowed.' +ERR_PCD_RESOLVE = 'PCD token cannot be resolved: [%s].' +ERR_VALID_TOKEN = 'No more valid token found from rest of string: [%s].' +ERR_EXPR_TYPE = 'Different types found in expression.' +ERR_OPERATOR_UNSUPPORT = 'Unsupported operator: [%s]' +ERR_REL_NOT_IN = 'Expect "IN" after "not" operator.' +WRN_BOOL_EXPR = 'Operand of boolean type cannot be used in arithmetic expression.' +WRN_EQCMP_STR_OTHERS = '== Comparison between Operand of string type and Boolean/Number Type always return False.' +WRN_NECMP_STR_OTHERS = '!= Comparison between Operand of string type and Boolean/Number Type always return True.' +ERR_RELCMP_STR_OTHERS = 'Operator taking Operand of string type and Boolean/Number Type is not allowed: [%s].' +ERR_STRING_CMP = 'Unicode string and general string cannot be compared: [%s %s %s]' +ERR_ARRAY_TOKEN = 'Bad C array or C format GUID token: [%s].' +ERR_ARRAY_ELE = 'This must be HEX value for NList or Array: [%s].' + +## SplitString +# Split string to list according double quote +# For example: abc"de\"f"ghi"jkl"mn will be: ['abc', '"de\"f"', 'ghi', '"jkl"', 'mn'] +# +def SplitString(String): + # There might be escaped quote: "abc\"def\\\"ghi" + Str = String.replace('\\\\', '//').replace('\\\"', '\\\'') + RetList = [] + InQuote = False + Item = '' + for i, ch in enumerate(Str): + if ch == '"': + InQuote = not InQuote + if not InQuote: + Item += String[i] + RetList.append(Item) + Item = '' + continue + if Item: + RetList.append(Item) + Item = '' + Item += String[i] + if InQuote: + raise BadExpression(ERR_STRING_TOKEN % Item) + if Item: + RetList.append(Item) + return RetList + +## ReplaceExprMacro +# +def ReplaceExprMacro(String, Macros, ExceptionList = None): + StrList = SplitString(String) + for i, String in enumerate(StrList): + InQuote = False + if String.startswith('"'): + InQuote = True + MacroStartPos = String.find('$(') + if MacroStartPos < 0: + continue + RetStr = '' + while MacroStartPos >= 0: + RetStr = String[0:MacroStartPos] + MacroEndPos = String.find(')', MacroStartPos) + if MacroEndPos < 0: + raise BadExpression(ERR_MACRO_TOKEN % String[MacroStartPos:]) + Macro = String[MacroStartPos+2:MacroEndPos] + if Macro not in Macros: + # From C reference manual: + # If an undefined macro name appears in the constant-expression of + # !if or !elif, it is replaced by the integer constant 0. + RetStr += '0' + elif not InQuote and ExceptionList and Macro in ExceptionList: + # Make sure the macro in exception list is encapsulated by double quote + # For example: DEFINE ARCH = IA32 X64 + # $(ARCH) is replaced with "IA32 X64" + RetStr += '"' + Macros[Macro] + '"' + else: + if Macros[Macro].strip() != "": + RetStr += Macros[Macro] + else: + RetStr += '""' + RetStr += String[MacroEndPos+1:] + String = RetStr + MacroStartPos = String.find('$(') + StrList[i] = RetStr + return ''.join(StrList) + +class ValueExpression(object): + # Logical operator mapping + LogicalOperators = { + '&&' : 'and', '||' : 'or', + '!' : 'not', 'AND': 'and', + 'OR' : 'or' , 'NOT': 'not', + 'XOR': '^' , 'xor': '^', + 'EQ' : '==' , 'NE' : '!=', + 'GT' : '>' , 'LT' : '<', + 'GE' : '>=' , 'LE' : '<=', + 'IN' : 'in' + } + + NonLetterOpLst = ['+', '-', '&', '|', '^', '!', '=', '>', '<'] + + PcdPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_]*\.[_a-zA-Z][0-9A-Za-z_]*$') + HexPattern = re.compile(r'0[xX][0-9a-fA-F]+$') + RegGuidPattern = re.compile(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}') + + SymbolPattern = re.compile("(" + "\$\([A-Z][A-Z0-9_]*\)|\$\(\w+\.\w+\)|\w+\.\w+|" + "&&|\|\||!(?!=)|" + "(?<=\W)AND(?=\W)|(?<=\W)OR(?=\W)|(?<=\W)NOT(?=\W)|(?<=\W)XOR(?=\W)|" + "(?<=\W)EQ(?=\W)|(?<=\W)NE(?=\W)|(?<=\W)GT(?=\W)|(?<=\W)LT(?=\W)|(?<=\W)GE(?=\W)|(?<=\W)LE(?=\W)" + ")") + + @staticmethod + def Eval(Operator, Oprand1, Oprand2 = None): + WrnExp = None + + if Operator not in ["==", "!=", ">=", "<=", ">", "<", "in", "not in"] and \ + (type(Oprand1) == type('') or type(Oprand2) == type('')): + raise BadExpression(ERR_STRING_EXPR % Operator) + + TypeDict = { + type(0) : 0, + type(0L) : 0, + type('') : 1, + type(True) : 2 + } + + EvalStr = '' + if Operator in ["!", "NOT", "not"]: + if type(Oprand1) == type(''): + raise BadExpression(ERR_STRING_EXPR % Operator) + EvalStr = 'not Oprand1' + else: + if Operator in ["+", "-"] and (type(True) in [type(Oprand1), type(Oprand2)]): + # Boolean in '+'/'-' will be evaluated but raise warning + WrnExp = WrnExpression(WRN_BOOL_EXPR) + elif type('') in [type(Oprand1), type(Oprand2)] and type(Oprand1)!= type(Oprand2): + # == between string and number/boolean will always return False, != return True + if Operator == "==": + WrnExp = WrnExpression(WRN_EQCMP_STR_OTHERS) + WrnExp.result = False + raise WrnExp + elif Operator == "!=": + WrnExp = WrnExpression(WRN_NECMP_STR_OTHERS) + WrnExp.result = True + raise WrnExp + else: + raise BadExpression(ERR_RELCMP_STR_OTHERS % Operator) + elif TypeDict[type(Oprand1)] != TypeDict[type(Oprand2)]: + if Operator in ["==", "!=", ">=", "<=", ">", "<"] and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])): + # comparison between number and boolean is allowed + pass + elif Operator in ['&', '|', '^', "&&", "||"] and set((TypeDict[type(Oprand1)], TypeDict[type(Oprand2)])) == set((TypeDict[type(True)], TypeDict[type(0)])): + # bitwise and logical operation between number and boolean is allowed + pass + else: + raise BadExpression(ERR_EXPR_TYPE) + if type(Oprand1) == type('') and type(Oprand2) == type(''): + if (Oprand1.startswith('L"') and not Oprand2.startswith('L"')) or \ + (not Oprand1.startswith('L"') and Oprand2.startswith('L"')): + raise BadExpression(ERR_STRING_CMP % (Oprand1, Operator, Oprand2)) + if 'in' in Operator and type(Oprand2) == type(''): + Oprand2 = Oprand2.split() + EvalStr = 'Oprand1 ' + Operator + ' Oprand2' + + # Local symbols used by built in eval function + Dict = { + 'Oprand1' : Oprand1, + 'Oprand2' : Oprand2 + } + try: + Val = eval(EvalStr, {}, Dict) + except Exception, Excpt: + raise BadExpression(str(Excpt)) + + if Operator in ['and', 'or']: + if Val: + Val = True + else: + Val = False + + if WrnExp: + WrnExp.result = Val + raise WrnExp + return Val + + def __init__(self, Expression, SymbolTable={}): + self._NoProcess = False + if type(Expression) != type(''): + self._Expr = Expression + self._NoProcess = True + return + + self._Expr = ReplaceExprMacro(Expression.strip(), + SymbolTable, + ['TARGET', 'TOOL_CHAIN_TAG', 'ARCH']) + + if not self._Expr.strip(): + self._NoProcess = True + return + + # + # The symbol table including PCD and macro mapping + # + self._Symb = SymbolTable + self._Symb.update(self.LogicalOperators) + self._Idx = 0 + self._Len = len(self._Expr) + self._Token = '' + + # Literal token without any conversion + self._LiteralToken = '' + + # Public entry for this class + def __call__(self): + if self._NoProcess: + return self._Expr + + Val = self._OrExpr() + if type(Val) == type('') and Val == 'L""': + Val = '' + + # The expression has been parsed, but the end of expression is not reached + # It means the rest does not comply EBNF of + if self._Idx != self._Len: + raise BadExpression(ERR_SNYTAX % self._Expr[self._Idx:]) + + return Val + + # Template function to parse binary operators which have same precedence + # Expr [Operator Expr]* + def _ExprFuncTemplate(self, EvalFunc, OpLst): + Val = EvalFunc() + while self._IsOperator(OpLst): + Op = self._Token + Val = self.Eval(Op, Val, EvalFunc()) + return Val + + # A [|| B]* + def _OrExpr(self): + return self._ExprFuncTemplate(self._AndExpr, ["OR", "or", "||"]) + + # A [&& B]* + def _AndExpr(self): + return self._ExprFuncTemplate(self._BitOr, ["AND", "and", "&&"]) + + # A [ | B]* + def _BitOr(self): + return self._ExprFuncTemplate(self._BitXor, ["|"]) + + # A [ ^ B]* + def _BitXor(self): + return self._ExprFuncTemplate(self._BitAnd, ["XOR", "xor", "^"]) + + # A [ & B]* + def _BitAnd(self): + return self._ExprFuncTemplate(self._EqExpr, ["&"]) + + # A [ == B]* + def _EqExpr(self): + Val = self._RelExpr() + while self._IsOperator(["==", "!=", "EQ", "NE", "IN", "in", "!", "NOT", "not"]): + Op = self._Token + if Op in ["!", "NOT", "not"]: + if not self._IsOperator(["IN", "in"]): + raise BadExpression(ERR_REL_NOT_IN) + Op += ' ' + self._Token + Val = self.Eval(Op, Val, self._RelExpr()) + return Val + + # A [ > B]* + def _RelExpr(self): + return self._ExprFuncTemplate(self._AddExpr, ["<=", ">=", "<", ">", "LE", "GE", "LT", "GT"]) + + # A [ + B]* + def _AddExpr(self): + return self._ExprFuncTemplate(self._UnaryExpr, ["+", "-"]) + + # [!]*A + def _UnaryExpr(self): + if self._IsOperator(["!", "NOT", "not"]): + Val = self._UnaryExpr() + return self.Eval('not', Val) + return self._IdenExpr() + + # Parse identifier or encapsulated expression + def _IdenExpr(self): + Tk = self._GetToken() + if Tk == '(': + Val = self._OrExpr() + try: + # _GetToken may also raise BadExpression + if self._GetToken() != ')': + raise BadExpression(ERR_MATCH) + except BadExpression: + raise BadExpression(ERR_MATCH) + return Val + return Tk + + # Skip whitespace or tab + def __SkipWS(self): + for Char in self._Expr[self._Idx:]: + if Char not in ' \t': + break + self._Idx += 1 + + # Try to convert string to number + def __IsNumberToken(self): + Radix = 10 + if self._Token.lower()[0:2] == '0x' and len(self._Token) > 2: + Radix = 16 + try: + self._Token = int(self._Token, Radix) + return True + except ValueError: + return False + except TypeError: + return False + + # Parse array: {...} + def __GetArray(self): + Token = '{' + self._Idx += 1 + self.__GetNList(True) + Token += self._LiteralToken + if self._Idx >= self._Len or self._Expr[self._Idx] != '}': + raise BadExpression(ERR_ARRAY_TOKEN % Token) + Token += '}' + + # All whitespace and tabs in array are already stripped. + IsArray = IsGuid = False + if len(Token.split(',')) == 11 and len(Token.split(',{')) == 2 \ + and len(Token.split('},')) == 1: + HexLen = [11,6,6,5,4,4,4,4,4,4,6] + HexList= Token.split(',') + if HexList[3].startswith('{') and \ + not [Index for Index, Hex in enumerate(HexList) if len(Hex) > HexLen[Index]]: + IsGuid = True + if Token.lstrip('{').rstrip('}').find('{') == -1: + if not [Hex for Hex in Token.lstrip('{').rstrip('}').split(',') if len(Hex) > 4]: + IsArray = True + if not IsArray and not IsGuid: + raise BadExpression(ERR_ARRAY_TOKEN % Token) + self._Idx += 1 + self._Token = self._LiteralToken = Token + return self._Token + + # Parse string, the format must be: "..." + def __GetString(self): + Idx = self._Idx + + # Skip left quote + self._Idx += 1 + + # Replace escape \\\", \" + Expr = self._Expr[self._Idx:].replace('\\\\', '//').replace('\\\"', '\\\'') + for Ch in Expr: + self._Idx += 1 + if Ch == '"': + break + self._Token = self._LiteralToken = self._Expr[Idx:self._Idx] + if not self._Token.endswith('"'): + raise BadExpression(ERR_STRING_TOKEN % self._Token) + self._Token = self._Token[1:-1] + return self._Token + + # Get token that is comprised by alphanumeric, underscore or dot(used by PCD) + # @param IsAlphaOp: Indicate if parsing general token or script operator(EQ, NE...) + def __GetIdToken(self, IsAlphaOp = False): + IdToken = '' + for Ch in self._Expr[self._Idx:]: + if not self.__IsIdChar(Ch): + break + self._Idx += 1 + IdToken += Ch + + self._Token = self._LiteralToken = IdToken + if not IsAlphaOp: + self.__ResolveToken() + return self._Token + + # Try to resolve token + def __ResolveToken(self): + if not self._Token: + raise BadExpression(ERR_EMPTY_TOKEN) + + # PCD token + if self.PcdPattern.match(self._Token): + if self._Token not in self._Symb: + raise SymbolNotFound(ERR_PCD_RESOLVE % self._Token) + self._Token = ValueExpression(self._Symb[self._Token], self._Symb)() + if type(self._Token) != type(''): + self._LiteralToken = hex(self._Token) + return + + if self._Token.startswith('"'): + self._Token = self._Token[1:-1] + elif self._Token in ["FALSE", "false", "False"]: + self._Token = False + elif self._Token in ["TRUE", "true", "True"]: + self._Token = True + else: + self.__IsNumberToken() + + def __GetNList(self, InArray=False): + self._GetSingleToken() + if not self.__IsHexLiteral(): + if InArray: + raise BadExpression(ERR_ARRAY_ELE % self._Token) + return self._Token + + self.__SkipWS() + Expr = self._Expr[self._Idx:] + if not Expr.startswith(','): + return self._Token + + NList = self._LiteralToken + while Expr.startswith(','): + NList += ',' + self._Idx += 1 + self.__SkipWS() + self._GetSingleToken() + if not self.__IsHexLiteral(): + raise BadExpression(ERR_ARRAY_ELE % self._Token) + NList += self._LiteralToken + self.__SkipWS() + Expr = self._Expr[self._Idx:] + self._Token = self._LiteralToken = NList + return self._Token + + def __IsHexLiteral(self): + if self._LiteralToken.startswith('{') and \ + self._LiteralToken.endswith('}'): + return True + + if self.HexPattern.match(self._LiteralToken): + Token = self._LiteralToken[2:] + Token = Token.lstrip('0') + if not Token: + self._LiteralToken = '0x0' + else: + self._LiteralToken = '0x' + Token + return True + return False + + def _GetToken(self): + return self.__GetNList() + + @staticmethod + def __IsIdChar(Ch): + return Ch in '._/:' or Ch.isalnum() + + # Parse operand + def _GetSingleToken(self): + self.__SkipWS() + Expr = self._Expr[self._Idx:] + if Expr.startswith('L"'): + # Skip L + self._Idx += 1 + UStr = self.__GetString() + self._Token = 'L"' + UStr + '"' + return self._Token + + self._Token = '' + if Expr: + Ch = Expr[0] + Match = self.RegGuidPattern.match(Expr) + if Match and not Expr[Match.end():Match.end()+1].isalnum() \ + and Expr[Match.end():Match.end()+1] != '_': + self._Idx += Match.end() + self._Token = ValueExpression(GuidStringToGuidStructureString(Expr[0:Match.end()]))() + return self._Token + elif self.__IsIdChar(Ch): + return self.__GetIdToken() + elif Ch == '"': + return self.__GetString() + elif Ch == '{': + return self.__GetArray() + elif Ch == '(' or Ch == ')': + self._Idx += 1 + self._Token = Ch + return self._Token + + raise BadExpression(ERR_VALID_TOKEN % Expr) + + # Parse operator + def _GetOperator(self): + self.__SkipWS() + LegalOpLst = ['&&', '||', '!=', '==', '>=', '<='] + self.NonLetterOpLst + + self._Token = '' + Expr = self._Expr[self._Idx:] + + # Reach end of expression + if not Expr: + return '' + + # Script operator: LT, GT, LE, GE, EQ, NE, and, or, xor, not + if Expr[0].isalpha(): + return self.__GetIdToken(True) + + # Start to get regular operator: +, -, <, > ... + if Expr[0] not in self.NonLetterOpLst: + return '' + + OpToken = '' + for Ch in Expr: + if Ch in self.NonLetterOpLst: + if '!' == Ch and OpToken in ['!=', '!']: + break + self._Idx += 1 + OpToken += Ch + else: + break + + if OpToken not in LegalOpLst: + raise BadExpression(ERR_OPERATOR_UNSUPPORT % OpToken) + self._Token = OpToken + return OpToken + + # Check if current token matches the operators given from OpList + def _IsOperator(self, OpList): + Idx = self._Idx + self._GetOperator() + if self._Token in OpList: + if self._Token in self.LogicalOperators: + self._Token = self.LogicalOperators[self._Token] + return True + self._Idx = Idx + return False + +if __name__ == '__main__': + pass + + diff --git a/BaseTools/Source/Python/Common/GlobalData.py b/BaseTools/Source/Python/Common/GlobalData.py index 37ae2d33eb..bc7e047676 100644 --- a/BaseTools/Source/Python/Common/GlobalData.py +++ b/BaseTools/Source/Python/Common/GlobalData.py @@ -22,9 +22,11 @@ gEcpSource = "EdkCompatibilityPkg" gOptions = None gCaseInsensitive = False -gGlobalDefines = {} gAllFiles = None +gGlobalDefines = {} +gPlatformDefines = {} +gCommandLineDefines = {} gEdkGlobal = {} gOverrideDir = {} @@ -33,8 +35,13 @@ gProcessingFile = '' gBuildingModule = '' ## Regular expression for matching macro used in DSC/DEC/INF file inclusion -gMacroPattern = re.compile("\$\(([_A-Z][_A-Z0-9]*)\)", re.UNICODE) +gMacroRefPattern = re.compile("\$\(([A-Z][_A-Z0-9]*)\)", re.UNICODE) +gMacroDefPattern = re.compile("^(DEFINE|EDK_GLOBAL)[ \t]+") +gMacroNamePattern = re.compile("^[A-Z][A-Z0-9_]*$") +# C-style wide string pattern +gWideStringPattern = re.compile('(\W|\A)L"') # # A global variable for whether current build in AutoGen phase or not. # gAutoGenPhase = False + diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index 731bbf1458..50504aa73c 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -156,7 +156,7 @@ def GuidStructureStringToGuidValueName(GuidValue): guidValueString = GuidValue.lower().replace("{", "").replace("}", "").replace(" ", "") guidValueList = guidValueString.split(",") if len(guidValueList) != 11: - EdkLogger.error(None, None, "Invalid GUID value string %s" % GuidValue) + EdkLogger.error(None, FORMAT_INVALID, "Invalid GUID value string [%s]" % GuidValue) return "%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x" % ( int(guidValueList[0], 16), int(guidValueList[1], 16), @@ -1431,6 +1431,9 @@ class PathClass(object): self._Key = self.Path.upper() # + self.ToolChainFamily + self.TagName + self.ToolCode + self.Target return self._Key + def _GetTimeStamp(self): + return os.stat(self.Path)[8] + def Validate(self, Type='', CaseSensitive=True): if GlobalData.gCaseInsensitive: CaseSensitive = False @@ -1465,6 +1468,7 @@ class PathClass(object): return ErrorCode, ErrorInfo Key = property(_GetFileKey) + TimeStamp = property(_GetTimeStamp) ## Parse PE image to get the required PE informaion. # @@ -1482,7 +1486,7 @@ class PeImageClass(): self.SectionHeaderList = [] self.ErrorInfo = '' try: - PeObject = open(PeFile, 'rb') + PeObject = open(PeFile, 'rb') except: self.ErrorInfo = self.FileName + ' can not be found\n' return diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Python/Common/String.py index 4880768866..a35f728dc0 100644 --- a/BaseTools/Source/Python/Common/String.py +++ b/BaseTools/Source/Python/Common/String.py @@ -22,6 +22,7 @@ import EdkLogger as EdkLogger import GlobalData from BuildToolError import * +from CommonDataClass.Exceptions import * gHexVerPatt = re.compile('0x[a-f0-9]{4}[a-f0-9]{4}$',re.IGNORECASE) gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') @@ -39,7 +40,52 @@ gHumanReadableVerPatt = re.compile(r'([1-9][0-9]*|0)\.[0-9]{1,2}$') # @retval list() A list for splitted string # def GetSplitValueList(String, SplitTag = DataType.TAB_VALUE_SPLIT, MaxSplit = -1): - return map(lambda l: l.strip(), String.split(SplitTag, MaxSplit)) + ValueList = [] + Last = 0 + Escaped = False + InString = False + for Index in range(0, len(String)): + Char = String[Index] + + if not Escaped: + # Found a splitter not in a string, split it + if not InString and Char == SplitTag: + ValueList.append(String[Last:Index].strip()) + Last = Index+1 + if MaxSplit > 0 and len(ValueList) >= MaxSplit: + break + + if Char == '\\' and InString: + Escaped = True + elif Char == '"': + if not InString: + InString = True + else: + InString = False + else: + Escaped = False + + if Last < len(String): + ValueList.append(String[Last:].strip()) + elif Last == len(String): + ValueList.append('') + + return ValueList + +## GetSplitList +# +# Get a value list from a string with multiple values splited with SplitString +# The default SplitTag is DataType.TAB_VALUE_SPLIT +# 'AAA|BBB|CCC' -> ['AAA', 'BBB', 'CCC'] +# +# @param String: The input string to be splitted +# @param SplitStr: The split key, default is DataType.TAB_VALUE_SPLIT +# @param MaxSplit: The max number of split values, default is -1 +# +# @retval list() A list for splitted string +# +def GetSplitList(String, SplitStr = DataType.TAB_VALUE_SPLIT, MaxSplit = -1): + return map(lambda l: l.strip(), String.split(SplitStr, MaxSplit)) ## MergeArches # @@ -210,16 +256,18 @@ def ReplaceMacros(StringList, MacroDefinitions={}, SelfReplacement = False): # # @retval string The string whose macros are replaced # -def ReplaceMacro(String, MacroDefinitions={}, SelfReplacement = False): +def ReplaceMacro(String, MacroDefinitions={}, SelfReplacement=False, RaiseError=False): LastString = String - while MacroDefinitions: - MacroUsed = GlobalData.gMacroPattern.findall(String) + while String and MacroDefinitions: + MacroUsed = GlobalData.gMacroRefPattern.findall(String) # no macro found in String, stop replacing if len(MacroUsed) == 0: break for Macro in MacroUsed: if Macro not in MacroDefinitions: + if RaiseError: + raise SymbolNotFound("%s not defined" % Macro) if SelfReplacement: String = String.replace("$(%s)" % Macro, '') continue diff --git a/BaseTools/Source/Python/CommonDataClass/DataClass.py b/BaseTools/Source/Python/CommonDataClass/DataClass.py index ebb0358b0b..3d971c84cd 100644 --- a/BaseTools/Source/Python/CommonDataClass/DataClass.py +++ b/BaseTools/Source/Python/CommonDataClass/DataClass.py @@ -89,11 +89,13 @@ MODEL_META_DATA_COMPONENT = 5009 MODEL_META_DATA_USER_EXTENSION = 5010 MODEL_META_DATA_PACKAGE = 5011 MODEL_META_DATA_NMAKE = 5012 -MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF = 50013 +MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF = 5013 MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF = 5014 MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH = 5015 MODEL_META_DATA_COMMENT = 5016 MODEL_META_DATA_GLOBAL_DEFINE = 5017 +MODEL_META_DATA_SECTION_HEADER = 5100 +MODEL_META_DATA_SUBSECTION_HEADER = 5200 MODEL_EXTERNAL_DEPENDENCY = 10000 diff --git a/BaseTools/Source/Python/CommonDataClass/Exceptions.py b/BaseTools/Source/Python/CommonDataClass/Exceptions.py new file mode 100644 index 0000000000..50541e80f2 --- /dev/null +++ b/BaseTools/Source/Python/CommonDataClass/Exceptions.py @@ -0,0 +1,29 @@ +## @file +# This file is used to define common Exceptions class used in python tools +# +# Copyright (c) 2011, Intel Corporation. All rights reserved.
+# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +## Exceptions used in Expression +class EvaluationException(Exception): + pass + +class BadExpression(EvaluationException): + pass + +class WrnExpression(Exception): + pass + +## Exceptions used in macro replacements +class MacroException(Exception): + pass + +class SymbolNotFound(MacroException): + pass + diff --git a/BaseTools/Source/Python/GenFds/AprioriSection.py b/BaseTools/Source/Python/GenFds/AprioriSection.py index bb40d756c8..a6dace82a6 100644 --- a/BaseTools/Source/Python/GenFds/AprioriSection.py +++ b/BaseTools/Source/Python/GenFds/AprioriSection.py @@ -79,11 +79,11 @@ class AprioriSection (AprioriSectionClassObject): InfFileName = GenFdsGlobalVariable.MacroExtend(InfFileName, Dict, Arch) if Arch != None: - Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), Arch] + Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] Guid = Inf.Guid else: - Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), 'COMMON'] + Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClass(InfFileName, GenFdsGlobalVariable.WorkSpaceDir), 'COMMON', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] Guid = Inf.Guid self.BinFileList = Inf.Module.Binaries diff --git a/BaseTools/Source/Python/GenFds/DepexSection.py b/BaseTools/Source/Python/GenFds/DepexSection.py index 39678b23e9..b7b1ae7d93 100644 --- a/BaseTools/Source/Python/GenFds/DepexSection.py +++ b/BaseTools/Source/Python/GenFds/DepexSection.py @@ -39,7 +39,10 @@ class DepexSection (DepexSectionClassObject): def __FindGuidValue(self, CName): for Arch in GenFdsGlobalVariable.ArchList: - for PkgDb in GenFdsGlobalVariable.WorkSpace.PackageList: + for PkgDb in GenFdsGlobalVariable.WorkSpace.GetPackageList(GenFdsGlobalVariable.ActivePlatform, + Arch, + GenFdsGlobalVariable.TargetName, + GenFdsGlobalVariable.ToolChainTag): if CName in PkgDb.Ppis: return PkgDb.Ppis[CName] if CName in PkgDb.Protocols: diff --git a/BaseTools/Source/Python/GenFds/Fd.py b/BaseTools/Source/Python/GenFds/Fd.py index cbfd6715ca..aa4d2e8262 100644 --- a/BaseTools/Source/Python/GenFds/Fd.py +++ b/BaseTools/Source/Python/GenFds/Fd.py @@ -71,11 +71,11 @@ class FD(FDClassObject): for RegionObj in self.RegionList : if RegionObj.RegionType == 'CAPSULE': - continue + continue if RegionObj.Offset + RegionObj.Size <= PreviousRegionStart: - pass + pass elif RegionObj.Offset <= PreviousRegionStart or (RegionObj.Offset >=PreviousRegionStart and RegionObj.Offset < PreviousRegionStart + PreviousRegionSize): - pass + pass elif RegionObj.Offset > PreviousRegionStart + PreviousRegionSize: GenFdsGlobalVariable.InfLogger('Padding region starting from offset 0x%X, with size 0x%X' %(PreviousRegionStart + PreviousRegionSize, RegionObj.Offset - (PreviousRegionStart + PreviousRegionSize))) PadRegion = Region.Region() @@ -88,7 +88,7 @@ class FD(FDClassObject): # Call each region's AddToBuffer function # if PreviousRegionSize > self.Size: - pass + pass GenFdsGlobalVariable.VerboseLogger('Call each region\'s AddToBuffer function') RegionObj.AddToBuffer (TempFdBuffer, self.BaseAddress, self.BlockSizeList, self.ErasePolarity, GenFds.ImageBinDict, self.vtfRawDict, self.DefineVarDict) diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py index 4f555e32bb..e3a018c66c 100644 --- a/BaseTools/Source/Python/GenFds/FdfParser.py +++ b/BaseTools/Source/Python/GenFds/FdfParser.py @@ -15,6 +15,8 @@ ## # Import Modules # +import re + import Fd import Region import Fv @@ -45,6 +47,8 @@ from Common.BuildToolError import * from Common import EdkLogger from Common.Misc import PathClass from Common.String import NormPath +import Common.GlobalData as GlobalData +from Common.Expression import * from Common import GlobalData import re @@ -68,6 +72,9 @@ T_CHAR_BACKSLASH, T_CHAR_DOUBLE_QUOTE, T_CHAR_SINGLE_QUOTE, T_CHAR_STAR, T_CHAR_ SEPERATOR_TUPLE = ('=', '|', ',', '{', '}') +RegionSizePattern = re.compile("\s*(?P(?:0x|0X)?[a-fA-F0-9]+)\s*\|\s*(?P(?:0x|0X)?[a-fA-F0-9]+)\s*") +RegionSizeGuidPattern = re.compile("\s*(?P\w+\.\w+)\s*\|\s*(?P\w+\.\w+)\s*") + IncludeFileList = [] # Macro passed from command line, which has greatest priority and can NOT be overridden by those in FDF InputMacroDict = {} @@ -211,6 +218,10 @@ class FdfParser: if GenFdsGlobalVariable.WorkSpaceDir == '': GenFdsGlobalVariable.WorkSpaceDir = os.getenv("WORKSPACE") + InputMacroDict.update(GlobalData.gPlatformDefines) + InputMacroDict.update(GlobalData.gGlobalDefines) + InputMacroDict.update(GlobalData.gCommandLineDefines) + ## __IsWhiteSpace() method # # Whether char at current FileBufferPos is whitespace @@ -317,10 +328,10 @@ class FdfParser: # def __GetOneChar(self): if self.CurrentOffsetWithinLine == len(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) - 1: - self.CurrentLineNumber += 1 - self.CurrentOffsetWithinLine = 0 + self.CurrentLineNumber += 1 + self.CurrentOffsetWithinLine = 0 else: - self.CurrentOffsetWithinLine += 1 + self.CurrentOffsetWithinLine += 1 ## __CurrentChar() method # @@ -564,7 +575,7 @@ class FdfParser: self.Profile.FileLinesList[IncludeLine - 1] = ''.join(TempList) self.Rewind() - + def __GetIfListCurrentItemStat(self, IfList): if len(IfList) == 0: return True @@ -574,8 +585,7 @@ class FdfParser: return False return True - - + ## PreprocessConditionalStatement() method # # Preprocess conditional statement. @@ -586,9 +596,10 @@ class FdfParser: def PreprocessConditionalStatement(self): # IfList is a stack of if branches with elements of list [Pos, CondSatisfied, BranchDetermined] IfList = [] + RegionLayoutLine = 0 while self.__GetNextToken(): if self.__Token == 'DEFINE': - if self.__GetIfListCurrentItemStat(IfList): + if self.__GetIfListCurrentItemStat(IfList): DefineLine = self.CurrentLineNumber - 1 DefineOffset = self.CurrentOffsetWithinLine - len('DEFINE') if not self.__GetNextToken(): @@ -609,60 +620,48 @@ class FdfParser: MacProfile.MacroName = Macro MacProfile.MacroValue = Value AllMacroList.append(MacProfile) + InputMacroDict[MacProfile.MacroName] = MacProfile.MacroValue self.__WipeOffArea.append(((DefineLine, DefineOffset), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) + elif self.__Token == 'SET': + PcdPair = self.__GetNextPcdName() + PcdName = "%s.%s" % (PcdPair[1], PcdPair[0]) + if not self.__IsToken( "="): + raise Warning("expected '='", self.FileName, self.CurrentLineNumber) + if not self.__GetNextToken(): + raise Warning("expected value", self.FileName, self.CurrentLineNumber) + + Value = self.__Token + if Value.startswith("{"): + # deal with value with {} + if not self.__SkipToToken( "}"): + raise Warning("expected '}'", self.FileName, self.CurrentLineNumber) + Value += self.__SkippedChars + + InputMacroDict[PcdName] = Value elif self.__Token in ('!ifdef', '!ifndef', '!if'): IfStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token)) IfList.append([IfStartPos, None, None]) + CondLabel = self.__Token + Expression = self.__GetExpression() - MacroName, NotFlag = self.__GetMacroName() - NotDefineFlag = False - if CondLabel == '!ifndef': - NotDefineFlag = True - if CondLabel == '!ifdef' or CondLabel == '!ifndef': - if NotFlag: - raise Warning("'NOT' operation not allowed for Macro name", self.FileName, self.CurrentLineNumber) - if CondLabel == '!if': - - if not self.__GetNextOp(): - raise Warning("expected !endif", self.FileName, self.CurrentLineNumber) - - if self.__Token in ('!=', '==', '>', '<', '>=', '<='): - Op = self.__Token - if not self.__GetNextToken(): - raise Warning("expected value", self.FileName, self.CurrentLineNumber) - if self.__GetStringData(): - pass - MacroValue = self.__Token - ConditionSatisfied = self.__EvaluateConditional(MacroName, IfList[-1][0][0] + 1, Op, MacroValue) - if NotFlag: - ConditionSatisfied = not ConditionSatisfied - BranchDetermined = ConditionSatisfied - else: - self.CurrentOffsetWithinLine -= len(self.__Token) - ConditionSatisfied = self.__EvaluateConditional(MacroName, IfList[-1][0][0] + 1, None, 'Bool') - if NotFlag: - ConditionSatisfied = not ConditionSatisfied - BranchDetermined = ConditionSatisfied - IfList[-1] = [IfList[-1][0], ConditionSatisfied, BranchDetermined] - if ConditionSatisfied: - self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) - + ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'eval') else: - ConditionSatisfied = self.__EvaluateConditional(MacroName, IfList[-1][0][0] + 1) - if NotDefineFlag: + ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'in') + if CondLabel == '!ifndef': ConditionSatisfied = not ConditionSatisfied - BranchDetermined = ConditionSatisfied - IfList[-1] = [IfList[-1][0], ConditionSatisfied, BranchDetermined] - if ConditionSatisfied: - self.__WipeOffArea.append((IfStartPos, (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) + BranchDetermined = ConditionSatisfied + IfList[-1] = [IfList[-1][0], ConditionSatisfied, BranchDetermined] + if ConditionSatisfied: + self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) elif self.__Token in ('!elseif', '!else'): ElseStartPos = (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len(self.__Token)) if len(IfList) <= 0: raise Warning("Missing !if statement", self.FileName, self.CurrentLineNumber) + if IfList[-1][1]: IfList[-1] = [ElseStartPos, False, True] self.__WipeOffArea.append((ElseStartPos, (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) @@ -670,27 +669,8 @@ class FdfParser: self.__WipeOffArea.append((IfList[-1][0], ElseStartPos)) IfList[-1] = [ElseStartPos, True, IfList[-1][2]] if self.__Token == '!elseif': - MacroName, NotFlag = self.__GetMacroName() - if not self.__GetNextOp(): - raise Warning("expected !endif", self.FileName, self.CurrentLineNumber) - - if self.__Token in ('!=', '==', '>', '<', '>=', '<='): - Op = self.__Token - if not self.__GetNextToken(): - raise Warning("expected value", self.FileName, self.CurrentLineNumber) - if self.__GetStringData(): - pass - MacroValue = self.__Token - ConditionSatisfied = self.__EvaluateConditional(MacroName, IfList[-1][0][0] + 1, Op, MacroValue) - if NotFlag: - ConditionSatisfied = not ConditionSatisfied - - else: - self.CurrentOffsetWithinLine -= len(self.__Token) - ConditionSatisfied = self.__EvaluateConditional(MacroName, IfList[-1][0][0] + 1, None, 'Bool') - if NotFlag: - ConditionSatisfied = not ConditionSatisfied - + Expression = self.__GetExpression() + ConditionSatisfied = self.__EvaluateConditional(Expression, IfList[-1][0][0] + 1, 'eval') IfList[-1] = [IfList[-1][0], ConditionSatisfied, IfList[-1][2]] if IfList[-1][1]: @@ -699,8 +679,6 @@ class FdfParser: else: IfList[-1][2] = True self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) - - elif self.__Token == '!endif': if IfList[-1][1]: self.__WipeOffArea.append(((self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - len('!endif')), (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) @@ -708,106 +686,48 @@ class FdfParser: self.__WipeOffArea.append((IfList[-1][0], (self.CurrentLineNumber - 1, self.CurrentOffsetWithinLine - 1))) IfList.pop() + elif not IfList: # Don't use PCDs inside conditional directive + if self.CurrentLineNumber <= RegionLayoutLine: + # Don't try the same line twice + continue + RegionSize = RegionSizePattern.match(self.Profile.FileLinesList[self.CurrentLineNumber - 1]) + if not RegionSize: + RegionLayoutLine = self.CurrentLineNumber + continue + RegionSizeGuid = RegionSizeGuidPattern.match(self.Profile.FileLinesList[self.CurrentLineNumber]) + if not RegionSizeGuid: + RegionLayoutLine = self.CurrentLineNumber + 1 + continue + InputMacroDict[RegionSizeGuid.group('base')] = RegionSize.group('base') + InputMacroDict[RegionSizeGuid.group('size')] = RegionSize.group('size') + RegionLayoutLine = self.CurrentLineNumber + 1 - - if len(IfList) > 0: + if IfList: raise Warning("Missing !endif", self.FileName, self.CurrentLineNumber) self.Rewind() - def __EvaluateConditional(self, Name, Line, Op = None, Value = None): - + def __EvaluateConditional(self, Expression, Line, Op = None, Value = None): FileLineTuple = GetRealFileLine(self.FileName, Line) - if Name in InputMacroDict: - MacroValue = InputMacroDict[Name] - if Op == None: - if Value == 'Bool' and MacroValue == None or MacroValue.upper() == 'FALSE': - return False - return True - elif Op == '!=': - if Value != MacroValue: - return True - else: - return False - elif Op == '==': - if Value == MacroValue: - return True - else: - return False - else: - if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(MacroValue) or (MacroValue != None and MacroValue.isdigit())): - InputVal = long(Value, 0) - MacroVal = long(MacroValue, 0) - if Op == '>': - if MacroVal > InputVal: - return True - else: - return False - elif Op == '>=': - if MacroVal >= InputVal: - return True - else: - return False - elif Op == '<': - if MacroVal < InputVal: - return True - else: - return False - elif Op == '<=': - if MacroVal <= InputVal: - return True - else: - return False - else: - return False - else: - raise Warning("Value %s is not a number", self.FileName, Line) - - for Profile in AllMacroList: - if Profile.MacroName == Name and Profile.DefinedAtLine <= FileLineTuple[1]: - if Op == None: - if Value == 'Bool' and Profile.MacroValue == None or Profile.MacroValue.upper() == 'FALSE': - return False - return True - elif Op == '!=': - if Value != Profile.MacroValue: - return True - else: - return False - elif Op == '==': - if Value == Profile.MacroValue: - return True - else: - return False - else: - if (self.__IsHex(Value) or Value.isdigit()) and (self.__IsHex(Profile.MacroValue) or (Profile.MacroValue != None and Profile.MacroValue.isdigit())): - InputVal = long(Value, 0) - MacroVal = long(Profile.MacroValue, 0) - if Op == '>': - if MacroVal > InputVal: - return True - else: - return False - elif Op == '>=': - if MacroVal >= InputVal: - return True - else: - return False - elif Op == '<': - if MacroVal < InputVal: - return True - else: - return False - elif Op == '<=': - if MacroVal <= InputVal: - return True - else: - return False - else: - return False - else: - raise Warning("Value %s is not a number", self.FileName, Line) - - return False + if Op == 'eval': + try: + return ValueExpression(Expression, InputMacroDict)() + except SymbolNotFound: + return False + except WrnExpression, Excpt: + # + # Catch expression evaluation warning here. We need to report + # the precise number of line and return the evaluation result + # + EdkLogger.warn('Parser', "Suspicious expression: %s" % str(Excpt), + File=self.FileName, ExtraData=self.__CurrentLine(), + Line=Line) + return Excpt.result + except Exception, Excpt: + raise Warning("Invalid expression", *FileLineTuple) + else: + if Expression.startswith('$(') and Expression[-1] == ')': + Expression = Expression[2:-1] + return Expression in InputMacroDict ## __IsToken() method # @@ -866,6 +786,16 @@ class FdfParser: return True return False + def __GetExpression(self): + Line = self.Profile.FileLinesList[self.CurrentLineNumber - 1] + Index = len(Line) - 1 + while Line[Index] in ['\r', '\n']: + Index -= 1 + ExpressionString = self.Profile.FileLinesList[self.CurrentLineNumber - 1][self.CurrentOffsetWithinLine:Index+1] + self.CurrentOffsetWithinLine += len(ExpressionString) + ExpressionString = ExpressionString.strip() + return ExpressionString + ## __GetNextWord() method # # Get next C name from file lines @@ -1208,7 +1138,7 @@ class FdfParser: for Pos in self.__WipeOffArea: self.__ReplaceFragment(Pos[0], Pos[1]) self.Profile.FileLinesList = ["".join(list) for list in self.Profile.FileLinesList] - + while self.__GetDefines(): pass @@ -2014,8 +1944,8 @@ class FdfParser: if not IsValidBaseAddrValue.match(self.__Token.upper()): raise Warning("Unknown FV base address value '%s'" % self.__Token, self.FileName, self.CurrentLineNumber) Obj.FvBaseAddress = self.__Token - return True - + return True + ## __GetFvForceRebase() method # # Get FvForceRebase for FV @@ -2047,7 +1977,8 @@ class FdfParser: Obj.FvForceRebase = None return True - + + ## __GetFvAttributes() method # # Get attributes for FV @@ -2475,6 +2406,7 @@ class FdfParser: if ErrorCode != 0: EdkLogger.error("GenFds", ErrorCode, ExtraData=ErrorInfo) + if not self.__IsToken( "}"): raise Warning("expected '}'", self.FileName, self.CurrentLineNumber) diff --git a/BaseTools/Source/Python/GenFds/FfsFileStatement.py b/BaseTools/Source/Python/GenFds/FfsFileStatement.py index b858549361..04527fe00f 100644 --- a/BaseTools/Source/Python/GenFds/FfsFileStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsFileStatement.py @@ -71,7 +71,7 @@ class FileStatement (FileStatementClassObject) : OutputDir = os.path.join(GenFdsGlobalVariable.FfsDir, self.NameGuid) if not os.path.exists(OutputDir): - os.makedirs(OutputDir) + os.makedirs(OutputDir) Dict.update(self.DefineVarDict) SectionAlignments = None @@ -98,7 +98,7 @@ class FileStatement (FileStatementClassObject) : SectionFiles = [] Index = 0 SectionAlignments = [] - for section in self.SectionList: + for section in self.SectionList : Index = Index + 1 SecIndex = '%d' %Index # process the inside FvImage from FvSection or GuidSection diff --git a/BaseTools/Source/Python/GenFds/FfsInfStatement.py b/BaseTools/Source/Python/GenFds/FfsInfStatement.py index c6f29f6ddd..96e212cae7 100644 --- a/BaseTools/Source/Python/GenFds/FfsInfStatement.py +++ b/BaseTools/Source/Python/GenFds/FfsInfStatement.py @@ -163,7 +163,7 @@ class FfsInfStatement(FfsInfStatementClassObject): if self.CurrentArch != None: - Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClassObj, self.CurrentArch] + Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClassObj, self.CurrentArch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] # # Set Ffs BaseName, MdouleGuid, ModuleType, Version, OutputPath # @@ -181,7 +181,7 @@ class FfsInfStatement(FfsInfStatementClassObject): self.ShadowFromInfFile = Inf.Shadow else: - Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClassObj, 'COMMON'] + Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClassObj, 'COMMON', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] self.BaseName = Inf.BaseName self.ModuleGuid = Inf.Guid self.ModuleType = Inf.ModuleType @@ -363,27 +363,27 @@ class FfsInfStatement(FfsInfStatementClassObject): InfFileKey = os.path.normpath(os.path.join(GenFdsGlobalVariable.WorkSpaceDir, self.InfFileName)) DscArchList = [] - PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'IA32'] + PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'IA32', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] if PlatformDataBase != None: if InfFileKey in PlatformDataBase.Modules: DscArchList.append ('IA32') - PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'X64'] + PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'X64', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] if PlatformDataBase != None: if InfFileKey in PlatformDataBase.Modules: DscArchList.append ('X64') - PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'IPF'] + PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'IPF', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] if PlatformDataBase != None: if InfFileKey in (PlatformDataBase.Modules): DscArchList.append ('IPF') - PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'ARM'] + PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'ARM', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] if PlatformDataBase != None: if InfFileKey in (PlatformDataBase.Modules): DscArchList.append ('ARM') - PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'EBC'] + PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'EBC', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] if PlatformDataBase != None: if InfFileKey in (PlatformDataBase.Modules): DscArchList.append ('EBC') diff --git a/BaseTools/Source/Python/GenFds/Fv.py b/BaseTools/Source/Python/GenFds/Fv.py index f186ab0e73..fd5ad0e9ac 100644 --- a/BaseTools/Source/Python/GenFds/Fv.py +++ b/BaseTools/Source/Python/GenFds/Fv.py @@ -48,7 +48,7 @@ class FV (FvClassObject): self.CapsuleName = None self.FvBaseAddress = None self.FvForceRebase = None - + ## AddToBuffer() # # Generate Fv and add it to the Buffer @@ -83,13 +83,13 @@ class FV (FvClassObject): elif RegionData.upper() + 'fv' in GenFds.ImageBinDict.keys(): continue elif self.UiFvName.upper() == RegionData.upper(): - GenFdsGlobalVariable.ErrorLogger("Capsule %s in FD region can't contain a FV %s in FD region." % (self.CapsuleName, self.UiFvName.upper())) + GenFdsGlobalVariable.ErrorLogger("Capsule %s in FD region can't contain a FV %s in FD region." % (self.CapsuleName, self.UiFvName.upper())) GenFdsGlobalVariable.InfLogger( "\nGenerating %s FV" %self.UiFvName) if self.FvBaseAddress != None: - BaseAddress = self.FvBaseAddress - + BaseAddress = self.FvBaseAddress + self.__InitializeInf__(BaseAddress, BlockSize, BlockNum, ErasePloarity, VtfDict) # # First Process the Apriori section diff --git a/BaseTools/Source/Python/GenFds/GenFds.py b/BaseTools/Source/Python/GenFds/GenFds.py index cadd36c922..0219783b03 100644 --- a/BaseTools/Source/Python/GenFds/GenFds.py +++ b/BaseTools/Source/Python/GenFds/GenFds.py @@ -161,20 +161,22 @@ def main(): if len(List) == 2: if List[0].strip() == "EFI_SOURCE": GlobalData.gEfiSource = List[1].strip() + GlobalData.gGlobalDefines["EFI_SOURCE"] = GlobalData.gEfiSource continue elif List[0].strip() == "EDK_SOURCE": GlobalData.gEdkSource = List[1].strip() + GlobalData.gGlobalDefines["EDK_SOURCE"] = GlobalData.gEdkSource continue + elif List[0].strip() in ["WORKSPACE", "TARGET", "TOOLCHAIN"]: + GlobalData.gGlobalDefines[List[0].strip()] = List[1].strip() else: - GlobalData.gEdkGlobal[List[0].strip()] = List[1].strip() - FdfParser.InputMacroDict[List[0].strip()] = List[1].strip() + GlobalData.gCommandLineDefines[List[0].strip()] = List[1].strip() else: - FdfParser.InputMacroDict[List[0].strip()] = "" + GlobalData.gCommandLineDefines[List[0].strip()] = "TRUE" + os.environ["WORKSPACE"] = Workspace """call Workspace build create database""" - os.environ["WORKSPACE"] = Workspace - FdfParser.InputMacroDict["WORKSPACE"] = Workspace - BuildWorkSpace = WorkspaceDatabase(':memory:', FdfParser.InputMacroDict) + BuildWorkSpace = WorkspaceDatabase(None) BuildWorkSpace.InitDatabase() # @@ -187,15 +189,15 @@ def main(): ArchList = Options.archList.split(',') else: # EdkLogger.error("GenFds", OPTION_MISSING, "Missing build ARCH") - ArchList = BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'COMMON'].SupArchList + ArchList = BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'COMMON', Options.BuildTarget, Options.ToolChain].SupArchList - TargetArchList = set(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'COMMON'].SupArchList) & set(ArchList) + TargetArchList = set(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'COMMON', Options.BuildTarget, Options.ToolChain].SupArchList) & set(ArchList) if len(TargetArchList) == 0: EdkLogger.error("GenFds", GENFDS_ERROR, "Target ARCH %s not in platform supported ARCH %s" % (str(ArchList), str(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, 'COMMON'].SupArchList))) for Arch in ArchList: - GenFdsGlobalVariable.OutputDirFromDscDict[Arch] = NormPath(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].OutputDirectory) - GenFdsGlobalVariable.PlatformName = BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].PlatformName + GenFdsGlobalVariable.OutputDirFromDscDict[Arch] = NormPath(BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, Options.BuildTarget, Options.ToolChain].OutputDirectory) + GenFdsGlobalVariable.PlatformName = BuildWorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, Options.BuildTarget, Options.ToolChain].PlatformName if (Options.outputDir): OutputDirFromCommandLine = GenFdsGlobalVariable.ReplaceWorkspaceMacro(Options.outputDir) @@ -276,7 +278,8 @@ def main(): ExtraData="Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!\n", RaiseError=False ) - EdkLogger.quiet(traceback.format_exc()) + if Options.debug != None: + EdkLogger.quiet(traceback.format_exc()) ReturnCode = CODE_ERROR return ReturnCode @@ -482,7 +485,7 @@ class GenFds : # @retval None # def PreprocessImage(BuildDb, DscFile): - PcdDict = BuildDb.BuildObject[DscFile, 'COMMON'].Pcds + PcdDict = BuildDb.BuildObject[DscFile, 'COMMON', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].Pcds PcdValue = '' for Key in PcdDict: PcdObj = PcdDict[Key] @@ -501,20 +504,20 @@ class GenFds : if Int64PcdValue > 0: TopAddress = Int64PcdValue - ModuleDict = BuildDb.BuildObject[DscFile, 'COMMON'].Modules + ModuleDict = BuildDb.BuildObject[DscFile, 'COMMON', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].Modules for Key in ModuleDict: - ModuleObj = BuildDb.BuildObject[Key, 'COMMON'] + ModuleObj = BuildDb.BuildObject[Key, 'COMMON', GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] print ModuleObj.BaseName + ' ' + ModuleObj.ModuleType def GenerateGuidXRefFile(BuildDb, ArchList): GuidXRefFileName = os.path.join(GenFdsGlobalVariable.FvDir, "Guid.xref") GuidXRefFile = StringIO.StringIO('') for Arch in ArchList: - PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch] + PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] for ModuleFile in PlatformDataBase.Modules: - Module = BuildDb.BuildObject[ModuleFile, Arch] + Module = BuildDb.BuildObject[ModuleFile, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName)) - SaveFileOnChange(GuidXRefFileName, GuidXRefFile.getvalue(), False) + SaveFileOnChange(GuidXRefFileName, GuidXRefFile.getvalue(), False) GuidXRefFile.close() GenFdsGlobalVariable.InfLogger("\nGUID cross reference file can be found at %s" % GuidXRefFileName) diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py index 236283751e..ea6b191bc1 100644 --- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py +++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py @@ -117,7 +117,7 @@ class GenFdsGlobalVariable: if not BuildRuleDatabase: return {} - PathClassObj = PathClass(str(Inf.MetaFile).lstrip(GenFdsGlobalVariable.WorkSpaceDir), + PathClassObj = PathClass(Inf.MetaFile.File, GenFdsGlobalVariable.WorkSpaceDir) Macro = {} Macro["WORKSPACE" ] = GenFdsGlobalVariable.WorkSpaceDir @@ -135,6 +135,7 @@ class GenFdsGlobalVariable: Macro["ARCH" ] = Arch Macro["TOOLCHAIN" ] = GenFdsGlobalVariable.ToolChainTag Macro["TOOLCHAIN_TAG" ] = GenFdsGlobalVariable.ToolChainTag + Macro["TOOL_CHAIN_TAG" ] = GenFdsGlobalVariable.ToolChainTag Macro["TARGET" ] = GenFdsGlobalVariable.TargetName Macro["BUILD_DIR" ] = GenFdsGlobalVariable.OutputDirDict[Arch] @@ -280,8 +281,8 @@ class GenFdsGlobalVariable: FvAddressFile.writelines("[options]" + T_CHAR_LF) BsAddress = '0' for Arch in ArchList: - if GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].BsBaseAddress: - BsAddress = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].BsBaseAddress + if GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].BsBaseAddress: + BsAddress = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].BsBaseAddress break FvAddressFile.writelines("EFI_BOOT_DRIVER_BASE_ADDRESS = " + \ @@ -290,8 +291,8 @@ class GenFdsGlobalVariable: RtAddress = '0' for Arch in ArchList: - if GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].RtBaseAddress: - RtAddress = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch].RtBaseAddress + if GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].RtBaseAddress: + RtAddress = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag].RtBaseAddress FvAddressFile.writelines("EFI_RUNTIME_DRIVER_BASE_ADDRESS = " + \ RtAddress + \ @@ -345,10 +346,6 @@ class GenFdsGlobalVariable: @staticmethod def GenerateSection(Output, Input, Type=None, CompressionType=None, Guid=None, GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=None): - if not GenFdsGlobalVariable.NeedsUpdate(Output, Input): - return - GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) - Cmd = ["GenSec"] if Type not in [None, '']: Cmd += ["-s", Type] @@ -388,6 +385,13 @@ class GenFdsGlobalVariable: else: Cmd += ["-o", Output] Cmd += Input + + CommandFile = Output + '.txt' + SaveFileOnChange(CommandFile, ' '.join(Cmd), False) + if not GenFdsGlobalVariable.NeedsUpdate(Output, list(Input) + [CommandFile]): + return + GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) + GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section") @staticmethod @@ -402,10 +406,6 @@ class GenFdsGlobalVariable: @staticmethod def GenerateFfs(Output, Input, Type, Guid, Fixed=False, CheckSum=False, Align=None, SectionAlign=None): - if not GenFdsGlobalVariable.NeedsUpdate(Output, Input): - return - GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) - Cmd = ["GenFfs", "-t", Type, "-g", Guid] if Fixed == True: Cmd += ["-x"] @@ -419,6 +419,13 @@ class GenFdsGlobalVariable: Cmd += ("-i", Input[I]) if SectionAlign not in [None, '', []] and SectionAlign[I] not in [None, '']: Cmd += ("-n", SectionAlign[I]) + + CommandFile = Output + '.txt' + SaveFileOnChange(CommandFile, ' '.join(Cmd), False) + if not GenFdsGlobalVariable.NeedsUpdate(Output, list(Input) + [CommandFile]): + return + GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, Input)) + GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate FFS") @staticmethod @@ -436,7 +443,7 @@ class GenFdsGlobalVariable: Cmd +=["-F", "FALSE"] elif ForceRebase == True: Cmd +=["-F", "TRUE"] - + if Capsule: Cmd += ["-c"] if Dump: @@ -653,25 +660,9 @@ class GenFdsGlobalVariable: TokenCName = PcdPair[1] PcdValue = '' - for Platform in GenFdsGlobalVariable.WorkSpace.PlatformList: - # - # Only process platform which match current build option. - # - if Platform.MetaFile == GenFdsGlobalVariable.ActivePlatform: - PcdDict = Platform.Pcds - for Key in PcdDict: - PcdObj = PcdDict[Key] - if (PcdObj.TokenCName == TokenCName) and (PcdObj.TokenSpaceGuidCName == TokenSpace): - if PcdObj.Type != 'FixedAtBuild': - EdkLogger.error("GenFds", GENFDS_ERROR, "%s is not FixedAtBuild type." % PcdPattern) - if PcdObj.DatumType != 'VOID*': - EdkLogger.error("GenFds", GENFDS_ERROR, "%s is not VOID* datum type." % PcdPattern) - - PcdValue = PcdObj.DefaultValue - return PcdValue - - for Package in GenFdsGlobalVariable.WorkSpace.PackageList: - PcdDict = Package.Pcds + for Arch in GenFdsGlobalVariable.ArchList: + Platform = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag] + PcdDict = Platform.Pcds for Key in PcdDict: PcdObj = PcdDict[Key] if (PcdObj.TokenCName == TokenCName) and (PcdObj.TokenSpaceGuidCName == TokenSpace): @@ -682,6 +673,22 @@ class GenFdsGlobalVariable: PcdValue = PcdObj.DefaultValue return PcdValue + + for Package in GenFdsGlobalVariable.WorkSpace.GetPackageList(GenFdsGlobalVariable.ActivePlatform, + Arch, + GenFdsGlobalVariable.TargetName, + GenFdsGlobalVariable.ToolChainTag): + PcdDict = Package.Pcds + for Key in PcdDict: + PcdObj = PcdDict[Key] + if (PcdObj.TokenCName == TokenCName) and (PcdObj.TokenSpaceGuidCName == TokenSpace): + if PcdObj.Type != 'FixedAtBuild': + EdkLogger.error("GenFds", GENFDS_ERROR, "%s is not FixedAtBuild type." % PcdPattern) + if PcdObj.DatumType != 'VOID*': + EdkLogger.error("GenFds", GENFDS_ERROR, "%s is not VOID* datum type." % PcdPattern) + + PcdValue = PcdObj.DefaultValue + return PcdValue return PcdValue diff --git a/BaseTools/Source/Python/GenFds/Section.py b/BaseTools/Source/Python/GenFds/Section.py index ef9720a660..6f57ad5681 100644 --- a/BaseTools/Source/Python/GenFds/Section.py +++ b/BaseTools/Source/Python/GenFds/Section.py @@ -1,7 +1,7 @@ ## @file # section base class # -# Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.
+# Copyright (c) 2007-2011, Intel Corporation. All rights reserved.
# # This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License diff --git a/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py b/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py index a8c36ea3c3..3f6c575128 100644 --- a/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py +++ b/BaseTools/Source/Python/PatchPcdValue/PatchPcdValue.py @@ -23,7 +23,6 @@ from optparse import make_option from Common.BuildToolError import * import Common.EdkLogger as EdkLogger from Common.BuildVersion import gBUILD_VERSION - import array # Version and Copyright diff --git a/BaseTools/Source/Python/UPT/Library/ParserValidate.py b/BaseTools/Source/Python/UPT/Library/ParserValidate.py index d6b9a096c7..8efb56a61a 100644 --- a/BaseTools/Source/Python/UPT/Library/ParserValidate.py +++ b/BaseTools/Source/Python/UPT/Library/ParserValidate.py @@ -17,6 +17,7 @@ PaserValidate import os.path import re +import platform from Library.DataType import MODULE_LIST from Library.DataType import COMPONENT_TYPE_LIST @@ -281,9 +282,14 @@ def IsValidPath(Path, Root): # @param Path: path to be checked # def IsValidInstallPath(Path): - if os.path.isabs(Path): - return False - + if platform.platform().find("Windows") >= 0: + if os.path.isabs(Path): + return False + else: + if Path[1:2] == ':' or Path.find('\\') >=0: + return False + if os.path.isabs(Path): + return False if Path.startswith('.'): return False diff --git a/BaseTools/Source/Python/Workspace/MetaDataTable.py b/BaseTools/Source/Python/Workspace/MetaDataTable.py index 64f0480c37..34ef4903df 100644 --- a/BaseTools/Source/Python/Workspace/MetaDataTable.py +++ b/BaseTools/Source/Python/Workspace/MetaDataTable.py @@ -140,6 +140,10 @@ class Table(object): def SetEndFlag(self): self.Exec("insert into %s values(%s)" % (self.Table, self._DUMMY_)) + # + # Need to execution commit for table data changed. + # + self.Cur.connection.commit() def IsIntegral(self): Result = self.Exec("select min(ID) from %s" % (self.Table)) @@ -147,6 +151,9 @@ class Table(object): return False return True + def GetAll(self): + return self.Exec("select * from %s where ID > 0 order by ID" % (self.Table)) + ## TableFile # # This class defined a table used for file @@ -198,19 +205,15 @@ class TableFile(Table): # # @retval FileID: The ID after record is inserted # - def InsertFile(self, FileFullPath, Model): - (Filepath, Name) = os.path.split(FileFullPath) - (Root, Ext) = os.path.splitext(FileFullPath) - TimeStamp = os.stat(FileFullPath)[8] - File = FileClass(-1, Name, Ext, Filepath, FileFullPath, Model, '', [], [], []) + def InsertFile(self, File, Model): return self.Insert( - Name, - Ext, - Filepath, - FileFullPath, - Model, - TimeStamp - ) + File.Name, + File.Ext, + File.Dir, + File.Path, + Model, + File.TimeStamp + ) ## Get ID of a given file # @@ -218,8 +221,8 @@ class TableFile(Table): # # @retval ID ID value of given file in the table # - def GetFileId(self, FilePath): - QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, FilePath) + def GetFileId(self, File): + QueryScript = "select ID from %s where FullPath = '%s'" % (self.Table, str(File)) RecordList = self.Exec(QueryScript) if len(RecordList) == 0: return None diff --git a/BaseTools/Source/Python/Workspace/MetaFileParser.py b/BaseTools/Source/Python/Workspace/MetaFileParser.py index 4bad21298a..bfa7054396 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileParser.py +++ b/BaseTools/Source/Python/Workspace/MetaFileParser.py @@ -15,14 +15,75 @@ # Import Modules # import os +import re import time import copy import Common.EdkLogger as EdkLogger +import Common.GlobalData as GlobalData + from CommonDataClass.DataClass import * from Common.DataType import * from Common.String import * -from Common.Misc import Blist, GuidStructureStringToGuidString, CheckPcdDatum +from Common.Misc import GuidStructureStringToGuidString, CheckPcdDatum, PathClass, AnalyzePcdData +from Common.Expression import * +from CommonDataClass.Exceptions import * + +from MetaFileTable import MetaFileStorage + +## A decorator used to parse macro definition +def ParseMacro(Parser): + def MacroParser(self): + Match = gMacroDefPattern.match(self._CurrentLine) + if not Match: + # Not 'DEFINE/EDK_GLOBAL' statement, call decorated method + Parser(self) + return + + TokenList = GetSplitValueList(self._CurrentLine[Match.end(1):], TAB_EQUAL_SPLIT, 1) + # Syntax check + if not TokenList[0]: + EdkLogger.error('Parser', FORMAT_INVALID, "No macro name given", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + if len(TokenList) < 2: + TokenList.append('') + + Type = Match.group(1) + Name, Value = TokenList + # Global macros can be only defined via environment variable + if Name in GlobalData.gGlobalDefines: + EdkLogger.error('Parser', FORMAT_INVALID, "%s can only be defined via environment variable" % Name, + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + # Only upper case letters, digit and '_' are allowed + if not gMacroNamePattern.match(Name): + EdkLogger.error('Parser', FORMAT_INVALID, "The macro name must be in the pattern [A-Z][A-Z0-9_]*", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + + self._ItemType = self.DataType[Type] + # DEFINE defined macros + if self._ItemType == MODEL_META_DATA_DEFINE: + if self._SectionType == MODEL_META_DATA_HEADER: + self._FileLocalMacros[Name] = Value + else: + SectionDictKey = self._SectionType, self._Scope[0][0], self._Scope[0][1] + if SectionDictKey not in self._SectionsMacroDict: + self._SectionsMacroDict[SectionDictKey] = {} + SectionLocalMacros = self._SectionsMacroDict[SectionDictKey] + SectionLocalMacros[Name] = Value + # EDK_GLOBAL defined macros + elif type(self) != DscParser: + EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can only be used in .dsc file", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + elif self._SectionType != MODEL_META_DATA_HEADER: + EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL can only be used under [Defines] section", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + elif (Name in self._FileLocalMacros) and (self._FileLocalMacros[Name] != Value): + EdkLogger.error('Parser', FORMAT_INVALID, "EDK_GLOBAL defined a macro with the same name and different value as one defined by 'DEFINE'", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + + self._ValueList = [Type, Name, Value] + + return MacroParser ## Base class of parser # @@ -73,23 +134,21 @@ class MetaFileParser(object): # @param Owner Owner ID (for sub-section parsing) # @param From ID from which the data comes (for !INCLUDE directive) # - def __init__(self, FilePath, FileType, Table, Macros=None, Owner=-1, From=-1): - # prevent re-initialization - if hasattr(self, "_Table"): - return + def __init__(self, FilePath, FileType, Table, Owner=-1, From=-1): self._Table = Table + self._RawTable = Table self._FileType = FileType self.MetaFile = FilePath - self._FileDir = os.path.dirname(self.MetaFile) - self._Macros = copy.copy(Macros) - self._Macros["WORKSPACE"] = os.environ["WORKSPACE"] + self._FileDir = self.MetaFile.Dir + self._Defines = {} + self._FileLocalMacros = {} + self._SectionsMacroDict = {} # for recursive parsing - self._Owner = Owner + self._Owner = [Owner] self._From = From # parsr status for parsing - self._Content = None self._ValueList = ['', '', '', '', ''] self._Scope = [] self._LineIndex = 0 @@ -99,9 +158,13 @@ class MetaFileParser(object): self._InSubsection = False self._SubsectionType = MODEL_UNKNOWN self._SubsectionName = '' + self._ItemType = MODEL_UNKNOWN self._LastItem = -1 self._Enabled = 0 self._Finished = False + self._PostProcessed = False + # Different version of meta-file has different way to parse. + self._Version = 0 ## Store the parsed data in table def _Store(self, *Args): @@ -111,6 +174,10 @@ class MetaFileParser(object): def Start(self): raise NotImplementedError + ## Notify a post-process is needed + def DoPostProcess(self): + self._PostProcessed = False + ## Set parsing complete flag in both class and table def _Done(self): self._Finished = True @@ -118,15 +185,8 @@ class MetaFileParser(object): if self._From == -1: self._Table.SetEndFlag() - ## Return the table containg parsed data - # - # If the parse complete flag is not set, this method will try to parse the - # file before return the table - # - def _GetTable(self): - if not self._Finished: - self.Start() - return self._Table + def _PostProcess(self): + self._PostProcessed = True ## Get the parse complete flag def _GetFinished(self): @@ -138,12 +198,30 @@ class MetaFileParser(object): ## Use [] style to query data in table, just for readability # - # DataInfo = [data_type, scope1(arch), scope2(platform,moduletype)] + # DataInfo = [data_type, scope1(arch), scope2(platform/moduletype)] # def __getitem__(self, DataInfo): if type(DataInfo) != type(()): DataInfo = (DataInfo,) - return self.Table.Query(*DataInfo) + + # Parse the file first, if necessary + if not self._Finished: + if self._RawTable.IsIntegrity(): + self._Finished = True + else: + self._Table = self._RawTable + self._PostProcessed = False + self.Start() + + # No specific ARCH or Platform given, use raw data + if self._RawTable and (len(DataInfo) == 1 or DataInfo[1] == None): + return self._RawTable.Query(*DataInfo) + + # Do post-process if necessary + if not self._PostProcessed: + self._PostProcess() + + return self._Table.Query(*DataInfo) ## Data parser for the common format in different type of file # @@ -151,6 +229,7 @@ class MetaFileParser(object): # # xxx1 | xxx2 | xxx3 # + @ParseMacro def _CommonParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) self._ValueList[0:len(TokenList)] = TokenList @@ -159,15 +238,14 @@ class MetaFileParser(object): # # Only path can have macro used. So we need to replace them before use. # + @ParseMacro def _PathParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) self._ValueList[0:len(TokenList)] = TokenList - if len(self._Macros) > 0: - for Index in range(0, len(self._ValueList)): - Value = self._ValueList[Index] - if Value == None or Value == '': - continue - self._ValueList[Index] = NormPath(Value, self._Macros) + # Don't do macro replacement for dsc file at this point + if type(self) != DscParser: + Macros = self._Macros + self._ValueList = [ReplaceMacro(Value, Macros) for Value in self._ValueList] ## Skip unsupported data def _Skip(self): @@ -217,47 +295,47 @@ class MetaFileParser(object): if 'COMMON' in ArchList and len(ArchList) > 1: EdkLogger.error('Parser', FORMAT_INVALID, "'common' ARCH must not be used with specific ARCHs", File=self.MetaFile, Line=self._LineIndex+1, ExtraData=self._CurrentLine) + # If the section information is needed later, it should be stored in database + self._ValueList[0] = self._SectionName ## [defines] section parser + @ParseMacro def _DefineParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) - self._ValueList[0:len(TokenList)] = TokenList - if self._ValueList[1] == '': - EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", + self._ValueList[1:len(TokenList)] = TokenList + if not self._ValueList[1]: + EdkLogger.error('Parser', FORMAT_INVALID, "No name specified", ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - - ## DEFINE name=value parser - def _MacroParser(self): - TokenList = GetSplitValueList(self._CurrentLine, ' ', 1) - MacroType = TokenList[0] - if len(TokenList) < 2 or TokenList[1] == '': - EdkLogger.error('Parser', FORMAT_INVALID, "No macro name/value given", - ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - TokenList = GetSplitValueList(TokenList[1], TAB_EQUAL_SPLIT, 1) - if TokenList[0] == '': - EdkLogger.error('Parser', FORMAT_INVALID, "No macro name given", + if not self._ValueList[2]: + EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - # Macros defined in the command line override ones defined in the meta-data file - if not TokenList[0] in self._Macros: - if len(TokenList) == 1: - self._Macros[TokenList[0]] = '' - else: - # keep the macro definition for later use - self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) + Name, Value = self._ValueList[1], self._ValueList[2] + # Sometimes, we need to make differences between EDK and EDK2 modules + if Name == 'INF_VERSION': + try: + self._Version = int(Value, 0) + except: + EdkLogger.error('Parser', FORMAT_INVALID, "Invalid version number", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - return TokenList[0], self._Macros[TokenList[0]] + Value = ReplaceMacro(Value, self._Macros) + if type(self) == InfParser and self._Version < 0x00010005: + # EDK module allows using defines as macros + self._FileLocalMacros[Name] = Value + self._Defines[Name] = Value ## [BuildOptions] section parser + @ParseMacro def _BuildOptionParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) TokenList2 = GetSplitValueList(TokenList[0], ':', 1) if len(TokenList2) == 2: - self._ValueList[0] = TokenList2[0] # toolchain family - self._ValueList[1] = TokenList2[1] # keys + self._ValueList[0] = TokenList2[0] # toolchain family + self._ValueList[1] = TokenList2[1] # keys else: self._ValueList[1] = TokenList[0] - if len(TokenList) == 2: # value + if len(TokenList) == 2 and type(self) != DscParser: # value self._ValueList[2] = ReplaceMacro(TokenList[1], self._Macros) if self._ValueList[1].count('_') != 4: @@ -270,9 +348,27 @@ class MetaFileParser(object): Line=self._LineIndex+1 ) + def _GetMacros(self): + Macros = {} + Macros.update(self._FileLocalMacros) + Macros.update(self._GetApplicableSectionMacro()) + return Macros + + + ## Get section Macros that are applicable to current line, which may come from other sections + ## that share the same name while scope is wider + def _GetApplicableSectionMacro(self): + Macros = {} + + for SectionType, Scope1, Scope2 in self._SectionsMacroDict: + if (SectionType == self._SectionType) and (Scope1 == self._Scope[0][0] or Scope1 == "COMMON") and (Scope2 == self._Scope[0][1] or Scope2 == "COMMON"): + Macros.update(self._SectionsMacroDict[(SectionType, Scope1, Scope2)]) + + return Macros + _SectionParser = {} - Table = property(_GetTable) Finished = property(_GetFinished, _SetFinished) + _Macros = property(_GetMacros) ## INF file parser class @@ -287,6 +383,7 @@ class InfParser(MetaFileParser): DataType = { TAB_UNKNOWN.upper() : MODEL_UNKNOWN, TAB_INF_DEFINES.upper() : MODEL_META_DATA_HEADER, + TAB_DSC_DEFINES_DEFINE : MODEL_META_DATA_DEFINE, TAB_BUILD_OPTIONS.upper() : MODEL_META_DATA_BUILD_OPTION, TAB_INCLUDES.upper() : MODEL_EFI_INCLUDE, TAB_LIBRARIES.upper() : MODEL_EFI_LIBRARY_INSTANCE, @@ -316,26 +413,30 @@ class InfParser(MetaFileParser): # @param Table Database used to retrieve module/package information # @param Macros Macros used for replacement in file # - def __init__(self, FilePath, FileType, Table, Macros=None): - MetaFileParser.__init__(self, FilePath, FileType, Table, Macros) + def __init__(self, FilePath, FileType, Table): + # prevent re-initialization + if hasattr(self, "_Table"): + return + MetaFileParser.__init__(self, FilePath, FileType, Table) ## Parser starter def Start(self): NmakeLine = '' + Content = '' try: - self._Content = open(self.MetaFile, 'r').readlines() + Content = open(str(self.MetaFile), 'r').readlines() except: EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self.MetaFile) # parse the file line by line IsFindBlockComment = False - for Index in range(0, len(self._Content)): + for Index in range(0, len(Content)): # skip empty, commented, block commented lines - Line = CleanString(self._Content[Index], AllowCppStyleComment=True) + Line = CleanString(Content[Index], AllowCppStyleComment=True) NextLine = '' - if Index + 1 < len(self._Content): - NextLine = CleanString(self._Content[Index + 1]) + if Index + 1 < len(Content): + NextLine = CleanString(Content[Index + 1]) if Line == '': continue if Line.find(DataType.TAB_COMMENT_EDK_START) > -1: @@ -353,6 +454,29 @@ class InfParser(MetaFileParser): # section header if Line[0] == TAB_SECTION_START and Line[-1] == TAB_SECTION_END: self._SectionHeaderParser() + # Check invalid sections + if self._Version < 0x00010005: + if self._SectionType in [MODEL_META_DATA_BUILD_OPTION, + MODEL_EFI_LIBRARY_CLASS, + MODEL_META_DATA_PACKAGE, + MODEL_PCD_FIXED_AT_BUILD, + MODEL_PCD_PATCHABLE_IN_MODULE, + MODEL_PCD_FEATURE_FLAG, + MODEL_PCD_DYNAMIC_EX, + MODEL_PCD_DYNAMIC, + MODEL_EFI_GUID, + MODEL_EFI_PROTOCOL, + MODEL_EFI_PPI, + MODEL_META_DATA_USER_EXTENSION]: + EdkLogger.error('Parser', FORMAT_INVALID, + "Section [%s] is not allowed in inf file without version" % (self._SectionName), + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + elif self._SectionType in [MODEL_EFI_INCLUDE, + MODEL_EFI_LIBRARY_INSTANCE, + MODEL_META_DATA_NMAKE]: + EdkLogger.error('Parser', FORMAT_INVALID, + "Section [%s] is not allowed in inf file with version 0x%08x" % (self._SectionName, self._Version), + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) continue # merge two lines specified by '\' in section NMAKE elif self._SectionType == MODEL_META_DATA_NMAKE: @@ -370,10 +494,6 @@ class InfParser(MetaFileParser): else: self._CurrentLine = NmakeLine + Line NmakeLine = '' - elif Line.upper().startswith('DEFINE '): - # file private macros - self._MacroParser() - continue # section content self._ValueList = ['','',''] @@ -392,7 +512,7 @@ class InfParser(MetaFileParser): self._ValueList[2], Arch, Platform, - self._Owner, + self._Owner[-1], self._LineIndex+1, -1, self._LineIndex+1, @@ -411,9 +531,13 @@ class InfParser(MetaFileParser): def _IncludeParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) self._ValueList[0:len(TokenList)] = TokenList - if len(self._Macros) > 0: + Macros = self._Macros + if Macros: for Index in range(0, len(self._ValueList)): Value = self._ValueList[Index] + if not Value: + continue + if Value.upper().find('$(EFI_SOURCE)\Edk'.upper()) > -1 or Value.upper().find('$(EFI_SOURCE)/Edk'.upper()) > -1: Value = '$(EDK_SOURCE)' + Value[17:] if Value.find('$(EFI_SOURCE)') > -1 or Value.find('$(EDK_SOURCE)') > -1: @@ -425,34 +549,30 @@ class InfParser(MetaFileParser): else: Value = '$(EFI_SOURCE)/' + Value - if Value == None or Value == '': - continue - self._ValueList[Index] = NormPath(Value, self._Macros) + self._ValueList[Index] = ReplaceMacro(Value, Macros) ## Parse [Sources] section # # Only path can have macro used. So we need to replace them before use. # + @ParseMacro def _SourceFileParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) self._ValueList[0:len(TokenList)] = TokenList + Macros = self._Macros # For Acpi tables, remove macro like ' TABLE_NAME=Sata1' - if 'COMPONENT_TYPE' in self._Macros: - if self._Macros['COMPONENT_TYPE'].upper() == 'ACPITABLE': + if 'COMPONENT_TYPE' in Macros: + if self._Defines['COMPONENT_TYPE'].upper() == 'ACPITABLE': self._ValueList[0] = GetSplitValueList(self._ValueList[0], ' ', 1)[0] - if self._Macros['BASE_NAME'] == 'Microcode': + if self._Defines['BASE_NAME'] == 'Microcode': pass - if len(self._Macros) > 0: - for Index in range(0, len(self._ValueList)): - Value = self._ValueList[Index] - if Value == None or Value == '': - continue - self._ValueList[Index] = NormPath(Value, self._Macros) + self._ValueList = [ReplaceMacro(Value, Macros) for Value in self._ValueList] ## Parse [Binaries] section # # Only path can have macro used. So we need to replace them before use. # + @ParseMacro def _BinaryFileParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 2) if len(TokenList) < 2: @@ -468,27 +588,19 @@ class InfParser(MetaFileParser): ExtraData=self._CurrentLine + " ( | [| ])", File=self.MetaFile, Line=self._LineIndex+1) self._ValueList[0:len(TokenList)] = TokenList - self._ValueList[1] = NormPath(self._ValueList[1], self._Macros) + self._ValueList[1] = ReplaceMacro(self._ValueList[1], self._Macros) - ## [defines] section parser - def _DefineParser(self): - TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) - self._ValueList[0:len(TokenList)] = TokenList - if self._ValueList[1] == '': - EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", - ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - self._Macros[TokenList[0]] = ReplaceMacro(TokenList[1], self._Macros, False) - - ## [nmake] section parser (EDK.x style only) + ## [nmake] section parser (Edk.x style only) def _NmakeParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) self._ValueList[0:len(TokenList)] = TokenList # remove macros - self._ValueList[1] = ReplaceMacro(self._ValueList[1], self._Macros, False) + self._ValueList[1] = ReplaceMacro(self._ValueList[1], self._Macros) # remove self-reference in macro setting #self._ValueList[1] = ReplaceMacro(self._ValueList[1], {self._ValueList[0]:''}) ## [FixedPcd], [FeaturePcd], [PatchPcd], [Pcd] and [PcdEx] sections parser + @ParseMacro def _PcdParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1) ValueList = GetSplitValueList(TokenList[0], TAB_SPLIT) @@ -503,6 +615,7 @@ class InfParser(MetaFileParser): EdkLogger.error('Parser', FORMAT_INVALID, "No token space GUID or PCD name specified", ExtraData=self._CurrentLine + " (.)", File=self.MetaFile, Line=self._LineIndex+1) + # if value are 'True', 'true', 'TRUE' or 'False', 'false', 'FALSE', replace with integer 1 or 0. if self._ValueList[2] != '': InfPcdValueList = GetSplitValueList(TokenList[1], TAB_VALUE_SPLIT, 1) @@ -512,18 +625,19 @@ class InfParser(MetaFileParser): self._ValueList[2] = TokenList[1].replace(InfPcdValueList[0], '0', 1); ## [depex] section parser + @ParseMacro def _DepexParser(self): self._ValueList[0:1] = [self._CurrentLine] _SectionParser = { MODEL_UNKNOWN : MetaFileParser._Skip, - MODEL_META_DATA_HEADER : _DefineParser, + MODEL_META_DATA_HEADER : MetaFileParser._DefineParser, MODEL_META_DATA_BUILD_OPTION : MetaFileParser._BuildOptionParser, - MODEL_EFI_INCLUDE : _IncludeParser, # for EDK.x modules - MODEL_EFI_LIBRARY_INSTANCE : MetaFileParser._CommonParser, # for EDK.x modules + MODEL_EFI_INCLUDE : _IncludeParser, # for Edk.x modules + MODEL_EFI_LIBRARY_INSTANCE : MetaFileParser._CommonParser, # for Edk.x modules MODEL_EFI_LIBRARY_CLASS : MetaFileParser._PathParser, MODEL_META_DATA_PACKAGE : MetaFileParser._PathParser, - MODEL_META_DATA_NMAKE : _NmakeParser, # for EDK.x modules + MODEL_META_DATA_NMAKE : _NmakeParser, # for Edk.x modules MODEL_PCD_FIXED_AT_BUILD : _PcdParser, MODEL_PCD_PATCHABLE_IN_MODULE : _PcdParser, MODEL_PCD_FEATURE_FLAG : _PcdParser, @@ -566,6 +680,8 @@ class DscParser(MetaFileParser): TAB_COMPONENTS.upper() : MODEL_META_DATA_COMPONENT, TAB_COMPONENTS_SOURCE_OVERRIDE_PATH.upper() : MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, TAB_DSC_DEFINES.upper() : MODEL_META_DATA_HEADER, + TAB_DSC_DEFINES_DEFINE : MODEL_META_DATA_DEFINE, + TAB_DSC_DEFINES_EDKGLOBAL : MODEL_META_DATA_GLOBAL_DEFINE, TAB_INCLUDE.upper() : MODEL_META_DATA_INCLUDE, TAB_IF.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, TAB_IF_DEF.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, @@ -575,37 +691,26 @@ class DscParser(MetaFileParser): TAB_END_IF.upper() : MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF, } - # sections which allow "!include" directive - _IncludeAllowedSection = [ - TAB_COMMON_DEFINES.upper(), - TAB_LIBRARIES.upper(), - TAB_LIBRARY_CLASSES.upper(), - TAB_SKUIDS.upper(), - TAB_COMPONENTS.upper(), - TAB_BUILD_OPTIONS.upper(), - TAB_PCDS_FIXED_AT_BUILD_NULL.upper(), - TAB_PCDS_PATCHABLE_IN_MODULE_NULL.upper(), - TAB_PCDS_FEATURE_FLAG_NULL.upper(), - TAB_PCDS_DYNAMIC_DEFAULT_NULL.upper(), - TAB_PCDS_DYNAMIC_HII_NULL.upper(), - TAB_PCDS_DYNAMIC_VPD_NULL.upper(), - TAB_PCDS_DYNAMIC_EX_DEFAULT_NULL.upper(), - TAB_PCDS_DYNAMIC_EX_HII_NULL.upper(), - TAB_PCDS_DYNAMIC_EX_VPD_NULL.upper(), - ] - - # operators which can be used in "!if/!ifdef/!ifndef" directives - _OP_ = { - "!" : lambda a: not a, - "!=" : lambda a,b: a!=b, - "==" : lambda a,b: a==b, - ">" : lambda a,b: a>b, - "<" : lambda a,b: a" : lambda a,b: a>=b, - ">=" : lambda a,b: a>=b, - "<=" : lambda a,b: a<=b, - "=<" : lambda a,b: a<=b, - } + # Valid names in define section + DefineKeywords = [ + "DSC_SPECIFICATION", + "PLATFORM_NAME", + "PLATFORM_GUID", + "PLATFORM_VERSION", + "SKUID_IDENTIFIER", + "SUPPORTED_ARCHITECTURES", + "BUILD_TARGETS", + "OUTPUT_DIRECTORY", + "FLASH_DEFINITION", + "BUILD_NUMBER", + "RFC_LANGUAGES", + "ISO_LANGUAGES", + "TIME_STAMP_FILE", + "VPD_TOOL_GUID", + "FIX_LOAD_TOP_MEMORY_ADDRESS" + ] + + SymbolPattern = ValueExpression.SymbolPattern ## Constructor of DscParser # @@ -618,162 +723,99 @@ class DscParser(MetaFileParser): # @param Owner Owner ID (for sub-section parsing) # @param From ID from which the data comes (for !INCLUDE directive) # - def __init__(self, FilePath, FileType, Table, Macros=None, Owner=-1, From=-1): - MetaFileParser.__init__(self, FilePath, FileType, Table, Macros, Owner, From) + def __init__(self, FilePath, FileType, Table, Owner=-1, From=-1): + # prevent re-initialization + if hasattr(self, "_Table"): + return + MetaFileParser.__init__(self, FilePath, FileType, Table, Owner, From) + self._Version = 0x00010005 # Only EDK2 dsc file is supported # to store conditional directive evaluation result - self._Eval = Blist() + self._DirectiveStack = [] + self._DirectiveEvalStack = [] + self._Enabled = 1 + + # Final valid replacable symbols + self._Symbols = {} + # + # Map the ID between the original table and new table to track + # the owner item + # + self._IdMapping = {-1:-1} ## Parser starter def Start(self): + Content = '' try: - if self._Content == None: - self._Content = open(self.MetaFile, 'r').readlines() + Content = open(str(self.MetaFile), 'r').readlines() except: EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self.MetaFile) - for Index in range(0, len(self._Content)): - Line = CleanString(self._Content[Index]) + for Index in range(0, len(Content)): + Line = CleanString(Content[Index]) # skip empty line if Line == '': continue + self._CurrentLine = Line self._LineIndex = Index - if self._InSubsection and self._Owner == -1: - self._Owner = self._LastItem + if self._InSubsection and self._Owner[-1] == -1: + self._Owner.append(self._LastItem) # section header if Line[0] == TAB_SECTION_START and Line[-1] == TAB_SECTION_END: - self._SectionHeaderParser() - continue + self._SectionType = MODEL_META_DATA_SECTION_HEADER # subsection ending - elif Line[0] == '}': + elif Line[0] == '}' and self._InSubsection: self._InSubsection = False self._SubsectionType = MODEL_UNKNOWN self._SubsectionName = '' - self._Owner = -1 + self._Owner.pop() continue # subsection header elif Line[0] == TAB_OPTION_START and Line[-1] == TAB_OPTION_END: - self._SubsectionHeaderParser() - continue + self._SubsectionType = MODEL_META_DATA_SUBSECTION_HEADER # directive line elif Line[0] == '!': self._DirectiveParser() continue - # file private macros - elif Line.upper().startswith('DEFINE '): - if self._Enabled < 0: - # Do not parse the macro and add it to self._Macros dictionary if directives - # statement is evaluated to false. - continue - - (Name, Value) = self._MacroParser() - # Make the defined macro in DSC [Defines] section also - # available for FDF file. - if self._SectionName == TAB_COMMON_DEFINES.upper(): - self._LastItem = self._Store( - MODEL_META_DATA_GLOBAL_DEFINE, - Name, - Value, - '', - 'COMMON', - 'COMMON', - self._Owner, - self._From, - self._LineIndex+1, - -1, - self._LineIndex+1, - -1, - self._Enabled - ) - continue - elif Line.upper().startswith('EDK_GLOBAL '): - if self._Enabled < 0: - # Do not parse the macro and add it to self._Macros dictionary - # if previous directives statement is evaluated to false. - continue - - (Name, Value) = self._MacroParser() - for Arch, ModuleType in self._Scope: - self._LastItem = self._Store( - MODEL_META_DATA_DEFINE, - Name, - Value, - '', - Arch, - 'COMMON', - self._Owner, - self._From, - self._LineIndex+1, - -1, - self._LineIndex+1, - -1, - self._Enabled - ) - continue - # section content if self._InSubsection: SectionType = self._SubsectionType - SectionName = self._SubsectionName else: SectionType = self._SectionType - SectionName = self._SectionName + self._ItemType = SectionType self._ValueList = ['', '', ''] self._SectionParser[SectionType](self) if self._ValueList == None: continue - # # Model, Value1, Value2, Value3, Arch, ModuleType, BelongsToItem=-1, BelongsToFile=-1, # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1 # for Arch, ModuleType in self._Scope: self._LastItem = self._Store( - SectionType, - self._ValueList[0], - self._ValueList[1], - self._ValueList[2], - Arch, - ModuleType, - self._Owner, - self._From, - self._LineIndex+1, - -1, - self._LineIndex+1, - -1, - self._Enabled - ) + self._ItemType, + self._ValueList[0], + self._ValueList[1], + self._ValueList[2], + Arch, + ModuleType, + self._Owner[-1], + self._From, + self._LineIndex+1, + -1, + self._LineIndex+1, + -1, + self._Enabled + ) + + if self._DirectiveStack: + Type, Line, Text = self._DirectiveStack[-1] + EdkLogger.error('Parser', FORMAT_INVALID, "No matching '!endif' found", + ExtraData=Text, File=self.MetaFile, Line=Line) self._Done() - ## [defines] section parser - def _DefineParser(self): - TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) - if len(TokenList) < 2: - EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", - ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) - # 'FLASH_DEFINITION', 'OUTPUT_DIRECTORY' need special processing - if TokenList[0] in ['FLASH_DEFINITION', 'OUTPUT_DIRECTORY']: - TokenList[1] = NormPath(TokenList[1], self._Macros) - self._ValueList[0:len(TokenList)] = TokenList - # Treat elements in the [defines] section as global macros for FDF file. - self._LastItem = self._Store( - MODEL_META_DATA_GLOBAL_DEFINE, - TokenList[0], - TokenList[1], - '', - 'COMMON', - 'COMMON', - self._Owner, - self._From, - self._LineIndex+1, - -1, - self._LineIndex+1, - -1, - self._Enabled - ) - ## parser def _SubsectionHeaderParser(self): self._SubsectionName = self._CurrentLine[1:-1].upper() @@ -782,13 +824,16 @@ class DscParser(MetaFileParser): else: self._SubsectionType = MODEL_UNKNOWN EdkLogger.warn("Parser", "Unrecognized sub-section", File=self.MetaFile, - Line=self._LineIndex+1, ExtraData=self._CurrentLine) + Line=self._LineIndex+1, ExtraData=self._CurrentLine) + self._ValueList[0] = self._SubsectionName ## Directive statement parser def _DirectiveParser(self): self._ValueList = ['','',''] TokenList = GetSplitValueList(self._CurrentLine, ' ', 1) self._ValueList[0:len(TokenList)] = TokenList + + # Syntax check DirectiveName = self._ValueList[0].upper() if DirectiveName not in self.DataType: EdkLogger.error("Parser", FORMAT_INVALID, "Unknown directive [%s]" % DirectiveName, @@ -797,134 +842,89 @@ class DscParser(MetaFileParser): EdkLogger.error("Parser", FORMAT_INVALID, "Missing expression", File=self.MetaFile, Line=self._LineIndex+1, ExtraData=self._CurrentLine) - # keep the directive in database first - self._LastItem = self._Store( - self.DataType[DirectiveName], - self._ValueList[0], - self._ValueList[1], - self._ValueList[2], - 'COMMON', - 'COMMON', - self._Owner, - self._From, - self._LineIndex + 1, - -1, - self._LineIndex + 1, - -1, - 0 - ) - - # process the directive - if DirectiveName == "!INCLUDE": - if not self._SectionName in self._IncludeAllowedSection: - EdkLogger.error("Parser", FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, - ExtraData="'!include' is not allowed under section [%s]" % self._SectionName) - # the included file must be relative to workspace - IncludedFile = os.path.join(os.environ["WORKSPACE"], NormPath(self._ValueList[1], self._Macros)) - Parser = DscParser(IncludedFile, self._FileType, self._Table, self._Macros, From=self._LastItem) - # set the parser status with current status - Parser._SectionName = self._SectionName - Parser._SectionType = self._SectionType - Parser._Scope = self._Scope - Parser._Enabled = self._Enabled - try: - Parser.Start() - except: - EdkLogger.error("Parser", PARSER_ERROR, File=self.MetaFile, Line=self._LineIndex+1, - ExtraData="Failed to parse content in file %s" % IncludedFile) - # insert an imaginary token in the DSC table to indicate its external dependency on another file - self._Store(MODEL_EXTERNAL_DEPENDENCY, IncludedFile, str(os.stat(IncludedFile)[8]), "") - # update current status with sub-parser's status - self._SectionName = Parser._SectionName - self._SectionType = Parser._SectionType - self._Scope = Parser._Scope - self._Enabled = Parser._Enabled - self._Macros.update(Parser._Macros) - else: - if DirectiveName in ["!IF", "!IFDEF", "!IFNDEF"]: - # evaluate the expression - Result = self._Evaluate(self._ValueList[1]) - if DirectiveName == "!IFNDEF": - Result = not Result - self._Eval.append(Result) - elif DirectiveName in ["!ELSEIF"]: - # evaluate the expression - self._Eval[-1] = (not self._Eval[-1]) & self._Evaluate(self._ValueList[1]) - elif DirectiveName in ["!ELSE"]: - self._Eval[-1] = not self._Eval[-1] - elif DirectiveName in ["!ENDIF"]: - if len(self._Eval) > 0: - self._Eval.pop() - else: - EdkLogger.error("Parser", FORMAT_INVALID, "!IF..[!ELSE]..!ENDIF doesn't match", - File=self.MetaFile, Line=self._LineIndex+1) - if self._Eval.Result == False: - self._Enabled = 0 - len(self._Eval) - else: - self._Enabled = len(self._Eval) - ## Evaluate the Token for its value; for now only macros are supported. - def _EvaluateToken(self, TokenName, Expression): - if TokenName.startswith("$(") and TokenName.endswith(")"): - Name = TokenName[2:-1] - return self._Macros.get(Name) - else: - EdkLogger.error('Parser', FORMAT_INVALID, "Unknown operand '%(Token)s', " - "please use '$(%(Token)s)' if '%(Token)s' is a macro" % {"Token" : TokenName}, - File=self.MetaFile, Line=self._LineIndex+1, ExtraData=Expression) - - ## Evaluate the value of expression in "if/ifdef/ifndef" directives - def _Evaluate(self, Expression): - TokenList = Expression.split() - TokenNumber = len(TokenList) - # one operand, guess it's just a macro name - if TokenNumber == 1: - TokenValue = self._EvaluateToken(TokenList[0], Expression) - return TokenValue != None - # two operands, suppose it's "!xxx" format - elif TokenNumber == 2: - Op = TokenList[0] - if Op not in self._OP_: - EdkLogger.error('Parser', FORMAT_INVALID, "Unsupported operator [%s]" % Op, File=self.MetaFile, - Line=self._LineIndex+1, ExtraData=Expression) - if TokenList[1].upper() == 'TRUE': - Value = True + ItemType = self.DataType[DirectiveName] + if ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF: + # Remove all directives between !if and !endif, including themselves + while self._DirectiveStack: + # Remove any !else or !elseif + DirectiveInfo = self._DirectiveStack.pop() + if DirectiveInfo[0] in [MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF]: + break else: - Value = False - return self._OP_[Op](Value) - # three operands - elif TokenNumber == 3: - TokenValue = TokenList[0] - if TokenValue != "": - if TokenValue[0] in ["'", '"'] and TokenValue[-1] in ["'", '"']: - TokenValue = TokenValue[1:-1] - if TokenValue.startswith("$(") and TokenValue.endswith(")"): - TokenValue = self._EvaluateToken(TokenValue, Expression) - if TokenValue == None: - return False - if TokenValue != "": - if TokenValue[0] in ["'", '"'] and TokenValue[-1] in ["'", '"']: - TokenValue = TokenValue[1:-1] - - Value = TokenList[2] - if Value != "": - if Value[0] in ["'", '"'] and Value[-1] in ["'", '"']: - Value = Value[1:-1] - if Value.startswith("$(") and Value.endswith(")"): - Value = self._EvaluateToken(Value, Expression) - if Value == None: - return False - if Value != "": - if Value[0] in ["'", '"'] and Value[-1] in ["'", '"']: - Value = Value[1:-1] - Op = TokenList[1] - if Op not in self._OP_: - EdkLogger.error('Parser', FORMAT_INVALID, "Unsupported operator [%s]" % Op, File=self.MetaFile, - Line=self._LineIndex+1, ExtraData=Expression) - return self._OP_[Op](TokenValue, Value) - else: - EdkLogger.error('Parser', FORMAT_INVALID, File=self.MetaFile, Line=self._LineIndex+1, - ExtraData=Expression) + EdkLogger.error("Parser", FORMAT_INVALID, "Redundant '!endif'", + File=self.MetaFile, Line=self._LineIndex+1, + ExtraData=self._CurrentLine) + elif ItemType != MODEL_META_DATA_INCLUDE: + # Break if there's a !else is followed by a !elseif + if ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF and \ + self._DirectiveStack and \ + self._DirectiveStack[-1][0] == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE: + EdkLogger.error("Parser", FORMAT_INVALID, "'!elseif' after '!else'", + File=self.MetaFile, Line=self._LineIndex+1, + ExtraData=self._CurrentLine) + self._DirectiveStack.append((ItemType, self._LineIndex+1, self._CurrentLine)) + elif self._From > 0: + EdkLogger.error('Parser', FORMAT_INVALID, + "No '!include' allowed in included file", + ExtraData=self._CurrentLine, File=self.MetaFile, + Line=self._LineIndex+1) + + # + # Model, Value1, Value2, Value3, Arch, ModuleType, BelongsToItem=-1, BelongsToFile=-1, + # LineBegin=-1, ColumnBegin=-1, LineEnd=-1, ColumnEnd=-1, Enabled=-1 + # + self._LastItem = self._Store( + ItemType, + self._ValueList[0], + self._ValueList[1], + self._ValueList[2], + 'COMMON', + 'COMMON', + self._Owner[-1], + self._From, + self._LineIndex+1, + -1, + self._LineIndex+1, + -1, + 0 + ) + + ## [defines] section parser + @ParseMacro + def _DefineParser(self): + TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) + self._ValueList[1:len(TokenList)] = TokenList + + # Syntax check + if not self._ValueList[1]: + EdkLogger.error('Parser', FORMAT_INVALID, "No name specified", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + if not self._ValueList[2]: + EdkLogger.error('Parser', FORMAT_INVALID, "No value specified", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + if not self._ValueList[1] in self.DefineKeywords: + EdkLogger.error('Parser', FORMAT_INVALID, + "Unknown keyword found: %s. " + "If this is a macro you must " + "add it as a DEFINE in the DSC" % self._ValueList[1], + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + self._Defines[self._ValueList[1]] = self._ValueList[2] + self._ItemType = self.DataType[TAB_DSC_DEFINES.upper()] + + @ParseMacro + def _SkuIdParser(self): + TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) + if len(TokenList) != 2: + EdkLogger.error('Parser', FORMAT_INVALID, "Correct format is '|'", + ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + self._ValueList[0:len(TokenList)] = TokenList + + ## Parse Edk style of library modules + def _LibraryInstanceParser(self): + self._ValueList[0] = self._CurrentLine ## PCD sections parser # @@ -940,8 +940,9 @@ class DscParser(MetaFileParser): # [PcdsDynamicVpd] # [PcdsDynamicHii] # + @ParseMacro def _PcdParser(self): - TokenList = GetSplitValueList(ReplaceMacro(self._CurrentLine, self._Macros), TAB_VALUE_SPLIT, 1) + TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1) self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT) if len(TokenList) == 2: self._ValueList[2] = TokenList[1] @@ -959,17 +960,18 @@ class DscParser(MetaFileParser): self._ValueList[2] = TokenList[1].replace(DscPcdValueList[0], '1', 1); elif DscPcdValueList[0] in ['False', 'false', 'FALSE']: self._ValueList[2] = TokenList[1].replace(DscPcdValueList[0], '0', 1); - + ## [components] section parser + @ParseMacro def _ComponentParser(self): if self._CurrentLine[-1] == '{': self._ValueList[0] = self._CurrentLine[0:-1].strip() self._InSubsection = True else: self._ValueList[0] = self._CurrentLine - if len(self._Macros) > 0: - self._ValueList[0] = NormPath(self._ValueList[0], self._Macros) + ## [LibraryClasses] section + @ParseMacro def _LibraryClassParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT) if len(TokenList) < 2: @@ -984,35 +986,357 @@ class DscParser(MetaFileParser): EdkLogger.error('Parser', FORMAT_INVALID, "No library instance specified", ExtraData=self._CurrentLine + " (|)", File=self.MetaFile, Line=self._LineIndex+1) + self._ValueList[0:len(TokenList)] = TokenList - if len(self._Macros) > 0: - self._ValueList[1] = NormPath(self._ValueList[1], self._Macros) def _CompponentSourceOverridePathParser(self): - if len(self._Macros) > 0: - self._ValueList[0] = NormPath(self._CurrentLine, self._Macros) + self._ValueList[0] = self._CurrentLine + + ## [BuildOptions] section parser + @ParseMacro + def _BuildOptionParser(self): + TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) + TokenList2 = GetSplitValueList(TokenList[0], ':', 1) + if len(TokenList2) == 2: + self._ValueList[0] = TokenList2[0] # toolchain family + self._ValueList[1] = TokenList2[1] # keys + else: + self._ValueList[1] = TokenList[0] + if len(TokenList) == 2: # value + self._ValueList[2] = TokenList[1] + + if self._ValueList[1].count('_') != 4: + EdkLogger.error( + 'Parser', + FORMAT_INVALID, + "'%s' must be in format of ____FLAGS" % self._ValueList[1], + ExtraData=self._CurrentLine, + File=self.MetaFile, + Line=self._LineIndex+1 + ) + + ## Override parent's method since we'll do all macro replacements in parser + def _GetMacros(self): + Macros = {} + Macros.update(self._FileLocalMacros) + Macros.update(self._GetApplicableSectionMacro()) + Macros.update(GlobalData.gEdkGlobal) + Macros.update(GlobalData.gPlatformDefines) + Macros.update(GlobalData.gCommandLineDefines) + # PCD cannot be referenced in macro definition + if self._ItemType not in [MODEL_META_DATA_DEFINE, MODEL_META_DATA_GLOBAL_DEFINE]: + Macros.update(self._Symbols) + return Macros + + def _PostProcess(self): + Processer = { + MODEL_META_DATA_SECTION_HEADER : self.__ProcessSectionHeader, + MODEL_META_DATA_SUBSECTION_HEADER : self.__ProcessSubsectionHeader, + MODEL_META_DATA_HEADER : self.__ProcessDefine, + MODEL_META_DATA_DEFINE : self.__ProcessDefine, + MODEL_META_DATA_GLOBAL_DEFINE : self.__ProcessDefine, + MODEL_META_DATA_INCLUDE : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IF : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF : self.__ProcessDirective, + MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF : self.__ProcessDirective, + MODEL_EFI_SKU_ID : self.__ProcessSkuId, + MODEL_EFI_LIBRARY_INSTANCE : self.__ProcessLibraryInstance, + MODEL_EFI_LIBRARY_CLASS : self.__ProcessLibraryClass, + MODEL_PCD_FIXED_AT_BUILD : self.__ProcessPcd, + MODEL_PCD_PATCHABLE_IN_MODULE : self.__ProcessPcd, + MODEL_PCD_FEATURE_FLAG : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_DEFAULT : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_HII : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_VPD : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_EX_DEFAULT : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_EX_HII : self.__ProcessPcd, + MODEL_PCD_DYNAMIC_EX_VPD : self.__ProcessPcd, + MODEL_META_DATA_COMPONENT : self.__ProcessComponent, + MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH : self.__ProcessSourceOverridePath, + MODEL_META_DATA_BUILD_OPTION : self.__ProcessBuildOption, + MODEL_UNKNOWN : self._Skip, + MODEL_META_DATA_USER_EXTENSION : self._Skip, + } + + self._Table = MetaFileStorage(self._RawTable.Cur, self.MetaFile, MODEL_FILE_DSC, True) + self._Table.Create() + self._DirectiveStack = [] + self._DirectiveEvalStack = [] + self._FileWithError = self.MetaFile + self._FileLocalMacros = {} + self._SectionsMacroDict = {} + GlobalData.gPlatformDefines = {} + + # Get all macro and PCD which has straitforward value + self.__RetrievePcdValue() + self._Content = self._RawTable.GetAll() + self._ContentIndex = 0 + while self._ContentIndex < len(self._Content) : + Id, self._ItemType, V1, V2, V3, S1, S2, Owner, self._From, \ + LineStart, ColStart, LineEnd, ColEnd, Enabled = self._Content[self._ContentIndex] + + if self._From < 0: + self._FileWithError = self.MetaFile + + self._ContentIndex += 1 + + self._Scope = [[S1, S2]] + self._LineIndex = LineStart - 1 + self._ValueList = [V1, V2, V3] + + try: + Processer[self._ItemType]() + except EvaluationException, Excpt: + # + # Only catch expression evaluation error here. We need to report + # the precise number of line on which the error occurred + # + EdkLogger.error('Parser', FORMAT_INVALID, "Invalid expression: %s" % str(Excpt), + File=self._FileWithError, ExtraData=' '.join(self._ValueList), + Line=self._LineIndex+1) + except MacroException, Excpt: + EdkLogger.error('Parser', FORMAT_INVALID, str(Excpt), + File=self._FileWithError, ExtraData=' '.join(self._ValueList), + Line=self._LineIndex+1) + + if self._ValueList == None: + continue + + NewOwner = self._IdMapping.get(Owner, -1) + self._Enabled = int((not self._DirectiveEvalStack) or (False not in self._DirectiveEvalStack)) + self._LastItem = self._Store( + self._ItemType, + self._ValueList[0], + self._ValueList[1], + self._ValueList[2], + S1, + S2, + NewOwner, + self._From, + self._LineIndex+1, + -1, + self._LineIndex+1, + -1, + self._Enabled + ) + self._IdMapping[Id] = self._LastItem + + GlobalData.gPlatformDefines.update(self._FileLocalMacros) + self._PostProcessed = True + self._Content = None + + def __ProcessSectionHeader(self): + self._SectionName = self._ValueList[0] + if self._SectionName in self.DataType: + self._SectionType = self.DataType[self._SectionName] + else: + self._SectionType = MODEL_UNKNOWN + + def __ProcessSubsectionHeader(self): + self._SubsectionName = self._ValueList[0] + if self._SubsectionName in self.DataType: + self._SubsectionType = self.DataType[self._SubsectionName] + else: + self._SubsectionType = MODEL_UNKNOWN + + def __RetrievePcdValue(self): + Records = self._RawTable.Query(MODEL_PCD_FEATURE_FLAG, BelongsToItem=-1.0) + for TokenSpaceGuid,PcdName,Value,Dummy2,Dummy3,ID,Line in Records: + Value, DatumType, MaxDatumSize = AnalyzePcdData(Value) + # Only use PCD whose value is straitforward (no macro and PCD) + if self.SymbolPattern.findall(Value): + continue + Name = TokenSpaceGuid + '.' + PcdName + # Don't use PCD with different values. + if Name in self._Symbols and self._Symbols[Name] != Value: + self._Symbols.pop(Name) + continue + self._Symbols[Name] = Value + + Records = self._RawTable.Query(MODEL_PCD_FIXED_AT_BUILD, BelongsToItem=-1.0) + for TokenSpaceGuid,PcdName,Value,Dummy2,Dummy3,ID,Line in Records: + Value, DatumType, MaxDatumSize = AnalyzePcdData(Value) + # Only use PCD whose value is straitforward (no macro and PCD) + if self.SymbolPattern.findall(Value): + continue + Name = TokenSpaceGuid+'.'+PcdName + # Don't use PCD with different values. + if Name in self._Symbols and self._Symbols[Name] != Value: + self._Symbols.pop(Name) + continue + self._Symbols[Name] = Value + + def __ProcessDefine(self): + if not self._Enabled: + return + + Type, Name, Value = self._ValueList + Value = ReplaceMacro(Value, self._Macros, False) + if self._ItemType == MODEL_META_DATA_DEFINE: + if self._SectionType == MODEL_META_DATA_HEADER: + self._FileLocalMacros[Name] = Value + else: + SectionDictKey = self._SectionType, self._Scope[0][0], self._Scope[0][1] + if SectionDictKey not in self._SectionsMacroDict: + self._SectionsMacroDict[SectionDictKey] = {} + SectionLocalMacros = self._SectionsMacroDict[SectionDictKey] + SectionLocalMacros[Name] = Value + elif self._ItemType == MODEL_META_DATA_GLOBAL_DEFINE: + GlobalData.gEdkGlobal[Name] = Value + + # + # Keyword in [Defines] section can be used as Macros + # + if (self._ItemType == MODEL_META_DATA_HEADER) and (self._SectionType == MODEL_META_DATA_HEADER): + self._FileLocalMacros[Name] = Value + + self._ValueList = [Type, Name, Value] + + def __ProcessDirective(self): + Result = None + if self._ItemType in [MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF]: + Macros = self._Macros + Macros.update(GlobalData.gGlobalDefines) + try: + Result = ValueExpression(self._ValueList[1], Macros)() + except SymbolNotFound, Exc: + EdkLogger.debug(EdkLogger.DEBUG_5, str(Exc), self._ValueList[1]) + Result = False + except WrnExpression, Excpt: + # + # Catch expression evaluation warning here. We need to report + # the precise number of line and return the evaluation result + # + EdkLogger.warn('Parser', "Suspicious expression: %s" % str(Excpt), + File=self._FileWithError, ExtraData=' '.join(self._ValueList), + Line=self._LineIndex+1) + Result = Excpt.result + + if self._ItemType in [MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF]: + self._DirectiveStack.append(self._ItemType) + if self._ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_IF: + Result = bool(Result) + else: + Macro = self._ValueList[1] + Macro = Macro[2:-1] if (Macro.startswith("$(") and Macro.endswith(")")) else Macro + Result = Macro in self._Macros + if self._ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF: + Result = not Result + self._DirectiveEvalStack.append(Result) + elif self._ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSEIF: + self._DirectiveStack.append(self._ItemType) + self._DirectiveEvalStack[-1] = not self._DirectiveEvalStack[-1] + self._DirectiveEvalStack.append(bool(Result)) + elif self._ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE: + self._DirectiveStack[-1] = self._ItemType + self._DirectiveEvalStack[-1] = not self._DirectiveEvalStack[-1] + elif self._ItemType == MODEL_META_DATA_CONDITIONAL_STATEMENT_ENDIF: + # Back to the nearest !if/!ifdef/!ifndef + while self._DirectiveStack: + self._DirectiveEvalStack.pop() + Directive = self._DirectiveStack.pop() + if Directive in [MODEL_META_DATA_CONDITIONAL_STATEMENT_IF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFDEF, + MODEL_META_DATA_CONDITIONAL_STATEMENT_ELSE, + MODEL_META_DATA_CONDITIONAL_STATEMENT_IFNDEF]: + break + elif self._ItemType == MODEL_META_DATA_INCLUDE: + # The included file must be relative to workspace + IncludedFile = NormPath(ReplaceMacro(self._ValueList[1], self._Macros, RaiseError=True)) + IncludedFile = PathClass(IncludedFile, GlobalData.gWorkspace) + ErrorCode, ErrorInfo = IncludedFile.Validate() + if ErrorCode != 0: + EdkLogger.error('parser', ErrorCode, File=self._FileWithError, + Line=self._LineIndex+1, ExtraData=ErrorInfo) + + self._FileWithError = IncludedFile + + IncludedFileTable = MetaFileStorage(self._Table.Cur, IncludedFile, MODEL_FILE_DSC, False) + Owner = self._Content[self._ContentIndex-1][0] + Parser = DscParser(IncludedFile, self._FileType, IncludedFileTable, + Owner=Owner, From=Owner) + + # set the parser status with current status + Parser._SectionName = self._SectionName + Parser._SectionType = self._SectionType + Parser._Scope = self._Scope + Parser._Enabled = self._Enabled + # Parse the included file + Parser.Start() + + # update current status with sub-parser's status + self._SectionName = Parser._SectionName + self._SectionType = Parser._SectionType + self._Scope = Parser._Scope + self._Enabled = Parser._Enabled + + # Insert all records in the table for the included file into dsc file table + Records = IncludedFileTable.GetAll() + if Records: + self._Content[self._ContentIndex:self._ContentIndex] = Records + + def __ProcessSkuId(self): + self._ValueList = [ReplaceMacro(Value, self._Macros, RaiseError=True) + for Value in self._ValueList] + + def __ProcessLibraryInstance(self): + self._ValueList = [ReplaceMacro(Value, self._Macros) for Value in self._ValueList] + + def __ProcessLibraryClass(self): + self._ValueList[1] = ReplaceMacro(self._ValueList[1], self._Macros, RaiseError=True) + + def __ProcessPcd(self): + ValueList = GetSplitValueList(self._ValueList[2]) + if len(ValueList) > 1 and ValueList[1] == 'VOID*': + PcdValue = ValueList[0] + ValueList[0] = ReplaceMacro(PcdValue, self._Macros) + else: + PcdValue = ValueList[-1] + ValueList[-1] = ReplaceMacro(PcdValue, self._Macros) + + self._ValueList[2] = '|'.join(ValueList) + + def __ProcessComponent(self): + self._ValueList[0] = ReplaceMacro(self._ValueList[0], self._Macros) + + def __ProcessSourceOverridePath(self): + self._ValueList[0] = ReplaceMacro(self._ValueList[0], self._Macros) + + def __ProcessBuildOption(self): + self._ValueList = [ReplaceMacro(Value, self._Macros, RaiseError=False) + for Value in self._ValueList] _SectionParser = { - MODEL_META_DATA_HEADER : _DefineParser, - MODEL_EFI_SKU_ID : MetaFileParser._CommonParser, - MODEL_EFI_LIBRARY_INSTANCE : MetaFileParser._PathParser, - MODEL_EFI_LIBRARY_CLASS : _LibraryClassParser, - MODEL_PCD_FIXED_AT_BUILD : _PcdParser, - MODEL_PCD_PATCHABLE_IN_MODULE : _PcdParser, - MODEL_PCD_FEATURE_FLAG : _PcdParser, - MODEL_PCD_DYNAMIC_DEFAULT : _PcdParser, - MODEL_PCD_DYNAMIC_HII : _PcdParser, - MODEL_PCD_DYNAMIC_VPD : _PcdParser, - MODEL_PCD_DYNAMIC_EX_DEFAULT : _PcdParser, - MODEL_PCD_DYNAMIC_EX_HII : _PcdParser, - MODEL_PCD_DYNAMIC_EX_VPD : _PcdParser, - MODEL_META_DATA_COMPONENT : _ComponentParser, - MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH : _CompponentSourceOverridePathParser, - MODEL_META_DATA_BUILD_OPTION : MetaFileParser._BuildOptionParser, - MODEL_UNKNOWN : MetaFileParser._Skip, - MODEL_META_DATA_USER_EXTENSION : MetaFileParser._Skip, + MODEL_META_DATA_HEADER : _DefineParser, + MODEL_EFI_SKU_ID : _SkuIdParser, + MODEL_EFI_LIBRARY_INSTANCE : _LibraryInstanceParser, + MODEL_EFI_LIBRARY_CLASS : _LibraryClassParser, + MODEL_PCD_FIXED_AT_BUILD : _PcdParser, + MODEL_PCD_PATCHABLE_IN_MODULE : _PcdParser, + MODEL_PCD_FEATURE_FLAG : _PcdParser, + MODEL_PCD_DYNAMIC_DEFAULT : _PcdParser, + MODEL_PCD_DYNAMIC_HII : _PcdParser, + MODEL_PCD_DYNAMIC_VPD : _PcdParser, + MODEL_PCD_DYNAMIC_EX_DEFAULT : _PcdParser, + MODEL_PCD_DYNAMIC_EX_HII : _PcdParser, + MODEL_PCD_DYNAMIC_EX_VPD : _PcdParser, + MODEL_META_DATA_COMPONENT : _ComponentParser, + MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH : _CompponentSourceOverridePathParser, + MODEL_META_DATA_BUILD_OPTION : _BuildOptionParser, + MODEL_UNKNOWN : MetaFileParser._Skip, + MODEL_META_DATA_USER_EXTENSION : MetaFileParser._Skip, + MODEL_META_DATA_SECTION_HEADER : MetaFileParser._SectionHeaderParser, + MODEL_META_DATA_SUBSECTION_HEADER : _SubsectionHeaderParser, } + _Macros = property(_GetMacros) + ## DEC file parser class # # @param FilePath The path of platform description file @@ -1045,20 +1369,24 @@ class DecParser(MetaFileParser): # @param Table Database used to retrieve module/package information # @param Macros Macros used for replacement in file # - def __init__(self, FilePath, FileType, Table, Macro=None): - MetaFileParser.__init__(self, FilePath, FileType, Table, Macro, -1) + def __init__(self, FilePath, FileType, Table): + # prevent re-initialization + if hasattr(self, "_Table"): + return + MetaFileParser.__init__(self, FilePath, FileType, Table, -1) self._Comments = [] + self._Version = 0x00010005 # Only EDK2 dec file is supported ## Parser starter def Start(self): + Content = '' try: - if self._Content == None: - self._Content = open(self.MetaFile, 'r').readlines() + Content = open(str(self.MetaFile), 'r').readlines() except: EdkLogger.error("Parser", FILE_READ_FAILURE, ExtraData=self.MetaFile) - for Index in range(0, len(self._Content)): - Line, Comment = CleanString2(self._Content[Index]) + for Index in range(0, len(Content)): + Line, Comment = CleanString2(Content[Index]) self._CurrentLine = Line self._LineIndex = Index @@ -1074,9 +1402,6 @@ class DecParser(MetaFileParser): self._SectionHeaderParser() self._Comments = [] continue - elif Line.startswith('DEFINE '): - self._MacroParser() - continue elif len(self._SectionType) == 0: self._Comments = [] continue @@ -1100,7 +1425,7 @@ class DecParser(MetaFileParser): self._ValueList[2], Arch, ModuleType, - self._Owner, + self._Owner[-1], self._LineIndex+1, -1, self._LineIndex+1, @@ -1180,6 +1505,7 @@ class DecParser(MetaFileParser): File=self.MetaFile, Line=self._LineIndex+1, ExtraData=self._CurrentLine) ## [guids], [ppis] and [protocols] section parser + @ParseMacro def _GuidParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_EQUAL_SPLIT, 1) if len(TokenList) < 2: @@ -1210,6 +1536,7 @@ class DecParser(MetaFileParser): # [PcdsDynamicEx # [PcdsDynamic] # + @ParseMacro def _PcdParser(self): TokenList = GetSplitValueList(self._CurrentLine, TAB_VALUE_SPLIT, 1) self._ValueList[0:1] = GetSplitValueList(TokenList[0], TAB_SPLIT) @@ -1268,6 +1595,7 @@ class DecParser(MetaFileParser): if not IsValid: EdkLogger.error('Parser', FORMAT_INVALID, Cause, ExtraData=self._CurrentLine, File=self.MetaFile, Line=self._LineIndex+1) + if ValueList[0] in ['True', 'true', 'TRUE']: ValueList[0] = '1' elif ValueList[0] in ['False', 'false', 'FALSE']: diff --git a/BaseTools/Source/Python/Workspace/MetaFileTable.py b/BaseTools/Source/Python/Workspace/MetaFileTable.py index d8dacacd64..f20eab9688 100644 --- a/BaseTools/Source/Python/Workspace/MetaFileTable.py +++ b/BaseTools/Source/Python/Workspace/MetaFileTable.py @@ -14,13 +14,58 @@ ## # Import Modules # +import uuid + import Common.EdkLogger as EdkLogger -from MetaDataTable import Table + +from MetaDataTable import Table, TableFile from MetaDataTable import ConvertToSqlString +from CommonDataClass.DataClass import MODEL_FILE_DSC, MODEL_FILE_DEC, MODEL_FILE_INF, \ + MODEL_FILE_OTHERS -## Python class representation of table storing module data -class ModuleTable(Table): +class MetaFileTable(Table): # TRICK: use file ID as the part before '.' + _ID_STEP_ = 0.00000001 + _ID_MAX_ = 0.99999999 + + ## Constructor + def __init__(self, Cursor, MetaFile, FileType, Temporary): + self.MetaFile = MetaFile + + self._FileIndexTable = TableFile(Cursor) + self._FileIndexTable.Create(False) + + FileId = self._FileIndexTable.GetFileId(MetaFile) + if not FileId: + FileId = self._FileIndexTable.InsertFile(MetaFile, FileType) + + if Temporary: + TableName = "_%s_%s_%s" % (FileType, FileId, uuid.uuid4().hex) + else: + TableName = "_%s_%s" % (FileType, FileId) + + #Table.__init__(self, Cursor, TableName, FileId, False) + Table.__init__(self, Cursor, TableName, FileId, Temporary) + self.Create(not self.IsIntegrity()) + + def IsIntegrity(self): + try: + Result = self.Cur.execute("select ID from %s where ID<0" % (self.Table)).fetchall() + if not Result: + return False + + TimeStamp = self.MetaFile.TimeStamp + if TimeStamp != self._FileIndexTable.GetFileTimeStamp(self.IdBase): + # update the timestamp in database + self._FileIndexTable.SetFileTimeStamp(self.IdBase, TimeStamp) + return False + except Exception, Exc: + EdkLogger.debug(EdkLogger.DEBUG_5, str(Exc)) + return False + return True + +## Python class representation of table storing module data +class ModuleTable(MetaFileTable): _ID_STEP_ = 0.00000001 _ID_MAX_ = 0.99999999 _COLUMN_ = ''' @@ -42,8 +87,8 @@ class ModuleTable(Table): _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1" ## Constructor - def __init__(self, Cursor, Name='Inf', IdBase=0, Temporary=False): - Table.__init__(self, Cursor, Name, IdBase, Temporary) + def __init__(self, Cursor, MetaFile, Temporary): + MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_INF, Temporary) ## Insert a record into table Inf # @@ -100,9 +145,7 @@ class ModuleTable(Table): return self.Exec(SqlCommand) ## Python class representation of table storing package data -class PackageTable(Table): - _ID_STEP_ = 0.00000001 - _ID_MAX_ = 0.99999999 +class PackageTable(MetaFileTable): _COLUMN_ = ''' ID REAL PRIMARY KEY, Model INTEGER NOT NULL, @@ -122,8 +165,8 @@ class PackageTable(Table): _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1" ## Constructor - def __init__(self, Cursor, Name='Dec', IdBase=0, Temporary=False): - Table.__init__(self, Cursor, Name, IdBase, Temporary) + def __init__(self, Cursor, MetaFile, Temporary): + MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DEC, Temporary) ## Insert table # @@ -179,9 +222,7 @@ class PackageTable(Table): return self.Exec(SqlCommand) ## Python class representation of table storing platform data -class PlatformTable(Table): - _ID_STEP_ = 0.00000001 - _ID_MAX_ = 0.99999999 +class PlatformTable(MetaFileTable): _COLUMN_ = ''' ID REAL PRIMARY KEY, Model INTEGER NOT NULL, @@ -202,8 +243,8 @@ class PlatformTable(Table): _DUMMY_ = "-1, -1, '====', '====', '====', '====', '====', -1, -1, -1, -1, -1, -1, -1" ## Constructor - def __init__(self, Cursor, Name='Dsc', IdBase=0, Temporary=False): - Table.__init__(self, Cursor, Name, IdBase, Temporary) + def __init__(self, Cursor, MetaFile, Temporary): + MetaFileTable.__init__(self, Cursor, MetaFile, MODEL_FILE_DSC, Temporary) ## Insert table # @@ -254,7 +295,7 @@ class PlatformTable(Table): # @retval: A recordSet of all found records # def Query(self, Model, Scope1=None, Scope2=None, BelongsToItem=None, FromItem=None): - ConditionString = "Model=%s AND Enabled>=0" % Model + ConditionString = "Model=%s AND Enabled>0" % Model ValueString = "Value1,Value2,Value3,Scope1,Scope2,ID,StartLine" if Scope1 != None and Scope1 != 'COMMON': @@ -273,3 +314,36 @@ class PlatformTable(Table): SqlCommand = "SELECT %s FROM %s WHERE %s" % (ValueString, self.Table, ConditionString) return self.Exec(SqlCommand) +## Factory class to produce different storage for different type of meta-file +class MetaFileStorage(object): + _FILE_TABLE_ = { + MODEL_FILE_INF : ModuleTable, + MODEL_FILE_DEC : PackageTable, + MODEL_FILE_DSC : PlatformTable, + MODEL_FILE_OTHERS : MetaFileTable, + } + + _FILE_TYPE_ = { + ".inf" : MODEL_FILE_INF, + ".dec" : MODEL_FILE_DEC, + ".dsc" : MODEL_FILE_DSC, + } + + ## Constructor + def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False): + # no type given, try to find one + if not FileType: + if MetaFile.Type in self._FILE_TYPE_: + FileType = Class._FILE_TYPE_[MetaFile.Type] + else: + FileType = MODEL_FILE_OTHERS + + # don't pass the type around if it's well known + if FileType == MODEL_FILE_OTHERS: + Args = (Cursor, MetaFile, FileType, Temporary) + else: + Args = (Cursor, MetaFile, Temporary) + + # create the storage object and return it to caller + return Class._FILE_TABLE_[FileType](*Args) + diff --git a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py index ac2ca057cc..71e98a94be 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceDatabase.py @@ -92,20 +92,14 @@ class DscBuildData(PlatformBuildClassObject): # @param Platform (not used for DscBuildData) # @param Macros Macros used for replacement in DSC file # - def __init__(self, FilePath, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): + def __init__(self, FilePath, RawData, BuildDataBase, Arch='COMMON', Target=None, Toolchain=None): self.MetaFile = FilePath self._RawData = RawData self._Bdb = BuildDataBase self._Arch = Arch - self._Macros = Macros + self._Target = Target + self._Toolchain = Toolchain self._Clear() - RecordList = self._RawData[MODEL_META_DATA_DEFINE, self._Arch] - for Record in RecordList: - GlobalData.gEdkGlobal[Record[0]] = Record[1] - - RecordList = self._RawData[MODEL_META_DATA_GLOBAL_DEFINE, self._Arch] - for Record in RecordList: - GlobalData.gGlobalDefines[Record[0]] = Record[1] ## XXX[key] = value def __setitem__(self, key, value): @@ -145,6 +139,16 @@ class DscBuildData(PlatformBuildClassObject): self._RFCLanguages = None self._ISOLanguages = None self._VpdToolGuid = None + self.__Macros = None + + ## Get current effective macros + def _GetMacros(self): + if self.__Macros == None: + self.__Macros = {} + self.__Macros.update(GlobalData.gPlatformDefines) + self.__Macros.update(GlobalData.gGlobalDefines) + self.__Macros.update(GlobalData.gCommandLineDefines) + return self.__Macros ## Get architecture def _GetArch(self): @@ -172,37 +176,40 @@ class DscBuildData(PlatformBuildClassObject): def _GetHeaderInfo(self): RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch] for Record in RecordList: - Name = Record[0] + Name = Record[1] # items defined _PROPERTY_ don't need additional processing if Name in self: - self[Name] = Record[1] + self[Name] = Record[2] # some special items in [Defines] section need special treatment elif Name == TAB_DSC_DEFINES_OUTPUT_DIRECTORY: - self._OutputDirectory = NormPath(Record[1], self._Macros) + self._OutputDirectory = NormPath(Record[2], self._Macros) if ' ' in self._OutputDirectory: EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in OUTPUT_DIRECTORY", File=self.MetaFile, Line=Record[-1], ExtraData=self._OutputDirectory) elif Name == TAB_DSC_DEFINES_FLASH_DEFINITION: - self._FlashDefinition = PathClass(NormPath(Record[1], self._Macros), GlobalData.gWorkspace) + self._FlashDefinition = PathClass(NormPath(Record[2], self._Macros), GlobalData.gWorkspace) ErrorCode, ErrorInfo = self._FlashDefinition.Validate('.fdf') if ErrorCode != 0: EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=Record[-1], ExtraData=ErrorInfo) elif Name == TAB_DSC_DEFINES_SUPPORTED_ARCHITECTURES: - self._SupArchList = GetSplitValueList(Record[1], TAB_VALUE_SPLIT) + self._SupArchList = GetSplitValueList(Record[2], TAB_VALUE_SPLIT) elif Name == TAB_DSC_DEFINES_BUILD_TARGETS: - self._BuildTargets = GetSplitValueList(Record[1]) + self._BuildTargets = GetSplitValueList(Record[2]) elif Name == TAB_DSC_DEFINES_SKUID_IDENTIFIER: if self._SkuName == None: - self._SkuName = Record[1] + self._SkuName = Record[2] elif Name == TAB_FIX_LOAD_TOP_MEMORY_ADDRESS: - self._LoadFixAddress = Record[1] + try: + self._LoadFixAddress = int (Record[2], 0) + except: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS %s is not valid dec or hex string" % (Record[2])) elif Name == TAB_DSC_DEFINES_RFC_LANGUAGES: - if not Record[1] or Record[1][0] != '"' or Record[1][-1] != '"' or len(Record[1]) == 1: + if not Record[2] or Record[2][0] != '"' or Record[2][-1] != '"' or len(Record[2]) == 1: EdkLogger.error('build', FORMAT_NOT_SUPPORTED, 'language code for RFC_LANGUAGES must have double quotes around it, for example: RFC_LANGUAGES = "en-us;zh-hans"', File=self.MetaFile, Line=Record[-1]) - LanguageCodes = Record[1][1:-1] + LanguageCodes = Record[2][1:-1] if not LanguageCodes: EdkLogger.error('build', FORMAT_NOT_SUPPORTED, 'one or more RFC4646 format language code must be provided for RFC_LANGUAGES statement', File=self.MetaFile, Line=Record[-1]) @@ -213,10 +220,10 @@ class DscBuildData(PlatformBuildClassObject): File=self.MetaFile, Line=Record[-1]) self._RFCLanguages = LanguageList elif Name == TAB_DSC_DEFINES_ISO_LANGUAGES: - if not Record[1] or Record[1][0] != '"' or Record[1][-1] != '"' or len(Record[1]) == 1: + if not Record[2] or Record[2][0] != '"' or Record[2][-1] != '"' or len(Record[2]) == 1: EdkLogger.error('build', FORMAT_NOT_SUPPORTED, 'language code for ISO_LANGUAGES must have double quotes around it, for example: ISO_LANGUAGES = "engchn"', File=self.MetaFile, Line=Record[-1]) - LanguageCodes = Record[1][1:-1] + LanguageCodes = Record[2][1:-1] if not LanguageCodes: EdkLogger.error('build', FORMAT_NOT_SUPPORTED, 'one or more ISO639-2 format language code must be provided for ISO_LANGUAGES statement', File=self.MetaFile, Line=Record[-1]) @@ -233,10 +240,10 @@ class DscBuildData(PlatformBuildClassObject): # for VPD_TOOL_GUID is correct. # try: - uuid.UUID(Record[1]) + uuid.UUID(Record[2]) except: EdkLogger.error("build", FORMAT_INVALID, "Invalid GUID format for VPD_TOOL_GUID", File=self.MetaFile) - self._VpdToolGuid = Record[1] + self._VpdToolGuid = Record[2] # set _Header to non-None in order to avoid database re-querying self._Header = 'DUMMY' @@ -368,8 +375,18 @@ class DscBuildData(PlatformBuildClassObject): if self._LoadFixAddress == None: if self._Header == None: self._GetHeaderInfo() + if self._LoadFixAddress == None: - self._LoadFixAddress = '' + self._LoadFixAddress = self._Macros.get(TAB_FIX_LOAD_TOP_MEMORY_ADDRESS, '0') + + try: + self._LoadFixAddress = int (self._LoadFixAddress, 0) + except: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS %s is not valid dec or hex string" % (self._LoadFixAddress)) + if self._LoadFixAddress < 0: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid negative value %s" % (self._LoadFixAddress)) + if self._LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self._LoadFixAddress % 0x1000 != 0: + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid unaligned 4K value %s" % (self._LoadFixAddress)) return self._LoadFixAddress ## Retrieve RFCLanguage filter @@ -389,7 +406,6 @@ class DscBuildData(PlatformBuildClassObject): if self._ISOLanguages == None: self._ISOLanguages = [] return self._ISOLanguages - ## Retrieve the GUID string for VPD tool def _GetVpdToolGuid(self): if self._VpdToolGuid == None: @@ -402,8 +418,8 @@ class DscBuildData(PlatformBuildClassObject): ## Retrieve [SkuIds] section information def _GetSkuIds(self): if self._SkuIds == None: - self._SkuIds = {} - RecordList = self._RawData[MODEL_EFI_SKU_ID] + self._SkuIds = sdict() + RecordList = self._RawData[MODEL_EFI_SKU_ID, self._Arch] for Record in RecordList: if Record[0] in [None, '']: EdkLogger.error('build', FORMAT_INVALID, 'No Sku ID number', @@ -423,8 +439,8 @@ class DscBuildData(PlatformBuildClassObject): self._Modules = sdict() RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) + Macros = self._Macros + Macros["EDK_SOURCE"] = GlobalData.gEcpSource for Record in RecordList: ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) ModuleId = Record[5] @@ -530,9 +546,8 @@ class DscBuildData(PlatformBuildClassObject): LibraryClassDict = tdict(True, 3) # track all library class names LibraryClassSet = set() - RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) + RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, None, -1] + Macros = self._Macros for Record in RecordList: LibraryClass, LibraryInstance, Dummy, Arch, ModuleType, Dummy, LineNo = Record if LibraryClass == '' or LibraryClass == 'NULL': @@ -564,7 +579,8 @@ class DscBuildData(PlatformBuildClassObject): continue self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance - # for EDK style library instances, which are listed in different section + # for Edk style library instances, which are listed in different section + Macros["EDK_SOURCE"] = GlobalData.gEcpSource RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch] for Record in RecordList: File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) @@ -581,14 +597,14 @@ class DscBuildData(PlatformBuildClassObject): # to parse it here. (self._Bdb[] will trigger a file parse if it # hasn't been parsed) # - Library = self._Bdb[File, self._Arch] + Library = self._Bdb[File, self._Arch, self._Target, self._Toolchain] self._LibraryClasses[Library.BaseName, ':dummy:'] = Library return self._LibraryClasses ## Retrieve all PCD settings in platform def _GetPcds(self): if self._Pcds == None: - self._Pcds = {} + self._Pcds = sdict() self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) @@ -603,17 +619,17 @@ class DscBuildData(PlatformBuildClassObject): ## Retrieve [BuildOptions] def _GetBuildOptions(self): if self._BuildOptions == None: - self._BuildOptions = {} + self._BuildOptions = sdict() # # Retrieve build option for EDKII style module # - RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, 'COMMON', EDKII_NAME] + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, EDKII_NAME] for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: self._BuildOptions[ToolChainFamily, ToolChain, EDKII_NAME] = Option # # Retrieve build option for EDK style module # - RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, 'COMMON', EDK_NAME] + RecordList = self._RawData[MODEL_META_DATA_BUILD_OPTION, self._Arch, EDK_NAME] for ToolChainFamily, ToolChain, Option, Dummy1, Dummy2, Dummy3, Dummy4 in RecordList: self._BuildOptions[ToolChainFamily, ToolChain, EDK_NAME] = Option return self._BuildOptions @@ -625,7 +641,7 @@ class DscBuildData(PlatformBuildClassObject): # @retval a dict object contains settings of given PCD type # def _GetPcd(self, Type): - Pcds = {} + Pcds = sdict() # # tdict is a special dict kind of type, used for selecting correct # PCD settings for certain ARCH @@ -664,7 +680,7 @@ class DscBuildData(PlatformBuildClassObject): # @retval a dict object contains settings of given PCD type # def _GetDynamicPcd(self, Type): - Pcds = {} + Pcds = sdict() # # tdict is a special dict kind of type, used for selecting correct # PCD settings for certain ARCH and SKU @@ -706,7 +722,7 @@ class DscBuildData(PlatformBuildClassObject): # @retval a dict object contains settings of given PCD type # def _GetDynamicHiiPcd(self, Type): - Pcds = {} + Pcds = sdict() # # tdict is a special dict kind of type, used for selecting correct # PCD settings for certain ARCH and SKU @@ -746,7 +762,7 @@ class DscBuildData(PlatformBuildClassObject): # @retval a dict object contains settings of given PCD type # def _GetDynamicVpdPcd(self, Type): - Pcds = {} + Pcds = sdict() # # tdict is a special dict kind of type, used for selecting correct # PCD settings for certain ARCH and SKU @@ -814,6 +830,7 @@ class DscBuildData(PlatformBuildClassObject): self.Pcds[Name, Guid] = PcdClassObject(Name, Guid, '', '', '', '', '', {}, False, None) self.Pcds[Name, Guid].DefaultValue = Value + _Macros = property(_GetMacros) Arch = property(_GetArch, _SetArch) Platform = property(_GetPlatformName) PlatformName = property(_GetPlatformName) @@ -884,13 +901,14 @@ class DecBuildData(PackageBuildClassObject): # @param Platform (not used for DecBuildData) # @param Macros Macros used for replacement in DSC file # - def __init__(self, File, RawData, BuildDataBase, Arch='COMMON', Platform='DUMMY', Macros={}): + def __init__(self, File, RawData, BuildDataBase, Arch='COMMON', Target=None, Toolchain=None): self.MetaFile = File self._PackageDir = File.Dir self._RawData = RawData self._Bdb = BuildDataBase self._Arch = Arch - self._Macros = Macros + self._Target = Target + self._Toolchain = Toolchain self._Clear() ## XXX[key] = value @@ -918,6 +936,14 @@ class DecBuildData(PackageBuildClassObject): self._Includes = None self._LibraryClasses = None self._Pcds = None + self.__Macros = None + + ## Get current effective macros + def _GetMacros(self): + if self.__Macros == None: + self.__Macros = {} + self.__Macros.update(GlobalData.gGlobalDefines) + return self.__Macros ## Get architecture def _GetArch(self): @@ -943,11 +969,11 @@ class DecBuildData(PackageBuildClassObject): # (Retriving all [Defines] information in one-shot is just to save time.) # def _GetHeaderInfo(self): - RecordList = self._RawData[MODEL_META_DATA_HEADER] + RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch] for Record in RecordList: - Name = Record[0] + Name = Record[1] if Name in self: - self[Name] = Record[1] + self[Name] = Record[2] self._Header = 'DUMMY' ## Retrieve package name @@ -1057,8 +1083,8 @@ class DecBuildData(PackageBuildClassObject): if self._Includes == None: self._Includes = [] RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) + Macros = self._Macros + Macros["EDK_SOURCE"] = GlobalData.gEcpSource for Record in RecordList: File = PathClass(NormPath(Record[0], Macros), self._PackageDir, Arch=self._Arch) LineNo = Record[-1] @@ -1082,8 +1108,7 @@ class DecBuildData(PackageBuildClassObject): LibraryClassDict = tdict(True) LibraryClassSet = set() RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) + Macros = self._Macros for LibraryClass, File, Dummy, Arch, ID, LineNo in RecordList: File = PathClass(NormPath(File, Macros), self._PackageDir, Arch=self._Arch) # check the file validation @@ -1100,7 +1125,7 @@ class DecBuildData(PackageBuildClassObject): ## Retrieve PCD declarations def _GetPcds(self): if self._Pcds == None: - self._Pcds = {} + self._Pcds = sdict() self._Pcds.update(self._GetPcd(MODEL_PCD_FIXED_AT_BUILD)) self._Pcds.update(self._GetPcd(MODEL_PCD_PATCHABLE_IN_MODULE)) self._Pcds.update(self._GetPcd(MODEL_PCD_FEATURE_FLAG)) @@ -1110,7 +1135,7 @@ class DecBuildData(PackageBuildClassObject): ## Retrieve PCD declarations for given type def _GetPcd(self, Type): - Pcds = {} + Pcds = sdict() # # tdict is a special kind of dict, used for selecting correct # PCD declaration for given ARCH @@ -1150,6 +1175,7 @@ class DecBuildData(PackageBuildClassObject): return Pcds + _Macros = property(_GetMacros) Arch = property(_GetArch, _SetArch) PackageName = property(_GetPackageName) Guid = property(_GetFileGuid) @@ -1194,7 +1220,7 @@ class InfBuildData(ModuleBuildClassObject): # # Optional Fields # - TAB_INF_DEFINES_INF_VERSION : "_AutoGenVersion", + #TAB_INF_DEFINES_INF_VERSION : "_AutoGenVersion", TAB_INF_DEFINES_COMPONENT_TYPE : "_ComponentType", TAB_INF_DEFINES_MAKEFILE_NAME : "_MakefileName", #TAB_INF_DEFINES_CUSTOM_MAKEFILE : "_CustomMakefile", @@ -1249,14 +1275,15 @@ class InfBuildData(ModuleBuildClassObject): # @param Platform The name of platform employing this module # @param Macros Macros used for replacement in DSC file # - def __init__(self, FilePath, RawData, BuildDatabase, Arch='COMMON', Platform='COMMON', Macros={}): + def __init__(self, FilePath, RawData, BuildDatabase, Arch='COMMON', Target=None, Toolchain=None): self.MetaFile = FilePath self._ModuleDir = FilePath.Dir self._RawData = RawData self._Bdb = BuildDatabase self._Arch = Arch + self._Target = Target + self._Toolchain = Toolchain self._Platform = 'COMMON' - self._Macros = Macros self._SourceOverridePath = None if FilePath.Key in GlobalData.gOverrideDir: self._SourceOverridePath = GlobalData.gOverrideDir[FilePath.Key] @@ -1310,7 +1337,17 @@ class InfBuildData(ModuleBuildClassObject): self._BuildOptions = None self._Depex = None self._DepexExpression = None - #self._SourceOverridePath = None + self.__Macros = None + + ## Get current effective macros + def _GetMacros(self): + if self.__Macros == None: + self.__Macros = {} + # EDK_GLOBAL defined macros can be applied to EDK modoule + if self.AutoGenVersion < 0x00010005: + self.__Macros.update(GlobalData.gEdkGlobal) + self.__Macros.update(GlobalData.gGlobalDefines) + return self.__Macros ## Get architecture def _GetArch(self): @@ -1354,26 +1391,25 @@ class InfBuildData(ModuleBuildClassObject): def _GetHeaderInfo(self): RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, self._Platform] for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Name = Record[0] + Name, Value = Record[1], ReplaceMacro(Record[2], self._Macros, False) # items defined _PROPERTY_ don't need additional processing if Name in self: - self[Name] = Record[1] + self[Name] = Value # some special items in [Defines] section need special treatment elif Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION', 'EDK_RELEASE_VERSION', 'PI_SPECIFICATION_VERSION'): if Name in ('EFI_SPECIFICATION_VERSION', 'UEFI_SPECIFICATION_VERSION'): Name = 'UEFI_SPECIFICATION_VERSION' if self._Specification == None: self._Specification = sdict() - self._Specification[Name] = GetHexVerValue(Record[1]) + self._Specification[Name] = GetHexVerValue(Value) if self._Specification[Name] == None: EdkLogger.error("build", FORMAT_NOT_SUPPORTED, - "'%s' format is not supported for %s" % (Record[1], Name), + "'%s' format is not supported for %s" % (Value, Name), File=self.MetaFile, Line=Record[-1]) elif Name == 'LIBRARY_CLASS': if self._LibraryClass == None: self._LibraryClass = [] - ValueList = GetSplitValueList(Record[1]) + ValueList = GetSplitValueList(Value) LibraryClass = ValueList[0] if len(ValueList) > 1: SupModuleList = GetSplitValueList(ValueList[1], ' ') @@ -1383,27 +1419,27 @@ class InfBuildData(ModuleBuildClassObject): elif Name == 'ENTRY_POINT': if self._ModuleEntryPointList == None: self._ModuleEntryPointList = [] - self._ModuleEntryPointList.append(Record[1]) + self._ModuleEntryPointList.append(Value) elif Name == 'UNLOAD_IMAGE': if self._ModuleUnloadImageList == None: self._ModuleUnloadImageList = [] - if Record[1] == '': + if not Value: continue - self._ModuleUnloadImageList.append(Record[1]) + self._ModuleUnloadImageList.append(Value) elif Name == 'CONSTRUCTOR': if self._ConstructorList == None: self._ConstructorList = [] - if Record[1] == '': + if not Value: continue - self._ConstructorList.append(Record[1]) + self._ConstructorList.append(Value) elif Name == 'DESTRUCTOR': if self._DestructorList == None: self._DestructorList = [] - if Record[1] == '': + if not Value: continue - self._DestructorList.append(Record[1]) + self._DestructorList.append(Value) elif Name == TAB_INF_DEFINES_CUSTOM_MAKEFILE: - TokenList = GetSplitValueList(Record[1]) + TokenList = GetSplitValueList(Value) if self._CustomMakefile == None: self._CustomMakefile = {} if len(TokenList) < 2: @@ -1418,25 +1454,25 @@ class InfBuildData(ModuleBuildClassObject): else: if self._Defs == None: self._Defs = sdict() - self._Defs[Name] = Record[1] + self._Defs[Name] = Value # - # Retrieve information in sections specific to EDK.x modules + # Retrieve information in sections specific to Edk.x modules # - if self._AutoGenVersion >= 0x00010005: # _AutoGenVersion may be None, which is less than anything + if self.AutoGenVersion >= 0x00010005: if not self._ModuleType: EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "MODULE_TYPE is not given", File=self.MetaFile) if self._ModuleType not in SUP_MODULE_LIST: RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, self._Platform] for Record in RecordList: - Name = Record[0] + Name = Record[1] if Name == "MODULE_TYPE": LineNo = Record[6] break EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "MODULE_TYPE %s is not supported for EDK II, valid values are:\n %s" % (self._ModuleType,' '.join(l for l in SUP_MODULE_LIST)), - File=self.MetaFile, Line=LineNo) + File=self.MetaFile, Line=LineNo) if (self._Specification == None) or (not 'PI_SPECIFICATION_VERSION' in self._Specification) or (int(self._Specification['PI_SPECIFICATION_VERSION'], 16) < 0x0001000A): if self._ModuleType == SUP_MODULE_SMM_CORE: EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "SMM_CORE module type can't be used in the module with PI_SPECIFICATION_VERSION less than 0x0001000A", File=self.MetaFile) @@ -1459,29 +1495,28 @@ class InfBuildData(ModuleBuildClassObject): if self.Sources == None: self._Sources = [] self._Sources.append(File) - else: - self._BuildType = self._ComponentType.upper() + else: if not self._ComponentType: EdkLogger.error("build", ATTRIBUTE_NOT_AVAILABLE, "COMPONENT_TYPE is not given", File=self.MetaFile) + self._BuildType = self._ComponentType.upper() if self._ComponentType in self._MODULE_TYPE_: self._ModuleType = self._MODULE_TYPE_[self._ComponentType] if self._ComponentType == 'LIBRARY': self._LibraryClass = [LibraryClassObject(self._BaseName, SUP_MODULE_LIST)] # make use some [nmake] section macros + Macros = self._Macros + Macros["EDK_SOURCE"] = GlobalData.gEcpSource + Macros['PROCESSOR'] = self._Arch RecordList = self._RawData[MODEL_META_DATA_NMAKE, self._Arch, self._Platform] for Name,Value,Dummy,Arch,Platform,ID,LineNo in RecordList: - Value = Value.replace('$(PROCESSOR)', self._Arch) - Name = Name.replace('$(PROCESSOR)', self._Arch) - Name, Value = ReplaceMacros((Name, Value), GlobalData.gEdkGlobal, True) + Value = ReplaceMacro(Value, Macros, True) if Name == "IMAGE_ENTRY_POINT": if self._ModuleEntryPointList == None: self._ModuleEntryPointList = [] self._ModuleEntryPointList.append(Value) elif Name == "DPX_SOURCE": - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) - File = PathClass(NormPath(Value, Macros), self._ModuleDir, Arch=self._Arch) + File = PathClass(NormPath(Value), self._ModuleDir, Arch=self._Arch) # check the file validation ErrorCode, ErrorInfo = File.Validate(".dxs", CaseSensitive=False) if ErrorCode != 0: @@ -1505,9 +1540,9 @@ class InfBuildData(ModuleBuildClassObject): else: Tool = ToolList[0] ToolChain = "*_*_*_%s_FLAGS" % Tool - ToolChainFamily = 'MSFT' # EDK.x only support MSFT tool chain + ToolChainFamily = 'MSFT' # Edk.x only support MSFT tool chain #ignore not replaced macros in value - ValueList = GetSplitValueList(' ' + Value, '/D') + ValueList = GetSplitList(' ' + Value, '/D') Dummy = ValueList[0] for Index in range(1, len(ValueList)): if ValueList[Index][-1] == '=' or ValueList[Index] == '': @@ -1525,8 +1560,11 @@ class InfBuildData(ModuleBuildClassObject): ## Retrieve file version def _GetInfVersion(self): if self._AutoGenVersion == None: - if self._Header_ == None: - self._GetHeaderInfo() + RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, self._Platform] + for Record in RecordList: + if Record[1] == TAB_INF_DEFINES_INF_VERSION: + self._AutoGenVersion = int(Record[2], 0) + break if self._AutoGenVersion == None: self._AutoGenVersion = 0x00010000 return self._AutoGenVersion @@ -1693,10 +1731,10 @@ class InfBuildData(ModuleBuildClassObject): if self._Binaries == None: self._Binaries = [] RecordList = self._RawData[MODEL_EFI_BINARY_FILE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} - Macros.update(self._Macros) + Macros = self._Macros + Macros["EDK_SOURCE"] = GlobalData.gEcpSource + Macros['PROCESSOR'] = self._Arch for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) FileType = Record[0] LineNo = Record[-1] Target = 'COMMON' @@ -1721,17 +1759,17 @@ class InfBuildData(ModuleBuildClassObject): if self._Sources == None: self._Sources = [] RecordList = self._RawData[MODEL_EFI_SOURCE_FILE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource, 'PROCESSOR':self._Arch} - Macros.update(self._Macros) + Macros = self._Macros + Macros["EDK_SOURCE"] = GlobalData.gEcpSource + Macros['PROCESSOR'] = self._Arch for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) LineNo = Record[-1] ToolChainFamily = Record[1] TagName = Record[2] ToolCode = Record[3] FeatureFlag = Record[4] - if self._AutoGenVersion < 0x00010005: - # old module source files (EDK) + if self.AutoGenVersion < 0x00010005: + # old module source files (Edk) File = PathClass(NormPath(Record[0], Macros), self._ModuleDir, self._SourceOverridePath, '', False, self._Arch, ToolChainFamily, '', TagName, ToolCode) # check the file validation @@ -1760,23 +1798,22 @@ class InfBuildData(ModuleBuildClassObject): self._LibraryClasses = sdict() RecordList = self._RawData[MODEL_EFI_LIBRARY_CLASS, self._Arch, self._Platform] for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) Lib = Record[0] Instance = Record[1] - if Instance != None and Instance != '': + if Instance: Instance = NormPath(Instance, self._Macros) self._LibraryClasses[Lib] = Instance return self._LibraryClasses - ## Retrieve library names (for EDK.x style of modules) + ## Retrieve library names (for Edk.x style of modules) def _GetLibraryNames(self): if self._Libraries == None: self._Libraries = [] RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch, self._Platform] for Record in RecordList: - # in case of name with '.lib' extension, which is unusual in EDK.x inf - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - LibraryName = os.path.splitext(Record[0])[0] + LibraryName = ReplaceMacro(Record[0], self._Macros, False) + # in case of name with '.lib' extension, which is unusual in Edk.x inf + LibraryName = os.path.splitext(LibraryName)[0] if LibraryName not in self._Libraries: self._Libraries.append(LibraryName) return self._Libraries @@ -1829,23 +1866,23 @@ class InfBuildData(ModuleBuildClassObject): self._Guids[CName] = Value return self._Guids - ## Retrieve include paths necessary for this module (for EDK.x style of modules) + ## Retrieve include paths necessary for this module (for Edk.x style of modules) def _GetIncludes(self): if self._Includes == None: self._Includes = [] if self._SourceOverridePath: self._Includes.append(self._SourceOverridePath) + + Macros = self._Macros + if 'PROCESSOR' in GlobalData.gEdkGlobal.keys(): + Macros['PROCESSOR'] = GlobalData.gEdkGlobal['PROCESSOR'] + else: + Macros['PROCESSOR'] = self._Arch RecordList = self._RawData[MODEL_EFI_INCLUDE, self._Arch, self._Platform] - # [includes] section must be used only in old (EDK.x) inf file - if self.AutoGenVersion >= 0x00010005 and len(RecordList) > 0: - EdkLogger.error('build', FORMAT_NOT_SUPPORTED, "No [include] section allowed", - File=self.MetaFile, Line=RecordList[0][-1]-1) for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) - Record[0] = Record[0].replace('$(PROCESSOR)', self._Arch) - Record[0] = ReplaceMacro(Record[0], {'EFI_SOURCE' : GlobalData.gEfiSource}, False) if Record[0].find('EDK_SOURCE') > -1: - File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEcpSource}, False), self._Macros) + Macros['EDK_SOURCE'] = GlobalData.gEcpSource + File = NormPath(Record[0], self._Macros) if File[0] == '.': File = os.path.join(self._ModuleDir, File) else: @@ -1855,7 +1892,8 @@ class InfBuildData(ModuleBuildClassObject): self._Includes.append(File) #TRICK: let compiler to choose correct header file - File = NormPath(ReplaceMacro(Record[0], {'EDK_SOURCE' : GlobalData.gEdkSource}, False), self._Macros) + Macros['EDK_SOURCE'] = GlobalData.gEdkSource + File = NormPath(Record[0], self._Macros) if File[0] == '.': File = os.path.join(self._ModuleDir, File) else: @@ -1864,7 +1902,7 @@ class InfBuildData(ModuleBuildClassObject): if File: self._Includes.append(File) else: - File = NormPath(Record[0], self._Macros) + File = NormPath(Record[0], Macros) if File[0] == '.': File = os.path.join(self._ModuleDir, File) else: @@ -1879,8 +1917,8 @@ class InfBuildData(ModuleBuildClassObject): if self._Packages == None: self._Packages = [] RecordList = self._RawData[MODEL_META_DATA_PACKAGE, self._Arch, self._Platform] - Macros = {"EDK_SOURCE":GlobalData.gEcpSource, "EFI_SOURCE":GlobalData.gEfiSource} - Macros.update(self._Macros) + Macros = self._Macros + Macros['EDK_SOURCE'] = GlobalData.gEcpSource for Record in RecordList: File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch) LineNo = Record[-1] @@ -1889,7 +1927,7 @@ class InfBuildData(ModuleBuildClassObject): if ErrorCode != 0: EdkLogger.error('build', ErrorCode, ExtraData=ErrorInfo, File=self.MetaFile, Line=LineNo) # parse this package now. we need it to get protocol/ppi/guid value - Package = self._Bdb[File, self._Arch] + Package = self._Bdb[File, self._Arch, self._Target, self._Toolchain] self._Packages.append(Package) return self._Packages @@ -1921,7 +1959,7 @@ class InfBuildData(ModuleBuildClassObject): self._BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option return self._BuildOptions - ## Retrieve depedency expression + ## Retrieve dependency expression def _GetDepex(self): if self._Depex == None: self._Depex = tdict(False, 2) @@ -1929,8 +1967,8 @@ class InfBuildData(ModuleBuildClassObject): # If the module has only Binaries and no Sources, then ignore [Depex] if self.Sources == None or self.Sources == []: - if self.Binaries <> None and self.Binaries <> []: - return self._Depex + if self.Binaries != None and self.Binaries != []: + return self._Depex # PEIM and DXE drivers must have a valid [Depex] section if len(self.LibraryClass) == 0 and len(RecordList) == 0: @@ -1939,12 +1977,12 @@ class InfBuildData(ModuleBuildClassObject): EdkLogger.error('build', RESOURCE_NOT_AVAILABLE, "No [Depex] section or no valid expression in [Depex] section for [%s] module" \ % self.ModuleType, File=self.MetaFile) - Depex = {} + Depex = sdict() for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + DepexStr = ReplaceMacro(Record[0], self._Macros, False) Arch = Record[3] ModuleType = Record[4] - TokenList = Record[0].split() + TokenList = DepexStr.split() if (Arch, ModuleType) not in Depex: Depex[Arch, ModuleType] = [] DepexList = Depex[Arch, ModuleType] @@ -1980,12 +2018,12 @@ class InfBuildData(ModuleBuildClassObject): if self._DepexExpression == None: self._DepexExpression = tdict(False, 2) RecordList = self._RawData[MODEL_EFI_DEPEX, self._Arch] - DepexExpression = {} + DepexExpression = sdict() for Record in RecordList: - Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) + DepexStr = ReplaceMacro(Record[0], self._Macros, False) Arch = Record[3] ModuleType = Record[4] - TokenList = Record[0].split() + TokenList = DepexStr.split() if (Arch, ModuleType) not in DepexExpression: DepexExpression[Arch, ModuleType] = '' for Token in TokenList: @@ -2123,6 +2161,7 @@ class InfBuildData(ModuleBuildClassObject): return Pcds + _Macros = property(_GetMacros) Arch = property(_GetArch, _SetArch) Platform = property(_GetPlatform, _SetPlatform) @@ -2170,21 +2209,6 @@ class InfBuildData(ModuleBuildClassObject): # @prarm RenewDb=False Create new database file if it's already there # class WorkspaceDatabase(object): - # file parser - _FILE_PARSER_ = { - MODEL_FILE_INF : InfParser, - MODEL_FILE_DEC : DecParser, - MODEL_FILE_DSC : DscParser, - MODEL_FILE_FDF : None, #FdfParser, - MODEL_FILE_CIF : None - } - - # file table - _FILE_TABLE_ = { - MODEL_FILE_INF : ModuleTable, - MODEL_FILE_DEC : PackageTable, - MODEL_FILE_DSC : PlatformTable, - } # default database file path _DB_PATH_ = "Conf/.cache/build.db" @@ -2194,11 +2218,18 @@ class WorkspaceDatabase(object): # to avoid unnecessary re-parsing # class BuildObjectFactory(object): + _FILE_TYPE_ = { ".inf" : MODEL_FILE_INF, ".dec" : MODEL_FILE_DEC, ".dsc" : MODEL_FILE_DSC, - ".fdf" : MODEL_FILE_FDF, + } + + # file parser + _FILE_PARSER_ = { + MODEL_FILE_INF : InfParser, + MODEL_FILE_DEC : DecParser, + MODEL_FILE_DSC : DscParser, } # convert to xxxBuildData object @@ -2206,7 +2237,6 @@ class WorkspaceDatabase(object): MODEL_FILE_INF : InfBuildData, MODEL_FILE_DEC : DecBuildData, MODEL_FILE_DSC : DscBuildData, - MODEL_FILE_FDF : None #FlashDefTable, } _CACHE_ = {} # (FilePath, Arch) : @@ -2215,46 +2245,61 @@ class WorkspaceDatabase(object): def __init__(self, WorkspaceDb): self.WorkspaceDb = WorkspaceDb - # key = (FilePath, Arch='COMMON') + # key = (FilePath, Arch=None) def __contains__(self, Key): FilePath = Key[0] - Arch = 'COMMON' if len(Key) > 1: Arch = Key[1] + else: + Arch = None return (FilePath, Arch) in self._CACHE_ - # key = (FilePath, Arch='COMMON') + # key = (FilePath, Arch=None, Target=None, Toochain=None) def __getitem__(self, Key): FilePath = Key[0] - Arch = 'COMMON' - Platform = 'COMMON' - if len(Key) > 1: + KeyLength = len(Key) + if KeyLength > 1: Arch = Key[1] - if len(Key) > 2: - Platform = Key[2] + else: + Arch = None + if KeyLength > 2: + Target = Key[2] + else: + Target = None + if KeyLength > 3: + Toolchain = Key[3] + else: + Toolchain = None # if it's generated before, just return the cached one - Key = (FilePath, Arch) + Key = (FilePath, Arch, Target, Toolchain) if Key in self._CACHE_: return self._CACHE_[Key] # check file type - Ext = FilePath.Ext.lower() + Ext = FilePath.Type if Ext not in self._FILE_TYPE_: return None FileType = self._FILE_TYPE_[Ext] if FileType not in self._GENERATOR_: return None - # get table for current file - MetaFile = self.WorkspaceDb[FilePath, FileType, self.WorkspaceDb._GlobalMacros] + # get the parser ready for this file + MetaFile = self._FILE_PARSER_[FileType]( + FilePath, + FileType, + MetaFileStorage(self.WorkspaceDb.Cur, FilePath, FileType) + ) + # alwasy do post-process, in case of macros change + MetaFile.DoPostProcess() + # object the build is based on BuildObject = self._GENERATOR_[FileType]( FilePath, MetaFile, self, Arch, - Platform, - self.WorkspaceDb._GlobalMacros, + Target, + Toolchain ) self._CACHE_[Key] = BuildObject return BuildObject @@ -2274,11 +2319,9 @@ class WorkspaceDatabase(object): # @param GlobalMacros Global macros used for replacement during file parsing # @prarm RenewDb=False Create new database file if it's already there # - def __init__(self, DbPath, GlobalMacros={}, RenewDb=False): + def __init__(self, DbPath, RenewDb=False): self._DbClosedFlag = False - self._GlobalMacros = GlobalMacros - - if DbPath == None or DbPath == '': + if not DbPath: DbPath = os.path.normpath(os.path.join(GlobalData.gWorkspace, self._DB_PATH_)) # don't create necessary path for db in memory @@ -2306,6 +2349,7 @@ class WorkspaceDatabase(object): # create table for internal uses self.TblDataModel = TableDataModel(self.Cur) self.TblFile = TableFile(self.Cur) + self.Platform = None # conversion object for build or file format conversion purpose self.BuildObject = WorkspaceDatabase.BuildObjectFactory(self) @@ -2324,41 +2368,6 @@ class WorkspaceDatabase(object): # @return Bool value for whether need renew workspace databse # def _CheckWhetherDbNeedRenew (self, force, DbPath): - DbDir = os.path.split(DbPath)[0] - MacroFilePath = os.path.normpath(os.path.join(DbDir, "build.mac")) - MacroMatch = False - if os.path.exists(MacroFilePath) and os.path.isfile(MacroFilePath): - LastMacros = None - try: - f = open(MacroFilePath,'r') - LastMacros = pickle.load(f) - f.close() - except IOError: - pass - except: - f.close() - - if LastMacros != None and type(LastMacros) is DictType: - if LastMacros == self._GlobalMacros: - MacroMatch = True - for Macro in LastMacros.keys(): - if not (Macro in self._GlobalMacros and LastMacros[Macro] == self._GlobalMacros[Macro]): - MacroMatch = False; - break; - - if not MacroMatch: - # save command line macros to file - try: - f = open(MacroFilePath,'w') - pickle.dump(self._GlobalMacros, f, 2) - f.close() - except IOError: - pass - except: - f.close() - - force = True - # if database does not exist, we need do nothing if not os.path.exists(DbPath): return False @@ -2423,6 +2432,9 @@ determine whether database file is out of date!\n") def QueryTable(self, Table): Table.Query() + def __del__(self): + self.Close() + ## Close entire database # # Commit all first @@ -2435,83 +2447,28 @@ determine whether database file is out of date!\n") self.Conn.close() self._DbClosedFlag = True - ## Get unique file ID for the gvien file - def GetFileId(self, FilePath): - return self.TblFile.GetFileId(FilePath) - - ## Get file type value for the gvien file ID - def GetFileType(self, FileId): - return self.TblFile.GetFileType(FileId) - - ## Get time stamp stored in file table - def GetTimeStamp(self, FileId): - return self.TblFile.GetFileTimeStamp(FileId) - - ## Update time stamp in file table - def SetTimeStamp(self, FileId, TimeStamp): - return self.TblFile.SetFileTimeStamp(FileId, TimeStamp) - - ## Check if a table integrity flag exists or not - def CheckIntegrity(self, TableName): - try: - Result = self.Cur.execute("select min(ID) from %s" % (TableName)).fetchall() - if Result[0][0] != -1: - return False - # - # Check whether the meta data file has external dependency by comparing the time stamp - # - Sql = "select Value1, Value2 from %s where Model=%d" % (TableName, MODEL_EXTERNAL_DEPENDENCY) - for Dependency in self.Cur.execute(Sql).fetchall(): - if str(os.stat(Dependency[0])[8]) != Dependency[1]: - return False - except: - return False - return True - - ## Compose table name for given file type and file ID - def GetTableName(self, FileType, FileId): - return "_%s_%s" % (FileType, FileId) - - ## Return a temp table containing all content of the given file - # - # @param FileInfo The tuple containing path and type of a file - # - def __getitem__(self, FileInfo): - FilePath, FileType, Macros = FileInfo - if FileType not in self._FILE_TABLE_: - return None - - # flag used to indicate if it's parsed or not - FilePath = str(FilePath) - Parsed = False - FileId = self.GetFileId(FilePath) - if FileId != None: - TimeStamp = os.stat(FilePath)[8] - TableName = self.GetTableName(FileType, FileId) - if TimeStamp != self.GetTimeStamp(FileId): - # update the timestamp in database - self.SetTimeStamp(FileId, TimeStamp) - else: - # if the table exists and is integrity, don't parse it - Parsed = self.CheckIntegrity(TableName) - else: - FileId = self.TblFile.InsertFile(FilePath, FileType) - TableName = self.GetTableName(FileType, FileId) - - FileTable = self._FILE_TABLE_[FileType](self.Cur, TableName, FileId) - FileTable.Create(not Parsed) - Parser = self._FILE_PARSER_[FileType](FilePath, FileType, FileTable, Macros) - # set the "Finished" flag in parser in order to avoid re-parsing (if parsed) - Parser.Finished = Parsed - return Parser - ## Summarize all packages in the database - def _GetPackageList(self): - PackageList = [] - for Module in self.ModuleList: - for Package in Module.Packages: + def GetPackageList(self, Platform, Arch, TargetName, ToolChainTag): + self.Platform = Platform + PackageList =[] + Pa = self.BuildObject[self.Platform, 'COMMON'] + # + # Get Package related to Modules + # + for Module in Pa.Modules: + ModuleObj = self.BuildObject[Module, Arch, TargetName, ToolChainTag] + for Package in ModuleObj.Packages: if Package not in PackageList: PackageList.append(Package) + # + # Get Packages related to Libraries + # + for Lib in Pa.LibraryInstances: + LibObj = self.BuildObject[Lib, Arch, TargetName, ToolChainTag] + for Package in LibObj.Packages: + if Package not in PackageList: + PackageList.append(Package) + return PackageList ## Summarize all platforms in the database @@ -2526,21 +2483,7 @@ determine whether database file is out of date!\n") PlatformList.append(Platform) return PlatformList - ## Summarize all modules in the database - def _GetModuleList(self): - ModuleList = [] - for ModuleFile in self.TblFile.GetFileList(MODEL_FILE_INF): - try: - Module = self.BuildObject[PathClass(ModuleFile), 'COMMON'] - except: - Module = None - if Module != None: - ModuleList.append(Module) - return ModuleList - PlatformList = property(_GetPlatformList) - PackageList = property(_GetPackageList) - ModuleList = property(_GetModuleList) ## # diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index c6e49f9999..f3555d705d 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -4,7 +4,7 @@ # This module contains the functionality to generate build report after # build all target completes successfully. # -# Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
+# Copyright (c) 2010, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -184,16 +184,17 @@ class DepexParser(object): # def __init__(self, Wa): self._GuidDb = {} - for Package in Wa.BuildDatabase.WorkspaceDb.PackageList: - for Protocol in Package.Protocols: - GuidValue = GuidStructureStringToGuidString(Package.Protocols[Protocol]) - self._GuidDb[GuidValue.upper()] = Protocol - for Ppi in Package.Ppis: - GuidValue = GuidStructureStringToGuidString(Package.Ppis[Ppi]) - self._GuidDb[GuidValue.upper()] = Ppi - for Guid in Package.Guids: - GuidValue = GuidStructureStringToGuidString(Package.Guids[Guid]) - self._GuidDb[GuidValue.upper()] = Guid + for Pa in Wa.AutoGenObjectList: + for Package in Pa.PackageList: + for Protocol in Package.Protocols: + GuidValue = GuidStructureStringToGuidString(Package.Protocols[Protocol]) + self._GuidDb[GuidValue.upper()] = Protocol + for Ppi in Package.Ppis: + GuidValue = GuidStructureStringToGuidString(Package.Ppis[Ppi]) + self._GuidDb[GuidValue.upper()] = Ppi + for Guid in Package.Guids: + GuidValue = GuidStructureStringToGuidString(Package.Guids[Guid]) + self._GuidDb[GuidValue.upper()] = Guid ## # Parse the binary dependency expression files. @@ -486,7 +487,7 @@ class ModuleReport(object): # if ModuleType == "DXE_SMM_DRIVER": PiSpec = M.Module.Specification.get("PI_SPECIFICATION_VERSION", "0x00010000") - if int(PiSpec, 16) >= 0x0001000A: + if int(PiSpec, 0) >= 0x0001000A: ModuleType = "SMM_DRIVER" self.DriverType = gDriverTypeMap.get(ModuleType, "0x2 (FREE_FORM)") self.UefiSpecVersion = M.Module.Specification.get("UEFI_SPECIFICATION_VERSION", "") @@ -641,10 +642,11 @@ class PcdReport(object): # Collect PCD DEC default value. # self.DecPcdDefault = {} - for Package in Wa.BuildDatabase.WorkspaceDb.PackageList: - for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: - DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue - self.DecPcdDefault.setdefault((TokenCName, TokenSpaceGuidCName, DecType), DecDefaultValue) + for Pa in Wa.AutoGenObjectList: + for Package in Pa.PackageList: + for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: + DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue + self.DecPcdDefault.setdefault((TokenCName, TokenSpaceGuidCName, DecType), DecDefaultValue) # # Collect PCDs defined in DSC common section # @@ -1174,14 +1176,14 @@ class FdRegionReport(object): self._DiscoverNestedFvList(FvName, Wa) PlatformPcds = {} - # # Collect PCDs declared in DEC files. - # - for Package in Wa.BuildDatabase.WorkspaceDb.PackageList: - for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: - DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue - PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DecDefaultValue + # + for Pa in Wa.AutoGenObjectList: + for Package in Pa.PackageList: + for (TokenCName, TokenSpaceGuidCName, DecType) in Package.Pcds: + DecDefaultValue = Package.Pcds[TokenCName, TokenSpaceGuidCName, DecType].DefaultValue + PlatformPcds[(TokenCName, TokenSpaceGuidCName)] = DecDefaultValue # # Collect PCDs defined in DSC common section # diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 9502bf3364..0319103138 100644 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -172,6 +172,12 @@ def CheckEnvVariable(): GlobalData.gEdkSource = EdkSourceDir GlobalData.gEcpSource = EcpSourceDir + GlobalData.gGlobalDefines["WORKSPACE"] = WorkspaceDir + GlobalData.gGlobalDefines["EFI_SOURCE"] = EfiSourceDir + GlobalData.gGlobalDefines["EDK_SOURCE"] = EdkSourceDir + GlobalData.gGlobalDefines["ECP_SOURCE"] = EcpSourceDir + GlobalData.gGlobalDefines["EDK_TOOLS_PATH"] = os.environ["EDK_TOOLS_PATH"] + ## Get normalized file path # # Convert the path to be local format, and remove the WORKSPACE path at the @@ -301,10 +307,14 @@ class BuildUnit: self.WorkingDir = WorkingDir self.Target = Target self.BuildCommand = BuildCommand - if BuildCommand == None or len(BuildCommand) == 0: - EdkLogger.error("build", OPTION_MISSING, "No build command found for", + if not BuildCommand: + EdkLogger.error("build", OPTION_MISSING, + "No build command found for this module. " + "Please check your setting of %s_%s_%s_MAKE_PATH in Conf/tools_def.txt file." % + (Obj.BuildTarget, Obj.ToolChain, Obj.Arch), ExtraData=str(Obj)) + ## str() method # # It just returns the string representation of self.BuildObject @@ -690,93 +700,59 @@ class Build(): # # @param Target The build command target, one of gSupportedTarget # @param WorkspaceDir The directory of workspace - # @param Platform The DSC file of active platform - # @param Module The INF file of active module, if any - # @param Arch The Arch list of platform or module - # @param ToolChain The name list of toolchain - # @param BuildTarget The "DEBUG" or "RELEASE" build - # @param FlashDefinition The FDF file of active platform - # @param FdList=[] The FD names to be individually built - # @param FvList=[] The FV names to be individually built - # @param MakefileType The type of makefile (for MSFT make or GNU make) - # @param SilentMode Indicate multi-thread build mode - # @param ThreadNumber The maximum number of thread if in multi-thread build mode - # @param SkipAutoGen Skip AutoGen step - # @param Reparse Re-parse all meta files - # @param SkuId SKU id from command line - # - def __init__(self, Target, WorkspaceDir, Platform, Module, Arch, ToolChain, - BuildTarget, FlashDefinition, FdList=[], FvList=[], CapList=[], - MakefileType="nmake", SilentMode=False, ThreadNumber=2, - SkipAutoGen=False, Reparse=False, SkuId=None, - ReportFile=None, ReportType=None, UniFlag=None): - - self.WorkspaceDir = WorkspaceDir + # @param BuildOptions Build options passed from command line + # + def __init__(self, Target, WorkspaceDir, BuildOptions): + self.WorkspaceDir = WorkspaceDir self.Target = Target - self.PlatformFile = Platform - self.ModuleFile = Module - self.ArchList = Arch - self.ToolChainList = ToolChain - self.BuildTargetList= BuildTarget - self.Fdf = FlashDefinition - self.FdList = FdList - self.FvList = FvList - self.CapList = CapList - self.MakefileType = MakefileType - self.SilentMode = SilentMode - self.ThreadNumber = ThreadNumber - self.SkipAutoGen = SkipAutoGen - self.Reparse = Reparse - self.SkuId = SkuId + self.PlatformFile = BuildOptions.PlatformFile + self.ModuleFile = BuildOptions.ModuleFile + self.ArchList = BuildOptions.TargetArch + self.ToolChainList = BuildOptions.ToolChain + self.BuildTargetList= BuildOptions.BuildTarget + self.Fdf = BuildOptions.FdfFile + self.FdList = BuildOptions.RomImage + self.FvList = BuildOptions.FvImage + self.CapList = BuildOptions.CapName + self.SilentMode = BuildOptions.SilentMode + self.ThreadNumber = BuildOptions.ThreadNumber + self.SkipAutoGen = BuildOptions.SkipAutoGen + self.Reparse = BuildOptions.Reparse + self.SkuId = BuildOptions.SkuId self.SpawnMode = True - self.BuildReport = BuildReport(ReportFile, ReportType) + self.BuildReport = BuildReport(BuildOptions.ReportFile, BuildOptions.ReportType) self.TargetTxt = TargetTxtClassObject() self.ToolDef = ToolDefClassObject() - self.Db = WorkspaceDatabase(None, GlobalData.gGlobalDefines, self.Reparse) - #self.Db = WorkspaceDatabase(None, {}, self.Reparse) + if BuildOptions.DisableCache: + self.Db = WorkspaceDatabase(":memory:") + else: + self.Db = WorkspaceDatabase(None, self.Reparse) self.BuildDatabase = self.Db.BuildObject self.Platform = None self.LoadFixAddress = 0 - self.UniFlag = UniFlag + self.UniFlag = BuildOptions.Flag # print dot character during doing some time-consuming work self.Progress = Utils.Progressor() - # parse target.txt, tools_def.txt, and platform file - #self.RestoreBuildData() - self.LoadConfiguration() - - # - # @attention Treat $(TARGET)/$(TOOL_CHAIN_TAG) in meta data files as special macro when it has only one build target/toolchain. - # This is not a complete support for $(TARGET)/$(TOOL_CHAIN_TAG) macro as it can only support one build target/toolchain in ONE - # invocation of build command. However, it should cover the frequent usage model that $(TARGET)/$(TOOL_CHAIN_TAG) macro - # is used in DSC/FDF files to specify different libraries & PCD setting for debug/release build. - # - if len(self.BuildTargetList) == 1: - self.Db._GlobalMacros.setdefault("TARGET", self.BuildTargetList[0]) - if len(self.ToolChainList) == 1: - self.Db._GlobalMacros.setdefault("TOOL_CHAIN_TAG", self.ToolChainList[0]) - self.InitBuild() # print current build environment and configuration - EdkLogger.quiet("%-24s = %s" % ("WORKSPACE", os.environ["WORKSPACE"])) - EdkLogger.quiet("%-24s = %s" % ("ECP_SOURCE", os.environ["ECP_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EDK_SOURCE", os.environ["EDK_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EFI_SOURCE", os.environ["EFI_SOURCE"])) - EdkLogger.quiet("%-24s = %s" % ("EDK_TOOLS_PATH", os.environ["EDK_TOOLS_PATH"])) - - EdkLogger.info('\n%-24s = %s' % ("TARGET_ARCH", ' '.join(self.ArchList))) - EdkLogger.info('%-24s = %s' % ("TARGET", ' '.join(self.BuildTargetList))) - EdkLogger.info('%-24s = %s' % ("TOOL_CHAIN_TAG", ' '.join(self.ToolChainList))) - - EdkLogger.info('\n%-24s = %s' % ("Active Platform", self.PlatformFile)) - - if self.Fdf != None and self.Fdf != "": - EdkLogger.info('%-24s = %s' % ("Flash Image Definition", self.Fdf)) - - if self.ModuleFile != None and self.ModuleFile != "": - EdkLogger.info('%-24s = %s' % ("Active Module", self.ModuleFile)) + EdkLogger.quiet("%-16s = %s" % ("WORKSPACE", os.environ["WORKSPACE"])) + EdkLogger.quiet("%-16s = %s" % ("ECP_SOURCE", os.environ["ECP_SOURCE"])) + EdkLogger.quiet("%-16s = %s" % ("EDK_SOURCE", os.environ["EDK_SOURCE"])) + EdkLogger.quiet("%-16s = %s" % ("EFI_SOURCE", os.environ["EFI_SOURCE"])) + EdkLogger.quiet("%-16s = %s" % ("EDK_TOOLS_PATH", os.environ["EDK_TOOLS_PATH"])) + + EdkLogger.info("") + if self.ArchList: + EdkLogger.info('%-16s = %s' % ("Architecture(s)", ' '.join(self.ArchList))) + EdkLogger.info('%-16s = %s' % ("Build target", ' '.join(self.BuildTargetList))) + EdkLogger.info('%-16s = %s' % ("Toolchain", ' '.join(self.ToolChainList))) + + #EdkLogger.info('\n%-24s = %s' % ("Active Platform", self.PlatformFile)) + if self.ModuleFile: + EdkLogger.info('%-16s = %s' % ("Active Module", self.ModuleFile)) os.chdir(self.WorkspaceDir) self.Progress.Start("\nProcessing meta-data") @@ -805,15 +781,16 @@ class Build(): EdkLogger.error("build", FILE_NOT_FOUND, ExtraData=BuildConfigurationFile) # if no ARCH given in command line, get it from target.txt - if self.ArchList == None or len(self.ArchList) == 0: + if not self.ArchList: self.ArchList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET_ARCH] + self.ArchList = tuple(self.ArchList) # if no build target given in command line, get it from target.txt - if self.BuildTargetList == None or len(self.BuildTargetList) == 0: + if not self.BuildTargetList: self.BuildTargetList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TARGET] # if no tool chain given in command line, get it from target.txt - if self.ToolChainList == None or len(self.ToolChainList) == 0: + if not self.ToolChainList: self.ToolChainList = self.TargetTxt.TargetTxtDictionary[DataType.TAB_TAT_DEFINES_TOOL_CHAIN_TAG] if self.ToolChainList == None or len(self.ToolChainList) == 0: EdkLogger.error("build", RESOURCE_NOT_AVAILABLE, ExtraData="No toolchain given. Don't know how to build.\n") @@ -859,9 +836,6 @@ class Build(): ExtraData="No active platform specified in target.txt or command line! Nothing can be built.\n") self.PlatformFile = PathClass(NormFile(PlatformFile, self.WorkspaceDir), self.WorkspaceDir) - ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) ## Initialize build configuration # @@ -869,90 +843,17 @@ class Build(): # command line and target.txt, then get the final build configurations. # def InitBuild(self): - ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc") + # parse target.txt, tools_def.txt, and platform file + self.LoadConfiguration() + + # Allow case-insensitive for those from command line or configuration file + ErrorCode, ErrorInfo = self.PlatformFile.Validate(".dsc", False) if ErrorCode != 0: EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) # create metafile database self.Db.InitDatabase() - # we need information in platform description file to determine how to build - self.Platform = self.BuildDatabase[self.PlatformFile, 'COMMON'] - if not self.Fdf: - self.Fdf = self.Platform.FlashDefinition - - LoadFixAddressString = None - if TAB_FIX_LOAD_TOP_MEMORY_ADDRESS in GlobalData.gGlobalDefines: - LoadFixAddressString = GlobalData.gGlobalDefines[TAB_FIX_LOAD_TOP_MEMORY_ADDRESS] - else: - LoadFixAddressString = self.Platform.LoadFixAddress - - if LoadFixAddressString != None and LoadFixAddressString != '': - try: - if LoadFixAddressString.upper().startswith('0X'): - self.LoadFixAddress = int (LoadFixAddressString, 16) - else: - self.LoadFixAddress = int (LoadFixAddressString) - except: - EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS %s is not valid dec or hex string" % (LoadFixAddressString)) - if self.LoadFixAddress < 0: - EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid negative value %s" % (LoadFixAddressString)) - if self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress % 0x1000 != 0: - EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS is set to the invalid unaligned 4K value %s" % (LoadFixAddressString)) - - if self.SkuId == None or self.SkuId == '': - self.SkuId = self.Platform.SkuName - - # check FD/FV build target - if self.Fdf == None or self.Fdf == "": - if self.FdList != []: - EdkLogger.info("No flash definition file found. FD [%s] will be ignored." % " ".join(self.FdList)) - self.FdList = [] - if self.FvList != []: - EdkLogger.info("No flash definition file found. FV [%s] will be ignored." % " ".join(self.FvList)) - self.FvList = [] - else: - # - # Mark now build in AutoGen Phase - # - GlobalData.gAutoGenPhase = True - FdfParserObj = FdfParser(str(self.Fdf)) - for key in self.Db._GlobalMacros: - InputMacroDict[key] = self.Db._GlobalMacros[key] - FdfParserObj.ParseFile() - for fvname in self.FvList: - if fvname.upper() not in FdfParserObj.Profile.FvDict.keys(): - EdkLogger.error("build", OPTION_VALUE_INVALID, - "No such an FV in FDF file: %s" % fvname) - GlobalData.gAutoGenPhase = False - - # - # Merge Arch - # - if self.ArchList == None or len(self.ArchList) == 0: - ArchList = set(self.Platform.SupArchList) - else: - ArchList = set(self.ArchList) & set(self.Platform.SupArchList) - if len(ArchList) == 0: - EdkLogger.error("build", PARAMETER_INVALID, - ExtraData = "Active platform supports [%s] only, but [%s] is given." - % (" ".join(self.Platform.SupArchList), " ".join(self.ArchList))) - elif len(ArchList) != len(self.ArchList): - SkippedArchList = set(self.ArchList).symmetric_difference(set(self.Platform.SupArchList)) - EdkLogger.verbose("\nArch [%s] is ignored because active platform supports [%s] but [%s] is specified !" - % (" ".join(SkippedArchList), " ".join(self.Platform.SupArchList), " ".join(self.ArchList))) - self.ArchList = tuple(ArchList) - - # Merge build target - if self.BuildTargetList == None or len(self.BuildTargetList) == 0: - BuildTargetList = self.Platform.BuildTargets - else: - BuildTargetList = list(set(self.BuildTargetList) & set(self.Platform.BuildTargets)) - if BuildTargetList == []: - EdkLogger.error("build", PARAMETER_INVALID, "Active platform only supports [%s], but [%s] is given" - % (" ".join(self.Platform.BuildTargets), " ".join(self.BuildTargetList))) - self.BuildTargetList = BuildTargetList - ## Build a module or platform # # Create autogen code and makefile for a module or platform, and the launch @@ -1000,7 +901,11 @@ class Build(): BuildCommand = AutoGenObject.BuildCommand if BuildCommand == None or len(BuildCommand) == 0: - EdkLogger.error("build", OPTION_MISSING, ExtraData="No MAKE command found for [%s, %s, %s]" % Key) + EdkLogger.error("build", OPTION_MISSING, + "No build command found for this module. " + "Please check your setting of %s_%s_%s_MAKE_PATH in Conf/tools_def.txt file." % + (AutoGenObject.BuildTarget, AutoGenObject.ToolChain, AutoGenObject.Arch), + ExtraData=str(AutoGenObject)) BuildCommand = BuildCommand + [Target] LaunchCommand(BuildCommand, AutoGenObject.MakeFileDir) @@ -1011,7 +916,7 @@ class Build(): # # First should close DB. # - self.Db.Close() + self.Db.Close() RemoveDirectory(gBuildCacheDir, True) except WindowsError, X: EdkLogger.error("build", FILE_DELETE_FAILURE, ExtraData=str(X)) @@ -1121,7 +1026,7 @@ class Build(): ## Collect MAP information of all FVs # def _CollectFvMapBuffer (self, MapBuffer, Wa, ModuleList): - if self.Fdf != '': + if self.Fdf: # First get the XIP base address for FV map file. GuidPattern = re.compile("[-a-fA-F0-9]+") GuidName = re.compile("\(GUID=[-a-fA-F0-9]+") @@ -1318,10 +1223,13 @@ class Build(): # def _BuildPlatform(self): for BuildTarget in self.BuildTargetList: + GlobalData.gGlobalDefines['TARGET'] = BuildTarget for ToolChain in self.ToolChainList: + GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain + GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain Wa = WorkspaceAutoGen( self.WorkspaceDir, - self.Platform, + self.PlatformFile, BuildTarget, ToolChain, self.ArchList, @@ -1335,18 +1243,21 @@ class Build(): self.SkuId, self.UniFlag ) + self.Fdf = Wa.FdfFile + self.LoadFixAddress = Wa.Platform.LoadFixAddress self.BuildReport.AddPlatformReport(Wa) self.Progress.Stop("done!") self._Build(self.Target, Wa) # Create MAP file when Load Fix Address is enabled. if self.Target in ["", "all", "fds"]: - for Arch in self.ArchList: + for Arch in Wa.ArchList: + GlobalData.gGlobalDefines['ARCH'] = Arch # # Check whether the set fix address is above 4G for 32bit image. # if (Arch == 'IA32' or Arch == 'ARM') and self.LoadFixAddress != 0xFFFFFFFFFFFFFFFF and self.LoadFixAddress >= 0x100000000: - EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS can't be set to larger than or equal to 4G for the platorm with IA32 or ARM arch modules") + EdkLogger.error("build", PARAMETER_INVALID, "FIX_LOAD_TOP_MEMORY_ADDRESS can't be set to larger than or equal to 4G for the platform with IA32 or ARM arch modules") # # Get Module List # @@ -1364,12 +1275,12 @@ class Build(): # Rebase module to the preferred memory address before GenFds # self._CollectModuleMapBuffer(MapBuffer, ModuleList) - if self.Fdf != '': + if self.Fdf: # # create FDS again for the updated EFI image # self._Build("fds", Wa) - if self.Fdf != '': + if self.Fdf: # # Create MAP file for all platform FVs after GenFds. # @@ -1383,14 +1294,17 @@ class Build(): # def _BuildModule(self): for BuildTarget in self.BuildTargetList: + GlobalData.gGlobalDefines['TARGET'] = BuildTarget for ToolChain in self.ToolChainList: + GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain + GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain # # module build needs platform build information, so get platform # AutoGen first # Wa = WorkspaceAutoGen( self.WorkspaceDir, - self.Platform, + self.PlatformFile, BuildTarget, ToolChain, self.ArchList, @@ -1404,10 +1318,13 @@ class Build(): self.SkuId, self.UniFlag ) + self.Fdf = Wa.FdfFile + self.LoadFixAddress = Wa.Platform.LoadFixAddress Wa.CreateMakeFile(False) self.Progress.Stop("done!") MaList = [] - for Arch in self.ArchList: + for Arch in Wa.ArchList: + GlobalData.gGlobalDefines['ARCH'] = Arch Ma = ModuleAutoGen(Wa, self.ModuleFile, BuildTarget, ToolChain, Arch, self.PlatformFile) if Ma == None: continue MaList.append(Ma) @@ -1421,12 +1338,12 @@ class Build(): "Module for [%s] is not a component of active platform."\ " Please make sure that the ARCH and inf file path are"\ " given in the same as in [%s]" %\ - (', '.join(self.ArchList), self.Platform), + (', '.join(Wa.ArchList), self.PlatformFile), ExtraData=self.ModuleFile ) # Create MAP file when Load Fix Address is enabled. - if self.Target == "fds" and self.Fdf != '': - for Arch in self.ArchList: + if self.Target == "fds" and self.Fdf: + for Arch in Wa.ArchList: # # Check whether the set fix address is above 4G for 32bit image. # @@ -1466,10 +1383,13 @@ class Build(): # def _MultiThreadBuildPlatform(self): for BuildTarget in self.BuildTargetList: + GlobalData.gGlobalDefines['TARGET'] = BuildTarget for ToolChain in self.ToolChainList: + GlobalData.gGlobalDefines['TOOLCHAIN'] = ToolChain + GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = ToolChain Wa = WorkspaceAutoGen( self.WorkspaceDir, - self.Platform, + self.PlatformFile, BuildTarget, ToolChain, self.ArchList, @@ -1483,13 +1403,16 @@ class Build(): self.SkuId, self.UniFlag ) + self.Fdf = Wa.FdfFile + self.LoadFixAddress = Wa.Platform.LoadFixAddress self.BuildReport.AddPlatformReport(Wa) Wa.CreateMakeFile(False) # multi-thread exit flag ExitFlag = threading.Event() ExitFlag.clear() - for Arch in self.ArchList: + for Arch in Wa.ArchList: + GlobalData.gGlobalDefines['ARCH'] = Arch Pa = PlatformAutoGen(Wa, self.PlatformFile, BuildTarget, ToolChain, Arch) if Pa == None: continue @@ -1546,7 +1469,7 @@ class Build(): # Create MAP file when Load Fix Address is enabled. if self.Target in ["", "all", "fds"]: - for Arch in self.ArchList: + for Arch in Wa.ArchList: # # Check whether the set fix address is above 4G for 32bit image. # @@ -1569,7 +1492,7 @@ class Build(): if self.LoadFixAddress != 0: self._CollectModuleMapBuffer(MapBuffer, ModuleList) - if self.Fdf != '': + if self.Fdf: # # Generate FD image if there's a FDF file found # @@ -1586,20 +1509,32 @@ class Build(): ## Generate GuidedSectionTools.txt in the FV directories. # def CreateGuidedSectionToolsFile(self): - for Arch in self.ArchList: - for BuildTarget in self.BuildTargetList: - for ToolChain in self.ToolChainList: - FvDir = os.path.join( - self.WorkspaceDir, - self.Platform.OutputDirectory, - '_'.join((BuildTarget, ToolChain)), - 'FV' - ) - if not os.path.exists(FvDir): - continue + for BuildTarget in self.BuildTargetList: + for ToolChain in self.ToolChainList: + Wa = WorkspaceAutoGen( + self.WorkspaceDir, + self.PlatformFile, + BuildTarget, + ToolChain, + self.ArchList, + self.BuildDatabase, + self.TargetTxt, + self.ToolDef, + self.Fdf, + self.FdList, + self.FvList, + self.CapList, + self.SkuId, + self.UniFlag + ) + FvDir = Wa.FvDir + if not os.path.exists(FvDir): + continue + + for Arch in self.ArchList: # Build up the list of supported architectures for this build prefix = '%s_%s_%s_' % (BuildTarget, ToolChain, Arch) - + # Look through the tool definitions for GUIDed tools guidAttribs = [] for (attrib, value) in self.ToolDef.ToolsDefTxtDictionary.iteritems(): @@ -1614,7 +1549,7 @@ class Build(): path = self.ToolDef.ToolsDefTxtDictionary[path] path = self.GetFullPathOfTool(path) guidAttribs.append((guid, toolName, path)) - + # Write out GuidedSecTools.txt toolsFile = os.path.join(FvDir, 'GuidedSectionTools.txt') toolsFile = open(toolsFile, 'wt') @@ -1642,7 +1577,7 @@ class Build(): ## Launch the module or platform build # def Launch(self): - if self.ModuleFile == None or self.ModuleFile == "": + if not self.ModuleFile: if not self.SpawnMode or self.Target not in ["", "all"]: self.SpawnMode = False self._BuildPlatform() @@ -1687,8 +1622,13 @@ def ParseDefines(DefineList=[]): if DefineList != None: for Define in DefineList: DefineTokenList = Define.split("=", 1) + if not GlobalData.gMacroNamePattern.match(DefineTokenList[0]): + EdkLogger.error('build', FORMAT_INVALID, + "The macro name must be in the pattern [A-Z][A-Z0-9_]*", + ExtraData=DefineTokenList[0]) + if len(DefineTokenList) == 1: - DefineDict[DefineTokenList[0]] = "" + DefineDict[DefineTokenList[0]] = "TRUE" else: DefineDict[DefineTokenList[0]] = DefineTokenList[1].strip() return DefineDict @@ -1737,10 +1677,7 @@ def MyOptionParser(): Parser.add_option("-u", "--skip-autogen", action="store_true", dest="SkipAutoGen", help="Skip AutoGen step.") Parser.add_option("-e", "--re-parse", action="store_true", dest="Reparse", help="Re-parse all meta-data files.") - Parser.add_option("-c", "--case-insensitive", action="store_true", dest="CaseInsensitive", help="Don't check case of file name.") - - # Parser.add_option("-D", "--define", action="append", dest="Defines", metavar="NAME[=[VALUE]]", - # help="Define global macro which can be used in DSC/DEC/INF files.") + Parser.add_option("-c", "--case-insensitive", action="store_true", dest="CaseInsensitive", default=False, help="Don't check case of file name.") Parser.add_option("-w", "--warning-as-error", action="store_true", dest="WarningAsError", help="Treat warning in tools as error.") Parser.add_option("-j", "--log", action="store", dest="LogFile", help="Put log in specified file as well as on console.") @@ -1762,6 +1699,7 @@ def MyOptionParser(): help="Specify the specific option to parse EDK UNI file. Must be one of: [-c, -s]. -c is for EDK framework UNI file, and -s is for EDK UEFI UNI file. "\ "This option can also be specified by setting *_*_*_BUILD_FLAGS in [BuildOptions] section of platform DSC. If they are both specified, this value "\ "will override the setting in [BuildOptions] section of platform DSC.") + Parser.add_option("-N", "--no-cache", action="store_true", dest="DisableCache", default=False, help="Disable build cache mechanism") (Opt, Args)=Parser.parse_args() return (Opt, Args) @@ -1826,11 +1764,12 @@ def Main(): EdkLogger.error("build", OPTION_NOT_SUPPORTED, "Not supported target [%s]." % Target, ExtraData="Please select one of: %s" %(' '.join(gSupportedTarget))) - GlobalData.gGlobalDefines = ParseDefines(Option.Macros) # # Check environment variable: EDK_TOOLS_PATH, WORKSPACE, PATH # CheckEnvVariable() + GlobalData.gCommandLineDefines.update(ParseDefines(Option.Macros)) + Workspace = os.getenv("WORKSPACE") # # Get files real name in workspace dir @@ -1861,9 +1800,6 @@ def Main(): if os.path.normcase (os.path.normpath(Option.PlatformFile)).find (Workspace) == 0: Option.PlatformFile = NormFile(os.path.normpath(Option.PlatformFile), Workspace) Option.PlatformFile = PathClass(Option.PlatformFile, Workspace) - ErrorCode, ErrorInfo = Option.PlatformFile.Validate(".dsc", False) - if ErrorCode != 0: - EdkLogger.error("build", ErrorCode, ExtraData=ErrorInfo) if Option.FdfFile != None: if os.path.isabs (Option.FdfFile): @@ -1877,12 +1813,7 @@ def Main(): if Option.Flag != None and Option.Flag not in ['-c', '-s']: EdkLogger.error("build", OPTION_VALUE_INVALID, "UNI flag must be one of -c or -s") - MyBuild = Build(Target, Workspace, Option.PlatformFile, Option.ModuleFile, - Option.TargetArch, Option.ToolChain, Option.BuildTarget, - Option.FdfFile, Option.RomImage, Option.FvImage, Option.CapName, - None, Option.SilentMode, Option.ThreadNumber, - Option.SkipAutoGen, Option.Reparse, Option.SkuId, - Option.ReportFile, Option.ReportType, Option.Flag) + MyBuild = Build(Target, Workspace, Option) MyBuild.Launch() #MyBuild.DumpBuildData() except FatalError, X: @@ -1925,7 +1856,8 @@ def Main(): ExtraData="\n(Please send email to edk2-buildtools-devel@lists.sourceforge.net for help, attaching following call stack trace!)\n", RaiseError=False ) - EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) + if Option != None and Option.debug != None: + EdkLogger.quiet("(Python %s on %s) " % (platform.python_version(), sys.platform) + traceback.format_exc()) ReturnCode = CODE_ERROR finally: Utils.Progressor.Abort() diff --git a/BaseTools/UserManuals/Intel_UEFI_Packaging_Tool_Man_Page.rtf b/BaseTools/UserManuals/Intel_UEFI_Packaging_Tool_Man_Page.rtf index 2a645811fa..e479261a1d 100644 --- a/BaseTools/UserManuals/Intel_UEFI_Packaging_Tool_Man_Page.rtf +++ b/BaseTools/UserManuals/Intel_UEFI_Packaging_Tool_Man_Page.rtf @@ -53,13 +53,13 @@ annotation reference;}{\s18\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0 \levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-420\li2940\lin2940 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0 \levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'07);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-420\li3360\lin3360 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1 \lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-420\li3780\lin3780 }{\listname ;}\listid940380088}}{\*\listoverridetable{\listoverride\listid940380088 -\listoverridecount0\ls1}}{\*\revtbl {Unknown;}{lhauch;}}{\*\rsidtbl \rsid91813\rsid396487\rsid483735\rsid552779\rsid655454\rsid685363\rsid805008\rsid1009867\rsid1050478\rsid1054871\rsid1064894\rsid1536027\rsid1734833\rsid1924533\rsid2172204\rsid2383780\rsid2490530\rsid2562233 -\rsid2574604\rsid2707436\rsid2819890\rsid3217417\rsid3356758\rsid3687826\rsid3947812\rsid3958709\rsid4003508\rsid4412180\rsid4472091\rsid4527705\rsid4868941\rsid5134899\rsid5203345\rsid5310607\rsid5464326\rsid5852719\rsid6362790\rsid7164825\rsid7174505 -\rsid7424010\rsid7609983\rsid7997214\rsid8276687\rsid8812445\rsid8814479\rsid8943713\rsid9138298\rsid9446431\rsid9901089\rsid9964275\rsid10190081\rsid10246519\rsid10316983\rsid10440781\rsid10490922\rsid10891364\rsid10963834\rsid11147893\rsid11365531 -\rsid11761618\rsid12071700\rsid12143623\rsid12200614\rsid12483726\rsid12718714\rsid12721085\rsid12721903\rsid12803398\rsid12810495\rsid12914083\rsid13187009\rsid13379505\rsid13771663\rsid13849670\rsid14181487\rsid14245224\rsid14292565\rsid14313265 -\rsid15022072\rsid15164179\rsid15283407\rsid15421225\rsid15548121\rsid15563257\rsid15625864\rsid15803579\rsid15860657\rsid16128153\rsid16193110\rsid16255980\rsid16453629\rsid16464444\rsid16524051}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0 -\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kgui1}{\operator lhauch}{\creatim\yr2011\mo7\dy1\hr9\min12}{\revtim\yr2011\mo7\dy1\hr9\min12}{\version2}{\edmins22}{\nofpages8}{\nofwords2241}{\nofchars12776} -{\*\company Intel Corporation}{\nofcharsws14988}{\vern49255}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect +\listoverridecount0\ls1}}{\*\revtbl {Unknown;}{lhauch;}}{\*\rsidtbl \rsid1799\rsid91813\rsid396487\rsid483735\rsid552779\rsid655454\rsid685363\rsid805008\rsid1009867\rsid1050478\rsid1054871\rsid1064894\rsid1536027\rsid1734833\rsid1924533\rsid2172204\rsid2383780\rsid2490530 +\rsid2562233\rsid2574604\rsid2707436\rsid2819890\rsid3217417\rsid3356758\rsid3687826\rsid3947812\rsid3958709\rsid4003508\rsid4355979\rsid4412180\rsid4472091\rsid4527705\rsid4868941\rsid5134899\rsid5203345\rsid5310607\rsid5464326\rsid5852719\rsid6362790 +\rsid7164825\rsid7174505\rsid7424010\rsid7609983\rsid7997214\rsid8276687\rsid8812445\rsid8814479\rsid8943713\rsid9138298\rsid9446431\rsid9901089\rsid9964275\rsid10190081\rsid10246519\rsid10316983\rsid10440781\rsid10490922\rsid10891364\rsid10963834 +\rsid11147893\rsid11365531\rsid11761618\rsid12071700\rsid12143623\rsid12200614\rsid12483726\rsid12718714\rsid12721085\rsid12721903\rsid12803398\rsid12810495\rsid12914083\rsid13187009\rsid13379505\rsid13771663\rsid13849670\rsid14181487\rsid14245224 +\rsid14313265\rsid15022072\rsid15164179\rsid15283407\rsid15421225\rsid15548121\rsid15563257\rsid15625864\rsid15803579\rsid15860657\rsid16128153\rsid16193110\rsid16255980\rsid16453629\rsid16464444\rsid16524051}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0 +\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kgui1}{\operator lhauch}{\creatim\yr2011\mo7\dy1\hr9\min12}{\revtim\yr2011\mo7\dy1\hr9\min12}{\version2}{\edmins0}{\nofpages8}{\nofwords2241} +{\nofchars12776}{\*\company Intel Corporation}{\nofcharsws14988}{\vern49255}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect \deftab360\widowctrl\ftnbj\aenddoc\revisions\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 \dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot2707436 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} {\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} @@ -417,12 +417,11 @@ When installing a UEFI Distribution Package generated by other tools that allow \hich\af39\dbch\af31505\loch\f39 Empty_Package_Information_Data_File.ini \par \hich\af39\dbch\af31505\loch\f39 Linux & OS/X: $(WORKSPACE)/BaseTools/Conf/Empty_Package_Information_Data_File.ini}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid9138298 \par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9138298 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Intel\'ae\loch\f39 \hich\f39 UEFI Packaging Tool (Intel\'ae\loch\f39 UEFIPT\hich\af39\dbch\af31505\loch\f39 ) Quick Start guide (} -{\field{\*\fldinst {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm-1493759412\insrsid14292565 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "../../../Tools/UEFI_PackagingTool/UserDocs/www.tianocore.org"}{\rtlch\fcs1 \af39\afs18 -\ltrch\fcs0 \deleted\fs18\cf1\revauthdel1\revdttmdel-1493759412\insrsid9138298\delrsid14292565 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "www.tianocore.org"}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 -\fs18\cf1\revised\revauth1\revdttm-1493759412\insrsid14292565 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000001000000e0c9ea79f9bace118c8200aa004ba90b920000002e002e002f002e002e002f002e002e002f0054006f006f006c0073002f0055004500460049005f005000610063006b006100670069006e00670054006f006f006c002f00550073006500720044006f006300 -73002f007700770077002e007400690061006e006f0063006f00720065002e006f00720067000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\ul\cf2\insrsid9138298 \hich\af39\dbch\af31505\loch\f39 -www.tianocore.org}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9138298 \hich\af39\dbch\af31505\loch\f39 , edk2/Documents) +{\field{\*\fldinst {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm-1493759412\insrsid1799 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "../../BaseTools_r2100/UserManuals/www.tianocore.org"}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 +\deleted\fs18\cf1\revauthdel1\revdttmdel-1493759412\insrsid9138298\delrsid1799 \hich\af39\dbch\af31505\loch\f39 HYPERLINK "www.tianocore.org"}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\revised\revauth1\revdttm-1493759412\insrsid1799 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000001000000e0c9ea79f9bace118c8200aa004ba90b800000002e002e002f002e002e002f00420061007300650054006f006f006c0073005f00720032003100300030002f0055007300650072004d0061006e00750061006c0073002f007700770077002e00740069006100 +6e006f0063006f00720065002e006f00720067000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\ul\cf2\insrsid9138298 \hich\af39\dbch\af31505\loch\f39 www.tianocore.org}}}\sectd \ltrsect +\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid9138298 \hich\af39\dbch\af31505\loch\f39 , edk2/Documents) \par \hich\af39\dbch\af31505\loch\f39 The Distribution Package (.dist) for install and create, along with the Package Infor\hich\af39\dbch\af31505\loch\f39 mation Data File (.ini) are not required to be in the EDK II WORKSPACE. All other files are required to be in the directory tree pointed to by the system environment variable: WORKSPACE. (The Distribution Package file name used during removal is in the $( \hich\af39\dbch\af31505\loch\f39 W\hich\af39\dbch\af31505\loch\f39 ORKSPACE)/Conf directory tree, placed there during package installation by the tool.) @@ -552,8 +551,8 @@ fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000008055 -a1ab0938cc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000006032 +b4b80938cc01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/BaseTools/UserManuals/Trim_Utility_Man_Page.rtf b/BaseTools/UserManuals/Trim_Utility_Man_Page.rtf index f60564619a..7548e1b210 100644 --- a/BaseTools/UserManuals/Trim_Utility_Man_Page.rtf +++ b/BaseTools/UserManuals/Trim_Utility_Man_Page.rtf @@ -1,8 +1,8 @@ {\rtf1\adeflang1025\ansi\ansicpg936\uc2\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};} {\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f38\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;} -{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana{\*\falt Verdana};}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@\'cb\'ce\'cc\'e5;} -{\f41\fbidi \fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Verdana{\*\falt Verdana};}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@\'cb\'ce\'cc\'e5;} +{\f41\fbidi \fmodern\fcharset0\fprq1{\*\panose 020b0609020204030204}Consolas;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt SimSun};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} @@ -53,9 +53,9 @@ \brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 -\sbasedon11 \snext21 \spriority59 \styrsid8347714 Table Grid;}}{\*\revtbl {Unknown;}{yzeng15;}}{\*\rsidtbl \rsid2436965\rsid3155658\rsid4999604\rsid5138063\rsid5911148\rsid6037602\rsid6643493\rsid6907013\rsid8089322\rsid8347714\rsid8600807\rsid8606769\rsid8651272\rsid14103422 -\rsid15752598}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator yzeng15}{\creatim\yr2010\mo10\dy6\hr17\min15}{\revtim\yr2011\mo9\dy8\hr13\min45}{\version11} -{\edmins10}{\nofpages3}{\nofwords668}{\nofchars3492}{\nofcharsws4152}{\vern32771}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\sbasedon11 \snext21 \spriority59 \styrsid8347714 Table Grid;}}{\*\revtbl {Unknown;}{yzeng15;}}{\*\rsidtbl \rsid2436965\rsid3155658\rsid4999604\rsid5138063\rsid5911148\rsid6037602\rsid6643493\rsid6907013\rsid8089322\rsid8347714\rsid8412573\rsid8600807\rsid8606769\rsid8651272 +\rsid14103422\rsid16001458}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator yzeng15}{\creatim\yr2010\mo10\dy6\hr17\min15}{\revtim\yr2011\mo9\dy8\hr12\min14} +{\version13}{\edmins11}{\nofpages3}{\nofwords668}{\nofchars3492}{\nofcharsws4152}{\vern32771}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \deftab360\ftnbj\aenddoc\revisions\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 \dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale135\rsidroot6643493 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \dbch )}}{\*\pnseclvl5 @@ -69,7 +69,7 @@ \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\tx1440\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Synopsis \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs18 -\ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 trim [-s|-r|-a|-8] [-c] [-v|-d |-q] [-o ] +\ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 trim [-s|-r|\hich\af39\dbch\af31505\loch\f39 -a|-8] [-c] [-v|-d |-q] [-o ] \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3155658 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\lang1033\langfe2052\langfenp2052\insrsid3155658 \hich\af39\dbch\af31505\loch\f39 trim \hich\f39 \endash \loch\f39 h \par \hich\af39\dbch\af31505\loch\f39 trim --version}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe2052\langfenp2052\insrsid3155658\charrsid8089322 @@ -80,20 +80,20 @@ \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Trim tool }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 process}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 the preprocessed file by}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 a}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Compiler to remove the unused content }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 and }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -generate the file to be processed further by EDKII t\hich\af39\dbch\af31505\loch\f39 ools.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 -\par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Trim tool can also be used generate the expected source file to work with EDKII build system and EDKII core code}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 . It extends the EDKII build system to support more source file types.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 +generate the file to be processed further by EDKII tools.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 +\par }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Trim t\hich\af39\dbch\af31505\loch\f39 ool can also be used generate the expected source file to work with EDKII build system and EDKII core code}{\rtlch\fcs1 +\af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 . It extends the EDKII build system to support more source file types.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 \par \par }\pard\plain \ltrpar\s2\ql \li-1440\ri0\sb400\sa60\sl-340\slmult0\keep\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin-1440\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs28 \ltrch\fcs0 \b\fs28\cf17\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Options \par }\pard\plain \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af39\hich\af39\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 input_file -\par \tab }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file may be the preprocessed source \hich\af39\dbch\af31505\loch\f39 code, the preprocessed VFR file, ASL file or R8 framework source file.}{ +\par \tab }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file may be the preprocessed source code, the pr\hich\af39\dbch\af31505\loch\f39 eprocessed VFR file, ASL file or R8 framework source file.}{ \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 \par }{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -s, --source-code \par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file is}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 a }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -preprocessed source code, including C or assembly code. All generated codes from the include header files are remove all. Only content in sour\hich\af39\dbch\af31505\loch\f39 ce file is kept.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 +preprocessed source code, including C or assembly code. All generated codes from the include header files are remove all. Only content in source file is k\hich\af39\dbch\af31505\loch\f39 ept.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -r, --vfr-file \par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file is }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 @@ -101,17 +101,19 @@ preprocessed source code, including C or assembly code. All generated codes from \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -a, --asl-file \par }\pard \ltrpar\ql \fi360\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file is }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 -\fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 an }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 ASL file. The asl source include s\hich\af39\dbch\af31505\loch\f39 -tyle Include(*.asi) will be changed to C style #include *.asi. The preprocessed asl file can be preprocessed by C compiler. }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 +\fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 an }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 ASL file. The asl source include style Include\hich\af39\dbch\af31505\loch\f39 +(*.asi) will be changed to C style #include *.asi. The preprocessed asl file can be preprocessed by C compiler. }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -8, --}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 -\b\deleted\fs18\cf1\revauthdel1\revdttmdel-2030484627\insrsid6643493\delrsid15752598 \hich\af39\dbch\af31505\loch\f39 r8}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 -\b\fs18\cf1\revised\lang1033\langfe2052\revauth1\revdttm-2030484627\langfenp2052\insrsid15752598 \hich\af39\dbch\af31505\loch\f39 Edk}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -source-code +\b\deleted\fs18\cf1\revauthdel1\revdttmdel-2030484795\insrsid6643493\delrsid8412573 \hich\af39\dbch\af31505\loch\f39 r8}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 +\b\fs18\cf1\revised\lang1033\langfe2052\revauth1\revdttm-2030484795\langfenp2052\insrsid8412573 \hich\af39\dbch\af31505\loch\f39 E}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 +\b\fs18\cf1\revised\lang1033\langfe2052\revauth1\revdttm-2030484722\langfenp2052\insrsid16001458 \hich\af39\dbch\af31505\loch\f39 dk}{\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -source-code \par }\pard \ltrpar\ql \li360\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The input file is the EDK style source code to be trimmed for ECP platform. Some EDK framework source file w\hich\af39\dbch\af31505\loch\f39 \hich\f39 ill be modified to work with EDKII thunk and core drivers. A window script tool \'93\loch\f39 \hich\f39 ImportTool.bat\'94\loch\f39 is created to process a group of EDK framework source files in the same file directory. }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6643493 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -c, --convert-hex \par }\pard \ltrpar\ql \fi360\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 Convert}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 -\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 standard hex format (0xabcd) to MASM format (abcdh).}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 +\hich\af39\dbch\af31505\loch\f39 s}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 standard hex format (0xabcd) to MASM f\hich\af39\dbch\af31505\loch\f39 ormat (abcdh).}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 +\f0\fs18\cf1\insrsid6643493 \par }\pard \ltrpar\ql \li0\ri0\sb200\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39\afs18 \ltrch\fcs0 \b\fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 -o OUTPUTFILE, --output=OUTPUTFILE \par }\pard \ltrpar\ql \fi360\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 The output file }{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid14103422 \hich\af39\dbch\af31505\loch\f39 stores}{\rtlch\fcs1 \af39\afs18 \ltrch\fcs0 \fs18\cf1\insrsid6643493 \hich\af39\dbch\af31505\loch\f39 the trimmed content.}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \f0\fs18\cf1\insrsid6643493 @@ -318,18 +320,18 @@ fffffffffffffffffdffffff04000000feffffff05000000fefffffffeffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff01000000ec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000804b -5694ea6dcc010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff020000000000000000000000000000000000000000000000804b5694ea6dcc01 -804b5694ea6dcc01000000000000000000000000d40058004200d0004600da00df00530043004500c2004300c000d50051003000dc005600d400d800d80051003d003d000000000000000000000000000000000032000101ffffffffffffffff030000000000000000000000000000000000000000000000804b5694ea6d -cc01804b5694ea6dcc010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffff01000000ec69d9888b8b3d4c859eaf6cd158be0f00000000000000000000000060c7 +dccddd6dcc010300000080020000000000004d0073006f004400610074006100530074006f0072006500000000000000000000000000000000000000000000000000000000000000000000000000000000001a000101ffffffffffffffff02000000000000000000000000000000000000000000000060c7dccddd6dcc01 +60c7dccddd6dcc010000000000000000000000005500c500c2003500c0005500c60054004b00d400ca0042004b00c1004c00d400db004d00c5003000d400d0003d003d000000000000000000000000000000000032000101ffffffffffffffff03000000000000000000000000000000000000000000000060c7dccddd6d +cc0160c7dccddd6dcc010000000000000000000000004900740065006d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000201ffffffff04000000ffffffff000000000000000000000000000000000000000000000000 00000000000000000000000000000000da00000000000000010000000200000003000000feffffff0500000006000000070000000800000009000000feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c623a536f75726365732053656c65637465645374796c653d225c4150412e58534c22205374796c654e616d653d224150412220786d6c6e733a623d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f7267 2f6f6666696365446f63756d656e742f323030362f6269626c696f6772617068792220786d6c6e733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f6269626c696f677261706879223e3c2f623a536f75726365733e0d0a0000 -0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b31373730 -373044312d443241462d343830382d383238332d3534314146313544333845317d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c +0000000000000000000000000000000000000000000000000000000000000000000000003c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d226e6f223f3e0d0a3c64733a6461746173746f72654974656d2064733a6974656d49443d227b38313946 +353835322d393334392d344132422d383132412d3132463445434339354144337d2220786d6c6e733a64733d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f6f6666696365446f63756d656e742f323030362f637573746f6d586d6c223e3c64733a736368656d61526566733e3c 64733a736368656d615265662064733a7572693d22687474703a2f2f736368656d61732e6f70656e500072006f007000650072007400690065007300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000200ffffffffffffffffffffffff000000000000 0000000000000000000000000000000000000000000000000000000000000400000055010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000 -- 2.39.2