[sane-devel] official ZETA port diffs

François Revol revol@free.fr
Tue Jul 12 13:58:09 UTC 2005


This is a multipart message in MIME format.

------------Zoidberg-BeMail-temp--------
Mime-Version: 1.0
Content-Type: text/plain; charset="windows-1252"
Content-Transfer-Encoding: quoted-printable

Hi,
I'm sending the diffs against sane-backends-1.0.15 for the sane port we 
use in ZETA, which is based on the BeSANE port from intuiware, and 
subsequent work from yellowTAB (usb support, ...).

Parts of it are of general interest, like checks for header files, and 
the removal of libusb dependancy in the sm3600 backend.

We did our best to clean it up, but there might still be some margin of 
improvement in the code, though I hope most of it will make to cvs. 
Comments are welcome.

Yours,

Fran=E7ois Revol
francois dot revol at yellowtab dot com
--
Software Architect
YellowTab GmbH
http://www.yellowtab.com/

------------Zoidberg-BeMail-temp--------
Content-Transfer-Encoding: base64
Content-Disposition: Attachment
Content-Type: text/plain; name=sane-backends-1.0.15.zeta.patch.001.txt

VGhpcyBpcyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBzYW5lLWJhY2tlbmRzLTEuMC4xNSB1c2VkIGlu
IFpldGEgYW5kIHRoZSBvZmZpY2lhbCBhcmNoaXZlLgpJdCBpcyB1c2VkIHdpdGggdGhlIGZvbGxv
d2luZyBjb25maWd1cmUgb3B0aW9uczoKCkJPT1RSRUxfSU5TVEFMTF9ESVIgOj0gYmVvcwpJTlNU
QUxMX0RJUiA6PSAvYm9vdC8kKEJPT1RSRUxfSU5TVEFMTF9ESVIpCi4vY29uZmlndXJlIC0tcHJl
Zml4PSQoSU5TVEFMTF9ESVIpIFwKLS1iaW5kaXI9JChJTlNUQUxMX0RJUikvYmluIFwKLS1zYmlu
ZGlyPSQoSU5TVEFMTF9ESVIpL2JpbiBcCi0tbGliZGlyPSQoSU5TVEFMTF9ESVIpL3N5c3RlbS9s
aWIgXAotLWluY2x1ZGVkaXI9JChJTlNUQUxMX0RJUikvZXRjL2RldmVsb3AvemV0YS1yMS1nY2My
LXg4Ni9oZWFkZXJzIFwKLS1kYXRhZGlyPSQoSU5TVEFMTF9ESVIpL2V0YyBcCi0td2l0aC1kb2Nk
aXI9JChJTlNUQUxMX0RJUikvZXRjL0xhbmd1YWdlL2RvY3VtZW50YXRpb24vZW5VUy9zYW5lIFwK
LS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS10cmFuc2xhdGlvbnMgLS1lbmFibGUtcG5tLWJhY2tl
bmQKClNvbWUgbm90ZXMgb24gdGhlIGNoYW5nZXMsIHNvbWUgZnJvbSB0aGUgb2xkIEJlU0FORSBw
b3J0LCBzb21lIGJ5IG1lOgotIHRoZSBiYWNrZW5kcyBhcmUgbm90IGluc3RhbGxlZCBhcyBzaGFy
ZWQgbGlicyBidXQgYXMgYWRkLW9ucywgd2hpY2ggYXJlIHNoYXJlZCBsaWJzIApidXQgaW4gYSBz
cGVjaWZpYyBmb2xkZXIgaW4gWy9zeXN0ZW18fl0vY29uZmlnL2FkZC1vbnMvIG5hbWVkIFNBTkUv
LgpUaGUgaW5zdGFsbCB0YXJnZXQgaGFzIGJlZW4gY2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGlz
LAotIHNvbWUgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gQmVPUy9aRVRBIChpcGMuaCwgLi4uKSwKLSBi
YWNrZW5kIGZ1bmN0aW9uIG5hbWVzIGdldCBhIHByZWZpeCwgSSBzdXBwb3NlIHRvIGF2b2lkIG5h
bWVzcGFjZSBjbGFzaGVzLAotIHRob3VnaCB3ZSBkbyBoYXZlIGEgbGliZGwgdG8gaW1wbGVtZW50
IGRsX29wZW4sIHRoZSBuYXRpdmUgd2F5IGlzIHByZWZlcmVkLAotIHdlIGRvbid0IGhhdmUgYSBs
aWJ1c2IgcG9ydCwgYW5kIEkgaGFkIGEgc20zNjAwIGFyb3VuZCwgc28gSSBwb3J0ZWQgdGhlIGJh
Y2tlbmQgb3ZlciB0byBzYW5laSAKKHdhcyBpdCBzb21lIGtpbmQgb2YgZm9yZWlnbiBjb2RlIG5v
dCBmdWxseSBwb3J0ZWQgPz8pLAotIHNuYXBzY2FuIG11dGV4IHN0dWZmIGltcGxlbWVudGVkIG5h
dGl2ZWx5LCBjb3VsZG4ndCB0ZXN0IGl0IHRob3VnaCwgbm90IGV2ZW4gc3VyZSBpdCBpcyB1c2Vk
LAotIGFkZGVkIGEgLS13aXRoLWRvY2Rpcj0gY29uZmlndXJlIGFyZywKLSBCZU9TIGhhcyBhIGJy
b2tlbiBnZXRbbmFtZXxhZGRyXWluZm8oKSBmcm9tIGJpbmQuIFRoaXMgaXMgZml4ZWQgaW4gWkVU
QSBSMS4KLSBsaWJ0b29sIG5lZWRzIC1uby11bmRlZmluZWQgKHRoaXMgc2hvdWxkIHJlYWxseSBi
ZSBvbiBieSBkZWZhdWx0IGFueXdheSwgZm9yIGNvZGUgY29ycmVjdG5lc3MpLAotIHZhcmlvdXMg
VlBBVEggZml4ZXMsCi0gY2hlY2sgZm9yIDxiZS9kcml2ZXJzL1VTQl9zY2FubmVyLmg+LCBidXQg
bm90IHVzZWQgeWV0LAotIGdldHBhc3MgcmVwbGFjZW1lbnQsCi0gbm8gU19JRlNPQ0sgKHNvY2tl
dHMgYXJlIGZkcyB0byAvZGV2L25ldC9hcGkpLAotIHN0dWIgcGlvIGNvZGUsIHVudGVzdGVkLAoK
RnJhbmNvaXMgUmV2b2wuCgoKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9S
RUFETUUuemV0YSBzYW5lL1JFQURNRS56ZXRhCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAu
MTUvUkVBRE1FLnpldGEJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBzYW5lL1JFQURNRS56
ZXRhCVR1ZSBGZWIgMTUgMTU6MzA6NDMgMjAwNQpAQCAtMCwwICsxLDI2IEBACitTQU5FIGFuZCBa
ZXRhCistLS0tLS0tLS0tLS0tCisKK1RoZSBaZXRhIHBvcnQgaXMgYmFzZWQgb24gZXhpc3Rpbmcg
QmVPUyBwb3J0LCB3aXRoIHNvbWUgY2hhbmdlcyAKK3RvIGFjY29tb2RhdGUgeWVsbG93VEFCJ3Mg
aW50ZXJuYWwgYnVpbGQgcHJvY2VkdXJlLCBhbmQgc29tZSBuZXcgCitjb252ZW50aW9ucyBicm91
Z2h0IHVwIGJ5IFpldGEuCisKK0NmLiBSRUFETUUuYmVvcyBmb3IgbW9yZSBoaXN0b3JpY2FsIHN0
dWZmLgorCitTQU5FIDEuMC45IHdhcyB1cGRhdGVkIGZvciBaZXRhIGJ5IEl0aGFtYXIgQWRlbWEg
Zm9yIHllbGxvd1RBQi4KKworU0FORSAxLjAuMTUgd2FzIHVwZGF0ZWQgZm9yIEJlT1MgYW5kIFpl
dGEgYnkgRnJhbsOnb2lzIFJldm9sIGZvciB5ZWxsb3dUQUIuCisKK1pldGEgdXNlcyBhIG1vZGlm
aWVkIHZlcnNpb24gb2YgUGhpbGlwcGUgSG91ZG9pbidzIFNhbml0eSBHVUkgZnJvbnRlbmQuCito
dHRwOi8vcGhpbGlwcGUuaG91ZG9pbi5mcmVlLmZyL3BoaWwvYmVvcy9zYW5pdHkvaW5kZXgtZW4u
aHRtbAorCitTQU5FIHdhcyByZXBvcnRlZCB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjb25m
aWd1cmF0aW9uIGFuZCBmZWF0dXJlczoKKworUGxhdGZvcm06IFpldGEgUjEgKD09IEJlT1MgUjYu
eCkgaXg4NgorTGF0ZXN0IFNBTkUgdmVyc2lvbiB0ZXN0ZWQ6IDEuMC4xNQorQ29tcGlsZXI6IGdj
YyAyLjk1LjMKK1VzZXItbGV2ZWwgU0NTSSBzdXBwb3J0OiB5ZXMKK1VTQiBzdXBwb3J0OiB5ZXMK
K1NoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ6IHllcworRHluYW1pYyBsb2FkaW5nIHN1cHBvcnQ6IHll
cyAgCitYMTEgY2xpZW50czogbm8KZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4x
NS9iYWNrZW5kL01ha2VmaWxlLmluIHNhbmUvYmFja2VuZC9NYWtlZmlsZS5pbgotLS0gL0RldmVs
L3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvTWFrZWZpbGUuaW4JU3VuIE9jdCAxMCAxNDo0
Mzo0MiAyMDA0CisrKyBzYW5lL2JhY2tlbmQvTWFrZWZpbGUuaW4JV2VkIEFwciAgNiAxNTozODo0
NCAyMDA1CkBAIC0yNSw2ICsyNSw3IEBACiBpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACiBvbGRp
bmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCiBjb25maWdkaXIgPSAke3N5c2NvbmZkaXJ9L3NhbmUu
ZAorQkVPU19BRERPTkRJUiA9IEBCRU9TX0FERE9ORElSQAogCiBWX01BSk9SID0gQFZfTUFKT1JA
CiBWX01JTk9SID0gQFZfTUlOT1JACkBAIC0xNzYsNyArMTc3LDE3IEBACiAKIGFsbDoJJChMSUJT
KSBsaWJzYW5lLmxhCiAKLWluc3RhbGw6CitpbnN0YWxsOiBpbnN0YWxsLWJlQEJFX0lOU1RBTExf
RkxBVk9SQCBpbnN0YWxsLWxpYnNhbmUgaW5zdGFsbC1iZWNmZworCisjIG5lZWQgdG8gY291bnRl
ciBsaWJ0b29sIG1hZG5lc3MgaGVyZS4uLgoraW5zdGFsbC1iZS1iZW9zOgorCSQoTUtESVIpICQo
REVTVERJUikkKGxpYmRpcikgJChERVNURElSKSQobGlic2FuZWRpcikgJChERVNURElSKSQoY29u
ZmlnZGlyKSAkKERFU1RESVIpJChCRU9TX0FERE9ORElSKQorCUBsaXN0PSIkKEFMTF9CQUNLRU5E
UykiOyBmb3IgYmUgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvIGluc3RhbGxpbmcgJCR7YmV9IGlu
ICQoQkVPU19BRERPTkRJUikvJCR7YmV9Li4uOyBcCisJICBjcCAtcCAubGlicy9saWJzYW5lLSQk
e2JlfS5zbyAkKERFU1RESVIpJChCRU9TX0FERE9ORElSKS8kJHtiZX0gfHwgZXhpdCAxOyBcCisJ
ZG9uZQorCitpbnN0YWxsLWJlOgogCSQoTUtESVIpICQoREVTVERJUikkKGxpYmRpcikgJChERVNU
RElSKSQobGlic2FuZWRpcikgJChERVNURElSKSQoY29uZmlnZGlyKQogCUBsaXN0PSIkKExJQlMp
IjsgZm9yIGJlIGluICQkbGlzdDsgZG8gXAogCSAgZWNobyBpbnN0YWxsaW5nICQke2JlfSBpbiAk
KGxpYnNhbmVkaXIpLyQke2JlfS4uLjsgXApAQCAtMjAxLDggKzIxMiwxMiBAQAogIwkgIG5uPWBl
Y2hvICQkbiB8IHNlZCAncyxebGlic2FuZS1kbGwsbGlic2FuZSwnYDsgXAogIwkgIChjZCAuLjsg
aWYgdGVzdCAtZiBzYW5lLyQkbiA7IHRoZW4gJChMTl9TKSBzYW5lLyQkbiAkJG5uOyBmaTsgKTsg
XAogIwlkb25lIHx8IGV4aXQgMQorCitpbnN0YWxsLWxpYnNhbmU6CiAJJChMSUJUT09MKSAkKE1J
TlNUKSAkKElOU1RBTExfUFJPR1JBTSkgbGlic2FuZS5sYSBcCiAgICAgICAgICAgJChERVNURElS
KSQobGliZGlyKS9saWJzYW5lLmxhCisKK2luc3RhbGwtYmVjZmc6CiAJQGxpc3Q9IiQoQ09ORklH
UykiOyBmb3IgY2ZnIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAhIC1yICQoc3JjZGlyKS8k
JHtjZmd9OyB0aGVuIGNvbnRpbnVlOyBmaTsgXAogCSAgaWYgdGVzdCAtZiAkKERFU1RESVIpJChj
b25maWdkaXIpLyQke2NmZ307IHRoZW4gXApAQCAtMzk0LDYgKzQwOSw3IEBACiBsaWJzYW5lLXNo
YXJwLmxhOiAuLi9zYW5laS9zYW5laV9jb25zdHJhaW5fdmFsdWUubG8KIGxpYnNhbmUtc2hhcnAu
bGE6IC4uL3NhbmVpL3NhbmVpX3Njc2kubG8KIGxpYnNhbmUtc20zNjAwLmxhOiAuLi9zYW5laS9z
YW5laV9jb25zdHJhaW5fdmFsdWUubG8KK2xpYnNhbmUtc20zNjAwLmxhOiAuLi9zYW5laS9zYW5l
aV91c2IubG8KIGxpYnNhbmUtc25hcHNjYW4ubGE6IC4uL3NhbmVpL3NhbmVpX2NvbmZpZzIubG8K
IGxpYnNhbmUtc25hcHNjYW4ubGE6IC4uL3NhbmVpL3NhbmVpX2NvbnN0cmFpbl92YWx1ZS5sbwog
bGlic2FuZS1zbmFwc2Nhbi5sYTogLi4vc2FuZWkvc2FuZWlfc2NzaS5sbwpkaWZmIC11ck4gL0Rl
dmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaCBzYW5lL2Jh
Y2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaAotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2Jh
Y2tlbmQvYXJ0ZWNfZXBsdXM0OHUuaAlTYXQgTWF5IDE1IDE1OjEzOjI5IDIwMDQKKysrIHNhbmUv
YmFja2VuZC9hcnRlY19lcGx1czQ4dS5oCUZyaSBGZWIgIDQgMDc6NTk6MzMgMjAwNQpAQCAtNSw3
ICs1LDkgQEAKICNpbmNsdWRlICIuLi9pbmNsdWRlL3NhbmUvc2FuZWkuaCIKICNpbmNsdWRlICIu
Li9pbmNsdWRlL3NhbmUvc2FuZW9wdHMuaCIKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRl
ZiBIQVZFX1NZU19JUENfSAogI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNlbmRpZgogI2luY2x1ZGUg
PHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAt
dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL2RsbC5jIHNhbmUvYmFja2Vu
ZC9kbGwuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvZGxsLmMJTW9u
IE1heSAyNCAyMToxMToyOSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvZGxsLmMJVGh1IEZlYiAxNyAw
Mjo0OTo1MCAyMDA1CkBAIC01MCw2ICs1MCwxMyBAQAogIyBpbmNsdWRlICJsYWxsb2NhLmgiCQkv
KiBNVVNUIGNvbWUgZmlyc3QgZm9yIEFJWCEgKi8KICNlbmRpZgogCisjaWZkZWYgX19CRU9TX18K
KyNpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKyNpbmNsdWRlIDxzdG9yYWdlL0ZpbmREaXJlY3Rvcnku
aD4KKyNpbmNsdWRlIDxrZXJuZWwvaW1hZ2UuaD4KKyNpbmNsdWRlIDxwb3NpeC9kaXJlbnQuaD4K
KyNlbmRpZgorCiAjaW5jbHVkZSAic2FuZS9jb25maWcuaCIKICNpbmNsdWRlICJsYWxsb2NhLmgi
CiAKQEAgLTE5OSw3ICsyMDYsOSBAQAogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogfQogCisjaWZuZGVmIF9fQkVPU19fCiAjaW5jbHVkZSAiZGxsLXBy
ZWxvYWQuYyIKKyNlbmRpZgogCiBzdHJ1Y3QgbWV0YV9zY2FubmVyCiB7CkBAIC0yMjQsMTEgKzIz
MywyMCBAQAogc3RhdGljIHN0cnVjdCBhbGlhcyAqZmlyc3RfYWxpYXM7CiBzdGF0aWMgU0FORV9B
dXRoX0NhbGxiYWNrIGF1dGhfY2FsbGJhY2s7CiBzdGF0aWMgc3RydWN0IGJhY2tlbmQgKmZpcnN0
X2JhY2tlbmQ7CisKKyNpZm5kZWYgX19CRU9TX18KIHN0YXRpYyBjb25zdCBjaGFyICpvcF9uYW1l
W10gPSB7CiAgICJpbml0IiwgImV4aXQiLCAiZ2V0X2RldmljZXMiLCAib3BlbiIsICJjbG9zZSIs
ICJnZXRfb3B0aW9uX2Rlc2NyaXB0b3IiLAogICAiY29udHJvbF9vcHRpb24iLCAiZ2V0X3BhcmFt
ZXRlcnMiLCAic3RhcnQiLCAicmVhZCIsICJjYW5jZWwiLAogICAic2V0X2lvX21vZGUiLCAiZ2V0
X3NlbGVjdF9mZCIKIH07CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgKm9wX25hbWVbXSA9IHsK
KyAgInNhbmVfaW5pdCIsICJzYW5lX2V4aXQiLCAic2FuZV9nZXRfZGV2aWNlcyIsICJzYW5lX29w
ZW4iLCAic2FuZV9jbG9zZSIsICJzYW5lX2dldF9vcHRpb25fZGVzY3JpcHRvciIsCisgICJzYW5l
X2NvbnRyb2xfb3B0aW9uIiwgInNhbmVfZ2V0X3BhcmFtZXRlcnMiLCAic2FuZV9zdGFydCIsICJz
YW5lX3JlYWQiLCAic2FuZV9jYW5jZWwiLAorICAic2FuZV9zZXRfaW9fbW9kZSIsICJzYW5lX2dl
dF9zZWxlY3RfZmQiCit9OworI2VuZGlmIC8qIF9fQkVPU19fICovCiAKIHN0YXRpYyB2b2lkICoK
IG9wX3Vuc3VwcG9ydGVkICh2b2lkKQpAQCAtMjk4LDYgKzMxNiw1NyBAQAogfQogI2VuZGlmCiAK
KyNpZmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KKworc3RhdGljIFNB
TkVfU3RhdHVzCitsb2FkIChzdHJ1Y3QgYmFja2VuZCAqYmUpCit7CisJLy8gdXNlIEJlT1Mga2Vy
bmVsIGZ1bmN0aW9uIHRvIGxvYWQgc2Nhbm5lciBhZGRvbnMgZnJvbSB+L2NvbmZpZy9hZGQtb25z
L1NBTkUvCisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwlpbWFnZV9pZCBpZCA9IC0xOworCWludCBp
LCB3OworCWRpcmVjdG9yeV93aGljaCB3aGljaFszXSA9IHsgQl9VU0VSX0FERE9OU19ESVJFQ1RP
UlksIEJfQ09NTU9OX0FERE9OU19ESVJFQ1RPUlksIEJfQkVPU19BRERPTlNfRElSRUNUT1JZIH07
CisJCisJLy8gbG9vayBmb3IgY29uZmlnIGZpbGVzIGluIFNBTkUvY29uZgorCWZvciAodyA9IDA7
ICh3IDwgMykgJiYgKGlkIDwgMCkgJiYgKGZpbmRfZGlyZWN0b3J5KHdoaWNoW3ddLDAsdHJ1ZSxw
YXRoLFBBVEhfTUFYKSA9PSAwKTsgdysrKQorCXsKKwkJc3RyY2F0KHBhdGgsIi9TQU5FLyIpOwor
CQlzdHJjYXQocGF0aCxiZS0+bmFtZSk7CisJCURCRygxLCAibG9hZGluZyBiYWNrZW5kICVzXG4i
LCBiZS0+bmFtZSk7CisKKwkJLyogaW5pdGlhbGl6ZSBhbGwgb3BzIHRvICJ1bnN1cHBvcnRlZCIg
c28gd2UgY2FuICJ1c2UiIHRoZSBiYWNrZW5kCisgICAgIAkgICBldmVuIGlmIHRoZSBzdHVmZiBs
YXRlciBpbiB0aGlzIGZ1bmN0aW9uIGZhaWxzICovCisJCWJlLT5sb2FkZWQgPSAxOworCQliZS0+
aGFuZGxlID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9PUFM7ICsraSkgYmUtPm9wW2ldID0g
b3BfdW5zdXBwb3J0ZWQ7CisgIAkJREJHKDIsICJkbG9wZW4oKWluZyBgJXMnXG4iLCBwYXRoKTsK
KwkJaWQ9bG9hZF9hZGRfb24ocGF0aCk7CisJCWlmIChpZCA8IDApCisJCXsKKwkJCWNvbnRpbnVl
OyAvKiB0cnkgbmV4dCBwYXRoICovCisJCX0KKyAgICAJYmUtPmhhbmRsZT0odm9pZCAqKWlkOwor
CSAgICAJCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fT1BTOyArK2kpCisgICAgCXsKKyAgICAgIAkJ
dm9pZCAqKCpvcCkgKCk7CisgICAgICAJCW9wID0gTlVMTDsKKwkgICAgICAJLyogTG9vayBmb3Ig
dGhlIHN5bWJvbCAqLworCQkJaWYgKChnZXRfaW1hZ2Vfc3ltYm9sKGlkLCBvcF9uYW1lW2ldLEJf
U1lNQk9MX1RZUEVfVEVYVCwodm9pZCAqKikmb3ApIDwgMCkgfHwgIW9wKQorCQkJICAgIERCRygy
LCAidW5hYmxlIHRvIGZpbmQgJXNcbiIsIG9wX25hbWVbaV0pOworICAgICAgCQllbHNlIGJlLT5v
cFtpXT1vcDsKKyAgICAgIAl9CisgICAgfQorCWlmIChpZCA8IDApCisgICAJeworCQlEQkcoMiwg
ImxvYWQ6IGNvdWxkbid0IGZpbmQgJXNcbiIscGF0aCk7CisgICAgIAlyZXR1cm4gU0FORV9TVEFU
VVNfSU5WQUw7CisgICAJfQorICByZXR1cm4gU0FORV9TVEFUVVNfR09PRDsKK30KKworI2Vsc2UK
IHN0YXRpYyBTQU5FX1N0YXR1cwogbG9hZCAoc3RydWN0IGJhY2tlbmQgKmJlKQogewpAQCAtNTA1
LDYgKzU3NCw3IEBACiAgIHJldHVybiBTQU5FX1NUQVRVU19VTlNVUFBPUlRFRDsKICNlbmRpZiAv
KiBIQVZFX0RMTCAqLwogfQorI2VuZGlmIC8qIF9fQkVPU19fICovCiAKIHN0YXRpYyBTQU5FX1N0
YXR1cwogaW5pdCAoc3RydWN0IGJhY2tlbmQgKmJlKQpAQCAtNTQ1LDYgKzYxNSw3IEBACiBzdGF0
aWMgdm9pZAogYWRkX2FsaWFzIChjb25zdCBjaGFyICpsaW5lX3BhcmFtKQogeworI2lmbmRlZiBf
X0JFT1NfXwogICBjb25zdCBjaGFyICpjb21tYW5kOwogICBlbnVtCiAgIHsgQ01EX0FMSUFTLCBD
TURfSElERSB9CkBAIC02MjgsMTcgKzY5OSwyNiBAQAogICAgICAgZnJlZSAoYWxpYXMpOwogICAg
IH0KICAgcmV0dXJuOworI2VuZGlmCiB9CiAKIAogU0FORV9TdGF0dXMKIHNhbmVfaW5pdCAoU0FO
RV9JbnQgKiB2ZXJzaW9uX2NvZGUsIFNBTkVfQXV0aF9DYWxsYmFjayBhdXRob3JpemUpCiB7Cisj
aWZuZGVmIF9fQkVPU19fCiAgIGNoYXIgY29uZmlnX2xpbmVbUEFUSF9NQVhdOwogICBjaGFyICpi
YWNrZW5kX25hbWU7CiAgIHNpemVfdCBsZW47CiAgIEZJTEUgKmZwOwogICBpbnQgaTsKKyNlbHNl
CisgIERJUiAqZGlyOworICBzdHJ1Y3QgZGlyZW50ICpkaXJlbnQ7CisgIGNoYXIgcGF0aFsxMDI0
XTsKKyAgZGlyZWN0b3J5X3doaWNoIHdoaWNoWzNdID0geyBCX1VTRVJfQURET05TX0RJUkVDVE9S
WSwgQl9DT01NT05fQURET05TX0RJUkVDVE9SWSwgQl9CRU9TX0FERE9OU19ESVJFQ1RPUlkgfTsK
KyAgaW50IGk7CisjZW5kaWYJCiAKICAgREJHX0lOSVQgKCk7CiAKQEAgLTY0Nyw2ICs3MjcsNyBA
QAogICBEQkcgKDEsICJzYW5lX2luaXQ6IFNBTkUgZGxsIGJhY2tlbmQgdmVyc2lvbiAlcyBmcm9t
ICVzXG4iLCBETExfVkVSU0lPTiwKICAgICAgICBQQUNLQUdFX1NUUklORyk7CiAKKyNpZm5kZWYg
X19CRU9TX18KICAgLyogY2hhaW4gcHJlbG9hZGVkIGJhY2tlbmRzIHRvZ2V0aGVyOiAqLwogICBm
b3IgKGkgPSAwOyBpIDwgTkVMRU1TIChwcmVsb2FkZWRfYmFja2VuZHMpOyArK2kpCiAgICAgewpA
QCAtNzE4LDYgKzc5OSwyOCBAQAogICAgICAgYWRkX2FsaWFzIChjb25maWdfbGluZSk7CiAgICAg
fQogICBmY2xvc2UgKGZwKTsKKworI2Vsc2UgIAorCS8vIG5vIHVnbHkgY29uZmlnIGZpbGVzLCBq
dXN0IGdldCBzY2FubmVycyBmcm9tIHRoZWlyIH4vY29uZmlnL2FkZC1vbnMvU0FORQorCS8vIGxv
b2sgZm9yIGRyaXZlcnMKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCXsKKwkJaWYgKGZpbmRf
ZGlyZWN0b3J5KHdoaWNoW2ldLDAsdHJ1ZSxwYXRoLDEwMjQpIDwgQl9PSykKKwkJCWNvbnRpbnVl
OworCQlzdHJjYXQocGF0aCwiL1NBTkUvIik7CisJCWRpcj1vcGVuZGlyKHBhdGgpOworCQlpZigh
ZGlyKSBjb250aW51ZTsgCisKKwkJd2hpbGUoKGRpcmVudD1yZWFkZGlyKGRpcikpKQorCQl7CisJ
CQlpZigoc3RyY21wKGRpcmVudC0+ZF9uYW1lLCIuIik9PTApIHx8IChzdHJjbXAoZGlyZW50LT5k
X25hbWUsIi4uIik9PTApKSBjb250aW51ZTsKKwkJCWlmKChzdHJjbXAoZGlyZW50LT5kX25hbWUs
ImRsbCIpPT0wKSkgY29udGludWU7CisJCQlhZGRfYmFja2VuZChkaXJlbnQtPmRfbmFtZSwwKTsg
CisJCX0KKwkJY2xvc2VkaXIoZGlyKTsKKwl9CisjZW5kaWYgLyogX19CRU9TX18gKi8KKwogICBy
ZXR1cm4gU0FORV9TVEFUVVNfR09PRDsKIH0KIApAQCAtNzQwLDYgKzg0MywxMCBAQAogCQkgICBi
ZS0+bmFtZSk7CiAJICAgICAgKCoob3BfZXhpdF90KWJlLT5vcFtPUF9FWElUXSkgKCk7CiAJICAg
IH0KKyNpZmRlZiBfX0JFT1NfXworCQkJLy8gdXNlIEJlT1Mga2VybmVsIGZ1bmN0aW9ucyB0byB1
bmxvYWQgYWRkLW9ucworCQkJaWYoYmUtPmhhbmRsZSkgdW5sb2FkX2FkZF9vbigoaW1hZ2VfaWQp
YmUtPmhhbmRsZSk7CQorI2Vsc2UKICNpZmRlZiBIQVZFX0RMTAogCiAjaWZkZWYgSEFWRV9ETE9Q
RU4KQEAgLTc2MCw2ICs4NjcsNyBAQAogI2VuZGlmIC8qIEhBVkVfRExPUEVOICovCiAKICNlbmRp
ZiAvKiBIQVZFX0RMTCAqLworI2VuZGlmIC8qIF9fQkVPU19fICovCiAJfQogICAgICAgaWYgKCFi
ZS0+cGVybWFuZW50KQogCXsKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9i
YWNrZW5kL3BsdXN0ZWstcHBfc2Nhbi5oIHNhbmUvYmFja2VuZC9wbHVzdGVrLXBwX3NjYW4uaAot
LS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvcGx1c3Rlay1wcF9zY2FuLmgJ
RnJpIEp1bCAxNiAxODozMzo0NSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvcGx1c3Rlay1wcF9zY2Fu
LmgJRnJpIEZlYiAgNCAxMToyNjo1MiAyMDA1CkBAIC03Miw3ICs3MiwxMSBAQAogIyBpbmNsdWRl
IDxzdGRpby5oPgogIyBpbmNsdWRlIDx1bmlzdGQuaD4KICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4K
LSMgaW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorIyBpZmRlZiBIQVZFX1NZU19TSUdOQUxfSAorIyAg
aW5jbHVkZSA8c3lzL3NpZ25hbC5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxzaWduYWwuaD4KKyMg
ZW5kaWYKICMgaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjIGlmZGVmIEhBVkVfU1lTX0lPX0gKICMg
IGluY2x1ZGUgPHN5cy9pby5oPgpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1
L2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYyBzYW5lL2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYwot
LS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20zNjAwLXNjYW51c2IuYwlG
cmkgQXByIDE2IDAwOjUxOjI1IDIwMDQKKysrIHNhbmUvYmFja2VuZC9zbTM2MDAtc2NhbnVzYi5j
CVdlZCBBcHIgMTMgMTg6MDM6MDQgMjAwNQpAQCAtNjgsNiArNjgsNyBAQAogCQkgICAgICAgaW50
ICBjY2hCdWZmZXIsCiAJCSAgICAgICBpbnQgIGNKaWZmaWVzVGltZW91dCkKIHsKKyNpZiBIQVZF
X0xJQlVTQgogICByZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHRoaXMtPmhTY2FubmVyLAogCQkJIG5S
ZXFUeXBlLAogCQkJIG5SZXF1ZXN0LApAQCAtNzYsNiArNzcsMTkgQEAKIAkJCSBwQnVmZmVyLAog
CQkJIGNjaEJ1ZmZlciwKIAkJCSBjSmlmZmllc1RpbWVvdXQpOworI2Vsc2UKKyAgaW50IGVycjsK
KyAgZXJyID0gc2FuZWlfdXNiX2NvbnRyb2xfbXNnKHRoaXMtPmhTY2FubmVyLAorCQkJIG5SZXFU
eXBlLAorCQkJIG5SZXF1ZXN0LAorCQkJIG5WYWx1ZSwKKwkJCSBuSW5kZXgsCisJCQkgY2NoQnVm
ZmVyLC8vPworCQkJIHBCdWZmZXIpOworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisgIHJl
dHVybiBjY2hCdWZmZXI7CisjZW5kaWYKIH0KIAogLyogKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTAsMTEg
KzEwNCwyMyBAQAogCSAgICAgaW50IGNjaE1heCwKIAkgICAgIGludCBjSmlmZmllc1RpbWVvdXQp
CiB7CisjaWYgSEFWRV9MSUJVU0IKICAgcmV0dXJuIHVzYl9idWxrX3JlYWQodGhpcy0+aFNjYW5u
ZXIsCiAJCSAgICAgICBuRW5kUG9pbnQsCiAJCSAgICAgICBwQnVmZmVyLAogCQkgICAgICAgY2No
TWF4LAogCQkgICAgICAgY0ppZmZpZXNUaW1lb3V0KTsKKyNlbHNlCisgIGludCBlcnI7CisgIHNp
emVfdCBzeiA9IGNjaE1heDsKKyAgZXJyID0gc2FuZWlfdXNiX3JlYWRfYnVsayh0aGlzLT5oU2Nh
bm5lciwKKwkJICAgICAgIC8vbkVuZFBvaW50LAorCQkgICAgICAgcEJ1ZmZlciwKKwkJICAgICAg
ICZzeik7CisgIGlmIChlcnIpCisgICAgcmV0dXJuIGVycjsKKyAgcmV0dXJuIHN6OworI2VuZGlm
CiB9CiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMxMCw3ICszMzYsMTMgQEAKIAl7CiAJICByYz1T
ZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLAogCQkgICAgICAiYnVsayByZWFkIG9m
ICVkIGJ5dGVzIGZhaWxlZDogJXMiLAotCQkgICAgICBjY2hDaHVuayx1c2Jfc3RyZXJyb3IoKSk7
CisJCSAgICAgIGNjaENodW5rLAorI2lmIEhBVkVfTElCVVNCCisJCSAgICAgIHVzYl9zdHJlcnJv
cigpCisjZWxzZQorCQkgICAgICAidW5rbm93biIKKyNlbmRpZgorCQkgICAgICApOwogCSAgY29u
dGludWU7CiAJfQogICAgIH0KQEAgLTM3MSw3ICs0MDMsMTMgQEAKICAgICAgIGVsc2UKIAlyYz1T
ZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLAogCQkgICAgImJ1bGsgcmVhZCBvZiAl
ZCBieXRlcyBmYWlsZWQ6ICVzIiwKLQkJICAgIGNjaENodW5rLHVzYl9zdHJlcnJvcigpKTsKKwkJ
ICAgIGNjaENodW5rLAorI2lmIEhBVkVfTElCVVNCCisJCSAgICAgIHVzYl9zdHJlcnJvcigpCisj
ZWxzZQorCQkgICAgICAidW5rbm93biIKKyNlbmRpZgorCQkgICAgICApOwogICAgIH0KICAgZHBy
aW50ZihERUJVR19DT01NLCJ3cml0aW5nICVkIGJ5dGVzXG4iLGNjaFJlYWQpOwogICAKZGlmZiAt
dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NtMzYwMC5jIHNhbmUvYmFj
a2VuZC9zbTM2MDAuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20z
NjAwLmMJRnJpIEFwciAzMCAyMjo1OTowNSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvc20zNjAwLmMJ
V2VkIEFwciAxMyAxODowMzowNSAyMDA1CkBAIC02MCw3ICs2MCwxMiBAQAogI2luY2x1ZGUgPHN0
cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpZiBIQVZFX0xJQlVTQgogI2luY2x1ZGUg
PHVzYi5oPgorI2Vsc2UKKyNpbmNsdWRlICIuLi9pbmNsdWRlL3NhbmUvc2FuZWlfdXNiLmgiCitz
dHJ1Y3QgdXNiX2RldmljZSB7fTsKKyNlbmRpZgogCiAjZGVmaW5lIEJVSUxECTUKIApAQCAtMzUy
LDEyICszNTcsMzkgQEAKICAgcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CiB9CiAKKyNpZiAhSEFW
RV9MSUJVU0IKK3N0YXRpYyBTQU5FX1N0YXR1cyBzbV91c2JfYXR0YWNoKCBTQU5FX1N0cmluZ19D
b25zdCBkZXZfbmFtZSApCit7CisgIGludCBmZDsKKyAgU0FORV9TdGF0dXMgZXJyOworICBTQU5F
X1dvcmQgdiwgcDsKKyAgVE1vZGVsIG1vZGVsOworICBlcnIgPSBzYW5laV91c2Jfb3BlbihkZXZf
bmFtZSwgJmZkKTsKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworICBlcnIgPSBzYW5laV91
c2JfZ2V0X3ZlbmRvcl9wcm9kdWN0KGZkLCAmdiwgJnApOworICBpZiAoZXJyKQorICAgeworICAg
IHNhbmVpX3VzYl9jbG9zZShmZCk7CisgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgREJHKERFQlVH
X0pVTkssImZvdW5kIGRldiAlMDRYLyUwNFgsICVzXG4iLCB2LCBwLCBkZXZfbmFtZSk7CisgIG1v
ZGVsPUdldFNjYW5uZXJNb2RlbCh2LCBwKTsKKyAgaWYgKG1vZGVsIT11bmtub3duKQorICAgIHsK
KyAgICAgIGNoYXIgYWNoWzEwMF07CisgICAgICBSZWdpc3RlclNhbmVEZXYoTlVMTCxtb2RlbCxk
ZXZfbmFtZSk7CisgICAgfQorICBzYW5laV91c2JfY2xvc2UoZmQpOworfQorI2VuZGlmCisKIFNB
TkVfU3RhdHVzCiBzYW5lX2luaXQgKFNBTkVfSW50ICp2ZXJzaW9uX2NvZGUsIFNBTkVfQXV0aF9D
YWxsYmFjayBhdXRoQ0IpCiB7CiAgIHN0cnVjdCB1c2JfYnVzICAgICpwYnVzOwogICBzdHJ1Y3Qg
dXNiX2RldmljZSAqcGRldjsKLSAgaW50ICAgICAgICAgICAgICAgIGlCdXMscmM7CisgIGludCAg
ICAgICAgICAgICAgICBpQnVzLHJjLGk7CiAKICAgREJHX0lOSVQoKTsKIApAQCAtMzczLDYgKzQw
NSw3IEBACiAKICAgcGRldkZpcnN0PU5VTEw7CiAKKyNpZiBIQVZFX0xJQlVTQgogICB1c2JfaW5p
dCgpOwogICByYz11c2JfZmluZF9idXNzZXMoKTsKICAgaWYgKHJjKQpAQCAtNDA0LDYgKzQzNywx
MyBAQAogCSAgICB9CiAJfQogICAgIH0KKyNlbHNlCisgIAorICBzYW5laV91c2JfaW5pdCgpOwor
ICBmb3IgKGkgPSAwOyBhU2Nhbm5lcnNbaV0uaWRQcm9kdWN0OyBpKyspIHsKKyAgICBzYW5laV91
c2JfZmluZF9kZXZpY2VzKFNDQU5ORVJfVkVORE9SLCBhU2Nhbm5lcnNbaV0uaWRQcm9kdWN0LCBz
bV91c2JfYXR0YWNoKTsKKyAgfQorI2VuZGlmCiAgIHJldHVybiBTQU5FX1NUQVRVU19HT09EOwog
fQogCkBAIC00NjMsOCArNTAzLDExIEBACiAgIGlmIChkZXZpY2VuYW1lWzBdKSAvKiBzZWxlY3Rl
ZCAqLwogICAgIHsKICAgICAgIGZvciAocGRldj1wZGV2Rmlyc3Q7IHBkZXY7IHBkZXY9cGRldi0+
cE5leHQpCit7CitEQkcoREVCVUdfVkVSQk9TRSwiJXM8PiVzXG4iLGRldmljZW5hbWUsIHBkZXYt
PnNhbmUubmFtZSk7CiAJaWYgKCFzdHJjbXAoZGV2aWNlbmFtZSxwZGV2LT5zYW5lLm5hbWUpKQog
CSAgYnJlYWs7Cit9CiAgICAgICAvKiBubyBkeW5hbWljIHBvc3QtcmVnaXN0cmF0aW9uICovCiAg
ICAgfQogICBlbHNlCkBAIC00ODEsMTQgKzUyNCwyMSBAQAogICBwaW5zdEZpcnN0PXRoaXM7CiAg
IHRoaXMtPm1vZGVsPXBkZXYtPm1vZGVsOyAvKiBtZW1vcml6ZSBtb2RlbCAqLwogICAvKiBvcGVu
IGFuZCBwcmVwYXJlIFVTQiBzY2FubmVyIGhhbmRsZSAqLworI2lmIEhBVkVfTElCVVNCCiAgIHRo
aXMtPmhTY2FubmVyPXVzYl9vcGVuKHBkZXYtPnBkZXYpOwogICBpZiAoIXRoaXMtPmhTY2FubmVy
KQogICAgIHJldHVybiBTZXRFcnJvcih0aGlzLFNBTkVfU1RBVFVTX0lPX0VSUk9SLCAiY2Fubm90
IG9wZW4gc2Nhbm5lciBkZXZpY2UiKTsKKyNlbHNlCisgIGlmIChzYW5laV91c2Jfb3BlbihkZXZp
Y2VuYW1lLCAmdGhpcy0+aFNjYW5uZXIpIDwgMCkKKyAgICByZXR1cm4gU2V0RXJyb3IodGhpcyxT
QU5FX1NUQVRVU19JT19FUlJPUiwgImNhbm5vdCBvcGVuIHNjYW5uZXIgZGV2aWNlIik7CisjZW5k
aWYKICAgcmM9U0FORV9TVEFUVVNfR09PRDsKKyNpZiBIQVZFX0xJQlVTQgogICBpZiAodXNiX2Ns
YWltX2ludGVyZmFjZSh0aGlzLT5oU2Nhbm5lciwgMCkpCiAgICAgcmV0dXJuIFNldEVycm9yKHRo
aXMsU0FORV9TVEFUVVNfSU9fRVJST1IsICJjYW5ub3QgY2xhaW0gSUYiKTsKICAgaWYgKHVzYl9z
ZXRfY29uZmlndXJhdGlvbih0aGlzLT5oU2Nhbm5lciwgMSkpCiAgICAgcmV0dXJuIFNldEVycm9y
KHRoaXMsU0FORV9TVEFUVVNfSU9fRVJST1IsICJjYW5ub3Qgc2V0IFVTQiBjb25maWcgMSIpOwor
I2VuZGlmCiAKICAgdGhpcy0+cXVhbGl0eT1mYXN0OwogICByZXR1cm4gSW5pdE9wdGlvbnModGhp
cyk7CkBAIC01MDQsOCArNTU0LDEzIEBACiAgICAgewogICAgICAgaWYgKHRoaXMtPnN0YXRlLmJT
Y2FubmluZykKIAlFbmRTY2FuKHRoaXMpOworI2lmIEhBVkVfTElCVVNCCiAgICAgICB1c2JfY2xv
c2UodGhpcy0+aFNjYW5uZXIpOwogICAgICAgdGhpcy0+aFNjYW5uZXI9TlVMTDsKKyNlbHNlCisg
ICAgICBzYW5laV91c2JfY2xvc2UodGhpcy0+aFNjYW5uZXIpOworICAgICAgdGhpcy0+aFNjYW5u
ZXI9LTE7CisjZW5kaWYKICAgICB9CiAgIFJlc2V0Q2FsaWJyYXRpb24odGhpcyk7IC8qIHJlbGVh
c2UgY2FsaWJyYXRpb24gZGF0YSAqLwogICAvKiB1bmxpbmsgYWN0aXZlIGRldmljZSBlbnRyeSAq
LwpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2JhY2tlbmQvc20zNjAwLmgg
c2FuZS9iYWNrZW5kL3NtMzYwMC5oCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvYmFj
a2VuZC9zbTM2MDAuaAlGcmkgQXByIDMwIDIyOjU4OjI4IDIwMDQKKysrIHNhbmUvYmFja2VuZC9z
bTM2MDAuaAlXZWQgQXByIDEzIDE4OjAzOjA1IDIwMDUKQEAgLTE5MCw3ICsxOTAsMTEgQEAKICAg
VFF1YWxpdHkgICAgICAgICAgIHF1YWxpdHk7CiAgIFRNb2RlICAgICAgICAgICAgICBtb2RlOwog
ICBUTW9kZWwgICAgICAgICAgICAgbW9kZWw7CisjaWYgSEFWRV9MSUJVU0IKICAgdXNiX2Rldl9o
YW5kbGUgICAgKmhTY2FubmVyOworI2Vsc2UKKyAgaW50ICAgICAgICAgICAgICAgIGhTY2FubmVy
OworI2VuZGlmCiAgIEZJTEUgICAgICAgICAgICAgICpmaExvZzsKICAgRklMRSAgICAgICAgICAg
ICAgKmZoU2NhbjsKICAgaW50ICAgICAgICAgICAgICAgIGljaFBhZ2VCdWZmZXI7IC8qIHdyaXRl
IHBvc2l0aW9uIGluIGZ1bGwgcGFnZSBidWZmZXIgKi8KZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJh
Y2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBzY2FuLW11dGV4LmMgc2FuZS9iYWNrZW5kL3NuYXBz
Y2FuLW11dGV4LmMKLS0tIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBz
Y2FuLW11dGV4LmMJRnJpIEFwciAxNiAwMDo1MToyNSAyMDA0CisrKyBzYW5lL2JhY2tlbmQvc25h
cHNjYW4tbXV0ZXguYwlGcmkgRmViICA0IDE1OjQyOjM3IDIwMDUKQEAgLTM5LDcgKzM5LDM1IEBA
CiAgIHdoZXRoZXIgdG8gcGVybWl0IHRoaXMgZXhjZXB0aW9uIHRvIGFwcGx5IHRvIHlvdXIgbW9k
aWZpY2F0aW9ucy4KICAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIGRlbGV0ZSB0aGlzIGV4Y2Vw
dGlvbiBub3RpY2UuKi8KICAgCi0jaWYgZGVmaW5lZCBVU0VfUFRIUkVBRCB8fCBkZWZpbmVkIEhB
VkVfT1MyX0gKKyNpZiBkZWZpbmVkIF9fQkVPU19fCisKKyNpbmNsdWRlIDxPUy5oPgorI2RlZmlu
ZSBzbmFwc2Nhbl9tdXRleF90IHNlbV9pZAorCitzdGF0aWMgaW50IHNuYXBzY2FuaV9tdXRleF9v
cGVuKHNuYXBzY2FuX211dGV4X3QqIGFfc2VtLCBjb25zdCBjaGFyKiBkZXYgVU5VU0VEQVJHKQor
eworICAgICphX3NlbSA9IGNyZWF0ZV9zZW0oMSwgInNuYXBzY2FuX211dGV4Iik7CisgICAgcmV0
dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXBzY2FuaV9tdXRleF9jbG9zZShzbmFwc2Nhbl9t
dXRleF90KiBhX3NlbSkKK3sKKyAgICBkZWxldGVfc2VtKCphX3NlbSk7Cit9CisKK3N0YXRpYyB2
b2lkIHNuYXBzY2FuaV9tdXRleF9sb2NrKHNuYXBzY2FuX211dGV4X3QqIGFfc2VtKQoreworICAg
IGFjcXVpcmVfc2VtKCphX3NlbSk7Cit9CisKK3N0YXRpYyB2b2lkIHNuYXBzY2FuaV9tdXRleF91
bmxvY2soc25hcHNjYW5fbXV0ZXhfdCogYV9zZW0pCit7CisgICAgcmVsZWFzZV9zZW0oKmFfc2Vt
KTsKK30KKworCisKKyNlbGlmIGRlZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09T
Ml9ICiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAjZGVmaW5lIHNuYXBzY2FuX211dGV4X3QgcHRo
cmVhZF9tdXRleF90CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvYmFja2Vu
ZC9zbmFwc2Nhbi11c2IuYyBzYW5lL2JhY2tlbmQvc25hcHNjYW4tdXNiLmMKLS0tIC9EZXZlbC9z
YW5lLWJhY2tlbmRzLTEuMC4xNS9iYWNrZW5kL3NuYXBzY2FuLXVzYi5jCVN1biBPY3QgIDMgMTk6
MzQ6MzYgMjAwNAorKysgc2FuZS9iYWNrZW5kL3NuYXBzY2FuLXVzYi5jCUZyaSBGZWIgIDQgMTY6
MDk6NTggMjAwNQpAQCAtNzYsNyArNzYsNyBAQAogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiAK
LXN0YXRpYyBzbmFwc2Nhbl9tdXRleF90IHNlbV9pZDsKK3N0YXRpYyBzbmFwc2Nhbl9tdXRleF90
IHNuYXBzY2FuX211dGV4Owogc3RhdGljIHNlbnNlX2hhbmRsZXJfdHlwZSB1c2Jfc2Vuc2VfaGFu
ZGxlcjsKIHN0YXRpYyB2b2lkKiB1c2JfcHNzOwogCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogICAg
IHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJmFsbCwgJm9sZHNldCk7CiAKICAgICAvKiBNYWtlIHN1
cmUgd2UgYXJlIGFsb25lICovCi0gICAgc25hcHNjYW5pX211dGV4X2xvY2soJnNlbV9pZCk7Cisg
ICAgc25hcHNjYW5pX211dGV4X2xvY2soJnNuYXBzY2FuX211dGV4KTsKIAogICAgIHN0YXR1cyA9
IHVzYl9jbWQoZmQsc3JjLHNyY19zaXplLGRzdCxkc3Rfc2l6ZSk7CiAKLSAgICBzbmFwc2Nhbmlf
bXV0ZXhfdW5sb2NrKCZzZW1faWQpOworICAgIHNuYXBzY2FuaV9tdXRleF91bmxvY2soJnNuYXBz
Y2FuX211dGV4KTsKIAogICAgIC8qIE5vdyBpdCBpcyBvayB0byBiZSBraWxsZWQgKi8KICAgICBz
aWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7CkBAIC0xNTksNyArMTU5LDcg
QEAKIAogICAgIERCRyAoRExfQ0FMTF9UUkFDRSwgIiVzKCVzKVxuIiwgbWUsIGRldik7CiAKLSAg
ICBpZighc25hcHNjYW5pX211dGV4X29wZW4oJnNlbV9pZCwgZGV2KSkgeworICAgIGlmKCFzbmFw
c2NhbmlfbXV0ZXhfb3Blbigmc25hcHNjYW5fbXV0ZXgsIGRldikpIHsKICAgICAgICAgREJHIChE
TF9NQUpPUl9FUlJPUiwgIiVzOiBDYW4ndCBnZXQgc2VtYXBob3JlXG4iLCBtZSk7CiAgICAgICAg
IHJldHVybiBTQU5FX1NUQVRVU19JTlZBTDsKICAgICB9CkBAIC0yMjMsNyArMjIzLDcgQEAKICAg
ICB9CiAgICAgdXJiX2NvdW50ZXJzLT5yZWFkX3VyYnMgPSAwOwogICAgIHVyYl9jb3VudGVycy0+
d3JpdGVfdXJicyA9IDA7Ci0gICAgc25hcHNjYW5pX211dGV4X2Nsb3NlKCZzZW1faWQpOworICAg
IHNuYXBzY2FuaV9tdXRleF9jbG9zZSgmc25hcHNjYW5fbXV0ZXgpOwogICAgIHNhbmVpX3VzYl9j
bG9zZShmZCk7CiB9CiAKQEAgLTQ5Myw3ICs0OTMsNyBAQAogICAgIHJldHVybiBzdGF0dXM7CiB9
CiAKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJfSAorI2lmIGRl
ZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmluZWQgX19CRU9T
X18KIHN0YXRpYyBTQU5FX1N0YXR1cyBzbmFwc2NhbmlfdXNiX3NobV9pbml0KHZvaWQpCiB7CiAg
ICAgdW5zaWduZWQgaW50IHNobV9zaXplID0gc2l6ZW9mKHN0cnVjdCB1cmJfY291bnRlcnNfdCk7
CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvY29uZmlndXJlLmluIHNhbmUv
Y29uZmlndXJlLmluCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvY29uZmlndXJlLmlu
CVN1biBOb3YgIDcgMTg6MzU6NTIgMjAwNAorKysgc2FuZS9jb25maWd1cmUuaW4JV2VkIEFwciAg
NiAxNTozODo0NSAyMDA1CkBAIC0zMyw2ICszMywxNyBAQAogQUNfQ0FOT05JQ0FMX0JVSUxECiBB
Q19DQU5PTklDQUxfSE9TVCAKIAorZG5sIG5vIGJsb29keSB3YXkgdG8gaGF2ZSBhIGRlY2VudCAt
LWRvY2Rpci4uLgorQUNfQVJHX1dJVEgoZG9jZGlyLCAKKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0
aC1kb2NkaXI9RElSXSwKKyAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb24gQDw6QFBSRUZJ
WC9kb2Mvc2FuZS1WRVJTSU9OQDo+QF0pLAorWworICBkb2NkaXI9IiR7d2l0aHZhbH0iCisgIEFD
X1NVQlNUKFtkb2NkaXJdKWRubAorXSwgWworICBBQ19TVUJTVChbZG9jZGlyXSwgICAgICAgICBb
JyR7cHJlZml4fS9kb2Mvc2FuZS0ke1ZFUlNJT059J10pZG5sCitdKQorCiBkbmwgKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgogZG5sICoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04
NSw5ICs5Niw5IEBACiBkbmwgSVJJWCBzb21ldGltZXMgaGFzIFNZU1ZSMy80IG5ldHdvcmsgRFNP
cywgYnV0IHdlIGRvIG5vdCBuZWVkIG9yIHdhbnQKIGRubCB0byB1c2UgdGhlbSEKIGlmIHRlc3Qg
ImB1bmFtZWAiICE9ICJJUklYIiAtYSAiYHVuYW1lYCIgIT0gIklSSVg2NCI7IHRoZW4KLSAgICBB
Q19DSEVDS19MSUIobnNsLCBnZXRob3N0YnlhZGRyKQotICAgIEFDX0NIRUNLX0xJQihzb2NrZXQs
IHNvY2tldCkKLSAgICBBQ19DSEVDS19MSUIoc3lzbG9nLCBzeXNsb2cpICAgICAgICAgICAgIyBP
Uy8yIG5lZWRzIHRoaXMKKyAgICBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnlhZGRyLCBuc2wgYmlu
ZCkKKyAgICBBQ19TRUFSQ0hfTElCUyhzb2NrZXQsIHNvY2tldCkKKyAgICBBQ19TRUFSQ0hfTElC
UyhzeXNsb2csIHN5c2xvZyBiZSkgICAgICAgICAgICAjIE9TLzIgbmVlZHMgLWxzeXNsb2csIEJl
T1MgbmVlZHMgLWxiZQogZmkKIFNBTkVfQ0hFQ0tfSlBFRwogU0FORV9DSEVDS19JRUVFMTI4NApA
QCAtMTAxLDcgKzExMiw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIEFDX0hFQURFUl9TVERDCiBB
Q19DSEVDS19IRUFERVJTKGZjbnRsLmggdW5pc3RkLmggbGliYy5oIHN5cy9kc3JlcS5oIHN5cy9z
ZWxlY3QuaCBcCi0gICAgc3lzL3RpbWUuaCBzeXMvc2htLmggXAorICAgIHN5cy90aW1lLmggc3lz
L3NobS5oIHN5cy9pcGMuaCBzeXMvc2lnbmFsLmggXAogICAgIHN5cy9zY2FuaW8uaCBzY3NpLmgg
c3lzL3Njc2kuaCBzeXMvc2NzaWNtZC5oIHN5cy9zY3NpaW8uaCBcCiAgICAgYnNkL2Rldi9zY3Np
cmVnLmggc2NzaS9zZy5oIC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUvc2NzaS9zZy5oIGlvL2NhbS9j
YW0uaCBcCiAgICAgY2FtbGliLmggb3MyLmggc3lzL3NvY2tldC5oIHN5cy9pby5oIGdzY2Rkcy5o
IHN5cy9ody5oIFwKQEAgLTEwOSw3ICsxMjAsNyBAQAogICAgIGFwb2xsby9zY3NpLmggc3lzL3Nk
aV9jb21tLmggc3lzL3Bhc3N0aHJ1ZGVmLmggbGludXgvcHBkZXYuaCBcCiAgICAgZGV2L3BwYnVz
L3BwaS5oIG1hY2hpbmUvY3B1ZnVuYy5oIHVzYi5oIHN5cy9iaXR5cGVzLmggc3lzL3NlbS5oIHN5
cy9wb2xsLmggXAogICAgIElPS2l0L2NkYi9JT1NDU0lMaWIuaCBJT0tpdC9zY3NpLWNvbW1hbmRz
L1NDU0lDb21tYW5kT3BlcmF0aW9uQ29kZXMuaCBcCi0gICAgd2luZG93cy5oIGxpbWl0cy5oIHN5
cy9pb2N0bC5oIGFzbS90eXBlcy5oKQorICAgIHdpbmRvd3MuaCBiZS9rZXJuZWwvT1MuaCBiZS9k
cml2ZXJzL1VTQl9zY2FubmVyLmggbGltaXRzLmggc3lzL2lvY3RsLmggYXNtL3R5cGVzLmgpCiBB
Q19DSEVDS19IRUFERVJTKFthc20vaW8uaF0sLCxbI2luY2x1ZGUgPHN5cy90eXBlcy5oPl0pCiBT
QU5FX0NIRUNLX01JU1NJTkdfSEVBREVSUwogCkBAIC0yMDIsNiArMjEzLDExIEBACiBkbmwgKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKIGRubCBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBkbmwgKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKK2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfYmVfa2VybmVsX09TX2giID0gInllcyIg
OyB0aGVuCisgICAgZG5sIHRob3NlIGFyZSBrbm93biB0byBiZSBicm9rZW4gaW4gQmVPUyAoQk9O
RSkKKyAgICBhY19jdl9mdW5jX2dldGFkZHJpbmZvPW5vCisgICAgYWNfY3ZfZnVuY19nZXRuYW1l
aW5mbz1ubworZmkKIEFDX0ZVTkNfQUxMT0NBCiBBQ19GVU5DX01NQVAKIEFDX0NIRUNLX0ZVTkNT
KGF0ZXhpdCBpbmV0X2FkZHIgaW5ldF9hdG9uIGluZXRfbnRvYSBpb3Blcm0gaTM4Nl9zZXRfaW9w
ZXJtIG1rZGlyIFwKQEAgLTI2Myw3ICsyNzksOCBAQAogQUNfUFJPR19MSUJUT09MCiAKIGRubCBX
aW5kb3dzL0N5Z3dpbiBuZWVkcyB0aGlzLCBlbHNlIHRoZSBsaWJyYXJ5IGNyZWF0aW9uIGZhaWxz
Ci1pZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbmRvd3NfaCIgPSAieWVzIiA7IHRoZW4KK2RubCBC
ZU9TIGFsc28gbmVlZHMgdGhpcyAod2h5IGlzbnQgaXQgdGhlIGRlZmF1bHQgYW55d2F5ID8/PykK
K2lmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luZG93c19oIiA9ICJ5ZXMiIC1vICIkYWNfY3ZfaGVh
ZGVyX2JlX2tlcm5lbF9PU19oIiA9ICJ5ZXMiIDsgdGhlbgogICBMSUJUT09MX0xJTktfRVhUUkE9
LW5vLXVuZGVmaW5lZAogICBBQ19TVUJTVChMSUJUT09MX0xJTktfRVhUUkEpCiBmaQpAQCAtMzcy
LDExICszODksMTEgQEAKICAgICBlY2hvICIqKiogZGlzYWJsaW5nIHBubSBiYWNrZW5kIChub3Qg
c2VsZWN0ZWQgbWFudWFsbHkpIgogICBdKQogCi0gIGlmIHRlc3QgIiR7SEFWRV9MSUJVU0J9IiAh
PSAieWVzIiA7IHRoZW4KLSAgICBlY2hvICIqKiogZGlzYWJsaW5nIFNNMzYwMCBiYWNrZW5kIChs
aWJ1c2Igb3IgdXNiLmggbm90IGZvdW5kKSIKLSAgZWxzZQorIyAgaWYgdGVzdCAiJHtIQVZFX0xJ
QlVTQn0iICE9ICJ5ZXMiIDsgdGhlbgorIyAgICBlY2hvICIqKiogZGlzYWJsaW5nIFNNMzYwMCBi
YWNrZW5kIChsaWJ1c2Igb3IgdXNiLmggbm90IGZvdW5kKSIKKyMgIGVsc2UKICAgICBCQUNLRU5E
Uz0iJHtCQUNLRU5EU30gc20zNjAwIgotICBmaQorIyAgZmkKICBmaQogZmkKIApAQCAtMzkyLDYg
KzQwOSwxNiBAQAogICBETExfUFJFTE9BRD0iIgogZmkKIEFDX1NVQlNUKERMTF9QUkVMT0FEKQor
CitkbmwgaW4gQmVPUywgYmFja2VuZHMgYXJlIG5vdCBpbnN0YWxsZWQgaW4gbGliL3NhbmUsIGJ1
dCBhZGQtb25zL1NBTkUvCitkbmwgd2UgYWNjb3VudCBmb3IgYm90aCBpbnN0YWxsaW5nIGluIC9i
b290L2Jlb3MgYW5kIH4vY29uZmlnCitkbmwgZmFzdGVyIHRoYW46IGlmIHRlc3QgImB1bmFtZWAi
ID0gIkJlT1MiIC1vICJgdW5hbWVgIiA9ICJaZXRhIiA7IHRoZW4KK2lmIHRlc3QgIiRhY19jdl9o
ZWFkZXJfYmVfa2VybmVsX09TX2giID0gInllcyIgOyB0aGVuCisgIEJFT1NfQURET05ESVI9IiR7
bGliZGlyfS8uLi9hZGQtb25zL1NBTkUiCisgIEFDX1NVQlNUKEJFT1NfQURET05ESVIpCisgIEJF
X0lOU1RBTExfRkxBVk9SPS1iZW9zCisgIEFDX1NVQlNUKEJFX0lOU1RBTExfRkxBVk9SKQorZmkK
IAogCiBBQ19BUkdfRU5BQkxFKHNjc2lidWZmZXJzaXplLCAKZGlmZiAtdXJOIC9EZXZlbC9zYW5l
LWJhY2tlbmRzLTEuMC4xNS9kb2MvTWFrZWZpbGUuaW4gc2FuZS9kb2MvTWFrZWZpbGUuaW4KLS0t
IC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9kb2MvTWFrZWZpbGUuaW4JVHVlIEF1ZyAgMyAx
ODoyMjoyOCAyMDA0CisrKyBzYW5lL2RvYy9NYWtlZmlsZS5pbglUaHUgRmViIDE3IDE4OjU1OjEx
IDIwMDUKQEAgLTI1LDcgKzI1LDggQEAKIGluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKIG9sZGlu
Y2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKIGNvbmZpZ2RpciA9ICR7c3lzY29uZmRpcn0vc2FuZS5k
Ci1kb2NkaXI9JChwcmVmaXgpL2RvYy9zYW5lLUBWRVJTSU9OQAorI2RvY2Rpcj0kKHByZWZpeCkv
ZG9jL3NhbmUtQFZFUlNJT05ACitkb2NkaXIgPSBAZG9jZGlyQAogCiBNS0RJUiA9ICQodG9wX3Ny
Y2RpcikvbWtpbnN0YWxsZGlycwogSU5TVEFMTCA9IEBJTlNUQUxMQApAQCAtMjA0LDE0ICsyMDUs
MTQgQEAKIAljZCAuLi90b29scyA7ICQoTUFLRSkgc2FuZS1kZXNjCiAKIHNhbmUtYmFja2VuZHMu
aHRtbDogJCh3aWxkY2FyZCBkZXNjcmlwdGlvbnMvKi5kZXNjKSAuLi90b29scy9zYW5lLWRlc2MK
LQlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtYmFja2VuZHMtc3BsaXQgLXMgZGVzY3JpcHRp
b25zIFwKKwlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtYmFja2VuZHMtc3BsaXQgLXMgJHtz
cmNkaXJ9L2Rlc2NyaXB0aW9ucyBcCiAJIC1pICJUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6
ZXMgdGhlIGJhY2tlbmRzL2RyaXZlcnMgZGlzdHJpYnV0ZWQgXAogCSAgICAgd2l0aCAkKFBBQ0tB
R0UpLSQoVkVSU0lPTiksIGFuZCB0aGUgaGFyZHdhcmUgb3Igc29mdHdhcmUgdGhleSBcCiAgICAg
ICAgICAgICAgc3VwcG9ydC4iIC1kIDEgPiBzYW5lLWJhY2tlbmRzLmh0bWwKIAogc2FuZS1iYWNr
ZW5kcy1leHRlcm5hbC5odG1sOiAkKHdpbGRjYXJkIGRlc2NyaXB0aW9ucy1leHRlcm5hbC8qLmRl
c2MpIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4vdG9vbHMvc2FuZS1kZXNjCi0J
QC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLWJhY2tlbmRzLXNwbGl0IC1zIGRlc2NyaXB0aW9u
cy1leHRlcm5hbCBcCisJQC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLWJhY2tlbmRzLXNwbGl0
IC1zICR7c3JjZGlyfS9kZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAogCSAgIC1pICJUaGUgZm9sbG93
aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGJhY2tlbmRzL2RyaXZlcnMgdGhhdCBcCiAJICAgICAg
IGhhdmUgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIHRoZSBTQU5FIGRpc3RyaWJ1dGlvbiwgYW5k
IHRoZSBcCiAJICAgICAgIGhhcmR3YXJlIG9yIHNvZnR3YXJlIHRoZXkgc3VwcG9ydC4iIFwKQEAg
LTIxOSwxNCArMjIwLDE0IEBACiAJICAgPiBzYW5lLWJhY2tlbmRzLWV4dGVybmFsLmh0bWwKIAog
c2FuZS1tZmdzLmh0bWw6ICQod2lsZGNhcmQgZGVzY3JpcHRpb25zLyouZGVzYykgLi4vdG9vbHMv
c2FuZS1kZXNjCi0JQC4uL3Rvb2xzL3NhbmUtZGVzYyAtbSBodG1sLW1mZ3MgLXMgZGVzY3JpcHRp
b25zIFwKKwlALi4vdG9vbHMvc2FuZS1kZXNjIC1tIGh0bWwtbWZncyAtcyAke3NyY2Rpcn0vZGVz
Y3JpcHRpb25zIFwKIAkgICAtaSAiVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBk
ZXZpY2VzIHN1cHBvcnRlZCBcCiAJICAgICAgIGJ5ICQoUEFDS0FHRSktJChWRVJTSU9OKS4iIFwK
IAkgICAtZCAxID4gc2FuZS1tZmdzLmh0bWwKIAogc2FuZS1tZmdzLWV4dGVybmFsLmh0bWw6ICQo
d2lsZGNhcmQgZGVzY3JpcHRpb25zLWV4dGVybmFsLyouZGVzYykgXAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuLi90b29scy9zYW5lLWRlc2MKLQlALi4vdG9vbHMvc2FuZS1kZXNjIC1t
IGh0bWwtbWZncyAtcyBkZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAorCUAuLi90b29scy9zYW5lLWRl
c2MgLW0gaHRtbC1tZmdzIC1zICR7c3JjZGlyfS9kZXNjcmlwdGlvbnMtZXh0ZXJuYWwgXAogCSAg
IC1pICJUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGRldmljZXMgdGhhdCBcCiAJ
ICAgICAgIGFyZSBzdXBwb3J0ZWQgYnkgZXh0ZXJuYWwgYmFja2VuZHMuIiBcCiAJICAgLXQgIlNB
TkU6IERldmljZXMgU3VwcG9ydGVkIGJ5IEV4dGVybmFsIEJhY2tlbmRzIiAtZCAxIFwKZGlmZiAt
dXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9mcm9udGVuZC9zYW5lZC5jIHNhbmUvZnJv
bnRlbmQvc2FuZWQuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L2Zyb250ZW5kL3Nh
bmVkLmMJU2F0IE9jdCAxNiAxNTo0Mjo0NSAyMDA0CisrKyBzYW5lL2Zyb250ZW5kL3NhbmVkLmMJ
VGh1IEZlYiAgMyAxNzoyMzowMyAyMDA1CkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICIu
Li9pbmNsdWRlL3NhbmUvY29uZmlnLmgiCiAjaW5jbHVkZSAiLi4vaW5jbHVkZS9sYWxsb2NhLmgi
Ci0jaW5jbHVkZSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KIAogI2lmIGRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykgJiYgZGVmaW5lZCAoSEFWRV9HRVRO
QU1FSU5GTykKICMgZGVmaW5lIFNBTkVEX1VTRVNfQUZfSU5ERVAKZGlmZiAtdXJOIC9EZXZlbC9z
YW5lLWJhY2tlbmRzLTEuMC4xNS9pbmNsdWRlL3NhbmUvY29uZmlnLmguaW4gc2FuZS9pbmNsdWRl
L3NhbmUvY29uZmlnLmguaW4KLS0tIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9pbmNsdWRl
L3NhbmUvY29uZmlnLmguaW4JV2VkIE9jdCAgNiAxMjo1MTozOSAyMDA0CisrKyBzYW5lL2luY2x1
ZGUvc2FuZS9jb25maWcuaC5pbglUdWUgRmViIDE1IDIwOjUyOjMxIDIwMDUKQEAgLTEsNSArMSw5
IEBACiAvKiBpbmNsdWRlL3NhbmUvY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1
cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCiAKKyNpZmRlZiBfX0JFT1NfXworI2luY2x1ZGUgPGlu
dHR5cGVzLmg+CisjZW5kaWYgLyogX19CRU9TX18gKi8KKwogLyogRGVmaW5lIHRvIG9uZSBvZiBg
X2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAogICAg
c3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0
IG9uIHRob3NlIHN5c3RlbXMuCiAgICAqLwpAQCAtMzksNiArNDMsMTIgQEAKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGV4aXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVf
QVRFWElUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YmUvZHJpdmVycy9VU0Jf
c2Nhbm5lci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0JFX0RSSVZFUlNfVVNCX1ND
QU5ORVJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJlL2tlcm5lbC9PUy5o
PiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0JFX0tFUk5FTF9PU19ICiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YnNkL2Rldi9zY3NpcmVnLmg+IGhlYWRlciBmaWxlLiAq
LwogI3VuZGVmIEhBVkVfQlNEX0RFVl9TQ1NJUkVHX0gKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJh
Y2tlbmRzLTEuMC4xNS9saWIvTWFrZWZpbGUuaW4gc2FuZS9saWIvTWFrZWZpbGUuaW4KLS0tIC9E
ZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9saWIvTWFrZWZpbGUuaW4JVGh1IEFwciAgMyAwMDow
NToyNiAyMDAzCisrKyBzYW5lL2xpYi9NYWtlZmlsZS5pbglUaHUgRmViICAzIDE3OjIxOjM3IDIw
MDUKQEAgLTQ4LDEyICs0OCwxMiBAQAogCiBAU0VUX01BS0VACiAKLUxJQkxJQl9PQkpTICAgICAg
PSBATElCT0JKU0AgQEFMTE9DQUAgZ2V0b3B0Lm8gZ2V0b3B0MS5vIG1kNS5vCitMSUJMSUJfT0JK
UyAgICAgID0gQExJQk9CSlNAIEBBTExPQ0FAIGdldG9wdC5vIGdldG9wdDEubyBtZDUubyBnZXRw
YXNzLm8KIExJQkxJQl9MVE9CSlMgICAgPSAkKGFkZHN1ZmZpeCAubG8sJChiYXNlbmFtZSAkKExJ
QkxJQl9PQkpTKSkpCiAKIFRBUkdFVFMgPSBsaWJsaWIuYSAkKExJQkxJQl9MVE9CSlMpCiAKLURJ
U1RGSUxFUyA9IE1ha2VmaWxlLmluIGFsbG9jYS5jIGdldGVudi5jIGdldG9wdC5jIGdldG9wdDEu
YyBcCitESVNURklMRVMgPSBNYWtlZmlsZS5pbiBhbGxvY2EuYyBnZXRlbnYuYyBnZXRwYXNzLmMg
Z2V0b3B0LmMgZ2V0b3B0MS5jIFwKICAgaW5ldF9udG9wLmMgaW5ldF9wdG9uLmMgaXNmZHR5cGUu
YyBtZDUuYyBzaWdwcm9jbWFzay5jIHNucHJpbnRmLmMgc3RyZHVwLmMgXAogICBzdHJuZHVwLmMg
c3Ryc2VwLmMgdXNsZWVwLmMgdnN5c2xvZy5jCiAKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tl
bmRzLTEuMC4xNS9saWIvZ2V0cGFzcy5jIHNhbmUvbGliL2dldHBhc3MuYwotLS0gL0RldmVsL3Nh
bmUtYmFja2VuZHMtMS4wLjE1L2xpYi9nZXRwYXNzLmMJVGh1IEphbiAgMSAwMTowMDowMCAxOTcw
CisrKyBzYW5lL2xpYi9nZXRwYXNzLmMJVGh1IEZlYiAgMyAxNzoyMjoyOCAyMDA1CkBAIC0wLDAg
KzEsMjE5IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICogQ29weXJpZ2h0IChDKSAxOTk4
IEFuZ3VzIE1hY2theS4gQWxsIHJpZ2h0cyByZXNlcnZlZDsgCisgKiAKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgYXJlIGZyZWVseSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogCisgKiAKKyAq
ICAgMSkgVGhpcyBoZWFkZXIgcmVtYWluIGluIHRhY3QuIAorICogICAyKSBUaGUgcHJvdG90eXBl
cyBmb3IgZ2V0cGFzcyBhbmQgZ2V0cGFzc19yIGFyZSBub3QgY2hhbmdlZCBmcm9tOiAKKyAqICAg
ICAgICAgY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpIAorICogICAgICAgICBjaGFy
ICpnZXRwYXNzX3IoY29uc3QgY2hhciAqcHJvbXB0LCBjaGFyKiBidWZmZXIsIGludCBidWZsZW4p
IAorICogICAzKSBUaGlzIHNvdXJjZSBjb2RlIGlzIG5vdCB1c2VkIG91dHNpZGUgb2YgdGhpcyhn
ZXRwYXNzLmMpIGZpbGUuIAorICogICA0KSBBbnkgY2hhbmdlcyB0byB0aGlzKGdldHBhc3MuYykg
c291cmNlIGNvZGUgYXJlIG1hZGUgcHVibGljbHkgYXZhaWxhYmxlLiAKKyAqIAorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCAKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgCisgKiBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSAKKyAqIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAKKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIAorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09IAorICogCisgKiAkSWQ6IGdldHBhc3MuYyx2IDEuMS4xLjIgMjAwMS8w
NC8yNCAxODo0OTowOSB3c2FuY2hleiBFeHAgJCAKKyAqIAorICogVGhlIHNwaXJpdCBvZiB0aGlz
IGxpY2Vuc2UgaXMgdG8gYWxsb3cgdXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaW4gYW55IAorICog
cHJvamVjdCBiZSBpdCBvcGVuIG9yIGNsb3NlZCBidXQgc3RpbGwgZW5jb3VyYWdlIHRoZSB1c2Ug
b2YgdGhlIG9wZW4sIAorICogbGlicmFyeSBiYXNlZCBlcXVpdmlsZW50cy4gCisgKiAKKyAqIEF1
dGhvcihzKTogCisgKiAgIEFuZ3VzIE1hY2theSA8YW1hY2theUBndXMubWwub3JnPiAKKyAqIAor
ICogQ29udHJpYnV0b3Iocyk6IAorICogICBEYW5pZWwgU3RlbmJlcmcgPGRhbmllbEBoYXh4LnNl
PiAKKyAqLyAKKworI2lmZGVmIEhBVkVfQ09ORklHX0ggCisjICBpbmNsdWRlIDxjb25maWcuaD4g
CisjZW5kaWYgCisKKyNpZm5kZWYgSEFWRV9HRVRQQVNTX1IgCisKKyNpZm5kZWYgV0lOMzIgCisj
aWZkZWYgSEFWRV9URVJNSU9TX0ggCisjICBpZiAhZGVmaW5lZChIQVZFX1RDR0VUQVRUUikgJiYg
IWRlZmluZWQoSEFWRV9UQ1NFVEFUVFIpIAorIyAgICB1bmRlZiBIQVZFX1RFUk1JT1NfSCAKKyMg
IGVuZGlmIAorI2VuZGlmIAorCisjaWZuZGVmIFJFVFNJR1RZUEUgCisjICBkZWZpbmUgUkVUU0lH
VFlQRSB2b2lkIAorI2VuZGlmIAorCisjaWZkZWYgSEFWRV9VTklTVERfSCAKKyNpbmNsdWRlIDx1
bmlzdGQuaD4gCisjZW5kaWYgCisjaW5jbHVkZSA8c3RkaW8uaD4gCisjaW5jbHVkZSA8c2lnbmFs
Lmg+IAorI2lmZGVmIEhBVkVfVEVSTUlPU19IIAorIyAgaW5jbHVkZSA8dGVybWlvcy5oPiAKKyNl
bHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyMgIGluY2x1ZGUgPHRlcm1pby5oPiAKKyMg
IGVsc2UgCisjICBlbmRpZiAKKyNlbmRpZiAKKworLyogVGhlIGxhc3QgI2luY2x1ZGUgZmlsZSBz
aG91bGQgYmU6ICovIAorI2lmZGVmIE1BTExPQ0RFQlVHIAorI2luY2x1ZGUgIm1lbWRlYnVnLmgi
IAorI2VuZGlmIAorCisvKiBubyBwZXJyb3I/IG1ha2UgYW4gZnByaW50ZiEgKi8gCisjaWZuZGVm
IEhBVkVfUEVSUk9SIAorIyAgZGVmaW5lIHBlcnJvcih4KSBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
IGluOiAlc1xuIiwgeCkgCisjZW5kaWYgCisKK2NoYXIgKmdldHBhc3Nfcihjb25zdCBjaGFyICpw
cm9tcHQsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikgCit7IAorICBGSUxFICppbmZwOyAK
KyAgRklMRSAqb3V0ZnA7IAorICBSRVRTSUdUWVBFICgqc2lnaW50KSgpOyAKKyNpZm5kZWYgX19F
TVhfXyAKKyAgUkVUU0lHVFlQRSAoKnNpZ3RzdHApKCk7IAorI2VuZGlmIAorICBzaXplX3QgYnl0
ZXNfcmVhZDsgCisgIGludCBpbmZkOyAKKyAgaW50IG91dGZkOyAKKyNpZmRlZiBIQVZFX1RFUk1J
T1NfSCAKKyAgc3RydWN0IHRlcm1pb3Mgb3JpZzsgCisgIHN0cnVjdCB0ZXJtaW9zIG5vZWNobzsg
CisjZWxzZSAKKyMgIGlmZGVmIEhBVkVfVEVSTUlPX0ggCisgIHN0cnVjdCB0ZXJtaW8gb3JpZzsg
CisgIHN0cnVjdCB0ZXJtaW8gbm9lY2hvOyAgCisjICBlbHNlIAorIyAgZW5kaWYgCisjZW5kaWYg
CisKKyAgc2lnaW50ID0gc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7IAorICAvKiAyMDAwMDMxOCBt
Z3MgCisgICAqIHRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBlbXggc3lzdGVtLCBTSUdUU1RQIGlzIG5v
dCBhIHN1cHBvcnRlZCBzaWduYWwgKi8gCisjaWZuZGVmIF9fRU1YX18gCisgIHNpZ3RzdHAgPSBz
aWduYWwoU0lHVFNUUCwgU0lHX0lHTik7IAorI2VuZGlmIAorCisgIGlmKCAoaW5mcD1mb3Blbigi
L2Rldi90dHkiLCAiciIpKSA9PSBOVUxMICkgCisgIHsgCisgICAgaW5mcCA9IHN0ZGluOyAKKyAg
fSAKKyAgaWYoIChvdXRmcD1mb3BlbigiL2Rldi90dHkiLCAidyIpKSA9PSBOVUxMICkgCisgIHsg
CisgICAgb3V0ZnAgPSBzdGRlcnI7IAorICB9IAorICBpbmZkID0gZmlsZW5vKGluZnApOyAKKyAg
b3V0ZmQgPSBmaWxlbm8ob3V0ZnApOyAKKworICAvKiBkaXNzYWJsZSBlY2hvICovIAorI2lmZGVm
IEhBVkVfVEVSTUlPU19IIAorICBpZih0Y2dldGF0dHIob3V0ZmQsICZvcmlnKSAhPSAwKSAKKyAg
eyAKKyAgICA7IC8qcGVycm9yKCJ0Y2dldGF0dHIiKTsqLyAKKyAgfSAKKyAgbm9lY2hvID0gb3Jp
ZzsgCisgIG5vZWNoby5jX2xmbGFnICY9IH5FQ0hPOyAKKyAgaWYodGNzZXRhdHRyKG91dGZkLCBU
Q1NBTk9XLCAmbm9lY2hvKSAhPSAwKSAKKyAgeyAKKyAgICA7IC8qcGVycm9yKCJ0Y2dldGF0dHIi
KTsqLyAKKyAgfSAKKyNlbHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyAgaWYoaW9jdGwo
b3V0ZmQsIFRDR0VUQSwgJm9yaWcpICE9IDApIAorICB7IAorICAgIDsgLypwZXJyb3IoImlvY3Rs
Iik7Ki8gCisgIH0gCisgIG5vZWNobyA9IG9yaWc7IAorICBub2VjaG8uY19sZmxhZyAmPSB+RUNI
TzsgCisgIGlmKGlvY3RsKG91dGZkLCBUQ1NFVEEsICZub2VjaG8pICE9IDApIAorICB7IAorICAg
IDsgLypwZXJyb3IoImlvY3RsIik7Ki8gCisgIH0gCisjICBlbHNlIAorIyAgZW5kaWYgCisjZW5k
aWYgCisKKyAgZnB1dHMocHJvbXB0LCBvdXRmcCk7IAorICBmZmx1c2gob3V0ZnApOyAKKworICBi
eXRlc19yZWFkPXJlYWQoaW5mZCwgYnVmZmVyLCBidWZsZW4pOyAKKyAgYnVmZmVyW2J5dGVzX3Jl
YWQgPiAwID8gKGJ5dGVzX3JlYWQgLTEpIDogMF0gPSAnXDAnOyAKKworICAvKiBwcmludCBhIG5l
dyBsaW5lIGlmIG5lZWRlZCAqLyAKKyNpZmRlZiBIQVZFX1RFUk1JT1NfSCAKKyAgZnB1dHMoIlxu
Iiwgb3V0ZnApOyAKKyNlbHNlIAorIyAgaWZkZWYgSEFWRV9URVJNSU9fSCAKKyAgZnB1dHMoIlxu
Iiwgb3V0ZnApOyAKKyMgIGVsc2UgCisjICBlbmRpZiAKKyNlbmRpZiAKKworICAvKiAKKyAgICog
cmVzZXQgdGVybSBjaGFyZWN0YXJpc3RpY3MsIHVzZSBUQ1NBRkxVU0ggaW5jYXNlIHRoZSAKKyAg
ICogdXNlciB0eXBlcyBtb3JlIHRoYW4gYnVmbGVuIAorICAgKi8gCisjaWZkZWYgSEFWRV9URVJN
SU9TX0ggCisgIGlmKHRjc2V0YXR0cihvdXRmZCwgVENTQUZMVVNILCAmb3JpZykgIT0gMCkgCisg
IHsgCisgICAgOyAvKnBlcnJvcigidGNnZXRhdHRyIik7Ki8gCisgIH0gCisjZWxzZSAKKyMgIGlm
ZGVmIEhBVkVfVEVSTUlPX0ggCisgIGlmKGlvY3RsKG91dGZkLCBUQ1NFVEEsICZvcmlnKSAhPSAw
KSAKKyAgeyAKKyAgICA7IC8qcGVycm9yKCJpb2N0bCIpOyovIAorICB9IAorIyAgZWxzZSAKKyMg
IGVuZGlmIAorI2VuZGlmIAorICAKKyAgc2lnbmFsKFNJR0lOVCwgc2lnaW50KTsgCisjaWZuZGVm
IF9fRU1YX18gCisgIHNpZ25hbChTSUdUU1RQLCBzaWd0c3RwKTsgCisjZW5kaWYgCisKKyAgcmV0
dXJuIGJ1ZmZlcjsgLyogd2UgYWx3YXlzIHJldHVybiBzdWNjZXNzICovIAorfSAKKyNlbHNlIC8q
IFdJTjMyICovIAorI2luY2x1ZGUgPHN0ZGlvLmg+IAorI2luY2x1ZGUgPGNvbmlvLmg+IAorY2hh
ciAqZ2V0cGFzc19yKGNvbnN0IGNoYXIgKnByb21wdCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVu
KSAKK3sgCisgIGludCBpOyAKKyAgcHJpbnRmKCIlcyIsIHByb21wdCk7IAorIAorICBmb3IoaT0w
OyBpPGJ1ZmxlbjsgaSsrKSB7IAorICAgIGJ1ZmZlcltpXSA9IGdldGNoKCk7IAorICAgIGlmICgg
YnVmZmVyW2ldID09ICdccicgKSB7IAorICAgICAgYnVmZmVyW2ldID0gMDsgCisgICAgICBicmVh
azsgCisgICAgfSAKKyAgfSAKKyAgLyogaWYgdXNlciBkaWRuJ3QgaGl0IEVOVEVSLCB0ZXJtaW5h
dGUgYnVmZmVyICovIAorICBpZiAoaT09YnVmbGVuKSAKKyAgICBidWZmZXJbYnVmbGVuLTFdPTA7
IAorCisgIHJldHVybiBidWZmZXI7IC8qIHdlIGFsd2F5cyByZXR1cm4gc3VjY2VzcyAqLyAKK30g
CisjZW5kaWYgCisKKyNlbmRpZiAvKiBpZm5kZWYgSEFWRV9HRVRQQVNTX1IgKi8gCisKKy8qIGZv
ciBjb25zaXN0ZW5zeSwgaGVyZSdzIHRoZSBvbGQtc3R5bGUgZnVuY3Rpb246ICovIAorY2hhciAq
Z2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpIAoreyAKKyAgc3RhdGljIGNoYXIgYnVmWzI1Nl07
IAorICByZXR1cm4gZ2V0cGFzc19yKHByb21wdCwgYnVmLCBzaXplb2YoYnVmKSk7IAorfSAKZGlm
ZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9wby9NYWtlZmlsZS5pbiBzYW5lL3Bv
L01ha2VmaWxlLmluCi0tLSAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvcG8vTWFrZWZpbGUu
aW4JVGh1IE9jdCAxNCAxODo0NDoxNyAyMDA0CisrKyBzYW5lL3BvL01ha2VmaWxlLmluCUZyaSBG
ZWIgMTEgMDk6MTk6MTcgMjAwNQpAQCAtMzYsNiArMzYsNyBAQAogZ251bG9jYWxlZGlyID0gJChw
cmVmaXgpL3NoYXJlL2xvY2FsZQogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogc3JjZGlyID0g
QHNyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKIAogUEFDS0FHRSA9IEBQQUNLQUdFQAogVkVSU0lP
TiA9IEBWRVJTSU9OQApkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVp
L3NhbmVpX2NvbmZpZy5jIHNhbmUvc2FuZWkvc2FuZWlfY29uZmlnLmMKLS0tIC9EZXZlbC9zYW5l
LWJhY2tlbmRzLTEuMC4xNS9zYW5laS9zYW5laV9jb25maWcuYwlNb24gTWF5IDE3IDE3OjUzOjE4
IDIwMDQKKysrIHNhbmUvc2FuZWkvc2FuZWlfY29uZmlnLmMJVHVlIE1heSAyNCAxMTozMTo0NyAy
MDA1CkBAIC03Miw2ICs3MiwxMCBAQAogCiAjZGVmaW5lIERFRkFVTFRfRElSUwkiLiIgRElSX1NF
UCBTVFJJTkdJRlkoUEFUSF9TQU5FX0NPTkZJR19ESVIpCiAKKyNpZmRlZiBfX0JFT1NfXworI2lu
Y2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KKyNlbmRpZgorCiBzdGF0aWMgY29uc3QgY2hhciAqZGly
X2xpc3Q7CiAKIEZJTEUgKgpAQCAtODcsNiArOTEsMTggQEAKICAgICAgIERCR19JTklUKCk7CiAK
ICAgICAgIGRpcl9saXN0ID0gZ2V0ZW52ICgiU0FORV9DT05GSUdfRElSIik7CisjaWZkZWYgX19C
RU9TX18KKyAgICAgIC8qIH4vY29uZmlnL3NldHRpbmdzL1NBTkUgdGFrZXMgcHJlY2VkZW5jZSBv
dmVyIC9ldGMvc2FuZS5kLyAqLworICAgICAgaWYgKCFkaXJfbGlzdCkKKwl7CisJICBpZiAoZmlu
ZF9kaXJlY3RvcnkoQl9VU0VSX1NFVFRJTkdTX0RJUkVDVE9SWSwgMCwgdHJ1ZSwgcmVzdWx0LCBQ
QVRIX01BWCkgPT0gQl9PSykKKwkgICAgeworCSAgICAgIHN0cmNhdChyZXN1bHQsIi9TQU5FIik7
CisJICAgICAgc3RyY2F0KHJlc3VsdCxESVJfU0VQKTsgLyogZG8gYXBwZW5kIHRoZSBkZWZhdWx0
IG9uZXMgKi8KKwkgICAgICBkaXJfbGlzdCA9IHJlc3VsdDsKKwkgICAgfQorCX0KKyNlbmRpZgog
ICAgICAgaWYgKGRpcl9saXN0KQogCXsKIAkgIGxlbiA9IHN0cmxlbiAoZGlyX2xpc3QpOwpkaWZm
IC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVpL3NhbmVpX2NvbmZpZzIuYyBz
YW5lL3NhbmVpL3NhbmVpX2NvbmZpZzIuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1
L3NhbmVpL3NhbmVpX2NvbmZpZzIuYwlUdWUgU2VwICA5IDE3OjA0OjQ1IDIwMDMKKysrIHNhbmUv
c2FuZWkvc2FuZWlfY29uZmlnMi5jCVRodSBGZWIgIDMgMTc6MTg6NDMgMjAwNQpAQCAtNDcsNiAr
NDcsMTIgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2lm
ZGVmIF9fQkVPU19fCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8ZHJpdmVycy9VU0Jfc2Nhbm5lci5oPgorI2VuZGlmCisKICNpbmNsdWRlICJzYW5l
L3NhbmVpLmgiCiAjaW5jbHVkZSAic2FuZS9zYW5laV9jb25maWcuaCIKICNpbmNsdWRlICJzYW5l
L3NhbmVpX3Njc2kuaCIKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l
aS9zYW5laV9pbml0X2RlYnVnLmMgc2FuZS9zYW5laS9zYW5laV9pbml0X2RlYnVnLmMKLS0tIC9E
ZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5laS9zYW5laV9pbml0X2RlYnVnLmMJVHVlIFNl
cCAgOSAxNzowNDo0NSAyMDAzCisrKyBzYW5lL3NhbmVpL3NhbmVpX2luaXRfZGVidWcuYwlUaHUg
RmViICAzIDE3OjE4OjE3IDIwMDUKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQogICBpZiAobWF4X2xl
dmVsID49IGxldmVsKQogICAgIHsKKyNpZmRlZiBTX0lGU09DSwogICAgICAgaWYgKCAxID09IGlz
ZmR0eXBlKGZpbGVubyhzdGRlcnIpLCBTX0lGU09DSykgKQogCXsKIAkgIG1zZyA9IChjaGFyICop
bWFsbG9jIChzaXplb2YoY2hhcikgKiAoc3RybGVuKGJlKSArIHN0cmxlbihmbXQpICsgNCkpOwpA
QCAtMTE2LDYgKzExNyw3IEBACiAJICAgIH0KIAl9CiAgICAgICBlbHNlCisjZW5kaWYKIAl7CiAJ
ICBmcHJpbnRmIChzdGRlcnIsICJbJXNdICIsIGJlKTsKICAgICAgICAgICB2ZnByaW50ZiAoc3Rk
ZXJyLCBmbXQsIGFwKTsKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l
aS9zYW5laV9waW8uYyBzYW5lL3NhbmVpL3NhbmVpX3Bpby5jCi0tLSAvRGV2ZWwvc2FuZS1iYWNr
ZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfcGlvLmMJVHVlIFNlcCAgOSAxNzowNDo0NSAyMDAzCisr
KyBzYW5lL3NhbmVpL3NhbmVpX3Bpby5jCVRodSBGZWIgIDMgMTc6MTc6MzYgMjAwNQpAQCAtNTI0
LDYgKzUyNCw0NSBAQAogCiAjZWxzZSAvKiAhSEFWRV9JT1BFUk0gKi8KIAorI2lmZGVmIF9fQkVP
U19fCisKKyNpbmNsdWRlIDxmY250bC5oPgorCitTQU5FX1N0YXR1cworc2FuZWlfcGlvX29wZW4g
KGNvbnN0IGNoYXIgKmRldiwgaW50ICpmZHApCit7CisJaW50IGZwOworCQorCS8vIG9wZW4gaW50
ZXJuYWwgcGFyYWxsZWwgcG9ydAorCWZwPW9wZW4oIi9kZXYvcGFyYWxsZWwvcGFyYWxsZWwxIixP
X1JEV1IpOworICAKKyAgCSpmZHA9ZnA7CisgIAlpZihmcDwwKSByZXR1cm4gU0FORV9TVEFUVVNf
SU5WQUw7CisgIAlyZXR1cm4oU0FORV9TVEFUVVNfR09PRCk7Cit9CisKKwordm9pZCAKK3NhbmVp
X3Bpb19jbG9zZSAoaW50IGZkKQoreworCWNsb3NlKGZkKTsKKwlyZXR1cm47Cit9CisKK2ludCAK
K3NhbmVpX3Bpb19yZWFkIChpbnQgZmQsIHVfY2hhciAqIGJ1ZiwgaW50IG4pCit7CisJcmV0dXJu
KHJlYWQoZmQsYnVmLG4pKTsKK30KKworaW50IAorc2FuZWlfcGlvX3dyaXRlIChpbnQgZmQsIGNv
bnN0IHVfY2hhciAqIGJ1ZiwgaW50IG4pCit7CisgIAlyZXR1cm4od3JpdGUoZmQsYnVmLG4pKTsK
K30KKworI2Vsc2UgLyogIV9fQkVPU19fICovCisKIFNBTkVfU3RhdHVzCiBzYW5laV9waW9fb3Bl
biAoY29uc3QgY2hhciAqZGV2LCBpbnQgKmZkcCkKIHsKQEAgLTU0OSw1ICs1ODgsNiBAQAogewog
ICByZXR1cm4gLTE7CiB9CisjZW5kaWYgLyogX19CRU9TX18gKi8KIAogI2VuZGlmIC8qICFIQVZF
X0lPUEVSTSAqLwpkaWZmIC11ck4gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3NhbmVpL3Nh
bmVpX3Njc2kuYyBzYW5lL3NhbmVpL3NhbmVpX3Njc2kuYwotLS0gL0RldmVsL3NhbmUtYmFja2Vu
ZHMtMS4wLjE1L3NhbmVpL3NhbmVpX3Njc2kuYwlGcmkgSnVsIDMwIDE4OjQ1OjI1IDIwMDQKKysr
IHNhbmUvc2FuZWkvc2FuZWlfc2NzaS5jCVR1ZSBKdWwgIDUgMTY6MDY6MjUgMjAwNQpAQCAtNzks
NiArNzksNyBAQAogI2RlZmluZSBTT0xBUklTX1VTQ1NJX0lOVEVSRkFDRQkxNgogI2RlZmluZSBN
QUNPU1hfSU5URVJGQUNFCTE3CiAjZGVmaW5lIFdJTjMyX0lOVEVSRkFDRQkJMTgKKyNkZWZpbmUg
QkVPU19JTlRFUkZBQ0UJCTE5CiAKICNpZmRlZiBIQVZFX1JFU01HUgogIyBpbmNsdWRlIDxyZXNt
Z3IuaD4KQEAgLTIwNSw2ICsyMDYsOSBAQAogIyBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjIGluY2x1
ZGUgPGRkay9zY3NpLmg+CiAjIGluY2x1ZGUgPGRkay9udGRkc2NzaS5oPgorI2VsaWYgZGVmaW5l
ZCAoX19CRU9TX18pCisjIGRlZmluZSBVU0UgQkVPU19JTlRFUkZBQ0UKKyMgZGVmaW5lIFdFX0hB
VkVfRklORF9ERVZJQ0VTCiAjZW5kaWYKIAogI2lmZGVmIERJU0FCTEVfTElOVVhfU0dfSU8KQEAg
LTM5MSw2ICszOTUsNyBAQAogc3RydWN0IGNhbV9kZXZpY2UgKmNhbV9kZXZpY2VzW0NBTV9NQVhE
RVZTXSA9IHsgTlVMTCB9OwogI2VuZGlmCiAKKyNpZm5kZWYgX19CRU9TX18KIHN0YXRpYyBzdHJ1
Y3QKIHsKICAgdV9pbnQgaW5fdXNlOjE7CQkvKiBpcyB0aGlzIGZkX2luZm8gaW4gdXNlPyAqLwpA
QCAtNDAxLDYgKzQwNiw3IEBACiAgIHZvaWQgKnBkYXRhOwkJCS8qIHBsYXRmb3JtLXNwZWNpZmlj
IGRhdGEgKi8KIH0KICAqZmRfaW5mbzsKKyNlbmRpZgogCiBzdGF0aWMgdV9jaGFyIGNkYl9zaXpl
c1s4XSA9IHsKICAgNiwgMTAsIDEwLCAxMiwgMTIsIDEyLCAxMCwgMTAKQEAgLTQwOCw2ICs0MTQs
NyBAQAogI2RlZmluZSBDREJfU0laRShvcGNvZGUpCWNkYl9zaXplc1soKChvcGNvZGUpID4+IDUp
ICYgNyldCiAKIAorI2lmbmRlZiBfX0JFT1NfXyAvLyBudWtlIGFsbCBjb2RlLCByZXBsYWNlIGJ5
IEJlT1MgY29kZSBhdCB0aGUgZW5kIG9mIGZpbGUKICNpZiBVU0UgPT0gRE9NQUlOT1NfSU5URVJG
QUNFCiAKIC8qCkBAIC01ODE2LDMgKzU4MjMsMzU2IEBACiAgIH0KIAogI2VuZGlmIC8qIFdFX0hB
VkVfRklORF9ERVZJQ0VTICovCisKKyNlbmRpZiAvKiBfX0JFT1NfXyAqLworCisjaWYgVVNFID09
IEJFT1NfSU5URVJGQUNFCisKKyNpbmNsdWRlIDxzY3NpLmg+CisjaW5jbHVkZSA8Q0FNLmg+Cisj
aW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworYm9vbCBTY2FuRGly
KGNoYXIgKmRpcnBhdGgsY29uc3QgY2hhciAqdmVuZG9yLCBjb25zdCBjaGFyICptb2RlbCwKKwkJ
CQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJICAgICBpbnQgYnVzLCBpbnQgY2hhbm5lbCwg
aW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FORV9TdGF0dXMgKCphdHRhY2gpIChjb25zdCBj
aGFyICpkZXYpKTsKKworYm9vbCBTY2FuRGlyKGNoYXIgKmRpcnBhdGgsY29uc3QgY2hhciAqdmVu
ZG9yLCBjb25zdCBjaGFyICptb2RlbCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJ
ICAgICBpbnQgYnVzLCBpbnQgY2hhbm5lbCwgaW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FO
RV9TdGF0dXMgKCphdHRhY2gpIChjb25zdCBjaGFyICpkZXYpKQoreworCURJUiAqZGlyOworCXN0
cnVjdCBkaXJlbnQgKmRpcmVudDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyIHBhdGhbMTAyNF0s
cGF0aDFbMTAyNF07CisJCisJaWYoIXZlbmRvcikgcmV0dXJuKHRydWUpOworCQorCXN0cmNweShw
YXRoLGRpcnBhdGgpOworCWRpcj1vcGVuZGlyKHBhdGgpOworCWlmKCFkaXIpIHJldHVybiBmYWxz
ZTsgCisKKwl3aGlsZSgoZGlyZW50PXJlYWRkaXIoZGlyKSkpCisJeworCQlpZigoc3RyY21wKGRp
cmVudC0+ZF9uYW1lLCIuIik9PTApIHx8IChzdHJjbXAoZGlyZW50LT5kX25hbWUsIi4uIik9PTAp
KSBjb250aW51ZTsKKworCQlzdHJjcHkocGF0aDEscGF0aCk7CisJCXN0cmNhdChwYXRoMSwiLyIp
OworCQlzdHJjYXQocGF0aDEsZGlyZW50LT5kX25hbWUpOwkJCisJCQorCQkvL2dldCBzdGF0CisJ
CWlmKHN0YXQocGF0aDEsJnN0KSE9MCkgY29udGludWU7CQkKKwkJaWYoU19JU0RJUihzdC5zdF9t
b2RlKSkgU2NhbkRpcihwYXRoMSx2ZW5kb3IsbW9kZWwsdHlwZSxidXMsY2hhbm5lbCxpZCxsdW4s
YXR0YWNoKTsKKwkJZWxzZSAKKwkJeyAKKwkJCWludCBkZXZmZDsgCisJCSAgCWludCBlOyAKKwkJ
ICAJY2hhciB2ZW5kb3IxWzIwXSxkZXZpY2VbMjBdLHNjYW5uZXJfdHlwZTsgCisJCSAgCXJhd19k
ZXZpY2VfY29tbWFuZCByZGM7IAorCQkgIAl1Y2hhciBkYXRhWzM2XSwgc2Vuc2VbMTZdOyAKKwor
CQkJaWYoc3RyY21wKGRpcmVudC0+ZF9uYW1lLCAicmF3IikgIT0gMCkgY29udGludWU7IC8vIGp1
c3QgcmF3IGRldmljZXMgCisKKwkJCWRldmZkID0gb3BlbihwYXRoMSwgT19SRE9OTFkpOyAKKwkJ
CWlmKGRldmZkIDwgMCkgY29udGludWU7IAorCisJCQkvLyBzZW5kIGlucXVpcnkKKyAgCQkJLyog
ZmlsbCBvdXQgb3VyIHJhdyBkZXZpY2UgY29tbWFuZCBkYXRhICovIAorICAJCQlyZGMuZGF0YSA9
IGRhdGE7IAorICAJCQlyZGMuZGF0YV9sZW5ndGggPSAzNjsgCisgIAkJCXJkYy5zZW5zZV9kYXRh
ID0gc2Vuc2U7IAorICAJCQlyZGMuc2Vuc2VfZGF0YV9sZW5ndGggPSAxNjsgCisgIAkJCXJkYy50
aW1lb3V0ID0gMTAwMDAwMDsgCisgIAkJCXJkYy5mbGFncyA9IEJfUkFXX0RFVklDRV9EQVRBX0lO
OyAKKyAgCQkJcmRjLmNvbW1hbmRfbGVuZ3RoID0gNjsgCisJICAJCXJkYy5jb21tYW5kWzBdID0g
MHgxMjsgCisJCSAgCXJkYy5jb21tYW5kWzFdID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5kWzJd
ID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5kWzNdID0gMHgwMDsgCisgIAkJCXJkYy5jb21tYW5k
WzRdID0gMzY7IAorICAJCQlyZGMuY29tbWFuZFs1XSA9IDB4MDA7IAorCisgIAkJCWUgPSBpb2N0
bChkZXZmZCwgQl9SQVdfREVWSUNFX0NPTU1BTkQsICZyZGMsIHNpemVvZihyZGMpKTsgCisgIAkJ
CWNsb3NlKGRldmZkKTsgCisgIAkJCWlmKChlICE9IDApIHx8IChyZGMuY2FtX3N0YXR1cyAhPSBD
QU1fUkVRX0NNUCkpIGNvbnRpbnVlOyAKKworCQkJc2Nhbm5lcl90eXBlID0gZGF0YVswXSAmIDB4
MUY7IAorCQkJbWVtY3B5KHZlbmRvcjEsZGF0YSs4LDgpOworCQkJdmVuZG9yMVs4XT0wOworCQkJ
bWVtY3B5KGRldmljZSxkYXRhKzE2LDE2KTsKKwkJCWRldmljZVsxNl09MDsKKwkJCS8vIGhhY2sg
Zm9yIHNjYW5uZXJzIHdpdGggd3JvbmcgdHlwZSBpZAorICAJCQlpZihzY2FubmVyX3R5cGUgIT02
ICYmICghKHNjYW5uZXJfdHlwZT09MykpKSBjb250aW51ZTsgLy8gbm90IGEgc2Nhbm5lciwgc2tp
cCAKKworCQkJaWYoc3Ryc3RyKHZlbmRvcjEsdmVuZG9yKT09MCkgY29udGludWU7IC8vIHZlbmRv
ciBkb2VzIG5vdCBtYXRjaAorCQkJCQkJCisJCQkvLyBjYWxsIGF0dGFjaCBjYWxsYmFjaworCQkJ
YXR0YWNoKHBhdGgxKTsKKwkJfSAKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBzYW5laV9zY3NpX2ZpbmRfZGV2aWNlcyAoY29uc3QgY2hhciAqdmVuZG9yLCBj
b25zdCBjaGFyICptb2RlbCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJICAgICBp
bnQgYnVzLCBpbnQgY2hhbm5lbCwgaW50IGlkLCBpbnQgbHVuLAorCQkJCSAgICAgU0FORV9TdGF0
dXMgKCphdHRhY2gpIChjb25zdCBjaGFyICpkZXYpKQoreworCVNjYW5EaXIoIi9kZXYvYnVzL3Nj
c2kiLHZlbmRvcixtb2RlbCx0eXBlLGJ1cyxjaGFubmVsLGlkLGx1bixhdHRhY2gpOworLy8JU2Nh
bkRpcigiL2Rldi9kaXNrL2lkZS9hdGFwaSIsdmVuZG9yLG1vZGVsLHR5cGUsYnVzLGNoYW5uZWws
aWQsbHVuLGF0dGFjaCk7Cit9CisKK3N0cnVjdCBCZU9TX2ZkaW5mbworeworCWludCBmZDsKKwlT
QU5FSV9TQ1NJX1NlbnNlX0hhbmRsZXIgc2Vuc2VfaGFuZGxlcjsKKwl2b2lkICpzZW5zZV9hcmc7
Cit9OworCisKK1NBTkVfU3RhdHVzIHNhbmVpX3Njc2lfb3BlbiAoY29uc3QgY2hhciAqIGRldmlj
ZV9uYW1lLCBpbnQgKiBmZCwKKwkJCQkgICAgU0FORUlfU0NTSV9TZW5zZV9IYW5kbGVyIHNlbnNl
X2hhbmRsZXIsCisJCQkJICAgIHZvaWQgKnNlbnNlX2FyZykKK3sKKwlpbnQgbGZkOworCXN0cnVj
dCBCZU9TX2ZkaW5mbyAqZmRpbmZvOworCQorCWxmZD1vcGVuKGRldmljZV9uYW1lLDApOworCWlm
KGxmZDwwKSByZXR1cm4oU0FORV9TVEFUVVNfSU5WQUwpOworCS8vIGJ1aWxkIGRhdGEgc3RydWN0
dXJlCisJZmRpbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgQmVPU19mZGluZm8pKTsKKwlpZigh
ZmRpbmZvKSAKKwl7CisJCWNsb3NlKGxmZCk7CisJCXJldHVybihTQU5FX1NUQVRVU19JTlZBTCk7
CisJfQorCWZkaW5mby0+ZmQ9bGZkOworCWZkaW5mby0+c2Vuc2VfaGFuZGxlcj1zZW5zZV9oYW5k
bGVyOworCWZkaW5mby0+c2Vuc2VfYXJnPXNlbnNlX2FyZzsKKwkqZmQ9KGludClmZGluZm87CisJ
cmV0dXJuKFNBTkVfU1RBVFVTX0dPT0QpOworfQorCisvKiBkdW1teSBmb3IgdGhlIHByb3Bvc2Vk
IG5ldyBvcGVuIGNhbGwgKi8KK1NBTkVfU3RhdHVzCitzYW5laV9zY3NpX29wZW5fZXh0ZW5kZWQg
KGNvbnN0IGNoYXIgKmRldiwgaW50ICpmZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgU0FO
RUlfU0NTSV9TZW5zZV9IYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqaGFuZGxlcl9hcmcsIGludCAqYnVmZmVyc2l6ZSkKK3sKKyAgU0FORV9TdGF0dXMgcmVz
OworICByZXMgPSBzYW5laV9zY3NpX29wZW4oZGV2LCBmZHAsIGhhbmRsZXIsIGhhbmRsZXJfYXJn
KTsKKyAgaWYgKHNhbmVpX3Njc2lfbWF4X3JlcXVlc3Rfc2l6ZSA8ICpidWZmZXJzaXplKQorICAg
ICpidWZmZXJzaXplID0gc2FuZWlfc2NzaV9tYXhfcmVxdWVzdF9zaXplOworICByZXR1cm4gcmVz
OworfQorCisvKiBUaGUgZXh0ZW5kZWQgb3BlbiBjYWxsIGFsbG93cyBhIGJhY2tlbmQgdG8gYXNr
IGZvciBhIHNwZWNpZmljCisgICBidWZmZXIgc2l6ZS4gc2FuZWlfc2NzaV9vcGVuIHRyaWVzIHRv
IGFsbG9jYXRlIGEgYnVmZmVyIG9mIHRoZQorICAgc2l6ZSBnaXZlbiBieSAqYnVmZmVyc2l6ZSB1
cG9uIGVudHJ5IHRvIHRoaXMgZnVuY3Rpb24uIElmCisgICBzYW5laV9zY3NpX29wZW5fZXh0ZW5k
ZWQgcmV0dXJucyBzdWNjZXNzZnVsbHksICpidWZmZXJzaXplCisgICBjb250YWlucyB0aGUgYXZh
aWxhYmxlIGJ1ZmZlciBzaXplLiBUaGlzIHZhbHVlIG1heSBiZSBib3RoCisgICBzbWFsbGVyIG9y
IGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXF1ZXN0ZWQgYnkgdGhlIGJhY2tlbmQ7CisgICBpdCBj
YW4gZXZlbiBiZSB6ZXJvLiBUaGUgYmFja2VuZCBtdXN0IGRlY2lkZSwgaWYgaXQgZ290IGVub3Vn
aAorICAgYnVmZmVyIG1lbW9yeSB0byB3b3JrLgorCisgICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9m
ICpidWZmZXJzaXplIG1heSBkaWZmZXIgZm9yIGRpZmZlcmVudAorICAgZmlsZXMuCisqLworLy9T
QU5FX1N0YXR1cyBzYW5laV9zY3NpX29wZW5fZXh0ZW5kZWQgKAorLy8gICAgICAgY29uc3QgY2hh
ciAqIGRldmljZV9uYW1lLCBpbnQgKiBmZCwKKy8vICAgICAgIFNBTkVJX1NDU0lfU2Vuc2VfSGFu
ZGxlciBzZW5zZV9oYW5kbGVyLAorLy8gICAgICAgdm9pZCAqc2Vuc2VfYXJnLCBpbnQgKmJ1ZmZl
cnNpemUpCisvL3sKKy8vfQorCisvKiBMZXQgYmFja2VuZHMgZGVjaWRlLCB3aGljaCBvcGVuIGNh
bGwgdG8gdXNlOgorICAgaWYgSEFWRV9TQU5FSV9TQ1NJX09QRU5fRVhURU5ERUQgaXMgZGVmaW5l
ZCwgc2FuZWlfc2NzaV9vcGVuX2V4dGVuZGVkCisgICBtYXkgYmUgdXNlZC4KKyAgIE1heSBhbHNv
IGJlIHVzZWQgdG8gZGVjaWRlLCBpZiBzYW5laV9zY3NpX3JlcV9mbHVzaF9hbGwgb3IKKyAgIHNh
bmVpX3Njc2lfcmVxX2ZsdXNoX2FsbF9leHRlbmRlZCBzaG91bGQgYmUgdXNlZC4KKyovCisvLyNk
ZWZpbmUgSEFWRV9TQU5FSV9TQ1NJX09QRU5fRVhURU5ERUQKKworLyogT25lIG9yIG1vcmUgc2Nz
aSBjb21tYW5kcyBjYW4gYmUgZW5xdWV1ZWQgYnkgY2FsbGluZyByZXFfZW50ZXIoKS4KKyAgIFNS
QyBpcyB0aGUgcG9pbnRlciB0byB0aGUgU0NTSSBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIHdyaXRl
IGRhdGEKKyAgIGFuZCBTUkNfU0laRSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGFuZCBk
YXRhLiAgRFNUIGlzIGEKKyAgIHBvaW50ZXIgdG8gYSBidWZmZXIgaW4gd2hpY2ggZGF0YSBpcyBy
ZXR1cm5lZCAoaWYgYW55KS4gIEl0IG1heSBiZQorICAgTlVMTCBpZiBubyBkYXRhIGlzIHJldHVy
bmVkIGJ5IHRoZSBjb21tYW5kLiAgT24gaW5wdXQgKkRTVF9TSVpFIGlzCisgICB0aGUgc2l6ZSBv
ZiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgRFNULCBvbiBleGl0LCAqRFNUX1NJWkUgaXMgc2V0
CisgICB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGluIHRoZSBidWZmZXIgKHdoaWNo
IGlzIGxlc3MgdGhhbgorICAgb3IgZXF1YWwgdG8gdGhlIGJ1ZmZlciBzaXplKS4gIERTVF9TSVpF
IG1heSBiZSBOVUxMIGlmIG5vIGRhdGEgaXMKKyAgIGV4cGVjdGVkLiAgSURQIGlzIGEgcG9pbnRl
ciB0byBhIHZvaWQqIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcworICAgdGhlIGVudGVyZWQgcmVx
dWVzdC4KKworICAgTk9URTogU29tZSBzeXN0ZW1zIG1heSBub3Qgc3VwcG9ydCBtdWx0aXBsZSBv
dXRzdGFuZGluZyBjb21tYW5kcy4KKyAgIE9uIHN1Y2ggc3lzdGVtcywgZW50ZXIoKSBtYXkgYmxv
Y2suICBJbiBvdGhlciB3b3JkcywgaXQgaXMgbm90CisgICBwcm9wZXIgdG8gYXNzdW1lIHRoYXQg
ZW50ZXIoKSBpcyBhIG5vbi1ibG9ja2luZyByb3V0aW5lLiAgKi8KK1NBTkVfU3RhdHVzIHNhbmVp
X3Njc2lfcmVxX2VudGVyIChpbnQgZmQsCisJCQkJCSBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qg
c3JjX3NpemUsCisJCQkJCSB2b2lkICogZHN0LCBzaXplX3QgKiBkc3Rfc2l6ZSwKKwkJCQkJIHZv
aWQgKippZHApCit7CisJcmV0dXJuKHNhbmVpX3Njc2lfY21kKGZkLHNyYyxzcmNfc2l6ZSxkc3Qs
ZHN0X3NpemUpKTsKK30KKworLyogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgdGhlIFNDU0kg
Y29tbWFuZCB3aXRoIGlkIElELiAgKi8KK1NBTkVfU3RhdHVzIHNhbmVpX3Njc2lfcmVxX3dhaXQg
KHZvaWQgKmlkKQoreworCXJldHVybihTQU5FX1NUQVRVU19HT09EKTsKK30KKworLyogVGhpcyBp
cyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgaXMgZXF1aXZhbGVudCB0byBhIHBhaXIgb2YK
KyAgIGVudGVyKCkvd2FpdCgpIGNhbGxzLiAgKi8KKworU0FORV9TdGF0dXMgc2FuZWlfc2NzaV9j
bWQyIChpbnQgZmQsCisJCSAgCQkJCSAgICAgY29uc3Qgdm9pZCAqIGNtZCwgc2l6ZV90IGNtZF9z
aXplLAorCQkJCSAgIAkJCSBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qgc3JjX3NpemUsCisJCQkJ
ICAgCQkJIHZvaWQgKiBkc3QsIHNpemVfdCAqIGRzdF9zaXplKQoreworCWludCBlLGk7IAorICAJ
Ly9pbnQgcGF0aCx0YXJnLGx1bix0eXBlOyAKKyAgCXJhd19kZXZpY2VfY29tbWFuZCByZGM7IAor
ICAJdWNoYXIgc2Vuc2VbNjRdOyAKKwlzdHJ1Y3QgQmVPU19mZGluZm8gKmZkaW5mbz0oc3RydWN0
IEJlT1NfZmRpbmZvICopZmQ7CisJdm9pZCAqZGF0YTsKKwlpbnQgZGF0YV9zaXplLGZsYWdzOwor
CWludCBsZmQ9ZmRpbmZvLT5mZDsKKwkKKwkvLyBjYWxjIGNvbW1hbmQgbGVuZ3RoCisJLy9jbWRf
c2l6ZT1DREJfU0laRSgoKGNoYXIgKilzcmMpWzBdKTsKKwlmb3IoaT0wO2k8Y21kX3NpemU7aSsr
KSByZGMuY29tbWFuZFtpXT0oKGNoYXIgKiljbWQpW2ldOworCS8vIGNhbGMgZGlyZWN0aW9uCisJ
aWYoKCFkc3QpICYmICgoIWRzdF9zaXplKSB8fCAoKmRzdF9zaXplPT0wKSkpCisJeworCQkvLyB3
cml0ZSBvbmx5CisJCWlmKHNyY19zaXplKQorCQl7CisJCQkvLyB0aGVyZSdzIGRhdGEgdG8gc2Vu
ZAorCQkJZGF0YT1zcmM7CisJCQlkYXRhX3NpemU9c3JjX3NpemU7CisJCX0KKwkJZWxzZQorCQl7
CisJCQlkYXRhPTA7CisJCQlkYXRhX3NpemU9MDsKKwkJfQorCQlmbGFncz1CX1JBV19ERVZJQ0Vf
UkVQT1JUX1JFU0lEVUFMOworCX0KKwllbHNlCisJeworCQkvLyByZWFkIHRvbworCQlkYXRhPWRz
dDsKKwkJZGF0YV9zaXplPSpkc3Rfc2l6ZTsKKwkJZmxhZ3M9Ql9SQVdfREVWSUNFX0RBVEFfSU58
Ql9SQVdfREVWSUNFX1NIT1JUX1JFQURfVkFMSUR8Ql9SQVdfREVWSUNFX1JFUE9SVF9SRVNJRFVB
TDsKKwl9CisgIAkvKiBmaWxsIG91dCBvdXIgcmF3IGRldmljZSBjb21tYW5kIGRhdGEgKi8gCisg
IAlyZGMuZGF0YSA9IGRhdGE7IAorICAJcmRjLmRhdGFfbGVuZ3RoID1kYXRhX3NpemU7IAorCisg
IAlyZGMuc2Vuc2VfZGF0YSA9IHNlbnNlOyAKKyAgCXJkYy5zZW5zZV9kYXRhX2xlbmd0aCA9IDY0
OyAKKyAgCXJkYy50aW1lb3V0ID0gMTAwMDAwMDAwOyAKKworICAJcmRjLmZsYWdzID0gZmxhZ3M7
IAorICAJcmRjLmNvbW1hbmRfbGVuZ3RoID0gY21kX3NpemU7IAorCisgIAllID0gaW9jdGwobGZk
LCBCX1JBV19ERVZJQ0VfQ09NTUFORCwgJnJkYywgc2l6ZW9mKHJkYykpOyAKKyAgCWlmKChlICE9
IDApIHx8IChyZGMuY2FtX3N0YXR1cyAhPSBDQU1fUkVRX0NNUCkpIHJldHVybihTQU5FX1NUQVRV
U19JTlZBTCk7CisgIAorICAJLy8gY2FsbCBzZW5zZSBoYW5kbGVyIGlmIHRoZXJlJ3Mgc2Vuc2Ug
ZGF0YQorICAJaWYocmRjLmNhbV9zdGF0dXMmIENBTV9BVVRPU05TX1ZBTElEKSAKKyAgCQkJCWU9
ZmRpbmZvLT5zZW5zZV9oYW5kbGVyKGZkLHNlbnNlLGZkaW5mby0+c2Vuc2VfYXJnKTsKKworCS8v
IHJldHVybiByZWFkIGxlbmd0aAorCWlmKGRzdCkgKmRzdF9zaXplPXJkYy5kYXRhX2xlbmd0aDsK
KyAgCXJldHVybihlKTsgCit9CisKKworU0FORV9TdGF0dXMgc2FuZWlfc2NzaV9jbWQgKGludCBm
ZCwKKwkJCQkgICBjb25zdCB2b2lkICogc3JjLCBzaXplX3Qgc3JjX3NpemUsCisJCQkJICAgdm9p
ZCAqIGRzdCwgc2l6ZV90ICogZHN0X3NpemUpCit7CisJaW50IGUsaTsgCisgIAkvL2ludCBwYXRo
LHRhcmcsbHVuLHR5cGU7IAorICAJcmF3X2RldmljZV9jb21tYW5kIHJkYzsgCisgIAl1Y2hhciBz
ZW5zZVs2NF07IAorCXN0cnVjdCBCZU9TX2ZkaW5mbyAqZmRpbmZvPShzdHJ1Y3QgQmVPU19mZGlu
Zm8gKilmZDsKKwl2b2lkICpkYXRhOworCWludCBkYXRhX3NpemUsY21kX3NpemUsZmxhZ3M7CisJ
aW50IGxmZD1mZGluZm8tPmZkOworCQorCS8vIGNhbGMgY29tbWFuZCBsZW5ndGgKKwljbWRfc2l6
ZT1DREJfU0laRSgoKGNoYXIgKilzcmMpWzBdKTsKKwlmb3IoaT0wO2k8Y21kX3NpemU7aSsrKSBy
ZGMuY29tbWFuZFtpXT0oKGNoYXIgKilzcmMpW2ldOworCS8vIGNhbGMgZGlyZWN0aW9uCisJaWYo
KCFkc3QpICYmICgoIWRzdF9zaXplKSB8fCAoKmRzdF9zaXplPT0wKSkpCisJeworCQkvLyB3cml0
ZSBvbmx5CisJCWlmKGNtZF9zaXplPHNyY19zaXplKQorCQl7CisJCQkvLyB0aGVyZSdzIGRhdGEg
dG8gc2VuZAorCQkJZGF0YT0mKCgoY2hhciAqKXNyYylbY21kX3NpemVdKTsKKwkJCWRhdGFfc2l6
ZT1zcmNfc2l6ZS1jbWRfc2l6ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWRhdGE9MDsKKwkJCWRh
dGFfc2l6ZT0wOworCQl9CisJCWZsYWdzPUJfUkFXX0RFVklDRV9SRVBPUlRfUkVTSURVQUw7CisJ
fQorCWVsc2UKKwl7CisJCS8vIHJlYWQgdG9vCisJCWRhdGE9ZHN0OworCQlkYXRhX3NpemU9KmRz
dF9zaXplOworCQlmbGFncz1CX1JBV19ERVZJQ0VfREFUQV9JTnxCX1JBV19ERVZJQ0VfU0hPUlRf
UkVBRF9WQUxJRHxCX1JBV19ERVZJQ0VfUkVQT1JUX1JFU0lEVUFMOworCX0KKyAgCS8qIGZpbGwg
b3V0IG91ciByYXcgZGV2aWNlIGNvbW1hbmQgZGF0YSAqLyAKKyAgCXJkYy5kYXRhID0gZGF0YTsg
CisgIAlyZGMuZGF0YV9sZW5ndGggPWRhdGFfc2l6ZTsgCisKKyAgCXJkYy5zZW5zZV9kYXRhID0g
c2Vuc2U7IAorICAJcmRjLnNlbnNlX2RhdGFfbGVuZ3RoID0gNjQ7IAorICAJcmRjLnRpbWVvdXQg
PSAxMDAwMDAwMDA7IAorCisgIAlyZGMuZmxhZ3MgPSBmbGFnczsgCisgIAlyZGMuY29tbWFuZF9s
ZW5ndGggPSBjbWRfc2l6ZTsgCisKKyAgCWUgPSBpb2N0bChsZmQsIEJfUkFXX0RFVklDRV9DT01N
QU5ELCAmcmRjLCBzaXplb2YocmRjKSk7IAorICAJaWYoKGUgIT0gMCkgfHwgKHJkYy5jYW1fc3Rh
dHVzICE9IENBTV9SRVFfQ01QKSkgcmV0dXJuKFNBTkVfU1RBVFVTX0lOVkFMKTsKKyAgCisgIAkv
LyBjYWxsIHNlbnNlIGhhbmRsZXIgaWYgdGhlcmUncyBzZW5zZSBkYXRhCisgIAlpZihyZGMuY2Ft
X3N0YXR1cyYgQ0FNX0FVVE9TTlNfVkFMSUQpIAorICAJCQkJZT1mZGluZm8tPnNlbnNlX2hhbmRs
ZXIoZmQsc2Vuc2UsZmRpbmZvLT5zZW5zZV9hcmcpOworCisJLy8gcmV0dXJuIHJlYWQgbGVuZ3Ro
CisJaWYoZHN0KSAqZHN0X3NpemU9cmRjLmRhdGFfbGVuZ3RoOworICAJcmV0dXJuKGUpOyAKK30K
KworLyogRmx1c2ggYWxsIHBlbmRpbmcgU0NTSSBjb21tYW5kcy4gVGhpcyBmdW5jdGlvbiB3b3Jr
IG9ubHksCisgICBpZiB6ZXJvIG9yIG9uZSBTQ1NJIGZpbGUgaGFuZGxlcyBhcmUgb3Blbi4KKyov
Cit2b2lkIHNhbmVpX3Njc2lfcmVxX2ZsdXNoX2FsbCAodm9pZCkKK3sKK30KKworLyogRmx1c2gg
YWxsIFNDU0kgY29tbWFuZHMgcGVuZGluZyBmb3Igb25lIGhhbmRsZSAqLwordm9pZCBzYW5laV9z
Y3NpX3JlcV9mbHVzaF9hbGxfZXh0ZW5kZWQgKGludCBmZCkKK3sKK30KKwordm9pZCBzYW5laV9z
Y3NpX2Nsb3NlIChpbnQgZmQpCit7CisJc3RydWN0IEJlT1NfZmRpbmZvICpmZGluZm89KHN0cnVj
dCBCZU9TX2ZkaW5mbyAqKWZkOworCisJY2xvc2UoZmRpbmZvLT5mZCk7CisJZnJlZShmZGluZm8p
OworfQorCisjZW5kaWYKZGlmZiAtdXJOIC9EZXZlbC9zYW5lLWJhY2tlbmRzLTEuMC4xNS9zYW5l
aS9zYW5laV90aHJlYWQuYyBzYW5lL3NhbmVpL3NhbmVpX3RocmVhZC5jCi0tLSAvRGV2ZWwvc2Fu
ZS1iYWNrZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfdGhyZWFkLmMJVGh1IE9jdCAxNCAxMzo0OTow
NCAyMDA0CisrKyBzYW5lL3NhbmVpL3NhbmVpX3RocmVhZC5jCVR1ZSBGZWIgMTUgMjA6NTI6MzIg
MjAwNQpAQCAtNjQsNyArNjQsMTEgQEAKICMgZGVmaW5lIElOQ0xfRE9TUFJPQ0VTUwogIyBpbmNs
dWRlIDxvczIuaD4KICNlbmRpZgotI2lmICFkZWZpbmVkIFVTRV9QVEhSRUFEICYmICFkZWZpbmVk
IEhBVkVfT1MyX0gKKyNpZmRlZiBfX0JFT1NfXworIyB1bmRlZiBVU0VfUFRIUkVBRCAvKiBmb3Jj
ZSAqLworIyBpbmNsdWRlIDxrZXJuZWwvT1MuaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkIFVTRV9Q
VEhSRUFEICYmICFkZWZpbmVkIEhBVkVfT1MyX0ggJiYgIWRlZmluZWQgX19CRU9TX18KICMgaW5j
bHVkZSA8c3lzL3dhaXQuaD4KICNlbmRpZgogI2lmIGRlZmluZWQgVVNFX1BUSFJFQUQKQEAgLTEw
NSw3ICsxMDksNyBAQAogU0FORV9Cb29sCiBzYW5laV90aHJlYWRfaXNfZm9ya2VkKCB2b2lkICkK
IHsKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJfSAorI2lmIGRl
ZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmluZWQgX19CRU9T
X18KIAlyZXR1cm4gU0FORV9GQUxTRTsKICNlbHNlCiAJcmV0dXJuIFNBTkVfVFJVRTsKQEAgLTE4
Miw3ICsxODYsNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2Vsc2UgLyogSEFWRV9PUzJfSCAqLwor
I2VsaWYgZGVmaW5lZCBfX0JFT1NfXworCitzdGF0aWMgaW50MzIKK2xvY2FsX3RocmVhZCggdm9p
ZCAqYXJnICkKK3sKKwlwVGhyZWFkRGF0YURlZiBsdGQgPSAocFRocmVhZERhdGFEZWYpYXJnOwor
CisJREJHKCAyLCAidGhyZWFkIHN0YXJ0ZWQsIGNhbGxpbmcgZnVuYygpIG5vdy4uLlxuIiApOwor
CWx0ZC0+c3RhdHVzID0gbHRkLT5mdW5jKCBsdGQtPmZ1bmNfZGF0YSApOworCisJREJHKCAyLCAi
ZnVuYygpIGRvbmUgLSBzdGF0dXMgPSAlZFxuIiwgbHRkLT5zdGF0dXMgKTsKKwlyZXR1cm4gbHRk
LT5zdGF0dXM7Cit9CisKKy8qCisgKiBzdGFydHMgYSBuZXcgdGhyZWFkIG9yIHByb2Nlc3MKKyAq
IHBhcmFtZXRlcnM6CisgKiBzdGFyICBhZGRyZXNzIG9mIHJlYWRlciBmdW5jdGlvbgorICogYXJn
cyAgcG9pbnRlciB0byBzY2FubmVyIGRhdGEgc3RydWN0dXJlCisgKgorICovCitpbnQKK3NhbmVp
X3RocmVhZF9iZWdpbiggaW50ICgqZnVuYykodm9pZCAqYXJncyksIHZvaWQqIGFyZ3MgKQorewor
CWludCAgICAgICAgICAgcGlkOworCisJdGQuZnVuYyAgICAgID0gZnVuYzsKKwl0ZC5mdW5jX2Rh
dGEgPSBhcmdzOworCisJcGlkID0gc3Bhd25fdGhyZWFkKCBsb2NhbF90aHJlYWQsICJzYW5lIHRo
cmVhZCAoeWVzIHRoZXkgY2FuIGJlKSIsIEJfTk9STUFMX1BSSU9SSVRZLCAodm9pZCopJnRkICk7
CisJaWYgKCBwaWQgPCBCX09LICkgeworCQlEQkcoIDEsICJzcGF3bl90aHJlYWQoKSBmYWlsZWRc
biIgKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIHJlc3VtZV90aHJlYWQocGlkKSA8IEJfT0sg
KSB7CisJCURCRyggMSwgInJlc3VtZV90aHJlYWQoKSBmYWlsZWRcbiIgKTsKKwkJcmV0dXJuIC0x
OworCX0KKyAgIAorCURCRyggMiwgInNwYXduX3RocmVhZCgpIGNyZWF0ZWQgdGhyZWFkICVkXG4i
LCBwaWQgKTsKKwlyZXR1cm4gcGlkOworfQorCitpbnQKK3NhbmVpX3RocmVhZF93YWl0cGlkKCBp
bnQgcGlkLCBpbnQgKnN0YXR1cyApCit7CisgIGludDMyIHN0OworICBpZiAoIHdhaXRfZm9yX3Ro
cmVhZChwaWQsICZzdCkgPCBCX09LICkKKyAgICByZXR1cm4gLTE7CisgIGlmICggc3RhdHVzICkK
KyAgICAqc3RhdHVzID0gKGludClzdDsKKyAgcmV0dXJuIHBpZDsKK30KKworaW50CitzYW5laV90
aHJlYWRfc2VuZHNpZyggaW50IHBpZCwgaW50IHNpZyApCit7CisJaWYgKHNpZyA9PSBTSUdLSUxM
KQorCQlzaWcgPSBTSUdLSUxMVEhSOworCXJldHVybiBraWxsKHBpZCwgc2lnKTsKK30KKworI2Vs
c2UgLyogSEFWRV9PUzJfSCwgX19CRU9TX18gKi8KIAogI2lmZGVmIFVTRV9QVEhSRUFECiAKQEAg
LTQwNCw3ICs0NzAsNyBAQAogU0FORV9TdGF0dXMKIHNhbmVpX3RocmVhZF9nZXRfc3RhdHVzKCBp
bnQgcGlkICkKIHsKLSNpZiBkZWZpbmVkIFVTRV9QVEhSRUFEIHx8IGRlZmluZWQgSEFWRV9PUzJf
SAorI2lmIGRlZmluZWQgVVNFX1BUSFJFQUQgfHwgZGVmaW5lZCBIQVZFX09TMl9IIHx8IGRlZmlu
ZWQgX19CRU9TX18KIAlfVkFSX05PVF9VU0VEKCBwaWQgKTsKIAogCXJldHVybiB0ZC5zdGF0dXM7
CmRpZmYgLXVyTiAvRGV2ZWwvc2FuZS1iYWNrZW5kcy0xLjAuMTUvc2FuZWkvc2FuZWlfdXNiLmMg
c2FuZS9zYW5laS9zYW5laV91c2IuYwotLS0gL0RldmVsL3NhbmUtYmFja2VuZHMtMS4wLjE1L3Nh
bmVpL3NhbmVpX3VzYi5jCVN1biBPY3QgIDMgMTY6MTg6MTcgMjAwNAorKysgc2FuZS9zYW5laS9z
YW5laV91c2IuYwlUdWUgTWFyICAxIDA5OjA4OjA0IDIwMDUKQEAgLTEzMyw2ICsxMzMsOSBAQAog
ICB2b2lkICpkYXRhOwogfQogY21zZzsKKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisjaW5jbHVk
ZSA8ZHJpdmVycy9VU0Jfc2Nhbm5lci5oPgorI2luY2x1ZGUgPGtlcm5lbC9PUy5oPgogI2VuZGlm
IC8qIF9fbGludXhfXyAqLwogCiBzdGF0aWMgU0FORV9Cb29sIGluaXRlZCA9IFNBTkVfRkFMU0U7
CkBAIC0xOTcsNyArMjAwLDIwIEBACiAJREJHICgzLCAic2FuZWlfdXNiX2dldF92ZW5kb3JfcHJv
ZHVjdDogaW9jdGwgKHByb2R1Y3QpICIKIAkgICAgICJvZiBkZXZpY2UgJWQgZmFpbGVkOiAlc1xu
IiwgZmQsIHN0cmVycm9yIChlcnJubykpOwogICAgIH0KLSNlbmRpZiAvKiBkZWZpbmVkIChfX2xp
bnV4X18pICovCisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorICB7CisgICAgdWludDE2IHZlbmRv
ciwgcHJvZHVjdDsKKyAgICBpZiAoaW9jdGwgKGZkLCBCX1NDQU5ORVJfSU9DVExfVkVORE9SLCAm
dmVuZG9yKSAhPSBCX09LKQorICAgICAgREJHICgzLCAia2VybmVsX2dldF92ZW5kb3JfcHJvZHVj
dDogaW9jdGwgKHZlbmRvcikgIgorCSAgICJvZiBkZXZpY2UgJWQgZmFpbGVkOiAlc1xuIiwgZmQs
IHN0cmVycm9yIChlcnJubykpOworICAgIGlmIChpb2N0bCAoZmQsIEJfU0NBTk5FUl9JT0NUTF9Q
Uk9EVUNULCAmcHJvZHVjdCkgIT0gQl9PSykKKyAgICAgIERCRyAoMywgInNhbmVpX3VzYl9nZXRf
dmVuZG9yX3Byb2R1Y3Q6IGlvY3RsIChwcm9kdWN0KSAiCisJICAgIm9mIGRldmljZSAlZCBmYWls
ZWQ6ICVzXG4iLCBmZCwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgLyogY29weSBmcm9tIDE2IHRv
IDMyIGJpdCB2YWx1ZSAqLworICAgICp2ZW5kb3JJRCA9IHZlbmRvcjsKKyAgICAqcHJvZHVjdElE
ID0gcHJvZHVjdDsKKyAgfQorI2VuZGlmIC8qIGRlZmluZWQgKF9fbGludXhfXyksIGRlZmluZWQo
X19CRU9TX18pICovCiAgICAgICAvKiBwdXQgbW9yZSBvcy1kZXBlbmRhbnQgc3R1ZmYgLi4uICov
CiB9CiAKQEAgLTIxMSw2ICsyMjcsOCBAQAogICAgICIvZGV2L3VzYi8iLCAic2Nhbm5lciIsCiAj
ZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmlu
ZWQgKF9fT3BlbkJTRF9fKQogICAgICIvZGV2LyIsICJ1c2Nhbm5lciIsCisjZWxpZiBkZWZpbmVk
KF9fQkVPU19fKQorICAgICIvZGV2L3NjYW5uZXIvdXNiLyIsICIiLAogI2VuZGlmCiAgICAgMCwg
MAogICB9OwpAQCAtMjY2LDYgKzI4NCwxMCBAQAogICAgICAgCiAgICAgICB3aGlsZSAoKGRpcl9l
bnRyeSA9IHJlYWRkaXIgKGRpcikpICE9IDApCiAJeworCSAgLy8gc2tpcCBzdGFuZGFyZCBkaXIg
ZW50cmllcworCSAgaWYgKHN0cmNtcChkaXJfZW50cnktPmRfbmFtZSwgIi4iKSA9PSAwIHx8IHN0
cmNtcChkaXJfZW50cnktPmRfbmFtZSwgIi4uIikgPT0gMCkKKwkgIAljb250aW51ZTsKKwkgIAkJ
CiAJICBpZiAoc3RybmNtcCAoYmFzZV9uYW1lLCBkaXJfZW50cnktPmRfbmFtZSwgc3RybGVuIChi
YXNlX25hbWUpKSA9PSAwKQogCSAgICB7CiAJICAgICAgaWYgKHN0cmxlbiAoZGlyX25hbWUpICsg
c3RybGVuIChkaXJfZW50cnktPmRfbmFtZSkgKyAxID4gc2l6ZW9mIChkZXZuYW1lKSkKQEAgLTk3
NCw2ICs5OTYsMjYgQEAKICAgICAgIGlmICgocnR5cGUgJiAweDgwKSAmJiBkZWJ1Z19sZXZlbCA+
IDEwKQogCXByaW50X2J1ZmZlciAoZGF0YSwgbGVuKTsKICAgICAgIHJldHVybiBTQU5FX1NUQVRV
U19HT09EOworI2VsaWYgZGVmaW5lZChfX0JFT1NfXykKKyAgICAgIHN0cnVjdCB1c2Jfc2Nhbm5l
cl9pb2N0bF9jdHJsbXNnIGM7CisKKyAgICAgIGMucmVxLnJlcXVlc3RfdHlwZSA9IHJ0eXBlOwor
ICAgICAgYy5yZXEucmVxdWVzdCA9IHJlcTsKKyAgICAgIGMucmVxLnZhbHVlID0gdmFsdWU7Cisg
ICAgICBjLnJlcS5pbmRleCA9IGluZGV4OworICAgICAgYy5yZXEubGVuZ3RoID0gbGVuOworICAg
ICAgYy5kYXRhID0gZGF0YTsKKworICAgICAgaWYgKGlvY3RsIChkZXZpY2VzW2RuXS5mZCwgQl9T
Q0FOTkVSX0lPQ1RMX0NUUkxNU0csICZjKSA8IDApCisJeworCSAgREJHICg1LCAic2FuZWlfdXNi
X2NvbnRyb2xfbXNnOiBTQ0FOTkVSX0lPQ1RMX0NUUkxNU0cgZXJyb3IgLSAlc1xuIiwKKwkgICAg
ICAgc3RyZXJyb3IgKGVycm5vKSk7CisJICByZXR1cm4gU0FORV9TVEFUVVNfSU9fRVJST1I7CisJ
fQorCWlmICgocnR5cGUgJiAweDgwKSAmJiBkZWJ1Z19sZXZlbCA+IDEwKQorCQlwcmludF9idWZm
ZXIgKGRhdGEsIGxlbik7CisJCisJcmV0dXJuIFNBTkVfU1RBVFVTX0dPT0Q7CiAjZWxzZSAvKiBu
b3QgX19saW51eF9fICovCiAgICAgICBEQkcgKDUsICJzYW5laV91c2JfY29udHJvbF9tc2c6IG5v
dCBzdXBwb3J0ZWQgb24gdGhpcyBPU1xuIik7CiAgICAgICByZXR1cm4gU0FORV9TVEFUVVNfVU5T
VVBQT1JURUQ7Cg==
------------Zoidberg-BeMail-temp----------





More information about the sane-devel mailing list