[XML-SIG] UTF-8 and ISO-8859-1 problems again

matt matt@virtualspectator.com
Wed, 10 Jan 2001 21:15:09 +1300


--Boundary-=_oQHnWnkUEwHsqmGbbuqCLJJiVswM
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

On Wed, 10 Jan 2001, Martin v. Loewis wrote:
> > If this is a bug, I will post it, but I'm not sure it is yet.
> > Attached are two files, one a test xml with encoding ISO-8859-1 and
> > the other a test python script.  The problem is that if one uses a
> > pyexpat parser, and then renders in ISO-8859-1 then things are ok.
> > If one uses the drv_xmllib driver, then an error occurs as it tries
> > to translate back to ISO-8859-1.  My guess is that the ISO-8859-1
> > transformation into UTF-8 for character data(which is what happens
> > when the original document is parsed) is not being done properly in
> > the drv_xmllib driver.
> 
> That's a good guess. drv_xmllib does not implement handle_xml at all,
> so it does not know what the encoding is. However, what it *should*
> do, atleast in Python 2.0, is to produce Unicode objects, not UTF-8
> encoded strings.

ahh ... ok.


> 
> Would you like to look into correcting that?
> 

Hmm, means upgrading to 2.0, which perhaps I should do.  The problem is that I
use 4dom in some quite heavy zope products, and I am unconvinced that python
2.0 and Zope are stable enough for production environments, and too different
to have split between production and development.  I am starting to figure out
PyXMLs stitching and would love to contribute somewhere.  Character encoding is
a good area.  The other part though is making 4Dom pickleable, which was
actually my next little project, to look at it some more and see where it is
not pickleable.  Could be simple, someone may already have the answer.


> > My only reason for using drv_xmllib is that pyexpat still has a
> > memory leak in it.
> 
> Not that I know of, atleast not in PyXML 0.6.3.
> 

Having a closer inspection of PyXML 0.6.3, the original memory leak from the
parser doing it's parsing thing has gone, but there is one that exists for just
purely making a parser.  I use to call FromXML and its derivatives with no
parser defined(ugh!!) and after about 77 loops of this memory would suddenly
start been eaten.   Anyway, now I just create parsers(the same pyexpat that
Reader defaults to) as members of any class that needs them, so the memory leak
never shows now.  Some of my functions need to open up to 100 xml documents from
files, import nodes, and write out others, so these leaks tend to show up
quickly.


> > I was using PyXML-1.2, but just tried PyXML-1.3 and the errors still occur.
> 
> I'm confused. Where did you get PyXML 1.2 from?
> 

Someone said go get PyXML 1.3 on the 5th January from sourcefourge and I only
found PyXML 1.2 ..... which has now changed to 1.3 ... and there are
differences .. I have attached diff PyXML-0.6.2 PyXML-0.6.3 so you can see.

regards
Matt




> Regards,
> Martin
-- 

--Boundary-=_oQHnWnkUEwHsqmGbbuqCLJJiVswM
Content-Type: text/english;
  name="diff.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="diff.txt"

