[PATCH] isofs patch

Alexis Mikhailov (root@medinf.chuvashia.su)
Tue, 23 Dec 1997 20:08:19 +0300 (GMT+0300)


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.

---1463787052-712906519-882896899=:28373
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hello!

As it turned out, isofs filesystem (kernel 2.0.33) do not understand
directories with multiple entries for the same file as it should according to
ISO9660 standart.

--------
1 flags, with bits as follows:
bit value
------ ------------------------------------------
0 (LS) 0 for a norma1 file, 1 for a hidden file
1 0 for a file, 1 for a directory
2 0 [1 for an associated file]
3 0 [1 for record format specified]
4 0 [1 for permissions specified]
5 0
6 0
7 (MS) 0 [1 if not the final record for the file]
-----------

The patch, attached to this message, is my attemt to fix this problem. The
patch is for 2.0.33 kernel, but (IMHO) should go cleanly in earler versions.

Alexis

PS Sorry for bad English.

---1463787052-712906519-882896899=:28373
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="isofs.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.91.971223200819.28373B@medinf.chuvashia.su>
Content-Description:

ZGlmZiAtdSAtciBsaW51eC0yLjAub3JpZy9mcy9pc29mcy9kaXIuYyBsaW51
eC0yLjAvZnMvaXNvZnMvZGlyLmMNCi0tLSBsaW51eC0yLjAub3JpZy9mcy9p
c29mcy9kaXIuYwlNb24gSnVsIDI5IDE0OjU0OjU0IDE5OTYNCisrKyBsaW51
eC0yLjAvZnMvaXNvZnMvZGlyLmMJVHVlIERlYyAyMyAxMToxMDowMiAxOTk3
DQpAQCAtMTE2LDcgKzExNiw3IEBADQogCXVuc2lnbmVkIGludCBibG9jaywg
b2Zmc2V0Ow0KIAlpbnQgaW5vZGVfbnVtYmVyOw0KIAlzdHJ1Y3QgYnVmZmVy
X2hlYWQgKmJoOw0KLQlpbnQgbGVuLCBycmZsYWc7DQorCWludCBsZW4sIHJy
ZmxhZywgc3BsaXRfZmxhZyA9IDA7DQogCWludCBoaWdoX3NpZXJyYSA9IDA7
DQogCWNoYXIgKm5hbWU7DQogCXN0cnVjdCBpc29fZGlyZWN0b3J5X3JlY29y
ZCAqZGU7DQpAQCAtMTI5LDcgKzEyOSw3IEBADQogDQogCWlmICghKGJoID0g
YnJlYWRhKGlub2RlLT5pX2RldiwgYmxvY2ssIGJ1ZnNpemUsIGZpbHAtPmZf
cG9zLCBpbm9kZS0+aV9zaXplKSkpDQogCQlyZXR1cm4gMDsNCi0NCisJDQog
CXdoaWxlIChmaWxwLT5mX3BvcyA8IGlub2RlLT5pX3NpemUpIHsNCiAJCWlu
dCBkZV9sZW4sIG5leHRfb2Zmc2V0Ow0KICNpZmRlZiBERUJVRw0KQEAgLTI1
Myw4ICsyNTMsMTMgQEANCiAJCWlmIChycmZsYWcpIHsNCiAJCQkvKiBycmZs
YWcgPT0gMSBtZWFucyB0aGF0IHdlIGhhdmUgYSBuZXcgbmFtZSAoa21hbGxv
Y2VkKSAqLw0KIAkJCWlmIChycmZsYWcgPT0gMSkgew0KLQkJCQlycmZsYWcg
PSBmaWxsZGlyKGRpcmVudCwgbmFtZSwgbGVuLCBmaWxwLT5mX3BvcywgaW5v
ZGVfbnVtYmVyKTsNCi0JCQkJZGNhY2hlX2FkZChpbm9kZSwgbmFtZSwgbGVu
LCBpbm9kZV9udW1iZXIpOw0KKwkJCQlpZiAoIXNwbGl0X2ZsYWcpIHsNCisJ
CQkJCXJyZmxhZyA9IGZpbGxkaXIoZGlyZW50LCBuYW1lLCBsZW4sIGZpbHAt
PmZfcG9zLCBpbm9kZV9udW1iZXIpOw0KKwkJCQkJZGNhY2hlX2FkZChpbm9k
ZSwgbmFtZSwgbGVuLCBpbm9kZV9udW1iZXIpOw0KKwkJCQkJc3BsaXRfZmxh
ZyA9IDE7DQorCQkJCX0NCisJCQkJaWYgKCEoZGUtPmZsYWdzWzBdICYgMHg4
MCkpDQorCQkJCQlzcGxpdF9mbGFnID0gMDsNCiAJCQkJa2ZyZWUobmFtZSk7
IC8qIHRoaXMgd2FzIGFsbG9jYXRlZCBpbiBnZXRfcl9yX2ZpbGVuYW1lLi4g
Ki8NCiAJCQkJaWYgKHJyZmxhZyA8IDApDQogCQkJCQlicmVhazsNCkBAIC0y
NjUsMTcgKzI3MCwyNyBAQA0KIA0KIAkJaWYgKGlub2RlLT5pX3NiLT51Lmlz
b2ZzX3NiLnNfbWFwcGluZyA9PSAnbicpIHsNCiAJCQlsZW4gPSBpc29mc19u
YW1lX3RyYW5zbGF0ZShuYW1lLCBsZW4sIHRtcG5hbWUpOw0KLQkJCWlmIChm
aWxsZGlyKGRpcmVudCwgdG1wbmFtZSwgbGVuLCBmaWxwLT5mX3BvcywgaW5v
ZGVfbnVtYmVyKSA8IDApDQotCQkJCWJyZWFrOw0KLQkJCWRjYWNoZV9hZGQo
aW5vZGUsIHRtcG5hbWUsIGxlbiwgaW5vZGVfbnVtYmVyKTsNCisJCQlpZiAo
IXNwbGl0X2ZsYWcpIHsNCisJCQkJaWYgKGZpbGxkaXIoZGlyZW50LCB0bXBu
YW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm9kZV9udW1iZXIpIDwgMCkNCisJ
CQkJCWJyZWFrOw0KKwkJCQlkY2FjaGVfYWRkKGlub2RlLCB0bXBuYW1lLCBs
ZW4sIGlub2RlX251bWJlcik7DQorCQkJCXNwbGl0X2ZsYWcgPSAxOw0KKwkJ
CX0NCisJCQlpZiAoIShkZS0+ZmxhZ3NbMF0gJiAweDgwKSkNCisJCQkJc3Bs
aXRfZmxhZyA9IDA7DQogCQkJZmlscC0+Zl9wb3MgKz0gZGVfbGVuOw0KIAkJ
CWNvbnRpbnVlOw0KIAkJfQ0KIA0KLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBu
YW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm9kZV9udW1iZXIpIDwgMCkNCi0J
CQlicmVhazsNCi0NCi0JCWRjYWNoZV9hZGQoaW5vZGUsIG5hbWUsIGxlbiwg
aW5vZGVfbnVtYmVyKTsNCisJCWlmICghc3BsaXRfZmxhZykgew0KKwkJCWlm
IChmaWxsZGlyKGRpcmVudCwgbmFtZSwgbGVuLCBmaWxwLT5mX3BvcywgaW5v
ZGVfbnVtYmVyKSA8IDApDQorCQkJCWJyZWFrOw0KKwkJCQkNCisJCQlkY2Fj
aGVfYWRkKGlub2RlLCBuYW1lLCBsZW4sIGlub2RlX251bWJlcik7DQorCQkJ
c3BsaXRfZmxhZyA9IDE7DQorCQl9DQorCQlpZiAoIShkZS0+ZmxhZ3NbMF0g
JiAweDgwKSkNCisJCQlzcGxpdF9mbGFnID0gMDsNCiAJCWZpbHAtPmZfcG9z
ICs9IGRlX2xlbjsNCiAJCWNvbnRpbnVlOw0KIAl9DQpkaWZmIC11IC1yIGxp
bnV4LTIuMC5vcmlnL2ZzL2lzb2ZzL2lub2RlLmMgbGludXgtMi4wL2ZzL2lz
b2ZzL2lub2RlLmMNCi0tLSBsaW51eC0yLjAub3JpZy9mcy9pc29mcy9pbm9k
ZS5jCVRodSBPY3QgMjMgMTE6MDE6MDEgMTk5Nw0KKysrIGxpbnV4LTIuMC9m
cy9pc29mcy9pbm9kZS5jCVR1ZSBEZWMgMjMgMTE6MTI6MDYgMTk5Nw0KQEAg
LTU0LDcgKzU0LDcgQEANCiAJaXNvZnNfcmVhZF9pbm9kZSwNCiAJTlVMTCwJ
CQkvKiBub3RpZnlfY2hhbmdlICovDQogCU5VTEwsCQkJLyogd3JpdGVfaW5v
ZGUgKi8NCi0JTlVMTCwJCQkvKiBwdXRfaW5vZGUgKi8NCisJaXNvZnNfcHV0
X2lub2RlLA0KIAlpc29mc19wdXRfc3VwZXIsDQogCU5VTEwsCQkJLyogd3Jp
dGVfc3VwZXIgKi8NCiAJaXNvZnNfc3RhdGZzLA0KQEAgLTQzMiw2ICs0MzIs
NyBAQA0KIAlzLT5zX21vdW50ZWQgPSBpZ2V0KHMsIChpc29udW1fNzMzKHJv
b3RwLT5leHRlbnQpICsgDQogCQkJICAgIGlzb251bV83MTEocm9vdHAtPmV4
dF9hdHRyX2xlbmd0aCkpDQogCQkJCTw8IHMgLT4gdS5pc29mc19zYi5zX2xv
Z196b25lX3NpemUpOw0KKw0KIAl1bmxvY2tfc3VwZXIocyk7DQogDQogCWlm
ICghKHMtPnNfbW91bnRlZCkpIHsNCkBAIC00NzAsNyArNDcxLDExIEBADQog
DQogaW50IGlzb2ZzX2JtYXAoc3RydWN0IGlub2RlICogaW5vZGUsaW50IGJs
b2NrKQ0KIHsNCi0NCisJaW50IGk7DQorCWxvbmcgb2Zmc2V0Ow0KKwlsb25n
IHNpemUgPSBpbm9kZS0+aV9zaXplOw0KKwlzdHJ1Y3QgZXh0ZW50X3N0ciAq
ZXh0Ow0KKwkNCiAJaWYgKGJsb2NrPDApIHsNCiAJCXByaW50aygiX2lzb2Zz
X2JtYXA6IGJsb2NrPDAiKTsNCiAJCXJldHVybiAwOw0KQEAgLTUwMiw4ICs1
MDcsMjEgQEANCiAJICAgICAgfQ0KIAkgICAgcmV0dXJuIDA7DQogCSAgfQ0K
KwkNCisJb2Zmc2V0ID0gYmxvY2sgPDwgSVNPRlNfQlVGRkVSX0JJVFMoaW5v
ZGUpOw0KIA0KLQlyZXR1cm4gKGlub2RlLT51Lmlzb2ZzX2kuaV9maXJzdF9l
eHRlbnQgPj4gSVNPRlNfQlVGRkVSX0JJVFMoaW5vZGUpKSArIGJsb2NrOw0K
Kwlmb3IgKGV4dCA9IGlub2RlLT51Lmlzb2ZzX2kuaV9maXJzdF9leHRlbnQ7
IGV4dCAhPSBOVUxMOyBleHQgPSBleHQtPm5leHQpIHsNCisJCWZvciAoaSA9
IDA7IGkgPCAyOyBpKyspIHsNCisJCQlpZiAob2Zmc2V0ID49IDAgJiYgb2Zm
c2V0IDwgZXh0LT5leHRlbnRfc2l6ZVtpXSkNCisJCQkJcmV0dXJuIChleHQt
PmV4dGVudFtpXSA+PiBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpICsgYmxv
Y2s7DQorCQkJb2Zmc2V0IC09IGV4dC0+ZXh0ZW50X3NpemVbaV07DQorCQkJ
YmxvY2sgLT0gKGV4dC0+ZXh0ZW50X3NpemVbaV0gPj4gSVNPRlNfQlVGRkVS
X0JJVFMoaW5vZGUpKTsNCisJCQlzaXplIC09IGV4dC0+ZXh0ZW50X3NpemVb
aV07DQorCQkJaWYgKG9mZnNldCA9PSAwICYmIHNpemUgPT0gMCkNCisJCQkJ
cmV0dXJuIChleHQtPmV4dGVudFtpXSA+PiBJU09GU19CVUZGRVJfQklUUyhp
bm9kZSkpICsgYmxvY2s7DQorCQl9DQorCX0NCisJcmV0dXJuIChpbm9kZS0+
dS5pc29mc19pLmlfZmlyc3RfZXh0ZW50LT5leHRlbnRbMF0gPj4gSVNPRlNf
QlVGRkVSX0JJVFMoaW5vZGUpKSArIGJsb2NrOw0KIH0NCiANCiANCkBAIC01
MTcsNiArNTM1LDIyIEBADQogCX0NCiB9DQogDQordm9pZCBjbGVhcl9leHQo
c3RydWN0IGV4dGVudF9zdHIgKmV4dCkNCit7DQorCXN0cnVjdCBleHRlbnRf
c3RyICp0bXA7DQorCQ0KKwlmb3IgKHRtcCA9IGV4dDsgZXh0ICE9IE5VTEw7
IHRtcCA9IGV4dCkgew0KKwkJZXh0ID0gdG1wLT5uZXh0Ow0KKwkJa2ZyZWUo
dG1wKTsNCisJfQ0KK30NCisNCit2b2lkIGlzb2ZzX3B1dF9pbm9kZShzdHJ1
Y3QgaW5vZGUgKmlub2RlKQ0KK3sNCisJY2xlYXJfZXh0KGlub2RlLT51Lmlz
b2ZzX2kuaV9maXJzdF9leHRlbnQpOw0KKwlpbm9kZS0+dS5pc29mc19pLmlf
Zmlyc3RfZXh0ZW50ID0gTlVMTDsNCit9DQorDQogdm9pZCBpc29mc19yZWFk
X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQ0KIHsNCiAJdW5zaWduZWQg
bG9uZyBidWZzaXplID0gSVNPRlNfQlVGRkVSX1NJWkUoaW5vZGUpOw0KQEAg
LTUyOCwxOTAgKzU2MiwyNTkgQEANCiAJaW50IGJsb2NrOw0KIAlpbnQgdm9s
dW1lX3NlcV9ubyA7DQogCWludCBpOw0KLQ0KLQlibG9jayA9IGlub2RlLT5p
X2lubyA+PiBJU09GU19CVUZGRVJfQklUUyhpbm9kZSk7DQotCWlmICghKGJo
PWJyZWFkKGlub2RlLT5pX2RldixibG9jaywgYnVmc2l6ZSkpKSB7DQotCSAg
cHJpbnRrKCJ1bmFibGUgdG8gcmVhZCBpLW5vZGUgYmxvY2siKTsNCi0JICBn
b3RvIGZhaWw7DQotCX0NCisJdW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS0+
aV9pbm87DQorCWludCByZXBlYXQgPSAwOw0KKwlvZmZfdCBzaXplOw0KKwl1
bnNpZ25lZCBjaGFyIGZsYWdzOw0KKwlpbnQgb2Zmc2V0Ow0KKwlzdHJ1Y3Qg
ZXh0ZW50X3N0ciAqZXh0ID0gTlVMTCwgKmJlZ19leHQgPSBOVUxMOw0KIAkN
Ci0JcG50ID0gKCh1bnNpZ25lZCBjaGFyICopIGJoLT5iX2RhdGENCi0JICAg
ICAgICsgKGlub2RlLT5pX2lubyAmIChidWZzaXplIC0gMSkpKTsNCi0JcmF3
X2lub2RlID0gKChzdHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKikgcG50
KTsNCisJaW5vZGUtPmlfc2l6ZSA9IDA7DQogCWhpZ2hfc2llcnJhID0gaW5v
ZGUtPmlfc2ItPnUuaXNvZnNfc2Iuc19oaWdoX3NpZXJyYTsNCisJZm9yKHJl
cGVhdCA9IDA7IDsgcmVwZWF0KyspIHsNCisJCWJsb2NrID0gaW5vID4+IElT
T0ZTX0JVRkZFUl9CSVRTKGlub2RlKTsNCisJCW9mZnNldCA9IGlubyAmIChi
dWZzaXplIC0gMSk7DQorCQlpZiAoIShiaD1icmVhZChpbm9kZS0+aV9kZXYs
YmxvY2ssIGJ1ZnNpemUpKSkgew0KKwkJICBwcmludGsoInVuYWJsZSB0byBy
ZWFkIGktbm9kZSBibG9jayIpOw0KKwkJICBnb3RvIGZhaWw7DQorCQl9DQog
DQotCWlmICgoaW5vZGUtPmlfaW5vICYgKGJ1ZnNpemUgLSAxKSkgKyAqcG50
ID4gYnVmc2l6ZSl7DQotCSAgICAgICAgaW50IGZyYWcxLCBvZmZzZXQ7DQor
CQlwbnQgPSAoKHVuc2lnbmVkIGNoYXIgKikgYmgtPmJfZGF0YSArIChpbm8g
JiAoYnVmc2l6ZSAtIDEpKSk7DQorCQlyYXdfaW5vZGUgPSAoKHN0cnVjdCBp
c29fZGlyZWN0b3J5X3JlY29yZCAqKSBwbnQpOw0KIA0KLQkJb2Zmc2V0ID0g
KGlub2RlLT5pX2lubyAmIChidWZzaXplIC0gMSkpOw0KLQkJZnJhZzEgPSBi
dWZzaXplIC0gb2Zmc2V0Ow0KLQkgICAgICAgIGNwbnQgPSBrbWFsbG9jKCpw
bnQsR0ZQX0tFUk5FTCk7DQotCQlpZiAoY3BudCA9PSBOVUxMKSB7DQotCQkJ
cHJpbnRrKEtFUk5fSU5GTyAiTm9NZW0gSVNPIGlub2RlICVsdVxuIixpbm9k
ZS0+aV9pbm8pOw0KLQkJCWJyZWxzZShiaCk7DQotCQkJZ290byBmYWlsOw0K
LQkJfQ0KLQkJbWVtY3B5KGNwbnQsIGJoLT5iX2RhdGEgKyBvZmZzZXQsIGZy
YWcxKTsNCi0JCWJyZWxzZShiaCk7DQotCQlpZiAoIShiaCA9IGJyZWFkKGlu
b2RlLT5pX2RldiwrK2Jsb2NrLCBidWZzaXplKSkpIHsNCi0JCQlrZnJlZShj
cG50KTsNCi0JCQlwcmludGsoInVuYWJsZSB0byByZWFkIGktbm9kZSBibG9j
ayIpOw0KLQkJCWdvdG8gZmFpbDsNCisJCWlmICgqcG50ID09IDApIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVsc2UoYmgpOw0KKyAJCQlpbm8g
PSAoKGlubyAmIH4oSVNPRlNfQkxPQ0tfU0laRSAtIDEpKQ0KKyAJCQkJKyBJ
U09GU19CTE9DS19TSVpFKTsNCisJCQlibG9jayA9IGlubyA+PiBJU09GU19C
VUZGRVJfQklUUyhpbm9kZSk7DQorCQkJb2Zmc2V0ID0gMDsNCisJCQlpZiAo
IShiaCA9IGJyZWFkKGlub2RlLT5pX2RldixibG9jaywgYnVmc2l6ZSkpKSB7
DQorCQkJCXByaW50aygidW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrIik7
DQorCQkJCWdvdG8gZmFpbDsNCisJCQl9DQorCQkJcG50ID0gKHVuc2lnbmVk
IGNoYXIgKikgYmgtPmJfZGF0YTsNCisJCQlyYXdfaW5vZGUgPSAoKHN0cnVj
dCBpc29fZGlyZWN0b3J5X3JlY29yZCAqKSBwbnQpOw0KIAkJfQ0KLQkJb2Zm
c2V0ICs9ICpwbnQgLSBidWZzaXplOw0KLQkJbWVtY3B5KChjaGFyICopY3Bu
dCtmcmFnMSwgYmgtPmJfZGF0YSwgb2Zmc2V0KTsNCi0JCXBudCA9ICgodW5z
aWduZWQgY2hhciAqKSBjcG50KTsNCi0JCXJhd19pbm9kZSA9ICgoc3RydWN0
IGlzb19kaXJlY3RvcnlfcmVjb3JkICopIHBudCk7DQotCX0NCisJDQorCQlp
ZiAob2Zmc2V0ICsgKnBudCA+IGJ1ZnNpemUpIHsNCisJICAgICAgICBpbnQg
ZnJhZzE7DQogDQotCWlmIChyYXdfaW5vZGUtPmZsYWdzWy1oaWdoX3NpZXJy
YV0gJiAyKSB7DQotCQlpbm9kZS0+aV9tb2RlID0gU19JUlVHTyB8IFNfSVhV
R08gfCBTX0lGRElSOw0KLQkJaW5vZGUtPmlfbmxpbmsgPSAxOyAvKiBTZXQg
dG8gMS4gIFdlIGtub3cgdGhlcmUgYXJlIDIsIGJ1dA0KLQkJCQkgICAgICAg
dGhlIGZpbmQgdXRpbGl0eSB0cmllcyB0byBvcHRpbWl6ZQ0KLQkJCQkgICAg
ICAgaWYgaXQgaXMgMiwgYW5kIGl0IHNjcmV3cyB1cC4gIEl0IGlzDQotCQkJ
CSAgICAgICBlYXNpZXIgdG8gZ2l2ZSAxIHdoaWNoIHRlbGxzIGZpbmQgdG8N
Ci0JCQkJICAgICAgIGRvIGl0IHRoZSBoYXJkIHdheS4gKi8NCi0JfSBlbHNl
IHsNCi0JCWlub2RlLT5pX21vZGUgPSBpbm9kZS0+aV9zYi0+dS5pc29mc19z
Yi5zX21vZGU7IC8qIEV2ZXJ5Ym9keSBnZXRzIHRvIHJlYWQgdGhlIGZpbGUu
ICovDQotCQlpbm9kZS0+aV9ubGluayA9IDE7DQotCSAgICAgICAgaW5vZGUt
PmlfbW9kZSB8PSBTX0lGUkVHOw0KKwkJCWZyYWcxID0gYnVmc2l6ZSAtIG9m
ZnNldDsNCisJCSAgICAgICAgY3BudCA9IGttYWxsb2MoKnBudCxHRlBfS0VS
TkVMKTsNCisJCQlpZiAoY3BudCA9PSBOVUxMKSB7DQorCQkJCXByaW50ayhL
RVJOX0lORk8gIk5vTWVtIElTTyBpbm9kZSAlbHVcbiIsaW5vKTsNCisJCQkJ
YnJlbHNlKGJoKTsNCisJCQkJZ290byBmYWlsOw0KKwkJCX0NCisJCQlpZiAo
ZnJhZzEgIT0gMCkNCisJCQkJbWVtY3B5KGNwbnQsIGJoLT5iX2RhdGEgKyBv
ZmZzZXQsIGZyYWcxKTsNCisJCQlvZmZzZXQgPSAqcG50IC0gZnJhZzE7DQor
CQkJYnJlbHNlKGJoKTsNCisJCQlpZiAoIShiaCA9IGJyZWFkKGlub2RlLT5p
X2RldiwrK2Jsb2NrLCBidWZzaXplKSkpIHsNCisJCQkJa2ZyZWUoY3BudCk7
DQorCQkJCXByaW50aygidW5hYmxlIHRvIHJlYWQgaS1ub2RlIGJsb2NrIik7
DQorCQkJCWdvdG8gZmFpbDsNCisJCQl9DQorCQkJbWVtY3B5KChjaGFyICop
Y3BudCtmcmFnMSwgYmgtPmJfZGF0YSwgb2Zmc2V0KTsNCisJCQlwbnQgPSAo
KHVuc2lnbmVkIGNoYXIgKikgY3BudCk7DQorCQkJcmF3X2lub2RlID0gKChz
dHJ1Y3QgaXNvX2RpcmVjdG9yeV9yZWNvcmQgKikgcG50KTsNCisJCQlvZmZz
ZXQgLT0gKnBudDsgLyogZm9yIGluY3JlbWVudCBpbiB0aGUgZW5kIG9mIGxv
b3AgKi8NCisJCX0NCisJCQ0KKwkJZmxhZ3MgPSByYXdfaW5vZGUtPmZsYWdz
Wy1oaWdoX3NpZXJyYV07DQorDQorCQlpZiAoIXJlcGVhdCkgew0KKwkJCWlm
IChyYXdfaW5vZGUtPmZsYWdzWy1oaWdoX3NpZXJyYV0gJiAyKSB7DQorCQkJ
CWlub2RlLT5pX21vZGUgPSBTX0lSVUdPIHwgU19JWFVHTyB8IFNfSUZESVI7
DQorCQkJCWlub2RlLT5pX25saW5rID0gMTsgLyogU2V0IHRvIDEuICBXZSBr
bm93IHRoZXJlIGFyZSAyLCBidXQNCisJCQkJCQkgICAgICAgdGhlIGZpbmQg
dXRpbGl0eSB0cmllcyB0byBvcHRpbWl6ZQ0KKwkJCQkJCSAgICAgICBpZiBp
dCBpcyAyLCBhbmQgaXQgc2NyZXdzIHVwLiAgSXQgaXMNCisJCQkJICAgIAkJ
ICAgZWFzaWVyIHRvIGdpdmUgMSB3aGljaCB0ZWxscyBmaW5kIHRvDQorCQkJ
CQkgICAgCSAgIGRvIGl0IHRoZSBoYXJkIHdheS4gKi8NCisJCQl9IGVsc2Ug
ew0KKwkJCQlpbm9kZS0+aV9tb2RlID0gaW5vZGUtPmlfc2ItPnUuaXNvZnNf
c2Iuc19tb2RlOyAvKiBFdmVyeWJvZHkgZ2V0cyB0byByZWFkIHRoZSBmaWxl
LiAqLw0KKwkJCQlpbm9kZS0+aV9ubGluayA9IDE7DQorCSAgICAgICAgCWlu
b2RlLT5pX21vZGUgfD0gU19JRlJFRzsNCiAvKiBJZiB0aGVyZSBhcmUgbm8g
cGVyaW9kcyBpbiB0aGUgbmFtZSwgdGhlbiBzZXQgdGhlIGV4ZWN1dGUgcGVy
bWlzc2lvbiBiaXQgKi8NCi0JCWZvcihpPTA7IGk8IHJhd19pbm9kZS0+bmFt
ZV9sZW5bMF07IGkrKykNCi0JCQlpZihyYXdfaW5vZGUtPm5hbWVbaV09PScu
JyB8fCByYXdfaW5vZGUtPm5hbWVbaV09PSc7JykNCi0JCQkJYnJlYWs7DQot
CQlpZihpID09IHJhd19pbm9kZS0+bmFtZV9sZW5bMF0gfHwgcmF3X2lub2Rl
LT5uYW1lW2ldID09ICc7JykgDQotCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lY
VUdPOyAvKiBleGVjdXRlIHBlcm1pc3Npb24gKi8NCi0JfQ0KLQlpbm9kZS0+
aV91aWQgPSBpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5zX3VpZDsNCi0JaW5v
ZGUtPmlfZ2lkID0gaW5vZGUtPmlfc2ItPnUuaXNvZnNfc2Iuc19naWQ7DQot
CWlub2RlLT5pX3NpemUgPSBpc29udW1fNzMzIChyYXdfaW5vZGUtPnNpemUp
Ow0KLQ0KLQkvKiBUaGVyZSBhcmUgZGVmZWN0aXZlIGRpc2NzIG91dCB0aGVy
ZSAtIHdlIGRvIHRoaXMgdG8gcHJvdGVjdA0KLQkgICBvdXJzZWx2ZXMuICBB
IGNkcm9tIHdpbGwgbmV2ZXIgY29udGFpbiBtb3JlIHRoYW4gODAwTWIgKi8N
Ci0JaWYoKGlub2RlLT5pX3NpemUgPCAwIHx8IGlub2RlLT5pX3NpemUgPiA4
MDAwMDAwMDApICYmDQotCSAgICBpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5z
X2NydWZ0ID09ICduJykgew0KLQkgIHByaW50aygiV2FybmluZzogZGVmZWN0
aXZlIGNkcm9tLiAgRW5hYmxpbmcgXCJjcnVmdFwiIG1vdW50IG9wdGlvbi5c
biIpOw0KLQkgIGlub2RlLT5pX3NiLT51Lmlzb2ZzX3NiLnNfY3J1ZnQgPSAn
eSc7DQotCX0NCisJCQkJZm9yKGk9MDsgaTwgcmF3X2lub2RlLT5uYW1lX2xl
blswXTsgaSsrKQ0KKwkJCQkJaWYocmF3X2lub2RlLT5uYW1lW2ldPT0nLicg
fHwgcmF3X2lub2RlLT5uYW1lW2ldPT0nOycpDQorCQkJCQkJYnJlYWs7DQor
CQkJCWlmKGkgPT0gcmF3X2lub2RlLT5uYW1lX2xlblswXSB8fCByYXdfaW5v
ZGUtPm5hbWVbaV0gPT0gJzsnKSANCisJCQkJCWlub2RlLT5pX21vZGUgfD0g
U19JWFVHTzsgLyogZXhlY3V0ZSBwZXJtaXNzaW9uICovDQorCQkJfQ0KKwkJ
CWlub2RlLT5pX3VpZCA9IGlub2RlLT5pX3NiLT51Lmlzb2ZzX3NiLnNfdWlk
Ow0KKwkJCWlub2RlLT5pX2dpZCA9IGlub2RlLT5pX3NiLT51Lmlzb2ZzX3Ni
LnNfZ2lkOw0KKwkJCX0NCisJCQkNCisJCXNpemUgPSBpc29udW1fNzMzIChy
YXdfaW5vZGUtPnNpemUpOw0KKw0KKwkJLyogVGhlcmUgYXJlIGRlZmVjdGl2
ZSBkaXNjcyBvdXQgdGhlcmUgLSB3ZSBkbyB0aGlzIHRvIHByb3RlY3QNCisJ
CSAgIG91cnNlbHZlcy4gIEEgY2Ryb20gd2lsbCBuZXZlciBjb250YWluIG1v
cmUgdGhhbiA4MDBNYiAqLw0KKwkJaWYoKHNpemUgPCAwIHx8IHNpemUgPiA4
MDAwMDAwMDApICYmDQorCQkgICAgaW5vZGUtPmlfc2ItPnUuaXNvZnNfc2Iu
c19jcnVmdCA9PSAnbicpIHsNCisJCSAgcHJpbnRrKCJXYXJuaW5nOiBkZWZl
Y3RpdmUgY2Ryb20uICBFbmFibGluZyBcImNydWZ0XCIgbW91bnQgb3B0aW9u
LlxuIik7DQorCQkgIGlub2RlLT5pX3NiLT51Lmlzb2ZzX3NiLnNfY3J1ZnQg
PSAneSc7DQorCQl9DQogDQogLyogU29tZSBkaXBzaGl0IGRlY2lkZWQgdG8g
c3RvcmUgc29tZSBvdGhlciBiaXQgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGhp
Z2gNCiAgICBieXRlIG9mIHRoZSBmaWxlIGxlbmd0aC4gIENhdGNoIHRoaXMg
YW5kIGhvbGxlci4gIFdBUk5JTkc6IHRoaXMgd2lsbCBtYWtlDQogICAgaXQg
aW1wb3NzaWJsZSBmb3IgYSBmaWxlIHRvIGJlID4gMTZNYiBvbiB0aGUgQ0RS
T00hISEqLw0KIA0KLQlpZihpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5zX2Ny
dWZ0ID09ICd5JyAmJiANCi0JICAgaW5vZGUtPmlfc2l6ZSAmIDB4ZmYwMDAw
MDApew0KLS8qCSAgcHJpbnRrKCJJbGxlZ2FsIGZvcm1hdCBvbiBjZHJvbS4g
IFBlc3RlciBtYW51ZmFjdHVyZXIuXG4iKTsgKi8NCi0JICBpbm9kZS0+aV9z
aXplICY9IDB4MDBmZmZmZmY7DQotCX0NCisJCWlmKGlub2RlLT5pX3NiLT51
Lmlzb2ZzX3NiLnNfY3J1ZnQgPT0gJ3knICYmIA0KKwkJICAgc2l6ZSAmIDB4
ZmYwMDAwMDApew0KKy8qCQkgIHByaW50aygiSWxsZWdhbCBmb3JtYXQgb24g
Y2Ryb20uICBQZXN0ZXIgbWFudWZhY3R1cmVyLlxuIik7ICovDQorCQkgIHNp
emUgJj0gMHgwMGZmZmZmZjsNCisJCX0NCisNCisJCWlub2RlLT5pX3NpemUg
Kz0gc2l6ZTsNCiAJDQotCWlmIChyYXdfaW5vZGUtPmludGVybGVhdmVbMF0p
IHsNCi0JCXByaW50aygiSW50ZXJsZWF2ZWQgZmlsZXMgbm90ICh5ZXQpIHN1
cHBvcnRlZC5cbiIpOw0KLQkJaW5vZGUtPmlfc2l6ZSA9IDA7DQotCX0NCisJ
CWlmIChyYXdfaW5vZGUtPmludGVybGVhdmVbMF0pIHsNCisJCQlwcmludGso
IkludGVybGVhdmVkIGZpbGVzIG5vdCAoeWV0KSBzdXBwb3J0ZWQuXG4iKTsN
CisJCQlpbm9kZS0+aV9zaXplID0gMDsNCisJCX0NCiANCi0JLyogSSBoYXZl
IG5vIGlkZWEgd2hhdCBmaWxlX3VuaXRfc2l6ZSBpcyB1c2VkIGZvciwgc28N
Ci0JICAgd2Ugd2lsbCBmbGFnIGl0IGZvciBub3cgKi8NCi0JaWYocmF3X2lu
b2RlLT5maWxlX3VuaXRfc2l6ZVswXSAhPSAwKXsNCi0JCXByaW50aygiRmls
ZSB1bml0IHNpemUgIT0gMCBmb3IgSVNPIGZpbGUgKCVsZCkuXG4iLGlub2Rl
LT5pX2lubyk7DQotCX0NCisJCS8qIEkgaGF2ZSBubyBpZGVhIHdoYXQgZmls
ZV91bml0X3NpemUgaXMgdXNlZCBmb3IsIHNvDQorCQkgICB3ZSB3aWxsIGZs
YWcgaXQgZm9yIG5vdyAqLw0KKwkJaWYocmF3X2lub2RlLT5maWxlX3VuaXRf
c2l6ZVswXSAhPSAwKXsNCisJCQlwcmludGsoIkZpbGUgdW5pdCBzaXplICE9
IDAgZm9yIElTTyBmaWxlICglbGQpLlxuIixpbm8pOw0KKwkJfQ0KIA0KLQkv
KiBJIGhhdmUgbm8gaWRlYSB3aGF0IG90aGVyIGZsYWcgYml0cyBhcmUgdXNl
ZCBmb3IsIHNvDQotCSAgIHdlIHdpbGwgZmxhZyBpdCBmb3Igbm93ICovDQor
CQkvKiBJIGhhdmUgbm8gaWRlYSB3aGF0IG90aGVyIGZsYWcgYml0cyBhcmUg
dXNlZCBmb3IsIHNvDQorCQkgICB3ZSB3aWxsIGZsYWcgaXQgZm9yIG5vdyAq
Lw0KICNpZmRlZiBERUJVRw0KLQlpZigocmF3X2lub2RlLT5mbGFnc1staGln
aF9zaWVycmFdICYgfjIpIT0gMCl7DQotCQlwcmludGsoIlVudXN1YWwgZmxh
ZyBzZXR0aW5ncyBmb3IgSVNPIGZpbGUgKCVsZCAleCkuXG4iLA0KLQkJICAg
ICAgIGlub2RlLT5pX2lubywgcmF3X2lub2RlLT5mbGFnc1staGlnaF9zaWVy
cmFdKTsNCi0JfQ0KKwkJaWYoKHJhd19pbm9kZS0+ZmxhZ3NbLWhpZ2hfc2ll
cnJhXSAmIH4weDgyKSE9IDApew0KKwkJCXByaW50aygiVW51c3VhbCBmbGFn
IHNldHRpbmdzIGZvciBJU08gZmlsZSAoJWxkICV4KS5cbiIsDQorCQkJICAg
ICAgIGlubywgcmF3X2lub2RlLT5mbGFnc1staGlnaF9zaWVycmFdKTsNCisJ
CX0NCiAjZW5kaWYNCiANCiAjaWZkZWYgREVCVUcNCi0JcHJpbnRrKCJHZXQg
aW5vZGUgJWQ6ICVkICVkOiAlZFxuIixpbm9kZS0+aV9pbm8sIGJsb2NrLCAN
Ci0JICAgICAgICgoaW50KXBudCkgJiAweDNmZiwgaW5vZGUtPmlfc2l6ZSk7
DQorCQlwcmludGsoIkdldCBpbm9kZSAleDogJXggJXggJXg6ICVkXG4iLGlu
bywgYmxvY2ssIG9mZnNldCwNCisJCSAgICAgICAoKGludClwbnQpICYgMHgz
ZmYsIGlub2RlLT5pX3NpemUpOw0KICNlbmRpZg0KLQkNCi0JaW5vZGUtPmlf
bXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gDQot
CSAgaXNvX2RhdGUocmF3X2lub2RlLT5kYXRlLCBoaWdoX3NpZXJyYSk7DQog
DQotCWlub2RlLT51Lmlzb2ZzX2kuaV9maXJzdF9leHRlbnQgPSAoaXNvbnVt
XzczMyAocmF3X2lub2RlLT5leHRlbnQpICsgDQotCQkJCQkgICBpc29udW1f
NzExIChyYXdfaW5vZGUtPmV4dF9hdHRyX2xlbmd0aCkpDQotCSAgPDwgaW5v
ZGUgLT4gaV9zYiAtPiB1Lmlzb2ZzX3NiLnNfbG9nX3pvbmVfc2l6ZTsNCi0J
DQotCWlub2RlLT51Lmlzb2ZzX2kuaV9iYWNrbGluayA9IDB4ZmZmZmZmZmY7
IC8qIFdpbGwgYmUgdXNlZCBmb3IgcHJldmlvdXMgZGlyZWN0b3J5ICovDQot
CXN3aXRjaCAoaW5vZGUtPmlfc2ItPnUuaXNvZnNfc2Iuc19jb252ZXJzaW9u
KXsNCi0JY2FzZSAnYSc6DQotCSAgaW5vZGUtPnUuaXNvZnNfaS5pX2ZpbGVf
Zm9ybWF0ID0gSVNPRlNfRklMRV9VTktOT1dOOyAvKiBGaWxlIHR5cGUgKi8N
Ci0JICBicmVhazsNCi0JY2FzZSAnYic6DQotCSAgaW5vZGUtPnUuaXNvZnNf
aS5pX2ZpbGVfZm9ybWF0ID0gSVNPRlNfRklMRV9CSU5BUlk7IC8qIEZpbGUg
dHlwZSAqLw0KLQkgIGJyZWFrOw0KLQljYXNlICd0JzoNCi0JICBpbm9kZS0+
dS5pc29mc19pLmlfZmlsZV9mb3JtYXQgPSBJU09GU19GSUxFX1RFWFQ7IC8q
IEZpbGUgdHlwZSAqLw0KLQkgIGJyZWFrOw0KLQljYXNlICdtJzoNCi0JICBp
bm9kZS0+dS5pc29mc19pLmlfZmlsZV9mb3JtYXQgPSBJU09GU19GSUxFX1RF
WFRfTTsgLyogRmlsZSB0eXBlICovDQotCSAgYnJlYWs7DQotCX0NCisJCWlm
IChleHQgPT0gTlVMTCkgew0KKwkJCWJlZ19leHQgPSBleHQgPSAoc3RydWN0
IGV4dGVudF9zdHIgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0ZW50X3N0
ciksIEdGUF9LRVJORUwpOw0KKwkJCWlmIChleHQgPT0gTlVMTCkgew0KKwkJ
CQlwcmludGsoIk5vIG1lbW9yeSBmb3IgZXh0ZW50IGluZm9cbiIpOw0KKwkJ
CQlnb3RvIGZhaWw7DQorCQkJfQ0KKwkJCW1lbXNldChleHQsIDAsIHNpemVv
ZihzdHJ1Y3QgZXh0ZW50X3N0cikpOw0KKwkJfQ0KKwkJaWYgKGV4dC0+ZXh0
ZW50WzBdID09IDAgJiYgZXh0LT5leHRlbnRfc2l6ZVswXSA9PSAwKSB7DQor
CQkJaSA9IDA7DQorCQl9IGVsc2UgaWYgKGV4dC0+ZXh0ZW50WzFdID09IDAg
JiYgZXh0LT5leHRlbnRfc2l6ZVsxXSA9PSAwKSB7DQorCQkJaSA9IDE7DQor
CQl9IGVsc2Ugew0KKwkJCXN0cnVjdCBleHRlbnRfc3RyICp0bXAgPSAoc3Ry
dWN0IGV4dGVudF9zdHIgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXh0ZW50
X3N0ciksIEdGUF9LRVJORUwpOw0KKwkJCWlmICh0bXAgPT0gTlVMTCkgew0K
KwkJCQlwcmludGsoIk5vIG1lbW9yeSBmb3IgZXh0ZW50IGluZm9cbiIpOw0K
KwkJCQlnb3RvIGZhaWw7DQorCQkJfQ0KKwkJCW1lbXNldCh0bXAsIDAsIHNp
emVvZihzdHJ1Y3QgZXh0ZW50X3N0cikpOw0KKwkJCWV4dC0+bmV4dCA9IHRt
cDsNCisJCQlleHQgPSB0bXA7DQorCQkJaSA9IDA7DQorCQl9DQorCQlleHQt
PmV4dGVudFtpXSA9IChpc29udW1fNzMzIChyYXdfaW5vZGUtPmV4dGVudCkg
KyANCisJCQlpc29udW1fNzExIChyYXdfaW5vZGUtPmV4dF9hdHRyX2xlbmd0
aCkpDQorCQkgIDw8IGlub2RlIC0+IGlfc2IgLT4gdS5pc29mc19zYi5zX2xv
Z196b25lX3NpemU7DQorCQlleHQtPmV4dGVudF9zaXplW2ldID0gc2l6ZTsN
CisJCQ0KKyNpZmRlZiBERUJVRw0KKwkJcHJpbnRrKCJJbm9kZTogJXggZXh0
ZW50OiAleFxuIixpbm8sIGV4dC0+ZXh0ZW50W2ldKTsNCisjZW5kaWYNCisJ
DQorCQlpZiAoIXJlcGVhdCkgew0KKwkJCWlub2RlLT5pX210aW1lID0gaW5v
ZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IA0KKwkJCSAgaXNvX2Rh
dGUocmF3X2lub2RlLT5kYXRlLCBoaWdoX3NpZXJyYSk7DQorDQorCQkJaW5v
ZGUtPnUuaXNvZnNfaS5pX2JhY2tsaW5rID0gMHhmZmZmZmZmZjsgLyogV2ls
bCBiZSB1c2VkIGZvciBwcmV2aW91cyBkaXJlY3RvcnkgKi8NCisJCQlzd2l0
Y2ggKGlub2RlLT5pX3NiLT51Lmlzb2ZzX3NiLnNfY29udmVyc2lvbil7DQor
CQkJY2FzZSAnYSc6DQorCQkJICBpbm9kZS0+dS5pc29mc19pLmlfZmlsZV9m
b3JtYXQgPSBJU09GU19GSUxFX1VOS05PV047IC8qIEZpbGUgdHlwZSAqLw0K
KwkJCSAgYnJlYWs7DQorCQkJY2FzZSAnYic6DQorCQkJICBpbm9kZS0+dS5p
c29mc19pLmlfZmlsZV9mb3JtYXQgPSBJU09GU19GSUxFX0JJTkFSWTsgLyog
RmlsZSB0eXBlICovDQorCQkJICBicmVhazsNCisJCQljYXNlICd0JzoNCisJ
CQkgIGlub2RlLT51Lmlzb2ZzX2kuaV9maWxlX2Zvcm1hdCA9IElTT0ZTX0ZJ
TEVfVEVYVDsgLyogRmlsZSB0eXBlICovDQorCQkJICBicmVhazsNCisJCQlj
YXNlICdtJzoNCisJCQkgIGlub2RlLT51Lmlzb2ZzX2kuaV9maWxlX2Zvcm1h
dCA9IElTT0ZTX0ZJTEVfVEVYVF9NOyAvKiBGaWxlIHR5cGUgKi8NCisJCQkg
IGJyZWFrOw0KKwkJCX0NCiANCiAvKiBOb3cgdGVzdCBmb3IgcG9zc2libGUg
Um9jayBSaWRnZSBleHRlbnNpb25zIHdoaWNoIHdpbGwgb3ZlcnJpZGUgc29t
ZSBvZg0KICAgIHRoZXNlIG51bWJlcnMgaW4gdGhlIGlub2RlIHN0cnVjdHVy
ZS4gKi8NCiANCi0JaWYgKCFoaWdoX3NpZXJyYSkgew0KLQkgIHBhcnNlX3Jv
Y2tfcmlkZ2VfaW5vZGUocmF3X2lub2RlLCBpbm9kZSk7DQotCSAgLyogaG1t
Li5pZiB3ZSB3YW50IHVpZCBvciBnaWQgc2V0LCBvdmVycmlkZSB0aGUgcm9j
ayByaWRnZSBzZXR0aW5nICovDQotCSB0ZXN0X2FuZF9zZXRfdWlkKCZpbm9k
ZS0+aV91aWQsIGlub2RlLT5pX3NiLT51Lmlzb2ZzX3NiLnNfdWlkKTsNCi0J
fQ0KKwkJCWlmICghaGlnaF9zaWVycmEpIHsNCisJCQkgIHBhcnNlX3JvY2tf
cmlkZ2VfaW5vZGUocmF3X2lub2RlLCBpbm9kZSk7DQorCQkJICAvKiBobW0u
LmlmIHdlIHdhbnQgdWlkIG9yIGdpZCBzZXQsIG92ZXJyaWRlIHRoZSByb2Nr
IHJpZGdlIHNldHRpbmcgKi8NCisJCQkgdGVzdF9hbmRfc2V0X3VpZCgmaW5v
ZGUtPmlfdWlkLCBpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5zX3VpZCk7DQor
CQkJfQ0KIAkNCi0jaWZkZWYgREVCVUcNCi0JcHJpbnRrKCJJbm9kZTogJXgg
ZXh0ZW50OiAleFxuIixpbm9kZS0+aV9pbm8sIGlub2RlLT51Lmlzb2ZzX2ku
aV9maXJzdF9leHRlbnQpOw0KLSNlbmRpZg0KLQlicmVsc2UoYmgpOw0KKwkJ
fQ0KKwkJYnJlbHNlKGJoKTsNCiAJDQotCWlub2RlLT5pX29wID0gTlVMTDsN
CisJCWlmICghcmVwZWF0KQ0KKwkJCWlub2RlLT5pX29wID0gTlVMTDsNCiAN
Ci0JLyogZ2V0IHRoZSB2b2x1bWUgc2VxdWVuY2UgbnVtYmVyICovDQotCXZv
bHVtZV9zZXFfbm8gPSBpc29udW1fNzIzIChyYXdfaW5vZGUtPnZvbHVtZV9z
ZXF1ZW5jZV9udW1iZXIpIDsNCisJCS8qIGdldCB0aGUgdm9sdW1lIHNlcXVl
bmNlIG51bWJlciAqLw0KKwkJdm9sdW1lX3NlcV9ubyA9IGlzb251bV83MjMg
KHJhd19pbm9kZS0+dm9sdW1lX3NlcXVlbmNlX251bWJlcikgOw0KIA0KLQkv
KiANCi0JICogRGlzYWJsZSBjaGVja2luZyBpZiB3ZSBzZWUgYW55IHZvbHVt
ZSBudW1iZXIgb3RoZXIgdGhhbiAwIG9yIDEuDQotCSAqIFdlIGNvdWxkIHVz
ZSB0aGUgY3J1ZnQgb3B0aW9uLCBidXQgdGhhdCBoYXMgbXVsdGlwbGUgcHVy
cG9zZXMsIG9uZQ0KLQkgKiBvZiB3aGljaCBpcyBsaW1pdGluZyB0aGUgZmls
ZSBzaXplIHRvIDE2TWIuICBUaHVzIHdlIHNpbGVudGx5IGFsbG93DQotCSAq
IHZvbHVtZSBudW1iZXJzIG9mIDAgdG8gZ28gdGhyb3VnaCB3aXRob3V0IGNv
bXBsYWluaW5nLg0KLQkgKi8NCi0JaWYgKGlub2RlLT5pX3NiLT51Lmlzb2Zz
X3NiLnNfY3J1ZnQgPT0gJ24nICYmIA0KLQkgICAgKHZvbHVtZV9zZXFfbm8g
IT0gMCkgJiYgKHZvbHVtZV9zZXFfbm8gIT0gMSkpIHsNCi0JICBwcmludGso
Ildhcm5pbmc6IGRlZmVjdGl2ZSBjZHJvbSAodm9sdW1lIHNlcXVlbmNlIG51
bWJlcikuIEVuYWJsaW5nIFwiY3J1ZnRcIiBtb3VudCBvcHRpb24uXG4iKTsN
Ci0JICBpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5zX2NydWZ0ID0gJ3knOw0K
LQl9DQorCQkvKiANCisJCSAqIERpc2FibGUgY2hlY2tpbmcgaWYgd2Ugc2Vl
IGFueSB2b2x1bWUgbnVtYmVyIG90aGVyIHRoYW4gMCBvciAxLg0KKwkJICog
V2UgY291bGQgdXNlIHRoZSBjcnVmdCBvcHRpb24sIGJ1dCB0aGF0IGhhcyBt
dWx0aXBsZSBwdXJwb3Nlcywgb25lDQorCQkgKiBvZiB3aGljaCBpcyBsaW1p
dGluZyB0aGUgZmlsZSBzaXplIHRvIDE2TWIuICBUaHVzIHdlIHNpbGVudGx5
IGFsbG93DQorCQkgKiB2b2x1bWUgbnVtYmVycyBvZiAwIHRvIGdvIHRocm91
Z2ggd2l0aG91dCBjb21wbGFpbmluZy4NCisJCSAqLw0KKwkJaWYgKGlub2Rl
LT5pX3NiLT51Lmlzb2ZzX3NiLnNfY3J1ZnQgPT0gJ24nICYmIA0KKwkJICAg
ICh2b2x1bWVfc2VxX25vICE9IDApICYmICh2b2x1bWVfc2VxX25vICE9IDEp
KSB7DQorCQkgIHByaW50aygiV2FybmluZzogZGVmZWN0aXZlIGNkcm9tICh2
b2x1bWUgc2VxdWVuY2UgbnVtYmVyKS4gRW5hYmxpbmcgXCJjcnVmdFwiIG1v
dW50IG9wdGlvbi5cbiIpOw0KKwkJICBpbm9kZS0+aV9zYi0+dS5pc29mc19z
Yi5zX2NydWZ0ID0gJ3knOw0KKwkJfQ0KIA0KICNpZm5kZWYgSUdOT1JFX1dS
T05HX01VTFRJX1ZPTFVNRV9TUEVDUw0KLQlpZiAoaW5vZGUtPmlfc2ItPnUu
aXNvZnNfc2Iuc19jcnVmdCAhPSAneScgJiYgDQotCSAgICAodm9sdW1lX3Nl
cV9ubyAhPSAwKSAmJiAodm9sdW1lX3NlcV9ubyAhPSAxKSkgew0KLQkJcHJp
bnRrKCJNdWx0aSB2b2x1bWUgQ0Qgc29tZWhvdyBnb3QgbW91bnRlZC5cbiIp
Ow0KLQl9IGVsc2UNCisJCWlmIChpbm9kZS0+aV9zYi0+dS5pc29mc19zYi5z
X2NydWZ0ICE9ICd5JyAmJiANCisJCSAgICAodm9sdW1lX3NlcV9ubyAhPSAw
KSAmJiAodm9sdW1lX3NlcV9ubyAhPSAxKSkgew0KKwkJCXByaW50aygiTXVs
dGkgdm9sdW1lIENEIHNvbWVob3cgZ290IG1vdW50ZWQuXG4iKTsNCisJCX0g
ZWxzZQ0KICNlbmRpZiBJR05PUkVfV1JPTkdfTVVMVElfVk9MVU1FX1NQRUNT
DQotCXsNCi0JICBpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkNCi0JICAg
IGlub2RlLT5pX29wID0gJmlzb2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsN
Ci0JICBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQ0KLQkgICAg
aW5vZGUtPmlfb3AgPSAmaXNvZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7DQot
CSAgZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkNCi0JICAgIGlu
b2RlLT5pX29wID0gJmlzb2ZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsN
Ci0JICBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpKQ0KLQkgICAg
aW5vZGUtPmlfb3AgPSAmY2hyZGV2X2lub2RlX29wZXJhdGlvbnM7DQotCSAg
ZWxzZSBpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkNCi0JICAgIGlub2Rl
LT5pX29wID0gJmJsa2Rldl9pbm9kZV9vcGVyYXRpb25zOw0KLQkgIGVsc2Ug
aWYgKFNfSVNGSUZPKGlub2RlLT5pX21vZGUpKQ0KLQkgICAgaW5pdF9maWZv
KGlub2RlKTsNCi0JfQ0KLQlpZiAoY3BudCkgew0KLQkJa2ZyZWUgKGNwbnQp
Ow0KKwkJew0KKwkJICBpZiAoIXJlcGVhdCkgew0KKwkJCWlmIChTX0lTUkVH
KGlub2RlLT5pX21vZGUpKQ0KKwkgICAgCQlpbm9kZS0+aV9vcCA9ICZpc29m
c19maWxlX2lub2RlX29wZXJhdGlvbnM7DQorCQkJZWxzZSBpZiAoU19JU0RJ
Uihpbm9kZS0+aV9tb2RlKSkNCisJCSAgICAJaW5vZGUtPmlfb3AgPSAmaXNv
ZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7DQorCQkJZWxzZSBpZiAoU19JU0xO
Syhpbm9kZS0+aV9tb2RlKSkNCisJCSAgICAJaW5vZGUtPmlfb3AgPSAmaXNv
ZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOw0KKwkJCWVsc2UgaWYgKFNf
SVNDSFIoaW5vZGUtPmlfbW9kZSkpDQorCQkgICAgCWlub2RlLT5pX29wID0g
JmNocmRldl9pbm9kZV9vcGVyYXRpb25zOw0KKwkJCWVsc2UgaWYgKFNfSVNC
TEsoaW5vZGUtPmlfbW9kZSkpDQorCQkgICAgCWlub2RlLT5pX29wID0gJmJs
a2Rldl9pbm9kZV9vcGVyYXRpb25zOw0KKwkJCWVsc2UgaWYgKFNfSVNGSUZP
KGlub2RlLT5pX21vZGUpKQ0KKwkJICAgIAlpbml0X2ZpZm8oaW5vZGUpOw0K
KwkJICB9DQorCQl9DQorCQlvZmZzZXQgKz0gKnBudDsNCisJCWlubyA9IChi
bG9jayA8PCBJU09GU19CVUZGRVJfQklUUyhpbm9kZSkpICsgb2Zmc2V0Ow0K
KwkJaWYgKGNwbnQpIHsNCisJCQlrZnJlZSAoY3BudCk7DQorCQkJY3BudCA9
IE5VTEw7DQorCQl9DQogCQljcG50ID0gTlVMTDsNCisJCWlmICghKGZsYWdz
ICYgMHg4MCkgfHwgcmVwZWF0ID09IDY0KQ0KKwkJCWJyZWFrOw0KIAl9DQor
CWlub2RlLT51Lmlzb2ZzX2kuaV9maXJzdF9leHRlbnQgPSBiZWdfZXh0Ow0K
KwkNCiAJcmV0dXJuOw0KLSAgICAgIGZhaWw6DQorZmFpbDoNCiAJLyogV2l0
aCBhIGRhdGEgZXJyb3Igd2UgcmV0dXJuIHRoaXMgaW5mb3JtYXRpb24gKi8N
CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5p
X2N0aW1lID0gMDsNCi0JaW5vZGUtPnUuaXNvZnNfaS5pX2ZpcnN0X2V4dGVu
dCA9IDA7DQorCWNsZWFyX2V4dChiZWdfZXh0KTsNCisJaW5vZGUtPnUuaXNv
ZnNfaS5pX2ZpcnN0X2V4dGVudCA9IE5VTEw7DQogCWlub2RlLT51Lmlzb2Zz
X2kuaV9iYWNrbGluayA9IDB4ZmZmZmZmZmY7DQogCWlub2RlLT5pX3NpemUg
PSAwOw0KIAlpbm9kZS0+aV9ubGluayA9IDE7DQpAQCAtNzg1LDcgKzg4OCw3
IEBADQogCQl9DQogCX0NCiAjaWZkZWYgREVCVUcNCi0JcHJpbnRrKCJQYXJl
bnQgZGlyOiV4XG4iLHBhcmVudF9kaXIpOw0KKwlwcmludGsoIlBhcmVudCBk
aXI6ICV4XG4iLHBhcmVudF9kaXIgPDwgKElTT0ZTX1pPTkVfQklUUyhwYXJl
bnQpIC0gYnVmYml0cykpOw0KICNlbmRpZg0KIAkvKiBOb3cgd2Uga25vdyB0
aGUgZXh0ZW50IHdoZXJlIHRoZSBwYXJlbnQgZGlyIHN0YXJ0cyBvbi4gKi8N
CiAJDQpAQCAtODgyLDcgKzk4NSw3IEBADQogCX0NCiAJYnJlbHNlKGJoKTsN
CiAjaWZkZWYgREVCVUcNCi0JcHJpbnRrKCJSZXN1bHRhbnQgSW5vZGUgJWRc
biIscmVzdWx0KTsNCisJcHJpbnRrKCJSZXN1bHRhbnQgSW5vZGUgJXhcbiIs
cmVzdWx0KTsNCiAjZW5kaWYNCiAJcmV0dXJuIHJlc3VsdDsNCiB9DQpkaWZm
IC11IC1yIGxpbnV4LTIuMC5vcmlnL2ZzL2lzb2ZzL25hbWVpLmMgbGludXgt
Mi4wL2ZzL2lzb2ZzL25hbWVpLmMNCi0tLSBsaW51eC0yLjAub3JpZy9mcy9p
c29mcy9uYW1laS5jCVRodSBPY3QgMjMgMTE6MDE6MDEgMTk5Nw0KKysrIGxp
bnV4LTIuMC9mcy9pc29mcy9uYW1laS5jCVR1ZSBEZWMgMjMgMTE6Mjk6MzYg
MTk5Nw0KQEAgLTc2LDcgKzc2LDggQEANCiAJKmlubyA9IDA7DQogCWlmICgh
ZGlyKSByZXR1cm4gTlVMTDsNCiAJDQotCWlmICghKGJsb2NrID0gZGlyLT51
Lmlzb2ZzX2kuaV9maXJzdF9leHRlbnQpKSByZXR1cm4gTlVMTDsNCisJaWYg
KCFkaXItPnUuaXNvZnNfaS5pX2ZpcnN0X2V4dGVudCkgcmV0dXJuIE5VTEw7
DQorCWlmICghKGJsb2NrID0gKChzdHJ1Y3QgZXh0ZW50X3N0ciAqKWRpci0+
dS5pc29mc19pLmlfZmlyc3RfZXh0ZW50KS0+ZXh0ZW50WzBdKSkgcmV0dXJu
IE5VTEw7DQogICANCiAJZl9wb3MgPSAwOw0KIA0KQEAgLTEzOSw5ICsxNDAs
OSBAQA0KIA0KIAkJaWYgKGRlLT5uYW1lWzBdPT0xICYmIGRlLT5uYW1lX2xl
blswXT09MSkgew0KICNpZiAwDQotCQkJcHJpbnRrKCJEb2luZyAuLiAoJWQg
JWQpIiwNCi0JCQkgICAgICAgZGlyLT5pX3NiLT5zX2ZpcnN0ZGF0YXpvbmUs
DQotCQkJICAgICAgIGRpci0+aV9pbm8pOw0KKwkJCXByaW50aygiRG9pbmcg
Li4gKCV4ICV4ICV4KVxuIiwNCisJCQkgICAgICAgZGlyLT5pX3NiLT51Lmlz
b2ZzX3NiLnNfZmlyc3RkYXRhem9uZSwNCisJCQkgICAgICAgZGlyLT5pX2lu
bywgZGlyLT51Lmlzb2ZzX2kuaV9iYWNrbGluayk7DQogI2VuZGlmDQogCQkJ
aWYoKGRpci0+aV9zYi0+dS5pc29mc19zYi5zX2ZpcnN0ZGF0YXpvbmUpICE9
IGRpci0+aV9pbm8pDQogIAkJCQlpbm9kZV9udW1iZXIgPSBkaXItPnUuaXNv
ZnNfaS5pX2JhY2tsaW5rOw0KQEAgLTIyNCw3ICsyMjUsMTAgQEANCiAJc3Ry
dWN0IGJ1ZmZlcl9oZWFkICogYmg7DQogDQogI2lmZGVmIERFQlVHDQotCXBy
aW50aygibG9va3VwOiAleCAlZFxuIixkaXItPmlfaW5vLCBsZW4pOw0KKwlj
aGFyIF9fYnVmWzEyOF07DQorCW1lbWNweShfX2J1ZiwgbmFtZSwgbGVuKTsN
CisJX19idWZbbGVuXSA9IDA7DQorCXByaW50aygibG9va3VwOiAleCAlcyAl
ZFxuIixkaXItPmlfaW5vLCBfX2J1ZiwgbGVuKTsNCiAjZW5kaWYNCiAJKnJl
c3VsdCA9IE5VTEw7DQogCWlmICghZGlyKQ0KQEAgLTI2OSwxMSArMjczLDEz
IEBADQogCQkJZGNhY2hlX2FkZChkaXIsIG5hbWUsIGxlbiwgaW5vKTsNCiAJ
CWJyZWxzZShiaCk7DQogCX0NCi0NCisJDQogCWlmICghKCpyZXN1bHQgPSBp
Z2V0KGRpci0+aV9zYixpbm8pKSkgew0KIAkJaXB1dChkaXIpOw0KIAkJcmV0
dXJuIC1FQUNDRVM7DQogCX0NCisJaWYgKCgqcmVzdWx0KS0+dS5pc29mc19p
LmlfZmlyc3RfZXh0ZW50ID09IE5VTEwpDQorCQlpc29mc19yZWFkX2lub2Rl
KCpyZXN1bHQpOw0KIA0KIAkvKiBXZSBuZWVkIHRoaXMgYmFja2xpbmsgZm9y
IHRoZSAiLi4iIGVudHJ5IHVubGVzcyB0aGUgbmFtZSB0aGF0IHdlDQogCSAg
IGFyZSBsb29raW5nIHVwIHRyYXZlcnNlZCBhIG1vdW50IHBvaW50IChpbiB3
aGljaCBjYXNlIHRoZSBpbm9kZQ0KQEAgLTI4NSw2ICsyOTEsMTAgQEANCiAJ
ICAoKnJlc3VsdCktPnUuaXNvZnNfaS5pX2JhY2tsaW5rID0gaW5vX2JhY2s7
IA0KIAl9DQogCQ0KKyNpZmRlZiBERUJVRw0KKwlwcmludGsoIi1sb29rdXA6
ICV4XG4iLCAoKnJlc3VsdCktPmlfaW5vKTsNCisjZW5kaWYNCisNCiAJaXB1
dChkaXIpOw0KIAlyZXR1cm4gMDsNCiB9DQpkaWZmIC11IC1yIGxpbnV4LTIu
MC5vcmlnL2ZzL2lzb2ZzL3JvY2suYyBsaW51eC0yLjAvZnMvaXNvZnMvcm9j
ay5jDQotLS0gbGludXgtMi4wLm9yaWcvZnMvaXNvZnMvcm9jay5jCVRodSBP
Y3QgMjMgMTE6MDE6MDEgMTk5Nw0KKysrIGxpbnV4LTIuMC9mcy9pc29mcy9y
b2NrLmMJVHVlIERlYyAyMyAxMToxNDowMSAxOTk3DQpAQCAtMTUsNiArMTUs
OCBAQA0KIA0KICNpbmNsdWRlICJyb2NrLmgiDQogDQordm9pZCBjbGVhcl9l
eHQoc3RydWN0IGV4dGVudF9zdHIgKmV4dCk7DQorDQogLyogVGhlc2UgZnVu
Y3Rpb25zIGFyZSBkZXNpZ25lZCB0byByZWFkIHRoZSBzeXN0ZW0gYXJlYXMg
b2YgYSBkaXJlY3RvcnkgcmVjb3JkDQogICogYW5kIGV4dHJhY3QgcmVsZXZh
bnQgaW5mb3JtYXRpb24uICBUaGVyZSBhcmUgZGlmZmVyZW50IGZ1bmN0aW9u
cyBwcm92aWRlZA0KICAqIGRlcGVuZGluZyB1cG9uIHdoYXQgaW5mb3JtYXRp
b24gd2UgbmVlZCBhdCB0aGUgdGltZS4gIE9uZSBmdW5jdGlvbiBmaWxscw0K
QEAgLTM3OSwxMiArMzgxLDE2IEBADQogCXByaW50aygiQXR0ZW1wdCB0byBy
ZWFkIGlub2RlIGZvciByZWxvY2F0ZWQgZGlyZWN0b3J5XG4iKTsNCiAJZ290
byBvdXQ7DQogICAgICAgY2FzZSBTSUcoJ0MnLCdMJyk6DQorICAgICAgew0K
KyAgICAgIHVuc2lnbmVkIGxvbmcgaW5vID0gaXNvbnVtXzczMyhyci0+dS5D
TC5sb2NhdGlvbikgPDwNCisJCWlub2RlIC0+IGlfc2IgLT4gdS5pc29mc19z
Yi5zX2xvZ196b25lX3NpemU7DQogI2lmZGVmIERFQlVHDQogCXByaW50aygi
UlIgQ0wgKCV4KVxuIixpbm9kZS0+aV9pbm8pOw0KICNlbmRpZg0KLQlpbm9k
ZS0+dS5pc29mc19pLmlfZmlyc3RfZXh0ZW50ID0gaXNvbnVtXzczMyhyci0+
dS5DTC5sb2NhdGlvbikgPDwNCi0JCWlub2RlIC0+IGlfc2IgLT4gdS5pc29m
c19zYi5zX2xvZ196b25lX3NpemU7DQotCXJlbG9jID0gaWdldChpbm9kZS0+
aV9zYiwgaW5vZGUtPnUuaXNvZnNfaS5pX2ZpcnN0X2V4dGVudCk7DQorCXJl
bG9jID0gaWdldChpbm9kZS0+aV9zYiwgaW5vKTsNCisJY2xlYXJfZXh0KGlu
b2RlLT51Lmlzb2ZzX2kuaV9maXJzdF9leHRlbnQpOw0KKwlpbm9kZS0+dS5p
c29mc19pLmlfZmlyc3RfZXh0ZW50ID0gcmVsb2MtPnUuaXNvZnNfaS5pX2Zp
cnN0X2V4dGVudDsNCisJcmVsb2MtPnUuaXNvZnNfaS5pX2ZpcnN0X2V4dGVu
dCA9IE5VTEw7DQogCWlub2RlLT5pX21vZGUgPSByZWxvYy0+aV9tb2RlOw0K
IAlpbm9kZS0+aV9ubGluayA9IHJlbG9jLT5pX25saW5rOw0KIAlpbm9kZS0+
aV91aWQgPSByZWxvYy0+aV91aWQ7DQpAQCAtMzk2LDYgKzQwMiw3IEBADQog
CWlub2RlLT5pX210aW1lID0gcmVsb2MtPmlfbXRpbWU7DQogCWlwdXQocmVs
b2MpOw0KIAlicmVhazsNCisJICB9DQogICAgICAgZGVmYXVsdDoNCiAJYnJl
YWs7DQogICAgICAgfQ0KZGlmZiAtdSAtciBsaW51eC0yLjAub3JpZy9pbmNs
dWRlL2xpbnV4L2lzb19mc19pLmggbGludXgtMi4wL2luY2x1ZGUvbGludXgv
aXNvX2ZzX2kuaA0KLS0tIGxpbnV4LTIuMC5vcmlnL2luY2x1ZGUvbGludXgv
aXNvX2ZzX2kuaAlXZWQgRGVjICAxIDE1OjQ0OjE1IDE5OTMNCisrKyBsaW51
eC0yLjAvaW5jbHVkZS9saW51eC9pc29fZnNfaS5oCVR1ZSBEZWMgMjMgMTE6
MzA6MzkgMTk5Nw0KQEAgLTEsMTEgKzEsMTggQEANCiAjaWZuZGVmIF9JU09f
RlNfSQ0KICNkZWZpbmUgX0lTT19GU19JDQogDQorc3RydWN0IGV4dGVudF9z
dHINCit7DQorCXN0cnVjdCBleHRlbnRfc3RyICpuZXh0Ow0KKwl1bnNpZ25l
ZCBpbnQgZXh0ZW50WzJdOw0KKwl1bnNpZ25lZCBpbnQgZXh0ZW50X3NpemVb
Ml07DQorfTsNCisNCiAvKg0KICAqIGlzbyBmcyBpbm9kZSBkYXRhIGluIG1l
bW9yeQ0KICAqLw0KIHN0cnVjdCBpc29faW5vZGVfaW5mbyB7DQotCXVuc2ln
bmVkIGludCBpX2ZpcnN0X2V4dGVudDsNCisJc3RydWN0IGV4dGVudF9zdHIg
KmlfZmlyc3RfZXh0ZW50Ow0KIAl1bnNpZ25lZCBpbnQgaV9iYWNrbGluazsN
CiAJdW5zaWduZWQgY2hhciBpX2ZpbGVfZm9ybWF0Ow0KIH07DQo=
---1463787052-712906519-882896899=:28373--