[PATCH v8 4/6] ieee1275: add support for NVMeoFC

Avnish Chouhan <[email protected]> Mon, 23 Feb 2026 19:14:09 +0530
Newsgroups org.gnu.grub-devel
Message-ID <[email protected]>
VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgdG8gc2NhbiBhbmQgZGlzY292ZXJ5
IG9mIE5WTWVvRkMuCgpTaWduZWQtb2ZmLWJ5OiBEaWVnbyBEb21pbmdvcyA8ZGllZ29kb0Bici5p
Ym0uY29tPgpTaWduZWQtb2ZmLWJ5OiBBdm5pc2ggQ2hvdWhhbiA8YXZuaXNoQGxpbnV4LmlibS5j
b20+Ci0tLQogZ3J1Yi1jb3JlL2Rpc2svaWVlZTEyNzUvb2ZkaXNrLmMgfCAzOTkgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo
YW5nZWQsIDMwMiBpbnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9n
cnViLWNvcmUvZGlzay9pZWVlMTI3NS9vZmRpc2suYyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1
L29mZGlzay5jCmluZGV4IDYyMDkwZmIuLmUyMTM0ODcgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9k
aXNrL2llZWUxMjc1L29mZGlzay5jCisrKyBiL2dydWItY29yZS9kaXNrL2llZWUxMjc1L29mZGlz
ay5jCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSA8Z3J1Yi90aW1lLmg+CiAjaW5jbHVkZSA8
Z3J1Yi9zYWZlbWF0aC5oPgogCisjZGVmaW5lIEVYVEVORF9QQVRIXzY0IDY0CisjZGVmaW5lIEVY
VEVORF9QQVRIXzUxMiA1MTIKKwogc3RhdGljIGNoYXIgKmxhc3RfZGV2cGF0aDsKIHN0YXRpYyBn
cnViX2llZWUxMjc1X2loYW5kbGVfdCBsYXN0X2loYW5kbGU7CiAKQEAgLTIyNCwxMTYgKzIyNywz
MTggQEAgZGV2X2l0ZXJhdGVfcmVhbCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0
aCkKIH0KIAogc3RhdGljIHZvaWQKLWRldl9pdGVyYXRlIChjb25zdCBzdHJ1Y3QgZ3J1Yl9pZWVl
MTI3NV9kZXZhbGlhcyAqYWxpYXMpCi17Ci0gIGlmIChncnViX3N0cmNtcCAoYWxpYXMtPnR5cGUs
ICJmY3AiKSA9PSAwKQorZGV2X2l0ZXJhdGVfZmNwX2Rpc2tzIChjb25zdCBzdHJ1Y3QgZ3J1Yl9p
ZWVlMTI3NV9kZXZhbGlhcyAqYWxpYXMpCisgeworICAvKgorICAgKiBJZiB3ZSBhcmUgZGVhbGlu
ZyB3aXRoIGZjcCBkZXZpY2VzLCB3ZSBuZWVkCisgICAqIHRvIGZpbmQgdGhlIFdXUE5zIGFuZCBM
VU5zIHRvIGl0ZXJhdGUgdGhlbQorICAgKi8KKyAgZ3J1Yl9pZWVlMTI3NV9paGFuZGxlX3QgaWhh
bmRsZTsKKyAgZ3J1Yl91aW50NjRfdCAqcHRyX3RhcmdldHMsICpwdHJfbHVucywgaywgbDsKKyAg
dW5zaWduZWQgaW50IGksIGosIHBvczsKKyAgY2hhciAqYnVmLCAqYnVmcHRyOworICBzdHJ1Y3Qg
c2V0X2ZjcF90YXJnZXRzX2FyZ3MKKyAgeworICAgIHN0cnVjdCBncnViX2llZWUxMjc1X2NvbW1v
bl9oZHIgY29tbW9uOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKKyAgICBncnVi
X2llZWUxMjc1X2NlbGxfdCBpaGFuZGxlOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNhdGNo
X3Jlc3VsdDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBuZW50cmllczsKKyAgICBncnViX2ll
ZWUxMjc1X2NlbGxfdCB0YWJsZTsKKyAgfSBhcmdzX3RhcmdldHM7CisKKyAgc3RydWN0IHNldF9m
Y3BfbHVuc19hcmdzCisgIHsKKyAgICBzdHJ1Y3QgZ3J1Yl9pZWVlMTI3NV9jb21tb25faGRyIGNv
bW1vbjsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBtZXRob2Q7CisgICAgZ3J1Yl9pZWVlMTI3
NV9jZWxsX3QgaWhhbmRsZTsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCB3d3BuX2g7CisgICAg
Z3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd3dwbl9sOworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGNh
dGNoX3Jlc3VsdDsKKyAgICBncnViX2llZWUxMjc1X2NlbGxfdCBuZW50cmllczsKKyAgICBncnVi
X2llZWUxMjc1X2NlbGxfdCB0YWJsZTsKKyAgfSBhcmdzX2x1bnM7CisKKyAgc3RydWN0IGFyZ3Nf
cmV0CisgIHsKKyAgICBncnViX3VpbnQ2NF90IGFkZHI7CisgICAgZ3J1Yl91aW50NjRfdCBsZW47
CisgIH07CisgIHN0cnVjdCBhcmdzX3JldCAqdGFyZ2V0c190YWJsZTsKKyAgc3RydWN0IGFyZ3Nf
cmV0ICpsdW5zX3RhYmxlOworCisgIGlmIChncnViX2llZWUxMjc1X29wZW4gKGFsaWFzLT5wYXRo
LCAmaWhhbmRsZSkpCiAgICAgewotICAgICAgLyoKLSAgICAgICAqIElmIHdlIGFyZSBkZWFsaW5n
IHdpdGggZmNwIGRldmljZXMsIHdlIG5lZWQKLSAgICAgICAqIHRvIGZpbmQgdGhlIFdXUE5zIGFu
ZCBMVU5zIHRvIGl0ZXJhdGUgdGhlbQotICAgICAgICovCi0gICAgICBncnViX2llZWUxMjc1X2lo
YW5kbGVfdCBpaGFuZGxlOwotICAgICAgZ3J1Yl91aW50NjRfdCAqcHRyX3RhcmdldHMsICpwdHJf
bHVucywgaywgbDsKLSAgICAgIHVuc2lnbmVkIGludCBpLCBqLCBwb3M7Ci0gICAgICBjaGFyICpi
dWYsICpidWZwdHI7Ci0gICAgICBzdHJ1Y3Qgc2V0X2ZjcF90YXJnZXRzX2FyZ3MKLSAgICAgIHsK
LSAgICAgICAgc3RydWN0IGdydWJfaWVlZTEyNzVfY29tbW9uX2hkciBjb21tb247Ci0gICAgICAg
IGdydWJfaWVlZTEyNzVfY2VsbF90IG1ldGhvZDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxs
X3QgaWhhbmRsZTsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgY2F0Y2hfcmVzdWx0Owot
ICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBuZW50cmllczsKLSAgICAgICAgZ3J1Yl9pZWVl
MTI3NV9jZWxsX3QgdGFibGU7Ci0gICAgICB9IGFyZ3NfdGFyZ2V0czsKLQotICAgICAgc3RydWN0
IHNldF9mY3BfbHVuc19hcmdzCi0gICAgICB7Ci0gICAgICAgIHN0cnVjdCBncnViX2llZWUxMjc1
X2NvbW1vbl9oZHIgY29tbW9uOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBtZXRob2Q7
Ci0gICAgICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7Ci0gICAgICAgIGdydWJfaWVl
ZTEyNzVfY2VsbF90IHd3cG5faDsKLSAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3Qgd3dwbl9s
OwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxfdCBjYXRjaF9yZXN1bHQ7Ci0gICAgICAgIGdy
dWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwotICAgICAgICBncnViX2llZWUxMjc1X2NlbGxf
dCB0YWJsZTsKLSAgICAgIH0gYXJnc19sdW5zOwotCi0gICAgICBzdHJ1Y3QgYXJnc19yZXQKLSAg
ICAgIHsKLSAgICAgICAgZ3J1Yl91aW50NjRfdCBhZGRyOwotICAgICAgICBncnViX3VpbnQ2NF90
IGxlbjsKLSAgICAgIH07CisgICAgICBncnViX2RwcmludGYgKCJkaXNrIiwgImZhaWxlZCB0byBv
cGVuIHRoZSBkaXNrIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4iLCBhbGlhcy0+
cGF0aCk7CisgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICBpZiAoZ3J1Yl9pZWVlMTI3NV9v
cGVuIChhbGlhcy0+cGF0aCwgJmloYW5kbGUpKQorICAvKiBTZXR1cCB0aGUgZmNwLXRhcmdldHMg
bWV0aG9kIHRvIGNhbGwgdmlhIHBmdyovCisgIElOSVRfSUVFRTEyNzVfQ09NTU9OICgmYXJnc190
YXJnZXRzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMyk7CisgIGFyZ3NfdGFyZ2V0cy5tZXRo
b2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJmY3AtdGFyZ2V0cyI7CisgIGFyZ3NfdGFyZ2V0
cy5paGFuZGxlID0gaWhhbmRsZTsKKworICAvKiBTZXR1cCB0aGUgZmNwLWx1bnMgbWV0aG9kIHRv
IGNhbGwgdmlhIHBmdyAqLworICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJmFyZ3NfbHVucy5jb21t
b24sICJjYWxsLW1ldGhvZCIsIDQsIDMpOworICBhcmdzX2x1bnMubWV0aG9kID0gKGdydWJfaWVl
ZTEyNzVfY2VsbF90KSAiZmNwLWx1bnMiOworICBhcmdzX2x1bnMuaWhhbmRsZSA9IGloYW5kbGU7
CisgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmYXJnc190YXJnZXRzKSA9PSAtMSkKKyAg
ICB7CisgICAgICBncnViX2RwcmludGYgKCJkaXNrIiwgImZhaWxlZCB0byBnZXQgdGhlIHRhcmdl
dHMgd2hpbGUgaXRlcmF0aW5nIEZDUCBkaXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKKyAg
ICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICAgICAgcmV0dXJuOworICAgIH0K
KyAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciBidWlsZGluZyB0aGUgcGF0aCAqLworICBidWYgPSBn
cnViX21hbGxvYyAoZ3J1Yl9zdHJsZW4gKGFsaWFzLT5wYXRoKSArIEVYVEVORF9QQVRIXzY0KTsK
KyAgaWYgKCFidWYpCisgICAgeworICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7
CisgICAgICByZXR1cm47CisgICAgfQorICBidWZwdHIgPSBncnViX3N0cGNweSAoYnVmLCBhbGlh
cy0+cGF0aCk7CisKKyAgLyoKKyAgICogSXRlcmF0ZSBvdmVyIGVudHJpZXMgcmV0dXJuZWQgYnkg
cGZ3LiBFYWNoIGVudHJ5IGNvbnRhaW5zIGEKKyAgICogcG9pbnRlciB0byB3d3BuIHRhYmxlIGFu
ZCBoaXMgbGVuZ3RoLgorICAgKi8KKyAgdGFyZ2V0c190YWJsZSA9IChzdHJ1Y3QgYXJnc19yZXQg
KikgKGFyZ3NfdGFyZ2V0cy50YWJsZSk7CisgIGZvciAoaSA9IDA7IGkgPCBhcmdzX3RhcmdldHMu
bmVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICBwdHJfdGFyZ2V0cyA9IChncnViX3VpbnQ2NF90
KikgKGdydWJfYWRkcl90KSB0YXJnZXRzX3RhYmxlW2ldLmFkZHI7CisgICAgICAvKiBJdGVyYXRl
IG92ZXIgYWxsIHd3cG5zIGluIGdpdmVuIHRhYmxlICovCisgICAgICBmb3IgKGsgPSAwOyBrIDwg
dGFyZ2V0c190YWJsZVtpXS5sZW47IGsrKykKICAgICAgICAgewotICAgICAgICAgIGdydWJfZHBy
aW50ZiAoImRpc2siLCAiZmFpbGVkIHRvIG9wZW4gdGhlIGRpc2sgd2hpbGUgaXRlcmF0aW5nIEZD
UCBkaXNrIHBhdGg9JXNcbiIsIGFsaWFzLT5wYXRoKTsKLSAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgYXJnc19sdW5zLnd3cG5fbCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgKCpwdHJfdGFy
Z2V0cyk7CisgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1X2NlbGxf
dCkgKCpwdHJfdGFyZ2V0cyA+PiAzMik7CisgICAgICAgICAgcG9zID0gZ3J1Yl9zbnByaW50ZiAo
YnVmcHRyLCAzMiwgIi9kaXNrQCUiIFBSSXhHUlVCX1VJTlQ2NF9ULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgoY29uc3Qgdm9pZCAqKSBwdHJf
dGFyZ2V0cykpOworICAgICAgICAgIHB0cl90YXJnZXRzKys7CisgICAgICAgICAgLyogR2V0IHRo
ZSBsdW5zIGZvciBnaXZlbiB3d3BuIHRhcmdldCAqLworICAgICAgICAgIGlmIChJRUVFMTI3NV9D
QUxMX0VOVFJZX0ZOICgmYXJnc19sdW5zKSA9PSAtMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBMVU5TIHdoaWxl
IGl0ZXJhdGluZyBGQ1AgZGlzayBwYXRoPSVzXG4iLCBidWYpOworICAgICAgICAgICAgICBncnVi
X2llZWUxMjc1X2Nsb3NlIChpaGFuZGxlKTsKKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChidWYp
OworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgbHVuc190
YWJsZSA9IChzdHJ1Y3QgYXJnc19yZXQgKikgKGFyZ3NfbHVucy50YWJsZSk7CisKKyAgICAgICAg
ICAvKiBJdGVyYXRlIG92ZXIgYWxsIExVTnMgKi8KKyAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg
YXJnc19sdW5zLm5lbnRyaWVzOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB0
cl9sdW5zID0gKGdydWJfdWludDY0X3QqKSAoZ3J1Yl9hZGRyX3QpIGx1bnNfdGFibGVbal0uYWRk
cjsKKyAgICAgICAgICAgICAgZm9yIChsID0gMDsgbCA8IGx1bnNfdGFibGVbal0ubGVuOyBsKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZ3J1Yl9zbnByaW50ZiAoJmJ1
ZnB0cltwb3NdLCAzMCwgIiwlIiBQUkl4R1JVQl9VSU5UNjRfVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdydWJfZ2V0X3VuYWxpZ25lZDY0ICgoY29uc3Qgdm9pZCAqKSBwdHJf
bHVucykpOworICAgICAgICAgICAgICAgICAgcHRyX2x1bnMrKzsKKyAgICAgICAgICAgICAgICAg
IGRldl9pdGVyYXRlX3JlYWwgKGJ1ZiwgYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KKyAgICB9CisgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUp
OworICBncnViX2ZyZWUgKGJ1Zik7CisgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2Rldl9p
dGVyYXRlX2ZjcF9udm1lb2YgKGNvbnN0IHN0cnVjdCBncnViX2llZWUxMjc1X2RldmFsaWFzICph
bGlhcykKK3sKKyAgY2hhciAqYnVmcHRyOworICBncnViX2llZWUxMjc1X2loYW5kbGVfdCBpaGFu
ZGxlOworCisgIC8qIENyZWF0ZSB0aGUgc3RydWN0cyBmb3IgdGhlIHBhcmFtZXRlcnMgcGFzc2lu
ZyB0byBQRlcgKi8KKyAgc3RydWN0IG52bWVfYXJncworICB7CisgICAgc3RydWN0IGdydWJfaWVl
ZTEyNzVfY29tbW9uX2hkciBjb21tb247CisgICAgZ3J1Yl9pZWVlMTI3NV9jZWxsX3QgbWV0aG9k
OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IGloYW5kbGU7CisgICAgZ3J1Yl9pZWVlMTI3NV9j
ZWxsX3QgY2F0Y2hfcmVzdWx0OworICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IG5lbnRyaWVzOwor
ICAgIGdydWJfaWVlZTEyNzVfY2VsbF90IHRhYmxlOworICB9IG52bWVfZGlzY292ZXJ5X2NvbnRy
b2xsZXJzX2FyZ3MsIG52bWVfY29udHJvbGxlcnNfYXJncywgbnZtZV9uYW1lc3BhY2VzX2FyZ3M7
CisKKyAgLyogQ3JlYXRlIHRoZSBzdHJ1Y3RzIGZvciB0aGUgcmVzdWx0cyBmcm9tIFBGVyAqLwor
ICBzdHJ1Y3QgZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlX3N0cnVjdAorICB7CisgICAgZ3J1
Yl91aW50NjRfdCB0YWJsZVsyNTZdOworICAgIGdydWJfdWludDMyX3QgbGVuOworICB9IGRpc2Nv
dmVyeV9jb250cm9sbGVyc190YWJsZTsKKworICAvKgorICAgKiBzdHJ1Y3QgbnZtZV9jb250cm9s
bGVyc190YWJsZV9lbnRyeQorICAgKiB0aGlzIHRoZSByZXR1cm4gb2YgbnZtZS1jb250cm9sbGVy
cyBtZXRob2QgdGFibGVzLCBjb250YWluaW5nOgorICAgKiAtIDItYnl0ZSBjb250cm9sbGVyIElE
CisgICAqIC0gMjU2LWJ5dGUgdHJhbnNwb3J0IGFkZHJlc3Mgc3RyaW5nCisgICAqIC0gMjU2LWJ5
dGUgZmllbGQgY29udGFpbmluZyBudWxsLXRlcm1pbmF0ZWQgTlZNIHN1YnN5c3RlbSBOUU4gc3Ry
aW5nIHVwIHRvIDIyMyBjaGFyYWN0ZXJzCisgICAqLworICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVy
c190YWJsZV9lbnRyeQorICB7CisgICAgZ3J1Yl91aW50MTZfdCBpZDsKKyAgICBjaGFyIHd3cG5b
MjU2XTsKKyAgICBjaGFyIG5xblsyNTZdOworICB9OworCisgIHN0cnVjdCBudm1lX2NvbnRyb2xs
ZXJzX3RhYmxlX2VudHJ5X3JlYWwKKyAgeworICAgIGdydWJfdWludDE2X3QgaWQ7CisgICAgY2hh
ciB3d3BuWzI1Nl07CisgICAgY2hhciBucW5bMjU2XTsKKyAgfTsKKworICBzdHJ1Y3QgbnZtZV9j
b250cm9sbGVyc190YWJsZV9lbnRyeSogbnZtZV9jb250cm9sbGVyc190YWJsZTsKKyAgZ3J1Yl91
aW50MzJfdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxlX2VudHJpZXM7CisgIGNoYXIgKmJ1ZjsKKyAg
dW5zaWduZWQgaW50IGkgPSAwOworICBpbnQgY3VycmVudF9idWZmZXJfaW5kZXg7CisgIGludCBu
dm1lX2NvbnRyb2xsZXJfaW5kZXg7CisgIGludCBidWZwdHJfcG9zMjsKKyAgZ3J1Yl91aW50MzJf
dCBuYW1lc3BhY2VfaW5kZXggPSAwOworICBzdHJ1Y3QgbnZtZV9jb250cm9sbGVyc190YWJsZV9l
bnRyeSogbnZtZV9jb250cm9sbGVyc190YWJsZV9idWY7CisKKyAgbnZtZV9jb250cm9sbGVyc190
YWJsZSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBudm1lX2NvbnRyb2xsZXJzX3RhYmxl
X2VudHJ5KSAqIDI1Nik7CisgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVpbGRpbmcgdGhlIE5W
TWVvRiBwYXRoICovCisgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBh
dGgpICsgRVhURU5EX1BBVEhfNTEyKTsKKworICBpZiAoIWJ1ZiB8fCAhbnZtZV9jb250cm9sbGVy
c190YWJsZSkKKyAgICB7CisgICAgICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUp
OworICAgICAgZ3J1Yl9mcmVlIChidWYpOworICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAg
LyogU2V0dXAgdGhlIGZjcC10YXJnZXRzIG1ldGhvZCB0byBjYWxsIHZpYSBwZncqLwotICAgICAg
SU5JVF9JRUVFMTI3NV9DT01NT04gKCZhcmdzX3RhcmdldHMuY29tbW9uLCAiY2FsbC1tZXRob2Qi
LCAyLCAzKTsKLSAgICAgIGFyZ3NfdGFyZ2V0cy5tZXRob2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxs
X3QpICJmY3AtdGFyZ2V0cyI7Ci0gICAgICBhcmdzX3RhcmdldHMuaWhhbmRsZSA9IGloYW5kbGU7
CisgIC8qIENvcHkgdGhlIGFsaWFzLT5wYXRoIHRvIGJ1ZiBzbyB3ZSBjYW4gd29yayB3aXRoICov
CisgIGJ1ZnB0ciA9IGdydWJfc3RwY3B5IChidWYsIGFsaWFzLT5wYXRoKTsKKyAgZ3J1Yl9zbnBy
aW50ZiAoYnVmcHRyLCAzMiwgIi9udm1lLW9mIik7CiAKLSAgICAgIC8qIFNldHVwIHRoZSBmY3At
bHVucyBtZXRob2QgdG8gY2FsbCB2aWEgcGZ3ICovCi0gICAgICBJTklUX0lFRUUxMjc1X0NPTU1P
TiAoJmFyZ3NfbHVucy5jb21tb24sICJjYWxsLW1ldGhvZCIsIDQsIDMpOwotICAgICAgYXJnc19s
dW5zLm1ldGhvZCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkgImZjcC1sdW5zIjsKLSAgICAgIGFy
Z3NfbHVucy5paGFuZGxlID0gaWhhbmRsZTsKLSAgICAgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZ
X0ZOICgmYXJnc190YXJnZXRzKSA9PSAtMSkKKyAgLyoKKyAgICogIE9wZW4gdGhlIG52bWUtb2Yg
bGF5ZXIKKyAgICogIEV4LiAgL3BjaUBidXMvZmlicmUtY2hhbm5lbEBAZGV2LGZ1bmMvbnZtZS1v
ZgorICAgKi8KKyAgaWYgKGdydWJfaWVlZTEyNzVfb3BlbiAoYnVmLCAmaWhhbmRsZSkpCisgICAg
eworICAgICAgZ3J1Yl9kcHJpbnRmICgiZGlzayIsICJmYWlsZWQgdG8gb3BlbiB0aGUgZGlzayB3
aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aD0lc1xuIiwgYnVmKTsKKyAgICAgIGdydWJfZnJl
ZSAobnZtZV9jb250cm9sbGVyc190YWJsZSk7CisgICAgICBncnViX2ZyZWUgKGJ1Zik7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgIC8qCisgICAqIENhbGwgdG8gbnZtZS1kaXNjb3ZlcnktY29u
dHJvbGxlcnMgbWV0aG9kIGZyb20gdGhlIG52bWUtb2YgbGF5ZXIKKyAgICogdG8gZ2V0IGEgbGlz
dCBvZiB0aGUgTlZNZSBkaXNjb3ZlcnkgY29udHJvbGxlcnMgcGVyIHRoZSBiaW5kaW5nCisgICAq
LworICBJTklUX0lFRUUxMjc1X0NPTU1PTiAoJm52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2Fy
Z3MuY29tbW9uLCAiY2FsbC1tZXRob2QiLCAyLCAyKTsKKyAgbnZtZV9kaXNjb3ZlcnlfY29udHJv
bGxlcnNfYXJncy5tZXRob2QgPSAoZ3J1Yl9pZWVlMTI3NV9jZWxsX3QpICJudm1lLWRpc2NvdmVy
eS1jb250cm9sbGVycyI7CisgIG52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MuaWhhbmRs
ZSA9IGloYW5kbGU7CisgIGlmIChJRUVFMTI3NV9DQUxMX0VOVFJZX0ZOICgmbnZtZV9kaXNjb3Zl
cnlfY29udHJvbGxlcnNfYXJncykgPT0gLTEpCisgICAgeworICAgICAgZ3J1Yl9kcHJpbnRmICgi
ZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSB0YXJnZXRzIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlz
ayBwYXRoPSVzXG4iLCBidWYpOworICAgICAgZ3J1Yl9mcmVlIChudm1lX2NvbnRyb2xsZXJzX3Rh
YmxlKTsKKyAgICAgIGdydWJfZnJlZSAoYnVmKTsKKyAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2Ug
KGloYW5kbGUpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiBBZnRlciBjbG9zaW5nIHRo
ZSBkZXZpY2UsIHRoZSBpbmZvIGlzIGxvc3QuIFNvIGxldHMgY29weSBlYWNoIGJ1ZmZlciBpbiB0
aGUgYnVmZmVycyB0YWJsZSAqLworICBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUubGVuID0g
KGdydWJfdWludDMyX3QpIG52bWVfZGlzY292ZXJ5X2NvbnRyb2xsZXJzX2FyZ3MubmVudHJpZXM7
CisKKyAgZm9yIChpID0gMDsgaSA8IGRpc2NvdmVyeV9jb250cm9sbGVyc190YWJsZS5sZW47IGkr
KykKKyAgICB7CisgICAgICBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUudGFibGVbaV0gPSAo
KGdydWJfdWludDY0X3QqKSBudm1lX2Rpc2NvdmVyeV9jb250cm9sbGVyc19hcmdzLnRhYmxlKVtp
XTsKKyAgICB9CisgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5kbGUpOworICBncnViX2Rwcmlu
dGYgKCJvZmRpc2siLCJOVk1lb0Y6IEZvdW5kICVkIGRpc2NvdmVyeSBjb250cm9sbGVyc1xuIiwg
ZGlzY292ZXJ5X2NvbnRyb2xsZXJzX3RhYmxlLmxlbik7CisKKyAgLyogRm9yIGVhY2ggbnZtZSBk
aXNjb3ZlcnkgY29udHJvbGxlciAqLworICBmb3IgKGN1cnJlbnRfYnVmZmVyX2luZGV4ID0gMDsg
Y3VycmVudF9idWZmZXJfaW5kZXggPCAoaW50KSBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUu
bGVuOyBjdXJyZW50X2J1ZmZlcl9pbmRleCsrKQorICAgIHsKKyAgICAgIGdydWJfc25wcmludGYg
KGJ1ZnB0ciwgNjQsICIvbnZtZS1vZi9jb250cm9sbGVyQCUiIFBSSXhHUlVCX1VJTlQ2NF9UICIs
ZmZmZiIsCisgICAgICAgICAgICAgICAgICAgICBkaXNjb3ZlcnlfY29udHJvbGxlcnNfdGFibGUu
dGFibGVbY3VycmVudF9idWZmZXJfaW5kZXhdKTsKKyAgICAgIGdydWJfZHByaW50ZiAoIm9mZGlz
ayIsICJudm1lb2YgY29udHJvbGxlcj0lc1xuIiwgYnVmKTsKKyAgICAgIGlmIChncnViX2llZWUx
Mjc1X29wZW4gKGJ1ZiwgJmloYW5kbGUpKQogICAgICAgICB7Ci0gICAgICAgICAgZ3J1Yl9kcHJp
bnRmICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSB0YXJnZXRzIHdoaWxlIGl0ZXJhdGluZyBG
Q1AgZGlzayBwYXRoPSVzXG4iLCBhbGlhcy0+cGF0aCk7Ci0gICAgICAgICAgZ3J1Yl9pZWVlMTI3
NV9jbG9zZSAoaWhhbmRsZSk7Ci0gICAgICAgICAgcmV0dXJuOworICAgICAgICAgIGdydWJfZHBy
aW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gb3BlbiB0aGUgZGlzayB3aGlsZSBnZXR0aW5nIG52
bWUtY29udHJvbGxlcnMgIHBhdGg9JXNcbiIsIGJ1Zik7CisgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KLSAgICAgIGJ1ZiA9IGdydWJfbWFsbG9jIChncnViX3N0cmxlbiAoYWxpYXMtPnBh
dGgpICsgMzIgKyAzMik7Ci0gICAgICBpZiAoIWJ1ZikKKyAgICAgIElOSVRfSUVFRTEyNzVfQ09N
TU9OICgmbnZtZV9jb250cm9sbGVyc19hcmdzLmNvbW1vbiwgImNhbGwtbWV0aG9kIiwgMiwgMik7
CisgICAgICBudm1lX2NvbnRyb2xsZXJzX2FyZ3MubWV0aG9kID0gKGdydWJfaWVlZTEyNzVfY2Vs
bF90KSAibnZtZS1jb250cm9sbGVycyI7CisgICAgICBudm1lX2NvbnRyb2xsZXJzX2FyZ3MuaWhh
bmRsZSA9IGloYW5kbGU7CisgICAgICBudm1lX2NvbnRyb2xsZXJzX2FyZ3MuY2F0Y2hfcmVzdWx0
ID0gMDsKKworICAgICAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZudm1lX2NvbnRyb2xs
ZXJzX2FyZ3MpID09IC0xKQogICAgICAgICB7CisgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgib2Zk
aXNrIiwgImZhaWxlZCB0byBnZXQgdGhlIG52bWUtY29udHJvbGxlcnMgd2hpbGUgaXRlcmF0aW5n
IEZDUCBkaXNrIHBhdGhcbiIpOwogICAgICAgICAgIGdydWJfaWVlZTEyNzVfY2xvc2UgKGloYW5k
bGUpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgYnVmcHRyID0gZ3J1Yl9z
dHBjcHkgKGJ1ZiwgYWxpYXMtPnBhdGgpOworICAgICAgICAgIGNvbnRpbnVlOworCSB9CiAKLSAg
ICAgIC8qCi0gICAgICAgKiBJdGVyYXRlIG92ZXIgZW50cmllcyByZXR1cm5lZCBieSBwZncuIEVh
Y2ggZW50cnkgY29udGFpbnMgYQotICAgICAgICogcG9pbnRlciB0byB3d3BuIHRhYmxlIGFuZCBo
aXMgbGVuZ3RoLgotICAgICAgICovCi0gICAgICBzdHJ1Y3QgYXJnc19yZXQgKnRhcmdldHNfdGFi
bGUgPSAoc3RydWN0IGFyZ3NfcmV0ICopIChhcmdzX3RhcmdldHMudGFibGUpOwotICAgICAgZm9y
IChpID0gMDsgaSA8IGFyZ3NfdGFyZ2V0cy5uZW50cmllczsgaSsrKQorICAgICAgLyogQ29weSB0
aGUgYnVmZmVyIGxpc3QgdG8gbnZtZV9jb250cm9sbGVyc190YWJsZSAqLworICAgICAgbnZtZV9j
b250cm9sbGVyc190YWJsZV9lbnRyaWVzID0gKChncnViX3VpbnQzMl90KSBudm1lX2NvbnRyb2xs
ZXJzX2FyZ3MubmVudHJpZXMpOworICAgICAgbnZtZV9jb250cm9sbGVyc190YWJsZV9idWYgPSAo
c3RydWN0IG52bWVfY29udHJvbGxlcnNfdGFibGVfZW50cnkqKSBudm1lX2NvbnRyb2xsZXJzX2Fy
Z3MudGFibGU7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgbnZtZV9jb250cm9sbGVyc190YWJsZV9l
bnRyaWVzOyBpKyspCiAgICAgICAgIHsKLSAgICAgICAgICBwdHJfdGFyZ2V0cyA9IChncnViX3Vp
bnQ2NF90KikgdGFyZ2V0c190YWJsZVtpXS5hZGRyOwotICAgICAgICAgIC8qIEl0ZXJhdGUgb3Zl
ciBhbGwgd3dwbnMgaW4gZ2l2ZW4gdGFibGUgKi8KLSAgICAgICAgICBmb3IoayA9IDA7IGsgPCB0
YXJnZXRzX3RhYmxlW2ldLmxlbjsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBh
cmdzX2x1bnMud3dwbl9sID0gKGdydWJfaWVlZTEyNzVfY2VsbF90KSAoKnB0cl90YXJnZXRzKTsK
LSAgICAgICAgICAgICAgYXJnc19sdW5zLnd3cG5faCA9IChncnViX2llZWUxMjc1X2NlbGxfdCkg
KCpwdHJfdGFyZ2V0cyA+PiAzMik7Ci0gICAgICAgICAgICAgIHBvcyA9IGdydWJfc25wcmludGYg
KGJ1ZnB0ciwgMzIsICIvZGlza0AlIiBQUkl4R1JVQl9VSU5UNjRfVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBncnViX2dldF91bmFsaWduZWQ2NCAoKnB0cl90YXJnZXRzKysp
KTsKLSAgICAgICAgICAgICAgLyogR2V0IHRoZSBsdW5zIGZvciBnaXZlbiB3d3BuIHRhcmdldCAq
LwotICAgICAgICAgICAgICBpZiAoSUVFRTEyNzVfQ0FMTF9FTlRSWV9GTiAoJmFyZ3NfbHVucykg
PT0gLTEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRm
ICgiZGlzayIsICJmYWlsZWQgdG8gZ2V0IHRoZSBMVU5TIHdoaWxlIGl0ZXJhdGluZyBGQ1AgZGlz
ayBwYXRoPSVzXG4iLCBidWYpOwotICAgICAgICAgICAgICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9z
ZSAoaWhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgICBncnViX2ZyZWUgKGJ1Zik7Ci0gICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzdHJ1
Y3QgYXJnc19yZXQgKmx1bnNfdGFibGUgPSAoc3RydWN0IGFyZ3NfcmV0ICopIChhcmdzX2x1bnMu
dGFibGUpOwotCi0gICAgICAgICAgICAgIC8qIEl0ZXJhdGUgb3ZlciBhbGwgTFVOcyAqLwotICAg
ICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBhcmdzX2x1bnMubmVudHJpZXM7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBwdHJfbHVucyA9IChncnViX3VpbnQ2NF90
KikgbHVuc190YWJsZVtqXS5hZGRyOwotICAgICAgICAgICAgICAgICAgZm9yKGwgPSAwOyBsIDwg
bHVuc190YWJsZVtqXS5sZW47IGwrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgIGdydWJfc25wcmludGYgKCZidWZwdHJbcG9zXSwgMzAsICIsJSIgUFJJeEdS
VUJfVUlOVDY0X1QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX2dl
dF91bmFsaWduZWQ2NCAoKnB0cl9sdW5zKyspKTsKLSAgICAgICAgICAgICAgICAgICAgICBkZXZf
aXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICBudm1lX2NvbnRyb2xsZXJz
X3RhYmxlW2ldLmlkID0gKGdydWJfdWludDE2X3QpIG52bWVfY29udHJvbGxlcnNfdGFibGVfYnVm
W2ldLmlkOworICAgICAgICAgIGdydWJfc3RyY3B5IChudm1lX2NvbnRyb2xsZXJzX3RhYmxlW2ld
Lnd3cG4sIG52bWVfY29udHJvbGxlcnNfdGFibGVfYnVmW2ldLnd3cG4pOworICAgICAgICAgIGdy
dWJfc3RyY3B5IChudm1lX2NvbnRyb2xsZXJzX3RhYmxlW2ldLm5xbiwgbnZtZV9jb250cm9sbGVy
c190YWJsZV9idWZbaV0ubnFuKTsKKwkgfQogICAgICAgZ3J1Yl9pZWVlMTI3NV9jbG9zZSAoaWhh
bmRsZSk7Ci0gICAgICBncnViX2ZyZWUgKGJ1Zik7Ci0gICAgICByZXR1cm47CisgICAgICBncnVi
X2RwcmludGYgKCJvZmRpc2siLCAiTlZNZW9GOiBmb3VuZCAlZCBudm1lIGNvbnRyb2xsZXJzXG4i
LCAoaW50KSBudm1lX2NvbnRyb2xsZXJzX2FyZ3MubmVudHJpZXMpOworCisgICAgICAvKiBGb3Ig
ZWFjaCBudm1lIGNvbnRyb2xsZXIgKi8KKyAgICAgIGZvciAobnZtZV9jb250cm9sbGVyX2luZGV4
ID0gMDsgbnZtZV9jb250cm9sbGVyX2luZGV4IDwgKGludCkgbnZtZV9jb250cm9sbGVyc19hcmdz
Lm5lbnRyaWVzOyBudm1lX2NvbnRyb2xsZXJfaW5kZXgrKykKKyAgICAgICB7CisgICAgICAgICAv
KgorCSAgICogT3BlbiB0aGUgbnZtZSBjb250cm9sbGVyCisgICAgICAgICAgKiAvcGNpQGJ1cy9m
aWJyZS1jaGFubmVsQGRldixmdW5jL252bWUtb2YvY29udHJvbGxlckB0cmFuc3BvcnQtYWRkcixj
dGxyLWlkOm5xbj10Z3Qtc3Vic3lzdGVtLW5xbgorICAgICAgICAgICovCisgICAgICAgICBidWZw
dHJfcG9zMiA9IGdydWJfc25wcmludGYgKGJ1ZnB0ciwgNTEyLCAiL252bWUtb2YvY29udHJvbGxl
ckAlcyxmZmZmOm5xbj0lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudm1lX2NvbnRyb2xsZXJzX3RhYmxlW252bWVfY29udHJvbGxlcl9pbmRleF0ud3dwbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG52bWVfY29udHJvbGxlcnNfdGFi
bGVbbnZtZV9jb250cm9sbGVyX2luZGV4XS5ucW4pOworCSAgZ3J1Yl9kcHJpbnRmICgib2ZkaXNr
IiwgIk5WTWVvRjogbnZtZW9mIGNvbnRyb2xsZXI9JXNcbiIsIGJ1Zik7CisgICAgICAgICBpZiAo
Z3J1Yl9pZWVlMTI3NV9vcGVuIChidWYsICZpaGFuZGxlKSkKKwkgICAgeworICAgICAgICAgICAg
IGdydWJfZHByaW50ZiAoIm9mZGlzayIsICJmYWlsZWQgdG8gb3BlbiB0aGUgcGF0aD0lc1xuIiwg
YnVmKTsKKyAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgfQorICAgICAgICAgSU5JVF9JRUVF
MTI3NV9DT01NT04gKCZudm1lX25hbWVzcGFjZXNfYXJncy5jb21tb24sICJjYWxsLW1ldGhvZCIs
IDIsIDIpOworICAgICAgICAgbnZtZV9uYW1lc3BhY2VzX2FyZ3MubWV0aG9kID0gKGdydWJfaWVl
ZTEyNzVfY2VsbF90KSAiZ2V0LW5hbWVzcGFjZS1saXN0IjsKKyAgICAgICAgIG52bWVfbmFtZXNw
YWNlc19hcmdzLmloYW5kbGUgPSBpaGFuZGxlOworICAgICAgICAgbnZtZV9uYW1lc3BhY2VzX2Fy
Z3MuY2F0Y2hfcmVzdWx0ID0gMDsKKworCSAgaWYgKElFRUUxMjc1X0NBTExfRU5UUllfRk4gKCZu
dm1lX25hbWVzcGFjZXNfYXJncykgPT0gLTEpCisgICAgICAgICAgIHsKKyAgICAgICAgICAgICBn
cnViX2RwcmludGYgKCJvZmRpc2siLCAiZmFpbGVkIHRvIGdldCB0aGUgbnZtZS1uYW1lc3BhY2Ut
bGlzdCB3aGlsZSBpdGVyYXRpbmcgRkNQIGRpc2sgcGF0aFxuIik7CisgICAgICAgICAgICAgZ3J1
Yl9pZWVlMTI3NV9jbG9zZSAoaWhhbmRsZSk7CisgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgIH0KKyAgICAgICAgIGdydWJfdWludDMyX3QgKm5hbWVzcGFjZXMgPSAoZ3J1Yl91aW50
MzJfdCopIG52bWVfbmFtZXNwYWNlc19hcmdzLnRhYmxlOworICAgICAgICAgZ3J1Yl9kcHJpbnRm
ICgib2ZkaXNrIiwgIk5WTWVvRjogZm91bmQgJWQgbmFtZXNwYWNlc1xuIiwgKGludCludm1lX25h
bWVzcGFjZXNfYXJncy5uZW50cmllcyk7CisJICBncnViX2llZWUxMjc1X2Nsb3NlIChpaGFuZGxl
KTsKKyAgICAgICAgIG5hbWVzcGFjZV9pbmRleCA9IDA7CisgICAgICAgICBmb3IgKG5hbWVzcGFj
ZV9pbmRleD0wOyBuYW1lc3BhY2VfaW5kZXggPCBudm1lX25hbWVzcGFjZXNfYXJncy5uZW50cmll
czsgbmFtZXNwYWNlX2luZGV4KyspCisgICAgICAgICAgIHsKKwkgICAgICBncnViX3NucHJpbnRm
IChidWZwdHIrYnVmcHRyX3BvczIsIDUxMiwgIi9uYW1lc3BhY2VAJSJQUkl4R1JVQl9VSU5UMzJf
VCwgbmFtZXNwYWNlc1tuYW1lc3BhY2VfaW5kZXhdKTsKKyAgICAgICAgICAgICBncnViX2Rwcmlu
dGYgKCJvZmRpc2siLCAiTlZNZW9GOiBuYW1lc3BhY2U9JXNcbiIsIGJ1Zik7CisgICAgICAgICAg
ICAgZGV2X2l0ZXJhdGVfcmVhbCAoYnVmLCBidWYpOworICAgICAgICAgICB9CisgICAgICAgICBk
ZXZfaXRlcmF0ZV9yZWFsIChidWYsIGJ1Zik7CisJfQorICAgIH0KKyAgZ3J1Yl9mcmVlIChidWYp
OworICBncnViX2ZyZWUgKG52bWVfY29udHJvbGxlcnNfdGFibGUpOworICByZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCitkZXZfaXRlcmF0ZSAoY29uc3Qgc3RydWN0IGdydWJfaWVlZTEyNzVfZGV2
YWxpYXMgKmFsaWFzKQoreworICBpZiAoZ3J1Yl9zdHJjbXAgKGFsaWFzLT50eXBlLCAiZmNwIikg
PT0gMCkKKyAgICB7CisgICAgICAvKiBJdGVyYXRlIGRpc2tzICovCisgICAgICBkZXZfaXRlcmF0
ZV9mY3BfZGlza3MgKGFsaWFzKTsKKyAgICAgIC8qIEl0ZXJhdGUgTlZNZW9GICovCisgICAgICBk
ZXZfaXRlcmF0ZV9mY3BfbnZtZW9mIChhbGlhcyk7CiAgICAgfQogICBlbHNlIGlmIChncnViX3N0
cmNtcCAoYWxpYXMtPnR5cGUsICJ2c2NzaSIpID09IDApCiAgICAgewotLSAKMi40Ny4xCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBt
YWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK