Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Aug 2016 00:42:49 +0530
From:      Akshay Jaggi <akshay1994.leo@gmail.com>
To:        freebsd-virtualization@freebsd.org, freebsd-xen@freebsd.org,  xen-devel@lists.xen.org
Cc:        Pedro Giffuni <pfg@freebsd.org>, =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= <royger@freebsd.org>
Subject:   Call for Testing : Grant Table User-space Device
Message-ID:  <CAAeUNVmz521zKZErZqsMuJKHcS_fSvVCw=LByQXoxh_RAiLwiQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--001a1140b16018b2e40539076444
Content-Type: text/plain; charset=UTF-8

Hello Everyone,


I am one of the students selected under FreeBSD for Google Summer of Code
this year.

My project was to implement a user-space grant table device for FreeBSD and
add the appropriate bindings for the device in Xen, to enable the qdisk
backends. (More details:
http://akshayjaggi.me/blog/gsoc-freebsd-xen-progress-report/)

The code is right out the oven and cooked enough for testing now, and I
would be glad if some of the community member would want to give it a try.

Instructions for applying the patches:

1) Apply *freebsd_final_flash.patch* to /usr/src on FreeBSD. Buildkernel
and Installkernel.
2) Add *xen_freebsd.patch* to /usr/ports/sysutils/xen-tools/files/, and
bind it to be applied in /usr/ports/sysutils/xen-tools/Makefile. Make and
Make install.

Reboot and play! Change the backendtype to qdisk in the domain
configuration files, and test. :)

Meanwhile, I am working on getting my work pushed into FreeBSD, and once
the gntdev device is ready on FreeBSD, I'll push the necessary bindings in
Xen.


Happy Testing!


Cheers and Regards,
Akshay Jaggi

