[ODE] Space additions for dRay

Russ Smith russ at q12.org
Tue Aug 20 23:16:01 2002


This is a multi-part message in MIME format.

--Multipart_Tue__20_Aug_2002_23:16:41_-0400_084075d0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


> Erwin-- did your space locking stuff ever get posted?  I'd very much
> like to look at this.

he sent it to me. i have not added it to the CVS yet, but the original
patches are attached to this email.

russ.

-- 
Russell Smith
http://www.q12.org

--Multipart_Tue__20_Aug_2002_23:16:41_-0400_084075d0
Content-Type: application/octet-stream;
 name="Include.patch"
Content-Disposition: attachment;
 filename="Include.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IGluY2x1ZGUvb2RlL3NwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qv
b2RlL2luY2x1ZGUvb2RlL3NwYWNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11
IC1yMS45IHNwYWNlLmgKLS0tIGluY2x1ZGUvb2RlL3NwYWNlLmgJMjAwMi8wNi8yNSAyMzo0Njox
NgkxLjkKKysrIGluY2x1ZGUvb2RlL3NwYWNlLmgJMjAwMi8wOC8wNiAwOTo1Mzo0MgpAQCAtNTAs
OCArNTAsMTIgQEAKIHZvaWQgZFNwYWNlQ29sbGlkZSAoZFNwYWNlSUQgc3BhY2UsIHZvaWQgKmRh
dGEsIGROZWFyQ2FsbGJhY2sgKmNhbGxiYWNrKTsKIGludCBkU3BhY2VRdWVyeSAoZFNwYWNlSUQs
IGRHZW9tSUQpOwogCi12b2lkIGRIYXNoU3BhY2VTZXRMZXZlbHMgKGRTcGFjZUlEIHNwYWNlLCBp
bnQgbWlubGV2ZWwsIGludCBtYXhsZXZlbCk7Cit2b2lkIGRTcGFjZUxvY2sgKGRTcGFjZUlEIHNw
YWNlKTsKK3ZvaWQgZFNwYWNlQ29sbGlkZUdlb20gKGRTcGFjZUlEIHNwYWNlLCBkeEdlb20qIGcs
IHZvaWQgKmRhdGEsIGROZWFyQ2FsbGJhY2sgKmNhbGxiYWNrKTsKK3ZvaWQgZFNwYWNlVW5sb2Nr
IChkU3BhY2VJRCBzcGFjZSk7CitpbnQgZFNwYWNlTG9ja2VkKGRTcGFjZUlEIHNwYWNlKTsKIAor
dm9pZCBkSGFzaFNwYWNlU2V0TGV2ZWxzIChkU3BhY2VJRCBzcGFjZSwgaW50IG1pbmxldmVsLCBp
bnQgbWF4bGV2ZWwpOwogCiAvKiBAQEAgTk9UIEZMRVhJQkxFIEVOT1VHSAogICoKSW5kZXg6IGlu
Y2x1ZGUvb2RlL2dlb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zzcm9vdC9vZGUvaW5jbHVk
ZS9vZGUvZ2VvbS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0CmRpZmYgLXUgLXIxLjI0IGdl
b20uaAotLS0gaW5jbHVkZS9vZGUvZ2VvbS5oCTIwMDIvMDgvMDYgMDY6MDI6NDMJMS4yNAorKysg
aW5jbHVkZS9vZGUvZ2VvbS5oCTIwMDIvMDgvMDYgMDk6NTM6NDIKQEAgLTkyLDYgKzkyLDEwIEBA
CiB2b2lkIGRHZW9tR2V0QUFCQiAoZEdlb21JRCwgZFJlYWwgYWFiYls2XSk7CiBkUmVhbCAqZEdl
b21HZXRTcGFjZUFBQkIgKGRHZW9tSUQpOwogCit2b2lkIGRHZW9tRW5hYmxlIChkR2VvbUlEKTsK
K3ZvaWQgZEdlb21EaXNhYmxlIChkR2VvbUlEKTsKK2ludCBkR2VvbUlzRW5hYmxlZCAoZEdlb21J
RCk7CisKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogZ2VvbWV0cnkgZ3JvdXAgZnVuY3Rpb25z
ICovCiAKCg==

--Multipart_Tue__20_Aug_2002_23:16:41_-0400_084075d0
Content-Type: application/octet-stream;
 name="Src.patch"
Content-Disposition: attachment;
 filename="Src.patch"
Content-Transfer-Encoding: base64

