[PATCH 01 of 54] Initial Release

Wald Commits scm-commit at wald.intevation.org
Wed Jan 7 10:56:18 CET 2015


IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEJlbm89QzM9QUV0IEFsbGFyZCA8YmVub2l0LmFs
bGFyZEBncmVlbmJvbmUubmV0PgojIERhdGUgMTQxMTQ3ODM1NCAtNzIwMAojIE5vZGUgSUQgZTE4
YjYxYTczYTY4ZTE3Yjk5YzVkYjYwNGYxMzNlZWQ0ZTIwYWEyZgojIFBhcmVudCAgMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApJbml0aWFsIFJlbGVhc2UKCmRpZmYgLXIg
MDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBDSEFOR0VTCi0tLSAvZGV2L251bGwJVGh1IEph
biAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL0NIQU5HRVMJVHVlIFNlcCAyMyAxNToxOTox
NCAyMDE0ICswMjAwCkBAIC0wLDAgKzEsMTQgQEAKK0Zhcm9sTHV6IDAuMSAoMjAxNC0wOS0yMykK
Kz0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0KPTNECisKK1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgRmFy
b2xMdXouIEZhcm9sTHV6IGlzIGEgc2V0IG9mIGxpYnJhcnkgLwordXRpbGl0aWVzIHRvIG1hbmlw
dWxhdGUgU2VjdXJpdHkgQWR2aXNvcmllcy4gSXQgaXMgcGFydCBvZiBGYXJvbCwgYSBTZWN1cmk9
CnR5CitBZHZpc29yeSBNYW5hZ2VtZW50IFBsYXRmb3JtLgorCitJdCBoYXMgdGhlIGZvbGxvd2lu
ZyBmZWF0dXJlczoKKworLSBQYXJzaW5nIG9mIENWUkYgRG9jdW1lbnRzCistIEdlbmVyYXRpb24g
b2YgQ1ZSRiBEb2N1bWVudHMKKy0gR2VuZXJhdGlvbiBvZiBSZWRIYXQgTFNDIGFzIE5BU0wgc2Ny
aXB0cworLSBWYXJpb3VzIHV0aWxpdHkgbWV0aG9kcyBvbiB0aGUgQ1ZSRiBvYmplY3RzCistIEV4
cGVyaW1lbnRhbCBHZW5lcmF0aW9uIG9mIFJlZEhhdCBMU0MgYXMgT1ZBTCBzY3JpcHRzCmRpZmYg
LXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBMSUNFTlNFCi0tLSAvZGV2L251bGwJVGh1
IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL0xJQ0VOU0UJVHVlIFNlcCAyMyAxNTox
OToxNCAyMDE0ICswMjAwCkBAIC0wLDAgKzEsMzM5IEBACisgICAgICAgICAgICAgICAgICAgIEdO
VSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24g
MiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQg
ZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1
dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNp
Z25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAg
QnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQg
dG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3
YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMu
ICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJl
ZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3Jh
bSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lv
dXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdl
IGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBm
cmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2Ug
Zm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBj
b2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRo
ZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5k
IHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5
b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55
b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0
aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3Bv
bnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0
d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3Ry
aWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEg
ZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lv
dSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNh
biBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVy
bXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0
cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9m
ZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8g
Y29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywg
Zm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNl
cnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50
eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBi
eSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8g
a25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFu
eSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBv
cmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJv
Z3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3
aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3By
b2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0
IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhh
dmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2
ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lz
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9k
aWZpY2F0aW9uIGZvbGxvdy4KKworICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJM
SUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJV
VElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55
IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5
IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVy
IHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0i
LCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3Jr
IGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBk
ZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdv
cmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVy
YmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhl
cgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhv
dXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNl
ZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5n
LCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMg
TGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5n
IHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQ
cm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3Jr
IGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBi
eSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24g
d2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0
ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJl
Y2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5
IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitj
b3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBh
bGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJz
ZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0
aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFt
LgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2Zl
cnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkg
cHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkg
eW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQs
IHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAor
ZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2Yg
U2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVz
ZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVz
IHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2Vk
IHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0
IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgor
ICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9n
cmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBh
dCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2Yg
dGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkg
cmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVz
ZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2Ug
aW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5u
b3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBh
CisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0
aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlz
dHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxs
aW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChF
eGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBk
b2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJh
c2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91
bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29y
ayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJl
IG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29u
c2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRo
ZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3Nl
Y3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3
aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUg
d2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBv
ZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2Ug
cGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hv
bGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3Jv
dGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBj
bGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGly
ZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQg
dG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUg
d29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0
aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFBy
b2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBv
ZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90
aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1h
eSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQs
Cit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRl
ciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3Ug
YWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRo
IHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2Ug
Y29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlv
bnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNv
ZnR3YXJlIGludGVyY2hhbmdlOyBvPQpyLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3
cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2
ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNv
c3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxl
dGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNl
IGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25z
IDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0
d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5m
b3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUg
Y29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxs
b3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UK
KyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZv
cm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBh
Ym92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQg
Zm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFu
IGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291
cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRl
ZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitj
b250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBI
b3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1
dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0
ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21w
b25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5
c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQK
K2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9m
IGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRv
IGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAor
YWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRz
IGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBw
YXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0
aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNl
bnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3Zp
ZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwg
bW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFu
ZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGlj
ZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdo
dHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNl
bnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBj
b21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExp
Y2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBl
bHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFBy
b2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGli
aXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3Jl
LCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsg
YmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0
aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBm
b3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29y
a3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFBy
b2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQg
YXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vu
c29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8K
K3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0
aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdo
dHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5n
IGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElm
LCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBw
YXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQg
dG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhl
ciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGlj
dCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91
IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlz
dHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMg
dW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywg
dGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFt
IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVy
bWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRo
b3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91
LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBM
aWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9m
IHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBp
bnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5j
ZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0
aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJj
dW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGlu
ZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0
IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMg
c2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5
IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBs
ZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1h
ZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUg
ZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVu
dCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9u
b3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3
YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9z
ZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91
Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSBy
ZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1
c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0
aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5h
bCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNl
bnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRh
dGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMg
cGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4g
IEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24g
YXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVy
c2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAg
U3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNl
bnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9i
bGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hp
bmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBu
dW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVy
IHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5k
IGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNp
b24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFBy
b2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2Us
IHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YT0KcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRl
IHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlz
dHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgor
dG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVk
IGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4g
IE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2
aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdh
cmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdl
bmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAg
MTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJF
IElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVE
IEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJ
VElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUg
VEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIg
RVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkg
QU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQor
UFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VT
U0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZF
TlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklU
SU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1B
WSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFC
T1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFM
LCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitP
VVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJ
TkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9S
IEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9H
UkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgICAgICAgICAgICAg
ICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBB
cHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9w
IGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bv
c3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlz
IHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0
ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhl
IGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRh
Y2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2
ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91
bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3
aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0
aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAg
IENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1h
dGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4K
KworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQg
bm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToK
KworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9m
IGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5U
WTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyA9CncnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2Fy
ZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0
YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhl
dGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHBy
b3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2Us
IHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFu
IGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mg
b3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxk
IGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Ig
eW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZv
ciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRo
ZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJp
Z2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2Vz
IHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWdu
YXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2Yg
VmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29y
cG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91
ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBt
b3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0
aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUg
R05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5z
ZS4KZGlmZiAtciAwMDAwMDAwMDAwMDAgLXIgZTE4YjYxYTczYTY4IE1BTklGRVNULmluCi0tLSAv
ZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL01BTklGRVNULmlu
CVR1ZSBTZXAgMjMgMTU6MTk6MTQgMjAxNCArMDIwMApAQCAtMCwwICsxLDEgQEAKK2luY2x1ZGUg
ZmFyb2xsdXovdGVtcGxhdGVzLyouajIKZGlmZiAtciAwMDAwMDAwMDAwMDAgLXIgZTE4YjYxYTcz
YTY4IFJFQURNRS50eHQKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAw
MDAKKysrIGIvUkVBRE1FLnR4dAlUdWUgU2VwIDIzIDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAs
MCArMSwzMyBAQAorPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisgRmFyb2xMdXoKKz0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCitBIFV0aWxpdHkgdG8gbWFuaXB1bGF0ZSBTZWN1cml0eSBBZHZp
c29yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzp2
ZXJzaW9uOiAwLjEKKzpsaWNlbnNlOiBHUEx2MisKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0t
LS0KKworRmFyb2xMdXogaXMgYSBzZXQgb2YgbGlicmFyeSAvIHV0aWxpdGllcyB0byBtYW5pcHVs
YXRlIHNlY3VyaXR5IGFkdmlzb3JpZXM9Ci4gSXQKK2lzIHBhcnQgb2YgRmFyb2wsIGEgU2VjdXJp
dHkgQWR2aXNvcnkgTWFuYWdlbWVudCBQbGF0Zm9ybS4KKworTWFpbiBmZWF0dXJlcworLS0tLS0t
LS0tLS0tLQorCisqIFJlYWQgQ1ZSRiBhZHZpc29yaWVzCisqIFdyaXRlIENWUkYgQWR2aXNvcmll
cworKiBXcml0ZSBOQVNMIHNjcmlwdHMKKyogV3JpdGUgT1ZBTCBBZHZpc29yaWVzIChleHBlcmlt
ZW50YWwpCisKK0luc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKK1RvIGluc3RhbGwgYGBmYXJv
bGx1emBgLCB1c2UgdGhlIHBpcCBwYWNrYWdlIG1hbmFnZXIgKHByZWZlcmFibHkgaW5zaWRlIGEK
K3ZpcnR1YWxlbnYpOjoKKworICAgIHBpcCBpbnN0YWxsIGZhcm9sbHV6CisKZGlmZiAtciAwMDAw
MDAwMDAwMDAgLXIgZTE4YjYxYTczYTY4IGZhcm9sbHV6L19faW5pdF9fLnB5Ci0tLSAvZGV2L251
bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2Zhcm9sbHV6L19faW5pdF9f
LnB5CVR1ZSBTZXAgMjMgMTU6MTk6MTQgMjAxNCArMDIwMApAQCAtMCwwICsxLDMxIEBACisjIC0q
LSBlbmNvZGluZzogdXRmLTggLSotCisjIERlc2NyaXB0aW9uOgorIyBBIHV0aWxpdHkgdG8gbWFu
aXB1bGF0ZSBTZWN1cml0eSBBZHZpc29yaWVzCisjCisjIEF1dGhvcnM6CisjIEJlbm89QzM9QUV0
IEFsbGFyZCA8YmVub2l0LmFsbGFyZEBncmVlbmJvbmUubmV0PgorIworIyBDb3B5cmlnaHQ6Cisj
IENvcHlyaWdodCAoQykgMjAxNCBHcmVlbmJvbmUgTmV0d29ya3MgR21iSAorIworIyBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisj
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisjIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIgdmVyc2lvbiAyCisjIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
IyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlwKK0Zhcm9sIEx1ejogQSB1dGlsaXR5IHRvIG1hbmlw
dWxhdGUgc2VjdXJpdHkgYWR2aXNvcmllcworCitUaGlzIGlzIHBhcnQgb2YgRmFyb2w6IEEgU2Vj
dXJpdHkgQWR2aXNvcnkgTWFuYWdlbWVudCBQbGF0Zm9ybS4KKyIiIgorCitfX3ZlcnNpb25fXyA9
M0QgJzAuMScKZGlmZiAtciAwMDAwMDAwMDAwMDAgLXIgZTE4YjYxYTczYTY4IGZhcm9sbHV6L2N2
cmYucHkKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIv
ZmFyb2xsdXovY3ZyZi5weQlUdWUgU2VwIDIzIDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCAr
MSwxMDE2IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIworIyBBdXRob3JzOgorIyBCZW5v
PUMzPUFFdCBBbGxhcmQgPGJlbm9pdC5hbGxhcmRAZ3JlZW5ib25lLm5ldD4KKyMKKyMgQ29weXJp
Z2h0OgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgR3JlZW5ib25lIE5ldHdvcmtzIEdtYkgKKyMKKyMg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiJcCitPYmplY3RzIHJlbGF0ZWQgdG8gQ1ZS
RiBEb2N1bWVudHMKKyIiIgorCitjbGFzcyBWYWxpZGF0aW9uRXJyb3IoRXhjZXB0aW9uKTogcGFz
cworCitjbGFzcyBDVlJGUHVibGlzaGVyKG9iamVjdCk6CisgICAgVFlQRVMgPTNEICgnVmVuZG9y
JywgJ0Rpc2NvdmVyZXInLCAnQ29vcmRpbmF0b3InLCAnVXNlcicsICdPdGhlcicpCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIF90eXBlLCB2ZW5kb3JpZD0zRE5vbmUpOgorICAgICAgICBzZWxmLl90
eXBlID0zRCBfdHlwZQorICAgICAgICBzZWxmLl92ZW5kb3JpZCA9M0QgdmVuZG9yaWQKKyAgICAg
ICAgc2VsZi5fY29udGFjdCA9M0QgTm9uZQorICAgICAgICBzZWxmLl9hdXRob3JpdHkgPTNEIE5v
bmUKKworICAgIGRlZiBzZXRDb250YWN0KHNlbGYsIGNvbnRhY3QpOgorICAgICAgICBzZWxmLl9j
b250YWN0ID0zRCBjb250YWN0CisKKyAgICBkZWYgc2V0QXV0aG9yaXR5KHNlbGYsIGF1dGhvcml0
eSk6CisgICAgICAgIHNlbGYuX2F1dGhvcml0eSA9M0QgYXV0aG9yaXR5CisKKyAgICBkZWYgdmFs
aWRhdGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90eXBlOgorICAgICAgICAgICAgcmFp
c2UgVmFsaWRhdGlvbkVycm9yKCdEb2N1bWVudCBQdWJsaXNoZXIgbmVlZHMgdG8gaGF2ZSBhIHR5
cGU9CicpCisgICAgICAgIGlmIHNlbGYuX3R5cGUgbm90IGluIHNlbGYuVFlQRVM6CisgICAgICAg
ICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0RvY3VtZW50IFB1Ymxpc2hlciBUeXBlIG5lZWRz
IHRvIGJlIG9uZT0KIG9mICVzJyAlICcsICcuam9pbihzZWxmLlRZUEVTKSkKKworICAgIGRlZiBf
X3N0cl9fKHNlbGYpOgorICAgICAgICBzID0zRCAnQ1ZSRlB1Ymxpc2hlcjogJXMnICUgc2VsZi5f
dHlwZQorICAgICAgICBpZiBzZWxmLl92ZW5kb3JpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAg
IHMgKz0zRCAnIElEOiAlcycgJSBzZWxmLl92ZW5kb3JpZAorICAgICAgICBpZiBzZWxmLl9jb250
YWN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcyArPTNEICcgQ29udGFjdDogIiVzIicgJSBz
ZWxmLl9jb250YWN0CisgICAgICAgIGlmIHNlbGYuX2F1dGhvcml0eSBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHMgKz0zRCAnIEF1dGhvcml0eTogIiVzIicgJSBzZWxmLl9hdXRob3JpdHkKKyAg
ICAgICAgcmV0dXJuIHMKKworCitjbGFzcyBDVlJGVHJhY2tpbmdJRChvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBfaWQpOgorICAgICAgICBzZWxmLl9pZCA9M0QgX2lkCisgICAgICAg
IHNlbGYuX2FsaWFzZXMgPTNEIFtdCisKKyAgICBkZWYgYWRkQWxpYXMoc2VsZiwgYWxpYXMpOgor
ICAgICAgICBzZWxmLl9hbGlhc2VzLmFwcGVuZChhbGlhcykKKworICAgIGRlZiB2YWxpZGF0ZShz
ZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2lkOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRh
dGlvbkVycm9yKCdEb2N1bWVudCBJRCBjYW5ub3QgYmUgbGVmdCBlbXB0eScpCisKKyAgICBkZWYg
X19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYWxpYXNlczoKKyAgICAgICAgICAgIHJl
dHVybiAiJXMgKCVzKSIgJSAoc2VsZi5faWQsICcsICcuam9pbihzZWxmLl9hbGlhc2VzKSkKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2lkCisKKworY2xhc3MgQ1ZSRlRyYWNraW5nKG9iamVjdCk6Cisg
ICAgU1RBVFVTRVMgPTNEICgnRHJhZnQnLCAnSW50ZXJpbScsICdGaW5hbCcpCisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIF9pZCwgc3RhdHVzLCB2ZXJzaW9uLCBpbml0aWFsLCBjdXJyZW50KToKKyAg
ICAgICAgc2VsZi5faWRlbnRpZmljYXRpb24gPTNEIF9pZAorICAgICAgICBzZWxmLl9zdGF0dXMg
PTNEIHN0YXR1cworICAgICAgICBzZWxmLl92ZXJzaW9uID0zRCB2ZXJzaW9uCisgICAgICAgIHNl
bGYuX2hpc3RvcnkgPTNEIFtdCisgICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID0zRCBpbml0aWFs
CisgICAgICAgIHNlbGYuX2N1cnJlbnREYXRlID0zRCBjdXJyZW50CisgICAgICAgIHNlbGYuX2dl
bmVyYXRvciA9M0QgTm9uZQorCisgICAgZGVmIGFkZFJldmlzaW9uKHNlbGYsIHJldmlzaW9uKToK
KyAgICAgICAgc2VsZi5faGlzdG9yeS5hcHBlbmQocmV2aXNpb24pCisKKyAgICBkZWYgc2V0R2Vu
ZXJhdG9yKHNlbGYsIGdlbmVyYXRvcik6CisgICAgICAgIHNlbGYuX2dlbmVyYXRvciA9M0QgZ2Vu
ZXJhdG9yCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2lkZW50
aWZpY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0Rv
Y3VtZW50IFRyYWNraW5nIG5lZWRzIHRvIGhhdmUgYW4gSWRlbj0KdGlmaWNhdGlvbicpCisgICAg
ICAgIHNlbGYuX2lkZW50aWZpY2F0aW9uLnZhbGlkYXRlKCkKKyAgICAgICAgaWYgbm90IHNlbGYu
X3N0YXR1czoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignRG9jdW1lbnQgc3Rh
dHVzIG11c3QgYmUgc2V0JykKKyAgICAgICAgaWYgc2VsZi5fc3RhdHVzIG5vdCBpbiBzZWxmLlNU
QVRVU0VTOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdEb2N1bWVudCBTdGF0
dXMgbXVzdCBiZSBvbmUgb2YgJXMnICUgJyw9CiAnLmpvaW4oc2VsZi5TVEFUVVNFUykpCisgICAg
ICAgIGlmIG5vdCBzZWxmLl92ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVy
cm9yKCdEb2N1bWVudCBWZXJzaW9uIG11c3QgYmUgc2V0JykKKyAgICAgICAgaWYgbGVuKHNlbGYu
X3ZlcnNpb24pID4gNDoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignRG9jdW1l
bnQgVmVyc2lvbiBtdXN0IGJlIGNvbXByaXNlZCBiZXR3PQplZW4gYG5uYCBhbmQgYG5uLm5uLm5u
Lm5uYCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9oaXN0b3J5OgorICAgICAgICAgICAgcmFpc2Ug
VmFsaWRhdGlvbkVycm9yKCdEb2N1bWVudCBtdXN0IGhhdmUgYXQgbGVhc3QgYSByZXZpc2lvbicp
CisgICAgICAgIGlmIG5vdCBzZWxmLl9pbml0aWFsRGF0ZToKKyAgICAgICAgICAgIHJhaXNlIFZh
bGlkYXRpb25FcnJvcignRG9jdW1lbnQgbXVzdCBoYXZlIGFuIGluaXRpYWwgUmVsZWFzZSBkPQph
dGUgc2V0JykKKyAgICAgICAgcHJldl9kYXRlID0zRCBzZWxmLl9pbml0aWFsRGF0ZQorICAgICAg
ICBpZiBzZWxmLl9oaXN0b3J5WzBdLl9kYXRlIDwgc2VsZi5faW5pdGlhbERhdGU6CisgICAgICAg
ICAgICAjIERvY3VtZW50cyBjb3VsZCBoYXZlIHJldmlzaW9ucyBiZWZvcmUgYmVpbmcgcmVsZWFz
ZWQKKyAgICAgICAgICAgIHByZXZfZGF0ZSA9M0Qgc2VsZi5faGlzdG9yeVswXS5fZGF0ZQorICAg
ICAgICBwcmV2ID0zRCAoKQorICAgICAgICBmb3IgcmV2aXNpb24gaW4gc2VsZi5faGlzdG9yeToK
KyAgICAgICAgICAgIHJldmlzaW9uLnZhbGlkYXRlKCkKKyAgICAgICAgICAgIGlmIHJldmlzaW9u
Ll9udW1iZXIgPD0zRCBwcmV2OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJv
cignUmV2aXNpb24gbnVtYmVycyBtdXN0IGFsd2F5cyBiZSBpbmM9CnJlYXNpbmcnKQorICAgICAg
ICAgICAgaWYgcmV2aXNpb24uX2RhdGUgPCBwcmV2X2RhdGU6CisgICAgICAgICAgICAgICAgcmFp
c2UgVmFsaWRhdGlvbkVycm9yKCdSZXZpc2lvbiBkYXRlcyBtdXN0IGFsd2F5cyBiZSBpbmNyZT0K
YXNpbmcnKQorICAgICAgICAgICAgcHJldiA9M0QgcmV2aXNpb24uX251bWJlcgorICAgICAgICAg
ICAgcHJldl9kYXRlID0zRCByZXZpc2lvbi5fZGF0ZQorICAgICAgICBpZiBub3Qgc2VsZi5fY3Vy
cmVudERhdGU6CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0RvY3VtZW50IG11
c3QgaGF2ZSBhIEN1cnJlbnQgUmVsZWFzZSBEYT0KdGUgc2V0JykKKyAgICAgICAgaWYgc2VsZi5f
Y3VycmVudERhdGUgIT0zRCBzZWxmLl9oaXN0b3J5Wy0xXS5fZGF0ZToKKyAgICAgICAgICAgIHJh
aXNlIFZhbGlkYXRpb25FcnJvcignQ3VycmVudCBSZWxlYXNlIERhdGUgbXVzdCBiZSB0aGUgc2Ft
ZSBhPQpzIHRoZSBEYXRlIGZyb20gdGhlIGxhc3QgUmV2aXNpb24nKQorICAgICAgICBpZiBzZWxm
Ll9pbml0aWFsRGF0ZSA+IHNlbGYuX2N1cnJlbnREYXRlOgorICAgICAgICAgICAgcmFpc2UgVmFs
aWRhdGlvbkVycm9yKCdJbml0aWFsIGRhdGUgbXVzdCBub3QgYmUgYWZ0ZXIgY3VycmVudCA9CkRh
dGUnKQorICAgICAgICBpZiBzZWxmLl92ZXJzaW9uICE9M0Qgc2VsZi5faGlzdG9yeVstMV0uX251
bWJlcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignRG9jdW1lbnQgdmVyc2lv
biBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoPQplIG51bWJlciBvZiB0aGUgbGFzdCBSZXZpc2lvbicp
CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcyA9M0QgIklEOiAlcyIgJSBzZWxm
Ll9pZGVudGlmaWNhdGlvbgorICAgICAgICBzICs9M0QgIiBTdGF0dXM6ICVzIiAlIHNlbGYuX3N0
YXR1cworICAgICAgICBzICs9M0QgIiB2JXMiICUgJy4nLmpvaW4oJyVkJyAlIGkgZm9yIGkgaW4g
c2VsZi5fdmVyc2lvbikKKyAgICAgICAgcyArPTNEICIgJWQgcmV2aXNpb25zIiAlIGxlbihzZWxm
Ll9oaXN0b3J5KQorICAgICAgICBzICs9M0QgIiBJbml0aWFsIHJlbGVhc2U6ICVzIiAlIHNlbGYu
X2luaXRpYWxEYXRlLmlzb2Zvcm1hdCgpCisgICAgICAgIHJldHVybiBzCisKKworY2xhc3MgQ1ZS
RlJldmlzaW9uKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG51bWJlciwgZGF0ZSwg
ZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLl9udW1iZXIgPTNEIG51bWJlcgorICAgICAgICBz
ZWxmLl9kYXRlID0zRCBkYXRlCisgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID0zRCBkZXNjcmlw
dGlvbgorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fbnVt
YmVyOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIFJldmlzaW9uIG11c3Qg
aGF2ZSBhIE51bWJlcicpCisgICAgICAgIGlmIG5vdCBzZWxmLl9kYXRlOgorICAgICAgICAgICAg
cmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIFJldmlzaW9uIG11c3QgaGF2ZSBhIERhdGUnKQorICAg
ICAgICBpZiBub3Qgc2VsZi5fZGVzY3JpcHRpb246CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0
aW9uRXJyb3IoJ0EgUmV2aXNpb24gbXVzdCBoYXZlIGEgRGVzY3JpcHRpb24nKQorCitjbGFzcyBD
VlJGR2VuZXJhdG9yKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBz
ZWxmLl9lbmdpbmUgPTNEIE5vbmUKKyAgICAgICAgc2VsZi5fZGF0ZSA9M0QgTm9uZQorCisgICAg
ZGVmIHNldEVuZ2luZShzZWxmLCBlbmdpbmUpOgorICAgICAgICBzZWxmLl9lbmdpbmUgPTNEIGVu
Z2luZQorCisgICAgZGVmIHNldERhdGUoc2VsZiwgZGF0ZSk6CisgICAgICAgIHNlbGYuX2RhdGUg
PTNEIGRhdGUKKworICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKyAgICAgICAgaWYgKG5vdCBzZWxm
Ll9lbmdpbmUpIGFuZCAobm90IHNlbGYuX2RhdGUpOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRh
dGlvbkVycm9yKCdUaGUgR2VuZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCBhbiBFbmc9CmluZSBv
ciBhIERhdGUnKQorCisKK2NsYXNzIENWUkZOb3RlKG9iamVjdCk6CisgICAgVFlQRVMgPTNEICgn
R2VuZXJhbCcsICdEZXRhaWxzJywgJ0Rlc2NyaXB0aW9uJywgJ1N1bW1hcnknLCAnRkFRJywKKyAg
ICAgICAgICAgICAnTGVnYWwgRGlzY2xhaW1lcicsICdPdGhlcicpCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIF90eXBlLCBvcmRpbmFsLCBub3RlLCB0aXRsZT0zRE5vbmUsIGF1ZGllbmNlPTNETm9u
ZT0KKToKKyAgICAgICAgc2VsZi5fdHlwZSA9M0QgX3R5cGUKKyAgICAgICAgc2VsZi5fb3JkaW5h
bCA9M0Qgb3JkaW5hbAorICAgICAgICBzZWxmLl9ub3RlID0zRCBub3RlCisgICAgICAgIHNlbGYu
X3RpdGxlID0zRCB0aXRsZQorICAgICAgICBzZWxmLl9hdWRpZW5jZSA9M0QgYXVkaWVuY2UKKwor
ICAgIGRlZiBnZXRUaXRsZShzZWxmKToKKyAgICAgICAgIiIiIHJldHVybnMgc29tZXRoaW5nIHRo
YXQgY2FuIGJlIHVzZWQgYXMgYSB0aXRsZSAiIiIKKyAgICAgICAgaWYgc2VsZi5fdGl0bGUgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAiJXMgKCMlZCkiICUgKHNlbGYuX3R5cGUsIHNlbGYu
X29yZGluYWwpCisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc2VsZi5fdGl0bGUsIHNlbGYu
X3R5cGUpCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90
eXBlOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIE5vdGUgbmVlZHMgdG8g
aGF2ZSBhIFR5cGUgc2V0JykKKyAgICAgICAgaWYgc2VsZi5fdHlwZSBub3QgaW4gc2VsZi5UWVBF
UzoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBOb3RlIFR5cGUgbmVlZHMg
dG8gYmUgb25lIG9mICVzJyAlICcsPQogJy5qb2luKHNlbGYuVFlQRVMpKQorICAgICAgICBpZiBz
ZWxmLl9vcmRpbmFsIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBO
b3RlIG9yZGluYWwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnPQplcicpCisgICAgICAgIGlmIG5v
dCBzZWxmLl9ub3RlOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIE5vdGUg
bXVzdCBjb250YWluIHNvbWUgdGV4dCcpCisKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fbm90ZQorCisKK2NsYXNzIENWUkZSZWZlcmVuY2Uob2JqZWN0KToK
KyAgICBUWVBFUyA9M0QgKCdTZWxmJywgJ0V4dGVybmFsJykKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdXJsLCBkZXNjcmlwdGlvbiwgX3R5cGU9M0ROb25lKToKKyAgICAgICAgc2VsZi5fdXJsID0z
RCB1cmwKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPTNEIGRlc2NyaXB0aW9uCisgICAgICAg
IHNlbGYuX3R5cGUgPTNEIF90eXBlCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAg
IGlmIChzZWxmLl90eXBlIGlzIG5vdCBOb25lKSBhbmQgKHNlbGYuX3R5cGUgbm90IGluIHNlbGYu
VFlQRVMpOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdJZiBhIFJlZmVyZW5j
ZSB0eXBlIGlzIHNldCwgaXQgbWlzdCBiZSA9Cm9uZSBvZiAlcycgJSAnLCAnLmpvaW4oc2VsZi5U
WVBFUykpCisgICAgICAgIGlmIG5vdCBzZWxmLl91cmw6CisgICAgICAgICAgICByYWlzZSBWYWxp
ZGF0aW9uRXJyb3IoJ0EgUmVmZXJlbmNlIG11c3QgY29udGFpbiBhbiBVUkwnKQorICAgICAgICBp
ZiBub3Qgc2VsZi5fZGVzY3JpcHRpb246CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJy
b3IoJ0EgUmVmZXJlbmNlIG11c3QgY29udGFpbiBhIGRlc2NyaXB0aW9uJykKKworCitjbGFzcyBD
VlJGQWNrbm93bGVkZ21lbnQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT0z
RE5vbmUsIG9yZ2FuaXphdGlvbj0zRE5vbmUsIGRlc2NyaXB0aW9uPTNETm9uPQplLAorICAgICAg
ICAgICAgICAgICB1cmw9M0ROb25lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9M0QgbmFtZQorICAg
ICAgICBzZWxmLl9vcmdhbml6YXRpb24gPTNEIG9yZ2FuaXphdGlvbgorICAgICAgICBzZWxmLl9k
ZXNjcmlwdGlvbiA9M0QgZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5fdXJsID0zRCB1cmwKKwor
ICAgIGRlZiBnZXRUaXRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAtICVzIiAlIChzZWxm
Ll9uYW1lLCBzZWxmLl9vcmdhbml6YXRpb24pCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6Cisg
ICAgICAgIGlmIChub3Qgc2VsZi5fbmFtZSkgYW5kIChub3Qgc2VsZi5fb3JnYW5pemF0aW9uKSBh
bmQgKG5vdCBzZWxmLl9kZT0Kc2NyaXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRp
b25FcnJvcignQW4gQWNrbm93bGVkZ21lbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgPQpOYW1lLCBh
biBPcmdhbml6YXRpb24gb3IgYSBEZXNjcmlwdGlvbicpCisKKworY2xhc3MgQ1ZSRlByb2R1Y3RU
cmVlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIEFsbCB0aGUg
YnJhbmNoZXMsIHRoZXkgY2FuIGJlIG9yZGVyIHdpdGggdGhlaXIgYHBhcmVudGAgYXR0cmlidXRl
CisgICAgICAgIHNlbGYuX2JyYW5jaGVzID0zRCBbXQorICAgICAgICBzZWxmLl9ncm91cHMgPTNE
IFtdCisgICAgICAgIHNlbGYuX3JlbGF0aW9uc2hpcHMgPTNEIFtdCisgICAgICAgIHNlbGYuX3By
b2R1Y3RzID0zRCBbXQorICAgICAgICBzZWxmLl9ncm91cHMgPTNEIFtdCisKKyAgICBkZWYgYWRk
QnJhbmNoKHNlbGYsIGJyYW5jaCk6CisgICAgICAgIHBhcmVudCA9M0Qgc2VsZi5nZXRCcmFuY2go
YnJhbmNoLmdldFBhcmVudCgpLmdldFBhdGgoKSkKKyAgICAgICAgaWYgcGFyZW50IGlzIHNlbGY6
CisgICAgICAgICAgICBzZWxmLl9icmFuY2hlcy5hcHBlbmQoYnJhbmNoKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcGFyZW50Ll9jaGlsZHMuYXBwZW5kKGJyYW5jaCkKKworICAgIGRlZiBh
ZGRQcm9kdWN0KHNlbGYsIHByb2R1Y3QpOgorICAgICAgICBpZiBwcm9kdWN0IG5vdCBpbiBzZWxm
Ll9wcm9kdWN0czoKKyAgICAgICAgICAgIHNlbGYuX3Byb2R1Y3RzLmFwcGVuZChwcm9kdWN0KQor
ICAgICAgICBpZiBwcm9kdWN0Ll9wYXJlbnQgaXMgbm90IHNlbGY6CisgICAgICAgICAgICBwcm9k
dWN0Ll9wYXJlbnQuX3Byb2R1Y3QgPTNEIHByb2R1Y3QKKworICAgIGRlZiBhZGRSZWxhdGlvbnNo
aXAoc2VsZiwgcmVsKToKKyAgICAgICAgc2VsZi5fcmVsYXRpb25zaGlwcy5hcHBlbmQocmVsKQor
CisgICAgZGVmIGFkZEdyb3VwKHNlbGYsIGdyb3VwKToKKyAgICAgICAgc2VsZi5fZ3JvdXBzLmFw
cGVuZChncm91cCkKKworICAgIGRlZiBnZXRQcm9kdWN0Rm9ySUQoc2VsZiwgcHJvZHVjdGlkKToK
KyAgICAgICAgZm9yIHByb2R1Y3QgaW4gc2VsZi5fcHJvZHVjdHM6CisgICAgICAgICAgICBpZiBw
cm9kdWN0Ll9wcm9kdWN0aWQgPTNEPTNEIHByb2R1Y3RpZDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHJvZHVjdAorICAgICAgICByYWlzZSBLZXlFcnJvcihwcm9kdWN0aWQpCisKKyAgICBkZWYg
Z2V0R3JvdXBGb3JJRChzZWxmLCBncm91cGlkKToKKyAgICAgICAgZm9yIGdyb3VwIGluIHNlbGYu
X2dyb3VwczoKKyAgICAgICAgICAgIGlmIGdyb3VwLl9ncm91cGlkID0zRD0zRCBncm91cGlkOgor
ICAgICAgICAgICAgICAgIHJldHVybiBncm91cAorICAgICAgICByYWlzZSBLZXlFcnJvcihncm91
cGlkKQorCisgICAgZGVmIGRlY29tcG9zZVByb2R1Y3Qoc2VsZiwgcHJvZHVjdGlkKToKKyAgICAg
ICAgIiIiIEluIGNhc2Ugb2YgcHJvZHVjdCBkZWZpbmVkIGFzIGEgcmVsYXRpb25zaGlwIChwcm9k
dWN0IFggaW5zdGFsPQpsZWQKKyAgICAgICAgb24gT1MgWSksIHRoaXMgZ2l2ZXMgdXMgdGhlIGZv
bGxvd2luZyB0dXBsZTogKE9TLCBwcm9kdWN0KS4gIiIiCisgICAgICAgIHByb2R1Y3QgPTNEIHNl
bGYuZ2V0UHJvZHVjdEZvcklEKHByb2R1Y3RpZCkKKyAgICAgICAgcGFyZW50ID0zRCBwcm9kdWN0
Ll9wYXJlbnQKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
KE5vbmUsIE5vbmUpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhcmVudCwgQ1ZSRlJlbGF0
aW9uc2hpcCk6CisgICAgICAgICAgICByZXR1cm4gKE5vbmUsIE5vbmUpCisgICAgICAgIHJlbGF0
aW9udHlwZSA9M0QgcGFyZW50Ll9yZWxhdGlvbnR5cGUucmVwbGFjZSgnICcsICcnKS5sb3dlcigp
CisgICAgICAgIGlmIHJlbGF0aW9udHlwZSBub3QgaW4gKCdkZWZhdWx0Y29tcG9uZW50b2YnLCAn
aW5zdGFsbGVkb24nKToKKyAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKyAgICAgICAg
cmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYuZ2V0UHJvZHVjdEZvcklEKHBhcmVudC5fcmVsYXRl
c3RvcHJvZHVjdHJlZmVyZW5jZSksCisgICAgICAgICAgICBzZWxmLmdldFByb2R1Y3RGb3JJRChw
YXJlbnQuX3Byb2R1Y3RyZWZlcmVuY2UpCisgICAgICAgICkKKworICAgIGRlZiBnZXRCcmFuY2go
c2VsZiwgcGF0aCk6CisgICAgICAgIGlmIGxlbihwYXRoKSA9M0Q9M0QgMDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmCisgICAgICAgIGJyYW5jaGVzID0zRCBzZWxmLl9icmFuY2hlcworICAgICAg
ICBub2RlID0zRCBOb25lCisgICAgICAgIGZvciBpZHggaW4gcGF0aDoKKyAgICAgICAgICAgIG5v
ZGUgPTNEIGJyYW5jaGVzW2lkeF0KKyAgICAgICAgICAgIGJyYW5jaGVzID0zRCBub2RlLl9jaGls
ZHMKKyAgICAgICAgcmV0dXJuIG5vZGUKKworICAgIGRlZiBnZXRCcmFuY2hlcyhzZWxmKToKKyAg
ICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLl9icmFuY2hlczoKKyAgICAgICAgICAgIHlpZWxkIGJy
YW5jaAorICAgICAgICAgICAgZm9yIHN1Yl9icmFuY2ggaW4gYnJhbmNoLmdldEJyYW5jaGVzKCk6
CisgICAgICAgICAgICAgICAgeWllbGQgc3ViX2JyYW5jaAorCisgICAgZGVmIGdldFBhdGgoc2Vs
Zik6CisgICAgICAgIHJldHVybiAoKQorCisgICAgZGVmIGdldE5hbWVPZlJlbGF0aW9uc2hpcChz
ZWxmLCByZWxhdGlvbnNoaXApOgorICAgICAgICBpZiByZWxhdGlvbnNoaXAgaXMgTm9uZToKKyAg
ICAgICAgICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4gJyAnLmpvaW4oKHNlbGYuZ2V0UHJv
ZHVjdEZvcklEKHJlbGF0aW9uc2hpcC5fcHJvZHVjdHJlZmVyZW49CmNlKS5fbmFtZSwgJ2FzJywK
KyAgICAgICAgICAgICAgICByZWxhdGlvbnNoaXAuX3JlbGF0aW9udHlwZS5sb3dlcigpLAorICAg
ICAgICAgICAgICAgIHNlbGYuZ2V0UHJvZHVjdEZvcklEKHJlbGF0aW9uc2hpcC5fcmVsYXRlc3Rv
cHJvZHVjdHJlZmVyZW49CmNlKS5fbmFtZSkpCisKKyAgICBkZWYgZ2V0T3JwaGFuZWRCcmFuY2hl
cyhzZWxmLCBwcm9kdWN0PTNETm9uZSk6CisgICAgICAgICIiIiBUaGUgYnJhbmNoZXMgdGhhdCBj
b3VsZCBhY2NlcHQgYHByb2R1Y3RgIGFzIFByb2R1Y3QgRGVmaW5pdGlvbj0KICIiIgorICAgICAg
ICB3aGl0ZV9saXN0ID0zRCBbXQorICAgICAgICBpZiBwcm9kdWN0IGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgd2hpdGVfbGlzdCA9M0QgW3Byb2R1Y3QuX3BhcmVudF0KKyAgICAgICAgZm9yIGJy
YW5jaCBpbiBzZWxmLmdldEJyYW5jaGVzKCk6CisgICAgICAgICAgICBpZiAoYnJhbmNoIGluIHdo
aXRlX2xpc3QpIG9yIGJyYW5jaC5pc09ycGhhbmVkKCk6CisgICAgICAgICAgICAgICAgeWllbGQg
YnJhbmNoCisKKyAgICBkZWYgZ2V0Tm90VGVybWluYWxCcmFuY2hlcyhzZWxmLCBiMj0zRE5vbmUp
OgorICAgICAgICAiIiJcCisgICAgICAgIFRoZSBicmFuY2hlcyB0aGF0IGNvdWxkIGFjY2VwdCBg
YjJgIGFzIG5ldyBzdWItYnJhbmNoZXMKKyAgICAgICAgTm90ZSB0aGF0IGIyIGFuZCBhbGwgaXRz
IHN1Yi1icmFuY2hlcyBjYW5ub3QgYmUgbGlzdGVkCisgICAgICAgICIiIgorICAgICAgICBibGFj
a19saXN0ID0zRCBbXQorICAgICAgICBpZiBiMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJs
YWNrX2xpc3QgPTNEIFtiMl0gKyBsaXN0KGIyLmdldEJyYW5jaGVzKCkpCisgICAgICAgIGZvciBi
cmFuY2ggaW4gc2VsZi5nZXRCcmFuY2hlcygpOgorICAgICAgICAgICAgaWYgYnJhbmNoIGluIGJs
YWNrX2xpc3Q6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGJyYW5j
aC5fcHJvZHVjdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHlpZWxkIGJyYW5jaAorCisgICAg
ZGVmIGdldE9ycGhhbmVkUmVsYXRpb25zaGlwcyhzZWxmLCBwcm9kdWN0PTNETm9uZSk6CisgICAg
ICAgICIiIiBUaGUgcmVsYXRpb25zaGlwcyB0aGF0IG5lZWQgYSBwcm9kdWN0IGRlZm5pbml0aW9u
ICIiIgorICAgICAgICB3aGl0ZV9saXN0ID0zRCBbXQorICAgICAgICBpZiBwcm9kdWN0IGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgd2hpdGVfbGlzdCA9M0QgW3Byb2R1Y3QuZ2V0Q3VycmVudFJl
bGF0aW9uc2hpcCgpXQorICAgICAgICBmb3IgaSwgcmVsYXRpb25zaGlwIGluIGVudW1lcmF0ZShz
ZWxmLl9yZWxhdGlvbnNoaXBzKToKKyAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAgaW4gd2hp
dGVfbGlzdCkgb3IgcmVsYXRpb25zaGlwLmlzT3JwaGFuZWQoKToKKyAgICAgICAgICAgICAgICB5
aWVsZCAoaSwgcmVsYXRpb25zaGlwKQorCisgICAgZGVmIG5iUHJvZHVjdHMoc2VsZik6CisgICAg
ICAgICIiIiBBbW91bnQgb2YgJ3JhdycgUHJvZHVjdHMgIiIiCisgICAgICAgIHJldHVybiBsZW4o
W3AgZm9yIHAgaW4gc2VsZi5fcHJvZHVjdHMgaWYgcC5fcGFyZW50IGlzIHNlbGZdKQorCisgICAg
ZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYuX2JyYW5jaGVz
OgorICAgICAgICAgICAgYnJhbmNoLnZhbGlkYXRlKCkKKyAgICAgICAgcHJvZHVjdGlkcyA9M0Qg
c2V0KCkKKyAgICAgICAgZm9yIHByb2R1Y3QgaW4gc2VsZi5fcHJvZHVjdHM6CisgICAgICAgICAg
ICBwcm9kdWN0LnZhbGlkYXRlKCkKKyAgICAgICAgICAgIGlmIHByb2R1Y3QuX3Byb2R1Y3RpZCBp
biBwcm9kdWN0aWRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignRWFj
aCBQcm9kdWN0SUQgbXVzdCBiZSB1bmlxdWUgKCVzKSc9CiAlIHByb2R1Y3QuX3Byb2R1Y3RpZCkK
KyAgICAgICAgICAgIHByb2R1Y3RpZHMuYWRkKHByb2R1Y3QuX3Byb2R1Y3RpZCkKKyAgICAgICAg
Zm9yIHJlbGF0aW9uc2hpcCBpbiBzZWxmLl9yZWxhdGlvbnNoaXBzOgorICAgICAgICAgICAgcmVs
YXRpb25zaGlwLnZhbGlkYXRlKCkKKyAgICAgICAgICAgIGZvciBwcm9kdWN0aWQgaW4gKHJlbGF0
aW9uc2hpcC5fcHJvZHVjdHJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlbGF0aW9uc2hpcC5fcmVsYXRlc3RvcHJvZHVjdHJlZmVyZW5jZSk6CisgICAgICAgICAgICAg
ICAgaWYgcHJvZHVjdGlkIG5vdCBpbiBwcm9kdWN0aWRzOgorICAgICAgICAgICAgICAgICAgICBy
YWlzZSBWYWxpZGF0aW9uRXJyb3IoJ1Byb2R1Y3RJRCAlcyBpcyB1bmtub3duJyAlIHByb2Q9CnVj
dGlkKQorICAgICAgICBncm91cGlkcyA9M0Qgc2V0KCkKKyAgICAgICAgZm9yIGdyb3VwIGluIHNl
bGYuX2dyb3VwczoKKyAgICAgICAgICAgIGdyb3VwLnZhbGlkYXRlKCkKKyAgICAgICAgICAgIGlm
IGdyb3VwLl9ncm91cGlkIGluIGdyb3VwaWRzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlk
YXRpb25FcnJvcignRHVwbGljYXRlZCBHcm91cElEOiAlcycgJSBncm91cC5fZ3I9Cm91cGlkKQor
ICAgICAgICAgICAgZ3JvdXBpZHMuYWRkKGdyb3VwLl9ncm91cGlkKQorICAgICAgICAgICAgZm9y
IHByb2R1Y3RpZCBpbiBncm91cC5fcHJvZHVjdGlkczoKKyAgICAgICAgICAgICAgICBpZiBwcm9k
dWN0aWQgbm90IGluIHByb2R1Y3RpZHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlk
YXRpb25FcnJvcignUHJvZHVjdElEICVzIGlzIHVua25vd24nICUgcHJvZD0KdWN0aWQpCisgICAg
ICAgIHJldHVybiBwcm9kdWN0aWRzLCBncm91cGlkcworCisgICAgZGVmIF9fc3RyX18oc2VsZik6
CisgICAgICAgIHJldHVybiAnUHJvZHVjdHM6ICVzJyAlICdcbicuam9pbihzdHIocCkgZm9yIHAg
aW4gc2VsZi5fcHJvZHVjdHMpCisKKworY2xhc3MgQ1ZSRlByb2R1Y3RCcmFuY2gob2JqZWN0KToK
KyAgICBUWVBFUyA9M0QgKCdWZW5kb3InLCAnUHJvZHVjdCBGYW1pbHknLCAnUHJvZHVjdCBOYW1l
JywgJ1Byb2R1Y3QgVmVyc2lvPQpuJywKKyAgICAgICAgICAgICAnUGF0Y2ggTGV2ZWwnLCAnU2Vy
dmljZSBQYWNrJywgJ0FyY2hpdGVjdHVyZScsICdMYW5ndWFnZScsCisgICAgICAgICAgICAgJ0xl
Z2FjeScsICdTcGVjaWZpY2F0aW9uJykKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUsIG5h
bWUsIHBhcmVudGJyYW5jaCk6CisgICAgICAgIHNlbGYuX3R5cGUgPTNEIF90eXBlCisgICAgICAg
IHNlbGYuX25hbWUgPTNEIG5hbWUKKyAgICAgICAgc2VsZi5fcGFyZW50YnJhbmNoID0zRCBwYXJl
bnRicmFuY2gKKyAgICAgICAgc2VsZi5fY2hpbGRzID0zRCBbXQorICAgICAgICBzZWxmLl9wcm9k
dWN0ID0zRCBOb25lCisKKyAgICBkZWYgZ2V0UGFyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fcGFyZW50YnJhbmNoCisKKyAgICBkZWYgZ2V0UGF0aChzZWxmLCBzdHJpbmc9M0RGYWxz
ZSk6CisgICAgICAgICIiIiByZXR1cm4gdGhlIHBhdGggdG8gdGhhdCBicmFuY2ggZWxlbWVudCBh
cyBhIHR1cGxlICIiIgorICAgICAgICBpZiBzZWxmLmlzUm9vdCgpOgorICAgICAgICAgICAgZm9y
IGksIGIgaW4gZW51bWVyYXRlKHNlbGYuX3BhcmVudGJyYW5jaC5fYnJhbmNoZXMpOgorICAgICAg
ICAgICAgICAgIGlmIGIgaXMgc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclZCcgJSBpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoaSwgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGksIGIgaW4g
ZW51bWVyYXRlKHNlbGYuX3BhcmVudGJyYW5jaC5fY2hpbGRzKToKKyAgICAgICAgICAgICAgICBp
ZiBiIGlzIHNlbGY6CisgICAgICAgICAgICAgICAgICAgIGlmIHN0cmluZzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnLycuam9pbihbc2VsZi5fcGFyZW50YnJhbmNoLmdldFBhdGgo
c3RyaW5nPQopLCAnJWQnICUgaV0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9w
YXJlbnRicmFuY2guZ2V0UGF0aChzdHJpbmcpICsgKGksKQorICAgICAgICBpZiBzdHJpbmc6Cisg
ICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuICgpCisKKyAgICBkZWYgZ2V0VHJl
ZShzZWxmKToKKyAgICAgICAgIiIiIHRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzICh0eXBl
LCBuYW1lKSBsZWFkaW5nIHRvIGhlcmUiIiIKKyAgICAgICAgaWYgc2VsZi5pc1Jvb3QoKToKKyAg
ICAgICAgICAgIHJldHVybiBbKHNlbGYuX3R5cGUsIHNlbGYuX25hbWUpXQorICAgICAgICByZXR1
cm4gc2VsZi5fcGFyZW50YnJhbmNoLmdldFRyZWUoKSArIFsoc2VsZi5fdHlwZSwgc2VsZi5fbmFt
ZSldCisKKyAgICBkZWYgZ2V0TmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICcgLyAnLmpvaW4o
IiVzOiAlcyIgJSAodHlwZV8sIG5hbWUpIGZvciB0eXBlXywgbmFtZSBpbiBzZWxmPQouZ2V0VHJl
ZSgpKQorCisgICAgZGVmIGdldFBhcmVudFBhdGgoc2VsZik6CisgICAgICAgICIiIiByZXR1cm4g
YXMgc3RyaW5nIHRoZSBwYXRoIHRvIHRoZSBwYXJlbnQgIiIiCisgICAgICAgIHJldHVybiAnLycu
am9pbignJXMnICUgcCBmb3IgcCBpbiBzZWxmLmdldFBhdGgoKVs6LTFdKQorCisgICAgZGVmIGlz
Um9vdChzZWxmKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uoc2VsZi5fcGFyZW50YnJhbmNo
LCBDVlJGUHJvZHVjdFRyZWUpCisKKyAgICBkZWYgaXNPcnBoYW5lZChzZWxmKToKKyAgICAgICAg
IiIiIEhhcyBubyBjaGlsZHMgYW5kIG5vIHByb2R1Y3QgIiIiCisgICAgICAgIHJldHVybiBsZW4o
c2VsZi5fY2hpbGRzKSA9M0Q9M0QgMCBhbmQgKHNlbGYuX3Byb2R1Y3QgaXMgTm9uZSkKKworICAg
IGRlZiBnZXRCcmFuY2hlcyhzZWxmKToKKyAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLl9jaGls
ZHM6CisgICAgICAgICAgICB5aWVsZCBicmFuY2gKKyAgICAgICAgICAgIGZvciBzdWJfYnJhbmNo
IGluIGJyYW5jaC5nZXRCcmFuY2hlcygpOgorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yl9icmFu
Y2gKKworICAgIGRlZiB1bmxpbmsoc2VsZik6CisgICAgICAgICIiIiBVbnNldCBvdXIgX3BhcmVu
dCwgYW5kIHJlbW92ZSB1cyBmcm9tIHRoZSBfcGFyZW50Ll9jaGlsZHMgIiIiCisgICAgICAgIGlm
IHNlbGYuaXNSb290KCk6CisgICAgICAgICAgICBzZWxmLmdldFBhcmVudCgpLl9icmFuY2hlcy5y
ZW1vdmUoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ2V0UGFyZW50KCku
X2NoaWxkcy5yZW1vdmUoc2VsZikKKyAgICAgICAgc2VsZi5fcGFyZW50YnJhbmNoID0zRCBOb25l
CisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90eXBlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIEJyYW5jaCBtdXN0IGhhdmUgYSBU
eXBlJykKKyAgICAgICAgaWYgc2VsZi5fdHlwZSBub3QgaW4gc2VsZi5UWVBFUzoKKyAgICAgICAg
ICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBCcmFuY2ggVHlwZSBtdXN0IGJlIG9uZSBvZiAl
cycgJSAnLCAnPQouam9pbihzZWxmLlRZUEVTKSkKKyAgICAgICAgaWYgbm90IHNlbGYuX25hbWU6
CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0EgQnJhbmNoIG11c3QgaGF2ZSBh
IE5hbWUnKQorICAgICAgICBmb3IgYnJhbmNoIGluIHNlbGYuX2NoaWxkczoKKyAgICAgICAgICAg
IGJyYW5jaC52YWxpZGF0ZSgpCisgICAgICAgIGlmIHNlbGYuaXNPcnBoYW5lZCgpOgorICAgICAg
ICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIEJyYW5jaCBtdXN0IGhhdmUgYXQgbGVhc3Qg
YSBzdWItcHJvZHU9CmN0IG9yIHN1Yi1icmFuY2hlcycpCisKKyAgICBkZWYgX19zdHJfXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHNlbGYuX3R5cGUsIHNlbGYuX25hbWUpCisK
KworY2xhc3MgQ1ZSRkZ1bGxQcm9kdWN0TmFtZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwcm9kdWN0aWQsIG5hbWUsIHBhcmVudCwgY3BlPTNETm9uZSk6CisgICAgICAgIHNlbGYu
X3Byb2R1Y3RpZCA9M0QgcHJvZHVjdGlkCisgICAgICAgIHNlbGYuX25hbWUgPTNEIG5hbWUKKyAg
ICAgICAgIyBDYW4gYmUgTm9uZSAoZGlyZWN0bHkgdW5kZXIgdGhlIHRyZWUpLCBhIFByb2R1Y3RC
cmFuY2gsIG9yIGEKKyAgICAgICAgIyBSZWxhdGlvbnNoaXAKKyAgICAgICAgc2VsZi5fcGFyZW50
ID0zRCBwYXJlbnQKKyAgICAgICAgc2VsZi5fY3BlID0zRCBjcGUKKworICAgIGRlZiBpc1Jvb3Qo
c2VsZik6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHNlbGYuX3BhcmVudCwgQ1ZSRlByb2R1
Y3RUcmVlKQorCisgICAgZGVmIGlzUmVsYXRpb25zaGlwKHNlbGYpOgorICAgICAgICByZXR1cm4g
aXNpbnN0YW5jZShzZWxmLl9wYXJlbnQsIENWUkZSZWxhdGlvbnNoaXApCisKKyAgICBkZWYgZ2V0
VHJlZShzZWxmKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5fcGFyZW50LCBDVlJG
UHJvZHVjdEJyYW5jaCk6CisgICAgICAgICAgICByZXR1cm4gW10KKyAgICAgICAgcmV0dXJuIHNl
bGYuX3BhcmVudC5nZXRUcmVlKCkKKworICAgIGRlZiBnZXRQYXJlbnRQYXRoKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLmlzUm9vdCgpIG9yIHNlbGYuaXNSZWxhdGlvbnNoaXAoKToKKyAgICAgICAg
ICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4gc2VsZi5fcGFyZW50LmdldFBhdGgoVHJ1ZSkK
KworICAgIGRlZiBnZXRDdXJyZW50UmVsYXRpb25zaGlwKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LmlzUmVsYXRpb25zaGlwKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFyZW50CisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgdW5saW5rKHNlbGYpOgorICAgICAgICAiIiIgVW5z
ZXQgb3VyIF9wYXJlbnQsIGFuZCByZW1vdmUgdXMgZnJvbSB0aGUgX3BhcmVudC5fY2hpbGRzICIi
IgorICAgICAgICBpZiBzZWxmLmlzUm9vdCgpOgorICAgICAgICAgICAgc2VsZi5fcGFyZW50Ll9w
cm9kdWN0cy5yZW1vdmUoc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Bh
cmVudC5fcHJvZHVjdCA9M0QgTm9uZQorICAgICAgICBzZWxmLl9wYXJlbnQgPTNEIE5vbmUKKwor
ICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb2R1Y3RpZDoK
KyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBQcm9kdWN0IG11c3QgaGF2ZSBh
IFByb2R1Y3RJRCcpCisgICAgICAgIGlmIG5vdCBzZWxmLl9uYW1lOgorICAgICAgICAgICAgcmFp
c2UgVmFsaWRhdGlvbkVycm9yKCdBIFByb2R1Y3QgbXVzdCBoYXZlIGEgTmFtZScpCisKKyAgICBk
ZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLl9wcm9k
dWN0aWQsIHNlbGYuX25hbWUpCisKKworY2xhc3MgQ1ZSRlJlbGF0aW9uc2hpcChvYmplY3QpOgor
ICAgIFRZUEVTID0zRCAoJ0RlZmF1bHQgQ29tcG9uZW50IE9mJywgJ09wdGlvbmFsIENvbXBvbmVu
dCBPZicsCisgICAgICAgICAgICAgJ0V4dGVybmFsIENvbXBvbmVudCBPZicsICdJbnN0YWxsZWQg
T24nLCAnSW5zdGFsbGVkIFdpdGgnKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9kdWN0cmVm
LCByZWx0eXBlLCByZWxhdGVzdG9wcm9kdWN0cmVmKToKKyAgICAgICAgc2VsZi5fcHJvZHVjdHJl
ZmVyZW5jZSA9M0QgcHJvZHVjdHJlZgorICAgICAgICBzZWxmLl9yZWxhdGlvbnR5cGUgPTNEIHJl
bHR5cGUKKyAgICAgICAgc2VsZi5fcmVsYXRlc3RvcHJvZHVjdHJlZmVyZW5jZSA9M0QgcmVsYXRl
c3RvcHJvZHVjdHJlZgorICAgICAgICBzZWxmLl9wcm9kdWN0ID0zRCBOb25lCisKKyAgICBkZWYg
Z2V0UGFyZW50KHNlbGYpOgorICAgICAgICAiIiIgQWxsIHBhcmVudCBlbGVtZW50IG9mIGEgRnVs
bFByb2R1Y3ROYW1lIHNob3VsZCBpbXBsZW1lbnQgdGhhdAorICAgICAgICBtZXRob2QgIiIiCisg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaXNPcnBoYW5lZChzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3Byb2R1Y3QgaXMgTm9uZQorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5fcHJvZHVjdHJlZmVyZW5jZToKKyAgICAgICAgICAgIHJhaXNl
IFZhbGlkYXRpb25FcnJvcignQSBSZWxhdGlvbnNoaXAgbXVzdCBoYXZlIGEgUHJvZHVjdCBSZWZl
PQpyZW5jZScpCisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWxhdGlvbnR5cGU6CisgICAgICAgICAg
ICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0EgUmVsYXRpb25zaGlwIG11c3QgaGF2ZSBhIFJlbGF0
aW9uIFR5cD0KZScpCisgICAgICAgIGlmIHNlbGYuX3JlbGF0aW9udHlwZSBub3QgaW4gc2VsZi5U
WVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignUmVsYXRpb24gVHlwZSBt
dXN0IGJlIG9uZSBvZiAlcycgJSAnLCAnPQouam9pbihzZWxmLlRZUEVTKSkKKyAgICAgICAgaWYg
bm90IHNlbGYuX3JlbGF0ZXN0b3Byb2R1Y3RyZWZlcmVuY2U6CisgICAgICAgICAgICByYWlzZSBW
YWxpZGF0aW9uRXJyb3IoJ0EgUmVsYXRpb25zaGlwIG11c3QgaGF2ZSBhICJSZWxhdGVzIFRvID0K
cHJvZHVjdCBSZWZlcmVuY2UiJykKKyAgICAgICAgaWYgc2VsZi5fcHJvZHVjdHJlZmVyZW5jZSA9
M0Q9M0Qgc2VsZi5fcmVsYXRlc3RvcHJvZHVjdHJlZmVyZW5jZToKKyAgICAgICAgICAgIHJhaXNl
IFZhbGlkYXRpb25FcnJvcignQSBSZWxhdGlvbnNoaXAgY2Fubm90IHJlZmVyZW5jZSB0d2ljZSB0
PQpoZSBzYW1lIFByb2R1Y3QnKQorCisKK2NsYXNzIENWUkZHcm91cChvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBncm91cGlkKToKKyAgICAgICAgc2VsZi5fZ3JvdXBpZCA9M0QgZ3Jv
dXBpZAorICAgICAgICBzZWxmLl9kZXNjcmlwdGlvbiA9M0QgTm9uZQorICAgICAgICBzZWxmLl9w
cm9kdWN0aWRzID0zRCBbXQorCisgICAgZGVmIHNldERlc2NyaXB0aW9uKHNlbGYsIGRlc2NyaXB0
aW9uKToKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPTNEIGRlc2NyaXB0aW9uCisKKyAgICBk
ZWYgYWRkUHJvZHVjdElEKHNlbGYsIHByb2R1Y3RpZCk6CisgICAgICAgIHNlbGYuX3Byb2R1Y3Rp
ZHMuYXBwZW5kKHByb2R1Y3RpZCkKKworICAgIGRlZiBnZXRUaXRsZShzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fZGVzY3JpcHRpb246CisgICAgICAgICAgICByZXR1cm4gIiVzICglZCBwcm9kdWN0
cykiICUgKHNlbGYuX2Rlc2NyaXB0aW9uLCBsZW4oc2VsZi5fcHJvZD0KdWN0aWRzKSkKKyAgICAg
ICAgcmV0dXJuICIjJXMgKCVkIHByb2R1Y3RzKSIgJSAoc2VsZi5fZ3JvdXBpZCwgbGVuKHNlbGYu
X3Byb2R1Y3RpZHMpKQorCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fZ3JvdXBpZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBHcm91
cCBtdXN0IGhhdmUgYSBHcm91cElEJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb2R1Y3RpZHMg
b3IgbGVuKHNlbGYuX3Byb2R1Y3RpZHMpIDwgMjoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRp
b25FcnJvcignQSBHcm91cCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgdHdvIHByb2R1PQpjdHMnKQor
CisKK2NsYXNzIENWUkZWdWxuZXJhYmlsaXR5SUQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgc3lzdGVtbmFtZSwgdmFsdWUpOgorICAgICAgICBzZWxmLl9zeXN0ZW1uYW1lID0zRCBz
eXN0ZW1uYW1lCisgICAgICAgIHNlbGYuX3ZhbHVlID0zRCB2YWx1ZQorCisgICAgZGVmIHZhbGlk
YXRlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc3lzdGVtbmFtZToKKyAgICAgICAgICAg
IHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBWdWxuZXJhYmlsaXR5IElEIG11c3QgaGF2ZSBhIFN5
c3RlbSBOPQphbWUnKQorICAgICAgICBpZiBub3Qgc2VsZi5fdmFsdWU6CisgICAgICAgICAgICBy
YWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0EgVnVsbmVyYWJpbGl0eSBJRCBtdXN0IGhhdmUgYSB2YWx1
ZScpCisKKworY2xhc3MgQ1ZSRlZ1bG5lcmFiaWxpdHkob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgb3JkaW5hbCk6CisgICAgICAgIHNlbGYuX29yZGluYWwgPTNEIG9yZGluYWwKKyAg
ICAgICAgc2VsZi5fdGl0bGUgPTNEIE5vbmUKKyAgICAgICAgc2VsZi5faWQgPTNEIE5vbmUKKyAg
ICAgICAgc2VsZi5fbm90ZXMgPTNEIFtdCisgICAgICAgIHNlbGYuX2Rpc2NvdmVyeWRhdGUgPTNE
IE5vbmUKKyAgICAgICAgc2VsZi5fcmVsZWFzZWRhdGUgPTNEIE5vbmUKKyAgICAgICAgc2VsZi5f
aW52b2x2ZW1lbnRzID0zRCBbXQorICAgICAgICBzZWxmLl9jdmUgPTNEIE5vbmUKKyAgICAgICAg
c2VsZi5fY3dlcyA9M0QgW10KKyAgICAgICAgc2VsZi5fcHJvZHVjdHN0YXR1c2VzID0zRCBbXQor
ICAgICAgICBzZWxmLl90aHJlYXRzID0zRCBbXQorICAgICAgICBzZWxmLl9jdnNzcyA9M0QgW10K
KyAgICAgICAgc2VsZi5fcmVtZWRpYXRpb25zID0zRCBbXQorICAgICAgICBzZWxmLl9yZWZlcmVu
Y2VzID0zRCBbXQorICAgICAgICBzZWxmLl9hY2tub3dsZWRnbWVudHMgPTNEIFtdCisKKyAgICBk
ZWYgc2V0VGl0bGUoc2VsZiwgdGl0bGUpOgorICAgICAgICBzZWxmLl90aXRsZSA9M0QgdGl0bGUK
KworICAgIGRlZiBzZXRJRChzZWxmLCBfaWQpOgorICAgICAgICBzZWxmLl9pZCA9M0QgX2lkCisK
KyAgICBkZWYgYWRkTm90ZShzZWxmLCBub3RlKToKKyAgICAgICAgc2VsZi5fbm90ZXMuYXBwZW5k
KG5vdGUpCisKKyAgICBkZWYgc2V0RGlzY292ZXJ5RGF0ZShzZWxmLCBkYXRlKToKKyAgICAgICAg
c2VsZi5fZGlzY292ZXJ5ZGF0ZSA9M0QgZGF0ZQorCisgICAgZGVmIHNldFJlbGVhc2VEYXRlKHNl
bGYsIGRhdGUpOgorICAgICAgICBzZWxmLl9yZWxlYXNlZGF0ZSA9M0QgZGF0ZQorCisgICAgZGVm
IGFkZEludm9sdmVtZW50KHNlbGYsIGludm9sdmVtZW50KToKKyAgICAgICAgc2VsZi5faW52b2x2
ZW1lbnRzLmFwcGVuZChpbnZvbHZlbWVudCkKKworICAgIGRlZiBzZXRDVkUoc2VsZiwgY3ZlKToK
KyAgICAgICAgc2VsZi5fY3ZlID0zRCBjdmUKKworICAgIGRlZiBhZGRDV0Uoc2VsZiwgY3dlKToK
KyAgICAgICAgc2VsZi5fY3dlcy5hcHBlbmQoY3dlKQorCisgICAgZGVmIGFkZFByb2R1Y3RTdGF0
dXMoc2VsZiwgcHJvZHVjdHN0YXR1cyk6CisgICAgICAgIHNlbGYuX3Byb2R1Y3RzdGF0dXNlcy5h
cHBlbmQocHJvZHVjdHN0YXR1cykKKworICAgIGRlZiBhZGRUaHJlYXQoc2VsZiwgdGhyZWF0KToK
KyAgICAgICAgc2VsZi5fdGhyZWF0cy5hcHBlbmQodGhyZWF0KQorCisgICAgZGVmIGFkZENWU1NT
ZXQoc2VsZiwgY3Zzc19zZXQpOgorICAgICAgICBzZWxmLl9jdnNzcy5hcHBlbmQoY3Zzc19zZXQp
CisKKyAgICBkZWYgYWRkUmVtZWRpYXRpb24oc2VsZiwgcmVtZWRpYXRpb24pOgorICAgICAgICBz
ZWxmLl9yZW1lZGlhdGlvbnMuYXBwZW5kKHJlbWVkaWF0aW9uKQorCisgICAgZGVmIGFkZFJlZmVy
ZW5jZShzZWxmLCByZWYpOgorICAgICAgICBzZWxmLl9yZWZlcmVuY2VzLmFwcGVuZChyZWYpCisK
KyAgICBkZWYgYWRkQWNrbm93bGVkZ21lbnQoc2VsZiwgYWNrKToKKyAgICAgICAgc2VsZi5fYWNr
bm93bGVkZ21lbnRzLmFwcGVuZChhY2spCisKKyAgICBkZWYgZ2V0VGl0bGUoc2VsZik6CisgICAg
ICAgICIiIiByZXR1cm4gc29tZXRoaW5nIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSB0aXRsZSAiIiIK
KyAgICAgICAgaWYgc2VsZi5fdGl0bGU6CisgICAgICAgICAgICBpZiBzZWxmLl9pZDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYuX3RpdGxlLCBzZWxmLl9pZC5fdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdGl0bGUKKyAgICAgICAgaWYgc2VsZi5faWQ6
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faWQuX3ZhbHVlCisgICAgICAgIHJldHVybiAiIyVk
IiAlIHNlbGYuX29yZGluYWwKKworICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBwcm9kdWN0aWRzLCBn
cm91cGlkcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9vcmRpbmFsOgorICAgICAgICAgICAgcmFp
c2UgVmFsaWRhdGlvbkVycm9yKCdBIFZ1bG5lcmFiaWxpdHkgbXVzdCBoYXZlIGFuIG9yZGluYWwn
KQorICAgICAgICBpZiBzZWxmLl9pZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2lk
LnZhbGlkYXRlKCkKKyAgICAgICAgb3JkaW5hbHMgPTNEIHNldCgpCisgICAgICAgIGZvciBub3Rl
IGluIHNlbGYuX25vdGVzOgorICAgICAgICAgICAgbm90ZS52YWxpZGF0ZSgpCisgICAgICAgICAg
ICBpZiBub3RlLl9vcmRpbmFsIGluIG9yZGluYWxzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZh
bGlkYXRpb25FcnJvcignVnVsbmVyYWJpbGl0eSBOb3RlIE9yZGluYWwgJWQgZHVwbGk9CmNhdGVk
JyAlIG5vdGUuX29yZGluYWwpCisgICAgICAgICAgICBvcmRpbmFscy5hZGQobm90ZS5fb3JkaW5h
bCkKKyAgICAgICAgZm9yIGludm9sdmVtZW50IGluIHNlbGYuX2ludm9sdmVtZW50czoKKyAgICAg
ICAgICAgIGludm9sdmVtZW50LnZhbGlkYXRlKCkKKyAgICAgICAgZm9yIGN3ZSBpbiBzZWxmLl9j
d2VzOgorICAgICAgICAgICAgY3dlLnZhbGlkYXRlKCkKKyAgICAgICAgZm9yIHN0YXR1cyBpbiBz
ZWxmLl9wcm9kdWN0c3RhdHVzZXM6CisgICAgICAgICAgICBzdGF0dXMudmFsaWRhdGUocHJvZHVj
dGlkcykKKyAgICAgICAgZm9yIHRocmVhdCBpbiBzZWxmLl90aHJlYXRzOgorICAgICAgICAgICAg
dGhyZWF0LnZhbGlkYXRlKHByb2R1Y3RpZHMsIGdyb3VwaWRzKQorICAgICAgICBmb3IgY3ZzcyBp
biBzZWxmLl9jdnNzczoKKyAgICAgICAgICAgIGN2c3MudmFsaWRhdGUocHJvZHVjdGlkcykKKyAg
ICAgICAgZm9yIHJlbWVkaWF0aW9uIGluIHNlbGYuX3JlbWVkaWF0aW9uczoKKyAgICAgICAgICAg
IHJlbWVkaWF0aW9uLnZhbGlkYXRlKHByb2R1Y3RpZHMsIGdyb3VwaWRzKQorICAgICAgICBmb3Ig
cmVmZXJlbmNlIGluIHNlbGYuX3JlZmVyZW5jZXM6CisgICAgICAgICAgICByZWZlcmVuY2UudmFs
aWRhdGUoKQorICAgICAgICBmb3IgYWNrbm93bGVkZ21lbnQgaW4gc2VsZi5fYWNrbm93bGVkZ21l
bnRzOgorICAgICAgICAgICAgYWNrbm93bGVkZ21lbnQudmFsaWRhdGUoKQorCisKKworY2xhc3Mg
Q1ZSRkludm9sdmVtZW50KG9iamVjdCk6CisgICAgUEFSVElFUyA9M0QgQ1ZSRlB1Ymxpc2hlci5U
WVBFUworICAgIFNUQVRVU0VTID0zRCAoJ09wZW4nLCAnRGlzcHV0ZWQnLCAnSW4gUHJvZ3Jlc3Mn
LCAnQ29tcGxldGVkJywKKyAgICAgICAgICAgICAgICAnQ29udGFjdCBBdHRlbXB0ZWQnLCAnTm90
IENvbnRhY3RlZCcpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnR5LCBzdGF0dXMpOgorICAg
ICAgICBzZWxmLl9wYXJ0eSA9M0QgcGFydHkKKyAgICAgICAgc2VsZi5fc3RhdHVzID0zRCBzdGF0
dXMKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPTNEIE5vbmUKKworICAgIGRlZiBzZXREZXNj
cmlwdGlvbihzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID0z
RCBkZXNjcmlwdGlvbgorCisgICAgZGVmIGdldFRpdGxlKHNlbGYpOgorICAgICAgICByZXR1cm4g
IkZyb20gJXM6ICVzIiAlIChzZWxmLl9wYXJ0eSwgc2VsZi5fc3RhdHVzKQorCisgICAgZGVmIHZh
bGlkYXRlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGFydHk6CisgICAgICAgICAgICBy
YWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0FuIEludm9sdmVtZW50IG11c3QgaGF2ZSBhIFBhcnR5JykK
KyAgICAgICAgaWYgc2VsZi5fcGFydHkgbm90IGluIHNlbGYuUEFSVElFUzoKKyAgICAgICAgICAg
IHJhaXNlIFZhbGlkYXRpb25FcnJvcigiQW4gSW52b2x2ZW1lbnQncyBQYXJ0eSBtdXN0IGJlIG9u
ZSBvZiAlPQpzIiAlICcsICcuam9pbihzZWxmLlBBUlRJRVMpKQorICAgICAgICBpZiBub3Qgc2Vs
Zi5fc3RhdHVzOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBbiBJbnZvbHZl
bWVudCBtdXN0IGhhdmUgYSBTdGF0dXMnKQorICAgICAgICBpZiBzZWxmLl9zdGF0dXMgbm90IGlu
IHNlbGYuU1RBVFVTRVM6CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoIkFuIElu
dm9sdmVtZW50J3MgU3RhdHVzIG11c3QgYmUgb25lIG9mID0KJXMiICUgJywgJy5qb2luKHNlbGYu
U1RBVFVTRVMpKQorCisKK2NsYXNzIENWUkZDV0Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgX2lkLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX2lkID0zRCBfaWQKKyAgICAgICAgc2Vs
Zi5fdmFsdWUgPTNEIHZhbHVlCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGlm
IG5vdCBzZWxmLl9pZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBDV0Ug
bXVzdCBoYXZlIGFuIElEJykKKyAgICAgICAgaWYgbm90IHNlbGYuX3ZhbHVlOgorICAgICAgICAg
ICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIENXRSBtdXN0IGhhdmUgYSBkZXNjcmlwdGlvbicp
CisKKworY2xhc3MgQ1ZSRlByb2R1Y3RTdGF0dXMob2JqZWN0KToKKyAgICBUWVBFUyA9M0QgKCdG
aXJzdCBBZmZlY3RlZCcsICdLbm93biBBZmZlY3RlZCcsICdLbm93biBOb3QgQWZmZWN0ZWQnLAor
ICAgICAgICAgICAgICdGaXJzdCBGaXhlZCcsICdGaXhlZCcsICdSZWNvbW1lbmRlZCcsICdMYXN0
IEFmZmVjdGVkJykKKyAgICBkZWYgX19pbml0X18oc2VsZiwgX3R5cGUpOgorICAgICAgICBzZWxm
Ll90eXBlID0zRCBfdHlwZQorICAgICAgICBzZWxmLl9wcm9kdWN0aWRzID0zRCBbXQorCisgICAg
ZGVmIGFkZFByb2R1Y3RJRChzZWxmLCBwcm9kdWN0aWQpOgorICAgICAgICBzZWxmLl9wcm9kdWN0
aWRzLmFwcGVuZChwcm9kdWN0aWQpCisKKyAgICBkZWYgZ2V0VGl0bGUoc2VsZik6CisgICAgICAg
IHJldHVybiAiJXM6ICVkIHByb2R1Y3RzIiAlIChzZWxmLl90eXBlLCBsZW4oc2VsZi5fcHJvZHVj
dGlkcykpCisKKyAgICBkZWYgdmFsaWRhdGUoc2VsZiwgcHJvZHVjdGlkcyk6CisgICAgICAgIGlm
IG5vdCBzZWxmLl90eXBlOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIFBy
b2R1Y3QgU3RhdHVzIG11c3QgaGF2ZSBhIFR5cGUnKQorICAgICAgICBpZiBzZWxmLl90eXBlIG5v
dCBpbiBzZWxmLlRZUEVTOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCJBIFBy
b2R1Y3QgU3RhdHVzJyBUeXBlIG11c3QgYmUgb25lIG9mICU9CnMiICUgJywgJy5qb2luKHNlbGYu
VFlQRVMpKQorICAgICAgICBpZiBsZW4oc2VsZi5fcHJvZHVjdGlkcykgPCAxOgorICAgICAgICAg
ICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIFByb2R1Y3QgU3RhdHVzIG11c3QgbWVudGlvbiBh
dCBsZWFzdCA9Cm9uZSBQcm9kdWN0JykKKyAgICAgICAgZm9yIHByb2R1Y3RpZCBpbiBzZWxmLl9w
cm9kdWN0aWRzOgorICAgICAgICAgICAgaWYgcHJvZHVjdGlkIG5vdCBpbiBwcm9kdWN0aWRzOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignVW5rbm93biBQcm9kdWN0SUQ6
ICVzJyAlIHByb2R1Y3RpZCkKKworCitjbGFzcyBDVlJGVGhyZWF0KG9iamVjdCk6CisgICAgVFlQ
RVMgPTNEICgnSW1wYWN0JywgJ0V4cGxvaXQgU3RhdHVzJywgJ1RhcmdldCBTZXQnKQorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBfdHlwZSwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLl90eXBl
ID0zRCBfdHlwZQorICAgICAgICBzZWxmLl9kZXNjcmlwdGlvbiA9M0QgZGVzY3JpcHRpb24KKyAg
ICAgICAgc2VsZi5fZGF0ZSA9M0QgTm9uZQorICAgICAgICBzZWxmLl9wcm9kdWN0aWRzID0zRCBb
XQorICAgICAgICBzZWxmLl9ncm91cGlkcyA9M0QgW10KKworICAgIGRlZiBzZXREYXRlKHNlbGYs
IGRhdGUpOgorICAgICAgICBzZWxmLl9kYXRlID0zRCBkYXRlCisKKyAgICBkZWYgYWRkUHJvZHVj
dElEKHNlbGYsIHByb2R1Y3RpZCk6CisgICAgICAgIHNlbGYuX3Byb2R1Y3RpZHMuYXBwZW5kKHBy
b2R1Y3RpZCkKKworICAgIGRlZiBhZGRHcm91cElEKHNlbGYsIGdyb3VwaWQpOgorICAgICAgICBz
ZWxmLl9ncm91cGlkcy5hcHBlbmQoZ3JvdXBpZCkKKworICAgIGRlZiBnZXRUaXRsZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3R5cGUKKworICAgIGRlZiB2YWxpZGF0ZShzZWxmLCBwcm9k
dWN0aWRzLCBncm91cGlkcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl90eXBlOgorICAgICAgICAg
ICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIFRocmVhdCBtdXN0IGhhdmUgYSBUeXBlJykKKyAg
ICAgICAgaWYgc2VsZi5fdHlwZSBub3QgaW4gc2VsZi5UWVBFUzoKKyAgICAgICAgICAgIHJhaXNl
IFZhbGlkYXRpb25FcnJvcigiQSBUaHJlYXQncyBUeXBlIG11c3QgYmUgb25lIG9mICVzIiAlICcs
PQogJy5qb2luKHNlbGYuVFlQRVMpKQorICAgICAgICBpZiBub3Qgc2VsZi5fZGVzY3JpcHRpb246
CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0EgVGhyZWF0IG11c3QgaGF2ZSBh
IERlc2NyaXB0aW9uJykKKyAgICAgICAgZm9yIHByb2R1Y3RpZCBpbiBzZWxmLl9wcm9kdWN0aWRz
OgorICAgICAgICAgICAgaWYgcHJvZHVjdGlkIG5vdCBpbiBwcm9kdWN0aWRzOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignVW5rbm93biBQcm9kdWN0SUQ6ICVzJyAlIHBy
b2R1Y3RpZCkKKyAgICAgICAgZm9yIGdyb3VwaWQgaW4gc2VsZi5fZ3JvdXBpZHM6CisgICAgICAg
ICAgICBpZiBncm91cGlkIG5vdCBpbiBncm91cGlkczoKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWxpZGF0aW9uRXJyb3IoJ1Vua25vd24gR3JvdXBJRDogJXMnICUgZ3JvdXBpZCkKKworCitjbGFz
cyBDVlJGQ1ZTU1NldChvYmplY3QpOgorICAgICMgVG8gZGV0ZXJtaW5lIHRoZSBiYXNlIFNjb3Jl
CisgICAgVkFMVUVTID0zRCB7J0FWJzogeydMJzowLjM5NSwgJ0EnOjAuNjQ2LCAnTic6MS4wfSwK
KyAgICAgICAgICAgICAgJ0FDJzogeydIJzowLjM1LCAnTSc6MC42MSAsJ0wnOjAuNzF9LAorICAg
ICAgICAgICAgICAnQXUnOiB7J00nOjAuNDUsICdTJzowLjU2LCAnTic6MC43MDR9LAorICAgICAg
ICAgICAgICAnQyc6IHsnTic6MC4wLCAnUCc6MC4yNzUsICdDJzowLjY2fSwKKyAgICAgICAgICAg
ICAgJ0knOiB7J04nOjAuMCwgJ1AnOjAuMjc1LCAnQyc6MC42Nn0sCisgICAgICAgICAgICAgICdB
JzogeydOJzowLjAsICdQJzowLjI3NSwgJ0MnOjAuNjZ9fQorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBiYXNlc2NvcmUpOgorICAgICAgICBzZWxmLl9iYXNlc2NvcmUgPTNEIGJhc2VzY29yZQorICAg
ICAgICBzZWxmLl90ZW1wb3JhbHNjb3JlID0zRCBOb25lCisgICAgICAgIHNlbGYuX2Vudmlyb25t
ZW50YWxzY29yZSA9M0QgTm9uZQorICAgICAgICBzZWxmLl92ZWN0b3IgPTNEIE5vbmUKKyAgICAg
ICAgc2VsZi52ZWN0b3IgPTNEIE5vbmUKKyAgICAgICAgc2VsZi5fcHJvZHVjdGlkcyA9M0QgW10K
KworICAgIGRlZiBzZXRUZW1wb3JhbFNjb3JlKHNlbGYsIHRlbXBzY29yZSk6CisgICAgICAgIHNl
bGYuX3RlbXBvcmFsc2NvcmUgPTNEIHRlbXBzY29yZQorCisgICAgZGVmIHNldEVudmlyb25tZW50
YWxTY29yZShzZWxmLCBlbnZzY29yZSk6CisgICAgICAgIHNlbGYuX2Vudmlyb25tZW50YWxzY29y
ZSA9M0QgZW52c2NvcmUKKworICAgIGRlZiBzZXRWZWN0b3Ioc2VsZiwgdmVjdG9yKToKKyAgICAg
ICAgc2VsZi5fdmVjdG9yID0zRCB2ZWN0b3IKKyAgICAgICAgaWYgdmVjdG9yIGlzIE5vbmU6Cisg
ICAgICAgICAgICBzZWxmLnZlY3RvciA9M0QgdmVjdG9yCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi52ZWN0b3IgPTNEIHt9CisgICAgICAgICAgICBm
b3IgY29tcG9uZW50IGluIHZlY3Rvcls6MjZdLnNwbGl0KCcvJyk6CisgICAgICAgICAgICAgICAg
bmFtZSwgdmFsdWUgPTNEIGNvbXBvbmVudC5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgc2Vs
Zi52ZWN0b3JbbmFtZV0gPTNEIHNlbGYuVkFMVUVTW25hbWVdW3ZhbHVlXQorICAgICAgICBleGNl
cHQgKEtleUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudmVjdG9yID0zRCBO
b25lCisKKyAgICBkZWYgYWRkUHJvZHVjdElEKHNlbGYsIHByb2R1Y3RpZCk6CisgICAgICAgIHNl
bGYuX3Byb2R1Y3RpZHMuYXBwZW5kKHByb2R1Y3RpZCkKKworICAgIGRlZiBiYXNlU2NvcmUoc2Vs
Zik6CisgICAgICAgIHYgPTNEIHNlbGYudmVjdG9yICMgbWFrZSBhbiBhbGlhcyBmb3Igc2hvcnRl
ciBsaW5lcworICAgICAgICBleHBsb2l0YWJpbGl0eSA9M0QgMjAgKiB2WydBViddICogdlsnQUMn
XSAqIHZbJ0F1J10KKyAgICAgICAgaW1wYWN0ID0zRCAxMC40MSAqICgxIC0gKDEgLSB2WydDJ10p
ICogKDEgLSB2WydJJ10pICogKDEgLSB2WydBJ10pKQorICAgICAgICBkZWYgZihpKTogcmV0dXJu
IDAgaWYgaSA9M0Q9M0QgMCBlbHNlIDEuMTc2CisgICAgICAgIHJldHVybiAoKDAuNiAqIGltcGFj
dCkgKyAoMC40ICogZXhwbG9pdGFiaWxpdHkpIC0gMS41KSAqIGYoaW1wYWN0KQorCisgICAgZGVm
IHZhbGlkYXRlKHNlbGYsIHByb2R1Y3RpZHMpOgorICAgICAgICBpZiBub3Qgc2VsZi5fYmFzZXNj
b3JlOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdBIENWU1MgU2NvcmUgU2V0
IG11c3QgaGF2ZSBhIEJhc2UgU2NvcmU9CicpCisgICAgICAgIGlmIHNlbGYuX3ZlY3RvciBhbmQg
bm90IHNlbGYudmVjdG9yOgorICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdTeW50
YXggRXJyb3IgaW4gQ1ZTUyBWZWN0b3InKQorICAgICAgICBpZiBhYnMoc2VsZi5fYmFzZXNjb3Jl
IC0gc2VsZi5iYXNlU2NvcmUoKSkgPj0zRCAwLjA1OgorICAgICAgICAgICAgcmFpc2UgVmFsaWRh
dGlvbkVycm9yKCdJbmNvbnNpc3RlbmN5IGluIENWU1MgU2NvcmUgU2V0IGJldHdlZW49CiBWZWN0
b3IgKCVmKSBhbmQgQmFzZSBTY29yZSAoJWYpJyAlIChzZWxmLmJhc2VTY29yZSgpLCBzZWxmLl9i
YXNlc2NvcmUpKQorICAgICAgICBmb3IgcHJvZHVjdGlkIGluIHNlbGYuX3Byb2R1Y3RpZHM6Cisg
ICAgICAgICAgICBpZiBwcm9kdWN0aWQgbm90IGluIHByb2R1Y3RpZHM6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdVbmtub3duIFByb2R1Y3RJRDogJXMnICUgcHJvZHVj
dGlkKQorCisKK2NsYXNzIENWUkZSZW1lZGlhdGlvbihvYmplY3QpOgorICAgIFRZUEVTID0zRCAo
J1dvcmthcm91bmQnLCAnTWl0aWdhdGlvbicsICdWZW5kb3IgRml4JywgJ05vbmUgQXZhaWxhYmxl
JywKKyAgICAgICAgICAgICAnV2lsbCBOb3QgRml4JykKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
X3R5cGUsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5fdHlwZSA9M0QgX3R5cGUKKyAgICAg
ICAgc2VsZi5fZGVzY3JpcHRpb24gPTNEIGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuX2RhdGUg
PTNEIE5vbmUKKyAgICAgICAgc2VsZi5fZW50aXRsZW1lbnQgPTNEIE5vbmUKKyAgICAgICAgc2Vs
Zi5fdXJsID0zRCBOb25lCisgICAgICAgIHNlbGYuX3Byb2R1Y3RpZHMgPTNEIFtdCisgICAgICAg
IHNlbGYuX2dyb3VwaWRzID0zRCBbXQorCisgICAgZGVmIHNldERhdGUoc2VsZiwgZGF0ZSk6Cisg
ICAgICAgIHNlbGYuX2RhdGUgPTNEIGRhdGUKKworICAgIGRlZiBzZXRFbnRpdGxlbWVudChzZWxm
LCBlbnRpdGxlbWVudCk6CisgICAgICAgIHNlbGYuX2VudGl0bGVtZW50ID0zRCBlbnRpdGxlbWVu
dAorCisgICAgZGVmIHNldFVSTChzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLl91cmwgPTNEIHVy
bAorCisgICAgZGVmIGFkZFByb2R1Y3RJRChzZWxmLCBwcm9kdWN0aWQpOgorICAgICAgICBzZWxm
Ll9wcm9kdWN0aWRzLmFwcGVuZChwcm9kdWN0aWQpCisKKyAgICBkZWYgYWRkR3JvdXBJRChzZWxm
LCBncm91cGlkKToKKyAgICAgICAgc2VsZi5fZ3JvdXBpZHMuYXBwZW5kKGdyb3VwaWQpCisKKyAg
ICBkZWYgZ2V0VGl0bGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90eXBlCisKKyAgICBk
ZWYgdmFsaWRhdGUoc2VsZiwgcHJvZHVjdGlkcywgZ3JvdXBpZHMpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fdHlwZToKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignQSBSZW1lZGlh
dGlvbiBtdXN0IGhhdmUgYSBUeXBlJykKKyAgICAgICAgaWYgc2VsZi5fdHlwZSBub3QgaW4gc2Vs
Zi5UWVBFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcigiQSBSZW1lZGlhdGlv
bidzIFR5cGUgbXVzdCBiZSBvbmUgb2YgJXMiPQogJSAnLCAnLmpvaW4oc2VsZi5UWVBFUykpCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9kZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbGlk
YXRpb25FcnJvcignQSBSZW1lZGlhdGlvbiBtdXN0IGhhdmUgYSBEZXNjcmlwdGlvbicpCisgICAg
ICAgIGZvciBwcm9kdWN0aWQgaW4gc2VsZi5fcHJvZHVjdGlkczoKKyAgICAgICAgICAgIGlmIHBy
b2R1Y3RpZCBub3QgaW4gcHJvZHVjdGlkczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWxpZGF0
aW9uRXJyb3IoJ1Vua25vd24gUHJvZHVjdElEOiAlcycgJSBwcm9kdWN0aWQpCisgICAgICAgIGZv
ciBncm91cGlkIGluIHNlbGYuX2dyb3VwaWRzOgorICAgICAgICAgICAgaWYgZ3JvdXBpZCBub3Qg
aW4gZ3JvdXBpZHM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdVbmtu
b3duIEdyb3VwSUQ6ICVzJyAlIGdyb3VwaWQpCisKK2NsYXNzIENWUkYob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdGl0bGUsIF90eXBlKToKKyAgICAgICAgc2VsZi5fdGl0bGUgPTNE
IHRpdGxlCisgICAgICAgIHNlbGYuX3R5cGUgPTNEIF90eXBlCisgICAgICAgIHNlbGYuX3B1Ymxp
c2hlciA9M0QgTm9uZQorICAgICAgICBzZWxmLl90cmFja2luZyA9M0QgTm9uZQorICAgICAgICBz
ZWxmLl9ub3RlcyA9M0QgW10KKyAgICAgICAgc2VsZi5fZGlzdHJpYnV0aW9uID0zRCBOb25lCisg
ICAgICAgIHNlbGYuX3JlZmVyZW5jZXMgPTNEIFtdCisgICAgICAgIHNlbGYuX2Fja25vd2xlZGdt
ZW50cyA9M0QgW10KKyAgICAgICAgc2VsZi5fcHJvZHVjdHRyZWUgPTNEIE5vbmUKKyAgICAgICAg
c2VsZi5fdnVsbmVyYWJpbGl0aWVzID0zRCBbXQorCisgICAgZGVmIHNldFB1Ymxpc2hlcihzZWxm
LCBwdWJsaXNoZXIpOgorICAgICAgICBzZWxmLl9wdWJsaXNoZXIgPTNEIHB1Ymxpc2hlcgorCisg
ICAgZGVmIHNldFRyYWNraW5nKHNlbGYsIHRyYWNraW5nKToKKyAgICAgICAgc2VsZi5fdHJhY2tp
bmcgPTNEIHRyYWNraW5nCisKKyAgICBkZWYgYWRkTm90ZShzZWxmLCBub3RlKToKKyAgICAgICAg
c2VsZi5fbm90ZXMuYXBwZW5kKG5vdGUpCisKKyAgICBkZWYgc2V0RGlzdHJpYnV0aW9uKHNlbGYs
IGRpc3RyaWJ1dGlvbik6CisgICAgICAgIHNlbGYuX2Rpc3RyaWJ1dGlvbiA9M0QgZGlzdHJpYnV0
aW9uCisKKyAgICBkZWYgYWRkUmVmZXJlbmNlKHNlbGYsIHJlZik6CisgICAgICAgIHNlbGYuX3Jl
ZmVyZW5jZXMuYXBwZW5kKHJlZikKKworICAgIGRlZiBhZGRBY2tub3dsZWRnbWVudChzZWxmLCBh
Y2spOgorICAgICAgICBzZWxmLl9hY2tub3dsZWRnbWVudHMuYXBwZW5kKGFjaykKKworICAgIGRl
ZiBjcmVhdGVQcm9kdWN0VHJlZShzZWxmKToKKyAgICAgICAgIiIiIG9ubHkgZG9uZSBpZiB0aGUg
ZWxlbWVudCBpcyB0aGVyZSAiIiIKKyAgICAgICAgc2VsZi5fcHJvZHVjdHRyZWUgPTNEIENWUkZQ
cm9kdWN0VHJlZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9wcm9kdWN0dHJlZQorCisgICAgZGVm
IGFkZFZ1bG5lcmFiaWxpdHkoc2VsZiwgdnVsbik6CisgICAgICAgIHNlbGYuX3Z1bG5lcmFiaWxp
dGllcy5hcHBlbmQodnVsbikKKworICAgIGRlZiBnZXRQcm9kdWN0Rm9ySUQoc2VsZiwgcHJvZHVj
dGlkKToKKyAgICAgICAgaWYgc2VsZi5fcHJvZHVjdHRyZWUgaXMgTm9uZToKKyAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ05vIFByb2R1Y3RUcmVlJykKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3Byb2R1Y3R0cmVlLmdldFByb2R1Y3RGb3JJRChwcm9kdWN0aWQpCisKKyAgICBkZWYgZ2V0R3Jv
dXBGb3JJRChzZWxmLCBncm91cGlkKToKKyAgICAgICAgaWYgc2VsZi5fcHJvZHVjdHRyZWUgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIFByb2R1Y3RUcmVlJykKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3Byb2R1Y3R0cmVlLmdldEdyb3VwRm9ySUQoZ3JvdXBpZCkKKwor
ICAgIGRlZiBnZXRIaWdoZXN0Q1ZTUyhzZWxmKToKKyAgICAgICAgaGlnaGVzdEJhc2VTY29yZSA9
M0QgMAorICAgICAgICBoaWdoZXN0ID0zRCBOb25lCisgICAgICAgIGZvciB2dWxuZXJhYmlsaXR5
IGluIHNlbGYuX3Z1bG5lcmFiaWxpdGllczoKKyAgICAgICAgICAgIGZvciBjdnNzIGluIHZ1bG5l
cmFiaWxpdHkuX2N2c3NzOgorICAgICAgICAgICAgICAgIGlmIGN2c3MuX2Jhc2VzY29yZSA8PTNE
IGhpZ2hlc3RCYXNlU2NvcmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAgICAgaGlnaGVzdEJhc2VTY29yZSA9M0QgY3Zzcy5fYmFzZXNjb3JlCisgICAgICAgICAg
ICAgICAgaGlnaGVzdCA9M0QgY3ZzcworICAgICAgICByZXR1cm4gaGlnaGVzdAorCisgICAgZGVm
IGdldFByb2R1Y3RMaXN0KHNlbGYsIHR5cGVfPTNEJ0ZpeGVkJyk6CisgICAgICAgIHByb2R1Y3Rz
ID0zRCBzZXQoKQorICAgICAgICBpZiB0eXBlXyA9M0Q9M0QgJ0ZpeGVkJzoKKyAgICAgICAgICAg
ICMgRmlyc3QgdHJ5IHRocm91Z2ggdGhlIFJlbWVkaWF0aW9uCisgICAgICAgICAgICBmb3IgdnVs
bmVyYWJpbGl0eSBpbiBzZWxmLl92dWxuZXJhYmlsaXRpZXM6CisgICAgICAgICAgICAgICAgZm9y
IHJlbWVkaWF0aW9uIGluIHZ1bG5lcmFiaWxpdHkuX3JlbWVkaWF0aW9uczoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgcmVtZWRpYXRpb24uX3R5cGUgIT0zRCAnVmVuZG9yIEZpeCc6CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvZHVj
dGlkIGluIHJlbWVkaWF0aW9uLl9wcm9kdWN0aWRzOgorICAgICAgICAgICAgICAgICAgICAgICAg
cHJvZHVjdHMuYWRkKHByb2R1Y3RpZCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGdyb3VwaWQg
aW4gcmVtZWRpYXRpb24uX2dyb3VwaWRzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBy
b2R1Y3RpZCBpbiBzZWxmLmdldEdyb3VwRm9ySUQoZ3JvdXBpZCkuX3Byb2Q9CnVjdGlkczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0cy5hZGQocHJvZHVjdGlkKQorICAgICAg
ICBpZiBub3QgcHJvZHVjdHM6CisgICAgICAgICAgICAjIElmIG5vdGhpbmcgdGhlcmUsIHRyeSB0
aHJvdWdoIHRoZSBwcm9kdWN0c3RhdHVzZXMKKyAgICAgICAgICAgIGZvciB2dWxuZXJhYmlsaXR5
IGluIHNlbGYuX3Z1bG5lcmFiaWxpdGllczoKKyAgICAgICAgICAgICAgICBmb3Igc3RhdHVzIGlu
IHZ1bG5lcmFiaWxpdHkuX3Byb2R1Y3RzdGF0dXNlczoKKyAgICAgICAgICAgICAgICAgICAgaWYg
c3RhdHVzLl90eXBlICE9M0QgdHlwZV86CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgICAgICAgICBmb3IgcHJvZHVjdGlkIGluIHN0YXR1cy5fcHJvZHVjdGlk
czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RzLmFkZChwcm9kdWN0aWQpCisgICAg
ICAgIHJldHVybiBzZXQoc2VsZi5nZXRQcm9kdWN0Rm9ySUQocCkgZm9yIHAgaW4gcHJvZHVjdHMp
CisKKyAgICBkZWYgZ2V0Tm90ZShzZWxmLCBvcmRpbmFsKToKKyAgICAgICAgZm9yIG5vdGUgaW4g
c2VsZi5fbm90ZXM6CisgICAgICAgICAgICBpZiBub3RlLl9vcmRpbmFsID0zRD0zRCBvcmRpbmFs
OgorICAgICAgICAgICAgICAgIHJldHVybiBub3RlCisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgdmFsaWRhdGUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90aXRsZToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbGlkYXRpb25FcnJvcignRG9jdW1lbnQgVGl0bGUgY2Fubm90IGJlIGVt
cHR5JykKKyAgICAgICAgaWYgbm90IHNlbGYuX3R5cGU6CisgICAgICAgICAgICByYWlzZSBWYWxp
ZGF0aW9uRXJyb3IoJ0RvY3VtZW50IFR5cGUgY2Fubm90IGJlIGVtcHR5JykKKyAgICAgICAgaWYg
c2VsZi5fcHVibGlzaGVyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJy
b3IoJ0RvY3VtZW50IFB1Ymxpc2hlciBuZWVkcyB0byBiZSBzZXQnKQorICAgICAgICBzZWxmLl9w
dWJsaXNoZXIudmFsaWRhdGUoKQorICAgICAgICBpZiBzZWxmLl90cmFja2luZyBpcyBOb25lOgor
ICAgICAgICAgICAgcmFpc2UgVmFsaWRhdGlvbkVycm9yKCdEb2N1bWVudCBUcmFja2luZyBuZWVk
cyB0byBiZSBzZXQnKQorICAgICAgICBzZWxmLl90cmFja2luZy52YWxpZGF0ZSgpCisgICAgICAg
IG9yZGluYWxzID0zRCBzZXQoKQorICAgICAgICBmb3Igbm90ZSBpbiBzZWxmLl9ub3RlczoKKyAg
ICAgICAgICAgIG5vdGUudmFsaWRhdGUoKQorICAgICAgICAgICAgaWYgbm90ZS5fb3JkaW5hbCBp
biBvcmRpbmFsczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ0RvY3Vt
ZW50IE5vdGUgb3JkaW5hbCAlZCBpcyBpc3N1ZWQgPQp0d2ljZScgJSBub3RlLl9vcmRpbmFsKQor
ICAgICAgICAgICAgb3JkaW5hbHMuYWRkKG5vdGUuX29yZGluYWwpCisgICAgICAgIGZvciByZWZl
cmVuY2UgaW4gc2VsZi5fcmVmZXJlbmNlczoKKyAgICAgICAgICAgIHJlZmVyZW5jZS52YWxpZGF0
ZSgpCisgICAgICAgIGZvciBhY2tub3dsZWRnbWVudCBpbiBzZWxmLl9hY2tub3dsZWRnbWVudHM6
CisgICAgICAgICAgICBhY2tub3dsZWRnbWVudC52YWxpZGF0ZSgpCisgICAgICAgIHByb2R1Y3Rp
ZHMgPTNEIHNldCgpCisgICAgICAgIGdyb3VwaWRzID0zRCBzZXQoKQorICAgICAgICBpZiBzZWxm
Ll9wcm9kdWN0dHJlZToKKyAgICAgICAgICAgIHByb2R1Y3RpZHMsIGdyb3VwaWRzID0zRCBzZWxm
Ll9wcm9kdWN0dHJlZS52YWxpZGF0ZSgpCisgICAgICAgIG9yZGluYWxzID0zRCBzZXQoKQorICAg
ICAgICBmb3IgdnVsbmVyYWJpbGl0eSBpbiBzZWxmLl92dWxuZXJhYmlsaXRpZXM6CisgICAgICAg
ICAgICB2dWxuZXJhYmlsaXR5LnZhbGlkYXRlKHByb2R1Y3RpZHMsIGdyb3VwaWRzKQorICAgICAg
ICAgICAgaWYgdnVsbmVyYWJpbGl0eS5fb3JkaW5hbCBpbiBvcmRpbmFsczoKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWxpZGF0aW9uRXJyb3IoJ1Z1bG5lcmFiaWxpdHkgb3JkaW5hbCAlZCBpcyBp
c3N1ZWQgPQp0d2ljZScgJSB2dWxuZXJhYmlsaXR5Ll9vcmRpbmFsKQorICAgICAgICAgICAgb3Jk
aW5hbHMuYWRkKHZ1bG5lcmFiaWxpdHkuX29yZGluYWwpCisKKyAgICBkZWYgX19zdHJfXyhzZWxm
KToKKyAgICAgICAgcyA9M0QgWworICAgICAgICAgICAgJ1RpdGxlOiAlcycgJSBzZWxmLl90aXRs
ZSwKKyAgICAgICAgICAgICdUeXBlOiAlcycgJSBzZWxmLl90eXBlLAorICAgICAgICAgICAgJ1B1
Ymxpc2hlcjogJXMnICUgc2VsZi5fcHVibGlzaGVyLAorICAgICAgICAgICAgJ3RyYWNraW5nOiAl
cycgJSBzZWxmLl90cmFja2luZywKKyAgICAgICAgICAgICclZCBOb3RlczogJXMnICUgKGxlbihz
ZWxmLl9ub3RlcyksICcsICcuam9pbigKKyAgICAgICAgICAgICAgICBzdHIobikgZm9yIG4gaW4g
c2VsZi5fbm90ZXMpKQorICAgICAgICBdCisgICAgICAgIGlmIHNlbGYuX2Rpc3RyaWJ1dGlvbiBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHMuYXBwZW5kKCdEaXN0cmlidXRpb246ICVzJyAlIHNl
bGYuX2Rpc3RyaWJ1dGlvbikKKyAgICAgICAgcy5leHRlbmQoWworICAgICAgICAgICAgJyVkIEFj
a25vd2xlZGdtZW50cycgJSBsZW4oc2VsZi5fYWNrbm93bGVkZ21lbnRzKSwKKyAgICAgICAgICAg
ICdQcm9kdWN0czogJXMnICUgc2VsZi5fcHJvZHVjdHRyZWUsCisgICAgICAgIF0pCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4ocykKZGlmZiAtciAwMDAwMDAwMDAwMDAgLXIgZTE4YjYxYTczYTY4
IGZhcm9sbHV6L3BhcnNlcnMvX19pbml0X18ucHkKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAw
OjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZmFyb2xsdXovcGFyc2Vycy9fX2luaXRfXy5weQlUdWUg
U2VwIDIzIDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCArMSwyMyBAQAorIyAtKi0gZW5jb2Rp
bmc6IHV0Zi04IC0qLQorIyBEZXNjcmlwdGlvbjoKKyMgQSB1dGlsaXR5IHRvIG1hbmlwdWxhdGUg
U2VjdXJpdHkgQWR2aXNvcmllcworIworIyBBdXRob3JzOgorIyBCZW5vPUMzPUFFdCBBbGxhcmQg
PGJlbm9pdC5hbGxhcmRAZ3JlZW5ib25lLm5ldD4KKyMKKyMgQ29weXJpZ2h0OgorIyBDb3B5cmln
aHQgKEMpIDIwMTQgR3JlZW5ib25lIE5ldHdvcmtzIEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw
LTEzMDEgVVNBLgpkaWZmIC1yIDAwMDAwMDAwMDAwMCAtciBlMThiNjFhNzNhNjggZmFyb2xsdXov
cGFyc2Vycy9jdnJmLnB5Ci0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICsw
MDAwCisrKyBiL2Zhcm9sbHV6L3BhcnNlcnMvY3ZyZi5weQlUdWUgU2VwIDIzIDE1OjE5OjE0IDIw
MTQgKzAyMDAKQEAgLTAsMCArMSwzNTQgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjIERl
c2NyaXB0aW9uOgorIyBNZXRob2RzIGZvciBwYXJzaW5nIENWUkYgZG9jdW1lbnRzCisjCisjIEF1
dGhvcnM6CisjIEJlbm89QzM9QUV0IEFsbGFyZCA8YmVub2l0LmFsbGFyZEBncmVlbmJvbmUubmV0
PgorIworIyBDb3B5cmlnaHQ6CisjIENvcHlyaWdodCAoQykgMjAxNCBHcmVlbmJvbmUgTmV0d29y
a3MgR21iSAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisjIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
IworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyIiIlwKK01ldGhvZHMg
Zm9yIHBhcnNpbmcgb2YgQ1ZSRiBEb2N1bWVudHMKKyIiIgorCitmcm9tIF9fZnV0dXJlX18gaW1w
b3J0IHByaW50X2Z1bmN0aW9uCisKK2ltcG9ydCByZQoraW1wb3J0IHRleHR3cmFwCitpbXBvcnQg
eG1sLmV0cmVlLkVsZW1lbnRUcmVlIGFzIEVUCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGlt
ZSwgdGltZWRlbHRhCisKK3RyeToKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lem9uZQor
ZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gLi5weTIgaW1wb3J0IEZpeGVkVGltZVpvbmUg
YXMgdGltZXpvbmUKKworZnJvbSAuLmN2cmYgaW1wb3J0IChDVlJGLCBDVlJGUHVibGlzaGVyLCBD
VlJGVHJhY2tpbmcsIENWUkZSZXZpc2lvbiwgQ1ZSRk49Cm90ZSwKKyAgICBDVlJGQWNrbm93bGVk
Z21lbnQsIENWUkZQcm9kdWN0QnJhbmNoLCBDVlJGRnVsbFByb2R1Y3ROYW1lLCBDVlJGR2VuZXJh
PQp0b3IsCisgICAgQ1ZSRlJlbGF0aW9uc2hpcCwgQ1ZSRlZ1bG5lcmFiaWxpdHksIENWUkZWdWxu
ZXJhYmlsaXR5SUQsIENWUkZUaHJlYXQsCisgICAgQ1ZSRlByb2R1Y3RTdGF0dXMsIENWUkZDVlNT
U2V0LCBDVlJGUmVmZXJlbmNlLCBDVlJGUmVtZWRpYXRpb24sIENWUkZHcj0Kb3VwLAorICAgIENW
UkZJbnZvbHZlbWVudCwgQ1ZSRkNXRSwgQ1ZSRlRyYWNraW5nSUQpCisKK05BTUVTUEFDRVMgPTNE
IHsKKyAgICAnY3ZyZic6ICJodHRwOi8vd3d3LmljYXNpLm9yZy9DVlJGL3NjaGVtYS9jdnJmLzEu
MSIsCisgICAgJ3Byb2QnOiAiaHR0cDovL3d3dy5pY2FzaS5vcmcvQ1ZSRi9zY2hlbWEvcHJvZC8x
LjEiLAorICAgICd2dWxuJzogImh0dHA6Ly93d3cuaWNhc2kub3JnL0NWUkYvc2NoZW1hL3Z1bG4v
MS4xIiwKKyAgICAneG1sJzogICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2Ui
LAorfQorCisKK2RlZiBVTihucywgbmFtZSk6CisgICAgIiIiIFVOIGZvciBVbml2ZXJzYWwgTmFt
ZSAiIiIKKyAgICByZXR1cm4gInslc30lcyIgJSAoTkFNRVNQQUNFU1tuc10sIG5hbWUpCisKKwor
ZGVmIHBhcnNlVmVyc2lvbihzdHJpbmcpOgorICAgIHJldHVybiB0dXBsZShpbnQoaSkgZm9yIGkg
aW4gc3RyaW5nLnNwbGl0KCcuJykpCisKKworZGVmIHBhcnNlRGF0ZShzdHJpbmcpOgorICAgIG0g
PTNEIHJlLm1hdGNoKCcoXGR7NH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0pOihcZHsyfSk6KFxk
ezJ9KSg/OihbKy09Cl0pKFxkezJ9KTooXGR7Mn0pfChaKSk/Jywgc3RyaW5nKQorICAgIGlmICht
Lmdyb3VwKDcpIGlzIE5vbmUpIG9yIChtLmdyb3VwKDcpID0zRD0zRCAnWicpOgorICAgICAgICB0
emhvdXJzID0zRCAwCisgICAgICAgIHR6bWluID0zRCAwCisgICAgZWxzZToKKyAgICAgICAgdHpo
b3VycyA9M0QgaW50KG0uZ3JvdXAoOCkpCisgICAgICAgIGlmIG0uZ3JvdXAoNykgPTNEPTNEICct
JzoKKyAgICAgICAgICAgIHR6aG91cnMgPTNEIC0gdHpob3VycworICAgICAgICB0em1pbiA9M0Qg
aW50KG0uZ3JvdXAoOSkpCisgICAgcmV0dXJuIGRhdGV0aW1lKGludChtLmdyb3VwKDEpKSwgaW50
KG0uZ3JvdXAoMikpLCBpbnQobS5ncm91cCgzKSksIGludD0KKG0uZ3JvdXAoNCkpLCBpbnQobS5n
cm91cCg1KSksIGludChtLmdyb3VwKDYpKSwgdHppbmZvPTNEdGltZXpvbmUodGltZWRlbHRhPQoo
aG91cnM9M0R0emhvdXJzLCBtaW51dGVzPTNEdHptaW4pKSkKKworCitkZWYgcGFyc2VOb3RlKGVs
ZW0pOgorICAgIHJldHVybiBDVlJGTm90ZSgKKyAgICAgICAgZWxlbS5hdHRyaWJbJ1R5cGUnXSwK
KyAgICAgICAgaW50KGVsZW0uYXR0cmliWydPcmRpbmFsJ10pLAorICAgICAgICB0ZXh0d3JhcC5k
ZWRlbnQoZWxlbS50ZXh0KS5zdHJpcCgpLAorICAgICAgICBlbGVtLmF0dHJpYi5nZXQoJ1RpdGxl
JyksCisgICAgICAgIGVsZW0uYXR0cmliLmdldCgnQXVkaWVuY2UnKQorICAgICkKKworCitkZWYg
cGFyc2VSZWZlcmVuY2UoZWxlbSwgbnM9M0QnY3ZyZicpOgorICAgICIiIiBucyBpcyB0aGUgY3Vy
cmVudCBuYW1lc3BhY2UgIiIiCisgICAgcmV0dXJuIENWUkZSZWZlcmVuY2UoCisgICAgICAgIGVs
ZW0uZmluZHRleHQoVU4obnMsICdVUkwnKSkuc3RyaXAoKSwKKyAgICAgICAgdGV4dHdyYXAuZGVk
ZW50KGVsZW0uZmluZHRleHQoVU4obnMsICdEZXNjcmlwdGlvbicpKSkuc3RyaXAoKSwKKyAgICAg
ICAgZWxlbS5hdHRyaWIuZ2V0KCdUeXBlJykKKyAgICApCisKKworZGVmIHBhcnNlQWNrbm93bGVk
Z21lbnQoZWxlbSwgbnM9M0QnY3ZyZicpOgorICAgIHJldHVybiBDVlJGQWNrbm93bGVkZ21lbnQo
CisgICAgICAgIGVsZW0uZmluZHRleHQoVU4obnMsICdOYW1lJykpLAorICAgICAgICBlbGVtLmZp
bmR0ZXh0KFVOKG5zLCAnT3JnYW5pemF0aW9uJykpLAorICAgICAgICBlbGVtLmZpbmR0ZXh0KFVO
KG5zLCAnRGVzY3JpcHRpb24nKSksCisgICAgICAgIGVsZW0uZmluZHRleHQoVU4obnMsICdVUkwn
KSksCisgICAgKQorCisKK2RlZiBwYXJzZUZ1bGxQcm9kdWN0TmFtZShlbGVtLCBwYXJlbnQpOgor
ICAgIHJldHVybiBDVlJGRnVsbFByb2R1Y3ROYW1lKAorICAgICAgICBlbGVtLmF0dHJpYlsnUHJv
ZHVjdElEJ10sCisgICAgICAgIGVsZW0udGV4dC5zdHJpcCgpLAorICAgICAgICBwYXJlbnQsCisg
ICAgICAgIGNwZT0zRGVsZW0uYXR0cmliLmdldCgnQ1BFJykKKyAgICApCisKKworZGVmIHBhcnNl
UHJvZEJyYW5jaChlbGVtLCBwdHJlZSwgcGFyZW50YnJhbmNoPTNETm9uZSk6CisgICAgIiIiIFJl
Y3Vyc2l2ZWx5IHBhcnNlcyB0aGUgYnJhbmNoZXMgYW5kIHRoZSB0ZXJtaW5hbCBwcm9kdWN0bmFt
ZXMgIiIiCisgICAgZnBuY3ZyZiA9M0QgZWxlbS5maW5kKFVOKCdwcm9kJywgJ0Z1bGxQcm9kdWN0
TmFtZScpKQorICAgIGlmIChwYXJlbnRicmFuY2ggaXMgbm90IE5vbmUpIGFuZCAoZnBuY3ZyZiBp
cyBub3QgTm9uZSk6CisgICAgICAgICMgRG9uJ3QgcHJvY2VzcyB0aGUgcHJvZHVjdHMgYXQgdGhl
IHJvb3Qgb2YgdGhlIHRyZWUKKyAgICAgICAgcHJvZCA9M0QgcGFyc2VGdWxsUHJvZHVjdE5hbWUo
ZnBuY3ZyZiwgcGFyZW50YnJhbmNoKQorICAgICAgICBwdHJlZS5hZGRQcm9kdWN0KHByb2QpCisK
KyAgICBpZiBwYXJlbnRicmFuY2ggaXMgTm9uZToKKyAgICAgICAgcGFyZW50YnJhbmNoID0zRCBw
dHJlZQorICAgIGZvciBicmN2cmYgaW4gZWxlbS5maW5kYWxsKFVOKCdwcm9kJywgJ0JyYW5jaCcp
KToKKyAgICAgICAgYnIgPTNEIENWUkZQcm9kdWN0QnJhbmNoKGJyY3ZyZi5hdHRyaWJbJ1R5cGUn
XSwgYnJjdnJmLmF0dHJpYlsnTmFtPQplJ10sIHBhcmVudGJyYW5jaCkKKyAgICAgICAgIyBBbmQg
Z28gaW50byByZWN1cnNpb24gLi4uCisgICAgICAgIGJyLl9jaGlsZHMgPTNEIGxpc3QocGFyc2VQ
cm9kQnJhbmNoKGJyY3ZyZiwgcHRyZWUsIGJyKSkKKyAgICAgICAgeWllbGQgYnIKKworCitkZWYg
cGFyc2VWdWxuZXJhYmlsaXR5KGVsZW0pOgorICAgIHZ1bG4gPTNEIENWUkZWdWxuZXJhYmlsaXR5
KGludChlbGVtLmF0dHJpYlsnT3JkaW5hbCddKSkKKworICAgIHhtbHRpdGxlID0zRCBlbGVtLmZp
bmR0ZXh0KFVOKCd2dWxuJywgJ1RpdGxlJykpCisgICAgaWYgeG1sdGl0bGUgaXMgbm90IE5vbmU6
CisgICAgICAgIHZ1bG4uc2V0VGl0bGUoeG1sdGl0bGUuc3RyaXAoKSkKKworICAgIHhtbElEID0z
RCBlbGVtLmZpbmQoVU4oJ3Z1bG4nLCAnSUQnKSkKKyAgICBpZiB4bWxJRCBpcyBub3QgTm9uZToK
KyAgICAgICAgdnVsbi5zZXRJRChDVlJGVnVsbmVyYWJpbGl0eUlEKHhtbElELmF0dHJpYlsnU3lz
dGVtTmFtZSddLCB4bWxJRC50PQpleHQuc3RyaXAoKSkpCisKKyAgICBmb3IgeG1sbm90ZSBpbiBl
bGVtLmZpbmRhbGwoJy8nLmpvaW4oW1VOKCd2dWxuJywgJ05vdGVzJyksIFVOKCd2dWxuJywgPQon
Tm90ZScpXSkpOgorICAgICAgICB2dWxuLmFkZE5vdGUocGFyc2VOb3RlKHhtbG5vdGUpKQorCisg
ICAgeG1sZGlzY292ZXJ5ZGF0ZSA9M0QgZWxlbS5maW5kdGV4dChVTigndnVsbicsICdEaXNjb3Zl
cnlEYXRlJykpCisgICAgaWYgeG1sZGlzY292ZXJ5ZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAg
dnVsbi5zZXREaXNjb3ZlcnlEYXRlKHBhcnNlRGF0ZSh4bWxkaXNjb3ZlcnlkYXRlKSkKKyAgICB4
bWxyZWxlYXNlZGF0ZSA9M0QgZWxlbS5maW5kdGV4dChVTigndnVsbicsICdSZWxlYXNlRGF0ZScp
KQorICAgIGlmIHhtbHJlbGVhc2VkYXRlIGlzIG5vdCBOb25lOgorICAgICAgICB2dWxuLnNldFJl
bGVhc2VEYXRlKHBhcnNlRGF0ZSh4bWxyZWxlYXNlZGF0ZSkpCisKKyAgICBmb3IgeG1saW52IGlu
IGVsZW0uZmluZGFsbCgnLycuam9pbihbVU4oJ3Z1bG4nLCAnSW52b2x2ZW1lbnRzJyksIFVOKCd2
PQp1bG4nLCAnSW52b2x2ZW1lbnQnKV0pKToKKyAgICAgICAgaW52b2x2ZW1lbnQgPTNEIENWUkZJ
bnZvbHZlbWVudCgKKyAgICAgICAgICAgIHhtbGludi5hdHRyaWJbJ1BhcnR5J10sCisgICAgICAg
ICAgICB4bWxpbnYuYXR0cmliWydTdGF0dXMnXQorICAgICAgICApCisgICAgICAgIHhtbGRlc2Ny
ID0zRCB4bWxpbnYuZmluZHRleHQoVU4oJ3Z1bG4nLCAnRGVzY3JpcHRpb24nKSkKKyAgICAgICAg
aWYgeG1sZGVzY3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbnZvbHZlbWVudC5zZXREZXNj
cmlwdGlvbih0ZXh0d3JhcC5kZWRlbnQoeG1sZGVzY3IpLnN0cmlwKCkpCisgICAgICAgIHZ1bG4u
YWRkSW52b2x2ZW1lbnQoaW52b2x2ZW1lbnQpCisKKyAgICB4bWxjdmUgPTNEIGVsZW0uZmluZHRl
eHQoVU4oJ3Z1bG4nLCAnQ1ZFJykpCisgICAgaWYgeG1sY3ZlIGlzIG5vdCBOb25lOgorICAgICAg
ICB2dWxuLnNldENWRSh4bWxjdmUuc3RyaXAoKSkKKworICAgIGZvciB4bWxjd2UgaW4gZWxlbS5m
aW5kYWxsKFVOKCd2dWxuJywgJ0NXRScpKToKKyAgICAgICAgdnVsbi5hZGRDV0UoQ1ZSRkNXRSgK
KyAgICAgICAgICAgIHhtbGN3ZS5hdHRyaWJbJ0lEJ10sCisgICAgICAgICAgICB4bWxjd2UudGV4
dC5zdHJpcCgpCisgICAgICAgICkpCisKKyAgICBmb3IgeG1sc3RhdHVzIGluIGVsZW0uZmluZGFs
bCgnLycuam9pbihbVU4oJ3Z1bG4nLCAnUHJvZHVjdFN0YXR1c2VzJyksPQogVU4oJ3Z1bG4nLCAn
U3RhdHVzJyldKSk6CisgICAgICAgIHN0YXR1cyA9M0QgQ1ZSRlByb2R1Y3RTdGF0dXMoeG1sc3Rh
dHVzLmF0dHJpYlsnVHlwZSddKQorICAgICAgICBmb3IgeG1scHJvZHVjdGlkIGluIHhtbHN0YXR1
cy5maW5kYWxsKFVOKCd2dWxuJywgJ1Byb2R1Y3RJRCcpKToKKyAgICAgICAgICAgIHN0YXR1cy5h
ZGRQcm9kdWN0SUQoeG1scHJvZHVjdGlkLnRleHQuc3RyaXAoKSkKKworICAgICAgICB2dWxuLmFk
ZFByb2R1Y3RTdGF0dXMoc3RhdHVzKQorCisgICAgZm9yIHhtbHRocmVhdCBpbiBlbGVtLmZpbmRh
bGwoJy8nLmpvaW4oW1VOKCd2dWxuJywgJ1RocmVhdHMnKSwgVU4oJ3Z1bD0KbicsICdUaHJlYXQn
KV0pKToKKyAgICAgICAgdGhyZWF0ID0zRCBDVlJGVGhyZWF0KAorICAgICAgICAgICAgeG1sdGhy
ZWF0LmF0dHJpYlsnVHlwZSddLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KHhtbHRocmVh
dC5maW5kdGV4dChVTigndnVsbicsICdEZXNjcmlwdGlvbicpKSk9Ci5zdHJpcCgpCisgICAgICAg
ICkKKyAgICAgICAgeG1sZGF0ZSA9M0QgeG1sdGhyZWF0LmZpbmR0ZXh0KFVOKCd2dWxuJywgJ0Rh
dGUnKSkKKyAgICAgICAgaWYgeG1sZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRocmVh
dC5zZXREYXRlKHBhcnNlRGF0ZSh4bWxkYXRlKSkKKyAgICAgICAgZm9yIHhtbHBpZCBpbiB4bWx0
aHJlYXQuZmluZGFsbChVTigndnVsbicsICdQcm9kdWN0SUQnKSk6CisgICAgICAgICAgICB0aHJl
YXQuYWRkUHJvZHVjdElEKHhtbHBpZC50ZXh0LnN0cmlwKCkpCisgICAgICAgIGZvciB4bWxnaWQg
aW4geG1sdGhyZWF0LmZpbmRhbGwoVU4oJ3Z1bG4nLCAnR3JvdXBJRCcpKToKKyAgICAgICAgICAg
IHRocmVhdC5hZGRHcm91cElEKHhtbGdpZC50ZXh0LnN0cmlwKCkpCisKKyAgICAgICAgdnVsbi5h
ZGRUaHJlYXQodGhyZWF0KQorCisgICAgZm9yIHhtbGN2c3MgaW4gZWxlbS5maW5kYWxsKCcvJy5q
b2luKFtVTigndnVsbicsICdDVlNTU2NvcmVTZXRzJyksIFVOKD0KJ3Z1bG4nLCAnU2NvcmVTZXQn
KV0pKToKKyAgICAgICAgY3Zzc19zZXQgPTNEIENWUkZDVlNTU2V0KGZsb2F0KHhtbGN2c3MuZmlu
ZHRleHQoVU4oJ3Z1bG4nLCAnQmFzZVNjPQpvcmUnKSkuc3RyaXAoKSkpCisgICAgICAgIHhtbHRl
bXBzY29yZSA9M0QgeG1sY3Zzcy5maW5kdGV4dChVTigndnVsbicsICdUZW1wb3JhbFNjb3JlJykp
CisgICAgICAgIGlmIHhtbHRlbXBzY29yZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN2c3Nf
c2V0LnNldFRlbXBvcmFsU2NvcmUoZmxvYXQoeG1sdGVtcHNjb3JlLnN0cmlwKCkpKQorICAgICAg
ICB4bWxlbnZzY29yZSA9M0QgeG1sY3Zzcy5maW5kdGV4dChVTigndnVsbicsICdFbnZpcm9ubWVu
dGFsU2NvcmUnKSkKKyAgICAgICAgaWYgeG1sZW52c2NvcmUgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBjdnNzX3NldC5zZXRFbnZpcm9ubWVudGFsU2NvcmUoZmxvYXQoeG1sZW52c2NvcmUuc3Ry
aXAoKSkpCisgICAgICAgIHhtbHZlY3RvciA9M0QgeG1sY3Zzcy5maW5kdGV4dChVTigndnVsbics
ICdWZWN0b3InKSkKKyAgICAgICAgaWYgeG1sdmVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgY3Zzc19zZXQuc2V0VmVjdG9yKHhtbHZlY3Rvci5zdHJpcCgpKQorICAgICAgICBmb3IgeG1s
cHJvZGlkIGluIHhtbGN2c3MuZmluZGFsbChVTigndnVsbicsICdQcm9kdWN0SUQnKSk6CisgICAg
ICAgICAgICBjdnNzX3NldC5hZGRQcm9kdWN0SUQoeG1scHJvZGlkLnRleHQuc3RyaXAoKSkKKwor
ICAgICAgICB2dWxuLmFkZENWU1NTZXQoY3Zzc19zZXQpCisKKyAgICBmb3IgeG1scmVtZWRpYXRp
b24gaW4gZWxlbS5maW5kYWxsKCcvJy5qb2luKFtVTigndnVsbicsICdSZW1lZGlhdGlvbnMnPQop
LCBVTigndnVsbicsICdSZW1lZGlhdGlvbicpXSkpOgorICAgICAgICByZW1lZGlhdGlvbiA9M0Qg
Q1ZSRlJlbWVkaWF0aW9uKAorICAgICAgICAgICAgeG1scmVtZWRpYXRpb24uYXR0cmliWydUeXBl
J10sCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoeG1scmVtZWRpYXRpb24uZmluZHRleHQo
VU4oJ3Z1bG4nLCAnRGVzY3JpcHRpbz0KbicpKSkuc3RyaXAoKQorICAgICAgICApCisgICAgICAg
IHhtbGRhdGUgPTNEIHhtbHJlbWVkaWF0aW9uLmZpbmR0ZXh0KFVOKCd2dWxuJywgJ0RhdGUnKSkK
KyAgICAgICAgaWYgeG1sZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlbWVkaWF0aW9u
LnNldERhdGUocGFyc2VEYXRlKHhtbGRhdGUpKQorICAgICAgICB4bWxlbnRpdGxlbWVudCA9M0Qg
eG1scmVtZWRpYXRpb24uZmluZHRleHQoVU4oJ3Z1bG4nLCAnRW50aXRsZW1lbnQ9CicpKQorICAg
ICAgICBpZiB4bWxlbnRpdGxlbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlbWVkaWF0
aW9uLnNldEVudGl0bGVtZW50KHRleHR3cmFwLmRlZGVudCh4bWxlbnRpdGxlbWVudCkuc3RyPQpp
cCgpKQorICAgICAgICB4bWx1cmwgPTNEIHhtbHJlbWVkaWF0aW9uLmZpbmR0ZXh0KFVOKCd2dWxu
JywgJ1VSTCcpKQorICAgICAgICBpZiB4bWx1cmwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBy
ZW1lZGlhdGlvbi5zZXRVUkwoeG1sdXJsLnN0cmlwKCkpCisgICAgICAgIGZvciB4bWxwaWQgaW4g
eG1scmVtZWRpYXRpb24uZmluZGFsbChVTigndnVsbicsICdQcm9kdWN0SUQnKSk6CisgICAgICAg
ICAgICByZW1lZGlhdGlvbi5hZGRQcm9kdWN0SUQoeG1scGlkLnRleHQuc3RyaXAoKSkKKyAgICAg
ICAgZm9yIHhtbGdpZCBpbiB4bWxyZW1lZGlhdGlvbi5maW5kYWxsKFVOKCd2dWxuJywgJ0dyb3Vw
SUQnKSk6CisgICAgICAgICAgICByZW1lZGlhdGlvbi5hZGRHcm91cElEKHhtbGdpZC50ZXh0LnN0
cmlwKCkpCisKKyAgICAgICAgdnVsbi5hZGRSZW1lZGlhdGlvbihyZW1lZGlhdGlvbikKKworICAg
IGZvciB4bWxyZWYgaW4gZWxlbS5maW5kYWxsKCcvJy5qb2luKFtVTigndnVsbicsICdSZWZlcmVu
Y2VzJyksIFVOKCd2dWw9Cm4nLCAnUmVmZXJlbmNlJyldKSk6CisgICAgICAgIHZ1bG4uYWRkUmVm
ZXJlbmNlKHBhcnNlUmVmZXJlbmNlKHhtbHJlZiwgJ3Z1bG4nKSkKKworICAgIGZvciB4bWxhY2sg
aW4gZWxlbS5maW5kYWxsKCcvJy5qb2luKFtVTigndnVsbicsICdBY2tub3dsZWRnbWVudHMnKSwg
VU49CigndnVsbicsICdBY2tub3dsZWRnbWVudCcpXSkpOgorICAgICAgICB2dWxuLmFkZEFja25v
d2xlZGdtZW50KHBhcnNlQWNrbm93bGVkZ21lbnQoeG1sYWNrLCAndnVsbicpKQorCisgICAgcmV0
dXJuIHZ1bG4KKworCitkZWYgcGFyc2UoeG1sKToKKyAgICBpZiBoYXNhdHRyKHhtbCwgJ3JlYWQn
KToKKyAgICAgICAgeG1sID0zRCB4bWwucmVhZCgpCisgICAgY3ZyZmRvYyA9M0QgRVQuZnJvbXN0
cmluZyh4bWwpCisgICAgaWYgY3ZyZmRvYy50YWcgIT0zRCBVTignY3ZyZicsICdjdnJmZG9jJyk6
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIENWUkYgZG9jdW1lbnQgIScpCisgICAg
ZG9jID0zRCBDVlJGKAorICAgICAgICBjdnJmZG9jLmZpbmR0ZXh0KFVOKCdjdnJmJywgJ0RvY3Vt
ZW50VGl0bGUnKSkuc3RyaXAoKSwKKyAgICAgICAgY3ZyZmRvYy5maW5kdGV4dChVTignY3ZyZics
ICdEb2N1bWVudFR5cGUnKSkuc3RyaXAoKQorICAgICkKKyAgICBjdnJmcHViID0zRCBjdnJmZG9j
LmZpbmQoVU4oJ2N2cmYnLCAnRG9jdW1lbnRQdWJsaXNoZXInKSkKKyAgICBwdWIgPTNEIENWUkZQ
dWJsaXNoZXIoY3ZyZnB1Yi5hdHRyaWJbJ1R5cGUnXSwgY3ZyZnB1Yi5hdHRyaWIuZ2V0KCdWZW5k
PQpvcklEJykpCisgICAgZG9jLnNldFB1Ymxpc2hlcihwdWIpCisgICAgY29udGFjdCA9M0QgY3Zy
ZnB1Yi5maW5kKFVOKCdjdnJmJywgJ0NvbnRhY3REZXRhaWxzJykpCisgICAgaWYgY29udGFjdCBp
cyBub3QgTm9uZToKKyAgICAgICAgcHViLnNldENvbnRhY3QoY29udGFjdC50ZXh0LnN0cmlwKCkp
CisgICAgYXV0aG9yaXR5ID0zRCBjdnJmcHViLmZpbmQoVU4oJ2N2cmYnLCAnSXNzdWluZ0F1dGhv
cml0eScpKQorICAgIGlmIGF1dGhvcml0eSBpcyBub3QgTm9uZToKKyAgICAgICAgcHViLnNldEF1
dGhvcml0eShhdXRob3JpdHkudGV4dC5zdHJpcCgpKQorICAgIGN2cmZ0cmFja2luZyA9M0QgY3Zy
ZmRvYy5maW5kKFVOKCdjdnJmJywgJ0RvY3VtZW50VHJhY2tpbmcnKSkKKyAgICBpZGVudGlmaWNh
dGlvbiA9M0QgQ1ZSRlRyYWNraW5nSUQoCisgICAgICAgIGN2cmZ0cmFja2luZy5maW5kdGV4dCgn
Lycuam9pbihbVU4oJ2N2cmYnLCAnSWRlbnRpZmljYXRpb24nKSwgVU4oJz0KY3ZyZicsICdJRCcp
XSkpLnN0cmlwKCkKKyAgICApCisgICAgZm9yIGN2cmZhbGlhcyBpbiBjdnJmdHJhY2tpbmcuZmlu
ZGFsbCgnLycuam9pbihbVU4oJ2N2cmYnLCAnSWRlbnRpZmljYT0KdGlvbicpLCBVTignY3ZyZics
ICdBbGlhcycpXSkpOgorICAgICAgICBpZGVudGlmaWNhdGlvbi5hZGRBbGlhcyhjdnJmYWxpYXMu
dGV4dC5zdHJpcCgpKQorICAgIHRyYWNraW5nID0zRCBDVlJGVHJhY2tpbmcoCisgICAgICAgIGlk
ZW50aWZpY2F0aW9uLAorICAgICAgICBjdnJmdHJhY2tpbmcuZmluZHRleHQoVU4oJ2N2cmYnLCAn
U3RhdHVzJykpLnN0cmlwKCksCisgICAgICAgIHBhcnNlVmVyc2lvbihjdnJmdHJhY2tpbmcuZmlu
ZHRleHQoVU4oJ2N2cmYnLCAnVmVyc2lvbicpKS5zdHJpcCgpKSwKKyAgICAgICAgcGFyc2VEYXRl
KGN2cmZ0cmFja2luZy5maW5kdGV4dChVTignY3ZyZicsICdJbml0aWFsUmVsZWFzZURhdGUnKSku
PQpzdHJpcCgpKSwKKyAgICAgICAgcGFyc2VEYXRlKGN2cmZ0cmFja2luZy5maW5kdGV4dChVTign
Y3ZyZicsICdDdXJyZW50UmVsZWFzZURhdGUnKSkuPQpzdHJpcCgpKQorICAgICkKKyAgICBkb2Mu
c2V0VHJhY2tpbmcodHJhY2tpbmcpCisgICAgZm9yIGN2cmZyZXYgaW4gY3ZyZnRyYWNraW5nLmZp
bmRhbGwoJy8nLmpvaW4oW1VOKCdjdnJmJywgJ1JldmlzaW9uSGlzdD0Kb3J5JyksIFVOKCdjdnJm
JywgJ1JldmlzaW9uJyldKSk6CisgICAgICAgIHJldiA9M0QgQ1ZSRlJldmlzaW9uKAorICAgICAg
ICAgICAgcGFyc2VWZXJzaW9uKGN2cmZyZXYuZmluZHRleHQoVU4oJ2N2cmYnLCAnTnVtYmVyJykp
LnN0cmlwKCkpLAorICAgICAgICAgICAgcGFyc2VEYXRlKGN2cmZyZXYuZmluZHRleHQoVU4oJ2N2
cmYnLCAnRGF0ZScpKS5zdHJpcCgpKSwKKyAgICAgICAgICAgIGN2cmZyZXYuZmluZHRleHQoVU4o
J2N2cmYnLCAnRGVzY3JpcHRpb24nKSkuc3RyaXAoKSwKKyAgICAgICAgKQorICAgICAgICB0cmFj
a2luZy5hZGRSZXZpc2lvbihyZXYpCisKKyAgICB4bWxnZW5lcmF0b3IgPTNEIGN2cmZ0cmFja2lu
Zy5maW5kKFVOKCdjdnJmJywgJ0dlbmVyYXRvcicpKQorICAgIGlmIHhtbGdlbmVyYXRvciBpcyBu
b3QgTm9uZToKKyAgICAgICAgZ2VuZXJhdG9yID0zRCBDVlJGR2VuZXJhdG9yKCkKKyAgICAgICAg
eG1sZW5naW5lID0zRCB4bWxnZW5lcmF0b3IuZmluZHRleHQoVU4oJ2N2cmYnLCAnRW5naW5lJykp
CisgICAgICAgIGlmIHhtbGVuZ2luZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5zZXRFbmdpbmUoeG1sZW5naW5lLnN0cmlwKCkpCisgICAgICAgIHhtbGRhdGUgPTNEIHhtbGdl
bmVyYXRvci5maW5kdGV4dChVTignY3ZyZicsICdEYXRlJykpCisgICAgICAgIGlmIHhtbGRhdGUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICBnZW5lcmF0b3Iuc2V0RGF0ZShwYXJzZURhdGUoeG1s
ZGF0ZS5zdHJpcCgpKSkKKyAgICAgICAgdHJhY2tpbmcuc2V0R2VuZXJhdG9yKGdlbmVyYXRvcikK
KworICAgIGZvciBjdnJmbm90ZSBpbiBjdnJmZG9jLmZpbmRhbGwoJy8nLmpvaW4oW1VOKCdjdnJm
JywgJ0RvY3VtZW50Tm90ZXMnKSw9CiBVTignY3ZyZicsICdOb3RlJyldKSk6CisgICAgICAgIGRv
Yy5hZGROb3RlKHBhcnNlTm90ZShjdnJmbm90ZSkpCisKKyAgICBkaXN0ciA9M0QgY3ZyZmRvYy5m
aW5kdGV4dChVTignY3ZyZicsICdEb2N1bWVudERpc3RyaWJ1dGlvbicpKQorICAgIGlmIGRpc3Ry
IGlzIG5vdCBOb25lOgorICAgICAgICBkb2Muc2V0RGlzdHJpYnV0aW9uKHRleHR3cmFwLmRlZGVu
dChkaXN0cikuc3RyaXAoKSkKKworICAgICMgVGhpcyBpcyBpbiBhIHF1aXRlIGZyZWUgZm9ybWF0
LCBub3Qgc3VyZSBob3cgdG8gZG8gc29tZXRoaW5nIHdpdGggaXQ9CiAuLi4KKyAgICB4bWxhZ2dz
ZXYgPTNEIGN2cmZkb2MuZmluZChVTignY3ZyZicsICdBZ2dyZWdhdGVTZXZlcml0eScpKQorCisg
ICAgZm9yIHhtbHJlZiBpbiBjdnJmZG9jLmZpbmRhbGwoJy8nLmpvaW4oW1VOKCdjdnJmJywgJ0Rv
Y3VtZW50UmVmZXJlbmNlcz0KJyksIFVOKCdjdnJmJywgJ1JlZmVyZW5jZScpXSkpOgorICAgICAg
ICBkb2MuYWRkUmVmZXJlbmNlKHBhcnNlUmVmZXJlbmNlKHhtbHJlZikpCisKKyAgICBmb3IgY3Zy
ZmFjayBpbiBjdnJmZG9jLmZpbmRhbGwoJy8nLmpvaW4oW1VOKCdjdnJmJywgJ0Fja25vd2xlZGdt
ZW50cycpPQosIFVOKCdjdnJmJywgJ0Fja25vd2xlZGdtZW50JyldKSk6CisgICAgICAgIGRvYy5h
ZGRBY2tub3dsZWRnbWVudChwYXJzZUFja25vd2xlZGdtZW50KGN2cmZhY2spKQorCisgICAgIyAt
LS0gVGhlIFByb2R1Y3RUcmVlCisKKyAgICBjdnJmcHRyZWUgPTNEIGN2cmZkb2MuZmluZChVTign
cHJvZCcsICdQcm9kdWN0VHJlZScpKQorICAgIGlmIGN2cmZwdHJlZSBpcyBub3QgTm9uZToKKyAg
ICAgICAgcHJvZHVjdHRyZWUgPTNEIGRvYy5jcmVhdGVQcm9kdWN0VHJlZSgpCisgICAgICAgIGZv
ciBicmFuY2ggaW4gcGFyc2VQcm9kQnJhbmNoKGN2cmZwdHJlZSwgcHJvZHVjdHRyZWUpOgorICAg
ICAgICAgICAgcHJvZHVjdHRyZWUuYWRkQnJhbmNoKGJyYW5jaCkKKworICAgICAgICBmb3IgcHJv
ZHVjdCBpbiBjdnJmcHRyZWUuZmluZGFsbChVTigncHJvZCcsICdGdWxsUHJvZHVjdE5hbWUnKSk6
CisgICAgICAgICAgICBwcm9kdWN0dHJlZS5hZGRQcm9kdWN0KHBhcnNlRnVsbFByb2R1Y3ROYW1l
KHByb2R1Y3QsIHByb2R1Y3R0cj0KZWUpKQorCisgICAgICAgIGZvciBjdnJmcmVsIGluIGN2cmZw
dHJlZS5maW5kYWxsKFVOKCdwcm9kJywgJ1JlbGF0aW9uc2hpcCcpKToKKyAgICAgICAgICAgIHJl
bCA9M0QgQ1ZSRlJlbGF0aW9uc2hpcCgKKyAgICAgICAgICAgICAgICBjdnJmcmVsLmF0dHJpYlsn
UHJvZHVjdFJlZmVyZW5jZSddLAorICAgICAgICAgICAgICAgIGN2cmZyZWwuYXR0cmliWydSZWxh
dGlvblR5cGUnXSwKKyAgICAgICAgICAgICAgICBjdnJmcmVsLmF0dHJpYlsnUmVsYXRlc1RvUHJv
ZHVjdFJlZmVyZW5jZSddCisgICAgICAgICAgICApCisgICAgICAgICAgICBwcm9kdWN0dHJlZS5h
ZGRSZWxhdGlvbnNoaXAocmVsKQorICAgICAgICAgICAgcHJvZHVjdHRyZWUuYWRkUHJvZHVjdChw
YXJzZUZ1bGxQcm9kdWN0TmFtZShjdnJmcmVsLmZpbmQoVU4oJ3A9CnJvZCcsICdGdWxsUHJvZHVj
dE5hbWUnKSksIHJlbCkpCisKKyAgICAgICAgZm9yIHhtbGdyb3VwIGluIGN2cmZwdHJlZS5maW5k
YWxsKCcvJy5qb2luKFtVTigncHJvZCcsICdQcm9kdWN0R3JvPQp1cHMnKSwgVU4oJ3Byb2QnLCAn
R3JvdXAnKV0pKToKKyAgICAgICAgICAgIGdyb3VwID0zRCBDVlJGR3JvdXAoeG1sZ3JvdXAuYXR0
cmliWydHcm91cElEJ10pCisgICAgICAgICAgICB4bWxkZXNjciA9M0QgeG1sZ3JvdXAuZmluZHRl
eHQoVU4oJ3Byb2QnLCAnRGVzY3JpcHRpb24nKSkKKyAgICAgICAgICAgIGlmIHhtbGRlc2NyIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGdyb3VwLnNldERlc2NyaXB0aW9uKHRleHR3cmFw
LmRlZGVudCh4bWxkZXNjcikuc3RyaXAoKSkKKyAgICAgICAgICAgIGZvciB4bWxwaWQgaW4geG1s
Z3JvdXAuZmluZGFsbChVTigncHJvZCcsICdQcm9kdWN0SUQnKSk6CisgICAgICAgICAgICAgICAg
Z3JvdXAuYWRkUHJvZHVjdElEKHhtbHBpZC50ZXh0LnN0cmlwKCkpCisgICAgICAgICAgICBwcm9k
dWN0dHJlZS5hZGRHcm91cChncm91cCkKKworICAgICMgLS0tIFRoZSBWdWxuZXJhYmlsaXRpZXMK
KworICAgIGZvciBjdnJmdnVsbiBpbiBjdnJmZG9jLmZpbmRhbGwoVU4oJ3Z1bG4nLCAnVnVsbmVy
YWJpbGl0eScpKToKKyAgICAgICAgZG9jLmFkZFZ1bG5lcmFiaWxpdHkocGFyc2VWdWxuZXJhYmls
aXR5KGN2cmZ2dWxuKSkKKworICAgIHJldHVybiBkb2MKKworCitpZiBfX25hbWVfXyA9M0Q9M0Qg
Il9fbWFpbl9fIjoKKyAgICBpbXBvcnQgc3lzCisgICAgd2l0aCBvcGVuKHN5cy5hcmd2WzFdLCAn
cnQnKSBhcyBmOgorICAgICAgICBjdnJmID0zRCBwYXJzZShmKQorICAgIGN2cmYudmFsaWRhdGUo
KQorICAgIHByaW50KGN2cmYpCisgICAgcHJpbnQoY3ZyZi5nZXRIaWdoZXN0Q1ZTUygpLl92ZWN0
b3IpCisgICAgcHJpbnQoY3ZyZi5nZXRQcm9kdWN0TGlzdCgpKQorICAgIHByaW50KGN2cmYuX3By
b2R1Y3R0cmVlLl9icmFuY2hlcykKKyMgICAgcHJpbnQoY3ZyZi5fcHJvZHVjdHRyZWUuX2JyYW5j
aGVzWzBdLl9jaGlsZHMpCmRpZmYgLXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBmYXJv
bGx1ei9weTIucHkKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAK
KysrIGIvZmFyb2xsdXovcHkyLnB5CVR1ZSBTZXAgMjMgMTU6MTk6MTQgMjAxNCArMDIwMApAQCAt
MCwwICsxLDQ0IEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBEZXNjcmlwdGlvbjoKKyMg
UHl0aG9uMiBDb21wYXRpYmlsaXR5IG1vZHVsZQorIworIyBBdXRob3JzOgorIyBCZW5vPUMzPUFF
dCBBbGxhcmQgPGJlbm9pdC5hbGxhcmRAZ3JlZW5ib25lLm5ldD4KKyMKKyMgQ29weXJpZ2h0Ogor
IyBDb3B5cmlnaHQgKEMpIDIwMTQgR3JlZW5ib25lIE5ldHdvcmtzIEdtYkgKKyMKKyMgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyIHZlcnNpb24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BIDAyMTEwLTEzMDEgVVNBLgorCisiIiJcCitHbHVlIGZvciBtaXNzaW5nIGZlYXR1cmVzIG9m
IHB5dGhvbjMgaW4gcHl0aG9uMgorIiIiCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHR6aW5mbywg
dGltZWRlbHRhCisKK2NsYXNzIEZpeGVkVGltZVpvbmUodHppbmZvKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgb2Zmc2V0KToKKyAgICAgICAgc2VsZi5fX29mZnNldCA9M0Qgb2Zmc2V0CisKKyAg
ICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19vZmZzZXQK
KworICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICByZXR1cm4gdGltZWRlbHRhKDApCisK
K3RyeToKKyAgZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgorZXhjZXB0IEltcG9y
dEVycm9yOgorICBmcm9tIHVybGxpYjIgaW1wb3J0IHVybG9wZW4KZGlmZiAtciAwMDAwMDAwMDAw
MDAgLXIgZTE4YjYxYTczYTY4IGZhcm9sbHV6L3JlbmRlcmVyLnB5Ci0tLSAvZGV2L251bGwJVGh1
IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2Zhcm9sbHV6L3JlbmRlcmVyLnB5CVR1
ZSBTZXAgMjMgMTU6MTk6MTQgMjAxNCArMDIwMApAQCAtMCwwICsxLDE1MyBAQAorIyAtKi0gZW5j
b2Rpbmc6IHV0Zi04IC0qLQorIyBEZXNjcmlwdGlvbjoKKyMgTW9kdWxlIHJlbGF0ZWQgdG8gdGhl
IHJlbmRlcmluZyBvZiBhIFNlY3VyaXR5IEFkdmlzb3J5LgorIworIyBBdXRob3JzOgorIyBCZW5v
PUMzPUFFdCBBbGxhcmQgPGJlbm9pdC5hbGxhcmRAZ3JlZW5ib25lLm5ldD4KKyMKKyMgQ29weXJp
Z2h0OgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgR3JlZW5ib25lIE5ldHdvcmtzIEdtYkgKKyMKKyMg
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50
X2Z1bmN0aW9uCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSBkYXRldGltZSBpbXBvcnQg
ZGF0ZXRpbWUKK2ltcG9ydCBqaW5qYTIKKworZnJvbSAucGFyc2VycyBpbXBvcnQgY3ZyZgorZnJv
bSAudXRpbHMgaW1wb3J0IHV0Y25vdworCisjIFN1cHBvcnRlZCBSZWQgSGF0IE9TZXMgZm9yIHBh
cnNpbmcuIFRoZSB2YWx1ZSBpcyBhcyB1c2VkIGluCisjIGdhdGhlci1wYWNrYWdlLWxpc3QubmFz
bCB0byBzZXQgInNzaC9sb2dpbi9yZWxlYXNlIgorIyBSZWZlciB0byB0aGF0IGZpbGUsIG9yIHRo
ZSBsc2NfZ2VuZXJhdG9yIGZvciBhIGNvbXBsZXRlIGxpc3QuCitPU19NQVAgPTNEIHsKKyAgICAn
UmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IFNlcnZlciAodi4gNyknIDogJ1JIRU5UXzcnLAorICAg
ICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggU2VydmVyICh2LiA2KScgOiAnUkhFTlRfNicsCisg
ICAgJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBXb3Jrc3RhdGlvbiAodi4gNiknIDogJ1JIRU5U
XzYnLAorICAgICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggRGVza3RvcCAodi4gNiknIDogJ1JI
RU5UXzYnLAorICAgICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggRGVza3RvcCA2JyA6ICdSSEVO
VF82JywKKyAgICAnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4ICh2LiA1IHNlcnZlciknIDogJ1JI
RU5UXzUnLAorICAgICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggRVMgdmVyc2lvbiAyLjEnIDog
J1JIRU5UXzIuMScsCisgICAgJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBXUyB2ZXJzaW9uIDIu
MScgOiAnUkhFTlRfMi4xJywKKyAgICAnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IEFTIHZlcnNp
b24gMycgOiAnUkhFTlRfMycsCisgICAgJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBFUyB2ZXJz
aW9uIDMnIDogJ1JIRU5UXzMnLAorICAgICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggV1MgdmVy
c2lvbiAzJyA6ICdSSEVOVF8zJywKKyAgICAnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IEFTIHZl
cnNpb24gNCcgOiAnUkhFTlRfNCcsCisgICAgJ1JlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCBFUyB2
ZXJzaW9uIDQnIDogJ1JIRU5UXzQnLAorICAgICdSZWQgSGF0IEVudGVycHJpc2UgTGludXggV1Mg
dmVyc2lvbiA0JyA6ICdSSEVOVF80JywKKyAgICAnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IEFT
IChBZHZhbmNlZCBTZXJ2ZXIpIHZlcnNpb24gMi4xJyA6ICdSSEVOVF8yPQouMScsCit9CisKK2Rl
ZiBjYWxjdWxhdGVSaXNrRmFjdG9yKGN2c3Nfc2NvcmUsIGRlYnVnPTNEMCk6CisgICAgIiIiCisg
ICAgQ2FsY3VsYXRlcyBhbmQgUmV0dXJuIFJpc2sgRmFjdG9yIGdpdmVuIENWU1MgQmFzZSBTY29y
ZQorICAgICIiIgorICAgIGN2c3Nfc2NvcmUgPTNEIGZsb2F0KGN2c3Nfc2NvcmUpCisKKyAgICBm
b3IgaGlnaCwgbmFtZSBpbiBbCisgICAgICAgICAgICAoMiwgJ0xvdycpLAorICAgICAgICAgICAg
KDUsICdNZWRpdW0nKSwKKyAgICAgICAgICAgICg4LCAnSGlnaCcpLAorICAgICAgICAgICAgKDEw
LCAnQ3JpdGljYWwnKV06CisgICAgICAgIGlmIGN2c3Nfc2NvcmUgPD0zRCBoaWdoOgorICAgICAg
ICAgICAgcmV0dXJuIG5hbWUKKworCitkZWYgZ2V0UmVsZWFzZU5hbWUob3NfbmFtZSk6CisgICAg
cmV0dXJuIE9TX01BUC5nZXQob3NfbmFtZSwgJ1VOS05PV04nKQorCitkZWYgZ2V0UGFja2FnZU5h
bWUocnBtX25hbWUpOgorICAgIHJldHVybiBycG1fbmFtZS5zcGxpdCgnLScpWzBdCisKK2RlZiBQ
YWNrYWdlTmFtZUZvcnJwbXZ1bG4ocGFja2FnZV9uYW1lKToKKyAgICBwYWNrYWdlX25hbWUgPTNE
IHBhY2thZ2VfbmFtZS5yc3RyaXAoJy5zcmMucnBtfC54ODZfNjQucnBtJykKKyAgICByZXR1cm4g
KHBhY2thZ2VfbmFtZS5yZXBsYWNlKCctJywgJ34nKSkKKworZGVmIHJlbmRlcihjdnJmLCB0ZW1w
bGF0ZXBhdGgsICoqa3dhcmdzKToKKworICAgIHJlZF9oYXQgPTNEIEZhbHNlCisgICAgc2NyaXB0
X2ZhbWlseSA9M0QgIiIKKyAgICBvc19jcGUgPTNEICIiCisgICAgIyMgY2hlY2sgdGhlIHBsYXRm
b3JtCisgICAgaWYgIlJlZCBIYXQgU2VjdXJpdHkgQWR2aXNvcnkiIGluIGN2cmYuX3RpdGxlOgor
ICAgICAgICByZWRfaGF0ID0zRCBUcnVlCisgICAgICAgIHNjcmlwdF9mYW1pbHkgPTNEICJSZWQg
SGF0IExvY2FsIFNlY3VyaXR5IENoZWNrcyIKKyAgICAgICAgb3NfY3BlID0zRCAiY3BlOi9vOnJl
ZGhhdDplbnRlcnByaXNlX2xpbnV4IgorCisjICAgIHByb2R1Y3RfaWQgPTNEIGN2cmYuX3Z1bG5l
cmFiaWxpdGllc1swXS5fcHJvZHVjdHN0YXR1c2VzWzBdLl9wcm9kdWN0aT0KZHMKKyMgICAgcHJp
bnQgKHByb2R1Y3RfaWQpCisjICAgIGZvciBlYWNoaWQgaW4gY3ZyZi5fdnVsbmVyYWJpbGl0aWVz
WzBdLl9wcm9kdWN0c3RhdHVzZXNbMF0uX3Byb2R1Y3RpZD0Kczo9MjAKKyMgICAgICAgIHByaW50
KGN2cmYuZ2V0UHJvZHVjdEZvcklEKGVhY2hpZCkuX25hbWUpCisjPTIwCisjICAgIHByaW50KCJw
cm9kdWN0bmFtZXMiKQorIyAgICBwcmludCgnLCAnLmpvaW4ocC5fbmFtZSBmb3IgcCBpbiBjdnJm
LmdldFByb2R1Y3RMaXN0KCkpKQorICAgICAgPTIwCisKKworICAgIHRlbXBsYXRlZGlyID0zRCBv
cy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ3RlbXBsYXRlcycpCisgICAg
dGVtcGxhdGVMb2FkZXIgPTNEIGppbmphMi5GaWxlU3lzdGVtTG9hZGVyKHNlYXJjaHBhdGg9M0R0
ZW1wbGF0ZWRpcikKKyAgICB0ZW1wbGF0ZUVudiA9M0QgamluamEyLkVudmlyb25tZW50KAorICAg
ICAgICBsb2FkZXI9M0R0ZW1wbGF0ZUxvYWRlciwKKyAgICAgICAgZXh0ZW5zaW9ucz0zRFsnamlu
amEyLmV4dC53aXRoXyddCisgICAgKQorCisgICAgdGVtcGxhdGVFbnYuZmlsdGVyc1sncmlza19m
YWN0b3InXSA9M0QgY2FsY3VsYXRlUmlza0ZhY3RvcgorICAgIHRlbXBsYXRlRW52LmZpbHRlcnNb
J3JlbGVhc2VfbWFwJ10gPTNEIGdldFJlbGVhc2VOYW1lCisgICAgdGVtcGxhdGVFbnYuZmlsdGVy
c1sncGFja2FnZV9uYW1lJ10gPTNEIGdldFBhY2thZ2VOYW1lCisgICAgdGVtcGxhdGVFbnYuZmls
dGVyc1snZm9yX3JwbXZ1bG4nXSA9M0QgUGFja2FnZU5hbWVGb3JycG12dWxuCisKKyAgICB0ZW1w
bGF0ZSA9M0QgdGVtcGxhdGVFbnYuZ2V0X3RlbXBsYXRlKHRlbXBsYXRlcGF0aCkKKworCisKKyAg
ICB0ZW1wbGF0ZVZhcnMgPTNEIHsKKyAgICAgICAgImN2cmYiOiBjdnJmLAorICAgICAgICAic2Ny
aXB0X2lkIjogMCwKKyAgICAgICAgIm5vdyIgOiB1dGNub3coKSwKKyAgICAgICAgInJlZF9oYXQi
OiByZWRfaGF0LAorICAgICAgICAic2NyaXB0X2ZhbWlseSIgOiAgc2NyaXB0X2ZhbWlseSwKKyAg
ICAgICAgIm9zX2NwZSIgOiBvc19jcGUsCisKKyAgICB9CisKKyAgICB0ZW1wbGF0ZVZhcnMudXBk
YXRlKGt3YXJncykKKworICAgIHJldHVybiB0ZW1wbGF0ZS5yZW5kZXIodGVtcGxhdGVWYXJzKQor
CitkZWYgbWFpbihjdnJmcGF0aCwgdGVtcGxhdGVwYXRoKToKKworICAgIHdpdGggb3BlbihjdnJm
cGF0aCwgJ3J0JykgYXMgZjoKKyAgICAgICAgY3ZyZmRvYyA9M0QgY3ZyZi5wYXJzZShmKQorCisg
ICAgb3V0cHV0VGV4dCA9M0QgcmVuZGVyKGN2cmZkb2MsIHRlbXBsYXRlcGF0aCkKKworICAgIGFk
dl9pZCA9M0QgY3ZyZmRvYy5fdHJhY2tpbmcuX2lkZW50aWZpY2F0aW9uLl9pZAorICAgIGlmIGFk
dl9pZCA6CisgICAgICAgIGZpbGVfbmFtZSA9M0QgYWR2X2lkLnJlcGxhY2UoIjoiLCAiXyIpOwor
ICAgICAgICBmaWxlX25hbWUgPTNEICJnYl8iICArIGZpbGVfbmFtZSArICIuIiArIG9zLnBhdGgu
YmFzZW5hbWUodGVtcGxhdGU9CnBhdGgpLnNwbGl0KCcuJylbMF0KKworICAgIHdpdGggb3Blbihm
aWxlX25hbWUsICd3JykgYXMgZmlsZV9oYW5kbGU6CisgICAgICAgIGZpbGVfaGFuZGxlLndyaXRl
KG91dHB1dFRleHQpCisgICAgcHJpbnQoImZpbGUgd3JpdHRlbiB0bzoiLCBmaWxlX25hbWUpCisK
K2lmIF9fbmFtZV9fID0zRD0zRCAiX19tYWluX18iOgorICAgIGltcG9ydCBzeXMKKyAgICB0ZW1w
bGF0ZSA9M0QgIm5hc2wuajIiCisgICAgaWYgbGVuKHN5cy5hcmd2KSA+PTNEIDM6CisgICAgICAg
IHRlbXBsYXRlID0zRCBzeXMuYXJndlsyXQorICAgIG1haW4oc3lzLmFyZ3ZbMV0sIHRlbXBsYXRl
KQpkaWZmIC1yIDAwMDAwMDAwMDAwMCAtciBlMThiNjFhNzNhNjggZmFyb2xsdXovdGVtcGxhdGVz
L2N2cmYuajIKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr
IGIvZmFyb2xsdXovdGVtcGxhdGVzL2N2cmYuajIJVHVlIFNlcCAyMyAxNToxOToxNCAyMDE0ICsw
MjAwCkBAIC0wLDAgKzEsMjU4IEBACit7IworIyBEZXNjcmlwdGlvbjoKKyMgVGVtcGxhdGUgZm9y
IGdlbmVyYXRpb24gb2YgQ1ZSRiBkb2N1bWVudHMKKyMKKyMgQXV0aG9yczoKKyMgQmVubz1DMz1B
RXQgQWxsYXJkIDxiZW5vaXQuYWxsYXJkQGdyZWVuYm9uZS5uZXQ+CisjCisjIENvcHlyaWdodDoK
KyMgQ29weXJpZ2h0IChDKSAyMDE0IEdyZWVuYm9uZSBOZXR3b3JrcyBHbWJICisjCisjIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIKKyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAwMjExMC0xMzAxIFVTQS4KKy0jfQorCis8P3htbCB2ZXJzaW9uPTNEIjEuMCIgZW5jb2Rp
bmc9M0QidXRmLTgiPz4KKworeyMtIFNvbWUgbWFjcm9zIGZvciBwcm9kdWN0dHJlZSBnZW5lcmF0
aW9uICN9Cit7JS0gbWFjcm8gRnVsbFByb2R1Y3ROYW1lcyhwcm9kdWN0dHJlZSwgcGFyZW50KSAl
fQorICB7JS0gZm9yIHByb2R1Y3QgaW4gcHJvZHVjdHRyZWUuX3Byb2R1Y3RzICV9CisgICAgeyUt
IGlmIHByb2R1Y3QuX3BhcmVudCBpcyBzYW1lYXMgcGFyZW50ICV9CisgICAgICA8RnVsbFByb2R1
Y3ROYW1le3sgeydQcm9kdWN0SUQnOiBwcm9kdWN0Ll9wcm9kdWN0aWQsICdDUEUnOiBwcm9kdWN0
Lj0KX2NwZX0gfCB4bWxhdHRyIH19PgorICAgICAgICB7ey0gcHJvZHVjdC5fbmFtZSAtfX0KKyAg
ICAgIDwvRnVsbFByb2R1Y3ROYW1lPgorICAgIHslLSBlbmRpZiAlfQorICB7JS0gZW5kZm9yICV9
Cit7JS0gZW5kbWFjcm8gJX0KKworeyUtIG1hY3JvIE5vdGUobm90ZSkgLSV9CisgIDxOb3Rle3sg
eydUeXBlJzogbm90ZS5fdHlwZSwgJ09yZGluYWwnOiBub3RlLl9vcmRpbmFsLCAnVGl0bGUnOiBu
b3RlLl90aT0KdGxlLCAnQXVkaWVuY2UnOiBub3RlLl9hdWRpZW5jZX0gfCB4bWxhdHRyIH19Pgor
ICAgIHt7LSBub3RlLl9ub3RlIHwgZXNjYXBlIC19fQorICA8L05vdGU+Cit7JS0gZW5kbWFjcm8g
JX0KKzxjdnJmZG9jIHhtbG5zPTNEImh0dHA6Ly93d3cuaWNhc2kub3JnL0NWUkYvc2NoZW1hL2N2
cmYvMS4xIj4KKyAgPERvY3VtZW50VGl0bGU+e3sgY3ZyZi5fdGl0bGUgfX08L0RvY3VtZW50VGl0
bGU+CisgIDxEb2N1bWVudFR5cGU+e3sgY3ZyZi5fdHlwZSB9fTwvRG9jdW1lbnRUeXBlPgorICB7
JS0gd2l0aCBwdWJsaXNoZXIgPTNEIGN2cmYuX3B1Ymxpc2hlciAlfQorICA8RG9jdW1lbnRQdWJs
aXNoZXJ7eyB7J1R5cGUnOiBwdWJsaXNoZXIuX3R5cGUsICdWZW5kb3JJRCc6IHB1Ymxpc2hlci5f
dmU9Cm5kb3JpZH0gfCB4bWxhdHRyIH19PgorICAgIHslLSBpZiBwdWJsaXNoZXIuX2NvbnRhY3Qg
JX0KKyAgICA8Q29udGFjdERldGFpbHM+e3sgcHVibGlzaGVyLl9jb250YWN0IH19PC9Db250YWN0
RGV0YWlscz4KKyAgICB7JS0gZW5kaWYgJX0KKyAgICB7JS0gaWYgcHVibGlzaGVyLl9hdXRob3Jp
dHkgJX0KKyAgICA8SXNzdWluZ0F1dGhvcml0eT57eyBwdWJsaXNoZXIuX2F1dGhvcml0eSB9fTwv
SXNzdWluZ0F1dGhvcml0eT4KKyAgICB7JS0gZW5kaWYgJX0KKyAgPC9Eb2N1bWVudFB1Ymxpc2hl
cj4KKyAgeyUtIGVuZHdpdGggJX0KKyAgeyUtIHdpdGggdHJhY2tpbmcgPTNEIGN2cmYuX3RyYWNr
aW5nICV9CisgIDxEb2N1bWVudFRyYWNraW5nPgorICAgIDxJZGVudGlmaWNhdGlvbj4KKyAgICAg
IDxJRD57eyB0cmFja2luZy5faWRlbnRpZmljYXRpb24uX2lkIH19PC9JRD4KKyAgICAgIHslLSBm
b3IgYWxpYXMgaW4gdHJhY2tpbmcuX2lkZW50aWZpY2F0aW9uLl9hbGlhc2VzICV9CisgICAgICA8
QWxpYXM+e3sgYWxpYXMgfX08L0FsaWFzPgorICAgICAgeyUtIGVuZGZvciAlfQorICAgIDwvSWRl
bnRpZmljYXRpb24+CisgICAgPFN0YXR1cz57eyB0cmFja2luZy5fc3RhdHVzIH19PC9TdGF0dXM+
CisgICAgPFZlcnNpb24+e3sgdHJhY2tpbmcuX3ZlcnNpb24gfCBqb2luKCcuJykgfX08L1ZlcnNp
b24+CisgICAgPFJldmlzaW9uSGlzdG9yeT4KKyAgICAgIHslLSBmb3IgcmV2aXNpb24gaW4gdHJh
Y2tpbmcuX2hpc3RvcnkgJX0KKyAgICAgIDxSZXZpc2lvbj4KKyAgICAgICAgPE51bWJlcj57eyBy
ZXZpc2lvbi5fbnVtYmVyIHwgam9pbignLicpIH19PC9OdW1iZXI+CisgICAgICAgIDxEYXRlPnt7
IHJldmlzaW9uLl9kYXRlLmlzb2Zvcm1hdCgpIH19PC9EYXRlPgorICAgICAgICA8RGVzY3JpcHRp
b24+e3sgcmV2aXNpb24uX2Rlc2NyaXB0aW9uIH19PC9EZXNjcmlwdGlvbj4KKyAgICAgIDwvUmV2
aXNpb24+CisgICAgICB7JS0gZW5kZm9yICV9CisgICAgPC9SZXZpc2lvbkhpc3Rvcnk+CisgICAg
PEluaXRpYWxSZWxlYXNlRGF0ZT57eyB0cmFja2luZy5faW5pdGlhbERhdGUuaXNvZm9ybWF0KCkg
fX08L0luaXRpYWxSZT0KbGVhc2VEYXRlPgorICAgIDxDdXJyZW50UmVsZWFzZURhdGU+e3sgdHJh
Y2tpbmcuX2N1cnJlbnREYXRlLmlzb2Zvcm1hdCgpIH19PC9DdXJyZW50UmU9CmxlYXNlRGF0ZT4K
KyAgICB7JS0gaWYgdHJhY2tpbmcuX2dlbmVyYXRvciAlfQorICAgIDxHZW5lcmF0b3I+CisgICAg
eyUtIHdpdGggZ2VuZXJhdG9yID0zRCB0cmFja2luZy5fZ2VuZXJhdG9yICV9CisgICAgICB7JS0g
aWYgZ2VuZXJhdG9yLl9lbmdpbmUgJX0KKyAgICAgIDxFbmdpbmU+e3sgZ2VuZXJhdG9yLl9lbmdp
bmUgfX08L0VuZ2luZT4KKyAgICAgIHslLSBlbmRpZiAlfQorICAgICAgeyUtIGlmIGdlbmVyYXRv
ci5fZGF0ZSAlfQorICAgICAgPERhdGU+e3sgZ2VuZXJhdG9yLl9kYXRlLmlzb2Zvcm1hdCgpIH19
PC9EYXRlPgorICAgICAgeyUtIGVuZGlmICV9CisgICAgeyUtIGVuZHdpdGggJX0KKyAgICA8L0dl
bmVyYXRvcj4KKyAgICB7JS0gZW5kaWYgJX0KKyAgPC9Eb2N1bWVudFRyYWNraW5nPgorICB7JS0g
ZW5kd2l0aCAlfQorICB7JS0gaWYgY3ZyZi5fbm90ZXMgJX0KKyAgPERvY3VtZW50Tm90ZXM+Cisg
ICAgeyUtIGZvciBub3RlIGluIGN2cmYuX25vdGVzICV9CisgICAge3sgTm90ZShub3RlKSB9fQor
ICAgIHslLSBlbmRmb3IgJX0KKyAgPC9Eb2N1bWVudE5vdGVzPgorICB7JS0gZW5kaWYgJX0KKyAg
eyUtIGlmIGN2cmYuX2Rpc3RyaWJ1dGlvbiAlfQorICA8RG9jdW1lbnREaXN0cmlidXRpb24+e3sg
Y3ZyZi5fZGlzdHJpYnV0aW9uIH19PC9Eb2N1bWVudERpc3RyaWJ1dGlvbj4KKyAgeyUtIGVuZGlm
ICV9CisgIHsjLSBBZ2dyZWdhdGVTZXZlcml0eSBpcyBtaXNzaW5nICN9CisgIHslLSBpZiBjdnJm
Ll9yZWZlcmVuY2VzICV9CisgIDxEb2N1bWVudFJlZmVyZW5jZXM+CisgICAgeyUtIGZvciByZWZl
cmVuY2UgaW4gY3ZyZi5fcmVmZXJlbmNlcyAlfQorICAgIDxSZWZlcmVuY2V7eyB7J1R5cGUnOiBy
ZWZlcmVuY2UuX3R5cGV9IHwgeG1sYXR0ciB9fT4KKyAgICAgIDxVUkw+e3sgcmVmZXJlbmNlLl91
cmwgfX08L1VSTD4KKyAgICAgIDxEZXNjcmlwdGlvbj57eyByZWZlcmVuY2UuX2Rlc2NyaXB0aW9u
IH19PC9EZXNjcmlwdGlvbj4KKyAgICA8L1JlZmVyZW5jZT4KKyAgICB7JS0gZW5kZm9yICV9Cisg
IDwvRG9jdW1lbnRSZWZlcmVuY2VzPgorICB7JS0gZW5kaWYgJX0KKyAgeyUtIGlmIGN2cmYuX2Fj
a25vd2xlZGdtZW50cyAlfQorICA8QWNrbm93bGVkZ21lbnRzPgorICAgIHslLSBmb3IgYWNrbm93
bGVkZ21lbnQgaW4gY3ZyZi5fYWNrbm93bGVkZ21lbnRzICV9CisgICAgPEFja25vd2xlZGdtZW50
PgorICAgICAgeyUtIGlmIGFja25vd2xlZGdtZW50Ll9uYW1lICV9CisgICAgICA8TmFtZT57eyBh
Y2tub3dsZWRnbWVudC5fbmFtZSB9fTwvTmFtZT4KKyAgICAgIHslLSBlbmRpZiAlfQorICAgICAg
eyUtIGlmIGFja25vd2xlZGdtZW50Ll9vcmdhbml6YXRpb24gJX0KKyAgICAgIDxPcmdhbml6YXRp
b24+e3sgYWNrbm93bGVkZ21lbnQuX29yZ2FuaXphdGlvbiB9fTwvT3JnYW5pemF0aW9uPgorICAg
ICAgeyUtIGVuZGlmICV9CisgICAgICB7JS0gaWYgYWNrbm93bGVkZ21lbnQuX2Rlc2NyaXB0aW9u
ICV9CisgICAgICA8RGVzY3JpcHRpb24+e3sgYWNrbm93bGVkZ21lbnQuX2Rlc2NyaXB0aW9uIH19
PC9EZXNjcmlwdGlvbj4KKyAgICAgIHslLSBlbmRpZiAlfQorICAgICAgeyUtIGlmIGFja25vd2xl
ZGdtZW50Ll91cmwgJX0KKyAgICAgIDxVUkw+e3sgYWNrbm93bGVkZ21lbnQuX3VybCB9fTwvVVJM
PgorICAgICAgeyUtIGVuZGlmICV9CisgICAgPC9BY2tub3dsZWRnbWVudD4KKyAgICB7JS0gZW5k
Zm9yICV9CisgIDwvQWNrbm93bGVkZ21lbnRzPgorICB7JS0gZW5kaWYgJX0KKyAgeyUtIGlmIGN2
cmYuX3Byb2R1Y3R0cmVlICV9CisgIDxQcm9kdWN0VHJlZSB4bWxucz0zRCJodHRwOi8vd3d3Lmlj
YXNpLm9yZy9DVlJGL3NjaGVtYS9wcm9kLzEuMSI+CisgIHslLSB3aXRoIHByb2R1Y3R0cmVlID0z
RCBjdnJmLl9wcm9kdWN0dHJlZSAlfQorICAgIHslLSBmb3IgYnJhbmNoIGluIHByb2R1Y3R0cmVl
Ll9icmFuY2hlcyByZWN1cnNpdmUgJX0KKyAgICA8QnJhbmNoe3sgeydUeXBlJzogYnJhbmNoLl90
eXBlLCAnTmFtZSc6IGJyYW5jaC5fbmFtZX0gfCB4bWxhdHRyIH19PgorICAgICAge3stIGxvb3Ao
YnJhbmNoLl9jaGlsZHMpIH19CisgICAgICB7ey0gRnVsbFByb2R1Y3ROYW1lcyhwcm9kdWN0dHJl
ZSwgYnJhbmNoKSB9fQorICAgIDwvQnJhbmNoPgorICAgIHslLSBlbmRmb3IgJX0KKyAgICB7eyBG
dWxsUHJvZHVjdE5hbWVzKHByb2R1Y3R0cmVlLCBwcm9kdWN0dHJlZSkgfX0KKyAgICB7JS0gZm9y
IHJlbGF0aW9uc2hpcCBpbiBwcm9kdWN0dHJlZS5fcmVsYXRpb25zaGlwcyAtJX0KKyAgICA8UmVs
YXRpb25zaGlwe3sgeydQcm9kdWN0UmVmZXJlbmNlJzogcmVsYXRpb25zaGlwLl9wcm9kdWN0cmVm
ZXJlbmNlLCAnPQpSZWxhdGlvblR5cGUnOiByZWxhdGlvbnNoaXAuX3JlbGF0aW9udHlwZSwgJ1Jl
bGF0ZXNUb1Byb2R1Y3RSZWZlcmVuY2UnOiByZWw9CmF0aW9uc2hpcC5fcmVsYXRlc3RvcHJvZHVj
dHJlZmVyZW5jZX0gfCB4bWxhdHRyIH19PgorICAgICAge3stIEZ1bGxQcm9kdWN0TmFtZXMocHJv
ZHVjdHRyZWUsIHJlbGF0aW9uc2hpcCkgfX0KKyAgICA8L1JlbGF0aW9uc2hpcD4KKyAgICB7JS0g
ZW5kZm9yICV9CisgICAgeyUtIGlmIHByb2R1Y3R0cmVlLl9ncm91cHMgJX0KKyAgICA8UHJvZHVj
dEdyb3Vwcz4KKyAgICAgIHslLSBmb3IgZ3JvdXAgaW4gcHJvZHVjdHRyZWUuX2dyb3VwcyAlfQor
ICAgICAgPEdyb3Vwe3sgeydHcm91cElEJzogZ3JvdXAuX2lkfSB8IHhtbGF0dHIgfX0+CisgICAg
ICAgIHslLSBpZiBncm91cC5fZGVzY3JpcHRpb24gJX0KKyAgICAgICAgPERlc2NyaXB0aW9uPnt7
IGdyb3VwLl9kZXNjcmlwdGlvbiB9fTwvRGVzY3JpcHRpb24+CisgICAgICAgIHslLSBlbmRpZiAl
fQorICAgICAgICB7JS0gZm9yIHByb2R1Y3RpZCBpbiBncm91cC5fcHJvZHVjdGlkcyAlfQorICAg
ICAgICA8UHJvZHVjdElEPnt7IHByb2R1Y3RpZCB9fTwvUHJvZHVjdElEPgorICAgICAgICB7JS0g
ZW5kZm9yICV9CisgICAgICA8L0dyb3VwPgorICAgICAgeyUtIGVuZGZvciAlfQorICAgIDwvUHJv
ZHVjdEdyb3Vwcz4KKyAgICB7JS0gZW5kaWYgJX0KKyAgeyUtIGVuZHdpdGggJX0KKyAgPC9Qcm9k
dWN0VHJlZT4KKyAgeyUtIGVuZGlmICV9CisgIHslLSBmb3IgdnVsbmVyYWJpbGl0eSBpbiBjdnJm
Ll92dWxuZXJhYmlsaXRpZXMgJX0KKyAgPFZ1bG5lcmFiaWxpdHkgeG1sbnM9M0QiaHR0cDovL3d3
dy5pY2FzaS5vcmcvQ1ZSRi9zY2hlbWEvdnVsbi8xLjEiIE9yZGluPQphbD0zRCJ7eyB2dWxuZXJh
YmlsaXR5Ll9vcmRpbmFsfX0iPgorICAgIHslLSBpZiB2dWxuZXJhYmlsaXR5Ll90aXRsZSAlfQor
ICAgIDxUaXRsZT57eyB2dWxuZXJhYmlsaXR5Ll90aXRsZSB9fTwvVGl0bGU+CisgICAgeyUtIGVu
ZGlmICV9CisgICAgeyUtIGlmIHZ1bG5lcmFiaWxpdHkuX2lkICV9CisgICAgPElEIFN5c3RlbU5h
bWU9M0Qie3sgdnVsbmVyYWJpbGl0eS5faWQuX3N5c3RlbW5hbWUgfX0iPnt7IHZ1bG5lcmFiaWxp
dD0KeS5faWQuX3ZhbHVlIH19PC9JRD4KKyAgICB7JS0gZW5kaWYgJX0KKyAgICB7JS0gaWYgdnVs
bmVyYWJpbGl0eS5fbm90ZXMgJX0KKyAgICA8Tm90ZXM+CisgICAgICB7JS0gZm9yIG5vdGUgaW4g
dnVsbmVyYWJpbGl0eS5fbm90ZXMgJX0KKyAgICAgIHt7IE5vdGUobm90ZSkgfX0KKyAgICAgIHsl
LSBlbmRmb3IgJX0KKyAgICA8L05vdGVzPgorICAgIHslLSBlbmRpZiAlfQorICAgIHslLSBpZiB2
dWxuZXJhYmlsaXR5Ll9kaXNjb3ZlcnlkYXRlICV9CisgICAgPERpc2NvdmVyeURhdGU+e3sgdnVs
bmVyYWJpbGl0eS5fZGlzY292ZXJ5ZGF0ZS5pc29mb3JtYXQoKSB9fTwvRGlzY292ZT0KcnlEYXRl
PgorICAgIHslLSBlbmRpZiAlfQorICAgIHslLSBpZiB2dWxuZXJhYmlsaXR5Ll9yZWxlYXNlZGF0
ZSAlfQorICAgIDxSZWxlYXNlRGF0ZT57eyB2dWxuZXJhYmlsaXR5Ll9yZWxlYXNlZGF0ZS5pc29m
b3JtYXQoKSB9fTwvUmVsZWFzZURhdGU+CisgICAgeyUtIGVuZGlmICV9CisgICAgeyUtIGlmIHZ1
bG5lcmFiaWxpdHkuX2ludm9sdmVtZW50cyAlfQorICAgIDxJbnZvbHZlbWVudHM+CisgICAgICB7
JS0gZm9yIGludm9sdmVtZW50IGluIHZ1bG5lcmFiaWxpdHkuX2ludm9sdmVtZW50cyAlfQorICAg
ICAgPEludm9sdmVtZW50e3sgeydQYXJ0eSc6IGludm9sdmVtZW50Ll9wYXJ0eSwgJ1N0YXR1cyc6
IGludm9sdmVtZW50Ll89CnN0YXR1c30gfCB4bWxhdHRyIH19PgorICAgICAgICB7JS0gaWYgaW52
b2x2ZW1lbnQuX2Rlc2NyaXB0aW9uICV9CisgICAgICAgIDxEZXNjcmlwdGlvbj57eyBpbnZvbHZl
bWVudC5fZGVzY3JpcHRpb24gfX08L0Rlc2NyaXB0aW9uPgorICAgICAgICB7JS0gZW5kaWYgJX0K
KyAgICAgIDwvSW52b2x2ZW1lbnQ+CisgICAgICB7JS0gZW5kZm9yICV9CisgICAgPC9JbnZvbHZl
bWVudHM+CisgICAgeyUtIGVuZGlmICV9CisgICAgeyUtIGlmIHZ1bG5lcmFiaWxpdHkuX2N2ZSAl
fQorICAgIDxDVkU+e3sgdnVsbmVyYWJpbGl0eS5fY3ZlIH19PC9DVkU+CisgICAgeyUtIGVuZGlm
ICV9CisgICAgeyUtIGZvciBjd2UgaW4gdnVsbmVyYWJpbGl0eS5fY3dlcyAlfQorICAgIDxDV0Ug
SUQ9M0Qie3sgY3dlLl9pZCB9fSI+e3sgY3dlLl92YWx1ZSB9fTwvQ1dFPgorICAgIHslLSBlbmRm
b3IgJX0KKyAgICB7JS0gaWYgdnVsbmVyYWJpbGl0eS5fcHJvZHVjdHN0YXR1c2VzICV9CisgICAg
PFByb2R1Y3RTdGF0dXNlcz4KKyAgICAgIHslLSBmb3Igc3RhdHVzIGluIHZ1bG5lcmFiaWxpdHku
X3Byb2R1Y3RzdGF0dXNlcyAlfQorICAgICAgPFN0YXR1cyBUeXBlPTNEInt7IHN0YXR1cy5fdHlw
ZSB9fSI+CisgICAgICAgIHslLSBmb3IgcHJvZHVjdGlkIGluIHN0YXR1cy5fcHJvZHVjdGlkcyAl
fQorICAgICAgICA8UHJvZHVjdElEPnt7IHByb2R1Y3RpZCB9fTwvUHJvZHVjdElEPgorICAgICAg
ICB7JS0gZW5kZm9yICV9CisgICAgICA8L1N0YXR1cz4KKyAgICAgIHslLSBlbmRmb3IgJX0KKyAg
ICA8L1Byb2R1Y3RTdGF0dXNlcz4KKyAgICB7JS0gZW5kaWYgJX0KKyAgICB7JS0gaWYgdnVsbmVy
YWJpbGl0eS5fY3Zzc3MgJX0KKyAgICA8Q1ZTU1Njb3JlU2V0cz4KKyAgICAgIHslLSBmb3IgY3Zz
cyBpbiB2dWxuZXJhYmlsaXR5Ll9jdnNzcyAlfQorICAgICAgPFNjb3JlU2V0PgorICAgICAgICA8
QmFzZVNjb3JlPnt7IGN2c3MuX2Jhc2VzY29yZSB9fTwvQmFzZVNjb3JlPgorICAgICAgICB7JS0g
aWYgY3Zzcy5fdGVtcG9yYWxzY29yZSAlfQorICAgICAgICA8VGVtcG9yYWxTY29yZT57eyBjdnNz
Ll90ZW1wb3JhbHNjb3JlIH19PC9UZW1wb3JhbFNjb3JlPgorICAgICAgICB7JS0gZW5kaWYgJX0K
KyAgICAgICAgeyUtIGlmIGN2c3MuX2Vudmlyb25tZW50YWxzY29yZSAlfQorICAgICAgICA8RW52
aXJvbm1lbnRhbFNjb3JlPnt7IGN2c3MuX2Vudmlyb25tZW50YWxzY29yZSB9fTwvRW52aXJvbm1l
bnRhbFM9CmNvcmU+CisgICAgICAgIHslLSBlbmRpZiAlfQorICAgICAgICB7JS0gaWYgY3Zzcy5f
dmVjdG9yICV9CisgICAgICAgIDxWZWN0b3I+e3sgY3Zzcy5fdmVjdG9yIH19PC9WZWN0b3I+Cisg
ICAgICAgIHslLSBlbmRpZiAlfQorICAgICAgICB7JS0gZm9yIHByb2R1Y3RpZCBpbiBjdnNzLl9w
cm9kdWN0aWRzICV9CisgICAgICAgIDxQcm9kdWN0SUQ+e3twcm9kdWN0aWR9fTwvUHJvZHVjdElE
PgorICAgICAgICB7JS0gZW5kZm9yICV9CisgICAgICA8L1Njb3JlU2V0PgorICAgICAgeyUtIGVu
ZGZvciAlfQorICAgIDwvQ1ZTU1Njb3JlU2V0cz4KKyAgICB7JS0gZW5kaWYgJX0KKyAgICB7JS0g
aWYgdnVsbmVyYWJpbGl0eS5fcmVtZWRpYXRpb25zICV9CisgICAgPFJlbWVkaWF0aW9ucz4KKyAg
ICAgIHslLSBmb3IgcmVtZWRpYXRpb24gaW4gdnVsbmVyYWJpbGl0eS5fcmVtZWRpYXRpb25zICV9
CisgICAgICA8UmVtZWRpYXRpb24gVHlwZT0zRCJ7eyByZW1lZGlhdGlvbi5fdHlwZSB9fSJ7JSBp
ZiByZW1lZGlhdGlvbi5fZGF0ZT0KICV9IERhdGU9M0Qie3sgcmVtZWRpYXRpb24uX2RhdGUuaXNv
Zm9ybWF0KCkgfX0ieyUgZW5kaWYgJX0+CisgICAgICAgIDxEZXNjcmlwdGlvbj57eyByZW1lZGlh
dGlvbi5fZGVzY3JpcHRpb24gfX08L0Rlc2NyaXB0aW9uPgorICAgICAgICB7JS0gaWYgcmVtZWRp
YXRpb24uX2VudGl0bGVtZW50ICV9CisgICAgICAgIDxFbnRpdGxlbWVudD57eyByZW1lZGlhdGlv
bi5fZW50aXRsZW1lbnQgfX08L0VudGl0bGVtZW50PgorICAgICAgICB7JS0gZW5kaWYgJX0KKyAg
ICAgICAgeyUtIGlmIHJlbWVkaWF0aW9uLl91cmwgJX0KKyAgICAgICAgPFVSTD57eyByZW1lZGlh
dGlvbi5fdXJsIH19PC9VUkw+CisgICAgICAgIHslLSBlbmRpZiAlfQorICAgICAgICB7JS0gZm9y
IHByb2R1Y3RpZCBpbiByZW1lZGlhdGlvbi5fcHJvZHVjdGlkcyAlfQorICAgICAgICA8UHJvZHVj
dElEPnt7IHByb2R1Y3RpZCB9fTwvUHJvZHVjdElEPgorICAgICAgICB7JS0gZW5kZm9yICV9Cisg
ICAgICAgIHslLSBmb3IgZ3JvdXBpZCBpbiByZW1lZGlhdGlvbi5fZ3JvdXBpZHMgJX0KKyAgICAg
ICAgPEdyb3VwSUQ+e3sgZ3JvdXBpZCB9fTwvR3JvdXBJRD4KKyAgICAgICAgeyUtIGVuZGZvciAl
fQorICAgICAgPC9SZW1lZGlhdGlvbj4KKyAgICAgIHslLSBlbmRmb3IgJX0KKyAgICA8L1JlbWVk
aWF0aW9ucz4KKyAgICB7JS0gZW5kaWYgJX0KKyAgPC9WdWxuZXJhYmlsaXR5PgorICB7JS0gZW5k
Zm9yICV9Cis8L2N2cmZkb2M+CmRpZmYgLXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBm
YXJvbGx1ei90ZW1wbGF0ZXMvbmFzbC5qMgotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6
MDAgMTk3MCArMDAwMAorKysgYi9mYXJvbGx1ei90ZW1wbGF0ZXMvbmFzbC5qMglUdWUgU2VwIDIz
IDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCArMSwxMDIgQEAKK3sjCisjIERlc2NyaXB0aW9u
OgorIyBUZW1wbGF0ZSBmb3IgZ2VuZXJhdGlvbiBvZiBOQVNMIGRvY3VtZW50cworIworIyBBdXRo
b3JzOgorIyBCZW5vPUMzPUFFdCBBbGxhcmQgPGJlbm9pdC5hbGxhcmRAZ3JlZW5ib25lLm5ldD4K
KyMKKyMgQ29weXJpZ2h0OgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgR3JlZW5ib25lIE5ldHdvcmtz
IEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorIyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisj
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK
KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorLSN9CisKK3slIGltcG9ydCAi
bmFzbF9jb3JlLmoyIiBhcyBuYXNsX2NvcmUgLSV9CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz0KIyMjIyMK
KyMgT3BlblZBUyBWdWxuZXJhYmlsaXR5IFRlc3QKKyMKKyMge3sgY3ZyZi5fdGl0bGUgfX0gKHt7
IGN2cmYuX3RyYWNraW5nLl9pZGVudGlmaWNhdGlvbi5faWQgfX0pCisjCisjIEF1dGhvcnM6Cisj
IFN5c3RlbSBHZW5lcmF0ZWQgQ2hlY2sKKyMKKyMgQ29weXJpZ2h0OgorIyBDb3B5cmlnaHQgKEMp
IHt7IG5vdy5zdHJmdGltZSgnJVknKSB9fSBHcmVlbmJvbmUgTmV0d29ya3MgR21iSCwgaHR0cDov
L3c9Cnd3LmdyZWVuYm9uZS5uZXQKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyMgKG9yIGFu
eSBsYXRlciB2ZXJzaW9uKSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGgg
dGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxIFVTQS4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjPQojIyMjIworCitpZihkZXNjcmlwdGlvbikK
K3sKKyAgc2NyaXB0X29pZCgiMS4zLjYuMS40LjEuMjU2MjMuMS4wLnt7IHNjcmlwdF9pZCB9fSIp
OworICBzY3JpcHRfdmVyc2lvbigiJFJldmlzaW9uJCIpOworICBzY3JpcHRfdGFnKG5hbWU6ImNo
ZWNrX3R5cGUiLCB2YWx1ZToiYXV0aGVudGljYXRlZCBwYWNrYWdlIHRlc3QiKTsKKyAgc2NyaXB0
X3RhZyhuYW1lOiJsYXN0X21vZGlmaWNhdGlvbiIsIHZhbHVlOiIkRGF0ZSQiKTsKKyAgc2NyaXB0
X3RhZyhuYW1lOiJjcmVhdGlvbl9kYXRlIiwgdmFsdWU6Int7IG5vdy5zdHJmdGltZSgnJUYgJVQg
JXogKCVhLCAlPQpkICViICVZKScpIH19Iik7CisgIHNjcmlwdF9jdmVfaWQoeyUgZm9yIHZ1bG4g
aW4gY3ZyZi5fdnVsbmVyYWJpbGl0aWVzICV9Int7IHZ1bG4uX2N2ZSB9fSJ7JT0KIGlmIG5vdCBs
b29wLmxhc3QgJX0sIHslIGVuZGlmICV9eyUgZW5kZm9yICV9KTsKKyAgc2NyaXB0X3RhZyhuYW1l
OiJjdnNzX2Jhc2UiLCB2YWx1ZToie3sgY3ZyZi5nZXRIaWdoZXN0Q1ZTUygpLl9iYXNlc2NvcmUg
PQp9fSIpOworICBzY3JpcHRfdGFnKG5hbWU6ImN2c3NfYmFzZV92ZWN0b3IiLCB2YWx1ZToie3sg
Y3ZyZi5nZXRIaWdoZXN0Q1ZTUygpLl92ZWM9CnRvciB9fSIpOworICBzY3JpcHRfbmFtZSgie3sg
Y3ZyZi5fdGl0bGUgfX0gKHt7IGN2cmYuX3RyYWNraW5nLl9pZGVudGlmaWNhdGlvbi5faWQgfX09
CikiKTsKKyAgc2NyaXB0X3RhZyhuYW1lOiAic3VtbWFyeSIsIHZhbHVlOiAie3sgbmFzbF9jb3Jl
Lm5vdGVzKGN2cmYsICdTdW1tYXJ5JykgPQp9fSIpOworICBzY3JpcHRfdGFnKG5hbWU6ICJpbnNp
Z2h0IiwgdmFsdWU6ICJ7eyBuYXNsX2NvcmUubm90ZXMoY3ZyZiwgJ0RldGFpbHMnKSA9Cn19Iik7
CisgIHNjcmlwdF90YWcobmFtZTogImFmZmVjdGVkIiAsIHZhbHVlOiAiCit7JS0gZm9yIHByb2R1
Y3QgaW4gY3ZyZi5nZXRQcm9kdWN0TGlzdCgpICV9CisgIHt7IHByb2R1Y3QuX25hbWUgfX0geyUg
aWYgbm90IGxvb3AubGFzdCAlfSwgeyUgZW5kaWYgJX0KKworeyUtIGVuZGZvciAlfSIpOworICBz
Y3JpcHRfdGFnKG5hbWU6ICJzb2x1dGlvbiIgLCB2YWx1ZToiUGxlYXNlIEluc3RhbGwgdGhlIFVw
ZGF0ZWQgUGFja2FnZXM9Ci4iKTsKKworICBzY3JpcHRfeHJlZihuYW1lOiAie3sgY3ZyZi5fdHJh
Y2tpbmcuX2lkIH19IiwgdmFsdWU6ICJ7eyBjdnJmLl90cmFja2luZy49Cl9pZCB9fSIpOworeyUt
IGZvciByZWYgaW4gY3ZyZi5fcmVmZXJlbmNlcyAlfQorICBzY3JpcHRfeHJlZihuYW1lOiAiVVJM
IiAsIHZhbHVlOiAie3sgcmVmLl91cmwgIH19Iik7Cit7JS0gZW5kZm9yICV9CisgIHNjcmlwdF9z
dW1tYXJ5KCJDaGVjayBmb3IgdGhlIHt7IGN2cmYuX3RpdGxlIH19Iik7CisgIHNjcmlwdF9jYXRl
Z29yeShBQ1RfR0FUSEVSX0lORk8pOworICBzY3JpcHRfY29weXJpZ2h0KCJDb3B5cmlnaHQgKEMp
IHt7IG5vdy5zdHJmdGltZSgnJVknKSB9fSBHcmVlbmJvbmUgTmV0d289CnJrcyBHbWJIIik7Cisg
IHNjcmlwdF9mYW1pbHkoInt7IHNjcmlwdF9mYW1pbHkgfX0iKTsKKyAgc2NyaXB0X2RlcGVuZGVu
Y2llcygiZ2F0aGVyLXBhY2thZ2UtbGlzdC5uYXNsIik7CisgIHNjcmlwdF9tYW5kYXRvcnlfa2V5
cyh7JSBpZiBvc19jcGUgJX0iSG9zdERldGFpbHMvT1Mve3sgb3NfY3BlIH19IiwgeyUgZT0KbmRp
ZiAlfSJsb2dpbi9TU0gvc3VjY2VzcyIsICJzc2gvbG9naW4vcmVsZWFzZSIpOworICBleGl0KDAp
OworfQorCisKK3slIGlmIHJlZF9oYXQgJX1pbmNsdWRlKCJwa2ctbGliLXJwbS5pbmMiKTt7JSBl
bmRpZiAlfQorCityZWxlYXNlID0zRCBnZXRfa2JfaXRlbSgic3NoL2xvZ2luL3JlbGVhc2UiKTsK
KworcmVzID0zRCAiIjsKK2lmKHJlbGVhc2UgPTNEPTNEIE5VTEwpeworICBleGl0KDApOworfQor
Cit7JS0gaWYgcmVkX2hhdCAlfQore3sgbmFzbF9jb3JlLmlzcnBtdnVsbihjdnJmLmdldFByb2R1
Y3RMaXN0KCksIGN2cmYuX3Byb2R1Y3R0cmVlKSB9fQoreyUtIGVsc2UgJX0KKyMgTm90IHJlZF9o
YXQKK3slLSBlbmRpZiAlfQorCitpZiAoX19wa2dfbWF0Y2gpIGV4aXQoOTkpOyAjIE5vdCB2dWxu
ZXJhYmxlLgorZXhpdCgwKTsKZGlmZiAtciAwMDAwMDAwMDAwMDAgLXIgZTE4YjYxYTczYTY4IGZh
cm9sbHV6L3RlbXBsYXRlcy9uYXNsX2NvcmUuajIKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAw
OjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZmFyb2xsdXovdGVtcGxhdGVzL25hc2xfY29yZS5qMglU
dWUgU2VwIDIzIDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCArMSw1OSBAQAoreyMKKyMgRGVz
Y3JpcHRpb246CisjIFRlbXBsYXRlIG1hY3JvcyBmb3IgZ2VuZXJhdGlvbiBvZiBOQVNMIGRvY3Vt
ZW50cworIworIyBBdXRob3JzOgorIyBCZW5vPUMzPUFFdCBBbGxhcmQgPGJlbm9pdC5hbGxhcmRA
Z3JlZW5ib25lLm5ldD4KKyMKKyMgQ29weXJpZ2h0OgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgR3Jl
ZW5ib25lIE5ldHdvcmtzIEdtYkgKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorIyBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorLSN9
CisKK3slIG1hY3JvIGlzcnBtdnVsbihwbGlzdCwgcHRyZWUpICV9Cit7JS0gc2V0IGRvbmUgPTNE
IFtdICV9Cit7JSBmb3IgcHJvZCBpbiBwbGlzdCAlfQorICB7JS0gc2V0IG9zLCBwYWNrYWdlID0z
RCBwdHJlZS5kZWNvbXBvc2VQcm9kdWN0KHByb2QuX3Byb2R1Y3RpZCkgJX0KKyAgeyUtIGlmIG9z
IGlzIG5vdCBub25lICV9CisgICAgeyUtIHNldCBybHMgPTNEIG9zLl9uYW1lIHwgcmVsZWFzZV9t
YXAgJX0KKyAgICB7JS0gc2V0IHJwbSA9M0QgcGFja2FnZS5fbmFtZSB8IGZvcl9ycG12dWxuICV9
CisgICAgeyUtIGlmIHJscyAhPTNEICdVTktOT1dOJyAlfQorICAgICAgeyUtIGlmIChybHMsIHJw
bSkgbm90IGluIGRvbmUgJX0KKyMge3sgcGFja2FnZS5fbmFtZSB9fSBvbiB7eyBvcy5fbmFtZSB9
fQoraWYgKChyZXMgPTNEIGlzcnBtdnVsbihwa2c6Int7IHBhY2thZ2UuX25hbWUgfCBwYWNrYWdl
X25hbWUgfX0iLCBycG06Int7IHI9CnBtIH19IiwgcmxzOiJ7eyBybHMgfX0iKSkgIT0zRCBOVUxM
KQorICB7CisgICAgc2VjdXJpdHlfbWVzc2FnZShkYXRhOnJlcyk7CisgICAgZXhpdCgwKTsKKyAg
fQorICAgICAgICB7ey0gZG9uZS5hcHBlbmQoKHJscywgcnBtKSkgb3IgJycgfX0KKyAgICAgIHsl
LSBlbmRpZiAlfQorICAgIHslLSBlbHNlICV9CisjIFVua25vd24gcmVsZWFzZToge3sgb3MuX25h
bWUgfX0KKyAgICB7JS0gZW5kaWYgJX0KKyAgeyUtIGVuZGlmICV9Cit7JS0gZW5kZm9yICV9Cit7
JSBlbmRtYWNybyAlfQorCit7JSBtYWNybyBub3RlcyhjdnJmLCBuYW1lKSAlfQoreyUtIGZvciBu
b3RlIGluIGN2cmYuX25vdGVzICV9CisgIHslLSBpZiBub3RlLl90eXBlID0zRD0zRCBuYW1lIG9y
IG5vdGUuX3RpdGxlID0zRD0zRCBuYW1lICV9e3sgbm90ZS5fbm90ZT0KLnJlcGxhY2UoJyInLCAi
JyIpIH19eyUgZW5kaWYgJX0KK3slLSBlbmRmb3IgJX0KK3slLSBmb3IgdnVsbmVyYWJpbGl0eSBp
biBjdnJmLl92dWxuZXJhYmlsaXRpZXMgJX0KKyAgeyUtIGZvciBub3RlIGluIHZ1bG5lcmFiaWxp
dHkuX25vdGVzICV9CisgICAgeyUtIGlmIG5vdGUuX3R5cGUgPTNEPTNEIG5hbWUgb3Igbm90ZS5f
dGl0bGUgPTNEPTNEIG5hbWUgJX17eyBub3RlLl9ubz0KdGUucmVwbGFjZSgnIicsICInIikgfX17
JSBlbmRpZiAlfQorICB7JS0gZW5kZm9yICV9Cit7JS0gZW5kZm9yICV9Cit7JSBlbmRtYWNybyAl
fQpkaWZmIC1yIDAwMDAwMDAwMDAwMCAtciBlMThiNjFhNzNhNjggZmFyb2xsdXovdGVtcGxhdGVz
L292YWwuajIKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr
IGIvZmFyb2xsdXovdGVtcGxhdGVzL292YWwuajIJVHVlIFNlcCAyMyAxNToxOToxNCAyMDE0ICsw
MjAwCkBAIC0wLDAgKzEsMTU0IEBACit7IworIyBEZXNjcmlwdGlvbjoKKyMgVGVtcGxhdGUgZm9y
IGdlbmVyYXRpb24gb2YgT1ZBTCBkb2N1bWVudHMKKyMKKyMgQXV0aG9yczoKKyMgQW50dSBTYW5h
ZGkgPHNhbnR1QHNlY3BvZC5jb20+CisjCisjIENvcHlyaWdodDoKKyMgQ29weXJpZ2h0IChDKSAy
MDE0IEdyZWVuYm9uZSBOZXR3b3JrcyBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyMg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj
CisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QS4KKy0jfQorCis8P3htbCB2ZXJzaW9uPTNEIjEuMCIgZW5jb2Rpbmc9M0QiVVRGLTgiPz4KK3sl
IGltcG9ydCAib3ZhbF9jb3JlLmoyIiBhcyBvdmFsX2NvcmUgLSV9Cis8b3ZhbF9kZWZpbml0aW9u
cyB4bWxucz0zRCJodHRwOi8vb3ZhbC5taXRyZS5vcmcvWE1MU2NoZW1hL292YWwtZGVmaW5pdGlv
bj0Kcy01IiB4bWxuczpvdmFsLWRlZj0zRCJodHRwOi8vb3ZhbC5taXRyZS5vcmcvWE1MU2NoZW1h
L292YWwtZGVmaW5pdGlvbnMtNSIgPQp4bWxuczpvdmFsPTNEImh0dHA6Ly9vdmFsLm1pdHJlLm9y
Zy9YTUxTY2hlbWEvb3ZhbC1jb21tb24tNSIgeG1sbnM6eHNpPTNEImg9CnR0cDovL3d3dy53My5v
cmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0zRCJodHRwOi8v
b3ZhbD0KLm1pdHJlLm9yZy9YTUxTY2hlbWEvb3ZhbC1kZWZpbml0aW9ucy01I2VzeCBlc3gtZGVm
aW5pdGlvbnMtc2NoZW1hLnhzZCBodHRwPQo6Ly9vdmFsLm1pdHJlLm9yZy9YTUxTY2hlbWEvb3Zh
bC1kZWZpbml0aW9ucy01I3VuaXggdW5peC1kZWZpbml0aW9ucy1zY2hlbWE9Ci54c2QgaHR0cDov
L292YWwubWl0cmUub3JnL1hNTFNjaGVtYS9vdmFsLWRlZmluaXRpb25zLTUjbGludXggbGludXgt
ZGVmaW5pdD0KaW9ucy1zY2hlbWEueHNkIGh0dHA6Ly9vdmFsLm1pdHJlLm9yZy9YTUxTY2hlbWEv
b3ZhbC1kZWZpbml0aW9ucy01I3dpbmRvd3MgPQp3aW5kb3dzLWRlZmluaXRpb25zLXNjaGVtYS54
c2QgaHR0cDovL292YWwubWl0cmUub3JnL1hNTFNjaGVtYS9vdmFsLWRlZmluaXQ9CmlvbnMtNSNp
bmRlcGVuZGVudCBpbmRlcGVuZGVudC1kZWZpbml0aW9ucy1zY2hlbWEueHNkIGh0dHA6Ly9vdmFs
Lm1pdHJlLm9yZz0KL1hNTFNjaGVtYS9vdmFsLWRlZmluaXRpb25zLTUgb3ZhbC1kZWZpbml0aW9u
cy1zY2hlbWEueHNkIGh0dHA6Ly9vdmFsLm1pdHJlPQoub3JnL1hNTFNjaGVtYS9vdmFsLWRlZmlu
aXRpb25zLTUjc29sYXJpcyBzb2xhcmlzLWRlZmluaXRpb25zLXNjaGVtYS54c2QgaHQ9CnRwOi8v
b3ZhbC5taXRyZS5vcmcvWE1MU2NoZW1hL292YWwtY29tbW9uLTUgb3ZhbC1jb21tb24tc2NoZW1h
LnhzZCBodHRwOi8vbz0KdmFsLm1pdHJlLm9yZy9YTUxTY2hlbWEvb3ZhbC1kZWZpbml0aW9ucy01
I2hwdXggaHB1eC1kZWZpbml0aW9ucy1zY2hlbWEueHNkPQogaHR0cDovL292YWwubWl0cmUub3Jn
L1hNTFNjaGVtYS9vdmFsLWRlZmluaXRpb25zLTUjYWl4IGFpeC1kZWZpbml0aW9ucy1zY2g9CmVt
YS54c2QiPgorICA8Z2VuZXJhdG9yPgorICAgIDxvdmFsOnByb2R1Y3RfbmFtZT5TZWNQb2QgU0NB
UCBSZXBvc2l0b3J5PC9vdmFsOnByb2R1Y3RfbmFtZT4KKyAgICA8b3ZhbDpzY2hlbWFfdmVyc2lv
bj41LjEwPC9vdmFsOnNjaGVtYV92ZXJzaW9uPgorICAgIDxvdmFsOnRpbWVzdGFtcD57eyBub3cu
aXNvZm9ybWF0KCkgfX08L292YWw6dGltZXN0YW1wPgorICA8L2dlbmVyYXRvcj4KKyAgPGRlZmlu
aXRpb25zPgoreyUtIHNldCBkb25lID0zRCBbXSAlfQoreyUgZm9yIHByb2QgaW4gY3ZyZi5nZXRQ
cm9kdWN0TGlzdCgpICAgJX0KKyAgeyUtIHNldCBvcywgcGFja2FnZSA9M0QgY3ZyZi5fcHJvZHVj
dHRyZWUuZGVjb21wb3NlUHJvZHVjdChwcm9kLl9wcm9kdWN0PQppZCkgJX0KKyAgIHslLSBpZiBv
cyBpcyBub3Qgbm9uZSAlfQorICAgIHslLSBzZXQgcmxzID0zRCBvcy5fbmFtZSB8IHJlbGVhc2Vf
bWFwICV9CisgICAgeyUtIHNldCBycG0gPTNEIHBhY2thZ2UuX25hbWUgfCBmb3JfcnBtdnVsbiAl
fQorICAgIHslLSBpZiBybHMgIT0zRCAnVU5LTk9XTicgJX0KKyAgICAgIHslLSBpZiAocmxzLCBy
cG0pIG5vdCBpbiBkb25lICV9CisgIDxkZWZpbml0aW9uIHZlcnNpb249M0QiMSIgY2xhc3M9M0Qi
aW52ZW50b3J5IiBpZD0zRCJvdmFsOm9yZy5zZWNwb2Qub3ZhbD0KOmRlZjo1MDEzMDkiPgorICAg
ICAgPG1ldGFkYXRhPgorICAgICAgICA8dGl0bGU+IHt7IG9zLl9uYW1lIH19IGlzIGluc3RhbGxl
ZDwvdGl0bGU+CisgICAgICAgIDxhZmZlY3RlZCBmYW1pbHk9M0QidW5peCI+CisgICAgICAgICAg
PHBsYXRmb3JtPnt7IG9zLl9uYW1lIH19PC9wbGF0Zm9ybT4KKyAgICAgICAgPC9hZmZlY3RlZD4K
KyAgICAgICAgPHJlZmVyZW5jZSBzb3VyY2U9M0QiQ1BFIiByZWZfaWQ9M0Qie3sgb3NfY3BlIH19
Ii8+CisgICAgICAgIDxkZXNjcmlwdGlvbj57eyBvcy5fbmFtZSB9fSBpcyBpbnN0YWxsZWQ8L2Rl
c2NyaXB0aW9uPgorICAgICAgICA8b3ZhbF9yZXBvc2l0b3J5PgorICAgICAgICAgIDxkYXRlcz4K
KyAgICAgICAgICAgIDxzdWJtaXR0ZWQgZGF0ZT0zRCJ7eyBub3cuaXNvZm9ybWF0KCkgfX0iPgor
ICAgICAgICAgICAgICA8Y29udHJpYnV0b3Igb3JnYW5pemF0aW9uPTNEIlNlY1BvZCBUZWNobm9s
b2dpZXMiPlNlY1BvZCBUZWE9Cm08L2NvbnRyaWJ1dG9yPgorICAgICAgICAgICAgPC9zdWJtaXR0
ZWQ+CisgICAgICAgICAgPC9kYXRlcz4KKyAgICAgICAgICA8c3RhdHVzPkFDQ0VQVEVEPC9zdGF0
dXM+CisgICAgICAgIDwvb3ZhbF9yZXBvc2l0b3J5PgorICAgICAgPC9tZXRhZGF0YT4KKyAgICAg
IDxjcml0ZXJpYT4KKyAgICAgICAgPGNyaXRlcmlvbiBjb21tZW50PTNEInt7IG9zLl9uYW1lIH19
IGlzIGluc3RhbGxlZCIgdGVzdF9yZWY9M0Qib3ZhPQpsOm9yZy5zZWNwb2Qub3ZhbDp0c3Q6NTEx
MzU5Ii8+CisgICAgICA8L2NyaXRlcmlhPgorICAgPC9kZWZpbml0aW9uPgorICAgIDxkZWZpbml0
aW9uIHZlcnNpb249M0QiMSIgY2xhc3M9M0QiaW52ZW50b3J5IiBpZD0zRCJvdmFsOm9yZy5zZWNw
b2Qub3Y9CmFsOmRlZjo1MDEzMDkiPgorICAgICAgPG1ldGFkYXRhPgorICAgICAgICA8dGl0bGU+
IHt7IHBhY2thZ2UuX25hbWUgfX0gaXMgaW5zdGFsbGVkPC90aXRsZT4KKyAgICAgICAgPGFmZmVj
dGVkIGZhbWlseT0zRCJ1bml4Ij4KKyAgICAgICAgICA8cGxhdGZvcm0+e3sgcGFja2FnZS5fbmFt
ZSB9fTwvcGxhdGZvcm0+CisgICAgICAgIDwvYWZmZWN0ZWQ+CisgICAgICAgIDxyZWZlcmVuY2Ug
c291cmNlPTNEIkNQRSIgcmVmX2lkPTNEInt7IG9zX2NwZSB9fSIvPgorICAgICAgICA8ZGVzY3Jp
cHRpb24+e3sgcGFja2FnZS5fbmFtZSB9fSBpcyBpbnN0YWxsZWQ8L2Rlc2NyaXB0aW9uPgorICAg
ICAgICA8b3ZhbF9yZXBvc2l0b3J5PgorICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgIDxz
dWJtaXR0ZWQgZGF0ZT0zRCJ7eyBub3cuaXNvZm9ybWF0KCkgfX0iPgorICAgICAgICAgICAgICA8
Y29udHJpYnV0b3Igb3JnYW5pemF0aW9uPTNEIlNlY1BvZCBUZWNobm9sb2dpZXMiPlNlY1BvZCBU
ZWE9Cm08L2NvbnRyaWJ1dG9yPgorICAgICAgICAgICAgPC9zdWJtaXR0ZWQ+CisgICAgICAgICAg
PC9kYXRlcz4KKyAgICAgICAgICA8c3RhdHVzPkFDQ0VQVEVEPC9zdGF0dXM+CisgICAgICAgIDwv
b3ZhbF9yZXBvc2l0b3J5PgorICAgICAgPC9tZXRhZGF0YT4KKyAgICAgIDxjcml0ZXJpYT4KKyAg
ICAgICAgPGNyaXRlcmlvbiBjb21tZW50PTNEInt7IHBhY2thZ2UuX25hbWUgfX0gaXMgaW5zdGFs
bGVkIiB0ZXN0X3JlZj0KPTNEIm92YWw6b3JnLnNlY3BvZC5vdmFsOnRzdDo1MTEzNTkiLz4KKyAg
ICAgIDwvY3JpdGVyaWE+CisgICAgPC9kZWZpbml0aW9uPgorICAgIDxkZWZpbml0aW9uIHZlcnNp
b249M0QiMCIgY2xhc3M9M0QicGF0Y2giIGlkPTNEIm92YWw6b3JnLnNlY3BvZC5vdmFsOmQ9CmVm
OjUwMTM1MiI+CisgICAgICA8bWV0YWRhdGE+CisgICAgICAgIDx0aXRsZT57eyBjdnJmLl90aXRs
ZSB9fSAoe3sgY3ZyZi5fdHJhY2tpbmcuX2lkIH19KTwvdGl0bGU+CisgICAgICAgIDxhZmZlY3Rl
ZCBmYW1pbHk9M0QidW5peCI+CisgICAgICAgICAgPHBsYXRmb3JtPnt7IG9zLl9uYW1lIH19PC9w
bGF0Zm9ybT4KKyAgICAgICAgICA8cHJvZHVjdD4ge3sgcGFja2FnZS5fbmFtZSB9fTwvcHJvZHVj
dD4KKyAgICAgICAgPC9hZmZlY3RlZD4KKyAgICAgICAgPHJlZmVyZW5jZSBzb3VyY2U9M0QiVkVO
RE9SIiByZWZfdXJsPTNEInslIGZvciByZWYgaW4gY3ZyZi5fcmVmZXJlPQpuY2VzICV9IHslLWlm
ICdSSFNBLScgaW4gcmVmLl91cmwgJX17e3JlZi5fdXJsfX17JS0gZW5kaWYgJX0geyUtIGVuZGZv
ciAlfSI9CiByZWZfaWQ9M0Qie3sgY3ZyZi5fdHJhY2tpbmcuX2lkIH19Ii8+CisKKyAgICAgICAg
eyUtIGZvciB2dWxuIGluIGN2cmYuX3Z1bG5lcmFiaWxpdGllcyAlfQorICAgICAgICA8cmVmZXJl
bmNlIHNvdXJjZT0zRCJDVkUiIHJlZl91cmw9M0QiaHR0cDovL3d3dy5zY2FwcmVwby5jb20vdmll
dy49CmpzcD9pZD0zRHt7IHZ1bG4uX2N2ZSB9fSIgcmVmX2lkPTNEInt7IHZ1bG4uX2N2ZSB9fSIv
PgorICAgICAgICB7JS0gZW5kZm9yICV9KQorICAgICAgICA8ZGVzY3JpcHRpb24+e3sgb3ZhbF9j
b3JlLm5vdGVzKGN2cmYsICdEZXRhaWxzJykgfX08L2Rlc2NyaXB0aW9uPgorICAgICAgICA8b3Zh
bF9yZXBvc2l0b3J5PgorICAgICAgICAgIDxkYXRlcz4KKyAgICAgICAgICAgIDxzdWJtaXR0ZWQg
ZGF0ZT0zRCJ7eyBub3cuaXNvZm9ybWF0KCkgfX0iPgorICAgICAgICAgICAgICA8Y29udHJpYnV0
b3Igb3JnYW5pemF0aW9uPTNEIlNlY1BvZCBUZWNobm9sb2dpZXMiPlNlY1BvZCBUZWE9Cm08L2Nv
bnRyaWJ1dG9yPgorICAgICAgICAgICAgPC9zdWJtaXR0ZWQ+CisgICAgICAgICAgPC9kYXRlcz4K
KyAgICAgICAgICA8c3RhdHVzPklOSVRJQUwgU1VCTUlTU0lPTjwvc3RhdHVzPgorICAgICAgICA8
L292YWxfcmVwb3NpdG9yeT4KKyAgICAgIDwvbWV0YWRhdGE+CisgICAgICA8Y3JpdGVyaWEgb3Bl
cmF0b3I9M0QiQU5EIj4KKyAgICAgICAgPGV4dGVuZF9kZWZpbml0aW9uIGNvbW1lbnQ9M0Qie3sg
b3MuX25hbWUgfX0gaXMgaW5zdGFsbGVkIiBkZWZpbml0PQppb25fcmVmPTNEIm92YWw6b3JnLnNl
Y3BvZC5vdmFsOmRlZjo1MDEzMDkiLz4KKyAgICAgICAgPGV4dGVuZF9kZWZpbml0aW9uIGNvbW1l
bnQ9M0QiIHt7IHBhY2thZ2UuX25hbWUgfX0gaXMgaW5zdGFsbGVkIiBkPQplZmluaXRpb25fcmVm
PTNEIm92YWw6b3JnLnNlY3BvZC5vdmFsOmRlZjoyMDMzODciLz4KKyAgICAgICAgPGNyaXRlcmlh
IGNvbW1lbnQ9M0QiQWxsIGRlcGVuZGVudCBwYWNrYWdlcyBvZiB7eyBwYWNrYWdlLl9uYW1lIH19
PQogIiBvcGVyYXRvcj0zRCJPUiI+CisgICAgICAgICAgPGNyaXRlcmlvbiBjb21tZW50PTNEIiB7
eyBwYWNrYWdlLl9uYW1lIH19IGlzIGVhcmxpZXIgdGhhbiAwOjIuMz0KLjUtMy5lbDdfMCIgdGVz
dF9yZWY9M0Qib3ZhbDpvcmcuc2VjcG9kLm92YWw6dHN0OjIxNTY5MCIvPgorICAgICAgICA8L2Ny
aXRlcmlhPgorICAgICAgPC9jcml0ZXJpYT4KKyAgICA8L2RlZmluaXRpb24+CisgIDwvZGVmaW5p
dGlvbnM+CisgIDx0ZXN0cz4KKyAgICA8dGV4dGZpbGVjb250ZW50NTRfdGVzdCB4bWxucz0zRCJo
dHRwOi8vb3ZhbC5taXRyZS5vcmcvWE1MU2NoZW1hL292YWwtPQpkZWZpbml0aW9ucy01I2luZGVw
ZW5kZW50IiBjb21tZW50PTNEIlJlZCBIYXQgRW50ZXJwcmlzZSBMaW51eCA3IGlzIGluc3RhbGw9
CmVkIiBpZD0zRCJvdmFsOm9yZy5zZWNwb2Qub3ZhbDp0c3Q6NTExMzU5IiB2ZXJzaW9uPTNEIjEi
IGNoZWNrPTNEImFsbCIgY2hlYz0Ka19leGlzdGVuY2U9M0QiYXRfbGVhc3Rfb25lX2V4aXN0cyI+
CisgICAgICA8b2JqZWN0IG9iamVjdF9yZWY9M0Qib3ZhbDpvcmcuc2VjcG9kLm92YWw6b2JqOjUw
MDAwMCIvPgorICAgICAgPHN0YXRlIHN0YXRlX3JlZj0zRCJvdmFsOm9yZy5zZWNwb2Qub3ZhbDpz
dGU6NTAyMTMzIi8+CisgICAgPC90ZXh0ZmlsZWNvbnRlbnQ1NF90ZXN0PgorICAgIDxycG1pbmZv
X3Rlc3QgeG1sbnM9M0QiaHR0cDovL292YWwubWl0cmUub3JnL1hNTFNjaGVtYS9vdmFsLWRlZmlu
aXRpb249CnMtNSNsaW51eCIgY29tbWVudD0zRCJ7eyBwYWNrYWdlLl9uYW1lIH19IGlzIGluc3Rh
bGxlZCIgdmVyc2lvbj0zRCIwIiBjaGVjaz0KPTNEImFsbCIgY2hlY2tfZXhpc3RlbmNlPTNEImF0
X2xlYXN0X29uZV9leGlzdHMiPgorICAgICAgPG9iamVjdCBvYmplY3RfcmVmPTNEIm92YWw6b3Jn
LnNlY3BvZC5vdmFsOm9iajoyMDA4ODciLz4KKyAgICA8L3JwbWluZm9fdGVzdD4KKyAgICA8cnBt
aW5mb190ZXN0IHhtbG5zPTNEImh0dHA6Ly9vdmFsLm1pdHJlLm9yZy9YTUxTY2hlbWEvb3ZhbC1k
ZWZpbml0aW9uPQpzLTUjbGludXgiIGNvbW1lbnQ9M0QiIHt7IHBhY2thZ2UuX25hbWUgfX0gaXMg
ZWFybGllciB0aGFuIDA6Mi4zLjUtMy5lbDdfMCI9CiBpZD0zRCJvdmFsOm9yZy5zZWNwb2Qub3Zh
bDp0c3Q6MjE1NjkwIiB2ZXJzaW9uPTNEIjAiIGNoZWNrPTNEImFsbCIgY2hlY2tfZT0KeGlzdGVu
Y2U9M0QiYXRfbGVhc3Rfb25lX2V4aXN0cyI+CisgICAgICA8b2JqZWN0IG9iamVjdF9yZWY9M0Qi
b3ZhbDpvcmcuc2VjcG9kLm92YWw6b2JqOjIwMDg4NyIvPgorICAgICAgPHN0YXRlIHN0YXRlX3Jl
Zj0zRCJvdmFsOm9yZy5zZWNwb2Qub3ZhbDpzdGU6MjAzODM1Ii8+CisgICAgPC9ycG1pbmZvX3Rl
c3Q+CisgIDwvdGVzdHM+CisgIDxvYmplY3RzPgorICAgIDx0ZXh0ZmlsZWNvbnRlbnQ1NF9vYmpl
Y3QgeG1sbnM9M0QiaHR0cDovL292YWwubWl0cmUub3JnL1hNTFNjaGVtYS9vdmE9CmwtZGVmaW5p
dGlvbnMtNSNpbmRlcGVuZGVudCIgY29tbWVudD0zRCJPYmplY3QgaG9sZHMgUkhFTCB2ZXJzaW9u
IiBpZD0zRCJvdj0KYWw6b3JnLnNlY3BvZC5vdmFsOm9iajo1MDAwMDAiIHZlcnNpb249M0QiMSI+
CisgICAgICA8cGF0aD4vZXRjPC9wYXRoPgorICAgICAgPGZpbGVuYW1lPnJlZGhhdC1yZWxlYXNl
PC9maWxlbmFtZT4KKyAgICAgIDxwYXR0ZXJuIG9wZXJhdGlvbj0zRCJwYXR0ZXJuIG1hdGNoIj5e
UmVkIEhhdCBFbnRlcnByaXNlLipyZWxlYXNlLiokPQo8L3BhdHRlcm4+CisgICAgICA8aW5zdGFu
Y2UgZGF0YXR5cGU9M0QiaW50Ij4xPC9pbnN0YW5jZT4KKyAgICA8L3RleHRmaWxlY29udGVudDU0
X29iamVjdD4KKyAgICA8cnBtaW5mb19vYmplY3QgeG1sbnM9M0QiaHR0cDovL292YWwubWl0cmUu
b3JnL1hNTFNjaGVtYS9vdmFsLWRlZmluaXRpPQpvbnMtNSNsaW51eCIgY29tbWVudD0zRCJyZXN0
ZWFzeS1iYXNlIHBhY2thZ2UgaW5mb3JtYXRpb24iIGlkPTNEIm92YWw6b3JnLnM9CmVjcG9kLm92
YWw6b2JqOjIwMDg4NyIgdmVyc2lvbj0zRCIwIj4KKyAgICAgIDxuYW1lPnt7IHBhY2thZ2UuX25h
bWUgfX08L25hbWU+CisgICAgPC9ycG1pbmZvX29iamVjdD4KKyAgPC9vYmplY3RzPgorICA8c3Rh
dGVzPgorICAgIDx0ZXh0ZmlsZWNvbnRlbnQ1NF9zdGF0ZSB4bWxucz0zRCJodHRwOi8vb3ZhbC5t
aXRyZS5vcmcvWE1MU2NoZW1hL292YWw9Ci1kZWZpbml0aW9ucy01I2luZGVwZW5kZW50IiBjb21t
ZW50PTNEIlN0YXRlIG1hdGNoZXMgUkhFTCA3IiBpZD0zRCJvdmFsOm9yZz0KLnNlY3BvZC5vdmFs
OnN0ZTo1MDIxMzMiIHZlcnNpb249M0QiMSI+CisgICAgICA8dGV4dCBvcGVyYXRpb249M0QicGF0
dGVybiBtYXRjaCI+XlJlZCBIYXQgRW50ZXJwcmlzZS4qcmVsZWFzZSA3LiokPD0KL3RleHQ+Cisg
ICAgPC90ZXh0ZmlsZWNvbnRlbnQ1NF9zdGF0ZT4KKyAgICA8cnBtaW5mb19zdGF0ZSB4bWxucz0z
RCJodHRwOi8vb3ZhbC5taXRyZS5vcmcvWE1MU2NoZW1hL292YWwtZGVmaW5pdGlvPQpucy01I2xp
bnV4IiBjb21tZW50PTNEInZlcnNpb24gaXMgZWFybGllciB0aGFuIDA6Mi4zLjUtMy5lbDdfMCIg
aWQ9M0Qib3ZhbDo9Cm9yZy5zZWNwb2Qub3ZhbDpzdGU6MjAzODM1IiB2ZXJzaW9uPTNEIjAiPgor
ICAgICAgPGV2ciBkYXRhdHlwZT0zRCJldnJfc3RyaW5nIiBvcGVyYXRpb249M0QibGVzcyB0aGFu
Ij4wOjIuMy41LTMuZWw3XzA9CjwvZXZyPgorICAgIDwvcnBtaW5mb19zdGF0ZT4KKyAgPC9zdGF0
ZXM+Cis8L292YWxfZGVmaW5pdGlvbnM+CisKKyAge3stIGRvbmUuYXBwZW5kKChybHMsIHJwbSkp
IG9yICcnIH19CisgICAgICB7JS0gZW5kaWYgJX0KKyAgICB7JS0gZW5kaWYgJX0KKyAgeyUtIGVu
ZGlmICV9Cit7JS0gZW5kZm9yICV9CmRpZmYgLXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2
OCBmYXJvbGx1ei90ZW1wbGF0ZXMvb3ZhbF9jb3JlLmoyCi0tLSAvZGV2L251bGwJVGh1IEphbiAw
MSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2Zhcm9sbHV6L3RlbXBsYXRlcy9vdmFsX2NvcmUu
ajIJVHVlIFNlcCAyMyAxNToxOToxNCAyMDE0ICswMjAwCkBAIC0wLDAgKzEsMzUgQEAKK3sjCisj
IERlc2NyaXB0aW9uOgorIyBUZW1wbGF0ZSBtYWNyb3MgZm9yIGdlbmVyYXRpb24gb2YgT1ZBTCBk
b2N1bWVudHMKKyMKKyMgQXV0aG9yczoKKyMgQmVubz1DMz1BRXQgQWxsYXJkIDxiZW5vaXQuYWxs
YXJkQGdyZWVuYm9uZS5uZXQ+CisjCisjIENvcHlyaWdodDoKKyMgQ29weXJpZ2h0IChDKSAyMDE0
IEdyZWVuYm9uZSBOZXR3b3JrcyBHbWJICisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyMgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisj
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4K
Ky0jfQorCit7JSBtYWNybyBub3RlcyhjdnJmLCBuYW1lKSAlfQoreyUtIGZvciBub3RlIGluIGN2
cmYuX25vdGVzICV9CisgIHslLSBpZiBub3RlLl90eXBlID0zRD0zRCBuYW1lIG9yIG5vdGUuX3Rp
dGxlID0zRD0zRCBuYW1lICV9e3sgbm90ZS5fbm90ZT0KLnJlcGxhY2UoJyInLCAiJyIpIH19eyUg
ZW5kaWYgJX0KK3slLSBlbmRmb3IgJX0KK3slLSBmb3IgdnVsbmVyYWJpbGl0eSBpbiBjdnJmLl92
dWxuZXJhYmlsaXRpZXMgJX0KKyAgeyUtIGZvciBub3RlIGluIHZ1bG5lcmFiaWxpdHkuX25vdGVz
ICV9CisgICAgeyUtIGlmIG5vdGUuX3R5cGUgPTNEPTNEIG5hbWUgb3Igbm90ZS5fdGl0bGUgPTNE
PTNEIG5hbWUgJX17eyBub3RlLl9ubz0KdGUucmVwbGFjZSgnIicsICInIikgfX17JSBlbmRpZiAl
fQorICB7JS0gZW5kZm9yICV9Cit7JS0gZW5kZm9yICV9Cit7JSBlbmRtYWNybyAlfQpkaWZmIC1y
IDAwMDAwMDAwMDAwMCAtciBlMThiNjFhNzNhNjggZmFyb2xsdXovdXRpbHMucHkKLS0tIC9kZXYv
bnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZmFyb2xsdXovdXRpbHMu
cHkJVHVlIFNlcCAyMyAxNToxOToxNCAyMDE0ICswMjAwCkBAIC0wLDAgKzEsMzIgQEAKKyMgLSot
IGNvZGluZzogdXRmLTggLSotCisjIERlc2NyaXB0aW9uOgorIyBVdGlsaXRpZXMgdXNlZCBhdCBt
dWx0aXBsZSBwbGFjZXMuCisjCisjIEF1dGhvcnM6CisjIEJlbm89QzM9QUV0IEFsbGFyZCA8YmVu
b2l0LmFsbGFyZEBncmVlbmJvbmUubmV0PgorIworIyBDb3B5cmlnaHQ6CisjIENvcHlyaWdodCAo
QykgMjAxNCBHcmVlbmJvbmUgTmV0d29ya3MgR21iSAorIworIyBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy
CisjIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSBVU0EuCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCisKK2Zyb20gLnBhcnNlcnMg
aW1wb3J0IGN2cmYKKworZGVmIHV0Y25vdygpOgorICAgICIiIiBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIGN1cnJlbnQgZGF0ZSBpbiBhIHRpbWV6b25lIGF3YXJlIGZhc2hpb249CiAiIiIKKyAg
ICByZXR1cm4gY3ZyZi5wYXJzZURhdGUoZGF0ZXRpbWUudXRjbm93KCkuaXNvZm9ybWF0KCkrJ1on
KQorCmRpZmYgLXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBwYXJzZV9jdnJmCi0tLSAv
ZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3BhcnNlX2N2cmYJ
VHVlIFNlcCAyMyAxNToxOToxNCAyMDE0ICswMjAwCkBAIC0wLDAgKzEsMzYgQEAKKyMhIC91c3Iv
YmluL2VudiBweXRob24KKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjCisjIEF1dGhvcnM6Cisj
IEJlbm89QzM9QUV0IEFsbGFyZCA8YmVub2l0LmFsbGFyZEBncmVlbmJvbmUubmV0PgorIworIyBD
b3B5cmlnaHQ6CisjIENvcHlyaWdodCAoQykgMjAxNCBHcmVlbmJvbmUgTmV0d29ya3MgR21iSAor
IworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisjIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisjIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK2ltcG9ydCBzeXMKKworZnJvbSBmYXJv
bGx1ei5wYXJzZXJzLmN2cmYgaW1wb3J0IHBhcnNlCisKK2lmIF9fbmFtZV9fID0zRD0zRCAiX19t
YWluX18iOgorICAgIHdpdGggb3BlbihzeXMuYXJndlsxXSwgJ3J0JykgYXMgZjoKKyAgICAgICAg
Y3ZyZiA9M0QgcGFyc2UoZikKKyAgICBjdnJmLnZhbGlkYXRlKCkKKyAgICBwcmludChjdnJmKQor
ICAgIHByaW50KGN2cmYuZ2V0SGlnaGVzdENWU1MoKS5fdmVjdG9yKQorICAgIHByaW50KGN2cmYu
Z2V0UHJvZHVjdExpc3QoKSkKKyAgICBwcmludChjdnJmLl9wcm9kdWN0dHJlZS5fYnJhbmNoZXMp
CisjICAgIHByaW50KGN2cmYuX3Byb2R1Y3R0cmVlLl9icmFuY2hlc1swXS5fY2hpbGRzKQpkaWZm
IC1yIDAwMDAwMDAwMDAwMCAtciBlMThiNjFhNzNhNjggcmVuZGVyCi0tLSAvZGV2L251bGwJVGh1
IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL3JlbmRlcglUdWUgU2VwIDIzIDE1OjE5
OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCArMSwzMiBAQAorIyEgL3Vzci9iaW4vZW52IHB5dGhvbgor
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgQXV0aG9yczoKKyMgQmVubz1DMz1BRXQgQWxs
YXJkIDxiZW5vaXQuYWxsYXJkQGdyZWVuYm9uZS5uZXQ+CisjCisjIENvcHlyaWdodDoKKyMgQ29w
eXJpZ2h0IChDKSAyMDE0IEdyZWVuYm9uZSBOZXR3b3JrcyBHbWJICisjCisjIFRoaXMgcHJvZ3Jh
bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2
ZXJzaW9uIDIKKyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw
MjExMC0xMzAxIFVTQS4KKworaW1wb3J0IHN5cworCitmcm9tIGZhcm9sbHV6LnJlbmRlcmVyIGlt
cG9ydCBtYWluCisKK2lmIF9fbmFtZV9fID0zRD0zRCAiX19tYWluX18iOgorICAgIHRlbXBsYXRl
ID0zRCAibmFzbC5qMiIKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID49M0QgMzoKKyAgICAgICAgdGVt
cGxhdGUgPTNEIHN5cy5hcmd2WzJdCisgICAgbWFpbihzeXMuYXJndlsxXSwgdGVtcGxhdGUpCmRp
ZmYgLXIgMDAwMDAwMDAwMDAwIC1yIGUxOGI2MWE3M2E2OCBzZXR1cC5weQotLS0gL2Rldi9udWxs
CVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9zZXR1cC5weQlUdWUgU2VwIDIz
IDE1OjE5OjE0IDIwMTQgKzAyMDAKQEAgLTAsMCArMSw0NSBAQAorIyEgL3Vzci9iaW4vZW52IHB5
dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKyMKKyMgQXV0aG9yczoKKyMgQmVubz1DMz1B
RXQgQWxsYXJkIDxiZW5vaXQuYWxsYXJkQGdyZWVuYm9uZS5uZXQ+CisjCisjIENvcHlyaWdodDoK
KyMgQ29weXJpZ2h0IChDKSAyMDE0IEdyZWVuYm9uZSBOZXR3b3JrcyBHbWJICisjCisjIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDIKKyMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAwMjExMC0xMzAxIFVTQS4KKworZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBzZXR1cAorCitm
cm9tIGZhcm9sbHV6IGltcG9ydCBfX3ZlcnNpb25fXworCit3aXRoIG9wZW4oJ1JFQURNRS50eHQn
LCAncnQnKSBhcyBmOgorICAgIGxvbmdfZGVzY3JpcHRpb24gPTNEIGYucmVhZCgpCisKK3NldHVw
KAorICAgIG5hbWU9M0QnZmFyb2xsdXonLAorICAgIHZlcnNpb249M0RfX3ZlcnNpb25fXywKKyAg
ICBkZXNjcmlwdGlvbj0zRCJVdGlsaXRpZXMgdG8gbWFuaXB1bGF0ZSBzZWN1cml0eSBhZHZpc29y
aWVzIiwKKyAgICBsb25nX2Rlc2NyaXB0aW9uPTNEbG9uZ19kZXNjcmlwdGlvbiwKKyAgICBhdXRo
b3I9M0QiQmVubz1DMz1BRXQgQWxsYXJkIiwKKyAgICBhdXRob3JfZW1haWw9M0QnYmVub2l0LmFs
bGFyZEBncmVlbmJvbmUubmV0JywKKyAgICBsaWNlbnNlPTNEJ0dQTHYyKycsCisgICAgcGFja2Fn
ZXM9M0RbJ2Zhcm9sbHV6JywgJ2Zhcm9sbHV6LnBhcnNlcnMnXSwKKyMgICAgcGFja2FnZV9kaXI9
M0R7J2Zhcm9sbHV6JzogJ2Zhcm9sbHV6J30sCisjICAgIGluY2x1ZGVfcGFja2FnZV9kYXRhPTNE
VHJ1ZSwKKyMgICAgcGFja2FnZV9kYXRhPTNEeydmYXJvbGx1eic6IFsndGVtcGxhdGVzLyouajIn
XX0sCisgICAgc2NyaXB0cz0zRFsncGFyc2VfY3ZyZicsICdyZW5kZXInXSwKKyAgICBpbnN0YWxs
X3JlcXVpcmVzPTNEWydKaW5qYTInXSwKKykK


More information about the Farol-commits mailing list