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

Nick Coghlan <[email protected]> Tue, 19 May 2015 13:51:22 +1000
Newsgroups gmane.comp.python.import
Message-ID <CADiSq7cuoimcpRZfyTGaGOmapFDYvGbcB+sVyG1x7rPvFHNTfg@mail.gmail.com>
T24gMTkgTWF5IDIwMTUgYXQgMTA6MDcsIEVyaWMgU25vdyA8ZXJpY3Nub3djdXJyZW50bHlAZ21h
aWwuY29tPiB3cm90ZToKPiBPbiBNb24sIE1heSAxOCwgMjAxNSBhdCA4OjAyIEFNLCBQZXRyIFZp
a3RvcmluIDxlbmN1a291QGdtYWlsLmNvbT4gd3JvdGU6Cj4+IFtzbmlwXQo+Pgo+PiBGdXJ0aGVy
bW9yZSwgdGhlIG1ham9yaXR5IG9mIGN1cnJlbnRseSBleGlzdGluZyBleHRlbnNpb24gbW9kdWxl
cyBoYXMKPj4gcHJvYmxlbXMgd2l0aCBzdWItaW50ZXJwcmV0ZXIgc3VwcG9ydCBhbmQvb3IgaW50
ZXJwcmV0ZXIgcmVsb2FkaW5nLCBhbmQsCj4+IHdoaWxlCj4+IGl0IGlzIHBvc3NpYmxlIHdpdGgg
dGhlIGN1cnJlbnQgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCB0aGVzZQo+PiBmZWF0dXJlcywg
aXQgaXMgbmVpdGhlciBlYXN5IG5vciBlZmZpY2llbnQuCj4+IEFkZHJlc3NpbmcgdGhlc2UgaXNz
dWVzIHdhcyB0aGUgZ29hbCBvZiBQRVAgMzEyMSwgYnV0IG1hbnkgZXh0ZW5zaW9ucywKPj4gaW5j
bHVkaW5nIHNvbWUgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHRvb2sgdGhlIGxlYXN0LWVmZm9y
dCBhcHByb2FjaAo+PiB0byBwb3J0aW5nIHRvIFB5dGhvbiAzLCBsZWF2aW5nIHRoZXNlIGlzc3Vl
cyB1bnJlc29sdmVkLgo+PiBUaGlzIFBFUCBrZWVwcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwg
d2hpY2ggc2hvdWxkIHJlZHVjZSBwcmVzc3VyZSBhbmQKPj4gZ2l2ZQo+PiBleHRlbnNpb24gYXV0
aG9ycyBhZGVxdWF0ZSB0aW1lIHRvIGNvbnNpZGVyIHRoZXNlIGlzc3VlcyB3aGVuIHBvcnRpbmcu
Cj4KPiBTbyBqdXN0IGJlIHRvIHN1cmUgSSB1bmRlcnN0YW5kLCBub3cgUHlNb2R1bGVEZWYubV9z
bG90cyB3aWxsCj4gdW5hbWJpZ3VvdXNseSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhbiBleHRl
bnNpb24gbW9kdWxlIGlzCj4gY29tcGxpYW50LCByaWdodD8KCkknbSBub3Qgc3VyZSB3aGF0IHlv
dSBtZWFuIGJ5ICJjb21wbGlhbnQiLiBBIG5vbi1OVUxMIG1fc2xvdHMgd2lsbAppbmRpY2F0ZSB1
c2FnZSBvZiBtdWx0aS1waGFzZSBpbml0aWFsaXNhdGlvbiwgc28gaXQgYXQgbGVhc3QgaW5kaWNh
dGVzCippbnRlbnQqIHRvIGNvcnJlY3RseSBzdXBwb3J0IHN1YmludGVycHJldGVycyBldCBhbC4g
QWN0dWFsIGRlbGl2ZXJ5Cm9uIHRoYXQgcHJvbWlzZSBpcyBzdGlsbCBhIGRpZmZlcmVudCBxdWVz
dGlvbiA6KQoKPj4gW3NuaXBdCj4+Cj4+IFRoZSBwcm9wb3NhbAo+PiA9PT09PT09PT09PT0KPgo+
IFRoaXMgc2VjdGlvbiBzaG91bGQgaW5jbHVkZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgbG9h
ZGVyIChhbmQKPiBwZXJoYXBzIGZpbmRlcikgd2lsbCBjaGFuZ2UgZm9yIGJ1aWx0aW4sIGZyb3pl
biwgYW5kIGV4dGVuc2lvbgo+IG1vZHVsZXMuICBJdCBtYXkgaGVscCB0byBkZXNjcmliZSB0aGUg
cHJvcG9zYWwgdXAgZnJvbnQgYnkgaG93IHRoZQo+IGxvYWRlciBpbXBsZW1lbnRhdGlvbiB3b3Vs
ZCBsb29rIGlmIGl0IHdlcmUgc29tZWhvdyBpbXBsZW1lbnRlZCBpbgo+IFB5dGhvbiBjb2RlLiAg
VGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMgc29tZXRpbWVzIGluZGljYXRlIHdoZXJlCj4gZGlmZmVy
ZW50IHRoaW5ncyB0YWtlIHBsYWNlLCBidXQgYW4gZXhwbGljaXQgb3V0bGluZSAoYXMgUHl0aG9u
IGNvZGUpCj4gd291bGQgbWFrZSB0aGUgZW50aXJlIGZsb3cgcmVhbGx5IG9idmlvdXMuICBQdXR0
aW5nIHRoYXQgdG93YXJkIHRoZQo+IGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24gd291bGQgaGVs
cCBjbGVhcmx5IHNldCB0aGUgc3RhZ2UgZm9yIHRoZQo+IHJlc3Qgb2YgdGhlIHByb3Bvc2FsLgoK
KzEgZm9yIGEgcHNldWRvLWNvZGUgb3ZlcnZpZXcgb2YgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlv
bi4KCj4KPj4gW3NuaXBdCj4+IFVua25vd24gc2xvdCBJRHMgd2lsbCBjYXVzZSB0aGUgaW1wb3J0
IHRvIGZhaWwgd2l0aCBTeXN0ZW1FcnJvci4KPgo+IFdhcyB0aGVyZSBhbnkgY29uc2lkZXJhdGlv
biBtYWRlIGZvciBqdXN0IGlnbm9yaW5nIHVua25vd24gc2xvdCBJRHM/Cj4gTXkgZ3V0IHJlYWN0
aW9uIGlzIHRoYXQgeW91IGhhdmUgaXQgdGhlIHJpZ2h0IHdheSwgYnV0IEkgY2FuIHN0aWxsCj4g
aW1hZ2luZSB1c2UgY2FzZXMgZm9yIGN1c3RvbSBzbG90cyB0aGF0IFB5TW9kdWxlRGVmX0luaXQg
d291bGRuJ3Qga25vdwo+IGFib3V0LgoKVGhlICJrbm93biBzbG90cyBvbmx5LCBhbGwgb3RoZXIg
c2xvdCBJRHMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIgpzbG90IHNlbWFudGljcyB3ZXJl
IGNvcGllZCBkaXJlY3RseSBmcm9tIFB5VHlwZV9Gcm9tU3BlYyBpbiBQRVAgMzg0LgpTaW5jZSBp
dCdzIGp1c3QgYSBudW1lcmljIHNsb3QgSUQsIHlvdSdkIHJ1biBhIGhpZ2ggcmlzayBvZiBjb25m
bGljdHMKaWYgeW91IGFsbG93ZWQgZm9yIGN1c3RvbSBleHRlbnNpb25zLgoKSWYgZm9sa3Mgd2Fu
dCB0byBkbyBtb3JlIGNsZXZlciB0aGluZ3MsIHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0
ZQpvciBleGVjIHNsb3QgdG8gc3Rhc2ggdGhlbSBvbiB0aGUgbW9kdWxlIG9iamVjdCwgcmF0aGVy
IHRoYW4gc3RvcmluZwp0aGVtIGluIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KCj4+IFRoZSBQeU1v
ZHVsZURlZiBvYmplY3QgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUg
bW9kdWxlCj4+IGNyZWF0ZWQKPj4gZnJvbSBpdCDigJMgdXN1YWxseSwgaXQgd2lsbCBiZSBkZWNs
YXJlZCBzdGF0aWNhbGx5Lgo+Cj4gSG93IGVhc2lseSB3aWxsIHRoaXMgYmUgYSBzb3VyY2Ugb2Yg
bXlzdGVyaW91cyBlcnJvcnMtYXQtYS1kaXN0YW5jZT8KCkl0IHNob3VsZG4ndCBiZSBhbnkgd29y
c2UgdGhhbiBzdGF0aWMgdHlwZSBkZWZpbml0aW9ucywgYW5kIG5vcm1hbApyZWZlcmVuY2UgY291
bnRpbmcgc2VtYW50aWNzIHNob3VsZCBrZWVwIGl0IGFsaXZlIHJlZ2FyZGxlc3MuCgo+PiBbc25p
cF0KPj4gRXh0ZW5zaW9uIGF1dGhvcnMgYXJlIGFkdmlzZWQgdG8ga2VlcCBQeV9tb2RfY3JlYXRl
IG1pbmltYWwsIGFuIGluCj4+IHBhcnRpY3VsYXIKPj4gdG8gbm90IGNhbGwgdXNlciBjb2RlIGZy
b20gaXQuCj4KPiBUaGlzIGlzIGEgcHJldHR5IGltcG9ydGFudCBwb2ludCBhcyB3ZWxsLiAgV2Un
bGwgbmVlZCB0byBtYWtlIHN1cmUKPiB0aGlzIGlzIHN1ZmZpY2llbnRseSBjbGVhciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbi4gIFdvdWxkIGl0IG1ha2Ugc2Vuc2UKPiB0byBwcm92aWRlIGhlbHBlcnMg
Zm9yIGNvbW1vbiBjYXNlcywgdG8gZW5jb3VyYWdlIGV4dGVuc2lvbiBhdXRob3JzIHRvCj4ga2Vl
cCB0aGUgY3JlYXRlIGZ1bmN0aW9uIG1pbmltYWw/CgpUaGUgbWFpbiBlbmNvdXJhZ2VtZW50IGlz
IHRvIG5vdCBoYW5kY29kZSB5b3VyIGV4dGVuc2lvbiBtb2R1bGVzIGF0CmFsbCwgYW5kIGxldCBz
b21ldGhpbmcgbGlrZSBDeXRob24gb3IgU1dJRyB0YWtlIGNhcmUgb2YgdGhlCmJvaWxlcnBsYXRl
IDopCgo+PiBbc25pcF0KPj4KPj4gSWYgUHlNb2R1bGVFeGVjIHJlcGxhY2VzIHRoZSBtb2R1bGUn
cyBlbnRyeSBpbiBzeXMubW9kdWxlcywKPj4gdGhlIG5ldyBvYmplY3Qgd2lsbCBiZSB1c2VkIGFu
ZCByZXR1cm5lZCBieSBpbXBvcnRsaWIgbWFjaGluZXJ5Lgo+Cj4gSnVzdCB0byBiZSBzdXJlLCBz
b21ldGhpbmcgbGlrZSAibW9kID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0iIGlzIGRvbmUKPiBiZWZv
cmUgZWFjaCBleGVjdXRpb24gc2xvdC4gIEluIG90aGVyIHdvcmRzLCB0aGUgcmVzdWx0IG9mIHRo
ZQo+IHByZXZpb3VzIGV4ZWN1dGlvbiBzbG90IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBv
bmUuCgpUaGF0J3Mgbm90IHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhpcyBwYXJhZ3JhcGggLSBy
YXRoZXIsIGl0IGlzCnJlZmVycmluZyB0byB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyIG9mIHRoZSBp
bXBvcnQgbWFjaGluZXJ5LgoKSG93ZXZlciwgSSBhZ3JlZSB0aGF0IG5vdyB3ZSdyZSBhbGxvd2lu
ZyB0aGUgUHlfbW9kX2V4ZWMgc2xvdCB0byBiZQpzdXBwbGllZCBtdWx0aXBsZSB0aW1lcywgd2Ug
c2hvdWxkIGFsc28gYmUgdXBkYXRpbmcgdGhlIG1vZHVsZQpyZWZlcmVuY2UgYmV0d2VlbiBzbG90
IGludm9jYXRpb25zLgoKSSBhbHNvIHRoaW5rIHRoZSBQRVAgY291bGQgZG8gd2l0aCBhIGJyaWVm
IG1lbnRpb24gb2YgdGhlIGFkZGl0aW9uYWwKbW9kdWxhcml0eSB0aGlzIGFwcHJvYWNoIGJyaW5n
cyBhdCB0aGUgQyBsZXZlbCAtIHJhdGhlciB0aGFuIGhhdmluZyB0bwpqYW0gZXZlcnl0aGluZyBp
bnRvIG9uZSBmdW5jdGlvbiwgYW4gZXh0ZW5zaW9uIG1vZHVsZSBjYW4gZWFzaWx5IGJyZWFrCnVw
IGl0cyBpbml0aWFsaXNhdGlvbiBpbnRvIG11bHRpcGxlIHN0ZXBzLCBhbmQgaXRzIHRlY2huaWNh
bGx5IGV2ZW4KcG9zc2libGUgdG8gc2hhcmUgY29tbW9uIHN0ZXBzIGJldHdlZW4gZGlmZmVyZW50
IG1vZHVsZXMuCgo+PiAoVGhpcyBtaXJyb3JzIHRoZSBiZWhhdmlvciBvZiBQeXRob24gbW9kdWxl
cy4gTm90ZSB0aGF0IGltcGxlbWVudGluZwo+PiBQeV9tb2RfY3JlYXRlIGlzIHVzdWFsbHkgYSBi
ZXR0ZXIgc29sdXRpb24gZm9yIHRoZSB1c2UgY2FzZXMgdGhpcyBzZXJ2ZXMuKQo+Cj4gQ291bGQg
eW91IGVsYWJvcmF0ZT8gIFdoYXQgYXJlIHRob3NlIHVzZSBjYXNlcyBhbmQgd2h5IHdvdWxkCj4g
UHlfbW9kX2NyZWF0ZSBiZSBiZXR0ZXI/CgpSYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlIGltcGxp
Y2l0bHkgY3JlYXRlZCBub3JtYWwgbW9kdWxlIGR1cmluZwpQeV9tb2RfZXhlYyAod2hpY2ggaXMg
dGhlIG9ubHkgb3B0aW9uIGF2YWlsYWJsZSB0byBQeXRob24gbW9kdWxlcyksClBFUCA0ODkgbGV0
cyB5b3UgZGVmaW5lIHRoZSBQeV9tb2RfY3JlYXRlIHNsb3QgdG8gb3ZlcnJpZGUgdGhlIG1vZHVs
ZQpvYmplY3QgY3JlYXRpb24gZGlyZWN0bHkuCgpPdXRzaWRlIGNvbnZlcnNpb24gb2YgYSBQeXRo
b24gbW9kdWxlIHRoYXQgbWFuaXB1bGF0ZXMgc3lzLm1vZHVsZXMgdG8KYW4gZXh0ZW5zaW9uIG1v
ZHVsZSB3aXRoIEN5dGhvbiwgdGhlcmUncyBubyByZWFsIHJlYXNvbiB0byB1c2UgdGhlCiJyZXBs
YWNpbmcgeW91cnNlbGYgaW4gc3lzLm1vZHVsZXMiIG9wdGlvbiBvdmVyIHVzaW5nIFB5X21vZF9j
cmVhdGUKZGlyZWN0bHkuCgo+PiBbc25pcF0KPj4KPj4gTW9kdWxlcyB0aGF0IG5lZWQgdG8gd29y
ayB1bmNoYW5nZWQgb24gb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHNob3VsZCBub3QKPj4gdXNl
IG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uLCBiZWNhdXNlIHRoZSBiZW5lZml0cyBpdCBicmlu
Z3MgY2FuJ3QgYmUKPj4gYmFjay1wb3J0ZWQuCj4KPiBHaXZlbiB5b3VyIGV4YW1wbGUgYmVsb3cs
ICJzaG91bGQgbm90IiBzZWVtcyBhIGJpdCBzdHJvbmcgdG8gbWUuICBJbgo+IGZhY3QsIHdoYXQg
YXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBhcHByb2FjaCBmcm9tIHRoZQo+
IGV4YW1wbGU/CgpBZ3JlZWQsICJzaG91bGQgbm90IiBpcyBwcm9iYWJseSB0b28gc3Ryb25nIGhl
cmUuIE9uIHRoZSBvdGhlciBoYW5kLApwcmVzZXJ2aW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRl
ciBQeXRob24gdmVyc2lvbnMgaW4gYSBtb2R1bGUgdGhhdApoYXMgYmVlbiB1cGRhdGVkIHRvIHJl
bHkgb24gbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24gaXMgbGlrZWx5IHRvIGJlCmEgbWF0dGVy
IG9mICJncmFjZWZ1bCBkZWdyYWRhdGlvbiIsIHJhdGhlciB0aGFuIGJlaW5nIGFibGUgdG8KcmVw
cm9kdWNlIGNvbXBhcmFibGUgZnVuY3Rpb25hbGl0eSAod2hpY2ggSSBiZWxpZXZlIG1heSBoYXZl
IGJlZW4gdGhlCnBvaW50IFBldHIgd2FzIHRyeWluZyB0byBjb252ZXkpLgoKSSBleHBlY3QgQ3l0
aG9uIGFuZCBTV0lHIG1heSBiZSBhYmxlIHRvIG1hbmFnZSB0aGF0IHRocm91Z2gKYXBwcm9wcmlh
dGUgdXNlIG9mICNpZmRlZidzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IGRvaW5nIGl0IGJ5
CmhhbmQgaXMgbGlrZWx5IHRvIGJlIHBhaW5mdWwsIGhlbmNlIHRoZSBwb3RlbnRpYWwgYmVuZWZp
dHMgb2YganVzdApzdGlja2luZyB3aXRoIHNpbmdsZS1waGFzZSBpbml0aWFsaXNhdGlvbiBmb3Ig
dGhlIHRpbWUgYmVpbmcuCgo+PiBbc25pcF0KPj4KPj4gU3ViaW50ZXJwcmV0ZXJzIGFuZCBJbnRl
cnByZXRlciBSZWxvYWRpbmcKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KPj4KPj4gRXh0ZW5zaW9ucyB1c2luZyB0aGUgbmV3IGluaXRpYWxpemF0aW9uIHNjaGVt
ZSBhcmUgZXhwZWN0ZWQgdG8gc3VwcG9ydAo+PiBzdWJpbnRlcnByZXRlcnMgYW5kIG11bHRpcGxl
IFB5X0luaXRpYWxpemUvUHlfRmluYWxpemUgY3ljbGVzIGNvcnJlY3RseS4KPgo+IFByZXN1bWFi
bHkgdGhpcyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgZGVmaW5lZCBpbiB0
aGUKPiBzdWJzZXF1ZW50IHNlbnRlbmNlcy4gIElzIGl0IHJlYWxseSBqdXN0IGtlZXBpbmcgImhp
ZGRlbiIgbW9kdWxlIHN0YXRlCj4gZW5jYXBzdWxhdGVkIG9uIHRoZSBtb2R1bGUgb2JqZWN0PyAg
SWYgbm90IHRoZW4gaXQgbWF5IG1ha2Ugc2Vuc2UgdG8KPiBlbnVtZXJhdGUgdGhlIHJlcXVpcmVt
ZW50cyBiZXR0ZXIgZm9yIHRoZSBzYWtlIG9mIGV4dGVuc2lvbiBtb2R1bGUKPiBhdXRob3JzLgoK
SSdkIGFjdHVhbGx5IGxpa2UgdG8gaGF2ZSBhIGJldHRlciB3YXkgb2YgZG9pbmcgc2NlbmFyaW8g
dGVzdGluZyBmb3IKZXh0ZW5zaW9uIG1vZHVsZXMgKHN1YmludGVycHJldGVycywgbXVsdGlwbGUg
aW5pdGlhbGl6ZS9maW5hbGl6ZQpjeWNsZXMsIGZyZWV6aW5nKSwgYnV0IEknbSBub3Qgc3VyZSB0
aGlzIFBFUCBpcyB0aGUgYmVzdCBwbGFjZSB0bwpkZWZpbmUgdGhhdC4gUGVyaGFwcyB3ZSBjb3Vs
ZCBkbyBhIFB5UEkgcHJvamVjdCB0aGF0IHdhcyBhIHRveC1iYXNlZAp0ZXN0IGJhdHRlcnkgZm9y
IHRoaXMga2luZCBvZiB0aGluZz8KCj4+IFRoZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gbWFr
ZSB0aGlzIGVhc3ksIGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVkCj4+IG9uIHRoZSBwYXJ0IG9m
IHRoZSBleHRlbnNpb24gYXV0aG9yLgo+PiBObyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLCBtZXRo
b2RzLCBvciBpbnN0YW5jZXMgbWF5IGxlYWsgdG8gZGlmZmVyZW50Cj4+IGludGVycHJldGVycy4K
Pj4gVG8gYWNoaWV2ZSB0aGlzLCBhbGwgbW9kdWxlLWxldmVsIHN0YXRlIHNob3VsZCBiZSBrZXB0
IGluIGVpdGhlciB0aGUgbW9kdWxlCj4+IGRpY3QsIG9yIGluIHRoZSBtb2R1bGUgb2JqZWN0J3Mg
c3RvcmFnZSByZWFjaGFibGUgYnkgUHlNb2R1bGVfR2V0U3RhdGUuCj4KPiBJcyB0aGlzIHByb2dy
YW1tYXRpY2FsbHkgZW5mb3JjZWFibGU/ICBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvcgo+IGVh
c2lseSBjb3B5aW5nIG1vZHVsZSBzdGF0ZT8gIEhvdyBhYm91dCBzaGFyaW5nIHNvbWUgc3RhdGUg
YmV0d2Vlbgo+IHN1YmludGVycHJldGVycz8gIEhvdyBtdWNoIHJvb20gaXMgdGhlcmUgZm9yIGxl
dHRpbmcgZXh0ZW5zaW9uIG1vZHVsZQo+IGF1dGhvcnMgZGVmaW5lIGhvdyB0aGVpciBtb2R1bGUg
YmVoYXZlcyBhY3Jvc3MgbXVsdGlwbGUgaW50ZXJwcmV0ZXJzCj4gb3IgYWNyb3NzIG11bHRpcGxl
IEluaXRpYWxpemUvRmluYWxpemUgY3ljbGVzPwoKSXQncyBub3QgcHJvZ3JhbW1hdGljYWxseSBl
bmZvcmNhYmxlLCBoZW5jZSB0aGUgaWRlYSBhYm92ZSBvZiBmaW5kaW5nCmEgd2F5IHRvIG1ha2Ug
aXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gdGVzdCB0aGVpciBleHRlbnNpb24gbW9kdWxlcyBhcmUK
aW1wb3J0YWJsZSBhY3Jvc3MgbXVsdGlwbGUgUHl0aG9uIHZlcnNpb25zIGFuZCBkZXBsb3ltZW50
IHNjZW5hcmlvcy4KCj4+IEFzIGEgcnVsZSBvZiB0aHVtYiwgbW9kdWxlcyB0aGF0IHJlbHkgb24g
UHlTdGF0ZV9GaW5kTW9kdWxlIGFyZSwgYXQgdGhlCj4+IG1vbWVudCwKPj4gbm90IGdvb2QgY2Fu
ZGlkYXRlcyBmb3IgcG9ydGluZyB0byB0aGUgbmV3IG1lY2hhbmlzbS4KPgo+IEFyZSB0aGVyZSBh
bnkgcGxhbnMgZm9yIGEgZm9sbG93LXVwIGVmZm9ydCB0byBoZWxwIHdpdGggdGhpcyBjYXNlPwoK
VGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBQRVAgMzEyMSBtb2R1bGUgc3RhdGUgYXBwcm9h
Y2ggcHJvdmlkZXMKc3RvcmFnZSBvbiBhICpwZXItaW50ZXJwcmV0ZXIqIGJhc2lzLCB0aGF0IGlz
IHRoZW4gc2hhcmVkIGFtb25nc3QgYWxsCm1vZHVsZSBpbnN0YW5jZXMgY3JlYXRlZCBmcm9tIGEg
Z2l2ZW4gbW9kdWxlIGRlZmluaXRpb24uCgpUaGlzIG1lYW5zIHRoYXQgd2hlbiBfUHlJbXBvcnRf
RmluZEV4dGVuc2lvbk9iamVjdCAoc2VlCmh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2Zp
bGUvZmMyZWVkOWZjMmQwL1B5dGhvbi9pbXBvcnQuYyNsNTE4KQpyZWluaXRpYWxpc2VzIGFuIGV4
dGVuc2lvbiBtb2R1bGUsIHRoZSBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvCmluc3Rh
bmNlcy4gV2hlbiBQRVAgMzEyMSB3YXMgd3JpdHRlbiwgdGhpcyB3YXMgbm90IHNlZW4gYXMgYSBw
cm9ibGVtLApzaW5jZSB0aGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgdGhlIGJlaGF2aW91ciB3b3Vs
ZCBvbmx5IGJlIHRyaWdnZXJlZApieSBtdWx0aXBsZSBpbnRlcnByZXRlciBsZXZlbCBpbml0aWFs
aXplL2ZpbmFsaXplIGN5Y2xlcy4KCk9uZSBrZXkgc2NlbmFyaW8gd2UgbWlzc2VkIGF0IHRoZSB0
aW1lIHdhcyAiZGVsZXRpbmcgYW4gZXh0ZW5zaW9uCm1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIGFu
ZCBpbXBvcnRpbmcgaXQgYSBzZWNvbmQgdGltZSwgd2hpbGUKcmV0YWluaW5nIGEgbG9jYWwgcmVm
ZXJlbmNlIGZvciBsYXRlciByZXN0b3JhdGlvbiIuIFVuZGVyIFBFUCAzMTIxLAp0aGUgdHdvIGlu
c3RhbmNlcyBjb2xsaWRlIG9uIHRoZWlyIHN0YXRlIHN0b3JhZ2UsIGFzIHdlIGhhdmUgdHdvCnNp
bXVsdGFuZW91c2x5IGV4aXN0aW5nIG1vZHVsZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIHNhbWUg
aW50ZXJwcmV0ZXIKZnJvbSB0aGUgc2FtZSBtb2R1bGUgZGVmaW5pdGlvbi4gUEVQIDQ4OSB3b3Vs
ZCBpbmhlcml0IHRoYXQgc2FtZQpwcm9ibGVtIGlmIHlvdSB0cmllZCB0byB1c2UgaXQgd2l0aCB0
aGUgUHlTdGF0ZV8qIEFQSXMsIHNvIGl0IHNpbXBseQpkb2Vzbid0IGFsbG93IHRoZW0gYXQgYWxs
LiAoRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgUEVQIGFsbG93ZWQgaXQKd2l0aCBhbiAiRVhQT1JU
X1NJTkdMRVRPTiIgc2xvdCB0aGF0IHdvdWxkIGRpc2FsbG93IHJlaW1wb3J0aW5nCmVudGlyZWx5
LCB3aGljaCB3ZSB0b29rIG91dCBpbiBmYXZvdXIgb2YgImp1c3Qga2VlcCB1c2luZyB0aGUgZXhp
c3RpbmcKaW5pdGlhbGlzYXRpb24gbW9kZWwgaW4gdGhvc2UgY2FzZXMgZm9yIHRoZSB0aW1lIGJl
aW5nIikKCkZvciBwdXJlIFB5dGhvbiBjb2RlLCB3ZSBkb24ndCBoYXZlIHRoaXMgcHJvYmxlbSwg
c2luY2UgdGhlCmludGVycHJldGVyIHRha2VzIGNhcmUgb2YgcHJvdmlkaW5nIGEgcHJvcGVybHkg
c2NvcGVkIGdsb2JhbHMoKQpyZWZlcmVuY2UgdG8gKmFsbCogZnVuY3Rpb25zIGRlZmluZWQgaW4g
dGhhdCBtb2R1bGUsIHJlZ2FyZGxlc3Mgb2YKd2hldGhlciB0aGV5J3JlIG1vZHVsZSBsZXZlbCBm
dW5jdGlvbnMgb3IgbWV0aG9kIGRlZmluaXRpb25zIG9uIGEKY2xhc3MuIEF0IHRoZSBDIGxldmVs
LCB3ZSBkb24ndCBoYXZlIHRoYXQsIGFzIG9ubHkgbW9kdWxlIGxldmVsCmZ1bmN0aW9ucyBnZXQg
YSBtb2R1bGUgcmVmZXJlbmNlIHBhc3NlZCBpbiAtIG1ldGhvZHMgb25seSBnZXQgYQpyZWZlcmVu
Y2UgdG8gdGhlaXIgY2xhc3MgaW5zdGFuY2UsIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gdGhlIG1v
ZHVsZQpnbG9iYWxzLCBhbmQgZGVsYXllZCBjYWxsYmFja3MgY2FuIGJlIGEgcHJvYmxlbSBhcyB3
ZWxsLgoKVGhlIGJlc3QgaW1wcm92ZWQgQVBJIHdlIGNvdWxkIGxpa2VseSBvZmZlciBhdCB0aGlz
IHBvaW50IGlzIGEKY29udmVuaWVuY2UgQVBJIGZvciBsb29raW5nIHVwIGEgbW9kdWxlIGluICpz
eXMubW9kdWxlcyogYmFzZWQgb24gYQpQeU1vZHVsZURlZiBpbnN0YW5jZSwgYW5kIHVwZGF0aW5n
IFBFUCA0ODkgdG8gd3JpdGUgdGhlIGFzLWltcG9ydGVkCm1vZHVsZSBuYW1lIGludG8gdGhlIHJl
dHVybmVkIFB5TW9kdWxlRGVmIHN0cnVjdHVyZS4gVGhhdCdzIHByb2JhYmx5Cm5vdCBhIGJhZCB3
YXkgdG8gZ28sIGdpdmVuIHRoYXQgUEVQIDQ4OSBjdXJyZW50bHkgKmlnbm9yZXMqIHRoZSBtX25h
bWUKc2xvdCAtIGZsaXBwaW5nIGl0IGFyb3VuZCB0byBiZSBhICp3cml0YWJsZSogc2xvdCB3b3Vs
ZCBiZSBhIHdheSB0bwpsZXQgZXh0ZW5zaW9uIG1vZHVsZXMga25vdyBkeW5hbWljYWxseSBob3cg
dG8gbG9vayB0aGVtc2VsdmVzIHVwIGluCnN5cy5tb2R1bGVzLgoKVGhlIG5ldyBsb29rdXAgQVBJ
IHdvdWxkIHRoZW4gYmUgdGhlIG1vcmFsIGVxdWl2YWxlbnQgb2YgUHl0aG9uIGNvZGUKZG9pbmcg
Im1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXSIuIFdpdGggdGhpcyBhcHByb2FjaCwgYWN0aXZl
bHkKKnVzaW5nKiBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgZ2l2ZW4gbW9kdWxlIGF0IHRoZSBz
YW1lIHRpbWUgd291bGQKc3RpbGwgYnJlYWsgKHNpbmNlIHlvdSdsbCBhbHdheXMgZ2V0IHRoZSBt
b2R1bGUgY3VycmVudGx5IGluCnN5cy5tb2R1bGVzLCBldmVuIGlmIHRoYXQgaXNuJ3QgdGhlIG9u
ZSB5b3UgZXhwZWN0ZWQpLCBidXQgdGhlCiJzYXZlLWFuZC1yZXN0b3JlIiBtb2RlbCBuZWVkZWQg
Zm9yIGNlcnRhaW4ga2luZHMgb2YgdGVzdGluZyBhbmQKcG90ZW50aWFsbHkgb3RoZXIgc2NlbmFy
aW9zIHdvdWxkIHdvcmsgY29ycmVjdGx5LgoKPj4gTW9kdWxlIFJlbG9hZGluZwo+PiAtLS0tLS0t
LS0tLS0tLS0tCj4+Cj4+IFJlbG9hZGluZyBhbiBleHRlbnNpb24gbW9kdWxlIHVzaW5nIGltcG9y
dGxpYi5yZWxvYWQoKSB3aWxsIGNvbnRpbnVlIHRvCj4+IGhhdmUgbm8gZWZmZWN0LCBleGNlcHQg
cmUtc2V0dGluZyBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzLgo+Pgo+PiBEdWUgdG8gbGltaXRh
dGlvbnMgaW4gc2hhcmVkIGxpYnJhcnkgbG9hZGluZyAoYm90aCBkbG9wZW4gb24gUE9TSVggYW5k
Cj4+IExvYWRNb2R1bGVFeCBvbiBXaW5kb3dzKSwgaXQgaXMgbm90IGdlbmVyYWxseSBwb3NzaWJs
ZSB0byBsb2FkCj4+IGEgbW9kaWZpZWQgbGlicmFyeSBhZnRlciBpdCBoYXMgY2hhbmdlZCBvbiBk
aXNrLgo+Pgo+PiBVc2UgY2FzZXMgZm9yIHJlbG9hZGluZyBvdGhlciB0aGFuIHRyeWluZyBvdXQg
YSBuZXcgdmVyc2lvbiBvZiB0aGUgbW9kdWxlCj4+IGFyZSB0b28gcmFyZSB0byByZXF1aXJlIGFs
bCBtb2R1bGUgYXV0aG9ycyB0byBrZWVwIHJlbG9hZGluZyBpbiBtaW5kLgo+PiBJZiByZWxvYWQt
bGlrZSBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCwgYXV0aG9ycyBjYW4gZXhwb3J0IGEgZGVkaWNh
dGVkCj4+IGZ1bmN0aW9uIGZvciBpdC4KPgo+IEtlZXAgaW4gbWluZCB0aGUgc2VtYW50aWNzIG9m
IHJlbG9hZCBmb3IgcHVyZSBQeXRob24gbW9kdWxlcy4gIFRoZQo+IG1vZHVsZSBpcyBleGVjdXRl
ZCBpbnRvIHRoZSBleGlzdGluZyBuYW1lc3BhY2UsIG92ZXJ3cml0aW5nIHRoZSBsb2FkZWQKPiBu
YW1lc3BhY2UgYnV0IGxlYXZpbmcgbm9uLWNvbGxpZGluZyBhdHRyaWJ1dGVzIGFsb25lLiAgV2hp
bGUgdGhlCj4gc2VtYW50aWNzIGZvciByZWxvYWRpbmcgYW4gZXh0ZW5zaW9uL2J1aWx0aW4vZnJv
emVuIG1vZHVsZSBhcmUKPiBjdXJyZW50bHkgYmFzaWMgKGkuZS4gYSBuby1vcCksIHRoZXJlIG1h
eSB3ZWxsIGJlIHJvb20gdG8gc3VwcG9ydAo+IHJlbG9hZCBiZWhhdmlvciB0aGF0IG1pcnJvcnMg
dGhhdCBvZiBwdXJlIFB5dGhvbiBtb2R1bGVzIHdpdGhvdXQKPiBuZWVkaW5nIHRvIHJlbG9hZCBh
biBTTyBmaWxlLiAgSSB3b3VsZCBleHBlY3QgZWl0aGVyIHRoZSBiZWhhdmlvciBvZgo+IGV4ZWMg
dG8gZ2V0IHJlcGVhdGVkICh0cmlja3kgZHVlIHRvICJoaWRkZW4iIG1vZHVsZSBzdGF0ZT8pIG9y
IGZvcgo+IHRoZXJlIHRvIGJlIGEgInJlbG9hZCIgc2xvdCB0aGF0IHdvdWxkIG1pcnJvciBQeV9t
b2RfZXhlYy4KCldlIGNvbnNpZGVyZWQgdGhpcywgYW5kIGRlY2lkZWQgaXQgd2FzIGZhaXJseSBw
b2ludGxlc3MsIHNpbmNlIHlvdQpjYW4ndCBtb2RpZnkgdGhlIGV4dGVuc2lvbiBtb2R1bGUgY29k
ZS4gVGhlIG9uZSBjYXNlIEkgc2VlIHdoZXJlIGl0CnBvdGVudGlhbGx5IG1ha2VzIHNlbnNlIGlz
IGEgInRyYW5zaXRpdmUgcmVsb2FkIiwgd2hlcmUgdGhlIGV4dGVuc2lvbgptb2R1bGUgcmV0cmll
dmVzIGFuZCBjYWNoZXMgYXR0cmlidXRlcyBmcm9tIGFub3RoZXIgcHVyZSBQeXRob24gbW9kdWxl
CmF0IGltcG9ydCB0aW1lLCBhbmQgdGhhdCBleHRlbnNpb24gbW9kdWxlIGhhcyBiZWVuIHJlbG9h
ZGVkLgoKSXQgbWF5IGFsc28gbWFrZSBhIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgdXRp
bGl0aWVzIGxpa2UKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0
ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSwKd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGUg
aW1wb3J0IHN5c3RlbSBzdGF0ZSB0byBjb250cm9sIGhvdyBjb25kaXRpb25hbAppbXBvcnRzIGFy
ZSBoYW5kbGVkLgoKPiBBdCB0aGUgc2FtZSB0aW1lLCBvbmUgbWF5IGFyZ3VlIHRoYXQgcmVsb2Fk
aW5nIG1vZHVsZXMgaXMgbm90Cj4gc29tZXRoaW5nIHRvIGVuY291cmFnZS4gOikKClRoZXJlJ3Mg
YSByZWFzb24gaW1wb3J0X2ZyZXNoX21vZHVsZSBoYXMgbmV2ZXIgbWFkZSBpdCBvdXQgb2YgdGVz
dC5zdXBwb3J0IDopCgo+PiBNdWx0aXBsZSBtb2R1bGVzIGluIG9uZSBsaWJyYXJ5Cj4+IC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4gVG8gc3VwcG9ydCBtdWx0aXBsZSBQeXRo
b24gbW9kdWxlcyBpbiBvbmUgc2hhcmVkIGxpYnJhcnksIHRoZSBsaWJyYXJ5IGNhbgo+PiBleHBv
cnQgYWRkaXRpb25hbCBQeUluaXQqIHN5bWJvbHMgYmVzaWRlcyB0aGUgb25lIHRoYXQgY29ycmVz
cG9uZHMKPj4gdG8gdGhlIGxpYnJhcnkncyBmaWxlbmFtZS4KPj4KPj4gTm90ZSB0aGF0IHRoaXMg
bWVjaGFuaXNtIGNhbiBjdXJyZW50bHkgb25seSBiZSB1c2VkIHRvICpsb2FkKiBleHRyYSBtb2R1
bGVzLAo+PiBidXQgbm90IHRvICpmaW5kKiB0aGVtLgo+Cj4gV2hhdCBkbyB5b3UgbWVhbiBieSAi
Y3VycmVudGx5Ij8KCkl0J3MgYSBsaW1pdGF0aW9uIG9mIHRoZSB3YXkgdGhlIGV4aXN0aW5nIGZp
bmRlcnMgd29yaywgcmF0aGVyIHRoYW4gYW4KaW5oZXJlbnQgbGltaXRhdGlvbiBvZiB0aGUgaW1w
b3J0IHN5c3RlbSBhcyBhIHdob2xlLgoKPiBJdCBtYXkgYWxzbyBiZSB3b3J0aCB0eWluZyB0aGUg
YWJvdmUgc3RhdGVtZW50IHdpdGggdGhlIGZvbGxvd2luZwo+IHRleHQsIHNpbmNlIHRoZSBmb2xs
b3dpbmcgYXBwZWFycyB0byBiZSBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8KPiBhZGRyZXNzIHRo
ZSAiZmluZGVyIiBjYXZlYXQuCgpBZ3JlZWQgdGhhdCB0aGlzIGNvdWxkIGJlIGNsZWFyZXIuCgo+
PiBUZXN0aW5nIGFuZCBpbml0aWFsIGltcGxlbWVudGF0aW9ucwo+PiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQo+Pgo+PiBGb3IgdGVzdGluZywgYSBuZXcgYnVpbHQtaW4gbW9k
dWxlIGBgX3Rlc3RtdWx0aXBoYXNlYGAgd2lsbCBiZSBjcmVhdGVkLgo+PiBUaGUgbGlicmFyeSB3
aWxsIGV4cG9ydCBzZXZlcmFsIGFkZGl0aW9uYWwgbW9kdWxlcyB1c2luZyB0aGUgbWVjaGFuaXNt
Cj4+IGRlc2NyaWJlZCBpbiAiTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeSIuCj4+Cj4+
IFRoZSBgYF90ZXN0Y2FwaWBgIG1vZHVsZSB3aWxsIGJlIHVuY2hhbmdlZCwgYW5kIHdpbGwgdXNl
IHNpbmdsZS1waGFzZQo+PiBpbml0aWFsaXphdGlvbiBpbmRlZmluaXRlbHkgKG9yIHVudGlsIGl0
IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpLgo+Pgo+PiBUaGUgYGBhcnJheWBgIGFuZCBgYHh4KmBg
IG1vZHVsZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXNlIG11bHRpLXBoYXNlCj4+IGluaXRpYWxp
emF0aW9uIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCj4KPiBXaGF0IGRv
IHlvdSBtZWFuIGJ5ICJpbml0aWFsIGltcGxlbWVudGF0aW9uIj8gIFdpbGwgaXQgYmUgZG9uZQo+
IGRpZmZlcmVudGx5IGluIGEgbGF0ZXIgaW1wbGVtZW50YXRpb24/CgpUaGVzZSBtb2R1bGVzIHdp
bGwgYmUgY29udmVydGVkIGluIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIG90aGVyCm1v
ZHVsZXMgd29uJ3QgYmUuCgo+PiBTdHJpbmcgY29uc3RhbnRzIGFuZCB0eXBlcyBjYW4gYmUgaGFu
ZGxlZCBzaW1pbGFybHkuCj4+IChOb3RlIHRoYXQgbm9uLWRlZmF1bHQgYmFzZXMgZm9yIHR5cGVz
IGNhbm5vdCBiZSBwb3J0YWJseSBzcGVjaWZpZWQKPj4gc3RhdGljYWxseTsgdGhpcyBjYXNlIHdv
dWxkIG5lZWQgYSBQeV9tb2RfZXhlYyBmdW5jdGlvbiB0aGF0IHJ1bnMKPj4gYmVmb3JlIHRoZSBz
bG90cyBhcmUgYWRkZWQuIFRoZSBmcmVlIGVycm9yLWNoZWNraW5nIHdvdWxkIHN0aWxsIGJlCj4+
IGJlbmVmaWNpYWwsIHRob3VnaC4pCj4KPiBUaGlzIGltcGxpZXMgdG8gbWUgdGhhdCBub3cgaXMg
dGhlIHRpbWUgdG8gZW5zdXJlIHRoYXQgdGhpcyBQRVAKPiBhcHByb3ByaWF0ZWx5IGFjY29tbW9k
YXRlcyB0aGF0IG5lZWQuICBJdCB3b3VsZCBiZSB1bmZvcnR1bmF0ZSBpZiB3ZQo+IGhhZCB0byBs
YXRlciBoYWNrIGluIHNvbWUgZXh0cmEgQVBJIHRvIGFjY29tbW9kYXRlIGEgdXNlIGNhc2Ugd2UK
PiBhbHJlYWR5IGtub3cgYWJvdXQuICBCZXR0ZXIgaWYgd2UgbWFkZSBzdXJlIHRoZSBjdXJyZW50
bHkgcHJvcG9zZWQKPiBjaGFuZ2VzIGNvdWxkIGFjY29tbW9kYXRlIHRoZSBuZWVkLCBldmVuIGlm
IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0Cj4gcGFydCB3ZXJlIG5vdCBwYXJ0IG9mIHRoaXMg
UEVQLgoKVGhpcyB3b3VsZCBiZSBhIG5ldyBraW5kIG9mIGV4ZWN1dGlvbiBzbG90LCBzbyB0aGUg
UEVQIGFscmVhZHkKYWNjb21tb2RhdGVzIHRoZXNlIHBvc3NpYmxlIGZ1dHVyZSBleHRlbnNpb25z
LgoKPj4gQW5vdGhlciBwb3NzaWJpbGl0eSBpcyBwcm92aWRpbmcgYSAibWFpbiIgZnVuY3Rpb24g
dGhhdCB3b3VsZCBiZSBydW4KPj4gd2hlbiB0aGUgbW9kdWxlIGlzIGdpdmVuIHRvIFB5dGhvbidz
IC1tIHN3aXRjaC4KPj4gRm9yIHRoaXMgdG8gd29yaywgdGhlIHJ1bnB5IG1vZHVsZSB3aWxsIG5l
ZWQgdG8gYmUgbW9kaWZpZWQgdG8gdGFrZQo+PiBhZHZhbnRhZ2Ugb2YgTW9kdWxlU3BlYy1iYXNl
ZCBsb2FkaW5nIGludHJvZHVjZWQgaW4gUEVQIDQ1MS4KPgo+IEknbGwgcG9pbnQgb3V0IHRoYXQg
dGhlIHB1cmUtUHl0aG9uIGVxdWl2YWxlbnQgaGFzIGJlZW4gcHJvcG9zZWQgb24gYQo+IG51bWJl
ciBvZiBvY2Nhc2lvbnMgYW5kIGJlZW4gcmVqZWN0ZWQgZXZlcnkgdGltZS4gIEhvd2V2ZXIsIGlu
IHRoZQo+IGNhc2Ugb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXQgaXMgbW9yZSBqdXN0aWZpYWJsZS4g
IElmIGV4dGVuc2lvbgo+IG1vZHVsZXMgZ2FpbiBzdWNoIGEgbWVjaGFuaXNtIHRoZW4gaXQgbWF5
IGJlIGEganVzdGlmaWNhdGlvbiBmb3IgZG9pbmcKPiBzb21ldGhpbmcgc2ltaWxhciBpbiBQeXRo
b24uCj4KPj4gQWxzbywgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbWVjaGFuaXNtIGZv
ciBzZXR0aW5nIHVwIGEgbW9kdWxlCj4+IGFjY29yZGluZyB0byBzbG90cyBpdCB3YXNuJ3Qgb3Jp
Z2luYWxseSBkZWZpbmVkIHdpdGguCj4KPiBXaGF0IGRvZXMgdGhpcyBtZWFuPwoKV2hlbiB5b3Ug
dXNlIHRoZSAtbSBzd2l0Y2gsIHlvdSBhbHdheXMgcnVuIGluIHRoZSBidWlsdGluIF9fbWFpbl9f
Cm1vZHVsZSBuYW1lc3BhY2UsIGFuZCBydW5weSBmaWRkbGVzIHdpdGggX19tYWluX18uX19zcGVj
X18gdG8gbWF0Y2gKdGhlIGRldGFpbHMgb2YgdGhlIG1vZHVsZSBwYXNzZWQgdG8gdGhlIHN3aXRj
aC4gVGhhdCdzIG5vdCBjdXJyZW50bHkgYQp0cmljayB3ZSBjYW4gbWFuYWdlIHdoZW4gdGhlICJ0
aGluZyB0byBydW4iIGlzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCgpDaGVlcnMsCk5pY2suCgotLSAK
TmljayBDb2dobGFuICAgfCAgIG5jb2dobGFuQGdtYWlsLmNvbSAgIHwgICBCcmlzYmFuZSwgQXVz
dHJhbGlhCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklt
cG9ydC1TSUcgbWFpbGluZyBsaXN0CkltcG9ydC1TSUdAcHl0aG9uLm9yZwpodHRwczovL21haWwu
cHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ltcG9ydC1zaWcK