[PATCH 1/3 v2] Provide SSL/TLS min and max protocol configuration options

Simon Horman <[email protected]> Wed, 11 May 2016 09:50:19 +0900
Newsgroups gmane.mail.perdition.user
Message-ID <0f9b612d6d071301a212.1462927819@Reginn.isobedori.kobe.vergenet.net>
QWxsb3cgY29uZmlndXJhdGlvbiBvZiBhIHJhbmdlIG9mIFNTTCBwcm90b2NvbHMgaW5kZXBlbmRl
bnRseQpmb3IgYWNjZXB0aW5nIGluY29taW5nIGNvbm5lY3Rpb25zIChsaXN0ZW5pbmcpIGFuZCBt
YWtpbmcKb3V0Z29pbmcgY29ubmVjdGlvbnMuCgpUaGUgZGVmYXVsdCBtaW5pbXVtIHZlcnNpb24g
aXMgVExTIHYxLjEgd2hpY2ggaGFzIHRoZSBlZmZlY3Qgb2YKZGlzYWJsaW5nIFNTTCB2MyBhbmQg
ZWFybGllciBieSBkZWZhdWx0LgoKVGhlIG1pbmltdW0gdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUg
b3B0aW9ucyBpcyBTU0wgdjMgYW5kIHRodXMKaXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBT
U0wgdjIuCgpUaGUgZGVmYXVsdCBtYXhpbXVtIHZlcnNpb24gaXMgdG8gdXNlIE9wZW5TU0wncyBk
ZWZhdWx0IHZhbHVlLgoKVGhlIG1heGltdW0gdmVyc2lvbiBhY2NlcHRlZCBieSB0aGUgb3B0aW9u
cyBpcyBUTFMgdjEuMi4KVGhlIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gc3VwcG9y
dCBhbnkgbmV3ZXIgdmVyc2lvbnMKb2YgVExTIGFzIHRoZXkgYmVjb21lIGF2YWlsYWJsZSBpbiBP
cGVuU1NMLgoKQmFzZWQgb24gd29yayBieSBNYXR0aGlhcyBIdW5zdG9jay4KCkNjOiBNYXR0aGlh
cyBIdW5zdG9jayA8bWF0dGhpYXMuaHVuc3RvY2tAdHUtaWxtZW5hdS5kZT4KU2lnbmVkLW9mZi1i
eTogU2ltb24gSG9ybWFuIDxob3Jtc0B2ZXJnZS5uZXQuYXU+Ci0tLQp2MgoqIEFsbG93IG1heCB2
ZXJzaW9uIG9mICIiIHRvIGJlIHNwZWNpZmllZCBhcyBhbiBvcHRpb24sCiAgdHJhbnNsYXRlIHRo
aXMgdG8gTlVMTCB3aGljaCBtZWFucyB0aGF0IE9wZW5TU0wncyBkZWZhdWx0IHdpbGwgYmUgdXNl
ZC4KICAiIiBpcyBub3QgYWxsb3dlZCBmb3IgbWluIHZlcnNpb25zIGFzIHdlIHdpc2ggdG8gZW5m
b3JjZSBhbgogIGFic29sdXRlIG1pbmltdW0gb2YgU1NMdjMuCgpkaWZmIC1yIDY0MjgwNzBiNDg4
OSAtciAwZjliNjEyZDZkMDcgY29uZmlndXJlLmFjCi0tLSBhL2NvbmZpZ3VyZS5hYwlTdW4gRGVj
IDAxIDE3OjI2OjUxIDIwMTMgKzA5MDAKKysrIGIvY29uZmlndXJlLmFjCVdlZCBNYXkgMTEgMDg6
NTc6MjIgMjAxNiArMDkwMApAQCAtMjExLDYgKzIxMSw5IEBACiAKIGlmIHRlc3QgIiRlbmFibGVf
c3NsIiA9ICJ5ZXMiOyB0aGVuCiAgICBBQ19ERUZJTkUoV0lUSF9TU0xfU1VQUE9SVCwgMSwgQ29t
cGlsZSB3aXRoIFNTTC9UTFMgc3VwcG9ydCkKKyAgIEFDX0NIRUNLX0xJQihzc2wsIFNTTF9DVFhf
c2V0X21pbl9wcm90b192ZXJzaW9uKQorICAgQUNfQ0hFQ0tfREVDTFMoW1NTTF9DVFhfc2V0X21p
bl9wcm90b192ZXJzaW9uXSwgW10sIFtdLCBbWyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPl1dKQor
ICAgQUNfQ0hFQ0tfREVDTFMoW1NTTF9DVFhfc2V0X21heF9wcm90b192ZXJzaW9uXSwgW10sIFtd
LCBbWyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPl1dKQogZWxzZQogICBzc2xfbGliPSIiCiAgIHNz
bF9pbmNsdWRlcz0iIgpkaWZmIC1yIDY0MjgwNzBiNDg4OSAtciAwZjliNjEyZDZkMDcgZXRjL3Bl
cmRpdGlvbi9wZXJkaXRpb24uY29uZgotLS0gYS9ldGMvcGVyZGl0aW9uL3BlcmRpdGlvbi5jb25m
CVN1biBEZWMgMDEgMTc6MjY6NTEgMjAxMyArMDkwMAorKysgYi9ldGMvcGVyZGl0aW9uL3BlcmRp
dGlvbi5jb25mCVdlZCBNYXkgMTEgMDg6NTc6MjIgMjAxNiArMDkwMApAQCAtNDAzLDMgKzQwMywz
MCBAQAogIyB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuCiAjc3NsX25vX2NuX3ZlcmlmeQogCisj
IHNzbF9saXN0ZW5fbWluX3Byb3RvX3ZlcnNpb24gUFJPVE9DT0xfVkVSU0lPTjoKKyMgTWluaW11
bSBwZXJtaXRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gd2hlbiBhY2NlcHRpbmcgaW5jb21p
bmcKKyMgY29ubmVjdGlvbnMuCisjIE1heSBub3QgYmUgZW1wdHkgKCIiKS4KKyMgKGRlZmF1bHQg
InRsc3YxIikKKyNzc2xfbGlzdGVuX21pbl9wcm90b192ZXJzaW9uICJ0bHN2MSIKKworIyBzc2xf
b3V0Z29pbmdfbWluX3Byb3RvX3ZlcnNpb24gUFJPVE9DT0xfVkVSU0lPTjoKKyMgTWluaW11bSBw
ZXJtaXRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gd2hlbiBtYWtpbmcgb3V0Z29pbmcKKyMg
Y29ubmVjdGlvbnMuCisjIE1heSBub3QgYmUgZW1wdHkgKCIiKS4KKyMgKGRlZmF1bHQgInRsc3Yx
IikKKyNzc2xfb3V0Z29pbmdfbWluX3Byb3RvX3ZlcnNpb24gInRsc3YxIgorCisjIHNzbF9saXN0
ZW5fbWF4X3Byb3RvX3ZlcnNpb24gUFJPVE9DT0xfVkVSU0lPTjoKKyMgTWF4aW11bSBwZXJtaXRl
ZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gd2hlbiBhY2NlcHRpbmcgaW5jb21heGcKKyMgY29u
bmVjdGlvbnMuCisjIElmIGVtcHR5ICgiIikgdGhlbiBvcGVuc3NsJ3MgZGVmYXVsdCB3aWxsIGJl
IHVzZWQuCisjIChkZWZhdWx0ICIiKQorI3NzbF9saXN0ZW5fbWF4X3Byb3RvX3ZlcnNpb24gInRs
c3YxLjIiCisKKyMgc3NsX291dGdvaW5nX21heF9wcm90b192ZXJzaW9uIFBST1RPQ09MX1ZFUlNJ
T046CisjIE1heGltdW0gcGVybWl0ZWQgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uIHdoZW4gbWFr
aW5nIG91dGdvaW5nCisjIGNvbm5lY3Rpb25zLgorIyBJZiBlbXB0eSAoIiIpIHRoZW4gb3BlbnNz
bCdzIGRlZmF1bHQgd2lsbCBiZSB1c2VkLgorIyAoZGVmYXVsdCAiIikKKyNzc2xfb3V0Z29pbmdf
bWF4X3Byb3RvX3ZlcnNpb24gInRsc3YxLjIiCmRpZmYgLXIgNjQyODA3MGI0ODg5IC1yIDBmOWI2
MTJkNmQwNyBwZXJkaXRpb24vb3B0aW9ucy5jCi0tLSBhL3BlcmRpdGlvbi9vcHRpb25zLmMJU3Vu
IERlYyAwMSAxNzoyNjo1MSAyMDEzICswOTAwCisrKyBiL3BlcmRpdGlvbi9vcHRpb25zLmMJV2Vk
IE1heSAxMSAwODo1NzoyMiAyMDE2ICswOTAwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
b3B0aW9ucy5oIgogI2luY2x1ZGUgImNvbmZpZ19maWxlLmgiCiAjaW5jbHVkZSAicGVyZGl0aW9u
X2dsb2JhbHMuaCIKKyNpbmNsdWRlICJzc2wuaCIKIAogI2lmZGVmIERNQUxMT0MKICNpbmNsdWRl
IDxkbWFsbG9jLmg+CkBAIC00ODgsNiArNDg5LDE0IEBACiAgICAgICBUQUdfU1NMX1BBU1NQSFJB
U0VfRkQsIE5VTEwsIE5VTEx9LAogICAgIHsic3NsX3Bhc3NwaHJhc2VfZmlsZSIsICAgICAgICAg
J1wwJywgUE9QVF9BUkdfU1RSSU5HLCBOVUxMLAogICAgICAgVEFHX1NTTF9QQVNTUEhSQVNFX0ZJ
TEUsIE5VTEwsIE5VTEx9LAorICAgIHsic3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVyc2lvbiIsICdc
MCcsIFBPUFRfQVJHX1NUUklORywgTlVMTCwKKyAgICAgIFRBR19TU0xfTElTVEVOX01JTl9QUk9U
T19WRVJTSU9OLCBOVUxMLCBOVUxMfSwKKyAgICB7InNzbF9vdXRnb2luZ19taW5fcHJvdG9fdmVy
c2lvbiIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgTlVMTCwKKyAgICAgIFRBR19TU0xfT1VUR09J
TkdfTUlOX1BST1RPX1ZFUlNJT04sIE5VTEwsIE5VTEx9LAorICAgIHsic3NsX2xpc3Rlbl9tYXhf
cHJvdG9fdmVyc2lvbiIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgTlVMTCwKKyAgICAgIFRBR19T
U0xfTElTVEVOX01BWF9QUk9UT19WRVJTSU9OLCBOVUxMLCBOVUxMfSwKKyAgICB7InNzbF9vdXRn
b2luZ19tYXhfcHJvdG9fdmVyc2lvbiIsICdcMCcsIFBPUFRfQVJHX1NUUklORywgTlVMTCwKKyAg
ICAgIFRBR19TU0xfT1VUR09JTkdfTUFYX1BST1RPX1ZFUlNJT04sIE5VTEwsIE5VTEx9LAogICAg
IHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAgICAgICAgICAgICBO
VUxMLAogICAgICAwLCBOVUxMLCBOVUxMfQogICB9OwpAQCAtNjE4LDYgKzYyNywxNCBAQAogCQkg
ICAgJmksIDAsIE9QVF9OT1RfU0VUKTsKICAgICBvcHRfcCgmKG9wdC5zc2xfcGFzc3BocmFzZV9m
aWxlKSxERUZBVUxUX1NTTF9QQVNTUEhSQVNFX0ZJTEUsCiAJCSAgICAmaSwgMCwgT1BUX05PVF9T
RVQpOworICAgIG9wdF9wKCYob3B0LnNzbF9saXN0ZW5fbWluX3Byb3RvX3ZlcnNpb24pLAorCSAg
REVGQVVMVF9TU0xfTElTVEVOX01JTl9QUk9UT19WRVJTSU9OLCAmaSwgMCwgT1BUX05PVF9TRVQp
OworICAgIG9wdF9wKCYob3B0LnNzbF9vdXRnb2luZ19taW5fcHJvdG9fdmVyc2lvbiksCisJICBE
RUZBVUxUX1NTTF9PVVRHT0lOR19NSU5fUFJPVE9fVkVSU0lPTiwgJmksIDAsIE9QVF9OT1RfU0VU
KTsKKyAgICBvcHRfcCgmKG9wdC5zc2xfbGlzdGVuX21heF9wcm90b192ZXJzaW9uKSwKKwkgIERF
RkFVTFRfU1NMX0xJU1RFTl9NQVhfUFJPVE9fVkVSU0lPTiwgJmksIDAsIE9QVF9OT1RfU0VUKTsK
KyAgICBvcHRfcCgmKG9wdC5zc2xfb3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24pLAorCSAgREVG
QVVMVF9TU0xfT1VUR09JTkdfTUFYX1BST1RPX1ZFUlNJT04sICZpLCAwLCBPUFRfTk9UX1NFVCk7
CiAjZW5kaWYgLyogV0lUSF9TU0xfU1VQUE9SVCAqLwogICB9CiAKQEAgLTEwMTAsNiArMTAyNywz
OCBAQAogCU5PX1NTTF9PUFQoInNzbF9wYXNzcGhyYXNlX2ZpbGUiKTsKICNlbmRpZiAvKiBXSVRI
X1NTTF9TVVBQT1JUICovCiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUQUdfU1NMX0xJU1RF
Tl9NSU5fUFJPVE9fVkVSU0lPTjoKKyNpZmRlZiBXSVRIX1NTTF9TVVBQT1JUCisgICAgICAgIG9w
dF9wKCYob3B0LnNzbF9saXN0ZW5fbWluX3Byb3RvX3ZlcnNpb24pLCBvcHRhcmcsICYob3B0LnNz
bF9tYXNrKSwKKwkJCU1BU0tfU1NMX0xJU1RFTl9NSU5fUFJPVE9fVkVSU0lPTiwgZik7CisjZWxz
ZSAvKiBXSVRIX1NTTF9TVVBQT1JUICovCisJTk9fU1NMX09QVCgic3NsX2xpc3Rlbl9taW5fcHJv
dG9fdmVyc2lvbiIpOworI2VuZGlmIC8qIFdJVEhfU1NMX1NVUFBPUlQgKi8KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIFRBR19TU0xfT1VUR09JTkdfTUlOX1BST1RPX1ZFUlNJT046CisjaWZk
ZWYgV0lUSF9TU0xfU1VQUE9SVAorICAgICAgICBvcHRfcCgmKG9wdC5zc2xfb3V0Z29pbmdfbWlu
X3Byb3RvX3ZlcnNpb24pLCBvcHRhcmcsICYob3B0LnNzbF9tYXNrKSwKKwkJCU1BU0tfU1NMX09V
VEdPSU5HX01JTl9QUk9UT19WRVJTSU9OLCBmKTsKKyNlbHNlIC8qIFdJVEhfU1NMX1NVUFBPUlQg
Ki8KKwlOT19TU0xfT1BUKCJzc2xfb3V0Z29pbmdfbWluX3Byb3RvX3ZlcnNpb24iKTsKKyNlbmRp
ZiAvKiBXSVRIX1NTTF9TVVBQT1JUICovCisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUQUdf
U1NMX0xJU1RFTl9NQVhfUFJPVE9fVkVSU0lPTjoKKyNpZmRlZiBXSVRIX1NTTF9TVVBQT1JUCisg
ICAgICAgIG9wdF9wKCYob3B0LnNzbF9saXN0ZW5fbWF4X3Byb3RvX3ZlcnNpb24pLCBvcHRhcmcs
ICYob3B0LnNzbF9tYXNrKSwKKwkJCU1BU0tfU1NMX0xJU1RFTl9NQVhfUFJPVE9fVkVSU0lPTiwg
Zik7CisjZWxzZSAvKiBXSVRIX1NTTF9TVVBQT1JUICovCisJTk9fU1NMX09QVCgic3NsX2xpc3Rl
bl9tYXhfcHJvdG9fdmVyc2lvbiIpOworI2VuZGlmIC8qIFdJVEhfU1NMX1NVUFBPUlQgKi8KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIFRBR19TU0xfT1VUR09JTkdfTUFYX1BST1RPX1ZFUlNJ
T046CisjaWZkZWYgV0lUSF9TU0xfU1VQUE9SVAorICAgICAgICBvcHRfcCgmKG9wdC5zc2xfb3V0
Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24pLCBvcHRhcmcsICYob3B0LnNzbF9tYXNrKSwKKwkJCU1B
U0tfU1NMX09VVEdPSU5HX01BWF9QUk9UT19WRVJTSU9OLCBmKTsKKyNlbHNlIC8qIFdJVEhfU1NM
X1NVUFBPUlQgKi8KKwlOT19TU0xfT1BUKCJzc2xfb3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24i
KTsKKyNlbmRpZiAvKiBXSVRIX1NTTF9TVVBQT1JUICovCisgICAgICAgIGJyZWFrOwogICAgICAg
ZGVmYXVsdDoKICAgICAgICAgVkFORVNTQV9MT0dHRVJfREVCVUdfUkFXKCJVbmtub3duIE9wdGlv
biIpOwogICAgICAgICBicmVhazsKQEAgLTEwMjksNiArMTA3OCwxMjggQEAKICAgICB9CiAgIH0K
IAorICB7CisJaW50IG1pbl92ZXIgPSAwOworCWludCBtYXhfdmVyID0gMDsKKworCWlmIChvcHQu
c3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVyc2lvbikgeworCQlWQU5FU1NBX0xPR0dFUl9ERUJVR19S
QVcoIm1pbiIpOworCQltaW5fdmVyID0gcGVyZGl0aW9uX3BhcnNlX3NzbF9wcm90b192ZXJzaW9u
KAorCQkJCW9wdC5zc2xfbGlzdGVuX21pbl9wcm90b192ZXJzaW9uKTsKKwkJaWYgKG1pbl92ZXIg
PCAwKSB7CisJCQlWQU5FU1NBX0xPR0dFUl9ERUJVR19SQVcoIlVua25vd24gc3NsX2xpc3Rlbl9t
aW5fcHJvdG9fdmVyc2lvbiIpOworCQkJaWYgKGYgJiBPUFRfRVJSKSB7CisJCQkJdXNhZ2UoLTEp
OworCQkJfSBlbHNlIHsKKwkJCQlwb3B0RnJlZUNvbnRleHQoY29udGV4dCk7CisJCQkJcmV0dXJu
IC0xOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcmFuc2xhdGUgZW1wdHkgbWF4IHByb3Rv
IHZlcnNpb24gdG8gTlVMTCB3aGljaCByZXN1bHRzIGluCisJICogT3BlblNTTCdzIGRlZmF1bHRz
IGJlaW5nIHVzZWQuCisJICogVGhpcyBkaWZmZXJzIGZyb20gbWluIHByb3RvIHZlcnNpb24gaGFu
ZGxpbmcgd2hlcmUgIiIgaXMKKwkgKiBub3QgdHJhbnNsYXRlZCBhbmQgcmVqZWN0ZWQgYnkKKwkg
KiBwZXJkaXRpb25fcGFyc2Vfc3NsX3Byb3RvX3ZlcnNpb24oKSBzbyB0aGF0IGEgbWluaW11bSBw
cm90b2NvbAorCSAqIHZlcnNpb24gb2YgYXQgbGVhc3QgU1NMdjMgaXMgZW5mb3JjZWQuCisJICov
CisJaWYgKG9wdC5zc2xfbGlzdGVuX21heF9wcm90b192ZXJzaW9uICYmCisJICAgICpvcHQuc3Ns
X2xpc3Rlbl9tYXhfcHJvdG9fdmVyc2lvbiA9PSAnXDAnKSB7CisJCWZyZWUob3B0LnNzbF9saXN0
ZW5fbWF4X3Byb3RvX3ZlcnNpb24pOworCQlvcHQuc3NsX2xpc3Rlbl9tYXhfcHJvdG9fdmVyc2lv
biA9IE5VTEw7CisJfQorCisJaWYgKG9wdC5zc2xfbGlzdGVuX21heF9wcm90b192ZXJzaW9uKSB7
CisJCW1heF92ZXIgPSBwZXJkaXRpb25fcGFyc2Vfc3NsX3Byb3RvX3ZlcnNpb24oCisJCQkJb3B0
LnNzbF9saXN0ZW5fbWF4X3Byb3RvX3ZlcnNpb24pOworCQlpZiAobWF4X3ZlciA8IDApIHsKKwkJ
CVZBTkVTU0FfTE9HR0VSX0RFQlVHX1JBVygiVW5rbm93biBzc2xfbGlzdGVuX21heF9wcm90b192
ZXJzaW9uIik7CisJCQlpZiAoZiAmIE9QVF9FUlIpIHsKKwkJCQl1c2FnZSgtMSk7CisJCQl9IGVs
c2UgeworCQkJCXBvcHRGcmVlQ29udGV4dChjb250ZXh0KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9
CisJCX0KKwl9CisKKwlpZiAob3B0LnNzbF9saXN0ZW5fbWluX3Byb3RvX3ZlcnNpb24gJiYKKwkg
ICAgb3B0LnNzbF9saXN0ZW5fbWF4X3Byb3RvX3ZlcnNpb24gJiYgbWluX3ZlciA+IG1heF92ZXIp
IHsKKwkJVkFORVNTQV9MT0dHRVJfREVCVUdfUkFXKCJzc2xfbGlzdGVuX21pbl9wcm90b192ZXJz
aW9uIGlzICIKKwkJCQkJICJncmVhdGVyIHRoYW4gIgorCQkJCQkgInNzbF9saXN0ZW5fbWF4X3By
b3RvX3ZlcnNpb24iKTsKKwkJaWYgKGYmT1BUX0VSUikgeworCQkJdXNhZ2UoLTEpOworCQl9IGVs
c2UgeworCQkJcG9wdEZyZWVDb250ZXh0KGNvbnRleHQpOworCQkJcmV0dXJuIC0xOworCQl9CisJ
fQorCisgIH0KKworICB7CisJaW50IG1pbl92ZXIgPSAwOworCWludCBtYXhfdmVyID0gMDsKKwor
CWlmIChvcHQuc3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVyc2lvbikgeworCQltaW5fdmVyID0gcGVy
ZGl0aW9uX3BhcnNlX3NzbF9wcm90b192ZXJzaW9uKAorCQkJCW9wdC5zc2xfbGlzdGVuX21pbl9w
cm90b192ZXJzaW9uKTsKKwkJaWYgKG1pbl92ZXIgPCAwKSB7CisJCQlWQU5FU1NBX0xPR0dFUl9E
RUJVR19SQVcoIlVua25vd24gc3NsX291dGdvaW5nX21pbl9wcm90b192ZXJzaW9uIik7CisJCQlp
ZiAoZiAmIE9QVF9FUlIpIHsKKwkJCQl1c2FnZSgtMSk7CisJCQl9IGVsc2UgeworCQkJCXBvcHRG
cmVlQ29udGV4dChjb250ZXh0KTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwl9CisKKwkv
KgorCSAqIFRyYW5zbGF0ZSBlbXB0eSBtYXggcHJvdG8gdmVyc2lvbiB0byBOVUxMIHdoaWNoIHJl
c3VsdHMgaW4KKwkgKiBPcGVuU1NMJ3MgZGVmYXVsdHMgYmVpbmcgdXNlZC4KKwkgKiBUaGlzIGRp
ZmZlcnMgZnJvbSBtaW4gcHJvdG8gdmVyc2lvbiBoYW5kbGluZyB3aGVyZSAiIiBpcworCSAqIG5v
dCB0cmFuc2xhdGVkIGFuZCByZWplY3RlZCBieQorCSAqIHBlcmRpdGlvbl9wYXJzZV9zc2xfcHJv
dG9fdmVyc2lvbigpIHNvIHRoYXQgYSBtaW5pbXVtIHByb3RvY29sCisJICogdmVyc2lvbiBvZiBh
dCBsZWFzdCBTU0x2MyBpcyBlbmZvcmNlZC4KKwkgKi8KKwlpZiAob3B0LnNzbF9vdXRnb2luZ19t
YXhfcHJvdG9fdmVyc2lvbiAmJgorCSAgICAqb3B0LnNzbF9vdXRnb2luZ19tYXhfcHJvdG9fdmVy
c2lvbiA9PSAnXDAnKSB7CisJCWZyZWUob3B0LnNzbF9vdXRnb2luZ19tYXhfcHJvdG9fdmVyc2lv
bik7CisJCW9wdC5zc2xfb3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24gPSBOVUxMOworCX0KKwor
CWlmIChvcHQuc3NsX291dGdvaW5nX21heF9wcm90b192ZXJzaW9uKSB7CisJCW1heF92ZXIgPSBw
ZXJkaXRpb25fcGFyc2Vfc3NsX3Byb3RvX3ZlcnNpb24oCisJCQkJb3B0LnNzbF9vdXRnb2luZ19t
YXhfcHJvdG9fdmVyc2lvbik7CisJCWlmIChtYXhfdmVyIDwgMCkgeworCQkJVkFORVNTQV9MT0dH
RVJfREVCVUdfUkFXKCJVbmtub3duIHNzbF9vdXRnb2luZ19tYXhfcHJvdG9fdmVyc2lvbiIpOwor
CQkJaWYgKGYgJiBPUFRfRVJSKSB7CisJCQkJdXNhZ2UoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlw
b3B0RnJlZUNvbnRleHQoY29udGV4dCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQor
CisJaWYgKG9wdC5zc2xfbGlzdGVuX21pbl9wcm90b192ZXJzaW9uICYmCisJICAgIG9wdC5zc2xf
b3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24gJiYgbWluX3ZlciA+IG1heF92ZXIpIHsKKwkJVkFO
RVNTQV9MT0dHRVJfREVCVUdfUkFXKCJzc2xfb3V0Z29pbmdfbWluX3Byb3RvX3ZlcnNpb24gaXMg
IgorCQkJCQkgImdyZWF0ZXIgdGhhbiAiCisJCQkJCSAic3NsX291dGdvaW5nX21heF9wcm90b192
ZXJzaW9uIik7CisJCWlmIChmICYgT1BUX0VSUikgeworCQkJdXNhZ2UoLTEpOworCQl9IGVsc2Ug
eworCQkJcG9wdEZyZWVDb250ZXh0KGNvbnRleHQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQor
ICB9CisKICAgaWYgKGMgPCAtMSkgewogICAgIFZBTkVTU0FfTE9HR0VSX0RFQlVHX1VOU0FGRSgg
IiVzOiAlcyIsCiAgICAgICBwb3B0QmFkT3B0aW9uKGNvbnRleHQsIFBPUFRfQkFET1BUSU9OX05P
QUxJQVMpLCBwb3B0U3RyZXJyb3IoYykpOwpAQCAtMTQwMCw2ICsxNTcxLDEwIEBACiAJCSAic3Ns
X25vX2NuX3ZlcmlmeT1cIiVzXCIgIgogCQkgInNzbF9wYXNzcGhyYXNlX2ZkPSVkLCAiCiAJCSAi
c3NsX3Bhc3NwaHJhc2VfZmlsZT1cIiVzXCIsICIKKwkJICJzc2xfbGlzdGVuX21pbl9wcm90b192
ZXJzaW9uPVwiJXNcIiwgIgorCQkgInNzbF9vdXRnb2luZ19taW5fcHJvdG9fdmVyc2lvbj1cIiVz
XCIsICIKKwkJICJzc2xfbGlzdGVuX21heF9wcm90b192ZXJzaW9uPVwiJXNcIiwgIgorCQkgInNz
bF9vdXRnb2luZ19tYXhfcHJvdG9fdmVyc2lvbj1cIiVzXCIsICIKIAkJICIoc3NsX21hc2s9MHgl
MDh4KSAiLAogCQkgc3NsX21vZGUsCiAJCSBPUFRfU1RSKG9wdC5zc2xfY2FfZmlsZSksCkBAIC0x
NDE4LDYgKzE1OTMsMTAgQEAKIAkJIEJJTl9PUFRfU1RSKG9wdC5zc2xfbm9fY25fdmVyaWZ5KSwK
IAkJIG9wdC5zc2xfcGFzc3BocmFzZV9mZCwKIAkJIE9QVF9TVFIob3B0LnNzbF9wYXNzcGhyYXNl
X2ZpbGUpLAorCQkgT1BUX1NUUihvcHQuc3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVyc2lvbiksCisJ
CSBPUFRfU1RSKG9wdC5zc2xfb3V0Z29pbmdfbWluX3Byb3RvX3ZlcnNpb24pLAorCQkgT1BUX1NU
UihvcHQuc3NsX2xpc3Rlbl9tYXhfcHJvdG9fdmVyc2lvbiksCisJCSBPUFRfU1RSKG9wdC5zc2xf
b3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb24pLAogCQkgb3B0LnNzbF9tYXNrKTsKIAlvdXRbTUFY
X0xJTkVfTEVOR1RIIC0gMV0gPSAnXDAnOwogCkBAIC0xNzE2LDYgKzE4OTUsMjYgQEAKICAgICAi
IC0tc3NsX3Bhc3NwaHJhc2VfZmlsZSBGSUxFTkFNRTpcbiIKICAgICAiICAgIEZpbGUgZnJvbSB3
aXRoIHRoZSBwYXNzcGhyYXNlIGZvciB0aGUgY2VydGlmaWNhdGUgaXMgcmVhZC5cbiIKICAgICAi
ICAgIChkZWZhdWx0IFwiJXNcIilcbiIKKyAgICAiIC0tc3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVy
c2lvbiBQUk9UT0NPTF9WRVJTSU9OOlxuIgorICAgICIgICAgTWluaW11bSBwZXJtaXRlZCBTU0wv
VExTIHByb3RvY29sIHZlcnNpb24gd2hlbiBhY2NlcHRpbmcgaW5jb21taW5nXG4iCisgICAgIiAg
ICBjb25uZWN0aW9ucy5cbiIKKyAgICAiICAgIE1heSBub3QgYmUgZW1wdHkgKFwiXCIpLlxuIgor
ICAgICIgICAgKGRlZmF1bHQgXCIlc1wiKVxuIgorICAgICIgLS1zc2xfb3V0Z29pbmdfbWluX3By
b3RvX3ZlcnNpb24gUFJPVE9DT0xfVkVSU0lPTjpcbiIKKyAgICAiICAgIE1pbmltdW0gcGVybWl0
ZWQgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uIHdoZW4gbWFraW5nIG91dGdvaW5nXG4iCisgICAg
IiAgICBjb25uZWN0aW9ucy5cbiIKKyAgICAiICAgIE1heSBub3QgYmUgZW1wdHkgKFwiXCIpLlxu
IgorICAgICIgICAgKGRlZmF1bHQgXCIlc1wiKVxuIgorICAgICIgLS1zc2xfbGlzdGVuX21heF9w
cm90b192ZXJzaW9uIFBST1RPQ09MX1ZFUlNJT046XG4iCisgICAgIiAgICBNYXhpbXVtIHBlcm1p
dGVkIFNTTC9UTFMgcHJvdG9jb2wgdmVyc2lvbiB3aGVuIGFjY2VwdGluZyBpbmNvbWluZ1xuIgor
ICAgICIgICAgY29ubmVjdGlvbnMuXG4iCisgICAgIiAgICBJZiBlbXB0eSAoXCJcIikgdGhlbiBv
cGVuc3NsJ3MgZGVmYXVsdCB3aWxsIGJlIHVzZWQuXG4iCisgICAgIiAgICAoZGVmYXVsdCBcIiVz
XCIpXG4iCisgICAgIiAtLXNzbF9vdXRnb2luZ19tYXhfcHJvdG9fdmVyc2lvbiBQUk9UT0NPTF9W
RVJTSU9OOlxuIgorICAgICIgICAgTWF4aW11bSBwZXJtaXRlZCBTU0wvVExTIHByb3RvY29sIHZl
cnNpb24gd2hlbiBtYWtpbmcgb3V0Z29pbmdcbiIKKyAgICAiICAgIGNvbm5lY3Rpb25zLlxuIgor
ICAgICIgICAgSWYgZW1wdHkgKFwiXCIpIHRoZW4gb3BlbnNzbCdzIGRlZmF1bHQgd2lsbCBiZSB1
c2VkLlxuIgorICAgICIgICAgKGRlZmF1bHQgXCIlc1wiKVxuIgogI2VuZGlmIC8qIFdJVEhfU1NM
X1NVUFBPUlQgKi8KICAgICAiXG4iCiAgICAgIiBOb3RlczogRGVmYXVsdCB2YWx1ZSBmb3IgYmlu
YXJ5IGZsYWdzIGlzIG9mZi5cbiIKQEAgLTE3NjAsNyArMTk1OSwxMSBAQAogICAgIE9QVF9TVFIo
REVGQVVMVF9TU0xfTElTVEVOX0NJUEhFUlMpLAogICAgIE9QVF9TVFIoREVGQVVMVF9TU0xfT1VU
R09JTkdfQ0lQSEVSUyksCiAgICAgREVGQVVMVF9TU0xfUEFTU1BIUkFTRV9GRCwKLSAgICBPUFRf
U1RSKERFRkFVTFRfU1NMX1BBU1NQSFJBU0VfRklMRSkKKyAgICBPUFRfU1RSKERFRkFVTFRfU1NM
X1BBU1NQSFJBU0VfRklMRSksCisgICAgT1BUX1NUUihERUZBVUxUX1NTTF9MSVNURU5fTUlOX1BS
T1RPX1ZFUlNJT04pLAorICAgIE9QVF9TVFIoREVGQVVMVF9TU0xfT1VUR09JTkdfTUlOX1BST1RP
X1ZFUlNJT04pLAorICAgIE9QVF9TVFIoREVGQVVMVF9TU0xfTElTVEVOX01BWF9QUk9UT19WRVJT
SU9OKSwKKyAgICBPUFRfU1RSKERFRkFVTFRfU1NMX09VVEdPSU5HX01BWF9QUk9UT19WRVJTSU9O
KQogI2VuZGlmIC8qIFdJVEhfU1NMX1NVUFBPUlQgKi8KICAgKTsKIApkaWZmIC1yIDY0MjgwNzBi
NDg4OSAtciAwZjliNjEyZDZkMDcgcGVyZGl0aW9uL29wdGlvbnMuaAotLS0gYS9wZXJkaXRpb24v
b3B0aW9ucy5oCVN1biBEZWMgMDEgMTc6MjY6NTEgMjAxMyArMDkwMAorKysgYi9wZXJkaXRpb24v
b3B0aW9ucy5oCVdlZCBNYXkgMTEgMDg6NTc6MjIgMjAxNiArMDkwMApAQCAtMTgxLDYgKzE4MSwx
MCBAQAogI2RlZmluZSBERUZBVUxUX1NTTF9OT19DTl9WRVJJRlkgICAgICAgICAgICAgMAogI2Rl
ZmluZSBERUZBVUxUX1NTTF9QQVNTUEhSQVNFX0ZEICAgICAgICAgICAgMAogI2RlZmluZSBERUZB
VUxUX1NTTF9QQVNTUEhSQVNFX0ZJTEUgICAgICAgICAgTlVMTAorI2RlZmluZSBERUZBVUxUX1NT
TF9MSVNURU5fTUlOX1BST1RPX1ZFUlNJT04gInRsc3YxIgorI2RlZmluZSBERUZBVUxUX1NTTF9P
VVRHT0lOR19NSU5fUFJPVE9fVkVSU0lPTiAidGxzdjEiCisjZGVmaW5lIERFRkFVTFRfU1NMX0xJ
U1RFTl9NQVhfUFJPVE9fVkVSU0lPTiBOVUxMCisjZGVmaW5lIERFRkFVTFRfU1NMX09VVEdPSU5H
X01BWF9QUk9UT19WRVJTSU9OIE5VTEwKICNlbmRpZiAvKiBXSVRIX1NTTF9TVVBQT1JUICovCiAK
IApAQCAtMjQ5LDYgKzI1MywxMCBAQAogICBpbnQgICAgICAgICAgICAgc3NsX25vX2NuX3Zlcmlm
eTsKICAgaW50ICAgICAgICAgICAgIHNzbF9wYXNzcGhyYXNlX2ZkOwogICBjaGFyICAgICAgICAg
ICAgKnNzbF9wYXNzcGhyYXNlX2ZpbGU7CisgIGNoYXIgICAgICAgICAgICAqc3NsX2xpc3Rlbl9t
aW5fcHJvdG9fdmVyc2lvbjsKKyAgY2hhciAgICAgICAgICAgICpzc2xfb3V0Z29pbmdfbWluX3By
b3RvX3ZlcnNpb247CisgIGNoYXIgICAgICAgICAgICAqc3NsX2xpc3Rlbl9tYXhfcHJvdG9fdmVy
c2lvbjsKKyAgY2hhciAgICAgICAgICAgICpzc2xfb3V0Z29pbmdfbWF4X3Byb3RvX3ZlcnNpb247
CiAgIGZsYWdfdCAgICAgICAgICBzc2xfbWFzazsKIH0gb3B0aW9uc190OwogCkBAIC0zMTcsNiAr
MzI1LDEwIEBACiAjZGVmaW5lIE1BU0tfU1NMX05PX0NOX1ZFUklGWSAgICAgICAgICAgICAgICAg
IChmbGFnX3QpIDB4MDAwMDQwMDAKICNkZWZpbmUgTUFTS19TU0xfUEFTU1BIUkFTRV9GRCAgICAg
ICAgICAgICAgICAgKGZsYWdfdCkgMHgwMDAwODAwMAogI2RlZmluZSBNQVNLX1NTTF9QQVNTUEhS
QVNFX0ZJTEUgICAgICAgICAgICAgICAoZmxhZ190KSAweDAwMDEwMDAwCisjZGVmaW5lIE1BU0tf
U1NMX0xJU1RFTl9NSU5fUFJPVE9fVkVSU0lPTiAgICAgIChmbGFnX3QpIDB4MDAwMjAwMDAKKyNk
ZWZpbmUgTUFTS19TU0xfT1VUR09JTkdfTUlOX1BST1RPX1ZFUlNJT04gICAgKGZsYWdfdCkgMHgw
MDA0MDAwMAorI2RlZmluZSBNQVNLX1NTTF9MSVNURU5fTUFYX1BST1RPX1ZFUlNJT04gICAgICAo
ZmxhZ190KSAweDAwMDgwMDAwCisjZGVmaW5lIE1BU0tfU1NMX09VVEdPSU5HX01BWF9QUk9UT19W
RVJTSU9OICAgIChmbGFnX3QpIDB4MDAxMDAwMDAKICNlbmRpZiAvKiBXSVRIX1NTTF9TVVBQT1JU
ICovCiAKIC8qIApAQCAtMzU1LDYgKzM2NywxMCBAQAogI2RlZmluZSBUQUdfTUFOQUdFU0lFVkVf
Q0FQQUJJTElUWSAgICAgICAgICAgICAoaW50KSAxNTUKICNkZWZpbmUgVEFHX1BPUF9DQVBBQklM
SVRZICAgICAgICAgICAgICAgICAgICAgKGludCkgMTU2CiAjZGVmaW5lIFRBR19UQ1BfS0VFUEFM
SVZFICAgICAgICAgICAgICAgICAgICAgIChpbnQpIDE1NworI2RlZmluZSBUQUdfU1NMX0xJU1RF
Tl9NSU5fUFJPVE9fVkVSU0lPTiAgICAgICAoaW50KSAxNTgKKyNkZWZpbmUgVEFHX1NTTF9PVVRH
T0lOR19NSU5fUFJPVE9fVkVSU0lPTiAgICAgKGludCkgMTU5CisjZGVmaW5lIFRBR19TU0xfTElT
VEVOX01BWF9QUk9UT19WRVJTSU9OICAgICAgIChpbnQpIDE2MAorI2RlZmluZSBUQUdfU1NMX09V
VEdPSU5HX01BWF9QUk9UT19WRVJTSU9OICAgICAoaW50KSAxNjEKIAogLypGbGFnIHZhbHVlcyBm
b3Igb3B0aW9ucygpKi8KICNkZWZpbmUgT1BUX0VSUiAgICAgICAgIChmbGFnX3QpIDB4MSAgLypQ
cmludCBlcnJvciB0byBzdGRlcnIsIGVuYWJsZSBoZWxwKi8KZGlmZiAtciA2NDI4MDcwYjQ4ODkg
LXIgMGY5YjYxMmQ2ZDA3IHBlcmRpdGlvbi9wZXJkaXRpb24uOAotLS0gYS9wZXJkaXRpb24vcGVy
ZGl0aW9uLjgJU3VuIERlYyAwMSAxNzoyNjo1MSAyMDEzICswOTAwCisrKyBiL3BlcmRpdGlvbi9w
ZXJkaXRpb24uOAlXZWQgTWF5IDExIDA4OjU3OjIyIDIwMTYgKzA5MDAKQEAgLTYzNSw2ICs2MzUs
NjkgQEAKIGJlIHNwZWNpZmllZC4KIChkZWZhdWx0IE5VTEwsIG5vIGZpbGUpCiAuVFAKKy5CIFwt
XC1zc2xfbGlzdGVuX2NpcGhlcnMgU1RSSU5HOgorQ2lwaGVyIGxpc3Qgd2hlbiBsaXN0ZW5pbmcg
Zm9yIFNTTCBvciBUTFMgY29ubmVjdGlvbnMgYXMgcGVyCitjaXBoZXJzKDEpLiBJZiBlbXB0eSAo
IiIpIHRoZW4gb3BlbnNzbCdzIGRlZmF1bHQgd2lsbCBiZSB1c2VkLgorLmJyCisoZGVmYXVsdCAi
IikKKy5UUAorLkIgXC1cLXNzbF9vdXRnb2luZ19jaXBoZXJzIFNUUklORzoKK0NpcGhlciBsaXN0
IHdoZW4gbWFraW5nIG91dGdvaW5nIFNTTCBvciBUTFMgY29ubmVjdGlvbnMgYXMgcGVyIAorY2lw
aGVycygxKS4gSWYgZW1wdHkgKCIiKSB0aGVuIG9wZW5zc2wncyBkZWZhdWx0IHdpbGwgYmUgdXNl
ZC4KKy5icgorKGRlZmF1bHQgIiIpCisuVFAKKy5CIFwtXC1zc2xfbm9fY2VydF92ZXJpZnk6CitE
b24ndCBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlcy4KK1VzZWQgZm9y
IFNTTCBvciBUTFMgb3V0Z29pbmcgY29ubmVjdGlvbnMuCisuVFAKKy5CIFwtXC1zc2xfbm9fY2xp
ZW50X2NlcnRfdmVyaWZ5OgorRG9uJ3QgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZ5IHRoZSBlbmQt
dXNlcidzIGNlcnRpZmljYXRlLgorVXNlZCBmb3IgU1NMIG9yIFRMUyBvdXRnb2luZyBjb25uZWN0
aW9ucy4KKy5UUAorLkIgXC1cLXNzbF9ub19jbl92ZXJpZnk6CitEb24ndCB2ZXJpZnkgdGhlIHJl
YWwtc2VydmVyJ3MgY29tbW9uIG5hbWUgd2l0aCB0aGUgbmFtZSB1c2VkLgordG8gY29ubmVjdCB0
byB0aGUgc2VydmVyLiBVc2VkIGZvciBTU0wgb3IgVExTIG91dGdvaW5nIGNvbm5lY3Rpb25zLgor
LlRQCisuQiBcLVwtc3NsX3Bhc3NwaHJhc2VfZmQgTjoKK0ZpbGUgZGVzY3JpcHRvciB0byByZWFk
IHRoZSBwYXNzcGhyYXNlIGZvciB0aGUgY2VydGlmaWNhdGUgZnJvbS4KK09ubHkgdGhlIGZpcnN0
IGxpbmUgd2lsbCBiZSByZWFkLgorT25seSBvbmUgb2Ygc3NsX3Bhc3NwaHJhc2VfZmQgYW5kIHNz
bF9wYXNzcGhyYXNlX2ZpbGUgbWF5CitiZSBzcGVjaWZpZWQuCisoZGVmYXVsdCAwKQorLlRQCisu
QiBcLVwtc3NsX2xpc3Rlbl9taW5fcHJvdG9fdmVyc2lvbiBQUk9UT0NPTF9WRVJTSU9OUzoKK01p
bmltdW0gcGVybWl0ZWQgU1NML1RMUyBwcm90b2NvbCB2ZXJzaW9uIHdoZW4gYWNjZXB0aW5nIGlu
Y29tbWluZworY29ubmVjdGlvbnMuIE1heSBub3QgYmUgZW1wdHkgKCIiKS4KKy5zcAorVGhlIHZh
bGlkIHByb3RvY29sIHZlcnNpb25zIGFyZSBzc2x2MywgdGxzdjEsIHRsc3YxLjEgYW5kIHRsc3Yx
LjIuCisuc3AKKyhkZWZhdWx0ICJ0bHN2MSIpCisuVFAKKy5CIFwtXC1zc2xfb3V0Z29pbmdfbWlu
X3Byb3RvX3ZlcnNpb24gUFJPVE9DT0xfVkVSU0lPTlM6CitNaW5pbXVtIHBlcm1pdGVkIFNTTC9U
TFMgcHJvdG9jb2wgdmVyc2lvbiB3aGVuIG1ha2luZyBvdXRnb2luZworY29ubmVjdGlvbnMuIE1h
eSBub3QgYmUgZW1wdHkgKCIiKS4KKy5zcAorVGhlIHZhbGlkIHByb3RvY29sIHZlcnNpb25zIGFy
ZSBzc2x2MywgdGxzdjEsIHRsc3YxLjEgYW5kIHRsc3YxLjIuCisuc3AKKyhkZWZhdWx0ICJ0bHN2
MSIpCisuVFAKKy5CIFwtXC1zc2xfbGlzdGVuX21heF9wcm90b192ZXJzaW9uIFBST1RPQ09MX1ZF
UlNJT05TOgorTWF4aW11bSBwZXJtaXRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gd2hlbiBh
Y2NlcHRpbmcgaW5jb21tYXhnCitjb25uZWN0aW9ucy4gSWYgZW1wdHkgKCIiKSB0aGVuIG9wZW5z
c2wncyBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KKy5zcAorVGhlIHZhbGlkIHByb3RvY29sIHZlcnNp
b25zIGFyZSBzc2x2MywgdGxzdjEsIHRsc3YxLjEgYW5kIHRsc3YxLjIuCisuc3AKKyhkZWZhdWx0
ICIiKQorLlRQCisuQiBcLVwtc3NsX291dGdvaW5nX21heF9wcm90b192ZXJzaW9uIFBST1RPQ09M
X1ZFUlNJT05TOgorTWF4aW11bSBwZXJtaXRlZCBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gd2hl
biBtYWtpbmcgb3V0Z29pbmcKK2Nvbm5lY3Rpb25zLiBJZiBlbXB0eSAoIiIpIHRoZW4gb3BlbnNz
bCdzIGRlZmF1bHQgd2lsbCBiZSB1c2VkLgorLnNwCitUaGUgdmFsaWQgcHJvdG9jb2wgdmVyc2lv
bnMgYXJlIHNzbHYzLCB0bHN2MSwgdGxzdjEuMSBhbmQgdGxzdjEuMi4KKy5zcAorKGRlZmF1bHQg
IiIpCisuVFAKIE5vdGVzOiAKIERlZmF1bHQgdmFsdWUgZm9yIGJpbmFyeSBmbGFncyBpcyBvZmYu
CiAuYnIKZGlmZiAtciA2NDI4MDcwYjQ4ODkgLXIgMGY5YjYxMmQ2ZDA3IHBlcmRpdGlvbi9zc2wu
YwotLS0gYS9wZXJkaXRpb24vc3NsLmMJU3VuIERlYyAwMSAxNzoyNjo1MSAyMDEzICswOTAwCisr
KyBiL3BlcmRpdGlvbi9zc2wuYwlXZWQgTWF5IDExIDA4OjU3OjIyIDIwMTYgKzA5MDAKQEAgLTEz
OSw2ICsxMzksMjMgQEAKIAlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKK2ludCBwZXJkaXRpb25f
cGFyc2Vfc3NsX3Byb3RvX3ZlcnNpb24oY29uc3QgY2hhciAqc3RyKQoreworCWlmICghc3RyY2Fz
ZWNtcChzdHIsICJzc2x2MyIpKSB7CisJCXJldHVybiBTU0wzX1ZFUlNJT047CisJfQorCWlmICgh
c3RyY2FzZWNtcChzdHIsICJ0bHN2MSIpKSB7CisJCXJldHVybiBUTFMxX1ZFUlNJT047CisJfQor
CWlmICghc3RyY2FzZWNtcChzdHIsICJ0bHN2MS4xIikpIHsKKwkJcmV0dXJuIFRMUzFfMV9WRVJT
SU9OOworCX0KKwlpZiAoIXN0cmNhc2VjbXAoc3RyLCAidGxzdjEuMiIpKSB7CisJCXJldHVybiBU
TFMxXzJfVkVSU0lPTjsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CiAKIC8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAg
KiBwZXJkaXRpb25fc3NsX2N0eApAQCAtNDg2LDYgKzUwMyw3MiBAQAogCXJldHVybih2ZXJpZnkp
OwogfQogCisjaWYgSEFWRV9ERUNMX1NTTF9DVFhfU0VUX01JTl9QUk9UT19WRVJTSU9OID09IDAK
K3N0YXRpYyBpbnQKK3BlcmRpdGlvbl9zc2xfY3R4X3NldF9taW5fcHJvdG9fdmVyc2lvbihTU0xf
Q1RYICpzc2xfY3R4LCBpbnQgbWluX3ZlcnNpb24pCit7CisJbG9uZyBvcHRpb25zID0gU1NMX09Q
X05PX1NTTHYyOworCisJc3dpdGNoIChtaW5fdmVyc2lvbikgeworCWNhc2UgVExTMV8yX1ZFUlNJ
T046CisJCW9wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxXzE7CisJCS8qIGZhbGwtdGhyb3VnaCAq
LworCWNhc2UgVExTMV8xX1ZFUlNJT046CisJCW9wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOwor
CQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFRMUzFfVkVSU0lPTjoKKwkJb3B0aW9ucyB8PSBT
U0xfT1BfTk9fU1NMdjM7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgU1NMM19WRVJTSU9O
OgorCQkvKiBOb3RoaW5nIG1vcmUgdG8gZG8gKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUEVS
RElUSU9OX0RFQlVHX1NTTF9FUlIoIlVua25vd24gbWludW11bSB2ZXJzaW9uIik7CisJCXJldHVy
biAwOworCX0KKworCVNTTF9DVFhfc2V0X29wdGlvbnMoc3NsX2N0eCwgb3B0aW9ucyk7CisJcmV0
dXJuIDE7Cit9CisKKyNkZWZpbmUgU1NMX0NUWF9zZXRfbWluX3Byb3RvX3ZlcnNpb24gcGVyZGl0
aW9uX3NzbF9jdHhfc2V0X21pbl9wcm90b192ZXJzaW9uCisjZW5kaWYKKworI2lmIEhBVkVfREVD
TF9TU0xfQ1RYX1NFVF9NQVhfUFJPVE9fVkVSU0lPTiA9PSAwCitzdGF0aWMgaW50CitwZXJkaXRp
b25fc3NsX2N0eF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oU1NMX0NUWCAqc3NsX2N0eCwgaW50IG1h
eF92ZXJzaW9uKQoreworCWxvbmcgb3B0aW9ucyA9IDA7CisKKwlzd2l0Y2ggKG1heF92ZXJzaW9u
KSB7CisJY2FzZSBTU0wzX1ZFUlNJT046CisJCW9wdGlvbnMgfD0gU1NMX09QX05PX1RMU3YxOwor
CQkvKiBmYWxsLXRocm91Z2ggKi8KKwljYXNlIFRMUzFfVkVSU0lPTjoKKwkJb3B0aW9ucyB8PSBT
U0xfT1BfTk9fVExTdjFfMTsKKwkJLyogZmFsbC10aHJvdWdoICovCisJY2FzZSBUTFMxXzFfVkVS
U0lPTjoKKwkJb3B0aW9ucyB8PSBTU0xfT1BfTk9fVExTdjFfMjsKKwkJLyogZmFsbC10aHJvdWdo
ICovCisJY2FzZSBUTFMxXzJfVkVSU0lPTjoKKwkJLyogTm90aGluZyBtb3JlIHRvIGRvICovCisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCVBFUkRJVElPTl9ERUJVR19TU0xfRVJSKCJVbmtub3duIG1h
eGltdW0gdmVyc2lvbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlTU0xfQ1RYX3NldF9vcHRpb25z
KHNzbF9jdHgsIG9wdGlvbnMpOworCisJVkFORVNTQV9MT0dHRVJfRVJSKCJ3YXJuaW5nOiBwcm90
b2NvbCB2ZXJzaW9ucyBncmVhdGVyIHRoYW4gdGxzdjEuMiAiCisJCQkgICAibWF5IHN0aWxsIGJl
IGFsbG93ZWQgaWYgc3VwcG9ydGVkIGJ5IHRoZSBTU0wvVExTICIKKwkJCSAgICJpbXBsZW1lbnRh
dGlvbiIpOworCXJldHVybiAxOworfQorCisjZGVmaW5lIFNTTF9DVFhfc2V0X21heF9wcm90b192
ZXJzaW9uIHBlcmRpdGlvbl9zc2xfY3R4X3NldF9tYXhfcHJvdG9fdmVyc2lvbgorI2VuZGlmCisK
IFNTTF9DVFggKnBlcmRpdGlvbl9zc2xfY3R4KGNvbnN0IGNoYXIgKmNhX2ZpbGUsIGNvbnN0IGNo
YXIgKmNhX3BhdGgsIAogCQljb25zdCBjaGFyICpjZXJ0LCBjb25zdCBjaGFyICpwcml2a2V5LCAK
IAkJY29uc3QgY2hhciAqY2FfY2hhaW5fZmlsZSwgY29uc3QgY2hhciAqY2lwaGVycywgZmxhZ190
IGZsYWcpCkBAIC01MzMsNiArNjE2LDYwIEBACiAJfQogCiAJLyoKKwkgKiBTZXQgbWluaW11bSBw
cm90b2NvbCB2ZXJzaW9uCisJICovCisJeworCQljb25zdCBjaGFyICp2ZXJfc3RyOworCisJCWlm
IChmbGFnID09IFBFUkRJVElPTl9TU0xfQ0xJRU5UKQorCQkJdmVyX3N0ciA9IG9wdC5zc2xfb3V0
Z29pbmdfbWluX3Byb3RvX3ZlcnNpb247CisJCWVsc2UKKwkJCXZlcl9zdHIgPSBvcHQuc3NsX2xp
c3Rlbl9taW5fcHJvdG9fdmVyc2lvbjsKKworCQlpZiAodmVyX3N0cikgeworCQkJaW50IHZlcl9u
byA9IHBlcmRpdGlvbl9wYXJzZV9zc2xfcHJvdG9fdmVyc2lvbih2ZXJfc3RyKTsKKworCisJCQlp
ZiAodmVyX25vIDwgMCkgeworCQkJCVZBTkVTU0FfTE9HR0VSX0RFQlVHKCJwZXJkaXRpb25fcGFy
c2Vfc3NsX3Byb3RvX3ZlcnNpb24iKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKCFT
U0xfQ1RYX3NldF9taW5fcHJvdG9fdmVyc2lvbihzc2xfY3R4LCB2ZXJfbm8pKSB7CisJCQkJVkFO
RVNTQV9MT0dHRVJfREVCVUcoIlNTTF9DVFhfc2V0X21pbl9wcm90b192ZXJzaW9uIik7CisJCQkJ
Z290byBlcnI7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFNldCBtYXhpbXVtIHByb3RvY29s
IHZlcnNpb24KKwkgKi8KKwl7CisJCWNvbnN0IGNoYXIgKnZlcl9zdHI7CisKKwkJaWYgKGZsYWcg
PT0gUEVSRElUSU9OX1NTTF9DTElFTlQpCisJCQl2ZXJfc3RyID0gb3B0LnNzbF9vdXRnb2luZ19t
YXhfcHJvdG9fdmVyc2lvbjsKKwkJZWxzZQorCQkJdmVyX3N0ciA9IG9wdC5zc2xfbGlzdGVuX21h
eF9wcm90b192ZXJzaW9uOworCisJCWlmICh2ZXJfc3RyKSB7CisJCQlpbnQgdmVyX25vID0gcGVy
ZGl0aW9uX3BhcnNlX3NzbF9wcm90b192ZXJzaW9uKHZlcl9zdHIpOworCisKKwkJCWlmICh2ZXJf
bm8gPCAwKSB7CisJCQkJVkFORVNTQV9MT0dHRVJfREVCVUcoInBlcmRpdGlvbl9wYXJzZV9zc2xf
cHJvdG9fdmVyc2lvbiIpOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQlpZiAoIVNTTF9DVFhf
c2V0X21heF9wcm90b192ZXJzaW9uKHNzbF9jdHgsIHZlcl9ubykpIHsKKwkJCQlWQU5FU1NBX0xP
R0dFUl9ERUJVRygiU1NMX0NUWF9zZXRfbWF4X3Byb3RvX3ZlcnNpb24iKTsKKwkJCQlnb3RvIGVy
cjsKKwkJCX0KKwkJfQorCX0KKworCS8qCiAJICogU2V0IHRoZSBhdmFpbGFibGUgY2lwaGVycwog
CSAqLwogCWlmKGNpcGhlcnMgJiYgU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc3NsX2N0eCwgY2lw
aGVycykgPCAwKSB7CmRpZmYgLXIgNjQyODA3MGI0ODg5IC1yIDBmOWI2MTJkNmQwNyBwZXJkaXRp
b24vc3NsLmgKLS0tIGEvcGVyZGl0aW9uL3NzbC5oCVN1biBEZWMgMDEgMTc6MjY6NTEgMjAxMyAr
MDkwMAorKysgYi9wZXJkaXRpb24vc3NsLmgJV2VkIE1heSAxMSAwODo1NzoyMiAyMDE2ICswOTAw
CkBAIC0zOSw2ICszOSw4IEBACiAjZGVmaW5lIFBFUkRJVElPTl9TU0xfQ0xJRU5UIChmbGFnX3Qp
IDB4MQogI2RlZmluZSBQRVJESVRJT05fU1NMX1NFUlZFUiAoZmxhZ190KSAweDIKIAoraW50IHBl
cmRpdGlvbl9wYXJzZV9zc2xfcHJvdG9fdmVyc2lvbihjb25zdCBjaGFyICpzdHIpOworCiAvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgogICogcGVyZGl0aW9uX3NzbF9jdHgKICAqIENyZWF0ZSBhbiBTU0wgY29udGV4
dAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KUGVyZGl0
aW9uLXVzZXJzIG1haWxpbmcgbGlzdApQZXJkaXRpb24tdXNlcnNAdmVyZ2VuZXQubmV0Cmh0dHBz
Oi8vbGlzdHMudmVyZ2VuZXQubmV0L2xpc3RpbmZvL3BlcmRpdGlvbi11c2Vycwo=