[patch] smp-2.3.99-5-B2, various x86 SMP updates/fixes

Ingo Molnar (mingo@chiara.csoma.elte.hu)
Wed, 12 Apr 2000 13:55:24 +0200 (CEST)


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.

--79888902-983468898-955540524=:5358
Content-Type: TEXT/PLAIN; charset=US-ASCII

this is the newest x86 SMP patchset (attached), against 2.3.99-pre5. The
patch is also available from:

http://www.redhat.com/~mingo/smp-x86-patches/smp-2.3.99-5-B2

Changes:

- external APIC (82489DX) code rewrite, default configuration handling
rewrite and fixes (Maciej W. Rozycki, tested by Eric Gilmore)

- support for i486 SMP boxes [yeah! :-)] (Maciej W. Rozycki)

- various fixes and cleanups (Maciej W. Rozycki, me)

- fixed CPU/process stats in UP-IOAPIC mode, first reported by Gabor Vitez
(me)

some small unrelated x86 items:

- added the string-i486.h assembly version of strstr to asm-i386/string.h
because it's much faster than the lib/ version. (me)

- added mem=exactmap option to enable setting of an exact e820 memory map,
as specified by the user. Right now the kernel adds an unconditional
low-RAM e820 region if mem= is added. (me)

with this patch applied the x86 SMP/APIC subsystem is again in 'no known
bugs' status - please resend reports to me if any problem is still
unfixed, or any new problem arises. The patch has been sanity booted on
8-way, dual, UP-IOAPIC and UP (486) systems.

Ingo

--79888902-983468898-955540524=:5358
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="smp-2.3.99-5-B2"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.10004121355230.5358@chiara.csoma.elte.hu>
Content-Description:
Content-Disposition: attachment; filename="smp-2.3.99-5-B2"

