Re: PEP 489: Multi-phase extension module initialization; version 6

Eric Snow <[email protected]> Wed, 20 May 2015 15:47:29 -0600
Newsgroups gmane.comp.python.import
Message-ID <CALFfu7CtRhX4bQUBWKRsjOWkn3hiPbnmd6S_VRqPg4VJw9kK-A@mail.gmail.com>
RllJLCBOaWNrIGFza2VkIGlmIEkgd291bGQgYmUgd2lsbGluZyB0byBiZSBCREZMLURlbGVnYXRl
IGZvciB0aGlzIFBFUAphbmQgR3VpZG8gaGFzIGdpdmVuIHRoZSBva2F5LiAgSSd2ZSBhZGRlZCBt
eXNlbGYgdG8gdGhlIFBFUCdzIGhlYWRlci4KSSdsbCB0cnkgdG8gbWFrZSBhIGRlY2lzaW9uIHNv
b24gKGluIHRpbWUgdG8gbGFuZCB0aGUgcGF0Y2ggYmVmb3JlIHRoZQpmZWF0dXJlIGZyZWV6ZSks
IGJ1dCBJIGFsc28gbXVzdCBiZSBjb25maWRlbnQgYWJvdXQgdGhlIHByb25vdW5jZW1lbnQuCgot
ZXJpYwoKT24gV2VkLCBNYXkgMjAsIDIwMTUgYXQgNTozNCBBTSwgUGV0ciBWaWt0b3JpbiA8ZW5j
dWtvdUBnbWFpbC5jb20+IHdyb3RlOgo+IEhlbGxvLAo+IEJhc2VkIG1haW5seSBvbiBjb21tZW50
cyBieSBFcmljIFNub3csIEkndmUgc2VudCBhbm90aGVyIHVwZGF0ZSB0byBQRVAgNDg5Lgo+Cj4g
U2VlIHRoZSBkaWZmIGF0IGh0dHBzOi8vaGcucHl0aG9uLm9yZy9wZXBzL3Jldi9hYWQ3YTM5YTY5
NWIKPgo+IEhlcmUgaXMgYSBjb3B5IGZvciB5b3VyIGNvbnZlbmllbmNlOgo+Cj4gUEVQOiA0ODkK
PiBUaXRsZTogTXVsdGktcGhhc2UgZXh0ZW5zaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbgo+IFZl
cnNpb246ICRSZXZpc2lvbiQKPiBMYXN0LU1vZGlmaWVkOiAkRGF0ZSQKPiBBdXRob3I6IFBldHIg
VmlrdG9yaW4gPGVuY3Vrb3VAZ21haWwuY29tPiwKPiAgICAgICAgIFN0ZWZhbiBCZWhuZWwgPHN0
ZWZhbl9tbEBiZWhuZWwuZGU+LAo+ICAgICAgICAgTmljayBDb2dobGFuIDxuY29naGxhbkBnbWFp
bC5jb20+Cj4gRGlzY3Vzc2lvbnMtVG86IGltcG9ydC1zaWdAcHl0aG9uLm9yZwo+IFN0YXR1czog
RHJhZnQKPiBUeXBlOiBTdGFuZGFyZHMgVHJhY2sKPiBDb250ZW50LVR5cGU6IHRleHQveC1yc3QK
PiBDcmVhdGVkOiAxMS1BdWctMjAxMwo+IFB5dGhvbi1WZXJzaW9uOiAzLjUKPiBQb3N0LUhpc3Rv
cnk6IDIzLUF1Zy0yMDEzLCAyMC1GZWItMjAxNSwgMTYtQXByLTIwMTUKPiBSZXNvbHV0aW9uOgo+
Cj4KPiBBYnN0cmFjdAo+ID09PT09PT09Cj4KPiBUaGlzIFBFUCBwcm9wb3NlcyBhIHJlZGVzaWdu
IG9mIHRoZSB3YXkgaW4gd2hpY2ggYnVpbHQtaW4gYW5kIGV4dGVuc2lvbiBtb2R1bGVzCj4gaW50
ZXJhY3Qgd2l0aCB0aGUgaW1wb3J0IG1hY2hpbmVyeS4gVGhpcyB3YXMgbGFzdCByZXZpc2VkIGZv
ciBQeXRob24gMy4wIGluIFBFUAo+IDMxMjEsIGJ1dCBkaWQgbm90IHNvbHZlIGFsbCBwcm9ibGVt
cyBhdCB0aGUgdGltZS4gVGhlIGdvYWwgaXMgdG8gc29sdmUKPiBpbXBvcnQtcmVsYXRlZCBwcm9i
bGVtcyBieSBicmluZ2luZyBleHRlbnNpb24gbW9kdWxlcyBjbG9zZXIgdG8gdGhlIHdheSBQeXRo
b24KPiBtb2R1bGVzIGJlaGF2ZTsgc3BlY2lmaWNhbGx5IHRvIGhvb2sgaW50byB0aGUgTW9kdWxl
U3BlYy1iYXNlZCBsb2FkaW5nCj4gbWVjaGFuaXNtIGludHJvZHVjZWQgaW4gUEVQIDQ1MS4KPgo+
IFRoaXMgcHJvcG9zYWwgZHJhd3MgaW5zcGlyYXRpb24gZnJvbSBQeVR5cGVfU3BlYyBvZiBQRVAg
Mzg0IHRvIGFsbG93IGV4dGVuc2lvbgo+IGF1dGhvcnMgdG8gb25seSBkZWZpbmUgZmVhdHVyZXMg
dGhleSBuZWVkLCBhbmQgdG8gYWxsb3cgZnV0dXJlIGFkZGl0aW9ucwo+IHRvIGV4dGVuc2lvbiBt
b2R1bGUgZGVjbGFyYXRpb25zLgo+Cj4gRXh0ZW5zaW9ucyBtb2R1bGVzIGFyZSBjcmVhdGVkIGlu
IGEgdHdvLXN0ZXAgcHJvY2VzcywgZml0dGluZyBiZXR0ZXIgaW50bwo+IHRoZSBNb2R1bGVTcGVj
IGFyY2hpdGVjdHVyZSwgd2l0aCBwYXJhbGxlbHMgdG8gX19uZXdfXyBhbmQgX19pbml0X18gb2Yg
Y2xhc3Nlcy4KPgo+IEV4dGVuc2lvbiBtb2R1bGVzIGNhbiBzYWZlbHkgc3RvcmUgYXJiaXRyYXJ5
IEMtbGV2ZWwgcGVyLW1vZHVsZSBzdGF0ZSBpbgo+IHRoZSBtb2R1bGUgdGhhdCBpcyBjb3ZlcmVk
IGJ5IG5vcm1hbCBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIHN1cHBvcnRzCj4gcmVsb2FkaW5nIGFu
ZCBzdWItaW50ZXJwcmV0ZXJzLgo+IEV4dGVuc2lvbiBhdXRob3JzIGFyZSBlbmNvdXJhZ2VkIHRv
IHRha2UgdGhlc2UgaXNzdWVzIGludG8gYWNjb3VudAo+IHdoZW4gdXNpbmcgdGhlIG5ldyBBUEku
Cj4KPiBUaGUgcHJvcG9zYWwgYWxzbyBhbGxvd3MgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBub24t
QVNDSUkgbmFtZXMuCj4KPiBOb3QgYWxsIHByb2JsZW1zIHRhY2tsZWQgaW4gUEVQIDMxMjEgYXJl
IHNvbHZlZCBpbiB0aGlzIHByb3Bvc2FsLgo+IEluIHBhcnRpY3VsYXIsIHByb2JsZW1zIHdpdGgg
cnVuLXRpbWUgbW9kdWxlIGxvb2t1cCAoUHlTdGF0ZV9GaW5kTW9kdWxlKQo+IGFyZSBsZWZ0IHRv
IGEgZnV0dXJlIFBFUC4KPgo+Cj4gTW90aXZhdGlvbgo+ID09PT09PT09PT0KPgo+IFB5dGhvbiBt
b2R1bGVzIGFuZCBleHRlbnNpb24gbW9kdWxlcyBhcmUgbm90IGJlaW5nIHNldCB1cCBpbiB0aGUg
c2FtZSB3YXkuCj4gRm9yIFB5dGhvbiBtb2R1bGVzLCB0aGUgbW9kdWxlIG9iamVjdCBpcyBjcmVh
dGVkIGFuZCBzZXQgdXAgZmlyc3QsIHRoZW4gdGhlCj4gbW9kdWxlIGNvZGUgaXMgYmVpbmcgZXhl
Y3V0ZWQgKFBFUCAzMDIpLgo+IEEgTW9kdWxlU3BlYyBvYmplY3QgKFBFUCA0NTEpIGlzIHVzZWQg
dG8gaG9sZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLAo+IGFuZCBwYXNzZWQgdG8gdGhl
IHJlbGV2YW50IGhvb2tzLgo+Cj4gRm9yIGV4dGVuc2lvbnMgKGkuZS4gc2hhcmVkIGxpYnJhcmll
cykgYW5kIGJ1aWx0LWluIG1vZHVsZXMsIHRoZSBtb2R1bGUKPiBpbml0IGZ1bmN0aW9uIGlzIGV4
ZWN1dGVkIHN0cmFpZ2h0IGF3YXkgYW5kIGRvZXMgYm90aCB0aGUgY3JlYXRpb24gYW5kCj4gaW5p
dGlhbGl6YXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBub3QgcGFzc2VkIHRo
ZSBNb2R1bGVTcGVjLAo+IG9yIGFueSBpbmZvcm1hdGlvbiBpdCBjb250YWlucywgc3VjaCBhcyB0
aGUgX19maWxlX18gb3IgZnVsbHktcXVhbGlmaWVkCj4gbmFtZS4gVGhpcyBoaW5kZXJzIHJlbGF0
aXZlIGltcG9ydHMgYW5kIHJlc291cmNlIGxvYWRpbmcuCj4KPiBJbiBQeTMsIG1vZHVsZXMgYXJl
IGFsc28gbm90IGJlaW5nIGFkZGVkIHRvIHN5cy5tb2R1bGVzLCB3aGljaCBtZWFucyB0aGF0IGEK
PiAocG90ZW50aWFsbHkgdHJhbnNpdGl2ZSkgcmUtaW1wb3J0IG9mIHRoZSBtb2R1bGUgd2lsbCBy
ZWFsbHkgdHJ5IHRvIHJlLWltcG9ydAo+IGl0IGFuZCB0aHVzIHJ1biBpbnRvIGFuIGluZmluaXRl
IGxvb3Agd2hlbiBpdCBleGVjdXRlcyB0aGUgbW9kdWxlIGluaXQgZnVuY3Rpb24KPiBhZ2Fpbi4g
V2l0aG91dCBhY2Nlc3MgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBtb2R1bGUgbmFtZSwgaXQgaXMg
bm90IHRyaXZpYWwgdG8KPiBjb3JyZWN0bHkgYWRkIHRoZSBtb2R1bGUgdG8gc3lzLm1vZHVsZXMg
ZWl0aGVyLgo+IFRoaXMgaXMgc3BlY2lmaWNhbGx5IGEgcHJvYmxlbSBmb3IgQ3l0aG9uIGdlbmVy
YXRlZCBtb2R1bGVzLCBmb3Igd2hpY2ggaXQncwo+IG5vdCB1bmNvbW1vbiB0aGF0IHRoZSBtb2R1
bGUgaW5pdCBjb2RlIGhhcyB0aGUgc2FtZSBsZXZlbCBvZiBjb21wbGV4aXR5IGFzCj4gdGhhdCBv
ZiBhbnkgJ3JlZ3VsYXInIFB5dGhvbiBtb2R1bGUuIEFsc28sIHRoZSBsYWNrIG9mIF9fZmlsZV9f
IGFuZCBfX25hbWVfXwo+IGluZm9ybWF0aW9uIGhpbmRlcnMgdGhlIGNvbXBpbGF0aW9uIG9mICJf
X2luaXRfXy5weSIgbW9kdWxlcywgaS5lLiBwYWNrYWdlcywKPiBlc3BlY2lhbGx5IHdoZW4gcmVs
YXRpdmUgaW1wb3J0cyBhcmUgYmVpbmcgdXNlZCBhdCBtb2R1bGUgaW5pdCB0aW1lLgo+Cj4gRnVy
dGhlcm1vcmUsIHRoZSBtYWpvcml0eSBvZiBjdXJyZW50bHkgZXhpc3RpbmcgZXh0ZW5zaW9uIG1v
ZHVsZXMgaGFzCj4gcHJvYmxlbXMgd2l0aCBzdWItaW50ZXJwcmV0ZXIgc3VwcG9ydCBhbmQvb3Ig
aW50ZXJwcmV0ZXIgcmVsb2FkaW5nLCBhbmQsIHdoaWxlCj4gaXQgaXMgcG9zc2libGUgd2l0aCB0
aGUgY3VycmVudCBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHRoZXNlCj4gZmVhdHVyZXMsIGl0
IGlzIG5laXRoZXIgZWFzeSBub3IgZWZmaWNpZW50Lgo+IEFkZHJlc3NpbmcgdGhlc2UgaXNzdWVz
IHdhcyB0aGUgZ29hbCBvZiBQRVAgMzEyMSwgYnV0IG1hbnkgZXh0ZW5zaW9ucywKPiBpbmNsdWRp
bmcgc29tZSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwgdG9vayB0aGUgbGVhc3QtZWZmb3J0IGFw
cHJvYWNoCj4gdG8gcG9ydGluZyB0byBQeXRob24gMywgbGVhdmluZyB0aGVzZSBpc3N1ZXMgdW5y
ZXNvbHZlZC4KPiBUaGlzIFBFUCBrZWVwcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hpY2gg
c2hvdWxkIHJlZHVjZSBwcmVzc3VyZSBhbmQgZ2l2ZQo+IGV4dGVuc2lvbiBhdXRob3JzIGFkZXF1
YXRlIHRpbWUgdG8gY29uc2lkZXIgdGhlc2UgaXNzdWVzIHdoZW4gcG9ydGluZy4KPgo+Cj4gVGhl
IGN1cnJlbnQgcHJvY2Vzcwo+ID09PT09PT09PT09PT09PT09PT0KPgo+IEN1cnJlbnRseSwgZXh0
ZW5zaW9uIGFuZCBidWlsdC1pbiBtb2R1bGVzIGV4cG9ydCBhbiBpbml0aWFsaXphdGlvbiBmdW5j
dGlvbgo+IG5hbWVkICJQeUluaXRfbW9kdWxlbmFtZSIsIG5hbWVkIGFmdGVyIHRoZSBmaWxlIG5h
bWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5Lgo+IFRoaXMgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkg
dGhlIGltcG9ydCBtYWNoaW5lcnkgYW5kIG11c3QgcmV0dXJuIGEgZnVsbHkKPiBpbml0aWFsaXpl
ZCBtb2R1bGUgb2JqZWN0Lgo+IFRoZSBmdW5jdGlvbiByZWNlaXZlcyBubyBhcmd1bWVudHMsIHNv
IGl0IGhhcyBubyB3YXkgb2Yga25vd2luZyBhYm91dCBpdHMKPiBpbXBvcnQgY29udGV4dC4KPgo+
IER1cmluZyBpdHMgZXhlY3V0aW9uLCB0aGUgbW9kdWxlIGluaXQgZnVuY3Rpb24gY3JlYXRlcyBh
IG1vZHVsZSBvYmplY3QKPiBiYXNlZCBvbiBhIFB5TW9kdWxlRGVmIG9iamVjdC4gSXQgdGhlbiBj
b250aW51ZXMgdG8gaW5pdGlhbGl6ZSBpdCBieSBhZGRpbmcKPiBhdHRyaWJ1dGVzIHRvIHRoZSBt
b2R1bGUgZGljdCwgY3JlYXRpbmcgdHlwZXMsIGV0Yy4KPgo+IEluIHRoZSBiYWNrLCB0aGUgc2hh
cmVkIGxpYnJhcnkgbG9hZGVyIGtlZXBzIGEgbm90ZSBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkCj4g
bW9kdWxlIG5hbWUgb2YgdGhlIGxhc3QgbW9kdWxlIHRoYXQgaXQgbG9hZGVkLCBhbmQgd2hlbiBh
IG1vZHVsZSBnZXRzCj4gY3JlYXRlZCB0aGF0IGhhcyBhIG1hdGNoaW5nIG5hbWUsIHRoaXMgZ2xv
YmFsIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCj4gdGhlIGZ1bGx5IHF1YWxpZmllZCBu
YW1lIG9mIHRoZSBtb2R1bGUgb2JqZWN0LiBUaGlzIGlzIG5vdCBlbnRpcmVseSBzYWZlIGFzIGl0
Cj4gcmVsaWVzIG9uIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbiBjcmVhdGluZyBpdHMgb3duIG1v
ZHVsZSBvYmplY3QgZmlyc3QsCj4gYnV0IHRoaXMgYXNzdW1wdGlvbiB1c3VhbGx5IGhvbGRzIGlu
IHByYWN0aWNlLgo+Cj4KPiBUaGUgcHJvcG9zYWwKPiA9PT09PT09PT09PT0KPgo+IFRoZSBpbml0
aWFsaXphdGlvbiBmdW5jdGlvbiAoUHlJbml0X21vZHVsZW5hbWUpIHdpbGwgYmUgYWxsb3dlZCB0
byByZXR1cm4KPiBhIHBvaW50ZXIgdG8gYSBQeU1vZHVsZURlZiBvYmplY3QuIFRoZSBpbXBvcnQg
bWFjaGluZXJ5IHdpbGwgYmUgaW4gY2hhcmdlCj4gb2YgY29uc3RydWN0aW5nIHRoZSBtb2R1bGUg
b2JqZWN0LCBjYWxsaW5nIGhvb2tzIHByb3ZpZGVkIGluIHRoZSBQeU1vZHVsZURlZgo+IGluIHRo
ZSByZWxldmFudCBwaGFzZXMgb2YgaW5pdGlhbGl6YXRpb24gKGFzIGRlc2NyaWJlZCBiZWxvdyku
Cj4KPiBUaGlzIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcG9z
c2liaWxpdHkuIFNpbmdsZS1waGFzZQo+IGluaXRpYWxpemF0aW9uLCB0aGUgY3VycmVudCBwcmFj
dGljZSBvZiByZXR1cm5pbmcgYSBmdWxseSBpbml0aWFsaXplZCBtb2R1bGUKPiBvYmplY3QsIHdp
bGwgc3RpbGwgYmUgYWNjZXB0ZWQsIHNvIGV4aXN0aW5nIGNvZGUgd2lsbCB3b3JrIHVuY2hhbmdl
ZCwKPiBpbmNsdWRpbmcgYmluYXJ5IGNvbXBhdGliaWxpdHkuCj4KPiBUaGUgUHlNb2R1bGVEZWYg
c3RydWN0dXJlIHdpbGwgYmUgY2hhbmdlZCB0byBjb250YWluIGEgbGlzdCBvZiBzbG90cywKPiBz
aW1pbGFybHkgdG8gUEVQIDM4NCdzIFB5VHlwZV9TcGVjIGZvciB0eXBlcy4KPiBUbyBrZWVwIGJp
bmFyeSBjb21wYXRpYmlsaXR5LCBhbmQgYXZvaWQgbmVlZGluZyB0byBpbnRyb2R1Y2UgYSBuZXcg
c3RydWN0dXJlCj4gKHdoaWNoIHdvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN1cHBvcnRpbmcg
ZnVuY3Rpb25zIGFuZCBwZXItbW9kdWxlIHN0b3JhZ2UpLAo+IHRoZSBjdXJyZW50bHkgdW51c2Vk
IG1fcmVsb2FkIHBvaW50ZXIgb2YgUHlNb2R1bGVEZWYgd2lsbCBiZSBjaGFuZ2VkIHRvCj4gaG9s
ZCB0aGUgc2xvdHMuIFRoZSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGFzOjoKPgo+ICAgICB0eXBl
ZGVmIHN0cnVjdCB7Cj4gICAgICAgICBpbnQgc2xvdDsKPiAgICAgICAgIHZvaWQgKnZhbHVlOwo+
ICAgICB9IFB5TW9kdWxlRGVmX1Nsb3Q7Cj4KPiAgICAgdHlwZWRlZiBzdHJ1Y3QgUHlNb2R1bGVE
ZWYgewo+ICAgICAgICAgUHlNb2R1bGVEZWZfQmFzZSBtX2Jhc2U7Cj4gICAgICAgICBjb25zdCBj
aGFyKiBtX25hbWU7Cj4gICAgICAgICBjb25zdCBjaGFyKiBtX2RvYzsKPiAgICAgICAgIFB5X3Nz
aXplX3QgbV9zaXplOwo+ICAgICAgICAgUHlNZXRob2REZWYgKm1fbWV0aG9kczsKPiAgICAgICAg
IFB5TW9kdWxlRGVmX1Nsb3QgKm1fc2xvdHM7ICAvKiBjaGFuZ2VkIGZyb20gYGlucXVpcnkgbV9y
ZWxvYWQ7YCAqLwo+ICAgICAgICAgdHJhdmVyc2Vwcm9jIG1fdHJhdmVyc2U7Cj4gICAgICAgICBp
bnF1aXJ5IG1fY2xlYXI7Cj4gICAgICAgICBmcmVlZnVuYyBtX2ZyZWU7Cj4gICAgIH0gUHlNb2R1
bGVEZWY7Cj4KPiBUaGUgKm1fc2xvdHMqIG1lbWJlciBtdXN0IGJlIGVpdGhlciBOVUxMLCBvciBw
b2ludCB0byBhbiBhcnJheSBvZgo+IFB5TW9kdWxlRGVmX1Nsb3Qgc3RydWN0dXJlcywgdGVybWlu
YXRlZCBieSBhIHNsb3Qgd2l0aCBpZCBzZXQgdG8gMAo+IChpLmUuIGBgezAsIE5VTEx9YGApLgo+
Cj4gVG8gc3BlY2lmeSBhIHNsb3QsIGEgdW5pcXVlIHNsb3QgSUQgbXVzdCBiZSBwcm92aWRlZC4K
PiBOZXcgUHl0aG9uIHZlcnNpb25zIG1heSBpbnRyb2R1Y2UgbmV3IHNsb3QgSURzLCBidXQgc2xv
dCBJRHMgd2lsbCBuZXZlciBiZQo+IHJlY3ljbGVkLiBTbG90cyBtYXkgZ2V0IGRlcHJlY2F0ZWQs
IGJ1dCB3aWxsIGNvbnRpbnVlIHRvIGJlIHN1cHBvcnRlZAo+IHRocm91Z2hvdXQgUHl0aG9uIDMu
eC4KPgo+IEEgc2xvdCdzIHZhbHVlIHBvaW50ZXIgbWF5IG5vdCBiZSBOVUxMLCB1bmxlc3Mgc3Bl
Y2lmaWVkIG90aGVyd2lzZSBpbiB0aGUKPiBzbG90J3MgZG9jdW1lbnRhdGlvbi4KPgo+IFRoZSBm
b2xsb3dpbmcgc2xvdHMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUsIGFuZCBkZXNjcmliZWQgbGF0
ZXI6Cj4KPiAqIFB5X21vZF9jcmVhdGUKPiAqIFB5X21vZF9leGVjCj4KPiBVbmtub3duIHNsb3Qg
SURzIHdpbGwgY2F1c2UgdGhlIGltcG9ydCB0byBmYWlsIHdpdGggU3lzdGVtRXJyb3IuCj4KPiBX
aGVuIHVzaW5nIG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uLCB0aGUgKm1fbmFtZSogZmllbGQg
b2YgUHlNb2R1bGVEZWYgd2lsbAo+IG5vdCBiZSB1c2VkIGR1cmluZyBpbXBvcnRpbmc7IHRoZSBt
b2R1bGUgbmFtZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIE1vZHVsZVNwZWMuCj4KPiBUbyBwcmV2
ZW50IGNyYXNoZXMgd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCBpbiBvbGRlciB2ZXJzaW9ucyBv
ZiBQeXRob24sCj4gdGhlIFB5TW9kdWxlRGVmIG9iamVjdCBtdXN0IGJlIGluaXRpYWxpemVkIHVz
aW5nIHRoZSBuZXdseSBhZGRlZAo+IFB5TW9kdWxlRGVmX0luaXQgZnVuY3Rpb24uIFRoaXMgc2V0
cyB0aGUgb2JqZWN0IHR5cGUgKHdoaWNoIGNhbm5vdCBiZSBkb25lCj4gc3RhdGljYWxseSBvbiBj
ZXJ0YWluIGNvbXBpbGVycyksIHJlZmNvdW50LCBhbmQgaW50ZXJuYWwgYm9va2tlZXBpbmcgZGF0
YQo+IChtX2luZGV4KS4KPiBGb3IgZXhhbXBsZSwgYW4gZXh0ZW5zaW9uIG1vZHVsZSAiZXhhbXBs
ZSIgd291bGQgYmUgZXhwb3J0ZWQgYXM6Ogo+Cj4gICAgIHN0YXRpYyBQeU1vZHVsZURlZiBleGFt
cGxlX2RlZiA9IHsuLi59Cj4KPiAgICAgUHlNT0RJTklUX0ZVTkMKPiAgICAgUHlJbml0X2V4YW1w
bGUodm9pZCkKPiAgICAgewo+ICAgICAgICAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJmV4YW1w
bGVfZGVmKTsKPiAgICAgfQo+Cj4gVGhlIFB5TW9kdWxlRGVmIG9iamVjdCBtdXN0IGJlIGF2YWls
YWJsZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBtb2R1bGUgY3JlYXRlZAo+IGZyb20gaXQg4oCT
IHVzdWFsbHksIGl0IHdpbGwgYmUgZGVjbGFyZWQgc3RhdGljYWxseS4KPgo+IFBzZXVkby1jb2Rl
IE92ZXJ2aWV3Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0KPgo+IEhlcmUgaXMgYW4gb3ZlcnZpZXcg
b2YgaG93IHRoZSBtb2RpZmllZCBpbXBvcnRlcnMgd2lsbCBvcGVyYXRlLgo+IERldGFpbHMgc3Vj
aCBhcyBsb2dnaW5nIG9yIGhhbmRsaW5nIG9mIGVycm9ycyBhbmQgaW52YWxpZCBzdGF0ZXMKPiBh
cmUgbGVmdCBvdXQsIGFuZCBDIGNvZGUgaXMgcHJlc2VudGVkIHdpdGggYSBjb25jaXNlIFB5dGhv
bi1saWtlIHN5bnRheC4KPgo+IFRoZSBmcmFtZXdvcmsgdGhhdCBjYWxscyB0aGUgaW1wb3J0ZXJz
IGlzIGV4cGxhaW5lZCBpbiBQRVAgNDUxCj4gWyNwZXAtMDQ1MS1sb2FkaW5nXV8uCj4KPiA6Ogo+
Cj4gICAgIGltcG9ydGxpYi9fYm9vdHN0cmFwLnB5Ogo+Cj4gICAgICAgICBjbGFzcyBCdWlsdGlu
SW1wb3J0ZXI6Cj4gICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6Cj4g
ICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9pbXAuY3JlYXRlX2J1aWx0aW4oc3BlYykKPgo+ICAg
ICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgo+ICAgICAgICAgICAgICAg
ICBfaW1wLmV4ZWNfZHluYW1pYyhtb2R1bGUpCj4KPiAgICAgICAgICAgICBkZWYgbG9hZF9tb2R1
bGUoc2VsZiwgbmFtZSk6Cj4gICAgICAgICAgICAgICAgICMgdXNlIGEgYmFja3dhcmRzIGNvbXBh
dGliaWxpdHkgc2hpbQo+ICAgICAgICAgICAgICAgICBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBu
YW1lKQo+Cj4gICAgIGltcG9ydGxpYi9fYm9vdHN0cmFwX2V4dGVybmFsLnB5Ogo+Cj4gICAgICAg
ICBjbGFzcyBFeHRlbnNpb25GaWxlTG9hZGVyOgo+ICAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9k
dWxlKHNlbGYsIHNwZWMpOgo+ICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfaW1wLmNyZWF0ZV9k
eW5hbWljKHNwZWMpCj4KPiAgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxl
KToKPiAgICAgICAgICAgICAgICAgX2ltcC5leGVjX2R5bmFtaWMobW9kdWxlKQo+Cj4gICAgICAg
ICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgo+ICAgICAgICAgICAgICAgICAjIHVz
ZSBhIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNoaW0KPiAgICAgICAgICAgICAgICAgX2xvYWRf
bW9kdWxlX3NoaW0oc2VsZiwgbmFtZSkKPgo+ICAgICBQeXRob24vaW1wb3J0LmMgKHRoZSBfaW1w
IG1vZHVsZSk6Cj4KPiAgICAgICAgIGRlZiBjcmVhdGVfZHluYW1pYyhzcGVjKToKPiAgICAgICAg
ICAgICBuYW1lID0gc3BlYy5uYW1lCj4gICAgICAgICAgICAgcGF0aCA9IHNwZWMub3JpZ2luCj4K
PiAgICAgICAgICAgICAjIEZpbmQgYW4gYWxyZWFkeSBsb2FkZWQgbW9kdWxlIHRoYXQgdXNlZCBz
aW5nbGUtcGhhc2UgaW5pdC4KPiAgICAgICAgICAgICAjIEZvciBtdWx0aS1waGFzZSBpbml0aWFs
aXphdGlvbiwgbW9kIGlzIE5VTEwsIHNvIGEgbmV3IG1vZHVsZQo+ICAgICAgICAgICAgICMgaXMg
YWx3YXlzIGNyZWF0ZWQuCj4gICAgICAgICAgICAgbW9kID0gX1B5SW1wb3J0X0ZpbmRFeHRlbnNp
b25PYmplY3QobmFtZSwgbmFtZSkKPiAgICAgICAgICAgICBpZiBtb2Q6Cj4gICAgICAgICAgICAg
ICAgIHJldHVybiBtb2QKPgo+ICAgICAgICAgICAgIHJldHVybiBfUHlJbXBvcnRfTG9hZER5bmFt
aWNNb2R1bGVXaXRoU3BlYyhzcGVjKQo+Cj4gICAgICAgICBkZWYgZXhlY19keW5hbWljKG1vZHVs
ZSk6Cj4gICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVU
eXBlKToKPiAgICAgICAgICAgICAgICAgIyBub24tbW9kdWxlcyBhcmUgc2tpcHBlZCAtLSBQeU1v
ZHVsZV9HZXREZWYgZmFpbHMgb24gdGhlbQo+ICAgICAgICAgICAgICAgICByZXR1cm4KPgo+ICAg
ICAgICAgICAgIGRlZiA9IFB5TW9kdWxlX0dldERlZihtb2R1bGUpCj4gICAgICAgICAgICAgc3Rh
dGUgPSBQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpCj4gICAgICAgICAgICAgaWYgc3RhdGUgaXMg
TlVMTDoKPiAgICAgICAgICAgICAgICAgUHlNb2R1bGVfRXhlY0RlZihtb2R1bGUsIGRlZikKPgo+
ICAgICAgICAgZGVmIGNyZWF0ZV9idWlsdGluKHNwZWMpOgo+ICAgICAgICAgICAgIG5hbWUgPSBz
cGVjLm5hbWUKPgo+ICAgICAgICAgICAgICMgRmluZCBhbiBhbHJlYWR5IGxvYWRlZCBtb2R1bGUg
dGhhdCB1c2VkIHNpbmdsZS1waGFzZSBpbml0Lgo+ICAgICAgICAgICAgICMgRm9yIG11bHRpLXBo
YXNlIGluaXRpYWxpemF0aW9uLCBtb2QgaXMgTlVMTCwgc28gYSBuZXcgbW9kdWxlCj4gICAgICAg
ICAgICAgIyBpcyBhbHdheXMgY3JlYXRlZC4KPiAgICAgICAgICAgICBtb2QgPSBfUHlJbXBvcnRf
RmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKQo+ICAgICAgICAgICAgIGlmIG1vZDoKPiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1vZAo+Cj4gICAgICAgICAgICAgZm9yIGluaXRuYW1lLCBp
bml0ZnVuYyBpbiBQeUltcG9ydF9Jbml0dGFiOgo+ICAgICAgICAgICAgICAgICBpZiBuYW1lID09
IGluaXRuYW1lOgo+ICAgICAgICAgICAgICAgICAgICAgbSA9IGluaXRmdW5jKCkKPiAgICAgICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobSwgUHlNb2R1bGVEZWYpOgo+ICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiA9IG0KPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlN
b2R1bGVfRnJvbURlZkFuZFNwZWMoZGVmLCBzcGVjKQo+ICAgICAgICAgICAgICAgICAgICAgZWxz
ZToKPiAgICAgICAgICAgICAgICAgICAgICAgICAjIGZhbGwgYmFjayB0byBzaW5nbGUtcGhhc2Ug
aW5pdGlhbGl6YXRpb24KPiAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBtCj4gICAg
ICAgICAgICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KG1vZHVs
ZSwgbmFtZSwgbmFtZSkKPiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCj4K
PiAgICAgUHl0aG9uL2ltcG9ydGRsLmM6Cj4KPiAgICAgICAgIGRlZiBfUHlJbXBvcnRfTG9hZER5
bmFtaWNNb2R1bGVXaXRoU3BlYyhzcGVjKToKPiAgICAgICAgICAgICBwYXRoID0gc3BlYy5vcmln
aW4KPiAgICAgICAgICAgICBwYWNrYWdlLCBkb3QsIG5hbWUgPSBzcGVjLm5hbWUucnBhcnRpdGlv
bignLicpCj4KPiAgICAgICAgICAgICAjIHNlZSB0aGUgIk5vbi1BU0NJSSBtb2R1bGUgbmFtZXMi
IHNlY3Rpb24gZm9yIGV4cG9ydF9ob29rX25hbWUKPiAgICAgICAgICAgICBob29rX25hbWUgPSBl
eHBvcnRfaG9va19uYW1lKG5hbWUpCj4KPiAgICAgICAgICAgICAjIGNhbGwgcGxhdGZvcm0tc3Bl
Y2lmaWMgZnVuY3Rpb24gZm9yIGxvYWRpbmcgZXhwb3J0ZWQgZnVuY3Rpb24KPiAgICAgICAgICAg
ICAjIGZyb20gc2hhcmVkIGxpYnJhcnkKPiAgICAgICAgICAgICBleHBvcnRmdW5jID0gX2ZpbmRf
c2hhcmVkX2Z1bmNwdHIoaG9va19uYW1lLCBwYXRoKQo+Cj4gICAgICAgICAgICAgbSA9IGV4cG9y
dGZ1bmMoKQo+ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobSwgUHlNb2R1bGVEZWYpOgo+ICAg
ICAgICAgICAgICAgICBkZWYgPSBtCj4gICAgICAgICAgICAgICAgIHJldHVybiBQeU1vZHVsZV9G
cm9tRGVmQW5kU3BlYyhkZWYsIHNwZWMpCj4KPiAgICAgICAgICAgICBtb2R1bGUgPSBtCj4KPiAg
ICAgICAgICAgICAjIGZhbGwgYmFjayB0byBzaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24KPiAg
ICAgICAgICAgICAuLi4uCj4KPiAgICAgT2JqZWN0cy9tb2R1bGVvYmplY3QuYzoKPgo+ICAgICAg
ICAgZGVmIFB5TW9kdWxlX0Zyb21EZWZBbmRTcGVjKGRlZiwgc3BlYyk6Cj4gICAgICAgICAgICAg
bmFtZSA9IHNwZWMubmFtZQo+ICAgICAgICAgICAgIGNyZWF0ZSA9IE5vbmUKPiAgICAgICAgICAg
ICBmb3Igc2xvdCwgdmFsdWUgaW4gZGVmLm1fc2xvdHM6Cj4gICAgICAgICAgICAgICAgIGlmIHNs
b3QgPT0gUHlfbW9kX2NyZWF0ZToKPiAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSA9IHZhbHVl
Cj4gICAgICAgICAgICAgaWYgY3JlYXRlOgo+ICAgICAgICAgICAgICAgICBtID0gY3JlYXRlKHNw
ZWMsIGRlZikKPiAgICAgICAgICAgICBlbHNlOgo+ICAgICAgICAgICAgICAgICBtID0gUHlNb2R1
bGVfTmV3KG5hbWUpCj4KPiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG0sIHR5cGVzLk1vZHVs
ZVR5cGUpOgo+ICAgICAgICAgICAgICAgICBtLm1kX3N0YXRlID0gTm9uZQo+ICAgICAgICAgICAg
ICAgICBtLm1kX2RlZiA9IGRlZgo+Cj4gICAgICAgICAgICAgaWYgZGVmLm1fbWV0aG9kczoKPiAg
ICAgICAgICAgICAgICAgUHlNb2R1bGVfQWRkRnVuY3Rpb25zKG0sIGRlZi5tX21ldGhvZHMpCj4g
ICAgICAgICAgICAgaWYgZGVmLm1fZG9jOgo+ICAgICAgICAgICAgICAgICBQeU1vZHVsZV9TZXRE
b2NTdHJpbmcobSwgZGVmLm1fZG9jKQo+Cj4gICAgICAgICBkZWYgUHlNb2R1bGVfRXhlY0RlZiht
b2R1bGUsIGRlZik6Cj4gICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLm1v
ZHVsZV90eXBlKToKPiAgICAgICAgICAgICAgICAgaWYgbW9kdWxlLm1kX3N0YXRlIGlzIE5VTEw6
Cj4gICAgICAgICAgICAgICAgICAgICAjIGFsbG9jYXRlIGEgYmxvY2sgb2YgemVyb2VkLW91dCBt
ZW1vcnkKPiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5tZF9zdGF0ZSA9IF9hbGxvYyhtb2R1
bGUubWRfc2l6ZSkKPgo+ICAgICAgICAgICAgIGlmIGRlZi5tX3Nsb3RzIGlzIE5VTEw6Cj4gICAg
ICAgICAgICAgICAgIHJldHVybgo+Cj4gICAgICAgICAgICAgZm9yIHNsb3QsIHZhbHVlIGluIGRl
Zi5tX3Nsb3RzOgo+ICAgICAgICAgICAgICAgICBpZiBzbG90ID09IFB5X21vZF9leGVjOgo+ICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUobW9kdWxlKQo+Cj4KPiBNb2R1bGUgQ3JlYXRpb24gUGhh
c2UKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPgo+IENyZWF0aW9uIG9mIHRoZSBtb2R1bGUgb2Jq
ZWN0IOKAkyB0aGF0IGlzLCB0aGUgaW1wbGVtZW50YXRpb24gb2YKPiBFeGVjdXRpb25Mb2FkZXIu
Y3JlYXRlX21vZHVsZSDigJMgaXMgZ292ZXJuZWQgYnkgdGhlIFB5X21vZF9jcmVhdGUgc2xvdC4K
Pgo+IFRoZSBQeV9tb2RfY3JlYXRlIHNsb3QKPiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uCj4KPiBU
aGUgUHlfbW9kX2NyZWF0ZSBzbG90IGlzIHVzZWQgdG8gc3VwcG9ydCBjdXN0b20gbW9kdWxlIHN1
YmNsYXNzZXMuCj4gVGhlIHZhbHVlIHBvaW50ZXIgbXVzdCBwb2ludCB0byBhIGZ1bmN0aW9uIHdp
dGggdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6Ogo+Cj4gICAgIFB5T2JqZWN0KiAoKlB5TW9kdWxl
Q3JlYXRlRnVuY3Rpb24pKFB5T2JqZWN0ICpzcGVjLCBQeU1vZHVsZURlZiAqZGVmKQo+Cj4gVGhl
IGZ1bmN0aW9uIHJlY2VpdmVzIGEgTW9kdWxlU3BlYyBpbnN0YW5jZSwgYXMgZGVmaW5lZCBpbiBQ
RVAgNDUxLAo+IGFuZCB0aGUgUHlNb2R1bGVEZWYgc3RydWN0dXJlLgo+IEl0IHNob3VsZCByZXR1
cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgb3Igc2V0IGFuIGVycm9yCj4gYW5kIHJldHVybiBOVUxM
Lgo+Cj4gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaW1wb3J0
LXJlbGF0ZWQgYXR0cmlidXRlcwo+IHNwZWNpZmllZCBpbiBQRVAgNDUxIFsjcGVwLTA0NTEtYXR0
cmlidXRlc11fIChzdWNoIGFzIGBgX19uYW1lX19gYCBvcgo+IGBgX19sb2FkZXJfX2BgKSBvbiB0
aGUgbmV3IG1vZHVsZS4KPgo+IFRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IGZvciB0aGUgcmV0dXJu
ZWQgb2JqZWN0IHRvIGJlIGFuIGluc3RhbmNlIG9mCj4gdHlwZXMuTW9kdWxlVHlwZS4gQW55IHR5
cGUgY2FuIGJlIHVzZWQsIGFzIGxvbmcgYXMgaXQgc3VwcG9ydHMgc2V0dGluZyBhbmQKPiBnZXR0
aW5nIGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBhdCBsZWFzdCB0aGUgaW1wb3J0LXJlbGF0ZWQgYXR0
cmlidXRlcy4KPiBIb3dldmVyLCBvbmx5IE1vZHVsZVR5cGUgaW5zdGFuY2VzIHN1cHBvcnQgbW9k
dWxlLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkKPiBzdWNoIGFzIHBlci1tb2R1bGUgc3RhdGUuCj4K
PiBOb3RlIHRoYXQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIG1vZHVsZSdzIGVu
dHJ5IGluIHN5cy5tb2R1bGVzCj4gaXMgbm90IHBvcHVsYXRlZCB5ZXQuIEF0dGVtcHRpbmcgdG8g
aW1wb3J0IHRoZSBzYW1lIG1vZHVsZSBhZ2Fpbgo+IChwb3NzaWJseSB0cmFuc2l0aXZlbHkpLCBt
YXkgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLgo+IEV4dGVuc2lvbiBhdXRob3JzIGFyZSBhZHZp
c2VkIHRvIGtlZXAgUHlfbW9kX2NyZWF0ZSBtaW5pbWFsLCBhbiBpbiBwYXJ0aWN1bGFyCj4gdG8g
bm90IGNhbGwgdXNlciBjb2RlIGZyb20gaXQuCj4KPiBNdWx0aXBsZSBQeV9tb2RfY3JlYXRlIHNs
b3RzIG1heSBub3QgYmUgc3BlY2lmaWVkLiBJZiB0aGV5IGFyZSwgaW1wb3J0Cj4gd2lsbCBmYWls
IHdpdGggU3lzdGVtRXJyb3IuCj4KPiBJZiBQeV9tb2RfY3JlYXRlIGlzIG5vdCBzcGVjaWZpZWQs
IHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgY3JlYXRlIGEgbm9ybWFsCj4gbW9kdWxlIG9iamVj
dCB1c2luZyBQeU1vZHVsZV9OZXcuIFRoZSBuYW1lIGlzIHRha2VuIGZyb20gKnNwZWMqLgo+Cj4K
PiBQb3N0LWNyZWF0aW9uIHN0ZXBzCj4gLi4uLi4uLi4uLi4uLi4uLi4uLgo+Cj4gSWYgdGhlIFB5
X21vZF9jcmVhdGUgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0eXBlcy5Nb2R1bGVU
eXBlCj4gb3IgYSBzdWJjbGFzcyAob3IgaWYgYSBQeV9tb2RfY3JlYXRlIHNsb3QgaXMgbm90IHBy
ZXNlbnQpLCB0aGUgaW1wb3J0Cj4gbWFjaGluZXJ5IHdpbGwgYXNzb2NpYXRlIHRoZSBQeU1vZHVs
ZURlZiB3aXRoIHRoZSBtb2R1bGUuCj4gVGhpcyBhbHNvIG1ha2VzIHRoZSBQeU1vZHVsZURlZiBh
Y2Nlc3NpYmxlIHRvIGV4ZWN1dGlvbiBwaGFzZSwgdGhlCj4gUHlNb2R1bGVfR2V0RGVmIGZ1bmN0
aW9uLCBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIHJvdXRpbmVzICh0cmF2ZXJzZSwKPiBjbGVhciwg
ZnJlZSkuCj4KPiBJZiB0aGUgUHlfbW9kX2NyZWF0ZSBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4g
YSBtb2R1bGUgc3ViY2xhc3MsIHRoZW4gbV9zaXplCj4gbXVzdCBiZSAwLCBhbmQgbV90cmF2ZXJz
ZSwgbV9jbGVhciBhbmQgbV9mcmVlIG11c3QgYWxsIGJlIE5VTEwuCj4gT3RoZXJ3aXNlLCBTeXN0
ZW1FcnJvciBpcyByYWlzZWQuCj4KPiBBZGRpdGlvbmFsbHksIGluaXRpYWwgYXR0cmlidXRlcyBz
cGVjaWZpZWQgaW4gdGhlIFB5TW9kdWxlRGVmIGFyZSBzZXQgb24gdGhlCj4gbW9kdWxlIG9iamVj
dCwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZToKPgo+ICogVGhlIGRvY3N0cmluZyBpcyBzZXQgZnJv
bSBtX2RvYywgaWYgbm9uLU5VTEwuCj4gKiBUaGUgbW9kdWxlJ3MgZnVuY3Rpb25zIGFyZSBpbml0
aWFsaXplZCBmcm9tIG1fbWV0aG9kcywgaWYgYW55Lgo+Cj4KPiBNb2R1bGUgRXhlY3V0aW9uIFBo
YXNlCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4gTW9kdWxlIGV4ZWN1dGlvbiAtLSB0aGF0
IGlzLCB0aGUgaW1wbGVtZW50YXRpb24gb2YKPiBFeGVjdXRpb25Mb2FkZXIuZXhlY19tb2R1bGUg
LS0gaXMgZ292ZXJuZWQgYnkgImV4ZWN1dGlvbiBzbG90cyIuCj4gVGhpcyBQRVAgb25seSBhZGRz
IG9uZSwgUHlfbW9kX2V4ZWMsIGJ1dCBvdGhlcnMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUu
Cj4KPiBUaGUgZXhlY3V0aW9uIHBoYXNlIGlzIGRvbmUgb24gdGhlIFB5TW9kdWxlRGVmIGFzc29j
aWF0ZWQgd2l0aCB0aGUgbW9kdWxlCj4gb2JqZWN0LiBGb3Igb2JqZWN0cyB0aGF0IGFyZSBub3Qg
YSBzdWJjbGFzcyBvZiBQeU1vZHVsZV9UeXBlIChmb3Igd2hpY2gKPiBQeU1vZHVsZV9HZXREZWYg
d291bGQgZmFpbCksIHRoZSBleGVjdXRpb24gcGhhc2UgaXMgc2tpcHBlZC4KPgo+IEV4ZWN1dGlv
biBzbG90cyBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLCBhbmQgYXJlIHByb2Nlc3Nl
ZCBpbiB0aGUgb3JkZXIKPiB0aGV5IGFwcGVhciBpbiB0aGUgc2xvdHMgYXJyYXkuCj4gV2hlbiB1
c2luZyB0aGUgZGVmYXVsdCBpbXBvcnQgbWFjaGluZXJ5LCB0aGV5IGFyZSBwcm9jZXNzZWQgYWZ0
ZXIKPiBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzIHNwZWNpZmllZCBpbiBQRVAgNDUxIFsjcGVw
LTA0NTEtYXR0cmlidXRlc11fCj4gKHN1Y2ggYXMgYGBfX25hbWVfX2BgIG9yIGBgX19sb2FkZXJf
X2BgKSBhcmUgc2V0IGFuZCB0aGUgbW9kdWxlIGlzIGFkZGVkCj4gdG8gc3lzLm1vZHVsZXMuCj4K
Pgo+IFByZS1FeGVjdXRpb24gc3RlcHMKPiAtLS0tLS0tLS0tLS0tLS0tLS0tCj4KPiBCZWZvcmUg
cHJvY2Vzc2luZyB0aGUgZXhlY3V0aW9uIHNsb3RzLCBwZXItbW9kdWxlIHN0YXRlIGlzIGFsbG9j
YXRlZCBmb3IgdGhlCj4gbW9kdWxlLiBGcm9tIHRoaXMgcG9pbnQgb24sIHBlci1tb2R1bGUgc3Rh
dGUgaXMgYWNjZXNzaWJsZSB0aHJvdWdoCj4gUHlNb2R1bGVfR2V0U3RhdGUuCj4KPgo+IFRoZSBQ
eV9tb2RfZXhlYyBzbG90Cj4gLi4uLi4uLi4uLi4uLi4uLi4uLi4KPgo+IFRoZSBlbnRyeSBpbiB0
aGlzIHNsb3QgbXVzdCBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
YXR1cmU6Ogo+Cj4gICAgIGludCAoKlB5TW9kdWxlRXhlY0Z1bmN0aW9uKShQeU9iamVjdCogbW9k
dWxlKQo+Cj4gSXQgd2lsbCBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZSBhIG1vZHVsZS4gVXN1YWxs
eSwgdGhpcyBhbW91bnRzIHRvCj4gc2V0dGluZyB0aGUgbW9kdWxlJ3MgaW5pdGlhbCBhdHRyaWJ1
dGVzLgo+IFRoZSAibW9kdWxlIiBhcmd1bWVudCByZWNlaXZlcyB0aGUgbW9kdWxlIG9iamVjdCB0
byBpbml0aWFsaXplLgo+Cj4gSWYgUHlNb2R1bGVFeGVjIHJlcGxhY2VzIHRoZSBtb2R1bGUncyBl
bnRyeSBpbiBzeXMubW9kdWxlcywKPiB0aGUgbmV3IG9iamVjdCB3aWxsIGJlIHVzZWQgYW5kIHJl
dHVybmVkIGJ5IGltcG9ydGxpYiBtYWNoaW5lcnkuCj4gKFRoaXMgbWlycm9ycyB0aGUgYmVoYXZp
b3Igb2YgUHl0aG9uIG1vZHVsZXMuIE5vdGUgdGhhdCBpbXBsZW1lbnRpbmcKPiBQeV9tb2RfY3Jl
YXRlIGlzIHVzdWFsbHkgYSBiZXR0ZXIgc29sdXRpb24gZm9yIHRoZSB1c2UgY2FzZXMgdGhpcyBz
ZXJ2ZXMuKQo+Cj4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MsIG9y
LCBvbiBlcnJvciwgc2V0IGFuIGV4Y2VwdGlvbiBhbmQKPiByZXR1cm4gYGAtMWBgLgo+Cj4KPiBM
ZWdhY3kgSW5pdAo+IC0tLS0tLS0tLS0tCj4KPiBUaGUgYmFja3dhcmRzLWNvbXBhdGlibGUgc2lu
Z2xlLXBoYXNlIGluaXRpYWxpemF0aW9uIGNvbnRpbnVlcyB0byBiZSBzdXBwb3J0ZWQuCj4gSW4g
dGhpcyBzY2hlbWUsIHRoZSBQeUluaXQgZnVuY3Rpb24gcmV0dXJucyBhIGZ1bGx5IGluaXRpYWxp
emVkIG1vZHVsZSByYXRoZXIKPiB0aGFuIGEgUHlNb2R1bGVEZWYgb2JqZWN0Lgo+IEluIHRoaXMg
Y2FzZSwgdGhlIFB5SW5pdCBob29rIGltcGxlbWVudHMgdGhlIGNyZWF0aW9uIHBoYXNlLCBhbmQg
dGhlIGV4ZWN1dGlvbgo+IHBoYXNlIGlzIGEgbm8tb3AuCj4KPiBNb2R1bGVzIHRoYXQgbmVlZCB0
byB3b3JrIHVuY2hhbmdlZCBvbiBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gc2hvdWxkIHN0aWNr
IHRvCj4gc2luZ2xlLXBoYXNlIGluaXRpYWxpemF0aW9uLCBiZWNhdXNlIHRoZSBiZW5lZml0cyBp
dCBicmluZ3MgY2FuJ3QgYmUKPiBiYWNrLXBvcnRlZC4KPiBIZXJlIGlzIGFuIGV4YW1wbGUgb2Yg
YSBtb2R1bGUgdGhhdCBzdXBwb3J0cyBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlvbiwKPiBhbmQg
ZmFsbHMgYmFjayB0byBzaW5nbGUtcGhhc2Ugd2hlbiBjb21waWxlZCBmb3IgYW4gb2xkZXIgdmVy
c2lvbiBvZiBDUHl0aG9uLgo+IEl0IGlzIGluY2x1ZGVkIG1haW5seSBhcyBhbiBpbGx1c3RyYXRp
b24gb2YgdGhlIGNoYW5nZXMgbmVlZGVkIHRvIGVuYWJsZQo+IG11bHRpLXBoYXNlIGluaXQ6Ogo+
Cj4gICAgICNpbmNsdWRlIDxQeXRob24uaD4KPgo+ICAgICBzdGF0aWMgaW50IHNwYW1fZXhlYyhQ
eU9iamVjdCAqbW9kdWxlKSB7Cj4gICAgICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCht
b2R1bGUsICJmb29kIiwgInNwYW0iKTsKPiAgICAgICAgIHJldHVybiAwOwo+ICAgICB9Cj4KPiAg
ICAgI2lmZGVmIFB5X21vZF9leGVjCj4gICAgIHN0YXRpYyBQeU1vZHVsZURlZl9TbG90IHNwYW1f
c2xvdHNbXSA9IHsKPiAgICAgICAgIHtQeV9tb2RfZXhlYywgc3BhbV9leGVjfSwKPiAgICAgICAg
IHswLCBOVUxMfQo+ICAgICB9Owo+ICAgICAjZW5kaWYKPgo+ICAgICBzdGF0aWMgUHlNb2R1bGVE
ZWYgc3BhbV9kZWYgPSB7Cj4gICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsICAgICAgICAg
ICAgICAgICAgICAgIC8qIG1fYmFzZSAqLwo+ICAgICAgICAgInNwYW0iLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBtX25hbWUgKi8KPiAgICAgICAgIFB5RG9jX1NUUigi
VXRpbGl0aWVzIGZvciBjb29raW5nIHNwYW0iKSwgICAgLyogbV9kb2MgKi8KPiAgICAgICAgIDAs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zaXplICovCj4g
ICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1f
bWV0aG9kcyAqLwo+ICAgICAjaWZkZWYgUHlfbW9kX2V4ZWMKPiAgICAgICAgIHNwYW1fc2xvdHMs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9zbG90cyAqLwo+ICAgICAjZWxz
ZQo+ICAgICAgICAgTlVMTCwKPiAgICAgI2VuZGlmCj4gICAgICAgICBOVUxMLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8KPiAgICAgICAgIE5V
TEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbV9jbGVhciAqLwo+
ICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBt
X2ZyZWUgKi8KPiAgICAgfTsKPgo+ICAgICBQeU1PRElOSVRfRlVOQwo+ICAgICBQeUluaXRfc3Bh
bSh2b2lkKSB7Cj4gICAgICNpZmRlZiBQeV9tb2RfZXhlYwo+ICAgICAgICAgcmV0dXJuIFB5TW9k
dWxlRGVmX0luaXQoJnNwYW1fZGVmKTsKPiAgICAgI2Vsc2UKPiAgICAgICAgIFB5T2JqZWN0ICpt
b2R1bGU7Cj4gICAgICAgICBtb2R1bGUgPSBQeU1vZHVsZV9DcmVhdGUoJnNwYW1fZGVmKTsKPiAg
ICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Cj4gICAgICAgICBpZiAoc3Bh
bV9leGVjKG1vZHVsZSkgIT0gMCkgewo+ICAgICAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwo+
ICAgICAgICAgICAgIHJldHVybiBOVUxMOwo+ICAgICAgICAgfQo+ICAgICAgICAgcmV0dXJuIG1v
ZHVsZTsKPiAgICAgI2VuZGlmCj4gICAgIH0KPgo+Cj4gQnVpbHQtSW4gbW9kdWxlcwo+IC0tLS0t
LS0tLS0tLS0tLS0KPgo+IEFueSBleHRlbnNpb24gbW9kdWxlIGNhbiBiZSB1c2VkIGFzIGEgYnVp
bHQtaW4gbW9kdWxlIGJ5IGxpbmtpbmcgaXQgaW50bwo+IHRoZSBleGVjdXRhYmxlLCBhbmQgaW5j
bHVkaW5nIGl0IGluIHRoZSBpbml0dGFiIChlaXRoZXIgYXQgcnVudGltZSB3aXRoCj4gUHlJbXBv
cnRfQXBwZW5kSW5pdHRhYiwgb3IgYXQgY29uZmlndXJhdGlvbiB0aW1lLCB1c2luZyB0b29scyBs
aWtlICpmcmVlemUqKS4KPgo+IFRvIGtlZXAgdGhpcyBwb3NzaWJpbGl0eSwgYWxsIGNoYW5nZXMg
dG8gZXh0ZW5zaW9uIG1vZHVsZSBsb2FkaW5nIGludHJvZHVjZWQKPiBpbiB0aGlzIFBFUCB3aWxs
IGFsc28gYXBwbHkgdG8gYnVpbHQtaW4gbW9kdWxlcy4KPiBUaGUgb25seSBleGNlcHRpb24gaXMg
bm9uLUFTQ0lJIG1vZHVsZSBuYW1lcywgZXhwbGFpbmVkIGJlbG93Lgo+Cj4KPiBTdWJpbnRlcnBy
ZXRlcnMgYW5kIEludGVycHJldGVyIFJlbG9hZGluZwo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCj4KPiBFeHRlbnNpb25zIHVzaW5nIHRoZSBuZXcgaW5pdGlhbGl6
YXRpb24gc2NoZW1lIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0Cj4gc3ViaW50ZXJwcmV0ZXJzIGFu
ZCBtdWx0aXBsZSBQeV9Jbml0aWFsaXplL1B5X0ZpbmFsaXplIGN5Y2xlcyBjb3JyZWN0bHksCj4g
YXZvaWRpbmcgdGhlIGlzc3VlcyBtZW50aW9uZWQgaW4gUHl0aG9uIGRvY3VtZW50YXRpb24gWyNz
dWJpbnRlcnByZXRlci1kb2NzXV8uCj4gVGhlIG1lY2hhbmlzbSBpcyBkZXNpZ25lZCB0byBtYWtl
IHRoaXMgZWFzeSwgYnV0IGNhcmUgaXMgc3RpbGwgcmVxdWlyZWQKPiBvbiB0aGUgcGFydCBvZiB0
aGUgZXh0ZW5zaW9uIGF1dGhvci4KPiBObyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLCBtZXRob2Rz
LCBvciBpbnN0YW5jZXMgbWF5IGxlYWsgdG8gZGlmZmVyZW50Cj4gaW50ZXJwcmV0ZXJzLgo+IFRv
IGFjaGlldmUgdGhpcywgYWxsIG1vZHVsZS1sZXZlbCBzdGF0ZSBzaG91bGQgYmUga2VwdCBpbiBl
aXRoZXIgdGhlIG1vZHVsZQo+IGRpY3QsIG9yIGluIHRoZSBtb2R1bGUgb2JqZWN0J3Mgc3RvcmFn
ZSByZWFjaGFibGUgYnkgUHlNb2R1bGVfR2V0U3RhdGUuCj4gQSBzaW1wbGUgcnVsZSBvZiB0aHVt
YiBpczogRG8gbm90IGRlZmluZSBhbnkgc3RhdGljIGRhdGEsIGV4Y2VwdCBidWlsdC1pbiB0eXBl
cwo+IHdpdGggbm8gbXV0YWJsZSBvciB1c2VyLXNldHRhYmxlIGNsYXNzIGF0dHJpYnV0ZXMuCj4K
Pgo+IEZ1bmN0aW9ucyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aS1waGFzZSBpbml0aWFsaXphdGlv
bgo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQo+Cj4gVGhlIFB5TW9kdWxlX0NyZWF0ZSBmdW5jdGlvbiB3aWxsIGZhaWwgd2hlbiB1c2VkIG9u
IGEgUHlNb2R1bGVEZWYgc3RydWN0dXJlCj4gd2l0aCBhIG5vbi1OVUxMICptX3Nsb3RzKiBwb2lu
dGVyLgo+IFRoZSBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBNb2R1bGVTcGVj
IG9iamVjdCBuZWNlc3NhcnkgZm9yCj4gbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24uCj4KPiBU
aGUgUHlTdGF0ZV9GaW5kTW9kdWxlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwsIGFuZCBQeVN0
YXRlX0FkZE1vZHVsZQo+IGFuZCBQeVN0YXRlX1JlbW92ZU1vZHVsZSB3aWxsIGFsc28gZmFpbCBv
biBtb2R1bGVzIHdpdGggbm9uLU5VTEwgKm1fc2xvdHMqLgo+IFB5U3RhdGUgcmVnaXN0cmF0aW9u
IGlzIGRpc2FibGVkIGJlY2F1c2UgbXVsdGlwbGUgbW9kdWxlIG9iamVjdHMgbWF5IGJlIGNyZWF0
ZWQKPiBmcm9tIHRoZSBzYW1lIFB5TW9kdWxlRGVmLgo+Cj4KPiBNb2R1bGUgc3RhdGUgYW5kIEMt
bGV2ZWwgY2FsbGJhY2tzCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4g
RHVlIHRvIHRoZSB1bmF2YWlsYWJpbGl0eSBvZiBQeVN0YXRlX0ZpbmRNb2R1bGUsIGFueSBmdW5j
dGlvbiB0aGF0IG5lZWRzIGFjY2Vzcwo+IHRvIG1vZHVsZS1sZXZlbCBzdGF0ZSAoaW5jbHVkaW5n
IGZ1bmN0aW9ucywgY2xhc3NlcyBvciBleGNlcHRpb25zIGRlZmluZWQgYXQKPiB0aGUgbW9kdWxl
IGxldmVsKSBtdXN0IHJlY2VpdmUgYSByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBvYmplY3QgKG9y
IHRoZQo+IHBhcnRpY3VsYXIgb2JqZWN0IGl0IG5lZWRzKSwgZWl0aGVyIGRpcmVjdGx5IG9yIGlu
ZGlyZWN0bHkuCj4gVGhpcyBpcyBjdXJyZW50bHkgZGlmZmljdWx0IGluIHR3byBzaXR1YXRpb25z
Ogo+Cj4gKiBNZXRob2RzIG9mIGNsYXNzZXMsIHdoaWNoIHJlY2VpdmUgYSByZWZlcmVuY2UgdG8g
dGhlIGNsYXNzLCBidXQgbm90IHRvCj4gICB0aGUgY2xhc3MncyBtb2R1bGUKPiAqIExpYnJhcmll
cyB3aXRoIEMtbGV2ZWwgY2FsbGJhY2tzLCB1bmxlc3MgdGhlIGNhbGxiYWNrcyBjYW4gcmVjZWl2
ZSBjdXN0b20KPiAgIGRhdGEgc2V0IGF0IGNhbGxiYWNrIHJlZ2lzdHJhdGlvbgo+Cj4gRml4aW5n
IHRoZXNlIGNhc2VzIGlzIG91dHNpZGUgb2YgdGhlIHNjb3BlIG9mIHRoaXMgUEVQLCBidXQgd2ls
bCBiZSBuZWVkZWQgZm9yCj4gdGhlIG5ldyBtZWNoYW5pc20gdG8gYmUgdXNlZnVsIHRvIGFsbCBt
b2R1bGVzLiBQcm9wZXIgZml4ZXMgaGF2ZSBiZWVuIGRpc2N1c3NlZAo+IG9uIHRoZSBpbXBvcnQt
c2lnIG1haWxpbmcgbGlzdCBbI2ZpbmRtb2R1bGUtZGlzY3Vzc2lvbl1fLgo+Cj4gQXMgYSBydWxl
IG9mIHRodW1iLCBtb2R1bGVzIHRoYXQgcmVseSBvbiBQeVN0YXRlX0ZpbmRNb2R1bGUgYXJlLCBh
dCB0aGUgbW9tZW50LAo+IG5vdCBnb29kIGNhbmRpZGF0ZXMgZm9yIHBvcnRpbmcgdG8gdGhlIG5l
dyBtZWNoYW5pc20uCj4KPgo+IE5ldyBGdW5jdGlvbnMKPiAtLS0tLS0tLS0tLS0tCj4KPiBBIG5l
dyBmdW5jdGlvbiBhbmQgbWFjcm8gaW1wbGVtZW50aW5nIHRoZSBtb2R1bGUgY3JlYXRpb24gcGhh
c2Ugd2lsbCBiZSBhZGRlZC4KPiBUaGVzZSBhcmUgc2ltaWxhciB0byBQeU1vZHVsZV9DcmVhdGUg
YW5kIFB5TW9kdWxlX0NyZWF0ZTIsIGV4Y2VwdCB0aGV5Cj4gdGFrZSBhbiBhZGRpdGlvbmFsIE1v
ZHVsZVNwZWMgYXJndW1lbnQsIGFuZCBoYW5kbGUgbW9kdWxlIGRlZmluaXRpb25zIHdpdGgKPiBu
b24tTlVMTCBzbG90czo6Cj4KPiAgICAgUHlPYmplY3QgKiBQeU1vZHVsZV9Gcm9tRGVmQW5kU3Bl
YyhQeU1vZHVsZURlZiAqZGVmLCBQeU9iamVjdCAqc3BlYykKPiAgICAgUHlPYmplY3QgKiBQeU1v
ZHVsZV9Gcm9tRGVmQW5kU3BlYzIoUHlNb2R1bGVEZWYgKmRlZiwgUHlPYmplY3QgKnNwZWMsCj4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2R1bGVfYXBpX3Zl
cnNpb24pCj4KPiBBIG5ldyBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhlIG1vZHVsZSBleGVjdXRp
b24gcGhhc2Ugd2lsbCBiZSBhZGRlZC4KPiBUaGlzIGFsbG9jYXRlcyBwZXItbW9kdWxlIHN0YXRl
IChpZiBub3QgYWxsb2NhdGVkIGFscmVhZHkpLCBhbmQgKmFsd2F5cyoKPiBwcm9jZXNzZXMgZXhl
Y3V0aW9uIHNsb3RzLiBUaGUgaW1wb3J0IG1hY2hpbmVyeSBjYWxscyB0aGlzIG1ldGhvZCB3aGVu
Cj4gYSBtb2R1bGUgaXMgZXhlY3V0ZWQsIHVubGVzcyB0aGUgbW9kdWxlIGlzIGJlaW5nIHJlbG9h
ZGVkOjoKPgo+ICAgICBQeUFQSV9GVU5DKGludCkgUHlNb2R1bGVfRXhlY0RlZihQeU9iamVjdCAq
bW9kdWxlLCBQeU1vZHVsZURlZiAqZGVmKQo+Cj4gQW5vdGhlciBmdW5jdGlvbiB3aWxsIGJlIGlu
dHJvZHVjZWQgdG8gaW5pdGlhbGl6ZSBhIFB5TW9kdWxlRGVmIG9iamVjdC4KPiBUaGlzIGlkZW1w
b3RlbnQgZnVuY3Rpb24gZmlsbHMgaW4gdGhlIHR5cGUsIHJlZmNvdW50LCBhbmQgbW9kdWxlIGlu
ZGV4Lgo+IEl0IHJldHVybnMgaXRzIGFyZ3VtZW50IGNhc3QgdG8gUHlPYmplY3QqLCBzbyBpdCBj
YW4gYmUgcmV0dXJuZWQgZGlyZWN0bHkKPiBmcm9tIGEgUHlJbml0IGZ1bmN0aW9uOjoKPgo+ICAg
ICBQeU9iamVjdCAqIFB5TW9kdWxlRGVmX0luaXQoUHlNb2R1bGVEZWYgKik7Cj4KPiBBZGRpdGlv
bmFsbHksIHR3byBoZWxwZXJzIHdpbGwgYmUgYWRkZWQgZm9yIHNldHRpbmcgdGhlIGRvY3N0cmlu
ZyBhbmQKPiBtZXRob2RzIG9uIGEgbW9kdWxlOjoKPgo+ICAgICBpbnQgUHlNb2R1bGVfU2V0RG9j
U3RyaW5nKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKikKPiAgICAgaW50IFB5TW9kdWxlX0FkZEZ1
bmN0aW9ucyhQeU9iamVjdCAqLCBQeU1ldGhvZERlZiAqKQo+Cj4KPiBFeHBvcnQgSG9vayBOYW1l
Cj4gLS0tLS0tLS0tLS0tLS0tLQo+Cj4gQXMgcG9ydGFibGUgQyBpZGVudGlmaWVycyBhcmUgbGlt
aXRlZCB0byBBU0NJSSwgbW9kdWxlIG5hbWVzCj4gbXVzdCBiZSBlbmNvZGVkIHRvIGZvcm0gdGhl
IFB5SW5pdCBob29rIG5hbWUuCj4KPiBGb3IgQVNDSUkgbW9kdWxlIG5hbWVzLCB0aGUgaW1wb3J0
IGhvb2sgaXMgbmFtZWQKPiBQeUluaXRfPG1vZHVsZW5hbWU+LCB3aGVyZSA8bW9kdWxlbmFtZT4g
aXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KPgo+IEZvciBtb2R1bGUgbmFtZXMgY29udGFpbmlu
ZyBub24tQVNDSUkgY2hhcmFjdGVycywgdGhlIGltcG9ydCBob29rIGlzIG5hbWVkCj4gUHlJbml0
VV88ZW5jb2RlZG5hbWU+LCB3aGVyZSB0aGUgbmFtZSBpcyBlbmNvZGVkIHVzaW5nIENQeXRob24n
cwo+ICJwdW55Y29kZSIgZW5jb2RpbmcgKFB1bnljb2RlIFsjcmZjLTM0OTJdXyB3aXRoIGEgbG93
ZXJjYXNlIHN1ZmZpeCksCj4gd2l0aCBoeXBoZW5zICgiLSIpIHJlcGxhY2VkIGJ5IHVuZGVyc2Nv
cmVzICgiXyIpLgo+Cj4KPiBJbiBQeXRob246Ogo+Cj4gICAgIGRlZiBleHBvcnRfaG9va19uYW1l
KG5hbWUpOgo+ICAgICAgICAgdHJ5Ogo+ICAgICAgICAgICAgIHN1ZmZpeCA9IGInXycgKyBuYW1l
LmVuY29kZSgnYXNjaWknKQo+ICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKPiAg
ICAgICAgICAgICBzdWZmaXggPSBiJ1VfJyArIG5hbWUuZW5jb2RlKCdwdW55Y29kZScpLnJlcGxh
Y2UoYictJywgYidfJykKPiAgICAgICAgIHJldHVybiBiJ1B5SW5pdCcgKyBzdWZmaXgKPgo+IEV4
YW1wbGVzOgo+Cj4gPT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PQo+IE1vZHVsZSBu
YW1lICAgIEluaXQgaG9vayBuYW1lCj4gPT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09
PQo+IHNwYW0gICAgICAgICAgIFB5SW5pdF9zcGFtCj4gbGFuxI1tw610ICAgICAgICBQeUluaXRV
X2xhbm10XzJzYTZ0Cj4g44K544OR44OgICAgICAgICAgIFB5SW5pdFVfemNrNWIyYgo+ID09PT09
PT09PT09PT0gID09PT09PT09PT09PT09PT09PT0KPgo+IEZvciBtb2R1bGVzIHdpdGggbm9uLUFT
Q0lJIG5hbWVzLCBzaW5nbGUtcGhhc2UgaW5pdGlhbGl6YXRpb24gaXMgbm90IHN1cHBvcnRlZC4K
Pgo+IEluIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgUEVQLCBidWlsdC1pbiBt
b2R1bGVzIHdpdGggbm9uLUFTQ0lJCj4gbmFtZXMgd2lsbCBub3QgYmUgc3VwcG9ydGVkLgo+Cj4K
PiBNb2R1bGUgUmVsb2FkaW5nCj4gLS0tLS0tLS0tLS0tLS0tLQo+Cj4gUmVsb2FkaW5nIGFuIGV4
dGVuc2lvbiBtb2R1bGUgdXNpbmcgaW1wb3J0bGliLnJlbG9hZCgpIHdpbGwgY29udGludWUgdG8K
PiBoYXZlIG5vIGVmZmVjdCwgZXhjZXB0IHJlLXNldHRpbmcgaW1wb3J0LXJlbGF0ZWQgYXR0cmli
dXRlcy4KPgo+IER1ZSB0byBsaW1pdGF0aW9ucyBpbiBzaGFyZWQgbGlicmFyeSBsb2FkaW5nIChi
b3RoIGRsb3BlbiBvbiBQT1NJWCBhbmQKPiBMb2FkTW9kdWxlRXggb24gV2luZG93cyksIGl0IGlz
IG5vdCBnZW5lcmFsbHkgcG9zc2libGUgdG8gbG9hZAo+IGEgbW9kaWZpZWQgbGlicmFyeSBhZnRl
ciBpdCBoYXMgY2hhbmdlZCBvbiBkaXNrLgo+Cj4gVXNlIGNhc2VzIGZvciByZWxvYWRpbmcgb3Ro
ZXIgdGhhbiB0cnlpbmcgb3V0IGEgbmV3IHZlcnNpb24gb2YgdGhlIG1vZHVsZQo+IGFyZSB0b28g
cmFyZSB0byByZXF1aXJlIGFsbCBtb2R1bGUgYXV0aG9ycyB0byBrZWVwIHJlbG9hZGluZyBpbiBt
aW5kLgo+IElmIHJlbG9hZC1saWtlIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkLCBhdXRob3JzIGNh
biBleHBvcnQgYSBkZWRpY2F0ZWQKPiBmdW5jdGlvbiBmb3IgaXQuCj4KPgo+IE11bHRpcGxlIG1v
ZHVsZXMgaW4gb25lIGxpYnJhcnkKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4K
PiBUbyBzdXBwb3J0IG11bHRpcGxlIFB5dGhvbiBtb2R1bGVzIGluIG9uZSBzaGFyZWQgbGlicmFy
eSwgdGhlIGxpYnJhcnkgY2FuCj4gZXhwb3J0IGFkZGl0aW9uYWwgUHlJbml0KiBzeW1ib2xzIGJl
c2lkZXMgdGhlIG9uZSB0aGF0IGNvcnJlc3BvbmRzCj4gdG8gdGhlIGxpYnJhcnkncyBmaWxlbmFt
ZS4KPgo+IE5vdGUgdGhhdCB0aGlzIG1lY2hhbmlzbSBjYW4gY3VycmVudGx5IG9ubHkgYmUgdXNl
ZCB0byAqbG9hZCogZXh0cmEgbW9kdWxlcywKPiBidXQgbm90IHRvICpmaW5kKiB0aGVtLiAoVGhp
cyBpcyBhIGxpbWl0YXRpb24gb2YgdGhlIGxvYWRlciBtZWNoYW5pc20sCj4gd2hpY2ggdGhpcyBQ
RVAgZG9lcyBub3QgdHJ5IHRvIG1vZGlmeS4pCj4gVG8gd29yayBhcm91bmQgdGhlIGxhY2sgb2Yg
YSBzdWl0YWJsZSBmaW5kZXIsIGNvZGUgbGlrZSB0aGUgZm9sbG93aW5nCj4gY2FuIGJlIHVzZWQ6
Ogo+Cj4gICAgIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5Cj4gICAgIGltcG9ydCBpbXBvcnRs
aWIudXRpbAo+ICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVM
b2FkZXIobmFtZSwgcGF0aCkKPiAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9s
b2FkZXIobmFtZSwgbG9hZGVyKQo+ICAgICBtb2R1bGUgPSBpbXBvcnRsaWIudXRpbC5tb2R1bGVf
ZnJvbV9zcGVjKHNwZWMpCj4gICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCj4gICAgIHJl
dHVybiBtb2R1bGUKPgo+IE9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgc3ltYm9saWMgbGlua3Ms
IHRoZXNlIG1heSBiZSB1c2VkIHRvIGluc3RhbGwgb25lCj4gbGlicmFyeSB1bmRlciBtdWx0aXBs
ZSBuYW1lcywgZXhwb3NpbmcgYWxsIGV4cG9ydGVkIG1vZHVsZXMgdG8gbm9ybWFsCj4gaW1wb3J0
IG1hY2hpbmVyeS4KPgo+Cj4gVGVzdGluZyBhbmQgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbnMKPiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4gRm9yIHRlc3RpbmcsIGEgbmV3
IGJ1aWx0LWluIG1vZHVsZSBgYF90ZXN0bXVsdGlwaGFzZWBgIHdpbGwgYmUgY3JlYXRlZC4KPiBU
aGUgbGlicmFyeSB3aWxsIGV4cG9ydCBzZXZlcmFsIGFkZGl0aW9uYWwgbW9kdWxlcyB1c2luZyB0
aGUgbWVjaGFuaXNtCj4gZGVzY3JpYmVkIGluICJNdWx0aXBsZSBtb2R1bGVzIGluIG9uZSBsaWJy
YXJ5Ii4KPgo+IFRoZSBgYF90ZXN0Y2FwaWBgIG1vZHVsZSB3aWxsIGJlIHVuY2hhbmdlZCwgYW5k
IHdpbGwgdXNlIHNpbmdsZS1waGFzZQo+IGluaXRpYWxpemF0aW9uIGluZGVmaW5pdGVseSAob3Ig
dW50aWwgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCkuCj4KPiBUaGUgYGBhcnJheWBgIGFuZCBg
YHh4KmBgIG1vZHVsZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXNlIG11bHRpLXBoYXNlCj4gaW5p
dGlhbGl6YXRpb24gYXMgcGFydCBvZiB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4KPgo+Cj4g
U3VtbWFyeSBvZiBBUEkgQ2hhbmdlcyBhbmQgQWRkaXRpb25zCj4gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCj4KPiBOZXcgZnVuY3Rpb25zOgo+Cj4gKiBQeU1vZHVsZV9Gcm9t
RGVmQW5kU3BlYyAobWFjcm8pCj4gKiBQeU1vZHVsZV9Gcm9tRGVmQW5kU3BlYzIKPiAqIFB5TW9k
dWxlX0V4ZWNEZWYKPiAqIFB5TW9kdWxlX1NldERvY1N0cmluZwo+ICogUHlNb2R1bGVfQWRkRnVu
Y3Rpb25zCj4gKiBQeU1vZHVsZURlZl9Jbml0Cj4KPiBOZXcgbWFjcm9zOgo+Cj4gKiBQeV9tb2Rf
Y3JlYXRlCj4gKiBQeV9tb2RfZXhlYwo+Cj4gTmV3IHR5cGVzOgo+Cj4gKiBQeU1vZHVsZURlZl9U
eXBlIHdpbGwgYmUgZXhwb3NlZAo+Cj4gTmV3IHN0cnVjdHVyZXM6Cj4KPiAqIFB5TW9kdWxlRGVm
X1Nsb3QKPgo+IFB5TW9kdWxlRGVmLm1fcmVsb2FkIGNoYW5nZXMgdG8gUHlNb2R1bGVEZWYubV9z
bG90cy4KPgo+IFRoZSBpbnRlcm5hbCBgYF9pbXBgYCBtb2R1bGUgd2lsbCBoYXZlIGJhY2t3YXJk
cyBpbmNvbXBhdGlibGUgY2hhbmdlczoKPiBgYGNyZWF0ZV9idWlsdGluYGAsIGBgY3JlYXRlX2R5
bmFtaWNgYCwgYW5kIGBgZXhlY19keW5hbWljYGAgd2lsbCBiZSBhZGRlZDsKPiBgYGluaXRfYnVp
bHRpbmBgLCBgYGxvYWRfZHluYW1pY2BgIHdpbGwgYmUgcmVtb3ZlZC4KPgo+IFRoZSB1bmRvY3Vt
ZW50ZWQgZnVuY3Rpb25zIGBgaW1wLmxvYWRfZHluYW1pY2BgIGFuZCBgYGltcC5pbml0X2J1aWx0
aW5gYCB3aWxsCj4gYmUgcmVwbGFjZWQgYnkgYmFja3dhcmRzLWNvbXBhdGlibGUgc2hpbXMuCj4K
Pgo+IFBvc3NpYmxlIEZ1dHVyZSBFeHRlbnNpb25zCj4gPT09PT09PT09PT09PT09PT09PT09PT09
PT0KPgo+IFRoZSBzbG90cyBtZWNoYW5pc20sIGluc3BpcmVkIGJ5IFB5VHlwZV9TbG90IGZyb20g
UEVQIDM4NCwKPiBhbGxvd3MgbGF0ZXIgZXh0ZW5zaW9ucy4KPgo+IFNvbWUgZXh0ZW5zaW9uIG1v
ZHVsZXMgZXhwb3J0cyBtYW55IGNvbnN0YW50czsgZm9yIGV4YW1wbGUgX3NzbCBoYXMKPiBhIGxv
bmcgbGlzdCBvZiBjYWxscyBpbiB0aGUgZm9ybTo6Cj4KPiAgICAgUHlNb2R1bGVfQWRkSW50Q29u
c3RhbnQobSwgIlNTTF9FUlJPUl9aRVJPX1JFVFVSTiIsCj4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBZX1NTTF9FUlJPUl9aRVJPX1JFVFVSTik7Cj4KPiBDb252ZXJ0aW5nIHRoaXMgdG8g
YSBkZWNsYXJhdGl2ZSBsaXN0LCBzaW1pbGFyIHRvIFB5TWV0aG9kRGVmLAo+IHdvdWxkIHJlZHVj
ZSBib2lsZXJwbGF0ZSwgYW5kIHByb3ZpZGUgZnJlZSBlcnJvci1jaGVja2luZyB3aGljaAo+IGlz
IG9mdGVuIG1pc3NpbmcuCj4KPiBTdHJpbmcgY29uc3RhbnRzIGFuZCB0eXBlcyBjYW4gYmUgaGFu
ZGxlZCBzaW1pbGFybHkuCj4gKE5vdGUgdGhhdCBub24tZGVmYXVsdCBiYXNlcyBmb3IgdHlwZXMg
Y2Fubm90IGJlIHBvcnRhYmx5IHNwZWNpZmllZAo+IHN0YXRpY2FsbHk7IHRoaXMgY2FzZSB3b3Vs
ZCBuZWVkIGEgUHlfbW9kX2V4ZWMgZnVuY3Rpb24gdGhhdCBydW5zCj4gYmVmb3JlIHRoZSBzbG90
cyBhcmUgYWRkZWQuIFRoZSBmcmVlIGVycm9yLWNoZWNraW5nIHdvdWxkIHN0aWxsIGJlCj4gYmVu
ZWZpY2lhbCwgdGhvdWdoLikKPgo+IEFub3RoZXIgcG9zc2liaWxpdHkgaXMgcHJvdmlkaW5nIGEg
Im1haW4iIGZ1bmN0aW9uIHRoYXQgd291bGQgYmUgcnVuCj4gd2hlbiB0aGUgbW9kdWxlIGlzIGdp
dmVuIHRvIFB5dGhvbidzIC1tIHN3aXRjaC4KPiBGb3IgdGhpcyB0byB3b3JrLCB0aGUgcnVucHkg
bW9kdWxlIHdpbGwgbmVlZCB0byBiZSBtb2RpZmllZCB0byB0YWtlCj4gYWR2YW50YWdlIG9mIE1v
ZHVsZVNwZWMtYmFzZWQgbG9hZGluZyBpbnRyb2R1Y2VkIGluIFBFUCA0NTEuCj4gQWxzbywgaXQg
d2lsbCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbWVjaGFuaXNtIGZvciBzZXR0aW5nIHVwIGEgbW9k
dWxlCj4gYWNjb3JkaW5nIHRvIHNsb3RzIGl0IHdhc24ndCBvcmlnaW5hbGx5IGRlZmluZWQgd2l0
aC4KPgo+Cj4gSW1wbGVtZW50YXRpb24KPiA9PT09PT09PT09PT09PQo+Cj4gV29yay1pbi1wcm9n
cmVzcyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4gYSBHaXRodWIgcmVwb3NpdG9yeSBb
I2doLXJlcG9dXzsKPiBhIHBhdGNoc2V0IGlzIGF0IFsjZ2gtcGF0Y2hdXy4KPgo+Cj4gUHJldmlv
dXMgQXBwcm9hY2hlcwo+ID09PT09PT09PT09PT09PT09PT0KPgo+IFN0ZWZhbiBCZWhuZWwncyBp
bml0aWFsIHByb3RvLVBFUCBbI3N0ZWZhbnNfcHJvdG9wZXBdXwo+IGhhZCBhICJQeUluaXRfbW9k
dWxlbmFtZSIgaG9vayB0aGF0IHdvdWxkIGNyZWF0ZSBhIG1vZHVsZSBjbGFzcywKPiB3aG9zZSBg
YF9faW5pdF9fYGAgd291bGQgYmUgdGhlbiBjYWxsZWQgdG8gY3JlYXRlIHRoZSBtb2R1bGUuCj4g
VGhpcyBwcm9wb3NhbCBkaWQgbm90IGNvcnJlc3BvbmQgdG8gdGhlICh0aGVuIG5vbmV4aXN0ZW50
KSBQRVAgNDUxLAo+IHdoZXJlIG1vZHVsZSBjcmVhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gaXMg
YnJva2VuIGludG8gZGlzdGluY3Qgc3RlcHMuCj4gSXQgYWxzbyBkaWQgbm90IHN1cHBvcnQgbG9h
ZGluZyBhbiBleHRlbnNpb24gaW50byBwcmUtZXhpc3RpbmcgbW9kdWxlIG9iamVjdHMuCj4KPiBO
aWNrIENvZ2hsYW4gcHJvcG9zZWQgIkNyZWF0ZSIgYW5kICJFeGVjIiBob29rcywgYW5kIHdyb3Rl
IGEgcHJvdG90eXBlCj4gaW1wbGVtZW50YXRpb24gWyNuaWNrcy1wcm90b3R5cGVdXy4KPiBBdCB0
aGlzIHRpbWUgUEVQIDQ1MSB3YXMgc3RpbGwgbm90IGltcGxlbWVudGVkLCBzbyB0aGUgcHJvdG90
eXBlCj4gZG9lcyBub3QgdXNlIE1vZHVsZVNwZWMuCj4KPiBUaGUgb3JpZ2luYWwgdmVyc2lvbiBv
ZiB0aGlzIFBFUCB1c2VkIENyZWF0ZSBhbmQgRXhlYyBob29rcywgYW5kIGFsbG93ZWQKPiBsb2Fk
aW5nIGludG8gYXJiaXRyYXJ5IHByZS1jb25zdHJ1Y3RlZCBvYmplY3RzIHdpdGggRXhlYyBob29r
Lgo+IFRoZSBwcm9wb3NhbCBtYWRlIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY2xv
c2VyIHRvIGhvdyBQeXRob24gbW9kdWxlcwo+IGFyZSBpbml0aWFsaXplZCwgYnV0IGl0IHdhcyBs
YXRlciByZWNvZ25pemVkIHRoYXQgdGhpcyBpc24ndCBhbiBpbXBvcnRhbnQgZ29hbC4KPiBUaGUg
Y3VycmVudCBQRVAgZGVzY3JpYmVzIGEgc2ltcGxlciBzb2x1dGlvbi4KPgo+IEEgZnVydGhlciBp
dGVyYXRpb24gdXNlZCBhICJQeU1vZHVsZUV4cG9ydCIgaG9vayBhcyBhbiBhbHRlcm5hdGl2ZSB0
byBQeUluaXQsCj4gd2hlcmUgUHlJbml0IHdhcyB1c2VkIGZvciBleGlzdGluZyBzY2hlbWUsIGFu
ZCBQeU1vZHVsZUV4cG9ydCBmb3IgbXVsdGktcGhhc2UuCj4gSG93ZXZlciwgbm90IGJlaW5nIGFi
bGUgdG8gZGV0ZXJtaW5lIHRoZSBob29rIG5hbWUgYmFzZWQgb24gbW9kdWxlIG5hbWUKPiBjb21w
bGljYXRlZCBhdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBQeUltcG9ydF9Jbml0dGFiIGJ5IHRvb2xz
IGxpa2UgZnJlZXplLgo+IEtlZXBpbmcgb25seSB0aGUgUHlJbml0IGhvb2sgbmFtZSwgZXZlbiBp
ZiBpdCdzIG5vdCBlbnRpcmVseSBhcHByb3ByaWF0ZSBmb3IKPiBleHBvcnRpbmcgYSBkZWZpbml0
aW9uLCB5aWVsZGVkIGEgbXVjaCBzaW1wbGVyIHNvbHV0aW9uLgo+Cj4KPiBSZWZlcmVuY2VzCj4g
PT09PT09PT09PQo+Cj4gLi4gWyNwZXAtMDQ1MS1hdHRyaWJ1dGVzXQo+ICAgIGh0dHBzOi8vd3d3
LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NTEvI2F0dHJpYnV0ZXMKPgo+IC4uIFsjc3RlZmFu
c19wcm90b3BlcF0KPiAgICBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9u
LWRldi8yMDEzLUF1Z3VzdC8xMjgwODcuaHRtbAo+Cj4gLi4gWyNuaWNrcy1wcm90b3R5cGVdCj4g
ICAgaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1BdWd1
c3QvMTI4MTAxLmh0bWwKPgo+IC4uIFsjcmZjLTM0OTJdCj4gICAgaHR0cDovL3Rvb2xzLmlldGYu
b3JnL2h0bWwvcmZjMzQ5Mgo+Cj4gLi4gWyNnaC1yZXBvXQo+ICAgIGh0dHBzOi8vZ2l0aHViLmNv
bS9lbmN1a291L2NweXRob24vY29tbWl0cy9wZXA0ODkKPgo+IC4uIFsjZ2gtcGF0Y2hdCj4gICAg
aHR0cHM6Ly9naXRodWIuY29tL2VuY3Vrb3UvY3B5dGhvbi9jb21wYXJlL21hc3Rlci4uLmVuY3Vr
b3U6cGVwNDg5LnBhdGNoCj4KPiAuLiBbI2ZpbmRtb2R1bGUtZGlzY3Vzc2lvbl0KPiAgICBodHRw
czovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvaW1wb3J0LXNpZy8yMDE1LUFwcmlsLzAwMDk1
OS5odG1sCj4KPiAuLiBbI3BlcC0wNDUxLWxvYWRpbmddCj4gICAgaHR0cHM6Ly93d3cucHl0aG9u
Lm9yZy9kZXYvcGVwcy9wZXAtMDQ1MS8jaG93LWxvYWRpbmctd2lsbC13b3JrXQo+Cj4gLi4gWyNz
dWJpbnRlcnByZXRlci1kb2NzXQo+ICAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvYy1hcGkv
aW5pdC5odG1sI3N1Yi1pbnRlcnByZXRlci1zdXBwb3J0Cj4KPgo+IENvcHlyaWdodAo+ID09PT09
PT09PQo+Cj4gVGhpcyBkb2N1bWVudCBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21h
aW4uCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJ
bXBvcnQtU0lHIG1haWxpbmcgbGlzdAo+IEltcG9ydC1TSUdAcHl0aG9uLm9yZwo+IGh0dHBzOi8v
bWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vaW1wb3J0LXNpZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbXBvcnQtU0lHIG1haWxpbmcgbGlz
dApJbXBvcnQtU0lHQHB5dGhvbi5vcmcKaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9s
aXN0aW5mby9pbXBvcnQtc2lnCg==