Re: Frame Buffer + TNT2

ani joshi (ajoshi@wam.umd.edu)
Fri, 17 Sep 1999 10:08:39 -0400 (EDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

---559023410-851401618-937577319=:9394
Content-Type: TEXT/PLAIN; charset=US-ASCII

hey guys, i didn't know word has gotten out about rivafb :)
anyhow, if you're gonna try it i suggest your use the rivafb.c i'm
attaching, this is the latest snapshot (fixed some nasty bugs ast night),
but you will still have to go to Jeff's site and grab the big patch
because it contains other necessary files, just replace the rivafb.c with
this one.

lemme know how it works, thanks!

ani

---559023410-851401618-937577319=:9394
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="rivafb.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.9909171008390.9394@rac8.wam.umd.edu>
Content-Description:
Content-Disposition: attachment; filename="rivafb.c"

LyoNCiAqIGxpbnV4L2RyaXZlcnMvdmlkZW8vcml2YWZiLmMgLSBuVmlkaWEg
UklWQSAxMjgvVE5UL1ROVDIgZmIgZHJpdmVyDQogKg0KICogQ29weXJpZ2h0
IDE5OTkgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPg0KICoJCSAg
QW5pIEpvc2hpIDxham9zaGlAd2FtLnVtZC5lZHU+DQogKg0KICogSW5pdGlh
bCB0ZW1wbGF0ZSBmcm9tIHNrZWxldG9uZmIuYywgY3JlYXRlZCAyOCBEZWMg
MTk5NyBieSBHZWVydCBVeXR0ZXJob2V2ZW4NCiAqIEluY2x1ZGVzIHJpdmFf
aHcuYyBmcm9tIG5WaWRpYSwgc2VlIGNvcHlyaWdodCBiZWxvdy4NCiAqIEtH
SSBjb2RlIHByb3ZpZGVkIHRoZSBiYXNpcyBmb3Igc3RhdGUgc3RvcmFnZSwg
aW5pdCwgYW5kIG1vZGUgc3dpdGNoaW5nLg0KICoNCiAqIFRoaXMgZmlsZSBp
cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljDQogKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxl
IFJFQURNRS5sZWdhbCBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBh
cmNoaXZlDQogKiBmb3IgbW9yZSBkZXRhaWxzLg0KICovDQoNCi8qIHZlcnNp
b24gbnVtYmVyIG9mIHRoaXMgZHJpdmVyICovDQojZGVmaW5lIFJJVkFGQl9W
RVJTSU9OICIwLjcuMCINCg0KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K
I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KI2luY2x1ZGUgPGxpbnV4L2Vy
cm5vLmg+DQojaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQojaW5jbHVkZSA8
bGludXgvbW0uaD4NCiNpbmNsdWRlIDxsaW51eC9zZWxlY3Rpb24uaD4NCiNp
bmNsdWRlIDxsaW51eC90dHkuaD4NCiNpbmNsdWRlIDxsaW51eC9tYWxsb2Mu
aD4NCiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KI2luY2x1ZGUgPGxpbnV4
L2ZiLmg+DQojaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KI2luY2x1ZGUgPGxp
bnV4L3BjaS5oPg0KDQojaW5jbHVkZSA8dmlkZW8vZmJjb24uaD4NCiNpbmNs
dWRlICJyaXZhX2h3LmgiDQojaW5jbHVkZSAicml2YV90YmwuaCINCiNpbmNs
dWRlICJudnJlZy5oIg0KI2luY2x1ZGUgIm52NHJlZi5oIg0KI2luY2x1ZGUg
InZnYS5oIg0KI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjQuaD4NCiNpbmNs
dWRlIDx2aWRlby9mYmNvbi1jZmI4Lmg+DQojaW5jbHVkZSA8dmlkZW8vZmJj
b24tY2ZiMTYuaD4NCiNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIzMi5oPg0K
DQojaWZuZGVmIENPTkZJR19QQ0kgLyogc2FuaXR5IGNoZWNrICovDQojZXJy
b3IgVGhpcyBkcml2ZXIgcmVxdWlyZXMgUENJIHN1cHBvcnQuDQojZW5kaWYN
Cg0KDQoNCiNkZWZpbmUgUklWQUZCREVCVUcNCiNpZmRlZiBSSVZBRkJERUJV
Rw0KI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5f
REVCVUcgIiVzOiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykNCiNl
bHNlDQojZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQ0KI2VuZGlmDQoN
CiNpZm5kZWYgUklWQV9OREVCVUcNCiNkZWZpbmUgYXNzZXJ0KGV4cHIpIFwN
CglpZighKGV4cHIpKSB7IFwNCiAgICAgICAgcHJpbnRrKCAiQXNzZXJ0aW9u
IGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIixcDQogICAgICAgICNleHBy
LF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7IFwNCgkqKGludCop
MCA9IDA7IFwNCiAgICAgICAgfQ0KI2Vsc2UNCiNkZWZpbmUgYXNzZXJ0KGV4
cHIpDQojZW5kaWYNCg0KLyogR0dJIGNvbXBhdGliaWxpdHkgbWFjcm9zICov
DQojZGVmaW5lIGlvX291dDggb3V0Yg0KI2RlZmluZSBpb19pbjggaW5iDQoj
ZGVmaW5lIEZhdGFsRXJyb3IgcGFuaWMNCiNkZWZpbmUgTlVNX1NFUV9SRUdT
IDB4MDUNCiNkZWZpbmUgTlVNX0NSVF9SRUdTIDB4NDENCiNkZWZpbmUgTlVN
X0dSQ19SRUdTIDB4MDkNCiNkZWZpbmUgTlVNX0FUQ19SRUdTIDB4MTUNCg0K
LyogbWF4IG51bWJlciBvZiBWR0EgY29udHJvbGxlcnMgd2Ugc2NhbiBmb3Ig
Ki8NCiNkZWZpbmUgUklWQV9NQVhfVkdBX0NPTlRST0xMRVJTIDgNCg0KI2Rl
ZmluZSBDTlZUX1RPSFcodmFsLHdpZHRoKSAoKCgodmFsKTw8KHdpZHRoKSkr
MHg3RkZGLSh2YWwpKT4+MTYpDQoNCi8qIG1hY3JvIHRoYXQgYWxsb3dzIHlv
dSB0byBzZXQgb3ZlcmZsb3cgYml0cyAqLw0KI2RlZmluZSBTZXRCaXRGaWVs
ZCh2YWx1ZSxmcm9tLHRvKSBTZXRCRih0byxHZXRCRih2YWx1ZSxmcm9tKSkN
CiNkZWZpbmUgU2V0Qml0KG4pICgxPDwobikpDQojZGVmaW5lIFNldDhCaXRz
KHZhbHVlKSAoKHZhbHVlKSYweGZmKQ0KDQpzdHJ1Y3Qgcml2YV9jaGlwX2lu
Zm8gew0KCWNvbnN0IGNoYXIgKm5hbWU7DQoJdW5zaWduZWQgYXJjaF9yZXY7
DQoJdW5zaWduZWQgc2hvcnQgdmVuZG9yOw0KCXVuc2lnbmVkIHNob3J0IGRl
dmljZTsNCn07DQoNCg0Kc3RhdGljIGNvbnN0IHN0cnVjdCByaXZhX2NoaXBf
aW5mbyByaXZhX3BjaV9wcm9iZV9saXN0W10gPQ0Kew0KCXsiUklWQS0xMjgi
LCAzLCBQQ0lfVkVORE9SX0lEX05WSURJQV9TR1MsIFBDSV9ERVZJQ0VfSURf
TlZJRElBX1NHU19SSVZBMTI4fSwNCgl7IlJJVkEtVE5UIiwgNCwgUENJX1ZF
TkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVH0sDQoJ
eyJSSVZBLVROVDIiLCA1LCBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RF
VklDRV9JRF9OVklESUFfVE5UMn0sDQoJeyJSSVZBLVROVDIiLCA1LCBQQ0lf
VkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfVVROVDJ9
LA0KCXsiUklWQS1UTlQyIiwgNSwgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBD
SV9ERVZJQ0VfSURfTlZJRElBX1ZUTlQyfSwNCgl7IlJJVkEtVE5UMiIsIDUs
IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9J
VE5UMn0sDQoJe05VTEwsIDAsIDAsIDB9DQp9Ow0KDQoNCg0KDQovKiBob2xk
cyB0aGUgc3RhdGUgb2YgdGhlIFZHQSBjb3JlIGFuZCBleHRlbmRlZCBSaXZh
IGh3IHN0YXRlIGZyb20gcml2YV9ody5jLg0KICogRnJvbSBLR0kgb3JpZ2lu
YWxseS4gKi8NCnN0cnVjdCByaXZhX3JlZ3Mgew0KCXU4IGF0dHJbMHgxNV07
DQoJdTggY3J0Y1sweDQxXTsNCgl1OCBncmFbMHgwOV07DQoJdTggc2VxWzB4
MDVdOw0KCXU4IG1pc2Nfb3V0cHV0Ow0KCVJJVkFfSFdfU1RBVEUgZXh0Ow0K
fTsNCg0KDQovKg0KICogZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiBhIFJpdmEg
Ym9hcmQNCiAqLw0Kc3RydWN0IHJpdmFmYl9wYXIgew0KCXN0cnVjdCByaXZh
X3JlZ3Mgc3RhdGU7IC8qIHN0YXRlIG9mIGh3IGJvYXJkICovDQoJX191MzIg
dmlzdWFsOwkvKiBGQl9WSVNVQUxfeHh4ICovDQoJdW5zaWduZWQgZGVwdGg7
IC8qIGJwcCBvZiBjdXJyZW50IG1vZGUgKi8NCn07DQoNCnR5cGVkZWYgc3Ry
dWN0IHsNCgl1bnNpZ25lZCBjaGFyIHJlZCwgZ3JlZW4sIGJsdWUsIHRyYW5z
cDsNCgl1bnNpZ25lZCBjaGFyIHNsb3RfdXNlZDsNCn0gcml2YV9jZmI4X2Nt
YXBfdDsNCg0KDQoNCg0KDQoNCnN0cnVjdCByaXZhZmJfaW5mbzsNCnN0cnVj
dCByaXZhZmJfaW5mbyB7DQoJc3RydWN0IGZiX2luZm8gaW5mbzsJLyoga2Vy
bmVsIGZyYW1lYnVmZmVyIGluZm8gKi8NCg0KCVJJVkFfSFdfSU5TVCByaXZh
OwkvKiBpbnRlcmZhY2UgdG8gcml2YV9ody5jICovDQoNCgljb25zdCBjaGFy
ICpkcnZyX25hbWU7CS8qIFJpdmEgaGFyZHdhcmUgYm9hcmQgdHlwZSAqLw0K
DQoJdW5zaWduZWQgbG9uZyBjdHJsX2Jhc2VfcGh5czsgLyogcGh5c2ljYWwg
Y29udHJvbCByZWdpc3RlciBiYXNlIGFkZHIgKi8NCgl1bnNpZ25lZCBsb25n
IGZiX2Jhc2VfcGh5czsgLyogcGh5c2ljYWwgZnJhbWVidWZmZXIgYmFzZSBh
ZGRyICovDQoNCgljYWRkcl90IGN0cmxfYmFzZTsJLyogdmlydHVhbCBjb250
cm9sIHJlZ2lzdGVyIGJhc2UgYWRkciAqLw0KCWNhZGRyX3QgZmJfYmFzZTsJ
LyogdmlydHVhbCBmcmFtZWJ1ZmZlciBiYXNlIGFkZHIgKi8NCg0KCXVuc2ln
bmVkIHJhbV9hbW91bnQ7CS8qIGFtb3VudCBvZiBSQU0gb24gY2FyZCwgaW4g
bWVnYWJ5dGVzICovDQoJdW5zaWduZWQgZGNsa19tYXg7CS8qIG1heCBEQ0xL
ICovDQoNCglzdHJ1Y3Qgcml2YV9yZWdzIGluaXRpYWxfc3RhdGU7CQkvKiBp
bml0aWFsIHN0YXJ0dXAgdmlkZW8gbW9kZSAqLw0KDQoJc3RydWN0IHJpdmFm
Yl9wYXIgY3Vycl9wYXI7DQoJc3RydWN0IHJpdmFmYl9wYXIgZGVmX3BhcjsN
CglzdHJ1Y3QgZGlzcGxheSBkaXNwOw0KCWludCBjdXJyY29uOw0KCXN0cnVj
dCBkaXNwbGF5ICpjdXJyY29uX2Rpc3BsYXk7DQoNCglzdHJ1Y3Qgcml2YWZi
X2luZm8gKm5leHQ7DQoNCglzdHJ1Y3QgcGNpX2RldiAqcGQ7CQkvKiBwb2lu
dGVyIHRvIGJvYXJkJ3MgcGNpIGluZm8gKi8NCgl1bnNpZ25lZCBiYXNlMF9y
ZWdpb25fc2l6ZTsJLyogc2l6ZSBvZiBjb250cm9sIHJlZ2lzdGVyIHJlZ2lv
biAqLw0KCXVuc2lnbmVkIGJhc2UxX3JlZ2lvbl9zaXplOwkvKiBzaXplIG9m
IGZyYW1lYnVmZmVyIHJlZ2lvbiAqLw0KDQojaWZkZWYgRkJDT05fSEFTX0NG
QjgNCglyaXZhX2NmYjhfY21hcF90IHBhbGV0dGVbMjU2XTsJLyogVkdBIERB
QyBwYWxldHRlIGNhY2hlICovDQojZW5kaWYNCg0KI2lmIGRlZmluZWQoRkJD
T05fSEFTX0NGQjE2KSB8fCBkZWZpbmVkKEZCQ09OX0hBU19DRkIzMikNCiAg
ICAgICAgdW5pb24gew0KI2lmZGVmIEZCQ09OX0hBU19DRkIxNg0KICAgICAg
ICAgICAgICAgIHVfaW50MTZfdCAgICAgICBjZmIxNlsxNl07DQojZW5kaWYN
CiNpZmRlZiBGQkNPTl9IQVNfQ0ZCMzINCiAgICAgICAgICAgICAgICB1X2lu
dDMyX3QgICAgICAgY2ZiMzJbMTZdOw0KI2VuZGlmDQogICAgICAgIH0gY29u
X2NtYXA7DQojZW5kaWYgLyogRkJDT05fSEFTX0NGQjE2IHwgRkJDT05fSEFT
X0NGQjMyICovDQp9Ow0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tIGdsb2Jh
bCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoNCg0K
c3RhdGljIHN0cnVjdCByaXZhZmJfaW5mbyAqcml2YV9ib2FyZHMgPSBOVUxM
Ow0KDQoNCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvdG90eXBlcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KaW50IHJpdmFmYl9v
cGVuIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpOw0KaW50IHJp
dmFmYl9yZWxlYXNlIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIp
Ow0KaW50IHJpdmFmYl9nZXRfZml4IChzdHJ1Y3QgZmJfZml4X3NjcmVlbmlu
Zm8gKmZpeCwgaW50IGNvbiwNCgkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7
DQppbnQgcml2YWZiX2dldF92YXIgKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5m
byAqdmFyLCBpbnQgY29uLA0KCQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsN
CmludCByaXZhZmJfc2V0X3ZhciAoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZv
ICp2YXIsIGludCBjb24sDQoJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pOw0K
aW50IHJpdmFmYl9nZXRfY21hcCAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIGlu
dCBrc3BjLCBpbnQgY29uLA0KCQkgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7
DQppbnQgcml2YWZiX3NldF9jbWFwIChzdHJ1Y3QgZmJfY21hcCAqY21hcCwg
aW50IGtzcGMsIGludCBjb24sDQoJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZv
KTsNCmludCByaXZhZmJfcGFuX2Rpc3BsYXkgKHN0cnVjdCBmYl92YXJfc2Ny
ZWVuaW5mbyAqdmFyLCBpbnQgY29uLA0KCQkgICAgICBzdHJ1Y3QgZmJfaW5m
byAqaW5mbyk7DQppbnQgcml2YWZiX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlu
b2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwNCgkJ
dW5zaWduZWQgbG9uZyBhcmcsIGludCBjb24sIHN0cnVjdCBmYl9pbmZvICpp
bmZvKTsNCmludCByaXZhZmJfc3dpdGNoKGludCBjb24sIHN0cnVjdCBmYl9p
bmZvICppbmZvKTsNCnZvaWQgcml2YWZiX2JsYW5rIChpbnQgYmxhbmssIHN0
cnVjdCBmYl9pbmZvICppbmZvKTsNCg0Kc3RhdGljIHZvaWQgcml2YV9sb2Fk
X3ZpZGVvX21vZGUgKHN0cnVjdCByaXZhZmJfaW5mbyAqcml2YWluZm8sDQoJ
CQkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2aWRlb19tb2RlKTsNCnN0
YXRpYyBpbnQgcml2YV9nZXRjb2xyZWcgKHVuc2lnbmVkIHJlZ25vLCB1bnNp
Z25lZCAqcmVkLCB1bnNpZ25lZCAqZ3JlZW4sDQoJCQkgdW5zaWduZWQgKmJs
dWUsIHVuc2lnbmVkICp0cmFuc3AsDQoJCQkgc3RydWN0IGZiX2luZm8gKmlu
Zm8pOw0Kc3RhdGljIGludCByaXZhX3NldGNvbHJlZyAodW5zaWduZWQgcmVn
bm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sDQoJCSAgICB1bnNp
Z25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsDQoJCSAgICBzdHJ1Y3QgZmJf
aW5mbyAqaW5mbyk7DQpzdGF0aWMgaW50IHJpdmFfZ2V0X2NtYXBfbGVuKGNv
bnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsNCg0Kc3RhdGlj
IHUzMiByaXZhX3BjaV9yZWdpb25fc2l6ZSAoc3RydWN0IHBjaV9kZXYgKnBk
LCB1OCB3aGVyZSk7DQpzdGF0aWMgdm9pZCByaXZhX3BjaV9pb19lbmFibGUg
KHN0cnVjdCBwY2lfZGV2ICpwZCwgaW50IGVuYWJsZV9pbywgaW50IGVuYWJs
ZV9tbWlvKTsNCnN0YXRpYyB1MzIgcml2YV9wY2lfaW9fc3RhdHVzIChzdHJ1
Y3QgcGNpX2RldiAqcGQpOw0Kc3RhdGljIHZvaWQgcml2YV9wY2lfcmVnaW9u
X2luaXQgKHN0cnVjdCBwY2lfZGV2ICpwZCwgc3RydWN0IHJpdmFmYl9pbmZv
ICpyaW5mbyk7DQpzdGF0aWMgdm9pZCByaXZhX3BjaV9pb3VubWFwIChzdHJ1
Y3Qgcml2YWZiX2luZm8gKnJpbmZvKTsNCnN0YXRpYyBpbnQgcml2YV9wY2lf
cmVnaXN0ZXIgKHN0cnVjdCBwY2lfZGV2ICpwZCwgY29uc3Qgc3RydWN0IHJp
dmFfY2hpcF9pbmZvICpyY2kpOw0Kc3RhdGljIGludCByaXZhX3BjaV9yZWdp
c3Rlcl9kZXZpY2VzICh2b2lkKTsNCnN0YXRpYyBpbnQgcml2YV9zZXRfZmJp
bmZvIChzdHJ1Y3Qgcml2YWZiX2luZm8gKnJpbmZvKTsNCg0Kc3RhdGljDQp2
b2lkIHJpdmFfc2F2ZV9zdGF0ZShzdHJ1Y3Qgcml2YWZiX2luZm8gKnJpbmZv
LCBzdHJ1Y3Qgcml2YV9yZWdzICpyZWdzKTsNCnN0YXRpYw0Kdm9pZCByaXZh
X2xvYWRfc3RhdGUoc3RydWN0IHJpdmFmYl9pbmZvICpyaW5mbywgc3RydWN0
IHJpdmFfcmVncyAqcmVncyk7DQpzdGF0aWMNCnN0cnVjdCByaXZhZmJfaW5m
byAqcml2YV9ib2FyZF9saXN0X2FkZChzdHJ1Y3Qgcml2YWZiX2luZm8gKmJv
YXJkX2xpc3QsDQoJCQkJIHN0cnVjdCByaXZhZmJfaW5mbyAqbmV3X25vZGUp
Ow0KDQoNCg0KDQovKiBrZXJuZWwgaW50ZXJmYWNlICovDQpzdGF0aWMgc3Ry
dWN0IGZiX29wcyByaXZhX2ZiX29wcyA9DQp7DQoJcml2YWZiX29wZW4sDQoJ
cml2YWZiX3JlbGVhc2UsDQoJcml2YWZiX2dldF9maXgsDQoJcml2YWZiX2dl
dF92YXIsDQoJcml2YWZiX3NldF92YXIsDQoJcml2YWZiX2dldF9jbWFwLA0K
CXJpdmFmYl9zZXRfY21hcCwNCglyaXZhZmJfcGFuX2Rpc3BsYXksDQoJcml2
YWZiX2lvY3RsDQp9Ow0KDQoNCg0KDQovKiBmcm9tIEdHSSAqLw0Kc3RydWN0
IHJpdmFfcmVncyByZWdfdGVtcGxhdGUgPQ0Kew0KCXsgMHgwMCwgMHgwMSwg
MHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgLyogQVRUUiAq
Lw0KCSAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgw
RSwgMHgwRiwNCgkgIDB4NDEsIDB4MDEsIDB4MEYsIDB4MTMsIDB4MDAgfSwN
Cgl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIC8qIENSVCAgKi8NCgkgIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQoJICAweDAwLCAweDAwLCAweDAw
LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweEUzLCAvKiAweDEwICovDQoJ
ICAweEZGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eDAwLA0KCSAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgLyogMHgyMCAqLw0KCSAgMHg0MCwgMHgwMCwgMHgwMCwg
MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCgkgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8qIDB4MzAg
Ki8NCgkgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsDQogICAgICAgICAgMHgwMCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHg0MCAqLw0KCX0sDQoJeyAw
eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDBG
LCAvKiBHUkEgICovDQoJICAweEZGIH0sDQoJeyAweDAzLCAweDAxLCAweDBG
LCAweDAwLCAweDBFfSwgICAgICAgICAgICAgICAgICAvKiBTRVEgICovDQoJ
MHhFQgkJCQkJCSAgLyogTUlTQyAqLw0KfTsNCg0KDQoNCi8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0gZ2VuZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KDQovKioNCiAqIHJpdmFfc2V0X2Rp
c3Bzdw0KICogQHJpdmFpbmZvOiBwb2ludGVyIHRvIGludGVybmFsIGRyaXZl
ciBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gUml2YSBjYXJkDQogKg0KICogREVTQ1JJ
UFRJT046DQogKiBTZXRzIHVwIGNvbnNvbGUgTG93IGxldmVsIG9wZXJhdGlv
bnMgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50PyBjb2xvciBkZXB0aA0KICog
b2YgdGhlIGRpc3BsYXkNCiAqLw0KDQp2b2lkIHJpdmFfc2V0X2Rpc3BzdyAo
c3RydWN0IHJpdmFmYl9pbmZvICpyaW5mbykNCnsNCglzdHJ1Y3QgZGlzcGxh
eSAqZGlzcCA9ICZyaW5mby0+ZGlzcDsNCg0KCURQUklOVEsgKCJFTlRFUlxu
Iik7DQoNCglhc3NlcnQgKHJpbmZvICE9IE5VTEwpOw0KDQoJZGlzcC0+ZGlz
cHN3X2RhdGEgPSBOVUxMOw0KDQoJc3dpdGNoIChkaXNwLT52YXIuYml0c19w
ZXJfcGl4ZWwpIHsNCiNpZmRlZiBGQkNPTl9IQVNfTUZCDQoJY2FzZSAxOg0K
CQlkaXNwLT5kaXNwc3cgPSAmZmJjb25fbWZiOw0KCQlicmVhazsNCiNlbmRp
Zg0KI2lmZGVmIEZCQ09OX0hBU19DRkI0DQoJY2FzZSA0Og0KCQlkaXNwLT5k
aXNwc3cgPSAmZmJjb25fY2ZiNDsNCgkJYnJlYWs7DQojZW5kaWYNCiNpZmRl
ZiBGQkNPTl9IQVNfQ0ZCOA0KCWNhc2UgODoNCgkJZGlzcC0+ZGlzcHN3ID0g
JmZiY29uX2NmYjg7DQoJCWJyZWFrOw0KI2VuZGlmDQojaWZkZWYgRkJDT05f
SEFTX0NGQjE2DQoJY2FzZSAxNToNCgljYXNlIDE2Og0KCQlkaXNwLT5kaXNw
c3cgPSAmZmJjb25fY2ZiMTY7DQoJCWRpc3AtPmRpc3Bzd19kYXRhID0gJnJp
bmZvLT5jb25fY21hcC5jZmIxNjsNCgkJYnJlYWs7DQojZW5kaWYNCiNpZmRl
ZiBGQkNPTl9IQVNfQ0ZCMjQNCgljYXNlIDI0Og0KCQlkaXNwLT5kaXNwc3cg
PSAmZmJjb25fY2ZiMjQ7DQoJCWRpc3AtPmRpc3Bzd19kYXRhID0gcmluZm8t
PmNvbl9jbWFwLmNmYjI0Ow0KCQlicmVhazsNCiNlbmRpZg0KI2lmZGVmIEZC
Q09OX0hBU19DRkIzMg0KCWNhc2UgMzI6DQoJCWRpc3AtPmRpc3BzdyA9ICZm
YmNvbl9jZmIzMjsNCgkJZGlzcC0+ZGlzcHN3X2RhdGEgPSByaW5mby0+Y29u
X2NtYXAuY2ZiMzI7DQoJCWJyZWFrOw0KI2VuZGlmDQoJZGVmYXVsdDoNCgkJ
RFBSSU5USyAoIlNldHRpbmcgZmJjb25fZHVtbXkgcmVuZGVyZXJcbiIpOw0K
CQlkaXNwLT5kaXNwc3cgPSAmZmJjb25fZHVtbXk7DQoJfQ0KDQoJRFBSSU5U
SyAoIkVYSVRcbiIpOw0KfQ0KDQoNCg0KDQpzdGF0aWMgaW50IHJpdmFfaW5p
dF9kaXNwX3ZhciAoc3RydWN0IHJpdmFmYl9pbmZvICpyaW5mbykNCnsNCg0K
I3dhcm5pbmcgRklYTUU6IHVzZSBiZXR0ZXIgd2F5IHRvIHNldCBkaXNwLT52
YXIgKHN0cnVjdCBmb3IgbW9kZXM/KQ0KCWNoYXIgKmRlZm1vZGVfb3B0aW9u
ID0gIjY0MHg0ODAtOEA2MCI7DQoJc3RydWN0IGZiX3ZpZGVvbW9kZSBkZWZh
dWx0X21vZGUgPSB7DQoJCS8qIDY0MHg0ODAgQCA2MCBIeiwgMzEuNSBrSHog
Ki8NCgkJTlVMTCwgNjAsIDY0MCwgNDgwLCAzOTcyMSwgNDAsIDI0LCAzMiwg
MTEsIDk2LCAyLA0KCQkwLCBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEDQoJfTsN
CglyZXR1cm4gMDsNCn0NCg0KDQoNCg0Kc3RhdGljIGludCByaXZhX2luaXRf
ZGlzcCAoc3RydWN0IHJpdmFmYl9pbmZvICpyaW5mbykNCnsNCglzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbzsNCglzdHJ1Y3QgZGlzcGxheSAqZGlzcDsNCglzdHJ1
Y3QgZmJfY21hcCBjbWFwOw0KDQoJRFBSSU5USygiRU5URVJcbiIpOw0KDQoJ
YXNzZXJ0IChyaW5mbyAhPSBOVUxMKTsNCg0KCWluZm8gPSAmcmluZm8tPmlu
Zm87DQoJZGlzcCA9ICZyaW5mby0+ZGlzcDsNCg0KCWluZm8tPmRpc3AgPSBk
aXNwOw0KDQoJaWYgKChyaXZhX2luaXRfZGlzcF92YXIgKHJpbmZvKSkgPCAw
KSB7DQoJCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAtMVxuIik7DQoJCXJl
dHVybiAtMTsNCgl9DQoNCiN3YXJuaW5nIEZJWE1FOiBhc3N1cmUgdGhhdCBk
aXNwLT5jbWFwIGlzIGNvbXBsZXRlbHkgZmlsbGVkIG91dA0KDQoJcmluZm8t
PmRlZl9wYXIuc3RhdGUgPSByZWdfdGVtcGxhdGU7DQoJcmluZm8tPmRlZl9w
YXIudmlzdWFsID0gRkJfVklTVUFMX0RJUkVDVENPTE9SOw0KCXJpbmZvLT5k
ZWZfcGFyLmRlcHRoID0gODsNCg0KCWRpc3AtPnNjcmVlbl9iYXNlID0gcmlu
Zm8tPmZiX2Jhc2U7DQoJZGlzcC0+dmlzdWFsID0gRkJfVklTVUFMX0RJUkVD
VENPTE9SOw0KLy8JZGlzcC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVM
UzsNCglkaXNwLT50eXBlID0gRkJfVFlQRV9URVhUOw0KCWRpc3AtPnR5cGVf
YXV4ID0gMDsNCglkaXNwLT55cGFuc3RlcCA9IDE7DQoJZGlzcC0+eXdyYXBz
dGVwID0gMDsNCglkaXNwLT5uZXh0X2xpbmUgPSBkaXNwLT5saW5lX2xlbmd0
aCA9DQoJCShkaXNwLT52YXIueHJlc192aXJ0dWFsICogZGlzcC0+dmFyLmJp
dHNfcGVyX3BpeGVsKSA+PiAzOw0KCWRpc3AtPmNhbl9zb2Z0X2JsYW5rID0g
MTsNCglkaXNwLT5pbnZlcnNlID0gMDsNCg0KCXJpdmFfc2V0X2Rpc3Bzdyhy
aW5mbyk7DQoNCglyaW5mby0+Y3VycmNvbl9kaXNwbGF5ID0gZGlzcDsNCg0K
CURQUklOVEsoIkVYSVQsIHJldHVybmluZyAwXG4iKTsNCg0KCXJldHVybiAw
Ow0KDQp9DQoNCg0KDQpzdGF0aWMgaW50IHJpdmFfc2V0X2ZiaW5mbyAoc3Ry
dWN0IHJpdmFmYl9pbmZvICpyaW5mbykNCnsNCglzdHJ1Y3QgZmJfaW5mbyAq
aW5mbzsNCg0KCWFzc2VydCAocmluZm8gIT0gTlVMTCk7DQoNCglpZiAocml2
YV9pbml0X2Rpc3AgKHJpbmZvKSA8IDApDQoJCXJldHVybiAtMTsNCg0KCWlu
Zm8gPSAmcmluZm8tPmluZm87DQoNCglzdHJjcHkgKGluZm8tPm1vZGVuYW1l
LCByaW5mby0+ZHJ2cl9uYW1lKTsNCglpbmZvLT5ub2RlID0gLTE7DQoJaW5m
by0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOw0KCWluZm8tPmZib3Bz
ID0gJnJpdmFfZmJfb3BzOw0KDQojd2FybmluZyBGSVhNRTogc2V0IG1vbnNw
ZWNzIHRvIHdoYXQ/Pz8NCg0KCWluZm8tPmRpc3BsYXlfZmcgPSBOVUxMOyAv
KiBGSVhNRTogY29ycmVjdD8gKi8NCglpbmZvLT5mb250bmFtZVswXSA9IDA7
IC8qIHVzZSBkZWZhdWx0IGZvbnQgKi8NCg0KCWluZm8tPmNoYW5nZXZhciA9
IE5VTEw7IC8qIEZJWE1FOiBuZWVkZWQ/ICovDQoJaW5mby0+c3dpdGNoX2Nv
biA9IHJpdmFmYl9zd2l0Y2g7DQoJaW5mby0+dXBkYXRldmFyID0gTlVMTDsg
LyogRklYTUU/ICovDQoJaW5mby0+YmxhbmsgPSByaXZhZmJfYmxhbms7DQoN
CglyZXR1cm4gMDsNCn0NCg0KDQoNCg0KLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gUENJIGJ1cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLw0KDQoNCg0KLyoqDQogKiByaXZhX3BjaV9yZWdpb25fc2l6ZQ0K
ICogQHBkOiBwb2ludGVyIHRvIFBDSSBkZXZpY2UgdG8gYmUgY29uZmlndXJl
ZA0KICoNCiAqIERFU0NSSVBUSU9OOg0KICogT2J0YWlucyBmcm9tIHRoZSBQ
Q0kgYnVzIHRoZSBzaXplIG9mIHRoZSBhZGRyZXNzIHNwYWNlIGFsbG9jYXRl
ZCB0bw0KICogdGhlIGdpdmVuIGNhcmQncyBiYXNlIGFkZHJlc3MgemVybyBy
ZWdpb24uDQogKi8NCg0Kc3RhdGljDQp1MzIgcml2YV9wY2lfcmVnaW9uX3Np
emUgKHN0cnVjdCBwY2lfZGV2ICpwZCwgdTggd2hlcmUpDQp7DQoJdTMyIHRt
cCwgcmVnaW9uX3NpemVfbWFzaywgaW9fc3RhdHVzOw0KCXVuc2lnbmVkIHN0
YXR1c19jaGFuZ2UgPSAwOw0KDQoJYXNzZXJ0IChwZCAhPSBOVUxMKTsNCg0K
CWlvX3N0YXR1cyA9IHJpdmFfcGNpX2lvX3N0YXR1cyAocGQpOw0KDQoJaWYg
KChpb19zdGF0dXMgJiBQQ0lfQ09NTUFORF9JTykgfHwNCgkgICAgKGlvX3N0
YXR1cyAmIFBDSV9DT01NQU5EX01FTU9SWSkpIHsNCgkJcml2YV9wY2lfaW9f
ZW5hYmxlIChwZCwgMCwgMCk7DQoJCXN0YXR1c19jaGFuZ2UgPSAxOw0KCX0N
Cg0KCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAocGQsIHdoZXJlLCAmdG1wKTsN
CglwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChwZCwgd2hlcmUsIDB4RkZGRkZG
RkYpOw0KCXBjaV9yZWFkX2NvbmZpZ19kd29yZCAocGQsIHdoZXJlLCAmcmVn
aW9uX3NpemVfbWFzayk7DQoJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAocGQs
IHdoZXJlLCB0bXApOw0KDQoJaWYgKHN0YXR1c19jaGFuZ2UpDQoJCXJpdmFf
cGNpX2lvX2VuYWJsZSAocGQsIGlvX3N0YXR1cyAmIFBDSV9DT01NQU5EX0lP
LA0KCQkJCSAgaW9fc3RhdHVzICYgUENJX0NPTU1BTkRfTUVNT1JZKTsNCg0K
CXJlZ2lvbl9zaXplX21hc2sgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFT
SzsNCg0KCXJldHVybiAofnJlZ2lvbl9zaXplX21hc2spICsgMTsNCn0NCg0K
DQoNCg0KLyoqDQogKiByaXZhX3BjaV9pb19lbmFibGUNCiAqIEBwZDogcG9p
bnRlciB0byBQQ0kgZGV2aWNlIHRvIGJlIGNvbmZpZ3VyZWQNCiAqIEBlbmFi
bGVfaW86IG5vbi16ZXJvIHRvIGVuYWJsZSBJL08gcG9ydHMsIHplcm8gdG8g
ZGlzYWJsZQ0KICogQGVuYWJsZV9tbWlvOiBub24temVybyB0byBlbmFibGUg
TU1JTyByZWdpb24sIHplcm8gdG8gZGlzYWJsZQ0KICoNCiAqIERFU0NSSVBU
SU9OOg0KICogRW5hYmxlIGFuZCBkaXNhYmxlIFJpdmEgUENJIE1NSU8gcmVn
aW9uIGFuZCBWR0EgSS9PIHBvcnRzLCBiYXNlZCBvbiB0aGUNCiAqIHZhbHVl
cyBnaXZlbiB0byBAZW5hYmxlX2lvIGFuZCBAZW5hYmxlX21taW8uDQogKi8N
Cg0Kc3RhdGljDQp2b2lkIHJpdmFfcGNpX2lvX2VuYWJsZSAoc3RydWN0IHBj
aV9kZXYgKnBkLCBpbnQgZW5hYmxlX2lvLCBpbnQgZW5hYmxlX21taW8pDQp7
DQoJdTMyIHRtcDsNCg0KCWFzc2VydCAocGQgIT0gTlVMTCk7DQoNCglwY2lf
cmVhZF9jb25maWdfZHdvcmQgKHBkLCBQQ0lfQ09NTUFORCwgJnRtcCk7DQoN
CglpZiAoKGVuYWJsZV9pbykgJiYgKCEodG1wICYgUENJX0NPTU1BTkRfSU8p
KSkNCgkJdG1wIHw9IFBDSV9DT01NQU5EX0lPOw0KCWVsc2UgaWYgKCghZW5h
YmxlX2lvKSAmJiAodG1wICYgUENJX0NPTU1BTkRfSU8pKQ0KCQl0bXAgXj0g
UENJX0NPTU1BTkRfSU87DQoNCglpZiAoKGVuYWJsZV9tbWlvKSAmJiAoISh0
bXAgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkNCgkJdG1wIHw9IFBDSV9DT01N
QU5EX01FTU9SWTsNCgllbHNlIGlmICgoIWVuYWJsZV9tbWlvKSAmJiAodG1w
ICYgUENJX0NPTU1BTkRfTUVNT1JZKSkNCgkJdG1wIF49IFBDSV9DT01NQU5E
X01FTU9SWTsNCg0KCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKHBkLCBQQ0lf
Q09NTUFORCwgdG1wKTsNCn0NCg0KDQoNCi8qKg0KICogcml2YV9wY2lfaW9f
c3RhdHVzDQogKiBAcGQ6IHBvaW50ZXIgdG8gUENJIGRldmljZSB0byBiZSBj
b25maWd1cmVkDQogKg0KICogREVTQ1JJUFRJT046DQogKiBPYnRhaW5zIHRo
ZSBQQ0kgcmVnaXN0ZXIgY29udGFpbmluZyBiaXRzIGluZGljYXRpbmcgd2hl
dGhlciB0aGUgTU1JTw0KICogcmVnaW9uICglUENJX0NPTU1BTkRfTUVNT1JZ
KSwgYW5kIHRoZSBWR0EgSS9PIHBvcnRzICglUENJX0NPTU1BTkRfSU8pLA0K
ICogYXJlIGVuYWJsZWQgb3Igbm90Lg0KICovDQoNCnN0YXRpYw0KdTMyIHJp
dmFfcGNpX2lvX3N0YXR1cyAoc3RydWN0IHBjaV9kZXYgKnBkKQ0Kew0KCXUz
MiB0bXA7DQoNCglhc3NlcnQgKHBkICE9IE5VTEwpOw0KDQoJcGNpX3JlYWRf
Y29uZmlnX2R3b3JkIChwZCwgUENJX0NPTU1BTkQsICZ0bXApOw0KCXBjaV93
cml0ZV9jb25maWdfZHdvcmQgKHBkLCBQQ0lfQ09NTUFORCwgdG1wKTsJLyog
RklYTUU6IG5lY2Vzc2FyeT8gKi8NCg0KCXJldHVybiB0bXA7DQp9DQoNCg0K
LyoqDQogKiByaXZhX3BjaV9pb21hcA0KICogQG52Og0KICoNCiAqIERFU0NS
SVBUSU9OOg0KICovDQoNCnN0YXRpYw0Kdm9pZCByaXZhX3BjaV9yZWdpb25f
aW5pdCAoc3RydWN0IHBjaV9kZXYgKnBkLCBzdHJ1Y3Qgcml2YWZiX2luZm8g
KnJpbmZvKQ0Kew0KCWFzc2VydCAocmluZm8gIT0gTlVMTCk7DQoJYXNzZXJ0
IChwZCAhPSBOVUxMKTsNCg0KCXJpbmZvLT5wZCA9IHBkOw0KCXJpbmZvLT5i
YXNlMF9yZWdpb25fc2l6ZSA9IHJpdmFfcGNpX3JlZ2lvbl9zaXplIChwZCwg
UENJX0JBU0VfQUREUkVTU18wKTsNCglhc3NlcnQocmluZm8tPmJhc2UwX3Jl
Z2lvbl9zaXplID49IDB4MDA4MDAwMDApOyAvKiBmcm9tIEdHSSAqLw0KCXJp
bmZvLT5iYXNlMV9yZWdpb25fc2l6ZSA9IHJpdmFfcGNpX3JlZ2lvbl9zaXpl
IChwZCwgUENJX0JBU0VfQUREUkVTU18xKTsNCglhc3NlcnQocmluZm8tPmJh
c2UwX3JlZ2lvbl9zaXplID49IDB4MDEwMDAwMDApOyAvKiBmcm9tIEdHSSAq
Lw0KDQoJcmluZm8tPmN0cmxfYmFzZV9waHlzID0NCgkJcmluZm8tPnBkLT5y
ZXNvdXJjZVswXS5zdGFydCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7
DQoJcmluZm8tPmZiX2Jhc2VfcGh5cyA9DQoJCXJpbmZvLT5wZC0+cmVzb3Vy
Y2VbMV0uc3RhcnQgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOw0KDQoJ
cmluZm8tPmN0cmxfYmFzZSA9IGlvcmVtYXAgKHJpbmZvLT5jdHJsX2Jhc2Vf
cGh5cywgcmluZm8tPmJhc2UwX3JlZ2lvbl9zaXplKTsNCglhc3NlcnQgKHJp
bmZvLT5jdHJsX2Jhc2UgIT0gTlVMTCk7DQoJcmluZm8tPmZiX2Jhc2UgPSBp
b3JlbWFwIChyaW5mby0+ZmJfYmFzZV9waHlzLCByaW5mby0+YmFzZTFfcmVn
aW9uX3NpemUpOw0KCWFzc2VydCAocmluZm8tPmZiX2Jhc2UgIT0gTlVMTCk7
DQoNCiAgICAgICAgcmluZm8tPnJpdmEuRW5hYmxlSVJRID0gMDsNCiAgICAg
ICAgcmluZm8tPnJpdmEuSU8gICAgICA9IChpbmIoMHgzQ0MpICYgMHgwMSkg
PyAweDNEMCA6IDB4M0IwOw0KICAgICAgICByaW5mby0+cml2YS5QUkFNREFD
ID0gKHVuc2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDY4MDAwMCk7
DQogICAgICAgIHJpbmZvLT5yaXZhLlBGQiAgICAgPSAodW5zaWduZWQgKiko
cmluZm8tPmN0cmxfYmFzZSsweDAwMTAwMDAwKTsNCiAgICAgICAgcmluZm8t
PnJpdmEuUEZJRk8gICA9ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9iYXNl
KzB4MDAwMDIwMDApOw0KICAgICAgICByaW5mby0+cml2YS5QR1JBUEggID0g
KHVuc2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDQwMDAwMCk7DQog
ICAgICAgIHJpbmZvLT5yaXZhLlBFWFRERVYgPSAodW5zaWduZWQgKikocmlu
Zm8tPmN0cmxfYmFzZSsweDAwMTAxMDAwKTsNCiAgICAgICAgcmluZm8tPnJp
dmEuUFRJTUVSICA9ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9iYXNlKzB4
MDAwMDkwMDApOw0KICAgICAgICByaW5mby0+cml2YS5QTUMgICAgID0gKHVu
c2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDAwMDAwMCk7DQogICAg
ICAgIHJpbmZvLT5yaXZhLkZJRk8gICAgPSAodW5zaWduZWQgKikocmluZm8t
PmN0cmxfYmFzZSsweDAwODAwMDAwKTsNCg0KICAgICAgICBzd2l0Y2ggKHJp
bmZvLT5yaXZhLkFyY2hpdGVjdHVyZSkNCiAgICAgICAgew0KICAgICAgICBj
YXNlIDM6DQogICAgICAgICAgICAgICAgcmluZm8tPnJpdmEuUFJBTUlOICA9
ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9iYXNlKzB4MDBDMDAwMDApOw0K
ICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDQ6DQoJY2Fz
ZSA1Og0KICAgICAgICAgICAgICAgIHJpbmZvLT5yaXZhLlBDUlRDICAgPSAo
dW5zaWduZWQgKikocmluZm8tPmN0cmxfYmFzZSsweDAwNjAwMDAwKTsNCiAg
ICAgICAgICAgICAgICByaW5mby0+cml2YS5QUkFNSU4gID0gKHVuc2lnbmVk
ICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDcxMDAwMCk7DQogICAgICAgICAg
ICAgICAgYnJlYWs7DQogICAgICAgIH0NCn0NCg0KDQoNCi8qKg0KICogcml2
YV9wY2lfaW91bm1hcA0KICogQHJpbmZvOg0KICoNCiAqIERFU0NSSVBUSU9O
Og0KICovDQoNCnN0YXRpYw0Kdm9pZCByaXZhX3BjaV9pb3VubWFwIChzdHJ1
Y3Qgcml2YWZiX2luZm8gKnJpbmZvKQ0Kew0KCWFzc2VydCAocmluZm8gIT0g
TlVMTCk7DQoJYXNzZXJ0IChyaW5mby0+Y3RybF9iYXNlX3BoeXMgIT0gMHgw
MDAwMDAwMCk7DQoJYXNzZXJ0IChyaW5mby0+Y3RybF9iYXNlICE9IE5VTEwp
Ow0KCWFzc2VydCAocmluZm8tPmZiX2Jhc2VfcGh5cyAhPSAweDAwMDAwMDAw
KTsNCglhc3NlcnQgKHJpbmZvLT5mYl9iYXNlICE9IE5VTEwpOw0KDQoJaW91
bm1hcCAocmluZm8tPmN0cmxfYmFzZSk7DQoJaW91bm1hcCAocmluZm8tPmZi
X2Jhc2UpOw0KfQ0KDQoNCg0KDQoNCnN0YXRpYw0KaW50IHJpdmFfcGNpX3Jl
Z2lzdGVyIChzdHJ1Y3QgcGNpX2RldiAqcGQsDQoJCSAgICAgICBjb25zdCBz
dHJ1Y3Qgcml2YV9jaGlwX2luZm8gKnJjaSkNCnsNCglzdHJ1Y3Qgcml2YWZi
X2luZm8gKnJpbmZvOw0KCXVuc2lnbmVkIGNoYXIgdG1wOw0KDQoJYXNzZXJ0
IChwZCAhPSBOVUxMKTsNCglhc3NlcnQgKHJjaSAhPSBOVUxMKTsNCg0KCXJp
bmZvID0ga21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qgcml2YWZiX2luZm8pLCBH
RlBfS0VSTkVMKTsNCglhc3NlcnQgKHJpbmZvICE9IE5VTEwpOw0KCW1lbXNl
dCAocmluZm8sIDAsIHNpemVvZiAoc3RydWN0IHJpdmFmYl9pbmZvKSk7DQoN
CiNpZiAwDQoJcml2YV9wY2lfcmVnaW9uX2luaXQgKHBkLCByaW5mbyk7DQoJ
YXNzZXJ0IChyaW5mby0+cGQgIT0gTlVMTCk7DQojZW5kaWYNCg0KCXJpbmZv
LT5kcnZyX25hbWUgPSByY2ktPm5hbWU7DQoJcmluZm8tPnJpdmEuQXJjaGl0
ZWN0dXJlID0gcmNpLT5hcmNoX3JldjsNCg0KLy8Jcml2YV9wY2lfcmVnaW9u
X2luaXQgKHBkLCAmcmluZm8pOw0KCXJpbmZvLT5wZCA9IHBkOw0KCXJpbmZv
LT5iYXNlMF9yZWdpb25fc2l6ZSA9IHJpdmFfcGNpX3JlZ2lvbl9zaXplIChw
ZCwgUENJX0JBU0VfQUREUkVTU18wKTsNCglhc3NlcnQocmluZm8tPmJhc2Uw
X3JlZ2lvbl9zaXplID49IDB4MDA4MDAwMDApOyAvKiBmcm9tIEdHSSAqLw0K
CXJpbmZvLT5iYXNlMV9yZWdpb25fc2l6ZSA9IHJpdmFfcGNpX3JlZ2lvbl9z
aXplIChwZCwgUENJX0JBU0VfQUREUkVTU18xKTsNCglhc3NlcnQocmluZm8t
PmJhc2UwX3JlZ2lvbl9zaXplID49IDB4MDEwMDAwMDApOyAvKiBmcm9tIEdH
SSAqLw0KDQoJcmluZm8tPmN0cmxfYmFzZV9waHlzID0NCgkJcmluZm8tPnBk
LT5yZXNvdXJjZVswXS5zdGFydCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01B
U0s7DQoJcmluZm8tPmZiX2Jhc2VfcGh5cyA9DQoJCXJpbmZvLT5wZC0+cmVz
b3VyY2VbMV0uc3RhcnQgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOw0K
DQoJcmluZm8tPmN0cmxfYmFzZSA9IGlvcmVtYXAgKHJpbmZvLT5jdHJsX2Jh
c2VfcGh5cywgcmluZm8tPmJhc2UwX3JlZ2lvbl9zaXplKTsNCglhc3NlcnQg
KHJpbmZvLT5jdHJsX2Jhc2UgIT0gTlVMTCk7DQoJcmluZm8tPmZiX2Jhc2Ug
PSBpb3JlbWFwIChyaW5mby0+ZmJfYmFzZV9waHlzLCByaW5mby0+YmFzZTFf
cmVnaW9uX3NpemUpOw0KCWFzc2VydCAocmluZm8tPmZiX2Jhc2UgIT0gTlVM
TCk7DQoNCiAgICAgICAgcmluZm8tPnJpdmEuRW5hYmxlSVJRID0gMDsNCiAg
ICAgICAgcmluZm8tPnJpdmEuSU8gICAgICA9IChpbmIoMHgzQ0MpICYgMHgw
MSkgPyAweDNEMCA6IDB4M0IwOw0KICAgICAgICByaW5mby0+cml2YS5QUkFN
REFDID0gKHVuc2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDY4MDAw
MCk7DQogICAgICAgIHJpbmZvLT5yaXZhLlBGQiAgICAgPSAodW5zaWduZWQg
KikocmluZm8tPmN0cmxfYmFzZSsweDAwMTAwMDAwKTsNCiAgICAgICAgcmlu
Zm8tPnJpdmEuUEZJRk8gICA9ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9i
YXNlKzB4MDAwMDIwMDApOw0KICAgICAgICByaW5mby0+cml2YS5QR1JBUEgg
ID0gKHVuc2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDQwMDAwMCk7
DQogICAgICAgIHJpbmZvLT5yaXZhLlBFWFRERVYgPSAodW5zaWduZWQgKiko
cmluZm8tPmN0cmxfYmFzZSsweDAwMTAxMDAwKTsNCiAgICAgICAgcmluZm8t
PnJpdmEuUFRJTUVSICA9ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9iYXNl
KzB4MDAwMDkwMDApOw0KICAgICAgICByaW5mby0+cml2YS5QTUMgICAgID0g
KHVuc2lnbmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDAwMDAwMCk7DQog
ICAgICAgIHJpbmZvLT5yaXZhLkZJRk8gICAgPSAodW5zaWduZWQgKikocmlu
Zm8tPmN0cmxfYmFzZSsweDAwODAwMDAwKTsNCg0KICAgICAgICBzd2l0Y2gg
KHJpbmZvLT5yaXZhLkFyY2hpdGVjdHVyZSkNCiAgICAgICAgew0KICAgICAg
ICBjYXNlIDM6DQogICAgICAgICAgICAgICAgcmluZm8tPnJpdmEuUFJBTUlO
ICA9ICh1bnNpZ25lZCAqKShyaW5mby0+Y3RybF9iYXNlKzB4MDBDMDAwMDAp
Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDQ6DQoJ
Y2FzZSA1Og0KICAgICAgICAgICAgICAgIHJpbmZvLT5yaXZhLlBDUlRDICAg
PSAodW5zaWduZWQgKikocmluZm8tPmN0cmxfYmFzZSsweDAwNjAwMDAwKTsN
CiAgICAgICAgICAgICAgICByaW5mby0+cml2YS5QUkFNSU4gID0gKHVuc2ln
bmVkICopKHJpbmZvLT5jdHJsX2Jhc2UrMHgwMDcxMDAwMCk7DQogICAgICAg
ICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAgICAgICBSaXZhR2V0
Q29uZmlnKCZyaW5mby0+cml2YSk7DQoNCgkvL2JhY2sgdG8gbm9ybWFsDQoN
Cglhc3NlcnQgKHJpbmZvLT5wZCAhPSBOVUxMKTsNCg0KCS8vIHVubG9jayBp
bw0KCW91dGIoKHVuc2lnbmVkICopKHJpbmZvLT5mYl9iYXNlICsgNCksIDB4
MTEpOw0KCXRtcCA9IGluYihyaW5mby0+ZmJfYmFzZSArIDUpOw0KCW91dGIo
KHVuc2lnbmVkICopcmluZm8tPmZiX2Jhc2UgKyA1LCB0bXAgJiAweDdGKTsN
CglvdXRiKHJpbmZvLT5yaXZhLkxvY2tVbmxvY2tJTywgcmluZm8tPnJpdmEu
TG9ja1VubG9ja0luZGV4KTsNCglvdXRiKHJpbmZvLT5yaXZhLkxvY2tVbmxv
Y2tJTyArIDEsIDB4NTcpOw0KDQoJcmluZm8tPmluaXRpYWxfc3RhdGUgPSBy
ZWdfdGVtcGxhdGU7DQoJcml2YV9zYXZlX3N0YXRlIChyaW5mbywgJnJpbmZv
LT5pbml0aWFsX3N0YXRlKTsNCg0KICAgICAgICByaW5mby0+cmFtX2Ftb3Vu
dCA9IHJpbmZvLT5yaXZhLlJhbUFtb3VudEtCeXRlcyAqIDEwMjQ7DQoJcmlu
Zm8tPmRjbGtfbWF4ID0gcmluZm8tPnJpdmEuTWF4VkNsb2NrRnJlcUtIeiAq
IDEwMDA7DQoNCglyaXZhX3NldF9mYmluZm8gKHJpbmZvKTsNCg0KCXJpdmFf
bG9hZF92aWRlb19tb2RlIChyaW5mbywgJnJpbmZvLT5kaXNwLnZhcik7DQoN
CglpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIgKChzdHJ1Y3QgZmJfaW5mbyAq
KSByaW5mbykgPCAwKSB7DQoJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgcmVn
aXN0ZXJpbmcgcml2YSBmcmFtZWJ1ZmZlclxuIik7DQoJCWtmcmVlIChyaW5m
byk7DQoJCXJldHVybiAtMTsNCgl9DQoNCglyaXZhX2JvYXJkcyA9IHJpdmFf
Ym9hcmRfbGlzdF9hZGQgKHJpdmFfYm9hcmRzLCByaW5mbyk7DQoNCglwcmlu
dGsoIlBDSSBSaXZhIE5WJWQgZnJhbWVidWZmZXIgdmVyICVzICglcywgJWRN
QiBAIDB4JWxYKVxuIiwNCgkgICAgICAgcmluZm8tPnJpdmEuQXJjaGl0ZWN0
dXJlLA0KCSAgICAgICBSSVZBRkJfVkVSU0lPTiwNCgkgICAgICAgcmluZm8t
PmRydnJfbmFtZSwNCgkgICAgICAgcmluZm8tPnJhbV9hbW91bnQgLyAoMTAy
NCAqIDEwMjQpLA0KCSAgICAgICByaW5mby0+ZmJfYmFzZV9waHlzKTsNCg0K
CXJldHVybiAwOw0KfQ0KDQoNCg0KDQpzdGF0aWMNCmludCByaXZhX3BjaV9y
ZWdpc3Rlcl9kZXZpY2VzICh2b2lkKQ0Kew0KCXN0cnVjdCBwY2lfZGV2ICpw
ZDsNCgljb25zdCBzdHJ1Y3Qgcml2YV9jaGlwX2luZm8gKm5jaSA9ICZyaXZh
X3BjaV9wcm9iZV9saXN0WzBdOw0KDQoJYXNzZXJ0IChuY2kgIT0gTlVMTCk7
DQoJd2hpbGUgKG5jaS0+bmFtZSAhPSBOVUxMKSB7DQoJCXBkID0gcGNpX2Zp
bmRfZGV2aWNlIChuY2ktPnZlbmRvciwgbmNpLT5kZXZpY2UsIE5VTEwpOw0K
CQl3aGlsZSAocGQgIT0gTlVMTCkgew0KCQkJaWYgKHJpdmFfcGNpX3JlZ2lz
dGVyIChwZCwgbmNpKSA8IDApDQoJCQkJcmV0dXJuIC0xOw0KDQoJCQlwZCA9
IHBjaV9maW5kX2RldmljZSAobmNpLT52ZW5kb3IsIG5jaS0+ZGV2aWNlLCBw
ZCk7DQoJCX0NCg0KCQluY2krKzsNCgl9DQoNCglyZXR1cm4gMDsNCn0NCg0K
DQoNCi8qIC0tLS0tLS0tLS0tLSBIYXJkd2FyZSBJbmRlcGVuZGVudCBGdW5j
dGlvbnMgLS0tLS0tLS0tLS0tICovDQoNCg0KICAgIC8qDQogICAgICogIElu
aXRpYWxpemF0aW9uDQogICAgICovDQoNCmludCBfX2luaXQgcml2YWZiX2lu
aXQgKHZvaWQpDQp7DQoJaWYgKHBjaV9wcmVzZW50KCkgJiYgcml2YV9wY2lf
cmVnaXN0ZXJfZGV2aWNlcyAoKSA8IDApDQoJICAgIHJldHVybjsNCg0KCS8q
IHVuY29tbWVudCB0aGlzIGlmIHlvdXIgZHJpdmVyIGNhbm5vdCBiZSB1bmxv
YWRlZCAqLw0KCU1PRF9JTkNfVVNFX0NPVU5UOw0KI3dhcm5pbmcgRklYTUU6
IG1vZHVsZSBzaG91bGQgYmUgdW5sb2FkLWFibGUNCn0NCg0KDQogICAgLyoN
CiAgICAgKiAgQ2xlYW51cA0KICAgICAqLw0KDQp2b2lkIHJpdmFmYl9jbGVh
bnVwIChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykNCnsNCiN3YXJuaW5nIEZJWE1F
OiBpcyB0aGlzIGFsbCB3ZSBuZWVkIHRvIGRvPw0KDQoJc3RydWN0IHJpdmFm
Yl9pbmZvICp0bXAsICpib2FyZCA9IHJpdmFfYm9hcmRzOw0KDQoJd2hpbGUg
KGJvYXJkICE9IE5VTEwpIHsNCgkJcml2YV9sb2FkX3N0YXRlIChib2FyZCwg
JmJvYXJkLT5pbml0aWFsX3N0YXRlKTsNCgkJcml2YV9wY2lfaW91bm1hcCAo
Ym9hcmQpOw0KDQoJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIgKChzdHJ1Y3Qg
ZmJfaW5mbyAqKSBib2FyZCk7DQoNCgkJdG1wID0gYm9hcmQ7DQoJCWJvYXJk
ID0gYm9hcmQtPm5leHQ7DQoNCgkJa2ZyZWVfcyAodG1wLCBzaXplb2YgKHN0
cnVjdCByaXZhZmJfaW5mbykpOw0KCX0NCg0KCSh2b2lkKSBpbmZvOyAvKiB1
bnVzZWQgZnVuY3Rpb24gYXJnICovDQp9DQoNCiAgICAvKg0KICAgICAqICBT
ZXR1cA0KICAgICAqLw0KDQppbnQgX19pbml0IHJpdmFmYl9zZXR1cChjaGFy
ICpvcHRpb25zLCBpbnQgKmludHMpDQp7DQogICAgLyogUGFyc2UgdXNlciBz
cGVmaWNpZWQgb3B0aW9ucyAoYHZpZGVvPXJpdmFmYjonKSAqLw0KfQ0KDQoN
Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCg0KDQogICAg
LyoNCiAgICAgKiAgRnJhbWUgYnVmZmVyIG9wZXJhdGlvbnMNCiAgICAgKi8N
Cg0KaW50IHJpdmFmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQg
dXNlcikNCnsNCiAgICAvKiBOb3RoaW5nLCBvbmx5IGEgdXNhZ2UgY291bnQg
Zm9yIHRoZSBtb21lbnQgKi8NCiAgICBNT0RfSU5DX1VTRV9DT1VOVDsNCiAg
ICByZXR1cm4gMDsNCn0NCg0KaW50IHJpdmFmYl9yZWxlYXNlKHN0cnVjdCBm
Yl9pbmZvICppbmZvLCBpbnQgdXNlcikNCnsNCiAgICBNT0RfREVDX1VTRV9D
T1VOVDsNCiAgICByZXR1cm4gMDsNCn0NCg0KDQovKioNCiAqIHJpdmFmYl9n
ZXRfZml4DQogKiBAZml4Og0KICogQGNvbjoNCiAqIEBpbmZvOg0KICoNCiAq
IERFU0NSSVBUSU9OOg0KICovDQoNCmludCByaXZhZmJfZ2V0X2ZpeCAoc3Ry
dWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIGludCBjb24sDQoJCSAgc3Ry
dWN0IGZiX2luZm8gKmluZm8pDQp7DQoJc3RydWN0IHJpdmFmYl9pbmZvICpy
aXZhaW5mbyA9IChzdHJ1Y3Qgcml2YWZiX2luZm8gKikgaW5mbzsNCglzdHJ1
Y3QgZGlzcGxheSAqcDsNCg0KCURQUklOVEsgKCJFTlRFUlxuIik7DQoNCglh
c3NlcnQgKGZpeCAhPSBOVUxMKTsNCglhc3NlcnQgKGluZm8gIT0gTlVMTCk7
DQoJYXNzZXJ0IChyaXZhaW5mby0+ZHJ2cl9uYW1lICYmIHJpdmFpbmZvLT5k
cnZyX25hbWVbMF0pOw0KCWFzc2VydCAocml2YWluZm8tPmZiX2Jhc2VfcGh5
cyA+IDApOw0KCWFzc2VydCAocml2YWluZm8tPnJhbV9hbW91bnQgPiAwKTsN
Cg0KCXAgPSAoY29uIDwgMCkgPyByaXZhaW5mby0+aW5mby5kaXNwIDogJmZi
X2Rpc3BsYXlbY29uXTsNCg0KCW1lbXNldCAoZml4LCAwLCBzaXplb2YgKHN0
cnVjdCBmYl9maXhfc2NyZWVuaW5mbykpOw0KCXNwcmludGYgKGZpeC0+aWQs
ICJSaXZhICVzIiwgcml2YWluZm8tPmRydnJfbmFtZSk7DQoNCglmaXgtPnNt
ZW1fc3RhcnQgPSAoY2hhciAqKSByaXZhaW5mby0+ZmJfYmFzZV9waHlzOw0K
CWZpeC0+c21lbV9sZW4gPSByaXZhaW5mby0+cmFtX2Ftb3VudDsNCg0KCWZp
eC0+dHlwZSA9IHAtPnR5cGU7DQoJZml4LT50eXBlX2F1eCA9IHAtPnR5cGVf
YXV4Ow0KCWZpeC0+dmlzdWFsID0gcC0+dmlzdWFsOw0KDQoJZml4LT54cGFu
c3RlcCA9IDE7DQoJZml4LT55cGFuc3RlcCA9IDE7DQoJZml4LT55d3JhcHN0
ZXAgPSAwOyAvKiBGSVhNRTogbm8geXdyYXAgZm9yIG5vdyAqLw0KDQoJZml4
LT5saW5lX2xlbmd0aCA9IHAtPmxpbmVfbGVuZ3RoOw0KDQojd2FybmluZyBG
SVhNRTogc2V0IHVwIE1NSU8gcmVnaW9uDQoJZml4LT5tbWlvX3N0YXJ0ID0g
TlVMTDsNCglmaXgtPm1taW9fbGVuID0gMDsNCg0KI3dhcm5pbmcgRklYTUU6
IHJlZmVyZW5jZSByaXZhIGFjY2VsZXJhdGlvbiBmYi5oIGNvbnN0YW50IGhl
cmUNCglmaXgtPmFjY2VsID0gRkJfQUNDRUxfTk9ORTsNCg0KCURQUklOVEsg
KCJFWElULCByZXR1cm5pbmcgMFxuIik7DQoNCglyZXR1cm4gMDsNCn0NCg0K
DQoNCi8qKg0KICogcml2YWZiX2dldF92YXINCiAqIEB2YXI6DQogKiBAY29u
Og0KICogQGluZm86DQogKg0KICogREVTQ1JJUFRJT046DQogKi8NCg0KaW50
IHJpdmFmYl9nZXRfdmFyIChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZh
ciwgaW50IGNvbiwNCgkJICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykNCnsNCglz
dHJ1Y3Qgcml2YWZiX2luZm8gKnJpdmFpbmZvID0gKHN0cnVjdCByaXZhZmJf
aW5mbyAqKSBpbmZvOw0KDQoJRFBSSU5USyAoIkVOVEVSXG4iKTsNCg0KCWFz
c2VydCAoaW5mbyAhPSBOVUxMKTsNCglhc3NlcnQgKHZhciAhPSBOVUxMKTsN
Cg0KCSp2YXIgPSAoY29uIDwgMCkgPyByaXZhaW5mby0+ZGlzcC52YXIgOiBm
Yl9kaXNwbGF5W2Nvbl0udmFyOw0KDQoJRFBSSU5USyAoIkVYSVQsIHJldHVy
bmluZyAwXG4iKTsNCg0KCXJldHVybiAwOw0KfQ0KDQoNCg0KLyoqDQogKiBy
aXZhZmJfc2V0X3Zhcg0KICogQHZhcjoNCiAqIEBjb246DQogKiBAaW5mbzoN
CiAqDQogKiBERVNDUklQVElPTjoNCiAqLw0KDQppbnQgcml2YWZiX3NldF92
YXIgKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgY29uLA0K
CQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKQ0Kew0KCXN0cnVjdCByaXZhZmJf
aW5mbyAqcml2YWluZm8gPSAoc3RydWN0IHJpdmFmYl9pbmZvICopIGluZm87
DQoJc3RydWN0IGRpc3BsYXkgKmRzcDsNCglzdHJ1Y3QgZmJfdmFyX3NjcmVl
bmluZm8gdjsNCglpbnQgbm9tLCBkZW47CQkvKiB0cmFuc2xhdGluZyBmcm9t
IHBpeGVscy0+Ynl0ZXMgKi8NCglpbnQgaTsNCgl1bnNpZ25lZCBjaGd2YXIg
PSAwOw0KCXN0YXRpYyBzdHJ1Y3Qgew0KCQlpbnQgeHJlcywgeXJlczsNCgl9
IG1vZGVzW10gPSB7DQoJCXsgMTYwMCwgMTI4MCB9LA0KCQl7IDEyODAsIDEw
MjQgfSwNCgkJeyAxMDI0LCA3NjggfSwNCgkJeyA4MDAsIDYwMCB9LA0KCQl7
IDY0MCwgNDgwIH0sDQoJCXsgLTEsIC0xIH0NCgl9Ow0KDQoJRFBSSU5USyAo
IkVOVEVSXG4iKTsNCg0KCWFzc2VydCAoaW5mbyAhPSBOVUxMKTsNCglhc3Nl
cnQgKHZhciAhPSBOVUxMKTsNCg0KCURQUklOVEsgKCJSZXF1ZXN0ZWQ6ICVk
eCVkeCVkXG4iLCB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Bl
cl9waXhlbCk7DQoJRFBSSU5USyAoIiAgdmlydHVhbDogJWR4JWRcbiIsIHZh
ci0+eHJlc192aXJ0dWFsLCB2YXItPnlyZXNfdmlydHVhbCk7DQoJRFBSSU5U
SyAoIiAgIG9mZnNldDogKCVkLCVkKVxuIiwgdmFyLT54b2Zmc2V0LCB2YXIt
PnlvZmZzZXQpOw0KCURQUklOVEsgKCJncmF5c2NhbGU6ICVkXG4iLCB2YXIt
PmdyYXlzY2FsZSk7DQoNCglzd2l0Y2ggKHZhci0+YWN0aXZhdGUgJiBGQl9B
Q1RJVkFURV9NQVNLKSB7DQoJY2FzZSBGQl9BQ1RJVkFURV9URVNUOg0KCQlE
UFJJTlRLICgiRVhJVCAtIEZCX0FDVElWQVRFX1RFU1RcbiIpOw0KCQlyZXR1
cm4gMDsNCgljYXNlIEZCX0FDVElWQVRFX05YVE9QRU46CS8qID8/ICovDQoJ
Y2FzZSBGQl9BQ1RJVkFURV9OT1c6DQoJCWJyZWFrOwkJLyogY29udGludWUg
Ki8NCglkZWZhdWx0Og0KCQlEUFJJTlRLICgiRVhJVCAtIHVua25vd24gYWN0
aXZhdGlvbiB0eXBlXG4iKTsNCgkJcmV0dXJuIC1FSU5WQUw7CS8qIHVua25v
d24gKi8NCgl9DQoNCglkc3AgPSAoY29uIDwgMCkgPyByaXZhaW5mby0+aW5m
by5kaXNwIDogJmZiX2Rpc3BsYXlbY29uXTsNCglhc3NlcnQgKGRzcCAhPSBO
VUxMKTsNCg0KCS8qIGlmIHZhciBoYXMgY2hhbmdlZCwgd2Ugc2hvdWxkIGNh
bGwgY2hhbmdldmFyKCkgbGF0ZXIgKi8NCglpZiAoY29uID49IDApIHsNCgkJ
Y2hndmFyID0gKChkc3AtPnZhci54cmVzICE9IHZhci0+eHJlcykgfHwNCgkJ
ICAgIChkc3AtPnZhci55cmVzICE9IHZhci0+eXJlcykgfHwNCiAgICAgICAg
ICAgICAgICAgICAgKGRzcC0+dmFyLnhyZXNfdmlydHVhbCAhPSB2YXItPnhy
ZXNfdmlydHVhbCkgfHwNCgkJICAgIChkc3AtPnZhci55cmVzX3ZpcnR1YWwg
IT0gdmFyLT55cmVzX3ZpcnR1YWwpIHx8DQoJCSAgICAoZHNwLT52YXIuYml0
c19wZXJfcGl4ZWwgIT0gdmFyLT5iaXRzX3Blcl9waXhlbCkgfHwNCgkJICAg
IG1lbWNtcCgmZHNwLT52YXIucmVkLCAmdmFyLT5yZWQsIHNpemVvZih2YXIt
PnJlZCkpIHx8DQoJCSAgICBtZW1jbXAoJmRzcC0+dmFyLmdyZWVuLCAmdmFy
LT5ncmVlbiwgc2l6ZW9mKHZhci0+Z3JlZW4pKSB8fA0KCQkgICAgbWVtY21w
KCZkc3AtPnZhci5ibHVlLCAmdmFyLT5ibHVlLCBzaXplb2YodmFyLT5ibHVl
KSkpOw0KCX0NCg0KCW1lbWNweSAoJnYsIHZhciwgc2l6ZW9mICh2KSk7DQoN
Cglzd2l0Y2ggKHYuYml0c19wZXJfcGl4ZWwpIHsNCiNpZmRlZiBGQkNPTl9I
QVNfTUZCDQoJY2FzZSAxOg0KCQlkc3AtPmRpc3BzdyA9ICZmYmNvbl9tZmI7
DQoJCWRzcC0+bGluZV9sZW5ndGggPSB2LnhyZXNfdmlydHVhbCAvIDg7DQoJ
CWRzcC0+dmlzdWFsID0gRkJfVklTVUFMX01PTk8xMDsNCgkJbm9tID0gNDsN
CgkJZGVuID0gODsNCgkJYnJlYWs7DQojZW5kaWYNCg0KI2lmZGVmIEZCQ09O
X0hBU19DRkI4DQoJY2FzZSAyIC4uLiA4Og0KCQl2LmJpdHNfcGVyX3BpeGVs
ID0gODsNCgkJZHNwLT5kaXNwc3cgPSAmZmJjb25fY2ZiODsNCgkJbm9tID0g
MTsNCgkJZGVuID0gMTsNCgkJZHNwLT5saW5lX2xlbmd0aCA9IHYueHJlc192
aXJ0dWFsOw0KCQlkc3AtPnZpc3VhbCA9IEZCX1ZJU1VBTF9ESVJFQ1RDT0xP
UjsNCgkJdi5yZWQub2Zmc2V0ID0gMDsNCgkJdi5yZWQubGVuZ3RoID0gNjsN
CgkJdi5ncmVlbi5vZmZzZXQgPSAwOw0KCQl2LmdyZWVuLmxlbmd0aCA9IDY7
DQoJCXYuYmx1ZS5vZmZzZXQgPSAwOw0KCQl2LmJsdWUubGVuZ3RoID0gNjsN
CgkJYnJlYWs7DQojZW5kaWYNCg0KI2lmZGVmIEZCQ09OX0hBU19DRkIxNg0K
CWNhc2UgOSAuLi4gMTY6DQoJCXYuYml0c19wZXJfcGl4ZWwgPSAxNjsNCgkJ
ZHNwLT5kaXNwc3cgPSAmZmJjb25fY2ZiMTY7DQoJCWRzcC0+ZGlzcHN3X2Rh
dGEgPSAmcml2YWluZm8tPmNvbl9jbWFwLmNmYjE2Ow0KCQlub20gPSAyOw0K
CQlkZW4gPSAxOw0KCQlkc3AtPmxpbmVfbGVuZ3RoID0gdi54cmVzX3ZpcnR1
YWwgKiAyOw0KCQlkc3AtPnZpc3VhbCA9IEZCX1ZJU1VBTF9ESVJFQ1RDT0xP
UjsNCiNpZmRlZiBDT05GSUdfUFJFUA0KCQl2LnJlZC5vZmZzZXQgPSAyOw0K
CQl2LmdyZWVuLm9mZnNldCA9IC0zOw0KCQl2LmJsdWUub2Zmc2V0ID0gODsN
CiNlbHNlDQoJCXYucmVkLm9mZnNldCA9IDEwOw0KCQl2LmdyZWVuLm9mZnNl
dCA9IDU7DQoJCXYuYmx1ZS5vZmZzZXQgPSAwOw0KI2VuZGlmDQoJCXYucmVk
Lmxlbmd0aCA9IDU7DQoJCXYuZ3JlZW4ubGVuZ3RoID0gNTsNCgkJdi5ibHVl
Lmxlbmd0aCA9IDU7DQoJCWJyZWFrOw0KI2VuZGlmDQoNCiNpZmRlZiBGQkNP
Tl9IQVNfQ0ZCMzINCgljYXNlIDE3IC4uLiAzMjoNCgkJdi5iaXRzX3Blcl9w
aXhlbCA9IDMyOw0KCQlkc3AtPmRpc3BzdyA9ICZmYmNvbl9jZmIzMjsNCgkJ
ZHNwLT5kaXNwc3dfZGF0YSA9IHJpdmFpbmZvLT5jb25fY21hcC5jZmIzMjsN
CgkJbm9tID0gNDsNCgkJZGVuID0gMTsNCgkJZHNwLT5saW5lX2xlbmd0aCA9
IHYueHJlc192aXJ0dWFsICogNDsNCgkJZHNwLT52aXN1YWwgPSBGQl9WSVNV
QUxfRElSRUNUQ09MT1I7DQojaWZkZWYgQ09ORklHX1BSRVANCgkJdi5yZWQu
b2Zmc2V0ID0gODsNCgkJdi5ncmVlbi5vZmZzZXQgPSAxNjsNCgkJdi5ibHVl
Lm9mZnNldCA9IDI0Ow0KI2Vsc2UNCgkJdi5yZWQub2Zmc2V0ID0gMTY7DQoJ
CXYuZ3JlZW4ub2Zmc2V0ID0gODsNCgkJdi5ibHVlLm9mZnNldCA9IDA7DQoj
ZW5kaWYNCgkJdi5yZWQubGVuZ3RoID0gODsNCgkJdi5ncmVlbi5sZW5ndGgg
PSA4Ow0KCQl2LmJsdWUubGVuZ3RoID0gODsNCgkJYnJlYWs7DQojZW5kaWYN
Cg0KCWRlZmF1bHQ6DQoJCXByaW50ayAoInJpdmE6IG1vZGUgJWR4JWR4JWQg
cmVqZWN0ZWQuLi5jb2xvciBkZXB0aCBub3Qgc3VwcG9ydGVkLlxuIiwNCgkJ
CXZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsN
CgkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRUlOVkFMXG4iKTsNCgkJ
cmV0dXJuIC1FSU5WQUw7DQoJfQ0KDQoJaWYgKHYueHJlcyAqIG5vbSAvIGRl
biAqIHYueXJlcyA+IHJpdmFpbmZvLT5yYW1fYW1vdW50KSB7DQoJCXByaW50
ayAoInJpdmE6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQuLi5yZXNvbHV0aW9u
IHRvbyBoaWdoIHRvIGZpdCBpbnRvIHZpZGVvIG1lbW9yeSFcbiIsDQoJCQl2
YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7DQoJ
CURQUklOVEsgKCJFWElUIC0gRUlOVkFMIGVycm9yXG4iKTsNCgkJcmV0dXJu
IC1FSU5WQUw7DQoJfQ0KDQoJLyogdXNlIGhpZ2hlc3QgcG9zc2libGUgdmly
dHVhbCByZXNvbHV0aW9uICovDQoJaWYgKHYueHJlc192aXJ0dWFsID09IC0x
ICYmDQoJICAgIHYueXJlc192aXJ0dWFsID09IC0xKSB7DQoJCXByaW50ayAo
InJpdmE6IHVzaW5nIG1heGltdW0gYXZhaWxhYmxlIHZpcnR1YWwgcmVzb2x1
dGlvblxuIik7DQoJCWZvciAoaSA9IDA7IG1vZGVzW2ldLnhyZXMgIT0gLTE7
IGkrKykgew0KCQkJaWYgKG1vZGVzW2ldLnhyZXMgKiBub20gLyBkZW4gKiBt
b2Rlc1tpXS55cmVzIDwgcml2YWluZm8tPnJhbV9hbW91bnQgLyAyKQ0KCQkJ
CWJyZWFrOw0KCQl9DQoJCWlmIChtb2Rlc1tpXS54cmVzID09IC0xKSB7DQoJ
CQlwcmludGsgKCJyaXZhOiBjb3VsZCBub3QgZmluZCBhIHZpcnR1YWwgcmVz
b2x1dGlvbiB0aGF0IGZpdHMgaW50byB2aWRlbyBtZW1vcnkhIVxuIik7DQoJ
CQlEUFJJTlRLICgiRVhJVCAtIEVJTlZBTCBlcnJvclxuIik7DQoJCQlyZXR1
cm4gLUVJTlZBTDsNCgkJfQ0KCQl2LnhyZXNfdmlydHVhbCA9IG1vZGVzW2ld
LnhyZXM7DQoJCXYueXJlc192aXJ0dWFsID0gbW9kZXNbaV0ueXJlczsNCg0K
CQlwcmludGsgKCJyaXZhOiB2aXJ0dWFsIHJlc29sdXRpb24gc2V0IHRvIG1h
eGltdW0gb2YgJWR4JWRcbiIsDQoJCQl2LnhyZXNfdmlydHVhbCwgdi55cmVz
X3ZpcnR1YWwpOw0KCX0gZWxzZSBpZiAodi54cmVzX3ZpcnR1YWwgPT0gLTEp
IHsNCgkJLyogRklYTUU6IG1heGltaXplIFggdmlydHVhbCByZXNvbHV0aW9u
IG9ubHkgKi8NCgl9IGVsc2UgaWYgKHYueXJlc192aXJ0dWFsID09IC0xKSB7
DQoJCS8qIEZJWE1FOiBtYXhpbWl6ZSBZIHZpcnR1YWwgcmVzb2x1dGlvbiBv
bmx5ICovDQoJfQ0KDQoJaWYgKHYueG9mZnNldCA8IDApDQoJCXYueG9mZnNl
dCA9IDA7DQoJaWYgKHYueW9mZnNldCA8IDApDQoJCXYueW9mZnNldCA9IDA7
DQoNCgkvKiB0cnVuY2F0ZSB4b2Zmc2V0IGFuZCB5b2Zmc2V0IHRvIG1heGlt
dW0gaWYgdG9vIGhpZ2ggKi8NCglpZiAodi54b2Zmc2V0ID4gdi54cmVzX3Zp
cnR1YWwgLSB2LnhyZXMpDQoJCXYueG9mZnNldCA9IHYueHJlc192aXJ0dWFs
IC0gdi54cmVzIC0gMTsNCg0KCWlmICh2LnlvZmZzZXQgPiB2LnlyZXNfdmly
dHVhbCAtIHYueXJlcykNCgkJdi55b2Zmc2V0ID0gdi55cmVzX3ZpcnR1YWwg
LSB2LnlyZXMgLSAxOw0KDQoJdi5yZWQubXNiX3JpZ2h0ID0NCgkgICAgdi5n
cmVlbi5tc2JfcmlnaHQgPQ0KCSAgICB2LmJsdWUubXNiX3JpZ2h0ID0NCgkg
ICAgdi50cmFuc3Aub2Zmc2V0ID0NCgkgICAgdi50cmFuc3AubGVuZ3RoID0N
CgkgICAgdi50cmFuc3AubXNiX3JpZ2h0ID0gMDsNCg0KCWRzcC0+dHlwZSA9
IEZCX1RZUEVfVEVYVDsNCg0KI3dhcm5pbmcgRklYTUU6IHZlcmlmeSB0aGF0
IHRoZSBhYm92ZSBjb2RlIHNldHMgZHNwLT4qIGZpZWxkcyBjb3JyZWN0bHkN
Cg0KCW1lbWNweSAoJmRzcC0+dmFyLCAmdiwgc2l6ZW9mICh2KSk7DQoNCgly
aXZhX2xvYWRfdmlkZW9fbW9kZSAocml2YWluZm8sICZ2KTsNCg0KCWlmIChj
aGd2YXIgJiYgaW5mbyAmJiBpbmZvLT5jaGFuZ2V2YXIpDQoJCWluZm8tPmNo
YW5nZXZhciAoY29uKTsNCg0KCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcg
MFxuIik7DQoJcmV0dXJuIDA7DQp9DQoNCg0KDQovKioNCiAqIHJpdmFmYl9n
ZXRfY21hcA0KICogQGNtYXA6DQogKiBAa3NwYzoNCiAqIEBjb246DQogKiBA
aW5mbzoNCiAqDQogKiBERVNDUklQVElPTjoNCiAqDQogKiBOT1RFUzoNCiAq
IENvcGllZCBmcm9tIG1hdHJveGZiOjptYXRyb3hmYl9nZXRfY21hcCgpDQog
Ki8NCg0KaW50IHJpdmFmYl9nZXRfY21hcCAoc3RydWN0IGZiX2NtYXAgKmNt
YXAsIGludCBrc3BjLCBpbnQgY29uLA0KCQkgICBzdHJ1Y3QgZmJfaW5mbyAq
aW5mbykNCnsNCglzdHJ1Y3Qgcml2YWZiX2luZm8gKnJpdmFpbmZvID0gKHN0
cnVjdCByaXZhZmJfaW5mbyAqKSBpbmZvOw0KCXN0cnVjdCBkaXNwbGF5ICpk
c3A7DQoNCglEUFJJTlRLICgiRU5URVJcbiIpOw0KDQoJYXNzZXJ0IChyaXZh
aW5mbyAhPSBOVUxMKTsNCglhc3NlcnQgKGNtYXAgIT0gTlVMTCk7DQoNCglk
c3AgPSAoY29uIDwgMCkgPyByaXZhaW5mby0+aW5mby5kaXNwIDogJmZiX2Rp
c3BsYXlbY29uXTsNCg0KCWlmIChjb24gPT0gcml2YWluZm8tPmN1cnJjb24p
IHsJDQoJCWludCByYyA9IGZiX2dldF9jbWFwIChjbWFwLCBrc3BjLCByaXZh
X2dldGNvbHJlZywgaW5mbyk7DQoJCURQUklOVEsgKCJFWElUIC0gcmV0dXJu
aW5nICVkXG4iLCByYyk7DQoJCXJldHVybiByYzsNCgl9IGVsc2UgaWYgKGRz
cC0+Y21hcC5sZW4pDQoJCWZiX2NvcHlfY21hcCAoJmRzcC0+Y21hcCwgY21h
cCwga3NwYyA/IDAgOiAyKTsNCgllbHNlDQoNCgkJZmJfY29weV9jbWFwIChm
Yl9kZWZhdWx0X2NtYXAgKHJpdmFfZ2V0X2NtYXBfbGVuICgmZHNwLT52YXIp
KSwNCgkJCSAgICAgIGNtYXAsIGtzcGMgPyAwIDogMik7DQoNCglEUFJJTlRL
ICgiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOw0KDQoJcmV0dXJuIDA7DQp9DQoN
Cg0KLyoqDQogKiByaXZhZmJfc2V0X2NtYXANCiAqIEBjbWFwOg0KICogQGtz
cGM6DQogKiBAY29uOg0KICogQGluZm86DQogKg0KICogREVTQ1JJUFRJT046
DQogKg0KICogTk9URVM6DQogKiBDb3BpZWQgZnJvbSBtYXRyb3hmYjo6bWF0
cm94ZmJfc2V0X2NtYXAoKQ0KICovDQoNCmludCByaXZhZmJfc2V0X2NtYXAg
KHN0cnVjdCBmYl9jbWFwICpjbWFwLCBpbnQga3NwYywgaW50IGNvbiwNCgkJ
ICAgc3RydWN0IGZiX2luZm8gKmluZm8pDQp7DQoJc3RydWN0IHJpdmFmYl9p
bmZvICpyaXZhaW5mbyA9IChzdHJ1Y3Qgcml2YWZiX2luZm8gKikgaW5mbzsN
CglzdHJ1Y3QgZGlzcGxheSAqZHNwOw0KCXVuc2lnbmVkIGludCBjbWFwX2xl
bjsNCg0KCURQUklOVEsgKCJFTlRFUlxuIik7DQoNCglhc3NlcnQgKHJpdmFp
bmZvICE9IE5VTEwpOw0KCWFzc2VydCAoY21hcCAhPSBOVUxMKTsNCg0KCWRz
cCA9IChjb24gPCAwKSA/IHJpdmFpbmZvLT5pbmZvLmRpc3AgOiAmZmJfZGlz
cGxheVtjb25dOw0KDQoJY21hcF9sZW4gPSByaXZhX2dldF9jbWFwX2xlbiAo
JmRzcC0+dmFyKTsNCglpZiAoZHNwLT5jbWFwLmxlbiAhPSBjbWFwX2xlbikg
ew0KCQlpbnQgZXJyID0gZmJfYWxsb2NfY21hcCAoJmRzcC0+Y21hcCwgY21h
cF9sZW4sIDApOw0KCQlpZiAoZXJyKSB7DQoJCQlEUFJJTlRLICgiRVhJVCAt
IHJldHVybmluZyAlZFxuIiwgZXJyKTsNCgkJCXJldHVybiBlcnI7DQoJCX0N
Cgl9DQoJaWYgKGNvbiA9PSByaXZhaW5mby0+Y3VycmNvbikgewkvKiBjdXJy
ZW50IGNvbnNvbGU/ICovDQoJCWludCByYyA9IGZiX3NldF9jbWFwIChjbWFw
LCBrc3BjLCByaXZhX3NldGNvbHJlZywgaW5mbyk7DQoJCURQUklOVEsgKCJF
WElUIC0gcmV0dXJuaW5nICVkXG4iLCByYyk7DQoJCXJldHVybiByYzsNCgl9
IGVsc2UNCgkJZmJfY29weV9jbWFwIChjbWFwLCAmZHNwLT5jbWFwLCBrc3Bj
ID8gMCA6IDEpOw0KDQoJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAwXG4i
KTsNCg0KCXJldHVybiAwOw0KfQ0KDQoNCg0KLyoqDQogKiByaXZhZmJfcGFu
X2Rpc3BsYXkNCiAqIEB2YXI6IHN0YW5kYXJkIGtlcm5lbCBmYiBjaGFuZ2Vh
YmxlIGRhdGENCiAqIEBwYXI6IHJpdmEtc3BlY2lmaWMgaGFyZHdhcmUgaW5m
byBhYm91dCBjdXJyZW50IHZpZGVvIG1vZGUNCiAqIEBpbmZvOiBwb2ludGVy
IHRvIHJpdmFmYl9pbmZvIG9iamVjdCBjb250YWluaW5nIGluZm8gZm9yIGN1
cnJlbnQgcml2YSBib2FyZA0KICoNCiAqIERFU0NSSVBUSU9OOg0KICogUGFu
IChvciB3cmFwLCBkZXBlbmRpbmcgb24gdGhlIGB2bW9kZScgZmllbGQpIHRo
ZSBkaXNwbGF5IHVzaW5nIHRoZQ0KICogYHhvZmZzZXQnIGFuZCBgeW9mZnNl
dCcgZmllbGRzIG9mIHRoZSBgdmFyJyBzdHJ1Y3R1cmUuDQogKiBJZiB0aGUg
dmFsdWVzIGRvbid0IGZpdCwgcmV0dXJuIC1FSU5WQUwuDQogKg0KICogVGhp
cyBjYWxsIGxvb2tzIG9ubHkgYXQgeG9mZnNldCwgeW9mZnNldCBhbmQgdGhl
IEZCX1ZNT0RFX1lXUkFQIGZsYWcNCiAqLw0KDQppbnQgcml2YWZiX3Bhbl9k
aXNwbGF5IChzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IGNv
biwNCgkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pDQp7DQoJdW5zaWdu
ZWQgaW50IGJhc2U7DQoJc3RydWN0IGRpc3BsYXkgKmRzcDsNCglzdHJ1Y3Qg
cml2YWZiX2luZm8gKnJpdmFpbmZvID0gKHN0cnVjdCByaXZhZmJfaW5mbyAq
KSBpbmZvOw0KDQoJRFBSSU5USyAoIkVOVEVSXG4iKTsNCg0KCWFzc2VydCAo
cml2YWluZm8gIT0gTlVMTCk7DQoNCglpZiAodmFyLT54b2Zmc2V0ID4gKHZh
ci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzKSkNCgkJcmV0dXJuIC1FSU5W
QUw7DQoJaWYgKHZhci0+eW9mZnNldCA+ICh2YXItPnlyZXNfdmlydHVhbCAt
IHZhci0+eXJlcykpDQoJCXJldHVybiAtRUlOVkFMOw0KDQoJZHNwID0gKGNv
biA8IDApID8gcml2YWluZm8tPmluZm8uZGlzcCA6ICZmYl9kaXNwbGF5W2Nv
bl07DQoNCglpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSB7DQoJ
CWlmICh2YXItPnlvZmZzZXQgPCAwIHx8IHZhci0+eW9mZnNldCA+PSBkc3At
PnZhci55cmVzX3ZpcnR1YWwgfHwgdmFyLT54b2Zmc2V0KQ0KCQkJcmV0dXJu
IC1FSU5WQUw7DQoJfSBlbHNlIHsNCgkJaWYgKHZhci0+eG9mZnNldCtkc3At
PnZhci54cmVzID4gZHNwLT52YXIueHJlc192aXJ0dWFsIHx8DQoJCSAgICB2
YXItPnlvZmZzZXQrZHNwLT52YXIueXJlcyA+IGRzcC0+dmFyLnlyZXNfdmly
dHVhbCkNCgkJCXJldHVybiAtRUlOVkFMOw0KCX0NCg0KCWJhc2UgPSB2YXIt
PnlvZmZzZXQgKiBkc3AtPmxpbmVfbGVuZ3RoICsgdmFyLT54b2Zmc2V0Ow0K
DQoJaWYgKGNvbiA9PSByaXZhaW5mby0+Y3VycmNvbikgew0KCQkvKiBGSVhN
RTogZG8gdGhlIGRpcnR5IGRlZWQgKi8NCgl9DQoNCglkc3AtPnZhci54b2Zm
c2V0ID0gdmFyLT54b2Zmc2V0Ow0KCWRzcC0+dmFyLnlvZmZzZXQgPSB2YXIt
PnlvZmZzZXQ7DQoNCglpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQ
KQ0KCQlkc3AtPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsNCgllbHNl
DQoJCWRzcC0+dmFyLnZtb2RlICY9IH5GQl9WTU9ERV9ZV1JBUDsNCg0KCURQ
UklOVEsgKCJFWElULCByZXR1cm5pbmcgMFxuIik7DQoNCglyZXR1cm4gMDsN
Cn0NCg0KDQoNCi8qKg0KICogcml2YWZiX2lvY3RsDQogKiBAaW5vZGU6DQog
KiBAZmlsZToNCiAqIEBjbWQ6DQogKiBAYXJnOg0KICogQGNvbjoNCiAqIEBp
bmZvOg0KICoNCiAqIERFU0NSSVBUSU9OOg0KICovDQoNCmludCByaXZhZmJf
aW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl
LCB1bnNpZ25lZCBpbnQgY21kLA0KCQl1bnNpZ25lZCBsb25nIGFyZywgaW50
IGNvbiwgc3RydWN0IGZiX2luZm8gKmluZm8pDQp7DQoJc3RydWN0IHJpdmFm
Yl9pbmZvICpyaXZhaW5mbyA9IChzdHJ1Y3Qgcml2YWZiX2luZm8gKikgaW5m
bzsNCg0KCURQUklOVEsgKCJFTlRFUlxuIik7DQoNCglhc3NlcnQgKHJpdmFp
bmZvICE9IE5VTEwpOw0KDQoJLyogbm8gcml2YWZiLXNwZWNpZmljIGlvY3Rs
cyAqLw0KDQoJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRUlOVkFMXG4i
KTsNCg0KCXJldHVybiAtRUlOVkFMOw0KfQ0KDQoNCg0KDQovKioNCiAqIHJp
dmFmYl9zd2l0Y2gNCiAqIEBjb246DQogKiBAaW5mbzoNCiAqDQogKiBERVND
UklQVElPTjoNCiAqLw0KDQppbnQgcml2YWZiX3N3aXRjaChpbnQgY29uLCBz
dHJ1Y3QgZmJfaW5mbyAqaW5mbykNCnsNCglzdHJ1Y3Qgcml2YWZiX2luZm8g
KnJpdmFpbmZvID0gKHN0cnVjdCByaXZhZmJfaW5mbyAqKSBpbmZvOw0KCXN0
cnVjdCBmYl9jbWFwKiBjbWFwOw0KCXN0cnVjdCBkaXNwbGF5ICpkc3A7DQoN
CglEUFJJTlRLKCJFTlRFUlxuIik7DQoNCglhc3NlcnQgKHJpdmFpbmZvICE9
IE5VTEwpOw0KDQoJZHNwID0gKGNvbiA8IDApID8gcml2YWluZm8tPmluZm8u
ZGlzcCA6ICZmYl9kaXNwbGF5W2Nvbl07DQoNCglpZiAocml2YWluZm8tPmN1
cnJjb24gPj0gMCkgew0KCQkvKiBEbyB3ZSBoYXZlIHRvIHNhdmUgdGhlIGNv
bG9ybWFwPyAqLw0KCQljbWFwID0gJihyaXZhaW5mby0+Y3VycmNvbl9kaXNw
bGF5LT5jbWFwKTsNCgkJRFBSSU5USygic3dpdGNoMTogY29uID0gJWQsIGNt
YXAubGVuID0gJWRcbiIsIHJpdmFpbmZvLT5jdXJyY29uLCBjbWFwLT5sZW4p
Ow0KDQoJCWlmIChjbWFwLT5sZW4pIHsNCgkJCURQUklOVEsoInN3aXRjaDFh
OiAlcCAlcCAlcCAlcFxuIiwgY21hcC0+cmVkLCBjbWFwLT5ncmVlbiwgY21h
cC0+Ymx1ZSwgY21hcC0+dHJhbnNwKTsNCgkJCWZiX2dldF9jbWFwKGNtYXAs
IDEsIHJpdmFfZ2V0Y29scmVnLCBpbmZvKTsNCiNpZmRlZiBERUJVRw0KCQkJ
aWYgKGNtYXAtPnJlZCkgew0KCQkJCURQUklOVEsoInN3aXRjaDFyOiAlWFxu
IiwgY21hcC0+cmVkWzBdKTsNCgkJCX0NCiNlbmRpZg0KCQl9DQoJfQ0KCXJp
dmFpbmZvLT5jdXJyY29uID0gY29uOw0KCXJpdmFpbmZvLT5jdXJyY29uX2Rp
c3BsYXkgPSBkc3A7DQoJZHNwLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFU
RV9OT1c7DQoNCiNpZmRlZiByaXZhX0RFQlVHDQoJY21hcCA9ICZkc3AtPmNt
YXA7DQoJRFBSSU5USygic3dpdGNoMjogY29uID0gJWQsIGNtYXAubGVuID0g
JWRcbiIsIGNvbiwgY21hcC0+bGVuKTsNCglEUFJJTlRLKCJzd2l0Y2gyYTog
JXAgJXAgJXAgJXBcbiIsIGNtYXAtPnJlZCwgY21hcC0+Z3JlZW4sIGNtYXAt
PmJsdWUsIGNtYXAtPnRyYW5zcCk7DQoJaWYgKGRzcC0+Y21hcC5yZWQpIHsN
CgkJRFBSSU5USygic3dpdGNoMnI6ICVYXG4iLCBjbWFwLT5yZWRbMF0pOw0K
CX0NCiNlbmRpZg0KDQoJcml2YWZiX3NldF92YXIoJmRzcC0+dmFyLCBjb24s
IGluZm8pOw0KDQojaWZkZWYgcml2YV9ERUJVRw0KCURQUklOVEsoInN3aXRj
aDM6IGNvbiA9ICVkLCBjbWFwLmxlbiA9ICVkXG4iLCBjb24sIGNtYXAtPmxl
bik7DQoJRFBSSU5USygic3dpdGNoM2E6ICVwICVwICVwICVwXG4iLCBjbWFw
LT5yZWQsIGNtYXAtPmdyZWVuLCBjbWFwLT5ibHVlLCBjbWFwLT50cmFuc3Ap
Ow0KCWlmIChkc3AtPmNtYXAucmVkKSB7DQoJCURQUklOVEsoInN3aXRjaDNy
OiAlWFxuIiwgY21hcC0+cmVkWzBdKTsNCgl9DQojZW5kaWYNCg0KCURQUklO
VEsoIkVYSVQsIHJldHVybmluZyAwXG4iKTsNCg0KCXJldHVybiAwOw0KfQ0K
DQoNCg0Kdm9pZCByaXZhZmJfYmxhbmsgKGludCBibGFuaywgc3RydWN0IGZi
X2luZm8gKmluZm8pDQp7DQoJdW5zaWduZWQgY2hhciB0bXA7DQoJc3RydWN0
IHJpdmFmYl9pbmZvICpyaXZhaW5mbyA9IChzdHJ1Y3Qgcml2YWZiX2luZm8g
KikgaW5mbzsNCg0KCURQUklOVEsgKCJFTlRFUlxuIik7DQoNCglhc3NlcnQg
KHJpdmFpbmZvICE9IE5VTEwpOw0KDQoJdG1wID0gdmdhX2lvX3JzZXEgKFZH
QV9TRVFfQ0xPQ0tfTU9ERSkgJiB+VkdBX1NSMDFfU0NSRUVOX09GRjsNCg0K
CWlmIChibGFuaykNCgkJdG1wIHw9IFZHQV9TUjAxX1NDUkVFTl9PRkY7DQoN
Cgl2Z2FfaW9fd3NlcSAoVkdBX1NFUV9DTE9DS19NT0RFLCB0bXApOw0KDQoJ
RFBSSU5USygiRVhJVFxuIik7DQp9DQoNCg0KLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KICoNCiAqIGludGVybmFsIGZiX29wcyBoZWxwZXIg
ZnVuY3Rpb25zDQogKg0KICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KICovDQoNCg0KLyoqDQogKiByaXZhX2dldF9jbWFwX2xlbg0KICogQHZh
cjoNCiAqDQogKiBERVNDUklQVElPTjoNCiAqLw0KDQpzdGF0aWMgaW50IHJp
dmFfZ2V0X2NtYXBfbGVuKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5m
byAqdmFyKQ0Kew0KCWludCByYyA9IDE2OyAvKiByZWFzb25hYmxlIGRlZmF1
bHQgKi8NCg0KCWFzc2VydCAodmFyICE9IE5VTEwpOw0KDQoJc3dpdGNoICh2
YXItPmJpdHNfcGVyX3BpeGVsKSB7DQojaWZkZWYgRkJDT05fSEFTX0NGQjQN
CgkJY2FzZSA0Og0KCQkJcmMgPSAxNjsJLyogcHNldWRvY29sb3IuLi4gMTYg
ZW50cmllcyBIVyBwYWxldHRlICovDQoJCQlicmVhazsNCiNlbmRpZg0KI2lm
ZGVmIEZCQ09OX0hBU19DRkI4DQoJCWNhc2UgODoNCgkJCXJjID0gMjU2Owkv
KiBwc2V1ZG9jb2xvci4uLiAyNTYgZW50cmllcyBIVyBwYWxldHRlICovDQoJ
CQlicmVhazsNCiNlbmRpZg0KI2lmZGVmIEZCQ09OX0hBU19DRkIxNg0KCQlj
YXNlIDE2Og0KCQkJcmMgPSAxNjsJLyogZGlyZWN0Y29sb3IuLi4gMTYgZW50
cmllcyBTVyBwYWxldHRlICovDQoJCQlicmVhazsJCS8qIE15c3RpcXVlOiB0
cnVlY29sb3IsIDE2IGVudHJpZXMgU1cgcGFsZXR0ZSwgSFcgcGFsZXR0ZSBo
YXJkd2lyZWQgaW50byAxOjEgbWFwcGluZyAqLw0KI2VuZGlmDQojaWZkZWYg
RkJDT05fSEFTX0NGQjMyDQoJCWNhc2UgMzI6DQoJCQlyYyA9IDE2OwkvKiBk
aXJlY3Rjb2xvci4uLiAxNiBlbnRyaWVzIFNXIHBhbGV0dGUgKi8NCgkJCWJy
ZWFrOwkJLyogTXlzdGlxdWU6IHRydWVjb2xvciwgMTYgZW50cmllcyBTVyBw
YWxldHRlLCBIVyBwYWxldHRlIGhhcmR3aXJlZCBpbnRvIDE6MSBtYXBwaW5n
ICovDQojZW5kaWYNCgkJZGVmYXVsdDoNCgkJCWFzc2VydCAoMCk7DQoJCQkv
KiBzaG91bGQgbm90IG9jY3VyICovDQoJCQlicmVhazsNCgl9DQoNCglyZXR1
cm4gcmM7DQp9DQoNCg0KLyoqDQogKiByaXZhX2dldGNvbHJlZw0KICogQHJl
Z25vOg0KICogQHJlZDoNCiAqIEBncmVlbjoNCiAqIEBibHVlOg0KICogQHRy
YW5zcDoNCiAqIEBpbmZvOiBwb2ludGVyIHRvIHJpdmFmYl9pbmZvIG9iamVj
dCBjb250YWluaW5nIGluZm8gZm9yIGN1cnJlbnQgcml2YSBib2FyZA0KICoN
CiAqIERFU0NSSVBUSU9OOg0KICogUmVhZCBhIHNpbmdsZSBjb2xvciByZWdp
c3RlciBhbmQgc3BsaXQgaXQgaW50byBjb2xvcnMvdHJhbnNwYXJlbnQuDQog
KiBUaGUgcmV0dXJuIHZhbHVlcyBtdXN0IGhhdmUgYSAxNiBiaXQgbWFnbml0
dWRlLg0KICogUmV0dXJuICE9IDAgZm9yIGludmFsaWQgcmVnbm8uDQogKg0K
ICogQ0FMTEVEIEZST006DQogKiBmYmNtYXAuYzpmYl9nZXRfY21hcCgpDQog
KglmYmdlbi5jOmZiZ2VuX2dldF9jbWFwKCkNCiAqCWZiZ2VuLmM6ZmJnZW5f
c3dpdGNoKCkNCiAqLw0KDQpzdGF0aWMgaW50IHJpdmFfZ2V0Y29scmVnICh1
bnNpZ25lZCByZWdubywgdW5zaWduZWQgKnJlZCwgdW5zaWduZWQgKmdyZWVu
LA0KCQkJIHVuc2lnbmVkICpibHVlLCB1bnNpZ25lZCAqdHJhbnNwLA0KCQkJ
IHN0cnVjdCBmYl9pbmZvICppbmZvKQ0Kew0KI3dhcm5pbmcgb3B0aW9uYWxs
eSBlbmFibGUgUENJIFZHQSBJL08gcG9ydCwgaWZmIG5vdCB1c2luZyBWR0Eg
dmlhIE1NSU8NCg0KCXN0cnVjdCByaXZhZmJfaW5mbyAqcml2YWluZm8gPSAo
c3RydWN0IHJpdmFmYl9pbmZvICopIGluZm87DQoNCglhc3NlcnQgKHJlZ25v
IDw9IDI1NSk7DQoJYXNzZXJ0IChyZWQgIT0gTlVMTCk7DQoJYXNzZXJ0IChn
cmVlbiAhPSBOVUxMKTsNCglhc3NlcnQgKGJsdWUgIT0gTlVMTCk7DQoJYXNz
ZXJ0ICh0cmFuc3AgIT0gTlVMTCk7DQoJYXNzZXJ0IChyaXZhaW5mbyAhPSBO
VUxMKTsNCg0KCWlmIChyaXZhaW5mby0+cGFsZXR0ZVtyZWdub10uc2xvdF91
c2VkKSB7DQoJCSpyZWQgPSByaXZhaW5mby0+cGFsZXR0ZVtyZWdub10ucmVk
Ow0KCQkqZ3JlZW4gPSByaXZhaW5mby0+cGFsZXR0ZVtyZWdub10uZ3JlZW47
DQoJCSpibHVlID0gcml2YWluZm8tPnBhbGV0dGVbcmVnbm9dLmJsdWU7DQoJ
CSp0cmFuc3AgPSByaXZhaW5mby0+cGFsZXR0ZVtyZWdub10udHJhbnNwOw0K
CX0gZWxzZSB7DQoJCXZnYV9pb193IChWR0FfUEVMX0lSLCByZWdubyk7DQoJ
CSpyZWQgPSByaXZhaW5mby0+cGFsZXR0ZVtyZWdub10ucmVkID0gdmdhX2lv
X3IgKFZHQV9QRUxfRCk7DQoJCSpncmVlbiA9IHJpdmFpbmZvLT5wYWxldHRl
W3JlZ25vXS5ncmVlbiA9IHZnYV9pb19yIChWR0FfUEVMX0QpOw0KCQkqYmx1
ZSA9IHJpdmFpbmZvLT5wYWxldHRlW3JlZ25vXS5ibHVlID0gdmdhX2lvX3Ig
KFZHQV9QRUxfRCk7DQoJCXJpdmFpbmZvLT5wYWxldHRlW3JlZ25vXS50cmFu
c3AgPSAwOw0KCQlyaXZhaW5mby0+cGFsZXR0ZVtyZWdub10uc2xvdF91c2Vk
ID0gMTsNCgl9DQoNCglyZXR1cm4gMDsNCn0NCg0KDQovKioNCiAqIHJpdmFf
c2V0Y29scmVnDQogKiBAcmVnbm86DQogKiBAcmVkOg0KICogQGdyZWVuOg0K
ICogQGJsdWU6DQogKiBAdHJhbnNwOg0KICogQGluZm86IHBvaW50ZXIgdG8g
cml2YWZiX2luZm8gb2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBmb3IgY3VycmVu
dCByaXZhIGJvYXJkDQogKg0KICogREVTQ1JJUFRJT046DQogKiBTZXQgYSBz
aW5nbGUgY29sb3IgcmVnaXN0ZXIuIFRoZSB2YWx1ZXMgc3VwcGxpZWQgaGF2
ZSBhIDE2IGJpdA0KICogbWFnbml0dWRlLg0KICogUmV0dXJuICE9IDAgZm9y
IGludmFsaWQgcmVnbm8uDQogKg0KICogQ0FMTEVEIEZST006DQogKiBmYmNt
YXAuYzpmYl9zZXRfY21hcCgpDQogKglmYmdlbi5jOmZiZ2VuX2dldF9jbWFw
KCkNCiAqCWZiZ2VuLmM6ZmJnZW5faW5zdGFsbF9jbWFwKCkNCiAqCQlmYmdl
bi5jOmZiZ2VuX3NldF92YXIoKQ0KICoJCWZiZ2VuLmM6ZmJnZW5fc3dpdGNo
KCkNCiAqCQlmYmdlbi5jOmZiZ2VuX2JsYW5rKCkNCiAqCWZiZ2VuLmM6ZmJn
ZW5fYmxhbmsoKQ0KICovDQoNCnN0YXRpYyBpbnQgcml2YV9zZXRjb2xyZWcg
KHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVu
LA0KCQkgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLA0KCQkg
ICAgc3RydWN0IGZiX2luZm8gKmluZm8pDQp7DQojd2FybmluZyBvcHRpb25h
bGx5IGVuYWJsZSBQQ0kgVkdBIEkvTyBwb3J0LCBpZmYgbm90IHVzaW5nIFZH
QSB2aWEgTU1JTw0KDQoJc3RydWN0IHJpdmFmYl9pbmZvICpyaXZhaW5mbyA9
IChzdHJ1Y3Qgcml2YWZiX2luZm8gKikgaW5mbzsNCglzdHJ1Y3QgZGlzcGxh
eSAqcDsNCg0KCURQUklOVEsoIkVOVEVSXG4iKTsNCg0KCWFzc2VydCAocmVn
bm8gPD0gMjU1KTsNCglhc3NlcnQgKHJpdmFpbmZvICE9IE5VTEwpOw0KCWFz
c2VydCAocml2YWluZm8tPmN1cnJjb25fZGlzcGxheSAhPSBOVUxMKTsNCg0K
CXJpdmFpbmZvLT5wYWxldHRlIFtyZWdub10ucmVkID0gcmVkOw0KCXJpdmFp
bmZvLT5wYWxldHRlIFtyZWdub10uZ3JlZW4gPSBncmVlbjsNCglyaXZhaW5m
by0+cGFsZXR0ZSBbcmVnbm9dLmJsdWUgPSBibHVlOw0KCXJpdmFpbmZvLT5w
YWxldHRlIFtyZWdub10udHJhbnNwID0gdHJhbnNwOw0KI2lmbmRlZiByaXZh
X05ERUJVRw0KCXJpdmFpbmZvLT5wYWxldHRlIFtyZWdub10uc2xvdF91c2Vk
ID0gMTsNCiNlbmRpZg0KDQoJcCA9IHJpdmFpbmZvLT5jdXJyY29uX2Rpc3Bs
YXk7DQoJaWYgKHAtPnZhci5ncmF5c2NhbGUpIHsNCgkJLyogZ3JheSA9IDAu
MzAqUiArIDAuNTkqRyArIDAuMTEqQiAqLw0KCQlyZWQgPSBncmVlbiA9IGJs
dWUgPSAocmVkICogNzcgKyBncmVlbiAqIDE1MSArIGJsdWUgKiAyOCkgPj4g
ODsNCgl9DQoNCglyZWQgPSBDTlZUX1RPSFcocmVkLCBwLT52YXIucmVkLmxl
bmd0aCk7DQoJZ3JlZW4gPSBDTlZUX1RPSFcoZ3JlZW4sIHAtPnZhci5ncmVl
bi5sZW5ndGgpOw0KCWJsdWUgPSBDTlZUX1RPSFcoYmx1ZSwgcC0+dmFyLmJs
dWUubGVuZ3RoKTsNCgl0cmFuc3AgPSBDTlZUX1RPSFcodHJhbnNwLCBwLT52
YXIudHJhbnNwLmxlbmd0aCk7DQoNCglzd2l0Y2ggKHAtPnZhci5iaXRzX3Bl
cl9waXhlbCkgew0KI2lmZGVmIEZCQ09OX0hBU19DRkI0DQoJY2FzZSA0Og0K
I2VuZGlmDQojaWZkZWYgRkJDT05fSEFTX0NGQjgNCgljYXNlIDg6DQoJCXZn
YV9pb193IChWR0FfUEVMX0lXLCByZWdubyk7DQoJCXZnYV9pb193IChWR0Ff
UEVMX0QsIHJlZCk7DQoJCXZnYV9pb193IChWR0FfUEVMX0QsIGdyZWVuKTsN
CgkJdmdhX2lvX3cgKFZHQV9QRUxfRCwgYmx1ZSk7DQoJYnJlYWs7DQojZW5k
aWYNCiNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYNCgljYXNlIDE2Og0KCQlhc3Nl
cnQgKHJlZ25vIDwgMTYpOw0KCQlyaXZhaW5mby0+Y29uX2NtYXAuY2ZiMTZb
cmVnbm9dID0NCgkJCShyZWQgPDwgcC0+dmFyLnJlZC5vZmZzZXQpICAgICB8
DQoJCQkoZ3JlZW4gPDwgcC0+dmFyLmdyZWVuLm9mZnNldCkgfA0KCQkJKGJs
dWUgPDwgcC0+dmFyLmJsdWUub2Zmc2V0KSAgIHwNCgkJCSh0cmFuc3AgPDwg
cC0+dmFyLnRyYW5zcC5vZmZzZXQpOyAvKiBmb3IgMTo1OjU6NSAqLw0KCQli
cmVhazsNCiNlbmRpZg0KI2lmZGVmIEZCQ09OX0hBU19DRkIzMg0KCWNhc2Ug
MzI6DQoJCWFzc2VydCAocmVnbm8gPCAxNik7DQoJCXJpdmFpbmZvLT5jb25f
Y21hcC5jZmIzMltyZWdub10gPQ0KCQkJKHJlZCAgIDw8IHAtPnZhci5yZWQu
b2Zmc2V0KSAgIHwNCgkJCShncmVlbiA8PCBwLT52YXIuZ3JlZW4ub2Zmc2V0
KSB8DQoJCQkoYmx1ZSAgPDwgcC0+dmFyLmJsdWUub2Zmc2V0KSAgfA0KCQkJ
KHRyYW5zcCA8PCBwLT52YXIudHJhbnNwLm9mZnNldCk7CS8qIDg6ODo4Ojgg
Ki8NCgkJYnJlYWs7DQojZW5kaWYNCglkZWZhdWx0Og0KCQkvKiBzaG91bGQg
bm90IG9jY3VyICovDQoJCWFzc2VydCAoMCk7DQoJCWJyZWFrOw0KCX0NCg0K
CURQUklOVEsoIkVYSVRcbiIpOw0KDQoJcmV0dXJuIDA7DQp9DQoNCg0KDQov
Kg0Kcml2YV9sb2FkX3ZpZGVvX21vZGUoKQ0KDQpUT0RPOiBjbGVhbiB0aGlz
IHVwIGZvciBkaWZmZXJlbnQgbW9kZXMNCnJpZ2h0IG5vdzogIDY0MHg0ODAt
OGJwcA0Kd2lsbCBhZGQgbW9yZSBtb2RlcyBzb29uDQogIC0tYWpvc2hpICov
DQpzdGF0aWMgdm9pZCByaXZhX2xvYWRfdmlkZW9fbW9kZSAoc3RydWN0IHJp
dmFmYl9pbmZvICpyaW5mbywNCgkJCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmlu
Zm8gKnZpZGVvX21vZGUpDQp7DQoJc3RydWN0IHJpdmFfcmVncyBuZXdtb2Rl
Ow0KCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBkZWZhdWx0X21vZGUgPSB7
DQoJCS8qIDY0MHg0ODAgQCA2MCBIeiBOSSAqLw0KCQk2NDAsIDQ4MCwgNjQw
LCA0ODAsIDAsIDAsIDgsIDAsDQoJCXswLCA4LCAwfSwgezAsIDgsIDB9LCB7
MCwgOCwgMH0sIHswLCAwLCAwfSwNCgkJMCwgMCwgLTEsIC0xLCAwLCAzMjU1
MiwgODAsIDMyLCAxNiwgNCwgODAsIDQsDQoJCTAsIEZCX1ZNT0RFX05PTklO
VEVSTEFDRUQNCgl9Ow0KCWludCBicHA9OCwgd2lkdGg9NjQwLCBoRGlzcGxh
eVNpemU9NjQwLCBoRGlzcGxheT03OSwgaFN0YXJ0PTg2LA0KCQloRW5kPTkz
LCBoVG90YWw9MTAzLCBoZWlnaHQ9NDgwLCB2RGlzcGxheT00NzksIHZTdGFy
dD00ODAsDQoJCXZFbmQ9NDgzLCB2VG90YWw9NTA3LCBkb3RDbG9jaz0zNjAw
MCwgb2Zmc2V0Ow0KDQoJKnZpZGVvX21vZGUgPSBkZWZhdWx0X21vZGU7DQoJ
bmV3bW9kZSA9IHJlZ190ZW1wbGF0ZTsNCg0KCW5ld21vZGUuY3J0Y1sweDBd
ID0gU2V0OEJpdHMoaFRvdGFsIC0gNCk7DQoJbmV3bW9kZS5jcnRjWzB4MV0g
PSBTZXQ4Qml0cyhoRGlzcGxheSk7DQoJbmV3bW9kZS5jcnRjWzB4Ml0gPSBT
ZXQ4Qml0cyhoRGlzcGxheSk7DQoJbmV3bW9kZS5jcnRjWzB4M10gPSBTZXRC
aXRGaWVsZChoVG90YWwsNDowLDQ6MCkgfCBTZXRCaXQoNyk7DQoJbmV3bW9k
ZS5jcnRjWzB4NF0gPSBTZXQ4Qml0cyhoU3RhcnQpOw0KCW5ld21vZGUuY3J0
Y1sweDVdID0gU2V0Qml0RmllbGQoaFRvdGFsLDU6NSw3OjcpDQoJCQkJfCBT
ZXRCaXRGaWVsZChoRW5kLDQ6MCw0OjApOw0KCW5ld21vZGUuY3J0Y1sweDZd
ID0gU2V0Qml0RmllbGQodlRvdGFsLDc6MCw3OjApOw0KCW5ld21vZGUuY3J0
Y1sweDddID0gU2V0Qml0RmllbGQodlRvdGFsLDg6OCwwOjApDQoJCQkJfCBT
ZXRCaXRGaWVsZCh2RGlzcGxheSw4OjgsMToxKQ0KCQkJCXwgU2V0Qml0Rmll
bGQodlN0YXJ0LDg6OCwyOjIpDQoJCQkJfCBTZXRCaXRGaWVsZCh2RGlzcGxh
eSw4OjgsMzozKQ0KCQkJCXwgU2V0Qml0KDQpDQoJCQkJfCBTZXRCaXRGaWVs
ZCh2VG90YWwsOTo5LDU6NSkNCgkJCQl8IFNldEJpdEZpZWxkKHZEaXNwbGF5
LDk6OSw2OjYpDQoJCQkJfCBTZXRCaXRGaWVsZCh2U3RhcnQsOTo5LDc6Nyk7
DQoJbmV3bW9kZS5jcnRjWzB4OV0gPSBTZXRCaXRGaWVsZCh2RGlzcGxheSw5
OjksNTo1KQ0KCQkJCXwgU2V0Qml0KDYpOw0KCW5ld21vZGUuY3J0Y1sweDEw
XSA9IFNldDhCaXRzKHZTdGFydCk7DQoJbmV3bW9kZS5jcnRjWzB4MTFdID0g
U2V0Qml0RmllbGQodkVuZCwzOjAsMzowKQ0KCQkJCXwgU2V0Qml0KDUpOw0K
CW5ld21vZGUuY3J0Y1sweDEyXSA9IFNldDhCaXRzKHZEaXNwbGF5KTsNCglu
ZXdtb2RlLmNydGNbMHgxM10gPSAoKHdpZHRoLzgpKihicHAvOCkpICYgMHhG
RjsNCgluZXdtb2RlLmNydGNbMHgxNV0gPSBTZXQ4Qml0cyh2RGlzcGxheSk7
DQoJbmV3bW9kZS5jcnRjWzB4MTZdID0gU2V0OEJpdHModlRvdGFsICsgMSk7
DQoNCgluZXdtb2RlLmV4dC5icHAgPSBicHA7DQoJbmV3bW9kZS5leHQud2lk
dGggPSB3aWR0aDsNCgluZXdtb2RlLmV4dC5oZWlnaHQgPSBoZWlnaHQ7DQoN
CglyaW5mby0+cml2YS5DYWxjU3RhdGVFeHQoJnJpbmZvLT5yaXZhLCZuZXdt
b2RlLmV4dCw4LDY0MCw2NDAsNzksODYsOTMsMTAzLDQ4MCw0NzksNDgwLDQ4
Myw1MDcsMzYwMDApOw0KDQoJcmluZm8tPmN1cnJfcGFyLnN0YXRlID0gbmV3
bW9kZTsNCglyaW5mby0+Y3Vycl9wYXIudmlzdWFsID0gRkJfVklTVUFMX0RJ
UkVDVENPTE9SOw0KCXJpbmZvLT5jdXJyX3Bhci5kZXB0aCA9IGJwcDsNCgly
aW5mby0+aW5pdGlhbF9zdGF0ZSA9IG5ld21vZGU7DQoJcml2YV9sb2FkX3N0
YXRlKHJpbmZvLCZuZXdtb2RlKTsNCn0NCg0KDQoNCg0KDQoNCg0KDQoNCg0K
DQoNCg0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQoN
Cg0KICAgIC8qDQogICAgICogIE1vZHVsYXJpemF0aW9uDQogICAgICovDQoN
CiNpZmRlZiBNT0RVTEUNCmludCBpbml0X21vZHVsZSh2b2lkKQ0Kew0KICAg
IHJpdmFmYl9pbml0KCk7DQogICAgcmV0dXJuIDA7DQp9DQoNCnZvaWQgY2xl
YW51cF9tb2R1bGUodm9pZCkNCnsNCglzdHJ1Y3Qgcml2YWZiX2luZm8gKnRt
cCwgKmJvYXJkID0gcml2YV9ib2FyZHM7DQoNCgl3aGlsZSAoYm9hcmQgIT0g
TlVMTCkgew0KCQlyaXZhX2xvYWRfc3RhdGUgKGJvYXJkLCAmYm9hcmQtPmlu
aXRpYWxfc3RhdGUpOw0KDQoJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIgKChz
dHJ1Y3QgZmJfaW5mbyAqKSBib2FyZCk7DQoNCgkJdG1wID0gYm9hcmQ7DQoJ
CWlvdW5tYXAgKHRtcC0+Y3RybF9iYXNlKTsNCgkJaW91bm1hcCAodG1wLT5m
Yl9iYXNlKTsNCgkJYm9hcmQgPSBib2FyZC0+bmV4dDsNCg0KCQlrZnJlZSAo
dG1wKTsNCgl9DQp9DQojZW5kaWYgLyogTU9EVUxFICovDQoNCg0KDQoNCg0K
LyogZnJvbSBHR0kgKi8NCnN0YXRpYw0Kdm9pZCByaXZhX3NhdmVfc3RhdGUo
c3RydWN0IHJpdmFmYl9pbmZvICpyaW5mbywgc3RydWN0IHJpdmFfcmVncyAq
cmVncykNCnsNCiAgICAgICAgaW50IGk7DQoJUklWQV9IV19TVEFURSAqc3Rh
dGUgPSAmcmVncy0+ZXh0Ow0KDQoJcHJpbnRrKCJpbiByaXZhX3NhdmVfc3Rh
dGUoKVxuIik7DQoNCiAgICAgICAgaW9fb3V0OChOVl9DSU9fU1JfTE9DS19J
TkRFWCwgMHgzRDQpOw0KICAgICAgICBpb19vdXQ4KE5WX0NJT19TUl9VTkxP
Q0tfUldfVkFMVUUsIDB4M0Q1KTsNCg0KCXByaW50aygiZ290IGhlcmVcbiIp
Ow0KDQogICAgICAgIHJpbmZvLT5yaXZhLlVubG9hZFN0YXRlRXh0KCZyaW5m
by0+cml2YSwgc3RhdGUpOw0KDQoJcHJpbnRrKCJnb3QgaGVyZVxuIik7DQoN
CiAgICAgICAgcmVncy0+bWlzY19vdXRwdXQgPSBpb19pbjgoMHgzQ0MpOw0K
DQogICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQ1JUX1JFR1M7IGkrKykN
CiAgICAgICAgew0KICAgICAgICAgICAgICAgIGlvX291dDgoaSwgMHgzRDQp
Ow0KICAgICAgICAgICAgICAgIHJlZ3MtPmNydGNbaV0gPSBpb19pbjgoMHgz
RDUpOw0KICAgICAgICB9DQoNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IE5V
TV9BVENfUkVHUzsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAg
aW9fb3V0OChpLCAweDNDMCk7DQogICAgICAgICAgICAgICAgcmVncy0+YXR0
cltpXSA9IGlvX2luOCgweDNDMSk7DQogICAgICAgIH0NCg0KICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgTlVNX0dSQ19SRUdTOyBpKyspDQogICAgICAgIHsN
CiAgICAgICAgICAgICAgICBpb19vdXQ4KGksIDB4M0NFKTsNCiAgICAgICAg
ICAgICAgICByZWdzLT5ncmFbaV0gPSBpb19pbjgoMHgzQ0YpOw0KICAgICAg
ICB9DQoNCg0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1NFUV9SRUdT
OyBpKyspDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBpb19vdXQ4KGks
IDB4M0M0KTsNCiAgICAgICAgICAgICAgICByZWdzLT5zZXFbaV0gPSBpb19p
bjgoMHgzQzUpOw0KICAgICAgICB9DQp9DQoNCg0KLyogZnJvbSBHR0kgKi8N
CnN0YXRpYw0Kdm9pZCByaXZhX2xvYWRfc3RhdGUoc3RydWN0IHJpdmFmYl9p
bmZvICpyaW5mbywgc3RydWN0IHJpdmFfcmVncyAqcmVncykNCnsNCiAgICAg
ICAgaW50IGk7DQoJUklWQV9IV19TVEFURSAqc3RhdGUgPSAmcmVncy0+ZXh0
Ow0KDQogICAgICAgIGlvX291dDgoMHgxMSwgMHgzRDQpOw0KICAgICAgICBp
b19vdXQ4KDB4MDAsIDB4M0Q1KTsNCg0KICAgICAgICBpb19vdXQ4KE5WX0NJ
T19TUl9MT0NLX0lOREVYLCAweDNENCk7DQogICAgICAgIGlvX291dDgoTlZf
Q0lPX1NSX1VOTE9DS19SV19WQUxVRSwgMHgzRDUpOw0KDQogCXJpbmZvLT5y
aXZhLkxvYWRTdGF0ZUV4dCgmcmluZm8tPnJpdmEsc3RhdGUpOw0KDQogICAg
ICAgIGlvX291dDgocmVncy0+bWlzY19vdXRwdXQsIDB4M0MyKTsNCg0KICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0NSVF9SRUdTOyBpKyspDQogICAg
ICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoaSA8IDB4MTkpDQogICAgICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaW9fb3V0OChp
LCAweDNENCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpb19vdXQ4KHJl
Z3MtPmNydGNbaV0sIDB4M0Q1KTsNCiAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkNCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAweDE5Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDB4MjA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAw
eDIyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4
MjM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgy
NDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDI1
Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MjY6
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNzoN
CiNpZiAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyODoNCiNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDB4Mjk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMHgyYToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAweDJiOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDB4MmM6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMHgyZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAweDJlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDB4MmY6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgzMDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAw
eDMxOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4
MzI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgz
MzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM0
Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNjoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3Og0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzOToNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNhOg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4M2I6DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzYzoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNkOg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4M2U6DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzZjoNCiNpZiAwDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg0MDoNCiNl
bmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9fb3V0OChpLCAweDNE
NCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX291dDgo
cmVncy0+Y3J0Y1tpXSwgMHgzRDUpOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAg
IGZvciAoaSA9IDA7IGkgPCBOVU1fQVRDX1JFR1M7IGkrKykNCiAgICAgICAg
ew0KICAgICAgICAgICAgICAgIGlvX291dDgoaSwgMHgzQzApOw0KICAgICAg
ICAgICAgICAgIGlvX291dDgocmVncy0+YXR0cltpXSwgMHgzQzEpOw0KICAg
ICAgICB9DQoNCiAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HUkNfUkVH
UzsgaSsrKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgaW9fb3V0OChp
LCAweDNDRSk7DQogICAgICAgICAgICAgICAgaW9fb3V0OChyZWdzLT5ncmFb
aV0sIDB4M0NGKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGZvciAoaSA9IDA7
IGkgPCBOVU1fU0VRX1JFR1M7IGkrKykNCiAgICAgICAgew0KICAgICAgICAg
ICAgICAgIGlvX291dDgoaSwgMHgzQzQpOw0KICAgICAgICAgICAgICAgIGlv
X291dDgocmVncy0+c2VxW2ldLCAweDNDNSk7DQogICAgICAgIH0NCn0NCg0K
DQoNCg0KLyoqDQogKiByaXZhX2JvYXJkX2xpc3RfYWRkDQogKiBAYm9hcmRf
bGlzdDogUm9vdCBub2RlIG9mIGxpc3Qgb2YgYm9hcmRzDQogKiBAbmV3X25v
ZGU6IE5ldyBub2RlIHRvIGJlIGFkZGVkDQogKg0KICogREVTQ1JJUFRJT046
DQogKiBBZGRzIEBuZXdfbm9kZSB0byB0aGUgbGlzdCByZWZlcmVuY2VkIGJ5
IEBib2FyZF9saXN0DQogKg0KICogUkVUVVJOUzoNCiAqIE5ldyByb290IG5v
ZGUNCiAqLw0Kc3RhdGljDQpzdHJ1Y3Qgcml2YWZiX2luZm8gKnJpdmFfYm9h
cmRfbGlzdF9hZGQoc3RydWN0IHJpdmFmYl9pbmZvICpib2FyZF9saXN0LA0K
CQkJCSBzdHJ1Y3Qgcml2YWZiX2luZm8gKm5ld19ub2RlKQ0Kew0KCXN0cnVj
dCByaXZhZmJfaW5mbyAqaV9wID0gYm9hcmRfbGlzdDsNCg0KCW5ld19ub2Rl
LT5uZXh0ID0gTlVMTDsNCg0KCWlmIChib2FyZF9saXN0ID09IE5VTEwpDQoJ
CXJldHVybiBuZXdfbm9kZTsNCg0KCXdoaWxlIChpX3AtPm5leHQgIT0gTlVM
TCkNCgkJaV9wID0gaV9wLT5uZXh0Ow0KCWlfcC0+bmV4dCA9IG5ld19ub2Rl
Ow0KDQoJcmV0dXJuIGJvYXJkX2xpc3Q7DQp9DQoNCg0KDQo=
---559023410-851401618-937577319=:9394--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/