SW5kZXg6IG9kZS9zcmMvc3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L29k
ZS9vZGUvc3JjL3NwYWNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1y
MS4xOSBzcGFjZS5jcHAKLS0tIG9kZS9zcmMvc3BhY2UuY3BwCTIwMDIvMDYvMjUgMjM6NDY6MTkJ
MS4xOQorKysgb2RlL3NyYy9zcGFjZS5jcHAJMjAwMi8wOC8wNiAwOTo1NDozMwpAQCAtNzEsNiAr
NzEsMTEgQEAKICAgdmlydHVhbCB2b2lkIHJlbW92ZSAoZEdlb21JRCk9MDsKICAgdmlydHVhbCB2
b2lkIGNvbGxpZGUgKHZvaWQgKmRhdGEsIGROZWFyQ2FsbGJhY2sgKmNhbGxiYWNrKT0wOwogICB2
aXJ0dWFsIGludCBxdWVyeSAoZEdlb21JRCk9MDsKKworICB2aXJ0dWFsIHZvaWQgbG9jayhib29s
IG5ld3J1bGUpPTA7CisgIHZpcnR1YWwgdm9pZCBjb2xsaWRlZ2VvbSAoZHhHZW9tKiBnMSwgdm9p
ZCAqZGF0YSwgZE5lYXJDYWxsYmFjayAqY2FsbGJhY2spPTA7CisgIHZpcnR1YWwgdm9pZCB1bmxv
Y2soYm9vbCBuZXdydWxlKT0wOworICB2aXJ0dWFsIGludCBsb2NrZWQoKT0wOwogfTsKIAogI2Rl
ZmluZSBUWVBFX1NJTVBMRSAweGJhZApAQCAtMTE1LDExICsxMjAsMjAgQEAKIAogc3RydWN0IGR4
U2ltcGxlU3BhY2UgOiBwdWJsaWMgZHhTcGFjZSB7CiAgIGRHZW9tSUQgZmlyc3Q7CisKKyAgaW50
IHN0YXRlOwkvLyAwIGlzIG5vcm1hbCwgMSBpcyBsb2NrZWQKKyAgZEFycmF5PGRSZWFsPiBib3Vu
ZHM7CisgIAogICB2b2lkIGRlc3Ryb3koKTsKICAgdm9pZCBhZGQgKGRHZW9tSUQpOwogICB2b2lk
IHJlbW92ZSAoZEdlb21JRCk7CiAgIHZvaWQgY29sbGlkZSAodm9pZCAqZGF0YSwgZE5lYXJDYWxs
YmFjayAqY2FsbGJhY2spOwogICBpbnQgcXVlcnkgKGRHZW9tSUQpOworCisgIHZvaWQgbG9jayhi
b29sIG5ld3J1bGUpOworICB2b2lkIGNvbGxpZGVnZW9tIChkeEdlb20qIGcxLCB2b2lkICpkYXRh
LCBkTmVhckNhbGxiYWNrICpjYWxsYmFjayk7CisgIHZvaWQgdW5sb2NrKGJvb2wgbmV3cnVsZSk7
CisgIGludCBsb2NrZWQoKTsKIH07CiAKIApAQCAtMTI4LDYgKzE0Miw3IEBACiAgIGR4U2ltcGxl
U3BhY2UgKncgPSBuZXcgZHhTaW1wbGVTcGFjZTsKICAgdy0+dHlwZSA9IFRZUEVfU0lNUExFOwog
ICB3LT5maXJzdCA9IDA7CisgIHctPnN0YXRlID0gMDsKICAgcmV0dXJuIHc7CiB9CiAKQEAgLTE4
MSwzOCArMTk2LDExOSBAQAogdm9pZCBkeFNpbXBsZVNwYWNlOjpjb2xsaWRlICh2b2lkICpkYXRh
LCBkTmVhckNhbGxiYWNrICpjYWxsYmFjaykKIHsKICAgZEFBU1NFUlQgKHRoaXMgJiYgY2FsbGJh
Y2spOwotICBkeEdlb20gKmcxLCpnMjsKLSAgaW50IGksaixuOwogCi0gIC8vIGNvdW50IHRoZSBu
dW1iZXIgb2Ygb2JqZWN0cwotICBuPTA7Ci0gIGZvciAoZzE9Zmlyc3Q7IGcxOyBnMT1nMS0+c3Bh
Y2UubmV4dCkgbisrOworICBkeEdlb20gKmcxLCAqZzI7CisgIGludCBpLCBqOwogCi0gIC8vIGFs
bG9jYXRlIGFuZCBmaWxsIGJvdW5kcyBhcnJheQotICBkUmVhbCAqYm91bmRzID0gKGRSZWFsKikg
QUxMT0NBICg2ICogbiAqIHNpemVvZihkUmVhbCkpOworICBib29sIGxvY2tpbmcgPSBzdGF0ZSA9
PSAwOwkvLyBXZSBuZWVkIHRoaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorCisgIGlm
IChsb2NraW5nKXsKKyAgICBsb2NrKGZhbHNlKTsKKyAgfQorCisgIC8vIGludGVyc2VjdCBhbGwg
Ym91bmRpbmcgYm94ZXMKICAgaT0wOwogICBmb3IgKGcxPWZpcnN0OyBnMTsgZzE9ZzEtPnNwYWNl
Lm5leHQpIHsKLSAgICBnMS0+X2NsYXNzLT5hYWJiIChnMSxib3VuZHMgKyBpKTsKLSAgICBnMS0+
c3BhY2VfYWFiYiA9IGJvdW5kcyArIGk7Ci0gICAgaSArPSA2OworCSAgaWYgKCEoZzEtPmZsYWdz
ICYgZHhHZW9tRGlzYWJsZWQpKXsKKwkJICBqPWkrNjsKKwkJICBmb3IgKGcyPWcxLT5zcGFjZS5u
ZXh0OyBnMjsgZzI9ZzItPnNwYWNlLm5leHQpIHsKKwkJCSAgaWYgKCEoZzItPmZsYWdzICYgZHhH
ZW9tRGlzYWJsZWQpKXsKKwkJCQljb2xsaWRlQUFCQnMgKCZib3VuZHNbaV0sJmJvdW5kc1tqXSxn
MSxnMixkYXRhLGNhbGxiYWNrKTsKKwkJCSAgfQorCQkJICBqICs9IDY7CisJCSAgfQorCSAgfQor
CSAgaSArPSA2OwogICB9CiAKLSAgLy8gaW50ZXJzZWN0IGFsbCBib3VuZGluZyBib3hlcworICAK
KyAgaWYgKGxvY2tpbmcpeworICAgIHVubG9jayhmYWxzZSk7CisgIH0KK30KKworCit2b2lkIGR4
U2ltcGxlU3BhY2U6OmxvY2soYm9vbCBuZXdydWxlKQoreworICBpZiAobmV3cnVsZSl7CisgICAg
ZFVBU1NFUlQgKHN0YXRlID09IDAsInNwYWNlIGFscmVhZHkgbG9ja2VkIik7CisgIH0KKyAgZHhH
ZW9tICpnMTsKKyAgaW50IGk7CisKKyAgLy8gY291bnQgdGhlIG51bWJlciBvZiBvYmplY3RzCisg
IGludCBjb3VudCA9IDA7CisgIGZvciAoZzE9Zmlyc3Q7IGcxOyBnMT1nMS0+c3BhY2UubmV4dCkg
Y291bnQrKzsKKworICAvLyBhbGxvY2F0ZSBhbmQgZmlsbCBib3VuZHMgYXJyYXkKKyAgYm91bmRz
LnNldFNpemUoNiAqIGNvdW50ICogc2l6ZW9mKGRSZWFsKSk7CiAgIGk9MDsKICAgZm9yIChnMT1m
aXJzdDsgZzE7IGcxPWcxLT5zcGFjZS5uZXh0KSB7Ci0gICAgaj1pKzY7Ci0gICAgZm9yIChnMj1n
MS0+c3BhY2UubmV4dDsgZzI7IGcyPWcyLT5zcGFjZS5uZXh0KSB7Ci0gICAgICBjb2xsaWRlQUFC
QnMgKGJvdW5kcytpLGJvdW5kcytqLGcxLGcyLGRhdGEsY2FsbGJhY2spOwotICAgICAgaiArPSA2
OwotICAgIH0KKyAgICBnMS0+X2NsYXNzLT5hYWJiIChnMSwgJmJvdW5kc1tpXSk7CisgICAgZzEt
PnNwYWNlX2FhYmIgPSAmYm91bmRzW2ldOwogICAgIGkgKz0gNjsKICAgfQogCisgIGlmIChuZXdy
dWxlKXsKKyAgICBzdGF0ZSA9IDE7CisjaWZuZGVmIGROT0RFQlVHCisgICAgZEdlb21JRCBnID0g
Zmlyc3Q7CisgICAgd2hpbGUgKGcpeworICAgICAgaWYgKGctPmJvZHkpeworCSAgICBnLT5ib2R5
LT5sb2NrY291bnQrKzsKKwkgIH0KKwkgIGcgPSBnLT5zcGFjZS5uZXh0OworCX0KKyNlbmRpZgor
ICB9Cit9CisKK3ZvaWQgZHhTaW1wbGVTcGFjZTo6Y29sbGlkZWdlb20gKGR4R2VvbSAqZzEsIHZv
aWQgKmRhdGEsIGROZWFyQ2FsbGJhY2sgKmNhbGxiYWNrKQoreworICBkQUFTU0VSVCAoZzEgJiYg
dGhpcyAmJiBjYWxsYmFjayk7CisKKyAgZFVBU1NFUlQgKHN0YXRlID09IDEsInNwYWNlIG11c3Qg
YmUgbG9ja2VkIik7CisKKyAgZHhHZW9tICpnMjsKKyAgZm9yIChnMj1maXJzdDsgZzI7IGcyPWcy
LT5zcGFjZS5uZXh0KXsKKwlpZiAoZzEgIT0gZzIpeworCSAgaWYgKCEoZzItPmZsYWdzICYgZHhH
ZW9tRGlzYWJsZWQpKXsKKwkgICAgY29sbGlkZUFBQkJzIChnMS0+c3BhY2VfYWFiYixnMi0+c3Bh
Y2VfYWFiYixnMSxnMixkYXRhLGNhbGxiYWNrKTsKKwkgIH0KKwl9CisgIH0KK30KKwordm9pZCBk
eFNpbXBsZVNwYWNlOjp1bmxvY2soYm9vbCBuZXdydWxlKQoreworICBpZiAobmV3cnVsZSl7Cisg
ICAgZFVBU1NFUlQgKHN0YXRlID09IDEsInNwYWNlIG5vdCBsb2NrZWQiKTsKKyAgfQorCisgIGR4
R2VvbSAqZzE7CiAgIC8vIHJlc2V0IHRoZSBhYWJiIGZpZWxkcyBvZiB0aGUgZ2VvbXMgYmFjayB0
byAwCiAgIGZvciAoZzE9Zmlyc3Q7IGcxOyBnMT1nMS0+c3BhY2UubmV4dCkgZzEtPnNwYWNlX2Fh
YmIgPSAwOworCisgIGlmIChuZXdydWxlKXsKKyAgICBzdGF0ZSA9IDA7CisgIAorI2lmbmRlZiBk
Tk9ERUJVRworICAgIGRHZW9tSUQgZyA9IGZpcnN0OworICAgIHdoaWxlIChnKXsKKyAgICAgIGlm
IChnLT5ib2R5KXsKKwkgICAgZy0+Ym9keS0+bG9ja2NvdW50LS07CisJICB9CisJICBnID0gZy0+
c3BhY2UubmV4dDsKKwl9CisjZW5kaWYKKyAgfQogfQogCitpbnQgZHhTaW1wbGVTcGFjZTo6bG9j
a2VkKCl7CisJcmV0dXJuIHN0YXRlID09IDE7Cit9CiAKKwogLy8gQEBAIE5PVCBGTEVYSUJMRSBF
Tk9VR0gKIC8vCiAvL2ludCBkU3BhY2VDb2xsaWRlIChkU3BhY2VJRCBzcGFjZSwgZENvbnRhY3RH
ZW9tICoqY29udGFjdF9hcnJheSkKQEAgLTI2NiwyMiArMzYyLDQ1IEBACiAKIC8vIGN1cnJlbnRs
eSB0aGUgc3BhY2UgJ2NvbnRhaW5lcicgaXMganVzdCBhIGxpc3Qgb2YgdGhlIGdlb21zIGluIHRo
ZSBzcGFjZS4KIAorc3RydWN0IGR4QUFCQjsJLy8gRm9yd2FyZCBkZWNsYXJlCitzdHJ1Y3QgTm9k
ZTsKKwogc3RydWN0IGR4SGFzaFNwYWNlIDogcHVibGljIGR4U3BhY2UgewogICBkeEdlb20gKmZp
cnN0OwogICBpbnQgZ2xvYmFsX21pbmxldmVsOwkvLyBzbWFsbGVzdCBoYXNoIHRhYmxlIGxldmVs
IHRvIHB1dCBBQUJCcyBpbgogICBpbnQgZ2xvYmFsX21heGxldmVsOwkvLyBvYmplY3RzIHRoYXQg
bmVlZCBhIGxldmVsIGxhcmdlciB0aGFuIHRoaXMgd2lsbCBiZQogCQkJLy8gcHV0IGluIGEgImJp
ZyBvYmplY3RzIiBsaXN0IGluc3RlYWQgb2YgYSBoYXNoIHRhYmxlCisKKyAgZEFycmF5PGR4QUFC
Qj4gZmlyc3RfYWFiYjsJLy8gbGlzdCBvZiBBQUJCcyBpbiBoYXNoIHRhYmxlCisgIGRBcnJheTxk
eEFBQkI+IGJpZ19ib3hlczsKKyAgZEFycmF5PE5vZGU+IG5vZGVzOwkvLyBsaW5lYXIgbGlzdCBv
ZiBub2Rlcy4gb25seSB1c2VkIGZvciBzdG9yYWdlCisgIGRBcnJheTxOb2RlKj4gdGFibGU7Cisg
IGRBcnJheTxjaGFyPiB0ZXN0ZWQ7CisKKyAgaW50IHN6OworICBpbnQgdGVzdGVkX3Jvd3NpemU7
CisgIGludCBuOworICBpbnQgbnRvdGFsOworICBpbnQgbWF4bGV2ZWw7CisKKyAgaW50IHN0YXRl
OworCiAgIHZvaWQgZGVzdHJveSgpOwogICB2b2lkIGFkZCAoZEdlb21JRCk7CiAgIHZvaWQgcmVt
b3ZlIChkR2VvbUlEKTsKICAgdm9pZCBjb2xsaWRlICh2b2lkICpkYXRhLCBkTmVhckNhbGxiYWNr
ICpjYWxsYmFjayk7CiAgIGludCBxdWVyeSAoZEdlb21JRCk7CisKKyAgdm9pZCBsb2NrKGJvb2wg
bmV3cnVsZSk7CisgIHZvaWQgY29sbGlkZWdlb20gKGR4R2VvbSogZzEsIHZvaWQgKmRhdGEsIGRO
ZWFyQ2FsbGJhY2sgKmNhbGxiYWNrKTsKKyAgdm9pZCB1bmxvY2soYm9vbCBuZXdydWxlKTsKKyAg
aW50IGxvY2tlZCgpOwogfTsKIAogCiAvLyBhbiBheGlzIGFsaWduZWQgYm91bmRpbmcgYm94CiBz
dHJ1Y3QgZHhBQUJCIHsKLSAgZHhBQUJCICpuZXh0OwkJLy8gbmV4dCBpbiB0aGUgbGlzdCBvZiBh
bGwgQUFCQnMKKyAgLy9keEFBQkIgKm5leHQ7CQkvLyBuZXh0IGluIHRoZSBsaXN0IG9mIGFsbCBB
QUJCcwogICBkUmVhbCBib3VuZHNbNl07CS8vIG1pbngsIG1heHgsIG1pbnksIG1heHksIG1pbnos
IG1heHoKICAgaW50IGxldmVsOwkJLy8gdGhlIGxldmVsIHRoaXMgaXMgc3RvcmVkIGluIChjZWxs
IHNpemUgPSAyXmxldmVsKQogICBpbnQgZGJvdW5kc1s2XTsJLy8gQUFCQiBib3VuZHMsIGRpc2Ny
ZXRpemVkIHRvIGNlbGwgc2l6ZQpAQCAtMzQ2LDYgKzQ2NSw3IEBACiAgIHctPmZpcnN0ID0gMDsK
ICAgdy0+Z2xvYmFsX21pbmxldmVsID0gLTM7CiAgIHctPmdsb2JhbF9tYXhsZXZlbCA9IDEwOwor
ICB3LT5zdGF0ZSA9IDA7CiAgIHJldHVybiB3OwogfQogCkBAIC00MDgsMzUgKzUyOCwxNDEgQEAK
IAogdm9pZCBkeEhhc2hTcGFjZTo6Y29sbGlkZSAodm9pZCAqZGF0YSwgZE5lYXJDYWxsYmFjayAq
Y2FsbGJhY2spCiB7Ci0gIGRBQVNTRVJUKHRoaXMgJiYgY2FsbGJhY2spOworICBkQUFTU0VSVCAo
dGhpcyAmJiBjYWxsYmFjayk7CisKKyAgZHhBQUJCKiBhYWJiOworICBpbnQgaSwgYSwgYjsKKwor
ICBib29sIGxvY2tpbmcgPSBzdGF0ZSA9PSAwOwkvLyBXZSBuZWVkIHRoaXMgZm9yIGJhY2t3YXJk
cyBjb21wYXRpYmlsaXR5LgorCisgIGlmIChsb2NraW5nKXsKKyAgICBsb2NrKGZhbHNlKTsKKyAg
fQorCisgIC8vIG5vdyB0aGF0IGFsbCBBQUJCcyBhcmUgbG9hZGVkIGludG8gdGhlIGhhc2ggdGFi
bGUsIHdlIGRvIHRoZSBhY3R1YWwKKyAgLy8gY29sbGlzaW9uIGRldGVjdGlvbi4gZm9yIGFsbCBB
QUJCcywgY2hlY2sgZm9yIG90aGVyIEFBQkJzIGluIHRoZQorICAvLyBzYW1lIGNlbGxzIGZvciBj
b2xsaXNpb25zLCBhbmQgdGhlbiBjaGVjayBmb3Igb3RoZXIgQUFCQnMgaW4gYWxsCisgIC8vIGlu
dGVyc2VjdGluZyBoaWdoZXIgbGV2ZWwgY2VsbHMuCisKKyAgaW50IGRiWzZdOwkJCS8vIGRpc2Ny
ZXRlIGJvdW5kcyBhdCBjdXJyZW50IGxldmVsCisgIGZvciAoYSA9IDA7IGEgPCBmaXJzdF9hYWJi
LnNpemUoKTsgYSsrKSB7CisJYWFiYiA9ICZmaXJzdF9hYWJiW2FdOworCWlmIChhYWJiLT5nZW9t
LT5mbGFncyAmIGR4R2VvbURpc2FibGVkKXsKKwkgIGNvbnRpbnVlOworCX0KKyAgICAvLyB3ZSBh
cmUgc2VhcmNoaW5nIGZvciBjb2xsaXNpb25zIHdpdGggYWFiYgorICAgIGZvciAoaT0wOyBpPDY7
IGkrKykgZGJbaV0gPSBhYWJiLT5kYm91bmRzW2ldOworICAgIGZvciAoaW50IGxldmVsID0gYWFi
Yi0+bGV2ZWw7IGxldmVsIDw9IG1heGxldmVsOyBsZXZlbCsrKSB7CisgICAgICBmb3IgKGludCB4
aSA9IGRiWzBdOyB4aSA8PSBkYlsxXTsgeGkrKykgeworCWZvciAoaW50IHlpID0gZGJbMl07IHlp
IDw9IGRiWzNdOyB5aSsrKSB7CisJICBmb3IgKGludCB6aSA9IGRiWzRdOyB6aSA8PSBkYls1XTsg
emkrKykgeworCSAgICAvLyBnZXQgdGhlIGhhc2ggaW5kZXgKKwkgICAgdW5zaWduZWQgbG9uZyBo
aSA9IGdldFZpcnR1YWxBZGRyZXNzIChsZXZlbCx4aSx5aSx6aSkgJSBzejsKKwkgICAgLy8gc2Vh
cmNoIGFsbCBub2RlcyBhdCB0aGlzIGluZGV4CisJICAgIE5vZGUgKm5vZGU7CisJICAgIGZvciAo
bm9kZSA9IHRhYmxlW2hpXTsgbm9kZTsgbm9kZT1ub2RlLT5uZXh0KSB7CisJCSAgaWYgKG5vZGUt
PmFhYmItPmdlb20tPmZsYWdzICYgZHhHZW9tRGlzYWJsZWQpeworCQkJICBjb250aW51ZTsKKwkJ
ICB9CisJICAgICAgLy8gbm9kZSBwb2ludHMgdG8gYW4gQUFCQiB0aGF0IG1heSBpbnRlcnNlY3Qg
YWFiYgorCSAgICAgIGlmIChub2RlLT5hYWJiID09IGFhYmIpIGNvbnRpbnVlOworCSAgICAgIGlm
IChub2RlLT5hYWJiLT5sZXZlbCA9PSBsZXZlbCAmJgorCQkgIG5vZGUtPnggPT0geGkgJiYgbm9k
ZS0+eSA9PSB5aSAmJiBub2RlLT56ID09IHppKSB7CisJCS8vIHNlZSBpZiBhYWJiIGFuZCBub2Rl
LT5hYWJiIGhhdmUgYWxyZWFkeSBiZWVuIHRlc3RlZAorCQkvLyBhZ2FpbnN0IGVhY2ggb3RoZXIK
KwkJdW5zaWduZWQgY2hhciBtYXNrOworCQlpZiAoYWFiYi0+aW5kZXggPD0gbm9kZS0+YWFiYi0+
aW5kZXgpIHsKKwkJICBpID0gKGFhYmItPmluZGV4ICogdGVzdGVkX3Jvd3NpemUpKyhub2RlLT5h
YWJiLT5pbmRleCA+PiAzKTsKKwkJICBtYXNrID0gMSA8PCAobm9kZS0+YWFiYi0+aW5kZXggJiA3
KTsKKwkJfQorCQllbHNlIHsKKwkJICBpID0gKG5vZGUtPmFhYmItPmluZGV4ICogdGVzdGVkX3Jv
d3NpemUpKyhhYWJiLT5pbmRleCA+PiAzKTsKKwkJICBtYXNrID0gMSA8PCAoYWFiYi0+aW5kZXgg
JiA3KTsKKwkJfQorCQlkSUFTU0VSVCAoaSA+PSAwICYmIGkgPCAodGVzdGVkX3Jvd3NpemUqbikp
OworCQlpZiAoKHRlc3RlZFtpXSAmIG1hc2spPT0wKSB7CisJCSAgY29sbGlkZUFBQkJzIChhYWJi
LT5ib3VuZHMsbm9kZS0+YWFiYi0+Ym91bmRzLAorCQkJCWFhYmItPmdlb20sbm9kZS0+YWFiYi0+
Z2VvbSwKKwkJCQlkYXRhLGNhbGxiYWNrKTsKKwkJfQorCQl0ZXN0ZWRbaV0gfD0gbWFzazsKKwkg
ICAgICB9CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICAvLyBnZXQgdGhlIGRpc2Ny
ZXRlIGJvdW5kcyBmb3IgdGhlIG5leHQgbGV2ZWwgdXAKKyAgICAgIGZvciAoaT0wOyBpPDY7IGkr
KykgZGJbaV0gPj49IDE7CisgICAgfQorICB9CisKKyAgLy8gZXZlcnkgQUFCQiBpbiB0aGUgbm9y
bWFsIGxpc3QgbXVzdCBub3cgYmUgaW50ZXJzZWN0ZWQgYWdhaW5zdCBldmVyeQorICAvLyBBQUJC
IGluIHRoZSBiaWdfYm94ZXMgbGlzdC4gc28gbGV0J3MgaG9wZSB0aGVyZSBhcmUgbm90IHRvbyBt
YW55IG9iamVjdHMKKyAgLy8gaW4gdGhlIGJpZ19ib3hlcyBsaXN0LgorICBmb3IgKGEgPSAwOyBh
IDwgZmlyc3RfYWFiYi5zaXplKCk7IGErKykgeworCSAgaWYgKGZpcnN0X2FhYmJbYV0uZ2VvbS0+
ZmxhZ3MgJiBkeEdlb21EaXNhYmxlZCl7CisJCSAgY29udGludWU7CisJICB9CisgICAgZm9yIChi
ID0gMDsgYiA8IGJpZ19ib3hlcy5zaXplKCk7IGIrKykgeworCSAgaWYgKGJpZ19ib3hlc1tiXS5n
ZW9tLT5mbGFncyAmIGR4R2VvbURpc2FibGVkKXsKKwkJICBjb250aW51ZTsKKwkgIH0KKyAgICAg
IGNvbGxpZGVBQUJCcyAoZmlyc3RfYWFiYlthXS5ib3VuZHMsYmlnX2JveGVzW2JdLmJvdW5kcyxm
aXJzdF9hYWJiW2FdLmdlb20sYmlnX2JveGVzW2JdLmdlb20sCisJCSAgICBkYXRhLGNhbGxiYWNr
KTsKKyAgICB9CisgIH0KKworICAvLyBpbnRlcnNlY3RlZCBhbGwgQUFCQnMgaW4gdGhlIGJpZ19i
b3hlcyBsaXN0IHRvZ2V0aGVyCisgIGZvciAoYSA9IDA7IGEgPCBiaWdfYm94ZXMuc2l6ZSgpOyBh
KyspIHsKKwlpZiAoYmlnX2JveGVzW2FdLmdlb20tPmZsYWdzICYgZHhHZW9tRGlzYWJsZWQpewor
CSAgIGNvbnRpbnVlOworCX0KKyAgICBmb3IgKGIgPSBhICsgMTsgYiA8IGJpZ19ib3hlcy5zaXpl
KCk7IGIrKykgeworCSAgaWYgKGJpZ19ib3hlc1tiXS5nZW9tLT5mbGFncyAmIGR4R2VvbURpc2Fi
bGVkKXsKKwkJICBjb250aW51ZTsKKwkgIH0KKyAgICAgIGNvbGxpZGVBQUJCcyAoYmlnX2JveGVz
W2FdLmJvdW5kcyxiaWdfYm94ZXNbYl0uYm91bmRzLGJpZ19ib3hlc1thXS5nZW9tLGJpZ19ib3hl
c1tiXS5nZW9tLAorCQkgICAgZGF0YSxjYWxsYmFjayk7CisgICAgfQorICB9CisgIAorICBpZiAo
bG9ja2luZyl7CisgICAgdW5sb2NrKGZhbHNlKTsKKyAgfQorfQorCit2b2lkIGR4SGFzaFNwYWNl
Ojpsb2NrKGJvb2wgbmV3cnVsZSl7CisgIGRVQVNTRVJUIChzdGF0ZSA9PSAwLCJzcGFjZSBhbHJl
YWR5IGxvY2tlZCIpOworCiAgIGR4R2VvbSAqZ2VvbTsKICAgZHhBQUJCICphYWJiOwotICBpbnQg
aSxtYXhsZXZlbDsKLQorICBpbnQgaTsKICAgLy8gY3JlYXRlIGEgbGlzdCBvZiBheGlzIGFsaWdu
ZWQgYm91bmRpbmcgYm94ZXMgZm9yIGFsbCBnZW9tcy4gY291bnQgdGhlCiAgIC8vIG51bWJlciBv
ZiBBQUJCcyBhcyB3ZSBnby4gc2V0IHRoZSBsZXZlbCBmb3IgYWxsIEFBQkJzLiBwdXQgQUFCQnMg
bGFyZ2VyCiAgIC8vIHRoYW4gdGhlIHNwYWNlJ3MgZ2xvYmFsX21heGxldmVsIGluIHRoZSBiaWdf
Ym94ZXMgbGlzdCwgY2hlY2sgZXZlcnl0aGluZwogICAvLyBlbHNlIGFnYWluc3QgdGhhdCBsaXN0
IGF0IHRoZSBlbmQuIGZvciBBQUJCcyB0aGF0IGFyZSBub3QgdG9vIGJpZywKICAgLy8gcmVjb3Jk
IHRoZSBtYXhpbXVtIGxldmVsIHRoYXQgd2UgbmVlZC4KKworICBuID0gMDsJCQkvLyBudW1iZXIg
b2YgQUFCQnMgaW4gbWFpbiBsaXN0CisgIG50b3RhbCA9IDA7CQkvLyB0b3RhbCBudW1iZXIgb2Yg
QUFCQnMKIAotICBpbnQgbiA9IDA7CQkJLy8gbnVtYmVyIG9mIEFBQkJzIGluIG1haW4gbGlzdAot
ICBpbnQgbnRvdGFsID0gMDsJCS8vIHRvdGFsIG51bWJlciBvZiBBQUJCcwotICBkeEFBQkIgKmZp
cnN0X2FhYmIgPSAwOwkvLyBsaXN0IG9mIEFBQkJzIGluIGhhc2ggdGFibGUKLSAgZHhBQUJCICpi
aWdfYm94ZXMgPSAwOwkvLyBsaXN0IG9mIEFBQkJzIHRvbyBiaWcgZm9yIGhhc2ggdGFibGUKKyAg
Ly9maXJzdF9hYWJiID0gMDsJLy8gbGlzdCBvZiBBQUJCcyBpbiBoYXNoIHRhYmxlCisgIC8vYmln
X2JveGVzID0gMDsJLy8gbGlzdCBvZiBBQUJCcyB0b28gYmlnIGZvciBoYXNoIHRhYmxlCiAgIG1h
eGxldmVsID0gZ2xvYmFsX21pbmxldmVsIC0gMTsKICAgZm9yIChnZW9tID0gZmlyc3Q7IGdlb207
IGdlb209Z2VvbS0+c3BhY2UubmV4dCkgewogICAgIG50b3RhbCsrOwotICAgIGR4QUFCQiAqYWFi
YiA9IChkeEFBQkIqKSBBTExPQ0EgKHNpemVvZihkeEFBQkIpKTsKKworICAgIGR4QUFCQiogYWFi
YiA9IChkeEFBQkIqKUFMTE9DQShzaXplb2YoZHhBQUJCKSk7CS8vIHRlbXBvcmFyeQogICAgIGdl
b20tPl9jbGFzcy0+YWFiYiAoZ2VvbSxhYWJiLT5ib3VuZHMpOwotICAgIGdlb20tPnNwYWNlX2Fh
YmIgPSBhYWJiLT5ib3VuZHM7CiAgICAgYWFiYi0+Z2VvbSA9IGdlb207CiAgICAgLy8gY29tcHV0
ZSBsZXZlbCwgYnV0IHByZXZlbnQgY2VsbHMgZnJvbSBnZXR0aW5nIHRvbyBzbWFsbAogICAgIGlu
dCBsZXZlbCA9IGZpbmRMZXZlbCAoYWFiYi0+Ym91bmRzKTsKICAgICBpZiAobGV2ZWwgPCBnbG9i
YWxfbWlubGV2ZWwpIGxldmVsID0gZ2xvYmFsX21pbmxldmVsOwogICAgIGlmIChsZXZlbCA8PSBn
bG9iYWxfbWF4bGV2ZWwpIHsKICAgICAgIC8vIGFhYmIgZ29lcyBpbiBtYWluIGxpc3QKLSAgICAg
IGFhYmItPm5leHQgPSBmaXJzdF9hYWJiOwotICAgICAgZmlyc3RfYWFiYiA9IGFhYmI7CisJICBm
aXJzdF9hYWJiLnB1c2goKmFhYmIpOworCSAgYWFiYiA9ICZmaXJzdF9hYWJiW2ZpcnN0X2FhYmIu
c2l6ZSgpIC0gMV07CS8vIHJlcGxhY2VzIG9sZCBkYXRhCisKICAgICAgIGFhYmItPmxldmVsID0g
bGV2ZWw7CiAgICAgICBpZiAobGV2ZWwgPiBtYXhsZXZlbCkgbWF4bGV2ZWwgPSBsZXZlbDsKICAg
ICAgIC8vIGNlbGxzaXplID0gMl5sZXZlbApAQCAtNDQ2LDI1ICs2NzIsMzMgQEAKIAkJCSAgICAg
IGZsb29yIChhYWJiLT5ib3VuZHNbaV0vY2VsbHNpemUpOwogICAgICAgLy8gc2V0IEFBQkIgaW5k
ZXgKICAgICAgIGFhYmItPmluZGV4ID0gbjsKKwkgIGdlb20tPnNwYWNlX2FhYmIgPSBhYWJiLT5i
b3VuZHM7CiAgICAgICBuKys7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgLy8gYWFiYiBpcyB0
b28gYmlnLCBwdXQgaXQgaW4gdGhlIGJpZ19ib3hlcyBsaXN0LiB3ZSBkb24ndCBjYXJlIGFib3V0
CiAgICAgICAvLyBzZXR0aW5nIGxldmVsLCBkYm91bmRzLCBpbmRleCwgb3IgdGhlIG1heGxldmVs
Ci0gICAgICBhYWJiLT5uZXh0ID0gYmlnX2JveGVzOwotICAgICAgYmlnX2JveGVzID0gYWFiYjsK
KyAgICAgIGJpZ19ib3hlcy5wdXNoKCphYWJiKTsKICAgICB9CiAgIH0KIAorICBmb3IgKGkgPSAw
OyBpIDwgZmlyc3RfYWFiYi5zaXplKCk7IGkrKyl7CisJICBmaXJzdF9hYWJiW2ldLmdlb20tPnNw
YWNlX2FhYmIgPSBmaXJzdF9hYWJiW2ldLmJvdW5kczsKKyAgfQorCisgIGZvciAoaSA9IDA7IGkg
PCBiaWdfYm94ZXMuc2l6ZSgpOyBpKyspeworCSAgYmlnX2JveGVzW2ldLmdlb20tPnNwYWNlX2Fh
YmIgPSBiaWdfYm94ZXNbaV0uYm91bmRzOworICB9CisKICAgLy8gMCBvciAxIGJveGVzIGNhbid0
IGNvbGxpZGUgd2l0aCBhbnl0aGluZwogICBpZiAobnRvdGFsIDwgMikgcmV0dXJuOwogCiAgIC8v
IGZvciBgbicgb2JqZWN0cywgYW4gbipuIGFycmF5IG9mIGJpdHMgaXMgdXNlZCB0byByZWNvcmQg
aWYgdGhvc2Ugb2JqZWN0cwogICAvLyBoYXZlIGJlZW4gaW50ZXJzZWN0aW9uLXRlc3RlZCBhZ2Fp
bnN0IGVhY2ggb3RoZXIgeWV0LiB0aGlzIGFycmF5IGNhbgogICAvLyBncm93IGxhcmdlIHdpdGgg
aGlnaCBuLCBidXQgb2ggd2VsbC4uLgotICBpbnQgdGVzdGVkX3Jvd3NpemUgPSAobis3KSA+PiAz
OwkvLyBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIGZvciBuIGJpdHMKLSAgdW5zaWduZWQgY2hhciAq
dGVzdGVkID0gKHVuc2lnbmVkIGNoYXIgKikgYWxsb2NhIChuICogdGVzdGVkX3Jvd3NpemUpOwot
ICBtZW1zZXQgKHRlc3RlZCwwLG4gKiB0ZXN0ZWRfcm93c2l6ZSk7CisgIHRlc3RlZF9yb3dzaXpl
ID0gKG4rNykgPj4gMzsJLy8gbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCBmb3IgbiBiaXRzCisgIHRl
c3RlZC5zZXRTaXplKG4gKiB0ZXN0ZWRfcm93c2l6ZSk7CisgIG1lbXNldCAoJnRlc3RlZFswXSww
LG4gKiB0ZXN0ZWRfcm93c2l6ZSk7CiAKICAgLy8gY3JlYXRlIGEgaGFzaCB0YWJsZSB0byBzdG9y
ZSBhbGwgQUFCQnMuIGVhY2ggQUFCQiBtYXkgdGFrZSB1cCB0byA4IGNlbGxzLgogICAvLyB3ZSB1
c2UgY2hhaW5pbmcgdG8gcmVzb2x2ZSBjb2xsaXNpb25zLCBidXQgd2UgdXNlIGEgcmVsYXRpdmVs
eSBsYXJnZSB0YWJsZQpAQCAtNDc1LDE0ICs3MDksMTggQEAKICAgICBpZiAocHJpbWVbaV0gPj0g
KDgqbikpIGJyZWFrOwogICB9CiAgIGlmIChpID49IE5VTV9QUklNRVMpIGkgPSBOVU1fUFJJTUVT
LTE7CS8vIHByb2JhYmx5IHBvaW50bGVzcwotICBpbnQgc3ogPSBwcmltZVtpXTsKKyAgc3ogPSBw
cmltZVtpXTsKIAogICAvLyBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoYXNoIHRhYmxlIG5vZGUg
cG9pbnRlcnMKLSAgTm9kZSAqKnRhYmxlID0gKE5vZGUgKiopIEFMTE9DQSAoc2l6ZW9mKE5vZGUq
KSAqIHN6KTsKKyAgdGFibGUuc2V0U2l6ZShzeik7CiAgIGZvciAoaT0wOyBpPHN6OyBpKyspIHRh
YmxlW2ldID0gMDsKIAorICBub2Rlcy5zZXRTaXplKGZpcnN0X2FhYmIuc2l6ZSgpICogOCk7CS8v
IEFsbG9jYXRlIGVub3VnaCBtZW1vcnkKKyAgbm9kZXMuc2V0U2l6ZSgwKTsJLy8gU3RhcnQgYXQg
YmVnaW5uaW5nCisKICAgLy8gYWRkIGVhY2ggQUFCQiB0byB0aGUgaGFzaCB0YWJsZSAobWF5IG5l
ZWQgdG8gYWRkIGl0IHRvIHVwIHRvIDggY2VsbHMpCi0gIGZvciAoYWFiYj1maXJzdF9hYWJiOyBh
YWJiOyBhYWJiPWFhYmItPm5leHQpIHsKKyAgZm9yIChpbnQgYSA9IDA7IGEgPCBmaXJzdF9hYWJi
LnNpemUoKTsgYSsrKXsKKwlhYWJiID0gJmZpcnN0X2FhYmJbYV07CiAgICAgaW50ICpkYm91bmRz
ID0gYWFiYi0+ZGJvdW5kczsKICAgICBmb3IgKGludCB4aSA9IGRib3VuZHNbMF07IHhpIDw9IGRi
b3VuZHNbMV07IHhpKyspIHsKICAgICAgIGZvciAoaW50IHlpID0gZGJvdW5kc1syXTsgeWkgPD0g
ZGJvdW5kc1szXTsgeWkrKykgewpAQCAtNDkwLDkwICs3MjgsNzQgQEAKIAkgIC8vIGdldCB0aGUg
aGFzaCBpbmRleAogCSAgdW5zaWduZWQgbG9uZyBoaSA9IGdldFZpcnR1YWxBZGRyZXNzIChhYWJi
LT5sZXZlbCx4aSx5aSx6aSkgJSBzejsKIAkgIC8vIGFkZCBhIG5ldyBub2RlIHRvIHRoZSBoYXNo
IHRhYmxlCi0JICBOb2RlICpub2RlID0gKE5vZGUqKSBhbGxvY2EgKHNpemVvZiAoTm9kZSkpOwot
CSAgbm9kZS0+eCA9IHhpOwotCSAgbm9kZS0+eSA9IHlpOwotCSAgbm9kZS0+eiA9IHppOwotCSAg
bm9kZS0+YWFiYiA9IGFhYmI7Ci0JICBub2RlLT5uZXh0ID0gdGFibGVbaGldOwotCSAgdGFibGVb
aGldID0gbm9kZTsKKworCSAgTm9kZSBub2RlOworCSAgbm9kZS54ID0geGk7CisJICBub2RlLnkg
PSB5aTsKKwkgIG5vZGUueiA9IHppOworCSAgbm9kZS5hYWJiID0gYWFiYjsKKwkgIG5vZGUubmV4
dCA9IHRhYmxlW2hpXTsKKworCSAgbm9kZXMucHVzaChub2RlKTsKKwkgIHRhYmxlW2hpXSA9ICZu
b2Rlc1tub2Rlcy5zaXplKCkgLSAxXTsKIAl9CiAgICAgICB9CiAgICAgfQogICB9CiAKLSAgLy8g
bm93IHRoYXQgYWxsIEFBQkJzIGFyZSBsb2FkZWQgaW50byB0aGUgaGFzaCB0YWJsZSwgd2UgZG8g
dGhlIGFjdHVhbAotICAvLyBjb2xsaXNpb24gZGV0ZWN0aW9uLiBmb3IgYWxsIEFBQkJzLCBjaGVj
ayBmb3Igb3RoZXIgQUFCQnMgaW4gdGhlCi0gIC8vIHNhbWUgY2VsbHMgZm9yIGNvbGxpc2lvbnMs
IGFuZCB0aGVuIGNoZWNrIGZvciBvdGhlciBBQUJCcyBpbiBhbGwKLSAgLy8gaW50ZXJzZWN0aW5n
IGhpZ2hlciBsZXZlbCBjZWxscy4KKyAgc3RhdGUgPSAxOworfQogCi0gIGludCBkYls2XTsJCQkv
LyBkaXNjcmV0ZSBib3VuZHMgYXQgY3VycmVudCBsZXZlbAotICBmb3IgKGFhYmI9Zmlyc3RfYWFi
YjsgYWFiYjsgYWFiYj1hYWJiLT5uZXh0KSB7Ci0gICAgLy8gd2UgYXJlIHNlYXJjaGluZyBmb3Ig
Y29sbGlzaW9ucyB3aXRoIGFhYmIKLSAgICBmb3IgKGk9MDsgaTw2OyBpKyspIGRiW2ldID0gYWFi
Yi0+ZGJvdW5kc1tpXTsKLSAgICBmb3IgKGludCBsZXZlbCA9IGFhYmItPmxldmVsOyBsZXZlbCA8
PSBtYXhsZXZlbDsgbGV2ZWwrKykgewotICAgICAgZm9yIChpbnQgeGkgPSBkYlswXTsgeGkgPD0g
ZGJbMV07IHhpKyspIHsKLQlmb3IgKGludCB5aSA9IGRiWzJdOyB5aSA8PSBkYlszXTsgeWkrKykg
ewotCSAgZm9yIChpbnQgemkgPSBkYls0XTsgemkgPD0gZGJbNV07IHppKyspIHsKLQkgICAgLy8g
Z2V0IHRoZSBoYXNoIGluZGV4Ci0JICAgIHVuc2lnbmVkIGxvbmcgaGkgPSBnZXRWaXJ0dWFsQWRk
cmVzcyAobGV2ZWwseGkseWksemkpICUgc3o7Ci0JICAgIC8vIHNlYXJjaCBhbGwgbm9kZXMgYXQg
dGhpcyBpbmRleAotCSAgICBOb2RlICpub2RlOwotCSAgICBmb3IgKG5vZGUgPSB0YWJsZVtoaV07
IG5vZGU7IG5vZGU9bm9kZS0+bmV4dCkgewotCSAgICAgIC8vIG5vZGUgcG9pbnRzIHRvIGFuIEFB
QkIgdGhhdCBtYXkgaW50ZXJzZWN0IGFhYmIKLQkgICAgICBpZiAobm9kZS0+YWFiYiA9PSBhYWJi
KSBjb250aW51ZTsKLQkgICAgICBpZiAobm9kZS0+YWFiYi0+bGV2ZWwgPT0gbGV2ZWwgJiYKLQkJ
ICBub2RlLT54ID09IHhpICYmIG5vZGUtPnkgPT0geWkgJiYgbm9kZS0+eiA9PSB6aSkgewotCQkv
LyBzZWUgaWYgYWFiYiBhbmQgbm9kZS0+YWFiYiBoYXZlIGFscmVhZHkgYmVlbiB0ZXN0ZWQKLQkJ
Ly8gYWdhaW5zdCBlYWNoIG90aGVyCi0JCXVuc2lnbmVkIGNoYXIgbWFzazsKLQkJaWYgKGFhYmIt
PmluZGV4IDw9IG5vZGUtPmFhYmItPmluZGV4KSB7Ci0JCSAgaSA9IChhYWJiLT5pbmRleCAqIHRl
c3RlZF9yb3dzaXplKSsobm9kZS0+YWFiYi0+aW5kZXggPj4gMyk7Ci0JCSAgbWFzayA9IDEgPDwg
KG5vZGUtPmFhYmItPmluZGV4ICYgNyk7Cit2b2lkIGR4SGFzaFNwYWNlOjpjb2xsaWRlZ2VvbSAo
ZHhHZW9tKiBnMSwgdm9pZCAqZGF0YSwgZE5lYXJDYWxsYmFjayAqY2FsbGJhY2speworCWRBQVNT
RVJUIChnMSAmJiB0aGlzICYmIGNhbGxiYWNrKTsKKwkKKwlkVUFTU0VSVCAoc3RhdGUgPT0gMSwi
c3BhY2UgbXVzdCBiZSBsb2NrZWQiKTsKKwkKKwlpZiAobnRvdGFsIDwgMikgcmV0dXJuOworCisJ
aW50IGI7CisJCisJZHhBQUJCICphYWJiID0gKGR4QUFCQiopZzEtPnNwYWNlX2FhYmI7CisJCisJ
Ly8gSXMgaXQgZmFzdGVyIHRvIGdvIHRocm91Z2gKKwlmb3IgKGIgPSAwOyBiIDwgZmlyc3RfYWFi
Yi5zaXplKCk7IGIrKykgeworCQlpZiAoZmlyc3RfYWFiYltiXS5nZW9tLT5mbGFncyAmIGR4R2Vv
bURpc2FibGVkKXsKKwkJCWNvbnRpbnVlOwogCQl9Ci0JCWVsc2UgewotCQkgIGkgPSAobm9kZS0+
YWFiYi0+aW5kZXggKiB0ZXN0ZWRfcm93c2l6ZSkrKGFhYmItPmluZGV4ID4+IDMpOwotCQkgIG1h
c2sgPSAxIDw8IChhYWJiLT5pbmRleCAmIDcpOworCQlpZiAoZmlyc3RfYWFiYltiXS5nZW9tICE9
IGcxKXsKKwkJCWNvbGxpZGVBQUJCcyAoYWFiYi0+Ym91bmRzLGZpcnN0X2FhYmJbYl0uYm91bmRz
LGFhYmItPmdlb20sZmlyc3RfYWFiYltiXS5nZW9tLCBkYXRhLGNhbGxiYWNrKTsKIAkJfQotCQlk
SUFTU0VSVCAoaSA+PSAwICYmIGkgPCAodGVzdGVkX3Jvd3NpemUqbikpOwotCQlpZiAoKHRlc3Rl
ZFtpXSAmIG1hc2spPT0wKSB7Ci0JCSAgY29sbGlkZUFBQkJzIChhYWJiLT5ib3VuZHMsbm9kZS0+
YWFiYi0+Ym91bmRzLAotCQkJCWFhYmItPmdlb20sbm9kZS0+YWFiYi0+Z2VvbSwKLQkJCQlkYXRh
LGNhbGxiYWNrKTsKKwl9CisJCisJZm9yIChiID0gMDsgYiA8IGJpZ19ib3hlcy5zaXplKCk7IGIr
KykgeworCQlpZiAoYmlnX2JveGVzW2JdLmdlb20tPmZsYWdzICYgZHhHZW9tRGlzYWJsZWQpewor
CQkJY29udGludWU7CiAJCX0KLQkJdGVzdGVkW2ldIHw9IG1hc2s7Ci0JICAgICAgfQotCSAgICB9
Ci0JICB9CisJCWlmIChiaWdfYm94ZXNbYl0uZ2VvbSAhPSBnMSl7CisJCQljb2xsaWRlQUFCQnMg
KGFhYmItPmJvdW5kcyxiaWdfYm94ZXNbYl0uYm91bmRzLGFhYmItPmdlb20sYmlnX2JveGVzW2Jd
Lmdlb20sIGRhdGEsY2FsbGJhY2spOworCQl9CiAJfQotICAgICAgfQotICAgICAgLy8gZ2V0IHRo
ZSBkaXNjcmV0ZSBib3VuZHMgZm9yIHRoZSBuZXh0IGxldmVsIHVwCi0gICAgICBmb3IgKGk9MDsg
aTw2OyBpKyspIGRiW2ldID4+PSAxOwotICAgIH0KLSAgfQorfQogCi0gIC8vIGV2ZXJ5IEFBQkIg
aW4gdGhlIG5vcm1hbCBsaXN0IG11c3Qgbm93IGJlIGludGVyc2VjdGVkIGFnYWluc3QgZXZlcnkK
LSAgLy8gQUFCQiBpbiB0aGUgYmlnX2JveGVzIGxpc3QuIHNvIGxldCdzIGhvcGUgdGhlcmUgYXJl
IG5vdCB0b28gbWFueSBvYmplY3RzCi0gIC8vIGluIHRoZSBiaWdfYm94ZXMgbGlzdC4KLSAgZm9y
IChhYWJiPWZpcnN0X2FhYmI7IGFhYmI7IGFhYmI9YWFiYi0+bmV4dCkgewotICAgIGZvciAoZHhB
QUJCICphYWJiMj1iaWdfYm94ZXM7IGFhYmIyOyBhYWJiMj1hYWJiMi0+bmV4dCkgewotICAgICAg
Y29sbGlkZUFBQkJzIChhYWJiLT5ib3VuZHMsYWFiYjItPmJvdW5kcyxhYWJiLT5nZW9tLGFhYmIy
LT5nZW9tLAotCQkgICAgZGF0YSxjYWxsYmFjayk7Ci0gICAgfQotICB9Cit2b2lkIGR4SGFzaFNw
YWNlOjp1bmxvY2soYm9vbCBuZXdydWxlKXsKKyAgZFVBU1NFUlQgKHN0YXRlID09IDEsInNwYWNl
IG5vdCBsb2NrZWQiKTsKIAotICAvLyBpbnRlcnNlY3RlZCBhbGwgQUFCQnMgaW4gdGhlIGJpZ19i
b3hlcyBsaXN0IHRvZ2V0aGVyCi0gIGZvciAoYWFiYj1iaWdfYm94ZXM7IGFhYmI7IGFhYmI9YWFi
Yi0+bmV4dCkgewotICAgIGZvciAoZHhBQUJCICphYWJiMj1hYWJiLT5uZXh0OyBhYWJiMjsgYWFi
YjI9YWFiYjItPm5leHQpIHsKLSAgICAgIGNvbGxpZGVBQUJCcyAoYWFiYi0+Ym91bmRzLGFhYmIy
LT5ib3VuZHMsYWFiYi0+Z2VvbSxhYWJiMi0+Z2VvbSwKLQkJICAgIGRhdGEsY2FsbGJhY2spOwot
ICAgIH0KLSAgfQorICBpZiAobnRvdGFsIDwgMikgcmV0dXJuOworCisgIGR4R2VvbSAqZ2VvbTsK
IAorICBmaXJzdF9hYWJiLnNldFNpemUoMCk7CisgIGJpZ19ib3hlcy5zZXRTaXplKDApOworCiAg
IC8vIHJlc2V0IHRoZSBhYWJiIGZpZWxkcyBvZiB0aGUgZ2VvbXMgYmFjayB0byAwCiAgIGZvciAo
Z2VvbT1maXJzdDsgZ2VvbTsgZ2VvbT1nZW9tLT5zcGFjZS5uZXh0KSBnZW9tLT5zcGFjZV9hYWJi
ID0gMDsKKworICBzdGF0ZSA9IDA7CiB9CiAKK2ludCBkeEhhc2hTcGFjZTo6bG9ja2VkKCl7CisJ
cmV0dXJuIHN0YXRlOworfQogCiBpbnQgZHhIYXNoU3BhY2U6OnF1ZXJ5IChkR2VvbUlEIG9iaikK
IHsKQEAgLTYxOSwzICs4NDEsMjQgQEAKIHsKICAgc3BhY2UtPmNvbGxpZGUgKGRhdGEsY2FsbGJh
Y2spOwogfQorCisKK2ludCBkU3BhY2VMb2NrZWQoZFNwYWNlSUQgc3BhY2UpeworCXJldHVybiBz
cGFjZS0+bG9ja2VkKCk7Cit9CisKK3ZvaWQgZFNwYWNlTG9jayAoZHhTcGFjZSAqIHNwYWNlKQor
eworICBzcGFjZS0+bG9jayh0cnVlKTsKK30KKwordm9pZCBkU3BhY2VDb2xsaWRlR2VvbSAoZHhT
cGFjZSAqIHNwYWNlLCBkeEdlb20qIGcsIHZvaWQgKmRhdGEsIGROZWFyQ2FsbGJhY2sgKmNhbGxi
YWNrKQoreworICBzcGFjZS0+Y29sbGlkZWdlb20gKGcsIGRhdGEsY2FsbGJhY2spOworfQorCit2
b2lkIGRTcGFjZVVubG9jayAoZHhTcGFjZSAqIHNwYWNlKQoreworICBzcGFjZS0+dW5sb2NrKHRy
dWUpOworfQorCkluZGV4OiBvZGUvc3JjL2dlb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnNyb290L29kZS9vZGUvc3JjL2dlb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2CmRp
ZmYgLXUgLXIxLjM2IGdlb20uY3BwCi0tLSBvZGUvc3JjL2dlb20uY3BwCTIwMDIvMDgvMDYgMDY6
MDI6NDQJMS4zNgorKysgb2RlL3NyYy9nZW9tLmNwcAkyMDAyLzA4LzA2IDA5OjU0OjM3CkBAIC01
NjEsNiArNTYxLDEzIEBACiB2b2lkIGRHZW9tU2V0Qm9keSAoZHhHZW9tICpnLCBkQm9keUlEIGIp
CiB7CiAgIGRBQVNTRVJUIChnKTsKKworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGctPnNwYWNl
aWQpLCAiZ2VvbSBpcyBsb2NrZWQgYnkgc3BhY2UiKTsKKworICAvKmlmIChiICE9IGctPmJvZHkp
ewkvLyBBZGQgdGhpcz8KKwkgIHJldHVybjsKKyAgfSovCisgIAogICBpZiAoYikgewogICAgIGlm
ICghZy0+Ym9keSkgZEZyZWUgKGctPnBvcyxzaXplb2YoZHhQb3NSKSk7CiAgICAgZy0+Ym9keSA9
IGI7CkBAIC01ODgsNiArNTk1LDggQEAKIHZvaWQgZEdlb21TZXRQb3NpdGlvbiAoZHhHZW9tICpn
LCBkUmVhbCB4LCBkUmVhbCB5LCBkUmVhbCB6KQogewogICBkQUFTU0VSVCAoZyk7CisgIGRVQVNT
RVJUKCFkU3BhY2VMb2NrZWQoZy0+c3BhY2VpZCksICJnZW9tIGlzIGxvY2tlZCBieSBzcGFjZSIp
OworCiAgIGlmIChnLT5ib2R5KSBkQm9keVNldFBvc2l0aW9uIChnLT5ib2R5LHgseSx6KTsKICAg
ZWxzZSB7CiAgICAgZy0+cG9zWzBdID0geDsKQEAgLTYwMCw2ICs2MDksOCBAQAogdm9pZCBkR2Vv
bVNldFJvdGF0aW9uIChkeEdlb20gKmcsIGNvbnN0IGRNYXRyaXgzIFIpCiB7CiAgIGRBQVNTRVJU
IChnKTsKKyAgZFVBU1NFUlQoIWRTcGFjZUxvY2tlZChnLT5zcGFjZWlkKSwgImdlb20gaXMgbG9j
a2VkIGJ5IHNwYWNlIik7CisKICAgaWYgKGctPmJvZHkpIGRCb2R5U2V0Um90YXRpb24gKGctPmJv
ZHksUik7CiAgIGVsc2UgbWVtY3B5IChnLT5SLFIsc2l6ZW9mKGRNYXRyaXgzKSk7CiB9CkBAIC02
NzMsNiArNjg0LDIxIEBACiAgIHJldHVybiBnLT5zcGFjZV9hYWJiOwogfQogCit2b2lkIGRHZW9t
RW5hYmxlIChkeEdlb20gKmcpeworCWRBQVNTRVJUIChnKTsKKwlnLT5mbGFncyAmPSB+ZHhHZW9t
RGlzYWJsZWQ7Cit9CisKK3ZvaWQgZEdlb21EaXNhYmxlIChkeEdlb20gKmcpeworCWRBQVNTRVJU
IChnKTsKKwlnLT5mbGFncyB8PSBkeEdlb21EaXNhYmxlZDsKK30KKworaW50IGRHZW9tSXNFbmFi
bGVkIChkeEdlb20gKmcpeworCWRBQVNTRVJUIChnKTsKKwlyZXR1cm4gKChnLT5mbGFncyAmIGR4
R2VvbURpc2FibGVkKSA9PSAwKTsKK30KKwogLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAvLyBkYXRh
IGZvciB0aGUgc3RhbmRhcmQgY2xhc3NlcwogCkBAIC0xNDg2LDYgKzE1MTIsOCBAQAogewogICBk
VUFTU0VSVCAoZyAmJiBnLT5fY2xhc3MtPm51bSA9PSBkU3BoZXJlQ2xhc3MsImFyZ3VtZW50IG5v
dCBhIHNwaGVyZSIpOwogICBkQUFTU0VSVCAocmFkaXVzID4gMCk7CisgIGRVQVNTRVJUKCFkU3Bh
Y2VMb2NrZWQoZy0+c3BhY2VpZCksICJnZW9tIGlzIGxvY2tlZCBieSBzcGFjZSIpOworCiAgIGR4
U3BoZXJlICpzID0gKGR4U3BoZXJlKikgQ0xBU1NEQVRBKGcpOwogICBzLT5yYWRpdXMgPSByYWRp
dXM7CiB9CkBAIC0xNDk1LDYgKzE1MjMsOCBAQAogewogICBkVUFTU0VSVCAoZyAmJiBnLT5fY2xh
c3MtPm51bSA9PSBkQm94Q2xhc3MsImFyZ3VtZW50IG5vdCBhIGJveCIpOwogICBkQUFTU0VSVCAo
bHggPiAwICYmIGx5ID4gMCAmJiBseiA+IDApOworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGct
PnNwYWNlaWQpLCAiZ2VvbSBpcyBsb2NrZWQgYnkgc3BhY2UiKTsKKwogICBkeEJveCAqYiA9IChk
eEJveCopIENMQVNTREFUQShnKTsKICAgYi0+c2lkZVswXSA9IGx4OwogICBiLT5zaWRlWzFdID0g
bHk7CkBAIC0xNTA2LDYgKzE1MzYsNyBAQAogewogICBkVUFTU0VSVCAoZyAmJiBnLT5fY2xhc3Mt
Pm51bSA9PSBkUGxhbmVDbGFzcywiYXJndW1lbnQgbm90IGEgcGxhbmUiKTsKICAgZHhQbGFuZSAq
cCA9IChkeFBsYW5lKikgQ0xBU1NEQVRBKGcpOworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGct
PnNwYWNlaWQpLCAiZ2VvbSBpcyBsb2NrZWQgYnkgc3BhY2UiKTsKICAgcC0+cFswXSA9IGE7CiAg
IHAtPnBbMV0gPSBiOwogICBwLT5wWzJdID0gYzsKQEAgLTE1MTcsNiArMTU0OCw4IEBACiB7CiAg
IGRVQVNTRVJUIChnICYmIGctPl9jbGFzcy0+bnVtID09IGRDQ3lsaW5kZXJDbGFzcywiYXJndW1l
bnQgbm90IGEgY2N5bGluZGVyIik7CiAgIGRBQVNTRVJUIChyYWRpdXMgPiAwICYmIGxlbmd0aCA+
IDApOworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGctPnNwYWNlaWQpLCAiZ2VvbSBpcyBsb2Nr
ZWQgYnkgc3BhY2UiKTsKKwogICBkeENDeWxpbmRlciAqYyA9IChkeENDeWxpbmRlciopIENMQVNT
REFUQShnKTsKICAgYy0+cmFkaXVzID0gcmFkaXVzOwogICBjLT5seiA9IGxlbmd0aDsKQEAgLTE2
MjAsNiArMTY1Myw4IEBACiB2b2lkIGRHZW9tR3JvdXBBZGQgKGR4R2VvbSAqZywgZHhHZW9tICp4
KQogewogICBkVUFTU0VSVCAoZyAmJiBnLT5fY2xhc3MtPm51bSA9PSBkR2VvbUdyb3VwQ2xhc3Ms
ImFyZ3VtZW50IG5vdCBhIGdlb21ncm91cCIpOworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGct
PnNwYWNlaWQpLCAiZ2VvbSBpcyBsb2NrZWQgYnkgc3BhY2UiKTsKKwogICBkeEdlb21Hcm91cCAq
Z3IgPSAoZHhHZW9tR3JvdXAqKSBDTEFTU0RBVEEoZyk7CiAgIGdyLT5wYXJ0cy5wdXNoICh4KTsK
IH0KQEAgLTE3OTksNiArMTgzNCw4IEBACiB7CiAgIGRVQVNTRVJUIChnICYmIGctPl9jbGFzcy0+
bnVtID09IGRHZW9tVHJhbnNmb3JtQ2xhc3MsCiAJICAgICJhcmd1bWVudCBub3QgYSBnZW9tIHRy
YW5zZm9ybSIpOworICBkVUFTU0VSVCghZFNwYWNlTG9ja2VkKGctPnNwYWNlaWQpLCAiZ2VvbSBp
cyBsb2NrZWQgYnkgc3BhY2UiKTsKKwogICBkeEdlb21UcmFuc2Zvcm0gKnRyID0gKGR4R2VvbVRy
YW5zZm9ybSopIENMQVNTREFUQShnKTsKICAgaWYgKHRyLT5vYmogJiYgdHItPmNsZWFudXApIHsK
ICAgICBkR2VvbURlc3Ryb3kgKHRyLT5vYmopOwpJbmRleDogb2RlL3NyYy9nZW9tX2ludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvb2RlL29kZS9zcmMvZ2VvbV9pbnRlcm5h
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcjEuNyBnZW9tX2ludGVybmFs
LmgKLS0tIG9kZS9zcmMvZ2VvbV9pbnRlcm5hbC5oCTIwMDIvMDYvMjUgMjM6NDY6MTgJMS43Cisr
KyBvZGUvc3JjL2dlb21faW50ZXJuYWwuaAkyMDAyLzA4LzA2IDA5OjU0OjM4CkBAIC00OCw2ICs0
OCw5IEBACiAgIGRNYXRyaXgzIFI7CiB9OwogCitlbnVtIHsKKyAgZHhHZW9tRGlzYWJsZWQgPSAx
LAkJLy8gZ2VvbSBpcyBkaXNhYmxlZAorfTsKIAogLy8gY29tbW9uIGRhdGEgZm9yIGFsbCBnZW9t
ZXRyeSBvYmplY3RzLiB0aGUgY2xhc3Mtc3BlY2lmaWMgZGF0YSBhcmVhIGZvbGxvd3MKIC8vIHRo
aXMgc3RydWN0dXJlLiBwb3MgYW5kIFIgd2lsbCBlaXRoZXIgcG9pbnQgdG8gYSBzZXBhcmF0ZWx5
IGFsbG9jYXRlZApAQCAtNTYsNiArNTksNyBAQAogCiBzdHJ1Y3QgZHhHZW9tIHsJCS8vIGEgZEdl
b21JRCBpcyBhIHBvaW50ZXIgdG8gdGhpcwogICBkeEdlb21DbGFzcyAqX2NsYXNzOwkvLyBjbGFz
cyBvZiB0aGlzIG9iamVjdAorICBpbnQgZmxhZ3M7CQkvLyBzb21lIGR4R2VvbUZsYWdYWFggZmxh
Z3MKICAgdm9pZCAqZGF0YTsJCS8vIHVzZXIgZGF0YSBwb2ludGVyCiAgIGRCb2R5SUQgYm9keTsJ
CS8vIGR5bmFtaWNzIGJvZHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0IChpZiBhbnkpCiAg
IGRSZWFsICpwb3M7CQkvLyBwb2ludGVyIHRvIG9iamVjdCdzIHBvc2l0aW9uIHZlY3RvcgpJbmRl
eDogb2RlL3NyYy9vYmplY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvb2RlL29k
ZS9zcmMvb2JqZWN0cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcjEuOSBv
YmplY3RzLmgKLS0tIG9kZS9zcmMvb2JqZWN0cy5oCTIwMDIvMDYvMjUgMjM6NDY6MTgJMS45Cisr
KyBvZGUvc3JjL29iamVjdHMuaAkyMDAyLzA4LzA2IDA5OjU0OjM4CkBAIC03NSw2ICs3NSwxMCBA
QAogICBkVmVjdG9yMyBsdmVsLGF2ZWw7CQkvLyBsaW5lYXIgYW5kIGFuZ3VsYXIgdmVsb2NpdHkg
b2YgUE9SCiAgIGRWZWN0b3IzIGZhY2MsdGFjYzsJCS8vIGZvcmNlIGFuZCB0b3JxdWUgYWNjdWx1
bGF0b3JzCiAgIGRWZWN0b3IzIGZpbml0ZV9yb3RfYXhpczsJLy8gZmluaXRlIHJvdGF0aW9uIGF4
aXMsIHVuaXQgbGVuZ3RoIG9yIDA9bm9uZQorCisjaWZuZGVmIGROT0RFQlVHCisgIGludCBsb2Nr
Y291bnQ7CQkJLy8gSXMgdXNlZCBieSBjb25uZWN0ZWQgZ2VvbXMKKyNlbmRpZgogfTsKIAogCklu
ZGV4OiBvZGUvc3JjL29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qvb2RlL29k
ZS9zcmMvb2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1yMS4zMSBv
ZGUuY3BwCi0tLSBvZGUvc3JjL29kZS5jcHAJMjAwMi8wNy8xMyAyMzozNTowNwkxLjMxCisrKyBv
ZGUvc3JjL29kZS5jcHAJMjAwMi8wOC8wNiAwOTo1NDo0MApAQCAtMzQ4LDYgKzM0OCwxMSBAQAog
ICBkU2V0WmVybyAoYi0+ZmFjYyw0KTsKICAgZFNldFplcm8gKGItPnRhY2MsNCk7CiAgIGRTZXRa
ZXJvIChiLT5maW5pdGVfcm90X2F4aXMsNCk7CisKKyNpZm5kZWYgZE5PREVCVUcKKyAgYi0+bG9j
a2NvdW50ID0gMDsKKyNlbmRpZgorCiAgIGFkZE9iamVjdFRvTGlzdCAoYiwoZE9iamVjdCAqKikg
JnctPmZpcnN0Ym9keSk7CiAgIHctPm5iKys7CiAgIHJldHVybiBiOwpAQCAtMzkyLDYgKzM5Nyw3
IEBACiB2b2lkIGRCb2R5U2V0UG9zaXRpb24gKGRCb2R5SUQgYiwgZFJlYWwgeCwgZFJlYWwgeSwg
ZFJlYWwgeikKIHsKICAgZEFBU1NFUlQgKGIpOworICBkSUFTU0VSVChiLT5sb2NrY291bnQgPT0g
MCk7CiAgIGItPnBvc1swXSA9IHg7CiAgIGItPnBvc1sxXSA9IHk7CiAgIGItPnBvc1syXSA9IHo7
CkBAIC00MDEsNiArNDA3LDcgQEAKIHZvaWQgZEJvZHlTZXRSb3RhdGlvbiAoZEJvZHlJRCBiLCBj
b25zdCBkTWF0cml4MyBSKQogewogICBkQUFTU0VSVCAoYiAmJiBSKTsKKyAgZElBU1NFUlQoYi0+
bG9ja2NvdW50ID09IDApOwogICBkUXVhdGVybmlvbiBxOwogICBkUnRvUSAoUixxKTsKICAgZE5v
cm1hbGl6ZTQgKHEpOwpAQCAtNDE1LDYgKzQyMiw3IEBACiB2b2lkIGRCb2R5U2V0UXVhdGVybmlv
biAoZEJvZHlJRCBiLCBjb25zdCBkUXVhdGVybmlvbiBxKQogewogICBkQUFTU0VSVCAoYiAmJiBx
KTsKKyAgZElBU1NFUlQoYi0+bG9ja2NvdW50ID09IDApOwogICBiLT5xWzBdID0gcVswXTsKICAg
Yi0+cVsxXSA9IHFbMV07CiAgIGItPnFbMl0gPSBxWzJdOwoK

--Multipart_Tue__20_Aug_2002_23:16:41_-0400_084075d0--