ZGlmZiBQeVhNTC0wLjYuMi9BTk5PVU5DRSBQeVhNTC0wLjYuMy9BTk5PVU5DRQo2YzYKPCBWZXJz
aW9uIDAuNi4yIG9mIHRoZSBQeXRob24vWE1MIGRpc3RyaWJ1dGlvbiBpcyBub3cgYXZhaWxhYmxl
LiAgSXQKLS0tCj4gVmVyc2lvbiAwLjYuMyBvZiB0aGUgUHl0aG9uL1hNTCBkaXN0cmlidXRpb24g
aXMgbm93IGF2YWlsYWJsZS4gIEl0CjEwLDE0YzEwLDE0CjwgaHR0cDovL2Rvd25sb2FkLnNvdXJj
ZWZvcmdlLm5ldC9weXhtbC9QeVhNTC0wLjYuMi50YXIuZ3oKPCBodHRwOi8vZG93bmxvYWQuc291
cmNlZm9yZ2UubmV0L3B5eG1sL1B5WE1MLTAuNi4yLndpbjMyLXB5MS41LmV4ZQo8IGh0dHA6Ly9k
b3dubG9hZC5zb3VyY2Vmb3JnZS5uZXQvcHl4bWwvUHlYTUwtMC42LjIud2luMzItcHkyLjAuZXhl
CjwgaHR0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9weXhtbC9QeVhNTC0wLjYuMi0xLjUu
Mi5pMzg2LnJwbQo8IGh0dHA6Ly9kb3dubG9hZC5zb3VyY2Vmb3JnZS5uZXQvcHl4bWwvUHlYTUwt
MC42LjItMi4wLmkzODYucnBtCi0tLQo+IGh0dHA6Ly9kb3dubG9hZC5zb3VyY2Vmb3JnZS5uZXQv
cHl4bWwvUHlYTUwtMC42LjMudGFyLmd6Cj4gaHR0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5l
dC9weXhtbC9QeVhNTC0wLjYuMy53aW4zMi1weTEuNS5leGUKPiBodHRwOi8vZG93bmxvYWQuc291
cmNlZm9yZ2UubmV0L3B5eG1sL1B5WE1MLTAuNi4zLndpbjMyLXB5Mi4wLmV4ZQo+IGh0dHA6Ly9k
b3dubG9hZC5zb3VyY2Vmb3JnZS5uZXQvcHl4bWwvUHlYTUwtMC42LjMtMS41LjIuaTM4Ni5ycG0K
PiBodHRwOi8vZG93bmxvYWQuc291cmNlZm9yZ2UubmV0L3B5eG1sL1B5WE1MLTAuNi4zLTIuMC5p
Mzg2LnJwbQoxNmMxNgo8IENoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uLCBjb21wYXJlZCB0byAwLjYu
MToKLS0tCj4gQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24sIGNvbXBhcmVkIHRvIDAuNi4yOgoxOGMx
OAo8IAkqIFN5bmNocm9uaXplIHdpdGggc3RhbmRhcmQgbGlicmFyeSBmcm9tIFB5dGhvbiAyLjAK
LS0tCj4gCSogSW5jbHVkZSBkb2N1bWVudGF0aW9uIGluIGJpbmFyeSBwYWNrYWdlcyBhcyB3ZWxs
LgoyMCwyM2MyMCwyMQo8IAkqIFVwZGF0ZWQgdG8gNERPTSBmcm9tIDRTdWl0ZSAwLjkuMS4gVGhp
cyBjb3JyZWN0cyBtYW55CjwgCWVycm9ycywgc2VlIHRoZSA0U3VpdGUgQ2hhbmdlTG9nIGZvciBk
ZXRhaWxzLiBNb3N0IG5vdGFibHksCjwgCXRoZSBTQVggcmVhZGVyIGludGVyZmFjZSBoYXMgYmVl
biBleHBhbmRlZCB0byBzdXBwb3J0CjwgCWFyYml0cmFyeSBwYXJzZXJzLCBhbmQgYSBQeUV4cGF0
IHJlYWRlciBjbGFzcyB3YXMgYWRkZWQuCi0tLQo+IAkqIFVwZGF0ZSB0byBFeHBhdCAxLjIsIG9m
ZmVyIGFsbCBQeXRob24gVW5pY29kZSBjb2RlY3MgdG8KPiAgICAgICAgICAgZXhwYXQuCjI1YzIz
CjwgCSogQWRkIG1pbmlkb20gZnVuY3Rpb25zOiBub3JtYWxpemUgYW5kIGhhc0F0dHJpYnV0ZS4K
LS0tCj4gICAgICAgICAqIHN1cHBvcnQgdGhlIGxleGljYWwtaGFuZGxlciBwcm9wZXJ0eSBpbiB0
aGUgZXhwYXQgU0FYIGRyaXZlci4KMjdjMjUsMjgKPCAJKiBGaXggYSBudW1iZXIgb2YgbWlub3Ig
YnVncy4KLS0tCj4gCSogUmVzdHJ1Y3R1cmUgRE9NIGludGVyZmFjZXMgdG8gYmV0dGVyIGFjY29t
b2RhdGUgbXVsdGlwbGUKPiAgICAgICAgICAgRE9NIGltcGxlbWVudGF0aW9uczogcHJvdmlkZSBz
dGFuZGFyZCBleGNlcHRpb25zIGFuZCBzeW1ib2xpYwo+ICAgICAgICAgICBjb25zdGFudHMgKGlu
Y2x1ZGluZyB0aG9zZSBpbnNpZGUgb2YgdGhlIE5vZGUgaW50ZXJmYWNlKSBpbgo+ICAgICAgICAg
ICB4bWwuZG9tLgoyOWMzMCw0MAo8IAkqIE1vcmUgdGVzdHMgcGFzcyBub3csIGluIHBhcnRpY3Vs
YXIgdGVzdF9kb20sIGFuZCB0ZXN0L2RvbS90ZXN0LgotLS0KPiAJKiBJbXByb3ZlIG1pbmlkb206
IHZhbGlkYXRlIGFyZ3VtZW50cyBhbmQgcmFpc2UgRE9NIGV4Y2VwdGlvbnMsCj4gICAgICAgICAg
IGNvcnJlY3QgTmFtZU5vZGVNYXAgb3BlcmF0aW9ucywgb2ZmZXIgY2xvbmVOb2RlLCBzcGxpdFRl
eHQsCj4gICAgICAgICAgIERvY3VtZW50VHlwZSwgRE9NSW1wbGVtZW50YXRpb24sIGFuZCBjb3Jy
ZWN0IHZhcmlvdXMgb3RoZXIKPiAgICAgICAgICAgZXJyb3JzLgo+IAo+IAkqIFJlc3RvcmUgeG1s
LnVuaWNvZGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQeVhNTCAwLjUuIFRoaXMgaXMKPiAgICAg
ICAgICAgYSBwdXJlLVB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaXNvODg1OSBtb2R1bGUs
IHdoaWNoIGNhbgo+ICAgICAgICAgICBvbmx5IGNvbnZlcnQgYmV0d2VlbiBJU08tODg1OS14IGFu
ZCBVVEYtOC4gUHl0aG9uIDIgdXNlcnMKPiAgICAgICAgICAgc2hvdWxkIHVzZSB0aGUgVW5pY29k
ZSB0eXBlIGluc3RlYWQgb2YgdGhpcyBzZXJ2aWNlLgo+IAo+IAkqIEZpeCBtZW1vcnkgbGVha3Mg
aW4gZXhwYXQgcGFyc2VyIGFuZCBwdWxsZG9tLgo0MCw0MWM1MQo8IEdhcnNob2wpLCB4bWxsaWIu
cHkgKFNqb2VyZCBNdWxsZW5kZXIpIHVzaW5nIHRoZSBzZ21sb3AuYyBhY2NlbGVyYXRvcgo8IG1v
ZHVsZSAoRnJlZHJpayBMdW5kaCkuCi0tLQo+IEdhcnNob2wpLCBzZ21sb3AgKEZyZWRyaWsgTHVu
ZGgpLgo0NCw0NmM1NCw1NQo8IAkqIERPTSBpbnRlcmZhY2UgKFN0ZWZhbmUgRmVybWlnaWVyLCBB
Lk0uIEt1Y2hsaW5nKQo8IAkqIDRET00gaW50ZXJmYWNlIGZyb20gRm91cnRob3VnaHQgKFVjaGUg
T2didWppLCBNaWtlIE9sc29uKQo8IAkqIHhtbGFyY2gucHksIGZvciBhcmNoaXRlY3R1cmFsIGZv
cm1zIHByb2Nlc3NpbmcgKEdlaXIgT3ZlIEdy+G5tbykKLS0tCj4gCSogbWluaWRvbSBET00gaW1w
bGVtZW50YXRpb24gKFBhdWwgUHJlc2NvZCkKPiAJKiA0RE9NIGZyb20gRm91cnRob3VnaHQgKFVj
aGUgT2didWppLCBNaWtlIE9sc29uKQpkaWZmIFB5WE1MLTAuNi4yL0NSRURJVFMgUHlYTUwtMC42
LjMvQ1JFRElUUwo3YzcKPCAgICA8aGFja2VyPiBlbGVtZW50IGFyZTogPG5hbWU+LCA8ZW1haWw+
LCA8aG9tZS1wYWdlPiwgPHB1YmxpYy1rZXk+LAotLS0KPiAgICA8eG1sLWhhY2tlcj4gZWxlbWVu
dCBhcmU6IDxuYW1lPiwgPGVtYWlsPiwgPGhvbWUtcGFnZT4sIDxwdWJsaWMta2V5PiwKMjNjMjMs
MjUKPCAgICAgPG5hbWU+IEZyZWQgTC4gRHJha2UgPC9uYW1lPgotLS0KPiAgICAgPG5hbWU+IEZy
ZWQgTC4gRHJha2UsIEpyLiA8L25hbWU+Cj4gICAgIDxlbWFpbD4gZmRyYWtlQGFjbS5vcmcgPC9l
bWFpbD4KPiAgICAgPGhvbWUtcGFnZT4gaHR0cDovL3B5dGhvbi5zdGFyc2hpcC5uZXQvY3Jldy9m
ZHJha2UvIDwvaG9tZS1wYWdlPgo4OWE5Mgo+ICAgICA8dGFzaz4gbWluaWRvbSA8L3Rhc2s+CjEx
NWMxMTgsMTI0CjwgICAgIDx0YXNrPiBBZGQgbm9ybWFsaXplKCkgdG8gbWluaWRvbSA8L3Rhc2s+
Ci0tLQo+ICAgICA8dGFzaz4gQWRkIHZhcmlvdXMgbWluaWRvbSBmZWF0dXJlcyA8L3Rhc2s+Cj4g
ICA8L3htbC1oYWNrZXI+Cj4gCj4gICA8eG1sLWhhY2tlcj4KPiAgICAgPG5hbWU+IEV2Z2VueSBD
aGVya2FzaGluIDwvbmFtZT4KPiAgICAgPGVtYWlsPiBldWdlbmVhaUBpY2MucnUgPC9lbWFpbD4K
PiAgICAgPHRhc2s+IEV4cG9zZSBQeXRob24gY29kZWNzIHRvIHB5ZXhwYXQgPC90YXNrPgpkaWZm
IFB5WE1MLTAuNi4yL0xJQ0VOQ0UgUHlYTUwtMC42LjMvTElDRU5DRQo1YzUKPCBET006Ci0tLQo+
IDRET006CjcsMTFjNwo8IFB5RXhwYXQ6CjwgCjwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPCBDb3B5cmlnaHQgMTk5
MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAo8IFRo
ZSBOZXRoZXJsYW5kcy4KLS0tCj4gQ29weXJpZ2h0IChjKSAyMDAwIEZvdXJ0aG91Z2h0IEluYywg
VVNBCjE5LDIxYzE1LDE2Mgo8IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhl
IG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKPCBDZW50cnVtIG9yIENXSSBvciBDb3Jw
b3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKPCBDTlJJIG5vdCBi
ZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi0tLQo+IHN1
cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgRm91clRob3VnaHQg
TExDIG5vdCBiZQo+IHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcg
dG8gZGlzdHJpYnV0aW9uIG9mIHRoZQo+IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0
ZW4gcHJpb3IgcGVybWlzc2lvbi4KPiAKPiBGT1VSVEhPVUdIVCBMTEMgRElTQ0xBSU0gQUxMIFdB
UlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiBJTkNMVURJTkcgQUxMIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsCj4gSU4gTk8g
RVZFTlQgU0hBTEwgRk9VUlRIT1VHSFQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJF
Q1QgT1IKPiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBS
RVNVTFRJTkcgRlJPTSBMT1NTIE9GCj4gVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4g
QU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCj4gT1IgT1RIRVIgVE9SVElPVVMgQUNU
SU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCj4gVVNFIE9SIFBF
UkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCj4gCj4gCj4gUHlFeHBhdCwgU0FYIGxpYnJhcmll
czoKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQo+IEJFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JF
RU1FTlQgVkVSU0lPTiAxCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KPiAKPiAxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4g
QmVPcGVuLmNvbSAoIkJlT3BlbiIpLCBoYXZpbmcgYW4KPiBvZmZpY2UgYXQgMTYwIFNhcmF0b2dh
IEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlCj4gSW5kaXZpZHVhbCBvciBP
cmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nCj4g
dGhpcyBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVk
Cj4gZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLgo+IAo+IDIuIFN1YmplY3QgdG8gdGhl
IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQmVPcGVuIFB5dGhvbiBMaWNlbnNlCj4gQWdy
ZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsCj4g
cm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0
ZXN0LCBwZXJmb3JtCj4gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2
ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kCj4gb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxv
bmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKPiBwcm92aWRlZCwgaG93ZXZlciwgdGhh
dCB0aGUgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIGlzIHJldGFpbmVkIGluIHRoZQo+IFNvZnR3YXJl
LCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2Vl
Lgo+IAo+IDMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNl
bnNlZSBvbiBhbiAiQVMgSVMiCj4gYmFzaXMuICBCRU9QRU4gTUFLRVMgTk8gUkVQUkVTRU5UQVRJ
T05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKPiBJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1Q
TEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAo+IERJU0NMQUlNUyBB
TlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5F
U1MKPiBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNP
RlRXQVJFIFdJTEwgTk9UCj4gSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KPiAKPiA0
LiBCRU9QRU4gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNF
UlMgT0YgVEhFCj4gU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUwo+IEFTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJ
TkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZCj4gREVSSVZBVElWRSBUSEVS
RU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCj4gCj4gNS4g
VGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24g
YSBtYXRlcmlhbAo+IGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCj4gCj4gNi4g
VGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0
ZWQgaW4gYWxsCj4gcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5p
YSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mCj4gbGF3IHByb3Zpc2lvbnMuICBOb3RoaW5nIGluIHRo
aXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvCj4gY3JlYXRlIGFueSByZWxh
dGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQo+IGJldHdl
ZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3Qg
Z3JhbnQKPiBwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1l
cyBpbiBhIHRyYWRlbWFyawo+IHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBv
ciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cj4gdGhpcmQgcGFydHkuICBBcyBhbiBleGNl
cHRpb24sIHRoZSAiQmVPcGVuIFB5dGhvbiIgbG9nb3MgYXZhaWxhYmxlIGF0Cj4gaHR0cDovL3d3
dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUK
PiBwZXJtaXNzaW9ucyBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuCj4gCj4gNy4gQnkgY29weWlu
ZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQo+
IGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBM
aWNlbnNlCj4gQWdyZWVtZW50Lgo+IAo+IAo+IENOUkkgT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JF
RU1FTlQKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gCj4gUHl0aG9uIDEu
NiBDTlJJIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UCj4gCj4gSU1QT1JUQU5UOiBQTEVB
U0UgUkVBRCBUSEUgRk9MTE9XSU5HIEFHUkVFTUVOVCBDQVJFRlVMTFkuIEJZIENMSUNLSU5HCj4g
T04gIkFDQ0VQVCIgV0hFUkUgSU5ESUNBVEVEIEJFTE9XLCBPUiBCWSBDT1BZSU5HLCBJTlNUQUxM
SU5HIE9SCj4gT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYgU09GVFdBUkUsIFlPVSBBUkUgREVF
TUVEIFRPIEhBVkUgQUdSRUVEIFRPCj4gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMg
TElDRU5TRSBBR1JFRU1FTlQuCj4gCj4gMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3
ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKPiBSZXNlYXJjaCBJbml0aWF0aXZlcywg
aGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsCj4gUmVzdG9uLCBW
QSAyMDE5MSAoIkNOUkkiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgo+ICgi
TGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42IHNvZnR3
YXJlIGluCj4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVu
dGF0aW9uLCBhcyByZWxlYXNlZCBhdAo+IHRoZSB3d3cucHl0aG9uLm9yZyBJbnRlcm5ldCBzaXRl
IG9uIFNlcHRlbWJlciA1LCAyMDAwICgiUHl0aG9uIDEuNiIpLgo+IAo+IDIuIFN1YmplY3QgdG8g
dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIENOUkkK
PiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdv
cmxkLXdpZGUKPiBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBh
bmQvb3IgZGlzcGxheSBwdWJsaWNseSwKPiBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3Ry
aWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiAxLjYKPiBhbG9uZSBvciBpbiBhbnkgZGVy
aXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJJ3MKPiBMaWNlbnNl
IEFncmVlbWVudCBhbmQgQ05SSSdzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmln
aHQgKGMpCj4gMTk5NS0yMDAwIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0
aWF0aXZlczsgQWxsIFJpZ2h0cwo+IFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEu
NiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZQo+IHZlcnNpb24gcHJlcGFyZWQgYnkKPiAKPiBM
aWNlbnNlZS4gQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50
LCBMaWNlbnNlZQo+IG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcg
dGhlIHF1b3Rlcyk6ICJQeXRob24gMS42Cj4gaXMgbWFkZSBhdmFpbGFibGUgc3ViamVjdCB0byB0
aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaW4gQ05SSSdzCj4gTGljZW5zZSBBZ3JlZW1lbnQuIFRo
aXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGggUHl0aG9uIDEuNiBtYXkgYmUKPiBsb2NhdGVkIG9u
IHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudAo+IGlk
ZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEyLiBUaGlzIEFncmVlbWVu
dCBtYXkgYWxzbwo+IGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlIEludGVy
bmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcKPiBVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1
LjIyLzEwMTIiLgo+IAo+IDMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2
YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCj4gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjYg
b3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlCj4gZGVyaXZhdGl2ZSB3
b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2Vl
Cj4gaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1t
YXJ5IG9mIHRoZQo+IGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42Lgo+IAo+IDQuIENOUkkgaXMg
bWFraW5nIFB5dGhvbiAxLjYgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKPiBi
YXNpcy4gQ05SSSBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVT
UyBPUgo+IElNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENO
UkkgTUFLRVMgTk8gQU5ECj4gRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5U
WSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUwo+IEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQ
T1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMS42IFdJTEwgTk9UCj4gSU5GUklOR0UgQU5Z
IFRISVJEIFBBUlRZIFJJR0hUUy4KPiAKPiA1LiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8g
TElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgo+IDEuNiBGT1IgQU5ZIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEKPiBS
RVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRI
T04gMS42LCBPUgo+IEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KPiAKPiA2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdp
bGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCj4gYnJlYWNoIG9mIGl0
cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KPiAKPiA3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNo
YWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKPiByZXNwZWN0cyBieSB0
aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBWaXJnaW5pYSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mCj4g
bGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBi
ZSBkZWVtZWQgdG8KPiBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJz
aGlwLCBvciBqb2ludCB2ZW50dXJlCj4gYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gVGhpcyBM
aWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAo+IHBlcm1pc3Npb24gdG8gdXNlIENOUkkg
dHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlCj4gdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhp
cmQKPiBwYXJ0eS4KPiAKPiA4LiBCeSBjbGlja2luZyBvbiB0aGUgIkFDQ0VQVCIgYnV0dG9uIHdo
ZXJlIGluZGljYXRlZCwgb3IgYnkgY29weWluZywKPiBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1
c2luZyBQeXRob24gMS42LCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQKPiBieSB0aGUgdGVy
bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KPiAKPiBBQ0NFUFQK
PiAKPiAKPiBDV0kgUEVSTUlTU0lPTlMgU1RBVEVNRU5UIEFORCBESVNDTEFJTUVSCj4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IAo+IENvcHlyaWdodCAoYykgMTk5
MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sCj4gVGhl
IE5ldGhlcmxhbmRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiAKPiBQZXJtaXNzaW9uIHRvIHVz
ZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKPiBk
b2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdy
YW50ZWQsCj4gcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIg
aW4gYWxsIGNvcGllcyBhbmQgdGhhdAo+IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0
aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgo+IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlv
biwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAo+IENlbnRydW0g
b3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5n
IHRvCjI1LDM2YzE2NiwxNzIKPCBXaGlsZSBDV0kgaXMgdGhlIGluaXRpYWwgc291cmNlIGZvciB0
aGlzIHNvZnR3YXJlLCBhIG1vZGlmaWVkIHZlcnNpb24KPCBpcyBtYWRlIGF2YWlsYWJsZSBieSB0
aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCjwgKENOUkkp
IGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgo8IAo8IFNUSUNI
VElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElF
UyBXSVRICjwgUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBX
QVJSQU5USUVTIE9GCjwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBT
SEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NICjwgQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBG
T1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKPCBEQU1BR0VTIE9SIEFO
WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IK
PCBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBP
UiBPVEhFUgo8IFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBVU0UgT1IKPCBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotLS0KPiBT
VElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJ
VEggUkVHQVJEIFRPCj4gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAo+IEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxM
IFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKPiBGT1IgQU5ZIFNQRUNJ
QUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwo+IFdI
QVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hF
VEhFUiBJTiBBTgo+IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU
SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCj4gT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBV
U0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KNDUsNDdjMTgxCjwgc2F4bGliOgo8
IAo8IHNnbWxvcC5jCi0tLQo+IHNnbWxvcC5jOgo1Niw2MmQxODkKPCB4bWxhcmNoOgo8IC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCjwgQ29weXJpZ2h0IChDKSAxOTk4IGJ5IEdlaXIgTy4gR3L4bm1vLCBncm92ZUBpbmZv
dGVrLm5vCjwgCjwgRnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlLgo8
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCjwgCjY3YTE5NSwxOTcKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IAo+IHNldHVwZXh0L2lu
c3RhbGxfZGF0YS5weToKNjhhMTk5LDIxNgo+IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwo+IGEgY29weSBvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ICJTb2Z0
d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcKPiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm
eSwgbWVyZ2UsIHB1Ymxpc2gsCj4gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCj4gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0
aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCj4gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgo+ICAKPiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAo+IGluIGFsbCBjb3BpZXMgb3Ig
c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICAKPiBUSEUgU09GVFdBUkUg
SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKPiBFWFBS
RVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ
RVMgT0YKPiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFORCBOT05JTkZSSU5HRU1FTlQuCj4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1Ig
Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKPiBDTEFJTSwgREFNQUdFUyBPUiBP
VEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAo+IFRPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFCj4gU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdB
UkUuCmRpZmYgUHlYTUwtMC42LjIvTUFOSUZFU1QgUHlYTUwtMC42LjMvTUFOSUZFU1QKMTBhMTEK
PiBzZXR1cC5jZmcKNjJjNjMKPCBkZW1vL3hiZWwveGJlbC5kdGQKLS0tCj4gZGVtby94YmVsL3hi
ZWwtMS4wLmR0ZAoxMDhkMTA4CjwgZXh0ZW5zaW9ucy9leHBhdC9NUEwtMV8wLmh0bWwKMTEyLDEx
M2QxMTEKPCBleHRlbnNpb25zL2V4cGF0L2V4cGF0Lm1hawo8IGV4dGVuc2lvbnMvZXhwYXQvZ3Bs
ZWxlY3QuaHRtbAoxMTcsMTE4ZDExNAo8IGV4dGVuc2lvbnMvZXhwYXQveG1scGFyc2UvaGFzaHRh
YmxlLmMKPCBleHRlbnNpb25zL2V4cGF0L3htbHBhcnNlL2hhc2h0YWJsZS5oCjEyMWExMTgKPiBl
eHRlbnNpb25zL2V4cGF0L3htbHRvay9hc2NpaS5oCjE0OWExNDcsMTQ5Cj4gc2V0dXBleHQvX19p
bml0X18ucHkKPiBzZXR1cGV4dC9pbnN0YWxsX2RhdGEucHkKPiB0ZXN0L2VuY190ZXN0LnhtbAox
NTVhMTU2Cj4gdGVzdC90ZXN0X2VuY29kaW5ncy5weQoyMDJhMjA0LDI2Mgo+IHRlc3QvZG9tL2h0
bWwvdGVzdC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9hLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0
X2FwcGxldC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9hcmVhLnB5Cj4gdGVzdC9kb20vaHRtbC90
ZXN0X2Jhc2UucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfYmFzZWZvbnQucHkKPiB0ZXN0L2RvbS9o
dG1sL3Rlc3RfYmxvY2txdW90ZS5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9ib2R5LnB5Cj4gdGVz
dC9kb20vaHRtbC90ZXN0X2JyLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2J1dHRvbi5weQo+IHRl
c3QvZG9tL2h0bWwvdGVzdF9jYXB0aW9uLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2NvbC5weQo+
IHRlc3QvZG9tL2h0bWwvdGVzdF9jb2xsZWN0aW9uLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2Rp
ci5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9kaXYucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfZGwu
cHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfZG9jdW1lbnQucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3Rf
ZWxlbWVudC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9maWVsZHNldC5weQo+IHRlc3QvZG9tL2h0
bWwvdGVzdF9mb250LnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2Zvcm0ucHkKPiB0ZXN0L2RvbS9o
dG1sL3Rlc3RfZnJhbWUucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfZnJhbWVzZXQucHkKPiB0ZXN0
L2RvbS9odG1sL3Rlc3RfaC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9oZWFkLnB5Cj4gdGVzdC9k
b20vaHRtbC90ZXN0X2hyLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2h0bWwucHkKPiB0ZXN0L2Rv
bS9odG1sL3Rlc3RfaHRtbF9kb21faW1wbGVtZW50YXRpb24ucHkKPiB0ZXN0L2RvbS9odG1sL3Rl
c3RfaWZyYW1lLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2ltZy5weQo+IHRlc3QvZG9tL2h0bWwv
dGVzdF9pbnB1dC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9pc2luZGV4LnB5Cj4gdGVzdC9kb20v
aHRtbC90ZXN0X2xhYmVsLnB5Cj4gdGVzdC9kb20vaHRtbC90ZXN0X2xlZ2VuZC5weQo+IHRlc3Qv
ZG9tL2h0bWwvdGVzdF9saS5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9saW5rLnB5Cj4gdGVzdC9k
b20vaHRtbC90ZXN0X21hcC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9tZW51LnB5Cj4gdGVzdC9k
b20vaHRtbC90ZXN0X21ldGEucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfbW9kLnB5Cj4gdGVzdC9k
b20vaHRtbC90ZXN0X29iamVjdC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9vbC5weQo+IHRlc3Qv
ZG9tL2h0bWwvdGVzdF9vcHRncm91cC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9vcHRpb24ucHkK
PiB0ZXN0L2RvbS9odG1sL3Rlc3RfcC5weQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9wYXJhbS5weQo+
IHRlc3QvZG9tL2h0bWwvdGVzdF9wcmUucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfcS5weQo+IHRl
c3QvZG9tL2h0bWwvdGVzdF9zY3JpcHQucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3Rfc2VjdGlvbi5w
eQo+IHRlc3QvZG9tL2h0bWwvdGVzdF9zZWxlY3QucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3Rfc3R5
bGUucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfdGFibGUucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3Rf
dGQucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfdGV4dGFyZWEucHkKPiB0ZXN0L2RvbS9odG1sL3Rl
c3RfdGl0bGUucHkKPiB0ZXN0L2RvbS9odG1sL3Rlc3RfdHIucHkKPiB0ZXN0L2RvbS9odG1sL3Rl
c3RfdWwucHkKPiB0ZXN0L2RvbS9odG1sL3V0aWwucHkKMjA0YTI2NQo+IHRlc3Qvb3V0cHV0L3Rl
c3RfZW5jb2RpbmdzCjIzM2EyOTUKPiB4bWwvZG9tL0Z0Tm9kZS5weQoyMzVkMjk2CjwgeG1sL2Rv
bS9Ob2RlLnB5CjQyNmE0ODgsNDkwCj4geG1sL3VuaWNvZGUvX19pbml0X18ucHkKPiB4bWwvdW5p
Y29kZS9pc284ODU5LnB5Cj4geG1sL3VuaWNvZGUvdXRmOF9pc28ucHkKZGlmZiBQeVhNTC0wLjYu
Mi9NQU5JRkVTVC5pbiBQeVhNTC0wLjYuMy9NQU5JRkVTVC5pbgo2MmE2Myw2NAo+IAo+IGluY2x1
ZGUgc2V0dXBleHQvKi5weQpkaWZmIFB5WE1MLTAuNi4yL1JFQURNRSBQeVhNTC0wLjYuMy9SRUFE
TUUKMzVhMzYKPiAJbWluaWRvbQkJCVBhdWwgUHJlc2NvZApkaWZmIFB5WE1MLTAuNi4yL1JFQURN
RS5weWV4cGF0IFB5WE1MLTAuNi4zL1JFQURNRS5weWV4cGF0CjEsMmMxLDIKPCBQeXRob24gRXhw
YXQgd3JhcHBlciBtb2R1bGUsIHZlcnNpb24gb2YgMTktTWF5LTk4CjwgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0KPiBQeXRob24gRXhwYXQgd3Jh
cHBlciBtb2R1bGUKPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KNCwxMGM0CjwgSWYgeW91
IGhhdmUgZG93bmxvYWRlZCB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiBmb3IgdGhlIG1hY2ludG9z
aCB5b3UKPCBjYW4gc2tpcCB0aGUgImJ1aWxkaW5nIiBzZWN0aW9ucyBhbmQgZ28gc3RyYWlnaHQg
dG8gdGhlICJ1c2luZyIKPCBiaXQuIElmIHlvdSBhcmUgdXNpbmcgYSBtYWNpbnRvc2ggYW5kIGRv
IHdhbnQgdG8gYnVpbGQgZnJvbSBzb3VyY2UgeW91IAo8IHNob3VsZCBnZXQgdGhlIHB5ZXhwYXQu
dGd6IGRpc3RyaWJ1dGlvbiAoU3R1ZmZpdCBFeHBhbmRlciB3aXRoCjwgRXhwYW5kZXIgRW5oYW5j
ZXIgd2lsbCBrbm93IGhvdyB0byB1bnBhY2sgYSBnemlwcGVkIHRhciBmaWxlKS4KPCAJCjwgQnVp
bGRpbmcgdGhlIHB5ZXhwYXQgbW9kdWxlIHVuZGVyIHVuaXgKLS0tCj4gQnVpbGRpbmcgdGhlIHB5
ZXhwYXQgbW9kdWxlCjEzLDMwYzcKPCAtIEJ1aWxkIGxpYmV4cGF0LmEgaW4gZXhwYXQuIFRoaXMg
dmVyc2lvbiBpcyB2ZXJ5IHNsaWdodGx5IGRpZmZlcmVudCAKPCAgIGZyb20gdGhlIG9yaWdpbmFs
IGJ5IEphbWVzIENsYXJrICh0aGUgbGliZXhwYXQuYSB0YXJnZXQgd2FzIGFkZGVkLAo8ICAgYW5k
IGEgZmV3IEMrKyBjb21tZW50cyB3ZXJlIHJlcGxhY2VkIGJ5IEMgY29tbWVudHMpLgo8IC0gRWRp
dCBNYWtlZmlsZS5wcmUuaW4gYW5kIHNldCB5b3VyIGluc3RhbGxkaXIKPCAtIG1ha2UgLWYgTWFr
ZWZpbGUucHJlLmluIFZFUlNJT049MS41LjEgTWFrZWZpbGUKPCAtIG1ha2Ugc2hhcmVkbW9kcwo8
IC0gcHV0IHRoZSBzaGFyZWQgbW9kdWxlIHNvbWV3aGVyZSBpbiB5b3VyIHN5cy5wYXRoCjwgCjwg
KGlmIHlvdSB3YW50IGEgc3RhdGljIFB5dGhvbiBlZGl0IFNldHVwLmluLCBhbmQgcmVwbGFjZSB0
aGUgbGFzdCBsaW5lCjwgd2l0aCAibWFrZSIpLgo8IAo8IEJ1aWxkaW5nIHRoZSBweWV4cGF0IG1v
ZHVsZSBvbiB0aGUgbWFjaW50b3NoCjwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KPCAtIFVucGFjayB0aGUgdmFyaW91cyAuaHF4IHByb2plY3QgZmlsZXMuCjwg
LSBBbGwgdGhlIHByb2plY3RzIGFyZSBsaW5rZWQsIHNvIGJ1aWxkaW5nIHB5ZXhwYXQucHJqIHNo
b3VsZCBidWlsZAo8ICAgZXZlcnl0aGluZy4gSWYgdGhpcyBkb2Vzbid0IHdvcmsgeW91IHdpbGwg
ZmluZCB0aGUgbGlicmFyeQo8ICAgc3VicHJvamVjdHMgdG8gYnVpbGQgaW4gdGhlIGV4cGF0IGZv
bGRlci4KPCAtIFVzZSBFZGl0UHl0aG9uUHJlZnMgdG8gYWRkIHRoZSBjdXJyZW50IGZvbGRlciB0
byBzeXMucGF0aC4KLS0tCj4gVGhlIG1vZHVsZSBpcyBidWlsdCBhcyBwYXJ0IG9mIHJ1bm5pbmcg
c2V0dXAucHkKNDMsNDVjMjAsMjEKPCAJdGhpcyBpcyB0aGUgbGFzdCBiaXQgb2YgZGF0YS4gUmV0
dXJucyB0cnVlIGlmIHBhcnNpbmcKPCAJc3VjY2VlZGVkIChzbyBmYXIpLCBvdGhlcndpc2UgdGhl
IGVycm9yIGF0dHJpYnV0ZXMgaGF2ZQo8IAlpbmZvcm1hdGlvbiBvbiB0aGUgZXJyb3IuCi0tLQo+
IAl0aGlzIGlzIHRoZSBsYXN0IGJpdCBvZiBkYXRhLiBSYWlzZXMgYW4gZXhjZXB0aW9uIGluIGNh
c2Ugb2YKPiAJYW4gZXJyb3IsIHRoZSBlcnJvciBhdHRyaWJ1dGVzIGhhdmUgaW5mb3JtYXRpb24g
b24gdGhlIGVycm9yLgo2Nyw2OWM0Mwo8IFRoaXMgbW9kdWxlIGN1cnJlbnRseSBsaXZlcyBhdAo8
IGZ0cDovL2Z0cC5jd2kubmwvcHViL2phY2svcHl0aG9uL3B5ZXhwYXRzcmMudGd6IChzb3VyY2Up
IGFuZAo8IGZ0cDovL2Z0cC5jd2kubmwvcHViL2phY2svcHl0aG9uL3B5ZXhwYXQuaHF4IChtYWNp
bnRvc2ggYmluYXJ5LW9ubHkpLgotLS0KPiBQbGVhc2UgcmVwb3J0IHByb2JsZW1zIHRvIHhtbC1z
aWdAcHl0aG9uLm9yZy4KZGlmZiBQeVhNTC0wLjYuMi9UT0RPIFB5WE1MLTAuNi4zL1RPRE8KMiw3
ZDEKPCAgICAgICAgICogSW50ZWdyYXRlIHdpZGVzdHJpbmcgc3VwcG9ydCB3aXRoIHRoZSBQeUV4
cGF0IG1vZHVsZSAobWFqb3IgdGhpbmcpCjwgCSogU3dpdGNoIHRvIDRET00ncyBET00gaW1wbGVt
ZW50YXRpb24gCjwgCSogQWRkIFNBWDIgc3VwcG9ydAo8IAkqIERyb3Agd3N0cm9wICYgVW5pY29k
ZTsgUHl0aG9uIDEuNiB3aWxsIGhhbmRsZSB0aGlzCjwgCSogU3BlZWQgdXAgdGhlIGJ1aWxkZXIg
Y2xhc3Mgc29tZWhvdywgYW5kIGRvIHNvbWUgcGVyZm9ybWFuY2UgdGVzdHMKPCAJKiBDaGFuZ2Ug
SFRNTEJ1aWxkZXIgdG8gdXNlIFNBWCBpbnN0ZWFkIG9mIFNHTUxsaWIKMTBkMwo8IAkqIEFkZCBS
RUFETUVzIHRvIGV4aXN0aW5nIGRlbW8gcHJvZ3JhbXMKMTNkNQo8IAkqIHNheGxpYi5BdHRyaWJ1
dGVMaXN0IHNob3VsZCByZWFsbHkgc3VwcG9ydCBhbGwgZGljdGlvbmFyeSBiZWhhdmlvdXIKMTUs
MTZkNgo8IAkqIFVwZGF0ZSB0aGUgV2luZG93cyBETExzIGFuZCBpbnRlZ3JhdGUgQ2hyaXN0aWFu
IFRpc21lcidzIFdJU0UgCjwgCSAgaW5zdGFsbGVyCjIzLDI5ZDEyCjwgCSogQ29udmVydCBhbGwg
dGhlIHJhaXNlIHN0YXRlbWVudCB0byB1c2UgdGhlIGV4Y2VwdGlvbihhcmcpIGZvcm0KPCAKPCAJ
KiBJbXBsZW1lbnQgcmVhZGluZyBvZiBTR01MIGRvY3VtZW50cyBmb3IgRmlsZVJlYWRlcgo8IAo8
IAkqIERvY3VtZW50VHlwZSBjbGFzcyBpcyBtb3N0bHkgdW5maW5pc2hlZDsgd2hhdCBzaG91bGQg
dGhlCjwgaW50ZXJmYWNlIGZvciBjcmVhdGluZyB0aGVtIGxvb2sgbGlrZT8KPCAKMzIsNDFkMTQK
PCAKPCAJKiBXYWxrZXI6IG1lcmdlIHdhbGsoKSBhbmQgd2FsazEoKSBpbnRvIG9uZSBmdW5jdGlv
biAob3IgYXQKPCBsZWFzdCBtYWtlIGl0IG1vcmUgZ2VuZXJpYykKPCAKPCAJKiBYbWxMaW5lYXJp
c2VyOiB3aGF0IHNob3VsZCBpdCBkbyB3aXRoIFBJcyBhbmQgb3RoZXIgc2ltaWxhciB0aGluZ3M/
CjwgCjwgCSogTm9kZUxpc3QgcmV0dXJuZWQgZnJvbSAuZ2V0RWxlbWVudHNCeVRhZ05hbWUgc2hv
dWxkIGJlIGxpdmUuCjwgKEhhcmQsIGFuZCBkb2Vzbid0IHNlZW0gdG8gYmUgdmVyeSB1c2VmdWw7
IEFNSyBkb2Vzbid0IHJlYWxseSBjYXJlLikKPCAKPCAJKiBET00gTGV2ZWwgMiBjaGFuZ2VzCkNv
bW1vbiBzdWJkaXJlY3RvcmllczogUHlYTUwtMC42LjIvV2lzZSBhbmQgUHlYTUwtMC42LjMvV2lz
ZQpDb21tb24gc3ViZGlyZWN0b3JpZXM6IFB5WE1MLTAuNi4yL2J1aWxkIGFuZCBQeVhNTC0wLjYu
My9idWlsZApDb21tb24gc3ViZGlyZWN0b3JpZXM6IFB5WE1MLTAuNi4yL2RlbW8gYW5kIFB5WE1M
LTAuNi4zL2RlbW8KQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBQeVhNTC0wLjYuMi9kb2MgYW5kIFB5
WE1MLTAuNi4zL2RvYwpDb21tb24gc3ViZGlyZWN0b3JpZXM6IFB5WE1MLTAuNi4yL2V4dGVuc2lv
bnMgYW5kIFB5WE1MLTAuNi4zL2V4dGVuc2lvbnMKQ29tbW9uIHN1YmRpcmVjdG9yaWVzOiBQeVhN
TC0wLjYuMi9tYWMgYW5kIFB5WE1MLTAuNi4zL21hYwpPbmx5IGluIFB5WE1MLTAuNi4zOiBzZXR1
cC5jZmcKZGlmZiBQeVhNTC0wLjYuMi9zZXR1cC5weSBQeVhNTC0wLjYuMy9zZXR1cC5weQo2YzYK
PCBpbXBvcnQgc3lzLCBvcwotLS0KPiBpbXBvcnQgc3lzLCBvcywgc3RyaW5nCjhhOQo+IGZyb20g
c2V0dXBleHQgaW1wb3J0IERhdGFfRmlsZXMsIGluc3RhbGxfRGF0YV9GaWxlcwo0NmE0OCw1MQo+
ICAgICBpZiAncHlleHBhdCcgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgo+ICAgICAgICAg
cHJpbnQgIkVycm9yOiBidWlsdGluIGV4cGF0IGxpYnJhcnkgd2lsbCBjb25mbGljdCB3aXRoIG91
cnMiCj4gICAgICAgICBwcmludCAiUmUtYnVpbGQgcHl0aG9uIHdpdGhvdXQgYnVpbHRpbiBleHBh
dCBtb2R1bGUiCj4gICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CjUzYzU4LDYwCjwgICAgICAgICAg
ICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFsoJ1hNTF9OUycsIE5vbmUpXSwKLS0tCj4gICAgICAg
ICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFsoJ1hNTF9OUycsIE5vbmUpLAo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdYTUxfRFREJyxOb25lKSwKPiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgnRVhQQVRfVkVSU0lPTicsJzB4MDEwMjAwJyldLAo2
M2M3MCw3MQo8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRlbnNpb25zL2V4cGF0
L3htbHBhcnNlL2hhc2h0YWJsZS5jJywKLS0tCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBHb25lIGluIDEuMgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMnZXh0ZW5z
aW9ucy9leHBhdC94bWxwYXJzZS9oYXNodGFibGUuYycsCjcxYzc5LDEzMwo8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLS0tCj4gCj4gCj4gIyBPbiBXaW5kb3dzLCBpbnN0YWxs
IHRoZSBkb2N1bWVudGF0aW9uIGludG8gYSBkaXJlY3RvcnkgeG1sZG9jLCBhbG9uZwo+ICMgd2l0
aCB4bWwvX3htbHBsdXMuIEZvciBSUE1zLCBkb2NzIGFyZSBpbnN0YWxsZWQgaW50byB0aGUgUlBN
IGRvYwo+ICMgZGlyZWN0b3J5IHZpYSBzZXR1cC5jZmcgKHVzdWFsbCAvdXNyL2RvYykuIE9uIGFs
bCBvdGhlciBzeXN0ZW1zLCB0aGUKPiAjIGRvY3VtZW50YXRpb24gaXMgbm90IGluc3RhbGxlZC4K
PiAKPiBkb2MyeG1sZG9jID0gMAo+IGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgo+ICAgICBk
b2MyeG1sZG9jID0gMQo+IAo+ICMgVGhpcyBpcyBhIGZyYWdtZW50IGZyb20gTUFOSUZFU1QuaW4g
d2hpY2ggc2hvdWxkIGNvbnRhaW4gYWxsCj4gIyBmaWxlcyB3aGljaCBhcmUgY29uc2lkZXJlZCBk
b2N1bWVudGF0aW9uIChkb2MsIGRlbW8sIHRlc3QsIHBsdXMgc29tZQo+ICMgdG9wbGV2ZWwgZmls
ZXMpCj4gZG9jZmlsZXM9IiIiCj4gcmVjdXJzaXZlLWluY2x1ZGUgZG9jICouaHRtbCAKPiByZWN1
cnNpdmUtaW5jbHVkZSBkb2MgKi50ZXggCj4gcmVjdXJzaXZlLWluY2x1ZGUgZG9jICoudHh0IAo+
IHJlY3Vyc2l2ZS1pbmNsdWRlIGRvYyAqLmdpZiAKPiByZWN1cnNpdmUtaW5jbHVkZSBkb2MgKi5j
c3MKPiByZWN1cnNpdmUtaW5jbHVkZSBkb2MgKi5hcGkKPiByZWN1cnNpdmUtaW5jbHVkZSBkb2Mg
Ki53ZWIKPiAKPiByZWN1cnNpdmUtaW5jbHVkZSBkZW1vIFJFQURNRSAKPiByZWN1cnNpdmUtaW5j
bHVkZSBkZW1vICoucHkgCj4gcmVjdXJzaXZlLWluY2x1ZGUgZGVtbyAqLnhtbAo+IHJlY3Vyc2l2
ZS1pbmNsdWRlIGRlbW8gKi5kdGQKPiByZWN1cnNpdmUtaW5jbHVkZSBkZW1vICouaHRtbAo+IHJl
Y3Vyc2l2ZS1pbmNsdWRlIGRlbW8gKi5odG0KPiBpbmNsdWRlIGRlbW8vZ2VueG1sL2RhdGEudHh0
Cj4gaW5jbHVkZSBkZW1vL2RvbS9odG1sMmh0bWwKPiBpbmNsdWRlIGRlbW8veGJlbC9kb2MveGJl
bC5iaWIKPiBpbmNsdWRlIGRlbW8veGJlbC9kb2MveGJlbC50ZXgKPiBpbmNsdWRlIGRlbW8veG1s
cHJvYy9jYXRhbG9nLnNvYwo+IAo+IHJlY3Vyc2l2ZS1pbmNsdWRlIHRlc3QgKi5weSAKPiByZWN1
cnNpdmUtaW5jbHVkZSB0ZXN0ICoueG1sCj4gaW5jbHVkZSB0ZXN0L3Rlc3QueG1sLm91dAo+IHJl
Y3Vyc2l2ZS1pbmNsdWRlIHRlc3Qvb3V0cHV0IHRlc3RfKgo+IAo+IGluY2x1ZGUgQU5OT1VOQ0Ug
Cj4gaW5jbHVkZSBDUkVESVRTIAo+IGluY2x1ZGUgTElDRU5DRSAKPiBpbmNsdWRlIFJFQURNRSog
Cj4gaW5jbHVkZSBUT0RPIAo+ICIiIgo+IAo+IGlmIGRvYzJ4bWxkb2M6Cj4gICAgIHhtbGRvY2Zp
bGVzID0gWwo+ICAgICAgICAgRGF0YV9GaWxlcyhjb3B5X3RvID0gJ3htbGRvYycsCj4gICAgICAg
ICAgICAgICAgICAgIHRlbXBsYXRlID0gc3RyaW5nLnNwbGl0KGRvY2ZpbGVzLCJcbiIpLAo+ICAg
ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9wYXRoID0gMSkKPiAgICAgICAgIF0KPiBlbHNlOgo+
ICAgICB4bWxkb2NmaWxlcyA9IFtdCjc0YzEzNgo8ICAgICAgICB2ZXJzaW9uID0gIjAuNi4yIiwg
IyBOZWVkcyB0byBtYXRjaCB4bWwvX19pbml0X18udmVyc2lvbl9pbmZvCi0tLQo+ICAgICAgICB2
ZXJzaW9uID0gIjAuNi4zIiwgIyBOZWVkcyB0byBtYXRjaCB4bWwvX19pbml0X18udmVyc2lvbl9p
bmZvCjgyYTE0NSwxNDcKPiAKPiAgICAgICAgIyBPdmVycmlkZSBjZXJ0YWluIGNvbW1hbmQgY2xh
c3NlcyB3aXRoIG91ciBvd24gb25lcwo+ICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRh
JzppbnN0YWxsX0RhdGFfRmlsZXN9LCAKODRhMTUwLDE1MQo+IAo+ICAgICAgICBkYXRhX2ZpbGVz
ID0geG1sZG9jZmlsZXMsCjg5YzE1Ngo8ICAgICAgICAgICAgICAgICAgICB4bWwoJy5tYXJzaGFs
JyksCi0tLQo+ICAgICAgICAgICAgICAgICAgICB4bWwoJy5tYXJzaGFsJyksIHhtbCgnLnVuaWNv
ZGUnKSwKT25seSBpbiBQeVhNTC0wLjYuMzogc2V0dXBleHQKQ29tbW9uIHN1YmRpcmVjdG9yaWVz
OiBQeVhNTC0wLjYuMi90ZXN0IGFuZCBQeVhNTC0wLjYuMy90ZXN0Ck9ubHkgaW4gUHlYTUwtMC42
LjI6IHZzX2FjY2VwdExpdmVGaWxlSW5mbz9mZGF0ZT0wMDEyMjYmZm5hbWU9dzAwMTIyNl8wMDAw
JmZ0aW1lPTAwMDAmZnR5cGU9dyZmdmVyc2lvbj0wMyZmc2l6ZT00MjA2OQpDb21tb24gc3ViZGly
ZWN0b3JpZXM6IFB5WE1MLTAuNi4yL3dpbmRvd3MgYW5kIFB5WE1MLTAuNi4zL3dpbmRvd3MKQ29t
bW9uIHN1YmRpcmVjdG9yaWVzOiBQeVhNTC0wLjYuMi94bWwgYW5kIFB5WE1MLTAuNi4zL3htbAo=

--Boundary-=_oQHnWnkUEwHsqmGbbuqCLJJiVswM--