[edk2-devel] [PATCH] [edk2-basetools]GenCrc32:Convert the C tool of calculating the crc32 into a python tool

liwenzha wenzhao1.li at intel.com
Thu Sep 1 07:10:17 UTC 2022


description

This patch converts the C tool of calculating the crc32 value of file into

a python file. To realize this,after reading the data into the file in

binary form from an original file,a lookup table is listed to do XOR and

shifting calculation for each bit in the file.The 32-bit result is placed

at the beginning of the file as the header.The verification part will

recalculate the crc32 value of the data behind the header again.When header

is equal to the recalculating result,which means the crc32 value of this file

is correct and the file is valid.In the unit testing part,some files which

have been preprocessed by C tool are placed in a folder.The file after processing

by python tool will be compared with these files to check whether the result is correct.

Cc: Bob Feng <bob.c.feng at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Signed-off-by: Yuwei Chen <yuwei.chen at intel.com>

---
 edk2basetools/GenCrc32/GenCrc32.py            | 373 ++++++++++++++++++
 edk2basetools/GenCrc32/__init__.py            |  10 +
 edk2basetools/tests/GenCrc32/decode/PcdPeim   | Bin 0 -> 18912 bytes
 .../tests/GenCrc32/decode/PcdPeim_crc32       | Bin 0 -> 18916 bytes
 .../tests/GenCrc32/decode/S3Resume2Pei        | Bin 0 -> 18272 bytes
 .../tests/GenCrc32/decode/S3Resume2Pei_crc32  | Bin 0 -> 18276 bytes
 edk2basetools/tests/GenCrc32/decode/demo      |   1 +
 edk2basetools/tests/GenCrc32/decode/demo_crc  |   1 +
 .../tests/GenCrc32/encode/PcdPeim.efi         | Bin 0 -> 18912 bytes
 .../tests/GenCrc32/encode/PcdPeim_crc32       | Bin 0 -> 18916 bytes
 .../tests/GenCrc32/encode/S3Resume2Pei.efi    | Bin 0 -> 18272 bytes
 .../tests/GenCrc32/encode/S3Resume2Pei_crc32  | Bin 0 -> 18276 bytes
 edk2basetools/tests/GenCrc32/encode/demo.bin  |   1 +
 edk2basetools/tests/GenCrc32/encode/demo_crc  |   1 +
 edk2basetools/tests/GenCrc32/test_gencrc32.py | 124 ++++++
 15 files changed, 511 insertions(+)
 create mode 100644 edk2basetools/GenCrc32/GenCrc32.py
 create mode 100644 edk2basetools/GenCrc32/__init__.py
 create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim
 create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32
 create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei
 create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32
 create mode 100644 edk2basetools/tests/GenCrc32/decode/demo
 create mode 100644 edk2basetools/tests/GenCrc32/decode/demo_crc
 create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim.efi
 create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32
 create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi
 create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32
 create mode 100644 edk2basetools/tests/GenCrc32/encode/demo.bin
 create mode 100644 edk2basetools/tests/GenCrc32/encode/demo_crc
 create mode 100644 edk2basetools/tests/GenCrc32/test_gencrc32.py