--001a1140b16018b2e40539076444
Content-Type: application/octet-stream; name="freebsd_final_flash.patch"
Content-Disposition: attachment; filename="freebsd_final_flash.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ircetg1k0

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmlsZXMKaW5kZXggN2I3ZGJl
Yi4uMmEwZWVmNCAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMKKysrIGIvc3lzL2NvbmYvZmls
ZXMKQEAgLTI5NzMsNiArMjk3Myw3IEBAIGRldi94ZW4veGVuc3RvcmUveGVuc3RvcmVfZGV2LmMJ
b3B0aW9uYWwgeGVuaHZtCiBkZXYveGVuL3hlbnN0b3JlL3hlbnN0b3JlZF9kZXYuYwlvcHRpb25h
bCB4ZW5odm0KIGRldi94ZW4vZXZ0Y2huL2V2dGNobl9kZXYuYwlvcHRpb25hbCB4ZW5odm0KIGRl
di94ZW4vcHJpdmNtZC9wcml2Y21kLmMJb3B0aW9uYWwgeGVuaHZtCitkZXYveGVuL2dudGRldi9n
bnRkZXYuYwkJb3B0aW9uYWwgeGVuaHZtCiBkZXYveGVuL2RlYnVnL2RlYnVnLmMJCW9wdGlvbmFs
IHhlbmh2bQogZGV2L3hsL2lmX3hsLmMJCQlvcHRpb25hbCB4bCBwY2kKIGRldi94bC94bHBoeS5j
CQkJb3B0aW9uYWwgeGwgcGNpCmRpZmYgLS1naXQgYS9zeXMvZGV2L3hlbi9nbnRkZXYvZ250ZGV2
LmMgYi9zeXMvZGV2L3hlbi9nbnRkZXYvZ250ZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZGMzMTQyZQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9kZXYveGVuL2dudGRl
di9nbnRkZXYuYwpAQCAtMCwwICsxLDEwNTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE2
IEFrc2hheSBKYWdnaSA8amFnZ2lARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhP
UiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
KyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICoKKyAqIGdudGRldi5jCisgKiAKKyAqIEludGVyZmFjZSB0byAvZGV2L3hlbi9nbnRkZXYuCisg
KiAKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7
CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs
dWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9tYWxs
b2MuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNp
bmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjaW5jbHVkZSA8
c3lzL3NlbGluZm8uaD4KKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2luY2x1ZGUgPHN5cy9jb25m
Lmg+CisjaW5jbHVkZSA8c3lzL2ZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgorI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3RyZWUuaD4KKyNpbmNsdWRlIDxzeXMv
bW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNpbmNsdWRlIDxzeXMvYml0c2V0Lmg+
CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRl
IDxzeXMvc3lzbG9nLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX3Bh
cmFtLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5o
PgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNpbmNs
dWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUg
PHZtL3ZtX3BoeXMuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+CisKKyNpbmNsdWRl
IDx4ZW4veGVuLW9zLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDx4
ZW4vZXJyb3IuaD4KKyNpbmNsdWRlIDx4ZW4vZ250dGFiLmg+CisjaW5jbHVkZSA8eGVuL2dudGRl
di5oPgorCitNQUxMT0NfREVGSU5FKE1fR05UREVWLCAiZ250ZGV2IiwgIlhlbiBncmFudC10YWJs
ZSB1c2VyLXNwYWNlIGRldmljZSIpOworCitzdGF0aWMgZF9vcGVuX3QgZ250ZGV2X29wZW47Citz
dGF0aWMgZF9pb2N0bF90IGdudGRldl9pb2N0bDsKK3N0YXRpYyBkX21tYXBfc2luZ2xlX3QgZ250
ZGV2X21tYXBfc2luZ2xlOworCitzdGF0aWMgc3RydWN0IGNkZXZzdyBnbnRkZXZfZGV2c3cgPSB7
CisJLmRfdmVyc2lvbiA9IERfVkVSU0lPTiwKKwkuZF9vcGVuID0gZ250ZGV2X29wZW4sCisJLmRf
aW9jdGwgPSBnbnRkZXZfaW9jdGwsCisJLmRfbW1hcF9zaW5nbGUgPSBnbnRkZXZfbW1hcF9zaW5n
bGUsCisJLmRfbmFtZSA9ICJnbnRkZXYiLAorfTsKKworc3RhdGljIGRldmljZV90IGdudGRldl9k
ZXYgPSBOVUxMOworCitzdHJ1Y3QgZ250ZGV2X2dyZWY7CitzdHJ1Y3QgZ250ZGV2X2dtYXA7CitU
QUlMUV9IRUFEKGdyZWZfbGlzdF9oZWFkLCBnbnRkZXZfZ3JlZik7CitUQUlMUV9IRUFEKGdtYXBf
bGlzdF9oZWFkLCBnbnRkZXZfZ21hcCk7CisKK3N0cnVjdCBwZXJfdXNlcl9kYXRhIHsKKwlzdHJ1
Y3QJCW10eCB1c2VyX2RhdGFfbG9jazsKKwlzdHJ1Y3QJCWdyZWZfbGlzdF9oZWFkIGdyZWZfbGlz
dDsKKwlzdHJ1Y3QJCWdtYXBfbGlzdF9oZWFkIGdtYXBfbGlzdDsKKwl1aW50NjRfdAlmaWxlX29m
ZnNldDsKK307CisKKy8qCisgKiBHZXQgb2Zmc2V0IGludG8gdGhlIGZpbGUgd2hpY2ggd2lsbCBi
ZSB1c2VkIHdoaWxlIG1tYXBwaW5nIHRoZQorICogYXBwcm9wcmlhdGUgcGFnZXMgYnkgdGhlIHVz
ZXJzcGFjZSBwcm9ncmFtLgorICovCitzdGF0aWMgdWludDY0X3QKK2dldF9maWxlX29mZnNldChz
dHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyLCB1aW50MzJfdCBjb3VudCkKK3sKKwl1aW50
NjRfdCBmaWxlX29mZnNldDsKKworCW10eF9sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2Nr
KTsKKwlmaWxlX29mZnNldCA9IHByaXZfdXNlci0+ZmlsZV9vZmZzZXQ7CisJcHJpdl91c2VyLT5m
aWxlX29mZnNldCArPSBjb3VudCAqIFBBR0VfU0laRTsKKwltdHhfdW5sb2NrKCZwcml2X3VzZXIt
PnVzZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZmlsZV9vZmZzZXQpOworfQorCitzdGF0aWMg
aW50CWdudGRldl9nbWFwX3BnX2N0b3Iodm9pZCAqaGFuZGxlLCB2bV9vb2Zmc2V0X3Qgc2l6ZSwK
KyAgICB2bV9wcm90X3QgcHJvdCwgdm1fb29mZnNldF90IGZvZmYsIHN0cnVjdCB1Y3JlZCAqY3Jl
ZCwgdV9zaG9ydCAqY29sb3IpOworc3RhdGljIHZvaWQJZ250ZGV2X2dtYXBfcGdfZHRvcih2b2lk
ICpoYW5kbGUpOworc3RhdGljIGludAlnbnRkZXZfZ21hcF9wZ19mYXVsdCh2bV9vYmplY3RfdCBv
YmplY3QsIHZtX29vZmZzZXRfdCBvZmZzZXQsCisgICAgaW50IHByb3QsIHZtX3BhZ2VfdCAqbXJl
cyk7CisKK3N0YXRpYyBzdHJ1Y3QgY2Rldl9wYWdlcl9vcHMgZ250ZGV2X2dtYXBfcGdfb3BzID0g
eworCS5jZGV2X3BnX2ZhdWx0ID0gZ250ZGV2X2dtYXBfcGdfZmF1bHQsCisJLmNkZXZfcGdfY3Rv
ciA9CWdudGRldl9nbWFwX3BnX2N0b3IsCisJLmNkZXZfcGdfZHRvciA9CWdudGRldl9nbWFwX3Bn
X2R0b3IsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIEdyYW50IEFsbG9jYXRpb24gTWV0
aG9kcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgZ250ZGV2X2dy
ZWYgeworCVRBSUxRX0VOVFJZKGdudGRldl9ncmVmKSAJCWdyZWZfbGlzdF9uZXh0OworCXVpbnQ2
NF90CQkJCWZpbGVfaW5kZXg7CisJZ3JhbnRfcmVmX3QJCQkJZ3JlZl9pZDsKKwl2bV9wYWdlX3QJ
CQkJcGFnZTsKKwlzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeQkqbm90aWZ5OworfTsK
Kworc3RhdGljIHN0cnVjdCBncmVmX2xpc3RfaGVhZCB0b19raWxsX2dyZWZzID0KKyAgICBUQUlM
UV9IRUFEX0lOSVRJQUxJWkVSKHRvX2tpbGxfZ3JlZnMpOworCitzdGF0aWMgc3RydWN0IG10eCB0
b19raWxsX2dyZWZzX210eDsKK01UWF9TWVNJTklUKHRvX2tpbGxfZ3JlZnNfbXR4LCAmdG9fa2ls
bF9ncmVmc19tdHgsCisgICAgImdudGRldiB0b19raWxsX2dyZWZzIG11dGV4IiwgTVRYX0RFRik7
CisKKy8qCisgKiBUcmF2ZXJzZSBvdmVyIHRoZSBkZXZpY2UtbGlzdCBvZiB0by1iZS1kZWxldGVk
IGdyYW50cyBhbGxvY2F0ZWQsIGFuZAorICogaWYgYWxsIGFjY2Vzc2VzLCBib3RoIGxvY2FsIG1t
YXBzIGFuZCBmb3JlaWduIG1hcHMsIHRvIHRoZW0gaGF2ZSBlbmRlZCwKKyAqIGRlc3Ryb3kgdGhl
bS4KKyAqLworc3RhdGljIHZvaWQKK2dyZWZfbGlzdF9kdG9yKCkKK3sKKwlzdHJ1Y3QgZ250ZGV2
X2dyZWYgKmdyZWYsICpncmVmX3RtcDsKKwkKKwltdHhfbG9jaygmdG9fa2lsbF9ncmVmc19tdHgp
OworCVRBSUxRX0ZPUkVBQ0hfU0FGRShncmVmLCAmdG9fa2lsbF9ncmVmcywgZ3JlZl9saXN0X25l
eHQsIGdyZWZfdG1wKSB7CisJCWlmIChncmVmLT5wYWdlICYmIGdyZWYtPnBhZ2UtPm9iamVjdCA9
PSBOVUxMKSB7CisJCQlpZiAoZ3JlZi0+bm90aWZ5KSB7CisJCQkJLy8gVE9ETzogSGFuZGxlIE5v
dGlmeSAuLi4uCisJCQl9CisJCQlpZiAoZ3JlZi0+Z3JlZl9pZCAhPSBHUkFOVF9SRUZfSU5WQUxJ
RCkgeworCQkJCWlmIChnbnR0YWJfcXVlcnlfZm9yZWlnbl9hY2Nlc3MoZ3JlZi0+Z3JlZl9pZCkp
CisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihn
cmVmLT5ncmVmX2lkKQorCQkJCSAgICA9PSAwKQorCQkJCQljb250aW51ZTsKKwkJCQlnbnR0YWJf
ZnJlZV9ncmFudF9yZWZlcmVuY2UoZ3JlZi0+Z3JlZl9pZCk7CisJCQl9CisJCQl2bV9wYWdlX3Vu
d2lyZShncmVmLT5wYWdlLCBQUV9OT05FKTsKKwkJCXZtX3BhZ2VfZnJlZShncmVmLT5wYWdlKTsK
KwkJCWdyZWYtPnBhZ2UgPSBOVUxMOworCQl9CisJCWlmIChncmVmLT5wYWdlID09IE5VTEwpIHsK
KwkJCWlmIChncmVmLT5ub3RpZnkpCisJCQkJZnJlZShncmVmLT5ub3RpZnksIE1fR05UREVWKTsK
KwkJCVRBSUxRX1JFTU9WRSgmdG9fa2lsbF9ncmVmcywgZ3JlZiwgZ3JlZl9saXN0X25leHQpOwor
CQkJZnJlZShncmVmLCBNX0dOVERFVik7CisJCX0KKwl9CisJbXR4X3VubG9jaygmdG9fa2lsbF9n
cmVmc19tdHgpOworfQorCisvKgorICogRmluZCBjb3VudCBudW1iZXIgb2YgY29udGlndW91cyBh
bGxvY2F0ZWQgZ3JhbnRzIGZvciBhIGdpdmVuIHVzZXJzcGFjZQorICogcHJvZ3JhbSBieSBmaWxl
LW9mZnNldCAoaW5kZXgpLgorICovCitzdGF0aWMgc3RydWN0IGdudGRldl9ncmVmKgorZ250ZGV2
X2ZpbmRfZ3JlZnMoc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlciwKKwl1aW50NjRfdCBp
bmRleCwgdWludDMyX3QgY291bnQpCit7CisJc3RydWN0IGdudGRldl9ncmVmICpncmVmLCAqZ3Jl
Zl9zdGFydCA9IE5VTEw7CisJCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2sp
OworCVRBSUxRX0ZPUkVBQ0goZ3JlZiwgJnByaXZfdXNlci0+Z3JlZl9saXN0LCBncmVmX2xpc3Rf
bmV4dCkgeworCQlpZiAoaW5kZXggPT0gZ3JlZi0+ZmlsZV9pbmRleCkgeworCQkJaWYgKGdyZWZf
c3RhcnQgPT0gTlVMTCkKKwkJCQlncmVmX3N0YXJ0ID0gZ3JlZjsKKwkJCWluZGV4ICs9IFBBR0Vf
U0laRTsKKwkJCWNvdW50LS07CisJCQlpZiAoY291bnQgPT0gMCkKKwkJCQlicmVhazsKKwkJfQor
CQllbHNlIGlmIChncmVmX3N0YXJ0KQorCQkJYnJlYWs7CisJfQorCW10eF91bmxvY2soJnByaXZf
dXNlci0+dXNlcl9kYXRhX2xvY2spOworCQorCWlmIChjb3VudCkKKwkJcmV0dXJuIChOVUxMKTsK
KwlyZXR1cm4gKGdyZWZfc3RhcnQpOworfQorCisvKgorICogSU9DVExfR05UREVWX0FMTE9DX0dS
RUYKKyAqIEFsbG9jYXRlIHJlcXVpcmVkIG51bWJlciBvZiB3aXJlZCBwYWdlcyBmb3IgdGhlIHJl
cXVlc3QsIGdyYW50IGZvcmVpZ24KKyAqIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgZnJhbWVzIGZv
ciB0aGVzZSBwYWdlcywgYW5kIGFkZCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIGFsbG9jYXRpb24g
dG8gdGhlIHBlciB1c2VyIHByaXZhdGUgZGF0YSwgc28gdGhhdCB0aGVzZSBwYWdlcyBjYW4KKyAq
IGJlIG1tYXBwZWQgYnkgdGhlIHVzZXJzcGFjZSBwcm9ncmFtLgorICovCitzdGF0aWMgaW50Citn
bnRkZXZfYWxsb2NfZ3JlZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X2FsbG9jX2dyZWYgKmFyZykKK3sK
KwlpbnQgaSwgZXJyb3IsIHJlYWRvbmx5OworCXVpbnQ2NF90IGZpbGVfb2Zmc2V0OworCXN0cnVj
dCBnbnRkZXZfZ3JlZiAqZ3JlZjsKKwlzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyOwor
CXN0cnVjdCBncmVmX2xpc3RfaGVhZCB0bXBfZ3JlZl9saXN0ID0KKwkJVEFJTFFfSEVBRF9JTklU
SUFMSVpFUih0bXBfZ3JlZl9saXN0KTsKKworCXJlYWRvbmx5ID0gIShhcmctPmZsYWdzICYgR05U
REVWX0FMTE9DX0ZMQUdfV1JJVEFCTEUpOworCisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYo
KHZvaWQqKikgJnByaXZfdXNlcik7CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoRUlOVkFM
KTsKKworCS8qIENsZWFudXAgZ3JlZnMgYW5kIGZyZWUgcGFnZXMuICovCisJZ3JlZl9saXN0X2R0
b3IoKTsKKwkKKwkvKiBHZXQgZmlsZSBvZmZzZXQgZm9yIHRoaXMgcmVxdWVzdC4gKi8KKwlmaWxl
X29mZnNldCA9IGdldF9maWxlX29mZnNldChwcml2X3VzZXIsIGFyZy0+Y291bnQpOworCisJZm9y
IChpID0gMDsgaSA8IGFyZy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZ250ZGV2X2dyZWYgKmdy
ZWY7CisJCWdyZWYgPSBtYWxsb2Moc2l6ZW9mKCpncmVmKSwgTV9HTlRERVYsIE1fV0FJVE9LIHwg
TV9aRVJPKTsKKwkJCisJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0bXBfZ3JlZl9saXN0LCBncmVmLCBn
cmVmX2xpc3RfbmV4dCk7CisJCWdyZWYtPmZpbGVfaW5kZXggPSBmaWxlX29mZnNldCArIGkgKiBQ
QUdFX1NJWkU7CisJCWdyZWYtPmdyZWZfaWQgPSBHUkFOVF9SRUZfSU5WQUxJRDsKKwkJZ3JlZi0+
cGFnZSA9IHZtX3BhZ2VfYWxsb2MoTlVMTCwgMCwgVk1fQUxMT0NfTk9STUFMCisJCQl8IFZNX0FM
TE9DX05PT0JKIHwgVk1fQUxMT0NfV0lSRUQgfCBWTV9BTExPQ19aRVJPKTsKKwkJaWYgKGdyZWYt
PnBhZ2UgPT0gTlVMTCkgeworCQkJbG9nKExPR19FUlIsICJQYWdlIGFsbG9jYXRpb24gZmFpbGVk
LiIpOworCQkJZXJyb3IgPSBFTk9NRU07CisJCQlicmVhazsKKwkJfQkJCisJCWlmICgoZ3JlZi0+
cGFnZS0+ZmxhZ3MgJiBQR19aRVJPKSA9PSAwKSB7CisJCQkvKgorCQkJICogWmVybyB0aGUgYWxs
b2NhdGVkIHBhZ2UsIGFzIHdlIGRvbid0IHdhbnQgdG8gCisJCQkgKiBsZWFrIG91ciBtZW1vcnkg
dG8gb3RoZXIgZG9tYWlucy4KKwkJCSAqLworCQkJcG1hcF96ZXJvX3BhZ2UoZ3JlZi0+cGFnZSk7
CisJCX0KKwkJZ3JlZi0+cGFnZS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOworCisJCWVycm9y
ID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGFyZy0+ZG9taWQsCisJCQkoVk1fUEFHRV9U
T19QSFlTKGdyZWYtPnBhZ2UpID4+IFBBR0VfU0hJRlQpLAorCQkJcmVhZG9ubHksICZncmVmLT5n
cmVmX2lkKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCWxvZyhMT0dfRVJSLCAiR3JhbnQgVGFi
bGUgSHlwZXJjYWxsIGZhaWxlZC4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGVycm9y
ICE9IDApIHsKKwkJLyoKKwkJICogSWYgdGFyZ2V0IGRvbWFpbiBtYXBzIHRoZSBncmVmIChieSBn
dWVzc2luZyB0aGUgZ3JlZi1pZCksCisJCSAqIHRoZW4gd2UgY2FuJ3QgY2xlYW4gaXQgdXAgeWV0
IGFuZCB3ZSBoYXZlIHRvIGxlYXZlIHRoZSAKKwkJICogcGFnZSBpbiBwbGFjZSBzbyBhcyB0byBu
b3QgbGVhayBvdXIgbWVtb3J5IHRvIHRoYXQgZG9tYWluLgorCQkgKiBBZGQgaXQgdG8gYSBnbG9i
YWwgbGlzdCB0byBiZSBjbGVhbmVkIHVwIGxhdGVyLgorCQkgKi8KKwkJbXR4X2xvY2soJnRvX2tp
bGxfZ3JlZnNfbXR4KTsKKwkJVEFJTFFfQ09OQ0FUKCZ0b19raWxsX2dyZWZzLCAmdG1wX2dyZWZf
bGlzdCwgZ3JlZl9saXN0X25leHQpOworCQltdHhfdW5sb2NrKCZ0b19raWxsX2dyZWZzX210eCk7
CisJCQorCQlncmVmX2xpc3RfZHRvcigpOworCisJCXJldHVybiAoZXJyb3IpOworCX0KKworCS8q
IENvcHkgdGhlIG91dHB1dCB2YWx1ZXMuICovCisJaSA9IDA7CisJVEFJTFFfRk9SRUFDSChncmVm
LCAmdG1wX2dyZWZfbGlzdCwgZ3JlZl9saXN0X25leHQpCisJCWFyZy0+Z3JlZl9pZHNbaSsrXSA9
IGdyZWYtPmdyZWZfaWQ7CisKKwlhcmctPmluZGV4ID0gZmlsZV9vZmZzZXQ7CisKKwkvKiBNb2Rp
ZnkgdGhlIHBlciB1c2VyIHByaXZhdGUgZGF0YS4gKi8KKwltdHhfbG9jaygmcHJpdl91c2VyLT51
c2VyX2RhdGFfbG9jayk7CisJVEFJTFFfQ09OQ0FUKCZwcml2X3VzZXItPmdyZWZfbGlzdCwgJnRt
cF9ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVz
ZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZXJyb3IpOworfQorCisvKgorICogSU9DVExfR05U
REVWX0RFQUxMT0NfR1JFRgorICogUmVtb3ZlIGdyYW50IGFsbG9jYXRpb24gaW5mb3JtYXRpb24g
ZnJvbSB0aGUgcGVyIHVzZXIgcHJpdmF0ZSBkYXRhLCBzbworICogdGhhdCBpdCBjYW4ndCBiZSBt
bWFwcGVkIGFueW1vcmUgYnkgdGhlIHVzZXJzcGFjZSBwcm9ncmFtLCBhbmQgYWRkIGl0CisgKiB0
byB0aGUgdG8tYmUtZGVsZXRlZCBncmFudHMgZ2xvYmFsIGRldmljZS1saXN0LgorICovCitzdGF0
aWMgaW50CitnbnRkZXZfZGVhbGxvY19ncmVmKHN0cnVjdCBpb2N0bF9nbnRkZXZfZGVhbGxvY19n
cmVmICphcmcpCit7CisJaW50IGVycm9yOworCXVpbnQzMl90IGNvdW50OworCXN0cnVjdCBnbnRk
ZXZfZ3JlZiAqZ3JlZiwgKmdyZWZfdG1wOworCXN0cnVjdCBwZXJfdXNlcl9kYXRhICpwcml2X3Vz
ZXI7CisKKwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigodm9pZCoqKSAmcHJpdl91c2VyKTsK
KwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJZ3JlZiA9IGdudGRldl9m
aW5kX2dyZWZzKHByaXZfdXNlciwgYXJnLT5pbmRleCwgYXJnLT5jb3VudCk7CisJaWYgKGdyZWYg
PT0gTlVMTCkgeworCQlsb2coTE9HX0VSUiwgIkNhbid0IGZpbmQgcmVxdWVzdGVkIGdyYW50LXJl
ZnMuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwkvKiBSZW1vdmUgdGhlIGdyZWZzIGZy
b20gdXNlciBwcml2YXRlIGRhdGEuICovCisJY291bnQgPSBhcmctPmNvdW50OworCW10eF9sb2Nr
KCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKwltdHhfbG9jaygmdG9fa2lsbF9ncmVmc19t
dHgpOworCVRBSUxRX0ZPUkVBQ0hfRlJPTV9TQUZFKGdyZWYsCisJICAgICZwcml2X3VzZXItPmdy
ZWZfbGlzdCwgZ3JlZl9saXN0X25leHQsIGdyZWZfdG1wKSB7CisJCVRBSUxRX1JFTU9WRSgmcHJp
dl91c2VyLT5ncmVmX2xpc3QsIGdyZWYsIGdyZWZfbGlzdF9uZXh0KTsKKwkJVEFJTFFfSU5TRVJU
X1RBSUwoJnRvX2tpbGxfZ3JlZnMsIGdyZWYsIGdyZWZfbGlzdF9uZXh0KTsKKwkJY291bnQtLTsK
KwkJaWYgKGNvdW50ID09IDApCisJCQlicmVhazsKKwl9CisJbXR4X3VubG9jaygmdG9fa2lsbF9n
cmVmc19tdHgpOworCW10eF91bmxvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCQor
CWdyZWZfbGlzdF9kdG9yKCk7CisKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tIEdyYW50IEFjY2Vzc2luZyBNZXRob2RzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCitzdHJ1Y3QgZ250ZGV2X2dtYXBfbWFwIHsKKwl2bV9vYmplY3RfdAltZW07CisJ
c3RydWN0IHJlc291cmNlCSpwc2V1ZG9fcGh5c19yZXM7CisJaW50IAkJcHNldWRvX3BoeXNfcmVz
X2lkOworCXZtX3BhZGRyX3QJcGh5c19iYXNlX2FkZHI7Cit9OworCitzdHJ1Y3QgZ250ZGV2X2dt
YXAgeworCVRBSUxRX0VOVFJZKGdudGRldl9nbWFwKQkJZ21hcF9saXN0X25leHQ7CisJdWludDY0
X3QJCQkJZmlsZV9pbmRleDsKKwl1aW50MzJfdAkJCQljb3VudDsKKwlzdHJ1Y3QgZ250dGFiX21h
cF9ncmFudF9yZWYJCSpncmFudF9tYXBfb3BzOworCXN0cnVjdCBnbnRkZXZfZ21hcF9tYXAJCQkq
bWFwOworCXN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5IAkqbm90aWZ5OworfTsKKwor
c3RhdGljIHN0cnVjdCBnbWFwX2xpc3RfaGVhZCB0b19raWxsX2dtYXBzID0KKyAgICBUQUlMUV9I
RUFEX0lOSVRJQUxJWkVSKHRvX2tpbGxfZ21hcHMpOworCitzdGF0aWMgc3RydWN0IG10eCB0b19r
aWxsX2dtYXBzX210eDsKK01UWF9TWVNJTklUKHRvX2tpbGxfZ21hcHNfbXR4LCAmdG9fa2lsbF9n
bWFwc19tdHgsCisgICAgImdudGRldiB0b19raWxsX2dtYXBzIG11dGV4IiwgTVRYX0RFRik7CisK
Ky8qCisgKiBUcmF2ZXJzZSBvdmVyIHRoZSBkZXZpY2UtbGlzdCBvZiB0by1iZS1kZWxldGVkIGdy
YW50IG1hcHBpbmdzLCBhbmQgaWYKKyAqIHRoZSByZWdpb24gaXMgbm8gbG9uZ2VyIG1tYXBwZWQg
YnkgYW55b25lLCBmcmVlIHRoZSBtZW1vcnkgdXNlZCB0bworICogc3RvcmUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIG1hcHBpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitnbWFwX2xpc3RfZHRvcigpCit7
CisJc3RydWN0IGdudGRldl9nbWFwICpnbWFwLCAqZ21hcF90bXA7CisJCisJbXR4X2xvY2soJnRv
X2tpbGxfZ21hcHNfbXR4KTsKKwlUQUlMUV9GT1JFQUNIX1NBRkUoZ21hcCwgJnRvX2tpbGxfZ21h
cHMsIGdtYXBfbGlzdF9uZXh0LCBnbWFwX3RtcCkgeworCQlpZiAoZ21hcC0+bWFwID09IE5VTEwp
IHsKKwkJCWlmIChnbWFwLT5ub3RpZnkpCisJCQkJZnJlZShnbWFwLT5ub3RpZnksIE1fR05UREVW
KTsKKwkJCWZyZWUoZ21hcC0+Z3JhbnRfbWFwX29wcywgTV9HTlRERVYpOworCQkJVEFJTFFfUkVN
T1ZFKCZ0b19raWxsX2dtYXBzLCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCQlmcmVlKGdtYXAs
IE1fR05UREVWKTsKKwkJfQorCX0KKwltdHhfdW5sb2NrKCZ0b19raWxsX2dtYXBzX210eCk7Cit9
CisKKy8qCisgKiBGaW5kIG1hcHBlZCBncmFudHMgZm9yIGEgZ2l2ZW4gdXNlcnNwYWNlIHByb2dy
YW0sIGJ5IGZpbGUtb2Zmc2V0IChpbmRleCkKKyAqIGFuZCBjb3VudCwgYXMgc3VwcGxpZWQgZHVy
aW5nIHRoZSBtYXAtaW9jdGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ250ZGV2X2dtYXAqCitnbnRk
ZXZfZmluZF9nbWFwKHN0cnVjdCBwZXJfdXNlcl9kYXRhICpwcml2X3VzZXIsCisJdWludDY0X3Qg
aW5kZXgsIHVpbnQzMl90IGNvdW50KQoreworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcCwgKmdt
YXBfc3RhcnQgPSBOVUxMOworCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2sp
OworCVRBSUxRX0ZPUkVBQ0goZ21hcCwgJnByaXZfdXNlci0+Z21hcF9saXN0LCBnbWFwX2xpc3Rf
bmV4dCkgeworCQlpZiAoZ21hcC0+ZmlsZV9pbmRleCA9PSBpbmRleCAmJiBnbWFwLT5jb3VudCA9
PSBjb3VudCkgeworCQkJZ21hcF9zdGFydCA9IGdtYXA7CisJCQlicmVhazsKKwkJfQorCX0KKwlt
dHhfdW5sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKworCXJldHVybiAoZ21hcF9z
dGFydCk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIHBhZ2VzIGZyb20gdGhlIG1ndGRldmljZSBw
YWdlciwgY2FsbCB0aGUgdW5tYXAgaHlwZXJjYWxsLAorICogZnJlZSB0aGUgeGVubWVtIHJlc291
cmNlLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdGhlCisgKiBkZXN0cnVjdGlvbiBv
ZiB0aGUgbWd0ZGV2aWNlIHBhZ2VyLCB3aGljaCBoYXBwZW5zIHdoZW4gYWxsIG1tYXBzIHRvCisg
KiBpdCBoYXZlIGJlZW4gcmVtb3ZlZCwgYW5kIHRoZSB1bm1hcC1pb2N0bCBoYXMgYmVlbiBwZXJm
b3JtZWQuCisgKi8KK3N0YXRpYyBpbnQKK25vdGlmeV91bm1hcF9jbGVhbnVwKHN0cnVjdCBnbnRk
ZXZfZ21hcCAqZ21hcCkKK3sKKwlpbnQgZXJyb3IsIGksIGNvdW50OworCXZtX3BhZ2VfdCBtOwor
CXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHM7CisJCisJdW5tYXBfb3Bz
ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZikgKiBnbWFwLT5j
b3VudCwKKwkJCU1fR05UREVWLCBNX1dBSVRPSyk7CisJCisJLyogRW51bWVyYXRlIGZyZWVhYmxl
IG1hcHMuICovCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBnbWFwLT5jb3VudDsgaSsr
KSB7CisJCWlmIChnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZSAhPSAtMSkgeworCQkJdW5t
YXBfb3BzW2NvdW50XS5oYW5kbGUgPSBnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZTsKKwkJ
CXVubWFwX29wc1tjb3VudF0uaG9zdF9hZGRyID0KKwkJCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ld
Lmhvc3RfYWRkcjsKKwkJCXVubWFwX29wc1tjb3VudF0uZGV2X2J1c19hZGRyID0gMDsKKwkJCWNv
dW50Kys7CisJCX0KKwl9CisJCisJLyogUGVyZm9ybSBub3RpZmljYXRpb24uICovCisJaWYgKGNv
dW50ID4gMCAmJiBnbWFwLT5ub3RpZnkpIHsKKwkJLy8gVE9ETzogSGFuZGxlIE5vdGlmeQorCX0K
KwkKKwkvKiBGcmVlIHRoZSBwYWdlcy4gKi8KKwlWTV9PQkpFQ1RfV0xPQ0soZ21hcC0+bWFwLT5t
ZW0pOworcmV0cnk6CisJZm9yIChpID0gMDsgaSA8IGdtYXAtPmNvdW50OyBpKyspIHsKKwkJbSA9
IHZtX3BhZ2VfbG9va3VwKGdtYXAtPm1hcC0+bWVtLCBpKTsKKwkJaWYgKG0gPT0gTlVMTCkKKwkJ
CWNvbnRpbnVlOworCQlpZiAodm1fcGFnZV9zbGVlcF9pZl9idXN5KG0sICJwY21kdW0iKSkKKwkJ
CWdvdG8gcmV0cnk7CisJCWNkZXZfcGFnZXJfZnJlZV9wYWdlKGdtYXAtPm1hcC0+bWVtLCBtKTsK
Kwl9CisJVk1fT0JKRUNUX1dVTkxPQ0soZ21hcC0+bWFwLT5tZW0pOworCQorCS8qIFBlcmZvcm0g
dW5tYXAgaHlwZXJjYWxsLiAqLworCWVycm9yID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChH
TlRUQUJPUF91bm1hcF9ncmFudF9yZWYsCisJICAgIHVubWFwX29wcywgY291bnQpOworCQorCWZv
ciAoaSA9IDA7IGkgPCBnbWFwLT5jb3VudDsgaSsrKSB7CisJCWdtYXAtPmdyYW50X21hcF9vcHNb
aV0uaGFuZGxlID0gLTE7CisJCWdtYXAtPmdyYW50X21hcF9vcHNbaV0uaG9zdF9hZGRyID0gMDsK
Kwl9CisJCisJaWYgKGdtYXAtPm1hcCkgeworCQllcnJvciA9IHhlbm1lbV9mcmVlKGdudGRldl9k
ZXYsIGdtYXAtPm1hcC0+cHNldWRvX3BoeXNfcmVzX2lkLAorCQkgICAgZ21hcC0+bWFwLT5wc2V1
ZG9fcGh5c19yZXMpOworCQlLQVNTRVJUKGVycm9yID09IDAsCisJCSAgICAoIlVuYWJsZSB0byBy
ZWxlYXNlIG1lbW9yeSByZXNvdXJjZTogJWQiLCBlcnJvcikpOworCisJCWZyZWUoZ21hcC0+bWFw
LCBNX0dOVERFVik7CisJCWdtYXAtPm1hcCA9IE5VTEw7CisJfQorCQorCWZyZWUodW5tYXBfb3Bz
LCBNX0dOVERFVik7CisJCisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBJT0NUTF9HTlRE
RVZfTUFQX0dSQU5UX1JFRgorICogUG9wdWxhdGUgc3RydWN0dXJlcyBmb3IgbWFwcGluZyB0aGUg
Z3JhbnQgcmVmZXJlbmNlIGluIHRoZSBwZXIgdXNlcgorICogcHJpdmF0ZSBkYXRhLiBBY3R1YWwg
cmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgbWFwIGh5cGVyY2FsbCBpcyBwZXJmb3JtZWQKKyAqIGR1
cmluZyB0aGUgbW1hcC4KKyAqLworc3RhdGljIGludAorZ250ZGV2X21hcF9ncmFudF9yZWYoc3Ry
dWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmICphcmcpCit7CisJaW50IGksIGVycm9yOwor
CXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcDsKKwlzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91
c2VyOworCisJZXJyb3IgPSBkZXZmc19nZXRfY2RldnByaXYoKHZvaWQqKikgJnByaXZfdXNlcik7
CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoRUlOVkFMKTsKKworCWdtYXAgPSBtYWxsb2Mo
c2l6ZW9mKCpnbWFwKSwgTV9HTlRERVYsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKworCWdtYXAtPmNv
dW50ID0gYXJnLT5jb3VudDsKKwlnbWFwLT5maWxlX2luZGV4ID0gZ2V0X2ZpbGVfb2Zmc2V0KHBy
aXZfdXNlciwgYXJnLT5jb3VudCk7CisJZ21hcC0+Z3JhbnRfbWFwX29wcyA9CisJICAgIG1hbGxv
YyhzaXplb2Yoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmKSAqIGFyZy0+Y291bnQsCisJICAg
ICAgICBNX0dOVERFViwgTV9XQUlUT0sgfCBNX1pFUk8pOworCisJZm9yIChpID0gMDsgaSA8IGFy
Zy0+Y291bnQ7IGkrKykgeworCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmRvbSA9IGFyZy0+cmVm
c1tpXS5kb21pZDsKKwkJZ21hcC0+Z3JhbnRfbWFwX29wc1tpXS5yZWYgPSBhcmctPnJlZnNbaV0u
cmVmOworCQlnbWFwLT5ncmFudF9tYXBfb3BzW2ldLmhhbmRsZSA9IC0xOworCQlnbWFwLT5ncmFu
dF9tYXBfb3BzW2ldLmZsYWdzID0gR05UTUFQX2hvc3RfbWFwOworCX0KKworCW10eF9sb2NrKCZw
cml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmcHJpdl91c2Vy
LT5nbWFwX2xpc3QsIGdtYXAsIGdtYXBfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZwcml2X3Vz
ZXItPnVzZXJfZGF0YV9sb2NrKTsKKworCWFyZy0+aW5kZXggPSBnbWFwLT5maWxlX2luZGV4Owor
CisJcmV0dXJuIChlcnJvcik7Cit9CisKKy8qCisgKiBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRf
UkVGCisgKiBSZW1vdmUgdGhlIG1hcCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwZXIgdXNlciBwcml2
YXRlIGRhdGEgYW5kIGFkZCBpdAorICogdG8gdGhlIGdsb2JhbCBkZXZpY2UtbGlzdCBvZiBtYXBw
aW5ncyB0byBiZSBkZWxldGVkLiBBIHJlZmVyZW5jZSB0bworICogdGhlIG1ndGRldmljZSBwYWdl
ciBpcyBhbHNvIGRlY3JlYXNlZCwgdGhlIHJlYXNvbiBmb3Igd2hpY2ggaXMKKyAqIGV4cGxhaW5l
ZCBpbiBtbWFwX2dtYXAoKS4KKyAqLworc3RhdGljIGludAorZ250ZGV2X3VubWFwX2dyYW50X3Jl
ZihzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiAqYXJnKQoreworCWludCBlcnJv
cjsKKwlzdHJ1Y3QgZ250ZGV2X2dtYXAgKmdtYXA7CisJc3RydWN0IHBlcl91c2VyX2RhdGEgKnBy
aXZfdXNlcjsKKworCWVycm9yID0gZGV2ZnNfZ2V0X2NkZXZwcml2KCh2b2lkKiopICZwcml2X3Vz
ZXIpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlnbWFwID0gZ250
ZGV2X2ZpbmRfZ21hcChwcml2X3VzZXIsIGFyZy0+aW5kZXgsIGFyZy0+Y291bnQpOworCWlmIChn
bWFwID09IE5VTEwpIHsKKwkJbG9nKExPR19FUlIsICJDYW4ndCBmaW5kIHJlcXVlc3RlZCBncmFu
dC1tYXAuIik7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwltdHhfbG9jaygmcHJpdl91c2Vy
LT51c2VyX2RhdGFfbG9jayk7CisJbXR4X2xvY2soJnRvX2tpbGxfZ21hcHNfbXR4KTsKKwlUQUlM
UV9SRU1PVkUoJnByaXZfdXNlci0+Z21hcF9saXN0LCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJ
VEFJTFFfSU5TRVJUX1RBSUwoJnRvX2tpbGxfZ21hcHMsIGdtYXAsIGdtYXBfbGlzdF9uZXh0KTsK
KwltdHhfdW5sb2NrKCZ0b19raWxsX2dtYXBzX210eCk7CisJbXR4X3VubG9jaygmcHJpdl91c2Vy
LT51c2VyX2RhdGFfbG9jayk7CisJCisJaWYgKGdtYXAtPm1hcCkKKwkJdm1fb2JqZWN0X2RlYWxs
b2NhdGUoZ21hcC0+bWFwLT5tZW0pOworCisJZ21hcF9saXN0X2R0b3IoKTsKKwkKKwlyZXR1cm4g
KDApOworfQorCisvKgorICogSU9DVExfR05UREVWX0dFVF9PRkZTRVRfRk9SX1ZBRERSCisgKiBH
ZXQgZmlsZS1vZmZzZXQgYW5kIGNvdW50IGZvciBhIGdpdmVuIG1hcHBpbmcsIGZyb20gdGhlIHZp
cnR1YWwgYWRkcmVzcworICogd2hlcmUgdGhlIG1hcHBpbmcgaXMgbW1hcHBlZC4KKyAqIFBsZWFz
ZSBub3RlLCB0aGlzIG9ubHkgd29ya3MgZm9yIGdyYW50cyBtYXBwZWQgYnkgdGhpcyBkb21haW4s
IGFuZCBub3QKKyAqIGdyYW50cyBhbGxvY2F0ZWQuIENvdW50IGRvZXNuJ3QgbWFrZSBtdWNoIHNl
bnNlIGluIHJlZmVyZW5jZSB0byBncmFudHMKKyAqIGFsbG9jYXRlZC4gQWxzbywgYmVjYXVzZSB0
aGlzIGZ1bmN0aW9uIGlzIHByZXNlbnQgaW4gdGhlIGxpbnV4IGdudGRldgorICogZGV2aWNlLCBi
dXQgbm90IGluIHRoZSBsaW51eCBnbnRhbGxvYyBvbmUsIG1vc3QgdXNlcnNwYWNlIGNvZGUgb25s
eSB1c2UKKyAqIGl0IGZvciBtYXBwZWQgZ3JhbnRzLgorICovCitzdGF0aWMgaW50CitnbnRkZXZf
Z2V0X29mZnNldF9mb3JfdmFkZHIoc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92
YWRkciAqYXJnLAorCXN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJvcjsKKwl2bV9tYXBf
dCBtYXA7CisJdm1fbWFwX2VudHJ5X3QgZW50cnk7CisJdm1fb2JqZWN0X3QgbWVtOworCXZtX3Bp
bmRleF90IHBpbmRleDsKKwl2bV9wcm90X3QgcHJvdDsKKwlib29sZWFuX3Qgd2lyZWQ7CisJc3Ry
dWN0IGdudGRldl9nbWFwICpnbWFwOworCisJbWFwID0gJnRkLT50ZF9wcm9jLT5wX3Ztc3BhY2Ut
PnZtX21hcDsKKwllcnJvciA9IHZtX21hcF9sb29rdXAoJm1hcCwgYXJnLT52YWRkciwgVk1fUFJP
VF9OT05FLCAmZW50cnksCisJCSAgICAmbWVtLCAmcGluZGV4LCAmcHJvdCwgJndpcmVkKTsKKwlp
ZiAoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJdm1fbWFwX2xv
b2t1cF9kb25lKG1hcCwgZW50cnkpOworCisJaWYgKChtZW0tPnR5cGUgIT0gT0JKVF9NR1RERVZJ
Q0UpIHx8CisJICAgIChtZW0tPnVuX3BhZ2VyLmRldnAub3BzICE9ICZnbnRkZXZfZ21hcF9wZ19v
cHMpKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlnbWFwID0gbWVtLT5oYW5kbGU7CisJaWYgKGdt
YXAgPT0gTlVMTCB8fAorCSAgICAoZW50cnktPmVuZCAtIGVudHJ5LT5zdGFydCkgIT0gKGdtYXAt
PmNvdW50ICogUEFHRV9TSVpFKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJYXJnLT5jb3VudCA9
IGdtYXAtPmNvdW50OworCWFyZy0+b2Zmc2V0ID0gZ21hcC0+ZmlsZV9pbmRleDsKKwlyZXR1cm4g
KDApOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfc2V0X21heF9ncmFudHMoc3RydWN0IGlvY3Rs
X2dudGRldl9zZXRfbWF4X2dyYW50cyAqYXJnKQoreworCisJcmV0dXJuICgwKTsKK30KKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLSBHcmFudCBBY2Nlc3NpbmcgUGFnZXIgIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludAorZ250ZGV2X2dtYXBfcGdfY3Rvcih2
b2lkICpoYW5kbGUsIHZtX29vZmZzZXRfdCBzaXplLCB2bV9wcm90X3QgcHJvdCwKKyAgICB2bV9v
b2Zmc2V0X3QgZm9mZiwgc3RydWN0IHVjcmVkICpjcmVkLCB1X3Nob3J0ICpjb2xvcikKK3sKKwor
CXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitnbnRkZXZfZ21hcF9wZ19kdG9yKHZvaWQg
KmhhbmRsZSkKK3sKKworCW5vdGlmeV91bm1hcF9jbGVhbnVwKChzdHJ1Y3QgZ250ZGV2X2dtYXAg
KiloYW5kbGUpOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfZ21hcF9wZ19mYXVsdCh2bV9vYmpl
Y3RfdCBvYmplY3QsIHZtX29vZmZzZXRfdCBvZmZzZXQsIGludCBwcm90LAorICAgIHZtX3BhZ2Vf
dCAqbXJlcykKK3sKKwlzdHJ1Y3QgZ250ZGV2X2dtYXAgKmdtYXAgPSBvYmplY3QtPmhhbmRsZTsK
Kwl2bV9waW5kZXhfdCBwaWR4LCByaWR4OworCXZtX3BhZ2VfdCBwYWdlLCBvbGRtOworCXZtX29v
ZmZzZXRfdCByZWxhdGl2ZV9vZmZzZXQ7CisKKwlpZiAoZ21hcC0+bWFwID09IE5VTEwpCisJCXJl
dHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlyZWxhdGl2ZV9vZmZzZXQgPSBvZmZzZXQgLSBnbWFw
LT5maWxlX2luZGV4OworCisJcGlkeCA9IE9GRl9UT19JRFgob2Zmc2V0KTsKKwlyaWR4ID0gT0ZG
X1RPX0lEWChyZWxhdGl2ZV9vZmZzZXQpOworCWlmIChyaWR4ID49IGdtYXAtPmNvdW50IHx8CisJ
ICAgIGdtYXAtPmdyYW50X21hcF9vcHNbcmlkeF0uc3RhdHVzICE9IEdOVFNUX29rYXkpCisJCXJl
dHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlwYWdlID0gUEhZU19UT19WTV9QQUdFKGdtYXAtPm1h
cC0+cGh5c19iYXNlX2FkZHIgKyByZWxhdGl2ZV9vZmZzZXQpOworCWlmIChwYWdlID09IE5VTEwp
CisJCXJldHVybiAoVk1fUEFHRVJfRkFJTCk7CisKKwlLQVNTRVJUKChwYWdlLT5mbGFncyAmIFBH
X0ZJQ1RJVElPVVMpICE9IDAsCisJICAgICgibm90IGZpY3RpdGlvdXMgJXAiLCBwYWdlKSk7CisJ
S0FTU0VSVChwYWdlLT53aXJlX2NvdW50ID09IDEsICgid2lyZV9jb3VudCBub3QgMSAlcCIsIHBh
Z2UpKTsKKwlLQVNTRVJUKHZtX3BhZ2VfYnVzaWVkKHBhZ2UpID09IDAsICgicGFnZSAlcCBpcyBi
dXN5IiwgcGFnZSkpOworCisJaWYgKCptcmVzICE9IE5VTEwpIHsKKwkJb2xkbSA9ICptcmVzOwor
CQl2bV9wYWdlX2xvY2sob2xkbSk7CisJCXZtX3BhZ2VfZnJlZShvbGRtKTsKKwkJdm1fcGFnZV91
bmxvY2sob2xkbSk7CisJCSptcmVzID0gTlVMTDsKKwl9CisKKwl2bV9wYWdlX2luc2VydChwYWdl
LCBvYmplY3QsIHBpZHgpOworCXBhZ2UtPnZhbGlkID0gVk1fUEFHRV9CSVRTX0FMTDsKKwl2bV9w
YWdlX3hidXN5KHBhZ2UpOworCSptcmVzID0gcGFnZTsKKwlyZXR1cm4gKFZNX1BBR0VSX09LKTsK
K30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gR3JhbnQgVGFibGUgTWV0aG9kcyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIElPQ1RMX0dOVERFVl9TRVRf
VU5NQVBfTk9USUZZCisgKiBTZXQgdW5tYXAgbm90aWZpY2F0aW9uIGluc2lkZSB0aGUgYXBwcm9w
cmlhdGUgZ3JhbnQuIEl0IHNlbmRzIGEKKyAqIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBncmFudCBp
cyBjb21wbGV0ZWx5IG11bm1hcHBlZCBieSB0aGlzIGRvbWFpbgorICogYW5kIHJlYWR5IGZvciBk
ZXN0cnVjdGlvbi4KKyAqLworc3RhdGljIGludAorZ250ZGV2X3NldF91bm1hcF9ub3RpZnkoc3Ry
dWN0IGlvY3RsX2dudGRldl91bm1hcF9ub3RpZnkgKmFyZykKK3sKKwlpbnQgZXJyb3I7CisJdWlu
dDY0X3QgaW5kZXg7CisJc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlcjsKKwlzdHJ1Y3Qg
Z250ZGV2X2dyZWYgKmdyZWYgPSBOVUxMOworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcDsKKwkK
KwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigodm9pZCoqKSAmcHJpdl91c2VyKTsKKwlpZiAo
ZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwpOworCQorCWluZGV4ID0gYXJnLT5pbmRleCAm
IH4oUEFHRV9TSVpFIC0gMSk7CisJZ3JlZiA9IGdudGRldl9maW5kX2dyZWZzKHByaXZfdXNlciwg
aW5kZXgsIDEpOworCWlmIChncmVmKSB7CisJCWdyZWYtPm5vdGlmeSA9IG1hbGxvYyhzaXplb2Yo
KmFyZyksIE1fR05UREVWLCBNX1dBSVRPSyk7CisJCW1lbWNweShncmVmLT5ub3RpZnksIGFyZywg
c2l6ZW9mKCphcmcpKTsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCisJbXR4X2xvY2soJnByaXZf
dXNlci0+dXNlcl9kYXRhX2xvY2spOworCVRBSUxRX0ZPUkVBQ0goZ21hcCwgJnByaXZfdXNlci0+
Z21hcF9saXN0LCBnbWFwX2xpc3RfbmV4dCkgeworCQlpZiAoYXJnLT5pbmRleCA+PSBnbWFwLT5m
aWxlX2luZGV4ICYmCisJCSAgICBhcmctPmluZGV4IDwgZ21hcC0+ZmlsZV9pbmRleCArIGdtYXAt
PmNvdW50ICogUEFHRV9TSVpFKSB7CisJCQlnbWFwLT5ub3RpZnkgPSBtYWxsb2Moc2l6ZW9mKCph
cmcpLCBNX0dOVERFViwgTV9XQUlUT0spOworCQkJbWVtY3B5KGdtYXAtPm5vdGlmeSwgYXJnLCBz
aXplb2YoKmFyZykpOworCQkJbXR4X3VubG9jaygmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7
CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVz
ZXJfZGF0YV9sb2NrKTsKKwkKKwlyZXR1cm4gKEVJTlZBTCk7Cit9CisKKy8qLS0tLS0tLS0tLS0t
LS0tLS0tIEdudGRldiBDaGFyIERldmljZSBNZXRob2RzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCitwZXJfdXNlcl9kYXRhX2R0b3Iodm9pZCAqYXJnKQor
eworCXN0cnVjdCBnbnRkZXZfZ21hcCAqZ21hcCwgKmdtYXBfdG1wOworCXN0cnVjdCBwZXJfdXNl
cl9kYXRhICpwcml2X3VzZXI7CisKKwlwcml2X3VzZXIgPSAoc3RydWN0IHBlcl91c2VyX2RhdGEg
KikgYXJnOworCisJbXR4X2xvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCW10eF9s
b2NrKCZ0b19raWxsX2dyZWZzX210eCk7CisJVEFJTFFfQ09OQ0FUKCZ0b19raWxsX2dyZWZzLCAm
cHJpdl91c2VyLT5ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KTsKKwltdHhfdW5sb2NrKCZ0b19r
aWxsX2dyZWZzX210eCk7CisJbXR4X2xvY2soJnRvX2tpbGxfZ21hcHNfbXR4KTsKKworCVRBSUxR
X0ZPUkVBQ0hfU0FGRShnbWFwLCAmcHJpdl91c2VyLT5nbWFwX2xpc3QsIGdtYXBfbGlzdF9uZXh0
LAorCSAgICBnbWFwX3RtcCkgeworCQlUQUlMUV9SRU1PVkUoJnByaXZfdXNlci0+Z21hcF9saXN0
LCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0b19raWxsX2dt
YXBzLCBnbWFwLCBnbWFwX2xpc3RfbmV4dCk7CisJCWlmIChnbWFwLT5tYXApCisJCQl2bV9vYmpl
Y3RfZGVhbGxvY2F0ZShnbWFwLT5tYXAtPm1lbSk7CisJfQorCW10eF91bmxvY2soJnRvX2tpbGxf
Z21hcHNfbXR4KTsKKwkKKwltdHhfdW5sb2NrKCZwcml2X3VzZXItPnVzZXJfZGF0YV9sb2NrKTsK
KwkKKwlncmVmX2xpc3RfZHRvcigpOworCWdtYXBfbGlzdF9kdG9yKCk7CisKKwltdHhfZGVzdHJv
eSgmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7CisJZnJlZShwcml2X3VzZXIsIE1fR05UREVW
KTsKK30KKworc3RhdGljIGludAorZ250ZGV2X29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IGZs
YWcsIGludCBvdHlwLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0
IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlcjsKKworCXByaXZfdXNlciA9IG1hbGxvYyhzaXplb2Yo
KnByaXZfdXNlciksIE1fR05UREVWLCBNX1dBSVRPSyB8IE1fWkVSTyk7CisJVEFJTFFfSU5JVCgm
cHJpdl91c2VyLT5ncmVmX2xpc3QpOworCVRBSUxRX0lOSVQoJnByaXZfdXNlci0+Z21hcF9saXN0
KTsKKwltdHhfaW5pdCgmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jaywKKwkgICAgInBlciB1c2Vy
IGRhdGEgbXV0ZXgiLCBOVUxMLCBNVFhfREVGKTsKKworCWVycm9yID0gZGV2ZnNfc2V0X2NkZXZw
cml2KHByaXZfdXNlciwgcGVyX3VzZXJfZGF0YV9kdG9yKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJ
cGVyX3VzZXJfZGF0YV9kdG9yKHByaXZfdXNlcik7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
c3RhdGljIGludAorZ250ZGV2X2lvY3RsKHN0cnVjdCBjZGV2ICpkZXYsIHVfbG9uZyBjbWQsIGNh
ZGRyX3QgZGF0YSwKKwlpbnQgZmZsYWcsIHN0cnVjdCB0aHJlYWQgKnRkKQoreworCWludCBlcnJv
cjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJT0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElG
WToKKwkJZXJyb3IgPSBnbnRkZXZfc2V0X3VubWFwX25vdGlmeSgKKwkJICAgIChzdHJ1Y3QgaW9j
dGxfZ250ZGV2X3VubWFwX25vdGlmeSopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dO
VERFVl9BTExPQ19HUkVGOgorCQllcnJvciA9IGdudGRldl9hbGxvY19ncmVmKAorCQkgICAgKHN0
cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElP
Q1RMX0dOVERFVl9ERUFMTE9DX0dSRUY6CisJCWVycm9yID0gZ250ZGV2X2RlYWxsb2NfZ3JlZigK
KwkJICAgIChzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RlYWxsb2NfZ3JlZiopIGRhdGEpOworCQlicmVh
azsKKwljYXNlIElPQ1RMX0dOVERFVl9NQVBfR1JBTlRfUkVGOgorCQllcnJvciA9IGdudGRldl9t
YXBfZ3JhbnRfcmVmKAorCQkgICAgKHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiop
IGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUY6CisJ
CWVycm9yID0gZ250ZGV2X3VubWFwX2dyYW50X3JlZigKKwkJICAgIChzdHJ1Y3QgaW9jdGxfZ250
ZGV2X3VubWFwX2dyYW50X3JlZiopIGRhdGEpOworCQlicmVhazsKKwljYXNlIElPQ1RMX0dOVERF
Vl9HRVRfT0ZGU0VUX0ZPUl9WQUREUjoKKwkJZXJyb3IgPSBnbnRkZXZfZ2V0X29mZnNldF9mb3Jf
dmFkZHIoCisJCSAgICAoc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92YWRkciop
IGRhdGEsIHRkKTsKKwkJYnJlYWs7CisJY2FzZSBJT0NUTF9HTlRERVZfU0VUX01BWF9HUkFOVFM6
CisJCWVycm9yID0gZ250ZGV2X3NldF9tYXhfZ3JhbnRzKAorCQkgICAgKHN0cnVjdCBpb2N0bF9n
bnRkZXZfc2V0X21heF9ncmFudHMqKSBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJy
b3IgPSBFTk9TWVM7CisJCWJyZWFrOworCX0KKworCXJldHVybiAoZXJyb3IpOworfQorCisvKgor
ICogTU1BUCBhbiBhbGxvY2F0ZWQgZ3JhbnQgaW50byB1c2VyIG1lbW9yeS4KKyAqIFBsZWFzZSBu
b3RlLCB0aGF0IHRoZSBncmFudHMgbXVzdCBub3QgYWxyZWFkeSBiZSBtbWFwcGVkLCBvdGhlcndp
c2UKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBmYWlsLgorICovCitzdGF0aWMgaW50CittbWFwX2dy
ZWYoc3RydWN0IHBlcl91c2VyX2RhdGEgKnByaXZfdXNlciwgc3RydWN0IGdudGRldl9ncmVmICpn
cmVmX3N0YXJ0LAorICAgIHVpbnQzMl90IGNvdW50LCB2bV9zaXplX3Qgc2l6ZSwgc3RydWN0IHZt
X29iamVjdCAqKm9iamVjdCkKK3sKKwl2bV9vYmplY3RfdCBtZW1fb2JqOworCXN0cnVjdCBnbnRk
ZXZfZ3JlZiAqZ3JlZjsKKworCW1lbV9vYmogPSB2bV9vYmplY3RfYWxsb2NhdGUoT0JKVF9QSFlT
LCBzaXplKTsKKwlpZiAobWVtX29iaiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisKKwln
cmVmID0gZ3JlZl9zdGFydDsKKwltdHhfbG9jaygmcHJpdl91c2VyLT51c2VyX2RhdGFfbG9jayk7
CisJVk1fT0JKRUNUX1dMT0NLKG1lbV9vYmopOworCVRBSUxRX0ZPUkVBQ0hfRlJPTShncmVmLCAm
cHJpdl91c2VyLT5ncmVmX2xpc3QsIGdyZWZfbGlzdF9uZXh0KSB7CisJCWlmIChncmVmLT5wYWdl
LT5vYmplY3QpCisJCQlicmVhazsKKworCQl2bV9wYWdlX2luc2VydChncmVmLT5wYWdlLCBtZW1f
b2JqLAorCQkgICAgT0ZGX1RPX0lEWChncmVmLT5maWxlX2luZGV4KSk7CisKKwkJY291bnQtLTsK
KwkJaWYgKGNvdW50PT0wKQorCQkJYnJlYWs7CisJfQorCVZNX09CSkVDVF9XVU5MT0NLKG1lbV9v
YmopOworCW10eF91bmxvY2soJnByaXZfdXNlci0+dXNlcl9kYXRhX2xvY2spOworCisJaWYgKGNv
dW50KSB7CisJCXZtX29iamVjdF9kZWFsbG9jYXRlKG1lbV9vYmopOworCQlyZXR1cm4gKEVJTlZB
TCk7CisJfQorCisJKm9iamVjdCA9IG1lbV9vYmo7CisKKwlyZXR1cm4gKDApOworCit9CisKKy8q
CisgKiBNTUFQIGEgbWFwcGVkIGdyYW50IGludG8gdXNlciBtZW1vcnkuCisgKi8KK3N0YXRpYyBp
bnQKK21tYXBfZ21hcChzdHJ1Y3QgcGVyX3VzZXJfZGF0YSAqcHJpdl91c2VyLCBzdHJ1Y3QgZ250
ZGV2X2dtYXAgKmdtYXBfc3RhcnQsCisgICAgdm1fb29mZnNldF90ICpvZmZzZXQsIHZtX3NpemVf
dCBzaXplLCBzdHJ1Y3Qgdm1fb2JqZWN0ICoqb2JqZWN0LCBpbnQgbnByb3QpCit7CisJaW50IGks
IGVycm9yOworCisJLyoKKwkgKiBUaGUgZ3JhbnQgbWFwIGh5cGVyY2FsbCBtaWdodCBhbHJlYWR5
IGJlIGRvbmUuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgaW5jcmVhc2UgYSByZWZlcmVuY2Ug
dG8gdGhlCisJICogdm0gb2JqZWN0IGFuZCByZXR1cm4gdGhlIGFscmVhZHkgYWxsb2NhdGVkIG9i
amVjdC4KKwkgKi8KKwlpZiAoZ21hcF9zdGFydC0+bWFwKSB7CisJCXZtX29iamVjdF9yZWZlcmVu
Y2UoZ21hcF9zdGFydC0+bWFwLT5tZW0pOworCQkqb2JqZWN0ID0gZ21hcF9zdGFydC0+bWFwLT5t
ZW07CisJCXJldHVybiAoMCk7CisJfQorCisJZ21hcF9zdGFydC0+bWFwID0gbWFsbG9jKHNpemVv
ZigqKGdtYXBfc3RhcnQtPm1hcCkpLCBNX0dOVERFViwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8p
OworCisJLyogQWxsb2NhdGUgdGhlIHhlbiBwc2V1ZG8gcGh5c2ljYWwgbWVtb3J5IHJlc291cmNl
LiAqLworCWdtYXBfc3RhcnQtPm1hcC0+cHNldWRvX3BoeXNfcmVzX2lkID0gMDsKKwlnbWFwX3N0
YXJ0LT5tYXAtPnBzZXVkb19waHlzX3JlcyA9IHhlbm1lbV9hbGxvYyhnbnRkZXZfZGV2LAorCSAg
ICAmZ21hcF9zdGFydC0+bWFwLT5wc2V1ZG9fcGh5c19yZXNfaWQsIHNpemUpOworCWlmIChnbWFw
X3N0YXJ0LT5tYXAtPnBzZXVkb19waHlzX3JlcyA9PSBOVUxMKSB7CisJCWZyZWUoZ21hcF9zdGFy
dC0+bWFwLCBNX0dOVERFVik7CisJCWdtYXBfc3RhcnQtPm1hcCA9IE5VTEw7CisJCXJldHVybiAo
RU5PTUVNKTsKKwl9CisJZ21hcF9zdGFydC0+bWFwLT5waHlzX2Jhc2VfYWRkciA9CisJICAgIHJt
YW5fZ2V0X3N0YXJ0KGdtYXBfc3RhcnQtPm1hcC0+cHNldWRvX3BoeXNfcmVzKTsKKworCS8qIEFs
bG9jYXRlIHRoZSBtZ3RkZXZpY2UgcGFnZXIuICovCisJZ21hcF9zdGFydC0+bWFwLT5tZW0gPSBj
ZGV2X3BhZ2VyX2FsbG9jYXRlKGdtYXBfc3RhcnQsIE9CSlRfTUdUREVWSUNFLAorCSAgICAmZ250
ZGV2X2dtYXBfcGdfb3BzLCBzaXplLCBucHJvdCwgKm9mZnNldCwgTlVMTCk7CisJaWYgKGdtYXBf
c3RhcnQtPm1hcC0+bWVtID09IE5VTEwpIHsKKwkJeGVubWVtX2ZyZWUoZ250ZGV2X2RldiwgZ21h
cF9zdGFydC0+bWFwLT5wc2V1ZG9fcGh5c19yZXNfaWQsCisJCSAgICBnbWFwX3N0YXJ0LT5tYXAt
PnBzZXVkb19waHlzX3Jlcyk7CisJCWZyZWUoZ21hcF9zdGFydC0+bWFwLCBNX0dOVERFVik7CisJ
CWdtYXBfc3RhcnQtPm1hcCA9IE5VTEw7CisJCXJldHVybiAoRU5PTUVNKTsKKwl9CisKKwlmb3Io
aSA9IDA7IGkgPCBnbWFwX3N0YXJ0LT5jb3VudDsgaSsrKSB7CisJCWdtYXBfc3RhcnQtPmdyYW50
X21hcF9vcHNbaV0uaG9zdF9hZGRyID0KKwkJICAgIGdtYXBfc3RhcnQtPm1hcC0+cGh5c19iYXNl
X2FkZHIgKyBpICogUEFHRV9TSVpFOworCisJCWlmICgobnByb3QgJiBQUk9UX1dSSVRFKSA9PSAw
KQorCQkJZ21hcF9zdGFydC0+Z3JhbnRfbWFwX29wc1tpXS5mbGFncyB8PSBHTlRNQVBfcmVhZG9u
bHk7CisJfQorCS8qIE1ha2UgdGhlIE1BUCBoeXBlcmNhbGwuICovCisJZXJyb3IgPSBIWVBFUlZJ
U09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsCisJICAgIGdtYXBfc3Rh
cnQtPmdyYW50X21hcF9vcHMsIGdtYXBfc3RhcnQtPmNvdW50KTsKKwlpZiAoZXJyb3IgIT0gMCkg
eworCQkvKgorCQkgKiBEZWFsbG9jYXRlIHBhZ2VyLgorCQkgKiBQYWdlciBkZWFsbG9jYXRpb24g
d2lsbCBhdXRvbWF0aWNhbGx5IHRha2UgY2FyZSBvZgorCQkgKiB4ZW5tZW0gZGVhbGxvY2F0aW9u
LCBldGMuCisJCSAqLworCQl2bV9vYmplY3RfZGVhbGxvY2F0ZShnbWFwX3N0YXJ0LT5tYXAtPm1l
bSk7CisKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCS8qIFJldHJ5IEVBR0FJTiBtYXBzLiAq
LworCWZvciAoaSA9IDA7IGkgPCBnbWFwX3N0YXJ0LT5jb3VudDsgaSsrKSB7CisJCWludCBkZWxh
eSA9IDE7CisJCXdoaWxlIChkZWxheSA8IDI1NiAmJgorCQkgICAgZ21hcF9zdGFydC0+Z3JhbnRf
bWFwX29wc1tpXS5zdGF0dXMgPT0gR05UU1RfZWFnYWluKSB7CisJCQlIWVBFUlZJU09SX2dyYW50
X3RhYmxlX29wKCBHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLAorCQkJICAgICZnbWFwX3N0YXJ0LT5n
cmFudF9tYXBfb3BzW2ldLCAxKTsKKwkJCXBhdXNlKCgiZ250bWFwIiksIGRlbGF5ICogU0JUXzFN
Uyk7CisJCQlkZWxheSsrOworCQl9CisJCWlmIChnbWFwX3N0YXJ0LT5ncmFudF9tYXBfb3BzW2ld
LnN0YXR1cyA9PSBHTlRTVF9lYWdhaW4pCisJCQlnbWFwX3N0YXJ0LT5ncmFudF9tYXBfb3BzW2ld
LnN0YXR1cyA9IEdOVFNUX2JhZF9wYWdlOworCisJCWlmIChnbWFwX3N0YXJ0LT5ncmFudF9tYXBf
b3BzW2ldLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7CisJCQkvKgorCQkJICogRGVhbGxvY2F0ZSBw
YWdlci4KKwkJCSAqIFBhZ2VyIGRlYWxsb2NhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSBj
YXJlIG9mCisJCQkgKiB4ZW5tZW0gZGVhbGxvY2F0aW9uLCBub3RpZmljYXRpb24sIHVubWFwIGh5
cGVyY2FsbCwKKwkJCSAqIGV0Yy4KKwkJCSAqLworCQkJdm1fb2JqZWN0X2RlYWxsb2NhdGUoZ21h
cF9zdGFydC0+bWFwLT5tZW0pOworCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisKKwkv
KgorCSAqIEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgdm0gb2JqZWN0LiBXZSBkbyBub3Qgd2FudAor
CSAqIHRoZSB2bSBvYmplY3QgdG8gYmUgZGVsZXRlZCB3aGVuIGFsbCB0aGUgbW1hcHMgYXJlCisJ
ICogdW5tYXBwZWQsIGJlY2F1c2UgaXQgbWF5IGJlIHJlLW1tYXBwZWQuIEluc3RlYWQsCisJICog
d2Ugd2FudCB0aGUgb2JqZWN0IHRvIGJlIGRlbGV0ZWQsIHdoZW4gYWxvbmcgd2l0aAorCSAqIG11
bm1hcHMsIHdlIGhhdmUgYWxzbyBwcm9jZXNzZWQgdGhlIHVubWFwLWlvY3RsLgorCSAqLworCXZt
X29iamVjdF9yZWZlcmVuY2UoZ21hcF9zdGFydC0+bWFwLT5tZW0pOworCisJKm9iamVjdCA9IGdt
YXBfc3RhcnQtPm1hcC0+bWVtOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZ250
ZGV2X21tYXBfc2luZ2xlKHN0cnVjdCBjZGV2ICpjZGV2LCB2bV9vb2Zmc2V0X3QgKm9mZnNldCwg
dm1fc2l6ZV90IHNpemUsCisgICAgc3RydWN0IHZtX29iamVjdCAqKm9iamVjdCwgaW50IG5wcm90
KQoreworCWludCBlcnJvcjsKKwl1aW50MzJfdCBjb3VudDsKKwlzdHJ1Y3QgZ250ZGV2X2dyZWYg
KmdyZWZfc3RhcnQ7CisJc3RydWN0IGdudGRldl9nbWFwICpnbWFwX3N0YXJ0OworCXN0cnVjdCBw
ZXJfdXNlcl9kYXRhICpwcml2X3VzZXI7CisKKwllcnJvciA9IGRldmZzX2dldF9jZGV2cHJpdigo
dm9pZCoqKSAmcHJpdl91c2VyKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJcmV0dXJuIChFSU5WQUwp
OworCisJY291bnQgPSBPRkZfVE9fSURYKHNpemUpOworCisJZ3JlZl9zdGFydCA9IGdudGRldl9m
aW5kX2dyZWZzKHByaXZfdXNlciwgKm9mZnNldCwgY291bnQpOworCWlmIChncmVmX3N0YXJ0KSB7
CisJCWVycm9yID0gbW1hcF9ncmVmKHByaXZfdXNlciwgZ3JlZl9zdGFydCwgY291bnQsIHNpemUs
IG9iamVjdCk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCWdtYXBfc3RhcnQgPSBnbnRkZXZf
ZmluZF9nbWFwKHByaXZfdXNlciwgKm9mZnNldCwgY291bnQpOworCWlmIChnbWFwX3N0YXJ0KSB7
CisJCWVycm9yID0gbW1hcF9nbWFwKHByaXZfdXNlciwgZ21hcF9zdGFydCwgb2Zmc2V0LCBzaXpl
LCBvYmplY3QsCisJCSAgICBucHJvdCk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCXJldHVy
biAoRUlOVkFMKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBEZXZpY2UgQXR0
YWNobWVudCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyB2b2lkCitn
bnRkZXZfaWRlbnRpZnkoZHJpdmVyX3QgKmRyaXZlciwgZGV2aWNlX3QgcGFyZW50KQoreworCisJ
S0FTU0VSVCgoeGVuX2RvbWFpbigpKSwKKwkgICAgKCJUcnlpbmcgdG8gYXR0YWNoIGdudGRldiBk
ZXZpY2Ugb24gbm9uIFhlbiBkb21haW4iKSk7CisKKwlpZiAoQlVTX0FERF9DSElMRChwYXJlbnQs
IDAsICJnbnRkZXYiLCAwKSA9PSBOVUxMKQorCQlwYW5pYygidW5hYmxlIHRvIGF0dGFjaCBnbnRk
ZXYgdXNlci1zcGFjZSBkZXZpY2UiKTsKK30KKworc3RhdGljIGludAorZ250ZGV2X3Byb2JlKGRl
dmljZV90IGRldikKK3sKKworCWdudGRldl9kZXYgPSBkZXY7CisJZGV2aWNlX3NldF9kZXNjKGRl
diwgIlhlbiBncmFudC10YWJsZSB1c2VyLXNwYWNlIGRldmljZSIpOworCXJldHVybiAoQlVTX1BS
T0JFX05PV0lMRENBUkQpOworfQorCitzdGF0aWMgaW50CitnbnRkZXZfYXR0YWNoKGRldmljZV90
IGRldikKK3sKKworCW1ha2VfZGV2X2NyZWRmKE1BS0VERVZfRVRFUk5BTCwgJmdudGRldl9kZXZz
dywgMCwgTlVMTCwgVUlEX1JPT1QsCisJICAgIEdJRF9XSEVFTCwgMDYwMCwgInhlbi9nbnRkZXYi
KTsKKwlyZXR1cm4gKDApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIFByaXZhdGUgRGV2
aWNlIEF0dGFjaG1lbnQgRGF0YSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGRl
dmljZV9tZXRob2RfdCBnbnRkZXZfbWV0aG9kc1tdID0geworCURFVk1FVEhPRChkZXZpY2VfaWRl
bnRpZnksIGdudGRldl9pZGVudGlmeSksCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZ250ZGV2
X3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgZ250ZGV2X2F0dGFjaCksCisJREVW
TUVUSE9EX0VORAorfTsKKworc3RhdGljIGRyaXZlcl90IGdudGRldl9kcml2ZXIgPSB7CisJImdu
dGRldiIsCisJZ250ZGV2X21ldGhvZHMsCisJMCwKK307CisKK2RldmNsYXNzX3QgZ250ZGV2X2Rl
dmNsYXNzOworCitEUklWRVJfTU9EVUxFKGdudGRldiwgeGVucHYsIGdudGRldl9kcml2ZXIsIGdu
dGRldl9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGdudGRldiwgeGVucHYsIDEsIDEs
IDEpOwpkaWZmIC0tZ2l0IGEvc3lzL3hlbi9nbnRkZXYuaCBiL3N5cy94ZW4vZ250ZGV2LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwOWM1ZAotLS0gL2Rldi9udWxsCisr
KyBiL3N5cy94ZW4vZ250ZGV2LmgKQEAgLTAsMCArMSwxMTggQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDE2IEFrc2hheSBKYWdnaSA8amFnZ2lARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICoKKyAqIGdudGRldi5oCisgKiAKKyAqIEludGVyZmFjZSB0byAvZGV2L3hlbi9n
bnRkZXYuCisgKiAKKyAqLworCisjaWZuZGVmIF9fWEVOX0dOVERFVl9IX18KKyNkZWZpbmUgX19Y
RU5fR05UREVWX0hfXworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgSU9DVExf
R05UREVWX1NFVF9VTk1BUF9OT1RJRlkJCQkJCVwKKwlfSU9XKCdFJywgMCwgc3RydWN0IGlvY3Rs
X2dudGRldl91bm1hcF9ub3RpZnkpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSB7
CisgICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIHVpbnQz
Ml90IGFjdGlvbjsKKyAgICB1aW50MzJfdCBldmVudF9jaGFubmVsX3BvcnQ7Cit9OworCisjZGVm
aW5lIFVOTUFQX05PVElGWV9DTEVBUl9CWVRFIDB4MQorI2RlZmluZSBVTk1BUF9OT1RJRllfU0VO
RF9FVkVOVCAweDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBHcmFudCBDcmVhdGlvbiBJT0NU
THMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBJT0NUTF9H
TlRERVZfQUxMT0NfR1JFRgkJCQkJCVwKKwlfSU9XUignRScsIDEsIHN0cnVjdCBpb2N0bF9nbnRk
ZXZfYWxsb2NfZ3JlZikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiB7CisgICAgLyog
SU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQxNl90IGRvbWlkOworICAgIHVpbnQxNl90IGZsYWdz
OworICAgIHVpbnQzMl90IGNvdW50OworICAgIC8qIE9VVCBwYXJhbWV0ZXJzICovCisgICAgdWlu
dDY0X3QgaW5kZXg7CisgICAgLyogVmFyaWFibGUgT1VUIHBhcmFtZXRlciAqLworICAgIHVpbnQz
Ml90IGdyZWZfaWRzWzFdOworfTsKKworI2RlZmluZSBHTlRERVZfQUxMT0NfRkxBR19XUklUQUJM
RSAxCisKKyNkZWZpbmUgSU9DVExfR05UREVWX0RFQUxMT0NfR1JFRgkJCQkJXAorCV9JT1coJ0Un
LCAyLCBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2RlYWxsb2NfZ3JlZikKK3N0cnVjdCBpb2N0bF9nbnRk
ZXZfZGVhbGxvY19ncmVmIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisgICAgdWludDY0X3Qg
aW5kZXg7CisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
IEdyYW50IEFjY2Vzc2luZyBJT0NUTHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiB7CisgICAgdWludDMyX3QgZG9taWQ7
CisgICAgdWludDMyX3QgcmVmOworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfTUFQX0dSQU5U
X1JFRgkJCQkJXAorCV9JT1dSKCdFJywgMywgc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRf
cmVmKQorc3RydWN0IGlvY3RsX2dudGRldl9tYXBfZ3JhbnRfcmVmIHsKKyAgICAvKiBJTiBwYXJh
bWV0ZXJzICovCisgICAgdWludDMyX3QgY291bnQ7CisgICAgdWludDMyX3QgcGFkMDsKKyAgICAv
KiBPVVQgcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IGluZGV4OworICAgIC8qIFZhcmlhYmxl
IElOIHBhcmFtZXRlciAqLworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfZ3JhbnRfcmVmIHJlZnNb
MV07Cit9OworCisjZGVmaW5lIElPQ1RMX0dOVERFVl9VTk1BUF9HUkFOVF9SRUYJCQkJCVwKKwlf
SU9XKCdFJywgNCwgc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYpCitzdHJ1Y3Qg
aW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAqLwor
ICAgIHVpbnQ2NF90IGluZGV4OworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworI2RlZmluZSBJ
T0NUTF9HTlRERVZfR0VUX09GRlNFVF9GT1JfVkFERFIJCQkJXAorCV9JT1dSKCdFJywgNSwgc3Ry
dWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92YWRkcikKK3N0cnVjdCBpb2N0bF9nbnRk
ZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1
aW50NjRfdCB2YWRkcjsKKyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAgIHVpbnQ2NF90IG9m
ZnNldDsKKyAgICB1aW50MzJfdCBjb3VudDsKK307CisKKyNkZWZpbmUgSU9DVExfR05UREVWX1NF
VF9NQVhfR1JBTlRTCQkJCQlcCisJX0lPVygnRScsIDYsIHN0cnVjdCBpb2N0bF9nbnRkZXZfc2V0
X21heF9ncmFudHMpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X3NldF9tYXhfZ3JhbnRzIHsKKyAgICAv
KiBJTiBwYXJhbWV0ZXJzICovCisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisjZW5kaWYgLyog
X19YRU5fR05UREVWX0hfXyAqLwo=
--001a1140b16018b2e40539076444
Content-Type: application/octet-stream; name="xen_freebsd.patch"
Content-Disposition: attachment; filename="xen_freebsd.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ircetg271

ZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUveGVuLXN5cy9GcmVlQlNEL2dudGRldi5oIGIvdG9v
bHMvaW5jbHVkZS94ZW4tc3lzL0ZyZWVCU0QvZ250ZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWQwOWM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2luY2x1ZGUv
eGVuLXN5cy9GcmVlQlNEL2dudGRldi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAxNiBBa3NoYXkgSmFnZ2kgPGphZ2dpQEZyZWVCU0Qub3JnPgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqCisgKiBnbnRkZXYuaAorICogCisgKiBJbnRlcmZhY2UgdG8gL2Rldi94
ZW4vZ250ZGV2LgorICogCisgKi8KKworI2lmbmRlZiBfX1hFTl9HTlRERVZfSF9fCisjZGVmaW5l
IF9fWEVOX0dOVERFVl9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIElP
Q1RMX0dOVERFVl9TRVRfVU5NQVBfTk9USUZZCQkJCQlcCisJX0lPVygnRScsIDAsIHN0cnVjdCBp
b2N0bF9nbnRkZXZfdW5tYXBfbm90aWZ5KQorc3RydWN0IGlvY3RsX2dudGRldl91bm1hcF9ub3Rp
ZnkgeworICAgIC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICB1
aW50MzJfdCBhY3Rpb247CisgICAgdWludDMyX3QgZXZlbnRfY2hhbm5lbF9wb3J0OworfTsKKwor
I2RlZmluZSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURSAweDEKKyNkZWZpbmUgVU5NQVBfTk9USUZZ
X1NFTkRfRVZFTlQgMHgyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JhbnQgQ3JlYXRpb24g
SU9DVExzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgSU9D
VExfR05UREVWX0FMTE9DX0dSRUYJCQkJCQlcCisJX0lPV1IoJ0UnLCAxLCBzdHJ1Y3QgaW9jdGxf
Z250ZGV2X2FsbG9jX2dyZWYpCitzdHJ1Y3QgaW9jdGxfZ250ZGV2X2FsbG9jX2dyZWYgeworICAg
IC8qIElOIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50MTZfdCBkb21pZDsKKyAgICB1aW50MTZfdCBm
bGFnczsKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICAvKiBPVVQgcGFyYW1ldGVycyAqLworICAg
IHVpbnQ2NF90IGluZGV4OworICAgIC8qIFZhcmlhYmxlIE9VVCBwYXJhbWV0ZXIgKi8KKyAgICB1
aW50MzJfdCBncmVmX2lkc1sxXTsKK307CisKKyNkZWZpbmUgR05UREVWX0FMTE9DX0ZMQUdfV1JJ
VEFCTEUgMQorCisjZGVmaW5lIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYJCQkJCVwKKwlfSU9X
KCdFJywgMiwgc3RydWN0IGlvY3RsX2dudGRldl9kZWFsbG9jX2dyZWYpCitzdHJ1Y3QgaW9jdGxf
Z250ZGV2X2RlYWxsb2NfZ3JlZiB7CisgICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQ2
NF90IGluZGV4OworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLSBHcmFudCBBY2Nlc3NpbmcgSU9DVExzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworc3RydWN0IGlvY3RsX2dudGRldl9ncmFudF9yZWYgeworICAgIHVpbnQzMl90IGRv
bWlkOworICAgIHVpbnQzMl90IHJlZjsKK307CisKKyNkZWZpbmUgSU9DVExfR05UREVWX01BUF9H
UkFOVF9SRUYJCQkJCVwKKwlfSU9XUignRScsIDMsIHN0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dy
YW50X3JlZikKK3N0cnVjdCBpb2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZiB7CisgICAgLyogSU4g
cGFyYW1ldGVycyAqLworICAgIHVpbnQzMl90IGNvdW50OworICAgIHVpbnQzMl90IHBhZDA7Cisg
ICAgLyogT1VUIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICAvKiBWYXJp
YWJsZSBJTiBwYXJhbWV0ZXIgKi8KKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X2dyYW50X3JlZiBy
ZWZzWzFdOworfTsKKworI2RlZmluZSBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGCQkJCQlc
CisJX0lPVygnRScsIDQsIHN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfZ3JhbnRfcmVmKQorc3Ry
dWN0IGlvY3RsX2dudGRldl91bm1hcF9ncmFudF9yZWYgeworICAgIC8qIElOIHBhcmFtZXRlcnMg
Ki8KKyAgICB1aW50NjRfdCBpbmRleDsKKyAgICB1aW50MzJfdCBjb3VudDsKK307CisKKyNkZWZp
bmUgSU9DVExfR05UREVWX0dFVF9PRkZTRVRfRk9SX1ZBRERSCQkJCVwKKwlfSU9XUignRScsIDUs
IHN0cnVjdCBpb2N0bF9nbnRkZXZfZ2V0X29mZnNldF9mb3JfdmFkZHIpCitzdHJ1Y3QgaW9jdGxf
Z250ZGV2X2dldF9vZmZzZXRfZm9yX3ZhZGRyIHsKKyAgICAvKiBJTiBwYXJhbWV0ZXJzICovCisg
ICAgdWludDY0X3QgdmFkZHI7CisgICAgLyogT1VUIHBhcmFtZXRlcnMgKi8KKyAgICB1aW50NjRf
dCBvZmZzZXQ7CisgICAgdWludDMyX3QgY291bnQ7Cit9OworCisjZGVmaW5lIElPQ1RMX0dOVERF
Vl9TRVRfTUFYX0dSQU5UUwkJCQkJXAorCV9JT1coJ0UnLCA2LCBzdHJ1Y3QgaW9jdGxfZ250ZGV2
X3NldF9tYXhfZ3JhbnRzKQorc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50cyB7Cisg
ICAgLyogSU4gcGFyYW1ldGVycyAqLworICAgIHVpbnQzMl90IGNvdW50OworfTsKKworI2VuZGlm
IC8qIF9fWEVOX0dOVERFVl9IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZ250dGFiL01h
a2VmaWxlIGIvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZpbGUKaW5kZXggYWY2NDU0Mi4uNjliYjIw
NyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlicy9nbnR0YWIvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGli
cy9nbnR0YWIvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAgU1JDUy1HTlRTSFIgICAgICAgICAg
ICArPSBnbnRzaHJfY29yZS5jCiAKIFNSQ1MtJChDT05GSUdfTGludXgpICAgKz0gJChTUkNTLUdO
VFRBQikgJChTUkNTLUdOVFNIUikgbGludXguYwogU1JDUy0kKENPTkZJR19NaW5pT1MpICArPSAk
KFNSQ1MtR05UVEFCKSBnbnRzaHJfdW5pbXAuYyBtaW5pb3MuYwotU1JDUy0kKENPTkZJR19GcmVl
QlNEKSArPSBnbnR0YWJfdW5pbXAuYyBnbnRzaHJfdW5pbXAuYworU1JDUy0kKENPTkZJR19GcmVl
QlNEKSArPSAkKFNSQ1MtR05UVEFCKSAkKFNSQ1MtR05UU0hSKSBmcmVlYnNkLmMKIFNSQ1MtJChD
T05GSUdfU3VuT1MpICAgKz0gZ250dGFiX3VuaW1wLmMgZ250c2hyX3VuaW1wLmMKIFNSQ1MtJChD
T05GSUdfTmV0QlNEKSAgKz0gZ250dGFiX3VuaW1wLmMgZ250c2hyX3VuaW1wLmMKIApkaWZmIC0t
Z2l0IGEvdG9vbHMvbGlicy9nbnR0YWIvZnJlZWJzZC5jIGIvdG9vbHMvbGlicy9nbnR0YWIvZnJl
ZWJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjAyMzgKLS0tIC9k
ZXYvbnVsbAorKysgYi90b29scy9saWJzL2dudHRhYi9mcmVlYnNkLmMKQEAgLTAsMCArMSwzMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCwgRCBHIE11cnJheSA8RGVyZWsuTXVy
cmF5QGNsLmNhbS5hYy51az4KKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBBa3NoYXkgSmFn
Z2kgPGphZ2dpQEZyZWVCU0Qub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNl
ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb3V0IGZyb20g
bGludXguYworICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNs
dWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8eGVuL3N5cy9nbnRkZXYuaD4KKworI2luY2x1
ZGUgInByaXZhdGUuaCIKKworI2RlZmluZSBERVZYRU4gIi9kZXYveGVuLyIKKworI2RlZmluZSBS
T1VORFVQKF94LF93KSAoKCh1bnNpZ25lZCBsb25nKShfeCkrKDFVTDw8KF93KSktMSkgJiB+KCgx
VUw8PChfdykpLTEpKQorCisjZGVmaW5lIEdURVJST1IoX2wsIF9mLi4uKSB4dGxfbG9nKF9sLCBY
VExfRVJST1IsIGVycm5vLCAiZ250dGFiIiwgX2YpCisjZGVmaW5lIEdTRVJST1IoX2wsIF9mLi4u
KSB4dGxfbG9nKF9sLCBYVExfRVJST1IsIGVycm5vLCAiZ250c2hyIiwgX2YpCisKKyNkZWZpbmUg
UEFHRV9TSElGVCAgICAgICAgICAgMTIKKyNkZWZpbmUgUEFHRV9TSVpFICAgICAgICAgICAgKDFV
TCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sgICAgICAgICAgICAofihQQUdFX1NJ
WkUtMSkpCisKKyNpZm5kZWYgT19DTE9FWEVDCisjZGVmaW5lIE9fQ0xPRVhFQyAwCisjZW5kaWYK
KworaW50IG9zZGVwX2dudHRhYl9vcGVuKHhlbmdudHRhYl9oYW5kbGUgKnhndCkKK3sKKyAgICBp
bnQgZmQgPSBvcGVuKERFVlhFTiAiZ250ZGV2IiwgT19SRFdSfE9fQ0xPRVhFQyk7CisgICAgaWYg
KCBmZCA9PSAtMSApCisgICAgICAgIHJldHVybiAtMTsKKyAgICB4Z3QtPmZkID0gZmQ7CisgICAg
cmV0dXJuIDA7Cit9CisKK2ludCBvc2RlcF9nbnR0YWJfY2xvc2UoeGVuZ250dGFiX2hhbmRsZSAq
eGd0KQoreworICAgIGlmICggeGd0LT5mZCA9PSAtMSApCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGNsb3NlKHhndC0+ZmQpOworfQorCitpbnQgb3NkZXBfZ250dGFiX3NldF9tYXhf
Z3JhbnRzKHhlbmdudHRhYl9oYW5kbGUgKnhndCwgdWludDMyX3QgY291bnQpCit7CisgICAgaW50
IGZkID0geGd0LT5mZCwgcmM7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9zZXRfbWF4X2dyYW50
cyBtYXhfZ3JhbnRzID0geyAuY291bnQgPSBjb3VudCB9OworCisgICAgcmMgPSBpb2N0bChmZCwg
SU9DVExfR05UREVWX1NFVF9NQVhfR1JBTlRTLCAmbWF4X2dyYW50cyk7CisgICAgaWYgKHJjKSB7
CisgICAgICAgIC8qCisgICAgICAgICAqIEZyZWVCU0Qga2VybmVsIGRvZXNuJ3QgaW1wbGVtZW50
IHRoaXMgSU9DVEwsCisgICAgICAgICAqIHNvIGlnbm9yZSB0aGUgcmVzdWx0aW5nIHNwZWNpZmlj
IGZhaWx1cmUsIGlmIGFueS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlcnJubyA9PSBFTk9U
VFkpCisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEdURVJS
T1IoeGd0LT5sb2dnZXIsICJpb2N0bCBTRVRfTUFYX0dSQU5UUyBmYWlsZWQiKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQgKm9zZGVwX2dudHRhYl9ncmFudF9tYXAoeGVuZ250
dGFiX2hhbmRsZSAqeGd0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBj
b3VudCwgaW50IGZsYWdzLCBpbnQgcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgKmRvbWlkcywgdWludDMyX3QgKnJlZnMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG5vdGlmeV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV2dGNobl9wb3J0X3Qgbm90aWZ5X3BvcnQpCit7CisgICAgaW50IGZkID0geGd0LT5mZDsK
KyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X21hcF9ncmFudF9yZWYgKm1hcDsKKyAgICB1bnNpZ25l
ZCBpbnQgbWFwX3NpemUgPSBST1VORFVQKChzaXplb2YoKm1hcCkgKyAoY291bnQgLSAxKSAqCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlvY3RsX2du
dGRldl9tYXBfZ3JhbnRfcmVmKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQQUdFX1NISUZUKTsKKyAgICB2b2lkICphZGRyID0gTlVMTDsKKyAgICBpbnQgZG9taWRzX3N0
cmlkZSA9IDE7CisgICAgaW50IGk7CisKKyAgICBpZiAoZmxhZ3MgJiBYRU5HTlRUQUJfR1JBTlRf
TUFQX1NJTkdMRV9ET01BSU4pCisgICAgICAgIGRvbWlkc19zdHJpZGUgPSAwOworCisgICAgaWYg
KCBtYXBfc2l6ZSA8PSBQQUdFX1NJWkUgKQorICAgICAgICBtYXAgPSBhbGxvY2Eoc2l6ZW9mKCpt
YXApICsKKyAgICAgICAgICAgICAgICAgICAgIChjb3VudCAtIDEpICogc2l6ZW9mKHN0cnVjdCBp
b2N0bF9nbnRkZXZfbWFwX2dyYW50X3JlZikpOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1h
cCA9IG1tYXAoTlVMTCwgbWFwX3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAg
ICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworICAgICAgICBpZiAo
IG1hcCA9PSBNQVBfRkFJTEVEICkKKyAgICAgICAgeworICAgICAgICAgICAgR1RFUlJPUih4Z3Qt
PmxvZ2dlciwgIm1tYXAgb2YgbWFwIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQor
ICAgIHsKKyAgICAgICAgbWFwLT5yZWZzW2ldLmRvbWlkID0gZG9taWRzW2kgKiBkb21pZHNfc3Ry
aWRlXTsKKyAgICAgICAgbWFwLT5yZWZzW2ldLnJlZiA9IHJlZnNbaV07CisgICAgfQorCisgICAg
bWFwLT5jb3VudCA9IGNvdW50OworCisgICAgaWYgKCBpb2N0bChmZCwgSU9DVExfR05UREVWX01B
UF9HUkFOVF9SRUYsIG1hcCkgKSB7CisgICAgICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJpb2N0
bCBNQVBfR1JBTlRfUkVGIGZhaWxlZCIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyBy
ZXRyeToKKyAgICBhZGRyID0gbW1hcChOVUxMLCBQQUdFX1NJWkUgKiBjb3VudCwgcHJvdCwgTUFQ
X1NIQVJFRCwgZmQsCisgICAgICAgICAgICAgICAgbWFwLT5pbmRleCk7CisKKyAgICBpZiAoYWRk
ciA9PSBNQVBfRkFJTEVEICYmIGVycm5vID09IEVBR0FJTikKKyAgICB7CisgICAgICAgIC8qCisg
ICAgICAgICAqIFRoZSBncmFudCBoeXBlcmNhbGwgY2FuIHJldHVybiBFQUdBSU4gaWYgdGhlIGdy
YW50ZWQgcGFnZQorICAgICAgICAgKiBpcyBzd2FwcGVkIG91dC4gU2luY2UgdGhlIHBhZ2luZyBk
YWVtb24gbWF5IGJlIGluIHRoZSBzYW1lCisgICAgICAgICAqIGRvbWFpbiwgdGhlIGh5cGVyY2Fs
bCBjYW5ub3QgYmxvY2sgd2l0aG91dCBjYXVzaW5nIGEKKyAgICAgICAgICogZGVhZGxvY2suCisg
ICAgICAgICAqCisgICAgICAgICAqIEJlY2F1c2UgdGhlcmUgYXJlIG5vIG5vdGlmaWNhdGlvbnMg
d2hlbiB0aGUgcGFnZSBpcyBzd2FwcGVkCisgICAgICAgICAqIGluLCB3YWl0IGEgYml0IGJlZm9y
ZSByZXRyeWluZywgYW5kIGhvcGUgdGhhdCB0aGUgcGFnZSB3aWxsCisgICAgICAgICAqIGFycml2
ZSBldmVudHVhbGx5LgorICAgICAgICAgKi8KKyAgICAgICAgdXNsZWVwKDEwMDApOworICAgICAg
ICBnb3RvIHJldHJ5OworICAgIH0KKworICAgIGlmIChhZGRyICE9IE1BUF9GQUlMRUQpCisgICAg
eworICAgICAgICBpbnQgcnYgPSAwOworICAgICAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFw
X25vdGlmeSBub3RpZnk7CisgICAgICAgIG5vdGlmeS5pbmRleCA9IG1hcC0+aW5kZXg7CisgICAg
ICAgIG5vdGlmeS5hY3Rpb24gPSAwOworICAgICAgICBpZiAobm90aWZ5X29mZnNldCA8IFBBR0Vf
U0laRSAqIGNvdW50KSB7CisgICAgICAgICAgICBub3RpZnkuaW5kZXggKz0gbm90aWZ5X29mZnNl
dDsKKyAgICAgICAgICAgIG5vdGlmeS5hY3Rpb24gfD0gVU5NQVBfTk9USUZZX0NMRUFSX0JZVEU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5vdGlmeV9wb3J0ICE9IC0xKSB7CisgICAgICAgICAg
ICBub3RpZnkuZXZlbnRfY2hhbm5lbF9wb3J0ID0gbm90aWZ5X3BvcnQ7CisgICAgICAgICAgICBu
b3RpZnkuYWN0aW9uIHw9IFVOTUFQX05PVElGWV9TRU5EX0VWRU5UOworICAgICAgICB9CisgICAg
ICAgIGlmIChub3RpZnkuYWN0aW9uKQorICAgICAgICAgICAgcnYgPSBpb2N0bChmZCwgSU9DVExf
R05UREVWX1NFVF9VTk1BUF9OT1RJRlksICZub3RpZnkpOworICAgICAgICBpZiAocnYpIHsKKyAg
ICAgICAgICAgIEdURVJST1IoeGd0LT5sb2dnZXIsICJpb2N0bCBTRVRfVU5NQVBfTk9USUZZIGZh
aWxlZCIpOworICAgICAgICAgICAgbXVubWFwKGFkZHIsIGNvdW50ICogUEFHRV9TSVpFKTsKKyAg
ICAgICAgICAgIGFkZHIgPSBNQVBfRkFJTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGFkZHIgPT0gTUFQX0ZBSUxFRCkKKyAgICB7CisgICAgICAgIGludCBzYXZlZF9lcnJubyA9IGVy
cm5vOworICAgICAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX2dyYW50X3JlZiB1bm1hcF9n
cmFudDsKKworICAgICAgICAvKiBVbm1hcCB0aGUgZHJpdmVyIHNsb3RzIHVzZWQgdG8gc3RvcmUg
dGhlIGdyYW50IGluZm9ybWF0aW9uLiAqLworICAgICAgICBHVEVSUk9SKHhndC0+bG9nZ2VyLCAi
bW1hcCBmYWlsZWQiKTsKKyAgICAgICAgdW5tYXBfZ3JhbnQuaW5kZXggPSBtYXAtPmluZGV4Owor
ICAgICAgICB1bm1hcF9ncmFudC5jb3VudCA9IGNvdW50OworICAgICAgICBpb2N0bChmZCwgSU9D
VExfR05UREVWX1VOTUFQX0dSQU5UX1JFRiwgJnVubWFwX2dyYW50KTsKKyAgICAgICAgZXJybm8g
PSBzYXZlZF9lcnJubzsKKyAgICAgICAgYWRkciA9IE5VTEw7CisgICAgfQorCisgb3V0OgorICAg
IGlmICggbWFwX3NpemUgPiBQQUdFX1NJWkUgKQorICAgICAgICBtdW5tYXAobWFwLCBtYXBfc2l6
ZSk7CisKKyAgICByZXR1cm4gYWRkcjsKK30KKworaW50IG9zZGVwX2dudHRhYl91bm1hcCh4ZW5n
bnR0YWJfaGFuZGxlICp4Z3QsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YXJ0X2Fk
ZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvdW50KQoreworICAgIGlu
dCBmZCA9IHhndC0+ZmQ7CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9nZXRfb2Zmc2V0X2Zvcl92
YWRkciBnZXRfb2Zmc2V0OworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfdW5tYXBfZ3JhbnRfcmVm
IHVubWFwX2dyYW50OworICAgIGludCByYzsKKworICAgIGlmICggc3RhcnRfYWRkcmVzcyA9PSBO
VUxMICkKKyAgICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorCisgICAgLyogRmlyc3QsIGl0IGlzIG5lY2Vzc2FyeSB0byBnZXQgdGhlIG9mZnNl
dCB3aGljaCB3YXMgaW5pdGlhbGx5IHVzZWQgdG8KKyAgICAgKiBtbWFwKCkgdGhlIHBhZ2VzLgor
ICAgICAqLworICAgIGdldF9vZmZzZXQudmFkZHIgPSAodW5zaWduZWQgbG9uZylzdGFydF9hZGRy
ZXNzOworICAgIGlmICggKHJjID0gaW9jdGwoZmQsIElPQ1RMX0dOVERFVl9HRVRfT0ZGU0VUX0ZP
Ul9WQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICZnZXRfb2Zmc2V0KSkgKQorICAgICAgICBy
ZXR1cm4gcmM7CisKKyAgICBpZiAoIGdldF9vZmZzZXQuY291bnQgIT0gY291bnQgKQorICAgIHsK
KyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg
ICAvKiBOZXh0LCB1bm1hcCB0aGUgbWVtb3J5LiAqLworICAgIGlmICggKHJjID0gbXVubWFwKHN0
YXJ0X2FkZHJlc3MsIGNvdW50ICogUEFHRV9TSVpFKSkgKQorICAgICAgICByZXR1cm4gcmM7CisK
KyAgICAvKiBGaW5hbGx5LCB1bm1hcCB0aGUgZHJpdmVyIHNsb3RzIHVzZWQgdG8gc3RvcmUgdGhl
IGdyYW50IGluZm9ybWF0aW9uLiAqLworICAgIHVubWFwX2dyYW50LmluZGV4ID0gZ2V0X29mZnNl
dC5vZmZzZXQ7CisgICAgdW5tYXBfZ3JhbnQuY291bnQgPSBjb3VudDsKKyAgICBpZiAoIChyYyA9
IGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfVU5NQVBfR1JBTlRfUkVGLCAmdW5tYXBfZ3JhbnQpKSAp
CisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBfZ250
c2hyX29wZW4oeGVuZ250c2hyX2hhbmRsZSAqeGdzKQoreworICAgIGludCBmZCA9IG9wZW4oREVW
WEVOICJnbnRkZXYiLCBPX1JEV1IpOworICAgIGlmICggZmQgPT0gLTEgKQorICAgICAgICByZXR1
cm4gLTE7CisgICAgeGdzLT5mZCA9IGZkOworICAgIHJldHVybiAwOworfQorCitpbnQgb3NkZXBf
Z250c2hyX2Nsb3NlKHhlbmdudHNocl9oYW5kbGUgKnhncykKK3sKKyAgICBpZiAoIHhncy0+ZmQg
PT0gLTEgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBjbG9zZSh4Z3MtPmZkKTsK
K30KKwordm9pZCAqb3NkZXBfZ250c2hyX3NoYXJlX3BhZ2VzKHhlbmdudHNocl9oYW5kbGUgKnhn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwgaW50IGNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWZzLCBpbnQg
d3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgbm90aWZ5
X29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnRjaG5fcG9ydF90IG5v
dGlmeV9wb3J0KQoreworICAgIHN0cnVjdCBpb2N0bF9nbnRkZXZfYWxsb2NfZ3JlZiAqZ3JlZl9p
bmZvID0gTlVMTDsKKyAgICBzdHJ1Y3QgaW9jdGxfZ250ZGV2X3VubWFwX25vdGlmeSBub3RpZnk7
CisgICAgc3RydWN0IGlvY3RsX2dudGRldl9kZWFsbG9jX2dyZWYgZ3JlZl9kcm9wOworICAgIGlu
dCBmZCA9IHhncy0+ZmQ7CisgICAgaW50IGVycjsKKyAgICB2b2lkICphcmVhID0gTlVMTDsKKyAg
ICBncmVmX2luZm8gPSBtYWxsb2Moc2l6ZW9mKCpncmVmX2luZm8pICsgY291bnQgKiBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICBpZiAoIWdyZWZfaW5mbykKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgZ3JlZl9pbmZvLT5kb21pZCA9IGRvbWlkOworICAgIGdyZWZfaW5mby0+ZmxhZ3MgPSB3cml0
YWJsZSA/IEdOVERFVl9BTExPQ19GTEFHX1dSSVRBQkxFIDogMDsKKyAgICBncmVmX2luZm8tPmNv
dW50ID0gY291bnQ7CisKKyAgICBlcnIgPSBpb2N0bChmZCwgSU9DVExfR05UREVWX0FMTE9DX0dS
RUYsIGdyZWZfaW5mbyk7CisgICAgaWYgKGVycikgeworICAgICAgICBHU0VSUk9SKHhncy0+bG9n
Z2VyLCAiaW9jdGwgZmFpbGVkIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGFy
ZWEgPSBtbWFwKE5VTEwsIGNvdW50ICogUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF
LAorICAgICAgICBNQVBfU0hBUkVELCBmZCwgZ3JlZl9pbmZvLT5pbmRleCk7CisKKyAgICBpZiAo
YXJlYSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGFyZWEgPSBOVUxMOworICAgICAgICBHU0VS
Uk9SKHhncy0+bG9nZ2VyLCAibW1hcCBmYWlsZWQiKTsKKyAgICAgICAgZ290byBvdXRfcmVtb3Zl
X2ZkbWFwOworICAgIH0KKworICAgIG5vdGlmeS5pbmRleCA9IGdyZWZfaW5mby0+aW5kZXg7Cisg
ICAgbm90aWZ5LmFjdGlvbiA9IDA7CisgICAgaWYgKG5vdGlmeV9vZmZzZXQgPCBQQUdFX1NJWkUg
KiBjb3VudCkgeworICAgICAgICBub3RpZnkuaW5kZXggKz0gbm90aWZ5X29mZnNldDsKKyAgICAg
ICAgbm90aWZ5LmFjdGlvbiB8PSBVTk1BUF9OT1RJRllfQ0xFQVJfQllURTsKKyAgICB9CisgICAg
aWYgKG5vdGlmeV9wb3J0ICE9IC0xKSB7CisgICAgICAgIG5vdGlmeS5ldmVudF9jaGFubmVsX3Bv
cnQgPSBub3RpZnlfcG9ydDsKKyAgICAgICAgbm90aWZ5LmFjdGlvbiB8PSBVTk1BUF9OT1RJRllf
U0VORF9FVkVOVDsKKyAgICB9CisgICAgaWYgKG5vdGlmeS5hY3Rpb24pCisgICAgICAgIGVyciA9
IGlvY3RsKGZkLCBJT0NUTF9HTlRERVZfU0VUX1VOTUFQX05PVElGWSwgJm5vdGlmeSk7CisgICAg
aWYgKGVycikgeworICAgICAgICBHU0VSUk9SKHhncy0+bG9nZ2VyLCAiaW9jdGwgU0VUX1VOTUFQ
X05PVElGWSBmYWlsZWQiKTsKKyAgICAgICAgbXVubWFwKGFyZWEsIGNvdW50ICogUEFHRV9TSVpF
KTsKKyAgICAgICAgYXJlYSA9IE5VTEw7CisgICAgfQorCisgICAgbWVtY3B5KHJlZnMsIGdyZWZf
aW5mby0+Z3JlZl9pZHMsIGNvdW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisKKyBvdXRfcmVtb3Zl
X2ZkbWFwOgorICAgIC8qIFJlbW92aW5nIHRoZSBtYXBwaW5nIGZyb20gdGhlIGZpbGUgZGVzY3Jp
cHRvciBkb2VzIG5vdCBjYXVzZSB0aGUgcGFnZXMgdG8KKyAgICAgKiBiZSBkZWFsbG9jYXRlZCB1
bnRpbCB0aGUgbWFwcGluZyBpcyByZW1vdmVkLgorICAgICAqLworICAgIGdyZWZfZHJvcC5pbmRl
eCA9IGdyZWZfaW5mby0+aW5kZXg7CisgICAgZ3JlZl9kcm9wLmNvdW50ID0gY291bnQ7CisgICAg
aW9jdGwoZmQsIElPQ1RMX0dOVERFVl9ERUFMTE9DX0dSRUYsICZncmVmX2Ryb3ApOworIG91dDoK
KyAgICBmcmVlKGdyZWZfaW5mbyk7CisgICAgcmV0dXJuIGFyZWE7Cit9CisKK2ludCBvc2RlcF9n
bnRzaHJfdW5zaGFyZSh4ZW5nbnRzaHJfaGFuZGxlICp4Z3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqc3RhcnRfYWRkcmVzcywgdWludDMyX3QgY291bnQpCit7CisgICAgcmV0dXJu
IG11bm1hcChzdGFydF9hZGRyZXNzLCBjb3VudCAqIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBM
b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj
LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu
aWwKKyAqIEVuZDoKKyAqLwo=
--001a1140b16018b2e40539076444--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAAeUNVmz521zKZErZqsMuJKHcS_fSvVCw=LByQXoxh_RAiLwiQ>