galaxy-commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
October 2014
- 2 participants
- 174 discussions
MTYxIG5ldyBjb21taXRzIGluIGdhbGF4eS1jZW50cmFsOgoKaHR0cHM6Ly9iaXRidWNrZXQub3Jn
L2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2E0NmU5MjE2OGQyOS8KQ2hhbmdlc2V0OiAg
IGE0NmU5MjE2OGQyOQpVc2VyOiAgICAgICAgQmpvZXJuR3J1ZW5pbmcKRGF0ZTogICAgICAgIDIw
MTQtMTAtMTggMjI6Mzc6NTcrMDA6MDAKU3VtbWFyeTogICAgIEluaXRpYWwgY29tbWl0CkFmZmVj
dGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDcyMGVhMTc5NmMyNjU3NGQ2NDJlMDJkYjM1ODMwODVj
MzQ4YTQ0NzQgLXIgYTQ2ZTkyMTY4ZDI5NjU4MzQwZTc2OWU9CmU5YmE3NjJjNGNjMmY4M2YxIGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vLmdpdGlnbm9yZQotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vLmdpdGlnbm9y
ZQpAQCAtMCwwICsxLDU0IEBACisjIEJ5dGUtY29tcGlsZWQgLyBvcHRpbWl6ZWQgLyBETEwgZmls
ZXMKK19fcHljYWNoZV9fLworKi5weVtjb2RdCisKKyMgQyBleHRlbnNpb25zCisqLnNvCisKKyMg
RGlzdHJpYnV0aW9uIC8gcGFja2FnaW5nCisuUHl0aG9uCitlbnYvCitiaW4vCitidWlsZC8KK2Rl
dmVsb3AtZWdncy8KK2Rpc3QvCitlZ2dzLworbGliLworbGliNjQvCitwYXJ0cy8KK3NkaXN0Lwor
dmFyLworKi5lZ2ctaW5mby8KKy5pbnN0YWxsZWQuY2ZnCisqLmVnZworCisjIEluc3RhbGxlciBs
b2dzCitwaXAtbG9nLnR4dAorcGlwLWRlbGV0ZS10aGlzLWRpcmVjdG9yeS50eHQKKworIyBVbml0
IHRlc3QgLyBjb3ZlcmFnZSByZXBvcnRzCitodG1sY292LworLnRveC8KKy5jb3ZlcmFnZQorLmNh
Y2hlCitub3NldGVzdHMueG1sCitjb3ZlcmFnZS54bWwKKworIyBUcmFuc2xhdGlvbnMKKyoubW8K
KworIyBNciBEZXZlbG9wZXIKKy5tci5kZXZlbG9wZXIuY2ZnCisucHJvamVjdAorLnB5ZGV2cHJv
amVjdAorCisjIFJvcGUKKy5yb3BlcHJvamVjdAorCisjIERqYW5nbyBzdHVmZjoKKyoubG9nCisq
LnBvdAorCisjIFNwaGlueCBkb2N1bWVudGF0aW9uCitkb2NzL19idWlsZC8KKwoKZGlmZiAtciA3
MjBlYTE3OTZjMjY1NzRkNjQyZTAyZGIzNTgzMDg1YzM0OGE0NDc0IC1yIGE0NmU5MjE2OGQyOTY1
ODM0MGU3NjllPQplOWJhNzYyYzRjYzJmODNmMSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL0xJQ0VOU0UKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL0xJQ0VOU0UKQEAgLTAsMCArMSwyMSBAQAorVGhlIE1JVCBMaWNl
bnNlIChNSVQpCisKK0NvcHlyaWdodCAoYykgMjAxNCBCaj1DMz1CNnJuIEdyPUMzPUJDbmluZwor
CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl
cnNvbiBvYnRhaW5pbmcgYSBjbz0KcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg
ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkPQplYWwKK2luIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u
IHRoZSByaWdoPQp0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0
cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg
YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQg
dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp
bmNsdWRlZCBpbj0KIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT
b2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS
UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U
IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUj0KT00sCitPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF
QUxJTkdTIElOID0KVEhFCitTT0ZUV0FSRS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpk
aWZmIC1yIDcyMGVhMTc5NmMyNjU3NGQ2NDJlMDJkYjM1ODMwODVjMzQ4YTQ0NzQgLXIgYTQ2ZTky
MTY4ZDI5NjU4MzQwZTc2OWU9CmU5YmE3NjJjNGNjMmY4M2YxIGNvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1kCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKQEAgLTAsMCArMSw0IEBACitn
YWxheHktaXB5dGhvbgorPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE
CisKK0lQeXRob24gSW50ZWdyYXRpb24gaW50byBHYWxheHkKCgpodHRwczovL2JpdGJ1Y2tldC5v
cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvYjVmNDU4YTdjOWY0LwpDaGFuZ2VzZXQ6
ICAgYjVmNDU4YTdjOWY0ClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAg
MjAxNC0xMC0xOCAyMjozNzo1NyswMDowMApTdW1tYXJ5OiAgICAgYWRkIHRoZSBpbml0aWFsIElQ
eXRob24gSW50ZWdyYXRpb24KQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgYTQ2ZTkyMTY4
ZDI5NjU4MzQwZTc2OWVlOWJhNzYyYzRjYzJmODNmMSAtciBiNWY0NThhN2M5ZjQ3MmI1MTc1ZDVk
MT0KZTNhYjc0ZTA4NjI3YThjMjIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi9pcHl0aG9uL2NvbmZpZy9pcHl0PQpob24ueG1sCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL2NvbmZpZy9pcHl0aG9uLnht
bApAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPTNEIjEuMCIgZW5jb2Rpbmc9M0QiVVRG
LTgiPz4KKzwhRE9DVFlQRSB2aXN1YWxpemF0aW9uIFNZU1RFTSAiLi4vLi4vdmlzdWFsaXphdGlv
bi5kdGQiPgorPHZpc3VhbGl6YXRpb24gbmFtZT0zRCJJUHl0aG9uIj4KKyAgICA8ZGF0YV9zb3Vy
Y2VzPgorICAgICAgICA8ZGF0YV9zb3VyY2U+CisgICAgICAgICAgICA8bW9kZWxfY2xhc3M+SGlz
dG9yeURhdGFzZXRBc3NvY2lhdGlvbjwvbW9kZWxfY2xhc3M+CisgICAgICAgICAgICA8dGVzdCB0
eXBlPTNEImlzaW5zdGFuY2UiIHRlc3RfYXR0cj0zRCJkYXRhdHlwZSIgcmVzdWx0X3R5cGU9Cj0z
RCJkYXRhdHlwZSI+dGFidWxhci5UYWJ1bGFyPC90ZXN0PgorICAgICAgICAgICAgPHRvX3BhcmFt
IHBhcmFtX2F0dHI9M0QiaWQiPmRhdGFzZXRfaWQ8L3RvX3BhcmFtPgorICAgICAgICA8L2RhdGFf
c291cmNlPgorICAgIDwvZGF0YV9zb3VyY2VzPgorICAgIDxwYXJhbXM+CisgICAgICAgIDxwYXJh
bSB0eXBlPTNEImRhdGFzZXQiIHZhcl9uYW1lX2luX3RlbXBsYXRlPTNEImhkYSIgcmVxdWlyZWQ9
M0QidD0KcnVlIj5kYXRhc2V0X2lkPC9wYXJhbT4KKyAgICA8L3BhcmFtcz4KKyAgICA8dGVtcGxh
dGU+aXB5dGhvbi5tYWtvPC90ZW1wbGF0ZT4KKzwvdmlzdWFsaXphdGlvbj4KCmRpZmYgLXIgYTQ2
ZTkyMTY4ZDI5NjU4MzQwZTc2OWVlOWJhNzYyYzRjYzJmODNmMSAtciBiNWY0NThhN2M5ZjQ3MmI1
MTc1ZDVkMT0KZTNhYjc0ZTA4NjI3YThjMjIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pPQpweXRob24ubWFrbwotLS0gL2Rldi9udWxsCisr
KyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tYWtvCkBAIC0wLDAgKzEsNzMgQEAKKzwlCitpbXBvcnQgb3MKK2ltcG9ydCBz
eXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKKwor
ZW1wdHlfbmIgPTNEICIiInsKKyAibWV0YWRhdGEiOiB7CisgICJuYW1lIjogIiIsCisgICJzaWdu
YXR1cmUiOiAic2hhMjU2OjIwMWVhZjUzYTdjYTBhNWI2NjFlMGM4OTI1YWRjNjE3MTRhOTFhYzg3
MTQ3MTYwNGM0Mj0KOGNiZGE0YTY5ODIzOSIKKyB9LAorICJuYmZvcm1hdCI6IDMsCisgIm5iZm9y
bWF0X21pbm9yIjogMCwKKyAid29ya3NoZWV0cyI6IFsKKyAgeworICAgImNlbGxzIjogWworICAg
IHsKKyAgICAgImNlbGxfdHlwZSI6ICJoZWFkaW5nIiwKKyAgICAgImxldmVsIjogMiwKKyAgICAg
Im1ldGFkYXRhIjoge30sCisgICAgICJzb3VyY2UiOiBbCisgICAgICAiV2VsY29tZSB0byB0aGUg
aW50ZXJhY3RpdmUgR2FsYXh5IElQeXRob24gTm90ZWJvb2suIgorICAgICBdCisgICAgfSwKKyAg
ICB7CisgICAgICJjZWxsX3R5cGUiOiAibWFya2Rvd24iLAorICAgICAibWV0YWRhdGEiOiB7fSwK
KyAgICAgInNvdXJjZSI6IFsKKyAgICAgICJZb3UgY2FuIGFjY2VzcyB5b3VyIGRhdGEgdmlhIHRo
ZSBkYXRhc2V0IG51bWJlci4gRm9yIGV4YW1wbGU6IGhhbmRsPQplID0zRCBvcGVuKCc0MicsICdy
JykiCisgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgImNlbGxfdHlwZSI6ICJjb2RlIiwKKyAg
ICAgImNvbGxhcHNlZCI6IGZhbHNlLAorICAgICAiaW5wdXQiOiBbXSwKKyAgICAgImxhbmd1YWdl
IjogInB5dGhvbiIsCisgICAgICJtZXRhZGF0YSI6IHt9LAorICAgICAib3V0cHV0cyI6IFtdCisg
ICAgfQorICAgXSwKKyAgICJtZXRhZGF0YSI6IHt9CisgIH0KKyBdCit9IiIiCisKK1BPUlQgPTNE
IDc3NzcKKwordGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgp
ICkKK25ld19kYXRhc2V0X3BhdGggPTNEIG9zLnBhdGguam9pbiggdGVtcF9kaXIsIHN0ciggaGRh
LmhpZCApICkKK3NodXRpbC5jb3B5KCBoZGEuZmlsZV9uYW1lLCBuZXdfZGF0YXNldF9wYXRoICkK
KworCitlbXB0eV9uYl9wYXRoID0zRCBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICdpcHl0aG9uX2dh
bGF4eV9ub3RlYm9vay5pcHluYicpCit3aXRoIG9wZW4oIGVtcHR5X25iX3BhdGgsICd3KycgKSBh
cyBoYW5kbGU6CisgICAgaGFuZGxlLndyaXRlKCBlbXB0eV9uYiApCisKK2RvY2tlcl9jbWQgPTNE
ICdkb2NrZXIgcnVuIC1kIC1wICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQvIiBiZ3J1ZW5pbmcvZG9j
a2VyPQotaXB5dGhvbi1ub3RlYm9vaycgJSAoUE9SVCwgdGVtcF9kaXIpCisKK3N1YnByb2Nlc3Mu
Y2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCisKKworJT4KKzxodG1sPgorCisKKzxib2R5
PgorICAgIDxvYmplY3QgZGF0YT0zRCJodHRwOi8vbG9jYWxob3N0OiR7UE9SVH0vbm90ZWJvb2tz
L2lweXRob25fZ2FsYXh5X25vdGU9CmJvb2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0z
RCIxMDAlIj4KKyAgICAgICAgPGVtYmVkIHNyYz0zRCJodHRwOi8vbG9jYWxob3N0OiR7UE9SVH0v
bm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25vPQp0ZWJvb2suaXB5bmIiIGhlaWdodD0zRCIxMDAl
IiB3aWR0aD0zRCIxMDAlIj4KKyAgICAgICAgPC9lbWJlZD4KKyAgICA8L29iamVjdD4KKzwvYm9k
eT4KKzwvaHRtbD4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFs
L2NvbW1pdHMvZjg1ZDg1NTU5Yzk3LwpDaGFuZ2VzZXQ6ICAgZjg1ZDg1NTU5Yzk3ClVzZXI6ICAg
ICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMCswMDow
MApTdW1tYXJ5OiAgICAgdXBkYXRlIHJlYWRtZSBmaWxlCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRp
ZmYgLXIgYjVmNDU4YTdjOWY0NzJiNTE3NWQ1ZDFlM2FiNzRlMDg2MjdhOGMyMiAtciBmODVkODU1
NTljOTc1ZmM4ZjAzMGFhNT0KYzhiYjcxODI1OTYwY2RkYTggY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9SRUFETUUubWQKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9SRUFETUUubWQKQEAgLTEsNCArMSwxNyBAQAotZ2FsYXh5LWlweXRob24KLT0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAorR2FsYXh5IElQeXRob24g
SW50ZWdyYXRpb24KKz0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNECj0yMAogSVB5dGhvbiBJbnRlZ3Jh
dGlvbiBpbnRvIEdhbGF4eQorCisKK1JlcXVpcmVtZW50cworPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNEPTNEPTNECisKK0ZvciBzZWN1cml0eSByZWFzb25zIHlvdSBuZWVkIHRvIGhhdmUg
ZG9ja2VyIGluc3RhbGxlZC4KK0ZvciBhIGRldGFpbGVkIGluc3RydWN0aW9uIGhvdyB0byBpbnN0
YWxsIGRvY2tlciwgcGxlYXNlIGxvb2sgYXQgdGhlIGRvY2tlPQpyIHdlYnNpdGUuCisKK0luc3Rh
bGxhdGlvbgorPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisKK0Nwb3kgdGhl
IElQeXRob24gZm9sZGVyIGluIHlvdXIgPEdBTEFYWV9ST09UPi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9uPQpzIGZvbGRlciBhbmQgcmVzdGFydCBHYWxheHkuCitUaGUgSVB5dGhvbiBWaXN1
YWxpc2F0aW9uIE9wdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBuZXh0IHRvIHRoZSB1c3VhbCBDaGFy
dD0KcyBvciBUcmFja3N0ZXIgT3B0aW9ucyBpbiB5b3VyIFZpc3VhbGlzYXRpb24gbWVudWUuClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy9lYjM3NTMxZWFjOTEvCkNoYW5nZXNldDogICBlYjM3NTMx
ZWFjOTEKVXNlcjogICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4
IDIyOjM4OjAwKzAwOjAwClN1bW1hcnk6ICAgICB1c2UgdGhlIG5ldyBhdXRva2lsbCBjb250YWlu
ZXIKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBmODVkODU1NTljOTc1ZmM4ZjAzMGFhNWM4
YmI3MTgyNTk2MGNkZGE4IC1yIGViMzc1MzFlYWM5MTc0YzExYjdiN2VkPQo4YTljNDNmMjExNjU0
NjMzNSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lweXRob24vdGVtcGxh
dGVzL2k9CnB5dGhvbi5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBA
IC01NSw3ICs1NSw3IEBACiB3aXRoIG9wZW4oIGVtcHR5X25iX3BhdGgsICd3KycgKSBhcyBoYW5k
bGU6CiAgICAgaGFuZGxlLndyaXRlKCBlbXB0eV9uYiApCj0yMAotZG9ja2VyX2NtZCA9M0QgJ2Rv
Y2tlciBydW4gLWQgLXAgJXM6Njc4OSAtdiAiJXM6L2ltcG9ydC8iIGJncnVlbmluZy9kb2NrZXI9
Ci1pcHl0aG9uLW5vdGVib29rJyAlIChQT1JULCB0ZW1wX2RpcikKK2RvY2tlcl9jbWQgPTNEICdk
b2NrZXIgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczo2Nzg5IC12ICIlczovaW1wb3J0
PQovIiBiZ3J1ZW5pbmcvZG9ja2VyLWlweXRob24tbm90ZWJvb2snICUgKFBPUlQsIHRlbXBfZGly
KQo9MjAKIHN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCj0yMAoKCmh0
dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hODI2OTRl
MzEwYjQvCkNoYW5nZXNldDogICBhODI2OTRlMzEwYjQKVXNlcjogICAgICAgIEJqb2VybkdydWVu
aW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAwKzAwOjAwClN1bW1hcnk6ICAgICBG
aXggZm9yIGRlbGF5IGluIGRpc3BsYXlpbmcgSVB5dGhvbiBOQgpGaXhlcyBodHRwczovL2dpdGh1
Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL2lzc3Vlcy8xCkFmZmVjdGVkICM6ICAxIGZp
bGUKCmRpZmYgLXIgZWIzNzUzMWVhYzkxNzRjMTFiN2I3ZWQ4YTljNDNmMjExNjU0NjMzNSAtciBh
ODI2OTRlMzEwYjRhNmJlYWExOThmYT0KNDkzM2E4Y2E4OTE2ZTg0MzcgY29uZmlnL3BsdWdpbnMv
dmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pPQpweXRob24ubWFrbwot
LS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMyw2ICszLDcgQEAKIGltcG9y
dCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNodXRpbAoraW1wb3J0IHRpbWUKIGltcG9y
dCBzdWJwcm9jZXNzCj0yMAogZW1wdHlfbmIgPTNEICIiInsKQEAgLTU5LDYgKzYwLDkgQEAKPTIw
CiBzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2NtZCwgc2hlbGw9M0RUcnVlKQo9MjAKKyMgV2UgbmVl
ZCB0byB3YWl0IHVudGlsIHRoZSBJbWFnZSBhbmQgSVB5dGhvbiBpbiBsb2FkZWQKKyMgVE9ETzog
VGhpcyBjYW4gYmUgZW5oYW5jZWQgbGF0ZXIsIHdpdGggc29tZSBKUyBzcGlubmluZyBpZiBuZWVk
ZWQuCit0aW1lLnNsZWVwKDEpCj0yMAogJT48aHRtbD4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv
Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOTQ4MWYxZWYxOTE2LwpDaGFuZ2VzZXQ6ICAg
OTQ4MWYxZWYxOTE2ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowMCswMDowMApTdW1tYXJ5OiAgICAgQWRkZWQgY29uZiBmaWxlIGdlbmVyYXRpb24K
QWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBhODI2OTRlMzEwYjRhNmJlYWExOThmYTQ5MzNh
OGNhODkxNmU4NDM3IC1yIDk0ODFmMWVmMTkxNjExYzJmODQxOTBmPQpkOWE2N2FhYTVhYzMwM2Rm
OCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lweXRob24vdGVtcGxhdGVz
L2k9CnB5dGhvbi5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC01
LDYgKzUsNyBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHRpbWUKIGltcG9ydCBzdWJwcm9jZXNz
CitpbXBvcnQgeWFtbAo9MjAKIGVtcHR5X25iID0zRCAiIiJ7CiAgIm1ldGFkYXRhIjogewpAQCAt
NTIsNiArNTMsMTQgQEAKIHNodXRpbC5jb3B5KCBoZGEuZmlsZV9uYW1lLCBuZXdfZGF0YXNldF9w
YXRoICkKPTIwCj0yMAorY29uZl9maWxlID0zRCB7CisgICAgJ2hpc3RvcnlfaWQnOiBOb25lLAor
ICAgICdnYWxheHlfdXJsJzogTm9uZSwKKyAgICAnYXBpX2tleSc6IE5vbmUsCit9Cit3aXRoIG9w
ZW4oIG9zLnBhdGguam9pbiggdGVtcF9kaXIsICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYW5k
bGU6CisgICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxlKSApCisKIGVtcHR5X25i
X3BhdGggPTNEIG9zLnBhdGguam9pbih0ZW1wX2RpciwgJ2lweXRob25fZ2FsYXh5X25vdGVib29r
LmlweW5iJykKIHdpdGggb3BlbiggZW1wdHlfbmJfcGF0aCwgJ3crJyApIGFzIGhhbmRsZToKICAg
ICBoYW5kbGUud3JpdGUoIGVtcHR5X25iICkKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5
L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZmE2MWZmODczOGQ0LwpDaGFuZ2VzZXQ6ICAgZmE2MWZm
ODczOGQ0ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjoz
ODowMSswMDowMApTdW1tYXJ5OiAgICAgTm90ZWJvb2sgc2lnbmF0dXJlcyBtdXN0IGJlIHVuaXF1
ZQpSYXRoZXIgdGhhbiBhc3NpZ25pbmcgYSBzdGF0aWMgbm90ZWJvb2sgc2lnbmF0dXJlLCB0aGlz
IGhhcyBiZWVuIHJlcGxhY2VkIHc9Cml0aCBhIHJhbmRvbWx5LApkZXRlcm1pbmlzdGljYWxseSBn
ZW5lcmF0ZWQgbm90ZWJvb2sgc2lnbmF0dXJlLiBUaGlzIGlzIGN1cnJlbnRseSBkb25lIG9mZiA9
Cm9mIHRoZSBkYXRhc2V0J3MgaWQsCmVuY29kZWQgdGhyb3VnaCB0cmFucyAoc28gaXQncyB0aGUg
dW5pcXVlIGhhc2gsIGFuZCBub3QganVzdCB0aGUgbnVtYmVyKSwgaD0Kb3dldmVyIHRoaXMgd2ls
bCBuZWVkIHRvCmJlIGV4Y2hhbmdlZCBmb3IgaGlzdG9yeV9pZCB3aGVuZXZlciB3ZSBoYXZlIGFj
Y2VzcyB0byB0aGF0LgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDk0ODFmMWVmMTkxNjEx
YzJmODQxOTBmZDlhNjdhYWE1YWMzMDNkZjggLXIgZmE2MWZmODczOGQ0YWQyMzk2NjhjNTA9CjI3
MmUwNThiMDNkOTgyOTdiIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5
dGhvbi90ZW1wbGF0ZXMvaT0KcHl0aG9uLm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KQEAgLTYsMTEgKzYsMTcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3VicHJvY2Vz
cwogaW1wb3J0IHlhbWwKK2ltcG9ydCByYW5kb20KPTIwCisKKyMgRW5zdXJlIGdlbmVyYXRpb24g
b2Ygbm90ZWJvb2sgaWQgaXMgZGV0ZXJtaW5pc3RpYyBmb3IgdGhlIGRhdGFzZXQuIFJlcGxhPQpj
ZSB3aXRoIGhpc3RvcnkgaWQKKyMgd2hlbmV2ZXIgd2UgZmlndXJlIG91dCBob3cgdG8gYWNjZXNz
IHRoYXQuCityYW5kb20uc2VlZCggdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCBoZGEuaWQgKSAp
Citub3RlYm9va19pZCA9M0QgJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVm
JykgZm9yIF8gaW4gcmFuZ2UoNj0KNCkpCiBlbXB0eV9uYiA9M0QgIiIiewogICJtZXRhZGF0YSI6
IHsKICAgIm5hbWUiOiAiIiwKLSAgInNpZ25hdHVyZSI6ICJzaGEyNTY6MjAxZWFmNTNhN2NhMGE1
YjY2MWUwYzg5MjVhZGM2MTcxNGE5MWFjODcxNDcxNjA0YzQyPQo4Y2JkYTRhNjk4MjM5IgorICAi
c2lnbmF0dXJlIjogInNoYTI1NjolcyIKICB9LAogICJuYmZvcm1hdCI6IDMsCiAgIm5iZm9ybWF0
X21pbm9yIjogMCwKQEAgLTQ0LDcgKzUwLDcgQEAKICAgICJtZXRhZGF0YSI6IHt9CiAgIH0KICBd
Ci19IiIiCit9IiIiICUgKG5vdGVib29rX2lkLCApCj0yMAogUE9SVCA9M0QgNzc3Nwo9MjAKCgpo
dHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZDM0MmFl
NDQ0ZjdlLwpDaGFuZ2VzZXQ6ICAgZDM0MmFlNDQ0ZjdlClVzZXI6ICAgICAgICBlcmFzY2hlMgpE
YXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMSswMDowMApTdW1tYXJ5OiAgICAgRm91bmQg
dGhlIGhpc3RvcnkgSUQKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBmYTYxZmY4NzM4ZDRh
ZDIzOTY2OGM1MDI3MmUwNThiMDNkOTgyOTdiIC1yIGQzNDJhZTQ0NGY3ZTJhN2QzM2M4ZTM2PQo2
M2U2MjgzMjYwYTRmOGVlNCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lw
eXRob24vdGVtcGxhdGVzL2k9CnB5dGhvbi5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tYWtvCkBAIC05LDkgKzksMTEgQEAKIGltcG9ydCByYW5kb20KPTIwCj0yMAoraGlzdG9y
eV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKK2Rh
dGFzZXRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkKICMgRW5zdXJl
IGdlbmVyYXRpb24gb2Ygbm90ZWJvb2sgaWQgaXMgZGV0ZXJtaW5pc3RpYyBmb3IgdGhlIGRhdGFz
ZXQuIFJlcGxhPQpjZSB3aXRoIGhpc3RvcnkgaWQKICMgd2hlbmV2ZXIgd2UgZmlndXJlIG91dCBo
b3cgdG8gYWNjZXNzIHRoYXQuCi1yYW5kb20uc2VlZCggdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lk
KCBoZGEuaWQgKSApCityYW5kb20uc2VlZCggaGlzdG9yeV9pZCApCiBub3RlYm9va19pZCA9M0Qg
Jycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmJykgZm9yIF8gaW4gcmFuZ2Uo
Nj0KNCkpCiBlbXB0eV9uYiA9M0QgIiIiewogICJtZXRhZGF0YSI6IHsKQEAgLTYwLDcgKzYyLDcg
QEAKPTIwCj0yMAogY29uZl9maWxlID0zRCB7Ci0gICAgJ2hpc3RvcnlfaWQnOiBOb25lLAorICAg
ICdoaXN0b3J5X2lkJzogaGlzdG9yeV9pZCwKICAgICAnZ2FsYXh5X3VybCc6IE5vbmUsCiAgICAg
J2FwaV9rZXknOiBOb25lLAogfQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5
LWNlbnRyYWwvY29tbWl0cy9jNmI2MTliZWMyYzYvCkNoYW5nZXNldDogICBjNmI2MTliZWMyYzYK
VXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAxKzAw
OjAwClN1bW1hcnk6ICAgICBJbXBvcnQgYWxsIGRhdGFzZXRzIGJ5IGRlZmF1bHQKTmVlZCB0byBw
cm92aWRlIGEgbWV0aG9kIHRvIGFsbG93IHNlbGVjdGluZyBhIHN1YnNldCBvZiBkYXRhc2V0cyB0
byBjb3B5LCBoPQpvd2V2ZXIgZm9yIG5vdyB0aGV5IGFyZQphbGwgY29waWVkIG92ZXIuCkFmZmVj
dGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZDM0MmFlNDQ0ZjdlMmE3ZDMzYzhlMzY2M2U2MjgzMjYw
YTRmOGVlNCAtciBjNmI2MTliZWMyYzY0YTZjNGE3YmE3NT0KMTc4M2E5MmM3NzNiN2FiY2QgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pPQpw
eXRob24ubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNTcsOCAr
NTcsMTAgQEAKIFBPUlQgPTNEIDc3NzcKPTIwCiB0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRo
KCB0ZW1wZmlsZS5ta2R0ZW1wKCkgKQotbmV3X2RhdGFzZXRfcGF0aCA9M0Qgb3MucGF0aC5qb2lu
KCB0ZW1wX2Rpciwgc3RyKCBoZGEuaGlkICkgKQotc2h1dGlsLmNvcHkoIGhkYS5maWxlX25hbWUs
IG5ld19kYXRhc2V0X3BhdGggKQorCisjIFRPRE86IFByb3ZpZGUgYSBtZXRob2QgdG8gYWxsb3cg
c2VsZWN0aW5nIHdoaWNoIGRhdGFzZXRzIGFyZSB1c2VkCitmb3IgZGF0YXNldCBpbiB0cmFucy5o
aXN0b3J5LmFjdGl2ZV9kYXRhc2V0czoKKyAgICBzaHV0aWwuY29weSggZGF0YXNldC5maWxlX25h
bWUsIG9zLnBhdGguam9pbiggdGVtcF9kaXIsIHN0ciggaGRhLmhpZCApPQogKSApCj0yMAo9MjAK
IGNvbmZfZmlsZSA9M0QgewoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwvY29tbWl0cy84NTliMDFjNDIwOTcvCkNoYW5nZXNldDogICA4NTliMDFjNDIwOTcKVXNl
cjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAxKzAwOjAw
ClN1bW1hcnk6ICAgICBUeXBvLCB3cm9uZyBkZXN0aW5hdGlvbiBhbmQgYWxsIGRhdGFzZXRzIG92
ZXJ3cm90ZSBvbmUgYW5vdGhlcj0KLiBUaGlzIGZpeGVzIHRoYXQgaXNzdWUKQWZmZWN0ZWQgIzog
IDEgZmlsZQoKZGlmZiAtciBjNmI2MTliZWMyYzY0YTZjNGE3YmE3NTE3ODNhOTJjNzczYjdhYmNk
IC1yIDg1OWIwMWM0MjA5N2Q1OWNhZmZkZDM0PQpjZDJlZDI0MTFjMDZmY2M4MiBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2lweXRob24vdGVtcGxhdGVzL2k9CnB5dGhvbi5t
YWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC02MCw3ICs2MCw3IEBA
Cj0yMAogIyBUT0RPOiBQcm92aWRlIGEgbWV0aG9kIHRvIGFsbG93IHNlbGVjdGluZyB3aGljaCBk
YXRhc2V0cyBhcmUgdXNlZAogZm9yIGRhdGFzZXQgaW4gdHJhbnMuaGlzdG9yeS5hY3RpdmVfZGF0
YXNldHM6Ci0gICAgc2h1dGlsLmNvcHkoIGRhdGFzZXQuZmlsZV9uYW1lLCBvcy5wYXRoLmpvaW4o
IHRlbXBfZGlyLCBzdHIoIGhkYS5oaWQgKT0KICkgKQorICAgIHNodXRpbC5jb3B5KCBkYXRhc2V0
LmZpbGVfbmFtZSwgb3MucGF0aC5qb2luKCB0ZW1wX2Rpciwgc3RyKCBkYXRhc2V0Lmg9CmlkICkg
KSApCj0yMAo9MjAKIGNvbmZfZmlsZSA9M0QgewoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxh
eHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8wNjdmZWRhZjA5NTQvCkNoYW5nZXNldDogICAwNjdm
ZWRhZjA5NTQKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIy
OjM4OjAxKzAwOjAwClN1bW1hcnk6ICAgICBGb3VuZCB0aGUgQVBJIGtleQpBZmZlY3RlZCAjOiAg
MSBmaWxlCgpkaWZmIC1yIDg1OWIwMWM0MjA5N2Q1OWNhZmZkZDM0Y2QyZWQyNDExYzA2ZmNjODIg
LXIgMDY3ZmVkYWYwOTU0MTM3MGNiOGIzMjQ9CjY3ZDUxOTk0NDQxMWM4MWNlIGNvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaT0KcHl0aG9uLm1h
a28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTY2LDcgKzY2LDcgQEAK
IGNvbmZfZmlsZSA9M0QgewogICAgICdoaXN0b3J5X2lkJzogaGlzdG9yeV9pZCwKICAgICAnZ2Fs
YXh5X3VybCc6IE5vbmUsCi0gICAgJ2FwaV9rZXknOiBOb25lLAorICAgICdhcGlfa2V5JzogdHJh
bnMudXNlci5hcGlfa2V5c1swXS5rZXksCiB9CiB3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggdGVt
cF9kaXIsICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYW5kbGU6CiAgICAgaGFuZGxlLndyaXRl
KCB5YW1sLmR1bXAoY29uZl9maWxlKSApCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC9jb21taXRzL2IyN2Y5YmE5YzY3NC8KQ2hhbmdlc2V0OiAgIGIyN2Y5YmE5
YzY3NApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6
MDErMDA6MDAKU3VtbWFyeTogICAgIExvY2F0ZWQgZnVsbCBhcHBsaWNhdGlvbiBVUkwKVGhpcyBz
aG91bGQgbm93IHdvcmsgcHJvcGVybHkgZm9yIGdhbGF4eSBpbnN0YW5jZXMgaG9zdGVkIG9uIGRp
ZmZlcmVudCBwb3J0PQpzLCBvbiBkaWZmZXJlbnQKcHJveHktcHJlZml4ZXMsIG9uIGRpZmZlcmVu
dCBmcWRucywgZXRjLgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDA2N2ZlZGFmMDk1NDEz
NzBjYjhiMzI0NjdkNTE5OTQ0NDExYzgxY2UgLXIgYjI3ZjliYTljNjc0N2I5NzQxODkzNmI9CmU0
OGMwOGNkM2FiN2ZmNWQ2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5
dGhvbi90ZW1wbGF0ZXMvaT0KcHl0aG9uLm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KQEAgLTY1LDcgKzY1LDcgQEAKPTIwCiBjb25mX2ZpbGUgPTNEIHsKICAgICAnaGlz
dG9yeV9pZCc6IGhpc3RvcnlfaWQsCi0gICAgJ2dhbGF4eV91cmwnOiBOb25lLAorICAgICdnYWxh
eHlfdXJsJzogcmVxdWVzdC5hcHBsaWNhdGlvbl91cmwsCiAgICAgJ2FwaV9rZXknOiB0cmFucy51
c2VyLmFwaV9rZXlzWzBdLmtleSwKIH0KIHdpdGggb3Blbiggb3MucGF0aC5qb2luKCB0ZW1wX2Rp
ciwgJ2NvbmYueWFtbCcgKSwgJ3diJyApIGFzIGhhbmRsZToKCgpodHRwczovL2JpdGJ1Y2tldC5v
cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvODM0ZDM3ZWEzYWExLwpDaGFuZ2VzZXQ6
ICAgODM0ZDM3ZWEzYWExClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0x
MC0xOCAyMjozODowMiswMDowMApTdW1tYXJ5OiAgICAgRXhjaGFuZ2VkIGxvY2FsaG9zdCBmb3Ig
cHJvcGVyIGhvc3RuYW1lCmByZXF1ZXN0YCBwcm92aWRlcyBhIGBob3N0X3VybGAgbGlrZSAiZnFk
bjpwb3J0IiBmcm9tIHdoaWNoIHdlIGNhbiBleHRyYWN0ID0KdGhlIEZRRE4gdGhhdCB0aGlzIHNl
cnZlcgp3YXMgYWNjZXNzZWQgYXQuIFRoaXMgaXMgaW1wb3J0YW50IHNvIHRoYXQgd2UgYXJlIGFj
Y2Vzc2luZyB0aGUgSVB5TkIgb24gdGg9CmUgY29ycmVjdCBob3N0LgpBZmZlY3RlZCAjOiAgMSBm
aWxlCgpkaWZmIC1yIGIyN2Y5YmE5YzY3NDdiOTc0MTg5MzZiZTQ4YzA4Y2QzYWI3ZmY1ZDYgLXIg
ODM0ZDM3ZWEzYWExYzMyMGEyZTI3ZWQ9CjQ3NDU4OTg0ZWViZDhmNDA1IGNvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaT0KcHl0aG9uLm1ha28K
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBs
YXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTU1LDYgKzU1LDEwIEBACiB9
IiIiICUgKG5vdGVib29rX2lkLCApCj0yMAogUE9SVCA9M0QgNzc3NworSE9TVCA9M0QgcmVxdWVz
dC5ob3N0CisjIFN0cmlwIG91dCBwb3J0LCB3ZSBqdXN0IHdhbnQgdGhlIFVSTCB0aGlzIGdhbGF4
eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkIGF0LgoraWYgJzonIGluIEhPU1Q6CisgICAgSE9TVCA9M0Qg
SE9TVFswOkhPU1QuaW5kZXgoJzonKV0KPTIwCiB0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRo
KCB0ZW1wZmlsZS5ta2R0ZW1wKCkgKQo9MjAKQEAgLTg4LDggKzkyLDggQEAKPTIwCj0yMAogPGJv
ZHk+Ci0gICAgPG9iamVjdCBkYXRhPTNEImh0dHA6Ly9sb2NhbGhvc3Q6JHtQT1JUfS9ub3RlYm9v
a3MvaXB5dGhvbl9nYWxheHlfbm90ZT0KYm9vay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRo
PTNEIjEwMCUiPgotICAgICAgICA8ZW1iZWQgc3JjPTNEImh0dHA6Ly9sb2NhbGhvc3Q6JHtQT1JU
fS9ub3RlYm9va3MvaXB5dGhvbl9nYWxheHlfbm89CnRlYm9vay5pcHluYiIgaGVpZ2h0PTNEIjEw
MCUiIHdpZHRoPTNEIjEwMCUiPgorICAgIDxvYmplY3QgZGF0YT0zRCJodHRwOi8vJHtIT1NUfTok
e1BPUlR9L25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9ub3RlYm89Cm9rLmlweW5iIiBoZWlnaHQ9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI+CisgICAgICAgIDxlbWJlZCBzcmM9M0QiaHR0cDovLyR7
SE9TVH06JHtQT1JUfS9ub3RlYm9va3MvaXB5dGhvbl9nYWxheHlfbm90ZT0KYm9vay5pcHluYiIg
aGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiPjwvZW1iZWQ+PC9vYmplY3Q+PC9ib2R5PgoK
Cmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy80YzMy
NGNkNzQ1YjAvCkNoYW5nZXNldDogICA0YzMyNGNkNzQ1YjAKVXNlcjogICAgICAgIEJqb2Vybkdy
dWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAyKzAwOjAwClN1bW1hcnk6ICAg
ICByZXN0cnVjdHVyZSByZXBvc2l0b3J5IGxheW91dApBZmZlY3RlZCAjOiAgNCBmaWxlcwoKZGlm
ZiAtciA4MzRkMzdlYTNhYTFjMzIwYTJlMjdlZDQ3NDU4OTg0ZWViZDhmNDA1IC1yIDRjMzI0Y2Q3
NDViMDFjYzkyY2RjMDM3PQozN2FhNGFiMzhhZDY3YTE1YyBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi54bWwKLS0tIC9kZXYvbnVsbAorKysgYi9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi54bWwKQEAgLTAs
MCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0zRCIxLjAiIGVuY29kaW5nPTNEIlVURi04Ij8+Cis8
IURPQ1RZUEUgdmlzdWFsaXphdGlvbiBTWVNURU0gIi4uLy4uL3Zpc3VhbGl6YXRpb24uZHRkIj4K
Kzx2aXN1YWxpemF0aW9uIG5hbWU9M0QiSVB5dGhvbiI+CisgICAgPGRhdGFfc291cmNlcz4KKyAg
ICAgICAgPGRhdGFfc291cmNlPgorICAgICAgICAgICAgPG1vZGVsX2NsYXNzPkhpc3RvcnlEYXRh
c2V0QXNzb2NpYXRpb248L21vZGVsX2NsYXNzPgorICAgICAgICAgICAgPHRlc3QgdHlwZT0zRCJp
c2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJlc3VsdF90eXBlPQo9M0QiZGF0YXR5
cGUiPnRhYnVsYXIuVGFidWxhcjwvdGVzdD4KKyAgICAgICAgICAgIDx0b19wYXJhbSBwYXJhbV9h
dHRyPTNEImlkIj5kYXRhc2V0X2lkPC90b19wYXJhbT4KKyAgICAgICAgPC9kYXRhX3NvdXJjZT4K
KyAgICA8L2RhdGFfc291cmNlcz4KKyAgICA8cGFyYW1zPgorICAgICAgICA8cGFyYW0gdHlwZT0z
RCJkYXRhc2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJlcXVpcmVkPTNEInQ9CnJ1
ZSI+ZGF0YXNldF9pZDwvcGFyYW0+CisgICAgPC9wYXJhbXM+CisgICAgPHRlbXBsYXRlPmlweXRo
b24ubWFrbzwvdGVtcGxhdGU+Cis8L3Zpc3VhbGl6YXRpb24+CgpkaWZmIC1yIDgzNGQzN2VhM2Fh
MWMzMjBhMmUyN2VkNDc0NTg5ODRlZWJkOGY0MDUgLXIgNGMzMjRjZDc0NWIwMWNjOTJjZGMwMzc9
CjM3YWE0YWIzOGFkNjdhMTVjIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
aXB5dGhvbi9jb25maWcvaXB5dD0KaG9uLnhtbAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL2lweXRob24vY29uZmlnL2lweXRob24ueG1sCisrKyAvZGV2L251bGwK
QEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0zRCIxLjAiIGVuY29kaW5nPTNEIlVURi04
Ij8+Ci08IURPQ1RZUEUgdmlzdWFsaXphdGlvbiBTWVNURU0gIi4uLy4uL3Zpc3VhbGl6YXRpb24u
ZHRkIj4KLTx2aXN1YWxpemF0aW9uIG5hbWU9M0QiSVB5dGhvbiI+Ci0gICAgPGRhdGFfc291cmNl
cz4KLSAgICAgICAgPGRhdGFfc291cmNlPgotICAgICAgICAgICAgPG1vZGVsX2NsYXNzPkhpc3Rv
cnlEYXRhc2V0QXNzb2NpYXRpb248L21vZGVsX2NsYXNzPgotICAgICAgICAgICAgPHRlc3QgdHlw
ZT0zRCJpc2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJlc3VsdF90eXBlPQo9M0Qi
ZGF0YXR5cGUiPnRhYnVsYXIuVGFidWxhcjwvdGVzdD4KLSAgICAgICAgICAgIDx0b19wYXJhbSBw
YXJhbV9hdHRyPTNEImlkIj5kYXRhc2V0X2lkPC90b19wYXJhbT4KLSAgICAgICAgPC9kYXRhX3Nv
dXJjZT4KLSAgICA8L2RhdGFfc291cmNlcz4KLSAgICA8cGFyYW1zPgotICAgICAgICA8cGFyYW0g
dHlwZT0zRCJkYXRhc2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJlcXVpcmVkPTNE
InQ9CnJ1ZSI+ZGF0YXNldF9pZDwvcGFyYW0+Ci0gICAgPC9wYXJhbXM+Ci0gICAgPHRlbXBsYXRl
PmlweXRob24ubWFrbzwvdGVtcGxhdGU+Ci08L3Zpc3VhbGl6YXRpb24+CgpkaWZmIC1yIDgzNGQz
N2VhM2FhMWMzMjBhMmUyN2VkNDc0NTg5ODRlZWJkOGY0MDUgLXIgNGMzMjRjZDc0NWIwMWNjOTJj
ZGMwMzc9CjM3YWE0YWIzOGFkNjdhMTVjIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vaXB5dGhvbi90ZW1wbGF0ZXMvaT0KcHl0aG9uLm1ha28KLS0tIGEvY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28K
KysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPCUKLWltcG9ydCBvcwotaW1wb3J0IHN5
cwotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgdGltZQotaW1wb3J0IHN1
YnByb2Nlc3MKLWltcG9ydCB5YW1sCi1pbXBvcnQgcmFuZG9tCi0KLQotaGlzdG9yeV9pZCA9M0Qg
dHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKLWRhdGFzZXRfaWQg
PTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkKLSMgRW5zdXJlIGdlbmVyYXRp
b24gb2Ygbm90ZWJvb2sgaWQgaXMgZGV0ZXJtaW5pc3RpYyBmb3IgdGhlIGRhdGFzZXQuIFJlcGxh
PQpjZSB3aXRoIGhpc3RvcnkgaWQKLSMgd2hlbmV2ZXIgd2UgZmlndXJlIG91dCBob3cgdG8gYWNj
ZXNzIHRoYXQuCi1yYW5kb20uc2VlZCggaGlzdG9yeV9pZCApCi1ub3RlYm9va19pZCA9M0QgJycu
am9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmJykgZm9yIF8gaW4gcmFuZ2UoNj0K
NCkpCi1lbXB0eV9uYiA9M0QgIiIiewotICJtZXRhZGF0YSI6IHsKLSAgIm5hbWUiOiAiIiwKLSAg
InNpZ25hdHVyZSI6ICJzaGEyNTY6JXMiCi0gfSwKLSAibmJmb3JtYXQiOiAzLAotICJuYmZvcm1h
dF9taW5vciI6IDAsCi0gIndvcmtzaGVldHMiOiBbCi0gIHsKLSAgICJjZWxscyI6IFsKLSAgICB7
Ci0gICAgICJjZWxsX3R5cGUiOiAiaGVhZGluZyIsCi0gICAgICJsZXZlbCI6IDIsCi0gICAgICJt
ZXRhZGF0YSI6IHt9LAotICAgICAic291cmNlIjogWwotICAgICAgIldlbGNvbWUgdG8gdGhlIGlu
dGVyYWN0aXZlIEdhbGF4eSBJUHl0aG9uIE5vdGVib29rLiIKLSAgICAgXQotICAgIH0sCi0gICAg
ewotICAgICAiY2VsbF90eXBlIjogIm1hcmtkb3duIiwKLSAgICAgIm1ldGFkYXRhIjoge30sCi0g
ICAgICJzb3VyY2UiOiBbCi0gICAgICAiWW91IGNhbiBhY2Nlc3MgeW91ciBkYXRhIHZpYSB0aGUg
ZGF0YXNldCBudW1iZXIuIEZvciBleGFtcGxlOiBoYW5kbD0KZSA9M0Qgb3BlbignNDInLCAncicp
IgotICAgICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICJjZWxsX3R5cGUiOiAiY29kZSIsCi0gICAg
ICJjb2xsYXBzZWQiOiBmYWxzZSwKLSAgICAgImlucHV0IjogW10sCi0gICAgICJsYW5ndWFnZSI6
ICJweXRob24iLAotICAgICAibWV0YWRhdGEiOiB7fSwKLSAgICAgIm91dHB1dHMiOiBbXQotICAg
IH0KLSAgIF0sCi0gICAibWV0YWRhdGEiOiB7fQotICB9Ci0gXQotfSIiIiAlIChub3RlYm9va19p
ZCwgKQotCi1QT1JUID0zRCA3Nzc3Ci1IT1NUID0zRCByZXF1ZXN0Lmhvc3QKLSMgU3RyaXAgb3V0
IHBvcnQsIHdlIGp1c3Qgd2FudCB0aGUgVVJMIHRoaXMgZ2FsYXh5IHNlcnZlciB3YXMgYWNjZXNz
ZWQgYXQuCi1pZiAnOicgaW4gSE9TVDoKLSAgICBIT1NUID0zRCBIT1NUWzA6SE9TVC5pbmRleCgn
OicpXQotCi10ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKCB0ZW1wZmlsZS5ta2R0ZW1wKCkg
KQotCi0jIFRPRE86IFByb3ZpZGUgYSBtZXRob2QgdG8gYWxsb3cgc2VsZWN0aW5nIHdoaWNoIGRh
dGFzZXRzIGFyZSB1c2VkCi1mb3IgZGF0YXNldCBpbiB0cmFucy5oaXN0b3J5LmFjdGl2ZV9kYXRh
c2V0czoKLSAgICBzaHV0aWwuY29weSggZGF0YXNldC5maWxlX25hbWUsIG9zLnBhdGguam9pbigg
dGVtcF9kaXIsIHN0ciggZGF0YXNldC5oPQppZCApICkgKQotCi0KLWNvbmZfZmlsZSA9M0Qgewot
ICAgICdoaXN0b3J5X2lkJzogaGlzdG9yeV9pZCwKLSAgICAnZ2FsYXh5X3VybCc6IHJlcXVlc3Qu
YXBwbGljYXRpb25fdXJsLAotICAgICdhcGlfa2V5JzogdHJhbnMudXNlci5hcGlfa2V5c1swXS5r
ZXksCi19Ci13aXRoIG9wZW4oIG9zLnBhdGguam9pbiggdGVtcF9kaXIsICdjb25mLnlhbWwnICks
ICd3YicgKSBhcyBoYW5kbGU6Ci0gICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxl
KSApCi0KLWVtcHR5X25iX3BhdGggPTNEIG9zLnBhdGguam9pbih0ZW1wX2RpciwgJ2lweXRob25f
Z2FsYXh5X25vdGVib29rLmlweW5iJykKLXdpdGggb3BlbiggZW1wdHlfbmJfcGF0aCwgJ3crJyAp
IGFzIGhhbmRsZToKLSAgICBoYW5kbGUud3JpdGUoIGVtcHR5X25iICkKLQotZG9ja2VyX2NtZCA9
M0QgJ2RvY2tlciBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9p
bXBvcnQ9Ci8iIGJncnVlbmluZy9kb2NrZXItaXB5dGhvbi1ub3RlYm9vaycgJSAoUE9SVCwgdGVt
cF9kaXIpCi0KLXN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCi0KLSMg
V2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBJbWFnZSBhbmQgSVB5dGhvbiBpbiBsb2FkZWQKLSMg
VE9ETzogVGhpcyBjYW4gYmUgZW5oYW5jZWQgbGF0ZXIsIHdpdGggc29tZSBKUyBzcGlubmluZyBp
ZiBuZWVkZWQuCi10aW1lLnNsZWVwKDEpCi0KLSU+Ci08aHRtbD4KLQotCi08Ym9keT4KLSAgICA8
b2JqZWN0IGRhdGE9M0QiaHR0cDovLyR7SE9TVH06JHtQT1JUfS9ub3RlYm9va3MvaXB5dGhvbl9n
YWxheHlfbm90ZWJvPQpvay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiPgot
ICAgICAgICA8ZW1iZWQgc3JjPTNEImh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vbm90ZWJvb2tzL2lw
eXRob25fZ2FsYXh5X25vdGU9CmJvb2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIx
MDAlIj4KLSAgICAgICAgPC9lbWJlZD4KLSAgICA8L29iamVjdD4KLTwvYm9keT4KLTwvaHRtbD4K
CmRpZmYgLXIgODM0ZDM3ZWEzYWExYzMyMGEyZTI3ZWQ0NzQ1ODk4NGVlYmQ4ZjQwNSAtciA0YzMy
NGNkNzQ1YjAxY2M5MmNkYzAzNz0KMzdhYTRhYjM4YWQ2N2ExNWMgY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIC9kZXYvbnVs
bAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KQEAgLTAsMCArMSwxMDAgQEAKKzwlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHRpbWUKK2ltcG9ydCBzdWJw
cm9jZXNzCitpbXBvcnQgeWFtbAoraW1wb3J0IHJhbmRvbQorCisKK2hpc3RvcnlfaWQgPTNEIHRy
YW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCitkYXRhc2V0X2lkID0z
RCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5pZCApCisjIEVuc3VyZSBnZW5lcmF0aW9u
IG9mIG5vdGVib29rIGlkIGlzIGRldGVybWluaXN0aWMgZm9yIHRoZSBkYXRhc2V0LiBSZXBsYT0K
Y2Ugd2l0aCBoaXN0b3J5IGlkCisjIHdoZW5ldmVyIHdlIGZpZ3VyZSBvdXQgaG93IHRvIGFjY2Vz
cyB0aGF0LgorcmFuZG9tLnNlZWQoIGhpc3RvcnlfaWQgKQorbm90ZWJvb2tfaWQgPTNEICcnLmpv
aW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZicpIGZvciBfIGluIHJhbmdlKDY9CjQp
KQorZW1wdHlfbmIgPTNEICIiInsKKyAibWV0YWRhdGEiOiB7CisgICJuYW1lIjogIiIsCisgICJz
aWduYXR1cmUiOiAic2hhMjU2OiVzIgorIH0sCisgIm5iZm9ybWF0IjogMywKKyAibmJmb3JtYXRf
bWlub3IiOiAwLAorICJ3b3Jrc2hlZXRzIjogWworICB7CisgICAiY2VsbHMiOiBbCisgICAgewor
ICAgICAiY2VsbF90eXBlIjogImhlYWRpbmciLAorICAgICAibGV2ZWwiOiAyLAorICAgICAibWV0
YWRhdGEiOiB7fSwKKyAgICAgInNvdXJjZSI6IFsKKyAgICAgICJXZWxjb21lIHRvIHRoZSBpbnRl
cmFjdGl2ZSBHYWxheHkgSVB5dGhvbiBOb3RlYm9vay4iCisgICAgIF0KKyAgICB9LAorICAgIHsK
KyAgICAgImNlbGxfdHlwZSI6ICJtYXJrZG93biIsCisgICAgICJtZXRhZGF0YSI6IHt9LAorICAg
ICAic291cmNlIjogWworICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhlIGRh
dGFzZXQgbnVtYmVyLiBGb3IgZXhhbXBsZTogaGFuZGw9CmUgPTNEIG9wZW4oJzQyJywgJ3InKSIK
KyAgICAgXQorICAgIH0sCisgICAgeworICAgICAiY2VsbF90eXBlIjogImNvZGUiLAorICAgICAi
Y29sbGFwc2VkIjogZmFsc2UsCisgICAgICJpbnB1dCI6IFtdLAorICAgICAibGFuZ3VhZ2UiOiAi
cHl0aG9uIiwKKyAgICAgIm1ldGFkYXRhIjoge30sCisgICAgICJvdXRwdXRzIjogW10KKyAgICB9
CisgICBdLAorICAgIm1ldGFkYXRhIjoge30KKyAgfQorIF0KK30iIiIgJSAobm90ZWJvb2tfaWQs
ICkKKworUE9SVCA9M0QgNzc3NworSE9TVCA9M0QgcmVxdWVzdC5ob3N0CisjIFN0cmlwIG91dCBw
b3J0LCB3ZSBqdXN0IHdhbnQgdGhlIFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2Vk
IGF0LgoraWYgJzonIGluIEhPU1Q6CisgICAgSE9TVCA9M0QgSE9TVFswOkhPU1QuaW5kZXgoJzon
KV0KKwordGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkK
KworIyBUT0RPOiBQcm92aWRlIGEgbWV0aG9kIHRvIGFsbG93IHNlbGVjdGluZyB3aGljaCBkYXRh
c2V0cyBhcmUgdXNlZAorZm9yIGRhdGFzZXQgaW4gdHJhbnMuaGlzdG9yeS5hY3RpdmVfZGF0YXNl
dHM6CisgICAgc2h1dGlsLmNvcHkoIGRhdGFzZXQuZmlsZV9uYW1lLCBvcy5wYXRoLmpvaW4oIHRl
bXBfZGlyLCBzdHIoIGRhdGFzZXQuaD0KaWQgKSApICkKKworCitjb25mX2ZpbGUgPTNEIHsKKyAg
ICAnaGlzdG9yeV9pZCc6IGhpc3RvcnlfaWQsCisgICAgJ2dhbGF4eV91cmwnOiByZXF1ZXN0LmFw
cGxpY2F0aW9uX3VybCwKKyAgICAnYXBpX2tleSc6IHRyYW5zLnVzZXIuYXBpX2tleXNbMF0ua2V5
LAorfQord2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55YW1sJyApLCAn
d2InICkgYXMgaGFuZGxlOgorICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZfZmlsZSkg
KQorCitlbXB0eV9uYl9wYXRoID0zRCBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICdpcHl0aG9uX2dh
bGF4eV9ub3RlYm9vay5pcHluYicpCit3aXRoIG9wZW4oIGVtcHR5X25iX3BhdGgsICd3KycgKSBh
cyBoYW5kbGU6CisgICAgaGFuZGxlLndyaXRlKCBlbXB0eV9uYiApCisKK2RvY2tlcl9jbWQgPTNE
ICdkb2NrZXIgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczo2Nzg5IC12ICIlczovaW1w
b3J0PQovIiBiZ3J1ZW5pbmcvZG9ja2VyLWlweXRob24tbm90ZWJvb2snICUgKFBPUlQsIHRlbXBf
ZGlyKQorCitzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2NtZCwgc2hlbGw9M0RUcnVlKQorCisjIFdl
IG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgSW1hZ2UgYW5kIElQeXRob24gaW4gbG9hZGVkCisjIFRP
RE86IFRoaXMgY2FuIGJlIGVuaGFuY2VkIGxhdGVyLCB3aXRoIHNvbWUgSlMgc3Bpbm5pbmcgaWYg
bmVlZGVkLgordGltZS5zbGVlcCgxKQorCislPgorPGh0bWw+CisKKworPGJvZHk+CisgICAgPG9i
amVjdCBkYXRhPTNEImh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vbm90ZWJvb2tzL2lweXRob25fZ2Fs
YXh5X25vdGVibz0Kb2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj4KKyAg
ICAgICAgPGVtYmVkIHNyYz0zRCJodHRwOi8vJHtIT1NUfToke1BPUlR9L25vdGVib29rcy9pcHl0
aG9uX2dhbGF4eV9ub3RlPQpib29rLmlweW5iIiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAw
JSI+CisgICAgICAgIDwvZW1iZWQ+CisgICAgPC9vYmplY3Q+Cis8L2JvZHk+Cis8L2h0bWw+CgoK
aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2EyYjQ2
NDA1N2RiNS8KQ2hhbmdlc2V0OiAgIGEyYjQ2NDA1N2RiNQpVc2VyOiAgICAgICAgQmpvZXJuR3J1
ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAg
IHVwZGF0ZSByZWFkbWUgZmlsZQpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDRjMzI0Y2Q3
NDViMDFjYzkyY2RjMDM3MzdhYTRhYjM4YWQ2N2ExNWMgLXIgYTJiNDY0MDU3ZGI1NTkzYTY1Nzlm
Zjg9Cjk3YWU1NGI1NTkyYTEyODk0IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vUkVBRE1FLm1kCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
UkVBRE1FLm1kCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVB
RE1FLm1kCkBAIC0xMyw1ICsxMywxMCBAQAogSW5zdGFsbGF0aW9uCiA9M0Q9M0Q9M0Q9M0Q9M0Q9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKPTIwCi1DcG95IHRoZSBJUHl0aG9uIGZvbGRlciBpbiB5b3Vy
IDxHQUxBWFlfUk9PVD4vY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbj0KcyBmb2xkZXIgYW5k
IHJlc3RhcnQgR2FsYXh5LgotVGhlIElQeXRob24gVmlzdWFsaXNhdGlvbiBPcHRpb24gc2hvdWxk
IGJlIHZpc2libGUgbmV4dCB0byB0aGUgdXN1YWwgQ2hhcnQ9CnMgb3IgVHJhY2tzdGVyIE9wdGlv
bnMgaW4geW91ciBWaXN1YWxpc2F0aW9uIG1lbnVlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKK0Nwb3kgdGhlIHRlbXBsYXRlIGFuZCBjb25maWcgZm9sZGVyIGluIHlvdXIgPEdBTEFYWV9S
T09UPi9jb25maWcvcGx1Z2lucy92PQppc3VhbGl6YXRpb25zL2lweXRob24gZm9sZGVyIGFuZCBy
ZXN0YXJ0IEdhbGF4eS4KKworb3IKKworYGBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2Jn
cnVlbmluZy9nYWxheHktaXB5dGhvbi5naXQgY29uZmlnL3BsdWdpbnM9Ci92aXovaXB5dGhvbmBg
CisKK1RoZSBJUHl0aG9uIFZpc3VhbGlzYXRpb24gT3B0aW9uIHNob3VsZCBiZSB2aXNpYmxlIG5l
eHQgdG8gdGhlIHVzdWFsIENoYXJ0PQpzIG9yIFRyYWNrc3RlciBPcHRpb25zIGluIHlvdXIgVmlz
dWFsaXNhdGlvbiBtZW51ZS4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1j
ZW50cmFsL2NvbW1pdHMvZmM0OGUyYzJhZjhiLwpDaGFuZ2VzZXQ6ICAgZmM0OGUyYzJhZjhiClVz
ZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODow
MyswMDowMApTdW1tYXJ5OiAgICAgYWRkIHJhbmRvbSBwb3J0IGFzc2lnbm1lbnQgZm9yIGRpZmZl
cmVudCBkb2NrZXIgY29udGFpbmVycywgZm89CnIgbXVsdGlwbGUgdXNlcnMKQWZmZWN0ZWQgIzog
IDEgZmlsZQoKZGlmZiAtciBhMmI0NjQwNTdkYjU1OTNhNjU3OWZmODk3YWU1NGI1NTkyYTEyODk0
IC1yIGZjNDhlMmMyYWY4YjUxMjU2NjBmM2YzPQo4NDEyODY3YzgwYjE3ZDVhNCBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0g
YS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9u
Lm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tYWtvCkBAIC01NCw3ICs1NCwxOCBAQAogIF0KIH0iIiIgJSAobm90ZWJvb2tf
aWQsICkKPTIwCi1QT1JUID0zRCA3Nzc3CisKKyMgRmluZCBhbGwgcG9ydHMgdGhhdCBhcmUgYWxy
ZWF4eSBvY2N1cGllZAorbmV0c3RhdF9jbWQgPTNEICJuZXRzdGF0IC10bmFBaW5ldCB8IGF3ayAn
TlIgPj0zRCAzIHsgcHJpbnQgJDQgfScgfCBjdXQgLWQ9CjogLWYyIHwgc29ydCAtdW4iCituZXRz
dGF0X291dCA9M0Qgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoIHNobGV4LnNwbGl0KCBuZXRzdGF0
X2NtZCApKQorb2NjdXBpZWRfcG9ydHMgPTNEIFtwb3J0IGZvciBwb3J0IGluIG5ldHN0YXRfb3V0
LnNwbGl0KCdcbicpIGlmIHBvcnQuaXNkaWc9Cml0KCldCisKKyMgR2VuZXJhdGUgcmFuZG9tIGZy
ZWUgcG9ydCBudW1iZXIgZm9yIG91ciBkb2NrZXIgY29udGFpbmVyCit3aGlsZSBUcnVlOgorICAg
IFBPUlQgPTNEIHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAsMTUwMDApCisgICAgaWYgUE9SVFMgbm90
IGluIG9jY3VwaWVkX3BvcnRzOgorICAgICAgICBicmVhaworCiBIT1NUID0zRCByZXF1ZXN0Lmhv
c3QKICMgU3RyaXAgb3V0IHBvcnQsIHdlIGp1c3Qgd2FudCB0aGUgVVJMIHRoaXMgZ2FsYXh5IHNl
cnZlciB3YXMgYWNjZXNzZWQgYXQuCiBpZiAnOicgaW4gSE9TVDoKCgpodHRwczovL2JpdGJ1Y2tl
dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMGFjMWJiOGZmM2IxLwpDaGFuZ2Vz
ZXQ6ICAgMGFjMWJiOGZmM2IxClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAg
ICAgMjAxNC0xMC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgUmVtb3ZlIGNvcHlpbmcg
b2YgZGF0YXRzZXRzIGZyb20gR2FsYXh5IHRvIGRvY2tlci4gRnJvbSBub3cgb249CiwgZG9ja2Vy
IGNhbiBmZXRjaCBkYXRhIGZyb20gZ2FsYXh5IG9uIGRlbWFuZC4KQWZmZWN0ZWQgIzogIDEgZmls
ZQoKZGlmZiAtciBmYzQ4ZTJjMmFmOGI1MTI1NjYwZjNmMzg0MTI4NjdjODBiMTdkNWE0IC1yIDBh
YzFiYjhmZjNiMTJiYWM0ODdkM2E0PQo1MzBkYjdjYzBmMzBjMjNmOSBjb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28K
KysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tYWtvCkBAIC03MywxMSArNzMsNiBAQAo9MjAKIHRlbXBfZGlyID0zRCBvcy5wYXRoLmFi
c3BhdGgoIHRlbXBmaWxlLm1rZHRlbXAoKSApCj0yMAotIyBUT0RPOiBQcm92aWRlIGEgbWV0aG9k
IHRvIGFsbG93IHNlbGVjdGluZyB3aGljaCBkYXRhc2V0cyBhcmUgdXNlZAotZm9yIGRhdGFzZXQg
aW4gdHJhbnMuaGlzdG9yeS5hY3RpdmVfZGF0YXNldHM6Ci0gICAgc2h1dGlsLmNvcHkoIGRhdGFz
ZXQuZmlsZV9uYW1lLCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCBzdHIoIGRhdGFzZXQuaD0KaWQg
KSApICkKLQotCiBjb25mX2ZpbGUgPTNEIHsKICAgICAnaGlzdG9yeV9pZCc6IGhpc3RvcnlfaWQs
CiAgICAgJ2dhbGF4eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybCwKCgpodHRwczovL2Jp
dGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMTg4YTJhYWRhN2I4LwpD
aGFuZ2VzZXQ6ICAgMTg4YTJhYWRhN2I4ClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRl
OiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgU3R5bGUgZml4
ZXMKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAwYWMxYmI4ZmYzYjEyYmFjNDg3ZDNhNDUz
MGRiN2NjMGYzMGMyM2Y5IC1yIDE4OGEyYWFkYTdiODRmMThjODAwMDgzPQo5NzcyNjMzNThiZDAz
OTAyNiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC04LDcgKzgsNiBAQAogaW1wb3J0IHlh
bWwKIGltcG9ydCByYW5kb20KPTIwCi0KIGhpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVu
Y29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCiBkYXRhc2V0X2lkID0zRCB0cmFucy5zZWN1cml0
eS5lbmNvZGVfaWQoIGhkYS5pZCApCiAjIEVuc3VyZSBnZW5lcmF0aW9uIG9mIG5vdGVib29rIGlk
IGlzIGRldGVybWluaXN0aWMgZm9yIHRoZSBkYXRhc2V0LiBSZXBsYT0KY2Ugd2l0aCBoaXN0b3J5
IGlkCkBAIC04Niw3ICs4NSw2IEBACiAgICAgaGFuZGxlLndyaXRlKCBlbXB0eV9uYiApCj0yMAog
ZG9ja2VyX2NtZCA9M0QgJ2RvY2tlciBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOjY3
ODkgLXYgIiVzOi9pbXBvcnQ9Ci8iIGJncnVlbmluZy9kb2NrZXItaXB5dGhvbi1ub3RlYm9vaycg
JSAoUE9SVCwgdGVtcF9kaXIpCi0KIHN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0z
RFRydWUpCj0yMAogIyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIEltYWdlIGFuZCBJUHl0aG9u
IGluIGxvYWRlZAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy80MThhNWE1YWMwMGMvCkNoYW5nZXNldDogICA0MThhNWE1YWMwMGMKVXNlcjogICAg
ICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1h
cnk6ICAgICBXb3JraW5nIGxvYWQgZnJvbSBleGlzdGluZyBub3RlYm9va3MgaW4gaGlzdG9yeQpB
ZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciAxODhhMmFhZGE3Yjg0ZjE4YzgwMDA4Mzk3NzI2
MzM1OGJkMDM5MDI2IC1yIDQxOGE1YTVhYzAwY2I1ZWI3M2E0ZTM1PQphYTZkMWU3MzcwNTRlYzc3
NiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi54bWwK
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24u
eG1sCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZi9pcHl0
aG9uLnhtbApAQCAtNSw2ICs1LDcgQEAKICAgICAgICAgPGRhdGFfc291cmNlPjxtb2RlbF9jbGFz
cz5IaXN0b3J5RGF0YXNldEFzc29jaWF0aW9uPC9tb2RlbF9jbGFzcz48PQp0ZXN0IHR5cGU9M0Qi
aXNpbnN0YW5jZSIgdGVzdF9hdHRyPTNEImRhdGF0eXBlIiByZXN1bHRfdHlwZT0zRCJkYXRhdHlw
ZSI+dGE9CmJ1bGFyLlRhYnVsYXI8L3Rlc3Q+CisgICAgICAgICAgICA8dGVzdCB0eXBlPTNEImlz
aW5zdGFuY2UiIHRlc3RfYXR0cj0zRCJkYXRhdHlwZSIgcmVzdWx0X3R5cGU9Cj0zRCJkYXRhdHlw
ZSI+ZGF0YS5UZXh0PC90ZXN0Pjx0b19wYXJhbSBwYXJhbV9hdHRyPTNEImlkIj5kYXRhc2V0X2lk
PC90b19wYT0KcmFtPjwvZGF0YV9zb3VyY2U+PC9kYXRhX3NvdXJjZXM+CgpkaWZmIC1yIDE4OGEy
YWFkYTdiODRmMThjODAwMDgzOTc3MjYzMzU4YmQwMzkwMjYgLXIgNDE4YTVhNWFjMDBjYjVlYjcz
YTRlMzU9CmFhNmQxZTczNzA1NGVjNzc2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTgw
LDkgKzgwLDE1IEBACiB3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggdGVtcF9kaXIsICdjb25mLnlh
bWwnICksICd3YicgKSBhcyBoYW5kbGU6CiAgICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29u
Zl9maWxlKSApCj0yMAorIyBUT0RPOiBJbXBsZW1lbnQgcHJvcGVyIElQeU5CIGRhdGF0eXBlIGF0
b3AgYSBwcm9wZXIgSlNPTiBkYXRhdHlwZQorIyBGb3Igbm93IHdlIGFzc3VtZSBhbGwgInRleHQi
IGRhdGF0eXBlcyBhcmUgaXB5bmJzLgorIyA8ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEImlweW5iIiB0
eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuZGF0YTpUZXh0IiBtaW1ldHk9CnBlPTNEImFwcGxpY2F0
aW9uL2pzb24iIHN1YmNsYXNzPTNEIlRydWUiIGRpc3BsYXlfaW5fdXBsb2FkPTNEIlRydWUiLz4K
IGVtcHR5X25iX3BhdGggPTNEIG9zLnBhdGguam9pbih0ZW1wX2RpciwgJ2lweXRob25fZ2FsYXh5
X25vdGVib29rLmlweW5iJykKLXdpdGggb3BlbiggZW1wdHlfbmJfcGF0aCwgJ3crJyApIGFzIGhh
bmRsZToKLSAgICBoYW5kbGUud3JpdGUoIGVtcHR5X25iICkKK2lmIGhkYS5kYXRhdHlwZS5fX2Ns
YXNzX18uX19uYW1lX18gIT0zRCAiVGV4dCI6CisgICAgd2l0aCBvcGVuKCBlbXB0eV9uYl9wYXRo
LCAndysnICkgYXMgaGFuZGxlOgorICAgICAgICBoYW5kbGUud3JpdGUoIGVtcHR5X25iICkKK2Vs
c2U6CisgICAgc2h1dGlsLmNvcHkoIGhkYS5maWxlX25hbWUsIGVtcHR5X25iX3BhdGggKQo9MjAK
IGRvY2tlcl9jbWQgPTNEICdkb2NrZXIgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczo2
Nzg5IC12ICIlczovaW1wb3J0PQovIiBiZ3J1ZW5pbmcvZG9ja2VyLWlweXRob24tbm90ZWJvb2sn
ICUgKFBPUlQsIHRlbXBfZGlyKQogc3VicHJvY2Vzcy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNE
VHJ1ZSkKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1p
dHMvYTg2NzRhMWJkMjlhLwpDaGFuZ2VzZXQ6ICAgYTg2NzRhMWJkMjlhClVzZXI6ICAgICAgICBl
cmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAg
ICAgUmV3cm90ZSBuZXRzdGF0IGNvbW1hbmRzIGFzIFBvcGVuIHBpcGVkIGNvbW1hbmRzClRoZSBv
cmlnaW5hbCB2ZXJzaW9uIGFjdHVhbGx5IGZhaWxlZCBmb3IgbWUuIEkgYW0gbGVkIHRvIGJlbGll
dmUgdGhhdCBhbGwgdD0KaGUgcGlwZXMgd2VyZSBiZWluZwpwYXNzZWQgdG8gbmV0c3RhdCBhcyBp
dCBzYWlkICJJIGRvbid0IHVuZGVyc3RhbmQgdGhlIG9wdGlvbiAnOiciIHdoaWNoIGNhbWU9CiBm
cm9tIHRoZSBjdXQgY29tbWFuZC4KQXQgdGhlIGNvc3Qgb2Ygc2ltcGxpY2l0eSwgdGhpcyBzaG91
bGQgZG8gd2hhdCB3ZSB3YW50IHByb3Blcmx5LiBBbHRlcm5hdGl2PQplbHkgd2UgY291bGQgbW92
ZSB0aGUKYXdrL2N1dC9zb3J0IGludG8gcHl0aG9uLgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZm
IC1yIDQxOGE1YTVhYzAwY2I1ZWI3M2E0ZTM1YWE2ZDFlNzM3MDU0ZWM3NzYgLXIgYTg2NzRhMWJk
MjlhNzFhMDRkOWQxNzk9CmI0ODgyZjE0OTY4ZTI5NWZjIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1h
a28KQEAgLTU0LDkgKzU0LDIyIEBACiB9IiIiICUgKG5vdGVib29rX2lkLCApCj0yMAo9MjAKLSMg
RmluZCBhbGwgcG9ydHMgdGhhdCBhcmUgYWxyZWF4eSBvY2N1cGllZAotbmV0c3RhdF9jbWQgPTNE
ICJuZXRzdGF0IC10bmFBaW5ldCB8IGF3ayAnTlIgPj0zRCAzIHsgcHJpbnQgJDQgfScgfCBjdXQg
LWQ9CjogLWYyIHwgc29ydCAtdW4iCi1uZXRzdGF0X291dCA9M0Qgc3VicHJvY2Vzcy5jaGVja19v
dXRwdXQoIHNobGV4LnNwbGl0KCBuZXRzdGF0X2NtZCApKQorIyBGaW5kIGFsbCBwb3J0cyB0aGF0
IGFyZSBhbHJlYWR5IG9jY3VwaWVkCitpbXBvcnQgc2hsZXgKK2NtZF9uZXRzdGF0ID0zRCBzaGxl
eC5zcGxpdCgibmV0c3RhdCAtdG5hQWluZXQiKQorcDEgPTNEIHN1YnByb2Nlc3MuUG9wZW4oY21k
X25ldHN0YXQsIHN0ZG91dD0zRHN1YnByb2Nlc3MuUElQRSkKKworY21kX2F3ayA9M0Qgc2hsZXgu
c3BsaXQoImF3ayAnTlIgPj0zRCAzIHsgcHJpbnQgJDQgfSciKQorcDIgPTNEIHN1YnByb2Nlc3Mu
UG9wZW4oY21kX2F3aywgc3RkaW49M0RwMS5zdGRvdXQsIHN0ZG91dD0zRHN1YnByb2Nlc3MuUEk9
ClBFKQorCitjbWRfY3V0ID0zRCBzaGxleC5zcGxpdCgiY3V0IC1kOiAtZjIiKQorcDMgPTNEIHN1
YnByb2Nlc3MuUG9wZW4oY21kX2N1dCwgc3RkaW49M0RwMi5zdGRvdXQsIHN0ZG91dD0zRHN1YnBy
b2Nlc3MuUEk9ClBFKQorCitjbWRfc29ydCA9M0Qgc2hsZXguc3BsaXQoInNvcnQgLXVuIikKK3A0
ID0zRCBzdWJwcm9jZXNzLlBvcGVuKGNtZF9zb3J0LCBzdGRpbj0zRHAzLnN0ZG91dCwgc3Rkb3V0
PTNEc3VicHJvY2Vzcy5QPQpJUEUpCisKK25ldHN0YXRfb3V0ID0zRCBwNC5zdGRvdXQucmVhZCgp
CisKIG9jY3VwaWVkX3BvcnRzID0zRCBbcG9ydCBmb3IgcG9ydCBpbiBuZXRzdGF0X291dC5zcGxp
dCgnXG4nKSBpZiBwb3J0LmlzZGlnPQppdCgpXQo9MjAKICMgR2VuZXJhdGUgcmFuZG9tIGZyZWUg
cG9ydCBudW1iZXIgZm9yIG91ciBkb2NrZXIgY29udGFpbmVyCgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2IzNTcyY2U4YzE1Yi8KQ2hhbmdlc2V0
OiAgIGIzNTcyY2U4YzE1YgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIEFkZGVkIHJlbW90ZV9ob3N0IHZhcmlh
YmxlIHRvIGRvY2tlciBjb25mCkluIG9yZGVyIHRvIHdoaXRlbGlzdCBJUHMgYWxsb3dlZCB0byBj
b25uZWN0IHRvIG5vdGVib29rcywgd2UgbmVlZCB0byBrbm93ID0Kd2hvIHRoZSByZW1vdGUgdGFy
Z2V0CmNvbm5lY3RpbmcgaXMuIFdlIGNhbiBibGFja2xpc3Qgb24gSVAgYWRkcmVzcyBvbmx5LCBh
cyB3ZSBoYXZlIG5vIHdheSBvZiBhdT0KdGhlbnRpY2F0aW5nIHRoZW0uIFdoaWxlCndlIGRvIGhh
dmUgYWNjZXNzIHRvIG90aGVyIGluZm9ybWF0aW9uIGxpa2UgY29va2llcywgd2UgaGF2ZSBubyBT
U0wgbm9yIHdheT0KIHRvIGtub3cgd2hhdAphdXRoZW50aWNhdGlvbiBtZXRob2QgdGhlIGdhbGF4
eSBzZXJ2ZXIgd2lsbCBiZSB1c2luZy4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBhODY3
NGExYmQyOWE3MWEwNGQ5ZDE3OWI0ODgyZjE0OTY4ZTI5NWZjIC1yIGIzNTcyY2U4YzE1YjEzZTFi
ZWVjZDU1PQpkMjYyYjNiMWNjMmFjN2Q1MSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC04
OSw2ICs4OSw3IEBACiAgICAgJ2hpc3RvcnlfaWQnOiBoaXN0b3J5X2lkLAogICAgICdnYWxheHlf
dXJsJzogcmVxdWVzdC5hcHBsaWNhdGlvbl91cmwsCiAgICAgJ2FwaV9rZXknOiB0cmFucy51c2Vy
LmFwaV9rZXlzWzBdLmtleSwKKyAgICAncmVtb3RlX2hvc3QnOiByZXF1ZXN0LnJlbW90ZV9hZGRy
LAogfQogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55YW1sJyApLCAn
d2InICkgYXMgaGFuZGxlOgogICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZfZmlsZSkg
KQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9k
N2U4ZjQ3YjRmNmEvCkNoYW5nZXNldDogICBkN2U4ZjQ3YjRmNmEKVXNlcjogICAgICAgIGVyYXNj
aGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBD
aGFuZ2VkIGZsb3cgc3R5bGUgZm9yIGVhc2llciBncmVwcGluZwpTZWUgdGhlIFtQeVlBTUxdKGh0
dHA6Ly9weXlhbWwub3JnL3dpa2kvUHlZQU1MRG9jdW1lbnRhdGlvbikgZG9jcyBmb3IgbW9yZSA9
CmluZm9ybWF0aW9uIGFzIHRvIGZsb3cKc3R5bGUuIEVzc2VudGlhbGx5IGl0IHNob3VsZCBtYWtl
IHN1cmUgdGhlIGBjb25mLnlhbWxgIGZpbGUgaXMgZ3JlcHBhYmxlLCB3PQpoaWNoIG1heSBiZSBu
ZWNlc3NhcnkgZm9yCklQIGFkZHJlc3Mgd2hpdGVsaXN0aW5nLgpBZmZlY3RlZCAjOiAgMSBmaWxl
CgpkaWZmIC1yIGIzNTcyY2U4YzE1YjEzZTFiZWVjZDU1ZDI2MmIzYjFjYzJhYzdkNTEgLXIgZDdl
OGY0N2I0ZjZhZDU0MGFhOWZlNTg9CmFlOTAzZjMyYjU4MWI1YzRkIGNvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwor
KysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KQEAgLTkyLDcgKzkyLDcgQEAKICAgICAncmVtb3RlX2hvc3QnOiByZXF1ZXN0LnJl
bW90ZV9hZGRyLAogfQogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55
YW1sJyApLCAnd2InICkgYXMgaGFuZGxlOgotICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNv
bmZfZmlsZSkgKQorICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZfZmlsZSwgZGVmYXVs
dF9mbG93X3N0eWxlPTNERmFsc2UpICkKPTIwCiAjIFRPRE86IEltcGxlbWVudCBwcm9wZXIgSVB5
TkIgZGF0YXR5cGUgYXRvcCBhIHByb3BlciBKU09OIGRhdGF0eXBlCiAjIEZvciBub3cgd2UgYXNz
dW1lIGFsbCAidGV4dCIgZGF0YXR5cGVzIGFyZSBpcHluYnMuCgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2JhZDk0ZmFkOWZiNy8KQ2hhbmdlc2V0
OiAgIGJhZDk0ZmFkOWZiNwpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIEFkZGVkIGNvZGUgdG8gb2J0YWluIHBv
cnQgaW5mb3JtYXRpb24gZnJvbSBnYWxheHkKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBk
N2U4ZjQ3YjRmNmFkNTQwYWE5ZmU1OGFlOTAzZjMyYjU4MWI1YzRkIC1yIGJhZDk0ZmFkOWZiNzI4
MzUzNTE5NTc0PQpjZDY3MzhjZDgxNTNkODJiNyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBA
IC04NSwxMSArODUsMzAgQEAKPTIwCiB0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKCB0ZW1w
ZmlsZS5ta2R0ZW1wKCkgKQo9MjAKKyMjIyMjIyMjIyMjIyMjIyBHZXR0aW5nIG9mIHBvcnQgZ2Fs
YXh5IGlzIGJlaW5nIHNlcnZlZCBvbi4KK3AxID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNw
bGl0KCIiInBzIGEiIiIpLCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJUEUpCitwMiA9M0Qgc3VicHJv
Y2Vzcy5Qb3BlbihzaGxleC5zcGxpdCgiIiJncmVwICdweXRob24gLi9zY3JpcHRzJyIiIiksIHN0
ZGluPQo9M0RwMS5zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PTNEc3VicHJv
Y2Vzcy5QSVBFKQorcDMgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIiZ3JlcCAt
diAnZ3JlcCciIiIpLCBzdGRpbj0zRHAyLnN0ZG89CnV0LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJ
UEUpCitwNCA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdCgiIiJhd2sgJ3twcmludCAk
MX0nIiIiKSwgc3RkaW49M0RwMy5zdD0KZG91dCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQor
Z2FsYXh5X3Bhc3Rlcl9waWQgPTNEIHA0LnN0ZG91dC5yZWFkKCkKK2dhbGF4eV9wYXN0ZXJfcG9y
dCA9M0QgTm9uZQoraWYgbGVuKGdhbGF4eV9wYXN0ZXJfcGlkKSA+IDA6CisgICAgcHJpbnQgIkZv
dW5kIHBpZDogIiArIHN0cihnYWxheHlfcGFzdGVyX3BpZCkKKyAgICBwMSA9M0Qgc3VicHJvY2Vz
cy5Qb3BlbihzaGxleC5zcGxpdCgiIiJuZXRzdGF0IC1udHBhIiIiKSwgc3Rkb3V0PTNEc3ViPQpw
cm9jZXNzLlBJUEUpCisgICAgcDIgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIi
Z3JlcCAlZCIiIiAlIChpbnQoZ2FsYXh5X3Bhc3Rlcj0KX3BpZCksICkpLCBzdGRpbj0zRHAxLnN0
ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBF
KQorICAgIHAzID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KCIiImF3ayAne3ByaW50
ICQ0fSciIiIpLCBzdGRpbj0zRHA9CjIuc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJUEUpCisgICAgcDQgPTNEIHN1YnByb2Nlc3MuUG9wZW4o
c2hsZXguc3BsaXQoIiIiY3V0IC1kOiAtZjIiIiIpLCBzdGRpbj0zRHAzLnN0ZD0Kb3V0LCBzdGRv
dXQ9M0RzdWJwcm9jZXNzLlBJUEUpCisgICAgZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBwNC5zdGRv
dXQucmVhZCgpCisKIGNvbmZfZmlsZSA9M0QgewogICAgICdoaXN0b3J5X2lkJzogaGlzdG9yeV9p
ZCwKICAgICAnZ2FsYXh5X3VybCc6IHJlcXVlc3QuYXBwbGljYXRpb25fdXJsLAogICAgICdhcGlf
a2V5JzogdHJhbnMudXNlci5hcGlfa2V5c1swXS5rZXksCiAgICAgJ3JlbW90ZV9ob3N0JzogcmVx
dWVzdC5yZW1vdGVfYWRkciwKKyAgICAnZ2FsYXh5X3Bhc3Rlcl9wb3J0JzogZ2FsYXh5X3Bhc3Rl
cl9wb3J0LAogfQogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55YW1s
JyApLCAnd2InICkgYXMgaGFuZGxlOgogICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZf
ZmlsZSwgZGVmYXVsdF9mbG93X3N0eWxlPTNERmFsc2UpICkKCgpodHRwczovL2JpdGJ1Y2tldC5v
cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZmM0YzZlNDA3YzBhLwpDaGFuZ2VzZXQ6
ICAgZmM0YzZlNDA3YzBhClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0x
MC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgRm91bmQgcG9ydCBwcm9wZXJseQpBZmZl
Y3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGJhZDk0ZmFkOWZiNzI4MzUzNTE5NTc0Y2Q2NzM4Y2Q4
MTUzZDgyYjcgLXIgZmM0YzZlNDA3YzBhYTBmNjQxYWRmN2U9CjlhOGE0MDA4Y2FhMmVkM2I0IGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0K
YWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVz
L2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTc3LDcgKzc3LDcgQEAKICAgICBQT1JUID0zRCBy
YW5kb20ucmFuZHJhbmdlKDEwMDAwLDE1MDAwKQogICAgIGlmIFBPUlRTIG5vdCBpbiBvY2N1cGll
ZF9wb3J0czoKICAgICAgICAgYnJlYWsKLQorcHJpbnQgIlN0YXJ0aW5nIGRvY2tlciBvbiBwb3J0
ICVzIiAlIFBPUlQKIEhPU1QgPTNEIHJlcXVlc3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwgd2Ug
anVzdCB3YW50IHRoZSBVUkwgdGhpcyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4KIGlm
ICc6JyBpbiBIT1NUOgpAQCAtOTEsMTcgKzkxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAg
c3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQogcDMgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXgu
c3BsaXQoIiIiZ3JlcCAtdiAnZ3JlcCciIiIpLCBzdGRpbj0zRHAyLnN0ZG89CnV0LCBzdGRvdXQ9
M0RzdWJwcm9jZXNzLlBJUEUpCiBwNCA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdCgi
IiJhd2sgJ3twcmludCAkMX0nIiIiKSwgc3RkaW49M0RwMy5zdD0KZG91dCwgc3Rkb3V0PTNEc3Vi
cHJvY2Vzcy5QSVBFKQotZ2FsYXh5X3Bhc3Rlcl9waWQgPTNEIHA0LnN0ZG91dC5yZWFkKCkKKyMg
T25seSB0YWtlIGZpcnN0IFBJRCBpbiBjYXNlIHdlIGhhdmUgbXVsdGlwbGUuCitnYWxheHlfcGFz
dGVyX3BpZCA9M0QgcDQuc3Rkb3V0LnJlYWQoKS5zcGxpdCgnXG4nKVswXQogZ2FsYXh5X3Bhc3Rl
cl9wb3J0ID0zRCBOb25lCiBpZiBsZW4oZ2FsYXh5X3Bhc3Rlcl9waWQpID4gMDoKLSAgICBwcmlu
dCAiRm91bmQgcGlkOiAiICsgc3RyKGdhbGF4eV9wYXN0ZXJfcGlkKQotICAgIHAxID0zRCBzdWJw
cm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KCIiIm5ldHN0YXQgLW50cGEiIiIpLCBzdGRvdXQ9M0Rz
dWI9CnByb2Nlc3MuUElQRSkKLSAgICBwMiA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxp
dCgiIiJncmVwICVkIiIiICUgKGludChnYWxheHlfcGFzdGVyPQpfcGlkKSwgKSksIHN0ZGluPTNE
cDEuc3Rkb3V0LAorICAgICMgRmluZCBhbGwgZmlsZXMgb3BlbmVkIGJ5IHRoZSBwcm9jZXNzIG9m
IGludGVyZXN0CisgICAgcDEgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIibHNv
ZiAtcCAlZCIiIiAlIChpbnQoZ2FsYXh5X3Bhcz0KdGVyX3BpZCksKSApLCBzdGRvdXQ9M0RzdWJw
cm9jZXNzLlBJUEUpCisgICAgIyBHcmVwIG91dCB0aGUgVENQIGNvbm5lY3Rpb25zIG9wZW5lZCBi
eSB0aGlzIHByb2Nlc3MKKyAgICBwMiA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdCgi
IiJncmVwIC1vICdUQ1AgW146XSo6WzAtOV0qJyIiIiksPQogc3RkaW49M0RwMS5zdGRvdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD0zRHN1YnByb2Nlc3MuUElQRSkKLSAgICBw
MyA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdCgiIiJhd2sgJ3twcmludCAkNH0nIiIi
KSwgc3RkaW49M0RwPQoyLnN0ZG91dCwKKyAgICAjIFJlbW92ZSAnVENQICo6JyBmcm9tICdUQ1Ag
Kjo0MDAwJworICAgIHAzID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KCIiImN1dCAt
ZDogLWYyIiIiKSwgc3RkaW49M0RwMi5zdGQ9Cm91dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQotICAgIHA0ID0zRCBzdWJwcm9jZXNzLlBvcGVu
KHNobGV4LnNwbGl0KCIiImN1dCAtZDogLWYyIiIiKSwgc3RkaW49M0RwMy5zdGQ9Cm91dCwgc3Rk
b3V0PTNEc3VicHJvY2Vzcy5QSVBFKQotICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgcDQuc3Rk
b3V0LnJlYWQoKQorICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgcDMuc3Rkb3V0LnJlYWQoKS5z
dHJpcCgpCj0yMAogY29uZl9maWxlID0zRCB7CiAgICAgJ2hpc3RvcnlfaWQnOiBoaXN0b3J5X2lk
LAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8y
NzZiYWVkNTRlOGEvCkNoYW5nZXNldDogICAyNzZiYWVkNTRlOGEKVXNlcjogICAgICAgIGVyYXNj
aGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBS
ZWRpcmVjdCBsc29mJ3Mgc3RkZXJyIHRvIGlnbm9yZWQgZGV2aWNlCkFmZmVjdGVkICM6ICAxIGZp
bGUKCmRpZmYgLXIgZmM0YzZlNDA3YzBhYTBmNjQxYWRmN2U5YThhNDAwOGNhYTJlZDNiNCAtciAy
NzZiYWVkNTRlOGExMzFkNTg5MzRhMj0KMDMxMThjYzhlMjI2Zjc0MjMgY29uZmlnL3BsdWdpbnMv
dmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubWFrbwpAQCAtOTYsNyArOTYsOCBAQAogZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBOb25l
CiBpZiBsZW4oZ2FsYXh5X3Bhc3Rlcl9waWQpID4gMDoKICAgICAjIEZpbmQgYWxsIGZpbGVzIG9w
ZW5lZCBieSB0aGUgcHJvY2VzcyBvZiBpbnRlcmVzdAotICAgIHAxID0zRCBzdWJwcm9jZXNzLlBv
cGVuKHNobGV4LnNwbGl0KCIiImxzb2YgLXAgJWQiIiIgJSAoaW50KGdhbGF4eV9wYXM9CnRlcl9w
aWQpLCkgKSwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQorICAgIHAxID0zRCBzdWJwcm9jZXNz
LlBvcGVuKHNobGV4LnNwbGl0KCIiImxzb2YgLXAgJWQiIiIgJSAoaW50KGdhbGF4eV9wYXM9CnRl
cl9waWQpLCkgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPTNEc3VicHJvY2Vz
cy5TVERPVVQsIHN0ZG91dD0zRHN1YnByb2Nlc3MuPQpQSVBFKQogICAgICMgR3JlcCBvdXQgdGhl
IFRDUCBjb25uZWN0aW9ucyBvcGVuZWQgYnkgdGhpcyBwcm9jZXNzCiAgICAgcDIgPTNEIHN1YnBy
b2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIiZ3JlcCAtbyAnVENQIFteOl0qOlswLTldKiciIiIp
LD0KIHN0ZGluPTNEcDEuc3Rkb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9
M0RzdWJwcm9jZXNzLlBJUEUpCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHkt
Y2VudHJhbC9jb21taXRzLzQ5YjM5NDNiYjc3YS8KQ2hhbmdlc2V0OiAgIDQ5YjM5NDNiYjc3YQpV
c2VyOiAgICAgICAgQmpvZXJuR3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6
MDMrMDA6MDAKU3VtbWFyeTogICAgIHNvbWUgcmVhZG1lIHVwZGF0ZXMKQWZmZWN0ZWQgIzogIDEg
ZmlsZQoKZGlmZiAtciAyNzZiYWVkNTRlOGExMzFkNTg5MzRhMjAzMTE4Y2M4ZTIyNmY3NDIzIC1y
IDQ5YjM5NDNiYjc3YTNlMTFhOGY0OTVhPQpjZTY5NTk1MGVkNTMyNGQ4MyBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZApAQCAtMTMsMTAgKzEzLDU3IEBACiBJbnN0YWxs
YXRpb24KID0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAo9MjAKLUNwb3kgdGhl
IHRlbXBsYXRlIGFuZCBjb25maWcgZm9sZGVyIGluIHlvdXIgPEdBTEFYWV9ST09UPi9jb25maWcv
cGx1Z2lucy92PQppc3VhbGl6YXRpb25zL2lweXRob24gZm9sZGVyIGFuZCByZXN0YXJ0IEdhbGF4
eS4KK0NvcHkgdGhlIHRlbXBsYXRlIGFuZCBjb25maWcgZm9sZGVyIGluIHlvdXIgPEdBTEFYWV9S
T09UPi9jb25maWcvcGx1Z2lucy92PQppc3VhbGl6YXRpb25zL2lweXRob24gZm9sZGVyIGFuZCBy
ZXN0YXJ0IEdhbGF4eS4KPTIwCiBvcgo9MjAKIGBgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNv
bS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24uZ2l0IGNvbmZpZy9wbHVnaW5zPQovdml6L2lweXRo
b25gYAo9MjAKIFRoZSBJUHl0aG9uIFZpc3VhbGlzYXRpb24gT3B0aW9uIHNob3VsZCBiZSB2aXNp
YmxlIG5leHQgdG8gdGhlIHVzdWFsIENoYXJ0PQpzIG9yIFRyYWNrc3RlciBPcHRpb25zIGluIHlv
dXIgVmlzdWFsaXNhdGlvbiBtZW51ZS4KKworCitGZWF0dXJlcworPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNECisKKyAqIHJ1biBJUHl0aG9uIGRpcmVjdGx5IGluIHlvdXIgR2FsYXh5IG1haW4gd2lu
ZG93IG9yIGluIEdhbGF4eSBTY3JhdGNoYm9vaworICogY29tcGxldGUgZW5jYXBzdWxhdGVkIHB5
dGhvbiBlbnZpcm9ubWVudCB3aXRoIG1hdHBsb3RsaWIsIHBhbmRhcyBhbmQgZnI9CmllbmRzIGlu
c3RhbGxlZAorICogYWNjZXNzIHRvIGFsbCBkYXRhc2V0cyBmcm9tIHlvdXIgY3VycmVudCBoaXN0
b3J5IHZpYSBwcmUtZGVmaW5lZCBJUHl0aG89Cm4gZnVuY3Rpb24KKyAqIG1hbmlwdWxhdGUgYW5k
IHBsb3QgZGF0YSBhcyB5b3UgbGlrZSBhbmQgZXhwb3J0IHlvdXIgbmV3IGZpbGVzIGJhY2sgaW50
PQpvIHRoZSBHYWxheHkgaGlzdG9yeQorICogc2F2ZSB0aGUgSVB5dGhvbiBOb3RlYm9vayBpbnRv
IHlvdXIgR2FsYXh5IGhpc3RvcnkKKyAqIHNhdmVkIElQeXRob24gTm90ZWJvb2sgZmlsZXMgY2Fu
IGJlIHZpZXdlZCBpbiBIVE1MIGFuZCByZS1vcGVuZWQKKyAqIHNlbGYtY2xvc2luZyBhbmQgY2xl
YW5pbmcgSVB5dGhvbiBkb2NrZXIgY29udGFpbmVyCisKKworQXV0aG9ycworPTNEPTNEPTNEPTNE
PTNEPTNEPTNECisKKyAqIEJqb2VybiBHcnVlbmluZworICogRXJpYyBSYXNjaGUKKworCitIaXN0
b3J5Cis9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKKworLSB2MC4xOiBJbml0aWFsIHB1YmxpYyByZWxl
YXNlCisKKworTGljZW5jZSAoTUlUKQorPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNECisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvPQpweQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz
b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGQ9CmVhbAor
aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp
bWl0YXRpb24gdGhlIHJpZ2g9CnRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp
c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNv
ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1
cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisK
K1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m
IHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBC
VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG
T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g
QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUj0KT00sCitP
VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U
SEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh
bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzBjZWFmYWRiZjU2NC8KQ2hhbmdlc2V0OiAgIDBj
ZWFmYWRiZjU2NApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTgg
MjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIFRlbXBsYXRlIHVwZGF0ZXMKQSBjb3VwbGUgdGhp
bmdzIG9mIGludGVyZXN0IGFyZSBkb25lIHdpdGggdGhlIHRlbXBsYXRlOgoKLSBIVE1MIGhlYWRl
cgotIE1hcmtkb3duIGNlbGwgd2l0aCBpbnN0cnVjdGlvbnMgYXMgdG8gcmVhZC93cml0ZSBkYXRh
IGZyb20gZ2FsYXh5Ci0gQSBISURERU4gamF2YXNjcmlwdCBmdW5jdGlvbiB0byBzYXZlIHRvIGdh
bGF4eQotIEVtcHR5IGNlbGwgZm9yIG5leHQgdXNlciBjb21tYW5kLgoKVGhlIGhpZGRlbiBqYXZh
c2NyaXB0IGZ1bmN0aW9uIGlzIGRvbmUgYnkgd3JpdGluZyB0aGUgZnVuY3Rpb24gYXMgcGFydCBv
ZiB0PQpoZSBub3RlYm9vayBhbmQgcmVtb3ZpbmcKdGhlIGlucHV0IHRleHQuIFRoaXMgaXMgcHJv
YmFibHkgdmVyeSwgdmVyeSBmcmFnaWxlIGFuZCB3aWxsIG5vdCBzdXJ2aXZlIGEgPQpjbG9zaW5n
K3Jlb3BlbmluZyBidXQKaXQncyB2ZXJ5IHBsZWFzYW50IGxvb2tpbmcgdG8ganVzdCBoYXZlIGEg
YnV0dG9uIHRoYXQgc2F2ZXMgdGhlIG5vdGVib29rIHRvPQogZ2FsYXh5LiBJdCdzIHZlcnkKdmlz
dWFsbHkgdW5vYnRydXNpdmUgYW5kIHRoYXQgbWF5IGJlIG1vcmUgaW1wb3J0YW50IGZvciBuZXcg
dXNlcnMgdGhhbiBoYXZpPQpuZyB0aGUgZnVsbCBjb2RlIHRoZXJlLgoKVG8gYmUgYWJsZSB0byBp
bnRlcmFjdCB3aXRoIHRoYXQgYnV0dG9uIGl0IGlzIHJlcXVpcmVkIHRoYXQgaXB5dGhvbiB0cnVz
dCB0PQpoZSBub3RlYm9vay4gVGhpcyBpcyBkb25lCmluIGFuIHVwZGF0ZSB0byB0aGUgZG9ja2Vy
IHN0YXJ0dXAgc2NyaXB0LgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDQ5YjM5NDNiYjc3
YTNlMTFhOGY0OTVhY2U2OTU5NTBlZDUzMjRkODMgLXIgMGNlYWZhZGJmNTY0ZDQwZTMyZTJlNjE9
CmJlY2FmNDMxMjk2MmI1ZjAzIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
dGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTI2LDcgKzI2
LDcgQEAKICAgICJjZWxscyI6IFsKICAgICB7CiAgICAgICJjZWxsX3R5cGUiOiAiaGVhZGluZyIs
Ci0gICAgICJsZXZlbCI6IDIsCisgICAgICJsZXZlbCI6IDEsCiAgICAgICJtZXRhZGF0YSI6IHt9
LAogICAgICAic291cmNlIjogWwogICAgICAgIldlbGNvbWUgdG8gdGhlIGludGVyYWN0aXZlIEdh
bGF4eSBJUHl0aG9uIE5vdGVib29rLiIKQEAgLTM2LDI3ICszNiw1OSBAQAogICAgICAiY2VsbF90
eXBlIjogIm1hcmtkb3duIiwKICAgICAgIm1ldGFkYXRhIjoge30sCiAgICAgICJzb3VyY2UiOiBb
Ci0gICAgICAiWW91IGNhbiBhY2Nlc3MgeW91ciBkYXRhIHZpYSB0aGUgZGF0YXNldCBudW1iZXIu
IEZvciBleGFtcGxlOiBoYW5kbD0KZSA9M0Qgb3BlbignNDInLCAncicpIgorICAgICAgIllvdSBj
YW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhlIGRhdGFzZXQgbnVtYmVyLiBGb3IgZXhhbXBsZSwg
YGhhbmQ9CmxlID0zRCBnZXQoNDIpYC5cXG4iLAorICAgICAgIlRvIHNhdmUgZGF0YSwgd3JpdGUg
eW91ciBkYXRhIHRvIGEgZmlsZSwgYW5kIHRoZW4gY2FsbCBgcHV0KCdmaWxlbmE9Cm1lLnR4dCcp
YC4gVGhlIGRhdGFzZXQgd2lsbCB0aGVuIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGF4eSBoaXN0
b3J5LiIKICAgICAgXQogICAgIH0sCiAgICAgewogICAgICAiY2VsbF90eXBlIjogImNvZGUiLAog
ICAgICAiY29sbGFwc2VkIjogZmFsc2UsCi0gICAgICJpbnB1dCI6IFtdLAorICAgICAiaW5wdXQi
OiBbCisgICAgICAiIyBUaGlzIGJ1dHRvbiBqdXN0IGNhbGxzIHB1dCgnaXB5dGhvbl9nYWxheHlf
bm90ZWJvb2suaXB5bmInKSIKKyAgICAgXSwKICAgICAgImxhbmd1YWdlIjogInB5dGhvbiIsCiAg
ICAgICJtZXRhZGF0YSI6IHt9LAotICAgICAib3V0cHV0cyI6IFtdCisgICAgICJvdXRwdXRzIjog
WworICAgICAgeworICAgICAgICJodG1sIjogWworICAgICAgICAiPGJ1dHRvbiBvbmNsaWNrPTNE
XFxcInNhdmUoKVxcXCI+U2F2ZSBOb3RlYm9vayB0byBHYWxheHk8L2J1dHRvbj49ClxcbiIsCisg
ICAgICAgICI8c2NyaXB0IHR5cGU9M0RcXFwidGV4dC9KYXZhc2NyaXB0XFxcIj5cXG4iLAorICAg
ICAgICAiICAgIGZ1bmN0aW9uIHNhdmUoKXtcXG4iLAorICAgICAgICAiICAgICAgICBjb25zb2xl
LmxvZyhJUHl0aG9uLm5vdGVib29rLmtlcm5lbC5leGVjdXRlKFxcXCJwdXQoJ2lweXQ9Cmhvbl9n
YWxheHlfbm90ZWJvb2suaXB5bmInKVxcXCIpKTtcXG4iLAorICAgICAgICAiICAgIH1cXG4iLAor
ICAgICAgICAiPC9zY3JpcHQ+XFxuIgorICAgICAgIF0sCisgICAgICAgIm1ldGFkYXRhIjoge30s
CisgICAgICAgIm91dHB1dF90eXBlIjogInB5b3V0IiwKKyAgICAgICAicHJvbXB0X251bWJlciI6
IDEsCisgICAgICAgInRleHQiOiBbCisgICAgICAgICI8SVB5dGhvbi5jb3JlLmRpc3BsYXkuSFRN
TCBhdCAweDNiMzM2NTA+IgorICAgICAgIF0KKyAgICAgIH0KKyAgICAgXSwKKyAgICAgInByb21w
dF9udW1iZXIiOiAxCisgICAgfSwKKyAgICB7CisgICAgICJjZWxsX3R5cGUiOiAiY29kZSIsCisg
ICAgICJjb2xsYXBzZWQiOiBmYWxzZSwKKyAgICAgImlucHV0IjogWworICAgICBdLAorICAgICAi
bGFuZ3VhZ2UiOiAicHl0aG9uIiwKKyAgICAgIm1ldGFkYXRhIjoge30sCisgICAgICJvdXRwdXRz
IjogW10sCisgICAgICJwcm9tcHRfbnVtYmVyIjogMgogICAgIH0KICAgIF0sCiAgICAibWV0YWRh
dGEiOiB7fQogICB9CiAgXQotfSIiIiAlIChub3RlYm9va19pZCwgKQorfQorIiIiICUgKG5vdGVi
b29rX2lkLCApCj0yMAo9MjAKICMgRmluZCBhbGwgcG9ydHMgdGhhdCBhcmUgYWxyZWFkeSBvY2N1
cGllZAogaW1wb3J0IHNobGV4Ci1jbWRfbmV0c3RhdCA9M0Qgc2hsZXguc3BsaXQoIm5ldHN0YXQg
LXRuYUFpbmV0IikKK2NtZF9uZXRzdGF0ID0zRCBzaGxleC5zcGxpdCgibmV0c3RhdCAtdHVsbiIp
CiBwMSA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihjbWRfbmV0c3RhdCwgc3Rkb3V0PTNEc3VicHJvY2Vz
cy5QSVBFKQo9MjAKIGNtZF9hd2sgPTNEIHNobGV4LnNwbGl0KCJhd2sgJ05SID49M0QgMyB7IHBy
aW50ICQ0IH0nIikKQEAgLTc3LDcgKzEwOSw2IEBACiAgICAgUE9SVCA9M0QgcmFuZG9tLnJhbmRy
YW5nZSgxMDAwMCwxNTAwMCkKICAgICBpZiBQT1JUUyBub3QgaW4gb2NjdXBpZWRfcG9ydHM6CiAg
ICAgICAgIGJyZWFrCi1wcmludCAiU3RhcnRpbmcgZG9ja2VyIG9uIHBvcnQgJXMiICUgUE9SVAog
SE9TVCA9M0QgcmVxdWVzdC5ob3N0CiAjIFN0cmlwIG91dCBwb3J0LCB3ZSBqdXN0IHdhbnQgdGhl
IFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkIGF0LgogaWYgJzonIGluIEhPU1Q6
CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2Mz
M2U2Mzg0MGY3Yy8KQ2hhbmdlc2V0OiAgIGMzM2U2Mzg0MGY3YwpVc2VyOiAgICAgICAgQmpvZXJu
R3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTog
ICAgIFRyeSBhZ2FpbiB0byBmaXggdGhlIG5ldHN0YXQgZmlsdGVyaW5nIGFuZCBjZWxsZWN0IGFs
bCB1c2VkIHBvPQpydHMuCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgMGNlYWZhZGJmNTY0
ZDQwZTMyZTJlNjFiZWNhZjQzMTI5NjJiNWYwMyAtciBjMzNlNjM4NDBmN2MxNmY0MjUwZmVkND0K
OTBiNjU4YTNkNzkyM2Q3ZTAgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtOTEsMjQgKzkx
LDIxIEBACiBjbWRfbmV0c3RhdCA9M0Qgc2hsZXguc3BsaXQoIm5ldHN0YXQgLXR1bG4iKQogcDEg
PTNEIHN1YnByb2Nlc3MuUG9wZW4oY21kX25ldHN0YXQsIHN0ZG91dD0zRHN1YnByb2Nlc3MuUElQ
RSkKPTIwCi1jbWRfYXdrID0zRCBzaGxleC5zcGxpdCgiYXdrICdOUiA+PTNEIDMgeyBwcmludCAk
NCB9JyIpCi1wMiA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihjbWRfYXdrLCBzdGRpbj0zRHAxLnN0ZG91
dCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QST0KUEUpCi0KLWNtZF9jdXQgPTNEIHNobGV4LnNwbGl0
KCJjdXQgLWQ6IC1mMiIpCi1wMyA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihjbWRfY3V0LCBzdGRpbj0z
RHAyLnN0ZG91dCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QST0KUEUpCi0KLWNtZF9zb3J0ID0zRCBz
aGxleC5zcGxpdCgic29ydCAtdW4iKQotcDQgPTNEIHN1YnByb2Nlc3MuUG9wZW4oY21kX3NvcnQs
IHN0ZGluPTNEcDMuc3Rkb3V0LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlA9CklQRSkKLQotbmV0c3Rh
dF9vdXQgPTNEIHA0LnN0ZG91dC5yZWFkKCkKLQotb2NjdXBpZWRfcG9ydHMgPTNEIFtwb3J0IGZv
ciBwb3J0IGluIG5ldHN0YXRfb3V0LnNwbGl0KCdcbicpIGlmIHBvcnQuaXNkaWc9Cml0KCldCitv
Y2N1cGllZF9wb3J0cyA9M0QgbGlzdCgpCitmb3IgbGluZSBpbiBwMS5zdGRvdXQucmVhZCgpLnNw
bGl0KCdcbicpOgorICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgndGNwJykgb3IgbGluZS5zdGFydHN3
aXRoKCd0Y3A2Jyk6CisgICAgICAgIGNvbCA9M0QgbGluZS5zcGxpdCgpCisgICAgICAgIGxvY2Fs
X2FkZHJlc3MgPTNEIGNvbFszXQorICAgICAgICBsb2NhbF9wb3J0ID0zRCBsb2NhbF9hZGRyZXNz
LnNwbGl0KCc6JylbLTFdCisgICAgICAgIG9jY3VwaWVkX3BvcnRzLmFwcGVuZCggaW50KGxvY2Fs
X3BvcnQpICkKPTIwCiAjIEdlbmVyYXRlIHJhbmRvbSBmcmVlIHBvcnQgbnVtYmVyIGZvciBvdXIg
ZG9ja2VyIGNvbnRhaW5lcgorcHJpbnQgb2NjdXBpZWRfcG9ydHMKIHdoaWxlIFRydWU6CiAgICAg
UE9SVCA9M0QgcmFuZG9tLnJhbmRyYW5nZSgxMDAwMCwxNTAwMCkKLSAgICBpZiBQT1JUUyBub3Qg
aW4gb2NjdXBpZWRfcG9ydHM6CisgICAgaWYgUE9SVCBub3QgaW4gb2NjdXBpZWRfcG9ydHM6CiAg
ICAgICAgIGJyZWFrCisKIEhPU1QgPTNEIHJlcXVlc3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwg
d2UganVzdCB3YW50IHRoZSBVUkwgdGhpcyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4K
IGlmICc6JyBpbiBIT1NUOgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwvY29tbWl0cy85MTBkMDlhYzEzMzgvCkNoYW5nZXNldDogICA5MTBkMDlhYzEzMzgKVXNl
cjogICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAz
KzAwOjAwClN1bW1hcnk6ICAgICBtb3JlIHB5dGhvbmlmaWNhdGlvbgpBZmZlY3RlZCAjOiAgMSBm
aWxlCgpkaWZmIC1yIGMzM2U2Mzg0MGY3YzE2ZjQyNTBmZWQ0OTBiNjU4YTNkNzkyM2Q3ZTAgLXIg
OTEwZDA5YWMxMzM4YjBkNWFhMTBjY2Q9CjdmNzJmM2Q2Y2UwY2UxMDkyIGNvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFr
bworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KQEAgLTkxLDE2ICs5MSwxNSBAQAogY21kX25ldHN0YXQgPTNEIHNobGV4LnNw
bGl0KCJuZXRzdGF0IC10dWxuIikKIHAxID0zRCBzdWJwcm9jZXNzLlBvcGVuKGNtZF9uZXRzdGF0
LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJUEUpCj0yMAotb2NjdXBpZWRfcG9ydHMgPTNEIGxpc3Qo
KQorb2NjdXBpZWRfcG9ydHMgPTNEIHNldCgpCiBmb3IgbGluZSBpbiBwMS5zdGRvdXQucmVhZCgp
LnNwbGl0KCdcbicpOgogICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgndGNwJykgb3IgbGluZS5zdGFy
dHN3aXRoKCd0Y3A2Jyk6CiAgICAgICAgIGNvbCA9M0QgbGluZS5zcGxpdCgpCiAgICAgICAgIGxv
Y2FsX2FkZHJlc3MgPTNEIGNvbFszXQogICAgICAgICBsb2NhbF9wb3J0ID0zRCBsb2NhbF9hZGRy
ZXNzLnNwbGl0KCc6JylbLTFdCi0gICAgICAgIG9jY3VwaWVkX3BvcnRzLmFwcGVuZCggaW50KGxv
Y2FsX3BvcnQpICkKKyAgICAgICAgb2NjdXBpZWRfcG9ydHMuYWRkKCBpbnQobG9jYWxfcG9ydCkg
KQo9MjAKICMgR2VuZXJhdGUgcmFuZG9tIGZyZWUgcG9ydCBudW1iZXIgZm9yIG91ciBkb2NrZXIg
Y29udGFpbmVyCi1wcmludCBvY2N1cGllZF9wb3J0cwogd2hpbGUgVHJ1ZToKICAgICBQT1JUID0z
RCByYW5kb20ucmFuZHJhbmdlKDEwMDAwLDE1MDAwKQogICAgIGlmIFBPUlQgbm90IGluIG9jY3Vw
aWVkX3BvcnRzOgpAQCAtMTE1LDEyICsxMTQsMTcgQEAKPTIwCiAjIyMjIyMjIyMjIyMjIyMgR2V0
dGluZyBvZiBwb3J0IGdhbGF4eSBpcyBiZWluZyBzZXJ2ZWQgb24uCiBwMSA9M0Qgc3VicHJvY2Vz
cy5Qb3BlbihzaGxleC5zcGxpdCgiIiJwcyBhIiIiKSwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBF
KQotcDIgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIiZ3JlcCAncHl0aG9uIC4v
c2NyaXB0cyciIiIpLCBzdGRpbj0KPTNEcDEuc3Rkb3V0LAotICAgICAgICAgICAgICAgICAgICAg
IHN0ZG91dD0zRHN1YnByb2Nlc3MuUElQRSkKLXAzID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4
LnNwbGl0KCIiImdyZXAgLXYgJ2dyZXAnIiIiKSwgc3RkaW49M0RwMi5zdGRvPQp1dCwgc3Rkb3V0
PTNEc3VicHJvY2Vzcy5QSVBFKQotcDQgPTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQo
IiIiYXdrICd7cHJpbnQgJDF9JyIiIiksIHN0ZGluPTNEcDMuc3Q9CmRvdXQsIHN0ZG91dD0zRHN1
YnByb2Nlc3MuUElQRSkKKworZ2FsYXh5X3Bhc3Rlcl9waWRzID0zRCBzZXQoKQorZm9yIGxpbmUg
aW4gcDEuc3Rkb3V0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICBsaW5lID0zRCBsaW5lLnN0cmlw
KCkKKyAgICBpZiBsaW5lLmZpbmQoJ3B5dGhvbiAuL3NjcmlwdCcpICE9M0QgLTE6CisgICAgICAg
IHBvcnQgPTNEIGxpbmUuc3BsaXQoKVswXQorICAgICAgICBpZiBwb3J0LmlzZGlnaXQoKToKKyAg
ICAgICAgICAgIGdhbGF4eV9wYXN0ZXJfcGlkcy5hZGQoIHBvcnQgKQorCiAjIE9ubHkgdGFrZSBm
aXJzdCBQSUQgaW4gY2FzZSB3ZSBoYXZlIG11bHRpcGxlLgotZ2FsYXh5X3Bhc3Rlcl9waWQgPTNE
IHA0LnN0ZG91dC5yZWFkKCkuc3BsaXQoJ1xuJylbMF0KK2dhbGF4eV9wYXN0ZXJfcGlkID0zRCBn
YWxheHlfcGFzdGVyX3BpZHMucG9wKCkKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgTm9uZQogaWYg
bGVuKGdhbGF4eV9wYXN0ZXJfcGlkKSA+IDA6CiAgICAgIyBGaW5kIGFsbCBmaWxlcyBvcGVuZWQg
YnkgdGhlIHByb2Nlc3Mgb2YgaW50ZXJlc3QKQEAgLTE0MSw2ICsxNDUsNyBAQAogICAgICdyZW1v
dGVfaG9zdCc6IHJlcXVlc3QucmVtb3RlX2FkZHIsCiAgICAgJ2dhbGF4eV9wYXN0ZXJfcG9ydCc6
IGdhbGF4eV9wYXN0ZXJfcG9ydCwKIH0KKwogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBf
ZGlyLCAnY29uZi55YW1sJyApLCAnd2InICkgYXMgaGFuZGxlOgogICAgIGhhbmRsZS53cml0ZSgg
eWFtbC5kdW1wKGNvbmZfZmlsZSwgZGVmYXVsdF9mbG93X3N0eWxlPTNERmFsc2UpICkKPTIwCgoK
aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzc0Mjg5
NWU4MWU2NS8KQ2hhbmdlc2V0OiAgIDc0Mjg5NWU4MWU2NQpVc2VyOiAgICAgICAgZXJhc2NoZTIK
RGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIGxzb2Yg
dHJhbnNsYXRlcyBwb3J0IG5hbWVzIGJ5IGRlZmF1bHQKVGhpcyBjb21taXQgZW5zdXJlcyB3ZSBh
bHdheXMgcmVjZWl2ZSBudW1lcmljYWwgcG9ydHMgZnJvbSBsc29mLCByYXRoZXIgdGhhPQpuIHNl
cnZpY2UgbmFtZXMgYXMKdHJhbnNsYXRlZCBieSAvZXRjL3NlcnZpY2VzCkFmZmVjdGVkICM6ICAx
IGZpbGUKCmRpZmYgLXIgOTEwZDA5YWMxMzM4YjBkNWFhMTBjY2Q3ZjcyZjNkNmNlMGNlMTA5MiAt
ciA3NDI4OTVlODFlNjVjMjFjNzkxNzVhNz0KZjE5MjZkODk5YWU1MWVlNzAgY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
YWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVz
L2lweXRob24ubWFrbwpAQCAtMTEyLDcgKzExMiw3IEBACj0yMAogdGVtcF9kaXIgPTNEIG9zLnBh
dGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkKPTIwCi0jIyMjIyMjIyMjIyMjIyMgR2V0
dGluZyBvZiBwb3J0IGdhbGF4eSBpcyBiZWluZyBzZXJ2ZWQgb24uCisjIEdldCBwb3J0IGdhbGF4
eSBpcyBiZWluZyBzZXJ2ZWQgb24sIGlmIGl0IGlzIGJlaW5nIHNlcnZlZCBvbiBhIHNpbmdsZSBw
bz0KcnQgdmlhIHBhc3RlIHByb2Nlc3MKIHAxID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNw
bGl0KCIiInBzIGEiIiIpLCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJUEUpCj0yMAogZ2FsYXh5X3Bh
c3Rlcl9waWRzID0zRCBzZXQoKQpAQCAtMTI4LDcgKzEyOCw3IEBACiBnYWxheHlfcGFzdGVyX3Bv
cnQgPTNEIE5vbmUKIGlmIGxlbihnYWxheHlfcGFzdGVyX3BpZCkgPiAwOgogICAgICMgRmluZCBh
bGwgZmlsZXMgb3BlbmVkIGJ5IHRoZSBwcm9jZXNzIG9mIGludGVyZXN0Ci0gICAgcDEgPTNEIHN1
YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIibHNvZiAtcCAlZCIiIiAlIChpbnQoZ2FsYXh5
X3Bhcz0KdGVyX3BpZCksKSApLAorICAgIHAxID0zRCBzdWJwcm9jZXNzLlBvcGVuKHNobGV4LnNw
bGl0KCIiImxzb2YgLVAgLXAgJWQiIiIgJSAoaW50KGdhbGF4eV89CnBhc3Rlcl9waWQpLCkgKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPTNEc3VicHJvY2Vzcy5TVERPVVQsIHN0
ZG91dD0zRHN1YnByb2Nlc3MuPQpQSVBFKQogICAgICMgR3JlcCBvdXQgdGhlIFRDUCBjb25uZWN0
aW9ucyBvcGVuZWQgYnkgdGhpcyBwcm9jZXNzCiAgICAgcDIgPTNEIHN1YnByb2Nlc3MuUG9wZW4o
c2hsZXguc3BsaXQoIiIiZ3JlcCAtbyAnVENQIFteOl0qOlswLTldKiciIiIpLD0KIHN0ZGluPTNE
cDEuc3Rkb3V0LAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy8xNzZkNDBhNDQzNDQvCkNoYW5nZXNldDogICAxNzZkNDBhNDQzNDQKVXNlcjogICAg
ICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1h
cnk6ICAgICBTd2l0Y2ggb3ZlciB0byByZXF1aXJpbmcgSVB5TkIgZGF0YXR5cGUKQWZmZWN0ZWQg
IzogIDEgZmlsZQoKZGlmZiAtciA3NDI4OTVlODFlNjVjMjFjNzkxNzVhN2YxOTI2ZDg5OWFlNTFl
ZTcwIC1yIDE3NmQ0MGE0NDM0NDRmYWJkMWViNTNiPQoxNjg5ZTRlYzI5MGEwYzdlMCBjb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwot
LS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xNTMsNyArMTUzLDcgQEAKICMgRm9yIG5vdyB3ZSBhc3N1
bWUgYWxsICJ0ZXh0IiBkYXRhdHlwZXMgYXJlIGlweW5icy4KICMgPGRhdGF0eXBlIGV4dGVuc2lv
bj0zRCJpcHluYiIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmRhdGE6VGV4dCIgbWltZXR5PQpw
ZT0zRCJhcHBsaWNhdGlvbi9qc29uIiBzdWJjbGFzcz0zRCJUcnVlIiBkaXNwbGF5X2luX3VwbG9h
ZD0zRCJUcnVlIi8+CiBlbXB0eV9uYl9wYXRoID0zRCBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICdp
cHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpCi1pZiBoZGEuZGF0YXR5cGUuX19jbGFzc19f
Ll9fbmFtZV9fICE9M0QgIlRleHQiOgoraWYgaGRhLmRhdGF0eXBlLl9fY2xhc3NfXy5fX25hbWVf
XyAhPTNEICJJcHluYiI6CiAgICAgd2l0aCBvcGVuKCBlbXB0eV9uYl9wYXRoLCAndysnICkgYXMg
aGFuZGxlOgogICAgICAgICBoYW5kbGUud3JpdGUoIGVtcHR5X25iICkKIGVsc2U6CgoKaHR0cHM6
Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzMzZjg0MmM2ZGU5
NS8KQ2hhbmdlc2V0OiAgIDMzZjg0MmM2ZGU5NQpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTog
ICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgID0zRD9VVEYtOD9x
P1JlbW92ZWQ9M0QyMHNhdmU9M0QyMGZ1bmN0aW9uPTNEMjBhbmQ9M0QyMGFkZGVkPTNEPQoyMGRv
Y3M9M0QyMHNpbmNlPz0zRCA9M0Q/VVRGLTg/cT89M0QyMEJqPTNEQzM9M0RCNnJuPTNEMjBpbXBs
ZW1lbnRlZD0zRDIwc2E9CnZlPTNEMjBidXR0b24/PTNECkFmZmVjdGVkICM6ICAxIGZpbGUKCmRp
ZmYgLXIgMTc2ZDQwYTQ0MzQ0NGZhYmQxZWI1M2IxNjg5ZTRlYzI5MGEwYzdlMCAtciAzM2Y4NDJj
NmRlOTVkMGIwN2Q1NDEwNj0KZTM3ZGNlZmViNDY5YzVjMjkgY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBi
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24u
bWFrbwpAQCAtMzcsNDYgKzM3LDE5IEBACiAgICAgICJtZXRhZGF0YSI6IHt9LAogICAgICAic291
cmNlIjogWwogICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhlIGRhdGFzZXQg
bnVtYmVyLiBGb3IgZXhhbXBsZSwgYGhhbmQ9CmxlID0zRCBnZXQoNDIpYC5cXG4iLAotICAgICAg
IlRvIHNhdmUgZGF0YSwgd3JpdGUgeW91ciBkYXRhIHRvIGEgZmlsZSwgYW5kIHRoZW4gY2FsbCBg
cHV0KCdmaWxlbmE9Cm1lLnR4dCcpYC4gVGhlIGRhdGFzZXQgd2lsbCB0aGVuIGJlIGF2YWlsYWJs
ZSBpbiB5b3VyIGdhbGF4eSBoaXN0b3J5LiIKKyAgICAgICJUbyBzYXZlIGRhdGEsIHdyaXRlIHlv
dXIgZGF0YSB0byBhIGZpbGUsIGFuZCB0aGVuIGNhbGwgYHB1dCgnZmlsZW5hPQptZS50eHQnKWAu
IFRoZSBkYXRhc2V0IHdpbGwgdGhlbiBiZSBhdmFpbGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9y
eS5cXG4iLAorICAgICAgIlRvIHNhdmUgeW91ciBub3RlYm9vayB0byBnYWxheHksIGNsaWNrIHRo
ZSAnRG93bmxvYWQnIGJ1dHRvbiBhdCB0aGU9CiB0b3AgcmlnaHQgb2YgdGhlIElQeXRob24gaW50
ZXJmYWNlIgogICAgICBdCiAgICAgfSwKICAgICB7CiAgICAgICJjZWxsX3R5cGUiOiAiY29kZSIs
CiAgICAgICJjb2xsYXBzZWQiOiBmYWxzZSwKICAgICAgImlucHV0IjogWwotICAgICAgIiMgVGhp
cyBidXR0b24ganVzdCBjYWxscyBwdXQoJ2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5iJyki
Ci0gICAgIF0sCi0gICAgICJsYW5ndWFnZSI6ICJweXRob24iLAotICAgICAibWV0YWRhdGEiOiB7
fSwKLSAgICAgIm91dHB1dHMiOiBbCi0gICAgICB7Ci0gICAgICAgImh0bWwiOiBbCi0gICAgICAg
ICI8YnV0dG9uIG9uY2xpY2s9M0RcXFwic2F2ZSgpXFxcIj5TYXZlIE5vdGVib29rIHRvIEdhbGF4
eTwvYnV0dG9uPj0KXFxuIiwKLSAgICAgICAgIjxzY3JpcHQgdHlwZT0zRFxcXCJ0ZXh0L0phdmFz
Y3JpcHRcXFwiPlxcbiIsCi0gICAgICAgICIgICAgZnVuY3Rpb24gc2F2ZSgpe1xcbiIsCi0gICAg
ICAgICIgICAgICAgIGNvbnNvbGUubG9nKElQeXRob24ubm90ZWJvb2sua2VybmVsLmV4ZWN1dGUo
XFxcInB1dCgnaXB5dD0KaG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpXFxcIikpO1xcbiIsCi0g
ICAgICAgICIgICAgfVxcbiIsCi0gICAgICAgICI8L3NjcmlwdD5cXG4iCi0gICAgICAgXSwKLSAg
ICAgICAibWV0YWRhdGEiOiB7fSwKLSAgICAgICAib3V0cHV0X3R5cGUiOiAicHlvdXQiLAotICAg
ICAgICJwcm9tcHRfbnVtYmVyIjogMSwKLSAgICAgICAidGV4dCI6IFsKLSAgICAgICAgIjxJUHl0
aG9uLmNvcmUuZGlzcGxheS5IVE1MIGF0IDB4M2IzMzY1MD4iCi0gICAgICAgXQotICAgICAgfQot
ICAgICBdLAotICAgICAicHJvbXB0X251bWJlciI6IDEKLSAgICB9LAotICAgIHsKLSAgICAgImNl
bGxfdHlwZSI6ICJjb2RlIiwKLSAgICAgImNvbGxhcHNlZCI6IGZhbHNlLAotICAgICAiaW5wdXQi
OiBbCiAgICAgIF0sCiAgICAgICJsYW5ndWFnZSI6ICJweXRob24iLAogICAgICAibWV0YWRhdGEi
OiB7fSwKICAgICAgIm91dHB1dHMiOiBbXSwKLSAgICAgInByb21wdF9udW1iZXIiOiAyCisgICAg
ICJwcm9tcHRfbnVtYmVyIjogMQogICAgIH0KICAgIF0sCiAgICAibWV0YWRhdGEiOiB7fQoKCmh0
dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9kMjRkNjc3
NWM4NzgvCkNoYW5nZXNldDogICBkMjRkNjc3NWM4NzgKVXNlcjogICAgICAgIGVyYXNjaGUyCkRh
dGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBBdHRlbXB0
ZWQgYmV0dGVyIGRlc2NyaXB0aW9uCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgMzNmODQy
YzZkZTk1ZDBiMDdkNTQxMDZlMzdkY2VmZWI0NjljNWMyOSAtciBkMjRkNjc3NWM4NzhhZDhlNTJh
NmRiMD0KZGZiYTNhYjEwYTNjNTg0M2MgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMzgs
NyArMzgsNyBAQAogICAgICAic291cmNlIjogWwogICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIg
ZGF0YSB2aWEgdGhlIGRhdGFzZXQgbnVtYmVyLiBGb3IgZXhhbXBsZSwgYGhhbmQ9CmxlID0zRCBn
ZXQoNDIpYC5cXG4iLAogICAgICAgIlRvIHNhdmUgZGF0YSwgd3JpdGUgeW91ciBkYXRhIHRvIGEg
ZmlsZSwgYW5kIHRoZW4gY2FsbCBgcHV0KCdmaWxlbmE9Cm1lLnR4dCcpYC4gVGhlIGRhdGFzZXQg
d2lsbCB0aGVuIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGF4eSBoaXN0b3J5LlxcbiIsCi0gICAg
ICAiVG8gc2F2ZSB5b3VyIG5vdGVib29rIHRvIGdhbGF4eSwgY2xpY2sgdGhlICdEb3dubG9hZCcg
YnV0dG9uIGF0IHRoZT0KIHRvcCByaWdodCBvZiB0aGUgSVB5dGhvbiBpbnRlcmZhY2UiCisgICAg
ICAiVG8gc2F2ZSB5b3VyIG5vdGVib29rIHRvIGdhbGF4eSwgY2xpY2sgdGhlIGJ1dHRvbiBhdCB0
aGUgdG9wIHJpZ2h0ID0Kb2YgdGhlIElQeXRob24gaW50ZXJmYWNlLCBuZXh0IHRvICdDZWxsIFRv
b2xiYXInIgogICAgICBdCiAgICAgfSwKICAgICB7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh
bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2IyNjA4MDNiM2UxMi8KQ2hhbmdlc2V0OiAgIGIy
NjA4MDNiM2UxMgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTgg
MjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIFBhc3NlZCBwb3J0IGFuZCBzZXQgVVJMIHBhdGgg
Zm9yIGlweXRob24KVG8gYWxsb3cgZm9yIHNlcnZlciBhZG1pbmlzdHJhdG9ycyB0byBlYXNpbHkg
c2VjdXJlIElQeU5Ccywgd2UgaGF2ZSB0byBzdG9wPQogc2VydmluZyBvdmVyIHBvcnRzLCBhbmQK
c3RhcnQgc2VydmluZyB1bmRlciBhIHN1Yi1wYXRoLiBUaGlzIGNoYW5nZSB3aWxsIHJlcXVpcmUg
dGhlIGludHJvZHVjdGlvbiBvPQpmIGFwYWNoZSBjb25maWd1cmF0aW9uIGFzCmEgaGFyZCByZXF1
aXJlbWVudCBmb3IgcmV3cml0aW5nIFVSTHMgcHJvcGVybHkgdG8gdGhlIGJhY2tlbmQuCgpGb3Ig
YSBnaXZlbiBQb3J0ICRQLCBJUHlOQnMgYXJlIHN0YXJ0ZWQsIGxpc3RlbmluZyBvbiAxMjcuMC4w
LjE6JFAvaXB5dGhvbi89CiRQLy4gVGhlc2UgYXJlIGFjY2Vzc2VkCnRocm91Z2ggdGhhdCB1cmwg
d2l0aGluIGdhbGF4eS4gRm9yIHRoZSBhcGFjaGUgc3R5bGUgY29uZmlndXJhdGlvbiwgd2UgcmVt
bz0KdmUgdGhlIGZpcnN0ICRQIGFuZApzaW1wbHkgYWNjZXNzIG5vdGVib29rcyBhdCAiMTI3LjAu
MC4xL2lweXRob24vJFAvIiB3aGljaCBhbGxvd3MgdGhlIGFkbWluaXM9CnRyYXRvciB0byBhcHBs
eSBTU0wgdG8KdGhlIC9pcHl0aG9uLyBwYXRoLCB0aGVyZWJ5IHNlY3VyaW5nIHRoZSBub3RlYm9v
a3MuCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZDI0ZDY3NzVjODc4YWQ4ZTUyYTZkYjBk
ZmJhM2FiMTBhM2M1ODQzYyAtciBiMjYwODAzYjNlMTI5MTg5NmMxMWE3Nz0KOGNjN2U3N2MzNDU3
OGViYzYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTE3LDYgKzExNyw3IEBACiAgICAg
J2FwaV9rZXknOiB0cmFucy51c2VyLmFwaV9rZXlzWzBdLmtleSwKICAgICAncmVtb3RlX2hvc3Qn
OiByZXF1ZXN0LnJlbW90ZV9hZGRyLAogICAgICdnYWxheHlfcGFzdGVyX3BvcnQnOiBnYWxheHlf
cGFzdGVyX3BvcnQsCisgICAgJ2RvY2tlcl9wb3J0JzogUE9SVCwKIH0KPTIwCiB3aXRoIG9wZW4o
IG9zLnBhdGguam9pbiggdGVtcF9kaXIsICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYW5kbGU6
CkBAIC0xNDQsOCArMTQ1LDggQEAKPTIwCj0yMAogPGJvZHk+Ci0gICAgPG9iamVjdCBkYXRhPTNE
Imh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25vdGVibz0K
b2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj4KLSAgICAgICAgPGVtYmVk
IHNyYz0zRCJodHRwOi8vJHtIT1NUfToke1BPUlR9L25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9u
b3RlPQpib29rLmlweW5iIiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI+CisgICAgPG9i
amVjdCBkYXRhPTNEImh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vaXB5dGhvbi8ke1BPUlR9L25vdGVi
b29rcy9pcHl0aD0Kb25fZ2FsYXh5X25vdGVib29rLmlweW5iIiBoZWlnaHQ9M0QiMTAwJSIgd2lk
dGg9M0QiMTAwJSI+CisgICAgICAgIDxlbWJlZCBzcmM9M0QiaHR0cDovLyR7SE9TVH06JHtQT1JU
fS9pcHl0aG9uLyR7UE9SVH0vbm90ZWJvb2tzL2lweT0KdGhvbl9nYWxheHlfbm90ZWJvb2suaXB5
bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj48L2VtYmVkPjwvb2JqZWN0PQo+PC9i
b2R5PgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0
cy8zY2JmMTg0Y2NlZGMvCkNoYW5nZXNldDogICAzY2JmMTg0Y2NlZGMKVXNlcjogICAgICAgIEJq
b2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1h
cnk6ICAgICBjaGFuZ2UgdGhlIHBvcnQgZGV0ZWN0aW9uIHRvIHBhcnNlIHRoZSB1bml2ZXJzZV93
c2dpLmluaSBmaWxlCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgYjI2MDgwM2IzZTEyOTE4
OTZjMTFhNzc4Y2M3ZTc3YzM0NTc4ZWJjNiAtciAzY2JmMTg0Y2NlZGM1OTM5NDAzYjQyMz0KMjg4
M2UyMDBkMjc5MDBiNzYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMSwxNSArMSwyNCBA
QAogPCUKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB5YW1sCitp
bXBvcnQgc2hsZXgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzaHV0aWwKIGltcG9ydCB0ZW1wZmls
ZQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRpbWUKIGltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQg
eWFtbAotaW1wb3J0IHJhbmRvbQoraW1wb3J0IENvbmZpZ1BhcnNlcgo9MjAKK2dhbGF4eV9yb290
X2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKHRyYW5zLmFwcC5jb25maWcucm9vdCkKIGhpc3Rvcnlf
aWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCiBkYXRh
c2V0X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIGhkYS5pZCApCisKK2NvbmZpZyA9
M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydwb3J0JzogJzgwODAnfSkKK2NvbmZp
Zy5yZWFkKCBvcy5wYXRoLmpvaW4oIGdhbGF4eV9yb290X2RpciwgJ3VuaXZlcnNlX3dzZ2kuaW5p
JyApICkKKworZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBjb25maWcuZ2V0aW50KCdzZXJ2ZXI6bWFp
bicsICdwb3J0JykKKwogIyBFbnN1cmUgZ2VuZXJhdGlvbiBvZiBub3RlYm9vayBpZCBpcyBkZXRl
cm1pbmlzdGljIGZvciB0aGUgZGF0YXNldC4gUmVwbGE9CmNlIHdpdGggaGlzdG9yeSBpZAogIyB3
aGVuZXZlciB3ZSBmaWd1cmUgb3V0IGhvdyB0byBhY2Nlc3MgdGhhdC4KIHJhbmRvbS5zZWVkKCBo
aXN0b3J5X2lkICkKQEAgLTYwLDcgKzY5LDYgQEAKPTIwCj0yMAogIyBGaW5kIGFsbCBwb3J0cyB0
aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCi1pbXBvcnQgc2hsZXgKIGNtZF9uZXRzdGF0ID0zRCBz
aGxleC5zcGxpdCgibmV0c3RhdCAtdHVsbiIpCiBwMSA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihjbWRf
bmV0c3RhdCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQo9MjAKQEAgLTg1LDMyICs5Myw2IEBA
Cj0yMAogdGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkK
PTIwCi0jIEdldCBwb3J0IGdhbGF4eSBpcyBiZWluZyBzZXJ2ZWQgb24sIGlmIGl0IGlzIGJlaW5n
IHNlcnZlZCBvbiBhIHNpbmdsZSBwbz0KcnQgdmlhIHBhc3RlIHByb2Nlc3MKLXAxID0zRCBzdWJw
cm9jZXNzLlBvcGVuKHNobGV4LnNwbGl0KCIiInBzIGEiIiIpLCBzdGRvdXQ9M0RzdWJwcm9jZXNz
LlBJUEUpCi0KLWdhbGF4eV9wYXN0ZXJfcGlkcyA9M0Qgc2V0KCkKLWZvciBsaW5lIGluIHAxLnN0
ZG91dC5yZWFkKCkuc3BsaXQoJ1xuJyk6Ci0gICAgbGluZSA9M0QgbGluZS5zdHJpcCgpCi0gICAg
aWYgbGluZS5maW5kKCdweXRob24gLi9zY3JpcHQnKSAhPTNEIC0xOgotICAgICAgICBwb3J0ID0z
RCBsaW5lLnNwbGl0KClbMF0KLSAgICAgICAgaWYgcG9ydC5pc2RpZ2l0KCk6Ci0gICAgICAgICAg
ICBnYWxheHlfcGFzdGVyX3BpZHMuYWRkKCBwb3J0ICkKLQotIyBPbmx5IHRha2UgZmlyc3QgUElE
IGluIGNhc2Ugd2UgaGF2ZSBtdWx0aXBsZS4KLWdhbGF4eV9wYXN0ZXJfcGlkID0zRCBnYWxheHlf
cGFzdGVyX3BpZHMucG9wKCkKLWdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgTm9uZQotaWYgbGVuKGdh
bGF4eV9wYXN0ZXJfcGlkKSA+IDA6Ci0gICAgIyBGaW5kIGFsbCBmaWxlcyBvcGVuZWQgYnkgdGhl
IHByb2Nlc3Mgb2YgaW50ZXJlc3QKLSAgICBwMSA9M0Qgc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5z
cGxpdCgiIiJsc29mIC1QIC1wICVkIiIiICUgKGludChnYWxheHlfPQpwYXN0ZXJfcGlkKSwpICks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj0zRHN1YnByb2Nlc3MuU1RET1VULCBz
dGRvdXQ9M0RzdWJwcm9jZXNzLj0KUElQRSkKLSAgICAjIEdyZXAgb3V0IHRoZSBUQ1AgY29ubmVj
dGlvbnMgb3BlbmVkIGJ5IHRoaXMgcHJvY2VzcwotICAgIHAyID0zRCBzdWJwcm9jZXNzLlBvcGVu
KHNobGV4LnNwbGl0KCIiImdyZXAgLW8gJ1RDUCBbXjpdKjpbMC05XSonIiIiKSw9CiBzdGRpbj0z
RHAxLnN0ZG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PTNEc3VicHJvY2Vz
cy5QSVBFKQotICAgICMgUmVtb3ZlICdUQ1AgKjonIGZyb20gJ1RDUCAqOjQwMDAnCi0gICAgcDMg
PTNEIHN1YnByb2Nlc3MuUG9wZW4oc2hsZXguc3BsaXQoIiIiY3V0IC1kOiAtZjIiIiIpLCBzdGRp
bj0zRHAyLnN0ZD0Kb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9M0RzdWJw
cm9jZXNzLlBJUEUpCi0gICAgZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBwMy5zdGRvdXQucmVhZCgp
LnN0cmlwKCkKLQogY29uZl9maWxlID0zRCB7CiAgICAgJ2hpc3RvcnlfaWQnOiBoaXN0b3J5X2lk
LAogICAgICdnYWxheHlfdXJsJzogcmVxdWVzdC5hcHBsaWNhdGlvbl91cmwsCgoKaHR0cHM6Ly9i
aXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzM3YTY1M2VhNjc2OC8K
Q2hhbmdlc2V0OiAgIDM3YTY1M2VhNjc2OApVc2VyOiAgICAgICAgQmpvZXJuR3J1ZW5pbmcKRGF0
ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3VtbWFyeTogICAgIHJlbW92ZSB0
cmFpbGluZyBzbGFzaCwgYmV0dGVyIHNhdmUgdGhhbiBzb3JyeQpBZmZlY3RlZCAjOiAgMSBmaWxl
CgpkaWZmIC1yIDNjYmYxODRjY2VkYzU5Mzk0MDNiNDIzMjg4M2UyMDBkMjc5MDBiNzYgLXIgMzdh
NjUzZWE2NzY4OTQyNzEzMjAxYjA9CmFmODRkNjViZWQ4MjcwYWU1IGNvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwor
KysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KQEAgLTk1LDcgKzk1LDcgQEAKPTIwCiBjb25mX2ZpbGUgPTNEIHsKICAgICAnaGlz
dG9yeV9pZCc6IGhpc3RvcnlfaWQsCi0gICAgJ2dhbGF4eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0
aW9uX3VybCwKKyAgICAnZ2FsYXh5X3VybCc6IHJlcXVlc3QuYXBwbGljYXRpb25fdXJsLnJzdHJp
cCgnLycpLAogICAgICdhcGlfa2V5JzogdHJhbnMudXNlci5hcGlfa2V5c1swXS5rZXksCiAgICAg
J3JlbW90ZV9ob3N0JzogcmVxdWVzdC5yZW1vdGVfYWRkciwKICAgICAnZ2FsYXh5X3Bhc3Rlcl9w
b3J0JzogZ2FsYXh5X3Bhc3Rlcl9wb3J0LAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy8xMGYzMDVjMmVlMmIvCkNoYW5nZXNldDogICAxMGYzMDVj
MmVlMmIKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4
OjAzKzAwOjAwClN1bW1hcnk6ICAgICBVcGRhdGVkIHRleHQgb24gb24gdGVtcGxhdGUgdG8gcmVm
ZXIgdG8gYnV0dG9uIGNvbG91cgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDM3YTY1M2Vh
Njc2ODk0MjcxMzIwMWIwYWY4NGQ2NWJlZDgyNzBhZTUgLXIgMTBmMzA1YzJlZTJiYmM0ZTczNzE3
YWM9CmRlNTdmNzM1YTc4YzZhOWMzIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTQ3LDcg
KzQ3LDcgQEAKICAgICAgInNvdXJjZSI6IFsKICAgICAgICJZb3UgY2FuIGFjY2VzcyB5b3VyIGRh
dGEgdmlhIHRoZSBkYXRhc2V0IG51bWJlci4gRm9yIGV4YW1wbGUsIGBoYW5kPQpsZSA9M0QgZ2V0
KDQyKWAuXFxuIiwKICAgICAgICJUbyBzYXZlIGRhdGEsIHdyaXRlIHlvdXIgZGF0YSB0byBhIGZp
bGUsIGFuZCB0aGVuIGNhbGwgYHB1dCgnZmlsZW5hPQptZS50eHQnKWAuIFRoZSBkYXRhc2V0IHdp
bGwgdGhlbiBiZSBhdmFpbGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9yeS5cXG4iLAotICAgICAg
IlRvIHNhdmUgeW91ciBub3RlYm9vayB0byBnYWxheHksIGNsaWNrIHRoZSBidXR0b24gYXQgdGhl
IHRvcCByaWdodCA9Cm9mIHRoZSBJUHl0aG9uIGludGVyZmFjZSwgbmV4dCB0byAnQ2VsbCBUb29s
YmFyJyIKKyAgICAgICJUbyBzYXZlIHlvdXIgbm90ZWJvb2sgdG8gZ2FsYXh5LCBjbGljayB0aGUg
bGFyZ2UgZ3JlZW4gYnV0dG9uIGF0IHRoPQplIHRvcCByaWdodCBvZiB0aGUgSVB5dGhvbiBpbnRl
cmZhY2UiCiAgICAgIF0KICAgICB9LAogICAgIHsKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2Fs
YXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNWJlODZmNmU3MWZmLwpDaGFuZ2VzZXQ6ICAgNWJl
ODZmNmU3MWZmClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAy
MjozODowMyswMDowMApTdW1tYXJ5OiAgICAgQWRkZWQgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9u
CkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1yIDEwZjMwNWMyZWUyYmJjNGU3MzcxN2FjZGU1
N2Y3MzVhNzhjNmE5YzMgLXIgNWJlODZmNmU3MWZmZDlkYzdjZWVjMDE9Cjc5NmU3MTdkMDg0NzZl
NTU5IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5TVEFMTC5tZAotLS0g
L2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5T
VEFMTC5tZApAQCAtMCwwICsxLDU3IEBACisjIEluc3RhbGxhdGlvbgorCitXZSd2ZSBkZXZlbG9w
ZWQgdGhlIHRlbXBsYXRlcyBhbmQgY29udGFpbmVycyBzdWNoIHRoYXQgdGhleSBjYW4gYmUgcnVu
IHRocj0Kb3VnaCBhbiBBcGFjaGUgcHJveHkgdXNpbmcKK1NTTC4gVGhpcyByZXF1aXJlcyBzb21l
IG5vbi10cml2aWFsIGFwYWNoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQuCisKKyMjIFJlcXVp
cmVtZW50cworCisgKiBgbW9kX3Byb3h5YAorICogYG1vZF9wcm94eV9odHRwYAorICogYG1vZF9w
cm94eV93c3R1bm5lbGAKKyAqIGBtb2RfaGVhZGVyc2AKKworSVB5dGhvbiBtYWtlcyB1c2Ugb2Yg
V2ViU29ja2V0cyB3aGljaCB3ZSBuZWVkIHRvIHByb3h5IGluIGFwYWNoZS4gU3VwcG9ydCA9Cndh
cyBhZGRlZCB0byBgYXBhY2hlMi40YAorZm9yIHRoaXMsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBg
VWJ1bnR1IDE0LjA0YC4gVGhlcmUgYXJlIHR1dG9yaWFscyBvbiB0aGU9CiBpbnRlcm5ldCBmb3Ig
YmFja3BvcnRpbmcKK3RoZSB3ZWJzb2NrZXRzIG1vZHVsZSwgYW5kIGluc3RhbGxpbmcgYGFwYWNo
ZTIuNGAgUFBBcy4KKworIyMgQ29uZmlndXJhdGlvbgorCitIZXJlIGlzIHRoZSByZWxldmFudCBj
b25maWd1cmF0aW9uCisKK2BgYGFwYWNoZQorUmV3cml0ZUVuZ2luZSBPbgorU2V0RW52SWYgUmVx
dWVzdF9VUkkgIi9pcHl0aG9uLyhbMC05XSspL2FwaS9rZXJuZWxzLyIgRE9DS0VSX1BPUlQ9M0Qk
MQorUmV3cml0ZVJ1bGUgICAgIF4vaXB5dGhvbi8oWzAtOV0rKS9hcGkva2VybmVscy8oLiopJCAg
IHdzOi8vMTI3LjAuMC4xOiQxL2k9CnB5dGhvbi8kMS9hcGkva2VybmVscy8kMiBbUCxMXQorUmV3
cml0ZVJ1bGUgICAgIF4vaXB5dGhvbi8oWzAtOV0rKS8oLiopJCAgICAgICAgICAgICBodHRwOi8v
bG9jYWxob3N0OiQxL2k9CnB5dGhvbi8kMS8kMiBbUCxMXQorPExvY2F0aW9uIC9pcHl0aG9uLz4K
KyAgICAgICAgIyBzcG9vZiBoZWFkZXJzIHRvIG1ha2Ugbm90ZXBhZCBhY2NlcHQgdGhlIHJlcXVl
c3QgYXMgY29taW5nIGZyb20gPQp0aGUgc2FtZSBvcmlnaW4KKyAgICAgICAgSGVhZGVyIHNldCBP
cmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6JXtET0NLRVJfUE9SVH1lIgorICAgICAgICBSZXF1ZXN0
SGVhZGVyIHNldCBPcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6JXtET0NLRVJfUE9SVH1lIgorPC9M
b2NhdGlvbj4KKzwvVmlydHVhbEhvc3Q+CitgYGAKKworV2UnbGwgc3RlcCB0aHJvdWdoIGxpbmUt
YnktbGluZSBmb3IgY2xhcml0eS4KKworYGBgYXBhY2hlCitTZXRFbnZJZiBSZXF1ZXN0X1VSSSAi
L2lweXRob24vKFswLTldKykvYXBpL2tlcm5lbHMvIiBET0NLRVJfUE9SVD0zRCQxCitgYGAKKwor
SGVyZSB3ZSBjaGVjayB0aGUgYFJlcXVlc3RfVVJJYCBmb3IgdGhlIHByZXNlbmNlIGZvciB0aGUg
a2VybmVsIHJlcXVlc3QuIFc9CmUgZG8gdGhpcyBvbmx5IGZvciB0aGUgYGFwaS9rZXJuZWxgIHN1
YmNhbGwsIGFzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gd2hpYz0KaCBuZWVkcyBhY2Nlc3MgdG8g
YERPQ0tFUl9QT1JUYCBpcyBrZXJuZWwgY2FsbHMuCisKK2BgYGFwYWNoZQorUmV3cml0ZVJ1bGUg
Xi9pcHl0aG9uLyhbMC05XSspL2FwaS9rZXJuZWxzLyguKikkICAgd3M6Ly8xMjcuMC4wLjE6JDEv
aXB5dGg9Cm9uLyQxL2FwaS9rZXJuZWxzLyQyIFtQLExdCitSZXdyaXRlUnVsZSBeL2lweXRob24v
KFswLTldKykvKC4qKSQgICAgICAgICAgICAgaHR0cDovL2xvY2FsaG9zdDokMS9pcHl0aD0Kb24v
JDEvJDIgW1AsTF0KK2BgYAorCitUaGVzZSB0d28gcnVsZXMgcHJveHkgYF4vaXB5dGhvbi9gIHJl
cXVlc3RzIHRvIHRoZWlyIGNvcnJlY3QgbG9jYXRpb25zLiBBUD0KSSByZXF1ZXN0cyBmb3IgdGhl
IElQeXRob24ga2VybmVsIGFyZSByb3V0ZWQgdGhyb3VnaCB0aGUgd3N0dW5uZWwgKFdlYlNvY2tl
PQp0KSBwcm94eSwgd2hpbGUgYWxsIG90aGVyIHJlcXVlc3RzIGdvIHRocm91Z2ggSFRUUC4gVGhl
cmUgYXJlIG1vZGlmaWVkIGxpc3Q9CmVkIGFmdGVyIGJvdGgsIGBbUCxMXWAuIGBQYCBzcGVjaWZp
ZXMgYSBwcm94eSwgYW5kIGBMYCBzcGVjaWZpZXMgdGhpcyBpcyB0aD0KZSBsYXN0IHJ1bGUsIHRv
IHByZXZlbnQgdGhlIHNlY29uZCByZXdyaXRlIHN0YXRlbWVudCBmcm9tIG1hdGNoaW5nIGFsbCBr
ZXJuPQplbCBjYWxscy4KKworYGBgYXBhY2hlCis8TG9jYXRpb24gL2lweXRob24vPgorICAgICAg
ICAjIHNwb29mIGhlYWRlcnMgdG8gbWFrZSBub3RlcGFkIGFjY2VwdCB0aGUgcmVxdWVzdCBhcyBj
b21pbmcgZnJvbSA9CnRoZSBzYW1lIG9yaWdpbgorICAgICAgICBIZWFkZXIgc2V0IE9yaWdpbiAi
aHR0cDovLzEyNy4wLjAuMTole0RPQ0tFUl9QT1JUfWUiCisgICAgICAgIFJlcXVlc3RIZWFkZXIg
c2V0IE9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTole0RPQ0tFUl9QT1JUfWUiCis8L0xvY2F0aW9u
PgorYGBgCisKK1RoZSBXZWJTb2NrZXQgc2VydmVyIGluIElQeXRob24gcGF5cyBhdHRlbnRpb24g
dG8gQ3Jvc3MtT3JpZ2luLVJlcXVlc3RzIGFuPQpkIHdpbGwgdGhyb3VnaCB1cCBhIDUwMCBJbnRl
cm5hbCBTZXJ2ZXIgRXJyb3IgKGluIGRvY2tlcikgaWYgeW91IGF0dGVtcHQgdG89CiBzZW5kIGl0
IGJhZCBkYXRhLiBUaHVzLCB3ZSB1c2UgdGhlIGV4dHJhY3RlZCBwb3J0IG51bWJlciBmcm9tIHRo
ZSBlYXJsaWVyID0KYFNldEVudklmYCByZXF1ZXN0IGluIG9yZGVyIHRvIG9idGFpbiB0aGUgcG9y
dCB0aGF0IElQeXRob24gd2lsbCBhY3R1YWxseSByPQplY2VpdmUgY29ubmVjdGlvbnMgZnJvbS4K
CmRpZmYgLXIgMTBmMzA1YzJlZTJiYmM0ZTczNzE3YWNkZTU3ZjczNWE3OGM2YTljMyAtciA1YmU4
NmY2ZTcxZmZkOWRjN2NlZWMwMT0KNzk2ZTcxN2QwODQ3NmU1NTkgY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9SRUFETUUubWQKQEAgLTEwLDYgKzEwLDcgQEAKIEZvciBzZWN1cml0eSBy
ZWFzb25zIHlvdSBuZWVkIHRvIGhhdmUgZG9ja2VyIGluc3RhbGxlZC4KIEZvciBhIGRldGFpbGVk
IGluc3RydWN0aW9uIGhvdyB0byBpbnN0YWxsIGRvY2tlciwgcGxlYXNlIGxvb2sgYXQgdGhlIGRv
Y2tlPQpyIHdlYnNpdGUuCj0yMAorCiBJbnN0YWxsYXRpb24KID0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRAo9MjAKQEAgLTM0LDYgKzM1LDE1IEBACiAgKiBzZWxmLWNsb3Npbmcg
YW5kIGNsZWFuaW5nIElQeXRob24gZG9ja2VyIGNvbnRhaW5lcgo9MjAKPTIwCitTZWN1cml0eQor
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisKKyAqIENvbnRhaW5lcnMgY2FuIGJlIHNlY3VyZWQg
dmlhIEFwYWNoZStTU0wuIFBsZWFzZSBzZWUgdGhlIFtzZXR1cF0oSU5TVEFMPQpMLm1kKSBkb2N1
bWVudCBmb3IgbW9yZQorICAgaW5mb3JtYXRpb24uCisgKiBDb250YWluZXJzIHdpbGwgc29vbiBo
YXZlIGBpcHRhYmxlc2AgYmFzZWQgc2VjdXJpdHkgdG8gcHJvdmlkZSBhIG1pbmltdT0KbSBhdHRl
bXB0IGF0IHByZXZlbnRpbmcKKyAgIHVzZXJzIGZyb20gYWNjZXNzaW5nIG9uZSBhbm90aGVyJ3Mg
bm90ZWJvb2tzLgorCisKIEF1dGhvcnMKID0zRD0zRD0zRD0zRD0zRD0zRD0zRAo9MjAKCgpodHRw
czovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOTUxNDk1Yzcx
ZTgzLwpDaGFuZ2VzZXQ6ICAgOTUxNDk1YzcxZTgzClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRl
OiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgVG9kbyBpdGVt
IGNvbXBsZXRlZApBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDViZTg2ZjZlNzFmZmQ5ZGM3
Y2VlYzAxNzk2ZTcxN2QwODQ3NmU1NTkgLXIgOTUxNDk1YzcxZTgzYjFiYjgzMDcwZTY9CmExZDA5
ZTFhYjllMTMwZDMxIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTEwNSw5ICsxMDUsNiBA
QAogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55YW1sJyApLCAnd2In
ICkgYXMgaGFuZGxlOgogICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZfZmlsZSwgZGVm
YXVsdF9mbG93X3N0eWxlPTNERmFsc2UpICkKPTIwCi0jIFRPRE86IEltcGxlbWVudCBwcm9wZXIg
SVB5TkIgZGF0YXR5cGUgYXRvcCBhIHByb3BlciBKU09OIGRhdGF0eXBlCi0jIEZvciBub3cgd2Ug
YXNzdW1lIGFsbCAidGV4dCIgZGF0YXR5cGVzIGFyZSBpcHluYnMuCi0jIDxkYXRhdHlwZSBleHRl
bnNpb249M0QiaXB5bmIiIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5kYXRhOlRleHQiIG1pbWV0
eT0KcGU9M0QiYXBwbGljYXRpb24vanNvbiIgc3ViY2xhc3M9M0QiVHJ1ZSIgZGlzcGxheV9pbl91
cGxvYWQ9M0QiVHJ1ZSIvPgogZW1wdHlfbmJfcGF0aCA9M0Qgb3MucGF0aC5qb2luKHRlbXBfZGly
LCAnaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQogaWYgaGRhLmRhdGF0eXBlLl9fY2xh
c3NfXy5fX25hbWVfXyAhPTNEICJJcHluYiI6CiAgICAgd2l0aCBvcGVuKCBlbXB0eV9uYl9wYXRo
LCAndysnICkgYXMgaGFuZGxlOgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5
LWNlbnRyYWwvY29tbWl0cy8xY2MzMDJiNWJmYjgvCkNoYW5nZXNldDogICAxY2MzMDJiNWJmYjgK
VXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAw
OjAwClN1bW1hcnk6ICAgICBBZGRlZCBpbmZvcm1hdGlvbiBvbiB0ZW1wbGF0ZSBjaGFuZ2VzIHJl
cXVpcmVkCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgOTUxNDk1YzcxZTgzYjFiYjgzMDcw
ZTZhMWQwOWUxYWI5ZTEzMGQzMSAtciAxY2MzMDJiNWJmYjg1NjFhYzE3NWRmMz0KNzRhZDA3N2Q0
NzU2YWQ2NjMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9JTlNUQUxMLm1k
Ci0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5TVEFMTC5tZAor
KysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL0lOU1RBTEwubWQKQEAg
LTE0LDcgKzE0LDcgQEAKIGZvciB0aGlzLCB3aGljaCBpcyBhdmFpbGFibGUgaW4gYFVidW50dSAx
NC4wNGAuIFRoZXJlIGFyZSB0dXRvcmlhbHMgb24gdGhlPQogaW50ZXJuZXQgZm9yIGJhY2twb3J0
aW5nCiB0aGUgd2Vic29ja2V0cyBtb2R1bGUsIGFuZCBpbnN0YWxsaW5nIGBhcGFjaGUyLjRgIFBQ
QXMuCj0yMAotIyMgQ29uZmlndXJhdGlvbgorIyMgQXBhY2hlIENvbmZpZ3VyYXRpb24KPTIwCiBI
ZXJlIGlzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uCj0yMApAQCAtNTUsMyArNTUsMzUgQEAK
IGBgYAo9MjAKIFRoZSBXZWJTb2NrZXQgc2VydmVyIGluIElQeXRob24gcGF5cyBhdHRlbnRpb24g
dG8gQ3Jvc3MtT3JpZ2luLVJlcXVlc3RzIGFuPQpkIHdpbGwgdGhyb3VnaCB1cCBhIDUwMCBJbnRl
cm5hbCBTZXJ2ZXIgRXJyb3IgKGluIGRvY2tlcikgaWYgeW91IGF0dGVtcHQgdG89CiBzZW5kIGl0
IGJhZCBkYXRhLiBUaHVzLCB3ZSB1c2UgdGhlIGV4dHJhY3RlZCBwb3J0IG51bWJlciBmcm9tIHRo
ZSBlYXJsaWVyID0KYFNldEVudklmYCByZXF1ZXN0IGluIG9yZGVyIHRvIG9idGFpbiB0aGUgcG9y
dCB0aGF0IElQeXRob24gd2lsbCBhY3R1YWxseSByPQplY2VpdmUgY29ubmVjdGlvbnMgZnJvbS4K
KworIyMgVGVtcGxhdGUgQ29uZmlndXJhdGlvbgorCitOb3JtYWxseSBjb250YWluZXJzIGFyZSBh
Y2Nlc3NlZCB2aWEgVVJMcyB0aGF0IGxvb2sgbGlrZToKKworYGBgCitodHRwOi8vZnFkbjoxMTIz
NS9pcHl0aG9uLzExMjM1L2lweXRob25fbm90ZWJvb2suaXB5bmIKK2BgYAorCitJbiBvcmRlciB0
byBzZWN1cmUgdGhlbSB3ZSB3YW50IHRvIGFjY2VzcyB0aGVtIHZpYSBVUkxzIHRoYXQgbG9vayBs
aWtlOgorCitgYGAKK2h0dHA6Ly9mcWRuL2lweXRob24vMTEyMzUvaXB5dGhvbl9ub3RlYm9vay5p
cHluYgorYGBgCisKK1RoaXMgY2hhbmdlIG5lZWRzIHRvIGJlIHJlYWxpc2VkIGluIHRoZSB0ZW1w
bGF0ZSBmaWxlLiBBdCB0aGUgdmVyeSBlbmQgb2YgPQp0aGUgdGVtcGxhdGUgdGhlcmUgaXMgYSBz
ZWN0aW9uIG9mIEhUTUwgY29kZSB3aGljaCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6CisKK2Bg
YGh0bWwKKzxvYmplY3QgZGF0YT0zRCJodHRwOi8vJHtIT1NUfToke1BPUlR9L2lweXRob24vJHtQ
T1JUfS9ub3RlYm9va3MvaXB5dGhvbl9nPQphbGF4eV9ub3RlYm9vay5pcHluYiIgaGVpZ2h0PTNE
IjEwMCUiIHdpZHRoPTNEIjEwMCUiPgorICAgIDxlbWJlZCBzcmM9M0QiaHR0cDovLyR7SE9TVH06
JHtQT1JUfS9pcHl0aG9uLyR7UE9SVH0vbm90ZWJvb2tzL2lweXRob249Cl9nYWxheHlfbm90ZWJv
b2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj4KKyAgICA8L2VtYmVkPgor
PC9vYmplY3Q+CitgYGAKKworSnVzdCByZW1vdmUgdGhlIGA6JHtQT1JUfWAgYW5kIHlvdSdyZSBy
ZWFkeSB0byBnbyEgSXQgc2hvdWxkIGxvb2sgbGlrZSB0aGk9CnM6CisKK2BgYGh0bWwKKzxvYmpl
Y3QgZGF0YT0zRCJodHRwOi8vJHtIT1NUfS9pcHl0aG9uLyR7UE9SVH0vbm90ZWJvb2tzL2lweXRo
b25fZ2FsYXh5X25vPQp0ZWJvb2suaXB5bmIiIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAl
Ij4KKyAgICA8ZW1iZWQgc3JjPTNEImh0dHA6Ly8ke0hPU1R9L2lweXRob24vJHtQT1JUfS9ub3Rl
Ym9va3MvaXB5dGhvbl9nYWxheHlfPQpub3RlYm9vay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdp
ZHRoPTNEIjEwMCUiPgorICAgIDwvZW1iZWQ+Cis8L29iamVjdD4KK2BgYAoKCmh0dHBzOi8vYml0
YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hZmE4MDVjYjUwMDYvCkNo
YW5nZXNldDogICBhZmE4MDVjYjUwMDYKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAg
ICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBVcGRhdGVkIHJlcXVpcmVt
ZW50IGxpc3QKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAxY2MzMDJiNWJmYjg1NjFhYzE3
NWRmMzc0YWQwNzdkNDc1NmFkNjYzIC1yIGFmYTgwNWNiNTAwNjM0NjIxNWI3NDgxPQpiNzJiN2Jl
MWRiYjhjNTUwYSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL0lOU1RBTEwu
bWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9JTlNUQUxMLm1k
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5TVEFMTC5tZApA
QCAtNSwxMCArNSwxMiBAQAo9MjAKICMjIFJlcXVpcmVtZW50cwo9MjAKLSAqIGBtb2RfcHJveHlg
Ci0gKiBgbW9kX3Byb3h5X2h0dHBgCi0gKiBgbW9kX3Byb3h5X3dzdHVubmVsYAotICogYG1vZF9o
ZWFkZXJzYAorICogW21vZF9oZWFkZXJzXShodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIu
NC9tb2QvbW9kX2hlYWRlcnMuaHRtbCkKKyAqIFttb2RfcHJveHldKGh0dHA6Ly9odHRwZC5hcGFj
aGUub3JnL2RvY3MvMi40L21vZC9tb2RfcHJveHkuaHRtbCkKKyAqIFttb2RfcHJveHlfaHR0cF0o
aHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9wcm94eV9odHRwLmh0PQpt
bCkKKyAqIFttb2RfcHJveHlfd3N0dW5uZWxdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3Mv
Mi40L21vZC9tb2RfcHJveHlfd3N0PQp1bm5lbC5odG1sKQorICogW21vZF9yZXdyaXRlXShodHRw
Oi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX3Jld3JpdGUuaHRtbCkKKyAqIFtt
b2Rfc2V0ZW52aWZdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2Rfc2V0
ZW52aWYuaHRtbCkKPTIwCiBJUHl0aG9uIG1ha2VzIHVzZSBvZiBXZWJTb2NrZXRzIHdoaWNoIHdl
IG5lZWQgdG8gcHJveHkgaW4gYXBhY2hlLiBTdXBwb3J0ID0Kd2FzIGFkZGVkIHRvIGBhcGFjaGUy
LjRgCiBmb3IgdGhpcywgd2hpY2ggaXMgYXZhaWxhYmxlIGluIGBVYnVudHUgMTQuMDRgLiBUaGVy
ZSBhcmUgdHV0b3JpYWxzIG9uIHRoZT0KIGludGVybmV0IGZvciBiYWNrcG9ydGluZwoKCmh0dHBz
Oi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy82ODNlMWNhMjUz
MWMvCkNoYW5nZXNldDogICA2ODNlMWNhMjUzMWMKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6
ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBNZW50aW9uZWQg
bmdpbngKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBhZmE4MDVjYjUwMDYzNDYyMTViNzQ4
MWI3MmI3YmUxZGJiOGM1NTBhIC1yIDY4M2UxY2EyNTMxYzE0NzRkNDkwMjYwPQplMTljOTNhYTA4
YWI5ZjAyYSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL0lOU1RBTEwubWQK
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9JTlNUQUxMLm1kCisr
KyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5TVEFMTC5tZApAQCAt
NTgsNiArNTgsMTAgQEAKPTIwCiBUaGUgV2ViU29ja2V0IHNlcnZlciBpbiBJUHl0aG9uIHBheXMg
YXR0ZW50aW9uIHRvIENyb3NzLU9yaWdpbi1SZXF1ZXN0cyBhbj0KZCB3aWxsIHRocm91Z2ggdXAg
YSA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yIChpbiBkb2NrZXIpIGlmIHlvdSBhdHRlbXB0IHRv
PQogc2VuZCBpdCBiYWQgZGF0YS4gVGh1cywgd2UgdXNlIHRoZSBleHRyYWN0ZWQgcG9ydCBudW1i
ZXIgZnJvbSB0aGUgZWFybGllciA9CmBTZXRFbnZJZmAgcmVxdWVzdCBpbiBvcmRlciB0byBvYnRh
aW4gdGhlIHBvcnQgdGhhdCBJUHl0aG9uIHdpbGwgYWN0dWFsbHkgcj0KZWNlaXZlIGNvbm5lY3Rp
b25zIGZyb20uCj0yMAorIyMgTmdpbnggQ29uZmlndXJhdGlvbgorCitQbGVhc2Ugc3VibWl0IGl0
IGlmIHlvdSB3cml0ZSBpdCEKKwogIyMgVGVtcGxhdGUgQ29uZmlndXJhdGlvbgo9MjAKIE5vcm1h
bGx5IGNvbnRhaW5lcnMgYXJlIGFjY2Vzc2VkIHZpYSBVUkxzIHRoYXQgbG9vayBsaWtlOgoKCmh0
dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy80NDA3MzM1
MDY2Y2EvCkNoYW5nZXNldDogICA0NDA3MzM1MDY2Y2EKVXNlcjogICAgICAgIGVyYXNjaGUyCkRh
dGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBFeHRyYWN0
ZWQgY29uZmlndXJhdGlvbiBmaWxlCkN1cnJlbnRseSBvbmx5IGEgZmV3IHZhcmlhYmxlcywgbW9y
ZSBjYW4gYmUgcGxhY2VkIGhlcmUgbGF0ZXIuCkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1y
IDY4M2UxY2EyNTMxYzE0NzRkNDkwMjYwZTE5YzkzYWEwOGFiOWYwMmEgLXIgNDQwNzMzNTA2NmNh
YTY0ZWFiYzU0ZjM9Cjk2ZGRjNzIyM2ZlZTk0OTc1IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCkBAIC0wLDAg
KzEsNyBAQAorW21haW5dCithcGFjaGVfdXJscyA9M0QgRmFsc2UKKworW2RvY2tlcl0KK2NvbW1h
bmQgPTNEICJkb2NrZXIiCitpbWFnZSA9M0QgImJncnVlbmluZy9kb2NrZXItaXB5dGhvbi1ub3Rl
Ym9vayIKKwoKZGlmZiAtciA2ODNlMWNhMjUzMWMxNDc0ZDQ5MDI2MGUxOWM5M2FhMDhhYjlmMDJh
IC1yIDQ0MDczMzUwNjZjYWE2NGVhYmM1NGYzPQo5NmRkYzcyMjNmZWU5NDk3NSBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0g
YS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9u
Lm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tYWtvCkBAIC0xOSw2ICsxOSwyMCBAQAo9MjAKIGdhbGF4eV9wYXN0ZXJfcG9y
dCA9M0QgY29uZmlnLmdldGludCgnc2VydmVyOm1haW4nLCAncG9ydCcpCj0yMAorIyBGaW5kIG91
dCB3aGVyZSB3ZSBhcmUKK3Zpel9wbHVnaW5fZGlyID0zRCBjb25maWcuZ2V0KCdhcHA6bWFpbics
ICd2aXN1YWxpemF0aW9uX3BsdWdpbnNfZGlyZWN0b3J5PQonKQoraWYgbm90IG9zLnBhdGguaXNh
YnModml6X3BsdWdpbl9kaXIpOgorICAgICMgSWYgaXQgaXMgTk9UIGFic29sdXRlLCBpLmUuIHJl
bGF0aXZlLCBhcHBlbmQgdG8gZ2FsYXh5IHJvb3QKKyAgICB2aXpfcGx1Z2luX2RpciA9M0Qgb3Mu
cGF0aC5qb2luKGdhbGF4eV9yb290X2Rpciwgdml6X3BsdWdpbl9kaXIpCisjIEdldCB0aGlzIHBs
dWdpbidzIGRpcmVjdG9yeQordml6X3BsdWdpbl9kaXIgPTNEIG9zLnBhdGguam9pbih2aXpfcGx1
Z2luX2RpciwgImlweXRob24iKQorIyBTdG9yZSBvdXIgdGVtcGxhdGUgYW5kIGNvbmZpZ3VyYXRp
b24gcGF0aAorb3VyX2NvbmZpZ19kaXIgPTNEIG9zLnBhdGguam9pbih2aXpfcGx1Z2luX2Rpciwg
ImNvbmZpZyIpCitvdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4odml6X3BsdWdpbl9k
aXIsICJ0ZW1wbGF0ZSIpCitpcHlfdml6X2NvbmZpZyA9M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25m
aWdQYXJzZXIoeydhcGFjaGVfdXJscyc6IEZhbHNlLCAnYz0Kb21tYW5kJzogJ2RvY2tlcicsICdp
bWFnZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
YmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLT0Kbm90ZWJvb2snfSkKK2lweV92aXpfY29uZmlnLnJl
YWQoIG9zLnBhdGguam9pbiggb3VyX2NvbmZpZ19kaXIsICJpcHl0aG9uLmNvbmYiICkgKQorCiAj
IEVuc3VyZSBnZW5lcmF0aW9uIG9mIG5vdGVib29rIGlkIGlzIGRldGVybWluaXN0aWMgZm9yIHRo
ZSBkYXRhc2V0LiBSZXBsYT0KY2Ugd2l0aCBoaXN0b3J5IGlkCiAjIHdoZW5ldmVyIHdlIGZpZ3Vy
ZSBvdXQgaG93IHRvIGFjY2VzcyB0aGF0LgogcmFuZG9tLnNlZWQoIGhpc3RvcnlfaWQgKQpAQCAt
MTEyLDcgKzEyNiwxMyBAQAogZWxzZToKICAgICBzaHV0aWwuY29weSggaGRhLmZpbGVfbmFtZSwg
ZW1wdHlfbmJfcGF0aCApCj0yMAotZG9ja2VyX2NtZCA9M0QgJ2RvY2tlciBydW4gLWQgLS1zaWct
cHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQ9Ci8iIGJncnVlbmluZy9kb2Nr
ZXItaXB5dGhvbi1ub3RlYm9vaycgJSAoUE9SVCwgdGVtcF9kaXIpCitkb2NrZXJfY21kID0zRCAn
JXMgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczo2Nzg5IC12ICIlczovaW1wb3J0LyIg
JT0KcycgJSBcCisgICAgKGlweV92aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImNvbW1hbmQiKSwg
UE9SVCwgdGVtcF9kaXIsIGlweV92aXpfY29uZj0KaWcuZ2V0KCJkb2NrZXIiLCAiaW1hZ2UiKSkK
KworaWYgaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJhcGFjaGVfdXJscyIpOgor
ICAgIG5vdGVib29rX2FjY2Vzc191cmwgPTNEICJodHRwOi8vJXMvaXB5dGhvbi8lcy9ub3RlYm9v
a3MvaXB5dGhvbl9nYWxheHk9Cl9ub3RlYm9vay5pcHluYiIgJSAoIEhPU1QsIFBPUlQgKQorZWxz
ZToKKyAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAiaHR0cDovLyVzOiVzL2lweXRob24vJXMv
bm90ZWJvb2tzL2lweXRob25fZ2FsPQpheHlfbm90ZWJvb2suaXB5bmIiICUgKCBIT1NULCBQT1JU
LCBQT1JUICkKIHN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCj0yMAog
IyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIEltYWdlIGFuZCBJUHl0aG9uIGluIGxvYWRlZApA
QCAtMTI0LDggKzE0NCw4IEBACj0yMAo9MjAKIDxib2R5PgotICAgIDxvYmplY3QgZGF0YT0zRCJo
dHRwOi8vJHtIT1NUfToke1BPUlR9L2lweXRob24vJHtQT1JUfS9ub3RlYm9va3MvaXB5dGg9Cm9u
X2dhbGF4eV9ub3RlYm9vay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiPgot
ICAgICAgICA8ZW1iZWQgc3JjPTNEImh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vaXB5dGhvbi8ke1BP
UlR9L25vdGVib29rcy9pcHk9CnRob25fZ2FsYXh5X25vdGVib29rLmlweW5iIiBoZWlnaHQ9M0Qi
MTAwJSIgd2lkdGg9M0QiMTAwJSI+CisgICAgPG9iamVjdCBkYXRhPTNEIiR7bm90ZWJvb2tfYWNj
ZXNzX3VybH0iIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj4KKyAgICAgICAgPGVtYmVk
IHNyYz0zRCIke25vdGVib29rX2FjY2Vzc191cmx9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0Qi
MTAwPQolIj48L2VtYmVkPjwvb2JqZWN0PjwvYm9keT4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv
Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMDg4MmIxMDk3OTM5LwpDaGFuZ2VzZXQ6ICAg
MDg4MmIxMDk3OTM5ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgRXh0cmFjdGVkIHRlbXBsYXRlIGludG8gYSB0
ZW1wbGF0ZSBmaWxlCkl0IHdhcyByZWFsbHkgYXdmdWwgdG8gaGF2ZSB0aGF0IGZpbGUgbWFpbnRh
aW5lZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzb3VyYz0KZSBjb2RlLCBub3cgaXQgaXMKc2VwYXJh
dGUuCkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1yIDQ0MDczMzUwNjZjYWE2NGVhYmM1NGYz
OTZkZGM3MjIzZmVlOTQ5NzUgLXIgMDg4MmIxMDk3OTM5ODY2NGYxMGUzYzU9CmE0ODg3Y2ZiYmU0
NGI5NWVkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
dGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTI4LDcgKzI4LDcgQEAKIHZpel9w
bHVnaW5fZGlyID0zRCBvcy5wYXRoLmpvaW4odml6X3BsdWdpbl9kaXIsICJpcHl0aG9uIikKICMg
U3RvcmUgb3VyIHRlbXBsYXRlIGFuZCBjb25maWd1cmF0aW9uIHBhdGgKIG91cl9jb25maWdfZGly
ID0zRCBvcy5wYXRoLmpvaW4odml6X3BsdWdpbl9kaXIsICJjb25maWciKQotb3VyX3RlbXBsYXRl
X2RpciA9M0Qgb3MucGF0aC5qb2luKHZpel9wbHVnaW5fZGlyLCAidGVtcGxhdGUiKQorb3VyX3Rl
bXBsYXRlX2RpciA9M0Qgb3MucGF0aC5qb2luKHZpel9wbHVnaW5fZGlyLCAidGVtcGxhdGVzIikK
IGlweV92aXpfY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J2FwYWNo
ZV91cmxzJzogRmFsc2UsICdjPQpvbW1hbmQnOiAnZG9ja2VyJywgJ2ltYWdlJzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ3J1ZW5pbmcvZG9ja2Vy
LWlweXRob24tPQpub3RlYm9vayd9KQogaXB5X3Zpel9jb25maWcucmVhZCggb3MucGF0aC5qb2lu
KCBvdXJfY29uZmlnX2RpciwgImlweXRob24uY29uZiIgKSApCkBAIC0zNyw0OSArMzcsMTAgQEAK
ICMgd2hlbmV2ZXIgd2UgZmlndXJlIG91dCBob3cgdG8gYWNjZXNzIHRoYXQuCiByYW5kb20uc2Vl
ZCggaGlzdG9yeV9pZCApCiBub3RlYm9va19pZCA9M0QgJycuam9pbihyYW5kb20uY2hvaWNlKCcw
MTIzNDU2Nzg5YWJjZGVmJykgZm9yIF8gaW4gcmFuZ2UoNj0KNCkpCi1lbXB0eV9uYiA9M0QgIiIi
ewotICJtZXRhZGF0YSI6IHsKLSAgIm5hbWUiOiAiIiwKLSAgInNpZ25hdHVyZSI6ICJzaGEyNTY6
JXMiCi0gfSwKLSAibmJmb3JtYXQiOiAzLAotICJuYmZvcm1hdF9taW5vciI6IDAsCi0gIndvcmtz
aGVldHMiOiBbCi0gIHsKLSAgICJjZWxscyI6IFsKLSAgICB7Ci0gICAgICJjZWxsX3R5cGUiOiAi
aGVhZGluZyIsCi0gICAgICJsZXZlbCI6IDEsCi0gICAgICJtZXRhZGF0YSI6IHt9LAotICAgICAi
c291cmNlIjogWwotICAgICAgIldlbGNvbWUgdG8gdGhlIGludGVyYWN0aXZlIEdhbGF4eSBJUHl0
aG9uIE5vdGVib29rLiIKLSAgICAgXQotICAgIH0sCi0gICAgewotICAgICAiY2VsbF90eXBlIjog
Im1hcmtkb3duIiwKLSAgICAgIm1ldGFkYXRhIjoge30sCi0gICAgICJzb3VyY2UiOiBbCi0gICAg
ICAiWW91IGNhbiBhY2Nlc3MgeW91ciBkYXRhIHZpYSB0aGUgZGF0YXNldCBudW1iZXIuIEZvciBl
eGFtcGxlLCBgaGFuZD0KbGUgPTNEIGdldCg0MilgLlxcbiIsCi0gICAgICAiVG8gc2F2ZSBkYXRh
LCB3cml0ZSB5b3VyIGRhdGEgdG8gYSBmaWxlLCBhbmQgdGhlbiBjYWxsIGBwdXQoJ2ZpbGVuYT0K
bWUudHh0JylgLiBUaGUgZGF0YXNldCB3aWxsIHRoZW4gYmUgYXZhaWxhYmxlIGluIHlvdXIgZ2Fs
YXh5IGhpc3RvcnkuXFxuIiwKLSAgICAgICJUbyBzYXZlIHlvdXIgbm90ZWJvb2sgdG8gZ2FsYXh5
LCBjbGljayB0aGUgbGFyZ2UgZ3JlZW4gYnV0dG9uIGF0IHRoPQplIHRvcCByaWdodCBvZiB0aGUg
SVB5dGhvbiBpbnRlcmZhY2UiCi0gICAgIF0KLSAgICB9LAotICAgIHsKLSAgICAgImNlbGxfdHlw
ZSI6ICJjb2RlIiwKLSAgICAgImNvbGxhcHNlZCI6IGZhbHNlLAotICAgICAiaW5wdXQiOiBbCi0g
ICAgIF0sCi0gICAgICJsYW5ndWFnZSI6ICJweXRob24iLAotICAgICAibWV0YWRhdGEiOiB7fSwK
LSAgICAgIm91dHB1dHMiOiBbXSwKLSAgICAgInByb21wdF9udW1iZXIiOiAxCi0gICAgfQotICAg
XSwKLSAgICJtZXRhZGF0YSI6IHt9Ci0gIH0KLSBdCi19Ci0iIiIgJSAobm90ZWJvb2tfaWQsICkK
Kword2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9vay5p
cHluYicgKSwgJ3InKSBhcyBuYl89CmhhbmRsZToKKyAgICBlbXB0eV9uYiA9M0QgbmJfaGFuZGxl
LnJlYWQoKQorZW1wdHlfbmIgPTNEIGVtcHR5X25iICUgbm90ZWJvb2tfaWQKPTIwCj0yMAogIyBG
aW5kIGFsbCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCgpkaWZmIC1yIDQ0MDczMzUw
NjZjYWE2NGVhYmM1NGYzOTZkZGM3MjIzZmVlOTQ5NzUgLXIgMDg4MmIxMDk3OTM5ODY2NGYxMGUz
YzU9CmE0ODg3Y2ZiYmU0NGI5NWVkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL25vdGVib29rLj0KaXB5bmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9ub3RlYm9vay5pcHluYgpA
QCAtMCwwICsxLDQyIEBACit7CisgIm1ldGFkYXRhIjogeworICAibmFtZSI6ICIiLAorICAic2ln
bmF0dXJlIjogInNoYTI1NjolcyIKKyB9LAorICJuYmZvcm1hdCI6IDMsCisgIm5iZm9ybWF0X21p
bm9yIjogMCwKKyAid29ya3NoZWV0cyI6IFsKKyAgeworICAgImNlbGxzIjogWworICAgIHsKKyAg
ICAgImNlbGxfdHlwZSI6ICJoZWFkaW5nIiwKKyAgICAgImxldmVsIjogMSwKKyAgICAgIm1ldGFk
YXRhIjoge30sCisgICAgICJzb3VyY2UiOiBbCisgICAgICAiV2VsY29tZSB0byB0aGUgaW50ZXJh
Y3RpdmUgR2FsYXh5IElQeXRob24gTm90ZWJvb2suIgorICAgICBdCisgICAgfSwKKyAgICB7Cisg
ICAgICJjZWxsX3R5cGUiOiAibWFya2Rvd24iLAorICAgICAibWV0YWRhdGEiOiB7fSwKKyAgICAg
InNvdXJjZSI6IFsKKyAgICAgICJZb3UgY2FuIGFjY2VzcyB5b3VyIGRhdGEgdmlhIHRoZSBkYXRh
c2V0IG51bWJlci4gRm9yIGV4YW1wbGUsIGBoYW5kPQpsZSA9M0QgZ2V0KDQyKWAuXFxuIiwKKyAg
ICAgICJUbyBzYXZlIGRhdGEsIHdyaXRlIHlvdXIgZGF0YSB0byBhIGZpbGUsIGFuZCB0aGVuIGNh
bGwgYHB1dCgnZmlsZW5hPQptZS50eHQnKWAuIFRoZSBkYXRhc2V0IHdpbGwgdGhlbiBiZSBhdmFp
bGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9yeS5cXG4iLAorICAgICAgIlRvIHNhdmUgeW91ciBu
b3RlYm9vayB0byBnYWxheHksIGNsaWNrIHRoZSBsYXJnZSBncmVlbiBidXR0b24gYXQgdGg9CmUg
dG9wIHJpZ2h0IG9mIHRoZSBJUHl0aG9uIGludGVyZmFjZSIKKyAgICAgXQorICAgIH0sCisgICAg
eworICAgICAiY2VsbF90eXBlIjogImNvZGUiLAorICAgICAiY29sbGFwc2VkIjogZmFsc2UsCisg
ICAgICJpbnB1dCI6IFsKKyAgICAgXSwKKyAgICAgImxhbmd1YWdlIjogInB5dGhvbiIsCisgICAg
ICJtZXRhZGF0YSI6IHt9LAorICAgICAib3V0cHV0cyI6IFtdLAorICAgICAicHJvbXB0X251bWJl
ciI6IDEKKyAgICB9CisgICBdLAorICAgIm1ldGFkYXRhIjoge30KKyAgfQorIF0KK30KCgpodHRw
czovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOWQzNWVhMmU1
MDc0LwpDaGFuZ2VzZXQ6ICAgOWQzNWVhMmU1MDc0ClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmlu
ZwpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowMyswMDowMApTdW1tYXJ5OiAgICAgVXBk
YXRlIFJFQURNRS5tZApBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDA4ODJiMTA5NzkzOTg2
NjRmMTBlM2M1YTQ4ODdjZmJiZTQ0Yjk1ZWQgLXIgOWQzNWVhMmU1MDc0YjcwMjBkMTFlODY9CjIy
MWVjYmFjZTFjNDI2N2FlIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVB
RE1FLm1kCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1F
Lm1kCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1k
CkBAIC0xNCwxMSArMTQsMTIgQEAKIEluc3RhbGxhdGlvbgogPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNEPTNEPTNECj0yMAotQ29weSB0aGUgdGVtcGxhdGUgYW5kIGNvbmZpZyBmb2xkZXIg
aW4geW91ciA8R0FMQVhZX1JPT1Q+L2NvbmZpZy9wbHVnaW5zL3Y9CmlzdWFsaXphdGlvbnMvaXB5
dGhvbiBmb2xkZXIgYW5kIHJlc3RhcnQgR2FsYXh5LgorQ29weSB0aGUgdGVtcGxhdGUgYW5kIGNv
bmZpZyBmb2xkZXIgaW4geW91ciBgYEdBTEFYWV9ST09UL2NvbmZpZy9wbHVnaW5zL3Y9CmlzdWFs
aXphdGlvbnMvaXB5dGhvbmBgIGZvbGRlciBhbmQgcmVzdGFydCBHYWxheHkuCitBbHRlcm5hdGl2
bHksIHlvdSBjYW4gY2xvbmUgdGhlIHJlcG9zaXRvcnkgd2l0aAo9MjAKLW9yCi0KLWBgZ2l0IGNs
b25lIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24uZ2l0IGNvbmZp
Zy9wbHVnaW5zPQovdml6L2lweXRob25gYAorYGBgYmFzaAorZ2l0IGNsb25lIGh0dHBzOi8vZ2l0
aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24uZ2l0IGNvbmZpZy9wbHVnaW5zL3Y9Cml6
L2lweXRob24KK2BgYGAKPTIwCiBUaGUgSVB5dGhvbiBWaXN1YWxpc2F0aW9uIE9wdGlvbiBzaG91
bGQgYmUgdmlzaWJsZSBuZXh0IHRvIHRoZSB1c3VhbCBDaGFydD0KcyBvciBUcmFja3N0ZXIgT3B0
aW9ucyBpbiB5b3VyIFZpc3VhbGlzYXRpb24gbWVudWUuCj0yMApAQCAtMzAsMTEgKzMxLDU4IEBA
CiAgKiBjb21wbGV0ZSBlbmNhcHN1bGF0ZWQgcHl0aG9uIGVudmlyb25tZW50IHdpdGggbWF0cGxv
dGxpYiwgcGFuZGFzIGFuZCBmcj0KaWVuZHMgaW5zdGFsbGVkCiAgKiBhY2Nlc3MgdG8gYWxsIGRh
dGFzZXRzIGZyb20geW91ciBjdXJyZW50IGhpc3RvcnkgdmlhIHByZS1kZWZpbmVkIElQeXRobz0K
biBmdW5jdGlvbgogICogbWFuaXB1bGF0ZSBhbmQgcGxvdCBkYXRhIGFzIHlvdSBsaWtlIGFuZCBl
eHBvcnQgeW91ciBuZXcgZmlsZXMgYmFjayBpbnQ9Cm8gdGhlIEdhbGF4eSBoaXN0b3J5CisgKiBh
Y2Nlc3MgeW91ciBHYWxheHkgaW5zdGFuY2UgZnJvbSBJUHl0aG9uIHdpdGggYmlvYmxlbmQgYW5k
IHJlZGVmaW5lZCBmdT0KbmN0aW9ucwogICogc2F2ZSB0aGUgSVB5dGhvbiBOb3RlYm9vayBpbnRv
IHlvdXIgR2FsYXh5IGhpc3RvcnkKKyAqIG5vdGVib29rIHBlcnNpc3RlbmNlIGFjcm9zcyBzZXNz
aW9ucwogICogc2F2ZWQgSVB5dGhvbiBOb3RlYm9vayBmaWxlcyBjYW4gYmUgdmlld2VkIGluIEhU
TUwgYW5kIHJlLW9wZW5lZAogICogc2VsZi1jbG9zaW5nIGFuZCBjbGVhbmluZyBJUHl0aG9uIGRv
Y2tlciBjb250YWluZXIKPTIwCj0yMAorRnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMKKz0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRAorCitGb3IgeW91ciBjb252aWVuY2UsIHdlIGhhdmUgYWRkZWQgYSBmZXcgcHJlLWRlZmlu
ZWQgZnVuY3Rpb25zIHRvIHRoZSBJUHl0aD0Kb24gcHJvZmlsZS4KKworIyMjIGdldAorCisgICBU
aGUgZ2V0IGZ1bmN0aW9uIHdpbGwgY29weSBhIGRhdGFzZXQsIGlkZW50aWZpZWQgYnkgdGhlIGhp
c3RvcnlfaWQsIGZybz0KbSB5b3VyIGN1cnJlbnQgR2FsYXh5PTIwCisgICBpbnRvIHRoZSBkb2Nr
ZXIgY29udGFpbmVyLiBJdCB3aWxsIHJldHVybiB0aGUgZmlsZSBwYXRoIHRvIHRoZSBjb3BpZWQg
Zj0KaWxlLgorCisgICAqRXhhbXBsZSo6CisgICBgYGBweXRob24KKyAgICAgIHdpdGggb3Blbigg
Z2V0KCA0NCApLCAncicpIGFzIGhhbmRsZToKKyAgICAgICAgIGZvciBsaW5lIGluIGhhbmRsZToK
KyAgICAgICAgICAgIHByaW50KCBsaW5lICkKKyAgIGBgYD0yMAorCisjIyMgcHV0CisKKyAgIFRo
ZSBwdXQgZnVuY3Rpb24gdGFrZXMgYSBmaWxlIHBhdGggYW5kIHRyYW5zZmVycyB0aGUgZmlsZSB0
byB0aGUgY3VycmVuPQp0IGhpc3Rvcnkgb2YgeW91ciBHYWxheHkgc2Vzc2lvbi4KKworICAgKkV4
YW1wbGUqOgorICAgYGBgcHl0aG9uCisgICAgICBwdXQoICcuL215X2ZpbGUudHN2JywgZmlsZV90
eXBlID0zRCAndGFidWxhcicpCisgICBgYGAKKworIyMjIEhJU1RPUllfSUQKKworICAgQWNjZXNz
aW5nIHlvdXIgY3VycmVudCBoaXN0b3J5IGlzIHBvc3NpYmxlIHdpdGggdGhlIHByZS1kZWZpbmVk
IEhJU1RPUlk9Cl9JRCB2YXJpYWJsZS4KKyAgPTIwCisKKyMjIyBjb25uZWN0IHRvIEdhbGF4eQor
CisgICBJZiB5b3Ugd2FudCB0byBjb21tdW5pY2F0ZSB3aXRoIEdhbGF4eSB5b3UgY2FuIHVzZSBg
YGBnZXRfZ2FsYXh5X2Nvbm5lYz0KdGlvbigpYGBgIHRvIGdldCBhbiBbYmlvYmxlbmQgR2FsYXh5
SW5zdGFuY2Ugb2JqZWN0XShodHRwOi8vYmlvYmxlbmQucmVhZHRoPQplZG9jcy5vcmcvZW4vbGF0
ZXN0L2FwaV9kb2NzL2dhbGF4eS9hbGwuaHRtbD9oaWdobGlnaHQ9M0RnYWxheHlpbnN0YW5jZSku
CisKKyAgICpFeGFtcGxlKjoKKyAgIGBgYHB5dGhvbgorICAgICAgZnJvbSBiaW9ibGVuZC5nYWxh
eHkuaGlzdG9yaWVzIGltcG9ydCBIaXN0b3J5Q2xpZW50CisgICAgICBnaSA9M0QgZ2V0X2dhbGF4
eV9jb25uZWN0aW9uKCkKKyAgICAgIGhjID0zRCBIaXN0b3J5Q2xpZW50KCBnaSApCisgICAgICBm
b3IgZGF0YXNldCBpbiBoYy5zaG93X2hpc3RvcnkoIEhJU1RPUllfSUQgLCBjb250ZW50cz0zRFRy
dWUpICk6CisgICAgICAgICBwcmludCggZGF0YXNldFsnaWQnXSApCisgICBgYGAKKworCiBTZWN1
cml0eQogPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9y
Zy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hN2I4YmQ4ZDBlZmYvCkNoYW5nZXNldDog
ICBhN2I4YmQ4ZDBlZmYKVXNlcjogICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAy
MDE0LTEwLTE4IDIyOjM4OjAzKzAwOjAwClN1bW1hcnk6ICAgICBhZGQgc29tZSBpbWFnZXMgZm9y
IGJldHRlciBkb2N1bWVudGF0aW9uCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgOWQzNWVh
MmU1MDc0YjcwMjBkMTFlODYyMjFlY2JhY2UxYzQyNjdhZSAtciBhN2I4YmQ4ZDBlZmYzMTg5ZDQ2
Y2M3MD0KYjM5NmUxZTE3NDNjOWE4MjYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9pbWFnZXMvc3RhcnRfaXB5dGhvPQpuLnBuZwpCaW5hcnkgZmlsZSBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2ltYWdlcy9zdGFydF9pcHl0aG9uLnBuZyA9CmhhcyBj
aGFuZ2VkCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21t
aXRzLzk0MDMyYmFjOTljNy8KQ2hhbmdlc2V0OiAgIDk0MDMyYmFjOTljNwpVc2VyOiAgICAgICAg
QmpvZXJuR3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDMrMDA6MDAKU3Vt
bWFyeTogICAgIGFkZCBpbWFnZSB0byBzaG93IHRoZSBpbnRlZ3JhdGlvbiBvZiBJUHl0aG9uIGlu
IEdhbGF4eQpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGE3YjhiZDhkMGVmZjMxODlkNDZj
YzcwYjM5NmUxZTE3NDNjOWE4MjYgLXIgOTQwMzJiYWM5OWM3Y2VhM2YyYzAzNGU9CjA0YWM2YzYz
YWZiNDk4NjZkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaW1hZ2VzL2lw
eXRob25faW5fZz0KYWxheHkucG5nCkJpbmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vaW1hZ2VzL2lweXRob25faW5fZ2FsYXh5Lj0KcG5nIGhhcyBjaGFuZ2Vk
CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2Uw
M2JhMmU4NTZlMi8KQ2hhbmdlc2V0OiAgIGUwM2JhMmU4NTZlMgpVc2VyOiAgICAgICAgQmpvZXJu
R3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTog
ICAgIFVwZGF0ZSBSRUFETUUubWQKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA5NDAzMmJh
Yzk5YzdjZWEzZjJjMDM0ZTA0YWM2YzYzYWZiNDk4NjZkIC1yIGUwM2JhMmU4NTZlMmUxNjZiYzRi
YTdlPQo0NjAwZGVmZWI1NWNkMDNkMiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L1JFQURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL1JF
QURNRS5tZApAQCAtMjEsNyArMjEsOSBAQAogZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9i
Z3J1ZW5pbmcvZ2FsYXh5LWlweXRob24uZ2l0IGNvbmZpZy9wbHVnaW5zL3Y9Cml6L2lweXRob24K
IGBgYGAKPTIwCi1UaGUgSVB5dGhvbiBWaXN1YWxpc2F0aW9uIE9wdGlvbiBzaG91bGQgYmUgdmlz
aWJsZSBuZXh0IHRvIHRoZSB1c3VhbCBDaGFydD0KcyBvciBUcmFja3N0ZXIgT3B0aW9ucyBpbiB5
b3VyIFZpc3VhbGlzYXRpb24gbWVudWUuCitUaGUgSVB5dGhvbiB2aXN1YWxpc2F0aW9uIG9wdGlv
biBzaG91bGQgYmUgdmlzaWJsZSBuZXh0IHRvIHRoZSB1c3VhbCBDaGFydD0KcyBvciBUcmFja3N0
ZXIgb3B0aW9ucyBpbiB5b3VyIHZpc3VhbGlzYXRpb24gbWVudWUuCisKKyFbU3RhcnRpbmcgSVB5
dGhvbiBpbiBHYWxheHldKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9iZ3J1ZW5p
bmcvPQpnYWxheHktaXB5dGhvbi9tYXN0ZXIvaW1hZ2VzL3N0YXJ0X2lweXRob24ucG5nKQo9MjAK
PTIwCiBGZWF0dXJlcwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy
YWwvY29tbWl0cy8xZDNkNDZiYjhmYmYvCkNoYW5nZXNldDogICAxZDNkNDZiYjhmYmYKVXNlcjog
ICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAw
OjAwClN1bW1hcnk6ICAgICBVcGRhdGUgUkVBRE1FLm1kCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRp
ZmYgLXIgZTAzYmEyZTg1NmUyZTE2NmJjNGJhN2U0NjAwZGVmZWI1NWNkMDNkMiAtciAxZDNkNDZi
YjhmYmZiYzc5MzZjNWJmOD0KN2I4MTYwOWM3YWQ2MmZjYWQgY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9SRUFETUUubWQKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9SRUFETUUubWQKQEAgLTcsOCArNyw4IEBACiBSZXF1aXJlbWVudHMKID0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAo9MjAKLUZvciBzZWN1cml0eSByZWFzb25z
IHlvdSBuZWVkIHRvIGhhdmUgZG9ja2VyIGluc3RhbGxlZC4KLUZvciBhIGRldGFpbGVkIGluc3Ry
dWN0aW9uIGhvdyB0byBpbnN0YWxsIGRvY2tlciwgcGxlYXNlIGxvb2sgYXQgdGhlIGRvY2tlPQpy
IHdlYnNpdGUuCitUaGUgb25seSByZXF1aXJlbWVudCBpcyB0byBoYXZlIFtEb2NrZXJdKGh0dHBz
Oi8vd3d3LmRvY2tlci5jb20pIGluc3RhbGxlZD0KIG9uIHlvdXIgc3lzdGVtLgorRm9yIGEgZGV0
YWlsZWQgaW5zdHJ1Y3Rpb24gaG93IHRvIGluc3RhbGwgZG9ja2VyLCBwbGVhc2UgbG9vayBhdCB0
aGUgW2RvY2s9CmVyIHdlYnNpdGVdKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2luc3RhbGxhdGlv
bi8pLgo9MjAKPTIwCiBJbnN0YWxsYXRpb24KQEAgLTk3LDcgKzk3LDcgQEAKIEF1dGhvcnMKID0z
RD0zRD0zRD0zRD0zRD0zRD0zRAo9MjAKLSAqIEJqb2VybiBHcnVlbmluZworICogQmo9QzM9QjZy
biBHcj1DMz1CQ25pbmcKICAqIEVyaWMgUmFzY2hlCj0yMAo9MjAKCgpodHRwczovL2JpdGJ1Y2tl
dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvYTRlNGVkZjY5ZWZjLwpDaGFuZ2Vz
ZXQ6ICAgYTRlNGVkZjY5ZWZjClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAg
ICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRvcHRpbmcgdGhlIGhl
bHAgdGV4dCBpbiB0aGUgaW5pdGFsIHdlbGNvbWUgTm90ZWJvb2suCkFmZmVjdGVkICM6ICAxIGZp
bGUKCmRpZmYgLXIgMWQzZDQ2YmI4ZmJmYmM3OTM2YzViZjg3YjgxNjA5YzdhZDYyZmNhZCAtciBh
NGU0ZWRmNjllZmMzYTAyYzgxNzA5OD0KN2FiNTY2OTZiMWQ4NmI1MDIgY29uZmlnL3BsdWdpbnMv
dmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvbm90ZWJvb2suPQppcHluYgotLS0gYS9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9ub3RlYm9vay5p
cHluYgorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRl
cy9ub3RlYm9vay5pcHluYgpAQCAtMjAsOSArMjAsMTAgQEAKICAgICAgImNlbGxfdHlwZSI6ICJt
YXJrZG93biIsCiAgICAgICJtZXRhZGF0YSI6IHt9LAogICAgICAic291cmNlIjogWwotICAgICAg
IllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhlIGRhdGFzZXQgbnVtYmVyLiBGb3IgZXhh
bXBsZSwgYGhhbmQ9CmxlID0zRCBnZXQoNDIpYC5cXG4iLAotICAgICAgIlRvIHNhdmUgZGF0YSwg
d3JpdGUgeW91ciBkYXRhIHRvIGEgZmlsZSwgYW5kIHRoZW4gY2FsbCBgcHV0KCdmaWxlbmE9Cm1l
LnR4dCcpYC4gVGhlIGRhdGFzZXQgd2lsbCB0aGVuIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGF4
eSBoaXN0b3J5LlxcbiIsCi0gICAgICAiVG8gc2F2ZSB5b3VyIG5vdGVib29rIHRvIGdhbGF4eSwg
Y2xpY2sgdGhlIGxhcmdlIGdyZWVuIGJ1dHRvbiBhdCB0aD0KZSB0b3AgcmlnaHQgb2YgdGhlIElQ
eXRob24gaW50ZXJmYWNlIgorICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhl
IGRhdGFzZXQgbnVtYmVyLiBGb3IgZXhhbXBsZSwgYGBoYW49CmRsZSA9M0QgZ2V0KDQyKWBgLiIs
CisgICAgICAiVG8gc2F2ZSBkYXRhLCB3cml0ZSB5b3VyIGRhdGEgdG8gYSBmaWxlLCBhbmQgdGhl
biBjYWxsIGBgcHV0KCdmaWxlbj0KYW1lLnR4dCcpYGAuIFRoZSBkYXRhc2V0IHdpbGwgdGhlbiBi
ZSBhdmFpbGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9yeS4iLAorICAgICAgIk5vdGVib29rcyBj
YW4gYmUgc2F2ZWQgdG8gR2FsYXh5IGJ5IGNsaWNraW5nIHRoZSBsYXJnZSBncmVlbiBidXR0b249
CiBhdCB0aGUgdG9wIHJpZ2h0IG9mIHRoZSBJUHl0aG9uIGludGVyZmFjZS48YnI+IiwKKyAgICAg
ICJNb3JlIGhlbHAgYW5kIGluZm9ybWF0aW9ucyBjYW4gYmUgZm91bmQgb24gdGhlIHByb2plY3Qg
W3dlYnNpdGVdKGh0PQp0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbiku
IgogICAgICBdCiAgICAgfSwKICAgICB7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC9jb21taXRzL2Y0MGUzMmU2ZTcwYS8KQ2hhbmdlc2V0OiAgIGY0MGUzMmU2
ZTcwYQpVc2VyOiAgICAgICAgQmpvZXJuR3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTgg
MjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFVwZGF0ZSBSRUFETUUubWQKIk5leHQgR2VuZXJh
dGlvbiBUcmFpbmluZyIgY291cnNlIG1pZ2h0IGJlIGEgbGl0dGxlIGJpdCB0byBtdWNoIC4uLiA7
KQpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGE0ZTRlZGY2OWVmYzNhMDJjODE3MDk4N2Fi
NTY2OTZiMWQ4NmI1MDIgLXIgZjQwZTMyZTZlNzBhNTFmMjg3MGFlMTY9CjViMWNjMmE5ZDRiNjM0
NzhlIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1kCi0tLSBh
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1kCisrKyBiL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1kCkBAIC0xLDcgKzEs
MTAgQEAKIEdhbGF4eSBJUHl0aG9uIEludGVncmF0aW9uCiA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0z
RAo9MjAKLUlQeXRob24gSW50ZWdyYXRpb24gaW50byBHYWxheHkKK1RoaXMgcHJvamVjdHMgaW50
ZWdyYXRlcyBbSVB5dGhvbiBOb3RlYm9va10oaHR0cDovL2lweXRob24ub3JnL25vdGVib29rLmh0
PQptbCksIGEgaW50ZXJhY3RpdmUgY29tcHV0YXRpb25hbCBlbnZpcm9ubWVudCwgd2l0aCBbR2Fs
YXh5XShodHRwOi8vZ2FsYXh5cHI9Cm9qZWN0Lm9yZykuPTIwCitXZSBob3BlIHRvIG1ha2UgR2Fs
YXh5IG1vcmUgYXR0cmFjdGl2ZSBmb3IgYmlvaW5mb3JtYXRpY2lhbnMgYW5kIHRvIGNvbWJpbj0K
ZSB0aGUgcG93ZXIgb2YgYm90aCBwcm9qZWN0cyB0byB1bmxvY2sgY3JlYXRpdml0eSBpbiBkYXRh
IGFuYWx5c2lzLCBidXQgYWxzPQpvIGluIE5leHQtR2VuZXJhdGlvbi1UcmFpbmluZyBjb3Vyc2Vz
LgorCishW0lQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5j
b20vYmdydWVuaW5nL2dhbGF4eS1pcD0KeXRob24vbWFzdGVyL2ltYWdlcy9pcHl0aG9uX2luX2dh
bGF4eS5wbmcpCj0yMAo9MjAKIFJlcXVpcmVtZW50cwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85OTIxY2VkMzNmODUvCkNoYW5nZXNldDogICA5
OTIxY2VkMzNmODUKVXNlcjogICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0
LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBBZGRlZCB0aGUgdmlkZW8gdG8gdGhl
IHJlYWRtZSBmaWxlLgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGY0MGUzMmU2ZTcwYTUx
ZjI4NzBhZTE2NWIxY2MyYTlkNGI2MzQ3OGUgLXIgOTkyMWNlZDMzZjg1ZTk3ZDU5Njg5OGQ9CmFi
YTU0MTg5YTI1MTJmYjRhIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVB
RE1FLm1kCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1F
Lm1kCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vUkVBRE1FLm1k
CkBAIC02LDYgKzYsOCBAQAo9MjAKICFbSVB5dGhvbiBpbiBHYWxheHldKGh0dHBzOi8vcmF3Lmdp
dGh1YnVzZXJjb250ZW50LmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlwPQp5dGhvbi9tYXN0ZXIvaW1h
Z2VzL2lweXRob25faW5fZ2FsYXh5LnBuZykKPTIwCitbIVtJTUFHRSBBTFQgVEVYVCBIRVJFXSho
dHRwOi8vaW1nLnlvdXR1YmUuY29tL3ZpL2pRRHlUdVlubjFrLzAuanBnKV0oaHR0cD0KOi8vd3d3
LnlvdXR1YmUuY29tL3dhdGNoP3Y9M0RqUUR5VHVZbm4xaykKKwo9MjAKIFJlcXVpcmVtZW50cwog
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2QyYmZlYmIyYzM3ZC8KQ2hhbmdlc2V0
OiAgIGQyYmZlYmIyYzM3ZApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEFkZGVkIHBhc3N3b3JkIHByb3RlY3Rp
b24gb2YgdGhlIG5vdGVib29rCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgOTkyMWNlZDMz
Zjg1ZTk3ZDU5Njg5OGRhYmE1NDE4OWEyNTEyZmI0YSAtciBkMmJmZWJiMmMzN2QyY2I1MTNhNzk3
Yj0KMDdhMDcxMjIwMjVjMzExMTYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNiw2ICs2
LDcgQEAKIGltcG9ydCBzaGxleAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNodXRpbAoraW1wb3J0
IGhhc2hsaWIKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBDb25m
aWdQYXJzZXIKQEAgLTY4LDYgKzY5LDEyIEBACj0yMAogdGVtcF9kaXIgPTNEIG9zLnBhdGguYWJz
cGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkKPTIwCisjIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3
b3JkICsgc2FsdAorbm90ZWJvb2tfcHdfc2FsdCA9M0QgJycuam9pbihyYW5kb20uY2hvaWNlKCcw
MTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3Q9CnV2d3h5eicpIGZvciBfIGluIHJhbmdlKDEy
KSkKK25vdGVib29rX3B3ID0zRCAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNk
ZWZnaGlqa2xtbm9wcXJzdHV2d3h5PQp6JykgZm9yIF8gaW4gcmFuZ2UoMjQpKQorbSA9M0QgaGFz
aGxpYi5zaGExKCkKK20udXBkYXRlKCBub3RlYm9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQor
CiBjb25mX2ZpbGUgPTNEIHsKICAgICAnaGlzdG9yeV9pZCc6IGhpc3RvcnlfaWQsCiAgICAgJ2dh
bGF4eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8nKSwKQEAgLTc1LDYg
KzgyLDcgQEAKICAgICAncmVtb3RlX2hvc3QnOiByZXF1ZXN0LnJlbW90ZV9hZGRyLAogICAgICdn
YWxheHlfcGFzdGVyX3BvcnQnOiBnYWxheHlfcGFzdGVyX3BvcnQsCiAgICAgJ2RvY2tlcl9wb3J0
JzogUE9SVCwKKyAgICAnbm90ZWJvb2tfcGFzc3dvcmQnOiAnc2hhMTolczolcycgJSAobm90ZWJv
b2tfcHdfc2FsdCwgbS5oZXhkaWdlc3QoKSksCiB9Cj0yMAogd2l0aCBvcGVuKCBvcy5wYXRoLmpv
aW4oIHRlbXBfZGlyLCAnY29uZi55YW1sJyApLCAnd2InICkgYXMgaGFuZGxlOgpAQCAtMTA1LDYg
KzExMyw3IEBACj0yMAo9MjAKIDxib2R5PgorWW91ciBwYXNzd29yZCBpczogJHsgbm90ZWJvb2tf
cHcgfQogICAgIDxvYmplY3QgZGF0YT0zRCIke25vdGVib29rX2FjY2Vzc191cmx9IiBoZWlnaHQ9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI9Cj48ZW1iZWQgc3JjPTNEIiR7bm90ZWJvb2tfYWNjZXNz
X3VybH0iIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj48L2VtYj0KZWQ+CgoKaHR0cHM6
Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzM4Mzc0YTExMThl
Zi8KQ2hhbmdlc2V0OiAgIDM4Mzc0YTExMThlZgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTog
ICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIENvbXBsZXRlbHkg
d29ya2luZyBsb2dpbiBzeXN0ZW0KQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgZDJiZmVi
YjJjMzdkMmNiNTEzYTc5N2IwN2EwNzEyMjAyNWMzMTExNiAtciAzODM3NGExMTE4ZWZhZjA5ZmQw
MjQ5Mj0KZmQ2NjAzY2YwMGRkMTkxOGMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9jb25mL2lweXRob24uY29uZgotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYKQEAgLTEsNyArMSw3IEBACiBbbWFpbl0K
LWFwYWNoZV91cmxzID0zRCBGYWxzZQorYXBhY2hlX3VybHMgPTNEIFRydWUKPTIwCiBbZG9ja2Vy
XQotY29tbWFuZCA9M0QgImRvY2tlciIKLWltYWdlID0zRCAiYmdydWVuaW5nL2RvY2tlci1pcHl0
aG9uLW5vdGVib29rIgorY29tbWFuZCA9M0QgImRvY2tlci5pbyIKK2ltYWdlID0zRCAiaXB5dGhv
bi1ub3RlYm9vayIKPTIwCgpkaWZmIC1yIGQyYmZlYmIyYzM3ZDJjYjUxM2E3OTdiMDdhMDcxMjIw
MjVjMzExMTYgLXIgMzgzNzRhMTExOGVmYWYwOWZkMDI0OTI9CmZkNjYwM2NmMDBkZDE5MThjIGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0K
YWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVz
L2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTEwMCw4ICsxMDAsMTAgQEAKPTIwCiBpZiBpcHlf
dml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgImFwYWNoZV91cmxzIik6CiAgICAgbm90ZWJv
b2tfYWNjZXNzX3VybCA9M0QgImh0dHA6Ly8lcy9pcHl0aG9uLyVzL25vdGVib29rcy9pcHl0aG9u
X2dhbGF4eT0KX25vdGVib29rLmlweW5iIiAlICggSE9TVCwgUE9SVCApCisgICAgbm90ZWJvb2tf
bG9naW5fdXJsID0zRCAiaHR0cDovLyVzL2lweXRob24vJXMvbG9naW4/bmV4dD0zRCUlMkZpcHl0
aG9uJT0KJTJGJXMlJTJGbm90ZWJvb2tzJSUyRmlweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5i
IiAlICggSE9TVCwgUE9SVCwgUE9SVCApCiBlbHNlOgogICAgIG5vdGVib29rX2FjY2Vzc191cmwg
PTNEICJodHRwOi8vJXM6JXMvaXB5dGhvbi8lcy9ub3RlYm9va3MvaXB5dGhvbl9nYWw9CmF4eV9u
b3RlYm9vay5pcHluYiIgJSAoIEhPU1QsIFBPUlQsIFBPUlQgKQorICAgIG5vdGVib29rX2xvZ2lu
X3VybCA9M0QgImh0dHA6Ly8lczolcy9pcHl0aG9uLyVzL2xvZ2luP25leHQ9M0QlJTJGaXB5dGg9
Cm9uJSUyRiVzJSUyRm5vdGVib29rcyUlMkZpcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYiIg
JSAoIEhPU1QsIFBPUlQsIFBPUj0KVCwgUE9SVCApCiBzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2Nt
ZCwgc2hlbGw9M0RUcnVlKQo9MjAKICMgV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBJbWFnZSBh
bmQgSVB5dGhvbiBpbiBsb2FkZWQKQEAgLTExMCwxMyArMTEyLDM1IEBACj0yMAogJT48aHRtbD4K
LQotCis8aGVhZD4KKyR7aC5qcyggJ2xpYnMvanF1ZXJ5L2pxdWVyeScgKSB9Cis8L2hlYWQ+PGJv
ZHk+Ci1Zb3VyIHBhc3N3b3JkIGlzOiAkeyBub3RlYm9va19wdyB9Ci0gICAgPG9iamVjdCBkYXRh
PTNEIiR7bm90ZWJvb2tfYWNjZXNzX3VybH0iIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAl
Ij4KLSAgICAgICAgPGVtYmVkIHNyYz0zRCIke25vdGVib29rX2FjY2Vzc191cmx9IiBoZWlnaHQ9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwPQolIj4KLSAgICAgICAgPC9lbWJlZD4KLSAgICA8L29iamVj
dD4KKzxzY3JpcHQgdHlwZT0zRCJ0ZXh0L2phdmFzY3JpcHQiPgorLy8gT24gZG9jdW1lbnQgcmVh
ZHkKKyQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgLy8gTWFrZSBhbiBBSkFY
IFBPU1QKKyAgICAkLmFqYXgoeworICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgIC8vIHRv
IHRoZSBMb2dpbiBVUkwKKyAgICAgICAgdXJsOiAiJHsgbm90ZWJvb2tfbG9naW5fdXJsIH0iLAor
ICAgICAgICAvLyBXaXRoIG91ciBwYXNzd29yZAorICAgICAgICBkYXRhOiB7CisgICAgICAgICAg
ICAncGFzc3dvcmQnOiAnJHsgbm90ZWJvb2tfcHcgfScKKyAgICAgICAgfSwKKyAgICAgICAgLy8g
SWYgdGhhdCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBpZnJhbWUgZWxlbWVudAorICAgICAgICBz
dWNjZXNzOiBmdW5jdGlvbigpeworICAgICAgICAgICAgdmFyIGZyYW1lID0zRCAkKCc8aWZyYW1l
IC8+JywgeworICAgICAgICAgICAgICAgIG5hbWU6ICdyZW1vdGVfbm90ZWJvb2snLAorICAgICAg
ICAgICAgICAgIGlkOiAncmVtb3RlX25vdGVib29rJywKKyAgICAgICAgICAgICAgICBzcmM6ICck
eyBub3RlYm9va19hY2Nlc3NfdXJsIH0nLAorICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUn
LAorICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgZnJhbWUuYXBwZW5kVG8oJ2JvZHknKTsKKyAgICAgICAgfQorICAgIH0pOworfSk7Cis8
L3NjcmlwdD48L2JvZHk+PC9odG1sPgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy80YTlhYzE2OTdiYjAvCkNoYW5nZXNldDogICA0YTlhYzE2OTdi
YjAKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0
KzAwOjAwClN1bW1hcnk6ICAgICBSZXBsYWNlZCBpZnJhbWUgd2l0aCBlbWJlZCBmb3IgYWVzdGhl
dGljcwpOb3cgd2hlbmV2ZXIgYSBub3RlYm9vayBpcyBsb2FkZWQgd2UgZmlyc3QgZG8gYSBQT1NU
IHRvIHRoZSBub3RlYm9vayBsb2dpbiA9ClVSTCB3aXRoIHRoZSBjb3JyZWN0CmF1dGhlbnRpY2F0
aW9uIGRldGFpbHMuIFRoaXMgbG9ncyB1cyBpbiBhbmQgc3RvcmVzIGEgY29va2llIGZvciB1cy4g
T25jZSB0aD0KaXMgaXMgZG9uZSwgKGFuZCB3ZSBrbm93CndlIHdlcmUgc3VjY2Vzc2Z1bCkgd2Ug
YWRkIHRoZSBlbWJlZC9vYmplY3QgZWxlbWVudHMgdG8gdGhlIGJvZHkgb2YgdGhlIHBhZz0KZSwg
d2hpY2ggdGhlIGJyb3dzZXIgdGhlbgpsb2Fkcy4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAt
ciAzODM3NGExMTE4ZWZhZjA5ZmQwMjQ5MmZkNjYwM2NmMDBkZDE5MThjIC1yIDRhOWFjMTY5N2Ji
MDk3NzQxMWE3NjAwPQo2Yjg5NTg2YTAwMTU4NmQ1OCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CkBAIC0xMjgsMTYgKzEyOCwyMyBAQAogICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAncGFz
c3dvcmQnOiAnJHsgbm90ZWJvb2tfcHcgfScKICAgICAgICAgfSwKLSAgICAgICAgLy8gSWYgdGhh
dCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBpZnJhbWUgZWxlbWVudAorICAgICAgICAvLyBJZiB0
aGF0IGlzIHN1Y2Nlc3NmdWwsIGxvYWQgdGhlIG5vdGVib29rCiAgICAgICAgIHN1Y2Nlc3M6IGZ1
bmN0aW9uKCl7Ci0gICAgICAgICAgICB2YXIgZnJhbWUgPTNEICQoJzxpZnJhbWUgLz4nLCB7Ci0g
ICAgICAgICAgICAgICAgbmFtZTogJ3JlbW90ZV9ub3RlYm9vaycsCi0gICAgICAgICAgICAgICAg
aWQ6ICdyZW1vdGVfbm90ZWJvb2snLAotICAgICAgICAgICAgICAgIHNyYzogJyR7IG5vdGVib29r
X2FjY2Vzc191cmwgfScsCi0gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsCi0gICAgICAg
ICAgICAgICAgd2lkdGg6ICcxMDAlJwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBmcmFt
ZS5hcHBlbmRUbygnYm9keScpOworICAgICAgICAgICAgLy9BcHBlbmQgYW4gb2JqZWN0IHRvIHRo
ZSBib2R5CisgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKAorICAgICAgICAgICAgICAgICQo
JzxvYmplY3QvPicsIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNj
ZXNzX3VybCB9JywKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsCisgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScKKyAgICAgICAgICAgICAgICB9KS5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgICAgIC8vIEFuZCBhbiBlbWJlZCB0byB0aGUgb2JqZWN0CisgICAgICAg
ICAgICAgICAgICAgICQoJzxlbWJlZC8+JywgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Jj
OiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodDogJzEwMCUnLAorICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJworICAg
ICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICk7CiAg
ICAgICAgIH0KICAgICB9KTsKIH0pOwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy85YjIwMWVhMTkwODkvCkNoYW5nZXNldDogICA5YjIwMWVhMTkw
ODkKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0
KzAwOjAwClN1bW1hcnk6ICAgICBBY2NpZGVudGFsbHkgb3Zlcndyb3RlIHJlbW90ZSB3aXRoIGxv
Y2FsIGNoYW5nZXMsIHJldmVydGluZwpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDRhOWFj
MTY5N2JiMDk3NzQxMWE3NjAwNmI4OTU4NmEwMDE1ODZkNTggLXIgOWIyMDFlYTE5MDg5M2MyM2Vk
ZDBjMzk9CmU4NDgyMTQ0MGZhMzBjZGQ5IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vY29uZi9pcHl0aG9uLmNvbmYKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9jb25mL2lweXRob24uY29uZgorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCkBAIC0yLDYgKzIsNiBAQAogYXBhY2hl
X3VybHMgPTNEIFRydWUKPTIwCiBbZG9ja2VyXQotY29tbWFuZCA9M0QgImRvY2tlci5pbyIKLWlt
YWdlID0zRCAiaXB5dGhvbi1ub3RlYm9vayIKK2NvbW1hbmQgPTNEICJkb2NrZXIiCitpbWFnZSA9
M0QgImJncnVlbmluZy9kb2NrZXItaXB5dGhvbi1ub3RlYm9vayIKPTIwCgoKaHR0cHM6Ly9iaXRi
dWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzIzMmIxYmY4OGQ4OS8KQ2hh
bmdlc2V0OiAgIDIzMmIxYmY4OGQ4OQpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAg
IDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFVwZGF0ZWQgUkVBRE1FIHdp
dGggc2VjdXJpdHkgaW5mb3JtYXRpb24KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA5YjIw
MWVhMTkwODkzYzIzZWRkMGMzOWU4NDgyMTQ0MGZhMzBjZGQ5IC1yIDIzMmIxYmY4OGQ4OTZiNGE3
MjcyZjViPQo2MDhjMjYwZTM1NGQ4MTZhMSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL1JFQURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L1JFQURNRS5tZApAQCAtOTMsMTcgKzkzLDE2IEBACiBTZWN1cml0eQogPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNECj0yMAotICogQ29udGFpbmVycyBjYW4gYmUgc2VjdXJlZCB2aWEgQXBhY2hlK1NT
TC4gUGxlYXNlIHNlZSB0aGUgW3NldHVwXShJTlNUQUw9CkwubWQpIGRvY3VtZW50IGZvciBtb3Jl
Ci0gICBpbmZvcm1hdGlvbi4KLSAqIENvbnRhaW5lcnMgd2lsbCBzb29uIGhhdmUgYGlwdGFibGVz
YCBiYXNlZCBzZWN1cml0eSB0byBwcm92aWRlIGEgbWluaW11PQptIGF0dGVtcHQgYXQgcHJldmVu
dGluZwotICAgdXNlcnMgZnJvbSBhY2Nlc3Npbmcgb25lIGFub3RoZXIncyBub3RlYm9va3MuCitD
b250YWluZXJzIHNob3VsZCBiZSBzZWN1cmVkIHZpYSBBcGFjaGUrU1NMIGZvciBwcm9kdWN0aW9u
IHVzYWdlLiBQbGVhc2Ugcz0KZWUgdGhlIFtzZXR1cF0oSU5TVEFMTC5tZCkgZG9jdW1lbnQgZm9y
IG1vcmUgaW5mb3JtYXRpb24uCisKK0luZGl2aWR1YWwgbm90ZWJvb2tzIGFyZSBwYXNzd29yZCBw
cm90ZWN0ZWQgdGhyb3VnaCBhIHBhc3N3b3JkIGtub3duIG9ubHkgPQp0byB0aGUgR2FsYXh5IHVz
ZXIncyBicm93c2VyIGFuZCB0byB0aGUgY29udGFpbmVyLiBXaGlsZSB0aGlzIGRvZXMgbm90IHBy
ZXY9CmVudCBwb3J0IG1hcHBpbmcgZm9sbG93ZWQgYnkgcGFzc3dvcmQgYnJ1dGVmb3JjaW5nLCB3
ZSBiZWxpZXZlIHdlIGhhdmUgc3VjYz0KZXNmdWxseSBsaW1pdGVkIGFjY2VzcyB0byB0aGUgbm90
ZWJvb2sgdG8gb25seSBhdXRob3JpemVkIHVzZXJzLiBXZSBhcmUgdmVyPQp5IGNvbmNlcm5lZCBh
Ym91dCBzZWN1cml0eSBpc3N1ZXMgd2l0aCBJUHl0aG9uIGVtYmVkZGVkIHdpdGhpbiBnYWxheHks
IHNvIGk9CmYgeW91IGZpbmQgYSB2dWxuZXJhYmlsaXR5IGluIHRoZSBzeXN0ZW0gd2UndmUgZGV2
aXNlZCwgcGxlYXNlIGNvbnRhY3QgdXMgYT0KbmQgd2UnbGwgcGF0Y2ggaXQgYXMgc29vbiBhcyBw
b3NzaWJsZSEKPTIwCj0yMAogQXV0aG9ycwogPTNEPTNEPTNEPTNEPTNEPTNEPTNECj0yMAogICog
Qmo9QzM9QjZybiBHcj1DMz1CQ25pbmcKLSAqIEVyaWMgUmFzY2hlCisgKiBFcmljIFJhc2NoZSA8
cmFzY2hlLmVyaWNAeWFuZGV4LnJ1Pgo9MjAKPTIwCiBIaXN0b3J5CgoKaHR0cHM6Ly9iaXRidWNr
ZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzkzMzQ4YTYxZGVhMy8KQ2hhbmdl
c2V0OiAgIDkzMzQ4YTYxZGVhMwpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIw
MTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEJldHRlciBmYWlsb3ZlciBpbiBh
bGwgc2l0dWF0aW9ucwpQcmV2aW91c2x5IGluIGEgc3BlY2lmaWMgc2l0dWF0aW9uIChhcGFjaGVf
dXJscyA9M0QgRmFsc2UgYW5kIHBhc3N3b3JkX2F1dGg9CiA9M0QgVHJ1ZSksIHdlIHNhdyB0aGF0
IHVzZXJzCndvdWxkIHNlZSBhIGJsYW5rIHNjcmVlbiByYXRoZXIgdGhhbiBhbiBpbmZvcm1hdGl2
ZSBlcnJvciBtZXNzYWdlLiBUaGlzIHNobz0KdWxkIG5vdCBoYXBwZW4gdW5kZXIgYW55CmNpcmN1
bXN0YW5jZXMuCgpUaGlzIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggbG9naWMgdG8gaGFuZGxlIHRo
ZSBmYWlsdXJlIG1vZGVzIGluIGFzIHNhbmUgb2Y9CiBhIHdheSBhcyBwb3NzaWJsZS4gSWYKdGhl
IGFib3ZlIHNpdHVhdGlvbiBpcyB0cnVlLCB3ZSBwcm92aWRlIHRoZSB1c2VycyB3aXRoIHRoZWly
IHJhbmRvbSBwYXNzd29yPQpkIGFuZCBhIGxvZ2luIGJveC4gSWYgYW55Cm90aGVyIGJhZCBzaXR1
YXRpb24gb2NjdXJzLCB3ZSBwYXNzIHRoZSBlcnJvciBtZXNzYWdlIGFsb25nIHRvIHRoZW0uCgpB
ZGRpdGlvbmFsbHkgYSBuZXcgdmFyaWFibGUgInBhc3N3b3JkX2F1dGgiIGhhcyBiZWVuIGludHJv
ZHVjZWQsIGRlc2NyaWJpbmc9CiB3aGV0aGVyIG9yIG5vdCBwYXNzd29yZHMKc2hvdWxkIGJlIHVz
ZWQgdG8gYXV0aGVudGljYXRlIHVzZXJzIChtb3N0bHkgYXV0by1tYWdpY2FsbHkpIGFnYWluc3Qg
dGhlaXIgPQpub3RlYm9va3MuCgpCZWNhdXNlIHdlIGhhdmUgY29udHJvbCBvdmVyIHRoaXMgZG9j
a2VyIGltYWdlLCBpdCBpcyBwb3NzaWJsZSB3ZSBjYW4gaGFuZGw9CmUgdGhhdCBzcGVjaWZpYyBj
YXNlCmFib3ZlIGJ5IGNvbnZpbmNpbmcgaXB5dGhvbiB0byBzZXQgYSBjb250ZW50LW9yaWdpbiBo
ZWFkZXIgYWxsb3dpbmcgdGhlIGdhbD0KYXh5IGhvc3QgdG8gbWFrZSB0aGUgSlMKbG9naW4gcmVx
dWVzdC4KQWZmZWN0ZWQgIzogIDMgZmlsZXMKCmRpZmYgLXIgMjMyYjFiZjg4ZDg5NmI0YTcyNzJm
NWI2MDhjMjYwZTM1NGQ4MTZhMSAtciA5MzM0OGE2MWRlYTM3YWZiZWRlM2VjOT0KOWJkODQ5MTcx
MjUzYzA1ZDMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQK
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKKysr
IGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQKQEAgLTkz
LDkgKzkzLDEyIEBACiBTZWN1cml0eQogPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECj0yMAotQ29u
dGFpbmVycyBzaG91bGQgYmUgc2VjdXJlZCB2aWEgQXBhY2hlK1NTTCBmb3IgcHJvZHVjdGlvbiB1
c2FnZS4gUGxlYXNlIHM9CmVlIHRoZSBbc2V0dXBdKElOU1RBTEwubWQpIGRvY3VtZW50IGZvciBt
b3JlIGluZm9ybWF0aW9uLgorQnkgZGVmYXVsdCwgbm8gc2VjdXJpdHkgdHVybmVkIG9uLiBUbyBk
byB0aGlzLCB5b3UgbXVzdCBhZGp1c3QgdHdvIHZhcmlhYmw9CmVzLCBgYXBhY2hlX3VybHNgIGFu
ZAorYHBhc3N3b3JkX2F1dGhgIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKGBjb25maWcvaXB5
dGhvbi5jb25mYCkuPTIwCj0yMAotSW5kaXZpZHVhbCBub3RlYm9va3MgYXJlIHBhc3N3b3JkIHBy
b3RlY3RlZCB0aHJvdWdoIGEgcGFzc3dvcmQga25vd24gb25seSA9CnRvIHRoZSBHYWxheHkgdXNl
cidzIGJyb3dzZXIgYW5kIHRvIHRoZSBjb250YWluZXIuIFdoaWxlIHRoaXMgZG9lcyBub3QgcHJl
dj0KZW50IHBvcnQgbWFwcGluZyBmb2xsb3dlZCBieSBwYXNzd29yZCBicnV0ZWZvcmNpbmcsIHdl
IGJlbGlldmUgd2UgaGF2ZSBzdWNjPQplc2Z1bGx5IGxpbWl0ZWQgYWNjZXNzIHRvIHRoZSBub3Rl
Ym9vayB0byBvbmx5IGF1dGhvcml6ZWQgdXNlcnMuIFdlIGFyZSB2ZXI9CnkgY29uY2VybmVkIGFi
b3V0IHNlY3VyaXR5IGlzc3VlcyB3aXRoIElQeXRob24gZW1iZWRkZWQgd2l0aGluIGdhbGF4eSwg
c28gaT0KZiB5b3UgZmluZCBhIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIHN5c3RlbSB3ZSd2ZSBkZXZp
c2VkLCBwbGVhc2UgY29udGFjdCB1cyBhPQpuZCB3ZSdsbCBwYXRjaCBpdCBhcyBzb29uIGFzIHBv
c3NpYmxlIQorVGhlIGBhcGFjaGVfdXJsc2AgdmFyaWFibGUgc2hvdWxkIGJlIHNldCB0byBgVHJ1
ZWAsIGFuZCBjb250YWluZXJzIHNob3VsZCA9CmJlIHNlY3VyZWQgdmlhIEFwYWNoZStTU0wgZm9y
IHByb2R1Y3Rpb24gdXNhZ2UuIFBsZWFzZSBzZWUgdGhlIFtzZXR1cF0oSU5TVD0KQUxMLm1kKSBk
b2N1bWVudCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworVGhlIGBwYXNzd29yZF9hdXRoYCB2YXJp
YWJsZSBzaG91bGQgYmUgc2V0IHRvIGBUcnVlYC4gSXQgZnVuY3Rpb25zIGJ5IGdlbmU9CnJhdGlu
ZyBhIHJhbmRvbSBwYXNzd29yZCB3aGljaCBpcyBvbmx5IHNoYXJlZCB3aXRoIHRoZSBkb2NrZXIs
IGFuZCB0aGUgdXNlcj0KJ3MgYnJvd3NlciB0aHJvdWdoIEdhbGF4eS4gSW4gdGhlb3J5IHRoaXMg
c2hvdWxkIGJlIGEgc2VjdXJlIHN5c3RlbSAob3IgYXQgPQpsZWFzdCBhcyBzZWN1cmUgYXMgdGhl
IHdlYWtlc3QgbGluayksIGhvd2V2ZXIgaWYgeW91IGZpbmQgYSB2dWxuZXJhYmlsaXR5IGk9Cm4g
dGhlIHN5c3RlbSB3ZSd2ZSBkZXZpc2VkLCBwbGVhc2UgY29udGFjdCB1cyBhbmQgd2UnbGwgcGF0
Y2ggaXQgYXMgc29vbiBhcz0KIHBvc3NpYmxlIQo9MjAKPTIwCiBBdXRob3JzCgpkaWZmIC1yIDIz
MmIxYmY4OGQ4OTZiNGE3MjcyZjViNjA4YzI2MGUzNTRkODE2YTEgLXIgOTMzNDhhNjFkZWEzN2Fm
YmVkZTNlYzk9CjliZDg0OTE3MTI1M2MwNWQzIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24uY29uZgorKysgYi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCkBAIC0xLDUgKzEsNiBAQAogW21h
aW5dCi1hcGFjaGVfdXJscyA9M0QgVHJ1ZQorYXBhY2hlX3VybHMgPTNEIEZhbHNlCitwYXNzd29y
ZF9hdXRoID0zRCBGYWxzZQo9MjAKIFtkb2NrZXJdCiBjb21tYW5kID0zRCAiZG9ja2VyIgoKZGlm
ZiAtciAyMzJiMWJmODhkODk2YjRhNzI3MmY1YjYwOGMyNjBlMzU0ZDgxNmExIC1yIDkzMzQ4YTYx
ZGVhMzdhZmJlZGUzZWM5PQo5YmQ4NDkxNzEyNTNjMDVkMyBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
YWtvCkBAIC0zMSw3ICszMSw4IEBACiBvdXJfY29uZmlnX2RpciA9M0Qgb3MucGF0aC5qb2luKHZp
el9wbHVnaW5fZGlyLCAiY29uZmlnIikKIG91cl90ZW1wbGF0ZV9kaXIgPTNEIG9zLnBhdGguam9p
bih2aXpfcGx1Z2luX2RpciwgInRlbXBsYXRlcyIpCiBpcHlfdml6X2NvbmZpZyA9M0QgQ29uZmln
UGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydhcGFjaGVfdXJscyc6IEZhbHNlLCAnYz0Kb21tYW5k
JzogJ2RvY2tlcicsICdpbWFnZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLT0Kbm90ZWJvb2snfSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ3J1ZW5pbmcv
ZG9ja2VyLWlweXRob24tPQpub3RlYm9vaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncGFzc3dvcmRfYXV0aCc6IEZhbHNlfSkKIGlweV92aXpfY29u
ZmlnLnJlYWQoIG9zLnBhdGguam9pbiggb3VyX2NvbmZpZ19kaXIsICJpcHl0aG9uLmNvbmYiICkg
KQo9MjAKICMgRW5zdXJlIGdlbmVyYXRpb24gb2Ygbm90ZWJvb2sgaWQgaXMgZGV0ZXJtaW5pc3Rp
YyBmb3IgdGhlIGRhdGFzZXQuIFJlcGxhPQpjZSB3aXRoIGhpc3RvcnkgaWQKQEAgLTY5LDExICs3
MCw2IEBACj0yMAogdGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVt
cCgpICkKPTIwCi0jIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAotbm90ZWJvb2tf
cHdfc2FsdCA9M0QgJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmZ2hpamts
bW5vcHFyc3Q9CnV2d3h5eicpIGZvciBfIGluIHJhbmdlKDEyKSkKLW5vdGVib29rX3B3ID0zRCAn
Jy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
PQp6JykgZm9yIF8gaW4gcmFuZ2UoMjQpKQotbSA9M0QgaGFzaGxpYi5zaGExKCkKLW0udXBkYXRl
KCBub3RlYm9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQo9MjAKIGNvbmZfZmlsZSA9M0Qgewog
ICAgICdoaXN0b3J5X2lkJzogaGlzdG9yeV9pZCwKQEAgLTgyLDEyICs3OCwyNiBAQAogICAgICdy
ZW1vdGVfaG9zdCc6IHJlcXVlc3QucmVtb3RlX2FkZHIsCiAgICAgJ2dhbGF4eV9wYXN0ZXJfcG9y
dCc6IGdhbGF4eV9wYXN0ZXJfcG9ydCwKICAgICAnZG9ja2VyX3BvcnQnOiBQT1JULAotICAgICdu
b3RlYm9va19wYXNzd29yZCc6ICdzaGExOiVzOiVzJyAlIChub3RlYm9va19wd19zYWx0LCBtLmhl
eGRpZ2VzdCgpKSwKIH0KPTIwCitpZiBpcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwg
InBhc3N3b3JkX2F1dGgiKToKKyAgICAjIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2Fs
dAorICAgIG5vdGVib29rX3B3X3NhbHQgPTNEICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1
Njc4OWFiY2RlZmdoaWprbG1ub3A9CnFyc3R1dnd4eXonKSBmb3IgXyBpbiByYW5nZSgxMikpCisg
ICAgbm90ZWJvb2tfcHcgPTNEICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2Rl
ZmdoaWprbG1ub3BxcnN0dT0Kdnd4eXonKSBmb3IgXyBpbiByYW5nZSgyNCkpCisgICAgbSA9M0Qg
aGFzaGxpYi5zaGExKCkKKyAgICBtLnVwZGF0ZSggbm90ZWJvb2tfcHcgKyBub3RlYm9va19wd19z
YWx0ICkKKyAgICBjb25mX2ZpbGVbJ25vdGVib29rX3Bhc3N3b3JkJ10gPTNEICdzaGExOiVzOiVz
JyAlIChub3RlYm9va19wd19zYWx0LCBtPQouaGV4ZGlnZXN0KCkpCisgICAgIyBTaG91bGQgd2Ug
dXNlIHBhc3N3b3JkIGJhc2VkIGNvbm5lY3Rpb24gb3IgImRlZmF1bHQiIGNvbm5lY3Rpb24gc3R5
bD0KZSBpbiBnYWxheHkKKyAgICBwYXNzd29yZF9hdXRoX2pzdmFyID0zRCAidHJ1ZSIKK2Vsc2U6
CisgICAgbm90ZWJvb2tfcHcgPTNEICJOb25lIgorICAgIHBhc3N3b3JkX2F1dGhfanN2YXIgPTNE
ICJmYWxzZSIKKworIyBXcml0ZSBjb25mCiB3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggdGVtcF9k
aXIsICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYW5kbGU6CiAgICAgaGFuZGxlLndyaXRlKCB5
YW1sLmR1bXAoY29uZl9maWxlLCBkZWZhdWx0X2Zsb3dfc3R5bGU9M0RGYWxzZSkgKQo9MjAKKyMg
Q29weSBvdmVyIGRlZmF1bHQgbm90ZWJvb2ssIHVubGVzcyB0aGUgZGF0YXNldCB0aGlzIHZpeiBp
cyBydW5uaW5nIG9uIGlzPQogYSBub3RlYm9vawogZW1wdHlfbmJfcGF0aCA9M0Qgb3MucGF0aC5q
b2luKHRlbXBfZGlyLCAnaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQogaWYgaGRhLmRh
dGF0eXBlLl9fY2xhc3NfXy5fX25hbWVfXyAhPTNEICJJcHluYiI6CiAgICAgd2l0aCBvcGVuKCBl
bXB0eV9uYl9wYXRoLCAndysnICkgYXMgaGFuZGxlOgpAQCAtOTgsMTIgKzEwOCwxNSBAQAogZG9j
a2VyX2NtZCA9M0QgJyVzIHJ1biAtZCAtLXNpZy1wcm94eT0zRHRydWUgLXAgJXM6Njc4OSAtdiAi
JXM6L2ltcG9ydC8iICU9CnMnICUgXAogICAgIChpcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIs
ICJjb21tYW5kIiksIFBPUlQsIHRlbXBfZGlyLCBpcHlfdml6X2NvbmY9CmlnLmdldCgiZG9ja2Vy
IiwgImltYWdlIikpCj0yMAorIyBBY2Nlc3MgVVJMcyBmb3IgdGhlIG5vdGVib29rIGZyb20gd2l0
aGluIGdhbGF4eS4KIGlmIGlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAiYXBhY2hl
X3VybHMiKToKICAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAiaHR0cDovLyVzL2lweXRob24v
JXMvbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5PQpfbm90ZWJvb2suaXB5bmIiICUgKCBIT1NULCBQ
T1JUICkKICAgICBub3RlYm9va19sb2dpbl91cmwgPTNEICJodHRwOi8vJXMvaXB5dGhvbi8lcy9s
b2dpbj9uZXh0PTNEJSUyRmlweXRob24lPQolMkYlcyUlMkZub3RlYm9va3MlJTJGaXB5dGhvbl9n
YWxheHlfbm90ZWJvb2suaXB5bmIiICUgKCBIT1NULCBQT1JULCBQT1JUICkKKyAgICBhcGFjaGVf
dXJsc19qc3ZhciA9M0QgInRydWUiCiBlbHNlOgogICAgIG5vdGVib29rX2FjY2Vzc191cmwgPTNE
ICJodHRwOi8vJXM6JXMvaXB5dGhvbi8lcy9ub3RlYm9va3MvaXB5dGhvbl9nYWw9CmF4eV9ub3Rl
Ym9vay5pcHluYiIgJSAoIEhPU1QsIFBPUlQsIFBPUlQgKQogICAgIG5vdGVib29rX2xvZ2luX3Vy
bCA9M0QgImh0dHA6Ly8lczolcy9pcHl0aG9uLyVzL2xvZ2luP25leHQ9M0QlJTJGaXB5dGg9Cm9u
JSUyRiVzJSUyRm5vdGVib29rcyUlMkZpcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYiIgJSAo
IEhPU1QsIFBPUlQsIFBPUj0KVCwgUE9SVCApCisgICAgYXBhY2hlX3VybHNfanN2YXIgPTNEICJm
YWxzZSIKIHN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCj0yMAogIyBX
ZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIEltYWdlIGFuZCBJUHl0aG9uIGluIGxvYWRlZApAQCAt
MTE3LDM3ICsxMzAsODcgQEAKIDwvaGVhZD48Ym9keT48c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZh
c2NyaXB0Ij4KLS8vIE9uIGRvY3VtZW50IHJlYWR5Ci0kKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0
aW9uKCkgewotICAgIC8vIE1ha2UgYW4gQUpBWCBQT1NUCi0gICAgJC5hamF4KHsKLSAgICAgICAg
dHlwZTogIlBPU1QiLAotICAgICAgICAvLyB0byB0aGUgTG9naW4gVVJMCi0gICAgICAgIHVybDog
IiR7IG5vdGVib29rX2xvZ2luX3VybCB9IiwKLSAgICAgICAgLy8gV2l0aCBvdXIgcGFzc3dvcmQK
LSAgICAgICAgZGF0YTogewotICAgICAgICAgICAgJ3Bhc3N3b3JkJzogJyR7IG5vdGVib29rX3B3
IH0nCi0gICAgICAgIH0sCi0gICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0
aGUgbm90ZWJvb2sKLSAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIC8v
QXBwZW5kIGFuIG9iamVjdCB0byB0aGUgYm9keQotICAgICAgICAgICAgJCgnYm9keScpLmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICAkKCc8b2JqZWN0Lz4nLCB7CitpZiAoICR7IHBhc3N3b3JkX2F1
dGhfanN2YXIgfSApIHsKKyAgICAvLyBPbiBkb2N1bWVudCByZWFkeQorICAgICQoIGRvY3VtZW50
ICkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIE1ha2UgYW4gQUpBWCBQT1NUCisgICAg
ICAgICQuYWpheCh7CisgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgICAvLyB0
byB0aGUgTG9naW4gVVJMCisgICAgICAgICAgICB1cmw6ICIkeyBub3RlYm9va19sb2dpbl91cmwg
fSIsCisgICAgICAgICAgICAvLyBXaXRoIG91ciBwYXNzd29yZAorICAgICAgICAgICAgZGF0YTog
eworICAgICAgICAgICAgICAgICdwYXNzd29yZCc6ICckeyBub3RlYm9va19wdyB9JworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUg
bm90ZWJvb2sKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgLy9BcHBlbmQgYW4gb2JqZWN0IHRvIHRoZSBib2R5CisgICAgICAgICAgICAgICAgJCgnYm9k
eScpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgJCgnPG9iamVjdC8+JywgeworICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGg6ICcxMDAlJworICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBbmQgYW4gZW1iZWQgdG8gdGhlIG9iamVjdAorICAgICAgICAg
ICAgICAgICAgICAgICAgJCgnPGVtYmVkLz4nLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQ6ICcxMDAlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDogJzEwMCUnCisgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAg
ICApCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJv
cjogZnVuY3Rpb24oanF4aHIsIHN0YXR1cywgZXJyb3IpeworICAgICAgICAgICAgICAgIGlmKCR7
IHBhc3N3b3JkX2F1dGhfanN2YXIgfSAmJiAhJHsgYXBhY2hlX3VybHNfanN2YXIgfSl7CisgICAg
ICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoIkVycm9yLCBjb3VsZCBub3QgYXV0b21h
dGljYWxseSBhdXRobz0Kcml6ZSB5b3UuIFlvdXIiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKyAiIHBhc3N3b3JkIGlzOiAkeyBub3RlYm9va19wdyB9PD0KYnIvPkFz
ayB5b3VyIGFkbWluaXN0cmF0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKyAiIHRvIHNldCBhcGFjaGVfdXJscyA9M0QgVHJ1ZSB0bz0KIG1ha2UgdGhpcyBnbyBh
d2F5Iik7CisgICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAkKCc8b2JqZWN0Lz4nLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQ6ICcxMDAlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDogJzEwMCUnCisgICAgICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQW5kIGFuIGVtYmVkIHRvIHRoZSBvYmplY3QKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkKCc8ZW1iZWQvPicsIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JfbXNnID0z
RCAiPGgxPkVycm9yICIgKyBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIjwvaDE+
Q291bGQgbm90IGNvbm5lY3QgdG8gSVB5dGhvbiBOb3RlYm9vazogIgorICAgICAgICAgICAgICAg
ICAgICAgICAgKyBlcnJvciArICI8YnIvPlBsZWFzZSBjaGVjayBJUHl0aG9uIGNvbmZpZ3VyYXRp
b249CiBzZXR0aW5nczxici8+IgorICAgICAgICAgICAgICAgICAgICArICJDdXJyZW50IHNldHRp
bmdzOjxiciAvPiIKKyAgICAgICAgICAgICAgICAgICAgKyAiYXBhY2hlX3VybHM6ICIgKyAkeyBh
cGFjaGVfdXJsc19qc3ZhciB9ICsgIiA8YnIvPiIKKyAgICAgICAgICAgICAgICAgICAgKyAicGFz
c3dvcmRfYXV0aDogIiArICR7IHBhc3N3b3JkX2F1dGhfanN2YXIgfSArICIgPGJyPQovPiI7Cisg
ICAgICAgICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoIGVycm9yX21zZyApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9CitlbHNl
IHsKKyAgICAvLyBOb3QgdXNpbmcgcGFzc3dvcmQgYXV0aCwganVzdCBlbWJlZCBpdCB0byBhdm9p
ZCBjb250ZW50LW9yaWdpbiBpc3N1PQplcy4KKyAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0
aW9uKCkgeworICAgICAgICAkKCdib2R5JykuYXBwZW5kKAorICAgICAgICAgICAgJCgnPG9iamVj
dC8+JywgeworICAgICAgICAgICAgICAgIHNyYzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScs
CisgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsCisgICAgICAgICAgICAgICAgd2lkdGg6
ICcxMDAlJworICAgICAgICAgICAgfSkuYXBwZW5kKAorICAgICAgICAgICAgICAgIC8vIEFuZCBh
biBlbWJlZCB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgJCgnPGVtYmVkLz4nLCB7CiAg
ICAgICAgICAgICAgICAgICAgIHNyYzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScsCiAgICAg
ICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLAogICAgICAgICAgICAgICAgICAgICB3aWR0
aDogJzEwMCUnCi0gICAgICAgICAgICAgICAgfSkuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg
ICAvLyBBbmQgYW4gZW1iZWQgdG8gdGhlIG9iamVjdAotICAgICAgICAgICAgICAgICAgICAkKCc8
ZW1iZWQvPicsIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogJyR7IG5vdGVib29rX2Fj
Y2Vzc191cmwgfScsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScKLSAgICAgICAgICAgICAgICAgICAg
fSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApOwotICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSkKKyAgICAgICAgICAgICkKKyAgICAgICAgKTsKICAgICB9KTsKLX0pOworfQog
PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dh
bGF4eS1jZW50cmFsL2NvbW1pdHMvYmQyZDZkMWE5NzY3LwpDaGFuZ2VzZXQ6ICAgYmQyZDZkMWE5
NzY3ClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAy
MjozODowNCswMDowMApTdW1tYXJ5OiAgICAgPTNEP1VURi04P3E/SW49M0QyMEZGPTNEMjB0aGU9
M0QyMDxvYmplY3Q+PTNEMjBhdHRyaXV0ZT0zRDIwbmU9CmVkcz0zRDIwdG89M0QyMGJlPz0zRCA9
M0Q/VVRGLTg/cT89M0QyMGZyb209M0QyMHR5cGU9M0QyMCdkYXRhJz0zRDIwYW5kPTNEMj0KMG5v
dD0zRDIwJ3NyYycuPTNEMEFDaHJvbWU9M0QyMHNlZW1zPz0zRCA9M0Q/VVRGLTg/cT89M0QyMHRv
PTNEMjBiZT0zRDIwaGFwPQpweT0zRDIwd2l0aD0zRDIwJ3NyYycuPTNEMjBUaGlzPTNEMjBjb21t
aXQ9M0QyMGNoYW5nZXM9M0QyMD89M0QgPTNEP1VURi04P3E9Cj9pdD0zRDIwYmFjaz0zRDIwdG89
M0QyMCdkYXRhJy4/PTNECkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgOTMzNDhhNjFkZWEz
N2FmYmVkZTNlYzk5YmQ4NDkxNzEyNTNjMDVkMyAtciBiZDJkNmQxYTk3NjcyZWE4MGQ3YWQ2MT0K
ZTNmMDczOTE2MWJmZTQ3MTMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTQ1LDQwICsx
NDUsMTggQEAKICAgICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUg
bm90ZWJvb2sKICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAg
ICAgLy9BcHBlbmQgYW4gb2JqZWN0IHRvIHRoZSBib2R5Ci0gICAgICAgICAgICAgICAgJCgnYm9k
eScpLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgJCgnPG9iamVjdC8+JywgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGg6ICcxMDAlJwotICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBbmQgYW4gZW1iZWQgdG8gdGhlIG9iamVjdAotICAgICAgICAg
ICAgICAgICAgICAgICAgJCgnPGVtYmVkLz4nLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjOiAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQ6ICcxMDAlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDogJzEwMCUnCi0gICAgICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgICAg
ICApCi0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5k
KCc8b2JqZWN0IGRhdGE9M0QiJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9PQoiIGhlaWdodD0zRCIx
MDAlIiB3aWR0aD0zRCIxMDAlIj4nCisgICAgICAgICAgICAgICAgKyc8ZW1iZWQgc3JjPTNEIiR7
IG5vdGVib29rX2FjY2Vzc191cmwgfSIgaGVpZ2h0PTNEIjEwMCUiID0Kd2lkdGg9M0QiMTAwJSIv
Pjwvb2JqZWN0PicKKyAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKICAgICAgICAgICAgICAg
ICBpZigkeyBwYXNzd29yZF9hdXRoX2pzdmFyIH0gJiYgISR7IGFwYWNoZV91cmxzX2pzdmFyIH0p
ewogICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCJFcnJvciwgY291bGQgbm90
IGF1dG9tYXRpY2FsbHkgYXV0aG89CnJpemUgeW91LiBZb3VyIgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgIiBwYXNzd29yZCBpczogJHsgbm90ZWJvb2tfcHcgfTw9
CmJyLz5Bc2sgeW91ciBhZG1pbmlzdHJhdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICsgIiB0byBzZXQgYXBhY2hlX3VybHMgPTNEIFRydWUgdG89CiBtYWtlIHRo
aXMgZ28gYXdheSIpOwotICAgICAgICAgICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKAotICAg
ICAgICAgICAgICAgICAgICAgICAgJCgnPG9iamVjdC8+JywgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNyYzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lkdGg6ICcxMDAlJwotICAgICAgICAgICAgICAgICAgICAgICAgfSkuYXBwZW5kKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuZCBhbiBlbWJlZCB0byB0aGUgb2JqZWN0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGVtYmVkLz4nLCB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNyYzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNE
IiR7IG5vdGVib29rX2FjY2Vzc191PQpybCB9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAw
JSI+JworICAgICAgICAgICAgICAgICAgICArJzxlbWJlZCBzcmM9M0QiJHsgbm90ZWJvb2tfYWNj
ZXNzX3VybCB9IiBoZWlnaHQ9M0QiMTA9CjAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmplY3Q+Jwor
ICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAg
ICAgICAgICAgIHZhciBlcnJvcl9tc2cgPTNEICI8aDE+RXJyb3IgIiArIHN0YXR1cwogICAgICAg
ICAgICAgICAgICAgICAgICAgKyAiPC9oMT5Db3VsZCBub3QgY29ubmVjdCB0byBJUHl0aG9uIE5v
dGVib29rOiAiCkBAIC0xOTUsMjAgKzE3Myw5IEBACiBlbHNlIHsKICAgICAvLyBOb3QgdXNpbmcg
cGFzc3dvcmQgYXV0aCwganVzdCBlbWJlZCBpdCB0byBhdm9pZCBjb250ZW50LW9yaWdpbiBpc3N1
PQplcy4KICAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAgICAkKCdi
b2R5JykuYXBwZW5kKAotICAgICAgICAgICAgJCgnPG9iamVjdC8+JywgewotICAgICAgICAgICAg
ICAgIHNyYzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScsCi0gICAgICAgICAgICAgICAgaGVp
Z2h0OiAnMTAwJScsCi0gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJwotICAgICAgICAgICAg
fSkuYXBwZW5kKAotICAgICAgICAgICAgICAgIC8vIEFuZCBhbiBlbWJlZCB0byB0aGUgb2JqZWN0
Ci0gICAgICAgICAgICAgICAgJCgnPGVtYmVkLz4nLCB7Ci0gICAgICAgICAgICAgICAgICAgIHNy
YzogJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfScsCi0gICAgICAgICAgICAgICAgICAgIGhlaWdo
dDogJzEwMCUnLAotICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnCi0gICAgICAgICAg
ICAgICAgfSkKLSAgICAgICAgICAgICkKLSAgICAgICAgKTsKKyAgICAgICAgJCgnYm9keScpLmFw
cGVuZCgnPG9iamVjdCBkYXRhPTNEIiR7IG5vdGVib29rX2FjY2Vzc191cmwgfSIgaGVpZ2h0PQo9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI+JworICAgICAgICArJzxlbWJlZCBzcmM9M0QiJHsgbm90
ZWJvb2tfYWNjZXNzX3VybCB9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0Q9CiIxMDAlIi8+PC9v
YmplY3Q+JworICAgICAgICApCiAgICAgfSk7CiB9CiA8L3NjcmlwdD4KCgpodHRwczovL2JpdGJ1
Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZTVhYzMwZGNiMmJmLwpDaGFu
Z2VzZXQ6ICAgZTVhYzMwZGNiMmJmClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAg
ICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgUmVsZWFzZSBzdWdh
ciEgSG9wZSB5b3UgbGlrZSBpdCBAZXJhc2NoZS4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAt
ciBiZDJkNmQxYTk3NjcyZWE4MGQ3YWQ2MWUzZjA3MzkxNjFiZmU0NzEzIC1yIGU1YWMzMGRjYjJi
ZjlhYzEyZjVjZjRlPQpkYTdmMDdkYzRkZjFmZDVmZSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CkBAIC0xMjYsNyArMTI2LDExIEBACiAlPjxodG1sPjxoZWFkPgorPCEtLSBUb0RvOiBmaWd1cmUg
b3V0LCBob3d0byBpbmxjbHVkZSB0aGUgZ2FsYXh5IHRvYXN0ci5sZXNzIGZpbGUgLS0+Cis8bGlu
ayBocmVmPTNEImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3RvYXN0ci5q
cy9sYXRlc3QvY3NzLz0KdG9hc3RyLmNzcyIgcmVsPTNEInN0eWxlc2hlZXQiLz4KICR7aC5qcygg
J2xpYnMvanF1ZXJ5L2pxdWVyeScgKSB9Ciske2guanMoICdsaWJzL3RvYXN0cicgKSB9CisKIDwv
aGVhZD48Ym9keT48c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0Ij4KQEAgLTE1MCwyMSAr
MTU0LDIzIEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgfSwKICAgICAgICAgICAg
IGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7CisKKyAgICAgICAgICAgICAg
ICB0b2FzdHIuaW5mbygKKyAgICAgICAgICAgICAgICAgICAgIkF1dG9tYXRpYyBhdXRob3JpemF0
aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51YWxseSBsb2dpPQpuIHdpdGg6PGJyPiR7IG5vdGVib29r
X3B3IH08YnI+PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGE9Cnh5
LWlweXRob24nIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKKyAgICAg
ICAgICAgICAgICAgICAgIlBsZWFzZSBsb2dpbiBtYW51YWxseSIsCisgICAgICAgICAgICAgICAg
ICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDMwMDAwLCAndGFwVG9EaXNtaXNz
Jz0KOiBmYWxzZX0KKyAgICAgICAgICAgICAgICApOworCiAgICAgICAgICAgICAgICAgaWYoJHsg
cGFzc3dvcmRfYXV0aF9qc3ZhciB9ICYmICEkeyBhcGFjaGVfdXJsc19qc3ZhciB9KXsKLSAgICAg
ICAgICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgiRXJyb3IsIGNvdWxkIG5vdCBhdXRvbWF0
aWNhbGx5IGF1dGhvPQpyaXplIHlvdS4gWW91ciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArICIgcGFzc3dvcmQgaXM6ICR7IG5vdGVib29rX3B3IH08PQpici8+QXNr
IHlvdXIgYWRtaW5pc3RyYXRvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArICIgdG8gc2V0IGFwYWNoZV91cmxzID0zRCBUcnVlIHRvPQogbWFrZSB0aGlzIGdvIGF3
YXkiKTsKICAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgnPG9iamVjdCBkYXRh
PTNEIiR7IG5vdGVib29rX2FjY2Vzc191PQpybCB9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0Qi
MTAwJSI+JwogICAgICAgICAgICAgICAgICAgICArJzxlbWJlZCBzcmM9M0QiJHsgbm90ZWJvb2tf
YWNjZXNzX3VybCB9IiBoZWlnaHQ9M0QiMTA9CjAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmplY3Q+
JwogICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBlcnJvcl9tc2cgPTNEICI8aDE+RXJyb3IgIiArIHN0YXR1cwotICAg
ICAgICAgICAgICAgICAgICAgICAgKyAiPC9oMT5Db3VsZCBub3QgY29ubmVjdCB0byBJUHl0aG9u
IE5vdGVib29rOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGVycm9yICsgIjxici8+UGxl
YXNlIGNoZWNrIElQeXRob24gY29uZmlndXJhdGlvbj0KIHNldHRpbmdzPGJyLz4iCi0gICAgICAg
ICAgICAgICAgICAgICsgIkN1cnJlbnQgc2V0dGluZ3M6PGJyIC8+IgotICAgICAgICAgICAgICAg
ICAgICArICJhcGFjaGVfdXJsczogIiArICR7IGFwYWNoZV91cmxzX2pzdmFyIH0gKyAiIDxici8+
IgotICAgICAgICAgICAgICAgICAgICArICJwYXNzd29yZF9hdXRoOiAiICsgJHsgcGFzc3dvcmRf
YXV0aF9qc3ZhciB9ICsgIiA8YnI9Ci8+IjsKLSAgICAgICAgICAgICAgICAgICAgJCgnYm9keScp
LmFwcGVuZCggZXJyb3JfbXNnICk7CisgICAgICAgICAgICAgICAgICAgIHRvYXN0ci5lcnJvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBJUHl0aG9uIE5v
dGVib29rLiBQbGVhc2UgY29uPQp0YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4gPGEgaHJlZj0zRCdo
dHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHk9CnRob24nIHRhcmdldD0zRCdf
YmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJT
ZWN1cml0eSB3YXJuaW5nIiw9MjAKKyAgICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0
b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtPQppc3MnOiB0cnVlfQorICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0pOwpAQCAtMTcyLDYgKzE3OCwxMSBAQAogfQogZWxzZSB7CiAgICAgLy8gTm90
IHVzaW5nIHBhc3N3b3JkIGF1dGgsIGp1c3QgZW1iZWQgaXQgdG8gYXZvaWQgY29udGVudC1vcmln
aW4gaXNzdT0KZXMuCisgICAgdG9hc3RyLndhcm5pbmcoCisgICAgICAgICJJUHl0aG9uIE5vdGVi
b29rIHdhcyBsdW5jaGVkIHdpaHRvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0KY3Vy
aXR5IGlzc3VlLiA8YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5
LWlweXRob24nIHRhcmdlPQp0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAorICAg
ICAgICAiU2VjdXJpdHkgd2FybmluZyIsPTIwCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVl
LCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9CisgICAgICAgICk7CiAg
ICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgJCgnYm9keScpLmFw
cGVuZCgnPG9iamVjdCBkYXRhPTNEIiR7IG5vdGVib29rX2FjY2Vzc191cmwgfSIgaGVpZ2h0PQo9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI+JwogICAgICAgICArJzxlbWJlZCBzcmM9M0QiJHsgbm90
ZWJvb2tfYWNjZXNzX3VybCB9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0Q9CiIxMDAlIi8+PC9v
YmplY3Q+JwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29t
bWl0cy8zYWNiODBhYzA1YTgvCkNoYW5nZXNldDogICAzYWNiODBhYzA1YTgKVXNlcjogICAgICAg
IEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1
bW1hcnk6ICAgICByZXBsYWNlIHRvYXN0ci5jc3Mgd2l0aCB0aGUgR2FsYXh5IG9uZQpBZmZlY3Rl
ZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGU1YWMzMGRjYjJiZjlhYzEyZjVjZjRlZGE3ZjA3ZGM0ZGYx
ZmQ1ZmUgLXIgM2FjYjgwYWMwNWE4OWZlN2U3OGU1NzE9CjViYTNmZjkzMGZmMjk4MmFlIGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtv
Ci0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTEyNiw4ICsxMjYsNyBAQAogJT48aHRtbD48aGVhZD4K
LTwhLS0gVG9EbzogZmlndXJlIG91dCwgaG93dG8gaW5sY2x1ZGUgdGhlIGdhbGF4eSB0b2FzdHIu
bGVzcyBmaWxlIC0tPgotPGxpbmsgaHJlZj0zRCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29t
L2FqYXgvbGlicy90b2FzdHIuanMvbGF0ZXN0L2Nzcy89CnRvYXN0ci5jc3MiIHJlbD0zRCJzdHls
ZXNoZWV0Ii8+Ciske2guY3NzKCAnYmFzZScgKSB9CiAke2guanMoICdsaWJzL2pxdWVyeS9qcXVl
cnknICkgfQogJHtoLmpzKCAnbGlicy90b2FzdHInICkgfQo9MjAKCgpodHRwczovL2JpdGJ1Y2tl
dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMjkxNWEzMDQyOTUxLwpDaGFuZ2Vz
ZXQ6ICAgMjkxNWEzMDQyOTUxClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAx
NC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQnVtcGVkIHRpbWVvdXQKSSd2ZSBm
b3VuZCBpbiBvcGVyYSB0aGF0IGNvcHkrcGFzdGUgZG9lc24ndCB3b3JrLCBzbyBJIGhhdmUgdG8g
ZHJhZyBhbmQgZHJvPQpwLiBBZGRpdGlvbmFsbHksIHdlIG5lZWQKdGhlIHVzZXIgdG8gaGF2ZSB0
aW1lIHRvIHJlYWQgYW5kIGNvbXByZWhlbmQgd2hhdCB3ZSdyZSB0ZWxsaW5nIHRoZW0gYmVmb3Jl
PQogdGhpcyBub3RpZmljYXRpb24KZGlzYXBwZWFycyBmb3JldmVyLgoKRGVzcGl0ZSB0aGUgZmFj
dCB0aGF0IHRoaXMgaXMgdGVjaG5pY2FsbHkgYSBjb25maWd1cmF0aW9uIGJ1ZyBvbiB0aGUgc3lz
IGFkPQptaW4ncyBwYXJ0LCBmb3IgYSBmdXR1cmUKcmVsZWFzZSwgd2Ugc2hvdWxkIHN3aXRjaCB0
byBhIGRpZmZlcmVudCB0eXBlIG9mIG5vdGlmaWNhdGlvbiwgcHJvYmFibHkgbGlrPQplIGEgYmFu
bmVyIHdpdGggYW4gWCB0aGF0CnRoZXkgY2FuIGNsb3NlIG9uY2UgdGhleSdyZSBkb25lIHJlYWRp
bmcgaXQuIFRoYXQgd2F5IHdlIGtub3cgaXQnbGwgYmUgdGhlcj0KZSBhcyBsb25nIGFzIHRoZXkg
bmVlZCBpdAp0byBiZS4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAzYWNiODBhYzA1YTg5
ZmU3ZTc4ZTU3MTViYTNmZjkzMGZmMjk4MmFlIC1yIDI5MTVhMzA0Mjk1MWE4Mjc3YjZmNGE5PQoz
MmRmZTQwMDg2N2Y0ODNkYyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xNTcsNyArMTU3
LDcgQEAKICAgICAgICAgICAgICAgICB0b2FzdHIuaW5mbygKICAgICAgICAgICAgICAgICAgICAg
IkF1dG9tYXRpYyBhdXRob3JpemF0aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51YWxseSBsb2dpPQpu
IHdpdGg6PGJyPiR7IG5vdGVib29rX3B3IH08YnI+PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5j
b20vYmdydWVuaW5nL2dhbGE9Cnh5LWlweXRob24nIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0
YWlscyAuLi48L2E+IiwKICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBsb2dpbiBtYW51YWxs
eSIsCi0gICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6
IDMwMDAwLCAndGFwVG9EaXNtaXNzJz0KOiBmYWxzZX0KKyAgICAgICAgICAgICAgICAgICAgeydj
bG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAwLCAndGFwVG9EaXNtaXNzPQonOiBm
YWxzZX0KICAgICAgICAgICAgICAgICApOwo9MjAKICAgICAgICAgICAgICAgICBpZigkeyBwYXNz
d29yZF9hdXRoX2pzdmFyIH0gJiYgISR7IGFwYWNoZV91cmxzX2pzdmFyIH0pewpAQCAtMTY3LDcg
KzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgIHRv
YXN0ci5lcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0
byBJUHl0aG9uIE5vdGVib29rLiBQbGVhc2UgY29uPQp0YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4g
PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHk9CnRob24n
IHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICJTZWN1cml0eSB3YXJuaW5nIiw9MjAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICJTZWN1cml0eSB3YXJuaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0
b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtPQppc3MnOiB0cnVlfQogICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzksNyArMTc5
LDcgQEAKICAgICAvLyBOb3QgdXNpbmcgcGFzc3dvcmQgYXV0aCwganVzdCBlbWJlZCBpdCB0byBh
dm9pZCBjb250ZW50LW9yaWdpbiBpc3N1PQplcy4KICAgICB0b2FzdHIud2FybmluZygKICAgICAg
ICAgIklQeXRob24gTm90ZWJvb2sgd2FzIGx1bmNoZWQgd2lodG91dCBhdXRoZW50aWNhdGlvbi4g
VGhpcyBpcyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29t
L2JncnVlbmluZy9nYWxheHktaXB5dGhvbicgdGFyZ2U9CnQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFp
bHMgLi4uPC9hPiIsCi0gICAgICAgICJTZWN1cml0eSB3YXJuaW5nIiw9MjAKKyAgICAgICAgIlNl
Y3VyaXR5IHdhcm5pbmciLAogICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQn
OiAyMDAwMCwgJ3RhcFRvRGlzbWlzcyc6IGZhbHNlfQogICAgICAgICApOwogICAgICQoIGRvY3Vt
ZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC9jb21taXRzLzA4ZTBjMDM5N2RiZS8KQ2hhbmdlc2V0OiAgIDA4ZTBjMDM5
N2RiZQpVc2VyOiAgICAgICAgQmpvZXJuR3J1ZW5pbmcKRGF0ZTogICAgICAgIDIwMTQtMTAtMTgg
MjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEFkZGVkIHRoZSBpbml0aWFsIHJlbGVhc2UgZGF0
ZSEKWWVhaCwgd2UgYXJlIHJlYWR5IHRvIHJlbGVhc2UhClRoYW5rcyBzbyBtdWNoIEBlcmFzY2hl
IGl0IGlzIGEgcGxlYXN1cmUgdG8gd29yayB3aXRoIHlvdSEKQWZmZWN0ZWQgIzogIDEgZmlsZQoK
ZGlmZiAtciAyOTE1YTMwNDI5NTFhODI3N2I2ZjRhOTMyZGZlNDAwODY3ZjQ4M2RjIC1yIDA4ZTBj
MDM5N2RiZTExZmIwNGUwMDkzPQowZjQzMDMyMTMwMGNlM2U1OCBjb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL1JFQURNRS5tZApAQCAtMTA0LDE0ICsxMDQsMTQgQEAKIEF1dGhvcnMKID0z
RD0zRD0zRD0zRD0zRD0zRD0zRAo9MjAKLSAqIEJqPUMzPUI2cm4gR3I9QzM9QkNuaW5nCisgKiBC
aj1DMz1CNnJuIEdyPUMzPUJDbmluZyA8YmpvZXJuLmdydWVuaW5nQGdtYWlsLmNvbT4KICAqIEVy
aWMgUmFzY2hlIDxyYXNjaGUuZXJpY0B5YW5kZXgucnU+Cj0yMAo9MjAKIEhpc3RvcnkKID0zRD0z
RD0zRD0zRD0zRD0zRD0zRAo9MjAKLS0gdjAuMTogSW5pdGlhbCBwdWJsaWMgcmVsZWFzZQorLSB2
MC4xOiBJbml0aWFsIHB1YmxpYyByZWxlYXNlICgwMS4wOC4yMDE0KQo9MjAKPTIwCiBMaWNlbmNl
IChNSVQpCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21t
aXRzLzEwMjI2ODRjNDMyMS8KQ2hhbmdlc2V0OiAgIDEwMjI2ODRjNDMyMQpVc2VyOiAgICAgICAg
ZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTog
ICAgIEZpeGVkIFVSTCBmb3IgZWFzaWVyIGluc3RhbGwKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlm
ZiAtciAwOGUwYzAzOTdkYmUxMWZiMDRlMDA5MzBmNDMwMzIxMzAwY2UzZTU4IC1yIDEwMjI2ODRj
NDMyMTk3NTQyYjdhN2FjPQpmMDMyYTIwMjQwNTQ5ODNkNyBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL1JFQURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL1JFQURNRS5tZApAQCAtMjMsNyArMjMsNyBAQAogQWx0ZXJuYXRpdmx5LCB5b3Ug
Y2FuIGNsb25lIHRoZSByZXBvc2l0b3J5IHdpdGgKPTIwCiBgYGBiYXNoCi1naXQgY2xvbmUgaHR0
cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi5naXQgY29uZmlnL3BsdWdp
bnMvdj0KaXovaXB5dGhvbgorZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcv
Z2FsYXh5LWlweXRob24uZ2l0IGNvbmZpZy9wbHVnaW5zL3Y9CmlzdWFsaXphdGlvbnMvaXB5dGhv
bgogYGBgYAo9MjAKIFRoZSBJUHl0aG9uIHZpc3VhbGlzYXRpb24gb3B0aW9uIHNob3VsZCBiZSB2
aXNpYmxlIG5leHQgdG8gdGhlIHVzdWFsIENoYXJ0PQpzIG9yIFRyYWNrc3RlciBvcHRpb25zIGlu
IHlvdXIgdmlzdWFsaXNhdGlvbiBtZW51ZS4KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5
L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZWEzOWQzYzk2MDFlLwpDaGFuZ2VzZXQ6ICAgZWEzOWQz
Yzk2MDFlClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRkICJob3cgZG9lcyBpdCB3b3JrIiBzZWN0
aW9uIHRvIHRoZSByZWFkbWUKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAxMDIyNjg0YzQz
MjE5NzU0MmI3YTdhY2YwMzJhMjAyNDA1NDk4M2Q3IC1yIGVhMzlkM2M5NjAxZTJlNDM3ZTk0OWI2
PQo0NzMwMTFlYWM1OGM5YWM5MCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L1JFQURNRS5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL1JF
QURNRS5tZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL1JFQURN
RS5tZApAQCAtNDQsNiArNDQsMTQgQEAKICAqIHNhdmVkIElQeXRob24gTm90ZWJvb2sgZmlsZXMg
Y2FuIGJlIHZpZXdlZCBpbiBIVE1MIGFuZCByZS1vcGVuZWQKICAqIHNlbGYtY2xvc2luZyBhbmQg
Y2xlYW5pbmcgSVB5dGhvbiBkb2NrZXIgY29udGFpbmVyCj0yMAorSG93IGRvZXMgaXQgd29yawor
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisKK1RoZSBt
YWtvIHRlbXBsYXRlIGZyb20gdGhlIEdhbGF4eSB2aXN1YWxpc2F0aW9uIGZyYW1ld29yayByZW5k
ZXJzIHRoZSBpbnRlPQpyZmFjZSBhbmQgYnVpbGRzIGFsbCBmaWxlcyBhbmQgY29tbWFuZHMgbmVl
ZGVkIHRvIGx1bmNoIHRoZSBkb2NrZXIgY29udGFpbmU9CnIuIEEgY29uZmlnIGZpbGUgaXMgc2F2
ZWQgdW5kZXIgYGAvaW1wb3J0L2BgIGluc2lkZSB0aGUgZG9ja2VyIGNvbnRhaW5lci4gVD0KaGUg
SVB5dGhvbiB3ZWJwYWdlIHJ1bm5pbmcgaW4gZG9ja2VyIHdpbGwgYmUgaW5jbHVkZWQgaW4gYSBI
VE1MIG9iamVjdCBhbmQgPQpkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuPTIwCitEZXBlbmRpbmcgb24g
eW91ciBjb25maWd1cmF0aW9uIHNvbWUgSmF2YVNjcmlwdCBtYWdpYyBpcyBkb25lIHRvIGFkZCBh
biBvYj0KamVjdCB0byB0aGUgRE9NLCB3aGljaCB3aWxsIGJlIGxvYWRlZCBieSB0aGUgYnJvd3Nl
ciBhbmQgY29uZGl0aW9uYWxseSBoYW5kPQpsZXMgbG9naW4uCitJc2lkZSBvZiBkb2NrZXIgVENQ
IGNvbm5lY3Rpb25zIGFyZSBtb25pdG9yZWQgdXNpbmcgY3Jvbi4gQXMgc29vbiBhcyB0aGUgdT0K
c2VyIHF1aXRzIHVzaW5nIHRoZSBub3RlYm9vaywgdGhlIGRyb3BwaW5nIFRDUCBjb25uZWN0aW9u
cyBhcmUgcmVjb2duaXNlZCBhPQpuZCB0aGUgY290YWluZXIgY2xlYW5zIHVwIGFmdGVyIGl0c2Vs
ZiBhbmQga2lsbHMgaXRzZWxmLgorCisKPTIwCiBGdW5jdGlvbnMgYW5kIHZhcmlhYmxlcwogPTNE
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNECgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9j
b21taXRzLzJiNGE1ZmEwYmY0Zi8KQ2hhbmdlc2V0OiAgIDJiNGE1ZmEwYmY0ZgpVc2VyOiAgICAg
ICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFy
eTogICAgIEFkZGVkIFNTTCBvcHRpb24KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBlYTM5
ZDNjOTYwMWUyZTQzN2U5NDliNjQ3MzAxMWVhYzU4YzlhYzkwIC1yIDJiNGE1ZmEwYmY0Zjk2NGE5
ZjUxMmZlPQo0MTY3NGE3NjVjZTNmNDdmMyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24uY29uZgpAQCAtMSw2ICsxLDcgQEAKIFttYWlu
XQogYXBhY2hlX3VybHMgPTNEIEZhbHNlCiBwYXNzd29yZF9hdXRoID0zRCBGYWxzZQorc3NsID0z
RCBGYWxzZQo9MjAKIFtkb2NrZXJdCiBjb21tYW5kID0zRCAiZG9ja2VyIgoKCmh0dHBzOi8vYml0
YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9iOWNjODNkZGIxZjIvCkNo
YW5nZXNldDogICBiOWNjODNkZGIxZjIKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAg
ICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBGaXhlcyAjNgpBZmZlY3Rl
ZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDJiNGE1ZmEwYmY0Zjk2NGE5ZjUxMmZlNDE2NzRhNzY1Y2Uz
ZjQ3ZjMgLXIgYjljYzgzZGRiMWYyNzA1MjA0MzlkZDI9CjZlYmI3M2FmMDdkOWQ1Zjk4IGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtv
Ci0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTMyLDcgKzMyLDcgQEAKIG91cl90ZW1wbGF0ZV9kaXIg
PTNEIG9zLnBhdGguam9pbih2aXpfcGx1Z2luX2RpciwgInRlbXBsYXRlcyIpCiBpcHlfdml6X2Nv
bmZpZyA9M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydhcGFjaGVfdXJscyc6IEZh
bHNlLCAnYz0Kb21tYW5kJzogJ2RvY2tlcicsICdpbWFnZSc6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLT0K
bm90ZWJvb2snLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Bhc3N3b3JkX2F1dGgnOiBGYWxzZX0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAncGFzc3dvcmRfYXV0aCc6IEZhbHNlLCAncz0Kc2wnOiBGYWxz
ZX0pCiBpcHlfdml6X2NvbmZpZy5yZWFkKCBvcy5wYXRoLmpvaW4oIG91cl9jb25maWdfZGlyLCAi
aXB5dGhvbi5jb25mIiApICkKPTIwCiAjIEVuc3VyZSBnZW5lcmF0aW9uIG9mIG5vdGVib29rIGlk
IGlzIGRldGVybWluaXN0aWMgZm9yIHRoZSBkYXRhc2V0LiBSZXBsYT0KY2Ugd2l0aCBoaXN0b3J5
IGlkCkBAIC0xMDgsMTQgKzEwOCwyMCBAQAogZG9ja2VyX2NtZCA9M0QgJyVzIHJ1biAtZCAtLXNp
Zy1wcm94eT0zRHRydWUgLXAgJXM6Njc4OSAtdiAiJXM6L2ltcG9ydC8iICU9CnMnICUgXAogICAg
IChpcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJjb21tYW5kIiksIFBPUlQsIHRlbXBfZGly
LCBpcHlfdml6X2NvbmY9CmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikpCj0yMAorIyBTZXQgb3Vy
IHByb3RvIHNvIHBhc3N3b3JkcyBkb24ndCBnbyBpbiBjbGVhcgoraWYgaXB5X3Zpel9jb25maWcu
Z2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKToKKyAgICBQUk9UTyA9M0QgImh0dHBzIgorZWxzZToK
KyAgICBQUk9UTyA9M0QgImh0dHAiCisKICMgQWNjZXNzIFVSTHMgZm9yIHRoZSBub3RlYm9vayBm
cm9tIHdpdGhpbiBnYWxheHkuCiBpZiBpcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwg
ImFwYWNoZV91cmxzIik6Ci0gICAgbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgImh0dHA6Ly8lcy9p
cHl0aG9uLyVzL25vdGVib29rcy9pcHl0aG9uX2dhbGF4eT0KX25vdGVib29rLmlweW5iIiAlICgg
SE9TVCwgUE9SVCApCi0gICAgbm90ZWJvb2tfbG9naW5fdXJsID0zRCAiaHR0cDovLyVzL2lweXRo
b24vJXMvbG9naW4/bmV4dD0zRCUlMkZpcHl0aG9uJT0KJTJGJXMlJTJGbm90ZWJvb2tzJSUyRmlw
eXRob25fZ2FsYXh5X25vdGVib29rLmlweW5iIiAlICggSE9TVCwgUE9SVCwgUE9SVCApCisgICAg
bm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8lcy9ub3RlYm9va3MvaXB5
dGhvbl9nYWxheHlfbj0Kb3RlYm9vay5pcHluYiIgJSAoIFBST1RPLCBIT1NULCBQT1JUICkKKyAg
ICBub3RlYm9va19sb2dpbl91cmwgPTNEICIlczovLyVzL2lweXRob24vJXMvbG9naW4/bmV4dD0z
RCUlMkZpcHl0aG9uJSUyPQpGJXMlJTJGbm90ZWJvb2tzJSUyRmlweXRob25fZ2FsYXh5X25vdGVi
b29rLmlweW5iIiAlICggUFJPVE8sIEhPU1QsIFBPUlQsIFA9Ck9SVCApCiAgICAgYXBhY2hlX3Vy
bHNfanN2YXIgPTNEICJ0cnVlIgogZWxzZToKLSAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAi
aHR0cDovLyVzOiVzL2lweXRob24vJXMvbm90ZWJvb2tzL2lweXRob25fZ2FsPQpheHlfbm90ZWJv
b2suaXB5bmIiICUgKCBIT1NULCBQT1JULCBQT1JUICkKLSAgICBub3RlYm9va19sb2dpbl91cmwg
PTNEICJodHRwOi8vJXM6JXMvaXB5dGhvbi8lcy9sb2dpbj9uZXh0PTNEJSUyRmlweXRoPQpvbiUl
MkYlcyUlMkZub3RlYm9va3MlJTJGaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmIiICUgKCBI
T1NULCBQT1JULCBQT1I9ClQsIFBPUlQgKQorICAgIG5vdGVib29rX2FjY2Vzc191cmwgPTNEICIl
czovLyVzOiVzL2lweXRob24vJXMvbm90ZWJvb2tzL2lweXRob25fZ2FsYXg9Cnlfbm90ZWJvb2su
aXB5bmIiICUgKCBQUk9UTywgSE9TVCwgUE9SVCwgUE9SVCApCisgICAgbm90ZWJvb2tfbG9naW5f
dXJsID0zRCAiJXM6Ly8lczolcy9pcHl0aG9uLyVzL2xvZ2luP25leHQ9M0QlJTJGaXB5dGhvbj0K
JSUyRiVzJSUyRm5vdGVib29rcyUlMkZpcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYiIgJSAo
IFBST1RPLCBIT1NULCBQT1JUPQosIFBPUlQsIFBPUlQgKQogICAgIGFwYWNoZV91cmxzX2pzdmFy
ID0zRCAiZmFsc2UiCiBzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2NtZCwgc2hlbGw9M0RUcnVlKQo9
MjAKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMv
YzUzYjVhMWYxNDBkLwpDaGFuZ2VzZXQ6ICAgYzUzYjVhMWYxNDBkClVzZXI6ICAgICAgICBlcmFz
Y2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAg
Rml4ZXMgIzcKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBiOWNjODNkZGIxZjI3MDUyMDQz
OWRkMjZlYmI3M2FmMDdkOWQ1Zjk4IC1yIGM1M2I1YTFmMTQwZDI1MDA2N2YxNjI5PQoxYTFlYTNj
ZjAxNDNlYmM2MSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRl
cy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xOCw3ICsxOCwxMSBAQAog
Y29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAnODA4MCd9
KQogY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggZ2FsYXh5X3Jvb3RfZGlyLCAndW5pdmVyc2Vf
d3NnaS5pbmknICkgKQo9MjAKLWdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgY29uZmlnLmdldGludCgn
c2VydmVyOm1haW4nLCAncG9ydCcpCisjIHVXU0dJIGdhbGF4eSBpbnN0YWxsYXRpb25zIGRvbid0
IHVzZSBwYXN0ZXIgYW5kIG9ubHkgc3BlYWsgdVdTR0kgbm90IGh0dHAKK3RyeToKKyAgICBnYWxh
eHlfcGFzdGVyX3BvcnQgPTNEIGNvbmZpZy5nZXRpbnQoJ3NlcnZlcjptYWluJywgJ3BvcnQnKQor
ZXhjZXB0OgorICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgTm9uZQo9MjAKICMgRmluZCBvdXQg
d2hlcmUgd2UgYXJlCiB2aXpfcGx1Z2luX2RpciA9M0QgY29uZmlnLmdldCgnYXBwOm1haW4nLCAn
dmlzdWFsaXphdGlvbl9wbHVnaW5zX2RpcmVjdG9yeT0KJykKCgpodHRwczovL2JpdGJ1Y2tldC5v
cmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZmFkYmIxODA4NjFhLwpDaGFuZ2VzZXQ6
ICAgZmFkYmIxODA4NjFhClVzZXI6ICAgICAgICBqbWNoaWx0b24KRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEJ1Z2ZpeDogRG8gbm90IGhhcmQgY29k
ZSAnbWFpbicgYXMgR2FsYXh5IHNlcnZlciBuYW1lLgpEZXRlcm1pbmUgY29ycmVjdCBzZXJ2ZXIg
bmFtZSBjb3JyZXNwb25kaW5nIHRvIGF0IGxlYXN0IGEgd2ViIHJlcXVlc3QgYXQgcnU9Cm50aW1l
LgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGM1M2I1YTFmMTQwZDI1MDA2N2YxNjI5MWEx
ZWEzY2YwMTQzZWJjNjEgLXIgZmFkYmIxODA4NjFhNjUxODY2OTBiNmM9CmI1YTQ0OTBhNzgzZTE3
YjNmIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRo
b24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTExLDcgKzExLDggQEAKIGltcG9ydCBz
dWJwcm9jZXNzCiBpbXBvcnQgQ29uZmlnUGFyc2VyCj0yMAotZ2FsYXh5X3Jvb3RfZGlyID0zRCBv
cy5wYXRoLmFic3BhdGgodHJhbnMuYXBwLmNvbmZpZy5yb290KQorZ2FsYXh5X2NvbmZpZyA9M0Qg
dHJhbnMuYXBwLmNvbmZpZworZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoZ2Fs
YXh5X2NvbmZpZy5yb290KQogaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lk
KCB0cmFucy5oaXN0b3J5LmlkICkKIGRhdGFzZXRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29k
ZV9pZCggaGRhLmlkICkKPTIwCkBAIC0yMCwxMCArMjEsMTEgQEAKPTIwCiAjIHVXU0dJIGdhbGF4
eSBpbnN0YWxsYXRpb25zIGRvbid0IHVzZSBwYXN0ZXIgYW5kIG9ubHkgc3BlYWsgdVdTR0kgbm90
IGh0dHAKIHRyeToKLSAgICBnYWxheHlfcGFzdGVyX3BvcnQgPTNEIGNvbmZpZy5nZXRpbnQoJ3Nl
cnZlcjptYWluJywgJ3BvcnQnKQorICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgY29uZmlnLmdl
dGludCgnc2VydmVyOiVzJyAlIGdhbGF4eV9jb25maWcuc2VydmU9CnJfbmFtZSwgJ3BvcnQnKQog
ZXhjZXB0OgogICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgTm9uZQo9MjAKKwogIyBGaW5kIG91
dCB3aGVyZSB3ZSBhcmUKIHZpel9wbHVnaW5fZGlyID0zRCBjb25maWcuZ2V0KCdhcHA6bWFpbics
ICd2aXN1YWxpemF0aW9uX3BsdWdpbnNfZGlyZWN0b3J5PQonKQogaWYgbm90IG9zLnBhdGguaXNh
YnModml6X3BsdWdpbl9kaXIpOgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5
LWNlbnRyYWwvY29tbWl0cy9jMzI2ZTI0MDMyNTUvCkNoYW5nZXNldDogICBjMzI2ZTI0MDMyNTUK
VXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAw
OjAwClN1bW1hcnk6ICAgICBBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBlYWNoIGVycm9yIG1lc3Nh
Z2UsIGZpeGVkIHR5cG8KV2lraSBwYWdlcyB3ZXJlIGFkZGVkIGZvciBlYWNoIG9mIHRoZSBlcnJv
ciBtZXNzYWdlcyB3aXRoIGEgQ2F1c2UgYW5kIFNvbHV0PQppb24uClRoaXMgc2hvdWxkIGJlIGhl
bHBmdWwgdG8gZW5kIHVzZXJzIGRlcGxveWluZyBvdXIgc29mdHdhcmUKQWZmZWN0ZWQgIzogIDEg
ZmlsZQoKZGlmZiAtciBmYWRiYjE4MDg2MWE2NTE4NjY5MGI2Y2I1YTQ0OTBhNzgzZTE3YjNmIC1y
IGMzMjZlMjQwMzI1NWJhMDczN2ZlMzhlPQozYzg2MTk4ZmUwNDJiMmUxMSBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1h
a28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMv
aXB5dGhvbi5tYWtvCkBAIC0xNjcsNyArMTY3LDcgQEAKICAgICAgICAgICAgIGVycm9yOiBmdW5j
dGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7Cj0yMAogICAgICAgICAgICAgICAgIHRvYXN0ci5p
bmZvKAotICAgICAgICAgICAgICAgICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24gZmFpbGVk
LiBZb3UgY2FuIG1hbnVhbGx5IGxvZ2k9Cm4gd2l0aDo8YnI+JHsgbm90ZWJvb2tfcHcgfTxicj48
YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYT0KeHktaXB5dGhvbicg
dGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAorICAgICAgICAgICAgICAg
ICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24gZmFpbGVkLiBZb3UgY2FuIG1hbnVhbGx5IGxv
Z2k9Cm4gd2l0aDo8YnI+JHsgbm90ZWJvb2tfcHcgfTxicj48YSBocmVmPTNEJ2h0dHBzOi8vZ2l0
aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYT0KeHktaXB5dGhvbi93aWtpL0F1dG9tYXRpYy1BdXRob3Jp
emF0aW9uLUZhaWxlZCcgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhPQppbHMgLi4uPC9hPiIs
CiAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgbG9naW4gbWFudWFsbHkiLAogICAgICAgICAg
ICAgICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAxMDAwMDAsICd0YXBU
b0Rpc21pc3M9Cic6IGZhbHNlfQogICAgICAgICAgICAgICAgICk7CkBAIC0xNzgsNyArMTc4LDcg
QEAKICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAg
ICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ291
bGQgbm90IGNvbm5lY3QgdG8gSVB5dGhvbiBOb3RlYm9vay4gUGxlYXNlIGNvbj0KdGFjdCB5b3Vy
IGFkbWluaXN0cmF0b3IuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9n
YWxheHktaXB5PQp0aG9uJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSVB5dGhvbiBO
b3RlYm9vay4gUGxlYXNlIGNvbj0KdGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuIDxhIGhyZWY9M0Qn
aHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5PQp0aG9uL3dpa2kvQ291bGQt
bm90LWNvbm5lY3QtdG8tSVB5dGhvbi1Ob3RlYm9vaycgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBk
ZXQ9CmFpbHMgLi4uPC9hPiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2VjdXJpdHkgd2Fy
bmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3Rp
bWVPdXQnOiAyMDAwMCwgJ3RhcFRvRGlzbT0KaXNzJzogdHJ1ZX0KICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CkBAIC0xOTAsNyArMTkwLDcgQEAKIGVsc2UgewogICAgIC8vIE5vdCB1c2luZyBw
YXNzd29yZCBhdXRoLCBqdXN0IGVtYmVkIGl0IHRvIGF2b2lkIGNvbnRlbnQtb3JpZ2luIGlzc3U9
CmVzLgogICAgIHRvYXN0ci53YXJuaW5nKAotICAgICAgICAiSVB5dGhvbiBOb3RlYm9vayB3YXMg
bHVuY2hlZCB3aWh0b3V0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0eSBpc3N1
ZS4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9u
JyB0YXJnZT0KdD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKKyAgICAgICAgIklQ
eXRob24gTm90ZWJvb2sgd2FzIGx1bmNoZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4gVGhpcyBp
cyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVl
bmluZy9nYWxheHktaXB5dGhvbi93aWtpL0k9ClB5dGhvbi1Ob3RlYm9vay13YXMtbHVuY2hlZC13
aXRob3V0LWF1dGhlbnRpY2F0aW9uJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlID0KZGV0YWlscyAu
Li48L2E+IiwKICAgICAgICAgIlNlY3VyaXR5IHdhcm5pbmciLAogICAgICAgICB7J2Nsb3NlQnV0
dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwgJ3RhcFRvRGlzbWlzcyc6IGZhbHNlfQogICAg
ICAgICApOwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29t
bWl0cy9mMjY2MzA3NjE1ZjcvCkNoYW5nZXNldDogICBmMjY2MzA3NjE1ZjcKVXNlcjogICAgICAg
IGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5
OiAgICAgVXNlIHBsdWdpbl9wYXRoIHRvIGltcHJvdmUgcGF0aCBsb2dpYy4uLgpBZGRlZCBpbiBH
YWxheHkgY29tbWl0IGh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy89CmRkYzlhNjY5ZDUzYWEyNTlkMzhlZmM4ODJjODkwNTAzNDQ0ZGFhZjUuIEFkZGVk
IGl0IHRvIEdhbGF4eSBjbGVhbnVwIHRoZSBjbz0KZGUgYW5kIHRoaXMgaXMgdGhlIHJlc3VsdCAt
IG9oIHdlbGwgOikgLSBpdCBpcyBhdCBsZWFzdCBtb3JlIHRlY2hpY2FsbHkgY29yPQpyZWN0LgpB
ZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGMzMjZlMjQwMzI1NWJhMDczN2ZlMzhlM2M4NjE5
OGZlMDQyYjJlMTEgLXIgZjI2NjMwNzYxNWY3ZTdhZGRmZmYyYWI9CmUxMGRiMjc5MTFiMjM1Yjdj
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24u
bT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTI1LDE0ICsyNSwyMyBAQAogZXhjZXB0Ogog
ICAgIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgTm9uZQo9MjAKK3Zpel9wbHVnaW5fZGlyID0zRCBO
b25lCit0cnk6CisgICAgIyBOZXdlciBQeXRob24gdmVyc2lvbnMgYWxsb3cgbW9yZSwgZGlyZWN0
L2NvcnJlY3QKKyAgICAjIGFjY2VzcyB0byB0aGUgY3VycmVudCBwbHVnaW4gZGlyZWN0b3J5Lgor
ICAgIHZpel9wbHVnaW5fZGlyID0zRCBwbHVnaW5fcGF0aAorZXhjZXB0IEV4Y2VwdGlvbjoKKyAg
ICBwYXNzCj0yMAotIyBGaW5kIG91dCB3aGVyZSB3ZSBhcmUKLXZpel9wbHVnaW5fZGlyID0zRCBj
b25maWcuZ2V0KCdhcHA6bWFpbicsICd2aXN1YWxpemF0aW9uX3BsdWdpbnNfZGlyZWN0b3J5PQon
KQotaWYgbm90IG9zLnBhdGguaXNhYnModml6X3BsdWdpbl9kaXIpOgotICAgICMgSWYgaXQgaXMg
Tk9UIGFic29sdXRlLCBpLmUuIHJlbGF0aXZlLCBhcHBlbmQgdG8gZ2FsYXh5IHJvb3QKLSAgICB2
aXpfcGx1Z2luX2RpciA9M0Qgb3MucGF0aC5qb2luKGdhbGF4eV9yb290X2Rpciwgdml6X3BsdWdp
bl9kaXIpCi0jIEdldCB0aGlzIHBsdWdpbidzIGRpcmVjdG9yeQotdml6X3BsdWdpbl9kaXIgPTNE
IG9zLnBhdGguam9pbih2aXpfcGx1Z2luX2RpciwgImlweXRob24iKQoraWYgbm90IHZpel9wbHVn
aW5fZGlyOgorICAgICMgUHJvdmlkZSBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMuCisgICAg
dml6X3BsdWdpbl9kaXIgPTNEIGNvbmZpZy5nZXQoJ2FwcDptYWluJywgJ3Zpc3VhbGl6YXRpb25f
cGx1Z2luc19kaXJlYz0KdG9yeScpCisgICAgaWYgbm90IG9zLnBhdGguaXNhYnModml6X3BsdWdp
bl9kaXIpOgorICAgICAgICAjIElmIGl0IGlzIE5PVCBhYnNvbHV0ZSwgaS5lLiByZWxhdGl2ZSwg
YXBwZW5kIHRvIGdhbGF4eSByb290CisgICAgICAgIHZpel9wbHVnaW5fZGlyID0zRCBvcy5wYXRo
LmpvaW4oZ2FsYXh5X3Jvb3RfZGlyLCB2aXpfcGx1Z2luX2RpcikKKyAgICAjIEdldCB0aGlzIHBs
dWdpbidzIGRpcmVjdG9yeQorICAgIHZpel9wbHVnaW5fZGlyID0zRCBvcy5wYXRoLmpvaW4odml6
X3BsdWdpbl9kaXIsICJpcHl0aG9uIikKKwogIyBTdG9yZSBvdXIgdGVtcGxhdGUgYW5kIGNvbmZp
Z3VyYXRpb24gcGF0aAogb3VyX2NvbmZpZ19kaXIgPTNEIG9zLnBhdGguam9pbih2aXpfcGx1Z2lu
X2RpciwgImNvbmZpZyIpCiBvdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4odml6X3Bs
dWdpbl9kaXIsICJ0ZW1wbGF0ZXMiKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy9kZmI0NTM1YmNkNTUvCkNoYW5nZXNldDogICBkZmI0NTM1YmNk
NTUKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODow
NCswMDowMApTdW1tYXJ5OiAgICAgVXNlIGdldF9hcGlfa2V5KCkgdG8gZmV0Y2ggR2FsYXh5IEFQ
SSBrZXkuLi4KVGhpcyBpcyBhIG1vcmUgYXBwcm9wcmlhdGUgYWJzdHJhY3Rpb24gbGF5ZXIgdG8g
d29yayBhdCBhbmQgcHJvdmlkZXMgdGhlIGFkPQpkZWQgYmVuZWZpdCBvZiBhdXRvLWdlbmVyYXRp
bmcgdGhlIGtleSBpZiBpdCBkb2Vzbid0IGV4aXN0LgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZm
IC1yIGYyNjYzMDc2MTVmN2U3YWRkZmZmMmFiZTEwZGIyNzkxMWIyMzViN2MgLXIgZGZiNDUzNWJj
ZDU1NzY2Y2M3YzM1NjM9CjhkYWY4Zjc1YTUzNGUwOGJmIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1h
a28KQEAgLTg1LDExICs4NSwxOCBAQAo9MjAKIHRlbXBfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgo
IHRlbXBmaWxlLm1rZHRlbXAoKSApCj0yMAordHJ5OgorICAgICMgTmV3ZXIgZ2V0X2FwaV9rZXkg
d2lsbCBpcyBiZXR0ZXIgYWJzdHJhY3Rpb24gYW5kIHdpbGwgYWxzbyBnZW5lcmF0ZSA9CnRoZQor
ICAgICMga2V5IGlmIG5vdCBhdmFpbGFibGUuCisgICAgYXBpX2tleSA9M0QgZ2V0X2FwaV9rZXko
KQorZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAjIGZhbGxiYWNrIHRvIGRlcHJlY2F0ZWQgcGF0dGVy
biBmb3Igb2xkZXIgR2FsYXh5IGluc3RhbmNlcy4KKyAgICBhcGlfa2V5ID0zRCB0cmFucy51c2Vy
LmFwaV9rZXlzWzBdLmtleQo9MjAKIGNvbmZfZmlsZSA9M0QgewogICAgICdoaXN0b3J5X2lkJzog
aGlzdG9yeV9pZCwKICAgICAnZ2FsYXh5X3VybCc6IHJlcXVlc3QuYXBwbGljYXRpb25fdXJsLnJz
dHJpcCgnLycpLAotICAgICdhcGlfa2V5JzogdHJhbnMudXNlci5hcGlfa2V5c1swXS5rZXksCisg
ICAgJ2FwaV9rZXknOiBhcGlfa2V5LAogICAgICdyZW1vdGVfaG9zdCc6IHJlcXVlc3QucmVtb3Rl
X2FkZHIsCiAgICAgJ2dhbGF4eV9wYXN0ZXJfcG9ydCc6IGdhbGF4eV9wYXN0ZXJfcG9ydCwKICAg
ICAnZG9ja2VyX3BvcnQnOiBQT1JULAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy9mNTIxNzRiNzMxODEvCkNoYW5nZXNldDogICBmNTIxNzRiNzMx
ODEKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0
KzAwOjAwClN1bW1hcnk6ICAgICBNb3ZlZCBkb2NrZXIgZGVsYXkgdG8gY29uZiB2YXJpYWJsZQpV
c2VycyBtYXkgd2FudCB0byBtb2RpZnkgdGhpcyB2YXJpYWJsZSwgc28gSSd2ZSBtb3ZlZCBpdCB0
byB0aGUgY29uZiBmaWxlLgpBZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciBkZmI0NTM1YmNk
NTU3NjZjYzdjMzU2MzhkYWY4Zjc1YTUzNGUwOGJmIC1yIGY1MjE3NGI3MzE4MTAxODhmMzk1ZWYx
PQphZjRlN2I5ZTFkNjM2NjE5NiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L2NvbmYvaXB5dGhvbi5jb25mCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vY29uZi9pcHl0aG9uLmNvbmYKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9jb25mL2lweXRob24uY29uZgpAQCAtMiw2ICsyLDcgQEAKIGFwYWNoZV91cmxz
ID0zRCBGYWxzZQogcGFzc3dvcmRfYXV0aCA9M0QgRmFsc2UKIHNzbCA9M0QgRmFsc2UKK2RvY2tl
cl9kZWxheSA9M0QgMQo9MjAKIFtkb2NrZXJdCiBjb21tYW5kID0zRCAiZG9ja2VyIgoKZGlmZiAt
ciBkZmI0NTM1YmNkNTU3NjZjYzdjMzU2MzhkYWY4Zjc1YTUzNGUwOGJmIC1yIGY1MjE3NGI3MzE4
MTAxODhmMzk1ZWYxPQphZjRlN2I5ZTFkNjM2NjE5NiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CkBAIC00Nyw3ICs0Nyw4IEBACiBvdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4odml6
X3BsdWdpbl9kaXIsICJ0ZW1wbGF0ZXMiKQogaXB5X3Zpel9jb25maWcgPTNEIENvbmZpZ1BhcnNl
ci5TYWZlQ29uZmlnUGFyc2VyKHsnYXBhY2hlX3VybHMnOiBGYWxzZSwgJ2M9Cm9tbWFuZCc6ICdk
b2NrZXInLCAnaW1hZ2UnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ2JncnVlbmluZy9kb2NrZXItaXB5dGhvbi09Cm5vdGVib29rJywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzd29yZF9hdXRoJzog
RmFsc2UsICdzPQpzbCc6IEZhbHNlfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdwYXNzd29yZF9hdXRoJzogRmFsc2UsICdzPQpzbCc6IEZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvY2tlcl9k
ZWxheSc6IDF9KQogaXB5X3Zpel9jb25maWcucmVhZCggb3MucGF0aC5qb2luKCBvdXJfY29uZmln
X2RpciwgImlweXRob24uY29uZiIgKSApCj0yMAogIyBFbnN1cmUgZ2VuZXJhdGlvbiBvZiBub3Rl
Ym9vayBpZCBpcyBkZXRlcm1pbmlzdGljIGZvciB0aGUgZGF0YXNldC4gUmVwbGE9CmNlIHdpdGgg
aGlzdG9yeSBpZApAQCAtMTQ5LDcgKzE1MCw3IEBACj0yMAogIyBXZSBuZWVkIHRvIHdhaXQgdW50
aWwgdGhlIEltYWdlIGFuZCBJUHl0aG9uIGluIGxvYWRlZAogIyBUT0RPOiBUaGlzIGNhbiBiZSBl
bmhhbmNlZCBsYXRlciwgd2l0aCBzb21lIEpTIHNwaW5uaW5nIGlmIG5lZWRlZC4KLXRpbWUuc2xl
ZXAoMSkKK3RpbWUuc2xlZXAoaXB5X3Zpel9jb25maWcuZ2V0aW50KCJtYWluIiwgImRvY2tlcl9k
ZWxheSIpKQo9MjAKICU+PGh0bWw+CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxh
eHktY2VudHJhbC9jb21taXRzLzM4MmM4OTg1NWRjOC8KQ2hhbmdlc2V0OiAgIDM4MmM4OTg1NWRj
OApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQr
MDA6MDAKU3VtbWFyeTogICAgIFJlbW92ZWQgdW5uZWNlc3NhcnkgcXVvdGVzCkFmZmVjdGVkICM6
ICAxIGZpbGUKCmRpZmYgLXIgZjUyMTc0YjczMTgxMDE4OGYzOTVlZjFhZjRlN2I5ZTFkNjM2NjE5
NiAtciAzODJjODk4NTVkYzhmNDg4MjNhYTFjYj0KMjg3Yjc0ZDgxYzBjNDk5ZDYgY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24uY29uZgotLS0gYS9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi5jb25mCisrKyBi
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYK
QEAgLTUsNiArNSw2IEBACiBkb2NrZXJfZGVsYXkgPTNEIDEKPTIwCiBbZG9ja2VyXQotY29tbWFu
ZCA9M0QgImRvY2tlciIKLWltYWdlID0zRCAiYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLW5vdGVi
b29rIgorY29tbWFuZCA9M0QgZG9ja2VyCitpbWFnZSA9M0QgYmdydWVuaW5nL2RvY2tlci1pcHl0
aG9uLW5vdGVib29rCj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwvY29tbWl0cy8xMGI2ZTA2ZTBjMTUvCkNoYW5nZXNldDogICAxMGI2ZTA2ZTBjMTUKVXNl
cjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAw
ClN1bW1hcnk6ICAgICBNb2RpZmllZCBlcnJvciBtZXNzYWdlIHRvIGJlIG1vcmUgaHVtYW4tZnJp
ZW5kbHkKTWFueSBwZW9wbGUgd2lsbCBiZSBpbnRpYWxseSBvdmVyd2hlbG1lZCBieSB0aGUgc3Rh
Y2sgdHJhY2UgdGhleSBzZWUgd2l0aGluPQogZ2FsYXh5IGluCnRoZSBldmVuIG9mIGEgbWlzc2lu
ZyBBUEkga2V5LiBIb3BlZnVsbHksIGhvcGVmdWxseSwgdGhleSdsbCBiZSBhYmxlIHRvIHJlYT0K
ZCB0aGUgYm9sZApwb3J0aW9uIGF0IHRoZSBib3R0b20gd2l0aCBpbnN0cnVjdGlvbnMgb24gZ2Vu
ZXJhdGluZyBvbmUuIEl0J3MgbW9zdGx5IGEgbWU9CmFzdXJlIHRvCmRlY3JlYXNlIHN1cHBvcnQg
dGlja2V0cy9yZXF1ZXN0cwpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDM4MmM4OTg1NWRj
OGY0ODgyM2FhMWNiMjg3Yjc0ZDgxYzBjNDk5ZDYgLXIgMTBiNmUwNmUwYzE1ZDFmYzc3Y2EzY2E9
CmFjY2EzOTVhZDIwYzU4OWE2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
dGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTkyLDcgKzky
LDEwIEBACiAgICAgYXBpX2tleSA9M0QgZ2V0X2FwaV9rZXkoKQogZXhjZXB0IEV4Y2VwdGlvbjoK
ICAgICAjIGZhbGxiYWNrIHRvIGRlcHJlY2F0ZWQgcGF0dGVybiBmb3Igb2xkZXIgR2FsYXh5IGlu
c3RhbmNlcy4KLSAgICBhcGlfa2V5ID0zRCB0cmFucy51c2VyLmFwaV9rZXlzWzBdLmtleQorICAg
IHRyeToKKyAgICAgICAgYXBpX2tleSA9M0QgdHJhbnMudXNlci5hcGlfa2V5c1swXS5rZXkKKyAg
ICBleGNlcHQ6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiWW91IGRvIG5vdCBoYXZlIGFuIEFQ
SSBrZXkgYXZhaWxhYmxlLCBwbGVhc2UgY2xpYz0KayBVc2VyLT5BUEkgS2V5cyB0byBnZW5lcmF0
ZSBvbmUiKQo9MjAKIGNvbmZfZmlsZSA9M0QgewogICAgICdoaXN0b3J5X2lkJzogaGlzdG9yeV9p
ZCwKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMv
M2Y3NGE2ZDI1MzRkLwpDaGFuZ2VzZXQ6ICAgM2Y3NGE2ZDI1MzRkClVzZXI6ICAgICAgICBlcmFz
Y2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAg
SlMgcmVmYWN0b3IKQWZmZWN0ZWQgIzogIDcgZmlsZXMKCmRpZmYgLXIgMTBiNmUwNmUwYzE1ZDFm
Yzc3Y2EzY2FhY2NhMzk1YWQyMGM1ODlhNiAtciAzZjc0YTZkMjUzNGQ5MDAzNWJkYzc5Mz0KZGE5
NjJlNjQ4YjEwODZiZWQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFE
TUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUu
bWQKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9SRUFETUUubWQK
QEAgLTQsNyArNCw3IEBACiBUaGlzIHByb2plY3RzIGludGVncmF0ZXMgW0lQeXRob24gTm90ZWJv
b2tdKGh0dHA6Ly9pcHl0aG9uLm9yZy9ub3RlYm9vay5odD0KbWwpLCBhIGludGVyYWN0aXZlIGNv
bXB1dGF0aW9uYWwgZW52aXJvbm1lbnQsIHdpdGggW0dhbGF4eV0oaHR0cDovL2dhbGF4eXByPQpv
amVjdC5vcmcpLj0yMAogV2UgaG9wZSB0byBtYWtlIEdhbGF4eSBtb3JlIGF0dHJhY3RpdmUgZm9y
IGJpb2luZm9ybWF0aWNpYW5zIGFuZCB0byBjb21iaW49CmUgdGhlIHBvd2VyIG9mIGJvdGggcHJv
amVjdHMgdG8gdW5sb2NrIGNyZWF0aXZpdHkgaW4gZGF0YSBhbmFseXNpcywgYnV0IGFscz0KbyBp
biBOZXh0LUdlbmVyYXRpb24tVHJhaW5pbmcgY291cnNlcy4KPTIwCi0hW0lQeXRob24gaW4gR2Fs
YXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYmdydWVuaW5nL2dhbGF4eS1p
cD0KeXRob24vbWFzdGVyL2ltYWdlcy9pcHl0aG9uX2luX2dhbGF4eS5wbmcpCishW0lQeXRob24g
aW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYmdydWVuaW5nL2dh
bGF4eS1pcD0KeXRob24vbWFzdGVyL3N0YXRpYy9pbWFnZXMvaXB5dGhvbl9pbl9nYWxheHkucG5n
KQo9MjAKIFshW0lNQUdFIEFMVCBURVhUIEhFUkVdKGh0dHA6Ly9pbWcueW91dHViZS5jb20vdmkv
alFEeVR1WW5uMWsvMC5qcGcpXShodHRwPQo6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0zRGpR
RHlUdVlubjFrKQo9MjAKQEAgLTI4LDcgKzI4LDcgQEAKPTIwCiBUaGUgSVB5dGhvbiB2aXN1YWxp
c2F0aW9uIG9wdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBuZXh0IHRvIHRoZSB1c3VhbCBDaGFydD0K
cyBvciBUcmFja3N0ZXIgb3B0aW9ucyBpbiB5b3VyIHZpc3VhbGlzYXRpb24gbWVudWUuCj0yMAot
IVtTdGFydGluZyBJUHl0aG9uIGluIEdhbGF4eV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRl
bnQuY29tL2JncnVlbmluZy89CmdhbGF4eS1pcHl0aG9uL21hc3Rlci9pbWFnZXMvc3RhcnRfaXB5
dGhvbi5wbmcpCishW1N0YXJ0aW5nIElQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRo
dWJ1c2VyY29udGVudC5jb20vYmdydWVuaW5nLz0KZ2FsYXh5LWlweXRob24vbWFzdGVyL3N0YXRp
Yy9pbWFnZXMvc3RhcnRfaXB5dGhvbi5wbmcpCj0yMAo9MjAKIEZlYXR1cmVzCgpkaWZmIC1yIDEw
YjZlMDZlMGMxNWQxZmM3N2NhM2NhYWNjYTM5NWFkMjBjNTg5YTYgLXIgM2Y3NGE2ZDI1MzRkOTAw
MzViZGM3OTM9CmRhOTYyZTY0OGIxMDg2YmVkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vaW1hZ2VzL2lweXRob25faW5fZz0KYWxheHkucG5nCkJpbmFyeSBmaWxlIGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaW1hZ2VzL2lweXRob25faW5fZ2FsYXh5
Lj0KcG5nIGhhcyBjaGFuZ2VkCgpkaWZmIC1yIDEwYjZlMDZlMGMxNWQxZmM3N2NhM2NhYWNjYTM5
NWFkMjBjNTg5YTYgLXIgM2Y3NGE2ZDI1MzRkOTAwMzViZGM3OTM9CmRhOTYyZTY0OGIxMDg2YmVk
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vaW1hZ2VzL3N0YXJ0X2lweXRo
bz0Kbi5wbmcKQmluYXJ5IGZpbGUgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi9pbWFnZXMvc3RhcnRfaXB5dGhvbi5wbmcgPQpoYXMgY2hhbmdlZAoKZGlmZiAtciAxMGI2ZTA2
ZTBjMTVkMWZjNzdjYTNjYWFjY2EzOTVhZDIwYzU4OWE2IC1yIDNmNzRhNmQyNTM0ZDkwMDM1YmRj
NzkzPQpkYTk2MmU2NDhiMTA4NmJlZCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3N0YXRpYy9pbWFnZXMvaXB5dGg9Cm9uX2luX2dhbGF4eS5wbmcKQmluYXJ5IGZpbGUgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaW1hZ2VzL2lweXRob25f
aW5fPQpnYWxheHkucG5nIGhhcyBjaGFuZ2VkCgpkaWZmIC1yIDEwYjZlMDZlMGMxNWQxZmM3N2Nh
M2NhYWNjYTM5NWFkMjBjNTg5YTYgLXIgM2Y3NGE2ZDI1MzRkOTAwMzViZGM3OTM9CmRhOTYyZTY0
OGIxMDg2YmVkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lt
YWdlcy9zdGFydD0KX2lweXRob24ucG5nCkJpbmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vc3RhdGljL2ltYWdlcy9zdGFydF9pcHl0aD0Kb24ucG5nIGhhcyBj
aGFuZ2VkCgpkaWZmIC1yIDEwYjZlMDZlMGMxNWQxZmM3N2NhM2NhYWNjYTM5NWFkMjBjNTg5YTYg
LXIgM2Y3NGE2ZDI1MzRkOTAwMzViZGM3OTM9CmRhOTYyZTY0OGIxMDg2YmVkIGNvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweS1nYWxheHkuanMKLS0tIC9kZXYv
bnVsbAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9p
cHktZ2FsYXh5LmpzCkBAIC0wLDAgKzEsODkgQEAKK2Z1bmN0aW9uIGFwcGVuZF9ub3RlYm9vaygp
eworICAgICQoJ2JvZHknKS5hcHBlbmQoCisgICAgICAgICQoJzxvYmplY3QvPicsIHsKKyAgICAg
ICAgICAgIHNyYzogbm90ZWJvb2tfYWNjZXNzX3VybCwKKyAgICAgICAgICAgIGRhdGE6IG5vdGVi
b29rX2FjY2Vzc191cmwsCisgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJywKKyAgICAgICAgICAg
IHdpZHRoOiAnMTAwJScsCisgICAgICAgIH0pLmFwcGVuZCgKKyAgICAgICAgICAgICQoJzxlbWJk
ZWQvPicsIHsKKyAgICAgICAgICAgICAgICBzcmM6IG5vdGVib29rX2FjY2Vzc191cmwsCisgICAg
ICAgICAgICAgICAgZGF0YTogbm90ZWJvb2tfYWNjZXNzX3VybCwKKyAgICAgICAgICAgICAgICBo
ZWlnaHQ6ICcxMDAlJywKKyAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLAorICAgICAgICAg
ICAgfSkKKyAgICAgICAgKQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2VfZmFpbGVkX2F1
dGgoKXsKKyAgICB0b2FzdHIuaW5mbygKKyAgICAgICAgIkF1dG9tYXRpYyBhdXRob3JpemF0aW9u
IGZhaWxlZC4gWW91IGNhbiBtYW51YWxseSBsb2dpbiB3aXRoOjxicj4iPQogKyBwYXNzd29yZCAr
ICI8YnI+PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0
aG9uL3c9CmlraS9BdXRvbWF0aWMtQXV0aG9yaXphdGlvbi1GYWlsZWQnIHRhcmdldD0zRCdfYmxh
bmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKKyAgICAgICAgIlBsZWFzZSBsb2dpbiBtYW51YWxs
eSIsCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDEwMDAwMCwgJ3Rh
cFRvRGlzbWlzcyc6IGZhbHNlfQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2VfZmFpbGVk
X2Nvbm5lY3Rpb24oKXsKKyAgICB0b2FzdHIuZXJyb3IoCisgICAgICAgICJDb3VsZCBub3QgY29u
bmVjdCB0byBJUHl0aG9uIE5vdGVib29rLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaT0Kc3Ry
YXRvci4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0
aG9uL3dpa2kvQ291bGQtPQpub3QtY29ubmVjdC10by1JUHl0aG9uLU5vdGVib29rJyB0YXJnZXQ9
M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCisgICAgIlNlY3VyaXR5IHdhcm5pbmci
LAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwgJ3RhcFRv
RGlzbWlzcyc6IHRydWV9CisgICAgKTsKK30KKworZnVuY3Rpb24gbWVzc2FnZV9ub19hdXRoKCl7
CisgICAgdG9hc3RyLndhcm5pbmcoCisgICAgICAgICJJUHl0aG9uIE5vdGVib29rIHdhcyBsdW5j
aGVkIHdpdGhvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0KY3VyaXR5IGlzc3VlLiA8
YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vd2lr
aS9JPQpQeXRob24tTm90ZWJvb2std2FzLWx1bmNoZWQtd2l0aG91dC1hdXRoZW50aWNhdGlvbicg
dGFyZ2V0PTNEJ19ibGFuayc+TW9yZSA9CmRldGFpbHMgLi4uPC9hPiIsCisgICAgICAgICJTZWN1
cml0eSB3YXJuaW5nIiwKKyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0Jzog
MjAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworfQorCisKKy8qKgorICogTG9h
ZCBhbiBpbnRlcmFjdGl2ZSBlbnZpcm9ubWVudCAoSUUpIGZyb20gYSByZW1vdGUgVVJMCisgKiBA
cGFyYW0ge0Jvb2xlYW59IHBhc3N3b3JkX2F1dGggV2hldGhlciBvciBub3QgdGhpcyByZXNvdXJj
ZSByZXF1aXJlcyBwYT0Kc3N3b3JkIGF1dGhlbnRpY2F0aW9uCisgKiBAcGFyYW0ge1N0cmluZ30g
cGFzc3dvcmQ6IHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSByZW1vdGUgcj0K
ZXNvdXJjZQorICogQHBhcmFtIHtTdHJpbmd9IG5vdGVib29rX2xvZ2luX3VybDogVVJMIHRoYXQg
c2hvdWxkIGJlIFBPU1RlZCB0byBmb3IgbG89CmdpbgorICogQHBhcmFtIHtTdHJpbmd9IG5vdGVi
b29rX2FjY2Vzc191cmw6IHRoZSBVUkwgZW1iZWRlZCBpbiB0aGUgcGFnZSBhbmQgbG89CmFkZWQK
KyAqPTIwCisgKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGEgbG90IG9mIHdvcmsgdG8gbWFr
ZSBpdCBtb3JlIGdlbmVyaWM6CisgKiBUT0RPOiBleGNoYW5nZSBsb2dpbl91cmwsIHBhc3N3b3Jk
LCBwYXNzd29yZF9hdXRoIGZvciBhIHNpbmdsZSBmdW5jdGlvbj0KIHdoaWNoIGVuY2Fwc3VsYXRl
cyBhbGwgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2NlZHVyZSwgYXMgdGhhdCB3aWxsIGRpZmZlciBi
PQpldHdlZW4gSUVzLgorICovCitmdW5jdGlvbiBsb2FkX25vdGVib29rKHBhc3N3b3JkX2F1dGgs
IHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVibz0Kb2tfYWNjZXNzX3VybCl7Cisg
ICAgaWYgKCBwYXNzd29yZF9hdXRoICkgeworICAgICAgICAvLyBPbiBkb2N1bWVudCByZWFkeQor
ICAgICAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgLy8g
TWFrZSBhbiBBSkFYIFBPU1QKKyAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAg
dHlwZTogIlBPU1QiLAorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBMb2dpbiBVUkwKKyAgICAg
ICAgICAgICAgICB1cmw6IG5vdGVib29rX2xvZ2luX3VybCwKKyAgICAgICAgICAgICAgICAvLyBX
aXRoIG91ciBwYXNzd29yZAorICAgICAgICAgICAgICAgIGRhdGE6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3Bhc3N3b3JkJzogbm90ZWJvb2tfcHcKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUgbm90ZWJvb2sKKyAg
ICAgICAgICAgICAgICBzdWNjZXNzOiBhcHBlbmRfbm90ZWJvb2ssCisgICAgICAgICAgICAgICAg
ZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZV9mYWlsZWRfYXV0aCgpOworICAgICAgICAgICAgICAgICAgICBpZihwYXNzd29y
ZF9hdXRoX2pzdmFyICYmICFhcGFjaGVfdXJsc19qc3Zhcil7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGYWlsdXJlIGhhcHBlbnMgZHVlIHRvIENPUlMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZF9ub3RlYm9vaygpOworICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZmFpbGVkX2Nvbm5lY3Rpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvIHdlIHdhbnQgdG8gdHJ5IGFuZCBsb2FkIHRoZSBub3RlYm9v
ayBhbnl3YXk/PQogSnVzdCBpbiBjYXNlPworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gTm90IHVzaW5nIHBhc3N3b3JkIGF1dGgsIGp1c3QgZW1iZWQgaXQgdG8g
YXZvaWQgY29udGVudC1vcmlnaW4gPQppc3N1ZXMuCisgICAgICAgIG1lc3NhZ2Vfbm9fYXV0aCgp
OworICAgICAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
YXBwZW5kX25vdGVib29rKCk7CisgICAgICAgIH0pOworICAgIH0KK30KCmRpZmYgLXIgMTBiNmUw
NmUwYzE1ZDFmYzc3Y2EzY2FhY2NhMzk1YWQyMGM1ODlhNiAtciAzZjc0YTZkMjUzNGQ5MDAzNWJk
Yzc5Mz0KZGE5NjJlNjQ4YjEwODZiZWQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTUs
NiArMTUsOSBAQAogZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoZ2FsYXh5X2Nv
bmZpZy5yb290KQogaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFu
cy5oaXN0b3J5LmlkICkKIGRhdGFzZXRfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCgg
aGRhLmlkICkKKyMgUm91dGVzCityb290ICAgICAgICA9M0QgaC51cmxfZm9yKCAiLyIgKQorYXBw
X3Jvb3QgICAgPTNEIHJvb3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRp
Yy8iCj0yMAogY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQn
OiAnODA4MCd9KQogY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggZ2FsYXh5X3Jvb3RfZGlyLCAn
dW5pdmVyc2Vfd3NnaS5pbmknICkgKQpAQCAtNzgsNiArODEsNyBAQAogICAgIFBPUlQgPTNEIHJh
bmRvbS5yYW5kcmFuZ2UoMTAwMDAsMTUwMDApCiAgICAgaWYgUE9SVCBub3QgaW4gb2NjdXBpZWRf
cG9ydHM6CiAgICAgICAgIGJyZWFrCitQT1JUID0zRCAxNDEzMQo9MjAKIEhPU1QgPTNEIHJlcXVl
c3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwgd2UganVzdCB3YW50IHRoZSBVUkwgdGhpcyBnYWxh
eHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4KQEAgLTE2MSw2NSArMTY1LDE5IEBACiAke2guY3Nz
KCAnYmFzZScgKSB9CiAke2guanMoICdsaWJzL2pxdWVyeS9qcXVlcnknICkgfQogJHtoLmpzKCAn
bGlicy90b2FzdHInICkgfQotCisjIyBMb2FkIElQeXRob24tR2FsYXh5IGNvbm5lY3RvcgorJHto
LmphdmFzY3JpcHRfbGluayggYXBwX3Jvb3QgKyAnaXB5LWdhbGF4eS5qcycgKX0KIDwvaGVhZD48
Ym9keT4KKwogPHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCI+Ci1pZiAoICR7IHBhc3N3
b3JkX2F1dGhfanN2YXIgfSApIHsKLSAgICAvLyBPbiBkb2N1bWVudCByZWFkeQotICAgICQoIGRv
Y3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIE1ha2UgYW4gQUpBWCBQT1NU
Ci0gICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICB0eXBlOiAiUE9TVCIsCi0gICAgICAgICAg
ICAvLyB0byB0aGUgTG9naW4gVVJMCi0gICAgICAgICAgICB1cmw6ICIkeyBub3RlYm9va19sb2dp
bl91cmwgfSIsCi0gICAgICAgICAgICAvLyBXaXRoIG91ciBwYXNzd29yZAotICAgICAgICAgICAg
ZGF0YTogewotICAgICAgICAgICAgICAgICdwYXNzd29yZCc6ICckeyBub3RlYm9va19wdyB9Jwot
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9h
ZCB0aGUgbm90ZWJvb2sKLSAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7Ci0gICAgICAg
ICAgICAgICAgLy9BcHBlbmQgYW4gb2JqZWN0IHRvIHRoZSBib2R5Ci0gICAgICAgICAgICAgICAg
JCgnYm9keScpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNEIiR7IG5vdGVib29rX2FjY2Vzc191cmwg
fT0KIiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSI+JwotICAgICAgICAgICAgICAgICsn
PGVtYmVkIHNyYz0zRCIkeyBub3RlYm9va19hY2Nlc3NfdXJsIH0iIGhlaWdodD0zRCIxMDAlIiA9
CndpZHRoPTNEIjEwMCUiLz48L29iamVjdD4nCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7
CitwYXNzd29yZF9hdXRoID0zRCAnJHsgcGFzc3dvcmRfYXV0aF9qc3ZhciB9JzsKK25vdGVib29r
X2xvZ2luX3VybCA9M0QgJyR7IG5vdGVib29rX2xvZ2luX3VybCB9JzsKK3Bhc3N3b3JkID0zRCAn
JHsgbm90ZWJvb2tfcHcgfSc7Citub3RlYm9va19hY2Nlc3NfdXJsID0zRCAnJHsgbm90ZWJvb2tf
YWNjZXNzX3VybCB9JzsKKy8vIExvYWQgbm90ZWJvb2sKK2xvYWRfbm90ZWJvb2socGFzc3dvcmRf
YXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzPQpfdXJs
KTsKKzwvc2NyaXB0Pgo9MjAKLSAgICAgICAgICAgICAgICB0b2FzdHIuaW5mbygKLSAgICAgICAg
ICAgICAgICAgICAgIkF1dG9tYXRpYyBhdXRob3JpemF0aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51
YWxseSBsb2dpPQpuIHdpdGg6PGJyPiR7IG5vdGVib29rX3B3IH08YnI+PGEgaHJlZj0zRCdodHRw
czovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGE9Cnh5LWlweXRob24vd2lraS9BdXRvbWF0aWMt
QXV0aG9yaXphdGlvbi1GYWlsZWQnIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0YT0KaWxzIC4u
LjwvYT4iLAotICAgICAgICAgICAgICAgICAgICAiUGxlYXNlIGxvZ2luIG1hbnVhbGx5IiwKLSAg
ICAgICAgICAgICAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAw
LCAndGFwVG9EaXNtaXNzPQonOiBmYWxzZX0KLSAgICAgICAgICAgICAgICApOwotCi0gICAgICAg
ICAgICAgICAgaWYoJHsgcGFzc3dvcmRfYXV0aF9qc3ZhciB9ICYmICEkeyBhcGFjaGVfdXJsc19q
c3ZhciB9KXsKLSAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgnPG9iamVjdCBk
YXRhPTNEIiR7IG5vdGVib29rX2FjY2Vzc191PQpybCB9IiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9
M0QiMTAwJSI+JwotICAgICAgICAgICAgICAgICAgICArJzxlbWJlZCBzcmM9M0QiJHsgbm90ZWJv
b2tfYWNjZXNzX3VybCB9IiBoZWlnaHQ9M0QiMTA9CjAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmpl
Y3Q+JwotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAg
ICAgICAgICAgICAgICAgIHRvYXN0ci5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJD
b3VsZCBub3QgY29ubmVjdCB0byBJUHl0aG9uIE5vdGVib29rLiBQbGVhc2UgY29uPQp0YWN0IHlv
dXIgYWRtaW5pc3RyYXRvci4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5n
L2dhbGF4eS1pcHk9CnRob24vd2lraS9Db3VsZC1ub3QtY29ubmVjdC10by1JUHl0aG9uLU5vdGVi
b29rJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldD0KYWlscyAuLi48L2E+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJTZWN1cml0eSB3YXJuaW5nIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtPQpp
c3MnOiB0cnVlfQotICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotZWxzZSB7Ci0gICAgLy8g
Tm90IHVzaW5nIHBhc3N3b3JkIGF1dGgsIGp1c3QgZW1iZWQgaXQgdG8gYXZvaWQgY29udGVudC1v
cmlnaW4gaXNzdT0KZXMuCi0gICAgdG9hc3RyLndhcm5pbmcoCi0gICAgICAgICJJUHl0aG9uIE5v
dGVib29rIHdhcyBsdW5jaGVkIHdpdGhvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0K
Y3VyaXR5IGlzc3VlLiA8YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2Fs
YXh5LWlweXRob24vd2lraS9JPQpQeXRob24tTm90ZWJvb2std2FzLWx1bmNoZWQtd2l0aG91dC1h
dXRoZW50aWNhdGlvbicgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSA9CmRldGFpbHMgLi4uPC9hPiIs
Ci0gICAgICAgICJTZWN1cml0eSB3YXJuaW5nIiwKLSAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRy
dWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KLSAgICAgICAgKTsK
LSAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAgICAkKCdib2R5Jyku
YXBwZW5kKCc8b2JqZWN0IGRhdGE9M0QiJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9IiBoZWlnaHQ9
Cj0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIj4nCi0gICAgICAgICsnPGVtYmVkIHNyYz0zRCIkeyBu
b3RlYm9va19hY2Nlc3NfdXJsIH0iIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRD0KIjEwMCUiLz48
L29iamVjdD4nCi0gICAgICAgICkKLSAgICB9KTsKLX0KLTwvc2NyaXB0PjwvYm9keT48L2h0bWw+
CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzI0
MzVhYjZiZWQzYy8KQ2hhbmdlc2V0OiAgIDI0MzVhYjZiZWQzYwpVc2VyOiAgICAgICAgZXJhc2No
ZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEVy
cm9yIG1lc3NhZ2UgaXMgb25seSByZWxldmFudCBpbiBzcGVjaWZpYyBjaXJjdW1zdGFuY2UsIG90
aGVyPQogY2lyY3Vtc3RhbmNlcyBhcmUgbGlrZWx5IG1vcmUgc2VyaW91cyBlcnJvcnMKQWZmZWN0
ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAzZjc0YTZkMjUzNGQ5MDAzNWJkYzc5M2RhOTYyZTY0OGIx
MDg2YmVkIC1yIDI0MzVhYjZiZWQzY2FkNjA3NTQ2YTg3PQo5M2VhNDg5ZmRkYWVkNTcwZCBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHktZ2FsYXh5LmpzCi0t
LSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweS1nYWxh
eHkuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aXB5LWdhbGF4eS5qcwpAQCAtNjcsOSArNjcsOSBAQAogICAgICAgICAgICAgICAgIC8vIElmIHRo
YXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUgbm90ZWJvb2sKICAgICAgICAgICAgICAgICBzdWNj
ZXNzOiBhcHBlbmRfbm90ZWJvb2ssCiAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpx
eGhyLCBzdGF0dXMsIGVycm9yKXsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRf
YXV0aCgpOwogICAgICAgICAgICAgICAgICAgICBpZihwYXNzd29yZF9hdXRoX2pzdmFyICYmICFh
cGFjaGVfdXJsc19qc3Zhcil7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWlsdXJlIGhh
cHBlbnMgZHVlIHRvIENPUlMKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZmFpbGVk
X2F1dGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF9ub3RlYm9vaygpOwogICAg
ICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vf
ZmFpbGVkX2Nvbm5lY3Rpb24oKTsKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4
eS1jZW50cmFsL2NvbW1pdHMvMzcyMDU1MDJhNWI0LwpDaGFuZ2VzZXQ6ICAgMzcyMDU1MDJhNWI0
ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCsw
MDowMApTdW1tYXJ5OiAgICAgUmVtb3ZlZCBkb2NrZXIgZGVsYXkgd2l0aCBzcGlubmluZwpBZmZl
Y3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDI0MzVhYjZiZWQzY2FkNjA3NTQ2YTg3OTNlYTQ4OWZk
ZGFlZDU3MGQgLXIgMzcyMDU1MDJhNWI0ZDg4NjJiYmY0Mjk9CmVjOTIzM2QyZGU3M2QzMGM4IGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZi9pcHl0aG9uLmNvbmYKLS0t
IGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24uY29u
ZgorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhv
bi5jb25mCkBAIC0yLDcgKzIsNiBAQAogYXBhY2hlX3VybHMgPTNEIEZhbHNlCiBwYXNzd29yZF9h
dXRoID0zRCBGYWxzZQogc3NsID0zRCBGYWxzZQotZG9ja2VyX2RlbGF5ID0zRCAxCj0yMAogW2Rv
Y2tlcl0KIGNvbW1hbmQgPTNEIGRvY2tlcgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hYWZkY2JiYjVjOTgvCkNoYW5nZXNldDogICBhYWZkY2Ji
YjVjOTgKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4
OjA0KzAwOjAwClN1bW1hcnk6ICAgICBSZWZhY3RvcmVkIEpTIGNvZGUgdG8gd2FpdCBvbiBwYWdl
IGxvYWQKU2VlIGxpbmtlZCBTTyBxdWVzdGlvbiBpbiBzb3VyY2UgZm9yIGluZm9ybWF0aW9uIG9u
IHRoZSB0eXBlIG9mIEpTIGRlbGF5IGxvPQpvcAp3ZSdyZSBkb2luZy4KQWZmZWN0ZWQgIzogIDEg
ZmlsZQoKZGlmZiAtciAzNzIwNTUwMmE1YjRkODg2MmJiZjQyOWVjOTIzM2QyZGU3M2QzMGM4IC1y
IGFhZmRjYmJiNWM5ODA3OWM1ZGUxNzk4PQo5MzFjMDRjYTAzZDMyMTlkYyBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHktZ2FsYXh5LmpzCi0tLSBhL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweS1nYWxheHkuanMKKysr
IGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaXB5LWdhbGF4
eS5qcwpAQCAtMSwyMiArMSwxNSBAQAotZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKCl7Ci0gICAg
JCgnYm9keScpLmFwcGVuZCgKLSAgICAgICAgJCgnPG9iamVjdC8+JywgewotICAgICAgICAgICAg
c3JjOiBub3RlYm9va19hY2Nlc3NfdXJsLAotICAgICAgICAgICAgZGF0YTogbm90ZWJvb2tfYWNj
ZXNzX3VybCwKLSAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLAotICAgICAgICAgICAgd2lkdGg6
ICcxMDAlJywKLSAgICAgICAgfSkuYXBwZW5kKAotICAgICAgICAgICAgJCgnPGVtYmRlZC8+Jywg
ewotICAgICAgICAgICAgICAgIHNyYzogbm90ZWJvb2tfYWNjZXNzX3VybCwKLSAgICAgICAgICAg
ICAgICBkYXRhOiBub3RlYm9va19hY2Nlc3NfdXJsLAotICAgICAgICAgICAgICAgIGhlaWdodDog
JzEwMCUnLAotICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsCi0gICAgICAgICAgICB9KQot
ICAgICAgICApCisvKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJlbW92ZSBjb250ZW50IGZy
b20gdGhlIG1haW4gYXJlYSBhbmQgYWRkIHRoZSBub3RlPQpib29rLgorICogTm90IGlkZW1wb3Rl
bnQKKyAqLworZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7CisgICAgJCgnI3NwaW5uZXIn
KS5yZW1vdmUoKTsKKyAgICAkKCcjbWFpbicpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNEIicgKyB1
cmwgKyAnIiBoZWlnaHQ9M0QiOTUlIiB3aWR0aD0KPTNEIjEwMCUiPicKKyAgICArJzxlbWJlZCBz
cmM9M0QiJyArIHVybCArICciIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmpl
Y3Q+JwogICAgICk7CiB9Cj0yMAotZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfYXV0aCgpeworZnVu
Y3Rpb24gbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCl7CiAgICAgdG9hc3RyLmluZm8oCiAg
ICAgICAgICJBdXRvbWF0aWMgYXV0aG9yaXphdGlvbiBmYWlsZWQuIFlvdSBjYW4gbWFudWFsbHkg
bG9naW4gd2l0aDo8YnI+Ij0KICsgcGFzc3dvcmQgKyAiPGJyPjxhIGhyZWY9M0QnaHR0cHM6Ly9n
aXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93PQppa2kvQXV0b21hdGljLUF1dGhv
cml6YXRpb24tRmFpbGVkJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIs
CiAgICAgICAgICJQbGVhc2UgbG9naW4gbWFudWFsbHkiLApAQCAtNDAsNiArMzMsMjMgQEAKICAg
ICApOwogfQo9MjAKKy8qKgorICogSW5pdGlhbCB2ZXJzaW9uIG9mIGZ1bmN0aW9uIHRvIHRlc3Qg
YXZhaWxhYmlsaXR5IG9mIFVSTC9yZXNvdXJjZQorICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29t
L3EvMjUzOTAyMDYvMzQ3MzY4CisgKi8KK2Z1bmN0aW9uIHRlc3RfaWVfYXZhaWxhYmlsaXR5KHVy
bCl7CisgICAgaW50ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CisgICAgICAgICQu
YWpheCh7CisgICAgICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgICAgIHVybDogdXJsLAor
ICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBjbGVhcklu
dGVydmFsKGludGVydmFsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAvL19oYW5kbGVfbm90ZWJvb2tfbG9hZGluZyhwYXNzd29yZF9hdXRoLCBwYXNzd29y
ZCwgbm90ZWJvPQpva19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191cmwsIGFwYWNoZV91cmxz
LCBkb2NrZXJfZGVsYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9LCA1MDAp
OworfQo9MjAKIC8qKgogICogTG9hZCBhbiBpbnRlcmFjdGl2ZSBlbnZpcm9ubWVudCAoSUUpIGZy
b20gYSByZW1vdGUgVVJMCkBAIC00Nyw0MyArNTcsNjUgQEAKICAqIEBwYXJhbSB7U3RyaW5nfSBw
YXNzd29yZDogcGFzc3dvcmQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHJlbW90ZSByPQpl
c291cmNlCiAgKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfbG9naW5fdXJsOiBVUkwgdGhhdCBz
aG91bGQgYmUgUE9TVGVkIHRvIGZvciBsbz0KZ2luCiAgKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJv
b2tfYWNjZXNzX3VybDogdGhlIFVSTCBlbWJlZGVkIGluIHRoZSBwYWdlIGFuZCBsbz0KYWRlZAor
ICogQHBhcmFtIHtCb29sZWFufSBhcGFjaGVfdXJsczogUHJveHlpbmcgaXMgZG9uZSBvdXRzaWRl
IG9mIGdhbGF4eSBpbiB0aGU9CiB3ZWJzZXJ2ZXIKKyAqIEBwYXJhbSB7U3RyaW5nfSBnYWxheHlf
cm9vdDogcm9vdCBvZiB0aGUgZ2FsYXh5IHNlcnZlciwgdXNlZCBmb3IgZmluZGluPQpnIHRoZSBz
dGF0aWMgc3Bpbm5lci5naWYgdGhhdCBzaGlwcyB3aXRoIGdhbGF4eS4KICAqPTIwCiAgKiBUT0RP
OiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGEgbG90IG9mIHdvcmsgdG8gbWFrZSBpdCBtb3JlIGdlbmVy
aWM6CiAgKiBUT0RPOiBleGNoYW5nZSBsb2dpbl91cmwsIHBhc3N3b3JkLCBwYXNzd29yZF9hdXRo
IGZvciBhIHNpbmdsZSBmdW5jdGlvbj0KIHdoaWNoIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGF1dGhl
bnRpY2F0aW9uIHByb2NlZHVyZSwgYXMgdGhhdCB3aWxsIGRpZmZlciBiPQpldHdlZW4gSUVzLgog
ICovCi1mdW5jdGlvbiBsb2FkX25vdGVib29rKHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3Rl
Ym9va19sb2dpbl91cmwsIG5vdGVibz0Kb2tfYWNjZXNzX3VybCl7Ci0gICAgaWYgKCBwYXNzd29y
ZF9hdXRoICkgewotICAgICAgICAvLyBPbiBkb2N1bWVudCByZWFkeQotICAgICAgICAkKCBkb2N1
bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgLy8gTWFrZSBhbiBBSkFYIFBP
U1QKK2Z1bmN0aW9uIGxvYWRfbm90ZWJvb2socGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVi
b29rX2xvZ2luX3VybCwgbm90ZWJvPQpva19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5
X3Jvb3QpeworICAgICQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgICAgICQo
JyNtYWluJykuYXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0zRCInICsgZ2FsYXh5X3Jv
b3QgKyAnLz0Kc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiID4nKTsKKyAgICAgICAgaW50
ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAkLmFqYXgoewot
ICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKLSAgICAgICAgICAgICAgICAvLyB0byB0aGUg
TG9naW4gVVJMCi0gICAgICAgICAgICAgICAgdXJsOiBub3RlYm9va19sb2dpbl91cmwsCi0gICAg
ICAgICAgICAgICAgLy8gV2l0aCBvdXIgcGFzc3dvcmQKLSAgICAgICAgICAgICAgICBkYXRhOiB7
Ci0gICAgICAgICAgICAgICAgICAgICdwYXNzd29yZCc6IG5vdGVib29rX3B3CisgICAgICAgICAg
ICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgICAgdXJsOiBub3RlYm9va19hY2Nlc3Nf
dXJsLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgICAgICBfaGFu
ZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGU9CmJvb2tf
bG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscyk7CiAgICAgICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIHN1Y2Nlc3NmdWwsIGxvYWQg
dGhlIG5vdGVib29rCi0gICAgICAgICAgICAgICAgc3VjY2VzczogYXBwZW5kX25vdGVib29rLAot
ICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmKHBhc3N3b3JkX2F1dGhfanN2YXIgJiYgIWFwYWNoZV91cmxz
X2pzdmFyKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhaWx1cmUgaGFwcGVucyBkdWUg
dG8gQ09SUwotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRfYXV0aCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25vdGVib29rKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH1lbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRfY29u
bmVjdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2Ugd2FudCB0byB0cnkg
YW5kIGxvYWQgdGhlIG5vdGVib29rIGFueXdheT89CiBKdXN0IGluIGNhc2U/Ci0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oKXsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5sb2coIlNvbWUgZXJyb3IiKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgNTAwKTsKKyAgICB9KTsKK30KKworLyoqCisg
KiBJbnRlcm5hbCBmdW5jdGlvbgorICovCitmdW5jdGlvbiBfaGFuZGxlX25vdGVib29rX2xvYWRp
bmcocGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luXz0KdXJsLCBub3RlYm9v
a19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscyl7CisgICAgaWYgKCBwYXNzd29yZF9hdXRoICkgewor
ICAgICAgICAvLyBNYWtlIGFuIEFKQVggUE9TVAorICAgICAgICAkLmFqYXgoeworICAgICAgICAg
ICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgICAgLy8gdG8gdGhlIExvZ2luIFVSTAorICAgICAg
ICAgICAgdXJsOiBub3RlYm9va19sb2dpbl91cmwsCisgICAgICAgICAgICAvLyBXaXRoIG91ciBw
YXNzd29yZAorICAgICAgICAgICAgZGF0YTogeworICAgICAgICAgICAgICAgICdwYXNzd29yZCc6
IHBhc3N3b3JkCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gSWYgdGhhdCBpcyBzdWNj
ZXNzZnVsLCBsb2FkIHRoZSBub3RlYm9vaworICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0
dXMsIGVycm9yKXsKKyAgICAgICAgICAgICAgICBpZihwYXNzd29yZF9hdXRoICYmICFhcGFjaGVf
dXJscyl7CisgICAgICAgICAgICAgICAgICAgIC8vIEZhaWx1cmUgaGFwcGVucyBkdWUgdG8gQ09S
UworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2ZhaWxlZF9hdXRoKHBhc3N3b3JkKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kX25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOwor
ICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2ZhaWxl
ZF9jb25uZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIERvIHdlIHdhbnQgdG8gdHJ5
IGFuZCBsb2FkIHRoZSBub3RlYm9vayBhbnl3YXk/IEp1cz0KdCBpbiBjYXNlPworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIE5vdCB1c2luZyBwYXNzd29yZCBhdXRoLCBqdXN0IGVtYmVkIGl0IHRvIGF2
b2lkIGNvbnRlbnQtb3JpZ2luID0KaXNzdWVzLgogICAgICAgICBtZXNzYWdlX25vX2F1dGgoKTsK
LSAgICAgICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGFw
cGVuZF9ub3RlYm9vaygpOwotICAgICAgICB9KTsKKyAgICAgICAgYXBwZW5kX25vdGVib29rKG5v
dGVib29rX2FjY2Vzc191cmwpOwogICAgIH0KIH0KCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2Fs
YXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZjNjZjM5ZjAxNmY4LwpDaGFuZ2VzZXQ6ICAgZjNj
ZjM5ZjAxNmY4ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAy
MjozODowNCswMDowMApTdW1tYXJ5OiAgICAgRmluaXNoZWQgd29yayBvbiBzcGlubmluZwogLSBS
ZW1vdmVkIGEgc3RhdGljYWxseSBzZXQgcG9ydCBkdXJpbmcgdGVzdGluZwogLSBNYWRlIHZhcmlh
YmxlcyBsb2NhbCBzbyB3ZSBjYW4gYmUgc3VyZSB0aGV5IGFyZW4ndCBiZWluZyBtaXMtdXNlZAog
LSBSZW1vdmVkIHNsZWVwCiAtIE5ldyBwYXJhbWV0ZXJzIG5lZWRlZCBpbiBub3RlYm9vayBsb2Fk
IGNhbGwKIC0gQWRkZWQgbWFpbiBkaXYgdG8gdXNlIGZvciBpbWFnZXMvZXRjLiBQcm9iYWJseSBu
b3QgbmVjZXNzYXJ5LgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGFhZmRjYmJiNWM5ODA3
OWM1ZGUxNzk4OTMxYzA0Y2EwM2QzMjE5ZGMgLXIgZjNjZjM5ZjAxNmY4YTdjMDk5NTYwODg9Cjhj
Mjc1MjI1YWI2MGUzYjUxIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTgxLDcgKzgxLDYg
QEAKICAgICBQT1JUID0zRCByYW5kb20ucmFuZHJhbmdlKDEwMDAwLDE1MDAwKQogICAgIGlmIFBP
UlQgbm90IGluIG9jY3VwaWVkX3BvcnRzOgogICAgICAgICBicmVhawotUE9SVCA9M0QgMTQxMzEK
PTIwCiBIT1NUID0zRCByZXF1ZXN0Lmhvc3QKICMgU3RyaXAgb3V0IHBvcnQsIHdlIGp1c3Qgd2Fu
dCB0aGUgVVJMIHRoaXMgZ2FsYXh5IHNlcnZlciB3YXMgYWNjZXNzZWQgYXQuCkBAIC0xNTUsMTAg
KzE1NCw2IEBACiAgICAgYXBhY2hlX3VybHNfanN2YXIgPTNEICJmYWxzZSIKIHN1YnByb2Nlc3Mu
Y2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCj0yMAotIyBXZSBuZWVkIHRvIHdhaXQgdW50
aWwgdGhlIEltYWdlIGFuZCBJUHl0aG9uIGluIGxvYWRlZAotIyBUT0RPOiBUaGlzIGNhbiBiZSBl
bmhhbmNlZCBsYXRlciwgd2l0aCBzb21lIEpTIHNwaW5uaW5nIGlmIG5lZWRlZC4KLXRpbWUuc2xl
ZXAoaXB5X3Zpel9jb25maWcuZ2V0aW50KCJtYWluIiwgImRvY2tlcl9kZWxheSIpKQotCiAlPjxo
dG1sPjxoZWFkPgpAQCAtMTcxLDEzICsxNjYsMTggQEAKIDxib2R5PjxzY3JpcHQgdHlwZT0zRCJ0
ZXh0L2phdmFzY3JpcHQiPgotcGFzc3dvcmRfYXV0aCA9M0QgJyR7IHBhc3N3b3JkX2F1dGhfanN2
YXIgfSc7Ci1ub3RlYm9va19sb2dpbl91cmwgPTNEICckeyBub3RlYm9va19sb2dpbl91cmwgfSc7
Ci1wYXNzd29yZCA9M0QgJyR7IG5vdGVib29rX3B3IH0nOwotbm90ZWJvb2tfYWNjZXNzX3VybCA9
M0QgJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfSc7Cit2YXIgcGFzc3dvcmRfYXV0aCA9M0QgJHsg
cGFzc3dvcmRfYXV0aF9qc3ZhciB9OwordmFyIGFwYWNoZV91cmxzID0zRCAkeyBhcGFjaGVfdXJs
c19qc3ZhciB9OwordmFyIG5vdGVib29rX2xvZ2luX3VybCA9M0QgJyR7IG5vdGVib29rX2xvZ2lu
X3VybCB9JzsKK3ZhciBwYXNzd29yZCA9M0QgJyR7IG5vdGVib29rX3B3IH0nOwordmFyIG5vdGVi
b29rX2FjY2Vzc191cmwgPTNEICckeyBub3RlYm9va19hY2Nlc3NfdXJsIH0nOwordmFyIGdhbGF4
eV9yb290ID0zRCAnJHsgcm9vdCB9JzsKIC8vIExvYWQgbm90ZWJvb2sKLWxvYWRfbm90ZWJvb2so
cGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNj
ZXNzPQpfdXJsKTsKK2xvYWRfbm90ZWJvb2socGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVi
b29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzPQpfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5
X3Jvb3QpOwogPC9zY3JpcHQ+Cj0yMAorPGRpdiBpZD0zRCJtYWluIiB3aWR0aD0zRCIxMDAlIiBo
ZWlnaHQ9M0QiMTAwJSI+Cis8L2Rpdj4KKwogPC9ib2R5PjwvaHRtbD4KCgpodHRwczovL2JpdGJ1
Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZjg4NWU0NTQ4ZGZjLwpDaGFu
Z2VzZXQ6ICAgZjg4NWU0NTQ4ZGZjClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAg
MjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgRml4ZXMgIzE1CkFmZmVjdGVk
ICM6ICAxIGZpbGUKCmRpZmYgLXIgZjNjZjM5ZjAxNmY4YTdjMDk5NTYwODg4YzI3NTIyNWFiNjBl
M2I1MSAtciBmODg1ZTQ1NDhkZmM0OWQ2Y2MyZTFmZD0KZTNlMWU2M2E1NDYxNTJmNzcgY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28K
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTAyLDcgKzEwMiw3IEBACj0yMAogY29uZl9maWxlID0z
RCB7CiAgICAgJ2hpc3RvcnlfaWQnOiBoaXN0b3J5X2lkLAotICAgICdnYWxheHlfdXJsJzogcmVx
dWVzdC5hcHBsaWNhdGlvbl91cmwucnN0cmlwKCcvJyksCisgICAgJ2dhbGF4eV91cmwnOiByZXF1
ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8nKSArICcvJywKICAgICAnYXBpX2tleSc6IGFw
aV9rZXksCiAgICAgJ3JlbW90ZV9ob3N0JzogcmVxdWVzdC5yZW1vdGVfYWRkciwKICAgICAnZ2Fs
YXh5X3Bhc3Rlcl9wb3J0JzogZ2FsYXh5X3Bhc3Rlcl9wb3J0LAoKCmh0dHBzOi8vYml0YnVja2V0
Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy83Y2VmMGFhNjBjZWIvCkNoYW5nZXNl
dDogICA3Y2VmMGFhNjBjZWIKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0
LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBDZW50ZXIgdGhlIHNwaW5uZXIKQWZm
ZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciBmODg1ZTQ1NDhkZmM0OWQ2Y2MyZTFmZGUzZTFlNjNh
NTQ2MTUyZjc3IC1yIDdjZWYwYWE2MGNlYjFiMzZmMDZkNjk2PQpjMzFkNjE2ZmZiZTJkMDBlYyBj
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHktZ2FsYXh5Lmpz
Ci0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweS1n
YWxheHkuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0
aWMvaXB5LWdhbGF4eS5qcwpAQCAtNjUsNyArNjUsNyBAQAogICovCiBmdW5jdGlvbiBsb2FkX25v
dGVib29rKHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVi
bz0Kb2tfYWNjZXNzX3VybCwgYXBhY2hlX3VybHMsIGdhbGF4eV9yb290KXsKICAgICAkKCBkb2N1
bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAgICAkKCcjbWFpbicpLmFwcGVuZCgnPGlt
ZyBpZD0zRCJzcGlubmVyIiBzcmM9M0QiJyArIGdhbGF4eV9yb290ICsgJy89CnN0YXRpYy9zdHls
ZS9sYXJnZXNwaW5uZXIuZ2lmIiA+Jyk7CisgICAgICAgICQoJyNtYWluJykuYXBwZW5kKCc8aW1n
IGlkPTNEInNwaW5uZXIiIHNyYz0zRCInICsgZ2FsYXh5X3Jvb3QgKyAnLz0Kc3RhdGljL3N0eWxl
L2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRv
O3RvcDowPQo7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7Ij4nKTsKICAgICAgICAgaW50ZXJ2YWwg
PTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAkLmFqYXgoewogICAgICAg
ICAgICAgICAgIHR5cGU6ICJHRVQiLAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy83ZjQ3NDliYmM3MjUvCkNoYW5nZXNldDogICA3ZjQ3NDliYmM3
MjUKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0
KzAwOjAwClN1bW1hcnk6ICAgICBQb3NzaWJsZSBmaXggZm9yIENPUlMvY29va2llIGlzc3VlLgpJ
IG5vdGljZWQgdGhhdCB0aGUgY29va2llIHdhcyBpbmRlZWQgYmVpbmcgc2V0IGJ5IHRoZSBQT1NU
IHJlcXVlc3QuIEhvd2V2ZXI9CiwgdGhhdCBjb29raWUgd2FzCmVzc2VudGlhbGx5IGlnbm9yZWQg
aW4gdGhlIHN1YnNlcXVlbnQgcmVxdWVzdHMuCgpJIGxvb2tlZCBmb3IgcGxhY2VzIHRvIGludGVy
cnVwdCBpdCwgY291bGQgSSBqdXN0IHN0b3AgYWZ0ZXIgdGhlIFBPU1QgYW5kIG49Cm90IGV4ZWN1
dGUgYW55IHJlZGlyZWN0cy4KVGhhdCBkaWQgbm90IGFwcGVhciB0byBiZSBhbiBvcHRpb24gZHVl
IHRvIEhUVFAvWEhSIHNwZWMuIEFmdGVyIGEgYml0IG9mIHNlPQphcmNoaW5nIEkgY2FtZSB1cCB3
aXRoCnRoaXMgbGluazogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTQ0NjI2MTUgd2hpY2gg
c2VlbXMgdG8gc29sdmUgdGhlIGlzcz0KdWUuIE1lbnRpb25lZCBoZXJlOgpodHRwczovL2FwaS5q
cXVlcnkuY29tL2pRdWVyeS5hamF4LwpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDdjZWYw
YWE2MGNlYjFiMzZmMDZkNjk2YzMxZDYxNmZmYmUyZDAwZWMgLXIgN2Y0NzQ5YmJjNzI1ZWEyM2Fl
OTMzZjQ9CjJlMmEzZDk4OTMzNDg2MjA2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vc3RhdGljL2lweS1nYWxheHkuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9zdGF0aWMvaXB5LWdhbGF4eS5qcworKysgYi9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHktZ2FsYXh5LmpzCkBAIC01OSw3ICs1OSw3
IEBACiAgKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfYWNjZXNzX3VybDogdGhlIFVSTCBlbWJl
ZGVkIGluIHRoZSBwYWdlIGFuZCBsbz0KYWRlZAogICogQHBhcmFtIHtCb29sZWFufSBhcGFjaGVf
dXJsczogUHJveHlpbmcgaXMgZG9uZSBvdXRzaWRlIG9mIGdhbGF4eSBpbiB0aGU9CiB3ZWJzZXJ2
ZXIKICAqIEBwYXJhbSB7U3RyaW5nfSBnYWxheHlfcm9vdDogcm9vdCBvZiB0aGUgZ2FsYXh5IHNl
cnZlciwgdXNlZCBmb3IgZmluZGluPQpnIHRoZSBzdGF0aWMgc3Bpbm5lci5naWYgdGhhdCBzaGlw
cyB3aXRoIGdhbGF4eS4KLSAqPTIwCisgKgogICogVE9ETzogVGhpcyBmdW5jdGlvbiBuZWVkcyBh
IGxvdCBvZiB3b3JrIHRvIG1ha2UgaXQgbW9yZSBnZW5lcmljOgogICogVE9ETzogZXhjaGFuZ2Ug
bG9naW5fdXJsLCBwYXNzd29yZCwgcGFzc3dvcmRfYXV0aCBmb3IgYSBzaW5nbGUgZnVuY3Rpb249
CiB3aGljaCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZWR1cmUsIGFz
IHRoYXQgd2lsbCBkaWZmZXIgYj0KZXR3ZWVuIElFcy4KICAqLwpAQCAtOTYsNiArOTYsOSBAQAog
ICAgICAgICAgICAgZGF0YTogewogICAgICAgICAgICAgICAgICdwYXNzd29yZCc6IHBhc3N3b3Jk
CiAgICAgICAgICAgICB9LAorICAgICAgICAgICAgeGhyRmllbGRzOiB7CisgICAgICAgICAgICAg
ICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCisgICAgICAgICAgICB9LAogICAgICAgICAgICAgLy8g
SWYgdGhhdCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBub3RlYm9vawogICAgICAgICAgICAgc3Vj
Y2VzczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJv
b2tfYWNjZXNzX3VybCk7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2Vu
dHJhbC9jb21taXRzLzRhZWJjNGFlMzI1Ny8KQ2hhbmdlc2V0OiAgIDRhZWJjNGFlMzI1NwpVc2Vy
OiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAK
U3VtbWFyeTogICAgIEFkZGVkIENPUlMgcmVxdWlyZWQgcGFyYW1ldGVyIHRvIGNvbmYKQWZmZWN0
ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA3ZjQ3NDliYmM3MjVlYTIzYWU5MzNmNDJlMmEzZDk4OTMz
NDg2MjA2IC1yIDRhZWJjNGFlMzI1N2QzMmI2NDdhMzQ2PQo5ZjdiMTFmZWExMTg5YmY3NSBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFr
bwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xMDcsNiArMTA3LDcgQEAKICAgICAncmVtb3RlX2hv
c3QnOiByZXF1ZXN0LnJlbW90ZV9hZGRyLAogICAgICdnYWxheHlfcGFzdGVyX3BvcnQnOiBnYWxh
eHlfcGFzdGVyX3BvcnQsCiAgICAgJ2RvY2tlcl9wb3J0JzogUE9SVCwKKyAgICAnY29yc19vcmln
aW4nOiByZXF1ZXN0Lmhvc3RfdXJsLAogfQo9MjAKIGlmIGlweV92aXpfY29uZmlnLmdldGJvb2xl
YW4oIm1haW4iLCAicGFzc3dvcmRfYXV0aCIpOgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxh
eHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85YjMzYmU0ZDExMTUvCkNoYW5nZXNldDogICA5YjMz
YmU0ZDExMTUKVXNlcjogICAgICAgIEJqb2VybkdydWVuaW5nCkRhdGU6ICAgICAgICAyMDE0LTEw
LTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNaWdyYXRlIGZyb20gPG9iamVjdD4gdG8g
PGlmcmFtZT4uIE9iamVjdHMgc2VlbXMgdG8gaGF2ZSBzb21lID0KYnVncyBpbiBGRjMyLgpBZmZl
Y3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDRhZWJjNGFlMzI1N2QzMmI2NDdhMzQ2OWY3YjExZmVh
MTE4OWJmNzUgLXIgOWIzM2JlNGQxMTE1ZmE2ZWFhZjc4ZTY9CmFkODdmZTg1ODk3NWM4YzE5IGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweS1nYWxheHkuanMK
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaXB5LWdh
bGF4eS5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRp
Yy9pcHktZ2FsYXh5LmpzCkBAIC00LDExICs0LDExIEBACiAgKi8KIGZ1bmN0aW9uIGFwcGVuZF9u
b3RlYm9vayh1cmwpewogICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7Ci0gICAgJCgnI21haW4n
KS5hcHBlbmQoJzxvYmplY3QgZGF0YT0zRCInICsgdXJsICsgJyIgaGVpZ2h0PTNEIjk1JSIgd2lk
dGg9Cj0zRCIxMDAlIj4nCi0gICAgKyc8ZW1iZWQgc3JjPTNEIicgKyB1cmwgKyAnIiBoZWlnaHQ9
M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSIvPjwvb2JqZWN0PicKKyAgICAkKCcjbWFpbicpLmFwcGVu
ZCgnPGlmcmFtZSBmcmFtZUJvcmRlcj0zRCIwIiBzZWFtbGVzcz0zRCJzZWFtbGVzcyIgc3R5PQps
ZT0zRCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzpoaWRkZW47IiBzY3JvbGxp
bmc9M0Qibm8iIHNyYz0zRCI9CicrIHVybCArJyI+PC9pZnJhbWU+JwogICAgICk7CiB9Cj0yMAor
CiBmdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9hdXRoKHBhc3N3b3JkKXsKICAgICB0b2FzdHIuaW5m
bygKICAgICAgICAgIkF1dG9tYXRpYyBhdXRob3JpemF0aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51
YWxseSBsb2dpbiB3aXRoOjxicj4iPQogKyBwYXNzd29yZCArICI8YnI+PGEgaHJlZj0zRCdodHRw
czovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL3c9CmlraS9BdXRvbWF0aWMt
QXV0aG9yaXphdGlvbi1GYWlsZWQnIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48
L2E+IiwKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1p
dHMvNTc0OWE2OTQ4ZWVlLwpDaGFuZ2VzZXQ6ICAgNTc0OWE2OTQ4ZWVlClVzZXI6ICAgICAgICBl
cmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAg
ICAgVW51c2VkIHZhcmlhYmxlCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgOWIzM2JlNGQx
MTE1ZmE2ZWFhZjc4ZTZhZDg3ZmU4NTg5NzVjOGMxOSAtciA1NzQ5YTY5NDhlZWVkM2M0MzgyMzE0
ZD0KMGVlZjI1YWY5ODQ5ZmEyNzYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTQsNyAr
MTQsNiBAQAogZ2FsYXh5X2NvbmZpZyA9M0QgdHJhbnMuYXBwLmNvbmZpZwogZ2FsYXh5X3Jvb3Rf
ZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoZ2FsYXh5X2NvbmZpZy5yb290KQogaGlzdG9yeV9pZCA9
M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKLWRhdGFzZXRf
aWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggaGRhLmlkICkKICMgUm91dGVzCiByb290
ICAgICAgICA9M0QgaC51cmxfZm9yKCAiLyIgKQogYXBwX3Jvb3QgICAgPTNEIHJvb3QgKyAicGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy8iCgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2U2ODk1YmIyN2Q4OC8KQ2hhbmdlc2V0
OiAgIGU2ODk1YmIyN2Q4OApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIGFkZGVkIGNvbW1lbnQKQWZmZWN0ZWQg
IzogIDEgZmlsZQoKZGlmZiAtciA1NzQ5YTY5NDhlZWVkM2M0MzgyMzE0ZDBlZWYyNWFmOTg0OWZh
Mjc2IC1yIGU2ODk1YmIyN2Q4ODk1YmYzZjA5ODQzPQpiMDE0NzFhZDAyYzA0ZDk1YyBjb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwot
LS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xOCw2ICsxOCw3IEBACiByb290ICAgICAgICA9M0QgaC51
cmxfZm9yKCAiLyIgKQogYXBwX3Jvb3QgICAgPTNEIHJvb3QgKyAicGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3N0YXRpYy8iCj0yMAorIyBHYWxheHkgY29uZmlnIHBhcnNlcgogY29uZmln
ID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAnODA4MCd9KQogY29u
ZmlnLnJlYWQoIG9zLnBhdGguam9pbiggZ2FsYXh5X3Jvb3RfZGlyLCAndW5pdmVyc2Vfd3NnaS5p
bmknICkgKQo9MjAKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFs
L2NvbW1pdHMvYzcxNTU3NTEwODVjLwpDaGFuZ2VzZXQ6ICAgYzcxNTU3NTEwODVjClVzZXI6ICAg
ICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1t
YXJ5OiAgICAgUmVmYWN0b3IgaW50byBmdW5jdGlvbgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZm
IC1yIGU2ODk1YmIyN2Q4ODk1YmYzZjA5ODQzYjAxNDcxYWQwMmMwNGQ5NWMgLXIgYzcxNTU3NTEw
ODVjNjkxMzBmMzA1ZTk9CjQ2MmFmNGVmZThkZjZkOGQ4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1h
a28KQEAgLTE4LDE1ICsxOCwyMCBAQAogcm9vdCAgICAgICAgPTNEIGgudXJsX2ZvciggIi8iICkK
IGFwcF9yb290ICAgID0zRCByb290ICsgInBsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9z
dGF0aWMvIgo9MjAKLSMgR2FsYXh5IGNvbmZpZyBwYXJzZXIKLWNvbmZpZyA9M0QgQ29uZmlnUGFy
c2VyLlNhZmVDb25maWdQYXJzZXIoeydwb3J0JzogJzgwODAnfSkKLWNvbmZpZy5yZWFkKCBvcy5w
YXRoLmpvaW4oIGdhbGF4eV9yb290X2RpciwgJ3VuaXZlcnNlX3dzZ2kuaW5pJyApICkKK2RlZiBn
ZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KCk6CisgICAgIyBHYWxheHkgY29uZmlnIHBhcnNlcgorICAg
IGNvbmZpZyA9M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydwb3J0JzogJzgwODAn
fSkKKyAgICBjb25maWcucmVhZCggb3MucGF0aC5qb2luKCBnYWxheHlfcm9vdF9kaXIsICd1bml2
ZXJzZV93c2dpLmluaScgKSApCj0yMAotIyB1V1NHSSBnYWxheHkgaW5zdGFsbGF0aW9ucyBkb24n
dCB1c2UgcGFzdGVyIGFuZCBvbmx5IHNwZWFrIHVXU0dJIG5vdCBodHRwCi10cnk6Ci0gICAgZ2Fs
YXh5X3Bhc3Rlcl9wb3J0ID0zRCBjb25maWcuZ2V0aW50KCdzZXJ2ZXI6JXMnICUgZ2FsYXh5X2Nv
bmZpZy5zZXJ2ZT0Kcl9uYW1lLCAncG9ydCcpCi1leGNlcHQ6Ci0gICAgZ2FsYXh5X3Bhc3Rlcl9w
b3J0ID0zRCBOb25lCisgICAgIyB1V1NHSSBnYWxheHkgaW5zdGFsbGF0aW9ucyBkb24ndCB1c2Ug
cGFzdGVyIGFuZCBvbmx5IHNwZWFrIHVXU0dJIG5vdD0KIGh0dHAKKyAgICB0cnk6CisgICAgICAg
IHBvcnQgPTNEIGNvbmZpZy5nZXRpbnQoJ3NlcnZlcjolcycgJSBnYWxheHlfY29uZmlnLnNlcnZl
cl9uYW1lLCAncD0Kb3J0JykKKyAgICBleGNlcHQ6CisgICAgICAgIHBvcnQgPTNEIE5vbmUKKyAg
ICByZXR1cm4gcG9ydAorCisKK2dhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgZ2V0X2dhbGF4eV9wYXN0
ZXJfcG9ydCgpCj0yMAogdml6X3BsdWdpbl9kaXIgPTNEIE5vbmUKIHRyeToKCgpodHRwczovL2Jp
dGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNzY1NjFjZjE3OGI0LwpD
aGFuZ2VzZXQ6ICAgNzY1NjFjZjE3OGI0ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAg
ICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgcGx1Z2luX3BhdGggbm93
IGF2YWlsYWJsZQpBcyBvZiBodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50
cmFsL2NvbW1pdHMvZGRjOWE2NjlkNTNhYTI1OWQ9CjM4ZWZjODgyYzg5MDUwMzQ0NGRhYWY1CkFm
ZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgYzcxNTU3NTEwODVjNjkxMzBmMzA1ZTk0NjJhZjRl
ZmU4ZGY2ZDhkOCAtciA3NjU2MWNmMTc4YjQzZGVmMjdjY2I4Yz0KN2Q1NWI0OWQ5MTcyZGZjZDYg
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
PQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMzMsMjYgKzMzLDkgQEAKPTIwCiBnYWxheHlf
cGFzdGVyX3BvcnQgPTNEIGdldF9nYWxheHlfcGFzdGVyX3BvcnQoKQo9MjAKLXZpel9wbHVnaW5f
ZGlyID0zRCBOb25lCi10cnk6Ci0gICAgIyBOZXdlciBQeXRob24gdmVyc2lvbnMgYWxsb3cgbW9y
ZSwgZGlyZWN0L2NvcnJlY3QKLSAgICAjIGFjY2VzcyB0byB0aGUgY3VycmVudCBwbHVnaW4gZGly
ZWN0b3J5LgotICAgIHZpel9wbHVnaW5fZGlyID0zRCBwbHVnaW5fcGF0aAotZXhjZXB0IEV4Y2Vw
dGlvbjoKLSAgICBwYXNzCi0KLWlmIG5vdCB2aXpfcGx1Z2luX2RpcjoKLSAgICAjIFByb3ZpZGUg
ZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zLgotICAgIHZpel9wbHVnaW5fZGlyID0zRCBjb25m
aWcuZ2V0KCdhcHA6bWFpbicsICd2aXN1YWxpemF0aW9uX3BsdWdpbnNfZGlyZWM9CnRvcnknKQot
ICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHZpel9wbHVnaW5fZGlyKToKLSAgICAgICAgIyBJZiBp
dCBpcyBOT1QgYWJzb2x1dGUsIGkuZS4gcmVsYXRpdmUsIGFwcGVuZCB0byBnYWxheHkgcm9vdAot
ICAgICAgICB2aXpfcGx1Z2luX2RpciA9M0Qgb3MucGF0aC5qb2luKGdhbGF4eV9yb290X2Rpciwg
dml6X3BsdWdpbl9kaXIpCi0gICAgIyBHZXQgdGhpcyBwbHVnaW4ncyBkaXJlY3RvcnkKLSAgICB2
aXpfcGx1Z2luX2RpciA9M0Qgb3MucGF0aC5qb2luKHZpel9wbHVnaW5fZGlyLCAiaXB5dGhvbiIp
Ci0KICMgU3RvcmUgb3VyIHRlbXBsYXRlIGFuZCBjb25maWd1cmF0aW9uIHBhdGgKLW91cl9jb25m
aWdfZGlyID0zRCBvcy5wYXRoLmpvaW4odml6X3BsdWdpbl9kaXIsICJjb25maWciKQotb3VyX3Rl
bXBsYXRlX2RpciA9M0Qgb3MucGF0aC5qb2luKHZpel9wbHVnaW5fZGlyLCAidGVtcGxhdGVzIikK
K291cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2luX3BhdGgsICJjb25maWciKQor
b3VyX3RlbXBsYXRlX2RpciA9M0Qgb3MucGF0aC5qb2luKHBsdWdpbl9wYXRoLCAidGVtcGxhdGVz
IikKIGlweV92aXpfY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J2Fw
YWNoZV91cmxzJzogRmFsc2UsICdjPQpvbW1hbmQnOiAnZG9ja2VyJywgJ2ltYWdlJzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ3J1ZW5pbmcvZG9j
a2VyLWlweXRob24tPQpub3RlYm9vaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAncGFzc3dvcmRfYXV0aCc6IEZhbHNlLCAncz0Kc2wnOiBGYWxzZSwK
CgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNmUz
OGMxYWMyZjVhLwpDaGFuZ2VzZXQ6ICAgNmUzOGMxYWMyZjVhClVzZXI6ICAgICAgICBlcmFzY2hl
MgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgU2Vl
ZCBtb3JlIHJhbmRvbWx5Ck9yaWdpbmFsbHkgdGhpcyB3YXMgaW50ZW5kZWQgdG8gbWFrZSBzdXJl
IHJlLWNsaWNraW5nIGEgZGF0YXNldCB3b3VsZCBvcGVuID0KdGhlIHNhbWUgcG9ydCtJRSwgaG93
ZXZlcgp0aGF0J3Mgbm90IGEgc3VwcG9ydGVkIGJlaGF2aW91ciBhbmQgdGhlcmUncyBubyByZWFz
b24gdG8ga2VlcCB0aGF0IGZ1bmN0aW89Cm5hbGl0eSBhcm91bmQuCkFmZmVjdGVkICM6ICAxIGZp
bGUKCmRpZmYgLXIgNzY1NjFjZjE3OGI0M2RlZjI3Y2NiOGM3ZDU1YjQ5ZDkxNzJkZmNkNiAtciA2
ZTM4YzFhYzJmNWFjYjIxYTI1YzlkMD0KMjFiMDQ3OTBmNjk2Zjk0MTkgY29uZmlnL3BsdWdpbnMv
dmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubWFrbwpAQCAtMTcsNiArMTcsNyBAQAogIyBSb3V0ZXMKIHJvb3QgICAgICAgID0zRCBo
LnVybF9mb3IoICIvIiApCiBhcHBfcm9vdCAgICA9M0Qgcm9vdCArICJwbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vc3RhdGljLyIKK3JhbmRvbS5zZWVkKCkKPTIwCiBkZWYgZ2V0X2dhbGF4
eV9wYXN0ZXJfcG9ydCgpOgogICAgICMgR2FsYXh5IGNvbmZpZyBwYXJzZXIKQEAgLTQyLDkgKzQz
LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdk
b2NrZXJfZGVsYXknOiAxfSkKIGlweV92aXpfY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggb3Vy
X2NvbmZpZ19kaXIsICJpcHl0aG9uLmNvbmYiICkgKQo9MjAKLSMgRW5zdXJlIGdlbmVyYXRpb24g
b2Ygbm90ZWJvb2sgaWQgaXMgZGV0ZXJtaW5pc3RpYyBmb3IgdGhlIGRhdGFzZXQuIFJlcGxhPQpj
ZSB3aXRoIGhpc3RvcnkgaWQKLSMgd2hlbmV2ZXIgd2UgZmlndXJlIG91dCBob3cgdG8gYWNjZXNz
IHRoYXQuCi1yYW5kb20uc2VlZCggaGlzdG9yeV9pZCApCiBub3RlYm9va19pZCA9M0QgJycuam9p
bihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmJykgZm9yIF8gaW4gcmFuZ2UoNj0KNCkp
Cj0yMAogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9v
ay5pcHluYicgKSwgJ3InKSBhcyBuYl89CmhhbmRsZToKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv
Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMGU5MzkzODU4ZDRlLwpDaGFuZ2VzZXQ6ICAg
MGU5MzkzODU4ZDRlClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgUmVmYWN0b3IgdG8gZnVuY3Rpb24KQWZmZWN0
ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA2ZTM4YzFhYzJmNWFjYjIxYTI1YzlkMDIxYjA0NzkwZjY5
NmY5NDE5IC1yIDBlOTM5Mzg1OGQ0ZWVhYWRmNDNmOGY5PQo5N2YwY2EwODJiYWQ3MjM4OCBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFr
bwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0zMSw2ICszMSwxNCBAQAogICAgICAgICBwb3J0ID0z
RCBOb25lCiAgICAgcmV0dXJuIHBvcnQKPTIwCitkZWYgbG9hZF9ub3RlYm9vaygpOgorICAgIG5v
dGVib29rX2lkID0zRCAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWYnKSBm
b3IgXyBpbiByYW49CmdlKDY0KSkKKyAgICB3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggb3VyX3Rl
bXBsYXRlX2RpciwgJ25vdGVib29rLmlweW5iJyApLCAncicpIGFzPQogbmJfaGFuZGxlOgorICAg
ICAgICBlbXB0eV9uYiA9M0QgbmJfaGFuZGxlLnJlYWQoKQorICAgIGVtcHR5X25iID0zRCBlbXB0
eV9uYiAlIG5vdGVib29rX2lkCisgICAgcmV0dXJuIGVtcHR5X25iCisKKwo9MjAKIGdhbGF4eV9w
YXN0ZXJfcG9ydCA9M0QgZ2V0X2dhbGF4eV9wYXN0ZXJfcG9ydCgpCj0yMApAQCAtNDMsMTIgKzUx
LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdk
b2NrZXJfZGVsYXknOiAxfSkKIGlweV92aXpfY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggb3Vy
X2NvbmZpZ19kaXIsICJpcHl0aG9uLmNvbmYiICkgKQo9MjAKLW5vdGVib29rX2lkID0zRCAnJy5q
b2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWYnKSBmb3IgXyBpbiByYW5nZSg2PQo0
KSkKLQotd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9v
ay5pcHluYicgKSwgJ3InKSBhcyBuYl89CmhhbmRsZToKLSAgICBlbXB0eV9uYiA9M0QgbmJfaGFu
ZGxlLnJlYWQoKQotZW1wdHlfbmIgPTNEIGVtcHR5X25iICUgbm90ZWJvb2tfaWQKLQorIyBQcmVw
YXJlIGFuIGVtcHR5IG5vdGVib29rCitlbXB0eV9uYiA9M0QgbG9hZF9ub3RlYm9vaygpCj0yMAog
IyBGaW5kIGFsbCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCiBjbWRfbmV0c3RhdCA9
M0Qgc2hsZXguc3BsaXQoIm5ldHN0YXQgLXR1bG4iKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85ZTdiZDkzNjAwZDgvCkNoYW5nZXNldDogICA5
ZTdiZDkzNjAwZDgKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4
IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBSZWZhY3RvciB0byBmdW5jdGlvbiB3aGljaCB3
aWxsIGV2ZW50dWFsbHkgYmUgQVBJIGNhbGwKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAw
ZTkzOTM4NThkNGVlYWFkZjQzZjhmOTk3ZjBjYTA4MmJhZDcyMzg4IC1yIDllN2JkOTM2MDBkOGI1
YzUyYzM3ZDRlPQpmZmJiMmY4YzIwODRhZTljNiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBA
IC0zOCw2ICszOCwyOCBAQAogICAgIGVtcHR5X25iID0zRCBlbXB0eV9uYiAlIG5vdGVib29rX2lk
CiAgICAgcmV0dXJuIGVtcHR5X25iCj0yMAorZGVmIHByb3h5X3JlcXVlc3RfcG9ydCgpOgorICAg
ICIiIgorICAgICAgICBSZWZhY3RvciBvZiBvdXIgcG9ydCBnZXR0aW5nLi4uZXZlbnR1YWxseSB0
aGlzIHdpbGwgYmUgcmVwbGFjZWQgd2k9CnRoIGFuIEFQSSBjYWxsIGluc3RlYWQuCisgICAgIiIi
CisgICAgIyBGaW5kIGFsbCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCisgICAgY21k
X25ldHN0YXQgPTNEIHNobGV4LnNwbGl0KCJuZXRzdGF0IC10dWxuIikKKyAgICBwMSA9M0Qgc3Vi
cHJvY2Vzcy5Qb3BlbihjbWRfbmV0c3RhdCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQorCisg
ICAgb2NjdXBpZWRfcG9ydHMgPTNEIHNldCgpCisgICAgZm9yIGxpbmUgaW4gcDEuc3Rkb3V0LnJl
YWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0Y3AnKSBvciBs
aW5lLnN0YXJ0c3dpdGgoJ3RjcDYnKToKKyAgICAgICAgICAgIGNvbCA9M0QgbGluZS5zcGxpdCgp
CisgICAgICAgICAgICBsb2NhbF9hZGRyZXNzID0zRCBjb2xbM10KKyAgICAgICAgICAgIGxvY2Fs
X3BvcnQgPTNEIGxvY2FsX2FkZHJlc3Muc3BsaXQoJzonKVstMV0KKyAgICAgICAgICAgIG9jY3Vw
aWVkX3BvcnRzLmFkZCggaW50KGxvY2FsX3BvcnQpICkKKworICAgICMgR2VuZXJhdGUgcmFuZG9t
IGZyZWUgcG9ydCBudW1iZXIgZm9yIG91ciBkb2NrZXIgY29udGFpbmVyCisgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgcG9ydCA9M0QgcmFuZG9tLnJhbmRyYW5nZSgxMDAwMCwxNTAwMCkKKyAgICAg
ICAgaWYgcG9ydCBub3QgaW4gb2NjdXBpZWRfcG9ydHM6CisgICAgICAgICAgICBicmVhaworICAg
IHJldHVybiBwb3J0Cj0yMAo9MjAKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgZ2V0X2dhbGF4eV9w
YXN0ZXJfcG9ydCgpCkBAIC01NCwyNCArNzYsNyBAQAogIyBQcmVwYXJlIGFuIGVtcHR5IG5vdGVi
b29rCiBlbXB0eV9uYiA9M0QgbG9hZF9ub3RlYm9vaygpCj0yMAotIyBGaW5kIGFsbCBwb3J0cyB0
aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCi1jbWRfbmV0c3RhdCA9M0Qgc2hsZXguc3BsaXQoIm5l
dHN0YXQgLXR1bG4iKQotcDEgPTNEIHN1YnByb2Nlc3MuUG9wZW4oY21kX25ldHN0YXQsIHN0ZG91
dD0zRHN1YnByb2Nlc3MuUElQRSkKLQotb2NjdXBpZWRfcG9ydHMgPTNEIHNldCgpCi1mb3IgbGlu
ZSBpbiBwMS5zdGRvdXQucmVhZCgpLnNwbGl0KCdcbicpOgotICAgIGlmIGxpbmUuc3RhcnRzd2l0
aCgndGNwJykgb3IgbGluZS5zdGFydHN3aXRoKCd0Y3A2Jyk6Ci0gICAgICAgIGNvbCA9M0QgbGlu
ZS5zcGxpdCgpCi0gICAgICAgIGxvY2FsX2FkZHJlc3MgPTNEIGNvbFszXQotICAgICAgICBsb2Nh
bF9wb3J0ID0zRCBsb2NhbF9hZGRyZXNzLnNwbGl0KCc6JylbLTFdCi0gICAgICAgIG9jY3VwaWVk
X3BvcnRzLmFkZCggaW50KGxvY2FsX3BvcnQpICkKLQotIyBHZW5lcmF0ZSByYW5kb20gZnJlZSBw
b3J0IG51bWJlciBmb3Igb3VyIGRvY2tlciBjb250YWluZXIKLXdoaWxlIFRydWU6Ci0gICAgUE9S
VCA9M0QgcmFuZG9tLnJhbmRyYW5nZSgxMDAwMCwxNTAwMCkKLSAgICBpZiBQT1JUIG5vdCBpbiBv
Y2N1cGllZF9wb3J0czoKLSAgICAgICAgYnJlYWsKLQorUE9SVCA9M0QgcHJveHlfcmVxdWVzdF9w
b3J0KCkKIEhPU1QgPTNEIHJlcXVlc3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwgd2UganVzdCB3
YW50IHRoZSBVUkwgdGhpcyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4KIGlmICc6JyBp
biBIT1NUOgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29t
bWl0cy85ODRkZjViYmExY2YvCkNoYW5nZXNldDogICA5ODRkZjViYmExY2YKVXNlcjogICAgICAg
IGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6
ICAgICBTaW1wbGlmaWNhdGlvbiBkdWUgdG8gdHlpbmcgdG8gZ2FsYXh5IHJlbGVhc2UKQWZmZWN0
ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA5ZTdiZDkzNjAwZDhiNWM1MmMzN2Q0ZWZmYmIyZjhjMjA4
NGFlOWM2IC1yIDk4NGRmNWJiYTFjZjViZjhmYWE1OTE0PQo5YjY5NDhiZWQ3ZmRiNWIyZiBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFr
bwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC04MywxNyArODMsNyBAQAogICAgIEhPU1QgPTNEIEhP
U1RbMDpIT1NULmluZGV4KCc6JyldCj0yMAogdGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCgg
dGVtcGZpbGUubWtkdGVtcCgpICkKLQotdHJ5OgotICAgICMgTmV3ZXIgZ2V0X2FwaV9rZXkgd2ls
bCBpcyBiZXR0ZXIgYWJzdHJhY3Rpb24gYW5kIHdpbGwgYWxzbyBnZW5lcmF0ZSA9CnRoZQotICAg
ICMga2V5IGlmIG5vdCBhdmFpbGFibGUuCi0gICAgYXBpX2tleSA9M0QgZ2V0X2FwaV9rZXkoKQot
ZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAjIGZhbGxiYWNrIHRvIGRlcHJlY2F0ZWQgcGF0dGVybiBm
b3Igb2xkZXIgR2FsYXh5IGluc3RhbmNlcy4KLSAgICB0cnk6Ci0gICAgICAgIGFwaV9rZXkgPTNE
IHRyYW5zLnVzZXIuYXBpX2tleXNbMF0ua2V5Ci0gICAgZXhjZXB0OgotICAgICAgICByYWlzZSBF
eGNlcHRpb24oIllvdSBkbyBub3QgaGF2ZSBhbiBBUEkga2V5IGF2YWlsYWJsZSwgcGxlYXNlIGNs
aWM9CmsgVXNlci0+QVBJIEtleXMgdG8gZ2VuZXJhdGUgb25lIikKK2FwaV9rZXkgPTNEIGdldF9h
cGlfa2V5KCkKPTIwCiBjb25mX2ZpbGUgPTNEIHsKICAgICAnaGlzdG9yeV9pZCc6IGhpc3Rvcnlf
aWQsCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRz
LzIwNjdhODQ0YTdlYy8KQ2hhbmdlc2V0OiAgIDIwNjdhODQ0YTdlYwpVc2VyOiAgICAgICAgZXJh
c2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAg
IFJlZmFjdG9yIHBhc3N3b3JkIGdlbmVyYXRpb24KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAt
ciA5ODRkZjViYmExY2Y1YmY4ZmFhNTkxNDliNjk0OGJlZDdmZGI1YjJmIC1yIDIwNjdhODQ0YTdl
Yzg0N2FiZmJkOTVhPQozNzdlMDc4OWZiNGJhMWYxMSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtv
CkBAIC02MSw2ICs2MSw5IEBACiAgICAgICAgICAgICBicmVhawogICAgIHJldHVybiBwb3J0Cj0y
MAorZGVmIGdlbmVyYXRlX3Bhc3dvcmQobGVuZ3RoPTNEMTIpOgorICAgIHJldHVybiAnJy5qb2lu
KHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpIGY9
Cm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKKwo9MjAKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgZ2V0
X2dhbGF4eV9wYXN0ZXJfcG9ydCgpCj0yMApAQCAtOTcsOCArMTAwLDggQEAKPTIwCiBpZiBpcHlf
dml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInBhc3N3b3JkX2F1dGgiKToKICAgICAjIEdl
bmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAotICAgIG5vdGVib29rX3B3X3NhbHQgPTNE
ICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3A9CnFyc3R1
dnd4eXonKSBmb3IgXyBpbiByYW5nZSgxMikpCi0gICAgbm90ZWJvb2tfcHcgPTNEICcnLmpvaW4o
cmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dT0Kdnd4eXonKSBm
b3IgXyBpbiByYW5nZSgyNCkpCisgICAgbm90ZWJvb2tfcHdfc2FsdCA9M0QgZ2VuZXJhdGVfcGFz
d29yZChsZW5ndGg9M0QxMikKKyAgICBub3RlYm9va19wdyA9M0QgZ2VuZXJhdGVfcGFzd29yZChs
ZW5ndGg9M0QyNCkKICAgICBtID0zRCBoYXNobGliLnNoYTEoKQogICAgIG0udXBkYXRlKCBub3Rl
Ym9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQogICAgIGNvbmZfZmlsZVsnbm90ZWJvb2tfcGFz
c3dvcmQnXSA9M0QgJ3NoYTE6JXM6JXMnICUgKG5vdGVib29rX3B3X3NhbHQsIG09Ci5oZXhkaWdl
c3QoKSkKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1p
dHMvNzYwNGM1OGI0Y2IwLwpDaGFuZ2VzZXQ6ICAgNzYwNGM1OGI0Y2IwClVzZXI6ICAgICAgICBl
cmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAg
ICAgQ2hhbmdlZCBsb2dpbiBVUkxzClRoZSBjdXJyZW50IGxvZ2luIFVSTCBhdXRvbWF0aWNhbGx5
IHJlZGlyZWN0cy4gTGVzdCBiYWQgdGhpbmdzIGhhcHBlbiwgYW5kID0Kd2UgbWFrZSBleHRyYW5l
b3VzCnJlcXVlc3RzLCB3ZSBqdXN0IGxvZ2luIGF0IHRoZSAiL2xvZ2luIiByb3V0ZSB3aXRob3V0
IHRoZSBhdXRvbWF0aWMgcmVkaXJlY3QKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAyMDY3
YTg0NGE3ZWM4NDdhYmZiZDk1YTM3N2UwNzg5ZmI0YmExZjExIC1yIDc2MDRjNThiNGNiMDI3OGJj
OTIyMjQ5PQoyMDU2NWJhZGUxMjUxOTZkZSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0x
MzUsMTEgKzEzNSwxMSBAQAogIyBBY2Nlc3MgVVJMcyBmb3IgdGhlIG5vdGVib29rIGZyb20gd2l0
aGluIGdhbGF4eS4KIGlmIGlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAiYXBhY2hl
X3VybHMiKToKICAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAiJXM6Ly8lcy9pcHl0aG9uLyVz
L25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9uPQpvdGVib29rLmlweW5iIiAlICggUFJPVE8sIEhP
U1QsIFBPUlQgKQotICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8l
cy9sb2dpbj9uZXh0PTNEJSUyRmlweXRob24lJTI9CkYlcyUlMkZub3RlYm9va3MlJTJGaXB5dGhv
bl9nYWxheHlfbm90ZWJvb2suaXB5bmIiICUgKCBQUk9UTywgSE9TVCwgUE9SVCwgUD0KT1JUICkK
KyAgICBub3RlYm9va19sb2dpbl91cmwgPTNEICIlczovLyVzL2lweXRob24vJXMvbG9naW4iICUg
KCBQUk9UTywgSE9TVCwgUE9SPQpULCBQT1JUICkKICAgICBhcGFjaGVfdXJsc19qc3ZhciA9M0Qg
InRydWUiCiBlbHNlOgogICAgIG5vdGVib29rX2FjY2Vzc191cmwgPTNEICIlczovLyVzOiVzL2lw
eXRob24vJXMvbm90ZWJvb2tzL2lweXRob25fZ2FsYXg9Cnlfbm90ZWJvb2suaXB5bmIiICUgKCBQ
Uk9UTywgSE9TVCwgUE9SVCwgUE9SVCApCi0gICAgbm90ZWJvb2tfbG9naW5fdXJsID0zRCAiJXM6
Ly8lczolcy9pcHl0aG9uLyVzL2xvZ2luP25leHQ9M0QlJTJGaXB5dGhvbj0KJSUyRiVzJSUyRm5v
dGVib29rcyUlMkZpcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYiIgJSAoIFBST1RPLCBIT1NU
LCBQT1JUPQosIFBPUlQsIFBPUlQgKQorICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0QgIiVzOi8v
JXM6JXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBIT1NULCA9ClBPUlQsIFBPUlQsIFBP
UlQgKQogICAgIGFwYWNoZV91cmxzX2pzdmFyID0zRCAiZmFsc2UiCiBzdWJwcm9jZXNzLmNhbGwo
ZG9ja2VyX2NtZCwgc2hlbGw9M0RUcnVlKQo9MjAKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2Fs
YXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZDM4NDI2NDhkOTkwLwpDaGFuZ2VzZXQ6ICAgZDM4
NDI2NDhkOTkwClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAy
MjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRkZWQganMtYm9vbCBmdW5jdGlvbgpBZmZlY3Rl
ZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDc2MDRjNThiNGNiMDI3OGJjOTIyMjQ5MjA1NjViYWRlMTI1
MTk2ZGUgLXIgZDM4NDI2NDhkOTkwODA0YTdmNWU3NTQ9CmVlYjBhNmRiZjY3ZDVlN2Y1IGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtv
Ci0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lw
eXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTY0LDYgKzY0LDE0IEBACiBkZWYgZ2VuZXJhdGVfcGFz
d29yZChsZW5ndGg9M0QxMik6CiAgICAgcmV0dXJuICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEy
MzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JykgZj0Kb3IgXyBpbiByYW5nZShsZW5n
dGgpKQo9MjAKK2RlZiBqYXZhc2NyaXB0X2Jvb2xlYW4oYm9vbGVhbik6CisgICAgIiIiCisgICAg
ICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9vbGVhbiBmb3IgdXNlIGluIEpT
CisgICAgIiIiCisgICAgaWYgYm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJ0cnVlIjsKKyAgICBl
bHNlOgorICAgICAgICByZXR1cm4gImZhbHNlIgo9MjAKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0Qg
Z2V0X2dhbGF4eV9wYXN0ZXJfcG9ydCgpCj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxh
eHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy82YWFhNjI3ODk0YmQvCkNoYW5nZXNldDogICA2YWFh
NjI3ODk0YmQKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIy
OjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBFeGNoYW5nZWQgY29uZiBjYWxscyBmb3Igc3RhdGlj
IHZhcmlhYmxlcwpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIGQzODQyNjQ4ZDk5MDgwNGE3
ZjVlNzU0ZWViMGE2ZGJmNjdkNWU3ZjUgLXIgNmFhYTYyNzg5NGJkMjMyMmI1NjAzODU9CjE0Njc1
MWRkOTYwMjRmZTA3IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTg3LDYgKzg3LDkgQEAK
ICMgUHJlcGFyZSBhbiBlbXB0eSBub3RlYm9vawogZW1wdHlfbmIgPTNEIGxvYWRfbm90ZWJvb2so
KQo9MjAKK1BBU1NXT1JEX0FVVEggPTNEIGlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4i
LCAicGFzc3dvcmRfYXV0aCIpCitBUEFDSEVfVVJMUyA9M0QgaXB5X3Zpel9jb25maWcuZ2V0Ym9v
bGVhbigibWFpbiIsICJhcGFjaGVfdXJscyIpCitTU0xfVVJMUyA9M0QgaXB5X3Zpel9jb25maWcu
Z2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKToKIFBPUlQgPTNEIHByb3h5X3JlcXVlc3RfcG9ydCgp
CiBIT1NUID0zRCByZXF1ZXN0Lmhvc3QKICMgU3RyaXAgb3V0IHBvcnQsIHdlIGp1c3Qgd2FudCB0
aGUgVVJMIHRoaXMgZ2FsYXh5IHNlcnZlciB3YXMgYWNjZXNzZWQgYXQuCkBAIC0xMDYsNyArMTA5
LDcgQEAKICAgICAnY29yc19vcmlnaW4nOiByZXF1ZXN0Lmhvc3RfdXJsLAogfQo9MjAKLWlmIGlw
eV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAicGFzc3dvcmRfYXV0aCIpOgoraWYgUEFT
U1dPUkRfQVVUSDoKICAgICAjIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAogICAg
IG5vdGVib29rX3B3X3NhbHQgPTNEIGdlbmVyYXRlX3Bhc3dvcmQobGVuZ3RoPTNEMTIpCiAgICAg
bm90ZWJvb2tfcHcgPTNEIGdlbmVyYXRlX3Bhc3dvcmQobGVuZ3RoPTNEMjQpCkBAIC0xMzUsMTMg
KzEzOCwxMyBAQAogICAgIChpcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJjb21tYW5kIiks
IFBPUlQsIHRlbXBfZGlyLCBpcHlfdml6X2NvbmY9CmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikp
Cj0yMAogIyBTZXQgb3VyIHByb3RvIHNvIHBhc3N3b3JkcyBkb24ndCBnbyBpbiBjbGVhcgotaWYg
aXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKToKK2lmIFNTTF9VUkxTOgog
ICAgIFBST1RPID0zRCAiaHR0cHMiCiBlbHNlOgogICAgIFBST1RPID0zRCAiaHR0cCIKPTIwCiAj
IEFjY2VzcyBVUkxzIGZvciB0aGUgbm90ZWJvb2sgZnJvbSB3aXRoaW4gZ2FsYXh5LgotaWYgaXB5
X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJhcGFjaGVfdXJscyIpOgoraWYgQVBBQ0hF
X1VSTFM6CiAgICAgbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8lcy9u
b3RlYm9va3MvaXB5dGhvbl9nYWxheHlfbj0Kb3RlYm9vay5pcHluYiIgJSAoIFBST1RPLCBIT1NU
LCBQT1JUICkKICAgICBub3RlYm9va19sb2dpbl91cmwgPTNEICIlczovLyVzL2lweXRob24vJXMv
bG9naW4iICUgKCBQUk9UTywgSE9TVCwgUE9SPQpULCBQT1JUICkKICAgICBhcGFjaGVfdXJsc19q
c3ZhciA9M0QgInRydWUiCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2Vu
dHJhbC9jb21taXRzL2Y0ZjM4ZTlkMDA5MC8KQ2hhbmdlc2V0OiAgIGY0ZjM4ZTlkMDA5MApVc2Vy
OiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAK
U3VtbWFyeTogICAgIEJ1aWxkaW5nIG9uIGIzNjZiMGMgYW5kIGViMWM0ODcsIGNsZWFudXAganMt
dmFyIHN0dWZmCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNmFhYTYyNzg5NGJkMjMyMmI1
NjAzODUxNDY3NTFkZDk2MDI0ZmUwNyAtciBmNGYzOGU5ZDAwOTBkMzdlOTgxYTg1Mz0KNmI1MmYw
ZThiZmVmY2YwN2UgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTE3LDEwICsxMTcsOCBA
QAogICAgIG0udXBkYXRlKCBub3RlYm9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQogICAgIGNv
bmZfZmlsZVsnbm90ZWJvb2tfcGFzc3dvcmQnXSA9M0QgJ3NoYTE6JXM6JXMnICUgKG5vdGVib29r
X3B3X3NhbHQsIG09Ci5oZXhkaWdlc3QoKSkKICAgICAjIFNob3VsZCB3ZSB1c2UgcGFzc3dvcmQg
YmFzZWQgY29ubmVjdGlvbiBvciAiZGVmYXVsdCIgY29ubmVjdGlvbiBzdHlsPQplIGluIGdhbGF4
eQotICAgIHBhc3N3b3JkX2F1dGhfanN2YXIgPTNEICJ0cnVlIgogZWxzZToKICAgICBub3RlYm9v
a19wdyA9M0QgIk5vbmUiCi0gICAgcGFzc3dvcmRfYXV0aF9qc3ZhciA9M0QgImZhbHNlIgo9MjAK
ICMgV3JpdGUgY29uZgogd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55
YW1sJyApLCAnd2InICkgYXMgaGFuZGxlOgpAQCAtMTQ3LDExICsxNDUsOSBAQAogaWYgQVBBQ0hF
X1VSTFM6CiAgICAgbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8lcy9u
b3RlYm9va3MvaXB5dGhvbl9nYWxheHlfbj0Kb3RlYm9vay5pcHluYiIgJSAoIFBST1RPLCBIT1NU
LCBQT1JUICkKICAgICBub3RlYm9va19sb2dpbl91cmwgPTNEICIlczovLyVzL2lweXRob24vJXMv
bG9naW4iICUgKCBQUk9UTywgSE9TVCwgUE9SPQpULCBQT1JUICkKLSAgICBhcGFjaGVfdXJsc19q
c3ZhciA9M0QgInRydWUiCiBlbHNlOgogICAgIG5vdGVib29rX2FjY2Vzc191cmwgPTNEICIlczov
LyVzOiVzL2lweXRob24vJXMvbm90ZWJvb2tzL2lweXRob25fZ2FsYXg9Cnlfbm90ZWJvb2suaXB5
bmIiICUgKCBQUk9UTywgSE9TVCwgUE9SVCwgUE9SVCApCiAgICAgbm90ZWJvb2tfbG9naW5fdXJs
ID0zRCAiJXM6Ly8lczolcy9pcHl0aG9uLyVzL2xvZ2luIiAlICggUFJPVE8sIEhPU1QsID0KUE9S
VCwgUE9SVCwgUE9SVCApCi0gICAgYXBhY2hlX3VybHNfanN2YXIgPTNEICJmYWxzZSIKIHN1YnBy
b2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0zRFRydWUpCj0yMAogJT4KQEAgLTE2Niw4ICsx
NjIsOCBAQAogPGJvZHk+PHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCI+Ci12YXIgcGFz
c3dvcmRfYXV0aCA9M0QgJHsgcGFzc3dvcmRfYXV0aF9qc3ZhciB9OwotdmFyIGFwYWNoZV91cmxz
ID0zRCAkeyBhcGFjaGVfdXJsc19qc3ZhciB9OwordmFyIHBhc3N3b3JkX2F1dGggPTNEICR7IGph
dmFzY3JpcHRfYm9vbGVhbihQQVNTV09SRF9BVVRIKSB9OwordmFyIGFwYWNoZV91cmxzID0zRCAk
eyBqYXZhc2NyaXB0X2Jvb2xlYW4oQVBBQ0hFX1VSTFMpIH07CiB2YXIgbm90ZWJvb2tfbG9naW5f
dXJsID0zRCAnJHsgbm90ZWJvb2tfbG9naW5fdXJsIH0nOwogdmFyIHBhc3N3b3JkID0zRCAnJHsg
bm90ZWJvb2tfcHcgfSc7CiB2YXIgbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgJyR7IG5vdGVib29r
X2FjY2Vzc191cmwgfSc7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2Vu
dHJhbC9jb21taXRzLzAxM2RmMzlmNGRiYi8KQ2hhbmdlc2V0OiAgIDAxM2RmMzlmNGRiYgpVc2Vy
OiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAK
U3VtbWFyeTogICAgIE1vdmUgZnVuY3Rpb25zIHRvIG1vcmUgYXBwcm9wcmlhdGUgY29kZSBzZWN0
aW9uCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZjRmMzhlOWQwMDkwZDM3ZTk4MWE4NTM2
YjUyZjBlOGJmZWZjZjA3ZSAtciAwMTNkZjM5ZjRkYmJkMGJiYzQ3NWVlNT0KNjVjOWU3NDcwYmZi
NGM3OGYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTEsMTQgKzExLDYgQEAKIGltcG9y
dCBzdWJwcm9jZXNzCiBpbXBvcnQgQ29uZmlnUGFyc2VyCj0yMAotZ2FsYXh5X2NvbmZpZyA9M0Qg
dHJhbnMuYXBwLmNvbmZpZwotZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoZ2Fs
YXh5X2NvbmZpZy5yb290KQotaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lk
KCB0cmFucy5oaXN0b3J5LmlkICkKLSMgUm91dGVzCi1yb290ICAgICAgICA9M0QgaC51cmxfZm9y
KCAiLyIgKQotYXBwX3Jvb3QgICAgPTNEIHJvb3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3N0YXRpYy8iCi1yYW5kb20uc2VlZCgpCi0KIGRlZiBnZXRfZ2FsYXh5X3Bhc3Rlcl9w
b3J0KCk6CiAgICAgIyBHYWxheHkgY29uZmlnIHBhcnNlcgogICAgIGNvbmZpZyA9M0QgQ29uZmln
UGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydwb3J0JzogJzgwODAnfSkKQEAgLTczLDYgKzY1LDE1
IEBACiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuICJmYWxzZSIKPTIwCisKK2dhbGF4eV9jb25m
aWcgPTNEIHRyYW5zLmFwcC5jb25maWcKK2dhbGF4eV9yb290X2RpciA9M0Qgb3MucGF0aC5hYnNw
YXRoKGdhbGF4eV9jb25maWcucm9vdCkKK2hpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVu
Y29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCisjIFJvdXRlcworcm9vdCAgICAgICAgPTNEIGgu
dXJsX2ZvciggIi8iICkKK2FwcF9yb290ICAgID0zRCByb290ICsgInBsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9zdGF0aWMvIgorcmFuZG9tLnNlZWQoKQorCiBnYWxheHlfcGFzdGVyX3Bv
cnQgPTNEIGdldF9nYWxheHlfcGFzdGVyX3BvcnQoKQo9MjAKICMgU3RvcmUgb3VyIHRlbXBsYXRl
IGFuZCBjb25maWd1cmF0aW9uIHBhdGgKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dh
bGF4eS1jZW50cmFsL2NvbW1pdHMvNjUyODM0OTMxNTI1LwpDaGFuZ2VzZXQ6ICAgNjUyODM0OTMx
NTI1ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODow
NCswMDowMApTdW1tYXJ5OiAgICAgUmFuZG9tIHNlZWRpbmcgbm8gbG9uZ2VyIG5lY2Vzc2FyeQpB
ZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDAxM2RmMzlmNGRiYmQwYmJjNDc1ZWU1NjVjOWU3
NDcwYmZiNGM3OGYgLXIgNjUyODM0OTMxNTI1ZTk1ZmM2ZjViNWY9CmIzNjUxYzAwM2QzNjZkNTQ5
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24u
bT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTcyLDcgKzcyLDYgQEAKICMgUm91dGVzCiBy
b290ICAgICAgICA9M0QgaC51cmxfZm9yKCAiLyIgKQogYXBwX3Jvb3QgICAgPTNEIHJvb3QgKyAi
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy8iCi1yYW5kb20uc2VlZCgpCj0y
MAogZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBnZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KCkKPTIwCgoK
aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2ZhZTM3
MjgxYmRjYy8KQ2hhbmdlc2V0OiAgIGZhZTM3MjgxYmRjYwpVc2VyOiAgICAgICAgZXJhc2NoZTIK
RGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIE1vdmUg
bm90ZWJvb2sgZ2VuZXJhdGlvbiB0byBtb3JlIHNlbnNpYmxlIHBsYWNlCkFmZmVjdGVkICM6ICAx
IGZpbGUKCmRpZmYgLXIgNjUyODM0OTMxNTI1ZTk1ZmM2ZjViNWZiMzY1MWMwMDNkMzY2ZDU0OSAt
ciBmYWUzNzI4MWJkY2M2N2I4NjRjZmJlZT0KODdkNGQ2ZjM0N2FmMDJlNGUgY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
YWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVz
L2lweXRob24ubWFrbwpAQCAtODQsOSArODQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ2RvY2tlcl9kZWxheSc6IDF9KQogaXB5X3Zpel9jb25m
aWcucmVhZCggb3MucGF0aC5qb2luKCBvdXJfY29uZmlnX2RpciwgImlweXRob24uY29uZiIgKSAp
Cj0yMAotIyBQcmVwYXJlIGFuIGVtcHR5IG5vdGVib29rCi1lbXB0eV9uYiA9M0QgbG9hZF9ub3Rl
Ym9vaygpCi0KIFBBU1NXT1JEX0FVVEggPTNEIGlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1h
aW4iLCAicGFzc3dvcmRfYXV0aCIpCiBBUEFDSEVfVVJMUyA9M0QgaXB5X3Zpel9jb25maWcuZ2V0
Ym9vbGVhbigibWFpbiIsICJhcGFjaGVfdXJscyIpCiBTU0xfVVJMUyA9M0QgaXB5X3Zpel9jb25m
aWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKToKQEAgLTEyNCw2ICsxMjEsOCBAQAogd2l0aCBv
cGVuKCBvcy5wYXRoLmpvaW4oIHRlbXBfZGlyLCAnY29uZi55YW1sJyApLCAnd2InICkgYXMgaGFu
ZGxlOgogICAgIGhhbmRsZS53cml0ZSggeWFtbC5kdW1wKGNvbmZfZmlsZSwgZGVmYXVsdF9mbG93
X3N0eWxlPTNERmFsc2UpICkKPTIwCisjIFByZXBhcmUgYW4gZW1wdHkgbm90ZWJvb2sKK2VtcHR5
X25iID0zRCBsb2FkX25vdGVib29rKCkKICMgQ29weSBvdmVyIGRlZmF1bHQgbm90ZWJvb2ssIHVu
bGVzcyB0aGUgZGF0YXNldCB0aGlzIHZpeiBpcyBydW5uaW5nIG9uIGlzPQogYSBub3RlYm9vawog
ZW1wdHlfbmJfcGF0aCA9M0Qgb3MucGF0aC5qb2luKHRlbXBfZGlyLCAnaXB5dGhvbl9nYWxheHlf
bm90ZWJvb2suaXB5bmInKQogaWYgaGRhLmRhdGF0eXBlLl9fY2xhc3NfXy5fX25hbWVfXyAhPTNE
ICJJcHluYiI6CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9j
b21taXRzLzU5ODUyMjI3YWNjYy8KQ2hhbmdlc2V0OiAgIDU5ODUyMjI3YWNjYwpVc2VyOiAgICAg
ICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFy
eTogICAgIFR5cG8vYnVnIGZpeGVzCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZmFlMzcy
ODFiZGNjNjdiODY0Y2ZiZWU4N2Q0ZDZmMzQ3YWYwMmU0ZSAtciA1OTg1MjIyN2FjY2M3YzkyZGE4
YmFiNT0KNTRmM2RlNGU1MTEyOGQxMGIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtODYs
NyArODYsNyBAQAo9MjAKIFBBU1NXT1JEX0FVVEggPTNEIGlweV92aXpfY29uZmlnLmdldGJvb2xl
YW4oIm1haW4iLCAicGFzc3dvcmRfYXV0aCIpCiBBUEFDSEVfVVJMUyA9M0QgaXB5X3Zpel9jb25m
aWcuZ2V0Ym9vbGVhbigibWFpbiIsICJhcGFjaGVfdXJscyIpCi1TU0xfVVJMUyA9M0QgaXB5X3Zp
el9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKToKK1NTTF9VUkxTID0zRCBpcHlfdml6
X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIpCiBQT1JUID0zRCBwcm94eV9yZXF1ZXN0
X3BvcnQoKQogSE9TVCA9M0QgcmVxdWVzdC5ob3N0CiAjIFN0cmlwIG91dCBwb3J0LCB3ZSBqdXN0
IHdhbnQgdGhlIFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkIGF0LgpAQCAtMTQz
LDEwICsxNDMsMTAgQEAKICMgQWNjZXNzIFVSTHMgZm9yIHRoZSBub3RlYm9vayBmcm9tIHdpdGhp
biBnYWxheHkuCiBpZiBBUEFDSEVfVVJMUzoKICAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAi
JXM6Ly8lcy9pcHl0aG9uLyVzL25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9uPQpvdGVib29rLmlw
eW5iIiAlICggUFJPVE8sIEhPU1QsIFBPUlQgKQotICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0Qg
IiVzOi8vJXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBIT1NULCBQT1I9ClQsIFBPUlQg
KQorICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8lcy9sb2dpbiIg
JSAoIFBST1RPLCBIT1NULCBQT1I9ClQgKQogZWxzZToKICAgICBub3RlYm9va19hY2Nlc3NfdXJs
ID0zRCAiJXM6Ly8lczolcy9pcHl0aG9uLyVzL25vdGVib29rcy9pcHl0aG9uX2dhbGF4PQp5X25v
dGVib29rLmlweW5iIiAlICggUFJPVE8sIEhPU1QsIFBPUlQsIFBPUlQgKQotICAgIG5vdGVib29r
X2xvZ2luX3VybCA9M0QgIiVzOi8vJXM6JXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBI
T1NULCA9ClBPUlQsIFBPUlQsIFBPUlQgKQorICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0QgIiVz
Oi8vJXM6JXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBIT1NULCA9ClBPUlQsIFBPUlQg
KQogc3VicHJvY2Vzcy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNEVHJ1ZSkKPTIwCiAlPgoKCmh0
dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy82MTE0OTc5
Njk0MzUvCkNoYW5nZXNldDogICA2MTE0OTc5Njk0MzUKVXNlcjogICAgICAgIEJqb2VybkdydWVu
aW5nCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBz
aW1wbGlmeSBjb2RlCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNTk4NTIyMjdhY2NjN2M5
MmRhOGJhYjU1NGYzZGU0ZTUxMTI4ZDEwYiAtciA2MTE0OTc5Njk0MzU3MjU5OTZjZTkyZD0KYTk0
ZDg2YmE0N2U1OWY2YmMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNjAsMTAgKzYwLDcg
QEAKICAgICAiIiIKICAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVydCBib29s
ZWFuIGZvciB1c2UgaW4gSlMKICAgICAiIiIKLSAgICBpZiBib29sZWFuOgotICAgICAgICByZXR1
cm4gInRydWUiOwotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAiZmFsc2UiCisgICAgcmV0dXJu
ICJ0cnVlIiBpZiBib29sZWFuIGVsc2UgImZhbHNlIgo9MjAKPTIwCiBnYWxheHlfY29uZmlnID0z
RCB0cmFucy5hcHAuY29uZmlnCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHkt
Y2VudHJhbC9jb21taXRzL2FhZGJiNjg2YzNmZS8KQ2hhbmdlc2V0OiAgIGFhZGJiNjg2YzNmZQpV
c2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6
MDAKU3VtbWFyeTogICAgIFJlbW92ZWQgZGVwcmVjYXRlZCBkb2NzCkFmZmVjdGVkICM6ICAyIGZp
bGVzCgpkaWZmIC1yIDYxMTQ5Nzk2OTQzNTcyNTk5NmNlOTJkYTk0ZDg2YmE0N2U1OWY2YmMgLXIg
YWFkYmI2ODZjM2ZlZTA0YTBkOGRmYWM9CjVjYTNiOWRlNjU1ZDQ4NDc3IGNvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vSU5TVEFMTC5tZAotLS0gYS9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL0lOU1RBTEwubWQKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvaXB5dGhvbi9JTlNUQUxMLm1kCkBAIC02MSwzNSArNjEsMyBAQAogIyMgTmdp
bnggQ29uZmlndXJhdGlvbgo9MjAKIFBsZWFzZSBzdWJtaXQgaXQgaWYgeW91IHdyaXRlIGl0IQot
Ci0jIyBUZW1wbGF0ZSBDb25maWd1cmF0aW9uCi0KLU5vcm1hbGx5IGNvbnRhaW5lcnMgYXJlIGFj
Y2Vzc2VkIHZpYSBVUkxzIHRoYXQgbG9vayBsaWtlOgotCi1gYGAKLWh0dHA6Ly9mcWRuOjExMjM1
L2lweXRob24vMTEyMzUvaXB5dGhvbl9ub3RlYm9vay5pcHluYgotYGBgCi0KLUluIG9yZGVyIHRv
IHNlY3VyZSB0aGVtIHdlIHdhbnQgdG8gYWNjZXNzIHRoZW0gdmlhIFVSTHMgdGhhdCBsb29rIGxp
a2U6Ci0KLWBgYAotaHR0cDovL2ZxZG4vaXB5dGhvbi8xMTIzNS9pcHl0aG9uX25vdGVib29rLmlw
eW5iCi1gYGAKLQotVGhpcyBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVhbGlzZWQgaW4gdGhlIHRlbXBs
YXRlIGZpbGUuIEF0IHRoZSB2ZXJ5IGVuZCBvZiA9CnRoZSB0ZW1wbGF0ZSB0aGVyZSBpcyBhIHNl
Y3Rpb24gb2YgSFRNTCBjb2RlIHdoaWNoIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzoKLQotYGBg
aHRtbAotPG9iamVjdCBkYXRhPTNEImh0dHA6Ly8ke0hPU1R9OiR7UE9SVH0vaXB5dGhvbi8ke1BP
UlR9L25vdGVib29rcy9pcHl0aG9uX2c9CmFsYXh5X25vdGVib29rLmlweW5iIiBoZWlnaHQ9M0Qi
MTAwJSIgd2lkdGg9M0QiMTAwJSI+Ci0gICAgPGVtYmVkIHNyYz0zRCJodHRwOi8vJHtIT1NUfTok
e1BPUlR9L2lweXRob24vJHtQT1JUfS9ub3RlYm9va3MvaXB5dGhvbj0KX2dhbGF4eV9ub3RlYm9v
ay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiPgotICAgIDwvZW1iZWQ+Ci08
L29iamVjdD4KLWBgYAotCi1KdXN0IHJlbW92ZSB0aGUgYDoke1BPUlR9YCBhbmQgeW91J3JlIHJl
YWR5IHRvIGdvISBJdCBzaG91bGQgbG9vayBsaWtlIHRoaT0KczoKLQotYGBgaHRtbAotPG9iamVj
dCBkYXRhPTNEImh0dHA6Ly8ke0hPU1R9L2lweXRob24vJHtQT1JUfS9ub3RlYm9va3MvaXB5dGhv
bl9nYWxheHlfbm89CnRlYm9vay5pcHluYiIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUi
PgotICAgIDxlbWJlZCBzcmM9M0QiaHR0cDovLyR7SE9TVH0vaXB5dGhvbi8ke1BPUlR9L25vdGVi
b29rcy9pcHl0aG9uX2dhbGF4eV89Cm5vdGVib29rLmlweW5iIiBoZWlnaHQ9M0QiMTAwJSIgd2lk
dGg9M0QiMTAwJSI+Ci0gICAgPC9lbWJlZD4KLTwvb2JqZWN0PgotYGBgCgpkaWZmIC1yIDYxMTQ5
Nzk2OTQzNTcyNTk5NmNlOTJkYTk0ZDg2YmE0N2U1OWY2YmMgLXIgYWFkYmI2ODZjM2ZlZTA0YTBk
OGRmYWM9CjVjYTNiOWRlNjU1ZDQ4NDc3IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vUkVBRE1FLm1kCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vUkVBRE1FLm1kCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
UkVBRE1FLm1kCkBAIC0yMCw3ICsyMCw3IEBACiA9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9
M0Q9M0Q9M0QKPTIwCiBDb3B5IHRoZSB0ZW1wbGF0ZSBhbmQgY29uZmlnIGZvbGRlciBpbiB5b3Vy
IGBgR0FMQVhZX1JPT1QvY29uZmlnL3BsdWdpbnMvdj0KaXN1YWxpemF0aW9ucy9pcHl0aG9uYGAg
Zm9sZGVyIGFuZCByZXN0YXJ0IEdhbGF4eS4KLUFsdGVybmF0aXZseSwgeW91IGNhbiBjbG9uZSB0
aGUgcmVwb3NpdG9yeSB3aXRoCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNsb25lIHRoZSByZXBv
c2l0b3J5IHdpdGgKPTIwCiBgYGBiYXNoCiBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2Jn
cnVlbmluZy9nYWxheHktaXB5dGhvbi5naXQgY29uZmlnL3BsdWdpbnMvdj0KaXN1YWxpemF0aW9u
cy9pcHl0aG9uCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9j
b21taXRzL2M5Mjk1ODA1N2UyYy8KQ2hhbmdlc2V0OiAgIGM5Mjk1ODA1N2UyYwpVc2VyOiAgICAg
ICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFy
eTogICAgIEZpcnN0IGZ1bmN0aW9uIHJlZmFjdG9yZWQKVGhpcyBsb29rcyBsaWtlIGl0IHdpbGwg
ZGVmaW5pdGVseSB3b3JrLCBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBiYXNlIElFIHRlPQptcGxh
dGUKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgYWFkYmI2ODZjM2ZlZTA0YTBkOGRmYWM1
Y2EzYjlkZTY1NWQ0ODQ3NyAtciBjOTI5NTgwNTdlMmM5OTE4NTg1MWVmNj0KZjhiMmI1YzJlMTI0
NDBkYzIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUu
bWFrbwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTAsMCArMSwyMCBAQAorPCUhCitpbXBvcnQgQ29u
ZmlnUGFyc2VyCitpbXBvcnQgb3MKK3NvbWV2YXIgPTNEIFsib25lIiwgInR3byIsICJ0aHJlZSJd
CislPgorCis8JWRlZiBuYW1lPTNEImdldF9nYWxheHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3Rf
ZGlyLCBnYWxheHlfY29uZmlnKSI+CisgIDwlCisgICAgY29uZmlnID0zRCBDb25maWdQYXJzZXIu
U2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAnODA4MCd9KQorICAgIGNvbmZpZy5yZWFkKCBvcy5w
YXRoLmpvaW4oIGdhbGF4eV9yb290X2RpciwgJ3VuaXZlcnNlX3dzZ2kuaW5pJyApICkKKworICAg
ICMgdVdTR0kgZ2FsYXh5IGluc3RhbGxhdGlvbnMgZG9uJ3QgdXNlIHBhc3RlciBhbmQgb25seSBz
cGVhayB1V1NHSSBub3Q9CiBodHRwCisgICAgdHJ5OgorICAgICAgICBwb3J0ID0zRCBjb25maWcu
Z2V0aW50KCdzZXJ2ZXI6JXMnICUgZ2FsYXh5X2NvbmZpZy5zZXJ2ZXJfbmFtZSwgJ3A9Cm9ydCcp
CisgICAgZXhjZXB0OgorICAgICAgICBwb3J0ID0zRCBOb25lCisgICAgcmV0dXJuIHBvcnQKKyAg
JT4KKzwvJWRlZj4KKwoKZGlmZiAtciBhYWRiYjY4NmMzZmVlMDRhMGQ4ZGZhYzVjYTNiOWRlNjU1
ZDQ4NDc3IC1yIGM5Mjk1ODA1N2UyYzk5MTg1ODUxZWY2PQpmOGIyYjVjMmUxMjQ0MGRjMiBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFr
bwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xLDMgKzEsNCBAQAorPCVuYW1lc3BhY2UgZmlsZT0z
RCJpZS5tYWtvIiBuYW1lPTNEImllIi8+PCUKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtMTEs
MTggKzEyLDYgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgQ29uZmlnUGFyc2VyCj0yMAot
ZGVmIGdldF9nYWxheHlfcGFzdGVyX3BvcnQoKToKLSAgICAjIEdhbGF4eSBjb25maWcgcGFyc2Vy
Ci0gICAgY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAn
ODA4MCd9KQotICAgIGNvbmZpZy5yZWFkKCBvcy5wYXRoLmpvaW4oIGdhbGF4eV9yb290X2Rpciwg
J3VuaXZlcnNlX3dzZ2kuaW5pJyApICkKLQotICAgICMgdVdTR0kgZ2FsYXh5IGluc3RhbGxhdGlv
bnMgZG9uJ3QgdXNlIHBhc3RlciBhbmQgb25seSBzcGVhayB1V1NHSSBub3Q9CiBodHRwCi0gICAg
dHJ5OgotICAgICAgICBwb3J0ID0zRCBjb25maWcuZ2V0aW50KCdzZXJ2ZXI6JXMnICUgZ2FsYXh5
X2NvbmZpZy5zZXJ2ZXJfbmFtZSwgJ3A9Cm9ydCcpCi0gICAgZXhjZXB0OgotICAgICAgICBwb3J0
ID0zRCBOb25lCi0gICAgcmV0dXJuIHBvcnQKLQogZGVmIGxvYWRfbm90ZWJvb2soKToKICAgICBu
b3RlYm9va19pZCA9M0QgJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmJykg
Zm9yIF8gaW4gcmFuPQpnZSg2NCkpCiAgICAgd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91cl90
ZW1wbGF0ZV9kaXIsICdub3RlYm9vay5pcHluYicgKSwgJ3InKSBhcz0KIG5iX2hhbmRsZToKQEAg
LTcwLDcgKzU5LDcgQEAKIHJvb3QgICAgICAgID0zRCBoLnVybF9mb3IoICIvIiApCiBhcHBfcm9v
dCAgICA9M0Qgcm9vdCArICJwbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljLyIK
PTIwCi1nYWxheHlfcGFzdGVyX3BvcnQgPTNEIGdldF9nYWxheHlfcGFzdGVyX3BvcnQoKQorZ2Fs
YXh5X3Bhc3Rlcl9wb3J0ID0zRCBpZS5nZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KGdhbGF4eV9yb290
X2RpciwgZ2FsYXh5X2M9Cm9uZmlnKQo9MjAKICMgU3RvcmUgb3VyIHRlbXBsYXRlIGFuZCBjb25m
aWd1cmF0aW9uIHBhdGgKIG91cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2luX3Bh
dGgsICJjb25maWciKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy
YWwvY29tbWl0cy8wNjk0NzRiOTY0MTEvCkNoYW5nZXNldDogICAwNjk0NzRiOTY0MTEKVXNlcjog
ICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1
bW1hcnk6ICAgICBNb3ZlZCBtb3JlIGZ1bmN0aW9ucyBvdmVyCkFmZmVjdGVkICM6ICAyIGZpbGVz
CgpkaWZmIC1yIGM5Mjk1ODA1N2UyYzk5MTg1ODUxZWY2ZjhiMmI1YzJlMTI0NDBkYzIgLXIgMDY5
NDc0Yjk2NDExMjQ4MTM5ZDdmODk9CmUzMGM3YmRiN2JhOTBjMzcyIGNvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KLS0tIGEvY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbworKysgYi9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCkBAIC0xLDkg
KzEsMTkgQEAKIDwlIQogaW1wb3J0IENvbmZpZ1BhcnNlcgogaW1wb3J0IG9zCi1zb21ldmFyID0z
RCBbIm9uZSIsICJ0d28iLCAidGhyZWUiXQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHJhbmRvbQorCit2aXpfaWQgPTNEIE5vbmUKICU+Cj0yMAorPCVkZWYgbmFtZT0z
RCJzZXRfaWQobmFtZSkiJT4KKzwlCisgICAgdml6X2lkID0zRCBuYW1lCislPgorPC8lZGVmPgor
CiA8JWRlZiBuYW1lPTNEImdldF9nYWxheHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3RfZGlyLCBn
YWxheHlfY29uZmlnKSI+PCUKICAgICBjb25maWcgPTNEIENvbmZpZ1BhcnNlci5TYWZlQ29uZmln
UGFyc2VyKHsncG9ydCc6ICc4MDgwJ30pCkBAIC0xOCwzICsyOCw1NSBAQAogICAlPjwvJWRlZj4K
PTIwCis8JWRlZiBuYW1lPTNEInByb3h5X3JlcXVlc3RfcG9ydCgpIj4KKzwlCisgICAgIiIiCisg
ICAgICAgIFJlZmFjdG9yIG9mIG91ciBwb3J0IGdldHRpbmcuLi5ldmVudHVhbGx5IHRoaXMgd2ls
bCBiZSByZXBsYWNlZCB3aT0KdGggYW4gQVBJIGNhbGwgaW5zdGVhZC4KKyAgICAiIiIKKyAgICAj
IEZpbmQgYWxsIHBvcnRzIHRoYXQgYXJlIGFscmVhZHkgb2NjdXBpZWQKKyAgICBjbWRfbmV0c3Rh
dCA9M0Qgc2hsZXguc3BsaXQoIm5ldHN0YXQgLXR1bG4iKQorICAgIHAxID0zRCBzdWJwcm9jZXNz
LlBvcGVuKGNtZF9uZXRzdGF0LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJUEUpCisKKyAgICBvY2N1
cGllZF9wb3J0cyA9M0Qgc2V0KCkKKyAgICBmb3IgbGluZSBpbiBwMS5zdGRvdXQucmVhZCgpLnNw
bGl0KCdcbicpOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3RjcCcpIG9yIGxpbmUuc3Rh
cnRzd2l0aCgndGNwNicpOgorICAgICAgICAgICAgY29sID0zRCBsaW5lLnNwbGl0KCkKKyAgICAg
ICAgICAgIGxvY2FsX2FkZHJlc3MgPTNEIGNvbFszXQorICAgICAgICAgICAgbG9jYWxfcG9ydCA9
M0QgbG9jYWxfYWRkcmVzcy5zcGxpdCgnOicpWy0xXQorICAgICAgICAgICAgb2NjdXBpZWRfcG9y
dHMuYWRkKCBpbnQobG9jYWxfcG9ydCkgKQorCisgICAgIyBHZW5lcmF0ZSByYW5kb20gZnJlZSBw
b3J0IG51bWJlciBmb3Igb3VyIGRvY2tlciBjb250YWluZXIKKyAgICB3aGlsZSBUcnVlOgorICAg
ICAgICBwb3J0ID0zRCByYW5kb20ucmFuZHJhbmdlKDEwMDAwLDE1MDAwKQorICAgICAgICBpZiBw
b3J0IG5vdCBpbiBvY2N1cGllZF9wb3J0czoKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJu
IHBvcnQKKyU+Cis8LyVkZWY+CisKKzwlZGVmIG5hbWU9M0QiZ2VuZXJhdGVfcGFzc3dvcmQobGVu
Z3RoKSI+Cis8JQorICAgIHJldHVybiAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlh
YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpIGY9Cm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKKyU+
Cis8LyVkZWY+CisKKzwlZGVmIG5hbWU9M0QiamF2YXNjcmlwdF9ib29sZWFuKGxlbmd0aCkiPgor
PCUKKyAgICAiIiIKKyAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVydCBib29s
ZWFuIGZvciB1c2UgaW4gSlMKKyAgICAiIiIKKyAgICBpZiBib29sZWFuOgorICAgICAgICByZXR1
cm4gInRydWUiOworICAgIGVsc2U6CisgICAgICAgIHJldHVybiAiZmFsc2UiCislPgorPC8lZGVm
PgorCisKKzwlZGVmIG5hbWU9M0QiZG9ja2VyX2NtZChpcHlfdml6X2NvbmZpZywgUE9SVCwgdGVt
cF9kaXIpIj4KKzwlCisgICAgcmV0dXJuICclcyBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1w
ICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQvIiAlcycgJT0KIFwKKyAgICAgICAgKGlweV92aXpfY29u
ZmlnLmdldCgiZG9ja2VyIiwgImNvbW1hbmQiKSwgUE9SVCwgdGVtcF9kaXIsIGlweV92aXpfPQpj
b25maWcuZ2V0KCJkb2NrZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9CiAgICAgICAgICAgImltYWdl
IikpCislPgorPC8lZGVmPgoKZGlmZiAtciBjOTI5NTgwNTdlMmM5OTE4NTg1MWVmNmY4YjJiNWMy
ZTEyNDQwZGMyIC1yIDA2OTQ3NGI5NjQxMTI0ODEzOWQ3Zjg5PQplMzBjN2JkYjdiYTkwYzM3MiBj
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09
CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRl
cy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC01OCw2ICs1OCw4IEBACiAjIFJvdXRlcwogcm9v
dCAgICAgICAgPTNEIGgudXJsX2ZvciggIi8iICkKIGFwcF9yb290ICAgID0zRCByb290ICsgInBs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvIgorIyBSZWdpc3RlciBvdXJzZWxm
IHdpdGggdGhlIGllIG1vZHVsZQoraWUuc2V0X2lkKCJpcHl0aG9uIikKPTIwCiBnYWxheHlfcGFz
dGVyX3BvcnQgPTNEIGllLmdldF9nYWxheHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3RfZGlyLCBn
YWxheHlfYz0Kb25maWcpCj0yMApAQCAtNzMsNyArNzUsNyBAQAogUEFTU1dPUkRfQVVUSCA9M0Qg
aXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJwYXNzd29yZF9hdXRoIikKIEFQQUNI
RV9VUkxTID0zRCBpcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgImFwYWNoZV91cmxz
IikKIFNTTF9VUkxTID0zRCBpcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIp
Ci1QT1JUID0zRCBwcm94eV9yZXF1ZXN0X3BvcnQoKQorUE9SVCA9M0QgaWUucHJveHlfcmVxdWVz
dF9wb3J0KCkKIEhPU1QgPTNEIHJlcXVlc3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwgd2UganVz
dCB3YW50IHRoZSBVUkwgdGhpcyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4KIGlmICc6
JyBpbiBIT1NUOgpAQCAtOTQsOCArOTYsOCBAQAo9MjAKIGlmIFBBU1NXT1JEX0FVVEg6CiAgICAg
IyBHZW5lcmF0ZSBhIHJhbmRvbSBwYXNzd29yZCArIHNhbHQKLSAgICBub3RlYm9va19wd19zYWx0
ID0zRCBnZW5lcmF0ZV9wYXN3b3JkKGxlbmd0aD0zRDEyKQotICAgIG5vdGVib29rX3B3ID0zRCBn
ZW5lcmF0ZV9wYXN3b3JkKGxlbmd0aD0zRDI0KQorICAgIG5vdGVib29rX3B3X3NhbHQgPTNEIGll
LmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDEyKQorICAgIG5vdGVib29rX3B3ID0zRCBpZS5n
ZW5lcmF0ZV9wYXNzd29yZChsZW5ndGg9M0QyNCkKICAgICBtID0zRCBoYXNobGliLnNoYTEoKQog
ICAgIG0udXBkYXRlKCBub3RlYm9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQogICAgIGNvbmZf
ZmlsZVsnbm90ZWJvb2tfcGFzc3dvcmQnXSA9M0QgJ3NoYTE6JXM6JXMnICUgKG5vdGVib29rX3B3
X3NhbHQsIG09Ci5oZXhkaWdlc3QoKSkKQEAgLTExNyw4ICsxMTksNyBAQAogZWxzZToKICAgICBz
aHV0aWwuY29weSggaGRhLmZpbGVfbmFtZSwgZW1wdHlfbmJfcGF0aCApCj0yMAotZG9ja2VyX2Nt
ZCA9M0QgJyVzIHJ1biAtZCAtLXNpZy1wcm94eT0zRHRydWUgLXAgJXM6Njc4OSAtdiAiJXM6L2lt
cG9ydC8iICU9CnMnICUgXAotICAgIChpcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJjb21t
YW5kIiksIFBPUlQsIHRlbXBfZGlyLCBpcHlfdml6X2NvbmY9CmlnLmdldCgiZG9ja2VyIiwgImlt
YWdlIikpCitkb2NrZXJfY21kID0zRCBpZS5kb2NrZXJfY21kKGlweV92aXpfY29uZmlnLCBQT1JU
LCB0ZW1wX2RpcikKPTIwCiAjIFNldCBvdXIgcHJvdG8gc28gcGFzc3dvcmRzIGRvbid0IGdvIGlu
IGNsZWFyCiBpZiBTU0xfVVJMUzoKQEAgLTE0Nyw4ICsxNDgsOCBAQAogPGJvZHk+PHNjcmlwdCB0
eXBlPTNEInRleHQvamF2YXNjcmlwdCI+Ci12YXIgcGFzc3dvcmRfYXV0aCA9M0QgJHsgamF2YXNj
cmlwdF9ib29sZWFuKFBBU1NXT1JEX0FVVEgpIH07Ci12YXIgYXBhY2hlX3VybHMgPTNEICR7IGph
dmFzY3JpcHRfYm9vbGVhbihBUEFDSEVfVVJMUykgfTsKK3ZhciBwYXNzd29yZF9hdXRoID0zRCAk
eyBpZS5qYXZhc2NyaXB0X2Jvb2xlYW4oUEFTU1dPUkRfQVVUSCkgfTsKK3ZhciBhcGFjaGVfdXJs
cyA9M0QgJHsgaWUuamF2YXNjcmlwdF9ib29sZWFuKEFQQUNIRV9VUkxTKSB9OwogdmFyIG5vdGVi
b29rX2xvZ2luX3VybCA9M0QgJyR7IG5vdGVib29rX2xvZ2luX3VybCB9JzsKIHZhciBwYXNzd29y
ZCA9M0QgJyR7IG5vdGVib29rX3B3IH0nOwogdmFyIG5vdGVib29rX2FjY2Vzc191cmwgPTNEICck
eyBub3RlYm9va19hY2Nlc3NfdXJsIH0nOwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy8wNDI3YjI5YTkyNDkvCkNoYW5nZXNldDogICAwNDI3YjI5
YTkyNDkKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4
OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNb3JlIHByb2dyZXNzIHJlZmFjdG9yaW5nCkFmZmVjdGVk
ICM6ICAyIGZpbGVzCgpkaWZmIC1yIDA2OTQ3NGI5NjQxMTI0ODEzOWQ3Zjg5ZTMwYzdiZGI3YmE5
MGMzNzIgLXIgMDQyN2IyOWE5MjQ5NDIyMWQyNjI0Zjk9CmYzYTUwNTg0ZTQ4NjAzZGNmIGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KLS0tIGEv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwor
KysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5t
YWtvCkBAIC04LDkgKzgsMjIgQEAKIHZpel9pZCA9M0QgTm9uZQogJT4KPTIwCi08JWRlZiBuYW1l
PTNEInNldF9pZChuYW1lKSIlPgorPCVkZWYgbmFtZT0zRCJzZXRfaWQobmFtZSkiPjwlCi0gICAg
dml6X2lkID0zRCBuYW1lCisgICAgc2VsZi5hdHRyLnZpel9pZCA9M0QgbmFtZQorJT4KKzwvJWRl
Zj4KKworPCVkZWYgbmFtZT0zRCJyZWdpc3Rlcl9nYWxheHlfb2JqZWN0cyh0cmFucywgaCwgcmVz
cG9uc2UpIj4KKzwlCisgICAgc2VsZi5hdHRyLnRyYW5zID0zRCB0cmFucworICAgIHNlbGYuYXR0
ci5oaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5zLmhpc3Rvcnku
aWQgKQorICAgIHNlbGYuYXR0ci5oID0zRCBoCisgICAgc2VsZi5hdHRyLnJlc3BvbnNlID0zRCBy
ZXNwb25zZQorICAgIHNlbGYuYXR0ci5nYWxheHlfY29uZmlnID0zRCB0cmFucy5hcHAuY29uZmln
CisgICAgc2VsZi5hdHRyLmdhbGF4eV9yb290X2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKHNlbGYu
YXR0ci5nYWxheHlfY29uZmlnLj0Kcm9vdCkKKyAgICBzZWxmLmF0dHIucm9vdCA9M0QgaC51cmxf
Zm9yKCIvIikKKyAgICBzZWxmLmF0dHIuYXBwX3Jvb3QgPTNEIHNlbGYuYXR0ci5yb290ICsgInBs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvPQpuL3N0YXRpYy8iCiAlPjwvJWRlZj4KPTIwCgpk
aWZmIC1yIDA2OTQ3NGI5NjQxMTI0ODEzOWQ3Zjg5ZTMwYzdiZGI3YmE5MGMzNzIgLXIgMDQyN2Iy
OWE5MjQ5NDIyMWQyNjI0Zjk9CmYzYTUwNTg0ZTQ4NjAzZGNmIGNvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysg
Yi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9u
Lm1ha28KQEAgLTYwLDggKzYwLDkgQEAKIGFwcF9yb290ICAgID0zRCByb290ICsgInBsdWdpbnMv
dmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvIgogIyBSZWdpc3RlciBvdXJzZWxmIHdpdGgg
dGhlIGllIG1vZHVsZQogaWUuc2V0X2lkKCJpcHl0aG9uIikKK2llLnJlZ2lzdGVyX2dhbGF4eV9v
YmplY3RzKHRyYW5zLCBoLCByZXNwb25zZSkKPTIwCi1nYWxheHlfcGFzdGVyX3BvcnQgPTNEIGll
LmdldF9nYWxheHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3RfZGlyLCBnYWxheHlfYz0Kb25maWcp
CitnYWxheHlfcGFzdGVyX3BvcnQgPTNEIGllLmdldF9nYWxheHlfcGFzdGVyX3BvcnQoaWUuYXR0
ci5nYWxheHlfcm9vdF9kaXIsID0KaWUuYXR0ci5nYWxheHlfY29uZmlnKQo9MjAKICMgU3RvcmUg
b3VyIHRlbXBsYXRlIGFuZCBjb25maWd1cmF0aW9uIHBhdGgKIG91cl9jb25maWdfZGlyID0zRCBv
cy5wYXRoLmpvaW4ocGx1Z2luX3BhdGgsICJjb25maWciKQpAQCAtMTQzLDcgKzE0NCw3IEBACiAk
e2guanMoICdsaWJzL2pxdWVyeS9qcXVlcnknICkgfQogJHtoLmpzKCAnbGlicy90b2FzdHInICkg
fQogIyMgTG9hZCBJUHl0aG9uLUdhbGF4eSBjb25uZWN0b3IKLSR7aC5qYXZhc2NyaXB0X2xpbmso
IGFwcF9yb290ICsgJ2lweS1nYWxheHkuanMnICl9Ciske2guamF2YXNjcmlwdF9saW5rKCBpZS5h
dHRyLmFwcF9yb290ICsgJ2lweS1nYWxheHkuanMnICl9CiA8L2hlYWQ+PGJvZHk+Cj0yMApAQCAt
MTUzLDcgKzE1NCw3IEBACiB2YXIgbm90ZWJvb2tfbG9naW5fdXJsID0zRCAnJHsgbm90ZWJvb2tf
bG9naW5fdXJsIH0nOwogdmFyIHBhc3N3b3JkID0zRCAnJHsgbm90ZWJvb2tfcHcgfSc7CiB2YXIg
bm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfSc7Ci12YXIg
Z2FsYXh5X3Jvb3QgPTNEICckeyByb290IH0nOwordmFyIGdhbGF4eV9yb290ID0zRCAnJHsgaWUu
YXR0ci5yb290IH0nOwogLy8gTG9hZCBub3RlYm9vawogbG9hZF9ub3RlYm9vayhwYXNzd29yZF9h
dXRoLCBwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3M9Cl91cmws
IGFwYWNoZV91cmxzLCBnYWxheHlfcm9vdCk7CiA8L3NjcmlwdD4KCgpodHRwczovL2JpdGJ1Y2tl
dC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNGNhMGI4YzdmZDVlLwpDaGFuZ2Vz
ZXQ6ICAgNGNhMGI4YzdmZDVlClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAx
NC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQ29weSBpbXBvcnRzCkFmZmVjdGVk
ICM6ICAxIGZpbGUKCmRpZmYgLXIgMDQyN2IyOWE5MjQ5NDIyMWQyNjI0ZjlmM2E1MDU4NGU0ODYw
M2RjZiAtciA0Y2EwYjhjN2ZkNWVjOTJmYWJlZDNhOD0KMmQ2ZjA2NWNjNjk4OGM4ZGUgY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisr
KyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1h
a28KQEAgLTEsOSArMSwxNSBAQAogPCUhCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0
aW1lCitpbXBvcnQgeWFtbAoraW1wb3J0IHNobGV4CitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2h1
dGlsCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2Vzcwog
aW1wb3J0IENvbmZpZ1BhcnNlcgotaW1wb3J0IG9zCi1pbXBvcnQgc2hsZXgKLWltcG9ydCBzdWJw
cm9jZXNzCi1pbXBvcnQgcmFuZG9tCj0yMAogdml6X2lkID0zRCBOb25lCiAlPgoKCmh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9kYjYyMmYwZjVlNjAv
CkNoYW5nZXNldDogICBkYjYyMmYwZjVlNjAKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAg
ICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBSZW1vdmUgcG9pbnRs
ZXNzIHN0YXRlbWVudApBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDRjYTBiOGM3ZmQ1ZWM5
MmZhYmVkM2E4MmQ2ZjA2NWNjNjk4OGM4ZGUgLXIgZGI2MjJmMGY1ZTYwN2M4YWQ0NmNiMGE9Cjdj
NDA2NzRiYTVlYWEyNTg4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2llLm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaWUubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCkBAIC0xMSw3ICsxMSw2IEBACiBpbXBvcnQgc3VicHJv
Y2VzcwogaW1wb3J0IENvbmZpZ1BhcnNlcgo9MjAKLXZpel9pZCA9M0QgTm9uZQogJT48JWRlZiBu
YW1lPTNEInNldF9pZChuYW1lKSI+CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxh
eHktY2VudHJhbC9jb21taXRzL2UzYTlkMmViZjY4MC8KQ2hhbmdlc2V0OiAgIGUzYTlkMmViZjY4
MApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQr
MDA6MDAKU3VtbWFyeTogICAgIEFkZGVkIGhleCBnZW4gc3RtdApBZmZlY3RlZCAjOiAgMiBmaWxl
cwoKZGlmZiAtciBkYjYyMmYwZjVlNjA3YzhhZDQ2Y2IwYTdjNDA2NzRiYTVlYWEyNTg4IC1yIGUz
YTlkMmViZjY4MGEyYzk1ODUxYmJhPQpjYjE5ZmVjZDVjNzYyNzdiYyBjb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KKysrIGIvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwpAQCAtNzIs
NiArNzIsMTIgQEAKICU+PC8lZGVmPgo9MjAKKzwlZGVmIG5hbWU9M0QiZ2VuZXJhdGVfaGV4KGxl
bmd0aCkiPgorPCUKKyAgICByZXR1cm4gJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5
YWJjZGVmJykgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoPQopKQorJT4KKzwvJWRlZj4KKwogPCVkZWYg
bmFtZT0zRCJnZW5lcmF0ZV9wYXNzd29yZChsZW5ndGgpIj48JQogICAgIHJldHVybiAnJy5qb2lu
KHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpIGY9
Cm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKCmRpZmYgLXIgZGI2MjJmMGY1ZTYwN2M4YWQ0NmNiMGE3
YzQwNjc0YmE1ZWFhMjU4OCAtciBlM2E5ZDJlYmY2ODBhMmM5NTg1MWJiYT0KY2IxOWZlY2Q1Yzc2
Mjc3YmMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5
dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0
IENvbmZpZ1BhcnNlcgo9MjAKIGRlZiBsb2FkX25vdGVib29rKCk6Ci0gICAgbm90ZWJvb2tfaWQg
PTNEICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZicpIGZvciBfIGluIHJh
bj0KZ2UoNjQpKQorICAgIG5vdGVib29rX2lkID0zRCBpZS5nZW5lcmF0ZV9oZXgoNjQpCiAgICAg
d2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9vay5pcHlu
YicgKSwgJ3InKSBhcz0KIG5iX2hhbmRsZToKICAgICAgICAgZW1wdHlfbmIgPTNEIG5iX2hhbmRs
ZS5yZWFkKCkKICAgICBlbXB0eV9uYiA9M0QgZW1wdHlfbmIgJSBub3RlYm9va19pZAoKCmh0dHBz
Oi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy80ZTMyYjMxYjE3
NTMvCkNoYW5nZXNldDogICA0ZTMyYjMxYjE3NTMKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6
ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNb3ZlZCBtb3Jl
IGNvbmZpZ3VyYXRpb24gaW50byBpZSBiYXNlIG1vZHVsZQpBZmZlY3RlZCAjOiAgMiBmaWxlcwoK
ZGlmZiAtciBlM2E5ZDJlYmY2ODBhMmM5NTg1MWJiYWNiMTlmZWNkNWM3NjI3N2JjIC1yIDRlMzJi
MzFiMTc1M2Y2MjE3MGFkMjNhPQpjMmM4MzliY2Q3M2NjNDEzOCBjb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KKysrIGIvY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwpAQCAtMTksMTEg
KzE5LDEyIEBACiAlPjwvJWRlZj4KPTIwCi08JWRlZiBuYW1lPTNEInJlZ2lzdGVyX2dhbGF4eV9v
YmplY3RzKHRyYW5zLCBoLCByZXNwb25zZSkiPgorPCVkZWYgbmFtZT0zRCJyZWdpc3Rlcl9nYWxh
eHlfb2JqZWN0cyh0cmFucywgaCwgcmVzcG9uc2UsIHBsdWdpbl9wYXRoKSI+PCUKICAgICBzZWxm
LmF0dHIudHJhbnMgPTNEIHRyYW5zCiAgICAgc2VsZi5hdHRyLmhpc3RvcnlfaWQgPTNEIHRyYW5z
LnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCiAgICAgc2VsZi5hdHRyLmgg
PTNEIGgKKyAgICBzZWxmLmF0dHIucGx1Z2luX3BhdGggPTNEIHBsdWdpbl9wYXRoCiAgICAgc2Vs
Zi5hdHRyLnJlc3BvbnNlID0zRCByZXNwb25zZQogICAgIHNlbGYuYXR0ci5nYWxheHlfY29uZmln
ID0zRCB0cmFucy5hcHAuY29uZmlnCiAgICAgc2VsZi5hdHRyLmdhbGF4eV9yb290X2RpciA9M0Qg
b3MucGF0aC5hYnNwYXRoKHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLj0Kcm9vdCkKQEAgLTMyLDYg
KzMzLDE3IEBACiAlPjwvJWRlZj4KPTIwCis8JWRlZiBuYW1lPTNEInJlZ2lzdGVyX2RlZmF1bHRz
KGRlZmF1bHRfZGljdCkiPgorPCUKKyAgICAjIFN0b3JlIG91ciB0ZW1wbGF0ZSBhbmQgY29uZmln
dXJhdGlvbiBwYXRoCisgICAgc2VsZi5hdHRyLm91cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpv
aW4oc2VsZi5hdHRyLnBsdWdpbl9wYXRoLCAiY29uZj0KaWciKQorICAgIHNlbGYuYXR0ci5vdXJf
dGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4oc2VsZi5hdHRyLnBsdWdpbl9wYXRoLCAidGU9
Cm1wbGF0ZXMiKQorICAgIGlweV92aXpfY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZp
Z1BhcnNlcihkZWZhdWx0X2RpY3QpCisgICAgaXB5X3Zpel9jb25maWcucmVhZCggb3MucGF0aC5q
b2luKCBzZWxmLmF0dHIub3VyX2NvbmZpZ19kaXIsICJpcHl0aG9uLj0KY29uZiIgKSApCisgICAg
c2VsZi5hdHRyLmlweV92aXpfY29uZmlnID0zRCBpcHlfdml6X2NvbmZpZworJT4KKzwvJWRlZj4K
KwogPCVkZWYgbmFtZT0zRCJnZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KGdhbGF4eV9yb290X2Rpciwg
Z2FsYXh5X2NvbmZpZykiPjwlCiAgICAgY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZp
Z1BhcnNlcih7J3BvcnQnOiAnODA4MCd9KQoKZGlmZiAtciBlM2E5ZDJlYmY2ODBhMmM5NTg1MWJi
YWNiMTlmZWNkNWM3NjI3N2JjIC1yIDRlMzJiMzFiMTc1M2Y2MjE3MGFkMjNhPQpjMmM4MzliY2Q3
M2NjNDEzOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
cHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0xMiw3MCArMTIsMjQgQEAKIGlt
cG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgQ29uZmlnUGFyc2VyCj0yMAotZGVmIGxvYWRfbm90ZWJv
b2soKToKLSAgICBub3RlYm9va19pZCA9M0QgaWUuZ2VuZXJhdGVfaGV4KDY0KQotICAgIHdpdGgg
b3Blbiggb3MucGF0aC5qb2luKCBvdXJfdGVtcGxhdGVfZGlyLCAnbm90ZWJvb2suaXB5bmInICks
ICdyJykgYXM9CiBuYl9oYW5kbGU6Ci0gICAgICAgIGVtcHR5X25iID0zRCBuYl9oYW5kbGUucmVh
ZCgpCi0gICAgZW1wdHlfbmIgPTNEIGVtcHR5X25iICUgbm90ZWJvb2tfaWQKLSAgICByZXR1cm4g
ZW1wdHlfbmIKLQotZGVmIHByb3h5X3JlcXVlc3RfcG9ydCgpOgotICAgICIiIgotICAgICAgICBS
ZWZhY3RvciBvZiBvdXIgcG9ydCBnZXR0aW5nLi4uZXZlbnR1YWxseSB0aGlzIHdpbGwgYmUgcmVw
bGFjZWQgd2k9CnRoIGFuIEFQSSBjYWxsIGluc3RlYWQuCi0gICAgIiIiCi0gICAgIyBGaW5kIGFs
bCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVkCi0gICAgY21kX25ldHN0YXQgPTNEIHNo
bGV4LnNwbGl0KCJuZXRzdGF0IC10dWxuIikKLSAgICBwMSA9M0Qgc3VicHJvY2Vzcy5Qb3Blbihj
bWRfbmV0c3RhdCwgc3Rkb3V0PTNEc3VicHJvY2Vzcy5QSVBFKQotCi0gICAgb2NjdXBpZWRfcG9y
dHMgPTNEIHNldCgpCi0gICAgZm9yIGxpbmUgaW4gcDEuc3Rkb3V0LnJlYWQoKS5zcGxpdCgnXG4n
KToKLSAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0Y3AnKSBvciBsaW5lLnN0YXJ0c3dpdGgo
J3RjcDYnKToKLSAgICAgICAgICAgIGNvbCA9M0QgbGluZS5zcGxpdCgpCi0gICAgICAgICAgICBs
b2NhbF9hZGRyZXNzID0zRCBjb2xbM10KLSAgICAgICAgICAgIGxvY2FsX3BvcnQgPTNEIGxvY2Fs
X2FkZHJlc3Muc3BsaXQoJzonKVstMV0KLSAgICAgICAgICAgIG9jY3VwaWVkX3BvcnRzLmFkZCgg
aW50KGxvY2FsX3BvcnQpICkKLQotICAgICMgR2VuZXJhdGUgcmFuZG9tIGZyZWUgcG9ydCBudW1i
ZXIgZm9yIG91ciBkb2NrZXIgY29udGFpbmVyCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgcG9y
dCA9M0QgcmFuZG9tLnJhbmRyYW5nZSgxMDAwMCwxNTAwMCkKLSAgICAgICAgaWYgcG9ydCBub3Qg
aW4gb2NjdXBpZWRfcG9ydHM6Ci0gICAgICAgICAgICBicmVhawotICAgIHJldHVybiBwb3J0Ci0K
LWRlZiBnZW5lcmF0ZV9wYXN3b3JkKGxlbmd0aD0zRDEyKToKLSAgICByZXR1cm4gJycuam9pbihy
YW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonKSBmPQpv
ciBfIGluIHJhbmdlKGxlbmd0aCkpCi0KLWRlZiBqYXZhc2NyaXB0X2Jvb2xlYW4oYm9vbGVhbik6
Ci0gICAgIiIiCi0gICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9vbGVh
biBmb3IgdXNlIGluIEpTCi0gICAgIiIiCi0gICAgcmV0dXJuICJ0cnVlIiBpZiBib29sZWFuIGVs
c2UgImZhbHNlIgotCi0KLWdhbGF4eV9jb25maWcgPTNEIHRyYW5zLmFwcC5jb25maWcKLWdhbGF4
eV9yb290X2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKGdhbGF4eV9jb25maWcucm9vdCkKLWhpc3Rv
cnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCi0j
IFJvdXRlcwotcm9vdCAgICAgICAgPTNEIGgudXJsX2ZvciggIi8iICkKLWFwcF9yb290ICAgID0z
RCByb290ICsgInBsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvIgotIyBSZWdp
c3RlciBvdXJzZWxmIHdpdGggdGhlIGllIG1vZHVsZQogaWUuc2V0X2lkKCJpcHl0aG9uIikKLWll
LnJlZ2lzdGVyX2dhbGF4eV9vYmplY3RzKHRyYW5zLCBoLCByZXNwb25zZSkKK2llLnJlZ2lzdGVy
X2dhbGF4eV9vYmplY3RzKHRyYW5zLCBoLCByZXNwb25zZSwgcGx1Z2luX3BhdGgpCitpZS5yZWdp
c3Rlcl9kZWZhdWx0cyh7CisgICAgJ2FwYWNoZV91cmxzJzogRmFsc2UsCisgICAgJ2NvbW1hbmQn
OiAnZG9ja2VyJywKKyAgICAnaW1hZ2UnOiAnYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLW5vdGVi
b29rJywKKyAgICAncGFzc3dvcmRfYXV0aCc6IEZhbHNlLAorICAgICdzc2wnOiBGYWxzZX0pCj0y
MAogZ2FsYXh5X3Bhc3Rlcl9wb3J0ID0zRCBpZS5nZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KGllLmF0
dHIuZ2FsYXh5X3Jvb3RfZGlyLCA9CmllLmF0dHIuZ2FsYXh5X2NvbmZpZykKPTIwCi0jIFN0b3Jl
IG91ciB0ZW1wbGF0ZSBhbmQgY29uZmlndXJhdGlvbiBwYXRoCi1vdXJfY29uZmlnX2RpciA9M0Qg
b3MucGF0aC5qb2luKHBsdWdpbl9wYXRoLCAiY29uZmlnIikKLW91cl90ZW1wbGF0ZV9kaXIgPTNE
IG9zLnBhdGguam9pbihwbHVnaW5fcGF0aCwgInRlbXBsYXRlcyIpCi1pcHlfdml6X2NvbmZpZyA9
M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydhcGFjaGVfdXJscyc6IEZhbHNlLCAn
Yz0Kb21tYW5kJzogJ2RvY2tlcicsICdpbWFnZSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLT0Kbm90ZWJv
b2snLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bh
c3N3b3JkX2F1dGgnOiBGYWxzZSwgJ3M9CnNsJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9ja2VyX2RlbGF5JzogMX0pCi1pcHlfdml6
X2NvbmZpZy5yZWFkKCBvcy5wYXRoLmpvaW4oIG91cl9jb25maWdfZGlyLCAiaXB5dGhvbi5jb25m
IiApICkKPTIwCi1QQVNTV09SRF9BVVRIID0zRCBpcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJt
YWluIiwgInBhc3N3b3JkX2F1dGgiKQotQVBBQ0hFX1VSTFMgPTNEIGlweV92aXpfY29uZmlnLmdl
dGJvb2xlYW4oIm1haW4iLCAiYXBhY2hlX3VybHMiKQotU1NMX1VSTFMgPTNEIGlweV92aXpfY29u
ZmlnLmdldGJvb2xlYW4oIm1haW4iLCAic3NsIikKKyNQQVNTV09SRF9BVVRIID0zRCBpZS5hdHRy
LmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAicGFzc3dvcmRfYXV0PQpoIikKKyNB
UEFDSEVfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwg
ImFwYWNoZV91cmxzIikKKyNTU0xfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXRi
b29sZWFuKCJtYWluIiwgInNzbCIpCitQQVNTV09SRF9BVVRIID0zRCBGYWxzZQorQVBBQ0hFX1VS
TFMgPTNEIEZhbHNlCitTU0xfVVJMUyA9M0QgRmFsc2UKIFBPUlQgPTNEIGllLnByb3h5X3JlcXVl
c3RfcG9ydCgpCiBIT1NUID0zRCByZXF1ZXN0Lmhvc3QKICMgU3RyaXAgb3V0IHBvcnQsIHdlIGp1
c3Qgd2FudCB0aGUgVVJMIHRoaXMgZ2FsYXh5IHNlcnZlciB3YXMgYWNjZXNzZWQgYXQuCkBAIC04
Niw3ICs0MCw3IEBACiBhcGlfa2V5ID0zRCBnZXRfYXBpX2tleSgpCj0yMAogY29uZl9maWxlID0z
RCB7Ci0gICAgJ2hpc3RvcnlfaWQnOiBoaXN0b3J5X2lkLAorICAgICdoaXN0b3J5X2lkJzogaWUu
YXR0ci5oaXN0b3J5X2lkLAogICAgICdnYWxheHlfdXJsJzogcmVxdWVzdC5hcHBsaWNhdGlvbl91
cmwucnN0cmlwKCcvJykgKyAnLycsCiAgICAgJ2FwaV9rZXknOiBhcGlfa2V5LAogICAgICdyZW1v
dGVfaG9zdCc6IHJlcXVlc3QucmVtb3RlX2FkZHIsCkBAIC0xMTEsNyArNjUsMTAgQEAKICAgICBo
YW5kbGUud3JpdGUoIHlhbWwuZHVtcChjb25mX2ZpbGUsIGRlZmF1bHRfZmxvd19zdHlsZT0zREZh
bHNlKSApCj0yMAogIyBQcmVwYXJlIGFuIGVtcHR5IG5vdGVib29rCi1lbXB0eV9uYiA9M0QgbG9h
ZF9ub3RlYm9vaygpCitub3RlYm9va19pZCA9M0QgaWUuZ2VuZXJhdGVfaGV4KDY0KQord2l0aCBv
cGVuKCBvcy5wYXRoLmpvaW4oIGllLmF0dHIub3VyX3RlbXBsYXRlX2RpciwgJ25vdGVib29rLmlw
eW5iJyApLCAncic9CikgYXMgbmJfaGFuZGxlOgorICAgIGVtcHR5X25iID0zRCBuYl9oYW5kbGUu
cmVhZCgpCitlbXB0eV9uYiA9M0QgZW1wdHlfbmIgJSBub3RlYm9va19pZAogIyBDb3B5IG92ZXIg
ZGVmYXVsdCBub3RlYm9vaywgdW5sZXNzIHRoZSBkYXRhc2V0IHRoaXMgdml6IGlzIHJ1bm5pbmcg
b24gaXM9CiBhIG5vdGVib29rCiBlbXB0eV9uYl9wYXRoID0zRCBvcy5wYXRoLmpvaW4odGVtcF9k
aXIsICdpcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpCiBpZiBoZGEuZGF0YXR5cGUuX19j
bGFzc19fLl9fbmFtZV9fICE9M0QgIklweW5iIjoKQEAgLTEyMCw3ICs3Nyw3IEBACiBlbHNlOgog
ICAgIHNodXRpbC5jb3B5KCBoZGEuZmlsZV9uYW1lLCBlbXB0eV9uYl9wYXRoICkKPTIwCi1kb2Nr
ZXJfY21kID0zRCBpZS5kb2NrZXJfY21kKGlweV92aXpfY29uZmlnLCBQT1JULCB0ZW1wX2RpcikK
K2RvY2tlcl9jbWQgPTNEIGllLmRvY2tlcl9jbWQoaWUuYXR0ci5pcHlfdml6X2NvbmZpZywgUE9S
VCwgdGVtcF9kaXIpCj0yMAogIyBTZXQgb3VyIHByb3RvIHNvIHBhc3N3b3JkcyBkb24ndCBnbyBp
biBjbGVhcgogaWYgU1NMX1VSTFM6CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxh
eHktY2VudHJhbC9jb21taXRzLzlkM2Q3ZTA4YTA3Ni8KQ2hhbmdlc2V0OiAgIDlkM2Q3ZTA4YTA3
NgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQr
MDA6MDAKU3VtbWFyeTogICAgIFJldmVydGVkIGNoYW5nZSB1c2VkIGR1cmluZyB0ZXN0aW5nCkFm
ZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNGUzMmIzMWIxNzUzZjYyMTcwYWQyM2FjMmM4Mzli
Y2Q3M2NjNDEzOCAtciA5ZDNkN2UwOGEwNzY1MTM5ZDcyZTEwYz0KZTQ4NTNkNGIwYWQzMzFlMTIg
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
PQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMjQsMTIgKzI0LDkgQEAKIGdhbGF4eV9wYXN0
ZXJfcG9ydCA9M0QgaWUuZ2V0X2dhbGF4eV9wYXN0ZXJfcG9ydChpZS5hdHRyLmdhbGF4eV9yb290
X2RpciwgPQppZS5hdHRyLmdhbGF4eV9jb25maWcpCj0yMAo9MjAKLSNQQVNTV09SRF9BVVRIID0z
RCBpZS5hdHRyLmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAicGFzc3dvcmRfYXV0
PQpoIikKLSNBUEFDSEVfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXRib29sZWFu
KCJtYWluIiwgImFwYWNoZV91cmxzIikKLSNTU0xfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2Nv
bmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIpCi1QQVNTV09SRF9BVVRIID0zRCBGYWxzZQot
QVBBQ0hFX1VSTFMgPTNEIEZhbHNlCi1TU0xfVVJMUyA9M0QgRmFsc2UKK1BBU1NXT1JEX0FVVEgg
PTNEIGllLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJwYXNzd29yZF9h
dXRoPQoiKQorQVBBQ0hFX1VSTFMgPTNEIGllLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVh
bigibWFpbiIsICJhcGFjaGVfdXJscyIpCitTU0xfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2Nv
bmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIpCiBQT1JUID0zRCBpZS5wcm94eV9yZXF1ZXN0
X3BvcnQoKQogSE9TVCA9M0QgcmVxdWVzdC5ob3N0CiAjIFN0cmlwIG91dCBwb3J0LCB3ZSBqdXN0
IHdhbnQgdGhlIFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkIGF0LgoKCmh0dHBz
Oi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9hY2ExOGFhNjdh
N2MvCkNoYW5nZXNldDogICBhY2ExOGFhNjdhN2MKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6
ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNb3ZlZCBVUkwg
d3JpdGluZyBpbnRvIGllLm1ha28KQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgOWQzZDdl
MDhhMDc2NTEzOWQ3MmUxMGNlNDg1M2Q0YjBhZDMzMWUxMiAtciBhY2ExOGFhNjdhN2M4YTM5YjJm
NGQ4OD0KMzkyZWY0NjRhM2I5NjdmZjEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE5LDcgKzE5LDcgQEAKICU+PC8l
ZGVmPgo9MjAKLTwlZGVmIG5hbWU9M0QicmVnaXN0ZXJfZ2FsYXh5X29iamVjdHModHJhbnMsIGgs
IHJlc3BvbnNlLCBwbHVnaW5fcGF0aCkiPgorPCVkZWYgbmFtZT0zRCJyZWdpc3Rlcl9nYWxheHlf
b2JqZWN0cyh0cmFucywgaCwgcmVzcG9uc2UsIHBsdWdpbl9wYXRoLCByZXE9CnVlc3QpIj48JQog
ICAgIHNlbGYuYXR0ci50cmFucyA9M0QgdHJhbnMKICAgICBzZWxmLmF0dHIuaGlzdG9yeV9pZCA9
M0QgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKQEAgLTMwLDYg
KzMwLDcgQEAKICAgICBzZWxmLmF0dHIuZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRoLmFic3Bh
dGgoc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuPQpyb290KQogICAgIHNlbGYuYXR0ci5yb290ID0z
RCBoLnVybF9mb3IoIi8iKQogICAgIHNlbGYuYXR0ci5hcHBfcm9vdCA9M0Qgc2VsZi5hdHRyLnJv
b3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG89Cm4vc3RhdGljLyIKKyAgICBzZWxm
LmF0dHIucmVxdWVzdCA9M0QgcmVxdWVzdAogJT48LyVkZWY+Cj0yMApAQCAtNDEsNiArNDIsNDQg
QEAKICAgICBpcHlfdml6X2NvbmZpZyA9M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIo
ZGVmYXVsdF9kaWN0KQogICAgIGlweV92aXpfY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggc2Vs
Zi5hdHRyLm91cl9jb25maWdfZGlyLCAiaXB5dGhvbi49CmNvbmYiICkgKQogICAgIHNlbGYuYXR0
ci5pcHlfdml6X2NvbmZpZyA9M0QgaXB5X3Zpel9jb25maWcKKyAgICAjIFN0b3JlIHNvbWUgdmFy
aWFibGVzIHdlIHdhbnQgYnkgZGVmYXVsdAorICAgIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIID0z
RCBzZWxmLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiI9CiwgInBhc3N3b3Jk
X2F1dGgiKQorICAgIHNlbGYuYXR0ci5BUEFDSEVfVVJMUyA9M0Qgc2VsZi5hdHRyLmlweV92aXpf
Y29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCA9CiJhcGFjaGVfdXJscyIpCisgICAgc2VsZi5hdHRy
LlNTTF9VUkxTID0zRCBzZWxmLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIs
ICJzcz0KbCIpCisgICAgc2VsZi5hdHRyLlBPUlQgPTNEIHNlbGYucHJveHlfcmVxdWVzdF9wb3J0
KCkKKyAgICBzZWxmLmF0dHIuSE9TVCA9M0Qgc2VsZi5hdHRyLnJlcXVlc3QuaG9zdAorJT4KKzwv
JWRlZj4KKworPCVkZWYgbmFtZT0zRCJ3cml0ZV9jb25mX2ZpbGUob3V0cHV0X2RpcmVjdG9yeSki
PgorPCUKKyAgICBjb25mX2ZpbGUgPTNEIHsKKyAgICAgICAgJ2hpc3RvcnlfaWQnOiBzZWxmLmF0
dHIuaGlzdG9yeV9pZCwKKyAgICAgICAgJ2dhbGF4eV91cmwnOiBzZWxmLmF0dHIucmVxdWVzdC5h
cHBsaWNhdGlvbl91cmwucnN0cmlwKCcvJykgKyAnLycsCisgICAgICAgICdhcGlfa2V5Jzogc2Vs
Zi5hdHRyLmFwaV9rZXksCisgICAgICAgICdyZW1vdGVfaG9zdCc6IHNlbGYuYXR0ci5yZXF1ZXN0
LnJlbW90ZV9hZGRyLAorICAgICAgICAnZ2FsYXh5X3Bhc3Rlcl9wb3J0Jzogc2VsZi5nZXRfZ2Fs
YXh5X3Bhc3Rlcl9wb3J0KHNlbGYuYXR0ci5nYWxheHk9Cl9yb290X2RpciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dHIu
Z2FsYXh5PQpfY29uZmlnKSwKKyAgICAgICAgJ2RvY2tlcl9wb3J0Jzogc2VsZi5hdHRyLlBPUlQs
CisgICAgICAgICdjb3JzX29yaWdpbic6IHNlbGYuYXR0ci5yZXF1ZXN0Lmhvc3RfdXJsLAorICAg
IH0KKworICAgIGlmIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIOgorICAgICAgICAjIEdlbmVyYXRl
IGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAorICAgICAgICBub3RlYm9va19wd19zYWx0ID0zRCBz
ZWxmLmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDEyKQorICAgICAgICBub3RlYm9va19wdyA9
M0Qgc2VsZi5nZW5lcmF0ZV9wYXNzd29yZChsZW5ndGg9M0QyNCkKKyAgICAgICAgbSA9M0QgaGFz
aGxpYi5zaGExKCkKKyAgICAgICAgbS51cGRhdGUoIG5vdGVib29rX3B3ICsgbm90ZWJvb2tfcHdf
c2FsdCApCisgICAgICAgIGNvbmZfZmlsZVsnbm90ZWJvb2tfcGFzc3dvcmQnXSA9M0QgJ3NoYTE6
JXM6JXMnICUgKG5vdGVib29rX3B3X3NhbD0KdCwgbS5oZXhkaWdlc3QoKSkKKyAgICAgICAgIyBT
aG91bGQgd2UgdXNlIHBhc3N3b3JkIGJhc2VkIGNvbm5lY3Rpb24gb3IgImRlZmF1bHQiIGNvbm5l
Y3Rpb24gPQpzdHlsZSBpbiBnYWxheHkKKyAgICBlbHNlOgorICAgICAgICBub3RlYm9va19wdyA9
M0QgIk5vbmUiCisKKyAgICBzZWxmLmF0dHIubm90ZWJvb2tfcHcgPTNEIG5vdGVib29rX3B3Cisg
ICAgIyBXcml0ZSBjb25mCisgICAgd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91dHB1dF9kaXJl
Y3RvcnksICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYT0KbmRsZToKKyAgICAgICAgaGFuZGxl
LndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxlLCBkZWZhdWx0X2Zsb3dfc3R5bGU9M0RGYWxzZSkg
KQorCiAlPjwvJWRlZj4KPTIwCkBAIC0xMDksNiArMTQ4LDI3IEBACiA8LyVkZWY+Cj0yMAo9MjAK
KzwlZGVmIG5hbWU9M0QidXJsX3RlbXBsYXRlKHVybF90ZW1wbGF0ZSkiPgorPCUKKyAgICAjIEZp
Z3VyZSBvdXQgb3VyIHN1YnN0aXR1dGlvbnMKKyAgICBpZiBzZWxmLmF0dHIuU1NMX1VSTFM6Cisg
ICAgICAgIHByb3RvY29sID0zRCAnaHR0cHMnCisgICAgZWxzZToKKyAgICAgICAgcHJvdG9jb2wg
PTNEICdodHRwJworCisgICAgaWYgbm90IHNlbGYuYXR0ci5BUEFDSEVfVVJMUzoKKyAgICAgICAg
IyBJZiB0aGV5IGFyZSBub3QgdXNpbmcgYXBhY2hlIFVSTHMsIHRoYXQgaW1wbGllcyB0aGVyZSdz
IGEgcG9ydCBhPQp0dGFjaGVkIHRvIHRoZSBob3N0CisgICAgICAgICMgc3RyaW5nLCB0aHVzIHdl
IHJlcGxhY2UganVzdCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgaG9zdCB0aGF0IHdlID0Kc2VlLgor
ICAgICAgICB1cmxfdGVtcGxhdGUgPTNEIHVybF90ZW1wbGF0ZS5yZXBsYWNlKCcke0hPU1R9Jywg
JyR7SE9TVH06JHtQT1JUfSc9CiwgMSkKKworICAgIHVybCA9M0QgdXJsX3RlbXBsYXRlLnJlcGxh
Y2UoJyR7UFJPVE99JywgcHJvdG9jb2wpIFwKKyAgICAgICAgICAgIC5yZXBsYWNlKCcke0hPU1R9
Jywgc2VsZi5hdHRyLkhPU1QpIFwKKyAgICAgICAgICAgIC5yZXBsYWNlKCcke1BPUlR9Jywgc3Ry
KHNlbGYuYXR0ci5QT1JUKSkKKyAgICByZXR1cm4gdXJsCislPgorPC8lZGVmPgorCisKIDwlZGVm
IG5hbWU9M0QiZG9ja2VyX2NtZChpcHlfdml6X2NvbmZpZywgUE9SVCwgdGVtcF9kaXIpIj48JQog
ICAgIHJldHVybiAnJXMgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczo2Nzg5IC12ICIl
czovaW1wb3J0LyIgJXMnICU9CiBcCgpkaWZmIC1yIDlkM2Q3ZTA4YTA3NjUxMzlkNzJlMTBjZTQ4
NTNkNGIwYWQzMzFlMTIgLXIgYWNhMThhYTY3YTdjOGEzOWIyZjRkODg9CjM5MmVmNDY0YTNiOTY3
ZmYxIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRo
b24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTEzLDcgKzEzLDcgQEAKIGltcG9ydCBD
b25maWdQYXJzZXIKPTIwCiBpZS5zZXRfaWQoImlweXRob24iKQotaWUucmVnaXN0ZXJfZ2FsYXh5
X29iamVjdHModHJhbnMsIGgsIHJlc3BvbnNlLCBwbHVnaW5fcGF0aCkKK2llLnJlZ2lzdGVyX2dh
bGF4eV9vYmplY3RzKHRyYW5zLCBoLCByZXNwb25zZSwgcGx1Z2luX3BhdGgsIHJlcXVlc3QpCiBp
ZS5yZWdpc3Rlcl9kZWZhdWx0cyh7CiAgICAgJ2FwYWNoZV91cmxzJzogRmFsc2UsCiAgICAgJ2Nv
bW1hbmQnOiAnZG9ja2VyJywKQEAgLTI0LDcgKzI0LDYgQEAKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9
M0QgaWUuZ2V0X2dhbGF4eV9wYXN0ZXJfcG9ydChpZS5hdHRyLmdhbGF4eV9yb290X2RpciwgPQpp
ZS5hdHRyLmdhbGF4eV9jb25maWcpCj0yMAo9MjAKLVBBU1NXT1JEX0FVVEggPTNEIGllLmF0dHIu
aXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJwYXNzd29yZF9hdXRoPQoiKQogQVBB
Q0hFX1VSTFMgPTNEIGllLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJh
cGFjaGVfdXJscyIpCiBTU0xfVVJMUyA9M0QgaWUuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXRib29s
ZWFuKCJtYWluIiwgInNzbCIpCiBQT1JUID0zRCBpZS5wcm94eV9yZXF1ZXN0X3BvcnQoKQpAQCAt
MzQsMzIgKzMzLDExIEBACiAgICAgSE9TVCA9M0QgSE9TVFswOkhPU1QuaW5kZXgoJzonKV0KPTIw
CiB0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKCB0ZW1wZmlsZS5ta2R0ZW1wKCkgKQotYXBp
X2tleSA9M0QgZ2V0X2FwaV9rZXkoKQoraWUuYXR0ci5hcGlfa2V5ID0zRCBnZXRfYXBpX2tleSgp
Cj0yMAotY29uZl9maWxlID0zRCB7Ci0gICAgJ2hpc3RvcnlfaWQnOiBpZS5hdHRyLmhpc3Rvcnlf
aWQsCi0gICAgJ2dhbGF4eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8n
KSArICcvJywKLSAgICAnYXBpX2tleSc6IGFwaV9rZXksCi0gICAgJ3JlbW90ZV9ob3N0JzogcmVx
dWVzdC5yZW1vdGVfYWRkciwKLSAgICAnZ2FsYXh5X3Bhc3Rlcl9wb3J0JzogZ2FsYXh5X3Bhc3Rl
cl9wb3J0LAotICAgICdkb2NrZXJfcG9ydCc6IFBPUlQsCi0gICAgJ2NvcnNfb3JpZ2luJzogcmVx
dWVzdC5ob3N0X3VybCwKLX0KKyMgV3JpdGUgb3V0IGNvbmYgZmlsZS4uLm5lZWRzIHdvcmsKK2ll
LndyaXRlX2NvbmZfZmlsZSh0ZW1wX2RpcikKPTIwCi1pZiBQQVNTV09SRF9BVVRIOgotICAgICMg
R2VuZXJhdGUgYSByYW5kb20gcGFzc3dvcmQgKyBzYWx0Ci0gICAgbm90ZWJvb2tfcHdfc2FsdCA9
M0QgaWUuZ2VuZXJhdGVfcGFzc3dvcmQobGVuZ3RoPTNEMTIpCi0gICAgbm90ZWJvb2tfcHcgPTNE
IGllLmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDI0KQotICAgIG0gPTNEIGhhc2hsaWIuc2hh
MSgpCi0gICAgbS51cGRhdGUoIG5vdGVib29rX3B3ICsgbm90ZWJvb2tfcHdfc2FsdCApCi0gICAg
Y29uZl9maWxlWydub3RlYm9va19wYXNzd29yZCddID0zRCAnc2hhMTolczolcycgJSAobm90ZWJv
b2tfcHdfc2FsdCwgbT0KLmhleGRpZ2VzdCgpKQotICAgICMgU2hvdWxkIHdlIHVzZSBwYXNzd29y
ZCBiYXNlZCBjb25uZWN0aW9uIG9yICJkZWZhdWx0IiBjb25uZWN0aW9uIHN0eWw9CmUgaW4gZ2Fs
YXh5Ci1lbHNlOgotICAgIG5vdGVib29rX3B3ID0zRCAiTm9uZSIKLQotIyBXcml0ZSBjb25mCi13
aXRoIG9wZW4oIG9zLnBhdGguam9pbiggdGVtcF9kaXIsICdjb25mLnlhbWwnICksICd3YicgKSBh
cyBoYW5kbGU6Ci0gICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxlLCBkZWZhdWx0
X2Zsb3dfc3R5bGU9M0RGYWxzZSkgKQo9MjAKICMgUHJlcGFyZSBhbiBlbXB0eSBub3RlYm9vawog
bm90ZWJvb2tfaWQgPTNEIGllLmdlbmVyYXRlX2hleCg2NCkKQEAgLTc0LDIxICs1MiwxMiBAQAog
ZWxzZToKICAgICBzaHV0aWwuY29weSggaGRhLmZpbGVfbmFtZSwgZW1wdHlfbmJfcGF0aCApCj0y
MAotZG9ja2VyX2NtZCA9M0QgaWUuZG9ja2VyX2NtZChpZS5hdHRyLmlweV92aXpfY29uZmlnLCBQ
T1JULCB0ZW1wX2RpcikKLQotIyBTZXQgb3VyIHByb3RvIHNvIHBhc3N3b3JkcyBkb24ndCBnbyBp
biBjbGVhcgotaWYgU1NMX1VSTFM6Ci0gICAgUFJPVE8gPTNEICJodHRwcyIKLWVsc2U6Ci0gICAg
UFJPVE8gPTNEICJodHRwIgo9MjAKICMgQWNjZXNzIFVSTHMgZm9yIHRoZSBub3RlYm9vayBmcm9t
IHdpdGhpbiBnYWxheHkuCi1pZiBBUEFDSEVfVVJMUzoKLSAgICBub3RlYm9va19hY2Nlc3NfdXJs
ID0zRCAiJXM6Ly8lcy9pcHl0aG9uLyVzL25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9uPQpvdGVi
b29rLmlweW5iIiAlICggUFJPVE8sIEhPU1QsIFBPUlQgKQotICAgIG5vdGVib29rX2xvZ2luX3Vy
bCA9M0QgIiVzOi8vJXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBIT1NULCBQT1I9ClQg
KQotZWxzZToKLSAgICBub3RlYm9va19hY2Nlc3NfdXJsID0zRCAiJXM6Ly8lczolcy9pcHl0aG9u
LyVzL25vdGVib29rcy9pcHl0aG9uX2dhbGF4PQp5X25vdGVib29rLmlweW5iIiAlICggUFJPVE8s
IEhPU1QsIFBPUlQsIFBPUlQgKQotICAgIG5vdGVib29rX2xvZ2luX3VybCA9M0QgIiVzOi8vJXM6
JXMvaXB5dGhvbi8lcy9sb2dpbiIgJSAoIFBST1RPLCBIT1NULCA9ClBPUlQsIFBPUlQgKQorbm90
ZWJvb2tfYWNjZXNzX3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1RPfTovLyR7SE9TVH0v
aXB5dGhvbi8ke1BPUlQ9Cn0vbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5i
JykKK25vdGVib29rX2xvZ2luX3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1RPfTovLyR7
SE9TVH0vaXB5dGhvbi8ke1BPUlR9PQovbG9naW4nKQorCitkb2NrZXJfY21kID0zRCBpZS5kb2Nr
ZXJfY21kKGllLmF0dHIuaXB5X3Zpel9jb25maWcsIFBPUlQsIHRlbXBfZGlyKQogc3VicHJvY2Vz
cy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNEVHJ1ZSkKPTIwCiAlPgpAQCAtMTAzLDEwICs3Miwx
MCBAQAogPGJvZHk+PHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCI+Ci12YXIgcGFzc3dv
cmRfYXV0aCA9M0QgJHsgaWUuamF2YXNjcmlwdF9ib29sZWFuKFBBU1NXT1JEX0FVVEgpIH07Cit2
YXIgcGFzc3dvcmRfYXV0aCA9M0QgJHsgaWUuamF2YXNjcmlwdF9ib29sZWFuKGllLmF0dHIuUEFT
U1dPUkRfQVVUSCkgfTsKIHZhciBhcGFjaGVfdXJscyA9M0QgJHsgaWUuamF2YXNjcmlwdF9ib29s
ZWFuKEFQQUNIRV9VUkxTKSB9OwogdmFyIG5vdGVib29rX2xvZ2luX3VybCA9M0QgJyR7IG5vdGVi
b29rX2xvZ2luX3VybCB9JzsKLXZhciBwYXNzd29yZCA9M0QgJyR7IG5vdGVib29rX3B3IH0nOwor
dmFyIHBhc3N3b3JkID0zRCAnJHsgaWUuYXR0ci5ub3RlYm9va19wdyB9JzsKIHZhciBub3RlYm9v
a19hY2Nlc3NfdXJsID0zRCAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JzsKIHZhciBnYWxheHlf
cm9vdCA9M0QgJyR7IGllLmF0dHIucm9vdCB9JzsKIC8vIExvYWQgbm90ZWJvb2sKCgpodHRwczov
L2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZWVmNWE3MzJjNTA5
LwpDaGFuZ2VzZXQ6ICAgZWVmNWE3MzJjNTA5ClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAg
ICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgTW9yZSBzdGF0aWMg
dmFyaWFibGVzIGdvbmUKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgYWNhMThhYTY3YTdj
OGEzOWIyZjRkODgzOTJlZjQ2NGEzYjk2N2ZmMSAtciBlZWY1YTczMmM1MDkyYTFkMDU3NWM0MD0K
NmRkNjAzNGUxMTI5NmMzYmMgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE2OSwxMCArMTY5LDEwIEBACiA8LyVkZWY+
Cj0yMAo9MjAKLTwlZGVmIG5hbWU9M0QiZG9ja2VyX2NtZChpcHlfdml6X2NvbmZpZywgUE9SVCwg
dGVtcF9kaXIpIj4KKzwlZGVmIG5hbWU9M0QiZG9ja2VyX2NtZCh0ZW1wX2RpcikiPjwlCiAgICAg
cmV0dXJuICclcyBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9p
bXBvcnQvIiAlcycgJT0KIFwKLSAgICAgICAgKGlweV92aXpfY29uZmlnLmdldCgiZG9ja2VyIiwg
ImNvbW1hbmQiKSwgUE9SVCwgdGVtcF9kaXIsIGlweV92aXpfPQpjb25maWcuZ2V0KCJkb2NrZXIi
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9CiAgICAgICAgICAgImltYWdlIikpCisgICAgICAgIChzZWxm
LmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0KCJkb2NrZXIiLCAiY29tbWFuZCIpLCBzZWxmLmF0dHIu
UE9SVD0KLCB0ZW1wX2RpciwKKyAgICAgICAgIHNlbGYuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXQo
ImRvY2tlciIsICJpbWFnZSIpKQogJT48LyVkZWY+CgpkaWZmIC1yIGFjYTE4YWE2N2E3YzhhMzli
MmY0ZDg4MzkyZWY0NjRhM2I5NjdmZjEgLXIgZWVmNWE3MzJjNTA5MmExZDA1NzVjNDA9CjZkZDYw
MzRlMTEyOTZjM2JjIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KQEAgLTI0LDggKzI0LDYgQEAK
IGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgaWUuZ2V0X2dhbGF4eV9wYXN0ZXJfcG9ydChpZS5hdHRy
LmdhbGF4eV9yb290X2RpciwgPQppZS5hdHRyLmdhbGF4eV9jb25maWcpCj0yMAo9MjAKLUFQQUNI
RV9VUkxTID0zRCBpZS5hdHRyLmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAiYXBh
Y2hlX3VybHMiKQotU1NMX1VSTFMgPTNEIGllLmF0dHIuaXB5X3Zpel9jb25maWcuZ2V0Ym9vbGVh
bigibWFpbiIsICJzc2wiKQogUE9SVCA9M0QgaWUucHJveHlfcmVxdWVzdF9wb3J0KCkKIEhPU1Qg
PTNEIHJlcXVlc3QuaG9zdAogIyBTdHJpcCBvdXQgcG9ydCwgd2UganVzdCB3YW50IHRoZSBVUkwg
dGhpcyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZCBhdC4KQEAgLTU3LDcgKzU1LDcgQEAKIG5v
dGVib29rX2FjY2Vzc191cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9UT306Ly8ke0hPU1R9
L2lweXRob24vJHtQT1JUPQp9L25vdGVib29rcy9pcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHlu
YicpCiBub3RlYm9va19sb2dpbl91cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9UT306Ly8k
e0hPU1R9L2lweXRob24vJHtQT1JUfT0KL2xvZ2luJykKPTIwCi1kb2NrZXJfY21kID0zRCBpZS5k
b2NrZXJfY21kKGllLmF0dHIuaXB5X3Zpel9jb25maWcsIFBPUlQsIHRlbXBfZGlyKQorZG9ja2Vy
X2NtZCA9M0QgaWUuZG9ja2VyX2NtZCh0ZW1wX2RpcikKIHN1YnByb2Nlc3MuY2FsbChkb2NrZXJf
Y21kLCBzaGVsbD0zRFRydWUpCj0yMAogJT4KQEAgLTczLDcgKzcxLDcgQEAKPTIwCiA8c2NyaXB0
IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0Ij4KIHZhciBwYXNzd29yZF9hdXRoID0zRCAkeyBpZS5q
YXZhc2NyaXB0X2Jvb2xlYW4oaWUuYXR0ci5QQVNTV09SRF9BVVRIKSB9OwotdmFyIGFwYWNoZV91
cmxzID0zRCAkeyBpZS5qYXZhc2NyaXB0X2Jvb2xlYW4oQVBBQ0hFX1VSTFMpIH07Cit2YXIgYXBh
Y2hlX3VybHMgPTNEICR7IGllLmphdmFzY3JpcHRfYm9vbGVhbihpZS5hdHRyLkFQQUNIRV9VUkxT
KSB9OwogdmFyIG5vdGVib29rX2xvZ2luX3VybCA9M0QgJyR7IG5vdGVib29rX2xvZ2luX3VybCB9
JzsKIHZhciBwYXNzd29yZCA9M0QgJyR7IGllLmF0dHIubm90ZWJvb2tfcHcgfSc7CiB2YXIgbm90
ZWJvb2tfYWNjZXNzX3VybCA9M0QgJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfSc7CgoKaHR0cHM6
Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2E3ODFmZTczMGVi
NC8KQ2hhbmdlc2V0OiAgIGE3ODFmZTczMGViNApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTog
ICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIG1vdmVkIEpTIGlu
dG8gdGVtcGxhdGUKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgZWVmNWE3MzJjNTA5MmEx
ZDA1NzVjNDA2ZGQ2MDM0ZTExMjk2YzNiYyAtciBhNzgxZmU3MzBlYjRjN2I5ZDY5YzI5ND0KMTU1
MzkxM2Y2ZmRlYzA3MGEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE3NiwzICsxNzYsMTEgQEAKICAgICAgICAgIHNl
bGYuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJpbWFnZSIpKQogJT48LyVkZWY+
CisKKworPCVkZWYgbmFtZT0zRCJkZWZhdWx0X2phdmFzY3JpcHRfdmFyaWFibGVzKCkiPgordmFy
IHBhc3N3b3JkX2F1dGggPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5Q
QVNTV09SRF9BVVRIKSA9Cn07Cit2YXIgYXBhY2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlw
dF9ib29sZWFuKHNlbGYuYXR0ci5BUEFDSEVfVVJMUykgfTsKK3ZhciBwYXNzd29yZCA9M0QgJyR7
IHNlbGYuYXR0ci5ub3RlYm9va19wdyB9JzsKK3ZhciBnYWxheHlfcm9vdCA9M0QgJyR7IHNlbGYu
YXR0ci5yb290IH0nOworPC8lZGVmPgoKZGlmZiAtciBlZWY1YTczMmM1MDkyYTFkMDU3NWM0MDZk
ZDYwMzRlMTEyOTZjM2JjIC1yIGE3ODFmZTczMGViNGM3YjlkNjljMjk0PQoxNTUzOTEzZjZmZGVj
MDcwYSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC03MCwxMiArNzAsOSBAQAogPGJvZHk+
PHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCI+Ci12YXIgcGFzc3dvcmRfYXV0aCA9M0Qg
JHsgaWUuamF2YXNjcmlwdF9ib29sZWFuKGllLmF0dHIuUEFTU1dPUkRfQVVUSCkgfTsKLXZhciBh
cGFjaGVfdXJscyA9M0QgJHsgaWUuamF2YXNjcmlwdF9ib29sZWFuKGllLmF0dHIuQVBBQ0hFX1VS
TFMpIH07CiskeyBpZS5kZWZhdWx0X2phdmFzY3JpcHRfdmFyaWFibGVzKCkgfQogdmFyIG5vdGVi
b29rX2xvZ2luX3VybCA9M0QgJyR7IG5vdGVib29rX2xvZ2luX3VybCB9JzsKLXZhciBwYXNzd29y
ZCA9M0QgJyR7IGllLmF0dHIubm90ZWJvb2tfcHcgfSc7CiB2YXIgbm90ZWJvb2tfYWNjZXNzX3Vy
bCA9M0QgJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfSc7Ci12YXIgZ2FsYXh5X3Jvb3QgPTNEICck
eyBpZS5hdHRyLnJvb3QgfSc7CiAvLyBMb2FkIG5vdGVib29rCiBsb2FkX25vdGVib29rKHBhc3N3
b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzcz0K
X3VybCwgYXBhY2hlX3VybHMsIGdhbGF4eV9yb290KTsKIDwvc2NyaXB0PgoKCmh0dHBzOi8vYml0
YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy83YTdiYjJmYTM5NmIvCkNo
YW5nZXNldDogICA3YTdiYjJmYTM5NmIKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAg
ICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBMb2FkIEpTIHdpdGggZGVm
YXVsdCBuYW1lcwpBZmZlY3RlZCAjOiAgNCBmaWxlcwoKZGlmZiAtciBhNzgxZmU3MzBlYjRjN2I5
ZDY5YzI5NDE1NTM5MTNmNmZkZWMwNzBhIC1yIDdhN2JiMmZhMzk2YjNmZjlmOTgwOGMzPQo1M2Q3
NzdmYTFmZjc0NGRkOCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRp
Yy9pcHktZ2FsYXh5LmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vc3RhdGljL2lweS1nYWxheHkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAot
LyoqCi0gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byByZW1vdmUgY29udGVudCBmcm9tIHRoZSBtYWlu
IGFyZWEgYW5kIGFkZCB0aGUgbm90ZT0KYm9vay4KLSAqIE5vdCBpZGVtcG90ZW50Ci0gKi8KLWZ1
bmN0aW9uIGFwcGVuZF9ub3RlYm9vayh1cmwpewotICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7
Ci0gICAgJCgnI21haW4nKS5hcHBlbmQoJzxpZnJhbWUgZnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxl
c3M9M0Qic2VhbWxlc3MiIHN0eT0KbGU9M0Qid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3Zl
cmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBzcmM9M0QiPQonKyB1cmwgKyciPjwvaWZy
YW1lPicKLSAgICApOwotfQotCi0KLWZ1bmN0aW9uIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFzc3dv
cmQpewotICAgIHRvYXN0ci5pbmZvKAotICAgICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24g
ZmFpbGVkLiBZb3UgY2FuIG1hbnVhbGx5IGxvZ2luIHdpdGg6PGJyPiI9CiArIHBhc3N3b3JkICsg
Ijxicj48YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRo
b24vdz0KaWtpL0F1dG9tYXRpYy1BdXRob3JpemF0aW9uLUZhaWxlZCcgdGFyZ2V0PTNEJ19ibGFu
ayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAotICAgICAgICAiUGxlYXNlIGxvZ2luIG1hbnVhbGx5
IiwKLSAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAwLCAndGFw
VG9EaXNtaXNzJzogZmFsc2V9Ci0gICAgKTsKLX0KLQotZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRf
Y29ubmVjdGlvbigpewotICAgIHRvYXN0ci5lcnJvcigKLSAgICAgICAgIkNvdWxkIG5vdCBjb25u
ZWN0IHRvIElQeXRob24gTm90ZWJvb2suIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pPQpzdHJh
dG9yLiA8YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRo
b24vd2lraS9Db3VsZC09Cm5vdC1jb25uZWN0LXRvLUlQeXRob24tTm90ZWJvb2snIHRhcmdldD0z
RCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKLSAgICAiU2VjdXJpdHkgd2FybmluZyIs
Ci0gICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9E
aXNtaXNzJzogdHJ1ZX0KLSAgICApOwotfQotCi1mdW5jdGlvbiBtZXNzYWdlX25vX2F1dGgoKXsK
LSAgICB0b2FzdHIud2FybmluZygKLSAgICAgICAgIklQeXRob24gTm90ZWJvb2sgd2FzIGx1bmNo
ZWQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi4gVGhpcyBpcyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxh
IGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtp
L0k9ClB5dGhvbi1Ob3RlYm9vay13YXMtbHVuY2hlZC13aXRob3V0LWF1dGhlbnRpY2F0aW9uJyB0
YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlID0KZGV0YWlscyAuLi48L2E+IiwKLSAgICAgICAgIlNlY3Vy
aXR5IHdhcm5pbmciLAotICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAy
MDAwMCwgJ3RhcFRvRGlzbWlzcyc6IGZhbHNlfQotICAgICk7Ci19Ci0KLS8qKgotICogSW5pdGlh
bCB2ZXJzaW9uIG9mIGZ1bmN0aW9uIHRvIHRlc3QgYXZhaWxhYmlsaXR5IG9mIFVSTC9yZXNvdXJj
ZQotICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjUzOTAyMDYvMzQ3MzY4Ci0gKi8KLWZ1
bmN0aW9uIHRlc3RfaWVfYXZhaWxhYmlsaXR5KHVybCl7Ci0gICAgaW50ZXJ2YWwgPTNEIHNldElu
dGVydmFsKGZ1bmN0aW9uKCl7Ci0gICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICB0eXBlOiAi
R0VUIiwKLSAgICAgICAgICAgIHVybDogdXJsLAotICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rp
b24oKXsKLSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvL19oYW5kbGVfbm90ZWJvb2tf
bG9hZGluZyhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZWJvPQpva19sb2dpbl91cmwsIG5v
dGVib29rX2FjY2Vzc191cmwsIGFwYWNoZV91cmxzLCBkb2NrZXJfZGVsYXkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICB9LCA1MDApOwotfQotCi0vKioKLSAqIExvYWQgYW4gaW50
ZXJhY3RpdmUgZW52aXJvbm1lbnQgKElFKSBmcm9tIGEgcmVtb3RlIFVSTAotICogQHBhcmFtIHtC
b29sZWFufSBwYXNzd29yZF9hdXRoIFdoZXRoZXIgb3Igbm90IHRoaXMgcmVzb3VyY2UgcmVxdWly
ZXMgcGE9CnNzd29yZCBhdXRoZW50aWNhdGlvbgotICogQHBhcmFtIHtTdHJpbmd9IHBhc3N3b3Jk
OiBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmVtb3RlIHI9CmVzb3VyY2UK
LSAqIEBwYXJhbSB7U3RyaW5nfSBub3RlYm9va19sb2dpbl91cmw6IFVSTCB0aGF0IHNob3VsZCBi
ZSBQT1NUZWQgdG8gZm9yIGxvPQpnaW4KLSAqIEBwYXJhbSB7U3RyaW5nfSBub3RlYm9va19hY2Nl
c3NfdXJsOiB0aGUgVVJMIGVtYmVkZWQgaW4gdGhlIHBhZ2UgYW5kIGxvPQphZGVkCi0gKiBAcGFy
YW0ge0Jvb2xlYW59IGFwYWNoZV91cmxzOiBQcm94eWluZyBpcyBkb25lIG91dHNpZGUgb2YgZ2Fs
YXh5IGluIHRoZT0KIHdlYnNlcnZlcgotICogQHBhcmFtIHtTdHJpbmd9IGdhbGF4eV9yb290OiBy
b290IG9mIHRoZSBnYWxheHkgc2VydmVyLCB1c2VkIGZvciBmaW5kaW49CmcgdGhlIHN0YXRpYyBz
cGlubmVyLmdpZiB0aGF0IHNoaXBzIHdpdGggZ2FsYXh5LgotICoKLSAqIFRPRE86IFRoaXMgZnVu
Y3Rpb24gbmVlZHMgYSBsb3Qgb2Ygd29yayB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYzoKLSAqIFRP
RE86IGV4Y2hhbmdlIGxvZ2luX3VybCwgcGFzc3dvcmQsIHBhc3N3b3JkX2F1dGggZm9yIGEgc2lu
Z2xlIGZ1bmN0aW9uPQogd2hpY2ggZW5jYXBzdWxhdGVzIGFsbCB0aGUgYXV0aGVudGljYXRpb24g
cHJvY2VkdXJlLCBhcyB0aGF0IHdpbGwgZGlmZmVyIGI9CmV0d2VlbiBJRXMuCi0gKi8KLWZ1bmN0
aW9uIGxvYWRfbm90ZWJvb2socGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2lu
X3VybCwgbm90ZWJvPQpva19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5X3Jvb3Qpewot
ICAgICQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICQoJyNtYWluJyku
YXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0zRCInICsgZ2FsYXh5X3Jvb3QgKyAnLz0K
c3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRl
O21hcmdpbjphdXRvO3RvcDowPQo7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7Ij4nKTsKLSAgICAg
ICAgaW50ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAkLmFq
YXgoewotICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAotICAgICAgICAgICAgICAgIHVybDog
bm90ZWJvb2tfYWNjZXNzX3VybCwKLSAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKLSAgICAgICAg
ICAgICAgICAgICAgX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKHBhc3N3b3JkX2F1dGgsIHBhc3N3
b3JkLCBub3RlPQpib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3VybCwgYXBhY2hlX3Vy
bHMpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9u
KCl7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTb21lIGVycm9yIik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sIDUwMCk7Ci0gICAgfSk7
Ci19Ci0KLS8qKgotICogSW50ZXJuYWwgZnVuY3Rpb24KLSAqLwotZnVuY3Rpb24gX2hhbmRsZV9u
b3RlYm9va19sb2FkaW5nKHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl89
CnVybCwgbm90ZWJvb2tfYWNjZXNzX3VybCwgYXBhY2hlX3VybHMpewotICAgIGlmICggcGFzc3dv
cmRfYXV0aCApIHsKLSAgICAgICAgLy8gTWFrZSBhbiBBSkFYIFBPU1QKLSAgICAgICAgJC5hamF4
KHsKLSAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKLSAgICAgICAgICAgIC8vIHRvIHRoZSBMb2dp
biBVUkwKLSAgICAgICAgICAgIHVybDogbm90ZWJvb2tfbG9naW5fdXJsLAotICAgICAgICAgICAg
Ly8gV2l0aCBvdXIgcGFzc3dvcmQKLSAgICAgICAgICAgIGRhdGE6IHsKLSAgICAgICAgICAgICAg
ICAncGFzc3dvcmQnOiBwYXNzd29yZAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHhockZp
ZWxkczogewotICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZQotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUgbm90
ZWJvb2sKLSAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kX25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOwotICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7Ci0gICAgICAg
ICAgICAgICAgaWYocGFzc3dvcmRfYXV0aCAmJiAhYXBhY2hlX3VybHMpewotICAgICAgICAgICAg
ICAgICAgICAvLyBGYWlsdXJlIGhhcHBlbnMgZHVlIHRvIENPUlMKLSAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCk7Ci0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKLSAgICAgICAgICAgICAgICB9ZWxz
ZXsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRfY29ubmVjdGlvbigpOwotICAg
ICAgICAgICAgICAgICAgICAvLyBEbyB3ZSB3YW50IHRvIHRyeSBhbmQgbG9hZCB0aGUgbm90ZWJv
b2sgYW55d2F5PyBKdXM9CnQgaW4gY2FzZT8KLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25v
dGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvLyBOb3QgdXNp
bmcgcGFzc3dvcmQgYXV0aCwganVzdCBlbWJlZCBpdCB0byBhdm9pZCBjb250ZW50LW9yaWdpbiA9
Cmlzc3Vlcy4KLSAgICAgICAgbWVzc2FnZV9ub19hdXRoKCk7Ci0gICAgICAgIGFwcGVuZF9ub3Rl
Ym9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKLSAgICB9Ci19CgpkaWZmIC1yIGE3ODFmZTczMGVi
NGM3YjlkNjljMjk0MTU1MzkxM2Y2ZmRlYzA3MGEgLXIgN2E3YmIyZmEzOTZiM2ZmOWY5ODA4YzM9
CjUzZDc3N2ZhMWZmNzQ0ZGQ4IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
c3RhdGljL2lweXRob24uanMKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHl0aG9uLmpzCkBAIC0wLDAgKzEsMTI0IEBACisv
KioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJlbW92ZSBjb250ZW50IGZyb20gdGhlIG1haW4g
YXJlYSBhbmQgYWRkIHRoZSBub3RlPQpib29rLgorICogTm90IGlkZW1wb3RlbnQKKyAqLworZnVu
Y3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7CisgICAgJCgnI3NwaW5uZXInKS5yZW1vdmUoKTsK
KyAgICAkKCcjbWFpbicpLmFwcGVuZCgnPGlmcmFtZSBmcmFtZUJvcmRlcj0zRCIwIiBzZWFtbGVz
cz0zRCJzZWFtbGVzcyIgc3R5PQpsZT0zRCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVy
ZmxvdzpoaWRkZW47IiBzY3JvbGxpbmc9M0Qibm8iIHNyYz0zRCI9CicrIHVybCArJyI+PC9pZnJh
bWU+JworICAgICk7Cit9CisKKworZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29y
ZCl7CisgICAgdG9hc3RyLmluZm8oCisgICAgICAgICJBdXRvbWF0aWMgYXV0aG9yaXphdGlvbiBm
YWlsZWQuIFlvdSBjYW4gbWFudWFsbHkgbG9naW4gd2l0aDo8YnI+Ij0KICsgcGFzc3dvcmQgKyAi
PGJyPjxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhv
bi93PQppa2kvQXV0b21hdGljLUF1dGhvcml6YXRpb24tRmFpbGVkJyB0YXJnZXQ9M0QnX2JsYW5r
Jz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCisgICAgICAgICJQbGVhc2UgbG9naW4gbWFudWFsbHki
LAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAxMDAwMDAsICd0YXBU
b0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworfQorCitmdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9j
b25uZWN0aW9uKCl7CisgICAgdG9hc3RyLmVycm9yKAorICAgICAgICAiQ291bGQgbm90IGNvbm5l
Y3QgdG8gSVB5dGhvbiBOb3RlYm9vay4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmk9CnN0cmF0
b3IuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhv
bi93aWtpL0NvdWxkLT0Kbm90LWNvbm5lY3QtdG8tSVB5dGhvbi1Ob3RlYm9vaycgdGFyZ2V0PTNE
J19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAorICAgICJTZWN1cml0eSB3YXJuaW5nIiwK
KyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rp
c21pc3MnOiB0cnVlfQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2Vfbm9fYXV0aCgpewor
ICAgIHRvYXN0ci53YXJuaW5nKAorICAgICAgICAiSVB5dGhvbiBOb3RlYm9vayB3YXMgbHVuY2hl
ZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0eSBpc3N1ZS4gPGEg
aHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL3dpa2kv
ST0KUHl0aG9uLU5vdGVib29rLXdhcy1sdW5jaGVkLXdpdGhvdXQtYXV0aGVudGljYXRpb24nIHRh
cmdldD0zRCdfYmxhbmsnPk1vcmUgPQpkZXRhaWxzIC4uLjwvYT4iLAorICAgICAgICAiU2VjdXJp
dHkgd2FybmluZyIsCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIw
MDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9CisgICAgKTsKK30KKworLyoqCisgKiBJbml0aWFs
IHZlcnNpb24gb2YgZnVuY3Rpb24gdG8gdGVzdCBhdmFpbGFiaWxpdHkgb2YgVVJML3Jlc291cmNl
CisgKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8yNTM5MDIwNi8zNDczNjgKKyAqLworZnVu
Y3Rpb24gdGVzdF9pZV9hdmFpbGFiaWxpdHkodXJsKXsKKyAgICBpbnRlcnZhbCA9M0Qgc2V0SW50
ZXJ2YWwoZnVuY3Rpb24oKXsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHR5cGU6ICJH
RVQiLAorICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlv
bigpeworICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIC8vX2hhbmRsZV9ub3RlYm9va19s
b2FkaW5nKHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm89Cm9rX2xvZ2luX3VybCwgbm90
ZWJvb2tfYWNjZXNzX3VybCwgYXBhY2hlX3VybHMsIGRvY2tlcl9kZWxheSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgIH0sIDUwMCk7Cit9CisKKy8qKgorICogTG9hZCBhbiBpbnRl
cmFjdGl2ZSBlbnZpcm9ubWVudCAoSUUpIGZyb20gYSByZW1vdGUgVVJMCisgKiBAcGFyYW0ge0Jv
b2xlYW59IHBhc3N3b3JkX2F1dGggV2hldGhlciBvciBub3QgdGhpcyByZXNvdXJjZSByZXF1aXJl
cyBwYT0Kc3N3b3JkIGF1dGhlbnRpY2F0aW9uCisgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQ6
IHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSByZW1vdGUgcj0KZXNvdXJjZQor
ICogQHBhcmFtIHtTdHJpbmd9IG5vdGVib29rX2xvZ2luX3VybDogVVJMIHRoYXQgc2hvdWxkIGJl
IFBPU1RlZCB0byBmb3IgbG89CmdpbgorICogQHBhcmFtIHtTdHJpbmd9IG5vdGVib29rX2FjY2Vz
c191cmw6IHRoZSBVUkwgZW1iZWRlZCBpbiB0aGUgcGFnZSBhbmQgbG89CmFkZWQKKyAqIEBwYXJh
bSB7Qm9vbGVhbn0gYXBhY2hlX3VybHM6IFByb3h5aW5nIGlzIGRvbmUgb3V0c2lkZSBvZiBnYWxh
eHkgaW4gdGhlPQogd2Vic2VydmVyCisgKiBAcGFyYW0ge1N0cmluZ30gZ2FsYXh5X3Jvb3Q6IHJv
b3Qgb2YgdGhlIGdhbGF4eSBzZXJ2ZXIsIHVzZWQgZm9yIGZpbmRpbj0KZyB0aGUgc3RhdGljIHNw
aW5uZXIuZ2lmIHRoYXQgc2hpcHMgd2l0aCBnYWxheHkuCisgKgorICogVE9ETzogVGhpcyBmdW5j
dGlvbiBuZWVkcyBhIGxvdCBvZiB3b3JrIHRvIG1ha2UgaXQgbW9yZSBnZW5lcmljOgorICogVE9E
TzogZXhjaGFuZ2UgbG9naW5fdXJsLCBwYXNzd29yZCwgcGFzc3dvcmRfYXV0aCBmb3IgYSBzaW5n
bGUgZnVuY3Rpb249CiB3aGljaCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBhdXRoZW50aWNhdGlvbiBw
cm9jZWR1cmUsIGFzIHRoYXQgd2lsbCBkaWZmZXIgYj0KZXR3ZWVuIElFcy4KKyAqLworZnVuY3Rp
b24gbG9hZF9ub3RlYm9vayhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5f
dXJsLCBub3RlYm89Cm9rX2FjY2Vzc191cmwsIGFwYWNoZV91cmxzLCBnYWxheHlfcm9vdCl7Cisg
ICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgJCgnI21haW4nKS5h
cHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlfcm9vdCArICcvPQpz
dGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRpb246YWJzb2x1dGU7
bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsiPicpOworICAgICAg
ICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICQuYWph
eCh7CisgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgICAgdXJsOiBu
b3RlYm9va19hY2Nlc3NfdXJsLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7
CisgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAg
ICAgICAgICAgICBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmRfYXV0aCwgcGFzc3dv
cmQsIG5vdGU9CmJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJs
cyk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24o
KXsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlNvbWUgZXJyb3IiKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwgNTAwKTsKKyAgICB9KTsK
K30KKworLyoqCisgKiBJbnRlcm5hbCBmdW5jdGlvbgorICovCitmdW5jdGlvbiBfaGFuZGxlX25v
dGVib29rX2xvYWRpbmcocGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luXz0K
dXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscyl7CisgICAgaWYgKCBwYXNzd29y
ZF9hdXRoICkgeworICAgICAgICAvLyBNYWtlIGFuIEFKQVggUE9TVAorICAgICAgICAkLmFqYXgo
eworICAgICAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgICAgLy8gdG8gdGhlIExvZ2lu
IFVSTAorICAgICAgICAgICAgdXJsOiBub3RlYm9va19sb2dpbl91cmwsCisgICAgICAgICAgICAv
LyBXaXRoIG91ciBwYXNzd29yZAorICAgICAgICAgICAgZGF0YTogeworICAgICAgICAgICAgICAg
ICdwYXNzd29yZCc6IHBhc3N3b3JkCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeGhyRmll
bGRzOiB7CisgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgLy8gSWYgdGhhdCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBub3Rl
Ym9vaworICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBh
cHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKKyAgICAgICAg
ICAgICAgICBpZihwYXNzd29yZF9hdXRoICYmICFhcGFjaGVfdXJscyl7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZhaWx1cmUgaGFwcGVucyBkdWUgdG8gQ09SUworICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlX2ZhaWxlZF9hdXRoKHBhc3N3b3JkKTsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kX25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgICAgICAgICAgICAgIH1lbHNl
eworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2ZhaWxlZF9jb25uZWN0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIERvIHdlIHdhbnQgdG8gdHJ5IGFuZCBsb2FkIHRoZSBub3RlYm9v
ayBhbnl3YXk/IEp1cz0KdCBpbiBjYXNlPworICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbm90
ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIE5vdCB1c2lu
ZyBwYXNzd29yZCBhdXRoLCBqdXN0IGVtYmVkIGl0IHRvIGF2b2lkIGNvbnRlbnQtb3JpZ2luID0K
aXNzdWVzLgorICAgICAgICBtZXNzYWdlX25vX2F1dGgoKTsKKyAgICAgICAgYXBwZW5kX25vdGVi
b29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgIH0KK30KCmRpZmYgLXIgYTc4MWZlNzMwZWI0
YzdiOWQ2OWMyOTQxNTUzOTEzZjZmZGVjMDcwYSAtciA3YTdiYjJmYTM5NmIzZmY5Zjk4MDhjMz0K
NTNkNzc3ZmExZmY3NDRkZDggY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0
aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25z
L2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE4NCwzICsxODQsMTIgQEAKIHZhciBwYXNz
d29yZCA9M0QgJyR7IHNlbGYuYXR0ci5ub3RlYm9va19wdyB9JzsKIHZhciBnYWxheHlfcm9vdCA9
M0QgJyR7IHNlbGYuYXR0ci5yb290IH0nOwogPC8lZGVmPgorCisKKzwlZGVmIG5hbWU9M0QibG9h
ZF9kZWZhdWx0X2pzKCkiPgorJHtoLmNzcyggJ2Jhc2UnICkgfQorJHtoLmpzKCAnbGlicy9qcXVl
cnkvanF1ZXJ5JyApIH0KKyR7aC5qcyggJ2xpYnMvdG9hc3RyJyApIH0KKyR7aC5qYXZhc2NyaXB0
X2xpbmsoIGllLmF0dHIuYXBwX3Jvb3QgKyAnaWUuanMnICl9Ciske2guamF2YXNjcmlwdF9saW5r
KCBpZS5hdHRyLmFwcF9yb290ICsgaWUuYXR0ci52aXpfbmFtZSArICcuanMnICl9Cis8LyVkZWY+
CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzUw
ODdkNzM2YzI4My8KQ2hhbmdlc2V0OiAgIDUwODdkNzM2YzI4MwpVc2VyOiAgICAgICAgZXJhc2No
ZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFJl
bW92ZWQgbW9yZSB1bnVzZWQgY29kZQpBZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciA3YTdi
YjJmYTM5NmIzZmY5Zjk4MDhjMzUzZDc3N2ZhMWZmNzQ0ZGQ4IC1yIDUwODdkNzM2YzI4MzM5ZTlj
YWRkYmJhPQo0YzdmYmE1ZmNiYzFkOWQxMSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwpAQCAtNDcsNyArNDcsMTIgQEAKICAg
ICBzZWxmLmF0dHIuQVBBQ0hFX1VSTFMgPTNEIHNlbGYuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXRi
b29sZWFuKCJtYWluIiwgPQoiYXBhY2hlX3VybHMiKQogICAgIHNlbGYuYXR0ci5TU0xfVVJMUyA9
M0Qgc2VsZi5hdHRyLmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAic3M9CmwiKQog
ICAgIHNlbGYuYXR0ci5QT1JUID0zRCBzZWxmLnByb3h5X3JlcXVlc3RfcG9ydCgpCi0gICAgc2Vs
Zi5hdHRyLkhPU1QgPTNEIHNlbGYuYXR0ci5yZXF1ZXN0Lmhvc3QKKworICAgIEhPU1QgPTNEIHNl
bGYuYXR0ci5yZXF1ZXN0Lmhvc3QKKyAgICAjIFN0cmlwIG91dCBwb3J0LCB3ZSBqdXN0IHdhbnQg
dGhlIFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkPQogYXQuCisgICAgaWYgJzon
IGluIEhPU1Q6CisgICAgICAgIEhPU1QgPTNEIEhPU1RbMDpIT1NULmluZGV4KCc6JyldCisgICAg
c2VsZi5hdHRyLkhPU1QgPTNEIEhPU1QKICU+PC8lZGVmPgo9MjAKCmRpZmYgLXIgN2E3YmIyZmEz
OTZiM2ZmOWY5ODA4YzM1M2Q3NzdmYTFmZjc0NGRkOCAtciA1MDg3ZDczNmMyODMzOWU5Y2FkZGJi
YT0KNGM3ZmJhNWZjYmMxZDlkMTEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMjQsMTIg
KzI0LDYgQEAKIGdhbGF4eV9wYXN0ZXJfcG9ydCA9M0QgaWUuZ2V0X2dhbGF4eV9wYXN0ZXJfcG9y
dChpZS5hdHRyLmdhbGF4eV9yb290X2RpciwgPQppZS5hdHRyLmdhbGF4eV9jb25maWcpCj0yMAo9
MjAKLVBPUlQgPTNEIGllLnByb3h5X3JlcXVlc3RfcG9ydCgpCi1IT1NUID0zRCByZXF1ZXN0Lmhv
c3QKLSMgU3RyaXAgb3V0IHBvcnQsIHdlIGp1c3Qgd2FudCB0aGUgVVJMIHRoaXMgZ2FsYXh5IHNl
cnZlciB3YXMgYWNjZXNzZWQgYXQuCi1pZiAnOicgaW4gSE9TVDoKLSAgICBIT1NUID0zRCBIT1NU
WzA6SE9TVC5pbmRleCgnOicpXQotCiB0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKCB0ZW1w
ZmlsZS5ta2R0ZW1wKCkgKQogaWUuYXR0ci5hcGlfa2V5ID0zRCBnZXRfYXBpX2tleSgpCj0yMApA
QCAtNjEsMTEgKzU1LDcgQEAKICU+PGh0bWw+PGhlYWQ+Ci0ke2guY3NzKCAnYmFzZScgKSB9Ci0k
e2guanMoICdsaWJzL2pxdWVyeS9qcXVlcnknICkgfQotJHtoLmpzKCAnbGlicy90b2FzdHInICkg
fQotIyMgTG9hZCBJUHl0aG9uLUdhbGF4eSBjb25uZWN0b3IKLSR7aC5qYXZhc2NyaXB0X2xpbmso
IGllLmF0dHIuYXBwX3Jvb3QgKyAnaXB5LWdhbGF4eS5qcycgKX0KKyR7IGllLmxvYWRfZGVmYXVs
dF9qcygpIH0KIDwvaGVhZD48Ym9keT4KPTIwCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4
eS9nYWxheHktY2VudHJhbC9jb21taXRzL2RhNjQxYmNiMjdjYy8KQ2hhbmdlc2V0OiAgIGRhNjQx
YmNiMjdjYwpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6
Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEJ1Z2ZpeCBhbmQgcmVtb3ZlIG5vIGxvbmdlciB1c2Vk
IGltcG9ydHMKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgNTA4N2Q3MzZjMjgzMzllOWNh
ZGRiYmE0YzdmYmE1ZmNiYzFkOWQxMSAtciBkYTY0MWJjYjI3Y2MzOTUxNDE0MGE0Nz0KYTZmZTUy
ZGVhN2M3MThiMjEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE5NSw2ICsxOTUsNiBAQAogJHtoLmNzcyggJ2Jhc2Un
ICkgfQogJHtoLmpzKCAnbGlicy9qcXVlcnkvanF1ZXJ5JyApIH0KICR7aC5qcyggJ2xpYnMvdG9h
c3RyJyApIH0KLSR7aC5qYXZhc2NyaXB0X2xpbmsoIGllLmF0dHIuYXBwX3Jvb3QgKyAnaWUuanMn
ICl9Ci0ke2guamF2YXNjcmlwdF9saW5rKCBpZS5hdHRyLmFwcF9yb290ICsgaWUuYXR0ci52aXpf
bmFtZSArICcuanMnICl9Ciske2guamF2YXNjcmlwdF9saW5rKCBzZWxmLmF0dHIuYXBwX3Jvb3Qg
KyAnaWUuanMnICl9Ciske2guamF2YXNjcmlwdF9saW5rKCBzZWxmLmF0dHIuYXBwX3Jvb3QgKyBz
ZWxmLmF0dHIudml6X2lkICsgJy5qcycgKX0KIDwvJWRlZj4KCmRpZmYgLXIgNTA4N2Q3MzZjMjgz
MzllOWNhZGRiYmE0YzdmYmE1ZmNiYzFkOWQxMSAtciBkYTY0MWJjYjI3Y2MzOTUxNDE0MGE0Nz0K
YTZmZTUyZGVhN2M3MThiMjEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMSwxNiArMSwx
NiBAQAogPCVuYW1lc3BhY2UgZmlsZT0zRCJpZS5tYWtvIiBuYW1lPTNEImllIi8+PCUKIGltcG9y
dCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCB5YW1sCi1pbXBvcnQgc2hsZXgK
LWltcG9ydCByYW5kb20KKyNpbXBvcnQgc3lzCisjaW1wb3J0IHRpbWUKKyNpbXBvcnQgeWFtbAor
I2ltcG9ydCBzaGxleAorI2ltcG9ydCByYW5kb20KIGltcG9ydCBzaHV0aWwKLWltcG9ydCBoYXNo
bGliCisjaW1wb3J0IGhhc2hsaWIKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHN1YnByb2Nlc3MK
LWltcG9ydCBDb25maWdQYXJzZXIKKyNpbXBvcnQgQ29uZmlnUGFyc2VyCj0yMAogaWUuc2V0X2lk
KCJpcHl0aG9uIikKIGllLnJlZ2lzdGVyX2dhbGF4eV9vYmplY3RzKHRyYW5zLCBoLCByZXNwb25z
ZSwgcGx1Z2luX3BhdGgsIHJlcXVlc3QpCkBAIC0yMSwxNSArMjEsMTQgQEAKICAgICAncGFzc3dv
cmRfYXV0aCc6IEZhbHNlLAogICAgICdzc2wnOiBGYWxzZX0pCj0yMAotZ2FsYXh5X3Bhc3Rlcl9w
b3J0ID0zRCBpZS5nZXRfZ2FsYXh5X3Bhc3Rlcl9wb3J0KGllLmF0dHIuZ2FsYXh5X3Jvb3RfZGly
LCA9CmllLmF0dHIuZ2FsYXh5X2NvbmZpZykKLQotCisjIENyZWF0ZSB0ZW1wZGlyIGluIGdhbGF4
eQogdGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkKKyMg
U2V0IHVzZXIncyBBUEkga2V5CiBpZS5hdHRyLmFwaV9rZXkgPTNEIGdldF9hcGlfa2V5KCkKLQog
IyBXcml0ZSBvdXQgY29uZiBmaWxlLi4ubmVlZHMgd29yawogaWUud3JpdGVfY29uZl9maWxlKHRl
bXBfZGlyKQo9MjAKKyMjIElQeXRob24gU3BlY2lmaWMKPTIwCiAjIFByZXBhcmUgYW4gZW1wdHkg
bm90ZWJvb2sKIG5vdGVib29rX2lkID0zRCBpZS5nZW5lcmF0ZV9oZXgoNjQpCkBAIC00NSwxMyAr
NDQsMTQgQEAKICAgICBzaHV0aWwuY29weSggaGRhLmZpbGVfbmFtZSwgZW1wdHlfbmJfcGF0aCAp
Cj0yMAo9MjAKKyMjIEdlbmVyYWwgSUUgc3BlY2lmaWMKKwogIyBBY2Nlc3MgVVJMcyBmb3IgdGhl
IG5vdGVib29rIGZyb20gd2l0aGluIGdhbGF4eS4KIG5vdGVib29rX2FjY2Vzc191cmwgPTNEIGll
LnVybF90ZW1wbGF0ZSgnJHtQUk9UT306Ly8ke0hPU1R9L2lweXRob24vJHtQT1JUPQp9L25vdGVi
b29rcy9pcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpCiBub3RlYm9va19sb2dpbl91cmwg
PTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9UT306Ly8ke0hPU1R9L2lweXRob24vJHtQT1JUfT0K
L2xvZ2luJykKPTIwCiBkb2NrZXJfY21kID0zRCBpZS5kb2NrZXJfY21kKHRlbXBfZGlyKQogc3Vi
cHJvY2Vzcy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNEVHJ1ZSkKLQogJT48aHRtbD48aGVhZD4K
CgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvOGUz
MTljMDkyNWUyLwpDaGFuZ2VzZXQ6ICAgOGUzMTljMDkyNWUyClVzZXI6ICAgICAgICBlcmFzY2hl
MgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgUmVt
b3ZlZCAnZ2FsYXh5IGRlZmF1bHRzJwpBZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciBkYTY0
MWJjYjI3Y2MzOTUxNDE0MGE0N2E2ZmU1MmRlYTdjNzE4YjIxIC1yIDhlMzE5YzA5MjVlMmE0OGI0
ODkwMjA0PQo3NmZmNjk4ZmJhMTM0OTE2MyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwpAQCAtMTUsMTIgKzE1LDEwIEBACj0y
MAogPCVkZWYgbmFtZT0zRCJzZXRfaWQobmFtZSkiPjwlCisgICAgIiIiCisgICAgICAgIElFcyBt
dXN0IHJlZ2lzdGVyIHRoZWlyIG5hbWUsIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNvbnN0cnVjdGlu
ZyBzdD0KcmluZ3MKKyAgICAiIiIKICAgICBzZWxmLmF0dHIudml6X2lkID0zRCBuYW1lCi0lPgot
PC8lZGVmPgotCi08JWRlZiBuYW1lPTNEInJlZ2lzdGVyX2dhbGF4eV9vYmplY3RzKHRyYW5zLCBo
LCByZXNwb25zZSwgcGx1Z2luX3BhdGgsIHJlcT0KdWVzdCkiPgotPCUKICAgICBzZWxmLmF0dHIu
dHJhbnMgPTNEIHRyYW5zCiAgICAgc2VsZi5hdHRyLmhpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3Vy
aXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCApCiAgICAgc2VsZi5hdHRyLmggPTNEIGgK
CmRpZmYgLXIgZGE2NDFiY2IyN2NjMzk1MTQxNDBhNDdhNmZlNTJkZWE3YzcxOGIyMSAtciA4ZTMx
OWMwOTI1ZTJhNDhiNDg5MDIwND0KNzZmZjY5OGZiYTEzNDkxNjMgY29uZmlnL3BsdWdpbnMvdmlz
dWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisr
KyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRo
b24ubWFrbwpAQCAtMSwxOSArMSwxMyBAQAogPCVuYW1lc3BhY2UgZmlsZT0zRCJpZS5tYWtvIiBu
YW1lPTNEImllIi8+PCUKIGltcG9ydCBvcwotI2ltcG9ydCBzeXMKLSNpbXBvcnQgdGltZQotI2lt
cG9ydCB5YW1sCi0jaW1wb3J0IHNobGV4Ci0jaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNodXRpbAot
I2ltcG9ydCBoYXNobGliCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCBzdWJwcm9jZXNzCi0jaW1w
b3J0IENvbmZpZ1BhcnNlcgo9MjAKKyMgU2V0cyBJRCBhbmQgc2V0cyB1cCBhIGxvdCBvZiBvdGhl
ciB2YXJpYWJsZXMKIGllLnNldF9pZCgiaXB5dGhvbiIpCi1pZS5yZWdpc3Rlcl9nYWxheHlfb2Jq
ZWN0cyh0cmFucywgaCwgcmVzcG9uc2UsIHBsdWdpbl9wYXRoLCByZXF1ZXN0KQorCiBpZS5yZWdp
c3Rlcl9kZWZhdWx0cyh7CiAgICAgJ2FwYWNoZV91cmxzJzogRmFsc2UsCiAgICAgJ2NvbW1hbmQn
OiAnZG9ja2VyJywKQEAgLTI5LDcgKzIzLDYgQEAKIGllLndyaXRlX2NvbmZfZmlsZSh0ZW1wX2Rp
cikKPTIwCiAjIyBJUHl0aG9uIFNwZWNpZmljCi0KICMgUHJlcGFyZSBhbiBlbXB0eSBub3RlYm9v
awogbm90ZWJvb2tfaWQgPTNEIGllLmdlbmVyYXRlX2hleCg2NCkKIHdpdGggb3Blbiggb3MucGF0
aC5qb2luKCBpZS5hdHRyLm91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9vay5pcHluYicgKSwgJ3In
PQopIGFzIG5iX2hhbmRsZToKQEAgLTQ1LDcgKzM4LDYgQEAKPTIwCj0yMAogIyMgR2VuZXJhbCBJ
RSBzcGVjaWZpYwotCiAjIEFjY2VzcyBVUkxzIGZvciB0aGUgbm90ZWJvb2sgZnJvbSB3aXRoaW4g
Z2FsYXh5Lgogbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1RP
fTovLyR7SE9TVH0vaXB5dGhvbi8ke1BPUlQ9Cn0vbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25v
dGVib29rLmlweW5iJykKIG5vdGVib29rX2xvZ2luX3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCck
e1BST1RPfTovLyR7SE9TVH0vaXB5dGhvbi8ke1BPUlR9PQovbG9naW4nKQpAQCAtNjYsOSArNTgs
NyBAQAogLy8gTG9hZCBub3RlYm9vawogbG9hZF9ub3RlYm9vayhwYXNzd29yZF9hdXRoLCBwYXNz
d29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3M9Cl91cmwsIGFwYWNoZV91
cmxzLCBnYWxheHlfcm9vdCk7CiA8L3NjcmlwdD4KLQogPGRpdiBpZD0zRCJtYWluIiB3aWR0aD0z
RCIxMDAlIiBoZWlnaHQ9M0QiMTAwJSI+PC9kaXY+Ci0KIDwvYm9keT48L2h0bWw+CgoKaHR0cHM6
Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzJlZGI2MWU0YzQ4
Zi8KQ2hhbmdlc2V0OiAgIDJlZGI2MWU0YzQ4ZgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTog
ICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFJlZmFjdG9yZWQg
bW9yZSB2YXJpYWJsZXMgb3V0CkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1yIDhlMzE5YzA5
MjVlMmE0OGI0ODkwMjA0NzZmZjY5OGZiYTEzNDkxNjMgLXIgMmVkYjYxZTRjNDhmYTQ4OGQ1ZDZl
Yjc9CjBiMmE1MjNlOWZiM2FmYjJlIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vdGVtcGxhdGVzL2llLm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCkBAIC0xNywzNiArMTcsMjkgQEAKIDwlCiAg
ICAgIiIiCiAgICAgICAgIElFcyBtdXN0IHJlZ2lzdGVyIHRoZWlyIG5hbWUsIHNvIGl0IGNhbiBi
ZSB1c2VkIGluIGNvbnN0cnVjdGluZyBzdD0KcmluZ3MKKworICAgICAgICBBZGRpdGlvbmFsbHkg
dGhpcyBtZXRob2Qgc3RvcmVzIGxvdHMgb2YgY29uZmlnIG9wdGlvbnMgd2Ugd2FudCB0byA9CmFj
Y2VzcyBlbHNld2hlcmUuIFRoaXMKKyAgICAgICAgc2hvdWxkIGJlIHJlZmFjdG9yZWQKICAgICAi
IiIKICAgICBzZWxmLmF0dHIudml6X2lkID0zRCBuYW1lCi0gICAgc2VsZi5hdHRyLnRyYW5zID0z
RCB0cmFucwogICAgIHNlbGYuYXR0ci5oaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNv
ZGVfaWQoIHRyYW5zLmhpc3RvcnkuaWQgKQotICAgIHNlbGYuYXR0ci5oID0zRCBoCi0gICAgc2Vs
Zi5hdHRyLnBsdWdpbl9wYXRoID0zRCBwbHVnaW5fcGF0aAotICAgIHNlbGYuYXR0ci5yZXNwb25z
ZSA9M0QgcmVzcG9uc2UKICAgICBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZyA9M0QgdHJhbnMuYXBw
LmNvbmZpZwogICAgIHNlbGYuYXR0ci5nYWxheHlfcm9vdF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0
aChzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy49CnJvb3QpCiAgICAgc2VsZi5hdHRyLnJvb3QgPTNE
IGgudXJsX2ZvcigiLyIpCiAgICAgc2VsZi5hdHRyLmFwcF9yb290ID0zRCBzZWxmLmF0dHIucm9v
dCArICJwbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRobz0Kbi9zdGF0aWMvIgotICAgIHNlbGYu
YXR0ci5yZXF1ZXN0ID0zRCByZXF1ZXN0Ci0lPgotPC8lZGVmPgo9MjAKLTwlZGVmIG5hbWU9M0Qi
cmVnaXN0ZXJfZGVmYXVsdHMoZGVmYXVsdF9kaWN0KSI+Ci08JQogICAgICMgU3RvcmUgb3VyIHRl
bXBsYXRlIGFuZCBjb25maWd1cmF0aW9uIHBhdGgKLSAgICBzZWxmLmF0dHIub3VyX2NvbmZpZ19k
aXIgPTNEIG9zLnBhdGguam9pbihzZWxmLmF0dHIucGx1Z2luX3BhdGgsICJjb25mPQppZyIpCi0g
ICAgc2VsZi5hdHRyLm91cl90ZW1wbGF0ZV9kaXIgPTNEIG9zLnBhdGguam9pbihzZWxmLmF0dHIu
cGx1Z2luX3BhdGgsICJ0ZT0KbXBsYXRlcyIpCi0gICAgaXB5X3Zpel9jb25maWcgPTNEIENvbmZp
Z1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKGRlZmF1bHRfZGljdCkKLSAgICBpcHlfdml6X2NvbmZp
Zy5yZWFkKCBvcy5wYXRoLmpvaW4oIHNlbGYuYXR0ci5vdXJfY29uZmlnX2RpciwgImlweXRob24u
PQpjb25mIiApICkKLSAgICBzZWxmLmF0dHIuaXB5X3Zpel9jb25maWcgPTNEIGlweV92aXpfY29u
ZmlnCisgICAgc2VsZi5hdHRyLm91cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2lu
X3BhdGgsICJjb25maWciKQorICAgIHNlbGYuYXR0ci5vdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5w
YXRoLmpvaW4ocGx1Z2luX3BhdGgsICJ0ZW1wbGF0ZXMiKQorICAgIHNlbGYuYXR0ci52aXpfY29u
ZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcihkZWZhdWx0X2RpY3QpCisgICAg
c2VsZi5hdHRyLnZpel9jb25maWcucmVhZCggb3MucGF0aC5qb2luKCBzZWxmLmF0dHIub3VyX2Nv
bmZpZ19kaXIsICJpcD0KeXRob24uY29uZiIgKSApCiAgICAgIyBTdG9yZSBzb21lIHZhcmlhYmxl
cyB3ZSB3YW50IGJ5IGRlZmF1bHQKLSAgICBzZWxmLmF0dHIuUEFTU1dPUkRfQVVUSCA9M0Qgc2Vs
Zi5hdHRyLmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iPQosICJwYXNzd29yZF9hdXRo
IikKLSAgICBzZWxmLmF0dHIuQVBBQ0hFX1VSTFMgPTNEIHNlbGYuYXR0ci5pcHlfdml6X2NvbmZp
Zy5nZXRib29sZWFuKCJtYWluIiwgPQoiYXBhY2hlX3VybHMiKQotICAgIHNlbGYuYXR0ci5TU0xf
VVJMUyA9M0Qgc2VsZi5hdHRyLmlweV92aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAic3M9
CmwiKQorICAgIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIID0zRCBzZWxmLmF0dHIudml6X2NvbmZp
Zy5nZXRib29sZWFuKCJtYWluIiwgInA9CmFzc3dvcmRfYXV0aCIpCisgICAgc2VsZi5hdHRyLkFQ
QUNIRV9VUkxTID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgImFw
YT0KY2hlX3VybHMiKQorICAgIHNlbGYuYXR0ci5TU0xfVVJMUyA9M0Qgc2VsZi5hdHRyLnZpel9j
b25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKQogICAgIHNlbGYuYXR0ci5QT1JUID0zRCBz
ZWxmLnByb3h5X3JlcXVlc3RfcG9ydCgpCj0yMAotICAgIEhPU1QgPTNEIHNlbGYuYXR0ci5yZXF1
ZXN0Lmhvc3QKKyAgICBIT1NUID0zRCByZXF1ZXN0Lmhvc3QKICAgICAjIFN0cmlwIG91dCBwb3J0
LCB3ZSBqdXN0IHdhbnQgdGhlIFVSTCB0aGlzIGdhbGF4eSBzZXJ2ZXIgd2FzIGFjY2Vzc2VkPQog
YXQuCiAgICAgaWYgJzonIGluIEhPU1Q6CiAgICAgICAgIEhPU1QgPTNEIEhPU1RbMDpIT1NULmlu
ZGV4KCc6JyldCkBAIC01OCwxMyArNTEsMTMgQEAKIDwlCiAgICAgY29uZl9maWxlID0zRCB7CiAg
ICAgICAgICdoaXN0b3J5X2lkJzogc2VsZi5hdHRyLmhpc3RvcnlfaWQsCi0gICAgICAgICdnYWxh
eHlfdXJsJzogc2VsZi5hdHRyLnJlcXVlc3QuYXBwbGljYXRpb25fdXJsLnJzdHJpcCgnLycpICsg
Jy8nLAotICAgICAgICAnYXBpX2tleSc6IHNlbGYuYXR0ci5hcGlfa2V5LAotICAgICAgICAncmVt
b3RlX2hvc3QnOiBzZWxmLmF0dHIucmVxdWVzdC5yZW1vdGVfYWRkciwKKyAgICAgICAgJ2dhbGF4
eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8nKSArICcvJywKKyAgICAg
ICAgJ2FwaV9rZXknOiBnZXRfYXBpX2tleSgpLAorICAgICAgICAncmVtb3RlX2hvc3QnOiByZXF1
ZXN0LnJlbW90ZV9hZGRyLAogICAgICAgICAnZ2FsYXh5X3Bhc3Rlcl9wb3J0Jzogc2VsZi5nZXRf
Z2FsYXh5X3Bhc3Rlcl9wb3J0KHNlbGYuYXR0ci5nYWxheHk9Cl9yb290X2RpciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0
dHIuZ2FsYXh5PQpfY29uZmlnKSwKICAgICAgICAgJ2RvY2tlcl9wb3J0Jzogc2VsZi5hdHRyLlBP
UlQsCi0gICAgICAgICdjb3JzX29yaWdpbic6IHNlbGYuYXR0ci5yZXF1ZXN0Lmhvc3RfdXJsLAor
ICAgICAgICAnY29yc19vcmlnaW4nOiByZXF1ZXN0Lmhvc3RfdXJsLAogICAgIH0KPTIwCiAgICAg
aWYgc2VsZi5hdHRyLlBBU1NXT1JEX0FVVEg6CkBAIC0xNzUsOCArMTY4LDggQEAKIDwlZGVmIG5h
bWU9M0QiZG9ja2VyX2NtZCh0ZW1wX2RpcikiPjwlCiAgICAgcmV0dXJuICclcyBydW4gLWQgLS1z
aWctcHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQvIiAlcycgJT0KIFwKLSAg
ICAgICAgKHNlbGYuYXR0ci5pcHlfdml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJjb21tYW5kIiks
IHNlbGYuYXR0ci5QT1JUPQosIHRlbXBfZGlyLAotICAgICAgICAgc2VsZi5hdHRyLmlweV92aXpf
Y29uZmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikpCisgICAgICAgIChzZWxmLmF0dHIudml6X2Nv
bmZpZy5nZXQoImRvY2tlciIsICJjb21tYW5kIiksIHNlbGYuYXR0ci5QT1JULCB0ZT0KbXBfZGly
LAorICAgICAgICAgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0KCJkb2NrZXIiLCAiaW1hZ2UiKSkK
ICU+PC8lZGVmPgo9MjAKCmRpZmYgLXIgOGUzMTljMDkyNWUyYTQ4YjQ4OTAyMDQ3NmZmNjk4ZmJh
MTM0OTE2MyAtciAyZWRiNjFlNGM0OGZhNDg4ZDVkNmViNz0KMGIyYTUyM2U5ZmIzYWZiMmUgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQph
a28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMv
aXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
dGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNywxOCArNyw4IEBACj0yMAogIyBTZXRzIElEIGFu
ZCBzZXRzIHVwIGEgbG90IG9mIG90aGVyIHZhcmlhYmxlcwogaWUuc2V0X2lkKCJpcHl0aG9uIikK
LQotaWUucmVnaXN0ZXJfZGVmYXVsdHMoewotICAgICdhcGFjaGVfdXJscyc6IEZhbHNlLAotICAg
ICdjb21tYW5kJzogJ2RvY2tlcicsCi0gICAgJ2ltYWdlJzogJ2JncnVlbmluZy9kb2NrZXItaXB5
dGhvbi1ub3RlYm9vaycsCi0gICAgJ3Bhc3N3b3JkX2F1dGgnOiBGYWxzZSwKLSAgICAnc3NsJzog
RmFsc2V9KQotCiAjIENyZWF0ZSB0ZW1wZGlyIGluIGdhbGF4eQogdGVtcF9kaXIgPTNEIG9zLnBh
dGguYWJzcGF0aCggdGVtcGZpbGUubWtkdGVtcCgpICkKLSMgU2V0IHVzZXIncyBBUEkga2V5Ci1p
ZS5hdHRyLmFwaV9rZXkgPTNEIGdldF9hcGlfa2V5KCkKICMgV3JpdGUgb3V0IGNvbmYgZmlsZS4u
Lm5lZWRzIHdvcmsKIGllLndyaXRlX2NvbmZfZmlsZSh0ZW1wX2RpcikKPTIwCgoKaHR0cHM6Ly9i
aXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2Q4ZDI1MjM1ZTBkMS8K
Q2hhbmdlc2V0OiAgIGQ4ZDI1MjM1ZTBkMQpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAg
ICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIE1vcmUgZG9jdW1lbnRh
dGlvbgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDJlZGI2MWU0YzQ4ZmE0ODhkNWQ2ZWI3
MGIyYTUyM2U5ZmIzYWZiMmUgLXIgZDhkMjUyMzVlMGQxZmY5Nzc2OGFjMTM9CmM2NjAyN2YzNGQ2
NDViNjBkIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2ll
Lm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaWUubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pZS5tYWtvCkBAIC0xOCw4ICsxOCw3IEBACiAgICAgIiIiCiAgICAgICAgIElFcyBt
dXN0IHJlZ2lzdGVyIHRoZWlyIG5hbWUsIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNvbnN0cnVjdGlu
ZyBzdD0KcmluZ3MKPTIwCi0gICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIG1ldGhvZCBzdG9yZXMg
bG90cyBvZiBjb25maWcgb3B0aW9ucyB3ZSB3YW50IHRvID0KYWNjZXNzIGVsc2V3aGVyZS4gVGhp
cwotICAgICAgICBzaG91bGQgYmUgcmVmYWN0b3JlZAorICAgICAgICBBZGRpdGlvbmFsbHkgdGhp
cyBtZXRob2Qgc3RvcmVzIGxvdHMgb2YgY29uZmlnIG9wdGlvbnMgd2Ugd2FudCB0byA9CmFjY2Vz
cyBlbHNld2hlcmUuCiAgICAgIiIiCiAgICAgc2VsZi5hdHRyLnZpel9pZCA9M0QgbmFtZQogICAg
IHNlbGYuYXR0ci5oaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5z
Lmhpc3RvcnkuaWQgKQpAQCAtNDksNiArNDgsMTEgQEAKPTIwCiA8JWRlZiBuYW1lPTNEIndyaXRl
X2NvbmZfZmlsZShvdXRwdXRfZGlyZWN0b3J5KSI+PCUKKyAgICAiIiIKKyAgICAgICAgQnVpbGQg
dXAgYSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzdGFuZGFyZCBmb3IgQUxMIElFcy4KKwor
ICAgICAgICBUT0RPOiByZXBsYWNlIGhhc2hlZCBwYXNzd29yZCB3aXRoIHBsYWludGV4dC4KKyAg
ICAiIiIKICAgICBjb25mX2ZpbGUgPTNEIHsKICAgICAgICAgJ2hpc3RvcnlfaWQnOiBzZWxmLmF0
dHIuaGlzdG9yeV9pZCwKICAgICAgICAgJ2dhbGF4eV91cmwnOiByZXF1ZXN0LmFwcGxpY2F0aW9u
X3VybC5yc3RyaXAoJy8nKSArICcvJywKQEAgLTgxLDYgKzg1LDkgQEAKPTIwCiA8JWRlZiBuYW1l
PTNEImdldF9nYWxheHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3RfZGlyLCBnYWxheHlfY29uZmln
KSI+PCUKKyAgICAiIiIKKyAgICAgICAgR2V0IHBvcnQgZ2FsYXh5IGlzIHJ1bm5pbmcgb24gKGlm
IHJ1bm5pbmcgdW5kZXIgcGFzdGVyKQorICAgICIiIgogICAgIGNvbmZpZyA9M0QgQ29uZmlnUGFy
c2VyLlNhZmVDb25maWdQYXJzZXIoeydwb3J0JzogJzgwODAnfSkKICAgICBjb25maWcucmVhZCgg
b3MucGF0aC5qb2luKCBnYWxheHlfcm9vdF9kaXIsICd1bml2ZXJzZV93c2dpLmluaScgKSApCj0y
MApAQCAtMTIxLDEyICsxMjgsMTggQEAKPTIwCiA8JWRlZiBuYW1lPTNEImdlbmVyYXRlX2hleChs
ZW5ndGgpIj48JQorICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIGhleCBzdHJpbmcKKyAgICAi
IiIKICAgICByZXR1cm4gJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmJykg
Zm9yIF8gaW4gcmFuZ2UobGVuZ3RoPQopKQogJT48LyVkZWY+PCVkZWYgbmFtZT0zRCJnZW5lcmF0
ZV9wYXNzd29yZChsZW5ndGgpIj48JQorICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIHJhbmRv
bSBhbHBoYW51bWVyaWMgcGFzc3dvcmQKKyAgICAiIiIKICAgICByZXR1cm4gJycuam9pbihyYW5k
b20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonKSBmPQpvciBf
IGluIHJhbmdlKGxlbmd0aCkpCiAlPjwvJWRlZj4KQEAgLTE0Niw2ICsxNTksMTggQEAKPTIwCiA8
JWRlZiBuYW1lPTNEInVybF90ZW1wbGF0ZSh1cmxfdGVtcGxhdGUpIj48JQorICAgICIiIgorICAg
ICAgICBQcm9jZXNzIGEgVVJMIHRlbXBsYXRlCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwg
dmFyaWFibGVzIGFjY2Vzc2libGUgdG8gdGhlIHVzZXI6CisKKyAgICAgICAgICAgIC0gJHtQUk9U
T30gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHByb3RvY29sIChodHRwL2h0dHBzKQorICAgICAgICAg
ICAgLSAke0hPU1R9IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29ycmVjdCBob3N0bmFtZQor
ICAgICAgICAgICAgLSAke1BPUlR9IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcG9ydCB0aGUg
ZG9ja2VyIGltYWdlIGlzIGE9CnR0YWNoZWQgdG8KKworICAgICAgICBJbiB0aGUgY2FzZSB0aGF0
IGBhcGFjaGVfdXJscyA9M0QgRmFsc2VgLCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgSE89ClNUIGhh
cyBhIFBPUlQgYXBwZW5lZGVkIHRvCisgICAgICAgIGl0LCBzbyB0aGUgdXNlciBkb2Vzbid0IGhh
dmUgdG8gdGVtcGxhdGUgMnggdXJscy4KKyAgICAiIiIKICAgICAjIEZpZ3VyZSBvdXQgb3VyIHN1
YnN0aXR1dGlvbnMKICAgICBpZiBzZWxmLmF0dHIuU1NMX1VSTFM6CiAgICAgICAgIHByb3RvY29s
ID0zRCAnaHR0cHMnCkBAIC0xNjcsNiArMTkyLDkgQEAKPTIwCiA8JWRlZiBuYW1lPTNEImRvY2tl
cl9jbWQodGVtcF9kaXIpIj48JQorICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhbmQgcmV0dXJu
IHRoZSBkb2NrZXIgY29tbWFuZCB0byBleGVjdXRlCisgICAgIiIiCiAgICAgcmV0dXJuICclcyBy
dW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQvIiAlcycg
JT0KIFwKICAgICAgICAgKHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImNvbW1h
bmQiKSwgc2VsZi5hdHRyLlBPUlQsIHRlPQptcF9kaXIsCiAgICAgICAgICBzZWxmLmF0dHIudml6
X2NvbmZpZy5nZXQoImRvY2tlciIsICJpbWFnZSIpKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9mNTUwM2E1MjkyZTkvCkNoYW5nZXNldDogICBm
NTUwM2E1MjkyZTkKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4
IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBHaXZlIHVwIGFmdGVyIDEwIHRyaWVzCkFmZmVj
dGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZDhkMjUyMzVlMGQxZmY5Nzc2OGFjMTNjNjYwMjdmMzRk
NjQ1YjYwZCAtciBmNTUwM2E1MjkyZTkwNmQ0NDhkMzZlOT0KMjc2NzkyOTc1YmEwMmUwOGUgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaXB5dGhvbi5qcwotLS0g
YS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHl0aG9uLmpz
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweXRo
b24uanMKQEAgLTY1LDE2ICs2NSwyMyBAQAogICovCiBmdW5jdGlvbiBsb2FkX25vdGVib29rKHBh
c3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVibz0Kb2tfYWNj
ZXNzX3VybCwgYXBhY2hlX3VybHMsIGdhbGF4eV9yb290KXsKICAgICAkKCBkb2N1bWVudCApLnJl
YWR5KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgY291bnRlciA9M0QgMDsKICAgICAgICAgJCgn
I21haW4nKS5hcHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlfcm9v
dCArICcvPQpzdGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRpb246
YWJzb2x1dGU7bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsiPicp
OwogICAgICAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICAgICAg
ICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgICAg
ICAgdXJsOiBub3RlYm9va19hY2Nlc3NfdXJsLAogICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1
bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKICAgICAgICAgICAgICAg
ICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgIF9oYW5k
bGVfbm90ZWJvb2tfbG9hZGluZyhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZT0KYm9va19s
b2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191cmwsIGFwYWNoZV91cmxzKTsKICAgICAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpeworICAgICAgICAgICAg
ICAgIGVycm9yOiBmdW5jdGlvbihhLCBiLCBjKXsKKyAgICAgICAgICAgICAgICAgICAgY291bnRl
cisrOworICAgICAgICAgICAgICAgICAgICBpZihjb3VudGVyID4gMTApeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygiR2l2aW5nIHVwISIpOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTb21lIGVycm9yIik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSk7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9n
YWxheHktY2VudHJhbC9jb21taXRzLzA5YTE0NDIzZTJlZi8KQ2hhbmdlc2V0OiAgIDA5YTE0NDIz
ZTJlZgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6
MDQrMDA6MDAKU3VtbWFyeTogICAgIFJlcXVpcmluZyByZXF1aXJlLmpzCkFmZmVjdGVkICM6ICAx
IGZpbGUKCmRpZmYgLXIgZjU1MDNhNTI5MmU5MDZkNDQ4ZDM2ZTkyNzY3OTI5NzViYTAyZTA4ZSAt
ciAwOWExNDQyM2UyZWYxMGIwMjU5MzZjNj0KYmI0ZTJiYjc0ZTk3Njg5MzEgY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAg
LTIwNywxMyArMjA3LDE1IEBACiB2YXIgYXBhY2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlw
dF9ib29sZWFuKHNlbGYuYXR0ci5BUEFDSEVfVVJMUykgfTsKIHZhciBwYXNzd29yZCA9M0QgJyR7
IHNlbGYuYXR0ci5ub3RlYm9va19wdyB9JzsKIHZhciBnYWxheHlfcm9vdCA9M0QgJyR7IHNlbGYu
YXR0ci5yb290IH0nOwordmFyIGFwcF9yb290ID0zRCAnJHsgc2VsZi5hdHRyLmFwcF9yb290IH0n
OwogPC8lZGVmPjwlZGVmIG5hbWU9M0QibG9hZF9kZWZhdWx0X2pzKCkiPgogJHtoLmNzcyggJ2Jh
c2UnICkgfQotJHtoLmpzKCAnbGlicy9qcXVlcnkvanF1ZXJ5JyApIH0KLSR7aC5qcyggJ2xpYnMv
dG9hc3RyJyApIH0KKyR7aC5qcyggJ2xpYnMvanF1ZXJ5L2pxdWVyeScsCisgICAgICAgICdsaWJz
L3RvYXN0cicsCisgICAgICAgICdsaWJzL3JlcXVpcmUnKX0KICR7aC5qYXZhc2NyaXB0X2xpbmso
IHNlbGYuYXR0ci5hcHBfcm9vdCArICdpZS5qcycgKX0KICR7aC5qYXZhc2NyaXB0X2xpbmsoIHNl
bGYuYXR0ci5hcHBfcm9vdCArIHNlbGYuYXR0ci52aXpfaWQgKyAnLmpzJyApfQogPC8lZGVmPgoK
Cmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy83YWQ1
ZTZjNjMzMTQvCkNoYW5nZXNldDogICA3YWQ1ZTZjNjMzMTQKVXNlcjogICAgICAgIGVyYXNjaGUy
CkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBDb21t
ZW50ZWQgb3V0IGNvZGUgcGxhbm5pbmcgZm9yIGllL2lweS5qcyBzcGxpdApBZmZlY3RlZCAjOiAg
MSBmaWxlCgpkaWZmIC1yIDA5YTE0NDIzZTJlZjEwYjAyNTkzNmM2YmI0ZTJiYjc0ZTk3Njg5MzEg
LXIgN2FkNWU2YzYzMzE0YjAwZWQ0ZGNkM2U9CjU2YmY2OWY1NzFkNmVkOGViIGNvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBh
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24u
bWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRl
cy9pcHl0aG9uLm1ha28KQEAgLTQ2LDYgKzQ2LDE0IEBACiB2YXIgbm90ZWJvb2tfbG9naW5fdXJs
ID0zRCAnJHsgbm90ZWJvb2tfbG9naW5fdXJsIH0nOwogdmFyIG5vdGVib29rX2FjY2Vzc191cmwg
PTNEICckeyBub3RlYm9va19hY2Nlc3NfdXJsIH0nOwogLy8gTG9hZCBub3RlYm9vaworCisvL3Jl
cXVpcmUuY29uZmlnKHsKKy8vICAgIGJhc2VVcmw6IGFwcF9yb290LAorLy8gICAgcGF0aHM6IHsK
Ky8vICAgICAgICAicGx1Z2luIiA6IGFwcF9yb290LAorLy8gICAgfSwKKy8vfSk7CisvL3JlcXVp
cmVqcyhbJ3BsdWdpbi9pZScsICdwbHVnaW4vaXB5dGhvbiddKTsKIGxvYWRfbm90ZWJvb2socGFz
c3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNz
PQpfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5X3Jvb3QpOwogPC9zY3JpcHQ+PGRpdiBpZD0zRCJt
YWluIiB3aWR0aD0zRCIxMDAlIiBoZWlnaHQ9M0QiMTAwJSI+CgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzZkZjc0MWM5N2Q2OS8KQ2hhbmdlc2V0
OiAgIDZkZjc0MWM5N2Q2OQpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFJlZmFjdG9yIHRvIHVzZSByZXF1aXJl
LmpzCkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1yIDdhZDVlNmM2MzMxNGIwMGVkNGRjZDNl
NTZiZjY5ZjU3MWQ2ZWQ4ZWIgLXIgNmRmNzQxYzk3ZDY5YzNjYjZiYWM2NjQ9CmU4ODA2MjYyMTM2
YjI4OWEzIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2ll
Lm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0
ZXMvaWUubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pZS5tYWtvCkBAIC0yMTYsNiArMjE2LDQgQEAKICR7aC5qcyggJ2xpYnMvanF1ZXJ5
L2pxdWVyeScsCiAgICAgICAgICdsaWJzL3RvYXN0cicsCiAgICAgICAgICdsaWJzL3JlcXVpcmUn
KX0KLSR7aC5qYXZhc2NyaXB0X2xpbmsoIHNlbGYuYXR0ci5hcHBfcm9vdCArICdpZS5qcycgKX0K
LSR7aC5qYXZhc2NyaXB0X2xpbmsoIHNlbGYuYXR0ci5hcHBfcm9vdCArIHNlbGYuYXR0ci52aXpf
aWQgKyAnLmpzJyApfQogPC8lZGVmPgoKZGlmZiAtciA3YWQ1ZTZjNjMzMTRiMDBlZDRkY2QzZTU2
YmY2OWY1NzFkNmVkOGViIC1yIDZkZjc0MWM5N2Q2OWMzY2I2YmFjNjY0PQplODgwNjI2MjEzNmIy
ODlhMyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0
aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3Rl
bXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC00NywxNCArNDcsMTUgQEAKIHZhciBu
b3RlYm9va19hY2Nlc3NfdXJsID0zRCAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JzsKIC8vIExv
YWQgbm90ZWJvb2sKPTIwCi0vL3JlcXVpcmUuY29uZmlnKHsKLS8vICAgIGJhc2VVcmw6IGFwcF9y
b290LAotLy8gICAgcGF0aHM6IHsKLS8vICAgICAgICAicGx1Z2luIiA6IGFwcF9yb290LAotLy8g
ICAgfSwKLS8vfSk7Ci0vL3JlcXVpcmVqcyhbJ3BsdWdpbi9pZScsICdwbHVnaW4vaXB5dGhvbidd
KTsKLWxvYWRfbm90ZWJvb2socGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29rX2xvZ2lu
X3VybCwgbm90ZWJvb2tfYWNjZXNzPQpfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5X3Jvb3QpOwor
cmVxdWlyZS5jb25maWcoeworICAgIGJhc2VVcmw6IGFwcF9yb290LAorICAgIHBhdGhzOiB7Cisg
ICAgICAgICJwbHVnaW4iIDogYXBwX3Jvb3QsCisgICAgfSwKK30pOworcmVxdWlyZWpzKFsncGx1
Z2luL2llJywgJ3BsdWdpbi9pcHl0aG9uJ10sIGZ1bmN0aW9uKCl7CisgICAgbG9hZF9ub3RlYm9v
ayhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19h
Yz0KY2Vzc191cmwsIGFwYWNoZV91cmxzLCBnYWxheHlfcm9vdCk7Cit9KTsKIDwvc2NyaXB0Pjxk
aXYgaWQ9M0QibWFpbiIgd2lkdGg9M0QiMTAwJSIgaGVpZ2h0PTNEIjEwMCUiPjwvZGl2PgoKCmh0
dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy85NWVhYzEy
MGI5ZWIvCkNoYW5nZXNldDogICA5NWVhYzEyMGI5ZWIKVXNlcjogICAgICAgIGVyYXNjaGUyCkRh
dGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNb3ZlZCBt
ZXNzYWdlcyBhbmQgb3RoZXIgbm9uLWlweSBzcGVjaWZpYyBkYXRhIHRvIGllLmpzCkFmZmVjdGVk
ICM6ICAyIGZpbGVzCgpkaWZmIC1yIDZkZjc0MWM5N2Q2OWMzY2I2YmFjNjY0ZTg4MDYyNjIxMzZi
Mjg5YTMgLXIgOTVlYWMxMjBiOWViYmI1YTVjNTY1NzY9CjIxNjE2MzE4ZDZjY2NiMjc0IGNvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCi0tLSBhL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCisrKyBiL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCkBAIC0wLDAgKzEs
NTMgQEAKKy8qKgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVtb3ZlIGNvbnRlbnQgZnJvbSB0
aGUgbWFpbiBhcmVhIGFuZCBhZGQgdGhlIG5vdGU9CmJvb2suCisgKiBOb3QgaWRlbXBvdGVudAor
ICovCitmdW5jdGlvbiBhcHBlbmRfbm90ZWJvb2sodXJsKXsKKyAgICAkKCcjc3Bpbm5lcicpLnJl
bW92ZSgpOworICAgICQoJyNtYWluJykuYXBwZW5kKCc8b2JqZWN0IGRhdGE9M0QiJyArIHVybCAr
ICciIGhlaWdodD0zRCI5NSUiIHdpZHRoPQo9M0QiMTAwJSI+JworICAgICsnPGVtYmVkIHNyYz0z
RCInICsgdXJsICsgJyIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiLz48L29iamVjdD4n
CisgICAgKTsKK30KKworZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCl7Cisg
ICAgdG9hc3RyLmluZm8oCisgICAgICAgICJBdXRvbWF0aWMgYXV0aG9yaXphdGlvbiBmYWlsZWQu
IFlvdSBjYW4gbWFudWFsbHkgbG9naW4gd2l0aDo8YnI+Ij0KICsgcGFzc3dvcmQgKyAiPGJyPjxh
IGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93PQpp
a2kvQXV0b21hdGljLUF1dGhvcml6YXRpb24tRmFpbGVkJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3Jl
IGRldGFpbHMgLi4uPC9hPiIsCisgICAgICAgICJQbGVhc2UgbG9naW4gbWFudWFsbHkiLAorICAg
ICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAxMDAwMDAsICd0YXBUb0Rpc21p
c3MnOiBmYWxzZX0KKyAgICApOworfQorCitmdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9jb25uZWN0
aW9uKCl7CisgICAgdG9hc3RyLmVycm9yKAorICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8g
SVB5dGhvbiBOb3RlYm9vay4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmk9CnN0cmF0b3IuIDxh
IGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtp
L0NvdWxkLT0Kbm90LWNvbm5lY3QtdG8tSVB5dGhvbi1Ob3RlYm9vaycgdGFyZ2V0PTNEJ19ibGFu
ayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAorICAgICJTZWN1cml0eSB3YXJuaW5nIiwKKyAgICAg
ICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rpc21pc3Mn
OiB0cnVlfQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2Vfbm9fYXV0aCgpeworICAgIHRv
YXN0ci53YXJuaW5nKAorICAgICAgICAiSVB5dGhvbiBOb3RlYm9vayB3YXMgbHVuY2hlZCB3aXRo
b3V0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0eSBpc3N1ZS4gPGEgaHJlZj0z
RCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL3dpa2kvST0KUHl0
aG9uLU5vdGVib29rLXdhcy1sdW5jaGVkLXdpdGhvdXQtYXV0aGVudGljYXRpb24nIHRhcmdldD0z
RCdfYmxhbmsnPk1vcmUgPQpkZXRhaWxzIC4uLjwvYT4iLAorICAgICAgICAiU2VjdXJpdHkgd2Fy
bmluZyIsCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAn
dGFwVG9EaXNtaXNzJzogZmFsc2V9CisgICAgKTsKK30KKworLyoqCisgKiBJbml0aWFsIHZlcnNp
b24gb2YgZnVuY3Rpb24gdG8gdGVzdCBhdmFpbGFiaWxpdHkgb2YgVVJML3Jlc291cmNlCisgKiBo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8yNTM5MDIwNi8zNDczNjgKKyAqLworZnVuY3Rpb24g
dGVzdF9pZV9hdmFpbGFiaWxpdHkodXJsKXsKKyAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKXsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHR5cGU6ICJHRVQiLAor
ICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpewor
ICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIC8vX2hhbmRsZV9ub3RlYm9va19sb2FkaW5n
KHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm89Cm9rX2xvZ2luX3VybCwgbm90ZWJvb2tf
YWNjZXNzX3VybCwgYXBhY2hlX3VybHMsIGRvY2tlcl9kZWxheSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgIH0sIDUwMCk7Cit9CisKCmRpZmYgLXIgNmRmNzQxYzk3ZDY5YzNjYjZi
YWM2NjRlODgwNjI2MjEzNmIyODlhMyAtciA5NWVhYzEyMGI5ZWJiYjVhNWM1NjU3Nj0KMjE2MTYz
MThkNmNjY2IyNzQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aXB5dGhvbi5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0
YXRpYy9pcHl0aG9uLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vc3RhdGljL2lweXRob24uanMKQEAgLTEsNTYgKzEsMyBAQAotLyoqCi0gKiBJbnRlcm5hbCBm
dW5jdGlvbiB0byByZW1vdmUgY29udGVudCBmcm9tIHRoZSBtYWluIGFyZWEgYW5kIGFkZCB0aGUg
bm90ZT0KYm9vay4KLSAqIE5vdCBpZGVtcG90ZW50Ci0gKi8KLWZ1bmN0aW9uIGFwcGVuZF9ub3Rl
Ym9vayh1cmwpewotICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7Ci0gICAgJCgnI21haW4nKS5h
cHBlbmQoJzxpZnJhbWUgZnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0
eT0KbGU9M0Qid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIgc2Ny
b2xsaW5nPTNEIm5vIiBzcmM9M0QiPQonKyB1cmwgKyciPjwvaWZyYW1lPicKLSAgICApOwotfQot
Ci0KLWZ1bmN0aW9uIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFzc3dvcmQpewotICAgIHRvYXN0ci5p
bmZvKAotICAgICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24gZmFpbGVkLiBZb3UgY2FuIG1h
bnVhbGx5IGxvZ2luIHdpdGg6PGJyPiI9CiArIHBhc3N3b3JkICsgIjxicj48YSBocmVmPTNEJ2h0
dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vdz0KaWtpL0F1dG9tYXRp
Yy1BdXRob3JpemF0aW9uLUZhaWxlZCcgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4u
LjwvYT4iLAotICAgICAgICAiUGxlYXNlIGxvZ2luIG1hbnVhbGx5IiwKLSAgICAgICAgeydjbG9z
ZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9
Ci0gICAgKTsKLX0KLQotZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfY29ubmVjdGlvbigpewotICAg
IHRvYXN0ci5lcnJvcigKLSAgICAgICAgIkNvdWxkIG5vdCBjb25uZWN0IHRvIElQeXRob24gTm90
ZWJvb2suIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pPQpzdHJhdG9yLiA8YSBocmVmPTNEJ2h0
dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vd2lraS9Db3VsZC09Cm5v
dC1jb25uZWN0LXRvLUlQeXRob24tTm90ZWJvb2snIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0
YWlscyAuLi48L2E+IiwKLSAgICAiU2VjdXJpdHkgd2FybmluZyIsCi0gICAgICAgIHsnY2xvc2VC
dXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogdHJ1ZX0KLSAg
ICApOwotfQotCi1mdW5jdGlvbiBtZXNzYWdlX25vX2F1dGgoKXsKLSAgICB0b2FzdHIud2Fybmlu
ZygKLSAgICAgICAgIklQeXRob24gTm90ZWJvb2sgd2FzIGx1bmNoZWQgd2l0aG91dCBhdXRoZW50
aWNhdGlvbi4gVGhpcyBpcyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxhIGhyZWY9M0QnaHR0cHM6Ly9n
aXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtpL0k9ClB5dGhvbi1Ob3RlYm9v
ay13YXMtbHVuY2hlZC13aXRob3V0LWF1dGhlbnRpY2F0aW9uJyB0YXJnZXQ9M0QnX2JsYW5rJz5N
b3JlID0KZGV0YWlscyAuLi48L2E+IiwKLSAgICAgICAgIlNlY3VyaXR5IHdhcm5pbmciLAotICAg
ICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwgJ3RhcFRvRGlzbWlz
cyc6IGZhbHNlfQotICAgICk7Ci19Ci0KLS8qKgotICogSW5pdGlhbCB2ZXJzaW9uIG9mIGZ1bmN0
aW9uIHRvIHRlc3QgYXZhaWxhYmlsaXR5IG9mIFVSTC9yZXNvdXJjZQotICogaHR0cDovL3N0YWNr
b3ZlcmZsb3cuY29tL3EvMjUzOTAyMDYvMzQ3MzY4Ci0gKi8KLWZ1bmN0aW9uIHRlc3RfaWVfYXZh
aWxhYmlsaXR5KHVybCl7Ci0gICAgaW50ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7
Ci0gICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICB0eXBlOiAiR0VUIiwKLSAgICAgICAgICAg
IHVybDogdXJsLAotICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKXsKLSAgICAgICAgICAg
ICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAvL19oYW5kbGVfbm90ZWJvb2tfbG9hZGluZyhwYXNzd29yZF9h
dXRoLCBwYXNzd29yZCwgbm90ZWJvPQpva19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191cmws
IGFwYWNoZV91cmxzLCBkb2NrZXJfZGVsYXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsK
LSAgICB9LCA1MDApOwotfQotCiAvKioKICAqIExvYWQgYW4gaW50ZXJhY3RpdmUgZW52aXJvbm1l
bnQgKElFKSBmcm9tIGEgcmVtb3RlIFVSTAogICogQHBhcmFtIHtCb29sZWFufSBwYXNzd29yZF9h
dXRoIFdoZXRoZXIgb3Igbm90IHRoaXMgcmVzb3VyY2UgcmVxdWlyZXMgcGE9CnNzd29yZCBhdXRo
ZW50aWNhdGlvbgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy85ODExOWQxNjkwNGIvCkNoYW5nZXNldDogICA5ODExOWQxNjkwNGIKVXNlcjogICAg
ICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1h
cnk6ICAgICBNb3ZlZCBub3RpZmljYXRpb25zIGJhY2ssIG5vdCBoYXBweSB3aXRoIHRoZW0gdGhl
cmUKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgOTVlYWMxMjBiOWViYmI1YTVjNTY1NzYy
MTYxNjMxOGQ2Y2NjYjI3NCAtciA5ODExOWQxNjkwNGI4ODI2ODhiNmNhNT0KNTAxMjU2YjkxNjMw
NjRlNmIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMK
LS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMK
KysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMK
QEAgLTksMjkgKzksNiBAQAogICAgICk7CiB9Cj0yMAotZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRf
YXV0aChwYXNzd29yZCl7Ci0gICAgdG9hc3RyLmluZm8oCi0gICAgICAgICJBdXRvbWF0aWMgYXV0
aG9yaXphdGlvbiBmYWlsZWQuIFlvdSBjYW4gbWFudWFsbHkgbG9naW4gd2l0aDo8YnI+Ij0KICsg
cGFzc3dvcmQgKyAiPGJyPjxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9n
YWxheHktaXB5dGhvbi93PQppa2kvQXV0b21hdGljLUF1dGhvcml6YXRpb24tRmFpbGVkJyB0YXJn
ZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCi0gICAgICAgICJQbGVhc2UgbG9n
aW4gbWFudWFsbHkiLAotICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAx
MDAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KLSAgICApOwotfQotCi1mdW5jdGlvbiBtZXNz
YWdlX2ZhaWxlZF9jb25uZWN0aW9uKCl7Ci0gICAgdG9hc3RyLmVycm9yKAotICAgICAgICAiQ291
bGQgbm90IGNvbm5lY3QgdG8gSVB5dGhvbiBOb3RlYm9vay4gUGxlYXNlIGNvbnRhY3QgeW91ciBh
ZG1pbmk9CnN0cmF0b3IuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9n
YWxheHktaXB5dGhvbi93aWtpL0NvdWxkLT0Kbm90LWNvbm5lY3QtdG8tSVB5dGhvbi1Ob3RlYm9v
aycgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAotICAgICJTZWN1cml0
eSB3YXJuaW5nIiwKLSAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAw
MDAsICd0YXBUb0Rpc21pc3MnOiB0cnVlfQotICAgICk7Ci19Ci0KLWZ1bmN0aW9uIG1lc3NhZ2Vf
bm9fYXV0aCgpewotICAgIHRvYXN0ci53YXJuaW5nKAotICAgICAgICAiSVB5dGhvbiBOb3RlYm9v
ayB3YXMgbHVuY2hlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0
eSBpc3N1ZS4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1p
cHl0aG9uL3dpa2kvST0KUHl0aG9uLU5vdGVib29rLXdhcy1sdW5jaGVkLXdpdGhvdXQtYXV0aGVu
dGljYXRpb24nIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgPQpkZXRhaWxzIC4uLjwvYT4iLAotICAg
ICAgICAiU2VjdXJpdHkgd2FybmluZyIsCi0gICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAn
dGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9Ci0gICAgKTsKLX0KPTIwCiAv
KioKICAqIEluaXRpYWwgdmVyc2lvbiBvZiBmdW5jdGlvbiB0byB0ZXN0IGF2YWlsYWJpbGl0eSBv
ZiBVUkwvcmVzb3VyY2UKCmRpZmYgLXIgOTVlYWMxMjBiOWViYmI1YTVjNTY1NzYyMTYxNjMxOGQ2
Y2NjYjI3NCAtciA5ODExOWQxNjkwNGI4ODI2ODhiNmNhNT0KNTAxMjU2YjkxNjMwNjRlNmIgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaXB5dGhvbi5qcwotLS0g
YS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHl0aG9uLmpz
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweXRo
b24uanMKQEAgLTEsMyArMSwyOCBAQAorZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNz
d29yZCl7CisgICAgdG9hc3RyLmluZm8oCisgICAgICAgICJBdXRvbWF0aWMgYXV0aG9yaXphdGlv
biBmYWlsZWQuIFlvdSBjYW4gbWFudWFsbHkgbG9naW4gd2l0aDo8YnI+Ij0KICsgcGFzc3dvcmQg
KyAiPGJyPjxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5
dGhvbi93PQppa2kvQXV0b21hdGljLUF1dGhvcml6YXRpb24tRmFpbGVkJyB0YXJnZXQ9M0QnX2Js
YW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCisgICAgICAgICJQbGVhc2UgbG9naW4gbWFudWFs
bHkiLAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAxMDAwMDAsICd0
YXBUb0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworfQorCitmdW5jdGlvbiBtZXNzYWdlX2ZhaWxl
ZF9jb25uZWN0aW9uKCl7CisgICAgdG9hc3RyLmVycm9yKAorICAgICAgICAiQ291bGQgbm90IGNv
bm5lY3QgdG8gSVB5dGhvbiBOb3RlYm9vay4gUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmk9CnN0
cmF0b3IuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5
dGhvbi93aWtpL0NvdWxkLT0Kbm90LWNvbm5lY3QtdG8tSVB5dGhvbi1Ob3RlYm9vaycgdGFyZ2V0
PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4iLAorICAgICJTZWN1cml0eSB3YXJuaW5n
IiwKKyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBU
b0Rpc21pc3MnOiB0cnVlfQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2Vfbm9fYXV0aCgp
eworICAgIHRvYXN0ci53YXJuaW5nKAorICAgICAgICAiSVB5dGhvbiBOb3RlYm9vayB3YXMgbHVu
Y2hlZCB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0eSBpc3N1ZS4g
PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL3dp
a2kvST0KUHl0aG9uLU5vdGVib29rLXdhcy1sdW5jaGVkLXdpdGhvdXQtYXV0aGVudGljYXRpb24n
IHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgPQpkZXRhaWxzIC4uLjwvYT4iLAorICAgICAgICAiU2Vj
dXJpdHkgd2FybmluZyIsCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6
IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9CisgICAgKTsKK30KKworCiAvKioKICAqIExv
YWQgYW4gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgKElFKSBmcm9tIGEgcmVtb3RlIFVSTAogICog
QHBhcmFtIHtCb29sZWFufSBwYXNzd29yZF9hdXRoIFdoZXRoZXIgb3Igbm90IHRoaXMgcmVzb3Vy
Y2UgcmVxdWlyZXMgcGE9CnNzd29yZCBhdXRoZW50aWNhdGlvbgoKCmh0dHBzOi8vYml0YnVja2V0
Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8wMWVmZDcxNzBkYTUvCkNoYW5nZXNl
dDogICAwMWVmZDcxNzBkYTUKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0
LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBNb3ZlZCBzcGlubmVyIHRvIGdlbmVy
aWMgSUUganMKQWZmZWN0ZWQgIzogIDIgZmlsZXMKCmRpZmYgLXIgOTgxMTlkMTY5MDRiODgyNjg4
YjZjYTU1MDEyNTZiOTE2MzA2NGU2YiAtciAwMWVmZDcxNzBkYTVmODhiZjY1MzYyNz0KYWQzNDZm
Yzk1YjIwODhmZTIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aWUuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aWUuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aWUuanMKQEAgLTMsMTIgKzMsMjEgQEAKICAqIE5vdCBpZGVtcG90ZW50CiAgKi8KIGZ1bmN0aW9u
IGFwcGVuZF9ub3RlYm9vayh1cmwpewotICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7CisgICAg
Y2xlYXJfbWFpbl9hcmVhKCk7CiAgICAgJCgnI21haW4nKS5hcHBlbmQoJzxvYmplY3QgZGF0YT0z
RCInICsgdXJsICsgJyIgaGVpZ2h0PTNEIjk1JSIgd2lkdGg9Cj0zRCIxMDAlIj4nCiAgICAgKyc8
ZW1iZWQgc3JjPTNEIicgKyB1cmwgKyAnIiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSIv
Pjwvb2JqZWN0PicKICAgICApOwogfQo9MjAKK2Z1bmN0aW9uIGNsZWFyX21haW5fYXJlYSgpewor
ICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7CisgICAgJCgnI21haW4nKS5jaGlsZHJlbigpLnJl
bW92ZSgpOworfQorCitmdW5jdGlvbiBkaXNwbGF5X3NwaW5uZXIoKXsKKyAgICAgICAgJCgnI21h
aW4nKS5hcHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlfcm9vdCAr
ICcvPQpzdGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRpb246YWJz
b2x1dGU7bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsiPicpOwor
fQorCj0yMAogLyoqCiAgKiBJbml0aWFsIHZlcnNpb24gb2YgZnVuY3Rpb24gdG8gdGVzdCBhdmFp
bGFiaWxpdHkgb2YgVVJML3Jlc291cmNlCgpkaWZmIC1yIDk4MTE5ZDE2OTA0Yjg4MjY4OGI2Y2E1
NTAxMjU2YjkxNjMwNjRlNmIgLXIgMDFlZmQ3MTcwZGE1Zjg4YmY2NTM2Mjc9CmFkMzQ2ZmM5NWIy
MDg4ZmUyIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lweXRo
b24uanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMv
aXB5dGhvbi5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0
YXRpYy9pcHl0aG9uLmpzCkBAIC0zOCw3ICszOCw3IEBACiBmdW5jdGlvbiBsb2FkX25vdGVib29r
KHBhc3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVibz0Kb2tf
YWNjZXNzX3VybCwgYXBhY2hlX3VybHMsIGdhbGF4eV9yb290KXsKICAgICAkKCBkb2N1bWVudCAp
LnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgY291bnRlciA9M0QgMDsKLSAgICAgICAg
JCgnI21haW4nKS5hcHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlf
cm9vdCArICcvPQpzdGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRp
b246YWJzb2x1dGU7bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsi
PicpOworICAgICAgICBkaXNwbGF5X3NwaW5uZXIoKTsKICAgICAgICAgaW50ZXJ2YWwgPTNEIHNl
dEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAg
ICAgIHR5cGU6ICJHRVQiLAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwvY29tbWl0cy84MzE4YmM0NDRiOWEvCkNoYW5nZXNldDogICA4MzE4YmM0NDRiOWEKVXNl
cjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAw
ClN1bW1hcnk6ICAgICBSZWZhY3RvcmVkIG91dCBVUkwgYWNjZXNzIHRlc3RpbmcKQWZmZWN0ZWQg
IzogIDIgZmlsZXMKCmRpZmYgLXIgMDFlZmQ3MTcwZGE1Zjg4YmY2NTM2MjdhZDM0NmZjOTViMjA4
OGZlMiAtciA4MzE4YmM0NDRiOWE5ODlmZmQzNjg4Nz0KNGMxYmI4MTJkN2UzMDc3MjEgY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMKLS0tIGEvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMKKysrIGIvY29uZmln
L3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaWUuanMKQEAgLTIzLDE3ICsy
MywyNSBAQAogICogSW5pdGlhbCB2ZXJzaW9uIG9mIGZ1bmN0aW9uIHRvIHRlc3QgYXZhaWxhYmls
aXR5IG9mIFVSTC9yZXNvdXJjZQogICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjUzOTAy
MDYvMzQ3MzY4CiAgKi8KLWZ1bmN0aW9uIHRlc3RfaWVfYXZhaWxhYmlsaXR5KHVybCl7CitmdW5j
dGlvbiB0ZXN0X2llX2F2YWlsYWJpbGl0eSh1cmwsIHN1Y2Nlc3NfY2FsbGJhY2speworICAgIHZh
ciByZXF1ZXN0X2NvdW50ID0zRCAwOworICAgIGRpc3BsYXlfc3Bpbm5lcigpOwogICAgIGludGVy
dmFsID0zRCBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAkLmFqYXgoewogICAgICAg
ICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgIHN1
Y2Nlc3M6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZh
bCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgLy9faGFu
ZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVibz0Kb2tf
bG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscywgZG9ja2VyX2RlbGF5
KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzX2NhbGxiYWNrKCk7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgcmVxdWVzdF9j
b3VudCsrOworICAgICAgICAgICAgICAgIGlmKHJlcXVlc3RfY291bnQgPiAzMCl7CisgICAgICAg
ICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgICAg
ICBjbGVhcl9tYWluX2FyZWEoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkdh
dmUgdXAgYWZ0ZXIgMTUgc2Vjb25kcyIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSk7CiAgICAgfSwgNTAwKTsKIH0KLQoKZGlmZiAtciAwMWVmZDcxNzBkYTVm
ODhiZjY1MzYyN2FkMzQ2ZmM5NWIyMDg4ZmUyIC1yIDgzMThiYzQ0NGI5YTk4OWZmZDM2ODg3PQo0
YzFiYjgxMmQ3ZTMwNzcyMSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0
YXRpYy9pcHl0aG9uLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vc3RhdGljL2lweXRob24uanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9zdGF0aWMvaXB5dGhvbi5qcwpAQCAtMzcsMjcgKzM3LDkgQEAKICAqLwogZnVuY3Rp
b24gbG9hZF9ub3RlYm9vayhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5f
dXJsLCBub3RlYm89Cm9rX2FjY2Vzc191cmwsIGFwYWNoZV91cmxzLCBnYWxheHlfcm9vdCl7CiAg
ICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNvdW50ZXIg
PTNEIDA7Ci0gICAgICAgIGRpc3BsYXlfc3Bpbm5lcigpOwotICAgICAgICBpbnRlcnZhbCA9M0Qg
c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICQuYWpheCh7Ci0gICAgICAgICAg
ICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgICAgICAgICAgdXJsOiBub3RlYm9va19hY2Nlc3Nf
dXJsLAotICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRl
cnZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIF9oYW5kbGVfbm90ZWJvb2tfbG9hZGluZyhwYXNz
d29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZT0KYm9va19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vz
c191cmwsIGFwYWNoZV91cmxzKTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAg
IGVycm9yOiBmdW5jdGlvbihhLCBiLCBjKXsKLSAgICAgICAgICAgICAgICAgICAgY291bnRlcisr
OwotICAgICAgICAgICAgICAgICAgICBpZihjb3VudGVyID4gMTApewotICAgICAgICAgICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygiR2l2aW5nIHVwISIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTb21lIGVycm9yIik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0sIDUwMCk7CisgICAgICAgIHRlc3RfaWVf
YXZhaWxhYmlsaXR5KG5vdGVib29rX2FjY2Vzc191cmwsIGZ1bmN0aW9uKCl7CisgICAgICAgICAg
ICBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVi
b29rX2xvZz0KaW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscyk7CisgICAg
ICAgIH0pOwogICAgIH0pOwogfQo9MjAKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dh
bGF4eS1jZW50cmFsL2NvbW1pdHMvY2JkM2QyYTNiMGVmLwpDaGFuZ2VzZXQ6ICAgY2JkM2QyYTNi
MGVmClVzZXI6ICAgICAgICBlcmFzY2hlMgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODow
NCswMDowMApTdW1tYXJ5OiAgICAgUmVmYWN0b3JlZCBmdW5jdGlvbiBjYWxscwpBZmZlY3RlZCAj
OiAgMyBmaWxlcwoKZGlmZiAtciA4MzE4YmM0NDRiOWE5ODlmZmQzNjg4NzRjMWJiODEyZDdlMzA3
NzIxIC1yIGNiZDNkMmEzYjBlZmJjMjVjNjlkMDA5PQoxOWU3NWYxNDgyOTU2YmM5NCBjb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pZS5qcwotLS0gYS9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pZS5qcworKysgYi9jb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pZS5qcwpAQCAtNDUsMyArNDUs
MTggQEAKICAgICAgICAgfSk7CiAgICAgfSwgNTAwKTsKIH0KKworLyoqCisgKiBMb2FkIGFuIGlu
dGVyYWN0aXZlIGVudmlyb25tZW50IChJRSkgZnJvbSBhIHJlbW90ZSBVUkwKKyAqIEBwYXJhbSB7
U3RyaW5nfSBwYXNzd29yZDogcGFzc3dvcmQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHJl
bW90ZSByPQplc291cmNlCisgKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfbG9naW5fdXJsOiBV
UkwgdGhhdCBzaG91bGQgYmUgUE9TVGVkIHRvIGZvciBsbz0KZ2luCisgKiBAcGFyYW0ge1N0cmlu
Z30gbm90ZWJvb2tfYWNjZXNzX3VybDogdGhlIFVSTCBlbWJlZGVkIGluIHRoZSBwYWdlIGFuZCBs
bz0KYWRlZAorICoKKyAqLworZnVuY3Rpb24gbG9hZF9ub3RlYm9vayhwYXNzd29yZCwgbm90ZWJv
b2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCA9CmNhbGxiYWNrX2Z1bmN0aW9uKXsK
KyAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0X2llX2F2
YWlsYWJpbGl0eShub3RlYm9va19hY2Nlc3NfdXJsLCBmdW5jdGlvbigpeworICAgICAgICAgICAg
Y2FsbGJhY2tfZnVuY3Rpb24obm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJs
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CgpkaWZmIC1yIDgzMThiYzQ0NGI5YTk4OWZmZDM2
ODg3NGMxYmI4MTJkN2UzMDc3MjEgLXIgY2JkM2QyYTNiMGVmYmMyNWM2OWQwMDk9CjE5ZTc1ZjE0
ODI5NTZiYzk0IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2lw
eXRob24uanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0
aWMvaXB5dGhvbi5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3N0YXRpYy9pcHl0aG9uLmpzCkBAIC0yNSwyOCArMjUsMjMgQEAKPTIwCiAvKioKICAqIExvYWQg
YW4gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgKElFKSBmcm9tIGEgcmVtb3RlIFVSTAotICogQHBh
cmFtIHtCb29sZWFufSBwYXNzd29yZF9hdXRoIFdoZXRoZXIgb3Igbm90IHRoaXMgcmVzb3VyY2Ug
cmVxdWlyZXMgcGE9CnNzd29yZCBhdXRoZW50aWNhdGlvbgogICogQHBhcmFtIHtTdHJpbmd9IHBh
c3N3b3JkOiBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgcmVtb3RlIHI9CmVz
b3VyY2UKICAqIEBwYXJhbSB7U3RyaW5nfSBub3RlYm9va19sb2dpbl91cmw6IFVSTCB0aGF0IHNo
b3VsZCBiZSBQT1NUZWQgdG8gZm9yIGxvPQpnaW4KICAqIEBwYXJhbSB7U3RyaW5nfSBub3RlYm9v
a19hY2Nlc3NfdXJsOiB0aGUgVVJMIGVtYmVkZWQgaW4gdGhlIHBhZ2UgYW5kIGxvPQphZGVkCi0g
KiBAcGFyYW0ge0Jvb2xlYW59IGFwYWNoZV91cmxzOiBQcm94eWluZyBpcyBkb25lIG91dHNpZGUg
b2YgZ2FsYXh5IGluIHRoZT0KIHdlYnNlcnZlcgotICogQHBhcmFtIHtTdHJpbmd9IGdhbGF4eV9y
b290OiByb290IG9mIHRoZSBnYWxheHkgc2VydmVyLCB1c2VkIGZvciBmaW5kaW49CmcgdGhlIHN0
YXRpYyBzcGlubmVyLmdpZiB0aGF0IHNoaXBzIHdpdGggZ2FsYXh5LgogICoKLSAqIFRPRE86IFRo
aXMgZnVuY3Rpb24gbmVlZHMgYSBsb3Qgb2Ygd29yayB0byBtYWtlIGl0IG1vcmUgZ2VuZXJpYzoK
LSAqIFRPRE86IGV4Y2hhbmdlIGxvZ2luX3VybCwgcGFzc3dvcmQsIHBhc3N3b3JkX2F1dGggZm9y
IGEgc2luZ2xlIGZ1bmN0aW9uPQogd2hpY2ggZW5jYXBzdWxhdGVzIGFsbCB0aGUgYXV0aGVudGlj
YXRpb24gcHJvY2VkdXJlLCBhcyB0aGF0IHdpbGwgZGlmZmVyIGI9CmV0d2VlbiBJRXMuCiAgKi8K
LWZ1bmN0aW9uIGxvYWRfbm90ZWJvb2socGFzc3dvcmRfYXV0aCwgcGFzc3dvcmQsIG5vdGVib29r
X2xvZ2luX3VybCwgbm90ZWJvPQpva19hY2Nlc3NfdXJsLCBhcGFjaGVfdXJscywgZ2FsYXh5X3Jv
b3QpeworZnVuY3Rpb24gbG9hZF9ub3RlYm9vayhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJs
LCBub3RlYm9va19hY2Nlc3NfdXJsKXsKICAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9u
KCkgewogICAgICAgICB0ZXN0X2llX2F2YWlsYWJpbGl0eShub3RlYm9va19hY2Nlc3NfdXJsLCBm
dW5jdGlvbigpewotICAgICAgICAgICAgX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKHBhc3N3b3Jk
X2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2c9CmluX3VybCwgbm90ZWJvb2tfYWNjZXNzX3Vy
bCwgYXBhY2hlX3VybHMpOworICAgICAgICAgICAgX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKG5v
dGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3U9CnJsKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9Cj0yMAogLyoqCi0gKiBJbnRlcm5hbCBmdW5jdGlvbgorICogTXVzdCBiZSBpbXBs
ZW1lbnRlZCBieSBJRXMKICAqLwotZnVuY3Rpb24gX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKHBh
c3N3b3JkX2F1dGgsIHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl89CnVybCwgbm90ZWJvb2tfYWNj
ZXNzX3VybCwgYXBhY2hlX3VybHMpeworZnVuY3Rpb24gX2hhbmRsZV9ub3RlYm9va19sb2FkaW5n
KG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3VybCl7CiAgICAgaWYgKCBwYXNz
d29yZF9hdXRoICkgewogICAgICAgICAvLyBNYWtlIGFuIEFKQVggUE9TVAogICAgICAgICAkLmFq
YXgoewoKZGlmZiAtciA4MzE4YmM0NDRiOWE5ODlmZmQzNjg4NzRjMWJiODEyZDdlMzA3NzIxIC1y
IGNiZDNkMmEzYjBlZmJjMjVjNjlkMDA5PQoxOWU3NWYxNDgyOTU2YmM5NCBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1h
a28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMv
aXB5dGhvbi5tYWtvCkBAIC01NCw3ICs1NCw3IEBACiAgICAgfSwKIH0pOwogcmVxdWlyZWpzKFsn
cGx1Z2luL2llJywgJ3BsdWdpbi9pcHl0aG9uJ10sIGZ1bmN0aW9uKCl7Ci0gICAgbG9hZF9ub3Rl
Ym9vayhwYXNzd29yZF9hdXRoLCBwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9v
a19hYz0KY2Vzc191cmwsIGFwYWNoZV91cmxzLCBnYWxheHlfcm9vdCk7CisgICAgbG9hZF9ub3Rl
Ym9vayhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsKTsK
IH0pOwogPC9zY3JpcHQ+PGRpdiBpZD0zRCJtYWluIiB3aWR0aD0zRCIxMDAlIiBoZWlnaHQ9M0Qi
MTAwJSI+CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21t
aXRzLzc0ZjcyMTYyMzA3YS8KQ2hhbmdlc2V0OiAgIDc0ZjcyMTYyMzA3YQpVc2VyOiAgICAgICAg
ZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTog
ICAgIE1vcmUgdGVzdGluZywgbm93IHdpdGggcGFzc3dvcmRzCkFmZmVjdGVkICM6ICA0IGZpbGVz
CgpkaWZmIC1yIGNiZDNkMmEzYjBlZmJjMjVjNjlkMDA5MTllNzVmMTQ4Mjk1NmJjOTQgLXIgNzRm
NzIxNjIzMDdhZDc1MzI1ZDQ4MGI9CjdjMDNkMTUyMTVlNmUxNGNhIGNvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCkBAIC00LDkgKzQsOSBAQAogICovCiBm
dW5jdGlvbiBhcHBlbmRfbm90ZWJvb2sodXJsKXsKICAgICBjbGVhcl9tYWluX2FyZWEoKTsKLSAg
ICAkKCcjbWFpbicpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNEIicgKyB1cmwgKyAnIiBoZWlnaHQ9
M0QiOTUlIiB3aWR0aD0KPTNEIjEwMCUiPicKLSAgICArJzxlbWJlZCBzcmM9M0QiJyArIHVybCAr
ICciIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmplY3Q+JwotICAgICk7Cisg
ICAgLy8kKCcjbWFpbicpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNEIicgKyB1cmwgKyAnIiBoZWln
aHQ9M0QiOTUlIiB3aWR0aD0KPTNEIjEwMCUiPicKKyAgICAvLysnPGVtYmVkIHNyYz0zRCInICsg
dXJsICsgJyIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiLz48L29iamVjPQp0PicKKyAg
ICAvLyk7CiB9Cj0yMAogZnVuY3Rpb24gY2xlYXJfbWFpbl9hcmVhKCl7CkBAIC0yOSw3ICsyOSw3
IEBACiAgICAgaW50ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgICAgICQu
YWpheCh7CiAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKLSAgICAgICAgICAgIHVybDogdXJsLAor
ICAgICAgICAgICAgdXJsOiB1cmwgKyAiP2llX3Rlc3Q9M0QxIiwKICAgICAgICAgICAgIHN1Y2Nl
c3M6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7
CiAgICAgICAgICAgICAgICAgc3VjY2Vzc19jYWxsYmFjaygpOwoKZGlmZiAtciBjYmQzZDJhM2Iw
ZWZiYzI1YzY5ZDAwOTE5ZTc1ZjE0ODI5NTZiYzk0IC1yIDc0ZjcyMTYyMzA3YWQ3NTMyNWQ0ODBi
PQo3YzAzZDE1MjE1ZTZlMTRjYSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9u
L3N0YXRpYy9pcHl0aG9uLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vc3RhdGljL2lweXRob24uanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9zdGF0aWMvaXB5dGhvbi5qcwpAQCAtMzIsOCArMzIsOCBAQAogICovCiBmdW5j
dGlvbiBsb2FkX25vdGVib29rKHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29r
X2FjY2Vzc191cmwpewogICAgICQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7Ci0gICAg
ICAgIHRlc3RfaWVfYXZhaWxhYmlsaXR5KG5vdGVib29rX2FjY2Vzc191cmwsIGZ1bmN0aW9uKCl7
Ci0gICAgICAgICAgICBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcobm90ZWJvb2tfbG9naW5fdXJs
LCBub3RlYm9va19hY2Nlc3NfdT0KcmwpOworICAgICAgICB0ZXN0X2llX2F2YWlsYWJpbGl0eShu
b3RlYm9va19sb2dpbl91cmwsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICBfaGFuZGxlX25vdGVi
b29rX2xvYWRpbmcocGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvbz0Ka19hY2Nl
c3NfdXJsKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CkBAIC00MSw4ICs0MSw5IEBACiAvKioK
ICAqIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgSUVzCiAgKi8KLWZ1bmN0aW9uIF9oYW5kbGVfbm90
ZWJvb2tfbG9hZGluZyhub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191cmwpewot
ICAgIGlmICggcGFzc3dvcmRfYXV0aCApIHsKK2Z1bmN0aW9uIF9oYW5kbGVfbm90ZWJvb2tfbG9h
ZGluZyhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hPQpjY2Vzc191cmwp
eworICAgIGNvbnNvbGUubG9nKGllX3Bhc3N3b3JkX2F1dGgpOworICAgIGlmICggaWVfcGFzc3dv
cmRfYXV0aCApIHsKICAgICAgICAgLy8gTWFrZSBhbiBBSkFYIFBPU1QKICAgICAgICAgJC5hamF4
KHsKICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKQEAgLTYwLDcgKzYxLDcgQEAKICAgICAgICAg
ICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsK
LSAgICAgICAgICAgICAgICBpZihwYXNzd29yZF9hdXRoICYmICFhcGFjaGVfdXJscyl7CisgICAg
ICAgICAgICAgICAgaWYoaWVfcGFzc3dvcmRfYXV0aCAmJiAhaWVfYXBhY2hlX3VybHMpewogICAg
ICAgICAgICAgICAgICAgICAvLyBGYWlsdXJlIGhhcHBlbnMgZHVlIHRvIENPUlMKICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCk7CiAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKCmRpZmYgLXIgY2Jk
M2QyYTNiMGVmYmMyNWM2OWQwMDkxOWU3NWYxNDgyOTU2YmM5NCAtciA3NGY3MjE2MjMwN2FkNzUz
MjVkNDgwYj0KN2MwM2QxNTIxNWU2ZTE0Y2EgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTIwMyw5ICsyMDMsMTEgQEAK
PTIwCj0yMAogPCVkZWYgbmFtZT0zRCJkZWZhdWx0X2phdmFzY3JpcHRfdmFyaWFibGVzKCkiPgot
dmFyIHBhc3N3b3JkX2F1dGggPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0
ci5QQVNTV09SRF9BVVRIKSA9Cn07Ci12YXIgYXBhY2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNj
cmlwdF9ib29sZWFuKHNlbGYuYXR0ci5BUEFDSEVfVVJMUykgfTsKLXZhciBwYXNzd29yZCA9M0Qg
JyR7IHNlbGYuYXR0ci5ub3RlYm9va19wdyB9JzsKKy8vIEdsb2JhbHMKK2llX3Bhc3N3b3JkX2F1
dGggPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5QQVNTV09SRF9BVVRI
KSB9OworaWVfYXBhY2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYu
YXR0ci5BUEFDSEVfVVJMUykgfTsKK2llX3Bhc3N3b3JkID0zRCAnJHsgc2VsZi5hdHRyLm5vdGVi
b29rX3B3IH0nOworLy8gRG8gdGhlc2UgbmVlZCB0byBiZSBnbG9iYWwgYXMgd2VsbD8/CiB2YXIg
Z2FsYXh5X3Jvb3QgPTNEICckeyBzZWxmLmF0dHIucm9vdCB9JzsKIHZhciBhcHBfcm9vdCA9M0Qg
JyR7IHNlbGYuYXR0ci5hcHBfcm9vdCB9JzsKIDwvJWRlZj4KCmRpZmYgLXIgY2JkM2QyYTNiMGVm
YmMyNWM2OWQwMDkxOWU3NWYxNDgyOTU2YmM5NCAtciA3NGY3MjE2MjMwN2FkNzUzMjVkNDgwYj0K
N2MwM2QxNTIxNWU2ZTE0Y2EgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zp
c3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNTQsNyArNTQs
NyBAQAogICAgIH0sCiB9KTsKIHJlcXVpcmVqcyhbJ3BsdWdpbi9pZScsICdwbHVnaW4vaXB5dGhv
biddLCBmdW5jdGlvbigpewotICAgIGxvYWRfbm90ZWJvb2socGFzc3dvcmQsIG5vdGVib29rX2xv
Z2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgbG9hZF9ub3RlYm9vayhpZV9wYXNz
d29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsKTsKIH0pOwogPC9z
Y3JpcHQ+PGRpdiBpZD0zRCJtYWluIiB3aWR0aD0zRCIxMDAlIiBoZWlnaHQ9M0QiMTAwJSI+CgoK
aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzUyM2Zj
MmZkMzM2MC8KQ2hhbmdlc2V0OiAgIDUyM2ZjMmZkMzM2MApVc2VyOiAgICAgICAgZXJhc2NoZTIK
RGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEZpeGVk
IEpTIGJvb2xlYW4gY29udmVyc2lvbgpBZmZlY3RlZCAjOiAgMSBmaWxlCgpkaWZmIC1yIDc0Zjcy
MTYyMzA3YWQ3NTMyNWQ0ODBiN2MwM2QxNTIxNWU2ZTE0Y2EgLXIgNTIzZmMyZmQzMzYwODQwZjM0
MTRmOWI9CjFlYWJjYjcwZDRhNGZmOTFmIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2llLm1ha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCkBAIC0xNDQsMTIgKzE0NCwxMiBAQAog
JT48LyVkZWY+Cj0yMAotPCVkZWYgbmFtZT0zRCJqYXZhc2NyaXB0X2Jvb2xlYW4obGVuZ3RoKSI+
Cis8JWRlZiBuYW1lPTNEImphdmFzY3JpcHRfYm9vbGVhbihweXRob25fYm9vbGVhbikiPjwlCiAg
ICAgIiIiCiAgICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9vbGVhbiBm
b3IgdXNlIGluIEpTCiAgICAgIiIiCi0gICAgaWYgYm9vbGVhbjoKKyAgICBpZiBweXRob25fYm9v
bGVhbjoKICAgICAgICAgcmV0dXJuICJ0cnVlIjsKICAgICBlbHNlOgogICAgICAgICByZXR1cm4g
ImZhbHNlIgoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29t
bWl0cy8yOTc5MTMxYzJhYTIvCkNoYW5nZXNldDogICAyOTc5MTMxYzJhYTIKVXNlcjogICAgICAg
IGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6
ICAgICBDb2RlIHJlb3JnIG1vc3RseSBkb25lCkFmZmVjdGVkICM6ICAyIGZpbGVzCgpkaWZmIC1y
IDUyM2ZjMmZkMzM2MDg0MGYzNDE0ZjliMWVhYmNiNzBkNGE0ZmY5MWYgLXIgMjk3OTEzMWMyYWEy
ZTllZmRmODU4NzA9CjM1NWFkZmU0ZTJiY2RiYTU2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vc3RhdGljL2llLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vc3RhdGljL2llLmpzCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vc3RhdGljL2llLmpzCkBAIC00LDkgKzQsOSBAQAogICovCiBmdW5jdGlvbiBh
cHBlbmRfbm90ZWJvb2sodXJsKXsKICAgICBjbGVhcl9tYWluX2FyZWEoKTsKLSAgICAvLyQoJyNt
YWluJykuYXBwZW5kKCc8b2JqZWN0IGRhdGE9M0QiJyArIHVybCArICciIGhlaWdodD0zRCI5NSUi
IHdpZHRoPQo9M0QiMTAwJSI+JwotICAgIC8vKyc8ZW1iZWQgc3JjPTNEIicgKyB1cmwgKyAnIiBo
ZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSIvPjwvb2JqZWM9CnQ+JwotICAgIC8vKTsKKyAg
ICAkKCcjbWFpbicpLmFwcGVuZCgnPG9iamVjdCBkYXRhPTNEIicgKyB1cmwgKyAnIiBoZWlnaHQ9
M0QiOTUlIiB3aWR0aD0KPTNEIjEwMCUiPicKKyAgICArJzxlbWJlZCBzcmM9M0QiJyArIHVybCAr
ICciIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAlIi8+PC9vYmplY3Q+JworICAgICk7CiB9
Cj0yMAogZnVuY3Rpb24gY2xlYXJfbWFpbl9hcmVhKCl7CkBAIC0yMCw4ICsyMCwxMSBAQAo9MjAK
PTIwCiAvKioKLSAqIEluaXRpYWwgdmVyc2lvbiBvZiBmdW5jdGlvbiB0byB0ZXN0IGF2YWlsYWJp
bGl0eSBvZiBVUkwvcmVzb3VyY2UKKyAqIFRlc3QgYXZhaWxhYmlsaXR5IG9mIGEgVVJMLCBhbmQg
Y2FsbCBhIGNhbGxiYWNrIHdoZW4gZG9uZS4KICAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9x
LzI1MzkwMjA2LzM0NzM2OAorICogQHBhcmFtIHtTdHJpbmd9IHVybDogVVJMIHRvIHRlc3QgYXZh
aWxhYmlsaXR5IG9mLiBNdXN0IHJldHVybiBhIDIwMCAoMzA9CjItPjIwMCBpcyBPSykuCisgKiBA
cGFyYW0ge1N0cmluZ30gY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBzdWNjZXNzZnVs
bHkgY29ubmVjdGVkLgorICoKICAqLwogZnVuY3Rpb24gdGVzdF9pZV9hdmFpbGFiaWxpdHkodXJs
LCBzdWNjZXNzX2NhbGxiYWNrKXsKICAgICB2YXIgcmVxdWVzdF9jb3VudCA9M0QgMDsKQEAgLTI5
LDcgKzMyLDYgQEAKICAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAg
ICAgICAgJC5hamF4KHsKICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAotICAgICAgICAgICAgdXJs
OiB1cmwgKyAiP2llX3Rlc3Q9M0QxIiwKICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7
CiAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgICAg
ICAgc3VjY2Vzc19jYWxsYmFjaygpOwpAQCAtMzksMjQgKzQxLDEzIEBACiAgICAgICAgICAgICAg
ICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGNsZWFyX21haW5fYXJlYSgpOwot
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiR2F2ZSB1cCBhZnRlciAxNSBzZWNvbmRz
Iik7CisgICAgICAgICAgICAgICAgICAgIHRvYXN0ci5lcnJvcigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBJRSwgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0
PQpvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rp
c209Cmlzcyc6IGZhbHNlfQorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgfSwgNTAwKTsKIH0KLQotLyoqCi0g
KiBMb2FkIGFuIGludGVyYWN0aXZlIGVudmlyb25tZW50IChJRSkgZnJvbSBhIHJlbW90ZSBVUkwK
LSAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZDogcGFzc3dvcmQgdXNlZCB0byBhdXRoZW50aWNh
dGUgdG8gdGhlIHJlbW90ZSByPQplc291cmNlCi0gKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tf
bG9naW5fdXJsOiBVUkwgdGhhdCBzaG91bGQgYmUgUE9TVGVkIHRvIGZvciBsbz0KZ2luCi0gKiBA
cGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfYWNjZXNzX3VybDogdGhlIFVSTCBlbWJlZGVkIGluIHRo
ZSBwYWdlIGFuZCBsbz0KYWRlZAotICoKLSAqLwotZnVuY3Rpb24gbG9hZF9ub3RlYm9vayhwYXNz
d29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsLCA9CmNhbGxiYWNr
X2Z1bmN0aW9uKXsKLSAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAg
ICB0ZXN0X2llX2F2YWlsYWJpbGl0eShub3RlYm9va19hY2Nlc3NfdXJsLCBmdW5jdGlvbigpewot
ICAgICAgICAgICAgY2FsbGJhY2tfZnVuY3Rpb24obm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9v
a19hY2Nlc3NfdXJsKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19CgpkaWZmIC1yIDUyM2ZjMmZk
MzM2MDg0MGYzNDE0ZjliMWVhYmNiNzBkNGE0ZmY5MWYgLXIgMjk3OTEzMWMyYWEyZTllZmRmODU4
NzA9CjM1NWFkZmU0ZTJiY2RiYTU2IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRo
b24vc3RhdGljL2lweXRob24uanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9zdGF0aWMvaXB5dGhvbi5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy9pcHl0aG9uL3N0YXRpYy9pcHl0aG9uLmpzCkBAIC0zMiw2ICszMiw4IEBACiAgKi8KIGZ1
bmN0aW9uIGxvYWRfbm90ZWJvb2socGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJv
b2tfYWNjZXNzX3VybCl7CiAgICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKKyAg
ICAgICAgLy8gVGVzdCBub3RlYm9va19sb2dpbl91cmwgZm9yIGFjY2Vzc2liaWxpdHksIGV4ZWN1
dGluZyB0aGUgbG9naW4rPQpsb2FkIGZ1bmN0aW9uIHdoZW5ldmVyCisgICAgICAgIC8vIHdlJ3Zl
IHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIElFLgogICAgICAgICB0ZXN0X2llX2F2YWls
YWJpbGl0eShub3RlYm9va19sb2dpbl91cmwsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICBfaGFu
ZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJv
bz0Ka19hY2Nlc3NfdXJsKTsKICAgICAgICAgfSk7CkBAIC00Miw3ICs0NCw2IEBACiAgKiBNdXN0
IGJlIGltcGxlbWVudGVkIGJ5IElFcwogICovCiBmdW5jdGlvbiBfaGFuZGxlX25vdGVib29rX2xv
YWRpbmcocGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYT0KY2Nlc3NfdXJs
KXsKLSAgICBjb25zb2xlLmxvZyhpZV9wYXNzd29yZF9hdXRoKTsKICAgICBpZiAoIGllX3Bhc3N3
b3JkX2F1dGggKSB7CiAgICAgICAgIC8vIE1ha2UgYW4gQUpBWCBQT1NUCiAgICAgICAgICQuYWph
eCh7CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRz
LzEzOThmMzk1YmI4My8KQ2hhbmdlc2V0OiAgIDEzOThmMzk1YmI4MwpVc2VyOiAgICAgICAgZXJh
c2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAg
IEluY3JlYXNpbmcgZGVsYXkgcmVtb3ZlcyBtdWx0aXBsZSByZXF1ZXN0IGlzc3VlCkFwcGFyZW50
bHkgdGhlIEdFVCByZXF1ZXN0cyB3ZXJlbid0IGNvbXBsZXRpbmcgYnkgdGhlIHRpbWUgdGhlIG5l
eHQgd2FzIHNlbj0KdCwgbGVhZGluZyB0byBtdWx0aXBsZQpsb2dpbnMgaW4gc2hvcnQgc3VjY2Vz
c2lvbiB3aGVuIHRoZSBwYWdlIHN0YXJ0ZWQgcmVzb2x2aW5nIHByb3Blcmx5LgpBZmZlY3RlZCAj
OiAgMSBmaWxlCgpkaWZmIC1yIDI5NzkxMzFjMmFhMmU5ZWZkZjg1ODcwMzU1YWRmZTRlMmJjZGJh
NTYgLXIgMTM5OGYzOTViYjgzODU1NjEzMjQwOTk9CjY4M2Q3YzliNGY3ZDMyYTdmIGNvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCi0tLSBhL2NvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCisrKyBiL2NvbmZpZy9w
bHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2llLmpzCkBAIC00OSw1ICs0OSw1
IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKLSAgICB9
LCA1MDApOworICAgIH0sIDEwMDApOwogfQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy9mNjdjOGIzNzRiYzcvCkNoYW5nZXNldDogICBmNjdjOGIz
NzRiYzcKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4
OjA0KzAwOjAwClN1bW1hcnk6ICAgICBGaXhlcyAjMjUKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlm
ZiAtciAxMzk4ZjM5NWJiODM4NTU2MTMyNDA5OTY4M2Q3YzliNGY3ZDMyYTdmIC1yIGY2N2M4YjM3
NGJjN2YwODE4YjdhZTEyPQo2ZTFmNmNlNDQzMTI5ODYxNSBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm09CmFrbwotLS0gYS9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28KKysrIGIv
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5t
YWtvCkBAIC0zMCw3ICszMCw3IEBACiAjIyBHZW5lcmFsIElFIHNwZWNpZmljCiAjIEFjY2VzcyBV
UkxzIGZvciB0aGUgbm90ZWJvb2sgZnJvbSB3aXRoaW4gZ2FsYXh5Lgogbm90ZWJvb2tfYWNjZXNz
X3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1RPfTovLyR7SE9TVH0vaXB5dGhvbi8ke1BP
UlQ9Cn0vbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5iJykKLW5vdGVib29r
X2xvZ2luX3VybCA9M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1RPfTovLyR7SE9TVH0vaXB5dGhv
bi8ke1BPUlR9PQovbG9naW4nKQorbm90ZWJvb2tfbG9naW5fdXJsID0zRCBpZS51cmxfdGVtcGxh
dGUoJyR7UFJPVE99Oi8vJHtIT1NUfS9pcHl0aG9uLyR7UE9SVH09Ci9sb2dpbj9uZXh0PTNEJTJG
aXB5dGhvbiUyRiR7UE9SVH0lMkZ0cmVlJykKPTIwCiBkb2NrZXJfY21kID0zRCBpZS5kb2NrZXJf
Y21kKHRlbXBfZGlyKQogc3VicHJvY2Vzcy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNEVHJ1ZSkK
CgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvMDUy
YjE5MDE5YmRlLwpDaGFuZ2VzZXQ6ICAgMDUyYjE5MDE5YmRlClVzZXI6ICAgICAgICBlcmFzY2hl
MgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgTW92
ZWQgSlMgZmlsZXMgdG8gc3ViZGlyZWN0b3J5CkFmZmVjdGVkICM6ICA1IGZpbGVzCgpkaWZmIC1y
IGY2N2M4YjM3NGJjN2YwODE4YjdhZTEyNmUxZjZjZTQ0MzEyOTg2MTUgLXIgMDUyYjE5MDE5YmRl
ZTVlMWZiODQxNzE9Cjc4ZmI1NGQ2NGYxYjExNmRhIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vc3RhdGljL2llLmpzCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRp
b25zL2lweXRob24vc3RhdGljL2llLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAot
LyoqCi0gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byByZW1vdmUgY29udGVudCBmcm9tIHRoZSBtYWlu
IGFyZWEgYW5kIGFkZCB0aGUgbm90ZT0KYm9vay4KLSAqIE5vdCBpZGVtcG90ZW50Ci0gKi8KLWZ1
bmN0aW9uIGFwcGVuZF9ub3RlYm9vayh1cmwpewotICAgIGNsZWFyX21haW5fYXJlYSgpOwotICAg
ICQoJyNtYWluJykuYXBwZW5kKCc8b2JqZWN0IGRhdGE9M0QiJyArIHVybCArICciIGhlaWdodD0z
RCI5NSUiIHdpZHRoPQo9M0QiMTAwJSI+JwotICAgICsnPGVtYmVkIHNyYz0zRCInICsgdXJsICsg
JyIgaGVpZ2h0PTNEIjEwMCUiIHdpZHRoPTNEIjEwMCUiLz48L29iamVjdD4nCi0gICAgKTsKLX0K
LQotZnVuY3Rpb24gY2xlYXJfbWFpbl9hcmVhKCl7Ci0gICAgJCgnI3NwaW5uZXInKS5yZW1vdmUo
KTsKLSAgICAkKCcjbWFpbicpLmNoaWxkcmVuKCkucmVtb3ZlKCk7Ci19Ci0KLWZ1bmN0aW9uIGRp
c3BsYXlfc3Bpbm5lcigpewotICAgICAgICAkKCcjbWFpbicpLmFwcGVuZCgnPGltZyBpZD0zRCJz
cGlubmVyIiBzcmM9M0QiJyArIGdhbGF4eV9yb290ICsgJy89CnN0YXRpYy9zdHlsZS9sYXJnZXNw
aW5uZXIuZ2lmIiBzdHlsZT0zRCJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46YXV0bzt0b3A6MD0K
O2xlZnQ6MDtyaWdodDowO2JvdHRvbTowOyI+Jyk7Ci19Ci0KLQotLyoqCi0gKiBUZXN0IGF2YWls
YWJpbGl0eSBvZiBhIFVSTCwgYW5kIGNhbGwgYSBjYWxsYmFjayB3aGVuIGRvbmUuCi0gKiBodHRw
Oi8vc3RhY2tvdmVyZmxvdy5jb20vcS8yNTM5MDIwNi8zNDczNjgKLSAqIEBwYXJhbSB7U3RyaW5n
fSB1cmw6IFVSTCB0byB0ZXN0IGF2YWlsYWJpbGl0eSBvZi4gTXVzdCByZXR1cm4gYSAyMDAgKDMw
PQoyLT4yMDAgaXMgT0spLgotICogQHBhcmFtIHtTdHJpbmd9IGNhbGxiYWNrOiBmdW5jdGlvbiB0
byBjYWxsIG9uY2Ugc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZC4KLSAqCi0gKi8KLWZ1bmN0aW9uIHRl
c3RfaWVfYXZhaWxhYmlsaXR5KHVybCwgc3VjY2Vzc19jYWxsYmFjayl7Ci0gICAgdmFyIHJlcXVl
c3RfY291bnQgPTNEIDA7Ci0gICAgZGlzcGxheV9zcGlubmVyKCk7Ci0gICAgaW50ZXJ2YWwgPTNE
IHNldEludGVydmFsKGZ1bmN0aW9uKCl7Ci0gICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICB0
eXBlOiAiR0VUIiwKLSAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7Ci0gICAgICAgICAg
ICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgc3VjY2Vzc19j
YWxsYmFjaygpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigp
ewotICAgICAgICAgICAgICAgIHJlcXVlc3RfY291bnQrKzsKLSAgICAgICAgICAgICAgICBpZihy
ZXF1ZXN0X2NvdW50ID4gMzApewotICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGlu
dGVydmFsKTsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJfbWFpbl9hcmVhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHRvYXN0ci5lcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDb3Vs
ZCBub3QgY29ubmVjdCB0byBJRSwgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0PQpvciIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiRXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgeydj
bG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rpc209Cmlzcyc6IGZh
bHNlfQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSwgMTAwMCk7Ci19CgpkaWZmIC1yIGY2N2M4YjM3NGJj
N2YwODE4YjdhZTEyNmUxZjZjZTQ0MzEyOTg2MTUgLXIgMDUyYjE5MDE5YmRlZTVlMWZiODQxNzE9
Cjc4ZmI1NGQ2NGYxYjExNmRhIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
c3RhdGljL2lweXRob24uanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9zdGF0aWMvaXB5dGhvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLWZ1
bmN0aW9uIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFzc3dvcmQpewotICAgIHRvYXN0ci5pbmZvKAot
ICAgICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24gZmFpbGVkLiBZb3UgY2FuIG1hbnVhbGx5
IGxvZ2luIHdpdGg6PGJyPiI9CiArIHBhc3N3b3JkICsgIjxicj48YSBocmVmPTNEJ2h0dHBzOi8v
Z2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vdz0KaWtpL0F1dG9tYXRpYy1BdXRo
b3JpemF0aW9uLUZhaWxlZCcgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4i
LAotICAgICAgICAiUGxlYXNlIGxvZ2luIG1hbnVhbGx5IiwKLSAgICAgICAgeydjbG9zZUJ1dHRv
bic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9Ci0gICAg
KTsKLX0KLQotZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfY29ubmVjdGlvbigpewotICAgIHRvYXN0
ci5lcnJvcigKLSAgICAgICAgIkNvdWxkIG5vdCBjb25uZWN0IHRvIElQeXRob24gTm90ZWJvb2su
IFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pPQpzdHJhdG9yLiA8YSBocmVmPTNEJ2h0dHBzOi8v
Z2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vd2lraS9Db3VsZC09Cm5vdC1jb25u
ZWN0LXRvLUlQeXRob24tTm90ZWJvb2snIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAu
Li48L2E+IiwKLSAgICAiU2VjdXJpdHkgd2FybmluZyIsCi0gICAgICAgIHsnY2xvc2VCdXR0b24n
OiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogdHJ1ZX0KLSAgICApOwot
fQotCi1mdW5jdGlvbiBtZXNzYWdlX25vX2F1dGgoKXsKLSAgICB0b2FzdHIud2FybmluZygKLSAg
ICAgICAgIklQeXRob24gTm90ZWJvb2sgd2FzIGx1bmNoZWQgd2l0aG91dCBhdXRoZW50aWNhdGlv
bi4gVGhpcyBpcyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIu
Y29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtpL0k9ClB5dGhvbi1Ob3RlYm9vay13YXMt
bHVuY2hlZC13aXRob3V0LWF1dGhlbnRpY2F0aW9uJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlID0K
ZGV0YWlscyAuLi48L2E+IiwKLSAgICAgICAgIlNlY3VyaXR5IHdhcm5pbmciLAotICAgICAgICB7
J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwgJ3RhcFRvRGlzbWlzcyc6IGZh
bHNlfQotICAgICk7Ci19Ci0KLQotLyoqCi0gKiBMb2FkIGFuIGludGVyYWN0aXZlIGVudmlyb25t
ZW50IChJRSkgZnJvbSBhIHJlbW90ZSBVUkwKLSAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZDog
cGFzc3dvcmQgdXNlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHJlbW90ZSByPQplc291cmNlCi0g
KiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfbG9naW5fdXJsOiBVUkwgdGhhdCBzaG91bGQgYmUg
UE9TVGVkIHRvIGZvciBsbz0KZ2luCi0gKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfYWNjZXNz
X3VybDogdGhlIFVSTCBlbWJlZGVkIGluIHRoZSBwYWdlIGFuZCBsbz0KYWRlZAotICoKLSAqLwot
ZnVuY3Rpb24gbG9hZF9ub3RlYm9vayhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3Rl
Ym9va19hY2Nlc3NfdXJsKXsKLSAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgewot
ICAgICAgICAvLyBUZXN0IG5vdGVib29rX2xvZ2luX3VybCBmb3IgYWNjZXNzaWJpbGl0eSwgZXhl
Y3V0aW5nIHRoZSBsb2dpbis9CmxvYWQgZnVuY3Rpb24gd2hlbmV2ZXIKLSAgICAgICAgLy8gd2Un
dmUgc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byB0aGUgSUUuCi0gICAgICAgIHRlc3RfaWVfYXZh
aWxhYmlsaXR5KG5vdGVib29rX2xvZ2luX3VybCwgZnVuY3Rpb24oKXsKLSAgICAgICAgICAgIF9o
YW5kbGVfbm90ZWJvb2tfbG9hZGluZyhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3Rl
Ym9vPQprX2FjY2Vzc191cmwpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotLyoqCi0gKiBN
dXN0IGJlIGltcGxlbWVudGVkIGJ5IElFcwotICovCi1mdW5jdGlvbiBfaGFuZGxlX25vdGVib29r
X2xvYWRpbmcocGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYT0KY2Nlc3Nf
dXJsKXsKLSAgICBpZiAoIGllX3Bhc3N3b3JkX2F1dGggKSB7Ci0gICAgICAgIC8vIE1ha2UgYW4g
QUpBWCBQT1NUCi0gICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICB0eXBlOiAiUE9TVCIsCi0g
ICAgICAgICAgICAvLyB0byB0aGUgTG9naW4gVVJMCi0gICAgICAgICAgICB1cmw6IG5vdGVib29r
X2xvZ2luX3VybCwKLSAgICAgICAgICAgIC8vIFdpdGggb3VyIHBhc3N3b3JkCi0gICAgICAgICAg
ICBkYXRhOiB7Ci0gICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJzogcGFzc3dvcmQKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICB4aHJGaWVsZHM6IHsKLSAgICAgICAgICAgICAgICB3aXRoQ3Jl
ZGVudGlhbHM6IHRydWUKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBJZiB0aGF0IGlz
IHN1Y2Nlc3NmdWwsIGxvYWQgdGhlIG5vdGVib29rCi0gICAgICAgICAgICBzdWNjZXNzOiBmdW5j
dGlvbigpewotICAgICAgICAgICAgICAgIGFwcGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3Nf
dXJsKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oanF4aHIs
IHN0YXR1cywgZXJyb3IpewotICAgICAgICAgICAgICAgIGlmKGllX3Bhc3N3b3JkX2F1dGggJiYg
IWllX2FwYWNoZV91cmxzKXsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmFpbHVyZSBoYXBwZW5z
IGR1ZSB0byBDT1JTCi0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFz
c3dvcmQpOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNj
ZXNzX3VybCk7Ci0gICAgICAgICAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VfZmFpbGVkX2Nvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2Ug
d2FudCB0byB0cnkgYW5kIGxvYWQgdGhlIG5vdGVib29rIGFueXdheT8gSnVzPQp0IGluIGNhc2U/
Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJs
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0K
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gTm90IHVzaW5nIHBhc3N3b3JkIGF1dGgsIGp1c3QgZW1i
ZWQgaXQgdG8gYXZvaWQgY29udGVudC1vcmlnaW4gPQppc3N1ZXMuCi0gICAgICAgIG1lc3NhZ2Vf
bm9fYXV0aCgpOwotICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7
Ci0gICAgfQotfQoKZGlmZiAtciBmNjdjOGIzNzRiYzdmMDgxOGI3YWUxMjZlMWY2Y2U0NDMxMjk4
NjE1IC1yIDA1MmIxOTAxOWJkZWU1ZTFmYjg0MTcxPQo3OGZiNTRkNjRmMWIxMTZkYSBjb25maWcv
cGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwotLS0gL2Rldi9u
dWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2pz
L2llLmpzCkBAIC0wLDAgKzEsNTMgQEAKKy8qKgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVt
b3ZlIGNvbnRlbnQgZnJvbSB0aGUgbWFpbiBhcmVhIGFuZCBhZGQgdGhlIG5vdGU9CmJvb2suCisg
KiBOb3QgaWRlbXBvdGVudAorICovCitmdW5jdGlvbiBhcHBlbmRfbm90ZWJvb2sodXJsKXsKKyAg
ICBjbGVhcl9tYWluX2FyZWEoKTsKKyAgICAkKCcjbWFpbicpLmFwcGVuZCgnPG9iamVjdCBkYXRh
PTNEIicgKyB1cmwgKyAnIiBoZWlnaHQ9M0QiOTUlIiB3aWR0aD0KPTNEIjEwMCUiPicKKyAgICAr
JzxlbWJlZCBzcmM9M0QiJyArIHVybCArICciIGhlaWdodD0zRCIxMDAlIiB3aWR0aD0zRCIxMDAl
Ii8+PC9vYmplY3Q+JworICAgICk7Cit9CisKK2Z1bmN0aW9uIGNsZWFyX21haW5fYXJlYSgpewor
ICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7CisgICAgJCgnI21haW4nKS5jaGlsZHJlbigpLnJl
bW92ZSgpOworfQorCitmdW5jdGlvbiBkaXNwbGF5X3NwaW5uZXIoKXsKKyAgICAgICAgJCgnI21h
aW4nKS5hcHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlfcm9vdCAr
ICcvPQpzdGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRpb246YWJz
b2x1dGU7bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsiPicpOwor
fQorCisKKy8qKgorICogVGVzdCBhdmFpbGFiaWxpdHkgb2YgYSBVUkwsIGFuZCBjYWxsIGEgY2Fs
bGJhY2sgd2hlbiBkb25lLgorICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjUzOTAyMDYv
MzQ3MzY4CisgKiBAcGFyYW0ge1N0cmluZ30gdXJsOiBVUkwgdG8gdGVzdCBhdmFpbGFiaWxpdHkg
b2YuIE11c3QgcmV0dXJuIGEgMjAwICgzMD0KMi0+MjAwIGlzIE9LKS4KKyAqIEBwYXJhbSB7U3Ry
aW5nfSBjYWxsYmFjazogZnVuY3Rpb24gdG8gY2FsbCBvbmNlIHN1Y2Nlc3NmdWxseSBjb25uZWN0
ZWQuCisgKgorICovCitmdW5jdGlvbiB0ZXN0X2llX2F2YWlsYWJpbGl0eSh1cmwsIHN1Y2Nlc3Nf
Y2FsbGJhY2speworICAgIHZhciByZXF1ZXN0X2NvdW50ID0zRCAwOworICAgIGRpc3BsYXlfc3Bp
bm5lcigpOworICAgIGludGVydmFsID0zRCBzZXRJbnRlcnZhbChmdW5jdGlvbigpeworICAgICAg
ICAkLmFqYXgoeworICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICBzdWNjZXNz
OiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOwor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NfY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICBlcnJvcjogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICByZXF1ZXN0X2NvdW50
Kys7CisgICAgICAgICAgICAgICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKKyAgICAgICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGNs
ZWFyX21haW5fYXJlYSgpOworICAgICAgICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCisgICAg
ICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSUUsIGNvbnRhY3QgeW91
ciBhZG1pbmlzdHJhdD0Kb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIw
MDAwLCAndGFwVG9EaXNtPQppc3MnOiBmYWxzZX0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0sIDEwMDAp
OworfQoKZGlmZiAtciBmNjdjOGIzNzRiYzdmMDgxOGI3YWUxMjZlMWY2Y2U0NDMxMjk4NjE1IC1y
IDA1MmIxOTAxOWJkZWU1ZTFmYjg0MTcxPQo3OGZiNTRkNjRmMWIxMTZkYSBjb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pcHl0aG9uLmpzCi0tLSAvZGV2L251
bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvanMv
aXB5dGhvbi5qcwpAQCAtMCwwICsxLDgyIEBACitmdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9hdXRo
KHBhc3N3b3JkKXsKKyAgICB0b2FzdHIuaW5mbygKKyAgICAgICAgIkF1dG9tYXRpYyBhdXRob3Jp
emF0aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51YWxseSBsb2dpbiB3aXRoOjxicj4iPQogKyBwYXNz
d29yZCArICI8YnI+PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4
eS1pcHl0aG9uL3c9CmlraS9BdXRvbWF0aWMtQXV0aG9yaXphdGlvbi1GYWlsZWQnIHRhcmdldD0z
RCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKKyAgICAgICAgIlBsZWFzZSBsb2dpbiBt
YW51YWxseSIsCisgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDEwMDAw
MCwgJ3RhcFRvRGlzbWlzcyc6IGZhbHNlfQorICAgICk7Cit9CisKK2Z1bmN0aW9uIG1lc3NhZ2Vf
ZmFpbGVkX2Nvbm5lY3Rpb24oKXsKKyAgICB0b2FzdHIuZXJyb3IoCisgICAgICAgICJDb3VsZCBu
b3QgY29ubmVjdCB0byBJUHl0aG9uIE5vdGVib29rLiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWlu
aT0Kc3RyYXRvci4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4
eS1pcHl0aG9uL3dpa2kvQ291bGQtPQpub3QtY29ubmVjdC10by1JUHl0aG9uLU5vdGVib29rJyB0
YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCisgICAgIlNlY3VyaXR5IHdh
cm5pbmciLAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwg
J3RhcFRvRGlzbWlzcyc6IHRydWV9CisgICAgKTsKK30KKworZnVuY3Rpb24gbWVzc2FnZV9ub19h
dXRoKCl7CisgICAgdG9hc3RyLndhcm5pbmcoCisgICAgICAgICJJUHl0aG9uIE5vdGVib29rIHdh
cyBsdW5jaGVkIHdpdGhvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0KY3VyaXR5IGlz
c3VlLiA8YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRo
b24vd2lraS9JPQpQeXRob24tTm90ZWJvb2std2FzLWx1bmNoZWQtd2l0aG91dC1hdXRoZW50aWNh
dGlvbicgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSA9CmRldGFpbHMgLi4uPC9hPiIsCisgICAgICAg
ICJTZWN1cml0eSB3YXJuaW5nIiwKKyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1l
T3V0JzogMjAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworfQorCisKKy8qKgor
ICogTG9hZCBhbiBpbnRlcmFjdGl2ZSBlbnZpcm9ubWVudCAoSUUpIGZyb20gYSByZW1vdGUgVVJM
CisgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmQ6IHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGlj
YXRlIHRvIHRoZSByZW1vdGUgcj0KZXNvdXJjZQorICogQHBhcmFtIHtTdHJpbmd9IG5vdGVib29r
X2xvZ2luX3VybDogVVJMIHRoYXQgc2hvdWxkIGJlIFBPU1RlZCB0byBmb3IgbG89CmdpbgorICog
QHBhcmFtIHtTdHJpbmd9IG5vdGVib29rX2FjY2Vzc191cmw6IHRoZSBVUkwgZW1iZWRlZCBpbiB0
aGUgcGFnZSBhbmQgbG89CmFkZWQKKyAqCisgKi8KK2Z1bmN0aW9uIGxvYWRfbm90ZWJvb2socGFz
c3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3VybCl7CisgICAgJCgg
ZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgLy8gVGVzdCBub3RlYm9va19s
b2dpbl91cmwgZm9yIGFjY2Vzc2liaWxpdHksIGV4ZWN1dGluZyB0aGUgbG9naW4rPQpsb2FkIGZ1
bmN0aW9uIHdoZW5ldmVyCisgICAgICAgIC8vIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQg
dG8gdGhlIElFLgorICAgICAgICB0ZXN0X2llX2F2YWlsYWJpbGl0eShub3RlYm9va19sb2dpbl91
cmwsIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcocGFz
c3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvbz0Ka19hY2Nlc3NfdXJsKTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKKy8qKgorICogTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBJRXMK
KyAqLworZnVuY3Rpb24gX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKHBhc3N3b3JkLCBub3RlYm9v
a19sb2dpbl91cmwsIG5vdGVib29rX2E9CmNjZXNzX3VybCl7CisgICAgaWYgKCBpZV9wYXNzd29y
ZF9hdXRoICkgeworICAgICAgICAvLyBNYWtlIGFuIEFKQVggUE9TVAorICAgICAgICAkLmFqYXgo
eworICAgICAgICAgICAgdHlwZTogIlBPU1QiLAorICAgICAgICAgICAgLy8gdG8gdGhlIExvZ2lu
IFVSTAorICAgICAgICAgICAgdXJsOiBub3RlYm9va19sb2dpbl91cmwsCisgICAgICAgICAgICAv
LyBXaXRoIG91ciBwYXNzd29yZAorICAgICAgICAgICAgZGF0YTogeworICAgICAgICAgICAgICAg
ICdwYXNzd29yZCc6IHBhc3N3b3JkCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeGhyRmll
bGRzOiB7CisgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgLy8gSWYgdGhhdCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBub3Rl
Ym9vaworICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBh
cHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKKyAgICAgICAg
ICAgICAgICBpZihpZV9wYXNzd29yZF9hdXRoICYmICFpZV9hcGFjaGVfdXJscyl7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZhaWx1cmUgaGFwcGVucyBkdWUgdG8gQ09SUworICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlX2ZhaWxlZF9hdXRoKHBhc3N3b3JkKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kX25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgICAgICAgICAgICAg
IH1lbHNleworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2ZhaWxlZF9jb25uZWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgIC8vIERvIHdlIHdhbnQgdG8gdHJ5IGFuZCBsb2FkIHRoZSBu
b3RlYm9vayBhbnl3YXk/IEp1cz0KdCBpbiBjYXNlPworICAgICAgICAgICAgICAgICAgICBhcHBl
bmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIE5v
dCB1c2luZyBwYXNzd29yZCBhdXRoLCBqdXN0IGVtYmVkIGl0IHRvIGF2b2lkIGNvbnRlbnQtb3Jp
Z2luID0KaXNzdWVzLgorICAgICAgICBtZXNzYWdlX25vX2F1dGgoKTsKKyAgICAgICAgYXBwZW5k
X25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgIH0KK30KCmRpZmYgLXIgZjY3Yzhi
Mzc0YmM3ZjA4MThiN2FlMTI2ZTFmNmNlNDQzMTI5ODYxNSAtciAwNTJiMTkwMTliZGVlNWUxZmI4
NDE3MT0KNzhmYjU0ZDY0ZjFiMTE2ZGEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFs
aXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVn
aW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNTAs
NyArNTAsNyBAQAogcmVxdWlyZS5jb25maWcoewogICAgIGJhc2VVcmw6IGFwcF9yb290LAogICAg
IHBhdGhzOiB7Ci0gICAgICAgICJwbHVnaW4iIDogYXBwX3Jvb3QsCisgICAgICAgICJwbHVnaW4i
IDogYXBwX3Jvb3QgKyAianMvIiwKICAgICB9LAogfSk7CiByZXF1aXJlanMoWydwbHVnaW4vaWUn
LCAncGx1Z2luL2lweXRob24nXSwgZnVuY3Rpb24oKXsKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv
Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZGY4NTYzZGYxYTJhLwpDaGFuZ2VzZXQ6ICAg
ZGY4NTYzZGYxYTJhClVzZXI6ICAgICAgICBCam9lcm5HcnVlbmluZwpEYXRlOiAgICAgICAgMjAx
NC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgTWlncmF0ZSBmcm9tIDxvYmplY3Q+
IHRvIDxpZnJhbWU+LiBPYmplY3RzIHNlZW1zIHRvIGhhdmUgc29tZSA9CmJ1Z3MgaW4gRkYzMi4K
Q29uZmxpY3RzOgoJc3RhdGljL2pzL2lweXRob24uanMKQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlm
ZiAtciAwNTJiMTkwMTliZGVlNWUxZmI4NDE3MTc4ZmI1NGQ2NGYxYjExNmRhIC1yIGRmODU2M2Rm
MWEyYTBiOThhNjkxMTM4PQpjZDNkZjQwZDdiMTU2YWM5YSBjb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcworKysgYi9jb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwpAQCAtNCw4ICs0LDcgQEAKICAq
LwogZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7CiAgICAgY2xlYXJfbWFpbl9hcmVhKCk7
Ci0gICAgJCgnI21haW4nKS5hcHBlbmQoJzxvYmplY3QgZGF0YT0zRCInICsgdXJsICsgJyIgaGVp
Z2h0PTNEIjk1JSIgd2lkdGg9Cj0zRCIxMDAlIj4nCi0gICAgKyc8ZW1iZWQgc3JjPTNEIicgKyB1
cmwgKyAnIiBoZWlnaHQ9M0QiMTAwJSIgd2lkdGg9M0QiMTAwJSIvPjwvb2JqZWN0PicKKyAgICAk
KCcjbWFpbicpLmFwcGVuZCgnPGlmcmFtZSBmcmFtZUJvcmRlcj0zRCIwIiBzZWFtbGVzcz0zRCJz
ZWFtbGVzcyIgc3R5PQpsZT0zRCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzpo
aWRkZW47IiBzY3JvbGxpbmc9M0Qibm8iIHNyYz0zRCI9CicrIHVybCArJyI+PC9pZnJhbWU+Jwog
ICAgICk7CiB9Cj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy
YWwvY29tbWl0cy85YTU0ODg2NzZlYTkvCkNoYW5nZXNldDogICA5YTU0ODg2NzZlYTkKVXNlcjog
ICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4OjA0KzAwOjAwClN1
bW1hcnk6ICAgICBQYXRjaCByZXF1ZXN0ZWQgYnkgQmpvZXJuClRlc3RlZCwgd29ya3MuCkFmZmVj
dGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgZGY4NTYzZGYxYTJhMGI5OGE2OTExMzhjZDNkZjQwZDdi
MTU2YWM5YSAtciA5YTU0ODg2NzZlYTkxOTczZDUzZTA3Mj0KMjJjOTYwMWJhZmM4NjY0OTggY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0g
YS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtv
CisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2ll
Lm1ha28KQEAgLTM4LDExICszOCw3IEBACiAgICAgc2VsZi5hdHRyLlNTTF9VUkxTID0zRCBzZWxm
LmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIpCiAgICAgc2VsZi5hdHRy
LlBPUlQgPTNEIHNlbGYucHJveHlfcmVxdWVzdF9wb3J0KCkKPTIwCi0gICAgSE9TVCA9M0QgcmVx
dWVzdC5ob3N0Ci0gICAgIyBTdHJpcCBvdXQgcG9ydCwgd2UganVzdCB3YW50IHRoZSBVUkwgdGhp
cyBnYWxheHkgc2VydmVyIHdhcyBhY2Nlc3NlZD0KIGF0LgotICAgIGlmICc6JyBpbiBIT1NUOgot
ICAgICAgICBIT1NUID0zRCBIT1NUWzA6SE9TVC5pbmRleCgnOicpXQotICAgIHNlbGYuYXR0ci5I
T1NUID0zRCBIT1NUCisgICAgc2VsZi5hdHRyLkhPU1QgPTNEIHJlcXVlc3QuaG9zdC5yc3BsaXQo
JzonLCAxKVswXQogJT48LyVkZWY+Cj0yMAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkv
Z2FsYXh5LWNlbnRyYWwvY29tbWl0cy8yODIxODZjMzkzYjQvCkNoYW5nZXNldDogICAyODIxODZj
MzkzYjQKVXNlcjogICAgICAgIGVyYXNjaGUyCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4IDIyOjM4
OjA0KzAwOjAwClN1bW1hcnk6ICAgICBSZW1vdmVkIHVudXNlZCBpbXBvcnRzCkFmZmVjdGVkICM6
ICAxIGZpbGUKCmRpZmYgLXIgOWE1NDg4Njc2ZWE5MTk3M2Q1M2UwNzIyMmM5NjAxYmFmYzg2NjQ5
OCAtciAyODIxODZjMzkzYjQ2MjRhNWNjMzFlOD0KM2RlNzdiNzZkMTkwOGQ5OGQgY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBi
L2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28K
QEAgLTEsMTMgKzEsMTAgQEAKIDwlIQogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGlt
ZQogaW1wb3J0IHlhbWwKIGltcG9ydCBzaGxleAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNodXRp
bAogaW1wb3J0IGhhc2hsaWIKLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHN1YnByb2Nlc3MKIGlt
cG9ydCBDb25maWdQYXJzZXIKPTIwCgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxh
eHktY2VudHJhbC9jb21taXRzLzEwMDk4Mjc3NTRjMi8KQ2hhbmdlc2V0OiAgIDEwMDk4Mjc3NTRj
MgpVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQr
MDA6MDAKU3VtbWFyeTogICAgIE1pc3NpbmcgVVJMIG9uIGFqYXggcmVxdWVzdApUaGlzIHdhcyBj
YXVzaW5nIHNlcmlvdXMgaGF2b2NrIHdpdGggdGhlIFJTdHVkaW8gdmVyc2lvbiwgbm90IHN1cmUg
d2h5IHRoZSA9CnByb2JsZW1zIHdlcmVuJ3QKcHJlc2VudGluZyBhcyBiYWRseSBoZXJlLiBXaXRo
b3V0IGEgVVJMLCB0aGUgYWpheCByZXF1ZXN0IHJlcXVlc3RzIHRoZSBwYWdlPQogeW91J3JlIG9u
LCBzcGF3bmluZwpkb3plbnMgYW5kIGRvemVucyBvZiBkb2NrZXIgY29udGFpbmVycy4KQWZmZWN0
ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAyODIxODZjMzkzYjQ2MjRhNWNjMzFlODNkZTc3Yjc2ZDE5
MDhkOThkIC1yIDEwMDk4Mjc3NTRjMjgzODBlYTA4ZGMyPQpjMmM5N2NkYmZhOWMzMzAyMyBjb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwotLS0gYS9j
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcworKysg
Yi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwpA
QCAtMzAsNiArMzAsNyBAQAogICAgIGRpc3BsYXlfc3Bpbm5lcigpOwogICAgIGludGVydmFsID0z
RCBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAg
dXJsOiB1cmwsCiAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgIHN1Y2Nlc3M6
IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CgoK
aHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzLzVjYWI4
MDQzNjAyYS8KQ2hhbmdlc2V0OiAgIDVjYWI4MDQzNjAyYQpVc2VyOiAgICAgICAgZXJhc2NoZTIK
RGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEZpeGVz
ICMyNwpBZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciAxMDA5ODI3NzU0YzI4MzgwZWEwOGRj
MmMyYzk3Y2RiZmE5YzMzMDIzIC1yIDVjYWI4MDQzNjAyYTVlYmRkYmJmOTJlPQo2MmFkYjFiNmI4
YTdiMTAxNiBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
ZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxh
dGVzL2llLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90
ZW1wbGF0ZXMvaWUubWFrbwpAQCAtMjIsMTMgKzIyLDEzIEBACiAgICAgc2VsZi5hdHRyLmdhbGF4
eV9jb25maWcgPTNEIHRyYW5zLmFwcC5jb25maWcKICAgICBzZWxmLmF0dHIuZ2FsYXh5X3Jvb3Rf
ZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuPQpyb290KQog
ICAgIHNlbGYuYXR0ci5yb290ID0zRCBoLnVybF9mb3IoIi8iKQotICAgIHNlbGYuYXR0ci5hcHBf
cm9vdCA9M0Qgc2VsZi5hdHRyLnJvb3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG89
Cm4vc3RhdGljLyIKKyAgICBzZWxmLmF0dHIuYXBwX3Jvb3QgPTNEIHNlbGYuYXR0ci5yb290ICsg
InBsdWdpbnMvdmlzdWFsaXphdGlvbnMvIiArIHNlPQpsZi5hdHRyLnZpel9pZCArICIvc3RhdGlj
LyIKPTIwCiAgICAgIyBTdG9yZSBvdXIgdGVtcGxhdGUgYW5kIGNvbmZpZ3VyYXRpb24gcGF0aAog
ICAgIHNlbGYuYXR0ci5vdXJfY29uZmlnX2RpciA9M0Qgb3MucGF0aC5qb2luKHBsdWdpbl9wYXRo
LCAiY29uZmlnIikKICAgICBzZWxmLmF0dHIub3VyX3RlbXBsYXRlX2RpciA9M0Qgb3MucGF0aC5q
b2luKHBsdWdpbl9wYXRoLCAidGVtcGxhdGVzIikKICAgICBzZWxmLmF0dHIudml6X2NvbmZpZyA9
M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoZGVmYXVsdF9kaWN0KQotICAgIHNlbGYu
YXR0ci52aXpfY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggc2VsZi5hdHRyLm91cl9jb25maWdf
ZGlyLCAiaXA9Cnl0aG9uLmNvbmYiICkgKQorICAgIHNlbGYuYXR0ci52aXpfY29uZmlnLnJlYWQo
IG9zLnBhdGguam9pbiggc2VsZi5hdHRyLm91cl9jb25maWdfZGlyLCBzZWw9CmYuYXR0ci52aXpf
aWQgKyAiLmNvbmYiICkgKQogICAgICMgU3RvcmUgc29tZSB2YXJpYWJsZXMgd2Ugd2FudCBieSBk
ZWZhdWx0CiAgICAgc2VsZi5hdHRyLlBBU1NXT1JEX0FVVEggPTNEIHNlbGYuYXR0ci52aXpfY29u
ZmlnLmdldGJvb2xlYW4oIm1haW4iLCAicD0KYXNzd29yZF9hdXRoIikKICAgICBzZWxmLmF0dHIu
QVBBQ0hFX1VSTFMgPTNEIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAi
YXBhPQpjaGVfdXJscyIpCkBAIC0zOSw3ICszOSw3IEBACiAlPjwvJWRlZj4KPTIwCi08JWRlZiBu
YW1lPTNEIndyaXRlX2NvbmZfZmlsZShvdXRwdXRfZGlyZWN0b3J5KSI+Cis8JWRlZiBuYW1lPTNE
IndyaXRlX2NvbmZfZmlsZShvdXRwdXRfZGlyZWN0b3J5LCBleHRyYT0zRHt9KSI+PCUKICAgICAi
IiIKICAgICAgICAgQnVpbGQgdXAgYSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzdGFuZGFy
ZCBmb3IgQUxMIElFcy4KQEAgLTY4LDYgKzY4LDEwIEBACiAgICAgZWxzZToKICAgICAgICAgbm90
ZWJvb2tfcHcgPTNEICJOb25lIgo9MjAKKyAgICAjIFNvbWUgd2lsbCBuZWVkIHRvIHBhc3MgZXh0
cmEgZGF0YQorICAgIGZvciBleHRyYV9rZXkgaW4gZXh0cmE6CisgICAgICAgIGNvbmZfZmlsZVtl
eHRyYV9rZXldID0zRCBleHRyYVtleHRyYV9rZXldCisKICAgICBzZWxmLmF0dHIubm90ZWJvb2tf
cHcgPTNEIG5vdGVib29rX3B3CiAgICAgIyBXcml0ZSBjb25mCiAgICAgd2l0aCBvcGVuKCBvcy5w
YXRoLmpvaW4oIG91dHB1dF9kaXJlY3RvcnksICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYT0K
bmRsZToKQEAgLTE4OCw5ICsxOTIsOSBAQAogICAgICIiIgogICAgICAgICBHZW5lcmF0ZSBhbmQg
cmV0dXJuIHRoZSBkb2NrZXIgY29tbWFuZCB0byBleGVjdXRlCiAgICAgIiIiCi0gICAgcmV0dXJu
ICclcyBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOjY3ODkgLXYgIiVzOi9pbXBvcnQv
IiAlcycgJT0KIFwKLSAgICAgICAgKHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwg
ImNvbW1hbmQiKSwgc2VsZi5hdHRyLlBPUlQsIHRlPQptcF9kaXIsCi0gICAgICAgICBzZWxmLmF0
dHIudml6X2NvbmZpZy5nZXQoImRvY2tlciIsICJpbWFnZSIpKQorICAgIHJldHVybiAnJXMgcnVu
IC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczolcyAtdiAiJXM6L2ltcG9ydC8iICVzJyAlIFwK
KyAgICAgICAgKHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImNvbW1hbmQiKSwg
c2VsZi5hdHRyLlBPUlQsIHNlPQpsZi5hdHRyLmRvY2tlcl9wb3J0LAorICAgICAgICAgdGVtcF9k
aXIsIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikpCiAlPjwvJWRl
Zj4KPTIwCkBAIC0yMDAsNyArMjA0LDYgQEAKIGllX3Bhc3N3b3JkX2F1dGggPTNEICR7IHNlbGYu
amF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIKSB9OwogaWVfYXBhY2hl
X3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5BUEFDSEVfVVJM
UykgfTsKIGllX3Bhc3N3b3JkID0zRCAnJHsgc2VsZi5hdHRyLm5vdGVib29rX3B3IH0nOwotLy8g
RG8gdGhlc2UgbmVlZCB0byBiZSBnbG9iYWwgYXMgd2VsbD8/CiB2YXIgZ2FsYXh5X3Jvb3QgPTNE
ICckeyBzZWxmLmF0dHIucm9vdCB9JzsKIHZhciBhcHBfcm9vdCA9M0QgJyR7IHNlbGYuYXR0ci5h
cHBfcm9vdCB9JzsKIDwvJWRlZj4KCmRpZmYgLXIgMTAwOTgyNzc1NGMyODM4MGVhMDhkYzJjMmM5
N2NkYmZhOWMzMzAyMyAtciA1Y2FiODA0MzYwMmE1ZWJkZGJiZjkyZT0KNjJhZGIxYjZiOGE3YjEw
MTYgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhv
bi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtNyw2ICs3LDcgQEAKPTIwCiAjIFNldHMg
SUQgYW5kIHNldHMgdXAgYSBsb3Qgb2Ygb3RoZXIgdmFyaWFibGVzCiBpZS5zZXRfaWQoImlweXRo
b24iKQoraWUuYXR0ci5kb2NrZXJfcG9ydCA9M0QgNjc4OQogIyBDcmVhdGUgdGVtcGRpciBpbiBn
YWxheHkKIHRlbXBfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgoIHRlbXBmaWxlLm1rZHRlbXAoKSAp
CiAjIFdyaXRlIG91dCBjb25mIGZpbGUuLi5uZWVkcyB3b3JrCgoKaHR0cHM6Ly9iaXRidWNrZXQu
b3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2I1MDYxNTU3M2RlZC8KQ2hhbmdlc2V0
OiAgIGI1MDYxNTU3M2RlZApVc2VyOiAgICAgICAgZXJhc2NoZTIKRGF0ZTogICAgICAgIDIwMTQt
MTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFNldCB0aW1lb3V0IGxvd2VyIHRoYW4g
dGltZSBiZXR3ZWVuIHJlcXVlc3RzCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNWNhYjgw
NDM2MDJhNWViZGRiYmY5MmU2MmFkYjFiNmI4YTdiMTAxNiAtciBiNTA2MTU1NzNkZWRlZDRjMDY3
ZDI0Nj0KODllMmEwYmM4YWI1NWUzN2YgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9zdGF0aWMvanMvaWUuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9zdGF0aWMvanMvaWUuanMKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlv
bnMvaXB5dGhvbi9zdGF0aWMvanMvaWUuanMKQEAgLTMyLDEyICszMiwxNSBAQAogICAgICAgICAk
LmFqYXgoewogICAgICAgICAgICAgdXJsOiB1cmwsCiAgICAgICAgICAgICB0eXBlOiAiR0VUIiwK
KyAgICAgICAgICAgIHRpbWVvdXQ6IDUwMCwKICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9u
KCl7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIkNvbm5lY3RlZCB0byBJRSwgcmV0dXJu
aW5nIik7CiAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAg
ICAgICAgICAgc3VjY2Vzc19jYWxsYmFjaygpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IGVycm9yOiBmdW5jdGlvbigpeworICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBz
dGF0dXMsIGVycm9yKXsKICAgICAgICAgICAgICAgICByZXF1ZXN0X2NvdW50Kys7CisgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coIlJlcXVlc3QgIiArIHJlcXVlc3RfY291bnQpOwogICAgICAg
ICAgICAgICAgIGlmKHJlcXVlc3RfY291bnQgPiAzMCl7CiAgICAgICAgICAgICAgICAgICAgIGNs
ZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOwogICAgICAgICAgICAgICAgICAgICBjbGVhcl9tYWluX2Fy
ZWEoKTsKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1p
dHMvNTNlOTJlNWJlN2FiLwpDaGFuZ2VzZXQ6ICAgNTNlOTJlNWJlN2FiClVzZXI6ICAgICAgICBq
bWNoaWx0b24KRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTog
ICAgIEZpeCBjb25mIC0+IGNvbmZpZyBoYWNrIGluIElQeXRob24gZm9yIGhpc3RvcnkgcmV3cml0
ZS4KQWZmZWN0ZWQgIzogIDQgZmlsZXMKCmRpZmYgLXIgYjUwNjE1NTczZGVkZWQ0YzA2N2QyNDY4
OWUyYTBiYzhhYjU1ZTM3ZiAtciA1M2U5MmU1YmU3YWIyYWY1MDMyZTZmMz0KYWU4ODEyNDQwNGY5
YWU0YjQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25mL2lweXRob24u
Y29uZgotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5
dGhvbi5jb25mCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1bbWFpbl0KLWFwYWNoZV91
cmxzID0zRCBGYWxzZQotcGFzc3dvcmRfYXV0aCA9M0QgRmFsc2UKLXNzbCA9M0QgRmFsc2UKLQot
W2RvY2tlcl0KLWNvbW1hbmQgPTNEIGRvY2tlcgotaW1hZ2UgPTNEIGJncnVlbmluZy9kb2NrZXIt
aXB5dGhvbi1ub3RlYm9vawotCgpkaWZmIC1yIGI1MDYxNTU3M2RlZGVkNGMwNjdkMjQ2ODllMmEw
YmM4YWI1NWUzN2YgLXIgNTNlOTJlNWJlN2FiMmFmNTAzMmU2ZjM9CmFlODgxMjQ0MDRmOWFlNGI0
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZi9pcHl0aG9uLnhtbAot
LS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmYvaXB5dGhvbi54
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPTNEIjEuMCIg
ZW5jb2Rpbmc9M0QiVVRGLTgiPz4KLTwhRE9DVFlQRSB2aXN1YWxpemF0aW9uIFNZU1RFTSAiLi4v
Li4vdmlzdWFsaXphdGlvbi5kdGQiPgotPHZpc3VhbGl6YXRpb24gbmFtZT0zRCJJUHl0aG9uIj4K
LSAgICA8ZGF0YV9zb3VyY2VzPgotICAgICAgICA8ZGF0YV9zb3VyY2U+Ci0gICAgICAgICAgICA8
bW9kZWxfY2xhc3M+SGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbjwvbW9kZWxfY2xhc3M+Ci0gICAg
ICAgICAgICA8dGVzdCB0eXBlPTNEImlzaW5zdGFuY2UiIHRlc3RfYXR0cj0zRCJkYXRhdHlwZSIg
cmVzdWx0X3R5cGU9Cj0zRCJkYXRhdHlwZSI+dGFidWxhci5UYWJ1bGFyPC90ZXN0PgotICAgICAg
ICAgICAgPHRlc3QgdHlwZT0zRCJpc2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJl
c3VsdF90eXBlPQo9M0QiZGF0YXR5cGUiPmRhdGEuVGV4dDwvdGVzdD4KLSAgICAgICAgICAgIDx0
b19wYXJhbSBwYXJhbV9hdHRyPTNEImlkIj5kYXRhc2V0X2lkPC90b19wYXJhbT4KLSAgICAgICAg
PC9kYXRhX3NvdXJjZT4KLSAgICA8L2RhdGFfc291cmNlcz4KLSAgICA8cGFyYW1zPgotICAgICAg
ICA8cGFyYW0gdHlwZT0zRCJkYXRhc2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJl
cXVpcmVkPTNEInQ9CnJ1ZSI+ZGF0YXNldF9pZDwvcGFyYW0+Ci0gICAgPC9wYXJhbXM+Ci0gICAg
PHRlbXBsYXRlPmlweXRob24ubWFrbzwvdGVtcGxhdGU+Ci08L3Zpc3VhbGl6YXRpb24+CgpkaWZm
IC1yIGI1MDYxNTU3M2RlZGVkNGMwNjdkMjQ2ODllMmEwYmM4YWI1NWUzN2YgLXIgNTNlOTJlNWJl
N2FiMmFmNTAzMmU2ZjM9CmFlODgxMjQ0MDRmOWFlNGI0IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vY29uZmlnL2lweXRob24uY29uZgotLS0gL2Rldi9udWxsCisrKyBiL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZmlnL2lweXRob24uY29uZgpA
QCAtMCwwICsxLDkgQEAKK1ttYWluXQorYXBhY2hlX3VybHMgPTNEIEZhbHNlCitwYXNzd29yZF9h
dXRoID0zRCBGYWxzZQorc3NsID0zRCBGYWxzZQorCitbZG9ja2VyXQorY29tbWFuZCA9M0QgZG9j
a2VyCitpbWFnZSA9M0QgYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLW5vdGVib29rCisKCmRpZmYg
LXIgYjUwNjE1NTczZGVkZWQ0YzA2N2QyNDY4OWUyYTBiYzhhYjU1ZTM3ZiAtciA1M2U5MmU1YmU3
YWIyYWY1MDMyZTZmMz0KYWU4ODEyNDQwNGY5YWU0YjQgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi54bWwKLS0tIC9kZXYvbnVsbAorKysgYi9jb25m
aWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmZpZy9pcHl0aG9uLnhtbApAQCAt
MCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPTNEIjEuMCIgZW5jb2Rpbmc9M0QiVVRGLTgiPz4K
KzwhRE9DVFlQRSB2aXN1YWxpemF0aW9uIFNZU1RFTSAiLi4vLi4vdmlzdWFsaXphdGlvbi5kdGQi
PgorPHZpc3VhbGl6YXRpb24gbmFtZT0zRCJJUHl0aG9uIj4KKyAgICA8ZGF0YV9zb3VyY2VzPgor
ICAgICAgICA8ZGF0YV9zb3VyY2U+CisgICAgICAgICAgICA8bW9kZWxfY2xhc3M+SGlzdG9yeURh
dGFzZXRBc3NvY2lhdGlvbjwvbW9kZWxfY2xhc3M+CisgICAgICAgICAgICA8dGVzdCB0eXBlPTNE
ImlzaW5zdGFuY2UiIHRlc3RfYXR0cj0zRCJkYXRhdHlwZSIgcmVzdWx0X3R5cGU9Cj0zRCJkYXRh
dHlwZSI+dGFidWxhci5UYWJ1bGFyPC90ZXN0PgorICAgICAgICAgICAgPHRlc3QgdHlwZT0zRCJp
c2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJlc3VsdF90eXBlPQo9M0QiZGF0YXR5
cGUiPmRhdGEuVGV4dDwvdGVzdD4KKyAgICAgICAgICAgIDx0b19wYXJhbSBwYXJhbV9hdHRyPTNE
ImlkIj5kYXRhc2V0X2lkPC90b19wYXJhbT4KKyAgICAgICAgPC9kYXRhX3NvdXJjZT4KKyAgICA8
L2RhdGFfc291cmNlcz4KKyAgICA8cGFyYW1zPgorICAgICAgICA8cGFyYW0gdHlwZT0zRCJkYXRh
c2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJlcXVpcmVkPTNEInQ9CnJ1ZSI+ZGF0
YXNldF9pZDwvcGFyYW0+CisgICAgPC9wYXJhbXM+CisgICAgPHRlbXBsYXRlPmlweXRob24ubWFr
bzwvdGVtcGxhdGU+Cis8L3Zpc3VhbGl6YXRpb24+CgoKaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dh
bGF4eS9nYWxheHktY2VudHJhbC9jb21taXRzL2E3YjllYjNkZjM3ZC8KQ2hhbmdlc2V0OiAgIGE3
YjllYjNkZjM3ZApVc2VyOiAgICAgICAgam1jaGlsdG9uCkRhdGU6ICAgICAgICAyMDE0LTEwLTE4
IDIyOjM4OjA0KzAwOjAwClN1bW1hcnk6ICAgICBEeW5hbWljIEdhbGF4eSBzZXNzaW9uIGF3YXJl
IHByb3h5IGZvciBJUHl0aG9uLCBvdGhlciBzdWNoIHBsdT0KZ2lucy4KVGhpcyBpcyB2ZXJ5IG11
Y2ggYW4gZXhwZXJtaW50YWwgY29tcG9uZW50IGFuZCBwbHVnaW4gZGV2ZWxvcGVycyBzaG91bGRu
J3QgPQpleHBlY3QgdGhlIEFQSSB0byBiZSBzdGFibGUgYXQgdGhpcyBwb2ludC4gVGhpcyBhbGxv
d3MgcGx1Z2luIGRldmVsb3BlcnMgdG89CiBlbnN1cmUgSFRUUCBhY2Nlc3MgdG8gYSBzaW5nbGUg
cG9ydCBpcyByb3V0ZXMgdG8gdmFyaW91cyBwb3J0cyBpbnRlcm5hbGx5ID0KYmFzZWQgb24gdGhl
IEdhbGF4eSBzZXNzaW9uIG9mIHRoZSB1c2VyIGFjY2Vzc2luZyB0aGUgcmVzb3VyY2UuCgpJdCBp
cyBmcnVzdHJhdGluZyB0aGF0IEkgbmVlZCB0byB1c2UgYSBub2RlLWJhc2VkIGNvbXBvbmVudCBm
b3IgdGhpcyBidXQgYWY9CnRlciBuaWdodHMgb2YgdHJ5aW5nIEkgd2FzIHVuYWJsZSB0byByZXBy
b2R1Y2UgYSBwcm94eSB0aGF0IHdvcmtzIGJvdGggZHluYT0KbWljYWxseSBhbmQgd2l0aCB3ZWIg
c29ja2V0cyBpbiBhbnkgUHl0aG9uIGJhc2VkIHdlYiBmcmFtZXdvcmsuIEkgdHJpZWQgdHdpPQpz
dGVkLCB1d3NnaSwgdG9ybmFkby4gTXkgZGVjaXNpb24gdG8gdXNlIG5vZGUgd2FzIGJ1dHRyZXNz
ZWQgYnkgdGhlIElQeXRob249CiB0ZWFtIHV0aWxpemluZyB0aGUgc2FtZSBmcmFtZXdvcmsgZm9y
IHRoZSBzYW1lIHJlYXNvbnMgZm9yIHRoZWlyIHdvcmsgb24gSj0KdXlwdGVyIC0gaHR0cHM6Ly9n
aXRodWIuY29tL2p1cHl0ZXIvanVweXRlcmh1Yi4KClRoaXMgaXMgc3RpbGwgdmVyeSBtdWNoIGEg
d29yayBpbiBwcm9ncmVzcyBidXQgaXQgd2FzIGxhbmd1aXNoaW5nIGluIG15IGdpdD0KaHViIHJl
cG9zaXRvcnkgYW5kIEkgYW0gd2FudCB0byBnZXQgaXQgY29tbWl0dGVkIHNvIGNvbW11bml0eSBj
YW4gaGFjayBvbiBpPQp0IGFuZCBzdWdnZXN0IChvciBzdXBwbHkpIGltcHJvdmVtZW50cy4KClRP
RE8KLSBSZXBsYWNlIGZpbGUgb3BlcmF0aW9ucyB3aXRoIHNxbGl0ZSBkYXRhYmFzZSArIHdyaXRl
IGZpbGUgbG9jayAoZm9yIG11bHRpPQotcHJvY2VzcyBHYWxheGllcykuCi0gRG9jdW1lbnQgY29u
ZmlndXJhdGlvbi4KLSBVcGRhdGUgZ2FsYXh5LWlweXRob24gdG8gc3VwcG9ydCBzb21ldGhpbmcg
bGlrZSBwcm94eS1wcmVmaXggLSBjb25maWd1cmUgPQphbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRo
aXMuCkFmZmVjdGVkICM6ICAxNCBmaWxlcwoKZGlmZiAtciA1M2U5MmU1YmU3YWIyYWY1MDMyZTZm
M2FlODgxMjQ0MDRmOWFlNGI0IC1yIGE3YjllYjNkZjM3ZDA0MTQ1ODM5NzU2PQo0MmYzYTBiZTAx
YjMxNDZiMSBsaWIvZ2FsYXh5L2FwcC5weQotLS0gYS9saWIvZ2FsYXh5L2FwcC5weQorKysgYi9s
aWIvZ2FsYXh5L2FwcC5weQpAQCAtMTcsNiArMTcsNyBAQAogZnJvbSBnYWxheHkudG9vbHMuZGF0
YV9tYW5hZ2VyLm1hbmFnZXIgaW1wb3J0IERhdGFNYW5hZ2VycwogZnJvbSBnYWxheHkuam9icyBp
bXBvcnQgbWV0cmljcyBhcyBqb2JfbWV0cmljcwogZnJvbSBnYWxheHkud2ViLmJhc2UgaW1wb3J0
IHBsdWdpbmZyYW1ld29yaworZnJvbSBnYWxheHkud2ViLnByb3h5IGltcG9ydCBQcm94eU1hbmFn
ZXIKIGZyb20gZ2FsYXh5LnF1ZXVlX3dvcmtlciBpbXBvcnQgR2FsYXh5UXVldWVXb3JrZXIKIGZy
b20gdG9vbF9zaGVkLmdhbGF4eV9pbnN0YWxsIGltcG9ydCB1cGRhdGVfcmVwb3NpdG9yeV9tYW5h
Z2VyCj0yMApAQCAtMTM4LDYgKzEzOSw3IEBACiAgICAgICAgICMgRklYTUU6IFRoZXNlIGFyZSBl
eHBvc2VkIGRpcmVjdGx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgICAgIHNlbGYu
am9iX3F1ZXVlID0zRCBzZWxmLmpvYl9tYW5hZ2VyLmpvYl9xdWV1ZQogICAgICAgICBzZWxmLmpv
Yl9zdG9wX3F1ZXVlID0zRCBzZWxmLmpvYl9tYW5hZ2VyLmpvYl9zdG9wX3F1ZXVlCisgICAgICAg
IHNlbGYucHJveHlfbWFuYWdlciA9M0QgUHJveHlNYW5hZ2VyKCBzZWxmLmNvbmZpZyApCiAgICAg
ICAgICMgSW5pdGlhbGl6ZSB0aGUgZXh0ZXJuYWwgc2VydmljZSB0eXBlcwogICAgICAgICBzZWxm
LmV4dGVybmFsX3NlcnZpY2VfdHlwZXMgPTNEIGV4dGVybmFsX3NlcnZpY2VfdHlwZXMuRXh0ZXJu
YWxTZXI9CnZpY2VUeXBlc0NvbGxlY3Rpb24oIHNlbGYuY29uZmlnLmV4dGVybmFsX3NlcnZpY2Vf
dHlwZV9jb25maWdfZmlsZSwgc2VsZi5jbz0KbmZpZy5leHRlcm5hbF9zZXJ2aWNlX3R5cGVfcGF0
aCwgc2VsZiApCiAgICAgICAgIHNlbGYubW9kZWwuZW5naW5lLmRpc3Bvc2UoKQoKZGlmZiAtciA1
M2U5MmU1YmU3YWIyYWY1MDMyZTZmM2FlODgxMjQ0MDRmOWFlNGI0IC1yIGE3YjllYjNkZjM3ZDA0
MTQ1ODM5NzU2PQo0MmYzYTBiZTAxYjMxNDZiMSBsaWIvZ2FsYXh5L2NvbmZpZy5weQotLS0gYS9s
aWIvZ2FsYXh5L2NvbmZpZy5weQorKysgYi9saWIvZ2FsYXh5L2NvbmZpZy5weQpAQCAtMzU3LDYg
KzM1NywxMSBAQAogICAgICAgICAjIGRpcmVjdG9yeSB3aGVyZSB0aGUgdmlzdWFsaXphdGlvbi9y
ZWdpc3RyeSBzZWFyY2hlcyBmb3IgcGx1Z2lucwogICAgICAgICBzZWxmLnZpc3VhbGl6YXRpb25f
cGx1Z2luc19kaXJlY3RvcnkgPTNEIGt3YXJncy5nZXQoCiAgICAgICAgICAgICAndmlzdWFsaXph
dGlvbl9wbHVnaW5zX2RpcmVjdG9yeScsICdjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aT0Kb25z
JyApCisgICAgICAgIHNlbGYucHJveHlfc2Vzc2lvbl9tYXAgPTNEIHNlbGYucmVzb2x2ZV9wYXRo
KCBrd2FyZ3MuZ2V0KCAiZHluYW1pYz0KX3Byb3h5X3Nlc3Npb25fbWFwIiwgImRhdGFiYXNlL3Nl
c3Npb25fbWFwLmpzb24iICkgKQorICAgICAgICBzZWxmLm1hbmFnZV9keW5hbWljX3Byb3h5ID0z
RCBzdHJpbmdfYXNfYm9vbCgga3dhcmdzLmdldCggImR5bmFtaWM9Cl9wcm94eV9tYW5hZ2UiLCAi
VHJ1ZSIgKSApICAjIFNldCB0byBmYWxzZSBpZiBiZWluZyBsYXVuY2hlZCBleHRlcm5hbGx5Cisg
ICAgICAgIHNlbGYuZHluYW1pY19wcm94eV9iaW5kX3BvcnQgPTNEIGludCgga3dhcmdzLmdldCgg
ImR5bmFtaWNfcHJveHlfYj0KaW5kX3BvcnQiLCAiODgwMCIgKSApCisgICAgICAgIHNlbGYuZHlu
YW1pY19wcm94eV9iaW5kX2lwID0zRCBrd2FyZ3MuZ2V0KCAiZHluYW1pY19wcm94eV9iaW5kX2lw
Ij0KLCAiMC4wLjAuMCIgKQorCiAgICAgICAgICMgRGVmYXVsdCBjaHVuayBzaXplIGZvciBjaHVu
a2FibGUgZGF0YXR5cGVzIC0tIDY0awogICAgICAgICBzZWxmLmRpc3BsYXlfY2h1bmtfc2l6ZSA9
M0QgaW50KCBrd2FyZ3MuZ2V0KCAnZGlzcGxheV9jaHVua19zaXplJyw9CiA2NTUzNikgKQo9MjAK
CmRpZmYgLXIgNTNlOTJlNWJlN2FiMmFmNTAzMmU2ZjNhZTg4MTI0NDA0ZjlhZTRiNCAtciBhN2I5
ZWIzZGYzN2QwNDE0NTgzOTc1Nj0KNDJmM2EwYmUwMWIzMTQ2YjEgbGliL2dhbGF4eS91dGlsL2xh
enlfcHJvY2Vzcy5weQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvdXRpbC9sYXp5X3By
b2Nlc3MucHkKQEAgLTAsMCArMSw1NyBAQAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUK
K2ltcG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgTGF6eVByb2Nlc3MoIG9iamVjdCApOgorICAg
ICIiIiBBYnN0cmFjdGlvbiBkZXNjcmliaW5nIGEgY29tbWFuZCBsaW5lIGxhdW5jaGluZyBhIHNl
cnZpY2UgLSBwcm9iYWI9Cmx5CisgICAgYXMgbmVlZGVkIGFzIGZ1bmN0aW9uYWxpdHkgaXMgYWNj
ZXNzZWQgaW4gR2FsYXh5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBjb21t
YW5kX2FuZF9hcmdzICk6CisgICAgICAgIHNlbGYuY29tbWFuZF9hbmRfYXJncyA9M0QgY29tbWFu
ZF9hbmRfYXJncworICAgICAgICBzZWxmLnRocmVhZF9sb2NrID0zRCB0aHJlYWRpbmcuTG9jaygp
CisgICAgICAgIHNlbGYuYWxsb3dfcHJvY2Vzc19yZXF1ZXN0ID0zRCBUcnVlCisgICAgICAgIHNl
bGYucHJvY2VzcyA9M0QgTm9uZQorCisgICAgZGVmIHN0YXJ0X3Byb2Nlc3MoIHNlbGYgKToKKyAg
ICAgICAgd2l0aCBzZWxmLnRocmVhZF9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5hbGxvd19w
cm9jZXNzX3JlcXVlc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5hbGxvd19wcm9jZXNzX3JlcXVl
c3QgPTNEIEZhbHNlCisgICAgICAgICAgICAgICAgdCA9M0QgdGhyZWFkaW5nLlRocmVhZCh0YXJn
ZXQ9M0RzZWxmLl9fc3RhcnQpCisgICAgICAgICAgICAgICAgdC5kYWVtb24gPTNEIFRydWUKKyAg
ICAgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgIGRlZiBfX3N0YXJ0KHNlbGYpOgorICAgICAg
ICB3aXRoIHNlbGYudGhyZWFkX2xvY2s6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3MgPTNEIHN1
YnByb2Nlc3MuUG9wZW4oIHNlbGYuY29tbWFuZF9hbmRfYXJncywgY2xvcz0KZV9mZHM9M0RUcnVl
ICkKKworICAgIGRlZiBzaHV0ZG93biggc2VsZiApOgorICAgICAgICB3aXRoIHNlbGYudGhyZWFk
X2xvY2s6CisgICAgICAgICAgICBzZWxmLmFsbG93X3Byb2Nlc3NfcmVxdWVzdCA9M0QgRmFsc2UK
KyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1p
bmF0ZSgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKC4wMSkKKyAgICAgICAgICAgIGlmIHNlbGYu
cnVubmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisKKyAgICBAcHJv
cGVydHkKKyAgICBkZWYgcnVubmluZyggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5wcm9j
ZXNzIGFuZCBub3Qgc2VsZi5wcm9jZXNzLnBvbGwoKQorCisKK2NsYXNzIE5vT3BMYXp5UHJvY2Vz
cyggb2JqZWN0ICk6CisgICAgIiIiIExhenlQcm9jZXNzIGFic3RyYWN0aW9uIG1lYW50IHRvIGRl
c2NyaWJlIHBvdGVudGlhbGx5IG9wdGlvbmFsCisgICAgc2VydmljZXMsIGluIHRob3NlIGNhc2Vz
IHdoZXJlIG9uZSBpcyBub3QgY29uZmlndXJlZCBvciB2YWxpZCwgdGhpcworICAgIGNsYXNzIGNh
biBiZSB1c2VkIGluIHBsYWNlIG9mIExhenlQcm9jZXNzLgorICAgICIiIgorCisgICAgZGVmIHN0
YXJ0X3Byb2Nlc3MoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc2h1dGRvd24o
IHNlbGYgKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcnVubmlu
Zyggc2VsZiApOgorICAgICAgICByZXR1cm4gRmFsc2UKCmRpZmYgLXIgNTNlOTJlNWJlN2FiMmFm
NTAzMmU2ZjNhZTg4MTI0NDA0ZjlhZTRiNCAtciBhN2I5ZWIzZGYzN2QwNDE0NTgzOTc1Nj0KNDJm
M2EwYmUwMWIzMTQ2YjEgbGliL2dhbGF4eS91dGlsL3NvY2tldHMucHkKLS0tIC9kZXYvbnVsbAor
KysgYi9saWIvZ2FsYXh5L3V0aWwvc29ja2V0cy5weQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQg
c29ja2V0CisKKworZGVmIHVudXNlZF9wb3J0KCk6CisgICAgIyBUT0RPOiBBbGxvdyByYW5nZXMg
KHRob3VnaCB0aGVuIG5lZWQgdG8gZ3Vlc3MgYW5kIGNoZWNrKS4uLgorICAgIHMgPTNEIHNvY2tl
dC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBzLmJpbmQo
KCdsb2NhbGhvc3QnLCAwKSkKKyAgICBhZGRyLCBwb3J0ID0zRCBzLmdldHNvY2tuYW1lKCkKKyAg
ICBzLmNsb3NlKCkKKyAgICByZXR1cm4gcG9ydAoKZGlmZiAtciA1M2U5MmU1YmU3YWIyYWY1MDMy
ZTZmM2FlODgxMjQ0MDRmOWFlNGI0IC1yIGE3YjllYjNkZjM3ZDA0MTQ1ODM5NzU2PQo0MmYzYTBi
ZTAxYjMxNDZiMSBsaWIvZ2FsYXh5L3dlYi9wcm94eS9fX2luaXRfXy5weQotLS0gL2Rldi9udWxs
CisrKyBiL2xpYi9nYWxheHkvd2ViL3Byb3h5L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTM3IEBA
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQganNvbgorCitmcm9tIC5maWxlbG9j
ayBpbXBvcnQgRmlsZUxvY2sKK2Zyb20gZ2FsYXh5LnV0aWwgaW1wb3J0IHNvY2tldHMKK2Zyb20g
Z2FsYXh5LnV0aWwubGF6eV9wcm9jZXNzIGltcG9ydCBMYXp5UHJvY2VzcywgTm9PcExhenlQcm9j
ZXNzCisKK2xvZyA9M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKKworCitERUZBVUxU
X1BST1hZX1RPX0hPU1QgPTNEICJsb2NhbGhvc3QiCitTRUNVUkVfQ09PS0lFID0zRCAiZ2FsYXh5
c2Vzc2lvbiIKKworCitjbGFzcyBQcm94eU1hbmFnZXIob2JqZWN0KToKKworICAgIGRlZiBfX2lu
aXRfXyggc2VsZiwgY29uZmlnICk6CisgICAgICAgIGZvciBvcHRpb24gaW4gWyAibWFuYWdlX2R5
bmFtaWNfcHJveHkiLCAiZHluYW1pY19wcm94eV9iaW5kX3BvcnQiLD0KICJkeW5hbWljX3Byb3h5
X2JpbmRfaXAiIF06CisgICAgICAgICAgICBzZXRhdHRyKCBzZWxmLCBvcHRpb24sIGdldGF0dHIo
IGNvbmZpZywgb3B0aW9uICkgKQorICAgICAgICBzZWxmLmxhdW5jaF9ieSA9M0QgIm5vZGUiICAj
IFRPRE86IFN1cHBvcnQgZG9ja2VyCisgICAgICAgIGlmIHNlbGYubWFuYWdlX2R5bmFtaWNfcHJv
eHk6CisgICAgICAgICAgICBzZWxmLmxhenlfcHJvY2VzcyA9M0Qgc2VsZi5fX3NldHVwX2xhenlf
cHJvY2VzcyggY29uZmlnICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubGF6eV9w
cm9jZXNzID0zRCBOb09wTGF6eVByb2Nlc3MoKQorICAgICAgICBzZWxmLnByb3h5X2lwYyA9M0Qg
cHJveHlfaXBjKGNvbmZpZykKKworICAgIGRlZiBzaHV0ZG93biggc2VsZiApOgorICAgICAgICBz
ZWxmLmxhenlfcHJvY2Vzcy5zaHV0ZG93bigpCisKKyAgICBkZWYgc2V0dXBfcHJveHkoIHNlbGYs
IHRyYW5zLCBob3N0PTNEREVGQVVMVF9QUk9YWV9UT19IT1NULCBwb3J0PTNETm9uPQplICk6Cisg
ICAgICAgIGlmIHNlbGYubWFuYWdlX2R5bmFtaWNfcHJveHk6CisgICAgICAgICAgICBsb2cuaW5m
bygiQXR0ZW1wdGluZyB0byBzdGFydCBkeW5hbWljIHByb3h5IHByb2Nlc3MiKQorICAgICAgICAg
ICAgc2VsZi5sYXp5X3Byb2Nlc3Muc3RhcnRfcHJvY2VzcygpCisKKyAgICAgICAgYXV0aGVudGlj
YXRpb24gPTNEIEF1dGhlbnRpY2F0aW9uVG9rZW4odHJhbnMpCisgICAgICAgIHByb3h5X3JlcXVl
c3RzID0zRCBQcm94eVJlcXVlc3RzKGhvc3Q9M0Rob3N0LCBwb3J0PTNEcG9ydCkKKyAgICAgICAg
c2VsZi5wcm94eV9pcGMuaGFuZGxlX3JlcXVlc3RzKGF1dGhlbnRpY2F0aW9uLCBwcm94eV9yZXF1
ZXN0cykKKyAgICAgICAgIyBUT0RPOiBUaGVzZSBzaG91bGRuJ3QgbmVlZCB0byBiZSByZXF1ZXN0
Lmhvc3QgYW5kIHJlcXVlc3Quc2NoZW1lPQogLQorICAgICAgICAjIHRob3VnaCB0aGV5IGFyZSBy
ZWFzb25hYmxlIGRlZmF1bHRzLgorICAgICAgICBob3N0ID0zRCB0cmFucy5yZXF1ZXN0Lmhvc3QK
KyAgICAgICAgaWYgJzonIGluIGhvc3Q6CisgICAgICAgICAgICBob3N0ID0zRCBob3N0WzA6aG9z
dC5pbmRleCgnOicpXQorICAgICAgICBzY2hlbWUgPTNEIHRyYW5zLnJlcXVlc3Quc2NoZW1lCisg
ICAgICAgIHByb3h5X3VybCA9M0QgJyVzOi8vJXM6JWQnICUgKHNjaGVtZSwgaG9zdCwgc2VsZi5k
eW5hbWljX3Byb3h5X2Jpbj0KZF9wb3J0KQorICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
J3Byb3h5X3VybCc6IHByb3h5X3VybCwKKyAgICAgICAgICAgICdwcm94aWVkX3BvcnQnOiBwcm94
eV9yZXF1ZXN0cy5wb3J0LAorICAgICAgICAgICAgJ3Byb3hpZWRfaG9zdCc6IHByb3h5X3JlcXVl
c3RzLmhvc3QsCisgICAgICAgIH0KKworICAgIGRlZiBfX3NldHVwX2xhenlfcHJvY2Vzcyggc2Vs
ZiwgY29uZmlnICk6CisgICAgICAgIGxhdW5jaGVyID0zRCBwcm94eV9sYXVuY2hlcihzZWxmKQor
ICAgICAgICBjb21tYW5kID0zRCBsYXVuY2hlci5sYXVuY2hfcHJveHlfY29tbWFuZChjb25maWcp
CisgICAgICAgIHJldHVybiBMYXp5UHJvY2Vzcyhjb21tYW5kKQorCisKK2RlZiBwcm94eV9sYXVu
Y2hlcihjb25maWcpOgorICAgIHJldHVybiBOb2RlUHJveHlMYXVuY2hlcigpCisKKworY2xhc3Mg
UHJveHlMYXVuY2hlcihvYmplY3QpOgorCisgICAgZGVmIGxhdW5jaF9wcm94eV9jb21tYW5kKHNl
bGYsIGNvbmZpZyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisKK2Ns
YXNzIE5vZGVQcm94eUxhdW5jaGVyKG9iamVjdCk6CisKKyAgICBkZWYgbGF1bmNoX3Byb3h5X2Nv
bW1hbmQoc2VsZiwgY29uZmlnKToKKyAgICAgICAgYXJncyA9M0QgWworICAgICAgICAgICAgIi0t
c2Vzc2lvbnMiLCBjb25maWcucHJveHlfc2Vzc2lvbl9tYXAsCisgICAgICAgICAgICAiLS1pcCIs
IGNvbmZpZy5keW5hbWljX3Byb3h5X2JpbmRfaXAsCisgICAgICAgICAgICAiLS1wb3J0Iiwgc3Ry
KGNvbmZpZy5keW5hbWljX3Byb3h5X2JpbmRfcG9ydCksCisgICAgICAgIF0KKyAgICAgICAgcGFy
ZW50X2RpcmVjdG9yeSA9M0Qgb3MucGF0aC5kaXJuYW1lKCBfX2ZpbGVfXyApCisgICAgICAgIHBh
dGhfdG9fYXBwbGljYXRpb24gPTNEIG9zLnBhdGguam9pbiggcGFyZW50X2RpcmVjdG9yeSwgImpz
IiwgImxpYj0KIiwgIm1haW4uanMiICkKKyAgICAgICAgY29tbWFuZCA9M0QgWyBwYXRoX3RvX2Fw
cGxpY2F0aW9uIF0gKyBhcmdzCisgICAgICAgIHJldHVybiBjb21tYW5kCisKKworY2xhc3MgQXV0
aGVudGljYXRpb25Ub2tlbihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5z
KToKKyAgICAgICAgc2VsZi5jb29raWVfbmFtZSA9M0QgU0VDVVJFX0NPT0tJRQorICAgICAgICBz
ZWxmLmNvb2tpZV92YWx1ZSA9M0QgdHJhbnMuZ2V0X2Nvb2tpZSggc2VsZi5jb29raWVfbmFtZSAp
CisKKworY2xhc3MgUHJveHlSZXF1ZXN0cyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGhvc3Q9M0ROb25lLCBwb3J0PTNETm9uZSk6CisgICAgICAgIGlmIGhvc3QgaXMgTm9uZToK
KyAgICAgICAgICAgIGhvc3QgPTNEIERFRkFVTFRfUFJPWFlfVE9fSE9TVAorICAgICAgICBpZiBw
b3J0IGlzIE5vbmU6CisgICAgICAgICAgICBwb3J0ID0zRCBzb2NrZXRzLnVudXNlZF9wb3J0KCkK
KyAgICAgICAgICAgIGxvZy5pbmZvKCJPYnRhaW5lZCB1bnVzZWQgcG9ydCAlZCIgJSBwb3J0KQor
ICAgICAgICBzZWxmLmhvc3QgPTNEIGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0zRCBwb3J0CisK
KworZGVmIHByb3h5X2lwYyhjb25maWcpOgorICAgIHByb3h5X3Nlc3Npb25fbWFwID0zRCBjb25m
aWcucHJveHlfc2Vzc2lvbl9tYXAKKyAgICByZXR1cm4gSnNvbkZpbGVQcm94eUlwYyhwcm94eV9z
ZXNzaW9uX21hcCkKKworCitjbGFzcyBQcm94eUlwYyhvYmplY3QpOgorCisgICAgZGVmIGhhbmRs
ZV9yZXF1ZXN0cyhzZWxmLCBjb29raWUsIGhvc3QsIHBvcnQpOgorICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBKc29uRmlsZVByb3h5SXBjKG9iamVjdCk6CisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJveHlfc2Vzc2lvbl9tYXApOgorICAgICAgICBzZWxm
LnByb3h5X3Nlc3Npb25fbWFwID0zRCBwcm94eV9zZXNzaW9uX21hcAorCisgICAgZGVmIGhhbmRs
ZV9yZXF1ZXN0cyhzZWxmLCBhdXRoZW50aWNhdGlvbiwgcHJveHlfcmVxdWVzdHMpOgorICAgICAg
ICBrZXkgPTNEICIlczolcyIgJSAoIHByb3h5X3JlcXVlc3RzLmhvc3QsIHByb3h5X3JlcXVlc3Rz
LnBvcnQgKQorICAgICAgICBzZWN1cmVfaWQgPTNEIGF1dGhlbnRpY2F0aW9uLmNvb2tpZV92YWx1
ZQorICAgICAgICB3aXRoIEZpbGVMb2NrKCBzZWxmLnByb3h5X3Nlc3Npb25fbWFwICk6CisgICAg
ICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIHNlbGYucHJveHlfc2Vzc2lvbl9tYXAgKToK
KyAgICAgICAgICAgICAgICBvcGVuKCBzZWxmLnByb3h5X3Nlc3Npb25fbWFwLCAidyIgKS53cml0
ZSggInt9IiApCisgICAgICAgICAgICBqc29uX2RhdGEgPTNEIG9wZW4oIHNlbGYucHJveHlfc2Vz
c2lvbl9tYXAsICJyIiApLnJlYWQoKQorICAgICAgICAgICAgc2Vzc2lvbl9tYXAgPTNEIGpzb24u
bG9hZHMoIGpzb25fZGF0YSApCisgICAgICAgICAgICB0b19yZW1vdmUgPTNEIFtdCisgICAgICAg
ICAgICBmb3IgaywgdmFsdWUgaW4gc2Vzc2lvbl9tYXAuaXRlbXMoKToKKyAgICAgICAgICAgICAg
ICBpZiB2YWx1ZSA9M0Q9M0Qgc2VjdXJlX2lkOgorICAgICAgICAgICAgICAgICAgICB0b19yZW1v
dmUuYXBwZW5kKCBrICkKKyAgICAgICAgICAgIGZvciBrIGluIHRvX3JlbW92ZToKKyAgICAgICAg
ICAgICAgICBkZWwgc2Vzc2lvbl9tYXBbIGsgXQorICAgICAgICAgICAgc2Vzc2lvbl9tYXBbIGtl
eSBdID0zRCBzZWN1cmVfaWQKKyAgICAgICAgICAgIG5ld19qc29uX2RhdGEgPTNEIGpzb24uZHVt
cHMoIHNlc3Npb25fbWFwICkKKyAgICAgICAgICAgIG9wZW4oIHNlbGYucHJveHlfc2Vzc2lvbl9t
YXAsICJ3IiApLndyaXRlKCBuZXdfanNvbl9kYXRhICkKKworCisjIFRPRE86IHNxbGl0ZWZpbGVp
cGMKKyMgVE9ETzogUkVTVGZ1bCBBUEkgZHJpdmVuIHByb3h5CgpkaWZmIC1yIDUzZTkyZTViZTdh
YjJhZjUwMzJlNmYzYWU4ODEyNDQwNGY5YWU0YjQgLXIgYTdiOWViM2RmMzdkMDQxNDU4Mzk3NTY9
CjQyZjNhMGJlMDFiMzE0NmIxIGxpYi9nYWxheHkvd2ViL3Byb3h5L2ZpbGVsb2NrLnB5Ci0tLSAv
ZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS93ZWIvcHJveHkvZmlsZWxvY2sucHkKQEAgLTAsMCAr
MSw4MiBAQAorIiIiIENvZGUgb2J0YWluZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZG1mcmV5
L0ZpbGVMb2NrCisKK1NlZSBmdWxsIGxpY2Vuc2UgYXQ6CisKK2h0dHBzOi8vZ2l0aHViLmNvbS9k
bWZyZXkvRmlsZUxvY2svYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQKKworIiIiCitpbXBvcnQgb3MK
K2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KKworCitjbGFzcyBGaWxlTG9ja0V4Y2VwdGlvbihF
eGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBGaWxlTG9jayhvYmplY3QpOgorICAgICIi
IiBBIGZpbGUgbG9ja2luZyBtZWNoYW5pc20gdGhhdCBoYXMgY29udGV4dC1tYW5hZ2VyIHN1cHBv
cnQgc28KKyAgICAgICAgeW91IGNhbiB1c2UgaXQgaW4gYSB3aXRoIHN0YXRlbWVudC4gVGhpcyBz
aG91bGQgYmUgcmVsYXRpdmVseSBjcm9zcworICAgICAgICBjb21wYXRpYmxlIGFzIGl0IGRvZXNu
J3QgcmVseSBvbiBtc3ZjcnQgb3IgZmNudGwgZm9yIHRoZSBsb2NraW5nLgorICAgICIiIgorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfbmFtZSwgdGltZW91dD0zRDEwLCBkZWxheT0zRC4w
NSk6CisgICAgICAgICIiIiBQcmVwYXJlIHRoZSBmaWxlIGxvY2tlci4gU3BlY2lmeSB0aGUgZmls
ZSB0byBsb2NrIGFuZCBvcHRpb25hbD0KbHkKKyAgICAgICAgICAgIHRoZSBtYXhpbXVtIHRpbWVv
dXQgYW5kIHRoZSBkZWxheSBiZXR3ZWVuIGVhY2ggYXR0ZW1wdCB0byBsb2NrLgorICAgICAgICAi
IiIKKyAgICAgICAgc2VsZi5pc19sb2NrZWQgPTNEIEZhbHNlCisgICAgICAgIGZ1bGxfcGF0aCA9
M0Qgb3MucGF0aC5hYnNwYXRoKGZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5sb2NrZmlsZSA9M0Qg
IiVzLmxvY2siICUgZnVsbF9wYXRoCisgICAgICAgIHNlbGYuZmlsZV9uYW1lID0zRCBmdWxsX3Bh
dGgKKyAgICAgICAgc2VsZi50aW1lb3V0ID0zRCB0aW1lb3V0CisgICAgICAgIHNlbGYuZGVsYXkg
PTNEIGRlbGF5CisKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAgICAgICAgIiIiIEFjcXVpcmUg
dGhlIGxvY2ssIGlmIHBvc3NpYmxlLiBJZiB0aGUgbG9jayBpcyBpbiB1c2UsIGl0IGNoZWNrPQog
YWdhaW4KKyAgICAgICAgICAgIGV2ZXJ5IGB3YWl0YCBzZWNvbmRzLiBJdCBkb2VzIHRoaXMgdW50
aWwgaXQgZWl0aGVyIGdldHMgdGhlIGxvPQpjayBvcgorICAgICAgICAgICAgZXhjZWVkcyBgdGlt
ZW91dGAgbnVtYmVyIG9mIHNlY29uZHMsIGluIHdoaWNoIGNhc2UgaXQgdGhyb3dzCisgICAgICAg
ICAgICBhbiBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICBzdGFydF90aW1lID0zRCB0
aW1lLnRpbWUoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIHNlbGYuZmQgPTNEIG9zLm9wZW4oc2VsZi5sb2NrZmlsZSwgb3MuT19DUkVBVCB8
IG9zLk9fRVhDTCA9Cnwgb3MuT19SRFdSKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAg
ICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0z
RCBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAg
ICAgaWYgKHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkgPj0zRCBzZWxmLnRpbWVvdXQ6CisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVMb2NrRXhjZXB0aW9uKCJUaW1lb3V0IG9jY3VyZWQu
IikKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuZGVsYXkpCisgICAgICAgIHNlbGYu
aXNfbG9ja2VkID0zRCBUcnVlCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIi
IEdldCByaWQgb2YgdGhlIGxvY2sgYnkgZGVsZXRpbmcgdGhlIGxvY2tmaWxlLgorICAgICAgICAg
ICAgV2hlbiB3b3JraW5nIGluIGEgYHdpdGhgIHN0YXRlbWVudCwgdGhpcyBnZXRzIGF1dG9tYXRp
Y2FsbHkKKyAgICAgICAgICAgIGNhbGxlZCBhdCB0aGUgZW5kLgorICAgICAgICAiIiIKKyAgICAg
ICAgaWYgc2VsZi5pc19sb2NrZWQ6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLmZkKQorICAg
ICAgICAgICAgb3MudW5saW5rKHNlbGYubG9ja2ZpbGUpCisgICAgICAgICAgICBzZWxmLmlzX2xv
Y2tlZCA9M0QgRmFsc2UKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIiBB
Y3RpdmF0ZWQgd2hlbiB1c2VkIGluIHRoZSB3aXRoIHN0YXRlbWVudC4KKyAgICAgICAgICAgIFNo
b3VsZCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYSBsb2NrIHRvIGJlIHVzZWQgaW4gdGhlIHdpdGgg
YmxvPQpjay4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2xvY2tlZDoKKyAg
ICAgICAgICAgIHNlbGYuYWNxdWlyZSgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYg
X19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgICIiIiBBY3Rp
dmF0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQuCisgICAgICAgICAgICBJdCBh
dXRvbWF0aWNhbGx5IHJlbGVhc2VzIHRoZSBsb2NrIGlmIGl0IGlzbid0IGxvY2tlZC4KKyAgICAg
ICAgIiIiCisgICAgICAgIGlmIHNlbGYuaXNfbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5yZWxl
YXNlKCkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIgTWFrZSBzdXJlIHRo
YXQgdGhlIEZpbGVMb2NrIGluc3RhbmNlIGRvZXNuJ3QgbGVhdmUgYSBsb2NrZmlsZQorICAgICAg
ICAgICAgbHlpbmcgYXJvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkK
CmRpZmYgLXIgNTNlOTJlNWJlN2FiMmFmNTAzMmU2ZjNhZTg4MTI0NDA0ZjlhZTRiNCAtciBhN2I5
ZWIzZGYzN2QwNDE0NTgzOTc1Nj0KNDJmM2EwYmUwMWIzMTQ2YjEgbGliL2dhbGF4eS93ZWIvcHJv
eHkvanMvRG9ja2VyZmlsZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvd2ViL3Byb3h5
L2pzL0RvY2tlcmZpbGUKQEAgLTAsMCArMSwxOCBAQAorIyBIYXZlIG5vdCB5ZXQgZ290dGVuIHRo
aXMgdG8gd29yayAtIGdvYWwgd2FzIHRvIGxhdW5jaCB0aGUgcHJveCBpbiBhIERvY2s9CmVyIGNv
bnRhaW5lci4KKyMgTmV0d29ya2luZyBpcyBhIGJpdCB0cmlja3kgdGhvdWdoIC0gY291bGQgbm90
IGdldCB0aGUgY2hpbGQgcHJveHkgdG8gdGFsPQprIHRvIHRoZSBjaGlsZAorIyBJUHl0aG9uIGNv
bnRhaW5lci4KKworCisjIHN1ZG8gZG9ja2VyIGJ1aWxkIC0tbm8tY2FjaGU9M0R0cnVlIC10IGd4
cHJveHkgLgorIyBzdWRvIGRvY2tlciBydW4gLS1uZXQgaG9zdCAtdiAvaG9tZS9qb2huL3dvcmtz
cGFjZS9nYWxheHktY2VudHJhbC9kYXRhYmE9CnNlOi92YXIvZ3hwcm94eSAtcCA4ODAwOjg4MDAg
LXQgZ3hwcm94eSBsaWIvbWFpbi5qcyAtLXNlc3Npb25zIC92YXIvZ3hwcm94eT0KL3Nlc3Npb25f
bWFwLmpzb24gLS1pcCAwLjAuMC4wIC0tcG9ydCA4ODAwCisKK0ZST00gbm9kZTowLjExLjEzCisK
K1JVTiBta2RpciAtcCAvdXNyL3NyYy9neHByb3h5CitXT1JLRElSIC91c3Ivc3JjL2d4cHJveHkK
KworQUREIHBhY2thZ2UuanNvbiAvdXNyL3NyYy9neHByb3h5LworUlVOIG5wbSBpbnN0YWxsCitB
REQgLiAvdXNyL3NyYy9neHByb3h5CisKK0NNRCBbICJsaWIvbWFpbi5qcyIgXQoKZGlmZiAtciA1
M2U5MmU1YmU3YWIyYWY1MDMyZTZmM2FlODgxMjQ0MDRmOWFlNGI0IC1yIGE3YjllYjNkZjM3ZDA0
MTQ1ODM5NzU2PQo0MmYzYTBiZTAxYjMxNDZiMSBsaWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9SRUFE
TUUubWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9SRUFETUUu
bWQKQEAgLTAsMCArMSwyIEBACisjIEEgZHluYW1pYyBjb25maWd1cmFibGUgcmV2ZXJzZSBwcm94
eSBmb3IgdXNlIHdpdGhpbiBHYWxheHkKKwoKZGlmZiAtciA1M2U5MmU1YmU3YWIyYWY1MDMyZTZm
M2FlODgxMjQ0MDRmOWFlNGI0IC1yIGE3YjllYjNkZjM3ZDA0MTQ1ODM5NzU2PQo0MmYzYTBiZTAx
YjMxNDZiMSBsaWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvbWFpbi5qcwotLS0gL2Rldi9udWxs
CisrKyBiL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9tYWluLmpzCkBAIC0wLDAgKzEsNDEg
QEAKKyMhL3Vzci9iaW4vZW52IG5vZGUKKy8qCitJbnNwaXJhdGlvbiB0YWtlbiBmcm9tPTIwCisJ
aHR0cHM6Ly9naXRodWIuY29tL2p1cHl0ZXIvbXVsdGl1c2VyLXNlcnZlci9ibG9iL21hc3Rlci9t
dWx0aXVzZXIvanMvbWFpbj0KLmpzCisqLwordmFyIGZzID0zRCByZXF1aXJlKCdmcycpOwordmFy
IGFyZ3MgPTNEIHJlcXVpcmUoJ2NvbW1hbmRlcicpOworCitwYWNrYWdlX2luZm8gPTNEIHJlcXVp
cmUoJy4uL3BhY2thZ2UnKQorCithcmdzCisJLnZlcnNpb24ocGFja2FnZV9pbmZvKQorICAgIC5v
cHRpb24oJy0taXAgPG4+JywgJ1B1YmxpYy1mYWNpbmcgSVAgb2YgdGhlIHByb3h5JywgJ2xvY2Fs
aG9zdCcpCisgICAgLm9wdGlvbignLS1wb3J0IDxuPicsICdQdWJsaWMtZmFjaW5nIHBvcnQgb2Yg
dGhlIHByb3h5JywgcGFyc2VJbnQpCisgICAgLm9wdGlvbignLS1jb29raWUgPGNvb2tpZW5hbWU+
JywgJ0Nvb2tpZSBwcm92aW5nIGF1dGhlbnRpY2F0aW9uJywgJ2dhbD0KYXh5c2Vzc2lvbicpCisg
ICAgLm9wdGlvbignLS1zZXNzaW9ucyA8ZmlsZT4nLCAnUm91dGVzIGZpbGUgdG8gbW9uaXRvcicp
CisgICAgLm9wdGlvbignLS12ZXJib3NlJykKKworYXJncy5wYXJzZShwcm9jZXNzLmFyZ3YpOwor
Cit2YXIgRHluYW1pY1Byb3h5ID0zRCByZXF1aXJlKCcuL3Byb3h5LmpzJykuRHluYW1pY1Byb3h5
OwordmFyIG1hcEZvciA9M0QgcmVxdWlyZSgnLi9tYXBwZXIuanMnKS5tYXBGb3I7CisKK3ZhciBz
ZXNzaW9ucyA9M0QgbWFwRm9yKGFyZ3Muc2Vzc2lvbnMpOworCit2YXIgZHluYW1pY19wcm94eV9v
cHRpb25zID0zRCB7CisgIHNlc3Npb25Db29raWU6IGFyZ3NbJ2Nvb2tpZSddLAorICBzZXNzaW9u
TWFwOiBzZXNzaW9ucywKKyAgdmVyYm9zZTogYXJncy52ZXJib3NlCit9CisKK3ZhciBkeW5hbWlj
X3Byb3h5ID0zRCBuZXcgRHluYW1pY1Byb3h5KGR5bmFtaWNfcHJveHlfb3B0aW9ucyk7CisKK3Zh
ciBsaXN0ZW4gPTNEIHt9OworbGlzdGVuLnBvcnQgPTNEIGFyZ3MucG9ydCB8fCA4MDAwOworbGlz
dGVuLmlwID0zRCBhcmdzLmlwOworCitpZihhcmdzLnZlcmJvc2UpIHsKKwljb25zb2xlLmxvZygi
TGlzdGVuaW5nIG9uICIgKyBsaXN0ZW4uaXAgKyAiOiIgKyBsaXN0ZW4ucG9ydCk7Cit9CitkeW5h
bWljX3Byb3h5LnByb3h5X3NlcnZlci5saXN0ZW4obGlzdGVuLnBvcnQsIGxpc3Rlbi5pcCk7Cgpk
aWZmIC1yIDUzZTkyZTViZTdhYjJhZjUwMzJlNmYzYWU4ODEyNDQwNGY5YWU0YjQgLXIgYTdiOWVi
M2RmMzdkMDQxNDU4Mzk3NTY9CjQyZjNhMGJlMDFiMzE0NmIxIGxpYi9nYWxheHkvd2ViL3Byb3h5
L2pzL2xpYi9tYXBwZXIuanMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L3dlYi9wcm94
eS9qcy9saWIvbWFwcGVyLmpzCkBAIC0wLDAgKzEsMzMgQEAKK3ZhciBmcyA9M0QgcmVxdWlyZSgn
ZnMnKTsKKworCit2YXIgbWFwRm9yID0zRCBmdW5jdGlvbihwYXRoKSB7CisJdmFyIG1hcCA9M0Qg
e307CisKKwl2YXIgbG9hZE1hcCA9M0QgZnVuY3Rpb24oKSB7CisgCQl2YXIgY29udGVudCA9M0Qg
ZnMucmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4Jyk7CisgCQl2YXIga2V5VG9TZXNzaW9uID0zRCBK
U09OLnBhcnNlKGNvbnRlbnQpOworIAkJdmFyIG5ld1Nlc3Npb25zID0zRCB7fTsKKyAJCWZvcih2
YXIga2V5IGluIGtleVRvU2Vzc2lvbikgeworIAkJCXZhciBob3N0QW5kUG9ydCA9M0Qga2V5LnNw
bGl0KCI6Iik7CisgCQkJLy8gJ2hvc3QnOiBob3N0QW5kUG9ydFswXSwKKyAJCQluZXdTZXNzaW9u
c1trZXlUb1Nlc3Npb25ba2V5XV0gPTNEIHsndGFyZ2V0Jzogeydob3N0JzogaG9zdEFuZFBvcnRb
MF0sPQogJ3BvcnQnOiBwYXJzZUludChob3N0QW5kUG9ydFsxXSl9fTsKKyAJCX0KKwkJZm9yKHZh
ciBvbGRTZXNzaW9uIGluIG1hcCkgeworCQkJaWYoIShvbGRTZXNzaW9uIGluIG5ld1Nlc3Npb25z
KSkgeworCQkJCWRlbGV0ZSBtYXBbIG9sZFNlc3Npb24gXTsKKwkJCX0KKwkJfQorCQlmb3IodmFy
IG5ld1Nlc3Npb24gaW4gbmV3U2Vzc2lvbnMpIHsKKwkJCW1hcFtuZXdTZXNzaW9uXSA9M0QgbmV3
U2Vzc2lvbnNbbmV3U2Vzc2lvbl07CisJCX0KKwl9CisKKwljb25zb2xlLmxvZygiV2F0Y2hpbmcg
cGF0aCAiICsgcGF0aCk7CisJbG9hZE1hcCgpOworCWZzLndhdGNoKHBhdGgsIGxvYWRNYXApOwor
CisJcmV0dXJuIG1hcDsKK30KKworZXhwb3J0cy5tYXBGb3IgPTNEIG1hcEZvcjsKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDUzZTkyZTViZTdhYjJhZjUwMzJlNmYzYWU4ODEy
NDQwNGY5YWU0YjQgLXIgYTdiOWViM2RmMzdkMDQxNDU4Mzk3NTY9CjQyZjNhMGJlMDFiMzE0NmIx
IGxpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9wcm94eS5qcwotLS0gL2Rldi9udWxsCisrKyBi
L2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9wcm94eS5qcwpAQCAtMCwwICsxLDExNCBAQAor
dmFyIGh0dHAgPTNEIHJlcXVpcmUoJ2h0dHAnKSwKKyAgICBodHRwUHJveHkgPTNEIHJlcXVpcmUo
J2h0dHAtcHJveHknKTsKKwordmFyIGJvdW5kID0zRCBmdW5jdGlvbiAodGhhdCwgbWV0aG9kKSB7
CisgICAgLy8gYmluZCBhIG1ldGhvZCwgdG8gZW5zdXJlIGB0aGlzPTNEdGhhdGAgd2hlbiBpdCBp
cyBjYWxsZWQKKyAgICAvLyBiZWNhdXNlIHByb3RvdHlwZSBsYW5ndWFnZXMgYXJlIGJhZAorICAg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgIG1ldGhvZC5hcHBseSh0aGF0LCBhcmd1bWVu
dHMpOworICAgIH07Cit9OworCit2YXIgRHluYW1pY1Byb3h5ID0zRCBmdW5jdGlvbihvcHRpb25z
KSB7CisJdmFyIGR5bmFtaWNQcm94eSA9M0QgdGhpczsKKwl0aGlzLnNlc3Npb25Db29raWUgPTNE
IG9wdGlvbnMuc2Vzc2lvbkNvb2tpZTsKKwl0aGlzLnNlc3Npb25NYXAgPTNEIG9wdGlvbnMuc2Vz
c2lvbk1hcDsKKworICAgIHZhciBsb2dfZXJyb3JzID0zRCBmdW5jdGlvbihoYW5kbGVyKSB7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAocmVxLCByZXMpIHsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIuYXBwbHkoZHluYW1pY1Byb3h5LCBhcmd1bWVu
dHMpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJFcnJvciBpbiBoYW5kbGVyIGZvciAiICsgcmVxLm1ldGhvZCArICcgJyArIHI9CmVxLnVy
bCArICc6ICcsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB2
YXIgcHJveHkgPTNEIHRoaXMucHJveHkgPTNEIGh0dHBQcm94eS5jcmVhdGVQcm94eVNlcnZlcih7
CisgICAgICAgIHdzIDogdHJ1ZSwKKyAgICB9KTsKKworICAgIHRoaXMucHJveHlfc2VydmVyID0z
RCBodHRwLmNyZWF0ZVNlcnZlcigKKyAgICAJbG9nX2Vycm9ycyhkeW5hbWljUHJveHkuaGFuZGxl
UHJveHlSZXF1ZXN0KQorICAgICk7CisJdGhpcy5wcm94eV9zZXJ2ZXIub24oJ3VwZ3JhZGUnLCBi
b3VuZCh0aGlzLCB0aGlzLmhhbmRsZVdzKSk7Cit9OworCitEeW5hbWljUHJveHkucHJvdG90eXBl
LnJld3JpdGVSZXF1ZXN0ID0zRCBmdW5jdGlvbihyZXF1ZXN0KSB7Cit9CisKK0R5bmFtaWNQcm94
eS5wcm90b3R5cGUudGFyZ2V0Rm9yUmVxdWVzdCA9M0QgZnVuY3Rpb24ocmVxdWVzdCkgeworICAg
IC8vIHJldHVybiBwcm94eSB0YXJnZXQgZm9yIGEgZ2l2ZW4gdXJsCisgICAgdmFyIHNlc3Npb24g
PTNEIHRoaXMuZmluZFNlc3Npb24ocmVxdWVzdCk7CisgICAgZm9yICh2YXIgbWFwcGVkU2Vzc2lv
biBpbiB0aGlzLnNlc3Npb25NYXApIHsKKyAgICAJaWYoc2Vzc2lvbiA9M0Q9M0QgbWFwcGVkU2Vz
c2lvbikgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbk1hcFtzZXNzaW9uXS50YXJn
ZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsKK307CisKK0R5bmFtaWNQ
cm94eS5wcm90b3R5cGUuZmluZFNlc3Npb24gPTNEIGZ1bmN0aW9uKHJlcXVlc3QpIHsKKyAgICB2
YXIgc2Vzc2lvbkNvb2tpZSA9M0QgdGhpcy5zZXNzaW9uQ29va2llOworICAgICAgICByYyA9M0Qg
cmVxdWVzdC5oZWFkZXJzLmNvb2tpZTsKKyAgICBpZighcmMpIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICAgIHZhciBjb29raWVzID0zRCByYy5zcGxpdCgnOycpOworICAgIGZvcih2
YXIgY29va2llSW5kZXggaW4gY29va2llcykgeworICAgIAl2YXIgY29va2llID0zRCBjb29raWVz
W2Nvb2tpZUluZGV4XTsKKyAgICAgICAgdmFyIHBhcnRzID0zRCBjb29raWUuc3BsaXQoJz0zRCcp
OworCQl2YXIgcGFydE5hbWUgPTNEIHBhcnRzLnNoaWZ0KCkudHJpbSgpOworICAgICAgICBpZihw
YXJ0TmFtZSA9M0Q9M0Qgc2Vzc2lvbkNvb2tpZSkgeworICAgICAgICAJcmV0dXJuIHVuZXNjYXBl
KHBhcnRzLmpvaW4oJz0zRCcpKQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGw7
Cit9OworCitEeW5hbWljUHJveHkucHJvdG90eXBlLmhhbmRsZVByb3h5UmVxdWVzdCA9M0QgZnVu
Y3Rpb24ocmVxLCByZXMpIHsKKyAgICB2YXIgdGFyZ2V0ID0zRCB0aGlzLnRhcmdldEZvclJlcXVl
c3QocmVxKTsKKyAgICBjb25zb2xlLmxvZygiUFJPWFkgIiArIHJlcS5tZXRob2QgKyAiICIgKyBy
ZXEudXJsICsgIiB0byAiICsgdGFyZ2V0KTsKKyAgICB2YXIgb3JpZ2luID0zRCByZXEuaGVhZGVy
cy5vcmlnaW47CisgICAgdGhpcy5yZXdyaXRlUmVxdWVzdChyZXEpOworICAgIHJlcy5vbGRXcml0
ZUhlYWQgPTNEIHJlcy53cml0ZUhlYWQ7CisgICAgcmVzLndyaXRlSGVhZCA9M0QgZnVuY3Rpb24o
c3RhdHVzQ29kZSwgaGVhZGVycykgeworICAgICAgICByZXMuc2V0SGVhZGVyKCdBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1PcmlnaW4nLCBvcmlnaW4pOworICAgICAgICByZXMuc2V0SGVhZGVyKCdBY2Nl
c3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsICd0cnVlJyk7CisgICAgICAgIHJlcy5vbGRX
cml0ZUhlYWQoc3RhdHVzQ29kZSwgaGVhZGVycyk7CisgICAgfQorICAgIHRoaXMucHJveHkud2Vi
KHJlcSwgcmVzLCB7CisgICAgICAgIHRhcmdldDogdGFyZ2V0CisgICAgfSwgZnVuY3Rpb24gKGUp
IHsKKyAgICAgICAgY29uc29sZS5sb2coIlByb3h5IGVycm9yOiAiLCBlKTsKKyAgICAgICAgcmVz
LndyaXRlSGVhZCg1MDIpOworICAgICAgICByZXMud3JpdGUoIlByb3h5IHRhcmdldCBtaXNzaW5n
Iik7CisgICAgICAgIHJlcy5lbmQoKTsKKyAgICB9KTsKK307CisKK0R5bmFtaWNQcm94eS5wcm90
b3R5cGUuaGFuZGxlV3MgPTNEIGZ1bmN0aW9uKHJlcSwgcmVzLCBoZWFkKSB7CisgICAgLy8gbm8g
bG9jYWwgcm91dGUgZm91bmQsIHRpbWUgdG8gcHJveHkKKyAgICB2YXIgdGFyZ2V0ID0zRCB0aGlz
LnRhcmdldEZvclJlcXVlc3QocmVxKTsKKyAgICBjb25zb2xlLmxvZygiUFJPWFkgV1MgIiArIHJl
cS51cmwgKyAiIHRvICIgKyByZXEudXJsKTsKKyAgICB2YXIgb3JpZ2luID0zRCByZXEuaGVhZGVy
cy5vcmlnaW47CisgICAgdGhpcy5yZXdyaXRlUmVxdWVzdChyZXEpOworICAgIHJlcy5vbGRXcml0
ZUhlYWQgPTNEIHJlcy53cml0ZUhlYWQ7CisgICAgcmVzLndyaXRlSGVhZCA9M0QgZnVuY3Rpb24o
c3RhdHVzQ29kZSwgaGVhZGVycykgeworICAgICAgICByZXMuc2V0SGVhZGVyKCdBY2Nlc3MtQ29u
dHJvbC1BbGxvdy1PcmlnaW4nLCBvcmlnaW4pOworICAgICAgICByZXMuc2V0SGVhZGVyKCdBY2Nl
c3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsICd0cnVlJyk7CisgICAgICAgIHJlcy5vbGRX
cml0ZUhlYWQoc3RhdHVzQ29kZSwgaGVhZGVycyk7CisgICAgfQorICAgIHRoaXMucHJveHkud3Mo
cmVxLCByZXMsIGhlYWQsIHsKKyAgICAgICAgdGFyZ2V0OiB0YXJnZXQKKyAgICB9LCBmdW5jdGlv
biAoZSkgeworICAgICAgICBjb25zb2xlLmxvZygiUHJveHkgZXJyb3I6ICIsIGUpOworICAgICAg
ICByZXMud3JpdGVIZWFkKDUwMik7CisgICAgICAgIHJlcy53cml0ZSgiUHJveHkgdGFyZ2V0IG1p
c3NpbmciKTsKKyAgICAgICAgcmVzLmVuZCgpOworICAgIH0pOworfTsKKworZXhwb3J0cy5EeW5h
bWljUHJveHkgPTNEIER5bmFtaWNQcm94eTsKCmRpZmYgLXIgNTNlOTJlNWJlN2FiMmFmNTAzMmU2
ZjNhZTg4MTI0NDA0ZjlhZTRiNCAtciBhN2I5ZWIzZGYzN2QwNDE0NTgzOTc1Nj0KNDJmM2EwYmUw
MWIzMTQ2YjEgbGliL2dhbGF4eS93ZWIvcHJveHkvanMvcGFja2FnZS5qc29uCi0tLSAvZGV2L251
bGwKKysrIGIvbGliL2dhbGF4eS93ZWIvcHJveHkvanMvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEs
MTcgQEAKK3sKKyAgIm5hbWUiOiAiZ2FsYXh5LXByb3h5IiwKKyAgInZlcnNpb24iOiAiMC4wLjEi
LAorICAiZGVzY3JpcHRpb24iOiAiQSBkeW5hbWljIHJldmVyc2UgcHJveHkgZm9yIHVzZSB3aXRo
aW4gR2FsYXh5IiwKKyAgIm1haW4iOiAiaW5kZXguanMiLAorICAiYXV0aG9yIjogIkpvaG4gQ2hp
bHRvbiIsCisgICJsaWNlbnNlIjogIkFGTCB2MyIsCisgICJyZWFkbWVGaWxlbmFtZSI6ICJSRUFE
TUUubWQiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJtZXJjdXJpYWwiLAorICAg
ICJ1cmwiOiAiaHR0cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbCIKKyAg
fSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiaHR0cC1wcm94eSI6ICJ+MS4xIiwKKyAgICAi
Y29tbWFuZGVyIjogIn4yLjIiCisgIH0KK30KCmRpZmYgLXIgNTNlOTJlNWJlN2FiMmFmNTAzMmU2
ZjNhZTg4MTI0NDA0ZjlhZTRiNCAtciBhN2I5ZWIzZGYzN2QwNDE0NTgzOTc1Nj0KNDJmM2EwYmUw
MWIzMTQ2YjEgdGVzdC91bml0L3Rlc3RfbGF6eV9wcm9jZXNzLnB5Ci0tLSAvZGV2L251bGwKKysr
IGIvdGVzdC91bml0L3Rlc3RfbGF6eV9wcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9y
dCBvcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQorCitmcm9tIGdhbGF4eS51dGlsLmxh
enlfcHJvY2VzcyBpbXBvcnQgTGF6eVByb2Nlc3MKKworCitkZWYgdGVzdF9sYXp5X3Byb2Nlc3Mo
KToKKyAgICB0ID0zRCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgIG9zLnJlbW92
ZSh0Lm5hbWUpCisgICAgbGF6eV9wcm9jZXNzID0zRCBMYXp5UHJvY2VzcyhbImJhc2giLCAiLWMi
LCAidG91Y2ggJXM7IHNsZWVwIDEwMCIgJSB0Lj0KbmFtZV0pCisgICAgYXNzZXJ0IG5vdCBvcy5w
YXRoLmV4aXN0cyh0Lm5hbWUpCisgICAgbGF6eV9wcm9jZXNzLnN0YXJ0X3Byb2Nlc3MoKQorICAg
IHRpbWUuc2xlZXAoLjAyKQorICAgIGFzc2VydCBsYXp5X3Byb2Nlc3MucHJvY2Vzcy5wb2xsKCkg
aXMgTm9uZQorICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyh0Lm5hbWUpCisgICAgbGF6eV9wcm9j
ZXNzLnNodXRkb3duKCkKKyAgICB0aW1lLnNsZWVwKC4wMikKKyAgICBhc3NlcnQgbGF6eV9wcm9j
ZXNzLnByb2Nlc3MucG9sbCgpCgpkaWZmIC1yIDUzZTkyZTViZTdhYjJhZjUwMzJlNmYzYWU4ODEy
NDQwNGY5YWU0YjQgLXIgYTdiOWViM2RmMzdkMDQxNDU4Mzk3NTY9CjQyZjNhMGJlMDFiMzE0NmIx
IHRlc3QvdW5pdC90ZXN0X3NvY2tldHMucHkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0L3VuaXQv
dGVzdF9zb2NrZXRzLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCBzb2NrZXQKK2Zyb20gZ2Fs
YXh5LnV0aWwgaW1wb3J0IHNvY2tldHMKKworCitkZWYgdGVzdF91bnVzZWRfZnJlZV9wb3J0X3Vu
Y29uc3RyYWluZWQoKToKKyAgICBwb3J0ID0zRCBzb2NrZXRzLnVudXNlZF9wb3J0KCkKKworICAg
IHMgPTNEIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkK
KyAgICAjIHdvdWxkIHRocm93IGV4Y2VwdGlvbiBpZiBwb3J0IHdhcyBub3QgZnJlZS4KKyAgICBz
LmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKyAgICBzLmNsb3NlKCkKKwoKCmh0dHBzOi8vYml0
YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8xMjk0NTdkMGNjNDEvCkNo
YW5nZXNldDogICAxMjk0NTdkMGNjNDEKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAg
ICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRhcHQgSVB5dGhvbi9J
RSBmcmFtZXdvcmsgZm9yIGR5bmFtaWMgR2FsYXh5IHByb3h5LgpBZmZlY3RlZCAjOiAgNCBmaWxl
cwoKZGlmZiAtciBhN2I5ZWIzZGYzN2QwNDE0NTgzOTc1NjQyZjNhMGJlMDFiMzE0NmIxIC1yIDEy
OTQ1N2QwY2M0MTkzYTZiOTcyYTk5PQpjMjBiYzliZTZkODkxNGE4ZSBjb25maWcvcGx1Z2lucy92
aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwotLS0gYS9jb25maWcvcGx1Z2lu
cy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcworKysgYi9jb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pZS5qcwpAQCAtMzEsNiArMzEs
OSBAQAogICAgIGludGVydmFsID0zRCBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICAgICAk
LmFqYXgoewogICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICB4aHJGaWVsZHM6IHsK
KyAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUKKyAgICAgICAgICAgIH0sCiAg
ICAgICAgICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMCwKICAgICAg
ICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CgpkaWZmIC1yIGE3YjllYjNkZjM3ZDA0MTQ1ODM5
NzU2NDJmM2EwYmUwMWIzMTQ2YjEgLXIgMTI5NDU3ZDBjYzQxOTNhNmI5NzJhOTk9CmMyMGJjOWJl
NmQ4OTE0YThlIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2pz
L2lweXRob24uanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9z
dGF0aWMvanMvaXB5dGhvbi5qcworKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9p
cHl0aG9uL3N0YXRpYy9qcy9pcHl0aG9uLmpzCkBAIC0xNSwxMSArMTUsMTQgQEAKIH0KPTIwCiBm
dW5jdGlvbiBtZXNzYWdlX25vX2F1dGgoKXsKKyAgICAvLyBObyBsb25nZXIgYSBzZWN1cml0eSBp
c3N1ZSwgcHJveHkgdmFsaWRhdGVzIEdhbGF4eSBzZXNzaW9uIHRva2VuLgorICAgIC8qCiAgICAg
dG9hc3RyLndhcm5pbmcoCiAgICAgICAgICJJUHl0aG9uIE5vdGVib29rIHdhcyBsdW5jaGVkIHdp
dGhvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0KY3VyaXR5IGlzc3VlLiA8YSBocmVm
PTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vd2lraS9JPQpQ
eXRob24tTm90ZWJvb2std2FzLWx1bmNoZWQtd2l0aG91dC1hdXRoZW50aWNhdGlvbicgdGFyZ2V0
PTNEJ19ibGFuayc+TW9yZSA9CmRldGFpbHMgLi4uPC9hPiIsCiAgICAgICAgICJTZWN1cml0eSB3
YXJuaW5nIiwKICAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAs
ICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KICAgICApOworICAgICovCiB9Cj0yMAo9MjAKCmRpZmYg
LXIgYTdiOWViM2RmMzdkMDQxNDU4Mzk3NTY0MmYzYTBiZTAxYjMxNDZiMSAtciAxMjk0NTdkMGNj
NDE5M2E2Yjk3MmE5OT0KYzIwYmM5YmU2ZDg5MTRhOGUgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1
YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTE5LDYgKzE5LDgg
QEAKICAgICAiIiIKICAgICBzZWxmLmF0dHIudml6X2lkID0zRCBuYW1lCiAgICAgc2VsZi5hdHRy
Lmhpc3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5p
ZCApCisgICAgc2VsZi5hdHRyLnByb3h5X3JlcXVlc3QgPTNEIHRyYW5zLmFwcC5wcm94eV9tYW5h
Z2VyLnNldHVwX3Byb3h5KCB0cmFucz0KICkKKyAgICBzZWxmLmF0dHIucHJveHlfdXJsID0zRCBz
ZWxmLmF0dHIucHJveHlfcmVxdWVzdFsgJ3Byb3h5X3VybCcgXQogICAgIHNlbGYuYXR0ci5nYWxh
eHlfY29uZmlnID0zRCB0cmFucy5hcHAuY29uZmlnCiAgICAgc2VsZi5hdHRyLmdhbGF4eV9yb290
X2RpciA9M0Qgb3MucGF0aC5hYnNwYXRoKHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLj0Kcm9vdCkK
ICAgICBzZWxmLmF0dHIucm9vdCA9M0QgaC51cmxfZm9yKCIvIikKQEAgLTMzLDggKzM1LDcgQEAK
ICAgICBzZWxmLmF0dHIuUEFTU1dPUkRfQVVUSCA9M0Qgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0
Ym9vbGVhbigibWFpbiIsICJwPQphc3N3b3JkX2F1dGgiKQogICAgIHNlbGYuYXR0ci5BUEFDSEVf
VVJMUyA9M0Qgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJhcGE9CmNo
ZV91cmxzIikKICAgICBzZWxmLmF0dHIuU1NMX1VSTFMgPTNEIHNlbGYuYXR0ci52aXpfY29uZmln
LmdldGJvb2xlYW4oIm1haW4iLCAic3NsIikKLSAgICBzZWxmLmF0dHIuUE9SVCA9M0Qgc2VsZi5w
cm94eV9yZXF1ZXN0X3BvcnQoKQotCisgICAgc2VsZi5hdHRyLlBPUlQgPTNEIHNlbGYuYXR0ci5w
cm94eV9yZXF1ZXN0WyAncHJveGllZF9wb3J0JyBdCiAgICAgc2VsZi5hdHRyLkhPU1QgPTNEIHJl
cXVlc3QuaG9zdC5yc3BsaXQoJzonLCAxKVswXQogJT48LyVkZWY+CkBAIC05NywzMiArOTgsNiBA
QAogICAlPjwvJWRlZj4KPTIwCi08JWRlZiBuYW1lPTNEInByb3h5X3JlcXVlc3RfcG9ydCgpIj4K
LTwlCi0gICAgIiIiCi0gICAgICAgIFJlZmFjdG9yIG9mIG91ciBwb3J0IGdldHRpbmcuLi5ldmVu
dHVhbGx5IHRoaXMgd2lsbCBiZSByZXBsYWNlZCB3aT0KdGggYW4gQVBJIGNhbGwgaW5zdGVhZC4K
LSAgICAiIiIKLSAgICAjIEZpbmQgYWxsIHBvcnRzIHRoYXQgYXJlIGFscmVhZHkgb2NjdXBpZWQK
LSAgICBjbWRfbmV0c3RhdCA9M0Qgc2hsZXguc3BsaXQoIm5ldHN0YXQgLXR1bG4iKQotICAgIHAx
ID0zRCBzdWJwcm9jZXNzLlBvcGVuKGNtZF9uZXRzdGF0LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJ
UEUpCi0KLSAgICBvY2N1cGllZF9wb3J0cyA9M0Qgc2V0KCkKLSAgICBmb3IgbGluZSBpbiBwMS5z
dGRvdXQucmVhZCgpLnNwbGl0KCdcbicpOgotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3Rj
cCcpIG9yIGxpbmUuc3RhcnRzd2l0aCgndGNwNicpOgotICAgICAgICAgICAgY29sID0zRCBsaW5l
LnNwbGl0KCkKLSAgICAgICAgICAgIGxvY2FsX2FkZHJlc3MgPTNEIGNvbFszXQotICAgICAgICAg
ICAgbG9jYWxfcG9ydCA9M0QgbG9jYWxfYWRkcmVzcy5zcGxpdCgnOicpWy0xXQotICAgICAgICAg
ICAgb2NjdXBpZWRfcG9ydHMuYWRkKCBpbnQobG9jYWxfcG9ydCkgKQotCi0gICAgIyBHZW5lcmF0
ZSByYW5kb20gZnJlZSBwb3J0IG51bWJlciBmb3Igb3VyIGRvY2tlciBjb250YWluZXIKLSAgICB3
aGlsZSBUcnVlOgotICAgICAgICBwb3J0ID0zRCByYW5kb20ucmFuZHJhbmdlKDEwMDAwLDE1MDAw
KQotICAgICAgICBpZiBwb3J0IG5vdCBpbiBvY2N1cGllZF9wb3J0czoKLSAgICAgICAgICAgIGJy
ZWFrCi0gICAgcmV0dXJuIHBvcnQKLSU+Ci08LyVkZWY+Ci0KIDwlZGVmIG5hbWU9M0QiZ2VuZXJh
dGVfaGV4KGxlbmd0aCkiPjwlCiAgICAgIiIiCkBAIC0xNjEsMjYgKzEzNiwxMCBAQAo9MjAKICAg
ICAgICAgVGhlcmUgYXJlIHNldmVyYWwgdmFyaWFibGVzIGFjY2Vzc2libGUgdG8gdGhlIHVzZXI6
Cj0yMAotICAgICAgICAgICAgLSAke1BST1RPfSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcHJvdG9j
b2wgKGh0dHAvaHR0cHMpCi0gICAgICAgICAgICAtICR7SE9TVH0gd2lsbCBiZSByZXBsYWNlZCB3
aXRoIHRoZSBjb3JyZWN0IGhvc3RuYW1lCisgICAgICAgICAgICAtICR7UFJPWFlfVVJMfSB3aWxs
IGJlIHJlcGxhY2VkIHdpdGggZHluYW1pY2FsbHkgY3JlYXRlIHByb3h5CiAgICAgICAgICAgICAt
ICR7UE9SVH0gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBwb3J0IHRoZSBkb2NrZXIgaW1hZ2Ug
aXMgYT0KdHRhY2hlZCB0bwotCi0gICAgICAgIEluIHRoZSBjYXNlIHRoYXQgYGFwYWNoZV91cmxz
ID0zRCBGYWxzZWAsIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBITz0KU1QgaGFzIGEgUE9SVCBhcHBl
bmVkZWQgdG8KLSAgICAgICAgaXQsIHNvIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0byB0ZW1wbGF0
ZSAyeCB1cmxzLgogICAgICIiIgotICAgICMgRmlndXJlIG91dCBvdXIgc3Vic3RpdHV0aW9ucwot
ICAgIGlmIHNlbGYuYXR0ci5TU0xfVVJMUzoKLSAgICAgICAgcHJvdG9jb2wgPTNEICdodHRwcycK
LSAgICBlbHNlOgotICAgICAgICBwcm90b2NvbCA9M0QgJ2h0dHAnCi0KLSAgICBpZiBub3Qgc2Vs
Zi5hdHRyLkFQQUNIRV9VUkxTOgotICAgICAgICAjIElmIHRoZXkgYXJlIG5vdCB1c2luZyBhcGFj
aGUgVVJMcywgdGhhdCBpbXBsaWVzIHRoZXJlJ3MgYSBwb3J0IGE9CnR0YWNoZWQgdG8gdGhlIGhv
c3QKLSAgICAgICAgIyBzdHJpbmcsIHRodXMgd2UgcmVwbGFjZSBqdXN0IHRoZSBmaXJzdCBpbnN0
YW5jZSBvZiBob3N0IHRoYXQgd2UgPQpzZWUuCi0gICAgICAgIHVybF90ZW1wbGF0ZSA9M0QgdXJs
X3RlbXBsYXRlLnJlcGxhY2UoJyR7SE9TVH0nLCAnJHtIT1NUfToke1BPUlR9Jz0KLCAxKQotCi0g
ICAgdXJsID0zRCB1cmxfdGVtcGxhdGUucmVwbGFjZSgnJHtQUk9UT30nLCBwcm90b2NvbCkgXAot
ICAgICAgICAgICAgLnJlcGxhY2UoJyR7SE9TVH0nLCBzZWxmLmF0dHIuSE9TVCkgXAorICAgIHVy
bCA9M0QgdXJsX3RlbXBsYXRlLnJlcGxhY2UoJyR7UFJPWFlfVVJMfScsIHN0cihzZWxmLmF0dHIu
cHJveHlfdXJsKSk9CiBcCiAgICAgICAgICAgICAucmVwbGFjZSgnJHtQT1JUfScsIHN0cihzZWxm
LmF0dHIuUE9SVCkpCiAgICAgcmV0dXJuIHVybAogJT4KCmRpZmYgLXIgYTdiOWViM2RmMzdkMDQx
NDU4Mzk3NTY0MmYzYTBiZTAxYjMxNDZiMSAtciAxMjk0NTdkMGNjNDE5M2E2Yjk3MmE5OT0KYzIw
YmM5YmU2ZDg5MTRhOGUgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1w
bGF0ZXMvaXB5dGhvbi5tPQpha28KLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpAQCAtMzAsOCArMzAsOCBA
QAo9MjAKICMjIEdlbmVyYWwgSUUgc3BlY2lmaWMKICMgQWNjZXNzIFVSTHMgZm9yIHRoZSBub3Rl
Ym9vayBmcm9tIHdpdGhpbiBnYWxheHkuCi1ub3RlYm9va19hY2Nlc3NfdXJsID0zRCBpZS51cmxf
dGVtcGxhdGUoJyR7UFJPVE99Oi8vJHtIT1NUfS9pcHl0aG9uLyR7UE9SVD0KfS9ub3RlYm9va3Mv
aXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQotbm90ZWJvb2tfbG9naW5fdXJsID0zRCBp
ZS51cmxfdGVtcGxhdGUoJyR7UFJPVE99Oi8vJHtIT1NUfS9pcHl0aG9uLyR7UE9SVH09Ci9sb2dp
bj9uZXh0PTNEJTJGaXB5dGhvbiUyRiR7UE9SVH0lMkZ0cmVlJykKK25vdGVib29rX2FjY2Vzc191
cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9YWV9VUkx9L2lweXRob24vJHtQT1JUfS9ub3Rl
PQpib29rcy9pcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpCitub3RlYm9va19sb2dpbl91
cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9YWV9VUkx9L2lweXRob24vJHtQT1JUfS9sb2dp
bj0KP25leHQ9M0QlMkZpcHl0aG9uJTJGJHtQT1JUfSUyRnRyZWUnKQo9MjAKIGRvY2tlcl9jbWQg
PTNEIGllLmRvY2tlcl9jbWQodGVtcF9kaXIpCiBzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2NtZCwg
c2hlbGw9M0RUcnVlKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRy
YWwvY29tbWl0cy9mZTIxYmQ0MmYzNWMvCkNoYW5nZXNldDogICBmZTIxYmQ0MmYzNWMKVXNlcjog
ICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApT
dW1tYXJ5OiAgICAgVXBkYXRlZCBtb3JlIGNvcnJlY3QgZGlzY292ZXJ5IG9mIEdhbGF4eSBjb25m
aWcgZmlsZS4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAxMjk0NTdkMGNjNDE5M2E2Yjk3
MmE5OWMyMGJjOWJlNmQ4OTE0YThlIC1yIGZlMjFiZDQyZjM1YzM3Y2ViMGE4MzI4PQoxMjA1M2I4
ZjI3N2E0NjQ2YyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRl
cy9pZS5tYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vdGVt
cGxhdGVzL2llLm1ha28KKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvaWUubWFrbwpAQCAtODcsNyArODcsOSBAQAogICAgICAgICBHZXQgcG9ydCBn
YWxheHkgaXMgcnVubmluZyBvbiAoaWYgcnVubmluZyB1bmRlciBwYXN0ZXIpCiAgICAgIiIiCiAg
ICAgY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAnODA4
MCd9KQotICAgIGNvbmZpZy5yZWFkKCBvcy5wYXRoLmpvaW4oIGdhbGF4eV9yb290X2RpciwgJ3Vu
aXZlcnNlX3dzZ2kuaW5pJyApICkKKyAgICBjb25maWdfZmlsZSA9M0QgZ2FsYXh5X2NvbmZpZy5j
b25maWdfZmlsZQorICAgIGlmIGNvbmZpZ19maWxlOgorICAgICAgICBjb25maWcucmVhZCggY29u
ZmlnX2ZpbGUgKQo9MjAKICAgICAjIHVXU0dJIGdhbGF4eSBpbnN0YWxsYXRpb25zIGRvbid0IHVz
ZSBwYXN0ZXIgYW5kIG9ubHkgc3BlYWsgdVdTR0kgbm90PQogaHR0cAogICAgIHRyeToKCgpodHRw
czovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvNDM0ODYxOGI0
YjhkLwpDaGFuZ2VzZXQ6ICAgNDM0ODYxOGI0YjhkClVzZXI6ICAgICAgICBqbWNoaWx0b24KRGF0
ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIEltcGxlbWVu
dCBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsIGNvbmZpZyBvcHRpb24uLi4KQWxsb3dzIEdhbGF4
eSB0byBrbm93IGhvdyB0byBzcGVjaWZ5IG90aGVyIGNvbXBvbmVudHMgc2hvdWxkIGNvbW11bmlj
YXRlIHdpPQp0aCBpdHMgQVBJLiBVc2VkIGltbWVkaWF0ZWx5IGFzIGEgcmVhc29uYWJsZSBkZWZh
dWx0IGZvciBQdWxzYXIgTVEgbW9kZSBhbmQ9CiB3aWxsIGJlIHVzZWQgbGF0ZXIgYnkgdGhlIERv
Y2tlciBJUHl0aG9uIHN0dWZmIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlID0KQVBJIGFuZCBm
b3IgdGhpcyBjYXJkIGh0dHBzOi8vdHJlbGxvLmNvbS9jL2hMNE5Zc1NwLgpBZmZlY3RlZCAjOiAg
NCBmaWxlcwoKZGlmZiAtciBmZTIxYmQ0MmYzNWMzN2NlYjBhODMyODEyMDUzYjhmMjc3YTQ2NDZj
IC1yIDQzNDg2MThiNGI4ZGQ1ZjBjNmQ2Y2NhPQo1OTVlMWZmMGFmZmI2YjNlMSBjb25maWcvZ2Fs
YXh5LmluaS5zYW1wbGUKLS0tIGEvY29uZmlnL2dhbGF4eS5pbmkuc2FtcGxlCisrKyBiL2NvbmZp
Zy9nYWxheHkuaW5pLnNhbXBsZQpAQCAtNDIxLDYgKzQyMSwxMSBAQAogIyAtICRpc284NjAxIChj
b21wbGV0ZSBmb3JtYXQgc3RyaW5nIGFzIHNwZWNpZmllZCBieSBJU08gODYwMSBpbnRlcm5hdGlv
bmE9Cmwgc3RhbmRhcmQpLgogIyBwcmV0dHlfZGF0ZXRpbWVfZm9ybWF0ID0zRCAkbG9jYWxlIChV
VEMpCj0yMAorIyBVUkwgKHdpdGggc2NoZW1hIGh0dHAvaHR0cHMpIG9mIHRoZSBHYWxheHkgaW5z
dGFuY2UgYXMgYWNjZXNzaWJsZSB3aXRoaW49CiB5b3VyIGxvY2FsCisjIG5ldHdvcmsgLSBpZiBz
cGVjaWZpZWQgdXNlZCBhcyBhIGRlZmF1bHQgYnkgcHVsc2FyIGZpbGUgc3RhZ2luZyBhbmQgSVB5
dD0KaG9uIGRvY2tlcgorIyBjb250YWluZXIgZm9yIGNvbW11bmljYXRpbmcgYmFjayB3aXRoIEdh
bGF4eSB2aWEgdGhlIEFQSS4KKyNnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsID0zRCBodHRwOi8v
bG9jYWxob3N0OjgwODAKKwogIyBUaGUgVVJMIG9mIHRoZSBwYWdlIHRvIGRpc3BsYXkgaW4gR2Fs
YXh5J3MgbWlkZGxlIHBhbmUgd2hlbiBsb2FkZWQuIFRoaXM9CiBjYW4gYmU9MjAKICMgYW4gYWJz
b2x1dGUgb3IgcmVsYXRpdmUgVVJMLgogI3dlbGNvbWVfdXJsID0zRCAvc3RhdGljL3dlbGNvbWUu
aHRtbAoKZGlmZiAtciBmZTIxYmQ0MmYzNWMzN2NlYjBhODMyODEyMDUzYjhmMjc3YTQ2NDZjIC1y
IDQzNDg2MThiNGI4ZGQ1ZjBjNmQ2Y2NhPQo1OTVlMWZmMGFmZmI2YjNlMSBjb25maWcvam9iX2Nv
bmYueG1sLnNhbXBsZV9hZHZhbmNlZAotLS0gYS9jb25maWcvam9iX2NvbmYueG1sLnNhbXBsZV9h
ZHZhbmNlZAorKysgYi9jb25maWcvam9iX2NvbmYueG1sLnNhbXBsZV9hZHZhbmNlZApAQCAtNTAs
NyArNTAsOSBAQAogICAgICAgICAgIDwhLS0gQU1RUCBVUkwgdG8gY29ubmVjdCB0by4gLS0+PHBh
cmFtIGlkPTNEImFtcXBfdXJsIj5hbXFwOi8vZ3U9CmVzdDpndWVzdEBsb2NhbGhvc3Q6NTY3Mi8v
PC9wYXJhbT48IS0tIFVSTCByZW1vdGUgUHVsc2FyIGFwcHMgc2hvdWxkIHRyYW5zZj0KZXIgZmls
ZXMgdG8gdGhpcyBHYWxheHkKLSAgICAgICAgICAgICAgIGluc3RhbmNlIHRvL2Zyb20uIC0tPgor
ICAgICAgICAgICAgICAgaW5zdGFuY2UgdG8vZnJvbS4gVGhpcyBjYW4gYmUgdW5zcGVjaWZpZWQv
ZW1wdHkgaWYKKyAgICAgICAgICAgICAgIGdhbGF4eV9pbmZyYXN0cnVjdHVyZV91cmwgaXMgc2V0
IGluIGdhbGF4eS5pbmkuCisgICAgICAgICAgLS0+PHBhcmFtIGlkPTNEImdhbGF4eV91cmwiPmh0
dHA6Ly9sb2NhbGhvc3Q6ODA4MDwvcGFyYW0+PCEtLSBQdT0KbHNhciBqb2IgbWFuYWdlciB0byBj
b21tdW5pY2F0ZSB3aXRoIChzZWUgUHVsc2FyCiAgICAgICAgICAgICAgICBkb2NzIGZvciBpbmZv
cm1hdGlvbiBvbiBqb2IgbWFuYWdlcnMpLiAtLT4KCmRpZmYgLXIgZmUyMWJkNDJmMzVjMzdjZWIw
YTgzMjgxMjA1M2I4ZjI3N2E0NjQ2YyAtciA0MzQ4NjE4YjRiOGRkNWYwYzZkNmNjYT0KNTk1ZTFm
ZjBhZmZiNmIzZTEgbGliL2dhbGF4eS9jb25maWcucHkKLS0tIGEvbGliL2dhbGF4eS9jb25maWcu
cHkKKysrIGIvbGliL2dhbGF4eS9jb25maWcucHkKQEAgLTE4LDYgKzE4LDggQEAKIGZyb20gZ2Fs
YXh5LnV0aWwuZGJrZXlzIGltcG9ydCBHZW5vbWVCdWlsZHMKIGZyb20gZ2FsYXh5IGltcG9ydCBl
Z2dzCj0yMAoraW1wb3J0IENvbmZpZ1BhcnNlcgorCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCBfX25hbWVfXyApCj0yMAo9MjAKQEAgLTI5Niw2ICsyOTgsMjMgQEAKICAgICAgICAgZm9yIHNl
Y3Rpb24gaW4gZ2xvYmFsX2NvbmZfcGFyc2VyLnNlY3Rpb25zKCk6CiAgICAgICAgICAgICBpZiBz
ZWN0aW9uLnN0YXJ0c3dpdGgoJ3NlcnZlcjonKToKICAgICAgICAgICAgICAgICBzZWxmLnNlcnZl
cl9uYW1lcy5hcHBlbmQoc2VjdGlvbi5yZXBsYWNlKCdzZXJ2ZXI6JywgJycsIDEpKQorCisgICAg
ICAgICMgRGVmYXVsdCBVUkwgKHdpdGggc2NoZW1hIGh0dHAvaHR0cHMpIG9mIHRoZSBHYWxheHkg
aW5zdGFuY2Ugd2l0aD0KaW4gdGhlCisgICAgICAgICMgbG9jYWwgbmV0d29yayAtIHVzZWQgdG8g
cmVtb3RlbHkgY29tbXVuaWNhdGUgd2l0aCB0aGUgR2FsYXh5IEFQSS4KKyAgICAgICAgZ2FsYXh5
X2luZnJhc3RydWN0dXJlX3VybCA9M0Qga3dhcmdzLmdldCggJ2dhbGF4eV9pbmZyYXN0cnVjdHVy
ZV91PQpybCcsIE5vbmUgKQorICAgICAgICBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsX3NldCA9
M0QgVHJ1ZQorICAgICAgICBpZiBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsIGlzIE5vbmU6Cisg
ICAgICAgICAgICAjIFN0aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGJ1dCBpbmRpY2F0ZSBpdCB3YXMg
bm90IGV4cGxpY2l0bHkgcz0KZXQKKyAgICAgICAgICAgICMgc28gZGVwZW5kZW5kaW5nIG9uIHRo
ZSBjb250ZXh0IGEgYmV0dGVyIGRlZmF1bHQgY2FuIGJlIHVzZWQgKAorICAgICAgICAgICAgIyBy
ZXF1ZXN0IHVybCBpbiBhIHdlYiB0aHJlYWQsIERvY2tlciBwYXJlbnQgaW4gSUUgc3R1ZmYsIGV0
Yy49Ci4uKQorICAgICAgICAgICAgZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybCA9M0QgImh0dHA6
Ly9sb2NhbGhvc3QiCisgICAgICAgICAgICBwb3J0ID0zRCBzZWxmLmd1ZXNzX2dhbGF4eV9wb3J0
KCkKKyAgICAgICAgICAgIGlmIHBvcnQ6CisgICAgICAgICAgICAgICAgZ2FsYXh5X2luZnJhc3Ry
dWN0dXJlX3VybCArPTNEICI6JXMiICUgKHBvcnQpCisgICAgICAgICAgICBnYWxheHlfaW5mcmFz
dHJ1Y3R1cmVfdXJsX3NldCA9M0QgRmFsc2UKKyAgICAgICAgc2VsZi5nYWxheHlfaW5mcmFzdHJ1
Y3R1cmVfdXJsID0zRCBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsCisgICAgICAgIHNlbGYuZ2Fs
YXh5X2luZnJhc3RydWN0dXJlX3VybF9zZXQgPTNEIGdhbGF4eV9pbmZyYXN0cnVjdHVyZV91cmxf
cz0KZXQKKwogICAgICAgICAjIFN0b3JlIGFkdmFuY2VkIGpvYiBtYW5hZ2VtZW50IGNvbmZpZwog
ICAgICAgICBzZWxmLmpvYl9tYW5hZ2VyID0zRCBrd2FyZ3MuZ2V0KCdqb2JfbWFuYWdlcicsIHNl
bGYuc2VydmVyX25hbWUpLnM9CnRyaXAoKQogICAgICAgICBzZWxmLmpvYl9oYW5kbGVycyA9M0Qg
WyB4LnN0cmlwKCkgZm9yIHggaW4ga3dhcmdzLmdldCgnam9iX2hhbmRsZXI9CnMnLCBzZWxmLnNl
cnZlcl9uYW1lKS5zcGxpdCgnLCcpIF0KQEAgLTU0OCw2ICs1NjcsMTkgQEAKICAgICAgICAgIiIi
CiAgICAgICAgIHJldHVybiByZXNvbHZlX3BhdGgoIHBhdGgsIHNlbGYucm9vdCApCj0yMAorICAg
IGRlZiBndWVzc19nYWxheHlfcG9ydChzZWxmKToKKyAgICAgICAgIyBDb2RlIGRlcml2ZWQgZnJv
bSBJUHl0aG9uIHdvcmsgaWUubWFrbworICAgICAgICBjb25maWcgPTNEIENvbmZpZ1BhcnNlci5T
YWZlQ29uZmlnUGFyc2VyKHsncG9ydCc6ICc4MDgwJ30pCisgICAgICAgIGlmIHNlbGYuY29uZmln
X2ZpbGU6CisgICAgICAgICAgICBjb25maWcucmVhZCggc2VsZi5jb25maWdfZmlsZSApCisKKyAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgcG9ydCA9M0QgY29uZmlnLmdldGludCgnc2VydmVyOiVz
JyAlIHNlbGYuc2VydmVyX25hbWUsICdwb3J0JykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAg
ICAgIyB1V1NHSSBnYWxheHkgaW5zdGFsbGF0aW9ucyBkb24ndCB1c2UgcGFzdGVyIGFuZCBvbmx5
IHNwZWFrIHU9CldTR0kgbm90IGh0dHAKKyAgICAgICAgICAgIHBvcnQgPTNEIE5vbmUKKyAgICAg
ICAgcmV0dXJuIHBvcnQKKwo9MjAKIGRlZiBnZXRfZGF0YWJhc2VfZW5naW5lX29wdGlvbnMoIGt3
YXJncywgbW9kZWxfcHJlZml4PTNEJycgKToKICAgICAiIiIKCmRpZmYgLXIgZmUyMWJkNDJmMzVj
MzdjZWIwYTgzMjgxMjA1M2I4ZjI3N2E0NjQ2YyAtciA0MzQ4NjE4YjRiOGRkNWYwYzZkNmNjYT0K
NTk1ZTFmZjBhZmZiNmIzZTEgbGliL2dhbGF4eS9qb2JzL3J1bm5lcnMvcHVsc2FyLnB5Ci0tLSBh
L2xpYi9nYWxheHkvam9icy9ydW5uZXJzL3B1bHNhci5weQorKysgYi9saWIvZ2FsYXh5L2pvYnMv
cnVubmVycy9wdWxzYXIucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICApLAogICAgIGdhbGF4eV91
cmw9M0RkaWN0KAogICAgICAgICBtYXA9M0RzcGVjcy50b19zdHJfb3Jfbm9uZSwKLSAgICAgICAg
ZGVmYXVsdD0zRERFRkFVTFRfR0FMQVhZX1VSTCwKKyAgICAgICAgZGVmYXVsdD0zRE5vbmUsCiAg
ICAgKSwKICAgICBtYW5hZ2VyPTNEZGljdCgKICAgICAgICAgbWFwPTNEc3BlY3MudG9fc3RyX29y
X25vbmUsCkBAIC0xMjksNiArMTI5LDggQEAKICAgICAgICAgc3VwZXIoIFB1bHNhckpvYlJ1bm5l
ciwgc2VsZiApLl9faW5pdF9fKCBhcHAsIG53b3JrZXJzLCBydW5uZXJfcGFyPQphbV9zcGVjcz0z
RFBVTFNBUl9QQVJBTV9TUEVDUywgKiprd2RzICkKICAgICAgICAgc2VsZi5faW5pdF93b3JrZXJf
dGhyZWFkcygpCiAgICAgICAgIGdhbGF4eV91cmwgPTNEIHNlbGYucnVubmVyX3BhcmFtcy5nYWxh
eHlfdXJsCisgICAgICAgIGlmIG5vdCBnYWxheHlfdXJsOgorICAgICAgICAgICAgZ2FsYXh5X3Vy
bCA9M0QgYXBwLmNvbmZpZy5nYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsCiAgICAgICAgIGlmIGdh
bGF4eV91cmw6CiAgICAgICAgICAgICBnYWxheHlfdXJsID0zRCBnYWxheHlfdXJsLnJzdHJpcCgi
LyIpCiAgICAgICAgIHNlbGYuZ2FsYXh5X3VybCA9M0QgZ2FsYXh5X3VybAoKCmh0dHBzOi8vYml0
YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8wZWFmMjg3MzFjYjMvCkNo
YW5nZXNldDogICAwZWFmMjg3MzFjYjMKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAg
ICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgVXBkYXRlIGllLm1ha28g
dG8gdXNlIGdhbGF4eV9pbmZyYXN0cnVjdHVyZV91cmwgaWYgYXZhaWxhYmxlLi4uCkFsc28gdXNl
IHRoZSBtZXRob2QgZ3Vlc3NfZ2FsYXh5X3BvcnQgb24gR2FsYXh5J3MgY29uZmlnIG9iamVjdCB0
aGF0IHdhcyBtbz0KdmVkIHRoZXJlIGZyb20gaWUubWFrbyBpbiBhIHByZXZpb3VzIEdhbGF4eSBj
b21taXQuCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgNDM0ODYxOGI0YjhkZDVmMGM2ZDZj
Y2E1OTVlMWZmMGFmZmI2YjNlMSAtciAwZWFmMjg3MzFjYjNjZDE4YjM5OTJjOT0KZGI5N2Y1NDI5
Y2NmNzNkZDEgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMv
aWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBs
YXRlcy9pZS5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
dGVtcGxhdGVzL2llLm1ha28KQEAgLTQ5LDE1ICs0OSwxOCBAQAogICAgICIiIgogICAgIGNvbmZf
ZmlsZSA9M0QgewogICAgICAgICAnaGlzdG9yeV9pZCc6IHNlbGYuYXR0ci5oaXN0b3J5X2lkLAot
ICAgICAgICAnZ2FsYXh5X3VybCc6IHJlcXVlc3QuYXBwbGljYXRpb25fdXJsLnJzdHJpcCgnLycp
ICsgJy8nLAogICAgICAgICAnYXBpX2tleSc6IGdldF9hcGlfa2V5KCksCiAgICAgICAgICdyZW1v
dGVfaG9zdCc6IHJlcXVlc3QucmVtb3RlX2FkZHIsCi0gICAgICAgICdnYWxheHlfcGFzdGVyX3Bv
cnQnOiBzZWxmLmdldF9nYWxheHlfcGFzdGVyX3BvcnQoc2VsZi5hdHRyLmdhbGF4eT0KX3Jvb3Rf
ZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuYXR0ci5nYWxheHk9Cl9jb25maWcpLAogICAgICAgICAnZG9ja2VyX3BvcnQn
OiBzZWxmLmF0dHIuUE9SVCwKICAgICAgICAgJ2NvcnNfb3JpZ2luJzogcmVxdWVzdC5ob3N0X3Vy
bCwKICAgICB9Cj0yMAorICAgIGlmIHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLmdhbGF4eV9pbmZy
YXN0cnVjdHVyZV91cmxfc2V0OgorICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0Qg
c2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ2FsYXh5X2luZnJhc3Q9CnJ1Y3R1cmVfdXJsLnJzdHJp
cCgnLycpICsgJy8nCisgICAgZWxzZToKKyAgICAgICAgY29uZl9maWxlWydnYWxheHlfdXJsJ10g
PTNEIHJlcXVlc3QuYXBwbGljYXRpb25fdXJsLnJzdHJpcCgnLycpICsgPQonLycKKyAgICAgICAg
Y29uZl9maWxlWydnYWxheHlfcGFzdGVyX3BvcnQnXSA9M0Qgc2VsZi5hdHRyLmdhbGF4eV9jb25m
aWcuZ3Vlc3NfPQpnYWxheHlfcG9ydCgpCisKICAgICBpZiBzZWxmLmF0dHIuUEFTU1dPUkRfQVVU
SDoKICAgICAgICAgIyBHZW5lcmF0ZSBhIHJhbmRvbSBwYXNzd29yZCArIHNhbHQKICAgICAgICAg
bm90ZWJvb2tfcHdfc2FsdCA9M0Qgc2VsZi5nZW5lcmF0ZV9wYXNzd29yZChsZW5ndGg9M0QxMikK
QEAgLTgxLDI1ICs4NCw2IEBACiAlPjwvJWRlZj4KPTIwCi08JWRlZiBuYW1lPTNEImdldF9nYWxh
eHlfcGFzdGVyX3BvcnQoZ2FsYXh5X3Jvb3RfZGlyLCBnYWxheHlfY29uZmlnKSI+Ci0gIDwlCi0g
ICAgIiIiCi0gICAgICAgIEdldCBwb3J0IGdhbGF4eSBpcyBydW5uaW5nIG9uIChpZiBydW5uaW5n
IHVuZGVyIHBhc3RlcikKLSAgICAiIiIKLSAgICBjb25maWcgPTNEIENvbmZpZ1BhcnNlci5TYWZl
Q29uZmlnUGFyc2VyKHsncG9ydCc6ICc4MDgwJ30pCi0gICAgY29uZmlnX2ZpbGUgPTNEIGdhbGF4
eV9jb25maWcuY29uZmlnX2ZpbGUKLSAgICBpZiBjb25maWdfZmlsZToKLSAgICAgICAgY29uZmln
LnJlYWQoIGNvbmZpZ19maWxlICkKLQotICAgICMgdVdTR0kgZ2FsYXh5IGluc3RhbGxhdGlvbnMg
ZG9uJ3QgdXNlIHBhc3RlciBhbmQgb25seSBzcGVhayB1V1NHSSBub3Q9CiBodHRwCi0gICAgdHJ5
OgotICAgICAgICBwb3J0ID0zRCBjb25maWcuZ2V0aW50KCdzZXJ2ZXI6JXMnICUgZ2FsYXh5X2Nv
bmZpZy5zZXJ2ZXJfbmFtZSwgJ3A9Cm9ydCcpCi0gICAgZXhjZXB0OgotICAgICAgICBwb3J0ID0z
RCBOb25lCi0gICAgcmV0dXJuIHBvcnQKLSAgJT4KLTwvJWRlZj4KLQogPCVkZWYgbmFtZT0zRCJn
ZW5lcmF0ZV9oZXgobGVuZ3RoKSI+PCUKICAgICAiIiIKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcv
Z2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvYWE2NDFlN2Y4NWQyLwpDaGFuZ2VzZXQ6ICAg
YWE2NDFlN2Y4NWQyClVzZXI6ICAgICAgICBqbWNoaWx0b24KRGF0ZTogICAgICAgIDIwMTQtMTAt
MTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFJlZmFjdG9yIHByb3h5IEphdmFTY3JpcHQg
YWhlYWQgb2YgZml4ZXMuCkFmZmVjdGVkICM6ICAxIGZpbGUKCmRpZmYgLXIgMGVhZjI4NzMxY2Iz
Y2QxOGIzOTkyYzlkYjk3ZjU0MjljY2Y3M2RkMSAtciBhYTY0MWU3Zjg1ZDI3ZWJhOGE2MGE1MD0K
NzA0ZDhkYTRjZDJjNDMxNzAgbGliL2dhbGF4eS93ZWIvcHJveHkvanMvbGliL21hcHBlci5qcwot
LS0gYS9saWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvbWFwcGVyLmpzCisrKyBiL2xpYi9nYWxh
eHkvd2ViL3Byb3h5L2pzL2xpYi9tYXBwZXIuanMKQEAgLTEsMzMgKzEsMzQgQEAKIHZhciBmcyA9
M0QgcmVxdWlyZSgnZnMnKTsKPTIwCit2YXIgdXBkYXRlRnJvbUpzb24gPTNEIGZ1bmN0aW9uKHBh
dGgsIG1hcCkgeworICAgIHZhciBjb250ZW50ID0zRCBmcy5yZWFkRmlsZVN5bmMocGF0aCwgJ3V0
ZjgnKTsKKyAgICB2YXIga2V5VG9TZXNzaW9uID0zRCBKU09OLnBhcnNlKGNvbnRlbnQpOworICAg
IHZhciBuZXdTZXNzaW9ucyA9M0Qge307CisgICAgZm9yKHZhciBrZXkgaW4ga2V5VG9TZXNzaW9u
KSB7CisgICAgICAgIHZhciBob3N0QW5kUG9ydCA9M0Qga2V5LnNwbGl0KCI6Iik7CisgICAgICAg
IC8vICdob3N0JzogaG9zdEFuZFBvcnRbMF0sCisgICAgICAgIG5ld1Nlc3Npb25zW2tleVRvU2Vz
c2lvbltrZXldXSA9M0Qgeyd0YXJnZXQnOiB7J2hvc3QnOiBob3N0QW5kUG9ydD0KWzBdLCAncG9y
dCc6IHBhcnNlSW50KGhvc3RBbmRQb3J0WzFdKX19OworICAgIH0KKyAgICBmb3IodmFyIG9sZFNl
c3Npb24gaW4gbWFwKSB7CisgICAgICAgIGlmKCEob2xkU2Vzc2lvbiBpbiBuZXdTZXNzaW9ucykp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSBtYXBbIG9sZFNlc3Npb24gXTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBmb3IodmFyIG5ld1Nlc3Npb24gaW4gbmV3U2Vzc2lvbnMpIHsKKyAgICAgICAgbWFw
W25ld1Nlc3Npb25dID0zRCBuZXdTZXNzaW9uc1tuZXdTZXNzaW9uXTsKKyAgICB9Cit9CisKPTIw
CiB2YXIgbWFwRm9yID0zRCBmdW5jdGlvbihwYXRoKSB7Ci0JdmFyIG1hcCA9M0Qge307Ci0KLQl2
YXIgbG9hZE1hcCA9M0QgZnVuY3Rpb24oKSB7Ci0gCQl2YXIgY29udGVudCA9M0QgZnMucmVhZEZp
bGVTeW5jKHBhdGgsICd1dGY4Jyk7Ci0gCQl2YXIga2V5VG9TZXNzaW9uID0zRCBKU09OLnBhcnNl
KGNvbnRlbnQpOwotIAkJdmFyIG5ld1Nlc3Npb25zID0zRCB7fTsKLSAJCWZvcih2YXIga2V5IGlu
IGtleVRvU2Vzc2lvbikgewotIAkJCXZhciBob3N0QW5kUG9ydCA9M0Qga2V5LnNwbGl0KCI6Iik7
Ci0gCQkJLy8gJ2hvc3QnOiBob3N0QW5kUG9ydFswXSwKLSAJCQluZXdTZXNzaW9uc1trZXlUb1Nl
c3Npb25ba2V5XV0gPTNEIHsndGFyZ2V0Jzogeydob3N0JzogaG9zdEFuZFBvcnRbMF0sPQogJ3Bv
cnQnOiBwYXJzZUludChob3N0QW5kUG9ydFsxXSl9fTsKLSAJCX0KLQkJZm9yKHZhciBvbGRTZXNz
aW9uIGluIG1hcCkgewotCQkJaWYoIShvbGRTZXNzaW9uIGluIG5ld1Nlc3Npb25zKSkgewotCQkJ
CWRlbGV0ZSBtYXBbIG9sZFNlc3Npb24gXTsKLQkJCX0KLQkJfQotCQlmb3IodmFyIG5ld1Nlc3Np
b24gaW4gbmV3U2Vzc2lvbnMpIHsKLQkJCW1hcFtuZXdTZXNzaW9uXSA9M0QgbmV3U2Vzc2lvbnNb
bmV3U2Vzc2lvbl07Ci0JCX0KLQl9Ci0KLQljb25zb2xlLmxvZygiV2F0Y2hpbmcgcGF0aCAiICsg
cGF0aCk7Ci0JbG9hZE1hcCgpOwotCWZzLndhdGNoKHBhdGgsIGxvYWRNYXApOwotCi0JcmV0dXJu
IG1hcDsKKyAgICB2YXIgbWFwID0zRCB7fTsKKyAgICBsb2FkTWFwID0zRCBmdW5jdGlvbigpIHsK
KyAgICAJdXBkYXRlRnJvbUpzb24ocGF0aCwgbWFwKTsKKyAgICB9CisgICAgY29uc29sZS5sb2co
IldhdGNoaW5nIHBhdGggIiArIHBhdGgpOworICAgIGxvYWRNYXAoKTsKKyAgICBmcy53YXRjaChw
YXRoLCBsb2FkTWFwKTsKKyAgICByZXR1cm4gbWFwOwogfQo9MjAKIGV4cG9ydHMubWFwRm9yID0z
RCBtYXBGb3I7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKCmh0dHBzOi8vYml0YnVja2V0
Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8zOTI1YTAzY2RhNWEvCkNoYW5nZXNl
dDogICAzOTI1YTAzY2RhNWEKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAx
NC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgU2xpZ2h0bHkgY2xlYW5lciBzcWxp
dGUgYmFzZWQgSVBDIGZvciBHYWxheHkgUHJveHkuCkFmZmVjdGVkICM6ICA0IGZpbGVzCgpkaWZm
IC1yIGFhNjQxZTdmODVkMjdlYmE4YTYwYTUwNzA0ZDhkYTRjZDJjNDMxNzAgLXIgMzkyNWEwM2Nk
YTVhZTc3N2U0MWRkMTc9CjgxNTkwN2Q3NGUxYzBiYmMzIGxpYi9nYWxheHkvY29uZmlnLnB5Ci0t
LSBhL2xpYi9nYWxheHkvY29uZmlnLnB5CisrKyBiL2xpYi9nYWxheHkvY29uZmlnLnB5CkBAIC0z
NzYsNyArMzc2LDcgQEAKICAgICAgICAgIyBkaXJlY3Rvcnkgd2hlcmUgdGhlIHZpc3VhbGl6YXRp
b24vcmVnaXN0cnkgc2VhcmNoZXMgZm9yIHBsdWdpbnMKICAgICAgICAgc2VsZi52aXN1YWxpemF0
aW9uX3BsdWdpbnNfZGlyZWN0b3J5ID0zRCBrd2FyZ3MuZ2V0KAogICAgICAgICAgICAgJ3Zpc3Vh
bGl6YXRpb25fcGx1Z2luc19kaXJlY3RvcnknLCAnY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGk9
Cm9ucycgKQotICAgICAgICBzZWxmLnByb3h5X3Nlc3Npb25fbWFwID0zRCBzZWxmLnJlc29sdmVf
cGF0aCgga3dhcmdzLmdldCggImR5bmFtaWM9Cl9wcm94eV9zZXNzaW9uX21hcCIsICJkYXRhYmFz
ZS9zZXNzaW9uX21hcC5qc29uIiApICkKKyAgICAgICAgc2VsZi5wcm94eV9zZXNzaW9uX21hcCA9
M0Qgc2VsZi5yZXNvbHZlX3BhdGgoIGt3YXJncy5nZXQoICJkeW5hbWljPQpfcHJveHlfc2Vzc2lv
bl9tYXAiLCAiZGF0YWJhc2Uvc2Vzc2lvbl9tYXAuc3FsaXRlIiApICkKICAgICAgICAgc2VsZi5t
YW5hZ2VfZHluYW1pY19wcm94eSA9M0Qgc3RyaW5nX2FzX2Jvb2woIGt3YXJncy5nZXQoICJkeW5h
bWljPQpfcHJveHlfbWFuYWdlIiwgIlRydWUiICkgKSAgIyBTZXQgdG8gZmFsc2UgaWYgYmVpbmcg
bGF1bmNoZWQgZXh0ZXJuYWxseQogICAgICAgICBzZWxmLmR5bmFtaWNfcHJveHlfYmluZF9wb3J0
ID0zRCBpbnQoIGt3YXJncy5nZXQoICJkeW5hbWljX3Byb3h5X2I9CmluZF9wb3J0IiwgIjg4MDAi
ICkgKQogICAgICAgICBzZWxmLmR5bmFtaWNfcHJveHlfYmluZF9pcCA9M0Qga3dhcmdzLmdldCgg
ImR5bmFtaWNfcHJveHlfYmluZF9pcCI9CiwgIjAuMC4wLjAiICkKCmRpZmYgLXIgYWE2NDFlN2Y4
NWQyN2ViYThhNjBhNTA3MDRkOGRhNGNkMmM0MzE3MCAtciAzOTI1YTAzY2RhNWFlNzc3ZTQxZGQx
Nz0KODE1OTA3ZDc0ZTFjMGJiYzMgbGliL2dhbGF4eS93ZWIvcHJveHkvX19pbml0X18ucHkKLS0t
IGEvbGliL2dhbGF4eS93ZWIvcHJveHkvX19pbml0X18ucHkKKysrIGIvbGliL2dhbGF4eS93ZWIv
cHJveHkvX19pbml0X18ucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIC5maWxlbG9jayBpbXBvcnQg
RmlsZUxvY2sKIGZyb20gZ2FsYXh5LnV0aWwgaW1wb3J0IHNvY2tldHMKIGZyb20gZ2FsYXh5LnV0
aWwubGF6eV9wcm9jZXNzIGltcG9ydCBMYXp5UHJvY2VzcywgTm9PcExhenlQcm9jZXNzCitmcm9t
IGdhbGF4eS51dGlsIGltcG9ydCBzcWxpdGUKPTIwCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCBfX25hbWVfXyApCj0yMApAQCAtMTAwLDcgKzEwMSwxMCBAQAo9MjAKIGRlZiBwcm94eV9pcGMo
Y29uZmlnKToKICAgICBwcm94eV9zZXNzaW9uX21hcCA9M0QgY29uZmlnLnByb3h5X3Nlc3Npb25f
bWFwCi0gICAgcmV0dXJuIEpzb25GaWxlUHJveHlJcGMocHJveHlfc2Vzc2lvbl9tYXApCisgICAg
aWYgcHJveHlfc2Vzc2lvbl9tYXAuZW5kc3dpdGgoIi5zcWxpdGUiKToKKyAgICAgICAgcmV0dXJu
IFNxbGl0ZVByb3h5SXBjKHByb3h5X3Nlc3Npb25fbWFwKQorICAgIGVsc2U6CisgICAgICAgIHJl
dHVybiBKc29uRmlsZVByb3h5SXBjKHByb3h5X3Nlc3Npb25fbWFwKQo9MjAKPTIwCiBjbGFzcyBQ
cm94eUlwYyhvYmplY3QpOgpAQCAtMTMzLDUgKzEzNywzMCBAQAogICAgICAgICAgICAgb3Blbigg
c2VsZi5wcm94eV9zZXNzaW9uX21hcCwgInciICkud3JpdGUoIG5ld19qc29uX2RhdGEgKQo9MjAK
PTIwCi0jIFRPRE86IHNxbGl0ZWZpbGVpcGMKLSMgVE9ETzogUkVTVGZ1bCBBUEkgZHJpdmVuIHBy
b3h5CitjbGFzcyBTcWxpdGVQcm94eUlwYyhvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHByb3h5X3Nlc3Npb25fbWFwKToKKyAgICAgICAgc2VsZi5wcm94eV9zZXNzaW9uX21hcCA9
M0QgcHJveHlfc2Vzc2lvbl9tYXAKKworICAgIGRlZiBoYW5kbGVfcmVxdWVzdHMoc2VsZiwgYXV0
aGVudGljYXRpb24sIHByb3h5X3JlcXVlc3RzKToKKyAgICAgICAga2V5ID0zRCAiJXM6JXMiICUg
KCBwcm94eV9yZXF1ZXN0cy5ob3N0LCBwcm94eV9yZXF1ZXN0cy5wb3J0ICkKKyAgICAgICAgc2Vj
dXJlX2lkID0zRCBhdXRoZW50aWNhdGlvbi5jb29raWVfdmFsdWUKKyAgICAgICAgd2l0aCBGaWxl
TG9jayggc2VsZi5wcm94eV9zZXNzaW9uX21hcCApOgorICAgICAgICAgICAgY29ubiA9M0Qgc3Fs
aXRlLmNvbm5lY3Qoc2VsZi5wcm94eV9zZXNzaW9uX21hcCkKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBjID0zRCBjb25uLmN1cnNvcigpCisgICAgICAgICAgICAgICAgdHJ5Ogor
ICAgICAgICAgICAgICAgICAgICAjIENyZWF0ZSB0YWJsZQorICAgICAgICAgICAgICAgICAgICBj
LmV4ZWN1dGUoJycnQ1JFQVRFIFRBQkxFIGd4cHJveHkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChrZXkgdGV4dCBQUklNQVJZX0tFWSwgc2VjcmV0IHRleHQpJycnKQorICAgICAg
ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAg
ICAgICAgICAgICAgICBpbnNlcnRfdG1wbCA9M0QgJycnSU5TRVJUIElOVE8gZ3hwcm94eSAoa2V5
LCBzZWNyZXQpIFZBTFVFPQpTICgnJXMnLCAnJXMnKTsnJycKKyAgICAgICAgICAgICAgICBpbnNl
cnQgPTNEIGluc2VydF90bXBsICUgKGtleSwgc2VjdXJlX2lkKQorICAgICAgICAgICAgICAgIGMu
ZXhlY3V0ZShpbnNlcnQpCisgICAgICAgICAgICAgICAgY29ubi5jb21taXQoKQorICAgICAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKworIyBUT0RPOiBSRVNU
ZnVsIEFQSSBkcml2ZW4gcHJveHk/CisjIFRPRE86IE1RIGRpdmVuIHByb3h5PwoKZGlmZiAtciBh
YTY0MWU3Zjg1ZDI3ZWJhOGE2MGE1MDcwNGQ4ZGE0Y2QyYzQzMTcwIC1yIDM5MjVhMDNjZGE1YWU3
NzdlNDFkZDE3PQo4MTU5MDdkNzRlMWMwYmJjMyBsaWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIv
bWFwcGVyLmpzCi0tLSBhL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9tYXBwZXIuanMKKysr
IGIvbGliL2dhbGF4eS93ZWIvcHJveHkvanMvbGliL21hcHBlci5qcwpAQCAtMSw0ICsxLDE0IEBA
CiB2YXIgZnMgPTNEIHJlcXVpcmUoJ2ZzJyk7Cit2YXIgc3FsaXRlMyA9M0QgcmVxdWlyZSgnc3Fs
aXRlMycpCisKKwordmFyIGVuZHNXaXRoID0zRCBmdW5jdGlvbihzdWJqZWN0U3RyaW5nLCBzZWFy
Y2hTdHJpbmcpIHsKKyAgICB2YXIgcG9zaXRpb24gPTNEIHN1YmplY3RTdHJpbmcubGVuZ3RoOwor
ICAgIHBvc2l0aW9uIC09M0Qgc2VhcmNoU3RyaW5nLmxlbmd0aDsKKyAgICB2YXIgbGFzdEluZGV4
ID0zRCBzdWJqZWN0U3RyaW5nLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7CisgICAg
cmV0dXJuIGxhc3RJbmRleCAhPTNEPTNEIC0xICYmIGxhc3RJbmRleCA9M0Q9M0Q9M0QgcG9zaXRp
b247Cit9OworCj0yMAogdmFyIHVwZGF0ZUZyb21Kc29uID0zRCBmdW5jdGlvbihwYXRoLCBtYXAp
IHsKICAgICB2YXIgY29udGVudCA9M0QgZnMucmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4Jyk7CkBA
IC0xOSwxNiArMjksNTMgQEAKICAgICB9CiB9Cj0yMAordmFyIHVwZGF0ZUZyb21TcWxpdGUgPTNE
IGZ1bmN0aW9uKHBhdGgsIG1hcCkgeworICAgIHZhciBuZXdTZXNzaW9ucyA9M0Qge307CisgICAg
dmFyIGxvYWRTZXNzaW9ucyA9M0QgZnVuY3Rpb24oKSB7CisgICAgICAgIGRiLmVhY2goIlNFTEVD
VCBrZXksIHNlY3JldCBGUk9NIGd4cHJveHkiLCBmdW5jdGlvbihlcnIsIHJvdykgeworICAgICAg
ICAgICAgdmFyIGtleSA9M0Qgcm93WydrZXknXTsKKyAgICAgICAgICAgIHZhciBzZWNyZXQgPTNE
IHJvd1snc2VjcmV0J107CisgICAgICAgICAgICB2YXIgaG9zdEFuZFBvcnQgPTNEIGtleS5zcGxp
dCgiOiIpOworICAgICAgICAgICAgdmFyIHRhcmdldCA9M0Qgeydob3N0JzogaG9zdEFuZFBvcnRb
MF0sICdwb3J0JzogcGFyc2VJbnQoaG9zdEE9Cm5kUG9ydFsxXSl9OworICAgICAgICAgICAgbmV3
U2Vzc2lvbnNbc2VjcmV0XSA9M0Qgeyd0YXJnZXQnOiB0YXJnZXR9OworICAgICAgICB9LCBmaW5p
c2gpOworICAgIH07CisKKyAgICB2YXIgZmluaXNoID0zRCBmdW5jdGlvbigpIHsKKyAgICAgICAg
Zm9yKHZhciBvbGRTZXNzaW9uIGluIG1hcCkgeworICAgICAgICAgICAgaWYoIShvbGRTZXNzaW9u
IGluIG5ld1Nlc3Npb25zKSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXBbIG9sZFNlc3Np
b24gXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IodmFyIG5ld1Nlc3Np
b24gaW4gbmV3U2Vzc2lvbnMpIHsKKyAgICAgICAgICAgIG1hcFtuZXdTZXNzaW9uXSA9M0QgbmV3
U2Vzc2lvbnNbbmV3U2Vzc2lvbl07CisgICAgICAgIH0KKyAgICAgICAgZGIuY2xvc2UoKTsKKyAg
ICB9OworCisgICAgdmFyIGRiID0zRCBuZXcgc3FsaXRlMy5EYXRhYmFzZShwYXRoLCBsb2FkU2Vz
c2lvbnMpOworICAgIGNvbnNvbGUubG9nKCJhZnRlciBkYiBzZXNzaW9uIik7CisgICAgY29uc29s
ZS5sb2cobmV3U2Vzc2lvbnMpOworCit9OworCj0yMAogdmFyIG1hcEZvciA9M0QgZnVuY3Rpb24o
cGF0aCkgewogICAgIHZhciBtYXAgPTNEIHt9OwotICAgIGxvYWRNYXAgPTNEIGZ1bmN0aW9uKCkg
ewotICAgIAl1cGRhdGVGcm9tSnNvbihwYXRoLCBtYXApOworICAgIHZhciBsb2FkTWFwOworICAg
IGlmKGVuZHNXaXRoKHBhdGgsICcuc3FsaXRlJykpIHsKKyAgICAgICAgbG9hZE1hcCA9M0QgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB1cGRhdGVGcm9tU3FsaXRlKHBhdGgsIG1hcCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBsb2FkTWFwID0zRCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIHVwZGF0ZUZyb21Kc29uKHBhdGgsIG1hcCk7CisgICAgICAgIH0KICAgICB9CiAg
ICAgY29uc29sZS5sb2coIldhdGNoaW5nIHBhdGggIiArIHBhdGgpOwogICAgIGxvYWRNYXAoKTsK
ICAgICBmcy53YXRjaChwYXRoLCBsb2FkTWFwKTsKICAgICByZXR1cm4gbWFwOwotfQorfTsKPTIw
CiBleHBvcnRzLm1hcEZvciA9M0QgbWFwRm9yOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
CmRpZmYgLXIgYWE2NDFlN2Y4NWQyN2ViYThhNjBhNTA3MDRkOGRhNGNkMmM0MzE3MCAtciAzOTI1
YTAzY2RhNWFlNzc3ZTQxZGQxNz0KODE1OTA3ZDc0ZTFjMGJiYzMgbGliL2dhbGF4eS93ZWIvcHJv
eHkvanMvcGFja2FnZS5qc29uCi0tLSBhL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL3BhY2thZ2Uu
anNvbgorKysgYi9saWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9wYWNrYWdlLmpzb24KQEAgLTEyLDYg
KzEyLDcgQEAKICAgfSwKICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAiaHR0cC1wcm94eSI6ICJ+
MS4xIiwKLSAgICAiY29tbWFuZGVyIjogIn4yLjIiCisgICAgImNvbW1hbmRlciI6ICJ+Mi4yIiwK
KyAgICAic3FsaXRlMyI6ICIzLjAuMiIKICAgfQogfQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy83NzRmOTk0OTBmMmMvCkNoYW5nZXNldDogICA3
NzRmOTk0OTBmMmMKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRkIGRvY3VtZW50YXRpb24gZm9yIGR5bmFt
aWMgcHJveHkgY29uZmlndXJhdGlvbi4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciAzOTI1
YTAzY2RhNWFlNzc3ZTQxZGQxNzgxNTkwN2Q3NGUxYzBiYmMzIC1yIDc3NGY5OTQ5MGYyY2ExOTc1
MWFiNDM1PQoyNmE5NDdlNjU2NzcxMGU3MiBjb25maWcvZ2FsYXh5LmluaS5zYW1wbGUKLS0tIGEv
Y29uZmlnL2dhbGF4eS5pbmkuc2FtcGxlCisrKyBiL2NvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQpA
QCAtNTIyLDYgKzUyMiwyNCBAQAogIyByZXF1ZXN0cy4KICNuZ2lueF91cGxvYWRfcGF0aCA9M0Qg
RmFsc2UKPTIwCisjIEhhdmUgR2FsYXh5IG1hbmFnZSBkeW5hbWljIHByb3h5IGNvbXBvbmVudCBm
b3Igcm91dGluZyByZXF1ZXN0cyB0byBvdGhlcgorIyBzZXJ2aWNlcyBiYXNlZCBvbiBHYWxheHkn
cyBzZXNzaW9uIGNvb2tpZS4gSXQgd2lsbCBhdHRlbXB0IHRvIGRvIHRoaXMgYnkKKyMgZGVmYXVs
dCB0aG91Z2ggeW91IGRvIG5lZWQgdG8gaW5zdGFsbCBub2RlK25wbSBhbmQgZG8gYW4gbnBtIGlu
c3RhbGwgZnJvbQorIyBgbGliL2dhbGF4eS93ZWIvcHJveHkvanNgLiBJdCBpcyBnZW5lcmFsbHkg
bW9yZSByb2J1c3QgdG8gY29uZmlndXJlIHRoaXMKKyMgZXh0ZXJuYWxseSBtYW5hZ2luZyBpdCBo
b3dldmVyIEdhbGF4eSBpcyBtYW5hZ2VkLiBJZiBUcnVlIEdhbGF4eSB3aWxsIG9uPQpseQorIyBs
YXVuY2ggdGhlIHByb3h5IGlmIGl0IGlzIGFjdHVhbGx5IGdvaW5nIHRvIGJlIHVzZWQgKGUuZy4g
Zm9yIElQeXRob24pLgorI2R5bmFtaWNfcHJveHlfbWFuYWdlPTNEVHJ1ZQorCisjIER5bmFtaWMg
cHJveHkgY2FuIHVzZSBhbiBTUUxpdGUgZGF0YWJhc2Ugb3IgYSBKU09OIGZpbGUgZm9yIElQQywg
c2V0IHRoYXQKKyMgaGVyZS4KKyNkeW5hbWljX3Byb3h5X3Nlc3Npb25fbWFwPTNEZGF0YWJhc2Uv
c2Vzc2lvbl9tYXAuc3FsaXRlCisKKyMgU2V0IHRoZSBwb3J0IGFuZCBJUCBmb3IgdGhlIHRoZSBk
eW5hbWljIHByb3h5IHRvIGJpbmQgdG8sIHRoaXMgbXVzdCBtYXRjaAorIyB0aGUgZXh0ZXJuYWwg
Y29uZmlndXJhdGlvbiBpZiBkeW5hbWljX3Byb3h5X21hbmFnZSBpcyBGYWxzZS4KKyNkeW5hbWlj
X3Byb3h5X2JpbmRfcG9ydD0zRDg4MDAKKyNkeW5hbWljX3Byb3h5X2JpbmRfaXA9M0QwLjAuMC4w
CisKKwogIyAtLSBMb2dnaW5nIGFuZCBEZWJ1Z2dpbmcKPTIwCiAjIFZlcmJvc2l0eSBvZiBjb25z
b2xlIGxvZyBtZXNzYWdlcy4gIEFjY2VwdGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOgoK
Cmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy83Nzg1
NzBlZmNjZTgvCkNoYW5nZXNldDogICA3Nzg1NzBlZmNjZTgKVXNlcjogICAgICAgIGptY2hpbHRv
bgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgQWRk
IElQeXRob24gTm90ZWJvb2sgYW5kIEpTT04gZGF0YXR5cGVzCkJhc2VkIG9uIHdvcmsgZnJvbSBC
am9lcm4gYW5kIEVyaWMuIE1hZGUgc29tZSBtb2RpZmljYXRpb25zIHRvIGVuc3VyZSB0aGV5ID0K
ZG8gbm90IGF0dGVtcHQgdG8gcmVhZCBhbGwgb2YgdmVyeSBsYXJnZSBmaWxlcyBhbmQgYWRkZWQg
YSBjb25maWd1cmF0aW9uIG9wPQp0aW9uIHRoYXQgbXVzdCBiZSBlbmFibGVkIHRvIHVzZSBmYW5j
eSBub3RlYm9vayB2aWV3aW5nLgoKVG8gZW5hYmxlIGZhbmN5IG5vdGVib29rcyBvbmUgYWxzbyBu
ZWVkcyB0byAtIGBwaXAgaW5zdGFsbCBqaW5qYTIgcHlnbWVudHMgPQppcHl0aG9uYCBpbnRvIEdh
bGF4eSdzIHZpcnR1YWxlbnYuCkFmZmVjdGVkICM6ICA1IGZpbGVzCgpkaWZmIC1yIDc3NGY5OTQ5
MGYyY2ExOTc1MWFiNDM1MjZhOTQ3ZTY1Njc3MTBlNzIgLXIgNzc4NTcwZWZjY2U4MDk2NWE4MThm
Yjk9CjAwYTMxNmViYzYzMGYzNzQ0IGNvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2FtcGxlCi0t
LSBhL2NvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2FtcGxlCisrKyBiL2NvbmZpZy9kYXRhdHlw
ZXNfY29uZi54bWwuc2FtcGxlCkBAIC0yNDksNiArMjQ5LDggQEAKICAgICA8ZGF0YXR5cGUgZXh0
ZW5zaW9uPTNEInNucG1hdHJpeCIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmdlbmV0aWNzOlNO
PQpQTWF0cml4IiBkaXNwbGF5X2luX3VwbG9hZD0zRCJ0cnVlIi8+PGRhdGF0eXBlIGV4dGVuc2lv
bj0zRCJ4bHMiIHR5cGU9M0QiZ2E9CmxheHkuZGF0YXR5cGVzLnRhYnVsYXI6VGFidWxhciIvPjwh
LS0gRW5kIFJHZW5ldGljcyBEYXRhdHlwZXMgLS0+CisgICAgPGRhdGF0eXBlIGV4dGVuc2lvbj0z
RCJpcHluYiIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnRleHQ6SXB5bmIiIGRpcz0KcGxheV9p
bl91cGxvYWQ9M0QiVHJ1ZSIgLz4KKyAgICA8ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEImpzb24iIHR5
cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0Okpzb24iIGRpc3BsPQpheV9pbl91cGxvYWQ9M0Qi
VHJ1ZSIgLz48IS0tIGdyYXBoIGRhdGF0eXBlcyAtLT48ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEInhn
bW09CmwiIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5ncmFwaDpYZ21tbCIgZGlzcGxheV9pbl91
cGxvYWQ9M0QidHJ1ZSIvPjxkYXRhdD0KeXBlIGV4dGVuc2lvbj0zRCJzaWYiIHR5cGU9M0QiZ2Fs
YXh5LmRhdGF0eXBlcy5ncmFwaDpTaWYiIGRpc3BsYXlfaW5fdXBsb2FkPQo9M0QidHJ1ZSIvPgpA
QCAtMjkyLDYgKzI5NCw4IEBACiAgICAgPHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVz
LnRhYnVsYXI6U2FtIi8+PHNuaWZmZXIgdHlwZT0zRCJnYWxheD0KeS5kYXRhdHlwZXMuZGF0YTpO
ZXdpY2siLz48c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuZGF0YTpOZXh1cyIvPgor
ICAgIDxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0OklweW5iIi8+CisgICAg
PHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnRleHQ6SnNvbiIvPjxzbmlmZmVyIHR5
cGU9M0QiZ2FsYXh5Lj0KZGF0YXR5cGVzLmltYWdlczpKcGciLz48c25pZmZlciB0eXBlPTNEImdh
bGF4eS5kYXRhdHlwZXMuaW1hZ2VzOlBuZyIvPjxzbmlmPQpmZXIgdHlwZT0zRCJnYWxheHkuZGF0
YXR5cGVzLmltYWdlczpUaWZmIi8+CgpkaWZmIC1yIDc3NGY5OTQ5MGYyY2ExOTc1MWFiNDM1MjZh
OTQ3ZTY1Njc3MTBlNzIgLXIgNzc4NTcwZWZjY2U4MDk2NWE4MThmYjk9CjAwYTMxNmViYzYzMGYz
NzQ0IGNvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQotLS0gYS9jb25maWcvZ2FsYXh5LmluaS5zYW1w
bGUKKysrIGIvY29uZmlnL2dhbGF4eS5pbmkuc2FtcGxlCkBAIC01NzIsNiArNTcyLDEyIEBACiAj
IGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gVHJ1ZS4KICNzZXJ2ZV94c3NfdnVs
bmVyYWJsZV9taW1ldHlwZXMgPTNEIEZhbHNlCj0yMAorIyBTZXQgdGhlIGZvbGxvd2luZyB0byBU
cnVlIHRvIHVzZSBpcHl0aG9uIG5iY29udmVydCB0byBidWlsZCBIVE1MIGZyb20gSVA9Cnl0aG9u
CisjIG5vdGVib29rcyBpbiBHYWxheHkgaGlzdG9yaWVzLiBUaGlzIHByb2Nlc3MgbWF5IGFsbG93
IHVzZXJzIHRvIGV4ZWN1dGUgYT0KcmJpdHJhcnkKKyMgY29kZSBvciBzZXJ2ZSBhcmJpdHJhcnkg
SFRNTC4gSWYgZW5hYmxlZCBpcHl0aG9uIG11c3QgYmUgYXZhaWxhYmxlIGFuZCBvPQpuIEdhbGF4
eSdzCisjIFBBVEgsIHRvIGRvIHRoaXMgcnVuIGBwaXAgaW5zdGFsbCBqaW5qYTIgcHlnbWVudHMg
aXB5dGhvbmAgaW4gR2FsYXh5J3Mgdj0KaXJ0dWFsZW52LgorI3RydXN0X2lweXRob25fbm90ZWJv
b2tfY29udmVyc2lvbiA9M0QgRmFsc2UKKwogIyBEZWJ1ZyBlbmFibGVzIGFjY2VzcyB0byB2YXJp
b3VzIGNvbmZpZyBvcHRpb25zIHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQgYW5kCiAjIGRlYnVnZ2lu
ZzogdXNlX2xpbnQsIHVzZV9wcm9maWxlLCB1c2VfcHJpbnRkZWJ1ZyBhbmQgdXNlX2ludGVyYWN0
aXZlLiAgSXQKICMgYWxzbyBjYXVzZXMgdGhlIGZpbGVzIHVzZWQgYnkgUEJTL1NHRSAoc3VibWlz
c2lvbiBzY3JpcHQsIG91dHB1dCwgYW5kIGVyPQpyb3IpCgpkaWZmIC1yIDc3NGY5OTQ5MGYyY2Ex
OTc1MWFiNDM1MjZhOTQ3ZTY1Njc3MTBlNzIgLXIgNzc4NTcwZWZjY2U4MDk2NWE4MThmYjk9CjAw
YTMxNmViYzYzMGYzNzQ0IGxpYi9nYWxheHkvY29uZmlnLnB5Ci0tLSBhL2xpYi9nYWxheHkvY29u
ZmlnLnB5CisrKyBiL2xpYi9nYWxheHkvY29uZmlnLnB5CkBAIC0yMTAsNiArMjEwLDcgQEAKICAg
ICAgICAgc2VsZi5sb2dfZXZlbnRzID0zRCBzdHJpbmdfYXNfYm9vbCgga3dhcmdzLmdldCggJ2xv
Z19ldmVudHMnLCAnRmFsPQpzZScgKSApCiAgICAgICAgIHNlbGYuc2FuaXRpemVfYWxsX2h0bWwg
PTNEIHN0cmluZ19hc19ib29sKCBrd2FyZ3MuZ2V0KCAnc2FuaXRpemVfYT0KbGxfaHRtbCcsIFRy
dWUgKSApCiAgICAgICAgIHNlbGYuc2VydmVfeHNzX3Z1bG5lcmFibGVfbWltZXR5cGVzID0zRCBz
dHJpbmdfYXNfYm9vbCgga3dhcmdzLmdldD0KKCAnc2VydmVfeHNzX3Z1bG5lcmFibGVfbWltZXR5
cGVzJywgRmFsc2UgKSApCisgICAgICAgIHNlbGYudHJ1c3RfaXB5dGhvbl9ub3RlYm9va19jb252
ZXJzaW9uID0zRCBzdHJpbmdfYXNfYm9vbCgga3dhcmdzLj0KZ2V0KCAndHJ1c3RfaXB5dGhvbl9u
b3RlYm9va19jb252ZXJzaW9uJywgRmFsc2UgKSApCiAgICAgICAgIHNlbGYuZW5hYmxlX29sZF9k
aXNwbGF5X2FwcGxpY2F0aW9ucyA9M0Qgc3RyaW5nX2FzX2Jvb2woIGt3YXJncy5nZT0KdCggImVu
YWJsZV9vbGRfZGlzcGxheV9hcHBsaWNhdGlvbnMiLCAiVHJ1ZSIgKSApCiAgICAgICAgIHNlbGYu
YnJhbmQgPTNEIGt3YXJncy5nZXQoICdicmFuZCcsIE5vbmUgKQogICAgICAgICBzZWxmLndlbGNv
bWVfdXJsID0zRCBrd2FyZ3MuZ2V0KCAnd2VsY29tZV91cmwnLCAnL3N0YXRpYy93ZWxjb21lLmg9
CnRtbCcgKQoKZGlmZiAtciA3NzRmOTk0OTBmMmNhMTk3NTFhYjQzNTI2YTk0N2U2NTY3NzEwZTcy
IC1yIDc3ODU3MGVmY2NlODA5NjVhODE4ZmI5PQowMGEzMTZlYmM2MzBmMzc0NCBsaWIvZ2FsYXh5
L2RhdGF0eXBlcy9yZWdpc3RyeS5weQotLS0gYS9saWIvZ2FsYXh5L2RhdGF0eXBlcy9yZWdpc3Ry
eS5weQorKysgYi9saWIvZ2FsYXh5L2RhdGF0eXBlcy9yZWdpc3RyeS5weQpAQCAtMjIsNiArMjIs
NyBAQAogaW1wb3J0IGFzc2VtYmx5CiBpbXBvcnQgbmdzaW5kZXgKIGltcG9ydCBncmFwaAoraW1w
b3J0IHRleHQKIGltcG9ydCBnYWxheHkudXRpbAogZnJvbSBnYWxheHkudXRpbC5vZGljdCBpbXBv
cnQgb2RpY3QKIGZyb20gZGlzcGxheV9hcHBsaWNhdGlvbnMuYXBwbGljYXRpb24gaW1wb3J0IERp
c3BsYXlBcHBsaWNhdGlvbgoKZGlmZiAtciA3NzRmOTk0OTBmMmNhMTk3NTFhYjQzNTI2YTk0N2U2
NTY3NzEwZTcyIC1yIDc3ODU3MGVmY2NlODA5NjVhODE4ZmI5PQowMGEzMTZlYmM2MzBmMzc0NCBs
aWIvZ2FsYXh5L2RhdGF0eXBlcy90ZXh0LnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4
eS9kYXRhdHlwZXMvdGV4dC5weQpAQCAtMCwwICsxLDEyMSBAQAorIyAtKi0gY29kaW5nOiB1dGYt
OCAtKi0KKyIiIiBDbGVhcmluZyBob3VzZSBmb3IgZ2VuZXJpYyB0ZXh0IGRhdGF0eXBlcyB0aGF0
IGFyZSBub3QgWE1MIG9yIHRhYnVsYXIuCisiIiIKKworCitmcm9tIGdhbGF4eS5kYXRhdHlwZXMu
ZGF0YSBpbXBvcnQgVGV4dAorZnJvbSBnYWxheHkuZGF0YXR5cGVzLmRhdGEgaW1wb3J0IGdldF9m
aWxlX3BlZWsKK2Zyb20gZ2FsYXh5LmRhdGF0eXBlcy5kYXRhIGltcG9ydCBuaWNlX3NpemUKK2Zy
b20gZ2FsYXh5IGltcG9ydCB1dGlsCisKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nl
c3MKK2ltcG9ydCBqc29uCitpbXBvcnQgb3MKKworaW1wb3J0IGxvZ2dpbmcKK2xvZyA9M0QgbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgSnNvbiggVGV4dCApOgorICAgIGZp
bGVfZXh0ID0zRCAianNvbiIKKworICAgIGRlZiBzZXRfcGVlayggc2VsZiwgZGF0YXNldCwgaXNf
bXVsdGlfYnl0ZT0zREZhbHNlICk6CisgICAgICAgIGlmIG5vdCBkYXRhc2V0LmRhdGFzZXQucHVy
Z2VkOgorICAgICAgICAgICAgZGF0YXNldC5wZWVrID0zRCBnZXRfZmlsZV9wZWVrKCBkYXRhc2V0
LmZpbGVfbmFtZSwgaXNfbXVsdGlfYnk9CnRlPTNEaXNfbXVsdGlfYnl0ZSApCisgICAgICAgICAg
ICBkYXRhc2V0LmJsdXJiID0zRCAiSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24gKEpTT04pIgor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YXNldC5wZWVrID0zRCAnZmlsZSBkb2VzIG5v
dCBleGlzdCcKKyAgICAgICAgICAgIGRhdGFzZXQuYmx1cmIgPTNEICdmaWxlIHB1cmdlZCBmcm9t
IGRpc2MnCisKKyAgICBkZWYgc25pZmYoIHNlbGYsIGZpbGVuYW1lICk6CisgICAgICAgICIiIgor
ICAgICAgICAgICAgVHJ5IHRvIGxvYWQgdGhlIHN0cmluZyB3aXRoIHRoZSBqc29uIG1vZHVsZS4g
SWYgc3VjY2Vzc2Z1bCBpdCc9CnMgYSBqc29uIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbG9va3NfbGlrZV9qc29uKCBmaWxlbmFtZSApCisKKyAgICBkZWYgX2xvb2tz
X2xpa2VfanNvbiggc2VsZiwgZmlsZW5hbWUgKToKKyAgICAgICAgIyBQYXR0ZXJuIHVzZWQgYnkg
U2VxdWVuY2VTcGxpdExvY2F0aW9ucworICAgICAgICBpZiBvcy5wYXRoLmdldHNpemUoZmlsZW5h
bWUpIDwgNTAwMDA6CisgICAgICAgICAgICAjIElmIHRoZSBmaWxlIGlzIHNtYWxsIGVub3VnaCAt
IGRvbid0IGd1ZXNzIGp1c3QgY2hlY2suCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAganNvbi5sb2FkKCBvcGVuKGZpbGVuYW1lLCAiciIpICkKKyAgICAgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFt
ZSwgInIiKSBhcyBmaDoKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAg
ICAgICAgICBsaW5lID0zRCBmaC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGxpbmUg
PTNEIGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAg
ICAgICAgICAgICAgICAgIyBzaW1wbGUgdHlwZXMgYXJlIHZhbGlkIEpTT04gYXMgd2VsbCAtIGJ1
dCB3b3VsZCA9CnN1Y2ggYSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGJlIGludGVy
ZXN0aW5nIGFzIEpTT04gaW4gR2FsYXh5PworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGxpbmUuc3RhcnRzd2l0aCgiWyIpIG9yIGxpbmUuc3RhcnRzd2l0aCgieyIpCisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBkaXNwbGF5X3BlZWsoIHNlbGYsIGRhdGFzZXQgKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQucGVlaworICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICByZXR1cm4gIkpTT04gZmlsZSAoJXMpIiAlICggbmljZV9zaXpl
KCBkYXRhc2V0LmdldF9zaXplKCkgKSApCisKKworY2xhc3MgSXB5bmIoIEpzb24gKToKKyAgICBm
aWxlX2V4dCA9M0QgImlweW5iIgorCisgICAgZGVmIHNldF9wZWVrKCBzZWxmLCBkYXRhc2V0LCBp
c19tdWx0aV9ieXRlPTNERmFsc2UgKToKKyAgICAgICAgaWYgbm90IGRhdGFzZXQuZGF0YXNldC5w
dXJnZWQ6CisgICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEIGdldF9maWxlX3BlZWsoIGRhdGFz
ZXQuZmlsZV9uYW1lLCBpc19tdWx0aV9ieT0KdGU9M0Rpc19tdWx0aV9ieXRlICkKKyAgICAgICAg
ICAgIGRhdGFzZXQuYmx1cmIgPTNEICJJUHl0aG9uIE5vdGVib29rIgorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZGF0YXNldC5wZWVrID0zRCAnZmlsZSBkb2VzIG5vdCBleGlzdCcKKyAgICAg
ICAgICAgIGRhdGFzZXQuYmx1cmIgPTNEICdmaWxlIHB1cmdlZCBmcm9tIGRpc2MnCisKKyAgICBk
ZWYgc25pZmYoIHNlbGYsIGZpbGVuYW1lICk6CisgICAgICAgICIiIgorICAgICAgICAgICAgVHJ5
IHRvIGxvYWQgdGhlIHN0cmluZyB3aXRoIHRoZSBqc29uIG1vZHVsZS4gSWYgc3VjY2Vzc2Z1bCBp
dCc9CnMgYSBqc29uIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9sb29rc19s
aWtlX2pzb24oIGZpbGVuYW1lICk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
aXB5bmIgPTNEIGpzb24ubG9hZCggb3BlbihmaWxlbmFtZSkgKQorICAgICAgICAgICAgICAgIGlm
IGlweW5iLmdldCgnbmJmb3JtYXQnLCBGYWxzZSkgaXMgbm90IEZhbHNlIGFuZCBpcHluYi5nZXQ9
CignbWV0YWRhdGEnLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgZGlzcGxheV9kYXRhKHNlbGYsIHRyYW5zLCBkYXRhc2V0LCBwcmV2aWV3PTNERmFsc2UsIGZp
bGVuYW1lPTNETm9uPQplLCB0b19leHQ9M0ROb25lLCBjaHVuaz0zRE5vbmUsICoqa3dkKToKKyAg
ICAgICAgY29uZmlnID0zRCB0cmFucy5hcHAuY29uZmlnCisgICAgICAgIHRydXN0ID0zRCBnZXRh
dHRyKCBjb25maWcsICd0cnVzdF9pcHl0aG9uX25vdGVib29rX2NvbnZlcnNpb24nLCBGYT0KbHNl
ICkKKyAgICAgICAgaWYgdHJ1c3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGlzcGxheV9k
YXRhX3RydXN0ZWQodHJhbnMsIGRhdGFzZXQsIHByZXZpZXc9M0Rwcj0KZXZpZXcsIGZpbGVhbWU9
M0RmaWxlbmFtZSwgdG9fZXh0PTNEdG9fZXh0LCBjaHVuaz0zRGNodW5rLCAqKmt3ZCkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihJcHluYiwgc2VsZikuZGlzcGxheV9k
YXRhKCB0cmFucywgZGF0YXNldCwgcHJldmllPQp3PTNEcHJldmlldywgZmlsZWFtZT0zRGZpbGVu
YW1lLCB0b19leHQ9M0R0b19leHQsIGNodW5rPTNEY2h1bmssICoqa3dkICkKKworICAgIGRlZiBf
ZGlzcGxheV9kYXRhX3RydXN0ZWQoc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHByZXZpZXc9M0RGYWxz
ZSwgZmlsZW49CmFtZT0zRE5vbmUsIHRvX2V4dD0zRE5vbmUsIGNodW5rPTNETm9uZSwgKiprd2Qp
OgorICAgICAgICBwcmV2aWV3ID0zRCB1dGlsLnN0cmluZ19hc19ib29sKCBwcmV2aWV3ICkKKyAg
ICAgICAgaWYgY2h1bms6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfY2h1bmsodHJhbnMs
IGRhdGFzZXQsIGNodW5rKQorICAgICAgICBlbGlmIHRvX2V4dCBvciBub3QgcHJldmlldzoKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLl9zZXJ2ZV9yYXcodHJhbnMsIGRhdGFzZXQsIHRvX2V4dCkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9maWxlX2hhbmRsZSA9M0QgdGVtcGZpbGUuTmFt
ZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT0zREZhbHNlKQorICAgICAgICAgICAgb2ZpbGVuYW1lID0z
RCBvZmlsZV9oYW5kbGUubmFtZQorICAgICAgICAgICAgb2ZpbGVfaGFuZGxlLmNsb3NlKCkKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjbWQgPTNEICdpcHl0aG9uIG5iY29udmVy
dCAtLXRvIGh0bWwgLS10ZW1wbGF0ZSBiYXNpYyAlcyAtPQotb3V0cHV0ICVzJyAlIChkYXRhc2V0
LmZpbGVfbmFtZSwgb2ZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJDYWxsaW5n
IGNvbW1hbmQgJXMiICUgY21kKQorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQs
IHNoZWxsPTNEVHJ1ZSkKKyAgICAgICAgICAgICAgICBvZmlsZW5hbWUgPTNEICclcy5odG1sJyAl
IG9maWxlbmFtZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9maWxlbmFt
ZSA9M0QgZGF0YXNldC5maWxlX25hbWUKKyAgICAgICAgICAgICAgICBsb2cuZXhjZXB0aW9uKCAn
Q29tbWFuZCAiJXMiIGZhaWxlZC4gQ291bGQgbm90IGNvbnZlcnQgdGhlPQogSVB5dGhvbiBOb3Rl
Ym9vayB0byBIVE1MLCBkZWZhdWx0aW5nIHRvIHBsYWluIHRleHQuJyAlIGNtZCApCisgICAgICAg
ICAgICByZXR1cm4gb3Blbiggb2ZpbGVuYW1lICkKKworICAgIGRlZiBzZXRfbWV0YSggc2VsZiwg
ZGF0YXNldCwgKiprd2QgKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgbnVtYmVyIG9m
IG1vZGVscyBpbiBkYXRhc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcwoKCmh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy8zYzRmMmVjMjIyNDUv
CkNoYW5nZXNldDogICAzYzRmMmVjMjIyNDUKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAg
ICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgTW92ZSB0aGUgSVB5
dGhvbiBwb3J0IHJhbmdlIHN0dWZmIGludG8gc29ja2V0IHV0aWwuClNob3VsZCBiZSBwb3NzaWJs
ZSB0byB1c2UgdGhpcyAtIGJ1dCBub3QgYSB0b24gcmVhc29uIHdpdGggdGhlIGR5bmFtaWMgcHJv
eD0KeS4KQWZmZWN0ZWQgIzogIDEgZmlsZQoKZGlmZiAtciA3Nzg1NzBlZmNjZTgwOTY1YTgxOGZi
OTAwYTMxNmViYzYzMGYzNzQ0IC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwPQowNjIyODJiNzYz
YjQ2NGQwYiBsaWIvZ2FsYXh5L3V0aWwvc29ja2V0cy5weQotLS0gYS9saWIvZ2FsYXh5L3V0aWwv
c29ja2V0cy5weQorKysgYi9saWIvZ2FsYXh5L3V0aWwvc29ja2V0cy5weQpAQCAtMSwxMCArMSw0
MyBAQAoraW1wb3J0IHNobGV4CiBpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1w
b3J0IHJhbmRvbQo9MjAKPTIwCi1kZWYgdW51c2VkX3BvcnQoKToKK2RlZiB1bnVzZWRfcG9ydChy
YW5nZT0zRE5vbmUpOgorICAgIGlmIHJhbmdlOgorICAgICAgICByZXR1cm4gX191bnVzZWRfcG9y
dF9vbl9yYW5nZShyYW5nZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX191bnVzZWRfcG9y
dF9yYW5nZWxlc3MoKQorCisKK2RlZiBfX3VudXNlZF9wb3J0X3JhbmdlbGVzcygpOgogICAgICMg
VE9ETzogQWxsb3cgcmFuZ2VzICh0aG91Z2ggdGhlbiBuZWVkIHRvIGd1ZXNzIGFuZCBjaGVjayku
Li4KICAgICBzID0zRCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19T
VFJFQU0pCiAgICAgcy5iaW5kKCgnbG9jYWxob3N0JywgMCkpCiAgICAgYWRkciwgcG9ydCA9M0Qg
cy5nZXRzb2NrbmFtZSgpCiAgICAgcy5jbG9zZSgpCiAgICAgcmV0dXJuIHBvcnQKKworCitkZWYg
X191bnVzZWRfcG9ydF9vbl9yYW5nZShyYW5nZSk6CisgICAgYXNzZXJ0IHJhbmdlWzBdIGFuZCBy
YW5nZVsxXQorCisgICAgIyBGaW5kIGFsbCBwb3J0cyB0aGF0IGFyZSBhbHJlYWR5IG9jY3VwaWVk
CisgICAgY21kX25ldHN0YXQgPTNEIHNobGV4LnNwbGl0KCJuZXRzdGF0IHR1bG4iKQorICAgIHAx
ID0zRCBzdWJwcm9jZXNzLlBvcGVuKGNtZF9uZXRzdGF0LCBzdGRvdXQ9M0RzdWJwcm9jZXNzLlBJ
UEUpCisKKyAgICBvY2N1cGllZF9wb3J0cyA9M0Qgc2V0KCkKKyAgICBmb3IgbGluZSBpbiBwMS5z
dGRvdXQucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ3Rj
cCcpIG9yIGxpbmUuc3RhcnRzd2l0aCgndGNwNicpOgorICAgICAgICAgICAgY29sID0zRCBsaW5l
LnNwbGl0KCkKKyAgICAgICAgICAgIGxvY2FsX2FkZHJlc3MgPTNEIGNvbFszXQorICAgICAgICAg
ICAgbG9jYWxfcG9ydCA9M0QgbG9jYWxfYWRkcmVzcy5zcGxpdCgnOicpWzFdCisgICAgICAgICAg
ICBvY2N1cGllZF9wb3J0cy5hZGQoIGludChsb2NhbF9wb3J0KSApCisKKyAgICAjIEdlbmVyYXRl
IHJhbmRvbSBmcmVlIHBvcnQgbnVtYmVyLgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHBvcnQg
PTNEIHJhbmRvbS5yYW5kcmFuZ2UocmFuZ2VbMF0sIHJhbmdlWzFdKQorICAgICAgICBpZiBwb3J0
IG5vdCBpbiBvY2N1cGllZF9wb3J0czoKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHBv
cnQKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMv
NDBmN2Y5NDQwOTAwLwpDaGFuZ2VzZXQ6ICAgNDBmN2Y5NDQwOTAwClVzZXI6ICAgICAgICBqbWNo
aWx0b24KRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAg
IFNwbGl0IGludGVyYWN0aXZlX2Vudmlyb25tZW50cyBvdXQgaW50byB0aGVpciBvd24gcGx1Z2lu
IGRpcmVjPQp0b3J5LgpQcmFnbWF0aWNhbGx5IHRoaXMgYWxsb3dzIHZpc3VhbGl6YXRpb25zIHRv
IGJlIGVuYWJsZWQgYnkgZGVmYXVsdCBidXQgbm90IEk9ClB5dGhvbiBzdHVmZiBhbmQgcHJvdmlk
ZXMgYSBzcG90IHRvIHB1dCBhIHdhcm5pbmcgYWJvdXQgc2VjdXJpdHkgaXNzdWVzLiBNbz0KcmUg
YWJzdHJhY3RseSBJIHRoaW5rIGl0IHByb3ZpZGVzIGEgbmljZSBzZXBhcmF0aW9uIChpbml0aWFs
bHkgdGhvdWdoIHN1cGVyPQpmaWNpYWwpIGJldHdlZW4gdGhlc2UgcGx1Z2luIHR5cGVzLgpBZmZl
Y3RlZCAjOiAgMjkgZmlsZXMKCmRpZmYgLXIgM2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJi
NzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIg
Y29uZmlnL2dhbGF4eS5pbmkuc2FtcGxlCi0tLSBhL2NvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQor
KysgYi9jb25maWcvZ2FsYXh5LmluaS5zYW1wbGUKQEAgLTIyMSw5ICsyMjEsMTUgQEAKPTIwCiAj
IFZpc3VhbGl6YXRpb25zIGNvbmZpZyBkaXJlY3Rvcnk6IHdoZXJlIHRvIGxvb2sgZm9yIGluZGl2
aWR1YWwgdmlzdWFsaXphdD0KaW9uIHBsdWdpbnMuCiAjIFRoZSBwYXRoIGlzIHJlbGF0aXZlIHRv
IHRoZSBHYWxheHkgcm9vdCBkaXIuIFRvIHVzZSBhbiBhYnNvbHV0ZSBwYXRoIGJlZz0KaW4gdGhl
IHBhdGgKLSMgd2l0aCAnLycuIERlZmF1bHRzIHRvICJjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucyIuCisjIHdpdGggJy8nLiBUaGlzIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QuIERlZmF1
bHRzIHRvICJjb25maWcvcGx1Z2lucy92aT0Kc3VhbGl6YXRpb25zIi4KICN2aXN1YWxpemF0aW9u
X3BsdWdpbnNfZGlyZWN0b3J5ID0zRCBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucwo9MjAK
KyMgSW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgcGx1Z2lucyByb290IGRpcmVjdG9yeTogd2hlcmUg
dG8gbG9vayBmb3IgaW50ZXJhPQpjdGl2ZSBlbnZpcm9ubWVudAorIyBwbHVnaW5zLiBCeSBkZWZh
dWx0IG5vbmUgd2lsbCBiZSBsb2FkZWQuIFNldCB0byBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGk9
CnZlX2Vudmlyb25tZW50cworIyB0byBsb2FkIEdhbGF4eSdzIHN0b2NrIHBsdWdpbnMgKGN1cnJl
bnRseSBqdXN0IElQeXRob24pLiBUaGVzZSB3aWxsIHJlcXU9CmlyZSBEb2NrZXIKKyMgdG8gYmUg
Y29uZmlndXJlZCBhbmQgaGF2ZSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBzbyBwcm9jZWVkIHdp
dGggY2F1dGlvPQpuLgorI2ludGVyYWN0aXZlX2Vudmlyb25tZW50X3BsdWdpbnNfZGlyZWN0b3J5
ID0zRD0yMAorCiAjIEVhY2ggam9iIGlzIGdpdmVuIGEgdW5pcXVlIGVtcHR5IGRpcmVjdG9yeSBh
cyBpdHMgY3VycmVudCB3b3JraW5nIGRpcmVjdD0Kb3J5LgogIyBUaGlzIG9wdGlvbiBkZWZpbmVz
IGluIHdoYXQgcGFyZW50IGRpcmVjdG9yeSB0aG9zZSBkaXJlY3RvcmllcyB3aWxsIGJlCiAjIGNy
ZWF0ZWQuCgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIg
LXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVn
aW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pbnRlcmFjdGl2ZV9lbnZpcj0Kb25tZW50cy5k
dGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9u
bWVudHMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmR0ZApAQCAtMCwwICsxLDEgQEAKKy4uL3Zp
c3VhbGl6YXRpb25zL3Zpc3VhbGl6YXRpb24uZHRkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQoKZGlmZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBiIC1yIDQw
ZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1Z2lucy9p
bnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi8uZ2l0aWdub3JlCi0tLSAvZGV2L251bGwK
KysrIGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vLmdp
dGlnbm9yZQpAQCAtMCwwICsxLDU0IEBACisjIEJ5dGUtY29tcGlsZWQgLyBvcHRpbWl6ZWQgLyBE
TEwgZmlsZXMKK19fcHljYWNoZV9fLworKi5weVtjb2RdCisKKyMgQyBleHRlbnNpb25zCisqLnNv
CisKKyMgRGlzdHJpYnV0aW9uIC8gcGFja2FnaW5nCisuUHl0aG9uCitlbnYvCitiaW4vCitidWls
ZC8KK2RldmVsb3AtZWdncy8KK2Rpc3QvCitlZ2dzLworbGliLworbGliNjQvCitwYXJ0cy8KK3Nk
aXN0LwordmFyLworKi5lZ2ctaW5mby8KKy5pbnN0YWxsZWQuY2ZnCisqLmVnZworCisjIEluc3Rh
bGxlciBsb2dzCitwaXAtbG9nLnR4dAorcGlwLWRlbGV0ZS10aGlzLWRpcmVjdG9yeS50eHQKKwor
IyBVbml0IHRlc3QgLyBjb3ZlcmFnZSByZXBvcnRzCitodG1sY292LworLnRveC8KKy5jb3ZlcmFn
ZQorLmNhY2hlCitub3NldGVzdHMueG1sCitjb3ZlcmFnZS54bWwKKworIyBUcmFuc2xhdGlvbnMK
KyoubW8KKworIyBNciBEZXZlbG9wZXIKKy5tci5kZXZlbG9wZXIuY2ZnCisucHJvamVjdAorLnB5
ZGV2cHJvamVjdAorCisjIFJvcGUKKy5yb3BlcHJvamVjdAorCisjIERqYW5nbyBzdHVmZjoKKyou
bG9nCisqLnBvdAorCisjIFNwaGlueCBkb2N1bWVudGF0aW9uCitkb2NzL19idWlsZC8KKwoKZGlm
ZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBiIC1yIDQwZjdmOTQ0
MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1Z2lucy9pbnRlcmFj
dGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9JTlNUQUxMLm1kCi0tLSAvZGV2L251bGwKKysrIGIv
Y29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vSU5TVEFMTC5t
ZApAQCAtMCwwICsxLDYzIEBACisjIEluc3RhbGxhdGlvbgorCitXZSd2ZSBkZXZlbG9wZWQgdGhl
IHRlbXBsYXRlcyBhbmQgY29udGFpbmVycyBzdWNoIHRoYXQgdGhleSBjYW4gYmUgcnVuIHRocj0K
b3VnaCBhbiBBcGFjaGUgcHJveHkgdXNpbmcKK1NTTC4gVGhpcyByZXF1aXJlcyBzb21lIG5vbi10
cml2aWFsIGFwYWNoZSBjb25maWd1cmF0aW9uIHRvIHN1cHBvcnQuCisKKyMjIFJlcXVpcmVtZW50
cworCisgKiBbbW9kX2hlYWRlcnNdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21v
ZC9tb2RfaGVhZGVycy5odG1sKQorICogW21vZF9wcm94eV0oaHR0cDovL2h0dHBkLmFwYWNoZS5v
cmcvZG9jcy8yLjQvbW9kL21vZF9wcm94eS5odG1sKQorICogW21vZF9wcm94eV9odHRwXShodHRw
Oi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX3Byb3h5X2h0dHAuaHQ9Cm1sKQor
ICogW21vZF9wcm94eV93c3R1bm5lbF0oaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQv
bW9kL21vZF9wcm94eV93c3Q9CnVubmVsLmh0bWwpCisgKiBbbW9kX3Jld3JpdGVdKGh0dHA6Ly9o
dHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2RfcmV3cml0ZS5odG1sKQorICogW21vZF9z
ZXRlbnZpZl0oaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9zZXRlbnZp
Zi5odG1sKQorCitJUHl0aG9uIG1ha2VzIHVzZSBvZiBXZWJTb2NrZXRzIHdoaWNoIHdlIG5lZWQg
dG8gcHJveHkgaW4gYXBhY2hlLiBTdXBwb3J0ID0Kd2FzIGFkZGVkIHRvIGBhcGFjaGUyLjRgCitm
b3IgdGhpcywgd2hpY2ggaXMgYXZhaWxhYmxlIGluIGBVYnVudHUgMTQuMDRgLiBUaGVyZSBhcmUg
dHV0b3JpYWxzIG9uIHRoZT0KIGludGVybmV0IGZvciBiYWNrcG9ydGluZwordGhlIHdlYnNvY2tl
dHMgbW9kdWxlLCBhbmQgaW5zdGFsbGluZyBgYXBhY2hlMi40YCBQUEFzLgorCisjIyBBcGFjaGUg
Q29uZmlndXJhdGlvbgorCitIZXJlIGlzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uCisKK2Bg
YGFwYWNoZQorUmV3cml0ZUVuZ2luZSBPbgorU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9pcHl0aG9u
LyhbMC05XSspL2FwaS9rZXJuZWxzLyIgRE9DS0VSX1BPUlQ9M0QkMQorUmV3cml0ZVJ1bGUgICAg
IF4vaXB5dGhvbi8oWzAtOV0rKS9hcGkva2VybmVscy8oLiopJCAgIHdzOi8vMTI3LjAuMC4xOiQx
L2k9CnB5dGhvbi8kMS9hcGkva2VybmVscy8kMiBbUCxMXQorUmV3cml0ZVJ1bGUgICAgIF4vaXB5
dGhvbi8oWzAtOV0rKS8oLiopJCAgICAgICAgICAgICBodHRwOi8vbG9jYWxob3N0OiQxL2k9CnB5
dGhvbi8kMS8kMiBbUCxMXQorPExvY2F0aW9uIC9pcHl0aG9uLz4KKyAgICAgICAgIyBzcG9vZiBo
ZWFkZXJzIHRvIG1ha2Ugbm90ZXBhZCBhY2NlcHQgdGhlIHJlcXVlc3QgYXMgY29taW5nIGZyb20g
PQp0aGUgc2FtZSBvcmlnaW4KKyAgICAgICAgSGVhZGVyIHNldCBPcmlnaW4gImh0dHA6Ly8xMjcu
MC4wLjE6JXtET0NLRVJfUE9SVH1lIgorICAgICAgICBSZXF1ZXN0SGVhZGVyIHNldCBPcmlnaW4g
Imh0dHA6Ly8xMjcuMC4wLjE6JXtET0NLRVJfUE9SVH1lIgorPC9Mb2NhdGlvbj4KKzwvVmlydHVh
bEhvc3Q+CitgYGAKKworV2UnbGwgc3RlcCB0aHJvdWdoIGxpbmUtYnktbGluZSBmb3IgY2xhcml0
eS4KKworYGBgYXBhY2hlCitTZXRFbnZJZiBSZXF1ZXN0X1VSSSAiL2lweXRob24vKFswLTldKykv
YXBpL2tlcm5lbHMvIiBET0NLRVJfUE9SVD0zRCQxCitgYGAKKworSGVyZSB3ZSBjaGVjayB0aGUg
YFJlcXVlc3RfVVJJYCBmb3IgdGhlIHByZXNlbmNlIGZvciB0aGUga2VybmVsIHJlcXVlc3QuIFc9
CmUgZG8gdGhpcyBvbmx5IGZvciB0aGUgYGFwaS9rZXJuZWxgIHN1YmNhbGwsIGFzIHRoZSBvbmx5
IGNvbmZpZ3VyYXRpb24gd2hpYz0KaCBuZWVkcyBhY2Nlc3MgdG8gYERPQ0tFUl9QT1JUYCBpcyBr
ZXJuZWwgY2FsbHMuCisKK2BgYGFwYWNoZQorUmV3cml0ZVJ1bGUgXi9pcHl0aG9uLyhbMC05XSsp
L2FwaS9rZXJuZWxzLyguKikkICAgd3M6Ly8xMjcuMC4wLjE6JDEvaXB5dGg9Cm9uLyQxL2FwaS9r
ZXJuZWxzLyQyIFtQLExdCitSZXdyaXRlUnVsZSBeL2lweXRob24vKFswLTldKykvKC4qKSQgICAg
ICAgICAgICAgaHR0cDovL2xvY2FsaG9zdDokMS9pcHl0aD0Kb24vJDEvJDIgW1AsTF0KK2BgYAor
CitUaGVzZSB0d28gcnVsZXMgcHJveHkgYF4vaXB5dGhvbi9gIHJlcXVlc3RzIHRvIHRoZWlyIGNv
cnJlY3QgbG9jYXRpb25zLiBBUD0KSSByZXF1ZXN0cyBmb3IgdGhlIElQeXRob24ga2VybmVsIGFy
ZSByb3V0ZWQgdGhyb3VnaCB0aGUgd3N0dW5uZWwgKFdlYlNvY2tlPQp0KSBwcm94eSwgd2hpbGUg
YWxsIG90aGVyIHJlcXVlc3RzIGdvIHRocm91Z2ggSFRUUC4gVGhlcmUgYXJlIG1vZGlmaWVkIGxp
c3Q9CmVkIGFmdGVyIGJvdGgsIGBbUCxMXWAuIGBQYCBzcGVjaWZpZXMgYSBwcm94eSwgYW5kIGBM
YCBzcGVjaWZpZXMgdGhpcyBpcyB0aD0KZSBsYXN0IHJ1bGUsIHRvIHByZXZlbnQgdGhlIHNlY29u
ZCByZXdyaXRlIHN0YXRlbWVudCBmcm9tIG1hdGNoaW5nIGFsbCBrZXJuPQplbCBjYWxscy4KKwor
YGBgYXBhY2hlCis8TG9jYXRpb24gL2lweXRob24vPgorICAgICAgICAjIHNwb29mIGhlYWRlcnMg
dG8gbWFrZSBub3RlcGFkIGFjY2VwdCB0aGUgcmVxdWVzdCBhcyBjb21pbmcgZnJvbSA9CnRoZSBz
YW1lIG9yaWdpbgorICAgICAgICBIZWFkZXIgc2V0IE9yaWdpbiAiaHR0cDovLzEyNy4wLjAuMTol
e0RPQ0tFUl9QT1JUfWUiCisgICAgICAgIFJlcXVlc3RIZWFkZXIgc2V0IE9yaWdpbiAiaHR0cDov
LzEyNy4wLjAuMTole0RPQ0tFUl9QT1JUfWUiCis8L0xvY2F0aW9uPgorYGBgCisKK1RoZSBXZWJT
b2NrZXQgc2VydmVyIGluIElQeXRob24gcGF5cyBhdHRlbnRpb24gdG8gQ3Jvc3MtT3JpZ2luLVJl
cXVlc3RzIGFuPQpkIHdpbGwgdGhyb3VnaCB1cCBhIDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3Ig
KGluIGRvY2tlcikgaWYgeW91IGF0dGVtcHQgdG89CiBzZW5kIGl0IGJhZCBkYXRhLiBUaHVzLCB3
ZSB1c2UgdGhlIGV4dHJhY3RlZCBwb3J0IG51bWJlciBmcm9tIHRoZSBlYXJsaWVyID0KYFNldEVu
dklmYCByZXF1ZXN0IGluIG9yZGVyIHRvIG9idGFpbiB0aGUgcG9ydCB0aGF0IElQeXRob24gd2ls
bCBhY3R1YWxseSByPQplY2VpdmUgY29ubmVjdGlvbnMgZnJvbS4KKworIyMgTmdpbnggQ29uZmln
dXJhdGlvbgorCitQbGVhc2Ugc3VibWl0IGl0IGlmIHlvdSB3cml0ZSBpdCEKCmRpZmYgLXIgM2M0
ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0
NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52
aXJvbm1lbnRzL2lweXRob24vTElDRU5TRQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVn
aW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL0xJQ0VOU0UKQEAgLTAsMCArMSwy
MSBAQAorVGhlIE1JVCBMaWNlbnNlIChNSVQpCisKK0NvcHlyaWdodCAoYykgMjAxNCBCaj1DMz1C
NnJuIEdyPUMzPUJDbmluZworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjbz0KcHkKK29mIHRoaXMgc29mdHdh
cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0
byBkPQplYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg
d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdoPQp0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l
cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVz
IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3
YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbj0KIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFs
IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQs
IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF
TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT
IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUj0KT00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOID0KVEhFCitTT0ZUV0FSRS4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2
M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNv
bmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL1JFQURNRS5tZAot
LS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50
cy9pcHl0aG9uL1JFQURNRS5tZApAQCAtMCwwICsxLDE0NCBAQAorR2FsYXh5IElQeXRob24gSW50
ZWdyYXRpb24KKz0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNECisKK1RoaXMgcHJvamVjdHMgaW50ZWdy
YXRlcyBbSVB5dGhvbiBOb3RlYm9va10oaHR0cDovL2lweXRob24ub3JnL25vdGVib29rLmh0PQpt
bCksIGEgaW50ZXJhY3RpdmUgY29tcHV0YXRpb25hbCBlbnZpcm9ubWVudCwgd2l0aCBbR2FsYXh5
XShodHRwOi8vZ2FsYXh5cHI9Cm9qZWN0Lm9yZykuPTIwCitXZSBob3BlIHRvIG1ha2UgR2FsYXh5
IG1vcmUgYXR0cmFjdGl2ZSBmb3IgYmlvaW5mb3JtYXRpY2lhbnMgYW5kIHRvIGNvbWJpbj0KZSB0
aGUgcG93ZXIgb2YgYm90aCBwcm9qZWN0cyB0byB1bmxvY2sgY3JlYXRpdml0eSBpbiBkYXRhIGFu
YWx5c2lzLCBidXQgYWxzPQpvIGluIE5leHQtR2VuZXJhdGlvbi1UcmFpbmluZyBjb3Vyc2VzLgor
CishW0lQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20v
YmdydWVuaW5nL2dhbGF4eS1pcD0KeXRob24vbWFzdGVyL3N0YXRpYy9pbWFnZXMvaXB5dGhvbl9p
bl9nYWxheHkucG5nKQorCitbIVtJTUFHRSBBTFQgVEVYVCBIRVJFXShodHRwOi8vaW1nLnlvdXR1
YmUuY29tL3ZpL2pRRHlUdVlubjFrLzAuanBnKV0oaHR0cD0KOi8vd3d3LnlvdXR1YmUuY29tL3dh
dGNoP3Y9M0RqUUR5VHVZbm4xaykKKworCitSZXF1aXJlbWVudHMKKz0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRAorCitUaGUgb25seSByZXF1aXJlbWVudCBpcyB0byBoYXZlIFtE
b2NrZXJdKGh0dHBzOi8vd3d3LmRvY2tlci5jb20pIGluc3RhbGxlZD0KIG9uIHlvdXIgc3lzdGVt
LgorRm9yIGEgZGV0YWlsZWQgaW5zdHJ1Y3Rpb24gaG93IHRvIGluc3RhbGwgZG9ja2VyLCBwbGVh
c2UgbG9vayBhdCB0aGUgW2RvY2s9CmVyIHdlYnNpdGVdKGh0dHBzOi8vZG9jcy5kb2NrZXIuY29t
L2luc3RhbGxhdGlvbi8pLgorCisKK0luc3RhbGxhdGlvbgorPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNEPTNEPTNECisKK0NvcHkgdGhlIHRlbXBsYXRlIGFuZCBjb25maWcgZm9sZGVyIGlu
IHlvdXIgYGBHQUxBWFlfUk9PVC9jb25maWcvcGx1Z2lucy92PQppc3VhbGl6YXRpb25zL2lweXRo
b25gYCBmb2xkZXIgYW5kIHJlc3RhcnQgR2FsYXh5LgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBj
bG9uZSB0aGUgcmVwb3NpdG9yeSB3aXRoCisKK2BgYGJhc2gKK2dpdCBjbG9uZSBodHRwczovL2dp
dGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uLmdpdCBjb25maWcvcGx1Z2lucy92PQpp
c3VhbGl6YXRpb25zL2lweXRob24KK2BgYGAKKworVGhlIElQeXRob24gdmlzdWFsaXNhdGlvbiBv
cHRpb24gc2hvdWxkIGJlIHZpc2libGUgbmV4dCB0byB0aGUgdXN1YWwgQ2hhcnQ9CnMgb3IgVHJh
Y2tzdGVyIG9wdGlvbnMgaW4geW91ciB2aXN1YWxpc2F0aW9uIG1lbnVlLgorCishW1N0YXJ0aW5n
IElQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYmdy
dWVuaW5nLz0KZ2FsYXh5LWlweXRob24vbWFzdGVyL3N0YXRpYy9pbWFnZXMvc3RhcnRfaXB5dGhv
bi5wbmcpCisKKworRmVhdHVyZXMKKz0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAorCisgKiBydW4g
SVB5dGhvbiBkaXJlY3RseSBpbiB5b3VyIEdhbGF4eSBtYWluIHdpbmRvdyBvciBpbiBHYWxheHkg
U2NyYXRjaGJvb2sKKyAqIGNvbXBsZXRlIGVuY2Fwc3VsYXRlZCBweXRob24gZW52aXJvbm1lbnQg
d2l0aCBtYXRwbG90bGliLCBwYW5kYXMgYW5kIGZyPQppZW5kcyBpbnN0YWxsZWQKKyAqIGFjY2Vz
cyB0byBhbGwgZGF0YXNldHMgZnJvbSB5b3VyIGN1cnJlbnQgaGlzdG9yeSB2aWEgcHJlLWRlZmlu
ZWQgSVB5dGhvPQpuIGZ1bmN0aW9uCisgKiBtYW5pcHVsYXRlIGFuZCBwbG90IGRhdGEgYXMgeW91
IGxpa2UgYW5kIGV4cG9ydCB5b3VyIG5ldyBmaWxlcyBiYWNrIGludD0KbyB0aGUgR2FsYXh5IGhp
c3RvcnkKKyAqIGFjY2VzcyB5b3VyIEdhbGF4eSBpbnN0YW5jZSBmcm9tIElQeXRob24gd2l0aCBi
aW9ibGVuZCBhbmQgcmVkZWZpbmVkIGZ1PQpuY3Rpb25zCisgKiBzYXZlIHRoZSBJUHl0aG9uIE5v
dGVib29rIGludG8geW91ciBHYWxheHkgaGlzdG9yeQorICogbm90ZWJvb2sgcGVyc2lzdGVuY2Ug
YWNyb3NzIHNlc3Npb25zCisgKiBzYXZlZCBJUHl0aG9uIE5vdGVib29rIGZpbGVzIGNhbiBiZSB2
aWV3ZWQgaW4gSFRNTCBhbmQgcmUtb3BlbmVkCisgKiBzZWxmLWNsb3NpbmcgYW5kIGNsZWFuaW5n
IElQeXRob24gZG9ja2VyIGNvbnRhaW5lcgorCitIb3cgZG9lcyBpdCB3b3JrCis9M0Q9M0Q9M0Q9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKKworVGhlIG1ha28gdGVtcGxh
dGUgZnJvbSB0aGUgR2FsYXh5IHZpc3VhbGlzYXRpb24gZnJhbWV3b3JrIHJlbmRlcnMgdGhlIGlu
dGU9CnJmYWNlIGFuZCBidWlsZHMgYWxsIGZpbGVzIGFuZCBjb21tYW5kcyBuZWVkZWQgdG8gbHVu
Y2ggdGhlIGRvY2tlciBjb250YWluZT0Kci4gQSBjb25maWcgZmlsZSBpcyBzYXZlZCB1bmRlciBg
YC9pbXBvcnQvYGAgaW5zaWRlIHRoZSBkb2NrZXIgY29udGFpbmVyLiBUPQpoZSBJUHl0aG9uIHdl
YnBhZ2UgcnVubmluZyBpbiBkb2NrZXIgd2lsbCBiZSBpbmNsdWRlZCBpbiBhIEhUTUwgb2JqZWN0
IGFuZCA9CmRpc3BsYXllZCB0byB0aGUgdXNlci49MjAKK0RlcGVuZGluZyBvbiB5b3VyIGNvbmZp
Z3VyYXRpb24gc29tZSBKYXZhU2NyaXB0IG1hZ2ljIGlzIGRvbmUgdG8gYWRkIGFuIG9iPQpqZWN0
IHRvIHRoZSBET00sIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGJ5IHRoZSBicm93c2VyIGFuZCBjb25k
aXRpb25hbGx5IGhhbmQ9CmxlcyBsb2dpbi4KK0lzaWRlIG9mIGRvY2tlciBUQ1AgY29ubmVjdGlv
bnMgYXJlIG1vbml0b3JlZCB1c2luZyBjcm9uLiBBcyBzb29uIGFzIHRoZSB1PQpzZXIgcXVpdHMg
dXNpbmcgdGhlIG5vdGVib29rLCB0aGUgZHJvcHBpbmcgVENQIGNvbm5lY3Rpb25zIGFyZSByZWNv
Z25pc2VkIGE9Cm5kIHRoZSBjb3RhaW5lciBjbGVhbnMgdXAgYWZ0ZXIgaXRzZWxmIGFuZCBraWxs
cyBpdHNlbGYuCisKKworCitGdW5jdGlvbnMgYW5kIHZhcmlhYmxlcworPTNEPTNEPTNEPTNEPTNE
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisK
K0ZvciB5b3VyIGNvbnZpZW5jZSwgd2UgaGF2ZSBhZGRlZCBhIGZldyBwcmUtZGVmaW5lZCBmdW5j
dGlvbnMgdG8gdGhlIElQeXRoPQpvbiBwcm9maWxlLgorCisjIyMgZ2V0CisKKyAgIFRoZSBnZXQg
ZnVuY3Rpb24gd2lsbCBjb3B5IGEgZGF0YXNldCwgaWRlbnRpZmllZCBieSB0aGUgaGlzdG9yeV9p
ZCwgZnJvPQptIHlvdXIgY3VycmVudCBHYWxheHk9MjAKKyAgIGludG8gdGhlIGRvY2tlciBjb250
YWluZXIuIEl0IHdpbGwgcmV0dXJuIHRoZSBmaWxlIHBhdGggdG8gdGhlIGNvcGllZCBmPQppbGUu
CisKKyAgICpFeGFtcGxlKjoKKyAgIGBgYHB5dGhvbgorICAgICAgd2l0aCBvcGVuKCBnZXQoIDQ0
ICksICdyJykgYXMgaGFuZGxlOgorICAgICAgICAgZm9yIGxpbmUgaW4gaGFuZGxlOgorICAgICAg
ICAgICAgcHJpbnQoIGxpbmUgKQorICAgYGBgPTIwCisKKyMjIyBwdXQKKworICAgVGhlIHB1dCBm
dW5jdGlvbiB0YWtlcyBhIGZpbGUgcGF0aCBhbmQgdHJhbnNmZXJzIHRoZSBmaWxlIHRvIHRoZSBj
dXJyZW49CnQgaGlzdG9yeSBvZiB5b3VyIEdhbGF4eSBzZXNzaW9uLgorCisgICAqRXhhbXBsZSo6
CisgICBgYGBweXRob24KKyAgICAgIHB1dCggJy4vbXlfZmlsZS50c3YnLCBmaWxlX3R5cGUgPTNE
ICd0YWJ1bGFyJykKKyAgIGBgYAorCisjIyMgSElTVE9SWV9JRAorCisgICBBY2Nlc3NpbmcgeW91
ciBjdXJyZW50IGhpc3RvcnkgaXMgcG9zc2libGUgd2l0aCB0aGUgcHJlLWRlZmluZWQgSElTVE9S
WT0KX0lEIHZhcmlhYmxlLgorICA9MjAKKworIyMjIGNvbm5lY3QgdG8gR2FsYXh5CisKKyAgIElm
IHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggR2FsYXh5IHlvdSBjYW4gdXNlIGBgYGdldF9n
YWxheHlfY29ubmVjPQp0aW9uKClgYGAgdG8gZ2V0IGFuIFtiaW9ibGVuZCBHYWxheHlJbnN0YW5j
ZSBvYmplY3RdKGh0dHA6Ly9iaW9ibGVuZC5yZWFkdGg9CmVkb2NzLm9yZy9lbi9sYXRlc3QvYXBp
X2RvY3MvZ2FsYXh5L2FsbC5odG1sP2hpZ2hsaWdodD0zRGdhbGF4eWluc3RhbmNlKS4KKworICAg
KkV4YW1wbGUqOgorICAgYGBgcHl0aG9uCisgICAgICBmcm9tIGJpb2JsZW5kLmdhbGF4eS5oaXN0
b3JpZXMgaW1wb3J0IEhpc3RvcnlDbGllbnQKKyAgICAgIGdpID0zRCBnZXRfZ2FsYXh5X2Nvbm5l
Y3Rpb24oKQorICAgICAgaGMgPTNEIEhpc3RvcnlDbGllbnQoIGdpICkKKyAgICAgIGZvciBkYXRh
c2V0IGluIGhjLnNob3dfaGlzdG9yeSggSElTVE9SWV9JRCAsIGNvbnRlbnRzPTNEVHJ1ZSkgKToK
KyAgICAgICAgIHByaW50KCBkYXRhc2V0WydpZCddICkKKyAgIGBgYAorCisKK1NlY3VyaXR5Cis9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKKworQnkgZGVmYXVsdCwgbm8gc2VjdXJpdHkgdHVybmVk
IG9uLiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhZGp1c3QgdHdvIHZhcmlhYmw9CmVzLCBgYXBhY2hl
X3VybHNgIGFuZAorYHBhc3N3b3JkX2F1dGhgIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKGBj
b25maWcvaXB5dGhvbi5jb25mYCkuPTIwCisKK1RoZSBgYXBhY2hlX3VybHNgIHZhcmlhYmxlIHNo
b3VsZCBiZSBzZXQgdG8gYFRydWVgLCBhbmQgY29udGFpbmVycyBzaG91bGQgPQpiZSBzZWN1cmVk
IHZpYSBBcGFjaGUrU1NMIGZvciBwcm9kdWN0aW9uIHVzYWdlLiBQbGVhc2Ugc2VlIHRoZSBbc2V0
dXBdKElOU1Q9CkFMTC5tZCkgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RoZSBg
cGFzc3dvcmRfYXV0aGAgdmFyaWFibGUgc2hvdWxkIGJlIHNldCB0byBgVHJ1ZWAuIEl0IGZ1bmN0
aW9ucyBieSBnZW5lPQpyYXRpbmcgYSByYW5kb20gcGFzc3dvcmQgd2hpY2ggaXMgb25seSBzaGFy
ZWQgd2l0aCB0aGUgZG9ja2VyLCBhbmQgdGhlIHVzZXI9CidzIGJyb3dzZXIgdGhyb3VnaCBHYWxh
eHkuIEluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBhIHNlY3VyZSBzeXN0ZW0gKG9yIGF0ID0KbGVh
c3QgYXMgc2VjdXJlIGFzIHRoZSB3ZWFrZXN0IGxpbmspLCBob3dldmVyIGlmIHlvdSBmaW5kIGEg
dnVsbmVyYWJpbGl0eSBpPQpuIHRoZSBzeXN0ZW0gd2UndmUgZGV2aXNlZCwgcGxlYXNlIGNvbnRh
Y3QgdXMgYW5kIHdlJ2xsIHBhdGNoIGl0IGFzIHNvb24gYXM9CiBwb3NzaWJsZSEKKworCitBdXRo
b3JzCis9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKKworICogQmo9QzM9QjZybiBHcj1DMz1CQ25pbmcg
PGJqb2Vybi5ncnVlbmluZ0BnbWFpbC5jb20+CisgKiBFcmljIFJhc2NoZSA8cmFzY2hlLmVyaWNA
eWFuZGV4LnJ1PgorCisKK0hpc3RvcnkKKz0zRD0zRD0zRD0zRD0zRD0zRD0zRAorCistIHYwLjE6
IEluaXRpYWwgcHVibGljIHJlbGVhc2UgKDAxLjA4LjIwMTQpCisKKworTGljZW5jZSAoTUlUKQor
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECisKK1Blcm1pc3Npb24gaXMg
aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh
IGNvPQpweQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp
bGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGQ9CmVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg
cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2g9CnRzCit0
byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu
c2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl
cnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj
dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwg
Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JT
IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S
IE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU
IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUj0KT00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09G
VFdBUkUuCgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIg
LXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVn
aW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL2NvbmZpZy9pcD0KeXRob24uY29u
ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25t
ZW50cy9pcHl0aG9uL2NvbmZpZy9pcHl0aG9uLmNvbmYKQEAgLTAsMCArMSw5IEBACitbbWFpbl0K
K2FwYWNoZV91cmxzID0zRCBGYWxzZQorcGFzc3dvcmRfYXV0aCA9M0QgRmFsc2UKK3NzbCA9M0Qg
RmFsc2UKKworW2RvY2tlcl0KK2NvbW1hbmQgPTNEIGRvY2tlcgoraW1hZ2UgPTNEIGJncnVlbmlu
Zy9kb2NrZXItaXB5dGhvbi1ub3RlYm9vaworCgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2
ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVj
NDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9u
L2NvbmZpZy9pcD0KeXRob24ueG1sCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMv
aW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vY29uZmlnL2lweXRob24ueG1sCkBAIC0w
LDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249M0QiMS4wIiBlbmNvZGluZz0zRCJVVEYtOCI/Pgor
PCFET0NUWVBFIHZpc3VhbGl6YXRpb24gU1lTVEVNICIuLi8uLi9pbnRlcmFjdGl2ZV9lbnZpcm9u
bWVudHMuZHRkIj4KKzx2aXN1YWxpemF0aW9uIG5hbWU9M0QiSVB5dGhvbiI+CisgICAgPGRhdGFf
c291cmNlcz4KKyAgICAgICAgPGRhdGFfc291cmNlPgorICAgICAgICAgICAgPG1vZGVsX2NsYXNz
Pkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb248L21vZGVsX2NsYXNzPgorICAgICAgICAgICAgPHRl
c3QgdHlwZT0zRCJpc2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJlc3VsdF90eXBl
PQo9M0QiZGF0YXR5cGUiPnRhYnVsYXIuVGFidWxhcjwvdGVzdD4KKyAgICAgICAgICAgIDx0ZXN0
IHR5cGU9M0QiaXNpbnN0YW5jZSIgdGVzdF9hdHRyPTNEImRhdGF0eXBlIiByZXN1bHRfdHlwZT0K
PTNEImRhdGF0eXBlIj5kYXRhLlRleHQ8L3Rlc3Q+CisgICAgICAgICAgICA8dG9fcGFyYW0gcGFy
YW1fYXR0cj0zRCJpZCI+ZGF0YXNldF9pZDwvdG9fcGFyYW0+CisgICAgICAgIDwvZGF0YV9zb3Vy
Y2U+CisgICAgPC9kYXRhX3NvdXJjZXM+CisgICAgPHBhcmFtcz4KKyAgICAgICAgPHBhcmFtIHR5
cGU9M0QiZGF0YXNldCIgdmFyX25hbWVfaW5fdGVtcGxhdGU9M0QiaGRhIiByZXF1aXJlZD0zRCJ0
PQpydWUiPmRhdGFzZXRfaWQ8L3BhcmFtPgorICAgIDwvcGFyYW1zPgorICAgIDx0ZW1wbGF0ZT5p
cHl0aG9uLm1ha288L3RlbXBsYXRlPgorPC92aXN1YWxpemF0aW9uPgoKZGlmZiAtciAzYzRmMmVj
MjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBiIC1yIDQwZjdmOTQ0MDkwMDc5ZDQ0YjQ3
ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9u
bWVudHMvaXB5dGhvbi9zdGF0aWMvaW09CmFnZXMvaXB5dGhvbl9pbl9nYWxheHkucG5nCkJpbmFy
eSBmaWxlIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3N0
YXRpYy9pbWFnZXMvaT0KcHl0aG9uX2luX2dhbGF4eS5wbmcgaGFzIGNoYW5nZWQKCmRpZmYgLXIg
M2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3
OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVf
ZW52aXJvbm1lbnRzL2lweXRob24vc3RhdGljL2ltPQphZ2VzL3N0YXJ0X2lweXRob24ucG5nCkJp
bmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9u
L3N0YXRpYy9pbWFnZXMvcz0KdGFydF9pcHl0aG9uLnBuZyBoYXMgY2hhbmdlZAoKZGlmZiAtciAz
YzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBiIC1yIDQwZjdmOTQ0MDkwMDc5
ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9l
bnZpcm9ubWVudHMvaXB5dGhvbi9zdGF0aWMvanM9Ci9pZS5qcwotLS0gL2Rldi9udWxsCisrKyBi
L2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3N0YXRpYy9q
cy9pZS5qcwpAQCAtMCwwICsxLDU5IEBACisvKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJl
bW92ZSBjb250ZW50IGZyb20gdGhlIG1haW4gYXJlYSBhbmQgYWRkIHRoZSBub3RlPQpib29rLgor
ICogTm90IGlkZW1wb3RlbnQKKyAqLworZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7Cisg
ICAgY2xlYXJfbWFpbl9hcmVhKCk7CisgICAgJCgnI21haW4nKS5hcHBlbmQoJzxpZnJhbWUgZnJh
bWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0eT0KbGU9M0Qid2lkdGg6IDEw
MCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBzcmM9
M0QiPQonKyB1cmwgKyciPjwvaWZyYW1lPicKKyAgICApOworfQorCitmdW5jdGlvbiBjbGVhcl9t
YWluX2FyZWEoKXsKKyAgICAkKCcjc3Bpbm5lcicpLnJlbW92ZSgpOworICAgICQoJyNtYWluJyku
Y2hpbGRyZW4oKS5yZW1vdmUoKTsKK30KKworZnVuY3Rpb24gZGlzcGxheV9zcGlubmVyKCl7Cisg
ICAgICAgICQoJyNtYWluJykuYXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0zRCInICsg
Z2FsYXh5X3Jvb3QgKyAnLz0Kc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNE
InBvc2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRvO3RvcDowPQo7bGVmdDowO3JpZ2h0OjA7Ym90
dG9tOjA7Ij4nKTsKK30KKworCisvKioKKyAqIFRlc3QgYXZhaWxhYmlsaXR5IG9mIGEgVVJMLCBh
bmQgY2FsbCBhIGNhbGxiYWNrIHdoZW4gZG9uZS4KKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNv
bS9xLzI1MzkwMjA2LzM0NzM2OAorICogQHBhcmFtIHtTdHJpbmd9IHVybDogVVJMIHRvIHRlc3Qg
YXZhaWxhYmlsaXR5IG9mLiBNdXN0IHJldHVybiBhIDIwMCAoMzA9CjItPjIwMCBpcyBPSykuCisg
KiBAcGFyYW0ge1N0cmluZ30gY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBzdWNjZXNz
ZnVsbHkgY29ubmVjdGVkLgorICoKKyAqLworZnVuY3Rpb24gdGVzdF9pZV9hdmFpbGFiaWxpdHko
dXJsLCBzdWNjZXNzX2NhbGxiYWNrKXsKKyAgICB2YXIgcmVxdWVzdF9jb3VudCA9M0QgMDsKKyAg
ICBkaXNwbGF5X3NwaW5uZXIoKTsKKyAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rp
b24oKXsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAg
ICAgeGhyRmllbGRzOiB7CisgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCisg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICB0aW1l
b3V0OiA1MDAsCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpeworICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCJDb25uZWN0ZWQgdG8gSUUsIHJldHVybmluZyIpOworICAgICAgICAg
ICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3Nf
Y2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24o
anF4aHIsIHN0YXR1cywgZXJyb3IpeworICAgICAgICAgICAgICAgIHJlcXVlc3RfY291bnQrKzsK
KyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiUmVxdWVzdCAiICsgcmVxdWVzdF9jb3VudCk7
CisgICAgICAgICAgICAgICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKKyAgICAgICAgICAgICAg
ICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGNsZWFy
X21haW5fYXJlYSgpOworICAgICAgICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCisgICAgICAg
ICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSUUsIGNvbnRhY3QgeW91ciBh
ZG1pbmlzdHJhdD0Kb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAw
LCAndGFwVG9EaXNtPQppc3MnOiBmYWxzZX0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0sIDEwMDApOwor
fQoKZGlmZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBiIC1yIDQw
ZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1Z2lucy9p
bnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9zdGF0aWMvanM9Ci9pcHl0aG9uLmpzCi0t
LSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRz
L2lweXRob24vc3RhdGljL2pzL2lweXRob24uanMKQEAgLTAsMCArMSw4NSBAQAorZnVuY3Rpb24g
bWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCl7CisgICAgdG9hc3RyLmluZm8oCisgICAgICAg
ICJBdXRvbWF0aWMgYXV0aG9yaXphdGlvbiBmYWlsZWQuIFlvdSBjYW4gbWFudWFsbHkgbG9naW4g
d2l0aDo8YnI+Ij0KICsgcGFzc3dvcmQgKyAiPGJyPjxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIu
Y29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93PQppa2kvQXV0b21hdGljLUF1dGhvcml6YXRp
b24tRmFpbGVkJyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCisgICAg
ICAgICJQbGVhc2UgbG9naW4gbWFudWFsbHkiLAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1
ZSwgJ3RpbWVPdXQnOiAxMDAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworfQor
CitmdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9jb25uZWN0aW9uKCl7CisgICAgdG9hc3RyLmVycm9y
KAorICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSVB5dGhvbiBOb3RlYm9vay4gUGxlYXNl
IGNvbnRhY3QgeW91ciBhZG1pbmk9CnN0cmF0b3IuIDxhIGhyZWY9M0QnaHR0cHM6Ly9naXRodWIu
Y29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtpL0NvdWxkLT0Kbm90LWNvbm5lY3QtdG8t
SVB5dGhvbi1Ob3RlYm9vaycgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4uLjwvYT4i
LAorICAgICJTZWN1cml0eSB3YXJuaW5nIiwKKyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUs
ICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rpc21pc3MnOiB0cnVlfQorICAgICk7Cit9CisKK2Z1
bmN0aW9uIG1lc3NhZ2Vfbm9fYXV0aCgpeworICAgIC8vIE5vIGxvbmdlciBhIHNlY3VyaXR5IGlz
c3VlLCBwcm94eSB2YWxpZGF0ZXMgR2FsYXh5IHNlc3Npb24gdG9rZW4uCisgICAgLyoKKyAgICB0
b2FzdHIud2FybmluZygKKyAgICAgICAgIklQeXRob24gTm90ZWJvb2sgd2FzIGx1bmNoZWQgd2l0
aG91dCBhdXRoZW50aWNhdGlvbi4gVGhpcyBpcyBhIHNlPQpjdXJpdHkgaXNzdWUuIDxhIGhyZWY9
M0QnaHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi93aWtpL0k9ClB5
dGhvbi1Ob3RlYm9vay13YXMtbHVuY2hlZC13aXRob3V0LWF1dGhlbnRpY2F0aW9uJyB0YXJnZXQ9
M0QnX2JsYW5rJz5Nb3JlID0KZGV0YWlscyAuLi48L2E+IiwKKyAgICAgICAgIlNlY3VyaXR5IHdh
cm5pbmciLAorICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwg
J3RhcFRvRGlzbWlzcyc6IGZhbHNlfQorICAgICk7CisgICAgKi8KK30KKworCisvKioKKyAqIExv
YWQgYW4gaW50ZXJhY3RpdmUgZW52aXJvbm1lbnQgKElFKSBmcm9tIGEgcmVtb3RlIFVSTAorICog
QHBhcmFtIHtTdHJpbmd9IHBhc3N3b3JkOiBwYXNzd29yZCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0
byB0aGUgcmVtb3RlIHI9CmVzb3VyY2UKKyAqIEBwYXJhbSB7U3RyaW5nfSBub3RlYm9va19sb2dp
bl91cmw6IFVSTCB0aGF0IHNob3VsZCBiZSBQT1NUZWQgdG8gZm9yIGxvPQpnaW4KKyAqIEBwYXJh
bSB7U3RyaW5nfSBub3RlYm9va19hY2Nlc3NfdXJsOiB0aGUgVVJMIGVtYmVkZWQgaW4gdGhlIHBh
Z2UgYW5kIGxvPQphZGVkCisgKgorICovCitmdW5jdGlvbiBsb2FkX25vdGVib29rKHBhc3N3b3Jk
LCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191cmwpeworICAgICQoIGRvY3Vt
ZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIFRlc3Qgbm90ZWJvb2tfbG9naW5f
dXJsIGZvciBhY2Nlc3NpYmlsaXR5LCBleGVjdXRpbmcgdGhlIGxvZ2luKz0KbG9hZCBmdW5jdGlv
biB3aGVuZXZlcgorICAgICAgICAvLyB3ZSd2ZSBzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIHRo
ZSBJRS4KKyAgICAgICAgdGVzdF9pZV9hdmFpbGFiaWxpdHkobm90ZWJvb2tfbG9naW5fdXJsLCBm
dW5jdGlvbigpeworICAgICAgICAgICAgX2hhbmRsZV9ub3RlYm9va19sb2FkaW5nKHBhc3N3b3Jk
LCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib289CmtfYWNjZXNzX3VybCk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCisvKioKKyAqIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgSUVzCisgKi8K
K2Z1bmN0aW9uIF9oYW5kbGVfbm90ZWJvb2tfbG9hZGluZyhwYXNzd29yZCwgbm90ZWJvb2tfbG9n
aW5fdXJsLCBub3RlYm9va19hPQpjY2Vzc191cmwpeworICAgIGlmICggaWVfcGFzc3dvcmRfYXV0
aCApIHsKKyAgICAgICAgLy8gTWFrZSBhbiBBSkFYIFBPU1QKKyAgICAgICAgJC5hamF4KHsKKyAg
ICAgICAgICAgIHR5cGU6ICJQT1NUIiwKKyAgICAgICAgICAgIC8vIHRvIHRoZSBMb2dpbiBVUkwK
KyAgICAgICAgICAgIHVybDogbm90ZWJvb2tfbG9naW5fdXJsLAorICAgICAgICAgICAgLy8gV2l0
aCBvdXIgcGFzc3dvcmQKKyAgICAgICAgICAgIGRhdGE6IHsKKyAgICAgICAgICAgICAgICAncGFz
c3dvcmQnOiBwYXNzd29yZAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHhockZpZWxkczog
eworICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZQorICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIC8vIElmIHRoYXQgaXMgc3VjY2Vzc2Z1bCwgbG9hZCB0aGUgbm90ZWJvb2sK
KyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgYXBwZW5k
X25vdGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVzLCBlcnJvcil7CisgICAgICAgICAgICAg
ICAgaWYoaWVfcGFzc3dvcmRfYXV0aCAmJiAhaWVfYXBhY2hlX3VybHMpeworICAgICAgICAgICAg
ICAgICAgICAvLyBGYWlsdXJlIGhhcHBlbnMgZHVlIHRvIENPUlMKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZV9mYWlsZWRfYXV0aChwYXNzd29yZCk7CisgICAgICAgICAgICAgICAgICAgIGFw
cGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKKyAgICAgICAgICAgICAgICB9ZWxz
ZXsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9mYWlsZWRfY29ubmVjdGlvbigpOworICAg
ICAgICAgICAgICAgICAgICAvLyBEbyB3ZSB3YW50IHRvIHRyeSBhbmQgbG9hZCB0aGUgbm90ZWJv
b2sgYW55d2F5PyBKdXM9CnQgaW4gY2FzZT8KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25v
dGVib29rKG5vdGVib29rX2FjY2Vzc191cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvLyBOb3QgdXNp
bmcgcGFzc3dvcmQgYXV0aCwganVzdCBlbWJlZCBpdCB0byBhdm9pZCBjb250ZW50LW9yaWdpbiA9
Cmlzc3Vlcy4KKyAgICAgICAgbWVzc2FnZV9ub19hdXRoKCk7CisgICAgICAgIGFwcGVuZF9ub3Rl
Ym9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKKyAgICB9Cit9CgpkaWZmIC1yIDNjNGYyZWMyMjI0
NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9
CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50
cy9pcHl0aG9uL3RlbXBsYXRlcz0KL2llLm1ha28KLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcv
cGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFr
bwpAQCAtMCwwICsxLDE2MiBAQAorPCUhCitpbXBvcnQgb3MKK2ltcG9ydCB5YW1sCitpbXBvcnQg
c2hsZXgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBoYXNobGliCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IENvbmZpZ1BhcnNlcgorCislPgorCis8JWRlZiBuYW1lPTNE
InNldF9pZChuYW1lKSI+Cis8JQorICAgICIiIgorICAgICAgICBJRXMgbXVzdCByZWdpc3RlciB0
aGVpciBuYW1lLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBjb25zdHJ1Y3Rpbmcgc3Q9CnJpbmdzCisK
KyAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbWV0aG9kIHN0b3JlcyBsb3RzIG9mIGNvbmZpZyBv
cHRpb25zIHdlIHdhbnQgdG8gPQphY2Nlc3MgZWxzZXdoZXJlLgorICAgICIiIgorICAgIHNlbGYu
YXR0ci52aXpfaWQgPTNEIG5hbWUKKyAgICBzZWxmLmF0dHIuaGlzdG9yeV9pZCA9M0QgdHJhbnMu
c2VjdXJpdHkuZW5jb2RlX2lkKCB0cmFucy5oaXN0b3J5LmlkICkKKyAgICBzZWxmLmF0dHIucHJv
eHlfcmVxdWVzdCA9M0QgdHJhbnMuYXBwLnByb3h5X21hbmFnZXIuc2V0dXBfcHJveHkoIHRyYW5z
PQogKQorICAgIHNlbGYuYXR0ci5wcm94eV91cmwgPTNEIHNlbGYuYXR0ci5wcm94eV9yZXF1ZXN0
WyAncHJveHlfdXJsJyBdCisgICAgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcgPTNEIHRyYW5zLmFw
cC5jb25maWcKKyAgICBzZWxmLmF0dHIuZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRoLmFic3Bh
dGgoc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuPQpyb290KQorICAgIHNlbGYuYXR0ci5yb290ID0z
RCBoLnVybF9mb3IoIi8iKQorICAgIHNlbGYuYXR0ci5hcHBfcm9vdCA9M0Qgc2VsZi5hdHRyLnJv
b3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy8iICsgc2U9CmxmLmF0dHIudml6X2lkICsgIi9z
dGF0aWMvIgorCisgICAgIyBTdG9yZSBvdXIgdGVtcGxhdGUgYW5kIGNvbmZpZ3VyYXRpb24gcGF0
aAorICAgIHNlbGYuYXR0ci5vdXJfY29uZmlnX2RpciA9M0Qgb3MucGF0aC5qb2luKHBsdWdpbl9w
YXRoLCAiY29uZmlnIikKKyAgICBzZWxmLmF0dHIub3VyX3RlbXBsYXRlX2RpciA9M0Qgb3MucGF0
aC5qb2luKHBsdWdpbl9wYXRoLCAidGVtcGxhdGVzIikKKyAgICBzZWxmLmF0dHIudml6X2NvbmZp
ZyA9M0QgQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoZGVmYXVsdF9kaWN0KQorICAgIHNl
bGYuYXR0ci52aXpfY29uZmlnLnJlYWQoIG9zLnBhdGguam9pbiggc2VsZi5hdHRyLm91cl9jb25m
aWdfZGlyLCBzZWw9CmYuYXR0ci52aXpfaWQgKyAiLmNvbmYiICkgKQorICAgICMgU3RvcmUgc29t
ZSB2YXJpYWJsZXMgd2Ugd2FudCBieSBkZWZhdWx0CisgICAgc2VsZi5hdHRyLlBBU1NXT1JEX0FV
VEggPTNEIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldGJvb2xlYW4oIm1haW4iLCAicD0KYXNzd29y
ZF9hdXRoIikKKyAgICBzZWxmLmF0dHIuQVBBQ0hFX1VSTFMgPTNEIHNlbGYuYXR0ci52aXpfY29u
ZmlnLmdldGJvb2xlYW4oIm1haW4iLCAiYXBhPQpjaGVfdXJscyIpCisgICAgc2VsZi5hdHRyLlNT
TF9VUkxTID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzbCIp
CisgICAgc2VsZi5hdHRyLlBPUlQgPTNEIHNlbGYuYXR0ci5wcm94eV9yZXF1ZXN0WyAncHJveGll
ZF9wb3J0JyBdCisgICAgc2VsZi5hdHRyLkhPU1QgPTNEIHJlcXVlc3QuaG9zdC5yc3BsaXQoJzon
LCAxKVswXQorJT4KKzwvJWRlZj4KKworPCVkZWYgbmFtZT0zRCJ3cml0ZV9jb25mX2ZpbGUob3V0
cHV0X2RpcmVjdG9yeSwgZXh0cmE9M0R7fSkiPgorPCUKKyAgICAiIiIKKyAgICAgICAgQnVpbGQg
dXAgYSBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzdGFuZGFyZCBmb3IgQUxMIElFcy4KKwor
ICAgICAgICBUT0RPOiByZXBsYWNlIGhhc2hlZCBwYXNzd29yZCB3aXRoIHBsYWludGV4dC4KKyAg
ICAiIiIKKyAgICBjb25mX2ZpbGUgPTNEIHsKKyAgICAgICAgJ2hpc3RvcnlfaWQnOiBzZWxmLmF0
dHIuaGlzdG9yeV9pZCwKKyAgICAgICAgJ2FwaV9rZXknOiBnZXRfYXBpX2tleSgpLAorICAgICAg
ICAncmVtb3RlX2hvc3QnOiByZXF1ZXN0LnJlbW90ZV9hZGRyLAorICAgICAgICAnZG9ja2VyX3Bv
cnQnOiBzZWxmLmF0dHIuUE9SVCwKKyAgICAgICAgJ2NvcnNfb3JpZ2luJzogcmVxdWVzdC5ob3N0
X3VybCwKKyAgICB9CisKKyAgICBpZiBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5nYWxheHlfaW5m
cmFzdHJ1Y3R1cmVfdXJsX3NldDoKKyAgICAgICAgY29uZl9maWxlWydnYWxheHlfdXJsJ10gPTNE
IHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLmdhbGF4eV9pbmZyYXN0PQpydWN0dXJlX3VybC5yc3Ry
aXAoJy8nKSArICcvJworICAgIGVsc2U6CisgICAgICAgIGNvbmZfZmlsZVsnZ2FsYXh5X3VybCdd
ID0zRCByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8nKSArID0KJy8nCisgICAgICAg
IGNvbmZfZmlsZVsnZ2FsYXh5X3Bhc3Rlcl9wb3J0J10gPTNEIHNlbGYuYXR0ci5nYWxheHlfY29u
ZmlnLmd1ZXNzXz0KZ2FsYXh5X3BvcnQoKQorCisgICAgaWYgc2VsZi5hdHRyLlBBU1NXT1JEX0FV
VEg6CisgICAgICAgICMgR2VuZXJhdGUgYSByYW5kb20gcGFzc3dvcmQgKyBzYWx0CisgICAgICAg
IG5vdGVib29rX3B3X3NhbHQgPTNEIHNlbGYuZ2VuZXJhdGVfcGFzc3dvcmQobGVuZ3RoPTNEMTIp
CisgICAgICAgIG5vdGVib29rX3B3ID0zRCBzZWxmLmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0z
RDI0KQorICAgICAgICBtID0zRCBoYXNobGliLnNoYTEoKQorICAgICAgICBtLnVwZGF0ZSggbm90
ZWJvb2tfcHcgKyBub3RlYm9va19wd19zYWx0ICkKKyAgICAgICAgY29uZl9maWxlWydub3RlYm9v
a19wYXNzd29yZCddID0zRCAnc2hhMTolczolcycgJSAobm90ZWJvb2tfcHdfc2FsPQp0LCBtLmhl
eGRpZ2VzdCgpKQorICAgICAgICAjIFNob3VsZCB3ZSB1c2UgcGFzc3dvcmQgYmFzZWQgY29ubmVj
dGlvbiBvciAiZGVmYXVsdCIgY29ubmVjdGlvbiA9CnN0eWxlIGluIGdhbGF4eQorICAgIGVsc2U6
CisgICAgICAgIG5vdGVib29rX3B3ID0zRCAiTm9uZSIKKworICAgICMgU29tZSB3aWxsIG5lZWQg
dG8gcGFzcyBleHRyYSBkYXRhCisgICAgZm9yIGV4dHJhX2tleSBpbiBleHRyYToKKyAgICAgICAg
Y29uZl9maWxlW2V4dHJhX2tleV0gPTNEIGV4dHJhW2V4dHJhX2tleV0KKworICAgIHNlbGYuYXR0
ci5ub3RlYm9va19wdyA9M0Qgbm90ZWJvb2tfcHcKKyAgICAjIFdyaXRlIGNvbmYKKyAgICB3aXRo
IG9wZW4oIG9zLnBhdGguam9pbiggb3V0cHV0X2RpcmVjdG9yeSwgJ2NvbmYueWFtbCcgKSwgJ3di
JyApIGFzIGhhPQpuZGxlOgorICAgICAgICBoYW5kbGUud3JpdGUoIHlhbWwuZHVtcChjb25mX2Zp
bGUsIGRlZmF1bHRfZmxvd19zdHlsZT0zREZhbHNlKSApCisKKyU+Cis8LyVkZWY+CisKKzwlZGVm
IG5hbWU9M0QiZ2VuZXJhdGVfaGV4KGxlbmd0aCkiPgorPCUKKyAgICAiIiIKKyAgICAgICAgR2Vu
ZXJhdGUgYSBoZXggc3RyaW5nCisgICAgIiIiCisgICAgcmV0dXJuICcnLmpvaW4ocmFuZG9tLmNo
b2ljZSgnMDEyMzQ1Njc4OWFiY2RlZicpIGZvciBfIGluIHJhbmdlKGxlbmd0aD0KKSkKKyU+Cis8
LyVkZWY+CisKKzwlZGVmIG5hbWU9M0QiZ2VuZXJhdGVfcGFzc3dvcmQobGVuZ3RoKSI+Cis8JQor
ICAgICIiIgorICAgICAgICBHZW5lcmF0ZSBhIHJhbmRvbSBhbHBoYW51bWVyaWMgcGFzc3dvcmQK
KyAgICAiIiIKKyAgICByZXR1cm4gJycuam9pbihyYW5kb20uY2hvaWNlKCcwMTIzNDU2Nzg5YWJj
ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonKSBmPQpvciBfIGluIHJhbmdlKGxlbmd0aCkpCislPgor
PC8lZGVmPgorCis8JWRlZiBuYW1lPTNEImphdmFzY3JpcHRfYm9vbGVhbihweXRob25fYm9vbGVh
bikiPgorPCUKKyAgICAiIiIKKyAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY29udmVy
dCBib29sZWFuIGZvciB1c2UgaW4gSlMKKyAgICAiIiIKKyAgICBpZiBweXRob25fYm9vbGVhbjoK
KyAgICAgICAgcmV0dXJuICJ0cnVlIjsKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gImZhbHNl
IgorJT4KKzwvJWRlZj4KKworCis8JWRlZiBuYW1lPTNEInVybF90ZW1wbGF0ZSh1cmxfdGVtcGxh
dGUpIj4KKzwlCisgICAgIiIiCisgICAgICAgIFByb2Nlc3MgYSBVUkwgdGVtcGxhdGUKKworICAg
ICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB2YXJpYWJsZXMgYWNjZXNzaWJsZSB0byB0aGUgdXNlcjoK
KworICAgICAgICAgICAgLSAke1BST1hZX1VSTH0gd2lsbCBiZSByZXBsYWNlZCB3aXRoIGR5bmFt
aWNhbGx5IGNyZWF0ZSBwcm94eQorICAgICAgICAgICAgLSAke1BPUlR9IHdpbGwgYmUgcmVwbGFj
ZWQgd2l0aCB0aGUgcG9ydCB0aGUgZG9ja2VyIGltYWdlIGlzIGE9CnR0YWNoZWQgdG8KKyAgICAi
IiIKKyAgICB1cmwgPTNEIHVybF90ZW1wbGF0ZS5yZXBsYWNlKCcke1BST1hZX1VSTH0nLCBzdHIo
c2VsZi5hdHRyLnByb3h5X3VybCkpPQogXAorICAgICAgICAgICAgLnJlcGxhY2UoJyR7UE9SVH0n
LCBzdHIoc2VsZi5hdHRyLlBPUlQpKQorICAgIHJldHVybiB1cmwKKyU+Cis8LyVkZWY+CisKKwor
PCVkZWYgbmFtZT0zRCJkb2NrZXJfY21kKHRlbXBfZGlyKSI+Cis8JQorICAgICIiIgorICAgICAg
ICBHZW5lcmF0ZSBhbmQgcmV0dXJuIHRoZSBkb2NrZXIgY29tbWFuZCB0byBleGVjdXRlCisgICAg
IiIiCisgICAgcmV0dXJuICclcyBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOiVzIC12
ICIlczovaW1wb3J0LyIgJXMnICUgXAorICAgICAgICAoc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0
KCJkb2NrZXIiLCAiY29tbWFuZCIpLCBzZWxmLmF0dHIuUE9SVCwgc2U9CmxmLmF0dHIuZG9ja2Vy
X3BvcnQsCisgICAgICAgICB0ZW1wX2Rpciwgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0KCJkb2Nr
ZXIiLCAiaW1hZ2UiKSkKKyU+Cis8LyVkZWY+CisKKworPCVkZWYgbmFtZT0zRCJkZWZhdWx0X2ph
dmFzY3JpcHRfdmFyaWFibGVzKCkiPgorLy8gR2xvYmFscworaWVfcGFzc3dvcmRfYXV0aCA9M0Qg
JHsgc2VsZi5qYXZhc2NyaXB0X2Jvb2xlYW4oc2VsZi5hdHRyLlBBU1NXT1JEX0FVVEgpIH07Citp
ZV9hcGFjaGVfdXJscyA9M0QgJHsgc2VsZi5qYXZhc2NyaXB0X2Jvb2xlYW4oc2VsZi5hdHRyLkFQ
QUNIRV9VUkxTKSB9OworaWVfcGFzc3dvcmQgPTNEICckeyBzZWxmLmF0dHIubm90ZWJvb2tfcHcg
fSc7Cit2YXIgZ2FsYXh5X3Jvb3QgPTNEICckeyBzZWxmLmF0dHIucm9vdCB9JzsKK3ZhciBhcHBf
cm9vdCA9M0QgJyR7IHNlbGYuYXR0ci5hcHBfcm9vdCB9JzsKKzwvJWRlZj4KKworCis8JWRlZiBu
YW1lPTNEImxvYWRfZGVmYXVsdF9qcygpIj4KKyR7aC5jc3MoICdiYXNlJyApIH0KKyR7aC5qcygg
J2xpYnMvanF1ZXJ5L2pxdWVyeScsCisgICAgICAgICdsaWJzL3RvYXN0cicsCisgICAgICAgICds
aWJzL3JlcXVpcmUnKX0KKzwvJWRlZj4KCmRpZmYgLXIgM2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAw
NjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4
ODBhOWIgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vdGVt
cGxhdGVzPQovaXB5dGhvbi5tYWtvCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMv
aW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbwpA
QCAtMCwwICsxLDY0IEBACis8JW5hbWVzcGFjZSBmaWxlPTNEImllLm1ha28iIG5hbWU9M0QiaWUi
Lz4KKzwlCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0
IHN1YnByb2Nlc3MKKworIyBTZXRzIElEIGFuZCBzZXRzIHVwIGEgbG90IG9mIG90aGVyIHZhcmlh
YmxlcworaWUuc2V0X2lkKCJpcHl0aG9uIikKK2llLmF0dHIuZG9ja2VyX3BvcnQgPTNEIDY3ODkK
KyMgQ3JlYXRlIHRlbXBkaXIgaW4gZ2FsYXh5Cit0ZW1wX2RpciA9M0Qgb3MucGF0aC5hYnNwYXRo
KCB0ZW1wZmlsZS5ta2R0ZW1wKCkgKQorIyBXcml0ZSBvdXQgY29uZiBmaWxlLi4ubmVlZHMgd29y
aworaWUud3JpdGVfY29uZl9maWxlKHRlbXBfZGlyKQorCisjIyBJUHl0aG9uIFNwZWNpZmljCisj
IFByZXBhcmUgYW4gZW1wdHkgbm90ZWJvb2sKK25vdGVib29rX2lkID0zRCBpZS5nZW5lcmF0ZV9o
ZXgoNjQpCit3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggaWUuYXR0ci5vdXJfdGVtcGxhdGVfZGly
LCAnbm90ZWJvb2suaXB5bmInICksICdyJz0KKSBhcyBuYl9oYW5kbGU6CisgICAgZW1wdHlfbmIg
PTNEIG5iX2hhbmRsZS5yZWFkKCkKK2VtcHR5X25iID0zRCBlbXB0eV9uYiAlIG5vdGVib29rX2lk
CisjIENvcHkgb3ZlciBkZWZhdWx0IG5vdGVib29rLCB1bmxlc3MgdGhlIGRhdGFzZXQgdGhpcyB2
aXogaXMgcnVubmluZyBvbiBpcz0KIGEgbm90ZWJvb2sKK2VtcHR5X25iX3BhdGggPTNEIG9zLnBh
dGguam9pbih0ZW1wX2RpciwgJ2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5iJykKK2lmIGhk
YS5kYXRhdHlwZS5fX2NsYXNzX18uX19uYW1lX18gIT0zRCAiSXB5bmIiOgorICAgIHdpdGggb3Bl
biggZW1wdHlfbmJfcGF0aCwgJ3crJyApIGFzIGhhbmRsZToKKyAgICAgICAgaGFuZGxlLndyaXRl
KCBlbXB0eV9uYiApCitlbHNlOgorICAgIHNodXRpbC5jb3B5KCBoZGEuZmlsZV9uYW1lLCBlbXB0
eV9uYl9wYXRoICkKKworCisjIyBHZW5lcmFsIElFIHNwZWNpZmljCisjIEFjY2VzcyBVUkxzIGZv
ciB0aGUgbm90ZWJvb2sgZnJvbSB3aXRoaW4gZ2FsYXh5Lgorbm90ZWJvb2tfYWNjZXNzX3VybCA9
M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1hZX1VSTH0vaXB5dGhvbi8ke1BPUlR9L25vdGU9CmJv
b2tzL2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5iJykKK25vdGVib29rX2xvZ2luX3VybCA9
M0QgaWUudXJsX3RlbXBsYXRlKCcke1BST1hZX1VSTH0vaXB5dGhvbi8ke1BPUlR9L2xvZ2luPQo/
bmV4dD0zRCUyRmlweXRob24lMkYke1BPUlR9JTJGdHJlZScpCisKK2RvY2tlcl9jbWQgPTNEIGll
LmRvY2tlcl9jbWQodGVtcF9kaXIpCitzdWJwcm9jZXNzLmNhbGwoZG9ja2VyX2NtZCwgc2hlbGw9
M0RUcnVlKQorJT4KKzxodG1sPgorPGhlYWQ+CiskeyBpZS5sb2FkX2RlZmF1bHRfanMoKSB9Cis8
L2hlYWQ+Cis8Ym9keT4KKworPHNjcmlwdCB0eXBlPTNEInRleHQvamF2YXNjcmlwdCI+CiskeyBp
ZS5kZWZhdWx0X2phdmFzY3JpcHRfdmFyaWFibGVzKCkgfQordmFyIG5vdGVib29rX2xvZ2luX3Vy
bCA9M0QgJyR7IG5vdGVib29rX2xvZ2luX3VybCB9JzsKK3ZhciBub3RlYm9va19hY2Nlc3NfdXJs
ID0zRCAnJHsgbm90ZWJvb2tfYWNjZXNzX3VybCB9JzsKKy8vIExvYWQgbm90ZWJvb2sKKworcmVx
dWlyZS5jb25maWcoeworICAgIGJhc2VVcmw6IGFwcF9yb290LAorICAgIHBhdGhzOiB7CisgICAg
ICAgICJwbHVnaW4iIDogYXBwX3Jvb3QgKyAianMvIiwKKyAgICB9LAorfSk7CityZXF1aXJlanMo
WydwbHVnaW4vaWUnLCAncGx1Z2luL2lweXRob24nXSwgZnVuY3Rpb24oKXsKKyAgICBsb2FkX25v
dGVib29rKGllX3Bhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29rX2FjY2Vzc191
cmwpOworfSk7Cis8L3NjcmlwdD4KKzxkaXYgaWQ9M0QibWFpbiIgd2lkdGg9M0QiMTAwJSIgaGVp
Z2h0PTNEIjEwMCUiPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CgpkaWZmIC1yIDNjNGYyZWMy
MjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdk
M2M9CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25t
ZW50cy9pcHl0aG9uL3RlbXBsYXRlcz0KL25vdGVib29rLmlweW5iCi0tLSAvZGV2L251bGwKKysr
IGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vdGVtcGxh
dGVzL25vdGVib29rLmlwPQp5bmIKQEAgLTAsMCArMSw0MyBAQAoreworICJtZXRhZGF0YSI6IHsK
KyAgIm5hbWUiOiAiIiwKKyAgInNpZ25hdHVyZSI6ICJzaGEyNTY6JXMiCisgfSwKKyAibmJmb3Jt
YXQiOiAzLAorICJuYmZvcm1hdF9taW5vciI6IDAsCisgIndvcmtzaGVldHMiOiBbCisgIHsKKyAg
ICJjZWxscyI6IFsKKyAgICB7CisgICAgICJjZWxsX3R5cGUiOiAiaGVhZGluZyIsCisgICAgICJs
ZXZlbCI6IDEsCisgICAgICJtZXRhZGF0YSI6IHt9LAorICAgICAic291cmNlIjogWworICAgICAg
IldlbGNvbWUgdG8gdGhlIGludGVyYWN0aXZlIEdhbGF4eSBJUHl0aG9uIE5vdGVib29rLiIKKyAg
ICAgXQorICAgIH0sCisgICAgeworICAgICAiY2VsbF90eXBlIjogIm1hcmtkb3duIiwKKyAgICAg
Im1ldGFkYXRhIjoge30sCisgICAgICJzb3VyY2UiOiBbCisgICAgICAiWW91IGNhbiBhY2Nlc3Mg
eW91ciBkYXRhIHZpYSB0aGUgZGF0YXNldCBudW1iZXIuIEZvciBleGFtcGxlLCBgYGhhbj0KZGxl
ID0zRCBnZXQoNDIpYGAuIiwKKyAgICAgICJUbyBzYXZlIGRhdGEsIHdyaXRlIHlvdXIgZGF0YSB0
byBhIGZpbGUsIGFuZCB0aGVuIGNhbGwgYGBwdXQoJ2ZpbGVuPQphbWUudHh0JylgYC4gVGhlIGRh
dGFzZXQgd2lsbCB0aGVuIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGdhbGF4eSBoaXN0b3J5LiIsCisg
ICAgICAiTm90ZWJvb2tzIGNhbiBiZSBzYXZlZCB0byBHYWxheHkgYnkgY2xpY2tpbmcgdGhlIGxh
cmdlIGdyZWVuIGJ1dHRvbj0KIGF0IHRoZSB0b3AgcmlnaHQgb2YgdGhlIElQeXRob24gaW50ZXJm
YWNlLjxicj4iLAorICAgICAgIk1vcmUgaGVscCBhbmQgaW5mb3JtYXRpb25zIGNhbiBiZSBmb3Vu
ZCBvbiB0aGUgcHJvamVjdCBbd2Vic2l0ZV0oaHQ9CnRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5n
L2dhbGF4eS1pcHl0aG9uKS4iCisgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgImNlbGxfdHlw
ZSI6ICJjb2RlIiwKKyAgICAgImNvbGxhcHNlZCI6IGZhbHNlLAorICAgICAiaW5wdXQiOiBbCisg
ICAgIF0sCisgICAgICJsYW5ndWFnZSI6ICJweXRob24iLAorICAgICAibWV0YWRhdGEiOiB7fSwK
KyAgICAgIm91dHB1dHMiOiBbXSwKKyAgICAgInByb21wdF9udW1iZXIiOiAxCisgICAgfQorICAg
XSwKKyAgICJtZXRhZGF0YSI6IHt9CisgIH0KKyBdCit9CgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2
MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5
NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vLmdp
dGlnbm9yZQotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uLy5naXRp
Z25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0jIEJ5dGUtY29tcGlsZWQgLyBv
cHRpbWl6ZWQgLyBETEwgZmlsZXMKLV9fcHljYWNoZV9fLwotKi5weVtjb2RdCi0KLSMgQyBleHRl
bnNpb25zCi0qLnNvCi0KLSMgRGlzdHJpYnV0aW9uIC8gcGFja2FnaW5nCi0uUHl0aG9uCi1lbnYv
Ci1iaW4vCi1idWlsZC8KLWRldmVsb3AtZWdncy8KLWRpc3QvCi1lZ2dzLwotbGliLwotbGliNjQv
Ci1wYXJ0cy8KLXNkaXN0LwotdmFyLwotKi5lZ2ctaW5mby8KLS5pbnN0YWxsZWQuY2ZnCi0qLmVn
ZwotCi0jIEluc3RhbGxlciBsb2dzCi1waXAtbG9nLnR4dAotcGlwLWRlbGV0ZS10aGlzLWRpcmVj
dG9yeS50eHQKLQotIyBVbml0IHRlc3QgLyBjb3ZlcmFnZSByZXBvcnRzCi1odG1sY292LwotLnRv
eC8KLS5jb3ZlcmFnZQotLmNhY2hlCi1ub3NldGVzdHMueG1sCi1jb3ZlcmFnZS54bWwKLQotIyBU
cmFuc2xhdGlvbnMKLSoubW8KLQotIyBNciBEZXZlbG9wZXIKLS5tci5kZXZlbG9wZXIuY2ZnCi0u
cHJvamVjdAotLnB5ZGV2cHJvamVjdAotCi0jIFJvcGUKLS5yb3BlcHJvamVjdAotCi0jIERqYW5n
byBzdHVmZjoKLSoubG9nCi0qLnBvdAotCi0jIFNwaGlueCBkb2N1bWVudGF0aW9uCi1kb2NzL19i
dWlsZC8KLQoKZGlmZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBi
IC1yIDQwZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL0lOU1RBTEwubWQKLS0tIGEvY29uZmlnL3BsdWdp
bnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9JTlNUQUxMLm1kCisrKyAvZGV2L251bGwKQEAgLTEs
NjMgKzAsMCBAQAotIyBJbnN0YWxsYXRpb24KLQotV2UndmUgZGV2ZWxvcGVkIHRoZSB0ZW1wbGF0
ZXMgYW5kIGNvbnRhaW5lcnMgc3VjaCB0aGF0IHRoZXkgY2FuIGJlIHJ1biB0aHI9Cm91Z2ggYW4g
QXBhY2hlIHByb3h5IHVzaW5nCi1TU0wuIFRoaXMgcmVxdWlyZXMgc29tZSBub24tdHJpdmlhbCBh
cGFjaGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0LgotCi0jIyBSZXF1aXJlbWVudHMKLQotICog
W21vZF9oZWFkZXJzXShodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX2hl
YWRlcnMuaHRtbCkKLSAqIFttb2RfcHJveHldKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3Mv
Mi40L21vZC9tb2RfcHJveHkuaHRtbCkKLSAqIFttb2RfcHJveHlfaHR0cF0oaHR0cDovL2h0dHBk
LmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9wcm94eV9odHRwLmh0PQptbCkKLSAqIFttb2Rf
cHJveHlfd3N0dW5uZWxdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2Rf
cHJveHlfd3N0PQp1bm5lbC5odG1sKQotICogW21vZF9yZXdyaXRlXShodHRwOi8vaHR0cGQuYXBh
Y2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX3Jld3JpdGUuaHRtbCkKLSAqIFttb2Rfc2V0ZW52aWZd
KGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2Rfc2V0ZW52aWYuaHRtbCkK
LQotSVB5dGhvbiBtYWtlcyB1c2Ugb2YgV2ViU29ja2V0cyB3aGljaCB3ZSBuZWVkIHRvIHByb3h5
IGluIGFwYWNoZS4gU3VwcG9ydCA9CndhcyBhZGRlZCB0byBgYXBhY2hlMi40YAotZm9yIHRoaXMs
IHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBgVWJ1bnR1IDE0LjA0YC4gVGhlcmUgYXJlIHR1dG9yaWFs
cyBvbiB0aGU9CiBpbnRlcm5ldCBmb3IgYmFja3BvcnRpbmcKLXRoZSB3ZWJzb2NrZXRzIG1vZHVs
ZSwgYW5kIGluc3RhbGxpbmcgYGFwYWNoZTIuNGAgUFBBcy4KLQotIyMgQXBhY2hlIENvbmZpZ3Vy
YXRpb24KLQotSGVyZSBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbgotCi1gYGBhcGFjaGUK
LVJld3JpdGVFbmdpbmUgT24KLVNldEVudklmIFJlcXVlc3RfVVJJICIvaXB5dGhvbi8oWzAtOV0r
KS9hcGkva2VybmVscy8iIERPQ0tFUl9QT1JUPTNEJDEKLVJld3JpdGVSdWxlICAgICBeL2lweXRo
b24vKFswLTldKykvYXBpL2tlcm5lbHMvKC4qKSQgICB3czovLzEyNy4wLjAuMTokMS9pPQpweXRo
b24vJDEvYXBpL2tlcm5lbHMvJDIgW1AsTF0KLVJld3JpdGVSdWxlICAgICBeL2lweXRob24vKFsw
LTldKykvKC4qKSQgICAgICAgICAgICAgaHR0cDovL2xvY2FsaG9zdDokMS9pPQpweXRob24vJDEv
JDIgW1AsTF0KLTxMb2NhdGlvbiAvaXB5dGhvbi8+Ci0gICAgICAgICMgc3Bvb2YgaGVhZGVycyB0
byBtYWtlIG5vdGVwYWQgYWNjZXB0IHRoZSByZXF1ZXN0IGFzIGNvbWluZyBmcm9tID0KdGhlIHNh
bWUgb3JpZ2luCi0gICAgICAgIEhlYWRlciBzZXQgT3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOiV7
RE9DS0VSX1BPUlR9ZSIKLSAgICAgICAgUmVxdWVzdEhlYWRlciBzZXQgT3JpZ2luICJodHRwOi8v
MTI3LjAuMC4xOiV7RE9DS0VSX1BPUlR9ZSIKLTwvTG9jYXRpb24+Ci08L1ZpcnR1YWxIb3N0Pgot
YGBgCi0KLVdlJ2xsIHN0ZXAgdGhyb3VnaCBsaW5lLWJ5LWxpbmUgZm9yIGNsYXJpdHkuCi0KLWBg
YGFwYWNoZQotU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9pcHl0aG9uLyhbMC05XSspL2FwaS9rZXJu
ZWxzLyIgRE9DS0VSX1BPUlQ9M0QkMQotYGBgCi0KLUhlcmUgd2UgY2hlY2sgdGhlIGBSZXF1ZXN0
X1VSSWAgZm9yIHRoZSBwcmVzZW5jZSBmb3IgdGhlIGtlcm5lbCByZXF1ZXN0LiBXPQplIGRvIHRo
aXMgb25seSBmb3IgdGhlIGBhcGkva2VybmVsYCBzdWJjYWxsLCBhcyB0aGUgb25seSBjb25maWd1
cmF0aW9uIHdoaWM9CmggbmVlZHMgYWNjZXNzIHRvIGBET0NLRVJfUE9SVGAgaXMga2VybmVsIGNh
bGxzLgotCi1gYGBhcGFjaGUKLVJld3JpdGVSdWxlIF4vaXB5dGhvbi8oWzAtOV0rKS9hcGkva2Vy
bmVscy8oLiopJCAgIHdzOi8vMTI3LjAuMC4xOiQxL2lweXRoPQpvbi8kMS9hcGkva2VybmVscy8k
MiBbUCxMXQotUmV3cml0ZVJ1bGUgXi9pcHl0aG9uLyhbMC05XSspLyguKikkICAgICAgICAgICAg
IGh0dHA6Ly9sb2NhbGhvc3Q6JDEvaXB5dGg9Cm9uLyQxLyQyIFtQLExdCi1gYGAKLQotVGhlc2Ug
dHdvIHJ1bGVzIHByb3h5IGBeL2lweXRob24vYCByZXF1ZXN0cyB0byB0aGVpciBjb3JyZWN0IGxv
Y2F0aW9ucy4gQVA9CkkgcmVxdWVzdHMgZm9yIHRoZSBJUHl0aG9uIGtlcm5lbCBhcmUgcm91dGVk
IHRocm91Z2ggdGhlIHdzdHVubmVsIChXZWJTb2NrZT0KdCkgcHJveHksIHdoaWxlIGFsbCBvdGhl
ciByZXF1ZXN0cyBnbyB0aHJvdWdoIEhUVFAuIFRoZXJlIGFyZSBtb2RpZmllZCBsaXN0PQplZCBh
ZnRlciBib3RoLCBgW1AsTF1gLiBgUGAgc3BlY2lmaWVzIGEgcHJveHksIGFuZCBgTGAgc3BlY2lm
aWVzIHRoaXMgaXMgdGg9CmUgbGFzdCBydWxlLCB0byBwcmV2ZW50IHRoZSBzZWNvbmQgcmV3cml0
ZSBzdGF0ZW1lbnQgZnJvbSBtYXRjaGluZyBhbGwga2Vybj0KZWwgY2FsbHMuCi0KLWBgYGFwYWNo
ZQotPExvY2F0aW9uIC9pcHl0aG9uLz4KLSAgICAgICAgIyBzcG9vZiBoZWFkZXJzIHRvIG1ha2Ug
bm90ZXBhZCBhY2NlcHQgdGhlIHJlcXVlc3QgYXMgY29taW5nIGZyb20gPQp0aGUgc2FtZSBvcmln
aW4KLSAgICAgICAgSGVhZGVyIHNldCBPcmlnaW4gImh0dHA6Ly8xMjcuMC4wLjE6JXtET0NLRVJf
UE9SVH1lIgotICAgICAgICBSZXF1ZXN0SGVhZGVyIHNldCBPcmlnaW4gImh0dHA6Ly8xMjcuMC4w
LjE6JXtET0NLRVJfUE9SVH1lIgotPC9Mb2NhdGlvbj4KLWBgYAotCi1UaGUgV2ViU29ja2V0IHNl
cnZlciBpbiBJUHl0aG9uIHBheXMgYXR0ZW50aW9uIHRvIENyb3NzLU9yaWdpbi1SZXF1ZXN0cyBh
bj0KZCB3aWxsIHRocm91Z2ggdXAgYSA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yIChpbiBkb2Nr
ZXIpIGlmIHlvdSBhdHRlbXB0IHRvPQogc2VuZCBpdCBiYWQgZGF0YS4gVGh1cywgd2UgdXNlIHRo
ZSBleHRyYWN0ZWQgcG9ydCBudW1iZXIgZnJvbSB0aGUgZWFybGllciA9CmBTZXRFbnZJZmAgcmVx
dWVzdCBpbiBvcmRlciB0byBvYnRhaW4gdGhlIHBvcnQgdGhhdCBJUHl0aG9uIHdpbGwgYWN0dWFs
bHkgcj0KZWNlaXZlIGNvbm5lY3Rpb25zIGZyb20uCi0KLSMjIE5naW54IENvbmZpZ3VyYXRpb24K
LQotUGxlYXNlIHN1Ym1pdCBpdCBpZiB5b3Ugd3JpdGUgaXQhCgpkaWZmIC1yIDNjNGYyZWMyMjI0
NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9
CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24v
TElDRU5TRQotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL0xJQ0VO
U0UKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi1UaGUgTUlUIExpY2Vuc2UgKE1JVCkK
LQotQ29weXJpZ2h0IChjKSAyMDE0IEJqPUMzPUI2cm4gR3I9QzM9QkNuaW5nCi0KLVBlcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp
bmluZyBhIGNvPQpweQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGQ9CmVhbAotaW4gdGhlIFNvZnR3YXJlIHdp
dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2g9
CnRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1
YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu
PQogYWxsCi1jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgot
Ci1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK
LUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZSPQpPTSwKLU9VVCBPRiBPUiBJTiBDT05O
RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4g
PQpUSEUKLVNPRlRXQVJFLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYgLXIgM2M0
ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0
NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMv
aXB5dGhvbi9SRUFETUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5
dGhvbi9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotR2FsYXh5IElQ
eXRob24gSW50ZWdyYXRpb24KLT0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0KPTNEPTNECi0KLVRoaXMgcHJvamVj
dHMgaW50ZWdyYXRlcyBbSVB5dGhvbiBOb3RlYm9va10oaHR0cDovL2lweXRob24ub3JnL25vdGVi
b29rLmh0PQptbCksIGEgaW50ZXJhY3RpdmUgY29tcHV0YXRpb25hbCBlbnZpcm9ubWVudCwgd2l0
aCBbR2FsYXh5XShodHRwOi8vZ2FsYXh5cHI9Cm9qZWN0Lm9yZykuPTIwCi1XZSBob3BlIHRvIG1h
a2UgR2FsYXh5IG1vcmUgYXR0cmFjdGl2ZSBmb3IgYmlvaW5mb3JtYXRpY2lhbnMgYW5kIHRvIGNv
bWJpbj0KZSB0aGUgcG93ZXIgb2YgYm90aCBwcm9qZWN0cyB0byB1bmxvY2sgY3JlYXRpdml0eSBp
biBkYXRhIGFuYWx5c2lzLCBidXQgYWxzPQpvIGluIE5leHQtR2VuZXJhdGlvbi1UcmFpbmluZyBj
b3Vyc2VzLgotCi0hW0lQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29u
dGVudC5jb20vYmdydWVuaW5nL2dhbGF4eS1pcD0KeXRob24vbWFzdGVyL3N0YXRpYy9pbWFnZXMv
aXB5dGhvbl9pbl9nYWxheHkucG5nKQotCi1bIVtJTUFHRSBBTFQgVEVYVCBIRVJFXShodHRwOi8v
aW1nLnlvdXR1YmUuY29tL3ZpL2pRRHlUdVlubjFrLzAuanBnKV0oaHR0cD0KOi8vd3d3LnlvdXR1
YmUuY29tL3dhdGNoP3Y9M0RqUUR5VHVZbm4xaykKLQotCi1SZXF1aXJlbWVudHMKLT0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAotCi1UaGUgb25seSByZXF1aXJlbWVudCBpcyB0
byBoYXZlIFtEb2NrZXJdKGh0dHBzOi8vd3d3LmRvY2tlci5jb20pIGluc3RhbGxlZD0KIG9uIHlv
dXIgc3lzdGVtLgotRm9yIGEgZGV0YWlsZWQgaW5zdHJ1Y3Rpb24gaG93IHRvIGluc3RhbGwgZG9j
a2VyLCBwbGVhc2UgbG9vayBhdCB0aGUgW2RvY2s9CmVyIHdlYnNpdGVdKGh0dHBzOi8vZG9jcy5k
b2NrZXIuY29tL2luc3RhbGxhdGlvbi8pLgotCi0KLUluc3RhbGxhdGlvbgotPTNEPTNEPTNEPTNE
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECi0KLUNvcHkgdGhlIHRlbXBsYXRlIGFuZCBjb25maWcg
Zm9sZGVyIGluIHlvdXIgYGBHQUxBWFlfUk9PVC9jb25maWcvcGx1Z2lucy92PQppc3VhbGl6YXRp
b25zL2lweXRob25gYCBmb2xkZXIgYW5kIHJlc3RhcnQgR2FsYXh5LgotQWx0ZXJuYXRpdmVseSwg
eW91IGNhbiBjbG9uZSB0aGUgcmVwb3NpdG9yeSB3aXRoCi0KLWBgYGJhc2gKLWdpdCBjbG9uZSBo
dHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uLmdpdCBjb25maWcvcGx1
Z2lucy92PQppc3VhbGl6YXRpb25zL2lweXRob24KLWBgYGAKLQotVGhlIElQeXRob24gdmlzdWFs
aXNhdGlvbiBvcHRpb24gc2hvdWxkIGJlIHZpc2libGUgbmV4dCB0byB0aGUgdXN1YWwgQ2hhcnQ9
CnMgb3IgVHJhY2tzdGVyIG9wdGlvbnMgaW4geW91ciB2aXN1YWxpc2F0aW9uIG1lbnVlLgotCi0h
W1N0YXJ0aW5nIElQeXRob24gaW4gR2FsYXh5XShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVu
dC5jb20vYmdydWVuaW5nLz0KZ2FsYXh5LWlweXRob24vbWFzdGVyL3N0YXRpYy9pbWFnZXMvc3Rh
cnRfaXB5dGhvbi5wbmcpCi0KLQotRmVhdHVyZXMKLT0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAot
Ci0gKiBydW4gSVB5dGhvbiBkaXJlY3RseSBpbiB5b3VyIEdhbGF4eSBtYWluIHdpbmRvdyBvciBp
biBHYWxheHkgU2NyYXRjaGJvb2sKLSAqIGNvbXBsZXRlIGVuY2Fwc3VsYXRlZCBweXRob24gZW52
aXJvbm1lbnQgd2l0aCBtYXRwbG90bGliLCBwYW5kYXMgYW5kIGZyPQppZW5kcyBpbnN0YWxsZWQK
LSAqIGFjY2VzcyB0byBhbGwgZGF0YXNldHMgZnJvbSB5b3VyIGN1cnJlbnQgaGlzdG9yeSB2aWEg
cHJlLWRlZmluZWQgSVB5dGhvPQpuIGZ1bmN0aW9uCi0gKiBtYW5pcHVsYXRlIGFuZCBwbG90IGRh
dGEgYXMgeW91IGxpa2UgYW5kIGV4cG9ydCB5b3VyIG5ldyBmaWxlcyBiYWNrIGludD0KbyB0aGUg
R2FsYXh5IGhpc3RvcnkKLSAqIGFjY2VzcyB5b3VyIEdhbGF4eSBpbnN0YW5jZSBmcm9tIElQeXRo
b24gd2l0aCBiaW9ibGVuZCBhbmQgcmVkZWZpbmVkIGZ1PQpuY3Rpb25zCi0gKiBzYXZlIHRoZSBJ
UHl0aG9uIE5vdGVib29rIGludG8geW91ciBHYWxheHkgaGlzdG9yeQotICogbm90ZWJvb2sgcGVy
c2lzdGVuY2UgYWNyb3NzIHNlc3Npb25zCi0gKiBzYXZlZCBJUHl0aG9uIE5vdGVib29rIGZpbGVz
IGNhbiBiZSB2aWV3ZWQgaW4gSFRNTCBhbmQgcmUtb3BlbmVkCi0gKiBzZWxmLWNsb3NpbmcgYW5k
IGNsZWFuaW5nIElQeXRob24gZG9ja2VyIGNvbnRhaW5lcgotCi1Ib3cgZG9lcyBpdCB3b3JrCi09
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKLQotVGhlIG1h
a28gdGVtcGxhdGUgZnJvbSB0aGUgR2FsYXh5IHZpc3VhbGlzYXRpb24gZnJhbWV3b3JrIHJlbmRl
cnMgdGhlIGludGU9CnJmYWNlIGFuZCBidWlsZHMgYWxsIGZpbGVzIGFuZCBjb21tYW5kcyBuZWVk
ZWQgdG8gbHVuY2ggdGhlIGRvY2tlciBjb250YWluZT0Kci4gQSBjb25maWcgZmlsZSBpcyBzYXZl
ZCB1bmRlciBgYC9pbXBvcnQvYGAgaW5zaWRlIHRoZSBkb2NrZXIgY29udGFpbmVyLiBUPQpoZSBJ
UHl0aG9uIHdlYnBhZ2UgcnVubmluZyBpbiBkb2NrZXIgd2lsbCBiZSBpbmNsdWRlZCBpbiBhIEhU
TUwgb2JqZWN0IGFuZCA9CmRpc3BsYXllZCB0byB0aGUgdXNlci49MjAKLURlcGVuZGluZyBvbiB5
b3VyIGNvbmZpZ3VyYXRpb24gc29tZSBKYXZhU2NyaXB0IG1hZ2ljIGlzIGRvbmUgdG8gYWRkIGFu
IG9iPQpqZWN0IHRvIHRoZSBET00sIHdoaWNoIHdpbGwgYmUgbG9hZGVkIGJ5IHRoZSBicm93c2Vy
IGFuZCBjb25kaXRpb25hbGx5IGhhbmQ9CmxlcyBsb2dpbi4KLUlzaWRlIG9mIGRvY2tlciBUQ1Ag
Y29ubmVjdGlvbnMgYXJlIG1vbml0b3JlZCB1c2luZyBjcm9uLiBBcyBzb29uIGFzIHRoZSB1PQpz
ZXIgcXVpdHMgdXNpbmcgdGhlIG5vdGVib29rLCB0aGUgZHJvcHBpbmcgVENQIGNvbm5lY3Rpb25z
IGFyZSByZWNvZ25pc2VkIGE9Cm5kIHRoZSBjb3RhaW5lciBjbGVhbnMgdXAgYWZ0ZXIgaXRzZWxm
IGFuZCBraWxscyBpdHNlbGYuCi0KLQotCi1GdW5jdGlvbnMgYW5kIHZhcmlhYmxlcwotPTNEPTNE
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNE
PTNEPTNECi0KLUZvciB5b3VyIGNvbnZpZW5jZSwgd2UgaGF2ZSBhZGRlZCBhIGZldyBwcmUtZGVm
aW5lZCBmdW5jdGlvbnMgdG8gdGhlIElQeXRoPQpvbiBwcm9maWxlLgotCi0jIyMgZ2V0Ci0KLSAg
IFRoZSBnZXQgZnVuY3Rpb24gd2lsbCBjb3B5IGEgZGF0YXNldCwgaWRlbnRpZmllZCBieSB0aGUg
aGlzdG9yeV9pZCwgZnJvPQptIHlvdXIgY3VycmVudCBHYWxheHk9MjAKLSAgIGludG8gdGhlIGRv
Y2tlciBjb250YWluZXIuIEl0IHdpbGwgcmV0dXJuIHRoZSBmaWxlIHBhdGggdG8gdGhlIGNvcGll
ZCBmPQppbGUuCi0KLSAgICpFeGFtcGxlKjoKLSAgIGBgYHB5dGhvbgotICAgICAgd2l0aCBvcGVu
KCBnZXQoIDQ0ICksICdyJykgYXMgaGFuZGxlOgotICAgICAgICAgZm9yIGxpbmUgaW4gaGFuZGxl
OgotICAgICAgICAgICAgcHJpbnQoIGxpbmUgKQotICAgYGBgPTIwCi0KLSMjIyBwdXQKLQotICAg
VGhlIHB1dCBmdW5jdGlvbiB0YWtlcyBhIGZpbGUgcGF0aCBhbmQgdHJhbnNmZXJzIHRoZSBmaWxl
IHRvIHRoZSBjdXJyZW49CnQgaGlzdG9yeSBvZiB5b3VyIEdhbGF4eSBzZXNzaW9uLgotCi0gICAq
RXhhbXBsZSo6Ci0gICBgYGBweXRob24KLSAgICAgIHB1dCggJy4vbXlfZmlsZS50c3YnLCBmaWxl
X3R5cGUgPTNEICd0YWJ1bGFyJykKLSAgIGBgYAotCi0jIyMgSElTVE9SWV9JRAotCi0gICBBY2Nl
c3NpbmcgeW91ciBjdXJyZW50IGhpc3RvcnkgaXMgcG9zc2libGUgd2l0aCB0aGUgcHJlLWRlZmlu
ZWQgSElTVE9SWT0KX0lEIHZhcmlhYmxlLgotICA9MjAKLQotIyMjIGNvbm5lY3QgdG8gR2FsYXh5
Ci0KLSAgIElmIHlvdSB3YW50IHRvIGNvbW11bmljYXRlIHdpdGggR2FsYXh5IHlvdSBjYW4gdXNl
IGBgYGdldF9nYWxheHlfY29ubmVjPQp0aW9uKClgYGAgdG8gZ2V0IGFuIFtiaW9ibGVuZCBHYWxh
eHlJbnN0YW5jZSBvYmplY3RdKGh0dHA6Ly9iaW9ibGVuZC5yZWFkdGg9CmVkb2NzLm9yZy9lbi9s
YXRlc3QvYXBpX2RvY3MvZ2FsYXh5L2FsbC5odG1sP2hpZ2hsaWdodD0zRGdhbGF4eWluc3RhbmNl
KS4KLQotICAgKkV4YW1wbGUqOgotICAgYGBgcHl0aG9uCi0gICAgICBmcm9tIGJpb2JsZW5kLmdh
bGF4eS5oaXN0b3JpZXMgaW1wb3J0IEhpc3RvcnlDbGllbnQKLSAgICAgIGdpID0zRCBnZXRfZ2Fs
YXh5X2Nvbm5lY3Rpb24oKQotICAgICAgaGMgPTNEIEhpc3RvcnlDbGllbnQoIGdpICkKLSAgICAg
IGZvciBkYXRhc2V0IGluIGhjLnNob3dfaGlzdG9yeSggSElTVE9SWV9JRCAsIGNvbnRlbnRzPTNE
VHJ1ZSkgKToKLSAgICAgICAgIHByaW50KCBkYXRhc2V0WydpZCddICkKLSAgIGBgYAotCi0KLVNl
Y3VyaXR5Ci09M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKLQotQnkgZGVmYXVsdCwgbm8gc2VjdXJp
dHkgdHVybmVkIG9uLiBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhZGp1c3QgdHdvIHZhcmlhYmw9CmVz
LCBgYXBhY2hlX3VybHNgIGFuZAotYHBhc3N3b3JkX2F1dGhgIGluIHRoZSBjb25maWd1cmF0aW9u
IGZpbGUgKGBjb25maWcvaXB5dGhvbi5jb25mYCkuPTIwCi0KLVRoZSBgYXBhY2hlX3VybHNgIHZh
cmlhYmxlIHNob3VsZCBiZSBzZXQgdG8gYFRydWVgLCBhbmQgY29udGFpbmVycyBzaG91bGQgPQpi
ZSBzZWN1cmVkIHZpYSBBcGFjaGUrU1NMIGZvciBwcm9kdWN0aW9uIHVzYWdlLiBQbGVhc2Ugc2Vl
IHRoZSBbc2V0dXBdKElOU1Q9CkFMTC5tZCkgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24u
Ci0KLVRoZSBgcGFzc3dvcmRfYXV0aGAgdmFyaWFibGUgc2hvdWxkIGJlIHNldCB0byBgVHJ1ZWAu
IEl0IGZ1bmN0aW9ucyBieSBnZW5lPQpyYXRpbmcgYSByYW5kb20gcGFzc3dvcmQgd2hpY2ggaXMg
b25seSBzaGFyZWQgd2l0aCB0aGUgZG9ja2VyLCBhbmQgdGhlIHVzZXI9CidzIGJyb3dzZXIgdGhy
b3VnaCBHYWxheHkuIEluIHRoZW9yeSB0aGlzIHNob3VsZCBiZSBhIHNlY3VyZSBzeXN0ZW0gKG9y
IGF0ID0KbGVhc3QgYXMgc2VjdXJlIGFzIHRoZSB3ZWFrZXN0IGxpbmspLCBob3dldmVyIGlmIHlv
dSBmaW5kIGEgdnVsbmVyYWJpbGl0eSBpPQpuIHRoZSBzeXN0ZW0gd2UndmUgZGV2aXNlZCwgcGxl
YXNlIGNvbnRhY3QgdXMgYW5kIHdlJ2xsIHBhdGNoIGl0IGFzIHNvb24gYXM9CiBwb3NzaWJsZSEK
LQotCi1BdXRob3JzCi09M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKLQotICogQmo9QzM9QjZybiBHcj1D
Mz1CQ25pbmcgPGJqb2Vybi5ncnVlbmluZ0BnbWFpbC5jb20+Ci0gKiBFcmljIFJhc2NoZSA8cmFz
Y2hlLmVyaWNAeWFuZGV4LnJ1PgotCi0KLUhpc3RvcnkKLT0zRD0zRD0zRD0zRD0zRD0zRD0zRAot
Ci0tIHYwLjE6IEluaXRpYWwgcHVibGljIHJlbGVhc2UgKDAxLjA4LjIwMTQpCi0KLQotTGljZW5j
ZSAoTUlUKQotPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECi0KLVBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i
dGFpbmluZyBhIGNvPQpweQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu
dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGQ9CmVhbAotaW4gdGhlIFNvZnR3YXJl
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2g9CnRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk
IGluCi1hbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K
LQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
Ci1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS
QUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUj0KT00sCi1PVVQgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElO
Ci1USEUgU09GVFdBUkUuCgpkaWZmIC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2
M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vY29uZmlnL2lweXRob24uY29uZgot
LS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL2NvbmZpZy9pcHl0aG9u
LmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVttYWluXQotYXBhY2hlX3VybHMg
PTNEIEZhbHNlCi1wYXNzd29yZF9hdXRoID0zRCBGYWxzZQotc3NsID0zRCBGYWxzZQotCi1bZG9j
a2VyXQotY29tbWFuZCA9M0QgZG9ja2VyCi1pbWFnZSA9M0QgYmdydWVuaW5nL2RvY2tlci1pcHl0
aG9uLW5vdGVib29rCi0KCmRpZmYgLXIgM2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYz
YjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29u
ZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi54bWwKLS0t
IGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi54
bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPTNEIjEuMCIg
ZW5jb2Rpbmc9M0QiVVRGLTgiPz4KLTwhRE9DVFlQRSB2aXN1YWxpemF0aW9uIFNZU1RFTSAiLi4v
Li4vdmlzdWFsaXphdGlvbi5kdGQiPgotPHZpc3VhbGl6YXRpb24gbmFtZT0zRCJJUHl0aG9uIj4K
LSAgICA8ZGF0YV9zb3VyY2VzPgotICAgICAgICA8ZGF0YV9zb3VyY2U+Ci0gICAgICAgICAgICA8
bW9kZWxfY2xhc3M+SGlzdG9yeURhdGFzZXRBc3NvY2lhdGlvbjwvbW9kZWxfY2xhc3M+Ci0gICAg
ICAgICAgICA8dGVzdCB0eXBlPTNEImlzaW5zdGFuY2UiIHRlc3RfYXR0cj0zRCJkYXRhdHlwZSIg
cmVzdWx0X3R5cGU9Cj0zRCJkYXRhdHlwZSI+dGFidWxhci5UYWJ1bGFyPC90ZXN0PgotICAgICAg
ICAgICAgPHRlc3QgdHlwZT0zRCJpc2luc3RhbmNlIiB0ZXN0X2F0dHI9M0QiZGF0YXR5cGUiIHJl
c3VsdF90eXBlPQo9M0QiZGF0YXR5cGUiPmRhdGEuVGV4dDwvdGVzdD4KLSAgICAgICAgICAgIDx0
b19wYXJhbSBwYXJhbV9hdHRyPTNEImlkIj5kYXRhc2V0X2lkPC90b19wYXJhbT4KLSAgICAgICAg
PC9kYXRhX3NvdXJjZT4KLSAgICA8L2RhdGFfc291cmNlcz4KLSAgICA8cGFyYW1zPgotICAgICAg
ICA8cGFyYW0gdHlwZT0zRCJkYXRhc2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJl
cXVpcmVkPTNEInQ9CnJ1ZSI+ZGF0YXNldF9pZDwvcGFyYW0+Ci0gICAgPC9wYXJhbXM+Ci0gICAg
PHRlbXBsYXRlPmlweXRob24ubWFrbzwvdGVtcGxhdGU+Ci08L3Zpc3VhbGl6YXRpb24+CgpkaWZm
IC1yIDNjNGYyZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQw
OTAwNzlkNDRiNDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6
YXRpb25zL2lweXRob24vc3RhdGljL2ltYWdlcy9pcHl0aD0Kb25faW5fZ2FsYXh5LnBuZwpCaW5h
cnkgZmlsZSBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9pbWFn
ZXMvaXB5dGhvbl9pbl89CmdhbGF4eS5wbmcgaGFzIGNoYW5nZWQKCmRpZmYgLXIgM2M0ZjJlYzIy
MjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2Qz
Yz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi9zdGF0aWMvaW1hZ2VzL3N0YXJ0PQpfaXB5dGhvbi5wbmcKQmluYXJ5IGZpbGUgY29uZmlnL3Bs
dWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvaW1hZ2VzL3N0YXJ0X2lweXRoPQpv
bi5wbmcgaGFzIGNoYW5nZWQKCmRpZmYgLXIgM2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIyODJi
NzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBhOWIg
Y29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvanMvaWUuanMKLS0t
IGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi9zdGF0aWMvanMvaWUuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioKLSAqIEludGVybmFsIGZ1bmN0aW9u
IHRvIHJlbW92ZSBjb250ZW50IGZyb20gdGhlIG1haW4gYXJlYSBhbmQgYWRkIHRoZSBub3RlPQpi
b29rLgotICogTm90IGlkZW1wb3RlbnQKLSAqLwotZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVy
bCl7Ci0gICAgY2xlYXJfbWFpbl9hcmVhKCk7Ci0gICAgJCgnI21haW4nKS5hcHBlbmQoJzxpZnJh
bWUgZnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0eT0KbGU9M0Qid2lk
dGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5v
IiBzcmM9M0QiPQonKyB1cmwgKyciPjwvaWZyYW1lPicKLSAgICApOwotfQotCi1mdW5jdGlvbiBj
bGVhcl9tYWluX2FyZWEoKXsKLSAgICAkKCcjc3Bpbm5lcicpLnJlbW92ZSgpOwotICAgICQoJyNt
YWluJykuY2hpbGRyZW4oKS5yZW1vdmUoKTsKLX0KLQotZnVuY3Rpb24gZGlzcGxheV9zcGlubmVy
KCl7Ci0gICAgICAgICQoJyNtYWluJykuYXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0z
RCInICsgZ2FsYXh5X3Jvb3QgKyAnLz0Kc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0
eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRvO3RvcDowPQo7bGVmdDowO3JpZ2h0
OjA7Ym90dG9tOjA7Ij4nKTsKLX0KLQotCi0vKioKLSAqIFRlc3QgYXZhaWxhYmlsaXR5IG9mIGEg
VVJMLCBhbmQgY2FsbCBhIGNhbGxiYWNrIHdoZW4gZG9uZS4KLSAqIGh0dHA6Ly9zdGFja292ZXJm
bG93LmNvbS9xLzI1MzkwMjA2LzM0NzM2OAotICogQHBhcmFtIHtTdHJpbmd9IHVybDogVVJMIHRv
IHRlc3QgYXZhaWxhYmlsaXR5IG9mLiBNdXN0IHJldHVybiBhIDIwMCAoMzA9CjItPjIwMCBpcyBP
SykuCi0gKiBAcGFyYW0ge1N0cmluZ30gY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBz
dWNjZXNzZnVsbHkgY29ubmVjdGVkLgotICoKLSAqLwotZnVuY3Rpb24gdGVzdF9pZV9hdmFpbGFi
aWxpdHkodXJsLCBzdWNjZXNzX2NhbGxiYWNrKXsKLSAgICB2YXIgcmVxdWVzdF9jb3VudCA9M0Qg
MDsKLSAgICBkaXNwbGF5X3NwaW5uZXIoKTsKLSAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKXsKLSAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgIHVybDogdXJsLAotICAg
ICAgICAgICAgeGhyRmllbGRzOiB7Ci0gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0
cnVlCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgICAg
ICB0aW1lb3V0OiA1MDAsCi0gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpewotICAgICAg
ICAgICAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0ZWQgdG8gSUUsIHJldHVybmluZyIpOwotICAg
ICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgIHN1
Y2Nlc3NfY2FsbGJhY2soKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBlcnJvcjogZnVu
Y3Rpb24oanF4aHIsIHN0YXR1cywgZXJyb3IpewotICAgICAgICAgICAgICAgIHJlcXVlc3RfY291
bnQrKzsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiUmVxdWVzdCAiICsgcmVxdWVzdF9j
b3VudCk7Ci0gICAgICAgICAgICAgICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7Ci0gICAgICAgICAgICAgICAgICAg
IGNsZWFyX21haW5fYXJlYSgpOwotICAgICAgICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSUUsIGNvbnRhY3Qg
eW91ciBhZG1pbmlzdHJhdD0Kb3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6
IDIwMDAwLCAndGFwVG9EaXNtPQppc3MnOiBmYWxzZX0KLSAgICAgICAgICAgICAgICAgICAgKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIH0sIDEw
MDApOwotfQoKZGlmZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0ZDBi
IC1yIDQwZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3N0YXRpYy9qcy9pcHl0aG9uLmpzCi0tLSBhL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lweXRob24vc3RhdGljL2pzL2lweXRob24uanMK
KysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi1mdW5jdGlvbiBtZXNzYWdlX2ZhaWxlZF9h
dXRoKHBhc3N3b3JkKXsKLSAgICB0b2FzdHIuaW5mbygKLSAgICAgICAgIkF1dG9tYXRpYyBhdXRo
b3JpemF0aW9uIGZhaWxlZC4gWW91IGNhbiBtYW51YWxseSBsb2dpbiB3aXRoOjxicj4iPQogKyBw
YXNzd29yZCArICI8YnI+PGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dh
bGF4eS1pcHl0aG9uL3c9CmlraS9BdXRvbWF0aWMtQXV0aG9yaXphdGlvbi1GYWlsZWQnIHRhcmdl
dD0zRCdfYmxhbmsnPk1vcmUgZGV0YWlscyAuLi48L2E+IiwKLSAgICAgICAgIlBsZWFzZSBsb2dp
biBtYW51YWxseSIsCi0gICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDEw
MDAwMCwgJ3RhcFRvRGlzbWlzcyc6IGZhbHNlfQotICAgICk7Ci19Ci0KLWZ1bmN0aW9uIG1lc3Nh
Z2VfZmFpbGVkX2Nvbm5lY3Rpb24oKXsKLSAgICB0b2FzdHIuZXJyb3IoCi0gICAgICAgICJDb3Vs
ZCBub3QgY29ubmVjdCB0byBJUHl0aG9uIE5vdGVib29rLiBQbGVhc2UgY29udGFjdCB5b3VyIGFk
bWluaT0Kc3RyYXRvci4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1Yi5jb20vYmdydWVuaW5nL2dh
bGF4eS1pcHl0aG9uL3dpa2kvQ291bGQtPQpub3QtY29ubmVjdC10by1JUHl0aG9uLU5vdGVib29r
JyB0YXJnZXQ9M0QnX2JsYW5rJz5Nb3JlIGRldGFpbHMgLi4uPC9hPiIsCi0gICAgIlNlY3VyaXR5
IHdhcm5pbmciLAotICAgICAgICB7J2Nsb3NlQnV0dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAw
MCwgJ3RhcFRvRGlzbWlzcyc6IHRydWV9Ci0gICAgKTsKLX0KLQotZnVuY3Rpb24gbWVzc2FnZV9u
b19hdXRoKCl7Ci0gICAgLy8gTm8gbG9uZ2VyIGEgc2VjdXJpdHkgaXNzdWUsIHByb3h5IHZhbGlk
YXRlcyBHYWxheHkgc2Vzc2lvbiB0b2tlbi4KLSAgICAvKgotICAgIHRvYXN0ci53YXJuaW5nKAot
ICAgICAgICAiSVB5dGhvbiBOb3RlYm9vayB3YXMgbHVuY2hlZCB3aXRob3V0IGF1dGhlbnRpY2F0
aW9uLiBUaGlzIGlzIGEgc2U9CmN1cml0eSBpc3N1ZS4gPGEgaHJlZj0zRCdodHRwczovL2dpdGh1
Yi5jb20vYmdydWVuaW5nL2dhbGF4eS1pcHl0aG9uL3dpa2kvST0KUHl0aG9uLU5vdGVib29rLXdh
cy1sdW5jaGVkLXdpdGhvdXQtYXV0aGVudGljYXRpb24nIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUg
PQpkZXRhaWxzIC4uLjwvYT4iLAotICAgICAgICAiU2VjdXJpdHkgd2FybmluZyIsCi0gICAgICAg
IHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzog
ZmFsc2V9Ci0gICAgKTsKLSAgICAqLwotfQotCi0KLS8qKgotICogTG9hZCBhbiBpbnRlcmFjdGl2
ZSBlbnZpcm9ubWVudCAoSUUpIGZyb20gYSByZW1vdGUgVVJMCi0gKiBAcGFyYW0ge1N0cmluZ30g
cGFzc3dvcmQ6IHBhc3N3b3JkIHVzZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSByZW1vdGUgcj0K
ZXNvdXJjZQotICogQHBhcmFtIHtTdHJpbmd9IG5vdGVib29rX2xvZ2luX3VybDogVVJMIHRoYXQg
c2hvdWxkIGJlIFBPU1RlZCB0byBmb3IgbG89CmdpbgotICogQHBhcmFtIHtTdHJpbmd9IG5vdGVi
b29rX2FjY2Vzc191cmw6IHRoZSBVUkwgZW1iZWRlZCBpbiB0aGUgcGFnZSBhbmQgbG89CmFkZWQK
LSAqCi0gKi8KLWZ1bmN0aW9uIGxvYWRfbm90ZWJvb2socGFzc3dvcmQsIG5vdGVib29rX2xvZ2lu
X3VybCwgbm90ZWJvb2tfYWNjZXNzX3VybCl7Ci0gICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5j
dGlvbigpIHsKLSAgICAgICAgLy8gVGVzdCBub3RlYm9va19sb2dpbl91cmwgZm9yIGFjY2Vzc2li
aWxpdHksIGV4ZWN1dGluZyB0aGUgbG9naW4rPQpsb2FkIGZ1bmN0aW9uIHdoZW5ldmVyCi0gICAg
ICAgIC8vIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgdG8gdGhlIElFLgotICAgICAgICB0
ZXN0X2llX2F2YWlsYWJpbGl0eShub3RlYm9va19sb2dpbl91cmwsIGZ1bmN0aW9uKCl7Ci0gICAg
ICAgICAgICBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmQsIG5vdGVib29rX2xvZ2lu
X3VybCwgbm90ZWJvbz0Ka19hY2Nlc3NfdXJsKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0K
LS8qKgotICogTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBJRXMKLSAqLwotZnVuY3Rpb24gX2hhbmRs
ZV9ub3RlYm9va19sb2FkaW5nKHBhc3N3b3JkLCBub3RlYm9va19sb2dpbl91cmwsIG5vdGVib29r
X2E9CmNjZXNzX3VybCl7Ci0gICAgaWYgKCBpZV9wYXNzd29yZF9hdXRoICkgewotICAgICAgICAv
LyBNYWtlIGFuIEFKQVggUE9TVAotICAgICAgICAkLmFqYXgoewotICAgICAgICAgICAgdHlwZTog
IlBPU1QiLAotICAgICAgICAgICAgLy8gdG8gdGhlIExvZ2luIFVSTAotICAgICAgICAgICAgdXJs
OiBub3RlYm9va19sb2dpbl91cmwsCi0gICAgICAgICAgICAvLyBXaXRoIG91ciBwYXNzd29yZAot
ICAgICAgICAgICAgZGF0YTogewotICAgICAgICAgICAgICAgICdwYXNzd29yZCc6IHBhc3N3b3Jk
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgeGhyRmllbGRzOiB7Ci0gICAgICAgICAgICAg
ICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8g
SWYgdGhhdCBpcyBzdWNjZXNzZnVsLCBsb2FkIHRoZSBub3RlYm9vawotICAgICAgICAgICAgc3Vj
Y2VzczogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJv
b2tfYWNjZXNzX3VybCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZXJyb3I6IGZ1bmN0
aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKLSAgICAgICAgICAgICAgICBpZihpZV9wYXNzd29y
ZF9hdXRoICYmICFpZV9hcGFjaGVfdXJscyl7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZhaWx1
cmUgaGFwcGVucyBkdWUgdG8gQ09SUwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2ZhaWxl
ZF9hdXRoKHBhc3N3b3JkKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kX25vdGVib29rKG5v
dGVib29rX2FjY2Vzc191cmwpOwotICAgICAgICAgICAgICAgIH1lbHNlewotICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlX2ZhaWxlZF9jb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIERvIHdlIHdhbnQgdG8gdHJ5IGFuZCBsb2FkIHRoZSBub3RlYm9vayBhbnl3YXk/IEp1cz0K
dCBpbiBjYXNlPwotICAgICAgICAgICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tf
YWNjZXNzX3VybCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
KTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5vdCB1c2luZyBwYXNzd29yZCBhdXRo
LCBqdXN0IGVtYmVkIGl0IHRvIGF2b2lkIGNvbnRlbnQtb3JpZ2luID0KaXNzdWVzLgotICAgICAg
ICBtZXNzYWdlX25vX2F1dGgoKTsKLSAgICAgICAgYXBwZW5kX25vdGVib29rKG5vdGVib29rX2Fj
Y2Vzc191cmwpOwotICAgIH0KLX0KCmRpZmYgLXIgM2M0ZjJlYzIyMjQ1ZDYwNzUyNDZkYzAwNjIy
ODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYz0KMjk0NTA5ZWM0OGE4ODBh
OWIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFr
bwotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9p
ZS5tYWtvCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLTwlIQotaW1wb3J0IG9zCi1p
bXBvcnQgeWFtbAotaW1wb3J0IHNobGV4Ci1pbXBvcnQgcmFuZG9tCi1pbXBvcnQgc2h1dGlsCi1p
bXBvcnQgaGFzaGxpYgotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBDb25maWdQYXJzZXIKLQot
JT4KLQotPCVkZWYgbmFtZT0zRCJzZXRfaWQobmFtZSkiPgotPCUKLSAgICAiIiIKLSAgICAgICAg
SUVzIG11c3QgcmVnaXN0ZXIgdGhlaXIgbmFtZSwgc28gaXQgY2FuIGJlIHVzZWQgaW4gY29uc3Ry
dWN0aW5nIHN0PQpyaW5ncwotCi0gICAgICAgIEFkZGl0aW9uYWxseSB0aGlzIG1ldGhvZCBzdG9y
ZXMgbG90cyBvZiBjb25maWcgb3B0aW9ucyB3ZSB3YW50IHRvID0KYWNjZXNzIGVsc2V3aGVyZS4K
LSAgICAiIiIKLSAgICBzZWxmLmF0dHIudml6X2lkID0zRCBuYW1lCi0gICAgc2VsZi5hdHRyLmhp
c3RvcnlfaWQgPTNEIHRyYW5zLnNlY3VyaXR5LmVuY29kZV9pZCggdHJhbnMuaGlzdG9yeS5pZCAp
Ci0gICAgc2VsZi5hdHRyLnByb3h5X3JlcXVlc3QgPTNEIHRyYW5zLmFwcC5wcm94eV9tYW5hZ2Vy
LnNldHVwX3Byb3h5KCB0cmFucz0KICkKLSAgICBzZWxmLmF0dHIucHJveHlfdXJsID0zRCBzZWxm
LmF0dHIucHJveHlfcmVxdWVzdFsgJ3Byb3h5X3VybCcgXQotICAgIHNlbGYuYXR0ci5nYWxheHlf
Y29uZmlnID0zRCB0cmFucy5hcHAuY29uZmlnCi0gICAgc2VsZi5hdHRyLmdhbGF4eV9yb290X2Rp
ciA9M0Qgb3MucGF0aC5hYnNwYXRoKHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLj0Kcm9vdCkKLSAg
ICBzZWxmLmF0dHIucm9vdCA9M0QgaC51cmxfZm9yKCIvIikKLSAgICBzZWxmLmF0dHIuYXBwX3Jv
b3QgPTNEIHNlbGYuYXR0ci5yb290ICsgInBsdWdpbnMvdmlzdWFsaXphdGlvbnMvIiArIHNlPQps
Zi5hdHRyLnZpel9pZCArICIvc3RhdGljLyIKLQotICAgICMgU3RvcmUgb3VyIHRlbXBsYXRlIGFu
ZCBjb25maWd1cmF0aW9uIHBhdGgKLSAgICBzZWxmLmF0dHIub3VyX2NvbmZpZ19kaXIgPTNEIG9z
LnBhdGguam9pbihwbHVnaW5fcGF0aCwgImNvbmZpZyIpCi0gICAgc2VsZi5hdHRyLm91cl90ZW1w
bGF0ZV9kaXIgPTNEIG9zLnBhdGguam9pbihwbHVnaW5fcGF0aCwgInRlbXBsYXRlcyIpCi0gICAg
c2VsZi5hdHRyLnZpel9jb25maWcgPTNEIENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2VyKGRl
ZmF1bHRfZGljdCkKLSAgICBzZWxmLmF0dHIudml6X2NvbmZpZy5yZWFkKCBvcy5wYXRoLmpvaW4o
IHNlbGYuYXR0ci5vdXJfY29uZmlnX2Rpciwgc2VsPQpmLmF0dHIudml6X2lkICsgIi5jb25mIiAp
ICkKLSAgICAjIFN0b3JlIHNvbWUgdmFyaWFibGVzIHdlIHdhbnQgYnkgZGVmYXVsdAotICAgIHNl
bGYuYXR0ci5QQVNTV09SRF9BVVRIID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFu
KCJtYWluIiwgInA9CmFzc3dvcmRfYXV0aCIpCi0gICAgc2VsZi5hdHRyLkFQQUNIRV9VUkxTID0z
RCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgImFwYT0KY2hlX3VybHMi
KQotICAgIHNlbGYuYXR0ci5TU0xfVVJMUyA9M0Qgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0Ym9v
bGVhbigibWFpbiIsICJzc2wiKQotICAgIHNlbGYuYXR0ci5QT1JUID0zRCBzZWxmLmF0dHIucHJv
eHlfcmVxdWVzdFsgJ3Byb3hpZWRfcG9ydCcgXQotICAgIHNlbGYuYXR0ci5IT1NUID0zRCByZXF1
ZXN0Lmhvc3QucnNwbGl0KCc6JywgMSlbMF0KLSU+Ci08LyVkZWY+Ci0KLTwlZGVmIG5hbWU9M0Qi
d3JpdGVfY29uZl9maWxlKG91dHB1dF9kaXJlY3RvcnksIGV4dHJhPTNEe30pIj4KLTwlCi0gICAg
IiIiCi0gICAgICAgIEJ1aWxkIHVwIGEgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgc3RhbmRh
cmQgZm9yIEFMTCBJRXMuCi0KLSAgICAgICAgVE9ETzogcmVwbGFjZSBoYXNoZWQgcGFzc3dvcmQg
d2l0aCBwbGFpbnRleHQuCi0gICAgIiIiCi0gICAgY29uZl9maWxlID0zRCB7Ci0gICAgICAgICdo
aXN0b3J5X2lkJzogc2VsZi5hdHRyLmhpc3RvcnlfaWQsCi0gICAgICAgICdhcGlfa2V5JzogZ2V0
X2FwaV9rZXkoKSwKLSAgICAgICAgJ3JlbW90ZV9ob3N0JzogcmVxdWVzdC5yZW1vdGVfYWRkciwK
LSAgICAgICAgJ2RvY2tlcl9wb3J0Jzogc2VsZi5hdHRyLlBPUlQsCi0gICAgICAgICdjb3JzX29y
aWdpbic6IHJlcXVlc3QuaG9zdF91cmwsCi0gICAgfQotCi0gICAgaWYgc2VsZi5hdHRyLmdhbGF4
eV9jb25maWcuZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybF9zZXQ6Ci0gICAgICAgIGNvbmZfZmls
ZVsnZ2FsYXh5X3VybCddID0zRCBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5nYWxheHlfaW5mcmFz
dD0KcnVjdHVyZV91cmwucnN0cmlwKCcvJykgKyAnLycKLSAgICBlbHNlOgotICAgICAgICBjb25m
X2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0QgcmVxdWVzdC5hcHBsaWNhdGlvbl91cmwucnN0cmlwKCcv
JykgKyA9CicvJwotICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4eV9wYXN0ZXJfcG9ydCddID0zRCBz
ZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5ndWVzc189CmdhbGF4eV9wb3J0KCkKLQotICAgIGlmIHNl
bGYuYXR0ci5QQVNTV09SRF9BVVRIOgotICAgICAgICAjIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3
b3JkICsgc2FsdAotICAgICAgICBub3RlYm9va19wd19zYWx0ID0zRCBzZWxmLmdlbmVyYXRlX3Bh
c3N3b3JkKGxlbmd0aD0zRDEyKQotICAgICAgICBub3RlYm9va19wdyA9M0Qgc2VsZi5nZW5lcmF0
ZV9wYXNzd29yZChsZW5ndGg9M0QyNCkKLSAgICAgICAgbSA9M0QgaGFzaGxpYi5zaGExKCkKLSAg
ICAgICAgbS51cGRhdGUoIG5vdGVib29rX3B3ICsgbm90ZWJvb2tfcHdfc2FsdCApCi0gICAgICAg
IGNvbmZfZmlsZVsnbm90ZWJvb2tfcGFzc3dvcmQnXSA9M0QgJ3NoYTE6JXM6JXMnICUgKG5vdGVi
b29rX3B3X3NhbD0KdCwgbS5oZXhkaWdlc3QoKSkKLSAgICAgICAgIyBTaG91bGQgd2UgdXNlIHBh
c3N3b3JkIGJhc2VkIGNvbm5lY3Rpb24gb3IgImRlZmF1bHQiIGNvbm5lY3Rpb24gPQpzdHlsZSBp
biBnYWxheHkKLSAgICBlbHNlOgotICAgICAgICBub3RlYm9va19wdyA9M0QgIk5vbmUiCi0KLSAg
ICAjIFNvbWUgd2lsbCBuZWVkIHRvIHBhc3MgZXh0cmEgZGF0YQotICAgIGZvciBleHRyYV9rZXkg
aW4gZXh0cmE6Ci0gICAgICAgIGNvbmZfZmlsZVtleHRyYV9rZXldID0zRCBleHRyYVtleHRyYV9r
ZXldCi0KLSAgICBzZWxmLmF0dHIubm90ZWJvb2tfcHcgPTNEIG5vdGVib29rX3B3Ci0gICAgIyBX
cml0ZSBjb25mCi0gICAgd2l0aCBvcGVuKCBvcy5wYXRoLmpvaW4oIG91dHB1dF9kaXJlY3Rvcnks
ICdjb25mLnlhbWwnICksICd3YicgKSBhcyBoYT0KbmRsZToKLSAgICAgICAgaGFuZGxlLndyaXRl
KCB5YW1sLmR1bXAoY29uZl9maWxlLCBkZWZhdWx0X2Zsb3dfc3R5bGU9M0RGYWxzZSkgKQotCi0l
PgotPC8lZGVmPgotCi08JWRlZiBuYW1lPTNEImdlbmVyYXRlX2hleChsZW5ndGgpIj4KLTwlCi0g
ICAgIiIiCi0gICAgICAgIEdlbmVyYXRlIGEgaGV4IHN0cmluZwotICAgICIiIgotICAgIHJldHVy
biAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWYnKSBmb3IgXyBpbiByYW5n
ZShsZW5ndGg9CikpCi0lPgotPC8lZGVmPgotCi08JWRlZiBuYW1lPTNEImdlbmVyYXRlX3Bhc3N3
b3JkKGxlbmd0aCkiPgotPCUKLSAgICAiIiIKLSAgICAgICAgR2VuZXJhdGUgYSByYW5kb20gYWxw
aGFudW1lcmljIHBhc3N3b3JkCi0gICAgIiIiCi0gICAgcmV0dXJuICcnLmpvaW4ocmFuZG9tLmNo
b2ljZSgnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JykgZj0Kb3IgXyBpbiBy
YW5nZShsZW5ndGgpKQotJT4KLTwvJWRlZj4KLQotPCVkZWYgbmFtZT0zRCJqYXZhc2NyaXB0X2Jv
b2xlYW4ocHl0aG9uX2Jvb2xlYW4pIj4KLTwlCi0gICAgIiIiCi0gICAgICAgIENvbnZlbmllbmNl
IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9vbGVhbiBmb3IgdXNlIGluIEpTCi0gICAgIiIiCi0gICAg
aWYgcHl0aG9uX2Jvb2xlYW46Ci0gICAgICAgIHJldHVybiAidHJ1ZSI7Ci0gICAgZWxzZToKLSAg
ICAgICAgcmV0dXJuICJmYWxzZSIKLSU+Ci08LyVkZWY+Ci0KLQotPCVkZWYgbmFtZT0zRCJ1cmxf
dGVtcGxhdGUodXJsX3RlbXBsYXRlKSI+Ci08JQotICAgICIiIgotICAgICAgICBQcm9jZXNzIGEg
VVJMIHRlbXBsYXRlCi0KLSAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgdmFyaWFibGVzIGFjY2Vz
c2libGUgdG8gdGhlIHVzZXI6Ci0KLSAgICAgICAgICAgIC0gJHtQUk9YWV9VUkx9IHdpbGwgYmUg
cmVwbGFjZWQgd2l0aCBkeW5hbWljYWxseSBjcmVhdGUgcHJveHkKLSAgICAgICAgICAgIC0gJHtQ
T1JUfSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIHBvcnQgdGhlIGRvY2tlciBpbWFnZSBpcyBh
PQp0dGFjaGVkIHRvCi0gICAgIiIiCi0gICAgdXJsID0zRCB1cmxfdGVtcGxhdGUucmVwbGFjZSgn
JHtQUk9YWV9VUkx9Jywgc3RyKHNlbGYuYXR0ci5wcm94eV91cmwpKT0KIFwKLSAgICAgICAgICAg
IC5yZXBsYWNlKCcke1BPUlR9Jywgc3RyKHNlbGYuYXR0ci5QT1JUKSkKLSAgICByZXR1cm4gdXJs
Ci0lPgotPC8lZGVmPgotCi0KLTwlZGVmIG5hbWU9M0QiZG9ja2VyX2NtZCh0ZW1wX2RpcikiPgot
PCUKLSAgICAiIiIKLSAgICAgICAgR2VuZXJhdGUgYW5kIHJldHVybiB0aGUgZG9ja2VyIGNvbW1h
bmQgdG8gZXhlY3V0ZQotICAgICIiIgotICAgIHJldHVybiAnJXMgcnVuIC1kIC0tc2lnLXByb3h5
PTNEdHJ1ZSAtcCAlczolcyAtdiAiJXM6L2ltcG9ydC8iICVzJyAlIFwKLSAgICAgICAgKHNlbGYu
YXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImNvbW1hbmQiKSwgc2VsZi5hdHRyLlBPUlQs
IHNlPQpsZi5hdHRyLmRvY2tlcl9wb3J0LAotICAgICAgICAgdGVtcF9kaXIsIHNlbGYuYXR0ci52
aXpfY29uZmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikpCi0lPgotPC8lZGVmPgotCi0KLTwlZGVm
IG5hbWU9M0QiZGVmYXVsdF9qYXZhc2NyaXB0X3ZhcmlhYmxlcygpIj4KLS8vIEdsb2JhbHMKLWll
X3Bhc3N3b3JkX2F1dGggPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5Q
QVNTV09SRF9BVVRIKSB9OwotaWVfYXBhY2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlwdF9i
b29sZWFuKHNlbGYuYXR0ci5BUEFDSEVfVVJMUykgfTsKLWllX3Bhc3N3b3JkID0zRCAnJHsgc2Vs
Zi5hdHRyLm5vdGVib29rX3B3IH0nOwotdmFyIGdhbGF4eV9yb290ID0zRCAnJHsgc2VsZi5hdHRy
LnJvb3QgfSc7Ci12YXIgYXBwX3Jvb3QgPTNEICckeyBzZWxmLmF0dHIuYXBwX3Jvb3QgfSc7Ci08
LyVkZWY+Ci0KLQotPCVkZWYgbmFtZT0zRCJsb2FkX2RlZmF1bHRfanMoKSI+Ci0ke2guY3NzKCAn
YmFzZScgKSB9Ci0ke2guanMoICdsaWJzL2pxdWVyeS9qcXVlcnknLAotICAgICAgICAnbGlicy90
b2FzdHInLAotICAgICAgICAnbGlicy9yZXF1aXJlJyl9Ci08LyVkZWY+CgpkaWZmIC1yIDNjNGYy
ZWMyMjI0NWQ2MDc1MjQ2ZGMwMDYyMjgyYjc2M2I0NjRkMGIgLXIgNDBmN2Y5NDQwOTAwNzlkNDRi
NDdkM2M9CjI5NDUwOWVjNDhhODgwYTliIGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2lw
eXRob24vdGVtcGxhdGVzL2lweXRob24ubT0KYWtvCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3Vh
bGl6YXRpb25zL2lweXRob24vdGVtcGxhdGVzL2lweXRob24ubWFrbworKysgL2Rldi9udWxsCkBA
IC0xLDY0ICswLDAgQEAKLTwlbmFtZXNwYWNlIGZpbGU9M0QiaWUubWFrbyIgbmFtZT0zRCJpZSIv
PgotPCUKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQg
c3VicHJvY2VzcwotCi0jIFNldHMgSUQgYW5kIHNldHMgdXAgYSBsb3Qgb2Ygb3RoZXIgdmFyaWFi
bGVzCi1pZS5zZXRfaWQoImlweXRob24iKQotaWUuYXR0ci5kb2NrZXJfcG9ydCA9M0QgNjc4OQot
IyBDcmVhdGUgdGVtcGRpciBpbiBnYWxheHkKLXRlbXBfZGlyID0zRCBvcy5wYXRoLmFic3BhdGgo
IHRlbXBmaWxlLm1rZHRlbXAoKSApCi0jIFdyaXRlIG91dCBjb25mIGZpbGUuLi5uZWVkcyB3b3Jr
Ci1pZS53cml0ZV9jb25mX2ZpbGUodGVtcF9kaXIpCi0KLSMjIElQeXRob24gU3BlY2lmaWMKLSMg
UHJlcGFyZSBhbiBlbXB0eSBub3RlYm9vawotbm90ZWJvb2tfaWQgPTNEIGllLmdlbmVyYXRlX2hl
eCg2NCkKLXdpdGggb3Blbiggb3MucGF0aC5qb2luKCBpZS5hdHRyLm91cl90ZW1wbGF0ZV9kaXIs
ICdub3RlYm9vay5pcHluYicgKSwgJ3InPQopIGFzIG5iX2hhbmRsZToKLSAgICBlbXB0eV9uYiA9
M0QgbmJfaGFuZGxlLnJlYWQoKQotZW1wdHlfbmIgPTNEIGVtcHR5X25iICUgbm90ZWJvb2tfaWQK
LSMgQ29weSBvdmVyIGRlZmF1bHQgbm90ZWJvb2ssIHVubGVzcyB0aGUgZGF0YXNldCB0aGlzIHZp
eiBpcyBydW5uaW5nIG9uIGlzPQogYSBub3RlYm9vawotZW1wdHlfbmJfcGF0aCA9M0Qgb3MucGF0
aC5qb2luKHRlbXBfZGlyLCAnaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQotaWYgaGRh
LmRhdGF0eXBlLl9fY2xhc3NfXy5fX25hbWVfXyAhPTNEICJJcHluYiI6Ci0gICAgd2l0aCBvcGVu
KCBlbXB0eV9uYl9wYXRoLCAndysnICkgYXMgaGFuZGxlOgotICAgICAgICBoYW5kbGUud3JpdGUo
IGVtcHR5X25iICkKLWVsc2U6Ci0gICAgc2h1dGlsLmNvcHkoIGhkYS5maWxlX25hbWUsIGVtcHR5
X25iX3BhdGggKQotCi0KLSMjIEdlbmVyYWwgSUUgc3BlY2lmaWMKLSMgQWNjZXNzIFVSTHMgZm9y
IHRoZSBub3RlYm9vayBmcm9tIHdpdGhpbiBnYWxheHkuCi1ub3RlYm9va19hY2Nlc3NfdXJsID0z
RCBpZS51cmxfdGVtcGxhdGUoJyR7UFJPWFlfVVJMfS9pcHl0aG9uLyR7UE9SVH0vbm90ZT0KYm9v
a3MvaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQotbm90ZWJvb2tfbG9naW5fdXJsID0z
RCBpZS51cmxfdGVtcGxhdGUoJyR7UFJPWFlfVVJMfS9pcHl0aG9uLyR7UE9SVH0vbG9naW49Cj9u
ZXh0PTNEJTJGaXB5dGhvbiUyRiR7UE9SVH0lMkZ0cmVlJykKLQotZG9ja2VyX2NtZCA9M0QgaWUu
ZG9ja2VyX2NtZCh0ZW1wX2RpcikKLXN1YnByb2Nlc3MuY2FsbChkb2NrZXJfY21kLCBzaGVsbD0z
RFRydWUpCi0lPgotPGh0bWw+Ci08aGVhZD4KLSR7IGllLmxvYWRfZGVmYXVsdF9qcygpIH0KLTwv
aGVhZD4KLTxib2R5PgotCi08c2NyaXB0IHR5cGU9M0QidGV4dC9qYXZhc2NyaXB0Ij4KLSR7IGll
LmRlZmF1bHRfamF2YXNjcmlwdF92YXJpYWJsZXMoKSB9Ci12YXIgbm90ZWJvb2tfbG9naW5fdXJs
ID0zRCAnJHsgbm90ZWJvb2tfbG9naW5fdXJsIH0nOwotdmFyIG5vdGVib29rX2FjY2Vzc191cmwg
PTNEICckeyBub3RlYm9va19hY2Nlc3NfdXJsIH0nOwotLy8gTG9hZCBub3RlYm9vawotCi1yZXF1
aXJlLmNvbmZpZyh7Ci0gICAgYmFzZVVybDogYXBwX3Jvb3QsCi0gICAgcGF0aHM6IHsKLSAgICAg
ICAgInBsdWdpbiIgOiBhcHBfcm9vdCArICJqcy8iLAotICAgIH0sCi19KTsKLXJlcXVpcmVqcyhb
J3BsdWdpbi9pZScsICdwbHVnaW4vaXB5dGhvbiddLCBmdW5jdGlvbigpewotICAgIGxvYWRfbm90
ZWJvb2soaWVfcGFzc3dvcmQsIG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYWNjZXNzX3Vy
bCk7Ci19KTsKLTwvc2NyaXB0PgotPGRpdiBpZD0zRCJtYWluIiB3aWR0aD0zRCIxMDAlIiBoZWln
aHQ9M0QiMTAwJSI+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KCmRpZmYgLXIgM2M0ZjJlYzIy
MjQ1ZDYwNzUyNDZkYzAwNjIyODJiNzYzYjQ2NGQwYiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2Qz
Yz0KMjk0NTA5ZWM0OGE4ODBhOWIgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvaXB5dGhv
bi90ZW1wbGF0ZXMvbm90ZWJvb2suPQppcHluYgotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxp
emF0aW9ucy9pcHl0aG9uL3RlbXBsYXRlcy9ub3RlYm9vay5pcHluYgorKysgL2Rldi9udWxsCkBA
IC0xLDQzICswLDAgQEAKLXsKLSAibWV0YWRhdGEiOiB7Ci0gICJuYW1lIjogIiIsCi0gICJzaWdu
YXR1cmUiOiAic2hhMjU2OiVzIgotIH0sCi0gIm5iZm9ybWF0IjogMywKLSAibmJmb3JtYXRfbWlu
b3IiOiAwLAotICJ3b3Jrc2hlZXRzIjogWwotICB7Ci0gICAiY2VsbHMiOiBbCi0gICAgewotICAg
ICAiY2VsbF90eXBlIjogImhlYWRpbmciLAotICAgICAibGV2ZWwiOiAxLAotICAgICAibWV0YWRh
dGEiOiB7fSwKLSAgICAgInNvdXJjZSI6IFsKLSAgICAgICJXZWxjb21lIHRvIHRoZSBpbnRlcmFj
dGl2ZSBHYWxheHkgSVB5dGhvbiBOb3RlYm9vay4iCi0gICAgIF0KLSAgICB9LAotICAgIHsKLSAg
ICAgImNlbGxfdHlwZSI6ICJtYXJrZG93biIsCi0gICAgICJtZXRhZGF0YSI6IHt9LAotICAgICAi
c291cmNlIjogWwotICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhlIGRhdGFz
ZXQgbnVtYmVyLiBGb3IgZXhhbXBsZSwgYGBoYW49CmRsZSA9M0QgZ2V0KDQyKWBgLiIsCi0gICAg
ICAiVG8gc2F2ZSBkYXRhLCB3cml0ZSB5b3VyIGRhdGEgdG8gYSBmaWxlLCBhbmQgdGhlbiBjYWxs
IGBgcHV0KCdmaWxlbj0KYW1lLnR4dCcpYGAuIFRoZSBkYXRhc2V0IHdpbGwgdGhlbiBiZSBhdmFp
bGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9yeS4iLAotICAgICAgIk5vdGVib29rcyBjYW4gYmUg
c2F2ZWQgdG8gR2FsYXh5IGJ5IGNsaWNraW5nIHRoZSBsYXJnZSBncmVlbiBidXR0b249CiBhdCB0
aGUgdG9wIHJpZ2h0IG9mIHRoZSBJUHl0aG9uIGludGVyZmFjZS48YnI+IiwKLSAgICAgICJNb3Jl
IGhlbHAgYW5kIGluZm9ybWF0aW9ucyBjYW4gYmUgZm91bmQgb24gdGhlIHByb2plY3QgW3dlYnNp
dGVdKGh0PQp0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbikuIgotICAg
ICBdCi0gICAgfSwKLSAgICB7Ci0gICAgICJjZWxsX3R5cGUiOiAiY29kZSIsCi0gICAgICJjb2xs
YXBzZWQiOiBmYWxzZSwKLSAgICAgImlucHV0IjogWwotICAgICBdLAotICAgICAibGFuZ3VhZ2Ui
OiAicHl0aG9uIiwKLSAgICAgIm1ldGFkYXRhIjoge30sCi0gICAgICJvdXRwdXRzIjogW10sCi0g
ICAgICJwcm9tcHRfbnVtYmVyIjogMQotICAgIH0KLSAgIF0sCi0gICAibWV0YWRhdGEiOiB7fQot
ICB9Ci0gXQotfQoKZGlmZiAtciAzYzRmMmVjMjIyNDVkNjA3NTI0NmRjMDA2MjI4MmI3NjNiNDY0
ZDBiIC1yIDQwZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjPQoyOTQ1MDllYzQ4YTg4MGE5YiBsaWIvZ2Fs
YXh5L2NvbmZpZy5weQotLS0gYS9saWIvZ2FsYXh5L2NvbmZpZy5weQorKysgYi9saWIvZ2FsYXh5
L2NvbmZpZy5weQpAQCAtMzc3LDYgKzM3NywxMiBAQAogICAgICAgICAjIGRpcmVjdG9yeSB3aGVy
ZSB0aGUgdmlzdWFsaXphdGlvbi9yZWdpc3RyeSBzZWFyY2hlcyBmb3IgcGx1Z2lucwogICAgICAg
ICBzZWxmLnZpc3VhbGl6YXRpb25fcGx1Z2luc19kaXJlY3RvcnkgPTNEIGt3YXJncy5nZXQoCiAg
ICAgICAgICAgICAndmlzdWFsaXphdGlvbl9wbHVnaW5zX2RpcmVjdG9yeScsICdjb25maWcvcGx1
Z2lucy92aXN1YWxpemF0aT0Kb25zJyApCisgICAgICAgIGllX2RpcnMgPTNEIGt3YXJncy5nZXQo
ICdpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudF9wbHVnaW5zX2RpcmVjdG9yeT0KJywgTm9uZSApCisg
ICAgICAgIGlmIGllX2RpcnMgYW5kIG5vdCBzZWxmLnZpc3VhbGl6YXRpb25fcGx1Z2luc19kaXJl
Y3Rvcnk6CisgICAgICAgICAgICBzZWxmLnZpc3VhbGl6YXRpb25fcGx1Z2luc19kaXJlY3Rvcnkg
PTNEIGllX2RpcnMKKyAgICAgICAgZWxpZiBpZV9kaXJzOgorICAgICAgICAgICAgc2VsZi52aXN1
YWxpemF0aW9uX3BsdWdpbnNfZGlyZWN0b3J5ICs9M0QgIiwlcyIgJSBpZV9kaXJzCisKICAgICAg
ICAgc2VsZi5wcm94eV9zZXNzaW9uX21hcCA9M0Qgc2VsZi5yZXNvbHZlX3BhdGgoIGt3YXJncy5n
ZXQoICJkeW5hbWljPQpfcHJveHlfc2Vzc2lvbl9tYXAiLCAiZGF0YWJhc2Uvc2Vzc2lvbl9tYXAu
c3FsaXRlIiApICkKICAgICAgICAgc2VsZi5tYW5hZ2VfZHluYW1pY19wcm94eSA9M0Qgc3RyaW5n
X2FzX2Jvb2woIGt3YXJncy5nZXQoICJkeW5hbWljPQpfcHJveHlfbWFuYWdlIiwgIlRydWUiICkg
KSAgIyBTZXQgdG8gZmFsc2UgaWYgYmVpbmcgbGF1bmNoZWQgZXh0ZXJuYWxseQogICAgICAgICBz
ZWxmLmR5bmFtaWNfcHJveHlfYmluZF9wb3J0ID0zRCBpbnQoIGt3YXJncy5nZXQoICJkeW5hbWlj
X3Byb3h5X2I9CmluZF9wb3J0IiwgIjg4MDAiICkgKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9n
YWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy81OTFmOGZhZTYwMTYvCkNoYW5nZXNldDogICA1
OTFmOGZhZTYwMTYKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0x
OCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgVXNlIG5ld2VyLXN0eWxlIEdhbGF4eSBjb25m
aWd1cmF0aW9uIG9mIGludGVyYWN0aXZlIGVudmlyb25tZW49CnRzLgpTZXR1cCBhIHNhbXBsZSBm
aWxlIGFuZCBmYWxsYmFjayBvbiBpdCBpZiBhIG1hdGVyaWFsaXplZCAuaW5pIGlzbid0IHByZXNl
bnQ9Ci4gVXNlIC5pbmkgaW5zdGVhZCBvZiAuY29uZiBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUg
cmVzdCBvZiB0aGUgY29uZmlnIGRpcj0KZWN0b3J5LgpBZmZlY3RlZCAjOiAgMyBmaWxlcwoKZGlm
ZiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYzI5NDUwOWVjNDhhODgwYTliIC1yIDU5MWY4ZmFl
NjAxNjUxZjIzYTA5YzQxPQo5OTY2MmU2NzVkYTVhMjdjNyBjb25maWcvcGx1Z2lucy9pbnRlcmFj
dGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9jb25maWcvaXA9Cnl0aG9uLmNvbmYKLS0tIGEvY29u
ZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vY29uZmlnL2lweXRo
b24uY29uZgorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotW21haW5dCi1hcGFjaGVfdXJs
cyA9M0QgRmFsc2UKLXBhc3N3b3JkX2F1dGggPTNEIEZhbHNlCi1zc2wgPTNEIEZhbHNlCi0KLVtk
b2NrZXJdCi1jb21tYW5kID0zRCBkb2NrZXIKLWltYWdlID0zRCBiZ3J1ZW5pbmcvZG9ja2VyLWlw
eXRob24tbm90ZWJvb2sKLQoKZGlmZiAtciA0MGY3Zjk0NDA5MDA3OWQ0NGI0N2QzYzI5NDUwOWVj
NDhhODgwYTliIC1yIDU5MWY4ZmFlNjAxNjUxZjIzYTA5YzQxPQo5OTY2MmU2NzVkYTVhMjdjNyBj
b25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9jb25maWcvaXA9
Cnl0aG9uLmluaS5zYW1wbGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy9pbnRl
cmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi5pbmkuc2E9Cm1wbGUK
QEAgLTAsMCArMSw5IEBACitbbWFpbl0KK2FwYWNoZV91cmxzID0zRCBGYWxzZQorcGFzc3dvcmRf
YXV0aCA9M0QgRmFsc2UKK3NzbCA9M0QgRmFsc2UKKworW2RvY2tlcl0KK2NvbW1hbmQgPTNEIGRv
Y2tlcgoraW1hZ2UgPTNEIGJncnVlbmluZy9kb2NrZXItaXB5dGhvbi1ub3RlYm9vaworCgpkaWZm
IC1yIDQwZjdmOTQ0MDkwMDc5ZDQ0YjQ3ZDNjMjk0NTA5ZWM0OGE4ODBhOWIgLXIgNTkxZjhmYWU2
MDE2NTFmMjNhMDljNDE9Cjk5NjYyZTY3NWRhNWEyN2M3IGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0
aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3RlbXBsYXRlcz0KL2llLm1ha28KLS0tIGEvY29uZmln
L3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vdGVtcGxhdGVzL2llLm1h
a28KKysrIGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24v
dGVtcGxhdGVzL2llLm1ha28KQEAgLTMwLDcgKzMwLDEwIEBACiAgICAgc2VsZi5hdHRyLm91cl9j
b25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2luX3BhdGgsICJjb25maWciKQogICAgIHNl
bGYuYXR0ci5vdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2luX3BhdGgsICJ0
ZW1wbGF0ZXMiKQogICAgIHNlbGYuYXR0ci52aXpfY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2Fm
ZUNvbmZpZ1BhcnNlcihkZWZhdWx0X2RpY3QpCi0gICAgc2VsZi5hdHRyLnZpel9jb25maWcucmVh
ZCggb3MucGF0aC5qb2luKCBzZWxmLmF0dHIub3VyX2NvbmZpZ19kaXIsIHNlbD0KZi5hdHRyLnZp
el9pZCArICIuY29uZiIgKSApCisgICAgY29uZl9wYXRoID0zRCBvcy5wYXRoLmpvaW4oIHNlbGYu
YXR0ci5vdXJfY29uZmlnX2Rpciwgc2VsZi5hdHRyLnZpel9pZD0KICsgIi5pbmkiICkKKyAgICBp
ZiBub3Qgb3MucGF0aC5leGlzdHMoIGNvbmZfcGF0aCApOgorICAgICAgICBjb25mX3BhdGggPTNE
ICIlcy5zYW1wbGUiICUgY29uZl9wYXRoCisgICAgc2VsZi5hdHRyLnZpel9jb25maWcucmVhZCgg
Y29uZl9wYXRoICkKICAgICAjIFN0b3JlIHNvbWUgdmFyaWFibGVzIHdlIHdhbnQgYnkgZGVmYXVs
dAogICAgIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5n
ZXRib29sZWFuKCJtYWluIiwgInA9CmFzc3dvcmRfYXV0aCIpCiAgICAgc2VsZi5hdHRyLkFQQUNI
RV9VUkxTID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgImFwYT0K
Y2hlX3VybHMiKQoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy9kMTc5ZGY3NDFmZjUvCkNoYW5nZXNldDogICBkMTc5ZGY3NDFmZjUKVXNlcjogICAg
ICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOCAyMjozODowNCswMDowMApTdW1t
YXJ5OiAgICAgVXBkYXRlIHBsdWdpbiBmcmFtZXdvcmsgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB2
aXogYW5kIElFIGZyYW09CmV3b3Jrcy4KVXBkYXRlIElQeXRob24gYWNjb3JkaW5nbHkuCkFmZmVj
dGVkICM6ICAzIGZpbGVzCgpkaWZmIC1yIDU5MWY4ZmFlNjAxNjUxZjIzYTA5YzQxOTk2NjJlNjc1
ZGE1YTI3YzcgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY9CjRmMmFhYTgxN2U0NDA1MDQ3IGNv
bmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL2NvbmZpZy9pcD0K
eXRob24ueG1sCi0tLSBhL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9p
cHl0aG9uL2NvbmZpZy9pcHl0aG9uLnhtbAorKysgYi9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2
ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi54bWwKQEAgLTEsNiArMSw2IEBA
CiA8P3htbCB2ZXJzaW9uPTNEIjEuMCIgZW5jb2Rpbmc9M0QiVVRGLTgiPz4KLTwhRE9DVFlQRSB2
aXN1YWxpemF0aW9uIFNZU1RFTSAiLi4vLi4vaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmR0ZCI+
Ci08dmlzdWFsaXphdGlvbiBuYW1lPTNEIklQeXRob24iPgorPCFET0NUWVBFIGludGVyYWN0aXZl
X2Vudmlyb25tZW50IFNZU1RFTSAiLi4vLi4vaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmQ9CnRk
Ij4KKzxpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCBuYW1lPTNEIklQeXRob24iPjxkYXRhX3NvdXJj
ZXM+PGRhdGFfc291cmNlPjxtb2RlPQpsX2NsYXNzPkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb248
L21vZGVsX2NsYXNzPgpAQCAtMTMsNCArMTMsNCBAQAogICAgICAgICA8cGFyYW0gdHlwZT0zRCJk
YXRhc2V0IiB2YXJfbmFtZV9pbl90ZW1wbGF0ZT0zRCJoZGEiIHJlcXVpcmVkPTNEInQ9CnJ1ZSI+
ZGF0YXNldF9pZDwvcGFyYW0+PC9wYXJhbXM+PHRlbXBsYXRlPmlweXRob24ubWFrbzwvdGVtcGxh
dGU+Ci08L3Zpc3VhbGl6YXRpb24+Cis8L2ludGVyYWN0aXZlX2Vudmlyb25tZW50PgoKZGlmZiAt
ciA1OTFmOGZhZTYwMTY1MWYyM2EwOWM0MTk5NjYyZTY3NWRhNWEyN2M3IC1yIGQxNzlkZjc0MWZm
NTE4ZjA5ZmM4MmE2PQo0ZjJhYWE4MTdlNDQwNTA0NyBjb25maWcvcGx1Z2lucy92aXN1YWxpemF0
aW9ucy92aXN1YWxpemF0aW9uLmR0ZAotLS0gYS9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9u
cy92aXN1YWxpemF0aW9uLmR0ZAorKysgYi9jb25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy92
aXN1YWxpemF0aW9uLmR0ZApAQCAtMSw1ICsxLDYgQEAKIDwhLS0gZWFjaCB2aXN1YWxpemF0aW9u
IG11c3QgaGF2ZSBhIHRlbXBsYXRlIChhbGwgb3RoZXIgZWxlbWVudHMgYXJlIG9wdGlvPQpuYWwp
IC0tPjwhRUxFTUVOVCB2aXN1YWxpemF0aW9uIChkZXNjcmlwdGlvbiosZGF0YV9zb3VyY2VzKixw
YXJhbXMqLHRlbXBsYXQ9CmVfcm9vdCosdGVtcGxhdGUscmVuZGVyX3RhcmdldCopPgorPCFFTEVN
RU5UIGludGVyYWN0aXZlX2Vudmlyb25tZW50IChkZXNjcmlwdGlvbiosZGF0YV9zb3VyY2VzKixw
YXJhbXMqLHRlbXA9CmxhdGVfcm9vdCosdGVtcGxhdGUscmVuZGVyX3RhcmdldCopPjwhLS0gdmlz
dWFsaXphdGlvbgogICAgICAgICBuYW1lOiB0aGUgdGl0bGUvZGlzcGxheSBuYW1lIG9mIHRoZSB2
aXN1YWxpemF0aW9uIChlLmcuICdUcmFja3N0ZXI9CicsICdGYXN0cSBTdGF0cycsIGV0Yy4pIFJF
UVVJUkVECiAgICAgICAgIGRpc2FibGVkOiBpZiBpbmNsdWRlZCAodmFsdWUgZG9lcyBub3QgbWF0
dGVyKSwgdGhpcyBhdHRyaWJ1dGUgd2lsbD0KIHByZXZlbnQgdGhlIHZpc3VhbGl6YXRpb24gYmVp
bmcgbG9hZGVkCgpkaWZmIC1yIDU5MWY4ZmFlNjAxNjUxZjIzYTA5YzQxOTk2NjJlNjc1ZGE1YTI3
YzcgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY9CjRmMmFhYTgxN2U0NDA1MDQ3IGxpYi9nYWxh
eHkvdmlzdWFsaXphdGlvbi9yZWdpc3RyeS5weQotLS0gYS9saWIvZ2FsYXh5L3Zpc3VhbGl6YXRp
b24vcmVnaXN0cnkucHkKKysrIGIvbGliL2dhbGF4eS92aXN1YWxpemF0aW9uL3JlZ2lzdHJ5LnB5
CkBAIC00MDEsNiArNDAxLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm5lZCA9M0Qg
e30KPTIwCisgICAgICAgICMgbWFpbiB0YWcgc3BlY2lmaWVzIHBsdWdpbiB0eXBlICh2aXN1YWxp
emF0aW9uIG9yCisgICAgICAgICMgaW50ZXJhY3RpdmVfZW52aW9ybm1lbnQpLgorICAgICAgICBy
ZXR1cm5lZFsgJ3BsdWdpbl90eXBlJyBdID0zRCB4bWxfdHJlZS50YWcKKwogICAgICAgICAjIGEg
dGV4dCBkaXNwbGF5IG5hbWUgZm9yIGVuZCB1c2VyIGxpbmtzCiAgICAgICAgIHJldHVybmVkWyAn
bmFtZScgXSA9M0QgeG1sX3RyZWUuYXR0cmliLmdldCggJ25hbWUnLCBOb25lICkKICAgICAgICAg
aWYgbm90IHJldHVybmVkWyAnbmFtZScgXToKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5
L2dhbGF4eS1jZW50cmFsL2NvbW1pdHMvZWY0YTVlYzljNWNjLwpDaGFuZ2VzZXQ6ICAgZWY0YTVl
YzljNWNjClVzZXI6ICAgICAgICBqbWNoaWx0b24KRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6
Mzg6MDQrMDA6MDAKU3VtbWFyeTogICAgIFJlZmFjdG9yIGludGVyYWN0aXZlIGVudmlyb25tZW50
IHBsdWdpbiBmcmFtZXdvcmsgb3V0IG9mIElQeXRoPQpvbiBhbmQgaW50byBHYWxheHkuClJlbHkg
b24gbW9yZSBQeXRob24gYW5kIGxlc3Mgb24gbWFrbywgc2V0dXAgYSBzbWFsbCBzaGFyZWQgY29t
bW9uIG1ha28gZmlsZT0KIGluIGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50
cy9jb21tb24vaWUubWFrby4gTW92ZSBpZS5qcyBpbnRvPQogY2xpZW50L2dhbGF4eS9zY3JpcHRz
L2dhbGF4eS5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMuanMgYW5kIGV4dHJhY3QgSVB5dGg9Cm9u
J3MgcmVxdWlyZSBjb25maWcgb3V0IHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBkaXJlY3RseSByZWZl
cmVuY2UgY2xpZW50L2dhbD0KYXh5L3NjcmlwdHMvZ2FsYXh5LmludGVyYWN0aXZlX2Vudmlyb25t
ZW50cy5qcyAoSSBkb3VidCBpdCBpcyB3aGVyZSB0aGF0IGZpPQpsZSBhY3R1YWxseSBzaG91bGQg
YmUpLgpBZmZlY3RlZCAjOiAgMTEgZmlsZXMKCmRpZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgy
YTY0ZjJhYWE4MTdlNDQwNTA0NyAtciBlZjRhNWVjOWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDczOTMx
NjVjNWU4YjkgY2xpZW50L2dhbGF4eS9zY3JpcHRzL2dhbGF4eS5pbnRlcmFjdGl2ZV9lbnZpcm9u
bWVudHMuanMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGllbnQvZ2FsYXh5L3NjcmlwdHMvZ2FsYXh5
LmludGVyYWN0aXZlX2Vudmlyb25tZW50cy5qcwpAQCAtMCwwICsxLDU5IEBACisvKioKKyAqIElu
dGVybmFsIGZ1bmN0aW9uIHRvIHJlbW92ZSBjb250ZW50IGZyb20gdGhlIG1haW4gYXJlYSBhbmQg
YWRkIHRoZSBub3RlPQpib29rLgorICogTm90IGlkZW1wb3RlbnQKKyAqLworZnVuY3Rpb24gYXBw
ZW5kX25vdGVib29rKHVybCl7CisgICAgY2xlYXJfbWFpbl9hcmVhKCk7CisgICAgJCgnI21haW4n
KS5hcHBlbmQoJzxpZnJhbWUgZnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2VhbWxlc3Mi
IHN0eT0KbGU9M0Qid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIg
c2Nyb2xsaW5nPTNEIm5vIiBzcmM9M0QiPQonKyB1cmwgKyciPjwvaWZyYW1lPicKKyAgICApOwor
fQorCitmdW5jdGlvbiBjbGVhcl9tYWluX2FyZWEoKXsKKyAgICAkKCcjc3Bpbm5lcicpLnJlbW92
ZSgpOworICAgICQoJyNtYWluJykuY2hpbGRyZW4oKS5yZW1vdmUoKTsKK30KKworZnVuY3Rpb24g
ZGlzcGxheV9zcGlubmVyKCl7CisgICAgICAgICQoJyNtYWluJykuYXBwZW5kKCc8aW1nIGlkPTNE
InNwaW5uZXIiIHNyYz0zRCInICsgZ2FsYXh5X3Jvb3QgKyAnLz0Kc3RhdGljL3N0eWxlL2xhcmdl
c3Bpbm5lci5naWYiIHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRvO3RvcDow
PQo7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7Ij4nKTsKK30KKworCisvKioKKyAqIFRlc3QgYXZh
aWxhYmlsaXR5IG9mIGEgVVJMLCBhbmQgY2FsbCBhIGNhbGxiYWNrIHdoZW4gZG9uZS4KKyAqIGh0
dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzI1MzkwMjA2LzM0NzM2OAorICogQHBhcmFtIHtTdHJp
bmd9IHVybDogVVJMIHRvIHRlc3QgYXZhaWxhYmlsaXR5IG9mLiBNdXN0IHJldHVybiBhIDIwMCAo
MzA9CjItPjIwMCBpcyBPSykuCisgKiBAcGFyYW0ge1N0cmluZ30gY2FsbGJhY2s6IGZ1bmN0aW9u
IHRvIGNhbGwgb25jZSBzdWNjZXNzZnVsbHkgY29ubmVjdGVkLgorICoKKyAqLworZnVuY3Rpb24g
dGVzdF9pZV9hdmFpbGFiaWxpdHkodXJsLCBzdWNjZXNzX2NhbGxiYWNrKXsKKyAgICB2YXIgcmVx
dWVzdF9jb3VudCA9M0QgMDsKKyAgICBkaXNwbGF5X3NwaW5uZXIoKTsKKyAgICBpbnRlcnZhbCA9
M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAg
IHVybDogdXJsLAorICAgICAgICAgICAgeGhyRmllbGRzOiB7CisgICAgICAgICAgICAgICAgd2l0
aENyZWRlbnRpYWxzOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdHlwZTogIkdF
VCIsCisgICAgICAgICAgICB0aW1lb3V0OiA1MDAsCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5j
dGlvbigpeworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0ZWQgdG8gSUUsIHJl
dHVybmluZyIpOworICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAg
ICAgICAgICAgICAgIHN1Y2Nlc3NfY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBlcnJvcjogZnVuY3Rpb24oanF4aHIsIHN0YXR1cywgZXJyb3IpeworICAgICAgICAgICAg
ICAgIHJlcXVlc3RfY291bnQrKzsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiUmVxdWVz
dCAiICsgcmVxdWVzdF9jb3VudCk7CisgICAgICAgICAgICAgICAgaWYocmVxdWVzdF9jb3VudCA+
IDMwKXsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CisgICAg
ICAgICAgICAgICAgICAgIGNsZWFyX21haW5fYXJlYSgpOworICAgICAgICAgICAgICAgICAgICB0
b2FzdHIuZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3Qg
dG8gSUUsIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdD0Kb3IiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIkVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0
cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtPQppc3MnOiBmYWxzZX0KKyAgICAgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0sIDEwMDApOworfQoKZGlmZiAtciBkMTc5ZGY3NDFmZjUxOGYwOWZjODJhNjRm
MmFhYTgxN2U0NDA1MDQ3IC1yIGVmNGE1ZWM5YzVjY2EwMzg5OTg3MTJiPQpiZDQwNzM5MzE2NWM1
ZThiOSBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvY29tbW9uL3RlbXBs
YXRlcy89CmllLm1ha28KLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy9pbnRlcmFj
dGl2ZV9lbnZpcm9ubWVudHMvY29tbW9uL3RlbXBsYXRlcy9pZS5tYWtvCkBAIC0wLDAgKzEsMzEg
QEAKKzwlZGVmIG5hbWU9M0QiZGVmYXVsdF9qYXZhc2NyaXB0X3ZhcmlhYmxlcygpIj4KKy8vIEds
b2JhbHMKKworLy8gRm9sbG93aW5nIHRocmVlIGFyZSBmb3Igb2xkZXItc3R5bGUgSUUgcHJveGll
cywgbmV3ZXIgZHluYW1pYyBHYWxheHkgcHI9Cm94eQorLy8gZG9lcyBub3QgdXNlIHRoZXNlLgor
aWVfcGFzc3dvcmRfYXV0aCA9M0QgJHsgaWVfcmVxdWVzdC5qYXZhc2NyaXB0X2Jvb2xlYW4oaWVf
cmVxdWVzdC5hdHRyLlBBU1M9CldPUkRfQVVUSCkgfTsKK2llX2FwYWNoZV91cmxzID0zRCAkeyBp
ZV9yZXF1ZXN0LmphdmFzY3JpcHRfYm9vbGVhbihpZV9yZXF1ZXN0LmF0dHIuQVBBQ0hFPQpfVVJM
UykgfTsKK2llX3Bhc3N3b3JkID0zRCAnJHsgaWVfcmVxdWVzdC5hdHRyLm5vdGVib29rX3B3IH0n
OworCisKK3ZhciBnYWxheHlfcm9vdCA9M0QgJyR7IGllX3JlcXVlc3QuYXR0ci5yb290IH0nOwor
dmFyIGFwcF9yb290ID0zRCAnJHsgaWVfcmVxdWVzdC5hdHRyLmFwcF9yb290IH0nOworPC8lZGVm
PgorCisKKzwlZGVmIG5hbWU9M0QibG9hZF9kZWZhdWx0X2pzKCkiPgorJHtoLmNzcyggJ2Jhc2Un
ICkgfQorJHtoLmpzKCAnbGlicy9qcXVlcnkvanF1ZXJ5JywKKyAgICAgICAgJ2xpYnMvdG9hc3Ry
JywKKyAgICAgICAgJ2xpYnMvcmVxdWlyZScpfQorPC8lZGVmPgorCis8JWRlZiBuYW1lPTNEInBs
dWdpbl9yZXF1aXJlX2NvbmZpZygpIj4KK3JlcXVpcmUuY29uZmlnKHsKKyAgICBiYXNlVXJsOiBh
cHBfcm9vdCwKKyAgICBwYXRoczogeworICAgICAgICAicGx1Z2luIiA6IGFwcF9yb290ICsgImpz
LyIsCisgICAgICAgICJpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMiOiAiJHtoLnVybF9mb3IoJy9z
dGF0aWMvc2NyaXB0cy9nYWxheHkuaT0KbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMnKX0iLAorICAg
IH0sCit9KTsKKzwvJWRlZj4KCmRpZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY0ZjJhYWE4
MTdlNDQwNTA0NyAtciBlZjRhNWVjOWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDczOTMxNjVjNWU4Yjkg
Y29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vc3RhdGljL2pz
PQovaWUuanMKLS0tIGEvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lw
eXRob24vc3RhdGljL2pzL2llLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoq
Ci0gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byByZW1vdmUgY29udGVudCBmcm9tIHRoZSBtYWluIGFy
ZWEgYW5kIGFkZCB0aGUgbm90ZT0KYm9vay4KLSAqIE5vdCBpZGVtcG90ZW50Ci0gKi8KLWZ1bmN0
aW9uIGFwcGVuZF9ub3RlYm9vayh1cmwpewotICAgIGNsZWFyX21haW5fYXJlYSgpOwotICAgICQo
JyNtYWluJykuYXBwZW5kKCc8aWZyYW1lIGZyYW1lQm9yZGVyPTNEIjAiIHNlYW1sZXNzPTNEInNl
YW1sZXNzIiBzdHk9CmxlPTNEIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93Omhp
ZGRlbjsiIHNjcm9sbGluZz0zRCJubyIgc3JjPTNEIj0KJysgdXJsICsnIj48L2lmcmFtZT4nCi0g
ICAgKTsKLX0KLQotZnVuY3Rpb24gY2xlYXJfbWFpbl9hcmVhKCl7Ci0gICAgJCgnI3NwaW5uZXIn
KS5yZW1vdmUoKTsKLSAgICAkKCcjbWFpbicpLmNoaWxkcmVuKCkucmVtb3ZlKCk7Ci19Ci0KLWZ1
bmN0aW9uIGRpc3BsYXlfc3Bpbm5lcigpewotICAgICAgICAkKCcjbWFpbicpLmFwcGVuZCgnPGlt
ZyBpZD0zRCJzcGlubmVyIiBzcmM9M0QiJyArIGdhbGF4eV9yb290ICsgJy89CnN0YXRpYy9zdHls
ZS9sYXJnZXNwaW5uZXIuZ2lmIiBzdHlsZT0zRCJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46YXV0
bzt0b3A6MD0KO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowOyI+Jyk7Ci19Ci0KLQotLyoqCi0gKiBU
ZXN0IGF2YWlsYWJpbGl0eSBvZiBhIFVSTCwgYW5kIGNhbGwgYSBjYWxsYmFjayB3aGVuIGRvbmUu
Ci0gKiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8yNTM5MDIwNi8zNDczNjgKLSAqIEBwYXJh
bSB7U3RyaW5nfSB1cmw6IFVSTCB0byB0ZXN0IGF2YWlsYWJpbGl0eSBvZi4gTXVzdCByZXR1cm4g
YSAyMDAgKDMwPQoyLT4yMDAgaXMgT0spLgotICogQHBhcmFtIHtTdHJpbmd9IGNhbGxiYWNrOiBm
dW5jdGlvbiB0byBjYWxsIG9uY2Ugc3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZC4KLSAqCi0gKi8KLWZ1
bmN0aW9uIHRlc3RfaWVfYXZhaWxhYmlsaXR5KHVybCwgc3VjY2Vzc19jYWxsYmFjayl7Ci0gICAg
dmFyIHJlcXVlc3RfY291bnQgPTNEIDA7Ci0gICAgZGlzcGxheV9zcGlubmVyKCk7Ci0gICAgaW50
ZXJ2YWwgPTNEIHNldEludGVydmFsKGZ1bmN0aW9uKCl7Ci0gICAgICAgICQuYWpheCh7Ci0gICAg
ICAgICAgICB1cmw6IHVybCwKLSAgICAgICAgICAgIHhockZpZWxkczogewotICAgICAgICAgICAg
ICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHR5
cGU6ICJHRVQiLAotICAgICAgICAgICAgdGltZW91dDogNTAwLAotICAgICAgICAgICAgc3VjY2Vz
czogZnVuY3Rpb24oKXsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiQ29ubmVjdGVkIHRv
IElFLCByZXR1cm5pbmciKTsKLSAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFs
KTsKLSAgICAgICAgICAgICAgICBzdWNjZXNzX2NhbGxiYWNrKCk7Ci0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxeGhyLCBzdGF0dXMsIGVycm9yKXsKLSAgICAg
ICAgICAgICAgICByZXF1ZXN0X2NvdW50Kys7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5sb2co
IlJlcXVlc3QgIiArIHJlcXVlc3RfY291bnQpOwotICAgICAgICAgICAgICAgIGlmKHJlcXVlc3Rf
Y291bnQgPiAzMCl7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwp
OwotICAgICAgICAgICAgICAgICAgICBjbGVhcl9tYWluX2FyZWEoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdG9hc3RyLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBj
b25uZWN0IHRvIElFLCBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXQ9Cm9yIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJFcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICB7J2Nsb3NlQnV0
dG9uJzogdHJ1ZSwgJ3RpbWVPdXQnOiAyMDAwMCwgJ3RhcFRvRGlzbT0KaXNzJzogZmFsc2V9Ci0g
ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLSAgICB9LCAxMDAwKTsKLX0KCmRpZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlm
YzgyYTY0ZjJhYWE4MTdlNDQwNTA0NyAtciBlZjRhNWVjOWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDcz
OTMxNjVjNWU4YjkgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRo
b24vdGVtcGxhdGVzPQovaWUubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9l
bnZpcm9ubWVudHMvaXB5dGhvbi90ZW1wbGF0ZXMvaWUubWFrbworKysgL2Rldi9udWxsCkBAIC0x
LDE2NSArMCwwIEBACi08JSEKLWltcG9ydCBvcwotaW1wb3J0IHlhbWwKLWltcG9ydCBzaGxleAot
aW1wb3J0IHJhbmRvbQotaW1wb3J0IHNodXRpbAotaW1wb3J0IGhhc2hsaWIKLWltcG9ydCBzdWJw
cm9jZXNzCi1pbXBvcnQgQ29uZmlnUGFyc2VyCi0KLSU+Ci0KLTwlZGVmIG5hbWU9M0Qic2V0X2lk
KG5hbWUpIj4KLTwlCi0gICAgIiIiCi0gICAgICAgIElFcyBtdXN0IHJlZ2lzdGVyIHRoZWlyIG5h
bWUsIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNvbnN0cnVjdGluZyBzdD0KcmluZ3MKLQotICAgICAg
ICBBZGRpdGlvbmFsbHkgdGhpcyBtZXRob2Qgc3RvcmVzIGxvdHMgb2YgY29uZmlnIG9wdGlvbnMg
d2Ugd2FudCB0byA9CmFjY2VzcyBlbHNld2hlcmUuCi0gICAgIiIiCi0gICAgc2VsZi5hdHRyLnZp
el9pZCA9M0QgbmFtZQotICAgIHNlbGYuYXR0ci5oaXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0
eS5lbmNvZGVfaWQoIHRyYW5zLmhpc3RvcnkuaWQgKQotICAgIHNlbGYuYXR0ci5wcm94eV9yZXF1
ZXN0ID0zRCB0cmFucy5hcHAucHJveHlfbWFuYWdlci5zZXR1cF9wcm94eSggdHJhbnM9CiApCi0g
ICAgc2VsZi5hdHRyLnByb3h5X3VybCA9M0Qgc2VsZi5hdHRyLnByb3h5X3JlcXVlc3RbICdwcm94
eV91cmwnIF0KLSAgICBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZyA9M0QgdHJhbnMuYXBwLmNvbmZp
ZwotICAgIHNlbGYuYXR0ci5nYWxheHlfcm9vdF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aChzZWxm
LmF0dHIuZ2FsYXh5X2NvbmZpZy49CnJvb3QpCi0gICAgc2VsZi5hdHRyLnJvb3QgPTNEIGgudXJs
X2ZvcigiLyIpCi0gICAgc2VsZi5hdHRyLmFwcF9yb290ID0zRCBzZWxmLmF0dHIucm9vdCArICJw
bHVnaW5zL3Zpc3VhbGl6YXRpb25zLyIgKyBzZT0KbGYuYXR0ci52aXpfaWQgKyAiL3N0YXRpYy8i
Ci0KLSAgICAjIFN0b3JlIG91ciB0ZW1wbGF0ZSBhbmQgY29uZmlndXJhdGlvbiBwYXRoCi0gICAg
c2VsZi5hdHRyLm91cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2luX3BhdGgsICJj
b25maWciKQotICAgIHNlbGYuYXR0ci5vdXJfdGVtcGxhdGVfZGlyID0zRCBvcy5wYXRoLmpvaW4o
cGx1Z2luX3BhdGgsICJ0ZW1wbGF0ZXMiKQotICAgIHNlbGYuYXR0ci52aXpfY29uZmlnID0zRCBD
b25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcihkZWZhdWx0X2RpY3QpCi0gICAgY29uZl9wYXRo
ID0zRCBvcy5wYXRoLmpvaW4oIHNlbGYuYXR0ci5vdXJfY29uZmlnX2Rpciwgc2VsZi5hdHRyLnZp
el9pZD0KICsgIi5pbmkiICkKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIGNvbmZfcGF0aCAp
OgotICAgICAgICBjb25mX3BhdGggPTNEICIlcy5zYW1wbGUiICUgY29uZl9wYXRoCi0gICAgc2Vs
Zi5hdHRyLnZpel9jb25maWcucmVhZCggY29uZl9wYXRoICkKLSAgICAjIFN0b3JlIHNvbWUgdmFy
aWFibGVzIHdlIHdhbnQgYnkgZGVmYXVsdAotICAgIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIID0z
RCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInA9CmFzc3dvcmRfYXV0
aCIpCi0gICAgc2VsZi5hdHRyLkFQQUNIRV9VUkxTID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5n
ZXRib29sZWFuKCJtYWluIiwgImFwYT0KY2hlX3VybHMiKQotICAgIHNlbGYuYXR0ci5TU0xfVVJM
UyA9M0Qgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzc2wiKQotICAg
IHNlbGYuYXR0ci5QT1JUID0zRCBzZWxmLmF0dHIucHJveHlfcmVxdWVzdFsgJ3Byb3hpZWRfcG9y
dCcgXQotICAgIHNlbGYuYXR0ci5IT1NUID0zRCByZXF1ZXN0Lmhvc3QucnNwbGl0KCc6JywgMSlb
MF0KLSU+Ci08LyVkZWY+Ci0KLTwlZGVmIG5hbWU9M0Qid3JpdGVfY29uZl9maWxlKG91dHB1dF9k
aXJlY3RvcnksIGV4dHJhPTNEe30pIj4KLTwlCi0gICAgIiIiCi0gICAgICAgIEJ1aWxkIHVwIGEg
Y29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgc3RhbmRhcmQgZm9yIEFMTCBJRXMuCi0KLSAgICAg
ICAgVE9ETzogcmVwbGFjZSBoYXNoZWQgcGFzc3dvcmQgd2l0aCBwbGFpbnRleHQuCi0gICAgIiIi
Ci0gICAgY29uZl9maWxlID0zRCB7Ci0gICAgICAgICdoaXN0b3J5X2lkJzogc2VsZi5hdHRyLmhp
c3RvcnlfaWQsCi0gICAgICAgICdhcGlfa2V5JzogZ2V0X2FwaV9rZXkoKSwKLSAgICAgICAgJ3Jl
bW90ZV9ob3N0JzogcmVxdWVzdC5yZW1vdGVfYWRkciwKLSAgICAgICAgJ2RvY2tlcl9wb3J0Jzog
c2VsZi5hdHRyLlBPUlQsCi0gICAgICAgICdjb3JzX29yaWdpbic6IHJlcXVlc3QuaG9zdF91cmws
Ci0gICAgfQotCi0gICAgaWYgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ2FsYXh5X2luZnJhc3Ry
dWN0dXJlX3VybF9zZXQ6Ci0gICAgICAgIGNvbmZfZmlsZVsnZ2FsYXh5X3VybCddID0zRCBzZWxm
LmF0dHIuZ2FsYXh5X2NvbmZpZy5nYWxheHlfaW5mcmFzdD0KcnVjdHVyZV91cmwucnN0cmlwKCcv
JykgKyAnLycKLSAgICBlbHNlOgotICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0Qg
cmVxdWVzdC5hcHBsaWNhdGlvbl91cmwucnN0cmlwKCcvJykgKyA9CicvJwotICAgICAgICBjb25m
X2ZpbGVbJ2dhbGF4eV9wYXN0ZXJfcG9ydCddID0zRCBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5n
dWVzc189CmdhbGF4eV9wb3J0KCkKLQotICAgIGlmIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIOgot
ICAgICAgICAjIEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAotICAgICAgICBub3Rl
Ym9va19wd19zYWx0ID0zRCBzZWxmLmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDEyKQotICAg
ICAgICBub3RlYm9va19wdyA9M0Qgc2VsZi5nZW5lcmF0ZV9wYXNzd29yZChsZW5ndGg9M0QyNCkK
LSAgICAgICAgbSA9M0QgaGFzaGxpYi5zaGExKCkKLSAgICAgICAgbS51cGRhdGUoIG5vdGVib29r
X3B3ICsgbm90ZWJvb2tfcHdfc2FsdCApCi0gICAgICAgIGNvbmZfZmlsZVsnbm90ZWJvb2tfcGFz
c3dvcmQnXSA9M0QgJ3NoYTE6JXM6JXMnICUgKG5vdGVib29rX3B3X3NhbD0KdCwgbS5oZXhkaWdl
c3QoKSkKLSAgICAgICAgIyBTaG91bGQgd2UgdXNlIHBhc3N3b3JkIGJhc2VkIGNvbm5lY3Rpb24g
b3IgImRlZmF1bHQiIGNvbm5lY3Rpb24gPQpzdHlsZSBpbiBnYWxheHkKLSAgICBlbHNlOgotICAg
ICAgICBub3RlYm9va19wdyA9M0QgIk5vbmUiCi0KLSAgICAjIFNvbWUgd2lsbCBuZWVkIHRvIHBh
c3MgZXh0cmEgZGF0YQotICAgIGZvciBleHRyYV9rZXkgaW4gZXh0cmE6Ci0gICAgICAgIGNvbmZf
ZmlsZVtleHRyYV9rZXldID0zRCBleHRyYVtleHRyYV9rZXldCi0KLSAgICBzZWxmLmF0dHIubm90
ZWJvb2tfcHcgPTNEIG5vdGVib29rX3B3Ci0gICAgIyBXcml0ZSBjb25mCi0gICAgd2l0aCBvcGVu
KCBvcy5wYXRoLmpvaW4oIG91dHB1dF9kaXJlY3RvcnksICdjb25mLnlhbWwnICksICd3YicgKSBh
cyBoYT0KbmRsZToKLSAgICAgICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxlLCBk
ZWZhdWx0X2Zsb3dfc3R5bGU9M0RGYWxzZSkgKQotCi0lPgotPC8lZGVmPgotCi08JWRlZiBuYW1l
PTNEImdlbmVyYXRlX2hleChsZW5ndGgpIj4KLTwlCi0gICAgIiIiCi0gICAgICAgIEdlbmVyYXRl
IGEgaGV4IHN0cmluZwotICAgICIiIgotICAgIHJldHVybiAnJy5qb2luKHJhbmRvbS5jaG9pY2Uo
JzAxMjM0NTY3ODlhYmNkZWYnKSBmb3IgXyBpbiByYW5nZShsZW5ndGg9CikpCi0lPgotPC8lZGVm
PgotCi08JWRlZiBuYW1lPTNEImdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aCkiPgotPCUKLSAgICAi
IiIKLSAgICAgICAgR2VuZXJhdGUgYSByYW5kb20gYWxwaGFudW1lcmljIHBhc3N3b3JkCi0gICAg
IiIiCi0gICAgcmV0dXJuICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZmdo
aWprbG1ub3BxcnN0dXZ3eHl6JykgZj0Kb3IgXyBpbiByYW5nZShsZW5ndGgpKQotJT4KLTwvJWRl
Zj4KLQotPCVkZWYgbmFtZT0zRCJqYXZhc2NyaXB0X2Jvb2xlYW4ocHl0aG9uX2Jvb2xlYW4pIj4K
LTwlCi0gICAgIiIiCi0gICAgICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9v
bGVhbiBmb3IgdXNlIGluIEpTCi0gICAgIiIiCi0gICAgaWYgcHl0aG9uX2Jvb2xlYW46Ci0gICAg
ICAgIHJldHVybiAidHJ1ZSI7Ci0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICJmYWxzZSIKLSU+
Ci08LyVkZWY+Ci0KLQotPCVkZWYgbmFtZT0zRCJ1cmxfdGVtcGxhdGUodXJsX3RlbXBsYXRlKSI+
Ci08JQotICAgICIiIgotICAgICAgICBQcm9jZXNzIGEgVVJMIHRlbXBsYXRlCi0KLSAgICAgICAg
VGhlcmUgYXJlIHNldmVyYWwgdmFyaWFibGVzIGFjY2Vzc2libGUgdG8gdGhlIHVzZXI6Ci0KLSAg
ICAgICAgICAgIC0gJHtQUk9YWV9VUkx9IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBkeW5hbWljYWxs
eSBjcmVhdGUgcHJveHkKLSAgICAgICAgICAgIC0gJHtQT1JUfSB3aWxsIGJlIHJlcGxhY2VkIHdp
dGggdGhlIHBvcnQgdGhlIGRvY2tlciBpbWFnZSBpcyBhPQp0dGFjaGVkIHRvCi0gICAgIiIiCi0g
ICAgdXJsID0zRCB1cmxfdGVtcGxhdGUucmVwbGFjZSgnJHtQUk9YWV9VUkx9Jywgc3RyKHNlbGYu
YXR0ci5wcm94eV91cmwpKT0KIFwKLSAgICAgICAgICAgIC5yZXBsYWNlKCcke1BPUlR9Jywgc3Ry
KHNlbGYuYXR0ci5QT1JUKSkKLSAgICByZXR1cm4gdXJsCi0lPgotPC8lZGVmPgotCi0KLTwlZGVm
IG5hbWU9M0QiZG9ja2VyX2NtZCh0ZW1wX2RpcikiPgotPCUKLSAgICAiIiIKLSAgICAgICAgR2Vu
ZXJhdGUgYW5kIHJldHVybiB0aGUgZG9ja2VyIGNvbW1hbmQgdG8gZXhlY3V0ZQotICAgICIiIgot
ICAgIHJldHVybiAnJXMgcnVuIC1kIC0tc2lnLXByb3h5PTNEdHJ1ZSAtcCAlczolcyAtdiAiJXM6
L2ltcG9ydC8iICVzJyAlIFwKLSAgICAgICAgKHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9j
a2VyIiwgImNvbW1hbmQiKSwgc2VsZi5hdHRyLlBPUlQsIHNlPQpsZi5hdHRyLmRvY2tlcl9wb3J0
LAotICAgICAgICAgdGVtcF9kaXIsIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldCgiZG9ja2VyIiwg
ImltYWdlIikpCi0lPgotPC8lZGVmPgotCi0KLTwlZGVmIG5hbWU9M0QiZGVmYXVsdF9qYXZhc2Ny
aXB0X3ZhcmlhYmxlcygpIj4KLS8vIEdsb2JhbHMKLWllX3Bhc3N3b3JkX2F1dGggPTNEICR7IHNl
bGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIKSB9OwotaWVfYXBh
Y2hlX3VybHMgPTNEICR7IHNlbGYuamF2YXNjcmlwdF9ib29sZWFuKHNlbGYuYXR0ci5BUEFDSEVf
VVJMUykgfTsKLWllX3Bhc3N3b3JkID0zRCAnJHsgc2VsZi5hdHRyLm5vdGVib29rX3B3IH0nOwot
dmFyIGdhbGF4eV9yb290ID0zRCAnJHsgc2VsZi5hdHRyLnJvb3QgfSc7Ci12YXIgYXBwX3Jvb3Qg
PTNEICckeyBzZWxmLmF0dHIuYXBwX3Jvb3QgfSc7Ci08LyVkZWY+Ci0KLQotPCVkZWYgbmFtZT0z
RCJsb2FkX2RlZmF1bHRfanMoKSI+Ci0ke2guY3NzKCAnYmFzZScgKSB9Ci0ke2guanMoICdsaWJz
L2pxdWVyeS9qcXVlcnknLAotICAgICAgICAnbGlicy90b2FzdHInLAotICAgICAgICAnbGlicy9y
ZXF1aXJlJyl9Ci08LyVkZWY+CgpkaWZmIC1yIGQxNzlkZjc0MWZmNTE4ZjA5ZmM4MmE2NGYyYWFh
ODE3ZTQ0MDUwNDcgLXIgZWY0YTVlYzljNWNjYTAzODk5ODcxMmI9CmJkNDA3MzkzMTY1YzVlOGI5
IGNvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3RlbXBsYXRl
cz0KL2lweXRob24ubWFrbwotLS0gYS9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9u
bWVudHMvaXB5dGhvbi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCisrKyBiL2NvbmZpZy9wbHVnaW5z
L2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3RlbXBsYXRlcy9pcHl0aG9uLm1ha28K
QEAgLTEsNCArMSw1IEBACi08JW5hbWVzcGFjZSBmaWxlPTNEImllLm1ha28iIG5hbWU9M0QiaWUi
Lz4KKyA8JW5hbWVzcGFjZSBuYW1lPTNEImllIiBmaWxlPTNEImllLm1ha28iIC8+CisKIDwlCiBp
bXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKQEAgLTYsMTcgKzcsMTcgQEAKIGltcG9ydCBzdWJwcm9j
ZXNzCj0yMAogIyBTZXRzIElEIGFuZCBzZXRzIHVwIGEgbG90IG9mIG90aGVyIHZhcmlhYmxlcwot
aWUuc2V0X2lkKCJpcHl0aG9uIikKLWllLmF0dHIuZG9ja2VyX3BvcnQgPTNEIDY3ODkKK2llX3Jl
cXVlc3QubG9hZF9kZXBsb3lfY29uZmlnKCkKK2llX3JlcXVlc3QuYXR0ci5kb2NrZXJfcG9ydCA9
M0QgNjc4OQogIyBDcmVhdGUgdGVtcGRpciBpbiBnYWxheHkKIHRlbXBfZGlyID0zRCBvcy5wYXRo
LmFic3BhdGgoIHRlbXBmaWxlLm1rZHRlbXAoKSApCiAjIFdyaXRlIG91dCBjb25mIGZpbGUuLi5u
ZWVkcyB3b3JrCi1pZS53cml0ZV9jb25mX2ZpbGUodGVtcF9kaXIpCitpZV9yZXF1ZXN0LndyaXRl
X2NvbmZfZmlsZSh0ZW1wX2RpcikKPTIwCiAjIyBJUHl0aG9uIFNwZWNpZmljCiAjIFByZXBhcmUg
YW4gZW1wdHkgbm90ZWJvb2sKLW5vdGVib29rX2lkID0zRCBpZS5nZW5lcmF0ZV9oZXgoNjQpCi13
aXRoIG9wZW4oIG9zLnBhdGguam9pbiggaWUuYXR0ci5vdXJfdGVtcGxhdGVfZGlyLCAnbm90ZWJv
b2suaXB5bmInICksICdyJz0KKSBhcyBuYl9oYW5kbGU6Citub3RlYm9va19pZCA9M0QgaWVfcmVx
dWVzdC5nZW5lcmF0ZV9oZXgoNjQpCit3aXRoIG9wZW4oIG9zLnBhdGguam9pbiggaWVfcmVxdWVz
dC5hdHRyLm91cl90ZW1wbGF0ZV9kaXIsICdub3RlYm9vay5pcHluYj0KJyApLCAncicpIGFzIG5i
X2hhbmRsZToKICAgICBlbXB0eV9uYiA9M0QgbmJfaGFuZGxlLnJlYWQoKQogZW1wdHlfbmIgPTNE
IGVtcHR5X25iICUgbm90ZWJvb2tfaWQKICMgQ29weSBvdmVyIGRlZmF1bHQgbm90ZWJvb2ssIHVu
bGVzcyB0aGUgZGF0YXNldCB0aGlzIHZpeiBpcyBydW5uaW5nIG9uIGlzPQogYSBub3RlYm9vawpA
QCAtMzAsMTAgKzMxLDEwIEBACj0yMAogIyMgR2VuZXJhbCBJRSBzcGVjaWZpYwogIyBBY2Nlc3Mg
VVJMcyBmb3IgdGhlIG5vdGVib29rIGZyb20gd2l0aGluIGdhbGF4eS4KLW5vdGVib29rX2FjY2Vz
c191cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9YWV9VUkx9L2lweXRob24vJHtQT1JUfS9u
b3RlPQpib29rcy9pcHl0aG9uX2dhbGF4eV9ub3RlYm9vay5pcHluYicpCi1ub3RlYm9va19sb2dp
bl91cmwgPTNEIGllLnVybF90ZW1wbGF0ZSgnJHtQUk9YWV9VUkx9L2lweXRob24vJHtQT1JUfS9s
b2dpbj0KP25leHQ9M0QlMkZpcHl0aG9uJTJGJHtQT1JUfSUyRnRyZWUnKQorbm90ZWJvb2tfYWNj
ZXNzX3VybCA9M0QgaWVfcmVxdWVzdC51cmxfdGVtcGxhdGUoJyR7UFJPWFlfVVJMfS9pcHl0aG9u
LyR7UE89ClJUfS9ub3RlYm9va3MvaXB5dGhvbl9nYWxheHlfbm90ZWJvb2suaXB5bmInKQorbm90
ZWJvb2tfbG9naW5fdXJsID0zRCBpZV9yZXF1ZXN0LnVybF90ZW1wbGF0ZSgnJHtQUk9YWV9VUkx9
L2lweXRob24vJHtQT1I9ClR9L2xvZ2luP25leHQ9M0QlMkZpcHl0aG9uJTJGJHtQT1JUfSUyRnRy
ZWUnKQo9MjAKLWRvY2tlcl9jbWQgPTNEIGllLmRvY2tlcl9jbWQodGVtcF9kaXIpCitkb2NrZXJf
Y21kID0zRCBpZV9yZXF1ZXN0LmRvY2tlcl9jbWQodGVtcF9kaXIpCiBzdWJwcm9jZXNzLmNhbGwo
ZG9ja2VyX2NtZCwgc2hlbGw9M0RUcnVlKQogJT48aHRtbD4KQEAgLTQ2LDE1ICs0NywxMSBAQAog
JHsgaWUuZGVmYXVsdF9qYXZhc2NyaXB0X3ZhcmlhYmxlcygpIH0KIHZhciBub3RlYm9va19sb2dp
bl91cmwgPTNEICckeyBub3RlYm9va19sb2dpbl91cmwgfSc7CiB2YXIgbm90ZWJvb2tfYWNjZXNz
X3VybCA9M0QgJyR7IG5vdGVib29rX2FjY2Vzc191cmwgfSc7CiskeyBpZS5wbHVnaW5fcmVxdWly
ZV9jb25maWcoKSB9CisKIC8vIExvYWQgbm90ZWJvb2sKPTIwCi1yZXF1aXJlLmNvbmZpZyh7Ci0g
ICAgYmFzZVVybDogYXBwX3Jvb3QsCi0gICAgcGF0aHM6IHsKLSAgICAgICAgInBsdWdpbiIgOiBh
cHBfcm9vdCArICJqcy8iLAotICAgIH0sCi19KTsKLXJlcXVpcmVqcyhbJ3BsdWdpbi9pZScsICdw
bHVnaW4vaXB5dGhvbiddLCBmdW5jdGlvbigpeworcmVxdWlyZWpzKFsnaW50ZXJhY3RpdmVfZW52
aXJvbm1lbnRzJywgJ3BsdWdpbi9pcHl0aG9uJ10sIGZ1bmN0aW9uKCl7CiAgICAgbG9hZF9ub3Rl
Ym9vayhpZV9wYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJs
KTsKIH0pOwogPC9zY3JpcHQ+CgpkaWZmIC1yIGQxNzlkZjc0MWZmNTE4ZjA5ZmM4MmE2NGYyYWFh
ODE3ZTQ0MDUwNDcgLXIgZWY0YTVlYzljNWNjYTAzODk5ODcxMmI9CmJkNDA3MzkzMTY1YzVlOGI5
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2FkZGl0aW9uYWxfdGVtcGxhdGVfcGF0aHMu
eD0KbWwKLS0tIGEvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvYWRkaXRpb25hbF90ZW1w
bGF0ZV9wYXRocy54bWwKKysrIGIvY29uZmlnL3BsdWdpbnMvdmlzdWFsaXphdGlvbnMvYWRkaXRp
b25hbF90ZW1wbGF0ZV9wYXRocy54bWwKQEAgLTIsNCArMiw1IEBACiA8IS0tIHRoZXNlIHJlbGF0
aXZlIHBhdGhzIGNhbiBjb250YWluIGNvbW1vbiB0ZW1wbGF0ZXMgaW1wb3J0YWJsZSBieSBhbGwg
dj0KaXN1YWxpemF0aW9uIHBsdWdpbnMgLS0+PHBhdGhzPjxwYXRoPmNvbW1vbi90ZW1wbGF0ZXM8
L3BhdGg+CisgICAgPHBhdGg+Li4vaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2NvbW1vbi90ZW1w
bGF0ZXM8L3BhdGg+PC9wYXRocz4KCmRpZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY0ZjJh
YWE4MTdlNDQwNTA0NyAtciBlZjRhNWVjOWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDczOTMxNjVjNWU4
YjkgbGliL2dhbGF4eS92aXN1YWxpemF0aW9uL3JlZ2lzdHJ5LnB5Ci0tLSBhL2xpYi9nYWxheHkv
dmlzdWFsaXphdGlvbi9yZWdpc3RyeS5weQorKysgYi9saWIvZ2FsYXh5L3Zpc3VhbGl6YXRpb24v
cmVnaXN0cnkucHkKQEAgLTM0NCw2ICszNDQsMTAgQEAKICAgICAgICAgIyBUT0RPOiBBcyBwYXJ0
IG9mIGEgZnV0dXJlIG5vdGUgcGx1Z2luIHJlZ2lzdHJ5IGVmZm9ydCAtIG1vdmUgdGhpcwogICAg
ICAgICAjIG92ZXJyaWRlIGFuZCBsZXQgVmlzdWFsaXphdGlvbnNSZWdpc3RyeSBqdXN0IHJldmVy
dCB0byB1c2luZyBwYXI9CmVudCdzCiAgICAgICAgICMgZmlsbF90ZW1wbGF0ZS4KKworICAgICAg
ICAjIE5vIGxvbmdlciBuZWVkZWQgYnV0IGJlaW5nIGxlZnQgYXJvdW5kIGZvciBhIGZldyByZWxl
YXNlcyBhcyBpcHk9CnRob24tZ2FsYXh5CisgICAgICAgICMgYXMgYW4gZXh0ZXJuYWwgdmlzdWFs
aXphdGlvbiBwbHVnaW4gaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBjbz0KcmUgaW50ZXJhY3Rp
dmUKKyAgICAgICAgIyBlbnZpcm9ubWVudCBwbHVnaW4uCiAgICAgICAgIGlmICdnZXRfYXBpX2tl
eScgbm90IGluIGt3YXJnczoKPTIwCiAgICAgICAgICAgICBkZWYgZ2V0X2FwaV9rZXkoKToKCmRp
ZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY0ZjJhYWE4MTdlNDQwNTA0NyAtciBlZjRhNWVj
OWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDczOTMxNjVjNWU4YjkgbGliL2dhbGF4eS93ZWIvYmFzZS9p
bnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMucHkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5
L3dlYi9iYXNlL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy5weQpAQCAtMCwwICsxLDE1NCBAQAor
aW1wb3J0IENvbmZpZ1BhcnNlcgorCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IG9zCitpbXBvcnQg
cmFuZG9tCisKK2Zyb20gZ2FsYXh5LnV0aWwuYnVuY2ggaW1wb3J0IEJ1bmNoCitmcm9tIGdhbGF4
eSBpbXBvcnQgd2ViCitpbXBvcnQgeWFtbAorZnJvbSBnYWxheHkubWFuYWdlcnMgaW1wb3J0IGFw
aV9rZXlzCisKKworY2xhc3MgSW50ZXJhY3RpdmVFbnZpb3JubWVudFJlcXVlc3Qob2JqZWN0KToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFucywgcGx1Z2luKToKKyAgICAgICAgcGx1Z2lu
X2NvbmZpZyA9M0QgcGx1Z2luLmNvbmZpZworCisgICAgICAgIHNlbGYudHJhbnMgPTNEIHRyYW5z
CisKKyAgICAgICAgc2VsZi5hdHRyID0zRCBCdW5jaCgpCisgICAgICAgIHNlbGYuYXR0ci52aXpf
aWQgPTNEIHBsdWdpbl9jb25maWdbIm5hbWUiXS5sb3dlcigpCisgICAgICAgIHNlbGYuYXR0ci5o
aXN0b3J5X2lkID0zRCB0cmFucy5zZWN1cml0eS5lbmNvZGVfaWQoIHRyYW5zLmhpc3RvcnkuaT0K
ZCApCisgICAgICAgIHNlbGYuYXR0ci5wcm94eV9yZXF1ZXN0ID0zRCB0cmFucy5hcHAucHJveHlf
bWFuYWdlci5zZXR1cF9wcm94eSggdD0KcmFucyApCisgICAgICAgIHNlbGYuYXR0ci5wcm94eV91
cmwgPTNEIHNlbGYuYXR0ci5wcm94eV9yZXF1ZXN0WyAncHJveHlfdXJsJyBdCisgICAgICAgIHNl
bGYuYXR0ci5nYWxheHlfY29uZmlnID0zRCB0cmFucy5hcHAuY29uZmlnCisgICAgICAgIHNlbGYu
YXR0ci5nYWxheHlfcm9vdF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aChzZWxmLmF0dHIuZ2FsYXh5
X2Nvbj0KZmlnLnJvb3QpCisKKyAgICAgICAgc2VsZi5hdHRyLnJvb3QgPTNEIHdlYi51cmxfZm9y
KCIvIikKKyAgICAgICAgc2VsZi5hdHRyLmFwcF9yb290ID0zRCBzZWxmLmF0dHIucm9vdCArICJw
bHVnaW5zL3Zpc3VhbGl6YXRpb25zLyIgPQorIHNlbGYuYXR0ci52aXpfaWQgKyAiL3N0YXRpYy8i
CisKKyAgICAgICAgcGx1Z2luX3BhdGggPTNEIG9zLnBhdGguYWJzcGF0aCggcGx1Z2luLnBhdGgg
KQorCisgICAgICAgICMgU3RvcmUgb3VyIHRlbXBsYXRlIGFuZCBjb25maWd1cmF0aW9uIHBhdGgK
KyAgICAgICAgc2VsZi5hdHRyLm91cl9jb25maWdfZGlyID0zRCBvcy5wYXRoLmpvaW4ocGx1Z2lu
X3BhdGgsICJjb25maWciKQorICAgICAgICBzZWxmLmF0dHIub3VyX3RlbXBsYXRlX2RpciA9M0Qg
b3MucGF0aC5qb2luKHBsdWdpbl9wYXRoLCAidGVtcGxhdGU9CnMiKQorICAgICAgICBzZWxmLmF0
dHIuSE9TVCA9M0QgdHJhbnMucmVxdWVzdC5ob3N0LnJzcGxpdCgnOicsIDEpWzBdCisgICAgICAg
IHNlbGYuYXR0ci5QT1JUID0zRCBzZWxmLmF0dHIucHJveHlfcmVxdWVzdFsgJ3Byb3hpZWRfcG9y
dCcgXQorCisgICAgZGVmIGxvYWRfZGVwbG95X2NvbmZpZyhzZWxmLCBkZWZhdWx0X2RpY3Q9M0R7
fSk6CisgICAgICAgIHZpel9jb25maWcgPTNEIENvbmZpZ1BhcnNlci5TYWZlQ29uZmlnUGFyc2Vy
KGRlZmF1bHRfZGljdCkKKyAgICAgICAgY29uZl9wYXRoID0zRCBvcy5wYXRoLmpvaW4oIHNlbGYu
YXR0ci5vdXJfY29uZmlnX2Rpciwgc2VsZi5hdHRyLnZpPQp6X2lkICsgIi5pbmkiICkKKyAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCBjb25mX3BhdGggKToKKyAgICAgICAgICAgIGNvbmZf
cGF0aCA9M0QgIiVzLnNhbXBsZSIgJSBjb25mX3BhdGgKKyAgICAgICAgdml6X2NvbmZpZy5yZWFk
KCBjb25mX3BhdGggKQorICAgICAgICBzZWxmLmF0dHIudml6X2NvbmZpZyA9M0Qgdml6X2NvbmZp
ZworCisgICAgICAgICMgT2xkZXIgc3R5bGUgcG9ydCByYW5nZSBwcm94eWluZyAtIG5vdCBzdXJl
IHdlIHdhbnQgdG8ga2VlcCB0aGVzZT0KIGFyb3VuZCBvciBzaG91bGQKKyAgICAgICAgIyB3ZSBh
bHdheXMgYXNzdW1lIHVzZSBvZiBHYWxheHkgZHluYW1pYyBwcm94eT8gTm9uZSBvZiB0aGVzZSBu
ZWVkPQogdG8gYmUgc3BlY2lmaWVkCisgICAgICAgICMgaWYgdXNpbmcgdGhlIEdhbGF4eSBkeW5h
bWljIHByb3h5LgorICAgICAgICBzZWxmLmF0dHIuUEFTU1dPUkRfQVVUSCA9M0Qgc2VsZi5hdHRy
LnZpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiI9CiwgInBhc3N3b3JkX2F1dGgiKQorICAgICAg
ICBzZWxmLmF0dHIuQVBBQ0hFX1VSTFMgPTNEIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldGJvb2xl
YW4oIm1haW4iLCA9CiJhcGFjaGVfdXJscyIpCisgICAgICAgIHNlbGYuYXR0ci5TU0xfVVJMUyA9
M0Qgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0Ym9vbGVhbigibWFpbiIsICJzcz0KbCIpCisKKyAg
ICBkZWYgd3JpdGVfY29uZl9maWxlKHNlbGYsIG91dHB1dF9kaXJlY3RvcnksIGV4dHJhPTNEe30p
OgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEJ1aWxkIHVwIGEgY29uZmlndXJhdGlvbiBmaWxl
IHRoYXQgaXMgc3RhbmRhcmQgZm9yIEFMTCBJRXMuCisKKyAgICAgICAgICAgIFRPRE86IHJlcGxh
Y2UgaGFzaGVkIHBhc3N3b3JkIHdpdGggcGxhaW50ZXh0LgorICAgICAgICAiIiIKKyAgICAgICAg
dHJhbnMgPTNEIHNlbGYudHJhbnMKKyAgICAgICAgcmVxdWVzdCA9M0QgdHJhbnMucmVxdWVzdAor
ICAgICAgICBhcGlfa2V5ID0zRCBhcGlfa2V5cy5BcGlLZXlNYW5hZ2VyKCB0cmFucy5hcHAgKS5n
ZXRfb3JfY3JlYXRlX2FwaV89CmtleSggdHJhbnMudXNlciApCisgICAgICAgIGNvbmZfZmlsZSA9
M0QgeworICAgICAgICAgICAgJ2hpc3RvcnlfaWQnOiBzZWxmLmF0dHIuaGlzdG9yeV9pZCwKKyAg
ICAgICAgICAgICdhcGlfa2V5JzogYXBpX2tleSwKKyAgICAgICAgICAgICdyZW1vdGVfaG9zdCc6
IHJlcXVlc3QucmVtb3RlX2FkZHIsCisgICAgICAgICAgICAnZG9ja2VyX3BvcnQnOiBzZWxmLmF0
dHIuUE9SVCwKKyAgICAgICAgICAgICdjb3JzX29yaWdpbic6IHJlcXVlc3QuaG9zdF91cmwsCisg
ICAgICAgIH0KKworICAgICAgICBpZiBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5nYWxheHlfaW5m
cmFzdHJ1Y3R1cmVfdXJsX3NldDoKKyAgICAgICAgICAgIGNvbmZfZmlsZVsnZ2FsYXh5X3VybCdd
ID0zRCBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZy5nYWxheHlfaW5mPQpyYXN0cnVjdHVyZV91cmwu
cnN0cmlwKCcvJykgKyAnLycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbmZfZmlsZVsn
Z2FsYXh5X3VybCddID0zRCByZXF1ZXN0LmFwcGxpY2F0aW9uX3VybC5yc3RyaXAoJy8nPQopICsg
Jy8nCisgICAgICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4eV9wYXN0ZXJfcG9ydCddID0zRCBzZWxm
LmF0dHIuZ2FsYXh5X2NvbmZpZy5ndT0KZXNzX2dhbGF4eV9wb3J0KCkKKworICAgICAgICBpZiBz
ZWxmLmF0dHIuUEFTU1dPUkRfQVVUSDoKKyAgICAgICAgICAgICMgR2VuZXJhdGUgYSByYW5kb20g
cGFzc3dvcmQgKyBzYWx0CisgICAgICAgICAgICBub3RlYm9va19wd19zYWx0ID0zRCBzZWxmLmdl
bmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDEyKQorICAgICAgICAgICAgbm90ZWJvb2tfcHcgPTNE
IHNlbGYuZ2VuZXJhdGVfcGFzc3dvcmQobGVuZ3RoPTNEMjQpCisgICAgICAgICAgICBtID0zRCBo
YXNobGliLnNoYTEoKQorICAgICAgICAgICAgbS51cGRhdGUoIG5vdGVib29rX3B3ICsgbm90ZWJv
b2tfcHdfc2FsdCApCisgICAgICAgICAgICBjb25mX2ZpbGVbJ25vdGVib29rX3Bhc3N3b3JkJ10g
PTNEICdzaGExOiVzOiVzJyAlIChub3RlYm9va19wdz0KX3NhbHQsIG0uaGV4ZGlnZXN0KCkpCisg
ICAgICAgICAgICAjIFNob3VsZCB3ZSB1c2UgcGFzc3dvcmQgYmFzZWQgY29ubmVjdGlvbiBvciAi
ZGVmYXVsdCIgY29ubmVjdD0KaW9uIHN0eWxlIGluIGdhbGF4eQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgbm90ZWJvb2tfcHcgPTNEICJOb25lIgorCisgICAgICAgICMgU29tZSB3aWxsIG5l
ZWQgdG8gcGFzcyBleHRyYSBkYXRhCisgICAgICAgIGZvciBleHRyYV9rZXkgaW4gZXh0cmE6Cisg
ICAgICAgICAgICBjb25mX2ZpbGVbZXh0cmFfa2V5XSA9M0QgZXh0cmFbZXh0cmFfa2V5XQorCisg
ICAgICAgIHNlbGYuYXR0ci5ub3RlYm9va19wdyA9M0Qgbm90ZWJvb2tfcHcKKyAgICAgICAgIyBX
cml0ZSBjb25mCisgICAgICAgIHdpdGggb3Blbiggb3MucGF0aC5qb2luKCBvdXRwdXRfZGlyZWN0
b3J5LCAnY29uZi55YW1sJyApLCAnd2InICkgYT0KcyBoYW5kbGU6CisgICAgICAgICAgICBoYW5k
bGUud3JpdGUoIHlhbWwuZHVtcChjb25mX2ZpbGUsIGRlZmF1bHRfZmxvd19zdHlsZT0zREZhbHNl
KT0KICkKKworICAgIGRlZiBnZW5lcmF0ZV9oZXgoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgcmV0
dXJuICcnLmpvaW4ocmFuZG9tLmNob2ljZSgnMDEyMzQ1Njc4OWFiY2RlZicpIGZvciBfIGluIHJh
bmdlKGxlPQpuZ3RoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9wYXNzd29yZChzZWxmLCBsZW5ndGgp
OgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEdlbmVyYXRlIGEgcmFuZG9tIGFscGhhbnVtZXJp
YyBwYXNzd29yZAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocmFuZG9tLmNo
b2ljZSgnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6PQonKSBmb3IgXyBpbiBy
YW5nZShsZW5ndGgpKQorCisgICAgZGVmIGphdmFzY3JpcHRfYm9vbGVhbihzZWxmLCBweXRob25f
Ym9vbGVhbik6CisgICAgICAgICIiIgorICAgICAgICAgICAgQ29udmVuaWVuY2UgZnVuY3Rpb24g
dG8gY29udmVydCBib29sZWFuIGZvciB1c2UgaW4gSlMKKyAgICAgICAgIiIiCisgICAgICAgIGlm
IHB5dGhvbl9ib29sZWFuOgorICAgICAgICAgICAgcmV0dXJuICJ0cnVlIgorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKKworICAgIGRlZiB1cmxfdGVtcGxhdGUoc2Vs
ZiwgdXJsX3RlbXBsYXRlKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBQcm9jZXNzIGEgVVJM
IHRlbXBsYXRlCisKKyAgICAgICAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHZhcmlhYmxlcyBhY2Nl
c3NpYmxlIHRvIHRoZSB1c2VyOgorCisgICAgICAgICAgICAgICAgLSAke1BST1hZX1VSTH0gd2ls
bCBiZSByZXBsYWNlZCB3aXRoIGR5bmFtaWNhbGx5IGNyZWF0ZSBwcj0Kb3h5CisgICAgICAgICAg
ICAgICAgLSAke1BPUlR9IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgcG9ydCB0aGUgZG9ja2Vy
IGltYWdlID0KaXMgYXR0YWNoZWQgdG8KKyAgICAgICAgIiIiCisgICAgICAgICMgRmlndXJlIG91
dCBvdXIgc3Vic3RpdHV0aW9ucworCisgICAgICAgICMgTmV4dCBzZXZlcmFsIGxpbmVzIGZvciBv
bGRlciBzdHlsZSByZXBsYWNlbWVudHMgKG5vdCB1c2VkIHdpdGggRz0KYWxheHkgZHluYW1pYwor
ICAgICAgICAjIHByb3h5KQorCisgICAgICAgIGlmIHNlbGYuYXR0ci5TU0xfVVJMUzoKKyAgICAg
ICAgICAgIHByb3RvY29sID0zRCAnaHR0cHMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw
cm90b2NvbCA9M0QgJ2h0dHAnCisKKyAgICAgICAgaWYgbm90IHNlbGYuYXR0ci5BUEFDSEVfVVJM
UzoKKyAgICAgICAgICAgICMgSWYgdGhleSBhcmUgbm90IHVzaW5nIGFwYWNoZSBVUkxzLCB0aGF0
IGltcGxpZXMgdGhlcmUncyBhIHBvPQpydCBhdHRhY2hlZCB0byB0aGUgaG9zdAorICAgICAgICAg
ICAgIyBzdHJpbmcsIHRodXMgd2UgcmVwbGFjZSBqdXN0IHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBo
b3N0IHRoYXQ9CiB3ZSBzZWUuCisgICAgICAgICAgICB1cmxfdGVtcGxhdGUgPTNEIHVybF90ZW1w
bGF0ZS5yZXBsYWNlKCcke0hPU1R9JywgJyR7SE9TVH06JHtQTz0KUlR9JywgMSkKKworICAgICAg
ICB1cmxfdGVtcGxhdGUgPTNEIHVybF90ZW1wbGF0ZS5yZXBsYWNlKCcke1BST1RPfScsIHByb3Rv
Y29sKSBcCisgICAgICAgICAgICAucmVwbGFjZSgnJHtIT1NUfScsIHNlbGYuYXR0ci5IT1NUKQor
CisgICAgICAgICMgT25seSB0aGUgZm9sbG93aW5nIHJlcGxhY2VtZW50cyBhcmUgdXNlZCB3aXRo
IEdhbGF4eSBkeW5hbWljIHBybz0KeHkKKyAgICAgICAgIyBVUkxzCisgICAgICAgIHVybCA9M0Qg
dXJsX3RlbXBsYXRlLnJlcGxhY2UoJyR7UFJPWFlfVVJMfScsIHN0cihzZWxmLmF0dHIucHJveHlf
dT0KcmwpKSBcCisgICAgICAgICAgICAucmVwbGFjZSgnJHtQT1JUfScsIHN0cihzZWxmLmF0dHIu
UE9SVCkpCisgICAgICAgIHJldHVybiB1cmwKKworICAgIGRlZiBkb2NrZXJfY21kKHNlbGYsIHRl
bXBfZGlyKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBHZW5lcmF0ZSBhbmQgcmV0dXJuIHRo
ZSBkb2NrZXIgY29tbWFuZCB0byBleGVjdXRlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g
JyVzIHJ1biAtZCAtLXNpZy1wcm94eT0zRHRydWUgLXAgJXM6JXMgLXYgIiVzOi9pbXBvcnQvIiAl
cyc9CiAlIFwKKyAgICAgICAgICAgIChzZWxmLmF0dHIudml6X2NvbmZpZy5nZXQoImRvY2tlciIs
ICJjb21tYW5kIiksIHNlbGYuYXR0ci5QT1JUPQosIHNlbGYuYXR0ci5kb2NrZXJfcG9ydCwKKyAg
ICAgICAgICAgICB0ZW1wX2Rpciwgc2VsZi5hdHRyLnZpel9jb25maWcuZ2V0KCJkb2NrZXIiLCAi
aW1hZ2UiKSkKCmRpZmYgLXIgZDE3OWRmNzQxZmY1MThmMDlmYzgyYTY0ZjJhYWE4MTdlNDQwNTA0
NyAtciBlZjRhNWVjOWM1Y2NhMDM4OTk4NzEyYj0KYmQ0MDczOTMxNjVjNWU4YjkgbGliL2dhbGF4
eS93ZWIvYmFzZS9wbHVnaW5mcmFtZXdvcmsucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvYmFzZS9w
bHVnaW5mcmFtZXdvcmsucHkKKysrIGIvbGliL2dhbGF4eS93ZWIvYmFzZS9wbHVnaW5mcmFtZXdv
cmsucHkKQEAgLTIwLDYgKzIwLDggQEAKIGZyb20gZ2FsYXh5IGltcG9ydCB1dGlsCiBmcm9tIGdh
bGF4eS51dGlsIGltcG9ydCBvZGljdAogZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgYnVuY2gKK2Zy
b20gLmludGVyYWN0aXZlX2Vudmlyb25tZW50cyBpbXBvcnQgSW50ZXJhY3RpdmVFbnZpb3JubWVu
dFJlcXVlc3QKKwo9MjAKIGltcG9ydCBsb2dnaW5nCiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCBfX25hbWVfXyApCkBAIC01OTAsNiArNTkyLDExIEBACiAgICAgICAgIGlmICdwbHVnaW5fcGF0
aCcgbm90IGluIGt3YXJnczoKICAgICAgICAgICAgIGt3YXJnc1sgJ3BsdWdpbl9wYXRoJ10gPTNE
IG9zLnBhdGguYWJzcGF0aCggcGx1Z2luLnBhdGggKQo9MjAKKyAgICAgICAgcGx1Z2luX3R5cGUg
PTNEIHBsdWdpbi5jb25maWdbInBsdWdpbl90eXBlIl0KKyAgICAgICAgaWYgcGx1Z2luX3R5cGUg
PTNEPTNEICJpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudCI6CisgICAgICAgICAgICByZXF1ZXN0ID0z
RCBJbnRlcmFjdGl2ZUVudmlvcm5tZW50UmVxdWVzdCh0cmFucywgcGx1Z2luKQorICAgICAgICAg
ICAga3dhcmdzWyJpZV9yZXF1ZXN0Il0gPTNEIHJlcXVlc3QKKwogICAgICAgICAjIGRlZmluZWQg
aGVyZSB0byBiZSBvdmVycmlkZGVuCiAgICAgICAgIHJldHVybiB0cmFucy5maWxsX3RlbXBsYXRl
KCB0ZW1wbGF0ZV9maWxlbmFtZSwgdGVtcGxhdGVfbG9va3VwPTNEcD0KbHVnaW4udGVtcGxhdGVf
bG9va3VwLCAqKmt3YXJncyApCj0yMAoKZGlmZiAtciBkMTc5ZGY3NDFmZjUxOGYwOWZjODJhNjRm
MmFhYTgxN2U0NDA1MDQ3IC1yIGVmNGE1ZWM5YzVjY2EwMzg5OTg3MTJiPQpiZDQwNzM5MzE2NWM1
ZThiOSBzdGF0aWMvc2NyaXB0cy9nYWxheHkuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmpzCi0t
LSAvZGV2L251bGwKKysrIGIvc3RhdGljL3NjcmlwdHMvZ2FsYXh5LmludGVyYWN0aXZlX2Vudmly
b25tZW50cy5qcwpAQCAtMCwwICsxLDU5IEBACisvKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRv
IHJlbW92ZSBjb250ZW50IGZyb20gdGhlIG1haW4gYXJlYSBhbmQgYWRkIHRoZSBub3RlPQpib29r
LgorICogTm90IGlkZW1wb3RlbnQKKyAqLworZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7
CisgICAgY2xlYXJfbWFpbl9hcmVhKCk7CisgICAgJCgnI21haW4nKS5hcHBlbmQoJzxpZnJhbWUg
ZnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0eT0KbGU9M0Qid2lkdGg6
IDEwMCU7IGhlaWdodDogMTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBz
cmM9M0QiPQonKyB1cmwgKyciPjwvaWZyYW1lPicKKyAgICApOworfQorCitmdW5jdGlvbiBjbGVh
cl9tYWluX2FyZWEoKXsKKyAgICAkKCcjc3Bpbm5lcicpLnJlbW92ZSgpOworICAgICQoJyNtYWlu
JykuY2hpbGRyZW4oKS5yZW1vdmUoKTsKK30KKworZnVuY3Rpb24gZGlzcGxheV9zcGlubmVyKCl7
CisgICAgICAgICQoJyNtYWluJykuYXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0zRCIn
ICsgZ2FsYXh5X3Jvb3QgKyAnLz0Kc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxl
PTNEInBvc2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRvO3RvcDowPQo7bGVmdDowO3JpZ2h0OjA7
Ym90dG9tOjA7Ij4nKTsKK30KKworCisvKioKKyAqIFRlc3QgYXZhaWxhYmlsaXR5IG9mIGEgVVJM
LCBhbmQgY2FsbCBhIGNhbGxiYWNrIHdoZW4gZG9uZS4KKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93
LmNvbS9xLzI1MzkwMjA2LzM0NzM2OAorICogQHBhcmFtIHtTdHJpbmd9IHVybDogVVJMIHRvIHRl
c3QgYXZhaWxhYmlsaXR5IG9mLiBNdXN0IHJldHVybiBhIDIwMCAoMzA9CjItPjIwMCBpcyBPSyku
CisgKiBAcGFyYW0ge1N0cmluZ30gY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBzdWNj
ZXNzZnVsbHkgY29ubmVjdGVkLgorICoKKyAqLworZnVuY3Rpb24gdGVzdF9pZV9hdmFpbGFiaWxp
dHkodXJsLCBzdWNjZXNzX2NhbGxiYWNrKXsKKyAgICB2YXIgcmVxdWVzdF9jb3VudCA9M0QgMDsK
KyAgICBkaXNwbGF5X3NwaW5uZXIoKTsKKyAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVu
Y3Rpb24oKXsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAg
ICAgICAgeGhyRmllbGRzOiB7CisgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVl
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICB0
aW1lb3V0OiA1MDAsCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpeworICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0ZWQgdG8gSUUsIHJldHVybmluZyIpOworICAgICAg
ICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIHN1Y2Nl
c3NfY2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rp
b24oanF4aHIsIHN0YXR1cywgZXJyb3IpeworICAgICAgICAgICAgICAgIHJlcXVlc3RfY291bnQr
KzsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiUmVxdWVzdCAiICsgcmVxdWVzdF9jb3Vu
dCk7CisgICAgICAgICAgICAgICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKKyAgICAgICAgICAg
ICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGNs
ZWFyX21haW5fYXJlYSgpOworICAgICAgICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCisgICAg
ICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSUUsIGNvbnRhY3QgeW91
ciBhZG1pbmlzdHJhdD0Kb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIw
MDAwLCAndGFwVG9EaXNtPQppc3MnOiBmYWxzZX0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0sIDEwMDAp
OworfQoKZGlmZiAtciBkMTc5ZGY3NDFmZjUxOGYwOWZjODJhNjRmMmFhYTgxN2U0NDA1MDQ3IC1y
IGVmNGE1ZWM5YzVjY2EwMzg5OTg3MTJiPQpiZDQwNzM5MzE2NWM1ZThiOSBzdGF0aWMvc2NyaXB0
cy9wYWNrZWQvZ2FsYXh5LmludGVyYWN0aXZlX2Vudmlyb25tZW50cy5qcwotLS0gL2Rldi9udWxs
CisrKyBiL3N0YXRpYy9zY3JpcHRzL3BhY2tlZC9nYWxheHkuaW50ZXJhY3RpdmVfZW52aXJvbm1l
bnRzLmpzCkBAIC0wLDAgKzEsMSBAQAorZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKGEpe2NsZWFy
X21haW5fYXJlYSgpOyQoIiNtYWluIikuYXBwZW5kKCc8aWZyYW1lIGY9CnJhbWVCb3JkZXI9M0Qi
MCIgc2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0eWxlPTNEIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEw
MCU7ID0Kb3ZlcmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBzcmM9M0QiJythKyciPjwv
aWZyYW1lPicpfWZ1bmN0aW9uIGNsZWFyPQpfbWFpbl9hcmVhKCl7JCgiI3NwaW5uZXIiKS5yZW1v
dmUoKTskKCIjbWFpbiIpLmNoaWxkcmVuKCkucmVtb3ZlKCl9ZnVuY3Rpb249CiBkaXNwbGF5X3Nw
aW5uZXIoKXskKCIjbWFpbiIpLmFwcGVuZCgnPGltZyBpZD0zRCJzcGlubmVyIiBzcmM9M0QiJytn
YWxheHlfcj0Kb290Kycvc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNEInBv
c2l0aW9uOmFic29sdXRlO21hcmdpbjphdXRvPQo7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9t
OjA7Ij4nKX1mdW5jdGlvbiB0ZXN0X2llX2F2YWlsYWJpbGl0eShiLGMpe3ZhciA9CmE9M0QwO2Rp
c3BsYXlfc3Bpbm5lcigpO2ludGVydmFsPTNEc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXskLmFqYXgo
e3VybDpiLHhocj0KRmllbGRzOnt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0sdHlwZToiR0VUIix0aW1l
b3V0OjUwMCxzdWNjZXNzOmZ1bmN0aW9uKCl7Y29uPQpzb2xlLmxvZygiQ29ubmVjdGVkIHRvIElF
LCByZXR1cm5pbmciKTtjbGVhckludGVydmFsKGludGVydmFsKTtjKCl9LGVycm9yOmY9CnVuY3Rp
b24oZixkLGUpe2ErKztjb25zb2xlLmxvZygiUmVxdWVzdCAiK2EpO2lmKGE+MzApe2NsZWFySW50
ZXJ2YWwoaW50ZXJ2YT0KbCk7Y2xlYXJfbWFpbl9hcmVhKCk7dG9hc3RyLmVycm9yKCJDb3VsZCBu
b3QgY29ubmVjdCB0byBJRSwgY29udGFjdCB5b3VyIGFkPQptaW5pc3RyYXRvciIsIkVycm9yIix7
Y2xvc2VCdXR0b246dHJ1ZSx0aW1lT3V0OjIwMDAwLHRhcFRvRGlzbWlzczpmYWxzZX0pfX09Cn0p
fSwxMDAwKX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKCmh0dHBzOi8vYml0YnVja2V0
Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvY29tbWl0cy9iN2UzNjk0ZjEwODEvCkNoYW5nZXNl
dDogICBiN2UzNjk0ZjEwODEKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAx
NC0xMC0xOCAyMjozODowNCswMDowMApTdW1tYXJ5OiAgICAgTWFrZSBkeW5hbWljIHByb3h5IGxl
c3Mgbm9pc3kgYnV0IGFkZCBvcHRpb24gZHluYW1pY19wcm94eV9kZWI9CnVnIHRvIHJlLWVuYWJs
ZSBmb3IgZGVidWdnaW5nLgpBZmZlY3RlZCAjOiAgNSBmaWxlcwoKZGlmZiAtciBlZjRhNWVjOWM1
Y2NhMDM4OTk4NzEyYmJkNDA3MzkzMTY1YzVlOGI5IC1yIGI3ZTM2OTRmMTA4MWI2OTg3OTJmZjAz
PQo5ZDhiYjU4OGViNGQ4MmJjMSBjb25maWcvZ2FsYXh5LmluaS5zYW1wbGUKLS0tIGEvY29uZmln
L2dhbGF4eS5pbmkuc2FtcGxlCisrKyBiL2NvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQpAQCAtNTQ1
LDYgKzU0NSw4IEBACiAjZHluYW1pY19wcm94eV9iaW5kX3BvcnQ9M0Q4ODAwCiAjZHluYW1pY19w
cm94eV9iaW5kX2lwPTNEMC4wLjAuMAo9MjAKKyMgRW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG9m
IEdhbGF4eS1tYW5hZ2VkIGR5bmFtaWMgcHJveHkuCisjZHluYW1pY19wcm94eV9kZWJ1Zz0zREZh
bHNlCj0yMAogIyAtLSBMb2dnaW5nIGFuZCBEZWJ1Z2dpbmcKPTIwCgpkaWZmIC1yIGVmNGE1ZWM5
YzVjY2EwMzg5OTg3MTJiYmQ0MDczOTMxNjVjNWU4YjkgLXIgYjdlMzY5NGYxMDgxYjY5ODc5MmZm
MDM9CjlkOGJiNTg4ZWI0ZDgyYmMxIGxpYi9nYWxheHkvY29uZmlnLnB5Ci0tLSBhL2xpYi9nYWxh
eHkvY29uZmlnLnB5CisrKyBiL2xpYi9nYWxheHkvY29uZmlnLnB5CkBAIC0zODUsNiArMzg1LDcg
QEAKPTIwCiAgICAgICAgIHNlbGYucHJveHlfc2Vzc2lvbl9tYXAgPTNEIHNlbGYucmVzb2x2ZV9w
YXRoKCBrd2FyZ3MuZ2V0KCAiZHluYW1pYz0KX3Byb3h5X3Nlc3Npb25fbWFwIiwgImRhdGFiYXNl
L3Nlc3Npb25fbWFwLnNxbGl0ZSIgKSApCiAgICAgICAgIHNlbGYubWFuYWdlX2R5bmFtaWNfcHJv
eHkgPTNEIHN0cmluZ19hc19ib29sKCBrd2FyZ3MuZ2V0KCAiZHluYW1pYz0KX3Byb3h5X21hbmFn
ZSIsICJUcnVlIiApICkgICMgU2V0IHRvIGZhbHNlIGlmIGJlaW5nIGxhdW5jaGVkIGV4dGVybmFs
bHkKKyAgICAgICAgc2VsZi5keW5hbWljX3Byb3h5X2RlYnVnID0zRCBzdHJpbmdfYXNfYm9vbCgg
a3dhcmdzLmdldCggImR5bmFtaWNfPQpwcm94eV9kZWJ1ZyIsICJGYWxzZSIgKSApCiAgICAgICAg
IHNlbGYuZHluYW1pY19wcm94eV9iaW5kX3BvcnQgPTNEIGludCgga3dhcmdzLmdldCggImR5bmFt
aWNfcHJveHlfYj0KaW5kX3BvcnQiLCAiODgwMCIgKSApCiAgICAgICAgIHNlbGYuZHluYW1pY19w
cm94eV9iaW5kX2lwID0zRCBrd2FyZ3MuZ2V0KCAiZHluYW1pY19wcm94eV9iaW5kX2lwIj0KLCAi
MC4wLjAuMCIgKQo9MjAKCmRpZmYgLXIgZWY0YTVlYzljNWNjYTAzODk5ODcxMmJiZDQwNzM5MzE2
NWM1ZThiOSAtciBiN2UzNjk0ZjEwODFiNjk4NzkyZmYwMz0KOWQ4YmI1ODhlYjRkODJiYzEgbGli
L2dhbGF4eS93ZWIvcHJveHkvX19pbml0X18ucHkKLS0tIGEvbGliL2dhbGF4eS93ZWIvcHJveHkv
X19pbml0X18ucHkKKysrIGIvbGliL2dhbGF4eS93ZWIvcHJveHkvX19pbml0X18ucHkKQEAgLTE3
LDcgKzE3LDcgQEAKIGNsYXNzIFByb3h5TWFuYWdlcihvYmplY3QpOgo9MjAKICAgICBkZWYgX19p
bml0X18oIHNlbGYsIGNvbmZpZyApOgotICAgICAgICBmb3Igb3B0aW9uIGluIFsgIm1hbmFnZV9k
eW5hbWljX3Byb3h5IiwgImR5bmFtaWNfcHJveHlfYmluZF9wb3J0Iiw9CiAiZHluYW1pY19wcm94
eV9iaW5kX2lwIiBdOgorICAgICAgICBmb3Igb3B0aW9uIGluIFsgIm1hbmFnZV9keW5hbWljX3By
b3h5IiwgImR5bmFtaWNfcHJveHlfYmluZF9wb3J0Iiw9CiAiZHluYW1pY19wcm94eV9iaW5kX2lw
IiwgImR5bmFtaWNfcHJveHlfZGVidWciIF06CiAgICAgICAgICAgICBzZXRhdHRyKCBzZWxmLCBv
cHRpb24sIGdldGF0dHIoIGNvbmZpZywgb3B0aW9uICkgKQogICAgICAgICBzZWxmLmxhdW5jaF9i
eSA9M0QgIm5vZGUiICAjIFRPRE86IFN1cHBvcnQgZG9ja2VyCiAgICAgICAgIGlmIHNlbGYubWFu
YWdlX2R5bmFtaWNfcHJveHk6CkBAIC03NCw2ICs3NCw5IEBACiAgICAgICAgICAgICAiLS1pcCIs
IGNvbmZpZy5keW5hbWljX3Byb3h5X2JpbmRfaXAsCiAgICAgICAgICAgICAiLS1wb3J0Iiwgc3Ry
KGNvbmZpZy5keW5hbWljX3Byb3h5X2JpbmRfcG9ydCksCiAgICAgICAgIF0KKyAgICAgICAgaWYg
Y29uZmlnLmR5bmFtaWNfcHJveHlfZGVidWc6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS12
ZXJib3NlIikKKwogICAgICAgICBwYXJlbnRfZGlyZWN0b3J5ID0zRCBvcy5wYXRoLmRpcm5hbWUo
IF9fZmlsZV9fICkKICAgICAgICAgcGF0aF90b19hcHBsaWNhdGlvbiA9M0Qgb3MucGF0aC5qb2lu
KCBwYXJlbnRfZGlyZWN0b3J5LCAianMiLCAibGliPQoiLCAibWFpbi5qcyIgKQogICAgICAgICBj
b21tYW5kID0zRCBbIHBhdGhfdG9fYXBwbGljYXRpb24gXSArIGFyZ3MKCmRpZmYgLXIgZWY0YTVl
YzljNWNjYTAzODk5ODcxMmJiZDQwNzM5MzE2NWM1ZThiOSAtciBiN2UzNjk0ZjEwODFiNjk4Nzky
ZmYwMz0KOWQ4YmI1ODhlYjRkODJiYzEgbGliL2dhbGF4eS93ZWIvcHJveHkvanMvbGliL21hcHBl
ci5qcwotLS0gYS9saWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvbWFwcGVyLmpzCisrKyBiL2xp
Yi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9tYXBwZXIuanMKQEAgLTU0LDkgKzU0LDYgQEAKICAg
ICB9Owo9MjAKICAgICB2YXIgZGIgPTNEIG5ldyBzcWxpdGUzLkRhdGFiYXNlKHBhdGgsIGxvYWRT
ZXNzaW9ucyk7Ci0gICAgY29uc29sZS5sb2coImFmdGVyIGRiIHNlc3Npb24iKTsKLSAgICBjb25z
b2xlLmxvZyhuZXdTZXNzaW9ucyk7Ci0KIH07Cj0yMAo9MjAKCmRpZmYgLXIgZWY0YTVlYzljNWNj
YTAzODk5ODcxMmJiZDQwNzM5MzE2NWM1ZThiOSAtciBiN2UzNjk0ZjEwODFiNjk4NzkyZmYwMz0K
OWQ4YmI1ODhlYjRkODJiYzEgbGliL2dhbGF4eS93ZWIvcHJveHkvanMvbGliL3Byb3h5LmpzCi0t
LSBhL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9wcm94eS5qcworKysgYi9saWIvZ2FsYXh5
L3dlYi9wcm94eS9qcy9saWIvcHJveHkuanMKQEAgLTEzLDYgKzEzLDcgQEAKIAl2YXIgZHluYW1p
Y1Byb3h5ID0zRCB0aGlzOwogCXRoaXMuc2Vzc2lvbkNvb2tpZSA9M0Qgb3B0aW9ucy5zZXNzaW9u
Q29va2llOwogCXRoaXMuc2Vzc2lvbk1hcCA9M0Qgb3B0aW9ucy5zZXNzaW9uTWFwOworICAgIHRo
aXMuZGVidWcgPTNEIG9wdGlvbnMudmVyYm9zZTsKPTIwCiAgICAgdmFyIGxvZ19lcnJvcnMgPTNE
IGZ1bmN0aW9uKGhhbmRsZXIpIHsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZXEsIHJlcykg
ewpAQCAtNzAsNyArNzEsOSBAQAo9MjAKIER5bmFtaWNQcm94eS5wcm90b3R5cGUuaGFuZGxlUHJv
eHlSZXF1ZXN0ID0zRCBmdW5jdGlvbihyZXEsIHJlcykgewogICAgIHZhciB0YXJnZXQgPTNEIHRo
aXMudGFyZ2V0Rm9yUmVxdWVzdChyZXEpOwotICAgIGNvbnNvbGUubG9nKCJQUk9YWSAiICsgcmVx
Lm1ldGhvZCArICIgIiArIHJlcS51cmwgKyAiIHRvICIgKyB0YXJnZXQpOworICAgIGlmKHRoaXMu
ZGVidWcpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlBST1hZICIgKyByZXEubWV0aG9kICsgIiAi
ICsgcmVxLnVybCArICIgdG8gIiArIHRhcmdlPQp0KTsKKyAgICB9CiAgICAgdmFyIG9yaWdpbiA9
M0QgcmVxLmhlYWRlcnMub3JpZ2luOwogICAgIHRoaXMucmV3cml0ZVJlcXVlc3QocmVxKTsKICAg
ICByZXMub2xkV3JpdGVIZWFkID0zRCByZXMud3JpdGVIZWFkOwpAQCAtOTIsNyArOTUsOSBAQAog
RHluYW1pY1Byb3h5LnByb3RvdHlwZS5oYW5kbGVXcyA9M0QgZnVuY3Rpb24ocmVxLCByZXMsIGhl
YWQpIHsKICAgICAvLyBubyBsb2NhbCByb3V0ZSBmb3VuZCwgdGltZSB0byBwcm94eQogICAgIHZh
ciB0YXJnZXQgPTNEIHRoaXMudGFyZ2V0Rm9yUmVxdWVzdChyZXEpOwotICAgIGNvbnNvbGUubG9n
KCJQUk9YWSBXUyAiICsgcmVxLnVybCArICIgdG8gIiArIHJlcS51cmwpOworICAgIGlmKHRoaXMu
ZGVidWcpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlBST1hZIFdTICIgKyByZXEudXJsICsgIiB0
byAiICsgcmVxLnVybCk7CisgICAgfQogICAgIHZhciBvcmlnaW4gPTNEIHJlcS5oZWFkZXJzLm9y
aWdpbjsKICAgICB0aGlzLnJld3JpdGVSZXF1ZXN0KHJlcSk7CiAgICAgcmVzLm9sZFdyaXRlSGVh
ZCA9M0QgcmVzLndyaXRlSGVhZDsKCgpodHRwczovL2JpdGJ1Y2tldC5vcmcvZ2FsYXh5L2dhbGF4
eS1jZW50cmFsL2NvbW1pdHMvZjcwZWYyMWM0ODU1LwpDaGFuZ2VzZXQ6ICAgZjcwZWYyMWM0ODU1
ClVzZXI6ICAgICAgICBqbWNoaWx0b24KRGF0ZTogICAgICAgIDIwMTQtMTAtMTggMjI6Mzg6MDQr
MDA6MDAKU3VtbWFyeTogICAgIEltcHJvdmVtZW50cyB0byBJUHl0aG9uIGNvbmZpZ3VyYXRpb24g
c2FtcGxlLgpBbGxvdyBvdmVyaWRpbmcgZ2FsYXh5X3VybCBkaXJlY3RseSAoZG9uJ3QgZG8gdGhp
cyAtIHVzZSBnYWxheHlfaW5mcmFzdHJ1Y3Q9CnVyZV91cmwgLSBidXQgdGhlcmUgd2lsbCBiZSBk
ZXBsb3ltZW50cykuIERvbid0IHJlcXVpcmUgc2V0dGluZyBvbGRlciBwb3J0ID0KcmFuZ2UgZGVw
bG95bWVudCBvcHRpb25zLgpBZmZlY3RlZCAjOiAgMiBmaWxlcwoKZGlmZiAtciBiN2UzNjk0ZjEw
ODFiNjk4NzkyZmYwMzlkOGJiNTg4ZWI0ZDgyYmMxIC1yIGY3MGVmMjFjNDg1NTkwYTlkMWIxZWM5
PQoyYzIyYzFiMTUyNDI3NTY0NCBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVu
dHMvaXB5dGhvbi9jb25maWcvaXA9Cnl0aG9uLmluaS5zYW1wbGUKLS0tIGEvY29uZmlnL3BsdWdp
bnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vY29uZmlnL2lweXRob24uaW5pLnNh
PQptcGxlCisrKyBiL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0
aG9uL2NvbmZpZy9pcHl0aG9uLmluaS5zYT0KbXBsZQpAQCAtMSw5ICsxLDE2IEBACiBbbWFpbl0K
LWFwYWNoZV91cmxzID0zRCBGYWxzZQotcGFzc3dvcmRfYXV0aCA9M0QgRmFsc2UKLXNzbCA9M0Qg
RmFsc2UKKworIyBGb2xsb3dpbmcgb3B0aW9ucyBhcmUgaWdub3JlZCBpZiB1c2luZyB0aGUgR2Fs
YXh5IGR5bmFtaWMgcHJveHkgYnV0CisjIGFyZSB1c2VmdWwgaWYgbWFwcGluZyBhIHJhbmdlIG9m
IHBvcnRzIGZvciBlbnZpcm9ubWVudCBjb25zdW1wdGlvbi4KKyNhcGFjaGVfdXJscyA9M0QgRmFs
c2UKKyNwYXNzd29yZF9hdXRoID0zRCBGYWxzZQorI3NzbCA9M0QgRmFsc2UKPTIwCiBbZG9ja2Vy
XQogY29tbWFuZCA9M0QgZG9ja2VyCiBpbWFnZSA9M0QgYmdydWVuaW5nL2RvY2tlci1pcHl0aG9u
LW5vdGVib29rCj0yMAorIyBVUkwgdG8gYWNjZXNzIHRoZSBHYWxheHkgQVBJIHdpdGggZnJvbSB0
aGUgc3Bhd24gRG9ja2VyIGNvbnRhaW50ZXIsIGlmIGU9Cm1wdHkKKyMgdGhpcyBmYWxscyBiYWNr
IHRvIGdhbGF4eS5pbmkncyBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsIGFuZCBmaW5hbGx5IHRv
PQogdGhlCisjIERvY2tlciBob3N0IG9mIHRoZSBzcGF3bmVkIGNvbnRhaW5lciBpZiB0aGF0IGlz
IGFsc28gbm90IHNldC4KKyNnYWxheHlfdXJsID0zRD0yMAoKZGlmZiAtciBiN2UzNjk0ZjEwODFi
Njk4NzkyZmYwMzlkOGJiNTg4ZWI0ZDgyYmMxIC1yIGY3MGVmMjFjNDg1NTkwYTlkMWIxZWM5PQoy
YzIyYzFiMTUyNDI3NTY0NCBsaWIvZ2FsYXh5L3dlYi9iYXNlL2ludGVyYWN0aXZlX2Vudmlyb25t
ZW50cy5weQotLS0gYS9saWIvZ2FsYXh5L3dlYi9iYXNlL2ludGVyYWN0aXZlX2Vudmlyb25tZW50
cy5weQorKysgYi9saWIvZ2FsYXh5L3dlYi9iYXNlL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy5w
eQpAQCAtNDQsMTIgKzQ0LDE4IEBACiAgICAgICAgIHZpel9jb25maWcucmVhZCggY29uZl9wYXRo
ICkKICAgICAgICAgc2VsZi5hdHRyLnZpel9jb25maWcgPTNEIHZpel9jb25maWcKPTIwCisgICAg
ICAgIGRlZiBfYm9vbGVhbl9vcHRpb24ob3B0aW9uLCBkZWZhdWx0PTNERmFsc2UpOgorICAgICAg
ICAgICAgaWYgc2VsZi5hdHRyLnZpel9jb25maWcuaGFzX29wdGlvbigibWFpbiIsIG9wdGlvbik6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldGJvb2xlYW4o
Im1haW4iLCBvcHRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biBkZWZhdWx0CisKICAgICAgICAgIyBPbGRlciBzdHlsZSBwb3J0IHJhbmdlIHByb3h5aW5nIC0g
bm90IHN1cmUgd2Ugd2FudCB0byBrZWVwIHRoZXNlPQogYXJvdW5kIG9yIHNob3VsZAogICAgICAg
ICAjIHdlIGFsd2F5cyBhc3N1bWUgdXNlIG9mIEdhbGF4eSBkeW5hbWljIHByb3h5PyBOb25lIG9m
IHRoZXNlIG5lZWQ9CiB0byBiZSBzcGVjaWZpZWQKICAgICAgICAgIyBpZiB1c2luZyB0aGUgR2Fs
YXh5IGR5bmFtaWMgcHJveHkuCi0gICAgICAgIHNlbGYuYXR0ci5QQVNTV09SRF9BVVRIID0zRCBz
ZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIj0KLCAicGFzc3dvcmRfYXV0aCIp
Ci0gICAgICAgIHNlbGYuYXR0ci5BUEFDSEVfVVJMUyA9M0Qgc2VsZi5hdHRyLnZpel9jb25maWcu
Z2V0Ym9vbGVhbigibWFpbiIsID0KImFwYWNoZV91cmxzIikKLSAgICAgICAgc2VsZi5hdHRyLlNT
TF9VUkxTID0zRCBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgInNzPQps
IikKKyAgICAgICAgc2VsZi5hdHRyLlBBU1NXT1JEX0FVVEggPTNEIF9ib29sZWFuX29wdGlvbigi
cGFzc3dvcmRfYXV0aCIpCisgICAgICAgIHNlbGYuYXR0ci5BUEFDSEVfVVJMUyA9M0QgX2Jvb2xl
YW5fb3B0aW9uKCJhcGFjaGVfdXJscyIpCisgICAgICAgIHNlbGYuYXR0ci5TU0xfVVJMUyA9M0Qg
X2Jvb2xlYW5fb3B0aW9uKCJzc2wiKQo9MjAKICAgICBkZWYgd3JpdGVfY29uZl9maWxlKHNlbGYs
IG91dHB1dF9kaXJlY3RvcnksIGV4dHJhPTNEe30pOgogICAgICAgICAiIiIKQEAgLTY4LDcgKzc0
LDkgQEAKICAgICAgICAgICAgICdjb3JzX29yaWdpbic6IHJlcXVlc3QuaG9zdF91cmwsCiAgICAg
ICAgIH0KPTIwCi0gICAgICAgIGlmIHNlbGYuYXR0ci5nYWxheHlfY29uZmlnLmdhbGF4eV9pbmZy
YXN0cnVjdHVyZV91cmxfc2V0OgorICAgICAgICBpZiBzZWxmLmF0dHIudml6X2NvbmZpZy5oYXNf
b3B0aW9uKCJkb2NrZXIiLCAiZ2FsYXh5X3VybCIpOgorICAgICAgICAgICAgY29uZl9maWxlWydn
YWxheHlfdXJsJ10gPTNEIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldHN0cmluZygiZG89CmNrZXIi
LCAiZ2FsYXh5X3VybCIpCisgICAgICAgIGVsaWYgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ2Fs
YXh5X2luZnJhc3RydWN0dXJlX3VybF9zZXQ6CiAgICAgICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4
eV91cmwnXSA9M0Qgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ2FsYXh5X2luZj0KcmFzdHJ1Y3R1
cmVfdXJsLnJzdHJpcCgnLycpICsgJy8nCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb25m
X2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0QgcmVxdWVzdC5hcHBsaWNhdGlvbl91cmwucnN0cmlwKCcv
Jz0KKSArICcvJwoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwv
Y29tbWl0cy80YjJlZmI3MDNlODYvCkNoYW5nZXNldDogICA0YjJlZmI3MDNlODYKVXNlcjogICAg
ICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0xOSAyMTozODozMCswMDowMApTdW1t
YXJ5OiAgICAgUmVtb3ZlIGZpbGVzIGluZGljYXRlZCBieSBCam9lcm4uCk5vIG5lZWQgdG8gTElD
RU5TRSB0aGlzIGRpZmZlcmVudGx5LCBJTlNUQUxMLm1kIHByb2JhYmx5IHNob3VsZCBiZSByZXdy
aXR0ZT0KbiwgYW5kIC5naXRpZ25vcmUgaXMgbm93IHBvaW50bGVzcy4KCmh0dHBzOi8vYml0YnVj
a2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNlbnRyYWwvcHVsbC1yZXF1ZXN0LzUzMy4KQWZmZWN0ZWQg
IzogIDYgZmlsZXMKCmRpZmYgLXIgZjcwZWYyMWM0ODU1OTBhOWQxYjFlYzkyYzIyYzFiMTUyNDI3
NTY0NCAtciA0YjJlZmI3MDNlODYyYzFjOGQ3ZDJhMz0KOWRmNmFkOTc4ZWEwNGFmN2QgY29uZmln
L3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vLmdpdGlnbm9yZQotLS0g
YS9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi8uZ2l0aWdu
b3JlCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotIyBCeXRlLWNvbXBpbGVkIC8gb3B0
aW1pemVkIC8gRExMIGZpbGVzCi1fX3B5Y2FjaGVfXy8KLSoucHlbY29kXQotCi0jIEMgZXh0ZW5z
aW9ucwotKi5zbwotCi0jIERpc3RyaWJ1dGlvbiAvIHBhY2thZ2luZwotLlB5dGhvbgotZW52Lwot
YmluLwotYnVpbGQvCi1kZXZlbG9wLWVnZ3MvCi1kaXN0LwotZWdncy8KLWxpYi8KLWxpYjY0Lwot
cGFydHMvCi1zZGlzdC8KLXZhci8KLSouZWdnLWluZm8vCi0uaW5zdGFsbGVkLmNmZwotKi5lZ2cK
LQotIyBJbnN0YWxsZXIgbG9ncwotcGlwLWxvZy50eHQKLXBpcC1kZWxldGUtdGhpcy1kaXJlY3Rv
cnkudHh0Ci0KLSMgVW5pdCB0ZXN0IC8gY292ZXJhZ2UgcmVwb3J0cwotaHRtbGNvdi8KLS50b3gv
Ci0uY292ZXJhZ2UKLS5jYWNoZQotbm9zZXRlc3RzLnhtbAotY292ZXJhZ2UueG1sCi0KLSMgVHJh
bnNsYXRpb25zCi0qLm1vCi0KLSMgTXIgRGV2ZWxvcGVyCi0ubXIuZGV2ZWxvcGVyLmNmZwotLnBy
b2plY3QKLS5weWRldnByb2plY3QKLQotIyBSb3BlCi0ucm9wZXByb2plY3QKLQotIyBEamFuZ28g
c3R1ZmY6Ci0qLmxvZwotKi5wb3QKLQotIyBTcGhpbnggZG9jdW1lbnRhdGlvbgotZG9jcy9fYnVp
bGQvCi0KCmRpZmYgLXIgZjcwZWYyMWM0ODU1OTBhOWQxYjFlYzkyYzIyYzFiMTUyNDI3NTY0NCAt
ciA0YjJlZmI3MDNlODYyYzFjOGQ3ZDJhMz0KOWRmNmFkOTc4ZWEwNGFmN2QgY29uZmlnL3BsdWdp
bnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vSU5TVEFMTC5tZAotLS0gYS9jb25m
aWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9JTlNUQUxMLm1kCisr
KyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotIyBJbnN0YWxsYXRpb24KLQotV2UndmUgZGV2
ZWxvcGVkIHRoZSB0ZW1wbGF0ZXMgYW5kIGNvbnRhaW5lcnMgc3VjaCB0aGF0IHRoZXkgY2FuIGJl
IHJ1biB0aHI9Cm91Z2ggYW4gQXBhY2hlIHByb3h5IHVzaW5nCi1TU0wuIFRoaXMgcmVxdWlyZXMg
c29tZSBub24tdHJpdmlhbCBhcGFjaGUgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0LgotCi0jIyBS
ZXF1aXJlbWVudHMKLQotICogW21vZF9oZWFkZXJzXShodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9k
b2NzLzIuNC9tb2QvbW9kX2hlYWRlcnMuaHRtbCkKLSAqIFttb2RfcHJveHldKGh0dHA6Ly9odHRw
ZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2RfcHJveHkuaHRtbCkKLSAqIFttb2RfcHJveHlf
aHR0cF0oaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9wcm94eV9odHRw
Lmh0PQptbCkKLSAqIFttb2RfcHJveHlfd3N0dW5uZWxdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3Jn
L2RvY3MvMi40L21vZC9tb2RfcHJveHlfd3N0PQp1bm5lbC5odG1sKQotICogW21vZF9yZXdyaXRl
XShodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX3Jld3JpdGUuaHRtbCkK
LSAqIFttb2Rfc2V0ZW52aWZdKGh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9t
b2Rfc2V0ZW52aWYuaHRtbCkKLQotSVB5dGhvbiBtYWtlcyB1c2Ugb2YgV2ViU29ja2V0cyB3aGlj
aCB3ZSBuZWVkIHRvIHByb3h5IGluIGFwYWNoZS4gU3VwcG9ydCA9CndhcyBhZGRlZCB0byBgYXBh
Y2hlMi40YAotZm9yIHRoaXMsIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBgVWJ1bnR1IDE0LjA0YC4g
VGhlcmUgYXJlIHR1dG9yaWFscyBvbiB0aGU9CiBpbnRlcm5ldCBmb3IgYmFja3BvcnRpbmcKLXRo
ZSB3ZWJzb2NrZXRzIG1vZHVsZSwgYW5kIGluc3RhbGxpbmcgYGFwYWNoZTIuNGAgUFBBcy4KLQot
IyMgQXBhY2hlIENvbmZpZ3VyYXRpb24KLQotSGVyZSBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJh
dGlvbgotCi1gYGBhcGFjaGUKLVJld3JpdGVFbmdpbmUgT24KLVNldEVudklmIFJlcXVlc3RfVVJJ
ICIvaXB5dGhvbi8oWzAtOV0rKS9hcGkva2VybmVscy8iIERPQ0tFUl9QT1JUPTNEJDEKLVJld3Jp
dGVSdWxlICAgICBeL2lweXRob24vKFswLTldKykvYXBpL2tlcm5lbHMvKC4qKSQgICB3czovLzEy
Ny4wLjAuMTokMS9pPQpweXRob24vJDEvYXBpL2tlcm5lbHMvJDIgW1AsTF0KLVJld3JpdGVSdWxl
ICAgICBeL2lweXRob24vKFswLTldKykvKC4qKSQgICAgICAgICAgICAgaHR0cDovL2xvY2FsaG9z
dDokMS9pPQpweXRob24vJDEvJDIgW1AsTF0KLTxMb2NhdGlvbiAvaXB5dGhvbi8+Ci0gICAgICAg
ICMgc3Bvb2YgaGVhZGVycyB0byBtYWtlIG5vdGVwYWQgYWNjZXB0IHRoZSByZXF1ZXN0IGFzIGNv
bWluZyBmcm9tID0KdGhlIHNhbWUgb3JpZ2luCi0gICAgICAgIEhlYWRlciBzZXQgT3JpZ2luICJo
dHRwOi8vMTI3LjAuMC4xOiV7RE9DS0VSX1BPUlR9ZSIKLSAgICAgICAgUmVxdWVzdEhlYWRlciBz
ZXQgT3JpZ2luICJodHRwOi8vMTI3LjAuMC4xOiV7RE9DS0VSX1BPUlR9ZSIKLTwvTG9jYXRpb24+
Ci08L1ZpcnR1YWxIb3N0PgotYGBgCi0KLVdlJ2xsIHN0ZXAgdGhyb3VnaCBsaW5lLWJ5LWxpbmUg
Zm9yIGNsYXJpdHkuCi0KLWBgYGFwYWNoZQotU2V0RW52SWYgUmVxdWVzdF9VUkkgIi9pcHl0aG9u
LyhbMC05XSspL2FwaS9rZXJuZWxzLyIgRE9DS0VSX1BPUlQ9M0QkMQotYGBgCi0KLUhlcmUgd2Ug
Y2hlY2sgdGhlIGBSZXF1ZXN0X1VSSWAgZm9yIHRoZSBwcmVzZW5jZSBmb3IgdGhlIGtlcm5lbCBy
ZXF1ZXN0LiBXPQplIGRvIHRoaXMgb25seSBmb3IgdGhlIGBhcGkva2VybmVsYCBzdWJjYWxsLCBh
cyB0aGUgb25seSBjb25maWd1cmF0aW9uIHdoaWM9CmggbmVlZHMgYWNjZXNzIHRvIGBET0NLRVJf
UE9SVGAgaXMga2VybmVsIGNhbGxzLgotCi1gYGBhcGFjaGUKLVJld3JpdGVSdWxlIF4vaXB5dGhv
bi8oWzAtOV0rKS9hcGkva2VybmVscy8oLiopJCAgIHdzOi8vMTI3LjAuMC4xOiQxL2lweXRoPQpv
bi8kMS9hcGkva2VybmVscy8kMiBbUCxMXQotUmV3cml0ZVJ1bGUgXi9pcHl0aG9uLyhbMC05XSsp
LyguKikkICAgICAgICAgICAgIGh0dHA6Ly9sb2NhbGhvc3Q6JDEvaXB5dGg9Cm9uLyQxLyQyIFtQ
LExdCi1gYGAKLQotVGhlc2UgdHdvIHJ1bGVzIHByb3h5IGBeL2lweXRob24vYCByZXF1ZXN0cyB0
byB0aGVpciBjb3JyZWN0IGxvY2F0aW9ucy4gQVA9CkkgcmVxdWVzdHMgZm9yIHRoZSBJUHl0aG9u
IGtlcm5lbCBhcmUgcm91dGVkIHRocm91Z2ggdGhlIHdzdHVubmVsIChXZWJTb2NrZT0KdCkgcHJv
eHksIHdoaWxlIGFsbCBvdGhlciByZXF1ZXN0cyBnbyB0aHJvdWdoIEhUVFAuIFRoZXJlIGFyZSBt
b2RpZmllZCBsaXN0PQplZCBhZnRlciBib3RoLCBgW1AsTF1gLiBgUGAgc3BlY2lmaWVzIGEgcHJv
eHksIGFuZCBgTGAgc3BlY2lmaWVzIHRoaXMgaXMgdGg9CmUgbGFzdCBydWxlLCB0byBwcmV2ZW50
IHRoZSBzZWNvbmQgcmV3cml0ZSBzdGF0ZW1lbnQgZnJvbSBtYXRjaGluZyBhbGwga2Vybj0KZWwg
Y2FsbHMuCi0KLWBgYGFwYWNoZQotPExvY2F0aW9uIC9pcHl0aG9uLz4KLSAgICAgICAgIyBzcG9v
ZiBoZWFkZXJzIHRvIG1ha2Ugbm90ZXBhZCBhY2NlcHQgdGhlIHJlcXVlc3QgYXMgY29taW5nIGZy
b20gPQp0aGUgc2FtZSBvcmlnaW4KLSAgICAgICAgSGVhZGVyIHNldCBPcmlnaW4gImh0dHA6Ly8x
MjcuMC4wLjE6JXtET0NLRVJfUE9SVH1lIgotICAgICAgICBSZXF1ZXN0SGVhZGVyIHNldCBPcmln
aW4gImh0dHA6Ly8xMjcuMC4wLjE6JXtET0NLRVJfUE9SVH1lIgotPC9Mb2NhdGlvbj4KLWBgYAot
Ci1UaGUgV2ViU29ja2V0IHNlcnZlciBpbiBJUHl0aG9uIHBheXMgYXR0ZW50aW9uIHRvIENyb3Nz
LU9yaWdpbi1SZXF1ZXN0cyBhbj0KZCB3aWxsIHRocm91Z2ggdXAgYSA1MDAgSW50ZXJuYWwgU2Vy
dmVyIEVycm9yIChpbiBkb2NrZXIpIGlmIHlvdSBhdHRlbXB0IHRvPQogc2VuZCBpdCBiYWQgZGF0
YS4gVGh1cywgd2UgdXNlIHRoZSBleHRyYWN0ZWQgcG9ydCBudW1iZXIgZnJvbSB0aGUgZWFybGll
ciA9CmBTZXRFbnZJZmAgcmVxdWVzdCBpbiBvcmRlciB0byBvYnRhaW4gdGhlIHBvcnQgdGhhdCBJ
UHl0aG9uIHdpbGwgYWN0dWFsbHkgcj0KZWNlaXZlIGNvbm5lY3Rpb25zIGZyb20uCi0KLSMjIE5n
aW54IENvbmZpZ3VyYXRpb24KLQotUGxlYXNlIHN1Ym1pdCBpdCBpZiB5b3Ugd3JpdGUgaXQhCgpk
aWZmIC1yIGY3MGVmMjFjNDg1NTkwYTlkMWIxZWM5MmMyMmMxYjE1MjQyNzU2NDQgLXIgNGIyZWZi
NzAzZTg2MmMxYzhkN2QyYTM9CjlkZjZhZDk3OGVhMDRhZjdkIGNvbmZpZy9wbHVnaW5zL2ludGVy
YWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL0xJQ0VOU0UKLS0tIGEvY29uZmlnL3BsdWdpbnMv
aW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vTElDRU5TRQorKysgL2Rldi9udWxsCkBA
IC0xLDIxICswLDAgQEAKLVRoZSBNSVQgTGljZW5zZSAoTUlUKQotCi1Db3B5cmlnaHQgKGMpIDIw
MTQgQmo9QzM9QjZybiBHcj1DMz1CQ25pbmcKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl
ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY289CnB5Ci1vZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwgdG8gZD0KZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaD0KdHMKLXRvIHVzZSwgY29weSwg
bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl
bGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg
cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW49CiBhbGwKLWNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
Ci1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotTElB
QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlI9Ck9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G
VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiA9ClRIRQotU09GVFdBUkUuClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciBmNzBlZjIxYzQ4NTU5MGE5ZDFiMWVj
OTJjMjJjMWIxNTI0Mjc1NjQ0IC1yIDRiMmVmYjcwM2U4NjJjMWM4ZDdkMmEzPQo5ZGY2YWQ5Nzhl
YTA0YWY3ZCBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9S
RUFETUUubWQKLS0tIGEvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lw
eXRob24vUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLUdhbGF4eSBJ
UHl0aG9uIEludGVncmF0aW9uCi09M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9Cj0zRD0zRAotCi1UaGlzIHByb2pl
Y3RzIGludGVncmF0ZXMgW0lQeXRob24gTm90ZWJvb2tdKGh0dHA6Ly9pcHl0aG9uLm9yZy9ub3Rl
Ym9vay5odD0KbWwpLCBhIGludGVyYWN0aXZlIGNvbXB1dGF0aW9uYWwgZW52aXJvbm1lbnQsIHdp
dGggW0dhbGF4eV0oaHR0cDovL2dhbGF4eXByPQpvamVjdC5vcmcpLj0yMAotV2UgaG9wZSB0byBt
YWtlIEdhbGF4eSBtb3JlIGF0dHJhY3RpdmUgZm9yIGJpb2luZm9ybWF0aWNpYW5zIGFuZCB0byBj
b21iaW49CmUgdGhlIHBvd2VyIG9mIGJvdGggcHJvamVjdHMgdG8gdW5sb2NrIGNyZWF0aXZpdHkg
aW4gZGF0YSBhbmFseXNpcywgYnV0IGFscz0KbyBpbiBOZXh0LUdlbmVyYXRpb24tVHJhaW5pbmcg
Y291cnNlcy4KLQotIVtJUHl0aG9uIGluIEdhbGF4eV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNv
bnRlbnQuY29tL2JncnVlbmluZy9nYWxheHktaXA9Cnl0aG9uL21hc3Rlci9zdGF0aWMvaW1hZ2Vz
L2lweXRob25faW5fZ2FsYXh5LnBuZykKLQotWyFbSU1BR0UgQUxUIFRFWFQgSEVSRV0oaHR0cDov
L2ltZy55b3V0dWJlLmNvbS92aS9qUUR5VHVZbm4xay8wLmpwZyldKGh0dHA9CjovL3d3dy55b3V0
dWJlLmNvbS93YXRjaD92PTNEalFEeVR1WW5uMWspCi0KLQotUmVxdWlyZW1lbnRzCi09M0Q9M0Q9
M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QKLQotVGhlIG9ubHkgcmVxdWlyZW1lbnQgaXMg
dG8gaGF2ZSBbRG9ja2VyXShodHRwczovL3d3dy5kb2NrZXIuY29tKSBpbnN0YWxsZWQ9CiBvbiB5
b3VyIHN5c3RlbS4KLUZvciBhIGRldGFpbGVkIGluc3RydWN0aW9uIGhvdyB0byBpbnN0YWxsIGRv
Y2tlciwgcGxlYXNlIGxvb2sgYXQgdGhlIFtkb2NrPQplciB3ZWJzaXRlXShodHRwczovL2RvY3Mu
ZG9ja2VyLmNvbS9pbnN0YWxsYXRpb24vKS4KLQotCi1JbnN0YWxsYXRpb24KLT0zRD0zRD0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAotCi1Db3B5IHRoZSB0ZW1wbGF0ZSBhbmQgY29uZmln
IGZvbGRlciBpbiB5b3VyIGBgR0FMQVhZX1JPT1QvY29uZmlnL3BsdWdpbnMvdj0KaXN1YWxpemF0
aW9ucy9pcHl0aG9uYGAgZm9sZGVyIGFuZCByZXN0YXJ0IEdhbGF4eS4KLUFsdGVybmF0aXZlbHks
IHlvdSBjYW4gY2xvbmUgdGhlIHJlcG9zaXRvcnkgd2l0aAotCi1gYGBiYXNoCi1naXQgY2xvbmUg
aHR0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbi5naXQgY29uZmlnL3Bs
dWdpbnMvdj0KaXN1YWxpemF0aW9ucy9pcHl0aG9uCi1gYGBgCi0KLVRoZSBJUHl0aG9uIHZpc3Vh
bGlzYXRpb24gb3B0aW9uIHNob3VsZCBiZSB2aXNpYmxlIG5leHQgdG8gdGhlIHVzdWFsIENoYXJ0
PQpzIG9yIFRyYWNrc3RlciBvcHRpb25zIGluIHlvdXIgdmlzdWFsaXNhdGlvbiBtZW51ZS4KLQot
IVtTdGFydGluZyBJUHl0aG9uIGluIEdhbGF4eV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRl
bnQuY29tL2JncnVlbmluZy89CmdhbGF4eS1pcHl0aG9uL21hc3Rlci9zdGF0aWMvaW1hZ2VzL3N0
YXJ0X2lweXRob24ucG5nKQotCi0KLUZlYXR1cmVzCi09M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QK
LQotICogcnVuIElQeXRob24gZGlyZWN0bHkgaW4geW91ciBHYWxheHkgbWFpbiB3aW5kb3cgb3Ig
aW4gR2FsYXh5IFNjcmF0Y2hib29rCi0gKiBjb21wbGV0ZSBlbmNhcHN1bGF0ZWQgcHl0aG9uIGVu
dmlyb25tZW50IHdpdGggbWF0cGxvdGxpYiwgcGFuZGFzIGFuZCBmcj0KaWVuZHMgaW5zdGFsbGVk
Ci0gKiBhY2Nlc3MgdG8gYWxsIGRhdGFzZXRzIGZyb20geW91ciBjdXJyZW50IGhpc3Rvcnkgdmlh
IHByZS1kZWZpbmVkIElQeXRobz0KbiBmdW5jdGlvbgotICogbWFuaXB1bGF0ZSBhbmQgcGxvdCBk
YXRhIGFzIHlvdSBsaWtlIGFuZCBleHBvcnQgeW91ciBuZXcgZmlsZXMgYmFjayBpbnQ9Cm8gdGhl
IEdhbGF4eSBoaXN0b3J5Ci0gKiBhY2Nlc3MgeW91ciBHYWxheHkgaW5zdGFuY2UgZnJvbSBJUHl0
aG9uIHdpdGggYmlvYmxlbmQgYW5kIHJlZGVmaW5lZCBmdT0KbmN0aW9ucwotICogc2F2ZSB0aGUg
SVB5dGhvbiBOb3RlYm9vayBpbnRvIHlvdXIgR2FsYXh5IGhpc3RvcnkKLSAqIG5vdGVib29rIHBl
cnNpc3RlbmNlIGFjcm9zcyBzZXNzaW9ucwotICogc2F2ZWQgSVB5dGhvbiBOb3RlYm9vayBmaWxl
cyBjYW4gYmUgdmlld2VkIGluIEhUTUwgYW5kIHJlLW9wZW5lZAotICogc2VsZi1jbG9zaW5nIGFu
ZCBjbGVhbmluZyBJUHl0aG9uIGRvY2tlciBjb250YWluZXIKLQotSG93IGRvZXMgaXQgd29yawot
PTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECi0KLVRoZSBt
YWtvIHRlbXBsYXRlIGZyb20gdGhlIEdhbGF4eSB2aXN1YWxpc2F0aW9uIGZyYW1ld29yayByZW5k
ZXJzIHRoZSBpbnRlPQpyZmFjZSBhbmQgYnVpbGRzIGFsbCBmaWxlcyBhbmQgY29tbWFuZHMgbmVl
ZGVkIHRvIGx1bmNoIHRoZSBkb2NrZXIgY29udGFpbmU9CnIuIEEgY29uZmlnIGZpbGUgaXMgc2F2
ZWQgdW5kZXIgYGAvaW1wb3J0L2BgIGluc2lkZSB0aGUgZG9ja2VyIGNvbnRhaW5lci4gVD0KaGUg
SVB5dGhvbiB3ZWJwYWdlIHJ1bm5pbmcgaW4gZG9ja2VyIHdpbGwgYmUgaW5jbHVkZWQgaW4gYSBI
VE1MIG9iamVjdCBhbmQgPQpkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuPTIwCi1EZXBlbmRpbmcgb24g
eW91ciBjb25maWd1cmF0aW9uIHNvbWUgSmF2YVNjcmlwdCBtYWdpYyBpcyBkb25lIHRvIGFkZCBh
biBvYj0KamVjdCB0byB0aGUgRE9NLCB3aGljaCB3aWxsIGJlIGxvYWRlZCBieSB0aGUgYnJvd3Nl
ciBhbmQgY29uZGl0aW9uYWxseSBoYW5kPQpsZXMgbG9naW4uCi1Jc2lkZSBvZiBkb2NrZXIgVENQ
IGNvbm5lY3Rpb25zIGFyZSBtb25pdG9yZWQgdXNpbmcgY3Jvbi4gQXMgc29vbiBhcyB0aGUgdT0K
c2VyIHF1aXRzIHVzaW5nIHRoZSBub3RlYm9vaywgdGhlIGRyb3BwaW5nIFRDUCBjb25uZWN0aW9u
cyBhcmUgcmVjb2duaXNlZCBhPQpuZCB0aGUgY290YWluZXIgY2xlYW5zIHVwIGFmdGVyIGl0c2Vs
ZiBhbmQga2lsbHMgaXRzZWxmLgotCi0KLQotRnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMKLT0zRD0z
RD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0z
RD0zRD0zRAotCi1Gb3IgeW91ciBjb252aWVuY2UsIHdlIGhhdmUgYWRkZWQgYSBmZXcgcHJlLWRl
ZmluZWQgZnVuY3Rpb25zIHRvIHRoZSBJUHl0aD0Kb24gcHJvZmlsZS4KLQotIyMjIGdldAotCi0g
ICBUaGUgZ2V0IGZ1bmN0aW9uIHdpbGwgY29weSBhIGRhdGFzZXQsIGlkZW50aWZpZWQgYnkgdGhl
IGhpc3RvcnlfaWQsIGZybz0KbSB5b3VyIGN1cnJlbnQgR2FsYXh5PTIwCi0gICBpbnRvIHRoZSBk
b2NrZXIgY29udGFpbmVyLiBJdCB3aWxsIHJldHVybiB0aGUgZmlsZSBwYXRoIHRvIHRoZSBjb3Bp
ZWQgZj0KaWxlLgotCi0gICAqRXhhbXBsZSo6Ci0gICBgYGBweXRob24KLSAgICAgIHdpdGggb3Bl
biggZ2V0KCA0NCApLCAncicpIGFzIGhhbmRsZToKLSAgICAgICAgIGZvciBsaW5lIGluIGhhbmRs
ZToKLSAgICAgICAgICAgIHByaW50KCBsaW5lICkKLSAgIGBgYD0yMAotCi0jIyMgcHV0Ci0KLSAg
IFRoZSBwdXQgZnVuY3Rpb24gdGFrZXMgYSBmaWxlIHBhdGggYW5kIHRyYW5zZmVycyB0aGUgZmls
ZSB0byB0aGUgY3VycmVuPQp0IGhpc3Rvcnkgb2YgeW91ciBHYWxheHkgc2Vzc2lvbi4KLQotICAg
KkV4YW1wbGUqOgotICAgYGBgcHl0aG9uCi0gICAgICBwdXQoICcuL215X2ZpbGUudHN2JywgZmls
ZV90eXBlID0zRCAndGFidWxhcicpCi0gICBgYGAKLQotIyMjIEhJU1RPUllfSUQKLQotICAgQWNj
ZXNzaW5nIHlvdXIgY3VycmVudCBoaXN0b3J5IGlzIHBvc3NpYmxlIHdpdGggdGhlIHByZS1kZWZp
bmVkIEhJU1RPUlk9Cl9JRCB2YXJpYWJsZS4KLSAgPTIwCi0KLSMjIyBjb25uZWN0IHRvIEdhbGF4
eQotCi0gICBJZiB5b3Ugd2FudCB0byBjb21tdW5pY2F0ZSB3aXRoIEdhbGF4eSB5b3UgY2FuIHVz
ZSBgYGBnZXRfZ2FsYXh5X2Nvbm5lYz0KdGlvbigpYGBgIHRvIGdldCBhbiBbYmlvYmxlbmQgR2Fs
YXh5SW5zdGFuY2Ugb2JqZWN0XShodHRwOi8vYmlvYmxlbmQucmVhZHRoPQplZG9jcy5vcmcvZW4v
bGF0ZXN0L2FwaV9kb2NzL2dhbGF4eS9hbGwuaHRtbD9oaWdobGlnaHQ9M0RnYWxheHlpbnN0YW5j
ZSkuCi0KLSAgICpFeGFtcGxlKjoKLSAgIGBgYHB5dGhvbgotICAgICAgZnJvbSBiaW9ibGVuZC5n
YWxheHkuaGlzdG9yaWVzIGltcG9ydCBIaXN0b3J5Q2xpZW50Ci0gICAgICBnaSA9M0QgZ2V0X2dh
bGF4eV9jb25uZWN0aW9uKCkKLSAgICAgIGhjID0zRCBIaXN0b3J5Q2xpZW50KCBnaSApCi0gICAg
ICBmb3IgZGF0YXNldCBpbiBoYy5zaG93X2hpc3RvcnkoIEhJU1RPUllfSUQgLCBjb250ZW50cz0z
RFRydWUpICk6Ci0gICAgICAgICBwcmludCggZGF0YXNldFsnaWQnXSApCi0gICBgYGAKLQotCi1T
ZWN1cml0eQotPTNEPTNEPTNEPTNEPTNEPTNEPTNEPTNECi0KLUJ5IGRlZmF1bHQsIG5vIHNlY3Vy
aXR5IHR1cm5lZCBvbi4gVG8gZG8gdGhpcywgeW91IG11c3QgYWRqdXN0IHR3byB2YXJpYWJsPQpl
cywgYGFwYWNoZV91cmxzYCBhbmQKLWBwYXNzd29yZF9hdXRoYCBpbiB0aGUgY29uZmlndXJhdGlv
biBmaWxlIChgY29uZmlnL2lweXRob24uY29uZmApLj0yMAotCi1UaGUgYGFwYWNoZV91cmxzYCB2
YXJpYWJsZSBzaG91bGQgYmUgc2V0IHRvIGBUcnVlYCwgYW5kIGNvbnRhaW5lcnMgc2hvdWxkID0K
YmUgc2VjdXJlZCB2aWEgQXBhY2hlK1NTTCBmb3IgcHJvZHVjdGlvbiB1c2FnZS4gUGxlYXNlIHNl
ZSB0aGUgW3NldHVwXShJTlNUPQpBTEwubWQpIGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9u
LgotCi1UaGUgYHBhc3N3b3JkX2F1dGhgIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQgdG8gYFRydWVg
LiBJdCBmdW5jdGlvbnMgYnkgZ2VuZT0KcmF0aW5nIGEgcmFuZG9tIHBhc3N3b3JkIHdoaWNoIGlz
IG9ubHkgc2hhcmVkIHdpdGggdGhlIGRvY2tlciwgYW5kIHRoZSB1c2VyPQoncyBicm93c2VyIHRo
cm91Z2ggR2FsYXh5LiBJbiB0aGVvcnkgdGhpcyBzaG91bGQgYmUgYSBzZWN1cmUgc3lzdGVtIChv
ciBhdCA9CmxlYXN0IGFzIHNlY3VyZSBhcyB0aGUgd2Vha2VzdCBsaW5rKSwgaG93ZXZlciBpZiB5
b3UgZmluZCBhIHZ1bG5lcmFiaWxpdHkgaT0KbiB0aGUgc3lzdGVtIHdlJ3ZlIGRldmlzZWQsIHBs
ZWFzZSBjb250YWN0IHVzIGFuZCB3ZSdsbCBwYXRjaCBpdCBhcyBzb29uIGFzPQogcG9zc2libGUh
Ci0KLQotQXV0aG9ycwotPTNEPTNEPTNEPTNEPTNEPTNEPTNECi0KLSAqIEJqPUMzPUI2cm4gR3I9
QzM9QkNuaW5nIDxiam9lcm4uZ3J1ZW5pbmdAZ21haWwuY29tPgotICogRXJpYyBSYXNjaGUgPHJh
c2NoZS5lcmljQHlhbmRleC5ydT4KLQotCi1IaXN0b3J5Ci09M0Q9M0Q9M0Q9M0Q9M0Q9M0Q9M0QK
LQotLSB2MC4xOiBJbml0aWFsIHB1YmxpYyByZWxlYXNlICgwMS4wOC4yMDE0KQotCi0KLUxpY2Vu
Y2UgKE1JVCkKLT0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRD0zRAotCi1QZXJt
aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv
YnRhaW5pbmcgYSBjbz0KcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkPQplYWwKLWluIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdoPQp0cwotdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi1mdXJuaXNoZWQgdG8gZG8g
c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRl
ZCBpbgotYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu
Ci0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBFWFBSRVNTIE9SCi1JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE
IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLUZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RQotQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg
REFNQUdFUyBPUiBPVEhFUgotTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U
UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlI9Ck9NLAotT1VUIE9GIE9SIElOIENP
Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJ
TgotVEhFIFNPRlRXQVJFLgoKZGlmZiAtciBmNzBlZjIxYzQ4NTU5MGE5ZDFiMWVjOTJjMjJjMWIx
NTI0Mjc1NjQ0IC1yIDRiMmVmYjcwM2U4NjJjMWM4ZDdkMmEzPQo5ZGY2YWQ5NzhlYTA0YWY3ZCBj
b25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9zdGF0aWMvaW09
CmFnZXMvaXB5dGhvbl9pbl9nYWxheHkucG5nCkJpbmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5zL2lu
dGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3N0YXRpYy9pbWFnZXMvaT0KcHl0aG9uX2lu
X2dhbGF4eS5wbmcgaGFzIGNoYW5nZWQKCmRpZmYgLXIgZjcwZWYyMWM0ODU1OTBhOWQxYjFlYzky
YzIyYzFiMTUyNDI3NTY0NCAtciA0YjJlZmI3MDNlODYyYzFjOGQ3ZDJhMz0KOWRmNmFkOTc4ZWEw
NGFmN2QgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vc3Rh
dGljL2ltPQphZ2VzL3N0YXJ0X2lweXRob24ucG5nCkJpbmFyeSBmaWxlIGNvbmZpZy9wbHVnaW5z
L2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3N0YXRpYy9pbWFnZXMvcz0KdGFydF9p
cHl0aG9uLnBuZyBoYXMgY2hhbmdlZAoKCmh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2Fs
YXh5LWNlbnRyYWwvY29tbWl0cy83MGY3ZmY4YzZhOTYvCkNoYW5nZXNldDogICA3MGY3ZmY4YzZh
OTYKVXNlcjogICAgICAgIGptY2hpbHRvbgpEYXRlOiAgICAgICAgMjAxNC0xMC0yMCAyMToyMjoy
NyswMDowMApTdW1tYXJ5OiAgICAgTWVyZ2VkIGluIGptY2hpbHRvbi9nYWxheHktY2VudHJhbC1p
ZSAocHVsbCByZXF1ZXN0ICM1MzMpCgpJbnRlcmFjdGl2ZSBFbnZpcm9ubWVudHMgUGx1Z2luIEZy
YW1ld29yayB3aXRoIElQeXRob24gUGx1Z2luCkFmZmVjdGVkICM6ICAzNSBmaWxlcwoKZGlmZiAt
ciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5
NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBjbGllbnQvZ2FsYXh5L3NjcmlwdHMvZ2Fs
YXh5LmludGVyYWN0aXZlX2Vudmlyb25tZW50cy5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NsaWVu
dC9nYWxheHkvc2NyaXB0cy9nYWxheHkuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmpzCkBAIC0w
LDAgKzEsNTkgQEAKKy8qKgorICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gcmVtb3ZlIGNvbnRlbnQg
ZnJvbSB0aGUgbWFpbiBhcmVhIGFuZCBhZGQgdGhlIG5vdGU9CmJvb2suCisgKiBOb3QgaWRlbXBv
dGVudAorICovCitmdW5jdGlvbiBhcHBlbmRfbm90ZWJvb2sodXJsKXsKKyAgICBjbGVhcl9tYWlu
X2FyZWEoKTsKKyAgICAkKCcjbWFpbicpLmFwcGVuZCgnPGlmcmFtZSBmcmFtZUJvcmRlcj0zRCIw
IiBzZWFtbGVzcz0zRCJzZWFtbGVzcyIgc3R5PQpsZT0zRCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAx
MDAlOyBvdmVyZmxvdzpoaWRkZW47IiBzY3JvbGxpbmc9M0Qibm8iIHNyYz0zRCI9CicrIHVybCAr
JyI+PC9pZnJhbWU+JworICAgICk7Cit9CisKK2Z1bmN0aW9uIGNsZWFyX21haW5fYXJlYSgpewor
ICAgICQoJyNzcGlubmVyJykucmVtb3ZlKCk7CisgICAgJCgnI21haW4nKS5jaGlsZHJlbigpLnJl
bW92ZSgpOworfQorCitmdW5jdGlvbiBkaXNwbGF5X3NwaW5uZXIoKXsKKyAgICAgICAgJCgnI21h
aW4nKS5hcHBlbmQoJzxpbWcgaWQ9M0Qic3Bpbm5lciIgc3JjPTNEIicgKyBnYWxheHlfcm9vdCAr
ICcvPQpzdGF0aWMvc3R5bGUvbGFyZ2VzcGlubmVyLmdpZiIgc3R5bGU9M0QicG9zaXRpb246YWJz
b2x1dGU7bWFyZ2luOmF1dG87dG9wOjA9CjtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsiPicpOwor
fQorCisKKy8qKgorICogVGVzdCBhdmFpbGFiaWxpdHkgb2YgYSBVUkwsIGFuZCBjYWxsIGEgY2Fs
bGJhY2sgd2hlbiBkb25lLgorICogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjUzOTAyMDYv
MzQ3MzY4CisgKiBAcGFyYW0ge1N0cmluZ30gdXJsOiBVUkwgdG8gdGVzdCBhdmFpbGFiaWxpdHkg
b2YuIE11c3QgcmV0dXJuIGEgMjAwICgzMD0KMi0+MjAwIGlzIE9LKS4KKyAqIEBwYXJhbSB7U3Ry
aW5nfSBjYWxsYmFjazogZnVuY3Rpb24gdG8gY2FsbCBvbmNlIHN1Y2Nlc3NmdWxseSBjb25uZWN0
ZWQuCisgKgorICovCitmdW5jdGlvbiB0ZXN0X2llX2F2YWlsYWJpbGl0eSh1cmwsIHN1Y2Nlc3Nf
Y2FsbGJhY2speworICAgIHZhciByZXF1ZXN0X2NvdW50ID0zRCAwOworICAgIGRpc3BsYXlfc3Bp
bm5lcigpOworICAgIGludGVydmFsID0zRCBzZXRJbnRlcnZhbChmdW5jdGlvbigpeworICAgICAg
ICAkLmFqYXgoeworICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICB4aHJGaWVsZHM6
IHsKKyAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgICAgIHRpbWVvdXQ6IDUwMCwKKyAg
ICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coIkNvbm5lY3RlZCB0byBJRSwgcmV0dXJuaW5nIik7CisgICAgICAgICAgICAgICAgY2xlYXJJ
bnRlcnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgc3VjY2Vzc19jYWxsYmFjaygpOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihqcXhociwgc3RhdHVz
LCBlcnJvcil7CisgICAgICAgICAgICAgICAgcmVxdWVzdF9jb3VudCsrOworICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCJSZXF1ZXN0ICIgKyByZXF1ZXN0X2NvdW50KTsKKyAgICAgICAgICAg
ICAgICBpZihyZXF1ZXN0X2NvdW50ID4gMzApeworICAgICAgICAgICAgICAgICAgICBjbGVhcklu
dGVydmFsKGludGVydmFsKTsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJfbWFpbl9hcmVhKCk7
CisgICAgICAgICAgICAgICAgICAgIHRvYXN0ci5lcnJvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICJDb3VsZCBub3QgY29ubmVjdCB0byBJRSwgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0PQpv
ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMjAwMDAsICd0YXBUb0Rpc209
Cmlzcyc6IGZhbHNlfQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwgMTAwMCk7Cit9CgpkaWZmIC1yIDM1
YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRl
NmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGNvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2Ft
cGxlCi0tLSBhL2NvbmZpZy9kYXRhdHlwZXNfY29uZi54bWwuc2FtcGxlCisrKyBiL2NvbmZpZy9k
YXRhdHlwZXNfY29uZi54bWwuc2FtcGxlCkBAIC0yNDksNiArMjQ5LDggQEAKICAgICA8ZGF0YXR5
cGUgZXh0ZW5zaW9uPTNEInNucG1hdHJpeCIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLmdlbmV0
aWNzOlNOPQpQTWF0cml4IiBkaXNwbGF5X2luX3VwbG9hZD0zRCJ0cnVlIi8+PGRhdGF0eXBlIGV4
dGVuc2lvbj0zRCJ4bHMiIHR5cGU9M0QiZ2E9CmxheHkuZGF0YXR5cGVzLnRhYnVsYXI6VGFidWxh
ciIvPjwhLS0gRW5kIFJHZW5ldGljcyBEYXRhdHlwZXMgLS0+CisgICAgPGRhdGF0eXBlIGV4dGVu
c2lvbj0zRCJpcHluYiIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnRleHQ6SXB5bmIiIGRpcz0K
cGxheV9pbl91cGxvYWQ9M0QiVHJ1ZSIgLz4KKyAgICA8ZGF0YXR5cGUgZXh0ZW5zaW9uPTNEImpz
b24iIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0Okpzb24iIGRpc3BsPQpheV9pbl91cGxv
YWQ9M0QiVHJ1ZSIgLz48IS0tIGdyYXBoIGRhdGF0eXBlcyAtLT48ZGF0YXR5cGUgZXh0ZW5zaW9u
PTNEInhnbW09CmwiIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy5ncmFwaDpYZ21tbCIgZGlzcGxh
eV9pbl91cGxvYWQ9M0QidHJ1ZSIvPjxkYXRhdD0KeXBlIGV4dGVuc2lvbj0zRCJzaWYiIHR5cGU9
M0QiZ2FsYXh5LmRhdGF0eXBlcy5ncmFwaDpTaWYiIGRpc3BsYXlfaW5fdXBsb2FkPQo9M0QidHJ1
ZSIvPgpAQCAtMjkyLDYgKzI5NCw4IEBACiAgICAgPHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0
YXR5cGVzLnRhYnVsYXI6U2FtIi8+PHNuaWZmZXIgdHlwZT0zRCJnYWxheD0KeS5kYXRhdHlwZXMu
ZGF0YTpOZXdpY2siLz48c25pZmZlciB0eXBlPTNEImdhbGF4eS5kYXRhdHlwZXMuZGF0YTpOZXh1
cyIvPgorICAgIDxzbmlmZmVyIHR5cGU9M0QiZ2FsYXh5LmRhdGF0eXBlcy50ZXh0OklweW5iIi8+
CisgICAgPHNuaWZmZXIgdHlwZT0zRCJnYWxheHkuZGF0YXR5cGVzLnRleHQ6SnNvbiIvPjxzbmlm
ZmVyIHR5cGU9M0QiZ2FsYXh5Lj0KZGF0YXR5cGVzLmltYWdlczpKcGciLz48c25pZmZlciB0eXBl
PTNEImdhbGF4eS5kYXRhdHlwZXMuaW1hZ2VzOlBuZyIvPjxzbmlmPQpmZXIgdHlwZT0zRCJnYWxh
eHkuZGF0YXR5cGVzLmltYWdlczpUaWZmIi8+CgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRi
ZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUy
Y2M1YWQyYjA0IGNvbmZpZy9nYWxheHkuaW5pLnNhbXBsZQotLS0gYS9jb25maWcvZ2FsYXh5Lmlu
aS5zYW1wbGUKKysrIGIvY29uZmlnL2dhbGF4eS5pbmkuc2FtcGxlCkBAIC0yMjEsOSArMjIxLDE1
IEBACj0yMAogIyBWaXN1YWxpemF0aW9ucyBjb25maWcgZGlyZWN0b3J5OiB3aGVyZSB0byBsb29r
IGZvciBpbmRpdmlkdWFsIHZpc3VhbGl6YXQ9CmlvbiBwbHVnaW5zLgogIyBUaGUgcGF0aCBpcyBy
ZWxhdGl2ZSB0byB0aGUgR2FsYXh5IHJvb3QgZGlyLiBUbyB1c2UgYW4gYWJzb2x1dGUgcGF0aCBi
ZWc9CmluIHRoZSBwYXRoCi0jIHdpdGggJy8nLiBEZWZhdWx0cyB0byAiY29uZmlnL3BsdWdpbnMv
dmlzdWFsaXphdGlvbnMiLgorIyB3aXRoICcvJy4gVGhpcyBpcyBhIGNvbW1hIHNlcGFyYXRlZCBs
aXN0LiBEZWZhdWx0cyB0byAiY29uZmlnL3BsdWdpbnMvdmk9CnN1YWxpemF0aW9ucyIuCiAjdmlz
dWFsaXphdGlvbl9wbHVnaW5zX2RpcmVjdG9yeSA9M0QgY29uZmlnL3BsdWdpbnMvdmlzdWFsaXph
dGlvbnMKPTIwCisjIEludGVyYWN0aXZlIGVudmlyb25tZW50IHBsdWdpbnMgcm9vdCBkaXJlY3Rv
cnk6IHdoZXJlIHRvIGxvb2sgZm9yIGludGVyYT0KY3RpdmUgZW52aXJvbm1lbnQKKyMgcGx1Z2lu
cy4gQnkgZGVmYXVsdCBub25lIHdpbGwgYmUgbG9hZGVkLiBTZXQgdG8gY29uZmlnL3BsdWdpbnMv
aW50ZXJhY3RpPQp2ZV9lbnZpcm9ubWVudHMKKyMgdG8gbG9hZCBHYWxheHkncyBzdG9jayBwbHVn
aW5zIChjdXJyZW50bHkganVzdCBJUHl0aG9uKS4gVGhlc2Ugd2lsbCByZXF1PQppcmUgRG9ja2Vy
CisjIHRvIGJlIGNvbmZpZ3VyZWQgYW5kIGhhdmUgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgc28g
cHJvY2VlZCB3aXRoIGNhdXRpbz0Kbi4KKyNpbnRlcmFjdGl2ZV9lbnZpcm9ubWVudF9wbHVnaW5z
X2RpcmVjdG9yeSA9M0Q9MjAKKwogIyBFYWNoIGpvYiBpcyBnaXZlbiBhIHVuaXF1ZSBlbXB0eSBk
aXJlY3RvcnkgYXMgaXRzIGN1cnJlbnQgd29ya2luZyBkaXJlY3Q9Cm9yeS4KICMgVGhpcyBvcHRp
b24gZGVmaW5lcyBpbiB3aGF0IHBhcmVudCBkaXJlY3RvcnkgdGhvc2UgZGlyZWN0b3JpZXMgd2ls
bCBiZQogIyBjcmVhdGVkLgpAQCAtNDIxLDYgKzQyNywxMSBAQAogIyAtICRpc284NjAxIChjb21w
bGV0ZSBmb3JtYXQgc3RyaW5nIGFzIHNwZWNpZmllZCBieSBJU08gODYwMSBpbnRlcm5hdGlvbmE9
Cmwgc3RhbmRhcmQpLgogIyBwcmV0dHlfZGF0ZXRpbWVfZm9ybWF0ID0zRCAkbG9jYWxlIChVVEMp
Cj0yMAorIyBVUkwgKHdpdGggc2NoZW1hIGh0dHAvaHR0cHMpIG9mIHRoZSBHYWxheHkgaW5zdGFu
Y2UgYXMgYWNjZXNzaWJsZSB3aXRoaW49CiB5b3VyIGxvY2FsCisjIG5ldHdvcmsgLSBpZiBzcGVj
aWZpZWQgdXNlZCBhcyBhIGRlZmF1bHQgYnkgcHVsc2FyIGZpbGUgc3RhZ2luZyBhbmQgSVB5dD0K
aG9uIGRvY2tlcgorIyBjb250YWluZXIgZm9yIGNvbW11bmljYXRpbmcgYmFjayB3aXRoIEdhbGF4
eSB2aWEgdGhlIEFQSS4KKyNnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsID0zRCBodHRwOi8vbG9j
YWxob3N0OjgwODAKKwogIyBUaGUgVVJMIG9mIHRoZSBwYWdlIHRvIGRpc3BsYXkgaW4gR2FsYXh5
J3MgbWlkZGxlIHBhbmUgd2hlbiBsb2FkZWQuIFRoaXM9CiBjYW4gYmU9MjAKICMgYW4gYWJzb2x1
dGUgb3IgcmVsYXRpdmUgVVJMLgogI3dlbGNvbWVfdXJsID0zRCAvc3RhdGljL3dlbGNvbWUuaHRt
bApAQCAtNTE3LDYgKzUyOCwyNiBAQAogIyByZXF1ZXN0cy4KICNuZ2lueF91cGxvYWRfcGF0aCA9
M0QgRmFsc2UKPTIwCisjIEhhdmUgR2FsYXh5IG1hbmFnZSBkeW5hbWljIHByb3h5IGNvbXBvbmVu
dCBmb3Igcm91dGluZyByZXF1ZXN0cyB0byBvdGhlcgorIyBzZXJ2aWNlcyBiYXNlZCBvbiBHYWxh
eHkncyBzZXNzaW9uIGNvb2tpZS4gSXQgd2lsbCBhdHRlbXB0IHRvIGRvIHRoaXMgYnkKKyMgZGVm
YXVsdCB0aG91Z2ggeW91IGRvIG5lZWQgdG8gaW5zdGFsbCBub2RlK25wbSBhbmQgZG8gYW4gbnBt
IGluc3RhbGwgZnJvbQorIyBgbGliL2dhbGF4eS93ZWIvcHJveHkvanNgLiBJdCBpcyBnZW5lcmFs
bHkgbW9yZSByb2J1c3QgdG8gY29uZmlndXJlIHRoaXMKKyMgZXh0ZXJuYWxseSBtYW5hZ2luZyBp
dCBob3dldmVyIEdhbGF4eSBpcyBtYW5hZ2VkLiBJZiBUcnVlIEdhbGF4eSB3aWxsIG9uPQpseQor
IyBsYXVuY2ggdGhlIHByb3h5IGlmIGl0IGlzIGFjdHVhbGx5IGdvaW5nIHRvIGJlIHVzZWQgKGUu
Zy4gZm9yIElQeXRob24pLgorI2R5bmFtaWNfcHJveHlfbWFuYWdlPTNEVHJ1ZQorCisjIER5bmFt
aWMgcHJveHkgY2FuIHVzZSBhbiBTUUxpdGUgZGF0YWJhc2Ugb3IgYSBKU09OIGZpbGUgZm9yIElQ
Qywgc2V0IHRoYXQKKyMgaGVyZS4KKyNkeW5hbWljX3Byb3h5X3Nlc3Npb25fbWFwPTNEZGF0YWJh
c2Uvc2Vzc2lvbl9tYXAuc3FsaXRlCisKKyMgU2V0IHRoZSBwb3J0IGFuZCBJUCBmb3IgdGhlIHRo
ZSBkeW5hbWljIHByb3h5IHRvIGJpbmQgdG8sIHRoaXMgbXVzdCBtYXRjaAorIyB0aGUgZXh0ZXJu
YWwgY29uZmlndXJhdGlvbiBpZiBkeW5hbWljX3Byb3h5X21hbmFnZSBpcyBGYWxzZS4KKyNkeW5h
bWljX3Byb3h5X2JpbmRfcG9ydD0zRDg4MDAKKyNkeW5hbWljX3Byb3h5X2JpbmRfaXA9M0QwLjAu
MC4wCisKKyMgRW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG9mIEdhbGF4eS1tYW5hZ2VkIGR5bmFt
aWMgcHJveHkuCisjZHluYW1pY19wcm94eV9kZWJ1Zz0zREZhbHNlCisKICMgLS0gTG9nZ2luZyBh
bmQgRGVidWdnaW5nCj0yMAogIyBWZXJib3NpdHkgb2YgY29uc29sZSBsb2cgbWVzc2FnZXMuICBB
Y2NlcHRhYmxlIHZhbHVlcyBjYW4gYmUgZm91bmQgaGVyZToKQEAgLTU0OSw2ICs1ODAsMTIgQEAK
ICMgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBUcnVlLgogI3NlcnZlX3hzc192
dWxuZXJhYmxlX21pbWV0eXBlcyA9M0QgRmFsc2UKPTIwCisjIFNldCB0aGUgZm9sbG93aW5nIHRv
IFRydWUgdG8gdXNlIGlweXRob24gbmJjb252ZXJ0IHRvIGJ1aWxkIEhUTUwgZnJvbSBJUD0KeXRo
b24KKyMgbm90ZWJvb2tzIGluIEdhbGF4eSBoaXN0b3JpZXMuIFRoaXMgcHJvY2VzcyBtYXkgYWxs
b3cgdXNlcnMgdG8gZXhlY3V0ZSBhPQpyYml0cmFyeQorIyBjb2RlIG9yIHNlcnZlIGFyYml0cmFy
eSBIVE1MLiBJZiBlbmFibGVkIGlweXRob24gbXVzdCBiZSBhdmFpbGFibGUgYW5kIG89Cm4gR2Fs
YXh5J3MKKyMgUEFUSCwgdG8gZG8gdGhpcyBydW4gYHBpcCBpbnN0YWxsIGppbmphMiBweWdtZW50
cyBpcHl0aG9uYCBpbiBHYWxheHkncyB2PQppcnR1YWxlbnYuCisjdHJ1c3RfaXB5dGhvbl9ub3Rl
Ym9va19jb252ZXJzaW9uID0zRCBGYWxzZQorCiAjIERlYnVnIGVuYWJsZXMgYWNjZXNzIHRvIHZh
cmlvdXMgY29uZmlnIG9wdGlvbnMgdXNlZnVsIGZvciBkZXZlbG9wbWVudCBhbmQKICMgZGVidWdn
aW5nOiB1c2VfbGludCwgdXNlX3Byb2ZpbGUsIHVzZV9wcmludGRlYnVnIGFuZCB1c2VfaW50ZXJh
Y3RpdmUuICBJdAogIyBhbHNvIGNhdXNlcyB0aGUgZmlsZXMgdXNlZCBieSBQQlMvU0dFIChzdWJt
aXNzaW9uIHNjcmlwdCwgb3V0cHV0LCBhbmQgZXI9CnJvcikKCmRpZmYgLXIgMzVjMTM5MmIwNDlj
YmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0K
NjJkNjQxNTJjYzVhZDJiMDQgY29uZmlnL2pvYl9jb25mLnhtbC5zYW1wbGVfYWR2YW5jZWQKLS0t
IGEvY29uZmlnL2pvYl9jb25mLnhtbC5zYW1wbGVfYWR2YW5jZWQKKysrIGIvY29uZmlnL2pvYl9j
b25mLnhtbC5zYW1wbGVfYWR2YW5jZWQKQEAgLTUwLDcgKzUwLDkgQEAKICAgICAgICAgICA8IS0t
IEFNUVAgVVJMIHRvIGNvbm5lY3QgdG8uIC0tPjxwYXJhbSBpZD0zRCJhbXFwX3VybCI+YW1xcDov
L2d1PQplc3Q6Z3Vlc3RAbG9jYWxob3N0OjU2NzIvLzwvcGFyYW0+PCEtLSBVUkwgcmVtb3RlIFB1
bHNhciBhcHBzIHNob3VsZCB0cmFuc2Y9CmVyIGZpbGVzIHRvIHRoaXMgR2FsYXh5Ci0gICAgICAg
ICAgICAgICBpbnN0YW5jZSB0by9mcm9tLiAtLT4KKyAgICAgICAgICAgICAgIGluc3RhbmNlIHRv
L2Zyb20uIFRoaXMgY2FuIGJlIHVuc3BlY2lmaWVkL2VtcHR5IGlmCisgICAgICAgICAgICAgICBn
YWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJsIGlzIHNldCBpbiBnYWxheHkuaW5pLgorICAgICAgICAg
IC0tPjxwYXJhbSBpZD0zRCJnYWxheHlfdXJsIj5odHRwOi8vbG9jYWxob3N0OjgwODA8L3BhcmFt
PjwhLS0gUHU9CmxzYXIgam9iIG1hbmFnZXIgdG8gY29tbXVuaWNhdGUgd2l0aCAoc2VlIFB1bHNh
cgogICAgICAgICAgICAgICAgZG9jcyBmb3IgaW5mb3JtYXRpb24gb24gam9iIG1hbmFnZXJzKS4g
LS0+CgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIg
NzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGNvbmZpZy9wbHVnaW5z
L2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9jb21tb24vdGVtcGxhdGVzLz0KaWUubWFrbwotLS0g
L2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9j
b21tb24vdGVtcGxhdGVzL2llLm1ha28KQEAgLTAsMCArMSwzMSBAQAorPCVkZWYgbmFtZT0zRCJk
ZWZhdWx0X2phdmFzY3JpcHRfdmFyaWFibGVzKCkiPgorLy8gR2xvYmFscworCisvLyBGb2xsb3dp
bmcgdGhyZWUgYXJlIGZvciBvbGRlci1zdHlsZSBJRSBwcm94aWVzLCBuZXdlciBkeW5hbWljIEdh
bGF4eSBwcj0Kb3h5CisvLyBkb2VzIG5vdCB1c2UgdGhlc2UuCitpZV9wYXNzd29yZF9hdXRoID0z
RCAkeyBpZV9yZXF1ZXN0LmphdmFzY3JpcHRfYm9vbGVhbihpZV9yZXF1ZXN0LmF0dHIuUEFTUz0K
V09SRF9BVVRIKSB9OworaWVfYXBhY2hlX3VybHMgPTNEICR7IGllX3JlcXVlc3QuamF2YXNjcmlw
dF9ib29sZWFuKGllX3JlcXVlc3QuYXR0ci5BUEFDSEU9Cl9VUkxTKSB9OworaWVfcGFzc3dvcmQg
PTNEICckeyBpZV9yZXF1ZXN0LmF0dHIubm90ZWJvb2tfcHcgfSc7CisKKwordmFyIGdhbGF4eV9y
b290ID0zRCAnJHsgaWVfcmVxdWVzdC5hdHRyLnJvb3QgfSc7Cit2YXIgYXBwX3Jvb3QgPTNEICck
eyBpZV9yZXF1ZXN0LmF0dHIuYXBwX3Jvb3QgfSc7Cis8LyVkZWY+CisKKworPCVkZWYgbmFtZT0z
RCJsb2FkX2RlZmF1bHRfanMoKSI+Ciske2guY3NzKCAnYmFzZScgKSB9Ciske2guanMoICdsaWJz
L2pxdWVyeS9qcXVlcnknLAorICAgICAgICAnbGlicy90b2FzdHInLAorICAgICAgICAnbGlicy9y
ZXF1aXJlJyl9Cis8LyVkZWY+CisKKzwlZGVmIG5hbWU9M0QicGx1Z2luX3JlcXVpcmVfY29uZmln
KCkiPgorcmVxdWlyZS5jb25maWcoeworICAgIGJhc2VVcmw6IGFwcF9yb290LAorICAgIHBhdGhz
OiB7CisgICAgICAgICJwbHVnaW4iIDogYXBwX3Jvb3QgKyAianMvIiwKKyAgICAgICAgImludGVy
YWN0aXZlX2Vudmlyb25tZW50cyI6ICIke2gudXJsX2ZvcignL3N0YXRpYy9zY3JpcHRzL2dhbGF4
eS5pPQpudGVyYWN0aXZlX2Vudmlyb25tZW50cycpfSIsCisgICAgfSwKK30pOworPC8lZGVmPgoK
ZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdm
ZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBjb25maWcvcGx1Z2lucy9pbnRl
cmFjdGl2ZV9lbnZpcm9ubWVudHMvaW50ZXJhY3RpdmVfZW52aXI9Cm9ubWVudHMuZHRkCi0tLSAv
ZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lu
dGVyYWN0aXZlX2Vudmlyb25tZW50cy5kdGQKQEAgLTAsMCArMSwxIEBACisuLi92aXN1YWxpemF0
aW9ucy92aXN1YWxpemF0aW9uLmR0ZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCmRpZmYg
LXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZh
OTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3Rp
dmVfZW52aXJvbm1lbnRzL2lweXRob24vY29uZmlnL2lwPQp5dGhvbi5pbmkuc2FtcGxlCi0tLSAv
ZGV2L251bGwKKysrIGIvY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lw
eXRob24vY29uZmlnL2lweXRob24uaW5pLnNhPQptcGxlCkBAIC0wLDAgKzEsMTYgQEAKK1ttYWlu
XQorCisjIEZvbGxvd2luZyBvcHRpb25zIGFyZSBpZ25vcmVkIGlmIHVzaW5nIHRoZSBHYWxheHkg
ZHluYW1pYyBwcm94eSBidXQKKyMgYXJlIHVzZWZ1bCBpZiBtYXBwaW5nIGEgcmFuZ2Ugb2YgcG9y
dHMgZm9yIGVudmlyb25tZW50IGNvbnN1bXB0aW9uLgorI2FwYWNoZV91cmxzID0zRCBGYWxzZQor
I3Bhc3N3b3JkX2F1dGggPTNEIEZhbHNlCisjc3NsID0zRCBGYWxzZQorCitbZG9ja2VyXQorY29t
bWFuZCA9M0QgZG9ja2VyCitpbWFnZSA9M0QgYmdydWVuaW5nL2RvY2tlci1pcHl0aG9uLW5vdGVi
b29rCisKKyMgVVJMIHRvIGFjY2VzcyB0aGUgR2FsYXh5IEFQSSB3aXRoIGZyb20gdGhlIHNwYXdu
IERvY2tlciBjb250YWludGVyLCBpZiBlPQptcHR5CisjIHRoaXMgZmFsbHMgYmFjayB0byBnYWxh
eHkuaW5pJ3MgZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybCBhbmQgZmluYWxseSB0bz0KIHRoZQor
IyBEb2NrZXIgaG9zdCBvZiB0aGUgc3Bhd25lZCBjb250YWluZXIgaWYgdGhhdCBpcyBhbHNvIG5v
dCBzZXQuCisjZ2FsYXh5X3VybCA9M0Q9MjAKCmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJl
MWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJj
YzVhZDJiMDQgY29uZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24v
Y29uZmlnL2lwPQp5dGhvbi54bWwKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWcvcGx1Z2lucy9p
bnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi9jb25maWcvaXB5dGhvbi54bWwKQEAgLTAs
MCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0zRCIxLjAiIGVuY29kaW5nPTNEIlVURi04Ij8+Cis8
IURPQ1RZUEUgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgU1lTVEVNICIuLi8uLi9pbnRlcmFjdGl2
ZV9lbnZpcm9ubWVudHMuZD0KdGQiPgorPGludGVyYWN0aXZlX2Vudmlyb25tZW50IG5hbWU9M0Qi
SVB5dGhvbiI+CisgICAgPGRhdGFfc291cmNlcz4KKyAgICAgICAgPGRhdGFfc291cmNlPgorICAg
ICAgICAgICAgPG1vZGVsX2NsYXNzPkhpc3RvcnlEYXRhc2V0QXNzb2NpYXRpb248L21vZGVsX2Ns
YXNzPgorICAgICAgICAgICAgPHRlc3QgdHlwZT0zRCJpc2luc3RhbmNlIiB0ZXN0X2F0dHI9M0Qi
ZGF0YXR5cGUiIHJlc3VsdF90eXBlPQo9M0QiZGF0YXR5cGUiPnRhYnVsYXIuVGFidWxhcjwvdGVz
dD4KKyAgICAgICAgICAgIDx0ZXN0IHR5cGU9M0QiaXNpbnN0YW5jZSIgdGVzdF9hdHRyPTNEImRh
dGF0eXBlIiByZXN1bHRfdHlwZT0KPTNEImRhdGF0eXBlIj5kYXRhLlRleHQ8L3Rlc3Q+CisgICAg
ICAgICAgICA8dG9fcGFyYW0gcGFyYW1fYXR0cj0zRCJpZCI+ZGF0YXNldF9pZDwvdG9fcGFyYW0+
CisgICAgICAgIDwvZGF0YV9zb3VyY2U+CisgICAgPC9kYXRhX3NvdXJjZXM+CisgICAgPHBhcmFt
cz4KKyAgICAgICAgPHBhcmFtIHR5cGU9M0QiZGF0YXNldCIgdmFyX25hbWVfaW5fdGVtcGxhdGU9
M0QiaGRhIiByZXF1aXJlZD0zRCJ0PQpydWUiPmRhdGFzZXRfaWQ8L3BhcmFtPgorICAgIDwvcGFy
YW1zPgorICAgIDx0ZW1wbGF0ZT5pcHl0aG9uLm1ha288L3RlbXBsYXRlPgorPC9pbnRlcmFjdGl2
ZV9lbnZpcm9ubWVudD4KCmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1Zjgz
MTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgY29u
ZmlnL3BsdWdpbnMvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzL2lweXRob24vc3RhdGljL2pzPQov
aXB5dGhvbi5qcwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5zL2ludGVyYWN0aXZl
X2Vudmlyb25tZW50cy9pcHl0aG9uL3N0YXRpYy9qcy9pcHl0aG9uLmpzCkBAIC0wLDAgKzEsODUg
QEAKK2Z1bmN0aW9uIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFzc3dvcmQpeworICAgIHRvYXN0ci5p
bmZvKAorICAgICAgICAiQXV0b21hdGljIGF1dGhvcml6YXRpb24gZmFpbGVkLiBZb3UgY2FuIG1h
bnVhbGx5IGxvZ2luIHdpdGg6PGJyPiI9CiArIHBhc3N3b3JkICsgIjxicj48YSBocmVmPTNEJ2h0
dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vdz0KaWtpL0F1dG9tYXRp
Yy1BdXRob3JpemF0aW9uLUZhaWxlZCcgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSBkZXRhaWxzIC4u
LjwvYT4iLAorICAgICAgICAiUGxlYXNlIGxvZ2luIG1hbnVhbGx5IiwKKyAgICAgICAgeydjbG9z
ZUJ1dHRvbic6IHRydWUsICd0aW1lT3V0JzogMTAwMDAwLCAndGFwVG9EaXNtaXNzJzogZmFsc2V9
CisgICAgKTsKK30KKworZnVuY3Rpb24gbWVzc2FnZV9mYWlsZWRfY29ubmVjdGlvbigpeworICAg
IHRvYXN0ci5lcnJvcigKKyAgICAgICAgIkNvdWxkIG5vdCBjb25uZWN0IHRvIElQeXRob24gTm90
ZWJvb2suIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pPQpzdHJhdG9yLiA8YSBocmVmPTNEJ2h0
dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRob24vd2lraS9Db3VsZC09Cm5v
dC1jb25uZWN0LXRvLUlQeXRob24tTm90ZWJvb2snIHRhcmdldD0zRCdfYmxhbmsnPk1vcmUgZGV0
YWlscyAuLi48L2E+IiwKKyAgICAiU2VjdXJpdHkgd2FybmluZyIsCisgICAgICAgIHsnY2xvc2VC
dXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtaXNzJzogdHJ1ZX0KKyAg
ICApOworfQorCitmdW5jdGlvbiBtZXNzYWdlX25vX2F1dGgoKXsKKyAgICAvLyBObyBsb25nZXIg
YSBzZWN1cml0eSBpc3N1ZSwgcHJveHkgdmFsaWRhdGVzIEdhbGF4eSBzZXNzaW9uIHRva2VuLgor
ICAgIC8qCisgICAgdG9hc3RyLndhcm5pbmcoCisgICAgICAgICJJUHl0aG9uIE5vdGVib29rIHdh
cyBsdW5jaGVkIHdpdGhvdXQgYXV0aGVudGljYXRpb24uIFRoaXMgaXMgYSBzZT0KY3VyaXR5IGlz
c3VlLiA8YSBocmVmPTNEJ2h0dHBzOi8vZ2l0aHViLmNvbS9iZ3J1ZW5pbmcvZ2FsYXh5LWlweXRo
b24vd2lraS9JPQpQeXRob24tTm90ZWJvb2std2FzLWx1bmNoZWQtd2l0aG91dC1hdXRoZW50aWNh
dGlvbicgdGFyZ2V0PTNEJ19ibGFuayc+TW9yZSA9CmRldGFpbHMgLi4uPC9hPiIsCisgICAgICAg
ICJTZWN1cml0eSB3YXJuaW5nIiwKKyAgICAgICAgeydjbG9zZUJ1dHRvbic6IHRydWUsICd0aW1l
T3V0JzogMjAwMDAsICd0YXBUb0Rpc21pc3MnOiBmYWxzZX0KKyAgICApOworICAgICovCit9CisK
KworLyoqCisgKiBMb2FkIGFuIGludGVyYWN0aXZlIGVudmlyb25tZW50IChJRSkgZnJvbSBhIHJl
bW90ZSBVUkwKKyAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzd29yZDogcGFzc3dvcmQgdXNlZCB0byBh
dXRoZW50aWNhdGUgdG8gdGhlIHJlbW90ZSByPQplc291cmNlCisgKiBAcGFyYW0ge1N0cmluZ30g
bm90ZWJvb2tfbG9naW5fdXJsOiBVUkwgdGhhdCBzaG91bGQgYmUgUE9TVGVkIHRvIGZvciBsbz0K
Z2luCisgKiBAcGFyYW0ge1N0cmluZ30gbm90ZWJvb2tfYWNjZXNzX3VybDogdGhlIFVSTCBlbWJl
ZGVkIGluIHRoZSBwYWdlIGFuZCBsbz0KYWRlZAorICoKKyAqLworZnVuY3Rpb24gbG9hZF9ub3Rl
Ym9vayhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsKXsK
KyAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBUZXN0IG5v
dGVib29rX2xvZ2luX3VybCBmb3IgYWNjZXNzaWJpbGl0eSwgZXhlY3V0aW5nIHRoZSBsb2dpbis9
CmxvYWQgZnVuY3Rpb24gd2hlbmV2ZXIKKyAgICAgICAgLy8gd2UndmUgc3VjY2Vzc2Z1bGx5IGNv
bm5lY3RlZCB0byB0aGUgSUUuCisgICAgICAgIHRlc3RfaWVfYXZhaWxhYmlsaXR5KG5vdGVib29r
X2xvZ2luX3VybCwgZnVuY3Rpb24oKXsKKyAgICAgICAgICAgIF9oYW5kbGVfbm90ZWJvb2tfbG9h
ZGluZyhwYXNzd29yZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9vPQprX2FjY2Vzc191cmwp
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisgKiBNdXN0IGJlIGltcGxlbWVudGVk
IGJ5IElFcworICovCitmdW5jdGlvbiBfaGFuZGxlX25vdGVib29rX2xvYWRpbmcocGFzc3dvcmQs
IG5vdGVib29rX2xvZ2luX3VybCwgbm90ZWJvb2tfYT0KY2Nlc3NfdXJsKXsKKyAgICBpZiAoIGll
X3Bhc3N3b3JkX2F1dGggKSB7CisgICAgICAgIC8vIE1ha2UgYW4gQUpBWCBQT1NUCisgICAgICAg
ICQuYWpheCh7CisgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCisgICAgICAgICAgICAvLyB0byB0
aGUgTG9naW4gVVJMCisgICAgICAgICAgICB1cmw6IG5vdGVib29rX2xvZ2luX3VybCwKKyAgICAg
ICAgICAgIC8vIFdpdGggb3VyIHBhc3N3b3JkCisgICAgICAgICAgICBkYXRhOiB7CisgICAgICAg
ICAgICAgICAgJ3Bhc3N3b3JkJzogcGFzc3dvcmQKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB4aHJGaWVsZHM6IHsKKyAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWUKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBJZiB0aGF0IGlzIHN1Y2Nlc3NmdWwsIGxvYWQg
dGhlIG5vdGVib29rCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpeworICAgICAgICAg
ICAgICAgIGFwcGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oanF4aHIsIHN0YXR1cywgZXJyb3Ipewor
ICAgICAgICAgICAgICAgIGlmKGllX3Bhc3N3b3JkX2F1dGggJiYgIWllX2FwYWNoZV91cmxzKXsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRmFpbHVyZSBoYXBwZW5zIGR1ZSB0byBDT1JTCisgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2VfZmFpbGVkX2F1dGgocGFzc3dvcmQpOworICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgICAg
ICAgICAgICAgfWVsc2V7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfZmFpbGVkX2Nvbm5l
Y3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2Ugd2FudCB0byB0cnkgYW5kIGxv
YWQgdGhlIG5vdGVib29rIGFueXdheT8gSnVzPQp0IGluIGNhc2U/CisgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZF9ub3RlYm9vayhub3RlYm9va19hY2Nlc3NfdXJsKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAg
ICAgLy8gTm90IHVzaW5nIHBhc3N3b3JkIGF1dGgsIGp1c3QgZW1iZWQgaXQgdG8gYXZvaWQgY29u
dGVudC1vcmlnaW4gPQppc3N1ZXMuCisgICAgICAgIG1lc3NhZ2Vfbm9fYXV0aCgpOworICAgICAg
ICBhcHBlbmRfbm90ZWJvb2sobm90ZWJvb2tfYWNjZXNzX3VybCk7CisgICAgfQorfQoKZGlmZiAt
ciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5
NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2
ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi90ZW1wbGF0ZXM9Ci9pcHl0aG9uLm1ha28KLS0tIC9kZXYv
bnVsbAorKysgYi9jb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhv
bi90ZW1wbGF0ZXMvaXB5dGhvbi5tYWtvCkBAIC0wLDAgKzEsNjEgQEAKKyA8JW5hbWVzcGFjZSBu
YW1lPTNEImllIiBmaWxlPTNEImllLm1ha28iIC8+CisKKzwlCitpbXBvcnQgb3MKK2ltcG9ydCBz
aHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHN1YnByb2Nlc3MKKworIyBTZXRzIElEIGFu
ZCBzZXRzIHVwIGEgbG90IG9mIG90aGVyIHZhcmlhYmxlcworaWVfcmVxdWVzdC5sb2FkX2RlcGxv
eV9jb25maWcoKQoraWVfcmVxdWVzdC5hdHRyLmRvY2tlcl9wb3J0ID0zRCA2Nzg5CisjIENyZWF0
ZSB0ZW1wZGlyIGluIGdhbGF4eQordGVtcF9kaXIgPTNEIG9zLnBhdGguYWJzcGF0aCggdGVtcGZp
bGUubWtkdGVtcCgpICkKKyMgV3JpdGUgb3V0IGNvbmYgZmlsZS4uLm5lZWRzIHdvcmsKK2llX3Jl
cXVlc3Qud3JpdGVfY29uZl9maWxlKHRlbXBfZGlyKQorCisjIyBJUHl0aG9uIFNwZWNpZmljCisj
IFByZXBhcmUgYW4gZW1wdHkgbm90ZWJvb2sKK25vdGVib29rX2lkID0zRCBpZV9yZXF1ZXN0Lmdl
bmVyYXRlX2hleCg2NCkKK3dpdGggb3Blbiggb3MucGF0aC5qb2luKCBpZV9yZXF1ZXN0LmF0dHIu
b3VyX3RlbXBsYXRlX2RpciwgJ25vdGVib29rLmlweW5iPQonICksICdyJykgYXMgbmJfaGFuZGxl
OgorICAgIGVtcHR5X25iID0zRCBuYl9oYW5kbGUucmVhZCgpCitlbXB0eV9uYiA9M0QgZW1wdHlf
bmIgJSBub3RlYm9va19pZAorIyBDb3B5IG92ZXIgZGVmYXVsdCBub3RlYm9vaywgdW5sZXNzIHRo
ZSBkYXRhc2V0IHRoaXMgdml6IGlzIHJ1bm5pbmcgb24gaXM9CiBhIG5vdGVib29rCitlbXB0eV9u
Yl9wYXRoID0zRCBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICdpcHl0aG9uX2dhbGF4eV9ub3RlYm9v
ay5pcHluYicpCitpZiBoZGEuZGF0YXR5cGUuX19jbGFzc19fLl9fbmFtZV9fICE9M0QgIklweW5i
IjoKKyAgICB3aXRoIG9wZW4oIGVtcHR5X25iX3BhdGgsICd3KycgKSBhcyBoYW5kbGU6CisgICAg
ICAgIGhhbmRsZS53cml0ZSggZW1wdHlfbmIgKQorZWxzZToKKyAgICBzaHV0aWwuY29weSggaGRh
LmZpbGVfbmFtZSwgZW1wdHlfbmJfcGF0aCApCisKKworIyMgR2VuZXJhbCBJRSBzcGVjaWZpYwor
IyBBY2Nlc3MgVVJMcyBmb3IgdGhlIG5vdGVib29rIGZyb20gd2l0aGluIGdhbGF4eS4KK25vdGVi
b29rX2FjY2Vzc191cmwgPTNEIGllX3JlcXVlc3QudXJsX3RlbXBsYXRlKCcke1BST1hZX1VSTH0v
aXB5dGhvbi8ke1BPPQpSVH0vbm90ZWJvb2tzL2lweXRob25fZ2FsYXh5X25vdGVib29rLmlweW5i
JykKK25vdGVib29rX2xvZ2luX3VybCA9M0QgaWVfcmVxdWVzdC51cmxfdGVtcGxhdGUoJyR7UFJP
WFlfVVJMfS9pcHl0aG9uLyR7UE9SPQpUfS9sb2dpbj9uZXh0PTNEJTJGaXB5dGhvbiUyRiR7UE9S
VH0lMkZ0cmVlJykKKworZG9ja2VyX2NtZCA9M0QgaWVfcmVxdWVzdC5kb2NrZXJfY21kKHRlbXBf
ZGlyKQorc3VicHJvY2Vzcy5jYWxsKGRvY2tlcl9jbWQsIHNoZWxsPTNEVHJ1ZSkKKyU+Cis8aHRt
bD4KKzxoZWFkPgorJHsgaWUubG9hZF9kZWZhdWx0X2pzKCkgfQorPC9oZWFkPgorPGJvZHk+CisK
KzxzY3JpcHQgdHlwZT0zRCJ0ZXh0L2phdmFzY3JpcHQiPgorJHsgaWUuZGVmYXVsdF9qYXZhc2Ny
aXB0X3ZhcmlhYmxlcygpIH0KK3ZhciBub3RlYm9va19sb2dpbl91cmwgPTNEICckeyBub3RlYm9v
a19sb2dpbl91cmwgfSc7Cit2YXIgbm90ZWJvb2tfYWNjZXNzX3VybCA9M0QgJyR7IG5vdGVib29r
X2FjY2Vzc191cmwgfSc7CiskeyBpZS5wbHVnaW5fcmVxdWlyZV9jb25maWcoKSB9CisKKy8vIExv
YWQgbm90ZWJvb2sKKworcmVxdWlyZWpzKFsnaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzJywgJ3Bs
dWdpbi9pcHl0aG9uJ10sIGZ1bmN0aW9uKCl7CisgICAgbG9hZF9ub3RlYm9vayhpZV9wYXNzd29y
ZCwgbm90ZWJvb2tfbG9naW5fdXJsLCBub3RlYm9va19hY2Nlc3NfdXJsKTsKK30pOworPC9zY3Jp
cHQ+Cis8ZGl2IGlkPTNEIm1haW4iIHdpZHRoPTNEIjEwMCUiIGhlaWdodD0zRCIxMDAlIj4KKzwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNm
MmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFk
MmIwNCBjb25maWcvcGx1Z2lucy9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMvaXB5dGhvbi90ZW1w
bGF0ZXM9Ci9ub3RlYm9vay5pcHluYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy9wbHVnaW5z
L2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9pcHl0aG9uL3RlbXBsYXRlcy9ub3RlYm9vay5pcD0K
eW5iCkBAIC0wLDAgKzEsNDMgQEAKK3sKKyAibWV0YWRhdGEiOiB7CisgICJuYW1lIjogIiIsCisg
ICJzaWduYXR1cmUiOiAic2hhMjU2OiVzIgorIH0sCisgIm5iZm9ybWF0IjogMywKKyAibmJmb3Jt
YXRfbWlub3IiOiAwLAorICJ3b3Jrc2hlZXRzIjogWworICB7CisgICAiY2VsbHMiOiBbCisgICAg
eworICAgICAiY2VsbF90eXBlIjogImhlYWRpbmciLAorICAgICAibGV2ZWwiOiAxLAorICAgICAi
bWV0YWRhdGEiOiB7fSwKKyAgICAgInNvdXJjZSI6IFsKKyAgICAgICJXZWxjb21lIHRvIHRoZSBp
bnRlcmFjdGl2ZSBHYWxheHkgSVB5dGhvbiBOb3RlYm9vay4iCisgICAgIF0KKyAgICB9LAorICAg
IHsKKyAgICAgImNlbGxfdHlwZSI6ICJtYXJrZG93biIsCisgICAgICJtZXRhZGF0YSI6IHt9LAor
ICAgICAic291cmNlIjogWworICAgICAgIllvdSBjYW4gYWNjZXNzIHlvdXIgZGF0YSB2aWEgdGhl
IGRhdGFzZXQgbnVtYmVyLiBGb3IgZXhhbXBsZSwgYGBoYW49CmRsZSA9M0QgZ2V0KDQyKWBgLiIs
CisgICAgICAiVG8gc2F2ZSBkYXRhLCB3cml0ZSB5b3VyIGRhdGEgdG8gYSBmaWxlLCBhbmQgdGhl
biBjYWxsIGBgcHV0KCdmaWxlbj0KYW1lLnR4dCcpYGAuIFRoZSBkYXRhc2V0IHdpbGwgdGhlbiBi
ZSBhdmFpbGFibGUgaW4geW91ciBnYWxheHkgaGlzdG9yeS4iLAorICAgICAgIk5vdGVib29rcyBj
YW4gYmUgc2F2ZWQgdG8gR2FsYXh5IGJ5IGNsaWNraW5nIHRoZSBsYXJnZSBncmVlbiBidXR0b249
CiBhdCB0aGUgdG9wIHJpZ2h0IG9mIHRoZSBJUHl0aG9uIGludGVyZmFjZS48YnI+IiwKKyAgICAg
ICJNb3JlIGhlbHAgYW5kIGluZm9ybWF0aW9ucyBjYW4gYmUgZm91bmQgb24gdGhlIHByb2plY3Qg
W3dlYnNpdGVdKGh0PQp0cHM6Ly9naXRodWIuY29tL2JncnVlbmluZy9nYWxheHktaXB5dGhvbiku
IgorICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICJjZWxsX3R5cGUiOiAiY29kZSIsCisgICAg
ICJjb2xsYXBzZWQiOiBmYWxzZSwKKyAgICAgImlucHV0IjogWworICAgICBdLAorICAgICAibGFu
Z3VhZ2UiOiAicHl0aG9uIiwKKyAgICAgIm1ldGFkYXRhIjoge30sCisgICAgICJvdXRwdXRzIjog
W10sCisgICAgICJwcm9tcHRfbnVtYmVyIjogMQorICAgIH0KKyAgIF0sCisgICAibWV0YWRhdGEi
OiB7fQorICB9CisgXQorfQoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVm
ODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBj
b25maWcvcGx1Z2lucy92aXN1YWxpemF0aW9ucy9hZGRpdGlvbmFsX3RlbXBsYXRlX3BhdGhzLng9
Cm1sCi0tLSBhL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2FkZGl0aW9uYWxfdGVtcGxh
dGVfcGF0aHMueG1sCisrKyBiL2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL2FkZGl0aW9u
YWxfdGVtcGxhdGVfcGF0aHMueG1sCkBAIC0yLDQgKzIsNSBAQAogPCEtLSB0aGVzZSByZWxhdGl2
ZSBwYXRocyBjYW4gY29udGFpbiBjb21tb24gdGVtcGxhdGVzIGltcG9ydGFibGUgYnkgYWxsIHY9
CmlzdWFsaXphdGlvbiBwbHVnaW5zIC0tPjxwYXRocz48cGF0aD5jb21tb24vdGVtcGxhdGVzPC9w
YXRoPgorICAgIDxwYXRoPi4uL2ludGVyYWN0aXZlX2Vudmlyb25tZW50cy9jb21tb24vdGVtcGxh
dGVzPC9wYXRoPjwvcGF0aHM+CgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1
NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0
IGNvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL3Zpc3VhbGl6YXRpb24uZHRkCi0tLSBhL2Nv
bmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL3Zpc3VhbGl6YXRpb24uZHRkCisrKyBiL2NvbmZp
Zy9wbHVnaW5zL3Zpc3VhbGl6YXRpb25zL3Zpc3VhbGl6YXRpb24uZHRkCkBAIC0xLDUgKzEsNiBA
QAogPCEtLSBlYWNoIHZpc3VhbGl6YXRpb24gbXVzdCBoYXZlIGEgdGVtcGxhdGUgKGFsbCBvdGhl
ciBlbGVtZW50cyBhcmUgb3B0aW89Cm5hbCkgLS0+PCFFTEVNRU5UIHZpc3VhbGl6YXRpb24gKGRl
c2NyaXB0aW9uKixkYXRhX3NvdXJjZXMqLHBhcmFtcyosdGVtcGxhdD0KZV9yb290Kix0ZW1wbGF0
ZSxyZW5kZXJfdGFyZ2V0Kik+Cis8IUVMRU1FTlQgaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQgKGRl
c2NyaXB0aW9uKixkYXRhX3NvdXJjZXMqLHBhcmFtcyosdGVtcD0KbGF0ZV9yb290Kix0ZW1wbGF0
ZSxyZW5kZXJfdGFyZ2V0Kik+PCEtLSB2aXN1YWxpemF0aW9uCiAgICAgICAgIG5hbWU6IHRoZSB0
aXRsZS9kaXNwbGF5IG5hbWUgb2YgdGhlIHZpc3VhbGl6YXRpb24gKGUuZy4gJ1RyYWNrc3Rlcj0K
JywgJ0Zhc3RxIFN0YXRzJywgZXRjLikgUkVRVUlSRUQKICAgICAgICAgZGlzYWJsZWQ6IGlmIGlu
Y2x1ZGVkICh2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIpLCB0aGlzIGF0dHJpYnV0ZSB3aWxsPQogcHJl
dmVudCB0aGUgdmlzdWFsaXphdGlvbiBiZWluZyBsb2FkZWQKCmRpZmYgLXIgMzVjMTM5MmIwNDlj
YmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0K
NjJkNjQxNTJjYzVhZDJiMDQgbGliL2dhbGF4eS9hcHAucHkKLS0tIGEvbGliL2dhbGF4eS9hcHAu
cHkKKysrIGIvbGliL2dhbGF4eS9hcHAucHkKQEAgLTE3LDYgKzE3LDcgQEAKIGZyb20gZ2FsYXh5
LnRvb2xzLmRhdGFfbWFuYWdlci5tYW5hZ2VyIGltcG9ydCBEYXRhTWFuYWdlcnMKIGZyb20gZ2Fs
YXh5LmpvYnMgaW1wb3J0IG1ldHJpY3MgYXMgam9iX21ldHJpY3MKIGZyb20gZ2FsYXh5LndlYi5i
YXNlIGltcG9ydCBwbHVnaW5mcmFtZXdvcmsKK2Zyb20gZ2FsYXh5LndlYi5wcm94eSBpbXBvcnQg
UHJveHlNYW5hZ2VyCiBmcm9tIGdhbGF4eS5xdWV1ZV93b3JrZXIgaW1wb3J0IEdhbGF4eVF1ZXVl
V29ya2VyCiBmcm9tIHRvb2xfc2hlZC5nYWxheHlfaW5zdGFsbCBpbXBvcnQgdXBkYXRlX3JlcG9z
aXRvcnlfbWFuYWdlcgo9MjAKQEAgLTEzOCw2ICsxMzksNyBAQAogICAgICAgICAjIEZJWE1FOiBU
aGVzZSBhcmUgZXhwb3NlZCBkaXJlY3RseSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAg
ICAgICBzZWxmLmpvYl9xdWV1ZSA9M0Qgc2VsZi5qb2JfbWFuYWdlci5qb2JfcXVldWUKICAgICAg
ICAgc2VsZi5qb2Jfc3RvcF9xdWV1ZSA9M0Qgc2VsZi5qb2JfbWFuYWdlci5qb2Jfc3RvcF9xdWV1
ZQorICAgICAgICBzZWxmLnByb3h5X21hbmFnZXIgPTNEIFByb3h5TWFuYWdlciggc2VsZi5jb25m
aWcgKQogICAgICAgICAjIEluaXRpYWxpemUgdGhlIGV4dGVybmFsIHNlcnZpY2UgdHlwZXMKICAg
ICAgICAgc2VsZi5leHRlcm5hbF9zZXJ2aWNlX3R5cGVzID0zRCBleHRlcm5hbF9zZXJ2aWNlX3R5
cGVzLkV4dGVybmFsU2VyPQp2aWNlVHlwZXNDb2xsZWN0aW9uKCBzZWxmLmNvbmZpZy5leHRlcm5h
bF9zZXJ2aWNlX3R5cGVfY29uZmlnX2ZpbGUsIHNlbGYuY289Cm5maWcuZXh0ZXJuYWxfc2Vydmlj
ZV90eXBlX3BhdGgsIHNlbGYgKQogICAgICAgICBzZWxmLm1vZGVsLmVuZ2luZS5kaXNwb3NlKCkK
CmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3
ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgbGliL2dhbGF4eS9jb25maWcu
cHkKLS0tIGEvbGliL2dhbGF4eS9jb25maWcucHkKKysrIGIvbGliL2dhbGF4eS9jb25maWcucHkK
QEAgLTE4LDYgKzE4LDggQEAKIGZyb20gZ2FsYXh5LnV0aWwuZGJrZXlzIGltcG9ydCBHZW5vbWVC
dWlsZHMKIGZyb20gZ2FsYXh5IGltcG9ydCBlZ2dzCj0yMAoraW1wb3J0IENvbmZpZ1BhcnNlcgor
CiBsb2cgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCBfX25hbWVfXyApCj0yMAo9MjAKQEAgLTIwOCw2
ICsyMTAsNyBAQAogICAgICAgICBzZWxmLmxvZ19ldmVudHMgPTNEIHN0cmluZ19hc19ib29sKCBr
d2FyZ3MuZ2V0KCAnbG9nX2V2ZW50cycsICdGYWw9CnNlJyApICkKICAgICAgICAgc2VsZi5zYW5p
dGl6ZV9hbGxfaHRtbCA9M0Qgc3RyaW5nX2FzX2Jvb2woIGt3YXJncy5nZXQoICdzYW5pdGl6ZV9h
PQpsbF9odG1sJywgVHJ1ZSApICkKICAgICAgICAgc2VsZi5zZXJ2ZV94c3NfdnVsbmVyYWJsZV9t
aW1ldHlwZXMgPTNEIHN0cmluZ19hc19ib29sKCBrd2FyZ3MuZ2V0PQooICdzZXJ2ZV94c3NfdnVs
bmVyYWJsZV9taW1ldHlwZXMnLCBGYWxzZSApICkKKyAgICAgICAgc2VsZi50cnVzdF9pcHl0aG9u
X25vdGVib29rX2NvbnZlcnNpb24gPTNEIHN0cmluZ19hc19ib29sKCBrd2FyZ3MuPQpnZXQoICd0
cnVzdF9pcHl0aG9uX25vdGVib29rX2NvbnZlcnNpb24nLCBGYWxzZSApICkKICAgICAgICAgc2Vs
Zi5lbmFibGVfb2xkX2Rpc3BsYXlfYXBwbGljYXRpb25zID0zRCBzdHJpbmdfYXNfYm9vbCgga3dh
cmdzLmdlPQp0KCAiZW5hYmxlX29sZF9kaXNwbGF5X2FwcGxpY2F0aW9ucyIsICJUcnVlIiApICkK
ICAgICAgICAgc2VsZi5icmFuZCA9M0Qga3dhcmdzLmdldCggJ2JyYW5kJywgTm9uZSApCiAgICAg
ICAgIHNlbGYud2VsY29tZV91cmwgPTNEIGt3YXJncy5nZXQoICd3ZWxjb21lX3VybCcsICcvc3Rh
dGljL3dlbGNvbWUuaD0KdG1sJyApCkBAIC0yOTYsNiArMjk5LDIzIEBACiAgICAgICAgIGZvciBz
ZWN0aW9uIGluIGdsb2JhbF9jb25mX3BhcnNlci5zZWN0aW9ucygpOgogICAgICAgICAgICAgaWYg
c2VjdGlvbi5zdGFydHN3aXRoKCdzZXJ2ZXI6Jyk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2
ZXJfbmFtZXMuYXBwZW5kKHNlY3Rpb24ucmVwbGFjZSgnc2VydmVyOicsICcnLCAxKSkKKworICAg
ICAgICAjIERlZmF1bHQgVVJMICh3aXRoIHNjaGVtYSBodHRwL2h0dHBzKSBvZiB0aGUgR2FsYXh5
IGluc3RhbmNlIHdpdGg9CmluIHRoZQorICAgICAgICAjIGxvY2FsIG5ldHdvcmsgLSB1c2VkIHRv
IHJlbW90ZWx5IGNvbW11bmljYXRlIHdpdGggdGhlIEdhbGF4eSBBUEkuCisgICAgICAgIGdhbGF4
eV9pbmZyYXN0cnVjdHVyZV91cmwgPTNEIGt3YXJncy5nZXQoICdnYWxheHlfaW5mcmFzdHJ1Y3R1
cmVfdT0KcmwnLCBOb25lICkKKyAgICAgICAgZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybF9zZXQg
PTNEIFRydWUKKyAgICAgICAgaWYgZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybCBpcyBOb25lOgor
ICAgICAgICAgICAgIyBTdGlsbCBwcm92aWRlIGEgZGVmYXVsdCBidXQgaW5kaWNhdGUgaXQgd2Fz
IG5vdCBleHBsaWNpdGx5IHM9CmV0CisgICAgICAgICAgICAjIHNvIGRlcGVuZGVuZGluZyBvbiB0
aGUgY29udGV4dCBhIGJldHRlciBkZWZhdWx0IGNhbiBiZSB1c2VkICgKKyAgICAgICAgICAgICMg
cmVxdWVzdCB1cmwgaW4gYSB3ZWIgdGhyZWFkLCBEb2NrZXIgcGFyZW50IGluIElFIHN0dWZmLCBl
dGMuPQouLikKKyAgICAgICAgICAgIGdhbGF4eV9pbmZyYXN0cnVjdHVyZV91cmwgPTNEICJodHRw
Oi8vbG9jYWxob3N0IgorICAgICAgICAgICAgcG9ydCA9M0Qgc2VsZi5ndWVzc19nYWxheHlfcG9y
dCgpCisgICAgICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgICAgIGdhbGF4eV9pbmZyYXN0
cnVjdHVyZV91cmwgKz0zRCAiOiVzIiAlIChwb3J0KQorICAgICAgICAgICAgZ2FsYXh5X2luZnJh
c3RydWN0dXJlX3VybF9zZXQgPTNEIEZhbHNlCisgICAgICAgIHNlbGYuZ2FsYXh5X2luZnJhc3Ry
dWN0dXJlX3VybCA9M0QgZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybAorICAgICAgICBzZWxmLmdh
bGF4eV9pbmZyYXN0cnVjdHVyZV91cmxfc2V0ID0zRCBnYWxheHlfaW5mcmFzdHJ1Y3R1cmVfdXJs
X3M9CmV0CisKICAgICAgICAgIyBTdG9yZSBhZHZhbmNlZCBqb2IgbWFuYWdlbWVudCBjb25maWcK
ICAgICAgICAgc2VsZi5qb2JfbWFuYWdlciA9M0Qga3dhcmdzLmdldCgnam9iX21hbmFnZXInLCBz
ZWxmLnNlcnZlcl9uYW1lKS5zPQp0cmlwKCkKICAgICAgICAgc2VsZi5qb2JfaGFuZGxlcnMgPTNE
IFsgeC5zdHJpcCgpIGZvciB4IGluIGt3YXJncy5nZXQoJ2pvYl9oYW5kbGVyPQpzJywgc2VsZi5z
ZXJ2ZXJfbmFtZSkuc3BsaXQoJywnKSBdCkBAIC0zNTcsNiArMzc3LDE4IEBACiAgICAgICAgICMg
ZGlyZWN0b3J5IHdoZXJlIHRoZSB2aXN1YWxpemF0aW9uL3JlZ2lzdHJ5IHNlYXJjaGVzIGZvciBw
bHVnaW5zCiAgICAgICAgIHNlbGYudmlzdWFsaXphdGlvbl9wbHVnaW5zX2RpcmVjdG9yeSA9M0Qg
a3dhcmdzLmdldCgKICAgICAgICAgICAgICd2aXN1YWxpemF0aW9uX3BsdWdpbnNfZGlyZWN0b3J5
JywgJ2NvbmZpZy9wbHVnaW5zL3Zpc3VhbGl6YXRpPQpvbnMnICkKKyAgICAgICAgaWVfZGlycyA9
M0Qga3dhcmdzLmdldCggJ2ludGVyYWN0aXZlX2Vudmlyb25tZW50X3BsdWdpbnNfZGlyZWN0b3J5
PQonLCBOb25lICkKKyAgICAgICAgaWYgaWVfZGlycyBhbmQgbm90IHNlbGYudmlzdWFsaXphdGlv
bl9wbHVnaW5zX2RpcmVjdG9yeToKKyAgICAgICAgICAgIHNlbGYudmlzdWFsaXphdGlvbl9wbHVn
aW5zX2RpcmVjdG9yeSA9M0QgaWVfZGlycworICAgICAgICBlbGlmIGllX2RpcnM6CisgICAgICAg
ICAgICBzZWxmLnZpc3VhbGl6YXRpb25fcGx1Z2luc19kaXJlY3RvcnkgKz0zRCAiLCVzIiAlIGll
X2RpcnMKKworICAgICAgICBzZWxmLnByb3h5X3Nlc3Npb25fbWFwID0zRCBzZWxmLnJlc29sdmVf
cGF0aCgga3dhcmdzLmdldCggImR5bmFtaWM9Cl9wcm94eV9zZXNzaW9uX21hcCIsICJkYXRhYmFz
ZS9zZXNzaW9uX21hcC5zcWxpdGUiICkgKQorICAgICAgICBzZWxmLm1hbmFnZV9keW5hbWljX3By
b3h5ID0zRCBzdHJpbmdfYXNfYm9vbCgga3dhcmdzLmdldCggImR5bmFtaWM9Cl9wcm94eV9tYW5h
Z2UiLCAiVHJ1ZSIgKSApICAjIFNldCB0byBmYWxzZSBpZiBiZWluZyBsYXVuY2hlZCBleHRlcm5h
bGx5CisgICAgICAgIHNlbGYuZHluYW1pY19wcm94eV9kZWJ1ZyA9M0Qgc3RyaW5nX2FzX2Jvb2wo
IGt3YXJncy5nZXQoICJkeW5hbWljXz0KcHJveHlfZGVidWciLCAiRmFsc2UiICkgKQorICAgICAg
ICBzZWxmLmR5bmFtaWNfcHJveHlfYmluZF9wb3J0ID0zRCBpbnQoIGt3YXJncy5nZXQoICJkeW5h
bWljX3Byb3h5X2I9CmluZF9wb3J0IiwgIjg4MDAiICkgKQorICAgICAgICBzZWxmLmR5bmFtaWNf
cHJveHlfYmluZF9pcCA9M0Qga3dhcmdzLmdldCggImR5bmFtaWNfcHJveHlfYmluZF9pcCI9Ciwg
IjAuMC4wLjAiICkKKwogICAgICAgICAjIERlZmF1bHQgY2h1bmsgc2l6ZSBmb3IgY2h1bmthYmxl
IGRhdGF0eXBlcyAtLSA2NGsKICAgICAgICAgc2VsZi5kaXNwbGF5X2NodW5rX3NpemUgPTNEIGlu
dCgga3dhcmdzLmdldCggJ2Rpc3BsYXlfY2h1bmtfc2l6ZScsPQogNjU1MzYpICkKPTIwCkBAIC01
NDMsNiArNTc1LDE5IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gcmVzb2x2ZV9wYXRo
KCBwYXRoLCBzZWxmLnJvb3QgKQo9MjAKKyAgICBkZWYgZ3Vlc3NfZ2FsYXh5X3BvcnQoc2VsZik6
CisgICAgICAgICMgQ29kZSBkZXJpdmVkIGZyb20gSVB5dGhvbiB3b3JrIGllLm1ha28KKyAgICAg
ICAgY29uZmlnID0zRCBDb25maWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcih7J3BvcnQnOiAnODA4
MCd9KQorICAgICAgICBpZiBzZWxmLmNvbmZpZ19maWxlOgorICAgICAgICAgICAgY29uZmlnLnJl
YWQoIHNlbGYuY29uZmlnX2ZpbGUgKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBvcnQg
PTNEIGNvbmZpZy5nZXRpbnQoJ3NlcnZlcjolcycgJSBzZWxmLnNlcnZlcl9uYW1lLCAncG9ydCcp
CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgdVdTR0kgZ2FsYXh5IGluc3RhbGxhdGlv
bnMgZG9uJ3QgdXNlIHBhc3RlciBhbmQgb25seSBzcGVhayB1PQpXU0dJIG5vdCBodHRwCisgICAg
ICAgICAgICBwb3J0ID0zRCBOb25lCisgICAgICAgIHJldHVybiBwb3J0CisKPTIwCiBkZWYgZ2V0
X2RhdGFiYXNlX2VuZ2luZV9vcHRpb25zKCBrd2FyZ3MsIG1vZGVsX3ByZWZpeD0zRCcnICk6CiAg
ICAgIiIiCgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUg
LXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGxpYi9nYWxheHkv
ZGF0YXR5cGVzL3JlZ2lzdHJ5LnB5Ci0tLSBhL2xpYi9nYWxheHkvZGF0YXR5cGVzL3JlZ2lzdHJ5
LnB5CisrKyBiL2xpYi9nYWxheHkvZGF0YXR5cGVzL3JlZ2lzdHJ5LnB5CkBAIC0yMiw2ICsyMiw3
IEBACiBpbXBvcnQgYXNzZW1ibHkKIGltcG9ydCBuZ3NpbmRleAogaW1wb3J0IGdyYXBoCitpbXBv
cnQgdGV4dAogaW1wb3J0IGdhbGF4eS51dGlsCiBmcm9tIGdhbGF4eS51dGlsLm9kaWN0IGltcG9y
dCBvZGljdAogZnJvbSBkaXNwbGF5X2FwcGxpY2F0aW9ucy5hcHBsaWNhdGlvbiBpbXBvcnQgRGlz
cGxheUFwcGxpY2F0aW9uCgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4
MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGxp
Yi9nYWxheHkvZGF0YXR5cGVzL3RleHQucHkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5
L2RhdGF0eXBlcy90ZXh0LnB5CkBAIC0wLDAgKzEsMTIxIEBACisjIC0qLSBjb2Rpbmc6IHV0Zi04
IC0qLQorIiIiIENsZWFyaW5nIGhvdXNlIGZvciBnZW5lcmljIHRleHQgZGF0YXR5cGVzIHRoYXQg
YXJlIG5vdCBYTUwgb3IgdGFidWxhci4KKyIiIgorCisKK2Zyb20gZ2FsYXh5LmRhdGF0eXBlcy5k
YXRhIGltcG9ydCBUZXh0Citmcm9tIGdhbGF4eS5kYXRhdHlwZXMuZGF0YSBpbXBvcnQgZ2V0X2Zp
bGVfcGVlaworZnJvbSBnYWxheHkuZGF0YXR5cGVzLmRhdGEgaW1wb3J0IG5pY2Vfc2l6ZQorZnJv
bSBnYWxheHkgaW1wb3J0IHV0aWwKKworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworCitpbXBvcnQgbG9nZ2luZworbG9nID0zRCBsb2dn
aW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBKc29uKCBUZXh0ICk6CisgICAgZmls
ZV9leHQgPTNEICJqc29uIgorCisgICAgZGVmIHNldF9wZWVrKCBzZWxmLCBkYXRhc2V0LCBpc19t
dWx0aV9ieXRlPTNERmFsc2UgKToKKyAgICAgICAgaWYgbm90IGRhdGFzZXQuZGF0YXNldC5wdXJn
ZWQ6CisgICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEIGdldF9maWxlX3BlZWsoIGRhdGFzZXQu
ZmlsZV9uYW1lLCBpc19tdWx0aV9ieT0KdGU9M0Rpc19tdWx0aV9ieXRlICkKKyAgICAgICAgICAg
IGRhdGFzZXQuYmx1cmIgPTNEICJKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbiAoSlNPTikiCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEICdmaWxlIGRvZXMgbm90
IGV4aXN0JworICAgICAgICAgICAgZGF0YXNldC5ibHVyYiA9M0QgJ2ZpbGUgcHVyZ2VkIGZyb20g
ZGlzYycKKworICAgIGRlZiBzbmlmZiggc2VsZiwgZmlsZW5hbWUgKToKKyAgICAgICAgIiIiCisg
ICAgICAgICAgICBUcnkgdG8gbG9hZCB0aGUgc3RyaW5nIHdpdGggdGhlIGpzb24gbW9kdWxlLiBJ
ZiBzdWNjZXNzZnVsIGl0Jz0KcyBhIGpzb24gZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJl
dHVybiBzZWxmLl9sb29rc19saWtlX2pzb24oIGZpbGVuYW1lICkKKworICAgIGRlZiBfbG9va3Nf
bGlrZV9qc29uKCBzZWxmLCBmaWxlbmFtZSApOgorICAgICAgICAjIFBhdHRlcm4gdXNlZCBieSBT
ZXF1ZW5jZVNwbGl0TG9jYXRpb25zCisgICAgICAgIGlmIG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFt
ZSkgPCA1MDAwMDoKKyAgICAgICAgICAgICMgSWYgdGhlIGZpbGUgaXMgc21hbGwgZW5vdWdoIC0g
ZG9uJ3QgZ3Vlc3MganVzdCBjaGVjay4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBqc29uLmxvYWQoIG9wZW4oZmlsZW5hbWUsICJyIikgKQorICAgICAgICAgICAgICAgIHJldHVy
biBUcnVlCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1l
LCAiciIpIGFzIGZoOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAg
ICAgICAgIGxpbmUgPTNEIGZoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9
M0QgbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAg
ICAgICAgICAgICAgICAjIHNpbXBsZSB0eXBlcyBhcmUgdmFsaWQgSlNPTiBhcyB3ZWxsIC0gYnV0
IHdvdWxkID0Kc3VjaCBhIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYmUgaW50ZXJl
c3RpbmcgYXMgSlNPTiBpbiBHYWxheHk/CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bGluZS5zdGFydHN3aXRoKCJbIikgb3IgbGluZS5zdGFydHN3aXRoKCJ7IikKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgZGVmIGRpc3BsYXlfcGVlayggc2VsZiwgZGF0YXNldCApOgor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZGF0YXNldC5wZWVrCisgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgIHJldHVybiAiSlNPTiBmaWxlICglcykiICUgKCBuaWNlX3NpemUo
IGRhdGFzZXQuZ2V0X3NpemUoKSApICkKKworCitjbGFzcyBJcHluYiggSnNvbiApOgorICAgIGZp
bGVfZXh0ID0zRCAiaXB5bmIiCisKKyAgICBkZWYgc2V0X3BlZWsoIHNlbGYsIGRhdGFzZXQsIGlz
X211bHRpX2J5dGU9M0RGYWxzZSApOgorICAgICAgICBpZiBub3QgZGF0YXNldC5kYXRhc2V0LnB1
cmdlZDoKKyAgICAgICAgICAgIGRhdGFzZXQucGVlayA9M0QgZ2V0X2ZpbGVfcGVlayggZGF0YXNl
dC5maWxlX25hbWUsIGlzX211bHRpX2J5PQp0ZT0zRGlzX211bHRpX2J5dGUgKQorICAgICAgICAg
ICAgZGF0YXNldC5ibHVyYiA9M0QgIklQeXRob24gTm90ZWJvb2siCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBkYXRhc2V0LnBlZWsgPTNEICdmaWxlIGRvZXMgbm90IGV4aXN0JworICAgICAg
ICAgICAgZGF0YXNldC5ibHVyYiA9M0QgJ2ZpbGUgcHVyZ2VkIGZyb20gZGlzYycKKworICAgIGRl
ZiBzbmlmZiggc2VsZiwgZmlsZW5hbWUgKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBUcnkg
dG8gbG9hZCB0aGUgc3RyaW5nIHdpdGggdGhlIGpzb24gbW9kdWxlLiBJZiBzdWNjZXNzZnVsIGl0
Jz0KcyBhIGpzb24gZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2xvb2tzX2xp
a2VfanNvbiggZmlsZW5hbWUgKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBp
cHluYiA9M0QganNvbi5sb2FkKCBvcGVuKGZpbGVuYW1lKSApCisgICAgICAgICAgICAgICAgaWYg
aXB5bmIuZ2V0KCduYmZvcm1hdCcsIEZhbHNlKSBpcyBub3QgRmFsc2UgYW5kIGlweW5iLmdldD0K
KCdtZXRhZGF0YScsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAg
ICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRl
ZiBkaXNwbGF5X2RhdGEoc2VsZiwgdHJhbnMsIGRhdGFzZXQsIHByZXZpZXc9M0RGYWxzZSwgZmls
ZW5hbWU9M0ROb249CmUsIHRvX2V4dD0zRE5vbmUsIGNodW5rPTNETm9uZSwgKiprd2QpOgorICAg
ICAgICBjb25maWcgPTNEIHRyYW5zLmFwcC5jb25maWcKKyAgICAgICAgdHJ1c3QgPTNEIGdldGF0
dHIoIGNvbmZpZywgJ3RydXN0X2lweXRob25fbm90ZWJvb2tfY29udmVyc2lvbicsIEZhPQpsc2Ug
KQorICAgICAgICBpZiB0cnVzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9kaXNwbGF5X2Rh
dGFfdHJ1c3RlZCh0cmFucywgZGF0YXNldCwgcHJldmlldz0zRHByPQpldmlldywgZmlsZWFtZT0z
RGZpbGVuYW1lLCB0b19leHQ9M0R0b19leHQsIGNodW5rPTNEY2h1bmssICoqa3dkKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKElweW5iLCBzZWxmKS5kaXNwbGF5X2Rh
dGEoIHRyYW5zLCBkYXRhc2V0LCBwcmV2aWU9Cnc9M0RwcmV2aWV3LCBmaWxlYW1lPTNEZmlsZW5h
bWUsIHRvX2V4dD0zRHRvX2V4dCwgY2h1bms9M0RjaHVuaywgKiprd2QgKQorCisgICAgZGVmIF9k
aXNwbGF5X2RhdGFfdHJ1c3RlZChzZWxmLCB0cmFucywgZGF0YXNldCwgcHJldmlldz0zREZhbHNl
LCBmaWxlbj0KYW1lPTNETm9uZSwgdG9fZXh0PTNETm9uZSwgY2h1bms9M0ROb25lLCAqKmt3ZCk6
CisgICAgICAgIHByZXZpZXcgPTNEIHV0aWwuc3RyaW5nX2FzX2Jvb2woIHByZXZpZXcgKQorICAg
ICAgICBpZiBjaHVuazoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9jaHVuayh0cmFucywg
ZGF0YXNldCwgY2h1bmspCisgICAgICAgIGVsaWYgdG9fZXh0IG9yIG5vdCBwcmV2aWV3OgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX3NlcnZlX3Jhdyh0cmFucywgZGF0YXNldCwgdG9fZXh0KQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2ZpbGVfaGFuZGxlID0zRCB0ZW1wZmlsZS5OYW1l
ZFRlbXBvcmFyeUZpbGUoZGVsZXRlPTNERmFsc2UpCisgICAgICAgICAgICBvZmlsZW5hbWUgPTNE
IG9maWxlX2hhbmRsZS5uYW1lCisgICAgICAgICAgICBvZmlsZV9oYW5kbGUuY2xvc2UoKQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNtZCA9M0QgJ2lweXRob24gbmJjb252ZXJ0
IC0tdG8gaHRtbCAtLXRlbXBsYXRlIGJhc2ljICVzIC09Ci1vdXRwdXQgJXMnICUgKGRhdGFzZXQu
ZmlsZV9uYW1lLCBvZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgbG9nLmluZm8oIkNhbGxpbmcg
Y29tbWFuZCAlcyIgJSBjbWQpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwg
c2hlbGw9M0RUcnVlKQorICAgICAgICAgICAgICAgIG9maWxlbmFtZSA9M0QgJyVzLmh0bWwnICUg
b2ZpbGVuYW1lCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb2ZpbGVuYW1l
ID0zRCBkYXRhc2V0LmZpbGVfbmFtZQorICAgICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oICdD
b21tYW5kICIlcyIgZmFpbGVkLiBDb3VsZCBub3QgY29udmVydCB0aGU9CiBJUHl0aG9uIE5vdGVi
b29rIHRvIEhUTUwsIGRlZmF1bHRpbmcgdG8gcGxhaW4gdGV4dC4nICUgY21kICkKKyAgICAgICAg
ICAgIHJldHVybiBvcGVuKCBvZmlsZW5hbWUgKQorCisgICAgZGVmIHNldF9tZXRhKCBzZWxmLCBk
YXRhc2V0LCAqKmt3ZCApOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBudW1iZXIgb2Yg
bW9kZWxzIGluIGRhdGFzZXQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCgpkaWZmIC1yIDM1
YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRl
NmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGxpYi9nYWxheHkvam9icy9ydW5uZXJzL3B1bHNh
ci5weQotLS0gYS9saWIvZ2FsYXh5L2pvYnMvcnVubmVycy9wdWxzYXIucHkKKysrIGIvbGliL2dh
bGF4eS9qb2JzL3J1bm5lcnMvcHVsc2FyLnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgKSwKICAg
ICBnYWxheHlfdXJsPTNEZGljdCgKICAgICAgICAgbWFwPTNEc3BlY3MudG9fc3RyX29yX25vbmUs
Ci0gICAgICAgIGRlZmF1bHQ9M0RERUZBVUxUX0dBTEFYWV9VUkwsCisgICAgICAgIGRlZmF1bHQ9
M0ROb25lLAogICAgICksCiAgICAgbWFuYWdlcj0zRGRpY3QoCiAgICAgICAgIG1hcD0zRHNwZWNz
LnRvX3N0cl9vcl9ub25lLApAQCAtMTI5LDYgKzEyOSw4IEBACiAgICAgICAgIHN1cGVyKCBQdWxz
YXJKb2JSdW5uZXIsIHNlbGYgKS5fX2luaXRfXyggYXBwLCBud29ya2VycywgcnVubmVyX3Bhcj0K
YW1fc3BlY3M9M0RQVUxTQVJfUEFSQU1fU1BFQ1MsICoqa3dkcyApCiAgICAgICAgIHNlbGYuX2lu
aXRfd29ya2VyX3RocmVhZHMoKQogICAgICAgICBnYWxheHlfdXJsID0zRCBzZWxmLnJ1bm5lcl9w
YXJhbXMuZ2FsYXh5X3VybAorICAgICAgICBpZiBub3QgZ2FsYXh5X3VybDoKKyAgICAgICAgICAg
IGdhbGF4eV91cmwgPTNEIGFwcC5jb25maWcuZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybAogICAg
ICAgICBpZiBnYWxheHlfdXJsOgogICAgICAgICAgICAgZ2FsYXh5X3VybCA9M0QgZ2FsYXh5X3Vy
bC5yc3RyaXAoIi8iKQogICAgICAgICBzZWxmLmdhbGF4eV91cmwgPTNEIGdhbGF4eV91cmwKCmRp
ZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4
YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgbGliL2dhbGF4eS91dGlsL2xhenlf
cHJvY2Vzcy5weQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvdXRpbC9sYXp5X3Byb2Nl
c3MucHkKQEAgLTAsMCArMSw1NyBAQAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2lt
cG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgTGF6eVByb2Nlc3MoIG9iamVjdCApOgorICAgICIi
IiBBYnN0cmFjdGlvbiBkZXNjcmliaW5nIGEgY29tbWFuZCBsaW5lIGxhdW5jaGluZyBhIHNlcnZp
Y2UgLSBwcm9iYWI9Cmx5CisgICAgYXMgbmVlZGVkIGFzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNz
ZWQgaW4gR2FsYXh5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCBzZWxmLCBjb21tYW5k
X2FuZF9hcmdzICk6CisgICAgICAgIHNlbGYuY29tbWFuZF9hbmRfYXJncyA9M0QgY29tbWFuZF9h
bmRfYXJncworICAgICAgICBzZWxmLnRocmVhZF9sb2NrID0zRCB0aHJlYWRpbmcuTG9jaygpCisg
ICAgICAgIHNlbGYuYWxsb3dfcHJvY2Vzc19yZXF1ZXN0ID0zRCBUcnVlCisgICAgICAgIHNlbGYu
cHJvY2VzcyA9M0QgTm9uZQorCisgICAgZGVmIHN0YXJ0X3Byb2Nlc3MoIHNlbGYgKToKKyAgICAg
ICAgd2l0aCBzZWxmLnRocmVhZF9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5hbGxvd19wcm9j
ZXNzX3JlcXVlc3Q6CisgICAgICAgICAgICAgICAgc2VsZi5hbGxvd19wcm9jZXNzX3JlcXVlc3Qg
PTNEIEZhbHNlCisgICAgICAgICAgICAgICAgdCA9M0QgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9
M0RzZWxmLl9fc3RhcnQpCisgICAgICAgICAgICAgICAgdC5kYWVtb24gPTNEIFRydWUKKyAgICAg
ICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgIGRlZiBfX3N0YXJ0KHNlbGYpOgorICAgICAgICB3
aXRoIHNlbGYudGhyZWFkX2xvY2s6CisgICAgICAgICAgICBzZWxmLnByb2Nlc3MgPTNEIHN1YnBy
b2Nlc3MuUG9wZW4oIHNlbGYuY29tbWFuZF9hbmRfYXJncywgY2xvcz0KZV9mZHM9M0RUcnVlICkK
KworICAgIGRlZiBzaHV0ZG93biggc2VsZiApOgorICAgICAgICB3aXRoIHNlbGYudGhyZWFkX2xv
Y2s6CisgICAgICAgICAgICBzZWxmLmFsbG93X3Byb2Nlc3NfcmVxdWVzdCA9M0QgRmFsc2UKKyAg
ICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0
ZSgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKC4wMSkKKyAgICAgICAgICAgIGlmIHNlbGYucnVu
bmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3Mua2lsbCgpCisKKyAgICBAcHJvcGVy
dHkKKyAgICBkZWYgcnVubmluZyggc2VsZiApOgorICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNz
IGFuZCBub3Qgc2VsZi5wcm9jZXNzLnBvbGwoKQorCisKK2NsYXNzIE5vT3BMYXp5UHJvY2Vzcygg
b2JqZWN0ICk6CisgICAgIiIiIExhenlQcm9jZXNzIGFic3RyYWN0aW9uIG1lYW50IHRvIGRlc2Ny
aWJlIHBvdGVudGlhbGx5IG9wdGlvbmFsCisgICAgc2VydmljZXMsIGluIHRob3NlIGNhc2VzIHdo
ZXJlIG9uZSBpcyBub3QgY29uZmlndXJlZCBvciB2YWxpZCwgdGhpcworICAgIGNsYXNzIGNhbiBi
ZSB1c2VkIGluIHBsYWNlIG9mIExhenlQcm9jZXNzLgorICAgICIiIgorCisgICAgZGVmIHN0YXJ0
X3Byb2Nlc3MoIHNlbGYgKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgc2h1dGRvd24oIHNl
bGYgKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcnVubmluZygg
c2VsZiApOgorICAgICAgICByZXR1cm4gRmFsc2UKCmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0
NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQx
NTJjYzVhZDJiMDQgbGliL2dhbGF4eS91dGlsL3NvY2tldHMucHkKLS0tIC9kZXYvbnVsbAorKysg
Yi9saWIvZ2FsYXh5L3V0aWwvc29ja2V0cy5weQpAQCAtMCwwICsxLDQzIEBACitpbXBvcnQgc2hs
ZXgKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmFuZG9tCisKKwor
ZGVmIHVudXNlZF9wb3J0KHJhbmdlPTNETm9uZSk6CisgICAgaWYgcmFuZ2U6CisgICAgICAgIHJl
dHVybiBfX3VudXNlZF9wb3J0X29uX3JhbmdlKHJhbmdlKQorICAgIGVsc2U6CisgICAgICAgIHJl
dHVybiBfX3VudXNlZF9wb3J0X3JhbmdlbGVzcygpCisKKworZGVmIF9fdW51c2VkX3BvcnRfcmFu
Z2VsZXNzKCk6CisgICAgIyBUT0RPOiBBbGxvdyByYW5nZXMgKHRob3VnaCB0aGVuIG5lZWQgdG8g
Z3Vlc3MgYW5kIGNoZWNrKS4uLgorICAgIHMgPTNEIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lO
RVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBzLmJpbmQoKCdsb2NhbGhvc3QnLCAwKSkKKyAg
ICBhZGRyLCBwb3J0ID0zRCBzLmdldHNvY2tuYW1lKCkKKyAgICBzLmNsb3NlKCkKKyAgICByZXR1
cm4gcG9ydAorCisKK2RlZiBfX3VudXNlZF9wb3J0X29uX3JhbmdlKHJhbmdlKToKKyAgICBhc3Nl
cnQgcmFuZ2VbMF0gYW5kIHJhbmdlWzFdCisKKyAgICAjIEZpbmQgYWxsIHBvcnRzIHRoYXQgYXJl
IGFscmVhZHkgb2NjdXBpZWQKKyAgICBjbWRfbmV0c3RhdCA9M0Qgc2hsZXguc3BsaXQoIm5ldHN0
YXQgdHVsbiIpCisgICAgcDEgPTNEIHN1YnByb2Nlc3MuUG9wZW4oY21kX25ldHN0YXQsIHN0ZG91
dD0zRHN1YnByb2Nlc3MuUElQRSkKKworICAgIG9jY3VwaWVkX3BvcnRzID0zRCBzZXQoKQorICAg
IGZvciBsaW5lIGluIHAxLnN0ZG91dC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgIGlmIGxp
bmUuc3RhcnRzd2l0aCgndGNwJykgb3IgbGluZS5zdGFydHN3aXRoKCd0Y3A2Jyk6CisgICAgICAg
ICAgICBjb2wgPTNEIGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgbG9jYWxfYWRkcmVzcyA9M0Qg
Y29sWzNdCisgICAgICAgICAgICBsb2NhbF9wb3J0ID0zRCBsb2NhbF9hZGRyZXNzLnNwbGl0KCc6
JylbMV0KKyAgICAgICAgICAgIG9jY3VwaWVkX3BvcnRzLmFkZCggaW50KGxvY2FsX3BvcnQpICkK
KworICAgICMgR2VuZXJhdGUgcmFuZG9tIGZyZWUgcG9ydCBudW1iZXIuCisgICAgd2hpbGUgVHJ1
ZToKKyAgICAgICAgcG9ydCA9M0QgcmFuZG9tLnJhbmRyYW5nZShyYW5nZVswXSwgcmFuZ2VbMV0p
CisgICAgICAgIGlmIHBvcnQgbm90IGluIG9jY3VwaWVkX3BvcnRzOgorICAgICAgICAgICAgYnJl
YWsKKyAgICByZXR1cm4gcG9ydAoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQw
NTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIw
NCBsaWIvZ2FsYXh5L3Zpc3VhbGl6YXRpb24vcmVnaXN0cnkucHkKLS0tIGEvbGliL2dhbGF4eS92
aXN1YWxpemF0aW9uL3JlZ2lzdHJ5LnB5CisrKyBiL2xpYi9nYWxheHkvdmlzdWFsaXphdGlvbi9y
ZWdpc3RyeS5weQpAQCAtMzQ0LDYgKzM0NCwxMCBAQAogICAgICAgICAjIFRPRE86IEFzIHBhcnQg
b2YgYSBmdXR1cmUgbm90ZSBwbHVnaW4gcmVnaXN0cnkgZWZmb3J0IC0gbW92ZSB0aGlzCiAgICAg
ICAgICMgb3ZlcnJpZGUgYW5kIGxldCBWaXN1YWxpemF0aW9uc1JlZ2lzdHJ5IGp1c3QgcmV2ZXJ0
IHRvIHVzaW5nIHBhcj0KZW50J3MKICAgICAgICAgIyBmaWxsX3RlbXBsYXRlLgorCisgICAgICAg
ICMgTm8gbG9uZ2VyIG5lZWRlZCBidXQgYmVpbmcgbGVmdCBhcm91bmQgZm9yIGEgZmV3IHJlbGVh
c2VzIGFzIGlweT0KdGhvbi1nYWxheHkKKyAgICAgICAgIyBhcyBhbiBleHRlcm5hbCB2aXN1YWxp
emF0aW9uIHBsdWdpbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGNvPQpyZSBpbnRlcmFjdGl2
ZQorICAgICAgICAjIGVudmlyb25tZW50IHBsdWdpbi4KICAgICAgICAgaWYgJ2dldF9hcGlfa2V5
JyBub3QgaW4ga3dhcmdzOgo9MjAKICAgICAgICAgICAgIGRlZiBnZXRfYXBpX2tleSgpOgpAQCAt
NDAxLDYgKzQwNSwxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuZWQgPTNEIHt9Cj0y
MAorICAgICAgICAjIG1haW4gdGFnIHNwZWNpZmllcyBwbHVnaW4gdHlwZSAodmlzdWFsaXphdGlv
biBvcgorICAgICAgICAjIGludGVyYWN0aXZlX2Vudmlvcm5tZW50KS4KKyAgICAgICAgcmV0dXJu
ZWRbICdwbHVnaW5fdHlwZScgXSA9M0QgeG1sX3RyZWUudGFnCisKICAgICAgICAgIyBhIHRleHQg
ZGlzcGxheSBuYW1lIGZvciBlbmQgdXNlciBsaW5rcwogICAgICAgICByZXR1cm5lZFsgJ25hbWUn
IF0gPTNEIHhtbF90cmVlLmF0dHJpYi5nZXQoICduYW1lJywgTm9uZSApCiAgICAgICAgIGlmIG5v
dCByZXR1cm5lZFsgJ25hbWUnIF06CgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2Yy
ZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQy
YjA0IGxpYi9nYWxheHkvd2ViL2Jhc2UvaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLnB5Ci0tLSAv
ZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS93ZWIvYmFzZS9pbnRlcmFjdGl2ZV9lbnZpcm9ubWVu
dHMucHkKQEAgLTAsMCArMSwxNjIgQEAKK2ltcG9ydCBDb25maWdQYXJzZXIKKworaW1wb3J0IGhh
c2hsaWIKK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQorCitmcm9tIGdhbGF4eS51dGlsLmJ1bmNo
IGltcG9ydCBCdW5jaAorZnJvbSBnYWxheHkgaW1wb3J0IHdlYgoraW1wb3J0IHlhbWwKK2Zyb20g
Z2FsYXh5Lm1hbmFnZXJzIGltcG9ydCBhcGlfa2V5cworCisKK2NsYXNzIEludGVyYWN0aXZlRW52
aW9ybm1lbnRSZXF1ZXN0KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnMs
IHBsdWdpbik6CisgICAgICAgIHBsdWdpbl9jb25maWcgPTNEIHBsdWdpbi5jb25maWcKKworICAg
ICAgICBzZWxmLnRyYW5zID0zRCB0cmFucworCisgICAgICAgIHNlbGYuYXR0ciA9M0QgQnVuY2go
KQorICAgICAgICBzZWxmLmF0dHIudml6X2lkID0zRCBwbHVnaW5fY29uZmlnWyJuYW1lIl0ubG93
ZXIoKQorICAgICAgICBzZWxmLmF0dHIuaGlzdG9yeV9pZCA9M0QgdHJhbnMuc2VjdXJpdHkuZW5j
b2RlX2lkKCB0cmFucy5oaXN0b3J5Lmk9CmQgKQorICAgICAgICBzZWxmLmF0dHIucHJveHlfcmVx
dWVzdCA9M0QgdHJhbnMuYXBwLnByb3h5X21hbmFnZXIuc2V0dXBfcHJveHkoIHQ9CnJhbnMgKQor
ICAgICAgICBzZWxmLmF0dHIucHJveHlfdXJsID0zRCBzZWxmLmF0dHIucHJveHlfcmVxdWVzdFsg
J3Byb3h5X3VybCcgXQorICAgICAgICBzZWxmLmF0dHIuZ2FsYXh5X2NvbmZpZyA9M0QgdHJhbnMu
YXBwLmNvbmZpZworICAgICAgICBzZWxmLmF0dHIuZ2FsYXh5X3Jvb3RfZGlyID0zRCBvcy5wYXRo
LmFic3BhdGgoc2VsZi5hdHRyLmdhbGF4eV9jb249CmZpZy5yb290KQorCisgICAgICAgIHNlbGYu
YXR0ci5yb290ID0zRCB3ZWIudXJsX2ZvcigiLyIpCisgICAgICAgIHNlbGYuYXR0ci5hcHBfcm9v
dCA9M0Qgc2VsZi5hdHRyLnJvb3QgKyAicGx1Z2lucy92aXN1YWxpemF0aW9ucy8iID0KKyBzZWxm
LmF0dHIudml6X2lkICsgIi9zdGF0aWMvIgorCisgICAgICAgIHBsdWdpbl9wYXRoID0zRCBvcy5w
YXRoLmFic3BhdGgoIHBsdWdpbi5wYXRoICkKKworICAgICAgICAjIFN0b3JlIG91ciB0ZW1wbGF0
ZSBhbmQgY29uZmlndXJhdGlvbiBwYXRoCisgICAgICAgIHNlbGYuYXR0ci5vdXJfY29uZmlnX2Rp
ciA9M0Qgb3MucGF0aC5qb2luKHBsdWdpbl9wYXRoLCAiY29uZmlnIikKKyAgICAgICAgc2VsZi5h
dHRyLm91cl90ZW1wbGF0ZV9kaXIgPTNEIG9zLnBhdGguam9pbihwbHVnaW5fcGF0aCwgInRlbXBs
YXRlPQpzIikKKyAgICAgICAgc2VsZi5hdHRyLkhPU1QgPTNEIHRyYW5zLnJlcXVlc3QuaG9zdC5y
c3BsaXQoJzonLCAxKVswXQorICAgICAgICBzZWxmLmF0dHIuUE9SVCA9M0Qgc2VsZi5hdHRyLnBy
b3h5X3JlcXVlc3RbICdwcm94aWVkX3BvcnQnIF0KKworICAgIGRlZiBsb2FkX2RlcGxveV9jb25m
aWcoc2VsZiwgZGVmYXVsdF9kaWN0PTNEe30pOgorICAgICAgICB2aXpfY29uZmlnID0zRCBDb25m
aWdQYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcihkZWZhdWx0X2RpY3QpCisgICAgICAgIGNvbmZfcGF0
aCA9M0Qgb3MucGF0aC5qb2luKCBzZWxmLmF0dHIub3VyX2NvbmZpZ19kaXIsIHNlbGYuYXR0ci52
aT0Kel9pZCArICIuaW5pIiApCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggY29uZl9w
YXRoICk6CisgICAgICAgICAgICBjb25mX3BhdGggPTNEICIlcy5zYW1wbGUiICUgY29uZl9wYXRo
CisgICAgICAgIHZpel9jb25maWcucmVhZCggY29uZl9wYXRoICkKKyAgICAgICAgc2VsZi5hdHRy
LnZpel9jb25maWcgPTNEIHZpel9jb25maWcKKworICAgICAgICBkZWYgX2Jvb2xlYW5fb3B0aW9u
KG9wdGlvbiwgZGVmYXVsdD0zREZhbHNlKToKKyAgICAgICAgICAgIGlmIHNlbGYuYXR0ci52aXpf
Y29uZmlnLmhhc19vcHRpb24oIm1haW4iLCBvcHRpb24pOgorICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLmF0dHIudml6X2NvbmZpZy5nZXRib29sZWFuKCJtYWluIiwgb3B0aW9uKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgICAgICMg
T2xkZXIgc3R5bGUgcG9ydCByYW5nZSBwcm94eWluZyAtIG5vdCBzdXJlIHdlIHdhbnQgdG8ga2Vl
cCB0aGVzZT0KIGFyb3VuZCBvciBzaG91bGQKKyAgICAgICAgIyB3ZSBhbHdheXMgYXNzdW1lIHVz
ZSBvZiBHYWxheHkgZHluYW1pYyBwcm94eT8gTm9uZSBvZiB0aGVzZSBuZWVkPQogdG8gYmUgc3Bl
Y2lmaWVkCisgICAgICAgICMgaWYgdXNpbmcgdGhlIEdhbGF4eSBkeW5hbWljIHByb3h5LgorICAg
ICAgICBzZWxmLmF0dHIuUEFTU1dPUkRfQVVUSCA9M0QgX2Jvb2xlYW5fb3B0aW9uKCJwYXNzd29y
ZF9hdXRoIikKKyAgICAgICAgc2VsZi5hdHRyLkFQQUNIRV9VUkxTID0zRCBfYm9vbGVhbl9vcHRp
b24oImFwYWNoZV91cmxzIikKKyAgICAgICAgc2VsZi5hdHRyLlNTTF9VUkxTID0zRCBfYm9vbGVh
bl9vcHRpb24oInNzbCIpCisKKyAgICBkZWYgd3JpdGVfY29uZl9maWxlKHNlbGYsIG91dHB1dF9k
aXJlY3RvcnksIGV4dHJhPTNEe30pOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIEJ1aWxkIHVw
IGEgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgaXMgc3RhbmRhcmQgZm9yIEFMTCBJRXMuCisKKyAg
ICAgICAgICAgIFRPRE86IHJlcGxhY2UgaGFzaGVkIHBhc3N3b3JkIHdpdGggcGxhaW50ZXh0Lgor
ICAgICAgICAiIiIKKyAgICAgICAgdHJhbnMgPTNEIHNlbGYudHJhbnMKKyAgICAgICAgcmVxdWVz
dCA9M0QgdHJhbnMucmVxdWVzdAorICAgICAgICBhcGlfa2V5ID0zRCBhcGlfa2V5cy5BcGlLZXlN
YW5hZ2VyKCB0cmFucy5hcHAgKS5nZXRfb3JfY3JlYXRlX2FwaV89CmtleSggdHJhbnMudXNlciAp
CisgICAgICAgIGNvbmZfZmlsZSA9M0QgeworICAgICAgICAgICAgJ2hpc3RvcnlfaWQnOiBzZWxm
LmF0dHIuaGlzdG9yeV9pZCwKKyAgICAgICAgICAgICdhcGlfa2V5JzogYXBpX2tleSwKKyAgICAg
ICAgICAgICdyZW1vdGVfaG9zdCc6IHJlcXVlc3QucmVtb3RlX2FkZHIsCisgICAgICAgICAgICAn
ZG9ja2VyX3BvcnQnOiBzZWxmLmF0dHIuUE9SVCwKKyAgICAgICAgICAgICdjb3JzX29yaWdpbic6
IHJlcXVlc3QuaG9zdF91cmwsCisgICAgICAgIH0KKworICAgICAgICBpZiBzZWxmLmF0dHIudml6
X2NvbmZpZy5oYXNfb3B0aW9uKCJkb2NrZXIiLCAiZ2FsYXh5X3VybCIpOgorICAgICAgICAgICAg
Y29uZl9maWxlWydnYWxheHlfdXJsJ10gPTNEIHNlbGYuYXR0ci52aXpfY29uZmlnLmdldHN0cmlu
ZygiZG89CmNrZXIiLCAiZ2FsYXh5X3VybCIpCisgICAgICAgIGVsaWYgc2VsZi5hdHRyLmdhbGF4
eV9jb25maWcuZ2FsYXh5X2luZnJhc3RydWN0dXJlX3VybF9zZXQ6CisgICAgICAgICAgICBjb25m
X2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0Qgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ2FsYXh5X2lu
Zj0KcmFzdHJ1Y3R1cmVfdXJsLnJzdHJpcCgnLycpICsgJy8nCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBjb25mX2ZpbGVbJ2dhbGF4eV91cmwnXSA9M0QgcmVxdWVzdC5hcHBsaWNhdGlvbl91
cmwucnN0cmlwKCcvJz0KKSArICcvJworICAgICAgICAgICAgY29uZl9maWxlWydnYWxheHlfcGFz
dGVyX3BvcnQnXSA9M0Qgc2VsZi5hdHRyLmdhbGF4eV9jb25maWcuZ3U9CmVzc19nYWxheHlfcG9y
dCgpCisKKyAgICAgICAgaWYgc2VsZi5hdHRyLlBBU1NXT1JEX0FVVEg6CisgICAgICAgICAgICAj
IEdlbmVyYXRlIGEgcmFuZG9tIHBhc3N3b3JkICsgc2FsdAorICAgICAgICAgICAgbm90ZWJvb2tf
cHdfc2FsdCA9M0Qgc2VsZi5nZW5lcmF0ZV9wYXNzd29yZChsZW5ndGg9M0QxMikKKyAgICAgICAg
ICAgIG5vdGVib29rX3B3ID0zRCBzZWxmLmdlbmVyYXRlX3Bhc3N3b3JkKGxlbmd0aD0zRDI0KQor
ICAgICAgICAgICAgbSA9M0QgaGFzaGxpYi5zaGExKCkKKyAgICAgICAgICAgIG0udXBkYXRlKCBu
b3RlYm9va19wdyArIG5vdGVib29rX3B3X3NhbHQgKQorICAgICAgICAgICAgY29uZl9maWxlWydu
b3RlYm9va19wYXNzd29yZCddID0zRCAnc2hhMTolczolcycgJSAobm90ZWJvb2tfcHc9Cl9zYWx0
LCBtLmhleGRpZ2VzdCgpKQorICAgICAgICAgICAgIyBTaG91bGQgd2UgdXNlIHBhc3N3b3JkIGJh
c2VkIGNvbm5lY3Rpb24gb3IgImRlZmF1bHQiIGNvbm5lY3Q9CmlvbiBzdHlsZSBpbiBnYWxheHkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5vdGVib29rX3B3ID0zRCAiTm9uZSIKKworICAg
ICAgICAjIFNvbWUgd2lsbCBuZWVkIHRvIHBhc3MgZXh0cmEgZGF0YQorICAgICAgICBmb3IgZXh0
cmFfa2V5IGluIGV4dHJhOgorICAgICAgICAgICAgY29uZl9maWxlW2V4dHJhX2tleV0gPTNEIGV4
dHJhW2V4dHJhX2tleV0KKworICAgICAgICBzZWxmLmF0dHIubm90ZWJvb2tfcHcgPTNEIG5vdGVi
b29rX3B3CisgICAgICAgICMgV3JpdGUgY29uZgorICAgICAgICB3aXRoIG9wZW4oIG9zLnBhdGgu
am9pbiggb3V0cHV0X2RpcmVjdG9yeSwgJ2NvbmYueWFtbCcgKSwgJ3diJyApIGE9CnMgaGFuZGxl
OgorICAgICAgICAgICAgaGFuZGxlLndyaXRlKCB5YW1sLmR1bXAoY29uZl9maWxlLCBkZWZhdWx0
X2Zsb3dfc3R5bGU9M0RGYWxzZSk9CiApCisKKyAgICBkZWYgZ2VuZXJhdGVfaGV4KHNlbGYsIGxl
bmd0aCk6CisgICAgICAgIHJldHVybiAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlh
YmNkZWYnKSBmb3IgXyBpbiByYW5nZShsZT0Kbmd0aCkpCisKKyAgICBkZWYgZ2VuZXJhdGVfcGFz
c3dvcmQoc2VsZiwgbGVuZ3RoKToKKyAgICAgICAgIiIiCisgICAgICAgICAgICBHZW5lcmF0ZSBh
IHJhbmRvbSBhbHBoYW51bWVyaWMgcGFzc3dvcmQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVy
biAnJy5qb2luKHJhbmRvbS5jaG9pY2UoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
d3h5ej0KJykgZm9yIF8gaW4gcmFuZ2UobGVuZ3RoKSkKKworICAgIGRlZiBqYXZhc2NyaXB0X2Jv
b2xlYW4oc2VsZiwgcHl0aG9uX2Jvb2xlYW4pOgorICAgICAgICAiIiIKKyAgICAgICAgICAgIENv
bnZlbmllbmNlIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYm9vbGVhbiBmb3IgdXNlIGluIEpTCisgICAg
ICAgICIiIgorICAgICAgICBpZiBweXRob25fYm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiAi
dHJ1ZSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiZmFsc2UiCisKKyAgICBk
ZWYgdXJsX3RlbXBsYXRlKHNlbGYsIHVybF90ZW1wbGF0ZSk6CisgICAgICAgICIiIgorICAgICAg
ICAgICAgUHJvY2VzcyBhIFVSTCB0ZW1wbGF0ZQorCisgICAgICAgICAgICBUaGVyZSBhcmUgc2V2
ZXJhbCB2YXJpYWJsZXMgYWNjZXNzaWJsZSB0byB0aGUgdXNlcjoKKworICAgICAgICAgICAgICAg
IC0gJHtQUk9YWV9VUkx9IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBkeW5hbWljYWxseSBjcmVhdGUg
cHI9Cm94eQorICAgICAgICAgICAgICAgIC0gJHtQT1JUfSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgg
dGhlIHBvcnQgdGhlIGRvY2tlciBpbWFnZSA9CmlzIGF0dGFjaGVkIHRvCisgICAgICAgICIiIgor
ICAgICAgICAjIEZpZ3VyZSBvdXQgb3VyIHN1YnN0aXR1dGlvbnMKKworICAgICAgICAjIE5leHQg
c2V2ZXJhbCBsaW5lcyBmb3Igb2xkZXIgc3R5bGUgcmVwbGFjZW1lbnRzIChub3QgdXNlZCB3aXRo
IEc9CmFsYXh5IGR5bmFtaWMKKyAgICAgICAgIyBwcm94eSkKKworICAgICAgICBpZiBzZWxmLmF0
dHIuU1NMX1VSTFM6CisgICAgICAgICAgICBwcm90b2NvbCA9M0QgJ2h0dHBzJworICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcHJvdG9jb2wgPTNEICdodHRwJworCisgICAgICAgIGlmIG5vdCBz
ZWxmLmF0dHIuQVBBQ0hFX1VSTFM6CisgICAgICAgICAgICAjIElmIHRoZXkgYXJlIG5vdCB1c2lu
ZyBhcGFjaGUgVVJMcywgdGhhdCBpbXBsaWVzIHRoZXJlJ3MgYSBwbz0KcnQgYXR0YWNoZWQgdG8g
dGhlIGhvc3QKKyAgICAgICAgICAgICMgc3RyaW5nLCB0aHVzIHdlIHJlcGxhY2UganVzdCB0aGUg
Zmlyc3QgaW5zdGFuY2Ugb2YgaG9zdCB0aGF0PQogd2Ugc2VlLgorICAgICAgICAgICAgdXJsX3Rl
bXBsYXRlID0zRCB1cmxfdGVtcGxhdGUucmVwbGFjZSgnJHtIT1NUfScsICcke0hPU1R9OiR7UE89
ClJUfScsIDEpCisKKyAgICAgICAgdXJsX3RlbXBsYXRlID0zRCB1cmxfdGVtcGxhdGUucmVwbGFj
ZSgnJHtQUk9UT30nLCBwcm90b2NvbCkgXAorICAgICAgICAgICAgLnJlcGxhY2UoJyR7SE9TVH0n
LCBzZWxmLmF0dHIuSE9TVCkKKworICAgICAgICAjIE9ubHkgdGhlIGZvbGxvd2luZyByZXBsYWNl
bWVudHMgYXJlIHVzZWQgd2l0aCBHYWxheHkgZHluYW1pYyBwcm89Cnh5CisgICAgICAgICMgVVJM
cworICAgICAgICB1cmwgPTNEIHVybF90ZW1wbGF0ZS5yZXBsYWNlKCcke1BST1hZX1VSTH0nLCBz
dHIoc2VsZi5hdHRyLnByb3h5X3U9CnJsKSkgXAorICAgICAgICAgICAgLnJlcGxhY2UoJyR7UE9S
VH0nLCBzdHIoc2VsZi5hdHRyLlBPUlQpKQorICAgICAgICByZXR1cm4gdXJsCisKKyAgICBkZWYg
ZG9ja2VyX2NtZChzZWxmLCB0ZW1wX2Rpcik6CisgICAgICAgICIiIgorICAgICAgICAgICAgR2Vu
ZXJhdGUgYW5kIHJldHVybiB0aGUgZG9ja2VyIGNvbW1hbmQgdG8gZXhlY3V0ZQorICAgICAgICAi
IiIKKyAgICAgICAgcmV0dXJuICclcyBydW4gLWQgLS1zaWctcHJveHk9M0R0cnVlIC1wICVzOiVz
IC12ICIlczovaW1wb3J0LyIgJXMnPQogJSBcCisgICAgICAgICAgICAoc2VsZi5hdHRyLnZpel9j
b25maWcuZ2V0KCJkb2NrZXIiLCAiY29tbWFuZCIpLCBzZWxmLmF0dHIuUE9SVD0KLCBzZWxmLmF0
dHIuZG9ja2VyX3BvcnQsCisgICAgICAgICAgICAgdGVtcF9kaXIsIHNlbGYuYXR0ci52aXpfY29u
ZmlnLmdldCgiZG9ja2VyIiwgImltYWdlIikpCgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRi
ZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUy
Y2M1YWQyYjA0IGxpYi9nYWxheHkvd2ViL2Jhc2UvcGx1Z2luZnJhbWV3b3JrLnB5Ci0tLSBhL2xp
Yi9nYWxheHkvd2ViL2Jhc2UvcGx1Z2luZnJhbWV3b3JrLnB5CisrKyBiL2xpYi9nYWxheHkvd2Vi
L2Jhc2UvcGx1Z2luZnJhbWV3b3JrLnB5CkBAIC0yMCw2ICsyMCw4IEBACiBmcm9tIGdhbGF4eSBp
bXBvcnQgdXRpbAogZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgb2RpY3QKIGZyb20gZ2FsYXh5LnV0
aWwgaW1wb3J0IGJ1bmNoCitmcm9tIC5pbnRlcmFjdGl2ZV9lbnZpcm9ubWVudHMgaW1wb3J0IElu
dGVyYWN0aXZlRW52aW9ybm1lbnRSZXF1ZXN0CisKPTIwCiBpbXBvcnQgbG9nZ2luZwogbG9nID0z
RCBsb2dnaW5nLmdldExvZ2dlciggX19uYW1lX18gKQpAQCAtNTkwLDYgKzU5MiwxMSBAQAogICAg
ICAgICBpZiAncGx1Z2luX3BhdGgnIG5vdCBpbiBrd2FyZ3M6CiAgICAgICAgICAgICBrd2FyZ3Nb
ICdwbHVnaW5fcGF0aCddID0zRCBvcy5wYXRoLmFic3BhdGgoIHBsdWdpbi5wYXRoICkKPTIwCisg
ICAgICAgIHBsdWdpbl90eXBlID0zRCBwbHVnaW4uY29uZmlnWyJwbHVnaW5fdHlwZSJdCisgICAg
ICAgIGlmIHBsdWdpbl90eXBlID0zRD0zRCAiaW50ZXJhY3RpdmVfZW52aXJvbm1lbnQiOgorICAg
ICAgICAgICAgcmVxdWVzdCA9M0QgSW50ZXJhY3RpdmVFbnZpb3JubWVudFJlcXVlc3QodHJhbnMs
IHBsdWdpbikKKyAgICAgICAgICAgIGt3YXJnc1siaWVfcmVxdWVzdCJdID0zRCByZXF1ZXN0CisK
ICAgICAgICAgIyBkZWZpbmVkIGhlcmUgdG8gYmUgb3ZlcnJpZGRlbgogICAgICAgICByZXR1cm4g
dHJhbnMuZmlsbF90ZW1wbGF0ZSggdGVtcGxhdGVfZmlsZW5hbWUsIHRlbXBsYXRlX2xvb2t1cD0z
RHA9Cmx1Z2luLnRlbXBsYXRlX2xvb2t1cCwgKiprd2FyZ3MgKQo9MjAKCmRpZmYgLXIgMzVjMTM5
MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQz
OWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgbGliL2dhbGF4eS93ZWIvcHJveHkvX19pbml0X18ucHkK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L3dlYi9wcm94eS9fX2luaXRfXy5weQpAQCAt
MCwwICsxLDE2OSBAQAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IGpzb24KKwor
ZnJvbSAuZmlsZWxvY2sgaW1wb3J0IEZpbGVMb2NrCitmcm9tIGdhbGF4eS51dGlsIGltcG9ydCBz
b2NrZXRzCitmcm9tIGdhbGF4eS51dGlsLmxhenlfcHJvY2VzcyBpbXBvcnQgTGF6eVByb2Nlc3Ms
IE5vT3BMYXp5UHJvY2VzcworZnJvbSBnYWxheHkudXRpbCBpbXBvcnQgc3FsaXRlCisKK2xvZyA9
M0QgbG9nZ2luZy5nZXRMb2dnZXIoIF9fbmFtZV9fICkKKworCitERUZBVUxUX1BST1hZX1RPX0hP
U1QgPTNEICJsb2NhbGhvc3QiCitTRUNVUkVfQ09PS0lFID0zRCAiZ2FsYXh5c2Vzc2lvbiIKKwor
CitjbGFzcyBQcm94eU1hbmFnZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyggc2VsZiwg
Y29uZmlnICk6CisgICAgICAgIGZvciBvcHRpb24gaW4gWyAibWFuYWdlX2R5bmFtaWNfcHJveHki
LCAiZHluYW1pY19wcm94eV9iaW5kX3BvcnQiLD0KICJkeW5hbWljX3Byb3h5X2JpbmRfaXAiLCAi
ZHluYW1pY19wcm94eV9kZWJ1ZyIgXToKKyAgICAgICAgICAgIHNldGF0dHIoIHNlbGYsIG9wdGlv
biwgZ2V0YXR0ciggY29uZmlnLCBvcHRpb24gKSApCisgICAgICAgIHNlbGYubGF1bmNoX2J5ID0z
RCAibm9kZSIgICMgVE9ETzogU3VwcG9ydCBkb2NrZXIKKyAgICAgICAgaWYgc2VsZi5tYW5hZ2Vf
ZHluYW1pY19wcm94eToKKyAgICAgICAgICAgIHNlbGYubGF6eV9wcm9jZXNzID0zRCBzZWxmLl9f
c2V0dXBfbGF6eV9wcm9jZXNzKCBjb25maWcgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2VsZi5sYXp5X3Byb2Nlc3MgPTNEIE5vT3BMYXp5UHJvY2VzcygpCisgICAgICAgIHNlbGYucHJv
eHlfaXBjID0zRCBwcm94eV9pcGMoY29uZmlnKQorCisgICAgZGVmIHNodXRkb3duKCBzZWxmICk6
CisgICAgICAgIHNlbGYubGF6eV9wcm9jZXNzLnNodXRkb3duKCkKKworICAgIGRlZiBzZXR1cF9w
cm94eSggc2VsZiwgdHJhbnMsIGhvc3Q9M0RERUZBVUxUX1BST1hZX1RPX0hPU1QsIHBvcnQ9M0RO
b249CmUgKToKKyAgICAgICAgaWYgc2VsZi5tYW5hZ2VfZHluYW1pY19wcm94eToKKyAgICAgICAg
ICAgIGxvZy5pbmZvKCJBdHRlbXB0aW5nIHRvIHN0YXJ0IGR5bmFtaWMgcHJveHkgcHJvY2VzcyIp
CisgICAgICAgICAgICBzZWxmLmxhenlfcHJvY2Vzcy5zdGFydF9wcm9jZXNzKCkKKworICAgICAg
ICBhdXRoZW50aWNhdGlvbiA9M0QgQXV0aGVudGljYXRpb25Ub2tlbih0cmFucykKKyAgICAgICAg
cHJveHlfcmVxdWVzdHMgPTNEIFByb3h5UmVxdWVzdHMoaG9zdD0zRGhvc3QsIHBvcnQ9M0Rwb3J0
KQorICAgICAgICBzZWxmLnByb3h5X2lwYy5oYW5kbGVfcmVxdWVzdHMoYXV0aGVudGljYXRpb24s
IHByb3h5X3JlcXVlc3RzKQorICAgICAgICAjIFRPRE86IFRoZXNlIHNob3VsZG4ndCBuZWVkIHRv
IGJlIHJlcXVlc3QuaG9zdCBhbmQgcmVxdWVzdC5zY2hlbWU9CiAtCisgICAgICAgICMgdGhvdWdo
IHRoZXkgYXJlIHJlYXNvbmFibGUgZGVmYXVsdHMuCisgICAgICAgIGhvc3QgPTNEIHRyYW5zLnJl
cXVlc3QuaG9zdAorICAgICAgICBpZiAnOicgaW4gaG9zdDoKKyAgICAgICAgICAgIGhvc3QgPTNE
IGhvc3RbMDpob3N0LmluZGV4KCc6JyldCisgICAgICAgIHNjaGVtZSA9M0QgdHJhbnMucmVxdWVz
dC5zY2hlbWUKKyAgICAgICAgcHJveHlfdXJsID0zRCAnJXM6Ly8lczolZCcgJSAoc2NoZW1lLCBo
b3N0LCBzZWxmLmR5bmFtaWNfcHJveHlfYmluPQpkX3BvcnQpCisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAncHJveHlfdXJsJzogcHJveHlfdXJsLAorICAgICAgICAgICAgJ3Byb3hpZWRf
cG9ydCc6IHByb3h5X3JlcXVlc3RzLnBvcnQsCisgICAgICAgICAgICAncHJveGllZF9ob3N0Jzog
cHJveHlfcmVxdWVzdHMuaG9zdCwKKyAgICAgICAgfQorCisgICAgZGVmIF9fc2V0dXBfbGF6eV9w
cm9jZXNzKCBzZWxmLCBjb25maWcgKToKKyAgICAgICAgbGF1bmNoZXIgPTNEIHByb3h5X2xhdW5j
aGVyKHNlbGYpCisgICAgICAgIGNvbW1hbmQgPTNEIGxhdW5jaGVyLmxhdW5jaF9wcm94eV9jb21t
YW5kKGNvbmZpZykKKyAgICAgICAgcmV0dXJuIExhenlQcm9jZXNzKGNvbW1hbmQpCisKKworZGVm
IHByb3h5X2xhdW5jaGVyKGNvbmZpZyk6CisgICAgcmV0dXJuIE5vZGVQcm94eUxhdW5jaGVyKCkK
KworCitjbGFzcyBQcm94eUxhdW5jaGVyKG9iamVjdCk6CisKKyAgICBkZWYgbGF1bmNoX3Byb3h5
X2NvbW1hbmQoc2VsZiwgY29uZmlnKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
cigpCisKKworY2xhc3MgTm9kZVByb3h5TGF1bmNoZXIob2JqZWN0KToKKworICAgIGRlZiBsYXVu
Y2hfcHJveHlfY29tbWFuZChzZWxmLCBjb25maWcpOgorICAgICAgICBhcmdzID0zRCBbCisgICAg
ICAgICAgICAiLS1zZXNzaW9ucyIsIGNvbmZpZy5wcm94eV9zZXNzaW9uX21hcCwKKyAgICAgICAg
ICAgICItLWlwIiwgY29uZmlnLmR5bmFtaWNfcHJveHlfYmluZF9pcCwKKyAgICAgICAgICAgICIt
LXBvcnQiLCBzdHIoY29uZmlnLmR5bmFtaWNfcHJveHlfYmluZF9wb3J0KSwKKyAgICAgICAgXQor
ICAgICAgICBpZiBjb25maWcuZHluYW1pY19wcm94eV9kZWJ1ZzoKKyAgICAgICAgICAgIGFyZ3Mu
YXBwZW5kKCItLXZlcmJvc2UiKQorCisgICAgICAgIHBhcmVudF9kaXJlY3RvcnkgPTNEIG9zLnBh
dGguZGlybmFtZSggX19maWxlX18gKQorICAgICAgICBwYXRoX3RvX2FwcGxpY2F0aW9uID0zRCBv
cy5wYXRoLmpvaW4oIHBhcmVudF9kaXJlY3RvcnksICJqcyIsICJsaWI9CiIsICJtYWluLmpzIiAp
CisgICAgICAgIGNvbW1hbmQgPTNEIFsgcGF0aF90b19hcHBsaWNhdGlvbiBdICsgYXJncworICAg
ICAgICByZXR1cm4gY29tbWFuZAorCisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uVG9rZW4ob2JqZWN0
KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFucyk6CisgICAgICAgIHNlbGYuY29va2ll
X25hbWUgPTNEIFNFQ1VSRV9DT09LSUUKKyAgICAgICAgc2VsZi5jb29raWVfdmFsdWUgPTNEIHRy
YW5zLmdldF9jb29raWUoIHNlbGYuY29va2llX25hbWUgKQorCisKK2NsYXNzIFByb3h5UmVxdWVz
dHMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PTNETm9uZSwgcG9ydD0z
RE5vbmUpOgorICAgICAgICBpZiBob3N0IGlzIE5vbmU6CisgICAgICAgICAgICBob3N0ID0zRCBE
RUZBVUxUX1BST1hZX1RPX0hPU1QKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAg
ICAgcG9ydCA9M0Qgc29ja2V0cy51bnVzZWRfcG9ydCgpCisgICAgICAgICAgICBsb2cuaW5mbygi
T2J0YWluZWQgdW51c2VkIHBvcnQgJWQiICUgcG9ydCkKKyAgICAgICAgc2VsZi5ob3N0ID0zRCBo
b3N0CisgICAgICAgIHNlbGYucG9ydCA9M0QgcG9ydAorCisKK2RlZiBwcm94eV9pcGMoY29uZmln
KToKKyAgICBwcm94eV9zZXNzaW9uX21hcCA9M0QgY29uZmlnLnByb3h5X3Nlc3Npb25fbWFwCisg
ICAgaWYgcHJveHlfc2Vzc2lvbl9tYXAuZW5kc3dpdGgoIi5zcWxpdGUiKToKKyAgICAgICAgcmV0
dXJuIFNxbGl0ZVByb3h5SXBjKHByb3h5X3Nlc3Npb25fbWFwKQorICAgIGVsc2U6CisgICAgICAg
IHJldHVybiBKc29uRmlsZVByb3h5SXBjKHByb3h5X3Nlc3Npb25fbWFwKQorCisKK2NsYXNzIFBy
b3h5SXBjKG9iamVjdCk6CisKKyAgICBkZWYgaGFuZGxlX3JlcXVlc3RzKHNlbGYsIGNvb2tpZSwg
aG9zdCwgcG9ydCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisKK2Ns
YXNzIEpzb25GaWxlUHJveHlJcGMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
cm94eV9zZXNzaW9uX21hcCk6CisgICAgICAgIHNlbGYucHJveHlfc2Vzc2lvbl9tYXAgPTNEIHBy
b3h5X3Nlc3Npb25fbWFwCisKKyAgICBkZWYgaGFuZGxlX3JlcXVlc3RzKHNlbGYsIGF1dGhlbnRp
Y2F0aW9uLCBwcm94eV9yZXF1ZXN0cyk6CisgICAgICAgIGtleSA9M0QgIiVzOiVzIiAlICggcHJv
eHlfcmVxdWVzdHMuaG9zdCwgcHJveHlfcmVxdWVzdHMucG9ydCApCisgICAgICAgIHNlY3VyZV9p
ZCA9M0QgYXV0aGVudGljYXRpb24uY29va2llX3ZhbHVlCisgICAgICAgIHdpdGggRmlsZUxvY2so
IHNlbGYucHJveHlfc2Vzc2lvbl9tYXAgKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4
aXN0cyggc2VsZi5wcm94eV9zZXNzaW9uX21hcCApOgorICAgICAgICAgICAgICAgIG9wZW4oIHNl
bGYucHJveHlfc2Vzc2lvbl9tYXAsICJ3IiApLndyaXRlKCAie30iICkKKyAgICAgICAgICAgIGpz
b25fZGF0YSA9M0Qgb3Blbiggc2VsZi5wcm94eV9zZXNzaW9uX21hcCwgInIiICkucmVhZCgpCisg
ICAgICAgICAgICBzZXNzaW9uX21hcCA9M0QganNvbi5sb2FkcygganNvbl9kYXRhICkKKyAgICAg
ICAgICAgIHRvX3JlbW92ZSA9M0QgW10KKyAgICAgICAgICAgIGZvciBrLCB2YWx1ZSBpbiBzZXNz
aW9uX21hcC5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHZhbHVlID0zRD0zRCBzZWN1cmVf
aWQ6CisgICAgICAgICAgICAgICAgICAgIHRvX3JlbW92ZS5hcHBlbmQoIGsgKQorICAgICAgICAg
ICAgZm9yIGsgaW4gdG9fcmVtb3ZlOgorICAgICAgICAgICAgICAgIGRlbCBzZXNzaW9uX21hcFsg
ayBdCisgICAgICAgICAgICBzZXNzaW9uX21hcFsga2V5IF0gPTNEIHNlY3VyZV9pZAorICAgICAg
ICAgICAgbmV3X2pzb25fZGF0YSA9M0QganNvbi5kdW1wcyggc2Vzc2lvbl9tYXAgKQorICAgICAg
ICAgICAgb3Blbiggc2VsZi5wcm94eV9zZXNzaW9uX21hcCwgInciICkud3JpdGUoIG5ld19qc29u
X2RhdGEgKQorCisKK2NsYXNzIFNxbGl0ZVByb3h5SXBjKG9iamVjdCk6CisKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcHJveHlfc2Vzc2lvbl9tYXApOgorICAgICAgICBzZWxmLnByb3h5X3Nlc3Np
b25fbWFwID0zRCBwcm94eV9zZXNzaW9uX21hcAorCisgICAgZGVmIGhhbmRsZV9yZXF1ZXN0cyhz
ZWxmLCBhdXRoZW50aWNhdGlvbiwgcHJveHlfcmVxdWVzdHMpOgorICAgICAgICBrZXkgPTNEICIl
czolcyIgJSAoIHByb3h5X3JlcXVlc3RzLmhvc3QsIHByb3h5X3JlcXVlc3RzLnBvcnQgKQorICAg
ICAgICBzZWN1cmVfaWQgPTNEIGF1dGhlbnRpY2F0aW9uLmNvb2tpZV92YWx1ZQorICAgICAgICB3
aXRoIEZpbGVMb2NrKCBzZWxmLnByb3h5X3Nlc3Npb25fbWFwICk6CisgICAgICAgICAgICBjb25u
ID0zRCBzcWxpdGUuY29ubmVjdChzZWxmLnByb3h5X3Nlc3Npb25fbWFwKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIGMgPTNEIGNvbm4uY3Vyc29yKCkKKyAgICAgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgQ3JlYXRlIHRhYmxlCisgICAgICAgICAgICAg
ICAgICAgIGMuZXhlY3V0ZSgnJydDUkVBVEUgVEFCTEUgZ3hwcm94eQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGtleSB0ZXh0IFBSSU1BUllfS0VZLCBzZWNyZXQgdGV4dCknJycp
CisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAg
cGFzcworICAgICAgICAgICAgICAgIGluc2VydF90bXBsID0zRCAnJydJTlNFUlQgSU5UTyBneHBy
b3h5IChrZXksIHNlY3JldCkgVkFMVUU9ClMgKCclcycsICclcycpOycnJworICAgICAgICAgICAg
ICAgIGluc2VydCA9M0QgaW5zZXJ0X3RtcGwgJSAoa2V5LCBzZWN1cmVfaWQpCisgICAgICAgICAg
ICAgICAgYy5leGVjdXRlKGluc2VydCkKKyAgICAgICAgICAgICAgICBjb25uLmNvbW1pdCgpCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisjIFRP
RE86IFJFU1RmdWwgQVBJIGRyaXZlbiBwcm94eT8KKyMgVE9ETzogTVEgZGl2ZW4gcHJveHk/Cgpk
aWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2Zm
OGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGxpYi9nYWxheHkvd2ViL3Byb3h5
L2ZpbGVsb2NrLnB5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2dhbGF4eS93ZWIvcHJveHkvZmls
ZWxvY2sucHkKQEAgLTAsMCArMSw4MiBAQAorIiIiIENvZGUgb2J0YWluZWQgZnJvbSBodHRwczov
L2dpdGh1Yi5jb20vZG1mcmV5L0ZpbGVMb2NrCisKK1NlZSBmdWxsIGxpY2Vuc2UgYXQ6CisKK2h0
dHBzOi8vZ2l0aHViLmNvbS9kbWZyZXkvRmlsZUxvY2svYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQK
KworIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KKworCitjbGFzcyBG
aWxlTG9ja0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBGaWxlTG9j
ayhvYmplY3QpOgorICAgICIiIiBBIGZpbGUgbG9ja2luZyBtZWNoYW5pc20gdGhhdCBoYXMgY29u
dGV4dC1tYW5hZ2VyIHN1cHBvcnQgc28KKyAgICAgICAgeW91IGNhbiB1c2UgaXQgaW4gYSB3aXRo
IHN0YXRlbWVudC4gVGhpcyBzaG91bGQgYmUgcmVsYXRpdmVseSBjcm9zcworICAgICAgICBjb21w
YXRpYmxlIGFzIGl0IGRvZXNuJ3QgcmVseSBvbiBtc3ZjcnQgb3IgZmNudGwgZm9yIHRoZSBsb2Nr
aW5nLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfbmFtZSwgdGltZW91
dD0zRDEwLCBkZWxheT0zRC4wNSk6CisgICAgICAgICIiIiBQcmVwYXJlIHRoZSBmaWxlIGxvY2tl
ci4gU3BlY2lmeSB0aGUgZmlsZSB0byBsb2NrIGFuZCBvcHRpb25hbD0KbHkKKyAgICAgICAgICAg
IHRoZSBtYXhpbXVtIHRpbWVvdXQgYW5kIHRoZSBkZWxheSBiZXR3ZWVuIGVhY2ggYXR0ZW1wdCB0
byBsb2NrLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5pc19sb2NrZWQgPTNEIEZhbHNlCisg
ICAgICAgIGZ1bGxfcGF0aCA9M0Qgb3MucGF0aC5hYnNwYXRoKGZpbGVfbmFtZSkKKyAgICAgICAg
c2VsZi5sb2NrZmlsZSA9M0QgIiVzLmxvY2siICUgZnVsbF9wYXRoCisgICAgICAgIHNlbGYuZmls
ZV9uYW1lID0zRCBmdWxsX3BhdGgKKyAgICAgICAgc2VsZi50aW1lb3V0ID0zRCB0aW1lb3V0Cisg
ICAgICAgIHNlbGYuZGVsYXkgPTNEIGRlbGF5CisKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAg
ICAgICAgIiIiIEFjcXVpcmUgdGhlIGxvY2ssIGlmIHBvc3NpYmxlLiBJZiB0aGUgbG9jayBpcyBp
biB1c2UsIGl0IGNoZWNrPQogYWdhaW4KKyAgICAgICAgICAgIGV2ZXJ5IGB3YWl0YCBzZWNvbmRz
LiBJdCBkb2VzIHRoaXMgdW50aWwgaXQgZWl0aGVyIGdldHMgdGhlIGxvPQpjayBvcgorICAgICAg
ICAgICAgZXhjZWVkcyBgdGltZW91dGAgbnVtYmVyIG9mIHNlY29uZHMsIGluIHdoaWNoIGNhc2Ug
aXQgdGhyb3dzCisgICAgICAgICAgICBhbiBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAg
ICBzdGFydF90aW1lID0zRCB0aW1lLnRpbWUoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZmQgPTNEIG9zLm9wZW4oc2VsZi5sb2Nr
ZmlsZSwgb3MuT19DUkVBVCB8IG9zLk9fRVhDTCA9Cnwgb3MuT19SRFdSKQorICAgICAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAg
ICAgIGlmIGUuZXJybm8gIT0zRCBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgICAgIHJh
aXNlCisgICAgICAgICAgICAgICAgaWYgKHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSkgPj0zRCBz
ZWxmLnRpbWVvdXQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVMb2NrRXhjZXB0aW9u
KCJUaW1lb3V0IG9jY3VyZWQuIikKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHNlbGYuZGVs
YXkpCisgICAgICAgIHNlbGYuaXNfbG9ja2VkID0zRCBUcnVlCisKKyAgICBkZWYgcmVsZWFzZShz
ZWxmKToKKyAgICAgICAgIiIiIEdldCByaWQgb2YgdGhlIGxvY2sgYnkgZGVsZXRpbmcgdGhlIGxv
Y2tmaWxlLgorICAgICAgICAgICAgV2hlbiB3b3JraW5nIGluIGEgYHdpdGhgIHN0YXRlbWVudCwg
dGhpcyBnZXRzIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgICAgIGNhbGxlZCBhdCB0aGUgZW5kLgor
ICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5pc19sb2NrZWQ6CisgICAgICAgICAgICBvcy5j
bG9zZShzZWxmLmZkKQorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYubG9ja2ZpbGUpCisgICAg
ICAgICAgICBzZWxmLmlzX2xvY2tlZCA9M0QgRmFsc2UKKworICAgIGRlZiBfX2VudGVyX18oc2Vs
Zik6CisgICAgICAgICIiIiBBY3RpdmF0ZWQgd2hlbiB1c2VkIGluIHRoZSB3aXRoIHN0YXRlbWVu
dC4KKyAgICAgICAgICAgIFNob3VsZCBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgYSBsb2NrIHRvIGJl
IHVzZWQgaW4gdGhlIHdpdGggYmxvPQpjay4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBz
ZWxmLmlzX2xvY2tlZDoKKyAgICAgICAgICAgIHNlbGYuYWNxdWlyZSgpCisgICAgICAgIHJldHVy
biBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6
CisgICAgICAgICIiIiBBY3RpdmF0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQu
CisgICAgICAgICAgICBJdCBhdXRvbWF0aWNhbGx5IHJlbGVhc2VzIHRoZSBsb2NrIGlmIGl0IGlz
bid0IGxvY2tlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuaXNfbG9ja2VkOgorICAg
ICAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAg
ICAiIiIgTWFrZSBzdXJlIHRoYXQgdGhlIEZpbGVMb2NrIGluc3RhbmNlIGRvZXNuJ3QgbGVhdmUg
YSBsb2NrZmlsZQorICAgICAgICAgICAgbHlpbmcgYXJvdW5kLgorICAgICAgICAiIiIKKyAgICAg
ICAgc2VsZi5yZWxlYXNlKCkKCmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1
ZjgzMTRlMTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQg
bGliL2dhbGF4eS93ZWIvcHJveHkvanMvRG9ja2VyZmlsZQotLS0gL2Rldi9udWxsCisrKyBiL2xp
Yi9nYWxheHkvd2ViL3Byb3h5L2pzL0RvY2tlcmZpbGUKQEAgLTAsMCArMSwxOCBAQAorIyBIYXZl
IG5vdCB5ZXQgZ290dGVuIHRoaXMgdG8gd29yayAtIGdvYWwgd2FzIHRvIGxhdW5jaCB0aGUgcHJv
eCBpbiBhIERvY2s9CmVyIGNvbnRhaW5lci4KKyMgTmV0d29ya2luZyBpcyBhIGJpdCB0cmlja3kg
dGhvdWdoIC0gY291bGQgbm90IGdldCB0aGUgY2hpbGQgcHJveHkgdG8gdGFsPQprIHRvIHRoZSBj
aGlsZAorIyBJUHl0aG9uIGNvbnRhaW5lci4KKworCisjIHN1ZG8gZG9ja2VyIGJ1aWxkIC0tbm8t
Y2FjaGU9M0R0cnVlIC10IGd4cHJveHkgLgorIyBzdWRvIGRvY2tlciBydW4gLS1uZXQgaG9zdCAt
diAvaG9tZS9qb2huL3dvcmtzcGFjZS9nYWxheHktY2VudHJhbC9kYXRhYmE9CnNlOi92YXIvZ3hw
cm94eSAtcCA4ODAwOjg4MDAgLXQgZ3hwcm94eSBsaWIvbWFpbi5qcyAtLXNlc3Npb25zIC92YXIv
Z3hwcm94eT0KL3Nlc3Npb25fbWFwLmpzb24gLS1pcCAwLjAuMC4wIC0tcG9ydCA4ODAwCisKK0ZS
T00gbm9kZTowLjExLjEzCisKK1JVTiBta2RpciAtcCAvdXNyL3NyYy9neHByb3h5CitXT1JLRElS
IC91c3Ivc3JjL2d4cHJveHkKKworQUREIHBhY2thZ2UuanNvbiAvdXNyL3NyYy9neHByb3h5Lwor
UlVOIG5wbSBpbnN0YWxsCitBREQgLiAvdXNyL3NyYy9neHByb3h5CisKK0NNRCBbICJsaWIvbWFp
bi5qcyIgXQoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFl
IC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBsaWIvZ2FsYXh5
L3dlYi9wcm94eS9qcy9SRUFETUUubWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L3dl
Yi9wcm94eS9qcy9SRUFETUUubWQKQEAgLTAsMCArMSwyIEBACisjIEEgZHluYW1pYyBjb25maWd1
cmFibGUgcmV2ZXJzZSBwcm94eSBmb3IgdXNlIHdpdGhpbiBHYWxheHkKKwoKZGlmZiAtciAzNWMx
MzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZl
NDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBsaWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvbWFp
bi5qcwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9tYWlu
LmpzCkBAIC0wLDAgKzEsNDEgQEAKKyMhL3Vzci9iaW4vZW52IG5vZGUKKy8qCitJbnNwaXJhdGlv
biB0YWtlbiBmcm9tPTIwCisJaHR0cHM6Ly9naXRodWIuY29tL2p1cHl0ZXIvbXVsdGl1c2VyLXNl
cnZlci9ibG9iL21hc3Rlci9tdWx0aXVzZXIvanMvbWFpbj0KLmpzCisqLwordmFyIGZzID0zRCBy
ZXF1aXJlKCdmcycpOwordmFyIGFyZ3MgPTNEIHJlcXVpcmUoJ2NvbW1hbmRlcicpOworCitwYWNr
YWdlX2luZm8gPTNEIHJlcXVpcmUoJy4uL3BhY2thZ2UnKQorCithcmdzCisJLnZlcnNpb24ocGFj
a2FnZV9pbmZvKQorICAgIC5vcHRpb24oJy0taXAgPG4+JywgJ1B1YmxpYy1mYWNpbmcgSVAgb2Yg
dGhlIHByb3h5JywgJ2xvY2FsaG9zdCcpCisgICAgLm9wdGlvbignLS1wb3J0IDxuPicsICdQdWJs
aWMtZmFjaW5nIHBvcnQgb2YgdGhlIHByb3h5JywgcGFyc2VJbnQpCisgICAgLm9wdGlvbignLS1j
b29raWUgPGNvb2tpZW5hbWU+JywgJ0Nvb2tpZSBwcm92aW5nIGF1dGhlbnRpY2F0aW9uJywgJ2dh
bD0KYXh5c2Vzc2lvbicpCisgICAgLm9wdGlvbignLS1zZXNzaW9ucyA8ZmlsZT4nLCAnUm91dGVz
IGZpbGUgdG8gbW9uaXRvcicpCisgICAgLm9wdGlvbignLS12ZXJib3NlJykKKworYXJncy5wYXJz
ZShwcm9jZXNzLmFyZ3YpOworCit2YXIgRHluYW1pY1Byb3h5ID0zRCByZXF1aXJlKCcuL3Byb3h5
LmpzJykuRHluYW1pY1Byb3h5OwordmFyIG1hcEZvciA9M0QgcmVxdWlyZSgnLi9tYXBwZXIuanMn
KS5tYXBGb3I7CisKK3ZhciBzZXNzaW9ucyA9M0QgbWFwRm9yKGFyZ3Muc2Vzc2lvbnMpOworCit2
YXIgZHluYW1pY19wcm94eV9vcHRpb25zID0zRCB7CisgIHNlc3Npb25Db29raWU6IGFyZ3NbJ2Nv
b2tpZSddLAorICBzZXNzaW9uTWFwOiBzZXNzaW9ucywKKyAgdmVyYm9zZTogYXJncy52ZXJib3Nl
Cit9CisKK3ZhciBkeW5hbWljX3Byb3h5ID0zRCBuZXcgRHluYW1pY1Byb3h5KGR5bmFtaWNfcHJv
eHlfb3B0aW9ucyk7CisKK3ZhciBsaXN0ZW4gPTNEIHt9OworbGlzdGVuLnBvcnQgPTNEIGFyZ3Mu
cG9ydCB8fCA4MDAwOworbGlzdGVuLmlwID0zRCBhcmdzLmlwOworCitpZihhcmdzLnZlcmJvc2Up
IHsKKwljb25zb2xlLmxvZygiTGlzdGVuaW5nIG9uICIgKyBsaXN0ZW4uaXAgKyAiOiIgKyBsaXN0
ZW4ucG9ydCk7Cit9CitkeW5hbWljX3Byb3h5LnByb3h5X3NlcnZlci5saXN0ZW4obGlzdGVuLnBv
cnQsIGxpc3Rlbi5pcCk7CgpkaWZmIC1yIDM1YzEzOTJiMDQ5Y2JmNDE4NDRiZTFmY2YyZDA1NWY4
MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9CjYyZDY0MTUyY2M1YWQyYjA0IGxp
Yi9nYWxheHkvd2ViL3Byb3h5L2pzL2xpYi9tYXBwZXIuanMKLS0tIC9kZXYvbnVsbAorKysgYi9s
aWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvbWFwcGVyLmpzCkBAIC0wLDAgKzEsNzggQEAKK3Zh
ciBmcyA9M0QgcmVxdWlyZSgnZnMnKTsKK3ZhciBzcWxpdGUzID0zRCByZXF1aXJlKCdzcWxpdGUz
JykKKworCit2YXIgZW5kc1dpdGggPTNEIGZ1bmN0aW9uKHN1YmplY3RTdHJpbmcsIHNlYXJjaFN0
cmluZykgeworICAgIHZhciBwb3NpdGlvbiA9M0Qgc3ViamVjdFN0cmluZy5sZW5ndGg7CisgICAg
cG9zaXRpb24gLT0zRCBzZWFyY2hTdHJpbmcubGVuZ3RoOworICAgIHZhciBsYXN0SW5kZXggPTNE
IHN1YmplY3RTdHJpbmcuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTsKKyAgICByZXR1
cm4gbGFzdEluZGV4ICE9M0Q9M0QgLTEgJiYgbGFzdEluZGV4ID0zRD0zRD0zRCBwb3NpdGlvbjsK
K307CisKKwordmFyIHVwZGF0ZUZyb21Kc29uID0zRCBmdW5jdGlvbihwYXRoLCBtYXApIHsKKyAg
ICB2YXIgY29udGVudCA9M0QgZnMucmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4Jyk7CisgICAgdmFy
IGtleVRvU2Vzc2lvbiA9M0QgSlNPTi5wYXJzZShjb250ZW50KTsKKyAgICB2YXIgbmV3U2Vzc2lv
bnMgPTNEIHt9OworICAgIGZvcih2YXIga2V5IGluIGtleVRvU2Vzc2lvbikgeworICAgICAgICB2
YXIgaG9zdEFuZFBvcnQgPTNEIGtleS5zcGxpdCgiOiIpOworICAgICAgICAvLyAnaG9zdCc6IGhv
c3RBbmRQb3J0WzBdLAorICAgICAgICBuZXdTZXNzaW9uc1trZXlUb1Nlc3Npb25ba2V5XV0gPTNE
IHsndGFyZ2V0Jzogeydob3N0JzogaG9zdEFuZFBvcnQ9ClswXSwgJ3BvcnQnOiBwYXJzZUludCho
b3N0QW5kUG9ydFsxXSl9fTsKKyAgICB9CisgICAgZm9yKHZhciBvbGRTZXNzaW9uIGluIG1hcCkg
eworICAgICAgICBpZighKG9sZFNlc3Npb24gaW4gbmV3U2Vzc2lvbnMpKSB7CisgICAgICAgICAg
ICBkZWxldGUgbWFwWyBvbGRTZXNzaW9uIF07CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yKHZh
ciBuZXdTZXNzaW9uIGluIG5ld1Nlc3Npb25zKSB7CisgICAgICAgIG1hcFtuZXdTZXNzaW9uXSA9
M0QgbmV3U2Vzc2lvbnNbbmV3U2Vzc2lvbl07CisgICAgfQorfQorCit2YXIgdXBkYXRlRnJvbVNx
bGl0ZSA9M0QgZnVuY3Rpb24ocGF0aCwgbWFwKSB7CisgICAgdmFyIG5ld1Nlc3Npb25zID0zRCB7
fTsKKyAgICB2YXIgbG9hZFNlc3Npb25zID0zRCBmdW5jdGlvbigpIHsKKyAgICAgICAgZGIuZWFj
aCgiU0VMRUNUIGtleSwgc2VjcmV0IEZST00gZ3hwcm94eSIsIGZ1bmN0aW9uKGVyciwgcm93KSB7
CisgICAgICAgICAgICB2YXIga2V5ID0zRCByb3dbJ2tleSddOworICAgICAgICAgICAgdmFyIHNl
Y3JldCA9M0Qgcm93WydzZWNyZXQnXTsKKyAgICAgICAgICAgIHZhciBob3N0QW5kUG9ydCA9M0Qg
a2V5LnNwbGl0KCI6Iik7CisgICAgICAgICAgICB2YXIgdGFyZ2V0ID0zRCB7J2hvc3QnOiBob3N0
QW5kUG9ydFswXSwgJ3BvcnQnOiBwYXJzZUludChob3N0QT0KbmRQb3J0WzFdKX07CisgICAgICAg
ICAgICBuZXdTZXNzaW9uc1tzZWNyZXRdID0zRCB7J3RhcmdldCc6IHRhcmdldH07CisgICAgICAg
IH0sIGZpbmlzaCk7CisgICAgfTsKKworICAgIHZhciBmaW5pc2ggPTNEIGZ1bmN0aW9uKCkgewor
ICAgICAgICBmb3IodmFyIG9sZFNlc3Npb24gaW4gbWFwKSB7CisgICAgICAgICAgICBpZighKG9s
ZFNlc3Npb24gaW4gbmV3U2Vzc2lvbnMpKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1hcFsg
b2xkU2Vzc2lvbiBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvcih2YXIg
bmV3U2Vzc2lvbiBpbiBuZXdTZXNzaW9ucykgeworICAgICAgICAgICAgbWFwW25ld1Nlc3Npb25d
ID0zRCBuZXdTZXNzaW9uc1tuZXdTZXNzaW9uXTsKKyAgICAgICAgfQorICAgICAgICBkYi5jbG9z
ZSgpOworICAgIH07CisKKyAgICB2YXIgZGIgPTNEIG5ldyBzcWxpdGUzLkRhdGFiYXNlKHBhdGgs
IGxvYWRTZXNzaW9ucyk7Cit9OworCisKK3ZhciBtYXBGb3IgPTNEIGZ1bmN0aW9uKHBhdGgpIHsK
KyAgICB2YXIgbWFwID0zRCB7fTsKKyAgICB2YXIgbG9hZE1hcDsKKyAgICBpZihlbmRzV2l0aChw
YXRoLCAnLnNxbGl0ZScpKSB7CisgICAgICAgIGxvYWRNYXAgPTNEIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdXBkYXRlRnJvbVNxbGl0ZShwYXRoLCBtYXApOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbG9hZE1hcCA9M0QgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB1cGRh
dGVGcm9tSnNvbihwYXRoLCBtYXApOworICAgICAgICB9CisgICAgfQorICAgIGNvbnNvbGUubG9n
KCJXYXRjaGluZyBwYXRoICIgKyBwYXRoKTsKKyAgICBsb2FkTWFwKCk7CisgICAgZnMud2F0Y2go
cGF0aCwgbG9hZE1hcCk7CisgICAgcmV0dXJuIG1hcDsKK307CisKK2V4cG9ydHMubWFwRm9yID0z
RCBtYXBGb3I7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciAzNWMxMzkyYjA0
OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmVi
PQo2MmQ2NDE1MmNjNWFkMmIwNCBsaWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvcHJveHkuanMK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvZ2FsYXh5L3dlYi9wcm94eS9qcy9saWIvcHJveHkuanMK
QEAgLTAsMCArMSwxMTkgQEAKK3ZhciBodHRwID0zRCByZXF1aXJlKCdodHRwJyksCisgICAgaHR0
cFByb3h5ID0zRCByZXF1aXJlKCdodHRwLXByb3h5Jyk7CisKK3ZhciBib3VuZCA9M0QgZnVuY3Rp
b24gKHRoYXQsIG1ldGhvZCkgeworICAgIC8vIGJpbmQgYSBtZXRob2QsIHRvIGVuc3VyZSBgdGhp
cz0zRHRoYXRgIHdoZW4gaXQgaXMgY2FsbGVkCisgICAgLy8gYmVjYXVzZSBwcm90b3R5cGUgbGFu
Z3VhZ2VzIGFyZSBiYWQKKyAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICBtZXRob2Qu
YXBwbHkodGhhdCwgYXJndW1lbnRzKTsKKyAgICB9OworfTsKKwordmFyIER5bmFtaWNQcm94eSA9
M0QgZnVuY3Rpb24ob3B0aW9ucykgeworCXZhciBkeW5hbWljUHJveHkgPTNEIHRoaXM7CisJdGhp
cy5zZXNzaW9uQ29va2llID0zRCBvcHRpb25zLnNlc3Npb25Db29raWU7CisJdGhpcy5zZXNzaW9u
TWFwID0zRCBvcHRpb25zLnNlc3Npb25NYXA7CisgICAgdGhpcy5kZWJ1ZyA9M0Qgb3B0aW9ucy52
ZXJib3NlOworCisgICAgdmFyIGxvZ19lcnJvcnMgPTNEIGZ1bmN0aW9uKGhhbmRsZXIpIHsKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZXEsIHJlcykgeworICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlci5hcHBseShkeW5hbWljUHJveHksIGFyZ3VtZW50
cyk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coIkVycm9yIGluIGhhbmRsZXIgZm9yICIgKyByZXEubWV0aG9kICsgJyAnICsgcj0KZXEudXJs
ICsgJzogJywgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHZh
ciBwcm94eSA9M0QgdGhpcy5wcm94eSA9M0QgaHR0cFByb3h5LmNyZWF0ZVByb3h5U2VydmVyKHsK
KyAgICAgICAgd3MgOiB0cnVlLAorICAgIH0pOworCisgICAgdGhpcy5wcm94eV9zZXJ2ZXIgPTNE
IGh0dHAuY3JlYXRlU2VydmVyKAorICAgIAlsb2dfZXJyb3JzKGR5bmFtaWNQcm94eS5oYW5kbGVQ
cm94eVJlcXVlc3QpCisgICAgKTsKKwl0aGlzLnByb3h5X3NlcnZlci5vbigndXBncmFkZScsIGJv
dW5kKHRoaXMsIHRoaXMuaGFuZGxlV3MpKTsKK307CisKK0R5bmFtaWNQcm94eS5wcm90b3R5cGUu
cmV3cml0ZVJlcXVlc3QgPTNEIGZ1bmN0aW9uKHJlcXVlc3QpIHsKK30KKworRHluYW1pY1Byb3h5
LnByb3RvdHlwZS50YXJnZXRGb3JSZXF1ZXN0ID0zRCBmdW5jdGlvbihyZXF1ZXN0KSB7CisgICAg
Ly8gcmV0dXJuIHByb3h5IHRhcmdldCBmb3IgYSBnaXZlbiB1cmwKKyAgICB2YXIgc2Vzc2lvbiA9
M0QgdGhpcy5maW5kU2Vzc2lvbihyZXF1ZXN0KTsKKyAgICBmb3IgKHZhciBtYXBwZWRTZXNzaW9u
IGluIHRoaXMuc2Vzc2lvbk1hcCkgeworICAgIAlpZihzZXNzaW9uID0zRD0zRCBtYXBwZWRTZXNz
aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uTWFwW3Nlc3Npb25dLnRhcmdl
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxsOworfTsKKworRHluYW1pY1By
b3h5LnByb3RvdHlwZS5maW5kU2Vzc2lvbiA9M0QgZnVuY3Rpb24ocmVxdWVzdCkgeworICAgIHZh
ciBzZXNzaW9uQ29va2llID0zRCB0aGlzLnNlc3Npb25Db29raWU7CisgICAgICAgIHJjID0zRCBy
ZXF1ZXN0LmhlYWRlcnMuY29va2llOworICAgIGlmKCFyYykgeworICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgdmFyIGNvb2tpZXMgPTNEIHJjLnNwbGl0KCc7Jyk7CisgICAgZm9yKHZh
ciBjb29raWVJbmRleCBpbiBjb29raWVzKSB7CisgICAgCXZhciBjb29raWUgPTNEIGNvb2tpZXNb
Y29va2llSW5kZXhdOworICAgICAgICB2YXIgcGFydHMgPTNEIGNvb2tpZS5zcGxpdCgnPTNEJyk7
CisJCXZhciBwYXJ0TmFtZSA9M0QgcGFydHMuc2hpZnQoKS50cmltKCk7CisgICAgICAgIGlmKHBh
cnROYW1lID0zRD0zRCBzZXNzaW9uQ29va2llKSB7CisgICAgICAgIAlyZXR1cm4gdW5lc2NhcGUo
cGFydHMuam9pbignPTNEJykpCisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbDsK
K307CisKK0R5bmFtaWNQcm94eS5wcm90b3R5cGUuaGFuZGxlUHJveHlSZXF1ZXN0ID0zRCBmdW5j
dGlvbihyZXEsIHJlcykgeworICAgIHZhciB0YXJnZXQgPTNEIHRoaXMudGFyZ2V0Rm9yUmVxdWVz
dChyZXEpOworICAgIGlmKHRoaXMuZGVidWcpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlBST1hZ
ICIgKyByZXEubWV0aG9kICsgIiAiICsgcmVxLnVybCArICIgdG8gIiArIHRhcmdlPQp0KTsKKyAg
ICB9CisgICAgdmFyIG9yaWdpbiA9M0QgcmVxLmhlYWRlcnMub3JpZ2luOworICAgIHRoaXMucmV3
cml0ZVJlcXVlc3QocmVxKTsKKyAgICByZXMub2xkV3JpdGVIZWFkID0zRCByZXMud3JpdGVIZWFk
OworICAgIHJlcy53cml0ZUhlYWQgPTNEIGZ1bmN0aW9uKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHsK
KyAgICAgICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgb3Jp
Z2luKTsKKyAgICAgICAgcmVzLnNldEhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVu
dGlhbHMnLCAndHJ1ZScpOworICAgICAgICByZXMub2xkV3JpdGVIZWFkKHN0YXR1c0NvZGUsIGhl
YWRlcnMpOworICAgIH0KKyAgICB0aGlzLnByb3h5LndlYihyZXEsIHJlcywgeworICAgICAgICB0
YXJnZXQ6IHRhcmdldAorICAgIH0sIGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGNvbnNvbGUubG9n
KCJQcm94eSBlcnJvcjogIiwgZSk7CisgICAgICAgIHJlcy53cml0ZUhlYWQoNTAyKTsKKyAgICAg
ICAgcmVzLndyaXRlKCJQcm94eSB0YXJnZXQgbWlzc2luZyIpOworICAgICAgICByZXMuZW5kKCk7
CisgICAgfSk7Cit9OworCitEeW5hbWljUHJveHkucHJvdG90eXBlLmhhbmRsZVdzID0zRCBmdW5j
dGlvbihyZXEsIHJlcywgaGVhZCkgeworICAgIC8vIG5vIGxvY2FsIHJvdXRlIGZvdW5kLCB0aW1l
IHRvIHByb3h5CisgICAgdmFyIHRhcmdldCA9M0QgdGhpcy50YXJnZXRGb3JSZXF1ZXN0KHJlcSk7
CisgICAgaWYodGhpcy5kZWJ1ZykgeworICAgICAgICBjb25zb2xlLmxvZygiUFJPWFkgV1MgIiAr
IHJlcS51cmwgKyAiIHRvICIgKyByZXEudXJsKTsKKyAgICB9CisgICAgdmFyIG9yaWdpbiA9M0Qg
cmVxLmhlYWRlcnMub3JpZ2luOworICAgIHRoaXMucmV3cml0ZVJlcXVlc3QocmVxKTsKKyAgICBy
ZXMub2xkV3JpdGVIZWFkID0zRCByZXMud3JpdGVIZWFkOworICAgIHJlcy53cml0ZUhlYWQgPTNE
IGZ1bmN0aW9uKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHsKKyAgICAgICAgcmVzLnNldEhlYWRlcign
QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgb3JpZ2luKTsKKyAgICAgICAgcmVzLnNldEhl
YWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLCAndHJ1ZScpOworICAgICAg
ICByZXMub2xkV3JpdGVIZWFkKHN0YXR1c0NvZGUsIGhlYWRlcnMpOworICAgIH0KKyAgICB0aGlz
LnByb3h5LndzKHJlcSwgcmVzLCBoZWFkLCB7CisgICAgICAgIHRhcmdldDogdGFyZ2V0CisgICAg
fSwgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgY29uc29sZS5sb2coIlByb3h5IGVycm9yOiAiLCBl
KTsKKyAgICAgICAgcmVzLndyaXRlSGVhZCg1MDIpOworICAgICAgICByZXMud3JpdGUoIlByb3h5
IHRhcmdldCBtaXNzaW5nIik7CisgICAgICAgIHJlcy5lbmQoKTsKKyAgICB9KTsKK307CisKK2V4
cG9ydHMuRHluYW1pY1Byb3h5ID0zRCBEeW5hbWljUHJveHk7CgpkaWZmIC1yIDM1YzEzOTJiMDQ5
Y2JmNDE4NDRiZTFmY2YyZDA1NWY4MzE0ZTE2YWUgLXIgNzBmN2ZmOGM2YTk2ZWRlNmU0MzliZWI9
CjYyZDY0MTUyY2M1YWQyYjA0IGxpYi9nYWxheHkvd2ViL3Byb3h5L2pzL3BhY2thZ2UuanNvbgot
LS0gL2Rldi9udWxsCisrKyBiL2xpYi9nYWxheHkvd2ViL3Byb3h5L2pzL3BhY2thZ2UuanNvbgpA
QCAtMCwwICsxLDE4IEBACit7CisgICJuYW1lIjogImdhbGF4eS1wcm94eSIsCisgICJ2ZXJzaW9u
IjogIjAuMC4xIiwKKyAgImRlc2NyaXB0aW9uIjogIkEgZHluYW1pYyByZXZlcnNlIHByb3h5IGZv
ciB1c2Ugd2l0aGluIEdhbGF4eSIsCisgICJtYWluIjogImluZGV4LmpzIiwKKyAgImF1dGhvciI6
ICJKb2huIENoaWx0b24iLAorICAibGljZW5zZSI6ICJBRkwgdjMiLAorICAicmVhZG1lRmlsZW5h
bWUiOiAiUkVBRE1FLm1kIiwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAibWVyY3Vy
aWFsIiwKKyAgICAidXJsIjogImh0dHBzOi8vYml0YnVja2V0Lm9yZy9nYWxheHkvZ2FsYXh5LWNl
bnRyYWwiCisgIH0sCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImh0dHAtcHJveHkiOiAifjEu
MSIsCisgICAgImNvbW1hbmRlciI6ICJ+Mi4yIiwKKyAgICAic3FsaXRlMyI6ICIzLjAuMiIKKyAg
fQorfQoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1y
IDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBzdGF0aWMvc2NyaXB0
cy9nYWxheHkuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmpzCi0tLSAvZGV2L251bGwKKysrIGIv
c3RhdGljL3NjcmlwdHMvZ2FsYXh5LmludGVyYWN0aXZlX2Vudmlyb25tZW50cy5qcwpAQCAtMCww
ICsxLDU5IEBACisvKioKKyAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHJlbW92ZSBjb250ZW50IGZy
b20gdGhlIG1haW4gYXJlYSBhbmQgYWRkIHRoZSBub3RlPQpib29rLgorICogTm90IGlkZW1wb3Rl
bnQKKyAqLworZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKHVybCl7CisgICAgY2xlYXJfbWFpbl9h
cmVhKCk7CisgICAgJCgnI21haW4nKS5hcHBlbmQoJzxpZnJhbWUgZnJhbWVCb3JkZXI9M0QiMCIg
c2VhbWxlc3M9M0Qic2VhbWxlc3MiIHN0eT0KbGU9M0Qid2lkdGg6IDEwMCU7IGhlaWdodDogMTAw
JTsgb3ZlcmZsb3c6aGlkZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBzcmM9M0QiPQonKyB1cmwgKyci
PjwvaWZyYW1lPicKKyAgICApOworfQorCitmdW5jdGlvbiBjbGVhcl9tYWluX2FyZWEoKXsKKyAg
ICAkKCcjc3Bpbm5lcicpLnJlbW92ZSgpOworICAgICQoJyNtYWluJykuY2hpbGRyZW4oKS5yZW1v
dmUoKTsKK30KKworZnVuY3Rpb24gZGlzcGxheV9zcGlubmVyKCl7CisgICAgICAgICQoJyNtYWlu
JykuYXBwZW5kKCc8aW1nIGlkPTNEInNwaW5uZXIiIHNyYz0zRCInICsgZ2FsYXh5X3Jvb3QgKyAn
Lz0Kc3RhdGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNEInBvc2l0aW9uOmFic29s
dXRlO21hcmdpbjphdXRvO3RvcDowPQo7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7Ij4nKTsKK30K
KworCisvKioKKyAqIFRlc3QgYXZhaWxhYmlsaXR5IG9mIGEgVVJMLCBhbmQgY2FsbCBhIGNhbGxi
YWNrIHdoZW4gZG9uZS4KKyAqIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzI1MzkwMjA2LzM0
NzM2OAorICogQHBhcmFtIHtTdHJpbmd9IHVybDogVVJMIHRvIHRlc3QgYXZhaWxhYmlsaXR5IG9m
LiBNdXN0IHJldHVybiBhIDIwMCAoMzA9CjItPjIwMCBpcyBPSykuCisgKiBAcGFyYW0ge1N0cmlu
Z30gY2FsbGJhY2s6IGZ1bmN0aW9uIHRvIGNhbGwgb25jZSBzdWNjZXNzZnVsbHkgY29ubmVjdGVk
LgorICoKKyAqLworZnVuY3Rpb24gdGVzdF9pZV9hdmFpbGFiaWxpdHkodXJsLCBzdWNjZXNzX2Nh
bGxiYWNrKXsKKyAgICB2YXIgcmVxdWVzdF9jb3VudCA9M0QgMDsKKyAgICBkaXNwbGF5X3NwaW5u
ZXIoKTsKKyAgICBpbnRlcnZhbCA9M0Qgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKKyAgICAgICAg
JC5hamF4KHsKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgeGhyRmllbGRzOiB7
CisgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICB0aW1lb3V0OiA1MDAsCisgICAg
ICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJDb25uZWN0ZWQgdG8gSUUsIHJldHVybmluZyIpOworICAgICAgICAgICAgICAgIGNsZWFySW50
ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3NfY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oanF4aHIsIHN0YXR1cywg
ZXJyb3IpeworICAgICAgICAgICAgICAgIHJlcXVlc3RfY291bnQrKzsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygiUmVxdWVzdCAiICsgcmVxdWVzdF9jb3VudCk7CisgICAgICAgICAgICAg
ICAgaWYocmVxdWVzdF9jb3VudCA+IDMwKXsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRl
cnZhbChpbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGNsZWFyX21haW5fYXJlYSgpOwor
ICAgICAgICAgICAgICAgICAgICB0b2FzdHIuZXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAg
ICAiQ291bGQgbm90IGNvbm5lY3QgdG8gSUUsIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdD0Kb3Ii
LAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsnY2xvc2VCdXR0b24nOiB0cnVlLCAndGltZU91dCc6IDIwMDAwLCAndGFwVG9EaXNtPQpp
c3MnOiBmYWxzZX0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0sIDEwMDApOworfQoKZGlmZiAtciAzNWMx
MzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQwNTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZl
NDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIwNCBzdGF0aWMvc2NyaXB0cy9wYWNrZWQvZ2FsYXh5Lmlu
dGVyYWN0aXZlX2Vudmlyb25tZW50cy5qcwotLS0gL2Rldi9udWxsCisrKyBiL3N0YXRpYy9zY3Jp
cHRzL3BhY2tlZC9nYWxheHkuaW50ZXJhY3RpdmVfZW52aXJvbm1lbnRzLmpzCkBAIC0wLDAgKzEs
MSBAQAorZnVuY3Rpb24gYXBwZW5kX25vdGVib29rKGEpe2NsZWFyX21haW5fYXJlYSgpOyQoIiNt
YWluIikuYXBwZW5kKCc8aWZyYW1lIGY9CnJhbWVCb3JkZXI9M0QiMCIgc2VhbWxlc3M9M0Qic2Vh
bWxlc3MiIHN0eWxlPTNEIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7ID0Kb3ZlcmZsb3c6aGlk
ZGVuOyIgc2Nyb2xsaW5nPTNEIm5vIiBzcmM9M0QiJythKyciPjwvaWZyYW1lPicpfWZ1bmN0aW9u
IGNsZWFyPQpfbWFpbl9hcmVhKCl7JCgiI3NwaW5uZXIiKS5yZW1vdmUoKTskKCIjbWFpbiIpLmNo
aWxkcmVuKCkucmVtb3ZlKCl9ZnVuY3Rpb249CiBkaXNwbGF5X3NwaW5uZXIoKXskKCIjbWFpbiIp
LmFwcGVuZCgnPGltZyBpZD0zRCJzcGlubmVyIiBzcmM9M0QiJytnYWxheHlfcj0Kb290Kycvc3Rh
dGljL3N0eWxlL2xhcmdlc3Bpbm5lci5naWYiIHN0eWxlPTNEInBvc2l0aW9uOmFic29sdXRlO21h
cmdpbjphdXRvPQo7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7Ij4nKX1mdW5jdGlvbiB0
ZXN0X2llX2F2YWlsYWJpbGl0eShiLGMpe3ZhciA9CmE9M0QwO2Rpc3BsYXlfc3Bpbm5lcigpO2lu
dGVydmFsPTNEc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXskLmFqYXgoe3VybDpiLHhocj0KRmllbGRz
Ont3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0sdHlwZToiR0VUIix0aW1lb3V0OjUwMCxzdWNjZXNzOmZ1
bmN0aW9uKCl7Y29uPQpzb2xlLmxvZygiQ29ubmVjdGVkIHRvIElFLCByZXR1cm5pbmciKTtjbGVh
ckludGVydmFsKGludGVydmFsKTtjKCl9LGVycm9yOmY9CnVuY3Rpb24oZixkLGUpe2ErKztjb25z
b2xlLmxvZygiUmVxdWVzdCAiK2EpO2lmKGE+MzApe2NsZWFySW50ZXJ2YWwoaW50ZXJ2YT0KbCk7
Y2xlYXJfbWFpbl9hcmVhKCk7dG9hc3RyLmVycm9yKCJDb3VsZCBub3QgY29ubmVjdCB0byBJRSwg
Y29udGFjdCB5b3VyIGFkPQptaW5pc3RyYXRvciIsIkVycm9yIix7Y2xvc2VCdXR0b246dHJ1ZSx0
aW1lT3V0OjIwMDAwLHRhcFRvRGlzbWlzczpmYWxzZX0pfX09Cn0pfSwxMDAwKX07ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQoKZGlmZiAtciAzNWMxMzkyYjA0OWNiZjQxODQ0YmUxZmNmMmQw
NTVmODMxNGUxNmFlIC1yIDcwZjdmZjhjNmE5NmVkZTZlNDM5YmViPQo2MmQ2NDE1MmNjNWFkMmIw
NCB0ZXN0L3VuaXQvdGVzdF9sYXp5X3Byb2Nlc3MucHkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0
L3VuaXQvdGVzdF9sYXp5X3Byb2Nlc3MucHkKQEAgLTAsMCArMSwxOSBAQAoraW1wb3J0IG9zCitp
bXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aW1lCisKK2Zyb20gZ2FsYXh5LnV0aWwubGF6eV9wcm9j
ZXNzIGltcG9ydCBMYXp5UHJvY2VzcworCisKK2RlZiB0ZXN0X2xhenlfcHJvY2VzcygpOgorICAg
IHQgPTNEIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCisgICAgb3MucmVtb3ZlKHQubmFt
ZSkKKyAgICBsYXp5X3Byb2Nlc3MgPTNEIExhenlQcm9jZXNzKFsiYmFzaCIsICItYyIsICJ0b3Vj
aCAlczsgc2xlZXAgMTAwIiAlIHQuPQpuYW1lXSkKKyAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhp
c3RzKHQubmFtZSkKKyAgICBsYXp5X3Byb2Nlc3Muc3RhcnRfcHJvY2VzcygpCisgICAgdGltZS5z
bGVlcCguMDIpCisgICAgYXNzZXJ0IGxhenlfcHJvY2Vzcy5wcm9jZXNzLnBvbGwoKSBpcyBOb25l
CisgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHQubmFtZSkKKyAgICBsYXp5X3Byb2Nlc3Muc2h1
dGRvd24oKQorICAgIHRpbWUuc2xlZXAoLjAyKQorICAgIGFzc2VydCBsYXp5X3Byb2Nlc3MucHJv
Y2Vzcy5wb2xsKCkKCmRpZmYgLXIgMzVjMTM5MmIwNDljYmY0MTg0NGJlMWZjZjJkMDU1ZjgzMTRl
MTZhZSAtciA3MGY3ZmY4YzZhOTZlZGU2ZTQzOWJlYj0KNjJkNjQxNTJjYzVhZDJiMDQgdGVzdC91
bml0L3Rlc3Rfc29ja2V0cy5weQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvdW5pdC90ZXN0X3Nv
Y2tldHMucHkKQEAgLTAsMCArMSwxMiBAQAoraW1wb3J0IHNvY2tldAorZnJvbSBnYWxheHkudXRp
bCBpbXBvcnQgc29ja2V0cworCisKK2RlZiB0ZXN0X3VudXNlZF9mcmVlX3BvcnRfdW5jb25zdHJh
aW5lZCgpOgorICAgIHBvcnQgPTNEIHNvY2tldHMudW51c2VkX3BvcnQoKQorCisgICAgcyA9M0Qg
c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICMg
d291bGQgdGhyb3cgZXhjZXB0aW9uIGlmIHBvcnQgd2FzIG5vdCBmcmVlLgorICAgIHMuYmluZCgo
J2xvY2FsaG9zdCcsIHBvcnQpKQorICAgIHMuY2xvc2UoKQorCgpSZXBvc2l0b3J5IFVSTDogaHR0
cHM6Ly9iaXRidWNrZXQub3JnL2dhbGF4eS9nYWxheHktY2VudHJhbC8KCi0tCgpUaGlzIGlzIGEg
Y29tbWl0IG5vdGlmaWNhdGlvbiBmcm9tIGJpdGJ1Y2tldC5vcmcuIFlvdSBhcmUgcmVjZWl2aW5n
CnRoaXMgYmVjYXVzZSB5b3UgaGF2ZSB0aGUgc2VydmljZSBlbmFibGVkLCBhZGRyZXNzaW5nIHRo
ZSByZWNpcGllbnQgb2YKdGhpcyBlbWFpbC4K
1
0
commit/galaxy-central: jmchilton: Merged in jmchilton/galaxy-central-ie (pull request #533)
by commits-noreply@bitbucket.org 20 Oct '14
by commits-noreply@bitbucket.org 20 Oct '14
20 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/70f7ff8c6a96/
Changeset: 70f7ff8c6a96
User: jmchilton
Date: 2014-10-20 21:22:27+00:00
Summary: Merged in jmchilton/galaxy-central-ie (pull request #533)
Interactive Environments Plugin Framework with IPython Plugin
Affected #: 35 files
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 client/galaxy/scripts/galaxy.interactive_environments.js
--- /dev/null
+++ b/client/galaxy/scripts/galaxy.interactive_environments.js
@@ -0,0 +1,59 @@
+/**
+ * Internal function to remove content from the main area and add the notebook.
+ * Not idempotent
+ */
+function append_notebook(url){
+ clear_main_area();
+ $('#main').append('<iframe frameBorder="0" seamless="seamless" style="width: 100%; height: 100%; overflow:hidden;" scrolling="no" src="'+ url +'"></iframe>'
+ );
+}
+
+function clear_main_area(){
+ $('#spinner').remove();
+ $('#main').children().remove();
+}
+
+function display_spinner(){
+ $('#main').append('<img id="spinner" src="' + galaxy_root + '/static/style/largespinner.gif" style="position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;">');
+}
+
+
+/**
+ * Test availability of a URL, and call a callback when done.
+ * http://stackoverflow.com/q/25390206/347368
+ * @param {String} url: URL to test availability of. Must return a 200 (302->200 is OK).
+ * @param {String} callback: function to call once successfully connected.
+ *
+ */
+function test_ie_availability(url, success_callback){
+ var request_count = 0;
+ display_spinner();
+ interval = setInterval(function(){
+ $.ajax({
+ url: url,
+ xhrFields: {
+ withCredentials: true
+ },
+ type: "GET",
+ timeout: 500,
+ success: function(){
+ console.log("Connected to IE, returning");
+ clearInterval(interval);
+ success_callback();
+ },
+ error: function(jqxhr, status, error){
+ request_count++;
+ console.log("Request " + request_count);
+ if(request_count > 30){
+ clearInterval(interval);
+ clear_main_area();
+ toastr.error(
+ "Could not connect to IE, contact your administrator",
+ "Error",
+ {'closeButton': true, 'timeOut': 20000, 'tapToDismiss': false}
+ );
+ }
+ }
+ });
+ }, 1000);
+}
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/datatypes_conf.xml.sample
--- a/config/datatypes_conf.xml.sample
+++ b/config/datatypes_conf.xml.sample
@@ -249,6 +249,8 @@
<datatype extension="snpmatrix" type="galaxy.datatypes.genetics:SNPMatrix" display_in_upload="true"/><datatype extension="xls" type="galaxy.datatypes.tabular:Tabular"/><!-- End RGenetics Datatypes -->
+ <datatype extension="ipynb" type="galaxy.datatypes.text:Ipynb" display_in_upload="True" />
+ <datatype extension="json" type="galaxy.datatypes.text:Json" display_in_upload="True" /><!-- graph datatypes --><datatype extension="xgmml" type="galaxy.datatypes.graph:Xgmml" display_in_upload="true"/><datatype extension="sif" type="galaxy.datatypes.graph:Sif" display_in_upload="true"/>
@@ -292,6 +294,8 @@
<sniffer type="galaxy.datatypes.tabular:Sam"/><sniffer type="galaxy.datatypes.data:Newick"/><sniffer type="galaxy.datatypes.data:Nexus"/>
+ <sniffer type="galaxy.datatypes.text:Ipynb"/>
+ <sniffer type="galaxy.datatypes.text:Json"/><sniffer type="galaxy.datatypes.images:Jpg"/><sniffer type="galaxy.datatypes.images:Png"/><sniffer type="galaxy.datatypes.images:Tiff"/>
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/galaxy.ini.sample
--- a/config/galaxy.ini.sample
+++ b/config/galaxy.ini.sample
@@ -221,9 +221,15 @@
# Visualizations config directory: where to look for individual visualization plugins.
# The path is relative to the Galaxy root dir. To use an absolute path begin the path
-# with '/'. Defaults to "config/plugins/visualizations".
+# with '/'. This is a comma separated list. Defaults to "config/plugins/visualizations".
#visualization_plugins_directory = config/plugins/visualizations
+# Interactive environment plugins root directory: where to look for interactive environment
+# plugins. By default none will be loaded. Set to config/plugins/interactive_environments
+# to load Galaxy's stock plugins (currently just IPython). These will require Docker
+# to be configured and have security considerations so proceed with caution.
+#interactive_environment_plugins_directory =
+
# Each job is given a unique empty directory as its current working directory.
# This option defines in what parent directory those directories will be
# created.
@@ -421,6 +427,11 @@
# - $iso8601 (complete format string as specified by ISO 8601 international standard).
# pretty_datetime_format = $locale (UTC)
+# URL (with schema http/https) of the Galaxy instance as accessible within your local
+# network - if specified used as a default by pulsar file staging and IPython docker
+# container for communicating back with Galaxy via the API.
+#galaxy_infrastructure_url = http://localhost:8080
+
# The URL of the page to display in Galaxy's middle pane when loaded. This can be
# an absolute or relative URL.
#welcome_url = /static/welcome.html
@@ -517,6 +528,26 @@
# requests.
#nginx_upload_path = False
+# Have Galaxy manage dynamic proxy component for routing requests to other
+# services based on Galaxy's session cookie. It will attempt to do this by
+# default though you do need to install node+npm and do an npm install from
+# `lib/galaxy/web/proxy/js`. It is generally more robust to configure this
+# externally managing it however Galaxy is managed. If True Galaxy will only
+# launch the proxy if it is actually going to be used (e.g. for IPython).
+#dynamic_proxy_manage=True
+
+# Dynamic proxy can use an SQLite database or a JSON file for IPC, set that
+# here.
+#dynamic_proxy_session_map=database/session_map.sqlite
+
+# Set the port and IP for the the dynamic proxy to bind to, this must match
+# the external configuration if dynamic_proxy_manage is False.
+#dynamic_proxy_bind_port=8800
+#dynamic_proxy_bind_ip=0.0.0.0
+
+# Enable verbose debugging of Galaxy-managed dynamic proxy.
+#dynamic_proxy_debug=False
+
# -- Logging and Debugging
# Verbosity of console log messages. Acceptable values can be found here:
@@ -549,6 +580,12 @@
# by setting the following option to True.
#serve_xss_vulnerable_mimetypes = False
+# Set the following to True to use ipython nbconvert to build HTML from IPython
+# notebooks in Galaxy histories. This process may allow users to execute arbitrary
+# code or serve arbitrary HTML. If enabled ipython must be available and on Galaxy's
+# PATH, to do this run `pip install jinja2 pygments ipython` in Galaxy's virtualenv.
+#trust_ipython_notebook_conversion = False
+
# Debug enables access to various config options useful for development and
# debugging: use_lint, use_profile, use_printdebug and use_interactive. It
# also causes the files used by PBS/SGE (submission script, output, and error)
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/job_conf.xml.sample_advanced
--- a/config/job_conf.xml.sample_advanced
+++ b/config/job_conf.xml.sample_advanced
@@ -50,7 +50,9 @@
<!-- AMQP URL to connect to. --><param id="amqp_url">amqp://guest:guest@localhost:5672//</param><!-- URL remote Pulsar apps should transfer files to this Galaxy
- instance to/from. -->
+ instance to/from. This can be unspecified/empty if
+ galaxy_infrastructure_url is set in galaxy.ini.
+ --><param id="galaxy_url">http://localhost:8080</param><!-- Pulsar job manager to communicate with (see Pulsar
docs for information on job managers). -->
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/common/templates/ie.mako
--- /dev/null
+++ b/config/plugins/interactive_environments/common/templates/ie.mako
@@ -0,0 +1,31 @@
+<%def name="default_javascript_variables()">
+// Globals
+
+// Following three are for older-style IE proxies, newer dynamic Galaxy proxy
+// does not use these.
+ie_password_auth = ${ ie_request.javascript_boolean(ie_request.attr.PASSWORD_AUTH) };
+ie_apache_urls = ${ ie_request.javascript_boolean(ie_request.attr.APACHE_URLS) };
+ie_password = '${ ie_request.attr.notebook_pw }';
+
+
+var galaxy_root = '${ ie_request.attr.root }';
+var app_root = '${ ie_request.attr.app_root }';
+</%def>
+
+
+<%def name="load_default_js()">
+${h.css( 'base' ) }
+${h.js( 'libs/jquery/jquery',
+ 'libs/toastr',
+ 'libs/require')}
+</%def>
+
+<%def name="plugin_require_config()">
+require.config({
+ baseUrl: app_root,
+ paths: {
+ "plugin" : app_root + "js/",
+ "interactive_environments": "${h.url_for('/static/scripts/galaxy.interactive_environments')}",
+ },
+});
+</%def>
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/interactive_environments.dtd
--- /dev/null
+++ b/config/plugins/interactive_environments/interactive_environments.dtd
@@ -0,0 +1,1 @@
+../visualizations/visualization.dtd
\ No newline at end of file
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/ipython/config/ipython.ini.sample
--- /dev/null
+++ b/config/plugins/interactive_environments/ipython/config/ipython.ini.sample
@@ -0,0 +1,16 @@
+[main]
+
+# Following options are ignored if using the Galaxy dynamic proxy but
+# are useful if mapping a range of ports for environment consumption.
+#apache_urls = False
+#password_auth = False
+#ssl = False
+
+[docker]
+command = docker
+image = bgruening/docker-ipython-notebook
+
+# URL to access the Galaxy API with from the spawn Docker containter, if empty
+# this falls back to galaxy.ini's galaxy_infrastructure_url and finally to the
+# Docker host of the spawned container if that is also not set.
+#galaxy_url =
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/ipython/config/ipython.xml
--- /dev/null
+++ b/config/plugins/interactive_environments/ipython/config/ipython.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE interactive_environment SYSTEM "../../interactive_environments.dtd">
+<interactive_environment name="IPython">
+ <data_sources>
+ <data_source>
+ <model_class>HistoryDatasetAssociation</model_class>
+ <test type="isinstance" test_attr="datatype" result_type="datatype">tabular.Tabular</test>
+ <test type="isinstance" test_attr="datatype" result_type="datatype">data.Text</test>
+ <to_param param_attr="id">dataset_id</to_param>
+ </data_source>
+ </data_sources>
+ <params>
+ <param type="dataset" var_name_in_template="hda" required="true">dataset_id</param>
+ </params>
+ <template>ipython.mako</template>
+</interactive_environment>
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/ipython/static/js/ipython.js
--- /dev/null
+++ b/config/plugins/interactive_environments/ipython/static/js/ipython.js
@@ -0,0 +1,85 @@
+function message_failed_auth(password){
+ toastr.info(
+ "Automatic authorization failed. You can manually login with:<br>" + password + "<br><a href='https://github.com/bgruening/galaxy-ipython/wiki/Automatic-Authorization-Fa…' target='_blank'>More details ...</a>",
+ "Please login manually",
+ {'closeButton': true, 'timeOut': 100000, 'tapToDismiss': false}
+ );
+}
+
+function message_failed_connection(){
+ toastr.error(
+ "Could not connect to IPython Notebook. Please contact your administrator. <a href='https://github.com/bgruening/galaxy-ipython/wiki/Could-not-connect-to-IPyth…' target='_blank'>More details ...</a>",
+ "Security warning",
+ {'closeButton': true, 'timeOut': 20000, 'tapToDismiss': true}
+ );
+}
+
+function message_no_auth(){
+ // No longer a security issue, proxy validates Galaxy session token.
+ /*
+ toastr.warning(
+ "IPython Notebook was lunched without authentication. This is a security issue. <a href='https://github.com/bgruening/galaxy-ipython/wiki/IPython-Notebook-was-lunch…' target='_blank'>More details ...</a>",
+ "Security warning",
+ {'closeButton': true, 'timeOut': 20000, 'tapToDismiss': false}
+ );
+ */
+}
+
+
+/**
+ * Load an interactive environment (IE) from a remote URL
+ * @param {String} password: password used to authenticate to the remote resource
+ * @param {String} notebook_login_url: URL that should be POSTed to for login
+ * @param {String} notebook_access_url: the URL embeded in the page and loaded
+ *
+ */
+function load_notebook(password, notebook_login_url, notebook_access_url){
+ $( document ).ready(function() {
+ // Test notebook_login_url for accessibility, executing the login+load function whenever
+ // we've successfully connected to the IE.
+ test_ie_availability(notebook_login_url, function(){
+ _handle_notebook_loading(password, notebook_login_url, notebook_access_url);
+ });
+ });
+}
+
+/**
+ * Must be implemented by IEs
+ */
+function _handle_notebook_loading(password, notebook_login_url, notebook_access_url){
+ if ( ie_password_auth ) {
+ // Make an AJAX POST
+ $.ajax({
+ type: "POST",
+ // to the Login URL
+ url: notebook_login_url,
+ // With our password
+ data: {
+ 'password': password
+ },
+ xhrFields: {
+ withCredentials: true
+ },
+ // If that is successful, load the notebook
+ success: function(){
+ append_notebook(notebook_access_url);
+ },
+ error: function(jqxhr, status, error){
+ if(ie_password_auth && !ie_apache_urls){
+ // Failure happens due to CORS
+ message_failed_auth(password);
+ append_notebook(notebook_access_url);
+ }else{
+ message_failed_connection();
+ // Do we want to try and load the notebook anyway? Just in case?
+ append_notebook(notebook_access_url);
+ }
+ }
+ });
+ }
+ else {
+ // Not using password auth, just embed it to avoid content-origin issues.
+ message_no_auth();
+ append_notebook(notebook_access_url);
+ }
+}
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/ipython/templates/ipython.mako
--- /dev/null
+++ b/config/plugins/interactive_environments/ipython/templates/ipython.mako
@@ -0,0 +1,61 @@
+ <%namespace name="ie" file="ie.mako" />
+
+<%
+import os
+import shutil
+import tempfile
+import subprocess
+
+# Sets ID and sets up a lot of other variables
+ie_request.load_deploy_config()
+ie_request.attr.docker_port = 6789
+# Create tempdir in galaxy
+temp_dir = os.path.abspath( tempfile.mkdtemp() )
+# Write out conf file...needs work
+ie_request.write_conf_file(temp_dir)
+
+## IPython Specific
+# Prepare an empty notebook
+notebook_id = ie_request.generate_hex(64)
+with open( os.path.join( ie_request.attr.our_template_dir, 'notebook.ipynb' ), 'r') as nb_handle:
+ empty_nb = nb_handle.read()
+empty_nb = empty_nb % notebook_id
+# Copy over default notebook, unless the dataset this viz is running on is a notebook
+empty_nb_path = os.path.join(temp_dir, 'ipython_galaxy_notebook.ipynb')
+if hda.datatype.__class__.__name__ != "Ipynb":
+ with open( empty_nb_path, 'w+' ) as handle:
+ handle.write( empty_nb )
+else:
+ shutil.copy( hda.file_name, empty_nb_path )
+
+
+## General IE specific
+# Access URLs for the notebook from within galaxy.
+notebook_access_url = ie_request.url_template('${PROXY_URL}/ipython/${PORT}/notebooks/ipython_galaxy_notebook.ipynb')
+notebook_login_url = ie_request.url_template('${PROXY_URL}/ipython/${PORT}/login?next=%2Fipython%2F${PORT}%2Ftree')
+
+docker_cmd = ie_request.docker_cmd(temp_dir)
+subprocess.call(docker_cmd, shell=True)
+%>
+<html>
+<head>
+${ ie.load_default_js() }
+</head>
+<body>
+
+<script type="text/javascript">
+${ ie.default_javascript_variables() }
+var notebook_login_url = '${ notebook_login_url }';
+var notebook_access_url = '${ notebook_access_url }';
+${ ie.plugin_require_config() }
+
+// Load notebook
+
+requirejs(['interactive_environments', 'plugin/ipython'], function(){
+ load_notebook(ie_password, notebook_login_url, notebook_access_url);
+});
+</script>
+<div id="main" width="100%" height="100%">
+</div>
+</body>
+</html>
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/interactive_environments/ipython/templates/notebook.ipynb
--- /dev/null
+++ b/config/plugins/interactive_environments/ipython/templates/notebook.ipynb
@@ -0,0 +1,43 @@
+{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:%s"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Welcome to the interactive Galaxy IPython Notebook."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You can access your data via the dataset number. For example, ``handle = get(42)``.",
+ "To save data, write your data to a file, and then call ``put('filename.txt')``. The dataset will then be available in your galaxy history.",
+ "Notebooks can be saved to Galaxy by clicking the large green button at the top right of the IPython interface.<br>",
+ "More help and informations can be found on the project [website](https://github.com/bgruening/galaxy-ipython)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 1
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/visualizations/additional_template_paths.xml
--- a/config/plugins/visualizations/additional_template_paths.xml
+++ b/config/plugins/visualizations/additional_template_paths.xml
@@ -2,4 +2,5 @@
<!-- these relative paths can contain common templates importable by all visualization plugins --><paths><path>common/templates</path>
+ <path>../interactive_environments/common/templates</path></paths>
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 config/plugins/visualizations/visualization.dtd
--- a/config/plugins/visualizations/visualization.dtd
+++ b/config/plugins/visualizations/visualization.dtd
@@ -1,5 +1,6 @@
<!-- each visualization must have a template (all other elements are optional) --><!ELEMENT visualization (description*,data_sources*,params*,template_root*,template,render_target*)>
+<!ELEMENT interactive_environment (description*,data_sources*,params*,template_root*,template,render_target*)><!-- visualization
name: the title/display name of the visualization (e.g. 'Trackster', 'Fastq Stats', etc.) REQUIRED
disabled: if included (value does not matter), this attribute will prevent the visualization being loaded
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/app.py
--- a/lib/galaxy/app.py
+++ b/lib/galaxy/app.py
@@ -17,6 +17,7 @@
from galaxy.tools.data_manager.manager import DataManagers
from galaxy.jobs import metrics as job_metrics
from galaxy.web.base import pluginframework
+from galaxy.web.proxy import ProxyManager
from galaxy.queue_worker import GalaxyQueueWorker
from tool_shed.galaxy_install import update_repository_manager
@@ -138,6 +139,7 @@
# FIXME: These are exposed directly for backward compatibility
self.job_queue = self.job_manager.job_queue
self.job_stop_queue = self.job_manager.job_stop_queue
+ self.proxy_manager = ProxyManager( self.config )
# Initialize the external service types
self.external_service_types = external_service_types.ExternalServiceTypesCollection( self.config.external_service_type_config_file, self.config.external_service_type_path, self )
self.model.engine.dispose()
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/config.py
--- a/lib/galaxy/config.py
+++ b/lib/galaxy/config.py
@@ -18,6 +18,8 @@
from galaxy.util.dbkeys import GenomeBuilds
from galaxy import eggs
+import ConfigParser
+
log = logging.getLogger( __name__ )
@@ -208,6 +210,7 @@
self.log_events = string_as_bool( kwargs.get( 'log_events', 'False' ) )
self.sanitize_all_html = string_as_bool( kwargs.get( 'sanitize_all_html', True ) )
self.serve_xss_vulnerable_mimetypes = string_as_bool( kwargs.get( 'serve_xss_vulnerable_mimetypes', False ) )
+ self.trust_ipython_notebook_conversion = string_as_bool( kwargs.get( 'trust_ipython_notebook_conversion', False ) )
self.enable_old_display_applications = string_as_bool( kwargs.get( "enable_old_display_applications", "True" ) )
self.brand = kwargs.get( 'brand', None )
self.welcome_url = kwargs.get( 'welcome_url', '/static/welcome.html' )
@@ -296,6 +299,23 @@
for section in global_conf_parser.sections():
if section.startswith('server:'):
self.server_names.append(section.replace('server:', '', 1))
+
+ # Default URL (with schema http/https) of the Galaxy instance within the
+ # local network - used to remotely communicate with the Galaxy API.
+ galaxy_infrastructure_url = kwargs.get( 'galaxy_infrastructure_url', None )
+ galaxy_infrastructure_url_set = True
+ if galaxy_infrastructure_url is None:
+ # Still provide a default but indicate it was not explicitly set
+ # so dependending on the context a better default can be used (
+ # request url in a web thread, Docker parent in IE stuff, etc...)
+ galaxy_infrastructure_url = "http://localhost"
+ port = self.guess_galaxy_port()
+ if port:
+ galaxy_infrastructure_url += ":%s" % (port)
+ galaxy_infrastructure_url_set = False
+ self.galaxy_infrastructure_url = galaxy_infrastructure_url
+ self.galaxy_infrastructure_url_set = galaxy_infrastructure_url_set
+
# Store advanced job management config
self.job_manager = kwargs.get('job_manager', self.server_name).strip()
self.job_handlers = [ x.strip() for x in kwargs.get('job_handlers', self.server_name).split(',') ]
@@ -357,6 +377,18 @@
# directory where the visualization/registry searches for plugins
self.visualization_plugins_directory = kwargs.get(
'visualization_plugins_directory', 'config/plugins/visualizations' )
+ ie_dirs = kwargs.get( 'interactive_environment_plugins_directory', None )
+ if ie_dirs and not self.visualization_plugins_directory:
+ self.visualization_plugins_directory = ie_dirs
+ elif ie_dirs:
+ self.visualization_plugins_directory += ",%s" % ie_dirs
+
+ self.proxy_session_map = self.resolve_path( kwargs.get( "dynamic_proxy_session_map", "database/session_map.sqlite" ) )
+ self.manage_dynamic_proxy = string_as_bool( kwargs.get( "dynamic_proxy_manage", "True" ) ) # Set to false if being launched externally
+ self.dynamic_proxy_debug = string_as_bool( kwargs.get( "dynamic_proxy_debug", "False" ) )
+ self.dynamic_proxy_bind_port = int( kwargs.get( "dynamic_proxy_bind_port", "8800" ) )
+ self.dynamic_proxy_bind_ip = kwargs.get( "dynamic_proxy_bind_ip", "0.0.0.0" )
+
# Default chunk size for chunkable datatypes -- 64k
self.display_chunk_size = int( kwargs.get( 'display_chunk_size', 65536) )
@@ -543,6 +575,19 @@
"""
return resolve_path( path, self.root )
+ def guess_galaxy_port(self):
+ # Code derived from IPython work ie.mako
+ config = ConfigParser.SafeConfigParser({'port': '8080'})
+ if self.config_file:
+ config.read( self.config_file )
+
+ try:
+ port = config.getint('server:%s' % self.server_name, 'port')
+ except:
+ # uWSGI galaxy installations don't use paster and only speak uWSGI not http
+ port = None
+ return port
+
def get_database_engine_options( kwargs, model_prefix='' ):
"""
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/datatypes/registry.py
--- a/lib/galaxy/datatypes/registry.py
+++ b/lib/galaxy/datatypes/registry.py
@@ -22,6 +22,7 @@
import assembly
import ngsindex
import graph
+import text
import galaxy.util
from galaxy.util.odict import odict
from display_applications.application import DisplayApplication
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/datatypes/text.py
--- /dev/null
+++ b/lib/galaxy/datatypes/text.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+""" Clearing house for generic text datatypes that are not XML or tabular.
+"""
+
+
+from galaxy.datatypes.data import Text
+from galaxy.datatypes.data import get_file_peek
+from galaxy.datatypes.data import nice_size
+from galaxy import util
+
+import tempfile
+import subprocess
+import json
+import os
+
+import logging
+log = logging.getLogger(__name__)
+
+
+class Json( Text ):
+ file_ext = "json"
+
+ def set_peek( self, dataset, is_multi_byte=False ):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte )
+ dataset.blurb = "JavaScript Object Notation (JSON)"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disc'
+
+ def sniff( self, filename ):
+ """
+ Try to load the string with the json module. If successful it's a json file.
+ """
+ return self._looks_like_json( filename )
+
+ def _looks_like_json( self, filename ):
+ # Pattern used by SequenceSplitLocations
+ if os.path.getsize(filename) < 50000:
+ # If the file is small enough - don't guess just check.
+ try:
+ json.load( open(filename, "r") )
+ return True
+ except Exception:
+ return False
+ else:
+ with open(filename, "r") as fh:
+ while True:
+ line = fh.readline()
+ line = line.strip()
+ if line:
+ # simple types are valid JSON as well - but would such a file
+ # be interesting as JSON in Galaxy?
+ return line.startswith("[") or line.startswith("{")
+ return False
+
+ def display_peek( self, dataset ):
+ try:
+ return dataset.peek
+ except:
+ return "JSON file (%s)" % ( nice_size( dataset.get_size() ) )
+
+
+class Ipynb( Json ):
+ file_ext = "ipynb"
+
+ def set_peek( self, dataset, is_multi_byte=False ):
+ if not dataset.dataset.purged:
+ dataset.peek = get_file_peek( dataset.file_name, is_multi_byte=is_multi_byte )
+ dataset.blurb = "IPython Notebook"
+ else:
+ dataset.peek = 'file does not exist'
+ dataset.blurb = 'file purged from disc'
+
+ def sniff( self, filename ):
+ """
+ Try to load the string with the json module. If successful it's a json file.
+ """
+ if self._looks_like_json( filename ):
+ try:
+ ipynb = json.load( open(filename) )
+ if ipynb.get('nbformat', False) is not False and ipynb.get('metadata', False):
+ return True
+ else:
+ return False
+ except:
+ return False
+
+ def display_data(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
+ config = trans.app.config
+ trust = getattr( config, 'trust_ipython_notebook_conversion', False )
+ if trust:
+ return self._display_data_trusted(trans, dataset, preview=preview, fileame=filename, to_ext=to_ext, chunk=chunk, **kwd)
+ else:
+ return super(Ipynb, self).display_data( trans, dataset, preview=preview, fileame=filename, to_ext=to_ext, chunk=chunk, **kwd )
+
+ def _display_data_trusted(self, trans, dataset, preview=False, filename=None, to_ext=None, chunk=None, **kwd):
+ preview = util.string_as_bool( preview )
+ if chunk:
+ return self.get_chunk(trans, dataset, chunk)
+ elif to_ext or not preview:
+ return self._serve_raw(trans, dataset, to_ext)
+ else:
+ ofile_handle = tempfile.NamedTemporaryFile(delete=False)
+ ofilename = ofile_handle.name
+ ofile_handle.close()
+ try:
+ cmd = 'ipython nbconvert --to html --template basic %s --output %s' % (dataset.file_name, ofilename)
+ log.info("Calling command %s" % cmd)
+ subprocess.call(cmd, shell=True)
+ ofilename = '%s.html' % ofilename
+ except:
+ ofilename = dataset.file_name
+ log.exception( 'Command "%s" failed. Could not convert the IPython Notebook to HTML, defaulting to plain text.' % cmd )
+ return open( ofilename )
+
+ def set_meta( self, dataset, **kwd ):
+ """
+ Set the number of models in dataset.
+ """
+ pass
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/jobs/runners/pulsar.py
--- a/lib/galaxy/jobs/runners/pulsar.py
+++ b/lib/galaxy/jobs/runners/pulsar.py
@@ -53,7 +53,7 @@
),
galaxy_url=dict(
map=specs.to_str_or_none,
- default=DEFAULT_GALAXY_URL,
+ default=None,
),
manager=dict(
map=specs.to_str_or_none,
@@ -129,6 +129,8 @@
super( PulsarJobRunner, self ).__init__( app, nworkers, runner_param_specs=PULSAR_PARAM_SPECS, **kwds )
self._init_worker_threads()
galaxy_url = self.runner_params.galaxy_url
+ if not galaxy_url:
+ galaxy_url = app.config.galaxy_infrastructure_url
if galaxy_url:
galaxy_url = galaxy_url.rstrip("/")
self.galaxy_url = galaxy_url
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/util/lazy_process.py
--- /dev/null
+++ b/lib/galaxy/util/lazy_process.py
@@ -0,0 +1,57 @@
+import threading
+import time
+import subprocess
+
+
+class LazyProcess( object ):
+ """ Abstraction describing a command line launching a service - probably
+ as needed as functionality is accessed in Galaxy.
+ """
+
+ def __init__( self, command_and_args ):
+ self.command_and_args = command_and_args
+ self.thread_lock = threading.Lock()
+ self.allow_process_request = True
+ self.process = None
+
+ def start_process( self ):
+ with self.thread_lock:
+ if self.allow_process_request:
+ self.allow_process_request = False
+ t = threading.Thread(target=self.__start)
+ t.daemon = True
+ t.start()
+
+ def __start(self):
+ with self.thread_lock:
+ self.process = subprocess.Popen( self.command_and_args, close_fds=True )
+
+ def shutdown( self ):
+ with self.thread_lock:
+ self.allow_process_request = False
+ if self.running:
+ self.process.terminate()
+ time.sleep(.01)
+ if self.running:
+ self.process.kill()
+
+ @property
+ def running( self ):
+ return self.process and not self.process.poll()
+
+
+class NoOpLazyProcess( object ):
+ """ LazyProcess abstraction meant to describe potentially optional
+ services, in those cases where one is not configured or valid, this
+ class can be used in place of LazyProcess.
+ """
+
+ def start_process( self ):
+ return
+
+ def shutdown( self ):
+ return
+
+ @property
+ def running( self ):
+ return False
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/util/sockets.py
--- /dev/null
+++ b/lib/galaxy/util/sockets.py
@@ -0,0 +1,43 @@
+import shlex
+import socket
+import subprocess
+import random
+
+
+def unused_port(range=None):
+ if range:
+ return __unused_port_on_range(range)
+ else:
+ return __unused_port_rangeless()
+
+
+def __unused_port_rangeless():
+ # TODO: Allow ranges (though then need to guess and check)...
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.bind(('localhost', 0))
+ addr, port = s.getsockname()
+ s.close()
+ return port
+
+
+def __unused_port_on_range(range):
+ assert range[0] and range[1]
+
+ # Find all ports that are already occupied
+ cmd_netstat = shlex.split("netstat tuln")
+ p1 = subprocess.Popen(cmd_netstat, stdout=subprocess.PIPE)
+
+ occupied_ports = set()
+ for line in p1.stdout.read().split('\n'):
+ if line.startswith('tcp') or line.startswith('tcp6'):
+ col = line.split()
+ local_address = col[3]
+ local_port = local_address.split(':')[1]
+ occupied_ports.add( int(local_port) )
+
+ # Generate random free port number.
+ while True:
+ port = random.randrange(range[0], range[1])
+ if port not in occupied_ports:
+ break
+ return port
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/visualization/registry.py
--- a/lib/galaxy/visualization/registry.py
+++ b/lib/galaxy/visualization/registry.py
@@ -344,6 +344,10 @@
# TODO: As part of a future note plugin registry effort - move this
# override and let VisualizationsRegistry just revert to using parent's
# fill_template.
+
+ # No longer needed but being left around for a few releases as ipython-galaxy
+ # as an external visualization plugin is deprecated in favor of core interactive
+ # environment plugin.
if 'get_api_key' not in kwargs:
def get_api_key():
@@ -401,6 +405,10 @@
"""
returned = {}
+ # main tag specifies plugin type (visualization or
+ # interactive_enviornment).
+ returned[ 'plugin_type' ] = xml_tree.tag
+
# a text display name for end user links
returned[ 'name' ] = xml_tree.attrib.get( 'name', None )
if not returned[ 'name' ]:
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/base/interactive_environments.py
--- /dev/null
+++ b/lib/galaxy/web/base/interactive_environments.py
@@ -0,0 +1,162 @@
+import ConfigParser
+
+import hashlib
+import os
+import random
+
+from galaxy.util.bunch import Bunch
+from galaxy import web
+import yaml
+from galaxy.managers import api_keys
+
+
+class InteractiveEnviornmentRequest(object):
+
+ def __init__(self, trans, plugin):
+ plugin_config = plugin.config
+
+ self.trans = trans
+
+ self.attr = Bunch()
+ self.attr.viz_id = plugin_config["name"].lower()
+ self.attr.history_id = trans.security.encode_id( trans.history.id )
+ self.attr.proxy_request = trans.app.proxy_manager.setup_proxy( trans )
+ self.attr.proxy_url = self.attr.proxy_request[ 'proxy_url' ]
+ self.attr.galaxy_config = trans.app.config
+ self.attr.galaxy_root_dir = os.path.abspath(self.attr.galaxy_config.root)
+
+ self.attr.root = web.url_for("/")
+ self.attr.app_root = self.attr.root + "plugins/visualizations/" + self.attr.viz_id + "/static/"
+
+ plugin_path = os.path.abspath( plugin.path )
+
+ # Store our template and configuration path
+ self.attr.our_config_dir = os.path.join(plugin_path, "config")
+ self.attr.our_template_dir = os.path.join(plugin_path, "templates")
+ self.attr.HOST = trans.request.host.rsplit(':', 1)[0]
+ self.attr.PORT = self.attr.proxy_request[ 'proxied_port' ]
+
+ def load_deploy_config(self, default_dict={}):
+ viz_config = ConfigParser.SafeConfigParser(default_dict)
+ conf_path = os.path.join( self.attr.our_config_dir, self.attr.viz_id + ".ini" )
+ if not os.path.exists( conf_path ):
+ conf_path = "%s.sample" % conf_path
+ viz_config.read( conf_path )
+ self.attr.viz_config = viz_config
+
+ def _boolean_option(option, default=False):
+ if self.attr.viz_config.has_option("main", option):
+ return self.attr.viz_config.getboolean("main", option)
+ else:
+ return default
+
+ # Older style port range proxying - not sure we want to keep these around or should
+ # we always assume use of Galaxy dynamic proxy? None of these need to be specified
+ # if using the Galaxy dynamic proxy.
+ self.attr.PASSWORD_AUTH = _boolean_option("password_auth")
+ self.attr.APACHE_URLS = _boolean_option("apache_urls")
+ self.attr.SSL_URLS = _boolean_option("ssl")
+
+ def write_conf_file(self, output_directory, extra={}):
+ """
+ Build up a configuration file that is standard for ALL IEs.
+
+ TODO: replace hashed password with plaintext.
+ """
+ trans = self.trans
+ request = trans.request
+ api_key = api_keys.ApiKeyManager( trans.app ).get_or_create_api_key( trans.user )
+ conf_file = {
+ 'history_id': self.attr.history_id,
+ 'api_key': api_key,
+ 'remote_host': request.remote_addr,
+ 'docker_port': self.attr.PORT,
+ 'cors_origin': request.host_url,
+ }
+
+ if self.attr.viz_config.has_option("docker", "galaxy_url"):
+ conf_file['galaxy_url'] = self.attr.viz_config.getstring("docker", "galaxy_url")
+ elif self.attr.galaxy_config.galaxy_infrastructure_url_set:
+ conf_file['galaxy_url'] = self.attr.galaxy_config.galaxy_infrastructure_url.rstrip('/') + '/'
+ else:
+ conf_file['galaxy_url'] = request.application_url.rstrip('/') + '/'
+ conf_file['galaxy_paster_port'] = self.attr.galaxy_config.guess_galaxy_port()
+
+ if self.attr.PASSWORD_AUTH:
+ # Generate a random password + salt
+ notebook_pw_salt = self.generate_password(length=12)
+ notebook_pw = self.generate_password(length=24)
+ m = hashlib.sha1()
+ m.update( notebook_pw + notebook_pw_salt )
+ conf_file['notebook_password'] = 'sha1:%s:%s' % (notebook_pw_salt, m.hexdigest())
+ # Should we use password based connection or "default" connection style in galaxy
+ else:
+ notebook_pw = "None"
+
+ # Some will need to pass extra data
+ for extra_key in extra:
+ conf_file[extra_key] = extra[extra_key]
+
+ self.attr.notebook_pw = notebook_pw
+ # Write conf
+ with open( os.path.join( output_directory, 'conf.yaml' ), 'wb' ) as handle:
+ handle.write( yaml.dump(conf_file, default_flow_style=False) )
+
+ def generate_hex(self, length):
+ return ''.join(random.choice('0123456789abcdef') for _ in range(length))
+
+ def generate_password(self, length):
+ """
+ Generate a random alphanumeric password
+ """
+ return ''.join(random.choice('0123456789abcdefghijklmnopqrstuvwxyz') for _ in range(length))
+
+ def javascript_boolean(self, python_boolean):
+ """
+ Convenience function to convert boolean for use in JS
+ """
+ if python_boolean:
+ return "true"
+ else:
+ return "false"
+
+ def url_template(self, url_template):
+ """
+ Process a URL template
+
+ There are several variables accessible to the user:
+
+ - ${PROXY_URL} will be replaced with dynamically create proxy
+ - ${PORT} will be replaced with the port the docker image is attached to
+ """
+ # Figure out our substitutions
+
+ # Next several lines for older style replacements (not used with Galaxy dynamic
+ # proxy)
+
+ if self.attr.SSL_URLS:
+ protocol = 'https'
+ else:
+ protocol = 'http'
+
+ if not self.attr.APACHE_URLS:
+ # If they are not using apache URLs, that implies there's a port attached to the host
+ # string, thus we replace just the first instance of host that we see.
+ url_template = url_template.replace('${HOST}', '${HOST}:${PORT}', 1)
+
+ url_template = url_template.replace('${PROTO}', protocol) \
+ .replace('${HOST}', self.attr.HOST)
+
+ # Only the following replacements are used with Galaxy dynamic proxy
+ # URLs
+ url = url_template.replace('${PROXY_URL}', str(self.attr.proxy_url)) \
+ .replace('${PORT}', str(self.attr.PORT))
+ return url
+
+ def docker_cmd(self, temp_dir):
+ """
+ Generate and return the docker command to execute
+ """
+ return '%s run -d --sig-proxy=true -p %s:%s -v "%s:/import/" %s' % \
+ (self.attr.viz_config.get("docker", "command"), self.attr.PORT, self.attr.docker_port,
+ temp_dir, self.attr.viz_config.get("docker", "image"))
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/base/pluginframework.py
--- a/lib/galaxy/web/base/pluginframework.py
+++ b/lib/galaxy/web/base/pluginframework.py
@@ -20,6 +20,8 @@
from galaxy import util
from galaxy.util import odict
from galaxy.util import bunch
+from .interactive_environments import InteractiveEnviornmentRequest
+
import logging
log = logging.getLogger( __name__ )
@@ -590,6 +592,11 @@
if 'plugin_path' not in kwargs:
kwargs[ 'plugin_path'] = os.path.abspath( plugin.path )
+ plugin_type = plugin.config["plugin_type"]
+ if plugin_type == "interactive_environment":
+ request = InteractiveEnviornmentRequest(trans, plugin)
+ kwargs["ie_request"] = request
+
# defined here to be overridden
return trans.fill_template( template_filename, template_lookup=plugin.template_lookup, **kwargs )
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/__init__.py
--- /dev/null
+++ b/lib/galaxy/web/proxy/__init__.py
@@ -0,0 +1,169 @@
+import logging
+import os
+import json
+
+from .filelock import FileLock
+from galaxy.util import sockets
+from galaxy.util.lazy_process import LazyProcess, NoOpLazyProcess
+from galaxy.util import sqlite
+
+log = logging.getLogger( __name__ )
+
+
+DEFAULT_PROXY_TO_HOST = "localhost"
+SECURE_COOKIE = "galaxysession"
+
+
+class ProxyManager(object):
+
+ def __init__( self, config ):
+ for option in [ "manage_dynamic_proxy", "dynamic_proxy_bind_port", "dynamic_proxy_bind_ip", "dynamic_proxy_debug" ]:
+ setattr( self, option, getattr( config, option ) )
+ self.launch_by = "node" # TODO: Support docker
+ if self.manage_dynamic_proxy:
+ self.lazy_process = self.__setup_lazy_process( config )
+ else:
+ self.lazy_process = NoOpLazyProcess()
+ self.proxy_ipc = proxy_ipc(config)
+
+ def shutdown( self ):
+ self.lazy_process.shutdown()
+
+ def setup_proxy( self, trans, host=DEFAULT_PROXY_TO_HOST, port=None ):
+ if self.manage_dynamic_proxy:
+ log.info("Attempting to start dynamic proxy process")
+ self.lazy_process.start_process()
+
+ authentication = AuthenticationToken(trans)
+ proxy_requests = ProxyRequests(host=host, port=port)
+ self.proxy_ipc.handle_requests(authentication, proxy_requests)
+ # TODO: These shouldn't need to be request.host and request.scheme -
+ # though they are reasonable defaults.
+ host = trans.request.host
+ if ':' in host:
+ host = host[0:host.index(':')]
+ scheme = trans.request.scheme
+ proxy_url = '%s://%s:%d' % (scheme, host, self.dynamic_proxy_bind_port)
+ return {
+ 'proxy_url': proxy_url,
+ 'proxied_port': proxy_requests.port,
+ 'proxied_host': proxy_requests.host,
+ }
+
+ def __setup_lazy_process( self, config ):
+ launcher = proxy_launcher(self)
+ command = launcher.launch_proxy_command(config)
+ return LazyProcess(command)
+
+
+def proxy_launcher(config):
+ return NodeProxyLauncher()
+
+
+class ProxyLauncher(object):
+
+ def launch_proxy_command(self, config):
+ raise NotImplementedError()
+
+
+class NodeProxyLauncher(object):
+
+ def launch_proxy_command(self, config):
+ args = [
+ "--sessions", config.proxy_session_map,
+ "--ip", config.dynamic_proxy_bind_ip,
+ "--port", str(config.dynamic_proxy_bind_port),
+ ]
+ if config.dynamic_proxy_debug:
+ args.append("--verbose")
+
+ parent_directory = os.path.dirname( __file__ )
+ path_to_application = os.path.join( parent_directory, "js", "lib", "main.js" )
+ command = [ path_to_application ] + args
+ return command
+
+
+class AuthenticationToken(object):
+
+ def __init__(self, trans):
+ self.cookie_name = SECURE_COOKIE
+ self.cookie_value = trans.get_cookie( self.cookie_name )
+
+
+class ProxyRequests(object):
+
+ def __init__(self, host=None, port=None):
+ if host is None:
+ host = DEFAULT_PROXY_TO_HOST
+ if port is None:
+ port = sockets.unused_port()
+ log.info("Obtained unused port %d" % port)
+ self.host = host
+ self.port = port
+
+
+def proxy_ipc(config):
+ proxy_session_map = config.proxy_session_map
+ if proxy_session_map.endswith(".sqlite"):
+ return SqliteProxyIpc(proxy_session_map)
+ else:
+ return JsonFileProxyIpc(proxy_session_map)
+
+
+class ProxyIpc(object):
+
+ def handle_requests(self, cookie, host, port):
+ raise NotImplementedError()
+
+
+class JsonFileProxyIpc(object):
+
+ def __init__(self, proxy_session_map):
+ self.proxy_session_map = proxy_session_map
+
+ def handle_requests(self, authentication, proxy_requests):
+ key = "%s:%s" % ( proxy_requests.host, proxy_requests.port )
+ secure_id = authentication.cookie_value
+ with FileLock( self.proxy_session_map ):
+ if not os.path.exists( self.proxy_session_map ):
+ open( self.proxy_session_map, "w" ).write( "{}" )
+ json_data = open( self.proxy_session_map, "r" ).read()
+ session_map = json.loads( json_data )
+ to_remove = []
+ for k, value in session_map.items():
+ if value == secure_id:
+ to_remove.append( k )
+ for k in to_remove:
+ del session_map[ k ]
+ session_map[ key ] = secure_id
+ new_json_data = json.dumps( session_map )
+ open( self.proxy_session_map, "w" ).write( new_json_data )
+
+
+class SqliteProxyIpc(object):
+
+ def __init__(self, proxy_session_map):
+ self.proxy_session_map = proxy_session_map
+
+ def handle_requests(self, authentication, proxy_requests):
+ key = "%s:%s" % ( proxy_requests.host, proxy_requests.port )
+ secure_id = authentication.cookie_value
+ with FileLock( self.proxy_session_map ):
+ conn = sqlite.connect(self.proxy_session_map)
+ try:
+ c = conn.cursor()
+ try:
+ # Create table
+ c.execute('''CREATE TABLE gxproxy
+ (key text PRIMARY_KEY, secret text)''')
+ except Exception:
+ pass
+ insert_tmpl = '''INSERT INTO gxproxy (key, secret) VALUES ('%s', '%s');'''
+ insert = insert_tmpl % (key, secure_id)
+ c.execute(insert)
+ conn.commit()
+ finally:
+ conn.close()
+
+# TODO: RESTful API driven proxy?
+# TODO: MQ diven proxy?
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/filelock.py
--- /dev/null
+++ b/lib/galaxy/web/proxy/filelock.py
@@ -0,0 +1,82 @@
+""" Code obtained from https://github.com/dmfrey/FileLock
+
+See full license at:
+
+https://github.com/dmfrey/FileLock/blob/master/LICENSE.txt
+
+"""
+import os
+import time
+import errno
+
+
+class FileLockException(Exception):
+ pass
+
+
+class FileLock(object):
+ """ A file locking mechanism that has context-manager support so
+ you can use it in a with statement. This should be relatively cross
+ compatible as it doesn't rely on msvcrt or fcntl for the locking.
+ """
+
+ def __init__(self, file_name, timeout=10, delay=.05):
+ """ Prepare the file locker. Specify the file to lock and optionally
+ the maximum timeout and the delay between each attempt to lock.
+ """
+ self.is_locked = False
+ full_path = os.path.abspath(file_name)
+ self.lockfile = "%s.lock" % full_path
+ self.file_name = full_path
+ self.timeout = timeout
+ self.delay = delay
+
+ def acquire(self):
+ """ Acquire the lock, if possible. If the lock is in use, it check again
+ every `wait` seconds. It does this until it either gets the lock or
+ exceeds `timeout` number of seconds, in which case it throws
+ an exception.
+ """
+ start_time = time.time()
+ while True:
+ try:
+ self.fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR)
+ break
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+ if (time.time() - start_time) >= self.timeout:
+ raise FileLockException("Timeout occured.")
+ time.sleep(self.delay)
+ self.is_locked = True
+
+ def release(self):
+ """ Get rid of the lock by deleting the lockfile.
+ When working in a `with` statement, this gets automatically
+ called at the end.
+ """
+ if self.is_locked:
+ os.close(self.fd)
+ os.unlink(self.lockfile)
+ self.is_locked = False
+
+ def __enter__(self):
+ """ Activated when used in the with statement.
+ Should automatically acquire a lock to be used in the with block.
+ """
+ if not self.is_locked:
+ self.acquire()
+ return self
+
+ def __exit__(self, type, value, traceback):
+ """ Activated at the end of the with statement.
+ It automatically releases the lock if it isn't locked.
+ """
+ if self.is_locked:
+ self.release()
+
+ def __del__(self):
+ """ Make sure that the FileLock instance doesn't leave a lockfile
+ lying around.
+ """
+ self.release()
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/Dockerfile
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/Dockerfile
@@ -0,0 +1,18 @@
+# Have not yet gotten this to work - goal was to launch the prox in a Docker container.
+# Networking is a bit tricky though - could not get the child proxy to talk to the child
+# IPython container.
+
+
+# sudo docker build --no-cache=true -t gxproxy .
+# sudo docker run --net host -v /home/john/workspace/galaxy-central/database:/var/gxproxy -p 8800:8800 -t gxproxy lib/main.js --sessions /var/gxproxy/session_map.json --ip 0.0.0.0 --port 8800
+
+FROM node:0.11.13
+
+RUN mkdir -p /usr/src/gxproxy
+WORKDIR /usr/src/gxproxy
+
+ADD package.json /usr/src/gxproxy/
+RUN npm install
+ADD . /usr/src/gxproxy
+
+CMD [ "lib/main.js" ]
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/README.md
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/README.md
@@ -0,0 +1,2 @@
+# A dynamic configurable reverse proxy for use within Galaxy
+
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/lib/main.js
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/lib/main.js
@@ -0,0 +1,41 @@
+#!/usr/bin/env node
+/*
+Inspiration taken from
+ https://github.com/jupyter/multiuser-server/blob/master/multiuser/js/main.js
+*/
+var fs = require('fs');
+var args = require('commander');
+
+package_info = require('../package')
+
+args
+ .version(package_info)
+ .option('--ip <n>', 'Public-facing IP of the proxy', 'localhost')
+ .option('--port <n>', 'Public-facing port of the proxy', parseInt)
+ .option('--cookie <cookiename>', 'Cookie proving authentication', 'galaxysession')
+ .option('--sessions <file>', 'Routes file to monitor')
+ .option('--verbose')
+
+args.parse(process.argv);
+
+var DynamicProxy = require('./proxy.js').DynamicProxy;
+var mapFor = require('./mapper.js').mapFor;
+
+var sessions = mapFor(args.sessions);
+
+var dynamic_proxy_options = {
+ sessionCookie: args['cookie'],
+ sessionMap: sessions,
+ verbose: args.verbose
+}
+
+var dynamic_proxy = new DynamicProxy(dynamic_proxy_options);
+
+var listen = {};
+listen.port = args.port || 8000;
+listen.ip = args.ip;
+
+if(args.verbose) {
+ console.log("Listening on " + listen.ip + ":" + listen.port);
+}
+dynamic_proxy.proxy_server.listen(listen.port, listen.ip);
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/lib/mapper.js
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/lib/mapper.js
@@ -0,0 +1,78 @@
+var fs = require('fs');
+var sqlite3 = require('sqlite3')
+
+
+var endsWith = function(subjectString, searchString) {
+ var position = subjectString.length;
+ position -= searchString.length;
+ var lastIndex = subjectString.indexOf(searchString, position);
+ return lastIndex !== -1 && lastIndex === position;
+};
+
+
+var updateFromJson = function(path, map) {
+ var content = fs.readFileSync(path, 'utf8');
+ var keyToSession = JSON.parse(content);
+ var newSessions = {};
+ for(var key in keyToSession) {
+ var hostAndPort = key.split(":");
+ // 'host': hostAndPort[0],
+ newSessions[keyToSession[key]] = {'target': {'host': hostAndPort[0], 'port': parseInt(hostAndPort[1])}};
+ }
+ for(var oldSession in map) {
+ if(!(oldSession in newSessions)) {
+ delete map[ oldSession ];
+ }
+ }
+ for(var newSession in newSessions) {
+ map[newSession] = newSessions[newSession];
+ }
+}
+
+var updateFromSqlite = function(path, map) {
+ var newSessions = {};
+ var loadSessions = function() {
+ db.each("SELECT key, secret FROM gxproxy", function(err, row) {
+ var key = row['key'];
+ var secret = row['secret'];
+ var hostAndPort = key.split(":");
+ var target = {'host': hostAndPort[0], 'port': parseInt(hostAndPort[1])};
+ newSessions[secret] = {'target': target};
+ }, finish);
+ };
+
+ var finish = function() {
+ for(var oldSession in map) {
+ if(!(oldSession in newSessions)) {
+ delete map[ oldSession ];
+ }
+ }
+ for(var newSession in newSessions) {
+ map[newSession] = newSessions[newSession];
+ }
+ db.close();
+ };
+
+ var db = new sqlite3.Database(path, loadSessions);
+};
+
+
+var mapFor = function(path) {
+ var map = {};
+ var loadMap;
+ if(endsWith(path, '.sqlite')) {
+ loadMap = function() {
+ updateFromSqlite(path, map);
+ }
+ } else {
+ loadMap = function() {
+ updateFromJson(path, map);
+ }
+ }
+ console.log("Watching path " + path);
+ loadMap();
+ fs.watch(path, loadMap);
+ return map;
+};
+
+exports.mapFor = mapFor;
\ No newline at end of file
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/lib/proxy.js
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/lib/proxy.js
@@ -0,0 +1,119 @@
+var http = require('http'),
+ httpProxy = require('http-proxy');
+
+var bound = function (that, method) {
+ // bind a method, to ensure `this=that` when it is called
+ // because prototype languages are bad
+ return function () {
+ method.apply(that, arguments);
+ };
+};
+
+var DynamicProxy = function(options) {
+ var dynamicProxy = this;
+ this.sessionCookie = options.sessionCookie;
+ this.sessionMap = options.sessionMap;
+ this.debug = options.verbose;
+
+ var log_errors = function(handler) {
+ return function (req, res) {
+ try {
+ return handler.apply(dynamicProxy, arguments);
+ } catch (e) {
+ console.log("Error in handler for " + req.method + ' ' + req.url + ': ', e);
+ }
+ };
+ };
+
+ var proxy = this.proxy = httpProxy.createProxyServer({
+ ws : true,
+ });
+
+ this.proxy_server = http.createServer(
+ log_errors(dynamicProxy.handleProxyRequest)
+ );
+ this.proxy_server.on('upgrade', bound(this, this.handleWs));
+};
+
+DynamicProxy.prototype.rewriteRequest = function(request) {
+}
+
+DynamicProxy.prototype.targetForRequest = function(request) {
+ // return proxy target for a given url
+ var session = this.findSession(request);
+ for (var mappedSession in this.sessionMap) {
+ if(session == mappedSession) {
+ return this.sessionMap[session].target;
+ }
+ }
+
+ return null;
+};
+
+DynamicProxy.prototype.findSession = function(request) {
+ var sessionCookie = this.sessionCookie;
+ rc = request.headers.cookie;
+ if(!rc) {
+ return null;
+ }
+ var cookies = rc.split(';');
+ for(var cookieIndex in cookies) {
+ var cookie = cookies[cookieIndex];
+ var parts = cookie.split('=');
+ var partName = parts.shift().trim();
+ if(partName == sessionCookie) {
+ return unescape(parts.join('='))
+ }
+ }
+
+ return null;
+};
+
+DynamicProxy.prototype.handleProxyRequest = function(req, res) {
+ var target = this.targetForRequest(req);
+ if(this.debug) {
+ console.log("PROXY " + req.method + " " + req.url + " to " + target);
+ }
+ var origin = req.headers.origin;
+ this.rewriteRequest(req);
+ res.oldWriteHead = res.writeHead;
+ res.writeHead = function(statusCode, headers) {
+ res.setHeader('Access-Control-Allow-Origin', origin);
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
+ res.oldWriteHead(statusCode, headers);
+ }
+ this.proxy.web(req, res, {
+ target: target
+ }, function (e) {
+ console.log("Proxy error: ", e);
+ res.writeHead(502);
+ res.write("Proxy target missing");
+ res.end();
+ });
+};
+
+DynamicProxy.prototype.handleWs = function(req, res, head) {
+ // no local route found, time to proxy
+ var target = this.targetForRequest(req);
+ if(this.debug) {
+ console.log("PROXY WS " + req.url + " to " + req.url);
+ }
+ var origin = req.headers.origin;
+ this.rewriteRequest(req);
+ res.oldWriteHead = res.writeHead;
+ res.writeHead = function(statusCode, headers) {
+ res.setHeader('Access-Control-Allow-Origin', origin);
+ res.setHeader('Access-Control-Allow-Credentials', 'true');
+ res.oldWriteHead(statusCode, headers);
+ }
+ this.proxy.ws(req, res, head, {
+ target: target
+ }, function (e) {
+ console.log("Proxy error: ", e);
+ res.writeHead(502);
+ res.write("Proxy target missing");
+ res.end();
+ });
+};
+
+exports.DynamicProxy = DynamicProxy;
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 lib/galaxy/web/proxy/js/package.json
--- /dev/null
+++ b/lib/galaxy/web/proxy/js/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "galaxy-proxy",
+ "version": "0.0.1",
+ "description": "A dynamic reverse proxy for use within Galaxy",
+ "main": "index.js",
+ "author": "John Chilton",
+ "license": "AFL v3",
+ "readmeFilename": "README.md",
+ "repository": {
+ "type": "mercurial",
+ "url": "https://bitbucket.org/galaxy/galaxy-central"
+ },
+ "dependencies": {
+ "http-proxy": "~1.1",
+ "commander": "~2.2",
+ "sqlite3": "3.0.2"
+ }
+}
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 static/scripts/galaxy.interactive_environments.js
--- /dev/null
+++ b/static/scripts/galaxy.interactive_environments.js
@@ -0,0 +1,59 @@
+/**
+ * Internal function to remove content from the main area and add the notebook.
+ * Not idempotent
+ */
+function append_notebook(url){
+ clear_main_area();
+ $('#main').append('<iframe frameBorder="0" seamless="seamless" style="width: 100%; height: 100%; overflow:hidden;" scrolling="no" src="'+ url +'"></iframe>'
+ );
+}
+
+function clear_main_area(){
+ $('#spinner').remove();
+ $('#main').children().remove();
+}
+
+function display_spinner(){
+ $('#main').append('<img id="spinner" src="' + galaxy_root + '/static/style/largespinner.gif" style="position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;">');
+}
+
+
+/**
+ * Test availability of a URL, and call a callback when done.
+ * http://stackoverflow.com/q/25390206/347368
+ * @param {String} url: URL to test availability of. Must return a 200 (302->200 is OK).
+ * @param {String} callback: function to call once successfully connected.
+ *
+ */
+function test_ie_availability(url, success_callback){
+ var request_count = 0;
+ display_spinner();
+ interval = setInterval(function(){
+ $.ajax({
+ url: url,
+ xhrFields: {
+ withCredentials: true
+ },
+ type: "GET",
+ timeout: 500,
+ success: function(){
+ console.log("Connected to IE, returning");
+ clearInterval(interval);
+ success_callback();
+ },
+ error: function(jqxhr, status, error){
+ request_count++;
+ console.log("Request " + request_count);
+ if(request_count > 30){
+ clearInterval(interval);
+ clear_main_area();
+ toastr.error(
+ "Could not connect to IE, contact your administrator",
+ "Error",
+ {'closeButton': true, 'timeOut': 20000, 'tapToDismiss': false}
+ );
+ }
+ }
+ });
+ }, 1000);
+}
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 static/scripts/packed/galaxy.interactive_environments.js
--- /dev/null
+++ b/static/scripts/packed/galaxy.interactive_environments.js
@@ -0,0 +1,1 @@
+function append_notebook(a){clear_main_area();$("#main").append('<iframe frameBorder="0" seamless="seamless" style="width: 100%; height: 100%; overflow:hidden;" scrolling="no" src="'+a+'"></iframe>')}function clear_main_area(){$("#spinner").remove();$("#main").children().remove()}function display_spinner(){$("#main").append('<img id="spinner" src="'+galaxy_root+'/static/style/largespinner.gif" style="position:absolute;margin:auto;top:0;left:0;right:0;bottom:0;">')}function test_ie_availability(b,c){var a=0;display_spinner();interval=setInterval(function(){$.ajax({url:b,xhrFields:{withCredentials:true},type:"GET",timeout:500,success:function(){console.log("Connected to IE, returning");clearInterval(interval);c()},error:function(f,d,e){a++;console.log("Request "+a);if(a>30){clearInterval(interval);clear_main_area();toastr.error("Could not connect to IE, contact your administrator","Error",{closeButton:true,timeOut:20000,tapToDismiss:false})}}})},1000)};
\ No newline at end of file
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 test/unit/test_lazy_process.py
--- /dev/null
+++ b/test/unit/test_lazy_process.py
@@ -0,0 +1,19 @@
+import os
+import tempfile
+import time
+
+from galaxy.util.lazy_process import LazyProcess
+
+
+def test_lazy_process():
+ t = tempfile.NamedTemporaryFile()
+ os.remove(t.name)
+ lazy_process = LazyProcess(["bash", "-c", "touch %s; sleep 100" % t.name])
+ assert not os.path.exists(t.name)
+ lazy_process.start_process()
+ time.sleep(.02)
+ assert lazy_process.process.poll() is None
+ assert os.path.exists(t.name)
+ lazy_process.shutdown()
+ time.sleep(.02)
+ assert lazy_process.process.poll()
diff -r 35c1392b049cbf41844be1fcf2d055f8314e16ae -r 70f7ff8c6a96ede6e439beb62d64152cc5ad2b04 test/unit/test_sockets.py
--- /dev/null
+++ b/test/unit/test_sockets.py
@@ -0,0 +1,12 @@
+import socket
+from galaxy.util import sockets
+
+
+def test_unused_free_port_unconstrained():
+ port = sockets.unused_port()
+
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ # would throw exception if port was not free.
+ s.bind(('localhost', port))
+ s.close()
+
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: dannon: Move handler startup to immediately following full creation and association of the JobManager.
by commits-noreply@bitbucket.org 20 Oct '14
by commits-noreply@bitbucket.org 20 Oct '14
20 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/a7b2aabb27ff/
Changeset: a7b2aabb27ff
Branch: stable
User: dannon
Date: 2014-10-15 14:21:13+00:00
Summary: Move handler startup to immediately following full creation and association of the JobManager.
Affected #: 2 files
diff -r 78c9a97be4b6bfe55136b055477fd1b9f22fd848 -r a7b2aabb27ffe5cc3216774ab01b18f13b4fc941 lib/galaxy/app.py
--- a/lib/galaxy/app.py
+++ b/lib/galaxy/app.py
@@ -134,6 +134,7 @@
# Start the job manager
from galaxy.jobs import manager
self.job_manager = manager.JobManager( self )
+ self.job_manager.start()
# FIXME: These are exposed directly for backward compatibility
self.job_queue = self.job_manager.job_queue
self.job_stop_queue = self.job_manager.job_stop_queue
diff -r 78c9a97be4b6bfe55136b055477fd1b9f22fd848 -r a7b2aabb27ffe5cc3216774ab01b18f13b4fc941 lib/galaxy/jobs/manager.py
--- a/lib/galaxy/jobs/manager.py
+++ b/lib/galaxy/jobs/manager.py
@@ -27,6 +27,8 @@
self.job_handler = NoopHandler()
self.job_queue = self.job_stop_queue = NoopQueue()
self.job_lock = False
+
+ def start( self ):
self.job_handler.start()
def shutdown( self ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: carlfeberhard: Fix to 875056d: correct selector bleed in subtitle
by commits-noreply@bitbucket.org 20 Oct '14
by commits-noreply@bitbucket.org 20 Oct '14
20 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/35c1392b049c/
Changeset: 35c1392b049c
User: carlfeberhard
Date: 2014-10-20 14:48:45+00:00
Summary: Fix to 875056d: correct selector bleed in subtitle
Affected #: 3 files
diff -r 720ea1796c26574d642e02db3583085c348a4474 -r 35c1392b049cbf41844be1fcf2d055f8314e16ae client/galaxy/scripts/mvc/history/history-panel-edit.js
--- a/client/galaxy/scripts/mvc/history/history-panel-edit.js
+++ b/client/galaxy/scripts/mvc/history/history-panel-edit.js
@@ -148,7 +148,7 @@
:( toggleLink( 'toggle-hidden-link', _l( 'hide hidden' ) ) )
);
}
- return $whereTo.find( '.subtitle' ).html( msgs.join( ', ' ) );
+ return $whereTo.find( '> .controls .subtitle' ).html( msgs.join( ', ' ) );
},
/** render the tags sub-view controller */
diff -r 720ea1796c26574d642e02db3583085c348a4474 -r 35c1392b049cbf41844be1fcf2d055f8314e16ae static/scripts/mvc/history/history-panel-edit.js
--- a/static/scripts/mvc/history/history-panel-edit.js
+++ b/static/scripts/mvc/history/history-panel-edit.js
@@ -148,7 +148,7 @@
:( toggleLink( 'toggle-hidden-link', _l( 'hide hidden' ) ) )
);
}
- return $whereTo.find( '.subtitle' ).html( msgs.join( ', ' ) );
+ return $whereTo.find( '> .controls .subtitle' ).html( msgs.join( ', ' ) );
},
/** render the tags sub-view controller */
diff -r 720ea1796c26574d642e02db3583085c348a4474 -r 35c1392b049cbf41844be1fcf2d055f8314e16ae static/scripts/packed/mvc/history/history-panel-edit.js
--- a/static/scripts/packed/mvc/history/history-panel-edit.js
+++ b/static/scripts/packed/mvc/history/history-panel-edit.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","utils/localization"],function(f,h,k,d,c,g,j,a,b){var i=f.HistoryPanel;var e=i.extend({HDAViewClass:c.HDAListItemEdit,HDCAViewClass:g.HDCAListItemEdit,initialize:function(l){l=l||{};i.prototype.initialize.call(this,l);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=l.purgeAllowed||false;this.annotationEditorShown=l.annotationEditorShown||false;this.tagsEditorShown=l.tagsEditorShown||false;this.multiselectActions=l.multiselectActions||this._getActions()},_setUpListeners:function(){i.prototype._setUpListeners.call(this);this.on("drop",function(l,m){this.dataDropped(m);this.dropTargetOff()})},_setUpCollectionListeners:function(){i.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(l){this.model.fetch()},this);return this},_setUpModelListeners:function(){i.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var l=i.prototype._buildNewRender.call(this);if(!this.model){return l}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(l);this._renderAnnotation(l)}return l},renderItems:function(m){var l=i.prototype.renderItems.call(this,m);this._renderCounts(m);return l},_renderCounts:function(n){function m(q,r){return['<a class="',q,'" href="javascript:void(0);">',r,"</a>"].join("")}n=n||this.$el;var l=this.collection.where({deleted:true}),p=this.collection.where({visible:false}),o=[];if(this.views.length){o.push([this.views.length,b("shown")].join(" "))}if(l.length){o.push((!this.showDeleted)?([l.length,m("toggle-deleted-link",b("deleted"))].join(" ")):(m("toggle-deleted-link",b("hide deleted"))))}if(p.length){o.push((!this.showHidden)?([p.length,m("toggle-hidden-link",b("hidden"))].join(" ")):(m("toggle-hidden-link",b("hide hidden"))))}return n.find(".subtitle").html(o.join(", "))},_renderTags:function(l){var m=this;this.tagsEditor=new j.TagsEditor({model:this.model,el:l.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){m.toggleHDATagEditors(true,m.fxSpeed)},onhide:function(){m.toggleHDATagEditors(false,m.fxSpeed)},$activator:faIconButton({title:b("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(l.find(".controls .actions"))})},_renderAnnotation:function(l){var m=this;this.annotationEditor=new a.AnnotationEditor({model:this.model,el:l.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){m.toggleHDAAnnotationEditors(true,m.fxSpeed)},onhide:function(){m.toggleHDAAnnotationEditors(false,m.fxSpeed)},$activator:faIconButton({title:b("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(l.find(".controls .actions"))})},_setUpBehaviors:function(l){l=l||this.$el;i.prototype._setUpBehaviors.call(this,l);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new PopupMenu(l.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var m=this,n=".controls .name";l.find(n).attr("title",b("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(o){var p=m.model.get("name");if(o&&o!==p){m.$el.find(n).text(o);m.model.save({name:o}).fail(function(){m.$el.find(n).text(m.model.previous("name"))})}else{m.$el.find(n).text(p)}}})},_getActions:function(){var l=this,m=[{html:b("Hide datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.hide;l.getSelectedModels().ajaxQueue(n)}},{html:b("Unhide datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.unhide;l.getSelectedModels().ajaxQueue(n)}},{html:b("Delete datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype["delete"];l.getSelectedModels().ajaxQueue(n)}},{html:b("Undelete datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.undelete;l.getSelectedModels().ajaxQueue(n)}}];if(l.purgeAllowed){m.push({html:b("Permanently delete datasets"),func:function(){if(confirm(b("This will permanently remove the data in your datasets. Are you sure?"))){var n=d.HistoryDatasetAssociation.prototype.purge;l.getSelectedModels().ajaxQueue(n)}}})}m.push({html:b("Build Dataset List"),func:function(){l.getSelectedModels().promoteToHistoryDatasetCollection(l.model,"list")}});m.push({html:b("Build Dataset Pair"),func:function(){l.getSelectedModels().promoteToHistoryDatasetCollection(l.model,"paired")}});m.push({html:b("Build List of Dataset Pairs"),func:_.bind(l._showPairedCollectionModal,l)});return m},_showPairedCollectionModal:function(){var l=this,m=l.getSelectedModels().toJSON().filter(function(n){return n.history_content_type==="dataset"&&n.state===k.OK});if(m.length){require(["mvc/collection/paired-collection-creator"],function(n){window.creator=n.pairedCollectionCreatorModal(m,{historyId:l.model.id})})}else{}},_attachItems:function(l){this.$list(l).append(this.views.reverse().map(function(m){return m.$el}));return this},_attachView:function(m){var l=this;l.views.unshift(m);l.$list().prepend(m.render(0).$el.hide());m.$el.slideDown(l.fxSpeed)},_getItemViewOptions:function(m){var l=i.prototype._getItemViewOptions.call(this,m);_.extend(l,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return l},_handleHdaDeletionChange:function(l){this._renderCounts();if(l.get("deleted")&&!this.showDeleted){this.removeItemView(l)}},_handleHdaVisibleChange:function(l){this._renderCounts();if(l.hidden()&&!this.storage.showHidden){this.removeItemView(l)}},toggleHDATagEditors:function(l){var m=Array.prototype.slice.call(arguments,1);_.each(this.views,function(n){if(n.tagsEditor){n.tagsEditor.toggle.apply(n.tagsEditor,m)}})},toggleHDAAnnotationEditors:function(l){var m=Array.prototype.slice.call(arguments,1);_.each(this.views,function(n){if(n.annotationEditor){n.annotationEditor.toggle.apply(n.annotationEditor,m)}})},events:_.extend(_.clone(i.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(l){this.toggleShowDeleted()},"click .toggle-hidden-link":function(l){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var m={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var n=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),n]);for(var l in m){if(m.hasOwnProperty(l)){n.on(l,m[l])}}return this},_renderDropTarget:function(){return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(b("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(l){l.preventDefault();l.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(l){l.preventDefault();l.stopPropagation()},dragleave:function(l){l.preventDefault();l.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(n){n.preventDefault();n.dataTransfer.dropEffect="move";var l=this,o=n.dataTransfer.getData("text");try{o=JSON.parse(o)}catch(m){this.warn("error parsing JSON from drop:",o)}this.trigger("droptarget:drop",n,o,l);return false},dataDropped:function(m){var l=this;if(_.isObject(m)&&m.model_class==="HistoryDatasetAssociation"&&m.id){return l.model.contents.copy(m.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:e}});
\ No newline at end of file
+define(["mvc/history/history-panel","mvc/history/history-contents","mvc/dataset/states","mvc/history/hda-model","mvc/history/hda-li-edit","mvc/history/hdca-li-edit","mvc/tags","mvc/annotations","utils/localization"],function(f,h,k,d,c,g,j,a,b){var i=f.HistoryPanel;var e=i.extend({HDAViewClass:c.HDAListItemEdit,HDCAViewClass:g.HDCAListItemEdit,initialize:function(l){l=l||{};i.prototype.initialize.call(this,l);this.tagsEditor=null;this.annotationEditor=null;this.purgeAllowed=l.purgeAllowed||false;this.annotationEditorShown=l.annotationEditorShown||false;this.tagsEditorShown=l.tagsEditorShown||false;this.multiselectActions=l.multiselectActions||this._getActions()},_setUpListeners:function(){i.prototype._setUpListeners.call(this);this.on("drop",function(l,m){this.dataDropped(m);this.dropTargetOff()})},_setUpCollectionListeners:function(){i.prototype._setUpCollectionListeners.call(this);this.collection.on("change:deleted",this._handleHdaDeletionChange,this);this.collection.on("change:visible",this._handleHdaVisibleChange,this);this.collection.on("change:purged",function(l){this.model.fetch()},this);return this},_setUpModelListeners:function(){i.prototype._setUpModelListeners.call(this);this.model.on("change:nice_size",this.updateHistoryDiskSize,this);return this},_buildNewRender:function(){var l=i.prototype._buildNewRender.call(this);if(!this.model){return l}if(Galaxy&&Galaxy.currUser&&Galaxy.currUser.id&&Galaxy.currUser.id===this.model.get("user_id")){this._renderTags(l);this._renderAnnotation(l)}return l},renderItems:function(m){var l=i.prototype.renderItems.call(this,m);this._renderCounts(m);return l},_renderCounts:function(n){function m(q,r){return['<a class="',q,'" href="javascript:void(0);">',r,"</a>"].join("")}n=n||this.$el;var l=this.collection.where({deleted:true}),p=this.collection.where({visible:false}),o=[];if(this.views.length){o.push([this.views.length,b("shown")].join(" "))}if(l.length){o.push((!this.showDeleted)?([l.length,m("toggle-deleted-link",b("deleted"))].join(" ")):(m("toggle-deleted-link",b("hide deleted"))))}if(p.length){o.push((!this.showHidden)?([p.length,m("toggle-hidden-link",b("hidden"))].join(" ")):(m("toggle-hidden-link",b("hide hidden"))))}return n.find("> .controls .subtitle").html(o.join(", "))},_renderTags:function(l){var m=this;this.tagsEditor=new j.TagsEditor({model:this.model,el:l.find(".controls .tags-display"),onshowFirstTime:function(){this.render()},onshow:function(){m.toggleHDATagEditors(true,m.fxSpeed)},onhide:function(){m.toggleHDATagEditors(false,m.fxSpeed)},$activator:faIconButton({title:b("Edit history tags"),classes:"history-tag-btn",faIcon:"fa-tags"}).appendTo(l.find(".controls .actions"))})},_renderAnnotation:function(l){var m=this;this.annotationEditor=new a.AnnotationEditor({model:this.model,el:l.find(".controls .annotation-display"),onshowFirstTime:function(){this.render()},onshow:function(){m.toggleHDAAnnotationEditors(true,m.fxSpeed)},onhide:function(){m.toggleHDAAnnotationEditors(false,m.fxSpeed)},$activator:faIconButton({title:b("Edit history annotation"),classes:"history-annotate-btn",faIcon:"fa-comment"}).appendTo(l.find(".controls .actions"))})},_setUpBehaviors:function(l){l=l||this.$el;i.prototype._setUpBehaviors.call(this,l);if(!this.model){return}if(this.multiselectActions.length){this.actionsPopup=new PopupMenu(l.find(".list-action-popup-btn"),this.multiselectActions)}if((!Galaxy.currUser||Galaxy.currUser.isAnonymous())||(Galaxy.currUser.id!==this.model.get("user_id"))){return}var m=this,n=".controls .name";l.find(n).attr("title",b("Click to rename history")).tooltip({placement:"bottom"}).make_text_editable({on_finish:function(o){var p=m.model.get("name");if(o&&o!==p){m.$el.find(n).text(o);m.model.save({name:o}).fail(function(){m.$el.find(n).text(m.model.previous("name"))})}else{m.$el.find(n).text(p)}}})},_getActions:function(){var l=this,m=[{html:b("Hide datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.hide;l.getSelectedModels().ajaxQueue(n)}},{html:b("Unhide datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.unhide;l.getSelectedModels().ajaxQueue(n)}},{html:b("Delete datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype["delete"];l.getSelectedModels().ajaxQueue(n)}},{html:b("Undelete datasets"),func:function(){var n=d.HistoryDatasetAssociation.prototype.undelete;l.getSelectedModels().ajaxQueue(n)}}];if(l.purgeAllowed){m.push({html:b("Permanently delete datasets"),func:function(){if(confirm(b("This will permanently remove the data in your datasets. Are you sure?"))){var n=d.HistoryDatasetAssociation.prototype.purge;l.getSelectedModels().ajaxQueue(n)}}})}m.push({html:b("Build Dataset List"),func:function(){l.getSelectedModels().promoteToHistoryDatasetCollection(l.model,"list")}});m.push({html:b("Build Dataset Pair"),func:function(){l.getSelectedModels().promoteToHistoryDatasetCollection(l.model,"paired")}});m.push({html:b("Build List of Dataset Pairs"),func:_.bind(l._showPairedCollectionModal,l)});return m},_showPairedCollectionModal:function(){var l=this,m=l.getSelectedModels().toJSON().filter(function(n){return n.history_content_type==="dataset"&&n.state===k.OK});if(m.length){require(["mvc/collection/paired-collection-creator"],function(n){window.creator=n.pairedCollectionCreatorModal(m,{historyId:l.model.id})})}else{}},_attachItems:function(l){this.$list(l).append(this.views.reverse().map(function(m){return m.$el}));return this},_attachView:function(m){var l=this;l.views.unshift(m);l.$list().prepend(m.render(0).$el.hide());m.$el.slideDown(l.fxSpeed)},_getItemViewOptions:function(m){var l=i.prototype._getItemViewOptions.call(this,m);_.extend(l,{purgeAllowed:this.purgeAllowed,tagsEditorShown:(this.tagsEditor&&!this.tagsEditor.hidden),annotationEditorShown:(this.annotationEditor&&!this.annotationEditor.hidden)});return l},_handleHdaDeletionChange:function(l){this._renderCounts();if(l.get("deleted")&&!this.showDeleted){this.removeItemView(l)}},_handleHdaVisibleChange:function(l){this._renderCounts();if(l.hidden()&&!this.storage.showHidden){this.removeItemView(l)}},toggleHDATagEditors:function(l){var m=Array.prototype.slice.call(arguments,1);_.each(this.views,function(n){if(n.tagsEditor){n.tagsEditor.toggle.apply(n.tagsEditor,m)}})},toggleHDAAnnotationEditors:function(l){var m=Array.prototype.slice.call(arguments,1);_.each(this.views,function(n){if(n.annotationEditor){n.annotationEditor.toggle.apply(n.annotationEditor,m)}})},events:_.extend(_.clone(i.prototype.events),{"click .show-selectors-btn":"toggleSelectors","click .toggle-deleted-link":function(l){this.toggleShowDeleted()},"click .toggle-hidden-link":function(l){this.toggleShowHidden()}}),updateHistoryDiskSize:function(){this.$el.find(".history-size").text(this.model.get("nice_size"))},dropTargetOn:function(){if(this.dropTarget){return this}this.dropTarget=true;var m={dragenter:_.bind(this.dragenter,this),dragover:_.bind(this.dragover,this),dragleave:_.bind(this.dragleave,this),drop:_.bind(this.drop,this)};var n=this._renderDropTarget();this.$list().before([this._renderDropTargetHelp(),n]);for(var l in m){if(m.hasOwnProperty(l)){n.on(l,m[l])}}return this},_renderDropTarget:function(){return $("<div/>").addClass("history-drop-target").css({height:"64px",margin:"0px 10px 10px 10px",border:"1px dashed black","border-radius":"3px"})},_renderDropTargetHelp:function(){return $("<div/>").addClass("history-drop-target-help").css({margin:"10px 10px 4px 10px",color:"grey","font-size":"80%","font-style":"italic"}).text(b("Drag datasets here to copy them to the current history"))},dropTargetOff:function(){if(!this.dropTarget){return this}this.dropTarget=false;this.$(".history-drop-target").remove();this.$(".history-drop-target-help").remove();return this},dropTargetToggle:function(){if(this.dropTarget){this.dropTargetOff()}else{this.dropTargetOn()}return this},dragenter:function(l){l.preventDefault();l.stopPropagation();this.$(".history-drop-target").css("border","2px solid black")},dragover:function(l){l.preventDefault();l.stopPropagation()},dragleave:function(l){l.preventDefault();l.stopPropagation();this.$(".history-drop-target").css("border","1px dashed black")},drop:function(n){n.preventDefault();n.dataTransfer.dropEffect="move";var l=this,o=n.dataTransfer.getData("text");try{o=JSON.parse(o)}catch(m){this.warn("error parsing JSON from drop:",o)}this.trigger("droptarget:drop",n,o,l);return false},dataDropped:function(m){var l=this;if(_.isObject(m)&&m.model_class==="HistoryDatasetAssociation"&&m.id){return l.model.contents.copy(m.id)}return jQuery.when()},toString:function(){return"HistoryPanelEdit("+((this.model)?(this.model.get("name")):(""))+")"}});return{HistoryPanelEdit:e}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
Branch: refs/heads/master
Home: https://github.com/galaxyproject/usegalaxy-playbook
Commit: 566fdc97d83df8b74597e6e8b752a34ca6465599
https://github.com/galaxyproject/usegalaxy-playbook/commit/566fdc97d83df8b7…
Author: Anton Nekrutenko <anekrut(a)gmail.com>
Date: 2014-10-17 (Fri, 17 Oct 2014)
Changed paths:
M files/galaxy/test.galaxyproject.org/config/tool_conf.xml
Log Message:
-----------
cleanup of tool_conf.xml
1
0
commit/galaxy-central: guerler: ToolForm: Improve validation
by commits-noreply@bitbucket.org 17 Oct '14
by commits-noreply@bitbucket.org 17 Oct '14
17 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/720ea1796c26/
Changeset: 720ea1796c26
User: guerler
Date: 2014-10-17 18:11:25+00:00
Summary: ToolForm: Improve validation
Affected #: 3 files
diff -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 -r 720ea1796c26574d642e02db3583085c348a4474 client/galaxy/scripts/mvc/tools/tools-jobs.js
--- a/client/galaxy/scripts/mvc/tools/tools-jobs.js
+++ b/client/galaxy/scripts/mvc/tools/tools-jobs.js
@@ -96,7 +96,8 @@
var job_inputs = job_def.inputs;
// counter for values declared in batch mode
- var n_values = -1;
+ var batch_n = -1;
+ var batch_src = null;
// validation
for (var job_input_id in job_inputs) {
@@ -116,12 +117,33 @@
// check if input field is in batch mode
if (input_value.batch) {
+ // get values
var n = input_value.values.length;
- if (n_values === -1) {
- n_values = n;
+
+ // get source
+ var src = null;
+ if (n > 0) {
+ src = input_value.values[0] && input_value.values[0].src;
+ }
+
+ // check source type
+ if (src) {
+ if (batch_src === null) {
+ batch_src = src;
+ } else {
+ if (batch_src !== src) {
+ this._foundError(input_id, 'Please select either dataset or dataset list fields for all batch mode fields.');
+ return false;
+ }
+ }
+ }
+
+ // check number of inputs
+ if (batch_n === -1) {
+ batch_n = n;
} else {
- if (n_values !== n) {
- this._foundError(input_id, 'Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>' + n + '</b> selection(s) while a previous field contains <b>' + n_values + '</b>.');
+ if (batch_n !== n) {
+ this._foundError(input_id, 'Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>' + n + '</b> selection(s) while a previous field contains <b>' + batch_n + '</b>.');
return false;
}
}
diff -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 -r 720ea1796c26574d642e02db3583085c348a4474 static/scripts/mvc/tools/tools-jobs.js
--- a/static/scripts/mvc/tools/tools-jobs.js
+++ b/static/scripts/mvc/tools/tools-jobs.js
@@ -96,7 +96,8 @@
var job_inputs = job_def.inputs;
// counter for values declared in batch mode
- var n_values = -1;
+ var batch_n = -1;
+ var batch_src = null;
// validation
for (var job_input_id in job_inputs) {
@@ -116,12 +117,33 @@
// check if input field is in batch mode
if (input_value.batch) {
+ // get values
var n = input_value.values.length;
- if (n_values === -1) {
- n_values = n;
+
+ // get source
+ var src = null;
+ if (n > 0) {
+ src = input_value.values[0] && input_value.values[0].src;
+ }
+
+ // check source type
+ if (src) {
+ if (batch_src === null) {
+ batch_src = src;
+ } else {
+ if (batch_src !== src) {
+ this._foundError(input_id, 'Please select either dataset or dataset list fields for all batch mode fields.');
+ return false;
+ }
+ }
+ }
+
+ // check number of inputs
+ if (batch_n === -1) {
+ batch_n = n;
} else {
- if (n_values !== n) {
- this._foundError(input_id, 'Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>' + n + '</b> selection(s) while a previous field contains <b>' + n_values + '</b>.');
+ if (batch_n !== n) {
+ this._foundError(input_id, 'Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>' + n + '</b> selection(s) while a previous field contains <b>' + batch_n + '</b>.');
return false;
}
}
diff -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 -r 720ea1796c26574d642e02db3583085c348a4474 static/scripts/packed/mvc/tools/tools-jobs.js
--- a/static/scripts/packed/mvc/tools/tools-jobs.js
+++ b/static/scripts/packed/mvc/tools/tools-jobs.js
@@ -1,1 +1,1 @@
-define(["utils/utils","mvc/tools/tools-template"],function(b,a){return Backbone.Model.extend({initialize:function(d,c){this.app=d;this.options=b.merge(c,this.optionsDefault)},submit:function(){var c=this;var d={tool_id:this.app.options.id,inputs:this.app.tree.finalize()};this.app.reset();if(!this._validation(d)){console.debug("tools-jobs::submit - Submission canceled. Validation failed.");return}console.debug(d);this.app.modal.show({title:"Please wait...",body:"progress",closing_events:true,buttons:{Close:function(){c.app.modal.hide()}}});b.request({type:"POST",url:galaxy_config.root+"api/tools",data:d,success:function(e){c.app.modal.hide();c.app.message(a.success(e));c._refreshHdas()},error:function(e,g){c.app.modal.hide();if(e&&e.message&&e.message.data){var h=c.app.tree.matchResponse(e.message.data);for(var f in h){c._foundError(f,h[f]);break}}else{console.debug(e);c.app.modal.show({title:"Job submission failed",body:a.error(d),buttons:{Close:function(){c.app.modal.hide()}}})}}})},_foundError:function(c,d){var e=this.app.element_list[c];e.error(d||"Please verify this parameter.");$(this.app.container).animate({scrollTop:e.$el.offset().top-20},500)},_validation:function(g){var c=g.inputs;var k=-1;for(var i in c){var e=c[i];var j=this.app.tree.match(i);var d=this.app.field_list[j];var h=this.app.input_list[j];if(h&&d&&d.validate&&!d.validate()){this._foundError(j);return false}if(e.batch){var f=e.values.length;if(k===-1){k=f}else{if(k!==f){this._foundError(j,"Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>"+f+"</b> selection(s) while a previous field contains <b>"+k+"</b>.");return false}}}}return true},_refreshHdas:function(){if(parent.Galaxy&&parent.Galaxy.currHistoryPanel){parent.Galaxy.currHistoryPanel.refreshContents()}}})});
\ No newline at end of file
+define(["utils/utils","mvc/tools/tools-template"],function(b,a){return Backbone.Model.extend({initialize:function(d,c){this.app=d;this.options=b.merge(c,this.optionsDefault)},submit:function(){var c=this;var d={tool_id:this.app.options.id,inputs:this.app.tree.finalize()};this.app.reset();if(!this._validation(d)){console.debug("tools-jobs::submit - Submission canceled. Validation failed.");return}console.debug(d);this.app.modal.show({title:"Please wait...",body:"progress",closing_events:true,buttons:{Close:function(){c.app.modal.hide()}}});b.request({type:"POST",url:galaxy_config.root+"api/tools",data:d,success:function(e){c.app.modal.hide();c.app.message(a.success(e));c._refreshHdas()},error:function(e,g){c.app.modal.hide();if(e&&e.message&&e.message.data){var h=c.app.tree.matchResponse(e.message.data);for(var f in h){c._foundError(f,h[f]);break}}else{console.debug(e);c.app.modal.show({title:"Job submission failed",body:a.error(d),buttons:{Close:function(){c.app.modal.hide()}}})}}})},_foundError:function(c,d){var e=this.app.element_list[c];e.error(d||"Please verify this parameter.");$(this.app.container).animate({scrollTop:e.$el.offset().top-20},500)},_validation:function(h){var d=h.inputs;var m=-1;var i=null;for(var k in d){var f=d[k];var l=this.app.tree.match(k);var e=this.app.field_list[l];var j=this.app.input_list[l];if(j&&e&&e.validate&&!e.validate()){this._foundError(l);return false}if(f.batch){var g=f.values.length;var c=null;if(g>0){c=f.values[0]&&f.values[0].src}if(c){if(i===null){i=c}else{if(i!==c){this._foundError(l,"Please select either dataset or dataset list fields for all batch mode fields.");return false}}}if(m===-1){m=g}else{if(m!==g){this._foundError(l,"Please make sure that you select the same number of inputs for all batch mode fields. This field contains <b>"+g+"</b> selection(s) while a previous field contains <b>"+m+"</b>.");return false}}}}return true},_refreshHdas:function(){if(parent.Galaxy&&parent.Galaxy.currHistoryPanel){parent.Galaxy.currHistoryPanel.refreshContents()}}})});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: ToolForm: Fix collection selection
by commits-noreply@bitbucket.org 17 Oct '14
by commits-noreply@bitbucket.org 17 Oct '14
17 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/d8163f6a8f51/
Changeset: d8163f6a8f51
User: guerler
Date: 2014-10-17 17:52:21+00:00
Summary: ToolForm: Fix collection selection
Affected #: 3 files
diff -r 7cc092b92c966053f134caf7ef60077da2349486 -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 client/galaxy/scripts/mvc/tools/tools-content.js
--- a/client/galaxy/scripts/mvc/tools/tools-content.js
+++ b/client/galaxy/scripts/mvc/tools/tools-content.js
@@ -72,7 +72,7 @@
var content = this.summary[i];
// check ok state (TODO: should be implemented in the api)
- if (content.state !== 'ok') {
+ if (content.history_content_type === 'dataset' && content.state !== 'ok') {
continue;
}
diff -r 7cc092b92c966053f134caf7ef60077da2349486 -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 static/scripts/mvc/tools/tools-content.js
--- a/static/scripts/mvc/tools/tools-content.js
+++ b/static/scripts/mvc/tools/tools-content.js
@@ -72,7 +72,7 @@
var content = this.summary[i];
// check ok state (TODO: should be implemented in the api)
- if (content.state !== 'ok') {
+ if (content.history_content_type === 'dataset' && content.state !== 'ok') {
continue;
}
diff -r 7cc092b92c966053f134caf7ef60077da2349486 -r d8163f6a8f51ffb44fc8858ae8714f41226d93f8 static/scripts/packed/mvc/tools/tools-content.js
--- a/static/scripts/packed/mvc/tools/tools-content.js
+++ b/static/scripts/packed/mvc/tools/tools-content.js
@@ -1,1 +1,1 @@
-define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(c){this.base_url=galaxy_config.root+"api/histories/"+c.history_id+"/contents";this.datatypes={};this.summary={};var b=this;a.get({url:galaxy_config.root+"api/datatypes/mapping",cache:true,success:function(d){b.datatypes=d;a.get({url:b.base_url+"?deleted=false",success:function(e){b.summary=e;b.summary.sort(function(g,f){return g.hid>f.hid?-1:(g.hid<f.hid?1:0)});console.debug("tools-content::initialize() - Completed.");c.success&&c.success()},error:function(e){console.debug("tools-content::initialize() - Ajax request for summary failed.");console.debug(e)}})},error:function(d){console.debug("tools-content::initialize() - Ajax request for datatypes failed.");console.debug(d)}})},filterType:function(c){c=c||{};var b=[];var g="dataset";if(c.src=="hdca"){g="dataset_collection"}for(var d in this.summary){var e=this.summary[d];if(e.state!=="ok"){continue}var f=false;for(var d in c.extensions){if(this._matchType(c.extensions[d],e.extension)){f=true;break}}if((e.history_content_type===g)&&(f||!c.extensions)){b.push(e)}}return b},get:function(b){return _.findWhere(this.summary,b)||{}},getDetails:function(b){if(!b.id||b.id==="null"){b.success&&b.success();return}var c=this.base_url+"/datasets/"+b.id;if(b.src=="hdca"){c=this.base_url+"/dataset_collections/"+b.id}a.get({url:c,success:function(d){b.success&&b.success(d)},error:function(d){b.success&&b.success();console.debug("tools-content::getDetails() - Ajax request for content failed.");console.debug(d)}})},_matchType:function(f,b){var c=this.datatypes.ext_to_class_name[f];if(!c){console.debug("tools-content::_matchType() - Specific target class unavailable. Accepting all formats.");return true}var d=this.datatypes.ext_to_class_name[b];if(!d){console.debug("tools-content::_matchType() - Specific reference class unavailable. Accepting all formats.");return true}var e=this.datatypes.class_to_classes[d];if(e[c]){return true}return false}})});
\ No newline at end of file
+define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(c){this.base_url=galaxy_config.root+"api/histories/"+c.history_id+"/contents";this.datatypes={};this.summary={};var b=this;a.get({url:galaxy_config.root+"api/datatypes/mapping",cache:true,success:function(d){b.datatypes=d;a.get({url:b.base_url+"?deleted=false",success:function(e){b.summary=e;b.summary.sort(function(g,f){return g.hid>f.hid?-1:(g.hid<f.hid?1:0)});console.debug("tools-content::initialize() - Completed.");c.success&&c.success()},error:function(e){console.debug("tools-content::initialize() - Ajax request for summary failed.");console.debug(e)}})},error:function(d){console.debug("tools-content::initialize() - Ajax request for datatypes failed.");console.debug(d)}})},filterType:function(c){c=c||{};var b=[];var g="dataset";if(c.src=="hdca"){g="dataset_collection"}for(var d in this.summary){var e=this.summary[d];if(e.history_content_type==="dataset"&&e.state!=="ok"){continue}var f=false;for(var d in c.extensions){if(this._matchType(c.extensions[d],e.extension)){f=true;break}}if((e.history_content_type===g)&&(f||!c.extensions)){b.push(e)}}return b},get:function(b){return _.findWhere(this.summary,b)||{}},getDetails:function(b){if(!b.id||b.id==="null"){b.success&&b.success();return}var c=this.base_url+"/datasets/"+b.id;if(b.src=="hdca"){c=this.base_url+"/dataset_collections/"+b.id}a.get({url:c,success:function(d){b.success&&b.success(d)},error:function(d){b.success&&b.success();console.debug("tools-content::getDetails() - Ajax request for content failed.");console.debug(d)}})},_matchType:function(f,b){var c=this.datatypes.ext_to_class_name[f];if(!c){console.debug("tools-content::_matchType() - Specific target class unavailable. Accepting all formats.");return true}var d=this.datatypes.ext_to_class_name[b];if(!d){console.debug("tools-content::_matchType() - Specific reference class unavailable. Accepting all formats.");return true}var e=this.datatypes.class_to_classes[d];if(e[c]){return true}return false}})});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: ToolForm: Improve dataset filtering
by commits-noreply@bitbucket.org 17 Oct '14
by commits-noreply@bitbucket.org 17 Oct '14
17 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/7cc092b92c96/
Changeset: 7cc092b92c96
User: guerler
Date: 2014-10-17 17:32:24+00:00
Summary: ToolForm: Improve dataset filtering
Affected #: 12 files
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 client/galaxy/scripts/mvc/tools/tools-content.js
--- a/client/galaxy/scripts/mvc/tools/tools-content.js
+++ b/client/galaxy/scripts/mvc/tools/tools-content.js
@@ -22,7 +22,7 @@
// get history summary
Utils.get({
- url : self.base_url + '?deleted=false&state=ok',
+ url : self.base_url + '?deleted=false',
success : function(response) {
// backup summary
self.summary = response;
@@ -71,6 +71,11 @@
for (var i in this.summary) {
var content = this.summary[i];
+ // check ok state (TODO: should be implemented in the api)
+ if (content.state !== 'ok') {
+ continue;
+ }
+
// match datatypes
var found = false;
for (var i in options.extensions) {
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 client/galaxy/scripts/mvc/tools/tools-select-content.js
--- a/client/galaxy/scripts/mvc/tools/tools-select-content.js
+++ b/client/galaxy/scripts/mvc/tools/tools-select-content.js
@@ -126,6 +126,12 @@
this.select_collection.value(list[0]);
break;
}
+
+ // check if value has been set
+ var select = this._select();
+ if (!select.validate()) {
+ select.value(select.first());
+ }
} catch (err) {
console.debug('tools-select-content::value() - Skipped.');
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 client/galaxy/scripts/mvc/ui/ui-options.js
--- a/client/galaxy/scripts/mvc/ui/ui-options.js
+++ b/client/galaxy/scripts/mvc/ui/ui-options.js
@@ -114,7 +114,7 @@
current = [current];
}
for (var i in current) {
- if (current[i] === 'null') {
+ if ([null, 'null', undefined].indexOf(current[i]) > -1) {
return false;
}
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 client/galaxy/scripts/mvc/ui/ui-select-default.js
--- a/client/galaxy/scripts/mvc/ui/ui-select-default.js
+++ b/client/galaxy/scripts/mvc/ui/ui-select-default.js
@@ -91,7 +91,7 @@
current = [current];
}
for (var i in current) {
- if (current[i] === 'null') {
+ if ([null, 'null', undefined].indexOf(current[i]) > -1) {
return false;
}
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/mvc/tools/tools-content.js
--- a/static/scripts/mvc/tools/tools-content.js
+++ b/static/scripts/mvc/tools/tools-content.js
@@ -22,7 +22,7 @@
// get history summary
Utils.get({
- url : self.base_url + '?deleted=false&state=ok',
+ url : self.base_url + '?deleted=false',
success : function(response) {
// backup summary
self.summary = response;
@@ -71,6 +71,11 @@
for (var i in this.summary) {
var content = this.summary[i];
+ // check ok state (TODO: should be implemented in the api)
+ if (content.state !== 'ok') {
+ continue;
+ }
+
// match datatypes
var found = false;
for (var i in options.extensions) {
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/mvc/tools/tools-select-content.js
--- a/static/scripts/mvc/tools/tools-select-content.js
+++ b/static/scripts/mvc/tools/tools-select-content.js
@@ -126,6 +126,12 @@
this.select_collection.value(list[0]);
break;
}
+
+ // check if value has been set
+ var select = this._select();
+ if (!select.validate()) {
+ select.value(select.first());
+ }
} catch (err) {
console.debug('tools-select-content::value() - Skipped.');
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/mvc/ui/ui-options.js
--- a/static/scripts/mvc/ui/ui-options.js
+++ b/static/scripts/mvc/ui/ui-options.js
@@ -114,7 +114,7 @@
current = [current];
}
for (var i in current) {
- if (current[i] === 'null') {
+ if ([null, 'null', undefined].indexOf(current[i]) > -1) {
return false;
}
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/mvc/ui/ui-select-default.js
--- a/static/scripts/mvc/ui/ui-select-default.js
+++ b/static/scripts/mvc/ui/ui-select-default.js
@@ -91,7 +91,7 @@
current = [current];
}
for (var i in current) {
- if (current[i] === 'null') {
+ if ([null, 'null', undefined].indexOf(current[i]) > -1) {
return false;
}
}
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/packed/mvc/tools/tools-content.js
--- a/static/scripts/packed/mvc/tools/tools-content.js
+++ b/static/scripts/packed/mvc/tools/tools-content.js
@@ -1,1 +1,1 @@
-define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(c){this.base_url=galaxy_config.root+"api/histories/"+c.history_id+"/contents";this.datatypes={};this.summary={};var b=this;a.get({url:galaxy_config.root+"api/datatypes/mapping",cache:true,success:function(d){b.datatypes=d;a.get({url:b.base_url+"?deleted=false&state=ok",success:function(e){b.summary=e;b.summary.sort(function(g,f){return g.hid>f.hid?-1:(g.hid<f.hid?1:0)});console.debug("tools-content::initialize() - Completed.");c.success&&c.success()},error:function(e){console.debug("tools-content::initialize() - Ajax request for summary failed.");console.debug(e)}})},error:function(d){console.debug("tools-content::initialize() - Ajax request for datatypes failed.");console.debug(d)}})},filterType:function(c){c=c||{};var b=[];var g="dataset";if(c.src=="hdca"){g="dataset_collection"}for(var d in this.summary){var e=this.summary[d];var f=false;for(var d in c.extensions){if(this._matchType(c.extensions[d],e.extension)){f=true;break}}if((e.history_content_type===g)&&(f||!c.extensions)){b.push(e)}}return b},get:function(b){return _.findWhere(this.summary,b)||{}},getDetails:function(b){if(!b.id||b.id==="null"){b.success&&b.success();return}var c=this.base_url+"/datasets/"+b.id;if(b.src=="hdca"){c=this.base_url+"/dataset_collections/"+b.id}a.get({url:c,success:function(d){b.success&&b.success(d)},error:function(d){b.success&&b.success();console.debug("tools-content::getDetails() - Ajax request for content failed.");console.debug(d)}})},_matchType:function(f,b){var c=this.datatypes.ext_to_class_name[f];if(!c){console.debug("tools-content::_matchType() - Specific target class unavailable. Accepting all formats.");return true}var d=this.datatypes.ext_to_class_name[b];if(!d){console.debug("tools-content::_matchType() - Specific reference class unavailable. Accepting all formats.");return true}var e=this.datatypes.class_to_classes[d];if(e[c]){return true}return false}})});
\ No newline at end of file
+define(["utils/utils"],function(a){return Backbone.Model.extend({initialize:function(c){this.base_url=galaxy_config.root+"api/histories/"+c.history_id+"/contents";this.datatypes={};this.summary={};var b=this;a.get({url:galaxy_config.root+"api/datatypes/mapping",cache:true,success:function(d){b.datatypes=d;a.get({url:b.base_url+"?deleted=false",success:function(e){b.summary=e;b.summary.sort(function(g,f){return g.hid>f.hid?-1:(g.hid<f.hid?1:0)});console.debug("tools-content::initialize() - Completed.");c.success&&c.success()},error:function(e){console.debug("tools-content::initialize() - Ajax request for summary failed.");console.debug(e)}})},error:function(d){console.debug("tools-content::initialize() - Ajax request for datatypes failed.");console.debug(d)}})},filterType:function(c){c=c||{};var b=[];var g="dataset";if(c.src=="hdca"){g="dataset_collection"}for(var d in this.summary){var e=this.summary[d];if(e.state!=="ok"){continue}var f=false;for(var d in c.extensions){if(this._matchType(c.extensions[d],e.extension)){f=true;break}}if((e.history_content_type===g)&&(f||!c.extensions)){b.push(e)}}return b},get:function(b){return _.findWhere(this.summary,b)||{}},getDetails:function(b){if(!b.id||b.id==="null"){b.success&&b.success();return}var c=this.base_url+"/datasets/"+b.id;if(b.src=="hdca"){c=this.base_url+"/dataset_collections/"+b.id}a.get({url:c,success:function(d){b.success&&b.success(d)},error:function(d){b.success&&b.success();console.debug("tools-content::getDetails() - Ajax request for content failed.");console.debug(d)}})},_matchType:function(f,b){var c=this.datatypes.ext_to_class_name[f];if(!c){console.debug("tools-content::_matchType() - Specific target class unavailable. Accepting all formats.");return true}var d=this.datatypes.ext_to_class_name[b];if(!d){console.debug("tools-content::_matchType() - Specific reference class unavailable. Accepting all formats.");return true}var e=this.datatypes.class_to_classes[d];if(e[c]){return true}return false}})});
\ No newline at end of file
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/packed/mvc/tools/tools-select-content.js
--- a/static/scripts/packed/mvc/tools/tools-select-content.js
+++ b/static/scripts/packed/mvc/tools/tools-select-content.js
@@ -1,1 +1,1 @@
-define(["utils/utils","mvc/ui/ui-misc","mvc/ui/ui-tabs","mvc/tools/tools-template"],function(c,e,b,a){var d=Backbone.View.extend({initialize:function(n,h){this.options=h;var g=this;this.setElement("<div/>");this.current="hda";this.button_new=new e.RadioButton.View({value:this.current,data:[{icon:"fa-file-o",label:"Select datasets",value:"hda"},{icon:"fa-files-o",label:"Select a collection",value:"hdca"}],onchange:function(i){g.current=i;g.refresh();g.trigger("change")}});var l=n.content.filterType({src:"hda",extensions:h.extensions});var k=[];for(var j in l){k.push({label:l[j].hid+": "+l[j].name,value:l[j].id})}this.select_datasets=new e.Select.View({multiple:true,data:k,value:k[0]&&k[0].value,onchange:function(){g.trigger("change")}});var m=n.content.filterType({src:"hdca",extensions:h.extensions});var f=[];for(var j in m){f.push({label:m[j].hid+": "+m[j].name,value:m[j].id})}this.select_collection=new e.Select.View({data:f,value:f[0]&&f[0].value,onchange:function(){g.trigger("change")}});this.$el.append(c.wrap(this.button_new.$el));this.$el.append(this.select_datasets.$el);this.$el.append(this.select_collection.$el);if(!this.options.multiple){this.$el.append(a.batchMode())}this.refresh();this.on("change",function(){if(h.onchange){h.onchange(g.value())}})},value:function(l){if(l!==undefined){try{this.current=l.values[0].src;this.refresh();var k=[];for(var g in l.values){k.push(l.values[g].id)}switch(this.current){case"hda":this.select_datasets.value(k);break;case"hdca":this.select_collection.value(k[0]);break}}catch(j){console.debug("tools-select-content::value() - Skipped.")}}var h=this._select().value();if(!(h instanceof Array)){h=[h]}var f={batch:!this.options.multiple,values:[]};for(var g in h){f.values.push({id:h[g],src:this.current})}return f},validate:function(){return this._select().validate()},refresh:function(){switch(this.current){case"hda":this.select_datasets.$el.fadeIn();this.select_collection.$el.hide();break;case"hdca":this.select_datasets.$el.hide();this.select_collection.$el.fadeIn();break}},_select:function(){switch(this.current){case"hdca":return this.select_collection;default:return this.select_datasets}}});return{View:d}});
\ No newline at end of file
+define(["utils/utils","mvc/ui/ui-misc","mvc/ui/ui-tabs","mvc/tools/tools-template"],function(c,e,b,a){var d=Backbone.View.extend({initialize:function(n,h){this.options=h;var g=this;this.setElement("<div/>");this.current="hda";this.button_new=new e.RadioButton.View({value:this.current,data:[{icon:"fa-file-o",label:"Select datasets",value:"hda"},{icon:"fa-files-o",label:"Select a collection",value:"hdca"}],onchange:function(i){g.current=i;g.refresh();g.trigger("change")}});var l=n.content.filterType({src:"hda",extensions:h.extensions});var k=[];for(var j in l){k.push({label:l[j].hid+": "+l[j].name,value:l[j].id})}this.select_datasets=new e.Select.View({multiple:true,data:k,value:k[0]&&k[0].value,onchange:function(){g.trigger("change")}});var m=n.content.filterType({src:"hdca",extensions:h.extensions});var f=[];for(var j in m){f.push({label:m[j].hid+": "+m[j].name,value:m[j].id})}this.select_collection=new e.Select.View({data:f,value:f[0]&&f[0].value,onchange:function(){g.trigger("change")}});this.$el.append(c.wrap(this.button_new.$el));this.$el.append(this.select_datasets.$el);this.$el.append(this.select_collection.$el);if(!this.options.multiple){this.$el.append(a.batchMode())}this.refresh();this.on("change",function(){if(h.onchange){h.onchange(g.value())}})},value:function(m){if(m!==undefined){try{this.current=m.values[0].src;this.refresh();var l=[];for(var h in m.values){l.push(m.values[h].id)}switch(this.current){case"hda":this.select_datasets.value(l);break;case"hdca":this.select_collection.value(l[0]);break}var g=this._select();if(!g.validate()){g.value(g.first())}}catch(k){console.debug("tools-select-content::value() - Skipped.")}}var j=this._select().value();if(!(j instanceof Array)){j=[j]}var f={batch:!this.options.multiple,values:[]};for(var h in j){f.values.push({id:j[h],src:this.current})}return f},validate:function(){return this._select().validate()},refresh:function(){switch(this.current){case"hda":this.select_datasets.$el.fadeIn();this.select_collection.$el.hide();break;case"hdca":this.select_datasets.$el.hide();this.select_collection.$el.fadeIn();break}},_select:function(){switch(this.current){case"hdca":return this.select_collection;default:return this.select_datasets}}});return{View:d}});
\ No newline at end of file
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/packed/mvc/ui/ui-options.js
--- a/static/scripts/packed/mvc/ui/ui-options.js
+++ b/static/scripts/packed/mvc/ui/ui-options.js
@@ -1,1 +1,1 @@
-define(["utils/utils"],function(b){var a=Backbone.View.extend({initialize:function(g){this.optionsDefault={value:[],visible:true,data:[],id:b.uuid(),empty:"No data available"};this.options=b.merge(g,this.optionsDefault);this.setElement("<div/>");this.$error=$(this._templateError(g));this.$options=$(this._template(g));this.$el.append(this.$error);this.$el.append(this.$options);if(!this.options.visible){this.$el.hide()}this.update(this.options.data);if(this.options.value){this.value(this.options.value)}var f=this;this.on("change",function(){f._change()})},update:function(g){var j=this._getValue();this.$el.find(".ui-option").remove();for(var h in g){var i=$(this._templateOption(g[h]));i.addClass("ui-option");this.$options.append(i)}var f=this;this.$el.find("input").on("change",function(){f.value(f._getValue());f._change()});this._refresh();this.value(j)},exists:function(g){if(typeof g==="string"){g=[g]}for(var f in g){if(this.$el.find('input[value="'+g[f]+'"]').length>0){return true}}return false},first:function(){var f=this.$el.find("input");if(f.length>0){return f.val()}else{return undefined}},validate:function(){var g=this.value();if(!(g instanceof Array)){g=[g]}for(var f in g){if(g[f]==="null"){return false}}return true},_change:function(){if(this.options.onchange){this.options.onchange(this._getValue())}},_refresh:function(){var f=this.$el.find(".ui-option").length;if(f==0){this.$error.show();this.$options.hide()}else{this.$error.hide();this.$options.css("display","inline-block")}},_getValue:function(){var g=this.$el.find(":checked");if(g.length==0){return"null"}if(this.options.multiple){var f=[];g.each(function(){f.push($(this).val())});return f}else{return g.val()}},_templateError:function(f){return'<div class="ui-error" style="display: none;">'+f.empty+"</div>"}});var d={};d.View=a.extend({initialize:function(f){a.prototype.initialize.call(this,f)},value:function(f){if(typeof f==="string"){f=[f]}if(f!==undefined){this.$el.find("input").prop("checked",false);for(var g in f){this.$el.find("input[value="+f[g]+"]").prop("checked",true)}}return this._getValue()},_templateOption:function(f){return'<div><input type="radio" name="'+this.options.id+'" value="'+f.value+'"/>'+f.label+"<br></div>"},_template:function(){return'<div class="ui-options"/>'}});var c={};c.View=d.View.extend({initialize:function(f){f.multiple=true;d.View.prototype.initialize.call(this,f)},_templateOption:function(f){return'<div><input type="checkbox" name="'+this.options.id+'" value="'+f.value+'"/>'+f.label+"<br></div>"}});var e={};e.View=a.extend({initialize:function(f){a.prototype.initialize.call(this,f)},value:function(f){if(f!==undefined){this.$el.find("input").prop("checked",false);this.$el.find("label").removeClass("active");this.$el.find('[value="'+f+'"]').prop("checked",true).closest("label").addClass("active")}return this._getValue()},_templateOption:function(g){var f='<label class="btn btn-default">';if(g.icon){f+='<i class="fa '+g.icon+'"/>'}f+='<input type="radio" name="'+this.options.id+'" value="'+g.value+'">'+g.label+"</label>";return f},_template:function(){return'<div class="btn-group ui-radiobutton" data-toggle="buttons"/>'}});return{Radio:d,RadioButton:e,Checkbox:c}});
\ No newline at end of file
+define(["utils/utils"],function(b){var a=Backbone.View.extend({initialize:function(g){this.optionsDefault={value:[],visible:true,data:[],id:b.uuid(),empty:"No data available"};this.options=b.merge(g,this.optionsDefault);this.setElement("<div/>");this.$error=$(this._templateError(g));this.$options=$(this._template(g));this.$el.append(this.$error);this.$el.append(this.$options);if(!this.options.visible){this.$el.hide()}this.update(this.options.data);if(this.options.value){this.value(this.options.value)}var f=this;this.on("change",function(){f._change()})},update:function(g){var j=this._getValue();this.$el.find(".ui-option").remove();for(var h in g){var i=$(this._templateOption(g[h]));i.addClass("ui-option");this.$options.append(i)}var f=this;this.$el.find("input").on("change",function(){f.value(f._getValue());f._change()});this._refresh();this.value(j)},exists:function(g){if(typeof g==="string"){g=[g]}for(var f in g){if(this.$el.find('input[value="'+g[f]+'"]').length>0){return true}}return false},first:function(){var f=this.$el.find("input");if(f.length>0){return f.val()}else{return undefined}},validate:function(){var g=this.value();if(!(g instanceof Array)){g=[g]}for(var f in g){if([null,"null",undefined].indexOf(g[f])>-1){return false}}return true},_change:function(){if(this.options.onchange){this.options.onchange(this._getValue())}},_refresh:function(){var f=this.$el.find(".ui-option").length;if(f==0){this.$error.show();this.$options.hide()}else{this.$error.hide();this.$options.css("display","inline-block")}},_getValue:function(){var g=this.$el.find(":checked");if(g.length==0){return"null"}if(this.options.multiple){var f=[];g.each(function(){f.push($(this).val())});return f}else{return g.val()}},_templateError:function(f){return'<div class="ui-error" style="display: none;">'+f.empty+"</div>"}});var d={};d.View=a.extend({initialize:function(f){a.prototype.initialize.call(this,f)},value:function(f){if(typeof f==="string"){f=[f]}if(f!==undefined){this.$el.find("input").prop("checked",false);for(var g in f){this.$el.find("input[value="+f[g]+"]").prop("checked",true)}}return this._getValue()},_templateOption:function(f){return'<div><input type="radio" name="'+this.options.id+'" value="'+f.value+'"/>'+f.label+"<br></div>"},_template:function(){return'<div class="ui-options"/>'}});var c={};c.View=d.View.extend({initialize:function(f){f.multiple=true;d.View.prototype.initialize.call(this,f)},_templateOption:function(f){return'<div><input type="checkbox" name="'+this.options.id+'" value="'+f.value+'"/>'+f.label+"<br></div>"}});var e={};e.View=a.extend({initialize:function(f){a.prototype.initialize.call(this,f)},value:function(f){if(f!==undefined){this.$el.find("input").prop("checked",false);this.$el.find("label").removeClass("active");this.$el.find('[value="'+f+'"]').prop("checked",true).closest("label").addClass("active")}return this._getValue()},_templateOption:function(g){var f='<label class="btn btn-default">';if(g.icon){f+='<i class="fa '+g.icon+'"/>'}f+='<input type="radio" name="'+this.options.id+'" value="'+g.value+'">'+g.label+"</label>";return f},_template:function(){return'<div class="btn-group ui-radiobutton" data-toggle="buttons"/>'}});return{Radio:d,RadioButton:e,Checkbox:c}});
\ No newline at end of file
diff -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 -r 7cc092b92c966053f134caf7ef60077da2349486 static/scripts/packed/mvc/ui/ui-select-default.js
--- a/static/scripts/packed/mvc/ui/ui-select-default.js
+++ b/static/scripts/packed/mvc/ui/ui-select-default.js
@@ -1,1 +1,1 @@
-define(["utils/utils"],function(a){var b=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:true,wait:false,multiple:false},initialize:function(d){this.options=a.merge(d,this.optionsDefault);this.setElement(this._template(this.options));this.$select=this.$el.find("#select");this.$icon=this.$el.find("#icon");if(this.options.multiple){this.$select.prop("multiple",true);this.$select.addClass("ui-select-multiple");this.$icon.remove()}else{this.$el.addClass("ui-select")}this.update(this.options.data);if(!this.options.visible){this.hide()}if(this.options.wait){this.wait()}else{this.show()}var c=this;this.$select.on("change",function(){c._change()});this.on("change",function(){c._change()})},value:function(c){if(c!==undefined){this.$select.val(c)}return this.$select.val()},first:function(){var c=this.$select.find("option");if(c.length>0){return c.val()}else{return undefined}},validate:function(){var d=this.value();if(!(d instanceof Array)){d=[d]}for(var c in d){if(d[c]==="null"){return false}}return true},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-caret-down");this.$select.show();this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-spinner fa-spin")},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",false)},disable:function(){this.$select.prop("disabled",true)},add:function(c){this.$select.append(this._templateOption(c));this._refresh()},del:function(c){this.$select.find("option[value="+c+"]").remove();this.$select.trigger("change");this._refresh()},update:function(c){var e=this.$select.val();this.$select.find("option").remove();for(var d in c){this.$select.append(this._templateOption(c[d]))}this._refresh();this.$select.val(e);if(!this.$select.val()){this.$select.val(this.first())}},setOnChange:function(c){this.options.onchange=c},exists:function(c){return this.$select.find('option[value="'+c+'"]').length>0},_change:function(){if(this.options.onchange){this.options.onchange(this.$select.val())}},_refresh:function(){this.$select.find("option[value=null]").remove();var c=this.$select.find("option").length;if(c==0){this.disable();this.$select.append(this._templateOption({value:"null",label:this.options.empty}))}else{this.enable()}},_templateOption:function(c){return'<option value="'+c.value+'">'+c.label+"</option>"},_template:function(c){return'<div id="'+c.id+'"><div class="button"><i id="icon"/></div><select id="select" class="select '+c.cls+" "+c.id+'"></select></div>'}});return{View:b}});
\ No newline at end of file
+define(["utils/utils"],function(a){var b=Backbone.View.extend({optionsDefault:{id:"",cls:"",empty:"No data available",visible:true,wait:false,multiple:false},initialize:function(d){this.options=a.merge(d,this.optionsDefault);this.setElement(this._template(this.options));this.$select=this.$el.find("#select");this.$icon=this.$el.find("#icon");if(this.options.multiple){this.$select.prop("multiple",true);this.$select.addClass("ui-select-multiple");this.$icon.remove()}else{this.$el.addClass("ui-select")}this.update(this.options.data);if(!this.options.visible){this.hide()}if(this.options.wait){this.wait()}else{this.show()}var c=this;this.$select.on("change",function(){c._change()});this.on("change",function(){c._change()})},value:function(c){if(c!==undefined){this.$select.val(c)}return this.$select.val()},first:function(){var c=this.$select.find("option");if(c.length>0){return c.val()}else{return undefined}},validate:function(){var d=this.value();if(!(d instanceof Array)){d=[d]}for(var c in d){if([null,"null",undefined].indexOf(d[c])>-1){return false}}return true},text:function(){return this.$select.find("option:selected").text()},show:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-caret-down");this.$select.show();this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-spinner fa-spin")},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",false)},disable:function(){this.$select.prop("disabled",true)},add:function(c){this.$select.append(this._templateOption(c));this._refresh()},del:function(c){this.$select.find("option[value="+c+"]").remove();this.$select.trigger("change");this._refresh()},update:function(c){var e=this.$select.val();this.$select.find("option").remove();for(var d in c){this.$select.append(this._templateOption(c[d]))}this._refresh();this.$select.val(e);if(!this.$select.val()){this.$select.val(this.first())}},setOnChange:function(c){this.options.onchange=c},exists:function(c){return this.$select.find('option[value="'+c+'"]').length>0},_change:function(){if(this.options.onchange){this.options.onchange(this.$select.val())}},_refresh:function(){this.$select.find("option[value=null]").remove();var c=this.$select.find("option").length;if(c==0){this.disable();this.$select.append(this._templateOption({value:"null",label:this.options.empty}))}else{this.enable()}},_templateOption:function(c){return'<option value="'+c.value+'">'+c.label+"</option>"},_template:function(c){return'<div id="'+c.id+'"><div class="button"><i id="icon"/></div><select id="select" class="select '+c.cls+" "+c.id+'"></select></div>'}});return{View:b}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: carlfeberhard: History panel: fix 'load you own data' link to Galaxy.upload
by commits-noreply@bitbucket.org 17 Oct '14
by commits-noreply@bitbucket.org 17 Oct '14
17 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/d5f495c94ba1/
Changeset: d5f495c94ba1
User: carlfeberhard
Date: 2014-10-17 16:37:45+00:00
Summary: History panel: fix 'load you own data' link to Galaxy.upload
Affected #: 3 files
diff -r db0a3f2a952e1ee0a6f76c5355346b23f9166330 -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 client/galaxy/scripts/mvc/history/history-panel-edit-current.js
--- a/client/galaxy/scripts/mvc/history/history-panel-edit-current.js
+++ b/client/galaxy/scripts/mvc/history/history-panel-edit-current.js
@@ -226,7 +226,7 @@
'</a>'
].join('') );
$emptyMsg.find( '.uploader-link' ).click( function( ev ){
- Galaxy.upload._eventShow( ev );
+ Galaxy.upload.show( ev );
});
$emptyMsg.find( '.get-data-link' ).click( function( ev ){
$toolMenu.parent().scrollTop( 0 );
diff -r db0a3f2a952e1ee0a6f76c5355346b23f9166330 -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 static/scripts/mvc/history/history-panel-edit-current.js
--- a/static/scripts/mvc/history/history-panel-edit-current.js
+++ b/static/scripts/mvc/history/history-panel-edit-current.js
@@ -226,7 +226,7 @@
'</a>'
].join('') );
$emptyMsg.find( '.uploader-link' ).click( function( ev ){
- Galaxy.upload._eventShow( ev );
+ Galaxy.upload.show( ev );
});
$emptyMsg.find( '.get-data-link' ).click( function( ev ){
$toolMenu.parent().scrollTop( 0 );
diff -r db0a3f2a952e1ee0a6f76c5355346b23f9166330 -r d5f495c94ba1d558e492b2f9bae2b78b672cae66 static/scripts/packed/mvc/history/history-panel-edit-current.js
--- a/static/scripts/packed/mvc/history/history-panel-edit-current.js
+++ b/static/scripts/packed/mvc/history/history-panel-edit-current.js
@@ -1,1 +1,1 @@
-define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/collection/collection-panel","mvc/base-mvc","utils/localization"],function(d,c,a,h,b){var e=h.SessionStorageModel.extend({defaults:{tagsEditorShown:false,annotationEditorShown:false,scrollPosition:0},toString:function(){return"HistoryPanelPrefs("+JSON.stringify(this.toJSON())+")"}});e.storageKey=function f(){return("history-panel")};var g=c.HistoryPanelEdit;var i=g.extend({className:g.prototype.className+" current-history-panel",emptyMsg:b("This history is empty. Click 'Get Data' on the left tool menu to start"),noneFoundMsg:b("No matching datasets found"),HDCAViewClass:g.prototype.HDCAViewClass.extend({foldoutStyle:"drilldown"}),initialize:function(j){j=j||{};this.preferences=new e(_.extend({id:e.storageKey()},_.pick(j,_.keys(e.prototype.defaults))));g.prototype.initialize.call(this,j);this.panelStack=[];this.currentContentId=j.currentContentId||null},_setUpListeners:function(){g.prototype._setUpListeners.call(this);var j=this;this.$scrollContainer().on("scroll",function(k){if(j.$el.is(":visible")){j.preferences.set("scrollPosition",$(this).scrollTop())}});this.on("new-model",function(){j.preferences.set("scrollPosition",0)})},loadCurrentHistory:function(k){this.debug(this+".loadCurrentHistory");var j=this;return this.loadHistoryWithDetails("current",k).then(function(m,l){j.trigger("current-history",j)})},switchToHistory:function(m,l){var j=this,k=function(){return jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+m)};return this.loadHistoryWithDetails(m,l,k).then(function(o,n){j.trigger("switched-history",j)})},createNewHistory:function(l){if(!Galaxy||!Galaxy.currUser||Galaxy.currUser.isAnonymous()){this.displayMessage("error",b("You must be logged in to create histories"));return $.when()}var j=this,k=function(){return jQuery.getJSON(galaxy_config.root+"history/create_new_current")};return this.loadHistory(undefined,l,k).then(function(n,m){j.trigger("new-history",j)})},setModel:function(k,j,l){g.prototype.setModel.call(this,k,j,l);if(this.model){this.log("checking for updates");this.model.checkForUpdates()}return this},_setUpCollectionListeners:function(){g.prototype._setUpCollectionListeners.call(this);this.collection.on("state:ready",function(k,l,j){if((!k.get("visible"))&&(!this.storage.get("show_hidden"))){this.removeItemView(this.viewFromModel(k))}},this)},_setUpModelListeners:function(){g.prototype._setUpModelListeners.call(this);if(Galaxy&&Galaxy.quotaMeter){this.listenTo(this.model,"change:nice_size",function(){Galaxy.quotaMeter.update()})}},_buildNewRender:function(){if(!this.model){return $()}var j=g.prototype._buildNewRender.call(this);j.find(".search").prependTo(j.find(".controls"));this._renderQuotaMessage(j);return j},_renderQuotaMessage:function(j){j=j||this.$el;return $(this.templates.quotaMsg({},this)).prependTo(j.find(".messages"))},_renderEmptyMessage:function(l){var k=this,j=k.$emptyMessage(l),m=$(".toolMenuContainer");if((_.isEmpty(k.views)&&!k.searchFor)&&(Galaxy&&Galaxy.upload&&m.size())){j.empty();j.html([b("This history is empty"),". ",b("You can "),'<a class="uploader-link" href="javascript:void(0)">',b("load your own data"),"</a>",b(" or "),'<a class="get-data-link" href="javascript:void(0)">',b("get data from an external source"),"</a>"].join(""));j.find(".uploader-link").click(function(n){Galaxy.upload._eventShow(n)});j.find(".get-data-link").click(function(n){m.parent().scrollTop(0);m.find('span:contains("Get Data")').click()});return j.show()}return g.prototype._renderEmptyMessage.call(this,l)},_renderTags:function(j){var k=this;g.prototype._renderTags.call(this,j);if(this.preferences.get("tagsEditorShown")){this.tagsEditor.toggle(true)}this.tagsEditor.on("hiddenUntilActivated:shown hiddenUntilActivated:hidden",function(l){k.preferences.set("tagsEditorShown",l.hidden)})},_renderAnnotation:function(j){var k=this;g.prototype._renderAnnotation.call(this,j);if(this.preferences.get("annotationEditorShown")){this.annotationEditor.toggle(true)}this.annotationEditor.on("hiddenUntilActivated:shown hiddenUntilActivated:hidden",function(l){k.preferences.set("annotationEditorShown",l.hidden)})},_swapNewRender:function(k){g.prototype._swapNewRender.call(this,k);var j=this;_.delay(function(){var l=j.preferences.get("scrollPosition");if(l){j.scrollTo(l)}},10);return this},_attachItems:function(k){g.prototype._attachItems.call(this,k);var j=this,l;if(j.currentContentId&&(l=j.viewFromModelId(j.currentContentId))){j.setCurrentContent(l)}return this},addItemView:function(l,m,k){var j=g.prototype.addItemView.call(this,l,m,k);if(!j){return j}if(this.panelStack.length){return this._collapseDrilldownPanel()}return j},_setUpItemViewListeners:function(k){var j=this;g.prototype._setUpItemViewListeners.call(j,k);k.on("expanded:drilldown",function(m,l){this._expandDrilldownPanel(l)},this);k.on("collapsed:drilldown",function(m,l){this._collapseDrilldownPanel(l)},this);k.on("display edit params rerun report-err visualize",function(l,m){this.setCurrentContent(l)},this);return this},setCurrentContent:function(j){this.$(".history-content.current-content").removeClass("current-content");if(j){j.$el.addClass("current-content");this.currentContentId=j.model.id}else{this.currentContentId=null}},_expandDrilldownPanel:function(j){this.panelStack.push(j);this.$("> .controls").add(this.$list()).hide();j.parentName=this.model.get("name");this.$el.append(j.render().$el)},_collapseDrilldownPanel:function(j){this.panelStack.pop();this.render()},connectToQuotaMeter:function(j){if(!j){return this}this.listenTo(j,"quota:over",this.showQuotaMessage);this.listenTo(j,"quota:under",this.hideQuotaMessage);this.on("rendered rendered:initial",function(){if(j&&j.isOverQuota()){this.showQuotaMessage()}});return this},showQuotaMessage:function(){var j=this.$el.find(".quota-message");if(j.is(":hidden")){j.slideDown(this.fxSpeed)}},hideQuotaMessage:function(){var j=this.$el.find(".quota-message");if(!j.is(":hidden")){j.slideUp(this.fxSpeed)}},connectToOptionsMenu:function(j){var k=this;if(!j){return k}this.on("new-storage show-deleted show-hidden",function(){var l=(Galaxy&&Galaxy.historyOptionsMenu)?Galaxy.historyOptionsMenu:undefined;if(l){l.findItemByHtml(b("Include Deleted Datasets")).checked=k.showDeleted;l.findItemByHtml(b("Include Hidden Datasets")).checked=k.showHidden}});return this},toString:function(){return"CurrentHistoryPanel("+((this.model)?(this.model.get("name")):(""))+")"}});i.prototype.templates=(function(){var j=h.wrapTemplate(['<div class="quota-message errormessage">',b("You are over your disk quota"),". ",b("Tool execution is on hold until your disk usage drops below your allocated quota"),".","</div>"],"history");return _.extend(_.clone(g.prototype.templates),{quotaMsg:j})}());return{CurrentHistoryPanel:i}});
\ No newline at end of file
+define(["mvc/history/history-model","mvc/history/history-panel-edit","mvc/collection/collection-panel","mvc/base-mvc","utils/localization"],function(d,c,a,h,b){var e=h.SessionStorageModel.extend({defaults:{tagsEditorShown:false,annotationEditorShown:false,scrollPosition:0},toString:function(){return"HistoryPanelPrefs("+JSON.stringify(this.toJSON())+")"}});e.storageKey=function f(){return("history-panel")};var g=c.HistoryPanelEdit;var i=g.extend({className:g.prototype.className+" current-history-panel",emptyMsg:b("This history is empty. Click 'Get Data' on the left tool menu to start"),noneFoundMsg:b("No matching datasets found"),HDCAViewClass:g.prototype.HDCAViewClass.extend({foldoutStyle:"drilldown"}),initialize:function(j){j=j||{};this.preferences=new e(_.extend({id:e.storageKey()},_.pick(j,_.keys(e.prototype.defaults))));g.prototype.initialize.call(this,j);this.panelStack=[];this.currentContentId=j.currentContentId||null},_setUpListeners:function(){g.prototype._setUpListeners.call(this);var j=this;this.$scrollContainer().on("scroll",function(k){if(j.$el.is(":visible")){j.preferences.set("scrollPosition",$(this).scrollTop())}});this.on("new-model",function(){j.preferences.set("scrollPosition",0)})},loadCurrentHistory:function(k){this.debug(this+".loadCurrentHistory");var j=this;return this.loadHistoryWithDetails("current",k).then(function(m,l){j.trigger("current-history",j)})},switchToHistory:function(m,l){var j=this,k=function(){return jQuery.getJSON(galaxy_config.root+"history/set_as_current?id="+m)};return this.loadHistoryWithDetails(m,l,k).then(function(o,n){j.trigger("switched-history",j)})},createNewHistory:function(l){if(!Galaxy||!Galaxy.currUser||Galaxy.currUser.isAnonymous()){this.displayMessage("error",b("You must be logged in to create histories"));return $.when()}var j=this,k=function(){return jQuery.getJSON(galaxy_config.root+"history/create_new_current")};return this.loadHistory(undefined,l,k).then(function(n,m){j.trigger("new-history",j)})},setModel:function(k,j,l){g.prototype.setModel.call(this,k,j,l);if(this.model){this.log("checking for updates");this.model.checkForUpdates()}return this},_setUpCollectionListeners:function(){g.prototype._setUpCollectionListeners.call(this);this.collection.on("state:ready",function(k,l,j){if((!k.get("visible"))&&(!this.storage.get("show_hidden"))){this.removeItemView(this.viewFromModel(k))}},this)},_setUpModelListeners:function(){g.prototype._setUpModelListeners.call(this);if(Galaxy&&Galaxy.quotaMeter){this.listenTo(this.model,"change:nice_size",function(){Galaxy.quotaMeter.update()})}},_buildNewRender:function(){if(!this.model){return $()}var j=g.prototype._buildNewRender.call(this);j.find(".search").prependTo(j.find(".controls"));this._renderQuotaMessage(j);return j},_renderQuotaMessage:function(j){j=j||this.$el;return $(this.templates.quotaMsg({},this)).prependTo(j.find(".messages"))},_renderEmptyMessage:function(l){var k=this,j=k.$emptyMessage(l),m=$(".toolMenuContainer");if((_.isEmpty(k.views)&&!k.searchFor)&&(Galaxy&&Galaxy.upload&&m.size())){j.empty();j.html([b("This history is empty"),". ",b("You can "),'<a class="uploader-link" href="javascript:void(0)">',b("load your own data"),"</a>",b(" or "),'<a class="get-data-link" href="javascript:void(0)">',b("get data from an external source"),"</a>"].join(""));j.find(".uploader-link").click(function(n){Galaxy.upload.show(n)});j.find(".get-data-link").click(function(n){m.parent().scrollTop(0);m.find('span:contains("Get Data")').click()});return j.show()}return g.prototype._renderEmptyMessage.call(this,l)},_renderTags:function(j){var k=this;g.prototype._renderTags.call(this,j);if(this.preferences.get("tagsEditorShown")){this.tagsEditor.toggle(true)}this.tagsEditor.on("hiddenUntilActivated:shown hiddenUntilActivated:hidden",function(l){k.preferences.set("tagsEditorShown",l.hidden)})},_renderAnnotation:function(j){var k=this;g.prototype._renderAnnotation.call(this,j);if(this.preferences.get("annotationEditorShown")){this.annotationEditor.toggle(true)}this.annotationEditor.on("hiddenUntilActivated:shown hiddenUntilActivated:hidden",function(l){k.preferences.set("annotationEditorShown",l.hidden)})},_swapNewRender:function(k){g.prototype._swapNewRender.call(this,k);var j=this;_.delay(function(){var l=j.preferences.get("scrollPosition");if(l){j.scrollTo(l)}},10);return this},_attachItems:function(k){g.prototype._attachItems.call(this,k);var j=this,l;if(j.currentContentId&&(l=j.viewFromModelId(j.currentContentId))){j.setCurrentContent(l)}return this},addItemView:function(l,m,k){var j=g.prototype.addItemView.call(this,l,m,k);if(!j){return j}if(this.panelStack.length){return this._collapseDrilldownPanel()}return j},_setUpItemViewListeners:function(k){var j=this;g.prototype._setUpItemViewListeners.call(j,k);k.on("expanded:drilldown",function(m,l){this._expandDrilldownPanel(l)},this);k.on("collapsed:drilldown",function(m,l){this._collapseDrilldownPanel(l)},this);k.on("display edit params rerun report-err visualize",function(l,m){this.setCurrentContent(l)},this);return this},setCurrentContent:function(j){this.$(".history-content.current-content").removeClass("current-content");if(j){j.$el.addClass("current-content");this.currentContentId=j.model.id}else{this.currentContentId=null}},_expandDrilldownPanel:function(j){this.panelStack.push(j);this.$("> .controls").add(this.$list()).hide();j.parentName=this.model.get("name");this.$el.append(j.render().$el)},_collapseDrilldownPanel:function(j){this.panelStack.pop();this.render()},connectToQuotaMeter:function(j){if(!j){return this}this.listenTo(j,"quota:over",this.showQuotaMessage);this.listenTo(j,"quota:under",this.hideQuotaMessage);this.on("rendered rendered:initial",function(){if(j&&j.isOverQuota()){this.showQuotaMessage()}});return this},showQuotaMessage:function(){var j=this.$el.find(".quota-message");if(j.is(":hidden")){j.slideDown(this.fxSpeed)}},hideQuotaMessage:function(){var j=this.$el.find(".quota-message");if(!j.is(":hidden")){j.slideUp(this.fxSpeed)}},connectToOptionsMenu:function(j){var k=this;if(!j){return k}this.on("new-storage show-deleted show-hidden",function(){var l=(Galaxy&&Galaxy.historyOptionsMenu)?Galaxy.historyOptionsMenu:undefined;if(l){l.findItemByHtml(b("Include Deleted Datasets")).checked=k.showDeleted;l.findItemByHtml(b("Include Hidden Datasets")).checked=k.showHidden}});return this},toString:function(){return"CurrentHistoryPanel("+((this.model)?(this.model.get("name")):(""))+")"}});i.prototype.templates=(function(){var j=h.wrapTemplate(['<div class="quota-message errormessage">',b("You are over your disk quota"),". ",b("Tool execution is on hold until your disk usage drops below your allocated quota"),".","</div>"],"history");return _.extend(_.clone(g.prototype.templates),{quotaMsg:j})}());return{CurrentHistoryPanel:i}});
\ No newline at end of file
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0
commit/galaxy-central: guerler: Parameters: Add validation
by commits-noreply@bitbucket.org 17 Oct '14
by commits-noreply@bitbucket.org 17 Oct '14
17 Oct '14
1 new commit in galaxy-central:
https://bitbucket.org/galaxy/galaxy-central/commits/db0a3f2a952e/
Changeset: db0a3f2a952e
User: guerler
Date: 2014-10-17 14:03:13+00:00
Summary: Parameters: Add validation
Affected #: 1 file
diff -r acb838d9af911cfc7c79328ffa87472913e5529c -r db0a3f2a952e1ee0a6f76c5355346b23f9166330 lib/galaxy/tools/parameters/basic.py
--- a/lib/galaxy/tools/parameters/basic.py
+++ b/lib/galaxy/tools/parameters/basic.py
@@ -1163,8 +1163,9 @@
@staticmethod
def _strip_c(column):
- if column.startswith( 'c' ):
- column = column.strip().lower()[1:]
+ if isinstance(column, basestring):
+ if column.startswith( 'c' ):
+ column = column.strip().lower()[1:]
return column
def get_column_list( self, trans, other_values ):
Repository URL: https://bitbucket.org/galaxy/galaxy-central/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
1
0