diff --git a/edk2basetools/GenCrc32/GenCrc32.py b/edk2basetools/GenCrc32/GenCrc32.py
new file mode 100644
index 0000000..e27e4b0
--- /dev/null
+++ b/edk2basetools/GenCrc32/GenCrc32.py
@@ -0,0 +1,373 @@
+#@file
+#Calculate Crc32 value and Verify Crc32 value for input data.
+#
+#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+#SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+#
+#Import Modules
+#
+import io
+import logging
+import argparse
+import os
+import sys
+
+mCrcTable=[0x00000000,
+  0x77073096,
+  0xEE0E612C,
+  0x990951BA,
+  0x076DC419,
+  0x706AF48F,
+  0xE963A535,
+  0x9E6495A3,
+  0x0EDB8832,
+  0x79DCB8A4,
+  0xE0D5E91E,
+  0x97D2D988,
+  0x09B64C2B,
+  0x7EB17CBD,
+  0xE7B82D07,
+  0x90BF1D91,
+  0x1DB71064,
+  0x6AB020F2,
+  0xF3B97148,
+  0x84BE41DE,
+  0x1ADAD47D,
+  0x6DDDE4EB,
+  0xF4D4B551,
+  0x83D385C7,
+  0x136C9856,
+  0x646BA8C0,
+  0xFD62F97A,
+  0x8A65C9EC,
+  0x14015C4F,
+  0x63066CD9,
+  0xFA0F3D63,
+  0x8D080DF5,
+  0x3B6E20C8,
+  0x4C69105E,
+  0xD56041E4,
+  0xA2677172,
+  0x3C03E4D1,
+  0x4B04D447,
+  0xD20D85FD,
+  0xA50AB56B,
+  0x35B5A8FA,
+  0x42B2986C,
+  0xDBBBC9D6,
+  0xACBCF940,
+  0x32D86CE3,
+  0x45DF5C75,
+  0xDCD60DCF,
+  0xABD13D59,
+  0x26D930AC,
+  0x51DE003A,
+  0xC8D75180,
+  0xBFD06116,
+  0x21B4F4B5,
+  0x56B3C423,
+  0xCFBA9599,
+  0xB8BDA50F,
+  0x2802B89E,
+  0x5F058808,
+  0xC60CD9B2,
+  0xB10BE924,
+  0x2F6F7C87,
+  0x58684C11,
+  0xC1611DAB,
+  0xB6662D3D,
+  0x76DC4190,
+  0x01DB7106,
+  0x98D220BC,
+  0xEFD5102A,
+  0x71B18589,
+  0x06B6B51F,
+  0x9FBFE4A5,
+  0xE8B8D433,
+  0x7807C9A2,
+  0x0F00F934,
+  0x9609A88E,
+  0xE10E9818,
+  0x7F6A0DBB,
+  0x086D3D2D,
+  0x91646C97,
+  0xE6635C01,
+  0x6B6B51F4,
+  0x1C6C6162,
+  0x856530D8,
+  0xF262004E,
+  0x6C0695ED,
+  0x1B01A57B,
+  0x8208F4C1,
+  0xF50FC457,
+  0x65B0D9C6,
+  0x12B7E950,
+  0x8BBEB8EA,
+  0xFCB9887C,
+  0x62DD1DDF,
+  0x15DA2D49,
+  0x8CD37CF3,
+  0xFBD44C65,
+  0x4DB26158,
+  0x3AB551CE,
+  0xA3BC0074,
+  0xD4BB30E2,
+  0x4ADFA541,
+  0x3DD895D7,
+  0xA4D1C46D,
+  0xD3D6F4FB,
+  0x4369E96A,
+  0x346ED9FC,
+  0xAD678846,
+  0xDA60B8D0,
+  0x44042D73,
+  0x33031DE5,
+  0xAA0A4C5F,
+  0xDD0D7CC9,
+  0x5005713C,
+  0x270241AA,
+  0xBE0B1010,
+  0xC90C2086,
+  0x5768B525,
+  0x206F85B3,
+  0xB966D409,
+  0xCE61E49F,
+  0x5EDEF90E,
+  0x29D9C998,
+  0xB0D09822,
+  0xC7D7A8B4,
+  0x59B33D17,
+  0x2EB40D81,
+  0xB7BD5C3B,
+  0xC0BA6CAD,
+  0xEDB88320,
+  0x9ABFB3B6,
+  0x03B6E20C,
+  0x74B1D29A,
+  0xEAD54739,
+  0x9DD277AF,
+  0x04DB2615,
+  0x73DC1683,
+  0xE3630B12,
+  0x94643B84,
+  0x0D6D6A3E,
+  0x7A6A5AA8,
+  0xE40ECF0B,
+  0x9309FF9D,
+  0x0A00AE27,
+  0x7D079EB1,
+  0xF00F9344,
+  0x8708A3D2,
+  0x1E01F268,
+  0x6906C2FE,
+  0xF762575D,
+  0x806567CB,
+  0x196C3671,
+  0x6E6B06E7,
+  0xFED41B76,
+  0x89D32BE0,
+  0x10DA7A5A,
+  0x67DD4ACC,
+  0xF9B9DF6F,
+  0x8EBEEFF9,
+  0x17B7BE43,
+  0x60B08ED5,
+  0xD6D6A3E8,
+  0xA1D1937E,
+  0x38D8C2C4,
+  0x4FDFF252,
+  0xD1BB67F1,
+  0xA6BC5767,
+  0x3FB506DD,
+  0x48B2364B,
+  0xD80D2BDA,
+  0xAF0A1B4C,
+  0x36034AF6,
+  0x41047A60,
+  0xDF60EFC3,
+  0xA867DF55,
+  0x316E8EEF,
+  0x4669BE79,
+  0xCB61B38C,
+  0xBC66831A,
+  0x256FD2A0,
+  0x5268E236,
+  0xCC0C7795,
+  0xBB0B4703,
+  0x220216B9,
+  0x5505262F,
+  0xC5BA3BBE,
+  0xB2BD0B28,
+  0x2BB45A92,
+  0x5CB36A04,
+  0xC2D7FFA7,
+  0xB5D0CF31,
+  0x2CD99E8B,
+  0x5BDEAE1D,
+  0x9B64C2B0,
+  0xEC63F226,
+  0x756AA39C,
+  0x026D930A,
+  0x9C0906A9,
+  0xEB0E363F,
+  0x72076785,
+  0x05005713,
+  0x95BF4A82,
+  0xE2B87A14,
+  0x7BB12BAE,
+  0x0CB61B38,
+  0x92D28E9B,
+  0xE5D5BE0D,
+  0x7CDCEFB7,
+  0x0BDBDF21,
+  0x86D3D2D4,
+  0xF1D4E242,
+  0x68DDB3F8,
+  0x1FDA836E,
+  0x81BE16CD,
+  0xF6B9265B,
+  0x6FB077E1,
+  0x18B74777,
+  0x88085AE6,
+  0xFF0F6A70,
+  0x66063BCA,
+  0x11010B5C,
+  0x8F659EFF,
+  0xF862AE69,
+  0x616BFFD3,
+  0x166CCF45,
+  0xA00AE278,
+  0xD70DD2EE,
+  0x4E048354,
+  0x3903B3C2,
+  0xA7672661,
+  0xD06016F7,
+  0x4969474D,
+  0x3E6E77DB,
+  0xAED16A4A,
+  0xD9D65ADC,
+  0x40DF0B66,
+  0x37D83BF0,
+  0xA9BCAE53,
+  0xDEBB9EC5,
+  0x47B2CF7F,
+  0x30B5FFE9,
+  0xBDBDF21C,
+  0xCABAC28A,
+  0x53B39330,
+  0x24B4A3A6,
+  0xBAD03605,
+  0xCDD70693,
+  0x54DE5729,
+  0x23D967BF,
+  0xB3667A2E,
+  0xC4614AB8,
+  0x5D681B02,
+  0x2A6F2B94,
+  0xB40BBE37,
+  0xC30C8EA1,
+  0x5A05DF1B,
+  0x2D02EF8D]
+
+
+parser=argparse.ArgumentParser(description='''
+Calculate Crc32 value and Verify Crc32 value for input data.
+''')
+parser.add_argument("-e","--encode",dest="inputfilename1",
+                    help="Calculate andverify CRC32 value for the input file.")
+parser.add_argument("-d","--decode",dest="inputfilename2",
+                    help="Verify CRC32 value for the input file.")
+parser.add_argument("-o","--output",dest="outputfilename",
+                    help="Output file name.")
+parser.add_argument("-s","--silent",help="Returns only the exit code;informational and error messages are not displayed.")                   
+parser.add_argument("--version", action="version", version='%(prog)s Version 2.0',
+                    help="Show program's version number and exit.")
+
+group=parser.add_mutually_exclusive_group()
+group.add_argument("-v","--verbose",action="store_true",
+                    help="Print information statements")
+group.add_argument("-q","--quiet",action="store_true",
+                    help="Disable all messages except fatal errors")
+
+
+
+#Calculate the Crc32 and store it in the file
+def CalculateCrc32(inputfile:str, outputfile:str, filebytes=b''):
+    logger=logging.getLogger('GenCrC32')
+    status=0
+    try:
+        Crc=0xffffffff
+        if filebytes != b'':
+            temp = filebytes
+            status=1
+        else:
+            with open(inputfile,'rb') as fin:             
+                temp=fin.read()
+                
+        DataSize = len(temp)
+        for Index in range(DataSize):                 
+            Crc=(Crc>>8)^mCrcTable[(Crc&0xff)^temp[Index]]
+        CrcOut=Crc^0xffffffff
+        CrcOut=CrcOut.to_bytes(4,byteorder="little")
+        with open(outputfile,'wb') as fout:        
+            if status==0:
+                fout.write(CrcOut)
+            fout.write(temp)
+    except Exception as e:
+        logger.error("Calculation failed!")
+        raise(e)
+    return CrcOut
+
+
+#Verify the CRC and checkout if the file is correct
+def VerifyCrc32(inputfile1:str,outputfile1:str):
+    logger=logging.getLogger('GenCrC32')
+    try:
+        with open(inputfile1,'rb') as fin3:
+            head=fin3.read()
+            header=head[0:4]
+            calres=CalculateCrc32('', outputfile1, head[4:])
+
+        if calres==header:
+            return calres
+        else:
+            logger.error("Invalid file!")
+            raise(e)
+    
+    except Exception as e:
+        logger.error("Verification failed!")
+        raise(e)
+
+
+def main():
+    args=parser.parse_args()
+
+    logger=logging.getLogger('GenCrc32')
+    if args.quiet:
+        logger.setLevel(logging.CRITICAL)
+    if args.verbose:
+        logger.setLevel(logging.DEBUG)
+    lh = logging.StreamHandler(sys.stdout)
+    lf = logging.Formatter("%(levelname)-8s: %(message)s")
+    lh.setFormatter(lf)
+    logger.addHandler(lh)
+
+    try:
+        if len(sys.argv)==1:
+            parser.print_help()
+            logger.error("Missing options")
+            raise(e)
+        if args.inputfilename1:
+            CalculateCrc32(args.inputfilename1,args.outputfilename)
+        elif args.inputfilename2:
+            VerifyCrc32(args.inputfilename2,args.outputfilename)
+    except Exception as e:
+        return 1
+    return 0
+
+
+if __name__=="__main__":
+    exit(main())
\ No newline at end of file
diff --git a/edk2basetools/GenCrc32/__init__.py b/edk2basetools/GenCrc32/__init__.py
new file mode 100644
index 0000000..b35de32
--- /dev/null
+++ b/edk2basetools/GenCrc32/__init__.py
@@ -0,0 +1,10 @@
+# @file
+#  Calculate the crc32 value of file.
+#
+#  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+# Import Modules
diff --git a/edk2basetools/tests/GenCrc32/decode/PcdPeim b/edk2basetools/tests/GenCrc32/decode/PcdPeim
new file mode 100644
index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46973ac92b32931
GIT binary patch
literal 18912
zcmdUXeSA~Z{r_zf+5mwYAYj0%VFVT|U}#F(lD71jA}xeIqy`GL(3G^4hNU-9z9N>T
zRl_kG+jI}#Ip;R@=iKJlrWUHQlxhJ{!ADT0LvVV#paW4_5b5vzx%Z|m1)SUK_s_2{
zlY8$upYwTsI_Cz9mvjI1U--XX`TuUABcJ1nV$_!*JkG^V9UU|FhKDU2cYKmORRWOP
zV{vblpN+WCXZYXoMG71yMh~A<o^{t4zuNHa3ps8J=zgBdab;Hn_%Fxi2<~P9YafD)
zBp1ml$u|U_k>fmbd^OcVHOJjI9utuLVdXjmjLYJ<!Z|V+*AW94=rpWchr#Wi<8wE7
z*T^!FY%QQo*P(w|9G4S)c2+RKq+?r5T2^M#hw>)%r(J4Nr}Z^ygRccns5*OM&psN7
z4|a#PT-X0q at U^p#Tx5ABZPlu-m*u~TxnV5Uup*N-_!6M8rsC}H0QkghRRmK3a6&IZ
zoP7dM8fjcvj(Mz<U_hSWf_aDff at Oy;o;Vlm1LWoFe|N?D(q$#PpbC!vHQ({UO-(oN
z!hH+>>x`Rl*^;n}E;MyKritG at Hzp>`Ck2kH0(~(;?A-8j*NU!+TF5Oi2jV*M5B>f9
zZDIe2i)R}mnv-#-?u}n~;zHGMsC#6nxQl0N*GIG`N7a5(8;lR^i#>7f3ed^{gzF=t
zPHH|OIQ0og<{Tsp1Bl53aE(NGd)%i5CoZfS4mEa=uva3?;%fgD=my~{Ku=zZO5!EL
zEDmrWys8TdSN9x(TLez&p-y9IxwC?APYrG{8ANU}$L$%xsko$LPS0_;87nlftb|~Z
zDK(g9N)Yv<IL_q?^y&D!M?mW`jQEd{02Ey==GU`)wdxCi8ky4+TA~-vCU6|Bgia at W
z%<%7yCt;x7g}4*v8?g+auKtatkW<h0i^dx;lCO6K!un9LLG at x}N^RO^jei_WWJw$6
zA4x8nwoEOI40P)3`+X-Ov44qS#kxReeBgsVjI|!~e<zea(_UmUHhI`hfiL at o>QIGR
zRiO at T(%3(1nhA1-+Oz_V-vDb{(lP<;AA>=CT7jD8gmHmxo&7W4F`!f(1k%V(mZIvl
zzuhz$3li9<?K!G#AHWD)V6XaKb(;NcU!<P%tU&VWAa(6lLwDl+JZY&dyxHvVG(%Dk
z`J{O8MyUJ+ZO4aE1$Zdl#bmgst7_HC6 at eG@UFGal;KRPaDIFO_{3WJB5V^#`H2urW
z&l4^QugOs^<J_d+RKXaMQe~XSG3*L#G3m$gt;ax4G+zhB9%YLSqZcReZTm4~?Vn2i
zo-UIxlvFT{qkmZ{7zEz~_^(s&PrV#}i-f<%q~nl03}P=HLq#UtGAH9a#sZG(cX(t(
zs)dmUDZhws5=faTp~T5F^^-v<EAWDDD5XEZ^rW4%%PCDFO03Dan*&<*w)mSVxBw5^
z?-W17y{pO^hVIxuRu1USK)PdR#A+-BL;ViHm7%9J&^D8tp12nCqwJ7+nWh9bw15Ek
zGQtddNYQ^KqdiL|dY-%$yiRt&CL<I+8^I at grBw9e*#+0p!OIP8VIf)U!H6drDYst$
zpQP0USsBv$7ZDI7r%zcwkJf`JJtywOE%-5(;L9L0br?RSFcoE>RY9;tLGU at Ai2?lp
z10G^PcP$3;l=Usj`lo2Utd(121`>z?MJrTlhB2U05NuZvG${-WYT#pxc(Sg=K-cxM
z2EM1Pw<-)k15e_1m<Gaw49Eh?X4tAA`Kf~BQ#?ntV1gM^#nr?_g3N?@zzjoi%vW$c
zsNi@)!C~n62W-z?71<bs&J at B!=9Gfaa5dkMVp6j1$8brq?&Au|3PLF!!M9`(8O0#@
zE(QEa1>7uwKThE0C`HpCcu)cVlLCI80-!!-c>0-$z6f&8k`~@TPU}z>Ql%uP4dWRu
zW0vv`#SUCmLv_%4K+L8TPXp8tXi+RQ;v8v6Jc-tXWf=wnEuoaH)Ho}w=bWXU2N5Fm
zSwX=xOFW4hg5VaPBJe&cD{P^`e$+qCzA3 at 4^@JtJp3`7u^uh!o$8#D3&r-0JijQNd
zlle8y{!Iz}n+zUfGRKvQKg6h~8Mhs&2w=H(T#|^GdUldTo6 at aeRWI9*GNoruwf(R!
zbCWtPZewbwKw~%f<E{PnX0<RWI}p|oNE-5o at 8eAd`&i!xk at 24UfVn<PoCS<1VVJju
zC3fruYW|*F;P+|lWBC9jCUzQn)mi%?r(TSK5+!FvN<)YYq)sX2mx_Ng$gWTl<ylV6
z`9uaO(Fn!p#OLvJ^~@O$7=1zH0V#X_n83<RrorrqYGj6zr3|VNT&EDMzntKk7<RFx
zdbvp2ml~UV&@ihsnL_%}X-R(G8cxemV<bm2I!7yvrOJ1!4y6yEzQ4(uz at m(hPahe_
z#%?c&7Qk*QfGkI++G{`U`-tVkd6qdmyCiJ}7aD>~6U3t^JK!=h#&cY<<bFK6;B->H
zrar{_dXBhaEXQr<q_)IaAG=&!jAwSb?VNvt=Tr(zbK~;esi_FW(IiMMi<3JTXT5s4
zXpDkRlt4S$;6^g=`$TCFR<m6E9KkH1RbY1w!2Vf=h3Ckqt*`g&12AfFDGJG*8rCa{
zsOaqIQoen0Ubg*=Z=%OM5AHZy6?I3igd*1*Qt#rQ$up<|$9ccDG*qr(hs1I;2PE^#
zE{ZUcTD$@1tgo~EIpQi1BH@)8rx=SVXaUVoZj|9+dQcH9Sq}rNUWOu|5Ud&#U3G;@
z4q~Szt7Kr=1GG#-%ih*rOFQ?=%OveA8%POcG?GC41s1xx1}Abb;Sj at UK3y)#6w6q#
zCX|1%o^yoCwfpifB8oV%L24rpTx}lC%ZWwTo`*6yan`lxH8ihP<`s6;^)Zys#4pgN
zM!6~{u2`{_7|Yiwj5)+s<W3}Tg|#byh&zW^_4Po+qC=ej^+3d at L!?wKkprh{%C!=w
zI&f<c&qD~zb)k>ba{jnopxr`_G6YV%d4wd<)j_BM(TVXgh}2L{m7IfbFDT&Kx8|`%
zOJbkuQ|c2rzY&-XEY`k{zvmIKmKBt4e~epexaTLh)V78B)*x>9c4r}b1-SK{C)DDY
z2^1NwwqwEuwsltGd#X#FU#j``jRn>NZRdo_P(>Wy9&7IsMr8-~YV5E2&O{0&N;kKC
z;-AFShk~(@htg&p@{i=(^A5!Ua6~qsKC!>rWDI%ZLJhBQ*`f7VD2(OX^Eu2P#Pq3%
zD)23C7hJ7{I_Ius%cPzU9eP{8f1<}h!8tW98l10#MVB~T@^EVy?SBE^`V<6VjkDM)
zi|SL=`)Tq1 at jxHfd0egP3dTd?pG5^d*q=gT&Y)s;*wyyBa3`rR at r}+4YDgFs8bkSU
zC<=OZly6sM+xOBe_9tB$>`y+4IPCkI7LgEv7omrhoc&#4j?`<l9S|l_(^i{i5EA-P
zR8X7J&_eq at WnIKYfkoBb<HJUS at MQ;HBy at WM-yW11e!Q#{SzL=|H&})(_IdV(*Z_B8
zO=c#Bw0l_c<lb(QLYV0BkV3vYppZ at o<6?_bVF;b-Am6U83&u*YS^g0)LtQK>)zwv6
z&Kl4Gyo)6G7CSHUgxqf?VS)ay)D*MinF at _bGL2_J11axz(iZw*7b{Oyy#)d}GI~KT
z*YW)_SQ_yWxjs#`X=1?MFX*WF)-qLXFz?pboiP!0P?Z#x?8`c*OOh<iz$HdVp-ZeV
zi!N$mDqS?fBnfqW{_@>NA+7k{IN-L1yXsZ9b=Ak-)@2Q6b#?ZP4}73zon7 at KZtE&_
zGGEsAcTi`@-uD3qIM%XTlgleY>TcCbY>TdsHRvv?&Z~M_j|qB+^(rEg9YNA_)6MCK
zlf5E#(Cs01RQwZeR7crC(IQO(??jK*2EDfewan8Z;;DkYf!0#8)FE*TV9RNsJI~TT
zM|48PsE at 3B<*F4>KNNqygl)3$?G=TpUbrC^{(>rz<cK!rot5}D- at dRw^)K?qWAMgr
zQP;p;;oGz0?0fwhL||FkTwxLc<pw%6_M^TJ2crh2eoyTX_2>Khu`D5oey6?YJvCd1
zGIlR3O1&tyB8>;**bxab>3~DrM|nLm8Q=zXBrt;u)T)sWvekczafrVo-~x>`?20 at L
z-l=h6Jr(SNqzMyg;<EuwEWi<+OZ*{{AjM5?0g^!;-(H%Rc-Ven(*gwXNNYG42aX~$
zD#WHfLab&|d1Xb0i{h!T`um~BU|iAxF<B}#65+^XBq at KqBw=KX<hBRJr=@wxjiS42
zEo^@VL8Gk*QX at B7VguIK@$Gly0mBs3`GO^h=NG0SHTv>A>BM{yDpzDSdmH9o6;I}8
zuR^j>60x36NETWcvjkC!Xe01SfXh}dg~ePF^E+9(;aT#|w*JlIJ@*rs8({F6TL`9i
zAFyNz<2}#OOszaKk!E(&rdl*n0QNyS<2 at e|M4b$A7HQD6eWkYZqY<iJ{+WZl at 9@vO
zas7eb*QOO~df&bN^=aj>Nm|j}2EmXO=+pQ<w}xAf@%M)d1IOb>P*I7*1<UR>SP^Q`
zee|+r0ry38;%6%UDzSSGBrg)l5Rp72wh&2?18br3i-S$6+>lNmdg$>sDh`TR#|~+s
z+yYaJ;9|uWJ9H$~6y)XBurQM4Uko(s;*qVSR$toK9TF!27BlFd4s<QUPNoVeQR(6g
zDPZU+;FZ;U3Y1*Tsh3U)R8EuFOmT=~r9M1>=Py8~f1 at 4-JS6VI6yLrn&jp=Hy2Z)D
zA_6DtzD$K;U)3sCSKyRZ3c?HQ9dQB}L8q>_ezL5bS;{>-^HIP1oyNcmdNkpe9rT<4
z0+RVels8%I#l&EF2<bD}VA4C_Zwck46^?#g-~~eliZl)=9)bf<+=!0?77f3Fbc?-3
z5zq~%vPGdn8!1TxGL?T|*hT#V5xShna18Sm3>PlP at EgK_RBWP%2*%*fh&w|t#u|={
z7|0&rXka5q at q`V;yA|vb_E$RWY_v<nr_lzr9rNGFw`b*L+54hB^DXc=*<f~}BYXC(
z6oKT~6J^h~4ggIeAXq6>U{LMDrbkQV$9j%wccOw`&-S73po2SIzaRf;9i{!R;mHI?
zEC^iE_>K;`v~;YdXPu=$peaOdxPTjj$b(B9jFF_3COzNYlviNy_Ti|KDrRtijqg+F
zfwHURPAw<g44oKYo`h1d8Mz6&V9Xg^%xXWq at y4J^>eQl}oRt~}vx+;<B5&GH`#(g<
z1(h81U$^EZ?kBq0_RgjW&I*V1b!@($K(Yb|yh_V*%n})-VzrK)-u6*{|G$i?&!`X{
z7S>bE(+O#G$r227X%WWJWrr}T<9+bm(}D*%l%5<AV?TV{)k8<pCFm9sz`LszUEN{~
z^jpzP7}(-u)mYU*c0_ytIS%!+ht8!Xp|7JQJ-x~jgS_O`$eT<R5MzWz^p##n-<E)=
z7H;Y|3aS!)+1kZKT27W9kdX0gsTvu6i8}JXEIt?)xxbdh*W!BL_V|0_B6p+rc$ccj
zTS$)of`3Zhp=9=%R9g(Fny>WR$kS0FP!DithUyUNPEiXAffw|vs?ZxolfHZ`_%6(B
zU_BIp#rQIcW5FitBim9!7-Iajw7HX7i67GOHgz)&Q9MI-JSt3v-%a$SQU<CUfUBqN
z1*#`onyfk$Qa{ersZqO0R^wZzKoZGve5*#e&Ei{Mf~8~&Cd(F_y at yhuR4JStyMZ4{
z7(>XN9nZ^8{RkMc&dXTJx0hvVSVN{74T9=lstSwh2x?mb(`Tw)lkoXRu=Sj(2i}w*
zB?Ww$9pX)2LKGZQ`)@_n&m0v}k4}RUeCezcQ9Fa8o)S=n_~S3A2`$SU1^-B3d!-YS
z#QpYnHpa4d`1Zr>6%~|TD!P%uT<pb2h9?e3;L^JT at kh`W_6FD-Ah4TBS=$Dbl|d3P
zb*8E-GKwyp5miW?NoAVOqojUbYHQDk4Umx?b+UEngGvik5q8Hc_6o`RrMQFo$kQ&V
z!?=&|e>8yqJ at Q{HC`kOG^Afe{uM5{f0-Zf!V6Smn7?W*($@d9WKI(VT<s4E+&N`(E
zB0fW!reg>tC#jGrWPkWBp+-Vlg{Bf&XbKuhv+A>6 at WSzaRUjOT7cGIF82=}$qzx|0
zsQ4C^go-cXfL!P3FHzFD8VOZ};)c>jFo)s8XyHat5n9z#0CduNB(7z24sn5<dG>M0
zDAj*D80qkm>mC%(0 at B6y^&Um`8Shc!sH9_qJoAn;^QyQ}#yr|7HLuS?u;>|#92^q<
z^UrR<QVDwv;b at X^JU}?C=UNtU!qjb-vT}INH{P?K0Pc_h1Og~%Nzdf`f3FG^#K=tq
zg{a1UX46;%j#kx;zGyVgO-6^*<LsxK)H`EVbtQ#Yb(OMr&UM8I6FiRqVg1(SySX%U
z1m7Zz2r#4d0PCzx8!b%EAi7N>vue|{x&F^qbnVK<^9rbcMVAv6xDm#kVhyLp2$Mp-
zetS0{ThcY0{|lVw>?JFK5*pHXq2yPf3MMAL1-n}JK!6sfXBKFB9-NP_XJ91{vEXsg
z7g8%HPJ~|vUPxfwJ!fIx3X~u{bTma-yJKK&JJ$C68X()gBxW~8Avi)TVSk<=S^$A?
zxK3IB`+ at acn2osGUdI$14QxF(FtwkiZbjRo1M~L7o36tfI)Zq40OD1GFlVth92M9i
zv`E=cgQm)|2Q3;Pvj&)W1CYZ-Oaehk#K?Hn7ZLTnaRm#v$G3+4=kAS at Lqo}-%bemE
zP)1r%%WtGCd!7Sg>6m%i(5CMLco<c%SEZJue%5kvDM--qyc+pN?-8-8e)e*(nu2i*
zYh0 at +>YeN}*kyu;vtzz!`EJ54>S-z89 at l}FZd|Q>uV7&NYXj%i0upvXtm-tTFo508
zKgrIlI~p_yne$>Unfq`=A9B)3+#iv1A=fyZV8p847DF^i5&i*oToMCxUIiw^8K4>M
zY}M$$lF?A0d%{LBn14}<S;%4VB!JJ3^RTGQX+32O^s0zw3fS}Pvu8;HDWs$$iC<A6
zJ1FK*0B*Z<9P%JwErjGTdB#jLA*VrXQdkqlgqCPfjp2(NG7g#w#7w1018+V<TdQNj
zt*kq=uD|!NUEDaqQ$vcgF5mqiuHrGcH{}I+>L^VmD^p>bviAyON-Lb=g}+m=)J9 at i
zx3o)=&r*<X!1xtsrFTn6Z(?4xlo_Qw^ag1_I->Q^Z1BclqdKrpbLHYi1B*jjHG|j(
z*PEsFH?i)ZS1spcyrZVjJ at YJ4dVUuu$veuirR*)4=I2lyjy0*9V+CqljKDlN{gyNx
zk8wR)NYe>{Zq1PSr=|HhY!$sC9+ZhF$@uS=0I(e8(cr%h-kN|rqkoKjj(?<mmD-PN
z7KxP)DgpzqaB()%$=(GywR2BaI=FsZg~Jam?&|L#$Ik>-pwhXJwvTSqd75cv3(c5_
z-nlMb(0LxA!8>V?SD4TSPM&6`aYlu#ibQ%HIv1QVzbd|kkcVgM=<Ri{FEX%~W8IN2
zhU9qJsA`PPfA(b{hrBxZko}hBaLnIAXcy}SOMOw6EHwTD8i%Lo-lvv9>1?GVU$hds
zW#|>O4iO=PR3M%CZac++Uj!0 at 03;@OH0VR>S1#Xe#8u2Cz}|gJk(mUW_(MD)Q_ZgD
z`u&;?S{Dj&@P21KCk6+e at M0kr1jK#d0I7<0gR)rLPN at lq^o;d*6;-m#Qwb^_!sL*!
zQ)=5U-YnCZ08ou%nT&0-giVV>0Cgnx?2a^Cg+3_}v}D}25DWZMc61QkQ#;aox<}AZ
z3^vZccHyS$Vd<N=IHe8cf9^zPK=AW18kT>KZMZ1Oy at BMudHL=gBsX>0&@Na<o2ntr
zL2+uFKhsevr2RPvBF~UuPU|_id759d)yT at V_CrmR19$3T?j0v+*xpW2b8mKxs#sTG
z_iMJCtYV$3<aghvbchphf|bGizTlk~yW=SLOz`}k((R1pyTj1D_#!-oHs35?Ykj@<
zj05j&de5-pzLT-Ram!ip=LNxh&FH<sa_#ouPQc$g*8ePJ$Edyor-V{uL7Y at ODVDIB
z9R<N{CpjZ!I$;Jik8KD1-|~Ej>eR6q0loV;NncEK2mBI=YXT160myqQGXYo%z{pz|
z+C$az at hoAA{nAFQr<vv|X>RvEywSuB7codP2AWw-Gry!6SeyGT*<8pHAHyca-o0_6
zCrmJnfRR~v3A+S{t`*xP0REo!um~0#2raJI>Hu9~2Q?SsBQg?$$FTrN`~yhZ6eKd#
zRt3{E1rxC$VZs$Mj)$dn)S6u%o_3hp*@(8SpKtvFx{zk at y3~4XYNg47PZ4$|W;8Oo
z(87Lz7V&@VR_%q3EjXVy#IQTHesr;scz(~)n9dJ0{GNFJnegb&X<!>bseG$+CW)OW
zHsI_Cnxawo6^w-s6ky+FJzzbz?PS(eycRAp<rM^1YT)t-_ZFGP;4>B<9^)o_(gS^?
z_|{*d{|fYt!D+vAGaX%(U`pL~kV7QUff?5KJdG*jF9YjU!PT_*K^540o!G00={zB`
zw}13Y(~7_zemoR7pTyrY2HN3U{{qzn&d=iS`95y=)>eG8&HxURTInYh0nsRU1L7$B
z5J!yR+vtcZa4@##MS?=s?d{^QZ}2CA8CV32pbk%D`8YjS2lI8T at FEG=vj*0n5iE#A
z05N(1A`-8Rv#g8czdfl0dQcr%8#t(mtR_Zg3u|Z>>yY-c^Cd1$g1Yq_L^lP_Tlnw(
zf|$WJ(t0j%K8?TU9z3q=9;Ny+^qs at 1(}6Ez{FTr|mBQ-2z(FJUjJyh#!8+;g1(-i@
zFeY*~a6V<zMB!1QY84(Lsz0Nz`y)XbN);GA-5n4o2qT~ue^ub1F0$t;8YZp+8z2cz
zB8W>eOk$tHz<5Phf+>%PF9vb4eoqc at QDaKraA<R<mK}*C;6(R)4S&xIvaS<IKbYZL
zv!Uuh4;<reH~`Mm6ZZ=%13d=5^&g0ZK+hb$)k0?K8Ns)bRRTRD`POe^WDzz&d|Mbm
z=$fUfJYWZ?KQfZhPvLM_WaQh!@Gu7mI(i-exC$OGc|FK~t=Gd{{iF7jWudV?qQWoN
zZo?gUXwL+28t7Tew|*66Xib!%)^{KuI1{$g*JR?cwFHxrU=S9!J=&}CTu40g3eQMg
zqxP7H@=8$VpUEEKz?a&=x5v<pioRkU9t$AqsXhtyGaTaBc#wX<)H4H1lz2kKUZI=~
zL?}feMDn1RjNf*$A3OFvZz3JRjx@@;rjtuic9}}PJQY~4M0Oe1Q1fjP!ULPHXRmEL
z0iU at ml+z#RGj5u>Ztuj<&XeFbGB$92#HPvX&P?9ceLJ4Py|l=Fns0j^`dsEIib_>O
zQl(OwctPLuE7JAJ1913l2U|Fl^<&K=11G<Npa7 at nW%xy%&TqVCME(qi>K7vPTR}Nu
zHHc}7SPexoYre=f^lg8m<%BwXLUnJMY0SB<SYbqWo at q=X>k1s#@DJpf#)4*k{ix;G
zM~@Di{5w){0_=&xbk|K=(6Kg6Mo at qm|2QNSS~<J-{lF2f_wNxil&Ql^hBQ4TG6}O|
zxq97l*cmzdE{(K2*4kg;#3}IYBBQf27u!#|N!&lWmlCM|dUOy8{)yPOo}P+iTCc*W
z8R|AvMW)rOtgl1+m8?^BrmDA>jDRekj)bpa`w}V9r?+eYNnspv_n1(2KdN)Dihj~!
z!uS|Y7 at 3XNg!D^H6BLTqCt#3|VO{Wr=~I#8GmOwa-*yAUg{t!?czbm8 at b%sW&l<Jo
zL-<tBkD(_P7urf`GfV0lsO28`^+o6$1m at f0LtClUF1!+;K>~QDfQRQ7jHRzJ^rfY*
z(eyQnzDClQ22m1EXVVRcd}@C at p;i+W0?%o1QjccEA)bUY2VO{zI&5SiB?ai$(DO0E
zfF7i{m(v6(^WUb5F at g$h4FwIQF>X2k0BJodhvH{C*Uxby at Sz`06~alNU;%GWV4|$Z
ziqO^=*i<lOZAWQ_0jSfa8N6Pz(=|0-u%g-~__Xw-<lU+K9-iM5rdo|cy<dVaG8N)Q
z2QXx-E=2wejP#3V6Iy`;`;jKRX9G|I7>t1_!ADsJrBi<v7UU(qBsC13{2!^=!2uqq
z7%};6IM6g`a2BSM>y6ZlCx{(5vSWv_rvpA+L`^H<Lp&$Ax1;8_9uVe1_YxK&uV9)A
zOg8}30t<BljowioBW at UqiEt+#VqdaBF1CFvad8*c-a%Z{Tb4yCuMH>B7|yMBC=J=y
zZ;A2;H=73BH-V=-(>QPh2Gb=O-~N1vj5zy2F!K+Dp*6id&t&2Ql;u&Rv$n^<TH{fb
z`R{dMD766Tz5_S>GfN1WZitD9C>oYRQZEQgr%IASNUH{DWA#v)fYz(dW=TOyWQ7%g
zO3#LWqzBHc{KeJ-S#*y<lf+eLQvvuft13;isM90fK;&jfHzTSM!0PK~fzWxpE|3gJ
zM97GQ#ooz(caB`-w{0<%k(0oKX8Em{%u9rA$S&Q(nRiB=;?XEh3E!Ps3L!aq{!QfY
zZI8o3vKx^Ez4;n4x-gn`AxE9-nF+1n+)6nrxQO7A+wB#fQM(O?!Xh0zhz(tROh}(3
zCV&z6W+GbN$aC22V22aRH{fSNv=#E}@g_&yA%W;t!eUd+X7i#YWlLt7OY+OgOO{lX
zmSvZfm(Dbo3e|$YY3590y3sNdyUl7}so?dw3%#rJ at DD1CQ!|Wa^G0u7jq&E01h8g)
zrMqTbQe|<CyVzUfZ*V)-t*tC?tlQ}JHB~oMI&$+W9qzhH$C{csYv3N-sO-|x{F1V&
z{DMVQ`6VSwON<IdV}^0MZzeJ>_LpmFu*NvsSh~)?sK#h%p5D-GtZPCCYh3L%Hn|1-
zaB>(7W}B+ly9s2C-{*5T3dW|*O at ezp;h^7H4#1ar+{V(y<whW0<MlVx5Xv>4>c+M1
z8l$(dVKctgxaV9Iep5B5xCJ62^Hkm7b63}Fo at J~P6l9HFLE&)-RO4pjdZ=&?$!0d^
zEL~cZpAE%ZGBW1Qgo+1g$?`&$TCcyc##q;=Xh5i5-QXrEhQfl8sHloOQNAvdcTwZU
z>IRsru5p83knznj3Q$6gySCcjfFW5Ko9Y at GB-RDG@i)0^B!Xq$b?(L`{`ITfK4YSB
zF1*5A<XuzUAdTmOO at W4Iatr;SG2A&w-a%*u%M3V>rP)$$Oiwo^CC at Z&G2(IV<&R01
zKPF%Pm>PYAmuA2phhY1r{#fevZLEWxC7)bEo^uu6;WLXGYrR)YT}3DG*Cp=eVH0Fq
z^YF22YVaDmvNS8=rpnUd-#cAZr<P_#OM`G^6U6Nm{1?<UxC^TrYZ|U1H3Wg!d8>2k
z8moPquUN{N7rKSgy8m&L;$_(Az!j3hw6JY-8t_s+*-(>H-Q>=$sqwj+nh3vzE3OvS
zc&_0<L-Gq{mZG}VKJZ03rPz(2+ML~hf0k7()Oi~*Re6;$m^jB at TMPHS!oq`VC5h4{
zS1M5ckbcbNQifEPOKv{YzlQQdG7$sijR>~2jR+oiR;l2tYg~IJ-D}7c#UU>P0<*$^
zf at cP@jz#{PD>*(~fh%%1t`$6Rs;afHTU9|_v%4l+$nn=T)Kp=hxVpJ+y?=dn)0(<E
z8I8Q)-^o#0UF#m?BhTF=z#mA<!=)h~r@!gd=IJ#vjnk{=8%whb@=;Do7A;v=mAiBa
z?y{lBs@%f-+{NbU)iaH?)o{R?IYwiNTk!iDk at rV&=2EZUx8 at 3ml+c@rJ|vO61taEM
z?}p8g<BI1 at ql^V}QtVyb at R#ExtN&-ZlXCW=M#1fau?H2k#2eM}QWU?2>J3JTZ$)pj
zjEWGmjON_J?2=T}Pnp?SgG|e*l#AlYtrkj2w|R9N>zcfh1Cz<GWjn+KqMf`@zDUVU
zx@{7Mn~lRbD!uQ at 3E;=v74TI2qrMi6lT^e=6LNvK)@Y`BUbr-;YGL`Jys9#nBOh8a
zD+^|$Kp3wTT|<0JHrHi6#qb!D0~|7zxHrH*E6EcuR^hAOu)*!4nE56&WyMFy4aAw^
zE+|k at sVFJU&Lr6(0f{jXcV833!+FFr7$#KUZ at 3PnY;%oV6P0BMLpKu|hv2)6oBx29
z<!+z%GJO?zee0{Q;ssHhOE<2s9clzeL$y$gHF at sU{<RQmk=Nn%36;@D$>-!254pfR
zy~savK5o#jx$BggD<%EQddRQ$>FBaDYJwczItn}@Tq95wxY{f+5#=9!=}`75$2yRe
z1z at O*-b7=W)|q7|7$^w;MQY&8S68Z>cm5On=%d$oYm`JRdybTRpfGgJzD5j{qMM?8
zGS`NLBGW~N`C6{8hE>WuQjGq`OC_;5b2MowOnoy}qKi-_74g0yBUdg28|jUHw60B3
z)x|3c<#{b4CX<_PNo}4z-I6@;mDD`ll0;AP&G0Mvq>N9fTkodzNj0}9U&%E_Bi+uY
zFTer!Z3I6C9XftsDE*cC*Q`N<qdX0{R8;#KsVgXNT-WH`)M#ATuz3T$hUTIZdF}?c
z;5HVZNcw&5Arlq8y357~Rw#L^%<DCluCH!r7??nYM~_G8Yk+|wZ*`3^-{<rC28M8=
ztn3jS)jqVsh%cHeZ*1~!*nr at 6lZ?t=4puAVC`9DZE9lek66}OZXm_NnlrDL0>bi%~
zm*sN!yn=hp0I{Xmte~!xxSOQDKvtyF+u%p5p6m7b{2K%Xu`*Zy+Ygdj;x!h#Yw8B&
zrYUJ8y4j1u5}yUM-HHy-HCr+sN_J!2p!C2Ab~bn$n-sYT5`*hedtgy|QvS-|GDfdI
z%Aq_;gqo=24q^l$c?Ws<ME2 at oS|<dHa*G|q6o>z_LP6P;gQQ9C8gIj8(2E+^c-L=0
z3x_0XbYgRkUXCkuV+UC$Y&JUUyvXY`#BsSLxtFb!xX;IS6y~^Gr_ctrQP?+|lhWiY
z0NBAnEA{*GpR$}b9?_veuPegl+h4s_p2-E5KJWTE>_0DaT+7 at fYw|o>N@`kmPHtX)
z!Pn$>O6_Qw%5BNb)}#{m`s%vI8mTuJB#nROfQOCvH0Q~mp>zMqy#c_nEwL at P0}l>2
zxed7D<pH;5I^JI4a~D2$<3s-+j^E=1prkaf^oGL=!(aa7JB8a^!9zQ~{UiEC*g(CK
zI`>Mdy4ECHa%EnAPWi$rXK9jUZd&D{Z0k2UXptAukqheM`Z*hFRs;Y4Z-3K^&&Hf6
z{=>8dXKnKqoSk;&i^g3yKYc1W`)Oxt*-JNl at RVzv_A%FoD{~&K8~yTwf4+0uiixb)
z75;uva7Nr$xpR+gUv&D9zlwZybKYN!6Mk3Jp7@;Ou~oNMc7Kr5(ei^wZ+^zm{loP$
z|5-OWJ?B2N^{L~(9q&n>d}sPBkG|-!@0ZX1=hED*OW&RUbLW$$qR>B2+x at pa>9{RH
zj5~7cb9sRsXJXyGrj{Qe*T0J&QTO1ZN7B#2$BPe*{SU4$<MR<d31hJj#3zIgjXj3z
z^Z2}n&sX at +KUvJchsNk%G&JKw{}yF0J|E*lW3h0o>G%}V75~;{6KHRjPJ=j(`1m?n
z-xMeLF8!<cBK!se_bp-EKUcufiDb)Z+<!Vk_HX*<{8{)A%)=PpkNaBiFqEgLukFCi
z9m&5;emVK=<VWW{F)uvt$h^PJ)7lbk78|qeu>HyQh3$e(lTw%BPq{0lHKje}Qc7y-
zU8%cMxwOo*yVHJ<_Vcud(+;HdrJ3f>od193zc&BG{IBL~?BngL?SHX%+Yj0!c2jyv
zdV2cK^nK}HrH{xkXC!5mWvt5hNye`-Mr4l3v}fjL`ZBjrGXRF^AEzbH&77N`v^42w
zNxw}xoRny_TA#P>v+hfNExC2xU*<hO at 3ndF&ii~`oNbb=#TK+ZZF|-BH``g;loV4+
zQp)O-pQijaC7kkN3ZFV7H8FKrswZ`Q>cP~vQje#ePQ8%2DQ#O?=KR9>d**k|7wlW@
z585BIpR<2yZ%;pv{zm%D3~Ppv(VFqSj4_#$GA)_wGKI_sGC#`vG;{TWwF|zpVB>;^
z7W`&Gc)^Pc-d}KX!TAN37Lf8E0ngW4jFx=Mt(G#2%kq%r3CkYKo0iWl7cCFYeQfTY
zx%=jRFn4y+yrjY;M^a1D_N0fB9#48cX<yR&Nn(=5nqakCS6F at 4E!HmUE7p&#7p<=3
z)ye;p{9^Je$<}$z^Vq!m=lw6_esNx|ZL#eR+iqKz?S$=;&5)9wQjoGOg{4fh&$j=<
z{#Uy$-J5<_`UB}TnRjFcG9S!*1e{;LfU|HMT%P+~($h&?7Jk@*`z%|Yt<Y9vbJ)sk
zx7jLfx7%uL9$SNLgH5nC+qOWnt+sn at _rU}1xBb-ipzUGXBeutFzqjqQJ!RWvd(IZN
z?YF&bJ8XN?b`;t_Zu`(C+D_R{+djAT+3?S0Qq(D$6m5z=#gJlzU1p_NQc}TfUP at s~
OQHmp_46oNX?*9TcgYjno

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32 b/edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32
new file mode 100644
index 0000000000000000000000000000000000000000..c2ccd306172b3240103cf19dd12ebede0f1330ce
GIT binary patch
literal 18916
zcmdUXeSA~Z{r_zf+5mwYAYj0%VFVT|U}#F(lD71jA}xeIqy`GL(3G^4hNU-9z9N>T
zRl_kG+jI}#Ip;R@=iKJlrWUHQlxhJ{!ADT0LvVV#paW4_5b5vzx%Z|m1)SUK_s_2{
zlY8$upYwTsI_Cxt)ZM<Pcsci9|AqhSmH+P+I`TQLC`Nr5!sA@*)X_0xZ+O_kamOdg
zQzZboJr?&?`PqmIeTM%XU!=fcV)XDy<ym))@v9BrzL4X#fbQqH99MQVfd6uAj^J(<
zu=XLyNOF;^l6*t(89B}~$5&G=RCC;Y<1qo*A6BkIz_=`qE1V;PaUC&$flkB9br{_K
zIX-uTca1C)$<_kebRGJa#c?^&XJ-WyOggs3q-A9$eJF2If7+!cby{DOHuzfLgsQVA
z_UxmP_+WQv%XR%<1z$V+$VHZC(pIhNdRhLfm>b4o4J$HfgD(LZYbwtE4uDVGRz)xs
z04MYk#MvkCq>;vz<(S7x2?pc|E|_<yFIaZy;)!#?K0sc+{&!cbFI`r$3##DwU-KOw
z+|+dQF5I{9zs|S`mn{jq=t5J+W19Hgb7Nw{d{W at JD$o}r#Lf*bcdh8EsD<1Tb0Dr0
z|Ipvx-xl_dxOlc9qB$9N>fZQ;CoWVChq_0Gio1BWc6~&9a#ZanwZZtnzStAzt^lnZ
zK)60K>ZIlqf>WP>WX?gtFo2jm0M|%_x5s^2aN@$M;ZS1-340~NEUxxnfo>4K0`%mi
zs3cw@%;EqC!mGNVaCOfixJBTU9_lofmOCr>_SE1OlR at MrbKIU0oQg|2=JXtgo3TOz
z%Ss3qnNov!rUX$xisM|aK%b7kdjzyD!-)SF2|&^1Vtzf#SF64NsF68Mp(T3pYy!v8
zO6YX5#|;1OcoGKMU5Gnzz7fj+>gwNU3OV&`zi7MxBl&t)Agm7+8&oewrqrfw*7(Q4
zM3%I1{*mOOY0K2Y$UvvgzTbBu68o1JR;&wj#s at y=!&vJv|93*^GwnqtW0Qy76!@}V
zs18-ARTb*cCXM~GrkNmTs7))-_zkeOB`p)c{xKNTrxmDaP8b*H*4aPv9Ro_$K_HFn
zWGSj%``b;Eu^@qs+Mc7 at _5qB*1@@}%Rj1kC_C at MB&k7{34pP@{HFPK5&y$wg!kf(w
zPctO-kWY#SZ-mNU&~|(nRe*=$T}+0Hx~f*KToHId-&M{|1wQNxoYIj|#9v}61d&S|
zOw+&2{5;{3 at R}UuGR{p3P8EzHDOJXK9K)`_7L$G)-+Bz>MDuk}>`}JZFnVzU-?kq^
z*8ZvF at 98oLLrDeGIQo~Rf<f>-fd4uL|J2Lzw at CPFOgaw9!yxwJF;ryIEpsx?V=Umf
zeuqa!q*@qxkn)T8CV`Zh5=xv*Q$HD$vH~yYhEn<iOi$WLyPVP_qQshvyE&j`Z;QW~
zf(!7l{Z8>S+`Fo*Vd#$iW95ME45T}DMy$qCFx2l5Tp4;w18p<O>4|GGKgtfNmuX61
zLkkFiFC)ybhZOx+GTO6bqUXt5!RurPY%)UOvk`o<S4u at co?UPq9lYGo78a7l9*lUB
zk#hS5 at JU)tkd+~=e-Qyea{83@^JqPo(sSZY+=3rt3BC+6Q-|SG3R6)AS``Fa6a=5+
znHbOyFyJ8ubk|}aPg&ohtbdBu%UZcbW*~tWP_#m&W*7r11;KU&L6gG3pawq1h$rh>
z40K&DYv6mzdaJ?!H1H&DhiM=@$bc-MY=*50lAkI_KE-oX3nrK$Ra{L>B*;vd2h1=O
z$9x6Hg9?r(6dZ=0f57(aRgsNB=u9CzWKJmv4OjCGDJCWBehil+>prfatRR%)5qwJq
zkx>kS?^3{@RKU#=_~Qg_j#4xYf(I4wKPlknDFEtYhNqv2=!+odENS5l<g^ZDAyrCp
z+AyBsGG;07Q0%}}HB<+!2gGbj at iagUffmI=BhHbA#FJ=ESe9WR&=N}7N{zF^dd^wu
zc at QB|pA{5Lv&56AAqZ~qDFW}KvceV`>_`3M?3)t&T2EMl>^TiqMlVbday+Lo at GJ#e
zsrWdSI+<VN?BA5ozscY+CUab=_(P0(nsM8aiU5{t$0dn~sb?oiv?<*hR`s&|C{udo
zRND{xGB>Hy;x?v+3N&_uKi=AJZ&nMFvIAiafutdS_&(lbu#fe95E<{e518w-#96?I
z5{7weSYpRspyuz%1%98#K9&zqVq&MESDm#Va_YqxC{c1&q%?%cK<boIeyR93gX{_=
zQJ&@0oKIws5{*!dPJA9uSI?aBfYBF39+0x<j|r^IWE#w#s77WeS<0Xa!F3A3`pXHv
ziD4I8s+WtTeW|g at 2Mx1IlPRPhotEV1t>LsBHAZqYqjR*vSgL%t>QMRs>ie6l2`tJ8
z`Sg)-Z0z=eXaVe|0?2Z7s=fBpzK>WwoM)NCvrE!uaG at c%G(kLyvI8z7V?4(tOYX<B
z3r;8HYwAO+ujhy>#&X<tPHIb>^|8yv#dv0?+s^qXcuu9jG&e5aotlb398H4MvN*Ye
zan`Gsi^eGEL<zK`4Q?a at zfY6~VKvLe&k at WLS_O930PLS-Sa^<%+WLCWJ^-T at m!go|
zsbRgMh>FgRF6G-7=VjZ^_$GSH^WcuNRZ(~JN+@#8A at wf)nLL9kaGdvROGD)vc1SEo
zb3ih$?4k%Gsl^+B&iXprpChgUArfAhaf-2+f)>yW<whAErUw<#lJzjK>SZVb3c;!|
z(N$Nd<RErhvPuS)JwVGewCru|wX}1;yiC&0vVoL9Mk5KtUtpoDYj7e56Am$q=F{b(
zOtFj=YeM-K>p4fLT)Qv-BBF>B8>BY!z}4pAyqs8c?RhAZ6K7p}UPJR*WnN)dT^~dF
zO#A|UYLu&T;))e(iLrd0!k9yBMealbS6I6Oh`4izRbLN8EIP#bUk^llIz&p<5;<_H
zrd%s=sspzM at jQgUTo?K{E$5Hh1==m-C_~`Hn at 30zT^)oP5S<t=gGdeKRLME`_JRVw
zeQO?Tv?TVaKBYd9^BaNLz+&zD_<J4!Ygs|*_Q$xjhI at X3OKn@2Zw=yxZ+8~5SAbjJ
zc|t9YnLv@@YC9%uU|VM;zNfm>`K6j~-&kNh&~{F!3{}MO?XmVQVN`Ztug3nW?@Xjn
zqI7fHC;mxHeJB_kc_?kxA^%9eJ?~H)07qm4>J$5`O~#NnF4XV}mmOM<g~C|AJ)gt;
zK}?^Dr~=>OcEQzJsB`XGwoK~z(4n{W`zLxF6r5AzqQUt(SagZgB at efT(f$|ktxrJ^
z);No;vZy{)y`L8E9}o0#oyXOxu3$VQ{#jJegZ(Ka<_s!khh1&23wM(G65r^&poWBD
zp)r&nhoYcoNBMSDwtX+nVt>-5!T#ivh{L|WX%Pt#coBM7$=Tl(=19F(+W}z`HEp$N
z1|gvzMFq7f4K1|qQ`SXX6j)T<Jw9wS2w!&KMMAeH at a;jF;m6BLk;S!Wc7tWuVxMPk
zhz)Qj)?{X4NV|t6Pwwp|DTIk04=Lok0}APcFfO(@6^78M4)X2lx?rpXo8=z?Gt|YB
zQe9o8<*Wf6z`IC-Z?W?tPssgd5*FzHN=-3Ko~h87B-3~nG?4OcCvBl0cCqqQ)mtEt
zBcm7eavk3<gQXE4k?Ye`n<fVA{eq5)Z!J^R2J>!>-5C>62USU7$-b;}x+KZM3|wM_
z6uQI;v*@B0rqV?tOp;L7=P%!V6w-?CjRS6LxT{`uTUUMTZC%!IR##`w_`nBh*4b4*
z;<m0*C-Y@(e+PAj?0p|_fMYGYHMzVZr0!O|#J1 at AScC4O>b$C_^_ZZCSg#@?*%2f?
zH{G0$IN2*=2i+cGN5wzkMs<`O6fM#u at J{q-ZP0rwP|G|mBAzPP8)z*hOC1uo0JfY4
zy7Mgkb3`XpjQYsBSFTzC^+WOJOV}n0-(FFu>V+F(;V-BXNsee^-dTxn^X&@@RR1Dx
zJO*$47Ih8m6}~+?&c4^LK?Ihi%@rmQP;Q`8V?XNqa4>3M>i5(RQGdR_AIlPg=y%$S
z-cz%MC}a1sqST9GE7Eu{jvbL8lMXn<eU#TDlL2mEM*=grK&=}2AY1*X7>D>f0xr;4
z!>-7~;GG&5)>FYQNSZK_CO#X`!~z`Axx^nL2~ynT79bhq@$IE~iHGeMHZ4F9kF<t^
zao{L2qe5)zBgASZl~-0|xG0|bs=pt448|oL5R;`+BN2{FMw0T!OA<!LNN#&jd|H~9
z+$g%c*24B at 5H#9~AT at HMB{pDv9p8RO9xzNnoiA9Dcz$6TQll@=lTOSRp>joLv$tXX
zRq<qg_9`SBB at yfCgk+(GF-s7oh&BSR1h{PVQdrC-F~5_g8=fWaZ0p}V-g7^Jxd8^B
zxrJbQ_W?_mFy8YV&D6>>6KQ5QZK_2R1z;bPGv4zdLDb0*XORY7+gEBkKN_Lx<)1m&
z`wsui8`mG`eQjE?ruW_JU!PVEo1_)pZ4eAufj*7zb8EQu7=M4bFmOD61QnG?T(InJ
zgB76`-A6B57I0rgCw`{luM)fGK=LAy3=zpgVhfQJIj|Ngzc|>G$_?rCp@$xCqvD{5
zb?lH9$}KRp2rgE9u|r2vO+j964GSY#{>4DEE*{xRYW1a!-63%jU@?RK=|I;q>}0Bt
z5|u8_kOGFD0$y3or$EWYoO<b`K;<-v%@l_?R_en8c>V%(`Zwxfz(e9LO!4iT@?6lF
zq+6UUEFy5S?#omt_EoKNbp=jor69b(-VrB&5p?Q$>nF>~nWfybGavQ4-)RiIphpva
z*+I_<ARw7fM0u0NUQ7&@hmbyl4JN$<{+3W)TH)x|1zs>@ph)9@;vqNy#f|tVVA1d!
zNVnKq6an3EDq9pPw2_iDAXE7VhF#P at 5TVP74975E!EoVn48I`^NW~_Kh+quvjJPud
zW31uGh=J?@js`Y at 6i?Vdyj#I8VSlB=&PKaLd>U;~+cE!*e0x at 2mc1|9Gv5M_lMQAk
zI<jZqN)bq&JyG^->j2Os0)mx71qRhVY<jd*eyr!1b|)(6^=u#d4m!Bg_51Ok)=}F3
z8lFsW#Dc&jjqm87OH0RUde&JA1e!wRh6}hch&;H&!5B$eY0~rUO?d_OZXb>+sbU5P
z*!Vt$9w at t7?$mO^&CrPf=1C|On~|Ha3&xz$#jN(z8*dD%q)sim$yup!Fsr!pEb^xP
zwEshtTu{kD|8;9#;(nr=ZSQQF;H+?1U&rSA2_!3kz^k+@$1IUSDpu>*>1`kN_y5bN
z`iu(UVPQShJe`n6mn^|Rmlk0hU3LhgI^GB0JuP^UL+Qx at G4{j9T|IOpU4m{Q0ld3f
z(bX-+K))5ugn=ziR*h91WJkmYkmFE4d+1zR68bt?($lLfG000^jl9WJ0Wn5cL|^HJ
z^lb@<YT>4iqo69$m#tk)q~&D!0SOt;ma38Am#8EE%i at D^k^5^|d at Zi`ZI8b<E^;?|
zk9VnhyoKcWFZieA9ZF`ONwvj*s`*O4jXWI{0`&lQW~dIK?i9745O_hqstUbfH0jI7
zg73o22G&CnSd1^DI2LTOKC&$(gdxUXOPf2XmG~hYZ&Nqp5XCcO$D_hz_}xTLDrKO$
z0l0eFUZ8rirOB#8A@$=-of@^9WHr8Z3M7#%$G2*f+bq8IC0I(fV6tq%*?TAjN|nOd
zu^afIgfWEN+3~#m)Q^B6>%5Gme0y1 at hBaiW(IBY)rK+%~j-a+BFny-#H3^@81Y6Ik
zdf-h7Qc}Q|*&*KaB}Bm?wf|OB{mfAz_2 at Jx!I#cD5w$ZY>L~$Lh(G><n$WV$QSgrh
zwpThKN!)LLXJagThi^a3UQt2mrJ@@d%*9 at eWO(9m1TMWh5Pt-1VQ+xV0Rp?3l(lU@
zSs5e&Q)jBWBBSWi8BvAQnN+6fJWA^4rMC8r*Z>*XQ72o6KB%-%6=8SGVy}>_Uy3`Z
zk38*?I*j`W|3?G(-y{FUf`Y^^IxkVH{<?4-B+%It2KE}Kg)!Oomwca4<)eNVUCtqO
z<g8PwAmTHmX*z~ba*_&}LiUI65^5x*RcI=ag{Gj9G^;-A1uq=$R|Uecc+nE*iSd83
zO4{I}jEZkzNvQZD4#;(m{t_jftC3JuC~hci1alZZj23Pb6`@r<1wbdQN8(yW=MWdz
znP(q|j8grlgOLs|x$Z&nEFfKMU++<5pYa|wj!HT<$TROqGp~vpWz3_UQuF#O1dE=*
z$iX4uKmY6&ES0d=5RN7p#{-1Jdah*wCrsUTDJzHPeB(X)3E&PHKp=pEmh?={|M#j;
zL5$o)P>5>mXEu#R;AmCd=!-_<++=h}J<fi*Nxd^>Raa7YRaYr{=Ui8eFv0T(5Y}&9
zzMD%!NANAehyXKM53tVKw9&%k45HgKGOIRCo9q8<Mc1xuJg<QIS9CdHfg54mDb{dm
zj4&zW>$i6UvL#)^`M<z<&R((-D4`*J7fOBws$gQ`Td=Ej4+Lm&dS-#9=fU~-dInbV
z5DOj$eId1S;zam$;DrR%-E$W9tw0IVLq}7TwL1pZwqtG2uK}{{OJa6o6oMnf687f_
zq6H8LhwGH}zaLoNh1rO^?R8AS(ZJSo15^8H>Q=NZIxufPyy-f;p(BWw2OwT02y+&D
z!%=}PLW`9BG-#?Ud(ff*GHZZ|Hvl<Y#3T at uM2w7AeGyUL8&|M!dwgryf9~EmIW&|U
zy38q#0cE5GwfsiPvgbJ<mX4XH4Q={9fQL~9dsS*l>Srw%mx2Tx&#RGd^d1qb>Sr$p
zt0@@Au*S8DqTb0qgIy+gI6LNxmhUF)qMnxW?QtD=>BiOC_X-BKzcz4QEg)eR#HvnX
z3Io{f{FCg=x}!mZkU1~rlDQ8@^dTpm#QhOD7jlim2}Z2yZ81cX6yYCW$0ad9=T%@r
zoB^8A&Q^{7D;W(1x+iQDgZUSwn1vh$PXhStI1h`;oYqsuK(C5;rhq-qK6{oVkU~m2
zlK2%BvV&p{1>m+z#~}{_)<Q at glV{8{6LK2FCWSR&OlXM))fm3WA>*K_K+IH{H1Os#
zw6!`W+{(H`>-u{S+r^C&JT;^^>+;<X;wm14dsAMJr;gH8vN9E>DSNLlrnJH-Uido|
zOKl{UbxXS>`78zL28>^ER(iLD^d{z2OPNv1LvN4<q$64n%?57_HmU>rG*>QOG_W|d
zRWpcvaJ^Yte-rBtdew4H#ye^X-80V;rRR5nlDwlFTgu*&X?_mX;aHQpIaZ*?#R$xU
z({D-B at fg>$g*2TI=++FGe_EQK!&cEN;z5~+l8pa;2>{Dc9u5BM;H?R`Gy2Ea=lDn3
zSE>ETW|3I=pdv8v3KwTHo$OtZQ#<!$rGx9oRXF_6;;#M<a{NqS1uC5jY5V9#ou`>*
zw$O};=$-501)b*+8oZMRd4&mW;N)p`8fR3<sz{{Qp>x3*^Q+=p2zhw6j^1AP`XU2+
zIo2KdVn~jcjjG1z{AXVVa>%Qb57}>74#)g0gm$rRu+$f2$wK2lpmBJL?tN+*l+IQ<
z@<l75TZUdi>ktt#NCncF at 3vDM_(dQg2tZ<jM}t13e&zDrMqI^Q0_@$l6q!k|i9f^>
zGS%#QuHUcepmm`T2k&>*b7FAd2`?66K|tIG4v?y7Hz<p>?Ub5;NY7Z0S5YO)Je8p0
zAxsVlJEgY$;>|Lh2>{hNmdV&QOW3qH1W-p}&+bUWRp^rvK}*JM3$egIWk(0mJ+&jf
zr+Wkq#bD$7YZq?19+tj|i&NTA{^w3)1_VDJqha~y*oKRe+#5*lo0sq2L2^@<4ef$;
zw5b}>92BR<`7<4*LfW5$Ao2_e=Cq!Jo2U6TTaBz-Yd_R9IdG>g=H79FhVAVXHTP!6
zsETz3cE4uJ$tu>lN`Ci!N{2WBCs-NG?+e~}u{(}(&jio!Dc#OkzB>%fi!Z`cX!FhT
zwbs{r&p7bjruPgh?mHP99Jibme_jyG*Nom9EZ1%i?gae3WBt!kc8uyfa7rje7Q{)l
zlVS<0*-;SOc9JtvrW0mR^VoL4|1Hmls7 at V=5zxDjlk~+zcfc=^xF+E69e}*2G82HM
z0F1nap*>VRAI}n|*e`9=dYWmjlIC{r!y8T9a1nzvW1yMUH1kWEfwj5clFfxI at iA;t
z?A;qDdcp+L2pE}#m#|BK=vuK&0^sji4~t;2fzaZLtq#x?c2IL6J|ZJAcpM9W#6N(f
zO+g|<ZB;N$Q!o)55++<B<9JwFN3GfQ;c17dosDSQ`uWx`pbKdRuS>1RrdFCP_!MDh
zVn!pQ3oYyiXc7O%Zq;7s*n;zULkzo9>qi$GiRbq$jp_VA!|#dbp9zodoCdZ5l*+eC
zXOh^7Vgt^OpeY)KU%^=TKmqn$)&tga+fHUp#cSarQ(i%Er3NmaaBq=m3_fG=;W2K)
zCq2+Nif{cT`maFW7 at YP?H`CEo38vI-2RTFn9hhN#&(oMf{xYy$6<ke=A5?+8*NMG~
zn9dV2d;3SfG_45i;m1RP^GW<YW1t<r^)FCO;QTE9p6}y^Z*9dl>kQy9sg-_G5fF`n
zHz1C}4{^j8zKxE!0taJzUL+`F-QF$^`v!j^n1MyW2<q at emXFhObueGY3NMm?J!@bM
z8o`1{1Q4SKAR_U~ILo?7{@asEpa<2FwSj}0$ZBF_wy=hFu?}f3J741BB&b`@L3C5#
zyoLYnFNhgzBdzBG=hOIm?!n`_?op~QL*F^9Ivw~j#$O3dR4J_P3mi0p&&aD_8LX4;
zUV!-n2V){<1LspVO%xs_s#f74qWUxXx<3-6p;Up<)7=4af-nMl at mB>7>LPotqG94H
zumO_bB!ajk!zA`842)NFC7AMv_+k(z>-Xdk7d55?4u>{(YT1!U0#0<#*YNkeAnQ7T
z^n)3`H5;l9^uRIhh6CU{J#oLVGSFk-TmOMr2=vV1TP<X!o)LU2StZajl5hPsMiyZc
z#J7b3gsxet$^&+Q`XeJ5{S*#|MMl0o3=eaFprhvjfUDr~lGlU$*LpqN)jw)aSr!`W
zBP#rI?Ka$zhxSYWr-7ceeCt<HhSo$GYJCUtfiqz%eN84FTT3u02?k+t+oQcI&xOP@
zukei2HENHED6a%%{+a9%4t%K{e0vPtsOT%!;jsXsp6ZiOKf at u8jR)x$Og%HOM2ROv
z>=nw{K!j2hLL?80$@pz2`>|u+^Cr>}>`0 at mYdX0UWtXYs%Ts~%N at SOD4K?2;Aw018
zdiL736Y!b4LOK0`KI5jD>-J6z?K}y7BVz;SM{JtB?#$$E-M8Zz+)In>r}?($q0eQW
zqNr3gBvmS<i5K)ezam|qJOGE^cCdv*SwGf1GH~)M2nukDUWQ-P>HNlPM&!?MsD2?r
zzZH}tR)d(Ph}BRev*wFzL*Mo{T283LCsg;AnZ}&!iWNq5=b6SNvaY~!4gWx%X)I{w
z*N<9`ee~$S$-g5NC%~R4On2S11s!YCWCR76 at sC4Np_Q|H-wzz&djB3VLzz0vWJuFf
zB9kyXmaEq-hn<nL at 6t%iW3BxaPMiYYE;2ehbFuxTo5cO2dntkXuSW-w;Gc+X>*=XT
zru8a}nxSq(Rb*Pd%KAFAU&%UEXR3O8$q2~u=}7n*wl9$qeR|6lkQBxtcaI5W_oF)Z
zs^}*zCXA2agpt{JO-R4QG(n+weF6sg7}f<}m_8LbKEnv@^KCakT&Oyag11LU4`1(H
z at T^gLK7>#8{1|#-aiOi0HnXI at fm-f?UtfgIL14Z;KD3ou?ZPVo8YF;c3V3*a!C3kl
zLtk3 at 8ckoL=xZc>X%HpxbT-|9$fx$l6KXY4A at H0AC-rDn9O6khbKr&asKZ7UQc{3^
z4Lu(t4Cq0MdpS*zGXHI=7$d0A)=<z;8snDp50KWgawvYLbNw7Q0w4O}R3V%M3KsD8
z1SZOgtO#w5flUQd)^?O;7=Su$n!)QeJ6%)b1uLp;f=^3NO5UBy at 8S79VXD<A)cYm)
zB2yt=bO1xP>O$ntz(~J%HlY<rupeo{do}<ifWa7;5`2_pP&)NzVL at KvOH#wo$^Vg>
z9US0+iV>6Fh67E524`V9x!y><c!Jo0BRh5&dph9LMbxwsKE!i^dpl}=>j7aNbT45c
z@(QM at z;pvZEwE50(C8iYG2(`ym<V^`A@(I3<YL>$5*K%2?H$BLy=7UX^4f3`jp5vC
zhtiOJ{gx<yaI<N^eG_=fGmQgBU@%>h@$Jut$cVEa1T+6Y7+TZY^Gqf_Kv^C|I%|6z
ztTi50ng3oFhEfZV?mKY9KeL38>4unyh at xRBB=v%@bgCpNgtTgaHdYU%3243QY?c(X
zL{?Y<sPt_3M|$AA%3o|fkVW?xG)Y`_HWh#$v#QcGi#k2x4Mc8+bTgtF0j$1$76_fk
z>jKGuM1+h;SnQqrcjw4Oe%lsP8950&XqMlK$-G3^hV0TkoOx%|DISgDl<?iDr4W*%
z=ifvQ-}X2xB)btw(3`IzqYI;17jo3Oo|(`J&aITAf{O?)x!qpz8MWJRC at j*kgV at m3
z$At7rVgeX}ZziJUjXa0V4t6-9d;@+aL|Y-h9&d8Q9TJFcB`h}8Y&I`iQnqBKxg@`=
zyktpLX<2qzdFf1ZsZcHWn`X{5rW-9YvD>Wnl?q;;yU at Ej5C5RTI5op)HgELS)fjJ{
zNdRl+SGsG~B~=#JxQo3t{sy;W-P+3X#=4DeUsH8Mr6V`5(&4VFbgZeFvj*<Ljmj=9
z%`Yjd$}d<{m0wb_w8W at TG-ep5`(`5JVt=`&25XG7jiu}Si)xIP=IIU1#=0hSu*TJH
zW0PCJ4=0DgV794xy_-PR_<cTiqhM^>+$6Zy6At>F<p6w{$89WKTy6y7HC}&14WV4)
zscu~Bt}%KW8#d!>jeE{j;Wt%-id!HeGEdbFK6iD^=2^x%K|$8&6%-zaKs9bQu7?We
zkZfji&eEkt`PopsB_m_*OsIH}mMkx1srC9BYm9Y`iUx%0)eUZvVkj&aiHfSo6XokN
zc^5TqtZsn0>KZrr1sUHgqW~q;xNEEZ4H%M at v8k@1L1JB?8-J6#Mj}||UFU9G;$Oeo
z?K37C=fW$@Mcy^l4bpfn*c51ZCb!TJ8pEA~<Q;@ou*`r1S(+{7#`JV!Qu0jW79$?#
zUjCSL`D60skEzi|cxeXwaR|0=>W`&v-^M!FS at Ovx<T+R29X_+DvDSOV)Kzo>e_i5k
z9yUR?H4h)VrUtK}D@(H?ZmKLT{=L&xb!ur=v@{4uHbLB8!GA$rgS)W0v8LfFQbQ1k
zowqutuCdy;`HH2Sd7)b<t@|H0DPD$+4qPEAObgparvWeJlMOXF)lKf~ni`+GsfqAg
zxZ-MIjprH;G$g-JW+|#$?E_zwQ;OXPs?FIA_-9$wLY=n}Q<Ya4gNbwewY6~HD=a*?
zR+1=Pa-{<059!BTE at en%x#Z?U{c9*cBoi at E-iTmZ+lb(SXO#-Ry2iCv(!GXEQ5^Cz
zATTQoD0pTd>saK!xsv0<6}TdI<66N3r>a^DyHyp`HM?uFg&cofLroP1imRLJ*8A6I
zH?66wlhMcv{+%49)wS+HKJwg60{nrrJX{*`ar&EHZJu5;(>T3)zOgjBARpzVWYLm^
zRk=%-;4T|_tjaCS&s}VuUOm%TTMY-SnPW7TxCOtj5qW<UXD;>neQU08NC~}}=tC08
zTQFkI^={Y<Ij(rlG|E^oC&k{?4SzXKvig6fJ1J)`Y82c)7<*7rOT1AnFGcZdsNP_d
z_*V2b%cux3%V^Fm%q~eq{gj!VHORD_O1UVW+-jkebemVVv98H0IWU?0TDC(>Alk_b
z<%^Wuq}wK8xY;<2qtg4XoB)2zT>($UKk94II7vl}G$9vwYmH{A=Y>misuq?n%Bw1K
zIr5<;v$9||3WV`m(KW=kWOH5CQw)zWIlv)fiF*V5vywakV->#Y4IA7(ikWXhQ&xPG
z+(4Wu?t%gpm5P$m>`am!5|9`JarZSbJe)^7gJD7i{)X#N$~M=?HBniHFmyAaaR|Q4
zxcLuwS?>0EFVk0n*SEg<Dqax9xpd?D+Mz~pG*k<<Sd-^o?OzMA7I__BpHLZnlzdKZ
z at sJD5(~JBw=i>(bn!8S^xl+=<tcU!1pN=joqbA7Vt)svr!ZiX_fve3D6H)%rmkwp0
za;yVcSpbI0=uI at 1X`NYif`NkYU!(@ke08PDdFMaDk3M>hw?;|Cvgb(22MR;i>}$kO
zDY_}jCv$B`C^B7Sn6KsfYFMSrBgN={yi^j4Ge?t_!qhioCAtV at QW5VPGIHfYu#w*A
zN9)=oRb9NIP at dN!Vluhumel6i(=EvZUrEi=ElKnw-weN!Ps;d&y7g{apHy>;@|9d;
zG}7&S`T`tq-$w9b(4pf8hSFcDf6W>+ILgzIOGUM>k-CEN#&wO}O^wEd4VyR6YiKSy
zk>_r33vOcpilpD?9x_qktGjG`V1<&m%Di4<>H6x1hJguWc=ULbz6Ka5@>bUv^L;+A
zZ(s-~%E}(WQSC!3jQFCt^2R3rh7AaAH_52{<zTf!jzUBpy at EasFTqZzgmy>DO6ij4
zrmlM!eOWGt&nvjs3=mt2%?j#DiMvVa3uHw)y$yb}>bYK@&%Z%X5G#WPu>ByZC0=8(
zyQXeXZkm!tqMN-aEb&=D+pXvTU9%<Qp=3AK4N4E3U}uB3u}P7eAThWewFefZC*`jU
zE at Sliqa4bkM5u{M?jS}Gl6R1oPh_tirgcKFD7V-#OmX->D- at JnIY^rHuJJZp2EC|p
zjd%S9v~WnGMkhAs=;gRlH+GP9!e*nh&WpTGLmZb|l6%=oiTiwPM`4c3bqZ}@8-;zd
zIVnxf0)QPHv{Jt>|0&C9;}IPi^tvK!zWvo}<(XV?>GQ6y!~XL!$F<B&vL?^7rKF~1
z=j7()7ko{Ar__#?soa*_Y)vY0udl9atdV+yLDKkV4tUszPjjC989Mi$+#3KK+Y;My
zJMiFeliPqRULJ63rsM4uK6l}BH$L?L;rKmH07^>pN^dy4F#P3DzEil(6+E=#+draT
zgbmaysdKNSs%uTMC0FL<=aet3a+W4p=B8CH%C>%!gBE!a9l4-BuAj4^W;O8t|MoY%
z_-xFH;y+AVaMm_&!P#kNzG&Qa^V6r2v!8aRmc4Y-2T!@yX&-ZaxH9L#y3sE`_~$#f
zt(eG)UE%K+1!u&4l{@#?_C=@v_^ZfQH|PDuIN^6i?TODh9$R&LW%ma;9W6h2^yX&_
z-9KDE^PhF2({t`KTc0}q+wq?C$#<sD^5}~m`+oWCe=g14y7b-oKX*Q9DhmDcwB3K(
zlaAXG#JD53K9?8RaVFN?Yijusa{asb5p at qfdL;cUe7yM3*#F at AGCm*SlQ0(hKzu^@
z(AZ<RK9A3P_<V&A{gcHEd}xgRMME<_^lwr2;`1>+G!_fTnvPE)UGZ;SHi7nb=`@Jr
zh>x$M^-Xb- at 6x}DFT!syaNiQf{c{Bzok+Hv#{H)wWdEjr&Yy)3!90xd{kX3M4?}s1
z`q~cM+>!jt<d>7*PJVRW6Z69Jj?DYpJgqI!X0b8b4%?q>U)V0#G%0l{{*=2?T2tCn
zE~TWV-j%vLl}pP^yF2X%X+KYUIPE}MUz%zD%=!Ok{%iA3%>Qb>#y;M at +Wr@NxBZ|!
zVmGCyq^GCvOy8IORr-hwb4F4|S;nf2pJe<hV?^edOnYX2rY~~~H3MLn{&8CJ+|0T8
zNlTM{mh{`C!%2x&tMz&7KI^{Z*OFW3{bk<s^In_x?!3?E#n~p=T5Lhv)3#S_f3uyn
zO-V7OB&DoQ`Dw~;Q^F}PrtqmVQWH~`rFv4=ryfjwEA at El>C_9Uo6@$WWzH|0zh{2e
ze8Ile{-FIa`#JlU_V)Ax>2IXZ%&=w%8Lb)L%NUb6Dbtd<E>p;SAoHWlPcv69Si9gm
z3pOrzXu)q5gcrQH;Qa+B7o1;kX#pw!5%7Gy#c0X5+-fPaxGWD at p0Mn(ylMH|a?$eO
z+{fnbnY(Z92Xkj9%}XjwawN4RZBKeA>G7oJllCROpCl$}tO-`Tb%oVu-D2&szGD5@
zdeQ1iUY-0u$uB0ql5CyVJde%0f8PH>?ic6f+7{dHu<f>W*-qFl*$gS^DFrFpQdr6~
z`)vC!?0>cE(!J?-r9Y5flX*vGAoIb at N5J{@3pfkM!R5K%B|V+QW#NY{xX-fX*$Qn%
zHixaucAKrzcDt>{=CL){HrNDPvuz7B+iJVlb{{<8e%nuN5858KJz{&@_Iuk-+f%k(
zw&!eN+kV^2w!^kJZAYQ~<F*fNqV1IJwC!_SpAG+9CPkg1Nztb0Qw%9a*kx9VB_$Qy
S=A{&-6s0&)%J6!P<NhxjY4f)L

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei b/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei
new file mode 100644
index 0000000000000000000000000000000000000000..2d1d44821ef897723d0da667f2e0b495e8ce013b
GIT binary patch
literal 18272
zcmdUXdt8)d-uKN(M;W;%MI)oU&CxIq0RzZU0U5v+bYM6Lp@=XzATTs at 59qEMG*FIr
zQ$EjAdurS5*{%KT^K8%No=n(sL0phbv)s~Z-_6vvn;k1n7tpAAzQ609;pCxh-_QHU
zJD<<ohwJ*CPuK6d2F)$y{^iese;M=t9?_uZxE#O0353pY{_}(VLhjmhAICj6SDEq;
z;<!!z9M`o}c^7b_ at 8r*>ECr6ngC|dV-!(TGztQj}$S3=8oGP8;3T_1OFODr2P1{7^
z7D7kTi*%*?_>aJG=H=F^3bBIYmfo)Dp6b1ihfC$S?Bxm=R|Z+R4AAo4C&3+AZZ*|e
zDixhbH;#DIecUIN<Dl)tkCdSetbXEj^%GsyPn at ZKLau(|M9=HvKE+X8(hjXk%F(Kw
zuXPXjJI)3aU;d@@&CCD2zMKGyiX~C20f<^E(1yA)=6DjmvIQm#+tkiC0Sk=FFSw^V
zdtEzj_k0Po=SRR%UB1!B<XT^#c4`2}@xmFkz~6JGqXqWhqg!70<0E;Yi|>@@@%MBc
z-I6VZYjMfZs&FmPYH+R6hGjbrpYfc$GEUzAY+1%}?OozL5ac`0+-{o#=s+ny>@t7%
zk;R9cC%R?-%lxn8^`+~jxso+d`nF1{RZE*Sp3R{|rWoRpI!xos|BW{l)6>VIm at L6y
zpf15VGu{|>7Q8WXcF;Kt$cgyBybj-(mw$j<$p4h@{BWM_KFZM+{--JPaN7}nfNnH(
z#?QugMEUu_6pk|ij$uF1KdP&=<iVceYUsm+19Of1KOT>#y~`dna=Ff}IydFQ?x|U4
zua!@RdQ5?uGIF`P-mN}2z50`C=Tt|Z|JlLoK+8r6*1M;lQ++~kfoGvv(HLVmT#gxq
zYaqsZrhJ-t_S(kDP$6TCEsU`=rTQ~RFBo43dhRQqCKh5WO#vJjZ|o_QE;!B)7ZuAr
zw{hG-GS?r^qgb?eZJ%c_Q`snze~rv9?)(yS9U8b_o)1XJVa)+<Qw!G at RDd*4<EbMj
zJ<IqrDolMr>v8>yrG-mSiT+NNq*t3SAh`^Z%99sXQlik-E+^WBjP{d(pq-5Y`A>KU
z?Q&h$M(LvsOu7pZ$bzfI<~H!IO_diAgy{n3%KeMObP>R6=~SP7Bn;xoccXT>^uva{
zj#TiIUkl+l#%{L3{2Z{&q at H}1Cl+dVl1o2gaOwYIkbvRQNEb2KKDd2Wk@@ve*!>D@
zQL#A?(t-O6Y(P`KvEOSs$At_d<lCusW!>XM?jc-end9RC9A4Vdg1h`VP)ZP~>K|R>
z{lcD=viyUyriim07u1~rnt*@~l#*20GK&c%YXEFch55!AE5cwVV=2;W6^T0g5a!He
zW^$M8VodZZDYAW#Z at U+htt&IrRvY>DJMpZ0KVhTVu9h;xf-}SUHWh~CpTjujGZWo1
zfm0^{V3N*{CUROpoXl;CIlc>+j=f~-d<0mYuD^2%R7#Vdo5^wD26Ql#9-b at is!c5~
zc4cS_4CWsJ)%+qZ#d0yw9fw0(b_xFW6@!_f{$kW%rq)kf;%N#qpJpI23`7l7gVA8b
z$I}#!S$Q*D?KmvBR}pB~{X}ir7$_hK=xqk1anJQMsm&Pxf(OsdU}|Ar?KxFaLT(83
zx}imuS!k=}9cqp%-}oSfpyR?)V_}i>?(PCDUo3s$+ at Xz;pPLR+K^}vqgx{Z|owX2g
z)s<&#J?ruC9D*Ri+{k!23$zikjq%e+ms@){gsz+i(zR2h6D9J`@ud3%)ih{Ns>&T*
zm{;g3&<Y(aNIwLJ4i&-`CQQiDhFasi({dkX_GD-UOeDuN-EMvgtU8}Y5Ge`N26iRx
zz~soLDf=Sb{`<5oJG8SnQ7s*pS4{(Fp~O9v-+v_e-sU at XgO2XAnT178QLB~nVX6{I
zE^*drBi-6UNB6t6esT&1rHil9YDYkri$^{o!1^Jiqe`o#ODHFu)O7`CXv3t}9Q^^L
zba0MVP}Ftu&aA-pPxv+mFo3^Qs?%zvFO*5?4T3Mz#!F>d0VIwdBu+%hIo+8aNK2k{
zOgcmZ!AD#B8HudG)<01X<K$frs~m4}j!*sU?*Ts^d_#c|;W(rMAFTtt{74qN3rlD?
z*hZqH$2j^_z#u0=p>V!E4JEXE<Aw(vhnJ2fv>FL*-ls&%@5wABawcxN_uISpw!c9S
z-CG at 8x|)+egRSL9c-ZI!2Jrk>3?Nc9C_vOr$ZOy$#6u_*p>0Lx6AH}=MpOENmiFQz
z`7XQ~JVk+UC>4+_l*f<Esz?^BaT7s52R(qQCV-|Ypuqr at -vog9&!b6=N~+YP?GrNl
z44^=wGZvk}xEivCn00I-!P~BRJkm~;ltuWVC|;rbJ*R)P{#v&@P3uQP2ijt=%KB+)
z!{o3bkEbNQOdBc&eBt)HCfkB2Xxazu_fc*Ijpo+lN_ut{k8%x!J>-)RrliQcUeQ9Y
zh}M at mJ$VXjw=u-IaZasfeYJB6?5cL08F6OLbY)Vd4V_SF4OD4&6DcOFp9;KDjfi`i
zJX7IpZd7=Dh&+(8gn+CtBWgdqZ7lXQ26`gpkf~&s2zeJ0&zt?q^60oApavA14=@6{
z_sfeBwGsF(#Wxb)82ND!g@{5QzCh;;$mOLS0vYo*g+0l9kP7*$w9>)L^9 at BxO*a6S
z{P8+0BOOx;`YRYKF(T3oMB+FC3;1EQc8;Rm;YB++4y~Qg5Lg22Kht~!@^-$%rsb_P
z0|~<*Vc3|28X|8QM}Fb>)n-2cNwU9=V{wm9vPMFUxf$wryr>_IL;V<IB}mqY_V*#3
zOw!4UbjN6>$Q%|$g*+86(iHIZG^))@+0ZhDnx`qy6K76kLvt}iMZ8I6u3`hz*g&YK
zNn_s428Q8JPt#IQQ-t|<Y~W+&;8bM^F`r>$CmE2|(<GSH(Zu}_4cG!bI&(aG{|!Tm
zl>HP<5qI08#@p!M*}S^*+BikOqOl#?Fs@{0kbFNPSqf?I7h_rzXic^+b!=C2c9oPC
z7MvC?-tE25Y1xitP&1f at WpMgn8kWJp=(pVdzwwjSYUHM?9*^8bgk-9wBUqE+%Wz+z
zIfI-lDbab{vx_}&zT6K;12Q4Pqk$Q-lyupCPTGkwTmASEPjjGS%Sz6(!m%Zjb8K0Q
zZxLtS0d=dLS at 9IcwW-LpzO2L<NU05l&gOJy`2)_ZeE9_s_B4ljnl<L<0bVFS#RkGX
z&0*%(*?@x$s6EXp^A$E=#em~*s;61&X%@`kI>Oq>fR=iiBg`3WAeRlqc$y>4b!>pr
zpMN<k-e7);y)R`{l0D5UJ<W;cSJ+q>L(23tr<>2SfvId at t*7|`vl{iOP#%O`Jk3R(
z=6rJu8~6wVOqh+H=2CMR8+(%q7XPX-H`gd-p$u!1j`8h3L=LCu%5~B9xl&eGK$gZ(
z%YlwcZY4MKfC6mNF}oc=aWVFWam6ugTygy3lE;G;IGig{sv|aCh#$>DEISWVLc>R4
z*nvq|5o2$srFCHe>p(wzR#vDXPuFEI7{HoLDsROC={PJHi{!P4h>{X&lsB+G1(hl<
zPd*Wdz$hHauZ at sY22WlNybpeXx~~2nNk7uxlSg$-x+Yy}_t<BfABX;(v`6Y_S%F;6
zrYMr;NtQrV5AW>B(b at ZG)_J$HArOnGZ+Z+lcof;SOEpG)4FB&Ct;9J`>UCNIX~``?
zYZXeZ)ulg>9Ip~7hz8anM(J%uqWy#;O<}gl48%<U<+17SvFWK84}~{y3wQLY#?3dg
z`Q_5aKv%PBOs6rSix>dV6W|B??eIo8o&@`hq~-Q$NgD(0f&2X2{?T1ZixAplBxz4T
z+TuT=2jN(eCE;uDFO`nUDx&6ANxeg-llpAP5SodknNJZkC0Og#7n##GKG<VK8B~$-
zr1JaX15&SRt7qs$lH4 at Qtd0equCyZqclo!3D)o7%T4*Z9JN12<N*WSp7(x2Y&paM@
z+wCv)lC;##<mJ&8C$FO`19V<R$zYqIMdORt+bo{c9lrxzw(!(Ol**}$C4~!!NP1PU
zUR`wX3Lxwn^LY{=wiNB;Tm?!9)@v~yL0g_U8uzDhk6r7r3m$v8#~$XfhkEQ9k6rDt
zt7_wAGZR$1(Yw1-J4{zNqqA_>nLC0I<$szd<qn_oclt at WD%|c^FXdiQUNyMg29O8G
z_Fmy|h+S3u$JfCf&d`|mkr*+h(i`%3pjnBuArwo^H1h}z$GX*nJprP|9EM=8O(dWq
z29&FDt-eChgKhwAq2OFSOp)NsR-qKCe-R+gGM^@tyGuJ>q&yJ_i>7Kl26^C9kH<`%
zOs$?M1}X*}YajBUm*Z-xb(T4sXv{C|C?FbtA$RP_9np13g{r}B!5$<Xk_y%Q3x`gg
zVfrEOo%#{C|K+_2`VsMJe-C0szJwe>fmhdZk_Pq2;K>&pheO#eKCeioT%+V?d&kIw
zBjCe4zF at q^&jAQ=A{|%Uy|h%$BT-;i)=)*nL&#<1$3zTcv;<q-BI$FSj9i6<XPHw8
zAg8p0sLOK*m4A6kr^kb}Bk7QMyL6;F=?!r<|8k~(z(vf^`ysnqhZO3OdfiuxWCLoS
zbi#eRt4O8vNB{W3<7w-%hw?8M`3JmH8(1PgP9W4mzAyDEM-&&-F8!4v7=%K^4 at U}v
zQsW4dr;Oyeue4(u?((Bht^_zJbl3~fu2GXmM at j}6sR?70P(-(0;2<{X<W=bik=Rh$
zafV2&CcvS-b=Z4}adI2p+PcJLwH$)Clki+F4$>9Xa%?SB-tr7)e=v~a5DSjO;bW%*
z3M*G2l0j9=<>#5h6Od;_#vuO%1rxy15gEr)#AGJm40#Hr3!kuTmM?z^OJEn;l9Hnb
zlzr~rPU3W7Z}LEI5Doe9Pj&q?7Y{wpu`4U^aziMso?R)$=vnx-?*lVs#Y~P9^HRDN
z<A(kvk_5?S($JyEF>K$JD9$MD5HTz#K}*Ee0c3NF`@w^$Ej)+LQNv-0ef43O;I}QV
zU4ib~52o(Ji4RTS{^}~4 at N?}-MJDuvVOx*=cEqbjdK&@tB7`d0a}rZ=vk+Rx<vTDy
zfkA5lD_6A~jt~&RwOpF~0ir at e>Ks;g52zd;@{X&4;xxzAAQ2_Gzb6_C8c@*X7s=g_
z6!A0l0LPvA%DuefPN<86J<|xbA*d_AM$aP^4v*&82+Oh7zj3I=0Te2XwLBe8!AYQ<
zm!AhcSGFKOavR6>_uy>FpZd|<5kA_>Gn7tzu1W98?|>6<`1XItLo4L~*EHLF1?KDg
z4#;)vBSU@;7nY2+2l^{=2Ixx{U5{#DTImR4S`Gszr+&D#m!qNMvI_72MW+S!&$~Yk
zlTJxHM_{#C7?n<9dOAHEm(K#g3kCfE at Hqxrc3$DA)kwJJj-$%z+<8$kz{ODmTww;#
z^#`90e$BbzqBHl3RCq<wU+jp4o_r)q7t#miqy{m8u+(`CDqS4v<p6=DKQIv*9vjtA
zLmFZdfhh*n`mc8f=(<ujD#_-!ppjpqP=aZV at NX?D)Ud8!=CH$rZyh^_gRS$B+XiK=
zlINj*@-OS*cMYA4Nct=NJwU at krt3H8-b$1E(D$GSP+Z7i{XH_^;U$WN^TQDOeh4jH
zl#{(IXUW^}ltLM23+nzf49nw1)CWo_qx3GnpGq5@|K8>p_7~NT;Q(=}67l!S?FhhH
z&b%)J#etJlMMm^f>!l-(!(puhVEWw9yLa|4=*Ci>S0u&KDJaT`dyZq5z at epo2ky8F
z8)L-fZI0fhNwIV!YCTKQUP5(nm<1g>IaEoX<9Nwv7GP9!BwcVIi2MV4<R5wi>RdwF
zJz~fKux(-P!Q1C(D;}XpI??`?SRp+iV1rQ#$i-5+)^Wx!xEBclZ?(9OyB_lBx&o}4
zS?Qq&Hv659uRP6jB&!BQ?vSQB`J^LFAqRp8^k<6hKLRzJ>E|KF3Tbn%>vB5}U=!Qo
zek4ztL7E``Q%L2ctF|gfpGGRyK!{Q)D- at g^M>tWh>vBEd3E*ep at TaRe%Npdk>S<1u
zR!GP5rDB!r83ffLSJp*?IeVhkdOCPuETFriZz*7sx~)G^?50Tf50>|#x-MiUPAt$n
z=r20;SCBsl3-k`GgYdQtYHtT|QRyH;$2tgjf3U|7D|;0LsNGfCu^V?e6YNW1azWQG
zbyp_ at i+7}?rt_R_T55HIdbR!Y2YU{r;r+oLT^D^}^00V6F;oFkrM4uikg^I)5B-ur
z3lP?yz*-#Jh}uvr8jX+`u}uM6q#HyTNwBMS30V1)-mu-_*s1Z`eVeF~4t2|_-D!RS
zxth!*yK2X|a;aPCm(YzVJtHuBr*QcOSD_lAHXn7qq(sV9XYO(COXaxTA<~iH*X(D?
z5$j5yb$-}!K{TSLz;8T7O0T1mPJ at 5zIZi<H<PjI4Q(DyCZ@<U<JD8&LTL`v}Gh~z~
z+G&sn*ggZ+nFU4w<jrMC05k&7{WgXUlBs@?D$Y&%3dgP6Xs(RrI<Pz}#RKOKV>4ki
zvzcaoLNiEBlrdbzRJj`2o79UM+C?x8fKf#F)i6W=3t7(q_{ZuI`9KaMvbf{-5|CTT
zN*3_L%!Xv(+eh&meE8X3{AFHzV$Se!hh{V3G!2^V(|2|)IDykcja%LB;oCe^RA@%j
zF4et1A7?)J=Fk}s!d~Ob@&Gi4f2lX%5G)%>8-G9iB47{H_2aPh;5xtV4^{j at 9J_V}
zcQ1gj0E*|^OxRjW8|cR-jdTi;G(9Ot8_7E|F|6y?4Yr<3osU%^N1Ku9+ at PY<%H28I
z8Tf|a%VS)NZ?a=}I^XsatjUhy8GM_QJuDRGxI}Gy>roB`8Hl04ANW0{XtOB|1q?fP
zqSE<6ythcaV!!UQig*Z_1vwBeM;q_B8qGg81J>c&ehbq$t}f*tdlC<PTN|!Yw?oEb
z1LhsFAX*&qbW~6o3t<fn9rYjh6G34oHPpkFj3p2T&VV3jGG|MAjiW2jsn<x^Bc$L!
zCA>i+KybSO5j+avp6VT!Qb#Ci2jU6zXrOzG<EYBLnFLuTR)V!?$fj!|lj0n>>jt5^
z)^RnGf8<#brc4`#1MjN|{9}*db!+eRfG=DRod~$-_`=U#21}HCMeTDO6(FbkI7CMM
zB-<T^`yEI9+?O3!S2WKSUm&hJ at yEpP2XuML?WCc2QKGj;9r7$O2zIfTJC17H2XA0u
zlFHEtP2hi$k{q*S*ek$HudPIF1~LB at n3MMh(n*Rc93 at C!!GY2#cer%QakYwn?66|%
zaIz0(__j2d+A)B at coYFp8?b)K5pjcKAdGMO2n)4iU^(9wNp2bl;@ik8j)7^)PeyAT
z18`v%wVXSYo%X07V1D;BiGHob*|~t$5)ozqL&Lz+01rUKv#1CATSh&?)js`TK?=tW
zoI<N}a6O(VLI-9+Qpdm+zU at n&K$Q at Y3Dov3^n+yLF1p-7GPdPok|_pd at i?Hqq0HGN
zGw+od1#9|2Epgre&iwwgAOkLe2L5F~dI+G4Kl)-ophwBjinWUj-V<T%z#^b{^9dPy
zopBn8(F!jk(g*AC%+_-rEa3<Lj7kJQ(x}w4kV1;8%Y2IE`Jj3|u?bSc%<CD!{_S^4
zZ_+PJo`+rO=%$3`#aj=}cI`U{dEFuCi<|G*dg+eV-c5Li^b9HKBH#Wh?3riI at o7~>
zTE$bDI2=0gpJeNE{RsHhqb)FU+xy$5InI3vMN^gRm5w?-)YyfaX5<ghOkHz_kIt)*
z)0DCJ*<LG1+eW0u;XNl?&IWd!4cJ|voiW(sF9!8yXlE>udK_m|{L>lQ5b)I3PA^5T
z7wkCq0ZMT={E6l0;dwi73T3+kNdaNdL>=`f%w<D=b)4dcK5$3Cm>SHau<5z(IhYOM
zYBi<sGivt3Du(W_^As1ka<rS|E?NOfq$6aTB}amXsDRq<Oh97UXJfIyI3LBdHUOg$
zFn3tFdqHi0?k!lqOzIA}R6aCBPC%7UM!{D}eM_j&C*xo*gcEN=?VjOE^XT3h8VWc<
zbTK}I6Q`wlC?W9<gQ7EsfV`j7gIHKNA2mLOP7(O_yPz)8KZBBYKtnILjxI#j^n>RS
zQv=_Hounz)gaI`b$6~YCaULB~u*1CX;N%fo^Qo>~bbOY5JwPb~*q_NG at -su|GJ`H^
zx&+f at I$fsGMTIPxO6SRS$b9N#%&s;qEd=I^kffHQpgM<Ob{tOj1*|)ZiURB#Ht;dh
zfL>VMD`kR=`L(5Dh8W;PcY~y%GRBqiPm|SC(<y%za#-+#Xv0OyAxL0gQ8n})T$Jj5
z(6!4CJ{7g8d$2Ua0qDXtG}AsPCeb~9s;I+i8*Ww8o44-H=MVDy!7f^>u}~jj at HyIS
zaT-==ZCb!J_isRv{wPI at Rv<j-lx>Q13P9ly&=0PJ9H?t}u%`kcW65i*Vd&;xq80}y
z@!%q0@?Hec0$6Y<rekUaI-LlYKl=wt?g?yZKu_bQA3imRA)XUWd$8uW^^38vJ)=VG
zy_DvI(p><JgonC8Ce(mmY+o2piD)l*13xs5NzwW-lj33Eeut!}jm&eG-5iebm at IAD
zcpgfu-|v$TVYUFY=Ru|n?QM_<0wyyZgU4g(y5f<{{L@{qT4+*+R?9o6%43mE-7^K=
znu%4Jf1(FN at tG+1op|8)uO(udaV{dJXjrnzykLAc7|&$}A*+VL8sEDz&aQwC4Y-`j
zl9t$t4+1JV4e^oexEf&3)%B;+GX}Lxs%~2*{Ztj8{K^+WvVqBcV6w<(5x|DlE(N3I
zK1RfZoJdrXy7@<zD~o*V4s8Ji2{n**9VRoDz&GTV-pRrj`GVrT%j1RLsiqWCvgd0u
zhj0G{Y^{V5X)vT$k<-OssRuP`a6kuP+u!n?;Ey1=lqP!(&YVifen8SlM{&ee>*orM
zmh&J8Vsi;vUiT~5w_xkx(ud)AmUcDlY*+pv1JSTeHJ!1}HV>zw0iT6>*3pG0`I8Hv
zy|-FA`N>{vn6df7zIz;C>L}o0AE4Cx+1`yf7-AbWqL`cpiqw*JsPH5|Lx57iBx(#O
zc@(ILfSfw)f_z6z%0V+0iCN|o*xb}ED(x^3xg180j-b^r(k1*btQxwcoJ8MN>igZ~
z>QEoYa~H8|Yy(cM73aZ(t07$Fgy+>^{85M2PdbJW(#W6EzTuSgM)%(XTR$8 at 5VxMi
z0U3^^g5Q*mwZ4Xd7Wp&4>~(w`;QHPOP%rE`y%&cE$K=x(MyP7oVUFK59Fpznfev)M
zCtccetr*8GB*|<hNhh`2iY#sJo5- at 6WO+wAK3SIGak5l0S^gH#+Do$VFAr8r?~p{(
zKiIpc=hMAV<(Rzc#)8p#297fnEBwK0g`;%1HGtlX61YV=ih~)BSh$Q+sz2dh9wt?f
z%AWwBW#@=j(`u=Y9dURGO0ao=qUjmfy3<JE%B=pwzcWq2;u_-zO1r2HJS80^9Y3C6
z?^9lDw*tcTtw6beAi-Q3mK*3%KY~AP_=TVHBb`@*Jmtr-tI~TDMVK1o6XABR2uS*C
z%=56%wGk%6v75{AB_Lco1F>yCj;94Z(i_28{G}7}c|wKrA=JC{2(pu;!bxcfRYl)t
zdYaLw&o3y?*B2D#uPxW-=da5bB8*~%XtxO|!b0of>D>H?h=?_73)U`<@Io02(h3TV
zi at jir7YoTkBu<6tQ<+$1s at fV|mTs at 9t14U9R9~%&j*BVF(5Dw>l@}SKBcl?^)}-m8
z%L+}^HLDx#hOJx53L9#gOjcV(U0GUXV@;V+mv6G!>rK%H)1((hr7X=ZTCz+H%PSR*
zIKQdc(oj(+EZl;Pq<|k`g=K=iK{Q#>BXK#F$_mjW80+hW)t35tdqWL-H#F7=)fF{$
zrYa!<I#N3YI`#EqFg2D204-ZNHewR2CedzfV2F0BX%zED{I}JJY at P`FY^={*b7KPo
z#%H&0XclG!FMoYQ)w*h*@rbYQIo)Cr*V#C3VMWAZ0j{mwDx_D~Oo>9|wuRf4dPj^k
z-}a6$TNGF;8f?`jE15JdW;3)|XB3(%w$?Ok5t>YuqQwd;FWg4I?sE|l>Fd_z=+h7&
zktr!rizyVw<LjbtjXxeXD(=>>M%~&bo1tQhsi0zWohhxV%4)LNm?$v!HUuj^2J?0s
z++63KO|KDcLUM`_8;v=iP4wGLm3GlYrZHApYZ}D}1$T9w#by#J>go_k`DwXu`4&Wi
zP1tOzw!q~khDJu%3{1hsP>CtxZ0o;(=8IjU4#Bskp+?NGG|;gQhuHUtO37&QSzF&g
zdJF60VuXr at DnazQsnXIQS}k=f14PVJ)Payd>IsT|f}*j-%3Q{=1QCon!JuE0iy_K9
zqi!{*;P2yw`6)s~M3beaO1N*alG^&}nlW4XNEKCBYnV9K!%w7#Lb7c-SFD6jkrF=2
z*aWy`E9o_}qSD5^OZ5k66J=Yra!r+JHCQdx$X*}Bbuc#$lN-}B>M~55?OW3A)rfar
zM0r6c^B%JS%Ogsoo60Z=mJ)0X_LlZswsH*DXKOgjy1mg-(;$u#p;8AAvh+t`G6|DD
zJ{^2;qnZEDz%g+r0#2f*RB0-;*6o6UNv6P0f?J&*IgyU<?K(J}Z)W2CI=GmL^S-x9
zaQRBLUTyTv`|dY}`&vDG^pqTl@=+5e`(q+p^w+^D1)13o<(58^<TKXW#4#e{o_ugw
z+;9d;2B$>u^~sxKYS<#0sRTwuZp-w3P*5TY*{beETOvfEaQoJw+$s|-%{eujtrgbo
zWfbVSrh1EYJ4W(NjYiR0R%)_ZFjj1>XlyiDu at Xgi87%{)n{vxA*~FTL3K3ORVZ8X8
z at LX+a-2TmZ8ZCBfrOC(cX8cfc4V6{UuWa;5=`mPjC;^T_7kM*$vJqjgkB?KTG?po>
z6mc;`Wv!`MaWtcVgGm&z>pgW#`+I5Un<}aZTaoP+{_?^XTWdtqD8fWtCKmaxp=E5Y
z5i8A13x)T1ohDMEo<Iq%QJ6(SgbfwYQth2U{Gn42QplkAthU%u*^<#~e60;~jOLnZ
zu~4z=*T`Im#t_}1sfr~28d#%Ae867csOaXCpGLe10u5p&NPQD}h at NcAX0pC=V+7eF
z at _6z}iE&uedi?}!LOp=V+Ei0%vR#LFbKX7_wuE}i3WPxfP+Z?=mITbSSnDfpAcc<)
zb at Jm2f}yTLL`PK5mQEsXF<7i(neUb9tZXd=w4Doc?28lep!699HT5PdaL{eoM5~>e
zN%W?PLSe(!21|2;kZpmX(ycXBTTDWRiS!rNWUy{EGKTtro5 at 7YgO4_=SmOs2w~peD
z>$4%rXpLK+)>u=yKANr=W<(|q5gD3YQ$-ana$9w^^3DpR&AObL&E@*F<S!Q2SR|pI
ziQ2<-%Qou46NM~$O;rkZD at t6YENp~MUbwWnIxpy&2AH_gM7iOMMHF4?JQsm&r1C+X
z^(K(dCO4?tq=>Pi+N7XEfe3FvPl`phgUhICs<END_sM??x&}xi5^>+d8rpOr;mAf_
z9;}O?g{OQAYHN9B%{Eh2n#eYX<rv7V*j7_-uTQg8*3>BCDN6|3LU0i`4oW8HH=>UX
zW~HUdYk=__ASc*1V91DucXf7JepDP<UWM<{uaWvjR0Uc^+1htYg>Qt))Z!w1w(tt|
z&xztgLU?%9`zHmt9uZ<BH`uZNv9V}diTG3Aw;*a)atkBlw=G+UJoH_nw=Il}rZ?qb
z@}1&W!55MBgdbgXzxNVTB?$DGNEg6?_IiS+9SZ&&fqjhjN|ZlrUMGKwE36Ha4Zfn0
zRkytnfA at kvqVY~-nCeW}H)Ud%kKTCP1X~ctjgMk@)1ttFQ-peK0Y at iLp|RJ<VE-W4
zD at Tr{qDs(Pttee%pEV6lSZ=BWLxr`X9?aQXVS~-y*ofk2A|1V-bYOegQHm&|*YT&}
zwb;SYlE2-H$!^}NIFY}i7j{M>HdsDp>+GUnsRjib>wy$Q7Fp_WzJdc0tJU5pdI at _6
zGvWI&R%<OnuBob~Vr&FYY(%IuS2S$#u~FpA#3DXUN!pc>^H9VaYQ{s7IE^U&UcHGp
z7}cYXgh$7*qGB#s>^=#V88V2Cmdr7VU{q%%8%>- at +dRqYL}1P8T*GyaE66Okevm9_
zsl=XoyqVWDR9fmA(Z13yya=aO=wmq}&JxgNZ5N7aELaz52pvuS>Is-kdYsXaJ0{u`
z*1$4PM^VuUN)-U?*r3jLw#H%C&d at Wl^=0JP#TRus at P{2IBWw`IR*hCmeT at xd#|Lg?
zRJ1N8Hf}|HLR$Lj41MM;>iZfCiaTmL$~=x!%GhhJtx{P?BWStDQl#^)K;MuKBNE};
zY>$x{U7v5Vj$wI1<F`#0oo}kIsA;HD_8mS#iy=_NE?ShUt0Swcg&o-NEFNnzZy}?h
zvSxL4JX_3sPhLH5L0dPD_Lw`^Kkerp$H3uq<vV`vn>>dB*uTZUMFgE}JimfFe*Ncu
zjK6w)0pH)u!7(zv4G0<=zTd<5$N17;=zfInWA|~~Q~1tW!f}i6U5xKCe4Frn7+?P&
zj{EJs2sLAd at rP%QeM at -utIXg3;rS)E72mtoAAEfF`hR$q>pSD3v)<*6Rhz-}|F6$~
z>7HD4?Dd1$yKjFqD6wbxJCC<+kNk6{?SWriK6k$E(x>ll`SK?(X)f%^es-kpj~mY}
zT|VVx|88#D at 7F%EY2~tm at 6B_Dul$c+WxXE1_Q{a5gLf?o`XJGDHAJ`a+iRZpYd*O0
z<#q83v!8u(=k}58wujmb3%4&HJiPws_PiJG&v at z7_s{QK{sWca=NmVb^?sP%+465M
z+_yihw|?<IzB?3 at ysmA_`66eC`uDFaTVLP)eyIM**GoUxeDANb_O1EI`PGhRGoJaG
z=Jao(mOZpST%L03fmbpddoTH$hO{m7 at v{wn32)iNP85{qmT}L|;rWF3eY~gGpDsW1
z2K_k2asTng=#(=4q<7qVf99ppdEym$1A3zXcsPRZ`RFL!?AUp+k+G{|^J0r*Yhu3>
z`*`e&vG2zIJ$6pqeR0Kc<#FGQ`$gOz;||AhD`u`(ykhx^gcbS~;)?Anezc-*#f25?
z<9p(d#m`MFO>9W~LE_=Ww-YZU1|+GHW+f#iZBN>jv?uAAr0%5tq)(IXPu`ULP;yi9
z)5$+eem(hvWdD>oDfg$Oq~xX4rtD1FoAR at i{V9DZr&9(}zDx;OdH2f1mBy7lD`%{l
zzbbiE?y8Netg9TWo?7+%sspR~SG~8&y~?u+3P90)xD`iwBBw>&6?Jb^a#Uv2hNvx3
zk3~Hb)fx3()TO8|qGF>nqBll=H~PoXzmD#R{#*1=^fX<FZiy~h_kiw*?oFMn8`Le1
ziHgaNsgJS8{GXVCm at i{y#_D2|Vq0Q+Vvoj7i3^E)DDIbW2jlwUj>TPz^TdU$n6siV
zzC3<KLR!Lt#5IYviH|4#TVhO7a?&G7k0pICDIhsG`OnF7QiPOMDG#RDQ+@#L-c7;Z
z1PR!GLf)pRmZ*zSGove`4 at JKfEl0l`b3Epqn9pK{V$xz8V!w)4C6p#qB{&jX2`?t>
zPk1xo{e&+Qf)W!F(-M0Uk0t(3(#uJa$%*(A4=xh_$pdbW#^935aVTHhiI~$d=VLC$
NT#2E7r*z}b{{lGaaHjwO

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 b/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32
new file mode 100644
index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9bb90ba06b96644
GIT binary patch
literal 18276
zcmdUXdt8)d-uKN(M;W;%MI)oU&CxIq0RzZU0U5v+bYM6Lp@=XzATTs at 59qEMG*FIr
zQ$EjAdurS5*{%KT^K8%No=n(sL0phbv)s~Z-_6vvn;k1n7tpAAzQ609;pCxh-_QHU
zJD<<ohwJ*CPuK6d23>S{pDDML`<Fil{$<Sndqjht<8u50ClETr`Ogpb3%P64eH{1P
zTxH5Xh~qZ-b6nR_<z2vyzLP(jvJ^NP51u^feb?M%{6 at o@AfN2VajJBVE4UHBzc{vB
zG;I at sTL>LVFVdCn<39q&nU`CuD#QwoTY9^qd#d+79xj#RvX?7hTp48LGC<3Fp9FVg
zxz$u>sZ?|#-8kY+_i>+8j)S%nKT?J^u=<J9)lYO)KXIn|3Ay at -6Fskw`xHlYNjtPE
zDMzbzzSce9?>HM!eEFBoH!uJ9`f>s+Dwag81|VvwKpX1HnBz(K$`+U~Y*Rbm1S~Kv
zzu=zg>~-z9-SZ{To*w~6b@@gglWTo}+Nl8?#|vlF0)Nk$juzO1k8XM0kB{VqF1}Nq
z$KTU+bW64ruEixstHQNFtHHHO8<y=je8zL~$~bxdvt=2_wReg0K#=b|bGvO0paZ4+
zu*>}2M;0G)p6HhSFY~{W*O#uB=1SH;>Dwx)RxNGTcs7R;nPP}X>M)Hj|2N)LOiv$+
zVzLB-fw~0e%y?tiS at 6cl*+J(pASdGg@;ZEDUj6}cA^%gp^TT<z`zS|S_ at AcC!)-_S
z0lLxD89y7}5#{FxQ#j59IEMX1|ER9gk_UT=tDz4Q4$L+3|9Cu}_AYzS$mKe>>fDqI
zyQgNIy;eRM>M;ds%E;yFdbj%A^y*Klol_ls{$~fT11%dRSnr;GPW1`F1)hawMPrQN
za5-iau7Mcuneu7o*=rjoLxqenwlK!hl<LnMy<mJD=((?anplXjGzD;Ays at WHy5KlJ
zTvROg+{SSS$y|Rtk7Ci at wSAt!Ol6};{xvecxbsWQb!gyzc|IT=hcySdO)XqsPyy0F
zji-*B^ep4gs4(>ft;h8*mKH8SCHgy6l3s1TfaEerDo<WmNr^&RyPRkjGTKiDf_63r
z<UipZw99o}8>NpnFzGHtAPcS*o7=#<HdS6g5T*;9EB7xB(?tNQrBi+SkuZoS-;LVk
z(hnQ*I#R(;el3LK7`xd9^K-y9lX~)5o>-{eNiO|}!KMF;K>~(HBVEK``{4FjMdsH>
zVfQPrMaAYoNC)mOumMf^#(uBm92YW-kZ-5jm35C3xrcC>WsZ*naCm7)3-0pgKq*0_
zs(*Bi_X~Sg%JL7+nj+42Tu^rgXaWK{P)br|%Pc08tO2k&73LdftO$ddjHO7gRV3={
zLzpv at naN$Ui!srwq{#L`zU^L2wyw-fTW#dq at 5Hn2{e+EbyIRT&3(gGZ+f*2me-7iA
z&rEd71Wug*fJr((n#gGZaWc0l=J+mPI`)#S^ATWqy8g~7P$^A*ZYIZp8_>Z}dU&q5
zt2VW~*p;CzFqnS?RP&3t6wAdxcN`9F*(LbfR}5x``ioJ6nOZ+_iKi*de42s8Fc39R
z4Mu|zA5T*_X64Orwd1hhUPYi`_Y<{gW1xT}ptl*2#y!{5q&8;&2p&8)gQ<miwdYhx
z3ArKA>xLFtW}&T?cc?k8eB*- at f{qJIjfF+hySodte6jR}bB8uYer`HQ1$hjb5`KS<
zcGg0~Rac&|^{mIka|nV6b0g#BEYL>CHpWjQU2g5+5V~?6NY_r0PL#+$$CK_8RMVh6
zsVaALVP2uDKr3{xApH;=I#dW(m at pwn8)}X7PRo6m*^{9aFp(V7bi4T}u<CpoL8K&5
z8`zb&1Ct}0rtFJ!`|s1X?9k5QM74BWUNsGzg%bBve*cl=dz<gn4LZ8dW)>DXMXgrO
zhp9>=xx`tgjdW`Z9o_HN`pGF6lrFwXs~rJhE*|-W0PBa4jw-E|E}@)sQr8unp$(H>
zbMyz0(!n`eK~dMqJF^1YKjGUPzySVIsZOhvzECEmHweB=8!we<1&}y;kT?+~=X7U!
zAT4>)G3gKu1RrhfXC$%$TmM8ojFWdgta7}?IX?BXzX$wy at C^k<gyWD3e6$Ym@*`R7
zE-azpU>k{&9^>d!0fU?fg~IvvG?dWtjT;_x99}w_&}t;Kd7lz3zbCVl$eFn5-f!>X
z+x`YUbZ>QV>1s~?47QdZ;bEf_7{K#iF at Q+bpa4-fA+Le25D%eLgtir#Pbf4i7)|L5
zTH1??<h$@{@Dv5Yp;SP!P#!-rt0Gyj#!UqM9P|LHngE)rfCd9peiH!ZKaVCgDydSF
zwol0HGk^k#&RBE?<7&tnV%D*V1aG_M at kl#WQWoKdqIiY!_niLG`fJ_tG_4;E9cYWe
zD(k1I4U at x$Jf4#HGHs|B at P*s&nrsWAplKhp-$%I>G at 4tFE9u!;Jjyi?_K;6Pn35v%
zdPNJpB3fVO^yDe9-Nq2-#yPc`_0`TPu&df}X2h8})0Ih;HgrOzHBhD9O{AExek$-r
zH6re5@=S%Zxl!TqA at V@V5(2WqjHvzawz1gL80d+VL#C2lBII32Ja6_Z%cJ9hfErM2
zKEMd*-Y+jk)JEXD6yHdEW8}v{6e0?J_yV0XAeWbR2xQFL6!s+ZK`P|0(n<#}&o>k)
zHQfMQ^2h72jC4#X=&xX`#E3{U5Q*amEZ~RH+Bu4LhZpVSIJ9;`LtqK8|4j1{$lLi2
zo0hlI3?vMLgkfV6YKXjL9QlRgSDXC+B+33dj>SDb$r=eY=4Pnh at uGe-4)tS<l^|Io
z+TVwCGD#;Z(jB9jB6C<274lTPNK?Sq)2KEtWkbspYM!P*Pn<cG4b8<674asOxrz-;
zV*{a{CXIPF8yJQ^JxxnJO%dkbv4M}7gHx3y#C(R0on$~-Pm^F)M-%r$G++z#=*;o#
z{WlCLQub3cMci$V8gHY2XY=aLYvUCCipF+m!?=>2LGt~GWGSS*UyNx at pf%aP)UjR7
z*;P_nSa4dnc(?aHr)4{qLCs(qmci+RX;=mWqu+A-|He;RtC5?odOUI$5t6Bzj$loO
zFT;I><_vPKq(tX&&o1`B`EoxX4akHDj|OJUQqpDnIcX=#Z1v+uJk5cQEh{<C3dfdA
z&aq`JzD1mQ2h^>0X2nw&*QO%Z`mz#dAf+}GI-Ap-<qtTs^5qvm*wY;9Y1WvZ2Y8|U
z6dMTlG>4gAX9Es4p!PJY%vace6$6gLsh(!7r&%zE>j-Nj16t~7jxcAifm}8a<7tjG
z*RcUgfBxmHc!T*V_P&%+N%l0a^fV`$Utwcm3 at OvooNhkP2BxxswVvh&%xcu9LU|B&
z at iZ5Cn)A&uY~UjdFkv=&noG at PZ0t=cSp2KT++3rSg)*#3I>xvE5ILNpE7wKa=So>&
z0a+SDEeAR(xs}|^0}8N7$Lw|h#l_eg#udk~amDeAOCAqa;Bc-)sgBrmA$~LqvFtod
z2 at M~GVFxB<MU1_jmez#@tONb<Sy`cmJYAQ;U;t|}sk{{nq~ow)ERxqEB1%fAQQpA%
z6jZ9bJo!W*0;6ywzcxZr89aG8 at ILqj>bm-SB>hN#Paf4V>6&z at -D96^ejNID(jKX!
zWd(9Mo1#dXCs_hfJ-o9gM`!P&S?Ar(hCnQ$zUeXK;8A4PF4Y+IG5o(nv=Zk$sn=-<
zq$RfmtyL(sR+s)ja=c2UAR1VQ7^SxriS`qYG=<qFGY~fcl*gvO$EK%ZJQUu*E!@$o
z8aLm}=9fzw16|FkF`dSQE at A*cPk<lnx5FFZcoOV0l9t=2C2b6}2k!H8`$u;vEkbCI
zk)%BVX^a1e9)x2>mV~dpzf?LZtB9IgCG`%SPU^EELue+FW<EvGlwhq_Ut~_(_+XC_
zWl%-RlgjUl4 at kYPt)8J1NpjOHvpN=dy3&pe+~waAs?_J5YN4qZ at 6`8cDrrcZVFc+n
zKl6CtZMVPFOVUy|lb1(ZoV<>%4A6NMC4+5-7L6}nZ?kw(cl-`?*}_vBQ7Wf0mJ}`^
zBI#AZdUeskD}b<T%;!mf*iy8Ua}_8dSg*x+1Z{cZXxyL1J$9|fE_m$W9($O_9_q1c
zJa)CmuBwff%}h}3M(^%U?J!;8jLyPgXYL3>l>cd-lskOR-{~jis&Knwy_9=JdDY-{
z8$cc$+k1t>A$C>qA72M|I74IJM`Fa3N^i*Dfo3JrhEOau)663 at 9P3sO_5_F;a~OiX
zHj#je7*MXpwfYK054r)gg at SYSFhznhTZK}n{zZT|%Y2$p?k??kk at 7?!ESjqI803LZ
zJsvZ4GPQc57^oO at tbNFXUXH7&)>-CkqA|a;qkw4qh1{_xcSP4E6{-fi1$&TmNGeqG
zFC02~hUtgAcj`yn{+IVA=tsn>{XK{k`4Vyj1zugtNgC86gC}2b91dl>_`D*Sa*dLo
z?HwZzj(`vI_=52sKL;ShiF90X_tH{1k3 at l8Swj^O4<VP49}_W*(GqNRi=@wSGIA9b
zo at GuYfSl3}qAt%NRQ}~DogNR?j-*54?b4Czq&LLb{L7jC0T(et?}zMe9a5-A>UCc&
zk`1VR(h2wNt|FDvAN}JCkEgB69?HL5<R9=(ZD5J~IDt?L`M%Vv98p|QyYyFzU=Rus
zKO89xN{u5-o-&f>zS53uxXX`1xf0-@&|xn?yGBhO9Vr=Pq$Z3}LJ{41frHqjlUJo9
zL}Ei}#~C8AngECT)?x1@#>s7XYwHr1)p7{lPQr7!I7nAi%dxdkdCN1H{lP$vLo7HB
zhmV~OD6Cw8NCs6cm!D at 2Pe7g#8H4;66ifh1M`RpJ5tEsKGvq0hE_}kWS-$)wEP-8U
zOG=I&Q1-cdJBibUy~zW;K{VvYKh^cqTs-tV$F8iv%MGEldUmB0qi5mUz7Ncl6*D<b
z%uDH7j2rrwND?HQNkfMs$FO}@qBx_pL&UJ01T7I;2awGz?gtO1w(uM}M-7K1_SJ`B
zg5S2db_Kd`KbX1?Cq6WR`>U&H!q2rU6`9ZvhHX9e+YzrC>1_nmix8 at 0&q++h%|d7$
zm+!y;1qQ7JtX$P{I6^=K*K%p{2Z#y at sdHG}J)m-Y$UCkEiqjldgG7|%{+?(oXh1=i
zUnF-!QpC^H0~~keEBEq_JE1NP_Dmz#hM=ze8a<CxI6RtTBP_>S|Hh#f2T-Um*79^X
z1t)=aUVa|*T-k#B$ZZ_g--ELyf9gkbNBC$j&rmw?xhB0UzXMLd;oJWm53Q5~T+?jx
z6_~H{J0RDwj|}-aTv#&N9_X*g8K5s+bUmtpX{95GX*mp>ociI`UXF&2%PPG87o8T^
zKkxoHOgbg)9D&tlVN^Pa>FM-vTs{i`FBJ3xz~>lf*?EPdRwLn>JB})=bLU0H02fCM
zaD^E_*B^X3_%-K-i_Y9DQsEUzf3YJHdh(GdT}U64lN!VX!cylosC03tmjeWr{=h_N
zcx+Td4QYr;1g02N>%ZO|pzBKAs3e=?f<}IcLJ6id!oRhsP{X=@nZphfzIE&z4z|ui
zZX1-fN}h-M$-k_J-!*hHBI&R6_W%tGnXccUdn--uL*IiUKye|5_4mkthnFZ8&JRQA
z`ysS+QBL-<oF#9=Qwn9AEvWm`Ff5N3Q6DI!jMBUOekyHr{(GBa*k4pTh6BW at O2pqQ
zw<7>+IrF{@6bDXH6&cY_t(T5C4u`c4fa!BX at 7~$Jpc_khUXc__r=Tb&?m3QK0*99V
z9k}BzY>W|?w>f&3CdJZ`sP!yGdkNLSVHR}k<WMDjj^ibxS%6W^k#xa<Ao36Fk$>n7
zsB;Nv_lO|}z_x|C2XCLFt$2hY=|uZmVukd8fDJ||AQwyNTE`i`;9evIyw&19?s~|h
z>k6=HW~GNB*z9*YzVbBBk*pdJxkH-j<dcpxg&YVX(4Q%~{|MA at rk{rxE2Pc6uFLH_
zfK6<R`;k0p25Ex$Pa&0)uG*>`eHy7)10hPKtWa=v9N|R0uFLg+CxD-Y!=J9^ENhVC
zs;4<sS|J_Jmx@)gXAo42Tv-<l=In`D>*?Tuv4HN5zNLUk>bCwwv6~{@KUm&}>bj7b
zII%$QpugzUUqSvLEYLf!4#L|qsJ$J;MWurX9qS<A{lOkTtn5_~pmtYj$8Ox^Ot3G3
z$pu}%)LoqrEZ&iln$B~!X{pr->ecqoAM81hhW7`1bY1j?$;0CP#83rDmD-Z5Ldq&I
zJ at iWgEkIa*0&8(>BWgpjXf#4%#5M(Nk!}!WB*CuQC1B-Gdc$^yW2eS%_ids|I at B$z
zcBlCT<Z3dL?5Z8-%B60lUqUyg^o+phox<fCT!m_c+I-ack`gIbow>)kFO}nVhe$_)
zU$dVnN31J-*7;$_1<{C}0>AMTDZP$LIt~7<=Qsh)lSf>HPH9nlzx^Kb?_i3~Zz0$^
z&X7@}Xs1CQVEYVMXBHR%kT;hl0ni9Q_uCjcNT&KlsyH|4D;&3Oqq#Dg>%j7`6c3y`
zjLn46%x0ST3C$oiQO0l;Q{`%8Z&EL6XcxgW07envSHlniEMz?c;2*0;<O4a3$l{LQ
zOF(WVD_Ot~GaHhDZy&{P at Zo2B@t1k=i8;f^9h%LA(==$dPv6<K-~>(&HEwmghi~&x
zQK1=8yHxl7e4P2<n?q+n2z!ky%LC9H{-xf4L$GWlZT$W4i-0{)*N?;2gX{ddKUDDt
zaqQX^+`Rz80w|tuGhu5jZJ-~UG}0+V()6SpZ6xo=#IUYkH`sbEbv{;w9BoFXbAyUb
zD|hE;XW$!xFOP98zR8Z^>3rKyuqHc(XYg%K_OMW#;}W&;tw%W&WFUqDf8h6+qRpl>
z6fo at EiAv`O@!lfwiv7CJD&iqz7UV#@9BsVgYBc}Y3|NP6`z=i4xVn^o>`6TEZEd(p
z-3}R#4VZVxf at pEb(@{ZXEQB>Qbku*~PXvXX)KCvwGL}FXI0J&9$($|eHIA-8r(Ppv
zkC1``mGB0Q0Kx4BMDQqtd#ZO_N*$r79f&8;qk--%j-x8~W)ftXSP9mmA)Bs=Op0^h
zt{a5vTF2E${*h-%m@;h`4!o}>@Q*!)*R8$N1HN!QbRyuQ;|o7~87xum6}8WCRDhiB
z;}9A3lWcbw?spvZb6<8`UC}&Se1W*?#2*vCAJF9~x08nAMTy=Xb;z^CAlSuT?l`J(
zAH0EuNh(JpG=cv~N^;DSVXpu)y|xmy8N~csU{2m2NGB<(aFif at 1qVu}+~LwG$JHwS
zvBQe3!^u9F;oH(+YR3Qq<52`aZNT~^N5l<|fiS-9BP`U8f#rN#B)MrIh;JjWI0mLE
zKN+oY48Vn5)N<}ncG{zUfcf3iB>J at yXXgT1OGKCf3=IQM13Ul`&!QgeZyEInSNrsX
z1t}aia0;!?!S#5e2pyOONgV at Q__i;70#!mpCQ#eE&<~P{yXbNU$=H^UNv0T-#p8hb
zhB9Z9%)D1-6s+k7wZwS?IP?3{f(*C>8u*v}=pleE{^*MVfgUA8E7mSDcu$121B-y-
z%_n5+b;fBVMk~CGNFS`jGh5Gju!JA{Gb$1MNTX8ELJBFWF7qjt=Y#6?#3o1$Gp}a^
z`?udIy-B|?c^-D9qni?%7jHc at +qLf;<aLLjFK)hL>!mwddpF at 7(lex_i+ua5uxFk*
z$EQ^lX%$ap;&AA|f0C`w^&{Y0kG8<bZSQZJ<~a8y6irpKS32tWP-7Qvnvp+1Gj+`!
zK02>LPE*F>XM3$6Z5xpqhxeRpIUCq at Heh#wcE(_jzZle;p`Ecr>T#S=@lR)HL%>sC
zJG~UWUa;fb2Pnni at F$j|hv)6UDU|IFBn5;)6Lr*|FqaMe)p3d&`oJ9lV`?yy!lviC
z=U_I3tJRdk&#2iCs~Eb!&Qo0E%F%9;yJ!U{k&cjUmK+Hlq5^8aGXaTZpN+--;(Qd-
z+5n73z}#Ww?gh00y0>8cGO0V at Qu)vjIRRBZ83kV@^(~=7pNxaO5Kg=ewR?su&7*s3
zXei(a(Z%=-PMntJp at hUc42sSi0`h)R4`N~AeAM_9Iz`~y?}EBW{|rjr0S&#}I=T>9
z(+{3UObvV&c9N!G69&{&9E;6j$9Z%}!4C7jgOf*W&8NC{(eYXK^#G*|V1Fi$$j=O+
z%M7}x=@Lwr>2#S!7ZtK(DxD|SA at iw|F}vEdv=EptLXujJg6bTC*>O187qIRuDhjY~
z*ucj~1A1Y3uapTg=GT^r8DfAF-3^k4${1J5KTTFoO{e@>$YH?`q74@*haiE0Mb*%I
za8auJLDw!n_*B%U?!nRw2cQer&`kTFm_+yZsiF?6ZMaoUZ{E5)pFha+2fJvk#zK9B
z!RKhR#c5cfwP^v at +`j=u`lA#rT7mGSQ?@D6DFB5-KtH$=a-go^!JZ0)j3uwJhM}8(
ziCP?-#Dj}~$$Jq%3t+*en2xCx=yW1n{_GzpxhJrt0X>bIe)!ZNhImdi?ZKMg)-T4w
z_KXU#_fnb<N_PP?5+3RXnNS0Mv3+4YC8E9L4gAnJCPnMVOp1qr`yG;^HZsp$c5^t!
zW3seq<9R5te!ovXgxLbno(GvSw6{Sb2$;-t3?7fA>xxG*^G|odYN1IPS}pIODvw1v
zb<Y%dYbI7@{)rw8#b=`2cjAHHzm|w;#<_@?qG8D<^Mdi+U_6%@gsd6{Ykcp at IJ*Km
zG~jY7OIl(pJ_xAfG{i@;<7$9CSJ$6P&luD)sk&{M^ix%U at +)5i$p$9(fypADMF1OG
zyA+I;`xp at uaw1Vl>gFF=t}ODcJG2E9B-B9Kb(qXp0^g8ddM68C<O_=TE{_*}r<zho
z$)2yt9KQV*u(c9Kq`{D0MNSukr5 at C%!2unFZGX#mf<J=fQkv{FICCl?`vFNK9mNq>
zt)DA2TF!$Yh|MKvdEKvI--4}&OCN^gS=!aGvt9Xz3`D~=)pW)>+dQ0#27DIkSw|P1
z<WDYu_TFmg<R^QvVaDbQ`|fdosiT00eSlK$XL~o|V2Ewhh+=XYC{jz>p~92=3;{|3
zlc+JE<WZm|0&?oG3-TQ?DF at A1BxadUU~^NusI<dC<Z>7}I)YZiNSE-#uxjX%auR)8
zsqc4_t3!Pp&t1f>u?;x2R-6YDu7+ at x6P{Ox at kbq6Kj|1kNF#qr`-W4}8{K~oZ2fQq
zLEL&42V^*w3Vu^M*7_O-TIA0Fv)A!)fa`lBK)tZ%^j;hu9FtFD7@?|RhdF-Na7ebN
z2RhL4o^)x?wPGB%kR-F2B%Rc5E3&k?Zz9WPlI0!g_+(jz$H`L3Wcgb_YcI*dzdTqi
zy+aaB|6uQ)o=^8em1FX%8w*C~892^Rtnde~6^_#3)&P1lO5hghC=O;gV&O7Qss4n2
zd6-l^Dt`iimYpMBO{=9ocEsT&D8c3dil%2^>rNwuE3^6!|IRc8i))M at DD9#)@RW3v
zbo_XNy-#_q-3kcTw*ut?f&_DESZ<(4{RsZF;TL|&k91xM@{}LTu1fDs6k%$RPlVgO
zA|UCnG0($3*G8BO$8Ijemw<5X48*qmIGz^tNN)sV at t01>=Lr?ghfwd*BgjsY3MZu{
zR26-n>1jrzKEI$mUtds|zqVYTpT90&h%ky3qTME>2n(%?r*rcoA|lqTEm*ra!V6_A
zNGm8bF7|>gUMwUFkvJ8mPi116scLI<S-QQZuBvQZQ+>5AIxeOxL!VxlRbFI_j*Lnu
zTa%`XE-N%u*Q{=|8 at 6sKD{QD~GFfdEb!BOljWuOPUB1a?uQx>-Op{(1m9jLuXvs1)
zEU#2J;{2v&OG8DSuy6}Dk^+8&6_yG52GL|ikHqCzDl0^jV63kfR$J=p?F}{T-OyMg
zR9Dp0nW}^c=t%7p=+xJb!PHn90JLo7*oaB6nnb&`fg#$hrculr@!wV>vUwuxv#~yN
z&5aEV7 at ys~p;?#_y!`bIRqLvK#v{JI=X8rjTxa9Bg%uHt1-Q0ytB_t{GbIX<+ZJwH
z>K!rGeA_$1Y*ApXXs}hAtYp%-n9a~;ol$76*jm%DMQAcriWV!Zyl at -+y3a*Kq_10-
zqfbMCM5d%fEv8TykFSfqHU4<msJL6h8g*-%Y=(+0rh<yib*8kcDyzw6W1_&^+Yqey
z7|h#kaC4n^HoZo)3CSr!Y&7P4Hqmc0RoX=pnZ{UYt!We^6x`Ky7Mn?^sH;OD<)`Js
z<y#O5Hes`=+5(rG7#bO2GcW}kLnWq&v#tLEnlE;ZIt1UEh8i)$(m=;L9Ae)mDkY=I
zXKj50=`E~}ixDasssz#Jrb<hLXtmU_3=lC>Q3pZ-sV6A<35v!RD{~pg5=1cS1cQD}
zE`})cjJnmJg1?U!=BEe|5lxnwD&fAxN^0w?YsPHlBUMyktzqI^4?mF}3dy$VT(J^9
zMN0T6V-w((t)$n?ib@;vF4Z5PO_Xif$~9G@)nK($BYS-i*TLL4Om0lisLL>Iwr@$d
zS0mni5#<G)%zMlRERQISZYskhSW2)l*jw6j*~&3opRM6A>-I)VO at lZ}gi0Me$kHE$
z$s|nr_;m2Wjb{Eo1INUj2snwJQl+WXTDJ=ZCYb_132t?M<U~5Yx9i|^zL|;l>)>K0
z&imdb!R0H}dbQCv at 4Md^?rZh%(Nl6H%12F@?2n0X(O(Cr6l7*Ulw0~tlFwLg6UT^*
zd-B0$al;uX8JrTq*C%g|sbPy~rV<ztxh>QCK|zTqWUIOtZHW+t!tGm!a;r?VH0RW8
zwpLiTmr<bSn(8gq?HI{7H5x^0S*git!C0}iqOs9r#Yz<6WwZ>GZptmgWD{!|DnwLO
zh4JEV!gIByar-ytX|&j_l_np%oAE=*HB?qXzp~LMrN>~Ap#(SzUF6O1$wq{|K0Z#V
z(paXjQpCj&m9?g3#nFrc4kl5=uJ_a}?eC?XZ>p#wY(=(P_{$4lY^@PZqX-jqnONk%
zhL*9pMyxb5Efn74b(%<tdIBZ5Mqw5S5jIpnOSN|b at rO=9NFjsbv)W=uWlKh{@wGO{
zF`8?t#X`ldUn6rN8bfr4rYe&7YhaBg at d0~%qoSKnej4#62sDV9AoWe?A$qbco5}jh
zjS*yz$m7W?CB|V<>-7_`3H1ObYg0|7$#xyy&3XG!*b?e3D-Z?|KyiJeSrRbQVy&;Z
zffPPI)X9%82!^@}5gk!ITRMrn#bB|DWxiLYv$C}i&~`4&u`f=<gVJXd)YO}-z(KcR
z6Rmb?CefQF3WW_ at 8!XKYLbe5lO1IWjZ7~TMCemM6lfk;x$QbGeZYC2o4?fzgVvQeA
z+&YRouFr-fqcv`QT4PP+`e?dhm=T#cL}X}oO%+wR$Zgft$~!BNHtTX~Hka$ylD}A7
zW08b<CTb7UE!(IEPZYB3HB~9tttfGovak_4dEwIP>b#(98erl|6Xk|47EyGm^IQbB
zk;(^k)|)^+o7|volOo27YLkKv1tPowJt-F14lbjnsm6xp-Y5Sp=o%o6NW^^)YiQGj
zgd-byd9W^m7M}7gsIBFhHQP*8X(HPkmSZ5dVp~nUy*|xWSyQ8krz|0C3&BO)I4GH%
z--tdon3a|)uK~t$fSh34fFUCq-qqP@`B8Cbc@@4(zeegCQ59$vWozFp6}}NFQ;Uo6
z*}^N-KPQS03E|;Y at 1GRpdPInk++fH4$Ht;<CE`zc--4)J$t{eG-?nTa^3ZpQ-nK9@
zn%<O$$#;rh1z$wg6Ml5n{oYGVl_1b#B3%Fn+Up6Pb}0CB1oko7D^dQid7b<zuCO*x
zHu#E0R^9eS{M`%wh{ijSVX8A>-;{}6K6>ME6Kp{oH$IBtO^X5xP7&&{1st6~g~nbZ
zgZ+bGuN*m+iYh^GwW4&5ebzKIVY#Ui3>DUjdN5~mg$*`)V<U>AiFEXS(t+(|M=7F=
zUdNw?*J1}pOa68*CcAm7;za(6Uf3Cl*kJjXt+R`Qr5Y4$tOrsIS!Aih`3eq1tX6xY
z=q2nO%!Kd9Sgo}Pxu&X`im?$qu at RxtT+y(_$3~Ge6N~sbC23bi&O;Gzs2LAQ;xwZ8
zd-W#bU{sGj5*{7Lii){lvHK)cX2>8mS~ABdf>E87Y&3BqZSy3n6M;3Wa}C!yt{}7E
z`a!a!r4oDU at n&ArP-&@eMEgp+ at FJXAp^xQ^I7>j6wOuHxv0z=KA#^nPt0!PG>2XFw
z?wDv(SOd#E9YsYaC{+NkV}m;1*&2skJ44UJ)|ZiE7hlxnz#n#;jIco*TQyoO^))t-
z9Ur)nQPH}X*tiw(32Eu8GxV9asPAhmDDJ4~DDyZ at DPym>wn}9ojiBWoOOejI0)0a|
zj7WrUvpq&;bbY?bI)>#5jo&t1biS#+qNbrr*?0H|Ervi5yJ%6au8yp(7It96vv{n@
zyoHR0%9_>H at oX{kJ$d!K1#R6p+GFlu|FoZb90P~bmGAhuZ}J=lVE-2X77=u^@%#$z
z`1POrG5+fH1$=)q2gk_xHXvwh_<j%HALC1Zq5BcOkKM;{PvJXj3CAtMcQL-p at NL5P
zVSN3AIPSOiBGil-#vh(J_ATMruQGrChv%2vR($VTfAI0y>;K_duJ4SC&U%+OR&55?
z|Gz%}rF(MGvDXh~@4o%fpv0c#?>yeRJ at U_)wg-N7`P})sOP{{K<;$PEq`9ys``MAY
zKW;p`borE%{kyqozhC>vrj^SMzBkVqzVbhQmGyf3+9yNK4&JpW=z~Pp)ezmvZ?AdY
zuleB0m)FHF%zpOCo!dvU+a78&EZn|)@bLPh+w)$$KjWoS-#@=|`43cvpKsh$*85?4
zXUo66aNqv0-ulJ=`0h|p^18My=Zl;n>fgVzY<+$E`=R<LUoZV&^S!^$+PCH-=T|$P
z&3NW#n$y3DTK3TTaCyq92VTi=?7ie~8q&7R$ImwSCA?)5J5f-cTgE*<hvyUC_wk-$
zf4cn48}#E8$Nk3}qf^TGliqRf{h60W=ZRP34d{&m;Nb|q=cA)^vt#GQM#ip=&5JFL
zt%?0k?BlU7#=aZ-_t-gc_r(>*mB)QI?iX=?j5{31t(duD at rvau5?1I}h%2_Q_|b~K
z6&F^lkMD^;7C$$!G_fJ^2Z at Ih-%h-c7?7k&nw6B8v^{B8(w?MelDd=nlRizlKY3H~
zL&;6aPbdE@`Ss)vlKoTWq}-p9l9HEFo3b-yZ_3Y7_NVlvoK6`?`7$MB<=rb2R~lFL
ztemlG{;K3vxvMs=vaWKhdTQ14s}8K{U-jN9_bSgSC;&zG;Z_{!iJTU7SJb^x$x)e6
z8=|&EJr?y$RA<zCQJ12=h>DHQh~60e-RK`j|2n!O`ft%g(bIGxx+S`3-2=KKx;J&Q
zZcw*4CMqU7ras0V^M7InV!n)-8LNv;ifxJQi9H%SB`zfHp}1eh9gORXI~I2>&J!21
zV$O=f`11G_326xn64xZwCO)3{Z;3HU$w`kSJ(l#nq=4k$<Uc3RNfA<3r97BoPx%3~
zdp8At6C_~&33;2MTB0sS&5W*$J{0{{v>g3%%<-6aVm^x*ib;!Yi2W*Fl~9^cmEcHl
zCA^rhKjF=U_Y=NM2ue&yOiS!ZJeK%BNiQcwCMV)gJh({wCl9zi8iPwJ$Dw?2Ct^;=
RoR7H}b0voUozjgz{|nl9a at 7C;

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/decode/demo b/edk2basetools/tests/GenCrc32/decode/demo
new file mode 100644
index 0000000..9f9601c
--- /dev/null
+++ b/edk2basetools/tests/GenCrc32/decode/demo
@@ -0,0 +1 @@
+This is a test file for the GenCrc32 python tool~
\ No newline at end of file
diff --git a/edk2basetools/tests/GenCrc32/decode/demo_crc b/edk2basetools/tests/GenCrc32/decode/demo_crc
new file mode 100644
index 0000000..546f91f
--- /dev/null
+++ b/edk2basetools/tests/GenCrc32/decode/demo_crc
@@ -0,0 +1 @@
+U@"�This is a test file for the GenCrc32 python tool~
\ No newline at end of file
diff --git a/edk2basetools/tests/GenCrc32/encode/PcdPeim.efi b/edk2basetools/tests/GenCrc32/encode/PcdPeim.efi
new file mode 100644
index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46973ac92b32931
GIT binary patch
literal 18912
zcmdUXeSA~Z{r_zf+5mwYAYj0%VFVT|U}#F(lD71jA}xeIqy`GL(3G^4hNU-9z9N>T
zRl_kG+jI}#Ip;R@=iKJlrWUHQlxhJ{!ADT0LvVV#paW4_5b5vzx%Z|m1)SUK_s_2{
zlY8$upYwTsI_Cz9mvjI1U--XX`TuUABcJ1nV$_!*JkG^V9UU|FhKDU2cYKmORRWOP
zV{vblpN+WCXZYXoMG71yMh~A<o^{t4zuNHa3ps8J=zgBdab;Hn_%Fxi2<~P9YafD)
zBp1ml$u|U_k>fmbd^OcVHOJjI9utuLVdXjmjLYJ<!Z|V+*AW94=rpWchr#Wi<8wE7
z*T^!FY%QQo*P(w|9G4S)c2+RKq+?r5T2^M#hw>)%r(J4Nr}Z^ygRccns5*OM&psN7
z4|a#PT-X0q at U^p#Tx5ABZPlu-m*u~TxnV5Uup*N-_!6M8rsC}H0QkghRRmK3a6&IZ
zoP7dM8fjcvj(Mz<U_hSWf_aDff at Oy;o;Vlm1LWoFe|N?D(q$#PpbC!vHQ({UO-(oN
z!hH+>>x`Rl*^;n}E;MyKritG at Hzp>`Ck2kH0(~(;?A-8j*NU!+TF5Oi2jV*M5B>f9
zZDIe2i)R}mnv-#-?u}n~;zHGMsC#6nxQl0N*GIG`N7a5(8;lR^i#>7f3ed^{gzF=t
zPHH|OIQ0og<{Tsp1Bl53aE(NGd)%i5CoZfS4mEa=uva3?;%fgD=my~{Ku=zZO5!EL
zEDmrWys8TdSN9x(TLez&p-y9IxwC?APYrG{8ANU}$L$%xsko$LPS0_;87nlftb|~Z
zDK(g9N)Yv<IL_q?^y&D!M?mW`jQEd{02Ey==GU`)wdxCi8ky4+TA~-vCU6|Bgia at W
z%<%7yCt;x7g}4*v8?g+auKtatkW<h0i^dx;lCO6K!un9LLG at x}N^RO^jei_WWJw$6
zA4x8nwoEOI40P)3`+X-Ov44qS#kxReeBgsVjI|!~e<zea(_UmUHhI`hfiL at o>QIGR
zRiO at T(%3(1nhA1-+Oz_V-vDb{(lP<;AA>=CT7jD8gmHmxo&7W4F`!f(1k%V(mZIvl
zzuhz$3li9<?K!G#AHWD)V6XaKb(;NcU!<P%tU&VWAa(6lLwDl+JZY&dyxHvVG(%Dk
z`J{O8MyUJ+ZO4aE1$Zdl#bmgst7_HC6 at eG@UFGal;KRPaDIFO_{3WJB5V^#`H2urW
z&l4^QugOs^<J_d+RKXaMQe~XSG3*L#G3m$gt;ax4G+zhB9%YLSqZcReZTm4~?Vn2i
zo-UIxlvFT{qkmZ{7zEz~_^(s&PrV#}i-f<%q~nl03}P=HLq#UtGAH9a#sZG(cX(t(
zs)dmUDZhws5=faTp~T5F^^-v<EAWDDD5XEZ^rW4%%PCDFO03Dan*&<*w)mSVxBw5^
z?-W17y{pO^hVIxuRu1USK)PdR#A+-BL;ViHm7%9J&^D8tp12nCqwJ7+nWh9bw15Ek
zGQtddNYQ^KqdiL|dY-%$yiRt&CL<I+8^I at grBw9e*#+0p!OIP8VIf)U!H6drDYst$
zpQP0USsBv$7ZDI7r%zcwkJf`JJtywOE%-5(;L9L0br?RSFcoE>RY9;tLGU at Ai2?lp
z10G^PcP$3;l=Usj`lo2Utd(121`>z?MJrTlhB2U05NuZvG${-WYT#pxc(Sg=K-cxM
z2EM1Pw<-)k15e_1m<Gaw49Eh?X4tAA`Kf~BQ#?ntV1gM^#nr?_g3N?@zzjoi%vW$c
zsNi@)!C~n62W-z?71<bs&J at B!=9Gfaa5dkMVp6j1$8brq?&Au|3PLF!!M9`(8O0#@
zE(QEa1>7uwKThE0C`HpCcu)cVlLCI80-!!-c>0-$z6f&8k`~@TPU}z>Ql%uP4dWRu
zW0vv`#SUCmLv_%4K+L8TPXp8tXi+RQ;v8v6Jc-tXWf=wnEuoaH)Ho}w=bWXU2N5Fm
zSwX=xOFW4hg5VaPBJe&cD{P^`e$+qCzA3 at 4^@JtJp3`7u^uh!o$8#D3&r-0JijQNd
zlle8y{!Iz}n+zUfGRKvQKg6h~8Mhs&2w=H(T#|^GdUldTo6 at aeRWI9*GNoruwf(R!
zbCWtPZewbwKw~%f<E{PnX0<RWI}p|oNE-5o at 8eAd`&i!xk at 24UfVn<PoCS<1VVJju
zC3fruYW|*F;P+|lWBC9jCUzQn)mi%?r(TSK5+!FvN<)YYq)sX2mx_Ng$gWTl<ylV6
z`9uaO(Fn!p#OLvJ^~@O$7=1zH0V#X_n83<RrorrqYGj6zr3|VNT&EDMzntKk7<RFx
zdbvp2ml~UV&@ihsnL_%}X-R(G8cxemV<bm2I!7yvrOJ1!4y6yEzQ4(uz at m(hPahe_
z#%?c&7Qk*QfGkI++G{`U`-tVkd6qdmyCiJ}7aD>~6U3t^JK!=h#&cY<<bFK6;B->H
zrar{_dXBhaEXQr<q_)IaAG=&!jAwSb?VNvt=Tr(zbK~;esi_FW(IiMMi<3JTXT5s4
zXpDkRlt4S$;6^g=`$TCFR<m6E9KkH1RbY1w!2Vf=h3Ckqt*`g&12AfFDGJG*8rCa{
zsOaqIQoen0Ubg*=Z=%OM5AHZy6?I3igd*1*Qt#rQ$up<|$9ccDG*qr(hs1I;2PE^#
zE{ZUcTD$@1tgo~EIpQi1BH@)8rx=SVXaUVoZj|9+dQcH9Sq}rNUWOu|5Ud&#U3G;@
z4q~Szt7Kr=1GG#-%ih*rOFQ?=%OveA8%POcG?GC41s1xx1}Abb;Sj at UK3y)#6w6q#
zCX|1%o^yoCwfpifB8oV%L24rpTx}lC%ZWwTo`*6yan`lxH8ihP<`s6;^)Zys#4pgN
zM!6~{u2`{_7|Yiwj5)+s<W3}Tg|#byh&zW^_4Po+qC=ej^+3d at L!?wKkprh{%C!=w
zI&f<c&qD~zb)k>ba{jnopxr`_G6YV%d4wd<)j_BM(TVXgh}2L{m7IfbFDT&Kx8|`%
zOJbkuQ|c2rzY&-XEY`k{zvmIKmKBt4e~epexaTLh)V78B)*x>9c4r}b1-SK{C)DDY
z2^1NwwqwEuwsltGd#X#FU#j``jRn>NZRdo_P(>Wy9&7IsMr8-~YV5E2&O{0&N;kKC
z;-AFShk~(@htg&p@{i=(^A5!Ua6~qsKC!>rWDI%ZLJhBQ*`f7VD2(OX^Eu2P#Pq3%
zD)23C7hJ7{I_Ius%cPzU9eP{8f1<}h!8tW98l10#MVB~T@^EVy?SBE^`V<6VjkDM)
zi|SL=`)Tq1 at jxHfd0egP3dTd?pG5^d*q=gT&Y)s;*wyyBa3`rR at r}+4YDgFs8bkSU
zC<=OZly6sM+xOBe_9tB$>`y+4IPCkI7LgEv7omrhoc&#4j?`<l9S|l_(^i{i5EA-P
zR8X7J&_eq at WnIKYfkoBb<HJUS at MQ;HBy at WM-yW11e!Q#{SzL=|H&})(_IdV(*Z_B8
zO=c#Bw0l_c<lb(QLYV0BkV3vYppZ at o<6?_bVF;b-Am6U83&u*YS^g0)LtQK>)zwv6
z&Kl4Gyo)6G7CSHUgxqf?VS)ay)D*MinF at _bGL2_J11axz(iZw*7b{Oyy#)d}GI~KT
z*YW)_SQ_yWxjs#`X=1?MFX*WF)-qLXFz?pboiP!0P?Z#x?8`c*OOh<iz$HdVp-ZeV
zi!N$mDqS?fBnfqW{_@>NA+7k{IN-L1yXsZ9b=Ak-)@2Q6b#?ZP4}73zon7 at KZtE&_
zGGEsAcTi`@-uD3qIM%XTlgleY>TcCbY>TdsHRvv?&Z~M_j|qB+^(rEg9YNA_)6MCK
zlf5E#(Cs01RQwZeR7crC(IQO(??jK*2EDfewan8Z;;DkYf!0#8)FE*TV9RNsJI~TT
zM|48PsE at 3B<*F4>KNNqygl)3$?G=TpUbrC^{(>rz<cK!rot5}D- at dRw^)K?qWAMgr
zQP;p;;oGz0?0fwhL||FkTwxLc<pw%6_M^TJ2crh2eoyTX_2>Khu`D5oey6?YJvCd1
zGIlR3O1&tyB8>;**bxab>3~DrM|nLm8Q=zXBrt;u)T)sWvekczafrVo-~x>`?20 at L
z-l=h6Jr(SNqzMyg;<EuwEWi<+OZ*{{AjM5?0g^!;-(H%Rc-Ven(*gwXNNYG42aX~$
zD#WHfLab&|d1Xb0i{h!T`um~BU|iAxF<B}#65+^XBq at KqBw=KX<hBRJr=@wxjiS42
zEo^@VL8Gk*QX at B7VguIK@$Gly0mBs3`GO^h=NG0SHTv>A>BM{yDpzDSdmH9o6;I}8
zuR^j>60x36NETWcvjkC!Xe01SfXh}dg~ePF^E+9(;aT#|w*JlIJ@*rs8({F6TL`9i
zAFyNz<2}#OOszaKk!E(&rdl*n0QNyS<2 at e|M4b$A7HQD6eWkYZqY<iJ{+WZl at 9@vO
zas7eb*QOO~df&bN^=aj>Nm|j}2EmXO=+pQ<w}xAf@%M)d1IOb>P*I7*1<UR>SP^Q`
zee|+r0ry38;%6%UDzSSGBrg)l5Rp72wh&2?18br3i-S$6+>lNmdg$>sDh`TR#|~+s
z+yYaJ;9|uWJ9H$~6y)XBurQM4Uko(s;*qVSR$toK9TF!27BlFd4s<QUPNoVeQR(6g
zDPZU+;FZ;U3Y1*Tsh3U)R8EuFOmT=~r9M1>=Py8~f1 at 4-JS6VI6yLrn&jp=Hy2Z)D
zA_6DtzD$K;U)3sCSKyRZ3c?HQ9dQB}L8q>_ezL5bS;{>-^HIP1oyNcmdNkpe9rT<4
z0+RVels8%I#l&EF2<bD}VA4C_Zwck46^?#g-~~eliZl)=9)bf<+=!0?77f3Fbc?-3
z5zq~%vPGdn8!1TxGL?T|*hT#V5xShna18Sm3>PlP at EgK_RBWP%2*%*fh&w|t#u|={
z7|0&rXka5q at q`V;yA|vb_E$RWY_v<nr_lzr9rNGFw`b*L+54hB^DXc=*<f~}BYXC(
z6oKT~6J^h~4ggIeAXq6>U{LMDrbkQV$9j%wccOw`&-S73po2SIzaRf;9i{!R;mHI?
zEC^iE_>K;`v~;YdXPu=$peaOdxPTjj$b(B9jFF_3COzNYlviNy_Ti|KDrRtijqg+F
zfwHURPAw<g44oKYo`h1d8Mz6&V9Xg^%xXWq at y4J^>eQl}oRt~}vx+;<B5&GH`#(g<
z1(h81U$^EZ?kBq0_RgjW&I*V1b!@($K(Yb|yh_V*%n})-VzrK)-u6*{|G$i?&!`X{
z7S>bE(+O#G$r227X%WWJWrr}T<9+bm(}D*%l%5<AV?TV{)k8<pCFm9sz`LszUEN{~
z^jpzP7}(-u)mYU*c0_ytIS%!+ht8!Xp|7JQJ-x~jgS_O`$eT<R5MzWz^p##n-<E)=
z7H;Y|3aS!)+1kZKT27W9kdX0gsTvu6i8}JXEIt?)xxbdh*W!BL_V|0_B6p+rc$ccj
zTS$)of`3Zhp=9=%R9g(Fny>WR$kS0FP!DithUyUNPEiXAffw|vs?ZxolfHZ`_%6(B
zU_BIp#rQIcW5FitBim9!7-Iajw7HX7i67GOHgz)&Q9MI-JSt3v-%a$SQU<CUfUBqN
z1*#`onyfk$Qa{ersZqO0R^wZzKoZGve5*#e&Ei{Mf~8~&Cd(F_y at yhuR4JStyMZ4{
z7(>XN9nZ^8{RkMc&dXTJx0hvVSVN{74T9=lstSwh2x?mb(`Tw)lkoXRu=Sj(2i}w*
zB?Ww$9pX)2LKGZQ`)@_n&m0v}k4}RUeCezcQ9Fa8o)S=n_~S3A2`$SU1^-B3d!-YS
z#QpYnHpa4d`1Zr>6%~|TD!P%uT<pb2h9?e3;L^JT at kh`W_6FD-Ah4TBS=$Dbl|d3P
zb*8E-GKwyp5miW?NoAVOqojUbYHQDk4Umx?b+UEngGvik5q8Hc_6o`RrMQFo$kQ&V
z!?=&|e>8yqJ at Q{HC`kOG^Afe{uM5{f0-Zf!V6Smn7?W*($@d9WKI(VT<s4E+&N`(E
zB0fW!reg>tC#jGrWPkWBp+-Vlg{Bf&XbKuhv+A>6 at WSzaRUjOT7cGIF82=}$qzx|0
zsQ4C^go-cXfL!P3FHzFD8VOZ};)c>jFo)s8XyHat5n9z#0CduNB(7z24sn5<dG>M0
zDAj*D80qkm>mC%(0 at B6y^&Um`8Shc!sH9_qJoAn;^QyQ}#yr|7HLuS?u;>|#92^q<
z^UrR<QVDwv;b at X^JU}?C=UNtU!qjb-vT}INH{P?K0Pc_h1Og~%Nzdf`f3FG^#K=tq
zg{a1UX46;%j#kx;zGyVgO-6^*<LsxK)H`EVbtQ#Yb(OMr&UM8I6FiRqVg1(SySX%U
z1m7Zz2r#4d0PCzx8!b%EAi7N>vue|{x&F^qbnVK<^9rbcMVAv6xDm#kVhyLp2$Mp-
zetS0{ThcY0{|lVw>?JFK5*pHXq2yPf3MMAL1-n}JK!6sfXBKFB9-NP_XJ91{vEXsg
z7g8%HPJ~|vUPxfwJ!fIx3X~u{bTma-yJKK&JJ$C68X()gBxW~8Avi)TVSk<=S^$A?
zxK3IB`+ at acn2osGUdI$14QxF(FtwkiZbjRo1M~L7o36tfI)Zq40OD1GFlVth92M9i
zv`E=cgQm)|2Q3;Pvj&)W1CYZ-Oaehk#K?Hn7ZLTnaRm#v$G3+4=kAS at Lqo}-%bemE
zP)1r%%WtGCd!7Sg>6m%i(5CMLco<c%SEZJue%5kvDM--qyc+pN?-8-8e)e*(nu2i*
zYh0 at +>YeN}*kyu;vtzz!`EJ54>S-z89 at l}FZd|Q>uV7&NYXj%i0upvXtm-tTFo508
zKgrIlI~p_yne$>Unfq`=A9B)3+#iv1A=fyZV8p847DF^i5&i*oToMCxUIiw^8K4>M
zY}M$$lF?A0d%{LBn14}<S;%4VB!JJ3^RTGQX+32O^s0zw3fS}Pvu8;HDWs$$iC<A6
zJ1FK*0B*Z<9P%JwErjGTdB#jLA*VrXQdkqlgqCPfjp2(NG7g#w#7w1018+V<TdQNj
zt*kq=uD|!NUEDaqQ$vcgF5mqiuHrGcH{}I+>L^VmD^p>bviAyON-Lb=g}+m=)J9 at i
zx3o)=&r*<X!1xtsrFTn6Z(?4xlo_Qw^ag1_I->Q^Z1BclqdKrpbLHYi1B*jjHG|j(
z*PEsFH?i)ZS1spcyrZVjJ at YJ4dVUuu$veuirR*)4=I2lyjy0*9V+CqljKDlN{gyNx
zk8wR)NYe>{Zq1PSr=|HhY!$sC9+ZhF$@uS=0I(e8(cr%h-kN|rqkoKjj(?<mmD-PN
z7KxP)DgpzqaB()%$=(GywR2BaI=FsZg~Jam?&|L#$Ik>-pwhXJwvTSqd75cv3(c5_
z-nlMb(0LxA!8>V?SD4TSPM&6`aYlu#ibQ%HIv1QVzbd|kkcVgM=<Ri{FEX%~W8IN2
zhU9qJsA`PPfA(b{hrBxZko}hBaLnIAXcy}SOMOw6EHwTD8i%Lo-lvv9>1?GVU$hds
zW#|>O4iO=PR3M%CZac++Uj!0 at 03;@OH0VR>S1#Xe#8u2Cz}|gJk(mUW_(MD)Q_ZgD
z`u&;?S{Dj&@P21KCk6+e at M0kr1jK#d0I7<0gR)rLPN at lq^o;d*6;-m#Qwb^_!sL*!
zQ)=5U-YnCZ08ou%nT&0-giVV>0Cgnx?2a^Cg+3_}v}D}25DWZMc61QkQ#;aox<}AZ
z3^vZccHyS$Vd<N=IHe8cf9^zPK=AW18kT>KZMZ1Oy at BMudHL=gBsX>0&@Na<o2ntr
zL2+uFKhsevr2RPvBF~UuPU|_id759d)yT at V_CrmR19$3T?j0v+*xpW2b8mKxs#sTG
z_iMJCtYV$3<aghvbchphf|bGizTlk~yW=SLOz`}k((R1pyTj1D_#!-oHs35?Ykj@<
zj05j&de5-pzLT-Ram!ip=LNxh&FH<sa_#ouPQc$g*8ePJ$Edyor-V{uL7Y at ODVDIB
z9R<N{CpjZ!I$;Jik8KD1-|~Ej>eR6q0loV;NncEK2mBI=YXT160myqQGXYo%z{pz|
z+C$az at hoAA{nAFQr<vv|X>RvEywSuB7codP2AWw-Gry!6SeyGT*<8pHAHyca-o0_6
zCrmJnfRR~v3A+S{t`*xP0REo!um~0#2raJI>Hu9~2Q?SsBQg?$$FTrN`~yhZ6eKd#
zRt3{E1rxC$VZs$Mj)$dn)S6u%o_3hp*@(8SpKtvFx{zk at y3~4XYNg47PZ4$|W;8Oo
z(87Lz7V&@VR_%q3EjXVy#IQTHesr;scz(~)n9dJ0{GNFJnegb&X<!>bseG$+CW)OW
zHsI_Cnxawo6^w-s6ky+FJzzbz?PS(eycRAp<rM^1YT)t-_ZFGP;4>B<9^)o_(gS^?
z_|{*d{|fYt!D+vAGaX%(U`pL~kV7QUff?5KJdG*jF9YjU!PT_*K^540o!G00={zB`
zw}13Y(~7_zemoR7pTyrY2HN3U{{qzn&d=iS`95y=)>eG8&HxURTInYh0nsRU1L7$B
z5J!yR+vtcZa4@##MS?=s?d{^QZ}2CA8CV32pbk%D`8YjS2lI8T at FEG=vj*0n5iE#A
z05N(1A`-8Rv#g8czdfl0dQcr%8#t(mtR_Zg3u|Z>>yY-c^Cd1$g1Yq_L^lP_Tlnw(
zf|$WJ(t0j%K8?TU9z3q=9;Ny+^qs at 1(}6Ez{FTr|mBQ-2z(FJUjJyh#!8+;g1(-i@
zFeY*~a6V<zMB!1QY84(Lsz0Nz`y)XbN);GA-5n4o2qT~ue^ub1F0$t;8YZp+8z2cz
zB8W>eOk$tHz<5Phf+>%PF9vb4eoqc at QDaKraA<R<mK}*C;6(R)4S&xIvaS<IKbYZL
zv!Uuh4;<reH~`Mm6ZZ=%13d=5^&g0ZK+hb$)k0?K8Ns)bRRTRD`POe^WDzz&d|Mbm
z=$fUfJYWZ?KQfZhPvLM_WaQh!@Gu7mI(i-exC$OGc|FK~t=Gd{{iF7jWudV?qQWoN
zZo?gUXwL+28t7Tew|*66Xib!%)^{KuI1{$g*JR?cwFHxrU=S9!J=&}CTu40g3eQMg
zqxP7H@=8$VpUEEKz?a&=x5v<pioRkU9t$AqsXhtyGaTaBc#wX<)H4H1lz2kKUZI=~
zL?}feMDn1RjNf*$A3OFvZz3JRjx@@;rjtuic9}}PJQY~4M0Oe1Q1fjP!ULPHXRmEL
z0iU at ml+z#RGj5u>Ztuj<&XeFbGB$92#HPvX&P?9ceLJ4Py|l=Fns0j^`dsEIib_>O
zQl(OwctPLuE7JAJ1913l2U|Fl^<&K=11G<Npa7 at nW%xy%&TqVCME(qi>K7vPTR}Nu
zHHc}7SPexoYre=f^lg8m<%BwXLUnJMY0SB<SYbqWo at q=X>k1s#@DJpf#)4*k{ix;G
zM~@Di{5w){0_=&xbk|K=(6Kg6Mo at qm|2QNSS~<J-{lF2f_wNxil&Ql^hBQ4TG6}O|
zxq97l*cmzdE{(K2*4kg;#3}IYBBQf27u!#|N!&lWmlCM|dUOy8{)yPOo}P+iTCc*W
z8R|AvMW)rOtgl1+m8?^BrmDA>jDRekj)bpa`w}V9r?+eYNnspv_n1(2KdN)Dihj~!
z!uS|Y7 at 3XNg!D^H6BLTqCt#3|VO{Wr=~I#8GmOwa-*yAUg{t!?czbm8 at b%sW&l<Jo
zL-<tBkD(_P7urf`GfV0lsO28`^+o6$1m at f0LtClUF1!+;K>~QDfQRQ7jHRzJ^rfY*
z(eyQnzDClQ22m1EXVVRcd}@C at p;i+W0?%o1QjccEA)bUY2VO{zI&5SiB?ai$(DO0E
zfF7i{m(v6(^WUb5F at g$h4FwIQF>X2k0BJodhvH{C*Uxby at Sz`06~alNU;%GWV4|$Z
ziqO^=*i<lOZAWQ_0jSfa8N6Pz(=|0-u%g-~__Xw-<lU+K9-iM5rdo|cy<dVaG8N)Q
z2QXx-E=2wejP#3V6Iy`;`;jKRX9G|I7>t1_!ADsJrBi<v7UU(qBsC13{2!^=!2uqq
z7%};6IM6g`a2BSM>y6ZlCx{(5vSWv_rvpA+L`^H<Lp&$Ax1;8_9uVe1_YxK&uV9)A
zOg8}30t<BljowioBW at UqiEt+#VqdaBF1CFvad8*c-a%Z{Tb4yCuMH>B7|yMBC=J=y
zZ;A2;H=73BH-V=-(>QPh2Gb=O-~N1vj5zy2F!K+Dp*6id&t&2Ql;u&Rv$n^<TH{fb
z`R{dMD766Tz5_S>GfN1WZitD9C>oYRQZEQgr%IASNUH{DWA#v)fYz(dW=TOyWQ7%g
zO3#LWqzBHc{KeJ-S#*y<lf+eLQvvuft13;isM90fK;&jfHzTSM!0PK~fzWxpE|3gJ
zM97GQ#ooz(caB`-w{0<%k(0oKX8Em{%u9rA$S&Q(nRiB=;?XEh3E!Ps3L!aq{!QfY
zZI8o3vKx^Ez4;n4x-gn`AxE9-nF+1n+)6nrxQO7A+wB#fQM(O?!Xh0zhz(tROh}(3
zCV&z6W+GbN$aC22V22aRH{fSNv=#E}@g_&yA%W;t!eUd+X7i#YWlLt7OY+OgOO{lX
zmSvZfm(Dbo3e|$YY3590y3sNdyUl7}so?dw3%#rJ at DD1CQ!|Wa^G0u7jq&E01h8g)
zrMqTbQe|<CyVzUfZ*V)-t*tC?tlQ}JHB~oMI&$+W9qzhH$C{csYv3N-sO-|x{F1V&
z{DMVQ`6VSwON<IdV}^0MZzeJ>_LpmFu*NvsSh~)?sK#h%p5D-GtZPCCYh3L%Hn|1-
zaB>(7W}B+ly9s2C-{*5T3dW|*O at ezp;h^7H4#1ar+{V(y<whW0<MlVx5Xv>4>c+M1
z8l$(dVKctgxaV9Iep5B5xCJ62^Hkm7b63}Fo at J~P6l9HFLE&)-RO4pjdZ=&?$!0d^
zEL~cZpAE%ZGBW1Qgo+1g$?`&$TCcyc##q;=Xh5i5-QXrEhQfl8sHloOQNAvdcTwZU
z>IRsru5p83knznj3Q$6gySCcjfFW5Ko9Y at GB-RDG@i)0^B!Xq$b?(L`{`ITfK4YSB
zF1*5A<XuzUAdTmOO at W4Iatr;SG2A&w-a%*u%M3V>rP)$$Oiwo^CC at Z&G2(IV<&R01
zKPF%Pm>PYAmuA2phhY1r{#fevZLEWxC7)bEo^uu6;WLXGYrR)YT}3DG*Cp=eVH0Fq
z^YF22YVaDmvNS8=rpnUd-#cAZr<P_#OM`G^6U6Nm{1?<UxC^TrYZ|U1H3Wg!d8>2k
z8moPquUN{N7rKSgy8m&L;$_(Az!j3hw6JY-8t_s+*-(>H-Q>=$sqwj+nh3vzE3OvS
zc&_0<L-Gq{mZG}VKJZ03rPz(2+ML~hf0k7()Oi~*Re6;$m^jB at TMPHS!oq`VC5h4{
zS1M5ckbcbNQifEPOKv{YzlQQdG7$sijR>~2jR+oiR;l2tYg~IJ-D}7c#UU>P0<*$^
zf at cP@jz#{PD>*(~fh%%1t`$6Rs;afHTU9|_v%4l+$nn=T)Kp=hxVpJ+y?=dn)0(<E
z8I8Q)-^o#0UF#m?BhTF=z#mA<!=)h~r@!gd=IJ#vjnk{=8%whb@=;Do7A;v=mAiBa
z?y{lBs@%f-+{NbU)iaH?)o{R?IYwiNTk!iDk at rV&=2EZUx8 at 3ml+c@rJ|vO61taEM
z?}p8g<BI1 at ql^V}QtVyb at R#ExtN&-ZlXCW=M#1fau?H2k#2eM}QWU?2>J3JTZ$)pj
zjEWGmjON_J?2=T}Pnp?SgG|e*l#AlYtrkj2w|R9N>zcfh1Cz<GWjn+KqMf`@zDUVU
zx@{7Mn~lRbD!uQ at 3E;=v74TI2qrMi6lT^e=6LNvK)@Y`BUbr-;YGL`Jys9#nBOh8a
zD+^|$Kp3wTT|<0JHrHi6#qb!D0~|7zxHrH*E6EcuR^hAOu)*!4nE56&WyMFy4aAw^
zE+|k at sVFJU&Lr6(0f{jXcV833!+FFr7$#KUZ at 3PnY;%oV6P0BMLpKu|hv2)6oBx29
z<!+z%GJO?zee0{Q;ssHhOE<2s9clzeL$y$gHF at sU{<RQmk=Nn%36;@D$>-!254pfR
zy~savK5o#jx$BggD<%EQddRQ$>FBaDYJwczItn}@Tq95wxY{f+5#=9!=}`75$2yRe
z1z at O*-b7=W)|q7|7$^w;MQY&8S68Z>cm5On=%d$oYm`JRdybTRpfGgJzD5j{qMM?8
zGS`NLBGW~N`C6{8hE>WuQjGq`OC_;5b2MowOnoy}qKi-_74g0yBUdg28|jUHw60B3
z)x|3c<#{b4CX<_PNo}4z-I6@;mDD`ll0;AP&G0Mvq>N9fTkodzNj0}9U&%E_Bi+uY
zFTer!Z3I6C9XftsDE*cC*Q`N<qdX0{R8;#KsVgXNT-WH`)M#ATuz3T$hUTIZdF}?c
z;5HVZNcw&5Arlq8y357~Rw#L^%<DCluCH!r7??nYM~_G8Yk+|wZ*`3^-{<rC28M8=
ztn3jS)jqVsh%cHeZ*1~!*nr at 6lZ?t=4puAVC`9DZE9lek66}OZXm_NnlrDL0>bi%~
zm*sN!yn=hp0I{Xmte~!xxSOQDKvtyF+u%p5p6m7b{2K%Xu`*Zy+Ygdj;x!h#Yw8B&
zrYUJ8y4j1u5}yUM-HHy-HCr+sN_J!2p!C2Ab~bn$n-sYT5`*hedtgy|QvS-|GDfdI
z%Aq_;gqo=24q^l$c?Ws<ME2 at oS|<dHa*G|q6o>z_LP6P;gQQ9C8gIj8(2E+^c-L=0
z3x_0XbYgRkUXCkuV+UC$Y&JUUyvXY`#BsSLxtFb!xX;IS6y~^Gr_ctrQP?+|lhWiY
z0NBAnEA{*GpR$}b9?_veuPegl+h4s_p2-E5KJWTE>_0DaT+7 at fYw|o>N@`kmPHtX)
z!Pn$>O6_Qw%5BNb)}#{m`s%vI8mTuJB#nROfQOCvH0Q~mp>zMqy#c_nEwL at P0}l>2
zxed7D<pH;5I^JI4a~D2$<3s-+j^E=1prkaf^oGL=!(aa7JB8a^!9zQ~{UiEC*g(CK
zI`>Mdy4ECHa%EnAPWi$rXK9jUZd&D{Z0k2UXptAukqheM`Z*hFRs;Y4Z-3K^&&Hf6
z{=>8dXKnKqoSk;&i^g3yKYc1W`)Oxt*-JNl at RVzv_A%FoD{~&K8~yTwf4+0uiixb)
z75;uva7Nr$xpR+gUv&D9zlwZybKYN!6Mk3Jp7@;Ou~oNMc7Kr5(ei^wZ+^zm{loP$
z|5-OWJ?B2N^{L~(9q&n>d}sPBkG|-!@0ZX1=hED*OW&RUbLW$$qR>B2+x at pa>9{RH
zj5~7cb9sRsXJXyGrj{Qe*T0J&QTO1ZN7B#2$BPe*{SU4$<MR<d31hJj#3zIgjXj3z
z^Z2}n&sX at +KUvJchsNk%G&JKw{}yF0J|E*lW3h0o>G%}V75~;{6KHRjPJ=j(`1m?n
z-xMeLF8!<cBK!se_bp-EKUcufiDb)Z+<!Vk_HX*<{8{)A%)=PpkNaBiFqEgLukFCi
z9m&5;emVK=<VWW{F)uvt$h^PJ)7lbk78|qeu>HyQh3$e(lTw%BPq{0lHKje}Qc7y-
zU8%cMxwOo*yVHJ<_Vcud(+;HdrJ3f>od193zc&BG{IBL~?BngL?SHX%+Yj0!c2jyv
zdV2cK^nK}HrH{xkXC!5mWvt5hNye`-Mr4l3v}fjL`ZBjrGXRF^AEzbH&77N`v^42w
zNxw}xoRny_TA#P>v+hfNExC2xU*<hO at 3ndF&ii~`oNbb=#TK+ZZF|-BH``g;loV4+
zQp)O-pQijaC7kkN3ZFV7H8FKrswZ`Q>cP~vQje#ePQ8%2DQ#O?=KR9>d**k|7wlW@
z585BIpR<2yZ%;pv{zm%D3~Ppv(VFqSj4_#$GA)_wGKI_sGC#`vG;{TWwF|zpVB>;^
z7W`&Gc)^Pc-d}KX!TAN37Lf8E0ngW4jFx=Mt(G#2%kq%r3CkYKo0iWl7cCFYeQfTY
zx%=jRFn4y+yrjY;M^a1D_N0fB9#48cX<yR&Nn(=5nqakCS6F at 4E!HmUE7p&#7p<=3
z)ye;p{9^Je$<}$z^Vq!m=lw6_esNx|ZL#eR+iqKz?S$=;&5)9wQjoGOg{4fh&$j=<
z{#Uy$-J5<_`UB}TnRjFcG9S!*1e{;LfU|HMT%P+~($h&?7Jk@*`z%|Yt<Y9vbJ)sk
zx7jLfx7%uL9$SNLgH5nC+qOWnt+sn at _rU}1xBb-ipzUGXBeutFzqjqQJ!RWvd(IZN
z?YF&bJ8XN?b`;t_Zu`(C+D_R{+djAT+3?S0Qq(D$6m5z=#gJlzU1p_NQc}TfUP at s~
OQHmp_46oNX?*9TcgYjno

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32 b/edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32
new file mode 100644
index 0000000000000000000000000000000000000000..c2ccd306172b3240103cf19dd12ebede0f1330ce
GIT binary patch
literal 18916
zcmdUXeSA~Z{r_zf+5mwYAYj0%VFVT|U}#F(lD71jA}xeIqy`GL(3G^4hNU-9z9N>T
zRl_kG+jI}#Ip;R@=iKJlrWUHQlxhJ{!ADT0LvVV#paW4_5b5vzx%Z|m1)SUK_s_2{
zlY8$upYwTsI_Cxt)ZM<Pcsci9|AqhSmH+P+I`TQLC`Nr5!sA@*)X_0xZ+O_kamOdg
zQzZboJr?&?`PqmIeTM%XU!=fcV)XDy<ym))@v9BrzL4X#fbQqH99MQVfd6uAj^J(<
zu=XLyNOF;^l6*t(89B}~$5&G=RCC;Y<1qo*A6BkIz_=`qE1V;PaUC&$flkB9br{_K
zIX-uTca1C)$<_kebRGJa#c?^&XJ-WyOggs3q-A9$eJF2If7+!cby{DOHuzfLgsQVA
z_UxmP_+WQv%XR%<1z$V+$VHZC(pIhNdRhLfm>b4o4J$HfgD(LZYbwtE4uDVGRz)xs
z04MYk#MvkCq>;vz<(S7x2?pc|E|_<yFIaZy;)!#?K0sc+{&!cbFI`r$3##DwU-KOw
z+|+dQF5I{9zs|S`mn{jq=t5J+W19Hgb7Nw{d{W at JD$o}r#Lf*bcdh8EsD<1Tb0Dr0
z|Ipvx-xl_dxOlc9qB$9N>fZQ;CoWVChq_0Gio1BWc6~&9a#ZanwZZtnzStAzt^lnZ
zK)60K>ZIlqf>WP>WX?gtFo2jm0M|%_x5s^2aN@$M;ZS1-340~NEUxxnfo>4K0`%mi
zs3cw@%;EqC!mGNVaCOfixJBTU9_lofmOCr>_SE1OlR at MrbKIU0oQg|2=JXtgo3TOz
z%Ss3qnNov!rUX$xisM|aK%b7kdjzyD!-)SF2|&^1Vtzf#SF64NsF68Mp(T3pYy!v8
zO6YX5#|;1OcoGKMU5Gnzz7fj+>gwNU3OV&`zi7MxBl&t)Agm7+8&oewrqrfw*7(Q4
zM3%I1{*mOOY0K2Y$UvvgzTbBu68o1JR;&wj#s at y=!&vJv|93*^GwnqtW0Qy76!@}V
zs18-ARTb*cCXM~GrkNmTs7))-_zkeOB`p)c{xKNTrxmDaP8b*H*4aPv9Ro_$K_HFn
zWGSj%``b;Eu^@qs+Mc7 at _5qB*1@@}%Rj1kC_C at MB&k7{34pP@{HFPK5&y$wg!kf(w
zPctO-kWY#SZ-mNU&~|(nRe*=$T}+0Hx~f*KToHId-&M{|1wQNxoYIj|#9v}61d&S|
zOw+&2{5;{3 at R}UuGR{p3P8EzHDOJXK9K)`_7L$G)-+Bz>MDuk}>`}JZFnVzU-?kq^
z*8ZvF at 98oLLrDeGIQo~Rf<f>-fd4uL|J2Lzw at CPFOgaw9!yxwJF;ryIEpsx?V=Umf
zeuqa!q*@qxkn)T8CV`Zh5=xv*Q$HD$vH~yYhEn<iOi$WLyPVP_qQshvyE&j`Z;QW~
zf(!7l{Z8>S+`Fo*Vd#$iW95ME45T}DMy$qCFx2l5Tp4;w18p<O>4|GGKgtfNmuX61
zLkkFiFC)ybhZOx+GTO6bqUXt5!RurPY%)UOvk`o<S4u at co?UPq9lYGo78a7l9*lUB
zk#hS5 at JU)tkd+~=e-Qyea{83@^JqPo(sSZY+=3rt3BC+6Q-|SG3R6)AS``Fa6a=5+
znHbOyFyJ8ubk|}aPg&ohtbdBu%UZcbW*~tWP_#m&W*7r11;KU&L6gG3pawq1h$rh>
z40K&DYv6mzdaJ?!H1H&DhiM=@$bc-MY=*50lAkI_KE-oX3nrK$Ra{L>B*;vd2h1=O
z$9x6Hg9?r(6dZ=0f57(aRgsNB=u9CzWKJmv4OjCGDJCWBehil+>prfatRR%)5qwJq
zkx>kS?^3{@RKU#=_~Qg_j#4xYf(I4wKPlknDFEtYhNqv2=!+odENS5l<g^ZDAyrCp
z+AyBsGG;07Q0%}}HB<+!2gGbj at iagUffmI=BhHbA#FJ=ESe9WR&=N}7N{zF^dd^wu
zc at QB|pA{5Lv&56AAqZ~qDFW}KvceV`>_`3M?3)t&T2EMl>^TiqMlVbday+Lo at GJ#e
zsrWdSI+<VN?BA5ozscY+CUab=_(P0(nsM8aiU5{t$0dn~sb?oiv?<*hR`s&|C{udo
zRND{xGB>Hy;x?v+3N&_uKi=AJZ&nMFvIAiafutdS_&(lbu#fe95E<{e518w-#96?I
z5{7weSYpRspyuz%1%98#K9&zqVq&MESDm#Va_YqxC{c1&q%?%cK<boIeyR93gX{_=
zQJ&@0oKIws5{*!dPJA9uSI?aBfYBF39+0x<j|r^IWE#w#s77WeS<0Xa!F3A3`pXHv
ziD4I8s+WtTeW|g at 2Mx1IlPRPhotEV1t>LsBHAZqYqjR*vSgL%t>QMRs>ie6l2`tJ8
z`Sg)-Z0z=eXaVe|0?2Z7s=fBpzK>WwoM)NCvrE!uaG at c%G(kLyvI8z7V?4(tOYX<B
z3r;8HYwAO+ujhy>#&X<tPHIb>^|8yv#dv0?+s^qXcuu9jG&e5aotlb398H4MvN*Ye
zan`Gsi^eGEL<zK`4Q?a at zfY6~VKvLe&k at WLS_O930PLS-Sa^<%+WLCWJ^-T at m!go|
zsbRgMh>FgRF6G-7=VjZ^_$GSH^WcuNRZ(~JN+@#8A at wf)nLL9kaGdvROGD)vc1SEo
zb3ih$?4k%Gsl^+B&iXprpChgUArfAhaf-2+f)>yW<whAErUw<#lJzjK>SZVb3c;!|
z(N$Nd<RErhvPuS)JwVGewCru|wX}1;yiC&0vVoL9Mk5KtUtpoDYj7e56Am$q=F{b(
zOtFj=YeM-K>p4fLT)Qv-BBF>B8>BY!z}4pAyqs8c?RhAZ6K7p}UPJR*WnN)dT^~dF
zO#A|UYLu&T;))e(iLrd0!k9yBMealbS6I6Oh`4izRbLN8EIP#bUk^llIz&p<5;<_H
zrd%s=sspzM at jQgUTo?K{E$5Hh1==m-C_~`Hn at 30zT^)oP5S<t=gGdeKRLME`_JRVw
zeQO?Tv?TVaKBYd9^BaNLz+&zD_<J4!Ygs|*_Q$xjhI at X3OKn@2Zw=yxZ+8~5SAbjJ
zc|t9YnLv@@YC9%uU|VM;zNfm>`K6j~-&kNh&~{F!3{}MO?XmVQVN`Ztug3nW?@Xjn
zqI7fHC;mxHeJB_kc_?kxA^%9eJ?~H)07qm4>J$5`O~#NnF4XV}mmOM<g~C|AJ)gt;
zK}?^Dr~=>OcEQzJsB`XGwoK~z(4n{W`zLxF6r5AzqQUt(SagZgB at efT(f$|ktxrJ^
z);No;vZy{)y`L8E9}o0#oyXOxu3$VQ{#jJegZ(Ka<_s!khh1&23wM(G65r^&poWBD
zp)r&nhoYcoNBMSDwtX+nVt>-5!T#ivh{L|WX%Pt#coBM7$=Tl(=19F(+W}z`HEp$N
z1|gvzMFq7f4K1|qQ`SXX6j)T<Jw9wS2w!&KMMAeH at a;jF;m6BLk;S!Wc7tWuVxMPk
zhz)Qj)?{X4NV|t6Pwwp|DTIk04=Lok0}APcFfO(@6^78M4)X2lx?rpXo8=z?Gt|YB
zQe9o8<*Wf6z`IC-Z?W?tPssgd5*FzHN=-3Ko~h87B-3~nG?4OcCvBl0cCqqQ)mtEt
zBcm7eavk3<gQXE4k?Ye`n<fVA{eq5)Z!J^R2J>!>-5C>62USU7$-b;}x+KZM3|wM_
z6uQI;v*@B0rqV?tOp;L7=P%!V6w-?CjRS6LxT{`uTUUMTZC%!IR##`w_`nBh*4b4*
z;<m0*C-Y@(e+PAj?0p|_fMYGYHMzVZr0!O|#J1 at AScC4O>b$C_^_ZZCSg#@?*%2f?
zH{G0$IN2*=2i+cGN5wzkMs<`O6fM#u at J{q-ZP0rwP|G|mBAzPP8)z*hOC1uo0JfY4
zy7Mgkb3`XpjQYsBSFTzC^+WOJOV}n0-(FFu>V+F(;V-BXNsee^-dTxn^X&@@RR1Dx
zJO*$47Ih8m6}~+?&c4^LK?Ihi%@rmQP;Q`8V?XNqa4>3M>i5(RQGdR_AIlPg=y%$S
z-cz%MC}a1sqST9GE7Eu{jvbL8lMXn<eU#TDlL2mEM*=grK&=}2AY1*X7>D>f0xr;4
z!>-7~;GG&5)>FYQNSZK_CO#X`!~z`Axx^nL2~ynT79bhq@$IE~iHGeMHZ4F9kF<t^
zao{L2qe5)zBgASZl~-0|xG0|bs=pt448|oL5R;`+BN2{FMw0T!OA<!LNN#&jd|H~9
z+$g%c*24B at 5H#9~AT at HMB{pDv9p8RO9xzNnoiA9Dcz$6TQll@=lTOSRp>joLv$tXX
zRq<qg_9`SBB at yfCgk+(GF-s7oh&BSR1h{PVQdrC-F~5_g8=fWaZ0p}V-g7^Jxd8^B
zxrJbQ_W?_mFy8YV&D6>>6KQ5QZK_2R1z;bPGv4zdLDb0*XORY7+gEBkKN_Lx<)1m&
z`wsui8`mG`eQjE?ruW_JU!PVEo1_)pZ4eAufj*7zb8EQu7=M4bFmOD61QnG?T(InJ
zgB76`-A6B57I0rgCw`{luM)fGK=LAy3=zpgVhfQJIj|Ngzc|>G$_?rCp@$xCqvD{5
zb?lH9$}KRp2rgE9u|r2vO+j964GSY#{>4DEE*{xRYW1a!-63%jU@?RK=|I;q>}0Bt
z5|u8_kOGFD0$y3or$EWYoO<b`K;<-v%@l_?R_en8c>V%(`Zwxfz(e9LO!4iT@?6lF
zq+6UUEFy5S?#omt_EoKNbp=jor69b(-VrB&5p?Q$>nF>~nWfybGavQ4-)RiIphpva
z*+I_<ARw7fM0u0NUQ7&@hmbyl4JN$<{+3W)TH)x|1zs>@ph)9@;vqNy#f|tVVA1d!
zNVnKq6an3EDq9pPw2_iDAXE7VhF#P at 5TVP74975E!EoVn48I`^NW~_Kh+quvjJPud
zW31uGh=J?@js`Y at 6i?Vdyj#I8VSlB=&PKaLd>U;~+cE!*e0x at 2mc1|9Gv5M_lMQAk
zI<jZqN)bq&JyG^->j2Os0)mx71qRhVY<jd*eyr!1b|)(6^=u#d4m!Bg_51Ok)=}F3
z8lFsW#Dc&jjqm87OH0RUde&JA1e!wRh6}hch&;H&!5B$eY0~rUO?d_OZXb>+sbU5P
z*!Vt$9w at t7?$mO^&CrPf=1C|On~|Ha3&xz$#jN(z8*dD%q)sim$yup!Fsr!pEb^xP
zwEshtTu{kD|8;9#;(nr=ZSQQF;H+?1U&rSA2_!3kz^k+@$1IUSDpu>*>1`kN_y5bN
z`iu(UVPQShJe`n6mn^|Rmlk0hU3LhgI^GB0JuP^UL+Qx at G4{j9T|IOpU4m{Q0ld3f
z(bX-+K))5ugn=ziR*h91WJkmYkmFE4d+1zR68bt?($lLfG000^jl9WJ0Wn5cL|^HJ
z^lb@<YT>4iqo69$m#tk)q~&D!0SOt;ma38Am#8EE%i at D^k^5^|d at Zi`ZI8b<E^;?|
zk9VnhyoKcWFZieA9ZF`ONwvj*s`*O4jXWI{0`&lQW~dIK?i9745O_hqstUbfH0jI7
zg73o22G&CnSd1^DI2LTOKC&$(gdxUXOPf2XmG~hYZ&Nqp5XCcO$D_hz_}xTLDrKO$
z0l0eFUZ8rirOB#8A@$=-of@^9WHr8Z3M7#%$G2*f+bq8IC0I(fV6tq%*?TAjN|nOd
zu^afIgfWEN+3~#m)Q^B6>%5Gme0y1 at hBaiW(IBY)rK+%~j-a+BFny-#H3^@81Y6Ik
zdf-h7Qc}Q|*&*KaB}Bm?wf|OB{mfAz_2 at Jx!I#cD5w$ZY>L~$Lh(G><n$WV$QSgrh
zwpThKN!)LLXJagThi^a3UQt2mrJ@@d%*9 at eWO(9m1TMWh5Pt-1VQ+xV0Rp?3l(lU@
zSs5e&Q)jBWBBSWi8BvAQnN+6fJWA^4rMC8r*Z>*XQ72o6KB%-%6=8SGVy}>_Uy3`Z
zk38*?I*j`W|3?G(-y{FUf`Y^^IxkVH{<?4-B+%It2KE}Kg)!Oomwca4<)eNVUCtqO
z<g8PwAmTHmX*z~ba*_&}LiUI65^5x*RcI=ag{Gj9G^;-A1uq=$R|Uecc+nE*iSd83
zO4{I}jEZkzNvQZD4#;(m{t_jftC3JuC~hci1alZZj23Pb6`@r<1wbdQN8(yW=MWdz
znP(q|j8grlgOLs|x$Z&nEFfKMU++<5pYa|wj!HT<$TROqGp~vpWz3_UQuF#O1dE=*
z$iX4uKmY6&ES0d=5RN7p#{-1Jdah*wCrsUTDJzHPeB(X)3E&PHKp=pEmh?={|M#j;
zL5$o)P>5>mXEu#R;AmCd=!-_<++=h}J<fi*Nxd^>Raa7YRaYr{=Ui8eFv0T(5Y}&9
zzMD%!NANAehyXKM53tVKw9&%k45HgKGOIRCo9q8<Mc1xuJg<QIS9CdHfg54mDb{dm
zj4&zW>$i6UvL#)^`M<z<&R((-D4`*J7fOBws$gQ`Td=Ej4+Lm&dS-#9=fU~-dInbV
z5DOj$eId1S;zam$;DrR%-E$W9tw0IVLq}7TwL1pZwqtG2uK}{{OJa6o6oMnf687f_
zq6H8LhwGH}zaLoNh1rO^?R8AS(ZJSo15^8H>Q=NZIxufPyy-f;p(BWw2OwT02y+&D
z!%=}PLW`9BG-#?Ud(ff*GHZZ|Hvl<Y#3T at uM2w7AeGyUL8&|M!dwgryf9~EmIW&|U
zy38q#0cE5GwfsiPvgbJ<mX4XH4Q={9fQL~9dsS*l>Srw%mx2Tx&#RGd^d1qb>Sr$p
zt0@@Au*S8DqTb0qgIy+gI6LNxmhUF)qMnxW?QtD=>BiOC_X-BKzcz4QEg)eR#HvnX
z3Io{f{FCg=x}!mZkU1~rlDQ8@^dTpm#QhOD7jlim2}Z2yZ81cX6yYCW$0ad9=T%@r
zoB^8A&Q^{7D;W(1x+iQDgZUSwn1vh$PXhStI1h`;oYqsuK(C5;rhq-qK6{oVkU~m2
zlK2%BvV&p{1>m+z#~}{_)<Q at glV{8{6LK2FCWSR&OlXM))fm3WA>*K_K+IH{H1Os#
zw6!`W+{(H`>-u{S+r^C&JT;^^>+;<X;wm14dsAMJr;gH8vN9E>DSNLlrnJH-Uido|
zOKl{UbxXS>`78zL28>^ER(iLD^d{z2OPNv1LvN4<q$64n%?57_HmU>rG*>QOG_W|d
zRWpcvaJ^Yte-rBtdew4H#ye^X-80V;rRR5nlDwlFTgu*&X?_mX;aHQpIaZ*?#R$xU
z({D-B at fg>$g*2TI=++FGe_EQK!&cEN;z5~+l8pa;2>{Dc9u5BM;H?R`Gy2Ea=lDn3
zSE>ETW|3I=pdv8v3KwTHo$OtZQ#<!$rGx9oRXF_6;;#M<a{NqS1uC5jY5V9#ou`>*
zw$O};=$-501)b*+8oZMRd4&mW;N)p`8fR3<sz{{Qp>x3*^Q+=p2zhw6j^1AP`XU2+
zIo2KdVn~jcjjG1z{AXVVa>%Qb57}>74#)g0gm$rRu+$f2$wK2lpmBJL?tN+*l+IQ<
z@<l75TZUdi>ktt#NCncF at 3vDM_(dQg2tZ<jM}t13e&zDrMqI^Q0_@$l6q!k|i9f^>
zGS%#QuHUcepmm`T2k&>*b7FAd2`?66K|tIG4v?y7Hz<p>?Ub5;NY7Z0S5YO)Je8p0
zAxsVlJEgY$;>|Lh2>{hNmdV&QOW3qH1W-p}&+bUWRp^rvK}*JM3$egIWk(0mJ+&jf
zr+Wkq#bD$7YZq?19+tj|i&NTA{^w3)1_VDJqha~y*oKRe+#5*lo0sq2L2^@<4ef$;
zw5b}>92BR<`7<4*LfW5$Ao2_e=Cq!Jo2U6TTaBz-Yd_R9IdG>g=H79FhVAVXHTP!6
zsETz3cE4uJ$tu>lN`Ci!N{2WBCs-NG?+e~}u{(}(&jio!Dc#OkzB>%fi!Z`cX!FhT
zwbs{r&p7bjruPgh?mHP99Jibme_jyG*Nom9EZ1%i?gae3WBt!kc8uyfa7rje7Q{)l
zlVS<0*-;SOc9JtvrW0mR^VoL4|1Hmls7 at V=5zxDjlk~+zcfc=^xF+E69e}*2G82HM
z0F1nap*>VRAI}n|*e`9=dYWmjlIC{r!y8T9a1nzvW1yMUH1kWEfwj5clFfxI at iA;t
z?A;qDdcp+L2pE}#m#|BK=vuK&0^sji4~t;2fzaZLtq#x?c2IL6J|ZJAcpM9W#6N(f
zO+g|<ZB;N$Q!o)55++<B<9JwFN3GfQ;c17dosDSQ`uWx`pbKdRuS>1RrdFCP_!MDh
zVn!pQ3oYyiXc7O%Zq;7s*n;zULkzo9>qi$GiRbq$jp_VA!|#dbp9zodoCdZ5l*+eC
zXOh^7Vgt^OpeY)KU%^=TKmqn$)&tga+fHUp#cSarQ(i%Er3NmaaBq=m3_fG=;W2K)
zCq2+Nif{cT`maFW7 at YP?H`CEo38vI-2RTFn9hhN#&(oMf{xYy$6<ke=A5?+8*NMG~
zn9dV2d;3SfG_45i;m1RP^GW<YW1t<r^)FCO;QTE9p6}y^Z*9dl>kQy9sg-_G5fF`n
zHz1C}4{^j8zKxE!0taJzUL+`F-QF$^`v!j^n1MyW2<q at emXFhObueGY3NMm?J!@bM
z8o`1{1Q4SKAR_U~ILo?7{@asEpa<2FwSj}0$ZBF_wy=hFu?}f3J741BB&b`@L3C5#
zyoLYnFNhgzBdzBG=hOIm?!n`_?op~QL*F^9Ivw~j#$O3dR4J_P3mi0p&&aD_8LX4;
zUV!-n2V){<1LspVO%xs_s#f74qWUxXx<3-6p;Up<)7=4af-nMl at mB>7>LPotqG94H
zumO_bB!ajk!zA`842)NFC7AMv_+k(z>-Xdk7d55?4u>{(YT1!U0#0<#*YNkeAnQ7T
z^n)3`H5;l9^uRIhh6CU{J#oLVGSFk-TmOMr2=vV1TP<X!o)LU2StZajl5hPsMiyZc
z#J7b3gsxet$^&+Q`XeJ5{S*#|MMl0o3=eaFprhvjfUDr~lGlU$*LpqN)jw)aSr!`W
zBP#rI?Ka$zhxSYWr-7ceeCt<HhSo$GYJCUtfiqz%eN84FTT3u02?k+t+oQcI&xOP@
zukei2HENHED6a%%{+a9%4t%K{e0vPtsOT%!;jsXsp6ZiOKf at u8jR)x$Og%HOM2ROv
z>=nw{K!j2hLL?80$@pz2`>|u+^Cr>}>`0 at mYdX0UWtXYs%Ts~%N at SOD4K?2;Aw018
zdiL736Y!b4LOK0`KI5jD>-J6z?K}y7BVz;SM{JtB?#$$E-M8Zz+)In>r}?($q0eQW
zqNr3gBvmS<i5K)ezam|qJOGE^cCdv*SwGf1GH~)M2nukDUWQ-P>HNlPM&!?MsD2?r
zzZH}tR)d(Ph}BRev*wFzL*Mo{T283LCsg;AnZ}&!iWNq5=b6SNvaY~!4gWx%X)I{w
z*N<9`ee~$S$-g5NC%~R4On2S11s!YCWCR76 at sC4Np_Q|H-wzz&djB3VLzz0vWJuFf
zB9kyXmaEq-hn<nL at 6t%iW3BxaPMiYYE;2ehbFuxTo5cO2dntkXuSW-w;Gc+X>*=XT
zru8a}nxSq(Rb*Pd%KAFAU&%UEXR3O8$q2~u=}7n*wl9$qeR|6lkQBxtcaI5W_oF)Z
zs^}*zCXA2agpt{JO-R4QG(n+weF6sg7}f<}m_8LbKEnv@^KCakT&Oyag11LU4`1(H
z at T^gLK7>#8{1|#-aiOi0HnXI at fm-f?UtfgIL14Z;KD3ou?ZPVo8YF;c3V3*a!C3kl
zLtk3 at 8ckoL=xZc>X%HpxbT-|9$fx$l6KXY4A at H0AC-rDn9O6khbKr&asKZ7UQc{3^
z4Lu(t4Cq0MdpS*zGXHI=7$d0A)=<z;8snDp50KWgawvYLbNw7Q0w4O}R3V%M3KsD8
z1SZOgtO#w5flUQd)^?O;7=Su$n!)QeJ6%)b1uLp;f=^3NO5UBy at 8S79VXD<A)cYm)
zB2yt=bO1xP>O$ntz(~J%HlY<rupeo{do}<ifWa7;5`2_pP&)NzVL at KvOH#wo$^Vg>
z9US0+iV>6Fh67E524`V9x!y><c!Jo0BRh5&dph9LMbxwsKE!i^dpl}=>j7aNbT45c
z@(QM at z;pvZEwE50(C8iYG2(`ym<V^`A@(I3<YL>$5*K%2?H$BLy=7UX^4f3`jp5vC
zhtiOJ{gx<yaI<N^eG_=fGmQgBU@%>h@$Jut$cVEa1T+6Y7+TZY^Gqf_Kv^C|I%|6z
ztTi50ng3oFhEfZV?mKY9KeL38>4unyh at xRBB=v%@bgCpNgtTgaHdYU%3243QY?c(X
zL{?Y<sPt_3M|$AA%3o|fkVW?xG)Y`_HWh#$v#QcGi#k2x4Mc8+bTgtF0j$1$76_fk
z>jKGuM1+h;SnQqrcjw4Oe%lsP8950&XqMlK$-G3^hV0TkoOx%|DISgDl<?iDr4W*%
z=ifvQ-}X2xB)btw(3`IzqYI;17jo3Oo|(`J&aITAf{O?)x!qpz8MWJRC at j*kgV at m3
z$At7rVgeX}ZziJUjXa0V4t6-9d;@+aL|Y-h9&d8Q9TJFcB`h}8Y&I`iQnqBKxg@`=
zyktpLX<2qzdFf1ZsZcHWn`X{5rW-9YvD>Wnl?q;;yU at Ej5C5RTI5op)HgELS)fjJ{
zNdRl+SGsG~B~=#JxQo3t{sy;W-P+3X#=4DeUsH8Mr6V`5(&4VFbgZeFvj*<Ljmj=9
z%`Yjd$}d<{m0wb_w8W at TG-ep5`(`5JVt=`&25XG7jiu}Si)xIP=IIU1#=0hSu*TJH
zW0PCJ4=0DgV794xy_-PR_<cTiqhM^>+$6Zy6At>F<p6w{$89WKTy6y7HC}&14WV4)
zscu~Bt}%KW8#d!>jeE{j;Wt%-id!HeGEdbFK6iD^=2^x%K|$8&6%-zaKs9bQu7?We
zkZfji&eEkt`PopsB_m_*OsIH}mMkx1srC9BYm9Y`iUx%0)eUZvVkj&aiHfSo6XokN
zc^5TqtZsn0>KZrr1sUHgqW~q;xNEEZ4H%M at v8k@1L1JB?8-J6#Mj}||UFU9G;$Oeo
z?K37C=fW$@Mcy^l4bpfn*c51ZCb!TJ8pEA~<Q;@ou*`r1S(+{7#`JV!Qu0jW79$?#
zUjCSL`D60skEzi|cxeXwaR|0=>W`&v-^M!FS at Ovx<T+R29X_+DvDSOV)Kzo>e_i5k
z9yUR?H4h)VrUtK}D@(H?ZmKLT{=L&xb!ur=v@{4uHbLB8!GA$rgS)W0v8LfFQbQ1k
zowqutuCdy;`HH2Sd7)b<t@|H0DPD$+4qPEAObgparvWeJlMOXF)lKf~ni`+GsfqAg
zxZ-MIjprH;G$g-JW+|#$?E_zwQ;OXPs?FIA_-9$wLY=n}Q<Ya4gNbwewY6~HD=a*?
zR+1=Pa-{<059!BTE at en%x#Z?U{c9*cBoi at E-iTmZ+lb(SXO#-Ry2iCv(!GXEQ5^Cz
zATTQoD0pTd>saK!xsv0<6}TdI<66N3r>a^DyHyp`HM?uFg&cofLroP1imRLJ*8A6I
zH?66wlhMcv{+%49)wS+HKJwg60{nrrJX{*`ar&EHZJu5;(>T3)zOgjBARpzVWYLm^
zRk=%-;4T|_tjaCS&s}VuUOm%TTMY-SnPW7TxCOtj5qW<UXD;>neQU08NC~}}=tC08
zTQFkI^={Y<Ij(rlG|E^oC&k{?4SzXKvig6fJ1J)`Y82c)7<*7rOT1AnFGcZdsNP_d
z_*V2b%cux3%V^Fm%q~eq{gj!VHORD_O1UVW+-jkebemVVv98H0IWU?0TDC(>Alk_b
z<%^Wuq}wK8xY;<2qtg4XoB)2zT>($UKk94II7vl}G$9vwYmH{A=Y>misuq?n%Bw1K
zIr5<;v$9||3WV`m(KW=kWOH5CQw)zWIlv)fiF*V5vywakV->#Y4IA7(ikWXhQ&xPG
z+(4Wu?t%gpm5P$m>`am!5|9`JarZSbJe)^7gJD7i{)X#N$~M=?HBniHFmyAaaR|Q4
zxcLuwS?>0EFVk0n*SEg<Dqax9xpd?D+Mz~pG*k<<Sd-^o?OzMA7I__BpHLZnlzdKZ
z at sJD5(~JBw=i>(bn!8S^xl+=<tcU!1pN=joqbA7Vt)svr!ZiX_fve3D6H)%rmkwp0
za;yVcSpbI0=uI at 1X`NYif`NkYU!(@ke08PDdFMaDk3M>hw?;|Cvgb(22MR;i>}$kO
zDY_}jCv$B`C^B7Sn6KsfYFMSrBgN={yi^j4Ge?t_!qhioCAtV at QW5VPGIHfYu#w*A
zN9)=oRb9NIP at dN!Vluhumel6i(=EvZUrEi=ElKnw-weN!Ps;d&y7g{apHy>;@|9d;
zG}7&S`T`tq-$w9b(4pf8hSFcDf6W>+ILgzIOGUM>k-CEN#&wO}O^wEd4VyR6YiKSy
zk>_r33vOcpilpD?9x_qktGjG`V1<&m%Di4<>H6x1hJguWc=ULbz6Ka5@>bUv^L;+A
zZ(s-~%E}(WQSC!3jQFCt^2R3rh7AaAH_52{<zTf!jzUBpy at EasFTqZzgmy>DO6ij4
zrmlM!eOWGt&nvjs3=mt2%?j#DiMvVa3uHw)y$yb}>bYK@&%Z%X5G#WPu>ByZC0=8(
zyQXeXZkm!tqMN-aEb&=D+pXvTU9%<Qp=3AK4N4E3U}uB3u}P7eAThWewFefZC*`jU
zE at Sliqa4bkM5u{M?jS}Gl6R1oPh_tirgcKFD7V-#OmX->D- at JnIY^rHuJJZp2EC|p
zjd%S9v~WnGMkhAs=;gRlH+GP9!e*nh&WpTGLmZb|l6%=oiTiwPM`4c3bqZ}@8-;zd
zIVnxf0)QPHv{Jt>|0&C9;}IPi^tvK!zWvo}<(XV?>GQ6y!~XL!$F<B&vL?^7rKF~1
z=j7()7ko{Ar__#?soa*_Y)vY0udl9atdV+yLDKkV4tUszPjjC989Mi$+#3KK+Y;My
zJMiFeliPqRULJ63rsM4uK6l}BH$L?L;rKmH07^>pN^dy4F#P3DzEil(6+E=#+draT
zgbmaysdKNSs%uTMC0FL<=aet3a+W4p=B8CH%C>%!gBE!a9l4-BuAj4^W;O8t|MoY%
z_-xFH;y+AVaMm_&!P#kNzG&Qa^V6r2v!8aRmc4Y-2T!@yX&-ZaxH9L#y3sE`_~$#f
zt(eG)UE%K+1!u&4l{@#?_C=@v_^ZfQH|PDuIN^6i?TODh9$R&LW%ma;9W6h2^yX&_
z-9KDE^PhF2({t`KTc0}q+wq?C$#<sD^5}~m`+oWCe=g14y7b-oKX*Q9DhmDcwB3K(
zlaAXG#JD53K9?8RaVFN?Yijusa{asb5p at qfdL;cUe7yM3*#F at AGCm*SlQ0(hKzu^@
z(AZ<RK9A3P_<V&A{gcHEd}xgRMME<_^lwr2;`1>+G!_fTnvPE)UGZ;SHi7nb=`@Jr
zh>x$M^-Xb- at 6x}DFT!syaNiQf{c{Bzok+Hv#{H)wWdEjr&Yy)3!90xd{kX3M4?}s1
z`q~cM+>!jt<d>7*PJVRW6Z69Jj?DYpJgqI!X0b8b4%?q>U)V0#G%0l{{*=2?T2tCn
zE~TWV-j%vLl}pP^yF2X%X+KYUIPE}MUz%zD%=!Ok{%iA3%>Qb>#y;M at +Wr@NxBZ|!
zVmGCyq^GCvOy8IORr-hwb4F4|S;nf2pJe<hV?^edOnYX2rY~~~H3MLn{&8CJ+|0T8
zNlTM{mh{`C!%2x&tMz&7KI^{Z*OFW3{bk<s^In_x?!3?E#n~p=T5Lhv)3#S_f3uyn
zO-V7OB&DoQ`Dw~;Q^F}PrtqmVQWH~`rFv4=ryfjwEA at El>C_9Uo6@$WWzH|0zh{2e
ze8Ile{-FIa`#JlU_V)Ax>2IXZ%&=w%8Lb)L%NUb6Dbtd<E>p;SAoHWlPcv69Si9gm
z3pOrzXu)q5gcrQH;Qa+B7o1;kX#pw!5%7Gy#c0X5+-fPaxGWD at p0Mn(ylMH|a?$eO
z+{fnbnY(Z92Xkj9%}XjwawN4RZBKeA>G7oJllCROpCl$}tO-`Tb%oVu-D2&szGD5@
zdeQ1iUY-0u$uB0ql5CyVJde%0f8PH>?ic6f+7{dHu<f>W*-qFl*$gS^DFrFpQdr6~
z`)vC!?0>cE(!J?-r9Y5flX*vGAoIb at N5J{@3pfkM!R5K%B|V+QW#NY{xX-fX*$Qn%
zHixaucAKrzcDt>{=CL){HrNDPvuz7B+iJVlb{{<8e%nuN5858KJz{&@_Iuk-+f%k(
zw&!eN+kV^2w!^kJZAYQ~<F*fNqV1IJwC!_SpAG+9CPkg1Nztb0Qw%9a*kx9VB_$Qy
S=A{&-6s0&)%J6!P<NhxjY4f)L

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi b/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi
new file mode 100644
index 0000000000000000000000000000000000000000..2d1d44821ef897723d0da667f2e0b495e8ce013b
GIT binary patch
literal 18272
zcmdUXdt8)d-uKN(M;W;%MI)oU&CxIq0RzZU0U5v+bYM6Lp@=XzATTs at 59qEMG*FIr
zQ$EjAdurS5*{%KT^K8%No=n(sL0phbv)s~Z-_6vvn;k1n7tpAAzQ609;pCxh-_QHU
zJD<<ohwJ*CPuK6d2F)$y{^iese;M=t9?_uZxE#O0353pY{_}(VLhjmhAICj6SDEq;
z;<!!z9M`o}c^7b_ at 8r*>ECr6ngC|dV-!(TGztQj}$S3=8oGP8;3T_1OFODr2P1{7^
z7D7kTi*%*?_>aJG=H=F^3bBIYmfo)Dp6b1ihfC$S?Bxm=R|Z+R4AAo4C&3+AZZ*|e
zDixhbH;#DIecUIN<Dl)tkCdSetbXEj^%GsyPn at ZKLau(|M9=HvKE+X8(hjXk%F(Kw
zuXPXjJI)3aU;d@@&CCD2zMKGyiX~C20f<^E(1yA)=6DjmvIQm#+tkiC0Sk=FFSw^V
zdtEzj_k0Po=SRR%UB1!B<XT^#c4`2}@xmFkz~6JGqXqWhqg!70<0E;Yi|>@@@%MBc
z-I6VZYjMfZs&FmPYH+R6hGjbrpYfc$GEUzAY+1%}?OozL5ac`0+-{o#=s+ny>@t7%
zk;R9cC%R?-%lxn8^`+~jxso+d`nF1{RZE*Sp3R{|rWoRpI!xos|BW{l)6>VIm at L6y
zpf15VGu{|>7Q8WXcF;Kt$cgyBybj-(mw$j<$p4h@{BWM_KFZM+{--JPaN7}nfNnH(
z#?QugMEUu_6pk|ij$uF1KdP&=<iVceYUsm+19Of1KOT>#y~`dna=Ff}IydFQ?x|U4
zua!@RdQ5?uGIF`P-mN}2z50`C=Tt|Z|JlLoK+8r6*1M;lQ++~kfoGvv(HLVmT#gxq
zYaqsZrhJ-t_S(kDP$6TCEsU`=rTQ~RFBo43dhRQqCKh5WO#vJjZ|o_QE;!B)7ZuAr
zw{hG-GS?r^qgb?eZJ%c_Q`snze~rv9?)(yS9U8b_o)1XJVa)+<Qw!G at RDd*4<EbMj
zJ<IqrDolMr>v8>yrG-mSiT+NNq*t3SAh`^Z%99sXQlik-E+^WBjP{d(pq-5Y`A>KU
z?Q&h$M(LvsOu7pZ$bzfI<~H!IO_diAgy{n3%KeMObP>R6=~SP7Bn;xoccXT>^uva{
zj#TiIUkl+l#%{L3{2Z{&q at H}1Cl+dVl1o2gaOwYIkbvRQNEb2KKDd2Wk@@ve*!>D@
zQL#A?(t-O6Y(P`KvEOSs$At_d<lCusW!>XM?jc-end9RC9A4Vdg1h`VP)ZP~>K|R>
z{lcD=viyUyriim07u1~rnt*@~l#*20GK&c%YXEFch55!AE5cwVV=2;W6^T0g5a!He
zW^$M8VodZZDYAW#Z at U+htt&IrRvY>DJMpZ0KVhTVu9h;xf-}SUHWh~CpTjujGZWo1
zfm0^{V3N*{CUROpoXl;CIlc>+j=f~-d<0mYuD^2%R7#Vdo5^wD26Ql#9-b at is!c5~
zc4cS_4CWsJ)%+qZ#d0yw9fw0(b_xFW6@!_f{$kW%rq)kf;%N#qpJpI23`7l7gVA8b
z$I}#!S$Q*D?KmvBR}pB~{X}ir7$_hK=xqk1anJQMsm&Pxf(OsdU}|Ar?KxFaLT(83
zx}imuS!k=}9cqp%-}oSfpyR?)V_}i>?(PCDUo3s$+ at Xz;pPLR+K^}vqgx{Z|owX2g
z)s<&#J?ruC9D*Ri+{k!23$zikjq%e+ms@){gsz+i(zR2h6D9J`@ud3%)ih{Ns>&T*
zm{;g3&<Y(aNIwLJ4i&-`CQQiDhFasi({dkX_GD-UOeDuN-EMvgtU8}Y5Ge`N26iRx
zz~soLDf=Sb{`<5oJG8SnQ7s*pS4{(Fp~O9v-+v_e-sU at XgO2XAnT178QLB~nVX6{I
zE^*drBi-6UNB6t6esT&1rHil9YDYkri$^{o!1^Jiqe`o#ODHFu)O7`CXv3t}9Q^^L
zba0MVP}Ftu&aA-pPxv+mFo3^Qs?%zvFO*5?4T3Mz#!F>d0VIwdBu+%hIo+8aNK2k{
zOgcmZ!AD#B8HudG)<01X<K$frs~m4}j!*sU?*Ts^d_#c|;W(rMAFTtt{74qN3rlD?
z*hZqH$2j^_z#u0=p>V!E4JEXE<Aw(vhnJ2fv>FL*-ls&%@5wABawcxN_uISpw!c9S
z-CG at 8x|)+egRSL9c-ZI!2Jrk>3?Nc9C_vOr$ZOy$#6u_*p>0Lx6AH}=MpOENmiFQz
z`7XQ~JVk+UC>4+_l*f<Esz?^BaT7s52R(qQCV-|Ypuqr at -vog9&!b6=N~+YP?GrNl
z44^=wGZvk}xEivCn00I-!P~BRJkm~;ltuWVC|;rbJ*R)P{#v&@P3uQP2ijt=%KB+)
z!{o3bkEbNQOdBc&eBt)HCfkB2Xxazu_fc*Ijpo+lN_ut{k8%x!J>-)RrliQcUeQ9Y
zh}M at mJ$VXjw=u-IaZasfeYJB6?5cL08F6OLbY)Vd4V_SF4OD4&6DcOFp9;KDjfi`i
zJX7IpZd7=Dh&+(8gn+CtBWgdqZ7lXQ26`gpkf~&s2zeJ0&zt?q^60oApavA14=@6{
z_sfeBwGsF(#Wxb)82ND!g@{5QzCh;;$mOLS0vYo*g+0l9kP7*$w9>)L^9 at BxO*a6S
z{P8+0BOOx;`YRYKF(T3oMB+FC3;1EQc8;Rm;YB++4y~Qg5Lg22Kht~!@^-$%rsb_P
z0|~<*Vc3|28X|8QM}Fb>)n-2cNwU9=V{wm9vPMFUxf$wryr>_IL;V<IB}mqY_V*#3
zOw!4UbjN6>$Q%|$g*+86(iHIZG^))@+0ZhDnx`qy6K76kLvt}iMZ8I6u3`hz*g&YK
zNn_s428Q8JPt#IQQ-t|<Y~W+&;8bM^F`r>$CmE2|(<GSH(Zu}_4cG!bI&(aG{|!Tm
zl>HP<5qI08#@p!M*}S^*+BikOqOl#?Fs@{0kbFNPSqf?I7h_rzXic^+b!=C2c9oPC
z7MvC?-tE25Y1xitP&1f at WpMgn8kWJp=(pVdzwwjSYUHM?9*^8bgk-9wBUqE+%Wz+z
zIfI-lDbab{vx_}&zT6K;12Q4Pqk$Q-lyupCPTGkwTmASEPjjGS%Sz6(!m%Zjb8K0Q
zZxLtS0d=dLS at 9IcwW-LpzO2L<NU05l&gOJy`2)_ZeE9_s_B4ljnl<L<0bVFS#RkGX
z&0*%(*?@x$s6EXp^A$E=#em~*s;61&X%@`kI>Oq>fR=iiBg`3WAeRlqc$y>4b!>pr
zpMN<k-e7);y)R`{l0D5UJ<W;cSJ+q>L(23tr<>2SfvId at t*7|`vl{iOP#%O`Jk3R(
z=6rJu8~6wVOqh+H=2CMR8+(%q7XPX-H`gd-p$u!1j`8h3L=LCu%5~B9xl&eGK$gZ(
z%YlwcZY4MKfC6mNF}oc=aWVFWam6ugTygy3lE;G;IGig{sv|aCh#$>DEISWVLc>R4
z*nvq|5o2$srFCHe>p(wzR#vDXPuFEI7{HoLDsROC={PJHi{!P4h>{X&lsB+G1(hl<
zPd*Wdz$hHauZ at sY22WlNybpeXx~~2nNk7uxlSg$-x+Yy}_t<BfABX;(v`6Y_S%F;6
zrYMr;NtQrV5AW>B(b at ZG)_J$HArOnGZ+Z+lcof;SOEpG)4FB&Ct;9J`>UCNIX~``?
zYZXeZ)ulg>9Ip~7hz8anM(J%uqWy#;O<}gl48%<U<+17SvFWK84}~{y3wQLY#?3dg
z`Q_5aKv%PBOs6rSix>dV6W|B??eIo8o&@`hq~-Q$NgD(0f&2X2{?T1ZixAplBxz4T
z+TuT=2jN(eCE;uDFO`nUDx&6ANxeg-llpAP5SodknNJZkC0Og#7n##GKG<VK8B~$-
zr1JaX15&SRt7qs$lH4 at Qtd0equCyZqclo!3D)o7%T4*Z9JN12<N*WSp7(x2Y&paM@
z+wCv)lC;##<mJ&8C$FO`19V<R$zYqIMdORt+bo{c9lrxzw(!(Ol**}$C4~!!NP1PU
zUR`wX3Lxwn^LY{=wiNB;Tm?!9)@v~yL0g_U8uzDhk6r7r3m$v8#~$XfhkEQ9k6rDt
zt7_wAGZR$1(Yw1-J4{zNqqA_>nLC0I<$szd<qn_oclt at WD%|c^FXdiQUNyMg29O8G
z_Fmy|h+S3u$JfCf&d`|mkr*+h(i`%3pjnBuArwo^H1h}z$GX*nJprP|9EM=8O(dWq
z29&FDt-eChgKhwAq2OFSOp)NsR-qKCe-R+gGM^@tyGuJ>q&yJ_i>7Kl26^C9kH<`%
zOs$?M1}X*}YajBUm*Z-xb(T4sXv{C|C?FbtA$RP_9np13g{r}B!5$<Xk_y%Q3x`gg
zVfrEOo%#{C|K+_2`VsMJe-C0szJwe>fmhdZk_Pq2;K>&pheO#eKCeioT%+V?d&kIw
zBjCe4zF at q^&jAQ=A{|%Uy|h%$BT-;i)=)*nL&#<1$3zTcv;<q-BI$FSj9i6<XPHw8
zAg8p0sLOK*m4A6kr^kb}Bk7QMyL6;F=?!r<|8k~(z(vf^`ysnqhZO3OdfiuxWCLoS
zbi#eRt4O8vNB{W3<7w-%hw?8M`3JmH8(1PgP9W4mzAyDEM-&&-F8!4v7=%K^4 at U}v
zQsW4dr;Oyeue4(u?((Bht^_zJbl3~fu2GXmM at j}6sR?70P(-(0;2<{X<W=bik=Rh$
zafV2&CcvS-b=Z4}adI2p+PcJLwH$)Clki+F4$>9Xa%?SB-tr7)e=v~a5DSjO;bW%*
z3M*G2l0j9=<>#5h6Od;_#vuO%1rxy15gEr)#AGJm40#Hr3!kuTmM?z^OJEn;l9Hnb
zlzr~rPU3W7Z}LEI5Doe9Pj&q?7Y{wpu`4U^aziMso?R)$=vnx-?*lVs#Y~P9^HRDN
z<A(kvk_5?S($JyEF>K$JD9$MD5HTz#K}*Ee0c3NF`@w^$Ej)+LQNv-0ef43O;I}QV
zU4ib~52o(Ji4RTS{^}~4 at N?}-MJDuvVOx*=cEqbjdK&@tB7`d0a}rZ=vk+Rx<vTDy
zfkA5lD_6A~jt~&RwOpF~0ir at e>Ks;g52zd;@{X&4;xxzAAQ2_Gzb6_C8c@*X7s=g_
z6!A0l0LPvA%DuefPN<86J<|xbA*d_AM$aP^4v*&82+Oh7zj3I=0Te2XwLBe8!AYQ<
zm!AhcSGFKOavR6>_uy>FpZd|<5kA_>Gn7tzu1W98?|>6<`1XItLo4L~*EHLF1?KDg
z4#;)vBSU@;7nY2+2l^{=2Ixx{U5{#DTImR4S`Gszr+&D#m!qNMvI_72MW+S!&$~Yk
zlTJxHM_{#C7?n<9dOAHEm(K#g3kCfE at Hqxrc3$DA)kwJJj-$%z+<8$kz{ODmTww;#
z^#`90e$BbzqBHl3RCq<wU+jp4o_r)q7t#miqy{m8u+(`CDqS4v<p6=DKQIv*9vjtA
zLmFZdfhh*n`mc8f=(<ujD#_-!ppjpqP=aZV at NX?D)Ud8!=CH$rZyh^_gRS$B+XiK=
zlINj*@-OS*cMYA4Nct=NJwU at krt3H8-b$1E(D$GSP+Z7i{XH_^;U$WN^TQDOeh4jH
zl#{(IXUW^}ltLM23+nzf49nw1)CWo_qx3GnpGq5@|K8>p_7~NT;Q(=}67l!S?FhhH
z&b%)J#etJlMMm^f>!l-(!(puhVEWw9yLa|4=*Ci>S0u&KDJaT`dyZq5z at epo2ky8F
z8)L-fZI0fhNwIV!YCTKQUP5(nm<1g>IaEoX<9Nwv7GP9!BwcVIi2MV4<R5wi>RdwF
zJz~fKux(-P!Q1C(D;}XpI??`?SRp+iV1rQ#$i-5+)^Wx!xEBclZ?(9OyB_lBx&o}4
zS?Qq&Hv659uRP6jB&!BQ?vSQB`J^LFAqRp8^k<6hKLRzJ>E|KF3Tbn%>vB5}U=!Qo
zek4ztL7E``Q%L2ctF|gfpGGRyK!{Q)D- at g^M>tWh>vBEd3E*ep at TaRe%Npdk>S<1u
zR!GP5rDB!r83ffLSJp*?IeVhkdOCPuETFriZz*7sx~)G^?50Tf50>|#x-MiUPAt$n
z=r20;SCBsl3-k`GgYdQtYHtT|QRyH;$2tgjf3U|7D|;0LsNGfCu^V?e6YNW1azWQG
zbyp_ at i+7}?rt_R_T55HIdbR!Y2YU{r;r+oLT^D^}^00V6F;oFkrM4uikg^I)5B-ur
z3lP?yz*-#Jh}uvr8jX+`u}uM6q#HyTNwBMS30V1)-mu-_*s1Z`eVeF~4t2|_-D!RS
zxth!*yK2X|a;aPCm(YzVJtHuBr*QcOSD_lAHXn7qq(sV9XYO(COXaxTA<~iH*X(D?
z5$j5yb$-}!K{TSLz;8T7O0T1mPJ at 5zIZi<H<PjI4Q(DyCZ@<U<JD8&LTL`v}Gh~z~
z+G&sn*ggZ+nFU4w<jrMC05k&7{WgXUlBs@?D$Y&%3dgP6Xs(RrI<Pz}#RKOKV>4ki
zvzcaoLNiEBlrdbzRJj`2o79UM+C?x8fKf#F)i6W=3t7(q_{ZuI`9KaMvbf{-5|CTT
zN*3_L%!Xv(+eh&meE8X3{AFHzV$Se!hh{V3G!2^V(|2|)IDykcja%LB;oCe^RA@%j
zF4et1A7?)J=Fk}s!d~Ob@&Gi4f2lX%5G)%>8-G9iB47{H_2aPh;5xtV4^{j at 9J_V}
zcQ1gj0E*|^OxRjW8|cR-jdTi;G(9Ot8_7E|F|6y?4Yr<3osU%^N1Ku9+ at PY<%H28I
z8Tf|a%VS)NZ?a=}I^XsatjUhy8GM_QJuDRGxI}Gy>roB`8Hl04ANW0{XtOB|1q?fP
zqSE<6ythcaV!!UQig*Z_1vwBeM;q_B8qGg81J>c&ehbq$t}f*tdlC<PTN|!Yw?oEb
z1LhsFAX*&qbW~6o3t<fn9rYjh6G34oHPpkFj3p2T&VV3jGG|MAjiW2jsn<x^Bc$L!
zCA>i+KybSO5j+avp6VT!Qb#Ci2jU6zXrOzG<EYBLnFLuTR)V!?$fj!|lj0n>>jt5^
z)^RnGf8<#brc4`#1MjN|{9}*db!+eRfG=DRod~$-_`=U#21}HCMeTDO6(FbkI7CMM
zB-<T^`yEI9+?O3!S2WKSUm&hJ at yEpP2XuML?WCc2QKGj;9r7$O2zIfTJC17H2XA0u
zlFHEtP2hi$k{q*S*ek$HudPIF1~LB at n3MMh(n*Rc93 at C!!GY2#cer%QakYwn?66|%
zaIz0(__j2d+A)B at coYFp8?b)K5pjcKAdGMO2n)4iU^(9wNp2bl;@ik8j)7^)PeyAT
z18`v%wVXSYo%X07V1D;BiGHob*|~t$5)ozqL&Lz+01rUKv#1CATSh&?)js`TK?=tW
zoI<N}a6O(VLI-9+Qpdm+zU at n&K$Q at Y3Dov3^n+yLF1p-7GPdPok|_pd at i?Hqq0HGN
zGw+od1#9|2Epgre&iwwgAOkLe2L5F~dI+G4Kl)-ophwBjinWUj-V<T%z#^b{^9dPy
zopBn8(F!jk(g*AC%+_-rEa3<Lj7kJQ(x}w4kV1;8%Y2IE`Jj3|u?bSc%<CD!{_S^4
zZ_+PJo`+rO=%$3`#aj=}cI`U{dEFuCi<|G*dg+eV-c5Li^b9HKBH#Wh?3riI at o7~>
zTE$bDI2=0gpJeNE{RsHhqb)FU+xy$5InI3vMN^gRm5w?-)YyfaX5<ghOkHz_kIt)*
z)0DCJ*<LG1+eW0u;XNl?&IWd!4cJ|voiW(sF9!8yXlE>udK_m|{L>lQ5b)I3PA^5T
z7wkCq0ZMT={E6l0;dwi73T3+kNdaNdL>=`f%w<D=b)4dcK5$3Cm>SHau<5z(IhYOM
zYBi<sGivt3Du(W_^As1ka<rS|E?NOfq$6aTB}amXsDRq<Oh97UXJfIyI3LBdHUOg$
zFn3tFdqHi0?k!lqOzIA}R6aCBPC%7UM!{D}eM_j&C*xo*gcEN=?VjOE^XT3h8VWc<
zbTK}I6Q`wlC?W9<gQ7EsfV`j7gIHKNA2mLOP7(O_yPz)8KZBBYKtnILjxI#j^n>RS
zQv=_Hounz)gaI`b$6~YCaULB~u*1CX;N%fo^Qo>~bbOY5JwPb~*q_NG at -su|GJ`H^
zx&+f at I$fsGMTIPxO6SRS$b9N#%&s;qEd=I^kffHQpgM<Ob{tOj1*|)ZiURB#Ht;dh
zfL>VMD`kR=`L(5Dh8W;PcY~y%GRBqiPm|SC(<y%za#-+#Xv0OyAxL0gQ8n})T$Jj5
z(6!4CJ{7g8d$2Ua0qDXtG}AsPCeb~9s;I+i8*Ww8o44-H=MVDy!7f^>u}~jj at HyIS
zaT-==ZCb!J_isRv{wPI at Rv<j-lx>Q13P9ly&=0PJ9H?t}u%`kcW65i*Vd&;xq80}y
z@!%q0@?Hec0$6Y<rekUaI-LlYKl=wt?g?yZKu_bQA3imRA)XUWd$8uW^^38vJ)=VG
zy_DvI(p><JgonC8Ce(mmY+o2piD)l*13xs5NzwW-lj33Eeut!}jm&eG-5iebm at IAD
zcpgfu-|v$TVYUFY=Ru|n?QM_<0wyyZgU4g(y5f<{{L@{qT4+*+R?9o6%43mE-7^K=
znu%4Jf1(FN at tG+1op|8)uO(udaV{dJXjrnzykLAc7|&$}A*+VL8sEDz&aQwC4Y-`j
zl9t$t4+1JV4e^oexEf&3)%B;+GX}Lxs%~2*{Ztj8{K^+WvVqBcV6w<(5x|DlE(N3I
zK1RfZoJdrXy7@<zD~o*V4s8Ji2{n**9VRoDz&GTV-pRrj`GVrT%j1RLsiqWCvgd0u
zhj0G{Y^{V5X)vT$k<-OssRuP`a6kuP+u!n?;Ey1=lqP!(&YVifen8SlM{&ee>*orM
zmh&J8Vsi;vUiT~5w_xkx(ud)AmUcDlY*+pv1JSTeHJ!1}HV>zw0iT6>*3pG0`I8Hv
zy|-FA`N>{vn6df7zIz;C>L}o0AE4Cx+1`yf7-AbWqL`cpiqw*JsPH5|Lx57iBx(#O
zc@(ILfSfw)f_z6z%0V+0iCN|o*xb}ED(x^3xg180j-b^r(k1*btQxwcoJ8MN>igZ~
z>QEoYa~H8|Yy(cM73aZ(t07$Fgy+>^{85M2PdbJW(#W6EzTuSgM)%(XTR$8 at 5VxMi
z0U3^^g5Q*mwZ4Xd7Wp&4>~(w`;QHPOP%rE`y%&cE$K=x(MyP7oVUFK59Fpznfev)M
zCtccetr*8GB*|<hNhh`2iY#sJo5- at 6WO+wAK3SIGak5l0S^gH#+Do$VFAr8r?~p{(
zKiIpc=hMAV<(Rzc#)8p#297fnEBwK0g`;%1HGtlX61YV=ih~)BSh$Q+sz2dh9wt?f
z%AWwBW#@=j(`u=Y9dURGO0ao=qUjmfy3<JE%B=pwzcWq2;u_-zO1r2HJS80^9Y3C6
z?^9lDw*tcTtw6beAi-Q3mK*3%KY~AP_=TVHBb`@*Jmtr-tI~TDMVK1o6XABR2uS*C
z%=56%wGk%6v75{AB_Lco1F>yCj;94Z(i_28{G}7}c|wKrA=JC{2(pu;!bxcfRYl)t
zdYaLw&o3y?*B2D#uPxW-=da5bB8*~%XtxO|!b0of>D>H?h=?_73)U`<@Io02(h3TV
zi at jir7YoTkBu<6tQ<+$1s at fV|mTs at 9t14U9R9~%&j*BVF(5Dw>l@}SKBcl?^)}-m8
z%L+}^HLDx#hOJx53L9#gOjcV(U0GUXV@;V+mv6G!>rK%H)1((hr7X=ZTCz+H%PSR*
zIKQdc(oj(+EZl;Pq<|k`g=K=iK{Q#>BXK#F$_mjW80+hW)t35tdqWL-H#F7=)fF{$
zrYa!<I#N3YI`#EqFg2D204-ZNHewR2CedzfV2F0BX%zED{I}JJY at P`FY^={*b7KPo
z#%H&0XclG!FMoYQ)w*h*@rbYQIo)Cr*V#C3VMWAZ0j{mwDx_D~Oo>9|wuRf4dPj^k
z-}a6$TNGF;8f?`jE15JdW;3)|XB3(%w$?Ok5t>YuqQwd;FWg4I?sE|l>Fd_z=+h7&
zktr!rizyVw<LjbtjXxeXD(=>>M%~&bo1tQhsi0zWohhxV%4)LNm?$v!HUuj^2J?0s
z++63KO|KDcLUM`_8;v=iP4wGLm3GlYrZHApYZ}D}1$T9w#by#J>go_k`DwXu`4&Wi
zP1tOzw!q~khDJu%3{1hsP>CtxZ0o;(=8IjU4#Bskp+?NGG|;gQhuHUtO37&QSzF&g
zdJF60VuXr at DnazQsnXIQS}k=f14PVJ)Payd>IsT|f}*j-%3Q{=1QCon!JuE0iy_K9
zqi!{*;P2yw`6)s~M3beaO1N*alG^&}nlW4XNEKCBYnV9K!%w7#Lb7c-SFD6jkrF=2
z*aWy`E9o_}qSD5^OZ5k66J=Yra!r+JHCQdx$X*}Bbuc#$lN-}B>M~55?OW3A)rfar
zM0r6c^B%JS%Ogsoo60Z=mJ)0X_LlZswsH*DXKOgjy1mg-(;$u#p;8AAvh+t`G6|DD
zJ{^2;qnZEDz%g+r0#2f*RB0-;*6o6UNv6P0f?J&*IgyU<?K(J}Z)W2CI=GmL^S-x9
zaQRBLUTyTv`|dY}`&vDG^pqTl@=+5e`(q+p^w+^D1)13o<(58^<TKXW#4#e{o_ugw
z+;9d;2B$>u^~sxKYS<#0sRTwuZp-w3P*5TY*{beETOvfEaQoJw+$s|-%{eujtrgbo
zWfbVSrh1EYJ4W(NjYiR0R%)_ZFjj1>XlyiDu at Xgi87%{)n{vxA*~FTL3K3ORVZ8X8
z at LX+a-2TmZ8ZCBfrOC(cX8cfc4V6{UuWa;5=`mPjC;^T_7kM*$vJqjgkB?KTG?po>
z6mc;`Wv!`MaWtcVgGm&z>pgW#`+I5Un<}aZTaoP+{_?^XTWdtqD8fWtCKmaxp=E5Y
z5i8A13x)T1ohDMEo<Iq%QJ6(SgbfwYQth2U{Gn42QplkAthU%u*^<#~e60;~jOLnZ
zu~4z=*T`Im#t_}1sfr~28d#%Ae867csOaXCpGLe10u5p&NPQD}h at NcAX0pC=V+7eF
z at _6z}iE&uedi?}!LOp=V+Ei0%vR#LFbKX7_wuE}i3WPxfP+Z?=mITbSSnDfpAcc<)
zb at Jm2f}yTLL`PK5mQEsXF<7i(neUb9tZXd=w4Doc?28lep!699HT5PdaL{eoM5~>e
zN%W?PLSe(!21|2;kZpmX(ycXBTTDWRiS!rNWUy{EGKTtro5 at 7YgO4_=SmOs2w~peD
z>$4%rXpLK+)>u=yKANr=W<(|q5gD3YQ$-ana$9w^^3DpR&AObL&E@*F<S!Q2SR|pI
ziQ2<-%Qou46NM~$O;rkZD at t6YENp~MUbwWnIxpy&2AH_gM7iOMMHF4?JQsm&r1C+X
z^(K(dCO4?tq=>Pi+N7XEfe3FvPl`phgUhICs<END_sM??x&}xi5^>+d8rpOr;mAf_
z9;}O?g{OQAYHN9B%{Eh2n#eYX<rv7V*j7_-uTQg8*3>BCDN6|3LU0i`4oW8HH=>UX
zW~HUdYk=__ASc*1V91DucXf7JepDP<UWM<{uaWvjR0Uc^+1htYg>Qt))Z!w1w(tt|
z&xztgLU?%9`zHmt9uZ<BH`uZNv9V}diTG3Aw;*a)atkBlw=G+UJoH_nw=Il}rZ?qb
z@}1&W!55MBgdbgXzxNVTB?$DGNEg6?_IiS+9SZ&&fqjhjN|ZlrUMGKwE36Ha4Zfn0
zRkytnfA at kvqVY~-nCeW}H)Ud%kKTCP1X~ctjgMk@)1ttFQ-peK0Y at iLp|RJ<VE-W4
zD at Tr{qDs(Pttee%pEV6lSZ=BWLxr`X9?aQXVS~-y*ofk2A|1V-bYOegQHm&|*YT&}
zwb;SYlE2-H$!^}NIFY}i7j{M>HdsDp>+GUnsRjib>wy$Q7Fp_WzJdc0tJU5pdI at _6
zGvWI&R%<OnuBob~Vr&FYY(%IuS2S$#u~FpA#3DXUN!pc>^H9VaYQ{s7IE^U&UcHGp
z7}cYXgh$7*qGB#s>^=#V88V2Cmdr7VU{q%%8%>- at +dRqYL}1P8T*GyaE66Okevm9_
zsl=XoyqVWDR9fmA(Z13yya=aO=wmq}&JxgNZ5N7aELaz52pvuS>Is-kdYsXaJ0{u`
z*1$4PM^VuUN)-U?*r3jLw#H%C&d at Wl^=0JP#TRus at P{2IBWw`IR*hCmeT at xd#|Lg?
zRJ1N8Hf}|HLR$Lj41MM;>iZfCiaTmL$~=x!%GhhJtx{P?BWStDQl#^)K;MuKBNE};
zY>$x{U7v5Vj$wI1<F`#0oo}kIsA;HD_8mS#iy=_NE?ShUt0Swcg&o-NEFNnzZy}?h
zvSxL4JX_3sPhLH5L0dPD_Lw`^Kkerp$H3uq<vV`vn>>dB*uTZUMFgE}JimfFe*Ncu
zjK6w)0pH)u!7(zv4G0<=zTd<5$N17;=zfInWA|~~Q~1tW!f}i6U5xKCe4Frn7+?P&
zj{EJs2sLAd at rP%QeM at -utIXg3;rS)E72mtoAAEfF`hR$q>pSD3v)<*6Rhz-}|F6$~
z>7HD4?Dd1$yKjFqD6wbxJCC<+kNk6{?SWriK6k$E(x>ll`SK?(X)f%^es-kpj~mY}
zT|VVx|88#D at 7F%EY2~tm at 6B_Dul$c+WxXE1_Q{a5gLf?o`XJGDHAJ`a+iRZpYd*O0
z<#q83v!8u(=k}58wujmb3%4&HJiPws_PiJG&v at z7_s{QK{sWca=NmVb^?sP%+465M
z+_yihw|?<IzB?3 at ysmA_`66eC`uDFaTVLP)eyIM**GoUxeDANb_O1EI`PGhRGoJaG
z=Jao(mOZpST%L03fmbpddoTH$hO{m7 at v{wn32)iNP85{qmT}L|;rWF3eY~gGpDsW1
z2K_k2asTng=#(=4q<7qVf99ppdEym$1A3zXcsPRZ`RFL!?AUp+k+G{|^J0r*Yhu3>
z`*`e&vG2zIJ$6pqeR0Kc<#FGQ`$gOz;||AhD`u`(ykhx^gcbS~;)?Anezc-*#f25?
z<9p(d#m`MFO>9W~LE_=Ww-YZU1|+GHW+f#iZBN>jv?uAAr0%5tq)(IXPu`ULP;yi9
z)5$+eem(hvWdD>oDfg$Oq~xX4rtD1FoAR at i{V9DZr&9(}zDx;OdH2f1mBy7lD`%{l
zzbbiE?y8Netg9TWo?7+%sspR~SG~8&y~?u+3P90)xD`iwBBw>&6?Jb^a#Uv2hNvx3
zk3~Hb)fx3()TO8|qGF>nqBll=H~PoXzmD#R{#*1=^fX<FZiy~h_kiw*?oFMn8`Le1
ziHgaNsgJS8{GXVCm at i{y#_D2|Vq0Q+Vvoj7i3^E)DDIbW2jlwUj>TPz^TdU$n6siV
zzC3<KLR!Lt#5IYviH|4#TVhO7a?&G7k0pICDIhsG`OnF7QiPOMDG#RDQ+@#L-c7;Z
z1PR!GLf)pRmZ*zSGove`4 at JKfEl0l`b3Epqn9pK{V$xz8V!w)4C6p#qB{&jX2`?t>
zPk1xo{e&+Qf)W!F(-M0Uk0t(3(#uJa$%*(A4=xh_$pdbW#^935aVTHhiI~$d=VLC$
NT#2E7r*z}b{{lGaaHjwO

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 b/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32
new file mode 100644
index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9bb90ba06b96644
GIT binary patch
literal 18276
zcmdUXdt8)d-uKN(M;W;%MI)oU&CxIq0RzZU0U5v+bYM6Lp@=XzATTs at 59qEMG*FIr
zQ$EjAdurS5*{%KT^K8%No=n(sL0phbv)s~Z-_6vvn;k1n7tpAAzQ609;pCxh-_QHU
zJD<<ohwJ*CPuK6d23>S{pDDML`<Fil{$<Sndqjht<8u50ClETr`Ogpb3%P64eH{1P
zTxH5Xh~qZ-b6nR_<z2vyzLP(jvJ^NP51u^feb?M%{6 at o@AfN2VajJBVE4UHBzc{vB
zG;I at sTL>LVFVdCn<39q&nU`CuD#QwoTY9^qd#d+79xj#RvX?7hTp48LGC<3Fp9FVg
zxz$u>sZ?|#-8kY+_i>+8j)S%nKT?J^u=<J9)lYO)KXIn|3Ay at -6Fskw`xHlYNjtPE
zDMzbzzSce9?>HM!eEFBoH!uJ9`f>s+Dwag81|VvwKpX1HnBz(K$`+U~Y*Rbm1S~Kv
zzu=zg>~-z9-SZ{To*w~6b@@gglWTo}+Nl8?#|vlF0)Nk$juzO1k8XM0kB{VqF1}Nq
z$KTU+bW64ruEixstHQNFtHHHO8<y=je8zL~$~bxdvt=2_wReg0K#=b|bGvO0paZ4+
zu*>}2M;0G)p6HhSFY~{W*O#uB=1SH;>Dwx)RxNGTcs7R;nPP}X>M)Hj|2N)LOiv$+
zVzLB-fw~0e%y?tiS at 6cl*+J(pASdGg@;ZEDUj6}cA^%gp^TT<z`zS|S_ at AcC!)-_S
z0lLxD89y7}5#{FxQ#j59IEMX1|ER9gk_UT=tDz4Q4$L+3|9Cu}_AYzS$mKe>>fDqI
zyQgNIy;eRM>M;ds%E;yFdbj%A^y*Klol_ls{$~fT11%dRSnr;GPW1`F1)hawMPrQN
za5-iau7Mcuneu7o*=rjoLxqenwlK!hl<LnMy<mJD=((?anplXjGzD;Ays at WHy5KlJ
zTvROg+{SSS$y|Rtk7Ci at wSAt!Ol6};{xvecxbsWQb!gyzc|IT=hcySdO)XqsPyy0F
zji-*B^ep4gs4(>ft;h8*mKH8SCHgy6l3s1TfaEerDo<WmNr^&RyPRkjGTKiDf_63r
z<UipZw99o}8>NpnFzGHtAPcS*o7=#<HdS6g5T*;9EB7xB(?tNQrBi+SkuZoS-;LVk
z(hnQ*I#R(;el3LK7`xd9^K-y9lX~)5o>-{eNiO|}!KMF;K>~(HBVEK``{4FjMdsH>
zVfQPrMaAYoNC)mOumMf^#(uBm92YW-kZ-5jm35C3xrcC>WsZ*naCm7)3-0pgKq*0_
zs(*Bi_X~Sg%JL7+nj+42Tu^rgXaWK{P)br|%Pc08tO2k&73LdftO$ddjHO7gRV3={
zLzpv at naN$Ui!srwq{#L`zU^L2wyw-fTW#dq at 5Hn2{e+EbyIRT&3(gGZ+f*2me-7iA
z&rEd71Wug*fJr((n#gGZaWc0l=J+mPI`)#S^ATWqy8g~7P$^A*ZYIZp8_>Z}dU&q5
zt2VW~*p;CzFqnS?RP&3t6wAdxcN`9F*(LbfR}5x``ioJ6nOZ+_iKi*de42s8Fc39R
z4Mu|zA5T*_X64Orwd1hhUPYi`_Y<{gW1xT}ptl*2#y!{5q&8;&2p&8)gQ<miwdYhx
z3ArKA>xLFtW}&T?cc?k8eB*- at f{qJIjfF+hySodte6jR}bB8uYer`HQ1$hjb5`KS<
zcGg0~Rac&|^{mIka|nV6b0g#BEYL>CHpWjQU2g5+5V~?6NY_r0PL#+$$CK_8RMVh6
zsVaALVP2uDKr3{xApH;=I#dW(m at pwn8)}X7PRo6m*^{9aFp(V7bi4T}u<CpoL8K&5
z8`zb&1Ct}0rtFJ!`|s1X?9k5QM74BWUNsGzg%bBve*cl=dz<gn4LZ8dW)>DXMXgrO
zhp9>=xx`tgjdW`Z9o_HN`pGF6lrFwXs~rJhE*|-W0PBa4jw-E|E}@)sQr8unp$(H>
zbMyz0(!n`eK~dMqJF^1YKjGUPzySVIsZOhvzECEmHweB=8!we<1&}y;kT?+~=X7U!
zAT4>)G3gKu1RrhfXC$%$TmM8ojFWdgta7}?IX?BXzX$wy at C^k<gyWD3e6$Ym@*`R7
zE-azpU>k{&9^>d!0fU?fg~IvvG?dWtjT;_x99}w_&}t;Kd7lz3zbCVl$eFn5-f!>X
z+x`YUbZ>QV>1s~?47QdZ;bEf_7{K#iF at Q+bpa4-fA+Le25D%eLgtir#Pbf4i7)|L5
zTH1??<h$@{@Dv5Yp;SP!P#!-rt0Gyj#!UqM9P|LHngE)rfCd9peiH!ZKaVCgDydSF
zwol0HGk^k#&RBE?<7&tnV%D*V1aG_M at kl#WQWoKdqIiY!_niLG`fJ_tG_4;E9cYWe
zD(k1I4U at x$Jf4#HGHs|B at P*s&nrsWAplKhp-$%I>G at 4tFE9u!;Jjyi?_K;6Pn35v%
zdPNJpB3fVO^yDe9-Nq2-#yPc`_0`TPu&df}X2h8})0Ih;HgrOzHBhD9O{AExek$-r
zH6re5@=S%Zxl!TqA at V@V5(2WqjHvzawz1gL80d+VL#C2lBII32Ja6_Z%cJ9hfErM2
zKEMd*-Y+jk)JEXD6yHdEW8}v{6e0?J_yV0XAeWbR2xQFL6!s+ZK`P|0(n<#}&o>k)
zHQfMQ^2h72jC4#X=&xX`#E3{U5Q*amEZ~RH+Bu4LhZpVSIJ9;`LtqK8|4j1{$lLi2
zo0hlI3?vMLgkfV6YKXjL9QlRgSDXC+B+33dj>SDb$r=eY=4Pnh at uGe-4)tS<l^|Io
z+TVwCGD#;Z(jB9jB6C<274lTPNK?Sq)2KEtWkbspYM!P*Pn<cG4b8<674asOxrz-;
zV*{a{CXIPF8yJQ^JxxnJO%dkbv4M}7gHx3y#C(R0on$~-Pm^F)M-%r$G++z#=*;o#
z{WlCLQub3cMci$V8gHY2XY=aLYvUCCipF+m!?=>2LGt~GWGSS*UyNx at pf%aP)UjR7
z*;P_nSa4dnc(?aHr)4{qLCs(qmci+RX;=mWqu+A-|He;RtC5?odOUI$5t6Bzj$loO
zFT;I><_vPKq(tX&&o1`B`EoxX4akHDj|OJUQqpDnIcX=#Z1v+uJk5cQEh{<C3dfdA
z&aq`JzD1mQ2h^>0X2nw&*QO%Z`mz#dAf+}GI-Ap-<qtTs^5qvm*wY;9Y1WvZ2Y8|U
z6dMTlG>4gAX9Es4p!PJY%vace6$6gLsh(!7r&%zE>j-Nj16t~7jxcAifm}8a<7tjG
z*RcUgfBxmHc!T*V_P&%+N%l0a^fV`$Utwcm3 at OvooNhkP2BxxswVvh&%xcu9LU|B&
z at iZ5Cn)A&uY~UjdFkv=&noG at PZ0t=cSp2KT++3rSg)*#3I>xvE5ILNpE7wKa=So>&
z0a+SDEeAR(xs}|^0}8N7$Lw|h#l_eg#udk~amDeAOCAqa;Bc-)sgBrmA$~LqvFtod
z2 at M~GVFxB<MU1_jmez#@tONb<Sy`cmJYAQ;U;t|}sk{{nq~ow)ERxqEB1%fAQQpA%
z6jZ9bJo!W*0;6ywzcxZr89aG8 at ILqj>bm-SB>hN#Paf4V>6&z at -D96^ejNID(jKX!
zWd(9Mo1#dXCs_hfJ-o9gM`!P&S?Ar(hCnQ$zUeXK;8A4PF4Y+IG5o(nv=Zk$sn=-<
zq$RfmtyL(sR+s)ja=c2UAR1VQ7^SxriS`qYG=<qFGY~fcl*gvO$EK%ZJQUu*E!@$o
z8aLm}=9fzw16|FkF`dSQE at A*cPk<lnx5FFZcoOV0l9t=2C2b6}2k!H8`$u;vEkbCI
zk)%BVX^a1e9)x2>mV~dpzf?LZtB9IgCG`%SPU^EELue+FW<EvGlwhq_Ut~_(_+XC_
zWl%-RlgjUl4 at kYPt)8J1NpjOHvpN=dy3&pe+~waAs?_J5YN4qZ at 6`8cDrrcZVFc+n
zKl6CtZMVPFOVUy|lb1(ZoV<>%4A6NMC4+5-7L6}nZ?kw(cl-`?*}_vBQ7Wf0mJ}`^
zBI#AZdUeskD}b<T%;!mf*iy8Ua}_8dSg*x+1Z{cZXxyL1J$9|fE_m$W9($O_9_q1c
zJa)CmuBwff%}h}3M(^%U?J!;8jLyPgXYL3>l>cd-lskOR-{~jis&Knwy_9=JdDY-{
z8$cc$+k1t>A$C>qA72M|I74IJM`Fa3N^i*Dfo3JrhEOau)663 at 9P3sO_5_F;a~OiX
zHj#je7*MXpwfYK054r)gg at SYSFhznhTZK}n{zZT|%Y2$p?k??kk at 7?!ESjqI803LZ
zJsvZ4GPQc57^oO at tbNFXUXH7&)>-CkqA|a;qkw4qh1{_xcSP4E6{-fi1$&TmNGeqG
zFC02~hUtgAcj`yn{+IVA=tsn>{XK{k`4Vyj1zugtNgC86gC}2b91dl>_`D*Sa*dLo
z?HwZzj(`vI_=52sKL;ShiF90X_tH{1k3 at l8Swj^O4<VP49}_W*(GqNRi=@wSGIA9b
zo at GuYfSl3}qAt%NRQ}~DogNR?j-*54?b4Czq&LLb{L7jC0T(et?}zMe9a5-A>UCc&
zk`1VR(h2wNt|FDvAN}JCkEgB69?HL5<R9=(ZD5J~IDt?L`M%Vv98p|QyYyFzU=Rus
zKO89xN{u5-o-&f>zS53uxXX`1xf0-@&|xn?yGBhO9Vr=Pq$Z3}LJ{41frHqjlUJo9
zL}Ei}#~C8AngECT)?x1@#>s7XYwHr1)p7{lPQr7!I7nAi%dxdkdCN1H{lP$vLo7HB
zhmV~OD6Cw8NCs6cm!D at 2Pe7g#8H4;66ifh1M`RpJ5tEsKGvq0hE_}kWS-$)wEP-8U
zOG=I&Q1-cdJBibUy~zW;K{VvYKh^cqTs-tV$F8iv%MGEldUmB0qi5mUz7Ncl6*D<b
z%uDH7j2rrwND?HQNkfMs$FO}@qBx_pL&UJ01T7I;2awGz?gtO1w(uM}M-7K1_SJ`B
zg5S2db_Kd`KbX1?Cq6WR`>U&H!q2rU6`9ZvhHX9e+YzrC>1_nmix8 at 0&q++h%|d7$
zm+!y;1qQ7JtX$P{I6^=K*K%p{2Z#y at sdHG}J)m-Y$UCkEiqjldgG7|%{+?(oXh1=i
zUnF-!QpC^H0~~keEBEq_JE1NP_Dmz#hM=ze8a<CxI6RtTBP_>S|Hh#f2T-Um*79^X
z1t)=aUVa|*T-k#B$ZZ_g--ELyf9gkbNBC$j&rmw?xhB0UzXMLd;oJWm53Q5~T+?jx
z6_~H{J0RDwj|}-aTv#&N9_X*g8K5s+bUmtpX{95GX*mp>ociI`UXF&2%PPG87o8T^
zKkxoHOgbg)9D&tlVN^Pa>FM-vTs{i`FBJ3xz~>lf*?EPdRwLn>JB})=bLU0H02fCM
zaD^E_*B^X3_%-K-i_Y9DQsEUzf3YJHdh(GdT}U64lN!VX!cylosC03tmjeWr{=h_N
zcx+Td4QYr;1g02N>%ZO|pzBKAs3e=?f<}IcLJ6id!oRhsP{X=@nZphfzIE&z4z|ui
zZX1-fN}h-M$-k_J-!*hHBI&R6_W%tGnXccUdn--uL*IiUKye|5_4mkthnFZ8&JRQA
z`ysS+QBL-<oF#9=Qwn9AEvWm`Ff5N3Q6DI!jMBUOekyHr{(GBa*k4pTh6BW at O2pqQ
zw<7>+IrF{@6bDXH6&cY_t(T5C4u`c4fa!BX at 7~$Jpc_khUXc__r=Tb&?m3QK0*99V
z9k}BzY>W|?w>f&3CdJZ`sP!yGdkNLSVHR}k<WMDjj^ibxS%6W^k#xa<Ao36Fk$>n7
zsB;Nv_lO|}z_x|C2XCLFt$2hY=|uZmVukd8fDJ||AQwyNTE`i`;9evIyw&19?s~|h
z>k6=HW~GNB*z9*YzVbBBk*pdJxkH-j<dcpxg&YVX(4Q%~{|MA at rk{rxE2Pc6uFLH_
zfK6<R`;k0p25Ex$Pa&0)uG*>`eHy7)10hPKtWa=v9N|R0uFLg+CxD-Y!=J9^ENhVC
zs;4<sS|J_Jmx@)gXAo42Tv-<l=In`D>*?Tuv4HN5zNLUk>bCwwv6~{@KUm&}>bj7b
zII%$QpugzUUqSvLEYLf!4#L|qsJ$J;MWurX9qS<A{lOkTtn5_~pmtYj$8Ox^Ot3G3
z$pu}%)LoqrEZ&iln$B~!X{pr->ecqoAM81hhW7`1bY1j?$;0CP#83rDmD-Z5Ldq&I
zJ at iWgEkIa*0&8(>BWgpjXf#4%#5M(Nk!}!WB*CuQC1B-Gdc$^yW2eS%_ids|I at B$z
zcBlCT<Z3dL?5Z8-%B60lUqUyg^o+phox<fCT!m_c+I-ack`gIbow>)kFO}nVhe$_)
zU$dVnN31J-*7;$_1<{C}0>AMTDZP$LIt~7<=Qsh)lSf>HPH9nlzx^Kb?_i3~Zz0$^
z&X7@}Xs1CQVEYVMXBHR%kT;hl0ni9Q_uCjcNT&KlsyH|4D;&3Oqq#Dg>%j7`6c3y`
zjLn46%x0ST3C$oiQO0l;Q{`%8Z&EL6XcxgW07envSHlniEMz?c;2*0;<O4a3$l{LQ
zOF(WVD_Ot~GaHhDZy&{P at Zo2B@t1k=i8;f^9h%LA(==$dPv6<K-~>(&HEwmghi~&x
zQK1=8yHxl7e4P2<n?q+n2z!ky%LC9H{-xf4L$GWlZT$W4i-0{)*N?;2gX{ddKUDDt
zaqQX^+`Rz80w|tuGhu5jZJ-~UG}0+V()6SpZ6xo=#IUYkH`sbEbv{;w9BoFXbAyUb
zD|hE;XW$!xFOP98zR8Z^>3rKyuqHc(XYg%K_OMW#;}W&;tw%W&WFUqDf8h6+qRpl>
z6fo at EiAv`O@!lfwiv7CJD&iqz7UV#@9BsVgYBc}Y3|NP6`z=i4xVn^o>`6TEZEd(p
z-3}R#4VZVxf at pEb(@{ZXEQB>Qbku*~PXvXX)KCvwGL}FXI0J&9$($|eHIA-8r(Ppv
zkC1``mGB0Q0Kx4BMDQqtd#ZO_N*$r79f&8;qk--%j-x8~W)ftXSP9mmA)Bs=Op0^h
zt{a5vTF2E${*h-%m@;h`4!o}>@Q*!)*R8$N1HN!QbRyuQ;|o7~87xum6}8WCRDhiB
z;}9A3lWcbw?spvZb6<8`UC}&Se1W*?#2*vCAJF9~x08nAMTy=Xb;z^CAlSuT?l`J(
zAH0EuNh(JpG=cv~N^;DSVXpu)y|xmy8N~csU{2m2NGB<(aFif at 1qVu}+~LwG$JHwS
zvBQe3!^u9F;oH(+YR3Qq<52`aZNT~^N5l<|fiS-9BP`U8f#rN#B)MrIh;JjWI0mLE
zKN+oY48Vn5)N<}ncG{zUfcf3iB>J at yXXgT1OGKCf3=IQM13Ul`&!QgeZyEInSNrsX
z1t}aia0;!?!S#5e2pyOONgV at Q__i;70#!mpCQ#eE&<~P{yXbNU$=H^UNv0T-#p8hb
zhB9Z9%)D1-6s+k7wZwS?IP?3{f(*C>8u*v}=pleE{^*MVfgUA8E7mSDcu$121B-y-
z%_n5+b;fBVMk~CGNFS`jGh5Gju!JA{Gb$1MNTX8ELJBFWF7qjt=Y#6?#3o1$Gp}a^
z`?udIy-B|?c^-D9qni?%7jHc at +qLf;<aLLjFK)hL>!mwddpF at 7(lex_i+ua5uxFk*
z$EQ^lX%$ap;&AA|f0C`w^&{Y0kG8<bZSQZJ<~a8y6irpKS32tWP-7Qvnvp+1Gj+`!
zK02>LPE*F>XM3$6Z5xpqhxeRpIUCq at Heh#wcE(_jzZle;p`Ecr>T#S=@lR)HL%>sC
zJG~UWUa;fb2Pnni at F$j|hv)6UDU|IFBn5;)6Lr*|FqaMe)p3d&`oJ9lV`?yy!lviC
z=U_I3tJRdk&#2iCs~Eb!&Qo0E%F%9;yJ!U{k&cjUmK+Hlq5^8aGXaTZpN+--;(Qd-
z+5n73z}#Ww?gh00y0>8cGO0V at Qu)vjIRRBZ83kV@^(~=7pNxaO5Kg=ewR?su&7*s3
zXei(a(Z%=-PMntJp at hUc42sSi0`h)R4`N~AeAM_9Iz`~y?}EBW{|rjr0S&#}I=T>9
z(+{3UObvV&c9N!G69&{&9E;6j$9Z%}!4C7jgOf*W&8NC{(eYXK^#G*|V1Fi$$j=O+
z%M7}x=@Lwr>2#S!7ZtK(DxD|SA at iw|F}vEdv=EptLXujJg6bTC*>O187qIRuDhjY~
z*ucj~1A1Y3uapTg=GT^r8DfAF-3^k4${1J5KTTFoO{e@>$YH?`q74@*haiE0Mb*%I
za8auJLDw!n_*B%U?!nRw2cQer&`kTFm_+yZsiF?6ZMaoUZ{E5)pFha+2fJvk#zK9B
z!RKhR#c5cfwP^v at +`j=u`lA#rT7mGSQ?@D6DFB5-KtH$=a-go^!JZ0)j3uwJhM}8(
ziCP?-#Dj}~$$Jq%3t+*en2xCx=yW1n{_GzpxhJrt0X>bIe)!ZNhImdi?ZKMg)-T4w
z_KXU#_fnb<N_PP?5+3RXnNS0Mv3+4YC8E9L4gAnJCPnMVOp1qr`yG;^HZsp$c5^t!
zW3seq<9R5te!ovXgxLbno(GvSw6{Sb2$;-t3?7fA>xxG*^G|odYN1IPS}pIODvw1v
zb<Y%dYbI7@{)rw8#b=`2cjAHHzm|w;#<_@?qG8D<^Mdi+U_6%@gsd6{Ykcp at IJ*Km
zG~jY7OIl(pJ_xAfG{i@;<7$9CSJ$6P&luD)sk&{M^ix%U at +)5i$p$9(fypADMF1OG
zyA+I;`xp at uaw1Vl>gFF=t}ODcJG2E9B-B9Kb(qXp0^g8ddM68C<O_=TE{_*}r<zho
z$)2yt9KQV*u(c9Kq`{D0MNSukr5 at C%!2unFZGX#mf<J=fQkv{FICCl?`vFNK9mNq>
zt)DA2TF!$Yh|MKvdEKvI--4}&OCN^gS=!aGvt9Xz3`D~=)pW)>+dQ0#27DIkSw|P1
z<WDYu_TFmg<R^QvVaDbQ`|fdosiT00eSlK$XL~o|V2Ewhh+=XYC{jz>p~92=3;{|3
zlc+JE<WZm|0&?oG3-TQ?DF at A1BxadUU~^NusI<dC<Z>7}I)YZiNSE-#uxjX%auR)8
zsqc4_t3!Pp&t1f>u?;x2R-6YDu7+ at x6P{Ox at kbq6Kj|1kNF#qr`-W4}8{K~oZ2fQq
zLEL&42V^*w3Vu^M*7_O-TIA0Fv)A!)fa`lBK)tZ%^j;hu9FtFD7@?|RhdF-Na7ebN
z2RhL4o^)x?wPGB%kR-F2B%Rc5E3&k?Zz9WPlI0!g_+(jz$H`L3Wcgb_YcI*dzdTqi
zy+aaB|6uQ)o=^8em1FX%8w*C~892^Rtnde~6^_#3)&P1lO5hghC=O;gV&O7Qss4n2
zd6-l^Dt`iimYpMBO{=9ocEsT&D8c3dil%2^>rNwuE3^6!|IRc8i))M at DD9#)@RW3v
zbo_XNy-#_q-3kcTw*ut?f&_DESZ<(4{RsZF;TL|&k91xM@{}LTu1fDs6k%$RPlVgO
zA|UCnG0($3*G8BO$8Ijemw<5X48*qmIGz^tNN)sV at t01>=Lr?ghfwd*BgjsY3MZu{
zR26-n>1jrzKEI$mUtds|zqVYTpT90&h%ky3qTME>2n(%?r*rcoA|lqTEm*ra!V6_A
zNGm8bF7|>gUMwUFkvJ8mPi116scLI<S-QQZuBvQZQ+>5AIxeOxL!VxlRbFI_j*Lnu
zTa%`XE-N%u*Q{=|8 at 6sKD{QD~GFfdEb!BOljWuOPUB1a?uQx>-Op{(1m9jLuXvs1)
zEU#2J;{2v&OG8DSuy6}Dk^+8&6_yG52GL|ikHqCzDl0^jV63kfR$J=p?F}{T-OyMg
zR9Dp0nW}^c=t%7p=+xJb!PHn90JLo7*oaB6nnb&`fg#$hrculr@!wV>vUwuxv#~yN
z&5aEV7 at ys~p;?#_y!`bIRqLvK#v{JI=X8rjTxa9Bg%uHt1-Q0ytB_t{GbIX<+ZJwH
z>K!rGeA_$1Y*ApXXs}hAtYp%-n9a~;ol$76*jm%DMQAcriWV!Zyl at -+y3a*Kq_10-
zqfbMCM5d%fEv8TykFSfqHU4<msJL6h8g*-%Y=(+0rh<yib*8kcDyzw6W1_&^+Yqey
z7|h#kaC4n^HoZo)3CSr!Y&7P4Hqmc0RoX=pnZ{UYt!We^6x`Ky7Mn?^sH;OD<)`Js
z<y#O5Hes`=+5(rG7#bO2GcW}kLnWq&v#tLEnlE;ZIt1UEh8i)$(m=;L9Ae)mDkY=I
zXKj50=`E~}ixDasssz#Jrb<hLXtmU_3=lC>Q3pZ-sV6A<35v!RD{~pg5=1cS1cQD}
zE`})cjJnmJg1?U!=BEe|5lxnwD&fAxN^0w?YsPHlBUMyktzqI^4?mF}3dy$VT(J^9
zMN0T6V-w((t)$n?ib@;vF4Z5PO_Xif$~9G@)nK($BYS-i*TLL4Om0lisLL>Iwr@$d
zS0mni5#<G)%zMlRERQISZYskhSW2)l*jw6j*~&3opRM6A>-I)VO at lZ}gi0Me$kHE$
z$s|nr_;m2Wjb{Eo1INUj2snwJQl+WXTDJ=ZCYb_132t?M<U~5Yx9i|^zL|;l>)>K0
z&imdb!R0H}dbQCv at 4Md^?rZh%(Nl6H%12F@?2n0X(O(Cr6l7*Ulw0~tlFwLg6UT^*
zd-B0$al;uX8JrTq*C%g|sbPy~rV<ztxh>QCK|zTqWUIOtZHW+t!tGm!a;r?VH0RW8
zwpLiTmr<bSn(8gq?HI{7H5x^0S*git!C0}iqOs9r#Yz<6WwZ>GZptmgWD{!|DnwLO
zh4JEV!gIByar-ytX|&j_l_np%oAE=*HB?qXzp~LMrN>~Ap#(SzUF6O1$wq{|K0Z#V
z(paXjQpCj&m9?g3#nFrc4kl5=uJ_a}?eC?XZ>p#wY(=(P_{$4lY^@PZqX-jqnONk%
zhL*9pMyxb5Efn74b(%<tdIBZ5Mqw5S5jIpnOSN|b at rO=9NFjsbv)W=uWlKh{@wGO{
zF`8?t#X`ldUn6rN8bfr4rYe&7YhaBg at d0~%qoSKnej4#62sDV9AoWe?A$qbco5}jh
zjS*yz$m7W?CB|V<>-7_`3H1ObYg0|7$#xyy&3XG!*b?e3D-Z?|KyiJeSrRbQVy&;Z
zffPPI)X9%82!^@}5gk!ITRMrn#bB|DWxiLYv$C}i&~`4&u`f=<gVJXd)YO}-z(KcR
z6Rmb?CefQF3WW_ at 8!XKYLbe5lO1IWjZ7~TMCemM6lfk;x$QbGeZYC2o4?fzgVvQeA
z+&YRouFr-fqcv`QT4PP+`e?dhm=T#cL}X}oO%+wR$Zgft$~!BNHtTX~Hka$ylD}A7
zW08b<CTb7UE!(IEPZYB3HB~9tttfGovak_4dEwIP>b#(98erl|6Xk|47EyGm^IQbB
zk;(^k)|)^+o7|volOo27YLkKv1tPowJt-F14lbjnsm6xp-Y5Sp=o%o6NW^^)YiQGj
zgd-byd9W^m7M}7gsIBFhHQP*8X(HPkmSZ5dVp~nUy*|xWSyQ8krz|0C3&BO)I4GH%
z--tdon3a|)uK~t$fSh34fFUCq-qqP@`B8Cbc@@4(zeegCQ59$vWozFp6}}NFQ;Uo6
z*}^N-KPQS03E|;Y at 1GRpdPInk++fH4$Ht;<CE`zc--4)J$t{eG-?nTa^3ZpQ-nK9@
zn%<O$$#;rh1z$wg6Ml5n{oYGVl_1b#B3%Fn+Up6Pb}0CB1oko7D^dQid7b<zuCO*x
zHu#E0R^9eS{M`%wh{ijSVX8A>-;{}6K6>ME6Kp{oH$IBtO^X5xP7&&{1st6~g~nbZ
zgZ+bGuN*m+iYh^GwW4&5ebzKIVY#Ui3>DUjdN5~mg$*`)V<U>AiFEXS(t+(|M=7F=
zUdNw?*J1}pOa68*CcAm7;za(6Uf3Cl*kJjXt+R`Qr5Y4$tOrsIS!Aih`3eq1tX6xY
z=q2nO%!Kd9Sgo}Pxu&X`im?$qu at RxtT+y(_$3~Ge6N~sbC23bi&O;Gzs2LAQ;xwZ8
zd-W#bU{sGj5*{7Lii){lvHK)cX2>8mS~ABdf>E87Y&3BqZSy3n6M;3Wa}C!yt{}7E
z`a!a!r4oDU at n&ArP-&@eMEgp+ at FJXAp^xQ^I7>j6wOuHxv0z=KA#^nPt0!PG>2XFw
z?wDv(SOd#E9YsYaC{+NkV}m;1*&2skJ44UJ)|ZiE7hlxnz#n#;jIco*TQyoO^))t-
z9Ur)nQPH}X*tiw(32Eu8GxV9asPAhmDDJ4~DDyZ at DPym>wn}9ojiBWoOOejI0)0a|
zj7WrUvpq&;bbY?bI)>#5jo&t1biS#+qNbrr*?0H|Ervi5yJ%6au8yp(7It96vv{n@
zyoHR0%9_>H at oX{kJ$d!K1#R6p+GFlu|FoZb90P~bmGAhuZ}J=lVE-2X77=u^@%#$z
z`1POrG5+fH1$=)q2gk_xHXvwh_<j%HALC1Zq5BcOkKM;{PvJXj3CAtMcQL-p at NL5P
zVSN3AIPSOiBGil-#vh(J_ATMruQGrChv%2vR($VTfAI0y>;K_duJ4SC&U%+OR&55?
z|Gz%}rF(MGvDXh~@4o%fpv0c#?>yeRJ at U_)wg-N7`P})sOP{{K<;$PEq`9ys``MAY
zKW;p`borE%{kyqozhC>vrj^SMzBkVqzVbhQmGyf3+9yNK4&JpW=z~Pp)ezmvZ?AdY
zuleB0m)FHF%zpOCo!dvU+a78&EZn|)@bLPh+w)$$KjWoS-#@=|`43cvpKsh$*85?4
zXUo66aNqv0-ulJ=`0h|p^18My=Zl;n>fgVzY<+$E`=R<LUoZV&^S!^$+PCH-=T|$P
z&3NW#n$y3DTK3TTaCyq92VTi=?7ie~8q&7R$ImwSCA?)5J5f-cTgE*<hvyUC_wk-$
zf4cn48}#E8$Nk3}qf^TGliqRf{h60W=ZRP34d{&m;Nb|q=cA)^vt#GQM#ip=&5JFL
zt%?0k?BlU7#=aZ-_t-gc_r(>*mB)QI?iX=?j5{31t(duD at rvau5?1I}h%2_Q_|b~K
z6&F^lkMD^;7C$$!G_fJ^2Z at Ih-%h-c7?7k&nw6B8v^{B8(w?MelDd=nlRizlKY3H~
zL&;6aPbdE@`Ss)vlKoTWq}-p9l9HEFo3b-yZ_3Y7_NVlvoK6`?`7$MB<=rb2R~lFL
ztemlG{;K3vxvMs=vaWKhdTQ14s}8K{U-jN9_bSgSC;&zG;Z_{!iJTU7SJb^x$x)e6
z8=|&EJr?y$RA<zCQJ12=h>DHQh~60e-RK`j|2n!O`ft%g(bIGxx+S`3-2=KKx;J&Q
zZcw*4CMqU7ras0V^M7InV!n)-8LNv;ifxJQi9H%SB`zfHp}1eh9gORXI~I2>&J!21
zV$O=f`11G_326xn64xZwCO)3{Z;3HU$w`kSJ(l#nq=4k$<Uc3RNfA<3r97BoPx%3~
zdp8At6C_~&33;2MTB0sS&5W*$J{0{{v>g3%%<-6aVm^x*ib;!Yi2W*Fl~9^cmEcHl
zCA^rhKjF=U_Y=NM2ue&yOiS!ZJeK%BNiQcwCMV)gJh({wCl9zi8iPwJ$Dw?2Ct^;=
RoR7H}b0voUozjgz{|nl9a at 7C;

literal 0
HcmV?d00001

diff --git a/edk2basetools/tests/GenCrc32/encode/demo.bin b/edk2basetools/tests/GenCrc32/encode/demo.bin
new file mode 100644
index 0000000..9f9601c
--- /dev/null
+++ b/edk2basetools/tests/GenCrc32/encode/demo.bin
@@ -0,0 +1 @@
+This is a test file for the GenCrc32 python tool~
\ No newline at end of file
diff --git a/edk2basetools/tests/GenCrc32/encode/demo_crc b/edk2basetools/tests/GenCrc32/encode/demo_crc
new file mode 100644
index 0000000..546f91f
--- /dev/null
+++ b/edk2basetools/tests/GenCrc32/encode/demo_crc
@@ -0,0 +1 @@
+U@"�This is a test file for the GenCrc32 python tool~
\ No newline at end of file
diff --git a/edk2basetools/tests/GenCrc32/test_gencrc32.py b/edk2basetools/tests/GenCrc32/test_gencrc32.py
new file mode 100644
index 0000000..4d8e3b8
--- /dev/null
+++ b/edk2basetools/tests/GenCrc32/test_gencrc32.py
@@ -0,0 +1,124 @@
+#@file
+#Calculate Crc32 value and Verify Crc32 value for input data.
+#
+#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
+#SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+#Import Modules
+import shutil
+import unittest
+import tempfile
+import os
+import GenCrc32.GenCrc32 as Gen
+import filecmp
+import struct as st
+
+
+
+class TestGenCrc32(unittest.TestCase):
+    def setUp(self):
+        self.tmpdir=tempfile.mkdtemp()
+        self.binary_file=os.path.join(self.tmpdir,"Binary.bin")
+        self.create_inputfile()
+
+
+    def tearDown(self):
+        if os.path.exists(self.tmpdir):
+            shutil.rmtree(self.tmpdir)
+
+
+    def create_inputfile(self):
+        with open(self.binary_file,"wb") as fout:
+            for i in range(512):
+                fout.write(st.pack("<H",i))
+
+
+
+
+    def test_crc32encode(self):
+        inputfile=[
+            os.path.join("encode","demo.bin"),
+            os.path.join("encode","PcdPeim.efi"),
+            os.path.join("encode","S3Resume2Pei.efi")
+        ]
+        
+        outputfile=[
+            os.path.join("encode/encode_result","demo_crc_py"),
+            os.path.join("encode/encode_result","PcdPeim_crc32_py"),
+            os.path.join("encode/encode_result","S3Resume2Pei_crc32_py")
+        ]
+        
+        
+        expected_output=[
+            os.path.join("encode","demo_crc"),
+            os.path.join("encode","PcdPeim_crc32"),
+            os.path.join("encode","S3Resume2Pei_crc32")
+        ]
+        for index,o in enumerate(inputfile):
+            output=outputfile[index]
+            try:
+                Gen.CalculateCrc32(o,output)
+                status=filecmp.cmp(output,expected_output[index])
+            except Exception as e:
+                self.assertTrue(False, msg="GenCrc32 encode function error")
+            self.assertEqual(status,1)
+                
+           
+        
+    def test_crc32decode(self):
+        inputfile=[
+            os.path.join("decode","demo_crc"),
+            os.path.join("decode","PcdPeim_crc32"),
+            os.path.join("decode","S3Resume2Pei_crc32")
+        ]
+        
+        
+        outputfile=[
+            os.path.join("decode/decode_result","demo_decode"),
+            os.path.join("decode/decode_result","PcdPeim_decode"),
+            os.path.join("decode/decode_result","S3Resume2Pei_decode")
+        ]
+        
+        expected_output=[
+            os.path.join("decode","demo"),
+            os.path.join("decode","PcdPeim"),
+            os.path.join("decode","S3Resume2Pei")
+        ]
+        for index,o in enumerate(inputfile):
+            output=outputfile[index]
+            try:
+                Gen.VerifyCrc32(o,output)
+                status=filecmp.cmp(output,expected_output[index])
+            except Exception as e:
+                self.assertTrue(False, msg="GenCrc32 decode function error")
+            self.assertEqual(status,1)
+        
+
+            
+
+    def test_CalculateCrc32_outputfile(self):
+        output=[
+            "Binary1",
+            "Binary1.bin"
+        ]
+
+
+        expected_output=[
+            os.path.join(os.getcwd(),"Binary1"),
+            os.path.join(os.getcwd(),"Binary1.bin")
+        ]
+
+        for index,o in enumerate(output):
+            try:
+                Gen.CalculateCrc32(self.binary_file,o)
+            except Exception as e:
+                self.assertTrue(False,msg="GenCrc32 output file directory error")
+            self.assertTrue(os.path.exists(expected_output[index]))
+            
+
+
+
+if __name__=="__main__":
+    unittest.main()
\ No newline at end of file
-- 
2.37.0.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#93032): https://edk2.groups.io/g/devel/message/93032
Mute This Topic: https://groups.io/mt/93391061/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list