LS0tIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvYXBpYy5oLm9yaWcJU2F0IEZl
YiAxMiAxOTo0ODowNSAyMDAwDQorKysgbGludXgvaW5jbHVkZS9hc20taTM4
Ni9hcGljLmgJV2VkIEFwciAxMiAwMzo0MTozOSAyMDAwDQpAQCAtMyw2ICsz
LDcgQEANCiANCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+DQogI2luY2x1
ZGUgPGFzbS9hcGljZGVmLmg+DQorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4N
CiANCiAjZGVmaW5lIEFQSUNfREVCVUcgMQ0KIA0KQEAgLTIwLDcgKzIxLDEy
IEBADQogDQogZXh0ZXJuIF9faW5saW5lIHZvaWQgYXBpY193cml0ZSh1bnNp
Z25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KQ0KIHsNCi0JKigodm9s
YXRpbGUgdW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrcmVnKSk9djsNCisJ
Kigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShBUElDX0JBU0UrcmVnKSkg
PSB2Ow0KK30NCisNCitleHRlcm4gX19pbmxpbmUgdm9pZCBhcGljX3dyaXRl
X2F0b21pYyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KQ0K
K3sNCisJeGNoZygodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShBUElDX0JB
U0UrcmVnKSwgdik7DQogfQ0KIA0KIGV4dGVybiBfX2lubGluZSB1bnNpZ25l
ZCBsb25nIGFwaWNfcmVhZCh1bnNpZ25lZCBsb25nIHJlZykNCkBAIC0zMiwz
MCArMzgsMzMgQEANCiANCiAjaWZkZWYgQ09ORklHX1g4Nl9HT09EX0FQSUMN
CiAjIGRlZmluZSBGT1JDRV9SRUFEX0FST1VORF9XUklURSAwDQotIyBkZWZp
bmUgYXBpY19yZWFkYXJvdW5kKHgpDQorIyBkZWZpbmUgYXBpY19yZWFkX2Fy
b3VuZCh4KQ0KKyMgZGVmaW5lIGFwaWNfd3JpdGVfYXJvdW5kKHgseSkgYXBp
Y193cml0ZSgoeCksKHkpKQ0KICNlbHNlDQogIyBkZWZpbmUgRk9SQ0VfUkVB
RF9BUk9VTkRfV1JJVEUgMQ0KLSMgZGVmaW5lIGFwaWNfcmVhZGFyb3VuZCh4
KSBhcGljX3JlYWQoeCkNCisjIGRlZmluZSBhcGljX3JlYWRfYXJvdW5kKHgp
IGFwaWNfcmVhZCh4KQ0KKyMgZGVmaW5lIGFwaWNfd3JpdGVfYXJvdW5kKHgs
eSkgYXBpY193cml0ZV9hdG9taWMoKHgpLCh5KSkNCiAjZW5kaWYNCiANCi0j
ZGVmaW5lIGFwaWNfd3JpdGVfYXJvdW5kKHgseSkgXA0KLQkJZG8geyBhcGlj
X3JlYWRhcm91bmQoeCk7IGFwaWNfd3JpdGUoeCx5KTsgfSB3aGlsZSAoMCkN
Ci0NCiBleHRlcm4gaW5saW5lIHZvaWQgYWNrX0FQSUNfaXJxKHZvaWQpDQog
ew0KLSAgICAgICAgLyogQ2xlYXIgdGhlIElQSSAqLw0KLQ0KLQlhcGljX3Jl
YWRhcm91bmQoQVBJQ19FT0kpOw0KIAkvKg0KLQkgKiBvbiBQNisgY29yZXMg
KENPTkZJR19YODZfR09PRF9BUElDKSBhY2tfQVBJQ19pcnEoKSBhY3R1YWxs
eQ0KLQkgKiBnZXRzIGNvbXBpbGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9u
IC4uLiB5dW1taWUuDQorCSAqIGFja19BUElDX2lycSgpIGFjdHVhbGx5IGdl
dHMgY29tcGlsZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb246DQorCSAqIC0g
YSBzaW5nbGUgcm13IG9uIFBlbnRpdW0vODI0ODlEWA0KKwkgKiAtIGEgc2lu
Z2xlIHdyaXRlIG9uIFA2KyBjb3JlcyAoQ09ORklHX1g4Nl9HT09EX0FQSUMp
DQorCSAqIC4uLiB5dW1taWUuDQogCSAqLw0KLSAgICAgICAgYXBpY193cml0
ZShBUElDX0VPSSwgMCk7IC8qIERvY3Mgc2F5IHVzZSAwIGZvciBmdXR1cmUg
Y29tcGF0aWJpbGl0eSAqLw0KKw0KKwkvKiBEb2NzIHNheSB1c2UgMCBmb3Ig
ZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8NCisJYXBpY193cml0ZV9hcm91bmQo
QVBJQ19FT0ksIDApOw0KIH0NCiANCiBleHRlcm4gaW50IGdldF9tYXhsdnQo
dm9pZCk7DQorZXh0ZXJuIHZvaWQgY29ubmVjdF9ic3BfQVBJQyAodm9pZCk7
DQorZXh0ZXJuIHZvaWQgZGlzY29ubmVjdF9ic3BfQVBJQyAodm9pZCk7DQog
ZXh0ZXJuIHZvaWQgZGlzYWJsZV9sb2NhbF9BUElDICh2b2lkKTsNCiBleHRl
cm4gdm9pZCBjYWNoZV9BUElDX3JlZ2lzdGVycyAodm9pZCk7DQorZXh0ZXJu
IHZvaWQgc3luY19BcmJfSURzKHZvaWQpOw0KIGV4dGVybiB2b2lkIHNldHVw
X2xvY2FsX0FQSUMgKHZvaWQpOw0KIGV4dGVybiB2b2lkIGluaXRfYXBpY19t
YXBwaW5ncyh2b2lkKTsNCiBleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJf
aW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICogcmVncyk7DQotLS0gbGludXgv
aW5jbHVkZS9hc20taTM4Ni9hcGljZGVmLmgub3JpZwlUaHUgSmFuIDIwIDE4
OjUxOjQyIDIwMDANCisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2FwaWNk
ZWYuaAlXZWQgQXByIDEyIDAzOjQxOjExIDIwMDANCkBAIC0yOSw4ICsyOSw2
IEBADQogI2RlZmluZQkJCVNFVF9BUElDX0xPR0lDQUxfSUQoeCkJKCgoeCk8
PDI0KSkNCiAjZGVmaW5lCQkJQVBJQ19BTExfQ1BVUwkJMHhGRg0KICNkZWZp
bmUJCUFQSUNfREZSCTB4RTANCi0jZGVmaW5lCQkJR0VUX0FQSUNfREZSKHgp
CQkoKCh4KT4+MjgpJjB4MEYpDQotI2RlZmluZQkJCVNFVF9BUElDX0RGUih4
KQkJKCh4KTw8MjgpDQogI2RlZmluZQkJQVBJQ19TUElWCTB4RjANCiAjZGVm
aW5lCQlBUElDX0lTUgkweDEwMA0KICNkZWZpbmUJCUFQSUNfVE1SCTB4MTgw
DQpAQCAtNDcsMjIgKzQ1LDIzIEBADQogI2RlZmluZQkJCUFQSUNfREVTVF9T
RUxGCQkweDQwMDAwDQogI2RlZmluZQkJCUFQSUNfREVTVF9BTExJTkMJMHg4
MDAwMA0KICNkZWZpbmUJCQlBUElDX0RFU1RfQUxMQlVUCTB4QzAwMDANCi0j
ZGVmaW5lCQkJQVBJQ19ERVNUX1JSX01BU0sJMHgzMDAwMA0KLSNkZWZpbmUJ
CQlBUElDX0RFU1RfUlJfSU5WQUxJRAkweDAwMDAwDQotI2RlZmluZQkJCUFQ
SUNfREVTVF9SUl9JTlBST0cJMHgxMDAwMA0KLSNkZWZpbmUJCQlBUElDX0RF
U1RfUlJfVkFMSUQJMHgyMDAwMA0KLSNkZWZpbmUJCQlBUElDX0RFU1RfTEVW
RUxUUklHCTB4MDgwMDANCi0jZGVmaW5lCQkJQVBJQ19ERVNUX0FTU0VSVAkw
eDA0MDAwDQotI2RlZmluZQkJCUFQSUNfREVTVF9CVVNZCQkweDAxMDAwDQor
I2RlZmluZQkJCUFQSUNfSUNSX1JSX01BU0sJMHgzMDAwMA0KKyNkZWZpbmUJ
CQlBUElDX0lDUl9SUl9JTlZBTElECTB4MDAwMDANCisjZGVmaW5lCQkJQVBJ
Q19JQ1JfUlJfSU5QUk9HCTB4MTAwMDANCisjZGVmaW5lCQkJQVBJQ19JQ1Jf
UlJfVkFMSUQJMHgyMDAwMA0KKyNkZWZpbmUJCQlBUElDX0lOVF9MRVZFTFRS
SUcJMHgwODAwMA0KKyNkZWZpbmUJCQlBUElDX0lOVF9BU1NFUlQJCTB4MDQw
MDANCisjZGVmaW5lCQkJQVBJQ19JQ1JfQlVTWQkJMHgwMTAwMA0KICNkZWZp
bmUJCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwDQotI2RlZmluZQkJCUFQ
SUNfREVTVF9ETV9GSVhFRAkweDAwMDAwDQotI2RlZmluZQkJCUFQSUNfREVT
VF9ETV9MT1dFU1QJMHgwMDEwMA0KLSNkZWZpbmUJCQlBUElDX0RFU1RfRE1f
U01JCTB4MDAyMDANCi0jZGVmaW5lCQkJQVBJQ19ERVNUX0RNX1JFTVJECTB4
MDAzMDANCi0jZGVmaW5lCQkJQVBJQ19ERVNUX0RNX05NSQkweDAwNDAwDQot
I2RlZmluZQkJCUFQSUNfREVTVF9ETV9JTklUCTB4MDA1MDANCi0jZGVmaW5l
CQkJQVBJQ19ERVNUX0RNX1NUQVJUVVAJMHgwMDYwMA0KLSNkZWZpbmUJCQlB
UElDX0RFU1RfVkVDVE9SX01BU0sJMHgwMDBGRg0KKyNkZWZpbmUJCQlBUElD
X0RNX0ZJWEVECQkweDAwMDAwDQorI2RlZmluZQkJCUFQSUNfRE1fTE9XRVNU
CQkweDAwMTAwDQorI2RlZmluZQkJCUFQSUNfRE1fU01JCQkweDAwMjAwDQor
I2RlZmluZQkJCUFQSUNfRE1fUkVNUkQJCTB4MDAzMDANCisjZGVmaW5lCQkJ
QVBJQ19ETV9OTUkJCTB4MDA0MDANCisjZGVmaW5lCQkJQVBJQ19ETV9JTklU
CQkweDAwNTAwDQorI2RlZmluZQkJCUFQSUNfRE1fU1RBUlRVUAkJMHgwMDYw
MA0KKyNkZWZpbmUJCQlBUElDX0RNX0VYVElOVAkJMHgwMDcwMA0KKyNkZWZp
bmUJCQlBUElDX1ZFQ1RPUl9NQVNLCTB4MDAwRkYNCiAjZGVmaW5lCQlBUElD
X0lDUjIJMHgzMTANCiAjZGVmaW5lCQkJR0VUX0FQSUNfREVTVF9GSUVMRCh4
KQkoKCh4KT4+MjQpJjB4RkYpDQogI2RlZmluZQkJCVNFVF9BUElDX0RFU1Rf
RklFTEQoeCkJKCh4KTw8MjQpDQotLS0gbGludXgvaW5jbHVkZS9hc20taTM4
Ni9idWdzLmgub3JpZwlTYXQgRmViIDEyIDE5OjU2OjAwIDIwMDANCisrKyBs
aW51eC9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaAlXZWQgQXByIDEyIDAzOjQx
OjQ0IDIwMDANCkBAIC0yMSw4ICsyMSw2IEBADQogI2luY2x1ZGUgPGFzbS9w
cm9jZXNzb3IuaD4NCiAjaW5jbHVkZSA8YXNtL21zci5oPg0KIA0KLSNkZWZp
bmUgQ09ORklHX0JVR2kzODYNCi0NCiBzdGF0aWMgaW50IF9faW5pdCBub19o
YWx0KGNoYXIgKnMpDQogew0KIAlib290X2NwdV9kYXRhLmhsdF93b3Jrc19v
ayA9IDA7DQpAQCAtMzcwLDE2ICszNjgsMTggQEANCiB9DQogIA0KIC8qDQot
ICogQ2hlY2sgd2V0aGVyIHdlIGFyZSBhYmxlIHRvIHJ1biB0aGlzIGtlcm5l
bCBzYWZlbHkgb24gU01QLg0KKyAqIENoZWNrIHdoZXRoZXIgd2UgYXJlIGFi
bGUgdG8gcnVuIHRoaXMga2VybmVsIHNhZmVseSBvbiBTTVAuDQogICoNCiAg
KiAtIEluIG9yZGVyIHRvIHJ1biBvbiBhIGkzODYsIHdlIG5lZWQgdG8gYmUg
Y29tcGlsZWQgZm9yIGkzODYNCiAgKiAgIChmb3IgZHVlIHRvIGxhY2sgb2Yg
ImludmxwZyIgYW5kIHdvcmtpbmcgV1Agb24gYSBpMzg2KQ0KICAqIC0gSW4g
b3JkZXIgdG8gcnVuIG9uIGFueXRoaW5nIHdpdGhvdXQgYSBUU0MsIHdlIG5l
ZWQgdG8gYmUNCiAgKiAgIGNvbXBpbGVkIGZvciBhIGk0ODYuDQotICogLSBJ
biBvcmRlciB0byB3b3JrIG9uIGEgUGVudGl1bS9TTVAgbWFjaGluZSwgd2Ug
bmVlZCB0byBiZQ0KLSAqICAgY29tcGlsZWQgZm9yIGEgUGVudGl1bSBvciBs
b3dlciwgYXMgYSBQUHJvIGNvbmZpZyBpbXBsaWVzDQotICogICBhIHByb3Bl
cmx5IHdvcmtpbmcgbG9jYWwgQVBJQyB3aXRob3V0IHRoZSBuZWVkIHRvIGRv
IGV4dHJhDQotICogICByZWFkcyBmcm9tIHRoZSBBUElDLg0KKyAqIC0gSW4g
b3JkZXIgdG8gc3VwcG9ydCB0aGUgbG9jYWwgQVBJQyBvbiBhIGJ1Z2d5IFBl
bnRpdW0gbWFjaGluZSwNCisgKiAgIHdlIG5lZWQgdG8gYmUgY29tcGlsZWQg
d2l0aCBDT05GSUdfWDg2X0dPT0RfQVBJQyBkaXNhYmxlZCwNCisgKiAgIHdo
aWNoIGhhcHBlbnMgaW1wbGljaXRseSBpZiBjb21waWxlZCBmb3IgYSBQZW50
aXVtIG9yIGxvd2VyDQorICogICAodW5sZXNzIGFuIGFkdmFuY2VkIHNlbGVj
dGlvbiBvZiBDUFUgZmVhdHVyZXMgaXMgdXNlZCkgYXMgYW4NCisgKiAgIG90
aGVyd2lzZSBjb25maWcgaW1wbGllcyBhIHByb3Blcmx5IHdvcmtpbmcgbG9j
YWwgQVBJQyB3aXRob3V0DQorICogICB0aGUgbmVlZCB0byBkbyBleHRyYSBy
ZWFkcyBmcm9tIHRoZSBBUElDLg0KICovDQogDQogc3RhdGljIHZvaWQgX19p
bml0IGNoZWNrX2NvbmZpZyh2b2lkKQ0KQEAgLTQxMSwxMSArNDExLDE4IEBA
DQogI2VuZGlmDQogDQogLyoNCi0gKiBJZiB3ZSB3ZXJlIHRvbGQgd2UgaGFk
IGEgZ29vZCBBUElDIGZvciBTTVAsIHdlJ2QgYmV0dGVyIGJlIGEgUFBybw0K
LSAqLw0KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfR09PRF9BUElDKSAmJiBk
ZWZpbmVkKENPTkZJR19TTVApDQotCWlmIChzbXBfZm91bmRfY29uZmlnICYm
IGJvb3RfY3B1X2RhdGEueDg2IDw9IDUpDQotCQlwYW5pYygiS2VybmVsIGNv
bXBpbGVkIGZvciBQUHJvKywgYXNzdW1lcyBsb2NhbCBBUElDIHdpdGhvdXQg
cmVhZC1iZWZvcmUtd3JpdGUgYnVnIik7DQorICogSWYgd2Ugd2VyZSB0b2xk
IHdlIGhhZCBhIGdvb2QgbG9jYWwgQVBJQywgY2hlY2sgZm9yIGJ1Z2d5IFBl
bnRpYSwNCisgKiBpLmUuIGFsbCBCIHN0ZXBwaW5ncyBhbmQgdGhlIEMyIHN0
ZXBwaW5nIG9mIFA1NEMgd2hlbiB1c2luZyB0aGVpcg0KKyAqIGludGVncmF0
ZWQgQVBJQyAoc2VlIDExQVAgZXJyYXR1bSBpbiAiUGVudGl1bSBQcm9jZXNz
b3INCisgKiBTcGVjaWZpY2F0aW9uIFVwZGF0ZSIpLg0KKyAqLw0KKyNpZiBk
ZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykgJiYgZGVmaW5lZChDT05G
SUdfWDg2X0dPT0RfQVBJQykNCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3Zl
bmRvciA9PSBYODZfVkVORE9SX0lOVEVMDQorCSAgICAmJiBib290X2NwdV9k
YXRhLng4Nl9jYXBhYmlsaXR5ICYgWDg2X0ZFQVRVUkVfQVBJQw0KKwkgICAg
JiYgYm9vdF9jcHVfZGF0YS54ODYgPT0gNQ0KKwkgICAgJiYgYm9vdF9jcHVf
ZGF0YS54ODZfbW9kZWwgPT0gMg0KKwkgICAgJiYgKGJvb3RfY3B1X2RhdGEu
eDg2X21hc2sgPCA2IHx8IGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPT0gMTEp
KQ0KKwkJcGFuaWMoIktlcm5lbCBjb21waWxlZCBmb3IgUFBybyssIGFzc3Vt
ZXMgYSBsb2NhbCBBUElDIHdpdGhvdXQgdGhlIHJlYWQtYmVmb3JlLXdyaXRl
IGJ1ZyEiKTsNCiAjZW5kaWYNCiB9DQogDQotLS0gbGludXgvaW5jbHVkZS9h
c20taTM4Ni9tcHNwZWMuaC5vcmlnCVdlZCBBcHIgMTIgMDM6NDA6NTUgMjAw
MA0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvbXBzcGVjLmgJV2VkIEFw
ciAxMiAwNDowNToxMyAyMDAwDQpAQCAtMTMsNiArMTMsMTEgQEANCiAgDQog
I2RlZmluZSBTTVBfTUFHSUNfSURFTlQJKCgnXyc8PDI0KXwoJ1AnPDwxNil8
KCdNJzw8OCl8J18nKQ0KIA0KKy8qDQorICogYSBtYXhpbXVtIG9mIDE2IEFQ
SUNzIHdpdGggdGhlIGN1cnJlbnQgQVBJQyBJRCBhcmNoaXRlY3R1cmUuDQor
ICovDQorI2RlZmluZSBNQVhfQVBJQ1MgMTYNCisNCiBzdHJ1Y3QgaW50ZWxf
bXBfZmxvYXRpbmcNCiB7DQogCWNoYXIgbXBmX3NpZ25hdHVyZVs0XTsJCS8q
ICJfTVBfIiAJCQkqLw0KQEAgLTE0NCw3ICsxNDksOCBAQA0KIGVudW0gbXBf
YnVzdHlwZSB7DQogCU1QX0JVU19JU0EsDQogCU1QX0JVU19FSVNBLA0KLQlN
UF9CVVNfUENJDQorCU1QX0JVU19QQ0ksDQorCU1QX0JVU19NQ0ENCiB9Ow0K
IGV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3R5cGUgW01BWF9NUF9CVVNTRVNd
Ow0KIGV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3BjaV9idXMgW01BWF9NUF9C
VVNTRVNdOw0KQEAgLTE1NSw3ICsxNjEsNyBAQA0KIGV4dGVybiB2b2lkIGZp
bmRfc21wX2NvbmZpZyAodm9pZCk7DQogZXh0ZXJuIHZvaWQgZ2V0X3NtcF9j
b25maWcgKHZvaWQpOw0KIGV4dGVybiBpbnQgbnJfaW9hcGljczsNCi1leHRl
cm4gaW50IGFwaWNfdmVyc2lvbiBbTlJfQ1BVU107DQorZXh0ZXJuIGludCBh
cGljX3ZlcnNpb24gW01BWF9BUElDU107DQogZXh0ZXJuIGludCBtcF9idXNf
aWRfdG9fdHlwZSBbTUFYX01QX0JVU1NFU107DQogZXh0ZXJuIGludCBtcF9p
cnFfZW50cmllczsNCiBleHRlcm4gc3RydWN0IG1wY19jb25maWdfaW50c3Jj
IG1wX2lycXMgW01BWF9JUlFfU09VUkNFU107DQotLS0gbGludXgvaW5jbHVk
ZS9hc20taTM4Ni9zdHJpbmcuaC5vcmlnCVdlZCBBcHIgMTIgMDM6NDE6MDIg
MjAwMA0KKysrIGxpbnV4L2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgJV2Vk
IEFwciAxMiAwNDowODowMSAyMDAwDQpAQCAtNDUyLDYgKzQ1MiwzNiBAQA0K
IH0NCiAvKiBlbmQgb2YgYWRkaXRpb25hbCBzdHVmZiAqLw0KIA0KKyNkZWZp
bmUgX19IQVZFX0FSQ0hfU1RSU1RSDQorZXh0ZXJuIGlubGluZSBjaGFyICog
c3Ryc3RyKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpDQorew0K
K2ludAlkMCwgZDE7DQorcmVnaXN0ZXIgY2hhciAqIF9fcmVzOw0KK19fYXNt
X18gX192b2xhdGlsZV9fKA0KKwkibW92bCAlNiwlJWVkaVxuXHQiDQorCSJy
ZXBuZVxuXHQiDQorCSJzY2FzYlxuXHQiDQorCSJub3RsICUlZWN4XG5cdCIN
CisJImRlY2wgJSVlY3hcblx0IgkvKiBOT1RFISBUaGlzIGFsc28gc2V0cyBa
IGlmIHNlYXJjaHN0cmluZz0nJyAqLw0KKwkibW92bCAlJWVjeCwlJWVkeFxu
Ig0KKwkiMTpcdG1vdmwgJTYsJSVlZGlcblx0Ig0KKwkibW92bCAlJWVzaSwl
JWVheFxuXHQiDQorCSJtb3ZsICUlZWR4LCUlZWN4XG5cdCINCisJInJlcGVc
blx0Ig0KKwkiY21wc2Jcblx0Ig0KKwkiamUgMmZcblx0IgkJLyogYWxzbyB3
b3JrcyBmb3IgZW1wdHkgc3RyaW5nLCBzZWUgYWJvdmUgKi8NCisJInhjaGds
ICUlZWF4LCUlZXNpXG5cdCINCisJImluY2wgJSVlc2lcblx0Ig0KKwkiY21w
YiAkMCwtMSglJWVheClcblx0Ig0KKwkiam5lIDFiXG5cdCINCisJInhvcmwg
JSVlYXgsJSVlYXhcblx0Ig0KKwkiMjoiDQorCToiPWEiIChfX3JlcyksICI9
JmMiIChkMCksICI9JlMiIChkMSkNCisJOiIwIiAoMCksICIxIiAoMHhmZmZm
ZmZmZiksICIyIiAoY3MpLCAiZyIgKGN0KQ0KKwk6ImR4IiwgImRpIik7DQor
cmV0dXJuIF9fcmVzOw0KK30NCisNCiAvKg0KICAqIFRoaXMgbG9va3MgaG9y
cmlibHkgdWdseSwgYnV0IHRoZSBjb21waWxlciBjYW4gb3B0aW1pemUgaXQg
dG90YWxseSwNCiAgKiBhcyB3ZSBieSBub3cga25vdyB0aGF0IGJvdGggcGF0
dGVybiBhbmQgY291bnQgaXMgY29uc3RhbnQuLg0KLS0tIGxpbnV4L2FyY2gv
aTM4Ni9rZXJuZWwvYXBpYy5jLm9yaWcJRnJpIEZlYiAxMSAxNzoxOTo0NSAy
MDAwDQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9hcGljLmMJV2VkIEFw
ciAxMiAwMzo1NTo0NSAyMDAwDQpAQCAtNCw3ICs0LDkgQEANCiAgKgkoYykg
MTk5OSwgMjAwMCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4NCiAg
Kg0KICAqCUZpeGVzDQotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRzIGZv
ciBnZW51aW5lIDgyNDg5RFggdGltZXJzDQorICoJTWFjaWVqIFcuIFJvenlj
a2kJOglCaXRzIGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3M7DQorICoJCQkJ
CXRoYW5rcyB0byBFcmljIEdpbG1vcmUgZm9yDQorICoJCQkJCXRlc3Rpbmcg
dGhlc2UgZXh0ZW5zaXZlbHkNCiAgKi8NCiANCiAjaW5jbHVkZSA8bGludXgv
Y29uZmlnLmg+DQpAQCAtNDQsMzIgKzQ2LDk2IEBADQogCXJldHVybiBtYXhs
dnQ7DQogfQ0KIA0KLXZvaWQgZGlzYWJsZV9sb2NhbF9BUElDICh2b2lkKQ0K
K3N0YXRpYyB2b2lkIGNsZWFyX2xvY2FsX0FQSUModm9pZCkNCiB7DQotCXVu
c2lnbmVkIGxvbmcgdmFsdWU7DQotICAgICAgICBpbnQgbWF4bHZ0Ow0KKwlp
bnQgbWF4bHZ0Ow0KKwl1bnNpZ25lZCBsb25nIHY7DQorDQorCW1heGx2dCA9
IGdldF9tYXhsdnQoKTsNCiANCiAJLyoNCi0JICogRGlzYWJsZSBBUElDDQor
CSAqIENhcmVmdWw6IHdlIGhhdmUgdG8gc2V0IG1hc2tzIG9ubHkgZmlyc3Qg
dG8gZGVhc3NlcnQNCisJICogYW55IGxldmVsLXRyaWdnZXJlZCBzb3VyY2Vz
Lg0KIAkgKi8NCi0gCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7DQot
IAl2YWx1ZSAmPSB+KDE8PDgpOw0KLSAJYXBpY193cml0ZShBUElDX1NQSVYs
dmFsdWUpOw0KKwl2ID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7DQorCWFwaWNf
d3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgdiB8IEFQSUNfTFZUX01BU0tFRCk7
DQorCXYgPSBhcGljX3JlYWQoQVBJQ19MVlQwKTsNCisJYXBpY193cml0ZV9h
cm91bmQoQVBJQ19MVlQwLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsNCisJdiA9
IGFwaWNfcmVhZChBUElDX0xWVDEpOw0KKwlhcGljX3dyaXRlX2Fyb3VuZChB
UElDX0xWVDEsIHYgfCBBUElDX0xWVF9NQVNLRUQpOw0KKwlpZiAobWF4bHZ0
ID49IDMpIHsNCisJCXYgPSBhcGljX3JlYWQoQVBJQ19MVlRFUlIpOw0KKwkJ
YXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHYgfCBBUElDX0xWVF9N
QVNLRUQpOw0KKwl9DQorCWlmIChtYXhsdnQgPj0gNCkgew0KKwkJdiA9IGFw
aWNfcmVhZChBUElDX0xWVFBDKTsNCisJCWFwaWNfd3JpdGVfYXJvdW5kKEFQ
SUNfTFZUUEMsIHYgfCBBUElDX0xWVF9NQVNLRUQpOw0KKwl9DQogDQogCS8q
DQogCSAqIENsZWFuIEFQSUMgc3RhdGUgZm9yIG90aGVyIE9TczoNCiAJICov
DQotIAl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYpOw0KLSAJdmFsdWUg
Jj0gfigxPDw4KTsNCi0gCWFwaWNfd3JpdGUoQVBJQ19TUElWLHZhbHVlKTsN
Ci0JbWF4bHZ0ID0gZ2V0X21heGx2dCgpOw0KLQlhcGljX3dyaXRlX2Fyb3Vu
ZChBUElDX0xWVFQsIDB4MDAwMTAwMDApOw0KLQlhcGljX3dyaXRlX2Fyb3Vu
ZChBUElDX0xWVDAsIDB4MDAwMTAwMDApOw0KLQlhcGljX3dyaXRlX2Fyb3Vu
ZChBUElDX0xWVDEsIDB4MDAwMTAwMDApOw0KKwlhcGljX3dyaXRlX2Fyb3Vu
ZChBUElDX0xWVFQsIEFQSUNfTFZUX01BU0tFRCk7DQorCWFwaWNfd3JpdGVf
YXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEKTsNCisJYXBpY193
cml0ZV9hcm91bmQoQVBJQ19MVlQxLCBBUElDX0xWVF9NQVNLRUQpOw0KIAlp
ZiAobWF4bHZ0ID49IDMpDQotCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xW
VEVSUiwgMHgwMDAxMDAwMCk7DQorCQlhcGljX3dyaXRlX2Fyb3VuZChBUElD
X0xWVEVSUiwgQVBJQ19MVlRfTUFTS0VEKTsNCiAJaWYgKG1heGx2dCA+PSA0
KQ0KLQkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRQQywgMHgwMDAxMDAw
MCk7DQorCQlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVFBDLCBBUElDX0xW
VF9NQVNLRUQpOw0KK30NCisNCit2b2lkIF9faW5pdCBjb25uZWN0X2JzcF9B
UElDKHZvaWQpDQorew0KKwlpZiAocGljX21vZGUpIHsNCisJCS8qDQorCQkg
KiBEbyBub3QgdHJ1c3QgdGhlIGxvY2FsIEFQSUMgYmVpbmcgZW1wdHkgYXQg
Ym9vdHVwLg0KKwkJICovDQorCQljbGVhcl9sb2NhbF9BUElDKCk7DQorCQkv
Kg0KKwkJICogUElDIG1vZGUsIGVuYWJsZSBzeW1tZXRyaWMgSU8gbW9kZSBp
biB0aGUgSU1DUiwNCisJCSAqIGkuZS4gY29ubmVjdCBCU1AncyBsb2NhbCBB
UElDIHRvIElOVCBhbmQgTk1JIGxpbmVzLg0KKwkJICovDQorCQlwcmludGso
ImxlYXZpbmcgUElDIG1vZGUsIGVuYWJsaW5nIHN5bW1ldHJpYyBJTyBtb2Rl
LlxuIik7DQorCQlvdXRiKDB4NzAsIDB4MjIpOw0KKwkJb3V0YigweDAxLCAw
eDIzKTsNCisJfQ0KK30NCisNCit2b2lkIGRpc2Nvbm5lY3RfYnNwX0FQSUMo
dm9pZCkNCit7DQorCWlmIChwaWNfbW9kZSkgew0KKwkJLyoNCisJCSAqIFB1
dCB0aGUgYm9hcmQgYmFjayBpbnRvIFBJQyBtb2RlIChoYXMgYW4gZWZmZWN0
DQorCQkgKiBvbmx5IG9uIGNlcnRhaW4gb2xkZXIgYm9hcmRzKS4gIE5vdGUg
dGhhdCBBUElDDQorCQkgKiBpbnRlcnJ1cHRzLCBpbmNsdWRpbmcgSVBJcywg
d29uJ3Qgd29yayBiZXlvbmQNCisJCSAqIHRoaXMgcG9pbnQhICBUaGUgb25s
eSBleGNlcHRpb24gYXJlIElOSVQgSVBJcy4NCisJCSAqLw0KKwkJcHJpbnRr
KCJkaXNhYmxpbmcgc3ltbWV0cmljIElPIG1vZGUsIGVudGVyaW5nIFBJQyBt
b2RlLlxuIik7DQorCQlvdXRiKDB4NzAsIDB4MjIpOw0KKwkJb3V0YigweDAw
LCAweDIzKTsNCisJfQ0KK30NCisNCit2b2lkIGRpc2FibGVfbG9jYWxfQVBJ
Qyh2b2lkKQ0KK3sNCisJdW5zaWduZWQgbG9uZyB2YWx1ZTsNCisNCisJY2xl
YXJfbG9jYWxfQVBJQygpOw0KKw0KKwkvKg0KKwkgKiBEaXNhYmxlIEFQSUMg
KGltcGxpZXMgY2xlYXJpbmcgb2YgcmVnaXN0ZXJzDQorCSAqIGZvciA4MjQ4
OURYISkuDQorCSAqLw0KKwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1NQSVYp
Ow0KKwl2YWx1ZSAmPSB+KDE8PDgpOw0KKwlhcGljX3dyaXRlX2Fyb3VuZChB
UElDX1NQSVYsIHZhbHVlKTsNCit9DQorDQordm9pZCBfX2luaXQgc3luY19B
cmJfSURzKHZvaWQpDQorew0KKwlEcHJpbnRrKCJTeW5jaHJvbml6aW5nIEFy
YiBJRHMuXG4iKTsNCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQ
SUNfREVTVF9BTExJTkMgfCBBUElDX0lOVF9MRVZFTFRSSUcNCisJCQkJfCBB
UElDX0RNX0lOSVQpOw0KIH0NCiANCiBleHRlcm4gdm9pZCBfX2Vycm9yX2lu
X2FwaWNfYyAodm9pZCk7DQpAQCAtNzgsNiArMTQ0LDkgQEANCiB7DQogCXVu
c2lnbmVkIGxvbmcgdmFsdWUsIHZlciwgbWF4bHZ0Ow0KIA0KKwl2YWx1ZSA9
IGFwaWNfcmVhZChBUElDX0xWUik7DQorCXZlciA9IEdFVF9BUElDX1ZFUlNJ
T04odmFsdWUpOw0KKw0KIAlpZiAoKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYg
MHgwZikgIT0gMHgwZikNCiAJCV9fZXJyb3JfaW5fYXBpY19jKCk7DQogDQpA
QCAtODcsMTEgKzE1NiwxMiBAQA0KIAlpZiAoIXRlc3RfYml0KEdFVF9BUElD
X0lEKGFwaWNfcmVhZChBUElDX0lEKSksICZwaHlzX2NwdV9wcmVzZW50X21h
cCkpDQogCQlCVUcoKTsNCiANCi0gCXZhbHVlID0gYXBpY19yZWFkKEFQSUNf
U1BJVik7DQorCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfU1BJVik7DQorCXZh
bHVlICY9IH5BUElDX1ZFQ1RPUl9NQVNLOw0KIAkvKg0KIAkgKiBFbmFibGUg
QVBJQw0KIAkgKi8NCi0gCXZhbHVlIHw9ICgxPDw4KTsNCisJdmFsdWUgfD0g
KDE8PDgpOw0KIA0KIAkvKg0KIAkgKiBTb21lIHVua25vd24gSW50ZWwgSU8v
QVBJQyAob3IgQVBJQykgZXJyYXRhIGlzIGJpdGluZyB1cyB3aXRoDQpAQCAt
MTA2LDkgKzE3Niw5IEBADQogCSAqICAgUENJIE5lMjAwMCBuZXR3b3JraW5n
IGNhcmRzIGFuZCBQSUkvUElJSSBwcm9jZXNzb3JzLCBkdWFsDQogCSAqICAg
QlggY2hpcHNldC4gXQ0KIAkgKi8NCi0jaWYgMA0KKyNpZiAwDQogCS8qIEVu
YWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MCkgKi8NCi0gCXZhbHVlICY9
IH4oMTw8OSk7DQorCXZhbHVlICY9IH4oMTw8OSk7DQogI2Vsc2UNCiAJLyog
RGlzYWJsZSBmb2N1cyBwcm9jZXNzb3IgKGJpdD09MSkgKi8NCiAJdmFsdWUg
fD0gKDE8PDkpOw0KQEAgLTExNyw3ICsxODcsNyBAQA0KIAkgKiBTZXQgc3B1
cmlvdXMgSVJRIHZlY3Rvcg0KIAkgKi8NCiAJdmFsdWUgfD0gU1BVUklPVVNf
QVBJQ19WRUNUT1I7DQotIAlhcGljX3dyaXRlKEFQSUNfU1BJVix2YWx1ZSk7
DQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfU1BJViwgdmFsdWUpOw0KIA0K
IAkvKg0KIAkgKiBTZXQgdXAgTFZUMCwgTFZUMToNCkBAIC0xMjYsNDggKzE5
Niw0NCBAQA0KIAkgKiBzdHJpY3RseSBuZWNlc3NlcnkgaW4gcHVyZSBzeW1t
ZXRyaWMtSU8gbW9kZSwgYnV0IHNvbWV0aW1lcw0KIAkgKiB3ZSBkZWxlZ2F0
ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4NCiAJICovDQotCWlmICghc21w
X3Byb2Nlc3Nvcl9pZCgpKSB7DQotCQl2YWx1ZSA9IDB4MDAwMDA3MDA7DQor
CS8qDQorCSAqIFRPRE86IHNldCB1cCB0aHJvdWdoLWxvY2FsLUFQSUMgZnJv
bSB0aHJvdWdoLUkvTy1BUElDPyAtLW1hY3JvDQorCSAqLw0KKwl2YWx1ZSA9
IGFwaWNfcmVhZChBUElDX0xWVDApICYgQVBJQ19MVlRfTUFTS0VEOw0KKwlp
ZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSAmJiAocGljX21vZGUgfHwgIXZhbHVl
KSkgew0KKwkJdmFsdWUgPSBBUElDX0RNX0VYVElOVDsNCiAJCXByaW50aygi
ZW5hYmxlZCBFeHRJTlQgb24gQ1BVIyVkXG4iLCBzbXBfcHJvY2Vzc29yX2lk
KCkpOw0KIAl9IGVsc2Ugew0KLQkJdmFsdWUgPSAweDAwMDEwNzAwOw0KKwkJ
dmFsdWUgPSBBUElDX0RNX0VYVElOVCB8IEFQSUNfTFZUX01BU0tFRDsNCiAJ
CXByaW50aygibWFza2VkIEV4dElOVCBvbiBDUFUjJWRcbiIsIHNtcF9wcm9j
ZXNzb3JfaWQoKSk7DQogCX0NCi0gCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNf
TFZUMCx2YWx1ZSk7DQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwg
dmFsdWUpOw0KIA0KIAkvKg0KIAkgKiBvbmx5IHRoZSBCUCBzaG91bGQgc2Vl
IHRoZSBMSU5UMSBOTUkgc2lnbmFsLCBvYnZpb3VzbHkuDQogCSAqLw0KIAlp
ZiAoIXNtcF9wcm9jZXNzb3JfaWQoKSkNCi0JCXZhbHVlID0gMHgwMDAwMDQw
MDsJCS8vIHVubWFzayBOTUkNCisJCXZhbHVlID0gQVBJQ19ETV9OTUk7DQog
CWVsc2UNCi0JCXZhbHVlID0gMHgwMDAxMDQwMDsJCS8vIG1hc2sgTk1JDQot
IAlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0xWVDEsdmFsdWUpOw0KKwkJdmFs
dWUgPSBBUElDX0RNX05NSSB8IEFQSUNfTFZUX01BU0tFRDsNCisJaWYgKCFB
UElDX0lOVEVHUkFURUQodmVyKSkJCS8qIDgyNDg5RFggKi8NCisJCXZhbHVl
IHw9IEFQSUNfTFZUX0xFVkVMX1RSSUdHRVI7DQorCWFwaWNfd3JpdGVfYXJv
dW5kKEFQSUNfTFZUMSwgdmFsdWUpOw0KIA0KLQl2YWx1ZSA9IGFwaWNfcmVh
ZChBUElDX0xWUik7DQotCXZlciA9IEdFVF9BUElDX1ZFUlNJT04odmFsdWUp
Ow0KIAlpZiAoQVBJQ19JTlRFR1JBVEVEKHZlcikpIHsJCS8qICE4MjQ4OURY
ICovDQogCQltYXhsdnQgPSBnZXRfbWF4bHZ0KCk7DQotCQkvKg0KLQkJICog
RHVlIHRvIHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLg0KLQkJICovDQotCQlp
ZiAobWF4bHZ0ID4gMykgew0KLQkJCWFwaWNfcmVhZGFyb3VuZChBUElDX1NQ
SVYpOyAvLyBub3Qgc3RyaWN0bHkgbmVjZXNzZXJ5DQorCQlpZiAobWF4bHZ0
ID4gMykJCS8qIER1ZSB0byB0aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4gKi8N
CiAJCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsNCi0JCX0NCiAJCXZhbHVl
ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsNCiAJCXByaW50aygiRVNSIHZhbHVl
IGJlZm9yZSBlbmFibGluZyB2ZWN0b3I6ICUwOGx4XG4iLCB2YWx1ZSk7DQog
DQotCQl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX0xWVEVSUik7DQogCQl2YWx1
ZSA9IEVSUk9SX0FQSUNfVkVDVE9SOyAgICAgIC8vIGVuYWJsZXMgc2VuZGlu
ZyBlcnJvcnMNCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRFUlIsdmFsdWUpOw0K
KwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlRFUlIsIHZhbHVlKTsNCiAJ
CS8qDQogCQkgKiBzcGVjIHNheXMgY2xlYXIgZXJyb3JzIGFmdGVyIGVuYWJs
aW5nIHZlY3Rvci4NCiAJCSAqLw0KLQkJaWYgKG1heGx2dCAhPSAzKSB7DQot
CQkJYXBpY19yZWFkYXJvdW5kKEFQSUNfU1BJVik7DQorCQlpZiAobWF4bHZ0
ID4gMykNCiAJCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsNCi0JCX0NCiAJ
CXZhbHVlID0gYXBpY19yZWFkKEFQSUNfRVNSKTsNCiAJCXByaW50aygiRVNS
IHZhbHVlIGFmdGVyIGVuYWJsaW5nIHZlY3RvcjogJTA4bHhcbiIsIHZhbHVl
KTsNCiAJfSBlbHNlDQpAQCAtMTc3LDIyICsyNDMsMjMgQEANCiAJICogU2V0
IFRhc2sgUHJpb3JpdHkgdG8gJ2FjY2VwdCBhbGwnLiBXZSBuZXZlciBjaGFu
Z2UgdGhpcw0KIAkgKiBsYXRlciBvbi4NCiAJICovDQotIAl2YWx1ZSA9IGFw
aWNfcmVhZChBUElDX1RBU0tQUkkpOw0KLSAJdmFsdWUgJj0gfkFQSUNfVFBS
SV9NQVNLOw0KLSAJYXBpY193cml0ZShBUElDX1RBU0tQUkksdmFsdWUpOw0K
Kwl2YWx1ZSA9IGFwaWNfcmVhZChBUElDX1RBU0tQUkkpOw0KKwl2YWx1ZSAm
PSB+QVBJQ19UUFJJX01BU0s7DQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNf
VEFTS1BSSSwgdmFsdWUpOw0KIA0KIAkvKg0KIAkgKiBTZXQgdXAgdGhlIGxv
Z2ljYWwgZGVzdGluYXRpb24gSUQgYW5kIHB1dCB0aGUNCiAJICogQVBJQyBp
bnRvIGZsYXQgZGVsaXZlcnkgbW9kZS4NCiAJICovDQotIAl2YWx1ZSA9IGFw
aWNfcmVhZChBUElDX0xEUik7DQorCXZhbHVlID0gYXBpY19yZWFkKEFQSUNf
TERSKTsNCiAJdmFsdWUgJj0gfkFQSUNfTERSX01BU0s7DQogCXZhbHVlIHw9
ICgxPDwoc21wX3Byb2Nlc3Nvcl9pZCgpKzI0KSk7DQotIAlhcGljX3dyaXRl
KEFQSUNfTERSLHZhbHVlKTsNCisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19M
RFIsIHZhbHVlKTsNCiANCi0gCXZhbHVlID0gYXBpY19yZWFkKEFQSUNfREZS
KTsNCi0JdmFsdWUgfD0gU0VUX0FQSUNfREZSKDB4Zik7DQotIAlhcGljX3dy
aXRlKEFQSUNfREZSLCB2YWx1ZSk7DQorCS8qDQorCSAqIE11c3QgYmUgImFs
bCBvbmVzIiBleHBsaWNpdGx5IGZvciA4MjQ4OURYLg0KKwkgKi8NCisJYXBp
Y193cml0ZV9hcm91bmQoQVBJQ19ERlIsIDB4ZmZmZmZmZmYpOw0KIH0NCiAN
CiB2b2lkIF9faW5pdCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCkNCkBAIC0y
MTQsNiArMjgxLDEzIEBADQogCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJ
Q19CQVNFLCBhcGljX3BoeXMpOw0KIAlEcHJpbnRrKCJtYXBwZWQgQVBJQyB0
byAlMDhseCAoJTA4bHgpXG4iLCBBUElDX0JBU0UsIGFwaWNfcGh5cyk7DQog
DQorCS8qDQorCSAqIEZldGNoIHRoZSBBUElDIElEIG9mIHRoZSBCU1AgaW4g
Y2FzZSB3ZSBoYXZlIGENCisJICogZGVmYXVsdCBjb25maWd1cmF0aW9uIChv
ciB0aGUgTVAgdGFibGUgaXMgYnJva2VuKS4NCisJICovDQorCWlmIChib290
X2NwdV9pZCA9PSAtMVUpDQorCQlib290X2NwdV9pZCA9IEdFVF9BUElDX0lE
KGFwaWNfcmVhZChBUElDX0lEKSk7DQorDQogI2lmZGVmIENPTkZJR19YODZf
SU9fQVBJQw0KIAl7DQogCQl1bnNpZ25lZCBsb25nIGlvYXBpY19waHlzLCBp
ZHggPSBGSVhfSU9fQVBJQ19CQVNFXzA7DQpAQCAtMjg1LDcgKzM1OSw3IEBA
DQogCSAqIGNoaXBzZXQgdGltZXIgY2FuIGNhdXNlLg0KIAkgKi8NCiANCi0J
fSB3aGlsZSAoZGVsdGE8MzAwKTsNCisJfSB3aGlsZSAoZGVsdGEgPCAzMDAp
Ow0KIH0NCiANCiAvKg0KQEAgLTMwNSwyMSArMzc5LDE5IEBADQogew0KIAl1
bnNpZ25lZCBpbnQgbHZ0dDFfdmFsdWUsIHRtcF92YWx1ZTsNCiANCi0JdG1w
X3ZhbHVlID0gYXBpY19yZWFkKEFQSUNfTFZUVCk7DQogCWx2dHQxX3ZhbHVl
ID0gU0VUX0FQSUNfVElNRVJfQkFTRShBUElDX1RJTUVSX0JBU0VfRElWKSB8
DQogCQkJQVBJQ19MVlRfVElNRVJfUEVSSU9ESUMgfCBMT0NBTF9USU1FUl9W
RUNUT1I7DQotCWFwaWNfd3JpdGUoQVBJQ19MVlRULCBsdnR0MV92YWx1ZSk7
DQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUVCwgbHZ0dDFfdmFsdWUp
Ow0KIA0KIAkvKg0KIAkgKiBEaXZpZGUgUElDTEsgYnkgMTYNCiAJICovDQog
CXRtcF92YWx1ZSA9IGFwaWNfcmVhZChBUElDX1REQ1IpOw0KLQlhcGljX3dy
aXRlKEFQSUNfVERDUiwgKHRtcF92YWx1ZQ0KKwlhcGljX3dyaXRlX2Fyb3Vu
ZChBUElDX1REQ1IsICh0bXBfdmFsdWUNCiAJCQkJJiB+KEFQSUNfVERSX0RJ
Vl8xIHwgQVBJQ19URFJfRElWX1RNQkFTRSkpDQogCQkJCXwgQVBJQ19URFJf
RElWXzE2KTsNCiANCi0JdG1wX3ZhbHVlID0gYXBpY19yZWFkKEFQSUNfVE1J
Q1QpOw0KLQlhcGljX3dyaXRlKEFQSUNfVE1JQ1QsIGNsb2Nrcy9BUElDX0RJ
VklTT1IpOw0KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX1RNSUNULCBjbG9j
a3MvQVBJQ19ESVZJU09SKTsNCiB9DQogDQogdm9pZCBzZXR1cF9BUElDX3Rp
bWVyKHZvaWQgKiBkYXRhKQ0KQEAgLTM1Myw2ICs0MjUsMTIgQEANCiANCiAJ
dDAgPSBhcGljX3JlYWQoQVBJQ19UTUNDVCkqQVBJQ19ESVZJU09SOw0KIAlk
byB7DQorCQkvKg0KKwkJICogSXQgbG9va3MgbGlrZSB0aGUgODI0ODlEWCBj
YW5ub3QgaGFuZGxlDQorCQkgKiBjb25zZWN1dGl2ZSByZWFkcyBvZiB0aGUg
VE1DQ1QgcmVnaXN0ZXIgd2VsbDsNCisJCSAqIHRoaXMgZHVtbXkgcmVhZCBw
cmV2ZW50cyBpdCBmcm9tIGEgbG9ja3VwLg0KKwkJICovDQorCQlhcGljX3Jl
YWQoQVBJQ19TUElWKTsNCiAJCXQxID0gYXBpY19yZWFkKEFQSUNfVE1DQ1Qp
KkFQSUNfRElWSVNPUjsNCiAJCWRlbHRhID0gKGludCkodDAgLSB0MSAtIHNs
aWNlKihzbXBfcHJvY2Vzc29yX2lkKCkrMSkpOw0KIAl9IHdoaWxlIChkZWx0
YSA8IDApOw0KQEAgLTQ5MCw2ICs1NjgsNDEgQEANCiANCiAjdW5kZWYgQVBJ
Q19ESVZJU09SDQogDQorI2lmZGVmIENPTkZJR19TTVANCitzdGF0aWMgaW5s
aW5lIHZvaWQgaGFuZGxlX3NtcF90aW1lIChpbnQgdXNlciwgaW50IGNwdSkN
Cit7DQorCWludCBzeXN0ZW0gPSAhdXNlcjsNCisJc3RydWN0IHRhc2tfc3Ry
dWN0ICogcCA9IGN1cnJlbnQ7DQorCS8qDQorCSAqIEFmdGVyIGRvaW5nIHRo
ZSBhYm92ZSwgd2UgbmVlZCB0byBtYWtlIGxpa2UNCisJICogYSBub3JtYWwg
aW50ZXJydXB0IC0gb3RoZXJ3aXNlIHRpbWVyIGludGVycnVwdHMNCisJICog
aWdub3JlIHRoZSBnbG9iYWwgaW50ZXJydXB0IGxvY2ssIHdoaWNoIGlzIHRo
ZQ0KKwkgKiBXcm9uZ1RoaW5nICh0bSkgdG8gZG8uDQorCSAqLw0KKw0KKwlp
cnFfZW50ZXIoY3B1LCAwKTsNCisJdXBkYXRlX29uZV9wcm9jZXNzKHAsIDEs
IHVzZXIsIHN5c3RlbSwgY3B1KTsNCisJaWYgKHAtPnBpZCkgew0KKwkJcC0+
Y291bnRlciAtPSAxOw0KKwkJaWYgKHAtPmNvdW50ZXIgPD0gMCkgew0KKwkJ
CXAtPmNvdW50ZXIgPSAwOw0KKwkJCXAtPm5lZWRfcmVzY2hlZCA9IDE7DQor
CQl9DQorCQlpZiAocC0+cHJpb3JpdHkgPCBERUZfUFJJT1JJVFkpIHsNCisJ
CQlrc3RhdC5jcHVfbmljZSArPSB1c2VyOw0KKwkJCWtzdGF0LnBlcl9jcHVf
bmljZVtjcHVdICs9IHVzZXI7DQorCQl9IGVsc2Ugew0KKwkJCWtzdGF0LmNw
dV91c2VyICs9IHVzZXI7DQorCQkJa3N0YXQucGVyX2NwdV91c2VyW2NwdV0g
Kz0gdXNlcjsNCisJCX0NCisJCWtzdGF0LmNwdV9zeXN0ZW0gKz0gc3lzdGVt
Ow0KKwkJa3N0YXQucGVyX2NwdV9zeXN0ZW1bY3B1XSArPSBzeXN0ZW07DQor
DQorCX0NCisJaXJxX2V4aXQoY3B1LCAwKTsNCit9DQorI2VuZGlmDQorDQog
LyoNCiAgKiBMb2NhbCB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlci4gSXQgZG9l
cyBib3RoIHByb2ZpbGluZyBhbmQNCiAgKiBwcm9jZXNzIHN0YXRpc3RpY3Mv
cmVzY2hlZHVsaW5nLg0KQEAgLTUwMiw3ICs2MTUsNiBAQA0KIA0KIGlubGlu
ZSB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3Jl
Z3MgKiByZWdzKQ0KIHsNCi0JaW50IHVzZXIgPSAodXNlcl9tb2RlKHJlZ3Mp
ICE9IDApOw0KIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KIA0K
IAkvKg0KQEAgLTUxMSwxMyArNjIzLDggQEANCiAJICogdXBkYXRlZCB3aXRo
IGF0b21pYyBvcGVyYXRpb25zKS4gVGhpcyBpcyBlc3BlY2lhbGx5DQogCSAq
IHVzZWZ1bCB3aXRoIGEgcHJvZmlsaW5nIG11bHRpcGxpZXIgIT0gMQ0KIAkg
Ki8NCi0JaWYgKCF1c2VyKQ0KLQkJeDg2X2RvX3Byb2ZpbGUocmVncy0+ZWlw
KTsNCiANCiAJaWYgKC0tcHJvZl9jb3VudGVyW2NwdV0gPD0gMCkgew0KLQkJ
aW50IHN5c3RlbSA9IDEgLSB1c2VyOw0KLQkJc3RydWN0IHRhc2tfc3RydWN0
ICogcCA9IGN1cnJlbnQ7DQotDQogCQkvKg0KIAkJICogVGhlIG11bHRpcGxp
ZXIgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGdv
dA0KIAkJICogdG8gdGhpcyBwb2ludCBhcyBhIHJlc3VsdCBvZiB0aGUgdXNl
ciB3cml0aW5nIHRvDQpAQCAtNTMyLDMzICs2MzksOSBAQA0KIAkJCXByb2Zf
b2xkX211bHRpcGxpZXJbY3B1XSA9IHByb2ZfY291bnRlcltjcHVdOw0KIAkJ
fQ0KIA0KLQkJLyoNCi0JCSAqIEFmdGVyIGRvaW5nIHRoZSBhYm92ZSwgd2Ug
bmVlZCB0byBtYWtlIGxpa2UNCi0JCSAqIGEgbm9ybWFsIGludGVycnVwdCAt
IG90aGVyd2lzZSB0aW1lciBpbnRlcnJ1cHRzDQotCQkgKiBpZ25vcmUgdGhl
IGdsb2JhbCBpbnRlcnJ1cHQgbG9jaywgd2hpY2ggaXMgdGhlDQotCQkgKiBX
cm9uZ1RoaW5nICh0bSkgdG8gZG8uDQotCQkgKi8NCi0NCi0gCQlpcnFfZW50
ZXIoY3B1LCAwKTsNCi0JCXVwZGF0ZV9vbmVfcHJvY2VzcyhwLCAxLCB1c2Vy
LCBzeXN0ZW0sIGNwdSk7DQotCQlpZiAocC0+cGlkKSB7DQotCQkJcC0+Y291
bnRlciAtPSAxOw0KLQkJCWlmIChwLT5jb3VudGVyIDw9IDApIHsNCi0JCQkJ
cC0+Y291bnRlciA9IDA7DQotCQkJCXAtPm5lZWRfcmVzY2hlZCA9IDE7DQot
CQkJfQ0KLQkJCWlmIChwLT5wcmlvcml0eSA8IERFRl9QUklPUklUWSkgew0K
LQkJCQlrc3RhdC5jcHVfbmljZSArPSB1c2VyOw0KLQkJCQlrc3RhdC5wZXJf
Y3B1X25pY2VbY3B1XSArPSB1c2VyOw0KLQkJCX0gZWxzZSB7DQotCQkJCWtz
dGF0LmNwdV91c2VyICs9IHVzZXI7DQotCQkJCWtzdGF0LnBlcl9jcHVfdXNl
cltjcHVdICs9IHVzZXI7DQotCQkJfQ0KLQkJCWtzdGF0LmNwdV9zeXN0ZW0g
Kz0gc3lzdGVtOw0KLQkJCWtzdGF0LnBlcl9jcHVfc3lzdGVtW2NwdV0gKz0g
c3lzdGVtOw0KLQ0KLQkJfQ0KLQkJaXJxX2V4aXQoY3B1LCAwKTsNCisjaWZk
ZWYgQ09ORklHX1NNUA0KKwkJaGFuZGxlX3NtcF90aW1lKHVzZXJfbW9kZShy
ZWdzKSwgY3B1KTsNCisjZW5kaWYNCiAJfQ0KIA0KIAkvKg0KQEAgLTYwMyw3
ICs2ODYsMTcgQEANCiAgKi8NCiBhc21saW5rYWdlIHZvaWQgc21wX3NwdXJp
b3VzX2ludGVycnVwdCh2b2lkKQ0KIHsNCi0JYWNrX0FQSUNfaXJxKCk7DQor
CXVuc2lnbmVkIGxvbmcgdjsNCisNCisJLyoNCisJICogQ2hlY2sgaWYgdGhp
cyByZWFsbHkgaXMgYSBzcHVyaW91cyBpbnRlcnJ1cHQgYW5kIEFDSyBpdA0K
KwkgKiBpZiBpdCBpcyBhIHZlY3RvcmVkIG9uZS4gIEp1c3QgaW4gY2FzZS4u
Lg0KKwkgKiBTcHVyaW91cyBpbnRlcnJ1cHRzIHNob3VsZCBub3QgYmUgQUNL
ZWQuDQorCSAqLw0KKwl2ID0gYXBpY19yZWFkKEFQSUNfSVNSICsgKChTUFVS
SU9VU19BUElDX1ZFQ1RPUiAmIH4weDFmKSA+PiAxKSk7DQorCWlmICh2ICYg
KDEgPDwgKFNQVVJJT1VTX0FQSUNfVkVDVE9SICYgMHgxZikpKQ0KKwkJYWNr
X0FQSUNfaXJxKCk7DQorDQogCS8qIHNlZSBzdy1kZXYtbWFuIHZvbCAzLCBj
aGFwdGVyIDcuNC4xMy41ICovDQogCXByaW50aygic3B1cmlvdXMgQVBJQyBp
bnRlcnJ1cHQgb24gQ1BVIyVkLCBzaG91bGQgbmV2ZXIgaGFwcGVuLlxuIiwN
CiAJCQlzbXBfcHJvY2Vzc29yX2lkKCkpOw0KLS0tIGxpbnV4L2FyY2gvaTM4
Ni9rZXJuZWwvaTM4Nl9rc3ltcy5jLm9yaWcJV2VkIEFwciAxMiAwMzo0MTow
MSAyMDAwDQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1z
LmMJV2VkIEFwciAxMiAwMzo0MToxMSAyMDAwDQpAQCAtNjgsNyArNjgsNiBA
QA0KIEVYUE9SVF9TWU1CT0xfTk9WRVJTKF9fZG93bl9yZWFkX2ZhaWxlZCk7
DQogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoX19yd3NlbV93YWtlKTsNCiAvKiBO
ZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8NCi1FWFBPUlRfU1lNQk9M
KGNzdW1fcGFydGlhbF9jb3B5KTsNCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFy
dGlhbF9jb3B5X2dlbmVyaWMpOw0KIC8qIERlbGF5IGxvb3BzICovDQogRVhQ
T1JUX1NZTUJPTChfX3VkZWxheSk7DQpAQCAtODQsNyArODMsNiBAQA0KIA0K
IEVYUE9SVF9TWU1CT0woc3RydG9rKTsNCiBFWFBPUlRfU1lNQk9MKHN0cnBi
cmspOw0KLUVYUE9SVF9TWU1CT0woc3Ryc3RyKTsNCiANCiBFWFBPUlRfU1lN
Qk9MKHN0cm5jcHlfZnJvbV91c2VyKTsNCiBFWFBPUlRfU1lNQk9MKF9fc3Ry
bmNweV9mcm9tX3VzZXIpOw0KLS0tIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwv
aTgyNTkuYy5vcmlnCVdlZCBBcHIgMTIgMDM6NDE6MDEgMjAwMA0KKysrIGxp
bnV4L2FyY2gvaTM4Ni9rZXJuZWwvaTgyNTkuYwlXZWQgQXByIDEyIDAzOjQx
OjExIDIwMDANCkBAIC00MTUsNyArNDE1LDcgQEANCiAJZm9yIChpID0gMDsg
aSA8IE5SX0lSUVM7IGkrKykgew0KIAkJaXJxX2Rlc2NbaV0uc3RhdHVzID0g
SVJRX0RJU0FCTEVEOw0KIAkJaXJxX2Rlc2NbaV0uYWN0aW9uID0gMDsNCi0J
CWlycV9kZXNjW2ldLmRlcHRoID0gMDsNCisJCWlycV9kZXNjW2ldLmRlcHRo
ID0gMTsNCiANCiAJCWlmIChpIDwgMTYpIHsNCiAJCQkvKg0KLS0tIGxpbnV4
L2FyY2gvaTM4Ni9rZXJuZWwvaW9fYXBpYy5jLm9yaWcJV2VkIEFwciAxMiAw
Mzo0MTowMSAyMDAwDQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9pb19h
cGljLmMJV2VkIEFwciAxMiAwNDowNToxMyAyMDAwDQpAQCAtMTMsNyArMTMs
OSBAQA0KICAqCWFuZCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4N
CiAgKg0KICAqCUZpeGVzDQotICoJTWFjaWVqIFcuIFJvenlja2kJOglCaXRz
IGZvciBnZW51aW5lIDgyNDg5RFggQVBJQ3MNCisgKglNYWNpZWogVy4gUm96
eWNraQk6CUJpdHMgZm9yIGdlbnVpbmUgODI0ODlEWCBBUElDczsNCisgKgkJ
CQkJdGhhbmtzIHRvIEVyaWMgR2lsbW9yZSBmb3INCisgKgkJCQkJdGVzdGlu
ZyB0aGVzZSBleHRlbnNpdmVseQ0KICAqLw0KIA0KICNpbmNsdWRlIDxsaW51
eC9tbS5oPg0KQEAgLTQ2LDkgKzQ4LDYgQEANCiAvKiBNUCBJUlEgc291cmNl
IGVudHJpZXMgKi8NCiBpbnQgbXBfaXJxX2VudHJpZXMgPSAwOw0KIA0KLS8q
IG5vbi0wIGlmIGRlZmF1bHQgKHRhYmxlLWxlc3MpIE1QIGNvbmZpZ3VyYXRp
b24gKi8NCi1pbnQgbXBjX2RlZmF1bHRfdHlwZSA9IDA7DQotDQogLyoNCiAg
KiBSb3VnaCBlc3RpbWF0aW9uIG9mIGhvdyBtYW55IHNoYXJlZCBJUlFzIHRo
ZXJlIGFyZSwgY2FuDQogICogYmUgY2hhbmdlZCBhbnl0aW1lLg0KQEAgLTE2
Niw3ICsxNjUsNyBAQA0KIA0KICNkZWZpbmUgTUFYX1BJUlFTIDgNCiBpbnQg
cGlycV9lbnRyaWVzIFtNQVhfUElSUVNdOw0KLWludCBwaXJxc19lbmFibGVk
Ow0KK2ludCBwaXJxc19lbmFibGVkID0gMDsNCiBpbnQgc2tpcF9pb2FwaWNf
c2V0dXAgPSAwOw0KIA0KIHN0YXRpYyBpbnQgX19pbml0IGlvYXBpY19zZXR1
cChjaGFyICpzdHIpDQpAQCAtMjM1LDcgKzIzNCw4IEBADQogCQlpbnQgbGJ1
cyA9IG1wX2lycXNbaV0ubXBjX3NyY2J1czsNCiANCiAJCWlmICgobXBfYnVz
X2lkX3RvX3R5cGVbbGJ1c10gPT0gTVBfQlVTX0lTQSB8fA0KLQkJICAgICBt
cF9idXNfaWRfdG9fdHlwZVtsYnVzXSA9PSBNUF9CVVNfRUlTQSkgJiYNCisJ
CSAgICAgbXBfYnVzX2lkX3RvX3R5cGVbbGJ1c10gPT0gTVBfQlVTX0VJU0Eg
fHwNCisJCSAgICAgbXBfYnVzX2lkX3RvX3R5cGVbbGJ1c10gPT0gTVBfQlVT
X01DQSkgJiYNCiAJCSAgICAobXBfaXJxc1tpXS5tcGNfaXJxdHlwZSA9PSB0
eXBlKSAmJg0KIAkJICAgIChtcF9pcnFzW2ldLm1wY19zcmNidXNpcnEgPT0g
MHgwMCkpDQogDQpAQCAtMjYwLDEzICsyNjAsMTUgQEANCiAJCQlpZiAobXBf
aW9hcGljc1thcGljXS5tcGNfYXBpY2lkID09IG1wX2lycXNbaV0ubXBjX2Rz
dGFwaWMpDQogCQkJCWJyZWFrOw0KIA0KLQkJaWYgKChhcGljIHx8IElPX0FQ
SUNfSVJRKG1wX2lycXNbaV0ubXBjX2RzdGlycSkpICYmDQotCQkgICAgKG1w
X2J1c19pZF90b190eXBlW2xidXNdID09IE1QX0JVU19QQ0kpICYmDQorCQlp
ZiAoKG1wX2J1c19pZF90b190eXBlW2xidXNdID09IE1QX0JVU19QQ0kpICYm
DQogCQkgICAgIW1wX2lycXNbaV0ubXBjX2lycXR5cGUgJiYNCiAJCSAgICAo
YnVzID09IG1wX2J1c19pZF90b19wY2lfYnVzW21wX2lycXNbaV0ubXBjX3Ny
Y2J1c10pICYmDQogCQkgICAgKHNsb3QgPT0gKChtcF9pcnFzW2ldLm1wY19z
cmNidXNpcnEgPj4gMikgJiAweDFmKSkpIHsNCiAJCQlpbnQgaXJxID0gcGlu
XzJfaXJxKGksYXBpYyxtcF9pcnFzW2ldLm1wY19kc3RpcnEpOw0KIA0KKwkJ
CWlmICghKGFwaWMgfHwgSU9fQVBJQ19JUlEoaXJxKSkpDQorCQkJCWNvbnRp
bnVlOw0KKw0KIAkJCWlmIChwY2lfcGluID09IChtcF9pcnFzW2ldLm1wY19z
cmNidXNpcnEgJiAzKSkNCiAJCQkJcmV0dXJuIGlycTsNCiAJCQkvKg0KQEAg
LTI5OCwxNSArMzAwLDI3IEBADQogICogRUlTQSBjb25mb3JtaW5nIGluIHRo
ZSBNUCB0YWJsZSwgdGhhdCBtZWFucyBpdHMgdHJpZ2dlciB0eXBlIG11c3QN
CiAgKiBiZSByZWFkIGluIGZyb20gdGhlIEVMQ1IgKi8NCiANCi0jZGVmaW5l
IGRlZmF1bHRfRUlTQV90cmlnZ2VyKGlkeCkJKEVJU0FfRUxDUihtcF9pcnFz
W2lkeF0ubXBjX2RzdGlycSkpDQorI2RlZmluZSBkZWZhdWx0X0VJU0FfdHJp
Z2dlcihpZHgpCShFSVNBX0VMQ1IobXBfaXJxc1tpZHhdLm1wY19zcmNidXNp
cnEpKQ0KICNkZWZpbmUgZGVmYXVsdF9FSVNBX3BvbGFyaXR5KGlkeCkJKDAp
DQogDQotLyogSVNBIGludGVycnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6
ZXJvIGVkZ2UgdHJpZ2dlcmVkLCBldmVuIHdoZW4NCi0gKiBsaXN0ZWQgYXMg
Y29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovDQorLyogSVNBIGludGVy
cnVwdHMgYXJlIGFsd2F5cyBwb2xhcml0eSB6ZXJvIGVkZ2UgdHJpZ2dlcmVk
LA0KKyAqIHdoZW4gbGlzdGVkIGFzIGNvbmZvcm1pbmcgaW4gdGhlIE1QIHRh
YmxlLiAqLw0KIA0KICNkZWZpbmUgZGVmYXVsdF9JU0FfdHJpZ2dlcihpZHgp
CSgwKQ0KICNkZWZpbmUgZGVmYXVsdF9JU0FfcG9sYXJpdHkoaWR4KQkoMCkN
CiANCisvKiBQQ0kgaW50ZXJydXB0cyBhcmUgYWx3YXlzIHBvbGFyaXR5IG9u
ZSBsZXZlbCB0cmlnZ2VyZWQsDQorICogd2hlbiBsaXN0ZWQgYXMgY29uZm9y
bWluZyBpbiB0aGUgTVAgdGFibGUuICovDQorDQorI2RlZmluZSBkZWZhdWx0
X1BDSV90cmlnZ2VyKGlkeCkJKDEpDQorI2RlZmluZSBkZWZhdWx0X1BDSV9w
b2xhcml0eShpZHgpCSgxKQ0KKw0KKy8qIE1DQSBpbnRlcnJ1cHRzIGFyZSBh
bHdheXMgcG9sYXJpdHkgemVybyBsZXZlbCB0cmlnZ2VyZWQsDQorICogd2hl
biBsaXN0ZWQgYXMgY29uZm9ybWluZyBpbiB0aGUgTVAgdGFibGUuICovDQor
DQorI2RlZmluZSBkZWZhdWx0X01DQV90cmlnZ2VyKGlkeCkJKDEpDQorI2Rl
ZmluZSBkZWZhdWx0X01DQV9wb2xhcml0eShpZHgpCSgwKQ0KKw0KIHN0YXRp
YyBpbnQgX19pbml0IE1QQklPU19wb2xhcml0eShpbnQgaWR4KQ0KIHsNCiAJ
aW50IGJ1cyA9IG1wX2lycXNbaWR4XS5tcGNfc3JjYnVzOw0KQEAgLTMyNiwx
NCArMzQwLDE5IEBADQogCQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfSVNBX3Bv
bGFyaXR5KGlkeCk7DQogCQkJCQlicmVhazsNCiAJCQkJfQ0KLQkJCQljYXNl
IE1QX0JVU19FSVNBOg0KKwkJCQljYXNlIE1QX0JVU19FSVNBOiAvKiBFSVNB
IHBpbiAqLw0KIAkJCQl7DQogCQkJCQlwb2xhcml0eSA9IGRlZmF1bHRfRUlT
QV9wb2xhcml0eShpZHgpOw0KIAkJCQkJYnJlYWs7DQogCQkJCX0NCiAJCQkJ
Y2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGluICovDQogCQkJCXsNCi0JCQkJ
CXBvbGFyaXR5ID0gMTsNCisJCQkJCXBvbGFyaXR5ID0gZGVmYXVsdF9QQ0lf
cG9sYXJpdHkoaWR4KTsNCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJCWNh
c2UgTVBfQlVTX01DQTogLyogTUNBIHBpbiAqLw0KKwkJCQl7DQorCQkJCQlw
b2xhcml0eSA9IGRlZmF1bHRfTUNBX3BvbGFyaXR5KGlkeCk7DQogCQkJCQli
cmVhazsNCiAJCQkJfQ0KIAkJCQlkZWZhdWx0Og0KQEAgLTM4NSwxOSArNDA0
LDI0IEBADQogCQl7DQogCQkJc3dpdGNoIChtcF9idXNfaWRfdG9fdHlwZVti
dXNdKQ0KIAkJCXsNCi0JCQkJY2FzZSBNUF9CVVNfSVNBOg0KKwkJCQljYXNl
IE1QX0JVU19JU0E6IC8qIElTQSBwaW4gKi8NCiAJCQkJew0KIAkJCQkJdHJp
Z2dlciA9IGRlZmF1bHRfSVNBX3RyaWdnZXIoaWR4KTsNCiAJCQkJCWJyZWFr
Ow0KIAkJCQl9DQotCQkJCWNhc2UgTVBfQlVTX0VJU0E6DQorCQkJCWNhc2Ug
TVBfQlVTX0VJU0E6IC8qIEVJU0EgcGluICovDQogCQkJCXsNCiAJCQkJCXRy
aWdnZXIgPSBkZWZhdWx0X0VJU0FfdHJpZ2dlcihpZHgpOw0KIAkJCQkJYnJl
YWs7DQogCQkJCX0NCi0JCQkJY2FzZSBNUF9CVVNfUENJOiAvKiBQQ0kgcGlu
LCBsZXZlbCAqLw0KKwkJCQljYXNlIE1QX0JVU19QQ0k6IC8qIFBDSSBwaW4g
Ki8NCiAJCQkJew0KLQkJCQkJdHJpZ2dlciA9IDE7DQorCQkJCQl0cmlnZ2Vy
ID0gZGVmYXVsdF9QQ0lfdHJpZ2dlcihpZHgpOw0KKwkJCQkJYnJlYWs7DQor
CQkJCX0NCisJCQkJY2FzZSBNUF9CVVNfTUNBOiAvKiBNQ0EgcGluICovDQor
CQkJCXsNCisJCQkJCXRyaWdnZXIgPSBkZWZhdWx0X01DQV90cmlnZ2VyKGlk
eCk7DQogCQkJCQlicmVhazsNCiAJCQkJfQ0KIAkJCQlkZWZhdWx0Og0KQEAg
LTQ2MCw2ICs0ODQsNyBAQA0KIAl7DQogCQljYXNlIE1QX0JVU19JU0E6IC8q
IElTQSBwaW4gKi8NCiAJCWNhc2UgTVBfQlVTX0VJU0E6DQorCQljYXNlIE1Q
X0JVU19NQ0E6DQogCQl7DQogCQkJaXJxID0gbXBfaXJxc1tpZHhdLm1wY19z
cmNidXNpcnE7DQogCQkJYnJlYWs7DQpAQCAtNjI0LDggKzY0OSw4IEBADQog
DQogCWRpc2FibGVfODI1OUFfaXJxKDApOw0KIA0KLQlhcGljX3JlYWRhcm91
bmQoQVBJQ19MVlQwKTsNCi0JYXBpY193cml0ZShBUElDX0xWVDAsIDB4MDAw
MTA3MDApOwkvLyBtYXNrIExWVDANCisJLyogbWFzayBMVlQwICovDQorCWFw
aWNfd3JpdGVfYXJvdW5kKEFQSUNfTFZUMCwgQVBJQ19MVlRfTUFTS0VEIHwg
QVBJQ19ETV9FWFRJTlQpOw0KIA0KIAlpbml0XzgyNTlBKDEpOw0KIA0KQEAg
LTY1MCw4ICs2NzUsOCBAQA0KIAkvKg0KIAkgKiBBZGQgaXQgdG8gdGhlIElP
LUFQSUMgaXJxLXJvdXRpbmcgdGFibGU6DQogCSAqLw0KLQlpb19hcGljX3dy
aXRlKDAsIDB4MTArMipwaW4sICooKChpbnQgKikmZW50cnkpKzApKTsNCiAJ
aW9fYXBpY193cml0ZSgwLCAweDExKzIqcGluLCAqKCgoaW50ICopJmVudHJ5
KSsxKSk7DQorCWlvX2FwaWNfd3JpdGUoMCwgMHgxMCsyKnBpbiwgKigoKGlu
dCAqKSZlbnRyeSkrMCkpOw0KIA0KIAllbmFibGVfODI1OUFfaXJxKDApOw0K
IH0NCkBAIC03MjUsOCArNzUwLDggQEANCiANCiAJcHJpbnRrKEtFUk5fREVC
VUcgIi4uLi4gSVJRIHJlZGlyZWN0aW9uIHRhYmxlOlxuIik7DQogDQotCXBy
aW50ayhLRVJOX0RFQlVHICIgTlIgTG9nIFBoeSAiKTsNCi0JcHJpbnRrKEtF
Uk5fREVCVUcgIk1hc2sgVHJpZyBJUlIgUG9sIFN0YXQgRGVzdCBEZWxpIFZl
Y3Q6ICAgXG4iKTsNCisJcHJpbnRrKEtFUk5fREVCVUcgIiBOUiBMb2cgUGh5
IE1hc2sgVHJpZyBJUlIgUG9sIg0KKwkJCSAgIiBTdGF0IERlc3QgRGVsaSBW
ZWN0OiAgIFxuIik7DQogDQogCWZvciAoaSA9IDA7IGkgPD0gcmVnXzAxLmVu
dHJpZXM7IGkrKykgew0KIAkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkg
ZW50cnk7DQpAQCAtODMxLDEzICs4NTYsOCBAQA0KIAlwcmludF9BUElDX2Jp
dGZpZWxkKEFQSUNfSVJSKTsNCiANCiAJaWYgKEFQSUNfSU5URUdSQVRFRCh2
ZXIpKSB7CQkvKiAhODI0ODlEWCAqLw0KLQkJLyoNCi0JCSAqIER1ZSB0byB0
aGUgUGVudGl1bSBlcnJhdHVtIDNBUC4NCi0JCSAqLw0KLQkJaWYgKG1heGx2
dCA+IDMpIHsNCi0JCQlhcGljX3JlYWRhcm91bmQoQVBJQ19TUElWKTsgLy8g
bm90IHN0cmljdGx5IG5lY2Vzc2VyeQ0KKwkJaWYgKG1heGx2dCA+IDMpCQkv
KiBEdWUgdG8gdGhlIFBlbnRpdW0gZXJyYXR1bSAzQVAuICovDQogCQkJYXBp
Y193cml0ZShBUElDX0VTUiwgMCk7DQotCQl9DQogCQl2ID0gYXBpY19yZWFk
KEFQSUNfRVNSKTsNCiAJCXByaW50ayhLRVJOX0RFQlVHICIuLi4gQVBJQyBF
U1I6ICUwOHhcbiIsIHYpOw0KIAl9DQpAQCAtODc5LDYgKzg5OSwzMiBAQA0K
IAlwcmludF9sb2NhbF9BUElDKE5VTEwpOw0KIH0NCiANCit2b2lkIC8qX19p
bml0Ki8gcHJpbnRfUElDKHZvaWQpDQorew0KKwl1bnNpZ25lZCBpbnQgdiwg
ZmxhZ3M7DQorDQorCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJ
QyBjb250ZW50c1xuIik7DQorDQorCXYgPSBpbmIoMHhhMSkgPDwgOCB8IGlu
YigweDIxKTsNCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElNUjog
JTA0eFxuIiwgdik7DQorDQorCXYgPSBpbmIoMHhhMCkgPDwgOCB8IGluYigw
eDIwKTsNCisJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElSUjogJTA0
eFxuIiwgdik7DQorDQorCV9fc2F2ZV9mbGFncyhmbGFncyk7DQorCV9fY2xp
KCk7DQorCW91dGIoMHgwYiwweGEwKTsNCisJb3V0YigweDBiLDB4MjApOw0K
Kwl2ID0gaW5iKDB4YTApIDw8IDggfCBpbmIoMHgyMCk7DQorCW91dGIoMHgw
YSwweGEwKTsNCisJb3V0YigweDBhLDB4MjApOw0KKwlfX3Jlc3RvcmVfZmxh
Z3MoZmxhZ3MpOw0KKwlwcmludGsoS0VSTl9ERUJVRyAiLi4uIFBJQyAgSVNS
OiAlMDR4XG4iLCB2KTsNCisNCisJdiA9IGluYigweDRkMSkgPDwgOCB8IGlu
YigweDRkMCk7DQorCXByaW50ayhLRVJOX0RFQlVHICIuLi4gUElDIEVMQ1I6
ICUwNHhcbiIsIHYpOw0KK30NCisNCiBzdGF0aWMgdm9pZCBfX2luaXQgZW5h
YmxlX0lPX0FQSUModm9pZCkNCiB7DQogCXN0cnVjdCBJT19BUElDX3JlZ18w
MSByZWdfMDE7DQpAQCAtODkwLDE2ICs5MzYsNyBAQA0KIAl9DQogCWlmICgh
cGlycXNfZW5hYmxlZCkNCiAJCWZvciAoaSA9IDA7IGkgPCBNQVhfUElSUVM7
IGkrKykNCi0JCQlwaXJxX2VudHJpZXNbaV0gPS0gMTsNCi0NCi0JaWYgKHBp
Y19tb2RlKSB7DQotCQkvKg0KLQkJICogUElDIG1vZGUsIGVuYWJsZSBzeW1t
ZXRyaWMgSU8gbW9kZSBpbiB0aGUgSU1DUi4NCi0JCSAqLw0KLQkJcHJpbnRr
KCJsZWF2aW5nIFBJQyBtb2RlLCBlbmFibGluZyBzeW1tZXRyaWMgSU8gbW9k
ZS5cbiIpOw0KLQkJb3V0YigweDcwLCAweDIyKTsNCi0JCW91dGIoMHgwMSwg
MHgyMyk7DQotCX0NCisJCQlwaXJxX2VudHJpZXNbaV0gPSAtMTsNCiANCiAJ
LyoNCiAJICogVGhlIG51bWJlciBvZiBJTy1BUElDIElSUSByZWdpc3RlcnMg
KD09ICNwaW5zKToNCkBAIC05MjUsMTUgKzk2Miw3IEBADQogCSAqLw0KIAlj
bGVhcl9JT19BUElDKCk7DQogDQotCS8qDQotCSAqIFB1dCBpdCBiYWNrIGlu
dG8gUElDIG1vZGUgKGhhcyBhbiBlZmZlY3Qgb25seSBvbg0KLQkgKiBjZXJ0
YWluIG9sZGVyIGJvYXJkcykNCi0JICovDQotCWlmIChwaWNfbW9kZSkgew0K
LQkJcHJpbnRrKCJkaXNhYmxpbmcgc3ltbWV0cmljIElPIG1vZGUsIGVudGVy
aW5nIFBJQyBtb2RlLlxuIik7DQotCQlvdXRiX3AoMHg3MCwgMHgyMik7DQot
CQlvdXRiX3AoMHgwMCwgMHgyMyk7DQotCX0NCisJZGlzY29ubmVjdF9ic3Bf
QVBJQygpOw0KIH0NCiANCiAvKg0KQEAgLTk4Niw0OCArMTAxNSw2IEBADQog
CX0NCiB9DQogDQotc3RhdGljIHZvaWQgX19pbml0IGNvbnN0cnVjdF9kZWZh
dWx0X0lTQV9tcHRhYmxlKHZvaWQpDQotew0KLQlpbnQgaSwgcG9zID0gMDsN
Ci0JY29uc3QgaW50IGJ1c190eXBlID0gKG1wY19kZWZhdWx0X3R5cGUgPT0g
MiB8fCBtcGNfZGVmYXVsdF90eXBlID09IDMgfHwNCi0JCQkgICAgICBtcGNf
ZGVmYXVsdF90eXBlID09IDYpID8gTVBfQlVTX0VJU0EgOiBNUF9CVVNfSVNB
Ow0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgew0KLQkJaWYgKCFJ
T19BUElDX0lSUShpKSkNCi0JCQljb250aW51ZTsNCi0NCi0JCW1wX2lycXNb
cG9zXS5tcGNfaXJxdHlwZSA9IG1wX0lOVDsNCi0JCW1wX2lycXNbcG9zXS5t
cGNfaXJxZmxhZyA9IDA7CQkvKiBkZWZhdWx0ICovDQotCQltcF9pcnFzW3Bv
c10ubXBjX3NyY2J1cyA9IDA7DQotCQltcF9pcnFzW3Bvc10ubXBjX3NyY2J1
c2lycSA9IGk7DQotCQltcF9pcnFzW3Bvc10ubXBjX2RzdGFwaWMgPSAwOw0K
LQkJbXBfaXJxc1twb3NdLm1wY19kc3RpcnEgPSBpOw0KLQkJcG9zKys7DQot
CX0NCi0JbXBfaXJxX2VudHJpZXMgPSBwb3M7DQotCW1wX2J1c19pZF90b190
eXBlWzBdID0gYnVzX3R5cGU7DQotDQotCS8qDQotCSAqIE1QIHNwZWNpZmlj
YXRpb24gMS40IGRlZmluZXMgc29tZSBleHRyYSBydWxlcyBmb3IgZGVmYXVs
dA0KLQkgKiBjb25maWd1cmF0aW9ucywgZml4IHRoZW0gdXAgaGVyZToNCi0J
ICovDQotCXN3aXRjaCAobXBjX2RlZmF1bHRfdHlwZSkNCi0Jew0KLQkJY2Fz
ZSAyOg0KLQkJLyoNCi0JCSAqIElSUTAgaXMgbm90IGNvbm5lY3RlZDoNCi0J
CSAqLw0KLQkJCW1wX2lycXNbMF0ubXBjX2lycXR5cGUgPSBtcF9FeHRJTlQ7
DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJLyoNCi0JCSAqIHBpbiAy
IGlzIElSUTA6DQotCQkgKi8NCi0JCQltcF9pcnFzWzBdLm1wY19kc3RpcnEg
PSAyOw0KLQl9DQotDQotfQ0KLQ0KIC8qDQogICogVGhlcmUgaXMgYSBuYXN0
eSBidWcgaW4gc29tZSBvbGRlciBTTVAgYm9hcmRzLCB0aGVpciBtcHRhYmxl
IGxpZXMNCiAgKiBhYm91dCB0aGUgdGltZXIgSVJRLiBXZSBkbyB0aGUgZm9s
bG93aW5nIHRvIHdvcmsgYXJvdW5kIHRoZSBzaXR1YXRpb246DQpAQCAtMTA0
MSw5ICsxMDI4LDE3IEBADQogCXVuc2lnbmVkIGludCB0MSA9IGppZmZpZXM7
DQogDQogCXN0aSgpOw0KLQltZGVsYXkoNDApOw0KKwkvKiBMZXQgdGVuIHRp
Y2tzIHBhc3MuLi4gKi8NCisJbWRlbGF5KCgxMCAqIDEwMDApIC8gSFopOw0K
IA0KLQlpZiAoamlmZmllcy10MT4xKQ0KKwkvKg0KKwkgKiBFeHBlY3QgYSBm
ZXcgdGlja3MgYXQgbGVhc3QsIHRvIGJlIHN1cmUgc29tZSBwb3NzaWJsZQ0K
KwkgKiBnbHVlIGxvZ2ljIGRvZXMgbm90IGxvY2sgdXAgYWZ0ZXIgb25lIG9y
IHR3byBmaXJzdA0KKwkgKiB0aWNrcyBpbiBhIG5vbi1FeHRJTlQgbW9kZS4g
IEFsc28gdGhlIGxvY2FsIEFQSUMNCisJICogbWlnaHQgaGF2ZSBjYWNoZWQg
b25lIEV4dElOVCBpbnRlcnJ1cHQuICBGaW5hbGx5LCBhdA0KKwkgKiBsZWFz
dCBvbmUgdGljayBtYXkgYmUgbG9zdCBkdWUgdG8gZGVsYXlzLg0KKwkgKi8N
CisJaWYgKGppZmZpZXMgLSB0MSA+IDQpDQogCQlyZXR1cm4gMTsNCiANCiAJ
cmV0dXJuIDA7DQpAQCAtMTI1Nyw4ICsxMjUyLDE0IEBADQogDQogc3RhdGlj
IHZvaWQgZW5hYmxlX05NSV90aHJvdWdoX0xWVDAgKHZvaWQgKiBkdW1teSkN
CiB7DQotCWFwaWNfcmVhZGFyb3VuZChBUElDX0xWVDApOw0KLQlhcGljX3dy
aXRlKEFQSUNfTFZUMCwgMHgwMDAwMDQwMCk7CS8vIHVubWFzayBhbmQgc2V0
IHRvIE5NSQ0KKwl1bnNpZ25lZCBpbnQgdiwgdmVyOw0KKw0KKwl2ZXIgPSBh
cGljX3JlYWQoQVBJQ19MVlIpOw0KKwl2ZXIgPSBHRVRfQVBJQ19WRVJTSU9O
KHZlcik7DQorCXYgPSBBUElDX0RNX05NSTsJCQkvKiB1bm1hc2sgYW5kIHNl
dCB0byBOTUkgKi8NCisJaWYgKCFBUElDX0lOVEVHUkFURUQodmVyKSkJCS8q
IDgyNDg5RFggKi8NCisJCXYgfD0gQVBJQ19MVlRfTEVWRUxfVFJJR0dFUjsN
CisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19MVlQwLCB2KTsNCiB9DQogDQog
c3RhdGljIHZvaWQgc2V0dXBfbm1pICh2b2lkKQ0KQEAgLTEzMDMsMjQgKzEz
MDQsMjMgQEANCiANCiAJcHJpbnRrKEtFUk5fSU5GTyAiLi5USU1FUjogdmVj
dG9yPSVkIHBpbjE9JWQgcGluMj0lZFxuIiwgdmVjdG9yLCBwaW4xLCBwaW4y
KTsNCiANCi0JLyoNCi0JICogT2ssIGRvZXMgSVJRMCB0aHJvdWdoIHRoZSBJ
T0FQSUMgd29yaz8NCi0JICovDQotCWlmICh0aW1lcl9pcnFfd29ya3MoKSkg
ew0KLQkJaWYgKG5taV93YXRjaGRvZykgew0KLQkJCWRpc2FibGVfODI1OUFf
aXJxKDApOw0KLQkJCWluaXRfODI1OUEoMSk7DQotCQkJc2V0dXBfbm1pKCk7
DQotCQkJZW5hYmxlXzgyNTlBX2lycSgwKTsNCi0JCQlpZiAobm1pX2lycV93
b3JrcygpKQ0KLQkJCQlyZXR1cm47DQotCQl9IGVsc2UNCi0JCQlyZXR1cm47
DQotCX0NCi0NCiAJaWYgKHBpbjEgIT0gLTEpIHsNCi0JCXByaW50ayhLRVJO
X0VSUiAiLi5NUC1CSU9TIGJ1ZzogODI1NCB0aW1lciBub3QgY29ubmVjdGVk
IHRvIElPLUFQSUNcbiIpOw0KKwkJLyoNCisJCSAqIE9rLCBkb2VzIElSUTAg
dGhyb3VnaCB0aGUgSU9BUElDIHdvcms/DQorCQkgKi8NCisJCXVubWFza19J
T19BUElDX2lycSgwKTsNCisJCWlmICh0aW1lcl9pcnFfd29ya3MoKSkgew0K
KwkJCWlmIChubWlfd2F0Y2hkb2cpIHsNCisJCQkJZGlzYWJsZV84MjU5QV9p
cnEoMCk7DQorCQkJCWluaXRfODI1OUEoMSk7DQorCQkJCXNldHVwX25taSgp
Ow0KKwkJCQllbmFibGVfODI1OUFfaXJxKDApOw0KKwkJCQlubWlfaXJxX3dv
cmtzKCk7DQorCQkJfQ0KKwkJCXJldHVybjsNCisJCX0NCiAJCWNsZWFyX0lP
X0FQSUNfcGluKDAsIHBpbjEpOw0KKwkJcHJpbnRrKEtFUk5fRVJSICIuLk1Q
LUJJT1MgYnVnOiA4MjU0IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJ
Q1xuIik7DQogCX0NCiANCiAJcHJpbnRrKEtFUk5fSU5GTyAiLi4udHJ5aW5n
IHRvIHNldCB1cCB0aW1lciAoSVJRMCkgdGhyb3VnaCB0aGUgODI1OUEgLi4u
ICIpOw0KQEAgLTEzMzQsMTAgKzEzMzQsOSBAQA0KIAkJCXByaW50aygid29y
a3MuXG4iKTsNCiAJCQlpZiAobm1pX3dhdGNoZG9nKSB7DQogCQkJCXNldHVw
X25taSgpOw0KLQkJCQlpZiAobm1pX2lycV93b3JrcygpKQ0KLQkJCQkJcmV0
dXJuOw0KLQkJCX0gZWxzZQ0KLQkJCQlyZXR1cm47DQorCQkJCW5taV9pcnFf
d29ya3MoKTsNCisJCQl9DQorCQkJcmV0dXJuOw0KIAkJfQ0KIAkJLyoNCiAJ
CSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4NCkBAIC0xMzU1LDkgKzEz
NTQsOCBAQA0KIA0KIAlkaXNhYmxlXzgyNTlBX2lycSgwKTsNCiAJaXJxX2Rl
c2NbMF0uaGFuZGxlciA9ICZsYXBpY19pcnFfdHlwZTsNCi0JaW5pdF84MjU5
QSgxKTsJCQkJCS8vIEFFT0kgbW9kZQ0KLQlhcGljX3JlYWRhcm91bmQoQVBJ
Q19MVlQwKTsNCi0JYXBpY193cml0ZShBUElDX0xWVDAsIDB4MDAwMDAwMDAg
fCB2ZWN0b3IpOwkvLyBGaXhlZCBtb2RlDQorCWluaXRfODI1OUEoMSk7CQkJ
CQkJLyogQUVPSSBtb2RlICovDQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNf
TFZUMCwgQVBJQ19ETV9GSVhFRCB8IHZlY3Rvcik7CS8qIEZpeGVkIG1vZGUg
Ki8NCiAJZW5hYmxlXzgyNTlBX2lycSgwKTsNCiANCiAJaWYgKHRpbWVyX2ly
cV93b3JrcygpKSB7DQpAQCAtMTM5MiwyMCArMTM5MCwxMSBAQA0KIAlwcmlu
dGsoIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7DQogDQogCS8qDQotCSAq
IElmIHRoZXJlIGFyZSBubyBleHBsaWNpdCBNUCBJUlEgZW50cmllcywgaXQn
cyBlaXRoZXIgb25lIG9mIHRoZQ0KLQkgKiBkZWZhdWx0IGNvbmZpZ3VyYXRp
b24gdHlwZXMgb3Igd2UgYXJlIGJyb2tlbi4gSW4gYm90aCBjYXNlcyBpdCdz
DQotCSAqIGZpbmUgdG8gc2V0IHVwIG1vc3Qgb2YgdGhlIGxvdyAxNiBJTy1B
UElDIHBpbnMgdG8gSVNBIGRlZmF1bHRzLg0KLQkgKi8NCi0JaWYgKCFtcF9p
cnFfZW50cmllcykgew0KLQkJcHJpbnRrKCJubyBleHBsaWNpdCBJUlEgZW50
cmllcywgdXNpbmcgZGVmYXVsdCBtcHRhYmxlXG4iKTsNCi0JCWNvbnN0cnVj
dF9kZWZhdWx0X0lTQV9tcHRhYmxlKCk7DQotCX0NCi0NCi0JLyoNCiAJICog
U2V0IHVwIHRoZSBJTy1BUElDIElSUSByb3V0aW5nIHRhYmxlIGJ5IHBhcnNp
bmcgdGhlIE1QLUJJT1MNCiAJICogbXB0YWJsZToNCiAJICovDQogCXNldHVw
X2lvYXBpY19pZHNfZnJvbV9tcGMoKTsNCisJc3luY19BcmJfSURzKCk7DQog
CXNldHVwX0lPX0FQSUNfaXJxcygpOw0KIAlpbml0X0lPX0FQSUNfdHJhcHMo
KTsNCiAJY2hlY2tfdGltZXIoKTsNCkBAIC0xNDIxLDYgKzE0MTAsNyBAQA0K
IHsNCiAJaWYgKCFzbXBfZm91bmRfY29uZmlnKQ0KIAkJcmV0dXJuOw0KKwlj
b25uZWN0X2JzcF9BUElDKCk7DQogCXNldHVwX2xvY2FsX0FQSUMoKTsNCiAJ
c2V0dXBfSU9fQVBJQygpOw0KIAlzZXR1cF9BUElDX2Nsb2NrcygpOw0KLS0t
IGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvbXBwYXJzZS5jLm9yaWcJV2VkIEFw
ciAxMiAwMzo0MDo1MyAyMDAwDQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5l
bC9tcHBhcnNlLmMJV2VkIEFwciAxMiAwNDowNzowOSAyMDAwDQpAQCAtOSw3
ICs5LDcgQEANCiAgKgkJRXJpY2ggQm9sZXluCToJTVAgdjEuNCBhbmQgYWRk
aXRpb25hbCBjaGFuZ2VzLg0KICAqCQlBbGFuIENveAk6CUFkZGVkIEVCREEg
c2Nhbm5pbmcNCiAgKgkJSW5nbyBNb2xuYXIJOgl2YXJpb3VzIGNsZWFudXBz
IGFuZCByZXdyaXRlcw0KLSAqCU1hY2llaiBXLiBSb3p5Y2tpCToJQml0cyBm
b3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzDQorICoJTWFjaWVqIFcuIFJvenlj
a2kJOglCaXRzIGZvciBkZWZhdWx0IE1QIGNvbmZpZ3VyYXRpb25zDQogICov
DQogDQogI2luY2x1ZGUgPGxpbnV4L21tLmg+DQpAQCAtMzQsNyArMzQsNyBA
QA0KICAqIFZhcmlvdXMgTGludXgtaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVz
IGNyZWF0ZWQgZnJvbSB0aGUNCiAgKiBNUC10YWJsZS4NCiAgKi8NCi1pbnQg
YXBpY192ZXJzaW9uIFtOUl9DUFVTXTsNCitpbnQgYXBpY192ZXJzaW9uIFtN
QVhfQVBJQ1NdOw0KIGludCBtcF9idXNfaWRfdG9fdHlwZSBbTUFYX01QX0JV
U1NFU10gPSB7IC0xLCB9Ow0KIGludCBtcF9idXNfaWRfdG9fcGNpX2J1cyBb
TUFYX01QX0JVU1NFU10gPSB7IC0xLCB9Ow0KIGludCBtcF9jdXJyZW50X3Bj
aV9pZCA9IDA7DQpAQCAtNDIsOSArNDIsOSBAQA0KIHVuc2lnbmVkIGxvbmcg
bXBfbGFwaWNfYWRkciA9IDA7DQogDQogLyogUHJvY2Vzc29yIHRoYXQgaXMg
ZG9pbmcgdGhlIGJvb3QgdXAgKi8NCi11bnNpZ25lZCBpbnQgYm9vdF9jcHVf
aWQgPSAwOw0KK3Vuc2lnbmVkIGludCBib290X2NwdV9pZCA9IC0xVTsNCiAv
KiBJbnRlcm5hbCBwcm9jZXNzb3IgY291bnQgKi8NCi1zdGF0aWMgdW5zaWdu
ZWQgaW50IG51bV9wcm9jZXNzb3JzID0gMTsNCitzdGF0aWMgdW5zaWduZWQg
aW50IG51bV9wcm9jZXNzb3JzID0gMDsNCiANCiAvKiBCaXRtYXNrIG9mIHBo
eXNpY2FsbHkgZXhpc3RpbmcgQ1BVcyAqLw0KIHVuc2lnbmVkIGxvbmcgcGh5
c19jcHVfcHJlc2VudF9tYXAgPSAwOw0KQEAgLTEzMiwxMyArMTMyLDEyIEBA
DQogCWlmIChtLT5tcGNfY3B1ZmxhZyAmIENQVV9CT09UUFJPQ0VTU09SKSB7
DQogCQlEcHJpbnRrKCIgICAgQm9vdHVwIENQVVxuIik7DQogCQlib290X2Nw
dV9pZCA9IG0tPm1wY19hcGljaWQ7DQotCX0gZWxzZQ0KLQkJLyogQm9vdCBD
UFUgYWxyZWFkeSBjb3VudGVkICovDQotCQludW1fcHJvY2Vzc29ycysrOw0K
Kwl9DQorCW51bV9wcm9jZXNzb3JzKys7DQogDQotCWlmIChtLT5tcGNfYXBp
Y2lkID4gTlJfQ1BVUykgew0KLQkJcHJpbnRrKCJQcm9jZXNzb3IgIyVkIHVu
dXNlZC4gKE1heCAlZCBwcm9jZXNzb3JzKS5cbiIsDQotCQkJbS0+bXBjX2Fw
aWNpZCwgTlJfQ1BVUyk7DQorCWlmIChtLT5tcGNfYXBpY2lkID4gTUFYX0FQ
SUNTKSB7DQorCQlwcmludGsoIlByb2Nlc3NvciAjJWQgSU5WQUxJRC4gKE1h
eCBJRDogJWQpLlxuIiwNCisJCQltLT5tcGNfYXBpY2lkLCBNQVhfQVBJQ1Mp
Ow0KIAkJcmV0dXJuOw0KIAl9DQogCXZlciA9IG0tPm1wY19hcGljdmVyOw0K
QEAgLTE2NCwxOCArMTYzLDE4IEBADQogDQogCWlmIChzdHJuY21wKHN0ciwg
IklTQSIsIDMpID09IDApIHsNCiAJCW1wX2J1c19pZF90b190eXBlW20tPm1w
Y19idXNpZF0gPSBNUF9CVVNfSVNBOw0KLQl9IGVsc2Ugew0KLQlpZiAoc3Ry
bmNtcChzdHIsICJFSVNBIiwgNCkgPT0gMCkgew0KKwl9IGVsc2UgaWYgKHN0
cm5jbXAoc3RyLCAiRUlTQSIsIDQpID09IDApIHsNCiAJCW1wX2J1c19pZF90
b190eXBlW20tPm1wY19idXNpZF0gPSBNUF9CVVNfRUlTQTsNCi0JfSBlbHNl
IHsNCi0JaWYgKHN0cm5jbXAoc3RyLCAiUENJIiwgMykgPT0gMCkgew0KKwl9
IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiUENJIiwgMykgPT0gMCkgew0KIAkJ
bXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19QQ0k7
DQogCQltcF9idXNfaWRfdG9fcGNpX2J1c1ttLT5tcGNfYnVzaWRdID0gbXBf
Y3VycmVudF9wY2lfaWQ7DQogCQltcF9jdXJyZW50X3BjaV9pZCsrOw0KKwl9
IGVsc2UgaWYgKHN0cm5jbXAoc3RyLCAiTUNBIiwgMykgPT0gMCkgew0KKwkJ
bXBfYnVzX2lkX3RvX3R5cGVbbS0+bXBjX2J1c2lkXSA9IE1QX0JVU19NQ0E7
DQogCX0gZWxzZSB7DQogCQlwcmludGsoIlVua25vd24gYnVzdHlwZSAlc1xu
Iiwgc3RyKTsNCiAJCXBhbmljKCJjYW5ub3QgaGFuZGxlIGJ1cyAtIG1haWwg
dG8gbGludXgtc21wQHZnZXIucnV0Z2Vycy5lZHUiKTsNCi0JfSB9IH0NCisJ
fQ0KIH0NCiANCiBzdGF0aWMgdm9pZCBfX2luaXQgTVBfaW9hcGljX2luZm8g
KHN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYyAqbSkNCkBAIC0xOTcsMTIgKzE5
NiwyMiBAQA0KIHN0YXRpYyB2b2lkIF9faW5pdCBNUF9pbnRzcmNfaW5mbyAo
c3RydWN0IG1wY19jb25maWdfaW50c3JjICptKQ0KIHsNCiAJbXBfaXJxcyBb
bXBfaXJxX2VudHJpZXNdID0gKm07DQorCURwcmludGsoIkludDogdHlwZSAl
ZCwgcG9sICVkLCB0cmlnICVkLCBidXMgJWQsIg0KKwkJIiBJUlEgJTAyeCwg
QVBJQyBJRCAleCwgQVBJQyBJTlQgJTAyeFxuIiwNCisJCQltLT5tcGNfaXJx
dHlwZSwgbS0+bXBjX2lycWZsYWcgJiAzLA0KKwkJCShtLT5tcGNfaXJxZmxh
ZyA+PiAyKSAmIDMsIG0tPm1wY19zcmNidXMsDQorCQkJbS0+bXBjX3NyY2J1
c2lycSwgbS0+bXBjX2RzdGFwaWMsIG0tPm1wY19kc3RpcnEpOw0KIAlpZiAo
KyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpDQogCQlwYW5p
YygiTWF4ICMgb2YgaXJxIHNvdXJjZXMgZXhjZWVkZWQhIVxuIik7DQogfQ0K
IA0KIHN0YXRpYyB2b2lkIF9faW5pdCBNUF9saW50c3JjX2luZm8gKHN0cnVj
dCBtcGNfY29uZmlnX2xpbnRzcmMgKm0pDQogew0KKwlEcHJpbnRrKCJMaW50
OiB0eXBlICVkLCBwb2wgJWQsIHRyaWcgJWQsIGJ1cyAlZCwiDQorCQkiIElS
USAlMDJ4LCBBUElDIElEICV4LCBBUElDIExJTlQgJTAyeFxuIiwNCisJCQlt
LT5tcGNfaXJxdHlwZSwgbS0+bXBjX2lycWZsYWcgJiAzLA0KKwkJCShtLT5t
cGNfaXJxZmxhZyA+PiAyKSAmMywgbS0+bXBjX3NyY2J1c2lkLA0KKwkJCW0t
Pm1wY19zcmNidXNpcnEsIG0tPm1wY19kZXN0YXBpYywgbS0+bXBjX2Rlc3Rh
cGljbGludCk7DQogCS8qDQogCSAqIFdlbGwgaXQgc2VlbXMgYWxsIFNNUCBi
b2FyZHMgaW4gZXhpc3RlbmNlDQogCSAqIHVzZSBFeHRJTlQvTFZUMSA9PSBM
SU5UMCBhbmQNCkBAIC0zMTYsNiArMzI1LDEyMiBAQA0KIAlyZXR1cm4gbnVt
X3Byb2Nlc3NvcnM7DQogfQ0KIA0KK3N0YXRpYyB2b2lkIF9faW5pdCBjb25z
dHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKGludCBtcGNfZGVmYXVsdF90
eXBlKQ0KK3sNCisJc3RydWN0IG1wY19jb25maWdfaW50c3JjIGludHNyYzsN
CisJaW50IGk7DQorDQorCWludHNyYy5tcGNfdHlwZSA9IE1QX0lOVFNSQzsN
CisJaW50c3JjLm1wY19pcnFmbGFnID0gMDsJCQkvKiBjb25mb3JtaW5nICov
DQorCWludHNyYy5tcGNfc3JjYnVzID0gMDsNCisJaW50c3JjLm1wY19kc3Rh
cGljID0gbXBfaW9hcGljc1swXS5tcGNfYXBpY2lkOw0KKw0KKwlpbnRzcmMu
bXBjX2lycXR5cGUgPSBtcF9JTlQ7DQorCWZvciAoaSA9IDA7IGkgPCAxNjsg
aSsrKSB7DQorCQlzd2l0Y2ggKG1wY19kZWZhdWx0X3R5cGUpIHsNCisJCWNh
c2UgMjoNCisJCQlpZiAoaSA9PSAwIHx8IGkgPT0gMTMpDQorCQkJCWNvbnRp
bnVlOwkvKiBJUlEwICYgSVJRMTMgbm90IGNvbm5lY3RlZCAqLw0KKwkJCS8q
IGZhbGwgdGhyb3VnaCAqLw0KKwkJZGVmYXVsdDoNCisJCQlpZiAoaSA9PSAy
KQ0KKwkJCQljb250aW51ZTsJLyogSVJRMiBpcyBuZXZlciBjb25uZWN0ZWQg
Ki8NCisJCX0NCisNCisJCWludHNyYy5tcGNfc3JjYnVzaXJxID0gaTsNCisJ
CWludHNyYy5tcGNfZHN0aXJxID0gaSA/IGkgOiAyOwkJLyogSVJRMCB0byBJ
TlRJTjIgKi8NCisJCU1QX2ludHNyY19pbmZvKCZpbnRzcmMpOw0KKwl9DQor
DQorCWludHNyYy5tcGNfaXJxdHlwZSA9IG1wX0V4dElOVDsNCisJaW50c3Jj
Lm1wY19zcmNidXNpcnEgPSAwOw0KKwlpbnRzcmMubXBjX2RzdGlycSA9IDA7
CQkJCS8qIDgyNTlBIHRvIElOVElOMCAqLw0KKwlNUF9pbnRzcmNfaW5mbygm
aW50c3JjKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBj
b25zdHJ1Y3RfZGVmYXVsdF9JU0FfbXB0YWJsZShpbnQgbXBjX2RlZmF1bHRf
dHlwZSkNCit7DQorCXN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciBwcm9j
ZXNzb3I7DQorCXN0cnVjdCBtcGNfY29uZmlnX2J1cyBidXM7DQorCXN0cnVj
dCBtcGNfY29uZmlnX2lvYXBpYyBpb2FwaWM7DQorCXN0cnVjdCBtcGNfY29u
ZmlnX2xpbnRzcmMgbGludHNyYzsNCisJaW50IGxpbnR0eXBlc1syXSA9IHsg
bXBfRXh0SU5ULCBtcF9OTUkgfTsNCisJaW50IGk7DQorDQorCS8qDQorCSAq
IGxvY2FsIEFQSUMgaGFzIGRlZmF1bHQgYWRkcmVzcw0KKwkgKi8NCisJbXBf
bGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7DQorDQorCS8q
DQorCSAqIDIgQ1BVcywgbnVtYmVyZWQgMCAmIDEuDQorCSAqLw0KKwlwcm9j
ZXNzb3IubXBjX3R5cGUgPSBNUF9QUk9DRVNTT1I7DQorCS8qIEVpdGhlciBh
biBpbnRlZ3JhdGVkIEFQSUMgb3IgYSBkaXNjcmV0ZSA4MjQ4OURYLiAqLw0K
Kwlwcm9jZXNzb3IubXBjX2FwaWN2ZXIgPSBtcGNfZGVmYXVsdF90eXBlID4g
NCA/IDB4MTAgOiAweDAxOw0KKwlwcm9jZXNzb3IubXBjX2NwdWZsYWcgPSBD
UFVfRU5BQkxFRDsNCisJcHJvY2Vzc29yLm1wY19jcHVmZWF0dXJlID0gKGJv
b3RfY3B1X2RhdGEueDg2IDw8IDgpIHwNCisJCQkJICAgKGJvb3RfY3B1X2Rh
dGEueDg2X21vZGVsIDw8IDQpIHwNCisJCQkJICAgYm9vdF9jcHVfZGF0YS54
ODZfbWFzazsNCisJcHJvY2Vzc29yLm1wY19mZWF0dXJlZmxhZyA9IGJvb3Rf
Y3B1X2RhdGEueDg2X2NhcGFiaWxpdHk7DQorCXByb2Nlc3Nvci5tcGNfcmVz
ZXJ2ZWRbMF0gPSAwOw0KKwlwcm9jZXNzb3IubXBjX3Jlc2VydmVkWzFdID0g
MDsNCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KKwkJcHJvY2Vzc29y
Lm1wY19hcGljaWQgPSBpOw0KKwkJTVBfcHJvY2Vzc29yX2luZm8oJnByb2Nl
c3Nvcik7DQorCX0NCisNCisJYnVzLm1wY190eXBlID0gTVBfQlVTOw0KKwli
dXMubXBjX2J1c2lkID0gMDsNCisJc3dpdGNoIChtcGNfZGVmYXVsdF90eXBl
KSB7DQorCQlkZWZhdWx0Og0KKwkJCXByaW50aygiPz8/XG5Vbmtub3duIHN0
YW5kYXJkIGNvbmZpZ3VyYXRpb24gJWRcbiIsDQorCQkJCW1wY19kZWZhdWx0
X3R5cGUpOw0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KKwkJY2FzZSAxOg0K
KwkJY2FzZSA1Og0KKwkJCW1lbWNweShidXMubXBjX2J1c3R5cGUsICJJU0Eg
ICAiLCA2KTsNCisJCQlicmVhazsNCisJCWNhc2UgMjoNCisJCWNhc2UgNjoN
CisJCWNhc2UgMzoNCisJCQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiRUlT
QSAgIiwgNik7DQorCQkJYnJlYWs7DQorCQljYXNlIDQ6DQorCQljYXNlIDc6
DQorCQkJbWVtY3B5KGJ1cy5tcGNfYnVzdHlwZSwgIk1DQSAgICIsIDYpOw0K
Kwl9DQorCU1QX2J1c19pbmZvKCZidXMpOw0KKwlpZiAobXBjX2RlZmF1bHRf
dHlwZSA+IDQpIHsNCisJCWJ1cy5tcGNfYnVzaWQgPSAxOw0KKwkJbWVtY3B5
KGJ1cy5tcGNfYnVzdHlwZSwgIlBDSSAgICIsIDYpOw0KKwkJTVBfYnVzX2lu
Zm8oJmJ1cyk7DQorCX0NCisNCisJaW9hcGljLm1wY190eXBlID0gTVBfSU9B
UElDOw0KKwlpb2FwaWMubXBjX2FwaWNpZCA9IDI7DQorCWlvYXBpYy5tcGNf
YXBpY3ZlciA9IG1wY19kZWZhdWx0X3R5cGUgPiA0ID8gMHgxMCA6IDB4MDE7
DQorCWlvYXBpYy5tcGNfZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7DQorCWlv
YXBpYy5tcGNfYXBpY2FkZHIgPSAweEZFQzAwMDAwOw0KKwlNUF9pb2FwaWNf
aW5mbygmaW9hcGljKTsNCisNCisJLyoNCisJICogV2Ugc2V0IHVwIG1vc3Qg
b2YgdGhlIGxvdyAxNiBJTy1BUElDIHBpbnMgYWNjb3JkaW5nIHRvIE1QUyBy
dWxlcy4NCisJICovDQorCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFi
bGUobXBjX2RlZmF1bHRfdHlwZSk7DQorDQorCWxpbnRzcmMubXBjX3R5cGUg
PSBNUF9MSU5UU1JDOw0KKwlsaW50c3JjLm1wY19pcnFmbGFnID0gMDsJCS8q
IGNvbmZvcm1pbmcgKi8NCisJbGludHNyYy5tcGNfc3JjYnVzaWQgPSAwOw0K
KwlsaW50c3JjLm1wY19zcmNidXNpcnEgPSAwOw0KKwlsaW50c3JjLm1wY19k
ZXN0YXBpYyA9IE1QX0FQSUNfQUxMOw0KKwlmb3IgKGkgPSAwOyBpIDwgMjsg
aSsrKSB7DQorCQlsaW50c3JjLm1wY19pcnF0eXBlID0gbGludHR5cGVzW2ld
Ow0KKwkJbGludHNyYy5tcGNfZGVzdGFwaWNsaW50ID0gaTsNCisJCU1QX2xp
bnRzcmNfaW5mbygmbGludHNyYyk7DQorCX0NCit9DQorDQogc3RhdGljIHN0
cnVjdCBpbnRlbF9tcF9mbG9hdGluZyAqbXBmX2ZvdW5kOw0KIA0KIC8qDQpA
QCAtMzMyLDgzICs0NTcsNDMgQEANCiAJCXByaW50aygiICAgIFZpcnR1YWwg
V2lyZSBjb21wYXRpYmlsaXR5IG1vZGUuXG4iKTsNCiAJCXBpY19tb2RlID0g
MDsNCiAJfQ0KLQkvKg0KLQkgKiBkZWZhdWx0IENQVSBpZCAtIGlmIGl0J3Mg
ZGlmZmVyZW50IGluIHRoZSBtcHRhYmxlDQotCSAqIHRoZW4gd2UgY2hhbmdl
IGl0IGJlZm9yZSBmaXJzdCB1c2luZyBpdC4NCi0JICovDQotCWJvb3RfY3B1
X2lkID0gMDsNCisNCiAJLyoNCiAJICogTm93IHNlZSBpZiB3ZSBuZWVkIHRv
IHJlYWQgZnVydGhlci4NCiAJICovDQogCWlmIChtcGYtPm1wZl9mZWF0dXJl
MSAhPSAwKSB7DQorDQogCQlwcmludGsoIkRlZmF1bHQgTVAgY29uZmlndXJh
dGlvbiAjJWRcbiIsIG1wZi0+bXBmX2ZlYXR1cmUxKTsNCisJCWNvbnN0cnVj
dF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+bXBmX2ZlYXR1cmUxKTsNCiAN
Ci0JCS8qDQotCQkgKiBsb2NhbCBBUElDIGhhcyBkZWZhdWx0IGFkZHJlc3MN
Ci0JCSAqLw0KLQkJbXBfbGFwaWNfYWRkciA9IEFQSUNfREVGQVVMVF9QSFlT
X0JBU0U7DQorCX0gZWxzZSBpZiAobXBmLT5tcGZfcGh5c3B0cikgew0KIA0K
IAkJLyoNCi0JCSAqIDIgQ1BVcywgbnVtYmVyZWQgMCAmIDEuDQorCQkgKiBS
ZWFkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0YWJsZS4gIEFueXRoaW5nIGhl
cmUgd2lsbA0KKwkJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLg0KIAkJICov
DQotCQlwaHlzX2NwdV9wcmVzZW50X21hcCA9IDM7DQotCQludW1fcHJvY2Vz
c29ycyA9IDI7DQorCQlzbXBfcmVhZF9tcGMoKHZvaWQgKiltcGYtPm1wZl9w
aHlzcHRyKTsNCiANCi0JCW5yX2lvYXBpY3MgPSAxOw0KLQkJbXBfaW9hcGlj
c1swXS5tcGNfYXBpY2FkZHIgPSAweEZFQzAwMDAwOw0KLQkJbXBfaW9hcGlj
c1swXS5tcGNfYXBpY2lkID0gMjsNCiAJCS8qDQotCQkgKiBTYXZlIHRoZSBk
ZWZhdWx0IHR5cGUgbnVtYmVyLCB3ZQ0KLQkJICogbmVlZCBpdCBsYXRlciB0
byBzZXQgdGhlIElPLUFQSUMNCi0JCSAqIHVwIHByb3Blcmx5Og0KKwkJICog
SWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVu
IHdlIGFyZQ0KKwkJICogYnJva2VuLiAgV2Ugc2V0IHVwIG1vc3Qgb2YgdGhl
IGxvdyAxNiBJTy1BUElDIHBpbnMgdG8NCisJCSAqIElTQSBkZWZhdWx0cyBh
bmQgaG9wZSBpdCB3aWxsIHdvcmsuDQogCQkgKi8NCi0JCW1wY19kZWZhdWx0
X3R5cGUgPSBtcGYtPm1wZl9mZWF0dXJlMTsNCisJCWlmICghbXBfaXJxX2Vu
dHJpZXMpIHsNCisJCQlzdHJ1Y3QgbXBjX2NvbmZpZ19idXMgYnVzOw0KIA0K
LQkJcHJpbnRrKCJCdXMgIzAgaXMgIik7DQotCX0NCisJCQlwcmludGsoIkJJ
T1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgdXNpbmcgZGVmYXVs
dCBtcHRhYmxlLiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOw0KIA0KLQlz
d2l0Y2ggKG1wZi0+bXBmX2ZlYXR1cmUxKSB7DQotCQljYXNlIDE6DQotCQlj
YXNlIDU6DQotCQkJcHJpbnRrKCJJU0FcbiIpOw0KLQkJCWJyZWFrOw0KLQkJ
Y2FzZSAyOg0KLQkJCXByaW50aygiRUlTQSB3aXRoIG5vIElSUTAgYW5kIG5v
IElSUTEzIERNQSBjaGFpbmluZ1xuIik7DQotCQkJYnJlYWs7DQotCQljYXNl
IDY6DQotCQljYXNlIDM6DQotCQkJcHJpbnRrKCJFSVNBXG4iKTsNCi0JCQli
cmVhazsNCi0JCWNhc2UgNDoNCi0JCWNhc2UgNzoNCi0JCQlwcmludGsoIk1D
QVxuIik7DQotCQkJYnJlYWs7DQotCQljYXNlIDA6DQotCQkJaWYgKCFtcGYt
Pm1wZl9waHlzcHRyKQ0KLQkJCQlCVUcoKTsNCi0JCQlicmVhazsNCi0JCWRl
ZmF1bHQ6DQotCQkJcHJpbnRrKCI/Pz9cblVua25vd24gc3RhbmRhcmQgY29u
ZmlndXJhdGlvbiAlZFxuIiwNCi0JCQkJbXBmLT5tcGZfZmVhdHVyZTEpOw0K
LQkJCXJldHVybjsNCi0JfQ0KLQlpZiAobXBmLT5tcGZfZmVhdHVyZTEgPiA0
KSB7DQotCQlwcmludGsoIkJ1cyAjMSBpcyBQQ0lcbiIpOw0KKwkJCWJ1cy5t
cGNfdHlwZSA9IE1QX0JVUzsNCisJCQlidXMubXBjX2J1c2lkID0gMDsNCisJ
CQltZW1jcHkoYnVzLm1wY19idXN0eXBlLCAiSVNBICAgIiwgNik7DQorCQkJ
TVBfYnVzX2luZm8oJmJ1cyk7DQogDQotCQkvKg0KLQkJICogU2V0IGxvY2Fs
IEFQSUMgdmVyc2lvbiB0byB0aGUgaW50ZWdyYXRlZCBmb3JtLg0KLQkJICog
SXQncyBpbml0aWFsaXplZCB0byB6ZXJvIG90aGVyd2lzZSwgcmVwcmVzZW50
aW5nDQotCQkgKiBhIGRpc2NyZXRlIDgyNDg5RFguDQotCQkgKi8NCi0JCWFw
aWNfdmVyc2lvblswXSA9IDB4MTA7DQotCQlhcGljX3ZlcnNpb25bMV0gPSAw
eDEwOw0KLQl9DQotCS8qDQotCSAqIFJlYWQgdGhlIHBoeXNpY2FsIGhhcmR3
YXJlIHRhYmxlLiBBbnl0aGluZyBoZXJlIHdpbGwgb3ZlcnJpZGUgdGhlDQot
CSAqIGRlZmF1bHRzLg0KLQkgKi8NCi0JaWYgKG1wZi0+bXBmX3BoeXNwdHIp
DQotCQlzbXBfcmVhZF9tcGMoKHZvaWQgKiltcGYtPm1wZl9waHlzcHRyKTsN
CisJCQljb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKDApOw0KKwkJ
fQ0KKw0KKwl9IGVsc2UNCisJCUJVRygpOw0KIA0KIAlwcmludGsoIlByb2Nl
c3NvcnM6ICVkXG4iLCBudW1fcHJvY2Vzc29ycyk7DQogCS8qDQotLS0gbGlu
dXgvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jLm9yaWcJV2VkIEFwciAxMiAw
Mzo0MTowMyAyMDAwDQorKysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zZXR1
cC5jCVdlZCBBcHIgMTIgMDM6NDE6MTEgMjAwMA0KQEAgLTQ5NSw2ICs0OTUs
MTAgQEANCiAJCQlpZiAoIW1lbWNtcChmcm9tKzQsICJub3BlbnRpdW0iLCA5
KSkgew0KIAkJCQlmcm9tICs9IDkrNDsNCiAJCQkJYm9vdF9jcHVfZGF0YS54
ODZfY2FwYWJpbGl0eSAmPSB+WDg2X0ZFQVRVUkVfUFNFOw0KKwkJCX0gZWxz
ZSBpZiAoIW1lbWNtcChmcm9tKzQsICJleGFjdG1hcCIsIDgpKSB7DQorCQkJ
CWZyb20gKz0gOCs0Ow0KKwkJCQllODIwLm5yX21hcCA9IDA7DQorCQkJCXVz
ZXJtZW0gPSAxOw0KIAkJCX0gZWxzZSB7DQogCQkJCS8qIElmIHRoZSB1c2Vy
IHNwZWNpZmllcyBtZW1vcnkgc2l6ZSwgd2UNCiAJCQkJICogYmxvdyBhd2F5
IGFueSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZA0KLS0tIGxpbnV4L2FyY2gv
aTM4Ni9rZXJuZWwvc21wLmMub3JpZwlGcmkgRmViIDExIDE3OjE5OjQ1IDIw
MDANCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVsL3NtcC5jCVdlZCBBcHIg
MTIgMDM6NDE6MTEgMjAwMA0KQEAgLTExMSwxMDggKzExMSwyNiBAQA0KICAq
IFdlIHVzZSAnYnJvYWRjYXN0JywgQ1BVLT5DUFUgSVBJcyBhbmQgc2VsZi1J
UElzIHRvby4NCiAgKi8NCiANCi1zdGF0aWMgdW5zaWduZWQgaW50IGNhY2hl
ZF9BUElDX0lDUjsNCi1zdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZF9BUElD
X0lDUjI7DQotDQotLyoNCi0gKiBDYWNoZXMgcmVzZXJ2ZWQgYml0cywgQVBJ
QyByZWFkcyBhcmUgKG1pbGRseSkgZXhwZW5zaXZlDQotICogYW5kIGZvcmNl
IG90aGVyd2lzZSB1bm5lY2Vzc2FyeSBDUFUgc3luY2hyb25pemF0aW9uLg0K
LSAqDQotICogKFdlIGNvdWxkIGNhY2hlIG90aGVyIEFQSUMgcmVnaXN0ZXJz
IHRvbywgYnV0IHRoZXNlIGFyZSB0aGUNCi0gKiBtYWluIG9uZXMgdXNlZCBp
biBSTC4pDQotICovDQotI2RlZmluZSBzbG93X0lDUiAoYXBpY19yZWFkKEFQ
SUNfSUNSKSAmIH4weEZERkZGKQ0KLSNkZWZpbmUgc2xvd19JQ1IyIChhcGlj
X3JlYWQoQVBJQ19JQ1IyKSAmIDB4MDBGRkZGRkYpDQotDQotdm9pZCBjYWNo
ZV9BUElDX3JlZ2lzdGVycyAodm9pZCkNCi17DQotCWNhY2hlZF9BUElDX0lD
UiA9IHNsb3dfSUNSOw0KLQljYWNoZWRfQVBJQ19JQ1IyID0gc2xvd19JQ1Iy
Ow0KLQltYigpOw0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu
dCBfX2dldF9JQ1IgKHZvaWQpDQotew0KLSNpZiBGT1JDRV9SRUFEX0FST1VO
RF9XUklURQ0KLQkvKg0KLQkgKiBXYWl0IGZvciB0aGUgQVBJQyB0byBiZWNv
bWUgcmVhZHkgLSB0aGlzIHNob3VsZCBuZXZlciBvY2N1ci4gSXQncw0KLQkg
KiBhIGRlYnVnZ2luZyBjaGVjayByZWFsbHkuDQotCSAqLw0KLQlpbnQgY291
bnQgPSAwOw0KLQl1bnNpZ25lZCBpbnQgY2ZnOw0KLQ0KLQl3aGlsZSAoY291
bnQgPCAxMDAwKQ0KLQl7DQotCQljZmcgPSBzbG93X0lDUjsNCi0JCWlmICgh
KGNmZyYoMTw8MTIpKSkNCi0JCQlyZXR1cm4gY2ZnOw0KLQkJcHJpbnRrKCJD
UFUgIyVkOiBJQ1Igc3RpbGwgYnVzeSBbJTA4eF1cbiIsDQotCQkJCQlzbXBf
cHJvY2Vzc29yX2lkKCksIGNmZyk7DQotCQlpcnFfZXJyX2NvdW50Kys7DQot
CQljb3VudCsrOw0KLQkJdWRlbGF5KDEwKTsNCi0JfQ0KLQlwcmludGsoIkNQ
VSAjJWQ6IHByZXZpb3VzIElQSSBzdGlsbCBub3QgY2xlYXJlZCBhZnRlciAx
MG1TXG4iLA0KLQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7DQotCXJldHVybiBj
Zmc7DQotI2Vsc2UNCi0JcmV0dXJuIGNhY2hlZF9BUElDX0lDUjsNCi0jZW5k
aWYNCi19DQotDQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19nZXRf
SUNSMiAodm9pZCkNCi17DQotI2lmIEZPUkNFX1JFQURfQVJPVU5EX1dSSVRF
DQotCXJldHVybiBzbG93X0lDUjI7DQotI2Vsc2UNCi0JcmV0dXJuIGNhY2hl
ZF9BUElDX0lDUjI7DQotI2VuZGlmDQotfQ0KLQ0KLSNkZWZpbmUgTE9HSUNB
TF9ERUxJVkVSWSAxDQotDQogc3RhdGljIGlubGluZSBpbnQgX19wcmVwYXJl
X0lDUiAodW5zaWduZWQgaW50IHNob3J0Y3V0LCBpbnQgdmVjdG9yKQ0KIHsN
Ci0JdW5zaWduZWQgaW50IGNmZzsNCi0NCi0JY2ZnID0gX19nZXRfSUNSKCk7
DQotCWNmZyB8PSBBUElDX0RFU1RfRE1fRklYRUR8c2hvcnRjdXR8dmVjdG9y
DQotI2lmIExPR0lDQUxfREVMSVZFUlkNCi0JCXxBUElDX0RFU1RfTE9HSUNB
TA0KLSNlbmRpZg0KLQkJOw0KLQ0KLQlyZXR1cm4gY2ZnOw0KKwlyZXR1cm4g
QVBJQ19ETV9GSVhFRCB8IHNob3J0Y3V0IHwgdmVjdG9yIHwgQVBJQ19ERVNU
X0xPR0lDQUw7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgaW50IF9fcHJlcGFy
ZV9JQ1IyICh1bnNpZ25lZCBpbnQgbWFzaykNCiB7DQotCXVuc2lnbmVkIGlu
dCBjZmc7DQotDQotCWNmZyA9IF9fZ2V0X0lDUjIoKTsNCi0jaWYgTE9HSUNB
TF9ERUxJVkVSWQ0KLQljZmcgfD0gU0VUX0FQSUNfREVTVF9GSUVMRChtYXNr
KTsNCi0jZWxzZQ0KLQljZmcgfD0gU0VUX0FQSUNfREVTVF9GSUVMRChtYXNr
KTsNCi0jZW5kaWYNCi0NCi0JcmV0dXJuIGNmZzsNCisJcmV0dXJuIFNFVF9B
UElDX0RFU1RfRklFTEQobWFzayk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUg
dm9pZCBfX3NlbmRfSVBJX3Nob3J0Y3V0KHVuc2lnbmVkIGludCBzaG9ydGN1
dCwgaW50IHZlY3RvcikNCiB7DQorCS8qDQorCSAqIFN1YnRsZS4gSW4gdGhl
IGNhc2Ugb2YgdGhlICduZXZlciBkbyBkb3VibGUgd3JpdGVzJyB3b3JrYXJv
dW5kDQorCSAqIHdlIGhhdmUgdG8gbG9jayBvdXQgaW50ZXJydXB0cyB0byBi
ZSBzYWZlLiAgQXMgd2UgZG9uJ3QgY2FyZQ0KKwkgKiBvZiB0aGUgdmFsdWUg
cmVhZCB3ZSB1c2UgYW4gYXRvbWljIHJtdyBhY2Nlc3MgdG8gYXZvaWQgY29z
dGx5DQorCSAqIGNsaS9zdGkuICBPdGhlcndpc2Ugd2UgdXNlIGFuIGV2ZW4g
Y2hlYXBlciBzaW5nbGUgYXRvbWljIHdyaXRlDQorCSAqIHRvIHRoZSBBUElD
Lg0KKwkgKi8NCiAJdW5zaWduZWQgaW50IGNmZzsNCi0vKg0KLSAqIFN1YnRs
ZS4gSW4gdGhlIGNhc2Ugb2YgdGhlICduZXZlciBkbyBkb3VibGUgd3JpdGVz
JyB3b3JrYXJvdW5kIHdlDQotICogaGF2ZSB0byBsb2NrIG91dCBpbnRlcnJ1
cHRzIHRvIGJlIHNhZmUuIE90aGVyd2lzZSBpdCdzIGp1c3Qgb25lDQotICog
c2luZ2xlIGF0b21pYyB3cml0ZSB0byB0aGUgQVBJQywgbm8gbmVlZCBmb3Ig
Y2xpL3N0aS4NCi0gKi8NCi0jaWYgRk9SQ0VfUkVBRF9BUk9VTkRfV1JJVEUN
Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0JX19zYXZlX2ZsYWdzKGZs
YWdzKTsNCi0JX19jbGkoKTsNCi0jZW5kaWYNCiANCiAJLyoNCiAJICogTm8g
bmVlZCB0byB0b3VjaCB0aGUgdGFyZ2V0IGNoaXAgZmllbGQNCkBAIC0yMjIs
MTAgKzE0MCw3IEBADQogCS8qDQogCSAqIFNlbmQgdGhlIElQSS4gVGhlIHdy
aXRlIHRvIEFQSUNfSUNSIGZpcmVzIHRoaXMgb2ZmLg0KIAkgKi8NCi0JYXBp
Y193cml0ZShBUElDX0lDUiwgY2ZnKTsNCi0jaWYgRk9SQ0VfUkVBRF9BUk9V
TkRfV1JJVEUNCi0JX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCi0jZW5kaWYN
CisJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIGNmZyk7DQogfQ0KIA0K
IHN0YXRpYyBpbmxpbmUgdm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB2
ZWN0b3IpDQpAQCAtMjUyLDE5ICsxNjcsMTYgQEANCiBzdGF0aWMgaW5saW5l
IHZvaWQgc2VuZF9JUElfbWFzayhpbnQgbWFzaywgaW50IHZlY3RvcikNCiB7
DQogCXVuc2lnbmVkIGxvbmcgY2ZnOw0KLSNpZiBGT1JDRV9SRUFEX0FST1VO
RF9XUklURQ0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KIAlfX3NhdmVf
ZmxhZ3MoZmxhZ3MpOw0KIAlfX2NsaSgpOw0KLSNlbmRpZg0KIA0KIAkvKg0K
IAkgKiBwcmVwYXJlIHRhcmdldCBjaGlwIGZpZWxkDQogCSAqLw0KLQ0KIAlj
ZmcgPSBfX3ByZXBhcmVfSUNSMihtYXNrKTsNCi0JYXBpY193cml0ZShBUElD
X0lDUjIsIGNmZyk7DQorCWFwaWNfd3JpdGVfYXJvdW5kKEFQSUNfSUNSMiwg
Y2ZnKTsNCiANCiAJLyoNCiAJICogcHJvZ3JhbSB0aGUgSUNSIA0KQEAgLTI3
NCwxMCArMTg2LDggQEANCiAJLyoNCiAJICogU2VuZCB0aGUgSVBJLiBUaGUg
d3JpdGUgdG8gQVBJQ19JQ1IgZmlyZXMgdGhpcyBvZmYuDQogCSAqLw0KLQlh
cGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOw0KLSNpZiBGT1JDRV9SRUFEX0FS
T1VORF9XUklURQ0KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwgY2Zn
KTsNCiAJX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCi0jZW5kaWYNCiB9DQog
DQogLyoNCi0tLSBsaW51eC9hcmNoL2kzODYva2VybmVsL3NtcGJvb3QuYy5v
cmlnCVR1ZSBGZWIgIDEgMDE6MzM6MjIgMjAwMA0KKysrIGxpbnV4L2FyY2gv
aTM4Ni9rZXJuZWwvc21wYm9vdC5jCVdlZCBBcHIgMTIgMDM6NDE6MTEgMjAw
MA0KQEAgLTI4LDYgKzI4LDcgQEANCiAgKgkJCQkJZnJvbSBKb3NlIFJlbmF1
DQogICoJCUluZ28gTW9sbmFyCToJdmFyaW91cyBjbGVhbnVwcyBhbmQgcmV3
cml0ZXMNCiAgKgkJVGlncmFuIEFpdmF6aWFuCToJZml4ZWQgIjAuMDAgaW4g
L3Byb2MvdXB0aW1lIG9uIFNNUCIgYnVnLg0KKyAqCU1hY2llaiBXLiBSb3p5
Y2tpCToJQml0cyBmb3IgZ2VudWluZSA4MjQ4OURYIEFQSUNzDQogICovDQog
DQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KQEAgLTQ4OSwxMSArNDkw
LDQzIEBADQogCXJldHVybiBkb19mb3JrKENMT05FX1ZNfENMT05FX1BJRCwg
MCwgJnJlZ3MpOw0KIH0NCiANCisjaWYgQVBJQ19ERUJVRw0KK3N0YXRpYyBp
bmxpbmUgdm9pZCBpbnF1aXJlX3JlbW90ZV9hcGljKGludCBhcGljaWQpDQor
ew0KKwlpbnQgaSwgcmVnc1tdID0geyBBUElDX0lEID4+IDQsIEFQSUNfTFZS
ID4+IDQsIEFQSUNfU1BJViA+PiA0IH07DQorCWNoYXIgKm5hbWVzW10gPSB7
ICJJRCIsICJWRVJTSU9OIiwgIlNQSVYiIH07DQorCWludCB0aW1lb3V0LCBz
dGF0dXM7DQorDQorCXByaW50aygiSW5xdWlyaW5nIHJlbW90ZSBBUElDICMl
ZC4uLlxuIiwgYXBpY2lkKTsNCisNCisJZm9yIChpID0gMDsgaSA8IHNpemVv
ZihyZWdzKSAvIHNpemVvZigqcmVncyk7IGkrKykgew0KKwkJcHJpbnRrKCIu
Li4gQVBJQyAjJWQgJXM6ICIsIGFwaWNpZCwgbmFtZXNbaV0pOw0KKw0KKwkJ
YXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJ
RUxEKGFwaWNpZCkpOw0KKwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1Is
IEFQSUNfRE1fUkVNUkQgfCByZWdzW2ldKTsNCisNCisJCXRpbWVvdXQgPSAw
Ow0KKwkJZG8gew0KKwkJCXVkZWxheSgxMDApOw0KKwkJCXN0YXR1cyA9IGFw
aWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9SUl9NQVNLOw0KKwkJfSB3
aGlsZSAoc3RhdHVzID09IEFQSUNfSUNSX1JSX0lOUFJPRyAmJiB0aW1lb3V0
KysgPCAxMDAwKTsNCisNCisJCXN3aXRjaCAoc3RhdHVzKSB7DQorCQljYXNl
IEFQSUNfSUNSX1JSX1ZBTElEOg0KKwkJCXN0YXR1cyA9IGFwaWNfcmVhZChB
UElDX1JSUik7DQorCQkJcHJpbnRrKCIlMDh4XG4iLCBzdGF0dXMpOw0KKwkJ
CWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlwcmludGsoImZhaWxlZFxuIik7
DQorCQl9DQorCX0NCit9DQorI2VuZGlmDQorDQogc3RhdGljIHZvaWQgX19p
bml0IGRvX2Jvb3RfY3B1IChpbnQgYXBpY2lkKQ0KIHsNCi0JdW5zaWduZWQg
bG9uZyBjZmc7DQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZTsNCi0JdW5z
aWduZWQgbG9uZyBzZW5kX3N0YXR1cywgYWNjZXB0X3N0YXR1czsNCisJdW5z
aWduZWQgbG9uZyBzZW5kX3N0YXR1cywgYWNjZXB0X3N0YXR1cywgYm9vdF9z
dGF0dXMsIG1heGx2dDsNCiAJaW50IHRpbWVvdXQsIG51bV9zdGFydHMsIGos
IGNwdTsNCiAJdW5zaWduZWQgbG9uZyBzdGFydF9laXA7DQogDQpAQCAtNTI3
LDcgKzU2MCw3IEBADQogCXN0YXJ0X2VpcCA9IHNldHVwX3RyYW1wb2xpbmUo
KTsNCiANCiAJLyogU28gd2Ugc2VlIHdoYXQncyB1cCAgICovDQotCXByaW50
aygiQm9vdGluZyBwcm9jZXNzb3IgJWQgZWlwICVseFxuIiwgY3B1LCBzdGFy
dF9laXApOw0KKwlwcmludGsoIkJvb3RpbmcgcHJvY2Vzc29yICVkLyVkIGVp
cCAlbHhcbiIsIGNwdSwgYXBpY2lkLCBzdGFydF9laXApOw0KIAlzdGFja19z
dGFydC5lc3AgPSAodm9pZCAqKSAoMTAyNCArIFBBR0VfU0laRSArIChjaGFy
ICopaWRsZSk7DQogDQogCS8qDQpAQCAtNTQ5LDE2ICs1ODIsMTcgQEANCiAJ
ICogQmUgcGFyYW5vaWQgYWJvdXQgY2xlYXJpbmcgQVBJQyBlcnJvcnMuDQog
CSAqLw0KIAlpZiAoQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvblthcGlj
aWRdKSkgew0KLQkJYXBpY19yZWFkYXJvdW5kKEFQSUNfU1BJVik7DQorCQlh
cGljX3JlYWRfYXJvdW5kKEFQSUNfU1BJVik7DQogCQlhcGljX3dyaXRlKEFQ
SUNfRVNSLCAwKTsNCi0JCWFjY2VwdF9zdGF0dXMgPSAoYXBpY19yZWFkKEFQ
SUNfRVNSKSAmIDB4RUYpOw0KKwkJYXBpY19yZWFkKEFQSUNfRVNSKTsNCiAJ
fQ0KIA0KIAkvKg0KIAkgKiBTdGF0dXMgaXMgbm93IGNsZWFuDQogCSAqLw0K
LQlzZW5kX3N0YXR1cyA9IAkwOw0KKwlzZW5kX3N0YXR1cyA9IDA7DQogCWFj
Y2VwdF9zdGF0dXMgPSAwOw0KKwlib290X3N0YXR1cyA9IDA7DQogDQogCS8q
DQogCSAqIFN0YXJ0aW5nIGFjdHVhbCBJUEkgc2VxdWVuY2UuLi4NCkBAIC01
NjcsMzcgKzYwMSw0MSBAQA0KIAlEcHJpbnRrKCJBc3NlcnRpbmcgSU5JVC5c
biIpOw0KIA0KIAkvKg0KLQkgKiBUdXJuIElOSVQgb24NCi0JICovDQotCWNm
ZyA9IGFwaWNfcmVhZChBUElDX0lDUjIpOw0KLQljZmcgJj0gMHgwMEZGRkZG
RjsNCi0NCi0JLyoNCi0JICogVGFyZ2V0IGNoaXANCisJICogVHVybiBJTklU
IG9uIHRhcmdldCBjaGlwDQogCSAqLw0KLQlhcGljX3dyaXRlKEFQSUNfSUNS
MiwgY2ZnIHwgU0VUX0FQSUNfREVTVF9GSUVMRChhcGljaWQpKTsNCisJYXBp
Y193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxE
KGFwaWNpZCkpOw0KIA0KIAkvKg0KIAkgKiBTZW5kIElQSQ0KIAkgKi8NCi0J
Y2ZnID0gYXBpY19yZWFkKEFQSUNfSUNSKTsNCi0JY2ZnICY9IH4weENERkZG
Ow0KLQljZmcgfD0gKEFQSUNfREVTVF9MRVZFTFRSSUcgfCBBUElDX0RFU1Rf
QVNTRVJUIHwgQVBJQ19ERVNUX0RNX0lOSVQpOw0KLQlhcGljX3dyaXRlKEFQ
SUNfSUNSLCBjZmcpOw0KKwlhcGljX3dyaXRlX2Fyb3VuZChBUElDX0lDUiwg
QVBJQ19JTlRfTEVWRUxUUklHIHwgQVBJQ19JTlRfQVNTRVJUDQorCQkJCXwg
QVBJQ19ETV9JTklUKTsNCisNCisJRHByaW50aygiV2FpdGluZyBmb3Igc2Vu
ZCB0byBmaW5pc2guLi5cbiIpOw0KKwl0aW1lb3V0ID0gMDsNCisJZG8gew0K
KwkJRHByaW50aygiKyIpOw0KKwkJdWRlbGF5KDEwMCk7DQorCQlzZW5kX3N0
YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikgJiBBUElDX0lDUl9CVVNZOw0K
Kwl9IHdoaWxlIChzZW5kX3N0YXR1cyAmJiAodGltZW91dCsrIDwgMTAwMCkp
Ow0KKw0KKwltZGVsYXkoMTApOw0KIA0KLQl1ZGVsYXkoMjAwKTsNCiAJRHBy
aW50aygiRGVhc3NlcnRpbmcgSU5JVC5cbiIpOw0KIA0KIAkvKiBUYXJnZXQg
Y2hpcCAqLw0KLQljZmcgPSBhcGljX3JlYWQoQVBJQ19JQ1IyKTsNCi0JY2Zn
ICY9IDB4MDBGRkZGRkY7DQotCWFwaWNfd3JpdGUoQVBJQ19JQ1IyLCBjZmd8
U0VUX0FQSUNfREVTVF9GSUVMRChhcGljaWQpKTsNCisJYXBpY193cml0ZV9h
cm91bmQoQVBJQ19JQ1IyLCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGFwaWNpZCkp
Ow0KIA0KIAkvKiBTZW5kIElQSSAqLw0KLQljZmcgPSBhcGljX3JlYWQoQVBJ
Q19JQ1IpOw0KLQljZmcgJj0gfjB4Q0RGRkY7DQotCWNmZyB8PSAoQVBJQ19E
RVNUX0xFVkVMVFJJRyB8IEFQSUNfREVTVF9ETV9JTklUKTsNCi0JYXBpY193
cml0ZShBUElDX0lDUiwgY2ZnKTsNCisJYXBpY193cml0ZV9hcm91bmQoQVBJ
Q19JQ1IsIEFQSUNfSU5UX0xFVkVMVFJJRyB8IEFQSUNfRE1fSU5JVCk7DQor
DQorCURwcmludGsoIldhaXRpbmcgZm9yIHNlbmQgdG8gZmluaXNoLi4uXG4i
KTsNCisJdGltZW91dCA9IDA7DQorCWRvIHsNCisJCURwcmludGsoIisiKTsN
CisJCXVkZWxheSgxMDApOw0KKwkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQo
QVBJQ19JQ1IpICYgQVBJQ19JQ1JfQlVTWTsNCisJfSB3aGlsZSAoc2VuZF9z
dGF0dXMgJiYgKHRpbWVvdXQrKyA8IDEwMDApKTsNCiANCiAJLyoNCiAJICog
U2hvdWxkIHdlIHNlbmQgU1RBUlRVUCBJUElzID8NCkBAIC02MTYsOSArNjU0
LDExIEBADQogCSAqLw0KIAlEcHJpbnRrKCIjc3RhcnR1cCBsb29wczogJWQu
XG4iLCBudW1fc3RhcnRzKTsNCiANCisJbWF4bHZ0ID0gZ2V0X21heGx2dCgp
Ow0KKw0KIAlmb3IgKGogPSAxOyBqIDw9IG51bV9zdGFydHM7IGorKykgew0K
IAkJRHByaW50aygiU2VuZGluZyBTVEFSVFVQICMlZC5cbiIsaik7DQotCQlh
cGljX3JlYWRhcm91bmQoQVBJQ19TUElWKTsNCisJCWFwaWNfcmVhZF9hcm91
bmQoQVBJQ19TUElWKTsNCiAJCWFwaWNfd3JpdGUoQVBJQ19FU1IsIDApOw0K
IAkJYXBpY19yZWFkKEFQSUNfRVNSKTsNCiAJCURwcmludGsoIkFmdGVyIGFw
aWNfd3JpdGUuXG4iKTsNCkBAIC02MjgsMTcgKzY2OCwxMiBAQA0KIAkJICov
DQogDQogCQkvKiBUYXJnZXQgY2hpcCAqLw0KLQkJY2ZnID0gYXBpY19yZWFk
KEFQSUNfSUNSMik7DQotCQljZmcgJj0gMHgwMEZGRkZGRjsNCi0JCWFwaWNf
d3JpdGUoQVBJQ19JQ1IyLCBjZmcgfCBTRVRfQVBJQ19ERVNUX0ZJRUxEKGFw
aWNpZCkpOw0KKwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IyLCBTRVRf
QVBJQ19ERVNUX0ZJRUxEKGFwaWNpZCkpOw0KIA0KIAkJLyogQm9vdCBvbiB0
aGUgc3RhY2sgKi8NCi0JCWNmZyA9IGFwaWNfcmVhZChBUElDX0lDUik7DQot
CQljZmcgJj0gfjB4Q0RGRkY7DQotCQljZmcgfD0gKEFQSUNfREVTVF9ETV9T
VEFSVFVQIHwgKHN0YXJ0X2VpcCA+PiAxMikpOw0KLQ0KIAkJLyogS2ljayB0
aGUgc2Vjb25kICovDQotCQlhcGljX3dyaXRlKEFQSUNfSUNSLCBjZmcpOw0K
KwkJYXBpY193cml0ZV9hcm91bmQoQVBJQ19JQ1IsIEFQSUNfRE1fU1RBUlRV
UA0KKwkJCQkJfCAoc3RhcnRfZWlwID4+IDEyKSk7DQogDQogCQlEcHJpbnRr
KCJTdGFydHVwIHBvaW50IDEuXG4iKTsNCiANCkBAIC02NDcsMTMgKzY4Miwy
MCBAQA0KIAkJZG8gew0KIAkJCURwcmludGsoIisiKTsNCiAJCQl1ZGVsYXko
MTAwKTsNCi0JCQlzZW5kX3N0YXR1cyA9IGFwaWNfcmVhZChBUElDX0lDUikg
JiAweDEwMDA7DQorCQkJc2VuZF9zdGF0dXMgPSBhcGljX3JlYWQoQVBJQ19J
Q1IpICYgQVBJQ19JQ1JfQlVTWTsNCiAJCX0gd2hpbGUgKHNlbmRfc3RhdHVz
ICYmICh0aW1lb3V0KysgPCAxMDAwKSk7DQogDQogCQkvKg0KIAkJICogR2l2
ZSB0aGUgb3RoZXIgQ1BVIHNvbWUgdGltZSB0byBhY2NlcHQgdGhlIElQSS4N
CiAJCSAqLw0KIAkJdWRlbGF5KDIwMCk7DQorCQkvKg0KKwkJICogRHVlIHRv
IHRoZSBQZW50aXVtIGVycmF0dW0gM0FQLg0KKwkJICovDQorCQlpZiAobWF4
bHZ0ID4gMykgew0KKwkJCWFwaWNfcmVhZF9hcm91bmQoQVBJQ19TUElWKTsN
CisJCQlhcGljX3dyaXRlKEFQSUNfRVNSLCAwKTsNCisJCX0NCiAJCWFjY2Vw
dF9zdGF0dXMgPSAoYXBpY19yZWFkKEFQSUNfRVNSKSAmIDB4RUYpOw0KIAkJ
aWYgKHNlbmRfc3RhdHVzIHx8IGFjY2VwdF9zdGF0dXMpDQogCQkJYnJlYWs7
DQpAQCAtNjc2LDcgKzcxOCw3IEBADQogCQkvKg0KIAkJICogV2FpdCA1cyB0
b3RhbCBmb3IgYSByZXNwb25zZQ0KIAkJICovDQotCQlmb3IgKHRpbWVvdXQg
PSAwOyB0aW1lb3V0IDwgMTAwMDAwMDAwMDsgdGltZW91dCsrKSB7DQorCQlm
b3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgNTAwMDA7IHRpbWVvdXQrKykg
ew0KIAkJCWlmICh0ZXN0X2JpdChjcHUsICZjcHVfY2FsbGluX21hcCkpDQog
CQkJCWJyZWFrOwkvKiBJdCBoYXMgYm9vdGVkICovDQogCQkJdWRlbGF5KDEw
MCk7DQpAQCAtNjg3LDE1ICs3MjksMjIgQEANCiAJCQlEcHJpbnRrKCJPSy5c
biIpOw0KIAkJCXByaW50aygiQ1BVJWQ6ICIsIGNwdSk7DQogCQkJcHJpbnRf
Y3B1X2luZm8oJmNwdV9kYXRhW2NwdV0pOw0KKwkJCURwcmludGsoIkNQVSBo
YXMgYm9vdGVkLlxuIik7DQogCQl9IGVsc2Ugew0KKwkJCWJvb3Rfc3RhdHVz
ID0gMTsNCiAJCQlpZiAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBo
eXNfdG9fdmlydCg4MTkyKSkNCi0JCQkJCT09IDB4QTUpIC8qIHRyYW1wb2xp
bmUgY29kZSBub3QgcnVuICovDQorCQkJCQk9PSAweEE1KQ0KKwkJCQkvKiB0
cmFtcG9saW5lIHN0YXJ0ZWQgYnV0Li4uPyAqLw0KIAkJCQlwcmludGsoIlN0
dWNrID8/XG4iKTsNCiAJCQllbHNlDQotCQkJCXByaW50aygiQ1BVIGJvb3Rl
ZCBidXQgbm90IHJlc3BvbmRpbmcuXG4iKTsNCisJCQkJLyogdHJhbXBvbGlu
ZSBjb2RlIG5vdCBydW4gKi8NCisJCQkJcHJpbnRrKCJOb3QgcmVzcG9uZGlu
Zy5cbiIpOw0KKyNpZiBBUElDX0RFQlVHDQorCQkJaW5xdWlyZV9yZW1vdGVf
YXBpYyhhcGljaWQpOw0KKyNlbmRpZg0KIAkJfQ0KLQkJRHByaW50aygiQ1BV
IGhhcyBib290ZWQuXG4iKTsNCi0JfSBlbHNlIHsNCisJfQ0KKwlpZiAoc2Vu
ZF9zdGF0dXMgfHwgYWNjZXB0X3N0YXR1cyB8fCBib290X3N0YXR1cykgew0K
IAkJeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IC0xOw0KIAkJeDg2X2FwaWNp
ZF90b19jcHVbYXBpY2lkXSA9IC0xOw0KIAkJY3B1Y291bnQtLTsNCkBAIC04
NTgsNiArOTA3LDcgQEANCiAJCURwcmludGsoIkdldHRpbmcgTFZUMTogJXhc
biIsIHJlZyk7DQogCX0NCiANCisJY29ubmVjdF9ic3BfQVBJQygpOw0KIAlz
ZXR1cF9sb2NhbF9BUElDKCk7DQogDQogCWlmIChHRVRfQVBJQ19JRChhcGlj
X3JlYWQoQVBJQ19JRCkpICE9IGJvb3RfY3B1X2lkKQ0KQEAgLTg3Nyw3ICs5
MjcsNyBAQA0KIA0KIAkJaWYgKCEocGh5c19jcHVfcHJlc2VudF9tYXAgJiAo
MSA8PCBhcGljaWQpKSkNCiAJCQljb250aW51ZTsNCi0JCWlmICgobWF4X2Nw
dXMgPj0gMCkgJiYgKG1heF9jcHVzIDwgY3B1Y291bnQrMSkpDQorCQlpZiAo
KG1heF9jcHVzID49IDApICYmIChtYXhfY3B1cyA8PSBjcHVjb3VudCsxKSkN
CiAJCQljb250aW51ZTsNCiANCiAJCWRvX2Jvb3RfY3B1KGFwaWNpZCk7DQpA
QCAtOTM0LDcgKzk4NCw2IEBADQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJX
QVJOSU5HOiBTTVAgb3BlcmF0aW9uIG1heSBiZSB1bnJlbGlhYmxlIHdpdGgg
QiBzdGVwcGluZyBwcm9jZXNzb3JzLlxuIik7DQogCURwcmludGsoIkJvb3Qg
ZG9uZS5cbiIpOw0KIA0KLQljYWNoZV9BUElDX3JlZ2lzdGVycygpOw0KICNp
Zm5kZWYgQ09ORklHX1ZJU1dTDQogCS8qDQogCSAqIEhlcmUgd2UgY2FuIGJl
IHN1cmUgdGhhdCB0aGVyZSBpcyBhbiBJTy1BUElDIGluIHRoZSBzeXN0ZW0u
IExldCdzDQotLS0gbGludXgvYXJjaC9pMzg2L2tlcm5lbC92aXN3c19hcGlj
LmMub3JpZwlTdW4gTm92IDI4IDAwOjI3OjQ4IDE5OTkNCisrKyBsaW51eC9h
cmNoL2kzODYva2VybmVsL3Zpc3dzX2FwaWMuYwlXZWQgQXByIDEyIDAzOjQx
OjExIDIwMDANCkBAIC0zNzYsNyArMzc2LDcgQEANCiAJZm9yIChpID0gMDsg
aSA8IDE2OyBpKyspIHsNCiAJCWlycV9kZXNjW2ldLnN0YXR1cyA9IElSUV9E
SVNBQkxFRDsNCiAJCWlycV9kZXNjW2ldLmFjdGlvbiA9IDA7DQotCQlpcnFf
ZGVzY1tpXS5kZXB0aCA9IDA7DQorCQlpcnFfZGVzY1tpXS5kZXB0aCA9IDE7
DQogDQogCQkvKg0KIAkJICogQ29iYWx0IElSUXMgYXJlIG1hcHBlZCB0byBz
dGFuZGFyZCBJU0ENCg==
--79888902-983468898-955540524=:5358--

-
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/