[saem-devel] [PATCH 05 of 10] [pkg] Move to new "cube as package" layout allowed by cubicweb 3.24

saem-devel at lists.cubicweb.org saem-devel at lists.cubicweb.org
Wed Jan 25 10:05:03 CET 2017


IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIERlbmlzIExheGFsZGUgPGRlbmlzLmxheGFsZGVA
bG9naWxhYi5mcj4KIyBEYXRlIDE0NjgzNDA2MzggLTcyMDAKIyAgICAgIFR1ZSBKdWwgMTIgMTg6
MjM6NTggMjAxNiArMDIwMAojIE5vZGUgSUQgN2QzNDJkZDNiNzRmMGRlNzE5YTY2MDc2NDYwNzVh
ZGMyZmI4OGZlNQojIFBhcmVudCAgYzU0MzA1ZDRkMjM1MDY4NTFhYmY1YTY5ZjJjNmYxMWYwNzU2
YmI3NQpbcGtnXSBNb3ZlIHRvIG5ldyAiY3ViZSBhcyBwYWNrYWdlIiBsYXlvdXQgYWxsb3dlZCBi
eSBjdWJpY3dlYiAzLjI0Cgp3aGljaCBpcyBub3cgYSBkZXBlbmRhbmN5LgoKZGlmZiAtLWdpdCBh
L19faW5pdF9fLnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvX19pbml0X18ucHkKcmVuYW1lIGZyb20g
X19pbml0X18ucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL19faW5pdF9fLnB5CmRpZmYg
LS1naXQgYS9fX3BrZ2luZm9fXy5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL19fcGtnaW5mb19fLnB5
CnJlbmFtZSBmcm9tIF9fcGtnaW5mb19fLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9f
X3BrZ2luZm9fXy5weQotLS0gYS9fX3BrZ2luZm9fXy5weQorKysgYi9jdWJpY3dlYl9zYWVtX3Jl
Zi9fX3BrZ2luZm9fXy5weQpAQCAtMiwxMCArMiw2IEBACiAjIHB5bGludDogZGlzYWJsZT0zRFcw
NjIyCiAiIiJjdWJpY3dlYi1zYWVtLXJlZiBhcHBsaWNhdGlvbiBwYWNrYWdpbmcgaW5mb3JtYXRp
b24iIiIKPTIwCi1mcm9tIG9zIGltcG9ydCBsaXN0ZGlyIGFzIF9saXN0ZGlyCi1mcm9tIG9zLnBh
dGggaW1wb3J0IGpvaW4sIGlzZGlyCi1mcm9tIGdsb2IgaW1wb3J0IGdsb2IKLQogbW9kbmFtZSA9
M0QgJ3NhZW1fcmVmJwogZGlzdG5hbWUgPTNEICdjdWJpY3dlYi1zYWVtLXJlZicKPTIwCkBAIC0x
OSw4ICsxNSw3IEBAIGRlc2NyaXB0aW9uID0zRCAiUj1DMz1BOWY9QzM9QTlyZW5jaWVsIGRlIFN5
c3Q9QzM9QThtZQogd2ViID0zRCAnaHR0cDovL3d3dy5jdWJpY3dlYi5vcmcvcHJvamVjdC8lcycg
JSBkaXN0bmFtZQo9MjAKIF9fZGVwZW5kc19fID0zRCB7Ci0gICAgJ2N1Ymljd2ViJzogJz49M0Qg
My4yNC4wJywKLSAgICAnY3ViaWN3ZWJbcHlyYW1pZF0nOiBOb25lLAorICAgICdjdWJpY3dlYltw
eXJhbWlkXSc6ICc+PTNEIDMuMjQuMCcsCiAgICAgJ2N1Ymljd2ViLXNxdWFyZXVpJzogTm9uZSwK
ICAgICAnY3ViaWN3ZWItZWFjJzogTm9uZSwKICAgICAnY3ViaWN3ZWItc2VkYSc6ICc+PTNEIDAu
NS4xJywKQEAgLTQ0LDI3ICszOSwzIEBAIGNsYXNzaWZpZXJzID0zRCBbCiAgICAgJ1Byb2dyYW1t
aW5nIExhbmd1YWdlIDo6IFB5dGhvbicsCiAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IEph
dmFTY3JpcHQnLAogXQotCi1USElTX0NVQkVfRElSID0zRCBqb2luKCdzaGFyZScsICdjdWJpY3dl
YicsICdjdWJlcycsIG1vZG5hbWUpCi0KLQotZGVmIGxpc3RkaXIoZGlycGF0aCk6Ci0gICAgcmV0
dXJuIFtqb2luKGRpcnBhdGgsIGZuYW1lKSBmb3IgZm5hbWUgaW4gX2xpc3RkaXIoZGlycGF0aCkK
LSAgICAgICAgICAgIGlmIGZuYW1lWzBdICE9M0QgJy4nIGFuZCBub3QgZm5hbWUuZW5kc3dpdGgo
Jy5weWMnKQotICAgICAgICAgICAgYW5kIG5vdCBmbmFtZS5lbmRzd2l0aCgnficpCi0gICAgICAg
ICAgICBhbmQgbm90IGlzZGlyKGpvaW4oZGlycGF0aCwgZm5hbWUpKV0KLQotCi1kYXRhX2ZpbGVz
ID0zRCBbCi0gICAgIyBjb21tb24gZmlsZXMKLSAgICBbVEhJU19DVUJFX0RJUiwgW2ZuYW1lIGZv
ciBmbmFtZSBpbiBnbG9iKCcqLnB5JykgaWYgZm5hbWUgIT0zRCAnc2V0dXAuPQpweSddXSwKLSAg
ICBbVEhJU19DVUJFX0RJUiwgW2ZuYW1lIGZvciBmbmFtZSBpbiBnbG9iKCcqLnR4dCcpXV0sCi1d
Ci0jIGNoZWNrIGZvciBwb3NzaWJsZSBleHRlbmRlZCBjdWJlIGxheW91dAotZm9yIGRuYW1lIGlu
ICgnZW50aXRpZXMnLCAndmlld3MnLCAnc29iamVjdHMnLCAnaG9va3MnLCAnc2NoZW1hJywgJ2Rh
dGEnLAotICAgICAgICAgICAgICAnd2RvYycsICdpMThuJywgJ21pZ3JhdGlvbicsICdsaWInLCAn
ZGF0YWltcG9ydCcsICdzY3JpcHRzJywKLSAgICAgICAgICAgICAgJ21pZ3JhdGlvbi9kYXRhJyk6
Ci0gICAgaWYgaXNkaXIoZG5hbWUpOgotICAgICAgICBkYXRhX2ZpbGVzLmFwcGVuZChbam9pbihU
SElTX0NVQkVfRElSLCBkbmFtZSksIGxpc3RkaXIoZG5hbWUpXSkKLSMgTm90ZTogaGVyZSwgeW91
J2xsIG5lZWQgdG8gYWRkIHN1YmRpcmVjdG9yaWVzIGlmIHlvdSB3YW50Ci0jIHRoZW0gdG8gYmUg
aW5jbHVkZWQgaW4gdGhlIGRlYmlhbiBwYWNrYWdlCmRpZmYgLS1naXQgYS9jY3BsdWdpbi5weSBi
L2N1Ymljd2ViX3NhZW1fcmVmL2NjcGx1Z2luLnB5CnJlbmFtZSBmcm9tIGNjcGx1Z2luLnB5CnJl
bmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9jY3BsdWdpbi5weQpkaWZmIC0tZ2l0IGEvZGF0YS9i
YW5kZWF1X3NhZW0uanBnIGIvY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9iYW5kZWF1X3NhZW0uanBn
CnJlbmFtZSBmcm9tIGRhdGEvYmFuZGVhdV9zYWVtLmpwZwpyZW5hbWUgdG8gY3ViaWN3ZWJfc2Fl
bV9yZWYvZGF0YS9iYW5kZWF1X3NhZW0uanBnCmRpZmYgLS1naXQgYS9kYXRhL2J4X21ldHJvLmpw
ZyBiL2N1Ymljd2ViX3NhZW1fcmVmL2RhdGEvYnhfbWV0cm8uanBnCnJlbmFtZSBmcm9tIGRhdGEv
YnhfbWV0cm8uanBnCnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9kYXRhL2J4X21ldHJvLmpw
ZwpkaWZmIC0tZ2l0IGEvZGF0YS9jZDMzLmpwZyBiL2N1Ymljd2ViX3NhZW1fcmVmL2RhdGEvY2Qz
My5qcGcKcmVuYW1lIGZyb20gZGF0YS9jZDMzLmpwZwpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9y
ZWYvZGF0YS9jZDMzLmpwZwpkaWZmIC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9jdWJl
cy5qcXRyZWUuY3NzIGIvY3ViaWN3ZWJfc2FlbV9yZWYvZGE9CnRhL2N1YmVzLmpxdHJlZS5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdWJpY3dlYl9zYWVtX3Jl
Zi9kYXRhL2N1YmVzLmpxdHJlZS5jc3MKQEAgLTAsMCArMSwxNCBAQAorLyogYWRkIHNwYW4vYSB0
byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzICovCisKK3VsLmpxdHJlZS10cmVlIHNwYW4uanF0cmVl
LXRpdGxlIHsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CisKK3VsLmpxdHJlZS10cmVlIGkuZ2x5cGhp
Y29uIHsKKyAgZm9udC1zaXplOiA4MCU7CisgIGNvbG9yOiAjNzc3OworfQorCit1bC5qcXRyZWUt
dHJlZSBhLmpxdHJlZS10b2dnbGVyLmpxdHJlZS10b2dnbGVyLWxlZnQgeworICBtYXJnaW4tcmln
aHQ6IDAuMWVtOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2N1
Ymljd2ViX3NhZW1fcmVmL2RhdGEvY3ViZXMuanF0cmVlLmpzIGIvY3ViaWN3ZWJfc2FlbV9yZWYv
ZGF0PQphL2N1YmVzLmpxdHJlZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs
CisrKyBiL2N1Ymljd2ViX3NhZW1fcmVmL2RhdGEvY3ViZXMuanF0cmVlLmpzCkBAIC0wLDAgKzEs
NzMgQEAKKy8vIGNvcHlyaWdodCAyMDE2IExPR0lMQUIgUy5BLiAoUGFyaXMsIEZSQU5DRSksIGFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBjb250YWN0IGh0dHA6Ly93d3cubG9naWxhYi5mciAtLSBt
YWlsdG86Y29udGFjdEBsb2dpbGFiLmZyCisvLworLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQ9CiB1bmRlcgor
Ly8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSA9CkZyZWUKKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2
ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0PQppb24pCisvLyBhbnkg
bGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVD0KSE9VVAorLy8gQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ
IG9yIEY9CklUTkVTUworLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3I9CiBtb3JlCisvLyBkZXRhaWxzLgorLy8K
Ky8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zPQplIGFsb25nCisvLyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90
LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisKK2pxdHJlZSA9M0Qgewor
ICAgIGpxVHJlZTogZnVuY3Rpb24oZG9taWQsIGRyYWdBbmREcm9wKSB7CisgICAgICAgIHZhciAk
dHJlZSA9M0QgY3cuanFOb2RlKGRvbWlkKTsKKyAgICAgICAgLy8gdHJlZSBkaXNwbGF5IGFuZCBi
YXNpYyBjb250cm9scy4KKyAgICAgICAgJHRyZWUudHJlZSh7CisgICAgICAgICAgICBkcmFnQW5k
RHJvcDogZHJhZ0FuZERyb3AsCisgICAgICAgICAgICBhdXRvT3BlbjogMCwgIC8vIG9ubHkgb3Bl
biBsZXZlbC0wCisgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSwKKyAgICAgICAgICAgIGF1
dG9Fc2NhcGU6IGZhbHNlLAorICAgICAgICAgICAgY2xvc2VkSWNvbjogJCgnPGkgY2xhc3M9M0Qi
Z2x5cGhpY29uIGdseXBoaWNvbi1leHBhbmQiPjwvaT4nKSwKKyAgICAgICAgICAgIG9wZW5lZElj
b246ICQoJzxpIGNsYXNzPTNEImdseXBoaWNvbiBnbHlwaGljb24tY29sbGFwc2UtZG93biI+PQo8
L2k+JyksCisgICAgICAgICAgICBvbkNhbk1vdmU6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZS5tYXliZUNoaWxkOworICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIG9uQ2FuTW92ZVRvOiBmdW5jdGlvbihtb3ZlZF9ub2RlLCB0YXJnZXRfbm9kZSwgcG9zaXRp
b24pIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRhcmdldF9ub2RlLmlkID0zRD0zRD0zRCB1bmRl
ZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0YXJnZXRfbm9kZS5tYXliZVBhcmVudE9mLmluZGV4T2YobW92ZWRfbm9kZS50eT0KcGUpICE9
M0Q9M0QgLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IG9uQ3JlYXRlTGk6IGZ1bmN0aW9uKG5vZGUsICRsaSkgeworICAgICAgICAgICAgICAgIHZhciBz
ZWxlY3RlZElkID0zRCAkdHJlZS50cmVlKCdnZXRUcmVlJykuY2hpbGRyZW5bMF0uc2VsZWM9CnRl
ZDsKKyAgICAgICAgICAgICAgICBpZiAoIHNlbGVjdGVkSWQgIT0zRD0zRCBudWxsICYmIG5vZGUu
aWQgPTNEPTNEPTNEIHNlbGVjdGVkPQpJZCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYWRk
ICJzZWxlY3RlZCIgQ1NTIGNsYXNzIHNvIHRoYXQgdGhlIGN1cnJlbnQgZWxlbWVuPQp0IGluCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmVlIGdldHMgaGlnaGxpZ2h0ZWQuCisgICAgICAg
ICAgICAgICAgICAgICRsaS5maW5kKCcuanF0cmVlLXRpdGxlJykuYWRkQ2xhc3MoJ3NlbGVjdGVk
Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAg
ICAgLy8gdHJlZSBldmVudHMgYmluZGluZ3MuCisgICAgICAgICR0cmVlLmJpbmQoCisgICAgICAg
ICAgICAndHJlZS5pbml0JywKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHZhciBzZWxlY3RlZElkID0zRCAkdHJlZS50cmVlKCdnZXRUcmVlJykuY2hpbGRyZW5bMF0u
c2VsZWM9CnRlZDsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9M0QgJHRyZWUudHJlZSgnZ2V0
Tm9kZUJ5SWQnLCBzZWxlY3RlZElkKTsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9
M0Qgbm9kZS5wYXJlbnQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudE5vZGUgIT0zRD0z
RCBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICR0cmVlLnRyZWUoJ29wZW5Ob2RlJywgcGFy
ZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPTNEIHBhcmVudE5vZGUu
cGFyZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAg
ICAgICAgJHRyZWUuYmluZCgKKyAgICAgICAgICAgICd0cmVlLm1vdmUnLAorICAgICAgICAgICAg
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgp
OworICAgICAgICAgICAgICAgIC8vIGRvIHRoZSBtb3ZlIGZpcnN0LCBhbmQgdGhlbiBQT1NUIGJh
Y2suCisgICAgICAgICAgICAgICAgZXZlbnQubW92ZV9pbmZvLmRvX21vdmUoKTsKKyAgICAgICAg
ICAgICAgICBhc3luY1JlbW90ZUV4ZWMoJ2pxdHJlZV9yZXBhcmVudCcsIGV2ZW50Lm1vdmVfaW5m
by5tb3ZlZF9uPQpvZGUuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50
Lm1vdmVfaW5mby50YXJnZXRfbm9kZS5pZCk7CisgICAgICAgICAgICB9CisgICAgICAgICk7Cisg
ICAgfQorfTsKZGlmZiAtLWdpdCBhL2RhdGEvY3ViZXMuc2FlbV9yZWYuY3NzIGIvY3ViaWN3ZWJf
c2FlbV9yZWYvZGF0YS9jdWJlcy5zYWVtX3JlPQpmLmNzcwpyZW5hbWUgZnJvbSBkYXRhL2N1YmVz
LnNhZW1fcmVmLmNzcwpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9jdWJlcy5zYWVt
X3JlZi5jc3MKZGlmZiAtLWdpdCBhL2RhdGEvY3ViZXMuc2FlbV9yZWYuanMgYi9jdWJpY3dlYl9z
YWVtX3JlZi9kYXRhL2N1YmVzLnNhZW1fcmVmPQouanMKcmVuYW1lIGZyb20gZGF0YS9jdWJlcy5z
YWVtX3JlZi5qcwpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9jdWJlcy5zYWVtX3Jl
Zi5qcwpkaWZmIC0tZ2l0IGEvZGF0YS9jdWJpY3dlYi5hdXRvY29tcGxldGVzZWFyY2guanMgYi9j
dWJpY3dlYl9zYWVtX3JlZi9kYXRhL2M9CnViaWN3ZWIuYXV0b2NvbXBsZXRlc2VhcmNoLmpzCnJl
bmFtZSBmcm9tIGRhdGEvY3ViaWN3ZWIuYXV0b2NvbXBsZXRlc2VhcmNoLmpzCnJlbmFtZSB0byBj
dWJpY3dlYl9zYWVtX3JlZi9kYXRhL2N1Ymljd2ViLmF1dG9jb21wbGV0ZXNlYXJjaC5qcwpkaWZm
IC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9qcXRyZWUuY3NzIGIvY3ViaWN3ZWJfc2Fl
bV9yZWYvZGF0YS9qcXQ9CnJlZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9kYXRhL2pxdHJlZS5jc3MKQEAgLTAsMCArMSwxMzIg
QEAKK3VsLmpxdHJlZS10cmVlIHsKKyAgbGlzdC1zdHlsZTogbm9uZSBvdXRzaWRlOworICBtYXJn
aW4tbGVmdDogMDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgcGFkZGluZzogMDsgfQorICB1bC5q
cXRyZWUtdHJlZSB1bC5qcXRyZWVfY29tbW9uIHsKKyAgICBsaXN0LXN0eWxlOiBub25lIG91dHNp
ZGU7CisgICAgbWFyZ2luLWxlZnQ6IDEycHg7CisgICAgbWFyZ2luLXJpZ2h0OiAwOworICAgIG1h
cmdpbi1ib3R0b206IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBkaXNwbGF5OiBibG9jazsgfQor
ICB1bC5qcXRyZWUtdHJlZSBsaS5qcXRyZWUtY2xvc2VkID4gdWwuanF0cmVlX2NvbW1vbiB7Cisg
ICAgZGlzcGxheTogbm9uZTsgfQorICB1bC5qcXRyZWUtdHJlZSBsaS5qcXRyZWVfY29tbW9uIHsK
KyAgICBjbGVhcjogYm90aDsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IH0KKyAgdWwuanF0
cmVlLXRyZWUgLmpxdHJlZS10b2dnbGVyIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworICAg
IGNvbG9yOiAjMzMzOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICB2ZXJ0aWNhbC1h
bGlnbjogbWlkZGxlOyB9CisgICAgdWwuanF0cmVlLXRyZWUgLmpxdHJlZS10b2dnbGVyOmhvdmVy
IHsKKyAgICAgIGNvbG9yOiAjMDAwOworICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Cisg
ICAgdWwuanF0cmVlLXRyZWUgLmpxdHJlZS10b2dnbGVyLmpxdHJlZS1jbG9zZWQgeworICAgICAg
YmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9CisgICAgdWwuanF0cmVlLXRyZWUgLmpxdHJlZS10
b2dnbGVyLmpxdHJlZS10b2dnbGVyLWxlZnQgeworICAgICAgbWFyZ2luLXJpZ2h0OiAwLjVlbTsg
fQorICAgIHVsLmpxdHJlZS10cmVlIC5qcXRyZWUtdG9nZ2xlci5qcXRyZWUtdG9nZ2xlci1yaWdo
dCB7CisgICAgICBtYXJnaW4tbGVmdDogMC41ZW07IH0KKyAgdWwuanF0cmVlLXRyZWUgLmpxdHJl
ZS1lbGVtZW50IHsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgcG9zaXRpb246IHJlbGF0aXZl
OyB9CisgIHVsLmpxdHJlZS10cmVlIC5qcXRyZWUtdGl0bGUgeworICAgIGNvbG9yOiAjMUM0MjU3
OworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgbWFyZ2luLWxlZnQ6IDEuNWVtOyB9
CisgICAgdWwuanF0cmVlLXRyZWUgLmpxdHJlZS10aXRsZS5qcXRyZWUtdGl0bGUtZm9sZGVyIHsK
KyAgICAgIG1hcmdpbi1sZWZ0OiAwOyB9CisgIHVsLmpxdHJlZS10cmVlIGxpLmpxdHJlZS1mb2xk
ZXIgeworICAgIG1hcmdpbi1ib3R0b206IDRweDsgfQorICAgIHVsLmpxdHJlZS10cmVlIGxpLmpx
dHJlZS1mb2xkZXIuanF0cmVlLWNsb3NlZCB7CisgICAgICBtYXJnaW4tYm90dG9tOiAxcHg7IH0K
KyAgdWwuanF0cmVlLXRyZWUgbGkuanF0cmVlLWdob3N0IHsKKyAgICBwb3NpdGlvbjogcmVsYXRp
dmU7CisgICAgei1pbmRleDogMTA7CisgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OworICAgIC8qIHRv
ZG86IGFkZCBjbGFzc2VzIHRvIHNwYW4/ICovIH0KKyAgICB1bC5qcXRyZWUtdHJlZSBsaS5qcXRy
ZWUtZ2hvc3Qgc3BhbiB7CisgICAgICBkaXNwbGF5OiBibG9jazsgfQorICAgIHVsLmpxdHJlZS10
cmVlIGxpLmpxdHJlZS1naG9zdCBzcGFuLmpxdHJlZS1jaXJjbGUgeworICAgICAgYm9yZGVyOiBz
b2xpZCAycHggIzAwMDBmZjsKKyAgICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTAwcHg7Cisg
ICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDEwMHB4OworICAgICAgYm9yZGVyLXJhZGl1czogMTAw
cHg7CisgICAgICBoZWlnaHQ6IDhweDsKKyAgICAgIHdpZHRoOiA4cHg7CisgICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgICAgICB0b3A6IC00cHg7CisgICAgICBsZWZ0OiAtNnB4OworICAgICAg
LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgLW1vei1ib3gtc2l6aW5nOiBi
b3JkZXItYm94OworICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQorICAgIHVsLmpxdHJl
ZS10cmVlIGxpLmpxdHJlZS1naG9zdCBzcGFuLmpxdHJlZS1saW5lIHsKKyAgICAgIGJhY2tncm91
bmQtY29sb3I6ICMwMDAwZmY7CisgICAgICBoZWlnaHQ6IDJweDsKKyAgICAgIHBhZGRpbmc6IDA7
CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICB0b3A6IC0xcHg7CisgICAgICBsZWZ0
OiAycHg7CisgICAgICB3aWR0aDogMTAwJTsgfQorICAgIHVsLmpxdHJlZS10cmVlIGxpLmpxdHJl
ZS1naG9zdC5qcXRyZWUtaW5zaWRlIHsKKyAgICAgIG1hcmdpbi1sZWZ0OiA0OHB4OyB9CisgIHVs
LmpxdHJlZS10cmVlIHNwYW4uanF0cmVlLWJvcmRlciB7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxlZnQ6IC0ycHg7CisgICAgdG9wOiAwOworICAg
IGJvcmRlcjogc29saWQgMnB4ICMwMDAwZmY7CisgICAgYm9yZGVyLXJhZGl1czogNnB4OworICAg
IG1hcmdpbjogMDsKKyAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgfQorICB1bC5qcXRyZWUt
dHJlZSBsaS5qcXRyZWUtc2VsZWN0ZWQgPiAuanF0cmVlLWVsZW1lbnQsCisgIHVsLmpxdHJlZS10
cmVlIGxpLmpxdHJlZS1zZWxlY3RlZCA+IC5qcXRyZWUtZWxlbWVudDpob3ZlciB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogIzk3QkRENjsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50
KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNCRUUwPQpGNSksIHRvKCM4OUFG
Q0EpKTsKKyAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNCRUUwRjUs
ICM4OUFGQ0EpOworICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjQkVF
MEY1LCAjODlBRkNBKTsKKyAgICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAj
QkVFMEY1LCAjODlBRkNBKTsKKyAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1
LCAyNTUsIDAuNyk7IH0KKyAgdWwuanF0cmVlLXRyZWUgLmpxdHJlZS1tb3ZpbmcgPiAuanF0cmVl
LWVsZW1lbnQgLmpxdHJlZS10aXRsZSB7CisgICAgb3V0bGluZTogZGFzaGVkIDFweCAjMDAwMGZm
OyB9CisKK3VsLmpxdHJlZS10cmVlLmpxdHJlZS1ydGwgeworICBkaXJlY3Rpb246IHJ0bDsgfQor
ICB1bC5qcXRyZWUtdHJlZS5qcXRyZWUtcnRsIHVsLmpxdHJlZV9jb21tb24geworICAgIG1hcmdp
bi1sZWZ0OiAwOworICAgIG1hcmdpbi1yaWdodDogMTJweDsgfQorICB1bC5qcXRyZWUtdHJlZS5q
cXRyZWUtcnRsIC5qcXRyZWUtdG9nZ2xlciB7CisgICAgbWFyZ2luLWxlZnQ6IDAuNWVtOworICAg
IG1hcmdpbi1yaWdodDogMDsgfQorICB1bC5qcXRyZWUtdHJlZS5qcXRyZWUtcnRsIC5qcXRyZWUt
dGl0bGUgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICAgIG1hcmdpbi1yaWdodDogMS41ZW07IH0K
KyAgICB1bC5qcXRyZWUtdHJlZS5qcXRyZWUtcnRsIC5qcXRyZWUtdGl0bGUuanF0cmVlLXRpdGxl
LWZvbGRlciB7CisgICAgICBtYXJnaW4tcmlnaHQ6IDA7IH0KKyAgdWwuanF0cmVlLXRyZWUuanF0
cmVlLXJ0bCBsaS5qcXRyZWUtZ2hvc3QgeworICAgIG1hcmdpbi1yaWdodDogMDsKKyAgICBtYXJn
aW4tbGVmdDogMTBweDsgfQorICAgIHVsLmpxdHJlZS10cmVlLmpxdHJlZS1ydGwgbGkuanF0cmVl
LWdob3N0IHNwYW4uanF0cmVlLWNpcmNsZSB7CisgICAgICByaWdodDogLTZweDsgfQorICAgIHVs
LmpxdHJlZS10cmVlLmpxdHJlZS1ydGwgbGkuanF0cmVlLWdob3N0IHNwYW4uanF0cmVlLWxpbmUg
eworICAgICAgcmlnaHQ6IDJweDsgfQorICAgIHVsLmpxdHJlZS10cmVlLmpxdHJlZS1ydGwgbGku
anF0cmVlLWdob3N0LmpxdHJlZS1pbnNpZGUgeworICAgICAgbWFyZ2luLWxlZnQ6IDA7CisgICAg
ICBtYXJnaW4tcmlnaHQ6IDQ4cHg7IH0KKyAgdWwuanF0cmVlLXRyZWUuanF0cmVlLXJ0bCBzcGFu
LmpxdHJlZS1ib3JkZXIgeworICAgIHJpZ2h0OiAtMnB4OyB9CisKK3NwYW4uanF0cmVlLWRyYWdn
aW5nIHsKKyAgY29sb3I6ICNmZmY7CisgIGJhY2tncm91bmQ6ICMwMDA7CisgIG9wYWNpdHk6IDAu
NjsKKyAgY3Vyc29yOiBwb2ludGVyOworICBwYWRkaW5nOiAycHggOHB4OyB9CisKKy8qIElFIDYs
IDcsIDggKi8KK0BtZWRpYSBcMHNjcmVlblwsc2NyZWVuXDkgIHsKKyAgdWwuanF0cmVlLXRyZWUg
bGkuanF0cmVlLWdob3N0IHNwYW4uanF0cmVlLWNpcmNsZSB7CisgICAgYmFja2dyb3VuZDogdXJs
KGpxdHJlZS1jaXJjbGUucG5nKSBuby1yZXBlYXQ7CisgICAgYm9yZGVyOiAwIG5vbmU7IH0gfQpk
aWZmIC0tZ2l0IGEvZGF0YS9qcXVlcnkuZXhwYW5kZXIuanMgYi9jdWJpY3dlYl9zYWVtX3JlZi9k
YXRhL2pxdWVyeS5leHBhbmQ9CmVyLmpzCnJlbmFtZSBmcm9tIGRhdGEvanF1ZXJ5LmV4cGFuZGVy
LmpzCnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9kYXRhL2pxdWVyeS5leHBhbmRlci5qcwpk
aWZmIC0tZ2l0IGEvZGF0YS9qcXVlcnkuaGlnaGxpZ2h0LmpzIGIvY3ViaWN3ZWJfc2FlbV9yZWYv
ZGF0YS9qcXVlcnkuaGlnaGw9CmlnaHQuanMKcmVuYW1lIGZyb20gZGF0YS9qcXVlcnkuaGlnaGxp
Z2h0LmpzCnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9kYXRhL2pxdWVyeS5oaWdobGlnaHQu
anMKZGlmZiAtLWdpdCBhL2RhdGEvanF1ZXJ5LmpPcmdDaGFydC5jc3MgYi9jdWJpY3dlYl9zYWVt
X3JlZi9kYXRhL2pxdWVyeS5qT3JnPQpDaGFydC5jc3MKcmVuYW1lIGZyb20gZGF0YS9qcXVlcnku
ak9yZ0NoYXJ0LmNzcwpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9qcXVlcnkuak9y
Z0NoYXJ0LmNzcwpkaWZmIC0tZ2l0IGEvZGF0YS9qcXVlcnkuak9yZ0NoYXJ0LmpzIGIvY3ViaWN3
ZWJfc2FlbV9yZWYvZGF0YS9qcXVlcnkuak9yZ0M9CmhhcnQuanMKcmVuYW1lIGZyb20gZGF0YS9q
cXVlcnkuak9yZ0NoYXJ0LmpzCnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9kYXRhL2pxdWVy
eS5qT3JnQ2hhcnQuanMKZGlmZiAtLWdpdCBhL2RhdGEvbG9nb19zYWVtLnBuZyBiL2N1Ymljd2Vi
X3NhZW1fcmVmL2RhdGEvbG9nb19zYWVtLnBuZwpyZW5hbWUgZnJvbSBkYXRhL2xvZ29fc2FlbS5w
bmcKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL2RhdGEvbG9nb19zYWVtLnBuZwpkaWZmIC0t
Z2l0IGEvZGF0YS9tYWlyaWVfYnguanBnIGIvY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YS9tYWlyaWVf
YnguanBnCnJlbmFtZSBmcm9tIGRhdGEvbWFpcmllX2J4LmpwZwpyZW5hbWUgdG8gY3ViaWN3ZWJf
c2FlbV9yZWYvZGF0YS9tYWlyaWVfYnguanBnCmRpZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVtX3Jl
Zi9kYXRhL3RyZWUuanF1ZXJ5LmpzIGIvY3ViaWN3ZWJfc2FlbV9yZWYvZGF0YT0KL3RyZWUuanF1
ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY3ViaWN3ZWJf
c2FlbV9yZWYvZGF0YS90cmVlLmpxdWVyeS5qcwpAQCAtMCwwICsxLDM1NzUgQEAKKy8qCitKcVRy
ZWUgMS4zLjMKKworQ29weXJpZ2h0IDIwMTUgTWFyY28gQnJhYWsKKworTGljZW5zZWQgdW5kZXIg
dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5
IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu
CitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkg
YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n
dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj
ZW5zZS4KKyovCisoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtp
ZighdFtvXSl7dmFyIGE9M0R0eXBlb2YgcmVxdT0KaXJlPTNEPTNEImZ1bmN0aW9uIiYmcmVxdWly
ZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhPQpyIGY9M0Ru
ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPTNEIk1P
RFVMRV9OT1RfRk89ClVORCIsZn12YXIgbD0zRG5bb109M0R7ZXhwb3J0czp7fX07dFtvXVswXS5j
YWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj0KPTNEdFtvXVsxXVtlXTtyZXR1cm4gcyhu
P246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyPQogaT0z
RHR5cGVvZiByZXF1aXJlPTNEPTNEImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89M0QwO288
ci5sZW5ndGg7bysrKXM9CihyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKK3ZhciAkLCBEcmFnQW5kRHJvcEhhbmRsZXIsIERyYWdFbGVtZW50LCBI
aXRBcmVhc0dlbmVyYXRvciwgUG9zaXRpb24sIFZpc2liPQpsZU5vZGVJdGVyYXRvciwgbm9kZV9t
b2R1bGUsCisgIGV4dGVuZCA9M0QgZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBr
ZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcj0Kb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tl
eV0gPTNEIHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuPQpjb25zdHJ1Y3Rv
ciA9M0QgY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPTNEIHBhcmVudC5wcm90b3R5cGU7IGNoaWxk
LnByb3RvdHk9CnBlID0zRCBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPTNEIHBhcmVudC5w
cm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSwKKyAgaGFzUHJvcCA9M0Qge30uaGFzT3duUHJvcGVy
dHk7CisKK25vZGVfbW9kdWxlID0zRCByZXF1aXJlKCcuL25vZGUnKTsKKworUG9zaXRpb24gPTNE
IG5vZGVfbW9kdWxlLlBvc2l0aW9uOworCiskID0zRCBqUXVlcnk7CisKK0RyYWdBbmREcm9wSGFu
ZGxlciA9M0QgKGZ1bmN0aW9uKCkgeworICBmdW5jdGlvbiBEcmFnQW5kRHJvcEhhbmRsZXIodHJl
ZV93aWRnZXQpIHsKKyAgICB0aGlzLnRyZWVfd2lkZ2V0ID0zRCB0cmVlX3dpZGdldDsKKyAgICB0
aGlzLmhvdmVyZWRfYXJlYSA9M0QgbnVsbDsKKyAgICB0aGlzLiRnaG9zdCA9M0QgbnVsbDsKKyAg
ICB0aGlzLmhpdF9hcmVhcyA9M0QgW107CisgICAgdGhpcy5pc19kcmFnZ2luZyA9M0QgZmFsc2U7
CisgICAgdGhpcy5jdXJyZW50X2l0ZW0gPTNEIG51bGw7CisgIH0KKworICBEcmFnQW5kRHJvcEhh
bmRsZXIucHJvdG90eXBlLm1vdXNlQ2FwdHVyZSA9M0QgZnVuY3Rpb24ocG9zaXRpb25faW5mbykg
eworICAgIHZhciAkZWxlbWVudCwgbm9kZV9lbGVtZW50OworICAgICRlbGVtZW50ID0zRCAkKHBv
c2l0aW9uX2luZm8udGFyZ2V0KTsKKyAgICBpZiAoIXRoaXMubXVzdENhcHR1cmVFbGVtZW50KCRl
bGVtZW50KSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGlmICh0aGlzLnRyZWVf
d2lkZ2V0Lm9wdGlvbnMub25Jc01vdmVIYW5kbGUgJiYgIXRoaXMudHJlZV93aWRnZXQub3B0aW89
Cm5zLm9uSXNNb3ZlSGFuZGxlKCRlbGVtZW50KSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAg
fQorICAgIG5vZGVfZWxlbWVudCA9M0QgdGhpcy50cmVlX3dpZGdldC5fZ2V0Tm9kZUVsZW1lbnQo
JGVsZW1lbnQpOworICAgIGlmIChub2RlX2VsZW1lbnQgJiYgdGhpcy50cmVlX3dpZGdldC5vcHRp
b25zLm9uQ2FuTW92ZSkgeworICAgICAgaWYgKCF0aGlzLnRyZWVfd2lkZ2V0Lm9wdGlvbnMub25D
YW5Nb3ZlKG5vZGVfZWxlbWVudC5ub2RlKSkgeworICAgICAgICBub2RlX2VsZW1lbnQgPTNEIG51
bGw7CisgICAgICB9CisgICAgfQorICAgIHRoaXMuY3VycmVudF9pdGVtID0zRCBub2RlX2VsZW1l
bnQ7CisgICAgcmV0dXJuIHRoaXMuY3VycmVudF9pdGVtICE9M0Q9M0QgbnVsbDsKKyAgfTsKKwor
ICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLm1vdXNlU3RhcnQgPTNEIGZ1bmN0aW9uKHBv
c2l0aW9uX2luZm8pIHsKKyAgICB2YXIgb2Zmc2V0OworICAgIHRoaXMucmVmcmVzaCgpOworICAg
IG9mZnNldCA9M0QgJChwb3NpdGlvbl9pbmZvLnRhcmdldCkub2Zmc2V0KCk7CisgICAgdGhpcy5k
cmFnX2VsZW1lbnQgPTNEIG5ldyBEcmFnRWxlbWVudCh0aGlzLmN1cnJlbnRfaXRlbS5ub2RlLCBw
b3NpdGlvbj0KX2luZm8ucGFnZV94IC0gb2Zmc2V0LmxlZnQsIHBvc2l0aW9uX2luZm8ucGFnZV95
IC0gb2Zmc2V0LnRvcCwgdGhpcy50cmVlX3dpPQpkZ2V0LmVsZW1lbnQpOworICAgIHRoaXMuaXNf
ZHJhZ2dpbmcgPTNEIHRydWU7CisgICAgdGhpcy5jdXJyZW50X2l0ZW0uJGVsZW1lbnQuYWRkQ2xh
c3MoJ2pxdHJlZS1tb3ZpbmcnKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICBEcmFnQW5k
RHJvcEhhbmRsZXIucHJvdG90eXBlLm1vdXNlRHJhZyA9M0QgZnVuY3Rpb24ocG9zaXRpb25faW5m
bykgeworICAgIHZhciBhcmVhLCBjYW5fbW92ZV90bzsKKyAgICB0aGlzLmRyYWdfZWxlbWVudC5t
b3ZlKHBvc2l0aW9uX2luZm8ucGFnZV94LCBwb3NpdGlvbl9pbmZvLnBhZ2VfeSk7CisgICAgYXJl
YSA9M0QgdGhpcy5maW5kSG92ZXJlZEFyZWEocG9zaXRpb25faW5mby5wYWdlX3gsIHBvc2l0aW9u
X2luZm8ucGFnZT0KX3kpOworICAgIGNhbl9tb3ZlX3RvID0zRCB0aGlzLmNhbk1vdmVUb0FyZWEo
YXJlYSk7CisgICAgaWYgKGNhbl9tb3ZlX3RvICYmIGFyZWEpIHsKKyAgICAgIGlmICghYXJlYS5u
b2RlLmlzRm9sZGVyKCkpIHsKKyAgICAgICAgdGhpcy5zdG9wT3BlbkZvbGRlclRpbWVyKCk7Cisg
ICAgICB9CisgICAgICBpZiAodGhpcy5ob3ZlcmVkX2FyZWEgIT0zRD0zRCBhcmVhKSB7CisgICAg
ICAgIHRoaXMuaG92ZXJlZF9hcmVhID0zRCBhcmVhOworICAgICAgICBpZiAodGhpcy5tdXN0T3Bl
bkZvbGRlclRpbWVyKGFyZWEpKSB7CisgICAgICAgICAgdGhpcy5zdGFydE9wZW5Gb2xkZXJUaW1l
cihhcmVhLm5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRoaXMuc3RvcE9wZW5G
b2xkZXJUaW1lcigpOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlRHJvcEhpbnQoKTsK
KyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdGhpcy5yZW1vdmVIb3ZlcigpOworICAgICAg
dGhpcy5yZW1vdmVEcm9wSGludCgpOworICAgICAgdGhpcy5zdG9wT3BlbkZvbGRlclRpbWVyKCk7
CisgICAgfQorICAgIGlmICghYXJlYSkgeworICAgICAgaWYgKHRoaXMudHJlZV93aWRnZXQub3B0
aW9ucy5vbkRyYWdNb3ZlICE9M0QgbnVsbCkgeworICAgICAgICB0aGlzLnRyZWVfd2lkZ2V0Lm9w
dGlvbnMub25EcmFnTW92ZSh0aGlzLmN1cnJlbnRfaXRlbS5ub2RlLCBwb3NpdGk9Cm9uX2luZm8u
b3JpZ2luYWxfZXZlbnQpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsK
KworICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLm11c3RDYXB0dXJlRWxlbWVudCA9M0Qg
ZnVuY3Rpb24oJGVsZW1lbnQpIHsKKyAgICByZXR1cm4gISRlbGVtZW50LmlzKCdpbnB1dCxzZWxl
Y3QnKTsKKyAgfTsKKworICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLmNhbk1vdmVUb0Fy
ZWEgPTNEIGZ1bmN0aW9uKGFyZWEpIHsKKyAgICB2YXIgcG9zaXRpb25fbmFtZTsKKyAgICBpZiAo
IWFyZWEpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHRoaXMudHJlZV93
aWRnZXQub3B0aW9ucy5vbkNhbk1vdmVUbykgeworICAgICAgcG9zaXRpb25fbmFtZSA9M0QgUG9z
aXRpb24uZ2V0TmFtZShhcmVhLnBvc2l0aW9uKTsKKyAgICAgIHJldHVybiB0aGlzLnRyZWVfd2lk
Z2V0Lm9wdGlvbnMub25DYW5Nb3ZlVG8odGhpcy5jdXJyZW50X2l0ZW0ubm9kZSwgPQphcmVhLm5v
ZGUsIHBvc2l0aW9uX25hbWUpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgIH07CisKKyAgRHJhZ0FuZERyb3BIYW5kbGVyLnByb3RvdHlwZS5tb3VzZVN0b3AgPTNE
IGZ1bmN0aW9uKHBvc2l0aW9uX2luZm8pIHsKKyAgICB2YXIgY3VycmVudF9pdGVtOworICAgIHRo
aXMubW92ZUl0ZW0ocG9zaXRpb25faW5mbyk7CisgICAgdGhpcy5jbGVhcigpOworICAgIHRoaXMu
cmVtb3ZlSG92ZXIoKTsKKyAgICB0aGlzLnJlbW92ZURyb3BIaW50KCk7CisgICAgdGhpcy5yZW1v
dmVIaXRBcmVhcygpOworICAgIGN1cnJlbnRfaXRlbSA9M0QgdGhpcy5jdXJyZW50X2l0ZW07Cisg
ICAgaWYgKHRoaXMuY3VycmVudF9pdGVtKSB7CisgICAgICB0aGlzLmN1cnJlbnRfaXRlbS4kZWxl
bWVudC5yZW1vdmVDbGFzcygnanF0cmVlLW1vdmluZycpOworICAgICAgdGhpcy5jdXJyZW50X2l0
ZW0gPTNEIG51bGw7CisgICAgfQorICAgIHRoaXMuaXNfZHJhZ2dpbmcgPTNEIGZhbHNlOworICAg
IGlmICghdGhpcy5ob3ZlcmVkX2FyZWEgJiYgY3VycmVudF9pdGVtKSB7CisgICAgICBpZiAodGhp
cy50cmVlX3dpZGdldC5vcHRpb25zLm9uRHJhZ1N0b3AgIT0zRCBudWxsKSB7CisgICAgICAgIHRo
aXMudHJlZV93aWRnZXQub3B0aW9ucy5vbkRyYWdTdG9wKGN1cnJlbnRfaXRlbS5ub2RlLCBwb3Np
dGlvbl9pbj0KZm8ub3JpZ2luYWxfZXZlbnQpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CisgIH07CisKKyAgRHJhZ0FuZERyb3BIYW5kbGVyLnByb3RvdHlwZS5yZWZyZXNoID0z
RCBmdW5jdGlvbigpIHsKKyAgICB0aGlzLnJlbW92ZUhpdEFyZWFzKCk7CisgICAgaWYgKHRoaXMu
Y3VycmVudF9pdGVtKSB7CisgICAgICB0aGlzLmdlbmVyYXRlSGl0QXJlYXMoKTsKKyAgICAgIHRo
aXMuY3VycmVudF9pdGVtID0zRCB0aGlzLnRyZWVfd2lkZ2V0Ll9nZXROb2RlRWxlbWVudEZvck5v
ZGUodGhpcy5jPQp1cnJlbnRfaXRlbS5ub2RlKTsKKyAgICAgIGlmICh0aGlzLmlzX2RyYWdnaW5n
KSB7CisgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRfaXRlbS4kZWxlbWVudC5hZGRDbGFzcygn
anF0cmVlLW1vdmluZycpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBEcmFnQW5kRHJvcEhh
bmRsZXIucHJvdG90eXBlLnJlbW92ZUhpdEFyZWFzID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy5oaXRfYXJlYXMgPTNEIFtdOworICB9OworCisgIERyYWdBbmREcm9wSGFuZGxlci5w
cm90b3R5cGUuY2xlYXIgPTNEIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZHJhZ19lbGVtZW50LnJl
bW92ZSgpOworICAgIHJldHVybiB0aGlzLmRyYWdfZWxlbWVudCA9M0QgbnVsbDsKKyAgfTsKKwor
ICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLnJlbW92ZURyb3BIaW50ID0zRCBmdW5jdGlv
bigpIHsKKyAgICBpZiAodGhpcy5wcmV2aW91c19naG9zdCkgeworICAgICAgcmV0dXJuIHRoaXMu
cHJldmlvdXNfZ2hvc3QucmVtb3ZlKCk7CisgICAgfQorICB9OworCisgIERyYWdBbmREcm9wSGFu
ZGxlci5wcm90b3R5cGUucmVtb3ZlSG92ZXIgPTNEIGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0
aGlzLmhvdmVyZWRfYXJlYSA9M0QgbnVsbDsKKyAgfTsKKworICBEcmFnQW5kRHJvcEhhbmRsZXIu
cHJvdG90eXBlLmdlbmVyYXRlSGl0QXJlYXMgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBoaXRf
YXJlYXNfZ2VuZXJhdG9yOworICAgIGhpdF9hcmVhc19nZW5lcmF0b3IgPTNEIG5ldyBIaXRBcmVh
c0dlbmVyYXRvcih0aGlzLnRyZWVfd2lkZ2V0LnRyZWUsIHQ9Cmhpcy5jdXJyZW50X2l0ZW0ubm9k
ZSwgdGhpcy5nZXRUcmVlRGltZW5zaW9ucygpLmJvdHRvbSk7CisgICAgcmV0dXJuIHRoaXMuaGl0
X2FyZWFzID0zRCBoaXRfYXJlYXNfZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CisgIH07CisKKyAgRHJh
Z0FuZERyb3BIYW5kbGVyLnByb3RvdHlwZS5maW5kSG92ZXJlZEFyZWEgPTNEIGZ1bmN0aW9uKHgs
IHkpIHsKKyAgICB2YXIgYXJlYSwgZGltZW5zaW9ucywgaGlnaCwgbG93LCBtaWQ7CisgICAgZGlt
ZW5zaW9ucyA9M0QgdGhpcy5nZXRUcmVlRGltZW5zaW9ucygpOworICAgIGlmICh4IDwgZGltZW5z
aW9ucy5sZWZ0IHx8IHkgPCBkaW1lbnNpb25zLnRvcCB8fCB4ID4gZGltZW5zaW9ucy5yaWdodCA9
Cnx8IHkgPiBkaW1lbnNpb25zLmJvdHRvbSkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQor
ICAgIGxvdyA9M0QgMDsKKyAgICBoaWdoID0zRCB0aGlzLmhpdF9hcmVhcy5sZW5ndGg7CisgICAg
d2hpbGUgKGxvdyA8IGhpZ2gpIHsKKyAgICAgIG1pZCA9M0QgKGxvdyArIGhpZ2gpID4+IDE7Cisg
ICAgICBhcmVhID0zRCB0aGlzLmhpdF9hcmVhc1ttaWRdOworICAgICAgaWYgKHkgPCBhcmVhLnRv
cCkgeworICAgICAgICBoaWdoID0zRCBtaWQ7CisgICAgICB9IGVsc2UgaWYgKHkgPiBhcmVhLmJv
dHRvbSkgeworICAgICAgICBsb3cgPTNEIG1pZCArIDE7CisgICAgICB9IGVsc2UgeworICAgICAg
ICByZXR1cm4gYXJlYTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGw7CisgIH07CisK
KyAgRHJhZ0FuZERyb3BIYW5kbGVyLnByb3RvdHlwZS5tdXN0T3BlbkZvbGRlclRpbWVyID0zRCBm
dW5jdGlvbihhcmVhKSB7CisgICAgdmFyIG5vZGU7CisgICAgbm9kZSA9M0QgYXJlYS5ub2RlOwor
ICAgIHJldHVybiBub2RlLmlzRm9sZGVyKCkgJiYgIW5vZGUuaXNfb3BlbiAmJiBhcmVhLnBvc2l0
aW9uID0zRD0zRD0zRCBQb3M9Cml0aW9uLklOU0lERTsKKyAgfTsKKworICBEcmFnQW5kRHJvcEhh
bmRsZXIucHJvdG90eXBlLnVwZGF0ZURyb3BIaW50ID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIg
bm9kZV9lbGVtZW50OworICAgIGlmICghdGhpcy5ob3ZlcmVkX2FyZWEpIHsKKyAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgdGhpcy5yZW1vdmVEcm9wSGludCgpOworICAgIG5vZGVfZWxlbWVudCA9
M0QgdGhpcy50cmVlX3dpZGdldC5fZ2V0Tm9kZUVsZW1lbnRGb3JOb2RlKHRoaXMuaG92ZXJlZF89
CmFyZWEubm9kZSk7CisgICAgcmV0dXJuIHRoaXMucHJldmlvdXNfZ2hvc3QgPTNEIG5vZGVfZWxl
bWVudC5hZGREcm9wSGludCh0aGlzLmhvdmVyZWRfYT0KcmVhLnBvc2l0aW9uKTsKKyAgfTsKKwor
ICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLnN0YXJ0T3BlbkZvbGRlclRpbWVyID0zRCBm
dW5jdGlvbihmb2xkZXIpIHsKKyAgICB2YXIgb3BlbkZvbGRlcjsKKyAgICBvcGVuRm9sZGVyID0z
RCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIF90aGlzLnRyZWVfd2lkZ2V0Ll9vcGVuTm9kZShmb2xkZXIsIF90aGlzLnRyZWVfd2lk
Z2V0Lm9wdGlvPQpucy5zbGlkZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgX3RoaXMucmVmcmVz
aCgpOworICAgICAgICAgIHJldHVybiBfdGhpcy51cGRhdGVEcm9wSGludCgpOworICAgICAgICB9
KTsKKyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgdGhpcy5zdG9wT3BlbkZvbGRlclRpbWVy
KCk7CisgICAgcmV0dXJuIHRoaXMub3Blbl9mb2xkZXJfdGltZXIgPTNEIHNldFRpbWVvdXQob3Bl
bkZvbGRlciwgdGhpcy50cmVlX3dpZD0KZ2V0Lm9wdGlvbnMub3BlbkZvbGRlckRlbGF5KTsKKyAg
fTsKKworICBEcmFnQW5kRHJvcEhhbmRsZXIucHJvdG90eXBlLnN0b3BPcGVuRm9sZGVyVGltZXIg
PTNEIGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm9wZW5fZm9sZGVyX3RpbWVyKSB7CisgICAg
ICBjbGVhclRpbWVvdXQodGhpcy5vcGVuX2ZvbGRlcl90aW1lcik7CisgICAgICByZXR1cm4gdGhp
cy5vcGVuX2ZvbGRlcl90aW1lciA9M0QgbnVsbDsKKyAgICB9CisgIH07CisKKyAgRHJhZ0FuZERy
b3BIYW5kbGVyLnByb3RvdHlwZS5tb3ZlSXRlbSA9M0QgZnVuY3Rpb24ocG9zaXRpb25faW5mbykg
eworICAgIHZhciBkb01vdmUsIGV2ZW50LCBtb3ZlZF9ub2RlLCBwb3NpdGlvbiwgcHJldmlvdXNf
cGFyZW50LCB0YXJnZXRfbm9kZTsKKyAgICBpZiAodGhpcy5ob3ZlcmVkX2FyZWEgJiYgdGhpcy5o
b3ZlcmVkX2FyZWEucG9zaXRpb24gIT0zRD0zRCBQb3NpdGlvbi5OPQpPTkUgJiYgdGhpcy5jYW5N
b3ZlVG9BcmVhKHRoaXMuaG92ZXJlZF9hcmVhKSkgeworICAgICAgbW92ZWRfbm9kZSA9M0QgdGhp
cy5jdXJyZW50X2l0ZW0ubm9kZTsKKyAgICAgIHRhcmdldF9ub2RlID0zRCB0aGlzLmhvdmVyZWRf
YXJlYS5ub2RlOworICAgICAgcG9zaXRpb24gPTNEIHRoaXMuaG92ZXJlZF9hcmVhLnBvc2l0aW9u
OworICAgICAgcHJldmlvdXNfcGFyZW50ID0zRCBtb3ZlZF9ub2RlLnBhcmVudDsKKyAgICAgIGlm
IChwb3NpdGlvbiA9M0Q9M0Q9M0QgUG9zaXRpb24uSU5TSURFKSB7CisgICAgICAgIHRoaXMuaG92
ZXJlZF9hcmVhLm5vZGUuaXNfb3BlbiA9M0QgdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGRvTW92ZSA9
M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICBfdGhpcy50cmVlX3dpZGdldC50cmVlLm1vdmVOb2RlKG1vdmVkX25vZGUsIHRhcmdldF9u
b2RlLCBwb3NpdGlvPQpuKTsKKyAgICAgICAgICBfdGhpcy50cmVlX3dpZGdldC5lbGVtZW50LmVt
cHR5KCk7CisgICAgICAgICAgcmV0dXJuIF90aGlzLnRyZWVfd2lkZ2V0Ll9yZWZyZXNoRWxlbWVu
dHMoKTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAgZXZlbnQgPTNEIHRoaXMu
dHJlZV93aWRnZXQuX3RyaWdnZXJFdmVudCgndHJlZS5tb3ZlJywgeworICAgICAgICBtb3ZlX2lu
Zm86IHsKKyAgICAgICAgICBtb3ZlZF9ub2RlOiBtb3ZlZF9ub2RlLAorICAgICAgICAgIHRhcmdl
dF9ub2RlOiB0YXJnZXRfbm9kZSwKKyAgICAgICAgICBwb3NpdGlvbjogUG9zaXRpb24uZ2V0TmFt
ZShwb3NpdGlvbiksCisgICAgICAgICAgcHJldmlvdXNfcGFyZW50OiBwcmV2aW91c19wYXJlbnQs
CisgICAgICAgICAgZG9fbW92ZTogZG9Nb3ZlLAorICAgICAgICAgIG9yaWdpbmFsX2V2ZW50OiBw
b3NpdGlvbl9pbmZvLm9yaWdpbmFsX2V2ZW50CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAg
aWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgeworICAgICAgICByZXR1cm4gZG9Nb3Zl
KCk7CisgICAgICB9CisgICAgfQorICB9OworCisgIERyYWdBbmREcm9wSGFuZGxlci5wcm90b3R5
cGUuZ2V0VHJlZURpbWVuc2lvbnMgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBvZmZzZXQ7Cisg
ICAgb2Zmc2V0ID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmVsZW1lbnQub2Zmc2V0KCk7CisgICAgcmV0
dXJuIHsKKyAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0LAorICAgICAgdG9wOiBvZmZzZXQudG9wLAor
ICAgICAgcmlnaHQ6IG9mZnNldC5sZWZ0ICsgdGhpcy50cmVlX3dpZGdldC5lbGVtZW50LndpZHRo
KCksCisgICAgICBib3R0b206IG9mZnNldC50b3AgKyB0aGlzLnRyZWVfd2lkZ2V0LmVsZW1lbnQu
aGVpZ2h0KCkgKyAxNgorICAgIH07CisgIH07CisKKyAgcmV0dXJuIERyYWdBbmREcm9wSGFuZGxl
cjsKKworfSkoKTsKKworVmlzaWJsZU5vZGVJdGVyYXRvciA9M0QgKGZ1bmN0aW9uKCkgeworICBm
dW5jdGlvbiBWaXNpYmxlTm9kZUl0ZXJhdG9yKHRyZWUpIHsKKyAgICB0aGlzLnRyZWUgPTNEIHRy
ZWU7CisgIH0KKworICBWaXNpYmxlTm9kZUl0ZXJhdG9yLnByb3RvdHlwZS5pdGVyYXRlID0zRCBm
dW5jdGlvbigpIHsKKyAgICB2YXIgX2l0ZXJhdGVOb2RlLCBpc19maXJzdF9ub2RlOworICAgIGlz
X2ZpcnN0X25vZGUgPTNEIHRydWU7CisgICAgX2l0ZXJhdGVOb2RlID0zRCAoZnVuY3Rpb24oX3Ro
aXMpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbihub2RlLCBuZXh0X25vZGUpIHsKKyAgICAgICAg
dmFyICRlbGVtZW50LCBjaGlsZCwgY2hpbGRyZW5fbGVuZ3RoLCBpLCBqLCBsZW4sIG11c3RfaXRl
cmF0ZV9pbnNpPQpkZSwgcmVmOworICAgICAgICBtdXN0X2l0ZXJhdGVfaW5zaWRlID0zRCAobm9k
ZS5pc19vcGVuIHx8ICFub2RlLmVsZW1lbnQpICYmIG5vZGUuaGE9CnNDaGlsZHJlbigpOworICAg
ICAgICBpZiAobm9kZS5lbGVtZW50KSB7CisgICAgICAgICAgJGVsZW1lbnQgPTNEICQobm9kZS5l
bGVtZW50KTsKKyAgICAgICAgICBpZiAoISRlbGVtZW50LmlzKCc6dmlzaWJsZScpKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChpc19maXJzdF9ub2Rl
KSB7CisgICAgICAgICAgICBfdGhpcy5oYW5kbGVGaXJzdE5vZGUobm9kZSwgJGVsZW1lbnQpOwor
ICAgICAgICAgICAgaXNfZmlyc3Rfbm9kZSA9M0QgZmFsc2U7CisgICAgICAgICAgfQorICAgICAg
ICAgIGlmICghbm9kZS5oYXNDaGlsZHJlbigpKSB7CisgICAgICAgICAgICBfdGhpcy5oYW5kbGVO
b2RlKG5vZGUsIG5leHRfbm9kZSwgJGVsZW1lbnQpOworICAgICAgICAgIH0gZWxzZSBpZiAobm9k
ZS5pc19vcGVuKSB7CisgICAgICAgICAgICBpZiAoIV90aGlzLmhhbmRsZU9wZW5Gb2xkZXIobm9k
ZSwgJGVsZW1lbnQpKSB7CisgICAgICAgICAgICAgIG11c3RfaXRlcmF0ZV9pbnNpZGUgPTNEIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBfdGhp
cy5oYW5kbGVDbG9zZWRGb2xkZXIobm9kZSwgbmV4dF9ub2RlLCAkZWxlbWVudCk7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtdXN0X2l0ZXJhdGVfaW5zaWRlKSB7CisgICAg
ICAgICAgY2hpbGRyZW5fbGVuZ3RoID0zRCBub2RlLmNoaWxkcmVuLmxlbmd0aDsKKyAgICAgICAg
ICByZWYgPTNEIG5vZGUuY2hpbGRyZW47CisgICAgICAgICAgZm9yIChpID0zRCBqID0zRCAwLCBs
ZW4gPTNEIHJlZi5sZW5ndGg7IGogPCBsZW47IGkgPTNEICsraikgeworICAgICAgICAgICAgY2hp
bGQgPTNEIHJlZltpXTsKKyAgICAgICAgICAgIGlmIChpID0zRD0zRD0zRCAoY2hpbGRyZW5fbGVu
Z3RoIC0gMSkpIHsKKyAgICAgICAgICAgICAgX2l0ZXJhdGVOb2RlKG5vZGUuY2hpbGRyZW5baV0s
IG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgX2l0ZXJhdGVOb2Rl
KG5vZGUuY2hpbGRyZW5baV0sIG5vZGUuY2hpbGRyZW5baSArIDFdKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgICAgaWYgKG5vZGUuaXNfb3BlbikgeworICAgICAgICAgICAg
cmV0dXJuIF90aGlzLmhhbmRsZUFmdGVyT3BlbkZvbGRlcihub2RlLCBuZXh0X25vZGUsICRlbGVt
ZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSkodGhpcyk7Cisg
ICAgcmV0dXJuIF9pdGVyYXRlTm9kZSh0aGlzLnRyZWUsIG51bGwpOworICB9OworCisgIFZpc2li
bGVOb2RlSXRlcmF0b3IucHJvdG90eXBlLmhhbmRsZU5vZGUgPTNEIGZ1bmN0aW9uKG5vZGUsIG5l
eHRfbm9kZSwgJD0KZWxlbWVudCkge307CisKKyAgVmlzaWJsZU5vZGVJdGVyYXRvci5wcm90b3R5
cGUuaGFuZGxlT3BlbkZvbGRlciA9M0QgZnVuY3Rpb24obm9kZSwgJGVsZW1lPQpudCkge307CisK
KyAgVmlzaWJsZU5vZGVJdGVyYXRvci5wcm90b3R5cGUuaGFuZGxlQ2xvc2VkRm9sZGVyID0zRCBm
dW5jdGlvbihub2RlLCBuZXh0PQpfbm9kZSwgJGVsZW1lbnQpIHt9OworCisgIFZpc2libGVOb2Rl
SXRlcmF0b3IucHJvdG90eXBlLmhhbmRsZUFmdGVyT3BlbkZvbGRlciA9M0QgZnVuY3Rpb24obm9k
ZSwgbj0KZXh0X25vZGUsICRlbGVtZW50KSB7fTsKKworICBWaXNpYmxlTm9kZUl0ZXJhdG9yLnBy
b3RvdHlwZS5oYW5kbGVGaXJzdE5vZGUgPTNEIGZ1bmN0aW9uKG5vZGUsICRlbGVtZW49CnQpIHt9
OworCisgIHJldHVybiBWaXNpYmxlTm9kZUl0ZXJhdG9yOworCit9KSgpOworCitIaXRBcmVhc0dl
bmVyYXRvciA9M0QgKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHsKKyAgZXh0ZW5kKEhpdEFyZWFzR2Vu
ZXJhdG9yLCBzdXBlckNsYXNzKTsKKworICBmdW5jdGlvbiBIaXRBcmVhc0dlbmVyYXRvcih0cmVl
LCBjdXJyZW50X25vZGUsIHRyZWVfYm90dG9tKSB7CisgICAgSGl0QXJlYXNHZW5lcmF0b3IuX19z
dXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgdHJlZSk7CisgICAgdGhpcy5jdXJyZW50X25v
ZGUgPTNEIGN1cnJlbnRfbm9kZTsKKyAgICB0aGlzLnRyZWVfYm90dG9tID0zRCB0cmVlX2JvdHRv
bTsKKyAgfQorCisgIEhpdEFyZWFzR2VuZXJhdG9yLnByb3RvdHlwZS5nZW5lcmF0ZSA9M0QgZnVu
Y3Rpb24oKSB7CisgICAgdGhpcy5wb3NpdGlvbnMgPTNEIFtdOworICAgIHRoaXMubGFzdF90b3Ag
PTNEIDA7CisgICAgdGhpcy5pdGVyYXRlKCk7CisgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVIaXRB
cmVhcyh0aGlzLnBvc2l0aW9ucyk7CisgIH07CisKKyAgSGl0QXJlYXNHZW5lcmF0b3IucHJvdG90
eXBlLmdldFRvcCA9M0QgZnVuY3Rpb24oJGVsZW1lbnQpIHsKKyAgICByZXR1cm4gJGVsZW1lbnQu
b2Zmc2V0KCkudG9wOworICB9OworCisgIEhpdEFyZWFzR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRQ
b3NpdGlvbiA9M0QgZnVuY3Rpb24obm9kZSwgcG9zaXRpb24sIHRvcD0KKSB7CisgICAgdmFyIGFy
ZWE7CisgICAgYXJlYSA9M0QgeworICAgICAgdG9wOiB0b3AsCisgICAgICBub2RlOiBub2RlLAor
ICAgICAgcG9zaXRpb246IHBvc2l0aW9uCisgICAgfTsKKyAgICB0aGlzLnBvc2l0aW9ucy5wdXNo
KGFyZWEpOworICAgIHJldHVybiB0aGlzLmxhc3RfdG9wID0zRCB0b3A7CisgIH07CisKKyAgSGl0
QXJlYXNHZW5lcmF0b3IucHJvdG90eXBlLmhhbmRsZU5vZGUgPTNEIGZ1bmN0aW9uKG5vZGUsIG5l
eHRfbm9kZSwgJGVsPQplbWVudCkgeworICAgIHZhciB0b3A7CisgICAgdG9wID0zRCB0aGlzLmdl
dFRvcCgkZWxlbWVudCk7CisgICAgaWYgKG5vZGUgPTNEPTNEPTNEIHRoaXMuY3VycmVudF9ub2Rl
KSB7CisgICAgICB0aGlzLmFkZFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uLk5PTkUsIHRvcCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuYWRkUG9zaXRpb24obm9kZSwgUG9zaXRpb24uSU5TSURF
LCB0b3ApOworICAgIH0KKyAgICBpZiAobmV4dF9ub2RlID0zRD0zRD0zRCB0aGlzLmN1cnJlbnRf
bm9kZSB8fCBub2RlID0zRD0zRD0zRCB0aGlzLmN1cnJlPQpudF9ub2RlKSB7CisgICAgICByZXR1
cm4gdGhpcy5hZGRQb3NpdGlvbihub2RlLCBQb3NpdGlvbi5OT05FLCB0b3ApOworICAgIH0gZWxz
ZSB7CisgICAgICByZXR1cm4gdGhpcy5hZGRQb3NpdGlvbihub2RlLCBQb3NpdGlvbi5BRlRFUiwg
dG9wKTsKKyAgICB9CisgIH07CisKKyAgSGl0QXJlYXNHZW5lcmF0b3IucHJvdG90eXBlLmhhbmRs
ZU9wZW5Gb2xkZXIgPTNEIGZ1bmN0aW9uKG5vZGUsICRlbGVtZW50PQopIHsKKyAgICBpZiAobm9k
ZSA9M0Q9M0Q9M0QgdGhpcy5jdXJyZW50X25vZGUpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKG5vZGUuY2hpbGRyZW5bMF0gIT0zRD0zRCB0aGlzLmN1cnJlbnRfbm9kZSkg
eworICAgICAgdGhpcy5hZGRQb3NpdGlvbihub2RlLCBQb3NpdGlvbi5JTlNJREUsIHRoaXMuZ2V0
VG9wKCRlbGVtZW50KSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9OworCisgIEhpdEFy
ZWFzR2VuZXJhdG9yLnByb3RvdHlwZS5oYW5kbGVDbG9zZWRGb2xkZXIgPTNEIGZ1bmN0aW9uKG5v
ZGUsIG5leHRfbj0Kb2RlLCAkZWxlbWVudCkgeworICAgIHZhciB0b3A7CisgICAgdG9wID0zRCB0
aGlzLmdldFRvcCgkZWxlbWVudCk7CisgICAgaWYgKG5vZGUgPTNEPTNEPTNEIHRoaXMuY3VycmVu
dF9ub2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5hZGRQb3NpdGlvbihub2RlLCBQb3NpdGlvbi5O
T05FLCB0b3ApOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLmFkZFBvc2l0aW9uKG5vZGUsIFBv
c2l0aW9uLklOU0lERSwgdG9wKTsKKyAgICAgIGlmIChuZXh0X25vZGUgIT0zRD0zRCB0aGlzLmN1
cnJlbnRfbm9kZSkgeworICAgICAgICByZXR1cm4gdGhpcy5hZGRQb3NpdGlvbihub2RlLCBQb3Np
dGlvbi5BRlRFUiwgdG9wKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgSGl0QXJlYXNHZW5l
cmF0b3IucHJvdG90eXBlLmhhbmRsZUZpcnN0Tm9kZSA9M0QgZnVuY3Rpb24obm9kZSwgJGVsZW1l
bnQpPQogeworICAgIGlmIChub2RlICE9M0Q9M0QgdGhpcy5jdXJyZW50X25vZGUpIHsKKyAgICAg
IHJldHVybiB0aGlzLmFkZFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uLkJFRk9SRSwgdGhpcy5nZXRU
b3AoJChub2RlLmVsPQplbWVudCkpKTsKKyAgICB9CisgIH07CisKKyAgSGl0QXJlYXNHZW5lcmF0
b3IucHJvdG90eXBlLmhhbmRsZUFmdGVyT3BlbkZvbGRlciA9M0QgZnVuY3Rpb24obm9kZSwgbmV4
PQp0X25vZGUsICRlbGVtZW50KSB7CisgICAgaWYgKG5vZGUgPTNEPTNEPTNEIHRoaXMuY3VycmVu
dF9ub2RlLm5vZGUgfHwgbmV4dF9ub2RlID0zRD0zRD0zRCB0aGlzLj0KY3VycmVudF9ub2RlLm5v
ZGUpIHsKKyAgICAgIHJldHVybiB0aGlzLmFkZFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uLk5PTkUs
IHRoaXMubGFzdF90b3ApOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdGhpcy5hZGRQb3Np
dGlvbihub2RlLCBQb3NpdGlvbi5BRlRFUiwgdGhpcy5sYXN0X3RvcCk7CisgICAgfQorICB9Owor
CisgIEhpdEFyZWFzR2VuZXJhdG9yLnByb3RvdHlwZS5nZW5lcmF0ZUhpdEFyZWFzID0zRCBmdW5j
dGlvbihwb3NpdGlvbnMpIHsKKyAgICB2YXIgZ3JvdXAsIGhpdF9hcmVhcywgaiwgbGVuLCBwb3Np
dGlvbiwgcHJldmlvdXNfdG9wOworICAgIHByZXZpb3VzX3RvcCA9M0QgLTE7CisgICAgZ3JvdXAg
PTNEIFtdOworICAgIGhpdF9hcmVhcyA9M0QgW107CisgICAgZm9yIChqID0zRCAwLCBsZW4gPTNE
IHBvc2l0aW9ucy5sZW5ndGg7IGogPCBsZW47IGorKykgeworICAgICAgcG9zaXRpb24gPTNEIHBv
c2l0aW9uc1tqXTsKKyAgICAgIGlmIChwb3NpdGlvbi50b3AgIT0zRD0zRCBwcmV2aW91c190b3Ag
JiYgZ3JvdXAubGVuZ3RoKSB7CisgICAgICAgIGlmIChncm91cC5sZW5ndGgpIHsKKyAgICAgICAg
ICB0aGlzLmdlbmVyYXRlSGl0QXJlYXNGb3JHcm91cChoaXRfYXJlYXMsIGdyb3VwLCBwcmV2aW91
c190b3AsIHBvPQpzaXRpb24udG9wKTsKKyAgICAgICAgfQorICAgICAgICBwcmV2aW91c190b3Ag
PTNEIHBvc2l0aW9uLnRvcDsKKyAgICAgICAgZ3JvdXAgPTNEIFtdOworICAgICAgfQorICAgICAg
Z3JvdXAucHVzaChwb3NpdGlvbik7CisgICAgfQorICAgIHRoaXMuZ2VuZXJhdGVIaXRBcmVhc0Zv
ckdyb3VwKGhpdF9hcmVhcywgZ3JvdXAsIHByZXZpb3VzX3RvcCwgdGhpcy50cmU9CmVfYm90dG9t
KTsKKyAgICByZXR1cm4gaGl0X2FyZWFzOworICB9OworCisgIEhpdEFyZWFzR2VuZXJhdG9yLnBy
b3RvdHlwZS5nZW5lcmF0ZUhpdEFyZWFzRm9yR3JvdXAgPTNEIGZ1bmN0aW9uKGhpdF9hcj0KZWFz
LCBwb3NpdGlvbnNfaW5fZ3JvdXAsIHRvcCwgYm90dG9tKSB7CisgICAgdmFyIGFyZWFfaGVpZ2h0
LCBhcmVhX3RvcCwgaSwgcG9zaXRpb24sIHBvc2l0aW9uX2NvdW50OworICAgIHBvc2l0aW9uX2Nv
dW50ID0zRCBNYXRoLm1pbihwb3NpdGlvbnNfaW5fZ3JvdXAubGVuZ3RoLCA0KTsKKyAgICBhcmVh
X2hlaWdodCA9M0QgTWF0aC5yb3VuZCgoYm90dG9tIC0gdG9wKSAvIHBvc2l0aW9uX2NvdW50KTsK
KyAgICBhcmVhX3RvcCA9M0QgdG9wOworICAgIGkgPTNEIDA7CisgICAgd2hpbGUgKGkgPCBwb3Np
dGlvbl9jb3VudCkgeworICAgICAgcG9zaXRpb24gPTNEIHBvc2l0aW9uc19pbl9ncm91cFtpXTsK
KyAgICAgIGhpdF9hcmVhcy5wdXNoKHsKKyAgICAgICAgdG9wOiBhcmVhX3RvcCwKKyAgICAgICAg
Ym90dG9tOiBhcmVhX3RvcCArIGFyZWFfaGVpZ2h0LAorICAgICAgICBub2RlOiBwb3NpdGlvbi5u
b2RlLAorICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24ucG9zaXRpb24KKyAgICAgIH0pOworICAg
ICAgYXJlYV90b3AgKz0zRCBhcmVhX2hlaWdodDsKKyAgICAgIGkgKz0zRCAxOworICAgIH0KKyAg
ICByZXR1cm4gbnVsbDsKKyAgfTsKKworICByZXR1cm4gSGl0QXJlYXNHZW5lcmF0b3I7CisKK30p
KFZpc2libGVOb2RlSXRlcmF0b3IpOworCitEcmFnRWxlbWVudCA9M0QgKGZ1bmN0aW9uKCkgewor
ICBmdW5jdGlvbiBEcmFnRWxlbWVudChub2RlLCBvZmZzZXRfeCwgb2Zmc2V0X3ksICR0cmVlKSB7
CisgICAgdGhpcy5vZmZzZXRfeCA9M0Qgb2Zmc2V0X3g7CisgICAgdGhpcy5vZmZzZXRfeSA9M0Qg
b2Zmc2V0X3k7CisgICAgdGhpcy4kZWxlbWVudCA9M0QgJCgiPHNwYW4gY2xhc3M9M0RcImpxdHJl
ZS10aXRsZSBqcXRyZWUtZHJhZ2dpbmdcIj4iID0KKyBub2RlLm5hbWUgKyAiPC9zcGFuPiIpOwor
ICAgIHRoaXMuJGVsZW1lbnQuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpOworICAgICR0cmVl
LmFwcGVuZCh0aGlzLiRlbGVtZW50KTsKKyAgfQorCisgIERyYWdFbGVtZW50LnByb3RvdHlwZS5t
b3ZlID0zRCBmdW5jdGlvbihwYWdlX3gsIHBhZ2VfeSkgeworICAgIHJldHVybiB0aGlzLiRlbGVt
ZW50Lm9mZnNldCh7CisgICAgICBsZWZ0OiBwYWdlX3ggLSB0aGlzLm9mZnNldF94LAorICAgICAg
dG9wOiBwYWdlX3kgLSB0aGlzLm9mZnNldF95CisgICAgfSk7CisgIH07CisKKyAgRHJhZ0VsZW1l
bnQucHJvdG90eXBlLnJlbW92ZSA9M0QgZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuJGVs
ZW1lbnQucmVtb3ZlKCk7CisgIH07CisKKyAgcmV0dXJuIERyYWdFbGVtZW50OworCit9KSgpOwor
Cittb2R1bGUuZXhwb3J0cyA9M0QgeworICBEcmFnQW5kRHJvcEhhbmRsZXI6IERyYWdBbmREcm9w
SGFuZGxlciwKKyAgRHJhZ0VsZW1lbnQ6IERyYWdFbGVtZW50LAorICBIaXRBcmVhc0dlbmVyYXRv
cjogSGl0QXJlYXNHZW5lcmF0b3IKK307CisKK30seyIuL25vZGUiOjV9XSwyOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK3ZhciAkLCBFbGVtZW50c1JlbmRlcmVyLCBOb2RlRWxl
bWVudCwgaHRtbF9lc2NhcGUsIG5vZGVfZWxlbWVudCwgdXRpbDsKKworbm9kZV9lbGVtZW50ID0z
RCByZXF1aXJlKCcuL25vZGVfZWxlbWVudCcpOworCitOb2RlRWxlbWVudCA9M0Qgbm9kZV9lbGVt
ZW50Lk5vZGVFbGVtZW50OworCit1dGlsID0zRCByZXF1aXJlKCcuL3V0aWwnKTsKKworaHRtbF9l
c2NhcGUgPTNEIHV0aWwuaHRtbF9lc2NhcGU7CisKKyQgPTNEIGpRdWVyeTsKKworRWxlbWVudHNS
ZW5kZXJlciA9M0QgKGZ1bmN0aW9uKCkgeworICBmdW5jdGlvbiBFbGVtZW50c1JlbmRlcmVyKHRy
ZWVfd2lkZ2V0KSB7CisgICAgdGhpcy50cmVlX3dpZGdldCA9M0QgdHJlZV93aWRnZXQ7CisgICAg
dGhpcy5vcGVuZWRfaWNvbl9lbGVtZW50ID0zRCB0aGlzLmNyZWF0ZUJ1dHRvbkVsZW1lbnQodHJl
ZV93aWRnZXQub3B0aT0Kb25zLm9wZW5lZEljb24pOworICAgIHRoaXMuY2xvc2VkX2ljb25fZWxl
bWVudCA9M0QgdGhpcy5jcmVhdGVCdXR0b25FbGVtZW50KHRyZWVfd2lkZ2V0Lm9wdGk9Cm9ucy5j
bG9zZWRJY29uKTsKKyAgfQorCisgIEVsZW1lbnRzUmVuZGVyZXIucHJvdG90eXBlLnJlbmRlciA9
M0QgZnVuY3Rpb24oZnJvbV9ub2RlKSB7CisgICAgaWYgKGZyb21fbm9kZSAmJiBmcm9tX25vZGUu
cGFyZW50KSB7CisgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGcm9tTm9kZShmcm9tX25vZGUpOwor
ICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGcm9tUm9vdCgpOworICAgIH0K
KyAgfTsKKworICBFbGVtZW50c1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJGcm9tUm9vdCA9M0Qg
ZnVuY3Rpb24oKSB7CisgICAgdmFyICRlbGVtZW50OworICAgICRlbGVtZW50ID0zRCB0aGlzLnRy
ZWVfd2lkZ2V0LmVsZW1lbnQ7CisgICAgJGVsZW1lbnQuZW1wdHkoKTsKKyAgICByZXR1cm4gdGhp
cy5jcmVhdGVEb21FbGVtZW50cygkZWxlbWVudFswXSwgdGhpcy50cmVlX3dpZGdldC50cmVlLmNo
aWxkPQpyZW4sIHRydWUsIHRydWUsIDEpOworICB9OworCisgIEVsZW1lbnRzUmVuZGVyZXIucHJv
dG90eXBlLnJlbmRlckZyb21Ob2RlID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAgdmFyICRwcmV2
aW91c19saSwgbGk7CisgICAgJHByZXZpb3VzX2xpID0zRCAkKG5vZGUuZWxlbWVudCk7CisgICAg
bGkgPTNEIHRoaXMuY3JlYXRlTGkobm9kZSwgbm9kZS5nZXRMZXZlbCgpKTsKKyAgICB0aGlzLmF0
dGFjaE5vZGVEYXRhKG5vZGUsIGxpKTsKKyAgICAkcHJldmlvdXNfbGkuYWZ0ZXIobGkpOworICAg
ICRwcmV2aW91c19saS5yZW1vdmUoKTsKKyAgICBpZiAobm9kZS5jaGlsZHJlbikgeworICAgICAg
cmV0dXJuIHRoaXMuY3JlYXRlRG9tRWxlbWVudHMobGksIG5vZGUuY2hpbGRyZW4sIGZhbHNlLCBm
YWxzZSwgbm9kZS49CmdldExldmVsKCkgKyAxKTsKKyAgICB9CisgIH07CisKKyAgRWxlbWVudHNS
ZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlRG9tRWxlbWVudHMgPTNEIGZ1bmN0aW9uKGVsZW1lbnQs
IGNoaWxkPQpyZW4sIGlzX3Jvb3Rfbm9kZSwgaXNfb3BlbiwgbGV2ZWwpIHsKKyAgICB2YXIgY2hp
bGQsIGksIGxlbiwgbGksIHVsOworICAgIHVsID0zRCB0aGlzLmNyZWF0ZVVsKGlzX3Jvb3Rfbm9k
ZSk7CisgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh1bCk7CisgICAgZm9yIChpID0zRCAwLCBsZW4g
PTNEIGNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBjaGlsZCA9M0QgY2hp
bGRyZW5baV07CisgICAgICBsaSA9M0QgdGhpcy5jcmVhdGVMaShjaGlsZCwgbGV2ZWwpOworICAg
ICAgdWwuYXBwZW5kQ2hpbGQobGkpOworICAgICAgdGhpcy5hdHRhY2hOb2RlRGF0YShjaGlsZCwg
bGkpOworICAgICAgaWYgKGNoaWxkLmhhc0NoaWxkcmVuKCkpIHsKKyAgICAgICAgdGhpcy5jcmVh
dGVEb21FbGVtZW50cyhsaSwgY2hpbGQuY2hpbGRyZW4sIGZhbHNlLCBjaGlsZC5pc19vcGVuLCBs
PQpldmVsICsgMSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9OworCisg
IEVsZW1lbnRzUmVuZGVyZXIucHJvdG90eXBlLmF0dGFjaE5vZGVEYXRhID0zRCBmdW5jdGlvbihu
b2RlLCBsaSkgeworICAgIG5vZGUuZWxlbWVudCA9M0QgbGk7CisgICAgcmV0dXJuICQobGkpLmRh
dGEoJ25vZGUnLCBub2RlKTsKKyAgfTsKKworICBFbGVtZW50c1JlbmRlcmVyLnByb3RvdHlwZS5j
cmVhdGVVbCA9M0QgZnVuY3Rpb24oaXNfcm9vdF9ub2RlKSB7CisgICAgdmFyIGNsYXNzX3N0cmlu
Zywgcm9sZSwgdWw7CisgICAgaWYgKCFpc19yb290X25vZGUpIHsKKyAgICAgIGNsYXNzX3N0cmlu
ZyA9M0QgJyc7CisgICAgICByb2xlID0zRCAnZ3JvdXAnOworICAgIH0gZWxzZSB7CisgICAgICBj
bGFzc19zdHJpbmcgPTNEICdqcXRyZWUtdHJlZSc7CisgICAgICByb2xlID0zRCAndHJlZSc7Cisg
ICAgICBpZiAodGhpcy50cmVlX3dpZGdldC5vcHRpb25zLnJ0bCkgeworICAgICAgICBjbGFzc19z
dHJpbmcgKz0zRCAnIGpxdHJlZS1ydGwnOworICAgICAgfQorICAgIH0KKyAgICB1bCA9M0QgZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTsKKyAgICB1bC5jbGFzc05hbWUgPTNEICJqcXRyZWVf
Y29tbW9uICIgKyBjbGFzc19zdHJpbmc7CisgICAgdWwuc2V0QXR0cmlidXRlKCdyb2xlJywgcm9s
ZSk7CisgICAgcmV0dXJuIHVsOworICB9OworCisgIEVsZW1lbnRzUmVuZGVyZXIucHJvdG90eXBl
LmNyZWF0ZUxpID0zRCBmdW5jdGlvbihub2RlLCBsZXZlbCkgeworICAgIHZhciBpc19zZWxlY3Rl
ZCwgbGk7CisgICAgaXNfc2VsZWN0ZWQgPTNEIHRoaXMudHJlZV93aWRnZXQuc2VsZWN0X25vZGVf
aGFuZGxlciAmJiB0aGlzLnRyZWVfd2lkZz0KZXQuc2VsZWN0X25vZGVfaGFuZGxlci5pc05vZGVT
ZWxlY3RlZChub2RlKTsKKyAgICBpZiAobm9kZS5pc0ZvbGRlcigpKSB7CisgICAgICBsaSA9M0Qg
dGhpcy5jcmVhdGVGb2xkZXJMaShub2RlLCBsZXZlbCwgaXNfc2VsZWN0ZWQpOworICAgIH0gZWxz
ZSB7CisgICAgICBsaSA9M0QgdGhpcy5jcmVhdGVOb2RlTGkobm9kZSwgbGV2ZWwsIGlzX3NlbGVj
dGVkKTsKKyAgICB9CisgICAgaWYgKHRoaXMudHJlZV93aWRnZXQub3B0aW9ucy5vbkNyZWF0ZUxp
KSB7CisgICAgICB0aGlzLnRyZWVfd2lkZ2V0Lm9wdGlvbnMub25DcmVhdGVMaShub2RlLCAkKGxp
KSk7CisgICAgfQorICAgIHJldHVybiBsaTsKKyAgfTsKKworICBFbGVtZW50c1JlbmRlcmVyLnBy
b3RvdHlwZS5jcmVhdGVGb2xkZXJMaSA9M0QgZnVuY3Rpb24obm9kZSwgbGV2ZWwsIGlzX3M9CmVs
ZWN0ZWQpIHsKKyAgICB2YXIgYnV0dG9uX2NsYXNzZXMsIGJ1dHRvbl9saW5rLCBkaXYsIGZvbGRl
cl9jbGFzc2VzLCBpY29uX2VsZW1lbnQsIGlzPQpfZm9sZGVyLCBsaTsKKyAgICBidXR0b25fY2xh
c3NlcyA9M0QgdGhpcy5nZXRCdXR0b25DbGFzc2VzKG5vZGUpOworICAgIGZvbGRlcl9jbGFzc2Vz
ID0zRCB0aGlzLmdldEZvbGRlckNsYXNzZXMobm9kZSwgaXNfc2VsZWN0ZWQpOworICAgIGlmIChu
b2RlLmlzX29wZW4pIHsKKyAgICAgIGljb25fZWxlbWVudCA9M0QgdGhpcy5vcGVuZWRfaWNvbl9l
bGVtZW50OworICAgIH0gZWxzZSB7CisgICAgICBpY29uX2VsZW1lbnQgPTNEIHRoaXMuY2xvc2Vk
X2ljb25fZWxlbWVudDsKKyAgICB9CisgICAgbGkgPTNEIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2xpJyk7CisgICAgbGkuY2xhc3NOYW1lID0zRCAianF0cmVlX2NvbW1vbiAiICsgZm9sZGVyX2Ns
YXNzZXM7CisgICAgbGkuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3ByZXNlbnRhdGlvbicpOworICAg
IGRpdiA9M0QgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZGl2LmNsYXNzTmFt
ZSA9M0QgImpxdHJlZS1lbGVtZW50IGpxdHJlZV9jb21tb24iOworICAgIGRpdi5zZXRBdHRyaWJ1
dGUoJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7CisgICAgbGkuYXBwZW5kQ2hpbGQoZGl2KTsKKyAg
ICBidXR0b25fbGluayA9M0QgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOworICAgIGJ1dHRv
bl9saW5rLmNsYXNzTmFtZSA9M0QgYnV0dG9uX2NsYXNzZXM7CisgICAgYnV0dG9uX2xpbmsuYXBw
ZW5kQ2hpbGQoaWNvbl9lbGVtZW50LmNsb25lTm9kZShmYWxzZSkpOworICAgIGJ1dHRvbl9saW5r
LnNldEF0dHJpYnV0ZSgncm9sZScsICdwcmVzZW50YXRpb24nKTsKKyAgICBidXR0b25fbGluay5z
ZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKKyAgICBpZiAodGhpcy50cmVlX3dp
ZGdldC5vcHRpb25zLmJ1dHRvbkxlZnQpIHsKKyAgICAgIGRpdi5hcHBlbmRDaGlsZChidXR0b25f
bGluayk7CisgICAgfQorICAgIGRpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVRpdGxlU3Bhbihu
b2RlLm5hbWUsIGxldmVsLCBpc19zZWxlY3RlZCwgbm89CmRlLmlzX29wZW4sIGlzX2ZvbGRlciA9
M0QgdHJ1ZSkpOworICAgIGlmICghdGhpcy50cmVlX3dpZGdldC5vcHRpb25zLmJ1dHRvbkxlZnQp
IHsKKyAgICAgIGRpdi5hcHBlbmRDaGlsZChidXR0b25fbGluayk7CisgICAgfQorICAgIHJldHVy
biBsaTsKKyAgfTsKKworICBFbGVtZW50c1JlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVOb2RlTGkg
PTNEIGZ1bmN0aW9uKG5vZGUsIGxldmVsLCBpc19zZWw9CmVjdGVkKSB7CisgICAgdmFyIGNsYXNz
X3N0cmluZywgZGl2LCBpc19mb2xkZXIsIGxpLCBsaV9jbGFzc2VzOworICAgIGxpX2NsYXNzZXMg
PTNEIFsnanF0cmVlX2NvbW1vbiddOworICAgIGlmIChpc19zZWxlY3RlZCkgeworICAgICAgbGlf
Y2xhc3Nlcy5wdXNoKCdqcXRyZWUtc2VsZWN0ZWQnKTsKKyAgICB9CisgICAgY2xhc3Nfc3RyaW5n
ID0zRCBsaV9jbGFzc2VzLmpvaW4oJyAnKTsKKyAgICBsaSA9M0QgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnbGknKTsKKyAgICBsaS5jbGFzc05hbWUgPTNEIGNsYXNzX3N0cmluZzsKKyAgICBsaS5z
ZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7CisgICAgZGl2ID0zRCBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICBkaXYuY2xhc3NOYW1lID0zRCAianF0cmVlLWVs
ZW1lbnQganF0cmVlX2NvbW1vbiI7CisgICAgZGl2LnNldEF0dHJpYnV0ZSgncm9sZScsICdwcmVz
ZW50YXRpb24nKTsKKyAgICBsaS5hcHBlbmRDaGlsZChkaXYpOworICAgIGRpdi5hcHBlbmRDaGls
ZCh0aGlzLmNyZWF0ZVRpdGxlU3Bhbihub2RlLm5hbWUsIGxldmVsLCBpc19zZWxlY3RlZCwgbm89
CmRlLmlzX29wZW4sIGlzX2ZvbGRlciA9M0QgZmFsc2UpKTsKKyAgICByZXR1cm4gbGk7CisgIH07
CisKKyAgRWxlbWVudHNSZW5kZXJlci5wcm90b3R5cGUuY3JlYXRlVGl0bGVTcGFuID0zRCBmdW5j
dGlvbihub2RlX25hbWUsIGxldmVsPQosIGlzX3NlbGVjdGVkLCBpc19vcGVuLCBpc19mb2xkZXIp
IHsKKyAgICB2YXIgY2xhc3NlcywgdGl0bGVfc3BhbjsKKyAgICB0aXRsZV9zcGFuID0zRCBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CisgICAgY2xhc3NlcyA9M0QgImpxdHJlZS10aXRs
ZSBqcXRyZWVfY29tbW9uIjsKKyAgICBpZiAoaXNfZm9sZGVyKSB7CisgICAgICBjbGFzc2VzICs9
M0QgIiBqcXRyZWUtdGl0bGUtZm9sZGVyIjsKKyAgICB9CisgICAgdGl0bGVfc3Bhbi5jbGFzc05h
bWUgPTNEIGNsYXNzZXM7CisgICAgdGl0bGVfc3Bhbi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndHJl
ZWl0ZW0nKTsKKyAgICB0aXRsZV9zcGFuLnNldEF0dHJpYnV0ZSgnYXJpYS1sZXZlbCcsIGxldmVs
KTsKKyAgICB0aXRsZV9zcGFuLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHV0aWwuZ2V0
Qm9vbFN0cmluZyhpc19zZWxlY3RlPQpkKSk7CisgICAgdGl0bGVfc3Bhbi5zZXRBdHRyaWJ1dGUo
J2FyaWEtZXhwYW5kZWQnLCB1dGlsLmdldEJvb2xTdHJpbmcoaXNfb3BlbikpOworICAgIGlmIChp
c19zZWxlY3RlZCkgeworICAgICAgdGl0bGVfc3Bhbi5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4Jywg
MCk7CisgICAgfQorICAgIHRpdGxlX3NwYW4uaW5uZXJIVE1MID0zRCB0aGlzLmVzY2FwZUlmTmVj
ZXNzYXJ5KG5vZGVfbmFtZSk7CisgICAgcmV0dXJuIHRpdGxlX3NwYW47CisgIH07CisKKyAgRWxl
bWVudHNSZW5kZXJlci5wcm90b3R5cGUuZ2V0QnV0dG9uQ2xhc3NlcyA9M0QgZnVuY3Rpb24obm9k
ZSkgeworICAgIHZhciBjbGFzc2VzOworICAgIGNsYXNzZXMgPTNEIFsnanF0cmVlLXRvZ2dsZXIn
LCAnanF0cmVlX2NvbW1vbiddOworICAgIGlmICghbm9kZS5pc19vcGVuKSB7CisgICAgICBjbGFz
c2VzLnB1c2goJ2pxdHJlZS1jbG9zZWQnKTsKKyAgICB9CisgICAgaWYgKHRoaXMudHJlZV93aWRn
ZXQub3B0aW9ucy5idXR0b25MZWZ0KSB7CisgICAgICBjbGFzc2VzLnB1c2goJ2pxdHJlZS10b2dn
bGVyLWxlZnQnKTsKKyAgICB9IGVsc2UgeworICAgICAgY2xhc3Nlcy5wdXNoKCdqcXRyZWUtdG9n
Z2xlci1yaWdodCcpOworICAgIH0KKyAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7CisgIH07
CisKKyAgRWxlbWVudHNSZW5kZXJlci5wcm90b3R5cGUuZ2V0Rm9sZGVyQ2xhc3NlcyA9M0QgZnVu
Y3Rpb24obm9kZSwgaXNfc2VsZWN0PQplZCkgeworICAgIHZhciBjbGFzc2VzOworICAgIGNsYXNz
ZXMgPTNEIFsnanF0cmVlLWZvbGRlciddOworICAgIGlmICghbm9kZS5pc19vcGVuKSB7CisgICAg
ICBjbGFzc2VzLnB1c2goJ2pxdHJlZS1jbG9zZWQnKTsKKyAgICB9CisgICAgaWYgKGlzX3NlbGVj
dGVkKSB7CisgICAgICBjbGFzc2VzLnB1c2goJ2pxdHJlZS1zZWxlY3RlZCcpOworICAgIH0KKyAg
ICBpZiAobm9kZS5pc19sb2FkaW5nKSB7CisgICAgICBjbGFzc2VzLnB1c2goJ2pxdHJlZS1sb2Fk
aW5nJyk7CisgICAgfQorICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTsKKyAgfTsKKworICBF
bGVtZW50c1JlbmRlcmVyLnByb3RvdHlwZS5lc2NhcGVJZk5lY2Vzc2FyeSA9M0QgZnVuY3Rpb24o
dmFsdWUpIHsKKyAgICBpZiAodGhpcy50cmVlX3dpZGdldC5vcHRpb25zLmF1dG9Fc2NhcGUpIHsK
KyAgICAgIHJldHVybiBodG1sX2VzY2FwZSh2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9CisgIH07CisKKyAgRWxlbWVudHNSZW5kZXJlci5wcm90b3R5cGUu
Y3JlYXRlQnV0dG9uRWxlbWVudCA9M0QgZnVuY3Rpb24odmFsdWUpIHsKKyAgICB2YXIgZGl2Owor
ICAgIGlmICh0eXBlb2YgdmFsdWUgPTNEPTNEPTNEICdzdHJpbmcnKSB7CisgICAgICBkaXYgPTNE
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgZGl2LmlubmVySFRNTCA9M0Qg
dmFsdWU7CisgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGl2LmlubmVySFRN
TCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAkKHZhbHVlKVswXTsKKyAgICB9CisgIH07
CisKKyAgcmV0dXJuIEVsZW1lbnRzUmVuZGVyZXI7CisKK30pKCk7CisKK21vZHVsZS5leHBvcnRz
ID0zRCBFbGVtZW50c1JlbmRlcmVyOworCit9LHsiLi9ub2RlX2VsZW1lbnQiOjYsIi4vdXRpbCI6
MTJ9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK3ZhciAkLCBLZXlIYW5k
bGVyLAorICBiaW5kID0zRCBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0
dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWU9Cm50cyk7IH07IH07CisKKyQgPTNEIGpRdWVyeTsKKwor
S2V5SGFuZGxlciA9M0QgKGZ1bmN0aW9uKCkgeworICB2YXIgRE9XTiwgTEVGVCwgUklHSFQsIFVQ
OworCisgIExFRlQgPTNEIDM3OworCisgIFVQID0zRCAzODsKKworICBSSUdIVCA9M0QgMzk7CisK
KyAgRE9XTiA9M0QgNDA7CisKKyAgZnVuY3Rpb24gS2V5SGFuZGxlcih0cmVlX3dpZGdldCkgewor
ICAgIHRoaXMuc2VsZWN0Tm9kZSA9M0QgYmluZCh0aGlzLnNlbGVjdE5vZGUsIHRoaXMpOworICAg
IHRoaXMudHJlZV93aWRnZXQgPTNEIHRyZWVfd2lkZ2V0OworICAgIGlmICh0cmVlX3dpZGdldC5v
cHRpb25zLmtleWJvYXJkU3VwcG9ydCkgeworICAgICAgJChkb2N1bWVudCkuYmluZCgna2V5ZG93
bi5qcXRyZWUnLCAkLnByb3h5KHRoaXMuaGFuZGxlS2V5RG93biwgdGhpcyk9Cik7CisgICAgfQor
ICB9CisKKyAgS2V5SGFuZGxlci5wcm90b3R5cGUuZGVpbml0ID0zRCBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gJChkb2N1bWVudCkudW5iaW5kKCdrZXlkb3duLmpxdHJlZScpOworICB9OworCisg
IEtleUhhbmRsZXIucHJvdG90eXBlLm1vdmVEb3duID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIg
bm9kZTsKKyAgICBub2RlID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmdldFNlbGVjdGVkTm9kZSgpOwor
ICAgIGlmIChub2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5zZWxlY3ROb2RlKG5vZGUuZ2V0TmV4
dE5vZGUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07
CisKKyAgS2V5SGFuZGxlci5wcm90b3R5cGUubW92ZVVwID0zRCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgbm9kZTsKKyAgICBub2RlID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmdldFNlbGVjdGVkTm9kZSgp
OworICAgIGlmIChub2RlKSB7CisgICAgICByZXR1cm4gdGhpcy5zZWxlY3ROb2RlKG5vZGUuZ2V0
UHJldmlvdXNOb2RlKCkpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICB9OworCisgIEtleUhhbmRsZXIucHJvdG90eXBlLm1vdmVSaWdodCA9M0QgZnVuY3Rpb24o
KSB7CisgICAgdmFyIG5vZGU7CisgICAgbm9kZSA9M0QgdGhpcy50cmVlX3dpZGdldC5nZXRTZWxl
Y3RlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSBpZiAoIW5vZGUuaXNGb2xkZXIoKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgIGlmIChub2RlLmlzX29wZW4pIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2Vs
ZWN0Tm9kZShub2RlLmdldE5leHROb2RlKCkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhp
cy50cmVlX3dpZGdldC5vcGVuTm9kZShub2RlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgfQorICAgIH0KKyAgfTsKKworICBLZXlIYW5kbGVyLnByb3RvdHlwZS5tb3ZlTGVmdCA9M0Qg
ZnVuY3Rpb24oKSB7CisgICAgdmFyIG5vZGU7CisgICAgbm9kZSA9M0QgdGhpcy50cmVlX3dpZGdl
dC5nZXRTZWxlY3RlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgIHJldHVybiB0cnVl
OworICAgIH0gZWxzZSBpZiAobm9kZS5pc0ZvbGRlcigpICYmIG5vZGUuaXNfb3BlbikgeworICAg
ICAgdGhpcy50cmVlX3dpZGdldC5jbG9zZU5vZGUobm9kZSk7CisgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiB0aGlzLnNlbGVjdE5vZGUobm9kZS5nZXRQYXJl
bnQoKSk7CisgICAgfQorICB9OworCisgIEtleUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUtleURv
d24gPTNEIGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIga2V5OworICAgIGlmICghdGhpcy50cmVlX3dp
ZGdldC5vcHRpb25zLmtleWJvYXJkU3VwcG9ydCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKCd0ZXh0YXJlYSxpbnB1dCxz
ZWxlY3QnKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghdGhpcy50cmVl
X3dpZGdldC5nZXRTZWxlY3RlZE5vZGUoKSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGtleSA9M0QgZS53aGljaDsKKyAgICBzd2l0Y2ggKGtleSkgeworICAgICAgY2FzZSBET1dO
OgorICAgICAgICByZXR1cm4gdGhpcy5tb3ZlRG93bigpOworICAgICAgY2FzZSBVUDoKKyAgICAg
ICAgcmV0dXJuIHRoaXMubW92ZVVwKCk7CisgICAgICBjYXNlIFJJR0hUOgorICAgICAgICByZXR1
cm4gdGhpcy5tb3ZlUmlnaHQoKTsKKyAgICAgIGNhc2UgTEVGVDoKKyAgICAgICAgcmV0dXJuIHRo
aXMubW92ZUxlZnQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH07CisKKyAgS2V5SGFu
ZGxlci5wcm90b3R5cGUuc2VsZWN0Tm9kZSA9M0QgZnVuY3Rpb24obm9kZSkgeworICAgIGlmICgh
bm9kZSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMudHJl
ZV93aWRnZXQuc2VsZWN0Tm9kZShub2RlKTsKKyAgICAgIGlmICh0aGlzLnRyZWVfd2lkZ2V0LnNj
cm9sbF9oYW5kbGVyICYmICghdGhpcy50cmVlX3dpZGdldC5zY3JvbGxfaGFuPQpkbGVyLmlzU2Ny
b2xsZWRJbnRvVmlldygkKG5vZGUuZWxlbWVudCkuZmluZCgnLmpxdHJlZS1lbGVtZW50JykpKSkg
eworICAgICAgICB0aGlzLnRyZWVfd2lkZ2V0LnNjcm9sbFRvTm9kZShub2RlKTsKKyAgICAgIH0K
KyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIEtleUhhbmRsZXI7
CisKK30pKCk7CisKK21vZHVsZS5leHBvcnRzID0zRCBLZXlIYW5kbGVyOworCit9LHt9XSw0Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKworLyoKK1RoaXMgd2lkZ2V0IGRvZXMg
dGhlIHNhbWUgYSB0aGUgbW91c2Ugd2lkZ2V0IGluIGpxdWVyeXVpLgorICovCit2YXIgJCwgTW91
c2VXaWRnZXQsIFNpbXBsZVdpZGdldCwKKyAgZXh0ZW5kID0zRCBmdW5jdGlvbihjaGlsZCwgcGFy
ZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1ByPQpvcC5jYWxsKHBhcmVu
dCwga2V5KSkgY2hpbGRba2V5XSA9M0QgcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsg
dGhpcy49CmNvbnN0cnVjdG9yID0zRCBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9M0QgcGFyZW50
LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eT0KcGUgPTNEIG5ldyBjdG9yKCk7IGNoaWxkLl9fc3Vw
ZXJfXyA9M0QgcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LAorICBoYXNQcm9wID0z
RCB7fS5oYXNPd25Qcm9wZXJ0eTsKKworU2ltcGxlV2lkZ2V0ID0zRCByZXF1aXJlKCcuL3NpbXBs
ZS53aWRnZXQnKTsKKworJCA9M0QgalF1ZXJ5OworCitNb3VzZVdpZGdldCA9M0QgKGZ1bmN0aW9u
KHN1cGVyQ2xhc3MpIHsKKyAgZXh0ZW5kKE1vdXNlV2lkZ2V0LCBzdXBlckNsYXNzKTsKKworICBm
dW5jdGlvbiBNb3VzZVdpZGdldCgpIHsKKyAgICByZXR1cm4gTW91c2VXaWRnZXQuX19zdXBlcl9f
LmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0KKworICBNb3VzZVdpZGdl
dC5pc19tb3VzZV9oYW5kbGVkID0zRCBmYWxzZTsKKworICBNb3VzZVdpZGdldC5wcm90b3R5cGUu
X2luaXQgPTNEIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuJGVsLmJpbmQoJ21vdXNlZG93bi5tb3Vz
ZXdpZGdldCcsICQucHJveHkodGhpcy5fbW91c2VEb3duLCB0aGlzKSk7CisgICAgdGhpcy4kZWwu
YmluZCgndG91Y2hzdGFydC5tb3VzZXdpZGdldCcsICQucHJveHkodGhpcy5fdG91Y2hTdGFydCwg
dGhpcz0KKSk7CisgICAgdGhpcy5pc19tb3VzZV9zdGFydGVkID0zRCBmYWxzZTsKKyAgICB0aGlz
Lm1vdXNlX2RlbGF5ID0zRCAwOworICAgIHRoaXMuX21vdXNlX2RlbGF5X3RpbWVyID0zRCBudWxs
OworICAgIHRoaXMuX2lzX21vdXNlX2RlbGF5X21ldCA9M0QgdHJ1ZTsKKyAgICByZXR1cm4gdGhp
cy5tb3VzZV9kb3duX2luZm8gPTNEIG51bGw7CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90
eXBlLl9kZWluaXQgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciAkZG9jdW1lbnQ7CisgICAgdGhp
cy4kZWwudW5iaW5kKCdtb3VzZWRvd24ubW91c2V3aWRnZXQnKTsKKyAgICB0aGlzLiRlbC51bmJp
bmQoJ3RvdWNoc3RhcnQubW91c2V3aWRnZXQnKTsKKyAgICAkZG9jdW1lbnQgPTNEICQoZG9jdW1l
bnQpOworICAgICRkb2N1bWVudC51bmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdpZGdldCcpOworICAg
IHJldHVybiAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZXVwLm1vdXNld2lkZ2V0Jyk7CisgIH07CisK
KyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl9tb3VzZURvd24gPTNEIGZ1bmN0aW9uKGUpIHsKKyAg
ICB2YXIgcmVzdWx0OworICAgIGlmIChlLndoaWNoICE9M0Q9M0QgMSkgeworICAgICAgcmV0dXJu
OworICAgIH0KKyAgICByZXN1bHQgPTNEIHRoaXMuX2hhbmRsZU1vdXNlRG93bihlLCB0aGlzLl9n
ZXRQb3NpdGlvbkluZm8oZSkpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgIGUucHJldmVudERl
ZmF1bHQoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBNb3VzZVdpZGdl
dC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRG93biA9M0QgZnVuY3Rpb24oZSwgcG9zaXRpb25faW5m
bykgeworICAgIGlmIChNb3VzZVdpZGdldC5pc19tb3VzZV9oYW5kbGVkKSB7CisgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICh0aGlzLmlzX21vdXNlX3N0YXJ0ZWQpIHsKKyAgICAgIHRoaXMu
X2hhbmRsZU1vdXNlVXAocG9zaXRpb25faW5mbyk7CisgICAgfQorICAgIHRoaXMubW91c2VfZG93
bl9pbmZvID0zRCBwb3NpdGlvbl9pbmZvOworICAgIGlmICghdGhpcy5fbW91c2VDYXB0dXJlKHBv
c2l0aW9uX2luZm8pKSB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHRoaXMuX2hhbmRsZVN0
YXJ0TW91c2UoKTsKKyAgICB0aGlzLmlzX21vdXNlX2hhbmRsZWQgPTNEIHRydWU7CisgICAgcmV0
dXJuIHRydWU7CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl9oYW5kbGVTdGFydE1v
dXNlID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIgJGRvY3VtZW50OworICAgICRkb2N1bWVudCA9
M0QgJChkb2N1bWVudCk7CisgICAgJGRvY3VtZW50LmJpbmQoJ21vdXNlbW92ZS5tb3VzZXdpZGdl
dCcsICQucHJveHkodGhpcy5fbW91c2VNb3ZlLCB0aGlzKT0KKTsKKyAgICAkZG9jdW1lbnQuYmlu
ZCgndG91Y2htb3ZlLm1vdXNld2lkZ2V0JywgJC5wcm94eSh0aGlzLl90b3VjaE1vdmUsIHRoaXMp
PQopOworICAgICRkb2N1bWVudC5iaW5kKCdtb3VzZXVwLm1vdXNld2lkZ2V0JywgJC5wcm94eSh0
aGlzLl9tb3VzZVVwLCB0aGlzKSk7CisgICAgJGRvY3VtZW50LmJpbmQoJ3RvdWNoZW5kLm1vdXNl
d2lkZ2V0JywgJC5wcm94eSh0aGlzLl90b3VjaEVuZCwgdGhpcykpOworICAgIGlmICh0aGlzLm1v
dXNlX2RlbGF5KSB7CisgICAgICByZXR1cm4gdGhpcy5fc3RhcnRNb3VzZURlbGF5VGltZXIoKTsK
KyAgICB9CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl9zdGFydE1vdXNlRGVsYXlU
aW1lciA9M0QgZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuX21vdXNlX2RlbGF5X3RpbWVyKSB7
CisgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbW91c2VfZGVsYXlfdGltZXIpOworICAgIH0KKyAg
ICB0aGlzLl9tb3VzZV9kZWxheV90aW1lciA9M0Qgc2V0VGltZW91dCgoZnVuY3Rpb24oX3RoaXMp
IHsKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIF90aGlzLl9pc19t
b3VzZV9kZWxheV9tZXQgPTNEIHRydWU7CisgICAgICB9OworICAgIH0pKHRoaXMpLCB0aGlzLm1v
dXNlX2RlbGF5KTsKKyAgICByZXR1cm4gdGhpcy5faXNfbW91c2VfZGVsYXlfbWV0ID0zRCBmYWxz
ZTsKKyAgfTsKKworICBNb3VzZVdpZGdldC5wcm90b3R5cGUuX21vdXNlTW92ZSA9M0QgZnVuY3Rp
b24oZSkgeworICAgIHJldHVybiB0aGlzLl9oYW5kbGVNb3VzZU1vdmUoZSwgdGhpcy5fZ2V0UG9z
aXRpb25JbmZvKGUpKTsKKyAgfTsKKworICBNb3VzZVdpZGdldC5wcm90b3R5cGUuX2hhbmRsZU1v
dXNlTW92ZSA9M0QgZnVuY3Rpb24oZSwgcG9zaXRpb25faW5mbykgeworICAgIGlmICh0aGlzLmlz
X21vdXNlX3N0YXJ0ZWQpIHsKKyAgICAgIHRoaXMuX21vdXNlRHJhZyhwb3NpdGlvbl9pbmZvKTsK
KyAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgfQorICAgIGlmICh0aGlzLm1v
dXNlX2RlbGF5ICYmICF0aGlzLl9pc19tb3VzZV9kZWxheV9tZXQpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICB0aGlzLmlzX21vdXNlX3N0YXJ0ZWQgPTNEIHRoaXMuX21vdXNlU3Rh
cnQodGhpcy5tb3VzZV9kb3duX2luZm8pICE9M0Q9Cj0zRCBmYWxzZTsKKyAgICBpZiAodGhpcy5p
c19tb3VzZV9zdGFydGVkKSB7CisgICAgICB0aGlzLl9tb3VzZURyYWcocG9zaXRpb25faW5mbyk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuX2hhbmRsZU1vdXNlVXAocG9zaXRpb25faW5mbyk7
CisgICAgfQorICAgIHJldHVybiAhdGhpcy5pc19tb3VzZV9zdGFydGVkOworICB9OworCisgIE1v
dXNlV2lkZ2V0LnByb3RvdHlwZS5fZ2V0UG9zaXRpb25JbmZvID0zRCBmdW5jdGlvbihlKSB7Cisg
ICAgcmV0dXJuIHsKKyAgICAgIHBhZ2VfeDogZS5wYWdlWCwKKyAgICAgIHBhZ2VfeTogZS5wYWdl
WSwKKyAgICAgIHRhcmdldDogZS50YXJnZXQsCisgICAgICBvcmlnaW5hbF9ldmVudDogZQorICAg
IH07CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl9tb3VzZVVwID0zRCBmdW5jdGlv
bihlKSB7CisgICAgcmV0dXJuIHRoaXMuX2hhbmRsZU1vdXNlVXAodGhpcy5fZ2V0UG9zaXRpb25J
bmZvKGUpKTsKKyAgfTsKKworICBNb3VzZVdpZGdldC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlVXAg
PTNEIGZ1bmN0aW9uKHBvc2l0aW9uX2luZm8pIHsKKyAgICB2YXIgJGRvY3VtZW50OworICAgICRk
b2N1bWVudCA9M0QgJChkb2N1bWVudCk7CisgICAgJGRvY3VtZW50LnVuYmluZCgnbW91c2Vtb3Zl
Lm1vdXNld2lkZ2V0Jyk7CisgICAgJGRvY3VtZW50LnVuYmluZCgndG91Y2htb3ZlLm1vdXNld2lk
Z2V0Jyk7CisgICAgJGRvY3VtZW50LnVuYmluZCgnbW91c2V1cC5tb3VzZXdpZGdldCcpOworICAg
ICRkb2N1bWVudC51bmJpbmQoJ3RvdWNoZW5kLm1vdXNld2lkZ2V0Jyk7CisgICAgaWYgKHRoaXMu
aXNfbW91c2Vfc3RhcnRlZCkgeworICAgICAgdGhpcy5pc19tb3VzZV9zdGFydGVkID0zRCBmYWxz
ZTsKKyAgICAgIHRoaXMuX21vdXNlU3RvcChwb3NpdGlvbl9pbmZvKTsKKyAgICB9CisgIH07CisK
KyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl9tb3VzZUNhcHR1cmUgPTNEIGZ1bmN0aW9uKHBvc2l0
aW9uX2luZm8pIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICBNb3VzZVdpZGdldC5wcm90
b3R5cGUuX21vdXNlU3RhcnQgPTNEIGZ1bmN0aW9uKHBvc2l0aW9uX2luZm8pIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfTsKKworICBNb3VzZVdpZGdldC5wcm90b3R5cGUuX21vdXNlRHJhZyA9M0Qg
ZnVuY3Rpb24ocG9zaXRpb25faW5mbykgeworICAgIHJldHVybiBudWxsOworICB9OworCisgIE1v
dXNlV2lkZ2V0LnByb3RvdHlwZS5fbW91c2VTdG9wID0zRCBmdW5jdGlvbihwb3NpdGlvbl9pbmZv
KSB7CisgICAgcmV0dXJuIG51bGw7CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90eXBlLnNl
dE1vdXNlRGVsYXkgPTNEIGZ1bmN0aW9uKG1vdXNlX2RlbGF5KSB7CisgICAgcmV0dXJuIHRoaXMu
bW91c2VfZGVsYXkgPTNEIG1vdXNlX2RlbGF5OworICB9OworCisgIE1vdXNlV2lkZ2V0LnByb3Rv
dHlwZS5fdG91Y2hTdGFydCA9M0QgZnVuY3Rpb24oZSkgeworICAgIHZhciB0b3VjaDsKKyAgICBp
ZiAoZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkgeworICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICB0b3VjaCA9M0QgZS5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdOwor
ICAgIHJldHVybiB0aGlzLl9oYW5kbGVNb3VzZURvd24oZSwgdGhpcy5fZ2V0UG9zaXRpb25JbmZv
KHRvdWNoKSk7CisgIH07CisKKyAgTW91c2VXaWRnZXQucHJvdG90eXBlLl90b3VjaE1vdmUgPTNE
IGZ1bmN0aW9uKGUpIHsKKyAgICB2YXIgdG91Y2g7CisgICAgaWYgKGUub3JpZ2luYWxFdmVudC50
b3VjaGVzLmxlbmd0aCA+IDEpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdG91Y2ggPTNE
IGUub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlc1swXTsKKyAgICByZXR1cm4gdGhpcy5faGFu
ZGxlTW91c2VNb3ZlKGUsIHRoaXMuX2dldFBvc2l0aW9uSW5mbyh0b3VjaCkpOworICB9OworCisg
IE1vdXNlV2lkZ2V0LnByb3RvdHlwZS5fdG91Y2hFbmQgPTNEIGZ1bmN0aW9uKGUpIHsKKyAgICB2
YXIgdG91Y2g7CisgICAgaWYgKGUub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCA+IDEpIHsK
KyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdG91Y2ggPTNEIGUub3JpZ2luYWxFdmVudC5jaGFu
Z2VkVG91Y2hlc1swXTsKKyAgICByZXR1cm4gdGhpcy5faGFuZGxlTW91c2VVcCh0aGlzLl9nZXRQ
b3NpdGlvbkluZm8odG91Y2gpKTsKKyAgfTsKKworICByZXR1cm4gTW91c2VXaWRnZXQ7CisKK30p
KFNpbXBsZVdpZGdldCk7CisKK21vZHVsZS5leHBvcnRzID0zRCBNb3VzZVdpZGdldDsKKworfSx7
Ii4vc2ltcGxlLndpZGdldCI6MTB9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKK3ZhciAkLCBOb2RlLCBQb3NpdGlvbjsKKworJCA9M0QgalF1ZXJ5OworCitQb3NpdGlvbiA9
M0QgeworICBnZXROYW1lOiBmdW5jdGlvbihwb3NpdGlvbikgeworICAgIHJldHVybiBQb3NpdGlv
bi5zdHJpbmdzW3Bvc2l0aW9uIC0gMV07CisgIH0sCisgIG5hbWVUb0luZGV4OiBmdW5jdGlvbihu
YW1lKSB7CisgICAgdmFyIGksIGosIHJlZjsKKyAgICBmb3IgKGkgPTNEIGogPTNEIDEsIHJlZiA9
M0QgUG9zaXRpb24uc3RyaW5ncy5sZW5ndGg7IDEgPD0zRCByZWYgPyBqIDw9Cj0zRCByZWYgOiBq
ID49M0QgcmVmOyBpID0zRCAxIDw9M0QgcmVmID8gKytqIDogLS1qKSB7CisgICAgICBpZiAoUG9z
aXRpb24uc3RyaW5nc1tpIC0gMV0gPTNEPTNEPTNEIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGk7
CisgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworICB9Cit9OworCitQb3NpdGlvbi5CRUZP
UkUgPTNEIDE7CisKK1Bvc2l0aW9uLkFGVEVSID0zRCAyOworCitQb3NpdGlvbi5JTlNJREUgPTNE
IDM7CisKK1Bvc2l0aW9uLk5PTkUgPTNEIDQ7CisKK1Bvc2l0aW9uLnN0cmluZ3MgPTNEIFsnYmVm
b3JlJywgJ2FmdGVyJywgJ2luc2lkZScsICdub25lJ107CisKK05vZGUgPTNEIChmdW5jdGlvbigp
IHsKKyAgZnVuY3Rpb24gTm9kZShvLCBpc19yb290LCBub2RlX2NsYXNzKSB7CisgICAgaWYgKGlz
X3Jvb3QgPTNEPTNEIG51bGwpIHsKKyAgICAgIGlzX3Jvb3QgPTNEIGZhbHNlOworICAgIH0KKyAg
ICBpZiAobm9kZV9jbGFzcyA9M0Q9M0QgbnVsbCkgeworICAgICAgbm9kZV9jbGFzcyA9M0QgTm9k
ZTsKKyAgICB9CisgICAgdGhpcy5uYW1lID0zRCAnJzsKKyAgICB0aGlzLnNldERhdGEobyk7Cisg
ICAgdGhpcy5jaGlsZHJlbiA9M0QgW107CisgICAgdGhpcy5wYXJlbnQgPTNEIG51bGw7CisgICAg
aWYgKGlzX3Jvb3QpIHsKKyAgICAgIHRoaXMuaWRfbWFwcGluZyA9M0Qge307CisgICAgICB0aGlz
LnRyZWUgPTNEIHRoaXM7CisgICAgICB0aGlzLm5vZGVfY2xhc3MgPTNEIG5vZGVfY2xhc3M7Cisg
ICAgfQorICB9CisKKyAgTm9kZS5wcm90b3R5cGUuc2V0RGF0YSA9M0QgZnVuY3Rpb24obykgewor
CisgICAgLyoKKyAgICBTZXQgdGhlIGRhdGEgb2YgdGhpcyBub2RlLgorICAgPTIwCisgICAgc2V0
RGF0YShzdHJpbmcpOiBzZXQgdGhlIG5hbWUgb2YgdGhlIG5vZGUKKyAgICBzZXRkYXRhKG9iamVj
dCk6IHNldCBhdHRyaWJ1dGVzIG9mIHRoZSBub2RlCisgICA9MjAKKyAgICBFeGFtcGxlczoKKyAg
ICAgICAgc2V0ZGF0YSgnbm9kZTEnKQorICAgPTIwCisgICAgICAgIHNldERhdGEoeyBuYW1lOiAn
bm9kZTEnLCBpZDogMX0pOworICAgPTIwCisgICAgICAgIHNldERhdGEoeyBuYW1lOiAnbm9kZTIn
LCBpZDogMiwgY29sb3I6ICdncmVlbid9KTsKKyAgID0yMAorICAgICogVGhpcyBpcyBhbiBpbnRl
cm5hbCBmdW5jdGlvbjsgaXQgaXMgbm90IGluIHRoZSBkb2NzCisgICAgKiBEb2VzIG5vdCByZW1v
dmUgZXhpc3Rpbmcgbm9kZSB2YWx1ZXMKKyAgICAgKi8KKyAgICB2YXIga2V5LCBzZXROYW1lLCB2
YWx1ZTsKKyAgICBzZXROYW1lID0zRCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgIHJldHVybiBm
dW5jdGlvbihuYW1lKSB7CisgICAgICAgIGlmIChuYW1lICE9M0Q9M0QgbnVsbCkgeworICAgICAg
ICAgIHJldHVybiBfdGhpcy5uYW1lID0zRCBuYW1lOworICAgICAgICB9CisgICAgICB9OworICAg
IH0pKHRoaXMpOworICAgIGlmICh0eXBlb2YgbyAhPTNEPTNEICdvYmplY3QnKSB7CisgICAgICBz
ZXROYW1lKG8pOworICAgIH0gZWxzZSB7CisgICAgICBmb3IgKGtleSBpbiBvKSB7CisgICAgICAg
IHZhbHVlID0zRCBvW2tleV07CisgICAgICAgIGlmIChrZXkgPTNEPTNEPTNEICdsYWJlbCcpIHsK
KyAgICAgICAgICBzZXROYW1lKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXkgIT0zRD0z
RCAnY2hpbGRyZW4nKSB7CisgICAgICAgICAgdGhpc1trZXldID0zRCB2YWx1ZTsKKyAgICAgICAg
fQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbDsKKyAgfTsKKworICBOb2RlLnByb3Rv
dHlwZS5pbml0RnJvbURhdGEgPTNEIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICB2YXIgYWRkQ2hpbGRy
ZW4sIGFkZE5vZGU7CisgICAgYWRkTm9kZSA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICBy
ZXR1cm4gZnVuY3Rpb24obm9kZV9kYXRhKSB7CisgICAgICAgIF90aGlzLnNldERhdGEobm9kZV9k
YXRhKTsKKyAgICAgICAgaWYgKG5vZGVfZGF0YS5jaGlsZHJlbikgeworICAgICAgICAgIHJldHVy
biBhZGRDaGlsZHJlbihub2RlX2RhdGEuY2hpbGRyZW4pOworICAgICAgICB9CisgICAgICB9Owor
ICAgIH0pKHRoaXMpOworICAgIGFkZENoaWxkcmVuID0zRCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAg
ICAgIHJldHVybiBmdW5jdGlvbihjaGlsZHJlbl9kYXRhKSB7CisgICAgICAgIHZhciBjaGlsZCwg
aiwgbGVuLCBub2RlOworICAgICAgICBmb3IgKGogPTNEIDAsIGxlbiA9M0QgY2hpbGRyZW5fZGF0
YS5sZW5ndGg7IGogPCBsZW47IGorKykgeworICAgICAgICAgIGNoaWxkID0zRCBjaGlsZHJlbl9k
YXRhW2pdOworICAgICAgICAgIG5vZGUgPTNEIG5ldyBfdGhpcy50cmVlLm5vZGVfY2xhc3MoJycp
OworICAgICAgICAgIG5vZGUuaW5pdEZyb21EYXRhKGNoaWxkKTsKKyAgICAgICAgICBfdGhpcy5h
ZGRDaGlsZChub2RlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH07
CisgICAgfSkodGhpcyk7CisgICAgYWRkTm9kZShkYXRhKTsKKyAgICByZXR1cm4gbnVsbDsKKyAg
fTsKKworCisgIC8qCisgIENyZWF0ZSB0cmVlIGZyb20gZGF0YS4KKyA9MjAKKyAgU3RydWN0dXJl
IG9mIGRhdGEgaXM6CisgIFsKKyAgICAgIHsKKyAgICAgICAgICBsYWJlbDogJ25vZGUxJywKKyAg
ICAgICAgICBjaGlsZHJlbjogWworICAgICAgICAgICAgICB7IGxhYmVsOiAnY2hpbGQxJyB9LAor
ICAgICAgICAgICAgICB7IGxhYmVsOiAnY2hpbGQyJyB9CisgICAgICAgICAgXQorICAgICAgfSwK
KyAgICAgIHsKKyAgICAgICAgICBsYWJlbDogJ25vZGUyJworICAgICAgfQorICBdCisgICAqLwor
CisgIE5vZGUucHJvdG90eXBlLmxvYWRGcm9tRGF0YSA9M0QgZnVuY3Rpb24oZGF0YSkgeworICAg
IHZhciBqLCBsZW4sIG5vZGUsIG87CisgICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworICAgIGZv
ciAoaiA9M0QgMCwgbGVuID0zRCBkYXRhLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7CisgICAgICBv
ID0zRCBkYXRhW2pdOworICAgICAgbm9kZSA9M0QgbmV3IHRoaXMudHJlZS5ub2RlX2NsYXNzKG8p
OworICAgICAgdGhpcy5hZGRDaGlsZChub2RlKTsKKyAgICAgIGlmICh0eXBlb2YgbyA9M0Q9M0Q9
M0QgJ29iamVjdCcgJiYgby5jaGlsZHJlbikgeworICAgICAgICBub2RlLmxvYWRGcm9tRGF0YShv
LmNoaWxkcmVuKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGw7CisgIH07CisKKwor
ICAvKgorICBBZGQgY2hpbGQuCisgPTIwCisgIHRyZWUuYWRkQ2hpbGQoCisgICAgICBuZXcgTm9k
ZSgnY2hpbGQxJykKKyAgKTsKKyAgICovCisKKyAgTm9kZS5wcm90b3R5cGUuYWRkQ2hpbGQgPTNE
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICB0aGlzLmNoaWxkcmVuLnB1c2gobm9kZSk7CisgICAgcmV0
dXJuIG5vZGUuX3NldFBhcmVudCh0aGlzKTsKKyAgfTsKKworCisgIC8qCisgIEFkZCBjaGlsZCBh
dCBwb3NpdGlvbi4gSW5kZXggc3RhcnRzIGF0IDAuCisgPTIwCisgIHRyZWUuYWRkQ2hpbGRBdFBv
c2l0aW9uKAorICAgICAgbmV3IE5vZGUoJ2FiYycpLAorICAgICAgMQorICApOworICAgKi8KKwor
ICBOb2RlLnByb3RvdHlwZS5hZGRDaGlsZEF0UG9zaXRpb24gPTNEIGZ1bmN0aW9uKG5vZGUsIGlu
ZGV4KSB7CisgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIG5vZGUpOworICAgIHJl
dHVybiBub2RlLl9zZXRQYXJlbnQodGhpcyk7CisgIH07CisKKyAgTm9kZS5wcm90b3R5cGUuX3Nl
dFBhcmVudCA9M0QgZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdGhpcy5wYXJlbnQgPTNEIHBhcmVu
dDsKKyAgICB0aGlzLnRyZWUgPTNEIHBhcmVudC50cmVlOworICAgIHJldHVybiB0aGlzLnRyZWUu
YWRkTm9kZVRvSW5kZXgodGhpcyk7CisgIH07CisKKworICAvKgorICBSZW1vdmUgY2hpbGQuIFRo
aXMgYWxzbyByZW1vdmVzIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZS4KKyA9MjAKKyAgdHJlZS5y
ZW1vdmVDaGlsZCh0cmVlLmNoaWxkcmVuWzBdKTsKKyAgICovCisKKyAgTm9kZS5wcm90b3R5cGUu
cmVtb3ZlQ2hpbGQgPTNEIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICBub2RlLnJlbW92ZUNoaWxkcmVu
KCk7CisgICAgcmV0dXJuIHRoaXMuX3JlbW92ZUNoaWxkKG5vZGUpOworICB9OworCisgIE5vZGUu
cHJvdG90eXBlLl9yZW1vdmVDaGlsZCA9M0QgZnVuY3Rpb24obm9kZSkgeworICAgIHRoaXMuY2hp
bGRyZW4uc3BsaWNlKHRoaXMuZ2V0Q2hpbGRJbmRleChub2RlKSwgMSk7CisgICAgcmV0dXJuIHRo
aXMudHJlZS5yZW1vdmVOb2RlRnJvbUluZGV4KG5vZGUpOworICB9OworCisKKyAgLyoKKyAgR2V0
IGNoaWxkIGluZGV4LgorID0yMAorICB2YXIgaW5kZXggPTNEIGdldENoaWxkSW5kZXgobm9kZSk7
CisgICAqLworCisgIE5vZGUucHJvdG90eXBlLmdldENoaWxkSW5kZXggPTNEIGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICByZXR1cm4gJC5pbkFycmF5KG5vZGUsIHRoaXMuY2hpbGRyZW4pOworICB9Owor
CisKKyAgLyoKKyAgRG9lcyB0aGUgdHJlZSBoYXZlIGNoaWxkcmVuPworID0yMAorICBpZiAodHJl
ZS5oYXNDaGlsZHJlbigpKSB7CisgICAgICAvLworICB9CisgICAqLworCisgIE5vZGUucHJvdG90
eXBlLmhhc0NoaWxkcmVuID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5jaGlsZHJl
bi5sZW5ndGggIT0zRD0zRCAwOworICB9OworCisgIE5vZGUucHJvdG90eXBlLmlzRm9sZGVyID0z
RCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5oYXNDaGlsZHJlbigpIHx8IHRoaXMubG9h
ZF9vbl9kZW1hbmQ7CisgIH07CisKKworICAvKgorICBJdGVyYXRlIG92ZXIgYWxsIHRoZSBub2Rl
cyBpbiB0aGUgdHJlZS4KKyA9MjAKKyAgQ2FsbHMgY2FsbGJhY2sgd2l0aCAobm9kZSwgbGV2ZWwp
LgorID0yMAorICBUaGUgY2FsbGJhY2sgbXVzdCByZXR1cm4gdHJ1ZSB0byBjb250aW51ZSB0aGUg
aXRlcmF0aW9uIG9uIGN1cnJlbnQgbm9kZS4KKyA9MjAKKyAgdHJlZS5pdGVyYXRlKAorICAgICAg
ZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHsKKyAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUubmFtZSk7
CisgPTIwCisgICAgICAgICAvLyBzdG9wIGl0ZXJhdGlvbiBhZnRlciBsZXZlbCAyCisgICAgICAg
ICByZXR1cm4gKGxldmVsIDw9M0QgMik7CisgICAgICB9CisgICk7CisgICAqLworCisgIE5vZGUu
cHJvdG90eXBlLml0ZXJhdGUgPTNEIGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgICAgdmFyIF9pdGVy
YXRlOworICAgIF9pdGVyYXRlID0zRCBmdW5jdGlvbihub2RlLCBsZXZlbCkgeworICAgICAgdmFy
IGNoaWxkLCBqLCBsZW4sIHJlZiwgcmVzdWx0OworICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsK
KyAgICAgICAgcmVmID0zRCBub2RlLmNoaWxkcmVuOworICAgICAgICBmb3IgKGogPTNEIDAsIGxl
biA9M0QgcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgICAgY2hpbGQgPTNEIHJl
ZltqXTsKKyAgICAgICAgICByZXN1bHQgPTNEIGNhbGxiYWNrKGNoaWxkLCBsZXZlbCk7CisgICAg
ICAgICAgaWYgKHJlc3VsdCAmJiBjaGlsZC5oYXNDaGlsZHJlbigpKSB7CisgICAgICAgICAgICBf
aXRlcmF0ZShjaGlsZCwgbGV2ZWwgKyAxKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICB9CisgICAgfTsKKyAgICBfaXRlcmF0ZSh0aGlzLCAwKTsK
KyAgICByZXR1cm4gbnVsbDsKKyAgfTsKKworCisgIC8qCisgIE1vdmUgbm9kZSByZWxhdGl2ZSB0
byBhbm90aGVyIG5vZGUuCisgPTIwCisgIEFyZ3VtZW50IHBvc2l0aW9uOiBQb3NpdGlvbi5CRUZP
UkUsIFBvc2l0aW9uLkFGVEVSIG9yIFBvc2l0aW9uLkluc2lkZQorID0yMAorICAvLyBtb3ZlIG5v
ZGUxIGFmdGVyIG5vZGUyCisgIHRyZWUubW92ZU5vZGUobm9kZTEsIG5vZGUyLCBQb3NpdGlvbi5B
RlRFUik7CisgICAqLworCisgIE5vZGUucHJvdG90eXBlLm1vdmVOb2RlID0zRCBmdW5jdGlvbiht
b3ZlZF9ub2RlLCB0YXJnZXRfbm9kZSwgcG9zaXRpb24pIHsKKyAgICBpZiAobW92ZWRfbm9kZS5p
c1BhcmVudE9mKHRhcmdldF9ub2RlKSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtb3Zl
ZF9ub2RlLnBhcmVudC5fcmVtb3ZlQ2hpbGQobW92ZWRfbm9kZSk7CisgICAgaWYgKHBvc2l0aW9u
ID0zRD0zRD0zRCBQb3NpdGlvbi5BRlRFUikgeworICAgICAgcmV0dXJuIHRhcmdldF9ub2RlLnBh
cmVudC5hZGRDaGlsZEF0UG9zaXRpb24obW92ZWRfbm9kZSwgdGFyZ2V0X25vZGU9Ci5wYXJlbnQu
Z2V0Q2hpbGRJbmRleCh0YXJnZXRfbm9kZSkgKyAxKTsKKyAgICB9IGVsc2UgaWYgKHBvc2l0aW9u
ID0zRD0zRD0zRCBQb3NpdGlvbi5CRUZPUkUpIHsKKyAgICAgIHJldHVybiB0YXJnZXRfbm9kZS5w
YXJlbnQuYWRkQ2hpbGRBdFBvc2l0aW9uKG1vdmVkX25vZGUsIHRhcmdldF9ub2RlPQoucGFyZW50
LmdldENoaWxkSW5kZXgodGFyZ2V0X25vZGUpKTsKKyAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID0z
RD0zRD0zRCBQb3NpdGlvbi5JTlNJREUpIHsKKyAgICAgIHJldHVybiB0YXJnZXRfbm9kZS5hZGRD
aGlsZEF0UG9zaXRpb24obW92ZWRfbm9kZSwgMCk7CisgICAgfQorICB9OworCisKKyAgLyoKKyAg
R2V0IHRoZSB0cmVlIGFzIGRhdGEuCisgICAqLworCisgIE5vZGUucHJvdG90eXBlLmdldERhdGEg
PTNEIGZ1bmN0aW9uKGluY2x1ZGVfcGFyZW50KSB7CisgICAgdmFyIGdldERhdGFGcm9tTm9kZXM7
CisgICAgaWYgKGluY2x1ZGVfcGFyZW50ID0zRD0zRCBudWxsKSB7CisgICAgICBpbmNsdWRlX3Bh
cmVudCA9M0QgZmFsc2U7CisgICAgfQorICAgIGdldERhdGFGcm9tTm9kZXMgPTNEIGZ1bmN0aW9u
KG5vZGVzKSB7CisgICAgICB2YXIgZGF0YSwgaiwgaywgbGVuLCBub2RlLCB0bXBfbm9kZSwgdjsK
KyAgICAgIGRhdGEgPTNEIFtdOworICAgICAgZm9yIChqID0zRCAwLCBsZW4gPTNEIG5vZGVzLmxl
bmd0aDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgIG5vZGUgPTNEIG5vZGVzW2pdOworICAgICAg
ICB0bXBfbm9kZSA9M0Qge307CisgICAgICAgIGZvciAoayBpbiBub2RlKSB7CisgICAgICAgICAg
diA9M0Qgbm9kZVtrXTsKKyAgICAgICAgICBpZiAoKGsgIT0zRD0zRCAncGFyZW50JyAmJiBrICE9
M0Q9M0QgJ2NoaWxkcmVuJyAmJiBrICE9M0Q9M0QgJ2VsPQplbWVudCcgJiYgayAhPTNEPTNEICd0
cmVlJykgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGs9Cikp
IHsKKyAgICAgICAgICAgIHRtcF9ub2RlW2tdID0zRCB2OworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAobm9kZS5oYXNDaGlsZHJlbigpKSB7CisgICAgICAgICAgdG1wX25vZGUu
Y2hpbGRyZW4gPTNEIGdldERhdGFGcm9tTm9kZXMobm9kZS5jaGlsZHJlbik7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YS5wdXNoKHRtcF9ub2RlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBkYXRh
OworICAgIH07CisgICAgaWYgKGluY2x1ZGVfcGFyZW50KSB7CisgICAgICByZXR1cm4gZ2V0RGF0
YUZyb21Ob2RlcyhbdGhpc10pOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZ2V0RGF0YUZy
b21Ob2Rlcyh0aGlzLmNoaWxkcmVuKTsKKyAgICB9CisgIH07CisKKyAgTm9kZS5wcm90b3R5cGUu
Z2V0Tm9kZUJ5TmFtZSA9M0QgZnVuY3Rpb24obmFtZSkgeworICAgIHZhciByZXN1bHQ7CisgICAg
cmVzdWx0ID0zRCBudWxsOworICAgIHRoaXMuaXRlcmF0ZShmdW5jdGlvbihub2RlKSB7CisgICAg
ICBpZiAobm9kZS5uYW1lID0zRD0zRD0zRCBuYW1lKSB7CisgICAgICAgIHJlc3VsdCA9M0Qgbm9k
ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICB9CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfTsKKworICBO
b2RlLnByb3RvdHlwZS5hZGRBZnRlciA9M0QgZnVuY3Rpb24obm9kZV9pbmZvKSB7CisgICAgdmFy
IGNoaWxkX2luZGV4LCBub2RlOworICAgIGlmICghdGhpcy5wYXJlbnQpIHsKKyAgICAgIHJldHVy
biBudWxsOworICAgIH0gZWxzZSB7CisgICAgICBub2RlID0zRCBuZXcgdGhpcy50cmVlLm5vZGVf
Y2xhc3Mobm9kZV9pbmZvKTsKKyAgICAgIGNoaWxkX2luZGV4ID0zRCB0aGlzLnBhcmVudC5nZXRD
aGlsZEluZGV4KHRoaXMpOworICAgICAgdGhpcy5wYXJlbnQuYWRkQ2hpbGRBdFBvc2l0aW9uKG5v
ZGUsIGNoaWxkX2luZGV4ICsgMSk7CisgICAgICBpZiAodHlwZW9mIG5vZGVfaW5mbyA9M0Q9M0Q9
M0QgJ29iamVjdCcgJiYgbm9kZV9pbmZvLmNoaWxkcmVuICYmIG5vZD0KZV9pbmZvLmNoaWxkcmVu
Lmxlbmd0aCkgeworICAgICAgICBub2RlLmxvYWRGcm9tRGF0YShub2RlX2luZm8uY2hpbGRyZW4p
OworICAgICAgfQorICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICB9OworCisgIE5vZGUucHJv
dG90eXBlLmFkZEJlZm9yZSA9M0QgZnVuY3Rpb24obm9kZV9pbmZvKSB7CisgICAgdmFyIGNoaWxk
X2luZGV4LCBub2RlOworICAgIGlmICghdGhpcy5wYXJlbnQpIHsKKyAgICAgIHJldHVybiBudWxs
OworICAgIH0gZWxzZSB7CisgICAgICBub2RlID0zRCBuZXcgdGhpcy50cmVlLm5vZGVfY2xhc3Mo
bm9kZV9pbmZvKTsKKyAgICAgIGNoaWxkX2luZGV4ID0zRCB0aGlzLnBhcmVudC5nZXRDaGlsZElu
ZGV4KHRoaXMpOworICAgICAgdGhpcy5wYXJlbnQuYWRkQ2hpbGRBdFBvc2l0aW9uKG5vZGUsIGNo
aWxkX2luZGV4KTsKKyAgICAgIGlmICh0eXBlb2Ygbm9kZV9pbmZvID0zRD0zRD0zRCAnb2JqZWN0
JyAmJiBub2RlX2luZm8uY2hpbGRyZW4gJiYgbm9kPQplX2luZm8uY2hpbGRyZW4ubGVuZ3RoKSB7
CisgICAgICAgIG5vZGUubG9hZEZyb21EYXRhKG5vZGVfaW5mby5jaGlsZHJlbik7CisgICAgICB9
CisgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisgIH07CisKKyAgTm9kZS5wcm90b3R5cGUuYWRk
UGFyZW50ID0zRCBmdW5jdGlvbihub2RlX2luZm8pIHsKKyAgICB2YXIgY2hpbGQsIGosIGxlbiwg
bmV3X3BhcmVudCwgb3JpZ2luYWxfcGFyZW50LCByZWY7CisgICAgaWYgKCF0aGlzLnBhcmVudCkg
eworICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBlbHNlIHsKKyAgICAgIG5ld19wYXJlbnQgPTNE
IG5ldyB0aGlzLnRyZWUubm9kZV9jbGFzcyhub2RlX2luZm8pOworICAgICAgbmV3X3BhcmVudC5f
c2V0UGFyZW50KHRoaXMudHJlZSk7CisgICAgICBvcmlnaW5hbF9wYXJlbnQgPTNEIHRoaXMucGFy
ZW50OworICAgICAgcmVmID0zRCBvcmlnaW5hbF9wYXJlbnQuY2hpbGRyZW47CisgICAgICBmb3Ig
KGogPTNEIDAsIGxlbiA9M0QgcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7CisgICAgICAgIGNo
aWxkID0zRCByZWZbal07CisgICAgICAgIG5ld19wYXJlbnQuYWRkQ2hpbGQoY2hpbGQpOworICAg
ICAgfQorICAgICAgb3JpZ2luYWxfcGFyZW50LmNoaWxkcmVuID0zRCBbXTsKKyAgICAgIG9yaWdp
bmFsX3BhcmVudC5hZGRDaGlsZChuZXdfcGFyZW50KTsKKyAgICAgIHJldHVybiBuZXdfcGFyZW50
OworICAgIH0KKyAgfTsKKworICBOb2RlLnByb3RvdHlwZS5yZW1vdmUgPTNEIGZ1bmN0aW9uKCkg
eworICAgIGlmICh0aGlzLnBhcmVudCkgeworICAgICAgdGhpcy5wYXJlbnQucmVtb3ZlQ2hpbGQo
dGhpcyk7CisgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPTNEIG51bGw7CisgICAgfQorICB9Owor
CisgIE5vZGUucHJvdG90eXBlLmFwcGVuZCA9M0QgZnVuY3Rpb24obm9kZV9pbmZvKSB7CisgICAg
dmFyIG5vZGU7CisgICAgbm9kZSA9M0QgbmV3IHRoaXMudHJlZS5ub2RlX2NsYXNzKG5vZGVfaW5m
byk7CisgICAgdGhpcy5hZGRDaGlsZChub2RlKTsKKyAgICBpZiAodHlwZW9mIG5vZGVfaW5mbyA9
M0Q9M0Q9M0QgJ29iamVjdCcgJiYgbm9kZV9pbmZvLmNoaWxkcmVuICYmIG5vZGVfPQppbmZvLmNo
aWxkcmVuLmxlbmd0aCkgeworICAgICAgbm9kZS5sb2FkRnJvbURhdGEobm9kZV9pbmZvLmNoaWxk
cmVuKTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7CisgIH07CisKKyAgTm9kZS5wcm90b3R5cGUu
cHJlcGVuZCA9M0QgZnVuY3Rpb24obm9kZV9pbmZvKSB7CisgICAgdmFyIG5vZGU7CisgICAgbm9k
ZSA9M0QgbmV3IHRoaXMudHJlZS5ub2RlX2NsYXNzKG5vZGVfaW5mbyk7CisgICAgdGhpcy5hZGRD
aGlsZEF0UG9zaXRpb24obm9kZSwgMCk7CisgICAgaWYgKHR5cGVvZiBub2RlX2luZm8gPTNEPTNE
PTNEICdvYmplY3QnICYmIG5vZGVfaW5mby5jaGlsZHJlbiAmJiBub2RlXz0KaW5mby5jaGlsZHJl
bi5sZW5ndGgpIHsKKyAgICAgIG5vZGUubG9hZEZyb21EYXRhKG5vZGVfaW5mby5jaGlsZHJlbik7
CisgICAgfQorICAgIHJldHVybiBub2RlOworICB9OworCisgIE5vZGUucHJvdG90eXBlLmlzUGFy
ZW50T2YgPTNEIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICB2YXIgcGFyZW50OworICAgIHBhcmVudCA9
M0Qgbm9kZS5wYXJlbnQ7CisgICAgd2hpbGUgKHBhcmVudCkgeworICAgICAgaWYgKHBhcmVudCA9
M0Q9M0Q9M0QgdGhpcykgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHBh
cmVudCA9M0QgcGFyZW50LnBhcmVudDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9Owor
CisgIE5vZGUucHJvdG90eXBlLmdldExldmVsID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIgbGV2
ZWwsIG5vZGU7CisgICAgbGV2ZWwgPTNEIDA7CisgICAgbm9kZSA9M0QgdGhpczsKKyAgICB3aGls
ZSAobm9kZS5wYXJlbnQpIHsKKyAgICAgIGxldmVsICs9M0QgMTsKKyAgICAgIG5vZGUgPTNEIG5v
ZGUucGFyZW50OworICAgIH0KKyAgICByZXR1cm4gbGV2ZWw7CisgIH07CisKKyAgTm9kZS5wcm90
b3R5cGUuZ2V0Tm9kZUJ5SWQgPTNEIGZ1bmN0aW9uKG5vZGVfaWQpIHsKKyAgICByZXR1cm4gdGhp
cy5pZF9tYXBwaW5nW25vZGVfaWRdOworICB9OworCisgIE5vZGUucHJvdG90eXBlLmFkZE5vZGVU
b0luZGV4ID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAgaWYgKG5vZGUuaWQgIT0zRCBudWxsKSB7
CisgICAgICByZXR1cm4gdGhpcy5pZF9tYXBwaW5nW25vZGUuaWRdID0zRCBub2RlOworICAgIH0K
KyAgfTsKKworICBOb2RlLnByb3RvdHlwZS5yZW1vdmVOb2RlRnJvbUluZGV4ID0zRCBmdW5jdGlv
bihub2RlKSB7CisgICAgaWYgKG5vZGUuaWQgIT0zRCBudWxsKSB7CisgICAgICByZXR1cm4gZGVs
ZXRlIHRoaXMuaWRfbWFwcGluZ1tub2RlLmlkXTsKKyAgICB9CisgIH07CisKKyAgTm9kZS5wcm90
b3R5cGUucmVtb3ZlQ2hpbGRyZW4gPTNEIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuaXRlcmF0ZSgo
ZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbihjaGlsZCkgeworICAgICAg
ICBfdGhpcy50cmVlLnJlbW92ZU5vZGVGcm9tSW5kZXgoY2hpbGQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgIH07CisgICAgfSkodGhpcykpOworICAgIHJldHVybiB0aGlzLmNoaWxkcmVu
ID0zRCBbXTsKKyAgfTsKKworICBOb2RlLnByb3RvdHlwZS5nZXRQcmV2aW91c1NpYmxpbmcgPTNE
IGZ1bmN0aW9uKCkgeworICAgIHZhciBwcmV2aW91c19pbmRleDsKKyAgICBpZiAoIXRoaXMucGFy
ZW50KSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgcHJldmlvdXNf
aW5kZXggPTNEIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcykgLSAxOworICAgICAgaWYg
KHByZXZpb3VzX2luZGV4ID49M0QgMCkgeworICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hp
bGRyZW5bcHJldmlvdXNfaW5kZXhdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgICB9CisgICAgfQorICB9OworCisgIE5vZGUucHJvdG90eXBlLmdldE5leHRTaWJs
aW5nID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIgbmV4dF9pbmRleDsKKyAgICBpZiAoIXRoaXMu
cGFyZW50KSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgbmV4dF9p
bmRleCA9M0QgdGhpcy5wYXJlbnQuZ2V0Q2hpbGRJbmRleCh0aGlzKSArIDE7CisgICAgICBpZiAo
bmV4dF9pbmRleCA8IHRoaXMucGFyZW50LmNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICByZXR1
cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5bbmV4dF9pbmRleF07CisgICAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgTm9kZS5wcm90b3R5
cGUuZ2V0Tm9kZXNCeVByb3BlcnR5ID0zRCBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgcmV0
dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgIHJldHVybiBub2RlW2tleV0g
PTNEPTNEPTNEIHZhbHVlOworICAgIH0pOworICB9OworCisgIE5vZGUucHJvdG90eXBlLmZpbHRl
ciA9M0QgZnVuY3Rpb24oZikgeworICAgIHZhciByZXN1bHQ7CisgICAgcmVzdWx0ID0zRCBbXTsK
KyAgICB0aGlzLml0ZXJhdGUoZnVuY3Rpb24obm9kZSkgeworICAgICAgaWYgKGYobm9kZSkpIHsK
KyAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9OworCisgIE5vZGUucHJvdG90eXBlLmdl
dE5leHROb2RlID0zRCBmdW5jdGlvbihpbmNsdWRlX2NoaWxkcmVuKSB7CisgICAgdmFyIG5leHRf
c2libGluZzsKKyAgICBpZiAoaW5jbHVkZV9jaGlsZHJlbiA9M0Q9M0QgbnVsbCkgeworICAgICAg
aW5jbHVkZV9jaGlsZHJlbiA9M0QgdHJ1ZTsKKyAgICB9CisgICAgaWYgKGluY2x1ZGVfY2hpbGRy
ZW4gJiYgdGhpcy5oYXNDaGlsZHJlbigpICYmIHRoaXMuaXNfb3BlbikgeworICAgICAgcmV0dXJu
IHRoaXMuY2hpbGRyZW5bMF07CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghdGhpcy5wYXJlbnQp
IHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2UgeworICAgICAgICBuZXh0X3Np
YmxpbmcgPTNEIHRoaXMuZ2V0TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgaWYgKG5leHRfc2libGlu
ZykgeworICAgICAgICAgIHJldHVybiBuZXh0X3NpYmxpbmc7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldE5leHROb2RlKGZhbHNlKTsKKyAgICAgICAg
fQorICAgICAgfQorICAgIH0KKyAgfTsKKworICBOb2RlLnByb3RvdHlwZS5nZXRQcmV2aW91c05v
ZGUgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBwcmV2aW91c19zaWJsaW5nOworICAgIGlmICgh
dGhpcy5wYXJlbnQpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICBw
cmV2aW91c19zaWJsaW5nID0zRCB0aGlzLmdldFByZXZpb3VzU2libGluZygpOworICAgICAgaWYg
KHByZXZpb3VzX3NpYmxpbmcpIHsKKyAgICAgICAgaWYgKCFwcmV2aW91c19zaWJsaW5nLmhhc0No
aWxkcmVuKCkgfHwgIXByZXZpb3VzX3NpYmxpbmcuaXNfb3BlbikgeworICAgICAgICAgIHJldHVy
biBwcmV2aW91c19zaWJsaW5nOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBw
cmV2aW91c19zaWJsaW5nLmdldExhc3RDaGlsZCgpOworICAgICAgICB9CisgICAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnQoKTsKKyAgICAgIH0KKyAgICB9CisgIH07
CisKKyAgTm9kZS5wcm90b3R5cGUuZ2V0UGFyZW50ID0zRCBmdW5jdGlvbigpIHsKKyAgICBpZiAo
IXRoaXMucGFyZW50KSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGVsc2UgaWYgKCF0aGlz
LnBhcmVudC5wYXJlbnQpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAg
ICByZXR1cm4gdGhpcy5wYXJlbnQ7CisgICAgfQorICB9OworCisgIE5vZGUucHJvdG90eXBlLmdl
dExhc3RDaGlsZCA9M0QgZnVuY3Rpb24oKSB7CisgICAgdmFyIGxhc3RfY2hpbGQ7CisgICAgaWYg
KCF0aGlzLmhhc0NoaWxkcmVuKCkpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7
CisgICAgICBsYXN0X2NoaWxkID0zRCB0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3Ro
IC0gMV07CisgICAgICBpZiAoIWxhc3RfY2hpbGQuaGFzQ2hpbGRyZW4oKSB8fCAhbGFzdF9jaGls
ZC5pc19vcGVuKSB7CisgICAgICAgIHJldHVybiBsYXN0X2NoaWxkOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgcmV0dXJuIGxhc3RfY2hpbGQuZ2V0TGFzdENoaWxkKCk7CisgICAgICB9CisgICAg
fQorICB9OworCisgIHJldHVybiBOb2RlOworCit9KSgpOworCittb2R1bGUuZXhwb3J0cyA9M0Qg
eworICBOb2RlOiBOb2RlLAorICBQb3NpdGlvbjogUG9zaXRpb24KK307CisKK30se31dLDY6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewordmFyICQsIEJvcmRlckRyb3BIaW50LCBG
b2xkZXJFbGVtZW50LCBHaG9zdERyb3BIaW50LCBOb2RlRWxlbWVudCwgUG9zaXRpb249Ciwgbm9k
ZSwKKyAgZXh0ZW5kID0zRCBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBp
biBwYXJlbnQpIHsgaWYgKGhhc1ByPQpvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9
M0QgcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy49CmNvbnN0cnVjdG9yID0z
RCBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9M0QgcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJv
dG90eT0KcGUgPTNEIG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9M0QgcGFyZW50LnByb3Rv
dHlwZTsgcmV0dXJuIGNoaWxkOyB9LAorICBoYXNQcm9wID0zRCB7fS5oYXNPd25Qcm9wZXJ0eTsK
Kworbm9kZSA9M0QgcmVxdWlyZSgnLi9ub2RlJyk7CisKK1Bvc2l0aW9uID0zRCBub2RlLlBvc2l0
aW9uOworCiskID0zRCBqUXVlcnk7CisKK05vZGVFbGVtZW50ID0zRCAoZnVuY3Rpb24oKSB7Cisg
IGZ1bmN0aW9uIE5vZGVFbGVtZW50KG5vZGUsIHRyZWVfd2lkZ2V0KSB7CisgICAgdGhpcy5pbml0
KG5vZGUsIHRyZWVfd2lkZ2V0KTsKKyAgfQorCisgIE5vZGVFbGVtZW50LnByb3RvdHlwZS5pbml0
ID0zRCBmdW5jdGlvbihub2RlLCB0cmVlX3dpZGdldCkgeworICAgIHRoaXMubm9kZSA9M0Qgbm9k
ZTsKKyAgICB0aGlzLnRyZWVfd2lkZ2V0ID0zRCB0cmVlX3dpZGdldDsKKyAgICBpZiAoIW5vZGUu
ZWxlbWVudCkgeworICAgICAgbm9kZS5lbGVtZW50ID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmVsZW1l
bnQ7CisgICAgfQorICAgIHJldHVybiB0aGlzLiRlbGVtZW50ID0zRCAkKG5vZGUuZWxlbWVudCk7
CisgIH07CisKKyAgTm9kZUVsZW1lbnQucHJvdG90eXBlLmdldFVsID0zRCBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gdGhpcy4kZWxlbWVudC5jaGlsZHJlbigndWw6Zmlyc3QnKTsKKyAgfTsKKwor
ICBOb2RlRWxlbWVudC5wcm90b3R5cGUuZ2V0U3BhbiA9M0QgZnVuY3Rpb24oKSB7CisgICAgcmV0
dXJuIHRoaXMuJGVsZW1lbnQuY2hpbGRyZW4oJy5qcXRyZWUtZWxlbWVudCcpLmZpbmQoJ3NwYW4u
anF0cmVlLXRpdD0KbGUnKTsKKyAgfTsKKworICBOb2RlRWxlbWVudC5wcm90b3R5cGUuZ2V0TGkg
PTNEIGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLiRlbGVtZW50OworICB9OworCisgIE5v
ZGVFbGVtZW50LnByb3RvdHlwZS5hZGREcm9wSGludCA9M0QgZnVuY3Rpb24ocG9zaXRpb24pIHsK
KyAgICBpZiAocG9zaXRpb24gPTNEPTNEPTNEIFBvc2l0aW9uLklOU0lERSkgeworICAgICAgcmV0
dXJuIG5ldyBCb3JkZXJEcm9wSGludCh0aGlzLiRlbGVtZW50KTsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIG5ldyBHaG9zdERyb3BIaW50KHRoaXMubm9kZSwgdGhpcy4kZWxlbWVudCwgcG9z
aXRpb24pOworICAgIH0KKyAgfTsKKworICBOb2RlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0z
RCBmdW5jdGlvbigpIHsKKyAgICB2YXIgJGxpLCAkc3BhbjsKKyAgICAkbGkgPTNEIHRoaXMuZ2V0
TGkoKTsKKyAgICAkbGkuYWRkQ2xhc3MoJ2pxdHJlZS1zZWxlY3RlZCcpOworICAgICRsaS5hdHRy
KCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTsKKyAgICAkc3BhbiA9M0QgdGhpcy5nZXRTcGFuKCk7
CisgICAgcmV0dXJuICRzcGFuLmF0dHIoJ3RhYmluZGV4JywgMCk7CisgIH07CisKKyAgTm9kZUVs
ZW1lbnQucHJvdG90eXBlLmRlc2VsZWN0ID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIgJGxpLCAk
c3BhbjsKKyAgICAkbGkgPTNEIHRoaXMuZ2V0TGkoKTsKKyAgICAkbGkucmVtb3ZlQ2xhc3MoJ2px
dHJlZS1zZWxlY3RlZCcpOworICAgICRsaS5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ2ZhbHNlJyk7
CisgICAgJHNwYW4gPTNEIHRoaXMuZ2V0U3BhbigpOworICAgIHJldHVybiAkc3Bhbi5hdHRyKCd0
YWJpbmRleCcsIC0xKTsKKyAgfTsKKworICByZXR1cm4gTm9kZUVsZW1lbnQ7CisKK30pKCk7CisK
K0ZvbGRlckVsZW1lbnQgPTNEIChmdW5jdGlvbihzdXBlckNsYXNzKSB7CisgIGV4dGVuZChGb2xk
ZXJFbGVtZW50LCBzdXBlckNsYXNzKTsKKworICBmdW5jdGlvbiBGb2xkZXJFbGVtZW50KCkgewor
ICAgIHJldHVybiBGb2xkZXJFbGVtZW50Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworICB9CisKKyAgRm9sZGVyRWxlbWVudC5wcm90b3R5cGUub3BlbiA9M0Qg
ZnVuY3Rpb24ob25fZmluaXNoZWQsIHNsaWRlKSB7CisgICAgdmFyICRidXR0b24sIGRvT3BlbjsK
KyAgICBpZiAoc2xpZGUgPTNEPTNEIG51bGwpIHsKKyAgICAgIHNsaWRlID0zRCB0cnVlOworICAg
IH0KKyAgICBpZiAoIXRoaXMubm9kZS5pc19vcGVuKSB7CisgICAgICB0aGlzLm5vZGUuaXNfb3Bl
biA9M0QgdHJ1ZTsKKyAgICAgICRidXR0b24gPTNEIHRoaXMuZ2V0QnV0dG9uKCk7CisgICAgICAk
YnV0dG9uLnJlbW92ZUNsYXNzKCdqcXRyZWUtY2xvc2VkJyk7CisgICAgICAkYnV0dG9uLmh0bWwo
JycpOworICAgICAgJGJ1dHRvbi5hcHBlbmQodGhpcy50cmVlX3dpZGdldC5yZW5kZXJlci5vcGVu
ZWRfaWNvbl9lbGVtZW50LmNsb25lTm89CmRlKGZhbHNlKSk7CisgICAgICBkb09wZW4gPTNEIChm
dW5jdGlvbihfdGhpcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
dmFyICRsaSwgJHNwYW47CisgICAgICAgICAgJGxpID0zRCBfdGhpcy5nZXRMaSgpOworICAgICAg
ICAgICRsaS5yZW1vdmVDbGFzcygnanF0cmVlLWNsb3NlZCcpOworICAgICAgICAgICRzcGFuID0z
RCBfdGhpcy5nZXRTcGFuKCk7CisgICAgICAgICAgJHNwYW4uYXR0cignYXJpYS1leHBhbmRlZCcs
ICd0cnVlJyk7CisgICAgICAgICAgaWYgKG9uX2ZpbmlzaGVkKSB7CisgICAgICAgICAgICBvbl9m
aW5pc2hlZCgpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gX3RoaXMudHJlZV93aWRn
ZXQuX3RyaWdnZXJFdmVudCgndHJlZS5vcGVuJywgeworICAgICAgICAgICAgbm9kZTogX3RoaXMu
bm9kZQorICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAgfSkodGhpcyk7CisgICAgICBp
ZiAoc2xpZGUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VWwoKS5zbGlkZURvd24oJ2Zhc3Qn
LCBkb09wZW4pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5nZXRVbCgpLnNob3coKTsK
KyAgICAgICAgcmV0dXJuIGRvT3BlbigpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBGb2xk
ZXJFbGVtZW50LnByb3RvdHlwZS5jbG9zZSA9M0QgZnVuY3Rpb24oc2xpZGUpIHsKKyAgICB2YXIg
JGJ1dHRvbiwgZG9DbG9zZTsKKyAgICBpZiAoc2xpZGUgPTNEPTNEIG51bGwpIHsKKyAgICAgIHNs
aWRlID0zRCB0cnVlOworICAgIH0KKyAgICBpZiAodGhpcy5ub2RlLmlzX29wZW4pIHsKKyAgICAg
IHRoaXMubm9kZS5pc19vcGVuID0zRCBmYWxzZTsKKyAgICAgICRidXR0b24gPTNEIHRoaXMuZ2V0
QnV0dG9uKCk7CisgICAgICAkYnV0dG9uLmFkZENsYXNzKCdqcXRyZWUtY2xvc2VkJyk7CisgICAg
ICAkYnV0dG9uLmh0bWwoJycpOworICAgICAgJGJ1dHRvbi5hcHBlbmQodGhpcy50cmVlX3dpZGdl
dC5yZW5kZXJlci5jbG9zZWRfaWNvbl9lbGVtZW50LmNsb25lTm89CmRlKGZhbHNlKSk7CisgICAg
ICBkb0Nsb3NlID0zRCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIHZhciAkbGksICRzcGFuOworICAgICAgICAgICRsaSA9M0QgX3RoaXMu
Z2V0TGkoKTsKKyAgICAgICAgICAkbGkuYWRkQ2xhc3MoJ2pxdHJlZS1jbG9zZWQnKTsKKyAgICAg
ICAgICAkc3BhbiA9M0QgX3RoaXMuZ2V0U3BhbigpOworICAgICAgICAgICRzcGFuLmF0dHIoJ2Fy
aWEtZXhwYW5kZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICByZXR1cm4gX3RoaXMudHJlZV93aWRn
ZXQuX3RyaWdnZXJFdmVudCgndHJlZS5jbG9zZScsIHsKKyAgICAgICAgICAgIG5vZGU6IF90aGlz
Lm5vZGUKKyAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKyAgICAgIH0pKHRoaXMpOworICAgICAg
aWYgKHNsaWRlKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdldFVsKCkuc2xpZGVVcCgnZmFzdCcs
IGRvQ2xvc2UpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5nZXRVbCgpLmhpZGUoKTsK
KyAgICAgICAgcmV0dXJuIGRvQ2xvc2UoKTsKKyAgICAgIH0KKyAgICB9CisgIH07CisKKyAgRm9s
ZGVyRWxlbWVudC5wcm90b3R5cGUuZ2V0QnV0dG9uID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdGhpcy4kZWxlbWVudC5jaGlsZHJlbignLmpxdHJlZS1lbGVtZW50JykuZmluZCgnYS5qcXRy
ZWUtdG9nZ2xlPQpyJyk7CisgIH07CisKKyAgRm9sZGVyRWxlbWVudC5wcm90b3R5cGUuYWRkRHJv
cEhpbnQgPTNEIGZ1bmN0aW9uKHBvc2l0aW9uKSB7CisgICAgaWYgKCF0aGlzLm5vZGUuaXNfb3Bl
biAmJiBwb3NpdGlvbiA9M0Q9M0Q9M0QgUG9zaXRpb24uSU5TSURFKSB7CisgICAgICByZXR1cm4g
bmV3IEJvcmRlckRyb3BIaW50KHRoaXMuJGVsZW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXR1cm4gbmV3IEdob3N0RHJvcEhpbnQodGhpcy5ub2RlLCB0aGlzLiRlbGVtZW50LCBwb3NpdGlv
bik7CisgICAgfQorICB9OworCisgIHJldHVybiBGb2xkZXJFbGVtZW50OworCit9KShOb2RlRWxl
bWVudCk7CisKK0JvcmRlckRyb3BIaW50ID0zRCAoZnVuY3Rpb24oKSB7CisgIGZ1bmN0aW9uIEJv
cmRlckRyb3BIaW50KCRlbGVtZW50KSB7CisgICAgdmFyICRkaXYsIHdpZHRoOworICAgICRkaXYg
PTNEICRlbGVtZW50LmNoaWxkcmVuKCcuanF0cmVlLWVsZW1lbnQnKTsKKyAgICB3aWR0aCA9M0Qg
JGVsZW1lbnQud2lkdGgoKSAtIDQ7CisgICAgdGhpcy4kaGludCA9M0QgJCgnPHNwYW4gY2xhc3M9
M0QianF0cmVlLWJvcmRlciI+PC9zcGFuPicpOworICAgICRkaXYuYXBwZW5kKHRoaXMuJGhpbnQp
OworICAgIHRoaXMuJGhpbnQuY3NzKHsKKyAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgIGhlaWdo
dDogJGRpdi5vdXRlckhlaWdodCgpIC0gNAorICAgIH0pOworICB9CisKKyAgQm9yZGVyRHJvcEhp
bnQucHJvdG90eXBlLnJlbW92ZSA9M0QgZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuJGhp
bnQucmVtb3ZlKCk7CisgIH07CisKKyAgcmV0dXJuIEJvcmRlckRyb3BIaW50OworCit9KSgpOwor
CitHaG9zdERyb3BIaW50ID0zRCAoZnVuY3Rpb24oKSB7CisgIGZ1bmN0aW9uIEdob3N0RHJvcEhp
bnQobm9kZSwgJGVsZW1lbnQsIHBvc2l0aW9uKSB7CisgICAgdGhpcy4kZWxlbWVudCA9M0QgJGVs
ZW1lbnQ7CisgICAgdGhpcy5ub2RlID0zRCBub2RlOworICAgIHRoaXMuJGdob3N0ID0zRCAkKCc8
bGkgY2xhc3M9M0QianF0cmVlX2NvbW1vbiBqcXRyZWUtZ2hvc3QiPjxzcGFuIGNsYXM9CnM9M0Qi
anF0cmVlX2NvbW1vbiBqcXRyZWUtY2lyY2xlIj48L3NwYW4+PHNwYW4gY2xhc3M9M0QianF0cmVl
X2NvbW1vbiBqcXRyZT0KZS1saW5lIj48L3NwYW4+PC9saT4nKTsKKyAgICBpZiAocG9zaXRpb24g
PTNEPTNEPTNEIFBvc2l0aW9uLkFGVEVSKSB7CisgICAgICB0aGlzLm1vdmVBZnRlcigpOworICAg
IH0gZWxzZSBpZiAocG9zaXRpb24gPTNEPTNEPTNEIFBvc2l0aW9uLkJFRk9SRSkgeworICAgICAg
dGhpcy5tb3ZlQmVmb3JlKCk7CisgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA9M0Q9M0Q9M0QgUG9z
aXRpb24uSU5TSURFKSB7CisgICAgICBpZiAobm9kZS5pc0ZvbGRlcigpICYmIG5vZGUuaXNfb3Bl
bikgeworICAgICAgICB0aGlzLm1vdmVJbnNpZGVPcGVuRm9sZGVyKCk7CisgICAgICB9IGVsc2Ug
eworICAgICAgICB0aGlzLm1vdmVJbnNpZGUoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBH
aG9zdERyb3BIaW50LnByb3RvdHlwZS5yZW1vdmUgPTNEIGZ1bmN0aW9uKCkgeworICAgIHJldHVy
biB0aGlzLiRnaG9zdC5yZW1vdmUoKTsKKyAgfTsKKworICBHaG9zdERyb3BIaW50LnByb3RvdHlw
ZS5tb3ZlQWZ0ZXIgPTNEIGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLiRlbGVtZW50LmFm
dGVyKHRoaXMuJGdob3N0KTsKKyAgfTsKKworICBHaG9zdERyb3BIaW50LnByb3RvdHlwZS5tb3Zl
QmVmb3JlID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy4kZWxlbWVudC5iZWZvcmUo
dGhpcy4kZ2hvc3QpOworICB9OworCisgIEdob3N0RHJvcEhpbnQucHJvdG90eXBlLm1vdmVJbnNp
ZGVPcGVuRm9sZGVyID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gJCh0aGlzLm5vZGUuY2hp
bGRyZW5bMF0uZWxlbWVudCkuYmVmb3JlKHRoaXMuJGdob3N0KTsKKyAgfTsKKworICBHaG9zdERy
b3BIaW50LnByb3RvdHlwZS5tb3ZlSW5zaWRlID0zRCBmdW5jdGlvbigpIHsKKyAgICB0aGlzLiRl
bGVtZW50LmFmdGVyKHRoaXMuJGdob3N0KTsKKyAgICByZXR1cm4gdGhpcy4kZ2hvc3QuYWRkQ2xh
c3MoJ2pxdHJlZS1pbnNpZGUnKTsKKyAgfTsKKworICByZXR1cm4gR2hvc3REcm9wSGludDsKKwor
fSkoKTsKKworbW9kdWxlLmV4cG9ydHMgPTNEIHsKKyAgQm9yZGVyRHJvcEhpbnQ6IEJvcmRlckRy
b3BIaW50LAorICBGb2xkZXJFbGVtZW50OiBGb2xkZXJFbGVtZW50LAorICBHaG9zdERyb3BIaW50
OiBHaG9zdERyb3BIaW50LAorICBOb2RlRWxlbWVudDogTm9kZUVsZW1lbnQKK307CisKK30seyIu
L25vZGUiOjV9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK3ZhciAkLCBT
YXZlU3RhdGVIYW5kbGVyLCBpbmRleE9mLCBpc0ludCwgdXRpbDsKKwordXRpbCA9M0QgcmVxdWly
ZSgnLi91dGlsJyk7CisKK2luZGV4T2YgPTNEIHV0aWwuaW5kZXhPZjsKKworaXNJbnQgPTNEIHV0
aWwuaXNJbnQ7CisKKyQgPTNEIGpRdWVyeTsKKworU2F2ZVN0YXRlSGFuZGxlciA9M0QgKGZ1bmN0
aW9uKCkgeworICBmdW5jdGlvbiBTYXZlU3RhdGVIYW5kbGVyKHRyZWVfd2lkZ2V0KSB7CisgICAg
dGhpcy50cmVlX3dpZGdldCA9M0QgdHJlZV93aWRnZXQ7CisgIH0KKworICBTYXZlU3RhdGVIYW5k
bGVyLnByb3RvdHlwZS5zYXZlU3RhdGUgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBzdGF0ZTsK
KyAgICBzdGF0ZSA9M0QgSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRTdGF0ZSgpKTsKKyAgICBpZiAo
dGhpcy50cmVlX3dpZGdldC5vcHRpb25zLm9uU2V0U3RhdGVGcm9tU3RvcmFnZSkgeworICAgICAg
cmV0dXJuIHRoaXMudHJlZV93aWRnZXQub3B0aW9ucy5vblNldFN0YXRlRnJvbVN0b3JhZ2Uoc3Rh
dGUpOworICAgIH0gZWxzZSBpZiAodGhpcy5zdXBwb3J0c0xvY2FsU3RvcmFnZSgpKSB7CisgICAg
ICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5nZXRDb29raWVOYW1lKCksIHN0YXRl
KTsKKyAgICB9IGVsc2UgaWYgKCQuY29va2llKSB7CisgICAgICAkLmNvb2tpZS5yYXcgPTNEIHRy
dWU7CisgICAgICByZXR1cm4gJC5jb29raWUodGhpcy5nZXRDb29raWVOYW1lKCksIHN0YXRlLCB7
CisgICAgICAgIHBhdGg6ICcvJworICAgICAgfSk7CisgICAgfQorICB9OworCisgIFNhdmVTdGF0
ZUhhbmRsZXIucHJvdG90eXBlLmdldFN0YXRlRnJvbVN0b3JhZ2UgPTNEIGZ1bmN0aW9uKCkgewor
ICAgIHZhciBqc29uX2RhdGE7CisgICAganNvbl9kYXRhID0zRCB0aGlzLl9sb2FkRnJvbVN0b3Jh
Z2UoKTsKKyAgICBpZiAoanNvbl9kYXRhKSB7CisgICAgICByZXR1cm4gdGhpcy5fcGFyc2VTdGF0
ZShqc29uX2RhdGEpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cisg
IH07CisKKyAgU2F2ZVN0YXRlSGFuZGxlci5wcm90b3R5cGUuX3BhcnNlU3RhdGUgPTNEIGZ1bmN0
aW9uKGpzb25fZGF0YSkgeworICAgIHZhciBzdGF0ZTsKKyAgICBzdGF0ZSA9M0QgJC5wYXJzZUpT
T04oanNvbl9kYXRhKTsKKyAgICBpZiAoc3RhdGUgJiYgc3RhdGUuc2VsZWN0ZWRfbm9kZSAmJiBp
c0ludChzdGF0ZS5zZWxlY3RlZF9ub2RlKSkgeworICAgICAgc3RhdGUuc2VsZWN0ZWRfbm9kZSA9
M0QgW3N0YXRlLnNlbGVjdGVkX25vZGVdOworICAgIH0KKyAgICByZXR1cm4gc3RhdGU7CisgIH07
CisKKyAgU2F2ZVN0YXRlSGFuZGxlci5wcm90b3R5cGUuX2xvYWRGcm9tU3RvcmFnZSA9M0QgZnVu
Y3Rpb24oKSB7CisgICAgaWYgKHRoaXMudHJlZV93aWRnZXQub3B0aW9ucy5vbkdldFN0YXRlRnJv
bVN0b3JhZ2UpIHsKKyAgICAgIHJldHVybiB0aGlzLnRyZWVfd2lkZ2V0Lm9wdGlvbnMub25HZXRT
dGF0ZUZyb21TdG9yYWdlKCk7CisgICAgfSBlbHNlIGlmICh0aGlzLnN1cHBvcnRzTG9jYWxTdG9y
YWdlKCkpIHsKKyAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldENvb2tp
ZU5hbWUoKSk7CisgICAgfSBlbHNlIGlmICgkLmNvb2tpZSkgeworICAgICAgJC5jb29raWUucmF3
ID0zRCB0cnVlOworICAgICAgcmV0dXJuICQuY29va2llKHRoaXMuZ2V0Q29va2llTmFtZSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9OworCisgIFNhdmVT
dGF0ZUhhbmRsZXIucHJvdG90eXBlLmdldFN0YXRlID0zRCBmdW5jdGlvbigpIHsKKyAgICB2YXIg
Z2V0T3Blbk5vZGVJZHMsIGdldFNlbGVjdGVkTm9kZUlkczsKKyAgICBnZXRPcGVuTm9kZUlkcyA9
M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBvcGVuX25vZGVzOworICAgICAgICBvcGVuX25vZGVzID0zRCBbXTsKKyAgICAgICAgX3Ro
aXMudHJlZV93aWRnZXQudHJlZS5pdGVyYXRlKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICBp
ZiAobm9kZS5pc19vcGVuICYmIG5vZGUuaWQgJiYgbm9kZS5oYXNDaGlsZHJlbigpKSB7CisgICAg
ICAgICAgICBvcGVuX25vZGVzLnB1c2gobm9kZS5pZCk7CisgICAgICAgICAgfQorICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIG9wZW5fbm9kZXM7Cisg
ICAgICB9OworICAgIH0pKHRoaXMpOworICAgIGdldFNlbGVjdGVkTm9kZUlkcyA9M0QgKGZ1bmN0
aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBuOwor
ICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBpLCBsZW4sIHJlZiwg
cmVzdWx0czsKKyAgICAgICAgICByZWYgPTNEIHRoaXMudHJlZV93aWRnZXQuZ2V0U2VsZWN0ZWRO
b2RlcygpOworICAgICAgICAgIHJlc3VsdHMgPTNEIFtdOworICAgICAgICAgIGZvciAoaSA9M0Qg
MCwgbGVuID0zRCByZWYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIG4gPTNE
IHJlZltpXTsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChuLmlkKTsKKyAgICAgICAgICB9Cisg
ICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH0pLmNhbGwoX3RoaXMpOworICAgICAg
fTsKKyAgICB9KSh0aGlzKTsKKyAgICByZXR1cm4geworICAgICAgb3Blbl9ub2RlczogZ2V0T3Bl
bk5vZGVJZHMoKSwKKyAgICAgIHNlbGVjdGVkX25vZGU6IGdldFNlbGVjdGVkTm9kZUlkcygpCisg
ICAgfTsKKyAgfTsKKworICBTYXZlU3RhdGVIYW5kbGVyLnByb3RvdHlwZS5zZXRJbml0aWFsU3Rh
dGUgPTNEIGZ1bmN0aW9uKHN0YXRlKSB7CisgICAgdmFyIG11c3RfbG9hZF9vbl9kZW1hbmQ7Cisg
ICAgaWYgKCFzdGF0ZSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSB7CisgICAg
ICBtdXN0X2xvYWRfb25fZGVtYW5kID0zRCB0aGlzLl9vcGVuSW5pdGlhbE5vZGVzKHN0YXRlLm9w
ZW5fbm9kZXMpOworICAgICAgdGhpcy5fc2VsZWN0SW5pdGlhbE5vZGVzKHN0YXRlLnNlbGVjdGVk
X25vZGUpOworICAgICAgcmV0dXJuIG11c3RfbG9hZF9vbl9kZW1hbmQ7CisgICAgfQorICB9Owor
CisgIFNhdmVTdGF0ZUhhbmRsZXIucHJvdG90eXBlLl9vcGVuSW5pdGlhbE5vZGVzID0zRCBmdW5j
dGlvbihub2RlX2lkcykgeworICAgIHZhciBpLCBsZW4sIG11c3RfbG9hZF9vbl9kZW1hbmQsIG5v
ZGUsIG5vZGVfaWQ7CisgICAgbXVzdF9sb2FkX29uX2RlbWFuZCA9M0QgZmFsc2U7CisgICAgZm9y
IChpID0zRCAwLCBsZW4gPTNEIG5vZGVfaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAg
ICBub2RlX2lkID0zRCBub2RlX2lkc1tpXTsKKyAgICAgIG5vZGUgPTNEIHRoaXMudHJlZV93aWRn
ZXQuZ2V0Tm9kZUJ5SWQobm9kZV9pZCk7CisgICAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAo
IW5vZGUubG9hZF9vbl9kZW1hbmQpIHsKKyAgICAgICAgICBub2RlLmlzX29wZW4gPTNEIHRydWU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbXVzdF9sb2FkX29uX2RlbWFuZCA9M0QgdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbXVzdF9sb2FkX29uX2Rl
bWFuZDsKKyAgfTsKKworICBTYXZlU3RhdGVIYW5kbGVyLnByb3RvdHlwZS5fc2VsZWN0SW5pdGlh
bE5vZGVzID0zRCBmdW5jdGlvbihub2RlX2lkcykgeworICAgIHZhciBpLCBsZW4sIG5vZGUsIG5v
ZGVfaWQsIHNlbGVjdF9jb3VudDsKKyAgICBzZWxlY3RfY291bnQgPTNEIDA7CisgICAgZm9yIChp
ID0zRCAwLCBsZW4gPTNEIG5vZGVfaWRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBu
b2RlX2lkID0zRCBub2RlX2lkc1tpXTsKKyAgICAgIG5vZGUgPTNEIHRoaXMudHJlZV93aWRnZXQu
Z2V0Tm9kZUJ5SWQobm9kZV9pZCk7CisgICAgICBpZiAobm9kZSkgeworICAgICAgICBzZWxlY3Rf
Y291bnQgKz0zRCAxOworICAgICAgICB0aGlzLnRyZWVfd2lkZ2V0LnNlbGVjdF9ub2RlX2hhbmRs
ZXIuYWRkVG9TZWxlY3Rpb24obm9kZSk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBzZWxl
Y3RfY291bnQgIT0zRD0zRCAwOworICB9OworCisgIFNhdmVTdGF0ZUhhbmRsZXIucHJvdG90eXBl
LnNldEluaXRpYWxTdGF0ZU9uRGVtYW5kID0zRCBmdW5jdGlvbihzdGF0ZSwgYz0KYl9maW5pc2hl
ZCkgeworICAgIGlmIChzdGF0ZSkgeworICAgICAgcmV0dXJuIHRoaXMuX3NldEluaXRpYWxTdGF0
ZU9uRGVtYW5kKHN0YXRlLm9wZW5fbm9kZXMsIHN0YXRlLnNlbGVjdGU9CmRfbm9kZSwgY2JfZmlu
aXNoZWQpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gY2JfZmluaXNoZWQoKTsKKyAgICB9
CisgIH07CisKKyAgU2F2ZVN0YXRlSGFuZGxlci5wcm90b3R5cGUuX3NldEluaXRpYWxTdGF0ZU9u
RGVtYW5kID0zRCBmdW5jdGlvbihub2RlX2lkPQpzLCBzZWxlY3RlZF9ub2RlcywgY2JfZmluaXNo
ZWQpIHsKKyAgICB2YXIgbG9hZEFuZE9wZW5Ob2RlLCBsb2FkaW5nX2NvdW50LCBvcGVuTm9kZXM7
CisgICAgbG9hZGluZ19jb3VudCA9M0QgMDsKKyAgICBvcGVuTm9kZXMgPTNEIChmdW5jdGlvbihf
dGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaSwgbGVuLCBu
ZXdfbm9kZXNfaWRzLCBub2RlLCBub2RlX2lkOworICAgICAgICBuZXdfbm9kZXNfaWRzID0zRCBb
XTsKKyAgICAgICAgZm9yIChpID0zRCAwLCBsZW4gPTNEIG5vZGVfaWRzLmxlbmd0aDsgaSA8IGxl
bjsgaSsrKSB7CisgICAgICAgICAgbm9kZV9pZCA9M0Qgbm9kZV9pZHNbaV07CisgICAgICAgICAg
bm9kZSA9M0QgX3RoaXMudHJlZV93aWRnZXQuZ2V0Tm9kZUJ5SWQobm9kZV9pZCk7CisgICAgICAg
ICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgICBuZXdfbm9kZXNfaWRzLnB1c2gobm9kZV9pZCk7
CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbm9kZS5pc19sb2FkaW5nKSB7
CisgICAgICAgICAgICAgIGlmIChub2RlLmxvYWRfb25fZGVtYW5kKSB7CisgICAgICAgICAgICAg
ICAgbG9hZEFuZE9wZW5Ob2RlKG5vZGUpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIF90aGlzLnRyZWVfd2lkZ2V0Ll9vcGVuTm9kZShub2RlLCBmYWxzZSk7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgbm9kZV9pZHMgPTNEIG5ld19ub2Rlc19pZHM7CisgICAgICAgIGlmIChfdGhpcy5fc2VsZWN0
SW5pdGlhbE5vZGVzKHNlbGVjdGVkX25vZGVzKSkgeworICAgICAgICAgIF90aGlzLnRyZWVfd2lk
Z2V0Ll9yZWZyZXNoRWxlbWVudHMoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobG9hZGluZ19j
b3VudCA9M0Q9M0Q9M0QgMCkgeworICAgICAgICAgIHJldHVybiBjYl9maW5pc2hlZCgpOworICAg
ICAgICB9CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAgIGxvYWRBbmRPcGVuTm9kZSA9M0Qg
KGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICBsb2FkaW5nX2NvdW50ICs9M0QgMTsKKyAgICAgICAgcmV0dXJuIF90aGlzLnRyZWVfd2lkZ2V0
Ll9vcGVuTm9kZShub2RlLCBmYWxzZSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgbG9hZGluZ19j
b3VudCAtPTNEIDE7CisgICAgICAgICAgcmV0dXJuIG9wZW5Ob2RlcygpOworICAgICAgICB9KTsK
KyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgcmV0dXJuIG9wZW5Ob2RlcygpOworICB9Owor
CisgIFNhdmVTdGF0ZUhhbmRsZXIucHJvdG90eXBlLmdldENvb2tpZU5hbWUgPTNEIGZ1bmN0aW9u
KCkgeworICAgIGlmICh0eXBlb2YgdGhpcy50cmVlX3dpZGdldC5vcHRpb25zLnNhdmVTdGF0ZSA9
M0Q9M0Q9M0QgJ3N0cmluZycpIHsKKyAgICAgIHJldHVybiB0aGlzLnRyZWVfd2lkZ2V0Lm9wdGlv
bnMuc2F2ZVN0YXRlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gJ3RyZWUnOworICAgIH0K
KyAgfTsKKworICBTYXZlU3RhdGVIYW5kbGVyLnByb3RvdHlwZS5zdXBwb3J0c0xvY2FsU3RvcmFn
ZSA9M0QgZnVuY3Rpb24oKSB7CisgICAgdmFyIHRlc3RTdXBwb3J0OworICAgIHRlc3RTdXBwb3J0
ID0zRCBmdW5jdGlvbigpIHsKKyAgICAgIHZhciBlcnJvciwgZXJyb3IxLCBrZXk7CisgICAgICBp
ZiAodHlwZW9mIGxvY2FsU3RvcmFnZSA9M0Q9M0Q9M0QgInVuZGVmaW5lZCIgfHwgbG9jYWxTdG9y
YWdlID0zRD0zRD0KPTNEIG51bGwpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSBl
bHNlIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBrZXkgPTNEICdfc3RvcmFnZV90ZXN0JzsK
KyAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgdHJ1ZSk7CisgICAgICAgICAg
c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpOworICAgICAgICB9IGNhdGNoIChlcnJvcjEp
IHsKKyAgICAgICAgICBlcnJvciA9M0QgZXJyb3IxOworICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9OworICAgIGlm
ICh0aGlzLl9zdXBwb3J0c0xvY2FsU3RvcmFnZSA9M0Q9M0QgbnVsbCkgeworICAgICAgdGhpcy5f
c3VwcG9ydHNMb2NhbFN0b3JhZ2UgPTNEIHRlc3RTdXBwb3J0KCk7CisgICAgfQorICAgIHJldHVy
biB0aGlzLl9zdXBwb3J0c0xvY2FsU3RvcmFnZTsKKyAgfTsKKworICBTYXZlU3RhdGVIYW5kbGVy
LnByb3RvdHlwZS5nZXROb2RlSWRUb0JlU2VsZWN0ZWQgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZh
ciBzdGF0ZTsKKyAgICBzdGF0ZSA9M0QgdGhpcy5nZXRTdGF0ZUZyb21TdG9yYWdlKCk7CisgICAg
aWYgKHN0YXRlICYmIHN0YXRlLnNlbGVjdGVkX25vZGUpIHsKKyAgICAgIHJldHVybiBzdGF0ZS5z
ZWxlY3RlZF9ub2RlWzBdOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
CisgIH07CisKKyAgcmV0dXJuIFNhdmVTdGF0ZUhhbmRsZXI7CisKK30pKCk7CisKK21vZHVsZS5l
eHBvcnRzID0zRCBTYXZlU3RhdGVIYW5kbGVyOworCit9LHsiLi91dGlsIjoxMn1dLDg6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewordmFyICQsIFNjcm9sbEhhbmRsZXI7CisKKyQg
PTNEIGpRdWVyeTsKKworU2Nyb2xsSGFuZGxlciA9M0QgKGZ1bmN0aW9uKCkgeworICBmdW5jdGlv
biBTY3JvbGxIYW5kbGVyKHRyZWVfd2lkZ2V0KSB7CisgICAgdGhpcy50cmVlX3dpZGdldCA9M0Qg
dHJlZV93aWRnZXQ7CisgICAgdGhpcy5wcmV2aW91c190b3AgPTNEIC0xOworICAgIHRoaXMuaXNf
aW5pdGlhbGl6ZWQgPTNEIGZhbHNlOworICAgIHRoaXMuX2luaXRTY3JvbGxQYXJlbnQoKTsKKyAg
fQorCisgIFNjcm9sbEhhbmRsZXIucHJvdG90eXBlLl9pbml0U2Nyb2xsUGFyZW50ID0zRCBmdW5j
dGlvbigpIHsKKyAgICB2YXIgJHNjcm9sbF9wYXJlbnQsIGdldFBhcmVudFdpdGhPdmVyZmxvdywg
c2V0RG9jdW1lbnRBc1Njcm9sbFBhcmVudDsKKyAgICBnZXRQYXJlbnRXaXRoT3ZlcmZsb3cgPTNE
IChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICB2
YXIgY3NzX3ZhbHVlcywgZWwsIGhhc092ZXJGbG93LCBpLCBsZW4sIHJlZjsKKyAgICAgICAgY3Nz
X3ZhbHVlcyA9M0QgWydvdmVyZmxvdycsICdvdmVyZmxvdy15J107CisgICAgICAgIGhhc092ZXJG
bG93ID0zRCBmdW5jdGlvbihlbCkgeworICAgICAgICAgIHZhciBjc3NfdmFsdWUsIGksIGxlbiwg
cmVmOworICAgICAgICAgIGZvciAoaSA9M0QgMCwgbGVuID0zRCBjc3NfdmFsdWVzLmxlbmd0aDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjc3NfdmFsdWUgPTNEIGNzc192YWx1ZXNbaV07
CisgICAgICAgICAgICBpZiAoKHJlZiA9M0QgJC5jc3MoZWwsIGNzc192YWx1ZSkpID0zRD0zRD0z
RCAnYXV0bycgfHwgcmVmID0zRD0KPTNEPTNEICdzY3JvbGwnKSB7CisgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH07CisgICAgICAgIGlmIChoYXNPdmVyRmxvdyhfdGhpcy50cmVlX3dp
ZGdldC4kZWxbMF0pKSB7CisgICAgICAgICAgcmV0dXJuIF90aGlzLnRyZWVfd2lkZ2V0LiRlbDsK
KyAgICAgICAgfQorICAgICAgICByZWYgPTNEIF90aGlzLnRyZWVfd2lkZ2V0LiRlbC5wYXJlbnRz
KCk7CisgICAgICAgIGZvciAoaSA9M0QgMCwgbGVuID0zRCByZWYubGVuZ3RoOyBpIDwgbGVuOyBp
KyspIHsKKyAgICAgICAgICBlbCA9M0QgcmVmW2ldOworICAgICAgICAgIGlmIChoYXNPdmVyRmxv
dyhlbCkpIHsKKyAgICAgICAgICAgIHJldHVybiAkKGVsKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAgIHNl
dERvY3VtZW50QXNTY3JvbGxQYXJlbnQgPTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICBfdGhpcy5zY3JvbGxfcGFyZW50X3RvcCA9M0QgMDsK
KyAgICAgICAgcmV0dXJuIF90aGlzLiRzY3JvbGxfcGFyZW50ID0zRCBudWxsOworICAgICAgfTsK
KyAgICB9KSh0aGlzKTsKKyAgICBpZiAodGhpcy50cmVlX3dpZGdldC4kZWwuY3NzKCdwb3NpdGlv
bicpID0zRD0zRD0zRCAnZml4ZWQnKSB7CisgICAgICBzZXREb2N1bWVudEFzU2Nyb2xsUGFyZW50
KCk7CisgICAgfQorICAgICRzY3JvbGxfcGFyZW50ID0zRCBnZXRQYXJlbnRXaXRoT3ZlcmZsb3co
KTsKKyAgICBpZiAoJHNjcm9sbF9wYXJlbnQgJiYgJHNjcm9sbF9wYXJlbnQubGVuZ3RoICYmICRz
Y3JvbGxfcGFyZW50WzBdLnRhZ05hPQptZSAhPTNEPTNEICdIVE1MJykgeworICAgICAgdGhpcy4k
c2Nyb2xsX3BhcmVudCA9M0QgJHNjcm9sbF9wYXJlbnQ7CisgICAgICB0aGlzLnNjcm9sbF9wYXJl
bnRfdG9wID0zRCB0aGlzLiRzY3JvbGxfcGFyZW50Lm9mZnNldCgpLnRvcDsKKyAgICB9IGVsc2Ug
eworICAgICAgc2V0RG9jdW1lbnRBc1Njcm9sbFBhcmVudCgpOworICAgIH0KKyAgICByZXR1cm4g
dGhpcy5pc19pbml0aWFsaXplZCA9M0QgdHJ1ZTsKKyAgfTsKKworICBTY3JvbGxIYW5kbGVyLnBy
b3RvdHlwZS5fZW5zdXJlSW5pdCA9M0QgZnVuY3Rpb24oKSB7CisgICAgaWYgKCF0aGlzLmlzX2lu
aXRpYWxpemVkKSB7CisgICAgICByZXR1cm4gdGhpcy5faW5pdFNjcm9sbFBhcmVudCgpOworICAg
IH0KKyAgfTsKKworICBTY3JvbGxIYW5kbGVyLnByb3RvdHlwZS5jaGVja1Njcm9sbGluZyA9M0Qg
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGhvdmVyZWRfYXJlYTsKKyAgICB0aGlzLl9lbnN1cmVJbml0
KCk7CisgICAgaG92ZXJlZF9hcmVhID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmRuZF9oYW5kbGVyLmhv
dmVyZWRfYXJlYTsKKyAgICBpZiAoaG92ZXJlZF9hcmVhICYmIGhvdmVyZWRfYXJlYS50b3AgIT0z
RD0zRCB0aGlzLnByZXZpb3VzX3RvcCkgeworICAgICAgdGhpcy5wcmV2aW91c190b3AgPTNEIGhv
dmVyZWRfYXJlYS50b3A7CisgICAgICBpZiAodGhpcy4kc2Nyb2xsX3BhcmVudCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5faGFuZGxlU2Nyb2xsaW5nV2l0aFNjcm9sbFBhcmVudChob3ZlcmVkX2Fy
ZWEpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZVNjcm9sbGlu
Z1dpdGhEb2N1bWVudChob3ZlcmVkX2FyZWEpOworICAgICAgfQorICAgIH0KKyAgfTsKKworICBT
Y3JvbGxIYW5kbGVyLnByb3RvdHlwZS5faGFuZGxlU2Nyb2xsaW5nV2l0aFNjcm9sbFBhcmVudCA9
M0QgZnVuY3Rpb24oYXI9CmVhKSB7CisgICAgdmFyIGRpc3RhbmNlX2JvdHRvbTsKKyAgICBkaXN0
YW5jZV9ib3R0b20gPTNEIHRoaXMuc2Nyb2xsX3BhcmVudF90b3AgKyB0aGlzLiRzY3JvbGxfcGFy
ZW50WzBdLm9mPQpmc2V0SGVpZ2h0IC0gYXJlYS5ib3R0b207CisgICAgaWYgKGRpc3RhbmNlX2Jv
dHRvbSA8IDIwKSB7CisgICAgICB0aGlzLiRzY3JvbGxfcGFyZW50WzBdLnNjcm9sbFRvcCArPTNE
IDIwOworICAgICAgdGhpcy50cmVlX3dpZGdldC5yZWZyZXNoSGl0QXJlYXMoKTsKKyAgICAgIHJl
dHVybiB0aGlzLnByZXZpb3VzX3RvcCA9M0QgLTE7CisgICAgfSBlbHNlIGlmICgoYXJlYS50b3Ag
LSB0aGlzLnNjcm9sbF9wYXJlbnRfdG9wKSA8IDIwKSB7CisgICAgICB0aGlzLiRzY3JvbGxfcGFy
ZW50WzBdLnNjcm9sbFRvcCAtPTNEIDIwOworICAgICAgdGhpcy50cmVlX3dpZGdldC5yZWZyZXNo
SGl0QXJlYXMoKTsKKyAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzX3RvcCA9M0QgLTE7CisgICAg
fQorICB9OworCisgIFNjcm9sbEhhbmRsZXIucHJvdG90eXBlLl9oYW5kbGVTY3JvbGxpbmdXaXRo
RG9jdW1lbnQgPTNEIGZ1bmN0aW9uKGFyZWEpIHsKKyAgICB2YXIgZGlzdGFuY2VfdG9wOworICAg
IGRpc3RhbmNlX3RvcCA9M0QgYXJlYS50b3AgLSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKTsKKyAg
ICBpZiAoZGlzdGFuY2VfdG9wIDwgMjApIHsKKyAgICAgIHJldHVybiAkKGRvY3VtZW50KS5zY3Jv
bGxUb3AoJChkb2N1bWVudCkuc2Nyb2xsVG9wKCkgLSAyMCk7CisgICAgfSBlbHNlIGlmICgkKHdp
bmRvdykuaGVpZ2h0KCkgLSAoYXJlYS5ib3R0b20gLSAkKGRvY3VtZW50KS5zY3JvbGxUb3AoKT0K
KSA8IDIwKSB7CisgICAgICByZXR1cm4gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCQoZG9jdW1lbnQp
LnNjcm9sbFRvcCgpICsgMjApOworICAgIH0KKyAgfTsKKworICBTY3JvbGxIYW5kbGVyLnByb3Rv
dHlwZS5zY3JvbGxUbyA9M0QgZnVuY3Rpb24odG9wKSB7CisgICAgdmFyIHRyZWVfdG9wOworICAg
IHRoaXMuX2Vuc3VyZUluaXQoKTsKKyAgICBpZiAodGhpcy4kc2Nyb2xsX3BhcmVudCkgeworICAg
ICAgcmV0dXJuIHRoaXMuJHNjcm9sbF9wYXJlbnRbMF0uc2Nyb2xsVG9wID0zRCB0b3A7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRyZWVfdG9wID0zRCB0aGlzLnRyZWVfd2lkZ2V0LiRlbC5vZmZzZXQo
KS50b3A7CisgICAgICByZXR1cm4gJChkb2N1bWVudCkuc2Nyb2xsVG9wKHRvcCArIHRyZWVfdG9w
KTsKKyAgICB9CisgIH07CisKKyAgU2Nyb2xsSGFuZGxlci5wcm90b3R5cGUuaXNTY3JvbGxlZElu
dG9WaWV3ID0zRCBmdW5jdGlvbihlbGVtZW50KSB7CisgICAgdmFyICRlbGVtZW50LCBlbGVtZW50
X2JvdHRvbSwgZWxlbWVudF90b3AsIHZpZXdfYm90dG9tLCB2aWV3X3RvcDsKKyAgICB0aGlzLl9l
bnN1cmVJbml0KCk7CisgICAgJGVsZW1lbnQgPTNEICQoZWxlbWVudCk7CisgICAgaWYgKHRoaXMu
JHNjcm9sbF9wYXJlbnQpIHsKKyAgICAgIHZpZXdfdG9wID0zRCAwOworICAgICAgdmlld19ib3R0
b20gPTNEIHRoaXMuJHNjcm9sbF9wYXJlbnQuaGVpZ2h0KCk7CisgICAgICBlbGVtZW50X3RvcCA9
M0QgJGVsZW1lbnQub2Zmc2V0KCkudG9wIC0gdGhpcy5zY3JvbGxfcGFyZW50X3RvcDsKKyAgICAg
IGVsZW1lbnRfYm90dG9tID0zRCBlbGVtZW50X3RvcCArICRlbGVtZW50LmhlaWdodCgpOworICAg
IH0gZWxzZSB7CisgICAgICB2aWV3X3RvcCA9M0QgJCh3aW5kb3cpLnNjcm9sbFRvcCgpOworICAg
ICAgdmlld19ib3R0b20gPTNEIHZpZXdfdG9wICsgJCh3aW5kb3cpLmhlaWdodCgpOworICAgICAg
ZWxlbWVudF90b3AgPTNEICRlbGVtZW50Lm9mZnNldCgpLnRvcDsKKyAgICAgIGVsZW1lbnRfYm90
dG9tID0zRCBlbGVtZW50X3RvcCArICRlbGVtZW50LmhlaWdodCgpOworICAgIH0KKyAgICByZXR1
cm4gKGVsZW1lbnRfYm90dG9tIDw9M0Qgdmlld19ib3R0b20pICYmIChlbGVtZW50X3RvcCA+PTNE
IHZpZXdfdG9wPQopOworICB9OworCisgIHJldHVybiBTY3JvbGxIYW5kbGVyOworCit9KSgpOwor
Cittb2R1bGUuZXhwb3J0cyA9M0QgU2Nyb2xsSGFuZGxlcjsKKworfSx7fV0sOTpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cit2YXIgJCwgU2VsZWN0Tm9kZUhhbmRsZXI7CisKKyQg
PTNEIGpRdWVyeTsKKworU2VsZWN0Tm9kZUhhbmRsZXIgPTNEIChmdW5jdGlvbigpIHsKKyAgZnVu
Y3Rpb24gU2VsZWN0Tm9kZUhhbmRsZXIodHJlZV93aWRnZXQpIHsKKyAgICB0aGlzLnRyZWVfd2lk
Z2V0ID0zRCB0cmVlX3dpZGdldDsKKyAgICB0aGlzLmNsZWFyKCk7CisgIH0KKworICBTZWxlY3RO
b2RlSGFuZGxlci5wcm90b3R5cGUuZ2V0U2VsZWN0ZWROb2RlID0zRCBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgc2VsZWN0ZWRfbm9kZXM7CisgICAgc2VsZWN0ZWRfbm9kZXMgPTNEIHRoaXMuZ2V0U2Vs
ZWN0ZWROb2RlcygpOworICAgIGlmIChzZWxlY3RlZF9ub2Rlcy5sZW5ndGgpIHsKKyAgICAgIHJl
dHVybiBzZWxlY3RlZF9ub2Rlc1swXTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfTsKKworICBTZWxlY3ROb2RlSGFuZGxlci5wcm90b3R5cGUuZ2V0U2VsZWN0
ZWROb2RlcyA9M0QgZnVuY3Rpb24oKSB7CisgICAgdmFyIGlkLCBub2RlLCBzZWxlY3RlZF9ub2Rl
czsKKyAgICBpZiAodGhpcy5zZWxlY3RlZF9zaW5nbGVfbm9kZSkgeworICAgICAgcmV0dXJuIFt0
aGlzLnNlbGVjdGVkX3NpbmdsZV9ub2RlXTsKKyAgICB9IGVsc2UgeworICAgICAgc2VsZWN0ZWRf
bm9kZXMgPTNEIFtdOworICAgICAgZm9yIChpZCBpbiB0aGlzLnNlbGVjdGVkX25vZGVzKSB7Cisg
ICAgICAgIG5vZGUgPTNEIHRoaXMudHJlZV93aWRnZXQuZ2V0Tm9kZUJ5SWQoaWQpOworICAgICAg
ICBpZiAobm9kZSkgeworICAgICAgICAgIHNlbGVjdGVkX25vZGVzLnB1c2gobm9kZSk7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBzZWxlY3RlZF9ub2RlczsKKyAgICB9CisgIH07
CisKKyAgU2VsZWN0Tm9kZUhhbmRsZXIucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZXNVbmRlciA9
M0QgZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdmFyIGlkLCBub2RlLCBzZWxlY3RlZF9ub2RlczsK
KyAgICBpZiAodGhpcy5zZWxlY3RlZF9zaW5nbGVfbm9kZSkgeworICAgICAgaWYgKHBhcmVudC5p
c1BhcmVudE9mKHRoaXMuc2VsZWN0ZWRfc2luZ2xlX25vZGUpKSB7CisgICAgICAgIHJldHVybiBb
dGhpcy5zZWxlY3RlZF9zaW5nbGVfbm9kZV07CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1
cm4gW107CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGVjdGVkX25vZGVzID0zRCBb
XTsKKyAgICAgIGZvciAoaWQgaW4gdGhpcy5zZWxlY3RlZF9ub2RlcykgeworICAgICAgICBub2Rl
ID0zRCB0aGlzLnRyZWVfd2lkZ2V0LmdldE5vZGVCeUlkKGlkKTsKKyAgICAgICAgaWYgKG5vZGUg
JiYgcGFyZW50LmlzUGFyZW50T2Yobm9kZSkpIHsKKyAgICAgICAgICBzZWxlY3RlZF9ub2Rlcy5w
dXNoKG5vZGUpOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gc2VsZWN0ZWRfbm9k
ZXM7CisgICAgfQorICB9OworCisgIFNlbGVjdE5vZGVIYW5kbGVyLnByb3RvdHlwZS5pc05vZGVT
ZWxlY3RlZCA9M0QgZnVuY3Rpb24obm9kZSkgeworICAgIGlmIChub2RlLmlkKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5zZWxlY3RlZF9ub2Rlc1tub2RlLmlkXTsKKyAgICB9IGVsc2UgaWYgKHRoaXMu
c2VsZWN0ZWRfc2luZ2xlX25vZGUpIHsKKyAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkX3Npbmds
ZV9ub2RlLmVsZW1lbnQgPTNEPTNEPTNEIG5vZGUuZWxlbWVudDsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBTZWxlY3ROb2RlSGFuZGxlci5wcm90
b3R5cGUuY2xlYXIgPTNEIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuc2VsZWN0ZWRfbm9kZXMgPTNE
IHt9OworICAgIHJldHVybiB0aGlzLnNlbGVjdGVkX3NpbmdsZV9ub2RlID0zRCBudWxsOworICB9
OworCisgIFNlbGVjdE5vZGVIYW5kbGVyLnByb3RvdHlwZS5yZW1vdmVGcm9tU2VsZWN0aW9uID0z
RCBmdW5jdGlvbihub2RlLCBpbmNsdT0KZGVfY2hpbGRyZW4pIHsKKyAgICBpZiAoaW5jbHVkZV9j
aGlsZHJlbiA9M0Q9M0QgbnVsbCkgeworICAgICAgaW5jbHVkZV9jaGlsZHJlbiA9M0QgZmFsc2U7
CisgICAgfQorICAgIGlmICghbm9kZS5pZCkgeworICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRfc2lu
Z2xlX25vZGUgJiYgbm9kZS5lbGVtZW50ID0zRD0zRD0zRCB0aGlzLnNlbGVjdGU9CmRfc2luZ2xl
X25vZGUuZWxlbWVudCkgeworICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZF9zaW5nbGVfbm9k
ZSA9M0QgbnVsbDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgZGVsZXRlIHRoaXMuc2Vs
ZWN0ZWRfbm9kZXNbbm9kZS5pZF07CisgICAgICBpZiAoaW5jbHVkZV9jaGlsZHJlbikgeworICAg
ICAgICByZXR1cm4gbm9kZS5pdGVyYXRlKChmdW5jdGlvbihfdGhpcykgeworICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbihuKSB7CisgICAgICAgICAgICBkZWxldGUgX3RoaXMuc2VsZWN0ZWRfbm9k
ZXNbbm9kZS5pZF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9OworICAg
ICAgICB9KSh0aGlzKSk7CisgICAgICB9CisgICAgfQorICB9OworCisgIFNlbGVjdE5vZGVIYW5k
bGVyLnByb3RvdHlwZS5hZGRUb1NlbGVjdGlvbiA9M0QgZnVuY3Rpb24obm9kZSkgeworICAgIGlm
IChub2RlLmlkKSB7CisgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZF9ub2Rlc1tub2RlLmlkXSA9
M0QgdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRfc2luZ2xl
X25vZGUgPTNEIG5vZGU7CisgICAgfQorICB9OworCisgIHJldHVybiBTZWxlY3ROb2RlSGFuZGxl
cjsKKworfSkoKTsKKworbW9kdWxlLmV4cG9ydHMgPTNEIFNlbGVjdE5vZGVIYW5kbGVyOworCit9
LHt9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisKKy8qCitDb3B5cmln
aHQgMjAxMyBNYXJjbyBCcmFhaworCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2Us
IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK1lvdSBtYXkgb2J0YWluIGEg
Y29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBh
Z3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJ
RVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K
K1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCit2YXIgJCwg
U2ltcGxlV2lkZ2V0LAorICBzbGljZSA9M0QgW10uc2xpY2U7CisKKyQgPTNEIGpRdWVyeTsKKwor
U2ltcGxlV2lkZ2V0ID0zRCAoZnVuY3Rpb24oKSB7CisgIFNpbXBsZVdpZGdldC5wcm90b3R5cGUu
ZGVmYXVsdHMgPTNEIHt9OworCisgIGZ1bmN0aW9uIFNpbXBsZVdpZGdldChlbCwgb3B0aW9ucykg
eworICAgIHRoaXMuJGVsID0zRCAkKGVsKTsKKyAgICB0aGlzLm9wdGlvbnMgPTNEICQuZXh0ZW5k
KHt9LCB0aGlzLmRlZmF1bHRzLCBvcHRpb25zKTsKKyAgfQorCisgIFNpbXBsZVdpZGdldC5wcm90
b3R5cGUuZGVzdHJveSA9M0QgZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuX2RlaW5pdCgp
OworICB9OworCisgIFNpbXBsZVdpZGdldC5wcm90b3R5cGUuX2luaXQgPTNEIGZ1bmN0aW9uKCkg
eworICAgIHJldHVybiBudWxsOworICB9OworCisgIFNpbXBsZVdpZGdldC5wcm90b3R5cGUuX2Rl
aW5pdCA9M0QgZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH07CisKKyAgU2ltcGxl
V2lkZ2V0LnJlZ2lzdGVyID0zRCBmdW5jdGlvbih3aWRnZXRfY2xhc3MsIHdpZGdldF9uYW1lKSB7
CisgICAgdmFyIGNhbGxGdW5jdGlvbiwgY3JlYXRlV2lkZ2V0LCBkZXN0cm95V2lkZ2V0LCBnZXRE
YXRhS2V5LCBnZXRXaWRnZXREYT0KdGE7CisgICAgZ2V0RGF0YUtleSA9M0QgZnVuY3Rpb24oKSB7
CisgICAgICByZXR1cm4gInNpbXBsZV93aWRnZXRfIiArIHdpZGdldF9uYW1lOworICAgIH07Cisg
ICAgZ2V0V2lkZ2V0RGF0YSA9M0QgZnVuY3Rpb24oZWwsIGRhdGFfa2V5KSB7CisgICAgICB2YXIg
d2lkZ2V0OworICAgICAgd2lkZ2V0ID0zRCAkLmRhdGEoZWwsIGRhdGFfa2V5KTsKKyAgICAgIGlm
ICh3aWRnZXQgJiYgKHdpZGdldCBpbnN0YW5jZW9mIFNpbXBsZVdpZGdldCkpIHsKKyAgICAgICAg
cmV0dXJuIHdpZGdldDsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgfQorICAgIH07CisgICAgY3JlYXRlV2lkZ2V0ID0zRCBmdW5jdGlvbigkZWwsIG9wdGlvbnMp
IHsKKyAgICAgIHZhciBkYXRhX2tleSwgZWwsIGV4aXN0aW5nX3dpZGdldCwgaSwgbGVuLCB3aWRn
ZXQ7CisgICAgICBkYXRhX2tleSA9M0QgZ2V0RGF0YUtleSgpOworICAgICAgZm9yIChpID0zRCAw
LCBsZW4gPTNEICRlbC5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworICAgICAgICBlbCA9M0QgJGVs
W2ldOworICAgICAgICBleGlzdGluZ193aWRnZXQgPTNEIGdldFdpZGdldERhdGEoZWwsIGRhdGFf
a2V5KTsKKyAgICAgICAgaWYgKCFleGlzdGluZ193aWRnZXQpIHsKKyAgICAgICAgICB3aWRnZXQg
PTNEIG5ldyB3aWRnZXRfY2xhc3MoZWwsIG9wdGlvbnMpOworICAgICAgICAgIGlmICghJC5kYXRh
KGVsLCBkYXRhX2tleSkpIHsKKyAgICAgICAgICAgICQuZGF0YShlbCwgZGF0YV9rZXksIHdpZGdl
dCk7CisgICAgICAgICAgfQorICAgICAgICAgIHdpZGdldC5faW5pdCgpOworICAgICAgICB9Cisg
ICAgICB9CisgICAgICByZXR1cm4gJGVsOworICAgIH07CisgICAgZGVzdHJveVdpZGdldCA9M0Qg
ZnVuY3Rpb24oJGVsKSB7CisgICAgICB2YXIgZGF0YV9rZXksIGVsLCBpLCBsZW4sIHJlc3VsdHMs
IHdpZGdldDsKKyAgICAgIGRhdGFfa2V5ID0zRCBnZXREYXRhS2V5KCk7CisgICAgICByZXN1bHRz
ID0zRCBbXTsKKyAgICAgIGZvciAoaSA9M0QgMCwgbGVuID0zRCAkZWwubGVuZ3RoOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgZWwgPTNEICRlbFtpXTsKKyAgICAgICAgd2lkZ2V0ID0zRCBnZXRX
aWRnZXREYXRhKGVsLCBkYXRhX2tleSk7CisgICAgICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAg
ICB3aWRnZXQuZGVzdHJveSgpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdHMucHVzaCgkLnJl
bW92ZURhdGEoZWwsIGRhdGFfa2V5KSk7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0czsK
KyAgICB9OworICAgIGNhbGxGdW5jdGlvbiA9M0QgZnVuY3Rpb24oJGVsLCBmdW5jdGlvbl9uYW1l
LCBhcmdzKSB7CisgICAgICB2YXIgZWwsIGksIGxlbiwgcmVzdWx0LCB3aWRnZXQsIHdpZGdldF9m
dW5jdGlvbjsKKyAgICAgIHJlc3VsdCA9M0QgbnVsbDsKKyAgICAgIGZvciAoaSA9M0QgMCwgbGVu
ID0zRCAkZWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgZWwgPTNEICRlbFtpXTsK
KyAgICAgICAgd2lkZ2V0ID0zRCAkLmRhdGEoZWwsIGdldERhdGFLZXkoKSk7CisgICAgICAgIGlm
ICh3aWRnZXQgJiYgKHdpZGdldCBpbnN0YW5jZW9mIFNpbXBsZVdpZGdldCkpIHsKKyAgICAgICAg
ICB3aWRnZXRfZnVuY3Rpb24gPTNEIHdpZGdldFtmdW5jdGlvbl9uYW1lXTsKKyAgICAgICAgICBp
ZiAod2lkZ2V0X2Z1bmN0aW9uICYmICh0eXBlb2Ygd2lkZ2V0X2Z1bmN0aW9uID0zRD0zRD0zRCAn
ZnVuY3RpPQpvbicpKSB7CisgICAgICAgICAgICByZXN1bHQgPTNEIHdpZGdldF9mdW5jdGlvbi5h
cHBseSh3aWRnZXQsIGFyZ3MpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHJldHVybiAkLmZuW3dpZGdldF9uYW1lXSA9
M0QgZnVuY3Rpb24oKSB7CisgICAgICB2YXIgJGVsLCBhcmdzLCBhcmd1bWVudDEsIGZ1bmN0aW9u
X25hbWUsIG9wdGlvbnM7CisgICAgICBhcmd1bWVudDEgPTNEIGFyZ3VtZW50c1swXSwgYXJncyA9
M0QgMiA8PTNEIGFyZ3VtZW50cy5sZW5ndGggPyBzbGljZT0KLmNhbGwoYXJndW1lbnRzLCAxKSA6
IFtdOworICAgICAgJGVsID0zRCB0aGlzOworICAgICAgaWYgKGFyZ3VtZW50MSA9M0Q9M0Q9M0Qg
dm9pZCAwIHx8IHR5cGVvZiBhcmd1bWVudDEgPTNEPTNEPTNEICdvYmplY3Q9CicpIHsKKyAgICAg
ICAgb3B0aW9ucyA9M0QgYXJndW1lbnQxOworICAgICAgICByZXR1cm4gY3JlYXRlV2lkZ2V0KCRl
bCwgb3B0aW9ucyk7CisgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudDEgPTNEPTNEPTNE
ICdzdHJpbmcnICYmIGFyZ3VtZW50MVswXSAhPTNEPQo9M0QgJ18nKSB7CisgICAgICAgIGZ1bmN0
aW9uX25hbWUgPTNEIGFyZ3VtZW50MTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uX25hbWUgPTNEPTNE
PTNEICdkZXN0cm95JykgeworICAgICAgICAgIHJldHVybiBkZXN0cm95V2lkZ2V0KCRlbCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25fbmFtZSA9M0Q9M0Q9M0QgJ2dldF93aWRnZXRfY2xh
c3MnKSB7CisgICAgICAgICAgcmV0dXJuIHdpZGdldF9jbGFzczsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICByZXR1cm4gY2FsbEZ1bmN0aW9uKCRlbCwgZnVuY3Rpb25fbmFtZSwgYXJncyk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OworICB9OworCisgIHJldHVybiBTaW1wbGVXaWRn
ZXQ7CisKK30pKCk7CisKK21vZHVsZS5leHBvcnRzID0zRCBTaW1wbGVXaWRnZXQ7CisKK30se31d
LDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK3ZhciAkLCBCb3JkZXJEcm9w
SGludCwgRHJhZ0FuZERyb3BIYW5kbGVyLCBEcmFnRWxlbWVudCwgRWxlbWVudHNSZW5kZXJlciwg
PQpGb2xkZXJFbGVtZW50LCBHaG9zdERyb3BIaW50LCBIaXRBcmVhc0dlbmVyYXRvciwgSnFUcmVl
V2lkZ2V0LCBLZXlIYW5kbGVyLCA9Ck1vdXNlV2lkZ2V0LCBOb2RlLCBOb2RlRWxlbWVudCwgUG9z
aXRpb24sIFNhdmVTdGF0ZUhhbmRsZXIsIFNjcm9sbEhhbmRsZXIsID0KU2VsZWN0Tm9kZUhhbmRs
ZXIsIFNpbXBsZVdpZGdldCwgX192ZXJzaW9uX18sIG5vZGVfbW9kdWxlLCByZWYsIHJlZjEsIHV0
aWxfPQptb2R1bGUsCisgIGV4dGVuZCA9M0QgZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3Ig
KHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcj0Kb3AuY2FsbChwYXJlbnQsIGtleSkpIGNo
aWxkW2tleV0gPTNEIHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuPQpjb25z
dHJ1Y3RvciA9M0QgY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPTNEIHBhcmVudC5wcm90b3R5cGU7
IGNoaWxkLnByb3RvdHk9CnBlID0zRCBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPTNEIHBh
cmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSwKKyAgaGFzUHJvcCA9M0Qge30uaGFzT3du
UHJvcGVydHk7CisKK19fdmVyc2lvbl9fID0zRCByZXF1aXJlKCcuL3ZlcnNpb24nKTsKKworcmVm
ID0zRCByZXF1aXJlKCcuL2RyYWdfYW5kX2Ryb3BfaGFuZGxlcicpLCBEcmFnQW5kRHJvcEhhbmRs
ZXIgPTNEIHJlZi5EcmE9CmdBbmREcm9wSGFuZGxlciwgRHJhZ0VsZW1lbnQgPTNEIHJlZi5EcmFn
RWxlbWVudCwgSGl0QXJlYXNHZW5lcmF0b3IgPTNEIHJlZj0KLkhpdEFyZWFzR2VuZXJhdG9yOwor
CitFbGVtZW50c1JlbmRlcmVyID0zRCByZXF1aXJlKCcuL2VsZW1lbnRzX3JlbmRlcmVyJyk7CisK
K0tleUhhbmRsZXIgPTNEIHJlcXVpcmUoJy4va2V5X2hhbmRsZXInKTsKKworTW91c2VXaWRnZXQg
PTNEIHJlcXVpcmUoJy4vbW91c2Uud2lkZ2V0Jyk7CisKK1NhdmVTdGF0ZUhhbmRsZXIgPTNEIHJl
cXVpcmUoJy4vc2F2ZV9zdGF0ZV9oYW5kbGVyJyk7CisKK1Njcm9sbEhhbmRsZXIgPTNEIHJlcXVp
cmUoJy4vc2Nyb2xsX2hhbmRsZXInKTsKKworU2VsZWN0Tm9kZUhhbmRsZXIgPTNEIHJlcXVpcmUo
Jy4vc2VsZWN0X25vZGVfaGFuZGxlcicpOworCitTaW1wbGVXaWRnZXQgPTNEIHJlcXVpcmUoJy4v
c2ltcGxlLndpZGdldCcpOworCitub2RlX21vZHVsZSA9M0QgcmVxdWlyZSgnLi9ub2RlJyk7CisK
K05vZGUgPTNEIG5vZGVfbW9kdWxlLk5vZGU7CisKK1Bvc2l0aW9uID0zRCBub2RlX21vZHVsZS5Q
b3NpdGlvbjsKKwordXRpbF9tb2R1bGUgPTNEIHJlcXVpcmUoJy4vdXRpbCcpOworCityZWYxID0z
RCByZXF1aXJlKCcuL25vZGVfZWxlbWVudCcpLCBCb3JkZXJEcm9wSGludCA9M0QgcmVmMS5Cb3Jk
ZXJEcm9wSGludD0KLCBGb2xkZXJFbGVtZW50ID0zRCByZWYxLkZvbGRlckVsZW1lbnQsIEdob3N0
RHJvcEhpbnQgPTNEIHJlZjEuR2hvc3REcm9wSGluPQp0LCBOb2RlRWxlbWVudCA9M0QgcmVmMS5O
b2RlRWxlbWVudDsKKworJCA9M0QgalF1ZXJ5OworCitKcVRyZWVXaWRnZXQgPTNEIChmdW5jdGlv
bihzdXBlckNsYXNzKSB7CisgIGV4dGVuZChKcVRyZWVXaWRnZXQsIHN1cGVyQ2xhc3MpOworCisg
IGZ1bmN0aW9uIEpxVHJlZVdpZGdldCgpIHsKKyAgICByZXR1cm4gSnFUcmVlV2lkZ2V0Ll9fc3Vw
ZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9CisKKyAgSnFUcmVl
V2lkZ2V0LnByb3RvdHlwZS5Cb3JkZXJEcm9wSGludCA9M0QgQm9yZGVyRHJvcEhpbnQ7CisKKyAg
SnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5EcmFnRWxlbWVudCA9M0QgRHJhZ0VsZW1lbnQ7CisKKyAg
SnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5EcmFnQW5kRHJvcEhhbmRsZXIgPTNEIERyYWdBbmREcm9w
SGFuZGxlcjsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLkVsZW1lbnRzUmVuZGVyZXIgPTNE
IEVsZW1lbnRzUmVuZGVyZXI7CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5HaG9zdERyb3BI
aW50ID0zRCBHaG9zdERyb3BIaW50OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuSGl0QXJl
YXNHZW5lcmF0b3IgPTNEIEhpdEFyZWFzR2VuZXJhdG9yOworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUuTm9kZSA9M0QgTm9kZTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLlNhdmVTdGF0
ZUhhbmRsZXIgPTNEIFNhdmVTdGF0ZUhhbmRsZXI7CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlw
ZS5TY3JvbGxIYW5kbGVyID0zRCBTY3JvbGxIYW5kbGVyOworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUuU2VsZWN0Tm9kZUhhbmRsZXIgPTNEIFNlbGVjdE5vZGVIYW5kbGVyOworCisgIEpxVHJl
ZVdpZGdldC5wcm90b3R5cGUuZGVmYXVsdHMgPTNEIHsKKyAgICBhdXRvT3BlbjogZmFsc2UsCisg
ICAgc2F2ZVN0YXRlOiBmYWxzZSwKKyAgICBkcmFnQW5kRHJvcDogZmFsc2UsCisgICAgc2VsZWN0
YWJsZTogdHJ1ZSwKKyAgICB1c2VDb250ZXh0TWVudTogdHJ1ZSwKKyAgICBvbkNhblNlbGVjdE5v
ZGU6IG51bGwsCisgICAgb25TZXRTdGF0ZUZyb21TdG9yYWdlOiBudWxsLAorICAgIG9uR2V0U3Rh
dGVGcm9tU3RvcmFnZTogbnVsbCwKKyAgICBvbkNyZWF0ZUxpOiBudWxsLAorICAgIG9uSXNNb3Zl
SGFuZGxlOiBudWxsLAorICAgIG9uQ2FuTW92ZTogbnVsbCwKKyAgICBvbkNhbk1vdmVUbzogbnVs
bCwKKyAgICBvbkxvYWRGYWlsZWQ6IG51bGwsCisgICAgYXV0b0VzY2FwZTogdHJ1ZSwKKyAgICBk
YXRhVXJsOiBudWxsLAorICAgIGNsb3NlZEljb246IG51bGwsCisgICAgb3BlbmVkSWNvbjogJyYj
eDI1YmM7JywKKyAgICBzbGlkZTogdHJ1ZSwKKyAgICBub2RlQ2xhc3M6IE5vZGUsCisgICAgZGF0
YUZpbHRlcjogbnVsbCwKKyAgICBrZXlib2FyZFN1cHBvcnQ6IHRydWUsCisgICAgb3BlbkZvbGRl
ckRlbGF5OiA1MDAsCisgICAgcnRsOiBudWxsLAorICAgIG9uRHJhZ01vdmU6IG51bGwsCisgICAg
b25EcmFnU3RvcDogbnVsbCwKKyAgICBidXR0b25MZWZ0OiB0cnVlLAorICAgIG9uTG9hZGluZzog
bnVsbAorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUudG9nZ2xlID0zRCBmdW5jdGlv
bihub2RlLCBzbGlkZSkgeworICAgIGlmIChzbGlkZSA9M0Q9M0QgbnVsbCkgeworICAgICAgc2xp
ZGUgPTNEIG51bGw7CisgICAgfQorICAgIGlmIChzbGlkZSA9M0Q9M0Q9M0QgbnVsbCkgeworICAg
ICAgc2xpZGUgPTNEIHRoaXMub3B0aW9ucy5zbGlkZTsKKyAgICB9CisgICAgaWYgKG5vZGUuaXNf
b3BlbikgeworICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgc2xpZGUpOworICAgIH0gZWxzZSB7
CisgICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIHNsaWRlKTsKKyAgICB9CisgICAgcmV0dXJuIHRo
aXMuZWxlbWVudDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmdldFRyZWUgPTNE
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLnRyZWU7CisgIH07CisKKyAgSnFUcmVlV2lk
Z2V0LnByb3RvdHlwZS5zZWxlY3ROb2RlID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAgdGhpcy5f
c2VsZWN0Tm9kZShub2RlLCBmYWxzZSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgfTsK
KworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9zZWxlY3ROb2RlID0zRCBmdW5jdGlvbihub2Rl
LCBtdXN0X3RvZ2dsZSkgeworICAgIHZhciBjYW5TZWxlY3QsIGRlc2VsZWN0ZWRfbm9kZSwgb3Bl
blBhcmVudHMsIHNhdmVTdGF0ZTsKKyAgICBpZiAobXVzdF90b2dnbGUgPTNEPTNEIG51bGwpIHsK
KyAgICAgIG11c3RfdG9nZ2xlID0zRCBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF0aGlzLnNlbGVj
dF9ub2RlX2hhbmRsZXIpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FuU2VsZWN0ID0z
RCAoZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAg
aWYgKF90aGlzLm9wdGlvbnMub25DYW5TZWxlY3ROb2RlKSB7CisgICAgICAgICAgcmV0dXJuIF90
aGlzLm9wdGlvbnMuc2VsZWN0YWJsZSAmJiBfdGhpcy5vcHRpb25zLm9uQ2FuU2VsZWN0Tm9kZT0K
KG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBfdGhpcy5vcHRpb25z
LnNlbGVjdGFibGU7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgb3Bl
blBhcmVudHMgPTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkg
eworICAgICAgICB2YXIgcGFyZW50OworICAgICAgICBwYXJlbnQgPTNEIG5vZGUucGFyZW50Owor
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5wYXJlbnQgJiYgIXBhcmVudC5pc19vcGVuKSB7
CisgICAgICAgICAgcmV0dXJuIF90aGlzLm9wZW5Ob2RlKHBhcmVudCwgZmFsc2UpOworICAgICAg
ICB9CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAgIHNhdmVTdGF0ZSA9M0QgKGZ1bmN0aW9u
KF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChfdGhpcy5v
cHRpb25zLnNhdmVTdGF0ZSkgeworICAgICAgICAgIHJldHVybiBfdGhpcy5zYXZlX3N0YXRlX2hh
bmRsZXIuc2F2ZVN0YXRlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSkodGhpcyk7Cisg
ICAgaWYgKCFub2RlKSB7CisgICAgICB0aGlzLl9kZXNlbGVjdEN1cnJlbnROb2RlKCk7CisgICAg
ICBzYXZlU3RhdGUoKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFjYW5TZWxlY3Qo
KSkgeworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGhpcy5zZWxlY3Rfbm9kZV9oYW5k
bGVyLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7CisgICAgICBpZiAobXVzdF90b2dnbGUpIHsKKyAg
ICAgICAgdGhpcy5fZGVzZWxlY3RDdXJyZW50Tm9kZSgpOworICAgICAgICB0aGlzLl90cmlnZ2Vy
RXZlbnQoJ3RyZWUuc2VsZWN0JywgeworICAgICAgICAgIG5vZGU6IG51bGwsCisgICAgICAgICAg
cHJldmlvdXNfbm9kZTogbm9kZQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgZGVzZWxlY3RlZF9ub2RlID0zRCB0aGlzLmdldFNlbGVjdGVkTm9kZSgpOworICAgICAg
dGhpcy5fZGVzZWxlY3RDdXJyZW50Tm9kZSgpOworICAgICAgdGhpcy5hZGRUb1NlbGVjdGlvbihu
b2RlKTsKKyAgICAgIHRoaXMuX3RyaWdnZXJFdmVudCgndHJlZS5zZWxlY3QnLCB7CisgICAgICAg
IG5vZGU6IG5vZGUsCisgICAgICAgIGRlc2VsZWN0ZWRfbm9kZTogZGVzZWxlY3RlZF9ub2RlCisg
ICAgICB9KTsKKyAgICAgIG9wZW5QYXJlbnRzKCk7CisgICAgfQorICAgIHJldHVybiBzYXZlU3Rh
dGUoKTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmdldFNlbGVjdGVkTm9kZSA9
M0QgZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMuc2VsZWN0X25vZGVfaGFuZGxlcikgeworICAg
ICAgcmV0dXJuIHRoaXMuc2VsZWN0X25vZGVfaGFuZGxlci5nZXRTZWxlY3RlZE5vZGUoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9OworCisgIEpxVHJlZVdp
ZGdldC5wcm90b3R5cGUudG9Kc29uID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gSlNPTi5z
dHJpbmdpZnkodGhpcy50cmVlLmdldERhdGEoKSk7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnBy
b3RvdHlwZS5sb2FkRGF0YSA9M0QgZnVuY3Rpb24oZGF0YSwgcGFyZW50X25vZGUpIHsKKyAgICB0
aGlzLl9sb2FkRGF0YShkYXRhLCBwYXJlbnRfbm9kZSk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVu
dDsKKyAgfTsKKworCisgIC8qCisgIHNpZ25hdHVyZXM6CisgIC0gbG9hZERhdGFGcm9tVXJsKHVy
bCwgcGFyZW50X25vZGU9M0RudWxsLCBvbl9maW5pc2hlZD0zRG51bGwpCisgICAgICBsb2FkRGF0
YUZyb21VcmwoJy9teV9kYXRhJyk7CisgICAgICBsb2FkRGF0YUZyb21VcmwoJy9teV9kYXRhJywg
bm9kZTEpOworICAgICAgbG9hZERhdGFGcm9tVXJsKCcvbXlfZGF0YScsIG5vZGUxLCBmdW5jdGlv
bigpIHsgY29uc29sZS5sb2coJ2ZpbmlzaGU9CmQnKTsgfSk7CisgICAgICBsb2FkRGF0YUZyb21V
cmwoJy9teV9kYXRhJywgbnVsbCwgZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdmaW5pc2hlZD0K
Jyk7IH0pOworID0yMAorICAtIGxvYWREYXRhRnJvbVVybChwYXJlbnRfbm9kZT0zRG51bGwsIG9u
X2ZpbmlzaGVkPTNEbnVsbCkKKyAgICAgIGxvYWREYXRhRnJvbVVybCgpOworICAgICAgbG9hZERh
dGFGcm9tVXJsKG5vZGUxKTsKKyAgICAgIGxvYWREYXRhRnJvbVVybChudWxsLCBmdW5jdGlvbigp
IHsgY29uc29sZS5sb2coJ2ZpbmlzaGVkJyk7IH0pOworICAgICAgbG9hZERhdGFGcm9tVXJsKG5v
ZGUxLCBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ZpbmlzaGVkJyk7IH0pOworICAgKi8KKwor
ICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmxvYWREYXRhRnJvbVVybCA9M0QgZnVuY3Rpb24ocGFy
YW0xLCBwYXJhbTIsIHBhcmE9Cm0zKSB7CisgICAgaWYgKCQudHlwZShwYXJhbTEpID0zRD0zRD0z
RCAnc3RyaW5nJykgeworICAgICAgdGhpcy5fbG9hZERhdGFGcm9tVXJsKHBhcmFtMSwgcGFyYW0y
LCBwYXJhbTMpOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLl9sb2FkRGF0YUZyb21VcmwobnVs
bCwgcGFyYW0xLCBwYXJhbTIpOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICB9
OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUucmVsb2FkID0zRCBmdW5jdGlvbihvbl9maW5p
c2hlZCkgeworICAgIHRoaXMuX2xvYWREYXRhRnJvbVVybChudWxsLCBudWxsLCBvbl9maW5pc2hl
ZCk7CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJv
dG90eXBlLl9sb2FkRGF0YUZyb21VcmwgPTNEIGZ1bmN0aW9uKHVybF9pbmZvLCBwYXJlbnRfbm89
CmRlLCBvbl9maW5pc2hlZCkgeworICAgIHZhciAkZWwsIGFkZExvYWRpbmdDbGFzcywgaGFuZGVM
b2FkRGF0YSwgaGFuZGxlRXJyb3IsIGhhbmRsZVN1Y2Nlc3MsIGw9Cm9hZERhdGFGcm9tVXJsSW5m
bywgcGFyc2VVcmxJbmZvLCByZW1vdmVMb2FkaW5nQ2xhc3M7CisgICAgJGVsID0zRCBudWxsOwor
ICAgIGFkZExvYWRpbmdDbGFzcyA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4g
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmIChwYXJlbnRfbm9kZSkgeworICAgICAgICAgICRlbCA9
M0QgJChwYXJlbnRfbm9kZS5lbGVtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAk
ZWwgPTNEIF90aGlzLmVsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgJGVsLmFkZENsYXNzKCdq
cXRyZWUtbG9hZGluZycpOworICAgICAgICByZXR1cm4gX3RoaXMuX25vdGlmeUxvYWRpbmcodHJ1
ZSwgcGFyZW50X25vZGUsICRlbCk7CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAgIHJlbW92
ZUxvYWRpbmdDbGFzcyA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICgkZWwpIHsKKyAgICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoJ2px
dHJlZS1sb2FkaW5nJyk7CisgICAgICAgICAgcmV0dXJuIF90aGlzLl9ub3RpZnlMb2FkaW5nKGZh
bHNlLCBwYXJlbnRfbm9kZSwgJGVsKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICB9KSh0aGlz
KTsKKyAgICBwYXJzZVVybEluZm8gPTNEIGZ1bmN0aW9uKCkgeworICAgICAgaWYgKCQudHlwZSh1
cmxfaW5mbykgPTNEPTNEPTNEICdzdHJpbmcnKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgdXJsOiB1cmxfaW5mbworICAgICAgICB9OworICAgICAgfQorICAgICAgaWYgKCF1cmxfaW5m
by5tZXRob2QpIHsKKyAgICAgICAgdXJsX2luZm8ubWV0aG9kID0zRCAnZ2V0JzsKKyAgICAgIH0K
KyAgICAgIHJldHVybiB1cmxfaW5mbzsKKyAgICB9OworICAgIGhhbmRlTG9hZERhdGEgPTNEIChm
dW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAg
cmVtb3ZlTG9hZGluZ0NsYXNzKCk7CisgICAgICAgIF90aGlzLl9sb2FkRGF0YShkYXRhLCBwYXJl
bnRfbm9kZSk7CisgICAgICAgIGlmIChvbl9maW5pc2hlZCAmJiAkLmlzRnVuY3Rpb24ob25fZmlu
aXNoZWQpKSB7CisgICAgICAgICAgcmV0dXJuIG9uX2ZpbmlzaGVkKCk7CisgICAgICAgIH0KKyAg
ICAgIH07CisgICAgfSkodGhpcyk7CisgICAgaGFuZGxlU3VjY2VzcyA9M0QgKGZ1bmN0aW9uKF90
aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgdmFyIGRh
dGE7CisgICAgICAgIGlmICgkLmlzQXJyYXkocmVzcG9uc2UpIHx8IHR5cGVvZiByZXNwb25zZSA9
M0Q9M0Q9M0QgJ29iamVjdCcpIHsKKyAgICAgICAgICBkYXRhID0zRCByZXNwb25zZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChkYXRhICE9M0QgbnVsbCkgeworICAgICAgICAgIGRhdGEgPTNEICQucGFy
c2VKU09OKHJlc3BvbnNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBkYXRhID0zRCBb
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5kYXRhRmlsdGVyKSB7Cisg
ICAgICAgICAgZGF0YSA9M0QgX3RoaXMub3B0aW9ucy5kYXRhRmlsdGVyKGRhdGEpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBoYW5kZUxvYWREYXRhKGRhdGEpOworICAgICAgfTsKKyAgICB9
KSh0aGlzKTsKKyAgICBoYW5kbGVFcnJvciA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICBy
ZXR1cm4gZnVuY3Rpb24ocmVzcG9uc2UpIHsKKyAgICAgICAgcmVtb3ZlTG9hZGluZ0NsYXNzKCk7
CisgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLm9uTG9hZEZhaWxlZCkgeworICAgICAgICAgIHJl
dHVybiBfdGhpcy5vcHRpb25zLm9uTG9hZEZhaWxlZChyZXNwb25zZSk7CisgICAgICAgIH0KKyAg
ICAgIH07CisgICAgfSkodGhpcyk7CisgICAgbG9hZERhdGFGcm9tVXJsSW5mbyA9M0QgZnVuY3Rp
b24oKSB7CisgICAgICB1cmxfaW5mbyA9M0QgcGFyc2VVcmxJbmZvKCk7CisgICAgICByZXR1cm4g
JC5hamF4KCQuZXh0ZW5kKHt9LCB1cmxfaW5mbywgeworICAgICAgICBtZXRob2Q6IHVybF9pbmZv
Lm1ldGhvZCAhPTNEIG51bGwgPyB1cmxfaW5mby5tZXRob2QudG9VcHBlckNhc2UoKSA9CjogJ0dF
VCcsCisgICAgICAgIGNhY2hlOiBmYWxzZSwKKyAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKKyAg
ICAgICAgc3VjY2VzczogaGFuZGxlU3VjY2VzcywKKyAgICAgICAgZXJyb3I6IGhhbmRsZUVycm9y
CisgICAgICB9KSk7CisgICAgfTsKKyAgICBpZiAoIXVybF9pbmZvKSB7CisgICAgICB1cmxfaW5m
byA9M0QgdGhpcy5fZ2V0RGF0YVVybEluZm8ocGFyZW50X25vZGUpOworICAgIH0KKyAgICBhZGRM
b2FkaW5nQ2xhc3MoKTsKKyAgICBpZiAoIXVybF9pbmZvKSB7CisgICAgICByZW1vdmVMb2FkaW5n
Q2xhc3MoKTsKKyAgICB9IGVsc2UgaWYgKCQuaXNBcnJheSh1cmxfaW5mbykpIHsKKyAgICAgIGhh
bmRlTG9hZERhdGEodXJsX2luZm8pOworICAgIH0gZWxzZSB7CisgICAgICBsb2FkRGF0YUZyb21V
cmxJbmZvKCk7CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2xvYWRE
YXRhID0zRCBmdW5jdGlvbihkYXRhLCBwYXJlbnRfbm9kZSkgeworICAgIHZhciBkZXNlbGVjdE5v
ZGVzLCBsb2FkU3VidHJlZTsKKyAgICBpZiAocGFyZW50X25vZGUgPTNEPTNEIG51bGwpIHsKKyAg
ICAgIHBhcmVudF9ub2RlID0zRCBudWxsOworICAgIH0KKyAgICBkZXNlbGVjdE5vZGVzID0zRCAo
ZnVuY3Rpb24oX3RoaXMpIHsKKyAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy
IGksIGxlbiwgbiwgc2VsZWN0ZWRfbm9kZXNfdW5kZXJfcGFyZW50OworICAgICAgICBpZiAoX3Ro
aXMuc2VsZWN0X25vZGVfaGFuZGxlcikgeworICAgICAgICAgIHNlbGVjdGVkX25vZGVzX3VuZGVy
X3BhcmVudCA9M0QgX3RoaXMuc2VsZWN0X25vZGVfaGFuZGxlci5nZXRTZWw9CmVjdGVkTm9kZXNV
bmRlcihwYXJlbnRfbm9kZSk7CisgICAgICAgICAgZm9yIChpID0zRCAwLCBsZW4gPTNEIHNlbGVj
dGVkX25vZGVzX3VuZGVyX3BhcmVudC5sZW5ndGg7IGkgPCBsZT0KbjsgaSsrKSB7CisgICAgICAg
ICAgICBuID0zRCBzZWxlY3RlZF9ub2Rlc191bmRlcl9wYXJlbnRbaV07CisgICAgICAgICAgICBf
dGhpcy5zZWxlY3Rfbm9kZV9oYW5kbGVyLnJlbW92ZUZyb21TZWxlY3Rpb24obik7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgICAgfTsKKyAgICB9KSh0
aGlzKTsKKyAgICBsb2FkU3VidHJlZSA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1
cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHBhcmVudF9ub2RlLmxvYWRGcm9tRGF0YShkYXRhKTsK
KyAgICAgICAgcGFyZW50X25vZGUubG9hZF9vbl9kZW1hbmQgPTNEIGZhbHNlOworICAgICAgICBw
YXJlbnRfbm9kZS5pc19sb2FkaW5nID0zRCBmYWxzZTsKKyAgICAgICAgcmV0dXJuIF90aGlzLl9y
ZWZyZXNoRWxlbWVudHMocGFyZW50X25vZGUpOworICAgICAgfTsKKyAgICB9KSh0aGlzKTsKKyAg
ICBpZiAoIWRhdGEpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGhpcy5fdHJpZ2dlckV2
ZW50KCd0cmVlLmxvYWRfZGF0YScsIHsKKyAgICAgIHRyZWVfZGF0YTogZGF0YQorICAgIH0pOwor
ICAgIGlmICghcGFyZW50X25vZGUpIHsKKyAgICAgIHRoaXMuX2luaXRUcmVlKGRhdGEpOworICAg
IH0gZWxzZSB7CisgICAgICBkZXNlbGVjdE5vZGVzKCk7CisgICAgICBsb2FkU3VidHJlZSgpOwor
ICAgIH0KKyAgICBpZiAodGhpcy5pc0RyYWdnaW5nKCkpIHsKKyAgICAgIHJldHVybiB0aGlzLmRu
ZF9oYW5kbGVyLnJlZnJlc2goKTsKKyAgICB9CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3Rv
dHlwZS5nZXROb2RlQnlJZCA9M0QgZnVuY3Rpb24obm9kZV9pZCkgeworICAgIHJldHVybiB0aGlz
LnRyZWUuZ2V0Tm9kZUJ5SWQobm9kZV9pZCk7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3Rv
dHlwZS5nZXROb2RlQnlOYW1lID0zRCBmdW5jdGlvbihuYW1lKSB7CisgICAgcmV0dXJuIHRoaXMu
dHJlZS5nZXROb2RlQnlOYW1lKG5hbWUpOworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5
cGUuZ2V0Tm9kZXNCeVByb3BlcnR5ID0zRCBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgcmV0
dXJuIHRoaXMudHJlZS5nZXROb2Rlc0J5UHJvcGVydHkoa2V5LCB2YWx1ZSk7CisgIH07CisKKyAg
SnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5vcGVuTm9kZSA9M0QgZnVuY3Rpb24obm9kZSwgc2xpZGUp
IHsKKyAgICBpZiAoc2xpZGUgPTNEPTNEIG51bGwpIHsKKyAgICAgIHNsaWRlID0zRCBudWxsOwor
ICAgIH0KKyAgICBpZiAoc2xpZGUgPTNEPTNEPTNEIG51bGwpIHsKKyAgICAgIHNsaWRlID0zRCB0
aGlzLm9wdGlvbnMuc2xpZGU7CisgICAgfQorICAgIHRoaXMuX29wZW5Ob2RlKG5vZGUsIHNsaWRl
KTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUuX29wZW5Ob2RlID0zRCBmdW5jdGlvbihub2RlLCBzbGlkZSwgb25fZmluaXNoZWQpIHsK
KyAgICB2YXIgZG9PcGVuTm9kZSwgcGFyZW50OworICAgIGlmIChzbGlkZSA9M0Q9M0QgbnVsbCkg
eworICAgICAgc2xpZGUgPTNEIHRydWU7CisgICAgfQorICAgIGRvT3Blbk5vZGUgPTNEIChmdW5j
dGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKF9ub2RlLCBfc2xpZGUsIF9vbl9m
aW5pc2hlZCkgeworICAgICAgICB2YXIgZm9sZGVyX2VsZW1lbnQ7CisgICAgICAgIGZvbGRlcl9l
bGVtZW50ID0zRCBuZXcgRm9sZGVyRWxlbWVudChfbm9kZSwgX3RoaXMpOworICAgICAgICByZXR1
cm4gZm9sZGVyX2VsZW1lbnQub3Blbihfb25fZmluaXNoZWQsIF9zbGlkZSk7CisgICAgICB9Owor
ICAgIH0pKHRoaXMpOworICAgIGlmIChub2RlLmlzRm9sZGVyKCkpIHsKKyAgICAgIGlmIChub2Rl
LmxvYWRfb25fZGVtYW5kKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9sb2FkRm9sZGVyT25EZW1h
bmQobm9kZSwgc2xpZGUsIG9uX2ZpbmlzaGVkKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHBh
cmVudCA9M0Qgbm9kZS5wYXJlbnQ7CisgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKKyAgICAgICAg
ICBpZiAocGFyZW50LnBhcmVudCkgeworICAgICAgICAgICAgZG9PcGVuTm9kZShwYXJlbnQsIGZh
bHNlLCBudWxsKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcGFyZW50ID0zRCBwYXJlbnQucGFy
ZW50OworICAgICAgICB9CisgICAgICAgIGRvT3Blbk5vZGUobm9kZSwgc2xpZGUsIG9uX2Zpbmlz
aGVkKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVTdGF0ZSgpOworICAgICAgfQorICAgIH0K
KyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9sb2FkRm9sZGVyT25EZW1hbmQgPTNE
IGZ1bmN0aW9uKG5vZGUsIHNsaWRlLCBvbl89CmZpbmlzaGVkKSB7CisgICAgaWYgKHNsaWRlID0z
RD0zRCBudWxsKSB7CisgICAgICBzbGlkZSA9M0QgdHJ1ZTsKKyAgICB9CisgICAgbm9kZS5pc19s
b2FkaW5nID0zRCB0cnVlOworICAgIHJldHVybiB0aGlzLl9sb2FkRGF0YUZyb21VcmwobnVsbCwg
bm9kZSwgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBfdGhpcy5fb3Blbk5vZGUobm9kZSwgc2xpZGUsIG9uX2ZpbmlzaGVkKTsKKyAg
ICAgIH07CisgICAgfSkodGhpcykpOworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUu
Y2xvc2VOb2RlID0zRCBmdW5jdGlvbihub2RlLCBzbGlkZSkgeworICAgIGlmIChzbGlkZSA9M0Q9
M0QgbnVsbCkgeworICAgICAgc2xpZGUgPTNEIG51bGw7CisgICAgfQorICAgIGlmIChzbGlkZSA9
M0Q9M0Q9M0QgbnVsbCkgeworICAgICAgc2xpZGUgPTNEIHRoaXMub3B0aW9ucy5zbGlkZTsKKyAg
ICB9CisgICAgaWYgKG5vZGUuaXNGb2xkZXIoKSkgeworICAgICAgbmV3IEZvbGRlckVsZW1lbnQo
bm9kZSwgdGhpcykuY2xvc2Uoc2xpZGUpOworICAgICAgdGhpcy5fc2F2ZVN0YXRlKCk7CisgICAg
fQorICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3Rv
dHlwZS5pc0RyYWdnaW5nID0zRCBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5kbmRfaGFuZGxl
cikgeworICAgICAgcmV0dXJuIHRoaXMuZG5kX2hhbmRsZXIuaXNfZHJhZ2dpbmc7CisgICAgfSBl
bHNlIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0
LnByb3RvdHlwZS5yZWZyZXNoSGl0QXJlYXMgPTNEIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuZG5k
X2hhbmRsZXIucmVmcmVzaCgpOworICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgIH07CisKKyAg
SnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5hZGROb2RlQWZ0ZXIgPTNEIGZ1bmN0aW9uKG5ld19ub2Rl
X2luZm8sIGV4aXN0aW5nPQpfbm9kZSkgeworICAgIHZhciBuZXdfbm9kZTsKKyAgICBuZXdfbm9k
ZSA9M0QgZXhpc3Rpbmdfbm9kZS5hZGRBZnRlcihuZXdfbm9kZV9pbmZvKTsKKyAgICB0aGlzLl9y
ZWZyZXNoRWxlbWVudHMoZXhpc3Rpbmdfbm9kZS5wYXJlbnQpOworICAgIHJldHVybiBuZXdfbm9k
ZTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmFkZE5vZGVCZWZvcmUgPTNEIGZ1
bmN0aW9uKG5ld19ub2RlX2luZm8sIGV4aXN0aW49Cmdfbm9kZSkgeworICAgIHZhciBuZXdfbm9k
ZTsKKyAgICBuZXdfbm9kZSA9M0QgZXhpc3Rpbmdfbm9kZS5hZGRCZWZvcmUobmV3X25vZGVfaW5m
byk7CisgICAgdGhpcy5fcmVmcmVzaEVsZW1lbnRzKGV4aXN0aW5nX25vZGUucGFyZW50KTsKKyAg
ICByZXR1cm4gbmV3X25vZGU7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5hZGRQ
YXJlbnROb2RlID0zRCBmdW5jdGlvbihuZXdfbm9kZV9pbmZvLCBleGlzdGluPQpnX25vZGUpIHsK
KyAgICB2YXIgbmV3X25vZGU7CisgICAgbmV3X25vZGUgPTNEIGV4aXN0aW5nX25vZGUuYWRkUGFy
ZW50KG5ld19ub2RlX2luZm8pOworICAgIHRoaXMuX3JlZnJlc2hFbGVtZW50cyhuZXdfbm9kZS5w
YXJlbnQpOworICAgIHJldHVybiBuZXdfbm9kZTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJv
dG90eXBlLnJlbW92ZU5vZGUgPTNEIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICB2YXIgcGFyZW50Owor
ICAgIHBhcmVudCA9M0Qgbm9kZS5wYXJlbnQ7CisgICAgaWYgKHBhcmVudCkgeworICAgICAgdGhp
cy5zZWxlY3Rfbm9kZV9oYW5kbGVyLnJlbW92ZUZyb21TZWxlY3Rpb24obm9kZSwgdHJ1ZSk7Cisg
ICAgICBub2RlLnJlbW92ZSgpOworICAgICAgdGhpcy5fcmVmcmVzaEVsZW1lbnRzKHBhcmVudCk7
CisgICAgfQorICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0
LnByb3RvdHlwZS5hcHBlbmROb2RlID0zRCBmdW5jdGlvbihuZXdfbm9kZV9pbmZvLCBwYXJlbnRf
bm9kPQplKSB7CisgICAgdmFyIG5vZGU7CisgICAgcGFyZW50X25vZGUgPTNEIHBhcmVudF9ub2Rl
IHx8IHRoaXMudHJlZTsKKyAgICBub2RlID0zRCBwYXJlbnRfbm9kZS5hcHBlbmQobmV3X25vZGVf
aW5mbyk7CisgICAgdGhpcy5fcmVmcmVzaEVsZW1lbnRzKHBhcmVudF9ub2RlKTsKKyAgICByZXR1
cm4gbm9kZTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLnByZXBlbmROb2RlID0z
RCBmdW5jdGlvbihuZXdfbm9kZV9pbmZvLCBwYXJlbnRfbm89CmRlKSB7CisgICAgdmFyIG5vZGU7
CisgICAgaWYgKCFwYXJlbnRfbm9kZSkgeworICAgICAgcGFyZW50X25vZGUgPTNEIHRoaXMudHJl
ZTsKKyAgICB9CisgICAgbm9kZSA9M0QgcGFyZW50X25vZGUucHJlcGVuZChuZXdfbm9kZV9pbmZv
KTsKKyAgICB0aGlzLl9yZWZyZXNoRWxlbWVudHMocGFyZW50X25vZGUpOworICAgIHJldHVybiBu
b2RlOworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUudXBkYXRlTm9kZSA9M0QgZnVu
Y3Rpb24obm9kZSwgZGF0YSkgeworICAgIHZhciBpZF9pc19jaGFuZ2VkOworICAgIGlkX2lzX2No
YW5nZWQgPTNEIGRhdGEuaWQgJiYgZGF0YS5pZCAhPTNEPTNEIG5vZGUuaWQ7CisgICAgaWYgKGlk
X2lzX2NoYW5nZWQpIHsKKyAgICAgIHRoaXMudHJlZS5yZW1vdmVOb2RlRnJvbUluZGV4KG5vZGUp
OworICAgIH0KKyAgICBub2RlLnNldERhdGEoZGF0YSk7CisgICAgaWYgKGlkX2lzX2NoYW5nZWQp
IHsKKyAgICAgIHRoaXMudHJlZS5hZGROb2RlVG9JbmRleChub2RlKTsKKyAgICB9CisgICAgaWYg
KHR5cGVvZiBkYXRhID0zRD0zRD0zRCAnb2JqZWN0JyAmJiBkYXRhLmNoaWxkcmVuICYmIGRhdGEu
Y2hpbGRyZW4ubD0KZW5ndGgpIHsKKyAgICAgIG5vZGUucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAg
IG5vZGUubG9hZEZyb21EYXRhKGRhdGEuY2hpbGRyZW4pOworICAgIH0KKyAgICB0aGlzLnJlbmRl
cmVyLnJlbmRlckZyb21Ob2RlKG5vZGUpOworICAgIHRoaXMuX3NlbGVjdEN1cnJlbnROb2RlKCk7
CisgICAgcmV0dXJuIHRoaXMuZWxlbWVudDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90
eXBlLm1vdmVOb2RlID0zRCBmdW5jdGlvbihub2RlLCB0YXJnZXRfbm9kZSwgcG9zaXRpb249Cikg
eworICAgIHZhciBwb3NpdGlvbl9pbmRleDsKKyAgICBwb3NpdGlvbl9pbmRleCA9M0QgUG9zaXRp
b24ubmFtZVRvSW5kZXgocG9zaXRpb24pOworICAgIHRoaXMudHJlZS5tb3ZlTm9kZShub2RlLCB0
YXJnZXRfbm9kZSwgcG9zaXRpb25faW5kZXgpOworICAgIHRoaXMuX3JlZnJlc2hFbGVtZW50cygp
OworICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3Rv
dHlwZS5nZXRTdGF0ZUZyb21TdG9yYWdlID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhp
cy5zYXZlX3N0YXRlX2hhbmRsZXIuZ2V0U3RhdGVGcm9tU3RvcmFnZSgpOworICB9OworCisgIEpx
VHJlZVdpZGdldC5wcm90b3R5cGUuYWRkVG9TZWxlY3Rpb24gPTNEIGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICBpZiAobm9kZSkgeworICAgICAgdGhpcy5zZWxlY3Rfbm9kZV9oYW5kbGVyLmFkZFRvU2Vs
ZWN0aW9uKG5vZGUpOworICAgICAgdGhpcy5fZ2V0Tm9kZUVsZW1lbnRGb3JOb2RlKG5vZGUpLnNl
bGVjdCgpOworICAgICAgdGhpcy5fc2F2ZVN0YXRlKCk7CisgICAgfQorICAgIHJldHVybiB0aGlz
LmVsZW1lbnQ7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5nZXRTZWxlY3RlZE5v
ZGVzID0zRCBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zZWxlY3Rfbm9kZV9oYW5kbGVy
LmdldFNlbGVjdGVkTm9kZXMoKTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmlz
Tm9kZVNlbGVjdGVkID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAgcmV0dXJuIHRoaXMuc2VsZWN0
X25vZGVfaGFuZGxlci5pc05vZGVTZWxlY3RlZChub2RlKTsKKyAgfTsKKworICBKcVRyZWVXaWRn
ZXQucHJvdG90eXBlLnJlbW92ZUZyb21TZWxlY3Rpb24gPTNEIGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICB0aGlzLnNlbGVjdF9ub2RlX2hhbmRsZXIucmVtb3ZlRnJvbVNlbGVjdGlvbihub2RlKTsKKyAg
ICB0aGlzLl9nZXROb2RlRWxlbWVudEZvck5vZGUobm9kZSkuZGVzZWxlY3QoKTsKKyAgICB0aGlz
Ll9zYXZlU3RhdGUoKTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICB9OworCisgIEpxVHJl
ZVdpZGdldC5wcm90b3R5cGUuc2Nyb2xsVG9Ob2RlID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAg
dmFyICRlbGVtZW50LCB0b3A7CisgICAgJGVsZW1lbnQgPTNEICQobm9kZS5lbGVtZW50KTsKKyAg
ICB0b3AgPTNEICRlbGVtZW50Lm9mZnNldCgpLnRvcCAtIHRoaXMuJGVsLm9mZnNldCgpLnRvcDsK
KyAgICB0aGlzLnNjcm9sbF9oYW5kbGVyLnNjcm9sbFRvKHRvcCk7CisgICAgcmV0dXJuIHRoaXMu
ZWxlbWVudDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLmdldFN0YXRlID0zRCBm
dW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5zYXZlX3N0YXRlX2hhbmRsZXIuZ2V0U3RhdGUo
KTsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLnNldFN0YXRlID0zRCBmdW5jdGlv
bihzdGF0ZSkgeworICAgIHRoaXMuc2F2ZV9zdGF0ZV9oYW5kbGVyLnNldEluaXRpYWxTdGF0ZShz
dGF0ZSk7CisgICAgdGhpcy5fcmVmcmVzaEVsZW1lbnRzKCk7CisgICAgcmV0dXJuIHRoaXMuZWxl
bWVudDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLnNldE9wdGlvbiA9M0QgZnVu
Y3Rpb24ob3B0aW9uLCB2YWx1ZSkgeworICAgIHRoaXMub3B0aW9uc1tvcHRpb25dID0zRCB2YWx1
ZTsKKyAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUubW92ZURvd24gPTNEIGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmtleV9oYW5kbGVy
KSB7CisgICAgICB0aGlzLmtleV9oYW5kbGVyLm1vdmVEb3duKCk7CisgICAgfQorICAgIHJldHVy
biB0aGlzLmVsZW1lbnQ7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5tb3ZlVXAg
PTNEIGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmtleV9oYW5kbGVyKSB7CisgICAgICB0aGlz
LmtleV9oYW5kbGVyLm1vdmVVcCgpOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5lbGVtZW50Owor
ICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuZ2V0VmVyc2lvbiA9M0QgZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIF9fdmVyc2lvbl9fOworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUuX2luaXQgPTNEIGZ1bmN0aW9uKCkgeworICAgIEpxVHJlZVdpZGdldC5fX3N1cGVyX18u
X2luaXQuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVsZW1lbnQgPTNEIHRoaXMuJGVsOworICAgIHRo
aXMubW91c2VfZGVsYXkgPTNEIDMwMDsKKyAgICB0aGlzLmlzX2luaXRpYWxpemVkID0zRCBmYWxz
ZTsKKyAgICB0aGlzLm9wdGlvbnMucnRsID0zRCB0aGlzLl9nZXRSdGxPcHRpb24oKTsKKyAgICBp
ZiAoIXRoaXMub3B0aW9ucy5jbG9zZWRJY29uKSB7CisgICAgICB0aGlzLm9wdGlvbnMuY2xvc2Vk
SWNvbiA9M0QgdGhpcy5fZ2V0RGVmYXVsdENsb3NlZEljb24oKTsKKyAgICB9CisgICAgdGhpcy5y
ZW5kZXJlciA9M0QgbmV3IEVsZW1lbnRzUmVuZGVyZXIodGhpcyk7CisgICAgaWYgKFNhdmVTdGF0
ZUhhbmRsZXIgIT0zRCBudWxsKSB7CisgICAgICB0aGlzLnNhdmVfc3RhdGVfaGFuZGxlciA9M0Qg
bmV3IFNhdmVTdGF0ZUhhbmRsZXIodGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMub3B0
aW9ucy5zYXZlU3RhdGUgPTNEIGZhbHNlOworICAgIH0KKyAgICBpZiAoU2VsZWN0Tm9kZUhhbmRs
ZXIgIT0zRCBudWxsKSB7CisgICAgICB0aGlzLnNlbGVjdF9ub2RlX2hhbmRsZXIgPTNEIG5ldyBT
ZWxlY3ROb2RlSGFuZGxlcih0aGlzKTsKKyAgICB9CisgICAgaWYgKERyYWdBbmREcm9wSGFuZGxl
ciAhPTNEIG51bGwpIHsKKyAgICAgIHRoaXMuZG5kX2hhbmRsZXIgPTNEIG5ldyBEcmFnQW5kRHJv
cEhhbmRsZXIodGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMub3B0aW9ucy5kcmFnQW5k
RHJvcCA9M0QgZmFsc2U7CisgICAgfQorICAgIGlmIChTY3JvbGxIYW5kbGVyICE9M0QgbnVsbCkg
eworICAgICAgdGhpcy5zY3JvbGxfaGFuZGxlciA9M0QgbmV3IFNjcm9sbEhhbmRsZXIodGhpcyk7
CisgICAgfQorICAgIGlmICgoS2V5SGFuZGxlciAhPTNEIG51bGwpICYmIChTZWxlY3ROb2RlSGFu
ZGxlciAhPTNEIG51bGwpKSB7CisgICAgICB0aGlzLmtleV9oYW5kbGVyID0zRCBuZXcgS2V5SGFu
ZGxlcih0aGlzKTsKKyAgICB9CisgICAgdGhpcy5faW5pdERhdGEoKTsKKyAgICB0aGlzLmVsZW1l
bnQuY2xpY2soJC5wcm94eSh0aGlzLl9jbGljaywgdGhpcykpOworICAgIHRoaXMuZWxlbWVudC5k
YmxjbGljaygkLnByb3h5KHRoaXMuX2RibGNsaWNrLCB0aGlzKSk7CisgICAgaWYgKHRoaXMub3B0
aW9ucy51c2VDb250ZXh0TWVudSkgeworICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5iaW5kKCdj
b250ZXh0bWVudScsICQucHJveHkodGhpcy5fY29udGV4dG1lbnUsIHQ9CmhpcykpOworICAgIH0K
KyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9kZWluaXQgPTNEIGZ1bmN0aW9uKCkg
eworICAgIHRoaXMuZWxlbWVudC5lbXB0eSgpOworICAgIHRoaXMuZWxlbWVudC51bmJpbmQoKTsK
KyAgICBpZiAodGhpcy5rZXlfaGFuZGxlcikgeworICAgICAgdGhpcy5rZXlfaGFuZGxlci5kZWlu
aXQoKTsKKyAgICB9CisgICAgdGhpcy50cmVlID0zRCBudWxsOworICAgIHJldHVybiBKcVRyZWVX
aWRnZXQuX19zdXBlcl9fLl9kZWluaXQuY2FsbCh0aGlzKTsKKyAgfTsKKworICBKcVRyZWVXaWRn
ZXQucHJvdG90eXBlLl9pbml0RGF0YSA9M0QgZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMub3B0
aW9ucy5kYXRhKSB7CisgICAgICByZXR1cm4gdGhpcy5fbG9hZERhdGEodGhpcy5vcHRpb25zLmRh
dGEpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdGhpcy5fbG9hZERhdGFGcm9tVXJsKHRo
aXMuX2dldERhdGFVcmxJbmZvKCkpOworICAgIH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJv
dG90eXBlLl9nZXREYXRhVXJsSW5mbyA9M0QgZnVuY3Rpb24obm9kZSkgeworICAgIHZhciBkYXRh
X3VybCwgZ2V0VXJsRnJvbVN0cmluZzsKKyAgICBkYXRhX3VybCA9M0QgdGhpcy5vcHRpb25zLmRh
dGFVcmwgfHwgdGhpcy5lbGVtZW50LmRhdGEoJ3VybCcpOworICAgIGdldFVybEZyb21TdHJpbmcg
PTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgZGF0YSwgc2VsZWN0ZWRfbm9kZV9pZCwgdXJsX2luZm87CisgICAgICAgIHVybF9pbmZv
ID0zRCB7CisgICAgICAgICAgdXJsOiBkYXRhX3VybAorICAgICAgICB9OworICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLmlkKSB7CisgICAgICAgICAgZGF0YSA9M0QgeworICAgICAgICAgICAgbm9k
ZTogbm9kZS5pZAorICAgICAgICAgIH07CisgICAgICAgICAgdXJsX2luZm9bJ2RhdGEnXSA9M0Qg
ZGF0YTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZWxlY3RlZF9ub2RlX2lkID0zRCBf
dGhpcy5fZ2V0Tm9kZUlkVG9CZVNlbGVjdGVkKCk7CisgICAgICAgICAgaWYgKHNlbGVjdGVkX25v
ZGVfaWQpIHsKKyAgICAgICAgICAgIGRhdGEgPTNEIHsKKyAgICAgICAgICAgICAgc2VsZWN0ZWRf
bm9kZTogc2VsZWN0ZWRfbm9kZV9pZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHVybF9p
bmZvWydkYXRhJ10gPTNEIGRhdGE7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiB1cmxfaW5mbzsKKyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgaWYgKCQuaXNGdW5j
dGlvbihkYXRhX3VybCkpIHsKKyAgICAgIHJldHVybiBkYXRhX3VybChub2RlKTsKKyAgICB9IGVs
c2UgaWYgKCQudHlwZShkYXRhX3VybCkgPTNEPTNEPTNEICdzdHJpbmcnKSB7CisgICAgICByZXR1
cm4gZ2V0VXJsRnJvbVN0cmluZygpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZGF0YV91
cmw7CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2dldE5vZGVJZFRv
QmVTZWxlY3RlZCA9M0QgZnVuY3Rpb24oKSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5zYXZlU3Rh
dGUpIHsKKyAgICAgIHJldHVybiB0aGlzLnNhdmVfc3RhdGVfaGFuZGxlci5nZXROb2RlSWRUb0Jl
U2VsZWN0ZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9
OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2luaXRUcmVlID0zRCBmdW5jdGlvbihkYXRh
KSB7CisgICAgdmFyIGRvSW5pdCwgbXVzdF9sb2FkX29uX2RlbWFuZDsKKyAgICBkb0luaXQgPTNE
IChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICBp
ZiAoIV90aGlzLmlzX2luaXRpYWxpemVkKSB7CisgICAgICAgICAgX3RoaXMuaXNfaW5pdGlhbGl6
ZWQgPTNEIHRydWU7CisgICAgICAgICAgcmV0dXJuIF90aGlzLl90cmlnZ2VyRXZlbnQoJ3RyZWUu
aW5pdCcpOworICAgICAgICB9CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAgIHRoaXMudHJl
ZSA9M0QgbmV3IHRoaXMub3B0aW9ucy5ub2RlQ2xhc3MobnVsbCwgdHJ1ZSwgdGhpcy5vcHRpb25z
Lm5vZGU9CkNsYXNzKTsKKyAgICBpZiAodGhpcy5zZWxlY3Rfbm9kZV9oYW5kbGVyKSB7CisgICAg
ICB0aGlzLnNlbGVjdF9ub2RlX2hhbmRsZXIuY2xlYXIoKTsKKyAgICB9CisgICAgdGhpcy50cmVl
LmxvYWRGcm9tRGF0YShkYXRhKTsKKyAgICBtdXN0X2xvYWRfb25fZGVtYW5kID0zRCB0aGlzLl9z
ZXRJbml0aWFsU3RhdGUoKTsKKyAgICB0aGlzLl9yZWZyZXNoRWxlbWVudHMoKTsKKyAgICBpZiAo
IW11c3RfbG9hZF9vbl9kZW1hbmQpIHsKKyAgICAgIHJldHVybiBkb0luaXQoKTsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0dXJuIHRoaXMuX3NldEluaXRpYWxTdGF0ZU9uRGVtYW5kKGRvSW5pdCk7
CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX3NldEluaXRpYWxTdGF0
ZSA9M0QgZnVuY3Rpb24oKSB7CisgICAgdmFyIGF1dG9PcGVuTm9kZXMsIGlzX3Jlc3RvcmVkLCBt
dXN0X2xvYWRfb25fZGVtYW5kLCByZWYyLCByZXN0b3JlU3RhdD0KZTsKKyAgICByZXN0b3JlU3Rh
dGUgPTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgbXVzdF9sb2FkX29uX2RlbWFuZCwgc3RhdGU7CisgICAgICAgIGlmICghKF90aGlz
Lm9wdGlvbnMuc2F2ZVN0YXRlICYmIF90aGlzLnNhdmVfc3RhdGVfaGFuZGxlcikpIHsKKyAgICAg
ICAgICByZXR1cm4gW2ZhbHNlLCBmYWxzZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
c3RhdGUgPTNEIF90aGlzLnNhdmVfc3RhdGVfaGFuZGxlci5nZXRTdGF0ZUZyb21TdG9yYWdlKCk7
CisgICAgICAgICAgaWYgKCFzdGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIFtmYWxzZSwgZmFs
c2VdOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtdXN0X2xvYWRfb25fZGVtYW5k
ID0zRCBfdGhpcy5zYXZlX3N0YXRlX2hhbmRsZXIuc2V0SW5pdGlhbFN0YT0KdGUoc3RhdGUpOwor
ICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBtdXN0X2xvYWRfb25fZGVtYW5kXTsKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgYXV0b09wZW5Ob2Rl
cyA9M0QgKGZ1bmN0aW9uKF90aGlzKSB7CisgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBtYXhfbGV2ZWwsIG11c3RfbG9hZF9vbl9kZW1hbmQ7CisgICAgICAgIGlmIChfdGhp
cy5vcHRpb25zLmF1dG9PcGVuID0zRD0zRD0zRCBmYWxzZSkgeworICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBtYXhfbGV2ZWwgPTNEIF90aGlzLl9nZXRBdXRvT3Bl
bk1heExldmVsKCk7CisgICAgICAgIG11c3RfbG9hZF9vbl9kZW1hbmQgPTNEIGZhbHNlOworICAg
ICAgICBfdGhpcy50cmVlLml0ZXJhdGUoZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHsKKyAgICAgICAg
ICBpZiAobm9kZS5sb2FkX29uX2RlbWFuZCkgeworICAgICAgICAgICAgbXVzdF9sb2FkX29uX2Rl
bWFuZCA9M0QgdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9IGVs
c2UgaWYgKCFub2RlLmhhc0NoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbm9kZS5pc19vcGVuID0zRCB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIGxldmVsICE9M0Q9M0QgbWF4X2xldmVsOworICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBtdXN0X2xvYWRfb25fZGVtYW5kOworICAgICAg
fTsKKyAgICB9KSh0aGlzKTsKKyAgICByZWYyID0zRCByZXN0b3JlU3RhdGUoKSwgaXNfcmVzdG9y
ZWQgPTNEIHJlZjJbMF0sIG11c3RfbG9hZF9vbl9kZW1hbmQgPQo9M0QgcmVmMlsxXTsKKyAgICBp
ZiAoIWlzX3Jlc3RvcmVkKSB7CisgICAgICBtdXN0X2xvYWRfb25fZGVtYW5kID0zRCBhdXRvT3Bl
bk5vZGVzKCk7CisgICAgfQorICAgIHJldHVybiBtdXN0X2xvYWRfb25fZGVtYW5kOworICB9Owor
CisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX3NldEluaXRpYWxTdGF0ZU9uRGVtYW5kID0zRCBm
dW5jdGlvbihjYl9maW5pc2hlZD0KKSB7CisgICAgdmFyIGF1dG9PcGVuTm9kZXMsIHJlc3RvcmVT
dGF0ZTsKKyAgICByZXN0b3JlU3RhdGUgPTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0
dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc3RhdGU7CisgICAgICAgIGlmICghKF90aGlz
Lm9wdGlvbnMuc2F2ZVN0YXRlICYmIF90aGlzLnNhdmVfc3RhdGVfaGFuZGxlcikpIHsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3RhdGUgPTNE
IF90aGlzLnNhdmVfc3RhdGVfaGFuZGxlci5nZXRTdGF0ZUZyb21TdG9yYWdlKCk7CisgICAgICAg
ICAgaWYgKCFzdGF0ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBfdGhpcy5zYXZlX3N0YXRlX2hhbmRsZXIuc2V0SW5pdGlhbFN0
YXRlT25EZW1hbmQoc3RhdGUsIGNiX2Zpbj0KaXNoZWQpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9OworICAgIH0pKHRoaXMpOworICAg
IGF1dG9PcGVuTm9kZXMgPTNEIChmdW5jdGlvbihfdGhpcykgeworICAgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgbG9hZEFuZE9wZW5Ob2RlLCBsb2FkaW5nX2NvdW50LCBtYXhf
bGV2ZWwsIG9wZW5Ob2RlczsKKyAgICAgICAgbWF4X2xldmVsID0zRCBfdGhpcy5fZ2V0QXV0b09w
ZW5NYXhMZXZlbCgpOworICAgICAgICBsb2FkaW5nX2NvdW50ID0zRCAwOworICAgICAgICBsb2Fk
QW5kT3Blbk5vZGUgPTNEIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICBsb2FkaW5nX2NvdW50
ICs9M0QgMTsKKyAgICAgICAgICByZXR1cm4gX3RoaXMuX29wZW5Ob2RlKG5vZGUsIGZhbHNlLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxvYWRpbmdfY291bnQgLT0zRCAxOworICAgICAgICAg
ICAgcmV0dXJuIG9wZW5Ob2RlcygpOworICAgICAgICAgIH0pOworICAgICAgICB9OworICAgICAg
ICBvcGVuTm9kZXMgPTNEIGZ1bmN0aW9uKCkgeworICAgICAgICAgIF90aGlzLnRyZWUuaXRlcmF0
ZShmdW5jdGlvbihub2RlLCBsZXZlbCkgeworICAgICAgICAgICAgaWYgKG5vZGUubG9hZF9vbl9k
ZW1hbmQpIHsKKyAgICAgICAgICAgICAgaWYgKCFub2RlLmlzX2xvYWRpbmcpIHsKKyAgICAgICAg
ICAgICAgICBsb2FkQW5kT3Blbk5vZGUobm9kZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
X3RoaXMuX29wZW5Ob2RlKG5vZGUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgcmV0dXJuIGxldmVs
ICE9M0Q9M0QgbWF4X2xldmVsOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAg
ICAgIGlmIChsb2FkaW5nX2NvdW50ID0zRD0zRD0zRCAwKSB7CisgICAgICAgICAgICByZXR1cm4g
Y2JfZmluaXNoZWQoKTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBv
cGVuTm9kZXMoKTsKKyAgICAgIH07CisgICAgfSkodGhpcyk7CisgICAgaWYgKCFyZXN0b3JlU3Rh
dGUoKSkgeworICAgICAgcmV0dXJuIGF1dG9PcGVuTm9kZXMoKTsKKyAgICB9CisgIH07CisKKyAg
SnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5fZ2V0QXV0b09wZW5NYXhMZXZlbCA9M0QgZnVuY3Rpb24o
KSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5hdXRvT3BlbiA9M0Q9M0Q9M0QgdHJ1ZSkgeworICAg
ICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5v
cHRpb25zLmF1dG9PcGVuKTsKKyAgICB9CisgIH07CisKKworICAvKgorICBSZWRyYXcgdGhlIHRy
ZWUgb3IgcGFydCBvZiB0aGUgdHJlZS4KKyAgICogZnJvbV9ub2RlOiByZWRyYXcgdGhpcyBzdWJ0
cmVlCisgICAqLworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX3JlZnJlc2hFbGVtZW50cyA9
M0QgZnVuY3Rpb24oZnJvbV9ub2RlKSB7CisgICAgaWYgKGZyb21fbm9kZSA9M0Q9M0QgbnVsbCkg
eworICAgICAgZnJvbV9ub2RlID0zRCBudWxsOworICAgIH0KKyAgICB0aGlzLnJlbmRlcmVyLnJl
bmRlcihmcm9tX25vZGUpOworICAgIHJldHVybiB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RyZWUucmVm
cmVzaCcpOworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2NsaWNrID0zRCBmdW5j
dGlvbihlKSB7CisgICAgdmFyIGNsaWNrX3RhcmdldCwgZXZlbnQsIG5vZGU7CisgICAgY2xpY2tf
dGFyZ2V0ID0zRCB0aGlzLl9nZXRDbGlja1RhcmdldChlLnRhcmdldCk7CisgICAgaWYgKGNsaWNr
X3RhcmdldCkgeworICAgICAgaWYgKGNsaWNrX3RhcmdldC50eXBlID0zRD0zRD0zRCAnYnV0dG9u
JykgeworICAgICAgICB0aGlzLnRvZ2dsZShjbGlja190YXJnZXQubm9kZSwgdGhpcy5vcHRpb25z
LnNsaWRlKTsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICByZXR1cm4gZS5z
dG9wUHJvcGFnYXRpb24oKTsKKyAgICAgIH0gZWxzZSBpZiAoY2xpY2tfdGFyZ2V0LnR5cGUgPTNE
PTNEPTNEICdsYWJlbCcpIHsKKyAgICAgICAgbm9kZSA9M0QgY2xpY2tfdGFyZ2V0Lm5vZGU7Cisg
ICAgICAgIGV2ZW50ID0zRCB0aGlzLl90cmlnZ2VyRXZlbnQoJ3RyZWUuY2xpY2snLCB7CisgICAg
ICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICBjbGlja19ldmVudDogZQorICAgICAgICB9KTsK
KyAgICAgICAgaWYgKCFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgeworICAgICAgICAgIHJl
dHVybiB0aGlzLl9zZWxlY3ROb2RlKG5vZGUsIHRydWUpOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2RibGNsaWNrID0zRCBmdW5j
dGlvbihlKSB7CisgICAgdmFyIGNsaWNrX3RhcmdldDsKKyAgICBjbGlja190YXJnZXQgPTNEIHRo
aXMuX2dldENsaWNrVGFyZ2V0KGUudGFyZ2V0KTsKKyAgICBpZiAoY2xpY2tfdGFyZ2V0ICYmIGNs
aWNrX3RhcmdldC50eXBlID0zRD0zRD0zRCAnbGFiZWwnKSB7CisgICAgICByZXR1cm4gdGhpcy5f
dHJpZ2dlckV2ZW50KCd0cmVlLmRibGNsaWNrJywgeworICAgICAgICBub2RlOiBjbGlja190YXJn
ZXQubm9kZSwKKyAgICAgICAgY2xpY2tfZXZlbnQ6IGUKKyAgICAgIH0pOworICAgIH0KKyAgfTsK
KworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9nZXRDbGlja1RhcmdldCA9M0QgZnVuY3Rpb24o
ZWxlbWVudCkgeworICAgIHZhciAkYnV0dG9uLCAkZWwsICR0YXJnZXQsIG5vZGU7CisgICAgJHRh
cmdldCA9M0QgJChlbGVtZW50KTsKKyAgICAkYnV0dG9uID0zRCAkdGFyZ2V0LmNsb3Nlc3QoJy5q
cXRyZWUtdG9nZ2xlcicpOworICAgIGlmICgkYnV0dG9uLmxlbmd0aCkgeworICAgICAgbm9kZSA9
M0QgdGhpcy5fZ2V0Tm9kZSgkYnV0dG9uKTsKKyAgICAgIGlmIChub2RlKSB7CisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgdHlwZTogJ2J1dHRvbicsCisgICAgICAgICAgbm9kZTogbm9kZQor
ICAgICAgICB9OworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAkZWwgPTNEICR0YXJnZXQu
Y2xvc2VzdCgnLmpxdHJlZS1lbGVtZW50Jyk7CisgICAgICBpZiAoJGVsLmxlbmd0aCkgeworICAg
ICAgICBub2RlID0zRCB0aGlzLl9nZXROb2RlKCRlbCk7CisgICAgICAgIGlmIChub2RlKSB7Cisg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6ICdsYWJlbCcsCisgICAgICAgICAg
ICBub2RlOiBub2RlCisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gbnVsbDsKKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9nZXROb2Rl
ID0zRCBmdW5jdGlvbigkZWxlbWVudCkgeworICAgIHZhciAkbGk7CisgICAgJGxpID0zRCAkZWxl
bWVudC5jbG9zZXN0KCdsaS5qcXRyZWVfY29tbW9uJyk7CisgICAgaWYgKCRsaS5sZW5ndGggPTNE
PTNEPTNEIDApIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0gZWxzZSB7CisgICAgICByZXR1
cm4gJGxpLmRhdGEoJ25vZGUnKTsKKyAgICB9CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3Rv
dHlwZS5fZ2V0Tm9kZUVsZW1lbnRGb3JOb2RlID0zRCBmdW5jdGlvbihub2RlKSB7CisgICAgaWYg
KG5vZGUuaXNGb2xkZXIoKSkgeworICAgICAgcmV0dXJuIG5ldyBGb2xkZXJFbGVtZW50KG5vZGUs
IHRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbmV3IE5vZGVFbGVtZW50KG5vZGUs
IHRoaXMpOworICAgIH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9nZXROb2Rl
RWxlbWVudCA9M0QgZnVuY3Rpb24oJGVsZW1lbnQpIHsKKyAgICB2YXIgbm9kZTsKKyAgICBub2Rl
ID0zRCB0aGlzLl9nZXROb2RlKCRlbGVtZW50KTsKKyAgICBpZiAobm9kZSkgeworICAgICAgcmV0
dXJuIHRoaXMuX2dldE5vZGVFbGVtZW50Rm9yTm9kZShub2RlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUu
X2NvbnRleHRtZW51ID0zRCBmdW5jdGlvbihlKSB7CisgICAgdmFyICRkaXYsIG5vZGU7CisgICAg
JGRpdiA9M0QgJChlLnRhcmdldCkuY2xvc2VzdCgndWwuanF0cmVlLXRyZWUgLmpxdHJlZS1lbGVt
ZW50Jyk7CisgICAgaWYgKCRkaXYubGVuZ3RoKSB7CisgICAgICBub2RlID0zRCB0aGlzLl9nZXRO
b2RlKCRkaXYpOworICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgp
OworICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB0aGlzLl90cmlnZ2VyRXZl
bnQoJ3RyZWUuY29udGV4dG1lbnUnLCB7CisgICAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAg
ICBjbGlja19ldmVudDogZQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgfQorICAgIH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9zYXZlU3RhdGUg
PTNEIGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZVN0YXRlKSB7CisgICAg
ICByZXR1cm4gdGhpcy5zYXZlX3N0YXRlX2hhbmRsZXIuc2F2ZVN0YXRlKCk7CisgICAgfQorICB9
OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX21vdXNlQ2FwdHVyZSA9M0QgZnVuY3Rpb24o
cG9zaXRpb25faW5mbykgeworICAgIGlmICh0aGlzLm9wdGlvbnMuZHJhZ0FuZERyb3ApIHsKKyAg
ICAgIHJldHVybiB0aGlzLmRuZF9oYW5kbGVyLm1vdXNlQ2FwdHVyZShwb3NpdGlvbl9pbmZvKTsK
KyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBKcVRy
ZWVXaWRnZXQucHJvdG90eXBlLl9tb3VzZVN0YXJ0ID0zRCBmdW5jdGlvbihwb3NpdGlvbl9pbmZv
KSB7CisgICAgaWYgKHRoaXMub3B0aW9ucy5kcmFnQW5kRHJvcCkgeworICAgICAgcmV0dXJuIHRo
aXMuZG5kX2hhbmRsZXIubW91c2VTdGFydChwb3NpdGlvbl9pbmZvKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90
eXBlLl9tb3VzZURyYWcgPTNEIGZ1bmN0aW9uKHBvc2l0aW9uX2luZm8pIHsKKyAgICB2YXIgcmVz
dWx0OworICAgIGlmICh0aGlzLm9wdGlvbnMuZHJhZ0FuZERyb3ApIHsKKyAgICAgIHJlc3VsdCA9
M0QgdGhpcy5kbmRfaGFuZGxlci5tb3VzZURyYWcocG9zaXRpb25faW5mbyk7CisgICAgICBpZiAo
dGhpcy5zY3JvbGxfaGFuZGxlcikgeworICAgICAgICB0aGlzLnNjcm9sbF9oYW5kbGVyLmNoZWNr
U2Nyb2xsaW5nKCk7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0gZWxzZSB7
CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90
b3R5cGUuX21vdXNlU3RvcCA9M0QgZnVuY3Rpb24ocG9zaXRpb25faW5mbykgeworICAgIGlmICh0
aGlzLm9wdGlvbnMuZHJhZ0FuZERyb3ApIHsKKyAgICAgIHJldHVybiB0aGlzLmRuZF9oYW5kbGVy
Lm1vdXNlU3RvcChwb3NpdGlvbl9pbmZvKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyRXZl
bnQgPTNEIGZ1bmN0aW9uKGV2ZW50X25hbWUsIHZhbHVlcykgeworICAgIHZhciBldmVudDsKKyAg
ICBldmVudCA9M0QgJC5FdmVudChldmVudF9uYW1lKTsKKyAgICAkLmV4dGVuZChldmVudCwgdmFs
dWVzKTsKKyAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcihldmVudCk7CisgICAgcmV0dXJuIGV2ZW50
OworICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUudGVzdEdlbmVyYXRlSGl0QXJlYXMg
PTNEIGZ1bmN0aW9uKG1vdmluZ19ub2RlKSB7CisgICAgdGhpcy5kbmRfaGFuZGxlci5jdXJyZW50
X2l0ZW0gPTNEIHRoaXMuX2dldE5vZGVFbGVtZW50Rm9yTm9kZShtb3Zpbmdfbj0Kb2RlKTsKKyAg
ICB0aGlzLmRuZF9oYW5kbGVyLmdlbmVyYXRlSGl0QXJlYXMoKTsKKyAgICByZXR1cm4gdGhpcy5k
bmRfaGFuZGxlci5oaXRfYXJlYXM7CisgIH07CisKKyAgSnFUcmVlV2lkZ2V0LnByb3RvdHlwZS5f
c2VsZWN0Q3VycmVudE5vZGUgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBub2RlLCBub2RlX2Vs
ZW1lbnQ7CisgICAgbm9kZSA9M0QgdGhpcy5nZXRTZWxlY3RlZE5vZGUoKTsKKyAgICBpZiAobm9k
ZSkgeworICAgICAgbm9kZV9lbGVtZW50ID0zRCB0aGlzLl9nZXROb2RlRWxlbWVudEZvck5vZGUo
bm9kZSk7CisgICAgICBpZiAobm9kZV9lbGVtZW50KSB7CisgICAgICAgIHJldHVybiBub2RlX2Vs
ZW1lbnQuc2VsZWN0KCk7CisgICAgICB9CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5w
cm90b3R5cGUuX2Rlc2VsZWN0Q3VycmVudE5vZGUgPTNEIGZ1bmN0aW9uKCkgeworICAgIHZhciBu
b2RlOworICAgIG5vZGUgPTNEIHRoaXMuZ2V0U2VsZWN0ZWROb2RlKCk7CisgICAgaWYgKG5vZGUp
IHsKKyAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZyb21TZWxlY3Rpb24obm9kZSk7CisgICAgfQor
ICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX2dldERlZmF1bHRDbG9zZWRJY29uID0z
RCBmdW5jdGlvbigpIHsKKyAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCkgeworICAgICAgcmV0dXJu
ICcmI3gyNWMwOyc7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAnJiN4MjViYTsnOworICAg
IH0KKyAgfTsKKworICBKcVRyZWVXaWRnZXQucHJvdG90eXBlLl9nZXRSdGxPcHRpb24gPTNEIGZ1
bmN0aW9uKCkgeworICAgIHZhciBkYXRhX3J0bDsKKyAgICBpZiAodGhpcy5vcHRpb25zLnJ0bCAh
PTNEPTNEIG51bGwpIHsKKyAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucnRsOworICAgIH0gZWxz
ZSB7CisgICAgICBkYXRhX3J0bCA9M0QgdGhpcy5lbGVtZW50LmRhdGEoJ3J0bCcpOworICAgICAg
aWYgKChkYXRhX3J0bCAhPTNEIG51bGwpICYmIGRhdGFfcnRsICE9M0Q9M0QgZmFsc2UpIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICB9CisgICAgfQorICB9OworCisgIEpxVHJlZVdpZGdldC5wcm90b3R5cGUuX25vdGlm
eUxvYWRpbmcgPTNEIGZ1bmN0aW9uKGlzX2xvYWRpbmcsIG5vZGUsICRlbD0KKSB7CisgICAgaWYg
KHRoaXMub3B0aW9ucy5vbkxvYWRpbmcpIHsKKyAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMub25M
b2FkaW5nKGlzX2xvYWRpbmcsIG5vZGUsICRlbCk7CisgICAgfQorICB9OworCisgIHJldHVybiBK
cVRyZWVXaWRnZXQ7CisKK30pKE1vdXNlV2lkZ2V0KTsKKworSnFUcmVlV2lkZ2V0LmdldE1vZHVs
ZSA9M0QgZnVuY3Rpb24obmFtZSkgeworICB2YXIgbW9kdWxlczsKKyAgbW9kdWxlcyA9M0Qgewor
ICAgICdub2RlJzogbm9kZV9tb2R1bGUsCisgICAgJ3V0aWwnOiB1dGlsX21vZHVsZQorICB9Owor
ICByZXR1cm4gbW9kdWxlc1tuYW1lXTsKK307CisKK1NpbXBsZVdpZGdldC5yZWdpc3RlcihKcVRy
ZWVXaWRnZXQsICd0cmVlJyk7CisKK30seyIuL2RyYWdfYW5kX2Ryb3BfaGFuZGxlciI6MSwiLi9l
bGVtZW50c19yZW5kZXJlciI6MiwiLi9rZXlfaGFuZGxlciI6MywiPQouL21vdXNlLndpZGdldCI6
NCwiLi9ub2RlIjo1LCIuL25vZGVfZWxlbWVudCI6NiwiLi9zYXZlX3N0YXRlX2hhbmRsZXIiOjcs
Ii49Ci9zY3JvbGxfaGFuZGxlciI6OCwiLi9zZWxlY3Rfbm9kZV9oYW5kbGVyIjo5LCIuL3NpbXBs
ZS53aWRnZXQiOjEwLCIuL3V0aWwiOj0KMTIsIi4vdmVyc2lvbiI6MTN9XSwxMjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cit2YXIgX2luZGV4T2YsIGdldEJvb2xTdHJpbmcsIGh0
bWxfZXNjYXBlLCBpbmRleE9mLCBpc0ludDsKKworX2luZGV4T2YgPTNEIGZ1bmN0aW9uKGFycmF5
LCBpdGVtKSB7CisgIHZhciBpLCBqLCBsZW4sIHZhbHVlOworICBmb3IgKGkgPTNEIGogPTNEIDAs
IGxlbiA9M0QgYXJyYXkubGVuZ3RoOyBqIDwgbGVuOyBpID0zRCArK2opIHsKKyAgICB2YWx1ZSA9
M0QgYXJyYXlbaV07CisgICAgaWYgKHZhbHVlID0zRD0zRD0zRCBpdGVtKSB7CisgICAgICByZXR1
cm4gaTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIC0xOworfTsKKworaW5kZXhPZiA9M0QgZnVuY3Rp
b24oYXJyYXksIGl0ZW0pIHsKKyAgaWYgKGFycmF5LmluZGV4T2YpIHsKKyAgICByZXR1cm4gYXJy
YXkuaW5kZXhPZihpdGVtKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gX2luZGV4T2YoYXJyYXks
IGl0ZW0pOworICB9Cit9OworCitpc0ludCA9M0QgZnVuY3Rpb24obikgeworICByZXR1cm4gdHlw
ZW9mIG4gPTNEPTNEPTNEICdudW1iZXInICYmIG4gJSAxID0zRD0zRD0zRCAwOworfTsKKworaHRt
bF9lc2NhcGUgPTNEIGZ1bmN0aW9uKHN0cmluZykgeworICByZXR1cm4gKCcnICsgc3RyaW5nKS5y
ZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWM9CmUoLz4v
ZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmI3gyNzsn
KS5yZXBsYWNlKC9cLz0KL2csICcmI3gyRjsnKTsKK307CisKK2dldEJvb2xTdHJpbmcgPTNEIGZ1
bmN0aW9uKHZhbHVlKSB7CisgIGlmICh2YWx1ZSkgeworICAgIHJldHVybiAndHJ1ZSc7CisgIH0g
ZWxzZSB7CisgICAgcmV0dXJuICdmYWxzZSc7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0z
RCB7CisgIF9pbmRleE9mOiBfaW5kZXhPZiwKKyAgZ2V0Qm9vbFN0cmluZzogZ2V0Qm9vbFN0cmlu
ZywKKyAgaHRtbF9lc2NhcGU6IGh0bWxfZXNjYXBlLAorICBpbmRleE9mOiBpbmRleE9mLAorICBp
c0ludDogaXNJbnQKK307CisKK30se31dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKK21vZHVsZS5leHBvcnRzID0zRCAnMS4zLjMnOworCit9LHt9XX0se30sWzExXSk7CmRp
ZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVtX3JlZi9kYXRhaW1wb3J0L19faW5pdF9fLnB5IGIvY3Vi
aWN3ZWJfc2FlbV9yZWYvZD0KYXRhaW1wb3J0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmRpZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVtX3JlZi9kYXRhaW1wb3J0L2VhYy5weSBiL2N1
Ymljd2ViX3NhZW1fcmVmL2RhdGFpbT0KcG9ydC9lYWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
LS0tIC9kZXYvbnVsbAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9kYXRhaW1wb3J0L2VhYy5weQpA
QCAtMCwwICsxLDkwMyBAQAorIyBjb3B5cmlnaHQgMjAxNS0yMDE2IExPR0lMQUIgUy5BLiAoUGFy
aXMsIEZSQU5DRSksIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIGNvbnRhY3QgaHR0cDovL3d3dy5s
b2dpbGFiLmZyIC0tIG1haWx0bzpjb250YWN0QGxvZ2lsYWIuZnIKKyMKKyMgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg
aXQgPQp1bmRlcgorIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEY9CnJlZQorIyBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGk9Cm9u
KQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIPQpPVVQKKyMgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJPQpUTkVTUworIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciA9Cm1vcmUKKyMgZGV0YWlscy4K
KyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlPQogYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5v
dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyIiImN1Ymljd2ViLXNhZW0t
cmVmIGRhdGFpbXBvcnQgdXRpbGl0aWVzIGZvciBFQUMtQ1BGIChFbmNvZGVkIEFyY2hpdmFsCitD
b250ZXh0IC0tIENvcnBvcmF0ZSBCb2RpZXMsIFBlcnNvbnMsIGFuZCBGYW1pbGllcykuCisiIiIK
KworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2ltcG9ydCBkYXRldGltZQorZnJvbSBm
dW5jdG9vbHMgaW1wb3J0IHdyYXBzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGxvZ2dpbmcKK2Zy
b20gdXVpZCBpbXBvcnQgdXVpZDQKKworZnJvbSBkYXRldXRpbC5wYXJzZXIgaW1wb3J0IHBhcnNl
IGFzIHBhcnNlX2RhdGUKK2Zyb20gbHhtbCBpbXBvcnQgZXRyZWUKKworZnJvbSBjdWJpY3dlYi5k
YXRhaW1wb3J0LmltcG9ydGVyIGltcG9ydCBFeHRFbnRpdHkKK2Zyb20gY3ViZXMuc2tvcyBpbXBv
cnQgdG9fdW5pY29kZQorZnJvbSBjdWJlcy5zYWVtX3JlZiBpbXBvcnQgZWFjdHlwZV9tYXBwaW5n
LCBlYWNhZGRyZXNzX21hcHBpbmcsIGVhY21haW50ZW49CmFuY2V0eXBlX21hcHBpbmcKKworVFlQ
RV9NQVBQSU5HID0zRCBlYWN0eXBlX21hcHBpbmcuY29weSgpCitUWVBFX01BUFBJTkdbJ2h1bWFu
J10gPTNEIHUncGVyc29uJworCitFVFlQRVNfT1JERVJfSElOVCA9M0QgKCdBZ2VudEtpbmQnLCAn
UGhvbmVOdW1iZXInLCAnUG9zdGFsQWRkcmVzcycsICdBdXRobz0Kcml0eVJlY29yZCcsCisgICAg
ICAgICAgICAgICAgICAgICAnQWdlbnRQbGFjZScsICdNYW5kYXRlJywgJ0xlZ2FsU3RhdHVzJywg
J0hpc3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgJ1N0cnVjdHVyZScsICdBZ2VudEZ1bmN0
aW9uJywgJ09jY3VwYXRpb24nLCAnR2VuZXJhbEM9Cm9udGV4dCcsCisgICAgICAgICAgICAgICAg
ICAgICAnQXNzb2NpYXRpb25SZWxhdGlvbicsICdDaHJvbm9sb2dpY2FsUmVsYXRpb24nLCAnSGll
cj0KYXJjaGljYWxSZWxhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAnRUFDUmVzb3VyY2VS
ZWxhdGlvbicsICdFeHRlcm5hbFVyaScsICdFQUNTb3VyY2UnLAorICAgICAgICAgICAgICAgICAg
ICAgJ0FnZW50JywgJ0FjdGl2aXR5JykKKworCitjbGFzcyBJbnZhbGlkRUFDKFJ1bnRpbWVFcnJv
cik6CisgICAgIiIiRUFDIGlucHV0IGlzIG1hbGZvcm1lZC4iIiIKKworCitjbGFzcyBJbnZhbGlk
WE1MKFJ1bnRpbWVFcnJvcik6CisgICAgIiIiRUFDIGlucHV0IGhhcyBhbiBpbnZhbGlkIFhNTCBm
b3JtYXQiIiIKKworCitjbGFzcyBNaXNzaW5nVGFnKFJ1bnRpbWVFcnJvcik6CisgICAgIiIiTWFu
ZGF0b3J5IHRhZyBpcyBtaXNzaW5nIGluIEVBQyBpbnB1dCIiIgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHRhZywgdGFnX3BhcmVudD0zRE5vbmUpOgorICAgICAgICBzdXBlcihNaXNzaW5nVGFn
LCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudGFnID0zRCB0YWcKKyAgICAgICAgc2Vs
Zi50YWdfcGFyZW50ID0zRCB0YWdfcGFyZW50CisKKworZGVmIGV4dGVybmFsX3VyaSh1cmkpOgor
ICAgIHZhbHVlcyA9M0QgW3VuaWNvZGUodXJpKV0KKyAgICByZXR1cm4gRXh0RW50aXR5KCdFeHRl
cm5hbFVyaScsIHVyaSwgeyd1cmknOiBzZXQodmFsdWVzKSwgJ2N3dXJpJzogc2V0PQoodmFsdWVz
KX0pCisKKworZGVmIGZpbHRlcl9ub25lKGZ1bmMpOgorICAgICIiIkZpbHRlciBOb25lIHZhbHVl
IGZyb20gYSBnZW5lcmF0b3IgZnVuY3Rpb24uIiIiCisgICAgZGVmIHdyYXBwZWQoKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAgICAgZm9yIHggaW4gZnVuYygqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICAgICAgaWYgeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgcmV0
dXJuIHdyYXBzKGZ1bmMpKHdyYXBwZWQpCisKKworZGVmIGZpbHRlcl9lbXB0eShmdW5jKToKKyAg
ICAiIiJGaWx0ZXIgb3V0IGVtcHR5IEV4dEVudGl0eSAoaS5lLiB3aXRoIGVtcHR5IGBgdmFsdWVz
YGAgYXR0cmlidXRlKS4iPQoiIgorICAgIEB3cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZvciBleHRlbnRpdHkgaW4gZnVuYyhzZWxm
LCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgaWYgZXh0ZW50aXR5LnZhbHVlczoKKyAg
ICAgICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICByZXR1cm4gd3JhcHBlcgorCisKK2Rl
ZiBlbGVtX21heWJlX25vbmUoZnVuYyk6CisgICAgIiIiTWV0aG9kIGRlY29yYXRvciBmb3IgZXh0
ZXJuYWwgZW50aXR5IGJ1aWxkZXIgZnVuY3Rpb24gaGFuZGxpbmcgdGhlID0KY2FzZQorICAgIG9m
IGBlbGVtYCBiZWluZyBOb25lLgorICAgICIiIgorICAgIGlmIGluc3BlY3QuaXNnZW5lcmF0b3Jm
dW5jdGlvbihmdW5jKToKKyAgICAgICAgZGVmIHdyYXBwZWQoc2VsZiwgZWxlbSwgKmFyZ3MsICoq
a3dhcmdzKToKKyAgICAgICAgICAgIGlmIGVsZW0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgICAgIGZvciBleHRlbnRpdHkgaW4gZnVuYyhzZWxmLCBlbGVtLCAqYXJn
cywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHlpZWxkIGV4dGVudGl0eQorICAgIGVsc2U6
CisgICAgICAgIGRlZiB3cmFwcGVkKHNlbGYsIGVsZW0sICphcmdzLCAqKmt3YXJncyk6CisgICAg
ICAgICAgICBpZiBlbGVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoc2VsZiwgZWxlbSwg
KmFyZ3MsICoqa3dhcmdzKQorICAgIHJldHVybiB3cmFwcyhmdW5jKSh3cmFwcGVkKQorCisKK2Rl
ZiBhZGRfeG1sX3dyYXBfZm9yKCpldHlwZXMpOgorICAgICIiIkFkZCBhbiBgeG1sX3dyYXBgIGF0
dHJpYnV0ZSBpbiBFeHRFbnRpdHkncyB2YWx1ZXMgZGljdGlvbm5hcnkuIiIiCisgICAgZGVmIGRl
Y29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIHdyYXBwZWQoc2VsZiwgZWxlbSk6CisgICAgICAg
ICAgICBvYmplY3RYTUxXcmFwID0zRCBzZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2VhYzpvYmplY3RY
TUxXcmFwJykKKyAgICAgICAgICAgIHhtbHdyYXAgPTNEIE5vbmUKKyAgICAgICAgICAgIGlmIG9i
amVjdFhNTFdyYXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbmNoaWxkcmVuID0zRCBs
ZW4ob2JqZWN0WE1MV3JhcCkKKyAgICAgICAgICAgICAgICBpZiBuY2hpbGRyZW4gPj0zRCAxOgor
ICAgICAgICAgICAgICAgICAgICB4bWx3cmFwID0zRCBvYmplY3RYTUxXcmFwWzBdCisgICAgICAg
ICAgICAgICAgaWYgbmNoaWxkcmVuID4gMToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0zRCBz
ZWxmLl8oJ211bHRpcGxlIGNoaWxkcmVuIGVsZW1lbnRzIGZvdW5kIGluIHswPQp9JykuZm9ybWF0
KAorICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WE1MV3JhcCkKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5pbXBvcnRfbG9nLnJlY29yZF93YXJuaW5nKG1zZywgbGluZT0zRG9iamVjdFhN
TFdyPQphcC5saW5lKQorICAgICAgICAgICAgYXR0cmlidXRlX2FkZGVkID0zRCBGYWxzZQorICAg
ICAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBmdW5jKHNlbGYsIGVsZW0pOgorICAgICAgICAgICAg
ICAgIGlmIHhtbHdyYXAgaXMgbm90IE5vbmUgYW5kIGV4dGVudGl0eS5ldHlwZSBpbiBldHlwZXM6
CisgICAgICAgICAgICAgICAgICAgICMgcHJldmVudCBhc3NvY2lhdGlvbiBvZiB4bWx3cmFwIHRv
IHNldmVyYWwgZXh0ZW50aXRpZT0Kcy4KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBh
dHRyaWJ1dGVfYWRkZWQsICd4bWxfd3JhcCBhdHRyaWJ1dGUgYWxyZWFkPQp5IGFkZGVkJworICAg
ICAgICAgICAgICAgICAgICBleHRlbnRpdHkudmFsdWVzLnNldGRlZmF1bHQoJ3htbF93cmFwJywg
c2V0KFtdKSkuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgZXRyZWUudG9zdHJpbmcoeG1s
d3JhcCwgZW5jb2Rpbmc9M0QndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
X2FkZGVkID0zRCBUcnVlCisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisgICAgICAg
IHJldHVybiB3cmFwcyhmdW5jKSh3cmFwcGVkKQorICAgIHJldHVybiBkZWNvcmF0b3IKKworCitk
ZWYgcmVsYXRlX3RvX3JlY29yZF90aHJvdWdoKGV0eXBlLCBydHlwZSk6CisgICAgIiIiQWRkIGFu
IGBgcnR5cGVgYCByZWxhdGlvbnNoaXAgZnJvbSBgYGV0eXBlYGAgdG8gdGhlIGltcG9ydGVkIHJl
Y29yZD0KLiIiIgorICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgIGlmIGluc3BlY3Qu
aXNnZW5lcmF0b3JmdW5jdGlvbihmdW5jKToKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYs
ICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBmdW5j
KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGV4dGVudGl0
eS5ldHlwZSA9M0Q9M0QgZXR5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnRpdHku
dmFsdWVzLnNldGRlZmF1bHQocnR5cGUsIHNldCgpKS5hZGQoc2VsZj0KLnJlY29yZC5leHRpZCkK
KyAgICAgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBkZWYgd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAg
ICAgIGV4dGVudGl0eSA9M0QgZnVuYyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAg
ICAgICAgaWYgZXh0ZW50aXR5IGFuZCBleHRlbnRpdHkuZXR5cGUgPTNEPTNEIGV0eXBlOgorICAg
ICAgICAgICAgICAgICAgICBleHRlbnRpdHkudmFsdWVzLnNldGRlZmF1bHQocnR5cGUsIHNldCgp
KS5hZGQoc2VsZi5yZWM9Cm9yZC5leHRpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZW50
aXR5CisgICAgICAgIHJldHVybiB3cmFwcyhmdW5jKSh3cmFwcGVyKQorICAgIHJldHVybiBkZWNv
cmF0b3IKKworCitkZWYgYWRkX2NpdGF0aW9uc19mb3IoZXR5cGUpOgorICAgICIiIkhhbmRsZSBp
bXBvcnQgb2YgY2l0YXRpb24gdGFnIGZvciBgZXR5cGVgIEV4dEVudGl0eSB0aGF0IGlzIHlpZWxk
ZWQ9CiBieQorICAgIGRlY29yYXRlZCBtZXRob2QuCisgICAgIiIiCisgICAgZGVmIGRlY29yYXRv
cihmdW5jKToKKyAgICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYs
IGVsZW0pOgorICAgICAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBmdW5jKHNlbGYsIGVsZW0pOgor
ICAgICAgICAgICAgICAgIGlmIGV4dGVudGl0eS5ldHlwZSA9M0Q9M0QgZXR5cGU6CisgICAgICAg
ICAgICAgICAgICAgIGZvciBjaXRhdGlvbiBpbiBzZWxmLmJ1aWxkX2NpdGF0aW9uKGVsZW0pOgor
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50aXR5LnZhbHVlcy5zZXRkZWZhdWx0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdoYXNfY2l0YXRpb24nLCBzZXQoKSkuYWRkKGNpdGF0
aW9uLmV4dGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgY2l0YXRpb24KKyAgICAg
ICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIKKyAgICBy
ZXR1cm4gZGVjb3JhdG9yCisKKworZGVmIHJlcXVpcmVfdGFnKHRhZ25hbWUpOgorICAgICIiIk1l
dGhvZCBkZWNvcmF0b3IgaGFuZGxpbmcgYSBtYW5kYXRvcnkgdGFnIHdpdGhpbiBhIFhNTCBlbGVt
ZW50LiIiIgorICAgIGRlZiB3YXJuKHNlbGYsIGVsZW0pOgorICAgICAgICBzZWxmLmltcG9ydF9s
b2cucmVjb3JkX3dhcm5pbmcoCisgICAgICAgICAgICBzZWxmLl8oJ2V4cGVjdGluZyBhICVzIHRh
ZyBpbiBlbGVtZW50ICVzLCBmb3VuZCBub25lJykgJQorICAgICAgICAgICAgKHRhZ25hbWUsIGVs
ZW0udGFnKSwgbGluZT0zRGVsZW0uc291cmNlbGluZSkKKworICAgIGRlZiBkZWNvcmF0b3IoZnVu
Yyk6CisgICAgICAgICMgcHlsaW50OiBkaXNhYmxlPTNEcHJvdGVjdGVkLWFjY2VzcworICAgICAg
ICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgICAgICBkZWYg
d3JhcHBlZChzZWxmLCBlbGVtLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIGlm
IHNlbGYuX2VsZW1fZmluZChlbGVtLCB0YWduYW1lKSBpcyBOb25lOgorICAgICAgICAgICAgICAg
ICAgICB3YXJuKHNlbGYsIGVsZW0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgICAgIGZvciBleHRlbnRpdHkgaW4gZnVuYyhzZWxmLCBlbGVtLCAqYXJncywgKiprd2Fy
Z3MpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGRlZiB3cmFwcGVkKHNlbGYsIGVsZW0sICphcmdzLCAqKmt3YXJncyk6Cisg
ICAgICAgICAgICAgICAgaWYgc2VsZi5fZWxlbV9maW5kKGVsZW0sIHRhZ25hbWUpIGlzIE5vbmU6
CisgICAgICAgICAgICAgICAgICAgIHdhcm4oc2VsZiwgZWxlbSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyhzZWxmLCBlbGVtLCAq
YXJncywgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiB3cmFwcyhmdW5jKSh3cmFwcGVkKQorCisg
ICAgcmV0dXJuIGRlY29yYXRvcgorCisKK2RlZiB0cmFjZV9leHRlbnRpdHkoaW5zdGFuY2UpOgor
ICAgICIiIkRlY29yYXRvciBmb3IgYGJ1aWxkX2AgbWV0aG9kcyB0cmFjaW5nIEV4dEVudGl0aWVz
IGJ1aWx0IGZyb20gYSBnaXY9CmVuCisgICAgWE1MIGVsZW1lbnQuCisgICAgIiIiCisgICAgZGVm
IGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgaWYgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9u
KGZ1bmMpOgorICAgICAgICAgICAgZGVmIHdyYXBwZXIoZWxlbSwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgICAgICAgICBmb3IgZXh0ZW50aXR5IGluIGZ1bmMoZWxlbSwgKmFyZ3MsICoqa3dh
cmdzKToKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UucmVjb3JkX3Zpc2l0ZWQoZWxlbSwg
ZXh0ZW50aXR5KQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKGVsZW0sICphcmdzLCAqKmt3YXJncyk6Cisg
ICAgICAgICAgICAgICAgZXh0ZW50aXR5ID0zRCBmdW5jKGVsZW0sICphcmdzLCAqKmt3YXJncykK
KyAgICAgICAgICAgICAgICBpZiBleHRlbnRpdHkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAg
ICAgICAgIGluc3RhbmNlLnJlY29yZF92aXNpdGVkKGVsZW0sIGV4dGVudGl0eSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXh0ZW50aXR5CisgICAgICAgIHJldHVybiB3cmFwcyhmdW5jKSh3cmFw
cGVyKQorICAgIHJldHVybiBkZWNvcmF0b3IKKworCitkZWYgZXF1aXZhbGVudF9jb25jZXB0KHRh
Z25hbWUsIGV0eXBlKToKKyAgICAiIiJNZXRob2QgZGVjb3JhdG9yIGluZGljYXRpbmcgdGhhdCBh
IHN1Yi10YWcgbWF5IGhhdmUgYSB2b2NhYnVsYXJ5U291PQpyY2UgYXR0cmlidXRlIGluZGljYXRp
bmcKKyAgICB0aGF0IGEgcmVsYXRpb24gdG8gc29tZSBFeHRlcm5hbFVyaSBvYmplY3Qgc2hvdWxk
IGJlIGRyb3duIGZyb20gYW55IGVuPQp0aXR5IG9mIHR5cGUgYGV0eXBlYCBidWlsdAorICAgIGJ5
IGRlY29yYXRlZCBtZXRob2QuCisgICAgIiIiCisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAg
ICAgICAgQHdyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHNlbGYsIGVsZW0sICphcmdz
LCAqKmt3YXJncyk6CisgICAgICAgICAgICBzdWJlbGVtID0zRCBzZWxmLl9lbGVtX2ZpbmQoZWxl
bSwgdGFnbmFtZSkKKyAgICAgICAgICAgIGlmIHN1YmVsZW0gaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICAgICAgZXh0aWQgPTNEIHN1YmVsZW0uYXR0cmliLmdldCgndm9jYWJ1bGFyeVNvdXJjZScp
CisgICAgICAgICAgICAgICAgaWYgZXh0aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgIHlpZWxkIGV4dGVybmFsX3VyaShleHRpZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgZXh0aWQgPTNEIE5vbmUKKworICAgICAgICAgICAgZGVmIHVwZGF0ZV9leHRlbnRp
dHkoZXh0ZW50aXR5KToKKyAgICAgICAgICAgICAgICBpZiBleHRpZCBpcyBub3QgTm9uZSBhbmQg
ZXh0ZW50aXR5LmV0eXBlID0zRD0zRCBldHlwZToKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW50
aXR5LnZhbHVlc1snZXF1aXZhbGVudF9jb25jZXB0J10gPTNEIHNldChbZXh0aWRdKQorCisgICAg
ICAgICAgICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgICAg
ICAgICAgZm9yIGV4dGVudGl0eSBpbiBmdW5jKHNlbGYsIGVsZW0sICphcmdzLCAqKmt3YXJncyk6
CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9leHRlbnRpdHkoZXh0ZW50aXR5KQorICAgICAg
ICAgICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgZXh0ZW50aXR5ID0zRCBmdW5jKHNlbGYsIGVsZW0sICphcmdzLCAqKmt3YXJncykK
KyAgICAgICAgICAgICAgICB1cGRhdGVfZXh0ZW50aXR5KGV4dGVudGl0eSkKKyAgICAgICAgICAg
ICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgcmV0dXJuIHdyYXBwZWQKKyAgICByZXR1cm4g
ZGVjb3JhdG9yCisKKworY2xhc3MgRUFDQ1BGSW1wb3J0ZXIob2JqZWN0KToKKyAgICAiIiJJbXBv
cnRlciBmb3IgRUFDLUNQRiBkYXRhLgorCisgICAgVGhlIGltcG9ydGVyIHdpbGwgZ2VuZXJhdGUg
YGV4dGlkYHMgdXNpbmcgdGhlIGBleHRpZF9nZW5lcmF0b3JgIGZ1bmN0aT0Kb24KKyAgICBpZiBz
cGVjaWZpZWQgb3IgdXNlIGB1dWlkLnV1aWQ0YCB0byBnZW5lcmF0ZSB1bmlxdWUgYGV4dGlkYHMu
CisKKyAgICBEdXJpbmcgaW1wb3J0IHRoZSBgcmVjb3JkYCBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRo
ZSBleHRlcm5hbCBlbnRpdHkgb2YgPQp0aGUKKyAgICBpbXBvcnRlZCBBdXRob3JpdHlSZWNvcmQu
CisKKyAgICBSZWY6IGh0dHA6Ly9lYWMuc3RhYXRzYmlibGlvdGhlay1iZXJsaW4uZGUvZmlsZWFk
bWluL3VzZXJfdXBsb2FkL3NjaGVtPQphL2NwZlRhZ0xpYnJhcnkuaHRtbAorICAgICIiIgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBmcGF0aCwgaW1wb3J0X2xvZywgXywgZXh0aWRfZ2VuZXJhdG9y
PTNETm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyZWUgPTNEIGV0cmVlLnBhcnNl
KGZwYXRoKQorICAgICAgICBleGNlcHQgZXRyZWUuWE1MU3ludGF4RXJyb3IgYXMgZXhjOgorICAg
ICAgICAgICAgcmFpc2UgSW52YWxpZFhNTChzdHIoZXhjKSkKKyAgICAgICAgc2VsZi5fID0zRCBf
CisgICAgICAgIHNlbGYuX3Jvb3QgPTNEIHRyZWUuZ2V0cm9vdCgpCisgICAgICAgIHNlbGYubmFt
ZXNwYWNlcyA9M0Qgc2VsZi5fcm9vdC5uc21hcC5jb3B5KCkKKyAgICAgICAgc2VsZi5uYW1lc3Bh
Y2VzWydlYWMnXSA9M0Qgc2VsZi5uYW1lc3BhY2VzLnBvcChOb25lKQorICAgICAgICBzZWxmLm5h
bWVzcGFjZXMuc2V0ZGVmYXVsdCgneGxpbmsnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu
aycpCisgICAgICAgIHNlbGYuaW1wb3J0X2xvZyA9M0QgaW1wb3J0X2xvZworICAgICAgICBpZiBl
eHRpZF9nZW5lcmF0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGRlZiBleHRpZF9nZW5lcmF0b3Io
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHV1aWQ0KCkpCisgICAgICAgIHNlbGYuX2dl
bl9leHRpZCA9M0QgZXh0aWRfZ2VuZXJhdG9yCisgICAgICAgIHNlbGYucmVjb3JkID0zRCBFeHRF
bnRpdHkoJ0F1dGhvcml0eVJlY29yZCcsIE5vbmUsIHt9KQorICAgICAgICAjIFN0b3JlIGEgbWFw
cGluZyBvZiBYTUwgZWxlbWVudHMgdG8gcHJvZHVjZWQgRXh0RW50aXRpZXMKKyAgICAgICAgc2Vs
Zi5fdmlzaXRlZCA9M0Qge30KKworICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUp
OgorICAgICAgICBhdHRyID0zRCBzdXBlcihFQUNDUEZJbXBvcnRlciwgc2VsZikuX19nZXRhdHRy
aWJ1dGVfXyhuYW1lKQorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ2J1aWxkXycpOgorICAg
ICAgICAgICAgcmV0dXJuIHRyYWNlX2V4dGVudGl0eShzZWxmKShhdHRyKQorICAgICAgICByZXR1
cm4gYXR0cgorCisgICAgZGVmIHJlY29yZF92aXNpdGVkKHNlbGYsIGVsZW0sIGV4dGVudGl0eSk6
CisgICAgICAgIGFzc2VydCBleHRlbnRpdHkuZXh0aWQsIGV4dGVudGl0eQorICAgICAgICBzZWxm
Ll92aXNpdGVkLnNldGRlZmF1bHQoZWxlbSwgc2V0KFtdKSkuYWRkKGV4dGVudGl0eS5leHRpZCkK
KworICAgIGRlZiBub3RfdmlzaXRlZChzZWxmKToKKyAgICAgICAgIiIiWWllbGQgKHRhZ25hbWUs
IHNvdXJjZWxpbmUpIGl0ZW1zIGNvcnJlc3BvbmRpbmcgdG8gWE1MIGVsZW1lbnRzPQogbm90Cisg
ICAgICAgIHVzZWQgdG8gYnVpbGQgYW55IEV4dEVudGl0eS4KKyAgICAgICAgIiIiCisgICAgICAg
IHZpc2l0ZWQgPTNEIHNlbGYuX3Zpc2l0ZWQKKyAgICAgICAgbnMgPTNEIHNlbGYubmFtZXNwYWNl
c1snZWFjJ10KKyAgICAgICAgcXVldWUgPTNEIGRlcXVlKHNlbGYuX3Jvb3QpCisgICAgICAgICMg
VGhlc2UgZWxlbWVudHMgY29udGFpbiBvdGhlciBvbmVzIHdoaWNoIGFyZSBrbm93biB0byBiZSBo
YW5kbGVkLgorICAgICAgICBjb250YWluZXJfdGFncyA9M0QgWydjb250cm9sJywgJ2NwZkRlc2Ny
aXB0aW9uJywgJ2lkZW50aXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haW50ZW5h
bmNlSGlzdG9yeScsICdzb3VyY2VzJywgJ2Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ21hbmRhdGVzJywgJ3BsYWNlcycsICdvY2N1cGF0aW9ucycsICdyZWxhdGlvbnMn
XQorICAgICAgICBjb250YWluZXJzID0zRCBbJ3t7ezB9fX17MX0nLmZvcm1hdChucywgdGFnKSBm
b3IgdGFnIGluIGNvbnRhaW5lcl89CnRhZ3NdCisgICAgICAgIHdoaWxlIHF1ZXVlOgorICAgICAg
ICAgICAgZWxlbSA9M0QgcXVldWUucG9wbGVmdCgpCisgICAgICAgICAgICBpZiAobm90IGlzaW5z
dGFuY2UoZWxlbSwgZXRyZWUuX0VsZW1lbnQpIG9yCisgICAgICAgICAgICAgICAgICAgIGlzaW5z
dGFuY2UoZWxlbSwgZXRyZWUuX0NvbW1lbnQpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgZWxlbSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgICAgIGNvbnRpbnVl
CisgICAgICAgICAgICBpZiBlbGVtLnRhZyBub3QgaW4gY29udGFpbmVyczoKKyAgICAgICAgICAg
ICAgICB5aWVsZCBlbGVtLnRhZy5yZXBsYWNlKCd7JyArIG5zICsgJ30nLCAnJyksIGVsZW0uc291
cmNlbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBxdWV1ZS5leHRlbmQo
ZWxlbSkKKworICAgIGRlZiBfZWxlbV9maW5kKHNlbGYsIGVsZW0sIHBhdGgsIG1ldGhvZD0zRCdm
aW5kJyk6CisgICAgICAgICIiIldyYXBwZXIgYXJvdW5kIGx4bWwuZXRyZWUuRWxlbWVudCBmaW5k
KiBtZXRob2RzIHRvIHN1cHBvcnQKKyAgICAgICAgbmFtZXNwYWNlcyBhbHNvIGZvciBvbGQgbHht
bCB2ZXJzaW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGZpbmRlciA9M0QgZ2V0YXR0cihlbGVt
LCBtZXRob2QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmaW5kZXIocGF0aCwg
c2VsZi5uYW1lc3BhY2VzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAg
IyBJbiBvbGQgbHhtbCwgZmluZCgpIGRvZXMgbm90IGFjY2VwdCBuYW1lc3BhY2VzIGFyZ3VtZW50
LgorICAgICAgICAgICAgcGF0aCA9M0QgcGF0aC5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICB0
cnk6CisgICAgICAgICAgICAgICAgbnMsIHBhdGggPTNEIHBhdGgKKyAgICAgICAgICAgIGV4Y2Vw
dCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICMgcGF0aCBoYXMgbm8gbmFtZXNwYWNlCisg
ICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBw
YXRoID0zRCAneycgKyBzZWxmLm5hbWVzcGFjZXNbbnNdICsgJ30nICsgcGF0aAorICAgICAgICAg
ICAgcmV0dXJuIGZpbmRlcihwYXRoKQorCisgICAgZGVmIF9lbGVtX2ZpbmRhbGwoc2VsZiwgKmFy
Z3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fZWxlbV9maW5kKCphcmdzLCBtZXRob2Q9M0QnZmlu
ZGFsbCcpCisKKyAgICBAZmlsdGVyX2VtcHR5CisgICAgZGVmIGV4dGVybmFsX2VudGl0aWVzKHNl
bGYpOgorICAgICAgICAiIiJQYXJzZSBhIEVBQyBYTUwgZmlsZSB0byBhbmQgeWllbGQgZXh0ZXJu
YWwgZW50aXRpZXMuIiIiCisgICAgICAgICMgY29udHJvbCBlbGVtZW50LgorICAgICAgICBjb250
cm9sID0zRCBzZWxmLl9lbGVtX2ZpbmQoc2VsZi5fcm9vdCwgJ2VhYzpjb250cm9sJykKKyAgICAg
ICAgZm9yIGV4dGVudGl0eSBpbiBzZWxmLnBhcnNlX2NvbnRyb2woY29udHJvbCk6CisgICAgICAg
ICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgIyBSZWNvcmRzIChpZGVudGl0eSB0YWdzKSBh
cmUgd2l0aGluIGNwZkRlc2NyaXB0aW9uIHRhZy4KKyAgICAgICAgY3BmX2Rlc2MgPTNEIHNlbGYu
X2VsZW1fZmluZChzZWxmLl9yb290LCAnZWFjOmNwZkRlc2NyaXB0aW9uJykKKyAgICAgICAgaWYg
Y3BmX2Rlc2MgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdUYWcoJ2NwZkRlc2Ny
aXB0aW9uJykKKyAgICAgICAgIyBpZGVudGl0eSBlbGVtZW50LgorICAgICAgICBpZGVudGl0eSA9
M0Qgc2VsZi5fZWxlbV9maW5kKGNwZl9kZXNjLCAnZWFjOmlkZW50aXR5JykKKyAgICAgICAgaWYg
aWRlbnRpdHkgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE1pc3NpbmdUYWcoJ2lkZW50aXR5
JywgJ2NwZkRlc2NyaXB0aW9uJykKKyAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBzZWxmLnBhcnNl
X2lkZW50aXR5KGlkZW50aXR5KToKKyAgICAgICAgICAgIHlpZWxkIGV4dGVudGl0eQorICAgICAg
ICAjIGRlc2NyaXB0aW9uIGVsZW1lbnQuCisgICAgICAgIGRlc2NyaXB0aW9uID0zRCBzZWxmLl9l
bGVtX2ZpbmQoY3BmX2Rlc2MsICdlYWM6ZGVzY3JpcHRpb24nKQorICAgICAgICBpZiBkZXNjcmlw
dGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBleHRlbnRpdHkgaW4gc2VsZi5wYXJz
ZV9kZXNjcmlwdGlvbihkZXNjcmlwdGlvbik6CisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50
aXR5CisgICAgICAgICMgcmVsYXRpb25zIGVsZW1lbnQuCisgICAgICAgIGZvciBleHRlbnRpdHkg
aW4gc2VsZi5wYXJzZV9yZWxhdGlvbnMoY3BmX2Rlc2MpOgorICAgICAgICAgICAgeWllbGQgZXh0
ZW50aXR5CisgICAgICAgICMgUmVjb3JkIGlzIGNvbXBsZXRlLgorICAgICAgICBzZWxmLnJlY29y
ZF92aXNpdGVkKHNlbGYuX3Jvb3QsIHNlbGYucmVjb3JkKQorICAgICAgICB5aWVsZCBzZWxmLnJl
Y29yZAorCisgICAgZGVmIHBhcnNlX2lkZW50aXR5KHNlbGYsIGlkZW50aXR5KToKKyAgICAgICAg
IiIiUGFyc2UgdGhlIGBpZGVudGl0eWAgdGFnIGFuZCB5aWVsZCBleHRlcm5hbCBlbnRpdGllcywg
cG9zc2libHkKKyAgICAgICAgdXBkYXRpbmcgcmVjb3JkJ3MgYHZhbHVlc2AgZGljdC4KKyAgICAg
ICAgIiIiCisgICAgICAgICMgZW50aXR5SWQKKyAgICAgICAgaXNuaSA9M0Qgc2VsZi5fZWxlbV9m
aW5kKGlkZW50aXR5LCAnZWFjOmVudGl0eUlkJykKKyAgICAgICAgaWYgaXNuaSBpcyBub3QgTm9u
ZSBhbmQgaXNuaS50ZXh0OgorICAgICAgICAgICAgc2VsZi5yZWNvcmRfdmlzaXRlZChpc25pLCBz
ZWxmLnJlY29yZCkKKyAgICAgICAgICAgIHNlbGYucmVjb3JkLnZhbHVlc1snaXNuaSddID0zRCBz
ZXQoW3VuaWNvZGUoaXNuaS50ZXh0KV0pCisgICAgICAgICMgZW50aXR5VHlwZQorICAgICAgICBh
a2luZCA9M0Qgc2VsZi5fZWxlbV9maW5kKGlkZW50aXR5LCAnZWFjOmVudGl0eVR5cGUnKQorICAg
ICAgICBpZiBha2luZCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1RhZygnZW50
aXR5VHlwZScsICdpZGVudGl0eScpCisgICAgICAgIGFnZW50X2tpbmQgPTNEIHNlbGYuYnVpbGRf
YWdlbnRfa2luZChha2luZCkKKyAgICAgICAgeWllbGQgYWdlbnRfa2luZAorICAgICAgICBzZWxm
LnJlY29yZC52YWx1ZXNbJ2FnZW50X2tpbmQnXSA9M0Qgc2V0KFthZ2VudF9raW5kLmV4dGlkXSkK
KyAgICAgICAgZm9yIG5hbWVfZW50cnkgaW4gc2VsZi5fZWxlbV9maW5kYWxsKGlkZW50aXR5LCAn
ZWFjOm5hbWVFbnRyeScpOgorICAgICAgICAgICAgc2VsZi5yZWNvcmRfdmlzaXRlZChuYW1lX2Vu
dHJ5LCBzZWxmLnJlY29yZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2VsZW1fZmluZChuYW1lX2Vu
dHJ5LCAnZWFjOmF1dGhvcml6ZWRGb3JtJykgaXMgbm90IE5vPQpuZToKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnID0zRCBzZWxmLl8oJ2ZvdW5k
IG5vIG5hbWVFbnRyeSB0YWcgd2l0aGluIGFuIGF1dGhvcml6ZWRGb3I9Cm0gJworICAgICAgICAg
ICAgICAgICAgICAgICAgICdlbGVtZW50LCB1c2luZyAlcyBpbnN0ZWFkJykgJSBuYW1lX2VudHJ5
CisgICAgICAgICAgICBzZWxmLmltcG9ydF9sb2cucmVjb3JkX2luZm8obXNnLCBsaW5lPTNEbmFt
ZV9lbnRyeS5zb3VyY2VsaW5lKQorICAgICAgICBwYXJ0ID0zRCBzZWxmLl9lbGVtX2ZpbmQobmFt
ZV9lbnRyeSwgJ2VhYzpwYXJ0JykKKyAgICAgICAgc2VsZi5yZWNvcmQudmFsdWVzWyduYW1lJ10g
PTNEIHNldChbdW5pY29kZShwYXJ0LnRleHQpXSkKKworICAgIEBmaWx0ZXJfbm9uZQorICAgIGRl
ZiBwYXJzZV9kZXNjcmlwdGlvbihzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgICIiIlBhcnNl
IHRoZSBgZGVzY3JpcHRpb25gIHRhZyBhbmQgeWllbGQgZXh0ZXJuYWwgZW50aXRpZXMsIHBvc3Np
Yj0KbHkKKyAgICAgICAgdXBkYXRpbmcgcmVjb3JkJ3MgYHZhbHVlc2AgZGljdC4KKyAgICAgICAg
IiIiCisgICAgICAgICMgZGF0ZXMuCisgICAgICAgIGRhdGVyYW5nZSA9M0QgZGVzY3JpcHRpb24u
eHBhdGgoJ2VhYzpleGlzdERhdGVzL2VhYzpkYXRlUmFuZ2UnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzPTNEc2VsZi5uYW1lc3BhY2VzKQorICAgICAg
ICBpZiBkYXRlcmFuZ2U6CisgICAgICAgICAgICBlbGVtID0zRCBkYXRlcmFuZ2VbMF0KKyAgICAg
ICAgICAgIHNlbGYucmVjb3JkX3Zpc2l0ZWQoZWxlbSwgc2VsZi5yZWNvcmQpCisgICAgICAgICAg
ICBzZWxmLnJlY29yZF92aXNpdGVkKGVsZW0uZ2V0cGFyZW50KCksIHNlbGYucmVjb3JkKQorICAg
ICAgICAgICAgZGF0ZXMgPTNEIHNlbGYucGFyc2VfZGF0ZXJhbmdlKGVsZW0pCisgICAgICAgICAg
ICBpZiBkYXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLnJlY29yZC52YWx1ZXMudXBkYXRlKGRh
dGVzKQorICAgICAgICAjIGFkZHJlc3MuCisgICAgICAgIGZvciBwbGFjZSBpbiBzZWxmLmZpbmRf
bmVzdGVkKGRlc2NyaXB0aW9uLCAnZWFjOnBsYWNlJywgJ2VhYzpwbGFjZT0KcycpOgorICAgICAg
ICAgICAgZm9yIGV4dGVudGl0eSBpbiBzZWxmLmJ1aWxkX3BsYWNlKHBsYWNlKToKKyAgICAgICAg
ICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgIyBhZGRpdGlvbmFsIEVBQy1DUEYgaW5m
b3JtYXRpb24uCisgICAgICAgIGZvciBsZWdhbF9zdGF0dXMgaW4gc2VsZi5fZWxlbV9maW5kYWxs
KGRlc2NyaXB0aW9uLCAnZWFjOmxlZ2FsU3RhdD0KdXMnKToKKyAgICAgICAgICAgIGZvciBleHRl
bnRpdHkgaW4gc2VsZi5idWlsZF9sZWdhbF9zdGF0dXMobGVnYWxfc3RhdHVzKToKKyAgICAgICAg
ICAgICAgICB5aWVsZCBleHRlbnRpdHkKKyAgICAgICAgIyBtYW5kYXRlCisgICAgICAgIGZvciBt
YW5kYXRlIGluIHNlbGYuZmluZF9uZXN0ZWQoZGVzY3JpcHRpb24sICdlYWM6bWFuZGF0ZScsICdl
YWM6bT0KYW5kYXRlcycpOgorICAgICAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBzZWxmLmJ1aWxk
X21hbmRhdGUobWFuZGF0ZSk6CisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisgICAg
ICAgICMgaGlzdG9yeQorICAgICAgICBmb3IgaGlzdG9yeSBpbiBzZWxmLl9lbGVtX2ZpbmRhbGwo
ZGVzY3JpcHRpb24sICdlYWM6YmlvZ0hpc3QnKToKKyAgICAgICAgICAgIGZvciBleHRlbnRpdHkg
aW4gc2VsZi5idWlsZF9oaXN0b3J5KGhpc3RvcnkpOgorICAgICAgICAgICAgICAgIHlpZWxkIGV4
dGVudGl0eQorICAgICAgICAjIHN0cnVjdHVyZQorICAgICAgICBmb3Igc3RydWN0dXJlIGluIHNl
bGYuX2VsZW1fZmluZGFsbChkZXNjcmlwdGlvbiwgJ2VhYzpzdHJ1Y3R1cmVPckc9CmVuZWFsb2d5
Jyk6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmJ1aWxkX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisg
ICAgICAgICMgZnVuY3Rpb24KKyAgICAgICAgZm9yIGZ1bmN0aW9uIGluIHNlbGYuZmluZF9uZXN0
ZWQoZGVzY3JpcHRpb24sICdlYWM6ZnVuY3Rpb24nLCAnZWFjPQo6ZnVuY3Rpb25zJyk6CisgICAg
ICAgICAgICBmb3IgZXh0ZW50aXR5IGluIHNlbGYuYnVpbGRfZnVuY3Rpb24oZnVuY3Rpb24pOgor
ICAgICAgICAgICAgICAgIHlpZWxkIGV4dGVudGl0eQorICAgICAgICAjIG9jY3VwYXRpb24KKyAg
ICAgICAgZm9yIG9jY3VwYXRpb24gaW4gc2VsZi5maW5kX25lc3RlZChkZXNjcmlwdGlvbiwgJ2Vh
YzpvY2N1cGF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZWFjOm9jY3VwYXRpb25zJyk6CisgICAgICAgICAgICBmb3IgZXh0ZW50aXR5IGluIHNlbGYu
YnVpbGRfb2NjdXBhdGlvbihvY2N1cGF0aW9uKToKKyAgICAgICAgICAgICAgICB5aWVsZCBleHRl
bnRpdHkKKyAgICAgICAgIyBnZW5lcmFsIGNvbnRleHQKKyAgICAgICAgZm9yIGNvbnRleHQgaW4g
c2VsZi5fZWxlbV9maW5kYWxsKGRlc2NyaXB0aW9uLCAnZWFjOmdlbmVyYWxDb250ZXh0PQonKToK
KyAgICAgICAgICAgIGZvciBleHRlbnRpdHkgaW4gc2VsZi5idWlsZF9nZW5lcmFsY29udGV4dChj
b250ZXh0KToKKyAgICAgICAgICAgICAgICB5aWVsZCBleHRlbnRpdHkKKworICAgIGRlZiBmaW5k
X25lc3RlZChzZWxmLCBlbGVtLCB0YWduYW1lLCBpbm5lcnRhZyk6CisgICAgICAgICIiIlJldHVy
biBhIGxpc3Qgb2YgZWxlbWVudCB3aXRoIGB0YWduYW1lYCB3aXRoaW4gYGVsZW1lbnRgIHBvc3Np
Yj0KbHkKKyAgICAgICAgbmVzdGVkIHdpdGhpbiBgaW5uZXJ0YWdgLgorICAgICAgICAiIiIKKyAg
ICAgICAgYWxsX2VsZW1zID0zRCBzZWxmLl9lbGVtX2ZpbmRhbGwoZWxlbSwgdGFnbmFtZSkKKyAg
ICAgICAgd3JhcHBlciA9M0Qgc2VsZi5fZWxlbV9maW5kKGVsZW0sIGlubmVydGFnKQorICAgICAg
ICBpZiB3cmFwcGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYWxsX2VsZW1zLmV4dGVuZChz
ZWxmLl9lbGVtX2ZpbmRhbGwod3JhcHBlciwgdGFnbmFtZSkpCisgICAgICAgIHJldHVybiBhbGxf
ZWxlbXMKKworICAgIGRlZiBwYXJzZV90YWdfZGVzY3JpcHRpb24oc2VsZiwgZWxlbSwgdGFnbmFt
ZT0zRCdlYWM6ZGVzY3JpcHRpdmVOb3RlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0dHJuYW1lPTNEJ2Rlc2NyaXB0aW9uJyk6CisgICAgICAgICIiIlJldHVybiBhIGRpY3Qgd2l0
aCBgYXR0cm5hbWVgIGFuZCBgYXR0cm5hbWVgX2Zvcm1hdCByZXRyaWV2ZWQgZj0Kcm9tCisgICAg
ICAgIGEgZGVzY3JpcHRpb24tbGlrZSB0YWcuCisgICAgICAgICIiIgorICAgICAgICBlbGVtcyA9
M0Qgc2VsZi5fZWxlbV9maW5kYWxsKGVsZW0sIHRhZ25hbWUpCisgICAgICAgIGlmIGxlbihlbGVt
cykgPiAxOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRfbG9nLnJlY29yZF93YXJuaW5nKHNlbGYu
XygKKyAgICAgICAgICAgICAgICAnZm91bmQgbXVsdGlwbGUgJXMgdGFnIHdpdGhpbiAlcyBlbGVt
ZW50LCBvbmx5IG9uZSB3aWxsIGJlPQogJworICAgICAgICAgICAgICAgICd1c2VkLicpICUgKHRh
Z25hbWUsIGVsZW0udGFnKSwgbGluZT0zRGVsZW0uc291cmNlbGluZSkKKyAgICAgICAgZWxlbSA9
M0QgZWxlbXNbMF0gaWYgZWxlbXMgZWxzZSBOb25lCisgICAgICAgIHZhbHVlcyA9M0Qge30KKyAg
ICAgICAgaWYgZWxlbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBhcnNlZCA9M0Qgc2VsZi5w
YXJzZV90YWdfY29udGVudChlbGVtKQorICAgICAgICAgICAgdmFsdWVzLnVwZGF0ZSh6aXAoKGF0
dHJuYW1lLCBhdHRybmFtZSArICdfZm9ybWF0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2V0KFtwXSkgZm9yIHAgaW4gcGFyc2VkKSkpCisgICAgICAgIHJldHVybiB2YWx1ZXMK
KworICAgIGRlZiBwYXJzZV90YWdfY29udGVudChzZWxmLCBlbGVtKToKKyAgICAgICAgIiIiUGFy
c2UgdGhlIGNvbnRlbnQgb2YgYW4gZWxlbWVudCBiZSBpdCB0ZXh0IG9mIEhUTUwgYW5kIHJldHVy
biB0PQpoZQorICAgICAgICBjb250ZW50IGFsb25nIHdpdGggTUlNRSB0eXBlLgorICAgICAgICAi
IiIKKyAgICAgICAgYXNzZXJ0IGVsZW0gaXMgbm90IE5vbmUsICd1bmV4cGVjdGVkIGVtcHR5IGVs
ZW1lbnQnCisgICAgICAgIHRleHQgPTNEIGVsZW0udGV4dC5zdHJpcCgpIGlmIGVsZW0udGV4dCBl
bHNlIE5vbmUKKyAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgIGRlc2MsIGRlc2NfZm9ybWF0
ID0zRCB1bmljb2RlKHRleHQpLCB1J3RleHQvcGxhaW4nCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBwdGFnID0zRCAneyUoZWFjKXN9cCcgJSBzZWxmLm5hbWVzcGFjZXMKKyAgICAgICAgICAg
IGRlc2MgPTNEICdcbicuam9pbihldHJlZS50b3N0cmluZyhjaGlsZCwgZW5jb2Rpbmc9M0R1bmlj
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9
M0QnaHRtbCcpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNoaWxk
IGluIGVsZW0uaXRlcmNoaWxkcmVuKHB0YWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGxlbihjaGlsZCkgIT0zRCAwIG9yIGNoaWxkLnRleHQpCisgICAgICAgICAgICBpZiBkZXNj
OgorICAgICAgICAgICAgICAgIGRlc2NfZm9ybWF0ID0zRCB1J3RleHQvaHRtbCcKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfbG9nLnJlY29yZF93YXJuaW5n
KHNlbGYuXygKKyAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnQgJXMgaGFzIG5vIHRleHQgbm9y
IGNoaWxkcmVuLCBubyBjb250ZW50ICcKKyAgICAgICAgICAgICAgICAgICAgJ2V4dHJhY3RlZCcp
ICUgZWxlbS50YWcsIGxpbmU9M0RlbGVtLnNvdXJjZWxpbmUpCisgICAgICAgICAgICAgICAgZGVz
YywgZGVzY19mb3JtYXQgPTNEIE5vbmUsIE5vbmUKKyAgICAgICAgcmV0dXJuIGRlc2MsIGRlc2Nf
Zm9ybWF0CisKKyAgICBAZWxlbV9tYXliZV9ub25lCisgICAgZGVmIGJ1aWxkX2FnZW50X2tpbmQo
c2VsZiwgZWxlbSk6CisgICAgICAgICIiIkJ1aWxkIGEgQWdlbnRLaW5kIGV4dGVybmFsIGVudGl0
eSIiIgorICAgICAgICAjIE1hcCBFQUMgZW50aXR5IHR5cGVzIHRvIG91ciB0ZXJtaW5vbGd5Lgor
ICAgICAgICBraW5kID0zRCBUWVBFX01BUFBJTkcuZ2V0KGVsZW0udGV4dCwgZWxlbS50ZXh0KQor
ICAgICAgICBhZ2VudGtpbmRfaWQgPTNEICdhZ2VudGtpbmQvJyArIGtpbmQKKyAgICAgICAgcmV0
dXJuIEV4dEVudGl0eSgnQWdlbnRLaW5kJywgYWdlbnRraW5kX2lkLCB7J25hbWUnOiBzZXQoW3Vu
aWNvZGUoPQpraW5kKV0pfSkKKworICAgIEBlbGVtX21heWJlX25vbmUKKyAgICBAcmVsYXRlX3Rv
X3JlY29yZF90aHJvdWdoKCdMZWdhbFN0YXR1cycsICdsZWdhbF9zdGF0dXNfYWdlbnQnKQorICAg
IEBmaWx0ZXJfZW1wdHkKKyAgICBAYWRkX2NpdGF0aW9uc19mb3IoJ0xlZ2FsU3RhdHVzJykKKyAg
ICBAZXF1aXZhbGVudF9jb25jZXB0KCdlYWM6dGVybScsICdMZWdhbFN0YXR1cycpCisgICAgZGVm
IGJ1aWxkX2xlZ2FsX3N0YXR1cyhzZWxmLCBlbGVtLCAqKmt3YXJncyk6CisgICAgICAgICIiIkJ1
aWxkIGEgYExlZ2FsU3RhdHVzYCBleHRlcm5hbCBlbnRpdHkuCisKKyAgICAgICAgRXh0cmEgYGt3
YXJnc2AgYXJlIHBhc3NlZCB0byBgcGFyc2VfdGFnX2Rlc2NyaXB0aW9uYC4KKyAgICAgICAgIiIi
CisgICAgICAgIHZhbHVlcyA9M0Qge30KKyAgICAgICAgdGVybSA9M0Qgc2VsZi5fZWxlbV9maW5k
KGVsZW0sICdlYWM6dGVybScpCisgICAgICAgIGlmIHRlcm0gaXMgbm90IE5vbmUgYW5kIHRlcm0u
dGV4dDoKKyAgICAgICAgICAgIHZhbHVlc1sndGVybSddID0zRCBzZXQoW3VuaWNvZGUodGVybS50
ZXh0KV0pCisgICAgICAgIHZhbHVlcy51cGRhdGUoKipzZWxmLnBhcnNlX3RhZ19kZXNjcmlwdGlv
bihlbGVtLCAqKmt3YXJncykpCisgICAgICAgIGRhdGVlbGVtID0zRCBzZWxmLl9lbGVtX2ZpbmQo
ZWxlbSwgJ2VhYzpkYXRlUmFuZ2UnKQorICAgICAgICBkYXRlcyA9M0Qgc2VsZi5wYXJzZV9kYXRl
cmFuZ2UoZGF0ZWVsZW0pCisgICAgICAgIGlmIGRhdGVzOgorICAgICAgICAgICAgdmFsdWVzLnVw
ZGF0ZShkYXRlcykKKyAgICAgICAgbGVnYWxzdGF0dXMgPTNEIEV4dEVudGl0eSgnTGVnYWxTdGF0
dXMnLCBzZWxmLl9nZW5fZXh0aWQoKSwgdmFsdWVzKQorICAgICAgICBpZiBkYXRlZWxlbSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYucmVjb3JkX3Zpc2l0ZWQoZGF0ZWVsZW0sIGxlZ2Fs
c3RhdHVzKQorICAgICAgICB5aWVsZCBsZWdhbHN0YXR1cworCisgICAgQGVsZW1fbWF5YmVfbm9u
ZQorICAgIEByZWxhdGVfdG9fcmVjb3JkX3Rocm91Z2goJ01hbmRhdGUnLCAnbWFuZGF0ZV9hZ2Vu
dCcpCisgICAgQGZpbHRlcl9lbXB0eQorICAgIEBhZGRfY2l0YXRpb25zX2ZvcignTWFuZGF0ZScp
CisgICAgQGVxdWl2YWxlbnRfY29uY2VwdCgnZWFjOnRlcm0nLCAnTWFuZGF0ZScpCisgICAgZGVm
IGJ1aWxkX21hbmRhdGUoc2VsZiwgZWxlbSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJCdWlsZCBh
IGBNYW5kYXRlYCBleHRlcm5hbCBlbnRpdHkuCisKKyAgICAgICAgRXh0cmEgYGt3YXJnc2AgYXJl
IHBhc3NlZCB0byBgcGFyc2VfdGFnX2Rlc2NyaXB0aW9uYC4KKyAgICAgICAgIiIiCisgICAgICAg
IHZhbHVlcyA9M0Qge30KKyAgICAgICAgdGVybSA9M0Qgc2VsZi5fZWxlbV9maW5kKGVsZW0sICdl
YWM6dGVybScpCisgICAgICAgIGlmIHRlcm0gaXMgbm90IE5vbmUgYW5kIHRlcm0udGV4dDoKKyAg
ICAgICAgICAgIHZhbHVlc1sndGVybSddID0zRCBzZXQoW3VuaWNvZGUodGVybS50ZXh0KV0pCisg
ICAgICAgIHZhbHVlcy51cGRhdGUoKipzZWxmLnBhcnNlX3RhZ19kZXNjcmlwdGlvbihlbGVtLCAq
Kmt3YXJncykpCisgICAgICAgIGRhdGVlbGVtID0zRCBzZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2Vh
YzpkYXRlUmFuZ2UnKQorICAgICAgICBkYXRlcyA9M0Qgc2VsZi5wYXJzZV9kYXRlcmFuZ2UoZGF0
ZWVsZW0pCisgICAgICAgIGlmIGRhdGVzOgorICAgICAgICAgICAgdmFsdWVzLnVwZGF0ZShkYXRl
cykKKyAgICAgICAgeWllbGQgRXh0RW50aXR5KCdNYW5kYXRlJywgc2VsZi5fZ2VuX2V4dGlkKCks
IHZhbHVlcykKKworICAgIEBlbGVtX21heWJlX25vbmUKKyAgICBkZWYgYnVpbGRfY2l0YXRpb24o
c2VsZiwgZWxlbSk6CisgICAgICAgICIiIkJ1aWxkIGEgYENpdGF0aW9uYCBleHRlcm5hbCBlbnRp
dHkuIiIiCisgICAgICAgIGZvciBjaXRhdGlvbl9lbGVtIGluIHNlbGYuX2VsZW1fZmluZGFsbChl
bGVtLCAiZWFjOmNpdGF0aW9uIik6CisgICAgICAgICAgICBub3RlID0zRCBjaXRhdGlvbl9lbGVt
LnRleHQuc3RyaXAoKSBpZiBjaXRhdGlvbl9lbGVtLnRleHQgZWxzZT0KIHUnJworICAgICAgICAg
ICAgdXJpID0zRCBjaXRhdGlvbl9lbGVtLmF0dHJpYi5nZXQoJ3slKHhsaW5rKXN9aHJlZicgJSBz
ZWxmLm5hbWU9CnNwYWNlcykKKyAgICAgICAgICAgIGlmIG5vdCBub3RlIGFuZCBub3QgdXJpOgor
ICAgICAgICAgICAgICAgIG1zZyA9M0Qgc2VsZi5fKCdlbGVtZW50IHswfSBoYXMgbm8gdGV4dCBu
b3IgKHZhbGlkKSBsaW5rJyk9Ci5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGV0cmVlLnRv
c3RyaW5nKGNpdGF0aW9uX2VsZW0pKQorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0X2xvZy5y
ZWNvcmRfd2FybmluZyhtc2csIGxpbmU9M0RjaXRhdGlvbl9lbGVtLnM9Cm91cmNlbGluZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHZhbHVlcyA9M0Qge30KKyAgICAgICAg
ICAgIGlmIHVyaToKKyAgICAgICAgICAgICAgICB2YWx1ZXNbJ3VyaSddID0zRCBzZXQoW3VuaWNv
ZGUodXJpKV0pCisgICAgICAgICAgICBpZiBub3RlOgorICAgICAgICAgICAgICAgIHZhbHVlc1sn
bm90ZSddID0zRCBzZXQoW3VuaWNvZGUobm90ZSldKQorICAgICAgICAgICAgICAgIGlmIHUnPHNw
YW4+JyBpbiBub3RlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJ25vdGVfZm9ybWF0J10g
PTNEIHNldChbdSd0ZXh0L2h0bWwnXSkKKyAgICAgICAgICAgIHlpZWxkIEV4dEVudGl0eSgnQ2l0
YXRpb24nLCBzZWxmLl9nZW5fZXh0aWQoKSwgdmFsdWVzKQorCisgICAgQHJlbGF0ZV90b19yZWNv
cmRfdGhyb3VnaCgnSGlzdG9yeScsICdoaXN0b3J5X2FnZW50JykKKyAgICBAZmlsdGVyX2VtcHR5
CisgICAgQGFkZF9jaXRhdGlvbnNfZm9yKCdIaXN0b3J5JykKKyAgICBAZWxlbV9tYXliZV9ub25l
CisgICAgZGVmIGJ1aWxkX2hpc3Rvcnkoc2VsZiwgZWxlbSk6CisgICAgICAgICIiIkJ1aWxkIGEg
YEhpc3RvcnlgIGV4dGVybmFsIGVudGl0eS4iIiIKKyAgICAgICAgZGVzYywgZGVzY19mb3JtYXQg
PTNEIHNlbGYucGFyc2VfdGFnX2NvbnRlbnQoZWxlbSkKKyAgICAgICAgdmFsdWVzID0zRCB7fQor
ICAgICAgICBpZiBkZXNjOgorICAgICAgICAgICAgdmFsdWVzLnVwZGF0ZSh0ZXh0PTNEc2V0KFtk
ZXNjXSksIHRleHRfZm9ybWF0PTNEc2V0KFtkZXNjX2Zvcm09CmF0XSkpCisgICAgICAgIHlpZWxk
IEV4dEVudGl0eSgnSGlzdG9yeScsIHNlbGYuX2dlbl9leHRpZCgpLCB2YWx1ZXMpCisKKyAgICBA
ZWxlbV9tYXliZV9ub25lCisgICAgQHJlbGF0ZV90b19yZWNvcmRfdGhyb3VnaCgnU3RydWN0dXJl
JywgJ3N0cnVjdHVyZV9hZ2VudCcpCisgICAgZGVmIGJ1aWxkX3N0cnVjdHVyZShzZWxmLCBlbGVt
KToKKyAgICAgICAgIiIiQnVpbGQgYSBgU3RydWN0dXJlYCBleHRlcm5hbCBlbnRpdHkuIiIiCisg
ICAgICAgIGRlc2MsIGRlc2NfZm9ybWF0ID0zRCBzZWxmLnBhcnNlX3RhZ19jb250ZW50KGVsZW0p
CisgICAgICAgIGlmIGRlc2M6CisgICAgICAgICAgICB2YWx1ZXMgPTNEIHsnZGVzY3JpcHRpb24n
OiBzZXQoW2Rlc2NdKSwKKyAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb25fZm9ybWF0
Jzogc2V0KFtkZXNjX2Zvcm1hdF0pfQorICAgICAgICAgICAgcmV0dXJuIEV4dEVudGl0eSgnU3Ry
dWN0dXJlJywgc2VsZi5fZ2VuX2V4dGlkKCksIHZhbHVlcykKKworICAgIEByZWxhdGVfdG9fcmVj
b3JkX3Rocm91Z2goJ0FnZW50UGxhY2UnLCAncGxhY2VfYWdlbnQnKQorICAgIEBmaWx0ZXJfZW1w
dHkKKyAgICBAYWRkX2NpdGF0aW9uc19mb3IoJ0FnZW50UGxhY2UnKQorICAgIEBlcXVpdmFsZW50
X2NvbmNlcHQoJ2VhYzpwbGFjZUVudHJ5JywgJ0FnZW50UGxhY2UnKQorICAgIGRlZiBidWlsZF9w
bGFjZShzZWxmLCBlbGVtKToKKyAgICAgICAgIiIiQnVpbGQgYSBBZ2VudFBsYWNlIGV4dGVybmFs
IGVudGl0eSIiIgorICAgICAgICB2YWx1ZXMgPTNEIHt9CisgICAgICAgIHJvbGUgPTNEIHNlbGYu
X2VsZW1fZmluZChlbGVtLCAnZWFjOnBsYWNlUm9sZScpCisgICAgICAgIGlmIHJvbGUgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICB2YWx1ZXNbJ3JvbGUnXSA9M0Qgc2V0KFt1bmljb2RlKHJvbGUu
dGV4dCldKQorICAgICAgICBlbnRyeSA9M0Qgc2VsZi5fZWxlbV9maW5kKGVsZW0sICdlYWM6cGxh
Y2VFbnRyeScpCisgICAgICAgIGlmIGVudHJ5IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFs
dWVzWyduYW1lJ10gPTNEIHNldChbdW5pY29kZShlbnRyeS50ZXh0KV0pCisgICAgICAgIGZvciBh
ZGRyZXNzIGluIHNlbGYuX2VsZW1fZmluZGFsbChlbGVtLCAnZWFjOmFkZHJlc3MnKToKKyAgICAg
ICAgICAgIGZvciBleHRlbnRpdHkgaW4gc2VsZi5idWlsZF9hZGRyZXNzKGFkZHJlc3MpOgorICAg
ICAgICAgICAgICAgIHZhbHVlc1sncGxhY2VfYWRkcmVzcyddID0zRCBzZXQoW2V4dGVudGl0eS5l
eHRpZF0pCisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisgICAgICAgIHlpZWxkIEV4
dEVudGl0eSgnQWdlbnRQbGFjZScsIHNlbGYuX2dlbl9leHRpZCgpLCB2YWx1ZXMpCisKKyAgICBk
ZWYgYnVpbGRfYWRkcmVzcyhzZWxmLCBlbGVtKToKKyAgICAgICAgIiIiQnVpbGQgYFBvc3RhbEFk
ZHJlc3NgcyBleHRlcm5hbCBlbnRpdHkiIiIKKyAgICAgICAgYWRkcmVzc19lbnRpdHkgPTNEIHt9
CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2VsZW1fZmluZGFsbChlbGVtLCAnZWFjOmFkZHJl
c3NMaW5lJyk6CisgICAgICAgICAgICBpZiAnbG9jYWxUeXBlJyBpbiBsaW5lLmF0dHJpYjoKKyAg
ICAgICAgICAgICAgICBhdHRyID0zRCBkaWN0KGVhY2FkZHJlc3NfbWFwcGluZykuZ2V0KGxpbmUu
YXR0cmliWydsb2NhbFR5PQpwZSddKQorICAgICAgICAgICAgICAgIGlmIGF0dHI6CisgICAgICAg
ICAgICAgICAgICAgIGFkZHJlc3NfZW50aXR5LnNldGRlZmF1bHQoYXR0ciwgc2V0KCkpLmFkZCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUobGluZS50ZXh0KSkKKyAgICAgICAgeWll
bGQgRXh0RW50aXR5KCdQb3N0YWxBZGRyZXNzJywgc2VsZi5fZ2VuX2V4dGlkKCksIGFkZHJlc3Nf
ZW50aXR5KQorCisgICAgQHJlbGF0ZV90b19yZWNvcmRfdGhyb3VnaCgnQWdlbnRGdW5jdGlvbics
ICdmdW5jdGlvbl9hZ2VudCcpCisgICAgQGZpbHRlcl9lbXB0eQorICAgIEBhZGRfY2l0YXRpb25z
X2ZvcignQWdlbnRGdW5jdGlvbicpCisgICAgQGVxdWl2YWxlbnRfY29uY2VwdCgnZWFjOnRlcm0n
LCAnQWdlbnRGdW5jdGlvbicpCisgICAgZGVmIGJ1aWxkX2Z1bmN0aW9uKHNlbGYsIGVsZW0pOgor
ICAgICAgICAiIiJCdWlsZCBhIGBBZ2VudEZ1bmN0aW9uYHMgZXh0ZXJuYWwgZW50aXRpZXMiIiIK
KyAgICAgICAgdmFsdWVzID0zRCB7fQorICAgICAgICB0ZXJtID0zRCBzZWxmLl9lbGVtX2ZpbmQo
ZWxlbSwgJ2VhYzp0ZXJtJykKKyAgICAgICAgaWYgdGVybSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHZhbHVlc1snbmFtZSddID0zRCBzZXQoW3VuaWNvZGUodGVybS50ZXh0KV0pCisgICAgICAg
IHZhbHVlcy51cGRhdGUoc2VsZi5wYXJzZV90YWdfZGVzY3JpcHRpb24oZWxlbSkpCisgICAgICAg
IHlpZWxkIEV4dEVudGl0eSgnQWdlbnRGdW5jdGlvbicsIHNlbGYuX2dlbl9leHRpZCgpLCB2YWx1
ZXMpCisKKyAgICBAcmVsYXRlX3RvX3JlY29yZF90aHJvdWdoKCdPY2N1cGF0aW9uJywgJ29jY3Vw
YXRpb25fYWdlbnQnKQorICAgIEBmaWx0ZXJfZW1wdHkKKyAgICBAYWRkX2NpdGF0aW9uc19mb3Io
J09jY3VwYXRpb24nKQorICAgIEBlcXVpdmFsZW50X2NvbmNlcHQoJ2VhYzp0ZXJtJywgJ09jY3Vw
YXRpb24nKQorICAgIGRlZiBidWlsZF9vY2N1cGF0aW9uKHNlbGYsIGVsZW0pOgorICAgICAgICAi
IiJCdWlsZCBhIGBPY2N1cGF0aW9uYHMgZXh0ZXJuYWwgZW50aXRpZXMiIiIKKyAgICAgICAgdmFs
dWVzID0zRCB7fQorICAgICAgICB0ZXJtID0zRCBzZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2VhYzp0
ZXJtJykKKyAgICAgICAgaWYgdGVybSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlc1sn
dGVybSddID0zRCBzZXQoW3VuaWNvZGUodGVybS50ZXh0KV0pCisgICAgICAgIHZhbHVlcy51cGRh
dGUoc2VsZi5wYXJzZV90YWdfZGVzY3JpcHRpb24oZWxlbSkpCisgICAgICAgIGRhdGVlbGVtID0z
RCBzZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2VhYzpkYXRlUmFuZ2UnKQorICAgICAgICBkYXRlcyA9
M0Qgc2VsZi5wYXJzZV9kYXRlcmFuZ2UoZGF0ZWVsZW0pCisgICAgICAgIGlmIGRhdGVzOgorICAg
ICAgICAgICAgdmFsdWVzLnVwZGF0ZShkYXRlcykKKyAgICAgICAgeWllbGQgRXh0RW50aXR5KCdP
Y2N1cGF0aW9uJywgc2VsZi5fZ2VuX2V4dGlkKCksIHZhbHVlcykKKworICAgIEByZWxhdGVfdG9f
cmVjb3JkX3Rocm91Z2goJ0dlbmVyYWxDb250ZXh0JywgJ2dlbmVyYWxfY29udGV4dF9vZicpCisg
ICAgQGZpbHRlcl9lbXB0eQorICAgIEBhZGRfY2l0YXRpb25zX2ZvcignR2VuZXJhbENvbnRleHQn
KQorICAgIGRlZiBidWlsZF9nZW5lcmFsY29udGV4dChzZWxmLCBlbGVtKToKKyAgICAgICAgIiIi
QnVpbGQgYSBgR2VuZXJhbENvbnRleHRgIGV4dGVybmFsIGVudGl0eSIiIgorICAgICAgICB2YWx1
ZXMgPTNEIHt9CisgICAgICAgIGNvbnRlbnQsIGNvbnRlbnRfZm9ybWF0ID0zRCBzZWxmLnBhcnNl
X3RhZ19jb250ZW50KGVsZW0pCisgICAgICAgIGlmIGNvbnRlbnQ6CisgICAgICAgICAgICB2YWx1
ZXMudXBkYXRlKHsKKyAgICAgICAgICAgICAgICAnY29udGVudCc6IHNldChbY29udGVudF0pLAor
ICAgICAgICAgICAgICAgICdjb250ZW50X2Zvcm1hdCc6IHNldChbY29udGVudF9mb3JtYXRdKSwK
KyAgICAgICAgICAgIH0pCisgICAgICAgIHlpZWxkIEV4dEVudGl0eSgnR2VuZXJhbENvbnRleHQn
LCBzZWxmLl9nZW5fZXh0aWQoKSwgdmFsdWVzKQorCisgICAgQGVsZW1fbWF5YmVfbm9uZQorICAg
IGRlZiBwYXJzZV9kYXRlcmFuZ2Uoc2VsZiwgZWxlbSk6CisgICAgICAgICIiIlBhcnNlIGEgYGRh
dGVSYW5nZWAgdGFnIGFuZCByZXR1cm4gYSBkaWN0IG1hcHBpbmcgYHN0YXJ0X2RhdGVgID0KYW5k
CisgICAgICAgIGBlbmRfZGF0ZWAgdG8gcGFyc2VkIGRhdGUgcmFuZ2UuCisgICAgICAgICIiIgor
ICAgICAgICB2YWx1ZXMgPTNEIHt9CisgICAgICAgIGZvciBlYWN0YWcsIGF0dHJuYW1lIGluIHpp
cCgoJ2VhYzpmcm9tRGF0ZScsICdlYWM6dG9EYXRlJyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoJ3N0YXJ0X2RhdGUnLCAnZW5kX2RhdGUnKSk6CisgICAgICAgICAgICBk
YXRlID0zRCBzZWxmLnBhcnNlX2RhdGUoc2VsZi5fZWxlbV9maW5kKGVsZW0sIGVhY3RhZykpCisg
ICAgICAgICAgICBpZiBkYXRlOgorICAgICAgICAgICAgICAgIHZhbHVlc1thdHRybmFtZV0gPTNE
IHNldChbZGF0ZV0pCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIEBlbGVtX21heWJlX25v
bmUKKyAgICBkZWYgcGFyc2VfZGF0ZShzZWxmLCBlbGVtKToKKyAgICAgICAgIiIiUGFyc2UgYSBk
YXRlLWxpa2UgZWxlbWVudCIiIgorICAgICAgICBkZWYgcmVjb3JkX3dhcm5pbmcobXNnKToKKyAg
ICAgICAgICAgIHNlbGYuaW1wb3J0X2xvZy5yZWNvcmRfd2FybmluZyhtc2cgJSB7J2UnOiBldHJl
ZS50b3N0cmluZyhlbGVtPQopfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lPTNEZWxlbS5zb3VyY2VsaW5lKQorICAgICAgICBzdGFuZGFyZF9kYXRlID0z
RCBlbGVtLmF0dHJpYi5nZXQoJ3N0YW5kYXJkRGF0ZScpCisgICAgICAgIGlmIHN0YW5kYXJkX2Rh
dGU6CisgICAgICAgICAgICBkYXRlID0zRCBzdGFuZGFyZF9kYXRlCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBmb3IgYXR0ciBpbiAoJ25vdEJlZm9yZScsICdub3RBZnRlcicpOgorICAgICAg
ICAgICAgICAgIGlmIGVsZW0uYXR0cmliLmdldChhdHRyKToKKyAgICAgICAgICAgICAgICAgICAg
cmVjb3JkX3dhcm5pbmcoc2VsZi5fKCdmb3VuZCBhbiB1bnN1cHBvcnRlZCAlcyBhdHRyaWJ1PQp0
ZSBpbiBkYXRlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdl
bGVtZW50ICUlKGUpcycpICUgYXR0cikKKyAgICAgICAgICAgICMgVXNpbmcgZWxlbWVudCdzIHRl
eHQuCisgICAgICAgICAgICBkYXRlID0zRCBlbGVtLnRleHQKKyAgICAgICAgIyBTZXQgYSBkZWZh
dWx0IHZhbHVlIGZvciBtb250aCBhbmQgZGF5OyB0aGUgeWVhciBzaG91bGQgYWx3YXlzIGJlCisg
ICAgICAgICMgZ2l2ZW4uCisgICAgICAgIGRlZmF1bHQgPTNEIGRhdGV0aW1lLmRhdGV0aW1lKDk5
OTksIDEsIDEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBkYXRlID0zRCBwYXJzZV9kYXRl
KGRhdGUsIGRlZmF1bHQ9M0RkZWZhdWx0KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBl
eGM6CisgICAgICAgICAgICByZWNvcmRfd2FybmluZyhzZWxmLl8oJ2NvdWxkIG5vdCBwYXJzZSBk
YXRlICUoZSlzJykpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uIGFzIGV4YzogICMgcHlsaW50OiBkaXNhYmxlPTNEYnJvYWQtZXhjZXB0CisgICAgICAg
ICAgICAjIFVzdWFsbHkgYSBidWcgaW4gZGF0ZXV0aWwucGFyc2VyLgorICAgICAgICAgICAgcmVj
b3JkX3dhcm5pbmcoc2VsZi5fKAorICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkIGVycm9yIGR1
cmluZyBwYXJzaW5nIG9mIGRhdGUgJSUoZSlzOiAlcycpICUKKyAgICAgICAgICAgICAgICB0b191
bmljb2RlKGV4YykpCisgICAgICAgICAgICBsb2dnZXIgPTNEIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdj
dWJpY3dlYi5zYWVtX3JlZicpCisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKHNlbGYuXygn
dW5oYW5kbGVkIGV4Y2VwdGlvbiB3aGlsZSBwYXJzaW5nIGRhdD0KZSAlcicpLCBkYXRlKQorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBkYXRl
LnllYXIgPTNEPTNEIGRlZmF1bHQueWVhcjoKKyAgICAgICAgICAgICAgICByZWNvcmRfd2Fybmlu
ZyhzZWxmLl8oJ2NvdWxkIG5vdCBwYXJzZSBhIHllYXIgZnJvbSBkYXRlIGVsPQplbWVudCAlKGUp
cycpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gcGRh
dGUuZGF0ZSgpCisKKyAgICBkZWYgcGFyc2VfcmVsYXRpb25zKHNlbGYsIGNwZl9kZXNjcmlwdGlv
bik6CisgICAgICAgICIiIlBhcnNlIHRoZSBgcmVsYXRpb25zYCB0YWcgYW5kIHlpZWxkIGV4dGVy
bmFsIGVudGl0aWVzLCBwb3NzaWJseQorICAgICAgICB1cGRhdGluZyByZWNvcmQncyBgdmFsdWVz
YCBkaWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcmVsYXRpb25zID0zRCBzZWxmLl9lbGVtX2Zp
bmQoY3BmX2Rlc2NyaXB0aW9uLCAnZWFjOnJlbGF0aW9ucycpCisgICAgICAgIGlmIHJlbGF0aW9u
cyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgY3BmUmVsYXRpb24uCisg
ICAgICAgIGZvciBjcGZyZWwgaW4gc2VsZi5fZWxlbV9maW5kYWxsKHJlbGF0aW9ucywgJ2VhYzpj
cGZSZWxhdGlvbicpOgorICAgICAgICAgICAgZm9yIGV4dGVudGl0eSBpbiBzZWxmLmJ1aWxkX3Jl
bGF0aW9uKGNwZnJlbCk6CisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisgICAgICAg
ICMgcmVzb3VyY2VSZWxhdGlvbi4KKyAgICAgICAgZm9yIHJyZWwgaW4gc2VsZi5fZWxlbV9maW5k
YWxsKHJlbGF0aW9ucywgJ2VhYzpyZXNvdXJjZVJlbGF0aW9uJyk6CisgICAgICAgICAgICBmb3Ig
ZXh0ZW50aXR5IGluIHNlbGYuYnVpbGRfcmVzb3VyY2VfcmVsYXRpb24ocnJlbCk6CisgICAgICAg
ICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisKKyAgICBAYWRkX3htbF93cmFwX2ZvcignQXNzb2Np
YXRpb25SZWxhdGlvbicsICdDaHJvbm9sb2dpY2FsUmVsYXRpb24nLAorICAgICAgICAgICAgICAg
ICAgICAgICdIaWVyYXJjaGljYWxSZWxhdGlvbicpCisgICAgZGVmIGJ1aWxkX3JlbGF0aW9uKHNl
bGYsIGVsZW0pOgorICAgICAgICAiIiJCdWlsZCBhIHJlbGF0aW9uIGJldHdlZW4gcmVjb3JkcyBl
eHRlcm5hbCBlbnRpdHkgKHdpdGggcHJvcGVyIHQ9CnlwZSkuIiIiCisgICAgICAgIHJlbGF0aW9u
c2hpcCA9M0QgZWxlbS5hdHRyaWIuZ2V0KCdjcGZSZWxhdGlvblR5cGUnKQorICAgICAgICBpZiBy
ZWxhdGlvbnNoaXAgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0X2xvZy5yZWNvcmRf
d2FybmluZyhzZWxmLl8oCisgICAgICAgICAgICAgICAgJ2ZvdW5kIG5vIGNwZlJlbGF0aW9uVHlw
ZSBhdHRyaWJ1dGUgaW4gZWxlbWVudCAlcywgZGVmYXVsdD0KaW5nICcKKyAgICAgICAgICAgICAg
ICAndG8gYXNzb2NpYXRpdmUnKSAlIGV0cmVlLnRvc3RyaW5nKGVsZW0pLAorICAgICAgICAgICAg
ICAgIGxpbmU9M0RlbGVtLnNvdXJjZWxpbmUpCisgICAgICAgICAgICByZWxhdGlvbnNoaXAgPTNE
ICdhc3NvY2lhdGl2ZScKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyAib3RoZXJfcm9sZSIg
KHJlc3AuICJhZ2VudF9yb2xlIikgcm9sZSBkZXNpZ25hdGVzIHRoZSBvYmplY3Q9CiBvZiB0aGUg
cmVsYXRpb24gKHJlc3AuCisgICAgICAgICAgICAjIHRoZSBhZ2VudCBkZXNjcmliZWQgaW4gdGhl
IEVBQy1DUEYgaW5zdGFuY2UpLgorICAgICAgICAgICAgIyBTZWU6IGh0dHA6Ly9lYWMuc3RhYXRz
YmlibGlvdGhlay1iZXJsaW4uZGUvZmlsZWFkbWluL3VzZXJfdXA9CmxvYWQvc2NoZW1hL2NwZlRh
Z0xpYnJhcnkuaHRtbCNjcGZSZWxhdGlvblR5cGUgIyBub3FhIHB5bGludDogZGlzYWJsZT0zRGxp
bj0KZS10b28tbG9uZworICAgICAgICAgICAgIyBJbiBjYXNlIHRoZSBFQUMgcmVsYXRpb24gaXMg
bm90IHF1YWxpZmllZCwgd2UgYXNzdW1lIHRoZSBvYmo9CmVjdCBpcyB0aGUgInBhcmVudCIgKG9y
CisgICAgICAgICAgICAjIG9sZGVzdCkgaW4gdGhlIHJlbGF0aW9uLgorICAgICAgICAgICAgZXR5
cGUsIG90aGVyX3JvbGUsIGFnZW50X3JvbGUgPTNEIHsKKyAgICAgICAgICAgICAgICAnaGllcmFy
Y2hpY2FsJzogKCdIaWVyYXJjaGljYWxSZWxhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaGllcmFyY2hpY2FsX3BhcmVudCcsICdoaWVyYXJjaGljYWxfY2hpbD0KZCcp
LAorICAgICAgICAgICAgICAgICdoaWVyYXJjaGljYWwtcGFyZW50JzogKCdIaWVyYXJjaGljYWxS
ZWxhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpZXJh
cmNoaWNhbF9wYXJlbnQnLCAnaGllcmFyY2hpYz0KYWxfY2hpbGQnKSwKKyAgICAgICAgICAgICAg
ICAnaGllcmFyY2hpY2FsLWNoaWxkJzogKCdIaWVyYXJjaGljYWxSZWxhdGlvbicsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGllcmFyY2hpY2FsX2NoaWxkJywgJ2hp
ZXJhcmNoaWNhbD0KX3BhcmVudCcpLAorICAgICAgICAgICAgICAgICd0ZW1wb3JhbCc6ICgnQ2hy
b25vbG9naWNhbFJlbGF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nocm9u
b2xvZ2ljYWxfcHJlZGVjZXNzb3InLCAnY2hyb25vbG9naWNhbF9zPQp1Y2Nlc3NvcicpLAorICAg
ICAgICAgICAgICAgICd0ZW1wb3JhbC1lYXJsaWVyJzogKCdDaHJvbm9sb2dpY2FsUmVsYXRpb24n
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbm9sb2dpY2FsX3By
ZWRlY2Vzc29yJywgJ2Nocm9ub2w9Cm9naWNhbF9zdWNjZXNzb3InKSwKKyAgICAgICAgICAgICAg
ICAndGVtcG9yYWwtbGF0ZXInOiAoJ0Nocm9ub2xvZ2ljYWxSZWxhdGlvbicsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdjaHJvbm9sb2dpY2FsX3N1Y2Nlc3NvcicsICdjaHJv
bm9sb2dpYz0KYWxfcHJlZGVjZXNzb3InKSwKKyAgICAgICAgICAgICAgICAnYXNzb2NpYXRpdmUn
OiAoJ0Fzc29jaWF0aW9uUmVsYXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnYXNzb2NpYXRpb25fdG8nLCAnYXNzb2NpYXRpb25fZnJvbScpLAorICAgICAgICAgICAgfVty
ZWxhdGlvbnNoaXBdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYu
aW1wb3J0X2xvZy5yZWNvcmRfd2FybmluZyhzZWxmLl8oCisgICAgICAgICAgICAgICAgJ3Vuc3Vw
cG9ydGVkIGNwZlJlbGF0aW9uVHlwZSAlcyBpbiBlbGVtZW50ICVzLCBza2lwcGluZycpCisgICAg
ICAgICAgICAgICAgJSAocmVsYXRpb25zaGlwLCBldHJlZS50b3N0cmluZyhlbGVtKSksCisgICAg
ICAgICAgICAgICAgbGluZT0zRGVsZW0uc291cmNlbGluZSkKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBvYmpfdXJpID0zRCBlbGVtLmF0dHJpYi5nZXQoJ3slKHhsaW5rKXN9aHJlZicgJSBz
ZWxmLm5hbWVzcGFjZXMpCisgICAgICAgIGlmIG9ial91cmkgaXMgTm9uZToKKyAgICAgICAgICAg
IHNlbGYuaW1wb3J0X2xvZy5yZWNvcmRfd2FybmluZyhzZWxmLl8oJ2ZvdW5kIGEgY3BmUmVsYXRp
b24gd2l0PQpob3V0IGFueSBvYmplY3QgKG5vICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3hsaW5rIGF0dHJpYnV0ZSksIHNraXBwPQppbmcnKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lPTNEZWxlbS5z
b3VyY2VsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJlbnRyeSA9M0Qgc2VsZi5f
ZWxlbV9maW5kKGVsZW0sICdlYWM6cmVsYXRpb25FbnRyeScpCisgICAgICAgIGlmIHJlbnRyeSBp
cyBub3QgTm9uZSBhbmQgcmVudHJ5LnRleHQuc3RyaXAoKToKKyAgICAgICAgICAgIHlpZWxkIEV4
dEVudGl0eSgnQXV0aG9yaXR5UmVjb3JkJywgb2JqX3VyaSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7J25hbWUnOiBzZXQoW3VuaWNvZGUocmVudHJ5LnRleHQpXSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdhZ2VudF9raW5kJzogc2V0KFsnYWdlbnRraW5kL3Vua25vd24t
YWdlbnQtaz0KaW5kJ10pfSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIGV4dGVy
bmFsX3VyaShvYmpfdXJpKQorICAgICAgICB2YWx1ZXMgPTNEIHthZ2VudF9yb2xlOiBzZXQoW3Nl
bGYucmVjb3JkLmV4dGlkXSksIG90aGVyX3JvbGU6IHNldCg9CltvYmpfdXJpXSl9CisgICAgICAg
IGRhdGVzID0zRCBzZWxmLnBhcnNlX2RhdGVyYW5nZSgKKyAgICAgICAgICAgIHNlbGYuX2VsZW1f
ZmluZChlbGVtLCAnZWFjOmRhdGVSYW5nZScpKQorICAgICAgICBpZiBkYXRlczoKKyAgICAgICAg
ICAgIGlmIGV0eXBlID0zRD0zRCAnQ2hyb25vbG9naWNhbFJlbGF0aW9uJzoKKyAgICAgICAgICAg
ICAgICBzZWxmLmltcG9ydF9sb2cucmVjb3JkX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAg
IHNlbGYuXygnaWdub3JpbmcgZGF0ZXMgb24gJXMgc2luY2UgY2hyb25vbG9naWNhbCByZWxhdD0K
aW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb2VzIG5vdCBzdXBwb3J0IGRhdGVz
JykgJSBldHJlZS50b3N0cmluZyhlbGVtKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWVzLnVwZGF0ZShkYXRlcykKKyAgICAgICAgdmFs
dWVzLnVwZGF0ZShzZWxmLnBhcnNlX3RhZ19kZXNjcmlwdGlvbihlbGVtKSkKKyAgICAgICAgeWll
bGQgRXh0RW50aXR5KGV0eXBlLCBzZWxmLl9nZW5fZXh0aWQoKSwgdmFsdWVzKQorCisgICAgQGFk
ZF94bWxfd3JhcF9mb3IoJ0VBQ1Jlc291cmNlUmVsYXRpb24nKQorICAgIGRlZiBidWlsZF9yZXNv
dXJjZV9yZWxhdGlvbihzZWxmLCBlbGVtKToKKyAgICAgICAgIiIiQnVpbGQgYSBgRUFDUmVzb3Vy
Y2VSZWxhdGlvbmAgZXh0ZXJuYWwgZW50aXR5IChhbG9uZyB3aXRoCisgICAgICAgIEV4dGVybmFs
VXJpIGVudGl0aWVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIG9ial91cmkgPTNEIGVsZW0uYXR0
cmliLmdldCgneyUoeGxpbmspc31ocmVmJyAlIHNlbGYubmFtZXNwYWNlcykKKyAgICAgICAgaWYg
b2JqX3VyaSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRfbG9nLnJlY29yZF93YXJu
aW5nKHNlbGYuXygKKyAgICAgICAgICAgICAgICAnZm91bmQgYSByZXNvdXJjZVJlbGF0aW9uIHdp
dGhvdXQgYW55IG9iamVjdCAobm8geGxpbmsgJworICAgICAgICAgICAgICAgICdhdHRyaWJ1dGUp
LCBza2lwcGluZycpLCBsaW5lPTNEZWxlbS5zb3VyY2VsaW5lKQorICAgICAgICAgICAgcmV0dXJu
CisgICAgICAgIHlpZWxkIGV4dGVybmFsX3VyaShvYmpfdXJpKQorICAgICAgICB2YWx1ZXMgPTNE
IHsKKyAgICAgICAgICAgICdyZXNvdXJjZV9yZWxhdGlvbl9yZXNvdXJjZSc6IHNldChbb2JqX3Vy
aV0pLAorICAgICAgICAgICAgJ3Jlc291cmNlX3JlbGF0aW9uX2FnZW50Jzogc2V0KFtzZWxmLnJl
Y29yZC5leHRpZF0pLAorICAgICAgICB9CisgICAgICAgIHJlc291cmNlX3JvbGUgPTNEIGVsZW0u
YXR0cmliLmdldCgneyUoeGxpbmspc31yb2xlJyAlIHNlbGYubmFtZXNwYT0KY2VzKQorICAgICAg
ICBpZiByZXNvdXJjZV9yb2xlOgorICAgICAgICAgICAgdmFsdWVzWydyZXNvdXJjZV9yb2xlJ10g
PTNEIHNldChbdW5pY29kZShyZXNvdXJjZV9yb2xlKV0pCisgICAgICAgIGFnZW50X3JvbGUgPTNE
IGVsZW0uYXR0cmliLmdldCgncmVzb3VyY2VSZWxhdGlvblR5cGUnKQorICAgICAgICBpZiBhZ2Vu
dF9yb2xlOgorICAgICAgICAgICAgdmFsdWVzWydhZ2VudF9yb2xlJ10gPTNEIHNldChbdW5pY29k
ZShhZ2VudF9yb2xlKV0pCisgICAgICAgIGRhdGVzID0zRCBzZWxmLnBhcnNlX2RhdGVyYW5nZShz
ZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2VhYzpkYXRlUmFuZz0KZScpKQorICAgICAgICBpZiBkYXRl
czoKKyAgICAgICAgICAgIHZhbHVlcy51cGRhdGUoZGF0ZXMpCisgICAgICAgIHZhbHVlcy51cGRh
dGUoc2VsZi5wYXJzZV90YWdfZGVzY3JpcHRpb24oZWxlbSkpCisgICAgICAgIHlpZWxkIEV4dEVu
dGl0eSgnRUFDUmVzb3VyY2VSZWxhdGlvbicsIHNlbGYuX2dlbl9leHRpZCgpLCB2YWx1ZXMpCisK
KyAgICBAZmlsdGVyX25vbmUKKyAgICBkZWYgcGFyc2VfY29udHJvbChzZWxmLCBjb250cm9sKToK
KyAgICAgICAgIiIiUGFyc2UgdGhlIGBjb250cm9sYCB0YWcuIiIiCisgICAgICAgIHJlY29yZF9p
ZCA9M0Qgc2VsZi5fZWxlbV9maW5kKGNvbnRyb2wsICdlYWM6cmVjb3JkSWQnKQorICAgICAgICBp
ZiByZWNvcmRfaWQgaXMgbm90IE5vbmUgYW5kIHJlY29yZF9pZC50ZXh0IGFuZCByZWNvcmRfaWQu
dGV4dC5zdHI9CmlwKCk6CisgICAgICAgICAgICBzZWxmLnJlY29yZC5leHRpZCA9M0QgcmVjb3Jk
X2lkLnRleHQuc3RyaXAoKQorICAgICAgICAgICAgc2VsZi5yZWNvcmRfdmlzaXRlZChyZWNvcmRf
aWQsIHNlbGYucmVjb3JkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5yZWNvcmQu
ZXh0aWQgPTNEIHNlbGYuX2dlbl9leHRpZCgpCisgICAgICAgICAgICBzZWxmLmltcG9ydF9sb2cu
cmVjb3JkX3dhcm5pbmcoc2VsZi5fKAorICAgICAgICAgICAgICAgICdmb3VuZCBubyByZWNvcmRJ
ZCBlbGVtZW50IGluIGNvbnRyb2wgdGFnLCB1c2luZyAlcyBhcyBjd3U9CnJpJykgJQorICAgICAg
ICAgICAgICAgIHNlbGYucmVjb3JkLmV4dGlkKQorICAgICAgICBmb3IgZWxlbSBpbiBjb250cm9s
LnhwYXRoKCdlYWM6c291cmNlcy9lYWM6c291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VzPTNEc2VsZi5uYW1lc3BhY2VzKToKKyAgICAgICAgICAgIGZv
ciBleHRlbnRpdHkgaW4gc2VsZi5idWlsZF9zb3VyY2UoZWxlbSk6CisgICAgICAgICAgICAgICAg
eWllbGQgZXh0ZW50aXR5CisgICAgICAgIGZvciBlbGVtIGluIGNvbnRyb2wueHBhdGgoJ2VhYzpt
YWludGVuYW5jZUhpc3RvcnkvZWFjOm1haW50ZW5hbmNlRT0KdmVudCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlcz0zRHNlbGYubmFtZXNwYWNlcyk6CisgICAg
ICAgICAgICBmb3IgZXh0ZW50aXR5IGluIHNlbGYuYnVpbGRfbWFpbnRlbmFuY2VfZXZlbnQoZWxl
bSk6CisgICAgICAgICAgICAgICAgeWllbGQgZXh0ZW50aXR5CisKKyAgICBkZWYgYnVpbGRfbWFp
bnRlbmFuY2VfZXZlbnQoc2VsZiwgZWxlbSk6CisgICAgICAgICIiIlBhcnNlIGEgYG1haW50ZW5h
bmNlRXZlbnRgIHRhZywgeWllbGRpbmcgYSBwcm92OkFjdGl2aXR5IGV4dGVybj0KYWwKKyAgICAg
ICAgZW50aXR5IGFsb25nIHdpdGggbmVjZXNzYXJ5IFJlY29yZHMuCisgICAgICAgICIiIgorICAg
ICAgICB2YWx1ZXMgPTNEIHsnZ2VuZXJhdGVkJzogc2V0KFtzZWxmLnJlY29yZC5leHRpZF0pfQor
ICAgICAgICBldmVudF90eXBlID0zRCBzZWxmLnBhcnNlX2V2ZW50X3R5cGUoc2VsZi5fZWxlbV9m
aW5kKGVsZW0sICdlYWM6ZXY9CmVudFR5cGUnKSkKKyAgICAgICAgaWYgZXZlbnRfdHlwZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlc1sndHlwZSddID0zRCBzZXQoW2V2ZW50X3R5cGVd
KQorICAgICAgICBkYXRlID0zRCBzZWxmLl9lbGVtX2ZpbmQoZWxlbSwgJ2VhYzpldmVudERhdGVU
aW1lJykKKyAgICAgICAgaWYgZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGR0YXR0ciA9
M0QgZGF0ZS5hdHRyaWIuZ2V0KCdzdGFuZGFyZERhdGVUaW1lJykKKyAgICAgICAgICAgIGlmIGR0
YXR0cjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50X2Rh
dGUgPTNEIHBhcnNlX2RhdGUoZHRhdHRyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVy
cm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF9sb2cucmVjb3JkX3dhcm5pbmco
CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl8oJ2NvdWxkIG5vdCBwYXJzZSBkYXRlIGZy
b20gJXMnKSAlIGV0cmVlLnRvcz0KdHJpbmcoZGF0ZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lPTNEZGF0ZS5zb3VyY2VsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIHZhbHVlc1snc3RhcnQnXSA9M0Qgc2V0KFtldmVudF9kYXRlXSkKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzWydlbmQnXSA9M0Qgc2V0KFtldmVudF9kYXRlXSkKKyAgICAg
ICAgdmFsdWVzLnVwZGF0ZShzZWxmLnBhcnNlX3RhZ19kZXNjcmlwdGlvbihlbGVtLCAnZWFjOmV2
ZW50RGVzY3JpcHRpPQpvbicpKQorICAgICAgICBhZ2VudCA9M0Qgc2VsZi5fZWxlbV9maW5kKGVs
ZW0sICdlYWM6YWdlbnQnKQorICAgICAgICBpZiBhZ2VudCBpcyBub3QgTm9uZSBhbmQgYWdlbnQu
dGV4dDoKKyAgICAgICAgICAgIHJlY29yZF9pZCA9M0Qgc2VsZi5fZ2VuX2V4dGlkKCkKKyAgICAg
ICAgICAgIHlpZWxkIEV4dEVudGl0eSgnQWdlbnQnLCByZWNvcmRfaWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyduYW1lJzogc2V0KFt1bmljb2RlKGFnZW50LnRleHQpXSl9KQorICAg
ICAgICAgICAgdmFsdWVzWydhc3NvY2lhdGVkX3dpdGgnXSA9M0Qgc2V0KFtyZWNvcmRfaWRdKQor
ICAgICAgICB5aWVsZCBFeHRFbnRpdHkoJ0FjdGl2aXR5Jywgc2VsZi5fZ2VuX2V4dGlkKCksIHZh
bHVlcykKKworICAgIEBlbGVtX21heWJlX25vbmUKKyAgICBkZWYgcGFyc2VfZXZlbnRfdHlwZShz
ZWxmLCBlbGVtKToKKyAgICAgICAgIiIiUGFyc2UgYW4gYGV2ZW50VHlwZWAgZWxlbWVudCBhbmQg
dHJ5IHRvIG1hdGNoIGEgcHJvdjp0eXBlIHRvIGJ1PQppbGQgYQorICAgICAgICBwcm92OkFjdGl2
aXR5LgorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnRfdHlwZSA9M0QgZWxlbS50ZXh0LnN0cmlw
KCkgaWYgZWxlbS50ZXh0IGVsc2UgTm9uZQorICAgICAgICBpZiBldmVudF90eXBlOgorICAgICAg
ICAgICAgdHlwZV9tYXBwaW5nID0zRCBlYWNtYWludGVuYW5jZXR5cGVfbWFwcGluZy5jb3B5KCkK
KyAgICAgICAgICAgIHR5cGVfbWFwcGluZ1snZGVyaXZlZCddID0zRCB1J2NyZWF0ZScKKyAgICAg
ICAgICAgIHR5cGVfbWFwcGluZ1sndXBkYXRlZCddID0zRCB1J21vZGlmeScKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBldmVudF90eXBlID0zRCB0eXBlX21hcHBpbmdbZXZlbnRf
dHlwZS5sb3dlcigpXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAg
ICAgIHNlbGYuaW1wb3J0X2xvZy5yZWNvcmRfd2FybmluZyhzZWxmLl8oCisgICAgICAgICAgICAg
ICAgICAgICdldmVudFR5cGUgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIFBST1YtTyB2b2NhYnVsYXJ5
LCByZT0Kc3BlY3RpdmUgQWN0aXZpdHkgd2lsbCAnCisgICAgICAgICAgICAgICAgICAgICdub3Qg
aGF2ZSBhIGB0eXBlYCBhdHRyaWJ1dGUgc2V0LicpICUgZXZlbnRfdHlwZSwgbGluZT0KPTNEZWxl
bS5zb3VyY2VsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBy
ZXR1cm4gZXZlbnRfdHlwZQorCisgICAgQHJlbGF0ZV90b19yZWNvcmRfdGhyb3VnaCgnRUFDU291
cmNlJywgJ3NvdXJjZV9hZ2VudCcpCisgICAgQGZpbHRlcl9lbXB0eQorICAgIEBhZGRfeG1sX3dy
YXBfZm9yKCdFQUNTb3VyY2UnKQorICAgIGRlZiBidWlsZF9zb3VyY2Uoc2VsZiwgZWxlbSk6Cisg
ICAgICAgICIiIlBhcnNlIGEgYHNvdXJjZWAgdGFnLCB5aWVsZGluZyBFQUNTb3VyY2UgZXh0ZXJu
YWwgZW50aXRpZXMuCisgICAgICAgICIiIgorICAgICAgICB2YWx1ZXMgPTNEIHt9CisgICAgICAg
IHVybCA9M0QgZWxlbS5hdHRyaWIuZ2V0KCd7JSh4bGluaylzfWhyZWYnICUgc2VsZi5uYW1lc3Bh
Y2VzKQorICAgICAgICBpZiB1cmwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB2YWx1ZXNbJ3Vy
bCddID0zRCBzZXQoW3VuaWNvZGUodXJsKV0pCisgICAgICAgIGVudHJ5ID0zRCBzZWxmLl9lbGVt
X2ZpbmQoZWxlbSwgJ2VhYzpzb3VyY2VFbnRyeScpCisgICAgICAgIGlmIGVudHJ5IGlzIG5vdCBO
b25lIGFuZCBlbnRyeS50ZXh0OgorICAgICAgICAgICAgdmFsdWVzWyd0aXRsZSddID0zRCBzZXQo
W3VuaWNvZGUoZW50cnkudGV4dCldKQorICAgICAgICB2YWx1ZXMudXBkYXRlKHNlbGYucGFyc2Vf
dGFnX2Rlc2NyaXB0aW9uKGVsZW0pKQorICAgICAgICB5aWVsZCBFeHRFbnRpdHkoJ0VBQ1NvdXJj
ZScsIHNlbGYuX2dlbl9leHRpZCgpLCB2YWx1ZXMpCmRpZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVt
X3JlZi9kYXRhaW1wb3J0L3NlZGEucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi9kYXRhaT0KbXBvcnQv
c2VkYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1Ymljd2Vi
X3NhZW1fcmVmL2RhdGFpbXBvcnQvc2VkYS5weQpAQCAtMCwwICsxLDcxIEBACisjIGNvZGluZzog
dXRmLTgKK2ltcG9ydCBvcworZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBkaXJuYW1lLCBiYXNl
bmFtZQorCitmcm9tIGN1Ymljd2ViLmRhdGFpbXBvcnQuaW1wb3J0ZXIgaW1wb3J0IEhUTUxJbXBv
cnRMb2cKKworZnJvbSBjdWJlcy5za29zLnNvYmplY3RzIGltcG9ydCBsY3N2X2V4dGVudGl0aWVz
LCBzdG9yZV9za29zX2V4dGVudGl0aWVzCisKK2Zyb20gY3ViZXMuc2FlbV9yZWYuc29iamVjdHMu
c2tvcyBpbXBvcnQgX3N0b3JlCisKKworZGVmIGxjc3ZfaW1wb3J0KGNueCwgc3RvcmUsIGZwYXRo
LCBzY2hlbWVfdXJpKToKKyAgICBpbXBvcnRfbG9nID0zRCBIVE1MSW1wb3J0TG9nKGJhc2VuYW1l
KGZwYXRoKSkKKyAgICBzdHJlYW0gPTNEIG9wZW4oZnBhdGgpCisgICAgZW50aXRpZXMgPTNEIGxj
c3ZfZXh0ZW50aXRpZXMoc3RyZWFtLCBzY2hlbWVfdXJpLCAnXHQnLCAndXRmLTgnKQorICAgIHN0
b3JlX3Nrb3NfZXh0ZW50aXRpZXMoY254LCBzdG9yZSwgZW50aXRpZXMsIGltcG9ydF9sb2csCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZV9vbl9lcnJvcj0zRFRydWUsIGV4dGlkX2Fz
X2N3dXJpPTNERmFsc2UpCisKKworZGVmIGNyZWF0ZV9jb25jZXB0X3NjaGVtZShjbngsIHN0b3Jl
LCB0aXRsZSwgZnBhdGgsIHJ0eXBlLCBjb21tZW50LCBhcmspOgorICAgIHNjaGVtZSA9M0QgY254
LmNyZWF0ZV9lbnRpdHkoJ0NvbmNlcHRTY2hlbWUnLCB0aXRsZT0zRHRpdGxlLCBhcms9M0Rhcmsp
CisgICAgaW5zZXJ0ZWQgPTNEIGNueC5leGVjdXRlKAorICAgICAgICAnU0VUIFggc2NoZW1lX3Jl
bGF0aW9uIENSIFdIRVJFIENSIG5hbWUgIiVzIiwgWCBlaWQgJSUoeClzJyAlIHJ0eXA9CmUsCisg
ICAgICAgIHsneCc6IHNjaGVtZS5laWR9KQorICAgIGFzc2VydCBpbnNlcnRlZCwgY29tbWVudAor
ICAgIGxjc3ZfaW1wb3J0KGNueCwgc3RvcmUsIGZwYXRoLCBzY2hlbWUuY3d1cmkpCisKKworZGVm
IGltcG9ydF9zZWRhX3NjaGVtZXMoY254KToKKyAgICAjIDI1NjUxID0zRCBBcmNoaXZlcyBkPUMz
PUE5cGFydGVtZW50YWxlcyBkZSBsYSBHaXJvbmRlIChBREdJUk9OREUpCisgICAgIyBYWFggZW5z
dXJlIHRoYXQ6CisgICAgIyAqIE5BQSBmb3IgdGhvc2Ugdm9jYWJ1bGFyeSBpcyAyNTY1MQorICAg
ICMgKiBnZW5lcmF0ZWQgYXJrIGFyZSBpZGVudGljYWwgZnJvbSBvbmUgaW5zdGFuY2UgdG8gYW5v
dGhlcgorICAgIHN0b3JlID0zRCBfc3RvcmUoY254LCBuYWFfd2hhdD0zRCcyNTY1MScpCisgICAg
Zm9yIGksICh0aXRsZSwgcnR5cGUsIGNvbW1lbnQsIGZuYW1lKSBpbiBlbnVtZXJhdGUoWworICAg
ICAgICAodSJTRURBIDogQ29kZXMgZGUgcmVzdHJpY3Rpb24gZCdhY2M9QzM9QThzIiwKKyAgICAg
ICAgICdzZWRhX2FjY2Vzc19yZXN0cmljdGlvbl9jb2RlJywKKyAgICAgICAgICdhY2Nlc3MgY29u
dHJvbCcsCisgICAgICAgICAnc2VkYV9hY2Nlc3NfY29udHJvbC5jc3YnKSwKKyAgICAgICAgKHUn
U0VEQSA6IFNvcnQgZmluYWwnLAorICAgICAgICAgJ3NlZGFfYXBwcmFpc2FsX3J1bGVfY29kZScs
CisgICAgICAgICAnYXBwcmFpc2FsIHJ1bGUnLAorICAgICAgICAgJ3NlZGFfYXBwcmFpc2FsX3J1
bGVfY29kZS5jc3YnKSwKKyAgICAgICAgKHUnU0VEQSA6IE5pdmVhdXggZGUgZGVzY3JpcHRpb24g
ZGUgY29udGVudScsCisgICAgICAgICAnc2VkYV9kZXNjcmlwdGlvbl9sZXZlbCcsCisgICAgICAg
ICAnZGVzY3JpcHRpb24gbGV2ZWwnLAorICAgICAgICAgJ3NlZGFfZGVzY3JpcHRpb25fbGV2ZWwu
Y3N2JyksCisgICAgICAgICh1J1NFREEgOiBGb3JtYXRzIGRlIGZpY2hpZXIgc291cmNlJywKKyAg
ICAgICAgICdzZWRhX2ZpbGVfdHlwZV9jb2RlJywKKyAgICAgICAgICdmaWxlIHR5cGUgY29kZScs
CisgICAgICAgICAnc2VkYV9maWxlX3R5cGVfY29kZS5jc3YnKSwKKyAgICAgICAgKHUnU0VEQSA6
IEpldSBkZSBjYXJhY3Q9QzM9QThyZXMgZGUgY29kYWdlJywKKyAgICAgICAgICdzZWRhX2NoYXJh
Y3Rlcl9zZXRfY29kZScsCisgICAgICAgICAnY2hhcmFjdGVyIHNldCBjb2RlJywKKyAgICAgICAg
ICdzZWRhX2NoYXJhY3Rlcl9zZXRfY29kZS5jc3YnKSwKKyAgICAgICAgKHUnU0VEQSA6IENvZGVz
IGRlcyB0eXBlcyBkZSBjb250ZW51JywKKyAgICAgICAgICdzZWRhX2RvY3VtZW50X3R5cGVfY29k
ZScsCisgICAgICAgICAnZG9jdW1lbnQgdHlwZSBjb2RlJywKKyAgICAgICAgICdzZWRhX2RvY3Vt
ZW50X3R5cGVfY29kZS5jc3YnKSwKKyAgICAgICAgKHUiU0VEQTogRHVyPUMzPUE5ZSBkJ3V0aWxp
dD1DMz1BOSBhZG1pbmlzdHJhdGl2ZSIsCisgICAgICAgICAnc2VkYV9hcHByYWlzYWxfcnVsZV9k
dXJhdGlvbicsCisgICAgICAgICAnYXBwcmFpc2FsIHJ1bGUgZHVyYXRpb24nLAorICAgICAgICAg
J3NlZGFfZHVhLmNzdicpLAorICAgIF0pOgorICAgICAgICBpZiBub3QgY254LmZpbmQoJ0NvbmNl
cHRTY2hlbWUnLCB0aXRsZT0zRHRpdGxlKToKKyAgICAgICAgICAgIGZwYXRoID0zRCBqb2luKGRp
cm5hbWUoX19maWxlX18pLCBvcy5wYXJkaXIsICdtaWdyYXRpb24nLCAnZGF0PQphJywgZm5hbWUp
CisgICAgICAgICAgICBhcmsgPTNEIHUnMjU2NTEvdjAwMDAwMDAwJXMnICUgaQorICAgICAgICAg
ICAgY3JlYXRlX2NvbmNlcHRfc2NoZW1lKGNueCwgc3RvcmUsIHRpdGxlLCBmcGF0aCwgcnR5cGUs
IGNvbW1lbnQ9CiwgYXJrPTNEYXJrKQorICAgIHN0b3JlLmZsdXNoKCkKKyAgICBzdG9yZS5jb21t
aXQoKQorICAgIHN0b3JlLmZpbmlzaCgpCmRpZmYgLS1naXQgYS9lbnRpdGllcy9fX2luaXRfXy5w
eSBiL2N1Ymljd2ViX3NhZW1fcmVmL2VudGl0aWVzL19faW5pdF9fLnB5CnJlbmFtZSBmcm9tIGVu
dGl0aWVzL19faW5pdF9fLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9lbnRpdGllcy9f
X2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9yZWYvZW50aXRpZXMvYXV0aG9y
aXR5cmVjb3JkLnB5IGIvY3ViaWN3ZWJfc2FlbV89CnJlZi9lbnRpdGllcy9hdXRob3JpdHlyZWNv
cmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdWJpY3dlYl9z
YWVtX3JlZi9lbnRpdGllcy9hdXRob3JpdHlyZWNvcmQucHkKQEAgLTAsMCArMSwxMDMgQEAKKyMg
Y29weXJpZ2h0IDIwMTYgTE9HSUxBQiBTLkEuIChQYXJpcywgRlJBTkNFKSwgYWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgY29udGFjdCBodHRwOi8vd3d3LmxvZ2lsYWIuZnIgLS0gbWFpbHRvOmNvbnRh
Y3RAbG9naWxhYi5mcgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCA9CnVuZGVyCisjIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRj0KcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aT0Kb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgor
IworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwgYnV0IFdJVEg9Ck9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRkk9ClRORVNTCisjIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yID0KbW9yZQorIyBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2U9CiBh
bG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy8+LgorIiIiY3ViaWN3ZWItc2FlbS1yZWYgZW50aXR5J3MgY2xhc3NlcyBmb3Ig
QXV0aG9yaXR5UmVjb3JkLiIiIgorCitmcm9tIGN1Ymljd2ViLmVudGl0aWVzIGltcG9ydCBBbnlF
bnRpdHksIGZldGNoX2NvbmZpZworCisKK2NsYXNzIEF1dGhvcml0eVJlY29yZChBbnlFbnRpdHkp
OgorICAgIF9fcmVnaWRfXyA9M0QgJ0F1dGhvcml0eVJlY29yZCcKKyAgICBmZXRjaF9hdHRycywg
Y3dfZmV0Y2hfb3JkZXIgPTNEIGZldGNoX2NvbmZpZygoJ25hbWUnLCAnYWdlbnRfa2luZCcsICdh
PQpyaycpKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGtpbmQoc2VsZik6CisgICAgICAgICIi
IlRoZSBraW5kIG9mIGFnZW50IiIiCisgICAgICAgIHJldHVybiBzZWxmLmFnZW50X2tpbmRbMF0u
bmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHByaW50YWJsZV9raW5kKHNlbGYpOgorICAg
ICAgICAiIiJUaGUga2luZCBvZiBhZ2VudCwgZm9yIGRpc3BsYXkiIiIKKyAgICAgICAgcmV0dXJu
IHNlbGYuYWdlbnRfa2luZFswXS5wcmludGFibGVfdmFsdWUoJ25hbWUnKQorCisKK2NsYXNzIEFn
ZW50S2luZChBbnlFbnRpdHkpOgorICAgIF9fcmVnaWRfXyA9M0QgJ0FnZW50S2luZCcKKyAgICBm
ZXRjaF9hdHRycywgY3dfZmV0Y2hfb3JkZXIgPTNEIGZldGNoX2NvbmZpZygoJ25hbWUnLCkpCisK
KworY2xhc3MgQ2hyb25vbG9naWNhbFJlbGF0aW9uKEFueUVudGl0eSk6CisgICAgX19yZWdpZF9f
ID0zRCAnQ2hyb25vbG9naWNhbFJlbGF0aW9uJworCisgICAgZGVmIGRjX2Rlc2NyaXB0aW9uKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLmRlc2NyaXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuZGVzY3JpcHRpb24KKworCitjbGFzcyBFQUNSZXNvdXJjZVJlbGF0aW9uKEFueUVudGl0eSk6
CisgICAgX19yZWdpZF9fID0zRCAnRUFDUmVzb3VyY2VSZWxhdGlvbicKKworICAgIEBwcm9wZXJ0
eQorICAgIGRlZiByZWNvcmQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlc291cmNlX3Jl
bGF0aW9uX2FnZW50WzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVzb3VyY2Uoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnJlc291cmNlX3JlbGF0aW9uX3Jlc291cmNlWzBdCisKKyAg
ICBkZWYgZGNfdGl0bGUoc2VsZik6CisgICAgICAgIGFnZW50X3RpdGxlID0zRCBzZWxmLmFnZW50
LmRjX3RpdGxlKCkKKyAgICAgICAgaWYgc2VsZi5hZ2VudF9yb2xlOgorICAgICAgICAgICAgYWdl
bnRfdGl0bGUgKz0zRCB1JyAoJXMpJyAlIHNlbGYucHJpbnRhYmxlX3ZhbHVlKCdhZ2VudF9yb2xl
JykKKyAgICAgICAgcmVzb3VyY2VfdGl0bGUgPTNEIHNlbGYucmVzb3VyY2UuZGNfdGl0bGUoKQor
ICAgICAgICBpZiBzZWxmLnJlc291cmNlX3JvbGU6CisgICAgICAgICAgICByZXNvdXJjZV90aXRs
ZSArPTNEIHUnICglcyknICUgc2VsZi5wcmludGFibGVfdmFsdWUoJ3Jlc291cmNlXz0Kcm9sZScp
CisgICAgICAgIHJldHVybiAoc2VsZi5fY3cuXygnUmVsYXRpb24gZnJvbSAlKGZyb20pcyB0byAl
KHRvKXMgJykgJQorICAgICAgICAgICAgICAgIHsnZnJvbSc6IGFnZW50X3RpdGxlLAorICAgICAg
ICAgICAgICAgICAndG8nOiByZXNvdXJjZV90aXRsZX0pCisKKworY2xhc3MgU2FtZUFzTWl4SW4o
b2JqZWN0KToKKyAgICAiIiJNaXgtaW4gY2xhc3MgZm9yIGVudGl0eSB0eXBlcyBzdXBwb3J0aW5n
IHZvY2FidWxhcnlfc291cmNlIGFuZAorICAgIGVxdWl2YWxlbnRfY29uY2VwdCByZWxhdGlvbnMu
CisgICAgIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2NoZW1lKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi52b2NhYnVsYXJ5X3NvdXJjZSBhbmQgc2VsZi52b2NhYnVsYXJ5X3NvdXJj
ZVswXSBvciBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29uY2VwdChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuZXF1aXZhbGVudF9jb25jZXB0IGFuZCBzZWxmLmVxdWl2YWxlbnRf
Y29uY2VwdFswXSBvciBOPQpvbmUKKworCitjbGFzcyBBZ2VudFBsYWNlKFNhbWVBc01peEluLCBB
bnlFbnRpdHkpOgorICAgIF9fcmVnaWRfXyA9M0QgJ0FnZW50UGxhY2UnCisKKworY2xhc3MgQWdl
bnRGdW5jdGlvbihTYW1lQXNNaXhJbiwgQW55RW50aXR5KToKKyAgICBfX3JlZ2lkX18gPTNEICdB
Z2VudEZ1bmN0aW9uJworCisKK2NsYXNzIE1hbmRhdGUoU2FtZUFzTWl4SW4sIEFueUVudGl0eSk6
CisgICAgX19yZWdpZF9fID0zRCAnTWFuZGF0ZScKKworCitjbGFzcyBMZWdhbFN0YXR1cyhTYW1l
QXNNaXhJbiwgQW55RW50aXR5KToKKyAgICBfX3JlZ2lkX18gPTNEICdMZWdhbFN0YXR1cycKKwor
CitjbGFzcyBPY2N1cGF0aW9uKFNhbWVBc01peEluLCBBbnlFbnRpdHkpOgorICAgIF9fcmVnaWRf
XyA9M0QgJ09jY3VwYXRpb24nCmRpZmYgLS1naXQgYS9lbnRpdGllcy9jb250YWluZXIucHkgYi9j
dWJpY3dlYl9zYWVtX3JlZi9lbnRpdGllcy9jb250YWluZXIucHkKcmVuYW1lIGZyb20gZW50aXRp
ZXMvY29udGFpbmVyLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9lbnRpdGllcy9jb250
YWluZXIucHkKZGlmZiAtLWdpdCBhL2VudGl0aWVzL2VhYy5weSBiL2N1Ymljd2ViX3NhZW1fcmVm
L2VudGl0aWVzL2VhYy5weQpyZW5hbWUgZnJvbSBlbnRpdGllcy9lYWMucHkKcmVuYW1lIHRvIGN1
Ymljd2ViX3NhZW1fcmVmL2VudGl0aWVzL2VhYy5weQpkaWZmIC0tZ2l0IGEvZW50aXRpZXMvb2Fp
LnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvZW50aXRpZXMvb2FpLnB5CnJlbmFtZSBmcm9tIGVudGl0
aWVzL29haS5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZW50aXRpZXMvb2FpLnB5CmRp
ZmYgLS1naXQgYS9lbnRpdGllcy9vcmcucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi9lbnRpdGllcy9v
cmcucHkKcmVuYW1lIGZyb20gZW50aXRpZXMvb3JnLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVt
X3JlZi9lbnRpdGllcy9vcmcucHkKZGlmZiAtLWdpdCBhL2VudGl0aWVzL3JkZi5weSBiL2N1Ymlj
d2ViX3NhZW1fcmVmL2VudGl0aWVzL3JkZi5weQpyZW5hbWUgZnJvbSBlbnRpdGllcy9yZGYucHkK
cmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL2VudGl0aWVzL3JkZi5weQpkaWZmIC0tZ2l0IGEv
ZW50aXRpZXMvc2VkYS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL2VudGl0aWVzL3NlZGEucHkKcmVu
YW1lIGZyb20gZW50aXRpZXMvc2VkYS5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZW50
aXRpZXMvc2VkYS5weQpkaWZmIC0tZ2l0IGEvZW50aXRpZXMvc2tvcy5weSBiL2N1Ymljd2ViX3Nh
ZW1fcmVmL2VudGl0aWVzL3Nrb3MucHkKcmVuYW1lIGZyb20gZW50aXRpZXMvc2tvcy5weQpyZW5h
bWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvZW50aXRpZXMvc2tvcy5weQpkaWZmIC0tZ2l0IGEvaG9v
a3MucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi9ob29rcy5weQpyZW5hbWUgZnJvbSBob29rcy5weQpy
ZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvaG9va3MucHkKZGlmZiAtLWdpdCBhL2kxOG4vZW4u
cG8gYi9jdWJpY3dlYl9zYWVtX3JlZi9pMThuL2VuLnBvCnJlbmFtZSBmcm9tIGkxOG4vZW4ucG8K
cmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL2kxOG4vZW4ucG8KZGlmZiAtLWdpdCBhL2kxOG4v
ZnIucG8gYi9jdWJpY3dlYl9zYWVtX3JlZi9pMThuL2ZyLnBvCnJlbmFtZSBmcm9tIGkxOG4vZnIu
cG8KcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL2kxOG4vZnIucG8KZGlmZiAtLWdpdCBhL2kx
OG4vc3RhdGljLW1lc3NhZ2VzLnBvdCBiL2N1Ymljd2ViX3NhZW1fcmVmL2kxOG4vc3RhdGljLW1l
c3NhPQpnZXMucG90CnJlbmFtZSBmcm9tIGkxOG4vc3RhdGljLW1lc3NhZ2VzLnBvdApyZW5hbWUg
dG8gY3ViaWN3ZWJfc2FlbV9yZWYvaTE4bi9zdGF0aWMtbWVzc2FnZXMucG90CmRpZmYgLS1naXQg
YS9taWdyYXRpb24vMC4xMi4wX0FueS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8w
LjEyLjBfQT0KbnkucHkKcmVuYW1lIGZyb20gbWlncmF0aW9uLzAuMTIuMF9BbnkucHkKcmVuYW1l
IHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8wLjEyLjBfQW55LnB5CmRpZmYgLS1naXQg
YS9taWdyYXRpb24vMC4xMi4yX0FueS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8w
LjEyLjJfQT0KbnkucHkKcmVuYW1lIGZyb20gbWlncmF0aW9uLzAuMTIuMl9BbnkucHkKcmVuYW1l
IHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8wLjEyLjJfQW55LnB5CmRpZmYgLS1naXQg
YS9taWdyYXRpb24vMC4xMy4wX0FueS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8w
LjEzLjBfQT0KbnkucHkKcmVuYW1lIGZyb20gbWlncmF0aW9uLzAuMTMuMF9BbnkucHkKcmVuYW1l
IHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8wLjEzLjBfQW55LnB5CmRpZmYgLS1naXQg
YS9taWdyYXRpb24vMC4xMy4xX0FueS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8w
LjEzLjFfQT0KbnkucHkKcmVuYW1lIGZyb20gbWlncmF0aW9uLzAuMTMuMV9BbnkucHkKcmVuYW1l
IHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8wLjEzLjFfQW55LnB5CmRpZmYgLS1naXQg
YS9taWdyYXRpb24vMC4xNC4wX0FueS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8w
LjE0LjBfQT0KbnkucHkKcmVuYW1lIGZyb20gbWlncmF0aW9uLzAuMTQuMF9BbnkucHkKcmVuYW1l
IHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi8wLjE0LjBfQW55LnB5CmRpZmYgLS1naXQg
YS9jdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRpb24vY3JlYXRlX3NlZGFfc2NoZW1lcy5weSBiL2N1
Ymljd2ViXz0Kc2FlbV9yZWYvbWlncmF0aW9uL2NyZWF0ZV9zZWRhX3NjaGVtZXMucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9taWdy
YXRpb24vY3JlYXRlX3NlZGFfc2NoZW1lcy5weQpAQCAtMCwwICsxLDEyIEBACisjIGNvZGluZzog
dXRmLTgKKyIiIkNyZWF0ZSBjb25jZXB0IHNjaGVtZXMgdXNlZCBieSBTRURBIHByb2ZpbGUgZGF0
YSBtb2RlbCIiIgorCitmcm9tIGN1YmVzLnNhZW1fcmVmLmRhdGFpbXBvcnQuc2VkYSBpbXBvcnQg
aW1wb3J0X3NlZGFfc2NoZW1lcworCisKK3ByaW50KCctPiBjcmVhdGluZyBTRURBIGNvbmNlcHQg
c2NoZW1lcycpCitpbXBvcnRfc2VkYV9zY2hlbWVzKGNueCkKKworaWYgcmVwby5zeXN0ZW1fc291
cmNlLmRiZHJpdmVyID0zRD0zRCAncG9zdGdyZXMnOgorICAgICMgbWFzc2l2ZSBzdG9yZSBpcyB1
c2VkLCB3aGljaCBkb2Vzbid0IGhhbmRsZSBmdWxsLXRleHQgaW5kZXhhdGlvbgorICAgIHJlaW5k
ZXhfZW50aXRpZXMoWydDb25jZXB0U2NoZW1lJywgJ0NvbmNlcHQnXSkKZGlmZiAtLWdpdCBhL2N1
Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9kYXRhL3NlZGFfYWNjZXNzX2NvbnRyb2wuY3N2IGIv
Y3ViPQppY3dlYl9zYWVtX3JlZi9taWdyYXRpb24vZGF0YS9zZWRhX2FjY2Vzc19jb250cm9sLmNz
dgpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCisrKyBiL2N1Ymljd2ViX3NhZW1f
cmVmL21pZ3JhdGlvbi9kYXRhL3NlZGFfYWNjZXNzX2NvbnRyb2wuY3N2CkBAIC0wLDAgKzEsMjkg
QEAKKyMJJGlkCUxpYmVsbD1DMz1BOSBsb25nCUxpYmVsbD1DMz1BOSBjb3VydCAodXRpbGlzPUMz
PUE5IHBvdXIgbCc9QzM9QTljaGFuPQpnZSkJZD1DMz1BOWZpbml0aW9uCQkJCQkJCQkJPTA5Cit0
eXBlCXVybAlzdHJpbmcJc3RyaW5nCXN0cmluZwkJCQkJCQkJCT0wOQorbGFuZwkJZnIJZnIJZnIJ
CQkJCQkJCQk9MDkKK3VybAlza29zOkNvbmNlcHQJc2tvczphbHRMYWJlbAlza29zOnByZWZMYWJl
bAlza29zOmRlZmluaXRpb24JCQkJCQkJCQk9MDkKKwkJMCBhbglBUjAzOAlEb2N1bWVudHMgYWRt
aW5pc3RyYXRpZnMgbGlicmVtZW50IGNvbW11bmljYWJsZXMuIChDb2RlIGR1IFBhPQp0cmltb2lu
ZSwgYXJ0LiBMLiAyMTMtMSkJCQkJCQkJCQk9MDkKKwkJMjUgYW5zIC0gc2VjcmV0IGRlcyBkPUMz
PUE5bGliPUMzPUE5cmF0aW9ucwlBUjAzOQlEb2N1bWVudHMgZG9udCBsYSBjb21tPQp1bmljYXRp
b24gcG9ydGUgYXR0ZWludGUgYXUgc2VjcmV0IGRlcyBkPUMzPUE5bGliPUMzPUE5cmF0aW9ucyBk
dSBHb3V2ZXJuZW09CmVudCBldCBkZXMgYXV0b3JpdD1DMz1BOXMgcmVzcG9uc2FibGVzIHJlbGV2
YW50IGR1IHBvdXZvaXIgZXg9QzM9QTljdXRpZiwgPQo9QzM9QTA9QzI9QTAgbGEgY29uZHVpdGUg
ZGVzIHJlbGF0aW9ucyBleHQ9QzM9QTlyaWV1cmVzLCA9QzM9QTA9QzI9QTAgbGEgbW89Cm5uYWll
IGV0IGF1IGNyPUMzPUE5ZGl0IHB1YmxpYywgYXUgc2VjcmV0IGVuIG1hdGk9QzM9QThyZSBjb21t
ZXJjaWFsZSBldCBpbj0KZHVzdHJpZWxsZSwgPUMzPUEwPUMyPUEwIGxhIHJlY2hlcmNoZSBwYXIg
bGVzIHNlcnZpY2VzIGNvbXA9QzM9QTl0ZW50cyBkZXMgPQppbmZyYWN0aW9ucyBmaXNjYWxlcyBl
dCBkb3Vhbmk9QzM9QThyZXMuIChDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEzLTI9Ciwg
SSwgMSwgYSkJCQkJCQkJCQk9MDkKKwkJMjUgYW5zIC0gRG9jdW1lbnRzIG5vbiBhZG1pbmlzdHJh
dGlmcwlBUjA0MAlEb2N1bWVudHMgcXVpIG5lIHNvbnQgcGFzIGNvPQpuc2lkPUMzPUE5cj1DMz1B
OXMgY29tbWUgYWRtaW5pc3RyYXRpZnMgZXQgbWVudGlvbm49QzM9QTlzIGF1IGRlcm5pZXIgYWxp
bj0KPUMzPUE5YSBkZSBsJiMzOQlhcnRpY2xlIDFlciBkZSBsYSBsb2kgbj1DMj1CMCA3OC03NTMg
ZHUgMTcganVpbGxldCAxOTc4IDogPQphY3RlcyBldCBkb2N1bWVudHMgPUMzPUE5bGFib3I9QzM9
QTlzIG91IGQ9QzM9QTl0ZW51cyBwYXIgbGVzIGFzc2VtYmw9QzM9QTk9CmVzIHBhcmxlbWVudGFp
cmVzLCBhdmlzIGR1IENvbnNlaWwgZCYjMzkJRXRhdCBldCBkZXMganVyaWRpY3Rpb25zIGFkbWlu
aXN0cj0KYXRpdmVzLCBkb2N1bWVudHMgZGUgbGEgQ291ciBkZXMgY29tcHRlcyBtZW50aW9ubj1D
Mz1BOXMgPUMzPUEwPUMyPUEwIGwmIzM5PQoJYXJ0aWNsZSBMLiAxNDAtOSBkdSBjb2RlIGRlcyBq
dXJpZGljdGlvbnMgZmluYW5jaT1DMz1BOHJlcyBldCBsZXMgZG9jdW1lbnQ9CnMgZGVzIGNoYW1i
cmVzIHI9QzM9QTlnaW9uYWxlcyBkZXMgY29tcHRlcyBtZW50aW9ubj1DMz1BOXMgPUMzPUEwPUMy
PUEwIGwmIz0KMzkJYXJ0aWNsZSBMLiAyNDEtNiBkdSBtPUMzPUFBbWUgY29kZSwgZG9jdW1lbnRz
IGQmIzM5CWluc3RydWN0aW9uIGRlcyByPUMzPQo9QTljbGFtYXRpb25zIGFkcmVzcz1DMz1BOWVz
IGF1IE09QzM9QTlkaWF0ZXVyIGRlIGxhIFI9QzM9QTlwdWJsaXF1ZSwgZG9jdW09CmVudHMgcHI9
QzM9QTlhbGFibGVzID1DMz1BMD1DMj1BMCBsJiMzOQk9QzM9QTlsYWJvcmF0aW9uIGR1IHJhcHBv
cnQgZCYjMzkJYT0KY2NyPUMzPUE5ZGl0YXRpb24gZGVzID1DMz1BOXRhYmxpc3NlbWVudHMgZGUg
c2FudD1DMz1BOSBwcj1DMz1BOXZ1ID1DMz1BMD0KPUMyPUEwIGwmIzM5CWFydGljbGUgTC4gNjEx
My02IGR1IGNvZGUgZGUgbGEgc2FudD1DMz1BOSBwdWJsaXF1ZSwgcmFwcG9ydHMgPQpkJiMzOQlh
dWRpdCBkZXMgPUMzPUE5dGFibGlzc2VtZW50cyBkZSBzYW50PUMzPUE5IG1lbnRpb25uPUMzPUE5
cyA9QzM9QTA9QzI9Cj1BMCBsJiMzOQlhcnRpY2xlIDQwIGRlIGxhIGxvaSBkZSBmaW5hbmNlbWVu
dCBkZSBsYSBzPUMzPUE5Y3VyaXQ9QzM9QTkgc29jaT0KYWxlIHBvdXIgMjAwMSAobj1DMj1CMCAy
MDAwLTEyNTcgZHUgMjMgZD1DMz1BOWNlbWJyZSAyMDAwKS4gKENvZGUgZHUgUGF0cmltPQpvaW5l
LCBhcnQuIEwuIDIxMy0yLCBJLCAxLCBiKQorCQkyNSBhbnMgLSBzZWNyZXQgc3RhdGlzdGlxdWUJ
QVIwNDEJU2VjcmV0IHN0YXRpc3RpcXVlLiAoQ29kZSBkdSBQYXRyaW1vaW49CmUsIGFydC4gTC4g
MjEzLTIsIEksIDEsIGEpCQkJCQkJCQkJPTA5CisJCTI1IGFucyAtIGNvbnRyYXQgZGUgcHJlc3Rh
dGlvbiBkZSBzZXJ2aWNlcwlBUjA0MglEb2N1bWVudHMgPUMzPUE5bGFib3I9Cj1DMz1BOXMgZGFu
cyBsZSBjYWRyZSBkJiMzOQl1biBjb250cmF0IGRlIHByZXN0YXRpb24gZGUgc2VydmljZXMgZXg9
QzM9QTljdT0KdD1DMz1BOSBwb3VyIGxlIGNvbXB0ZSBkJiMzOQl1bmUgb3UgZGUgcGx1c2lldXJz
IHBlcnNvbm5lcyBkPUMzPUE5dGVybWluPUMzPQo9QTllcy4gKENvZGUgZHUgUGF0cmltb2luZSwg
YXJ0LiBMLiAyMTMtMiwgSSwgMSwgYykJCQkJCQkJPTA5CisJCTI1IGFucyA9QzM9QTAgIGNvbXB0
ZXIgZGUgbGEgZGF0ZSBkZSBkPUMzPUE5Yz1DMz1BOHMgZGUgbCdpbnQ9QzM9QTlyZXNzPQo9QzM9
QTkJQVIwNDMJRG9jdW1lbnRzIGRvbnQgbGEgY29tbXVuaWNhdGlvbiBlc3Qgc3VzY2VwdGlibGUg
ZGUgcG9ydGVyIGF0dGU9CmludGUgYXUgc2VjcmV0IG09QzM9QTlkaWNhbC4gKENvZGUgZHUgUGF0
cmltb2luZSwgYXJ0LiBMLiAyMTMtMiwgSSwgMikJCQkJCT0KCQkJCT0wOQorCQkyNSBhbnMgLSBF
dGF0IGNpdmlsCUFSMDQ0CUV0YXQgY2l2aWwgKGFjdGVzIGRlIG5haXNzYW5jZSBvdSBkZSBtYXJp
YWdlKS49CiAoQ29kZSBkdSBQYXRyaW1vaW5lLCBhcnQuIEwuIDIxMy0yLCBJLCA0LCBlKQkJCQkJ
CQkJCT0wOQorCQkyNSBhbnMgLSBtaW51dGVzCUFSMDQ1CU1pbnV0ZXMgZXQgcj1DMz1BOXBlcnRv
aXJlcyBkZXMgb2ZmaWNpZXJzIHB1YmxpY3M9CiBldCBtaW5pc3Q9QzM9QTlyaWVscy4gKENvZGUg
ZHUgUGF0cmltb2luZSwgYXJ0LiBMLiAyMTMtMiwgSSwgNCwgZCkJCQkJCQkJCT0KCT0wOQorCQky
NSBhbnMgLSBwb2xpY2UganVkaWNpYWlyZQlBUjA0NglEb2N1bWVudHMgcmVsYXRpZnMgYXV4IGVu
cXU9QzM9QUF0ZXMgcj0KPUMzPUE5YWxpcz1DMz1BOWVzIHBhciBsZXMgc2VydmljZXMgZGUgbGEg
cG9saWNlIGp1ZGljaWFpcmUuIChDb2RlIGR1IFBhdHJpPQptb2luZSwgYXJ0LiBMLiAyMTMtMiwg
SSwgNCwgYikJCQkJCQkJCQk9MDkKKwkJMjUgYW5zIC0gZD1DMz1BOWNpc2lvbnMganVkaWNpYWly
ZXMJQVIwNDcJRG9jdW1lbnRzIHJlbGF0aWZzIGF1eCBhZmZhaXJlPQpzIHBvcnQ9QzM9QTllcyBk
ZXZhbnQgbGVzIGp1cmlkaWN0aW9ucywgc291cyByPUMzPUE5c2VydmUgZGVzIGRpc3Bvc2l0aW9u
cyA9CnBhcnRpY3VsaT1DMz1BOHJlcyByZWxhdGl2ZXMgYXV4IGp1Z2VtZW50cywgZXQgPUMzPUEw
PUMyPUEwIGwmIzM5CWV4PUMzPUE5Yz0KdXRpb24gZGVzIGQ9QzM9QTljaXNpb25zIGRlIGp1c3Rp
Y2UuIChDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEzLTIsIEksPQogNCwgYykJCQkJCQkJ
CT0wOQorCQk1MCBhbnMgLSB2aWUgcHJpdj1DMz1BOWUJQVIwNDgJRG9jdW1lbnRzIGRvbnQgbGEg
Y29tbXVuaWNhdGlvbiBwb3J0ZSBhdHQ9CmVpbnRlID1DMz1BMD1DMj1BMCBsYSBwcm90ZWN0aW9u
IGRlIGxhIHZpZSBwcml2PUMzPUE5ZSBvdSBwb3J0YW50IGFwcHI9QzM9Cj1BOWNpYXRpb24gb3Ug
anVnZW1lbnQgZGUgdmFsZXVyIHN1ciB1bmUgcGVyc29ubmUgcGh5c2lxdWUgbm9tbT1DMz1BOW1l
bnQgZD0KPUMzPUE5c2lnbj1DMz1BOWUsIG91IGZhY2lsZW1lbnQgaWRlbnRpZmlhYmxlLCBvdSBx
dWkgZm9udCBhcHBhcmE9QzM9QUV0cmUgPQpsZSBjb21wb3J0ZW1lbnQgZCYjMzkJdW5lIHBlcnNv
bm5lIGRhbnMgZGVzIGNvbmRpdGlvbnMgc3VzY2VwdGlibGVzIGRlIGx1aSA9CnBvcnRlciBwcj1D
Mz1BOWp1ZGljZS4gKENvZGUgZHUgUGF0cmltb2luZSwgYXJ0LiBMLiAyMTMtMiwgSSwgMykJCQkJ
CQkJCT0wOQorCQk1MCBhbnMgLSBkPUMzPUE5ZmVuc2UgbmF0aW9uYWxlCUFSMDQ5CURvY3VtZW50
cyBkb250IGxhIGNvbW11bmljYXRpb24gcG89CnJ0ZSBhdHRlaW50ZSBhdSBzZWNyZXQgZGUgbGEg
ZD1DMz1BOWZlbnNlIG5hdGlvbmFsZSwgYXV4IGludD1DMz1BOXI9QzM9QUF0cz0KIGZvbmRhbWVu
dGF1eCBkZSBsJiMzOQk9QzM9ODl0YXQgZGFucyBsYSBjb25kdWl0ZSBkZSBsYSBwb2xpdGlxdWUg
ZXh0PUMzPUE5PQpyaWV1cmUsID1DMz1BMD1DMj1BMCBsYSBzPUMzPUJCcmV0PUMzPUE5IGRlIGwm
IzM5CT1DMz04OXRhdCwgPUMzPUEwPUMyPUEwIGw9CmEgcz1DMz1BOWN1cml0PUMzPUE5IHB1Ymxp
cXVlLiAoQ29kZSBkdSBQYXRyaW1vaW5lLCBhcnQuIEwuIDIxMy0yLCBJLCAzKQkJCT0KCQkJCT0w
OQorCQk1MCBhbnMgLSBjb25zdHJ1Y3Rpb24JQVIwNTAJRG9jdW1lbnRzIHJlbGF0aWZzID1DMz1B
MD1DMj1BMCBsYSBjb25zdHJ1Y3Q9CmlvbiwgPUMzPUEwPUMyPUEwIGwmIzM5CT1DMz1BOXF1aXBl
bWVudCBldCBhdSBmb25jdGlvbm5lbWVudCBkZXMgb3V2cmFnZXMsID0KYj1DMz1BMnRpbWVudHMg
b3UgcGFydGllcyBkZSBiPUMzPUEydGltZW50cyB1dGlsaXM9QzM9QTlzIHBvdXIgbGEgZD1DMz1B
OXRlPQpudGlvbiBkZSBwZXJzb25uZXMgb3UgcmVjZXZhbnQgaGFiaXR1ZWxsZW1lbnQgZGVzIHBl
cnNvbm5lcyBkPUMzPUE5dGVudWVzLiA9CihDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEz
LTIsIEksIDMpCQkJCQkJCQk9MDkKKwkJNTAgYW5zIC0gcz1DMz1CQnJldD1DMz1BOSBkZSBsJ0V0
YXQJQVIwNTEJRG9jdW1lbnRzID1DMz1BOWxhYm9yPUMzPUE5cyBkPQphbnMgbGUgY2FkcmUgZCYj
MzkJdW4gY29udHJhdCBkZSBwcmVzdGF0aW9uIGRlIHNlcnZpY2VzIGRvbnQgbGEgY29tbXVuaWNh
dGk9Cm9uIHBvcnRlIGF0dGVpbnRlIGF1IHNlY3JldCBkZSBsYSBkPUMzPUE5ZmVuc2UgbmF0aW9u
YWxlLCBhdXggaW50PUMzPUE5cj1DMz0KPUFBdHMgZm9uZGFtZW50YXV4IGRlIGwmIzM5CT1DMz04
OXRhdCBkYW5zIGxhIGNvbmR1aXRlIGRlIGxhIHBvbGl0aXF1ZSBleHQ9Cj1DMz1BOXJpZXVyZSwg
PUMzPUEwPUMyPUEwIGxhIHM9QzM9QkJyZXQ9QzM9QTkgZGUgbCYjMzkJPUMzPTg5dGF0LCA9QzM9
QTA9Cj1DMj1BMCBsYSBzPUMzPUE5Y3VyaXQ9QzM9QTkgcHVibGlxdWUsID1DMz1BMD1DMj1BMCBs
YSBwcm90ZWN0aW9uIGRlIGxhIHZpZT0KIHByaXY9QzM9QTllLCBvdSBjb25jZXJuYW50IGRlcyBi
PUMzPUEydGltZW50cyBlbXBsb3k9QzM9QTlzIHBvdXIgbGEgZD1DMz0KPUE5dGVudGlvbiBkZSBw
ZXJzb25uZXMgb3UgcmVjZXZhbnQgaGFiaXR1ZWxsZW1lbnQgZGVzIHBlcnNvbm5lcyBkPUMzPUE5
dGVuPQp1ZXMuIChDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEzLTIsIEksIDEsIGMpCQkJ
CQkJPTA5CisJCTc1IGFucyAtIHNlY3JldCBxdWVzdGlvbm5haXJlIHN0YXRpc3RpcXVlCUFSMDUy
CVNlY3JldCBzdGF0aXN0aXF1ZSA6IGRvbj0Kbj1DMz1BOWVzIGNvbGxlY3Q9QzM9QTllcyBhdSBt
b3llbiBkZSBxdWVzdGlvbm5haXJlcyBheWFudCB0cmFpdCBhdXggZmFpdHMgPQpldCBhdXggY29t
cG9ydGVtZW50cyBkJiMzOQlvcmRyZSBwcml2PUMzPUE5LiAoQ29kZSBkdSBQYXRyaW1vaW5lLCBh
cnQuIEwuIDI9CjEzLTIsIEksIDQsIGEpCQkJCQkJCQk9MDkKKwkJNzUgYW5zIC0gcHJlc3RhdGlv
biBkZSBzZXJ2aWNlcwlBUjA1MwlEb2N1bWVudHMgPUMzPUE5bGFib3I9QzM9QTlzIGRhbnMgPQps
ZSBjYWRyZSBkJiMzOQl1biBjb250cmF0IGRlIHByZXN0YXRpb24gZGUgc2VydmljZXMgZXQgcG91
dmFudCA9QzM9QUF0cmUgbGk9Cj1DMz1BOXMgYXV4IHNlcnZpY2VzIGRlIGxhIHBvbGljZSBqdWRp
Y2lhaXJlIG91IGF1eCBhZmZhaXJlcyBwb3J0PUMzPUE5ZXMgZD0KZXZhbnQgbGVzIGp1cmlkaWN0
aW9ucy4gKENvZGUgZHUgUGF0cmltb2luZSwgYXJ0LiBMIDIxMy0yLCBJLCAxLCBiKQkJCQkJCQkJ
PTA5CisJCTc1IGFucyAtIEV0YXQgY2l2aWwJQVIwNTQJRXRhdCBjaXZpbCAoYWN0ZXMgZGUgbmFp
c3NhbmNlIG91IGRlIG1hcmlhZ2UpLj0KIChDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEz
LTIsIEksIDQsIGUpCQkJCQkJCQkJPTA5CisJCTc1IGFucyAtIG1pbnV0ZXMJQVIwNTUJTWludXRl
cyBldCByPUMzPUE5cGVydG9pcmVzIGRlcyBvZmZpY2llcnMgcHVibGljcz0KIGV0IG1pbmlzdD1D
Mz1BOXJpZWxzLiAoQ29kZSBkdSBQYXRyaW1vaW5lLCBhcnQuIEwuIDIxMy0yLCBJLCA0LCBkKQkJ
CQkJCQkJPQoJPTA5CisJCTc1IGFucyAtIGVucXU9QzM9QUF0ZXMgZGUgcG9saWNlCUFSMDU2CURv
Y3VtZW50cyByZWxhdGlmcyBhdXggZW5xdT1DMz1BQT0KdGVzIHI9QzM9QTlhbGlzPUMzPUE5ZXMg
cGFyIGxlcyBzZXJ2aWNlcyBkZSBsYSBwb2xpY2UganVkaWNpYWlyZS4gKENvZGUgZHUgPQpQYXRy
aW1vaW5lLCBhcnQuIEwuIDIxMy0yLCBJLCA0LCBiKQkJCQkJCQkJCT0wOQorCQk3NSBhbnMgLSBk
b2N1bWVudHMganVyaWRpcXVlcwlBUjA1NwlEb2N1bWVudHMgcmVsYXRpZnMgYXV4IGFmZmFpcmVz
IHBvcnQ9Cj1DMz1BOWVzIGRldmFudCBsZXMganVyaWRpY3Rpb25zLiAoQ29kZSBkdSBQYXRyaW1v
aW5lLCBhcnQuIEwuIDIxMy0yLCBJLCA0LD0KIGMpCQkJCQkJCQkJPTA5CisJCTEwMCBhbnMtIHBl
cnNvbm5lcyBtaW5ldXJlcwlBUjA1OAlEb2N1bWVudHMgPUMzPUE5dm9xdWFudCBkZXMgcGVyc29u
bmVzID0KbWluZXVyZXMgOiBzdGF0aXN0aXF1ZXMsIGVucXU9QzM9QUF0ZXMgZGUgbGEgcG9saWNl
IGp1ZGljaWFpcmUsIGRvY3VtZW50cyByPQplbGF0aWZzIGF1eCBhZmZhaXJlcyBwb3J0PUMzPUE5
ZXMgZGV2YW50IGxlcyBqdXJpZGljdGlvbnMgZXQgPUMzPUEwPUMyPUEwIGw9CiYjMzkJZXg9QzM9
QTljdXRpb24gZGVzIGQ9QzM9QTljaXNpb25zIGRlIGp1c3RpY2UuIChDb2RlIGR1IFBhdHJpbW9p
bmUsIGFydD0KLiBMLiAyMTMtMiwgSSwgNSkJCQkJCQkJCT0wOQorCQkxMDAgYW5zIC0gZD1DMz1B
OWZlbnNlIG5hdGlvbmFsZQlBUjA1OQlTZWNyZXQgZGUgbGEgRD1DMz1BOWZlbnNlIG5hdGlvbmE9
CmxlIDogZG9jdW1lbnRzIGNvdXZlcnRzIG91IGF5YW50ID1DMz1BOXQ9QzM9QTkgY291dmVydHMg
cGFyIGxlIHNlY3JldCBkZSBsYT0KIGQ9QzM9QTlmZW5zZSBuYXRpb25hbGUgZG9udCBsYSBjb21t
dW5pY2F0aW9uIGVzdCBkZSBuYXR1cmUgPUMzPUEwPUMyPUEwIHBvPQpydGVyIGF0dGVpbnRlID1D
Mz1BMD1DMj1BMCBsYSBzPUMzPUE5Y3VyaXQ9QzM9QTkgZGUgcGVyc29ubmVzIG5vbW09QzM9QTlt
ZW49CnQgZD1DMz1BOXNpZ249QzM9QTllcyBvdSBmYWNpbGVtZW50IGlkZW50aWZpYWJsZXMgKGFn
ZW50cyBzcD1DMz1BOWNpYXV4LCBhZz0KZW50cyBkZSByZW5zZWlnbmVtZW50cy4uLikuIChDb2Rl
IGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjEzLTIsIEksIDMpCQkJCQkJPQoJCQk9MDkKKwkJMTAw
IGFucyAtIGludGltaXQ9QzM9QTkJQVIwNjAJRG9jdW1lbnRzIGRvbnQgbGEgY29tbXVuaWNhdGlv
biBlc3QgZGUgbmF0PQp1cmUgPUMzPUEwPUMyPUEwIHBvcnRlciBhdHRlaW50ZSA9QzM9QTA9QzI9
QTAgbCYjMzkJaW50aW1pdD1DMz1BOSBkZSBsYSB2aWU9CiBzZXh1ZWxsZSBkZXMgcGVyc29ubmVz
IDogZW5xdT1DMz1BQXRlcyBkZSBsYSBwb2xpY2UganVkaWNpYWlyZSwgZG9jdW1lbnRzID0KcmVs
YXRpZnMgYXV4IGFmZmFpcmVzIHBvcnQ9QzM9QTllcyBkZXZhbnQgbGVzIGp1cmlkaWN0aW9ucy4g
KENvZGUgZHUgUGF0cmltPQpvaW5lLCBhcnQuIEwuIDIxMy0yLCBJLCA1KQkJCQkJCQkJPTA5CisJ
CTEyMCBhbnMgLSBzZWNyZXQgbT1DMz1BOWRpY2FsCUFSMDYxCURvY3VtZW50cyBkb250IGxhIGNv
bW11bmljYXRpb24gZXN0ID0Kc3VzY2VwdGlibGUgZGUgcG9ydGVyIGF0dGVpbnRlIGF1IHNlY3Jl
dCBtPUMzPUE5ZGljYWwuIChDb2RlIGR1IFBhdHJpbW9pbmUsPQogYXJ0LiBMLiAyMTMtMiwgSSwg
MikJCQkJCQkJCQk9MDkKKwkJSWxsaW1pdD1DMz1BOWUJQVIwNjIJQXJjaGl2ZXMgcHVibGlxdWVz
IGRvbnQgbGEgY29tbXVuaWNhdGlvbiBlc3Qgc3VzY2VwPQp0aWJsZSBkJiMzOQllbnRyYT1DMz1B
RW5lciBsYSBkaWZmdXNpb24gZCYjMzkJaW5mb3JtYXRpb25zIHBlcm1ldHRhbnQgZGUgY289Cm5j
ZXZvaXIsIGZhYnJpcXVlciwgdXRpbGlzZXIgb3UgbG9jYWxpc2VyIGRlcyBhcm1lcyBudWNsPUMz
PUE5YWlyZXMsIGJpb2xvZz0KaXF1ZXMsIGNoaW1pcXVlcyBvdSB0b3V0ZXMgYXV0cmVzIGFybWVz
IGF5YW50IGRlcyBlZmZldHMgZGlyZWN0cyBvdSBpbmRpcmVjPQp0cyBkZSBkZXN0cnVjdGlvbiBk
JiMzOQl1biBuaXZlYXUgYW5hbG9ndWUuIChDb2RlIGR1IFBhdHJpbW9pbmUsIGFydC4gTC4gMjE9
CjMtMiwgSUkpCQkJCQkJPTA5CmRpZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRp
b24vZGF0YS9zZWRhX2FwcHJhaXNhbF9ydWxlX2NvZGUuY3N2ID0KYi9jdWJpY3dlYl9zYWVtX3Jl
Zi9taWdyYXRpb24vZGF0YS9zZWRhX2FwcHJhaXNhbF9ydWxlX2NvZGUuY3N2Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY3ViaWN3ZWJfc2FlbV9yZWYvbWlncmF0aW9u
L2RhdGEvc2VkYV9hcHByYWlzYWxfcnVsZV9jb2RlLmNzdgpAQCAtMCwwICsxLDYgQEAKKyMJJGlk
CUxpYmVsbD1DMz1BOSBsb25nCUxpYmVsbD1DMz1BOSBjb3VydCAodXRpbGlzPUMzPUE5IHBvdXIg
bCc9QzM9QTljaGFuPQpnZSkJZD1DMz1BOWZpbml0aW9uCQkJCQkJCQkJPTA5Cit0eXBlCXVybAlz
dHJpbmcJc3RyaW5nCXN0cmluZwkJCQkJCQkJCT0wOQorbGFuZwkJZnIJZnIJZnIJCQkJCQkJCQk9
MDkKK3VybAlza29zOkNvbmNlcHQJc2tvczphbHRMYWJlbAlza29zOnByZWZMYWJlbAlza29zOmRl
ZmluaXRpb24JCQkJCQkJCQk9MDkKKwkJQ29uc2VydmVyCWNvbnNlcnZlcgljb25zZXJ2ZXIgbGUg
ZG9jdW1lbnQKKwkJRD1DMz1BOXRydWlyZQlkZXRydWlyZQlkPUMzPUE5dHJ1aXJlIGxlIGRvY3Vt
ZW50CmRpZmYgLS1naXQgYS9jdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRpb24vZGF0YS9zZWRhX2No
YXJhY3Rlcl9zZXRfY29kZS5jc3YgYj0KL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9kYXRh
L3NlZGFfY2hhcmFjdGVyX3NldF9jb2RlLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl
di9udWxsCisrKyBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9kYXRhL3NlZGFfY2hhcmFj
dGVyX3NldF9jb2RlLmNzdgpAQCAtMCwwICsxLDI2MCBAQAorIwkkaWQJVmFsZXVyCWQ9QzM9QTlm
aW5pdGlvbgordHlwZQl1cmwJc3RyaW5nCXN0cmluZworbGFuZwkJCWVuCit1cmwJc2tvczpDb25j
ZXB0CXNrb3M6cHJlZkxhYmVsCXNrb3M6YWx0TGFiZWwKKwkJMwlBTlNJX1gzLjQtMTk2OCBbUkZD
MTM0NSxLWFMyXQorCQk0CUlTT184ODU5LTE6MTk4NyBbUkZDMTM0NSxLWFMyXQorCQk1CUlTT184
ODU5LTI6MTk4NyBbUkZDMTM0NSxLWFMyXQorCQk2CUlTT184ODU5LTM6MTk4OCBbUkZDMTM0NSxL
WFMyXQorCQk3CUlTT184ODU5LTQ6MTk4OCBbUkZDMTM0NSxLWFMyXQorCQk4CUlTT184ODU5LTU6
MTk4OCBbUkZDMTM0NSxLWFMyXQorCQk5CUlTT184ODU5LTY6MTk4NyBbUkZDMTM0NSxLWFMyXQor
CQkxMAlJU09fODg1OS03OjE5ODcgW1JGQzE5NDcsUkZDMTM0NSxLWFMyXQorCQkxMQlJU09fODg1
OS04OjE5ODggW1JGQzEzNDUsS1hTMl0KKwkJMTIJSVNPXzg4NTktOToxOTg5IFtSRkMxMzQ1LEtY
UzJdCisJCTEzCUlTTy04ODU5LTEwKHByZWZlcnJlZE1JTUVuYW1lKSBbUkZDMTM0NSxLWFMyXQor
CQkxNAlJU09fNjkzNy0yLWFkZCBbUkZDMTM0NSxLWFMyXQorCQkxNQlKSVNfWDAyMDEgW1JGQzEz
NDUsS1hTMl0KKwkJMTYJSklTX0VuY29kaW5nCisJCTE3CVNoaWZ0X0pJUyhwcmVmZXJyZWRNSU1F
bmFtZSkKKwkJMTgJRXh0ZW5kZWRfVU5JWF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNl
CisJCTE5CUV4dGVuZGVkX1VOSVhfQ29kZV9GaXhlZF9XaWR0aF9mb3JfSmFwYW5lc2UKKwkJMjAJ
QlNfNDczMCBbUkZDMTM0NSxLWFMyXQorCQkyMQlTRU5fODUwMjAwX0MgW1JGQzEzNDUsS1hTMl0K
KwkJMjIJSVQgW1JGQzEzNDUsS1hTMl0KKwkJMjMJRVMgW1JGQzEzNDUsS1hTMl0KKwkJMjQJRElO
XzY2MDAzIFtSRkMxMzQ1LEtYUzJdCisJCTI1CU5TXzQ1NTEtMSBbUkZDMTM0NSxLWFMyXQorCQky
NglORl9aXzYyLTAxMCBbUkZDMTM0NSxLWFMyXQorCQkyNwlJU08tMTA2NDYtVVRGLTEKKwkJMjgJ
SVNPXzY0Ni5iYXNpYzoxOTgzIFtSRkMxMzQ1LEtYUzJdCisJCTI5CUlOVkFSSUFOVCBbUkZDMTM0
NSxLWFMyXQorCQkzMAlJU09fNjQ2LmlydjoxOTgzIFtSRkMxMzQ1LEtYUzJdCisJCTMxCU5BVFMt
U0VGSSBbUkZDMTM0NSxLWFMyXQorCQkzMglOQVRTLVNFRkktQUREIFtSRkMxMzQ1LEtYUzJdCisJ
CTMzCU5BVFMtREFOTyBbUkZDMTM0NSxLWFMyXQorCQkzNAlOQVRTLURBTk8tQUREIFtSRkMxMzQ1
LEtYUzJdCisJCTM1CVNFTl84NTAyMDBfQiBbUkZDMTM0NSxLWFMyXQorCQkzNglLU19DXzU2MDEt
MTk4NyBbUkZDMTM0NSxLWFMyXQorCQkzNwlJU08tMjAyMi1LUihwcmVmZXJyZWRNSU1FbmFtZSkg
W1JGQzE1NTcsQ2hvaV0KKwkJMzgJRVVDLUtSKHByZWZlcnJlZE1JTUVuYW1lKSBbUkZDMTU1NyxD
aG9pXQorCQkzOQlJU08tMjAyMi1KUChwcmVmZXJyZWRNSU1FbmFtZSkgW1JGQzE0NjgsTXVyYWld
CisJCTQwCUlTTy0yMDIyLUpQLTIocHJlZmVycmVkTUlNRW5hbWUpIFtSRkMxNTU0LE9odGFdCisJ
CTQxCUpJU19DNjIyMC0xOTY5LWpwIFtSRkMxMzQ1LEtYUzJdCisJCTQyCUpJU19DNjIyMC0xOTY5
LXJvIFtSRkMxMzQ1LEtYUzJdCisJCTQzCVBUIFtSRkMxMzQ1LEtYUzJdCisJCTQ0CWdyZWVrNy1v
bGQgW1JGQzEzNDUsS1hTMl0KKwkJNDUJbGF0aW4tZ3JlZWsgW1JGQzEzNDUsS1hTMl0KKwkJNDYJ
TkZfWl82Mi0wMTBfKDE5NzMpIFtSRkMxMzQ1LEtYUzJdCisJCTQ3CUxhdGluLWdyZWVrLTEgW1JG
QzEzNDUsS1hTMl0KKwkJNDgJSVNPXzU0MjcgW1JGQzEzNDUsS1hTMl0KKwkJNDkJSklTX0M2MjI2
LTE5NzggW1JGQzEzNDUsS1hTMl0KKwkJNTAJQlNfdmlld2RhdGEgW1JGQzEzNDUsS1hTMl0KKwkJ
NTEJSU5JUyBbUkZDMTM0NSxLWFMyXQorCQk1MglJTklTLTggW1JGQzEzNDUsS1hTMl0KKwkJNTMJ
SU5JUy1jeXJpbGxpYyBbUkZDMTM0NSxLWFMyXQorCQk1NAlJU09fNTQyNzoxOTgxIFtSRkMxMzQ1
LEtYUzJdCisJCTU1CUlTT181NDI4OjE5ODAgW1JGQzEzNDUsS1hTMl0KKwkJNTYJR0JfMTk4OC04
MCBbUkZDMTM0NSxLWFMyXQorCQk1NwlHQl8yMzEyLTgwIFtSRkMxMzQ1LEtYUzJdCisJCTU4CU5T
XzQ1NTEtMiBbUkZDMTM0NSxLWFMyXQorCQk1OQl2aWRlb3RleC1zdXBwbCBbUkZDMTM0NSxLWFMy
XQorCQk2MAlQVDIgW1JGQzEzNDUsS1hTMl0KKwkJNjEJRVMyIFtSRkMxMzQ1LEtYUzJdCisJCTYy
CU1TWl83Nzk1LjMgW1JGQzEzNDUsS1hTMl0KKwkJNjMJSklTX0M2MjI2LTE5ODMgW1JGQzEzNDUs
S1hTMl0KKwkJNjQJZ3JlZWs3IFtSRkMxMzQ1LEtYUzJdCisJCTY1CUFTTU9fNDQ5IFtSRkMxMzQ1
LEtYUzJdCisJCTY2CWlzby1pci05MCBbUkZDMTM0NSxLWFMyXQorCQk2NwlKSVNfQzYyMjktMTk4
NC1hIFtSRkMxMzQ1LEtYUzJdCisJCTY4CUpJU19DNjIyOS0xOTg0LWIgW1JGQzEzNDUsS1hTMl0K
KwkJNjkJSklTX0M2MjI5LTE5ODQtYi1hZGQgW1JGQzEzNDUsS1hTMl0KKwkJNzAJSklTX0M2MjI5
LTE5ODQtaGFuZCBbUkZDMTM0NSxLWFMyXQorCQk3MQlKSVNfQzYyMjktMTk4NC1oYW5kLWFkZCBb
UkZDMTM0NSxLWFMyXQorCQk3MglKSVNfQzYyMjktMTk4NC1rYW5hIFtSRkMxMzQ1LEtYUzJdCisJ
CTczCUlTT18yMDMzLTE5ODMgW1JGQzEzNDUsS1hTMl0KKwkJNzQJQU5TSV9YMy4xMTAtMTk4MyBb
UkZDMTM0NSxLWFMyXQorCQk3NQlULjYxLTdiaXQgW1JGQzEzNDUsS1hTMl0KKwkJNzYJVC42MS04
Yml0IFtSRkMxMzQ1LEtYUzJdCisJCTc3CUVDTUEtY3lyaWxsaWMKKwkJNzgJQ1NBX1oyNDMuNC0x
OTg1LTEgW1JGQzEzNDUsS1hTMl0KKwkJNzkJQ1NBX1oyNDMuNC0xOTg1LTIgW1JGQzEzNDUsS1hT
Ml0KKwkJODAJQ1NBX1oyNDMuNC0xOTg1LWdyIFtSRkMxMzQ1LEtYUzJdCisJCTgxCUlTT184ODU5
LTYtRSBbUkZDMTU1NixJQU5BXQorCQk4MglJU09fODg1OS02LUkgW1JGQzE1NTYsSUFOQV0KKwkJ
ODMJVC4xMDEtRzIgW1JGQzEzNDUsS1hTMl0KKwkJODQJSVNPXzg4NTktOC1FIFtSRkMxNTU2LE51
c3NiYWNoZXJdCisJCTg1CUlTT184ODU5LTgtSSBbUkZDMTU1NixOdXNzYmFjaGVyXQorCQk4NglD
U05fMzY5MTAzIFtSRkMxMzQ1LEtYUzJdCisJCTg3CUpVU19JLkIxLjAwMiBbUkZDMTM0NSxLWFMy
XQorCQk4OAlJRUNfUDI3LTEgW1JGQzEzNDUsS1hTMl0KKwkJODkJSlVTX0kuQjEuMDAzLXNlcmIg
W1JGQzEzNDUsS1hTMl0KKwkJOTAJSlVTX0kuQjEuMDAzLW1hYyBbUkZDMTM0NSxLWFMyXQorCQk5
MQlncmVlay1jY2l0dCBbUkZDMTM0NSxLWFMyXQorCQk5MglOQ19OQzAwLTEwOjgxIFtSRkMxMzQ1
LEtYUzJdCisJCTkzCUlTT182OTM3LTItMjUgW1JGQzEzNDUsS1hTMl0KKwkJOTQJR09TVF8xOTc2
OC03NCBbUkZDMTM0NSxLWFMyXQorCQk5NQlJU09fODg1OS1zdXBwIFtSRkMxMzQ1LEtYUzJdCisJ
CTk2CUlTT18xMDM2Ny1ib3ggW1JGQzEzNDUsS1hTMl0KKwkJOTcJbGF0aW4tbGFwIFtSRkMxMzQ1
LEtYUzJdCisJCTk4CUpJU19YMDIxMi0xOTkwIFtSRkMxMzQ1LEtYUzJdCisJCTk5CURTXzIwODkg
W1JGQzEzNDUsS1hTMl0KKwkJMTAwCXVzLWRrIFtSRkMxMzQ1LEtYUzJdCisJCTEwMQlkay11cyBb
UkZDMTM0NSxLWFMyXQorCQkxMDIJS1NDNTYzNiBbUkZDMTM0NSxLWFMyXQorCQkxMDMJVU5JQ09E
RS0xLTEtVVRGLTcgW1JGQzE2NDJdCisJCTEwNAlJU08tMjAyMi1DTiBbUkZDMTkyMl0KKwkJMTA1
CUlTTy0yMDIyLUNOLUVYVCBbUkZDMTkyMl0KKwkJMTA2CVVURi04IFtSRkMzNjI5XQorCQkxMDkJ
SVNPLTg4NTktMTMKKwkJMTEwCUlTTy04ODU5LTE0CisJCTExMQlJU08tODg1OS0xNQorCQkxMTIJ
SVNPLTg4NTktMTYKKwkJMTEzCUdCSworCQkxMTQJR0IxODAzMAorCQkxMTUJT1NEX0VCQ0RJQ19E
RjA0XzE1CisJCTExNglPU0RfRUJDRElDX0RGMDNfSVJWCisJCTExNwlPU0RfRUJDRElDX0RGMDRf
MQorCQkxMTgJSVNPLTExNTQ4LTEKKwkJMTE5CUtaLTEwNDgKKwkJMTAwMAlJU08tMTA2NDYtVUNT
LTIKKwkJMTAwMQlJU08tMTA2NDYtVUNTLTQKKwkJMTAwMglJU08tMTA2NDYtVUNTLUJhc2ljCisJ
CTEwMDMJSVNPLTEwNjQ2LVVuaWNvZGUtTGF0aW4xCisJCTEwMDQJSVNPLTEwNjQ2LUotMQorCQkx
MDA1CUlTTy1Vbmljb2RlLUlCTS0xMjYxCisJCTEwMDYJSVNPLVVuaWNvZGUtSUJNLTEyNjgKKwkJ
MTAwNwlJU08tVW5pY29kZS1JQk0tMTI3NgorCQkxMDA4CUlTTy1Vbmljb2RlLUlCTS0xMjY0CisJ
CTEwMDkJSVNPLVVuaWNvZGUtSUJNLTEyNjUKKwkJMTAxMAlVTklDT0RFLTEtMSBbUkZDMTY0MV0K
KwkJMTAxMQlTQ1NVCisJCTEwMTIJVVRGLTcgW1JGQzIxNTJdCisJCTEwMTMJVVRGLTE2QkUgW1JG
QzI3ODFdCisJCTEwMTQJVVRGLTE2TEUgW1JGQzI3ODFdCisJCTEwMTUJVVRGLTE2IFtSRkMyNzgx
XQorCQkxMDE2CUNFU1UtOCBbUGhpcHBzXQorCQkxMDE3CVVURi0zMiBbRGF2aXNdCisJCTEwMTgJ
VVRGLTMyQkUgW0RhdmlzXQorCQkxMDE5CVVURi0zMkxFIFtEYXZpc10KKwkJMTAyMAlCT0NVLTEg
W1NjaGVyZXJdCisJCTIwMDAJSVNPLTg4NTktMS1XaW5kb3dzLTMuMC1MYXRpbi0xIFtIUC1QQ0w1
XQorCQkyMDAxCUlTTy04ODU5LTEtV2luZG93cy0zLjEtTGF0aW4tMSBbSFAtUENMNV0KKwkJMjAw
MglJU08tODg1OS0yLVdpbmRvd3MtTGF0aW4tMiBbSFAtUENMNV0KKwkJMjAwMwlJU08tODg1OS05
LVdpbmRvd3MtTGF0aW4tNSBbSFAtUENMNV0KKwkJMjAwNAlocC1yb21hbjggW0hQLVBDTDUsUkZD
MTM0NSxLWFMyXQorCQkyMDA1CUFkb2JlLVN0YW5kYXJkLUVuY29kaW5nIFtBZG9iZV0KKwkJMjAw
NglWZW50dXJhLVVTIFtIUC1QQ0w1XQorCQkyMDA3CVZlbnR1cmEtSW50ZXJuYXRpb25hbCBbSFAt
UENMNV0KKwkJMjAwOAlERUMtTUNTIFtSRkMxMzQ1LEtYUzJdCisJCTIwMDkJSUJNODUwIFtSRkMx
MzQ1LEtYUzJdCisJCTIwMTIJUEM4LURhbmlzaC1Ob3J3ZWdpYW4gW0hQLVBDTDVdCisJCTIwMTMJ
SUJNODYyIFtSRkMxMzQ1LEtYUzJdCisJCTIwMTQJUEM4LVR1cmtpc2ggW0hQLVBDTDVdCisJCTIw
MTUJSUJNLVN5bWJvbHMgW0lCTS1DSURUXQorCQkyMDE2CUlCTS1UaGFpIFtJQk0tQ0lEVF0KKwkJ
MjAxNwlIUC1MZWdhbCBbSFAtUENMNV0KKwkJMjAxOAlIUC1QaS1mb250IFtIUC1QQ0w1XQorCQky
MDE5CUhQLU1hdGg4IFtIUC1QQ0w1XQorCQkyMDIwCUFkb2JlLVN5bWJvbC1FbmNvZGluZyBbQWRv
YmVdCisJCTIwMjEJSFAtRGVza1RvcCBbSFAtUENMNV0KKwkJMjAyMglWZW50dXJhLU1hdGggW0hQ
LVBDTDVdCisJCTIwMjMJTWljcm9zb2Z0LVB1Ymxpc2hpbmcgW0hQLVBDTDVdCisJCTIwMjQJV2lu
ZG93cy0zMUoKKwkJMjAyNQlHQjIzMTIocHJlZmVycmVkTUlNRW5hbWUpCisJCTIwMjYJQmlnNShw
cmVmZXJyZWRNSU1FbmFtZSkKKwkJMjAyNwltYWNpbnRvc2ggW1JGQzEzNDUsS1hTMl0KKwkJMjAy
OAlJQk0wMzcgW1JGQzEzNDUsS1hTMl0KKwkJMjAyOQlJQk0wMzggW1JGQzEzNDUsS1hTMl0KKwkJ
MjAzMAlJQk0yNzMgW1JGQzEzNDUsS1hTMl0KKwkJMjAzMQlJQk0yNzQgW1JGQzEzNDUsS1hTMl0K
KwkJMjAzMglJQk0yNzUgW1JGQzEzNDUsS1hTMl0KKwkJMjAzMwlJQk0yNzcgW1JGQzEzNDUsS1hT
Ml0KKwkJMjAzNAlJQk0yNzggW1JGQzEzNDUsS1hTMl0KKwkJMjAzNQlJQk0yODAgW1JGQzEzNDUs
S1hTMl0KKwkJMjAzNglJQk0yODEgW1JGQzEzNDUsS1hTMl0KKwkJMjAzNwlJQk0yODQgW1JGQzEz
NDUsS1hTMl0KKwkJMjAzOAlJQk0yODUgW1JGQzEzNDUsS1hTMl0KKwkJMjAzOQlJQk0yOTAgW1JG
QzEzNDUsS1hTMl0KKwkJMjA0MAlJQk0yOTcgW1JGQzEzNDUsS1hTMl0KKwkJMjA0MQlJQk00MjAg
W1JGQzEzNDUsS1hTMl0KKwkJMjA0MglJQk00MjMgW1JGQzEzNDUsS1hTMl0KKwkJMjA0MwlJQk00
MjQgW1JGQzEzNDUsS1hTMl0KKwkJMjAxMQlJQk00MzcgW1JGQzEzNDUsS1hTMl0KKwkJMjA0NAlJ
Qk01MDAgW1JGQzEzNDUsS1hTMl0KKwkJMjA0NQlJQk04NTEgW1JGQzEzNDUsS1hTMl0KKwkJMjAx
MAlJQk04NTIgW1JGQzEzNDUsS1hTMl0KKwkJMjA0NglJQk04NTUgW1JGQzEzNDUsS1hTMl0KKwkJ
MjA0NwlJQk04NTcgW1JGQzEzNDUsS1hTMl0KKwkJMjA0OAlJQk04NjAgW1JGQzEzNDUsS1hTMl0K
KwkJMjA0OQlJQk04NjEgW1JGQzEzNDUsS1hTMl0KKwkJMjA1MAlJQk04NjMgW1JGQzEzNDUsS1hT
Ml0KKwkJMjA1MQlJQk04NjQgW1JGQzEzNDUsS1hTMl0KKwkJMjA1MglJQk04NjUgW1JGQzEzNDUs
S1hTMl0KKwkJMjA1MwlJQk04NjggW1JGQzEzNDUsS1hTMl0KKwkJMjA1NAlJQk04NjkgW1JGQzEz
NDUsS1hTMl0KKwkJMjA1NQlJQk04NzAgW1JGQzEzNDUsS1hTMl0KKwkJMjA1NglJQk04NzEgW1JG
QzEzNDUsS1hTMl0KKwkJMjA1NwlJQk04ODAgW1JGQzEzNDUsS1hTMl0KKwkJMjA1OAlJQk04OTEg
W1JGQzEzNDUsS1hTMl0KKwkJMjA1OQlJQk05MDMgW1JGQzEzNDUsS1hTMl0KKwkJMjA2MAlJQk05
MDQgW1JGQzEzNDUsS1hTMl0KKwkJMjA2MQlJQk05MDUgW1JGQzEzNDUsS1hTMl0KKwkJMjA2MglJ
Qk05MTggW1JGQzEzNDUsS1hTMl0KKwkJMjA2MwlJQk0xMDI2IFtSRkMxMzQ1LEtYUzJdCisJCTIw
NjQJRUJDRElDLUFULURFIFtSRkMxMzQ1LEtYUzJdCisJCTIwNjUJRUJDRElDLUFULURFLUEgW1JG
QzEzNDUsS1hTMl0KKwkJMjA2NglFQkNESUMtQ0EtRlIgW1JGQzEzNDUsS1hTMl0KKwkJMjA2NwlF
QkNESUMtREstTk8gW1JGQzEzNDUsS1hTMl0KKwkJMjA2OAlFQkNESUMtREstTk8tQSBbUkZDMTM0
NSxLWFMyXQorCQkyMDY5CUVCQ0RJQy1GSS1TRSBbUkZDMTM0NSxLWFMyXQorCQkyMDcwCUVCQ0RJ
Qy1GSS1TRS1BIFtSRkMxMzQ1LEtYUzJdCisJCTIwNzEJRUJDRElDLUZSIFtSRkMxMzQ1LEtYUzJd
CisJCTIwNzIJRUJDRElDLUlUIFtSRkMxMzQ1LEtYUzJdCisJCTIwNzMJRUJDRElDLVBUIFtSRkMx
MzQ1LEtYUzJdCisJCTIwNzQJRUJDRElDLUVTIFtSRkMxMzQ1LEtYUzJdCisJCTIwNzUJRUJDRElD
LUVTLUEgW1JGQzEzNDUsS1hTMl0KKwkJMjA3NglFQkNESUMtRVMtUyBbUkZDMTM0NSxLWFMyXQor
CQkyMDc3CUVCQ0RJQy1VSyBbUkZDMTM0NSxLWFMyXQorCQkyMDc4CUVCQ0RJQy1VUyBbUkZDMTM0
NSxLWFMyXQorCQkyMDc5CVVOS05PV04tOEJJVCBbUkZDMTQyOF0KKwkJMjA4MAlNTkVNT05JQyBb
UkZDMTM0NSxLWFMyXQorCQkyMDgxCU1ORU0gW1JGQzEzNDUsS1hTMl0KKwkJMjA4MglWSVNDSUkg
W1JGQzE0NTZdCisJCTIwODMJVklRUiBbUkZDMTQ1Nl0KKwkJMjA4NAlLT0k4LVIocHJlZmVycmVk
TUlNRW5hbWUpIFtSRkMxNDg5XQorCQkyMDg1CUhaLUdCLTIzMTIKKwkJMjA4NglJQk04NjYgW1Bv
bmRdCisJCTIwODcJSUJNNzc1IFtIUC1QQ0w1XQorCQkyMDg4CUtPSTgtVSBbUkZDMjMxOV0KKwkJ
MjA4OQlJQk0wMDg1OAorCQkyMDkwCUlCTTAwOTI0CisJCTIwOTEJSUJNMDExNDAKKwkJMjA5MglJ
Qk0wMTE0MQorCQkyMDkzCUlCTTAxMTQyCisJCTIwOTQJSUJNMDExNDMKKwkJMjA5NQlJQk0wMTE0
NAorCQkyMDk2CUlCTTAxMTQ1CisJCTIwOTcJSUJNMDExNDYKKwkJMjA5OAlJQk0wMTE0NworCQky
MDk5CUlCTTAxMTQ4CisJCTIxMDAJSUJNMDExNDkKKwkJMjEwMQlCaWc1LUhLU0NTIFtZaWNrXQor
CQkyMTAyCUlCTTEwNDcgW1JvYnJpZ2Fkb10KKwkJMjEwMwlQVENQMTU0IFtVc2tvdl0KKwkJMjEw
NAlBbWlnYS0xMjUxCisJCTIxMDUJS09JNy1zd2l0Y2hlZAorCQkyMTA2CUJSRgorCQkyMTA3CVRT
Q0lJCisJCTIxMDgJQ1A1MTkzMgorCQkyMTA5CXdpbmRvd3MtODc0CisJCTIyNTAJd2luZG93cy0x
MjUwCisJCTIyNTEJd2luZG93cy0xMjUxCisJCTIyNTIJd2luZG93cy0xMjUyCisJCTIyNTMJd2lu
ZG93cy0xMjUzCisJCTIyNTQJd2luZG93cy0xMjU0CisJCTIyNTUJd2luZG93cy0xMjU1CisJCTIy
NTYJd2luZG93cy0xMjU2CisJCTIyNTcJd2luZG93cy0xMjU3CisJCTIyNTgJd2luZG93cy0xMjU4
CisJCTIyNTkJVElTLTYyMApkaWZmIC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9yZWYvbWlncmF0aW9u
L2RhdGEvc2VkYV9kZXNjcmlwdGlvbl9sZXZlbC5jc3YgYi89CmN1Ymljd2ViX3NhZW1fcmVmL21p
Z3JhdGlvbi9kYXRhL3NlZGFfZGVzY3JpcHRpb25fbGV2ZWwuY3N2Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY3ViaWN3ZWJfc2FlbV9yZWYvbWlncmF0aW9uL2RhdGEv
c2VkYV9kZXNjcmlwdGlvbl9sZXZlbC5jc3YKQEAgLTAsMCArMSwxNCBAQAorIwkkaWQJTGliZWxs
PUMzPUE5IGNvdXJ0ICh1dGlsaXM9QzM9QTkgcG91ciBsJz1DMz1BOWNoYW5nZSkJTGliZWxsPUMz
PUE5IGw9Cm9uZwlkPUMzPUE5ZmluaXRpb24KK3R5cGUJdXJsCXN0cmluZwlzdHJpbmcJc3RyaW5n
CitsYW5nCQlmcglmcglmcgordXJsCXNrb3M6Q29uY2VwdAlza29zOnByZWZMYWJlbAlza29zOmFs
dExhYmVsCXNrb3M6ZGVmaW5pdGlvbgorCQljbGFzcyAJQ2xhc3NlCUNldHRlIHZhbGV1ciwgaXNz
dWUgZGUgbGEgdHJhZGl0aW9uIGFyY2hpdmlzdGlxdWUgYWxsZW1hbmQ9CmUsIG5lIGNvcnJlc3Bv
bmQgcGFzIHBvdXIgbCdpbnN0YW50IGF1eCBwcmF0aXF1ZXMgYXJjaGl2aXN0aXF1ZXMgZnJhbj1D
Mz1BNz0KYWlzZXMKKwkJY29sbGVjdGlvbiAJQ29sbGVjdGlvbglSPUMzPUE5dW5pb24gYXJ0aWZp
Y2llbGxlIGRlIGRvY3VtZW50cyBlbiBmb25jdGlvPQpuIGRlIGNyaXQ9QzM9QThyZXMgY29tbXVu
cyBsaT1DMz1BOXMgPUMzPUEwPUMyPUEwIGxldXIgY29udGVudSBvdSA9QzM9QTAgbGU9CnVyIHN1
cHBvcnQsIHNhbnMgY29uc2lkPUMzPUE5cmF0aW9uIGRlIGxldXIgcHJvdmVuYW5jZSwgcGFyIG9w
cG9zaXRpb24gYXUgZj0Kb25kcyBkJ2FyY2hpdmVzIGNvbnN0aXR1PUMzPUE5IGRlIGZhPUMzPUE3
b24gb3JnYW5pcXVlCisJCWZpbGUgCURvc3NpZXIgbCdpbnQ9QzM9QTlyaWV1ciBkJ3VuZSBzPUMz
PUE5cmllIG9yZ2FuaXF1ZQlFbnNlbWJsZSBkZSBkbz0KY3VtZW50cyByZWdyb3VwPUMzPUE5cywg
c29pdCBwYXIgbGUgcHJvZHVjdGV1ciBwb3VyIHNvbiB1c2FnZSBjb3VyYW50LCBzb2l0PQogZGFu
cyBsZSBwcm9jZXNzdXMgZHUgY2xhc3NlbWVudCBkJ2FyY2hpdmVzLCBwYXJjZSBxdSdpbHMgY29u
Y2VybmVudCB1biBtPQo9QzM9QUFtZSBzdWpldCBvdSB1bmUgbT1DMz1BQW1lIGFmZmFpcmU7IGxl
IGRvc3NpZXIgZXN0IG9yZGluYWlyZW1lbnQgbCd1bmk9CnQ9QzM9QTkgZGUgYmFzZSA9QzM9QTAK
KwkJZm9uZHMgCUZvbmRzIAlFbnNlbWJsZSBkZSBkb2N1bWVudHMgcXVlbHMgcXVlIHNvaXQgbGV1
ciB0eXBlIGV0IGxldXIgc3VwPQpwb3J0LCBjcj1DMz1BOT1DMz1BOSBvdSByZT1DMz1BN3UgZGUg
bWFuaT1DMz1BOHJlIG9yZ2FuaXF1ZSBldCB1dGlsaXM9QzM9QTk9CiBwYXIgdW5lIHBlcnNvbm5l
IHBoeXNpcXVlIG91IG1vcmFsZSBkYW5zIGwnZXhlcmNpY2UgZGUgc2VzIGFjdGl2aXQ9QzM9QTlz
CisJCWl0ZW0gCUl0ZW0JUGx1cyBwZXRpdGUgdW5pdD1DMz1BOSBkb2N1bWVudGFpcmUsIHBhciBl
eGVtcGxlIHVuZSBsZXR0cmUsID0KdW4gbT1DMz1BOW1vaXJlLCB1biByYXBwb3J0LCB1bmUgcGhv
dG9ncmFwaGllLCB1biBlbnJlZ2lzdHJlbWVudCBzb25vcmUKKwkJcmVjb3JkZ3JwIAlHcm91cGUg
ZGUgZG9jdW1lbnRzCU5pdmVhdSBkZSBkZXNjcmlwdGlvbiBpbnRlcm09QzM9QTlkaWFpcmUgPQpx
dWkgbmUgY29ycmVzcG9uZCBwYXMgPUMzPUEwIHVuZSBkaXZpc2lvbiBvcmdhbmlxdWUgKHNvdXMt
Zm9uZHMsIHM9QzM9QTlyaWU9CiBvdSBzb3VzLXM9QzM9QTlyaWUgb3JnYW5pcXVlKTsgcGFydGll
cyBhdSBzZWluIGQndW5lIGNvbGxlY3Rpb24sIHZlcnNlbWVudD0KcywgPUMzPUE5cGF2ZXMgZCd1
biBmb25kcywgc3ViZGl2aXNpb25zIGRlIGZvbmRzIGRvbnQgb24gbmUgY29ubmFpdCBwYXMgbGEg
PQpuYXR1cmUgZXhhY3RlLCBzb3VzLWVuc2VtYmxlIGNsYXNzPUMzPUE5cyB0aD1DMz1BOW1hdGlx
dWVtZW50CisJCXNlcmllcyAJU2VyaWUgb3JnYW5pcXVlIAlEaXZpc2lvbiBvcmdhbmlxdWUgZCd1
biBmb25kcywgY29ycmVzcG9uZGFudCA9Cj1DMz1BMCB1biBlbnNlbWJsZSBkZSBkb3NzaWVycyBt
YWludGVudXMgZ3JvdXA9QzM9QTlzIHBhcmNlIHF1J2lscyByPUMzPUE5cz0KdWx0ZW50IGQndW5l
IG09QzM9QUFtZSBhY3Rpdml0PUMzPUE5LCBzZSByYXBwb3J0ZW50ID1DMz1BMCB1bmUgbT1DMz1B
QW1lIGZvPQpuY3Rpb24gb3UgPUMzPUEwIHVuIG09QzM9QUFtZSBzdWpldCBvdSByZXY9QzM9QUF0
ZW50IHVuZSBtPUMzPUFBbWUgZm9ybWUKKwkJc3ViZm9uZHMgCVNvdXMgZm9uZHMJRGl2aXNpb24g
b3JnYW5pcXVlIGQndW4gZm9uZHMgY29ycmVzcG9uZGFudCBhdXggZGl2PQppc2lvbnMgYWRtaW5p
c3RyYXRpdmVzIGRlIGwnaW5zdGl0dXRpb24gb3UgZGUgbCdvcmdhbmlzbWUgcHJvZHVjdGV1ciwg
b3UsID0KPUMzPUEwIGQ9QzM9QTlmYXV0LCA9QzM9QTAgdW4gcmVncm91cGVtZW50IGc9QzM9QTlv
Z3JhcGhpcXVlLCBjaHJvbm9sb2dpcXVlPQosIGZvbmN0aW9ubmVsIG91IGF1dHJlIGRlcyBkb2N1
bWVudHM7IHF1YW5kIGxlIHByb2R1Y3RldXIgYSB1bmUgc3RydWN0dXJlIGg9Cmk9QzM9QTlyYXJj
aGlxdWUgY29tcGxleGUgLCBjaGFxdWUgc291cy1mb25kcyBlc3QgbHVpLW09QzM9QUFtZSBzdWJk
aXZpcz1DMz0KPUE5LCBhdXRhbnQgcXVlIG49QzM9QTljZXNzYWlyZSBwb3VyIHJlZmw9QzM9QTl0
ZXIgbGVzIG5pdmVhdXggaGk9QzM9QTlyYXJjPQpoaXF1ZXMKKwkJc3ViZ3JwIAlTb3VzLWdyb3Vw
ZSBkZSBkb2N1bWVudHMJU3ViZGl2aXNpb24gZHUgZ3JvdXBlIGRlIGRvY3VtZW50cworCQlzdWJz
ZXJpZXMgCVNvdXMtcz1DMz1BOXJpZSBvcmdhbmlxdWUJU3ViZGl2aXNpb24gZGUgbGEgcz1DMz1B
OXJpZSBvcmdhbmk9CnF1ZQpkaWZmIC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9yZWYvbWlncmF0aW9u
L2RhdGEvc2VkYV9kb2N1bWVudF90eXBlX2NvZGUuY3N2IGI9Ci9jdWJpY3dlYl9zYWVtX3JlZi9t
aWdyYXRpb24vZGF0YS9zZWRhX2RvY3VtZW50X3R5cGVfY29kZS5jc3YKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRpb24vZGF0
YS9zZWRhX2RvY3VtZW50X3R5cGVfY29kZS5jc3YKQEAgLTAsMCArMSwxMyBAQAorIwkkaWQJVmFs
ZXVyCWQ9QzM9QTlmaW5pdGlvbgordHlwZQl1cmwJc3RyaW5nCXN0cmluZworbGFuZwkJCWVuCit1
cmwJc2tvczpDb25jZXB0CXNrb3M6cHJlZkxhYmVsCXNrb3M6ZGVmaW5pdGlvbgorCQlDRE8JQ29u
dGVudSBkZSBkb25uPUMzPUE5ZXMgT2JqZXQgbnVtPUMzPUE5cmlxdWUgb3UgcGh5c2lxdWUgcXVp
IGVzdCBsJ289CmJqZXQgcHJpbmNpcGFsIGRlIGxhIHA9QzM9QTlyZW5uaXNhdGlvbi4gSVNPIDE0
NzIxOjIwMDMoU3BhY2UgZGF0YSBhbmQgaW5mbz0Kcm1hdGlvbiB0cmFuc2ZlciBzeXN0ZW1zIC0t
IE9wZW4gYXJjaGl2YWwgaW5mb3JtYXRpb24gc3lzdGVtIC0tUmVmZXJlbmNlIG1vPQpkZWwpCisJ
CVJJCUluZm9ybWF0aW9uIGRlIHJlcHI9QzM9QTlzZW50YXRpb24gSW5mb3JtYXRpb24gcXVpIHRy
YWR1aXQgdW4gY29udGVudT0KIGRlIGRvbm49QzM9QTllcyBlbiBkZXMgY29uY2VwdHMgcGx1cyBl
eHBsaWNpdGVzLiBQYXIgZXhlbXBsZSwgbGEgZD1DMz1BOWZpPQpuaXRpb24gZHUgY29kZSBBU0NJ
SSBkPUMzPUE5Y3JpdCBjb21tZW50IHVuZSBzPUMzPUE5cXVlbmNlIGRlIGJpdHMgKHVuIGNvbnQ9
CmVudSBkZSBkb25uPUMzPUE5ZXMpIGVzdCBjb252ZXJ0aWUgZW4gY2FyYWN0PUMzPUE4cmVzLiBM
J2luZm9ybWF0aW9uIGRlIHJlcD0Kcj1DMz1BOXNlbnRhdGlvbiBwZXV0ID1DMz1BQXRyZSBkZSBz
dHJ1Y3R1cmUgb3Ugcz1DMz1BOW1hbnRpcXVlLiBJU08gMTQ3MjE6PQoyMDAzIChTcGFjZSBkYXRh
IGFuZCBpbmZvcm1hdGlvbiB0cmFuc2ZlciBzeXN0ZW1zIC0tIE9wZW4gYXJjaGl2YWwgaW5mb3Jt
YXQ9CmlvbiBzeXN0ZW0gLS0gUmVmZXJlbmNlIG1vZGVsCisJCVJJU1RSCUluZm9ybWF0aW9uIGRl
IHN0cnVjdHVyZSBJbmZvcm1hdGlvbiBkZSByZXByPUMzPUE5c2VudGF0aW9uIHF1aSBleD0KcGxp
cXVlIGxhIGZhPUMzPTgzPUMyPUE3b24gZG9udCBkJ2F1dHJlcyBpbmZvcm1hdGlvbnMgc29udCBv
cmdhbmlzPUMzPUE5ZXMuPQogRWxsZSA9QzM9QTl0YWJsaXQgcGFyIGV4ZW1wbGUgdW5lIGNvcnJl
c3BvbmRhbmNlIGVudHJlIGxlcyB0cmFpbnMgZGUgYml0cyA9CmV0IGxlcyB0eXBlcyBkZSBkb25u
PUMzPUE5ZXMgY291cmFudHMgc3VyIG9yZGluYXRldXJzICh0ZWxzIHF1ZSBjYXJhY3Q9QzM9Cj1B
OHJlcywgbm9tYnJlcywgcGl4ZWxzIG91IGFncj1DMz1BOWdhdHMgZGUgY2VzIHR5cGVzIHRlbHMg
cXVlIGNoYT1DMz04Mz1DMj0KPUFFbmVzIGRlIGNhcmFjdD1DMz1BOHJlcyBldCB0YWJsZWF1eCku
IElTTyAxNDcyMToyMDAzIChTcGFjZSBkYXRhIGFuZCBpbmZvPQpybWF0aW9uIHRyYW5zZmVyIHN5
c3RlbXMgLS0gT3BlbiBhcmNoaXZhbCBpbmZvcm1hdGlvbiBzeXN0ZW0gLS0gUmVmZXJlbmNlIG09
Cm9kZWwpCisJCVJJU0VNCUluZm9ybWF0aW9uIHM9QzM9QTltYW50aXF1ZSBJbmZvcm1hdGlvbiBk
ZSByZXByPUMzPUE5c2VudGF0aW9uIHF1aT0KIGNvbXBsPUMzPUE4dGUgbCdpbmZvcm1hdGlvbiBk
ZSBzdHJ1Y3R1cmUgcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgbGEgc2lnbmlmPQppY2F0aW9uIHBh
cnRpY3VsaT1DMz1BOHJlIGFzc29jaT1DMz1BOWUgPUMzPUEwIGNoYWN1biBkZXMgPUMzPUE5bD1D
Mz1BOW1lbnQ9CnMgZGUgbGEgc3RydWN0dXJlLCBsZXMgb3A9QzM9QTlyYXRpb25zIHI9QzM9QTlh
bGlzYWJsZXMgc3VyIGNoYXF1ZSB0eXBlIGRlID0KZG9ubj1DMz1BOWVzLCBsZXVycyBjb3JyPUMz
PUE5bGF0aW9ucy4uLiBJU08gMTQ3MjE6MjAwMyAoU3BhY2UgZGF0YSBhbmQgaW5mPQpvcm1hdGlv
biBzeXN0ZW1zdHJhbnNmZSAtLSBPcGVuIGFyY2hpdmFsIGluZm9ybWF0aW9uIHN5c3RlbSAtLSBS
ZWZlcmVuY2UgbW89CmRlbCkKKwkJUERJCUluZm9ybWF0aW9uIGRlIHA9QzM9QTlyZW5uaXNhdGlv
biBJbmZvcm1hdGlvbiBuPUMzPUE5Y2Vzc2FpcmUgPUMzPUEwPQogdW5lIGJvbm5lIGNvbnNlcnZh
dGlvbiBkdSBjb250ZW51IGQnaW5mb3JtYXRpb24sIGV0IHF1aSBwZXV0ID1DMz1BQXRyZSBkPQo9
QzM9QTljb21wb3M9QzM9QTllIGVuIGluZm9ybWF0aW9ucyBkZSBwcm92ZW5hbmNlLCBkJ2lkZW50
aWZpY2F0aW9uLCBkJ2ludD0KPUMzPUE5Z3JpdD1DMz1BOSBldCBkZSBjb250ZXh0ZS4gSVNPIDE0
NzIxOjIwMDMgKFNwYWNlIGRhdGEgYW5kIGluZm9ybWF0aW9uPQogdHJhbnNmZXIgc3lzdGVtcyAt
LSBPcGVuIGFyY2hpdmFsIGluZm9ybWF0aW9uIHN5c3RlbSAtLSBSZWZlcmVuY2UgbW9kZWwpCisJ
CVBESVBSTwlJbmZvcm1hdGlvbiBkZSBwcm92ZW5hbmNlIEluZm9ybWF0aW9uIGRlIHA9QzM9QTly
ZW5uaXNhdGlvbiBxdWkgZD0Kb2N1bWVudGUgbCdoaXN0b3JpcXVlIGR1IGNvbnRlbnUgZCdpbmZv
cm1hdGlvbi4gQ2V0dGUgaW5mb3JtYXRpb24gcmVuc2VpZ25lPQogc3VyIGwnb3JpZ2luZSBvdSBs
YSBzb3VyY2UgZHUgY29udGVudSBkJ2luZm9ybWF0aW9uLCBzdXIgdG91dGUgbW9kaWZpY2F0aW89
Cm4gaW50ZXJ2ZW51ZSBkZXB1aXMgc2EgY3I9QzM9QTlhdGlvbiBldCBzdXIgY2V1eCBxdWkgZW4g
b250IGV1IGxhIHJlc3BvbnNhYj0KaWxpdD1DMz1BOS4gRXhlbXBsZSA6IG5vbSBkdSBwcmluY2lw
YWwgcmVzcG9uc2FibGUgZGUgbCdlbnJlZ2lzdHJlbWVudCBkZXMgPQpkb25uPUMzPUE5ZXMsIGlu
Zm9ybWF0aW9ucyByZWxhdGl2ZXMgYXUgc3RvY2thZ2UsID1DMz1BMCBsYSBtYW5pcHVsYXRpb24g
ZXQ9CiA9QzM9QTAgbGEgbWlncmF0aW9uIGRlcyBkb25uPUMzPUE5ZXMuIElTTyAxNDcyMToyMDAz
IChTcGFjZSBkYXRhIGFuZCBpbmZvcj0KbWF0aW9uIHRyYW5zZmVyIHN5c3RlbXMgLS0gT3BlbiBh
cmNoaXZhbCBpbmZvcm1hdGlvbiBzeXN0ZW0gLS0gUmVmZXJlbmNlIG1vPQpkZWwpCisJCVBESVJF
RglJbmZvcm1hdGlvbiBkJ2lkZW50aWZpY2F0aW9uIEluZm9ybWF0aW9uIGRlIHA9QzM9QTlyZW5u
aXNhdGlvbiBxdT0KaSBpZGVudGlmaWUsIGV0IHNpIG49QzM9QTljZXNzYWlyZSBkPUMzPUE5Y3Jp
dCwgbGUgb3UgbGVzIG09QzM9QTljYW5pc21lcyBkPQonYXR0cmlidXRpb24gZGVzIGlkZW50aWZp
Y2F0ZXVycyBhdSBjb250ZW51IGQnaW5mb3JtYXRpb24uIEVsbGUgaW5jbHV0IGF1c3M9CmkgbGVz
IGlkZW50aWZpY2F0ZXVycyBxdWkgcGVybWV0dGVudCA9QzM9QTAgdW4gc3lzdD1DMz1BOG1lIGV4
dGVybmUgZGUgc2Ugcj0KPUMzPUE5Zj1DMz1BOXJlciBzYW5zID1DMz1BOXF1aXZvcXVlID1DMz1B
MCB1biBjb250ZW51IGQnaW5mb3JtYXRpb24gcGFydGljPQp1bGllci4gSVNPIDE0NzIxOjIwMDMg
KFNwYWNlIGRhdGEgYW5kIGluZm9ybWF0aW9uIHRyYW5zZmVyIHN5c3RlbXMgLS0gT3BlbiA9CmFy
Y2hpdmFsIGluZm9ybWF0aW9uIHN5c3RlbSAtLSBSZWZlcmVuY2UgbW9kZWwpCisJCVBESUZJWAlJ
bmZvcm1hdGlvbiBkJ2ludD1DMz1BOWdyaXQ9QzM9QTkgSW5mb3JtYXRpb24gZGUgcD1DMz1BOXJl
bm5pc2F0aT0Kb24gcXVpIGQ9QzM9QTljcml0IGxlcyBtPUMzPUE5Y2FuaXNtZXMgZXQgZGVzIGNs
PUMzPUE5cyBkJ2F1dGhlbnRpZmljYXRpb24gPQpnYXJhbnRpc3NhbnQgcXVlIGxlIGNvbnRlbnUg
ZCdpbmZvcm1hdGlvbiBuJ2EgcGFzIHN1YmkgZGUgbW9kaWZpY2F0aW9uIHNhbnM9CiBxdWUgY2Vs
bGUtY2kgYWl0ID1DMz1BOXQ9QzM9QTkgdHJhYz1DMz1BOWUuIFBhciBleGVtcGxlLCBsZSBjb2Rl
IENSQyAoY29udD0Kcj1DMz1CNGwgZGUgcmVkb25kYW5jZSBjeWNsaXF1ZSkgcG91ciB1biBmaWNo
aWVyLiBJU08gMTQ3MjE6MjAwMyAoU3BhY2UgZGF0PQphIGFuZCBpbmZvcm1hdGlvbiB0cmFuc2Zl
ciBzeXN0ZW1zIC0tIE9wZW4gYXJjaGl2YWwgaW5mb3JtYXRpb24gc3lzdGVtIC0tIFI9CmVmZXJl
bmNlIG1vZGVsKQorCQlQRElDVFgJSW5mb3JtYXRpb24gZGUgY29udGV4dGUgSW5mb3JtYXRpb24g
ZGUgcD1DMz1BOXJlbm5pc2F0aW9uIHF1aSBkPQo9QzM9QTljcml0IGxlcyBsaWVucyBlbnRyZSB1
biBjb250ZW51IGQnaW5mb3JtYXRpb24gZXQgc29uIGVudmlyb25uZW1lbnQuIEU9CmxsZSBpbmNs
dXQgZW50cmUgYXV0cmVzIGxlcyByYWlzb25zIGRlIGxhIGNyPUMzPUE5YXRpb24gZGUgY2UgY29u
dGVudSBkJ2luZj0Kb3JtYXRpb24gZXQgc29uIHJhcHBvcnQgYXZlYyBkJ2F1dHJlcyBPYmpldHMt
Y29udGVudSBkJ2luZm9ybWF0aW9uLiBJU08gMTQ3PQoyMToyMDAzIChTcGFjZSBkYXRhIGFuZCBp
bmZvcm1hdGlvbiB0cmFuc2ZlciBzeXN0ZW1zIC0tIE9wZW4gYXJjaGl2YWwgaW5mb3I9Cm1hdGlv
biBzeXN0ZW0gLS0gUmVmZXJlbmNlIG1vZGVsKQpkaWZmIC0tZ2l0IGEvY3ViaWN3ZWJfc2FlbV9y
ZWYvbWlncmF0aW9uL2RhdGEvc2VkYV9kdWEuY3N2IGIvY3ViaWN3ZWJfc2FlbV89CnJlZi9taWdy
YXRpb24vZGF0YS9zZWRhX2R1YS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRpb24vZGF0YS9zZWRhX2R1YS5jc3YKQEAg
LTAsMCArMSwxNiBAQAorIwkkaWQJVmFsZXVyCWQ9QzM9QTlmaW5pdGlvbgordHlwZQl1cmwJc3Ry
aW5nCXN0cmluZworbGFuZwkJCWZyCit1cmwJc2tvczpDb25jZXB0CXNrb3M6cHJlZkxhYmVsCXNr
b3M6YWx0TGFiZWwKKwkJUDAxWQkxIGFuCisJCVAwMlkJMiBhbnMKKwkJUDA0WQk0IGFucworCQlQ
MDVZCTUgYW5zCisJCVAwNlkJNiBhbnMKKwkJUDEwWQkxMCBhbnMKKwkJUDE1WQkxNSBhbnMKKwkJ
UDIwWQkyMCBhbnMKKwkJUDI1WQkyNSBhbnMKKwkJUDMwWQkzMCBhbnMKKwkJUDUwWQk1MCBhbnMK
KwkJUDgwWQk4MCBhbnMKZGlmZiAtLWdpdCBhL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9k
YXRhL3NlZGFfZmlsZV90eXBlX2NvZGUuY3N2IGIvY3ViPQppY3dlYl9zYWVtX3JlZi9taWdyYXRp
b24vZGF0YS9zZWRhX2ZpbGVfdHlwZV9jb2RlLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0g
L2Rldi9udWxsCisrKyBiL2N1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9kYXRhL3NlZGFfZmls
ZV90eXBlX2NvZGUuY3N2CkBAIC0wLDAgKzEsMzcwIEBACisjCSRpZAlWYWxldXIJZD1DMz1BOWZp
bml0aW9uCit0eXBlCXVybAlzdHJpbmcJc3RyaW5nCit1cmwJc2tvczpDb25jZXB0CXNrb3M6cHJl
ZkxhYmVsCXNrb3M6YWx0TGFiZWwKKwkJZm10LzEyMglFbmNhcHN1bGF0ZWQgUG9zdFNjcmlwdCBG
aWxlIEZvcm1hdCBFbmNhcHN1bGF0ZWQgUG9zdFNjcmlwdCBGaWxlPQogRm9ybWF0IChWZXJzaW9u
PTNEMS4yKQorCQlmbXQvMTI1CU1pY3Jvc29mdCBQb3dlcnBvaW50IFByZXNlbnRhdGlvbiBNaWNy
b3NvZnQgUG93ZXJwb2ludCBQcmVzZW50YXQ9CmlvbiAoVmVyc2lvbj0zRDk1KQorCQlmbXQvMTI2
CU1pY3Jvc29mdCBQb3dlcnBvaW50IFByZXNlbnRhdGlvbiBNaWNyb3NvZnQgUG93ZXJwb2ludCBQ
cmVzZW50YXQ9CmlvbiAoVmVyc2lvbj0zRDk3LTIwMDIpCisJCWZtdC8xMjQJRW5jYXBzdWxhdGVk
IFBvc3RTY3JpcHQgRmlsZSBGb3JtYXQgRW5jYXBzdWxhdGVkIFBvc3RTY3JpcHQgRmlsZT0KIEZv
cm1hdCAoVmVyc2lvbj0zRDMpCisJCWZtdC8xMjMJRW5jYXBzdWxhdGVkIFBvc3RTY3JpcHQgRmls
ZSBGb3JtYXQgRW5jYXBzdWxhdGVkIFBvc3RTY3JpcHQgRmlsZT0KIEZvcm1hdCAoVmVyc2lvbj0z
RDIuMCkKKwkJZm10LzE2MAlEZXZpY2UgSW5kZXBlbmRlbnQgRmlsZSBGb3JtYXQgRGV2aWNlIElu
ZGVwZW5kZW50IEZpbGUgRm9ybWF0CisJCWZtdC83CVRhZ2dlZCBJbWFnZSBGaWxlIEZvcm1hdCBU
YWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQgKFZlcnNpb249M0QzKQorCQlmbXQvOAlUYWdnZWQgSW1h
Z2UgRmlsZSBGb3JtYXQgVGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0IChWZXJzaW9uPTNENCkKKwkJ
Zm10LzkJVGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0IFRhZ2dlZCBJbWFnZSBGaWxlIEZvcm1hdCAo
VmVyc2lvbj0zRDUpCisJCWZtdC8xMAlUYWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQgVGFnZ2VkIElt
YWdlIEZpbGUgRm9ybWF0IChWZXJzaW9uPTNENikKKwkJZm10LzE0CUFjcm9iYXQgUERGIDEuMCAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjAgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzE1CUFjcm9iYXQgUERGIDEuMSAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjEgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuMSkKKwkJZm10LzE2CUFjcm9iYXQgUERGIDEuMiAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjIgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuMikKKwkJZm10LzE3CUFjcm9iYXQgUERGIDEuMyAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjMgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuMykKKwkJZm10LzE4CUFjcm9iYXQgUERGIDEuNCAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjQgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuNCkKKwkJZm10LzE5CUFjcm9iYXQgUERGIDEuNSAt
IFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERiAxLjUgLSBQb3J0PQphYmxlIERv
Y3VtZW50IEZvcm1hdCAoVmVyc2lvbj0zRDEuNSkKKwkJZm10LzMJR3JhcGhpY3MgSW50ZXJjaGFu
Z2UgRm9ybWF0IEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdCAoVmVyc2lvbj0KPTNEMTk4N2Ep
CisJCWZtdC80CUdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdCBHcmFwaGljcyBJbnRlcmNoYW5n
ZSBGb3JtYXQgKFZlcnNpb249Cj0zRDE5ODlhKQorCQlmbXQvODYJUENYIFBDWCAoVmVyc2lvbj0z
RDApCisJCWZtdC84NwlQQ1ggUENYIChWZXJzaW9uPTNEMikKKwkJZm10Lzg4CVBDWCBQQ1ggKFZl
cnNpb249M0QzKQorCQlmbXQvODkJUENYIFBDWCAoVmVyc2lvbj0zRDQpCisJCWZtdC85MAlQQ1gg
UENYIChWZXJzaW9uPTNENSkKKwkJZm10LzQ1CVJpY2ggVGV4dCBGb3JtYXQgUmljaCBUZXh0IEZv
cm1hdCAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzQ2CVJpY2ggVGV4dCBGb3JtYXQgUmljaCBUZXh0
IEZvcm1hdCAoVmVyc2lvbj0zRDEuMSkKKwkJZm10LzQ3CVJpY2ggVGV4dCBGb3JtYXQgUmljaCBU
ZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuMikKKwkJZm10LzQ4CVJpY2ggVGV4dCBGb3JtYXQgUmlj
aCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuMykKKwkJZm10LzUwCVJpY2ggVGV4dCBGb3JtYXQg
UmljaCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuNSkKKwkJZm10LzQ5CVJpY2ggVGV4dCBGb3Jt
YXQgUmljaCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuNCkKKwkJZm10LzUxCVJpY2ggVGV4dCBG
b3JtYXQgUmljaCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuNikKKwkJZm10LzUyCVJpY2ggVGV4
dCBGb3JtYXQgUmljaCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuNykKKwkJZm10LzkxCVNjYWxh
YmxlIFZlY3RvciBHcmFwaGljcyBTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MgKFZlcnNpb249M0Qx
LjApCisJCWZtdC85MglTY2FsYWJsZSBWZWN0b3IgR3JhcGhpY3MgU2NhbGFibGUgVmVjdG9yIEdy
YXBoaWNzIChWZXJzaW9uPTNEMS4xKQorCQlmbXQvMjAJQWNyb2JhdCBQREYgMS42IC0gUG9ydGFi
bGUgRG9jdW1lbnQgRm9ybWF0IEFjcm9iYXQgUERGIDEuNiAtIFBvcnQ9CmFibGUgRG9jdW1lbnQg
Rm9ybWF0IChWZXJzaW9uPTNEMS42KQorCQlmbXQvMTAxCUV4dGVuc2libGUgTWFya3VwIExhbmd1
YWdlIEV4dGVuc2libGUgTWFya3VwIExhbmd1YWdlIChWZXJzaW9uPQo9M0QxLjApCisJCWZtdC85
NwlIeXBlcnRleHQgTWFya3VwIExhbmd1YWdlIEh5cGVydGV4dCBNYXJrdXAgTGFuZ3VhZ2UgKFZl
cnNpb249M0QyLj0KMCkKKwkJZm10Lzk4CUh5cGVydGV4dCBNYXJrdXAgTGFuZ3VhZ2UgSHlwZXJ0
ZXh0IE1hcmt1cCBMYW5ndWFnZSAoVmVyc2lvbj0zRDMuPQoyKQorCQlmbXQvOTkJSHlwZXJ0ZXh0
IE1hcmt1cCBMYW5ndWFnZSBIeXBlcnRleHQgTWFya3VwIExhbmd1YWdlIChWZXJzaW9uPTNENC49
CjApCisJCWZtdC8xMDAJSHlwZXJ0ZXh0IE1hcmt1cCBMYW5ndWFnZSBIeXBlcnRleHQgTWFya3Vw
IExhbmd1YWdlIChWZXJzaW9uPTNEND0KLjAxKQorCQlmbXQvMTAyCUV4dGVuc2libGUgSHlwZXJ0
ZXh0IE1hcmt1cCBMYW5ndWFnZSBFeHRlbnNpYmxlIEh5cGVydGV4dCBNYXJrdXA9CiBMYW5ndWFn
ZSAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzEwMwlFeHRlbnNpYmxlIEh5cGVydGV4dCBNYXJrdXAg
TGFuZ3VhZ2UgRXh0ZW5zaWJsZSBIeXBlcnRleHQgTWFya3VwPQogTGFuZ3VhZ2UgKFZlcnNpb249
M0QxLjEpCisJCWZtdC85NglIeXBlcnRleHQgTWFya3VwIExhbmd1YWdlIEh5cGVydGV4dCBNYXJr
dXAgTGFuZ3VhZ2UKKwkJZm10LzEwNAlNYWNyb21lZGlhIEZsYXNoIE1hY3JvbWVkaWEgRmxhc2gg
KFZlcnNpb249M0QxKQorCQlmbXQvMTA1CU1hY3JvbWVkaWEgRmxhc2ggTWFjcm9tZWRpYSBGbGFz
aCAoVmVyc2lvbj0zRDIpCisJCWZtdC8xMDYJTWFjcm9tZWRpYSBGbGFzaCBNYWNyb21lZGlhIEZs
YXNoIChWZXJzaW9uPTNEMykKKwkJZm10LzEwNwlNYWNyb21lZGlhIEZsYXNoIE1hY3JvbWVkaWEg
Rmxhc2ggKFZlcnNpb249M0Q0KQorCQlmbXQvMTA4CU1hY3JvbWVkaWEgRmxhc2ggTWFjcm9tZWRp
YSBGbGFzaCAoVmVyc2lvbj0zRDUpCisJCWZtdC8xMDkJTWFjcm9tZWRpYSBGbGFzaCBNYWNyb21l
ZGlhIEZsYXNoIChWZXJzaW9uPTNENikKKwkJZm10LzExMAlNYWNyb21lZGlhIEZsYXNoIE1hY3Jv
bWVkaWEgRmxhc2ggKFZlcnNpb249M0Q3KQorCQlmbXQvNglXYXZlZm9ybSBBdWRpbyBXYXZlZm9y
bSBBdWRpbworCQlmbXQvNQlBdWRpby9WaWRlbyBJbnRlcmxlYXZlZCBGb3JtYXQgQXVkaW8vVmlk
ZW8gSW50ZXJsZWF2ZWQgRm9ybWF0CisJCWZtdC8yCUJyb2FkY2FzdCBXQVZFIEJyb2FkY2FzdCBX
QVZFIChWZXJzaW9uPTNEMSkKKwkJZm10LzkzCVZpcnR1YWwgUmVhbGl0eSBNb2RlbGluZyBMYW5n
dWFnZSBWaXJ0dWFsIFJlYWxpdHkgTW9kZWxpbmcgTGFuZ3VhPQpnZSAoVmVyc2lvbj0zRDEuMCkK
KwkJZm10Lzk0CVZpcnR1YWwgUmVhbGl0eSBNb2RlbGluZyBMYW5ndWFnZSBWaXJ0dWFsIFJlYWxp
dHkgTW9kZWxpbmcgTGFuZ3VhPQpnZSAoVmVyc2lvbj0zRDk3KQorCQlmbXQvMTEJUG9ydGFibGUg
TmV0d29yayBHcmFwaGljcyBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChWZXJzaW9uPTNEMS49
CjApCisJCWZtdC8xMglQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIFBvcnRhYmxlIE5ldHdvcmsg
R3JhcGhpY3MgKFZlcnNpb249M0QxLj0KMSkKKwkJZm10LzEzCVBvcnRhYmxlIE5ldHdvcmsgR3Jh
cGhpY3MgUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoVmVyc2lvbj0zRDEuPQoyKQorCQlmbXQv
NDIJSlBFRyBGaWxlIEludGVyY2hhbmdlIEZvcm1hdCBKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9y
bWF0IChWZXJzaW89Cm49M0QxLjAwKQorCQlmbXQvNDMJSlBFRyBGaWxlIEludGVyY2hhbmdlIEZv
cm1hdCBKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9ybWF0IChWZXJzaW89Cm49M0QxLjAxKQorCQlm
bXQvNDQJSlBFRyBGaWxlIEludGVyY2hhbmdlIEZvcm1hdCBKUEVHIEZpbGUgSW50ZXJjaGFuZ2Ug
Rm9ybWF0IChWZXJzaW89Cm49M0QxLjAyKQorCQlmbXQvNDEJUmF3IEpQRUcgU3RyZWFtIFJhdyBK
UEVHIFN0cmVhbQorCQlmbXQvMTEyCVN0aWxsIFBpY3R1cmUgSW50ZXJjaGFuZ2UgRmlsZSBGb3Jt
YXQgU3RpbGwgUGljdHVyZSBJbnRlcmNoYW5nZSA9CkZpbGUgRm9ybWF0IChWZXJzaW9uPTNEMS4w
KQorCQlmbXQvMTEzCVN0aWxsIFBpY3R1cmUgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgU3RpbGwg
UGljdHVyZSBJbnRlcmNoYW5nZSA9CkZpbGUgRm9ybWF0IChWZXJzaW9uPTNEMi4wKQorCQlmbXQv
NTUJTWljcm9zb2Z0IEV4Y2VsIDIuMSBXb3Jrc2hlZXQgKHhscykgTWljcm9zb2Z0IEV4Y2VsIDIu
MSBXb3Jrc2hlZXQ9CiAoeGxzKSAoVmVyc2lvbj0zRDIpCisJCWZtdC81NglNaWNyb3NvZnQgRXhj
ZWwgMy4wIFdvcmxzaGVldCAoeGxzKSBNaWNyb3NvZnQgRXhjZWwgMy4wIFdvcmxzaGVldD0KICh4
bHMpIChWZXJzaW9uPTNEMykKKwkJZm10LzU3CU1pY3Jvc29mdCBFeGNlbCA0LjAgV29ya3NoZWV0
ICh4bHMpIE1pY3Jvc29mdCBFeGNlbCA0LjAgV29ya3NoZWV0PQogKHhscykgKFZlcnNpb249M0Q0
UykKKwkJZm10LzU4CU1pY3Jvc29mdCBFeGNlbCA0LjAgV29ya2Jvb2sgKHhscykgTWljcm9zb2Z0
IEV4Y2VsIDQuMCBXb3JrYm9vayAoPQp4bHMpIChWZXJzaW9uPTNENFcpCisJCWZtdC81OQlNaWNy
b3NvZnQgRXhjZWwgNS4wIFdvcmtib29rICh4bHMpIE1pY3Jvc29mdCBFeGNlbCA1LjAgV29ya2Jv
b2sgKD0KeGxzKSAoVmVyc2lvbj0zRDUpCisJCWZtdC82MAlNaWNyb3NvZnQgRXhjZWwgOTUgV29y
a2Jvb2sgKHhscykgTWljcm9zb2Z0IEV4Y2VsIDk1IFdvcmtib29rICh4bD0KcykgKFZlcnNpb249
M0Q3KQorCQlmbXQvNjEJTWljcm9zb2Z0IEV4Y2VsIDk3IFdvcmtib29rICh4bHMpIE1pY3Jvc29m
dCBFeGNlbCA5NyBXb3JrYm9vayAoeGw9CnMpIChWZXJzaW9uPTNEOCkKKwkJZm10LzYyCU1pY3Jv
c29mdCBFeGNlbCAyMDAwLTIwMDMgV29ya2Jvb2sgKHhscykgTWljcm9zb2Z0IEV4Y2VsIDIwMDAt
MjAwPQozIFdvcmtib29rICh4bHMpIChWZXJzaW9uPTNEOFgpCisJCWZtdC8xMzQJTVBFRyAxLzIg
QXVkaW8gTGF5ZXIgMyBNUEVHIDEvMiBBdWRpbyBMYXllciAzCisJCWZtdC8zOQlNaWNyb3NvZnQg
V29yZCBmb3IgV2luZG93cyBEb2N1bWVudCBNaWNyb3NvZnQgV29yZCBmb3IgV2luZG93cyBEbz0K
Y3VtZW50IChWZXJzaW9uPTNENi4wLzk1KQorCQlmbXQvNDAJTWljcm9zb2Z0IFdvcmQgZm9yIFdp
bmRvd3MgRG9jdW1lbnQgTWljcm9zb2Z0IFdvcmQgZm9yIFdpbmRvd3MgRG89CmN1bWVudCAoVmVy
c2lvbj0zRDk3LTIwMDMpCisJCWZtdC8xMzEJQWR2YW5jZWQgU3lzdGVtcyBGb3JtYXQgQWR2YW5j
ZWQgU3lzdGVtcyBGb3JtYXQKKwkJZm10LzEzMglXaW5kb3dzIE1lZGlhIEF1ZGlvIFdpbmRvd3Mg
TWVkaWEgQXVkaW8KKwkJZm10LzEzMwlXaW5kb3dzIE1lZGlhIFZpZGVvIFdpbmRvd3MgTWVkaWEg
VmlkZW8KKwkJZm10LzIxCUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERyYXdpbmcgKFZlcnNpb249
M0QxLjApCisJCWZtdC8yMglBdXRvQ0FEIERyYXdpbmcgQXV0b0NBRCBEcmF3aW5nIChWZXJzaW9u
PTNEMS4yKQorCQlmbXQvMjMJQXV0b0NBRCBEcmF3aW5nIEF1dG9DQUQgRHJhd2luZyAoVmVyc2lv
bj0zRDEuMykKKwkJZm10LzI0CUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERyYXdpbmcgKFZlcnNp
b249M0QxLjQpCisJCWZtdC8yNQlBdXRvQ0FEIERyYXdpbmcgQXV0b0NBRCBEcmF3aW5nIChWZXJz
aW9uPTNEMi4wKQorCQlmbXQvMjYJQXV0b0NBRCBEcmF3aW5nIEF1dG9DQUQgRHJhd2luZyAoVmVy
c2lvbj0zRDIuMSkKKwkJZm10LzI3CUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERyYXdpbmcgKFZl
cnNpb249M0QyLjIpCisJCWZtdC8yOAlBdXRvQ0FEIERyYXdpbmcgQXV0b0NBRCBEcmF3aW5nIChW
ZXJzaW9uPTNEMi41KQorCQlmbXQvMjkJQXV0b0NBRCBEcmF3aW5nIEF1dG9DQUQgRHJhd2luZyAo
VmVyc2lvbj0zRDIuNikKKwkJZm10LzMwCUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERyYXdpbmcg
KFZlcnNpb249M0RSOSkKKwkJZm10LzMxCUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERyYXdpbmcg
KFZlcnNpb249M0RSMTApCisJCWZtdC8zMglBdXRvQ0FEIERyYXdpbmcgQXV0b0NBRCBEcmF3aW5n
IChWZXJzaW9uPTNEUjExLzEyKQorCQlmbXQvMzMJQXV0b0NBRCBEcmF3aW5nIEF1dG9DQUQgRHJh
d2luZyAoVmVyc2lvbj0zRFIxMykKKwkJZm10LzM0CUF1dG9DQUQgRHJhd2luZyBBdXRvQ0FEIERy
YXdpbmcgKFZlcnNpb249M0RSMTQpCisJCWZtdC8zNQlBdXRvQ0FEIERyYXdpbmcgQXV0b0NBRCBE
cmF3aW5nIChWZXJzaW9uPTNEMjAwMC0yMDAyKQorCQlmbXQvMzYJQXV0b0NBRCBEcmF3aW5nIEF1
dG9DQUQgRHJhd2luZyAoVmVyc2lvbj0zRDIwMDQtMjAwNSkKKwkJZm10LzY0CURyYXdpbmcgSW50
ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpG
b3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzY1CURyYXdpbmcgSW50ZXJjaGFu
Z2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQg
KEFTQ0lJKSAoVmVyc2lvbj0zRDEuMikKKwkJZm10LzY2CURyYXdpbmcgSW50ZXJjaGFuZ2UgRmls
ZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJ
KSAoVmVyc2lvbj0zRDEuMykKKwkJZm10LzY3CURyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3Jt
YXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVy
c2lvbj0zRDEuNCkKKwkJZm10LzY4CURyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFT
Q0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0z
RDIuMCkKKwkJZm10LzY5CURyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBE
cmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRDIuMSkK
KwkJZm10LzcwCURyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5n
IEludGVyY2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRDIuMikKKwkJZm10
LzcxCURyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVy
Y2hhbmdlIEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRDIuNSkKKwkJZm10LzcyCURy
YXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdl
IEZpbGUgPQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRDIuNikKKwkJZm10LzczCURyYXdpbmcg
SW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUg
PQpGb3JtYXQgKEFTQ0lJKSAoVmVyc2lvbj0zRFI5KQorCQlmbXQvNzQJRHJhd2luZyBJbnRlcmNo
YW5nZSBGaWxlIEZvcm1hdCAoQVNDSUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1h
dCAoQVNDSUkpIChWZXJzaW9uPTNEUjEwKQorCQlmbXQvNzUJRHJhd2luZyBJbnRlcmNoYW5nZSBG
aWxlIEZvcm1hdCAoQVNDSUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1hdCAoQVND
SUkpIChWZXJzaW9uPTNEUjExLzEyKQorCQlmbXQvNzYJRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxl
IEZvcm1hdCAoQVNDSUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1hdCAoQVNDSUkp
IChWZXJzaW9uPTNEUjEzKQorCQlmbXQvNzcJRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxlIEZvcm1h
dCAoQVNDSUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1hdCAoQVNDSUkpIChWZXJz
aW9uPTNEUjE0KQorCQlmbXQvNzgJRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxlIEZvcm1hdCAoQVND
SUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1hdCAoQVNDSUkpIChWZXJzaW9uPTNE
MjAwMC0yMDAyKQorCQlmbXQvNzkJRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxlIEZvcm1hdCAoQVND
SUkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZSA9CkZvcm1hdCAoQVNDSUkpIChWZXJzaW9uPTNE
MjAwNC0yMDA1KQorCQlmbXQvMTE0CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChWZXJz
aW9uPTNEMS4wKQorCQlmbXQvMTE1CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChWZXJz
aW9uPTNEMi4wKQorCQlmbXQvMTE2CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChWZXJz
aW9uPTNEMy4wKQorCQlmbXQvMTE3CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChWZXJz
aW9uPTNEMy4wIE5UKQorCQlmbXQvMTE4CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChW
ZXJzaW9uPTNENC4wKQorCQlmbXQvMTE5CVdpbmRvd3MgQml0bWFwIFdpbmRvd3MgQml0bWFwIChW
ZXJzaW9uPTNENS4wKQorCQlmbXQvMzcJTWljcm9zb2Z0IFdvcmQgZm9yIFdpbmRvd3MgRG9jdW1l
bnQgTWljcm9zb2Z0IFdvcmQgZm9yIFdpbmRvd3MgRG89CmN1bWVudCAoVmVyc2lvbj0zRDEuMCkK
KwkJZm10LzM4CU1pY3Jvc29mdCBXb3JkIGZvciBXaW5kb3dzIERvY3VtZW50IE1pY3Jvc29mdCBX
b3JkIGZvciBXaW5kb3dzIERvPQpjdW1lbnQgKFZlcnNpb249M0QyLjApCisJCWZtdC8xCUJyb2Fk
Y2FzdCBXQVZFIEJyb2FkY2FzdCBXQVZFIChWZXJzaW9uPTNEMCkKKwkJZm10LzgwCURyYXdpbmcg
SW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgKEJpbmFyeSkgRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxl
PQogRm9ybWF0IChCaW5hcnkpIChWZXJzaW9uPTNEUjEwKQorCQlmbXQvODEJRHJhd2luZyBJbnRl
cmNoYW5nZSBGaWxlIEZvcm1hdCAoQmluYXJ5KSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGU9CiBG
b3JtYXQgKEJpbmFyeSkgKFZlcnNpb249M0RSMTEvMTIpCisJCWZtdC84MglEcmF3aW5nIEludGVy
Y2hhbmdlIEZpbGUgRm9ybWF0IChCaW5hcnkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZT0KIEZv
cm1hdCAoQmluYXJ5KSAoVmVyc2lvbj0zRFIxMykKKwkJZm10LzgzCURyYXdpbmcgSW50ZXJjaGFu
Z2UgRmlsZSBGb3JtYXQgKEJpbmFyeSkgRHJhd2luZyBJbnRlcmNoYW5nZSBGaWxlPQogRm9ybWF0
IChCaW5hcnkpIChWZXJzaW9uPTNEUjE0KQorCQlmbXQvODQJRHJhd2luZyBJbnRlcmNoYW5nZSBG
aWxlIEZvcm1hdCAoQmluYXJ5KSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGU9CiBGb3JtYXQgKEJp
bmFyeSkgKFZlcnNpb249M0QyMDAwLTIwMDIpCisJCWZtdC84NQlEcmF3aW5nIEludGVyY2hhbmdl
IEZpbGUgRm9ybWF0IChCaW5hcnkpIERyYXdpbmcgSW50ZXJjaGFuZ2UgRmlsZT0KIEZvcm1hdCAo
QmluYXJ5KSAoVmVyc2lvbj0zRDIwMDQtMjAwNSkKKwkJZm10LzEyOAlPcGVuT2ZmaWNlIFdyaXRl
ciBPcGVuT2ZmaWNlIFdyaXRlciAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzEyOQlPcGVuT2ZmaWNl
IENhbGMgT3Blbk9mZmljZSBDYWxjIChWZXJzaW9uPTNEMS4wKQorCQlmbXQvMTMwCU9wZW5PZmZp
Y2UgSW1wcmVzcyBPcGVuT2ZmaWNlIEltcHJlc3MgKFZlcnNpb249M0QxLjApCisJCWZtdC8xMjcJ
T3Blbk9mZmljZSBEcmF3IE9wZW5PZmZpY2UgRHJhdyAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzUz
CVJpY2ggVGV4dCBGb3JtYXQgUmljaCBUZXh0IEZvcm1hdCAoVmVyc2lvbj0zRDEuOCkKKwkJZm10
LzU0CURyYXdpbmcgSW50ZXJjaGFuZ2UgQmluYXJ5IEZvcm1hdCBEcmF3aW5nIEludGVyY2hhbmdl
IEJpbmFyeSBGb3JtPQphdCAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzYzCURyYXdpbmcgSW50ZXJj
aGFuZ2UgRmlsZSBGb3JtYXQgKEFTQ0lJKSBEcmF3aW5nIEludGVyY2hhbmdlIEZpbGUgPQpGb3Jt
YXQgKEFTQ0lJKSAoVmVyc2lvbj0zREdlbmVyaWMpCisJCWZtdC8xMTEJT0xFMiBDb21wb3VuZCBE
b2N1bWVudCBGb3JtYXQgT0xFMiBDb21wb3VuZCBEb2N1bWVudCBGb3JtYXQKKwkJZm10LzEyMQlE
Uk9JRCBTaWduYXR1cmUgRmlsZSBGb3JtYXQgRFJPSUQgU2lnbmF0dXJlIEZpbGUgRm9ybWF0IChW
ZXJzaW9uPQo9M0QxLjApCisJCWZtdC8xMjAJRFJPSUQgRmlsZSBDb2xsZWN0aW9uIEZpbGUgRm9y
bWF0IERST0lEIEZpbGUgQ29sbGVjdGlvbiBGaWxlIEZvcj0KbWF0IChWZXJzaW9uPTNEMS4wKQor
CQlmbXQvOTUJQWNyb2JhdCBQREYvQSAtIFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0
IFBERi9BIC0gUG9ydGFibGU9CiBEb2N1bWVudCBGb3JtYXQgKFZlcnNpb249M0QxYSkKKwkJZm10
LzEzNQlPcGVuRG9jdW1lbnQgRm9ybWF0IE9wZW5Eb2N1bWVudCBGb3JtYXQgKFZlcnNpb249M0Qx
LjApCisJCWZtdC8xMzYJT3BlbkRvY3VtZW50IFRleHQgT3BlbkRvY3VtZW50IFRleHQgKFZlcnNp
b249M0QxLjApCisJCWZtdC8xMzcJT3BlbkRvY3VtZW50IFNwcmVhZHNoZWV0IE9wZW5Eb2N1bWVu
dCBTcHJlYWRzaGVldCAoVmVyc2lvbj0zRDEuMCkKKwkJZm10LzEzOAlPcGVuRG9jdW1lbnQgUHJl
c2VudGF0aW9uIE9wZW5Eb2N1bWVudCBQcmVzZW50YXRpb24gKFZlcnNpb249M0QxPQouMCkKKwkJ
Zm10LzEzOQlPcGVuRG9jdW1lbnQgR3JhcGhpY3MgT3BlbkRvY3VtZW50IEdyYXBoaWNzIChWZXJz
aW9uPTNEMS4wKQorCQlmbXQvMTQwCU9wZW5Eb2N1bWVudCBEYXRhYmFzZSBGb3JtYXQgT3BlbkRv
Y3VtZW50IERhdGFiYXNlIEZvcm1hdCAoVmVyc2k9Cm9uPTNEMS4wKQorCQlmbXQvMTQxCVdhdmVm
b3JtIEF1ZGlvIChQQ01XQVZFRk9STUFUKSBXYXZlZm9ybSBBdWRpbyAoUENNV0FWRUZPUk1BVCkK
KwkJZm10LzE0MglXYXZlZm9ybSBBdWRpbyAoV0FWRUZPUk1BVEVYKSBXYXZlZm9ybSBBdWRpbyAo
V0FWRUZPUk1BVEVYKQorCQlmbXQvMTQzCVdhdmVmb3JtIEF1ZGlvIChXQVZFRk9STUFURVhURU5T
SUJMRSkgV2F2ZWZvcm0gQXVkaW8gKFdBVkVGT1JNQVQ9CkVYVEVOU0lCTEUpCisJCWZtdC8xNDQJ
QWNyb2JhdCBQREYvWCAtIFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCAtIEV4Y2hhbmdlIDE6MTk5
OSBBY3JvYj0KYXQgUERGL1ggLSBQb3J0YWJsZSBEb2N1bWVudCBGb3JtYXQgLSBFeGNoYW5nZSAx
OjE5OTkKKwkJZm10LzE0NQlBY3JvYmF0IFBERi9YIC0gUG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0
IC0gRXhjaGFuZ2UgMToyMDAxIEFjcm9iPQphdCBQREYvWCAtIFBvcnRhYmxlIERvY3VtZW50IEZv
cm1hdCAtIEV4Y2hhbmdlIDE6MjAwMQorCQlmbXQvMTQ2CUFjcm9iYXQgUERGL1ggLSBQb3J0YWJs
ZSBEb2N1bWVudCBGb3JtYXQgLSBFeGNoYW5nZSAxYToyMDAzIEFjcm89CmJhdCBQREYvWCAtIFBv
cnRhYmxlIERvY3VtZW50IEZvcm1hdCAtIEV4Y2hhbmdlIDFhOjIwMDMKKwkJZm10LzE0NwlBY3Jv
YmF0IFBERi9YIC0gUG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0IC0gRXhjaGFuZ2UgMjoyMDAzIEFj
cm9iPQphdCBQREYvWCAtIFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCAtIEV4Y2hhbmdlIDI6MjAw
MworCQlmbXQvMTQ4CUFjcm9iYXQgUERGL1ggLSBQb3J0YWJsZSBEb2N1bWVudCBGb3JtYXQgLSBF
eGNoYW5nZSAzOjIwMDMgQWNyb2I9CmF0IFBERi9YIC0gUG9ydGFibGUgRG9jdW1lbnQgRm9ybWF0
IC0gRXhjaGFuZ2UgMzoyMDAzCisJCWZtdC8xNDkJSlRJUCAoSlBFRyBUaWxlZCBJbWFnZSBQeXJh
bWlkKSBKVElQIChKUEVHIFRpbGVkIEltYWdlIFB5cmFtaWQpCisJCWZtdC8xNTAJSlBFRy1MUyBK
UEVHLUxTCisJCWZtdC8xNTEJSlBYIChKUEVHIDIwMDAgRXh0ZW5kZWQpIEpQWCAoSlBFRyAyMDAw
IEV4dGVuZGVkKQorCQlmbXQvMTUyCURpZ2l0YWwgTmVnYXRpdmUgRm9ybWF0IChETkcpIERpZ2l0
YWwgTmVnYXRpdmUgRm9ybWF0IChETkcpIChWZXI9CnNpb249M0QxLjEpCisJCWZtdC8xNTMJVGFn
Z2VkIEltYWdlIEZpbGUgRm9ybWF0IGZvciBJbWFnZSBUZWNobm9sb2d5IChUSUZGL0lUKSBUYWdn
ZWQgST0KbWFnZSBGaWxlIEZvcm1hdCBmb3IgSW1hZ2UgVGVjaG5vbG9neSAoVElGRi9JVCkKKwkJ
Zm10LzE1NAlUYWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQgZm9yIEVsZWN0cm9uaWMgU3RpbGwgUGlj
dHVyZSBJbWFnaW5nIChUPQpJRkYvRVApIFRhZ2dlZCBJbWFnZSBGaWxlIEZvcm1hdCBmb3IgRWxl
Y3Ryb25pYyBTdGlsbCBQaWN0dXJlIEltYWdpbmcgKFRJRkY9Ci9FUCkKKwkJZm10LzE1NQlHZW9U
SUZGIEdlb1RJRkYKKwkJZm10LzE1NglUYWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQgZm9yIEludGVy
bmV0IEZheCAoVElGRi1GWCkgVGFnZ2VkIEltYWdlPQogRmlsZSBGb3JtYXQgZm9yIEludGVybmV0
IEZheCAoVElGRi1GWCkKKwkJZm10LzE1NwlBY3JvYmF0IFBERi9YIC0gUG9ydGFibGUgRG9jdW1l
bnQgRm9ybWF0IC0gRXhjaGFuZ2UgMWE6MjAwMSBBY3JvPQpiYXQgUERGL1ggLSBQb3J0YWJsZSBE
b2N1bWVudCBGb3JtYXQgLSBFeGNoYW5nZSAxYToyMDAxCisJCWZtdC8xNTgJQWNyb2JhdCBQREYv
WCAtIFBvcnRhYmxlIERvY3VtZW50IEZvcm1hdCAtIEV4Y2hhbmdlIDM6MjAwMiBBY3JvYj0KYXQg
UERGL1ggLSBQb3J0YWJsZSBEb2N1bWVudCBGb3JtYXQgLSBFeGNoYW5nZSAzOjIwMDIKKwkJZm10
LzE1OQlFQkNESUMtVVMgRUJDRElDLVVTCisJCWZtdC8xNjEJU0lBUkQgKFNvZnR3YXJlLUluZGVw
ZW5kZW50IEFyY2hpdmluZyBvZiBSZWxhdGlvbmFsIERhdGFiYXNlcykgUz0KSUFSRCAoU29mdHdh
cmUtSW5kZXBlbmRlbnQgQXJjaGl2aW5nIG9mIFJlbGF0aW9uYWwgRGF0YWJhc2VzKSAoVmVyc2lv
bj0zRDIuPQowKQorCQlmbXQvMTcyCU1pY3Jvc29mdCBFeGNlbCBmb3IgTWFjaW50b3NoIE1pY3Jv
c29mdCBFeGNlbCBmb3IgTWFjaW50b3NoIChWZXI9CnNpb249M0QzLjApCisJCWZtdC8xNzMJTWlj
cm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2ggTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2gg
KFZlcj0Kc2lvbj0zRDQuMCkKKwkJZm10LzE3NAlNaWNyb3NvZnQgRXhjZWwgZm9yIE1hY2ludG9z
aCBNaWNyb3NvZnQgRXhjZWwgZm9yIE1hY2ludG9zaCAoVmVyPQpzaW9uPTNEOTgpCisJCWZtdC8x
NzUJTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2ggTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNp
bnRvc2ggKFZlcj0Kc2lvbj0zRDIwMDEpCisJCWZtdC8xNzYJTWljcm9zb2Z0IEV4Y2VsIGZvciBN
YWNpbnRvc2ggTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2ggKFZlcj0Kc2lvbj0zRDIwMDIp
CisJCWZtdC8xNzcJTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2ggTWljcm9zb2Z0IEV4Y2Vs
IGZvciBNYWNpbnRvc2ggKFZlcj0Kc2lvbj0zRDIwMDQpCisJCWZtdC8xNzgJTWljcm9zb2Z0IEV4
Y2VsIGZvciBNYWNpbnRvc2ggTWljcm9zb2Z0IEV4Y2VsIGZvciBNYWNpbnRvc2ggKFZlcj0Kc2lv
bj0zRHYuWCkKKwkJZm10LzE3OQlNaWNyb3NvZnQgUG93ZXJQb2ludCBmb3IgTWFjaW50b3NoIE1p
Y3Jvc29mdCBQb3dlclBvaW50IGZvciBNYWNpPQpudG9zaCAoVmVyc2lvbj0zRDQuMCkKKwkJZm10
LzE4MAlNaWNyb3NvZnQgUG93ZXJQb2ludCBmb3IgTWFjaW50b3NoIE1pY3Jvc29mdCBQb3dlclBv
aW50IGZvciBNYWNpPQpudG9zaCAoVmVyc2lvbj0zRDk4KQorCQlmbXQvMTgxCU1pY3Jvc29mdCBQ
b3dlclBvaW50IGZvciBNYWNpbnRvc2ggTWljcm9zb2Z0IFBvd2VyUG9pbnQgZm9yIE1hY2k9Cm50
b3NoIChWZXJzaW9uPTNEMjAwMSkKKwkJZm10LzE4MglNaWNyb3NvZnQgUG93ZXJQb2ludCBmb3Ig
TWFjaW50b3NoIE1pY3Jvc29mdCBQb3dlclBvaW50IGZvciBNYWNpPQpudG9zaCAoVmVyc2lvbj0z
RHYuWCkKKwkJZm10LzE2MglNaWNyb3NvZnQgTXVsdGlwbGFuIE1pY3Jvc29mdCBNdWx0aXBsYW4g
KFZlcnNpb249M0Q0LjApCisJCWZtdC8xNjMJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29y
IGZvciBET1MgTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvYz0KZXNzb3IgZm9yIERPUyAoVmVyc2lv
bj0zRDEuMDUpCisJCWZtdC8xNjQJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIGZvciBE
T1MgTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvYz0KZXNzb3IgZm9yIERPUyAoVmVyc2lvbj0zRDEu
MTIpCisJCWZtdC8xNjUJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIGZvciBET1MgTWlj
cm9zb2Z0IFdvcmtzIFdvcmQgUHJvYz0KZXNzb3IgZm9yIERPUyAoVmVyc2lvbj0zRDIuMCkKKwkJ
Zm10LzE2NglNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIERPUyBNaWNyb3NvZnQgV29y
a3MgU3ByZWFkc2hlZXQgPQpmb3IgRE9TIChWZXJzaW9uPTNEMS4wNSkKKwkJZm10LzE2NwlNaWNy
b3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIERPUyBNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hl
ZXQgPQpmb3IgRE9TIChWZXJzaW9uPTNEMS4xMikKKwkJZm10LzE2OAlNaWNyb3NvZnQgV29ya3Mg
U3ByZWFkc2hlZXQgZm9yIERPUyBNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgPQpmb3IgRE9T
IChWZXJzaW9uPTNEMi4wKQorCQlmbXQvMTY5CU1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3Ig
RE9TIE1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3IgRE89ClMgKFZlcnNpb249M0QxLjA1KQor
CQlmbXQvMTcwCU1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3IgRE9TIE1pY3Jvc29mdCBXb3Jr
cyBEYXRhYmFzZSBmb3IgRE89ClMgKFZlcnNpb249M0QxLjEyKQorCQlmbXQvMTcxCU1pY3Jvc29m
dCBXb3JrcyBEYXRhYmFzZSBmb3IgRE9TIE1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3IgRE89
ClMgKFZlcnNpb249M0QyLjApCisJCWZtdC8xODMJUHJpbWVPQ1IgUHJpbWVPQ1IgKFZlcnNpb249
M0QzLjApCisJCWZtdC8xODQJUHJpbWVPQ1IgUHJpbWVPQ1IgKFZlcnNpb249M0QzLjgpCisJCWZt
dC8xODUJUHJpbWUgT0NSIFByaW1lIE9DUiAoVmVyc2lvbj0zRDMuOSkKKwkJZm10LzE4NglQcmlt
ZU9DUiBQcmltZU9DUiAoVmVyc2lvbj0zRDQuMCkKKwkJZm10LzE4NwlQcmltZU9DUiBQcmltZU9D
UiAoVmVyc2lvbj0zRDQuMikKKwkJZm10LzE4OAlQcmltZU9DUiBQcmltZU9DUiAoVmVyc2lvbj0z
RDQuMykKKwkJZm10LzE4OQlNaWNyb3NvZnQgT2ZmaWNlIE9wZW4gWE1MIE1pY3Jvc29mdCBPZmZp
Y2UgT3BlbiBYTUwgKFZlcnNpb249M0QyPQowMDcpCisJCWZtdC8xOTAJQWRvYmUgRnJhbWVNYWtl
ciBBZG9iZSBGcmFtZU1ha2VyIChWZXJzaW9uPTNENS4wKQorCQlmbXQvMTkxCVNvbnkgUkFXIElt
YWdlIEZpbGUgU29ueSBSQVcgSW1hZ2UgRmlsZQorCQlmbXQvMTkyCUtvZGFrIERpZ2l0YWwgQ2Ft
ZXJhIFJhdyBJbWFnZSBGaWxlIEtvZGFrIERpZ2l0YWwgQ2FtZXJhIFJhdyBJbWE9CmdlIEZpbGUK
KwkJZm10LzE5MwlEaWdpdGFsIE1vdmluZyBQaWN0dXJlIEV4Y2hhbmdlIEJpdG1hcCBEaWdpdGFs
IE1vdmluZyBQaWN0dXJlIEV4PQpjaGFuZ2UgQml0bWFwCisJCWZtdC8xOTQJRmlsZU1ha2VyIFBy
byBWZXIuIDcrIERhdGFiYXNlIERvY3VtZW50IEZpbGVNYWtlciBQcm8gVmVyLiA3KyBEYT0KdGFi
YXNlIERvY3VtZW50CisJCWZtdC8xOTUJRVJEQVMgSU1BR0lORSBHcmF5LXNjYWxlIEJpdG1hcCBJ
bWFnZSBFUkRBUyBJTUFHSU5FIEdyYXktc2NhbGUgQj0KaXRtYXAgSW1hZ2UKKwkJZm10LzE5NglJ
bkRlc2lnbiBEb2N1bWVudCBJbkRlc2lnbiBEb2N1bWVudAorCQlmbXQvMTk3CUluc3RhbGxTaGll
bGQgQ29tcGlsZWQgUnVsZXMgRmlsZSBJbnN0YWxsU2hpZWxkIENvbXBpbGVkIFJ1bGVzIEY9Cmls
ZQorCQlmbXQvMTk4CU1QRUcgQXVkaW8gU3RyZWFtLCBMYXllciBJSSBNUEVHIEF1ZGlvIFN0cmVh
bSwgTGF5ZXIgSUkKKwkJZm10LzE5OQlNUEVHLTQgTWVkaWEgRmlsZSBNUEVHLTQgTWVkaWEgRmls
ZQorCQlmbXQvMjAwCU1hdGVyaWFsIEV4Y2hhbmdlIEZvcm1hdCBNYXRlcmlhbCBFeGNoYW5nZSBG
b3JtYXQKKwkJZm10LzIwMQlNYXRoZW1hdGljYSBOb3RlYm9vayBNYXRoZW1hdGljYSBOb3RlYm9v
aworCQlmbXQvMjAyCU5pa29uIERpZ2l0YWwgU0xSIENhbWVyYSBSYXcgSW1hZ2UgRmlsZSBOaWtv
biBEaWdpdGFsIFNMUiBDYW1lcmE9CiBSYXcgSW1hZ2UgRmlsZQorCQlmbXQvMjAzCU9nZyBWb3Ji
aXMgQ29kZWMgQ29tcHJlc3NlZCBNdWx0aW1lZGlhIEZpbGUgT2dnIFZvcmJpcyBDb2RlYyBDb209
CnByZXNzZWQgTXVsdGltZWRpYSBGaWxlCisJCWZtdC8yMDQJUmVhbFZpZGVvIENsaXAgUmVhbFZp
ZGVvIENsaXAKKwkJZm10LzIwNQlTeW5jaHJvbml6ZWQgTXVsdGltZWRpYSBJbnRlZ3JhdGlvbiBM
YW5ndWFnZSBTeW5jaHJvbml6ZWQgTXVsdGltPQplZGlhIEludGVncmF0aW9uIExhbmd1YWdlCisJ
CWZtdC8yMDYJU3RydWN0dXJlZCBRdWVyeSBMYW5ndWFnZSBEYXRhIFN0cnVjdHVyZWQgUXVlcnkg
TGFuZ3VhZ2UgRGF0YQorCQlmbXQvMjA3CU9ic2lkaXVtIFByb2plY3QgRmlsZSBPYnNpZGl1bSBQ
cm9qZWN0IEZpbGUKKwkJZm10LzIwOAlCaW5hcnkgRmlsZSBCaW5hcnkgRmlsZQorCQlmbXQvMjA5
CVNvdW5kIERlc2lnbmVyIElJIEF1ZGlvIEZpbGUgU291bmQgRGVzaWduZXIgSUkgQXVkaW8gRmls
ZQorCQlmbXQvMjEwCVN0YXRpc3RpY2EgUmVwb3J0IEZpbGUgU3RhdGlzdGljYSBSZXBvcnQgRmls
ZQorCQlmbXQvMjExCUtvZGFrIFBob3RvLUNEIEtvZGFrIFBob3RvLUNECisJCWZtdC8yMTIJSW5m
b3JtYXRpb24gb3IgU2V0dXAgRmlsZSBJbmZvcm1hdGlvbiBvciBTZXR1cCBGaWxlCisJCWZtdC8y
MTMJU2Nhbkl0IERvY3VtZW50IFNjYW5JdCBEb2N1bWVudAorCQlmbXQvMjE0CU1pY3Jvc29mdCBF
eGNlbCBmb3IgV2luZG93cyBNaWNyb3NvZnQgRXhjZWwgZm9yIFdpbmRvd3MgKFZlcnNpb249Cj0z
RDIwMDcpCisJCWZtdC8yMTUJTWljcm9zb2Z0IFBvd2VycG9pbnQgZm9yIFdpbmRvd3MgTWljcm9z
b2Z0IFBvd2VycG9pbnQgZm9yIFdpbmRvdz0KcyAoVmVyc2lvbj0zRDIwMDcpCisJCWZtdC8yMTYJ
TWljcm9zb2Z0IFZpc2lvIGZvciBXaW5kb3dzIE1pY3Jvc29mdCBWaXNpbyBmb3IgV2luZG93cyAo
VmVyc2lvbj0KPTNEMjAwNykKKwkJZm10LzIxNwlQYWludFNob3BQcm8gQnJvd3NlciBDYWNoZSBG
aWxlIFBhaW50U2hvcFBybyBCcm93c2VyIENhY2hlIEZpbGUKKwkJZm10LzIxOAlNaWNyb3NvZnQg
RnJvbnRQYWdlIE1pY3Jvc29mdCBGcm9udFBhZ2UKKwkJZm10LzIxOQlNaWNyb3NvZnQgV29ya3Mg
RGF0YWJhc2UgZm9yIFdpbmRvd3MgTWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvPQpyIFdpbmRv
d3MgKFZlcnNpb249M0QyLjApCisJCWZtdC8yMjAJTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNoZWV0
IGZvciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5kb3dzIChW
ZXJzaW9uPTNEMi4wKQorCQlmbXQvMjIxCU1pY3Jvc29mdCBXb3JrcyBXb3JkIFByb2Nlc3NvciBm
b3IgV2luZG93cyBNaWNyb3NvZnQgV29ya3MgV29yZCA9ClByb2Nlc3NvciBmb3IgV2luZG93cyAo
VmVyc2lvbj0zRDIuMCkKKwkJZm10LzIyMglNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIFdp
bmRvd3MgTWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvPQpyIFdpbmRvd3MgKFZlcnNpb249M0Qy
LjBhKQorCQlmbXQvMjIzCU1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3IgV2luZG93cyBNaWNy
b3NvZnQgV29ya3MgRGF0YWJhc2UgZm89CnIgV2luZG93cyAoVmVyc2lvbj0zRDMuMCkKKwkJZm10
LzIyNAlNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIFdpbmRvd3MgTWljcm9zb2Z0IFdvcmtz
IERhdGFiYXNlIGZvPQpyIFdpbmRvd3MgKFZlcnNpb249M0QzLjBhKQorCQlmbXQvMjI1CU1pY3Jv
c29mdCBXb3JrcyBEYXRhYmFzZSBmb3IgV2luZG93cyBNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2Ug
Zm89CnIgV2luZG93cyAoVmVyc2lvbj0zRDMuMGIpCisJCWZtdC8yMjYJTWljcm9zb2Z0IFdvcmtz
IERhdGFiYXNlIGZvciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmbz0KciBXaW5k
b3dzIChWZXJzaW9uPTNENC4wKQorCQlmbXQvMjI3CU1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaGVl
dCBmb3IgV2luZG93cyBNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2g9CmVldCBmb3IgV2luZG93cyAo
VmVyc2lvbj0zRDIuMGEpCisJCWZtdC8yMjgJTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNoZWV0IGZv
ciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5kb3dzIChWZXJz
aW9uPTNEMy4wKQorCQlmbXQvMjI5CU1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaGVldCBmb3IgV2lu
ZG93cyBNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2g9CmVldCBmb3IgV2luZG93cyAoVmVyc2lvbj0z
RDMuMGEpCisJCWZtdC8yMzAJTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNoZWV0IGZvciBXaW5kb3dz
IE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5kb3dzIChWZXJzaW9uPTNEMy4w
YikKKwkJZm10LzIzMQlNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIFdpbmRvd3MgTWlj
cm9zb2Z0IFdvcmtzIFNwcmVhZHNoPQplZXQgZm9yIFdpbmRvd3MgKFZlcnNpb249M0Q0LjApCisJ
CWZtdC8yMzIJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIGZvciBXaW5kb3dzIE1pY3Jv
c29mdCBXb3JrcyBXb3JkID0KUHJvY2Vzc29yIGZvciBXaW5kb3dzIChWZXJzaW9uPTNEMi4wYSkK
KwkJZm10LzIzMwlNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jZXNzb3IgZm9yIFdpbmRvd3MgTWlj
cm9zb2Z0IFdvcmtzIFdvcmQgPQpQcm9jZXNzb3IgZm9yIFdpbmRvd3MgKFZlcnNpb249M0QzLjAp
CisJCWZtdC8yMzQJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIGZvciBXaW5kb3dzIE1p
Y3Jvc29mdCBXb3JrcyBXb3JkID0KUHJvY2Vzc29yIGZvciBXaW5kb3dzIChWZXJzaW9uPTNEMy4w
YSkKKwkJZm10LzIzNQlNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jZXNzb3IgZm9yIFdpbmRvd3Mg
TWljcm9zb2Z0IFdvcmtzIFdvcmQgPQpQcm9jZXNzb3IgZm9yIFdpbmRvd3MgKFZlcnNpb249M0Qz
LjBiKQorCQlmbXQvMjM2CU1pY3Jvc29mdCBXb3JrcyBXb3JkIFByb2Nlc3NvciBmb3IgV2luZG93
cyBNaWNyb3NvZnQgV29ya3MgV29yZCA9ClByb2Nlc3NvciBmb3IgV2luZG93cyAoVmVyc2lvbj0z
RDQuMCkKKwkJZm10LzIzNwlNaWNyb3NvZnQgT2ZmaWNlIEJpbmRlciBGaWxlIGZvciBXaW5kb3dz
IE1pY3Jvc29mdCBPZmZpY2UgQmluZGVyPQogRmlsZSBmb3IgV2luZG93cyAoVmVyc2lvbj0zRDk1
KQorCQlmbXQvMjM4CU1pY3Jvc29mdCBPZmZpY2UgQmluZGVyIFRlbXBsYXRlIGZvciBXaW5kb3dz
IE1pY3Jvc29mdCBPZmZpY2UgQmk9Cm5kZXIgVGVtcGxhdGUgZm9yIFdpbmRvd3MgKFZlcnNpb249
M0Q5NSkKKwkJZm10LzIzOQlNaWNyb3NvZnQgT2ZmaWNlIEJpbmRlciBXaXphcmQgZm9yIFdpbmRv
d3MgTWljcm9zb2Z0IE9mZmljZSBCaW5kPQplciBXaXphcmQgZm9yIFdpbmRvd3MgKFZlcnNpb249
M0Q5NSkKKwkJZm10LzI0MAlNaWNyb3NvZnQgT2ZmaWNlIEJpbmRlciBGaWxlIGZvciBXaW5kb3dz
IE1pY3Jvc29mdCBPZmZpY2UgQmluZGVyPQogRmlsZSBmb3IgV2luZG93cyAoVmVyc2lvbj0zRDk3
LTIwMDMpCisJCWZtdC8yNDEJTWljcm9zb2Z0IE9mZmljZSBCaW5kZXIgVGVtcGxhdGUgZm9yIFdp
bmRvd3MgTWljcm9zb2Z0IE9mZmljZSBCaT0KbmRlciBUZW1wbGF0ZSBmb3IgV2luZG93cyAoVmVy
c2lvbj0zRDk3LTIwMDMpCisJCWZtdC8yNDIJTWljcm9zb2Z0IE9mZmljZSBCaW5kZXIgV2l6YXJk
IGZvciBXaW5kb3dzIE1pY3Jvc29mdCBPZmZpY2UgQmluZD0KZXIgV2l6YXJkIGZvciBXaW5kb3dz
IChWZXJzaW9uPTNEOTctMjAwMykKKwkJZm10LzI0MwlHUFMgZVhjaGFuZ2UgRm9ybWF0IEdQUyBl
WGNoYW5nZSBGb3JtYXQKKwkJZm10LzI0NAlLZXlob2xlIE1hcmt1cCBMYW5ndWFnZSBLZXlob2xl
IE1hcmt1cCBMYW5ndWFnZQorCQlmbXQvMjQ1CVN0cnVjdHVyZWQgRGF0YSBFeGNoYW5nZSBGb3Jt
YXQgU3RydWN0dXJlZCBEYXRhIEV4Y2hhbmdlIEZvcm1hdAorCQlmbXQvMjQ2CU1pY3Jvc29mdCBX
b3JrcyBEYXRhYmFzZSBmb3IgV2luZG93cyBNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm89CnIg
V2luZG93cyAoVmVyc2lvbj0zRDQuMGEpCisJCWZtdC8yNDcJTWljcm9zb2Z0IFdvcmtzIFNwcmVh
ZHNoZWV0IGZvciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5k
b3dzIChWZXJzaW9uPTNENC4wYSkKKwkJZm10LzI0OAlNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9j
ZXNzb3IgV2luZG93cyBNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jPQplc3NvciBXaW5kb3dzIChW
ZXJzaW9uPTNENC4wYSkKKwkJZm10LzI0OQlNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIFdp
bmRvd3MgTWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvPQpyIFdpbmRvd3MgKFZlcnNpb249M0Q0
LjUpCisJCWZtdC8yNTAJTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNoZWV0IGZvciBXaW5kb3dzIE1p
Y3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5kb3dzIChWZXJzaW9uPTNENC41KQor
CQlmbXQvMjUxCU1pY3Jvc29mdCBXb3JrcyBXb3JkIFByb2Nlc3NvciBXaW5kb3dzIE1pY3Jvc29m
dCBXb3JrcyBXb3JkIFByb2M9CmVzc29yIFdpbmRvd3MgKFZlcnNpb249M0Q0LjUpCisJCWZtdC8y
NTIJTWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBE
YXRhYmFzZSBmbz0KciBXaW5kb3dzIChWZXJzaW9uPTNENC41YSkKKwkJZm10LzI1MwlNaWNyb3Nv
ZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIFdpbmRvd3MgTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNo
PQplZXQgZm9yIFdpbmRvd3MgKFZlcnNpb249M0Q0LjVhKQorCQlmbXQvMjU0CU1pY3Jvc29mdCBX
b3JrcyBXb3JkIFByb2Nlc3NvciBXaW5kb3dzIE1pY3Jvc29mdCBXb3JrcyBXb3JkIFByb2M9CmVz
c29yIFdpbmRvd3MgKFZlcnNpb249M0Q0LjVhKQorCQlmbXQvMjU1CURqVnUgRmlsZSBGb3JtYXQg
RGpWdSBGaWxlIEZvcm1hdAorCQlmbXQvMjU2CU1pY3Jvc29mdCBXb3JrcyBEYXRhYmFzZSBmb3Ig
V2luZG93cyBNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm89CnIgV2luZG93cyAoVmVyc2lvbj0z
RDIwMDApCisJCWZtdC8yNTcJTWljcm9zb2Z0IFdvcmtzIFNwcmVhZHNoZWV0IGZvciBXaW5kb3dz
IE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaD0KZWV0IGZvciBXaW5kb3dzIChWZXJzaW9uPTNEMjAw
MCkKKwkJZm10LzI1OAlNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jZXNzb3IgV2luZG93cyBNaWNy
b3NvZnQgV29ya3MgV29yZCBQcm9jPQplc3NvciBXaW5kb3dzIChWZXJzaW9uPTNEMjAwMCkKKwkJ
Zm10LzI1OQlNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIERPUyBNaWNyb3NvZnQgV29ya3Mg
RGF0YWJhc2UgZm9yIERPPQpTIChWZXJzaW9uPTNEMykKKwkJZm10LzI2MAlNaWNyb3NvZnQgV29y
a3MgRGF0YWJhc2UgZm9yIERPUyBNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIERPPQpTIChW
ZXJzaW9uPTNEM2EpCisJCWZtdC8yNjEJTWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvciBET1Mg
TWljcm9zb2Z0IFdvcmtzIERhdGFiYXNlIGZvciBETz0KUyAoVmVyc2lvbj0zRDNiKQorCQlmbXQv
MjYyCU1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaGVldCBmb3IgRE9TIE1pY3Jvc29mdCBXb3JrcyBT
cHJlYWRzaGVldCA9CmZvciBET1MgKFZlcnNpb249M0QzKQorCQlmbXQvMjYzCU1pY3Jvc29mdCBX
b3JrcyBTcHJlYWRzaGVldCBmb3IgRE9TIE1pY3Jvc29mdCBXb3JrcyBTcHJlYWRzaGVldCA9CmZv
ciBET1MgKFZlcnNpb249M0QzYSkKKwkJZm10LzI2NAlNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hl
ZXQgZm9yIERPUyBNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgPQpmb3IgRE9TIChWZXJzaW9u
PTNEM2IpCisJCWZtdC8yNjUJTWljcm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIERPUyBNaWNy
b3NvZnQgV29ya3MgV29yZCBQcm9jZXNzbz0KciBET1MgKFZlcnNpb249M0QzKQorCQlmbXQvMjY2
CU1pY3Jvc29mdCBXb3JrcyBXb3JkIFByb2Nlc3NvciBET1MgTWljcm9zb2Z0IFdvcmtzIFdvcmQg
UHJvY2Vzc289CnIgRE9TIChWZXJzaW9uPTNEM2EpCisJCWZtdC8yNjcJTWljcm9zb2Z0IFdvcmtz
IFdvcmQgUHJvY2Vzc29yIERPUyBNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jZXNzbz0KciBET1Mg
KFZlcnNpb249M0QzYikKKwkJZm10LzI2OAlNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIE1h
Y2ludG9zaCBNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgPQpmb3IgTWFjaW50b3NoIChWZXJzaW9u
PTNEMykKKwkJZm10LzI2OQlNaWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgZm9yIE1hY2ludG9zaCBN
aWNyb3NvZnQgV29ya3MgRGF0YWJhc2UgPQpmb3IgTWFjaW50b3NoIChWZXJzaW9uPTNENCkKKwkJ
Zm10LzI3MAlNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIE1hY2ludG9zaCBNaWNyb3Nv
ZnQgV29ya3MgU3ByZWFkPQpzaGVldCBmb3IgTWFjaW50b3NoIChWZXJzaW9uPTNEMykKKwkJZm10
LzI3MQlNaWNyb3NvZnQgV29ya3MgU3ByZWFkc2hlZXQgZm9yIE1hY2ludG9zaCBNaWNyb3NvZnQg
V29ya3MgU3ByZWFkPQpzaGVldCBmb3IgTWFjaW50b3NoIChWZXJzaW9uPTNENCkKKwkJZm10LzI3
MglNaWNyb3NvZnQgV29ya3MgV29yZCBQcm9jZXNzb3IgTWFjaW50b3NoIE1pY3Jvc29mdCBXb3Jr
cyBXb3JkIFByPQpvY2Vzc29yIE1hY2ludG9zaCAoVmVyc2lvbj0zRDMpCisJCWZtdC8yNzMJTWlj
cm9zb2Z0IFdvcmtzIFdvcmQgUHJvY2Vzc29yIE1hY2ludG9zaCBNaWNyb3NvZnQgV29ya3MgV29y
ZCBQcj0Kb2Nlc3NvciBNYWNpbnRvc2ggKFZlcnNpb249M0Q0KQorCQlmbXQvMjc0CVNQU1MgT3V0
cHV0IEZpbGUgKHNwdikgU1BTUyBPdXRwdXQgRmlsZSAoc3B2KQorCQlmbXQvMjc1CU1pY3Jvc29m
dCBBY2Nlc3MgRGF0YWJhc2UgTWljcm9zb2Z0IEFjY2VzcyBEYXRhYmFzZSAoVmVyc2lvbj0zRDI9
CjAwNykKKwkJZm10LzI3NglBY3JvYmF0IFBERiAxLjcgLSBQb3J0YWJsZSBEb2N1bWVudCBGb3Jt
YXQgQWNyb2JhdCBQREYgMS43IC0gUG9yPQp0YWJsZSBEb2N1bWVudCBGb3JtYXQgKFZlcnNpb249
M0QxLjcpCisJCWZtdC8yNzcJRVNSSSBBcmMvVmlldyBTaGFwZWZpbGUgSW5kZXggRVNSSSBBcmMv
VmlldyBTaGFwZWZpbGUgSW5kZXgKKwkJZm10LzI3OAlJbnRlcm5ldCBNZXNzYWdlIEZvcm1hdCBJ
bnRlcm5ldCBNZXNzYWdlIEZvcm1hdAorCQlmbXQvMjc5CUZMQUMgKEZyZWUgTG9zc2xlc3MgQXVk
aW8gQ29kZWMpIEZMQUMgKEZyZWUgTG9zc2xlc3MgQXVkaW8gQ29kZWMpCisJCWZtdC8yODAJTGFU
ZVggKE1hc3RlciBkb2N1bWVudCkgTGFUZVggKE1hc3RlciBkb2N1bWVudCkKKwkJZm10LzI4MQlM
YVRlWCAoU3ViZG9jdW1lbnQpIExhVGVYIChTdWJkb2N1bWVudCkKKwkJZm10LzI4MgluZXRDREYt
MyBDbGFzc2ljIG5ldENERi0zIENsYXNzaWMKKwkJZm10LzI4MwluZXRDREYtMyA2NC1iaXQgbmV0
Q0RGLTMgNjQtYml0CisJCWZtdC8yODQJR3JpZGRlZCBCaW5hcnkgR3JpZGRlZCBCaW5hcnkgKFZl
cnNpb249M0QxLjApCisJCWZtdC8yODUJR3JpZGRlZCBCaW5hcnkgR3JpZGRlZCBCaW5hcnkgKFZl
cnNpb249M0QyLjApCisJCWZtdC8yODYJSERGNSBIREY1IChWZXJzaW9uPTNEMS4wKQorCQlmbXQv
Mjg3CUhERjUgSERGNSAoVmVyc2lvbj0zRDIuMCkKKwkJZm10LzI4OAlNaWNyb3NvZnQgRnJvbnQg
UGFnZSBTZXJ2ZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24gTWljcm9zb2Z0IEZyPQpvbnQgUGFn
ZSBTZXJ2ZXIgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24KKwkJZm10LzI4OQlXQVJDIFdBUkMKKwkJ
Zm10LzI5MAlPcGVuRG9jdW1lbnQgVGV4dCBPcGVuRG9jdW1lbnQgVGV4dCAoVmVyc2lvbj0zRDEu
MSkKKwkJZm10LzI5MQlPcGVuRG9jdW1lbnQgVGV4dCBPcGVuRG9jdW1lbnQgVGV4dCAoVmVyc2lv
bj0zRDEuMikKKwkJZm10LzI5MglPcGVuRG9jdW1lbnQgUHJlc2VudGF0aW9uIE9wZW5Eb2N1bWVu
dCBQcmVzZW50YXRpb24gKFZlcnNpb249M0QxPQouMSkKKwkJZm10LzI5MwlPcGVuRG9jdW1lbnQg
UHJlc2VudGF0aW9uIE9wZW5Eb2N1bWVudCBQcmVzZW50YXRpb24gKFZlcnNpb249M0QxPQouMikK
KwkJZm10LzI5NAlPcGVuRG9jdW1lbnQgU3ByZWFkc2hlZXQgT3BlbkRvY3VtZW50IFNwcmVhZHNo
ZWV0IChWZXJzaW9uPTNEMS4xKQorCQlmbXQvMjk1CU9wZW5Eb2N1bWVudCBTcHJlYWRzaGVldCBP
cGVuRG9jdW1lbnQgU3ByZWFkc2hlZXQgKFZlcnNpb249M0QxLjIpCisJCWZtdC8yOTYJT3BlbkRv
Y3VtZW50IEdyYXBoaWNzIE9wZW5Eb2N1bWVudCBHcmFwaGljcyAoVmVyc2lvbj0zRDEuMSkKKwkJ
Zm10LzI5NwlPcGVuRG9jdW1lbnQgR3JhcGhpY3MgT3BlbkRvY3VtZW50IEdyYXBoaWNzIChWZXJz
aW9uPTNEMS4yKQorCQlmbXQvMjk4CUF1dG9kZXNrIEFuaW1hdG9yIFBybyBGTElDIEF1dG9kZXNr
IEFuaW1hdG9yIFBybyBGTElDCisJCWZtdC8yOTkJQXV0b2Rlc2sgQW5pbWF0b3IgKEZsaWNMaWIp
IEF1dG9kZXNrIEFuaW1hdG9yIChGbGljTGliKQorCQlmbXQvMzAwCUNoaVdyaXRlciBEb2N1bWVu
dCBDaGlXcml0ZXIgRG9jdW1lbnQgKFZlcnNpb249M0Q0KQorCQlmbXQvMzAxCUNvbXB1dGVyIEdy
YXBoaWNzIE1ldGFmaWxlIEFTQ0lJIENvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlIEFTQ0k9Ckkg
KFZlcnNpb249M0QzKQorCQlmbXQvMzAyCUNvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlIEFTQ0lJ
IENvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlIEFTQ0k9CkkgKFZlcnNpb249M0Q0KQorCQlmbXQv
MzAzCUNvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlIChCaW5hcnkpIENvbXB1dGVyIEdyYXBoaWNz
IE1ldGFmaWxlICg9CkJpbmFyeSkgKFZlcnNpb249M0QxKQorCQlmbXQvMzA0CUNvbXB1dGVyIEdy
YXBoaWNzIE1ldGFmaWxlIChCaW5hcnkpIENvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlICg9CkJp
bmFyeSkgKFZlcnNpb249M0QyKQorCQlmbXQvMzA1CUNvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxl
IChCaW5hcnkpIENvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlICg9CkJpbmFyeSkgKFZlcnNpb249
M0QzKQorCQlmbXQvMzA2CUNvbXB1dGVyIEdyYXBoaWNzIE1ldGFmaWxlIChCaW5hcnkpIENvbXB1
dGVyIEdyYXBoaWNzIE1ldGFmaWxlICg9CkJpbmFyeSkgKFZlcnNpb249M0Q0KQorCQlmbXQvMzA3
CVF1aWNrZW4gSW50ZXJjaGFuZ2UgRm9ybWF0IFF1aWNrZW4gSW50ZXJjaGFuZ2UgRm9ybWF0CisJ
CWZtdC8zMDgJUXVpY2tlbiBEYXRhIEZvcm1hdCBRdWlja2VuIERhdGEgRm9ybWF0CisJCWZtdC8z
MDkJT3BlbiBGaW5hbmNpYWwgRXhjaGFuZ2UgT3BlbiBGaW5hbmNpYWwgRXhjaGFuZ2UgKFZlcnNp
b249M0QxLjAyKQorCQlmbXQvMzEwCU9wZW4gRmluYW5jaWFsIEV4Y2hhbmdlIE9wZW4gRmluYW5j
aWFsIEV4Y2hhbmdlIChWZXJzaW9uPTNEMS4wMykKKwkJZm10LzMxMQlPcGVuIEZpbmFuY2lhbCBF
eGNoYW5nZSBPcGVuIEZpbmFuY2lhbCBFeGNoYW5nZSAoVmVyc2lvbj0zRDEuNikKKwkJZm10LzMx
MglPcGVuIEZpbmFuY2lhbCBFeGNoYW5nZSBPcGVuIEZpbmFuY2lhbCBFeGNoYW5nZSAoVmVyc2lv
bj0zRDIuMC4zKQorCQlmbXQvMzEzCU9wZW4gRmluYW5jaWFsIEV4Y2hhbmdlIE9wZW4gRmluYW5j
aWFsIEV4Y2hhbmdlIChWZXJzaW9uPTNEMi4xLjEpCisJCWZtdC8zMTQJUGxheSBTSUQgQXVkaW8g
UGxheSBTSUQgQXVkaW8gKFZlcnNpb249M0QxKQorCQlmbXQvMzE1CVBsYXkgU0lEIEF1ZGlvIFBs
YXkgU0lEIEF1ZGlvIChWZXJzaW9uPTNEMikKKwkJZm10LzMxNglSZWFsIFNJRCBBdWRpbyBSZWFs
IFNJRCBBdWRpbworCQlmbXQvMzE3CU1hY3JvbWVkaWEgRGlyZWN0b3IgTWFjcm9tZWRpYSBEaXJl
Y3RvciAoVmVyc2lvbj0zRE1hY2ludG9zaCkKKwkJZm10LzMxOAlTZWN1cmUgRGpWVSBTZWN1cmUg
RGpWVQorCQlmbXQvMzE5CUVTUkkgU3BhdGlhbCBJbmRleCBGaWxlIEVTUkkgU3BhdGlhbCBJbmRl
eCBGaWxlCisJCWZtdC8zMjAJRVNSSSBTaGFwZWZpbGUgUHJvamVjdGlvbiAoV2VsbC1Lbm93biBU
ZXh0KSBGb3JtYXQgRVNSSSBTaGFwZWZpbD0KZSBQcm9qZWN0aW9uIChXZWxsLUtub3duIFRleHQp
IEZvcm1hdAorCQlmbXQvMzIxCUVTUkkgU2hhcGVmaWxlIEhlYWRlciBJbmRleCBFU1JJIFNoYXBl
ZmlsZSBIZWFkZXIgSW5kZXgKKwkJZm10LzMyMglQb3J0YWJsZSBGb3JtIEZpbGUgUG9ydGFibGUg
Rm9ybSBGaWxlCisJCWZtdC8zMjMJRXh0ZW5kZWQgTW9kdWxlIEF1ZGlvIEZpbGUgRXh0ZW5kZWQg
TW9kdWxlIEF1ZGlvIEZpbGUKKwkJZm10LzMyNAlFbmROb3RlIFN0eWxlIEZpbGUgRW5kTm90ZSBT
dHlsZSBGaWxlCisJCWZtdC8zMjUJRW5kTm90ZSBMaWJyYXJ5IEVuZE5vdGUgTGlicmFyeQorCQlm
bXQvMzI2CUVuZE5vdGUgQ29ubmVjdGlvbiBGaWxlIEVuZE5vdGUgQ29ubmVjdGlvbiBGaWxlCisJ
CWZtdC8zMjcJRW5kTm90ZSBGaWx0ZXIgRmlsZSBFbmROb3RlIEZpbHRlciBGaWxlCisJCWZtdC8z
MjgJRW5kTm90ZSBJbXBvcnQgRmlsZSBFbmROb3RlIEltcG9ydCBGaWxlCisJCWZtdC8zMjkJU2hl
bGwgQXJjaGl2ZSBGb3JtYXQgU2hlbGwgQXJjaGl2ZSBGb3JtYXQKKwkJZm10LzMzMAlQZWFrIEdy
YXBoaWNhbCBXYXZlZm9ybSBGaWxlIFBlYWsgR3JhcGhpY2FsIFdhdmVmb3JtIEZpbGUKKwkJZm10
LzMzMQlBdXRvcnVuIENvbmZpZ3VyYXRpb24gRmlsZSBBdXRvcnVuIENvbmZpZ3VyYXRpb24gRmls
ZQorCQlmbXQvMzMyCUVTUkkgQXJjL1ZpZXcgUHJvamVjdCBFU1JJIEFyYy9WaWV3IFByb2plY3Qg
KFZlcnNpb249M0QzLngpCisJCWZtdC8zMzMJQ2hlbWljYWwgTWFya3VwIExhbmd1YWdlIENoZW1p
Y2FsIE1hcmt1cCBMYW5ndWFnZQorCQlmbXQvMzM0CUNyeXN0YWxsb2dyYXBoaWMgSW5mb3JtYXRp
b24gRnJhbWV3b3JrIENyeXN0YWxsb2dyYXBoaWMgSW5mb3JtYXQ9CmlvbiBGcmFtZXdvcmsKKwkJ
Zm10LzMzNQlEcmVhbXdlYXZlciBMb2NrIEZpbGUgRHJlYW13ZWF2ZXIgTG9jayBGaWxlCisJCWZt
dC8zMzYJR3JhcGhpYyBXb3Jrc2hvcCBmb3IgV2luZG93cyBUaHVtYm5haWwgRmlsZSBHcmFwaGlj
IFdvcmtzaG9wIGZvcj0KIFdpbmRvd3MgVGh1bWJuYWlsIEZpbGUKKwkJZm10LzMzNwlNb3Rpb24g
SlBFRzIwMDAgTW90aW9uIEpQRUcyMDAwCisJCWZtdC8zMzgJSW50ZXJjaGFuZ2UgRmlsZSBGb3Jt
YXQgSW50ZXJsZWF2ZWQgQml0bWFwIEludGVyY2hhbmdlIEZpbGUgRm9ybT0KYXQgSW50ZXJsZWF2
ZWQgQml0bWFwCisJCWZtdC8zMzkJSW50ZXJjaGFuZ2UgRmlsZSBGb3JtYXQgOC1iaXQgU2FtcGxl
ZCBWb2ljZSBJbnRlcmNoYW5nZSBGaWxlIEZvcj0KbWF0IDgtYml0IFNhbXBsZWQgVm9pY2UKKwkJ
Zm10LzM0MAlMb3R1cyBXb3JkUHJvIERvY3VtZW50IExvdHVzIFdvcmRQcm8gRG9jdW1lbnQgKFZl
cnNpb249M0Q5Ny9NaWxsPQplbm5pdW0pCisJCWZtdC8zNDEJTWFjaW50b3NoIFBJQ1QgSW1hZ2Ug
TWFjaW50b3NoIFBJQ1QgSW1hZ2UgKFZlcnNpb249M0QyLjApCisJCWZtdC8zNDIJTWljcm9zb2Z0
IFByb2plY3QgRXhwb3J0IEZpbGUgTWljcm9zb2Z0IFByb2plY3QgRXhwb3J0IEZpbGUgKFZlcj0K
c2lvbj0zRDQuMCkKKwkJZm10LzM0MwlNaWNyb3NvZnQgUHJvamVjdCBFeHBvcnQgRmlsZSBNaWNy
b3NvZnQgUHJvamVjdCBFeHBvcnQgRmlsZSAoVmVyPQpzaW9uPTNEMy4wKQorCQlmbXQvMzQ0CU1p
Y3Jvc29mdCBXaW5kb3dzIEVuaGFuY2VkIE1ldGFmaWxlIE1pY3Jvc29mdCBXaW5kb3dzIEVuaGFu
Y2VkIE09CmV0YWZpbGUgKFZlcnNpb249M0QyLjApCisJCWZtdC8zNDUJTWljcm9zb2Z0IFdpbmRv
d3MgRW5oYW5jZWQgTWV0YWZpbGUgTWljcm9zb2Z0IFdpbmRvd3MgRW5oYW5jZWQgTT0KZXRhZmls
ZSAoVmVyc2lvbj0zRDMuMCkKKwkJZm10LzM0NglNaWNyb3NvZnQgV29yZCBmb3IgTWFjaW50b3No
IERvY3VtZW50IE1pY3Jvc29mdCBXb3JkIGZvciBNYWNpbnRvPQpzaCBEb2N1bWVudCAoVmVyc2lv
bj0zRDEuMCkKKwkJZm10LzM0NwlNUEVHIDEvMiBBdWRpbyBMYXllciBJIE1QRUcgMS8yIEF1ZGlv
IExheWVyIEkKKwkJZm10LzM0OAlQYWludCBTaG9wIFBybyBJbWFnZSBQYWludCBTaG9wIFBybyBJ
bWFnZSAoVmVyc2lvbj0zRDkpCisJCWZtdC8zNDkJUGFpbnQgU2hvcCBQcm8gSW1hZ2UgUGFpbnQg
U2hvcCBQcm8gSW1hZ2UgKFZlcnNpb249M0QxMCkKKwkJZm10LzM1MAlQYXJhZG94IERhdGFiYXNl
IFRhYmxlIFBhcmFkb3ggRGF0YWJhc2UgVGFibGUgKFZlcnNpb249M0QzLjApCisJCWZtdC8zNTEJ
UGFyYWRveCBEYXRhYmFzZSBUYWJsZSBQYXJhZG94IERhdGFiYXNlIFRhYmxlIChWZXJzaW9uPTNE
NC4wKQorCQlmbXQvMzUyCVBhcmFkb3ggRGF0YWJhc2UgVGFibGUgUGFyYWRveCBEYXRhYmFzZSBU
YWJsZSAoVmVyc2lvbj0zRDUuMCkKKwkJZm10LzM1MwlUYWdnZWQgSW1hZ2UgRmlsZSBGb3JtYXQg
VGFnZ2VkIEltYWdlIEZpbGUgRm9ybWF0CisJCWZtdC8zNTQJQWNyb2JhdCBQREYvQSAtIFBvcnRh
YmxlIERvY3VtZW50IEZvcm1hdCBBY3JvYmF0IFBERi9BIC0gUG9ydGFibD0KZSBEb2N1bWVudCBG
b3JtYXQgKFZlcnNpb249M0QxYikKKwkJZm10LzM1NQlSaWNoIFRleHQgRm9ybWF0IFJpY2ggVGV4
dCBGb3JtYXQgKFZlcnNpb249M0QxLjkpCisJCWZtdC8zNTYJQWRhcHRpdmUgTXVsdGktUmF0ZSBB
dWRpbyBBZGFwdGl2ZSBNdWx0aS1SYXRlIEF1ZGlvCisJCWZtdC8zNTcJM0dQUCBBdWRpby9WaWRl
byBGaWxlIDNHUFAgQXVkaW8vVmlkZW8gRmlsZQorCQlmbXQvMzU4CUludGVybmV0IERhdGEgUXVl
cnkgRmlsZSBJbnRlcm5ldCBEYXRhIFF1ZXJ5IEZpbGUKKwkJZm10LzM1OQlNaWNyb3NvZnQgRnJv
bnQgUGFnZSBCaW5hcnkgVHJlZSBJbmRleCBNaWNyb3NvZnQgRnJvbnQgUGFnZSBCaW5hPQpyeSBU
cmVlIEluZGV4CisJCWZtdC8zNjAJcHVsc2UgRUtLTyBkYXRhIGZpbGUgcHVsc2UgRUtLTyBkYXRh
IGZpbGUKKwkJZm10LzM2MQlwdWxzZSBFS0tPIGhlYWRlciBmaWxlIHB1bHNlIEVLS08gaGVhZGVy
IGZpbGUKKwkJZm10LzM2MglHU1NJIFNJUi0xMCBSQURBTiBkYXRhIGZpbGUgR1NTSSBTSVItMTAg
UkFEQU4gZGF0YSBmaWxlCisJCWZtdC8zNjMJU0VHIFkgRGF0YSBFeGNoYW5nZSBGb3JtYXQgU0VH
IFkgRGF0YSBFeGNoYW5nZSBGb3JtYXQgKFZlcnNpb249Cj0zREdlbmVyaWMpCisJCWZtdC8zNjQJ
TmF0aW9uYWwgSW1hZ2VyeSBUcmFuc21pc3Npb24gRm9ybWF0IE5hdGlvbmFsIEltYWdlcnkgVHJh
bnNtaXNzaT0Kb24gRm9ybWF0IChWZXJzaW9uPTNEMS4wKQorCQlmbXQvMzY1CU5hdGlvbmFsIElt
YWdlcnkgVHJhbnNtaXNzaW9uIEZvcm1hdCBOYXRpb25hbCBJbWFnZXJ5IFRyYW5zbWlzc2k9Cm9u
IEZvcm1hdCAoVmVyc2lvbj0zRDIuMCkKKwkJZm10LzM2NglOYXRpb25hbCBJbWFnZXJ5IFRyYW5z
bWlzc2lvbiBGb3JtYXQgTmF0aW9uYWwgSW1hZ2VyeSBUcmFuc21pc3NpPQpvbiBGb3JtYXQgKFZl
cnNpb249M0QyLjEpCisJCWZtdC8zNjcJRVNSSSBXb3JsZCBGaWxlIEZvcm1hdCBFU1JJIFdvcmxk
IEZpbGUgRm9ybWF0PTIwCmRpZmYgLS1naXQgYS9taWdyYXRpb24vcG9zdGNyZWF0ZS5weSBiL2N1
Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlvbi9wb3N0Y3JlYT0KdGUucHkKcmVuYW1lIGZyb20gbWln
cmF0aW9uL3Bvc3RjcmVhdGUucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL21pZ3JhdGlv
bi9wb3N0Y3JlYXRlLnB5CmRpZmYgLS1naXQgYS9wZ190cmdtLnB5IGIvY3ViaWN3ZWJfc2FlbV9y
ZWYvcGdfdHJnbS5weQpyZW5hbWUgZnJvbSBwZ190cmdtLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9z
YWVtX3JlZi9wZ190cmdtLnB5CmRpZmYgLS1naXQgYS9wdmlld3MucHkgYi9jdWJpY3dlYl9zYWVt
X3JlZi9wdmlld3MucHkKcmVuYW1lIGZyb20gcHZpZXdzLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9z
YWVtX3JlZi9wdmlld3MucHkKZGlmZiAtLWdpdCBhL3NjaGVtYS5weSBiL2N1Ymljd2ViX3NhZW1f
cmVmL3NjaGVtYS5weQpyZW5hbWUgZnJvbSBzY2hlbWEucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3Nh
ZW1fcmVmL3NjaGVtYS5weQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9pbml0X2RhdGFfY3VsdHVyZS5w
eSBiL2N1Ymljd2ViX3NhZW1fcmVmL3NjcmlwdHMvaW5pdF89CmRhdGFfY3VsdHVyZS5weQpyZW5h
bWUgZnJvbSBzY3JpcHRzL2luaXRfZGF0YV9jdWx0dXJlLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9z
YWVtX3JlZi9zY3JpcHRzL2luaXRfZGF0YV9jdWx0dXJlLnB5CmRpZmYgLS1naXQgYS9jdWJpY3dl
Yl9zYWVtX3JlZi9zY3JpcHRzL2luaXRfZWFjX2FnZW50cy5weSBiL2N1Ymljd2ViX3NhZW1fcj0K
ZWYvc2NyaXB0cy9pbml0X2VhY19hZ2VudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9jdWJpY3dlYl9zYWVtX3JlZi9zY3JpcHRzL2luaXRfZWFjX2FnZW50cy5w
eQpAQCAtMCwwICsxLDEzIEBACitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoIGFzIG9zcAorZnJv
bSBjdWJpY3dlYi5kYXRhaW1wb3J0LmltcG9ydGVyIGltcG9ydCBTaW1wbGVJbXBvcnRMb2cKKwor
CitwcmludCgnaW1wb3J0aW5nIHNvbWUgZWFjIGZpbGVzJykKK0VBQ19ESVIgPTNEIG9zcC5qb2lu
KG9zcC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCAndGVzdCcsICdkYXRhJywgJ0VBPQpD
JykKK2ZvciBmbmFtZSBpbiAoJ0ZSQUQwMzNfRUFDXzAwMDAxLnhtbCcsICdGUkFEMDMzX0VBQ18w
MDAwMy54bWwnLCAnRlJBRDAzM19FPQpBQ18wMDA3MS54bWwnKToKKyAgICBwcmludCBmbmFtZQor
ICAgIGltcG9ydF9sb2cgPTNEIFNpbXBsZUltcG9ydExvZyhmbmFtZSkKKyAgICBjbnguY2FsbF9z
ZXJ2aWNlKCdzYWVtX3JlZi5lYWMtaW1wb3J0Jywgc3RyZWFtPTNEb3Blbihvc3Auam9pbihFQUNf
RElSPQosIGZuYW1lKSksCisgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfbG9nPTNEaW1wb3J0
X2xvZywgcmFpc2Vfb25fZXJyb3I9M0RUcnVlKQorICAgIGNueC5jb21taXQoKQpkaWZmIC0tZ2l0
IGEvc2NyaXB0cy9pbml0X2xvZ2lsYWJfYWdlbnQucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi9zY3Jp
cHRzL2luaXQ9Cl9sb2dpbGFiX2FnZW50LnB5CnJlbmFtZSBmcm9tIHNjcmlwdHMvaW5pdF9sb2dp
bGFiX2FnZW50LnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi9zY3JpcHRzL2luaXRfbG9n
aWxhYl9hZ2VudC5weQpkaWZmIC0tZ2l0IGEvc2l0ZV9jdWJpY3dlYi5weSBiL2N1Ymljd2ViX3Nh
ZW1fcmVmL3NpdGVfY3ViaWN3ZWIucHkKcmVuYW1lIGZyb20gc2l0ZV9jdWJpY3dlYi5weQpyZW5h
bWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvc2l0ZV9jdWJpY3dlYi5weQpkaWZmIC0tZ2l0IGEvc29i
amVjdHMvX19pbml0X18ucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi9zb2JqZWN0cy9fX2luaXRfXy5w
eQpyZW5hbWUgZnJvbSBzb2JqZWN0cy9fX2luaXRfXy5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2Fl
bV9yZWYvc29iamVjdHMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3NvYmplY3RzL3Nrb3MucHkg
Yi9jdWJpY3dlYl9zYWVtX3JlZi9zb2JqZWN0cy9za29zLnB5CnJlbmFtZSBmcm9tIHNvYmplY3Rz
L3Nrb3MucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL3NvYmplY3RzL3Nrb3MucHkKZGlm
ZiAtLWdpdCBhL3VpcHJvcHMucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi91aXByb3BzLnB5CnJlbmFt
ZSBmcm9tIHVpcHJvcHMucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL3VpcHJvcHMucHkK
ZGlmZiAtLWdpdCBhL3ZpZXdzL19faW5pdF9fLnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mv
X19pbml0X18ucHkKcmVuYW1lIGZyb20gdmlld3MvX19pbml0X18ucHkKcmVuYW1lIHRvIGN1Ymlj
d2ViX3NhZW1fcmVmL3ZpZXdzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS92aWV3cy9hdXRob3Jp
dHlyZWNvcmQucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9hdXRob3JpdHlyZT0KY29yZC5w
eQpyZW5hbWUgZnJvbSB2aWV3cy9hdXRob3JpdHlyZWNvcmQucHkKcmVuYW1lIHRvIGN1Ymljd2Vi
X3NhZW1fcmVmL3ZpZXdzL2F1dGhvcml0eXJlY29yZC5weQpkaWZmIC0tZ2l0IGEvdmlld3MvYXV0
b2NvbXBsZXRlc2VhcmNoLnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3MvYXV0b2NvbXA9Cmxl
dGVzZWFyY2gucHkKcmVuYW1lIGZyb20gdmlld3MvYXV0b2NvbXBsZXRlc2VhcmNoLnB5CnJlbmFt
ZSB0byBjdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9hdXRvY29tcGxldGVzZWFyY2gucHkKZGlmZiAt
LWdpdCBhL3ZpZXdzL2Nsb25lLnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3MvY2xvbmUucHkK
cmVuYW1lIGZyb20gdmlld3MvY2xvbmUucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1fcmVmL3Zp
ZXdzL2Nsb25lLnB5CmRpZmYgLS1naXQgYS92aWV3cy9lYWMucHkgYi9jdWJpY3dlYl9zYWVtX3Jl
Zi92aWV3cy9lYWMucHkKcmVuYW1lIGZyb20gdmlld3MvZWFjLnB5CnJlbmFtZSB0byBjdWJpY3dl
Yl9zYWVtX3JlZi92aWV3cy9lYWMucHkKZGlmZiAtLWdpdCBhL2N1Ymljd2ViX3NhZW1fcmVmL3Zp
ZXdzL2pxdHJlZS5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL3ZpZXdzL2pxPQp0cmVlLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmll
d3MvanF0cmVlLnB5CkBAIC0wLDAgKzEsMTkxIEBACisjIGNvcHlyaWdodCAyMDE1IExPR0lMQUIg
Uy5BLiAoUGFyaXMsIEZSQU5DRSksIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIGNvbnRhY3QgaHR0
cDovL3d3dy5sb2dpbGFiLmZyIC0tIG1haWx0bzpjb250YWN0QGxvZ2lsYWIuZnIKKyMKKyMgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkgaXQgPQp1bmRlcgorIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEY9CnJlZQorIyBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGk9Cm9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIPQpP
VVQKKyMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJPQpUTkVTUworIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
IFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciA9Cm1vcmUKKyMg
ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPQogYWxvbmcKKyMgd2l0aCB0aGlzIHByb2dy
YW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyIiImN1Ymlj
d2ViLXNhZW0tcmVmIHRyZWUgdmlld3MgdXNpbmcganFUcmVlIiIiCisKK2Zyb20gZnVuY3Rvb2xz
IGltcG9ydCB3cmFwcworCitmcm9tIGN1Ymljd2ViIGltcG9ydCB0YWdzLCB1aWxpYgorZnJvbSBj
dWJpY3dlYi52aWV3IGltcG9ydCBFbnRpdHlBZGFwdGVyLCBFbnRpdHlWaWV3LCBWaWV3Citmcm9t
IGN1Ymljd2ViLnByZWRpY2F0ZXMgaW1wb3J0IGFkYXB0YWJsZSwgbWF0Y2hfZm9ybV9wYXJhbXMK
K2Zyb20gY3ViaWN3ZWIud2ViLnZpZXdzIGltcG9ydCBhamF4Y29udHJvbGxlciwganNvbgorCisK
K0BhamF4Y29udHJvbGxlci5hamF4ZnVuYyhvdXRwdXRfdHlwZT0zRCdqc29uJykKK2RlZiBqcXRy
ZWVfcmVwYXJlbnQoc2VsZiwgY2hpbGRfZWlkLCBwYXJlbnRfZWlkKToKKyAgICBjaGlsZCA9M0Qg
c2VsZi5fY3cuZW50aXR5X2Zyb21fZWlkKGNoaWxkX2VpZCkKKyAgICBhZGFwdGVkID0zRCBjaGls
ZC5jd19hZGFwdF90bygnSUpRVHJlZScpCisgICAgaWYgYWRhcHRlZCBpcyBub3QgTm9uZToKKyAg
ICAgICAgcmV0dXJuIGFkYXB0ZWQucmVwYXJlbnQocGFyZW50X2VpZCkKKworCitjbGFzcyBJSlFU
cmVlQWRhcHRlcihFbnRpdHlBZGFwdGVyKToKKyAgICAiIiJBZGFwdCBhbiBlbnRpdHkgaW50byBh
IEpRVHJlZSBub2RlLiIiIgorICAgIF9fcmVnaWRfXyA9M0QgJ0lKUVRyZWUnCisKKyAgICBkZWYg
bWF5YmVfcGFyZW50X29mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIGVudGl0
eSB0eXBlIHdoaWNoIGBlbnRpdHlgIG1heSBiZSBwYXJlbnQgb2YuIiIiCisgICAgICAgIHJldHVy
biBbXQorCisgICAgZGVmIG1heWJlX2NoaWxkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1
ZSBpZiBlbnRpdHkgbWF5IGJlIGNoaWxkIG9mIGFub3RoZXIgKGkuZS4gbWF5IGJlCisgICAgICAg
IHJlcGFyZW50ZWQpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk
ZWYgcmVwYXJlbnQoc2VsZiwgcGVpZCk6CisgICAgICAgICIiIlNldCBlbnRpdHkgYXMgY2hpbGQg
b2YgZW50aXR5IHdpdGggYHBlaWRgLiIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYganNvbihz
ZWxmLCBvbl9kZW1hbmQ9M0RGYWxzZSk6CisgICAgICAgICIiIlJldHVybiBhIEpTT04gZGljdCBv
ZiBhbiBlbnRpdHkuIiIiCisgICAgICAgIGVudGl0eSA9M0Qgc2VsZi5lbnRpdHkKKyAgICAgICAg
bGFiZWwgPTNEIGVudGl0eS52aWV3KCdqcXRyZWUubGFiZWwnKQorICAgICAgICBkYXRhID0zRCB7
CisgICAgICAgICAgICAnbGFiZWwnOiBsYWJlbCwKKyAgICAgICAgICAgICdpZCc6IGVudGl0eS5l
aWQsCisgICAgICAgICAgICAndHlwZSc6IGVudGl0eS5jd19ldHlwZSwKKyAgICAgICAgICAgICdt
YXliZUNoaWxkJzogc2VsZi5tYXliZV9jaGlsZCgpLAorICAgICAgICAgICAgJ21heWJlUGFyZW50
T2YnOiBzZWxmLm1heWJlX3BhcmVudF9vZigpLAorICAgICAgICB9CisgICAgICAgIGlmIG9uX2Rl
bWFuZDoKKyAgICAgICAgICAgIGRhdGFbJ2xvYWRfb25fZGVtYW5kJ10gPTNEIFRydWUKKyAgICAg
ICAgcmV0dXJuIGRhdGEKKworCitkZWYgaXRyZWVfYWRhcHRhYmxlKGZ1bmMpOgorICAgICIiIkRl
Y29yYXRvciBmb3IgYSBmdW5jdGlvbiB0YWtpbmcgYW4gZW50aXR5IGFzIGFyZ3VtZW50LCBjaGVj
a2luZyB0aGF0CisgICAgdGhlIGVudGl0eSBpcyBhZGFwdGFibGUgYXMgSVRyZWUgYW5kIGV2ZW50
dWFsbHkgY2FsbGluZyBpdCBvciBub3QuCisgICAgIiIiCisgICAgQHdyYXBzKGZ1bmMpCisgICAg
ZGVmIHdyYXBwZXIoZW50aXR5KToKKyAgICAgICAgaXRyZWUgPTNEIGVudGl0eS5jd19hZGFwdF90
bygnSVRyZWUnKQorICAgICAgICBpZiBpdHJlZToKKyAgICAgICAgICAgIHJldHVybiBmdW5jKGVu
dGl0eSkKKyAgICAgICAgcmV0dXJuICgpCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitAaXRyZWVf
YWRhcHRhYmxlCitkZWYganNvbl9lbnRpdHlfY2hpbGRyZW4oZW50aXR5KToKKyAgICAiIiJZaWVs
ZCBKU09OIGRhdGEgZm9yIGNoaWxkcmVuIG9mIGEgSVRyZWUgYWRhcHRlZCBlbnRpdHkuCisKKyAg
ICBFYWNoIGRhdGEgd2lsbCBoYXZlIGBsb2FkX29uX2RlbWFuZGAgdW5sZXNzIGl0IGlzIGEgbGVh
ZiBvZiB0aGUgdHJlZS4KKyAgICAiIiIKKyAgICBmb3IgY2hpbGQgaW4gZW50aXR5LmN3X2FkYXB0
X3RvKCdJVHJlZScpLml0ZXJjaGlsZHJlbigpOgorICAgICAgICBjdHJlZSA9M0QgY2hpbGQuY3df
YWRhcHRfdG8oJ0lUcmVlJykKKyAgICAgICAgb25fZGVtYW5kID0zRCBjdHJlZSBhbmQgbm90IGN0
cmVlLmlzX2xlYWYoKQorICAgICAgICBpY2hpbGQgPTNEIGNoaWxkLmN3X2FkYXB0X3RvKCdJSlFU
cmVlJykKKyAgICAgICAgaWYgaWNoaWxkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQg
aWNoaWxkLmpzb24ob25fZGVtYW5kPTNEb25fZGVtYW5kKQorCisKK0BpdHJlZV9hZGFwdGFibGUK
K2RlZiBqc29uX2VudGl0eV9wYXJlbnRzKGVudGl0eSk6CisgICAgIiIiUmV0dXJuIHRoZSBKU09O
IGRhdGEgb2YgdGhlIGZ1bGwgdHJlZSB3YWxrZWQgdXBzdHJlYW0gZnJvbSBgZW50aXR5YC4KKwor
ICAgIEVhY2ggbm9kZSBhbG9uZyB0aGUgcGF0aCBmcm9tIHRoaXMgZW50aXR5IHRvIHRoZSByb290
IHdpbGwgaGF2ZQorICAgIGBsb2FkX29uX2RlbWFuZCA9M0Q9M0QgRmFsc2VgIHNvIHRoYXQgdGhl
IHRyZWUgaXMgb3BlbmVkIGRvd24gdG8gYGVudGk9CnR5YC4KKyAgICAiIiIKKyAgICAjIGluaXRp
YWxpemUgZGF0YSBmb3IgInByZXZpb3VzIiBwYXJlbnQgd2hlbiB3YWxraW5nIHVwIHRoZSB0cmVl
LgorICAgIHByZXZpb3VzLCBwcmV2aW91c19jaGlsZHJlbiA9M0QgTm9uZSwgW10KKyAgICBkYXRh
ID0zRCBOb25lCisgICAgZm9yIHBhcmVudCBpbiBlbnRpdHkuY3dfYWRhcHRfdG8oJ0lUcmVlJyku
aXRlcnBhcmVudHMoKToKKyAgICAgICAgIyBwYXJlbnQgaGFzIHRvIGJlIHN0cmljdGx5IGV2YWx1
YXRlZAorICAgICAgICBpcGFyZW50ID0zRCBwYXJlbnQuY3dfYWRhcHRfdG8oJ0lKUVRyZWUnKQor
ICAgICAgICBpZiBpcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICBkYXRhID0zRCBpcGFyZW50Lmpzb24ob25fZGVtYW5kPTNERmFsc2UpCisgICAgICAgIGRhdGFb
J2NoaWxkcmVuJ10gPTNEIFtdCisgICAgICAgICMgZmV0Y2ggSlNPTiBmb3IgY2hpbGRyZW4gb2Yg
dGhpcyBwYXJlbnQsIHNldHRpbmcgdGhlIHByZXZpb3VzCisgICAgICAgICMgcGFyZW50IHdlJ3Jl
IGNvbWluZyBmcm9tIGFzIHN0cmljdCAobG9hZF9vbl9kZW1hbmQ9M0RGYWxzZSkuCisgICAgICAg
IGZvciBjaGlsZCBpbiBqc29uX2VudGl0eV9jaGlsZHJlbihwYXJlbnQpOgorICAgICAgICAgICAg
aWYgcHJldmlvdXNfY2hpbGRyZW4gYW5kIGNoaWxkWydpZCddID0zRD0zRCBwcmV2aW91czoKKyAg
ICAgICAgICAgICAgICAjIHJlbW92ZSBsb2FkX29uX2RlbWFuZCBhcyB0aGlzIGlzIHRoZSBicmFu
Y2ggd2UgYXJlCisgICAgICAgICAgICAgICAgIyB3YWxraW5nIG9uLgorICAgICAgICAgICAgICAg
IGNoaWxkLnBvcCgnbG9hZF9vbl9kZW1hbmQnLCBOb25lKQorICAgICAgICAgICAgICAgICMgYWRk
IGNoaWxkcmVuIG9mIHByZXZpb3VzIHBhcmVudCAod2hpY2ggaXMgYSBjaGlsZCBvZgorICAgICAg
ICAgICAgICAgICMgdGhpcyBwYXJlbnQpLgorICAgICAgICAgICAgICAgIGNoaWxkLnNldGRlZmF1
bHQoJ2NoaWxkcmVuJywgW10pLmV4dGVuZChwcmV2aW91c19jaGlsZHJlbikKKyAgICAgICAgICAg
IGRhdGFbJ2NoaWxkcmVuJ10uYXBwZW5kKGNoaWxkKQorICAgICAgICAjIHN0b3JlIHRoaXMgcGFy
ZW50IGFzIHRoZSBwcmV2aW91cyBvbmUgZm9yIG5leHQgaXRlcmF0aW9uLgorICAgICAgICBwcmV2
aW91cywgcHJldmlvdXNfY2hpbGRyZW4gPTNEIHBhcmVudC5laWQsIGRhdGEuZ2V0KCdjaGlsZHJl
bicsIFs9Cl0pCisgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBKc29uVHJlZVZpZXcoanNvbi5K
c29uTWl4SW4sIEVudGl0eVZpZXcpOgorICAgICIiIkpTT04gdmlldyBmb3IgYW4gZW50aXR5IGFk
YXB0YWJsZSBhcyBhIElUcmVlLiIiIgorCisgICAgX19yZWdpZF9fID0zRCAnanF0cmVlLmpzb24n
CisgICAgX19zZWxlY3RfXyA9M0QgYWRhcHRhYmxlKCdJVHJlZScpICYgfm1hdGNoX2Zvcm1fcGFy
YW1zKCdub2RlJykKKworICAgIGRlZiBlbnRpdHlfY2FsbChzZWxmLCBlbnRpdHksICoqa3dhcmdz
KToKKyAgICAgICAgIyBjb21wdXRlIHRoZSBwYXJlbnQgSlNPTiB0cmVlLgorICAgICAgICBkYXRh
ID0zRCBqc29uX2VudGl0eV9wYXJlbnRzKGVudGl0eSkKKyAgICAgICAgaWYgbm90IGRhdGE6Cisg
ICAgICAgICAgICAjIGlmIGVtcHR5LCBqdXN0IHJldHVybiB0aGUgY3VycmVudCBlbnRpdHkgSlNP
TiB0cmVlICh3aXRoCisgICAgICAgICAgICAjIGNoaWxkcmVuKSBhcyB0aGUgZW50aXR5IGlzIHBy
b2JhYmx5IHRoZSByb290LgorICAgICAgICAgICAgYWRhcHRlZCA9M0QgZW50aXR5LmN3X2FkYXB0
X3RvKCdJSlFUcmVlJykKKyAgICAgICAgICAgIGlmIGFkYXB0ZWQgaXMgTm9uZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGRhdGEgPTNEIGFkYXB0ZWQuanNvbihvbl9kZW1h
bmQ9M0RGYWxzZSkKKyAgICAgICAgICAgIGNoaWxkcmVuID0zRCBsaXN0KGpzb25fZW50aXR5X2No
aWxkcmVuKGVudGl0eSkpCisgICAgICAgICAgICBpZiBjaGlsZHJlbjoKKyAgICAgICAgICAgICAg
ICBkYXRhWydjaGlsZHJlbiddID0zRCBjaGlsZHJlbgorICAgICAgICBkYXRhWydzZWxlY3RlZCdd
ID0zRCBlbnRpdHkuZWlkCisgICAgICAgIHNlbGYud2RhdGEoW2RhdGFdKQorCisKK2NsYXNzIEpz
b25UcmVlTm9kZVZpZXcoanNvbi5Kc29uTWl4SW4sIFZpZXcpOgorICAgICIiIkpTT04gdmlldyBm
b3IgYSBub2RlIG9mIHRyZWUsIHJldHVybmluZyB0aGUgY2hpbGRyZW4gb2YgdGhhdCBub2RlIGY9
Cm9yCisgICAgbGF6eSBsb2FkaW5nLgorICAgICIiIgorCisgICAgX19yZWdpZF9fID0zRCAnanF0
cmVlLmpzb24nCisgICAgX19zZWxlY3RfXyA9M0QgbWF0Y2hfZm9ybV9wYXJhbXMoJ25vZGUnKQor
CisgICAgZGVmIGNhbGwoc2VsZik6CisgICAgICAgIGVpZCA9M0Qgc2VsZi5fY3cuZm9ybS5wb3Ao
J25vZGUnKQorICAgICAgICBlbnRpdHkgPTNEIHNlbGYuX2N3LmVudGl0eV9mcm9tX2VpZChlaWQp
CisgICAgICAgIGNoaWxkcmVuID0zRCBsaXN0KGpzb25fZW50aXR5X2NoaWxkcmVuKGVudGl0eSkp
CisgICAgICAgIHNlbGYud2RhdGEoY2hpbGRyZW4pCisKKworY2xhc3MgSlFUcmVlSXRlbUxhYmVs
VmlldyhFbnRpdHlWaWV3KToKKyAgICAiIiJWaWV3IGZvciB0aGUgImxhYmVsIiBvZiBhIG5vZGUg
b2YgYSBqcVRyZWUuCisKKyAgICBEZWZhdWx0IHRvICJvbmVsaW5lIiB2aWV3LgorICAgICIiIgor
ICAgIF9fcmVnaWRfXyA9M0QgJ2pxdHJlZS5sYWJlbCcKKworICAgIGRlZiBlbnRpdHlfY2FsbChz
ZWxmLCBlbnRpdHkpOgorICAgICAgICBlbnRpdHkudmlldygnb25lbGluZScsIHc9M0RzZWxmLncp
CisKKworY2xhc3MgSlFUcmVlVmlldyhFbnRpdHlWaWV3KToKKyAgICAiIiJUcmVlIHZpZXcgdXNp
bmcganFUcmVlIGxpYnJhcnkuIiIiCisgICAgX19yZWdpZF9fID0zRCAnanF0cmVlLnRyZWV2aWV3
JworICAgIF9fc2VsZWN0X18gPTNEIGFkYXB0YWJsZSgnSVRyZWUnKQorCisgICAgZGVmIGVudGl0
eV9jYWxsKHNlbGYsIGVudGl0eSwgKiprd2FyZ3MpOgorICAgICAgICAjIFRPRE8gbW92ZSBqcVRy
ZWUganMgdG8gaXRzIG93biBmaWxlLgorICAgICAgICBzZWxmLl9jdy5hZGRfanMoKCdjdWJlcy5q
cXRyZWUuanMnLCAndHJlZS5qcXVlcnkuanMnKSkKKyAgICAgICAgc2VsZi5fY3cuYWRkX2Nzcygo
J2pxdHJlZS5jc3MnKSkKKyAgICAgICAgZGl2aWQgPTNEICdqcXRyZWUnICsgc3RyKGVudGl0eS5l
aWQpCisgICAgICAgIGRhdGFfdXJsID0zRCBlbnRpdHkuYWJzb2x1dGVfdXJsKHZpZD0zRCdqcXRy
ZWUuanNvbicpCisgICAgICAgIHNlbGYudyh0YWdzLmRpdihpZD0zRGRpdmlkLCAqKnsnZGF0YS11
cmwnOiBkYXRhX3VybH0pKQorICAgICAgICBtYXl1cGRhdGUgPTNEIGVudGl0eS5lX3NjaGVtYS5o
YXNfcGVybSgKKyAgICAgICAgICAgIHNlbGYuX2N3LCAndXBkYXRlJywgZWlkPTNEZW50aXR5LmVp
ZCkKKyAgICAgICAgc2VsZi5fY3cuYWRkX29ubG9hZCh1aWxpYi5qcy5qcXRyZWUuanFUcmVlKGRp
dmlkLCBtYXl1cGRhdGUpKQpkaWZmIC0tZ2l0IGEvdmlld3MvbWFuYWdlbWVudC5weSBiL2N1Ymlj
d2ViX3NhZW1fcmVmL3ZpZXdzL21hbmFnZW1lbnQucHkKcmVuYW1lIGZyb20gdmlld3MvbWFuYWdl
bWVudC5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3MvbWFuYWdlbWVudC5weQpk
aWZmIC0tZ2l0IGEvdmlld3Mvb3JnLnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mvb3JnLnB5
CnJlbmFtZSBmcm9tIHZpZXdzL29yZy5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmll
d3Mvb3JnLnB5CmRpZmYgLS1naXQgYS92aWV3cy9wYXRjaGVzLnB5IGIvY3ViaWN3ZWJfc2FlbV9y
ZWYvdmlld3MvcGF0Y2hlcy5weQpyZW5hbWUgZnJvbSB2aWV3cy9wYXRjaGVzLnB5CnJlbmFtZSB0
byBjdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9wYXRjaGVzLnB5CmRpZmYgLS1naXQgYS92aWV3cy9w
cm92LnB5IGIvY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3MvcHJvdi5weQpyZW5hbWUgZnJvbSB2aWV3
cy9wcm92LnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9wcm92LnB5CmRpZmYg
LS1naXQgYS92aWV3cy9yZGYucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9yZGYucHkKcmVu
YW1lIGZyb20gdmlld3MvcmRmLnB5CnJlbmFtZSB0byBjdWJpY3dlYl9zYWVtX3JlZi92aWV3cy9y
ZGYucHkKZGlmZiAtLWdpdCBhL3ZpZXdzL3NlYXJjaC5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL3Zp
ZXdzL3NlYXJjaC5weQpyZW5hbWUgZnJvbSB2aWV3cy9zZWFyY2gucHkKcmVuYW1lIHRvIGN1Ymlj
d2ViX3NhZW1fcmVmL3ZpZXdzL3NlYXJjaC5weQpkaWZmIC0tZ2l0IGEvdmlld3Mvc2VkYS5weSBi
L2N1Ymljd2ViX3NhZW1fcmVmL3ZpZXdzL3NlZGEucHkKcmVuYW1lIGZyb20gdmlld3Mvc2VkYS5w
eQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mvc2VkYS5weQpkaWZmIC0tZ2l0IGEv
dmlld3Mvc2tvcy5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL3ZpZXdzL3Nrb3MucHkKcmVuYW1lIGZy
b20gdmlld3Mvc2tvcy5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mvc2tvcy5w
eQpkaWZmIC0tZ2l0IGEvdmlld3Mvc3RhcnR1cC5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL3ZpZXdz
L3N0YXJ0dXAucHkKcmVuYW1lIGZyb20gdmlld3Mvc3RhcnR1cC5weQpyZW5hbWUgdG8gY3ViaWN3
ZWJfc2FlbV9yZWYvdmlld3Mvc3RhcnR1cC5weQpkaWZmIC0tZ2l0IGEvdmlld3Mvd2lkZ2V0cy5w
eSBiL2N1Ymljd2ViX3NhZW1fcmVmL3ZpZXdzL3dpZGdldHMucHkKcmVuYW1lIGZyb20gdmlld3Mv
d2lkZ2V0cy5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mvd2lkZ2V0cy5weQpk
aWZmIC0tZ2l0IGEvdmlld3Mvd3MucHkgYi9jdWJpY3dlYl9zYWVtX3JlZi92aWV3cy93cy5weQpy
ZW5hbWUgZnJvbSB2aWV3cy93cy5weQpyZW5hbWUgdG8gY3ViaWN3ZWJfc2FlbV9yZWYvdmlld3Mv
d3MucHkKZGlmZiAtLWdpdCBhL3dvcmtmbG93cy5weSBiL2N1Ymljd2ViX3NhZW1fcmVmL3dvcmtm
bG93cy5weQpyZW5hbWUgZnJvbSB3b3JrZmxvd3MucHkKcmVuYW1lIHRvIGN1Ymljd2ViX3NhZW1f
cmVmL3dvcmtmbG93cy5weQpkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQotLS0gYS9z
ZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtMSwxMCArMSwxMCBAQAogIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jIHB5bGludDogc2tpcC1maWxlCisjIHB5bGludDogZGlzYWJsZT0zRFcwMTQyLFcw
NDAzLFcwNDA0LFcwNjEzLFcwNjIyLFcwNjIyLFcwNzA0LFIwOTA0LEMwMTAzLD0KRTA2MTEKICMK
LSMgY29weXJpZ2h0IDIwMDMtMjAxMCBMT0dJTEFCIFMuQS4gKFBhcmlzLCBGUkFOQ0UpLCBhbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBjb3B5cmlnaHQgMjAwMy0yMDE2IExPR0lMQUIgUy5BLiAoUGFy
aXMsIEZSQU5DRSksIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIGNvbnRhY3QgaHR0cDovL3d3dy5s
b2dpbGFiLmZyLyAtLSBtYWlsdG86Y29udGFjdEBsb2dpbGFiLmZyCiAjCi0jIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIEN1YmljV2ViIHRhZyBjdWJlLgorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBhIGN1
Ymljd2ViLXNhZW0tcmVmLgogIwogIyBDdWJpY1dlYiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGU9CnIgdGhlCiAjIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlCkBAIC0xNiwxODYgKzE2LDYyIEBACiAjIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcj0KIG1vcmUKICMg
ZGV0YWlscy4KICMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlPQogYWxvbmcKLSMgd2l0aCBDdWJpY1dlYi4g
IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSIiIkdlbmVyaWMg
U2V0dXAgc2NyaXB0LCB0YWtlcyBwYWNrYWdlIGluZm8gZnJvbSBfX3BrZ2luZm9fXy5weSBmaWxl
CisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEN1YmljV2ViLiAgSWYgbm90LCBzZWUg
PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIiIiY3ViaWN3ZWJfc2FlbV9yZWYgc2V0
dXAgbW9kdWxlIHVzaW5nIGRhdGEgZnJvbQorY3ViaWN3ZWJfc2FlbV9yZWYvX19wa2dpbmZvX18u
cHkgZmlsZQogIiIiCi1fX2RvY2Zvcm1hdF9fID0zRCAicmVzdHJ1Y3R1cmVkdGV4dCBlbiIKLQot
aW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc2h1dGlsCi1mcm9tIG9zLnBhdGggaW1wb3J0
IGV4aXN0cywgam9pbiwgd2FsawotCi10cnk6Ci0gICAgaWYgb3MuZW52aXJvbi5nZXQoJ05PX1NF
VFVQVE9PTFMnKToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoKSAjIGRvIGFzIHRoZXJlIGlz
IG5vIHNldHVwdG9vbHMKLSAgICBmcm9tIHNldHVwdG9vbHMgaW1wb3J0IHNldHVwCi0gICAgZnJv
bSBzZXR1cHRvb2xzLmNvbW1hbmQgaW1wb3J0IGluc3RhbGxfbGliCi0gICAgVVNFX1NFVFVQVE9P
TFMgPTNEIFRydWUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmcm9tIGRpc3R1dGlscy5jb3Jl
IGltcG9ydCBzZXR1cAotICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGluc3RhbGxf
bGliCi0gICAgVVNFX1NFVFVQVE9PTFMgPTNEIEZhbHNlCi1mcm9tIGRpc3R1dGlscy5jb21tYW5k
IGltcG9ydCBpbnN0YWxsX2RhdGEKPTIwCi0jIGltcG9ydCByZXF1aXJlZCBmZWF0dXJlcwotZnJv
bSBfX3BrZ2luZm9fXyBpbXBvcnQgbW9kbmFtZSwgdmVyc2lvbiwgbGljZW5zZSwgZGVzY3JpcHRp
b24sIHdlYiwgXAotICAgICBhdXRob3IsIGF1dGhvcl9lbWFpbCwgY2xhc3NpZmllcnMKLQotaWYg
ZXhpc3RzKCdSRUFETUUnKToKLSAgICBsb25nX2Rlc2NyaXB0aW9uID0zRCBmaWxlKCdSRUFETUUn
KS5yZWFkKCkKLWVsc2U6Ci0gICAgbG9uZ19kZXNjcmlwdGlvbiA9M0QgJycKK2Zyb20gb3MucGF0
aCBpbXBvcnQgam9pbiwgZGlybmFtZQo9MjAKLSMgaW1wb3J0IG9wdGlvbmFsIGZlYXR1cmVzCi1p
bXBvcnQgX19wa2dpbmZvX18KLWlmIFVTRV9TRVRVUFRPT0xTOgotICAgIHJlcXVpcmVzID0zRCB7
fQotICAgIGZvciBlbnRyeSBpbiAoIl9fZGVwZW5kc19fIiwpOiAjICJfX3JlY29tbWVuZHNfXyIp
OgotICAgICAgICByZXF1aXJlcy51cGRhdGUoZ2V0YXR0cihfX3BrZ2luZm9fXywgZW50cnksIHt9
KSkKLSAgICBpbnN0YWxsX3JlcXVpcmVzID0zRCBbKCIlcyAlcyIgJSAoZCwgdiBhbmQgdiBvciAi
IikpLnN0cmlwKCkKLSAgICAgICAgICAgICAgICAgICAgICAgZm9yIGQsIHYgaW4gcmVxdWlyZXMu
aXRlcml0ZW1zKCldCi1lbHNlOgotICAgIGluc3RhbGxfcmVxdWlyZXMgPTNEIFtdCi0KLWRpc3Ru
YW1lID0zRCBnZXRhdHRyKF9fcGtnaW5mb19fLCAnZGlzdG5hbWUnLCBtb2RuYW1lKQotc2NyaXB0
cyA9M0QgZ2V0YXR0cihfX3BrZ2luZm9fXywgJ3NjcmlwdHMnLCAoKSkKLWluY2x1ZGVfZGlycyA9
M0QgZ2V0YXR0cihfX3BrZ2luZm9fXywgJ2luY2x1ZGVfZGlycycsICgpKQotZGF0YV9maWxlcyA9
M0QgZ2V0YXR0cihfX3BrZ2luZm9fXywgJ2RhdGFfZmlsZXMnLCBOb25lKQotZXh0X21vZHVsZXMg
PTNEIGdldGF0dHIoX19wa2dpbmZvX18sICdleHRfbW9kdWxlcycsIE5vbmUpCi1kZXBlbmRlbmN5
X2xpbmtzID0zRCBnZXRhdHRyKF9fcGtnaW5mb19fLCAnZGVwZW5kZW5jeV9saW5rcycsICgpKQot
Ci1CQVNFX0JMQUNLTElTVCA9M0QgKCdDVlMnLCAnLnN2bicsICcuaGcnLCAnZGViaWFuJywgJ2Rp
c3QnLCAnYnVpbGQnKQotSUdOT1JFRF9FWFRFTlNJT05TID0zRCAoJy5weWMnLCAnLnB5bycsICcu
ZWxjJywgJ34nKQorZnJvbSBzZXR1cHRvb2xzIGltcG9ydCBmaW5kX3BhY2thZ2VzLCBzZXR1cAo9
MjAKPTIwCi1kZWYgZW5zdXJlX3NjcmlwdHMobGludXhfc2NyaXB0cyk6Ci0gICAgIiIiCi0gICAg
Q3JlYXRlcyB0aGUgcHJvcGVyIHNjcmlwdCBuYW1lcyByZXF1aXJlZCBmb3IgZWFjaCBwbGF0Zm9y
bQotICAgICh0YWtlbiBmcm9tIDRTdWl0ZSkKLSAgICAiIiIKLSAgICBmcm9tIGRpc3R1dGlscyBp
bXBvcnQgdXRpbAotICAgIGlmIHV0aWwuZ2V0X3BsYXRmb3JtKClbOjNdID0zRD0zRCAnd2luJzoK
LSAgICAgICAgc2NyaXB0c18gPTNEIFtzY3JpcHQgKyAnLmJhdCcgZm9yIHNjcmlwdCBpbiBsaW51
eF9zY3JpcHRzXQotICAgIGVsc2U6Ci0gICAgICAgIHNjcmlwdHNfID0zRCBsaW51eF9zY3JpcHRz
Ci0gICAgcmV0dXJuIHNjcmlwdHNfCitoZXJlID0zRCBkaXJuYW1lKF9fZmlsZV9fKQorCisjIGxv
YWQgbWV0YWRhdGEgZnJvbSB0aGUgX19wa2dpbmZvX18ucHkgZmlsZSBzbyB0aGVyZSBpcyBubyBy
aXNrIG9mIGNvbmZsaT0KY3QKKyMgc2VlIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4v
bGF0ZXN0L3NpbmdsZV9zb3VyY2VfdmVyc2lvbi5odG1sCitwa2dpbmZvID0zRCBqb2luKGhlcmUs
ICdjdWJpY3dlYl9zYWVtX3JlZicsICdfX3BrZ2luZm9fXy5weScpCitfX3BrZ2luZm9fXyA9M0Qg
e30KK3dpdGggb3Blbihwa2dpbmZvKSBhcyBmOgorICAgIGV4ZWMoZi5yZWFkKCksIF9fcGtnaW5m
b19fKQo9MjAKLWRlZiBleHBvcnQoZnJvbV9kaXIsIHRvX2RpciwKLSAgICAgICAgICAgYmxhY2ts
aXN0PTNEQkFTRV9CTEFDS0xJU1QsCi0gICAgICAgICAgIGlnbm9yZV9leHQ9M0RJR05PUkVEX0VY
VEVOU0lPTlMsCi0gICAgICAgICAgIHZlcmJvc2U9M0RUcnVlKToKLSAgICAiIiJtYWtlIGEgbWly
cm9yIG9mIGZyb21fZGlyIGluIHRvX2Rpciwgb21pdHRpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVz
Ci0gICAgbGlzdGVkIGluIHRoZSBibGFjayBsaXN0Ci0gICAgIiIiCi0gICAgZGVmIG1ha2VfbWly
cm9yKGFyZywgZGlyZWN0b3J5LCBmbmFtZXMpOgotICAgICAgICAiIiJ3YWxrIGhhbmRsZXIiIiIK
LSAgICAgICAgZm9yIG5vcmVjdXJzIGluIGJsYWNrbGlzdDoKLSAgICAgICAgICAgIHRyeToKLSAg
ICAgICAgICAgICAgICBmbmFtZXMucmVtb3ZlKG5vcmVjdXJzKQotICAgICAgICAgICAgZXhjZXB0
IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBmb3IgZmlsZW5hbWUg
aW4gZm5hbWVzOgotICAgICAgICAgICAgIyBkb24ndCBpbmNsdWRlIGJpbmFyeSBmaWxlcwotICAg
ICAgICAgICAgaWYgZmlsZW5hbWVbLTQ6XSBpbiBpZ25vcmVfZXh0OgotICAgICAgICAgICAgICAg
IGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBmaWxlbmFtZVstMV0gPTNEPTNEICd+JzoKLSAgICAg
ICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgc3JjID0zRCBqb2luKGRpcmVjdG9yeSwg
ZmlsZW5hbWUpCi0gICAgICAgICAgICBkZXN0ID0zRCB0b19kaXIgKyBzcmNbbGVuKGZyb21fZGly
KTpdCi0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIu
d3JpdGUoJyVzIC0+ICVzXG4nICUgKHNyYywgZGVzdCkpCi0gICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZGlyKHNyYyk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGV4aXN0cyhkZXN0KToKLSAgICAg
ICAgICAgICAgICAgICAgb3MubWtkaXIoZGVzdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgaWYgZXhpc3RzKGRlc3QpOgotICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUo
ZGVzdCkKLSAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIoc3JjLCBkZXN0KQotICAgIHRyeToK
LSAgICAgICAgb3MubWtkaXIodG9fZGlyKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4OgotICAg
ICAgICAjIGZpbGUgZXhpc3RzID8KLSAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgIGlmIGV4
LmVycm5vICE9M0QgZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgcmFpc2UKLSAgICB3YWxrKGZy
b21fZGlyLCBtYWtlX21pcnJvciwgTm9uZSkKKyMgZ2V0IHJlcXVpcmVkIG1ldGFkYXRhcworbW9k
bmFtZSA9M0QgX19wa2dpbmZvX19bJ21vZG5hbWUnXQordmVyc2lvbiA9M0QgX19wa2dpbmZvX19b
J3ZlcnNpb24nXQorbGljZW5zZSA9M0QgX19wa2dpbmZvX19bJ2xpY2Vuc2UnXQorZGVzY3JpcHRp
b24gPTNEIF9fcGtnaW5mb19fWydkZXNjcmlwdGlvbiddCit3ZWIgPTNEIF9fcGtnaW5mb19fWyd3
ZWInXQorYXV0aG9yID0zRCBfX3BrZ2luZm9fX1snYXV0aG9yJ10KK2F1dGhvcl9lbWFpbCA9M0Qg
X19wa2dpbmZvX19bJ2F1dGhvcl9lbWFpbCddCitjbGFzc2lmaWVycyA9M0QgX19wa2dpbmZvX19b
J2NsYXNzaWZpZXJzJ10KKword2l0aCBvcGVuKGpvaW4oaGVyZSwgJ1JFQURNRScpKSBhcyBmOgor
ICAgIGxvbmdfZGVzY3JpcHRpb24gPTNEIGYucmVhZCgpCisKKyMgZ2V0IG9wdGlvbmFsIG1ldGFk
YXRhcworZGlzdG5hbWUgPTNEIF9fcGtnaW5mb19fLmdldCgnZGlzdG5hbWUnLCBtb2RuYW1lKQor
ZGF0YV9maWxlcyA9M0QgX19wa2dpbmZvX18uZ2V0KCdkYXRhX2ZpbGVzJywgTm9uZSkKK2RlcGVu
ZGVuY3lfbGlua3MgPTNEIF9fcGtnaW5mb19fLmdldCgnZGVwZW5kZW5jeV9saW5rcycsICgpKQor
CityZXF1aXJlcyA9M0Qge30KK2ZvciBlbnRyeSBpbiAoIl9fZGVwZW5kc19fIiwpOiAgIyAiX19y
ZWNvbW1lbmRzX18iKToKKyAgICByZXF1aXJlcy51cGRhdGUoX19wa2dpbmZvX18uZ2V0KGVudHJ5
LCB7fSkpCitpbnN0YWxsX3JlcXVpcmVzID0zRCBbInswfSB7MX0iLmZvcm1hdChkLCB2IGFuZCB2
IG9yICIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGZvciBkLCB2IGluIHJlcXVpcmVz
Lml0ZW1zKCldCj0yMAo9MjAKLWNsYXNzIE15SW5zdGFsbExpYihpbnN0YWxsX2xpYi5pbnN0YWxs
X2xpYik6Ci0gICAgIiIiZXh0ZW5kIGluc3RhbGxfbGliIGNvbW1hbmQgdG8gaGFuZGxlICBwYWNr
YWdlIF9faW5pdF9fLnB5IGFuZAotICAgIGluY2x1ZGVfZGlycyB2YXJpYWJsZSBpZiBuZWNlc3Nh
cnkKLSAgICAiIiIKLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAiIiJvdmVycmlkZGVuIGZy
b20gaW5zdGFsbF9saWIgY2xhc3MiIiIKLSAgICAgICAgaW5zdGFsbF9saWIuaW5zdGFsbF9saWIu
cnVuKHNlbGYpCi0gICAgICAgICMgbWFudWFsbHkgaW5zdGFsbCBpbmNsdWRlZCBkaXJlY3Rvcmll
cyBpZiBhbnkKLSAgICAgICAgaWYgaW5jbHVkZV9kaXJzOgotICAgICAgICAgICAgYmFzZSA9M0Qg
bW9kbmFtZQotICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBpbmNsdWRlX2RpcnM6Ci0gICAg
ICAgICAgICAgICAgZGVzdCA9M0Qgam9pbihzZWxmLmluc3RhbGxfZGlyLCBiYXNlLCBkaXJlY3Rv
cnkpCi0gICAgICAgICAgICAgICAgZXhwb3J0KGRpcmVjdG9yeSwgZGVzdCwgdmVyYm9zZT0zREZh
bHNlKQotCi0jIHJlLWVuYWJsZSBjb3B5aW5nIGRhdGEgZmlsZXMgaW4gc3lzLnByZWZpeAotb2xk
X2luc3RhbGxfZGF0YSA9M0QgaW5zdGFsbF9kYXRhLmluc3RhbGxfZGF0YQotaWYgVVNFX1NFVFVQ
VE9PTFM6Ci0gICAgIyBvdmVyd3JpdGUgSW5zdGFsbERhdGEgdG8gdXNlIHN5cy5wcmVmaXggaW5z
dGVhZCBvZiB0aGUgZWdnIGRpcmVjdG9yeQotICAgIGNsYXNzIE15SW5zdGFsbERhdGEob2xkX2lu
c3RhbGxfZGF0YSk6Ci0gICAgICAgICIiIkEgY2xhc3MgdGhhdCBtYW5hZ2VzIGRhdGEgZmlsZXMg
aW5zdGFsbGF0aW9uIiIiCi0gICAgICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgICAgICBfb2xk
X2luc3RhbGxfZGlyID0zRCBzZWxmLmluc3RhbGxfZGlyCi0gICAgICAgICAgICBpZiBzZWxmLmlu
c3RhbGxfZGlyLmVuZHN3aXRoKCdlZ2cnKToKLSAgICAgICAgICAgICAgICBzZWxmLmluc3RhbGxf
ZGlyID0zRCBzeXMucHJlZml4Ci0gICAgICAgICAgICBvbGRfaW5zdGFsbF9kYXRhLnJ1bihzZWxm
KQotICAgICAgICAgICAgc2VsZi5pbnN0YWxsX2RpciA9M0QgX29sZF9pbnN0YWxsX2RpcgotICAg
IHRyeToKLSAgICAgICAgaW1wb3J0IHNldHVwdG9vbHMuY29tbWFuZC5lYXN5X2luc3RhbGwgIyBv
bmx5IGlmIGVhc3lfaW5zdGFsbCBhdmFpPQpsYWJsZQotICAgICAgICAjIG1vbmtleSBwYXRjaDog
Q3JhY2sgU2FuZGJveFZpb2xhdGlvbiB2ZXJpZmljYXRpb24KLSAgICAgICAgZnJvbSBzZXR1cHRv
b2xzLnNhbmRib3ggaW1wb3J0IERpcmVjdG9yeVNhbmRib3ggYXMgRFMKLSAgICAgICAgb2xkX29r
ID0zRCBEUy5fb2sKLSAgICAgICAgZGVmIF9vayhzZWxmLCBwYXRoKToKLSAgICAgICAgICAgICIi
IlJldHVybiBUcnVlIGlmIGBgcGF0aGBgIGNhbiBiZSB3cml0dGVuIGR1cmluZyBpbnN0YWxsYXRp
b24uPQoiIiIKLSAgICAgICAgICAgIG91dCA9M0Qgb2xkX29rKHNlbGYsIHBhdGgpICMgaGVyZSBm
b3Igc2lkZSBlZmZlY3QgZnJvbSBzZXR1cHRvPQpvbHMKLSAgICAgICAgICAgIHJlYWxwYXRoID0z
RCBvcy5wYXRoLm5vcm1jYXNlKG9zLnBhdGgucmVhbHBhdGgocGF0aCkpCi0gICAgICAgICAgICBh
bGxvd2VkX3BhdGggPTNEIG9zLnBhdGgubm9ybWNhc2Uoc3lzLnByZWZpeCkKLSAgICAgICAgICAg
IGlmIHJlYWxwYXRoLnN0YXJ0c3dpdGgoYWxsb3dlZF9wYXRoKToKLSAgICAgICAgICAgICAgICBv
dXQgPTNEIFRydWUKLSAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICAgICAgRFMuX29rID0zRCBf
b2sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLQotZGVmIGluc3RhbGwo
Kiprd2FyZ3MpOgotICAgICIiInNldHVwIGVudHJ5IHBvaW50IiIiCi0gICAgaWYgVVNFX1NFVFVQ
VE9PTFM6Ci0gICAgICAgIGlmICctLWZvcmNlLW1hbmlmZXN0JyBpbiBzeXMuYXJndjoKLSAgICAg
ICAgICAgIHN5cy5hcmd2LnJlbW92ZSgnLS1mb3JjZS1tYW5pZmVzdCcpCi0gICAgIyBpbnN0YWxs
LWxheW91dCBvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gMi41LjMtMX5leHAxCi0gICAgZWxpZiBz
eXMudmVyc2lvbl9pbmZvIDwgKDIsIDUsIDQpIGFuZCAnLS1pbnN0YWxsLWxheW91dD0zRGRlYicg
aW4gc3lzLj0KYXJndjoKLSAgICAgICAgc3lzLmFyZ3YucmVtb3ZlKCctLWluc3RhbGwtbGF5b3V0
PTNEZGViJykKLSAgICBjbWRjbGFzcyA9M0QgeydpbnN0YWxsX2xpYic6IE15SW5zdGFsbExpYn0K
LSAgICBpZiBVU0VfU0VUVVBUT09MUzoKLSAgICAgICAga3dhcmdzWydpbnN0YWxsX3JlcXVpcmVz
J10gPTNEIGluc3RhbGxfcmVxdWlyZXMKLSAgICAgICAga3dhcmdzWydkZXBlbmRlbmN5X2xpbmtz
J10gPTNEIGRlcGVuZGVuY3lfbGlua3MKLSAgICAgICAga3dhcmdzWyd6aXBfc2FmZSddID0zRCBG
YWxzZQotICAgICAgICBjbWRjbGFzc1snaW5zdGFsbF9kYXRhJ10gPTNEIE15SW5zdGFsbERhdGEK
LQotICAgIHJldHVybiBzZXR1cChuYW1lID0zRCBkaXN0bmFtZSwKLSAgICAgICAgICAgICAgICAg
dmVyc2lvbiA9M0QgdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgbGljZW5zZSA9M0QgbGljZW5z
ZSwKLSAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPTNEIGRlc2NyaXB0aW9uLAotICAgICAg
ICAgICAgICAgICBsb25nX2Rlc2NyaXB0aW9uID0zRCBsb25nX2Rlc2NyaXB0aW9uLAotICAgICAg
ICAgICAgICAgICBhdXRob3IgPTNEIGF1dGhvciwKLSAgICAgICAgICAgICAgICAgYXV0aG9yX2Vt
YWlsID0zRCBhdXRob3JfZW1haWwsCi0gICAgICAgICAgICAgICAgIHVybCA9M0Qgd2ViLAotICAg
ICAgICAgICAgICAgICBzY3JpcHRzID0zRCBlbnN1cmVfc2NyaXB0cyhzY3JpcHRzKSwKLSAgICAg
ICAgICAgICAgICAgZGF0YV9maWxlcyA9M0QgZGF0YV9maWxlcywKLSAgICAgICAgICAgICAgICAg
ZXh0X21vZHVsZXMgPTNEIGV4dF9tb2R1bGVzLAotICAgICAgICAgICAgICAgICBjbWRjbGFzcyA9
M0QgY21kY2xhc3MsCi0gICAgICAgICAgICAgICAgIGNsYXNzaWZpZXJzID0zRCBjbGFzc2lmaWVy
cywKLSAgICAgICAgICAgICAgICAgKiprd2FyZ3MKLSAgICAgICAgICAgICAgICAgKQotCi1pZiBf
X25hbWVfXyA9M0Q9M0QgJ19fbWFpbl9fJyA6Ci0gICAgaW5zdGFsbCgpCitzZXR1cCgKKyAgICBu
YW1lPTNEZGlzdG5hbWUsCisgICAgdmVyc2lvbj0zRHZlcnNpb24sCisgICAgbGljZW5zZT0zRGxp
Y2Vuc2UsCisgICAgZGVzY3JpcHRpb249M0RkZXNjcmlwdGlvbiwKKyAgICBsb25nX2Rlc2NyaXB0
aW9uPTNEbG9uZ19kZXNjcmlwdGlvbiwKKyAgICBhdXRob3I9M0RhdXRob3IsCisgICAgYXV0aG9y
X2VtYWlsPTNEYXV0aG9yX2VtYWlsLAorICAgIHVybD0zRHdlYiwKKyAgICBjbGFzc2lmaWVycz0z
RGNsYXNzaWZpZXJzLAorICAgIHBhY2thZ2VzPTNEZmluZF9wYWNrYWdlcyhleGNsdWRlPTNEWyd0
ZXN0J10pLAorICAgIGluc3RhbGxfcmVxdWlyZXM9M0RpbnN0YWxsX3JlcXVpcmVzLAorICAgIHpp
cF9zYWZlPTNERmFsc2UsCispCmRpZmYgLS1naXQgYS90b3guaW5pIGIvdG94LmluaQotLS0gYS90
b3guaW5pCisrKyBiL3RveC5pbmkKQEAgLTM1LDcgKzM1LDcgQEAgY29tbWFuZHMgPTNEIHNwaGlu
eC1idWlsZCAtYiBodG1sIC1kIHtlbnZ0Cj0yMAogW2ZsYWtlOF0KIG1heC1saW5lLWxlbmd0aCA9
M0QgMTAwCi1leGNsdWRlID0zRCBtaWdyYXRpb24sc2V0dXAucHksdWlwcm9wcy5weSwudG94LGRv
YyxzY3JpcHRzCitleGNsdWRlID0zRCBjdWJpY3dlYl9zYWVtX3JlZi9taWdyYXRpb24sY3ViaWN3
ZWJfc2FlbV9yZWYvdWlwcm9wcy5weSwudG94LD0KZG9jLGN1Ymljd2ViX3NhZW1fcmVmL3Njcmlw
dHMKIGlnbm9yZSA9M0QgVzUwMwo9MjAKIFtweXRlc3RdCg=



More information about the saem-devel mailing list