[kaffe] locks patch
Helmer Krämer
hkraemer@freenet.de
Tue Jul 1 13:32:01 2003
This is a multi-part message in MIME format.
--Multipart_Tue__1_Jul_2003_22:34:47_+0200_09ec4198
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Hi,
I've attached a small patch that fixes some issues
related to the handling of locks in kaffe. Review
and comments appreciated ;)
Stuff contained in the patch:
* the specialLocks array is removed; special locks whose heavyLock
should not be gc_malloc'ed are now of type struct _iStaticLock,
which contains a struct _iLock field.
* _slowUnlockMutex correctly handles !STACK_GROWS_UP
* _slowUnlockMutexIfHeld no longer allocates a heavyLock if that's
unnecessary
* _releaseLock and _acquireLock have been removed since they don't
seem to be used anywhere
* _lockMutex uses jthread_on_current_stack to detect recursive
invocations
Greetings,
Helmer
--Multipart_Tue__1_Jul_2003_22:34:47_+0200_09ec4198
Content-Type: application/octet-stream;
name="locks-patch"
Content-Disposition: attachment;
filename="locks-patch"
Content-Transfer-Encoding: base64
SW5kZXg6IGthZmZlL2thZmZldm0vaml0L21hY2hpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vaml0L21hY2hpbmUuYyx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41NQpkaWZmIC11IC1yMS41NSBtYWNoaW5lLmMKLS0tIGthZmZlL2thZmZldm0v
aml0L21hY2hpbmUuYwkyOCBKdW4gMjAwMyAxMDoyOTo0MCAtMDAwMAkxLjU1CisrKyBrYWZmZS9r
YWZmZXZtL2ppdC9tYWNoaW5lLmMJMSBKdWwgMjAwMyAyMDoxMzo1OSAtMDAwMApAQCAtNTMsNyAr
NTMsNyBAQAogY2hhciogZW5naW5lX25hbWUgPSAiSnVzdC1pbi10aW1lIjsKIGNoYXIqIGVuZ2lu
ZV92ZXJzaW9uID0gS1ZFUjsKIAotaUxvY2sqIHRyYW5zbGF0b3Jsb2NrOwkJLyogbG9jayB0byBw
cm90ZWN0IHRoZSB2YXJpYWJsZXMgYmVsb3cgKi8KK2lTdGF0aWNMb2NrCXRyYW5zbGF0b3Jsb2Nr
OwkJLyogbG9jayB0byBwcm90ZWN0IHRoZSB2YXJpYWJsZXMgYmVsb3cgKi8KIGludCBzdGFja25v
OwogaW50IG1heFN0YWNrOwogaW50IG1heExvY2FsOwpAQCAtNTEzLDE0ICs1MTMsMTQgQEAKIHsK
IAlpbnQgaTsKIAlqZXhjZXB0aW9uRW50cnkqIGU7CisJdm9pZCAqdHJhbXA7CiAKIAkvKiBXb3Jr
IG91dCBuZXcgZXN0aW1hdGUgb2YgY29kZSBwZXIgYnl0ZWNvZGUgKi8KIAljb2RlX2dlbmVyYXRl
ZCArPSBjb2RlLT5tZW1sZW47CiAJYnl0ZWNvZGVfcHJvY2Vzc2VkICs9IG1ldGgtPmMuYmNvZGUu
Y29kZWxlbjsKIAljb2RlcGVyYnl0ZWNvZGUgPSBjb2RlX2dlbmVyYXRlZCAvIGJ5dGVjb2RlX3By
b2Nlc3NlZDsKIAotCS8qIGRvbid0IGZvcmdldCB0byBmcmVlIHRoZSB0cmFtcG9saW5lIGJlZm9y
ZSBvdmVyd3JpdGluZyBpdCAqLyAKLQlnY19mcmVlKE1FVEhPRF9OQVRJVkVDT0RFKG1ldGgpKTsK
Kwl0cmFtcCA9IE1FVEhPRF9OQVRJVkVDT0RFKG1ldGgpOwogCiAJLyogaW5zdGFsbCB0aGUgaml0
dGVkIGNvZGUgKi8KIAlTRVRfTUVUSE9EX0pJVENPREUobWV0aCwgY29kZS0+Y29kZSk7CkBAIC01
MzQsNiArNTM0LDggQEAKIAogCS8qIEZsdXNoIGNvZGUgb3V0IG9mIGNhY2hlICovCiAJRkxVU0hf
RENBQ0hFKE1FVEhPRF9OQVRJVkVDT0RFKG1ldGgpLCBtZXRoLT5jLm5jb2RlLm5jb2RlX2VuZCk7
CisKKwlnY19mcmVlKHRyYW1wKTsKIAogI2lmIGRlZmluZWQoTURfUkVHSVNURVJfSklUX0VYQ0VQ
VElPTl9JTkZPKQogCU1EX1JFR0lTVEVSX0pJVF9FWENFUFRJT05fSU5GTyAobWV0aC0+Yy5uY29k
ZS5uY29kZV9zdGFydCwKSW5kZXg6IGthZmZlL2thZmZldm0vaml0L21hY2hpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vaml0L21hY2hpbmUu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZmIC11IC1yMS4xNyBtYWNoaW5lLmgKLS0t
IGthZmZlL2thZmZldm0vaml0L21hY2hpbmUuaAkxNiBBdWcgMjAwMiAwOTo0MjozNyAtMDAwMAkx
LjE3CisrKyBrYWZmZS9rYWZmZXZtL2ppdC9tYWNoaW5lLmgJMSBKdWwgMjAwMyAyMDoxMzo1OSAt
MDAwMApAQCAtMTY0LDcgKzE2NCw3IEBACiAjZGVmaW5lCWNhbkNhdGNoKEZMQUcpCXdpbGxjYXRj
aC4gRkxBRwogCiAjaW5jbHVkZSAibG9ja3MuaCIKLWV4dGVybiBpTG9jayogdHJhbnNsYXRvcmxv
Y2s7CitleHRlcm4gaVN0YXRpY0xvY2sJdHJhbnNsYXRvcmxvY2s7CiAKICNkZWZpbmUJZW50ZXJU
cmFuc2xhdG9yKCkJbG9ja1N0YXRpY011dGV4KCZ0cmFuc2xhdG9ybG9jaykKICNkZWZpbmUJbGVh
dmVUcmFuc2xhdG9yKCkJdW5sb2NrU3RhdGljTXV0ZXgoJnRyYW5zbGF0b3Jsb2NrKQpJbmRleDog
a2FmZmUva2FmZmV2bS9jbGFzc1Bvb2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZl
L2thZmZlL2thZmZlL2thZmZldm0vY2xhc3NQb29sLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTgKZGlmZiAtdSAtcjEuMTggY2xhc3NQb29sLmMKLS0tIGthZmZlL2thZmZldm0vY2xhc3NQb29s
LmMJMjQgTWF5IDIwMDMgMjA6MTg6MTEgLTAwMDAJMS4xOAorKysga2FmZmUva2FmZmV2bS9jbGFz
c1Bvb2wuYwkxIEp1bCAyMDAzIDIwOjEzOjU5IC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5j
bHVkZSAibWQuaCIKIAogI2RlZmluZQlDTEFTU0hBU0hTWgkyNTYJLyogTXVzdCBiZSBhIHBvd2Vy
IG9mIHR3byAqLwotc3RhdGljIGlMb2NrKiBjbGFzc0hhc2hMb2NrOworc3RhdGljIGlTdGF0aWNM
b2NrCWNsYXNzSGFzaExvY2s7CiBzdGF0aWMgY2xhc3NFbnRyeSogY2xhc3NFbnRyeVBvb2xbQ0xB
U1NIQVNIU1pdOwogI2lmIGRlZmluZWQoS0FGRkVfU1RBVFMpCiBzdGF0b2JqZWN0IGNsYXNzU3Rh
dHM7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIH0KIAogc3RhdGljIG5hbWVEZXBlbmRlbmN5ICpkZXBl
bmRlbmNpZXM7Ci1zdGF0aWMgaUxvY2sgKm1hcHBpbmdMb2NrOworc3RhdGljIGlTdGF0aWNMb2Nr
CW1hcHBpbmdMb2NrOwogCiBzdGF0aWMKIG5hbWVEZXBlbmRlbmN5ICpmaW5kTmFtZURlcGVuZGVu
Y3koanRocmVhZF90IGp0KQpJbmRleDoga2FmZmUva2FmZmV2bS9maW5kSW5KYXIuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vZmluZEluSmFyLmMs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQKZGlmZiAtdSAtcjEuNTQgZmluZEluSmFyLmMKLS0t
IGthZmZlL2thZmZldm0vZmluZEluSmFyLmMJMTEgSnVuIDIwMDMgMjI6MjY6MTcgLTAwMDAJMS41
NAorKysga2FmZmUva2FmZmV2bS9maW5kSW5KYXIuYwkxIEp1bCAyMDAzIDIwOjE0OjAwIC0wMDAw
CkBAIC0xODAsNyArMTgwLDcgQEAKIHsKIAljaGFyICpidWY7CiAJaW50IGZwOwotCXN0YXRpYyBp
TG9jayogamFybG9jazsKKwlzdGF0aWMgaVN0YXRpY0xvY2sJamFybG9jazsKIAljbGFzc3BhdGhF
bnRyeSogcHRyOwogCWludCBpOwogCWludCByYzsKSW5kZXg6IGthZmZlL2thZmZldm0vamFyLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9rYWZmZXZtL2phci5j
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXIxLjIzIGphci5jCi0tLSBrYWZm
ZS9rYWZmZXZtL2phci5jCTExIEZlYiAyMDAzIDE2OjU0OjQ0IC0wMDAwCTEuMjMKKysrIGthZmZl
L2thZmZldm0vamFyLmMJMSBKdWwgMjAwMyAyMDoxNDowMCAtMDAwMApAQCAtNjgsNyArNjgsNyBA
QAogICovCiBzdGF0aWMgc3RydWN0IF9qYXJDYWNoZSB7CiAjaWYgIWRlZmluZWQoS0FGRkVIKQot
CWlMb2NrICpsb2NrOworCWlTdGF0aWNMb2NrCWxvY2s7CiAjZW5kaWYKIAlqYXJGaWxlICpmaWxl
czsKICNkZWZpbmUgSkFSX0ZJTEVfQ0FDSEVfTUFYIDEyCkluZGV4OiBrYWZmZS9rYWZmZXZtL3N0
cmluZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMva2FmZmUva2FmZmUva2FmZmUva2FmZmV2
bS9zdHJpbmcuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNApkaWZmIC11IC1yMS4yNCBzdHJp
bmcuYwotLS0ga2FmZmUva2FmZmV2bS9zdHJpbmcuYwkyOSBNYXkgMjAwMiAyMjo1ODo0NCAtMDAw
MAkxLjI0CisrKyBrYWZmZS9rYWZmZXZtL3N0cmluZy5jCTEgSnVsIDIwMDMgMjA6MTQ6MDAgLTAw
MDAKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyogSW50ZXJuYWwgdmFyaWFibGVzICovCiBzdGF0aWMg
aGFzaHRhYl90CWhhc2hUYWJsZTsJLyogaW50ZXJuIGhhc2ggdGFibGUgKi8KLWlMb2NrKiBzdHJp
bmdMb2NrOwkJICAgICAgICAvKiBtdXRleCBvbiBhbGwgaW50ZXJuIG9wZXJhdGlvbnMgKi8KK3N0
YXRpYyBpU3RhdGljTG9jawlzdHJpbmdMb2NrOwkvKiBtdXRleCBvbiBhbGwgaW50ZXJuIG9wZXJh
dGlvbnMgKi8KIHN0YXRpYyBpbnQgKiAgICAgICAgICAgIHN0cmluZ0xvY2tSb290OwkvKiB0aGUg
c3RyaW5nIGxvY2sgaXMgbm90IGEgbW9uaXRvciAqLwogCiAvKiBJbnRlcm5hbCBmdW5jdGlvbnMg
Ki8KQEAgLTI3OCw5ICsyNzgsOSBAQAogCWludCAqbXlSb290ID0gc3RyaW5nTG9ja1Jvb3Q7CiAK
IAkvKiBYWFggYXNzdW1lcyBzdHJpbmdMb2NrIGlzbid0IGFjcXVpcmVkIHJlY3Vyc2l2ZWx5ICh3
aGljaCBpdCBpc24ndCkgKi8KLQlfdW5sb2NrTXV0ZXgoJnN0cmluZ0xvY2ssIG15Um9vdCk7CisJ
X3VubG9ja011dGV4KCZzdHJpbmdMb2NrLmxvY2ssIG15Um9vdCwgJnN0cmluZ0xvY2suaGVhdnlM
b2NrKTsKIAlwID0gS0NBTExPQygxLCBzeik7Ci0JX2xvY2tNdXRleCgmc3RyaW5nTG9jaywgbXlS
b290KTsKKwlfbG9ja011dGV4KCZzdHJpbmdMb2NrLmxvY2ssIG15Um9vdCwgJnN0cmluZ0xvY2su
aGVhdnlMb2NrKTsKIAlzdHJpbmdMb2NrUm9vdCA9IG15Um9vdDsKIAlyZXR1cm4gKHApOwogfQpA
QCAtMjkxLDkgKzI5MSw5IEBACiAJaW50ICpteVJvb3QgPSBzdHJpbmdMb2NrUm9vdDsKIAogCS8q
IFhYWCBhc3N1bWVzIHN0cmluZ0xvY2sgaXNuJ3QgYWNxdWlyZWQgcmVjdXJzaXZlbHkgKHdoaWNo
IGl0IGlzbid0KSAqLwotCV91bmxvY2tNdXRleCgmc3RyaW5nTG9jaywgbXlSb290KTsKKwlfdW5s
b2NrTXV0ZXgoJnN0cmluZ0xvY2subG9jaywgbXlSb290LCAmc3RyaW5nTG9jay5oZWF2eUxvY2sp
OwogCUtGUkVFKHB0cik7Ci0JX2xvY2tNdXRleCgmc3RyaW5nTG9jaywgbXlSb290KTsKKwlfbG9j
a011dGV4KCZzdHJpbmdMb2NrLmxvY2ssIG15Um9vdCwgJnN0cmluZ0xvY2suaGVhdnlMb2NrKTsK
IAlzdHJpbmdMb2NrUm9vdCA9IG15Um9vdDsKIH0KIApJbmRleDoga2FmZmUva2FmZmV2bS90aHJl
YWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0v
dGhyZWFkLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDgKZGlmZiAtdSAtcjEuNDggdGhyZWFk
LmMKLS0tIGthZmZlL2thZmZldm0vdGhyZWFkLmMJMTEgSnVuIDIwMDMgMTY6NTQ6MTQgLTAwMDAJ
MS40OAorKysga2FmZmUva2FmZmV2bS90aHJlYWQuYwkxIEp1bCAyMDAzIDIwOjE0OjAxIC0wMDAw
CkBAIC01OSw3ICs1OSw4IEBACiBzdGF0aWMgdm9pZCBmaXJzdFN0YXJ0VGhyZWFkKHZvaWQqKTsK
IHN0YXRpYyB2b2lkIGNyZWF0ZUluaXRpYWxUaHJlYWQoY29uc3QgY2hhciopOwogc3RhdGljIHZv
aWQgcnVuZmluYWxpemVyKHZvaWQpOwotc3RhdGljIGlMb2NrKiB0aHJlYWRfc3RhcnRfbG9jazsK
Kworc3RhdGljIGlTdGF0aWNMb2NrCXRocmVhZF9zdGFydF9sb2NrOwogCiAvKgogICogSG93IGRv
IEkgZ2V0IG1lbW9yeT8KQEAgLTI1Niw3ICsyNTcsNyBAQAogCXVuaGFuZCh0aWQpLT5zdGFja092
ZXJmbG93RXJyb3IgPSAKIAkJKEhqYXZhX2xhbmdfVGhyb3dhYmxlKilTdGFja092ZXJmbG93RXJy
b3I7CiAJdW5oYW5kKHRpZCktPm5lZWRPblN0YWNrID0gU1RBQ0tfSElHSDsKLQorICAgICAgICAK
ICAgICAgICAgLyoKIAkgKiBzZXQgY29udGV4dCBjbGFzcyBsb2FkZXIgb2YgcHJpbW9yZGlhbCB0
aHJlYWQgdG8gYXBwIGNsYXNzbG9hZGVyCiAJICogbXVzdCBub3QgYmUgZG9uZSBlYXJsaWVyLCBz
aW5jZSBnZXRDdXJyZW50VGhyZWFkKCkgd29uJ3Qgd29yawpAQCAtMjY3LDcgKzI2OCw2IEBACiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImdldFNpbmdsZXRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiKS5sOwog
Ci0JCiAJLyogQXR0YWNoIHRocmVhZCB0byB0aHJlYWRHcm91cCAqLwogCWRvX2V4ZWN1dGVfamF2
YV9tZXRob2QodW5oYW5kKHRpZCktPmdyb3VwLCAiYWRkIiwgIihMamF2YS9sYW5nL1RocmVhZDsp
ViIsIDAsIDAsIHRpZCk7CiAKSW5kZXg6IGthZmZlL2thZmZldm0vdXRmOGNvbnN0LmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9rYWZmZXZtL3V0Zjhjb25zdC5j
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXUgLXIxLjMwIHV0Zjhjb25zdC5jCi0t
LSBrYWZmZS9rYWZmZXZtL3V0Zjhjb25zdC5jCTExIEp1biAyMDAzIDE2OjU0OjE0IC0wMDAwCTEu
MzAKKysrIGthZmZlL2thZmZldm0vdXRmOGNvbnN0LmMJMSBKdWwgMjAwMyAyMDoxNDowMSAtMDAw
MApAQCAtMzcsNyArMzcsNyBAQAogLyogSW50ZXJuYWwgdmFyaWFibGVzICovCiAjaWZuZGVmIEtB
RkZFSAkJCQkvKiBZdWshICovCiBzdGF0aWMgaGFzaHRhYl90CWhhc2hUYWJsZTsKLWlMb2NrKgkJ
dXRmOExvY2s7CS8qIG11dGV4IG9uIGFsbCBpbnRlcm4gb3BlcmF0aW9ucyAqLworc3RhdGljIGlT
dGF0aWNMb2NrCXV0ZjhMb2NrOwkvKiBtdXRleCBvbiBhbGwgaW50ZXJuIG9wZXJhdGlvbnMgKi8K
IAogLyoKICAqIFVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB1dGY4TG9jayBob2xk
ZXIncyBzdGFjawpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGRvX2xvY2tV
VEYoaW50ICp3aGVyZSkKIHsKIAlqdGhyZWFkX2Rpc2FibGVfc3RvcCgpOwotCV9sb2NrTXV0ZXgo
JnV0ZjhMb2NrLCB3aGVyZSk7CisJX2xvY2tNdXRleCgmdXRmOExvY2subG9jaywgd2hlcmUsICZ1
dGY4TG9jay5oZWF2eUxvY2spOwogCURCR0lGKGFzc2VydCh1dGZMb2NrUm9vdCA9PSBOVUxMKSk7
CiAJdXRmTG9ja1Jvb3QgPSB3aGVyZTsKIH0KQEAgLTYyLDcgKzYyLDcgQEAKIHsKIAlEQkdJRihh
c3NlcnQodXRmTG9ja1Jvb3QgIT0gTlVMTCkpOwogCURCR0lGKHV0ZkxvY2tSb290ID0gTlVMTCk7
Ci0JX3VubG9ja011dGV4KCZ1dGY4TG9jaywgd2hlcmUpOworCV91bmxvY2tNdXRleCgmdXRmOExv
Y2subG9jaywgd2hlcmUsICZ1dGY4TG9jay5oZWF2eUxvY2spOwogCWp0aHJlYWRfZW5hYmxlX3N0
b3AoKTsKIH0KIApAQCAtNzgsMTEgKzc4LDExIEBACiAJREJHSUYoYXNzZXJ0KHV0ZkxvY2tSb290
ICE9IE5VTEwpKTsKIAlteVJvb3QgPSB1dGZMb2NrUm9vdDsKIAlEQkdJRih1dGZMb2NrUm9vdCA9
IE5VTEwpOwotCV91bmxvY2tNdXRleCgmdXRmOExvY2ssIG15Um9vdCk7CisJX3VubG9ja011dGV4
KCZ1dGY4TG9jay5sb2NrLCBteVJvb3QsICZ1dGY4TG9jay5oZWF2eUxvY2spOwogCiAJcmV0ID0g
Z2NfbWFsbG9jKHNpemUsIEdDX0FMTE9DX1VURjhDT05TVCk7CiAKLQlfbG9ja011dGV4KCZ1dGY4
TG9jaywgbXlSb290KTsKKwlfbG9ja011dGV4KCZ1dGY4TG9jay5sb2NrLCBteVJvb3QsICZ1dGY4
TG9jay5oZWF2eUxvY2spOwogCURCR0lGKGFzc2VydCh1dGZMb2NrUm9vdCA9PSBOVUxMKSk7CiAJ
dXRmTG9ja1Jvb3QgPSBteVJvb3Q7CiAKQEAgLTk2LDExICs5NiwxMSBAQAogCURCR0lGKGFzc2Vy
dCh1dGZMb2NrUm9vdCAhPSBOVUxMKSk7CiAJbXlSb290ID0gdXRmTG9ja1Jvb3Q7CiAJREJHSUYo
dXRmTG9ja1Jvb3QgPSBOVUxMKTsKLQlfdW5sb2NrTXV0ZXgoJnV0ZjhMb2NrLCBteVJvb3QpOwor
CV91bmxvY2tNdXRleCgmdXRmOExvY2subG9jaywgbXlSb290LCAmdXRmOExvY2suaGVhdnlMb2Nr
KTsKIAogCWdjX2ZyZWUoKHZvaWQgKiltZW0pOwogCi0JX2xvY2tNdXRleCgmdXRmOExvY2ssIG15
Um9vdCk7CisJX2xvY2tNdXRleCgmdXRmOExvY2subG9jaywgbXlSb290LCAmdXRmOExvY2suaGVh
dnlMb2NrKTsKIAlEQkdJRihhc3NlcnQodXRmTG9ja1Jvb3QgPT0gTlVMTCkpOwogCXV0ZkxvY2tS
b290ID0gbXlSb290OwogfQpJbmRleDoga2FmZmUva2FmZmV2bS9sb2Nrcy5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMva2FmZmUva2FmZmUva2FmZmUva2FmZmV2bS9sb2Nrcy5jLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXUgLXIxLjQzIGxvY2tzLmMKLS0tIGthZmZlL2thZmZl
dm0vbG9ja3MuYwkyIEp1biAyMDAzIDE0OjE1OjQ3IC0wMDAwCTEuNDMKKysrIGthZmZlL2thZmZl
dm0vbG9ja3MuYwkxIEp1bCAyMDAzIDIwOjE0OjAxIC0wMDAwCkBAIC0yMiwxNCArMjIsNyBAQAog
I2luY2x1ZGUgIm1kLmgiCiAjaW5jbHVkZSAianRocmVhZC5oIgogI2luY2x1ZGUgImRlYnVnLmgi
Ci0KLSNpZm5kZWYgU1RBQ0tSRURaT05FCi0jIGlmZGVmIFJFRFpPTkUKLSMgIGRlZmluZSBTVEFD
S1JFRFpPTkUJUkVEWk9ORQotIyBlbHNlCi0jICBkZWZpbmUgU1RBQ0tSRURaT05FCTEwMjQKLSMg
ZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgImdjLmgiCiAKIC8qCiAgKiBJZiB3ZSBkb24ndCBoYXZl
IGFuIGF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZSBkZWZpbmVkIHRoZW4gbWFrZQpAQCAtNTYs
MjcgKzQ5LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFdlIG5lZWQgdG8gdHJlYXQgdGhlIGdj
IGxvY2tzIHNwZWNpYWwgc2luY2UgdGhleSBndWFyZCBtZW1vcnkgYWxsb2NhdGlvbgotICogYW5k
IGNhbm5vdCBiZSBhY3F1aXJlZCBieSB0aGUgZ2MgdGhyZWFkIG90aGVyd2lzZS4KLSAqIEknbSBu
b3QgcHJvdWQgb2YgdGhpcyAtIGl0J3MgYSBoYWNrIHdhaXRpbmcgZm9yIGEgYmV0dGVyIGlkZWEg
LSBUSU0uCi0gKi8KLWV4dGVybiBpTG9jayogZ2NfbG9jazsKLWV4dGVybiBpTG9jayogZ2NfaGVh
cF9sb2NrOwotZXh0ZXJuIGlMb2NrKiBnY21hbjsKLWV4dGVybiBpTG9jayogZmlubWFuOwotc3Rh
dGljIHN0cnVjdCB7Ci0JaUxvY2sqKglrZXk7Ci0JaUxvY2sJbG9jazsKLX0gc3BlY2lhbExvY2tz
W10gPSB7Ci0JeyAmZ2NfbG9jaywJeyAwLCAwLCAwIH0gfSwKLQl7ICZnY19oZWFwX2xvY2sseyAw
LCAwLCAwIH0gfSwKLQl7ICZnY21hbiwJeyAwLCAwLCAwIH0gfSwKLQl7ICZmaW5tYW4sCXsgMCwg
MCwgMCB9IH0sCi0JeyAmc3RyaW5nTG9jaywJeyAwLCAwLCAwIH0gfSwKLQl7ICZ1dGY4TG9jaywJ
eyAwLCAwLCAwIH0gfSwKLX07Ci0jZGVmaW5lCU5SX1NQRUNJQUxfTE9DS1MJKHNpemVvZihzcGVj
aWFsTG9ja3MpL3NpemVvZihzcGVjaWFsTG9ja3NbMF0pKQotCiAvKiBDb3VudCBudW1iZXIgb2Yg
YmFja29mZnMuICBYWFggbW92ZSBpbnRvIHRoZSBTVEFUIGluZnJhc3RydWN0dXJlLiAqLwogaW50
IGJhY2tvZmZjb3VudCA9IDA7CiAKQEAgLTEwMSwyMCArNzMsMTkgQEAKICAqLwogc3RhdGljCiBp
TG9jayoKLWdldEhlYXZ5TG9jayhpTG9jayoqIGxrcCkKK2dldEhlYXZ5TG9jayhpTG9jayoqIGxr
cCwgaUxvY2sgKmhlYXZ5TG9jaykKIHsKIAlpTG9jayogb2xkOwogCWlMb2NrKiBsazsKIAlIamF2
YV9sYW5nX1RocmVhZCogdGlkOwogCWpsb25nIHRpbWVvdXQ7Ci0JaW50IGk7CiAKIERCRyhTTE9X
TE9DS1MsCiAgICAgCWRwcmludGYoIiAgZ2V0SGVhdnlMb2NrKCoqbGtwPSVwLCAqbGs9JXAsIHRo
PSVwKVxuIiwKIAkJbGtwLCAqbGtwLCBqdGhyZWFkX2N1cnJlbnQoKSk7CiApCiAgCi0JbGsgPSAw
OworCWxrID0gaGVhdnlMb2NrOwogCXRpbWVvdXQgPSAxOwogCWZvciAoOzspIHsKIAkJLyogR2V0
IHRoZSBjdXJyZW50IGxvY2sgYW5kIHJlcGxhY2UgaXQgd2l0aCBMT0NLSU5QUk9HUkVTUyB0byBp
bmRpY2F0ZQpAQCAtMTM2LDMzICsxMDcsMjYgQEAKIERCRyhTTE9XTE9DS1MsCiAgICAgCQkJZHBy
aW50ZigiICAgIGdvdCBjYWNoZWQgbG9ja1xuIik7CiApCisJCQkvKiBYWFggaXMgaXQgcG9zc2li
bGUgdG8gbGVhayBhIGhlYXZ5TG9jayBoZXJlID8gKi8KKwogCQkJbGsgPSAoaUxvY2sqKSgoKHVp
bnRwKW9sZCkgJiAodWludHApLTIpOwogCQl9CiAJCWVsc2UgewogCQkJaWYgKGxrID09IDApIHsK
LQkJCQkvKiBDcmVhdGUgYSBoZWF2eSBsb2NrIG9iamVjdCBmb3Igb3RoZXJzIHRvIGZpbmQuICov
Ci0JCQkJZm9yIChpID0gMDsgaSA8IE5SX1NQRUNJQUxfTE9DS1M7IGkrKykgewotCQkJCQlpZiAo
c3BlY2lhbExvY2tzW2ldLmtleSA9PSBsa3ApIHsKLQkJCQkJCWxrID0gJnNwZWNpYWxMb2Nrc1tp
XS5sb2NrOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9CisJCQkJLyogUmVsZWFzZSB0aGUg
bG9jayBiZWZvcmUgd2UgZ28gaW50byBtYWxsb2MuCisJCQkJICogV2UgaGF2ZSB0byByZWNsYWlt
IHRoZSBsb2NrIGFmdGVyd2FyZHMgKGF0IGJlZ2lubmluZworCQkJCSAqIG9mIGxvb3ApCisJCQkJ
ICovCisJCQkJKmxrcCA9IG9sZDsKKwkJCQlsayA9IChpTG9jayopZ2NfbWFsbG9jKHNpemVvZihp
TG9jayksIEdDX0FMTE9DX0xPQ0spOworCQkJCS8qIGlmIHRoYXQgZmFpbHMgd2UncmUgaW4gdHJv
dWJsZSEhICovCisJCQkJYXNzZXJ0KGxrICE9IDApOworCQkJCWNvbnRpbnVlOworCQkJfQogREJH
KFNMT1dMT0NLUywKLQkJCQlkcHJpbnRmKCIgICAgZ290ICVzIGxvY2tcbiIsCi0JCQkJCShsayA9
PSAwKSA/ICJuZXciIDogInNwZWNpYWwiKTsKKwkJCWRwcmludGYoIiAgICBnb3QgJXMgbG9ja1xu
IiwKKwkJCQkobGsgIT0gaGVhdnlMb2NrKSA/ICJuZXciIDogInNwZWNpYWwiKTsKICkKLQkJCQlp
ZiAobGsgPT0gMCkgewotCQkJCQkvKiBSZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSB3ZSBnbyBpbnRv
IG1hbGxvYy4KLQkJCQkJICogV2UgaGF2ZSB0byByZWNsYWltIHRoZSBsb2NrIGFmdGVyd2FyZHMg
KGF0IGJlZ2lubmluZwotCQkJCQkgKiBvZiBsb29wKQotCQkJCQkgKi8KLQkJCQkJKmxrcCA9IG9s
ZDsKLQkJCQkJbGsgPSAoaUxvY2sqKWptYWxsb2Moc2l6ZW9mKGlMb2NrKSk7Ci0JCQkJCS8qIGlm
IHRoYXQgZmFpbHMgd2UncmUgaW4gdHJvdWJsZSEhICovCi0JCQkJCWFzc2VydChsayAhPSAwKTsK
LQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQogCQkJbGstPmhvbGRlciA9ICh2b2lkKilvbGQ7
CiAJCQlsay0+bXV4ID0gMDsKIAkJCWxrLT5jdiA9IDA7CkBAIC0xOTksNyArMTYzLDcgQEAKICAq
IElmIHdlIGNhbid0IGxvY2sgaXQgd2Ugc3VzcGVuZCB1bnRpbCB3ZSBjYW4uCiAgKi8KIHN0YXRp
YyB2b2lkCi1zbG93TG9ja011dGV4KGlMb2NrKiogbGtwLCB2b2lkKiB3aGVyZSkKK3Nsb3dMb2Nr
TXV0ZXgoaUxvY2sqKiBsa3AsIHZvaWQqIHdoZXJlLCBpTG9jayAqaGVhdnlMb2NrKQogewogCWlM
b2NrKiBsazsKIAlIamF2YV9sYW5nX1RocmVhZCogdGlkOwpAQCAtMjExLDcgKzE3NSw3IEBACiAJ
anRocmVhZF9kaXNhYmxlX3N0b3AoKTsgLyogcHJvdGVjdCB0aGUgaGVhdnkgbG9jaywgYW5kIGl0
cyBxdWV1ZXMgKi8KIAogCWZvciAoOzspIHsKLQkJbGsgPSBnZXRIZWF2eUxvY2sobGtwKTsKKwkJ
bGsgPSBnZXRIZWF2eUxvY2sobGtwLCBoZWF2eUxvY2spOwogCiAJCS8qIElmIEkgaG9sZCB0aGUg
aGVhdnkgbG9jayB0aGVuIGp1c3Qga2VlcCBvbiBnb2luZyAqLwogCQlpZiAoanRocmVhZF9vbl9j
dXJyZW50X3N0YWNrKGxrLT5ob2xkZXIpKSB7CkBAIC0yNDMsMTggKzIwNywxNyBAQAogICogYSBm
YXN0IHRoaW4gbG9jay4KICAqLwogc3RhdGljIHZvaWQKLXNsb3dVbmxvY2tNdXRleChpTG9jayoq
IGxrcCwgdm9pZCogd2hlcmUpCitzbG93VW5sb2NrTXV0ZXgoaUxvY2sqKiBsa3AsIHZvaWQqIHdo
ZXJlLCBpTG9jayAqaGVhdnlMb2NrKQogewogCWlMb2NrKiBsazsKIAlIamF2YV9sYW5nX1RocmVh
ZCogdGlkOwotCWludCBpOwogCiBEQkcoU0xPV0xPQ0tTLAogICAgIAlkcHJpbnRmKCJzbG93VW5s
b2NrTXV0ZXgoKipsa3A9JXAsIHdoZXJlPSVwLCB0aD0lcClcbiIsCiAJICAgICAgIGxrcCwgd2hl
cmUsIGp0aHJlYWRfY3VycmVudCgpKTsKICkKIAlqdGhyZWFkX2Rpc2FibGVfc3RvcCgpOyAvKiBw
cm90ZWN0IHRoZSBoZWF2eSBsb2NrLCBhbmQgaXRzIHF1ZXVlcyAqLwotCWxrID0gZ2V0SGVhdnlM
b2NrKGxrcCk7CisJbGsgPSBnZXRIZWF2eUxvY2sobGtwLCBoZWF2eUxvY2spOwogCiAJLyogT25s
eSB0aGUgbG9jayBob2xkZXIgY2FuIGJlIGRvaW5nIGFuIHVubG9jayAqLwogCWlmICghanRocmVh
ZF9vbl9jdXJyZW50X3N0YWNrKGxrLT5ob2xkZXIpKSB7CkBAIC0yNjQsNyArMjI3LDExIEBACiAJ
fQogCiAJLyogSWYgaG9sZGVyIGlzbid0IHdoZXJlIHdlIGFyZSBub3cgdGhlbiB0aGlzIGlzbid0
IHRoZSBmaW5hbCB1bmxvY2sgKi8KKyNpZiBkZWZpbmVkKFNUQUNLX0dST1dTX1VQKQorCWlmIChs
ay0+aG9sZGVyIDwgd2hlcmUpIHsKKyNlbHNlCiAJaWYgKGxrLT5ob2xkZXIgPiB3aGVyZSkgewor
I2VuZGlmCiAJCXB1dEhlYXZ5TG9jayhsa3AsIGxrKTsKIAkJanRocmVhZF9lbmFibGVfc3RvcCgp
OwogCQlyZXR1cm47CkBAIC0yODcsMTQgKzI1NCw4IEBACiAJCXB1dEhlYXZ5TG9jayhsa3AsIGxr
KTsKIAl9CiAJZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBOUl9TUEVDSUFMX0xPQ0tTOyBpKysp
IHsKLQkJCWlmIChzcGVjaWFsTG9ja3NbaV0ua2V5ID09IGxrcCkgewotCQkJCWxrID0gMDsKLQkJ
CQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAobGsgIT0gMCkgewotCQkJamZyZWUobGspOworCQlp
ZiAobGsgIT0gaGVhdnlMb2NrKSB7CisJCQlnY19mcmVlKGxrKTsKIAkJfQogCQlwdXRIZWF2eUxv
Y2sobGtwLCBMT0NLRlJFRSk7CiAJfQpAQCAtMzAyLDcgKzI2Myw3IEBACiB9CiAKIHZvaWQKLV9z
bG93VW5sb2NrTXV0ZXhJZkhlbGQoaUxvY2sqKiBsa3AsIHZvaWQqIHdoZXJlKQorX3Nsb3dVbmxv
Y2tNdXRleElmSGVsZChpTG9jayoqIGxrcCwgdm9pZCogd2hlcmUsIGlMb2NrICpoZWF2eUxvY2sp
CiB7CiAJaUxvY2sqIGxrOwogCXZvaWQqIGhvbGRlcjsKQEAgLTMxMSw1MCArMjcyLDMzIEBACiAg
ICAgCWRwcmludGYoInNsb3dVbmxvY2tNdXRleElmSGVsZCgqKmxrcD0lcCwgd2hlcmU9JXAsIHRo
PSVwKVxuIiwKIAkgICAgICAgbGtwLCB3aGVyZSwganRocmVhZF9jdXJyZW50KCkpOwogKQorCWhv
bGRlciA9ICpsa3A7CiAKLQlsayA9IGdldEhlYXZ5TG9jayhsa3ApOwotCWhvbGRlciA9IGxrLT5o
b2xkZXI7Ci0JcHV0SGVhdnlMb2NrKGxrcCwgbGspOwotCi0JaWYgKGp0aHJlYWRfb25fY3VycmVu
dF9zdGFjayhob2xkZXIpKSB7Ci0JCXNsb3dVbmxvY2tNdXRleChsa3AsIHdoZXJlKTsKKwkvKiBu
b3RoaW5nIHRvIGRvIGlmIHRoZSBsb2NrIGlzIGZyZWUgKi8KKwlpZiAoaG9sZGVyID09IExPQ0tG
UkVFKSB7CisJCXJldHVybjsKIAl9Ci19Ci0KLXZvaWQqCi1fcmVsZWFzZUxvY2soaUxvY2sqKiBs
a3ApCi17Ci0JaUxvY2sqIGxrOwotCXZvaWQqIGhvbGRlcjsKLQotREJHKFNMT1dMT0NLUywKLSAg
ICAJZHByaW50ZigiX3JlbGVhc2VMb2NrKCoqbGtwPSVwLCB0aD0lcClcbiIsCi0JICAgICAgIGxr
cCwganRocmVhZF9jdXJyZW50KCkpOwotKQogCi0JbGsgPSBnZXRIZWF2eUxvY2sobGtwKTsKLQlo
b2xkZXIgPSBsay0+aG9sZGVyOwotCi0JLyogSSBtdXN0IGJlIGhvbGRpbmcgdGhlIGRhbW4gdGhp
bmcgKi8KLQlpZiAoIWp0aHJlYWRfb25fY3VycmVudF9zdGFjayhob2xkZXIpKSB7Ci0JCXB1dEhl
YXZ5TG9jayhsa3AsIGhvbGRlcik7Ci0JCXRocm93RXhjZXB0aW9uKElsbGVnYWxNb25pdG9yU3Rh
dGVFeGNlcHRpb24pOworCS8qIGlmIGl0J3MgYSB0aGluIGxvY2sgYW5kIHRoaXMgdGhyZWFkIG93
bnMgaXQsCisJICogdHJ5IHRvIGZyZWUgaXQgdGhlIGVhc3kgd2F5CisJICovCisJaWYgKGp0aHJl
YWRfb25fY3VycmVudF9zdGFjayhob2xkZXIpICYmCisJICAgIENPTVBBUkVfQU5EX0VYQ0hBTkdF
KGxrcCwgaG9sZGVyLCBMT0NLRlJFRSkpIHsKKwkJcmV0dXJuOwogCX0KIAorCS8qIG9rLCBpdCBp
cyBhIGhlYXZ5IGxvY2sgKi8KKwlsayA9IGdldEhlYXZ5TG9jayhsa3AsIGhlYXZ5TG9jayk7CisJ
aG9sZGVyID0gbGstPmhvbGRlcjsKIAlwdXRIZWF2eUxvY2sobGtwLCBsayk7Ci0Jc2xvd1VubG9j
a011dGV4KGxrcCwgaG9sZGVyKTsKLQotCXJldHVybiAoaG9sZGVyKTsKLX0KIAotdm9pZAotX2Fj
cXVpcmVMb2NrKGlMb2NrKiogbGtwLCB2b2lkKiBob2xkZXIpCi17Ci0Jc2xvd0xvY2tNdXRleChs
a3AsIGhvbGRlcik7CisJaWYgKGp0aHJlYWRfb25fY3VycmVudF9zdGFjayhob2xkZXIpKSB7CisJ
CXNsb3dVbmxvY2tNdXRleChsa3AsIHdoZXJlLCBoZWF2eUxvY2spOworCX0KIH0KIAogamJvb2xl
YW4KLV93YWl0Q29uZChpTG9jayoqIGxrcCwgamxvbmcgdGltZW91dCkKK193YWl0Q29uZChpTG9j
ayoqIGxrcCwgamxvbmcgdGltZW91dCwgaUxvY2sgKmhlYXZ5TG9jaykKIHsKIAlpTG9jayogbGs7
CiAJdm9pZCogaG9sZGVyOwpAQCAtMzY3LDcgKzMxMSw3IEBACiAJICAgICAgIGxrcCwgKGxvbmcp
dGltZW91dCwganRocmVhZF9jdXJyZW50KCkpOwogKQogCi0JbGsgPSBnZXRIZWF2eUxvY2sobGtw
KTsKKwlsayA9IGdldEhlYXZ5TG9jayhsa3AsIGhlYXZ5TG9jayk7CiAJaG9sZGVyID0gbGstPmhv
bGRlcjsKIAogCS8qIEkgbXVzdCBiZSBob2xkaW5nIHRoZSBkYW1uIHRoaW5nICovCkBAIC0zODAs
MTIgKzMyNCwxMiBAQAogCXVuaGFuZCh0aWQpLT5uZXh0bGsgPSBsay0+Y3Y7CiAJbGstPmN2ID0g
dGlkOwogCXB1dEhlYXZ5TG9jayhsa3AsIGxrKTsKLQlzbG93VW5sb2NrTXV0ZXgobGtwLCBob2xk
ZXIpOworCXNsb3dVbmxvY2tNdXRleChsa3AsIGhvbGRlciwgaGVhdnlMb2NrKTsKIAlyID0ga3Nl
bUdldCgoS3NlbSopdW5oYW5kKHRpZCktPnNlbSwgdGltZW91dCk7CiAKIAkvKiBUaW1lb3V0ICov
CiAJaWYgKHIgPT0gZmFsc2UpIHsKLQkJbGsgPSBnZXRIZWF2eUxvY2sobGtwKTsKKwkJbGsgPSBn
ZXRIZWF2eUxvY2sobGtwLCBoZWF2eUxvY2spOwogCQkvKiBSZW1vdmUgbXlzZWxmIGZyb20gQ1Yg
b3IgTVVYIHF1ZXVlIC0gaWYgSSdtICogbm90IG9uIGVpdGhlcgogCQkgKiB0aGVuIEkgc2hvdWxk
IHdhaXQgb24gbXlzZWxmIHRvIHJlbW92ZSBhbnkgcGVuZGluZyBzaWduYWwuCiAJCSAqLwpAQCAt
NDEwLDEzICszNTQsMTMgQEAKIAkJcHV0SGVhdnlMb2NrKGxrcCwgbGspOwogCX0KIAotCXNsb3dM
b2NrTXV0ZXgobGtwLCBob2xkZXIpOworCXNsb3dMb2NrTXV0ZXgobGtwLCBob2xkZXIsIGhlYXZ5
TG9jayk7CiAKIAlyZXR1cm4gKHIpOwogfQogCiB2b2lkCi1fc2lnbmFsQ29uZChpTG9jayoqIGxr
cCkKK19zaWduYWxDb25kKGlMb2NrKiogbGtwLCBpTG9jayAqaGVhdnlMb2NrKQogewogCWlMb2Nr
KiBsazsKIAlIamF2YV9sYW5nX1RocmVhZCogdGlkOwpAQCAtNDI2LDcgKzM3MCw3IEBACiAJICAg
ICAgIGxrcCwganRocmVhZF9jdXJyZW50KCkpOwogKQogCi0JbGsgPSBnZXRIZWF2eUxvY2sobGtw
KTsKKwlsayA9IGdldEhlYXZ5TG9jayhsa3AsIGhlYXZ5TG9jayk7CiAKIAlpZiAoIWp0aHJlYWRf
b25fY3VycmVudF9zdGFjayhsay0+aG9sZGVyKSkgewogCQlwdXRIZWF2eUxvY2sobGtwLCBsayk7
CkBAIC00NDUsNyArMzg5LDcgQEAKIH0KIAogdm9pZAotX2Jyb2FkY2FzdENvbmQoaUxvY2sqKiBs
a3ApCitfYnJvYWRjYXN0Q29uZChpTG9jayoqIGxrcCwgaUxvY2sgKmhlYXZ5TG9jaykKIHsKIAlp
TG9jayogbGs7CiAJSGphdmFfbGFuZ19UaHJlYWQqIHRpZDsKQEAgLTQ1NSw3ICszOTksNyBAQAog
CSAgICAgICBsa3AsIGp0aHJlYWRfY3VycmVudCgpKTsKICkKIAotCWxrID0gZ2V0SGVhdnlMb2Nr
KGxrcCk7CisJbGsgPSBnZXRIZWF2eUxvY2sobGtwLCBoZWF2eUxvY2spOwogCiAJaWYgKCFqdGhy
ZWFkX29uX2N1cnJlbnRfc3RhY2sobGstPmhvbGRlcikpIHsKIAkJcHV0SGVhdnlMb2NrKGxrcCwg
bGspOwpAQCAtNDc5LDcgKzQyMyw3IEBACiAgKiBjb250ZW50aW9uIHRoZW4gZmFsbCBiYWNrIG9u
IGEgc2xvdyBsb2NrLgogICovCiB2b2lkCi1fbG9ja011dGV4KGlMb2NrKiogbGtwLCB2b2lkKiB3
aGVyZSkKK19sb2NrTXV0ZXgoaUxvY2sqKiBsa3AsIHZvaWQqIHdoZXJlLCBpTG9jayAqaGVhdnlM
b2NrKQogewogCXVpbnRwIHZhbDsKIApAQCAtNDg3LDEyICs0MzEsMTIgQEAKIAogCWlmICh2YWwg
PT0gMCkgewogCQlpZiAoIUNPTVBBUkVfQU5EX0VYQ0hBTkdFKGxrcCwgMCwgKGlMb2NrKil3aGVy
ZSkpIHsKLQkJCXNsb3dMb2NrTXV0ZXgobGtwLCB3aGVyZSk7CisJCQlzbG93TG9ja011dGV4KGxr
cCwgd2hlcmUsIGhlYXZ5TG9jayk7CiAJCX0KIAl9Ci0JZWxzZSBpZiAoKHZhbCAtICh1aW50cCl3
aGVyZSkgPiAoU1RBQ0tSRURaT05FIC8gMikpIHsKKwllbHNlIGlmICghanRocmVhZF9vbl9jdXJy
ZW50X3N0YWNrKCh2b2lkICopdmFsKSkgewogCQkvKiBYWFggY291bnQgdGhpcyBpbiB0aGUgc3Rh
dHMgYXJlYSAqLwotCQlzbG93TG9ja011dGV4KGxrcCwgd2hlcmUpOworCQlzbG93TG9ja011dGV4
KGxrcCwgd2hlcmUsIGhlYXZ5TG9jayk7CiAJfQogfQogCkBAIC01MDEsNDMgKzQ0NSw0MyBAQAog
ICogd2UndmUgZ290IGNvbnRlbnRpb24gc28gZmFsbCBiYWNrIG9uIGEgc2xvdyBsb2NrLgogICov
CiB2b2lkCi1fdW5sb2NrTXV0ZXgoaUxvY2sqKiBsa3AsIHZvaWQqIHdoZXJlKQorX3VubG9ja011
dGV4KGlMb2NrKiogbGtwLCB2b2lkKiB3aGVyZSwgaUxvY2sgKmhlYXZ5TG9jaykKIHsKIAl1aW50
cCB2YWw7CiAKIAl2YWwgPSAodWludHApKmxrcDsKIAogCWlmICgodmFsICYgMSkgIT0gMCkgewot
CQlzbG93VW5sb2NrTXV0ZXgobGtwLCB3aGVyZSk7CisJCXNsb3dVbmxvY2tNdXRleChsa3AsIHdo
ZXJlLCBoZWF2eUxvY2spOwogCX0KIAllbHNlIGlmICgodmFsID09ICh1aW50cCl3aGVyZSkgLyog
WFhYIHNxdWlycmVseSBiaXQgKi8KIAkJJiYgIUNPTVBBUkVfQU5EX0VYQ0hBTkdFKGxrcCwgKGlM
b2NrKil3aGVyZSwgTE9DS0ZSRUUpKSB7Ci0JCXNsb3dVbmxvY2tNdXRleChsa3AsIHdoZXJlKTsK
KwkJc2xvd1VubG9ja011dGV4KGxrcCwgd2hlcmUsIGhlYXZ5TG9jayk7CiAJfQogfQogCiB2b2lk
CiBsb2NrT2JqZWN0KEhqYXZhX2xhbmdfT2JqZWN0KiBvYmopCiB7Ci0JX2xvY2tNdXRleCgmb2Jq
LT5sb2NrLCAmb2JqKTsKKwlfbG9ja011dGV4KCZvYmotPmxvY2ssICZvYmosIDApOwogfQogCiB2
b2lkCiB1bmxvY2tPYmplY3QoSGphdmFfbGFuZ19PYmplY3QqIG9iaikKIHsKLQlfdW5sb2NrTXV0
ZXgoJm9iai0+bG9jaywgJm9iaik7CisJX3VubG9ja011dGV4KCZvYmotPmxvY2ssICZvYmosIDAp
OwogfQogCiB2b2lkCiBzbG93TG9ja09iamVjdChIamF2YV9sYW5nX09iamVjdCogb2JqLCB2b2lk
KiB3aGVyZSkKIHsKLQlzbG93TG9ja011dGV4KCZvYmotPmxvY2ssIHdoZXJlKTsKKwlzbG93TG9j
a011dGV4KCZvYmotPmxvY2ssIHdoZXJlLCAwKTsKIH0KIAogdm9pZAogc2xvd1VubG9ja09iamVj
dChIamF2YV9sYW5nX09iamVjdCogb2JqLCB2b2lkKiB3aGVyZSkKIHsKLQlzbG93VW5sb2NrTXV0
ZXgoJm9iai0+bG9jaywgd2hlcmUpOworCXNsb3dVbmxvY2tNdXRleCgmb2JqLT5sb2NrLCB3aGVy
ZSwgMCk7CiB9CiAKIHZvaWQKSW5kZXg6IGthZmZlL2thZmZldm0vbG9ja3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vbG9ja3MuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1yMS4yMSBsb2Nrcy5oCi0tLSBrYWZmZS9rYWZm
ZXZtL2xvY2tzLmgJMjQgT2N0IDIwMDAgMTI6NDY6MTQgLTAwMDAJMS4yMQorKysga2FmZmUva2Fm
ZmV2bS9sb2Nrcy5oCTEgSnVsIDIwMDMgMjA6MTQ6MDEgLTAwMDAKQEAgLTIyLDE4ICsyMiwxOCBA
QAogc3RydWN0IF9pTG9jazsKIAogI2RlZmluZQlMT0NLT0JKRUNUCQkJc3RydWN0IF9pTG9jayoq
Ci0jZGVmaW5lCWxvY2tNdXRleChPKQkJCShqdGhyZWFkX2Rpc2FibGVfc3RvcCgpLCBfbG9ja011
dGV4KCYoTyktPmxvY2ssICZpTG9ja1Jvb3QpKQotI2RlZmluZQl1bmxvY2tNdXRleChPKQkJCWRv
IHsgX3VubG9ja011dGV4KCYoTyktPmxvY2ssICZpTG9ja1Jvb3QpOyBqdGhyZWFkX2VuYWJsZV9z
dG9wKCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lCXdhaXRDb25kKE8sVCkJCQlfd2FpdENvbmQoJihP
KS0+bG9jaywgKFQpKQotI2RlZmluZQlzaWduYWxDb25kKE8pCQkJX3NpZ25hbENvbmQoJihPKS0+
bG9jaykKLSNkZWZpbmUJYnJvYWRjYXN0Q29uZChPKQkJX2Jyb2FkY2FzdENvbmQoJihPKS0+bG9j
aykKLSNkZWZpbmUJaG9sZE11dGV4KE8pCQkJX2hvbGRNdXRleCgmKE8pLT5sb2NrKQotCi0jZGVm
aW5lCWxvY2tTdGF0aWNNdXRleChUSElORykJCShqdGhyZWFkX2Rpc2FibGVfc3RvcCgpLCBfbG9j
a011dGV4KChUSElORyksICZpTG9ja1Jvb3QpKQotI2RlZmluZQl1bmxvY2tTdGF0aWNNdXRleChU
SElORykJZG8geyBfdW5sb2NrTXV0ZXgoKFRISU5HKSwgJmlMb2NrUm9vdCk7IGp0aHJlYWRfZW5h
YmxlX3N0b3AoKTsgfSB3aGlsZSgwKQotI2RlZmluZQl3YWl0U3RhdGljQ29uZChUSElORywgVElN
RSkJX3dhaXRDb25kKChUSElORyksIChUSU1FKSkKLSNkZWZpbmUJc2lnbmFsU3RhdGljQ29uZChU
SElORykJCV9zaWduYWxDb25kKChUSElORykpCi0jZGVmaW5lCWJyb2FkY2FzdFN0YXRpY0NvbmQo
VEhJTkcpCV9icm9hZGNhc3RDb25kKChUSElORykpCisjZGVmaW5lCWxvY2tNdXRleChPKQkJCShq
dGhyZWFkX2Rpc2FibGVfc3RvcCgpLCBfbG9ja011dGV4KCYoTyktPmxvY2ssICZpTG9ja1Jvb3Qs
IDApKQorI2RlZmluZQl1bmxvY2tNdXRleChPKQkJCWRvIHsgX3VubG9ja011dGV4KCYoTyktPmxv
Y2ssICZpTG9ja1Jvb3QsIDApOyBqdGhyZWFkX2VuYWJsZV9zdG9wKCk7IH0gd2hpbGUgKDApCisj
ZGVmaW5lCXdhaXRDb25kKE8sVCkJCQlfd2FpdENvbmQoJihPKS0+bG9jaywgKFQpLCAwKQorI2Rl
ZmluZQlzaWduYWxDb25kKE8pCQkJX3NpZ25hbENvbmQoJihPKS0+bG9jaywgMCkKKyNkZWZpbmUJ
YnJvYWRjYXN0Q29uZChPKQkJX2Jyb2FkY2FzdENvbmQoJihPKS0+bG9jaywgMCkKKyNkZWZpbmUJ
aG9sZE11dGV4KE8pCQkJX2hvbGRNdXRleCgmKE8pLT5sb2NrLCAwKQorCisjZGVmaW5lCWxvY2tT
dGF0aWNNdXRleChUSElORykJCShqdGhyZWFkX2Rpc2FibGVfc3RvcCgpLCBfbG9ja011dGV4KCYo
VEhJTkcpLT5sb2NrLCAmaUxvY2tSb290LCAmKFRISU5HKS0+aGVhdnlMb2NrKSkKKyNkZWZpbmUJ
dW5sb2NrU3RhdGljTXV0ZXgoVEhJTkcpCWRvIHsgX3VubG9ja011dGV4KCYoVEhJTkcpLT5sb2Nr
LCAmaUxvY2tSb290LCAmKFRISU5HKS0+aGVhdnlMb2NrKTsganRocmVhZF9lbmFibGVfc3RvcCgp
OyB9IHdoaWxlKDApCisjZGVmaW5lCXdhaXRTdGF0aWNDb25kKFRISU5HLCBUSU1FKQlfd2FpdENv
bmQoJihUSElORyktPmxvY2ssIChUSU1FKSwgJihUSElORyktPmhlYXZ5TG9jaykKKyNkZWZpbmUJ
c2lnbmFsU3RhdGljQ29uZChUSElORykJCV9zaWduYWxDb25kKCYoVEhJTkcpLT5sb2NrLCAmKFRI
SU5HKS0+aGVhdnlMb2NrKQorI2RlZmluZQlicm9hZGNhc3RTdGF0aWNDb25kKFRISU5HKQlfYnJv
YWRjYXN0Q29uZCgmKFRISU5HKS0+bG9jaywgJihUSElORyktPmhlYXZ5TG9jaykKIAogc3RydWN0
IEhqYXZhX2xhbmdfVGhyZWFkOwogc3RydWN0IEhqYXZhX2xhbmdfT2JqZWN0OwpAQCAtNTIsNiAr
NTIsMTEgQEAKIAlzdHJ1Y3QgSGphdmFfbGFuZ19UaHJlYWQqCWN2OwogfSBpTG9jazsKIAordHlw
ZWRlZiBzdHJ1Y3QgX2lTdGF0aWNMb2NrIHsKKwlpTG9jawkqbG9jazsKKwlpTG9jawloZWF2eUxv
Y2s7IAorfSBpU3RhdGljTG9jazsKKwogI2RlZmluZQlMT0NLSU5QUk9HUkVTUwkoKGlMb2NrKikt
MSkKICNkZWZpbmUJTE9DS0ZSRUUJKChpTG9jayopMCkKIApAQCAtNjUsMjggKzcwLDEzIEBACiBl
eHRlcm4gdm9pZCAJc2xvd0xvY2tPYmplY3Qoc3RydWN0IEhqYXZhX2xhbmdfT2JqZWN0Kiwgdm9p
ZCopOwogZXh0ZXJuIHZvaWQgCXNsb3dVbmxvY2tPYmplY3Qoc3RydWN0IEhqYXZhX2xhbmdfT2Jq
ZWN0Kiwgdm9pZCopOwogCi1leHRlcm4gdm9pZAlfbG9ja011dGV4KExPQ0tPQkpFQ1QsIHZvaWQq
KTsKLWV4dGVybiB2b2lkCV91bmxvY2tNdXRleChMT0NLT0JKRUNULCB2b2lkKik7Ci1leHRlcm4g
amJvb2xlYW4JX3dhaXRDb25kKExPQ0tPQkpFQ1QsIGpsb25nKTsKLWV4dGVybiB2b2lkCV9zaWdu
YWxDb25kKExPQ0tPQkpFQ1QpOwotZXh0ZXJuIHZvaWQJX2Jyb2FkY2FzdENvbmQoTE9DS09CSkVD
VCk7Ci1leHRlcm4gdm9pZAlfc2xvd1VubG9ja011dGV4SWZIZWxkKExPQ0tPQkpFQ1QsIHZvaWQq
KTsKLWV4dGVybiB2b2lkKiAJX3JlbGVhc2VMb2NrKGlMb2NrKiopOwotZXh0ZXJuIHZvaWQgCV9h
Y3F1aXJlTG9jayhpTG9jayoqLCB2b2lkKik7CitleHRlcm4gdm9pZAlfbG9ja011dGV4KExPQ0tP
QkpFQ1QsIHZvaWQqLCBpTG9jayAqaGVhdnlMb2NrKTsKK2V4dGVybiB2b2lkCV91bmxvY2tNdXRl
eChMT0NLT0JKRUNULCB2b2lkKiwgaUxvY2sgKmhlYXZ5TG9jayk7CitleHRlcm4gamJvb2xlYW4J
X3dhaXRDb25kKExPQ0tPQkpFQ1QsIGpsb25nLCBpTG9jayAqaGVhdnlMb2NrKTsKK2V4dGVybiB2
b2lkCV9zaWduYWxDb25kKExPQ0tPQkpFQ1QsIGlMb2NrICpoZWF2eUxvY2spOworZXh0ZXJuIHZv
aWQJX2Jyb2FkY2FzdENvbmQoTE9DS09CSkVDVCwgaUxvY2sgKmhlYXZ5TG9jayk7CitleHRlcm4g
dm9pZAlfc2xvd1VubG9ja011dGV4SWZIZWxkKExPQ0tPQkpFQ1QsIHZvaWQqLCBpTG9jayAqaGVh
dnlMb2NrKTsKIAogZXh0ZXJuIHZvaWQJZHVtcExvY2tzKHZvaWQpOwotCi0vKgotICogVW5ibG9j
ayBhbiBvYmplY3QgYW5kIGNhbGwgYSBmdW5jdGlvbi4gV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJu
cyByZWNsYWltCi0gKiB0aGUgb2JqZWN0LgotICovCi0jZGVmaW5lCVVOQkxPQ0tfRVhFQ1VURShP
QkosIEZVTkMpIHsgXAotCQl2b2lkKiBzdCA9IF9yZWxlYXNlTG9jaygmKChIamF2YV9sYW5nX09i
amVjdCopKE9CSikpLT5sb2NrKTsgXAotCQlGVU5DOyBcCi0JCV9hY3F1aXJlTG9jaygmKChIamF2
YV9sYW5nX09iamVjdCopKE9CSikpLT5sb2NrLCBzdCk7IFwKLQl9Ci0KLWV4dGVybiBzdHJ1Y3Qg
X2lMb2NrKiBzdHJpbmdMb2NrOwotZXh0ZXJuIHN0cnVjdCBfaUxvY2sqIHV0ZjhMb2NrOwogCiAj
ZW5kaWYKSW5kZXg6IGthZmZlL2thZmZldm0vaml0My9tYWNoaW5lLmMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9rYWZmZXZtL2ppdDMvbWFjaGluZS5jLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXIxLjM2IG1hY2hpbmUuYwotLS0ga2FmZmUv
a2FmZmV2bS9qaXQzL21hY2hpbmUuYwkyOCBKdW4gMjAwMyAxMDoyOTo0MCAtMDAwMAkxLjM2Cisr
KyBrYWZmZS9rYWZmZXZtL2ppdDMvbWFjaGluZS5jCTEgSnVsIDIwMDMgMjA6MTQ6MDEgLTAwMDAK
QEAgLTk4LDcgKzk4LDcgQEAKIHN0YXRpYyBpbnQgY29kZV9nZW5lcmF0ZWQ7CiBzdGF0aWMgaW50
IGJ5dGVjb2RlX3Byb2Nlc3NlZDsKIHN0YXRpYyBpbnQgY29kZXBlcmJ5dGVjb2RlOwotaUxvY2sg
KnRyYW5zbGF0b3Jsb2NrOworaVN0YXRpY0xvY2sJdHJhbnNsYXRvcmxvY2s7CiAKIHN0cnVjdCB7
CiAJaW50IHRpbWU7CkBAIC00OTQsNiArNDk0LDggQEAKIAl1aW50MzIgaTsKIAlib29sIHJlczsK
IAlqZXhjZXB0aW9uRW50cnkqIGU7CisJdm9pZCAqdHJhbXA7CisKICNpZiBkZWZpbmVkKEtBRkZF
X1hQUk9GSUxFUikgfHwgZGVmaW5lZChLQUZGRV9YREVCVUdHSU5HKQogCXN0cnVjdCBtYW5nbGVk
X21ldGhvZCAqbW0gPSAwOwogI2VuZGlmCkBAIC01MTMsMTAgKzUxNSwxMCBAQAogCX0KIAkvL0dD
X1dSSVRFKG1ldGgsIGNvZGUtPm1lbSk7CiAKLQkvKiBmcmVlIHRoZSB0cmFtcG9saW5lIGJlZm9y
ZSBzZXR0aW5nIHRoZSBuYXRpdmUgY29kZSAqLwotCWdjX2ZyZWUgKE1FVEhPRF9OQVRJVkVDT0RF
KG1ldGgpKTsKLQkKKwl0cmFtcCA9IE1FVEhPRF9OQVRJVkVDT0RFKG1ldGgpOworCiAJU0VUX01F
VEhPRF9KSVRDT0RFKG1ldGgsIGNvZGUtPmNvZGUpOworCiAJaWYoIG1ldGgtPmMuYmNvZGUuY29k
ZSApCiAJCWdjX2ZyZWUobWV0aC0+Yy5iY29kZS5jb2RlKTsKIAltZXRoLT5jLm5jb2RlLm5jb2Rl
X3N0YXJ0ID0gY29kZS0+bWVtOwpAQCAtNTY2LDYgKzU2OCw4IEBACiAjaWYgZGVmaW5lZChGTFVT
SF9EQ0FDSEUpCiAJRkxVU0hfRENBQ0hFKGNvZGUtPmNvZGUsICh2b2lkKikoKHVpbnRwKWNvZGUt
PmNvZGUgKyBjb2RlLT5jb2RlbGVuKSk7CiAjZW5kaWYKKworCWdjX2ZyZWUodHJhbXApOwogCiAJ
LyogVHJhbnNsYXRlIGV4Y2VwdGlvbiB0YWJsZSBhbmQgbWFrZSBpdCBhdmFpbGFibGUgKi8KIAlp
ZiAobWV0aC0+ZXhjZXB0aW9uX3RhYmxlICE9IDApIHsKSW5kZXg6IGthZmZlL2thZmZldm0vaml0
My9tYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9r
YWZmZXZtL2ppdDMvbWFjaGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXUg
LXIxLjE3IG1hY2hpbmUuaAotLS0ga2FmZmUva2FmZmV2bS9qaXQzL21hY2hpbmUuaAkyMyBKdW4g
MjAwMyAxNTowMTo1NyAtMDAwMAkxLjE3CisrKyBrYWZmZS9rYWZmZXZtL2ppdDMvbWFjaGluZS5o
CTEgSnVsIDIwMDMgMjA6MTQ6MDIgLTAwMDAKQEAgLTEzMyw3ICsxMzMsNyBAQAogfSBqaXRmbGFn
czsKIAogI2luY2x1ZGUgImxvY2tzLmgiCi1leHRlcm4gaUxvY2sqIHRyYW5zbGF0b3Jsb2NrOwor
ZXh0ZXJuIGlTdGF0aWNMb2NrCXRyYW5zbGF0b3Jsb2NrOwogCiAjZGVmaW5lCWVudGVyVHJhbnNs
YXRvcigpCWxvY2tTdGF0aWNNdXRleCgmdHJhbnNsYXRvcmxvY2spCiAjZGVmaW5lCWxlYXZlVHJh
bnNsYXRvcigpCXVubG9ja1N0YXRpY011dGV4KCZ0cmFuc2xhdG9ybG9jaykKSW5kZXg6IGthZmZl
L2thZmZldm0vc3lzdGVtcy91bml4LXB0aHJlYWRzL3RocmVhZC1pbXBsLmMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9rYWZmZS9rYWZmZS9rYWZmZS9rYWZmZXZtL3N5c3RlbXMvdW5peC1wdGhy
ZWFkcy90aHJlYWQtaW1wbC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXIx
LjExIHRocmVhZC1pbXBsLmMKLS0tIGthZmZlL2thZmZldm0vc3lzdGVtcy91bml4LXB0aHJlYWRz
L3RocmVhZC1pbXBsLmMJNCBKdW4gMjAwMyAxMDowNzoyMCAtMDAwMAkxLjExCisrKyBrYWZmZS9r
YWZmZXZtL3N5c3RlbXMvdW5peC1wdGhyZWFkcy90aHJlYWQtaW1wbC5jCTEgSnVsIDIwMDMgMjA6
MTQ6MDIgLTAwMDAKQEAgLTEyOCw3ICsxMjgsNyBAQAogcHRocmVhZF9rZXlfdAkJbnRLZXk7CiAK
IC8qIG91ciBsb2NrIHRvIHByb3RlY3QgbGlzdCBtYW5pcHVsYXRpb24vaXRlcmF0aW9uICovCi1z
dGF0aWMgaUxvY2sJCSp0TG9jazsKK3N0YXRpYyBpU3RhdGljTG9jawl0TG9jazsKIAogLyogYSBo
aW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHB0aHJlYWRfY3JlYXRlcyAod2l0aCBwZW5kaW5nIGV4
aXRzKSAqLwogc3RhdGljIHZvbGF0aWxlIGludAlwZW5kaW5nRXhpdHM7CkBAIC0yMDUsMTIgKzIw
NSwxMiBAQAogewogICBEQkcoSlRIUkVBRCwgewogCWp0aHJlYWRfdAljdXIgPSBqdGhyZWFkX2N1
cnJlbnQoKTsKLQl2b2lkCQkqbG9jayAgID0gdExvY2s7Ci0Jdm9pZAkJKmhvbGRlciA9IHRMb2Nr
LT5ob2xkZXI7Ci0Jdm9pZAkJKm11eCAgICA9IHRMb2NrLT5tdXg7Ci0JLy92b2lkCQkqbXV4TmF0
ID0gdExvY2stPm11eCA/IHVuaGFuZCh0TG9jay0+bXV4KS0+UHJpdmF0ZUluZm8gOiAwOwotCXZv
aWQJCSpjdiAgICAgPSB0TG9jay0+Y3Y7Ci0JLy92b2lkCQkqY3ZOYXQgID0gdExvY2stPmN2ID8g
dW5oYW5kKHRMb2NrLT5jdiktPlByaXZhdGVJbmZvIDogMDsKKwl2b2lkCQkqbG9jayAgID0gdExv
Y2subG9jazsKKwl2b2lkCQkqaG9sZGVyID0gdExvY2suaGVhdnlMb2NrLmhvbGRlcjsKKwl2b2lk
CQkqbXV4ICAgID0gdExvY2suaGVhdnlMb2NrLm11eDsKKwkvL3ZvaWQJCSptdXhOYXQgPSB0TG9j
ay5oZWF2eUxvY2subXV4ID8gdW5oYW5kKHRMb2NrLmhlYXZ5TG9jay5tdXgpLT5Qcml2YXRlSW5m
byA6IDA7CisJdm9pZAkJKmN2ICAgICA9IHRMb2NrLmhlYXZ5TG9jay5jdjsKKwkvL3ZvaWQJCSpj
dk5hdCAgPSB0TG9jay5oZWF2eUxvY2suY3YgPyB1bmhhbmQodExvY2suaGVhdnlMb2NrLmN2KS0+
UHJpdmF0ZUluZm8gOiAwOwogCWludAkJaUxvY2tSb290OwkKIAogCVRMT0NLKCBjdXIpOyAvKiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyB0
TG9jayAqLwpJbmRleDogbGlicmFyaWVzL2NsaWIvbmV0L0luZXRBZGRyZXNzSW1wbC5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMva2FmZmUva2FmZmUvbGlicmFyaWVzL2NsaWIvbmV0L0luZXRB
ZGRyZXNzSW1wbC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXIxLjE1IElu
ZXRBZGRyZXNzSW1wbC5jCi0tLSBsaWJyYXJpZXMvY2xpYi9uZXQvSW5ldEFkZHJlc3NJbXBsLmMJ
MTYgSnVuIDIwMDMgMDY6MDk6MzcgLTAwMDAJMS4xNQorKysgbGlicmFyaWVzL2NsaWIvbmV0L0lu
ZXRBZGRyZXNzSW1wbC5jCTEgSnVsIDIwMDMgMjA6MTQ6MDIgLTAwMDAKQEAgLTc3LDcgKzc3LDcg
QEAKIGphdmFfbmV0X0luZXRBZGRyZXNzSW1wbF9nZXRMb2NhbEhvc3ROYW1lKHZvaWQpCiB7CiAJ
c3RhdGljIGNoYXIgaG9zdG5hbWVbSE9TVE5NU1pdID0gImxvY2FsaG9zdCI7Ci0Jc3RhdGljIGlM
b2NrICpob3N0TG9jayA9IDA7CisJc3RhdGljIGlTdGF0aWNMb2NrCWhvc3RMb2NrOwogCQogCXN0
cnVjdCBIamF2YV9sYW5nX1N0cmluZyAqcmV0dmFsID0gMDsKIAlpbnQgaUxvY2tSb290OwpAQCAt
MTQwLDcgKzE0MCw3IEBACiAJcmV0dXJuKCByZXR2YWwgKTsKIH0KIAotc3RhdGljIGlMb2NrICpu
c0xvY2sgPSAwOworc3RhdGljIGlTdGF0aWNMb2NrCW5zTG9jazsKIAogLyoKICAqIENvbnZlcnQg
YSBob3N0bmFtZSB0byBhbiBhcnJheSBvZiBob3N0IGFkZHJlc3Nlcy4KSW5kZXg6IGNvbmZpZy9h
bHBoYS9vc2YvbWQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2NvbmZp
Zy9hbHBoYS9vc2YvbWQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXIxLjcg
bWQuYwotLS0gY29uZmlnL2FscGhhL29zZi9tZC5jCTE4IEp1biAyMDAxIDEwOjQwOjEwIC0wMDAw
CTEuNworKysgY29uZmlnL2FscGhhL29zZi9tZC5jCTEgSnVsIDIwMDMgMjA6MTQ6MDIgLTAwMDAK
QEAgLTgzLDcgKzgzLDcgQEAKICNpbmNsdWRlICJsb2Nrcy5oIgogCiAvKiBsaWJleGMgaXMgbm90
IHRocmVhZCBzYWZlIDotKCAqLwotc3RhdGljIGlMb2NrICpleGNMb2NrOworc3RhdGljIGlTdGF0
aWNMb2NrIGV4Y0xvY2s7CiAKIHZvaWQgX19hbHBoYV9vc2ZfZmlyc3RGcmFtZSAoZXhjZXB0aW9u
RnJhbWUgKmZyYW1lKQogewpJbmRleDoga2FmZmUva2FmZmV2bS9tZW0vZ2MtaW5jcmVtZW50YWwu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL2thZmZlL2thZmZlL2thZmZlL2thZmZldm0vbWVt
L2djLWluY3JlbWVudGFsLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjMKZGlmZiAtdSAtcjEu
NjMgZ2MtaW5jcmVtZW50YWwuYwotLS0ga2FmZmUva2FmZmV2bS9tZW0vZ2MtaW5jcmVtZW50YWwu
YwkyMCBKdW4gMjAwMyAxMzowMTowOCAtMDAwMAkxLjYzCisrKyBrYWZmZS9rYWZmZXZtL21lbS9n
Yy1pbmNyZW1lbnRhbC5jCTEgSnVsIDIwMDMgMjA6MTQ6MDMgLTAwMDAKQEAgLTk5LDkgKzk5LDkg
QEAKICAgICAgICAgZ2NTdGF0cy5tYXJrZWRtZW0gKz0gc2l6ZTsKIH0gCiAKLWlMb2NrKiBnY21h
bjsKLWlMb2NrKiBmaW5tYW47Ci1pTG9jayogZ2NfbG9jazsJCQkvKiBhbGxvY2F0b3IgbXV0ZXgg
Ki8KK3N0YXRpYyBpU3RhdGljTG9jawlnY21hbjsKK3N0YXRpYyBpU3RhdGljTG9jawlmaW5tYW47
CitzdGF0aWMgaVN0YXRpY0xvY2sJZ2NfbG9jazsJCQkvKiBhbGxvY2F0b3IgbXV0ZXggKi8KIAog
c3RhdGljIHZvaWQgZ2NGcmVlKENvbGxlY3RvciogZ2NpZiwgdm9pZCogbWVtKTsKIApJbmRleDog
a2FmZmUva2FmZmV2bS9tZW0vZ2MtbWVtLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9rYWZm
ZS9rYWZmZS9rYWZmZS9rYWZmZXZtL21lbS9nYy1tZW0uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40NApkaWZmIC11IC1yMS40NCBnYy1tZW0uYwotLS0ga2FmZmUva2FmZmV2bS9tZW0vZ2MtbWVt
LmMJMjAgSnVuIDIwMDMgMTM6MDE6MDggLTAwMDAJMS40NAorKysga2FmZmUva2FmZmV2bS9tZW0v
Z2MtbWVtLmMJMSBKdWwgMjAwMyAyMDoxNDowMyAtMDAwMApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPHN5cy9tbWFuLmg+CiAjZW5kaWYKIAotaUxvY2sqIGdjX2hlYXBfbG9jazsKK3N0YXRp
YyBpU3RhdGljTG9jawlnY19oZWFwX2xvY2s7CiAKICNpZiBkZWZpbmVkKEtBRkZFX1NUQVRTKQog
c3RhdGljIGNvdW50ZXIgZ2NwYWdlczsK
--Multipart_Tue__1_Jul_2003_22:34:47_+0200_09ec4198--