[code autolinks=”false”]
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCiMgVW5pZmllZCBkaWZmIChwYXRjaCBmaWxlKSB0byBtb2RpZnkgRGlvbmFl
YSdzIG15c3FsLnB5IG1vZHVsZSAgICAgIwojIHRvIGVuYWJsZSBpdCB0byBjYXB0dXJlIGJpbmFy
aWVzIGZyb20gdGhlIGNuYTEyIE15U1FMIGF0dGFja3MgICAgICMKIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgQXBw
bGljYXRpb24gaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIwojICAgW2Zyb20gRGlvbmFlYSdzIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5XSAg
ICAgICAgICAgICAgICAgICAgICMKIyAgIGNkIC4vbW9kdWxlcy9weXRob24vc2NyaXB0cy9teXNx
bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICBwYXRjaCA8IGRpb25hZWEtbXlz
cWwucHkuZGlmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMKIyBkaW9uYWVhLW15c3FsLnB5LmRpZmYgdjIwMTMuMDQuMTYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjCiMgaHR0cDovL21hbHdhcmVtdXNpbmdzLmNvbS9zdXBwb3J0aW5nLWZp
bGVzL2Rpb25hZWEtbXlzcWwtcHktZGlmZi8gIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi0tLSBteXNxbC5weS5k
aXN0CTIwMTItMTEtMjQgMTE6Mjc6MDAuMDAwMDAwMDAwICsxMTAwCisrKyBteXNxbC5weQkyMDEz
LTAxLTMxIDAwOjAxOjQxLjMyMzM5NzcyMSArMTEwMApAQCAtMzAsMTIgKzMwLDE1IEBACiBmcm9t
IC5pbmNsdWRlLnBhY2tldHMgaW1wb3J0ICoKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgc3FsaXRl
MworaW1wb3J0IHRlbXBmaWxlCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteXNxbGQn
KQogY2xhc3MgbXlzcWxkKGNvbm5lY3Rpb24pOgogCWRlZiBfX2luaXRfXyAoc2VsZik6CiAJCWNv
bm5lY3Rpb24uX19pbml0X18oc2VsZiwidGNwIikKIAorCQlzZWxmLmF1dG9jb21taXQgPSAxCisK
IAlkZWYgaGFuZGxlX2VzdGFibGlzaGVkKHNlbGYpOgogCQlzZWxmLmNvbmZpZyA9IGdfZGlvbmFl
YS5jb25maWcoKVsnbW9kdWxlcyddWydweXRob24nXVsnbXlzcWwnXVsnZGF0YWJhc2VzJ10KIAkJ
CkBAIC04OSw4ICs5Miw1MSBAQAogCiAJZGVmIF9oYW5kbGVfQ09NX1FVRVJZKHNlbGYsIHApOgog
CQlyID0gTm9uZQotCQlpZiBwLlF1ZXJ5LnN0YXJ0c3dpdGgoYiJTRVQgIik6Ci0JCQlyID0gTXlT
UUxfUmVzdWx0X09LKE1lc3NhZ2U9IiMyIikKKwkJI2xvZ2dlci5pbmZvKCJROiAlc1xuIiAlIHAu
UXVlcnkpCisJCWlmIHAuUXVlcnkudXBwZXIoKS5zdGFydHN3aXRoKGIiU0VUICIpOgorCQkJI3Ig
PSBNeVNRTF9SZXN1bHRfT0soTWVzc2FnZT0iIzIiKQorCisJCQlpZiAocC5RdWVyeS51cHBlcigp
ID09IGInU0VUIEFVVE9DT01NSVQ9MCcpOgorCQkJCWxvZ2dlci5pbmZvKCIgICBTZXR0aW5nIGF1
dG9jb21taXQgdG8gMCIpCisJCQkJc2VsZi5hdXRvY29tbWl0ID0gMAorCQkJCXIgPSBNeVNRTF9S
ZXN1bHRfT0soU2VydmVyU3RhdHVzID0gMHgwMDApCisJCQllbHNlOgorCQkJCSMgY2hlY2sgZm9y
IDB4NEQ1QSA6KQorCQkJCXFyeSA9IHAuUXVlcnkubG93ZXIoKQorCQkJCXRyeToKKwkJCQkJIyBz
dHJpcCB3aGl0ZSBzcGFjZQorCQkJCQlxcnkgPSBxcnkudHJhbnNsYXRlKE5vbmUsYiJcclxuXHQg
IikKKwkJCQlleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJCWxvZ2dlci5pbmZvKGUpCisKKwkJ
CQkjIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgc28gLmZpbmQoKSB3aWxsIHdvcmsKKwkJCQlxcnkg
PSBzdHIocXJ5KQorCQkJCSNsb2dnZXIuaW5mbygicTogJXNcbiIgJSBxcnkpCisJCQkJcGVpZHgg
PSBxcnkuZmluZCgiMHg0ZDVhIikKKworCQkJCWlmIChwZWlkeCA+PSAwKToKKwkJCQkJIyBleHRy
YWN0IFBFIGZpbGUKKwkJCQkJaWR4ID0gcGVpZHggKyAyCisJCQkJCXdoaWxlICgocXJ5W2lkeF0g
aW4gIjAxMjM0NTY3ODlhYmNkZWZcclxuXHQgIikgYW5kIChpZHggPCBsZW4ocXJ5KSkpOgorCQkJ
CQkJI2xvZ2dlci5pbmZvKCJbJWRdOiAlYyIgJSAoaWR4LHFyeVtpZHhdKSkKKwkJCQkJCWlkeCA9
IGlkeCArIDEKKwkJCQkJbG9nZ2VyLmluZm8oInBlIEAgJWQgLSAlZCIgJSAocGVpZHggKyAyLGlk
eCkpCisJCQkJCWhleHN0ciA9IHFyeVtwZWlkeCArIDI6aWR4XQorCQkJCQkjbG9nZ2VyLmluZm8o
IlBFOiAlc1xuIiAlIGhleHN0cikKKwkJCQkJdHJ5OgorCQkJCQkJZiA9IHRlbXBmaWxlLk5hbWVk
VGVtcG9yYXJ5RmlsZShkZWxldGUgPSBGYWxzZSxwcmVmaXggPSAibXlzcWwtIixzdWZmaXggPSAi
LnRtcCIsZGlyID0gZ19kaW9uYWVhLmNvbmZpZygpWydkb3dubG9hZHMnXVsnZGlyJ10pCisJCQkJ
CQlmLndyaXRlKGJ5dGVzLmZyb21oZXgoaGV4c3RyKSkKKwkJCQkJCWYuY2xvc2UoKQorCQkJCQll
eGNlcHQgRXhjZXB0aW9uIGFzIGU6CisJCQkJCQlsb2dnZXIuaW5mbyhlKQorCisJCQkJCWkgPSBp
bmNpZGVudCgiZGlvbmFlYS5kb3dubG9hZC5jb21wbGV0ZSIpCisJCQkJCWkucGF0aCA9IGYubmFt
ZQorCQkJCQlpLnVybCA9ICJoZXg6Ly8iICsgc2VsZi5yZW1vdGUuaG9zdAorCQkJCQlpLmNvbiA9
IHNlbGYKKwkJCQkJaS5yZXBvcnQoKQorCisJCQkJciA9IE15U1FMX1Jlc3VsdF9PSygpCiAJCWVs
aWYgcC5RdWVyeSA9PSBiJ3NlbGVjdCBAQHZlcnNpb25fY29tbWVudCBsaW1pdCAxJzoKIAkJCXIg
PSBbTXlTUUxfUmVzdWx0X0hlYWRlcihGaWVsZENvdW50PTEpLAogCkBAIC0xNTgsNiArMjA0LDU3
IEBACiAJCQkJeCA9IE15U1FMX1Jlc3VsdF9Sb3dfRGF0YShDb2x1bW5WYWx1ZXM9W3Jlc1tuYW1l
XSBmb3IgbmFtZSBpbiBuYW1lc10pCiAJCQkJci5hcHBlbmQoeCkKIAkJCXIuYXBwZW5kKE15U1FM
X1Jlc3VsdF9FT0YoU2VydmVyU3RhdHVzPTB4MDAyKSkKKwkJZWxpZiBwLlF1ZXJ5LnVwcGVyKCkg
PT0gYidTRUxFQ1QgVkVSU0lPTigpJzoKKwkJCWxvZ2dlci5pbmZvKCIgICBFT0Ygd2l0aCBhdXRv
Y29tbWl0OiAlZCIgJSBzZWxmLmF1dG9jb21taXQpCisJCQlyID0gW015U1FMX1Jlc3VsdF9IZWFk
ZXIoRmllbGRDb3VudCA9IDEpLAorCisJCQkJTXlTUUxfUmVzdWx0X0ZpZWxkKENhdGFsb2c9J2Rl
ZicsCisJCQkJCURhdGFiYXNlPWInJywKKwkJCQkJVGFibGU9YicnLAorCQkJCQlPUkdUYWJsZT1i
JycsCisJCQkJCU5hbWU9YidWRVJTSU9OKCknLAorCQkJCQlPUkdOYW1lPWInJywKKwkJCQkJQ2hh
clNldD0zMywJCQkjIHV0ZjgsIGNvbGxhdGUgdXRmOF9nZW5lcmFsX2NpCisJCQkJCUxlbmd0aD04
LAorCQkJCQlUeXBlPUZJRUxEX1RZUEVfVkFSX1NUUklORywKKwkJCQkJRmxhZ3M9RkxBR19OT1Rf
TlVMTCwKKwkJCQkJRGVjaW1hbHM9MzEpLAorCQkJCU15U1FMX1Jlc3VsdF9FT0YoU2VydmVyU3Rh
dHVzPXNlbGYuYXV0b2NvbW1pdCAqIDB4MDAyKV0KKworCQkJci5hcHBlbmQoTXlTUUxfUmVzdWx0
X1Jvd19EYXRhKENvbHVtblZhbHVlcz1bIjUuNS4yOC0xIl0pKQorCQkJci5hcHBlbmQoTXlTUUxf
UmVzdWx0X0VPRihTZXJ2ZXJTdGF0dXM9c2VsZi5hdXRvY29tbWl0ICogMHgwMDIpKQorCQllbGlm
IHAuUXVlcnkudXBwZXIoKS5zdGFydHN3aXRoKGIiU0VMRUNUIFhQREwzKCIpOgorCQkJcXJ5ID0g
cC5RdWVyeS5sb3dlcigpCisJCQl0cnk6CisJCQkJIyBzdHJpcCB3aGl0ZSBzcGFjZQorCQkJCXFy
eSA9IHFyeS50cmFuc2xhdGUoTm9uZSxiIlxyXG5cdCAiKQorCQkJZXhjZXB0IEV4Y2VwdGlvbiBh
cyBlOgorCQkJCWxvZ2dlci5pbmZvKGUpCisKKwkJCSMgY29udmVydCBpdCB0byBhIHN0cmluZyBz
byAuZmluZCgpIHdpbGwgd29yaworCQkJcXJ5ID0gc3RyKHFyeSkKKwkJCSNsb2dnZXIuaW5mbygi
cTogJXNcbiIgJSBxcnkpCisKKwkJCXVybGlkeCA9IC0xCisJCQlodHRwaWR4ID0gcXJ5LmZpbmQo
IidodHRwOiIpCisJCQlodHRwc2lkeCA9IHFyeS5maW5kKCInaHR0cHM6IikKKwkJCWlmIChodHRw
aWR4ID49IDApOgorCQkJCXVybGlkeCA9IGh0dHBpZHggKyAxCisJCQllbGlmIChodHRwc2lkeCA+
PSAwKToKKwkJCQl1cmxpZHggPSBodHRwc2lkeCArIDEKKworCQkJaWYgKHVybGlkeCA+PSAwKToK
KwkJCQl1cmxlbmQgPSBxcnkuZmluZCgiJyIsdXJsaWR4KQorCQkJCWlmICh1cmxlbmQgPj0gMCk6
CisJCQkJCXVybCA9IHFyeVt1cmxpZHg6dXJsZW5kXQorCQkJCQlsb2dnZXIuaW5mbygiVTogJXNc
biIgJSB1cmwpCisKKwkJCQkJaSA9IGluY2lkZW50KCJkaW9uYWVhLmRvd25sb2FkLm9mZmVyIikK
KwkJCQkJaS5jb24gPSBzZWxmCisJCQkJCWkudXJsID0gdXJsCisJCQkJCWkucmVwb3J0KCkKKwor
CQkJCQlyID0gTXlTUUxfUmVzdWx0X09LKE1lc3NhZ2U9JyNvay4uLihjOlxpc2V0dXAuZXhlKSBw
b3J0bnVtYmVyICgzMzg5KSBvc3ZlcnNpb24gKFdpblhQKScsU2VydmVyU3RhdHVzPXNlbGYuYXV0
b2NvbW1pdCAqIDB4MDAyKQogCQllbHNlOgogCQkJcC5zaG93KCkKIAkJCXRyeToK
[/code]