patch for the checkpointing paper
--0-860233166-1110292844=:35430
Content-Type: text/plain; charset=us-ascii
Content-Id:
Content-Disposition: inline
Hello,
The patch (containing 3 diffs and some modified files
because I lost the original) is attached herewith. I
can provide example programs if required.Basically,
the code to checkpoint is written as :-
if (tsetjmp() < 0)
perror("tsetjmp");
....
tlongjmp(1); /* or any retval returned by tsetjmp() */
There are some ancillary functions that help in moving
back and forth between states and/or determine last
signal delivered.
cache() is used to copyin and copyout a block of
memory not exceeding 4 KB. Note that all variables not
cached are lost after a longjmp().
None of this code will be checked into the dragonfly
src tree by me. If someone wants to get this code into
any src tree, pl. feel free to do so -as permitted by
the BSD license.
thanks
-kamal
------------------------------------------------------------
Kamal R. Prasad
UNIX systems consultant
kamalp@acm.org
In theory, there is no difference between theory and practice. In practice, there is:-).
------------------------------------------------------------
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
--0-860233166-1110292844=:35430
Content-Type: application/x-tar; name="MYPATCH.TAR"
Content-Transfer-Encoding: base64
Content-Description: MYPATCH.TAR
Content-Disposition: attachment; filename="MYPATCH.TAR"
Y2hlY2twb2ludC5oLmRpZmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAxMzE2
ADEwMjEzMjQyNjIwADAxMzA3NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAzMywzOGMzMywzNAo8ICNkZWZpbmUgQ0tQVF9T
RVRKTVAgICAgMHgzCjwgI2RlZmluZSBDS1BUX0xPTkdKTVAgICAweDQKPCAj
ZGVmaW5lIENLUFRfQ1VSUiAgICAgIDB4NQo8ICNkZWZpbmUgQ0tQVF9QUkVW
ICAgICAgMHg2CjwgI2RlZmluZSBDS1BUX1NJR1RZUEUgICAweDcKPCAjZGVm
aW5lIENLUFRfQ09VTlQgICAgIDB4OAotLS0KPiAjZGVmaW5lIENLUFRfRlJF
RVpFUElEIDB4MwkvKiBub3QgeWV0IHN1cHBvcnRlZCAqLwo+ICNkZWZpbmUg
Q0tQVF9USEFXQklOICAgMHg0CS8qIG5vdCB5ZXQgc3VwcG9ydGVkICovCjQw
LDQxZDM1CjwgI2RlZmluZSBJTiAgMAo8ICNkZWZpbmUgT1VUIDEKNjAsNjVk
NTMKPCAjZGVmaW5lIHRzZXRqbXAoKSBzeXNfY2hlY2twb2ludChDS1BUX1NF
VEpNUCwgMCwgLTEsIDApCjwgI2RlZmluZSB0bG9uZ2ptcCh4KSBzeXNfY2hl
Y2twb2ludChDS1BUX0xPTkdKTVAsIHgsIC0xLCAwKQo8ICNkZWZpbmUgY2hr
cHRfY3VycnN0YXRlKCkgc3lzX2NoZWNrcG9pbnQoQ0tQVF9DVVJSLCAwLCAt
MSwgMCkKPCAjZGVmaW5lIGNoa3B0X3ByZXZzdGF0ZSgpIHN5c19jaGVja3Bv
aW50KENLUFRfUFJFViwgMCwgLTEsIDApCjwgI2RlZmluZSBjaGtwdF9jb3Vu
dCgpIHN5c19jaGVja3BvaW50KENLUFRfQ09VTlQsIDAsIC0xLCAwKQo8ICNk
ZWZpbmUgY2hrcHRfc2lnbmFsKCkgc3lzX2NoZWNrcG9pbnQoQ0tQVF9TSUdU
WVBFLCAwLCAtMSwgMCkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAa2Vybl9jaGVja3BvaW50LmMuZGlmZgAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAw
MDA0NzM3ADEwMjEzMjQyNDYyADAxNDEyNgAgMAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg
AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxNDdkMTQ2CjwgI2lmIDAKMTUxZDE0
OQo8ICNlbmRpZgoyNTcsMjU4YzI1NQo8IAlpZiAocC0+aXNfc2V0am1wID09
ICcwJykKPCAJewotLS0KPiAKMjYyYzI1OQo8IAl9Ci0tLQo+IAo2ODYsNzEx
ZDY4Mgo8IGNhY2hlKHN0cnVjdCBjYWNoZV9hcmdzICp1YXApCjwgewo8IAlp
bnQgZXJyb3IgPSAwOwo8IAlzdHJ1Y3QgcHJvYyAqcCA9IGN1cnRocmVhZC0+
dGRfcHJvYzsKPCAKPCAJc3dpdGNoICh1YXAtPmRpcikgewo8IAljYXNlIElO
Ogo8IAkJaWYgKChwLT5jYWNoZSkgJiYgKHAtPmNhY2hlc2l6ZSA8IHVhcC0+
bGVuKSAmJiAodWFwLT5sZW4gPD0gNDA5NikpIAo8IAkJCWZyZWUocC0+Y2Fj
aGUsIE1fVEVNUCk7CjwgCQlpZiAocC0+Y2FjaGUgPT0gTlVMTCkgewo8IAkJ
CXByaW50ZigiaW5pdGlhbGl6aW5nIHByb2Nlc3MgY2FjaGUuLlxuIik7Cjwg
CQkJcC0+Y2FjaGVzaXplID0gKHVhcC0+bGVuIDw9IDQwOTYpP3VhcC0+bGVu
OjQwOTY7CjwgCQkJcC0+Y2FjaGUgPSBtYWxsb2MocC0+Y2FjaGVzaXplLCBN
X1RFTVAsIE1fWkVSTyB8IE1fV0FJVE9LKTsKPCAJCX0KPCAJZXJyb3I9CWNv
cHlpbih1YXAtPmFkZHIsIHAtPmNhY2hlLCAodWFwLT5sZW4gPD0gcC0+Y2Fj
aGVzaXplKT91YXAtPmxlbjpwLT5jYWNoZXNpemUpOwo8IAlicmVhazsKPCAJ
Y2FzZSBPVVQ6CjwgCWVycm9yPQljb3B5b3V0KHAtPmNhY2hlLCB1YXAtPmFk
ZHIsICh1YXAtPmxlbiA8PSBwLT5jYWNoZXNpemUpP3VhcC0+bGVuOnAtPmNh
Y2hlc2l6ZSk7CjwgCWJyZWFrOwo8IAlkZWZhdWx0Ogo8IAkgICAgICAgIGVy
cm9yID0gRU9QTk9UU1VQUDsKPCAJfQo8IAlyZXR1cm4gZXJyb3I7CjwgfQo8
IAo8IGludCAKNzE0LDcxNmQ2ODQKPCAJY2hhciogYnVmOwo8IAlzdHJ1Y3Qg
bmxvb2t1cGRhdGEgbmQ7CjwgCWludCByZXNwdDsKNzU1LDgxMGQ3MjIKPCAJ
Y2FzZSBDS1BUX1NFVEpNUDoKPCAJCXAtPmNoa3B0Kys7CjwgCQlidWYgPSBt
YWxsb2MoTUFYUEFUSExFTiArIDEsIE1fVEVNUCwgTV9OT1dBSVQpOwo8IAkJ
aWYgKGJ1ZiA9PSBOVUxMKSB7CjwgCQkJcC0+Y2hrcHQtLTsKPCAJCQlyZXR1
cm4gKEVOT01FTSk7CjwgCQl9CjwgCQlzcHJpbnRmKGJ1ZiwgIi90bXAvJXMu
JWQuJWQiLCBwLT5wX2NvbW0sIHAtPnBfcGlkLCBwLT5jaGtwdCk7CjwgCQll
cnJvciA9IG5sb29rdXBfaW5pdCgmbmQsIGJ1ZiwgVUlPX1NZU1NQQUNFLCAw
KTsKPCAJCWlmIChlcnJvciA9PSAwKQo8IAkJCWVycm9yID0ga2Vybl91bmxp
bmsoJm5kKTsKPCAJCW5sb29rdXBfZG9uZSgmbmQpOwo8IAkJZXJyb3IgPSBm
cF9vcGVuKGJ1ZiwgT19ST09UQ1JFRCB8IE9fV1JPTkxZfE9fQ1JFQVR8T19U
UlVOQ3xPX05PRk9MTE9XLCAwNjAwLCAmZnApOwo8IAkJaWYgKGVycm9yID09
IDApIHsKPCAJCQlwLT5pc19zZXRqbXAgPSAnMSc7CjwgCQkJZXJyb3IgPSBj
a3B0X2ZyZWV6ZV9wcm9jKHAsIGZwKTsKPCAJCQlwLT5pc19zZXRqbXAgPSAn
MCc7CjwgCQkJZnBfY2xvc2UoZnApOwo8IAkJfSBlbHNlIAo8IAkJCXByaW50
ZigiY2hlY2twb2ludCBmYWlsZWQgd2l0aCBvcGVuIC0gZXJyb3I6ICVkXG4i
LCBlcnJvcik7CjwgCQlmcmVlKGJ1ZiwgTV9URU1QKTsKPCAJCXVhcC0+c3lz
bXNnX3Jlc3VsdCA9IHAtPmNoa3B0Owo8IAlicmVhazsKPCAJY2FzZSBDS1BU
X0xPTkdKTVA6CjwgCQlyZXNwdCA9IHVhcC0+ZmQ7IC8qIHJlc3RvcmUgcHQg
aXMgcGFzc2VkIHVzaW5nIGZkIGFyZ3VtZW50ICovCjwgCQlidWYgPSBtYWxs
b2MoTUFYUEFUSExFTiArIDEsIE1fVEVNUCwgTV9XQUlUT0spOwo8IAkJaWYg
KGJ1ZiA9PSBOVUxMKSAKPCAJCQlyZXR1cm4gKEVOT01FTSk7CjwgCQlpZiAo
cmVzcHQgPT0gMCkKPCAJCQlyZXNwdCA9IHAtPmNoa3B0OyAvKiB1c2UgdGhl
IGxhc3Qgc2F2ZWQgY2hlY2twb2ludCAqLwo8IAkJc3ByaW50ZihidWYsICIv
dG1wLyVzLiVkLiVkIiwgcC0+cF9jb21tLCBwLT5wX3BpZCwgcmVzcHQpOwo8
IAkJaWYgKGVycm9yICE9IDApCjwgCQkJcmV0dXJuIEVCQURGOwo8IAkJZXJy
b3IgPSBmcF9vcGVuKGJ1ZiwgT19SRE9OTFksIDA2MDAsICZmcCk7CjwgCQlp
ZiAoZXJyb3IgPT0gMCkgewo8IAkJCXAtPmlzX3NldGptcCA9ICcxJzsKPCAJ
CQlja3B0X3RoYXdfcHJvYyhwLCBmcCk7CjwgCQkJcC0+aXNfc2V0am1wID0g
JzAnOwo8IAkJCWZwX2Nsb3NlKGZwKTsKPCAJCQl9CjwgCQllbHNlIAo8IAkJ
CXByaW50ZigiY2Fubm90IGFjY2VzcyBkYXRhLCBlcnIgPSAlZFxuIiwgZXJy
b3IpOwo8IAkJZnJlZShidWYsIE1fVEVNUCk7CjwgCWJyZWFrOwo8IAljYXNl
IENLUFRfQ1VSUjoKPCAJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9IHAtPmN1cnI7
CjwgCWJyZWFrOwo8IAljYXNlIENLUFRfUFJFVjoKPCAJCXVhcC0+c3lzbXNn
X3Jlc3VsdCA9IHAtPnByZXY7CjwgCWJyZWFrOwo8IAljYXNlIENLUFRfU0lH
VFlQRToKPCAJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9IHAtPmNoa3B0X3NpZzsK
PCAJYnJlYWs7CjwgCWNhc2UgQ0tQVF9DT1VOVDoKPCAJCXVhcC0+c3lzbXNn
X3Jlc3VsdCA9IHAtPmNoa3B0Owo8IAlicmVhazsKAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAa2Vybl9mb3JrLmMuZGlmZgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDAwMAAw
MDAwMDAwADAwMDAwMDAwMjc0ADEwMjEzMjQyNDYyADAxMjczMAAgMAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
d2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyOTEsMjk3ZDI5
MAo8IAluZXdwcm9jLT5jaGtwdCA9IDA7CjwgCW5ld3Byb2MtPmN1cnIgPSAw
Owo8IAluZXdwcm9jLT5wcmV2ID0gMDsKPCAJbmV3cHJvYy0+Y2FjaGVzaXpl
ID0gMDsKPCAJbmV3cHJvYy0+Y2hrcHRfc2lnID0gMDsKPCAJbmV3cHJvYy0+
Y2FjaGUgPSBOVUxMOwo8IAluZXdwcm9jLT5pc19zZXRqbXAgPSAnMCc7CgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHN5c2NhbGxzLm1hc3RlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAw
MDA2NjcwMwAxMDIxMzI0MjEzNwAwMTI3NTcAIDAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIg
IAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICREcmFnb25GbHk6IHNyYy9zeXMv
a2Vybi9zeXNjYWxscy5tYXN0ZXIsdiAxLjIwIDIwMDUvMDIvMjEgMjE6NTE6
NDggZGlsbG9uIEV4cCAkCgo7IEAoIylzeXNjYWxscy5tYXN0ZXIJOC4yIChC
ZXJrZWxleSkgMS8xMy85NAo7ICRGcmVlQlNEOiBzcmMvc3lzL2tlcm4vc3lz
Y2FsbHMubWFzdGVyLHYgMS43Mi4yLjEwIDIwMDIvMDcvMTIgMDg6MjI6NDYg
YWxmcmVkIEV4cCAkCjsKOyBTeXN0ZW0gY2FsbCBuYW1lL251bWJlciBtYXN0
ZXIgZmlsZS4KOyBQcm9jZXNzZWQgdG8gY3JlYXRlZCBpbml0X3N5c2VudC5j
LCBzeXNjYWxscy5jIGFuZCBzeXNjYWxsLmguCgo7IENvbHVtbnM6IG51bWJl
ciBbTVBTQUZFXSB0eXBlIG5hcmdzIG5hbWVzcGMgbmFtZSBhbHR7bmFtZSx0
YWcscnR5cH0vY29tbWVudHMKOwludW1iZXIJc3lzdGVtIGNhbGwgbnVtYmVy
LCBtdXN0IGJlIGluIG9yZGVyCjsgICBNUFNBRkUJb3B0aW9uYWwgZmllbGQs
IHNwZWNpZmllcyB0aGF0IHN5c2NhbGwgZG9lcyBub3Qgd2FudCB0aGUKOwkJ
QkdMIGdyYWJiZWQgYXV0b21hdGljYWxseSAoaXQgaXMgU01QIHNhZmUpLgo7
CXR5cGUJb25lIG9mIFNURCwgT0JTT0wsIFVOSU1QTCwgQ09NUEFULCBDUFRf
Tk9BLCBMSUJDT01QQVQsCjsJCU5PREVGLCBOT0FSR1MsIE5PUFJPVE8sIE5P
SU1QTAo7CW5hbWVzcGMgb25lIG9mIFBPU0lYLCBCU0QsIE5PSElERQo7CW5h
bWUJcHN1ZWRvLXByb3RvdHlwZSBvZiBzeXNjYWxsIHJvdXRpbmUKOwkJSWYg
b25lIG9mIHRoZSBmb2xsb3dpbmcgYWx0cyBpcyBkaWZmZXJlbnQsIHRoZW4g
YWxsIGFwcGVhcjoKOwlhbHRuYW1lCW5hbWUgb2Ygc3lzdGVtIGNhbGwgaWYg
ZGlmZmVyZW50CjsJYWx0dGFnCW5hbWUgb2YgYXJncyBzdHJ1Y3QgdGFnIGlm
IGRpZmZlcmVudCBmcm9tIFtvXWBuYW1lJyJfYXJncyIKOwlhbHRydHlwCXJl
dHVybiB0eXBlIGlmIG5vdCBpbnQgKGJvZ3VzIC0gc3lzY2FsbHMgYWx3YXlz
IHJldHVybiBpbnQpCjsJCWZvciBVTklNUEwvT0JTT0wsIG5hbWUgY29udGlu
dWVzIHdpdGggY29tbWVudHMKCjsgdHlwZXM6CjsJU1RECWFsd2F5cyBpbmNs
dWRlZAo7CUNPTVBBVAlpbmNsdWRlZCBvbiBDT01QQVQgI2lmZGVmCjsJTElC
Q09NUEFUIGluY2x1ZGVkIG9uIENPTVBBVCAjaWZkZWYsIGFuZCBwbGFjZWQg
aW4gc3lzY2FsbC5oCjsJT0JTT0wJb2Jzb2xldGUsIG5vdCBpbmNsdWRlZCBp
biBzeXN0ZW0sIG9ubHkgc3BlY2lmaWVzIG5hbWUKOwlVTklNUEwJbm90IGlt
cGxlbWVudGVkLCBwbGFjZWhvbGRlciBvbmx5Cgo7ICNpZmRlZidzLCBldGMu
IG1heSBiZSBpbmNsdWRlZCwgYW5kIGFyZSBjb3BpZWQgdG8gdGhlIG91dHB1
dCBmaWxlcy4KCiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KI2luY2x1ZGUgPHN5
cy9zeXNlbnQuaD4KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgoKOyBSZXNl
cnZlZC91bmltcGxlbWVudGVkIHN5c3RlbSBjYWxscyBpbiB0aGUgcmFuZ2Ug
MC0xNTAgaW5jbHVzaXZlCjsgYXJlIHJlc2VydmVkIGZvciB1c2UgaW4gZnV0
dXJlIEJlcmtlbGV5IHJlbGVhc2VzLgo7IEFkZGl0aW9uYWwgc3lzdGVtIGNh
bGxzIGltcGxlbWVudGVkIGluIHZlbmRvciBhbmQgb3RoZXIKOyByZWRpc3Ry
aWJ1dGlvbnMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgcmVzZXJ2ZWQgcmFu
Z2UgYXQgdGhlIGVuZAo7IG9mIHRoZSBjdXJyZW50IGNhbGxzLgoKMAlTVEQJ
Tk9ISURFCXsgaW50IG5vc3lzKHZvaWQpOyB9IHN5c2NhbGwgbm9zeXNfYXJn
cyBpbnQKMQlTVEQJTk9ISURFCXsgdm9pZCBzeXNfZXhpdChpbnQgcnZhbCk7
IH0gZXhpdCBzeXNfZXhpdF9hcmdzIHZvaWQKMglTVEQJUE9TSVgJeyBpbnQg
Zm9yayh2b2lkKTsgfQozCVNURAlQT1NJWAl7IHNzaXplX3QgcmVhZChpbnQg
ZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKTsgfQo0CVNURAlQT1NJWAl7
IHNzaXplX3Qgd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVf
dCBuYnl0ZSk7IH0KNQlTVEQJUE9TSVgJeyBpbnQgb3BlbihjaGFyICpwYXRo
LCBpbnQgZmxhZ3MsIGludCBtb2RlKTsgfQo7IFhYWCBzaG91bGQgYmUJCXsg
aW50IG9wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCAuLi4pOyB9
CjsgYnV0IHdlJ3JlIG5vdCByZWFkeSBmb3IgYGNvbnN0JyBvciB2YXJhcmdz
Lgo7IFhYWCBtYW4gcGFnZSBzYXlzIGBtb2RlX3QgbW9kZScuCjYJU1RECVBP
U0lYCXsgaW50IGNsb3NlKGludCBmZCk7IH0KNwlTVEQJQlNECXsgaW50IHdh
aXQ0KGludCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgXAoJCQkg
ICAgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsgfSB3YWl0NCB3YWl0X2FyZ3Mg
aW50CjgJQ09NUEFUCUJTRAl7IGludCBjcmVhdChjaGFyICpwYXRoLCBpbnQg
bW9kZSk7IH0KOQlTVEQJUE9TSVgJeyBpbnQgbGluayhjaGFyICpwYXRoLCBj
aGFyICpsaW5rKTsgfQoxMAlTVEQJUE9TSVgJeyBpbnQgdW5saW5rKGNoYXIg
KnBhdGgpOyB9CjExCU9CU09MCU5PSElERQlleGVjdgoxMglTVEQJUE9TSVgJ
eyBpbnQgY2hkaXIoY2hhciAqcGF0aCk7IH0KMTMJU1RECUJTRAl7IGludCBm
Y2hkaXIoaW50IGZkKTsgfQoxNAlTVEQJUE9TSVgJeyBpbnQgbWtub2QoY2hh
ciAqcGF0aCwgaW50IG1vZGUsIGludCBkZXYpOyB9CjE1CVNURAlQT1NJWAl7
IGludCBjaG1vZChjaGFyICpwYXRoLCBpbnQgbW9kZSk7IH0KMTYJU1RECVBP
U0lYCXsgaW50IGNob3duKGNoYXIgKnBhdGgsIGludCB1aWQsIGludCBnaWQp
OyB9CjE3CVNURAlCU0QJeyBpbnQgb2JyZWFrKGNoYXIgKm5zaXplKTsgfSBi
cmVhayBvYnJlYWtfYXJncyBpbnQKMTgJU1RECUJTRAl7IGludCBnZXRmc3N0
YXQoc3RydWN0IHN0YXRmcyAqYnVmLCBsb25nIGJ1ZnNpemUsIFwKCQkJICAg
IGludCBmbGFncyk7IH0KMTkJQ09NUEFUCVBPU0lYCXsgbG9uZyBsc2Vlayhp
bnQgZmQsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKTsgfQoyMAlTVEQJUE9T
SVgJeyBwaWRfdCBnZXRwaWQodm9pZCk7IH0KMjEJU1RECUJTRAl7IGludCBt
b3VudChjaGFyICp0eXBlLCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIFwKCQkJ
ICAgIGNhZGRyX3QgZGF0YSk7IH0KOyBYWFggYHBhdGgnIHNob3VsZCBoYXZl
IHR5cGUgYGNvbnN0IGNoYXIgKicgYnV0IHdlJ3JlIG5vdCByZWFkeSBmb3Ig
dGhhdC4KMjIJU1RECUJTRAl7IGludCB1bm1vdW50KGNoYXIgKnBhdGgsIGlu
dCBmbGFncyk7IH0KMjMJU1RECVBPU0lYCXsgaW50IHNldHVpZCh1aWRfdCB1
aWQpOyB9CjI0CU1QU0FGRQlTVEQJUE9TSVgJeyB1aWRfdCBnZXR1aWQodm9p
ZCk7IH0KMjUJTVBTQUZFCVNURAlQT1NJWAl7IHVpZF90IGdldGV1aWQodm9p
ZCk7IH0KMjYJU1RECUJTRAl7IGludCBwdHJhY2UoaW50IHJlcSwgcGlkX3Qg
cGlkLCBjYWRkcl90IGFkZHIsIFwKCQkJICAgIGludCBkYXRhKTsgfQoyNwlT
VEQJQlNECXsgaW50IHJlY3Ztc2coaW50IHMsIHN0cnVjdCBtc2doZHIgKm1z
ZywgaW50IGZsYWdzKTsgfQoyOAlTVEQJQlNECXsgaW50IHNlbmRtc2coaW50
IHMsIGNhZGRyX3QgbXNnLCBpbnQgZmxhZ3MpOyB9CjI5CVNURAlCU0QJeyBp
bnQgcmVjdmZyb20oaW50IHMsIGNhZGRyX3QgYnVmLCBzaXplX3QgbGVuLCBc
CgkJCSAgICBpbnQgZmxhZ3MsIGNhZGRyX3QgZnJvbSwgaW50ICpmcm9tbGVu
YWRkcik7IH0KMzAJU1RECUJTRAl7IGludCBhY2NlcHQoaW50IHMsIGNhZGRy
X3QgbmFtZSwgaW50ICphbmFtZWxlbik7IH0KMzEJU1RECUJTRAl7IGludCBn
ZXRwZWVybmFtZShpbnQgZmRlcywgY2FkZHJfdCBhc2EsIGludCAqYWxlbik7
IH0KMzIJU1RECUJTRAl7IGludCBnZXRzb2NrbmFtZShpbnQgZmRlcywgY2Fk
ZHJfdCBhc2EsIGludCAqYWxlbik7IH0KMzMJU1RECVBPU0lYCXsgaW50IGFj
Y2VzcyhjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOyB9CjM0CVNURAlCU0QJeyBp
bnQgY2hmbGFncyhjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOyB9CjM1CVNURAlC
U0QJeyBpbnQgZmNoZmxhZ3MoaW50IGZkLCBpbnQgZmxhZ3MpOyB9CjM2CVNU
RAlCU0QJeyBpbnQgc3luYyh2b2lkKTsgfQozNwlTVEQJUE9TSVgJeyBpbnQg
a2lsbChpbnQgcGlkLCBpbnQgc2lnbnVtKTsgfQozOAlDT01QQVQJUE9TSVgJ
eyBpbnQgc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qgb3N0YXQgKnViKTsgfQoz
OQlTVEQJUE9TSVgJeyBwaWRfdCBnZXRwcGlkKHZvaWQpOyB9CjQwCUNPTVBB
VAlQT1NJWAl7IGludCBsc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qgb3N0YXQg
KnViKTsgfQo0MQlTVEQJUE9TSVgJeyBpbnQgZHVwKHVfaW50IGZkKTsgfQo0
MglTVEQJUE9TSVgJeyBpbnQgcGlwZSh2b2lkKTsgfQo0MwlTVEQJUE9TSVgJ
eyBnaWRfdCBnZXRlZ2lkKHZvaWQpOyB9CjQ0CVNURAlCU0QJeyBpbnQgcHJv
ZmlsKGNhZGRyX3Qgc2FtcGxlcywgc2l6ZV90IHNpemUsIFwKCQkJICAgIHNp
emVfdCBvZmZzZXQsIHVfaW50IHNjYWxlKTsgfQo0NQlTVEQJQlNECXsgaW50
IGt0cmFjZShjb25zdCBjaGFyICpmbmFtZSwgaW50IG9wcywgaW50IGZhY3Ms
IFwKCQkJICAgIGludCBwaWQpOyB9CjQ2CU9CU09MCU5PSElERQlmcmVlYnNk
M19zaWdhY3Rpb24KNDcJTVBTQUZFCVNURAlQT1NJWAl7IGdpZF90IGdldGdp
ZCh2b2lkKTsgfQo0OAlPQlNPTAlOT0hJREUJZnJlZWJzZDNfc2lncHJvY21h
c2sKOyBYWFggbm90ZSBub25zdGFuZGFyZCAoYm9ndXMpIGNhbGxpbmcgY29u
dmVudGlvbiAtIHRoZSBsaWJjIHN0dWIgcGFzc2VzCjsgdXMgdGhlIG1hc2ss
IG5vdCBhIHBvaW50ZXIgdG8gaXQsIGFuZCB3ZSByZXR1cm4gdGhlIG9sZCBt
YXNrIGFzIHRoZQo7IChpbnQpIHJldHVybiB2YWx1ZS4KNDkJU1RECUJTRAl7
IGludCBnZXRsb2dpbihjaGFyICpuYW1lYnVmLCB1X2ludCBuYW1lbGVuKTsg
fQo1MAlTVEQJQlNECXsgaW50IHNldGxvZ2luKGNoYXIgKm5hbWVidWYpOyB9
CjUxCVNURAlCU0QJeyBpbnQgYWNjdChjaGFyICpwYXRoKTsgfQo1MglPQlNP
TAlOT0hJREUJZnJlZWJzZDNfc2lncGVuZGluZwo1MwlTVEQJQlNECXsgaW50
IHNpZ2FsdHN0YWNrKHN0YWNrX3QgKnNzLCBzdGFja190ICpvc3MpOyB9CjU0
CVNURAlQT1NJWAl7IGludCBpb2N0bChpbnQgZmQsIHVfbG9uZyBjb20sIGNh
ZGRyX3QgZGF0YSk7IH0KNTUJU1RECUJTRAl7IGludCByZWJvb3QoaW50IG9w
dCk7IH0KNTYJU1RECVBPU0lYCXsgaW50IHJldm9rZShjaGFyICpwYXRoKTsg
fQo1NwlTVEQJUE9TSVgJeyBpbnQgc3ltbGluayhjaGFyICpwYXRoLCBjaGFy
ICpsaW5rKTsgfQo1OAlTVEQJUE9TSVgJeyBpbnQgcmVhZGxpbmsoY2hhciAq
cGF0aCwgY2hhciAqYnVmLCBpbnQgY291bnQpOyB9CjU5CVNURAlQT1NJWAl7
IGludCBleGVjdmUoY2hhciAqZm5hbWUsIGNoYXIgKiphcmd2LCBjaGFyICoq
ZW52dik7IH0KNjAJTVBTQUZFCVNURAlQT1NJWAl7IGludCB1bWFzayhpbnQg
bmV3bWFzayk7IH0gdW1hc2sgdW1hc2tfYXJncyBpbnQKNjEJU1RECUJTRAl7
IGludCBjaHJvb3QoY2hhciAqcGF0aCk7IH0KNjIJQ09NUEFUCVBPU0lYCXsg
aW50IGZzdGF0KGludCBmZCwgc3RydWN0IG9zdGF0ICpzYik7IH0KNjMJQ09N
UEFUCUJTRAl7IGludCBnZXRrZXJuaW5mbyhpbnQgb3AsIGNoYXIgKndoZXJl
LCBzaXplX3QgKnNpemUsIFwKCQkJICAgIGludCBhcmcpOyB9IGdldGtlcm5p
bmZvIGdldGtlcm5pbmZvX2FyZ3MgaW50CjY0CUNPTVBBVAlCU0QJeyBpbnQg
Z2V0cGFnZXNpemUodm9pZCk7IH0gXAoJCQkgICAgZ2V0cGFnZXNpemUgZ2V0
cGFnZXNpemVfYXJncyBpbnQKNjUJU1RECUJTRAl7IGludCBtc3luYyh2b2lk
ICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOyB9CjY2CVNURAlCU0QJ
eyBpbnQgdmZvcmsodm9pZCk7IH0KNjcJT0JTT0wJTk9ISURFCXZyZWFkCjY4
CU9CU09MCU5PSElERQl2d3JpdGUKNjkJU1RECUJTRAl7IGludCBzYnJrKGlu
dCBpbmNyKTsgfQo3MAlTVEQJQlNECXsgaW50IHNzdGsoaW50IGluY3IpOyB9
CjcxCUNPTVBBVAlCU0QJeyBpbnQgbW1hcCh2b2lkICphZGRyLCBpbnQgbGVu
LCBpbnQgcHJvdCwgXAoJCQkgICAgaW50IGZsYWdzLCBpbnQgZmQsIGxvbmcg
cG9zKTsgfQo3MglTVEQJQlNECXsgaW50IG92YWR2aXNlKGludCBhbm9tKTsg
fSB2YWR2aXNlIG92YWR2aXNlX2FyZ3MgaW50CjczCVNURAlCU0QJeyBpbnQg
bXVubWFwKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOyB9Cjc0CVNURAlCU0QJ
eyBpbnQgbXByb3RlY3QoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbiwg
aW50IHByb3QpOyB9Cjc1CVNURAlCU0QJeyBpbnQgbWFkdmlzZSh2b2lkICph
ZGRyLCBzaXplX3QgbGVuLCBpbnQgYmVoYXYpOyB9Cjc2CU9CU09MCU5PSElE
RQl2aGFuZ3VwCjc3CU9CU09MCU5PSElERQl2bGltaXQKNzgJU1RECUJTRAl7
IGludCBtaW5jb3JlKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIFwK
CQkJICAgIGNoYXIgKnZlYyk7IH0KNzkJU1RECVBPU0lYCXsgaW50IGdldGdy
b3Vwcyh1X2ludCBnaWRzZXRzaXplLCBnaWRfdCAqZ2lkc2V0KTsgfQo4MAlT
VEQJUE9TSVgJeyBpbnQgc2V0Z3JvdXBzKHVfaW50IGdpZHNldHNpemUsIGdp
ZF90ICpnaWRzZXQpOyB9CjgxCU1QU0FGRQlTVEQJUE9TSVgJeyBpbnQgZ2V0
cGdycCh2b2lkKTsgfQo4MglTVEQJUE9TSVgJeyBpbnQgc2V0cGdpZChpbnQg
cGlkLCBpbnQgcGdpZCk7IH0KODMJU1RECUJTRAl7IGludCBzZXRpdGltZXIo
dV9pbnQgd2hpY2gsIHN0cnVjdCBpdGltZXJ2YWwgKml0diwgXAoJCQkgICAg
c3RydWN0IGl0aW1lcnZhbCAqb2l0dik7IH0KODQJQ09NUEFUCUJTRAl7IGlu
dCB3YWl0KHZvaWQpOyB9Cjg1CVNURAlCU0QJeyBpbnQgc3dhcG9uKGNoYXIg
Km5hbWUpOyB9Cjg2CVNURAlCU0QJeyBpbnQgZ2V0aXRpbWVyKHVfaW50IHdo
aWNoLCBzdHJ1Y3QgaXRpbWVydmFsICppdHYpOyB9Cjg3CUNPTVBBVAlCU0QJ
eyBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqaG9zdG5hbWUsIHVfaW50IGxlbik7
IH0gXAoJCQkgICAgZ2V0aG9zdG5hbWUgZ2V0aG9zdG5hbWVfYXJncyBpbnQK
ODgJQ09NUEFUCUJTRAl7IGludCBzZXRob3N0bmFtZShjaGFyICpob3N0bmFt
ZSwgdV9pbnQgbGVuKTsgfSBcCgkJCSAgICBzZXRob3N0bmFtZSBzZXRob3N0
bmFtZV9hcmdzIGludAo4OQlTVEQJQlNECXsgaW50IGdldGR0YWJsZXNpemUo
dm9pZCk7IH0KOTAJU1RECVBPU0lYCXsgaW50IGR1cDIodV9pbnQgZnJvbSwg
dV9pbnQgdG8pOyB9CjkxCVVOSU1QTAlCU0QJZ2V0ZG9wdAo5MglTVEQJUE9T
SVgJeyBpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCBsb25nIGFyZyk7IH0K
OyBYWFggc2hvdWxkIGJlCQl7IGludCBmY250bChpbnQgZmQsIGludCBjbWQs
IC4uLik7IH0KOyBidXQgd2UncmUgbm90IHJlYWR5IGZvciB2YXJhcmdzLgo7
IFhYWCBtYW4gcGFnZSBzYXlzIGBpbnQgYXJnJyB0b28uCjkzCVNURAlCU0QJ
eyBpbnQgc2VsZWN0KGludCBuZCwgZmRfc2V0ICppbiwgZmRfc2V0ICpvdSwg
XAoJCQkgICAgZmRfc2V0ICpleCwgc3RydWN0IHRpbWV2YWwgKnR2KTsgfQo5
NAlVTklNUEwJQlNECXNldGRvcHQKOTUJU1RECVBPU0lYCXsgaW50IGZzeW5j
KGludCBmZCk7IH0KOTYJU1RECUJTRAl7IGludCBzZXRwcmlvcml0eShpbnQg
d2hpY2gsIGludCB3aG8sIGludCBwcmlvKTsgfQo5NwlTVEQJQlNECXsgaW50
IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsg
fQo5OAlTVEQJQlNECXsgaW50IGNvbm5lY3QoaW50IHMsIGNhZGRyX3QgbmFt
ZSwgaW50IG5hbWVsZW4pOyB9Cjk5CUNQVF9OT0EJQlNECXsgaW50IGFjY2Vw
dChpbnQgcywgY2FkZHJfdCBuYW1lLCBpbnQgKmFuYW1lbGVuKTsgfSBcCgkJ
CSAgICBhY2NlcHQgYWNjZXB0X2FyZ3MgaW50CjEwMAlTVEQJQlNECXsgaW50
IGdldHByaW9yaXR5KGludCB3aGljaCwgaW50IHdobyk7IH0KMTAxCUNPTVBB
VAlCU0QJeyBpbnQgc2VuZChpbnQgcywgY2FkZHJfdCBidWYsIGludCBsZW4s
IGludCBmbGFncyk7IH0KMTAyCUNPTVBBVAlCU0QJeyBpbnQgcmVjdihpbnQg
cywgY2FkZHJfdCBidWYsIGludCBsZW4sIGludCBmbGFncyk7IH0KMTAzCU9C
U09MCU5PSElERQlmcmVlYnNkM19zaWdyZXR1cm4KMTA0CVNURAlCU0QJeyBp
bnQgYmluZChpbnQgcywgY2FkZHJfdCBuYW1lLCBpbnQgbmFtZWxlbik7IH0K
MTA1CVNURAlCU0QJeyBpbnQgc2V0c29ja29wdChpbnQgcywgaW50IGxldmVs
LCBpbnQgbmFtZSwgXAoJCQkgICAgY2FkZHJfdCB2YWwsIGludCB2YWxzaXpl
KTsgfQoxMDYJU1RECUJTRAl7IGludCBsaXN0ZW4oaW50IHMsIGludCBiYWNr
bG9nKTsgfQoxMDcJT0JTT0wJTk9ISURFCXZ0aW1lcwoxMDgJQ09NUEFUCUJT
RAl7IGludCBzaWd2ZWMoaW50IHNpZ251bSwgc3RydWN0IHNpZ3ZlYyAqbnN2
LCBcCgkJCSAgICBzdHJ1Y3Qgc2lndmVjICpvc3YpOyB9CjEwOQlDT01QQVQJ
QlNECXsgaW50IHNpZ2Jsb2NrKGludCBtYXNrKTsgfQoxMTAJQ09NUEFUCUJT
RAl7IGludCBzaWdzZXRtYXNrKGludCBtYXNrKTsgfQoxMTEJT0JTT0wJTk9I
SURFCWZyZWVic2QzX3NpZ3N1c3BlbmQKOyBYWFggbm90ZSBub25zdGFuZGFy
ZCAoYm9ndXMpIGNhbGxpbmcgY29udmVudGlvbiAtIHRoZSBsaWJjIHN0dWIg
cGFzc2VzCjsgdXMgdGhlIG1hc2ssIG5vdCBhIHBvaW50ZXIgdG8gaXQuCjEx
MglDT01QQVQJQlNECXsgaW50IHNpZ3N0YWNrKHN0cnVjdCBzaWdzdGFjayAq
bnNzLCBcCgkJCSAgICBzdHJ1Y3Qgc2lnc3RhY2sgKm9zcyk7IH0KMTEzCUNP
TVBBVAlCU0QJeyBpbnQgcmVjdm1zZyhpbnQgcywgc3RydWN0IG9tc2doZHIg
Km1zZywgaW50IGZsYWdzKTsgfQoxMTQJQ09NUEFUCUJTRAl7IGludCBzZW5k
bXNnKGludCBzLCBjYWRkcl90IG1zZywgaW50IGZsYWdzKTsgfQoxMTUJT0JT
T0wJTk9ISURFCXZ0cmFjZQoxMTYJTVBTQUZFCVNURAlCU0QJeyBpbnQgZ2V0
dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0cCwgXAoJCQkgICAgc3RydWN0
IHRpbWV6b25lICp0enApOyB9CjExNwlTVEQJQlNECXsgaW50IGdldHJ1c2Fn
ZShpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpOyB9CjExOAlTVEQJ
QlNECXsgaW50IGdldHNvY2tvcHQoaW50IHMsIGludCBsZXZlbCwgaW50IG5h
bWUsIFwKCQkJICAgIGNhZGRyX3QgdmFsLCBpbnQgKmF2YWxzaXplKTsgfQox
MTkJVU5JTVBMCU5PSElERQlyZXN1YmEgKEJTRC9PUyAyLngpCjEyMAlTVEQJ
QlNECXsgaW50IHJlYWR2KGludCBmZCwgc3RydWN0IGlvdmVjICppb3ZwLCB1
X2ludCBpb3ZjbnQpOyB9CjEyMQlTVEQJQlNECXsgaW50IHdyaXRldihpbnQg
ZmQsIHN0cnVjdCBpb3ZlYyAqaW92cCwgXAoJCQkgICAgdV9pbnQgaW92Y250
KTsgfQoxMjIJU1RECUJTRAl7IGludCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRp
bWV2YWwgKnR2LCBcCgkJCSAgICBzdHJ1Y3QgdGltZXpvbmUgKnR6cCk7IH0K
MTIzCVNURAlCU0QJeyBpbnQgZmNob3duKGludCBmZCwgaW50IHVpZCwgaW50
IGdpZCk7IH0KMTI0CVNURAlCU0QJeyBpbnQgZmNobW9kKGludCBmZCwgaW50
IG1vZGUpOyB9CjEyNQlDUFRfTk9BCUJTRAl7IGludCByZWN2ZnJvbShpbnQg
cywgY2FkZHJfdCBidWYsIHNpemVfdCBsZW4sIFwKCQkJICAgIGludCBmbGFn
cywgY2FkZHJfdCBmcm9tLCBpbnQgKmZyb21sZW5hZGRyKTsgfSBcCgkJCSAg
ICByZWN2ZnJvbSByZWN2ZnJvbV9hcmdzIGludAoxMjYJU1RECUJTRAl7IGlu
dCBzZXRyZXVpZChpbnQgcnVpZCwgaW50IGV1aWQpOyB9CjEyNwlTVEQJQlNE
CXsgaW50IHNldHJlZ2lkKGludCByZ2lkLCBpbnQgZWdpZCk7IH0KMTI4CVNU
RAlQT1NJWAl7IGludCByZW5hbWUoY2hhciAqZnJvbSwgY2hhciAqdG8pOyB9
CjEyOQlDT01QQVQJQlNECXsgaW50IHRydW5jYXRlKGNoYXIgKnBhdGgsIGxv
bmcgbGVuZ3RoKTsgfQoxMzAJQ09NUEFUCUJTRAl7IGludCBmdHJ1bmNhdGUo
aW50IGZkLCBsb25nIGxlbmd0aCk7IH0KMTMxCVNURAlCU0QJeyBpbnQgZmxv
Y2soaW50IGZkLCBpbnQgaG93KTsgfQoxMzIJU1RECVBPU0lYCXsgaW50IG1r
ZmlmbyhjaGFyICpwYXRoLCBpbnQgbW9kZSk7IH0KMTMzCVNURAlCU0QJeyBp
bnQgc2VuZHRvKGludCBzLCBjYWRkcl90IGJ1Ziwgc2l6ZV90IGxlbiwgXAoJ
CQkgICAgaW50IGZsYWdzLCBjYWRkcl90IHRvLCBpbnQgdG9sZW4pOyB9CjEz
NAlTVEQJQlNECXsgaW50IHNodXRkb3duKGludCBzLCBpbnQgaG93KTsgfQox
MzUJU1RECUJTRAl7IGludCBzb2NrZXRwYWlyKGludCBkb21haW4sIGludCB0
eXBlLCBpbnQgcHJvdG9jb2wsIFwKCQkJICAgIGludCAqcnN2KTsgfQoxMzYJ
U1RECVBPU0lYCXsgaW50IG1rZGlyKGNoYXIgKnBhdGgsIGludCBtb2RlKTsg
fQoxMzcJU1RECVBPU0lYCXsgaW50IHJtZGlyKGNoYXIgKnBhdGgpOyB9CjEz
OAlTVEQJQlNECXsgaW50IHV0aW1lcyhjaGFyICpwYXRoLCBzdHJ1Y3QgdGlt
ZXZhbCAqdHB0cik7IH0KMTM5CU9CU09MCU5PSElERQk0LjIgc2lncmV0dXJu
CjE0MAlTVEQJQlNECXsgaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKmRl
bHRhLCBcCgkJCSAgICBzdHJ1Y3QgdGltZXZhbCAqb2xkZGVsdGEpOyB9CjE0
MQlDT01QQVQJQlNECXsgaW50IGdldHBlZXJuYW1lKGludCBmZGVzLCBjYWRk
cl90IGFzYSwgaW50ICphbGVuKTsgfQoxNDIJQ09NUEFUCUJTRAl7IGxvbmcg
Z2V0aG9zdGlkKHZvaWQpOyB9CjE0MwlDT01QQVQJQlNECXsgaW50IHNldGhv
c3RpZChsb25nIGhvc3RpZCk7IH0KMTQ0CUNPTVBBVAlCU0QJeyBpbnQgZ2V0
cmxpbWl0KHVfaW50IHdoaWNoLCBzdHJ1Y3Qgb3JsaW1pdCAqcmxwKTsgfQox
NDUJQ09NUEFUCUJTRAl7IGludCBzZXRybGltaXQodV9pbnQgd2hpY2gsIHN0
cnVjdCBvcmxpbWl0ICpybHApOyB9CjE0NglDT01QQVQJQlNECXsgaW50IGtp
bGxwZyhpbnQgcGdpZCwgaW50IHNpZ251bSk7IH0KMTQ3CVNURAlQT1NJWAl7
IGludCBzZXRzaWQodm9pZCk7IH0KMTQ4CVNURAlCU0QJeyBpbnQgcXVvdGFj
dGwoY2hhciAqcGF0aCwgaW50IGNtZCwgaW50IHVpZCwgXAoJCQkgICAgY2Fk
ZHJfdCBhcmcpOyB9CjE0OQlDT01QQVQJQlNECXsgaW50IHF1b3RhKHZvaWQp
OyB9CjE1MAlDUFRfTk9BCUJTRAl7IGludCBnZXRzb2NrbmFtZShpbnQgZmRl
YywgY2FkZHJfdCBhc2EsIGludCAqYWxlbik7IH1cCgkJCSAgICBnZXRzb2Nr
bmFtZSBnZXRzb2NrbmFtZV9hcmdzIGludAoKOyBTeXNjYWxscyAxNTEtMTgw
IGluY2x1c2l2ZSBhcmUgcmVzZXJ2ZWQgZm9yIHZlbmRvci1zcGVjaWZpYwo7
IHN5c3RlbSBjYWxscy4gIChUaGlzIGluY2x1ZGVzIHZhcmlvdXMgY2FsbHMg
YWRkZWQgZm9yIGNvbXBhdGliaXR5Cjsgd2l0aCBvdGhlciBVbml4IHZhcmlh
bnRzLikKOyBTb21lIG9mIHRoZXNlIGNhbGxzIGFyZSBub3cgc3VwcG9ydGVk
IGJ5IEJTRC4uLgoxNTEJVU5JTVBMCU5PSElERQlzZW1fbG9jayAoQlNEL09T
IDIueCkKMTUyCVVOSU1QTAlOT0hJREUJc2VtX3dha2V1cCAoQlNEL09TIDIu
eCkKMTUzCVVOSU1QTAlOT0hJREUJYXN5bmNkYWVtb24gKEJTRC9PUyAyLngp
CjE1NAlVTklNUEwJTk9ISURFCW5vc3lzCjsgMTU1IGlzIGluaXRpYWxpemVk
IGJ5IHRoZSBORlMgY29kZSwgaWYgcHJlc2VudC4KMTU1CU5PSU1QTAlCU0QJ
eyBpbnQgbmZzc3ZjKGludCBmbGFnLCBjYWRkcl90IGFyZ3ApOyB9CjE1NglD
T01QQVQJQlNECXsgaW50IGdldGRpcmVudHJpZXMoaW50IGZkLCBjaGFyICpi
dWYsIHVfaW50IGNvdW50LCBcCgkJCSAgICBsb25nICpiYXNlcCk7IH0KMTU3
CVNURAlCU0QJeyBpbnQgc3RhdGZzKGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0
ZnMgKmJ1Zik7IH0KMTU4CVNURAlCU0QJeyBpbnQgZnN0YXRmcyhpbnQgZmQs
IHN0cnVjdCBzdGF0ZnMgKmJ1Zik7IH0KMTU5CVVOSU1QTAlOT0hJREUJbm9z
eXMKMTYwCVVOSU1QTAlOT0hJREUJbm9zeXMKOyAxNjEgaXMgaW5pdGlhbGl6
ZWQgYnkgdGhlIE5GUyBjb2RlLCBpZiBwcmVzZW50LgoxNjEJU1RECUJTRAl7
IGludCBnZXRmaChjaGFyICpmbmFtZSwgc3RydWN0IGZoYW5kbGUgKmZocCk7
IH0KMTYyCVNURAlCU0QJeyBpbnQgZ2V0ZG9tYWlubmFtZShjaGFyICpkb21h
aW5uYW1lLCBpbnQgbGVuKTsgfQoxNjMJU1RECUJTRAl7IGludCBzZXRkb21h
aW5uYW1lKGNoYXIgKmRvbWFpbm5hbWUsIGludCBsZW4pOyB9CjE2NAlTVEQJ
QlNECXsgaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpuYW1lKTsgfQoxNjUJ
U1RECUJTRAl7IGludCBzeXNhcmNoKGludCBvcCwgY2hhciAqcGFybXMpOyB9
CjE2NglTVEQJQlNECXsgaW50IHJ0cHJpbyhpbnQgZnVuY3Rpb24sIHBpZF90
IHBpZCwgXAoJCQkgICAgc3RydWN0IHJ0cHJpbyAqcnRwKTsgfQoxNjcJVU5J
TVBMCU5PSElERQlub3N5cwoxNjgJVU5JTVBMCU5PSElERQlub3N5cwoxNjkJ
U1RECUJTRAl7IGludCBzZW1zeXMoaW50IHdoaWNoLCBpbnQgYTIsIGludCBh
MywgaW50IGE0LCBcCgkJCSAgICBpbnQgYTUpOyB9CjsgWFhYIHNob3VsZCBi
ZQkJeyBpbnQgc2Vtc3lzKGludCB3aGljaCwgLi4uKTsgfQoxNzAJU1RECUJT
RAl7IGludCBtc2dzeXMoaW50IHdoaWNoLCBpbnQgYTIsIGludCBhMywgaW50
IGE0LCBcCgkJCSAgICBpbnQgYTUsIGludCBhNik7IH0KOyBYWFggc2hvdWxk
IGJlCQl7IGludCBtc2dzeXMoaW50IHdoaWNoLCAuLi4pOyB9CjE3MQlTVEQJ
QlNECXsgaW50IHNobXN5cyhpbnQgd2hpY2gsIGludCBhMiwgaW50IGEzLCBp
bnQgYTQpOyB9CjsgWFhYIHNob3VsZCBiZQkJeyBpbnQgc2htc3lzKGludCB3
aGljaCwgLi4uKTsgfQoxNzIJVU5JTVBMCU5PSElERQlub3N5cwoxNzMJU1RE
CVBPU0lYCXsgc3NpemVfdCBwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6
ZV90IG5ieXRlLCBcCgkJCSAgICBpbnQgcGFkLCBvZmZfdCBvZmZzZXQpOyB9
CjE3NAlTVEQJUE9TSVgJeyBzc2l6ZV90IHB3cml0ZShpbnQgZmQsIGNvbnN0
IHZvaWQgKmJ1ZiwgXAoJCQkgICAgc2l6ZV90IG5ieXRlLCBpbnQgcGFkLCBv
ZmZfdCBvZmZzZXQpOyB9CjE3NQlVTklNUEwJTk9ISURFCW5vc3lzCjE3NglT
VEQJQlNECXsgaW50IG50cF9hZGp0aW1lKHN0cnVjdCB0aW1leCAqdHApOyB9
CjE3NwlVTklNUEwJTk9ISURFCXNmb3JrIChCU0QvT1MgMi54KQoxNzgJVU5J
TVBMCU5PSElERQlnZXRkZXNjcmlwdG9yIChCU0QvT1MgMi54KQoxNzkJVU5J
TVBMCU5PSElERQlzZXRkZXNjcmlwdG9yIChCU0QvT1MgMi54KQoxODAJVU5J
TVBMCU5PSElERQlub3N5cwoKOyBTeXNjYWxscyAxODEtMTk5IGFyZSB1c2Vk
IGJ5L3Jlc2VydmVkIGZvciBCU0QKMTgxCVNURAlQT1NJWAl7IGludCBzZXRn
aWQoZ2lkX3QgZ2lkKTsgfQoxODIJU1RECUJTRAl7IGludCBzZXRlZ2lkKGdp
ZF90IGVnaWQpOyB9CjE4MwlTVEQJQlNECXsgaW50IHNldGV1aWQodWlkX3Qg
ZXVpZCk7IH0KMTg0CVVOSU1QTAlCU0QJbGZzX2JtYXB2CjE4NQlVTklNUEwJ
QlNECWxmc19tYXJrdgoxODYJVU5JTVBMCUJTRAlsZnNfc2VnY2xlYW4KMTg3
CVVOSU1QTAlCU0QJbGZzX3NlZ3dhaXQKMTg4CVNURAlQT1NJWAl7IGludCBz
dGF0KGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICp1Yik7IH0KMTg5CVNURAlQ
T1NJWAl7IGludCBmc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYik7IH0K
MTkwCVNURAlQT1NJWAl7IGludCBsc3RhdChjaGFyICpwYXRoLCBzdHJ1Y3Qg
c3RhdCAqdWIpOyB9CjE5MQlTVEQJUE9TSVgJeyBpbnQgcGF0aGNvbmYoY2hh
ciAqcGF0aCwgaW50IG5hbWUpOyB9CjE5MglTVEQJUE9TSVgJeyBpbnQgZnBh
dGhjb25mKGludCBmZCwgaW50IG5hbWUpOyB9CjE5MwlVTklNUEwJTk9ISURF
CW5vc3lzCjE5NAlTVEQJQlNECXsgaW50IGdldHJsaW1pdCh1X2ludCB3aGlj
aCwgXAoJCQkgICAgc3RydWN0IHJsaW1pdCAqcmxwKTsgfSBcCgkJCSAgICBn
ZXRybGltaXQgX19nZXRybGltaXRfYXJncyBpbnQKMTk1CVNURAlCU0QJeyBp
bnQgc2V0cmxpbWl0KHVfaW50IHdoaWNoLCBcCgkJCSAgICBzdHJ1Y3Qgcmxp
bWl0ICpybHApOyB9IFwKCQkJICAgIHNldHJsaW1pdCBfX3NldHJsaW1pdF9h
cmdzIGludAoxOTYJU1RECUJTRAl7IGludCBnZXRkaXJlbnRyaWVzKGludCBm
ZCwgY2hhciAqYnVmLCB1X2ludCBjb3VudCwgXAoJCQkgICAgbG9uZyAqYmFz
ZXApOyB9CjE5NwlTVEQJQlNECXsgY2FkZHJfdCBtbWFwKGNhZGRyX3QgYWRk
ciwgc2l6ZV90IGxlbiwgaW50IHByb3QsIFwKCQkJICAgIGludCBmbGFncywg
aW50IGZkLCBpbnQgcGFkLCBvZmZfdCBwb3MpOyB9CjE5OAlTVEQJTk9ISURF
CXsgaW50IG5vc3lzKHZvaWQpOyB9IF9fc3lzY2FsbCBfX3N5c2NhbGxfYXJn
cyBpbnQKMTk5CVNURAlQT1NJWAl7IG9mZl90IGxzZWVrKGludCBmZCwgaW50
IHBhZCwgb2ZmX3Qgb2Zmc2V0LCBcCgkJCSAgICBpbnQgd2hlbmNlKTsgfQoy
MDAJU1RECUJTRAl7IGludCB0cnVuY2F0ZShjaGFyICpwYXRoLCBpbnQgcGFk
LCBvZmZfdCBsZW5ndGgpOyB9CjIwMQlTVEQJQlNECXsgaW50IGZ0cnVuY2F0
ZShpbnQgZmQsIGludCBwYWQsIG9mZl90IGxlbmd0aCk7IH0KMjAyCVNURAlC
U0QJeyBpbnQgX19zeXNjdGwoaW50ICpuYW1lLCB1X2ludCBuYW1lbGVuLCB2
b2lkICpvbGQsIFwKCQkJICAgIHNpemVfdCAqb2xkbGVucCwgdm9pZCAqbmV3
LCBzaXplX3QgbmV3bGVuKTsgfSBcCgkJCSAgICBfX3N5c2N0bCBzeXNjdGxf
YXJncyBpbnQKOyBwcm9wZXJseSwgX19zeXNjdGwgc2hvdWxkIGJlIGEgTk9I
SURFLCBidXQgbWFraW5nIGFuIGV4Y2VwdGlvbgo7IGhlcmUgYWxsb3dzIHRv
IGF2b2lkIG9uZSBpbiBsaWJjL3N5cy9NYWtlZmlsZS5pbmMuCjIwMwlTVEQJ
QlNECXsgaW50IG1sb2NrKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4p
OyB9CjIwNAlTVEQJQlNECXsgaW50IG11bmxvY2soY29uc3Qgdm9pZCAqYWRk
ciwgc2l6ZV90IGxlbik7IH0KMjA1CVNURAlCU0QJeyBpbnQgdW5kZWxldGUo
Y2hhciAqcGF0aCk7IH0KMjA2CVNURAlCU0QJeyBpbnQgZnV0aW1lcyhpbnQg
ZmQsIHN0cnVjdCB0aW1ldmFsICp0cHRyKTsgfQoyMDcJU1RECUJTRAl7IGlu
dCBnZXRwZ2lkKHBpZF90IHBpZCk7IH0KMjA4CVVOSU1QTAlOT0hJREUJbmV3
cmVib290IChOZXRCU0QpCjIwOQlTVEQJQlNECXsgaW50IHBvbGwoc3RydWN0
IHBvbGxmZCAqZmRzLCB1X2ludCBuZmRzLCBcCgkJCSAgICBpbnQgdGltZW91
dCk7IH0KCjsKOyBUaGUgZm9sbG93aW5nIGFyZSByZXNlcnZlZCBmb3IgbG9h
ZGFibGUgc3lzY2FsbHMKOwo7IDIxMCBpcyB1c2VkIGJ5IHRoZSBDaGVja3Bv
aW50IE1vZHVsZQoyMTAJTk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lz
IG5vc3lzX2FyZ3MgaW50CjIxMQlOT0RFRglOT0hJREUJbGttbm9zeXMgbGtt
bm9zeXMgbm9zeXNfYXJncyBpbnQKMjEyCU5PREVGCU5PSElERQlsa21ub3N5
cyBsa21ub3N5cyBub3N5c19hcmdzIGludAoyMTMJTk9ERUYJTk9ISURFCWxr
bW5vc3lzIGxrbW5vc3lzIG5vc3lzX2FyZ3MgaW50CjIxNAlOT0RFRglOT0hJ
REUJbGttbm9zeXMgbGttbm9zeXMgbm9zeXNfYXJncyBpbnQKMjE1CU5PREVG
CU5PSElERQlsa21ub3N5cyBsa21ub3N5cyBub3N5c19hcmdzIGludAoyMTYJ
Tk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lzIG5vc3lzX2FyZ3MgaW50
CjIxNwlOT0RFRglOT0hJREUJbGttbm9zeXMgbGttbm9zeXMgbm9zeXNfYXJn
cyBpbnQKMjE4CU5PREVGCU5PSElERQlsa21ub3N5cyBsa21ub3N5cyBub3N5
c19hcmdzIGludAoyMTkJTk9ERUYJTk9ISURFCWxrbW5vc3lzIGxrbW5vc3lz
IG5vc3lzX2FyZ3MgaW50Cgo7CjsgVGhlIGZvbGxvd2luZyB3ZXJlIGludHJv
ZHVjZWQgd2l0aCBOZXRCU0QvNC40TGl0ZS0yCjsKMjIwCVNURAlCU0QJeyBp
bnQgX19zZW1jdGwoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQgY21kLCBc
CgkJCSAgICB1bmlvbiBzZW11biAqYXJnKTsgfQoyMjEJU1RECUJTRAl7IGlu
dCBzZW1nZXQoa2V5X3Qga2V5LCBpbnQgbnNlbXMsIGludCBzZW1mbGcpOyB9
CjIyMglTVEQJQlNECXsgaW50IHNlbW9wKGludCBzZW1pZCwgc3RydWN0IHNl
bWJ1ZiAqc29wcywgXAoJCQkgICAgdV9pbnQgbnNvcHMpOyB9CjIyMwlVTklN
UEwJTk9ISURFCXNlbWNvbmZpZwoyMjQJU1RECUJTRAl7IGludCBtc2djdGwo
aW50IG1zcWlkLCBpbnQgY21kLCBcCgkJCSAgICBzdHJ1Y3QgbXNxaWRfZHMg
KmJ1Zik7IH0KMjI1CVNURAlCU0QJeyBpbnQgbXNnZ2V0KGtleV90IGtleSwg
aW50IG1zZ2ZsZyk7IH0KMjI2CVNURAlCU0QJeyBpbnQgbXNnc25kKGludCBt
c3FpZCwgdm9pZCAqbXNncCwgc2l6ZV90IG1zZ3N6LCBcCgkJCSAgICBpbnQg
bXNnZmxnKTsgfQoyMjcJU1RECUJTRAl7IGludCBtc2dyY3YoaW50IG1zcWlk
LCB2b2lkICptc2dwLCBzaXplX3QgbXNnc3osIFwKCQkJICAgIGxvbmcgbXNn
dHlwLCBpbnQgbXNnZmxnKTsgfQoyMjgJU1RECUJTRAl7IGludCBzaG1hdChp
bnQgc2htaWQsIHZvaWQgKnNobWFkZHIsIGludCBzaG1mbGcpOyB9CjIyOQlT
VEQJQlNECXsgaW50IHNobWN0bChpbnQgc2htaWQsIGludCBjbWQsIFwKCQkJ
ICAgIHN0cnVjdCBzaG1pZF9kcyAqYnVmKTsgfQoyMzAJU1RECUJTRAl7IGlu
dCBzaG1kdCh2b2lkICpzaG1hZGRyKTsgfQoyMzEJU1RECUJTRAl7IGludCBz
aG1nZXQoa2V5X3Qga2V5LCBpbnQgc2l6ZSwgaW50IHNobWZsZyk7IH0KOwoy
MzIJU1RECVBPU0lYCXsgaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNs
b2NrX2lkLCBcCgkJCSAgICBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsgfQoyMzMJ
U1RECVBPU0lYCXsgaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90IGNsb2Nr
X2lkLCBcCgkJCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsgfQoy
MzQJU1RECVBPU0lYCXsgaW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QgY2xv
Y2tfaWQsIFwKCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHApOyB9CjIzNQlV
TklNUEwJTk9ISURFCXRpbWVyX2NyZWF0ZQoyMzYJVU5JTVBMCU5PSElERQl0
aW1lcl9kZWxldGUKMjM3CVVOSU1QTAlOT0hJREUJdGltZXJfc2V0dGltZQoy
MzgJVU5JTVBMCU5PSElERQl0aW1lcl9nZXR0aW1lCjIzOQlVTklNUEwJTk9I
SURFCXRpbWVyX2dldG92ZXJydW4KMjQwCVNURAlQT1NJWAl7IGludCBuYW5v
c2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpycXRwLCBcCgkJCSAgICBz
dHJ1Y3QgdGltZXNwZWMgKnJtdHApOyB9CjI0MQlVTklNUEwJTk9ISURFCW5v
c3lzCjI0MglVTklNUEwJTk9ISURFCW5vc3lzCjI0MwlVTklNUEwJTk9ISURF
CW5vc3lzCjI0NAlVTklNUEwJTk9ISURFCW5vc3lzCjI0NQlVTklNUEwJTk9I
SURFCW5vc3lzCjI0NglVTklNUEwJTk9ISURFCW5vc3lzCjI0NwlVTklNUEwJ
Tk9ISURFCW5vc3lzCjI0OAlVTklNUEwJTk9ISURFCW5vc3lzCjI0OQlVTklN
UEwJTk9ISURFCW5vc3lzCjsgc3lzY2FsbCBudW1iZXJzIGluaXRpYWxseSB1
c2VkIGluIE9wZW5CU0QKMjUwCVNURAlCU0QJeyBpbnQgbWluaGVyaXQodm9p
ZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGluaGVyaXQpOyB9CjI1MQlTVEQJ
QlNECXsgaW50IHJmb3JrKGludCBmbGFncyk7IH0KMjUyCVNURAlCU0QJeyBp
bnQgb3BlbmJzZF9wb2xsKHN0cnVjdCBwb2xsZmQgKmZkcywgdV9pbnQgbmZk
cywgXAoJCQkgICAgaW50IHRpbWVvdXQpOyB9CjI1MwlTVEQJQlNECXsgaW50
IGlzc2V0dWdpZCh2b2lkKTsgfQoyNTQJU1RECUJTRAl7IGludCBsY2hvd24o
Y2hhciAqcGF0aCwgaW50IHVpZCwgaW50IGdpZCk7IH0KMjU1CVVOSU1QTAlO
T0hJREUJbm9zeXMKMjU2CVVOSU1QTAlOT0hJREUJbm9zeXMKMjU3CVVOSU1Q
TAlOT0hJREUJbm9zeXMKMjU4CVVOSU1QTAlOT0hJREUJbm9zeXMKMjU5CVVO
SU1QTAlOT0hJREUJbm9zeXMKMjYwCVVOSU1QTAlOT0hJREUJbm9zeXMKMjYx
CVVOSU1QTAlOT0hJREUJbm9zeXMKMjYyCVVOSU1QTAlOT0hJREUJbm9zeXMK
MjYzCVVOSU1QTAlOT0hJREUJbm9zeXMKMjY0CVVOSU1QTAlOT0hJREUJbm9z
eXMKMjY1CVVOSU1QTAlOT0hJREUJbm9zeXMKMjY2CVVOSU1QTAlOT0hJREUJ
bm9zeXMKMjY3CVVOSU1QTAlOT0hJREUJbm9zeXMKMjY4CVVOSU1QTAlOT0hJ
REUJbm9zeXMKMjY5CVVOSU1QTAlOT0hJREUJbm9zeXMKMjcwCVVOSU1QTAlO
T0hJREUJbm9zeXMKMjcxCVVOSU1QTAlOT0hJREUJbm9zeXMKMjcyCVNURAlC
U0QJeyBpbnQgZ2V0ZGVudHMoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBj
b3VudCk7IH0KMjczCVVOSU1QTAlOT0hJREUJbm9zeXMKMjc0CVNURAlCU0QJ
eyBpbnQgbGNobW9kKGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKTsgfQoyNzUJ
Tk9QUk9UTyBCU0QJeyBpbnQgbGNob3duKGNoYXIgKnBhdGgsIHVpZF90IHVp
ZCwgZ2lkX3QgZ2lkKTsgfSBuZXRic2RfbGNob3duIGxjaG93bl9hcmdzIGlu
dAoyNzYJU1RECUJTRAl7IGludCBsdXRpbWVzKGNoYXIgKnBhdGgsIHN0cnVj
dCB0aW1ldmFsICp0cHRyKTsgfQoyNzcJTk9QUk9UTwlCU0QJeyBpbnQgbXN5
bmModm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKTsgfSBuZXRi
c2RfbXN5bmMgbXN5bmNfYXJncyBpbnQKMjc4CVNURAlCU0QJeyBpbnQgbnN0
YXQoY2hhciAqcGF0aCwgc3RydWN0IG5zdGF0ICp1Yik7IH0KMjc5CVNURAlC
U0QJeyBpbnQgbmZzdGF0KGludCBmZCwgc3RydWN0IG5zdGF0ICpzYik7IH0K
MjgwCVNURAlCU0QJeyBpbnQgbmxzdGF0KGNoYXIgKnBhdGgsIHN0cnVjdCBu
c3RhdCAqdWIpOyB9CjI4MQlVTklNUEwJTk9ISURFCW5vc3lzCjI4MglVTklN
UEwJTk9ISURFCW5vc3lzCjI4MwlVTklNUEwJTk9ISURFCW5vc3lzCjI4NAlV
TklNUEwJTk9ISURFCW5vc3lzCjI4NQlVTklNUEwJTk9ISURFCW5vc3lzCjI4
NglVTklNUEwJTk9ISURFCW5vc3lzCjI4NwlVTklNUEwJTk9ISURFCW5vc3lz
CjI4OAlVTklNUEwJTk9ISURFCW5vc3lzCjI4OQlVTklNUEwJTk9ISURFCW5v
c3lzCjI5MAlVTklNUEwJTk9ISURFCW5vc3lzCjI5MQlVTklNUEwJTk9ISURF
CW5vc3lzCjI5MglVTklNUEwJTk9ISURFCW5vc3lzCjI5MwlVTklNUEwJTk9I
SURFCW5vc3lzCjI5NAlVTklNUEwJTk9ISURFCW5vc3lzCjI5NQlVTklNUEwJ
Tk9ISURFCW5vc3lzCjI5NglVTklNUEwJTk9ISURFCW5vc3lzCjsgWFhYIDI5
NyBpcyAzMDAgaW4gTmV0QlNEIAoyOTcJU1RECUJTRAl7IGludCBmaHN0YXRm
cyhjb25zdCBzdHJ1Y3QgZmhhbmRsZSAqdV9maHAsIHN0cnVjdCBzdGF0ZnMg
KmJ1Zik7IH0KMjk4CVNURAlCU0QJeyBpbnQgZmhvcGVuKGNvbnN0IHN0cnVj
dCBmaGFuZGxlICp1X2ZocCwgaW50IGZsYWdzKTsgfQoyOTkJU1RECUJTRCAJ
eyBpbnQgZmhzdGF0KGNvbnN0IHN0cnVjdCBmaGFuZGxlICp1X2ZocCwgc3Ry
dWN0IHN0YXQgKnNiKTsgfQo7IHN5c2NhbGwgbnVtYmVycyBmb3IgRnJlZUJT
RAozMDAJU1RECUJTRAl7IGludCBtb2RuZXh0KGludCBtb2RpZCk7IH0KMzAx
CVNURAlCU0QJeyBpbnQgbW9kc3RhdChpbnQgbW9kaWQsIHN0cnVjdCBtb2R1
bGVfc3RhdCogc3RhdCk7IH0KMzAyCVNURAlCU0QJeyBpbnQgbW9kZm5leHQo
aW50IG1vZGlkKTsgfQozMDMJU1RECUJTRAl7IGludCBtb2RmaW5kKGNvbnN0
IGNoYXIgKm5hbWUpOyB9CjMwNAlTVEQJQlNECXsgaW50IGtsZGxvYWQoY29u
c3QgY2hhciAqZmlsZSk7IH0KMzA1CVNURAlCU0QJeyBpbnQga2xkdW5sb2Fk
KGludCBmaWxlaWQpOyB9CjMwNglTVEQJQlNECXsgaW50IGtsZGZpbmQoY29u
c3QgY2hhciAqZmlsZSk7IH0KMzA3CVNURAlCU0QJeyBpbnQga2xkbmV4dChp
bnQgZmlsZWlkKTsgfQozMDgJU1RECUJTRAl7IGludCBrbGRzdGF0KGludCBm
aWxlaWQsIHN0cnVjdCBrbGRfZmlsZV9zdGF0KiBzdGF0KTsgfQozMDkJU1RE
CUJTRAl7IGludCBrbGRmaXJzdG1vZChpbnQgZmlsZWlkKTsgfQozMTAJU1RE
CUJTRAl7IGludCBnZXRzaWQocGlkX3QgcGlkKTsgfQozMTEJU1RECUJTRAl7
IGludCBzZXRyZXN1aWQodWlkX3QgcnVpZCwgdWlkX3QgZXVpZCwgdWlkX3Qg
c3VpZCk7IH0KMzEyCVNURAlCU0QJeyBpbnQgc2V0cmVzZ2lkKGdpZF90IHJn
aWQsIGdpZF90IGVnaWQsIGdpZF90IHNnaWQpOyB9CjMxMwlPQlNPTAlOT0hJ
REUJc2lnbmFub3NsZWVwCjMxNCAgICAgU1REICAgICBCU0QgICAgIHsgaW50
IGFpb19yZXR1cm4oc3RydWN0IGFpb2NiICphaW9jYnApOyB9CjMxNSAgICAg
U1REICAgICBCU0QgICAgIHsgaW50IGFpb19zdXNwZW5kKHN0cnVjdCBhaW9j
YiAqIGNvbnN0ICogYWlvY2JwLCBpbnQgbmVudCwgY29uc3Qgc3RydWN0IHRp
bWVzcGVjICp0aW1lb3V0KTsgfQozMTYgICAgIFNURCAgICAgQlNEICAgICB7
IGludCBhaW9fY2FuY2VsKGludCBmZCwgc3RydWN0IGFpb2NiICphaW9jYnAp
OyB9CjMxNyAgICAgU1REICAgICBCU0QgICAgIHsgaW50IGFpb19lcnJvcihz
dHJ1Y3QgYWlvY2IgKmFpb2NicCk7IH0KMzE4ICAgICBTVEQgICAgIEJTRCAg
ICAgeyBpbnQgYWlvX3JlYWQoc3RydWN0IGFpb2NiICphaW9jYnApOyB9CjMx
OSAgICAgU1REICAgICBCU0QgICAgIHsgaW50IGFpb193cml0ZShzdHJ1Y3Qg
YWlvY2IgKmFpb2NicCk7IH0KMzIwICAgICBTVEQgICAgIEJTRCAgICAgeyBp
bnQgbGlvX2xpc3RpbyhpbnQgbW9kZSwgc3RydWN0IGFpb2NiICogY29uc3Qg
KmFjYl9saXN0LCBpbnQgbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpzaWcpOyB9
CjMyMSAgICAgU1REICAgICBCU0QgICAgIHsgaW50IHlpZWxkKHZvaWQpOyB9
CjMyMiAgICAgU1REICAgICBCU0QgICAgIHsgaW50IHRocl9zbGVlcChjb25z
dCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOyB9CjMyMyAgICAgU1REICAg
ICBCU0QgICAgIHsgaW50IHRocl93YWtldXAocGlkX3QgcGlkKTsgfQozMjQg
ICAgIFNURCAgICAgQlNEICAgICB7IGludCBtbG9ja2FsbChpbnQgaG93KTsg
fQozMjUgICAgIFNURCAgICAgQlNEICAgICB7IGludCBtdW5sb2NrYWxsKHZv
aWQpOyB9CjMyNiAgICAgU1REICAgICBCU0QgICAgIHsgaW50IF9fZ2V0Y3dk
KHVfY2hhciAqYnVmLCB1X2ludCBidWZsZW4pOyB9CgozMjcgICAgIFNURCAg
ICAgUE9TSVggICB7IGludCBzY2hlZF9zZXRwYXJhbSAocGlkX3QgcGlkLCBj
b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsgfQozMjggICAgIFNU
RCAgICAgUE9TSVggICB7IGludCBzY2hlZF9nZXRwYXJhbSAocGlkX3QgcGlk
LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsgfQoKMzI5ICAgICBTVEQg
ICAgIFBPU0lYICAgeyBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChwaWRfdCBw
aWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFy
YW0pOyB9CjMzMCAgICAgU1REICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX2dl
dHNjaGVkdWxlciAocGlkX3QgcGlkKTsgfQoKMzMxICAgICBTVEQgICAgIFBP
U0lYICAgeyBpbnQgc2NoZWRfeWllbGQgKHZvaWQpOyB9CjMzMiAgICAgU1RE
ICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu
dCBwb2xpY3kpOyB9CjMzMyAgICAgU1REICAgICBQT1NJWCAgIHsgaW50IHNj
aGVkX2dldF9wcmlvcml0eV9taW4gKGludCBwb2xpY3kpOyB9CjMzNCAgICAg
U1REICAgICBQT1NJWCAgIHsgaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAo
cGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsgfQozMzUJ
U1RECUJTRAl7IGludCB1dHJhY2UoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90
IGxlbik7IH0KMzM2CU9CU09MCU5PSElERQlmcmVlYnNkNF9zZW5kZmlsZQoz
MzcJU1RECUJTRAl7IGludCBrbGRzeW0oaW50IGZpbGVpZCwgaW50IGNtZCwg
dm9pZCAqZGF0YSk7IH0KMzM4CVNURAlCU0QJeyBpbnQgamFpbChzdHJ1Y3Qg
amFpbCAqamFpbCk7IH0KMzM5CVVOSU1QTAlCU0QJcGlvY3RsCjM0MAlNUFNB
RkUJU1RECVBPU0lYCXsgaW50IHNpZ3Byb2NtYXNrKGludCBob3csIGNvbnN0
IHNpZ3NldF90ICpzZXQsIFwKCQkJICAgIHNpZ3NldF90ICpvc2V0KTsgfQoz
NDEJU1RECVBPU0lYCXsgaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3Qg
KnNpZ21hc2spOyB9CjM0MglTVEQJUE9TSVgJeyBpbnQgc2lnYWN0aW9uKGlu
dCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgXAoJCQkgICAg
c3RydWN0IHNpZ2FjdGlvbiAqb2FjdCk7IH0KMzQzCVNURAlQT1NJWAl7IGlu
dCBzaWdwZW5kaW5nKHNpZ3NldF90ICpzZXQpOyB9CjM0NAlTVEQJQlNECXsg
aW50IHNpZ3JldHVybih1Y29udGV4dF90ICpzaWdjbnR4cCk7IH0KMzQ1CVNU
RAlQT1NJWAl7IGludCBzaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKnNl
dCxcCgkJCSAgICAgc2lnaW5mb190ICppbmZvLCBjb25zdCBzdHJ1Y3QgdGlt
ZXNwZWMgKnRpbWVvdXQpOyB9CjM0NglTVEQJUE9TSVgJeyBpbnQgc2lnd2Fp
dGluZm8oY29uc3Qgc2lnc2V0X3QgKnNldCxcCgkJCSAgICAgc2lnaW5mb190
ICppbmZvKTsgfQozNDcJU1RECUJTRAl7IGludCBfX2FjbF9nZXRfZmlsZShj
b25zdCBjaGFyICpwYXRoLCBcCgkJCSAgICBhY2xfdHlwZV90IHR5cGUsIHN0
cnVjdCBhY2wgKmFjbHApOyB9CjM0OAlTVEQJQlNECXsgaW50IF9fYWNsX3Nl
dF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIFwKCQkJICAgIGFjbF90eXBlX3Qg
dHlwZSwgc3RydWN0IGFjbCAqYWNscCk7IH0KMzQ5CVNURAlCU0QJeyBpbnQg
X19hY2xfZ2V0X2ZkKGludCBmaWxlZGVzLCBhY2xfdHlwZV90IHR5cGUsIFwK
CQkJICAgIHN0cnVjdCBhY2wgKmFjbHApOyB9CjM1MAlTVEQJQlNECXsgaW50
IF9fYWNsX3NldF9mZChpbnQgZmlsZWRlcywgYWNsX3R5cGVfdCB0eXBlLCBc
CgkJCSAgICBzdHJ1Y3QgYWNsICphY2xwKTsgfQozNTEJU1RECUJTRAl7IGlu
dCBfX2FjbF9kZWxldGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCBcCgkJCSAg
ICBhY2xfdHlwZV90IHR5cGUpOyB9CjM1MglTVEQJQlNECXsgaW50IF9fYWNs
X2RlbGV0ZV9mZChpbnQgZmlsZWRlcywgYWNsX3R5cGVfdCB0eXBlKTsgfQoz
NTMJU1RECUJTRAl7IGludCBfX2FjbF9hY2xjaGVja19maWxlKGNvbnN0IGNo
YXIgKnBhdGgsIFwKCQkJICAgIGFjbF90eXBlX3QgdHlwZSwgc3RydWN0IGFj
bCAqYWNscCk7IH0KMzU0CVNURAlCU0QJeyBpbnQgX19hY2xfYWNsY2hlY2tf
ZmQoaW50IGZpbGVkZXMsIGFjbF90eXBlX3QgdHlwZSwgXAoJCQkgICAgc3Ry
dWN0IGFjbCAqYWNscCk7IH0KMzU1CVNURAlCU0QJeyBpbnQgZXh0YXR0cmN0
bChjb25zdCBjaGFyICpwYXRoLCBpbnQgY21kLCBcCgkJCSAgICBjb25zdCBj
aGFyICphdHRybmFtZSwgY2hhciAqYXJnKTsgfQozNTYJU1RECUJTRAl7IGlu
dCBleHRhdHRyX3NldF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIFwKCQkJICAg
IGNvbnN0IGNoYXIgKmF0dHJuYW1lLCBzdHJ1Y3QgaW92ZWMgKmlvdnAsIFwK
CQkJICAgIHVuc2lnbmVkIGlvdmNudCk7IH0KMzU3CVNURAlCU0QJeyBpbnQg
ZXh0YXR0cl9nZXRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBcCgkJCSAgICBj
b25zdCBjaGFyICphdHRybmFtZSwgc3RydWN0IGlvdmVjICppb3ZwLCBcCgkJ
CSAgICB1bnNpZ25lZCBpb3ZjbnQpOyB9CjM1OAlTVEQJQlNECXsgaW50IGV4
dGF0dHJfZGVsZXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgXAoJCQkgICAg
Y29uc3QgY2hhciAqYXR0cm5hbWUpOyB9CjM1OQlTVEQJQlNECXsgaW50IGFp
b193YWl0Y29tcGxldGUoc3RydWN0IGFpb2NiICoqYWlvY2JwLCBzdHJ1Y3Qg
dGltZXNwZWMgKnRpbWVvdXQpOyB9CjM2MAlTVEQJQlNECXsgaW50IGdldHJl
c3VpZCh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsg
fQozNjEJU1RECUJTRAl7IGludCBnZXRyZXNnaWQoZ2lkX3QgKnJnaWQsIGdp
ZF90ICplZ2lkLCBnaWRfdCAqc2dpZCk7IH0KMzYyCVNURAlCU0QJeyBpbnQg
a3F1ZXVlKHZvaWQpOyB9CjM2MwlTVEQJQlNECXsgaW50IGtldmVudChpbnQg
ZmQsIFwKCQkJICAgIGNvbnN0IHN0cnVjdCBrZXZlbnQgKmNoYW5nZWxpc3Qs
IGludCBuY2hhbmdlcywgXAoJCQkgICAgc3RydWN0IGtldmVudCAqZXZlbnRs
aXN0LCBpbnQgbmV2ZW50cywgXAoJCQkgICAgY29uc3Qgc3RydWN0IHRpbWVz
cGVjICp0aW1lb3V0KTsgfQoKOyAzNjQtMzkyIHVzZWQgYnkgRnJlZUJTRC1j
dXJyZW50CjM2NAlVTklNUEwJTk9ISURFCW5vc3lzCjM2NQlVTklNUEwJTk9I
SURFCW5vc3lzCjM2NglVTklNUEwJTk9ISURFCW5vc3lzCjM2NwlVTklNUEwJ
Tk9ISURFCW5vc3lzCjM2OAlVTklNUEwJTk9ISURFCW5vc3lzCjM2OQlVTklN
UEwJTk9ISURFCW5vc3lzCjM3MAlVTklNUEwJTk9ISURFCW5vc3lzCjM3MQlV
TklNUEwJTk9ISURFCW5vc3lzCjM3MglVTklNUEwJTk9ISURFCW5vc3lzCjM3
MwlVTklNUEwJTk9ISURFCW5vc3lzCjM3NAlVTklNUEwJTk9ISURFCW5vc3lz
CjM3NQlVTklNUEwJTk9ISURFCW5vc3lzCjM3NglVTklNUEwJTk9ISURFCW5v
c3lzCjM3NwlVTklNUEwJTk9ISURFCW5vc3lzCjM3OAlVTklNUEwJTk9ISURF
CW5vc3lzCjM3OQlVTklNUEwJTk9ISURFCW5vc3lzCjM4MAlVTklNUEwJTk9I
SURFCW5vc3lzCjM4MQlVTklNUEwJTk9ISURFCW5vc3lzCjM4MglVTklNUEwJ
Tk9ISURFCW5vc3lzCjM4MwlVTklNUEwJTk9ISURFCW5vc3lzCjM4NAlVTklN
UEwJTk9ISURFCW5vc3lzCjM4NQlVTklNUEwJTk9ISURFCW5vc3lzCjM4NglV
TklNUEwJTk9ISURFCW5vc3lzCjM4NwlVTklNUEwJTk9ISURFCW5vc3lzCjM4
OAlVTklNUEwJTk9ISURFCW5vc3lzCjM4OQlVTklNUEwJTk9ISURFCW5vc3lz
CjM5MAlVTklNUEwJTk9ISURFCW5vc3lzCjM5MQlVTklNUEwJTk9ISURFCW5v
c3lzCjM5MglVTklNUEwJTk9ISURFCW5vc3lzCjM5MwlTVEQJQlNECXsgaW50
IHNlbmRmaWxlKGludCBmZCwgaW50IHMsIG9mZl90IG9mZnNldCwgc2l6ZV90
IG5ieXRlcywgXAoJCQkJc3RydWN0IHNmX2hkdHIgKmhkdHIsIG9mZl90ICpz
Ynl0ZXMsIGludCBmbGFncyk7IH0KOyAzOTQtNDM5IHVzZWQgYnkgRnJlZUJT
RC1jdXJyZW50CjM5NAlVTklNUEwJTk9ISURFCW5vc3lzCjM5NQlVTklNUEwJ
Tk9ISURFCW5vc3lzCjM5NglVTklNUEwJTk9ISURFCW5vc3lzCjM5NwlVTklN
UEwJTk9ISURFCW5vc3lzCjM5OAlVTklNUEwJTk9ISURFCW5vc3lzCjM5OQlV
TklNUEwJTk9ISURFCW5vc3lzCjQwMAlVTklNUEwJTk9ISURFCW5vc3lzCjQw
MQlVTklNUEwJTk9ISURFCW5vc3lzCjQwMglVTklNUEwJTk9ISURFCW5vc3lz
CjQwMwlVTklNUEwJTk9ISURFCW5vc3lzCjQwNAlVTklNUEwJTk9ISURFCW5v
c3lzCjQwNQlVTklNUEwJTk9ISURFCW5vc3lzCjQwNglVTklNUEwJTk9ISURF
CW5vc3lzCjQwNwlVTklNUEwJTk9ISURFCW5vc3lzCjQwOAlVTklNUEwJTk9I
SURFCW5vc3lzCjQwOQlVTklNUEwJTk9ISURFCW5vc3lzCjQxMAlVTklNUEwJ
Tk9ISURFCW5vc3lzCjQxMQlVTklNUEwJTk9ISURFCW5vc3lzCjQxMglVTklN
UEwJTk9ISURFCW5vc3lzCjQxMwlVTklNUEwJTk9ISURFCW5vc3lzCjQxNAlV
TklNUEwJTk9ISURFCW5vc3lzCjQxNQlVTklNUEwJTk9ISURFCW5vc3lzCjQx
NglVTklNUEwJTk9ISURFCW5vc3lzCjQxNwlVTklNUEwJTk9ISURFCW5vc3lz
CjQxOAlVTklNUEwJTk9ISURFCW5vc3lzCjQxOQlVTklNUEwJTk9ISURFCW5v
c3lzCjQyMAlVTklNUEwJTk9ISURFCW5vc3lzCjQyMQlVTklNUEwJTk9ISURF
CW5vc3lzCjQyMglVTklNUEwJTk9ISURFCW5vc3lzCjQyMwlVTklNUEwJTk9I
SURFCW5vc3lzCjQyNAlVTklNUEwJTk9ISURFCW5vc3lzCjQyNQlVTklNUEwJ
Tk9ISURFCW5vc3lzCjQyNglVTklNUEwJTk9ISURFCW5vc3lzCjQyNwlVTklN
UEwJTk9ISURFCW5vc3lzCjQyOAlVTklNUEwJTk9ISURFCW5vc3lzCjQyOQlV
TklNUEwJTk9ISURFCW5vc3lzCjQzMAlVTklNUEwJTk9ISURFCW5vc3lzCjQz
MQlVTklNUEwJTk9ISURFCW5vc3lzCjQzMglVTklNUEwJTk9ISURFCW5vc3lz
CjQzMwlVTklNUEwJTk9ISURFCW5vc3lzCjQzNAlVTklNUEwJTk9ISURFCW5v
c3lzCjQzNQlVTklNUEwJTk9ISURFCW5vc3lzCjQzNglVTklNUEwJTk9ISURF
CW5vc3lzCjQzNwlVTklNUEwJTk9ISURFCW5vc3lzCjQzOAlVTklNUEwJTk9I
SURFCW5vc3lzCjQzOQlVTklNUEwJTk9ISURFCW5vc3lzCjsgNDQwLTQ0OSBy
ZXNlcnZlZCBmb3IgRnJlZUJTRC01LnggZ3Jvd3RoCjQ0MAlVTklNUEwJTk9I
SURFCW5vc3lzCjQ0MQlVTklNUEwJTk9ISURFCW5vc3lzCjQ0MglVTklNUEwJ
Tk9ISURFCW5vc3lzCjQ0MwlVTklNUEwJTk9ISURFCW5vc3lzCjQ0NAlVTklN
UEwJTk9ISURFCW5vc3lzCjQ0NQlVTklNUEwJTk9ISURFCW5vc3lzCjQ0NglV
TklNUEwJTk9ISURFCW5vc3lzCjQ0NwlVTklNUEwJTk9ISURFCW5vc3lzCjQ0
OAlVTklNUEwJTk9ISURFCW5vc3lzCjQ0OQlVTklNUEwJTk9ISURFCW5vc3lz
CjsgNDUwIERyYWdvbkZseSBzeXN0ZW0gY2FsbHMKNDUwCVNURAlCU0QJeyBp
bnQgdmFyc3ltX3NldChpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGNv
bnN0IGNoYXIgKmRhdGEpOyB9CjQ1MQlTVEQJQlNECXsgaW50IHZhcnN5bV9n
ZXQoaW50IG1hc2ssIGNvbnN0IGNoYXIgKndpbGQsIGNoYXIgKmJ1ZiwgaW50
IGJ1ZnNpemUpOyB9CjQ1MglTVEQJQlNECXsgaW50IHZhcnN5bV9saXN0KGlu
dCBsZXZlbCwgY2hhciAqYnVmLCBpbnQgbWF4c2l6ZSwgaW50ICptYXJrZXIp
OyB9CjQ1MwlTVEQJQlNECXsgaW50IHVwY19yZWdpc3RlcihzdHJ1Y3QgdXBj
YWxsICp1cGMsIHZvaWQgKmN0eGZ1bmMsIHZvaWQgKmZ1bmMsIHZvaWQgKmRh
dGEpOyB9CjQ1NAlTVEQJQlNECXsgaW50IHVwY19jb250cm9sKGludCBjbWQs
IGludCB1cGNpZCwgdm9pZCAqZGF0YSk7IH0KNDU1CVNURAlCU0QJeyBpbnQg
Y2Fwc19zeXNfc2VydmljZShjb25zdCBjaGFyICpuYW1lLCB1aWRfdCB1aWQs
IGdpZF90IGdpZCwgaW50IHVwY2lkLCBpbnQgZmxhZ3MpOyB9CjQ1NglTVEQJ
QlNECXsgaW50IGNhcHNfc3lzX2NsaWVudChjb25zdCBjaGFyICpuYW1lLCB1
aWRfdCB1aWQsIGdpZF90IGdpZCwgaW50IHVwY2lkLCBpbnQgZmxhZ3MpOyB9
CjQ1NwlTVEQJQlNECXsgaW50IGNhcHNfc3lzX2Nsb3NlKGludCBwb3J0aWQp
OyB9CjQ1OAlTVEQJQlNECXsgb2ZmX3QgY2Fwc19zeXNfcHV0KGludCBwb3J0
aWQsIHZvaWQgKm1zZywgaW50IG1zZ3NpemUpOyB9CjQ1OQlTVEQJQlNECXsg
aW50IGNhcHNfc3lzX3JlcGx5KGludCBwb3J0aWQsIHZvaWQgKm1zZywgaW50
IG1zZ3NpemUsIG9mZl90IG1zZ2NpZCk7IH0KNDYwCVNURAlCU0QJeyBpbnQg
Y2Fwc19zeXNfZ2V0KGludCBwb3J0aWQsIHZvaWQgKm1zZywgaW50IG1heHNp
emUsIHN0cnVjdCBjYXBzX21zZ2lkICptc2dpZCwgc3RydWN0IGNhcHNfY3Jl
ZCAqY2NyKTsgfQo0NjEJU1RECUJTRAl7IGludCBjYXBzX3N5c193YWl0KGlu
dCBwb3J0aWQsIHZvaWQgKm1zZywgaW50IG1heHNpemUsIHN0cnVjdCBjYXBz
X21zZ2lkICptc2dpZCwgc3RydWN0IGNhcHNfY3JlZCAqY2NyKTsgfQo0NjIJ
U1RECUJTRAl7IGludCBjYXBzX3N5c19hYm9ydChpbnQgcG9ydGlkLCBvZmZf
dCBtc2djaWQsIGludCBmbGFncyk7IH0KNDYzCVNURAlCU0QJeyBvZmZfdCBj
YXBzX3N5c19nZXRnZW4oaW50IHBvcnRpZCk7IH0KNDY0CVNURAlCU0QJeyBp
bnQgY2Fwc19zeXNfc2V0Z2VuKGludCBwb3J0aWQsIG9mZl90IGdlbik7IH0K
NDY1CVNURAlCU0QJeyBpbnQgZXhlY19zeXNfcmVnaXN0ZXIodm9pZCAqZW50
cnkpOyB9CjQ2NglTVEQJQlNECXsgaW50IGV4ZWNfc3lzX3VucmVnaXN0ZXIo
aW50IGlkKTsgfQo0NjcJU1RECUJTRAl7IGludCBzeXNfY2hlY2twb2ludChp
bnQgdHlwZSwgaW50IGZkLCBwaWRfdCBwaWQsIGludCByZXR2YWwpOyB9CjQ2
OAlTVEQJQlNECXsgaW50IG1vdW50Y3RsKGNvbnN0IGNoYXIgKnBhdGgsIGlu
dCBvcCwgaW50IGZkLCBjb25zdCB2b2lkICpjdGwsIGludCBjdGxsZW4sIHZv
aWQgKmJ1ZiwgaW50IGJ1Zmxlbik7IH0KNDY5CVNURAlCU0QJeyBpbnQgdW10
eF9zbGVlcCh2b2xhdGlsZSBjb25zdCBpbnQgKnB0ciwgaW50IHZhbHVlLCBp
bnQgdGltZW91dCk7IH0KNDcwCVNURAlCU0QJeyBpbnQgdW10eF93YWtldXAo
dm9sYXRpbGUgY29uc3QgaW50ICpwdHIsIGludCBjb3VudCk7IH0KNDcxCVNU
RAlCU0QJeyBpbnQgamFpbF9hdHRhY2goaW50IGppZCk7IH0KNDcyCVNURAlC
U0QJeyBpbnQgc3lzX3NldF90bHNfYXJlYShpbnQgd2hpY2gsIHN0cnVjdCB0
bHNfaW5mbyAqaW5mbywgaW50IGluZm9zaXplKTsgfQo0NzMJU1RECUJTRAl7
IGludCBzeXNfZ2V0X3Rsc19hcmVhKGludCB3aGljaCwgc3RydWN0IHRsc19p
bmZvICppbmZvLCBpbnQgaW5mb3NpemUpOyB9CjQ3NAlTVEQJQlNECXsgaW50
IGNhY2hlKGludCBkaXIsIGNhZGRyX3QgYWRkciwgaW50IGxlbik7IH0KCgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABrZXJuX3NpZy5jAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwMDAwADAwMDAw
MDAAMDAwMDAxMjUyNzcAMTAyMTMyNDIxMjAAMDExNjQ0ACAwAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3aGVl
bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qCiAqIENvcHlyaWdo
dCAoYykgMTk4MiwgMTk4NiwgMTk4OSwgMTk5MSwgMTk5MwogKglUaGUgUmVn
ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmll
cywgSW5jLgogKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUg
YXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogKiB0byB0aGUg
VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9u
ZSBhbmQgVGVsZWdyYXBoCiAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0
b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCiAq
IHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywg
SW5jLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg
bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMg
c29mdHdhcmUKICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr
bm93bGVkZ2VtZW50OgogKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh
cmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCiAqCUNhbGlmb3Ju
aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgogKiA0LiBOZWl0
aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CiAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgogKiBTVUNIIERBTUFHRS4KICoKICoJQCgjKWtlcm5fc2lnLmMJOC43
IChCZXJrZWxleSkgNC8xOC85NAogKiAkRnJlZUJTRDogc3JjL3N5cy9rZXJu
L2tlcm5fc2lnLmMsdiAxLjcyLjIuMTcgMjAwMy8wNS8xNiAxNjozNDozNCBv
YnJpZW4gRXhwICQKICogJERyYWdvbkZseTogc3JjL3N5cy9rZXJuL2tlcm5f
c2lnLmMsdiAxLjM2IDIwMDUvMDMvMDIgMDY6MTc6MTcgZGF2aWR4dSBFeHAg
JAogKi8KCiNpbmNsdWRlICJvcHRfa3RyYWNlLmgiCgojaW5jbHVkZSA8c3lz
L3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KI2luY2x1ZGUgPHN5
cy9rZXJuZWwuaD4KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgojaW5jbHVk
ZSA8c3lzL3NpZ25hbHZhci5oPgojaW5jbHVkZSA8c3lzL3Jlc291cmNldmFy
Lmg+CiNpbmNsdWRlIDxzeXMvdm5vZGUuaD4KI2luY2x1ZGUgPHN5cy9ldmVu
dC5oPgojaW5jbHVkZSA8c3lzL3Byb2MuaD4KI2luY2x1ZGUgPHN5cy9ubG9v
a3VwLmg+CiNpbmNsdWRlIDxzeXMvcGlvY3RsLmg+CiNpbmNsdWRlIDxzeXMv
c3lzdG0uaD4KI2luY2x1ZGUgPHN5cy9hY2N0Lmg+CiNpbmNsdWRlIDxzeXMv
ZmNudGwuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiNpbmNsdWRlIDxzeXMv
a3RyYWNlLmg+CiNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+CiNpbmNsdWRlIDxz
eXMvc3RhdC5oPgojaW5jbHVkZSA8c3lzL3N5c2VudC5oPgojaW5jbHVkZSA8
c3lzL3N5c2N0bC5oPgojaW5jbHVkZSA8c3lzL21hbGxvYy5oPgojaW5jbHVk
ZSA8c3lzL3VuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL2tlcm5fc3lzY2FsbC5o
PgoKCiNpbmNsdWRlIDxtYWNoaW5lL2lwbC5oPgojaW5jbHVkZSA8bWFjaGlu
ZS9jcHUuaD4KI2luY2x1ZGUgPG1hY2hpbmUvc21wLmg+CgpzdGF0aWMgaW50
CWNvcmVkdW1wKHN0cnVjdCBwcm9jICopOwpzdGF0aWMgY2hhcgkqZXhwYW5k
X25hbWUoY29uc3QgY2hhciAqLCB1aWRfdCwgcGlkX3QpOwpzdGF0aWMgaW50
CWtpbGxwZyhpbnQgc2lnLCBpbnQgcGdpZCwgaW50IGFsbCk7CnN0YXRpYyBp
bnQJc2lnX2ZmcyhzaWdzZXRfdCAqc2V0KTsKc3RhdGljIGludAlzaWdwcm9w
KGludCBzaWcpOwpzdGF0aWMgdm9pZAlzdG9wKHN0cnVjdCBwcm9jICopOwoj
aWZkZWYgU01QCnN0YXRpYyB2b2lkCXNpZ25vdGlmeV9yZW1vdGUodm9pZCAq
YXJnKTsKI2VuZGlmCnN0YXRpYyBpbnQJa2Vybl9zaWd0aW1lZHdhaXQoc2ln
c2V0X3Qgc2V0LCBzaWdpbmZvX3QgKmluZm8sCgkJICAgIHN0cnVjdCB0aW1l
c3BlYyAqdGltZW91dCk7CgpzdGF0aWMgaW50CWZpbHRfc2lnYXR0YWNoKHN0
cnVjdCBrbm90ZSAqa24pOwpzdGF0aWMgdm9pZAlmaWx0X3NpZ2RldGFjaChz
dHJ1Y3Qga25vdGUgKmtuKTsKc3RhdGljIGludAlmaWx0X3NpZ25hbChzdHJ1
Y3Qga25vdGUgKmtuLCBsb25nIGhpbnQpOwoKc3RydWN0IGZpbHRlcm9wcyBz
aWdfZmlsdG9wcyA9Cgl7IDAsIGZpbHRfc2lnYXR0YWNoLCBmaWx0X3NpZ2Rl
dGFjaCwgZmlsdF9zaWduYWwgfTsKCnN0YXRpYyBpbnQJa2Vybl9sb2dzaWdl
eGl0ID0gMTsKU1lTQ1RMX0lOVChfa2VybiwgS0VSTl9MT0dTSUdFWElULCBs
b2dzaWdleGl0LCBDVExGTEFHX1JXLCAKICAgICZrZXJuX2xvZ3NpZ2V4aXQs
IDAsIAogICAgIkxvZyBwcm9jZXNzZXMgcXVpdHRpbmcgb24gYWJub3JtYWwg
c2lnbmFscyB0byBzeXNsb2coMykiKTsKCi8qCiAqIENhbiBwcm9jZXNzIHAs
IHdpdGggcGNyZWQgcGMsIHNlbmQgdGhlIHNpZ25hbCBzaWcgdG8gcHJvY2Vz
cyBxPwogKi8KI2RlZmluZSBDQU5TSUdOQUwocSwgc2lnKSBcCgkoIXBfdHJl
c3Bhc3MoY3VycHJvYy0+cF91Y3JlZCwgKHEpLT5wX3VjcmVkKSB8fCBcCgko
KHNpZykgPT0gU0lHQ09OVCAmJiAocSktPnBfc2Vzc2lvbiA9PSBjdXJwcm9j
LT5wX3Nlc3Npb24pKQoKLyoKICogUG9saWN5IC0tIENhbiByZWFsIHVpZCBy
dWlkIHdpdGggdWNyZWQgdWMgc2VuZCBhIHNpZ25hbCB0byBwcm9jZXNzIHE/
CiAqLwojZGVmaW5lIENBTlNJR0lPKHJ1aWQsIHVjLCBxKSBcCgkoKHVjKS0+
Y3JfdWlkID09IDAgfHwgXAoJICAgIChydWlkKSA9PSAocSktPnBfdWNyZWQt
PmNyX3J1aWQgfHwgXAoJICAgICh1YyktPmNyX3VpZCA9PSAocSktPnBfdWNy
ZWQtPmNyX3J1aWQgfHwgXAoJICAgIChydWlkKSA9PSAocSktPnBfdWNyZWQt
PmNyX3VpZCB8fCBcCgkgICAgKHVjKS0+Y3JfdWlkID09IChxKS0+cF91Y3Jl
ZC0+Y3JfdWlkKQoKaW50IHN1Z2lkX2NvcmVkdW1wOwpTWVNDVExfSU5UKF9r
ZXJuLCBPSURfQVVUTywgc3VnaWRfY29yZWR1bXAsIENUTEZMQUdfUlcsIAoJ
JnN1Z2lkX2NvcmVkdW1wLCAwLCAiRW5hYmxlIGNvcmVkdW1waW5nIHNldCB1
c2VyL2dyb3VwIElEIHByb2Nlc3NlcyIpOwoKc3RhdGljIGludAlkb19jb3Jl
ZHVtcCA9IDE7ClNZU0NUTF9JTlQoX2tlcm4sIE9JRF9BVVRPLCBjb3JlZHVt
cCwgQ1RMRkxBR19SVywKCSZkb19jb3JlZHVtcCwgMCwgIkVuYWJsZS9EaXNh
YmxlIGNvcmVkdW1wcyIpOwoKLyoKICogU2lnbmFsIHByb3BlcnRpZXMgYW5k
IGFjdGlvbnMuCiAqIFRoZSBhcnJheSBiZWxvdyBjYXRlZ29yaXplcyB0aGUg
c2lnbmFscyBhbmQgdGhlaXIgZGVmYXVsdCBhY3Rpb25zCiAqIGFjY29yZGlu
ZyB0byB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqLwojZGVmaW5lCVNB
X0tJTEwJCTB4MDEJCS8qIHRlcm1pbmF0ZXMgcHJvY2VzcyBieSBkZWZhdWx0
ICovCiNkZWZpbmUJU0FfQ09SRQkJMHgwMgkJLyogZGl0dG8gYW5kIGNvcmVk
dW1wcyAqLwojZGVmaW5lCVNBX1NUT1AJCTB4MDQJCS8qIHN1c3BlbmQgcHJv
Y2VzcyAqLwojZGVmaW5lCVNBX1RUWVNUT1AJMHgwOAkJLyogZGl0dG8sIGZy
b20gdHR5ICovCiNkZWZpbmUJU0FfSUdOT1JFCTB4MTAJCS8qIGlnbm9yZSBi
eSBkZWZhdWx0ICovCiNkZWZpbmUJU0FfQ09OVAkJMHgyMAkJLyogY29udGlu
dWUgaWYgc3VzcGVuZGVkICovCiNkZWZpbmUJU0FfQ0FOVE1BU0sJMHg0MAkJ
Lyogbm9uLW1hc2thYmxlLCBjYXRjaGFibGUgKi8KI2RlZmluZSBTQV9DS1BU
ICAgICAgICAgMHg4MCAgICAgICAgICAgIC8qIGNoZWNrcG9pbnQgcHJvY2Vz
cyAqLwoKCnN0YXRpYyBpbnQgc2lncHJvcHRibFtOU0lHXSA9IHsKICAgICAg
ICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdIVVAgKi8KICAgICAg
ICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdJTlQgKi8KICAgICAg
ICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdRVUlUICovCiAgICAg
ICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHSUxMICovCiAgICAg
ICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHVFJBUCAqLwogICAg
ICAgIFNBX0tJTEx8U0FfQ09SRSwgICAgICAgIC8qIFNJR0FCUlQgKi8KICAg
ICAgICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdFTVQgKi8KICAg
ICAgICBTQV9LSUxMfFNBX0NPUkUsICAgICAgICAvKiBTSUdGUEUgKi8KICAg
ICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdLSUxMICovCiAg
ICAgICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHQlVTICovCiAg
ICAgICAgU0FfS0lMTHxTQV9DT1JFLCAgICAgICAgLyogU0lHU0VHViAqLwog
ICAgICAgIFNBX0tJTEx8U0FfQ09SRSwgICAgICAgIC8qIFNJR1NZUyAqLwog
ICAgICAgIFNBX0tJTEwsICAgICAgICAgICAgICAgIC8qIFNJR1BJUEUgKi8K
ICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBTSUdBTFJNICov
CiAgICAgICAgU0FfS0lMTCwgICAgICAgICAgICAgICAgLyogU0lHVEVSTSAq
LwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJR1VSRyAq
LwogICAgICAgIFNBX1NUT1AsICAgICAgICAgICAgICAgIC8qIFNJR1NUT1Ag
Ki8KICAgICAgICBTQV9TVE9QfFNBX1RUWVNUT1AsICAgICAvKiBTSUdUU1RQ
ICovCiAgICAgICAgU0FfSUdOT1JFfFNBX0NPTlQsICAgICAgLyogU0lHQ09O
VCAqLwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJR0NI
TEQgKi8KICAgICAgICBTQV9TVE9QfFNBX1RUWVNUT1AsICAgICAvKiBTSUdU
VElOICovCiAgICAgICAgU0FfU1RPUHxTQV9UVFlTVE9QLCAgICAgLyogU0lH
VFRPVSAqLwogICAgICAgIFNBX0lHTk9SRSwgICAgICAgICAgICAgIC8qIFNJ
R0lPICovCiAgICAgICAgU0FfS0lMTCwgICAgICAgICAgICAgICAgLyogU0lH
WENQVSAqLwogICAgICAgIFNBX0tJTEwsICAgICAgICAgICAgICAgIC8qIFNJ
R1hGU1ogKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAvKiBT
SUdWVEFMUk0gKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAgICAgICAv
KiBTSUdQUk9GICovCiAgICAgICAgU0FfSUdOT1JFLCAgICAgICAgICAgICAg
LyogU0lHV0lOQ0ggICovCiAgICAgICAgU0FfSUdOT1JFLCAgICAgICAgICAg
ICAgLyogU0lHSU5GTyAqLwogICAgICAgIFNBX0tJTEwsICAgICAgICAgICAg
ICAgIC8qIFNJR1VTUjEgKi8KICAgICAgICBTQV9LSUxMLCAgICAgICAgICAg
ICAgICAvKiBTSUdVU1IyICovCglTQV9JR05PUkUsICAgICAgICAgICAgICAv
KiBTSUdUSFIgKi8KCVNBX0NLUFQsICAgICAgICAgICAgICAgIC8qIFNJR0NL
UFQgKi8gCglTQV9LSUxMfFNBX0NLUFQsICAgICAgICAvKiBTSUdDS1BURVhJ
VCAqLyAgCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglT
QV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUs
CglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05P
UkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9J
R05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglT
QV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUs
CglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05P
UkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9JR05PUkUsCglTQV9J
R05PUkUsCgp9OwoKc3RhdGljIF9faW5saW5lIGludApzaWdwcm9wKGludCBz
aWcpCnsKCglpZiAoc2lnID4gMCAmJiBzaWcgPCBOU0lHKQoJCXJldHVybiAo
c2lncHJvcHRibFtfU0lHX0lEWChzaWcpXSk7CglyZXR1cm4gKDApOwp9Cgpz
dGF0aWMgX19pbmxpbmUgaW50CnNpZ19mZnMoc2lnc2V0X3QgKnNldCkKewoJ
aW50IGk7CgoJZm9yIChpID0gMDsgaSA8IF9TSUdfV09SRFM7IGkrKykKCQlp
ZiAoc2V0LT5fX2JpdHNbaV0pCgkJCXJldHVybiAoZmZzKHNldC0+X19iaXRz
W2ldKSArIChpICogMzIpKTsKCXJldHVybiAoMCk7Cn0KCmludAprZXJuX3Np
Z2FjdGlvbihpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVj
dCBzaWdhY3Rpb24gKm9hY3QpCnsKCXN0cnVjdCB0aHJlYWQgKnRkID0gY3Vy
dGhyZWFkOwoJc3RydWN0IHByb2MgKnAgPSB0ZC0+dGRfcHJvYzsKCXN0cnVj
dCBzaWdhY3RzICpwcyA9IHAtPnBfc2lnYWN0czsKCglpZiAoc2lnIDw9IDAg
fHwgc2lnID4gX1NJR19NQVhTSUcpCgkJcmV0dXJuIChFSU5WQUwpOwoKCWlm
IChvYWN0KSB7CgkJb2FjdC0+c2FfaGFuZGxlciA9IHBzLT5wc19zaWdhY3Rb
X1NJR19JRFgoc2lnKV07CgkJb2FjdC0+c2FfbWFzayA9IHBzLT5wc19jYXRj
aG1hc2tbX1NJR19JRFgoc2lnKV07CgkJb2FjdC0+c2FfZmxhZ3MgPSAwOwoJ
CWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lnb25zdGFjaywgc2lnKSkKCQkJ
b2FjdC0+c2FfZmxhZ3MgfD0gU0FfT05TVEFDSzsKCQlpZiAoIVNJR0lTTUVN
QkVSKHBzLT5wc19zaWdpbnRyLCBzaWcpKQoJCQlvYWN0LT5zYV9mbGFncyB8
PSBTQV9SRVNUQVJUOwoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVz
ZXQsIHNpZykpCgkJCW9hY3QtPnNhX2ZsYWdzIHw9IFNBX1JFU0VUSEFORDsK
CQlpZiAoU0lHSVNNRU1CRVIocHMtPnBzX3NpZ25vZGVmZXIsIHNpZykpCgkJ
CW9hY3QtPnNhX2ZsYWdzIHw9IFNBX05PREVGRVI7CgkJaWYgKFNJR0lTTUVN
QkVSKHBzLT5wc19zaWdpbmZvLCBzaWcpKQoJCQlvYWN0LT5zYV9mbGFncyB8
PSBTQV9TSUdJTkZPOwoJCWlmIChzaWcgPT0gU0lHQ0hMRCAmJiBwLT5wX3By
b2NzaWctPnBzX2ZsYWcgJiBQU19OT0NMRFNUT1ApCgkJCW9hY3QtPnNhX2Zs
YWdzIHw9IFNBX05PQ0xEU1RPUDsKCQlpZiAoc2lnID09IFNJR0NITEQgJiYg
cC0+cF9wcm9jc2lnLT5wc19mbGFnICYgUFNfTk9DTERXQUlUKQoJCQlvYWN0
LT5zYV9mbGFncyB8PSBTQV9OT0NMRFdBSVQ7Cgl9CglpZiAoYWN0KSB7CgkJ
aWYgKChzaWcgPT0gU0lHS0lMTCB8fCBzaWcgPT0gU0lHU1RPUCkgJiYKCQkg
ICAgYWN0LT5zYV9oYW5kbGVyICE9IFNJR19ERkwpCgkJCXJldHVybiAoRUlO
VkFMKTsKCgkJLyoKCQkgKiBDaGFuZ2Ugc2V0dGluZyBhdG9taWNhbGx5LgoJ
CSAqLwoJCXNwbGhpZ2goKTsKCgkJcHMtPnBzX2NhdGNobWFza1tfU0lHX0lE
WChzaWcpXSA9IGFjdC0+c2FfbWFzazsKCQlTSUdfQ0FOVE1BU0socHMtPnBz
X2NhdGNobWFza1tfU0lHX0lEWChzaWcpXSk7CgkJaWYgKGFjdC0+c2FfZmxh
Z3MgJiBTQV9TSUdJTkZPKSB7CgkJCXBzLT5wc19zaWdhY3RbX1NJR19JRFgo
c2lnKV0gPQoJCQkgICAgKF9fc2lnaGFuZGxlcl90ICopYWN0LT5zYV9zaWdh
Y3Rpb247CgkJCVNJR0FERFNFVChwcy0+cHNfc2lnaW5mbywgc2lnKTsKCQl9
IGVsc2UgewoJCQlwcy0+cHNfc2lnYWN0W19TSUdfSURYKHNpZyldID0gYWN0
LT5zYV9oYW5kbGVyOwoJCQlTSUdERUxTRVQocHMtPnBzX3NpZ2luZm8sIHNp
Zyk7CgkJfQoJCWlmICghKGFjdC0+c2FfZmxhZ3MgJiBTQV9SRVNUQVJUKSkK
CQkJU0lHQUREU0VUKHBzLT5wc19zaWdpbnRyLCBzaWcpOwoJCWVsc2UKCQkJ
U0lHREVMU0VUKHBzLT5wc19zaWdpbnRyLCBzaWcpOwoJCWlmIChhY3QtPnNh
X2ZsYWdzICYgU0FfT05TVEFDSykKCQkJU0lHQUREU0VUKHBzLT5wc19zaWdv
bnN0YWNrLCBzaWcpOwoJCWVsc2UKCQkJU0lHREVMU0VUKHBzLT5wc19zaWdv
bnN0YWNrLCBzaWcpOwoJCWlmIChhY3QtPnNhX2ZsYWdzICYgU0FfUkVTRVRI
QU5EKQoJCQlTSUdBRERTRVQocHMtPnBzX3NpZ3Jlc2V0LCBzaWcpOwoJCWVs
c2UKCQkJU0lHREVMU0VUKHBzLT5wc19zaWdyZXNldCwgc2lnKTsKCQlpZiAo
YWN0LT5zYV9mbGFncyAmIFNBX05PREVGRVIpCgkJCVNJR0FERFNFVChwcy0+
cHNfc2lnbm9kZWZlciwgc2lnKTsKCQllbHNlCgkJCVNJR0RFTFNFVChwcy0+
cHNfc2lnbm9kZWZlciwgc2lnKTsKCQlpZiAoc2lnID09IFNJR0NITEQpIHsK
CQkJaWYgKGFjdC0+c2FfZmxhZ3MgJiBTQV9OT0NMRFNUT1ApCgkJCQlwLT5w
X3Byb2NzaWctPnBzX2ZsYWcgfD0gUFNfTk9DTERTVE9QOwoJCQllbHNlCgkJ
CQlwLT5wX3Byb2NzaWctPnBzX2ZsYWcgJj0gflBTX05PQ0xEU1RPUDsKCQkJ
aWYgKGFjdC0+c2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpIHsKCQkJCS8qCgkJ
CQkgKiBQYXJhbm9pYTogc2luY2UgU0FfTk9DTERXQUlUIGlzIGltcGxlbWVu
dGVkCgkJCQkgKiBieSByZXBhcmVudGluZyB0aGUgZHlpbmcgY2hpbGQgdG8g
UElEIDEgKGFuZAoJCQkJICogdHJ1c3QgaXQgdG8gcmVhcCB0aGUgem9tYmll
KSwgUElEIDEgaXRzZWxmCgkJCQkgKiBpcyBmb3JiaWRkZW4gdG8gc2V0IFNB
X05PQ0xEV0FJVC4KCQkJCSAqLwoJCQkJaWYgKHAtPnBfcGlkID09IDEpCgkJ
CQkJcC0+cF9wcm9jc2lnLT5wc19mbGFnICY9IH5QU19OT0NMRFdBSVQ7CgkJ
CQllbHNlCgkJCQkJcC0+cF9wcm9jc2lnLT5wc19mbGFnIHw9IFBTX05PQ0xE
V0FJVDsKCQkJfSBlbHNlIHsKCQkJCXAtPnBfcHJvY3NpZy0+cHNfZmxhZyAm
PSB+UFNfTk9DTERXQUlUOwoJCQl9CgkJfQoJCS8qCgkJICogU2V0IGJpdCBp
biBwX3NpZ2lnbm9yZSBmb3Igc2lnbmFscyB0aGF0IGFyZSBzZXQgdG8gU0lH
X0lHTiwKCQkgKiBhbmQgZm9yIHNpZ25hbHMgc2V0IHRvIFNJR19ERkwgd2hl
cmUgdGhlIGRlZmF1bHQgaXMgdG8KCQkgKiBpZ25vcmUuIEhvd2V2ZXIsIGRv
bid0IHB1dCBTSUdDT05UIGluIHBfc2lnaWdub3JlLCBhcyB3ZQoJCSAqIGhh
dmUgdG8gcmVzdGFydCB0aGUgcHJvY2Vzcy4KCQkgKi8KCQlpZiAocHMtPnBz
X3NpZ2FjdFtfU0lHX0lEWChzaWcpXSA9PSBTSUdfSUdOIHx8CgkJICAgIChz
aWdwcm9wKHNpZykgJiBTQV9JR05PUkUgJiYKCQkgICAgIHBzLT5wc19zaWdh
Y3RbX1NJR19JRFgoc2lnKV0gPT0gU0lHX0RGTCkpIHsKCQkJLyogbmV2ZXIg
dG8gYmUgc2VlbiBhZ2FpbiAqLwoJCQlTSUdERUxTRVQocC0+cF9zaWdsaXN0
LCBzaWcpOwoJCQlpZiAoc2lnICE9IFNJR0NPTlQpCgkJCQkvKiBlYXNpZXIg
aW4gcHNpZ25hbCAqLwoJCQkJU0lHQUREU0VUKHAtPnBfc2lnaWdub3JlLCBz
aWcpOwoJCQlTSUdERUxTRVQocC0+cF9zaWdjYXRjaCwgc2lnKTsKCQl9IGVs
c2UgewoJCQlTSUdERUxTRVQocC0+cF9zaWdpZ25vcmUsIHNpZyk7CgkJCWlm
IChwcy0+cHNfc2lnYWN0W19TSUdfSURYKHNpZyldID09IFNJR19ERkwpCgkJ
CQlTSUdERUxTRVQocC0+cF9zaWdjYXRjaCwgc2lnKTsKCQkJZWxzZQoJCQkJ
U0lHQUREU0VUKHAtPnBfc2lnY2F0Y2gsIHNpZyk7CgkJfQoKCQlzcGwwKCk7
Cgl9CglyZXR1cm4gKDApOwp9CgppbnQKc2lnYWN0aW9uKHN0cnVjdCBzaWdh
Y3Rpb25fYXJncyAqdWFwKQp7CglzdHJ1Y3Qgc2lnYWN0aW9uIGFjdCwgb2Fj
dDsKCXN0cnVjdCBzaWdhY3Rpb24gKmFjdHAsICpvYWN0cDsKCWludCBlcnJv
cjsKCglhY3RwID0gKHVhcC0+YWN0ICE9IE5VTEwpID8gJmFjdCA6IE5VTEw7
CglvYWN0cCA9ICh1YXAtPm9hY3QgIT0gTlVMTCkgPyAmb2FjdCA6IE5VTEw7
CglpZiAoYWN0cCkgewoJCWVycm9yID0gY29weWluKHVhcC0+YWN0LCBhY3Rw
LCBzaXplb2YoYWN0KSk7CgkJaWYgKGVycm9yKQoJCQlyZXR1cm4gKGVycm9y
KTsKCX0KCWVycm9yID0ga2Vybl9zaWdhY3Rpb24odWFwLT5zaWcsIGFjdHAs
IG9hY3RwKTsKCWlmIChvYWN0cCAmJiAhZXJyb3IpIHsKCQllcnJvciA9IGNv
cHlvdXQob2FjdHAsIHVhcC0+b2FjdCwgc2l6ZW9mKG9hY3QpKTsKCX0KCXJl
dHVybiAoZXJyb3IpOwp9CgovKgogKiBJbml0aWFsaXplIHNpZ25hbCBzdGF0
ZSBmb3IgcHJvY2VzcyAwOwogKiBzZXQgdG8gaWdub3JlIHNpZ25hbHMgdGhh
dCBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgogKi8Kdm9pZApzaWdpbml0KHN0
cnVjdCBwcm9jICpwKQp7CglpbnQgaTsKCglmb3IgKGkgPSAxOyBpIDw9IE5T
SUc7IGkrKykKCQlpZiAoc2lncHJvcChpKSAmIFNBX0lHTk9SRSAmJiBpICE9
IFNJR0NPTlQpCgkJCVNJR0FERFNFVChwLT5wX3NpZ2lnbm9yZSwgaSk7Cn0K
Ci8qCiAqIFJlc2V0IHNpZ25hbHMgZm9yIGFuIGV4ZWMgb2YgdGhlIHNwZWNp
ZmllZCBwcm9jZXNzLgogKi8Kdm9pZApleGVjc2lncyhzdHJ1Y3QgcHJvYyAq
cCkKewoJc3RydWN0IHNpZ2FjdHMgKnBzID0gcC0+cF9zaWdhY3RzOwoJaW50
IHNpZzsKCgkvKgoJICogUmVzZXQgY2F1Z2h0IHNpZ25hbHMuICBIZWxkIHNp
Z25hbHMgcmVtYWluIGhlbGQKCSAqIHRocm91Z2ggcF9zaWdtYXNrICh1bmxl
c3MgdGhleSB3ZXJlIGNhdWdodCwKCSAqIGFuZCBhcmUgbm93IGlnbm9yZWQg
YnkgZGVmYXVsdCkuCgkgKi8KCXdoaWxlIChTSUdOT1RFTVBUWShwLT5wX3Np
Z2NhdGNoKSkgewoJCXNpZyA9IHNpZ19mZnMoJnAtPnBfc2lnY2F0Y2gpOwoJ
CVNJR0RFTFNFVChwLT5wX3NpZ2NhdGNoLCBzaWcpOwoJCWlmIChzaWdwcm9w
KHNpZykgJiBTQV9JR05PUkUpIHsKCQkJaWYgKHNpZyAhPSBTSUdDT05UKQoJ
CQkJU0lHQUREU0VUKHAtPnBfc2lnaWdub3JlLCBzaWcpOwoJCQlTSUdERUxT
RVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCX0KCQlwcy0+cHNfc2lnYWN0W19T
SUdfSURYKHNpZyldID0gU0lHX0RGTDsKCX0KCS8qCgkgKiBSZXNldCBzdGFj
ayBzdGF0ZSB0byB0aGUgdXNlciBzdGFjay4KCSAqIENsZWFyIHNldCBvZiBz
aWduYWxzIGNhdWdodCBvbiB0aGUgc2lnbmFsIHN0YWNrLgoJICovCglwLT5w
X3NpZ3N0ay5zc19mbGFncyA9IFNTX0RJU0FCTEU7CglwLT5wX3NpZ3N0ay5z
c19zaXplID0gMDsKCXAtPnBfc2lnc3RrLnNzX3NwID0gMDsKCXAtPnBfZmxh
ZyAmPSB+UF9BTFRTVEFDSzsKCS8qCgkgKiBSZXNldCBubyB6b21iaWVzIGlm
IGNoaWxkIGRpZXMgZmxhZyBhcyBTb2xhcmlzIGRvZXMuCgkgKi8KCXAtPnBf
cHJvY3NpZy0+cHNfZmxhZyAmPSB+UFNfTk9DTERXQUlUOwp9CgovKgogKiBr
ZXJuX3NpZ3Byb2NtYXNrKCkgLSBNUCBTQUZFIE9OTFkgSUYgcCA9PSBjdXJw
cm9jCiAqCiAqCU1hbmlwdWxhdGUgc2lnbmFsIG1hc2suICBUaGlzIHJvdXRp
bmUgaXMgTVAgU0FGRSAqT05MWSogaWYKICoJcCA9PSBjdXJwcm9jLiAgQWxz
byByZW1lbWJlciB0aGF0IGluIG9yZGVyIHRvIHJlbWFpbiBNUCBTQUZFCiAq
CW5vIHNwbCooKSBjYWxscyBtYXkgYmUgbWFkZS4KICovCmludAprZXJuX3Np
Z3Byb2NtYXNrKGludCBob3csIHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpv
c2V0KQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsKCXN0cnVj
dCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CglpbnQgZXJyb3I7CgoJaWYgKG9z
ZXQgIT0gTlVMTCkKCQkqb3NldCA9IHAtPnBfc2lnbWFzazsKCgllcnJvciA9
IDA7CglpZiAoc2V0ICE9IE5VTEwpIHsKCQlzd2l0Y2ggKGhvdykgewoJCWNh
c2UgU0lHX0JMT0NLOgoJCQlTSUdfQ0FOVE1BU0soKnNldCk7CgkJCVNJR1NF
VE9SKHAtPnBfc2lnbWFzaywgKnNldCk7CgkJCWJyZWFrOwoJCWNhc2UgU0lH
X1VOQkxPQ0s6CgkJCVNJR1NFVE5BTkQocC0+cF9zaWdtYXNrLCAqc2V0KTsK
CQkJYnJlYWs7CgkJY2FzZSBTSUdfU0VUTUFTSzoKCQkJU0lHX0NBTlRNQVNL
KCpzZXQpOwoJCQlwLT5wX3NpZ21hc2sgPSAqc2V0OwoJCQlicmVhazsKCQlk
ZWZhdWx0OgoJCQllcnJvciA9IEVJTlZBTDsKCQkJYnJlYWs7CgkJfQoJfQoJ
cmV0dXJuIChlcnJvcik7Cn0KCi8qCiAqIHNpZ3Byb2NtYXNrKCkgLSBNUCBT
QUZFCiAqLwppbnQKc2lncHJvY21hc2soc3RydWN0IHNpZ3Byb2NtYXNrX2Fy
Z3MgKnVhcCkKewoJc2lnc2V0X3Qgc2V0LCBvc2V0OwoJc2lnc2V0X3QgKnNl
dHAsICpvc2V0cDsKCWludCBlcnJvcjsKCglzZXRwID0gKHVhcC0+c2V0ICE9
IE5VTEwpID8gJnNldCA6IE5VTEw7Cglvc2V0cCA9ICh1YXAtPm9zZXQgIT0g
TlVMTCkgPyAmb3NldCA6IE5VTEw7CglpZiAoc2V0cCkgewoJCWVycm9yID0g
Y29weWluKHVhcC0+c2V0LCBzZXRwLCBzaXplb2Yoc2V0KSk7CgkJaWYgKGVy
cm9yKQoJCQlyZXR1cm4gKGVycm9yKTsKCX0KCWVycm9yID0ga2Vybl9zaWdw
cm9jbWFzayh1YXAtPmhvdywgc2V0cCwgb3NldHApOwoJaWYgKG9zZXRwICYm
ICFlcnJvcikgewoJCWVycm9yID0gY29weW91dChvc2V0cCwgdWFwLT5vc2V0
LCBzaXplb2Yob3NldCkpOwoJfQoJcmV0dXJuIChlcnJvcik7Cn0KCmludApr
ZXJuX3NpZ3BlbmRpbmcoc3RydWN0IF9fc2lnc2V0ICpzZXQpCnsKCXN0cnVj
dCB0aHJlYWQgKnRkID0gY3VydGhyZWFkOwoJc3RydWN0IHByb2MgKnAgPSB0
ZC0+dGRfcHJvYzsKCgkqc2V0ID0gcC0+cF9zaWdsaXN0OwoKCXJldHVybiAo
MCk7Cn0KCmludApzaWdwZW5kaW5nKHN0cnVjdCBzaWdwZW5kaW5nX2FyZ3Mg
KnVhcCkKewoJc2lnc2V0X3Qgc2V0OwoJaW50IGVycm9yOwoKCWVycm9yID0g
a2Vybl9zaWdwZW5kaW5nKCZzZXQpOwoKCWlmIChlcnJvciA9PSAwKQoJCWVy
cm9yID0gY29weW91dCgmc2V0LCB1YXAtPnNldCwgc2l6ZW9mKHNldCkpOwoJ
cmV0dXJuIChlcnJvcik7Cn0KCi8qCiAqIFN1c3BlbmQgcHJvY2VzcyB1bnRp
bCBzaWduYWwsIHByb3ZpZGluZyBtYXNrIHRvIGJlIHNldAogKiBpbiB0aGUg
bWVhbnRpbWUuCiAqLwppbnQKa2Vybl9zaWdzdXNwZW5kKHN0cnVjdCBfX3Np
Z3NldCAqc2V0KQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsK
CXN0cnVjdCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CglzdHJ1Y3Qgc2lnYWN0
cyAqcHMgPSBwLT5wX3NpZ2FjdHM7CgoJLyoKCSAqIFdoZW4gcmV0dXJuaW5n
IGZyb20gc2lnc3VzcGVuZCwgd2Ugd2FudAoJICogdGhlIG9sZCBtYXNrIHRv
IGJlIHJlc3RvcmVkIGFmdGVyIHRoZQoJICogc2lnbmFsIGhhbmRsZXIgaGFz
IGZpbmlzaGVkLiAgVGh1cywgd2UKCSAqIHNhdmUgaXQgaGVyZSBhbmQgbWFy
ayB0aGUgc2lnYWN0cyBzdHJ1Y3R1cmUKCSAqIHRvIGluZGljYXRlIHRoaXMu
CgkgKi8KCXAtPnBfb2xkc2lnbWFzayA9IHAtPnBfc2lnbWFzazsKCXAtPnBf
ZmxhZyB8PSBQX09MRE1BU0s7CgoJU0lHX0NBTlRNQVNLKCpzZXQpOwoJcC0+
cF9zaWdtYXNrID0gKnNldDsKCXdoaWxlICh0c2xlZXAocHMsIFBDQVRDSCwg
InBhdXNlIiwgMCkgPT0gMCkKCQkvKiB2b2lkICovOwoJLyogYWx3YXlzIHJl
dHVybiBFSU5UUiByYXRoZXIgdGhhbiBFUkVTVEFSVC4uLiAqLwoJcmV0dXJu
IChFSU5UUik7Cn0KCi8qCiAqIE5vdGUgbm9uc3RhbmRhcmQgY2FsbGluZyBj
b252ZW50aW9uOiBsaWJjIHN0dWIgcGFzc2VzIG1hc2ssIG5vdAogKiBwb2lu
dGVyLCB0byBzYXZlIGEgY29weWluLgogKi8KaW50CnNpZ3N1c3BlbmQoc3Ry
dWN0IHNpZ3N1c3BlbmRfYXJncyAqdWFwKQp7CglzaWdzZXRfdCBtYXNrOwoJ
aW50IGVycm9yOwoKCWVycm9yID0gY29weWluKHVhcC0+c2lnbWFzaywgJm1h
c2ssIHNpemVvZihtYXNrKSk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIChlcnJv
cik7CgoJZXJyb3IgPSBrZXJuX3NpZ3N1c3BlbmQoJm1hc2spOwoKCXJldHVy
biAoZXJyb3IpOwp9CgppbnQKa2Vybl9zaWdhbHRzdGFjayhzdHJ1Y3Qgc2ln
YWx0c3RhY2sgKnNzLCBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKm9zcykKewoJc3Ry
dWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7CglzdHJ1Y3QgcHJvYyAqcCA9
IHRkLT50ZF9wcm9jOwoKCWlmICgocC0+cF9mbGFnICYgUF9BTFRTVEFDSykg
PT0gMCkKCQlwLT5wX3NpZ3N0ay5zc19mbGFncyB8PSBTU19ESVNBQkxFOwoK
CWlmIChvc3MpCgkJKm9zcyA9IHAtPnBfc2lnc3RrOwoKCWlmIChzcykgewoJ
CWlmIChzcy0+c3NfZmxhZ3MgJiBTU19ESVNBQkxFKSB7CgkJCWlmIChwLT5w
X3NpZ3N0ay5zc19mbGFncyAmIFNTX09OU1RBQ0spCgkJCQlyZXR1cm4gKEVJ
TlZBTCk7CgkJCXAtPnBfZmxhZyAmPSB+UF9BTFRTVEFDSzsKCQkJcC0+cF9z
aWdzdGsuc3NfZmxhZ3MgPSBzcy0+c3NfZmxhZ3M7CgkJfSBlbHNlIHsKCQkJ
aWYgKHNzLT5zc19zaXplIDwgcC0+cF9zeXNlbnQtPnN2X21pbnNpZ3N0a3N6
KQoJCQkJcmV0dXJuIChFTk9NRU0pOwoJCQlwLT5wX2ZsYWcgfD0gUF9BTFRT
VEFDSzsKCQkJcC0+cF9zaWdzdGsgPSAqc3M7CgkJfQoJfQoKCXJldHVybiAo
MCk7Cn0KCmludApzaWdhbHRzdGFjayhzdHJ1Y3Qgc2lnYWx0c3RhY2tfYXJn
cyAqdWFwKQp7CglzdGFja190IHNzLCBvc3M7CglpbnQgZXJyb3I7CgoJaWYg
KHVhcC0+c3MpIHsKCQllcnJvciA9IGNvcHlpbih1YXAtPnNzLCAmc3MsIHNp
emVvZihzcykpOwoJCWlmIChlcnJvcikKCQkJcmV0dXJuIChlcnJvcik7Cgl9
CgoJZXJyb3IgPSBrZXJuX3NpZ2FsdHN0YWNrKHVhcC0+c3MgPyAmc3MgOiBO
VUxMLAoJICAgIHVhcC0+b3NzID8gJm9zcyA6IE5VTEwpOwoKCWlmIChlcnJv
ciA9PSAwICYmIHVhcC0+b3NzKQoJCWVycm9yID0gY29weW91dCgmb3NzLCB1
YXAtPm9zcywgc2l6ZW9mKCp1YXAtPm9zcykpOwoJcmV0dXJuIChlcnJvcik7
Cn0KCi8qCiAqIENvbW1vbiBjb2RlIGZvciBraWxsIHByb2Nlc3MgZ3JvdXAv
YnJvYWRjYXN0IGtpbGwuCiAqIGNwIGlzIGNhbGxpbmcgcHJvY2Vzcy4KICov
CnN0YXRpYyBpbnQKa2lsbHBnKGludCBzaWcsIGludCBwZ2lkLCBpbnQgYWxs
KQp7CglzdHJ1Y3QgcHJvYyAqY3AgPSBjdXJwcm9jOwoJc3RydWN0IHByb2Mg
KnA7CglzdHJ1Y3QgcGdycCAqcGdycDsKCWludCBuZm91bmQgPSAwOwoKCWlm
IChhbGwpIHsKCQkvKgoJCSAqIGJyb2FkY2FzdAoJCSAqLwoJCUZPUkVBQ0hf
UFJPQ19JTl9TWVNURU0ocCkgewoJCQlpZiAocC0+cF9waWQgPD0gMSB8fCBw
LT5wX2ZsYWcgJiBQX1NZU1RFTSB8fAoJCQkgICAgcCA9PSBjcCB8fCAhQ0FO
U0lHTkFMKHAsIHNpZykpCgkJCQljb250aW51ZTsKCQkJbmZvdW5kKys7CgkJ
CWlmIChzaWcpCgkJCQlwc2lnbmFsKHAsIHNpZyk7CgkJfQoJfSBlbHNlIHsK
CQlpZiAocGdpZCA9PSAwKSB7CgkJCS8qCgkJCSAqIHplcm8gcGdpZCBtZWFu
cyBzZW5kIHRvIG15IHByb2Nlc3MgZ3JvdXAuCgkJCSAqLwoJCQlwZ3JwID0g
Y3AtPnBfcGdycDsKCQl9IGVsc2UgewoJCQlwZ3JwID0gcGdmaW5kKHBnaWQp
OwoJCQlpZiAocGdycCA9PSBOVUxMKQoJCQkJcmV0dXJuIChFU1JDSCk7CgkJ
fQoJCUxJU1RfRk9SRUFDSChwLCAmcGdycC0+cGdfbWVtYmVycywgcF9wZ2xp
c3QpIHsKCQkJaWYgKHAtPnBfcGlkIDw9IDEgfHwgcC0+cF9mbGFnICYgUF9T
WVNURU0gfHwKCQkJICAgIHAtPnBfc3RhdCA9PSBTWk9NQiB8fAoJCQkgICAg
IUNBTlNJR05BTChwLCBzaWcpKQoJCQkJY29udGludWU7CgkJCW5mb3VuZCsr
OwoJCQlpZiAoc2lnKQoJCQkJcHNpZ25hbChwLCBzaWcpOwoJCX0KCX0KCXJl
dHVybiAobmZvdW5kID8gMCA6IEVTUkNIKTsKfQoKaW50Cmtlcm5fa2lsbChp
bnQgc2lnLCBpbnQgcGlkKQp7CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRo
cmVhZDsKCXN0cnVjdCBwcm9jICpwID0gdGQtPnRkX3Byb2M7CgoJaWYgKCh1
X2ludClzaWcgPiBfU0lHX01BWFNJRykKCQlyZXR1cm4gKEVJTlZBTCk7Cglp
ZiAocGlkID4gMCkgewoJCS8qIGtpbGwgc2luZ2xlIHByb2Nlc3MgKi8KCQlp
ZiAoKHAgPSBwZmluZChwaWQpKSA9PSBOVUxMKQoJCQlyZXR1cm4gKEVTUkNI
KTsKCQlpZiAoIUNBTlNJR05BTChwLCBzaWcpKQoJCQlyZXR1cm4gKEVQRVJN
KTsKCQlpZiAoc2lnKQoJCQlwc2lnbmFsKHAsIHNpZyk7CgkJcmV0dXJuICgw
KTsKCX0KCXN3aXRjaCAocGlkKSB7CgljYXNlIC0xOgkJLyogYnJvYWRjYXN0
IHNpZ25hbCAqLwoJCXJldHVybiAoa2lsbHBnKHNpZywgMCwgMSkpOwoJY2Fz
ZSAwOgkJCS8qIHNpZ25hbCBvd24gcHJvY2VzcyBncm91cCAqLwoJCXJldHVy
biAoa2lsbHBnKHNpZywgMCwgMCkpOwoJZGVmYXVsdDoJCS8qIG5lZ2F0aXZl
IGV4cGxpY2l0IHByb2Nlc3MgZ3JvdXAgKi8KCQlyZXR1cm4gKGtpbGxwZyhz
aWcsIC1waWQsIDApKTsKCX0KCS8qIE5PVFJFQUNIRUQgKi8KfQoKaW50Cmtp
bGwoc3RydWN0IGtpbGxfYXJncyAqdWFwKQp7CglpbnQgZXJyb3I7CgoJZXJy
b3IgPSBrZXJuX2tpbGwodWFwLT5zaWdudW0sIHVhcC0+cGlkKTsKCglyZXR1
cm4gKGVycm9yKTsKfQoKLyoKICogU2VuZCBhIHNpZ25hbCB0byBhIHByb2Nl
c3MgZ3JvdXAuCiAqLwp2b2lkCmdzaWduYWwoaW50IHBnaWQsIGludCBzaWcp
CnsKCXN0cnVjdCBwZ3JwICpwZ3JwOwoKCWlmIChwZ2lkICYmIChwZ3JwID0g
cGdmaW5kKHBnaWQpKSkKCQlwZ3NpZ25hbChwZ3JwLCBzaWcsIDApOwp9Cgov
KgogKiBTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyBncm91cC4gIElmIGNo
ZWNrdHR5IGlzIDEsCiAqIGxpbWl0IHRvIG1lbWJlcnMgd2hpY2ggaGF2ZSBh
IGNvbnRyb2xsaW5nIHRlcm1pbmFsLgogKi8Kdm9pZApwZ3NpZ25hbChzdHJ1
Y3QgcGdycCAqcGdycCwgaW50IHNpZywgaW50IGNoZWNrY3R0eSkKewoJc3Ry
dWN0IHByb2MgKnA7CgoJaWYgKHBncnApCgkJTElTVF9GT1JFQUNIKHAsICZw
Z3JwLT5wZ19tZW1iZXJzLCBwX3BnbGlzdCkKCQkJaWYgKGNoZWNrY3R0eSA9
PSAwIHx8IHAtPnBfZmxhZyAmIFBfQ09OVFJPTFQpCgkJCQlwc2lnbmFsKHAs
IHNpZyk7Cn0KCi8qCiAqIFNlbmQgYSBzaWduYWwgY2F1c2VkIGJ5IGEgdHJh
cCB0byB0aGUgY3VycmVudCBwcm9jZXNzLgogKiBJZiBpdCB3aWxsIGJlIGNh
dWdodCBpbW1lZGlhdGVseSwgZGVsaXZlciBpdCB3aXRoIGNvcnJlY3QgY29k
ZS4KICogT3RoZXJ3aXNlLCBwb3N0IGl0IG5vcm1hbGx5LgogKi8Kdm9pZAp0
cmFwc2lnbmFsKHN0cnVjdCBwcm9jICpwLCBpbnQgc2lnLCB1X2xvbmcgY29k
ZSkKewoJc3RydWN0IHNpZ2FjdHMgKnBzID0gcC0+cF9zaWdhY3RzOwoKCWlm
ICgocC0+cF9mbGFnICYgUF9UUkFDRUQpID09IDAgJiYgU0lHSVNNRU1CRVIo
cC0+cF9zaWdjYXRjaCwgc2lnKSAmJgoJICAgICFTSUdJU01FTUJFUihwLT5w
X3NpZ21hc2ssIHNpZykpIHsKCQlwLT5wX3N0YXRzLT5wX3J1LnJ1X25zaWdu
YWxzKys7CgkJaWYgKHAtPmNoa3B0KQoJCQlwLT5jaGtwdF9zaWcgPSBzaWc7
CiNpZmRlZiBLVFJBQ0UKCQlpZiAoS1RSUE9JTlQocC0+cF90aHJlYWQsIEtU
Ul9QU0lHKSkKCQkJa3RycHNpZyhwLT5wX3RyYWNlcCwgc2lnLCBwcy0+cHNf
c2lnYWN0W19TSUdfSURYKHNpZyldLAoJCQkJJnAtPnBfc2lnbWFzaywgY29k
ZSk7CiNlbmRpZgoJCSgqcC0+cF9zeXNlbnQtPnN2X3NlbmRzaWcpKHBzLT5w
c19zaWdhY3RbX1NJR19JRFgoc2lnKV0sIHNpZywKCQkJCQkJJnAtPnBfc2ln
bWFzaywgY29kZSk7CgkJU0lHU0VUT1IocC0+cF9zaWdtYXNrLCBwcy0+cHNf
Y2F0Y2htYXNrW19TSUdfSURYKHNpZyldKTsKCQlpZiAoIVNJR0lTTUVNQkVS
KHBzLT5wc19zaWdub2RlZmVyLCBzaWcpKQoJCQlTSUdBRERTRVQocC0+cF9z
aWdtYXNrLCBzaWcpOwoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVz
ZXQsIHNpZykpIHsKCQkJLyoKCQkJICogU2VlIGtlcm5fc2lnYWN0aW9uKCkg
Zm9yIG9yaWdpbiBvZiB0aGlzIGNvZGUuCgkJCSAqLwoJCQlTSUdERUxTRVQo
cC0+cF9zaWdjYXRjaCwgc2lnKTsKCQkJaWYgKHNpZyAhPSBTSUdDT05UICYm
CgkJCSAgICBzaWdwcm9wKHNpZykgJiBTQV9JR05PUkUpCgkJCQlTSUdBRERT
RVQocC0+cF9zaWdpZ25vcmUsIHNpZyk7CgkJCXBzLT5wc19zaWdhY3RbX1NJ
R19JRFgoc2lnKV0gPSBTSUdfREZMOwoJCX0KCX0gZWxzZSB7CgkJcC0+cF9j
b2RlID0gY29kZTsJLyogWFhYIGZvciBjb3JlIGR1bXAvZGVidWdnZXIgKi8K
CQlwLT5wX3NpZyA9IHNpZzsJCS8qIFhYWCB0byB2ZXJpZnkgY29kZSAqLwoJ
CXBzaWduYWwocCwgc2lnKTsKCX0KfQoKLyoKICogU2VuZCB0aGUgc2lnbmFs
IHRvIHRoZSBwcm9jZXNzLiAgSWYgdGhlIHNpZ25hbCBoYXMgYW4gYWN0aW9u
LCB0aGUgYWN0aW9uCiAqIGlzIHVzdWFsbHkgcGVyZm9ybWVkIGJ5IHRoZSB0
YXJnZXQgcHJvY2VzcyByYXRoZXIgdGhhbiB0aGUgY2FsbGVyOyB3ZSBhZGQK
ICogdGhlIHNpZ25hbCB0byB0aGUgc2V0IG9mIHBlbmRpbmcgc2lnbmFscyBm
b3IgdGhlIHByb2Nlc3MuCiAqCiAqIEV4Y2VwdGlvbnM6CiAqICAgbyBXaGVu
IGEgc3RvcCBzaWduYWwgaXMgc2VudCB0byBhIHNsZWVwaW5nIHByb2Nlc3Mg
dGhhdCB0YWtlcyB0aGUKICogICAgIGRlZmF1bHQgYWN0aW9uLCB0aGUgcHJv
Y2VzcyBpcyBzdG9wcGVkIHdpdGhvdXQgYXdha2VuaW5nIGl0LgogKiAgIG8g
U0lHQ09OVCByZXN0YXJ0cyBzdG9wcGVkIHByb2Nlc3NlcyAob3IgcHV0cyB0
aGVtIGJhY2sgdG8gc2xlZXApCiAqICAgICByZWdhcmRsZXNzIG9mIHRoZSBz
aWduYWwgYWN0aW9uIChlZywgYmxvY2tlZCBvciBpZ25vcmVkKS4KICoKICog
T3RoZXIgaWdub3JlZCBzaWduYWxzIGFyZSBkaXNjYXJkZWQgaW1tZWRpYXRl
bHkuCiAqLwoKLyoKICogdGVtcG9yYXJ5IGhhY2sgdG8gYWxsb3cgY2hlY2tw
b2ludCBjb2RlIHRvIGNvbnRpbnVlIHRvCiAqIGJlIGluIGEgbW9kdWxlIGZv
ciB0aGUgbW9tZW50CiAqLwoKdm9pZApwc2lnbmFsKHN0cnVjdCBwcm9jICpw
LCBpbnQgc2lnKQp7CglpbnQgcywgcHJvcDsKCXNpZ190IGFjdGlvbjsKCglp
ZiAoc2lnID4gX1NJR19NQVhTSUcgfHwgc2lnIDw9IDApIHsKCQlwcmludGYo
InBzaWduYWw6IHNpZ25hbCAlZFxuIiwgc2lnKTsKCQlwYW5pYygicHNpZ25h
bCBzaWduYWwgbnVtYmVyIik7Cgl9CgoJcyA9IHNwbGhpZ2goKTsKCUtOT1RF
KCZwLT5wX2tsaXN0LCBOT1RFX1NJR05BTCB8IHNpZyk7CglzcGx4KHMpOwoK
CXByb3AgPSBzaWdwcm9wKHNpZyk7CgoJLyoKCSAqIElmIHByb2MgaXMgdHJh
Y2VkLCBhbHdheXMgZ2l2ZSBwYXJlbnQgYSBjaGFuY2U7CgkgKiBpZiBzaWdu
YWwgZXZlbnQgaXMgdHJhY2tlZCBieSBwcm9jZnMsIGdpdmUgKnRoYXQqCgkg
KiBhIGNoYW5jZSwgYXMgd2VsbC4KCSAqLwoJaWYgKChwLT5wX2ZsYWcgJiBQ
X1RSQUNFRCkgfHwgKHAtPnBfc3RvcHMgJiBTX1NJRykpIHsKCQlhY3Rpb24g
PSBTSUdfREZMOwoJfSBlbHNlIHsKCQkvKgoJCSAqIElmIHRoZSBzaWduYWwg
aXMgYmVpbmcgaWdub3JlZCwKCQkgKiB0aGVuIHdlIGZvcmdldCBhYm91dCBp
dCBpbW1lZGlhdGVseS4KCQkgKiAoTm90ZTogd2UgZG9uJ3Qgc2V0IFNJR0NP
TlQgaW4gcF9zaWdpZ25vcmUsCgkJICogYW5kIGlmIGl0IGlzIHNldCB0byBT
SUdfSUdOLAoJCSAqIGFjdGlvbiB3aWxsIGJlIFNJR19ERkwgaGVyZS4pCgkJ
ICovCgkJaWYgKFNJR0lTTUVNQkVSKHAtPnBfc2lnaWdub3JlLCBzaWcpIHx8
IChwLT5wX2ZsYWcgJiBQX1dFWElUKSkKCQkJcmV0dXJuOwoJCWlmIChTSUdJ
U01FTUJFUihwLT5wX3NpZ21hc2ssIHNpZykpCgkJCWFjdGlvbiA9IFNJR19I
T0xEOwoJCWVsc2UgaWYgKFNJR0lTTUVNQkVSKHAtPnBfc2lnY2F0Y2gsIHNp
ZykpCgkJCWFjdGlvbiA9IFNJR19DQVRDSDsKCQllbHNlCgkJCWFjdGlvbiA9
IFNJR19ERkw7Cgl9CgoJaWYgKHAtPnBfbmljZSA+IE5aRVJPICYmIGFjdGlv
biA9PSBTSUdfREZMICYmIChwcm9wICYgU0FfS0lMTCkgJiYKCSAgICAocC0+
cF9mbGFnICYgUF9UUkFDRUQpID09IDApIHsKCQlwLT5wX25pY2UgPSBOWkVS
TzsKCX0KCglpZiAocHJvcCAmIFNBX0NPTlQpCgkJU0lHX1NUT1BTSUdNQVNL
KHAtPnBfc2lnbGlzdCk7CgkKCglpZiAocHJvcCAmIFNBX1NUT1ApIHsKCQkv
KgoJCSAqIElmIHNlbmRpbmcgYSB0dHkgc3RvcCBzaWduYWwgdG8gYSBtZW1i
ZXIgb2YgYW4gb3JwaGFuZWQKCQkgKiBwcm9jZXNzIGdyb3VwLCBkaXNjYXJk
IHRoZSBzaWduYWwgaGVyZSBpZiB0aGUgYWN0aW9uCgkJICogaXMgZGVmYXVs
dDsgZG9uJ3Qgc3RvcCB0aGUgcHJvY2VzcyBiZWxvdyBpZiBzbGVlcGluZywK
CQkgKiBhbmQgZG9uJ3QgY2xlYXIgYW55IHBlbmRpbmcgU0lHQ09OVC4KCQkg
Ki8KCQlpZiAocHJvcCAmIFNBX1RUWVNUT1AgJiYgcC0+cF9wZ3JwLT5wZ19q
b2JjID09IDAgJiYKCQkgICAgYWN0aW9uID09IFNJR19ERkwpIHsKCQkgICAg
ICAgIHJldHVybjsKCQl9CgkJU0lHX0NPTlRTSUdNQVNLKHAtPnBfc2lnbGlz
dCk7Cgl9CglTSUdBRERTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoKCS8qCgkg
KiBEZWZlciBmdXJ0aGVyIHByb2Nlc3NpbmcgZm9yIHNpZ25hbHMgd2hpY2gg
YXJlIGhlbGQsCgkgKiBleGNlcHQgdGhhdCBzdG9wcGVkIHByb2Nlc3NlcyBt
dXN0IGJlIGNvbnRpbnVlZCBieSBTSUdDT05ULgoJICovCglpZiAoYWN0aW9u
ID09IFNJR19IT0xEICYmICghKHByb3AgJiBTQV9DT05UKSB8fCBwLT5wX3N0
YXQgIT0gU1NUT1ApKQoJCXJldHVybjsKCXMgPSBzcGxoaWdoKCk7Cglzd2l0
Y2ggKHAtPnBfc3RhdCkgewoJY2FzZSBTU0xFRVA6CgkJLyoKCQkgKiBJZiBw
cm9jZXNzIGlzIHNsZWVwaW5nIHVuaW50ZXJydXB0aWJseQoJCSAqIHdlIGNh
bid0IGludGVycnVwdCB0aGUgc2xlZXAuLi4gdGhlIHNpZ25hbCB3aWxsCgkJ
ICogYmUgbm90aWNlZCB3aGVuIHRoZSBwcm9jZXNzIHJldHVybnMgdGhyb3Vn
aAoJCSAqIHRyYXAoKSBvciBzeXNjYWxsKCkuCgkJICovCgkJaWYgKChwLT5w
X2ZsYWcgJiBQX1NJTlRSKSA9PSAwKQoJCQlnb3RvIG91dDsKCQkvKgoJCSAq
IFByb2Nlc3MgaXMgc2xlZXBpbmcgYW5kIHRyYWNlZC4uLiBtYWtlIGl0IHJ1
bm5hYmxlCgkJICogc28gaXQgY2FuIGRpc2NvdmVyIHRoZSBzaWduYWwgaW4g
aXNzaWduYWwoKSBhbmQgc3RvcAoJCSAqIGZvciB0aGUgcGFyZW50LgoJCSAq
LwoJCWlmIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCkKCQkJZ290byBydW47CgkJ
LyoKCQkgKiBJZiBTSUdDT05UIGlzIGRlZmF1bHQgKG9yIGlnbm9yZWQpIGFu
ZCBwcm9jZXNzIGlzCgkJICogYXNsZWVwLCB3ZSBhcmUgZmluaXNoZWQ7IHRo
ZSBwcm9jZXNzIHNob3VsZCBub3QKCQkgKiBiZSBhd2FrZW5lZC4KCQkgKi8K
CQlpZiAoKHByb3AgJiBTQV9DT05UKSAmJiBhY3Rpb24gPT0gU0lHX0RGTCkg
ewoJCQlTSUdERUxTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCQlnb3RvIG91
dDsKCQl9CgkJLyoKCQkgKiBXaGVuIGEgc2xlZXBpbmcgcHJvY2VzcyByZWNl
aXZlcyBhIHN0b3AKCQkgKiBzaWduYWwsIHByb2Nlc3MgaW1tZWRpYXRlbHkg
aWYgcG9zc2libGUuCgkJICogQWxsIG90aGVyIChjYXVnaHQgb3IgZGVmYXVs
dCkgc2lnbmFscwoJCSAqIGNhdXNlIHRoZSBwcm9jZXNzIHRvIHJ1bi4KCQkg
Ki8KCQlpZiAocHJvcCAmIFNBX1NUT1ApIHsKCQkJaWYgKGFjdGlvbiAhPSBT
SUdfREZMKQoJCQkJZ290byBydW47CgkJCS8qCgkJCSAqIElmIGEgY2hpbGQg
aG9sZGluZyBwYXJlbnQgYmxvY2tlZCwKCQkJICogc3RvcHBpbmcgY291bGQg
Y2F1c2UgZGVhZGxvY2suCgkJCSAqLwoJCQlpZiAocC0+cF9mbGFnICYgUF9Q
UFdBSVQpCgkJCQlnb3RvIG91dDsKCQkJU0lHREVMU0VUKHAtPnBfc2lnbGlz
dCwgc2lnKTsKCQkJcC0+cF94c3RhdCA9IHNpZzsKCQkJaWYgKChwLT5wX3Bw
dHItPnBfcHJvY3NpZy0+cHNfZmxhZyAmIFBTX05PQ0xEU1RPUCkgPT0gMCkK
CQkJCXBzaWduYWwocC0+cF9wcHRyLCBTSUdDSExEKTsKCQkJc3RvcChwKTsK
CQkJZ290byBvdXQ7CgkJfSBlbHNlIHsKCQkJZ290byBydW47CgkJfQoJCS8q
Tk9UUkVBQ0hFRCovCgljYXNlIFNTVE9QOgoJCS8qCgkJICogSWYgdHJhY2Vk
IHByb2Nlc3MgaXMgYWxyZWFkeSBzdG9wcGVkLAoJCSAqIHRoZW4gbm8gZnVy
dGhlciBhY3Rpb24gaXMgbmVjZXNzYXJ5LgoJCSAqLwoJCWlmIChwLT5wX2Zs
YWcgJiBQX1RSQUNFRCkKCQkJZ290byBvdXQ7CgoJCS8qCgkJICogS2lsbCBz
aWduYWwgYWx3YXlzIHNldHMgcHJvY2Vzc2VzIHJ1bm5pbmcuCgkJICovCgkJ
aWYgKHNpZyA9PSBTSUdLSUxMKQoJCQlnb3RvIHJ1bjsKCgkJaWYgKHByb3Ag
JiBTQV9DT05UKSB7CgkJCS8qCgkJCSAqIElmIFNJR0NPTlQgaXMgZGVmYXVs
dCAob3IgaWdub3JlZCksIHdlIGNvbnRpbnVlIHRoZQoJCQkgKiBwcm9jZXNz
IGJ1dCBkb24ndCBsZWF2ZSB0aGUgc2lnbmFsIGluIHBfc2lnbGlzdCwgYXMK
CQkJICogaXQgaGFzIG5vIGZ1cnRoZXIgYWN0aW9uLiAgSWYgU0lHQ09OVCBp
cyBoZWxkLCB3ZQoJCQkgKiBjb250aW51ZSB0aGUgcHJvY2VzcyBhbmQgbGVh
dmUgdGhlIHNpZ25hbCBpbgoJCQkgKiBwX3NpZ2xpc3QuICBJZiB0aGUgcHJv
Y2VzcyBjYXRjaGVzIFNJR0NPTlQsIGxldCBpdAoJCQkgKiBoYW5kbGUgdGhl
IHNpZ25hbCBpdHNlbGYuICBJZiBpdCBpc24ndCB3YWl0aW5nIG9uCgkJCSAq
IGFuIGV2ZW50LCB0aGVuIGl0IGdvZXMgYmFjayB0byBydW4gc3RhdGUuCgkJ
CSAqIE90aGVyd2lzZSwgcHJvY2VzcyBnb2VzIGJhY2sgdG8gc2xlZXAgc3Rh
dGUuCgkJCSAqLwoJCQlpZiAoYWN0aW9uID09IFNJR19ERkwpCgkJCQlTSUdE
RUxTRVQocC0+cF9zaWdsaXN0LCBzaWcpOwoJCQlpZiAoYWN0aW9uID09IFNJ
R19DQVRDSCkKCQkJCWdvdG8gcnVuOwoJCQlpZiAocC0+cF93Y2hhbiA9PSAw
KQoJCQkJZ290byBydW47CgkJCWNscnJ1bm5hYmxlKHAsIFNTTEVFUCk7CgkJ
CWdvdG8gb3V0OwoJCX0KCgkJaWYgKHByb3AgJiBTQV9TVE9QKSB7CgkJCS8q
CgkJCSAqIEFscmVhZHkgc3RvcHBlZCwgZG9uJ3QgbmVlZCB0byBzdG9wIGFn
YWluLgoJCQkgKiAoSWYgd2UgZGlkIHRoZSBzaGVsbCBjb3VsZCBnZXQgY29u
ZnVzZWQuKQoJCQkgKi8KCQkJU0lHREVMU0VUKHAtPnBfc2lnbGlzdCwgc2ln
KTsKCQkJZ290byBvdXQ7CgkJfQoKCQkvKgoJCSAqIElmIHByb2Nlc3MgaXMg
c2xlZXBpbmcgaW50ZXJydXB0aWJseSwgdGhlbiBzaW11bGF0ZSBhCgkJICog
d2FrZXVwIHNvIHRoYXQgd2hlbiBpdCBpcyBjb250aW51ZWQsIGl0IHdpbGwg
YmUgbWFkZQoJCSAqIHJ1bm5hYmxlIGFuZCBjYW4gbG9vayBhdCB0aGUgc2ln
bmFsLiAgQnV0IGRvbid0IG1ha2UKCQkgKiB0aGUgcHJvY2VzcyBydW5uYWJs
ZSwgbGVhdmUgaXQgc3RvcHBlZC4KCQkgKi8KCQlpZiAocC0+cF93Y2hhbiAm
JiAocC0+cF9mbGFnICYgUF9TSU5UUikpCgkJCXVuc2xlZXAocC0+cF90aHJl
YWQpOwoJCWdvdG8gb3V0OwoJZGVmYXVsdDoKCQkvKgoJCSAqIFNSVU4sIFNJ
REwsIFNaT01CIGRvIG5vdGhpbmcgd2l0aCB0aGUgc2lnbmFsLAoJCSAqIG90
aGVyIHRoYW4ga2lja2luZyBvdXJzZWx2ZXMgaWYgd2UgYXJlIHJ1bm5pbmcu
CgkJICogSXQgd2lsbCBlaXRoZXIgbmV2ZXIgYmUgbm90aWNlZCwgb3Igbm90
aWNlZCB2ZXJ5IHNvb24uCgkJICoKCQkgKiBOb3RlIHRoYXQgcF90aHJlYWQg
bWF5IGJlIE5VTEwgb3IgbWF5IG5vdCBiZSBjb21wbGV0ZWx5CgkJICogaW5p
dGlhbGl6ZWQgaWYgdGhlIHByb2Nlc3MgaXMgaW4gdGhlIFNJREwgb3IgU1pP
TUIgc3RhdGUuCgkJICoKCQkgKiBGb3IgU01QIHdlIG1heSBoYXZlIHRvIGZv
cndhcmQgdGhlIHJlcXVlc3QgdG8gYW5vdGhlciBjcHUuCgkJICogWVlZIHRo
ZSBNUCBsb2NrIHByZXZlbnRzIHRoZSB0YXJnZXQgcHJvY2VzcyBmcm9tIG1v
dmluZwoJCSAqIHRvIGFub3RoZXIgY3B1LCBzZWUga2Vybi9rZXJuX3N3aXRj
aC5jCgkJICoKCQkgKiBJZiB0aGUgdGFyZ2V0IHRocmVhZCBpcyB3YWl0aW5n
IG9uIGl0cyBtZXNzYWdlIHBvcnQsCgkJICogd2FrZXVwIHRoZSB0YXJnZXQg
dGhyZWFkIHNvIGl0IGNhbiBjaGVjayAob3IgaWdub3JlKQoJCSAqIHRoZSBu
ZXcgc2lnbmFsLiAgWVlZIG5lZWRzIGNsZWFudXAuCgkJICovCiNpZmRlZiBT
TVAKCQlpZiAocCA9PSBsd2t0X3ByZWVtcHRlZF9wcm9jKCkpIHsKCQkJc2ln
bm90aWZ5KCk7CgkJfSBlbHNlIGlmIChwLT5wX3N0YXQgPT0gU1JVTikgewoJ
CQlzdHJ1Y3QgdGhyZWFkICp0ZCA9IHAtPnBfdGhyZWFkOwoKCQkJS0FTU0VS
VCh0ZCAhPSBOVUxMLCAKCQkJICAgICgicGlkICVkIE5VTEwgcF90aHJlYWQg
c3RhdCAlZCBmbGFncyAlMDh4IiwKCQkJICAgIHAtPnBfcGlkLCBwLT5wX3N0
YXQsIHAtPnBfZmxhZykpOwoKCQkJaWYgKHRkLT50ZF9nZCAhPSBteWNwdSkK
CQkJCWx3a3Rfc2VuZF9pcGlxKHRkLT50ZF9nZCwgc2lnbm90aWZ5X3JlbW90
ZSwgcCk7CgkJCWVsc2UgaWYgKHRkLT50ZF9tc2dwb3J0Lm1wX2ZsYWdzICYg
TVNHUE9SVEZfV0FJVElORykKCQkJCWx3a3Rfc2NoZWR1bGUodGQpOwoJCX0K
I2Vsc2UKCQlpZiAocCA9PSBsd2t0X3ByZWVtcHRlZF9wcm9jKCkpIHsKCQkJ
c2lnbm90aWZ5KCk7CgkJfSBlbHNlIGlmIChwLT5wX3N0YXQgPT0gU1JVTikg
ewoJCQlzdHJ1Y3QgdGhyZWFkICp0ZCA9IHAtPnBfdGhyZWFkOwoKCQkJS0FT
U0VSVCh0ZCAhPSBOVUxMLCAKCQkJICAgICgicGlkICVkIE5VTEwgcF90aHJl
YWQgc3RhdCAlZCBmbGFncyAlMDh4IiwKCQkJICAgIHAtPnBfcGlkLCBwLT5w
X3N0YXQsIHAtPnBfZmxhZykpOwoKCQkJaWYgKHRkLT50ZF9tc2dwb3J0Lm1w
X2ZsYWdzICYgTVNHUE9SVEZfV0FJVElORykKCQkJCWx3a3Rfc2NoZWR1bGUo
dGQpOwoJCX0KI2VuZGlmCgkJZ290byBvdXQ7Cgl9CgkvKk5PVFJFQUNIRUQq
LwpydW46CglzZXRydW5uYWJsZShwKTsKb3V0OgoJc3BseChzKTsKfQoKI2lm
ZGVmIFNNUAoKLyoKICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGFu
IElQSS4gIFdlIHdpbGwgYmUgaW4gYSBjcml0aWNhbCBzZWN0aW9uIGJ1dAog
KiB0aGUgTVAgbG9jayB3aWxsIE5PVCBiZSBoZWxkLiAgQWxzbyBub3RlIHRo
YXQgYnkgdGhlIHRpbWUgdGhlIGlwaSBtZXNzYWdlCiAqIGdldHMgdG8gdXMg
dGhlIHByb2Nlc3MgJ3AnIChhcmcpIG1heSBubyBsb25nZXIgYmUgc2NoZWR1
bGVkIG9yIGV2ZW4gdmFsaWQuCiAqLwpzdGF0aWMgdm9pZApzaWdub3RpZnlf
cmVtb3RlKHZvaWQgKmFyZykKewoJc3RydWN0IHByb2MgKnAgPSBhcmc7CgoJ
aWYgKHAgPT0gbHdrdF9wcmVlbXB0ZWRfcHJvYygpKSB7CgkJc2lnbm90aWZ5
KCk7Cgl9IGVsc2UgewoJCXN0cnVjdCB0aHJlYWQgKnRkID0gcC0+cF90aHJl
YWQ7CgkJaWYgKHRkLT50ZF9tc2dwb3J0Lm1wX2ZsYWdzICYgTVNHUE9SVEZf
V0FJVElORykKCQkJbHdrdF9zY2hlZHVsZSh0ZCk7Cgl9Cn0KCiNlbmRpZgoK
c3RhdGljIGludAprZXJuX3NpZ3RpbWVkd2FpdChzaWdzZXRfdCB3YWl0c2V0
LCBzaWdpbmZvX3QgKmluZm8sIHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCkK
ewoJc2lnc2V0X3Qgc2F2ZWRtYXNrLCBzZXQ7CglzdHJ1Y3QgcHJvYyAqcCA9
IGN1cnByb2M7CglpbnQgZXJyb3IsIHNpZywgaHosIHRpbWV2YWxpZCA9IDA7
CglzdHJ1Y3QgdGltZXNwZWMgcnRzLCBldHMsIHRzOwoJc3RydWN0IHRpbWV2
YWwgdHY7CgoJZXJyb3IgPSAwOwoJc2lnID0gMDsKCVNJR19DQU5UTUFTSyh3
YWl0c2V0KTsKCXNhdmVkbWFzayA9IHAtPnBfc2lnbWFzazsKCglpZiAodGlt
ZW91dCkgewoJCWlmICh0aW1lb3V0LT50dl9zZWMgPj0gMCAmJiB0aW1lb3V0
LT50dl9uc2VjID49IDAgJiYKCQkgICAgdGltZW91dC0+dHZfbnNlYyA8IDEw
MDAwMDAwMDApIHsKCQkJdGltZXZhbGlkID0gMTsKCQkJZ2V0bmFub3VwdGlt
ZSgmcnRzKTsKCQkgCWV0cyA9IHJ0czsKCQkJdGltZXNwZWNhZGQoJmV0cywg
dGltZW91dCk7CgkJfQoJfQoKCWZvciAoOzspIHsKCQlzZXQgPSBwLT5wX3Np
Z2xpc3Q7CgkJU0lHU0VUQU5EKHNldCwgd2FpdHNldCk7CgkJaWYgKChzaWcg
PSBzaWdfZmZzKCZzZXQpKSAhPSAwKSB7CgkJCVNJR0ZJTExTRVQocC0+cF9z
aWdtYXNrKTsKCQkJU0lHREVMU0VUKHAtPnBfc2lnbWFzaywgc2lnKTsKCQkJ
U0lHX0NBTlRNQVNLKHAtPnBfc2lnbWFzayk7CgkJCXNpZyA9IGlzc2lnbmFs
KHApOwoJCQkvKgoJCQkgKiBJdCBtYXkgYmUgYSBTVE9QIHNpZ25hbCwgaW4g
dGhlIGNhc2UsIGlzc2lnbmFsCgkJCSAqIHJldHVybnMgMCwgYmVjYXVzZSB3
ZSBtYXkgc3RvcCB0aGVyZSwgYW5kIG5ldwoJCQkgKiBzaWduYWwgY2FuIGNv
bWUgaW4sIHdlIHNob3VsZCByZXN0YXJ0IGlmIHdlIGdvdAoJCQkgKiBub3Ro
aW5nLgoJCQkgKi8KCQkJaWYgKHNpZyA9PSAwKQoJCQkJY29udGludWU7CgkJ
CWVsc2UKCQkJCWJyZWFrOwoJCX0KCgkJLyoKCQkgKiBQcmV2aW91cyBjaGVj
a2luZyBnb3Qgbm90aGluZywgYW5kIHdlIHJldHJpZWQgYnV0IHN0aWxsCgkJ
ICogZ290IG5vdGhpbmcsIHdlIHNob3VsZCByZXR1cm4gdGhlIGVycm9yIHN0
YXR1cy4KCQkgKi8KCQlpZiAoZXJyb3IpCgkJCWJyZWFrOwoKCQkvKgoJCSAq
IFBPU0lYIHNheXMgdGhpcyBtdXN0IGJlIGNoZWNrZWQgYWZ0ZXIgbG9va2lu
ZyBmb3IgcGVuZGluZwoJCSAqIHNpZ25hbHMuCgkJICovCgkJaWYgKHRpbWVv
dXQpIHsKCQkJaWYgKCF0aW1ldmFsaWQpIHsKCQkJCWVycm9yID0gRUlOVkFM
OwoJCQkJYnJlYWs7CgkJCX0KCQkJZ2V0bmFub3VwdGltZSgmcnRzKTsKCQkJ
aWYgKHRpbWVzcGVjY21wKCZydHMsICZldHMsID49KSkgewoJCQkJZXJyb3Ig
PSBFQUdBSU47CgkJCQlicmVhazsKCQkJfQoJCQl0cyA9IGV0czsKCQkJdGlt
ZXNwZWNzdWIoJnRzLCAmcnRzKTsKCQkJVElNRVNQRUNfVE9fVElNRVZBTCgm
dHYsICZ0cyk7CgkJCWh6ID0gdHZ0b2h6X2hpZ2goJnR2KTsKCQl9IGVsc2UK
CQkJaHogPSAwOwoKCQlwLT5wX3NpZ21hc2sgPSBzYXZlZG1hc2s7CgkJU0lH
U0VUTkFORChwLT5wX3NpZ21hc2ssIHdhaXRzZXQpOwoJCWVycm9yID0gdHNs
ZWVwKCZwLT5wX3NpZ2FjdHMsIFBDQVRDSCwgInNpZ3d0IiwgaHopOwoJCWlm
ICh0aW1lb3V0KSB7CgkJCWlmIChlcnJvciA9PSBFUkVTVEFSVCkgewoJCQkJ
LyogY2FuIG5vdCByZXN0YXJ0IGEgdGltZW91dCB3YWl0LiAqLwoJCQkJZXJy
b3IgPSBFSU5UUjsKCQkJfSBlbHNlIGlmIChlcnJvciA9PSBFQUdBSU4pIHsK
CQkJCS8qIHdpbGwgY2FsY3VsYXRlIHRpbWVvdXQgYnkgb3Vyc2VsZi4gKi8K
CQkJCWVycm9yID0gMDsKCQkJfQoJCX0KCQkvKiBSZXRyeSAuLi4gKi8KCX0K
CglwLT5wX3NpZ21hc2sgPSBzYXZlZG1hc2s7CglpZiAoc2lnKSB7CgkJZXJy
b3IgPSAwOwoJCWJ6ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOwoJCWluZm8t
PnNpX3NpZ25vID0gc2lnOwoJCVNJR0RFTFNFVChwLT5wX3NpZ2xpc3QsIHNp
Zyk7CS8qIHRha2UgdGhlIHNpZ25hbCEgKi8KCX0KCXJldHVybiAoZXJyb3Ip
Owp9CgppbnQKc2lndGltZWR3YWl0KHN0cnVjdCBzaWd0aW1lZHdhaXRfYXJn
cyAqdWFwKQp7CglzdHJ1Y3QgdGltZXNwZWMgdHM7CglzdHJ1Y3QgdGltZXNw
ZWMgKnRpbWVvdXQ7CglzaWdzZXRfdCBzZXQ7CglzaWdpbmZvX3QgaW5mbzsK
CWludCBlcnJvcjsKCglpZiAodWFwLT50aW1lb3V0KSB7CgkJZXJyb3IgPSBj
b3B5aW4odWFwLT50aW1lb3V0LCAmdHMsIHNpemVvZih0cykpOwoJCWlmIChl
cnJvcikKCQkJcmV0dXJuIChlcnJvcik7CgkJdGltZW91dCA9ICZ0czsKCX0g
ZWxzZSB7CgkJdGltZW91dCA9IE5VTEw7Cgl9CgllcnJvciA9IGNvcHlpbih1
YXAtPnNldCwgJnNldCwgc2l6ZW9mKHNldCkpOwoJaWYgKGVycm9yKQoJCXJl
dHVybiAoZXJyb3IpOwoJZXJyb3IgPSBrZXJuX3NpZ3RpbWVkd2FpdChzZXQs
ICZpbmZvLCB0aW1lb3V0KTsKCWlmIChlcnJvcikKCQlyZXR1cm4gKGVycm9y
KTsKIAlpZiAodWFwLT5pbmZvKQoJCWVycm9yID0gY29weW91dCgmaW5mbywg
dWFwLT5pbmZvLCBzaXplb2YoaW5mbykpOwoJLyogUmVwb3N0IGlmIHdlIGdv
dCBhbiBlcnJvci4gKi8KCWlmIChlcnJvcikKCQlwc2lnbmFsKGN1cnByb2Ms
IGluZm8uc2lfc2lnbm8pOwoJZWxzZQoJCXVhcC0+c3lzbXNnX3Jlc3VsdCA9
IGluZm8uc2lfc2lnbm87CglyZXR1cm4gKGVycm9yKTsKfQoKaW50CnNpZ3dh
aXRpbmZvKHN0cnVjdCBzaWd3YWl0aW5mb19hcmdzICp1YXApCnsKCXNpZ2lu
Zm9fdCBpbmZvOwoJc2lnc2V0X3Qgc2V0OwoJaW50IGVycm9yOwoKCWVycm9y
ID0gY29weWluKHVhcC0+c2V0LCAmc2V0LCBzaXplb2Yoc2V0KSk7CglpZiAo
ZXJyb3IpCgkJcmV0dXJuIChlcnJvcik7CgllcnJvciA9IGtlcm5fc2lndGlt
ZWR3YWl0KHNldCwgJmluZm8sIE5VTEwpOwoJaWYgKGVycm9yKQoJCXJldHVy
biAoZXJyb3IpOwoJaWYgKHVhcC0+aW5mbykKCQllcnJvciA9IGNvcHlvdXQo
JmluZm8sIHVhcC0+aW5mbywgc2l6ZW9mKGluZm8pKTsKCS8qIFJlcG9zdCBp
ZiB3ZSBnb3QgYW4gZXJyb3IuICovCglpZiAoZXJyb3IpCgkJcHNpZ25hbChj
dXJwcm9jLCBpbmZvLnNpX3NpZ25vKTsKCWVsc2UKCQl1YXAtPnN5c21zZ19y
ZXN1bHQgPSBpbmZvLnNpX3NpZ25vOwoJcmV0dXJuIChlcnJvcik7Cn0KCi8q
CiAqIElmIHRoZSBjdXJyZW50IHByb2Nlc3MgaGFzIHJlY2VpdmVkIGEgc2ln
bmFsIHRoYXQgd291bGQgaW50ZXJydXB0IGEKICogc3lzdGVtIGNhbGwsIHJl
dHVybiBFSU5UUiBvciBFUkVTVEFSVCBhcyBhcHByb3ByaWF0ZS4KICovCmlu
dAppc2NhdWdodChzdHJ1Y3QgcHJvYyAqcCkKewoJaW50IHNpZzsKCglpZiAo
cCkgewoJCWlmICgoc2lnID0gQ1VSU0lHKHApKSAhPSAwKSB7CgkJCWlmIChT
SUdJU01FTUJFUihwLT5wX3NpZ2FjdHMtPnBzX3NpZ2ludHIsIHNpZykpCgkJ
CQlyZXR1cm4gKEVJTlRSKTsgICAgICAgICAgICAgICAgICAgICAgICAKCQkJ
cmV0dXJuIChFUkVTVEFSVCk7ICAgICAKCQl9ICAgICAgICAgICAgICAgICAg
ICAgICAgIAoJfQoJcmV0dXJuKEVXT1VMREJMT0NLKTsKfQoKLyoKICogSWYg
dGhlIGN1cnJlbnQgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgYSBzaWduYWwgKHNo
b3VsZCBiZSBjYXVnaHQgb3IgY2F1c2UKICogdGVybWluYXRpb24sIHNob3Vs
ZCBpbnRlcnJ1cHQgY3VycmVudCBzeXNjYWxsKSwgcmV0dXJuIHRoZSBzaWdu
YWwgbnVtYmVyLgogKiBTdG9wIHNpZ25hbHMgd2l0aCBkZWZhdWx0IGFjdGlv
biBhcmUgcHJvY2Vzc2VkIGltbWVkaWF0ZWx5LCB0aGVuIGNsZWFyZWQ7CiAq
IHRoZXkgYXJlbid0IHJldHVybmVkLiAgVGhpcyBpcyBjaGVja2VkIGFmdGVy
IGVhY2ggZW50cnkgdG8gdGhlIHN5c3RlbSBmb3IKICogYSBzeXNjYWxsIG9y
IHRyYXAgKHRob3VnaCB0aGlzIGNhbiB1c3VhbGx5IGJlIGRvbmUgd2l0aG91
dCBjYWxsaW5nIGlzc2lnbmFsCiAqIGJ5IGNoZWNraW5nIHRoZSBwZW5kaW5n
IHNpZ25hbCBtYXNrcyBpbiB0aGUgQ1VSU0lHIG1hY3JvLikgVGhlIG5vcm1h
bCBjYWxsCiAqIHNlcXVlbmNlIGlzCiAqCiAqCXdoaWxlIChzaWcgPSBDVVJT
SUcoY3VycHJvYykpCiAqCQlwb3N0c2lnKHNpZyk7CiAqLwppbnQKaXNzaWdu
YWwoc3RydWN0IHByb2MgKnApCnsKCXNpZ3NldF90IG1hc2s7CglpbnQgc2ln
LCBwcm9wOwoKCWZvciAoOzspIHsKCQlpbnQgdHJhY2VkID0gKHAtPnBfZmxh
ZyAmIFBfVFJBQ0VEKSB8fCAocC0+cF9zdG9wcyAmIFNfU0lHKTsKCgkJbWFz
ayA9IHAtPnBfc2lnbGlzdDsKCQlTSUdTRVROQU5EKG1hc2ssIHAtPnBfc2ln
bWFzayk7CgkJaWYgKHAtPnBfZmxhZyAmIFBfUFBXQUlUKQoJCQlTSUdfU1RP
UFNJR01BU0sobWFzayk7CgkJaWYgKCFTSUdOT1RFTVBUWShtYXNrKSkJIAkv
KiBubyBzaWduYWwgdG8gc2VuZCAqLwoJCQlyZXR1cm4gKDApOwoJCXNpZyA9
IHNpZ19mZnMoJm1hc2spOwoKCQlTVE9QRVZFTlQocCwgU19TSUcsIHNpZyk7
CgoJCS8qCgkJICogV2Ugc2hvdWxkIHNlZSBwZW5kaW5nIGJ1dCBpZ25vcmVk
IHNpZ25hbHMKCQkgKiBvbmx5IGlmIFBfVFJBQ0VEIHdhcyBvbiB3aGVuIHRo
ZXkgd2VyZSBwb3N0ZWQuCgkJICovCgkJaWYgKFNJR0lTTUVNQkVSKHAtPnBf
c2lnaWdub3JlLCBzaWcpICYmICh0cmFjZWQgPT0gMCkpIHsKCQkJU0lHREVM
U0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsKCQkJY29udGludWU7CgkJfQoJCWlm
IChwLT5wX2ZsYWcgJiBQX1RSQUNFRCAmJiAocC0+cF9mbGFnICYgUF9QUFdB
SVQpID09IDApIHsKCQkJLyoKCQkJICogSWYgdHJhY2VkLCBhbHdheXMgc3Rv
cCwgYW5kIHN0YXkKCQkJICogc3RvcHBlZCB1bnRpbCByZWxlYXNlZCBieSB0
aGUgcGFyZW50LgoJCQkgKi8KCQkJcC0+cF94c3RhdCA9IHNpZzsKCQkJcHNp
Z25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJCQlkbyB7CgkJCQlzdG9wKHAp
OwoJCQkJbWlfc3dpdGNoKHApOwoJCQl9IHdoaWxlICghdHJhY2VfcmVxKHAp
ICYmIHAtPnBfZmxhZyAmIFBfVFJBQ0VEKTsKCgkJCS8qCgkJCSAqIElmIHBh
cmVudCB3YW50cyB1cyB0byB0YWtlIHRoZSBzaWduYWwsCgkJCSAqIHRoZW4g
aXQgd2lsbCBsZWF2ZSBpdCBpbiBwLT5wX3hzdGF0OwoJCQkgKiBvdGhlcndp
c2Ugd2UganVzdCBsb29rIGZvciBzaWduYWxzIGFnYWluLgoJCQkgKi8KCQkJ
U0lHREVMU0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsJLyogY2xlYXIgb2xkIHNp
Z25hbCAqLwoJCQlzaWcgPSBwLT5wX3hzdGF0OwoJCQlpZiAoc2lnID09IDAp
CgkJCQljb250aW51ZTsKCgkJCS8qCgkJCSAqIFB1dCB0aGUgbmV3IHNpZ25h
bCBpbnRvIHBfc2lnbGlzdC4gIElmIHRoZQoJCQkgKiBzaWduYWwgaXMgYmVp
bmcgbWFza2VkLCBsb29rIGZvciBvdGhlciBzaWduYWxzLgoJCQkgKi8KCQkJ
U0lHQUREU0VUKHAtPnBfc2lnbGlzdCwgc2lnKTsKCQkJaWYgKFNJR0lTTUVN
QkVSKHAtPnBfc2lnbWFzaywgc2lnKSkKCQkJCWNvbnRpbnVlOwoKCQkJLyoK
CQkJICogSWYgdGhlIHRyYWNlZCBiaXQgZ290IHR1cm5lZCBvZmYsIGdvIGJh
Y2sgdXAKCQkJICogdG8gdGhlIHRvcCB0byByZXNjYW4gc2lnbmFscy4gIFRo
aXMgZW5zdXJlcwoJCQkgKiB0aGF0IHBfc2lnKiBhbmQgcHNfc2lnYWN0IGFy
ZSBjb25zaXN0ZW50LgoJCQkgKi8KCQkJaWYgKChwLT5wX2ZsYWcgJiBQX1RS
QUNFRCkgPT0gMCkKCQkJCWNvbnRpbnVlOwoJCX0KCgkJcHJvcCA9IHNpZ3By
b3Aoc2lnKTsKCgkJLyoKCQkgKiBEZWNpZGUgd2hldGhlciB0aGUgc2lnbmFs
IHNob3VsZCBiZSByZXR1cm5lZC4KCQkgKiBSZXR1cm4gdGhlIHNpZ25hbCdz
IG51bWJlciwgb3IgZmFsbCB0aHJvdWdoCgkJICogdG8gY2xlYXIgaXQgZnJv
bSB0aGUgcGVuZGluZyBtYXNrLgoJCSAqLwoJCXN3aXRjaCAoKGludCkoaW50
cHRyX3QpcC0+cF9zaWdhY3RzLT5wc19zaWdhY3RbX1NJR19JRFgoc2lnKV0p
IHsKCgkJY2FzZSAoaW50KVNJR19ERkw6CgkJCS8qCgkJCSAqIERvbid0IHRh
a2UgZGVmYXVsdCBhY3Rpb25zIG9uIHN5c3RlbSBwcm9jZXNzZXMuCgkJCSAq
LwoJCQlpZiAocC0+cF9waWQgPD0gMSkgewojaWZkZWYgRElBR05PU1RJQwoJ
CQkJLyoKCQkJCSAqIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBpZ25vcmUg
U0lHU0VHVgoJCQkJICogaW4gaW5pdD8gWFhYCgkJCQkgKi8KCQkJCXByaW50
ZigiUHJvY2VzcyAocGlkICVsdSkgZ290IHNpZ25hbCAlZFxuIiwKCQkJCQko
dV9sb25nKXAtPnBfcGlkLCBzaWcpOwojZW5kaWYKCQkJCWJyZWFrOwkJLyog
PT0gaWdub3JlICovCgkJCX0KCgkJCS8qCgkJCSAqIEhhbmRsZSB0aGUgaW4t
a2VybmVsIGNoZWNrcG9pbnQgYWN0aW9uCgkJCSAqLwoJCQlpZiAocHJvcCAm
IFNBX0NLUFQpIHsKCQkJCWNoZWNrcG9pbnRfc2lnbmFsX2hhbmRsZXIocCk7
CgkJCQlicmVhazsKCQkJfQoKCQkJLyoKCQkJICogSWYgdGhlcmUgaXMgYSBw
ZW5kaW5nIHN0b3Agc2lnbmFsIHRvIHByb2Nlc3MKCQkJICogd2l0aCBkZWZh
dWx0IGFjdGlvbiwgc3RvcCBoZXJlLAoJCQkgKiB0aGVuIGNsZWFyIHRoZSBz
aWduYWwuICBIb3dldmVyLAoJCQkgKiBpZiBwcm9jZXNzIGlzIG1lbWJlciBv
ZiBhbiBvcnBoYW5lZAoJCQkgKiBwcm9jZXNzIGdyb3VwLCBpZ25vcmUgdHR5
IHN0b3Agc2lnbmFscy4KCQkJICovCgkJCWlmIChwcm9wICYgU0FfU1RPUCkg
ewoJCQkJaWYgKHAtPnBfZmxhZyAmIFBfVFJBQ0VEIHx8CgkJICAgIAkJICAg
IChwLT5wX3BncnAtPnBnX2pvYmMgPT0gMCAmJgoJCQkJICAgIHByb3AgJiBT
QV9UVFlTVE9QKSkKCQkJCQlicmVhazsJLyogPT0gaWdub3JlICovCgkJCQlw
LT5wX3hzdGF0ID0gc2lnOwoJCQkJc3RvcChwKTsKCQkJCWlmICgocC0+cF9w
cHRyLT5wX3Byb2NzaWctPnBzX2ZsYWcgJiBQU19OT0NMRFNUT1ApID09IDAp
CgkJCQkJcHNpZ25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJCQkJbWlfc3dp
dGNoKHApOwoJCQkJYnJlYWs7CgkJCX0gZWxzZSBpZiAocHJvcCAmIFNBX0lH
Tk9SRSkgewoJCQkJLyoKCQkJCSAqIEV4Y2VwdCBmb3IgU0lHQ09OVCwgc2hv
dWxkbid0IGdldCBoZXJlLgoJCQkJICogRGVmYXVsdCBhY3Rpb24gaXMgdG8g
aWdub3JlOyBkcm9wIGl0LgoJCQkJICovCgkJCQlicmVhazsJCS8qID09IGln
bm9yZSAqLwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIChzaWcpOwoJCQl9CgoJ
CQkvKk5PVFJFQUNIRUQqLwoKCQljYXNlIChpbnQpU0lHX0lHTjoKCQkJLyoK
CQkJICogTWFza2luZyBhYm92ZSBzaG91bGQgcHJldmVudCB1cyBldmVyIHRy
eWluZwoJCQkgKiB0byB0YWtlIGFjdGlvbiBvbiBhbiBpZ25vcmVkIHNpZ25h
bCBvdGhlcgoJCQkgKiB0aGFuIFNJR0NPTlQsIHVubGVzcyBwcm9jZXNzIGlz
IHRyYWNlZC4KCQkJICovCgkJCWlmICgocHJvcCAmIFNBX0NPTlQpID09IDAg
JiYKCQkJICAgIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCkgPT0gMCkKCQkJCXBy
aW50ZigiaXNzaWduYWxcbiIpOwoJCQlicmVhazsJCS8qID09IGlnbm9yZSAq
LwoKCQlkZWZhdWx0OgoJCQkvKgoJCQkgKiBUaGlzIHNpZ25hbCBoYXMgYW4g
YWN0aW9uLCBsZXQKCQkJICogcG9zdHNpZygpIHByb2Nlc3MgaXQuCgkJCSAq
LwoJCQlyZXR1cm4gKHNpZyk7CgkJfQoJCVNJR0RFTFNFVChwLT5wX3NpZ2xp
c3QsIHNpZyk7CQkvKiB0YWtlIHRoZSBzaWduYWwhICovCgl9CgkvKiBOT1RS
RUFDSEVEICovCn0KCi8qCiAqIFB1dCB0aGUgYXJndW1lbnQgcHJvY2VzcyBp
bnRvIHRoZSBzdG9wcGVkIHN0YXRlIGFuZCBub3RpZnkgdGhlIHBhcmVudAog
KiB2aWEgd2FrZXVwLiAgU2lnbmFscyBhcmUgaGFuZGxlZCBlbHNld2hlcmUu
ICBUaGUgcHJvY2VzcyBtdXN0IG5vdCBiZQogKiBvbiB0aGUgcnVuIHF1ZXVl
LgogKi8Kdm9pZApzdG9wKHN0cnVjdCBwcm9jICpwKQp7CglwLT5wX3N0YXQg
PSBTU1RPUDsKCXAtPnBfZmxhZyAmPSB+UF9XQUlURUQ7Cgl3YWtldXAoKGNh
ZGRyX3QpcC0+cF9wcHRyKTsKfQoKLyoKICogVGFrZSB0aGUgYWN0aW9uIGZv
ciB0aGUgc3BlY2lmaWVkIHNpZ25hbAogKiBmcm9tIHRoZSBjdXJyZW50IHNl
dCBvZiBwZW5kaW5nIHNpZ25hbHMuCiAqLwp2b2lkCnBvc3RzaWcoaW50IHNp
ZykKewoJc3RydWN0IHByb2MgKnAgPSBjdXJwcm9jOwoJc3RydWN0IHNpZ2Fj
dHMgKnBzID0gcC0+cF9zaWdhY3RzOwoJc2lnX3QgYWN0aW9uOwoJc2lnc2V0
X3QgcmV0dXJubWFzazsKCWludCBjb2RlOwoKCUtBU1NFUlQoc2lnICE9IDAs
ICgicG9zdHNpZyIpKTsKCglTSUdERUxTRVQocC0+cF9zaWdsaXN0LCBzaWcp
OwoJYWN0aW9uID0gcHMtPnBzX3NpZ2FjdFtfU0lHX0lEWChzaWcpXTsKI2lm
ZGVmIEtUUkFDRQoJaWYgKEtUUlBPSU5UKHAtPnBfdGhyZWFkLCBLVFJfUFNJ
RykpCgkJa3RycHNpZyhwLT5wX3RyYWNlcCwgc2lnLCBhY3Rpb24sIHAtPnBf
ZmxhZyAmIFBfT0xETUFTSyA/CgkJICAgICZwLT5wX29sZHNpZ21hc2sgOiAm
cC0+cF9zaWdtYXNrLCAwKTsKI2VuZGlmCglTVE9QRVZFTlQocCwgU19TSUcs
IHNpZyk7CgoJaWYgKGFjdGlvbiA9PSBTSUdfREZMKSB7CgkJLyoKCQkgKiBE
ZWZhdWx0IGFjdGlvbiwgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdG8ga2lsbAoJ
CSAqIHRoZSBwcm9jZXNzLiAgKE90aGVyIGNhc2VzIHdlcmUgaWdub3JlZCBh
Ym92ZS4pCgkJICovCgkJc2lnZXhpdChwLCBzaWcpOwoJCS8qIE5PVFJFQUNI
RUQgKi8KCX0gZWxzZSB7CgkJLyoKCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhl
IHNpZ25hbCBtdXN0IGJlIGNhdWdodC4KCQkgKi8KCQlLQVNTRVJUKGFjdGlv
biAhPSBTSUdfSUdOICYmICFTSUdJU01FTUJFUihwLT5wX3NpZ21hc2ssIHNp
ZyksCgkJICAgICgicG9zdHNpZyBhY3Rpb24iKSk7CgkJLyoKCQkgKiBTZXQg
dGhlIG5ldyBtYXNrIHZhbHVlIGFuZCBhbHNvIGRlZmVyIGZ1cnRoZXIKCQkg
KiBvY2N1cnJlbmNlcyBvZiB0aGlzIHNpZ25hbC4KCQkgKgoJCSAqIFNwZWNp
YWwgY2FzZTogdXNlciBoYXMgZG9uZSBhIHNpZ3N1c3BlbmQuICBIZXJlIHRo
ZQoJCSAqIGN1cnJlbnQgbWFzayBpcyBub3Qgb2YgaW50ZXJlc3QsIGJ1dCBy
YXRoZXIgdGhlCgkJICogbWFzayBmcm9tIGJlZm9yZSB0aGUgc2lnc3VzcGVu
ZCBpcyB3aGF0IHdlIHdhbnQKCQkgKiByZXN0b3JlZCBhZnRlciB0aGUgc2ln
bmFsIHByb2Nlc3NpbmcgaXMgY29tcGxldGVkLgoJCSAqLwoJCXNwbGhpZ2go
KTsKCQlpZiAocC0+cF9mbGFnICYgUF9PTERNQVNLKSB7CgkJCXJldHVybm1h
c2sgPSBwLT5wX29sZHNpZ21hc2s7CgkJCXAtPnBfZmxhZyAmPSB+UF9PTERN
QVNLOwoJCX0gZWxzZSB7CgkJCXJldHVybm1hc2sgPSBwLT5wX3NpZ21hc2s7
CgkJfQoKCQlTSUdTRVRPUihwLT5wX3NpZ21hc2ssIHBzLT5wc19jYXRjaG1h
c2tbX1NJR19JRFgoc2lnKV0pOwoJCWlmICghU0lHSVNNRU1CRVIocHMtPnBz
X3NpZ25vZGVmZXIsIHNpZykpCgkJCVNJR0FERFNFVChwLT5wX3NpZ21hc2ss
IHNpZyk7CgoJCWlmIChTSUdJU01FTUJFUihwcy0+cHNfc2lncmVzZXQsIHNp
ZykpIHsKCQkJLyoKCQkJICogU2VlIGtlcm5fc2lnYWN0aW9uKCkgZm9yIG9y
aWdpbiBvZiB0aGlzIGNvZGUuCgkJCSAqLwoJCQlTSUdERUxTRVQocC0+cF9z
aWdjYXRjaCwgc2lnKTsKCQkJaWYgKHNpZyAhPSBTSUdDT05UICYmCgkJCSAg
ICBzaWdwcm9wKHNpZykgJiBTQV9JR05PUkUpCgkJCQlTSUdBRERTRVQocC0+
cF9zaWdpZ25vcmUsIHNpZyk7CgkJCXBzLT5wc19zaWdhY3RbX1NJR19JRFgo
c2lnKV0gPSBTSUdfREZMOwoJCX0KCQlzcGwwKCk7CgkJcC0+cF9zdGF0cy0+
cF9ydS5ydV9uc2lnbmFscysrOwoJCWlmIChwLT5wX3NpZyAhPSBzaWcpIHsK
CQkJY29kZSA9IDA7CgkJfSBlbHNlIHsKCQkJY29kZSA9IHAtPnBfY29kZTsK
CQkJcC0+cF9jb2RlID0gMDsKCQkJcC0+cF9zaWcgPSAwOwoJCX0KCQlpZiAo
cC0+Y2hrcHQpCgkJCXAtPmNoa3B0X3NpZyA9IHNpZzsKCQkoKnAtPnBfc3lz
ZW50LT5zdl9zZW5kc2lnKShhY3Rpb24sIHNpZywgJnJldHVybm1hc2ssIGNv
ZGUpOwoJfQp9CgovKgogKiBLaWxsIHRoZSBjdXJyZW50IHByb2Nlc3MgZm9y
IHN0YXRlZCByZWFzb24uCiAqLwp2b2lkCmtpbGxwcm9jKHN0cnVjdCBwcm9j
ICpwLCBjaGFyICp3aHkpCnsKCWxvZyhMT0dfRVJSLCAicGlkICVkICglcyks
IHVpZCAlZCwgd2FzIGtpbGxlZDogJXNcbiIsIHAtPnBfcGlkLCBwLT5wX2Nv
bW0sCgkJcC0+cF91Y3JlZCA/IHAtPnBfdWNyZWQtPmNyX3VpZCA6IC0xLCB3
aHkpOwoJcHNpZ25hbChwLCBTSUdLSUxMKTsKfQoKLyoKICogRm9yY2UgdGhl
IGN1cnJlbnQgcHJvY2VzcyB0byBleGl0IHdpdGggdGhlIHNwZWNpZmllZCBz
aWduYWwsIGR1bXBpbmcgY29yZQogKiBpZiBhcHByb3ByaWF0ZS4gIFdlIGJ5
cGFzcyB0aGUgbm9ybWFsIHRlc3RzIGZvciBtYXNrZWQgYW5kIGNhdWdodCBz
aWduYWxzLAogKiBhbGxvd2luZyB1bnJlY292ZXJhYmxlIGZhaWx1cmVzIHRv
IHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyB3aXRob3V0IGNoYW5naW5nCiAqIHNp
Z25hbCBzdGF0ZS4gIE1hcmsgdGhlIGFjY291bnRpbmcgcmVjb3JkIHdpdGgg
dGhlIHNpZ25hbCB0ZXJtaW5hdGlvbi4KICogSWYgZHVtcGluZyBjb3JlLCBz
YXZlIHRoZSBzaWduYWwgbnVtYmVyIGZvciB0aGUgZGVidWdnZXIuICBDYWxs
cyBleGl0IGFuZAogKiBkb2VzIG5vdCByZXR1cm4uCiAqLwp2b2lkCnNpZ2V4
aXQoc3RydWN0IHByb2MgKnAsIGludCBzaWcpCnsKCXAtPnBfYWNmbGFnIHw9
IEFYU0lHOwoJaWYgKHNpZ3Byb3Aoc2lnKSAmIFNBX0NPUkUpIHsKCQlwLT5w
X3NpZyA9IHNpZzsKCQkvKgoJCSAqIExvZyBzaWduYWxzIHdoaWNoIHdvdWxk
IGNhdXNlIGNvcmUgZHVtcHMKCQkgKiAoTG9nIGFzIExPR19JTkZPIHRvIGFw
cGVhc2UgdGhvc2Ugd2hvIGRvbid0IHdhbnQKCQkgKiB0aGVzZSBtZXNzYWdl
cy4pCgkJICogWFhYIDogVG9kbywgYXMgd2VsbCBhcyBldWlkLCB3cml0ZSBv
dXQgcnVpZCB0b28KCQkgKi8KCQlpZiAoY29yZWR1bXAocCkgPT0gMCkKCQkJ
c2lnIHw9IFdDT1JFRkxBRzsKCQlpZiAoa2Vybl9sb2dzaWdleGl0KQoJCQls
b2coTE9HX0lORk8sCgkJCSAgICAicGlkICVkICglcyksIHVpZCAlZDogZXhp
dGVkIG9uIHNpZ25hbCAlZCVzXG4iLAoJCQkgICAgcC0+cF9waWQsIHAtPnBf
Y29tbSwKCQkJICAgIHAtPnBfdWNyZWQgPyBwLT5wX3VjcmVkLT5jcl91aWQg
OiAtMSwKCQkJICAgIHNpZyAmfiBXQ09SRUZMQUcsCgkJCSAgICBzaWcgJiBX
Q09SRUZMQUcgPyAiIChjb3JlIGR1bXBlZCkiIDogIiIpOwoJfQoJZXhpdDEo
V19FWElUQ09ERSgwLCBzaWcpKTsKCS8qIE5PVFJFQUNIRUQgKi8KfQoKc3Rh
dGljIGNoYXIgY29yZWZpbGVuYW1lW01BWFBBVEhMRU4rMV0gPSB7IiVOLmNv
cmUifTsKU1lTQ1RMX1NUUklORyhfa2VybiwgT0lEX0FVVE8sIGNvcmVmaWxl
LCBDVExGTEFHX1JXLCBjb3JlZmlsZW5hbWUsCgkgICAgICBzaXplb2YoY29y
ZWZpbGVuYW1lKSwgInByb2Nlc3MgY29yZWZpbGUgbmFtZSBmb3JtYXQgc3Ry
aW5nIik7CgovKgogKiBleHBhbmRfbmFtZShuYW1lLCB1aWQsIHBpZCkKICog
RXhwYW5kIHRoZSBuYW1lIGRlc2NyaWJlZCBpbiBjb3JlZmlsZW5hbWUsIHVz
aW5nIG5hbWUsIHVpZCwgYW5kIHBpZC4KICogY29yZWZpbGVuYW1lIGlzIGEg
cHJpbnRmLWxpa2Ugc3RyaW5nLCB3aXRoIHRocmVlIGZvcm1hdCBzcGVjaWZp
ZXJzOgogKgklTgluYW1lIG9mIHByb2Nlc3MgKCJuYW1lIikKICoJJVAJcHJv
Y2VzcyBpZCAocGlkKQogKgklVQl1c2VyIGlkICh1aWQpCiAqIEZvciBleGFt
cGxlLCAiJU4uY29yZSIgaXMgdGhlIGRlZmF1bHQ7IHRoZXkgY2FuIGJlIGRp
c2FibGVkIGNvbXBsZXRlbHkKICogYnkgdXNpbmcgIi9kZXYvbnVsbCIsIG9y
IGFsbCBjb3JlIGZpbGVzIGNhbiBiZSBzdG9yZWQgaW4gIi9jb3Jlcy8lVS8l
Ti0lUCIuCiAqIFRoaXMgaXMgY29udHJvbGxlZCBieSB0aGUgc3lzY3RsIHZh
cmlhYmxlIGtlcm4uY29yZWZpbGUgKHNlZSBhYm92ZSkuCiAqLwoKc3RhdGlj
IGNoYXIgKgpleHBhbmRfbmFtZShjb25zdCBjaGFyICpuYW1lLCB1aWRfdCB1
aWQsIHBpZF90IHBpZCkKewoJY2hhciAqdGVtcDsKCWNoYXIgYnVmWzExXTsJ
CS8qIEJ1ZmZlciBmb3IgcGlkL3VpZCAtLSBtYXggNEIgKi8KCWludCBpLCBu
OwoJY2hhciAqZm9ybWF0ID0gY29yZWZpbGVuYW1lOwoJc2l6ZV90IG5hbWVs
ZW47CgoJdGVtcCA9IG1hbGxvYyhNQVhQQVRITEVOICsgMSwgTV9URU1QLCBN
X05PV0FJVCk7CglpZiAodGVtcCA9PSBOVUxMKQoJCXJldHVybiBOVUxMOwoJ
bmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKCWZvciAoaSA9IDAsIG4gPSAwOyBu
IDwgTUFYUEFUSExFTiAmJiBmb3JtYXRbaV07IGkrKykgewoJCWludCBsOwoJ
CXN3aXRjaCAoZm9ybWF0W2ldKSB7CgkJY2FzZSAnJSc6CS8qIEZvcm1hdCBj
aGFyYWN0ZXIgKi8KCQkJaSsrOwoJCQlzd2l0Y2ggKGZvcm1hdFtpXSkgewoJ
CQljYXNlICclJzoKCQkJCXRlbXBbbisrXSA9ICclJzsKCQkJCWJyZWFrOwoJ
CQljYXNlICdOJzoJLyogcHJvY2VzcyBuYW1lICovCgkJCQlpZiAoKG4gKyBu
YW1lbGVuKSA+IE1BWFBBVEhMRU4pIHsKCQkJCQlsb2coTE9HX0VSUiwgInBp
ZCAlZCAoJXMpLCB1aWQgKCV1KTogIFBhdGggYCVzJXMnIGlzIHRvbyBsb25n
XG4iLAoJCQkJCSAgICBwaWQsIG5hbWUsIHVpZCwgdGVtcCwgbmFtZSk7CgkJ
CQkJZnJlZSh0ZW1wLCBNX1RFTVApOwoJCQkJCXJldHVybiBOVUxMOwoJCQkJ
fQoJCQkJbWVtY3B5KHRlbXArbiwgbmFtZSwgbmFtZWxlbik7CgkJCQluICs9
IG5hbWVsZW47CgkJCQlicmVhazsKCQkJY2FzZSAnUCc6CS8qIHByb2Nlc3Mg
aWQgKi8KCQkJCWwgPSBzcHJpbnRmKGJ1ZiwgIiV1IiwgcGlkKTsKCQkJCWlm
ICgobiArIGwpID4gTUFYUEFUSExFTikgewoJCQkJCWxvZyhMT0dfRVJSLCAi
cGlkICVkICglcyksIHVpZCAoJXUpOiAgUGF0aCBgJXMlcycgaXMgdG9vIGxv
bmdcbiIsCgkJCQkJICAgIHBpZCwgbmFtZSwgdWlkLCB0ZW1wLCBuYW1lKTsK
CQkJCQlmcmVlKHRlbXAsIE1fVEVNUCk7CgkJCQkJcmV0dXJuIE5VTEw7CgkJ
CQl9CgkJCQltZW1jcHkodGVtcCtuLCBidWYsIGwpOwoJCQkJbiArPSBsOwoJ
CQkJYnJlYWs7CgkJCWNhc2UgJ1UnOgkvKiB1c2VyIGlkICovCgkJCQlsID0g
c3ByaW50ZihidWYsICIldSIsIHVpZCk7CgkJCQlpZiAoKG4gKyBsKSA+IE1B
WFBBVEhMRU4pIHsKCQkJCQlsb2coTE9HX0VSUiwgInBpZCAlZCAoJXMpLCB1
aWQgKCV1KTogIFBhdGggYCVzJXMnIGlzIHRvbyBsb25nXG4iLAoJCQkJCSAg
ICBwaWQsIG5hbWUsIHVpZCwgdGVtcCwgbmFtZSk7CgkJCQkJZnJlZSh0ZW1w
LCBNX1RFTVApOwoJCQkJCXJldHVybiBOVUxMOwoJCQkJfQoJCQkJbWVtY3B5
KHRlbXArbiwgYnVmLCBsKTsKCQkJCW4gKz0gbDsKCQkJCWJyZWFrOwoJCQlk
QUlUIGlzIHNldDsgd2Ugd2lsbCB3YWtldXAgdGhlIHBhcmVudCBiZWxvdy4K
CSAqLwoJcC0+cF9mbGFnICY9IH4oUF9UUkFDRUQgfCBQX1BQV0FJVCk7Cglw
LT5wX2ZsYWcgfD0gUF9XRVhJVDsKCVNJR0VNUFRZU0VUKHAtPnBfc2lnbGlz
dCk7CglpZiAodGltZXZhbGlzc2V0KCZwLT5wX3JlYWx0aW1lci5pdF92YWx1
ZSkpCgkJY2FsbG91dF9zdG9wKCZwLT5wX2l0aGFuZGxlKTsKCgkvKgoJICog
UmVzZXQgYW55IHNpZ2lvIHN0cnVjdHVyZXMgcG9pbnRpbmcgdG8gdXMgYXMg
YSByZXN1bHQgb2YKCSAqIEZfU0VUT1dOIHdpdGggb3VyIHBpZC4KCSAqLwoJ
ZnVuc2V0b3dubHN0KCZwLT5wX3NpZ2lvbHN0KTsKCgkvKgoJICogQ2xvc2Ug
b3BlbiBmaWxlcyBhbmQgcmVsZWFzZSBvcGVuLWZpbGUgdGFibGUuCgkgKiBU
aGlzIG1heSBibG9jayEKCSAqLwoJZmRmcmVlKHApOwoJcC0+cF9mZCA9IE5V
TEw7CgoJaWYocC0+cF9sZWFkZXItPnBfcGVlcnMpIHsKCQlxID0gcC0+cF9s
ZWFkZXI7CgkJd2hpbGUocS0+cF9wZWVycyAhPSBwKQoJCQlxID0gcS0+cF9w
ZWVyczsKCQlxLT5wX3BlZXJzID0gcC0+cF9wZWVyczsKCQl3YWtldXAoKGNh
ZGRyX3QpcC0+cF9sZWFkZXIpOwoJfQoKCS8qCgkgKiBYWFggU2h1dGRvd24g
U1lTViBzZW1hcGhvcmVzCgkgKi8KCXNlbWV4aXQocCk7CgoJS0tBU1NFUlQo
cC0+cF9udW1wb3NpeGxvY2tzID09IDApOwoKCS8qIFRoZSBuZXh0IHR3byBj
aHVua3Mgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIHZtc3BhY2VfZXhp
dC4gKi8KCXZtID0gcC0+cF92bXNwYWNlOwoKCS8qCgkgKiBSZWxlYXNlIHVw
Y2FsbHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcHJvY2VzcwoJICovCglpZiAo
dm0tPnZtX3VwY2FsbHMpCgkJdXBjX3JlbGVhc2Uodm0sIHApOwoKCS8qCgkg
KiBSZWxlYXNlIHVzZXIgcG9ydGlvbiBvZiBhZGRyZXNzIHNwYWNlLgoJICog
VGhpcyByZWxlYXNlcyByZWZlcmVuY2VzIHRvIHZub2RlcywKCSAqIHdoaWNo
IGNvdWxkIGNhdXNlIEkvTyBpZiB0aGUgZmlsZSBoYXMgYmVlbiB1bmxpbmtl
ZC4KCSAqIE5lZWQgdG8gZG8gdGhpcyBlYXJseSBlbm91Z2ggdGhhdCB3ZSBj
YW4gc3RpbGwgc2xlZXAuCgkgKiBDYW4ndCBmcmVlIHRoZSBlbnRpcmUgdm1z
cGFjZSBhcyB0aGUga2VybmVsIHN0YWNrCgkgKiBtYXkgYmUgbWFwcGVkIHdp
dGhpbiB0aGF0IHNwYWNlIGFsc28uCgkgKgoJICogUHJvY2Vzc2VzIHNoYXJp
bmcgdGhlIHNhbWUgdm1zcGFjZSBtYXkgZXhpdCBpbiBvbmUgb3JkZXIsIGFu
ZAoJICogZ2V0IGNsZWFuZWQgdXAgYnkgdm1zcGFjZV9leGl0KCkgaW4gYSBk
aWZmZXJlbnQgb3JkZXIuICBUaGUKCSAqIGxhc3QgZXhpdGluZyBwcm9jZXNz
IHRvIHJlYWNoIHRoaXMgcG9pbnQgcmVsZWFzZXMgYXMgbXVjaCBvZgoJICog
dGhlIGVudmlyb25tZW50IGFzIGl0IGNhbiwgYW5kIHRoZSBsYXN0IHByb2Nl
c3MgY2xlYW5lZCB1cAoJICogYnkgdm1zcGFjZV9leGl0KCkgKHdoaWNoIGRl
Y3JlbWVudHMgZXhpdGluZ2NudCkgY2xlYW5zIHVwIHRoZQoJICogcmVtYWlu
ZGVyLgoJICovCgkrK3ZtLT52bV9leGl0aW5nY250OwoJaWYgKC0tdm0tPnZt
X3JlZmNudCA9PSAwKSB7CgkJc2htZXhpdCh2bSk7CgkJcG1hcF9yZW1vdmVf
cGFnZXModm1zcGFjZV9wbWFwKHZtKSwgVk1fTUlOX0FERFJFU1MsCgkJICAg
IFZNX01BWFVTRVJfQUREUkVTUyk7CgkJKHZvaWQpIHZtX21hcF9yZW1vdmUo
JnZtLT52bV9tYXAsIFZNX01JTl9BRERSRVNTLAoJCSAgICBWTV9NQVhVU0VS
X0FERFJFU1MpOwoJfQoKCWlmIChTRVNTX0xFQURFUihwKSkgewoJCXN0cnVj
dCBzZXNzaW9uICpzcCA9IHAtPnBfc2Vzc2lvbjsKCQlzdHJ1Y3Qgdm5vZGUg
KnZwOwoKCQlpZiAoc3AtPnNfdHR5dnApIHsKCQkJLyoKCQkJICogV2UgYXJl
IHRoZSBjb250cm9sbGluZyBwcm9jZXNzLiAgU2lnbmFsIHRoZSAKCQkJICog
Zm9yZWdyb3VuZCBwcm9jZXNzIGdyb3VwLCBkcmFpbiB0aGUgY29udHJvbGxp
bmcKCQkJICogdGVybWluYWwsIGFuZCByZXZva2UgYWNjZXNzIHRvIHRoZSBj
b250cm9sbGluZwoJCQkgKiB0ZXJtaW5hbC4KCQkJICoKCQkJICogTk9URTog
d2hpbGUgd2FpdGluZyBmb3IgdGhlIHByb2Nlc3MgZ3JvdXAgdG8gZXhpdAoJ
CQkgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IG9uZSBvZiB0aGUgcHJvY2Vzc2Vz
IGluIHRoZQoJCQkgKiBncm91cCB3aWxsIHJldm9rZSB0aGUgdHR5LCBzbyB3
ZSBoYXZlIHRvIHJlY2hlY2suCgkJCSAqLwoJCQlpZiAoc3AtPnNfdHR5cCAm
JiAoc3AtPnNfdHR5cC0+dF9zZXNzaW9uID09IHNwKSkgewoJCQkJaWYgKHNw
LT5zX3R0eXAtPnRfcGdycCkKCQkJCQlwZ3NpZ25hbChzcC0+c190dHlwLT50
X3BncnAsIFNJR0hVUCwgMSk7CgkJCQkodm9pZCkgdHR5d2FpdChzcC0+c190
dHlwKTsKCQkJCS8qCgkJCQkgKiBUaGUgdHR5IGNvdWxkIGhhdmUgYmVlbiBy
ZXZva2VkCgkJCQkgKiBpZiB3ZSBibG9ja2VkLgoJCQkJICovCgkJCQlpZiAo
KHZwID0gc3AtPnNfdHR5dnApICE9IE5VTEwpIHsKCQkJCQl0dHljbG9zZXNl
c3Npb24oc3AsIDApOwoJCQkJCWlmICh2eF9sb2NrKHZwKSA9PSAwKSB7CgkJ
CQkJCVZPUF9SRVZPS0UodnAsIFJFVk9LRUFMTCk7CgkJCQkJCXZ4X3VubG9j
ayh2cCk7CgkJCQkJfQoJCQkJCXZyZWxlKHZwKTsJLyogc190dHl2cCByZWYg
Ki8KCQkJCX0KCQkJfQoJCQkvKgoJCQkgKiBSZWxlYXNlIHRoZSB0dHkuICBJ
ZiBzb21lb25lIGhhcyBpdCBvcGVuIHZpYQoJCQkgKiAvZGV2L3R0eSB0aGVu
IGNsb3NlIGl0IChzaW5jZSB0aGV5IG5vIGxvbmdlciBjYW4KCQkJICogb25j
ZSB3ZSd2ZSBOVUxMJ2QgaXQgb3V0KS4KCQkJICovCgkJCWlmIChzcC0+c190
dHl2cCkKCQkJCXR0eWNsb3Nlc2Vzc2lvbihzcCwgMSk7CgkJCS8qCgkJCSAq
IHNfdHR5cCBpcyBub3QgemVybydkOyB3ZSB1c2UgdGhpcyB0byBpbmRpY2F0
ZQoJCQkgKiB0aGF0IHRoZSBzZXNzaW9uIG9uY2UgaGFkIGEgY29udHJvbGxp
bmcgdGVybWluYWwuCgkJCSAqIChmb3IgbG9nZ2luZyBhbmQgaW5mb3JtYXRp
b25hbCBwdXJwb3NlcykKCQkJICovCgkJfQoJCXNwLT5zX2xlYWRlciA9IE5V
TEw7Cgl9CglmaXhqb2JjKHAsIHAtPnBfcGdycCwgMCk7Cgkodm9pZClhY2N0
X3Byb2Nlc3MocCk7CiNpZmRlZiBLVFJBQ0UKCS8qCgkgKiByZWxlYXNlIHRy
YWNlIGZpbGUKCSAqLwoJcC0+cF90cmFjZWZsYWcgPSAwOwkvKiBkb24ndCB0
cmFjZSB0aGUgdnJlbGUoKSAqLwoJaWYgKCh2dG1wID0gcC0+cF90cmFjZXAp
ICE9IE5VTEwpIHsKCQlwLT5wX3RyYWNlcCA9IE5VTEw7CgkJdnJlbGUodnRt
cCk7Cgl9CiNlbmRpZgoJLyoKCSAqIFJlbGVhc2UgcmVmZXJlbmNlIHRvIHRl
eHQgdm5vZGUKCSAqLwoJaWYgKCh2dG1wID0gcC0+cF90ZXh0dnApICE9IE5V
TEwpIHsKCQlwLT5wX3RleHR2cCA9IE5VTEw7CgkJdnJlbGUodnRtcCk7Cgl9
CgoJLyoKCSAqIE9uY2Ugd2Ugc2V0IFNaT01CIHRoZSBwcm9jZXNzIGNhbiBn
ZXQgcmVhcGVkLiAgVGhlIHdhaXQxIGNvZGUKCSAqIHdpbGwgYWxzbyB3YWl0
IGZvciBUREZfUlVOTklORyB0byBiZSBjbGVhcmVkIGluIHRoZSB0aHJlYWQn
cyBmbGFncywKCSAqIGluZGljYXRpbmcgdGhhdCBpdCBoYXMgYmVlbiBjb21w
bGV0ZWx5IHN3aXRjaGVkIG91dC4KCSAqLwoKCS8qCgkgKiBSZW1vdmUgcHJv
YyBmcm9tIGFsbHByb2MgcXVldWUgYW5kIHBpZGhhc2ggY2hhaW4uCgkgKiBQ
bGFjZSBvbnRvIHpvbWJwcm9jLiAgVW5saW5rIGZyb20gcGFyZW50J3MgY2hp
bGQgbGlzdC4KCSAqLwoJTElTVF9SRU1PVkUocCwgcF9saXN0KTsKCUxJU1Rf
SU5TRVJUX0hFQUQoJnpvbWJwcm9jLCBwLCBwX2xpc3QpOwoJcC0+cF9zdGF0
ID0gU1pPTUI7CgoJTElTVF9SRU1PVkUocCwgcF9oYXNoKTsKCglxID0gTElT
VF9GSVJTVCgmcC0+cF9jaGlsZHJlbik7CglpZiAocSkJCS8qIG9ubHkgbmVl
ZCB0aGlzIGlmIGFueSBjaGlsZCBpcyBTX1pPTUIgKi8KCQl3YWtldXAoKGNh
ZGRyX3QpIGluaXRwcm9jKTsKCWZvciAoOyBxICE9IDA7IHEgPSBucSkgewoJ
CW5xID0gTElTVF9ORVhUKHEsIHBfc2libGluZyk7CgkJTElTVF9SRU1PVkUo
cSwgcF9zaWJsaW5nKTsKCQlMSVNUX0lOU0VSVF9IRUFEKCZpbml0cHJvYy0+
cF9jaGlsZHJlbiwgcSwgcF9zaWJsaW5nKTsKCQlxLT5wX3BwdHIgPSBpbml0
cHJvYzsKCQlxLT5wX3NpZ3BhcmVudCA9IFNJR0NITEQ7CgkJLyoKCQkgKiBU
cmFjZWQgcHJvY2Vzc2VzIGFyZSBraWxsZWQKCQkgKiBzaW5jZSB0aGVpciBl
eGlzdGVuY2UgbWVhbnMgc29tZW9uZSBpcyBzY3Jld2luZyB1cC4KCQkgKi8K
CQlpZiAocS0+cF9mbGFnICYgUF9UUkFDRUQpIHsKCQkJcS0+cF9mbGFnICY9
IH5QX1RSQUNFRDsKCQkJcHNpZ25hbChxLCBTSUdLSUxMKTsKCQl9Cgl9CgoJ
LyoKCSAqIFNhdmUgZXhpdCBzdGF0dXMgYW5kIGZpbmFsIHJ1c2FnZSBpbmZv
LCBhZGRpbmcgaW4gY2hpbGQgcnVzYWdlCgkgKiBpbmZvIGFuZCBzZWxmIHRp
bWVzLgoJICovCglwLT5wX3hzdGF0ID0gcnY7CgkqcC0+cF9ydSA9IHAtPnBf
c3RhdHMtPnBfcnU7CgljYWxjcnUocCwgJnAtPnBfcnUtPnJ1X3V0aW1lLCAm
cC0+cF9ydS0+cnVfc3RpbWUsIE5VTEwpOwoJcnVhZGQocC0+cF9ydSwgJnAt
PnBfc3RhdHMtPnBfY3J1KTsKCgkvKgoJICogbm90aWZ5IGludGVyZXN0ZWQg
cGFydGllcyBvZiBvdXIgZGVtaXNlLgoJICovCglLTk9URSgmcC0+cF9rbGlz
dCwgTk9URV9FWElUKTsKCgkvKgoJICogTm90aWZ5IHBhcmVudCB0aGF0IHdl
J3JlIGdvbmUuICBJZiBwYXJlbnQgaGFzIHRoZSBQU19OT0NMRFdBSVQKCSAq
IGZsYWcgc2V0LCBub3RpZnkgcHJvY2VzcyAxIGluc3RlYWQgKGFuZCBob3Bl
IGl0IHdpbGwgaGFuZGxlCgkgKiB0aGlzIHNpdHVhdGlvbikuCgkgKi8KCWlm
IChwLT5wX3BwdHItPnBfcHJvY3NpZy0+cHNfZmxhZyAmIFBTX05PQ0xEV0FJ
VCkgewoJCXN0cnVjdCBwcm9jICpwcCA9IHAtPnBfcHB0cjsKCQlwcm9jX3Jl
cGFyZW50KHAsIGluaXRwcm9jKTsKCQkvKgoJCSAqIElmIHRoaXMgd2FzIHRo
ZSBsYXN0IGNoaWxkIG9mIG91ciBwYXJlbnQsIG5vdGlmeQoJCSAqIHBhcmVu
dCwgc28gaW4gY2FzZSBoZSB3YXMgd2FpdCgyKWluZywgaGUgd2lsbAoJCSAq
IGNvbnRpbnVlLgoJCSAqLwoJCWlmIChMSVNUX0VNUFRZKCZwcC0+cF9jaGls
ZHJlbikpCgkJCXdha2V1cCgoY2FkZHJfdClwcCk7Cgl9CgoJaWYgKHAtPnBf
c2lncGFyZW50ICYmIHAtPnBfcHB0ciAhPSBpbml0cHJvYykgewoJICAgICAg
ICBwc2lnbmFsKHAtPnBfcHB0ciwgcC0+cF9zaWdwYXJlbnQpOwoJfSBlbHNl
IHsKCSAgICAgICAgcHNpZ25hbChwLT5wX3BwdHIsIFNJR0NITEQpOwoJfQoK
CXdha2V1cCgoY2FkZHJfdClwLT5wX3BwdHIpOwojaWYgZGVmaW5lZCh0YWhv
ZSkKCS8qIG1vdmUgdGhpcyB0byBjcHVfZXhpdCAqLwoJcC0+cF90aHJlYWQt
PnRkX3BjYi0+cGNiX3NhdmVhY2MuZmFkZHIgPSAoZmxvYXQgKilOVUxMOwoj
ZW5kaWYKCS8qCgkgKiBjcHVfZXhpdCBpcyByZXNwb25zaWJsZSBmb3IgY2xl
YXJpbmcgY3VycHJvYywgc2luY2UKCSAqIGl0IGlzIGhlYXZpbHkgaW50ZWdy
YXRlZCB3aXRoIHRoZSB0aHJlYWQvc3dpdGNoaW5nIHNlcXVlbmNlLgoJICoK
CSAqIE90aGVyIHN1YnN0cnVjdHVyZXMgYXJlIGZyZWVkIGZyb20gd2FpdCgp
LgoJICovCglpZiAoLS1wLT5wX2xpbWl0LT5wX3JlZmNudCA9PSAwKSB7CgkJ
RlJFRShwLT5wX2xpbWl0LCBNX1NVQlBST0MpOwoJCXAtPnBfbGltaXQgPSBO
VUxMOwoJfQoKCS8qCgkgKiBSZWxlYXNlIHRoZSBjdXJyZW50IHVzZXIgcHJv
Y2VzcyBkZXNpZ25hdGlvbiBvbiB0aGUgcHJvY2VzcyBzbwoJICogdGhlIHVz
ZXJsYW5kIHNjaGVkdWxlciBjYW4gd29yayBpbiBzb21lb25lIGVsc2UuCgkg
Ki8KCXJlbGVhc2VfY3VycHJvYyhwKTsKCgkvKgoJICogRmluYWxseSwgY2Fs
bCBtYWNoaW5lLWRlcGVuZGVudCBjb2RlIHRvIHJlbGVhc2UgdGhlIHJlbWFp
bmluZwoJICogcmVzb3VyY2VzIGluY2x1ZGluZyBhZGRyZXNzIHNwYWNlLCB0
aGUga2VybmVsIHN0YWNrIGFuZCBwY2IuCgkgKiBUaGUgYWRkcmVzcyBzcGFj
ZSBpcyByZWxlYXNlZCBieSAidm1zcGFjZV9mcmVlKHAtPnBfdm1zcGFjZSki
OwoJICogVGhpcyBpcyBtYWNoaW5lLWRlcGVuZGVudCwgYXMgd2UgbWF5IGhh
dmUgdG8gY2hhbmdlIHN0YWNrcwoJICogb3IgZW5zdXJlIHRoYXQgdGhlIGN1
cnJlbnQgb25lIGlzbid0IHJlYWxsb2NhdGVkIGJlZm9yZSB3ZQoJICogZmlu
aXNoLiAgY3B1X2V4aXQgd2lsbCBlbmQgd2l0aCBhIGNhbGwgdG8gY3B1X3N3
aXRjaCgpLCBmaW5pc2hpbmcKCSAqIG91ciBleGVjdXRpb24gKHB1biBpbnRl
bmRlZCkuCgkgKi8KCWNwdV9wcm9jX2V4aXQoKTsKfQoKaW50CndhaXQ0KHN0
cnVjdCB3YWl0X2FyZ3MgKnVhcCkKewoJc3RydWN0IHJ1c2FnZSBydXNhZ2U7
CglpbnQgZXJyb3IsIHN0YXR1czsKCgllcnJvciA9IGtlcm5fd2FpdCh1YXAt
PnBpZCwgdWFwLT5zdGF0dXMgPyAmc3RhdHVzIDogTlVMTCwKCSAgICB1YXAt
Pm9wdGlvbnMsIHVhcC0+cnVzYWdlID8gJnJ1c2FnZSA6IE5VTEwsICZ1YXAt
PnN5c21zZ19mZHNbMF0pOwoKCWlmIChlcnJvciA9PSAwICYmIHVhcC0+c3Rh
dHVzKQoJCWVycm9yID0gY29weW91dCgmc3RhdHVzLCB1YXAtPnN0YXR1cywg
c2l6ZW9mKCp1YXAtPnN0YXR1cykpOwoJaWYgKGVycm9yID09IDAgJiYgdWFw
LT5ydXNhZ2UpCgkJZXJyb3IgPSBjb3B5b3V0KCZydXNhZ2UsIHVhcC0+cnVz
YWdlLCBzaXplb2YoKnVhcC0+cnVzYWdlKSk7CglyZXR1cm4gKGVycm9yKTsK
fQoKLyoKICogd2FpdDEoKQogKgogKiB3YWl0X2FyZ3MoaW50IHBpZCwgaW50
ICpzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2Up
CiAqLwppbnQKa2Vybl93YWl0KHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGlu
dCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UsIGludCAqcmVzKQp7
CglzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsKCXN0cnVjdCBwcm9j
ICpxID0gdGQtPnRkX3Byb2M7CglzdHJ1Y3QgcHJvYyAqcCwgKnQ7CglpbnQg
bmZvdW5kLCBlcnJvcjsKCglpZiAocGlkID09IDApCgkJcGlkID0gLXEtPnBf
cGdpZDsKCWlmIChvcHRpb25zICZ+IChXVU5UUkFDRUR8V05PSEFOR3xXTElO
VVhDTE9ORSkpCgkJcmV0dXJuIChFSU5WQUwpOwpsb29wOgoJbmZvdW5kID0g
MDsKCUxJU1RfRk9SRUFDSChwLCAmcS0+cF9jaGlsZHJlbiwgcF9zaWJsaW5n
KSB7CgkJaWYgKHBpZCAhPSBXQUlUX0FOWSAmJgoJCSAgICBwLT5wX3BpZCAh
PSBwaWQgJiYgcC0+cF9wZ2lkICE9IC1waWQpCgkJCWNvbnRpbnVlOwoKCQkv
KiBUaGlzIHNwZWNpYWwgY2FzZSBoYW5kbGVzIGEga3RocmVhZCBzcGF3bmVk
IGJ5IGxpbnV4X2Nsb25lIAoJCSAqIChzZWUgbGludXhfbWlzYy5jKS4gIFRo
ZSBsaW51eF93YWl0NCBhbmQgbGludXhfd2FpdHBpZCBmdW5jdGlvbnMKCQkg
KiBuZWVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB3YWl0
aW5nIG9uIGEgcHJvY2VzcyBhbmQKCQkgKiB3YWl0aW5nIG9uIGEgdGhyZWFk
LiAgSXQgaXMgYSB0aHJlYWQgaWYgcF9zaWdwYXJlbnQgaXMgbm90IFNJR0NI
TEQsCgkJICogYW5kIHRoZSBXTElOVVhDTE9ORSBvcHRpb24gc2lnbmlmaWVz
IHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhyZWFkcwoJCSAqIGFuZCBub3QgcHJv
Y2Vzc2VzLgoJCSAqLwoJCWlmICgocC0+cF9zaWdwYXJlbnQgIT0gU0lHQ0hM
RCkgXiAoKG9wdGlvbnMgJiBXTElOVVhDTE9ORSkgIT0gMCkpCgkJCWNvbnRp
bnVlOwoKCQluZm91bmQrKzsKCQlpZiAocC0+cF9zdGF0ID09IFNaT01CKSB7
CgkJCS8qCgkJCSAqIFRoZSBwcm9jZXNzJ3MgdGhyZWFkIG1heSBzdGlsbCBi
ZSBpbiB0aGUgbWlkZGxlCgkJCSAqIG9mIHN3aXRjaGluZyBhd2F5LCB3ZSBj
YW4ndCByaXAgaXRzIHN0YWNrIG91dCBmcm9tCgkJCSAqIHVuZGVyIGl0IHVu
dGlsIFRERl9SVU5OSU5HIGNsZWFycyEKCQkJICoKCQkJICogWVlZIG5vIHdh
a2V1cCBvY2N1cnMgc28gd2UgZGVwZW5kIG9uIHRoZSB0aW1lb3V0LgoJCQkg
Ki8KCQkJaWYgKChwLT5wX3RocmVhZC0+dGRfZmxhZ3MgJiBUREZfUlVOTklO
RykgIT0gMCkgewoJCQkJdHNsZWVwKHAtPnBfdGhyZWFkLCAwLCAicmVhcCIs
IDEpOwoJCQkJZ290byBsb29wOwoJCQl9CgoJCQkvKgoJCQkgKiBPdGhlciBr
ZXJuZWwgdGhyZWFkcyBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiAKCQkJICog
YWNjZXNzaW5nIHRoZSBwcm9jLiAgRm9yIGV4YW1wbGUsIGtlcm4va2Vybl9w
cm9jLmMKCQkJICogY291bGQgYmUgYmxvY2tlZCB3cml0aW5nIHByb2MgZGF0
YSB0byBhIHN5c2N0bC4KCQkJICogQXQgdGhlIG1vbWVudCwgaWYgdGhpcyBv
Y2N1cnMsIHdlIGFyZSBub3Qgd29rZW4KCQkJICogdXAgYW5kIHJlbHkgb24g
YSBvbmUtc2Vjb25kIHJldHJ5LgoJCQkgKi8KCQkJaWYgKHAtPnBfbG9jaykg
ewoJCQkJd2hpbGUgKHAtPnBfbG9jaykKCQkJCQl0c2xlZXAocCwgMCwgInJl
YXAyIiwgaHopOwoJCQl9CgkJCWx3a3Rfd2FpdF9mcmVlKHAtPnBfdGhyZWFk
KTsKCgkJCS8qCgkJCSAqIENoYXJnZSB0aGUgcGFyZW50IGZvciB0aGUgY2hp
bGQncyBjaGFuZ2UgaW4KCQkJICogZXN0aW1hdGVkIGNwdSBhcyBvZiB3aGVu
IHRoZSBjaGlsZCBleGl0cyB0bwoJCQkgKiBhY2NvdW50IGZvciBiYXRjaCBz
Y3JpcHRzLCBsYXJnZSBtYWtlJ3MsIGV0Yy4KCQkJICovCgkJCWlmIChxLT5w
X3BpZCAhPSAxKSB7CgkJCSAgICBpZiAocC0+cF9lc3RjcHUgPiBwLT5wX2Vz
dGNwdV9mb3JrKSB7CgkJCQlxLT5wX2VzdGNwdSA9IEVTVENQVUxJTShxLT5w
X2VzdGNwdSArCgkJCQkJCXAtPnBfZXN0Y3B1IC0gcC0+cF9lc3RjcHVfZm9y
ayk7CgkJCSAgICB9CgkJCX0KCgkJCS8qIFRha2UgY2FyZSBvZiBvdXIgcmV0
dXJuIHZhbHVlcy4gKi8KCQkJKnJlcyA9IHAtPnBfcGlkOwoJCQlpZiAoc3Rh
dHVzKQoJCQkJKnN0YXR1cyA9IHAtPnBfeHN0YXQ7CgkJCWlmIChydXNhZ2Up
CgkJCQkqcnVzYWdlID0gKnAtPnBfcnU7CgkJCS8qCgkJCSAqIElmIHdlIGdv
dCB0aGUgY2hpbGQgdmlhIGEgcHRyYWNlICdhdHRhY2gnLAoJCQkgKiB3ZSBu
ZWVkIHRvIGdpdmUgaXQgYmFjayB0byB0aGUgb2xkIHBhcmVudC4KCQkJICov
CgkJCWlmIChwLT5wX29wcGlkICYmICh0ID0gcGZpbmQocC0+cF9vcHBpZCkp
KSB7CgkJCQlwLT5wX29wcGlkID0gMDsKCQkJCXByb2NfcmVwYXJlbnQocCwg
dCk7CgkJCQlwc2lnbmFsKHQsIFNJR0NITEQpOwoJCQkJd2FrZXVwKChjYWRk
cl90KXQpOwoJCQkJcmV0dXJuICgwKTsKCQkJfQoJCQlwLT5wX3hzdGF0ID0g
MDsKCQkJcnVhZGQoJnEtPnBfc3RhdHMtPnBfY3J1LCBwLT5wX3J1KTsKCQkJ
RlJFRShwLT5wX3J1LCBNX1pPTUJJRSk7CgkJCXAtPnBfcnUgPSBOVUxMOwoK
CQkJLyoKCQkJICogRGVjcmVtZW50IHRoZSBjb3VudCBvZiBwcm9jcyBydW5u
aW5nIHdpdGggdGhpcyB1aWQuCgkJCSAqLwoJCQljaGdwcm9jY250KHAtPnBf
dWNyZWQtPmNyX3J1aWRpbmZvLCAtMSwgMCk7CgoJCQkvKgoJCQkgKiBGcmVl
IHVwIGNyZWRlbnRpYWxzLgoJCQkgKi8KCQkJY3JmcmVlKHAtPnBfdWNyZWQp
OwoJCQlwLT5wX3VjcmVkID0gTlVMTDsKCgkJCS8qCgkJCSAqIFJlbW92ZSB1
bnVzZWQgYXJndW1lbnRzCgkJCSAqLwoJCQlpZiAocC0+cF9hcmdzICYmIC0t
cC0+cF9hcmdzLT5hcl9yZWYgPT0gMCkKCQkJCUZSRUUocC0+cF9hcmdzLCBN
X1BBUkdTKTsKCgkJCS8qCgkJCSAqIEZpbmFsbHkgZmluaXNoZWQgd2l0aCBv
bGQgcHJvYyBlbnRyeS4KCQkJICogVW5saW5rIGl0IGZyb20gaXRzIHByb2Nl
c3MgZ3JvdXAgYW5kIGZyZWUgaXQuCgkJCSAqLwoJCQlsZWF2ZXBncnAocCk7
CgkJCUxJU1RfUkVNT1ZFKHAsIHBfbGlzdCk7CS8qIG9mZiB6b21icHJvYyAq
LwoJCQlMSVNUX1JFTU9WRShwLCBwX3NpYmxpbmcpOwoKCQkJaWYgKC0tcC0+
cF9wcm9jc2lnLT5wc19yZWZjbnQgPT0gMCkgewoJCQkJaWYgKHAtPnBfc2ln
YWN0cyAhPSAmcC0+cF9hZGRyLT51X3NpZ2FjdHMpCgkJCQkJRlJFRShwLT5w
X3NpZ2FjdHMsIE1fU1VCUFJPQyk7CgkJCSAgICAgICAgRlJFRShwLT5wX3By
b2NzaWcsIE1fU1VCUFJPQyk7CgkJCQlwLT5wX3Byb2NzaWcgPSBOVUxMOwoJ
CQl9CgoJCQl2bV93YWl0cHJvYyhwKTsKCQkJemZyZWUocHJvY196b25lLCBw
KTsKCQkJbnByb2NzLS07CgkJCXJldHVybiAoMCk7CgkJfQoJCWlmIChwLT5w
X3N0YXQgPT0gU1NUT1AgJiYgKHAtPnBfZmxhZyAmIFBfV0FJVEVEKSA9PSAw
ICYmCgkJICAgIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCB8fCBvcHRpb25zICYg
V1VOVFJBQ0VEKSkgewoJCQlwLT5wX2ZsYWcgfD0gUF9XQUlURUQ7CgoJCQkq
cmVzID0gcC0+cF9waWQ7CgkJCWlmIChzdGF0dXMpCgkJCQkqc3RhdHVzID0g
V19TVE9QQ09ERShwLT5wX3hzdGF0KTsKCQkJLyogWmVybyBydXNhZ2Ugc28g
d2UgZ2V0IHNvbWV0aGluZyBjb25zaXN0ZW50LiAqLwoJCQlpZiAocnVzYWdl
KQoJCQkJYnplcm8ocnVzYWdlLCBzaXplb2YocnVzYWdlKSk7CgkJCXJldHVy
biAoMCk7CgkJfQoJfQoJaWYgKG5mb3VuZCA9PSAwKQoJCXJldHVybiAoRUNI
SUxEKTsKCWlmIChvcHRpb25zICYgV05PSEFORykgewoJCSpyZXMgPSAwOwoJ
CXJldHVybiAoMCk7Cgl9CgllcnJvciA9IHRzbGVlcCgoY2FkZHJfdClxLCBQ
Q0FUQ0gsICJ3YWl0IiwgMCk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIChlcnJv
cik7Cglnb3RvIGxvb3A7Cn0KCi8qCiAqIG1ha2UgcHJvY2VzcyAncGFyZW50
JyB0aGUgbmV3IHBhcmVudCBvZiBwcm9jZXNzICdjaGlsZCcuCiAqLwp2b2lk
CnByb2NfcmVwYXJlbnQoY2hpbGQsIHBhcmVudCkKCXN0cnVjdCBwcm9jICpj
aGlsZDsKCXN0cnVjdCBwcm9jICpwYXJlbnQ7CnsKCglpZiAoY2hpbGQtPnBf
cHB0ciA9PSBwYXJlbnQpCgkJcmV0dXJuOwoKCUxJU1RfUkVNT1ZFKGNoaWxk
LCBwX3NpYmxpbmcpOwoJTElTVF9JTlNFUlRfSEVBRCgmcGFyZW50LT5wX2No
aWxkcmVuLCBjaGlsZCwgcF9zaWJsaW5nKTsKCWNoaWxkLT5wX3BwdHIgPSBw
YXJlbnQ7Cn0KCi8qCiAqIFRoZSBuZXh0IHR3byBmdW5jdGlvbnMgYXJlIHRv
IGhhbmRsZSBhZGRpbmcvZGVsZXRpbmcgaXRlbXMgb24gdGhlCiAqIGV4aXQg
Y2FsbG91dCBsaXN0CiAqIAogKiBhdF9leGl0KCk6CiAqIFRha2UgdGhlIGFy
Z3VtZW50cyBnaXZlbiBhbmQgcHV0IHRoZW0gb250byB0aGUgZXhpdCBjYWxs
b3V0IGxpc3QsCiAqIEhvd2V2ZXIgZmlyc3QgbWFrZSBzdXJlIHRoYXQgaXQn
cyBub3QgYWxyZWFkeSB0aGVyZS4KICogcmV0dXJucyAwIG9uIHN1Y2Nlc3Mu
CiAqLwoKaW50CmF0X2V4aXQoZnVuY3Rpb24pCglleGl0bGlzdF9mbiBmdW5j
dGlvbjsKewoJc3RydWN0IGV4aXRsaXN0ICplcDsKCiNpZmRlZiBJTlZBUklB
TlRTCgkvKiBCZSBub2lzeSBpZiB0aGUgcHJvZ3JhbW1lciBoYXMgbG9zdCB0
cmFjayBvZiB0aGluZ3MgKi8KCWlmIChybV9hdF9leGl0KGZ1bmN0aW9uKSkg
CgkJcHJpbnRmKCJXQVJOSU5HOiBleGl0IGNhbGxvdXQgZW50cnkgKCVwKSBh
bHJlYWR5IHByZXNlbnRcbiIsCgkJICAgIGZ1bmN0aW9uKTsKI2VuZGlmCgll
cCA9IG1hbGxvYyhzaXplb2YoKmVwKSwgTV9BVEVYSVQsIE1fTk9XQUlUKTsK
CWlmIChlcCA9PSBOVUxMKQoJCXJldHVybiAoRU5PTUVNKTsKCWVwLT5mdW5j
dGlvbiA9IGZ1bmN0aW9uOwoJVEFJTFFfSU5TRVJUX1RBSUwoJmV4aXRfbGlz
dCwgZXAsIG5leHQpOwoJcmV0dXJuICgwKTsKfQoKLyoKICogU2NhbiB0aGUg
ZXhpdCBjYWxsb3V0IGxpc3QgZm9yIHRoZSBnaXZlbiBpdGVtIGFuZCByZW1v
dmUgaXQuCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVk
ICgwIG9yIDEpCiAqLwppbnQKcm1fYXRfZXhpdChmdW5jdGlvbikKCWV4aXRs
aXN0X2ZuIGZ1bmN0aW9uOwp7CglzdHJ1Y3QgZXhpdGxpc3QgKmVwOwoKCVRB
SUxRX0ZPUkVBQ0goZXAsICZleGl0X2xpc3QsIG5leHQpIHsKCQlpZiAoZXAt
PmZ1bmN0aW9uID09IGZ1bmN0aW9uKSB7CgkJCVRBSUxRX1JFTU9WRSgmZXhp
dF9saXN0LCBlcCwgbmV4dCk7CgkJCWZyZWUoZXAsIE1fQVRFWElUKTsKCQkJ
cmV0dXJuKDEpOwoJCX0KCX0JCglyZXR1cm4gKDApOwp9Cgp2b2lkIGNoZWNr
X3NpZ2FjdHMgKHZvaWQpCnsKCXN0cnVjdCBwcm9jICpwID0gY3VycHJvYzsK
CXN0cnVjdCBzaWdhY3RzICpwc3M7CglpbnQgczsKCglpZiAocC0+cF9wcm9j
c2lnLT5wc19yZWZjbnQgPT0gMSAmJgoJICAgIHAtPnBfc2lnYWN0cyAhPSAm
cC0+cF9hZGRyLT51X3NpZ2FjdHMpIHsKCQlwc3MgPSBwLT5wX3NpZ2FjdHM7
CgkJcyA9IHNwbGhpZ2goKTsKCQlwLT5wX2FkZHItPnVfc2lnYWN0cyA9ICpw
c3M7CgkJcC0+cF9zaWdhY3RzID0gJnAtPnBfYWRkci0+dV9zaWdhY3RzOwoJ
CXNwbHgocyk7CgkJRlJFRShwc3MsIE1fU1VCUFJPQyk7Cgl9Cn0KCgAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAHByb2MuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAw
MDA0Mjc1MgAxMDIxMzI0MjUyMwAwMTEwMTYAIDAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIg
IAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyotCiAqIENvcHlyaWdodCAoYykg
MTk4NiwgMTk4OSwgMTk5MSwgMTk5MwogKglUaGUgUmVnZW50cyBvZiB0aGUg
VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogKiBB
bGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQg
ZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAogKiB0byB0aGUgVW5pdmVyc2l0eSBv
ZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdy
YXBoCiAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4g
YW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCiAqIHRoZSBwZXJtaXNz
aW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgogKgogKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgogKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l
bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKICog
ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50
OgogKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk
IGJ5IHRoZSBVbml2ZXJzaXR5IG9mCiAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5
IGFuZCBpdHMgY29udHJpYnV0b3JzLgogKiA0LiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycwogKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAq
CiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMg
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQogKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBS
RUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCiAqIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogKiBTVUNI
IERBTUFHRS4KICoKICoJQCgjKXByb2MuaAk4LjE1IChCZXJrZWxleSkgNS8x
OS85NQogKiAkRnJlZUJTRDogc3JjL3N5cy9zeXMvcHJvYy5oLHYgMS45OS4y
LjkgMjAwMy8wNi8wNiAyMDoyMTozMiB0ZWdnZSBFeHAgJAogKiAkRHJhZ29u
Rmx5OiBzcmMvc3lzL3N5cy9wcm9jLmgsdiAxLjU2IDIwMDQvMDkvMTcgMDE6
Mjk6NDUgam9lcmcgRXhwICQKICovCgojaWZuZGVmIF9TWVNfUFJPQ19IXwoj
ZGVmaW5lCV9TWVNfUFJPQ19IXwoKI2lmICFkZWZpbmVkKF9LRVJORUwpICYm
ICFkZWZpbmVkKF9LRVJORUxfU1RSVUNUVVJFUykKI2Vycm9yICJVc2VybGFu
ZCBtdXN0IGluY2x1ZGUgc3lzL3VzZXIuaCBpbnN0ZWFkIG9mIHN5cy9wcm9j
LmgiCiNlbmRpZgoKI2luY2x1ZGUgPHN5cy9jYWxsb3V0Lmg+CQkvKiBGb3Ig
c3RydWN0IGNhbGxvdXRfaGFuZGxlLiAqLwojaW5jbHVkZSA8c3lzL2ZpbGVk
ZXNjLmg+CiNpbmNsdWRlIDxzeXMvcXVldWUuaD4KI2luY2x1ZGUgPHN5cy9y
dHByaW8uaD4JCQkvKiBGb3Igc3RydWN0IHJ0cHJpby4gKi8KI2luY2x1ZGUg
PHN5cy9zaWduYWwuaD4KI2lmbmRlZiBfS0VSTkVMCiNpbmNsdWRlIDxzeXMv
dGltZS5oPgkJCS8qIEZvciBzdHJ1Y3RzIGl0aW1lcnZhbCwgdGltZXZhbC4g
Ki8KI2VuZGlmCiNpbmNsdWRlIDxzeXMvdWNyZWQuaD4KI2luY2x1ZGUgPHN5
cy9ldmVudC5oPgkJCS8qIEZvciBzdHJ1Y3Qga2xpc3QgKi8KI2luY2x1ZGUg
PHN5cy90aHJlYWQuaD4KI2luY2x1ZGUgPHN5cy92YXJzeW0uaD4KI2luY2x1
ZGUgPHN5cy91cGNhbGwuaD4KI2lmZGVmIF9LRVJORUwKI2luY2x1ZGUgPHN5
cy9nbG9iYWxkYXRhLmg+CiNlbmRpZgojaW5jbHVkZSA8bWFjaGluZS9wcm9j
Lmg+CQkvKiBNYWNoaW5lLWRlcGVuZGVudCBwcm9jIHN1YnN0cnVjdC4gKi8K
Ci8qCiAqIE9uZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIHBlciBzZXNzaW9uLgog
Ki8Kc3RydWN0CXNlc3Npb24gewoJaW50CXNfY291bnQ7CQkvKiBSZWYgY250
OyBwZ3JwcyBpbiBzZXNzaW9uLiAqLwoJc3RydWN0CXByb2MgKnNfbGVhZGVy
OwkJLyogU2Vzc2lvbiBsZWFkZXIuICovCglzdHJ1Y3QJdm5vZGUgKnNfdHR5
dnA7CQkvKiBWbm9kZSBvZiBjb250cm9sbGluZyB0ZXJtaW5hbC4gKi8KCXN0
cnVjdAl0dHkgKnNfdHR5cDsJCS8qIENvbnRyb2xsaW5nIHRlcm1pbmFsLiAq
LwoJcGlkX3QJc19zaWQ7CQkJLyogU2Vzc2lvbiBJRCAqLwoJY2hhcglzX2xv
Z2luW3JvdW5kdXAoTUFYTE9HTkFNRSwgc2l6ZW9mKGxvbmcpKV07CS8qIFNl
dGxvZ2luKCkgbmFtZS4gKi8KfTsKCi8qCiAqIE9uZSBzdHJ1Y3R1cmUgYWxs
b2NhdGVkIHBlciBwcm9jZXNzIGdyb3VwLgogKi8Kc3RydWN0CXBncnAgewoJ
TElTVF9FTlRSWShwZ3JwKSBwZ19oYXNoOwkvKiBIYXNoIGNoYWluLiAqLwoJ
TElTVF9IRUFEKCwgcHJvYykgcGdfbWVtYmVyczsJLyogUG9pbnRlciB0byBw
Z3JwIG1lbWJlcnMuICovCglzdHJ1Y3QJc2Vzc2lvbiAqcGdfc2Vzc2lvbjsJ
LyogUG9pbnRlciB0byBzZXNzaW9uLiAqLwoJc3RydWN0ICBzaWdpb2xzdCBw
Z19zaWdpb2xzdDsJLyogTGlzdCBvZiBzaWdpbyBzb3VyY2VzLiAqLwoJcGlk
X3QJcGdfaWQ7CQkJLyogUGdycCBpZC4gKi8KCWludAlwZ19qb2JjOwkvKiAj
IHByb2NzIHF1YWxpZnlpbmcgcGdycCBmb3Igam9iIGNvbnRyb2wgKi8KfTsK
CnN0cnVjdAlwcm9jc2lnIHsKCXNpZ3NldF90IHBzX3NpZ2lnbm9yZTsJLyog
U2lnbmFscyBiZWluZyBpZ25vcmVkLiAqLwoJc2lnc2V0X3QgcHNfc2lnY2F0
Y2g7CS8qIFNpZ25hbHMgYmVpbmcgY2F1Z2h0IGJ5IHVzZXIuICovCglpbnQg
ICAgICBwc19mbGFnOwoJc3RydWN0CSBzaWdhY3RzICpwc19zaWdhY3RzOwoJ
aW50CSBwc19yZWZjbnQ7Cn07CgojZGVmaW5lCVBTX05PQ0xEV0FJVAkweDAw
MDEJLyogTm8gem9tYmllcyBpZiBjaGlsZCBkaWVzICovCiNkZWZpbmUJUFNf
Tk9DTERTVE9QCTB4MDAwMgkvKiBObyBTSUdDSExEIHdoZW4gY2hpbGRyZW4g
c3RvcC4gKi8KCi8qCiAqIHBhcmdzLCB1c2VkIHRvIGhvbGQgYSBjb3B5IG9m
IHRoZSBjb21tYW5kIGxpbmUsIGlmIGl0IGhhZCBhIHNhbmUKICogbGVuZ3Ro
CiAqLwpzdHJ1Y3QJcGFyZ3MgewoJdV9pbnQJYXJfcmVmOwkJLyogUmVmZXJl
bmNlIGNvdW50ICovCgl1X2ludAlhcl9sZW5ndGg7CS8qIExlbmd0aCAqLwoJ
dV9jaGFyCWFyX2FyZ3NbMF07CS8qIEFyZ3VtZW50cyAqLwp9OwoKLyoKICog
RGVzY3JpcHRpb24gb2YgYSBwcm9jZXNzLgogKgogKiBUaGlzIHN0cnVjdHVy
ZSBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIG1hbmFnZSBh
IHRocmVhZCBvZgogKiBjb250cm9sLCBrbm93biBpbiBVTipYIGFzIGEgcHJv
Y2VzczsgaXQgaGFzIHJlZmVyZW5jZXMgdG8gc3Vic3RydWN0dXJlcwogKiBj
b250YWluaW5nIGRlc2NyaXB0aW9ucyBvZiB0aGluZ3MgdGhhdCB0aGUgcHJv
Y2VzcyB1c2VzLCBidXQgbWF5IHNoYXJlCiAqIHdpdGggcmVsYXRlZCBwcm9j
ZXNzZXMuICBUaGUgcHJvY2VzcyBzdHJ1Y3R1cmUgYW5kIHRoZSBzdWJzdHJ1
Y3R1cmVzCiAqIGFyZSBhbHdheXMgYWRkcmVzc2FibGUgZXhjZXB0IGZvciB0
aG9zZSBtYXJrZWQgIihQUk9DIE9OTFkpIiBiZWxvdywKICogd2hpY2ggbWln
aHQgYmUgYWRkcmVzc2FibGUgb25seSBvbiBhIHByb2Nlc3NvciBvbiB3aGlj
aCB0aGUgcHJvY2VzcwogKiBpcyBydW5uaW5nLgogKgogKiBOT1RFISAgVGhl
IHByb2Nlc3Mgc3RhcnQgdGltZSBpcyBzdG9yZWQgaW4gdGhlIHRocmVhZCBz
dHJ1Y3R1cmUgYXNzb2NpYXRlZAogKiB3aXRoIHRoZSBwcm9jZXNzLiAgSWYg
dGhlIHByb2Nlc3MgaXMgYSBab21iaWUsIHRoZW4gdGhpcyBmaWVsZCB3aWxs
IGJlCiAqIGluYWNjZXNzaWJsZSBkdWUgdG8gdGhlIHRocmVhZCBzdHJ1Y3R1
cmUgYmVpbmcgZnJlZSdkIGluIGtlcm5fd2FpdDEoKS4KICovCgpzdHJ1Y3Qg
amFpbDsKc3RydWN0IHNjaGVkOwoKc3RydWN0CXByb2MgewoJVEFJTFFfRU5U
UlkocHJvYykgcF9wcm9jcTsJLyogcnVuL3NsZWVwIHF1ZXVlLiAqLwoJTElT
VF9FTlRSWShwcm9jKSBwX2xpc3Q7CS8qIExpc3Qgb2YgYWxsIHByb2Nlc3Nl
cy4gKi8KCgkvKiBzdWJzdHJ1Y3R1cmVzOiAqLwoJc3RydWN0CXVjcmVkICpw
X3VjcmVkOwkJLyogUHJvY2VzcyBvd25lcidzIGlkZW50aXR5LiAqLwoJc3Ry
dWN0CWZpbGVkZXNjICpwX2ZkOwkJLyogUHRyIHRvIG9wZW4gZmlsZXMgc3Ry
dWN0dXJlLiAqLwoJc3RydWN0IGZpbGVkZXNjX3RvX2xlYWRlciAqcF9mZHRv
bDsgLyogUHRyIHRvIHRyYWNraW5nIG5vZGUgKi8KCXN0cnVjdAlwc3RhdHMg
KnBfc3RhdHM7CS8qIEFjY291bnRpbmcvc3RhdGlzdGljcyAoUFJPQyBPTkxZ
KS4gKi8KCXN0cnVjdAlwbGltaXQgKnBfbGltaXQ7CS8qIFByb2Nlc3MgbGlt
aXRzLiAqLwojaWYgMAoJc3RydWN0CXZtX29iamVjdCAqcF91cGFnZXNfb2Jq
Oy8qIFVwYWdlcyBvYmplY3QgKi8KI2Vsc2UKCXZvaWQJCSpwX2R1bW15MTsK
I2VuZGlmCglzdHJ1Y3QJcHJvY3NpZyAqcF9wcm9jc2lnOwojZGVmaW5lIHBf
c2lnYWN0cwlwX3Byb2NzaWctPnBzX3NpZ2FjdHMKI2RlZmluZSBwX3NpZ2ln
bm9yZQlwX3Byb2NzaWctPnBzX3NpZ2lnbm9yZQojZGVmaW5lIHBfc2lnY2F0
Y2gJcF9wcm9jc2lnLT5wc19zaWdjYXRjaAojZGVmaW5lCXBfcmxpbWl0CXBf
bGltaXQtPnBsX3JsaW1pdAoKCWludAlwX2ZsYWc7CQkJLyogUF8qIGZsYWdz
LiAqLwoJY2hhcglwX3N0YXQ7CQkJLyogUyogcHJvY2VzcyBzdGF0dXMuICov
CgljaGFyCXBfcGFkMVszXTsKCglwaWRfdAlwX3BpZDsJCQkvKiBQcm9jZXNz
IGlkZW50aWZpZXIuICovCglMSVNUX0VOVFJZKHByb2MpIHBfaGFzaDsJLyog
SGFzaCBjaGFpbi4gKi8KCUxJU1RfRU5UUlkocHJvYykgcF9wZ2xpc3Q7CS8q
IExpc3Qgb2YgcHJvY2Vzc2VzIGluIHBncnAuICovCglzdHJ1Y3QJcHJvYyAq
cF9wcHRyOwkgCS8qIFBvaW50ZXIgdG8gcGFyZW50IHByb2Nlc3MuICovCglM
SVNUX0VOVFJZKHByb2MpIHBfc2libGluZzsJLyogTGlzdCBvZiBzaWJsaW5n
IHByb2Nlc3Nlcy4gKi8KCUxJU1RfSEVBRCgsIHByb2MpIHBfY2hpbGRyZW47
CS8qIFBvaW50ZXIgdG8gbGlzdCBvZiBjaGlsZHJlbi4gKi8KCXN0cnVjdCBj
YWxsb3V0IHBfaXRoYW5kbGU7IC8qIGZvciBzY2hlZHVsaW5nIHBfcmVhbHRp
bWVyICovCglzdHJ1Y3QJdmFyc3ltc2V0IHBfdmFyc3ltc2V0OwoKLyogVGhl
IGZvbGxvd2luZyBmaWVsZHMgYXJlIGFsbCB6ZXJvZWQgdXBvbiBjcmVhdGlv
biBpbiBmb3JrLiAqLwojZGVmaW5lCXBfc3RhcnR6ZXJvCXBfb3BwaWQKCglw
aWRfdAlwX29wcGlkOwkgLyogU2F2ZSBwYXJlbnQgcGlkIGR1cmluZyBwdHJh
Y2UuIFhYWCAqLwoJaW50CXBfZHVwZmQ7CSAvKiBTaWRld2F5cyByZXR1cm4g
dmFsdWUgZnJvbSBmZG9wZW4uIFhYWCAqLwoKCXN0cnVjdAl2bXNwYWNlICpw
X3Ztc3BhY2U7CS8qIEFkZHJlc3Mgc3BhY2UuICovCgoJLyogc2NoZWR1bGlu
ZyAqLwoJdV9pbnQJcF9lc3RjcHU7CSAvKiBUaW1lIGF2ZXJhZ2VkIHZhbHVl
IG9mIHBfY3B0aWNrcy4gKi8KCXVfaW50CXBfZXN0Y3B1X2Zvcms7CSAvKiBl
c3RjcHUgYXMgb2YgZm9yaywgdXNlZCBpbiBiYXRjaCBkZXRlY3QgKi8KCWlu
dAlwX2NwdGlja3M7CSAvKiBUaWNrcyBvZiBjcHUgdGltZS4gKi8KCWZpeHB0
X3QJcF9wY3RjcHU7CSAvKiAlY3B1IGZvciB0aGlzIHByb2Nlc3MgZHVyaW5n
IHBfc3d0aW1lICovCgl1X2ludAlwX3N3dGltZTsJIC8qIFRpbWUgc3dhcHBl
ZCBpbiBvciBvdXQuICovCgl1X2ludAlwX3NscHRpbWU7CSAvKiBUaW1lIHNp
bmNlIGxhc3QgYmxvY2tlZC4gKi8KCglzdHJ1Y3QJaXRpbWVydmFsIHBfcmVh
bHRpbWVyOwkvKiBBbGFybSB0aW1lci4gKi8KCglpbnQJcF90cmFjZWZsYWc7
CQkvKiBLZXJuZWwgdHJhY2UgcG9pbnRzLiAqLwoJc3RydWN0CXZub2RlICpw
X3RyYWNlcDsJLyogVHJhY2UgdG8gdm5vZGUuICovCgoJc2lnc2V0X3QgcF9z
aWdsaXN0OwkJLyogU2lnbmFscyBhcnJpdmVkIGJ1dCBub3QgZGVsaXZlcmVk
LiAqLwoKCXN0cnVjdAl2bm9kZSAqcF90ZXh0dnA7CS8qIFZub2RlIG9mIGV4
ZWN1dGFibGUuICovCgoJY2hhcglwX2xvY2s7CQkJLyogUHJvY2VzcyBsb2Nr
IChwcmV2ZW50IHN3YXApIGNvdW50LiAqLwoJc2hvcnQJcF9wcmlvcml0eTsJ
CS8qIG92ZXJhbGwgcHJpb3JpdHkgKGxvd2VyPT1iZXR0ZXIpICovCgljaGFy
CXBfcnFpbmRleDsJCS8qIFJ1biBxdWV1ZSBpbmRleCAqLwoKCXVuc2lnbmVk
IGludAlwX3N0b3BzOwkvKiBwcm9jZnMgZXZlbnQgYml0bWFzayAqLwoJdW5z
aWduZWQgaW50CXBfc3R5cGU7CS8qIHByb2NmcyBzdG9wIGV2ZW50IHR5cGUg
Ki8KCWNoYXIJcF9zdGVwOwkJCS8qIHByb2NmcyBzdG9wICpvbmNlKiBmbGFn
ICovCgl1bnNpZ25lZCBjaGFyCXBfcGZzZmxhZ3M7CS8qIHByb2NmcyBmbGFn
cyAqLwoJY2hhcglwX3BhZDNbMl07CQkvKiBwYWRkaW5nIGZvciBhbGlnbm1l
bnQgKi8KCXN0cnVjdAlzaWdpb2xzdCBwX3NpZ2lvbHN0OwkvKiBsaXN0IG9m
IHNpZ2lvIHNvdXJjZXMgKi8KCWludAlwX3NpZ3BhcmVudDsJCS8qIHNpZ25h
bCB0byBwYXJlbnQgb24gZXhpdCAqLwoJc2lnc2V0X3QgcF9vbGRzaWdtYXNr
OwkJLyogc2F2ZWQgbWFzayBmcm9tIGJlZm9yZSBzaWdwYXVzZSAqLwoJaW50
CXBfc2lnOwkJCS8qIGZvciBjb3JlIGR1bXAvZGVidWdnZXIgWFhYICovCiAg
ICAgICAgdV9sb25nCXBfY29kZTsJICAJICAgICAgICAvKiBmb3IgY29yZSBk
dW1wL2RlYnVnZ2VyIFhYWCAqLwoJc3RydWN0CWtsaXN0IHBfa2xpc3Q7CQkv
KiBrbm90ZXMgYXR0YWNoZWQgdG8gdGhpcyBwcm9jZXNzICovCgovKiBFbmQg
YXJlYSB0aGF0IGlzIHplcm9lZCBvbiBjcmVhdGlvbi4gKi8KI2RlZmluZQlw
X2VuZHplcm8JcF9zdGFydGNvcHkKCi8qIFRoZSBmb2xsb3dpbmcgZmllbGRz
IGFyZSBhbGwgY29waWVkIHVwb24gY3JlYXRpb24gaW4gZm9yay4gKi8KI2Rl
ZmluZQlwX3N0YXJ0Y29weQlwX3NpZ21hc2sKCglzaWdzZXRfdCBwX3NpZ21h
c2s7CS8qIEN1cnJlbnQgc2lnbmFsIG1hc2suICovCglzdGFja190CXBfc2ln
c3RrOwkvKiBzcCAmIG9uIHN0YWNrIHN0YXRlIHZhcmlhYmxlICovCgljaGFy
CXBfaW50ZXJhY3RpdmU7CS8qIGxvbmcgdGVybSBpbnRlcmFjdGl2aXR5IHBh
ci0wICovCgljaGFyCXBfbmljZTsJCS8qIFByb2Nlc3MgIm5pY2UiIHZhbHVl
LiAqLwoKCXN0cnVjdCAJcGdycCAqcF9wZ3JwOwkvKiBQb2ludGVyIHRvIHBy
b2Nlc3MgZ3JvdXAuICovCgoJc3RydWN0IAlzeXNlbnR2ZWMgKnBfc3lzZW50
OyAvKiBTeXN0ZW0gY2FsbCBkaXNwYXRjaCBpbmZvcm1hdGlvbi4gKi8KCglz
dHJ1Y3QJcnRwcmlvIHBfcnRwcmlvOwkvKiBSZWFsdGltZSBwcmlvcml0eS4g
Ki8KCXN0cnVjdAlwYXJncyAqcF9hcmdzOwovKiBFbmQgYXJlYSB0aGF0IGlz
IGNvcGllZCBvbiBjcmVhdGlvbi4gKi8KI2RlZmluZQlwX2VuZGNvcHkJcF9h
ZGRyCglzdHJ1Y3QJdXNlciAqcF9hZGRyOwkvKiBLZXJuZWwgdmlydHVhbCBh
ZGRyIG9mIHUtYXJlYSAoUFJPQyBPTkxZKS4gKi8KCXN0cnVjdAltZHByb2Mg
cF9tZDsJLyogQW55IG1hY2hpbmUtZGVwZW5kZW50IGZpZWxkcy4gKi8KCgl1
X3Nob3J0CXBfeHN0YXQ7CS8qIEV4aXQgc3RhdHVzIGZvciB3YWl0OyBhbHNv
IHN0b3Agc2lnbmFsLiAqLwoJdV9zaG9ydAlwX2FjZmxhZzsJLyogQWNjb3Vu
dGluZyBmbGFncy4gKi8KCXN0cnVjdAlydXNhZ2UgKnBfcnU7CS8qIEV4aXQg
aW5mb3JtYXRpb24uIFhYWCAqLwoKCWludAlwX250aHJlYWRzOwkvKiBudW1i
ZXIgb2YgdGhyZWFkcyAob25seSBpbiBsZWFkZXIpICovCgl2b2lkCSpwX2Fp
b2luZm87CS8qIEFTWU5DIEkvTyBpbmZvICovCglpbnQJcF93YWtldXA7CS8q
IHRocmVhZCBpZCAqLwoJc3RydWN0IHByb2MgKnBfcGVlcnM7CQoJc3RydWN0
IHByb2MgKnBfbGVhZGVyOwoJdm9pZAkqcF9lbXVsZGF0YTsJLyogcHJvY2Vz
cy1zcGVjaWZpYyBlbXVsYXRvciBzdGF0ZSBkYXRhICovCglzdHJ1Y3QgdGhy
ZWFkICpwX3RocmVhZDsgLyogdGVtcG9yYXJpbHkgZW1iZWQgdGhyZWFkIHN0
cnVjdCBpbiBwcm9jICovCglzdHJ1Y3QgdXBjYWxsICpwX3VwY2FsbDsgLyog
VVNFUkxBTkQgUE9JTlRFUiEgcmVnaXN0ZXJlZCB1cGNhbGwgKi8KCXN0cnVj
dCBzY2hlZCAqcF9zY2hlZDsJLyogd29yay1pbi1wcm9ncmVzcyAvIFBldGVy
IEthZGF1ICovCglpbnQJcF9udW1wb3NpeGxvY2tzOyAvKiBudW1iZXIgb2Yg
UE9TSVggbG9ja3MgKi8KCVRBSUxRX0hFQUQoLCBzeXNtc2cpIHBfc3lzbXNn
cTsgLyogUmVjb3JkZWQgYXN5bmNoIHN5c3RlbSBjYWxscyAqLwoJaW50IHBf
bnVtX3N5c21zZzsJCS8qIEhvdyBtYW55IHN5c21zZydzIHRoaXMgcHJvYyBo
YXMgcnVubmluZyAqLwoKCS8qIFRoZXNlIGZpZWxkcyBhcmUgcmVxdWlyZWQg
dG8gc3VwcG9ydCBwcm9jZXNzIGxldmVsIGNoZWNrcG9pbnRpbmcgKi8KCglp
bnQgY2hrcHQ7CQkvKiBpbmRleCBpbmRpY2F0aW5nIG51bWJlciBvZiBjaGVj
a3BvaW50cyAqLwoJY2hhciBpc19zZXRqbXA7CQkvKiBkaXN0aW5ndWlzaCBi
ZXR3ZWVuIHNldGptcCBhbmQgZnJlZXplICovCglpbnQgY2hrcHRfc2lnOwkJ
Lyogc2lnbmFsIHRoYXQgbGlrZWx5IGNhdXNlZCBhIHJlY292ZXJ5ICovCglp
bnQgcHJldiwgY3VycjsJCS8qIHBhc3QgYW5kIGN1cnJlbnQgY2hlY2twb2lu
dCBzdGF0ZSAqLwoJY2FkZHJfdCBjYWNoZTsJCS8qIGNhY2hlIHB0ciAqLwoJ
aW50IGNhY2hlc2l6ZTsJCS8qIGxlbmd0aCBvZiBjYWNoZSAqLwp9OwoKI2lm
IGRlZmluZWQoX0tFUk5FTCkKI2RlZmluZSBwX3djaGFuCQlwX3RocmVhZC0+
dGRfd2NoYW4KI2RlZmluZSBwX3dtZXNnCQlwX3RocmVhZC0+dGRfd21lc2cK
I2RlZmluZQlwX2NvbW0JCXBfdGhyZWFkLT50ZF9jb21tCiNkZWZpbmUJcF9z
ZXNzaW9uCXBfcGdycC0+cGdfc2Vzc2lvbgojZGVmaW5lCXBfcGdpZAkJcF9w
Z3JwLT5wZ19pZAojZW5kaWYKCi8qIFN0YXR1cyB2YWx1ZXMuICovCiNkZWZp
bmUJU0lETAkxCQkvKiBQcm9jZXNzIGJlaW5nIGNyZWF0ZWQgYnkgZm9yay4g
Ki8KI2RlZmluZQlTUlVOCTIJCS8qIEN1cnJlbnRseSBydW5uYWJsZS4gKi8K
I2RlZmluZQlTU0xFRVAJMwkJLyogU2xlZXBpbmcgb24gYW4gYWRkcmVzcy4g
Ki8KI2RlZmluZQlTU1RPUAk0CQkvKiBQcm9jZXNzIGRlYnVnZ2luZyBvciBz
dXNwZW5zaW9uLiAqLwojZGVmaW5lCVNaT01CCTUJCS8qIEF3YWl0aW5nIGNv
bGxlY3Rpb24gYnkgcGFyZW50LiAqLwojZGVmaW5lIFNUSFJFQUQJNgkJLyog
U3ludGhlc2l6ZWQgZm9yIGVwcm9jIG9ubHkgKi8KCi8qIFRoZXNlIGZsYWdz
IGFyZSBrZXB0IGluIHBfZmxhZ3MuICovCiNkZWZpbmUJUF9BRFZMT0NLCTB4
MDAwMDEJLyogUHJvY2VzcyBtYXkgaG9sZCBhIFBPU0lYIGFkdmlzb3J5IGxv
Y2suICovCiNkZWZpbmUJUF9DT05UUk9MVAkweDAwMDAyCS8qIEhhcyBhIGNv
bnRyb2xsaW5nIHRlcm1pbmFsLiAqLwojZGVmaW5lCVBfSU5NRU0JCTB4MDAw
MDQJLyogTG9hZGVkIGludG8gbWVtb3J5LiAqLwojZGVmaW5lCVBfUFBXQUlU
CTB4MDAwMTAJLyogUGFyZW50IGlzIHdhaXRpbmcgZm9yIGNoaWxkIHRvIGV4
ZWMvZXhpdC4gKi8KI2RlZmluZQlQX1BST0ZJTAkweDAwMDIwCS8qIEhhcyBz
dGFydGVkIHByb2ZpbGluZy4gKi8KI2RlZmluZSBQX1NFTEVDVAkweDAwMDQw
IC8qIFNlbGVjdGluZzsgd2FrZXVwL3dhaXRpbmcgZGFuZ2VyLiAqLwojZGVm
aW5lCVBfU0lOVFIJCTB4MDAwODAJLyogU2xlZXAgaXMgaW50ZXJydXB0aWJs
ZS4gKi8KI2RlZmluZQlQX1NVR0lECQkweDAwMTAwCS8qIEhhZCBzZXQgaWQg
cHJpdmlsZWdlcyBzaW5jZSBsYXN0IGV4ZWMuICovCiNkZWZpbmUJUF9TWVNU
RU0JMHgwMDIwMAkvKiBTeXN0ZW0gcHJvYzogbm8gc2lncywgc3RhdHMgb3Ig
c3dhcHBpbmcuICovCiNkZWZpbmUJUF9VTlVTRUQwMDQwMAkweDAwNDAwCiNk
ZWZpbmUJUF9UUkFDRUQJMHgwMDgwMAkvKiBEZWJ1Z2dlZCBwcm9jZXNzIGJl
aW5nIHRyYWNlZC4gKi8KI2RlZmluZQlQX1dBSVRFRAkweDAxMDAwCS8qIERl
YnVnZ2luZyBwcm9jZXNzIGhhcyB3YWl0ZWQgZm9yIGNoaWxkLiAqLwojZGVm
aW5lCVBfV0VYSVQJCTB4MDIwMDAJLyogV29ya2luZyBvbiBleGl0aW5nLiAq
LwojZGVmaW5lCVBfRVhFQwkJMHgwNDAwMAkvKiBQcm9jZXNzIGNhbGxlZCBl
eGVjLiAqLwoKLyogU2hvdWxkIHByb2JhYmx5IGJlIGNoYW5nZWQgaW50byBh
IGhvbGQgY291bnQuICovCi8qIHdhcwlQX05PU1dBUAkweDA4MDAwCXdhczog
RG8gbm90IHN3YXAgdXBhZ2VzOyBwLT5wX2hvbGQgKi8KLyogd2FzCVBfUEhZ
U0lPCTB4MTAwMDAJd2FzOiBEb2luZyBwaHlzaWNhbCBJL087IHVzZSBwLT5w
X2hvbGQgKi8KCiNkZWZpbmUJUF9VUENBTExQRU5ECTB4MjAwMDAJLyogYW4g
dXBjYWxsIGlzIHBlbmRpbmcgKi8KCiNkZWZpbmUJUF9TV0FQUElORwkweDQw
MDAwCS8qIFByb2Nlc3MgaXMgYmVpbmcgc3dhcHBlZC4gKi8KI2RlZmluZQlQ
X1NXQVBJTlJFUQkweDgwMDAwCS8qIFN3YXBpbiByZXF1ZXN0IGR1ZSB0byB3
YWtldXAgKi8KCi8qIE1hcmtlZCBhIGtlcm5lbCB0aHJlYWQgKi8KI2RlZmlu
ZQlQX09OUlVOUQkweDEwMDAwMCAvKiBvbiBhIHVzZXIgc2NoZWR1bGluZyBy
dW4gcXVldWUgKi8KI2RlZmluZQlQX0tUSFJFQURQCTB4MjAwMDAwIC8qIFBy
b2Nlc3MgaXMgcmVhbGx5IGEga2VybmVsIHRocmVhZCAqLwojZGVmaW5lIFBf
VU5VU0VENDAwMDAwCTB4NDAwMDAwCiNkZWZpbmUJUF9ERUFETEtUUkVBVCAg
IDB4ODAwMDAwIC8qIGxvY2sgYXF1aXNpdGlvbiAtIGRlYWRsb2NrIHRyZWF0
bWVudCAqLwoKI2RlZmluZQlQX0pBSUxFRAkweDEwMDAwMDAgLyogUHJvY2Vz
cyBpcyBpbiBqYWlsICovCiNkZWZpbmUJUF9PTERNQVNLCTB4MjAwMDAwMCAv
KiBuZWVkIHRvIHJlc3RvcmUgbWFzayBiZWZvcmUgcGF1c2UgKi8KI2RlZmlu
ZQlQX0FMVFNUQUNLCTB4NDAwMDAwMCAvKiBoYXZlIGFsdGVybmF0ZSBzaWdu
YWwgc3RhY2sgKi8KI2RlZmluZQlQX0lORVhFQwkweDgwMDAwMDAgLyogUHJv
Y2VzcyBpcyBpbiBleGVjdmUoKS4gKi8KI2RlZmluZSBQX1BBU1NJVkVfQUNR
CTB4MTAwMDAwMDAgLyogUGFzc2l2ZSBhY3F1aXJlIGNwdSAoc2VlIGtlcm5f
c3dpdGNoKSAqLwojZGVmaW5lCVBfVVBDQUxMV0FJVAkweDIwMDAwMDAwIC8q
IFdhaXQgZm9yIHVwY2FsbCBvciBzaWduYWwgKi8KCiNpZmRlZiBfS0VSTkVM
CgojaWZkZWYgTUFMTE9DX0RFQ0xBUkUKTUFMTE9DX0RFQ0xBUkUoTV9TRVNT
SU9OKTsKTUFMTE9DX0RFQ0xBUkUoTV9TVUJQUk9DKTsKTUFMTE9DX0RFQ0xB
UkUoTV9aT01CSUUpOwpNQUxMT0NfREVDTEFSRShNX1BBUkdTKTsKI2VuZGlm
CgovKiBmbGFncyBmb3Igc3VzZXJfeHh4KCkgKi8KI2RlZmluZSBQUklTT05f
Uk9PVAkweDEKI2RlZmluZQlOVUxMX0NSRURfT0tBWQkweDIKCi8qIEhhbmR5
IG1hY3JvIHRvIGRldGVybWluZSBpZiBwMSBjYW4gbWFuZ2xlIHAyICovCgoj
ZGVmaW5lIFBSSVNPTl9DSEVDSyhjcjEsIGNyMikgXAoJKCghKGNyMSktPmNy
X3ByaXNvbikgfHwgKGNyMSktPmNyX3ByaXNvbiA9PSAoY3IyKS0+Y3JfcHJp
c29uKQoKLyoKICogSGFuZHkgbWFjcm8gZm9yIExJU1RzLgogKi8KI2RlZmlu
ZSBGT1JFQUNIX1BST0NfSU5fU1lTVEVNKHApCUxJU1RfRk9SRUFDSCgocCks
ICZhbGxwcm9jLCBwX2xpc3QpCgovKgogKiBXZSB1c2UgcHJvY2VzcyBJRHMg
PD0gUElEX01BWDsgUElEX01BWCArIDEgbXVzdCBhbHNvIGZpdCBpbiBhIHBp
ZF90LAogKiBhcyBpdCBpcyB1c2VkIHRvIHJlcHJlc2VudCAibm8gcHJvY2Vz
cyBncm91cCIuCiAqLwojZGVmaW5lCVBJRF9NQVgJCTk5OTk5CiNkZWZpbmUJ
Tk9fUElECQkxMDAwMDAKCiNkZWZpbmUgU0VTU19MRUFERVIocCkJKChwKS0+
cF9zZXNzaW9uLT5zX2xlYWRlciA9PSAocCkpCgovKgogKiBTVE9QRVZFTlQK
ICovCmV4dGVybiB2b2lkIHN0b3BldmVudChzdHJ1Y3QgcHJvYyosIHVuc2ln
bmVkIGludCwgdW5zaWduZWQgaW50KTsKI2RlZmluZQlTVE9QRVZFTlQocCxl
LHYpCQkJXAoJZG8gewkJCQkJXAoJCWlmICgocCktPnBfc3RvcHMgJiAoZSkp
IHsJXAoJCQlzdG9wZXZlbnQocCxlLHYpOwlcCgkJfQkJCQlcCgl9IHdoaWxl
ICgwKQoKLyogaG9sZCBwcm9jZXNzIFUtYXJlYSBpbiBtZW1vcnksIG5vcm1h
bGx5IGZvciBwdHJhY2UvcHJvY2ZzIHdvcmsgKi8KI2RlZmluZSBQSE9MRChw
KSB7CQkJCQkJCVwKCWlmICgocCktPnBfbG9jaysrID09IDAgJiYgKChwKS0+
cF9mbGFnICYgUF9JTk1FTSkgPT0gMCkJXAoJCWZhdWx0aW4ocCk7CQkJCQkJ
XAp9CiNkZWZpbmUgUFJFTEUocCkJKC0tKHApLT5wX2xvY2spCgojZGVmaW5l
CVBJREhBU0gocGlkKQkoJnBpZGhhc2h0YmxbKHBpZCkgJiBwaWRoYXNoXSkK
ZXh0ZXJuIExJU1RfSEVBRChwaWRoYXNoaGVhZCwgcHJvYykgKnBpZGhhc2h0
Ymw7CmV4dGVybiB1X2xvbmcgcGlkaGFzaDsKCiNkZWZpbmUJUEdSUEhBU0go
cGdpZCkJKCZwZ3JwaGFzaHRibFsocGdpZCkgJiBwZ3JwaGFzaF0pCmV4dGVy
biBMSVNUX0hFQUQocGdycGhhc2hoZWFkLCBwZ3JwKSAqcGdycGhhc2h0Ymw7
CmV4dGVybiB1X2xvbmcgcGdycGhhc2g7CgojaWYgMCAKI2lmbmRlZiBTRVRf
Q1VSUFJPQwojZGVmaW5lIFNFVF9DVVJQUk9DKHApCShjdXJwcm9jID0gKHAp
KQojZW5kaWYKI2VuZGlmCgpleHRlcm4gc3RydWN0IHByb2MgcHJvYzA7CQkv
KiBQcm9jZXNzIHNsb3QgZm9yIHN3YXBwZXIuICovCmV4dGVybiBzdHJ1Y3Qg
dGhyZWFkIHRocmVhZDA7CQkvKiBUaHJlYWQgc2xvdCBmb3Igc3dhcHBlci4g
Ki8KZXh0ZXJuIGludCBob2d0aWNrczsJCQkvKiBMaW1pdCBvbiBrZXJuZWwg
Y3B1IGhvZ3MuICovCmV4dGVybiBpbnQgbnByb2NzLCBtYXhwcm9jOwkJLyog
Q3VycmVudCBhbmQgbWF4IG51bWJlciBvZiBwcm9jcy4gKi8KZXh0ZXJuIGlu
dCBtYXhwcm9jcGVydWlkOwkJLyogTWF4IHByb2NzIHBlciB1aWQuICovCmV4
dGVybiBpbnQgc2NoZWRfcXVhbnR1bTsJCS8qIFNjaGVkdWxpbmcgcXVhbnR1
bSBpbiB0aWNrcyAqLwoKTElTVF9IRUFEKHByb2NsaXN0LCBwcm9jKTsKZXh0
ZXJuIHN0cnVjdCBwcm9jbGlzdCBhbGxwcm9jOwkJLyogTGlzdCBvZiBhbGwg
cHJvY2Vzc2VzLiAqLwpleHRlcm4gc3RydWN0IHByb2NsaXN0IHpvbWJwcm9j
OwkvKiBMaXN0IG9mIHpvbWJpZSBwcm9jZXNzZXMuICovCmV4dGVybiBzdHJ1
Y3QgcHJvYyAqaW5pdHByb2M7CQkvKiBQcm9jZXNzIHNsb3QgZm9yIGluaXQg
Ki8KZXh0ZXJuIHN0cnVjdCB0aHJlYWQgKnBhZ2V0aHJlYWQsICp1cGRhdGV0
aHJlYWQ7CgojZGVmaW5lCU5RUwkzMgkJCS8qIDMyIHJ1biBxdWV1ZXMuICov
ClRBSUxRX0hFQUQocnEsIHByb2MpOwoKLyoKICogU2NoZWR1bGVyIGVzdGNw
dSBtYWNyb3MuCiAqCiAqIHBfcHJpb3JpdHkgPSBOSUNFX0FESlVTVChwLT5w
X25pY2UgLSBQUklPX01JTikgKwogKgkJCXAtPnBfZXN0Y3B1IC8gRVNUQ1BV
UkFNUDsKICoKICogTklDRV9XRUlHSFQgZGV0ZXJtaW5lcyB0aGUgcF9lc3Rj
cHUgb3ZlcmxhcCBiZXR3ZWVuIG5pY2UgbGV2ZWxzLiAgIEl0CiAqIGNhbm5v
dCBleGNlZWQgMy4wLiAgQSB2YWx1ZSBvZiAyLjAgZ2l2ZXMgdXMgYSBuaWNl
IHNtYWxsIG92ZXJsYXAgYmV0d2VlbgogKiBuaWNlIC0yMCBhbmQgbmljZSAr
MC4gIEEgdmFsdWUgb2YgMy4wIHJlZHVjZXMgdGhlIG92ZXJsYXAgd2hpbGUg
YSB2YWx1ZQogKiBvZiAxLjAgaW5jcmVhc2VzIHRoZSBvdmVybGFwLgogKgog
KiBFU1RDUFVSQU1QIGRldGVybWluZXMgaG93IHNsb3dseSBlc3RjcHUgZWZm
ZWN0cyB0aGUgcHJvY2VzcyBwcmlvcml0eS4KICogSGlnaGVyIG51bWJlcnMg
cmVzdWx0IGluIHNsb3dlciByYW1wLXVwIHRpbWVzIGJlY2F1c2UgZXN0Y3B1
IGlzIGluY3JlbWVudGVkCiAqIG9uY2UgcGVyIHNjaGVkdWxlciB0aWNrIGFu
ZCBtYXhlcyBvdXQgYXQgRVNUQ1BVTElNLgogKgogKiBFU1RDUFVMSU0gPSAo
MTI3IC0gMiAqIDQwKSAqIDggPSAzNzYKICoKICogTk9URTogRVNUQ1BVVkZS
RVEgaXMgdGhlICd2aXJ0dWFsJyBlc3RjcHUgYWNjdW11bGF0aW9uIGZyZXF1
ZW5jeSwgd2hlcmVhcwogKiBFU1RDUFVGUkVRIGlzIHRoZSBhY3R1YWwgaW50
ZXJydXB0IHJhdGUuICBUaGUgcmF0aW8gaXMgdXNlZCB0byBzY2FsZQogKiBi
b3RoIHRoZSByYW1wLXVwIGFuZCB0aGUgZGVjYXkgY2FsY3VsYXRpb25zIGlu
IGtlcm5fc3luY2guYy4gIAogKi8KCiNkZWZpbmUgRVNUQ1BVUkFNUAk4CQkJ
LyogaGlnaGVyIGVxdWFscyBzbG93ZXIgKi8KI2RlZmluZSBOSUNFX0FESlVT
VCh2YWx1ZSkJKCgodW5zaWduZWQgaW50KShOSUNFX1dFSUdIVCAqIDEyOCkg
KiAodmFsdWUpKSAvIDEyOCkKI2RlZmluZSBFU1RDUFVNQVgJKChNQVhQUkkg
LSBOSUNFX0FESlVTVChQUklPX01BWCAtIFBSSU9fTUlOKSkgKiBFU1RDUFVS
QU1QKQojZGVmaW5lIEVTVENQVUxJTSh2KQltaW4oKHYpLCBFU1RDUFVNQVgp
CiNkZWZpbmUgRVNUQ1BVRlJFUQkyMAkJCS8qIGVzdGNwdSB1cGRhdGUgZnJl
cXVlbmN5ICovCiNkZWZpbmUgRVNUQ1BVVkZSRVEJNDAJCQkvKiB2aXJ0dWFs
IGZyZXEgY29udHJvbHMgcmFtcCovCiNkZWZpbmUJTklDRV9XRUlHSFQJMi4w
CQkJLyogcHJpb3JpdGllcyBwZXIgbmljZSBsZXZlbCAqLwojZGVmaW5lCVBQ
UQkJKChNQVhQUkkgKyAxKSAvIE5RUykJLyogcHJpb3JpdGllcyBwZXIgcXVl
dWUgKi8KCmV4dGVybgl1X2xvbmcgcHNfYXJnX2NhY2hlX2xpbWl0OwpleHRl
cm4JaW50IHBzX2FyZ3NvcGVuOwpleHRlcm4JaW50IHBzX3Nob3dhbGxwcm9j
czsKCnN0cnVjdCBwcm9jICpwZmluZCAocGlkX3QpOwkvKiBGaW5kIHByb2Nl
c3MgYnkgaWQuICovCnN0cnVjdCBwZ3JwICpwZ2ZpbmQgKHBpZF90KTsJLyog
RmluZCBwcm9jZXNzIGdyb3VwIGJ5IGlkLiAqLwpzdHJ1Y3QgcHJvYyAqenBm
aW5kIChwaWRfdCk7CS8qIEZpbmQgem9tYmllIHByb2Nlc3MgYnkgaWQuICov
CgpzdHJ1Y3Qgdm1fem9uZTsKc3RydWN0IGdsb2JhbGRhdGE7CmV4dGVybiBz
dHJ1Y3Qgdm1fem9uZSAqcHJvY196b25lOwoKaW50CWVudGVycGdycCAoc3Ry
dWN0IHByb2MgKnAsIHBpZF90IHBnaWQsIGludCBta3Nlc3MpOwp2b2lkCWZp
eGpvYmMgKHN0cnVjdCBwcm9jICpwLCBzdHJ1Y3QgcGdycCAqcGdycCwgaW50
IGVudGVyaW5nKTsKaW50CWluZmVyaW9yIChzdHJ1Y3QgcHJvYyAqcCk7Cmlu
dAlsZWF2ZXBncnAgKHN0cnVjdCBwcm9jICpwKTsKdm9pZAlzZXNzX2hvbGQo
c3RydWN0IHNlc3Npb24gKnNwKTsKdm9pZAlzZXNzX3JlbGUoc3RydWN0IHNl
c3Npb24gKnNwKTsKdm9pZAltaV9zd2l0Y2ggKHN0cnVjdCBwcm9jICpwKTsK
dm9pZAlwcm9jaW5pdCAodm9pZCk7CnZvaWQJcmVsc2N1cnByb2Moc3RydWN0
IHByb2MgKmN1cnApOwppbnQJcF90cmVzcGFzcyAoc3RydWN0IHVjcmVkICpj
cjEsIHN0cnVjdCB1Y3JlZCAqY3IyKTsKdm9pZAlyZXNldHByaW9yaXR5IChz
dHJ1Y3QgcHJvYyAqKTsKaW50CXJvdW5kcm9iaW5faW50ZXJ2YWwgKHZvaWQp
Owp2b2lkCXJlc2NoZWRfY3B1cyh1X2ludDMyX3QgbWFzayk7CnZvaWQJc2No
ZWR1bGVyY2xvY2sgKHZvaWQgKmR1bW15KTsKdm9pZAlzZXRydW5uYWJsZSAo
c3RydWN0IHByb2MgKik7CnZvaWQJY2xycnVubmFibGUgKHN0cnVjdCBwcm9j
ICosIGludCBzdGF0KTsKdm9pZAlzZXRydW5xdWV1ZSAoc3RydWN0IHByb2Mg
Kik7CnZvaWQJc2xlZXBpbml0ICh2b2lkKTsKaW50CXN1c2VyIChzdHJ1Y3Qg
dGhyZWFkICp0ZCk7CmludAlzdXNlcl9wcm9jIChzdHJ1Y3QgcHJvYyAqcCk7
CmludAlzdXNlcl9jcmVkIChzdHJ1Y3QgdWNyZWQgKmNyZWQsIGludCBmbGFn
KTsKdm9pZAlyZW1ydW5xdWV1ZSAoc3RydWN0IHByb2MgKik7CnZvaWQJcmVs
ZWFzZV9jdXJwcm9jIChzdHJ1Y3QgcHJvYyAqY3VycCk7CnZvaWQJYWNxdWly
ZV9jdXJwcm9jIChzdHJ1Y3QgcHJvYyAqY3VycCk7CnZvaWQJc2VsZWN0X2N1
cnByb2Moc3RydWN0IGdsb2JhbGRhdGEgKik7CnZvaWQJY3B1X2hlYXZ5X3N3
aXRjaCAoc3RydWN0IHRocmVhZCAqKTsKdm9pZAljcHVfbHdrdF9zd2l0Y2gg
KHN0cnVjdCB0aHJlYWQgKik7CnZvaWQJdW5zbGVlcCAoc3RydWN0IHRocmVh
ZCAqKTsKCnZvaWQJY3B1X3Byb2NfZXhpdCAodm9pZCkgX19kZWFkMjsKdm9p
ZAljcHVfdGhyZWFkX2V4aXQgKHZvaWQpIF9fZGVhZDI7CnZvaWQJZXhpdDEg
KGludCkgX19kZWFkMjsKdm9pZAljcHVfZm9yayAoc3RydWN0IHByb2MgKiwg
c3RydWN0IHByb2MgKiwgaW50KTsKdm9pZAljcHVfc2V0X2ZvcmtfaGFuZGxl
ciAoc3RydWN0IHByb2MgKiwgdm9pZCAoKikodm9pZCAqKSwgdm9pZCAqKTsK
dm9pZAljcHVfc2V0X3RocmVhZF9oYW5kbGVyKHN0cnVjdCB0aHJlYWQgKnRk
LCB2b2lkICgqcmV0ZnVuYykodm9pZCksIHZvaWQgKmZ1bmMsIHZvaWQgKmFy
Zyk7CmludAlmb3JrMSAoc3RydWN0IHByb2MgKiwgaW50LCBzdHJ1Y3QgcHJv
YyAqKik7CnZvaWQJc3RhcnRfZm9ya2VkX3Byb2MgKHN0cnVjdCBwcm9jICos
IHN0cnVjdCBwcm9jICopOwppbnQJdHJhY2VfcmVxIChzdHJ1Y3QgcHJvYyAq
KTsKdm9pZAljcHVfcHJvY193YWl0IChzdHJ1Y3QgcHJvYyAqKTsKdm9pZAlj
cHVfdGhyZWFkX3dhaXQgKHN0cnVjdCB0aHJlYWQgKik7CmludAljcHVfY29y
ZWR1bXAgKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHZub2RlICosIHN0cnVj
dCB1Y3JlZCAqKTsKdm9pZAlzZXRzdWdpZCAodm9pZCk7CnZvaWQJZmF1bHRp
biAoc3RydWN0IHByb2MgKnApOwoKdV9pbnQzMl90CXByb2NydW5uYWJsZSAo
dm9pZCk7CgojZW5kaWYJLyogX0tFUk5FTCAqLwoKI2VuZGlmCS8qICFfU1lT
X1BST0NfSF8gKi8KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
--0-860233166-1110292844=:35430--
info
因文章內容過長,因此無法取得中間部份內容。您可以登入 https://term.ptt.cc/ 查看完整內容。
討論串 (同標題文章)