Received: from PACIFIC-CARRIER-ANNEX.MIT.EDU by po7.MIT.EDU (5.61/4.7) id AA06621; Mon, 30 Jan 95 11:12:21 EST
Received: from render.demon.co.uk by MIT.EDU with SMTP
	id AA05216; Mon, 30 Jan 95 11:08:53 EST
Received: (from dfr@localhost) by minnow.render.com (8.6.9/8.6.9) id QAA28111; Mon, 30 Jan 1995 16:10:07 GMT
Date: Mon, 30 Jan 1995 16:09:56 +0000 (GMT)
From: Doug Rabson <dfr@render.com>
To: pthreads@MIT.EDU
Subject: Patches for pthreads on FreeBSD-2.0
Message-Id: <Pine.BSF.3.91.950130160645.27708B-200000@minnow.render.com>
Mime-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="0-1056553425-791482196=:27708"

  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-1056553425-791482196=:27708
Content-Type: TEXT/PLAIN; charset=US-ASCII

I have ported pthreads-1_51_0 to FreeBSD (enough to run the tests, 
anyway).  I have not tried running anything non-trivial with the port 
though.

--
Doug Rabson, RenderMorphics Ltd.	Mail:  dfr@render.com
					Phone: +44 71 251 4411
					FAX:   +44 71 251 0939

--0-1056553425-791482196=:27708
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="pthreads.diffs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.3.91.950130160955.27708C@minnow.render.com>
Content-Description: Patches for pthreads-1_51_0 on FreeBSD-2.0

ZGlmZiAtY3JOIHB0aHJlYWRzL2NvbmZpZ3VyZSBwdGhyZWFkcy5uZXcvY29u
ZmlndXJlDQoqKiogcHRocmVhZHMvY29uZmlndXJlCVRodSBTZXAgMTUgMTc6
MjM6MDIgMTk5NA0KLS0tIHB0aHJlYWRzLm5ldy9jb25maWd1cmUJV2VkIERl
YyAxNCAxNzo1OTowMSAxOTk0DQoqKioqKioqKioqKioqKioNCioqKiA2Miw2
OSAqKioqDQogICAgICA7Ow0KICAjU1lTIGkzODYtZnJlZWJzZA0KICAgICAg
aVszLTVdODYtZnJlZWJzZCopDQohIAluYW1lPWkzODYtZnJlZWJzZC0xLjEN
CiEgCXN5c2luY2x1ZGVzPWZyZWVic2QtMS4xDQogIAk7Ow0KICAjU1lTIGkz
ODYtbmV0YnNkDQogICAgICBpWzMtNV04Ni1uZXRic2QqKQ0KLS0tIDYyLDcx
IC0tLS0NCiAgICAgIDs7DQogICNTWVMgaTM4Ni1mcmVlYnNkDQogICAgICBp
WzMtNV04Ni1mcmVlYnNkKikNCiEgIwluYW1lPWkzODYtZnJlZWJzZC0xLjEN
CiEgIwlzeXNpbmNsdWRlcz1mcmVlYnNkLTEuMQ0KISAJbmFtZT1pMzg2LWZy
ZWVic2QtMi4wDQohIAlzeXNpbmNsdWRlcz1mcmVlYnNkLTIuMA0KICAJOzsN
CiAgI1NZUyBpMzg2LW5ldGJzZA0KICAgICAgaVszLTVdODYtbmV0YnNkKikN
CmRpZmYgLWNyTiBwdGhyZWFkcy9tYWNoZGVwL2VuZ2luZS1pMzg2LWZyZWVi
c2QtMi4wLmMgcHRocmVhZHMubmV3L21hY2hkZXAvZW5naW5lLWkzODYtZnJl
ZWJzZC0yLjAuYw0KKioqIHB0aHJlYWRzL21hY2hkZXAvZW5naW5lLWkzODYt
ZnJlZWJzZC0yLjAuYwlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzANCi0tLSBw
dGhyZWFkcy5uZXcvbWFjaGRlcC9lbmdpbmUtaTM4Ni1mcmVlYnNkLTIuMC5j
CVdlZCBEZWMgMTQgMTg6MDg6MzIgMTk5NA0KKioqKioqKioqKioqKioqDQoq
KiogMCAqKioqDQotLS0gMSwxNzkgLS0tLQ0KKyAvKiA9PT09IG1hY2hkZXAu
YyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCisgICogQ29weXJpZ2h0IChjKSAxOTkzLCAx
OTk0IENocmlzIFByb3Zlbnphbm8sIHByb3ZlbkBhdGhlbmEubWl0LmVkdQ0K
KyAgKg0KKyAgKiBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgQ2hyaXMgUHJvdmVu
emFubywgcHJvdmVuQG1pdC5lZHUNCisgICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4NCisgICoNCisgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucw0KKyAgKiBhcmUgbWV0Og0KKyAgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodA0KKyAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQor
ICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUNCisgICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4NCisgICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u
aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQorICAqICAg
IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoN
CisgICogIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w
ZWQgYnkgQ2hyaXMgUHJvdmVuemFuby4NCisgICogNC4gVGhlIG5hbWUgb2Yg
Q2hyaXMgUHJvdmVuemFubyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlDQorICAqICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQor
ICAqICAgICAgcGVybWlzc2lvbi4NCisgICoNCisgICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBDSFJJUyBQUk9WRU5aQU5PIGBgQVMgSVMnJyBB
TkQNCisgICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQ0hSSVMgUFJPVkVOWkFOTyBCRSBMSUFC
TEUgRk9SIEFOWQ0KKyAgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
Uw0KKyAgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1INCisgICogU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVINCisgICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUDQorICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisgICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyAgKiBTVUNIIERBTUFHRS4N
CisgICoNCisgICogRGVzY3JpcHRpb24gOiBNYWNoaW5lIGRlcGVuZGVudCBm
dW5jdGlvbnMgZm9yIE5ldEJTRCBvbiBpMzg2DQorICAqDQorICAqCTEuMDAg
OTMvMDgvMDQgcHJvdmVuDQorICAqICAgICAgLVN0YXJ0ZWQgY29kaW5nIHRo
aXMgZmlsZS4NCisgICovDQorIA0KKyAjaWZuZGVmIGxpbnQNCisgc3RhdGlj
IGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJlbmdpbmUtaTM4Ni1mcmVlYnNkLTEu
MS5jLHYgMS4xIDE5OTQvMDkvMTUgMTU6NDE6MTMgcHJvdmVuIEV4cCI7DQor
ICNlbmRpZg0KKyANCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KKyAjaW5j
bHVkZSA8ZmNudGwuaD4NCisgI2luY2x1ZGUgPHN0ZGlvLmg+DQorICNpbmNs
dWRlICJwdGhyZWFkLmgiDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3NhdmVfc3RhdGUoKQ0KKyAgKi8N
CisgaW50IG1hY2hkZXBfc2F2ZV9zdGF0ZSh2b2lkKQ0KKyB7DQorICAgICBy
ZXR1cm4oX3NldGptcChwdGhyZWFkX3J1bi0+bWFjaGRlcF9kYXRhLm1hY2hk
ZXBfc3RhdGUpKTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCisgICogbWFjaGRlcF9yZXN0b3JlX3N0YXRlKCkNCisg
ICovDQorIHZvaWQgbWFjaGRlcF9yZXN0b3JlX3N0YXRlKHZvaWQpDQorIHsN
CisgICAgIF9sb25nam1wKHB0aHJlYWRfcnVuLT5tYWNoZGVwX2RhdGEubWFj
aGRlcF9zdGF0ZSwgMSk7DQorIH0NCisgDQorIC8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc2V0X3RocmVhZF90aW1l
cigpDQorICAqLw0KKyB2b2lkIG1hY2hkZXBfc2V0X3RocmVhZF90aW1lcihz
dHJ1Y3QgbWFjaGRlcF9wdGhyZWFkICptYWNoZGVwX3B0aHJlYWQpDQorIHsN
CisgICAgIGlmIChzZXRpdGltZXIoSVRJTUVSX1ZJUlRVQUwsICYobWFjaGRl
cF9wdGhyZWFkLT5tYWNoZGVwX3RpbWVyKSwgTlVMTCkpIHsNCisgICAgICAg
ICBQQU5JQygpOw0KKyAgICAgfQ0KKyB9DQorIA0KKyAvKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3Vuc2V0X3RocmVh
ZF90aW1lcigpDQorICAqLw0KKyB2b2lkIG1hY2hkZXBfdW5zZXRfdGhyZWFk
X3RpbWVyKHN0cnVjdCBtYWNoZGVwX3B0aHJlYWQgKm1hY2hkZXBfcHRocmVh
ZCkNCisgew0KKyAgICAgc3RydWN0IGl0aW1lcnZhbCB6ZXJvdmFsID0geyB7
IDAsIDAgfSwgeyAwLCAwfSB9Ow0KKyANCisgICAgIGlmIChzZXRpdGltZXIo
SVRJTUVSX1ZJUlRVQUwsICZ6ZXJvdmFsLCBOVUxMKSkgew0KKyAgICAgICAg
IFBBTklDKCk7DQorICAgICB9DQorIH0NCisgDQorIC8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfcHRocmVhZF9jbGVh
bnVwKCkNCisgICovDQorIHZvaWQgKm1hY2hkZXBfcHRocmVhZF9jbGVhbnVw
KHN0cnVjdCBtYWNoZGVwX3B0aHJlYWQgKm1hY2hkZXBfcHRocmVhZCkNCisg
ew0KKyAgICAgcmV0dXJuKG1hY2hkZXBfcHRocmVhZC0+bWFjaGRlcF9zdGFj
ayk7DQorIH0NCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQorICAqIG1hY2hkZXBfcHRocmVhZF9zdGFydCgpDQorICAqLw0KKyB2
b2lkIG1hY2hkZXBfcHRocmVhZF9zdGFydCh2b2lkKQ0KKyB7DQorIAljb250
ZXh0X3N3aXRjaF9kb25lKCk7DQorIAlzaWdfY2hlY2tfYW5kX3Jlc3VtZSgp
Ow0KKyANCisgICAgIC8qIFJ1biBjdXJyZW50IHRocmVhZHMgc3RhcnQgcm91
dGluZSB3aXRoIGFyZ3VtZW50ICovDQorICAgICBwdGhyZWFkX2V4aXQocHRo
cmVhZF9ydW4tPm1hY2hkZXBfZGF0YS5zdGFydF9yb3V0aW5lDQorICAgICAg
IChwdGhyZWFkX3J1bi0+bWFjaGRlcF9kYXRhLnN0YXJ0X2FyZ3VtZW50KSk7
DQorIA0KKyAgICAgLyogc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8NCisg
ICAgIFBBTklDKCk7DQorIH0NCisgDQorIC8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfcHRocmVhZF9jcmVhdGUoKQ0K
KyAgKi8NCisgdm9pZCBtYWNoZGVwX3B0aHJlYWRfY3JlYXRlKHN0cnVjdCBt
YWNoZGVwX3B0aHJlYWQgKm1hY2hkZXBfcHRocmVhZCwNCisgICB2b2lkICoo
KiBzdGFydF9yb3V0aW5lKSgpLCB2b2lkICpzdGFydF9hcmd1bWVudCwgbG9u
ZyBzdGFja19zaXplLA0KKyAgIHZvaWQgKnN0YWNrX3N0YXJ0LCBsb25nIG5z
ZWMpDQorIHsNCisgICAgIG1hY2hkZXBfcHRocmVhZC0+bWFjaGRlcF9zdGFj
ayA9IHN0YWNrX3N0YXJ0Ow0KKyANCisgICAgIG1hY2hkZXBfcHRocmVhZC0+
c3RhcnRfcm91dGluZSA9IHN0YXJ0X3JvdXRpbmU7DQorICAgICBtYWNoZGVw
X3B0aHJlYWQtPnN0YXJ0X2FyZ3VtZW50ID0gc3RhcnRfYXJndW1lbnQ7DQor
IA0KKyAgICAgbWFjaGRlcF9wdGhyZWFkLT5tYWNoZGVwX3RpbWVyLml0X3Zh
bHVlLnR2X3NlYyA9IDA7DQorICAgICBtYWNoZGVwX3B0aHJlYWQtPm1hY2hk
ZXBfdGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsNCisgICAgIG1hY2hk
ZXBfcHRocmVhZC0+bWFjaGRlcF90aW1lci5pdF9pbnRlcnZhbC50dl91c2Vj
ID0gMDsNCisgICAgIG1hY2hkZXBfcHRocmVhZC0+bWFjaGRlcF90aW1lci5p
dF92YWx1ZS50dl91c2VjID0gbnNlYyAvIDEwMDA7DQorIA0KKyAgICAgX3Nl
dGptcChtYWNoZGVwX3B0aHJlYWQtPm1hY2hkZXBfc3RhdGUpOw0KKyAgICAg
LyoNCisgICAgICAqIFNldCB1cCBuZXcgc3RhY3QgZnJhbWUgc28gdGhhdCBp
dCBsb29rcyBsaWtlIGl0DQorICAgICAgKiByZXR1cm5lZCBmcm9tIGEgbG9u
Z2ptcCgpIHRvIHRoZSBiZWdpbm5pbmcgb2YNCisgICAgICAqIG1hY2hkZXBf
cHRocmVhZF9zdGFydCgpLg0KKyAgICAgICovDQorICAgICBtYWNoZGVwX3B0
aHJlYWQtPm1hY2hkZXBfc3RhdGUtPl9qYlswXSA9IChpbnQpbWFjaGRlcF9w
dGhyZWFkX3N0YXJ0Ow0KKyANCisgICAgIC8qIFN0YWNrIHN0YXJ0cyBoaWdo
IGFuZCBidWlsZHMgZG93bi4gKi8NCisgICAgIG1hY2hkZXBfcHRocmVhZC0+
bWFjaGRlcF9zdGF0ZS0+X2piWzJdID0NCisgICAgICAgKGludCltYWNoZGVw
X3B0aHJlYWQtPm1hY2hkZXBfc3RhY2sgKyBzdGFja19zaXplOw0KKyB9DQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBt
YWNoZGVwX3N5c19jcmVhdCgpDQorICAqLw0KKyBtYWNoZGVwX3N5c19jcmVh
dChjaGFyICogcGF0aCwgaW50IG1vZGUpDQorIHsNCisgICAgICAgICByZXR1
cm4obWFjaGRlcF9zeXNfb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQg
fCBPX1RSVU5DLCBtb2RlKSk7DQorIH0NCisgIA0KKyAvKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3N5c193YWl0Mygp
IA0KKyAgKi8NCisgbWFjaGRlcF9zeXNfd2FpdDMoaW50ICogYiwgaW50IGMs
IGludCAqIGQpDQorIHsNCisgICAgICAgICByZXR1cm4obWFjaGRlcF9zeXNf
d2FpdDQoMCwgYiwgYywgZCkpOw0KKyB9DQorICANCisgLyogPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNfd2FpdHBp
ZCgpDQorICAqLw0KKyBtYWNoZGVwX3N5c193YWl0cGlkKGludCBhLCBpbnQg
KiBiLCBpbnQgYykNCisgew0KKyAgICAgICAgIHJldHVybihtYWNoZGVwX3N5
c193YWl0NChhLCBiLCBjLCBOVUxMKSk7DQorIH0gIA0KKyANCisgLyogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNf
c2VuZCgpDQorICAqLw0KKyBtYWNoZGVwX3N5c19zZW5kKGludCBzLCBjb25z
dCB2b2lkICpidWYsIGludCBsZW4sIGludCBmbGFncykNCisgew0KKyAJcmV0
dXJuKG1hY2hkZXBfc3lzX3NlbmR0byhzLCBidWYsIGxlbiwgZmxhZ3MsIE5V
TEwsIDApKTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNfcmVjdigpDQorICAqLw0KKyBt
YWNoZGVwX3N5c19yZWN2KGludCBzLCB2b2lkICpidWYsIGludCBsZW4sIGlu
dCBmbGFncykNCisgew0KKyAJcmV0dXJuKG1hY2hkZXBfc3lzX3JlY3Zmcm9t
KHMsIGJ1ZiwgbGVuLCBmbGFncywgTlVMTCwgMCkpOw0KKyB9DQpkaWZmIC1j
ck4gcHRocmVhZHMvbWFjaGRlcC9lbmdpbmUtaTM4Ni1mcmVlYnNkLTIuMC5o
IHB0aHJlYWRzLm5ldy9tYWNoZGVwL2VuZ2luZS1pMzg2LWZyZWVic2QtMi4w
LmgNCioqKiBwdGhyZWFkcy9tYWNoZGVwL2VuZ2luZS1pMzg2LWZyZWVic2Qt
Mi4wLmgJVGh1IEphbiAgMSAwMTowMDowMCAxOTcwDQotLS0gcHRocmVhZHMu
bmV3L21hY2hkZXAvZW5naW5lLWkzODYtZnJlZWJzZC0yLjAuaAlXZWQgRGVj
IDE0IDE3OjU2OjU4IDE5OTQNCioqKioqKioqKioqKioqKg0KKioqIDAgKioq
Kg0KLS0tIDEsODMgLS0tLQ0KKyAvKiA9PT09IG1hY2hkZXAuaCA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCisgICogQ29weXJpZ2h0IChjKSAxOTkzIENocmlzIFByb3Zl
bnphbm8sIHByb3ZlbkBhdGhlbmEubWl0LmVkdQ0KKyAgKg0KKyAgKiBlbmdp
bmUtaTM4Ni1mcmVlYnNkLTEuMS5oLHYgMS4xLjIuMSAxOTk0LzEwLzIxIDAx
OjIwOjExIHByb3ZlbiBFeHANCisgICoNCisgICovDQorIA0KKyAjaW5jbHVk
ZSA8dW5pc3RkLmg+DQorICNpbmNsdWRlIDxzZXRqbXAuaD4NCisgI2luY2x1
ZGUgPHN5cy90aW1lLmg+DQorIA0KKyAvKg0KKyAgKiBUaGUgZmlyc3QgbWFj
aGluZSBkZXBlbmRlbnQgZnVuY3Rpb25zIGFyZSB0aGUgU0VNQVBIT1JFUw0K
KyAgKiBuZWVkaW5nIHRoZSB0ZXN0IGFuZCBzZXQgaW5zdHJ1Y3Rpb24uDQor
ICAqLw0KKyAjZGVmaW5lIFNFTUFQSE9SRV9DTEVBUiAwDQorICNkZWZpbmUg
U0VNQVBIT1JFX1NFVCAgIDENCisgDQorICNkZWZpbmUgU0VNQVBIT1JFX1RF
U1RfQU5EX1NFVChsb2NrKSAgICBcDQorICh7CQkJCQkJCQkJCVwNCisgbG9u
ZyB0ZW1wID0gU0VNQVBIT1JFX1NFVDsgICAgICAgICAgICAgIFwNCisgCQkJ
CQkJCQkJCVwNCisgX19hc21fXyB2b2xhdGlsZSAoInhjaGdsICUwLCglMiki
ICAgICAgIFwNCisgICAgICAgICA6Ij1yIiAodGVtcCkgICAgICAgICAgICAg
ICAgICAgIFwNCisgICAgICAgICA6IjAiICh0ZW1wKSwiciIgKGxvY2spKTsg
ICAgICAgIFwNCisgdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCisgfSkNCisgDQorICNkZWZpbmUgU0VNQVBIT1JFX1JFU0VU
KGxvY2spICAgICAgICAgICAqbG9jayA9IFNFTUFQSE9SRV9DTEVBUg0KKyAN
CisgLyoNCisgICogTmV3IHR5cGVzDQorICAqLw0KKyB0eXBlZGVmIGxvbmcg
ICAgc2VtYXBob3JlOw0KKyANCisgLyoNCisgICogc2lnc2V0X3QgbWFjcm9z
DQorICAqLw0KKyAjZGVmaW5lCVNJR19BTlkoc2lnKQkJKHNpZykNCisgI2Rl
ZmluZSBTSUdNQVgJCQkJMzENCisgDQorIC8qDQorICAqIE5ldyBTdHJ1dHVy
ZXMNCisgICovDQorIHN0cnVjdCBtYWNoZGVwX3B0aHJlYWQgew0KKyAgICAg
dm9pZCAgICAgICAgCQkqKCpzdGFydF9yb3V0aW5lKSh2b2lkICopOw0KKyAg
ICAgdm9pZCAgICAgICAgCQkqc3RhcnRfYXJndW1lbnQ7DQorICAgICB2b2lk
ICAgICAgICAJCSptYWNoZGVwX3N0YWNrOw0KKyAJc3RydWN0IGl0aW1lcnZh
bAltYWNoZGVwX3RpbWVyOw0KKyAgICAgam1wX2J1ZiAgICAgCQltYWNoZGVw
X3N0YXRlOw0KKyB9Ow0KKyANCisgLyoNCisgICogU3RhdGljIG1hY2hkZXBf
cHRocmVhZCBpbml0aWFsaXphdGlvbiB2YWx1ZXMuDQorICAqIEZvciBpbml0
aWFsIHRocmVhZCBvbmx5Lg0KKyAgKi8NCisgI2RlZmluZSBNQUNIREVQX1BU
SFJFQURfSU5JVCAgICBcDQorIHsgTlVMTCwgTlVMTCwgTlVMTCwgeyB7IDAs
IDAgfSwgeyAwLCAxMDAwMDAgfSB9LCAwIH0NCisgDQorIC8qDQorICAqIE1p
bmltdW0gc3RhY2sgc2l6ZQ0KKyAgKi8NCisgI2RlZmluZSBQVEhSRUFEX1NU
QUNLX01JTgkxMDI0DQorIA0KKyAvKg0KKyAgKiBTb21lIGZkIGZsYWcgZGVm
aW5lcyB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggYmV0d2Vl
biBwb3NpeA0KKyAgKiBiZWhhdmlvciBhbmQgYnNkNC4zIGJlaGF2aW9yLg0K
KyAgKi8NCisgI2RlZmluZSBfX0ZEX05PTkJMT0NLIAkJT19OT05CTE9DSw0K
KyANCisgLyoNCisgICogTmV3IGZ1bmN0aW9ucw0KKyAgKi8NCisgDQorIF9f
QkVHSU5fREVDTFMNCisgDQorICNpZiBkZWZpbmVkKFBUSFJFQURfS0VSTkVM
KQ0KKyANCisgaW50IG1hY2hkZXBfc2F2ZV9zdGF0ZSAgICAgIF9fUCgodm9p
ZCkpOw0KKyANCisgI2VuZGlmDQorIA0KKyBfX0VORF9ERUNMUw0KZGlmZiAt
Y3JOIHB0aHJlYWRzL21hY2hkZXAvZnJlZWJzZC0yLjAvY29tcGF0LmggcHRo
cmVhZHMubmV3L21hY2hkZXAvZnJlZWJzZC0yLjAvY29tcGF0LmgNCioqKiBw
dGhyZWFkcy9tYWNoZGVwL2ZyZWVic2QtMi4wL2NvbXBhdC5oCVRodSBKYW4g
IDEgMDE6MDA6MDAgMTk3MA0KLS0tIHB0aHJlYWRzLm5ldy9tYWNoZGVwL2Zy
ZWVic2QtMi4wL2NvbXBhdC5oCVdlZCBEZWMgMTQgMTc6NTU6MjcgMTk5NA0K
KioqKioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSw0MyAtLS0tDQor
IC8qID09PT0gY29tcGF0LmggPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIENvcHly
aWdodCAoYykgMTk5NCBieSBDaHJpcyBQcm92ZW56YW5vLCBwcm92ZW5AbWl0
LmVkdQ0KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgKg0KKyAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zDQorICAqIGFyZSBtZXQ6DQorICAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQorICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQNCisgICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0K
KyAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KKyAgKiAzLiBBbGwg
YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig
dXNlIG9mIHRoaXMgc29mdHdhcmUNCisgICogICAgbXVzdCBkaXNwbGF5IHRo
ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KKyAgKiAgVGhpcyBwcm9k
dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBDaHJpcyBQcm92
ZW56YW5vLg0KKyAgKiA0LiBUaGUgbmFtZSBvZiBDaHJpcyBQcm92ZW56YW5v
IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgDQorICAq
CSAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQorICAqCSAgcGVybWlzc2lvbi4N
CisgICoNCisgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDSFJJ
UyBQUk9WRU5aQU5PIGBgQVMgSVMnJyBBTkQNCisgICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFDQorICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFDQorICAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
Q0hSSVMgUFJPVkVOWkFOTyBCRSBMSUFCTEUgRk9SIEFOWSANCisgICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisgICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIA0KKyAgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
Ug0KKyAgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgDQorICAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkNCisgICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiANCisgICogU1VDSCBEQU1BR0UuDQorICAqDQorICAqIGNvbXBh
dC5oLHYgMS4xIDE5OTQvMDkvMTUgMTU6NDI6MzggcHJvdmVuIEV4cA0KKyAg
Kg0KKyAgKiBEZXNjcmlwdGlvbiA6IENPbXBhdCBoZWFkZXIgdG8gbWFrZSBz
b2NrZXQgY29kZSBjb21waWxlLg0KKyAgKg0KKyAgKiAgMS4wMCA5NC8wOC8w
MSBwcm92ZW4NCisgICogICAgICAtU3RhcnRlZCBjb2RpbmcgdGhpcyBmaWxl
Lg0KKyAgKi8NCisgIA0KKyAjaWZuZGVmIF9TWVNfQ09NUEFUX0hfDQorICNk
ZWZpbmUJX1NZU19DT01QQVRfSF8NCisgDQorICNlbmRpZg0KZGlmZiAtY3JO
IHB0aHJlYWRzL21hY2hkZXAvZnJlZWJzZC0yLjAvZGlyZW50LmggcHRocmVh
ZHMubmV3L21hY2hkZXAvZnJlZWJzZC0yLjAvZGlyZW50LmgNCioqKiBwdGhy
ZWFkcy9tYWNoZGVwL2ZyZWVic2QtMi4wL2RpcmVudC5oCVRodSBKYW4gIDEg
MDE6MDA6MDAgMTk3MA0KLS0tIHB0aHJlYWRzLm5ldy9tYWNoZGVwL2ZyZWVi
c2QtMi4wL2RpcmVudC5oCVdlZCBEZWMgMTQgMTc6NTU6MjcgMTk5NA0KKioq
KioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSw2NCAtLS0tDQorIC8q
LQ0KKyAgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhl
IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisgICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCisgICoNCisgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQor
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyAgKiBhcmUgbWV0Og0KKyAg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuDQorICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUNCisgICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4NCisgICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt
ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQor
ICAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl
bWVudDoNCisgICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl
dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZg0KKyAgKglDYWxpZm9ybmlh
LCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4NCisgICogNC4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMNCisgICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlDQorICAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLg0KKyAgKg0KKyAgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORA0KKyAgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisg
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICogQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFDQorICAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMDQorICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
DQorICAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KKyAgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KKyAgKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZDQorICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YN
CisgICogU1VDSCBEQU1BR0UuDQorICAqDQorICAqCUAoIylkaXJlbnQuaAk1
LjE4IChCZXJrZWxleSkgMi8yMy85MQ0KKyAgKi8NCisgDQorICNpZm5kZWYg
X1NZU19ESVJFTlRfSF8NCisgI2RlZmluZSBfU1lTX0RJUkVOVF9IXw0KKyAN
CisgLyoNCisgICogQSBkaXJlY3RvcnkgZW50cnkgaGFzIGEgc3RydWN0IGRp
cmVudCBhdCB0aGUgZnJvbnQgb2YgaXQsIGNvbnRhaW5pbmcgaXRzDQorICAq
IGlub2RlIG51bWJlciwgdGhlIGxlbmd0aCBvZiB0aGUgZW50cnksIGFuZCB0
aGUgbGVuZ3RoIG9mIHRoZSBuYW1lDQorICAqIGNvbnRhaW5lZCBpbiB0aGUg
ZW50cnkuICBUaGVzZSBhcmUgZm9sbG93ZWQgYnkgdGhlIG5hbWUgcGFkZGVk
IHRvIGEgNA0KKyAgKiBieXRlIGJvdW5kYXJ5IHdpdGggbnVsbCBieXRlcy4g
IEFsbCBuYW1lcyBhcmUgZ3VhcmFudGVlZCBudWxsIHRlcm1pbmF0ZWQuDQor
ICAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIG5hbWUgaW4gYSBkaXJlY3Rv
cnkgaXMgTUFYTkFNTEVOLg0KKyAgKi8NCisgDQorIHN0cnVjdCBkaXJlbnQg
ew0KKyAJdV9sb25nCWRfZmlsZW5vOwkJLyogZmlsZSBudW1iZXIgb2YgZW50
cnkgKi8NCisgCXVfc2hvcnQJZF9yZWNsZW47CQkvKiBsZW5ndGggb2YgdGhp
cyByZWNvcmQgKi8NCisgCXVfc2hvcnQJZF9uYW1sZW47CQkvKiBsZW5ndGgg
b2Ygc3RyaW5nIGluIGRfbmFtZSAqLw0KKyAjaWZkZWYgX1BPU0lYX1NPVVJD
RQ0KKyAJY2hhcglkX25hbWVbMjU1ICsgMV07CS8qIG5hbWUgbXVzdCBiZSBu
byBsb25nZXIgdGhhbiB0aGlzICovDQorICNlbHNlDQorICNkZWZpbmUJTUFY
TkFNTEVOCTI1NQ0KKyAJY2hhcglkX25hbWVbTUFYTkFNTEVOICsgMV07CS8q
IG5hbWUgbXVzdCBiZSBubyBsb25nZXIgdGhhbiB0aGlzICovDQorICNlbmRp
Zg0KKyB9Ow0KKyANCisgI2RlZmluZQlkX2lubwkJZF9maWxlbm8JLyogYmFj
a3dhcmQgY29tcGF0aWJpbGl0eSAqLw0KKyANCisgLyogZGVmaW5pdGlvbnMg
Zm9yIGxpYnJhcnkgcm91dGluZXMgb3BlcmF0aW5nIG9uIGRpcmVjdG9yaWVz
LiAqLw0KKyAjZGVmaW5lCURJUkJMS1NJWgkxMDI0DQorIA0KKyAjZW5kaWYg
LyogIV9ESVJFTlRfSF8gKi8NCmRpZmYgLWNyTiBwdGhyZWFkcy9tYWNoZGVw
L2ZyZWVic2QtMi4wL3NvY2tldC5oIHB0aHJlYWRzLm5ldy9tYWNoZGVwL2Zy
ZWVic2QtMi4wL3NvY2tldC5oDQoqKiogcHRocmVhZHMvbWFjaGRlcC9mcmVl
YnNkLTIuMC9zb2NrZXQuaAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzANCi0t
LSBwdGhyZWFkcy5uZXcvbWFjaGRlcC9mcmVlYnNkLTIuMC9zb2NrZXQuaAlX
ZWQgRGVjIDE0IDE3OjU1OjI3IDE5OTQNCioqKioqKioqKioqKioqKg0KKioq
IDAgKioqKg0KLS0tIDEsMjY3IC0tLS0NCisgLyoNCisgICogQ29weXJpZ2h0
IChjKSAxOTgyLDE5ODUsMTk4NiwxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZl
cnNpdHkgb2YgQ2FsaWZvcm5pYS4NCisgICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4NCisgICoNCisgICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucw0KKyAgKiBhcmUgbWV0Og0KKyAgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodA0KKyAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQor
ICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUNCisgICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4NCisgICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u
aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlDQorICAqICAg
IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoN
CisgICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl
ZCBieSB0aGUgVW5pdmVyc2l0eSBvZg0KKyAgKglDYWxpZm9ybmlhLCBCZXJr
ZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4NCisgICogNC4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMNCisgICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlDQorICAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLg0KKyAgKg0KKyAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORA0KKyAgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCisgICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFDQorICAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMDQorICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQorICAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KKyAgKiBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVA0KKyAgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZDQorICAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCisgICog
U1VDSCBEQU1BR0UuDQorICAqDQorICAqCWZyb206IEAoIylzb2NrZXQuaAk3
LjEzIChCZXJrZWxleSkgNC8yMC85MQ0KKyAgKglzb2NrZXQuaCx2IDEuMSAx
OTk0LzA5LzE1IDE1OjQyOjUzIHByb3ZlbiBFeHANCisgICovDQorIA0KKyAj
aWZuZGVmIF9TWVNfU09DS0VUX0hfDQorICNkZWZpbmUgX1NZU19TT0NLRVRf
SF8gMQ0KKyANCisgLyoNCisgICogRGVmaW5pdGlvbnMgcmVsYXRlZCB0byBz
b2NrZXRzOiB0eXBlcywgYWRkcmVzcyBmYW1pbGllcywgb3B0aW9ucy4NCisg
ICovDQorIA0KKyAvKg0KKyAgKiBUeXBlcw0KKyAgKi8NCisgI2RlZmluZQlT
T0NLX1NUUkVBTQkxCQkvKiBzdHJlYW0gc29ja2V0ICovDQorICNkZWZpbmUJ
U09DS19ER1JBTQkyCQkvKiBkYXRhZ3JhbSBzb2NrZXQgKi8NCisgI2RlZmlu
ZQlTT0NLX1JBVwkzCQkvKiByYXctcHJvdG9jb2wgaW50ZXJmYWNlICovDQor
ICNkZWZpbmUJU09DS19SRE0JNAkJLyogcmVsaWFibHktZGVsaXZlcmVkIG1l
c3NhZ2UgKi8NCisgI2RlZmluZQlTT0NLX1NFUVBBQ0tFVAk1CQkvKiBzZXF1
ZW5jZWQgcGFja2V0IHN0cmVhbSAqLw0KKyANCisgLyoNCisgICogT3B0aW9u
IGZsYWdzIHBlci1zb2NrZXQuDQorICAqLw0KKyAjZGVmaW5lCVNPX0RFQlVH
CTB4MDAwMQkJLyogdHVybiBvbiBkZWJ1Z2dpbmcgaW5mbyByZWNvcmRpbmcg
Ki8NCisgI2RlZmluZQlTT19BQ0NFUFRDT05OCTB4MDAwMgkJLyogc29ja2V0
IGhhcyBoYWQgbGlzdGVuKCkgKi8NCisgI2RlZmluZQlTT19SRVVTRUFERFIJ
MHgwMDA0CQkvKiBhbGxvdyBsb2NhbCBhZGRyZXNzIHJldXNlICovDQorICNk
ZWZpbmUJU09fS0VFUEFMSVZFCTB4MDAwOAkJLyoga2VlcCBjb25uZWN0aW9u
cyBhbGl2ZSAqLw0KKyAjZGVmaW5lCVNPX0RPTlRST1VURQkweDAwMTAJCS8q
IGp1c3QgdXNlIGludGVyZmFjZSBhZGRyZXNzZXMgKi8NCisgI2RlZmluZQlT
T19CUk9BRENBU1QJMHgwMDIwCQkvKiBwZXJtaXQgc2VuZGluZyBvZiBicm9h
ZGNhc3QgbXNncyAqLw0KKyAjZGVmaW5lCVNPX1VTRUxPT1BCQUNLCTB4MDA0
MAkJLyogYnlwYXNzIGhhcmR3YXJlIHdoZW4gcG9zc2libGUgKi8NCisgI2Rl
ZmluZQlTT19MSU5HRVIJMHgwMDgwCQkvKiBsaW5nZXIgb24gY2xvc2UgaWYg
ZGF0YSBwcmVzZW50ICovDQorICNkZWZpbmUJU09fT09CSU5MSU5FCTB4MDEw
MAkJLyogbGVhdmUgcmVjZWl2ZWQgT09CIGRhdGEgaW4gbGluZSAqLw0KKyAN
CisgLyoNCisgICogQWRkaXRpb25hbCBvcHRpb25zLCBub3Qga2VwdCBpbiBz
b19vcHRpb25zLg0KKyAgKi8NCisgI2RlZmluZSBTT19TTkRCVUYJMHgxMDAx
CQkvKiBzZW5kIGJ1ZmZlciBzaXplICovDQorICNkZWZpbmUgU09fUkNWQlVG
CTB4MTAwMgkJLyogcmVjZWl2ZSBidWZmZXIgc2l6ZSAqLw0KKyAjZGVmaW5l
IFNPX1NORExPV0FUCTB4MTAwMwkJLyogc2VuZCBsb3ctd2F0ZXIgbWFyayAq
Lw0KKyAjZGVmaW5lIFNPX1JDVkxPV0FUCTB4MTAwNAkJLyogcmVjZWl2ZSBs
b3ctd2F0ZXIgbWFyayAqLw0KKyAjZGVmaW5lIFNPX1NORFRJTUVPCTB4MTAw
NQkJLyogc2VuZCB0aW1lb3V0ICovDQorICNkZWZpbmUgU09fUkNWVElNRU8J
MHgxMDA2CQkvKiByZWNlaXZlIHRpbWVvdXQgKi8NCisgI2RlZmluZQlTT19F
UlJPUgkweDEwMDcJCS8qIGdldCBlcnJvciBzdGF0dXMgYW5kIGNsZWFyICov
DQorICNkZWZpbmUJU09fVFlQRQkJMHgxMDA4CQkvKiBnZXQgc29ja2V0IHR5
cGUgKi8NCisgDQorIC8qDQorICAqIFN0cnVjdHVyZSB1c2VkIGZvciBtYW5p
cHVsYXRpbmcgbGluZ2VyIG9wdGlvbi4NCisgICovDQorIHN0cnVjdAlsaW5n
ZXIgew0KKyAJaW50CWxfb25vZmY7CQkvKiBvcHRpb24gb24vb2ZmICovDQor
IAlpbnQJbF9saW5nZXI7CQkvKiBsaW5nZXIgdGltZSAqLw0KKyB9Ow0KKyAN
CisgLyoNCisgICogTGV2ZWwgbnVtYmVyIGZvciAoZ2V0L3NldClzb2Nrb3B0
KCkgdG8gYXBwbHkgdG8gc29ja2V0IGl0c2VsZi4NCisgICovDQorICNkZWZp
bmUJU09MX1NPQ0tFVAkweGZmZmYJCS8qIG9wdGlvbnMgZm9yIHNvY2tldCBs
ZXZlbCAqLw0KKyANCisgLyoNCisgICogQWRkcmVzcyBmYW1pbGllcy4NCisg
ICovDQorICNkZWZpbmUJQUZfVU5TUEVDCTAJCS8qIHVuc3BlY2lmaWVkICov
DQorICNkZWZpbmUJQUZfVU5JWAkJMQkJLyogbG9jYWwgdG8gaG9zdCAocGlw
ZXMsIHBvcnRhbHMpICovDQorICNkZWZpbmUJQUZfSU5FVAkJMgkJLyogaW50
ZXJuZXR3b3JrOiBVRFAsIFRDUCwgZXRjLiAqLw0KKyAjZGVmaW5lCUFGX0lN
UExJTksJMwkJLyogYXJwYW5ldCBpbXAgYWRkcmVzc2VzICovDQorICNkZWZp
bmUJQUZfUFVQCQk0CQkvKiBwdXAgcHJvdG9jb2xzOiBlLmcuIEJTUCAqLw0K
KyAjZGVmaW5lCUFGX0NIQU9TCTUJCS8qIG1pdCBDSEFPUyBwcm90b2NvbHMg
Ki8NCisgI2RlZmluZQlBRl9OUwkJNgkJLyogWEVST1ggTlMgcHJvdG9jb2xz
ICovDQorICNkZWZpbmUJQUZfSVNPCQk3CQkvKiBJU08gcHJvdG9jb2xzICov
DQorICNkZWZpbmUJQUZfT1NJCQlBRl9JU08NCisgI2RlZmluZQlBRl9FQ01B
CQk4CQkvKiBldXJvcGVhbiBjb21wdXRlciBtYW51ZmFjdHVyZXJzICovDQor
ICNkZWZpbmUJQUZfREFUQUtJVAk5CQkvKiBkYXRha2l0IHByb3RvY29scyAq
Lw0KKyAjZGVmaW5lCUFGX0NDSVRUCTEwCQkvKiBDQ0lUVCBwcm90b2NvbHMs
IFguMjUgZXRjICovDQorICNkZWZpbmUJQUZfU05BCQkxMQkJLyogSUJNIFNO
QSAqLw0KKyAjZGVmaW5lIEFGX0RFQ25ldAkxMgkJLyogREVDbmV0ICovDQor
ICNkZWZpbmUgQUZfRExJCQkxMwkJLyogREVDIERpcmVjdCBkYXRhIGxpbmsg
aW50ZXJmYWNlICovDQorICNkZWZpbmUgQUZfTEFUCQkxNAkJLyogTEFUICov
DQorICNkZWZpbmUJQUZfSFlMSU5LCTE1CQkvKiBOU0MgSHlwZXJjaGFubmVs
ICovDQorICNkZWZpbmUJQUZfQVBQTEVUQUxLCTE2CQkvKiBBcHBsZSBUYWxr
ICovDQorICNkZWZpbmUJQUZfUk9VVEUJMTcJCS8qIEludGVybmFsIFJvdXRp
bmcgUHJvdG9jb2wgKi8NCisgI2RlZmluZQlBRl9MSU5LCQkxOAkJLyogTGlu
ayBsYXllciBpbnRlcmZhY2UgKi8NCisgI2RlZmluZQlwc2V1ZG9fQUZfWFRQ
CTE5CQkvKiBlWHByZXNzIFRyYW5zZmVyIFByb3RvY29sIChubyBBRikgKi8N
CisgI2RlZmluZSBBRl9STVAJCTIwCQkvKiBIUCdzIFJlbW90ZSBNYWludCBQ
cm90b2NvbCAqLw0KKyAjZGVmaW5lCUFGX01BWAkJMjENCisgDQorIC8qDQor
ICAqIFN0cnVjdHVyZSB1c2VkIGJ5IGtlcm5lbCB0byBzdG9yZSBtb3N0DQor
ICAqIGFkZHJlc3Nlcy4NCisgICovDQorIHN0cnVjdCBzb2NrYWRkciB7DQor
IAl1X2NoYXIJc2FfbGVuOwkJCS8qIHRvdGFsIGxlbmd0aCAqLw0KKyAJdV9j
aGFyCXNhX2ZhbWlseTsJCS8qIGFkZHJlc3MgZmFtaWx5ICovDQorIAljaGFy
CXNhX2RhdGFbMTRdOwkJLyogYWN0dWFsbHkgbG9uZ2VyOyBhZGRyZXNzIHZh
bHVlICovDQorIH07DQorIA0KKyAvKg0KKyAgKiBTdHJ1Y3R1cmUgdXNlZCBi
eSBrZXJuZWwgdG8gcGFzcyBwcm90b2NvbA0KKyAgKiBpbmZvcm1hdGlvbiBp
biByYXcgc29ja2V0cy4NCisgICovDQorIHN0cnVjdCBzb2NrcHJvdG8gew0K
KyAJdV9zaG9ydAlzcF9mYW1pbHk7CQkvKiBhZGRyZXNzIGZhbWlseSAqLw0K
KyAJdV9zaG9ydAlzcF9wcm90b2NvbDsJCS8qIHByb3RvY29sICovDQorIH07
DQorIA0KKyAvKg0KKyAgKiBQcm90b2NvbCBmYW1pbGllcywgc2FtZSBhcyBh
ZGRyZXNzIGZhbWlsaWVzIGZvciBub3cuDQorICAqLw0KKyAjZGVmaW5lCVBG
X1VOU1BFQwlBRl9VTlNQRUMNCisgI2RlZmluZQlQRl9VTklYCQlBRl9VTklY
DQorICNkZWZpbmUJUEZfSU5FVAkJQUZfSU5FVA0KKyAjZGVmaW5lCVBGX0lN
UExJTksJQUZfSU1QTElOSw0KKyAjZGVmaW5lCVBGX1BVUAkJQUZfUFVQDQor
ICNkZWZpbmUJUEZfQ0hBT1MJQUZfQ0hBT1MNCisgI2RlZmluZQlQRl9OUwkJ
QUZfTlMNCisgI2RlZmluZQlQRl9JU08JCUFGX0lTTw0KKyAjZGVmaW5lCVBG
X09TSQkJQUZfSVNPDQorICNkZWZpbmUJUEZfRUNNQQkJQUZfRUNNQQ0KKyAj
ZGVmaW5lCVBGX0RBVEFLSVQJQUZfREFUQUtJVA0KKyAjZGVmaW5lCVBGX0ND
SVRUCUFGX0NDSVRUDQorICNkZWZpbmUJUEZfU05BCQlBRl9TTkENCisgI2Rl
ZmluZSBQRl9ERUNuZXQJQUZfREVDbmV0DQorICNkZWZpbmUgUEZfRExJCQlB
Rl9ETEkNCisgI2RlZmluZSBQRl9MQVQJCUFGX0xBVA0KKyAjZGVmaW5lCVBG
X0hZTElOSwlBRl9IWUxJTksNCisgI2RlZmluZQlQRl9BUFBMRVRBTEsJQUZf
QVBQTEVUQUxLDQorICNkZWZpbmUJUEZfUk9VVEUJQUZfUk9VVEUNCisgI2Rl
ZmluZQlQRl9MSU5LCQlBRl9MSU5LDQorICNkZWZpbmUJUEZfWFRQCQlwc2V1
ZG9fQUZfWFRQCS8qIHJlYWxseSBqdXN0IHByb3RvIGZhbWlseSwgbm8gQUYg
Ki8NCisgI2RlZmluZSBQRl9STVAJCUFGX1JNUA0KKyANCisgI2RlZmluZQlQ
Rl9NQVgJCUFGX01BWA0KKyANCisgLyoNCisgICogTWF4aW11bSBxdWV1ZSBs
ZW5ndGggc3BlY2lmaWFibGUgYnkgbGlzdGVuLg0KKyAgKi8NCisgI2RlZmlu
ZQlTT01BWENPTk4JNQ0KKyANCisgLyoNCisgICogTWVzc2FnZSBoZWFkZXIg
Zm9yIHJlY3Ztc2cgYW5kIHNlbmRtc2cgY2FsbHMuDQorICAqIFVzZWQgdmFs
dWUtcmVzdWx0IGZvciByZWN2bXNnLCB2YWx1ZSBvbmx5IGZvciBzZW5kbXNn
Lg0KKyAgKi8NCisgc3RydWN0IG1zZ2hkciB7DQorIAljYWRkcl90CW1zZ19u
YW1lOwkJLyogb3B0aW9uYWwgYWRkcmVzcyAqLw0KKyAJdV9pbnQJbXNnX25h
bWVsZW47CQkvKiBzaXplIG9mIGFkZHJlc3MgKi8NCisgCXN0cnVjdAlpb3Zl
YyAqbXNnX2lvdjsJCS8qIHNjYXR0ZXIvZ2F0aGVyIGFycmF5ICovDQorIAl1
X2ludAltc2dfaW92bGVuOwkJLyogIyBlbGVtZW50cyBpbiBtc2dfaW92ICov
DQorIAljYWRkcl90CW1zZ19jb250cm9sOwkJLyogYW5jaWxsYXJ5IGRhdGEs
IHNlZSBiZWxvdyAqLw0KKyAJdV9pbnQJbXNnX2NvbnRyb2xsZW47CQkvKiBh
bmNpbGxhcnkgZGF0YSBidWZmZXIgbGVuICovDQorIAlpbnQJbXNnX2ZsYWdz
OwkJLyogZmxhZ3Mgb24gcmVjZWl2ZWQgbWVzc2FnZSAqLw0KKyB9Ow0KKyAN
CisgI2RlZmluZQlNU0dfT09CCQkweDEJCS8qIHByb2Nlc3Mgb3V0LW9mLWJh
bmQgZGF0YSAqLw0KKyAjZGVmaW5lCU1TR19QRUVLCTB4MgkJLyogcGVlayBh
dCBpbmNvbWluZyBtZXNzYWdlICovDQorICNkZWZpbmUJTVNHX0RPTlRST1VU
RQkweDQJCS8qIHNlbmQgd2l0aG91dCB1c2luZyByb3V0aW5nIHRhYmxlcyAq
Lw0KKyAjZGVmaW5lCU1TR19FT1IJCTB4OAkJLyogZGF0YSBjb21wbGV0ZXMg
cmVjb3JkICovDQorICNkZWZpbmUJTVNHX1RSVU5DCTB4MTAJCS8qIGRhdGEg
ZGlzY2FyZGVkIGJlZm9yZSBkZWxpdmVyeSAqLw0KKyAjZGVmaW5lCU1TR19D
VFJVTkMJMHgyMAkJLyogY29udHJvbCBkYXRhIGxvc3QgYmVmb3JlIGRlbGl2
ZXJ5ICovDQorICNkZWZpbmUJTVNHX1dBSVRBTEwJMHg0MAkJLyogd2FpdCBm
b3IgZnVsbCByZXF1ZXN0IG9yIGVycm9yICovDQorIA0KKyAvKg0KKyAgKiBI
ZWFkZXIgZm9yIGFuY2lsbGFyeSBkYXRhIG9iamVjdHMgaW4gbXNnX2NvbnRy
b2wgYnVmZmVyLg0KKyAgKiBVc2VkIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0
aW9uIHdpdGgvYWJvdXQgYSBkYXRhZ3JhbQ0KKyAgKiBub3QgZXhwcmVzc2li
bGUgYnkgZmxhZ3MuICBUaGUgZm9ybWF0IGlzIGEgc2VxdWVuY2UNCisgICog
b2YgbWVzc2FnZSBlbGVtZW50cyBoZWFkZWQgYnkgY21zZ2hkciBzdHJ1Y3R1
cmVzLg0KKyAgKi8NCisgc3RydWN0IGNtc2doZHIgew0KKyAJdV9pbnQJY21z
Z19sZW47CQkvKiBkYXRhIGJ5dGUgY291bnQsIGluY2x1ZGluZyBoZHIgKi8N
CisgCWludAljbXNnX2xldmVsOwkJLyogb3JpZ2luYXRpbmcgcHJvdG9jb2wg
Ki8NCisgCWludAljbXNnX3R5cGU7CQkvKiBwcm90b2NvbC1zcGVjaWZpYyB0
eXBlICovDQorIC8qIGZvbGxvd2VkIGJ5CXVfY2hhciAgY21zZ19kYXRhW107
ICovDQorIH07DQorIA0KKyAvKiBnaXZlbiBwb2ludGVyIHRvIHN0cnVjdCBh
ZGF0YWhkciwgcmV0dXJuIHBvaW50ZXIgdG8gZGF0YSAqLw0KKyAjZGVmaW5l
CUNNU0dfREFUQShjbXNnKQkJKCh1X2NoYXIgKikoKGNtc2cpICsgMSkpDQor
IA0KKyAvKiBnaXZlbiBwb2ludGVyIHRvIHN0cnVjdCBhZGF0YWhkciwgcmV0
dXJuIHBvaW50ZXIgdG8gbmV4dCBhZGF0YWhkciAqLw0KKyAjZGVmaW5lCUNN
U0dfTlhUSERSKG1oZHIsIGNtc2cpCVwNCisgCSgoKGNhZGRyX3QpKGNtc2cp
ICsgKGNtc2cpLT5jbXNnX2xlbiArIHNpemVvZihzdHJ1Y3QgY21zZ2hkcikg
PiBcDQorIAkgICAgKG1oZHIpLT5tc2dfY29udHJvbCArIChtaGRyKS0+bXNn
X2NvbnRyb2xsZW4pID8gXA0KKyAJICAgIChzdHJ1Y3QgY21zZ2hkciAqKU5V
TEwgOiBcDQorIAkgICAgKHN0cnVjdCBjbXNnaGRyICopKChjYWRkcl90KShj
bXNnKSArIEFMSUdOKChjbXNnKS0+Y21zZ19sZW4pKSkNCisgDQorICNkZWZp
bmUJQ01TR19GSVJTVEhEUihtaGRyKQkoKHN0cnVjdCBjbXNnaGRyICopKG1o
ZHIpLT5tc2dfY29udHJvbCkNCisgDQorIC8qICJTb2NrZXQiLWxldmVsIGNv
bnRyb2wgbWVzc2FnZSB0eXBlczogKi8NCisgI2RlZmluZQlTQ01fUklHSFRT
CTB4MDEJCS8qIGFjY2VzcyByaWdodHMgKGFycmF5IG9mIGludCkgKi8NCisg
DQorIC8qDQorICAqIDQuMyBjb21wYXQgc29ja2FkZHIsIG1vdmUgdG8gY29t
cGF0IGZpbGUgbGF0ZXINCisgICovDQorIHN0cnVjdCBvc29ja2FkZHIgew0K
KyAJdV9zaG9ydAlzYV9mYW1pbHk7CQkvKiBhZGRyZXNzIGZhbWlseSAqLw0K
KyAJY2hhcglzYV9kYXRhWzE0XTsJCS8qIHVwIHRvIDE0IGJ5dGVzIG9mIGRp
cmVjdCBhZGRyZXNzICovDQorIH07DQorIA0KKyAvKg0KKyAgKiA0LjMtY29t
cGF0IG1lc3NhZ2UgaGVhZGVyIChtb3ZlIHRvIGNvbXBhdCBmaWxlIGxhdGVy
KS4NCisgICovDQorIHN0cnVjdCBvbXNnaGRyIHsNCisgCWNhZGRyX3QJbXNn
X25hbWU7CQkvKiBvcHRpb25hbCBhZGRyZXNzICovDQorIAlpbnQJbXNnX25h
bWVsZW47CQkvKiBzaXplIG9mIGFkZHJlc3MgKi8NCisgCXN0cnVjdAlpb3Zl
YyAqbXNnX2lvdjsJCS8qIHNjYXR0ZXIvZ2F0aGVyIGFycmF5ICovDQorIAlp
bnQJbXNnX2lvdmxlbjsJCS8qICMgZWxlbWVudHMgaW4gbXNnX2lvdiAqLw0K
KyAJY2FkZHJfdAltc2dfYWNjcmlnaHRzOwkJLyogYWNjZXNzIHJpZ2h0cyBz
ZW50L3JlY2VpdmVkICovDQorIAlpbnQJbXNnX2FjY3JpZ2h0c2xlbjsNCisg
fTsNCisgDQorICNpZm5kZWYJS0VSTkVMDQorIA0KKyAjaW5jbHVkZSA8c3lz
L2NkZWZzLmg+DQorIA0KKyBfX0JFR0lOX0RFQ0xTDQorIGludAlhY2NlcHQg
X19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKikpOw0KKyBpbnQJ
YmluZCBfX1AoKGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIGludCkp
Ow0KKyBpbnQJY29ubmVjdCBfX1AoKGludCwgY29uc3Qgc3RydWN0IHNvY2th
ZGRyICosIGludCkpOw0KKyBpbnQJZ2V0cGVlcm5hbWUgX19QKChpbnQsIHN0
cnVjdCBzb2NrYWRkciAqLCBpbnQgKikpOw0KKyBpbnQJZ2V0c29ja25hbWUg
X19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKikpOw0KKyBpbnQJ
Z2V0c29ja29wdCBfX1AoKGludCwgaW50LCBpbnQsIHZvaWQgKiwgaW50ICop
KTsNCisgaW50CWxpc3RlbiBfX1AoKGludCwgaW50KSk7DQorIHNzaXplX3QJ
cmVjdiAJCV9fUCgoaW50LCB2b2lkICosIHNpemVfdCwgaW50KSk7DQorIHNz
aXplX3QJcmVjdmZyb20gCV9fUCgoaW50LCB2b2lkICosIHNpemVfdCwgaW50
LA0KKyAJCQkJCQlzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50ICopKTsNCisgaW50
CXJlY3Ztc2cgX19QKChpbnQsIHN0cnVjdCBtc2doZHIgKiwgaW50KSk7DQor
IHNzaXplX3QJc2VuZCAJCV9fUCgoaW50LCBjb25zdCB2b2lkICosIHNpemVf
dCwgaW50KSk7DQorIHNzaXplX3QJc2VuZHRvIAkJX19QKChpbnQsIGNvbnN0
IHZvaWQgKiwgc2l6ZV90LCBpbnQsIA0KKyAJCQkJCQljb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKiwgaW50KSk7DQorIGludAlzZW5kbXNnIF9fUCgoaW50LCBj
b25zdCBzdHJ1Y3QgbXNnaGRyICosIGludCkpOw0KKyBpbnQJc2V0c29ja29w
dCBfX1AoKGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgaW50KSk7DQor
IGludAlzaHV0ZG93biBfX1AoKGludCwgaW50KSk7DQorIGludAlzb2NrZXQg
X19QKChpbnQsIGludCwgaW50KSk7DQorIGludAlzb2NrZXRwYWlyIF9fUCgo
aW50LCBpbnQsIGludCwgaW50ICopKTsNCisgX19FTkRfREVDTFMNCisgDQor
ICNlbmRpZgkvKiAhS0VSTkVMICovDQorICNlbmRpZiAvKiBfU1lTX1NPQ0tF
VF9IXyAqLw0KZGlmZiAtY3JOIHB0aHJlYWRzL21hY2hkZXAvZnJlZWJzZC0y
LjAvdGltZXJzLmggcHRocmVhZHMubmV3L21hY2hkZXAvZnJlZWJzZC0yLjAv
dGltZXJzLmgNCioqKiBwdGhyZWFkcy9tYWNoZGVwL2ZyZWVic2QtMi4wL3Rp
bWVycy5oCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KLS0tIHB0aHJlYWRz
Lm5ldy9tYWNoZGVwL2ZyZWVic2QtMi4wL3RpbWVycy5oCVdlZCBEZWMgMTQg
MTg6MDA6NTkgMTk5NA0KKioqKioqKioqKioqKioqDQoqKiogMCAqKioqDQot
LS0gMSw3MCAtLS0tDQorIC8qID09PT0gdGltZXJzLmggPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQorICAqIENvcHlyaWdodCAoYykgMTk5NCBieSBDaHJpcyBQcm92ZW56
YW5vLCBwcm92ZW5AbWl0LmVkdQ0KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
Lg0KKyAgKg0KKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zDQorICAqIGFyZSBtZXQ6DQorICAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisg
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQ0KKyAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
Lg0KKyAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p
bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUNCisgICogICAg
bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0K
KyAgKiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl
ZCBieSBDaHJpcyBQcm92ZW56YW5vLg0KKyAgKiA0LiBUaGUgbmFtZSBvZiBD
aHJpcyBQcm92ZW56YW5vIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgDQorICAqCSAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQorICAq
CSAgcGVybWlzc2lvbi4NCisgICoNCisgICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBDSFJJUyBQUk9WRU5aQU5PIGBgQVMgSVMnJyBBTkQNCisg
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFDQorICAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQ0hSSVMgUFJPVkVOWkFOTyBCRSBMSUFCTEUgRk9S
IEFOWSANCisgICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMNCisg
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIA0KKyAgKiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUg0KKyAgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
DQorICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisgICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiANCisgICogU1VDSCBEQU1BR0UuDQor
ICAqDQorICAqIHRpbWVycy5oLHYgMS4xIDE5OTQvMDkvMTUgMTU6NDM6MDQg
cHJvdmVuIEV4cA0KKyAgKg0KKyAgKiBEZXNjcmlwdGlvbiA6IEJhc2ljIHRp
bWVycyBoZWFkZXIuDQorICAqDQorICAqICAxLjAwIDk0LzA2LzEzIHByb3Zl
bg0KKyAgKiAgICAgIC1TdGFydGVkIGNvZGluZyB0aGlzIGZpbGUuDQorICAq
Lw0KKyAgDQorICNpZm5kZWYgX1NZU19USU1FUlNfSF8NCisgI2RlZmluZQlf
U1lTX1RJTUVSU19IXw0KKyANCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0K
KyAjaW5jbHVkZSA8dGltZS5oPg0KKyANCisgI2lmIDANCisgc3RydWN0IHRp
bWVzcGVjIHsNCisgCXRpbWVfdAl0c19zZWM7DQorIAlsb25nCXRzX25zZWM7
DQorIH07DQorICNlbmRpZg0KKyANCisgI2RlZmluZSBUSU1FVkFMX1RPX1RJ
TUVTUEVDKHR2LCB0cykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXA0KKyAgICAgICAgICh0cyktPnRzX3NlYyA9ICh0diktPnR2X3Nl
YzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorICAg
ICAgICAgKHRzKS0+dHNfbnNlYyA9ICh0diktPnR2X3VzZWMgKiAxMDAwOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCisgfQ0KKyAjZGVmaW5lIFRJ
TUVTUEVDX1RPX1RJTUVWQUwodHYsIHRzKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcDQorICAgICAgICAgKHR2KS0+dHZfc2VjID0g
KHRzKS0+dHNfc2VjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwNCisgICAgICAgICAodHYpLT50dl91c2VjID0gKHRzKS0+dHNfbnNl
YyAvIDEwMDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyB9DQor
IA0KKyAvKg0KKyAgKiBOZXcgZnVuY3Rpb25zDQorICAqLw0KKyANCisgX19C
RUdJTl9ERUNMUw0KKyANCisgX19FTkRfREVDTFMNCisgDQorICNlbmRpZg0K
ZGlmZiAtY3JOIHB0aHJlYWRzL21hY2hkZXAvcG9zaXgtZnJlZWJzZC0yLjAu
aCBwdGhyZWFkcy5uZXcvbWFjaGRlcC9wb3NpeC1mcmVlYnNkLTIuMC5oDQoq
KiogcHRocmVhZHMvbWFjaGRlcC9wb3NpeC1mcmVlYnNkLTIuMC5oCVRodSBK
YW4gIDEgMDE6MDA6MDAgMTk3MA0KLS0tIHB0aHJlYWRzLm5ldy9tYWNoZGVw
L3Bvc2l4LWZyZWVic2QtMi4wLmgJV2VkIERlYyAxNCAxNzo1NzoyOCAxOTk0
DQoqKioqKioqKioqKioqKioNCioqKiAwICoqKioNCi0tLSAxLDM0IC0tLS0N
CisgLyogPT09PSBwb3NpeC5oID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBDb3B5
cmlnaHQgKGMpIDE5OTMgYnkgQ2hyaXMgUHJvdmVuemFubywgcHJvdmVuQGF0
aGVuYS5taXQuZWR1CQ0KKyAgKg0KKyAgKiBEZXNjcmlwdGlvbiA6IENvbnZl
cnQgYW4gVWx0cml4LTQuMiBzeXN0ZW0gdG8gYSBtb3JlIG9yIGxlc3MgUE9T
SVggc3lzdGVtLg0KKyAgKg0KKyAgKiBwb3NpeC1mcmVlYnNkLTEuMS5oLHYg
MS4xIDE5OTQvMDkvMTUgMTU6NDE6MjkgcHJvdmVuIEV4cA0KKyAgKg0KKyAg
KiAgMS4wMCA5My8wNy8yMCBwcm92ZW4NCisgICogICAgICAtU3RhcnRlZCBj
b2RpbmcgdGhpcyBmaWxlLg0KKyAgKi8NCisgDQorICNpZm5kZWYgX1BUSFJF
QURfUE9TSVhfSF8NCisgI2RlZmluZSBfUFRIUkVBRF9QT1NJWF9IXw0KKyAN
CisgI2luY2x1ZGUgPHN5cy9jZGVmcy5oPg0KKyANCisgLyogTW9yZSBzdHVm
ZiBmb3IgY29tcGlsaW5nICovDQorICNpZiBkZWZpbmVkKF9fR05VQ19fKQ0K
KyAjZGVmaW5lIF9fSU5MSU5FICAgICAgICAgICAgICAgIGV4dGVybiBpbmxp
bmUNCisgI2Vsc2UNCisgI2RlZmluZSBfX0lOTElORSAgICAgICAgICAgICAg
ICBzdGF0aWMNCisgI2VuZGlmDQorIA0KKyAvKiBNYWtlIHN1cmUgd2UgaGF2
ZSBzaXplX3QgZGVmaW5lZCAqLw0KKyAjaW5jbHVkZSA8c3RkbGliLmg+DQor
ICNpbmNsdWRlIDxzdGRhcmcuaD4NCisgDQorICNkZWZpbmUgX19OT1JFVFVS
Tg0KKyANCisgI2lmbmRlZiBfX1dBSVRfU1RBVFVTDQorICNkZWZpbmUgX19X
QUlUX1NUQVRVUwlpbnQgKg0KKyAjZW5kaWYNCisgDQorICNlbmRpZg0KZGlm
ZiAtY3JOIHB0aHJlYWRzL21hY2hkZXAvc3lzY2FsbC1pMzg2LWZyZWVic2Qt
Mi4wLlMgcHRocmVhZHMubmV3L21hY2hkZXAvc3lzY2FsbC1pMzg2LWZyZWVi
c2QtMi4wLlMNCioqKiBwdGhyZWFkcy9tYWNoZGVwL3N5c2NhbGwtaTM4Ni1m
cmVlYnNkLTIuMC5TCVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KLS0tIHB0
aHJlYWRzLm5ldy9tYWNoZGVwL3N5c2NhbGwtaTM4Ni1mcmVlYnNkLTIuMC5T
CVdlZCBEZWMgMTQgMTc6NTc6NTggMTk5NA0KKioqKioqKioqKioqKioqDQoq
KiogMCAqKioqDQotLS0gMSwyOTMgLS0tLQ0KKyAvKiA9PT09IHN5c2NhbGwu
UyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCisgICogQ29weXJpZ2h0IChjKSAxOTkwIFRo
ZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuDQor
ICAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpcyBQcm92ZW56YW5vLCBwcm92
ZW5AbWl0LmVkdQ0KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAgKg0K
KyAgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRy
aWJ1dGVkIHRvIEJlcmtlbGV5IGJ5DQorICAqIFdpbGxpYW0gSm9saXR6Lg0K
KyAgKg0KKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zDQorICAqIGFyZSBtZXQ6DQorICAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQ0KKyAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0K
KyAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg
ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUNCisgICogICAgbXVz
dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50Og0KKyAg
KglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5
IHRoZSBVbml2ZXJzaXR5IG9mDQorICAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5
IGFuZCBpdHMgY29udHJpYnV0b3JzLg0KKyAgKiA0LiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycw0KKyAgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUN
CisgICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQorICAqDQorICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
DQorICAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KKyAgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUNCisgICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwNCisgICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCisgICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pDQorICAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUDQorICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkNCisgICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyAgKiBTVUNI
IERBTUFHRS4NCisgICoNCisgICogRGVzY3JpcHRpb24gOiBNYWNoaW5lIGRl
cGVuZGVudCBzeXNjYWxscyBmb3IgaTM4Ni9pNDg2L2k1ODYNCisgICoNCisg
ICogIDEuMDAgOTMvMDgvMjYgcHJvdmVuDQorICAqICAgICAgLVN0YXJ0ZWQg
Y29kaW5nIHRoaXMgZmlsZS4NCisgICoNCisgICoJMS4wMSA5My8xMS8xMyBw
cm92ZW4NCisgICoJCS1UaGUgZnVuY3Rpb25zIHJlYWR2KCkgYW5kIHdyaXRl
digpIGFkZGVkLg0KKyAgKi8NCisgDQorICNpZm5kZWYgbGludA0KKyAJLnRl
eHQNCisgCS5hc2NpeiAic3lzY2FsbC1pMzg2LWZyZWVic2QtMS4xLlMsdiAx
LjEgMTk5NC8wOS8xNSAxNTo0MTozNiBwcm92ZW4gRXhwIjsNCisgI2VuZGlm
DQorICANCisgI2lmIGRlZmluZWQoU1lTTElCQ19TQ0NTKSAmJiAhZGVmaW5l
ZChsaW50KQ0KKyAgICAgICAgIC5hc2NpeiAiQCgjKXN5c2NhbGwucyAgIDUu
MSAoQmVya2VsZXkpIDQvMjMvOTAiDQorICNlbmRpZiAvKiBTWVNMSUJDX1ND
Q1MgYW5kIG5vdCBsaW50ICovDQorIA0KKyAjaW5jbHVkZSA8c3lzL3N5c2Nh
bGwuaD4NCisgDQorICNkZWZpbmUJU1lTQ0FMTCh4KQkJCQkJXA0KKyAJLmds
b2JsIF9tYWNoZGVwX3N5c18vKioveDsJCVwNCisgCQkJCQkJCQkJXA0KKyBf
bWFjaGRlcF9zeXNfLyoqL3g6OwkJCQkJXA0KKyAJCQkJCQkJCQlcDQorIAlt
b3ZsICQoU1lTXy8qKi94KSwgJWVheDsJCQlcDQorIAkuYnl0ZSAweDlhOyAu
bG9uZyAwOyAud29yZCA3OwlcDQorIAlqYgkxYjsJCQkJCQkJXA0KKyAJcmV0
OwkJCQkJCQkNCisgDQorIC8qDQorICAqIEluaXRpYWwgYXNtIHN0dWZmIGZv
ciBhbGwgZnVuY3Rpb25zLg0KKyAgKi8NCisgCS50ZXh0DQorIAkuYWxpZ24J
Mg0KKyANCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQorICAqIGVycm9yIGNvZGUgZm9yIGFsbCBzeXNjYWxscy4gVGhlIGVycm9y
IHZhbHVlIGlzIHJldHVybmVkIGFzIHRoZSBuZWdhdGl2ZQ0KKyAgKiBvZiB0
aGUgZXJybm8gdmFsdWUuDQorICAqLw0KKyANCisgMToNCisgCW5lZwkJJWVh
eA0KKyAJcmV0DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBtYWNoZGVwX3N5c193cml0ZSgpDQorICAqLw0KKyBTWVND
QUxMKHdyaXRlKQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCisgICogbWFjaGRlcF9zeXNfcmVhZCgpDQorICAqLw0KKyBTWVND
QUxMKHJlYWQpDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBtYWNoZGVwX3N5c19vcGVuKCkNCisgICovDQorIFNZU0NB
TEwob3BlbikNCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQorICAqIG1hY2hkZXBfc3lzX2Nsb3NlKCkNCisgICovDQorIFNZU0NB
TEwoY2xvc2UpDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBtYWNoZGVwX3N5c19mY250bCgpDQorICAqLw0KKyBTWVND
QUxMKGZjbnRsKQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCisgICogbWFjaGRlcF9zeXNfbHNlZWsoKQ0KKyAgKi8NCisgU1lT
Q0FMTChsc2VlaykNCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQorICAqIG1hY2hkZXBfc3lzX3N0YXQoKQ0KKyAgKi8NCisgU1lT
Q0FMTChzdGF0KQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCisgICogbWFjaGRlcF9zeXNfcGlwZSgpDQorICAqLw0KKyBTWVND
QUxMKHBpcGUpDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBtYWNoZGVwX3N5c19kdXAoKQ0KKyAgKi8NCisgU1lTQ0FM
TChkdXApDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KKyAgKiBtYWNoZGVwX3N5c19kdXAyKCkNCisgICovDQorIFNZU0NBTEwo
ZHVwMikNCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQorICAqIG1hY2hkZXBfc3lzX2ZvcmsoKQ0KKyAgKi8NCisgCS5nbG9ibCBf
bWFjaGRlcF9zeXNfZm9yazsJCQ0KKyAJCQkJCQkJCQkNCisgX21hY2hkZXBf
c3lzX2Zvcms6OwkJCQkNCisgCQkJCQkJCQkJDQorIAltb3ZsICQoU1lTX2Zv
cmspLCAlZWF4OwkJDQorIAkuYnl0ZSAweDlhOyAubG9uZyAwOyAud29yZCA3
OwkNCisgCWNtcGwgJDAsICVlZHgNCisgCWplCTJmDQorIAltb3ZsICQwLCAl
ZWF4DQorIDI6CQ0KKyAJcmV0OwkJCQkJCQkNCisgDQorIC8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX2V4ZWN2
ZSgpDQorICAqLw0KKyBTWVNDQUxMKGV4ZWN2ZSkNCisgDQorIC8qID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX2Zz
dGF0KCkNCisgICovDQorIFNZU0NBTEwoZnN0YXQpDQorIA0KKyAvKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3N5c19m
Y2hvd24oKQ0KKyAgKi8NCisgU1lTQ0FMTChmY2hvd24pDQorIA0KKyAvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3N5
c19mY2htb2QoKQ0KKyAgKi8NCisgU1lTQ0FMTChmY2htb2QpDQorIA0KKyAv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVw
X3N5c19jaG93bigpDQorICAqLw0KKyBTWVNDQUxMKGNob3duKQ0KKyANCisg
LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogbWFjaGRl
cF9zeXNfY2htb2QoKQ0KKyAgKi8NCisgU1lTQ0FMTChjaG1vZCkNCisgDQor
IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hk
ZXBfc3lzX2NoZGlyKCkNCisgICovDQorIFNZU0NBTEwoY2hkaXIpDQorIA0K
KyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNo
ZGVwX3N5c19jaGRpcigpDQorICAqLw0KKyBTWVNDQUxMKGxpbmspDQorIA0K
KyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNo
ZGVwX3N5c19jaGRpcigpDQorICAqLw0KKyBTWVNDQUxMKHVubGluaykNCisg
DQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1h
Y2hkZXBfc3lzX2NoZGlyKCkNCisgICovDQorIFNZU0NBTEwocmVuYW1lKQ0K
KyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gDQorICAq
IE5vbnN0YW5kYXJkIGNhbGxzIHVzZWQgdG8gbWFrZSB0aGUgc3lzdGVtIHdv
cmsNCisgICoNCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
CisgICogbWFjaGRlcF9zeXNfc2VsZWN0KCkNCisgICovDQorIFNZU0NBTEwo
c2VsZWN0KQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCisgICogbWFjaGRlcF9zeXNfZ2V0ZGlyZW50cmllcygpDQorICAqLw0K
KyBTWVNDQUxMKGdldGRpcmVudHJpZXMpDQorIA0KKyAvKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVwX3N5c193YWl0NCgp
DQorICAqLw0KKyBTWVNDQUxMKHdhaXQ0KQ0KKyANCisgLyogPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0gDQorICAqIEJlcmtlbGV5IHNvY2tldCBz
dHVmZg0KKyAgKiANCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCisgICogbWFjaGRlcF9zeXNfc29ja2V0KCkNCisgICovDQorIFNZU0NB
TEwoc29ja2V0KQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCisgICogbWFjaGRlcF9zeXNfYmluZCgpDQorICAqLw0KKyBTWVND
QUxMKGJpbmQpDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBtYWNoZGVwX3N5c19jb25uZWN0KCkNCisgICovDQorIFNZ
U0NBTEwoY29ubmVjdCkNCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX2FjY2VwdCgpDQorICAqLw0K
KyBTWVNDQUxMKGFjY2VwdCkNCisgDQorIC8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX2xpc3RlbigpDQorICAq
Lw0KKyBTWVNDQUxMKGxpc3RlbikNCisgDQorIC8qID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX2dldHNvY2tvcHQo
KQ0KKyAgKi8NCisgU1lTQ0FMTChnZXRzb2Nrb3B0KQ0KKyANCisgLyogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNf
cmVhZHYoKQ0KKyAgKi8NCisgU1lTQ0FMTChyZWFkdikNCisgDQorIC8qID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lz
X3dyaXRldigpDQorICAqLw0KKyBTWVNDQUxMKHdyaXRldikNCisgDQorIC8q
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBf
c3lzX2dldHBlZXJuYW1lKCkNCisgICovDQorIFNZU0NBTEwoZ2V0cGVlcm5h
bWUpDQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
KyAgKiBtYWNoZGVwX3N5c19nZXRzb2NrbmFtZSgpDQorICAqLw0KKyBTWVND
QUxMKGdldHNvY2tuYW1lKQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNfc2VuZHRvKCkNCisgICov
DQorIFNZU0NBTEwoc2VuZHRvKQ0KKyANCisgLyogPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNfcmVjdmZyb20oKQ0K
KyAgKi8NCisgU1lTQ0FMTChyZWN2ZnJvbSkNCisgDQorIC8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQorICAqIG1hY2hkZXBfc3lzX3NlbmRt
c2coKQ0KKyAgKi8NCisgU1lTQ0FMTChzZW5kbXNnKQ0KKyANCisgLyogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogbWFjaGRlcF9zeXNf
cmVjdm1zZygpDQorICAqLw0KKyBTWVNDQUxMKHJlY3Ztc2cpDQorIA0KKyAv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBtYWNoZGVw
X3N5c19zaHV0ZG93bigpDQorICAqLw0KKyBTWVNDQUxMKHNodXRkb3duKQ0K
KyANCmRpZmYgLWNyTiBwdGhyZWFkcy9tYWNoZGVwL3VuaXN0ZC1pMzg2LWZy
ZWVic2QtMi4wLmggcHRocmVhZHMubmV3L21hY2hkZXAvdW5pc3RkLWkzODYt
ZnJlZWJzZC0yLjAuaA0KKioqIHB0aHJlYWRzL21hY2hkZXAvdW5pc3RkLWkz
ODYtZnJlZWJzZC0yLjAuaAlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzANCi0t
LSBwdGhyZWFkcy5uZXcvbWFjaGRlcC91bmlzdGQtaTM4Ni1mcmVlYnNkLTIu
MC5oCVdlZCBEZWMgMTQgMTc6NTU6MjcgMTk5NA0KKioqKioqKioqKioqKioq
DQoqKiogMCAqKioqDQotLS0gMSwxNzcgLS0tLQ0KKyAvKi0NCisgICogQ29w
eXJpZ2h0IChjKSAxOTkxLCAxOTkzLCAxOTk0DQorICAqCVRoZSBSZWdlbnRz
IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRz
IHJlc2VydmVkLg0KKyAgKg0KKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQN
CisgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICAqIGFyZSBtZXQ6DQor
ICAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4NCisgICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLg0KKyAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz
IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUN
CisgICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk
Z2VtZW50Og0KKyAgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
ZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mDQorICAqCUNhbGlmb3Ju
aWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLg0KKyAgKiA0LiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KKyAgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUNCisgICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uDQorICAqDQorICAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EDQorICAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0K
KyAgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCisgICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwNCisgICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMNCisgICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQorICAqIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorICAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkNCisgICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
Rg0KKyAgKiBTVUNIIERBTUFHRS4NCisgICoNCisgICoJQCgjKXVuaXN0ZC5o
CTguMTAgKEJlcmtlbGV5KSA0LzE2Lzk0DQorICAqLw0KKyANCisgI2lmbmRl
ZiBfVU5JU1REX0hfDQorICNkZWZpbmUJX1VOSVNURF9IXw0KKyANCisgI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPg0KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
DQorICNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+DQorIA0KKyAjZGVmaW5lCSBT
VERJTl9GSUxFTk8JMAkvKiBzdGFuZGFyZCBpbnB1dCBmaWxlIGRlc2NyaXB0
b3IgKi8NCisgI2RlZmluZQlTVERPVVRfRklMRU5PCTEJLyogc3RhbmRhcmQg
b3V0cHV0IGZpbGUgZGVzY3JpcHRvciAqLw0KKyAjZGVmaW5lCVNUREVSUl9G
SUxFTk8JMgkvKiBzdGFuZGFyZCBlcnJvciBmaWxlIGRlc2NyaXB0b3IgKi8N
CisgDQorICNpZm5kZWYgTlVMTA0KKyAjZGVmaW5lCU5VTEwJCTAJLyogbnVs
bCBwb2ludGVyIGNvbnN0YW50ICovDQorICNlbmRpZg0KKyANCisgX19CRUdJ
Tl9ERUNMUw0KKyBfX2RlYWQgdm9pZA0KKyAJIF9leGl0IF9fUCgoaW50KSkg
X19kZWFkMjsNCisgaW50CSBhY2Nlc3MgX19QKChjb25zdCBjaGFyICosIGlu
dCkpOw0KKyB1bnNpZ25lZCBpbnQJIGFsYXJtIF9fUCgodW5zaWduZWQgaW50
KSk7DQorIGludAkgY2hkaXIgX19QKChjb25zdCBjaGFyICopKTsNCisgaW50
CSBjaG93biBfX1AoKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KSk7DQor
IGludAkgY2xvc2UgX19QKChpbnQpKTsNCisgc2l6ZV90CSBjb25mc3RyIF9f
UCgoaW50LCBjaGFyICosIHNpemVfdCkpOw0KKyBpbnQJIGR1cCBfX1AoKGlu
dCkpOw0KKyBpbnQJIGR1cDIgX19QKChpbnQsIGludCkpOw0KKyBpbnQJIGV4
ZWNsIF9fUCgoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikpOw0K
KyBpbnQJIGV4ZWNsZSBfX1AoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pKTsNCisgaW50CSBleGVjbHAgX19QKChjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgLi4uKSk7DQorIGludAkgZXhlY3YgX19QKChjb25zdCBj
aGFyICosIGNoYXIgKiBjb25zdCAqKSk7DQorIGludAkgZXhlY3ZlIF9fUCgo
Y29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICop
KTsNCisgaW50CSBleGVjdnAgX19QKChjb25zdCBjaGFyICosIGNoYXIgKiBj
b25zdCAqKSk7DQorIHBpZF90CSBmb3JrIF9fUCgodm9pZCkpOw0KKyBsb25n
CSBmcGF0aGNvbmYgX19QKChpbnQsIGludCkpOw0KKyBjaGFyCSpnZXRjd2Qg
X19QKChjaGFyICosIHNpemVfdCkpOw0KKyBnaWRfdAkgZ2V0ZWdpZCBfX1Ao
KHZvaWQpKTsNCisgdWlkX3QJIGdldGV1aWQgX19QKCh2b2lkKSk7DQorIGdp
ZF90CSBnZXRnaWQgX19QKCh2b2lkKSk7DQorIGludAkgZ2V0Z3JvdXBzIF9f
UCgoaW50LCBnaWRfdCBbXSkpOw0KKyBjaGFyCSpnZXRsb2dpbiBfX1AoKHZv
aWQpKTsNCisgcGlkX3QJIGdldHBncnAgX19QKCh2b2lkKSk7DQorIHBpZF90
CSBnZXRwaWQgX19QKCh2b2lkKSk7DQorIHBpZF90CSBnZXRwcGlkIF9fUCgo
dm9pZCkpOw0KKyB1aWRfdAkgZ2V0dWlkIF9fUCgodm9pZCkpOw0KKyBpbnQJ
IGlzYXR0eSBfX1AoKGludCkpOw0KKyBpbnQJIGxpbmsgX19QKChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKikpOw0KKyBvZmZfdAkgbHNlZWsgX19QKChp
bnQsIG9mZl90LCBpbnQpKTsNCisgbG9uZwkgcGF0aGNvbmYgX19QKChjb25z
dCBjaGFyICosIGludCkpOw0KKyBpbnQJIHBhdXNlIF9fUCgodm9pZCkpOw0K
KyBpbnQJIHBpcGUgX19QKChpbnQgKikpOw0KKyBzc2l6ZV90CSByZWFkIF9f
UCgoaW50LCB2b2lkICosIHNpemVfdCkpOw0KKyBpbnQJIHJtZGlyIF9fUCgo
Y29uc3QgY2hhciAqKSk7DQorIGludAkgc2V0Z2lkIF9fUCgoZ2lkX3QpKTsN
CisgaW50CSBzZXRwZ2lkIF9fUCgocGlkX3QsIHBpZF90KSk7DQorIHBpZF90
CSBzZXRzaWQgX19QKCh2b2lkKSk7DQorIGludAkgc2V0dWlkIF9fUCgodWlk
X3QpKTsNCisgdW5zaWduZWQgaW50CSBzbGVlcCBfX1AoKHVuc2lnbmVkIGlu
dCkpOw0KKyBsb25nCSBzeXNjb25mIF9fUCgoaW50KSk7DQorIHBpZF90CSB0
Y2dldHBncnAgX19QKChpbnQpKTsNCisgaW50CSB0Y3NldHBncnAgX19QKChp
bnQsIHBpZF90KSk7DQorIGNoYXIJKnR0eW5hbWUgX19QKChpbnQpKTsNCisg
aW50CSB1bmxpbmsgX19QKChjb25zdCBjaGFyICopKTsNCisgc3NpemVfdAkg
d3JpdGUgX19QKChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSk7DQorIA0K
KyAjaWZuZGVmCV9QT1NJWF9TT1VSQ0UNCisgI2lmZGVmCV9fU1REQ19fDQor
IHN0cnVjdCB0aW1ldmFsOwkJCQkvKiBzZWxlY3QoMikgKi8NCisgI2VuZGlm
DQorIGludAkgYWNjdCBfX1AoKGNvbnN0IGNoYXIgKikpOw0KKyBpbnQJIGFz
eW5jX2RhZW1vbiBfX1AoKHZvaWQpKTsNCisgY2hhcgkqYnJrIF9fUCgoY29u
c3QgY2hhciAqKSk7DQorIGludAkgY2hyb290IF9fUCgoY29uc3QgY2hhciAq
KSk7DQorIGNoYXIJKmNyeXB0IF9fUCgoY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICopKTsNCisgaW50CSBkZXNfY2lwaGVyIF9fUCgoY29uc3QgY2hhciAq
LCBjaGFyICosIGxvbmcsIGludCkpOw0KKyBpbnQJIGRlc19zZXRrZXkgX19Q
KChjb25zdCBjaGFyICprZXkpKTsNCisgaW50CSBlbmNyeXB0IF9fUCgoY2hh
ciAqLCBpbnQpKTsNCisgdm9pZAkgZW5kdXNlcnNoZWxsIF9fUCgodm9pZCkp
Ow0KKyBpbnQJIGV4ZWN0IF9fUCgoY29uc3QgY2hhciAqLCBjaGFyICogY29u
c3QgKiwgY2hhciAqIGNvbnN0ICopKTsNCisgaW50CSBmY2hkaXIgX19QKChp
bnQpKTsNCisgaW50CSBmY2hvd24gX19QKChpbnQsIGludCwgaW50KSk7DQor
IGludAkgZnN5bmMgX19QKChpbnQpKTsNCisgaW50CSBmdHJ1bmNhdGUgX19Q
KChpbnQsIG9mZl90KSk7DQorIGludAkgZ2V0ZG9tYWlubmFtZSBfX1AoKGNo
YXIgKiwgaW50KSk7DQorIGludAkgZ2V0ZHRhYmxlc2l6ZSBfX1AoKHZvaWQp
KTsNCisgbG9uZwkgZ2V0aG9zdGlkIF9fUCgodm9pZCkpOw0KKyBpbnQJIGdl
dGhvc3RuYW1lIF9fUCgoY2hhciAqLCBpbnQpKTsNCisgbW9kZV90CSBnZXRt
b2RlIF9fUCgoY29uc3Qgdm9pZCAqLCBtb2RlX3QpKTsNCisgX19wdXJlIGlu
dA0KKyAJIGdldHBhZ2VzaXplIF9fUCgodm9pZCkpOw0KKyBjaGFyCSpnZXRw
YXNzIF9fUCgoY29uc3QgY2hhciAqKSk7DQorIGNoYXIJKmdldHVzZXJzaGVs
bCBfX1AoKHZvaWQpKTsNCisgY2hhcgkqZ2V0d2QgX19QKChjaGFyICopKTsJ
CQkvKiBvYnNvbGV0ZWQgYnkgZ2V0Y3dkKCkgKi8NCisgaW50CSBpbml0Z3Jv
dXBzIF9fUCgoY29uc3QgY2hhciAqLCBpbnQpKTsNCisgaW50CSBpcnVzZXJv
ayBfX1AoKHVuc2lnbmVkIGxvbmcsIGludCwgY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopKTsNCisgaW50CSBta25vZCBfX1AoKGNvbnN0IGNoYXIgKiwg
bW9kZV90LCBkZXZfdCkpOw0KKyBpbnQJIG1rc3RlbXAgX19QKChjaGFyICop
KTsNCisgY2hhcgkqbWt0ZW1wIF9fUCgoY2hhciAqKSk7DQorIGludAkgbmZz
c3ZjIF9fUCgoaW50LCB2b2lkICopKTsNCisgaW50CSBuaWNlIF9fUCgoaW50
KSk7DQorIHZvaWQJIHBzaWduYWwgX19QKCh1bnNpZ25lZCBpbnQsIGNvbnN0
IGNoYXIgKikpOw0KKyBleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5
c19zaWdsaXN0W107DQorIGludAkgcHJvZmlsIF9fUCgoY2hhciAqLCBpbnQs
IGludCwgaW50KSk7DQorIGludAkgcmNtZCBfX1AoKGNoYXIgKiosIGludCwg
Y29uc3QgY2hhciAqLA0KKyAJCWNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCBpbnQgKikpOw0KKyBjaGFyCSpyZV9jb21wIF9fUCgoY29uc3QgY2hhciAq
KSk7DQorIGludAkgcmVfZXhlYyBfX1AoKGNvbnN0IGNoYXIgKikpOw0KKyBp
bnQJIHJlYWRsaW5rIF9fUCgoY29uc3QgY2hhciAqLCBjaGFyICosIGludCkp
Ow0KKyBpbnQJIHJlYm9vdCBfX1AoKGludCkpOw0KKyBpbnQJIHJldm9rZSBf
X1AoKGNvbnN0IGNoYXIgKikpOw0KKyBpbnQJIHJyZXN2cG9ydCBfX1AoKGlu
dCAqKSk7DQorIGludAkgcnVzZXJvayBfX1AoKGNvbnN0IGNoYXIgKiwgaW50
LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOw0KKyBjaGFyCSpzYnJr
IF9fUCgoaW50KSk7DQorIGludAkgc2VsZWN0IF9fUCgoaW50LCBmZF9zZXQg
KiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKSk7DQor
IGludAkgc2V0ZG9tYWlubmFtZSBfX1AoKGNvbnN0IGNoYXIgKiwgaW50KSk7
DQorIGludAkgc2V0ZWdpZCBfX1AoKGdpZF90KSk7DQorIGludAkgc2V0ZXVp
ZCBfX1AoKHVpZF90KSk7DQorIGludAkgc2V0Z3JvdXBzIF9fUCgoaW50LCBj
b25zdCBnaWRfdCAqKSk7DQorIHZvaWQJIHNldGhvc3RpZCBfX1AoKGxvbmcp
KTsNCisgaW50CSBzZXRob3N0bmFtZSBfX1AoKGNvbnN0IGNoYXIgKiwgaW50
KSk7DQorIGludAkgc2V0a2V5IF9fUCgoY29uc3QgY2hhciAqKSk7DQorIGlu
dAkgc2V0bG9naW4gX19QKChjb25zdCBjaGFyICopKTsNCisgdm9pZAkqc2V0
bW9kZSBfX1AoKGNvbnN0IGNoYXIgKikpOw0KKyBpbnQJIHNldHBncnAgX19Q
KChwaWRfdCBwaWQsIHBpZF90IHBncnApKTsJLyogb2Jzb2xldGVkIGJ5IHNl
dHBnaWQoKSAqLw0KKyBpbnQJIHNldHJlZ2lkIF9fUCgoZ2lkX3QsIGdpZF90
KSk7DQorIGludAkgc2V0cmV1aWQgX19QKCh1aWRfdCwgdWlkX3QpKTsNCisg
aW50CSBzZXRyZ2lkIF9fUCgoZ2lkX3QpKTsNCisgaW50CSBzZXRydWlkIF9f
UCgodWlkX3QpKTsNCisgdm9pZAkgc2V0dXNlcnNoZWxsIF9fUCgodm9pZCkp
Ow0KKyBpbnQJIHN3YXBvbiBfX1AoKGNvbnN0IGNoYXIgKikpOw0KKyBpbnQJ
IHN5bWxpbmsgX19QKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOw0K
KyB2b2lkCSBzeW5jIF9fUCgodm9pZCkpOw0KKyBpbnQJIHN5c2NhbGwgX19Q
KChpbnQsIC4uLikpOw0KKyBpbnQJIHRydW5jYXRlIF9fUCgoY29uc3QgY2hh
ciAqLCBvZmZfdCkpOw0KKyBpbnQJIHR0eXNsb3QgX19QKCh2b2lkKSk7DQor
IHVuc2lnbmVkIGludAkgdWFsYXJtIF9fUCgodW5zaWduZWQgaW50LCB1bnNp
Z25lZCBpbnQpKTsNCisgdm9pZAkgdXNsZWVwIF9fUCgodW5zaWduZWQgaW50
KSk7DQorIHZvaWQJKnZhbGxvYyBfX1AoKHNpemVfdCkpOwkJCS8qIG9ic29s
ZXRlZCBieSBtYWxsb2MoKSAqLw0KKyBwaWRfdAkgdmZvcmsgX19QKCh2b2lk
KSk7DQorICNlbmRpZiAvKiAhX1BPU0lYX1NPVVJDRSAqLw0KKyBfX0VORF9E
RUNMUw0KKyANCisgI2VuZGlmIC8qICFfVU5JU1REX0hfICovDQpkaWZmIC1j
ck4gcHRocmVhZHMvcHRocmVhZHMvZmRfa2Vybi5jIHB0aHJlYWRzLm5ldy9w
dGhyZWFkcy9mZF9rZXJuLmMNCioqKiBwdGhyZWFkcy9wdGhyZWFkcy9mZF9r
ZXJuLmMJV2VkIE9jdCAgNSAwNzo0Nzo1MyAxOTk0DQotLS0gcHRocmVhZHMu
bmV3L3B0aHJlYWRzL2ZkX2tlcm4uYwlNb24gSmFuIDMwIDE2OjAwOjM3IDE5
OTUNCioqKioqKioqKioqKioqKg0KKioqIDUxNyw1MjMgKioqKg0KLS0tIDUx
Nyw1MjcgLS0tLQ0KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KICAgKiBmY2hvd24oKQ0KICAgKi8NCisgI2lmbmRlZiBfX0ZyZWVCU0Rf
Xw0KICBpbnQgZmNob3duKGludCBmZCwgdWlkX3Qgb3duZXIsIGdpZF90IGdy
b3VwKQ0KKyAjZWxzZQ0KKyBpbnQgZmNob3duKGludCBmZCwgaW50IG93bmVy
LCBpbnQgZ3JvdXApDQorICNlbmRpZg0KICB7DQogIAlpbnQgcmV0Ow0KICAN
CioqKioqKioqKioqKioqKg0KKioqIDkyNCw5MjkgKioqKg0KLS0tIDkyOCw5
MzUgLS0tLQ0KICAJCQkJZmRfd2FpdF93cml0ZSA9IHB0aHJlYWRfcnVuOw0K
ICAJCQkJU0VNQVBIT1JFX1JFU0VUKGxvY2spOw0KICAJCQkJcmVzY2hlZHVs
ZShQU19GRFdfV0FJVCk7DQorIA0KKyAJCQkJdG1wbmFtZWxlbiA9IHNpemVv
Zih0bXBuYW1lKTsNCiAgDQogIAkJCQkvKiBPSyBub3cgbGV0cyBzZWUgaWYg
aXQgcmVhbGx5IHdvcmtlZCAqLw0KICAJCQkJaWYgKCgocmV0ID0gbWFjaGRl
cF9zeXNfZ2V0cGVlcm5hbWUoZmRfdGFibGVbZmRdLT5mZC5pLA0KZGlmZiAt
Y3JOIHB0aHJlYWRzL3B0aHJlYWRzL2ZkX2tlcm4uY34gcHRocmVhZHMubmV3
L3B0aHJlYWRzL2ZkX2tlcm4uY34NCioqKiBwdGhyZWFkcy9wdGhyZWFkcy9m
ZF9rZXJuLmN+CVRodSBKYW4gIDEgMDE6MDA6MDAgMTk3MA0KLS0tIHB0aHJl
YWRzLm5ldy9wdGhyZWFkcy9mZF9rZXJuLmN+CVdlZCBEZWMgMTQgMTg6MDI6
MjkgMTk5NA0KKioqKioqKioqKioqKioqDQoqKiogMCAqKioqDQotLS0gMSwx
MzcxIC0tLS0NCisgLyogPT09PSBmZF9rZXJuLmMgPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQorICAqIENvcHlyaWdodCAoYykgMTk5MywgMTk5NCBieSBDaHJpcyBQcm92
ZW56YW5vLCBwcm92ZW5AbWl0LmVkdQ0KKyAgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KKyAgKg0KKyAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zDQorICAqIGFyZSBtZXQ6DQorICAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0DQorICAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4N
CisgICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCisgICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQ0KKyAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLg0KKyAgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp
b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUNCisgICog
ICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50
Og0KKyAgKiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs
b3BlZCBieSBDaHJpcyBQcm92ZW56YW5vLg0KKyAgKiA0LiBUaGUgbmFtZSBv
ZiBDaHJpcyBQcm92ZW56YW5vIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgDQorICAqCSAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQor
ICAqCSAgcGVybWlzc2lvbi4NCisgICoNCisgICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBDSFJJUyBQUk9WRU5aQU5PIGBgQVMgSVMnJyBBTkQN
CisgICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQorICAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFDQorICAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQ0hSSVMgUFJPVkVOWkFOTyBCRSBMSUFCTEUg
Rk9SIEFOWSANCisgICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMN
CisgICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIA0KKyAgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUg0KKyAgKiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgDQorICAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCisgICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiANCisgICogU1VDSCBEQU1BR0Uu
DQorICAqDQorICAqIERlc2NyaXB0aW9uIDogRGVhbHMgd2l0aCB0aGUgdmFs
aWQga2VybmVsIGZkcy4NCisgICoNCisgICogIDEuMDAgOTMvMDkvMjcgcHJv
dmVuDQorICAqICAgICAgLVN0YXJ0ZWQgY29kaW5nIHRoaXMgZmlsZS4NCisg
ICoNCisgICoJMS4wMSA5My8xMS8xMyBwcm92ZW4NCisgICoJCS1UaGUgZnVu
Y3Rpb25zIHJlYWR2KCkgYW5kIHdyaXRldigpIGFkZGVkLg0KKyAgKi8NCisg
DQorICNpZm5kZWYgbGludA0KKyBzdGF0aWMgY29uc3QgY2hhciByY3NpZFtd
ID0gImZkX2tlcm4uYyx2IDEuNTAuMi4yIDE5OTQvMTAvMDUgMDY6NDc6NTMg
cHJvdmVuIEV4cCI7DQorICNlbmRpZg0KKyANCisgI2luY2x1ZGUgPHB0aHJl
YWQuaD4NCisgI2luY2x1ZGUgPHN5cy9jb21wYXQuaD4NCisgI2luY2x1ZGUg
PHN5cy90eXBlcy5oPg0KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KKyAj
aW5jbHVkZSA8c3lzL3N0YXQuaD4NCisgI2luY2x1ZGUgPHN5cy90aW1lLmg+
DQorICNpbmNsdWRlIDxzeXMvdWlvLmg+DQorICNpbmNsdWRlIDxzdGRhcmcu
aD4NCisgI2luY2x1ZGUgPHNpZ25hbC5oPg0KKyAjaW5jbHVkZSA8ZmNudGwu
aD4NCisgI2luY2x1ZGUgPGVycm5vLmg+DQorICNpbmNsdWRlIDxwdGhyZWFk
L3Bvc2l4Lmg+DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBWYXJpYWJsZXMgdXNlZCBieSBib3RoIGZkX2tlcm5fcG9s
bCBhbmQgZmRfa2Vybl93YWl0DQorICAqLw0KKyBzdGF0aWMgc3RydWN0IHB0
aHJlYWQgKmZkX3dhaXRfcmVhZCwgKmZkX3dhaXRfd3JpdGU7DQorIA0KKyAv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBmZF9rZXJu
X3BvbGwoKQ0KKyAgKg0KKyAgKiBDYWxsZWQgb25seSBmcm9tIGNvbnRleHRf
c3dpdGNoKCkuIFRoZSBrZXJuZWwgbXVzdCBiZSBsb2NrZWQuDQorICAqDQor
ICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGxpbmtlZCBsaXN0IG9mIHdhaXRp
bmcgcHRocmVhZHMsIE5PVCBhIHF1ZXVlLg0KKyAgKi8gDQorIHN0YXRpYyBz
ZW1hcGhvcmUgZmRfd2FpdF9sb2NrID0gU0VNQVBIT1JFX0NMRUFSOw0KKyAN
Cisgdm9pZCBmZF9rZXJuX3BvbGwoKQ0KKyB7DQorIAlzdHJ1Y3QgdGltZXZh
bCBfX2ZkX2tlcm5fcG9sbF90aW1lb3V0ID0geyAwLCAwIH07DQorIAlmZF9z
ZXQgZmRfc2V0X3JlYWQsIGZkX3NldF93cml0ZTsNCisgCXN0cnVjdCBwdGhy
ZWFkICoqcHRocmVhZDsNCisgCXNlbWFwaG9yZSAqbG9jazsNCisgCWludCBj
b3VudDsNCisgDQorIAlGRF9aRVJPKCZmZF9zZXRfcmVhZCk7DQorIAlGRF9a
RVJPKCZmZF9zZXRfd3JpdGUpOw0KKyAJLyogSWYgc29tZW9uZSBoYXMgdGhl
IGxvY2sgdGhlbiB0aGV5IGFyZSBpbiBSVU5OSU5HIHN0YXRlLCBqdXN0IHJl
dHVybiAqLw0KKyAJbG9jayA9ICZmZF93YWl0X2xvY2s7DQorIAlpZiAoU0VN
QVBIT1JFX1RFU1RfQU5EX1NFVChsb2NrKSkgew0KKyAJCXJldHVybjsNCisg
CX0NCisgCWlmIChmZF93YWl0X3JlYWQgfHwgZmRfd2FpdF93cml0ZSkgew0K
KyAJCWZvciAocHRocmVhZCA9ICZmZF93YWl0X3JlYWQ7ICpwdGhyZWFkOyBw
dGhyZWFkID0gJigoKnB0aHJlYWQpLT5uZXh0KSkgew0KKyAJCQlGRF9TRVQo
KCpwdGhyZWFkKS0+ZmQsICZmZF9zZXRfcmVhZCk7DQorIAkJfQ0KKyAJCWZv
ciAocHRocmVhZCA9ICZmZF93YWl0X3dyaXRlOyAqcHRocmVhZDsgcHRocmVh
ZCA9ICYoKCpwdGhyZWFkKS0+bmV4dCkpIHsNCisgCQkJRkRfU0VUKCgqcHRo
cmVhZCktPmZkLCAmZmRfc2V0X3dyaXRlKTsNCisgCQl9DQorIA0KKyAJCWlm
ICgoY291bnQgPSBtYWNoZGVwX3N5c19zZWxlY3QoZHRhYmxlc2l6ZSwgJmZk
X3NldF9yZWFkLA0KKyAJCSAgJmZkX3NldF93cml0ZSwgTlVMTCwgJl9fZmRf
a2Vybl9wb2xsX3RpbWVvdXQpKSA8IE9LKSB7DQorIAkJCWlmIChjb3VudCA9
PSAtRUlOVFIpIHsNCisgCQkJCVNFTUFQSE9SRV9SRVNFVChsb2NrKTsNCisg
CQkJCXJldHVybjsNCisgCQkJfQ0KKyAJCQlQQU5JQygpOw0KKyAJCX0NCisg
CQ0KKyAJCWZvciAocHRocmVhZCA9ICZmZF93YWl0X3JlYWQ7IGNvdW50ICYm
ICpwdGhyZWFkOyApIHsNCisgCQkJaWYgKEZEX0lTU0VUKCgqcHRocmVhZCkt
PmZkLCAmZmRfc2V0X3JlYWQpKSB7DQorIAkJCQkvKiBHZXQgbG9jayBvbiB0
aHJlYWQgKi8NCisgDQorIAkJCQkoKnB0aHJlYWQpLT5zdGF0ZSA9IFBTX1JV
Tk5JTkc7DQorIAkJCQkqcHRocmVhZCA9ICgqcHRocmVhZCktPm5leHQ7DQor
IAkJCQljb3VudC0tOw0KKyAJCQkJY29udGludWU7DQorIAkJCX0gDQorIAkJ
CXB0aHJlYWQgPSAmKCgqcHRocmVhZCktPm5leHQpOw0KKyAJCX0NCisgCQkJ
CQkNCisgCQlmb3IgKHB0aHJlYWQgPSAmZmRfd2FpdF93cml0ZTsgY291bnQg
JiYgKnB0aHJlYWQ7ICkgew0KKyAJCQlpZiAoRkRfSVNTRVQoKCpwdGhyZWFk
KS0+ZmQsICZmZF9zZXRfd3JpdGUpKSB7DQorIAkJCQlzZW1hcGhvcmUgKnBs
b2NrOw0KKyANCisgCQkJCS8qIEdldCBsb2NrIG9uIHRocmVhZCAqLw0KKyAJ
CQkJcGxvY2sgPSAmKCpwdGhyZWFkKS0+bG9jazsNCisgCQkJCWlmICghKFNF
TUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2spKSkgew0KKyAJCQkJCS8qIFRo
cmVhZCBsb2NrZWQsIHNraXAgaXQuICovDQorIAkJCQkJKCpwdGhyZWFkKS0+
c3RhdGUgPSBQU19SVU5OSU5HOw0KKyAJCQkJCSpwdGhyZWFkID0gKCpwdGhy
ZWFkKS0+bmV4dDsNCisgCQkJCQlTRU1BUEhPUkVfUkVTRVQocGxvY2spOw0K
KyAJCQkJfQ0KKyAJCQkJY291bnQtLTsNCisgCQkJCWNvbnRpbnVlOw0KKyAJ
CQl9IA0KKyAJCQlwdGhyZWFkID0gJigoKnB0aHJlYWQpLT5uZXh0KTsNCisg
CQl9DQorIAl9DQorIAlTRU1BUEhPUkVfUkVTRVQobG9jayk7DQorIH0NCisg
DQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIGZk
X2tlcm5fd2FpdCgpDQorICAqDQorICAqIENhbGxlZCB3aGVuIHRoZXJlIGlz
IG5vIGFjdGl2ZSB0aHJlYWQgdG8gcnVuLg0KKyAgKi8NCisgZXh0ZXJuIHN0
cnVjdCB0aW1ldmFsIF9fZmRfa2Vybl93YWl0X3RpbWVvdXQ7DQorIA0KKyB2
b2lkIGZkX2tlcm5fd2FpdCgpDQorIHsNCisgCWZkX3NldCBmZF9zZXRfcmVh
ZCwgZmRfc2V0X3dyaXRlOw0KKyAJc3RydWN0IHB0aHJlYWQgKipwdGhyZWFk
Ow0KKyAJc2lnc2V0X3Qgc2lnX3RvX2Jsb2NrOw0KKyAJaW50IGNvdW50Ow0K
KyANCisgCWlmIChmZF93YWl0X3JlYWQgfHwgZmRfd2FpdF93cml0ZSkgew0K
KyAJCUZEX1pFUk8oJmZkX3NldF9yZWFkKTsNCisgCQlGRF9aRVJPKCZmZF9z
ZXRfd3JpdGUpOw0KKyAJCWZvciAocHRocmVhZCA9ICZmZF93YWl0X3JlYWQ7
ICpwdGhyZWFkOyBwdGhyZWFkID0gJigoKnB0aHJlYWQpLT5uZXh0KSkgew0K
KyAJCQlGRF9TRVQoKCpwdGhyZWFkKS0+ZmQsICZmZF9zZXRfcmVhZCk7DQor
IAkJfQ0KKyAJCWZvciAocHRocmVhZCA9ICZmZF93YWl0X3dyaXRlOyAqcHRo
cmVhZDsgcHRocmVhZCA9ICYoKCpwdGhyZWFkKS0+bmV4dCkpIHsNCisgCQkJ
RkRfU0VUKCgqcHRocmVhZCktPmZkLCAmZmRfc2V0X3dyaXRlKTsNCisgCQl9
DQorIA0KKyAJCS8qIFR1cm4gb2ZmIGludGVycnVwdHMgZm9yIHJlYWwgd2hp
bGUgd2Ugc2V0IHRoZSB0aW1lci4gICovDQorIA0KKyAJCXNpZ2ZpbGxzZXQo
JnNpZ190b19ibG9jayk7DQorIAkJc2lncHJvY21hc2soU0lHX0JMT0NLLCAm
c2lnX3RvX2Jsb2NrLCBOVUxMKTsNCisgDQorIAkJbWFjaGRlcF91bnNldF90
aHJlYWRfdGltZXIoKTsgDQorIAkJX19mZF9rZXJuX3dhaXRfdGltZW91dC50
dl91c2VjID0gMDsNCisgCQlfX2ZkX2tlcm5fd2FpdF90aW1lb3V0LnR2X3Nl
YyA9IDM2MDA7DQorIA0KKyAJCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAm
c2lnX3RvX2Jsb2NrLCBOVUxMKTsNCisgDQorIAkJLyoNCisgCQkgKiBUaGVy
ZSBpcyBhIHNtYWxsIGJ1dCBmaW5pdGUgY2hhbmNlIHRoYXQgYW4gaW50ZXJy
dXB0IHdpbGwNCisgCQkgKiBvY2N1cmUgYmV0d2VlbiB0aGUgdW5ibG9jayBh
bmQgdGhlIHNlbGVjdC4gQmVjYXVzZSBvZiB0aGlzDQorIAkJICogc2lnX2hh
bmRsZXJfcmVhbCgpIHNldHMgdGhlIHZhbHVlIG9mIF9fZmRfa2Vybl93YWl0
X3RpbWVvdXQNCisgCQkgKiB0byB6ZXJvIGNhdXNpbmcgdGhlIHNlbGVjdCB0
byBkbyBhIHBvbGwgaW5zdGVhZCBvZiBhIHdhaXQuDQorIAkJICovDQorIA0K
KyAJCXdoaWxlICgoY291bnQgPSBtYWNoZGVwX3N5c19zZWxlY3QoZHRhYmxl
c2l6ZSwgJmZkX3NldF9yZWFkLA0KKyAJCSAgJmZkX3NldF93cml0ZSwgTlVM
TCwgJl9fZmRfa2Vybl93YWl0X3RpbWVvdXQpKSA8IE9LKSB7DQorIAkJCWlm
IChjb3VudCA9PSAtRUlOVFIpIHsNCisgCQkJCXJldHVybjsNCisgCQkJfQ0K
KyAJCQlQQU5JQygpOw0KKyAJCX0NCisgCQ0KKyAJCWZvciAocHRocmVhZCA9
ICZmZF93YWl0X3JlYWQ7IGNvdW50ICYmICpwdGhyZWFkOyApIHsNCisgCQkJ
aWYgKEZEX0lTU0VUKCgqcHRocmVhZCktPmZkLCAmZmRfc2V0X3JlYWQpKSB7
DQorIAkJCQkvKiBHZXQgbG9jayBvbiB0aHJlYWQgKi8NCisgDQorIAkJCQko
KnB0aHJlYWQpLT5zdGF0ZSA9IFBTX1JVTk5JTkc7DQorIAkJCQkqcHRocmVh
ZCA9ICgqcHRocmVhZCktPm5leHQ7DQorIAkJCQljb3VudC0tOw0KKyAJCQkJ
Y29udGludWU7DQorIAkJCX0gDQorIAkJCXB0aHJlYWQgPSAmKCgqcHRocmVh
ZCktPm5leHQpOw0KKyAJCX0NCisgCQkJCQkNCisgCQlmb3IgKHB0aHJlYWQg
PSAmZmRfd2FpdF93cml0ZTsgY291bnQgJiYgKnB0aHJlYWQ7ICkgew0KKyAJ
CQlpZiAoRkRfSVNTRVQoKCpwdGhyZWFkKS0+ZmQsICZmZF9zZXRfd3JpdGUp
KSB7DQorIAkJCQlzZW1hcGhvcmUgKnBsb2NrOw0KKyANCisgCQkJCS8qIEdl
dCBsb2NrIG9uIHRocmVhZCAqLw0KKyAJCQkJcGxvY2sgPSAmKCpwdGhyZWFk
KS0+bG9jazsNCisgCQkJCWlmICghKFNFTUFQSE9SRV9URVNUX0FORF9TRVQo
cGxvY2spKSkgew0KKyAJCQkJCS8qIFRocmVhZCBsb2NrZWQsIHNraXAgaXQu
ICovDQorIAkJCQkJKCpwdGhyZWFkKS0+c3RhdGUgPSBQU19SVU5OSU5HOw0K
KyAJCQkJCSpwdGhyZWFkID0gKCpwdGhyZWFkKS0+bmV4dDsNCisgCQkJCQlT
RU1BUEhPUkVfUkVTRVQocGxvY2spOw0KKyAJCQkJfQ0KKyAJCQkJY291bnQt
LTsNCisgCQkJCWNvbnRpbnVlOw0KKyAJCQl9IA0KKyAJCQlwdGhyZWFkID0g
JigoKnB0aHJlYWQpLT5uZXh0KTsNCisgCQl9DQorIAl9IGVsc2Ugew0KKyAJ
CS8qIE5vIHRocmVhZHMsIHdhaXRpbmcgb24gSS9PLCBkbyBhIHNpZ3N1c3Bl
bmQgKi8NCisgCQlzaWdfaGFuZGxlcl9wYXVzZSgpOw0KKyAJfQ0KKyB9DQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBT
cGVjaWFsIE5vdGU6IEFsbCBvcGVyYXRpb25zIHJldHVybiB0aGUgZXJybm8g
YXMgYSBuZWdhdGl2ZSBvZiB0aGUgZXJybm8NCisgICogbGlzdGVkIGluIGVy
cm5vLmgNCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCisg
DQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIHJl
YWQoKQ0KKyAgKi8NCisgc3NpemVfdCBfX2ZkX2tlcm5fcmVhZCh1bmlvbiBm
ZF9kYXRhIGZkX2RhdGEsIGludCBmbGFncywgdm9pZCAqYnVmLA0KKyAgIHNp
emVfdCBuYnl0ZXMpDQorIHsNCisgCXNlbWFwaG9yZSAqbG9jaywgKnBsb2Nr
Ow0KKyAJaW50IGZkID0gZmRfZGF0YS5pOw0KKyAJaW50IHJldDsNCisgDQor
IAl3aGlsZSAoKHJldCA9IG1hY2hkZXBfc3lzX3JlYWQoZmQsIGJ1ZiwgbmJ5
dGVzKSkgPCBPSykgeyANCisgCQlpZiAoIShmbGFncyAmIF9fRkRfTk9OQkxP
Q0spICYmDQorIAkJICAoKHJldCA9PSAtRVdPVUxEQkxPQ0spIHx8IChyZXQg
PT0gLUVBR0FJTikpKSB7DQorIAkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJ
bG9jayA9ICZmZF93YWl0X2xvY2s7DQorIAkJCXdoaWxlIChTRU1BUEhPUkVf
VEVTVF9BTkRfU0VUKGxvY2spKSB7DQorIAkJCQlwdGhyZWFkX3lpZWxkKCk7
DQorIAkJCX0NCisgDQorIAkJCS8qIExvY2sgcHRocmVhZCAqLw0KKyAJCQlw
bG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQl3aGlsZSAoU0VN
QVBIT1JFX1RFU1RfQU5EX1NFVChwbG9jaykpIHsNCisgCQkJCXB0aHJlYWRf
eWllbGQoKTsNCisgCQkJfQ0KKyANCisgCQkJLyogcXVldWUgcHRocmVhZCBm
b3IgYSBGRFJfV0FJVCAqLw0KKyAJCQlwdGhyZWFkX3J1bi0+bmV4dCA9IGZk
X3dhaXRfcmVhZDsNCisgCQkJZmRfd2FpdF9yZWFkID0gcHRocmVhZF9ydW47
DQorIAkJCXB0aHJlYWRfcnVuLT5mZCA9IGZkOw0KKyAJCQlTRU1BUEhPUkVf
UkVTRVQobG9jayk7DQorIAkJCXJlc2NoZWR1bGUoUFNfRkRSX1dBSVQpOw0K
KyAJCX0gZWxzZSB7DQorIAkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1yZXQ7
DQorIAkJCXJldCA9IE5PVE9LOw0KKyAJCQlicmVhazsNCisgCQl9DQorIAl9
DQorIAlyZXR1cm4ocmV0KTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCisgICogcmVhZHYoKQ0KKyAgKi8NCisgaW50
IF9fZmRfa2Vybl9yZWFkdih1bmlvbiBmZF9kYXRhIGZkX2RhdGEsIGludCBm
bGFncywgc3RydWN0IGlvdmVjICppb3YsDQorICAgaW50IGlvdmNudCkNCisg
ew0KKyAJc2VtYXBob3JlICpsb2NrLCAqcGxvY2s7DQorIAlpbnQgZmQgPSBm
ZF9kYXRhLmk7DQorIAlpbnQgcmV0Ow0KKyANCisgCXdoaWxlICgocmV0ID0g
bWFjaGRlcF9zeXNfcmVhZHYoZmQsIGlvdiwgaW92Y250KSkgPCBPSykgeyAN
CisgCQlpZiAoIShmbGFncyAmIF9fRkRfTk9OQkxPQ0spICYmDQorIAkJICAo
KHJldCA9PSAtRVdPVUxEQkxPQ0spIHx8IChyZXQgPT0gLUVBR0FJTikpKSB7
DQorIAkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJbG9jayA9ICZmZF93YWl0
X2xvY2s7DQorIAkJCXdoaWxlIChTRU1BUEhPUkVfVEVTVF9BTkRfU0VUKGxv
Y2spKSB7DQorIAkJCQlwdGhyZWFkX3lpZWxkKCk7DQorIAkJCX0NCisgDQor
IAkJCS8qIExvY2sgcHRocmVhZCAqLw0KKyAJCQlwbG9jayA9ICYocHRocmVh
ZF9ydW4tPmxvY2spOw0KKyAJCQl3aGlsZSAoU0VNQVBIT1JFX1RFU1RfQU5E
X1NFVChwbG9jaykpIHsNCisgCQkJCXB0aHJlYWRfeWllbGQoKTsNCisgCQkJ
fQ0KKyANCisgCQkJLyogcXVldWUgcHRocmVhZCBmb3IgYSBGRFJfV0FJVCAq
Lw0KKyAJCQlwdGhyZWFkX3J1bi0+bmV4dCA9IGZkX3dhaXRfcmVhZDsNCisg
CQkJZmRfd2FpdF9yZWFkID0gcHRocmVhZF9ydW47DQorIAkJCXB0aHJlYWRf
cnVuLT5mZCA9IGZkOw0KKyAJCQlTRU1BUEhPUkVfUkVTRVQobG9jayk7DQor
IAkJCXJlc2NoZWR1bGUoUFNfRkRSX1dBSVQpOw0KKyAJCX0gZWxzZSB7DQor
IAkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1yZXQ7DQorIAkJCXJldCA9IE5P
VE9LOw0KKyAJCQlicmVhazsNCisgCQl9DQorIAl9DQorIAlyZXR1cm4ocmV0
KTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCisgICogd3JpdGUoKQ0KKyAgKi8NCisgc3NpemVfdCBfX2ZkX2tlcm5f
d3JpdGUodW5pb24gZmRfZGF0YSBmZF9kYXRhLCBpbnQgZmxhZ3MsIGNvbnN0
IHZvaWQgKmJ1ZiwNCisgICBzaXplX3QgbmJ5dGVzKQ0KKyB7DQorIAlzZW1h
cGhvcmUgKmxvY2ssICpwbG9jazsNCisgCWludCBmZCA9IGZkX2RhdGEuaTsN
CisgCWludCByZXQ7DQorIA0KKyAgICAgd2hpbGUgKChyZXQgPSBtYWNoZGVw
X3N5c193cml0ZShmZCwgYnVmLCBuYnl0ZXMpKSA8IE9LKSB7IA0KKyAJCWlm
ICghKGZsYWdzICYgX19GRF9OT05CTE9DSykgJiYNCisgICAgICAgICAgICgo
cmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJldCA9PSAtRUFHQUlOKSkpIHsN
CisgCQkJLyogTG9jayBxdWV1ZSAqLw0KKyAJCQlsb2NrID0gJmZkX3dhaXRf
bG9jazsNCisgCQkJd2hpbGUgKFNFTUFQSE9SRV9URVNUX0FORF9TRVQobG9j
aykpIHsNCisgCQkJCXB0aHJlYWRfeWllbGQoKTsNCisgCQkJfQ0KKyANCisg
CQkJLyogTG9jayBwdGhyZWFkICovDQorIAkJCXBsb2NrID0gJihwdGhyZWFk
X3J1bi0+bG9jayk7DQorIAkJCXdoaWxlIChTRU1BUEhPUkVfVEVTVF9BTkRf
U0VUKHBsb2NrKSkgew0KKyAJCQkJcHRocmVhZF95aWVsZCgpOw0KKyAJCQl9
DQorIA0KKyAJCQkvKiBxdWV1ZSBwdGhyZWFkIGZvciBhIEZEV19XQUlUICov
DQorIAkJCXB0aHJlYWRfcnVuLT5uZXh0ID0gZmRfd2FpdF93cml0ZTsNCisg
CQkJZmRfd2FpdF93cml0ZSA9IHB0aHJlYWRfcnVuOw0KKyAJCQlwdGhyZWFk
X3J1bi0+ZmQgPSBmZDsNCisgCQkJU0VNQVBIT1JFX1JFU0VUKGxvY2spOw0K
KyAJCQlyZXNjaGVkdWxlKFBTX0ZEV19XQUlUKTsNCisgICAgICAgICB9IGVs
c2Ugew0KKyAJCQlwdGhyZWFkX3J1bi0+ZXJyb3IgPSAtcmV0Ow0KKyAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICB9DQorICAgICB9DQorICAgICBy
ZXR1cm4ocmV0KTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCisgICogd3JpdGV2KCkNCisgICovDQorIGludCBfX2Zk
X2tlcm5fd3JpdGV2KHVuaW9uIGZkX2RhdGEgZmRfZGF0YSwgaW50IGZsYWdz
LCBzdHJ1Y3QgaW92ZWMgKmlvdiwNCisgICBpbnQgaW92Y250KQ0KKyB7DQor
IAlzZW1hcGhvcmUgKmxvY2ssICpwbG9jazsNCisgCWludCBmZCA9IGZkX2Rh
dGEuaTsNCisgCWludCByZXQ7DQorIA0KKyAgICAgd2hpbGUgKChyZXQgPSBt
YWNoZGVwX3N5c193cml0ZXYoZmQsIGlvdiwgaW92Y250KSkgPCBPSykgeyAN
CisgCQlpZiAoIShmbGFncyAmIF9fRkRfTk9OQkxPQ0spICYmDQorICAgICAg
ICAgICAoKHJldCA9PSAtRVdPVUxEQkxPQ0spIHx8IChyZXQgPT0gLUVBR0FJ
TikpKSB7DQorIAkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJbG9jayA9ICZm
ZF93YWl0X2xvY2s7DQorIAkJCXdoaWxlIChTRU1BUEhPUkVfVEVTVF9BTkRf
U0VUKGxvY2spKSB7DQorIAkJCQlwdGhyZWFkX3lpZWxkKCk7DQorIAkJCX0N
CisgDQorIAkJCS8qIExvY2sgcHRocmVhZCAqLw0KKyAJCQlwbG9jayA9ICYo
cHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQl3aGlsZSAoU0VNQVBIT1JFX1RF
U1RfQU5EX1NFVChwbG9jaykpIHsNCisgCQkJCXB0aHJlYWRfeWllbGQoKTsN
CisgCQkJfQ0KKyANCisgCQkJLyogcXVldWUgcHRocmVhZCBmb3IgYSBGRFdf
V0FJVCAqLw0KKyAJCQlwdGhyZWFkX3J1bi0+bmV4dCA9IGZkX3dhaXRfd3Jp
dGU7DQorIAkJCWZkX3dhaXRfd3JpdGUgPSBwdGhyZWFkX3J1bjsNCisgCQkJ
cHRocmVhZF9ydW4tPmZkID0gZmQ7DQorIAkJCVNFTUFQSE9SRV9SRVNFVChs
b2NrKTsNCisgCQkJcmVzY2hlZHVsZShQU19GRFdfV0FJVCk7DQorICAgICAg
ICAgfSBlbHNlIHsNCisgCQkJcHRocmVhZF9ydW4tPmVycm9yID0gLXJldDsN
CisgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgfQ0KKyAgICAgfQ0K
KyAgICAgcmV0dXJuKHJldCk7DQorIH0NCisgDQorIC8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQorICAqIEZvciBibG9ja2luZyB2ZXJzaW9u
IHdlIHJlYWxseSBzaG91bGQgc2V0IGFuIGludGVycnVwdA0KKyAgKiBmY250
bCgpDQorICAqLw0KKyBpbnQgX19mZF9rZXJuX2ZjbnRsKHVuaW9uIGZkX2Rh
dGEgZmRfZGF0YSwgaW50IGZsYWdzLCBpbnQgY21kLCBpbnQgYXJnKQ0KKyB7
DQorIAlpbnQgZmQgPSBmZF9kYXRhLmk7DQorIA0KKyAJcmV0dXJuKG1hY2hk
ZXBfc3lzX2ZjbnRsKGZkLCBjbWQsIGFyZykpOw0KKyB9DQorIA0KKyAvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBjbG9zZSgpDQor
ICAqLw0KKyBpbnQgX19mZF9rZXJuX2Nsb3NlKHVuaW9uIGZkX2RhdGEgZmRf
ZGF0YSwgaW50IGZsYWdzKQ0KKyB7DQorIAlpbnQgZmQgPSBmZF9kYXRhLmk7
DQorIA0KKyAJcmV0dXJuKG1hY2hkZXBfc3lzX2Nsb3NlKGZkKSk7DQorIH0N
CisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAq
IGxzZWVrKCkNCisgICovDQorIG9mZl90IF9fZmRfa2Vybl9sc2VlayhpbnQg
ZmQsIGludCBmbGFncywgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQ0KKyB7
DQorIAlyZXR1cm4obWFjaGRlcF9zeXNfbHNlZWsoZmQsIG9mZnNldCwgd2hl
bmNlKSk7DQorIH0NCisgDQorIC8qDQorICAqIEZpbGUgZGVzY3JpcHRvciBv
cGVyYXRpb25zDQorICAqLw0KKyBleHRlcm4gbWFjaGRlcF9zeXNfY2xvc2Uo
KTsNCisgDQorIC8qIE5vcm1hbCBmaWxlIG9wZXJhdGlvbnMgKi8NCisgc3Rh
dGljIHN0cnVjdCBmZF9vcHMgX19mZF9rZXJuX29wcyA9IHsNCisgCV9fZmRf
a2Vybl93cml0ZSwgX19mZF9rZXJuX3JlYWQsIF9fZmRfa2Vybl9jbG9zZSwg
X19mZF9rZXJuX2ZjbnRsLA0KKyAJX19mZF9rZXJuX3dyaXRldiwgX19mZF9r
ZXJuX3JlYWR2LCBfX2ZkX2tlcm5fbHNlZWsNCisgfTsNCisgDQorIC8qIE5G
UyBmaWxlIG9wcGVyYXRpb25zICovDQorIA0KKyAvKiBGSUZPIGZpbGUgb3Bw
ZXJhdGlvbnMgKi8NCisgDQorIC8qIERldmljZSBvcGVyYXRpb25zICovDQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBv
cGVuKCkNCisgICoNCisgICogQmVjYXVzZSBvcGVuIGNvdWxkIHBvdGVudGlh
bGx5IGJsb2NrIG9wZW5pbmcgYSBmaWxlIGZyb20gYSByZW1vdGUNCisgICog
c3lzdGVtLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2FsbCB3aWxsIHRp
bWVvdXQuIFdlIHRoZW4gdHJ5IGFuZCBvcGVuDQorICAqIHRoZSBmaWxlLCBh
bmQgc3RhdCB0aGUgZmlsZSB0byBkZXRlcm1pbmUgd2hhdCBvcGVyYXRpb25z
IHdlIHNob3VsZA0KKyAgKiBhc3NvY2lhdGUgd2l0aCB0aGUgZmQuDQorICAq
DQorICAqIFRoaXMgaXMgbm90IGRvbmUgeWV0DQorICAqDQorICAqIEEgcmVn
dWxhciBmaWxlIG9uIHRoZSBsb2NhbCBzeXN0ZW0gbmVlZHMgbm8gc3BlY2lh
bCB0cmVhdG1lbnQuDQorICAqLw0KKyBpbnQgb3Blbihjb25zdCBjaGFyICpw
YXRoLCBpbnQgZmxhZ3MsIC4uLikNCisgew0KKyAJaW50IGZkLCBtb2RlLCBm
ZF9rZXJuOw0KKyAJc3RydWN0IHN0YXQgc3RhdF9idWY7DQorIAl2YV9saXN0
IGFwOw0KKyANCisgCS8qIElmIHB0aHJlYWQgc2NoZWR1bGluZyA9PSBGSUZP
IHNldCBhIHZpcnR1YWwgdGltZXIgKi8NCisgCWlmIChmbGFncyAmIE9fQ1JF
QVQpIHsNCisgCQl2YV9zdGFydChhcCwgZmxhZ3MpOw0KKyAJCW1vZGUgPSB2
YV9hcmcoYXAsIGludCk7DQorIAkJdmFfZW5kKGFwKTsNCisgCX0gZWxzZSB7
DQorIAkJbW9kZSA9IDA7DQorIAl9DQorIA0KKyAJaWYgKCEoKGZkID0gZmRf
YWxsb2NhdGUoKSkgPCBPSykpIHsNCisgCQlmZF90YWJsZVtmZF0tPmZsYWdz
ID0gZmxhZ3M7DQorIAkJZmxhZ3MgfD0gX19GRF9OT05CTE9DSzsNCisgDQor
IAkJaWYgKCEoKGZkX2tlcm4gPSBtYWNoZGVwX3N5c19vcGVuKHBhdGgsIGZs
YWdzLCBtb2RlKSkgPCBPSykpIHsNCisgDQorIAkJCS8qIGZzdGF0IHRoZSBm
aWxlIHRvIGRldGVybWluZSB3aGF0IHR5cGUgaXQgaXMgKi8NCisgCQkJaWYg
KG1hY2hkZXBfc3lzX2ZzdGF0KGZkX2tlcm4sICZzdGF0X2J1ZikpIHsNCisg
CQkJCVBBTklDKCk7DQorIAkJCX0NCisgCQkJaWYgKFNfSVNSRUcoc3RhdF9i
dWYuc3RfbW9kZSkpIHsNCisgCQkJCWZkX3RhYmxlW2ZkXS0+b3BzID0gJihf
X2ZkX2tlcm5fb3BzKTsNCisgCQkJCWZkX3RhYmxlW2ZkXS0+dHlwZSA9IEZE
X0hBTEZfRFVQTEVYOw0KKyAJCQl9IGVsc2Ugew0KKyAJCQkJZmRfdGFibGVb
ZmRdLT5vcHMgPSAmKF9fZmRfa2Vybl9vcHMpOw0KKyAJCQkJZmRfdGFibGVb
ZmRdLT50eXBlID0gRkRfRlVMTF9EVVBMRVg7DQorIAkJCX0NCisgCQkJZmRf
dGFibGVbZmRdLT5mZC5pID0gZmRfa2VybjsgDQorIAkJCXJldHVybihmZCk7
DQorIAkJfQ0KKyANCisgCQlwdGhyZWFkX3J1bi0+ZXJyb3IgPSAtIGZkX2tl
cm47DQorIAkJZmRfdGFibGVbZmRdLT5jb3VudCA9IDA7DQorIAl9DQorIAly
ZXR1cm4oTk9UT0spOw0KKyB9DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KKyAgKiBjcmVhdGUoKQ0KKyAgKi8NCisgaW50IGNy
ZWF0ZShjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSkNCisgew0KKyAJ
aW50IGZkLCBmZF9rZXJuOw0KKyANCisgCWlmICghKChmZCA9IGZkX2FsbG9j
YXRlKCkpIDwgT0spKSB7DQorIAkJZmRfdGFibGVbZmRdLT5mbGFncyA9IE9f
V1JPTkxZOw0KKyANCisgCQlpZiAoISgoZmRfa2VybiA9IG1hY2hkZXBfc3lz
X2NyZWF0KHBhdGgsIG1vZGUpKSA8IE9LKSkgew0KKyAJCQltYWNoZGVwX3N5
c19mY250bChmZCwgRl9TRVRGTCwgZmRfdGFibGVbZmRdLT5mbGFncyB8IF9f
RkRfTk9OQkxPQ0spOw0KKyAJCQlmZF90YWJsZVtmZF0tPnR5cGUgPSBGRF9I
QUxGX0RVUExFWDsNCisgCQkJZmRfdGFibGVbZmRdLT5vcHMgPSAmKF9fZmRf
a2Vybl9vcHMpOw0KKyAJCQlmZF90YWJsZVtmZF0tPmZkLmkgPSBmZF9rZXJu
OyANCisgCQkJcmV0dXJuKGZkKTsNCisgCQl9DQorIA0KKyAJCXB0aHJlYWRf
cnVuLT5lcnJvciA9IC0gZmRfa2VybjsNCisgCQlmZF90YWJsZVtmZF0tPmNv
dW50ID0gMDsNCisgCX0NCisgCXJldHVybihOT1RPSyk7DQorIH0NCisgDQor
IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIGNyZWF0
KCkNCisgICovDQorIGludCBjcmVhdChjb25zdCBjaGFyICpwYXRoLCBtb2Rl
X3QgbW9kZSkNCisgew0KKyAJY3JlYXRlKHBhdGgsIG1vZGUpOw0KKyB9DQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBm
Y2hvd24oKQ0KKyAgKi8NCisgI2lmIDANCisgaW50IGZjaG93bihpbnQgZmQs
IHVpZF90IG93bmVyLCBnaWRfdCBncm91cCkNCisgI2Vsc2UNCisgaW50IGZj
aG93bihpbnQgZmQsIGludCBvd25lciwgaW50IGdyb3VwKQ0KKyAjZW5kaWYN
Cisgew0KKyAJaW50IHJldDsNCisgDQorIAlpZiAoKHJldCA9IGZkX2xvY2so
ZmQsIEZEX1dSSVRFKSkgPT0gT0spIHsNCisgCQlpZiAoKHJldCA9IG1hY2hk
ZXBfc3lzX2ZjaG93bihmZF90YWJsZVtmZF0tPmZkLmksIG93bmVyLCBncm91
cCkpIDwgT0spIHsNCisgCQkJU0VUX0VSUk5PKC1yZXQpOw0KKyAJCX0NCisg
CQlmZF91bmxvY2soZmQsIEZEX1dSSVRFKTsNCisgCX0NCisgCXJldHVybihy
ZXQpOw0KKyB9DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KKyAgKiBmY2htb2QoKQ0KKyAgKi8NCisgaW50IGZjaG1vZChpbnQg
ZmQsIG1vZGVfdCBtb2RlKQ0KKyB7DQorIAlpbnQgcmV0Ow0KKyANCisgCWlm
ICgocmV0ID0gZmRfbG9jayhmZCwgRkRfV1JJVEUpKSA9PSBPSykgew0KKyAJ
CWlmICgocmV0ID0gbWFjaGRlcF9zeXNfZmNobW9kKGZkX3RhYmxlW2ZkXS0+
ZmQuaSwgbW9kZSkpIDwgT0spIHsNCisgCQkJU0VUX0VSUk5PKC1yZXQpOw0K
KyAJCX0NCisgCQlmZF91bmxvY2soZmQsIEZEX1dSSVRFKTsNCisgCX0NCisg
CXJldHVybihyZXQpOw0KKyB9DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KKyAgKiBwaXBlKCkNCisgICovDQorIGludCBwaXBl
KGludCBmZHNbMl0pDQorIHsNCisgCWludCBrZmRzWzJdOw0KKyAJaW50IHJl
dDsNCisgDQorIAlpZiAoKGZkc1swXSA9IGZkX2FsbG9jYXRlKCkpID49IE9L
KSB7DQorIAkJaWYgKChmZHNbMV0gPSBmZF9hbGxvY2F0ZSgpKSA+PSBPSykg
ew0KKyAJCQlpZiAoKHJldCA9IG1hY2hkZXBfc3lzX3BpcGUoa2ZkcykpID49
IE9LKSB7DQorIAkJCQlmZF90YWJsZVtmZHNbMF1dLT5mbGFncyA9IG1hY2hk
ZXBfc3lzX2ZjbnRsKGtmZHNbMF0sIEZfR0VURkwsIE5VTEwpOw0KKyAJCQkJ
bWFjaGRlcF9zeXNfZmNudGwoa2Zkc1swXSwgRl9TRVRGTCwgZmRfdGFibGVb
ZmRzWzBdXS0+ZmxhZ3MgfCBfX0ZEX05PTkJMT0NLKTsNCisgCQkJCWZkX3Rh
YmxlW2Zkc1sxXV0tPmZsYWdzID0gbWFjaGRlcF9zeXNfZmNudGwoa2Zkc1sx
XSwgRl9HRVRGTCwgTlVMTCk7DQorIAkJCQltYWNoZGVwX3N5c19mY250bChr
ZmRzWzFdLCBGX1NFVEZMLCBmZF90YWJsZVtmZHNbMV1dLT5mbGFncyB8IF9f
RkRfTk9OQkxPQ0spOw0KKyANCisgCQkJCWZkX3RhYmxlW2Zkc1swXV0tPm9w
cyA9ICYoX19mZF9rZXJuX29wcyk7DQorIAkJCQlmZF90YWJsZVtmZHNbMV1d
LT5vcHMgPSAmKF9fZmRfa2Vybl9vcHMpOw0KKyANCisgCQkJCS8qIE5vdCBy
ZWFsbHkgZnVsbCBkdXBsZXggYnV0IC4uLiAqLw0KKyAJCQkJZmRfdGFibGVb
ZmRzWzBdXS0+dHlwZSA9IEZEX0ZVTExfRFVQTEVYOw0KKyAJCQkJZmRfdGFi
bGVbZmRzWzFdXS0+dHlwZSA9IEZEX0ZVTExfRFVQTEVYOw0KKyANCisgCQkJ
CWZkX3RhYmxlW2Zkc1swXV0tPmZkLmkgPSBrZmRzWzBdOw0KKyAJCQkJZmRf
dGFibGVbZmRzWzFdXS0+ZmQuaSA9IGtmZHNbMV07DQorIA0KKyAJCQkJcmV0
dXJuKE9LKTsNCisgCQkJfSBlbHNlIHsNCisgCQkJCSBwdGhyZWFkX3J1bi0+
ZXJyb3IgPSAtIHJldDsNCisgCQkJfQ0KKyAJCQlmZF90YWJsZVtmZHNbMV1d
LT5jb3VudCA9IDA7DQorIAkJfQ0KKyAJCWZkX3RhYmxlW2Zkc1swXV0tPmNv
dW50ID0gMDsNCisgCX0NCisgCXJldHVybihOT1RPSyk7DQorIH0NCisgDQor
IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIGZkX2tl
cm5fcmVzZXQoKQ0KKyAgKiBDaGFuZ2UgdGhlIGZjbnRsIGJsb2NraW5nIGZs
YWcgYmFjayB0byBOT05CTE9DS0lORy4gVGhpcyBzaG91bGQgb25seQ0KKyAg
KiBiZSBjYWxsZWQgYWZ0ZXIgYSBmb3JrLg0KKyAgKi8NCisgdm9pZCBmZF9r
ZXJuX3Jlc2V0KGludCBmZCkNCisgew0KKyAJc3dpdGNoIChmZF90YWJsZVtm
ZF0tPnR5cGUpIHsNCisgCWNhc2UgRkRfVEVTVF9IQUxGX0RVUExFWDoNCisg
CQltYWNoZGVwX3N5c19mY250bChmZF90YWJsZVtmZF0tPmZkLmksIEZfU0VU
RkwsDQorICAgICAgICAgICBmZF90YWJsZVtmZF0tPmZsYWdzIHwgX19GRF9O
T05CTE9DSyk7DQorIAkJZmRfdGFibGVbZmRdLT50eXBlID0gRkRfSEFMRl9E
VVBMRVg7DQorIAkJYnJlYWs7DQorIAljYXNlIEZEX1RFU1RfRlVMTF9EVVBM
RVg6DQorIAkJbWFjaGRlcF9zeXNfZmNudGwoZmRfdGFibGVbZmRdLT5mZC5p
LCBGX1NFVEZMLA0KKyAJCSAgZmRfdGFibGVbZmRdLT5mbGFncyB8IF9fRkRf
Tk9OQkxPQ0spOw0KKyAJCWZkX3RhYmxlW2ZkXS0+dHlwZSA9IEZEX0ZVTExf
RFVQTEVYOw0KKyAJCWJyZWFrOw0KKyAJZGVmYXVsdDoNCisgCQlicmVhazsN
CisgCX0NCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCisgICogZmRfa2Vybl9pbml0KCkNCisgICoNCisgICogQXNzdW1l
IHRoZSBlbnRyeSBpcyBsb2NrZWQgYmVmb3JlIHJvdXRpbmUgaXMgaW52b2tl
ZA0KKyAgKg0KKyAgKiBUaGlzIG1heSBjaGFuZ2UuIFRoZSBwcm9ibGVtIGlz
IHNldHRpbmcgdGhlIGZkIHRvIG5vbmJsb2NraW5nIGNoYW5nZXMNCisgICog
dGhlIHBhcmVudHMgZmQgdG9vLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNp
cmVkIHJlc3VsdC4NCisgICoNCisgICogTmV3IGFkZGVkIGZlYXR1cmU6IElm
IHRoZSBmZCBpbiBxdWVzdGlvbiBpcyBhIHR0eSB0aGVuIHdlIG9wZW4gaXQg
YWdhaW4NCisgICogYW5kIGNsb3NlIHRoZSBvcmlnaW5hbCwgdGhpcyB3YXkg
d2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGUNCisgICogZmQgYmVp
bmcgTk9OQkxPQ0tJTkcgdG8gdGhlIG91dHNpZGUgd29ybGQuDQorICAqLw0K
KyB2b2lkIGZkX2tlcm5faW5pdChpbnQgZmQpDQorIHsNCisgCWlmICgoZmRf
dGFibGVbZmRdLT5mbGFncyA9IG1hY2hkZXBfc3lzX2ZjbnRsKGZkLCBGX0dF
VEZMLCBOVUxMKSkgPj0gT0spIHsNCisgCQlpZiAoaXNhdHR5KGZkKSkgew0K
KyAJCQlpbnQgbmV3X2ZkOw0KKyANCisgCQkJaWYgKChuZXdfZmQgPSBtYWNo
ZGVwX3N5c19vcGVuKHR0eW5hbWVfYmFzaWMoZmQpLCBPX1JEV1IpKSA+PSBP
Sykgew0KKyAJCQkJaWYgKG1hY2hkZXBfc3lzX2R1cDIobmV3X2ZkLCBmZCkg
PT0gT0spIHsNCisgCQkJCQkvKiBTaG91bGQgcHJpbnQgYSB3YXJuaW5nICov
DQorIA0KKyAJCQkJCS8qIFNob3VsZCBhbHNvIHNldCB0aGUgZmxhZ3MgdG8g
dGhhdCBvZiBvcGVuZWQgb3V0c2lkZSBvZg0KKyAJCQkJCXByb2Nlc3MgKi8N
CisgCQkJCX0NCisgCQkJCW1hY2hkZXBfc3lzX2Nsb3NlKG5ld19mZCk7DQor
IAkJCX0NCisgCQl9DQorIAkJLyogV2UgZG8gdGhlc2UgdGhpbmdzIHJlZ2F1
cmRsZXNzIG9mIHRoZSBhYm92ZSByZXN1bHRzICovDQorIAkJbWFjaGRlcF9z
eXNfZmNudGwoZmQsIEZfU0VURkwsIGZkX3RhYmxlW2ZkXS0+ZmxhZ3MgfCBf
X0ZEX05PTkJMT0NLKTsNCisgCQlmZF90YWJsZVtmZF0tPm9wcyAJPSAmKF9f
ZmRfa2Vybl9vcHMpOw0KKyAJCWZkX3RhYmxlW2ZkXS0+dHlwZSAJPSBGRF9I
QUxGX0RVUExFWDsNCisgCQlmZF90YWJsZVtmZF0tPmZkLmkgCT0gZmQ7DQor
IAkJZmRfdGFibGVbZmRdLT5jb3VudCA9IDE7DQorIA0KKyAJfQ0KKyB9DQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBm
ZF9rZXJuX2dldHRhYmxlZW50cnkoKQ0KKyAgKg0KKyAgKiBSZW1lbWJlciBv
bmx5IHJldHVybiBhIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgSSB3aWxsIG1v
ZGlmeSBsYXRlci4NCisgICogRG9uJ3QgcmV0dXJuIGZpbGUgZGVzY3JpcHRv
cnMgdGhhdCBhcmVuJ3Qgb3duZWQgYnkgdGhlIGNoaWxkLCBvciBkb24ndA0K
KyAgKiBoYXZlIGtlcm5lbCBvcGVyYXRpb25zLg0KKyAgKi8NCisgc3RhdGlj
IGludCBmZF9rZXJuX2dldHRhYmxlZW50cnkoY29uc3QgaW50IGNoaWxkLCBp
bnQgZmQpDQorIHsNCisgCWludCBpOw0KKyANCisgCWZvciAoaSA9IDA7IGkg
PCBkdGFibGVzaXplOyBpKyspIHsNCisgCQlpZiAoZmRfdGFibGVbaV0tPmZk
LmkgPT0gZmQpIHsNCisgCQkJaWYgKGNoaWxkKSB7DQorIAkJCQlpZiAoKGZk
X3RhYmxlW2ldLT50eXBlICE9IEZEX1RFU1RfSEFMRl9EVVBMRVgpICYmDQor
IAkJICAgIAkgIChmZF90YWJsZVtpXS0+dHlwZSAhPSBGRF9URVNUX0ZVTExf
RFVQTEVYKSkgew0KKyAJCQkJCWNvbnRpbnVlOw0KKyAJCQkJfQ0KKyAJCQl9
IGVsc2Ugew0KKyAJCQkJaWYgKChmZF90YWJsZVtpXS0+dHlwZSA9PSBGRF9O
VCkgfHwNCisgICAgICAgICAgICAgCSAgKGZkX3RhYmxlW2ldLT50eXBlID09
IEZEX05JVSkpIHsNCisgCQkJCQljb250aW51ZTsNCisgCQkJCX0NCisgCQkJ
fQ0KKyAJCQkvKiBJcyBpdCBhIGtlcm5lbCBmZCA/ICovDQorIAkJCWlmIChm
ZF90YWJsZVtpXS0+b3BzICE9ICYoX19mZF9rZXJuX29wcykpIHsNCisgCQkJ
CWNvbnRpbnVlOw0KKyAJCQl9DQorIAkJCXJldHVybihpKTsNCisgCQl9DQor
IAl9DQorIAlyZXR1cm4oTk9UT0spOw0KKyB9DQorIA0KKyAvKiA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBmZF9rZXJuX2V4ZWMoKQ0K
KyAgKg0KKyAgKiBGaXh1cCB0aGUgZmRfdGFibGUgc3VjaCB0aGF0IChmZCA9
PSBmZF90YWJsZVtmZF0tPmZkLmkpIHRoaXMgd2F5DQorICAqIHRoZSBuZXcg
aW1tYWdlIHdpbGwgYmUgT0suDQorICAqDQorICAqIE9ubHkgdG91Y2ggdGhv
c2UgdGhhdCB3b24ndCBiZSB1c2VkIGJ5IHRoZSBwYXJlbnQgaWYgd2UncmUg
aW4gYSBjaGlsZA0KKyAgKiBvdGhlcndpc2UgZml4dXAgYWxsLg0KKyAgKg0K
KyAgKiBSZXR1cm5zOg0KKyAgKiAwIG5vIGZpeHVwIG5lY2Vzc2FyeQ0KKyAg
KiAxIGZpeHVwIHdpdGhvdXQgcHJvYmxlbXMNCisgICogMiBmYWlsZWQgZml4
dXAgb24gc29tZSBkZXNjcmlwdG9ycywgYW5kIGNsb2JiZXJlZCB0aGVtLg0K
KyAgKi8NCisgaW50IGZkX2tlcm5fZXhlYyhjb25zdCBpbnQgY2hpbGQpDQor
IHsNCisgCWludCByZXQgPSAwOw0KKyAJaW50IGZkLCBpOw0KKyANCisgCWZv
ciAoZmQgPSAwOyBmZCA8IGR0YWJsZXNpemU7IGZkKyspIHsNCisgCQkvKiBJ
cyB0aGUgZmQgYWxyZWFkeSBpbiB1c2UgPyAqLw0KKyAJCWlmIChjaGlsZCkg
ew0KKyAJCQlpZiAoKGZkX3RhYmxlW2ZkXS0+dHlwZSAhPSBGRF9URVNUX0hB
TEZfRFVQTEVYKSAmJg0KKyAJCSAgICAgIChmZF90YWJsZVtmZF0tPnR5cGUg
IT0gRkRfVEVTVF9GVUxMX0RVUExFWCkpIHsNCisgCQkJCWNvbnRpbnVlOw0K
KyAJCQl9DQorIAkJfSBlbHNlIHsNCisgCQkJaWYgKChmZF90YWJsZVtmZF0t
PnR5cGUgPT0gRkRfTlQpIHx8DQorICAgICAgICAgICAgICAgKGZkX3RhYmxl
W2ZkXS0+dHlwZSA9PSBGRF9OSVUpKSB7DQorIAkJCQljb250aW51ZTsNCisg
CQkJfQ0KKyAJCX0NCisgCQkvKiBJcyBpdCBhIGtlcm5lbCBmZCA/ICovDQor
IAkJaWYgKGZkX3RhYmxlW2ZkXS0+b3BzICE9ICYoX19mZF9rZXJuX29wcykp
IHsNCisgCQkJY29udGludWU7DQorIAkJfQ0KKyAJCS8qIERvZXMgaXQgbWF0
Y2ggPyAqLw0KKyAJCWlmIChmZF90YWJsZVtmZF0tPmZkLmkgPT0gZmQpIHsN
CisgCQkJY29udGludWU7DQorIAkJfQ0KKyAJCS8qIE9LLCBmaXh1cCBlbnRy
eTogUmVhZCBjb21tZW50cyBiZWZvcmUgY2hhbmdpbmcuIFRoaXMgaXNuJ3Qg
b2J2aW91cyAqLyANCisgDQorIAkJLyogaSBpcyB0aGUgcmVhbCBmaWxlIGRl
c2NyaXB0b3IgZmQgY3VycmVudGx5IHJlcHJlc2VudHMgKi8NCisgCQlpZiAo
KChpID0gZmRfdGFibGVbZmRdLT5mZC5pKSA+PSBkdGFibGVzaXplKSB8fCAo
aSA8IDApKSB7DQorIAkJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAq
Lw0KKyAJCQlQQU5JQygpOw0KKyAJCX0NCisgDQorIAkJLyoNCisgCQkgKiBp
ZiB0aGUgcmVhbCBmaWxlIGRlc2NyaXB0b3Igd2l0aCB0aGUgc2FtZSBudW1i
ZXIgYXMgdGhlIGZha2UgZmlsZQ0KKyAJCSAqIGRlc2NyaXB0b3IgbnVtYmVy
IGZkIGlzIGFjdHVhbGx5IGluIHVzZSBieSB0aGUgcHJvZ3JhbSwgd2UgaGF2
ZQ0KKyAgICAgICAgICAqIHRvIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkNCisg
CQkgKi8NCisgCQlpZiAoKG1hY2hkZXBfc3lzX2ZjbnRsKGZkLCBGX0dFVEZM
LCBOVUxMKSkgPj0gT0spIHsNCisgCQkJLyogZmQgaXMgYnVzeSAqLw0KKyAJ
CQlpbnQgajsNCisgDQorIAkJCS8qDQorIAkJCSAqIGogaXMgdGhlIGZha2Ug
ZmlsZSBkZXNjcmlwdG9yIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVhbCBmaWxl
DQorIAkJCSAqIGRlc2NyaXB0b3IgdGhhdCB3ZSB3YW50IHRvIG1vdmUuIFRo
aXMgd2F5IHRoZSBmYWtlIGZpbGUNCisgCQkJICogZGVzY3JpcHRvciBmZCBj
YW4gbW92ZSBpdHMgcmVhbCBmaWxlIGRlc2NyaXB0b3IgaSBzdWNoIHRoYXQN
CisgCQkJICogZmQgPT0gaS4NCisgCQkJICovDQorIAkJCWlmICgoaiA9IGZk
X2tlcm5fZ2V0dGFibGVlbnRyeShjaGlsZCwgZmQpKSA+PSBPSykgew0KKyAN
CisgCQkJCS8qDQorIAkJCQkgKiBTaW5jZSBqIHJlcHJlc2VudHMgYSBmYWtl
IGZpbGUgZGVzY3JpcHRvciBhbmQgZmQgcmVwcmVzZW50cw0KKyAJCQkJICog
YSBmYWtlIGZpbGUgZGVzY3JpcHRvci4gSWYgaiA8IGZkIHRoZW4gYSBwcmV2
aW91cyBwYXNzDQorIAkJCQkgKiBzaG91bGQgaGF2ZSBzZXQgZmRfdGFibGVb
al0tPmZkLmkgPT0gai4NCisgCQkJCSAqLw0KKyAJCQkJaWYgKGZkIDwgaikg
ew0KKyAJCQkJCWlmICgoZmRfdGFibGVbal0tPmZkLmkgPSBtYWNoZGVwX3N5
c19kdXAoZmQpKSA8IE9LKSB7DQorIAkJCQkJCS8qIENsb3NlIGosIHRoZXJl
IGlzIG5vdGhpbmcgZWxzZSB3ZSBjYW4gZG8gKi8NCisgICAJCQkJCQlmZF90
YWJsZVtqXS0+dHlwZSA9IEZEX05JVTsNCisgCQkJCQkJcmV0ID0gMjsNCisg
CQkJCQl9DQorIAkJCQl9IGVsc2Ugew0KKyAJCQkJCS8qIFRoaXMgaW1wbGll
cyBmZF90YWJsZVtqXS0+ZmQuaSAhPSBqICovDQorIAkJCQkJUEFOSUMoKTsN
CisgCQkJCX0NCisgCQkJfQ0KKyAJCX0NCisgDQorIAkJLyoNCisgCQkgKiBI
ZXJlIHRoZSByZWFsIGZpbGUgZGVzY3JpcHRvciBpIGlzIHNldCB0byBlcXVl
bCB0aGUgZmFrZSBmaWxlDQorIAkJICogZGVzY3JpcHRvciBmZA0KKyAJCSAq
Lw0KKyAJCW1hY2hkZXBfc3lzX2R1cDIoaSwgZmQpOw0KKyANCisgCQkvKg0K
KyAJCSAqIE5vdyBjb21lcyB0aGUgcmVhbGx5IGNvbXBsaWNhdGVkIHBhcnQ6
IFVOREVSU1RBTkQgYmVmb3JlIGNoYW5naW5nDQorIAkJICoNCisgCQkgKiBI
ZXJlIGFyZSB0aGUgdGhpbmdzIHRoaXMgcm91dGluZSB3YW50cyB0byBkbyAu
Li4NCisgCQkgKg0KKyAJCSAqIENhc2UgMS4gVGhlIHJlYWwgZmlsZSBkZXNj
cmlwdG9yIGhhcyBvbmx5IG9uZSBmYWtlIGZpbGUgZGVzY3JpcHRvcg0KKyAJ
CSAqIHJlcHJlc2VudGluZyBpdC4gDQorIAkJICogZmQgLT4gaSwgZmQgIT0g
aSA9PT0+ICBmZCAtPiBmZCwgY2xvc2UoaSkNCisgCQkgKiBFeGFtcGxlIGZk
ID0gNCwgaSA9IDI6IHRoZW4gY2xvc2UoMiksIHNldCBmZCAtPiBpID0gNA0K
KyAJCSAqIA0KKyAJCSAqIENhc2UgMi4gVGhlIHJlYWwgZmlsZSBkZXNjcmlw
dG9yIGhhcyBtb3JlIHRoYW4gb25lIGZha2UgZmlsZQ0KKyAJCSAqIGRlc2Ny
aXB0b3IgcmVwcmVzZW50aW5nIGl0LCBhbmQgdGhpcyBpcyB0aGUgZmlyc3Qg
ZmFrZSBmaWxlDQorIAkJICogZGVzY3JpcHRvciByZXByZXNlbnRpbmcgdGhl
IHJlYWwgZmlsZSBkZXNjcmlwdG9yDQorIAkJICogZmQgLT4gaSwgZmQnIC0+
IGksIGZkICE9IGkgPT09PiBmZCAtPiBmZCwgZmQnIC0+IGZkLCBjbG9zZShp
KQ0KKyAJCSAqDQorIAkJICogVGhlIHByb2JsZW0gaXMgYWNoaXZpbmcgdGhl
IGFib3ZlIGlzIHZlcnkgbWVzc3kgYW5kIGRpZmZpY3VsdCwNCisgCQkgKiBi
dXQgSSBzaG91bGQgYmUgYWJsZSB0byB0YWtlIGEgc2hvcnQgY3V0LiBJZiBm
ZCA+IGkgdGhlbiB0aGVyZQ0KKyAJCSAqIHdpbGwgYmUgbm8gbmVlZCB0byBl
dmVyIG1vdmUgaSwgdGhpcyBpcyBiZWNhdXNlIHRoZSBmYWtlIGZpbGUNCisg
CQkgKiBkZXNjcmlwdG9yIGZvbyB0aGF0IHdlIHdvdWxkIGhhdmUgd2FudGVk
IHRvIHJlcHJlc2VudCB0aGUgcmVhbA0KKyAJCSAqIGZpbGUgZGVzY3JpcHRv
ciBpIGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLiBJZiBmZCA8IGkgdGhl
biBieQ0KKyAJCSAqIG1vdmluZyBpIHRvIGZkIGFsbCBzdWJzZXF1ZW50IGZh
a2UgZmlsZSBkZXNjcmlwdG9ycyBmZCcgc2hvdWxkIGZhbGwNCisgCQkgKiBp
bnRvIHRoZSBwcmV2aW91cyBjYXNlIGFuZCB3b24ndCBuZWVkIGFkaXRpb25h
bCBhZGp1c3RpbmcuDQorIAkJICoNCisgCQkgKiBEb2VzIHRoaXMgYnJlYWsg
dGhlIGFib3ZlIGZkIDwgaiBjaGVjayAuLi4uIEl0IHNob3VsZG4ndCBiZWNh
dXNlIGoNCisgCQkgKiBpcyBhIGZha2UgZmlsZSBkZXNjcmlwdG9yIGFuZCBp
ZiBqIDwgZmQgdGhlbiBqIGhhcyBhbHJlYWR5IG1vdmVkIA0KKyAJCSAqIGl0
cyByZWFsIGZpbGUgZGVzY3JpcHRvciBmb28gc3VjaCB0aGF0IGZvbyA8PSBq
IHRoZXJlZm9yZSBmb28gPCBmZA0KKyAJCSAqIGFuZCBub3QgZm9vID09IGZk
IHRoZXJlZm9yIGogY2Fubm90IHJlcHJlc2VudCB0aGUgcmVhbCANCisgCQkg
KiBmaWxlZGVzY3JpcHRvciB0aGF0IGZkIHdhbnQgdG8gbW92ZSB0byBhbmQg
YmUgbGVzcyB0aGFuIGZkDQorIAkJICovDQorIAkJaWYgKGZkIDwgaSkgew0K
KyAJCQlmZF90YWJsZVtmZF0tPmZkLmkgPSBmZDsNCisgCQkJbWFjaGRlcF9z
eXNfY2xvc2UoaSk7DQorIAkJfQ0KKyAJCWlmIChyZXQgPCAxKSB7DQorIAkJ
CSByZXQgPSAxOw0KKyAJCX0NCisgCX0NCisgfQ0KKyANCisgLyogPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogZmRfa2Vybl9mb3JrKCkN
CisgICovDQorIHZvaWQgZmRfa2Vybl9mb3JrKCkNCisgew0KKyAJc2VtYXBo
b3JlICpsb2NrOw0KKyAJaW50IGZkOw0KKyANCisgCWZvciAoZmQgPSAwOyBm
ZCA8IGR0YWJsZXNpemU7IGZkKyspIHsNCisgCQlsb2NrID0gJiAoZmRfdGFi
bGVbZmRdLT5sb2NrKTsNCisgCQlpZiAoU0VNQVBIT1JFX1RFU1RfQU5EX1NF
VChsb2NrKSkgew0KKyAJCQljb250aW51ZTsNCisgCQl9DQorIAkJLyogSXMg
aXQgYSBrZXJuZWwgZmQgPyAqLw0KKyAJCWlmIChmZF90YWJsZVtmZF0tPm9w
cyAhPSAmKF9fZmRfa2Vybl9vcHMpKSB7DQorIAkJCVNFTUFQSE9SRV9SRVNF
VChsb2NrKTsNCisgCQkJY29udGludWU7DQorIAkJfQ0KKyAJCWlmICgoZmRf
dGFibGVbZmRdLT5yX293bmVyKSB8fCAoZmRfdGFibGVbZmRdLT53X293bmVy
KSkgew0KKyAJCQlTRU1BUEhPUkVfUkVTRVQobG9jayk7DQorIAkJCWNvbnRp
bnVlOw0KKyAJCX0NCisgCQlzd2l0Y2ggKGZkX3RhYmxlW2ZkXS0+dHlwZSkg
ew0KKyAJCWNhc2UgRkRfSEFMRl9EVVBMRVg6DQorIAkJCW1hY2hkZXBfc3lz
X2ZjbnRsKGZkX3RhYmxlW2ZkXS0+ZmQuaSwgRl9TRVRGTCwgZmRfdGFibGVb
ZmRdLT5mbGFncyk7DQorIAkJCWZkX3RhYmxlW2ZkXS0+dHlwZSA9IEZEX1RF
U1RfSEFMRl9EVVBMRVg7DQorIAkJCWJyZWFrOw0KKyAJCWNhc2UgRkRfRlVM
TF9EVVBMRVg6DQorIAkJCW1hY2hkZXBfc3lzX2ZjbnRsKGZkX3RhYmxlW2Zk
XS0+ZmQuaSwgRl9TRVRGTCwgZmRfdGFibGVbZmRdLT5mbGFncyk7DQorIAkJ
CWZkX3RhYmxlW2ZkXS0+dHlwZSA9IEZEX1RFU1RfRlVMTF9EVVBMRVg7DQor
IAkJCWJyZWFrOw0KKyAJCWRlZmF1bHQ6DQorIAkJCWJyZWFrOw0KKyAJCX0N
CisgCQlTRU1BUEhPUkVfUkVTRVQobG9jayk7DQorIAl9DQorIH0NCisgDQor
IC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIEhlcmUg
YXJlIHRoZSBiZXJrZWxleSBzb2NrZXQgZnVuY3Rpb25zLiBUaGVzZSBhcmUg
bm90IFBPU0lYLg0KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAq
Lw0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisg
ICogc29ja2V0KCkNCisgICovDQorIGludCBzb2NrZXQoaW50IGFmLCBpbnQg
dHlwZSwgaW50IHByb3RvY29sKQ0KKyB7DQorIAlpbnQgZmQsIGZkX2tlcm47
DQorIA0KKyAJIGlmICghKChmZCA9IGZkX2FsbG9jYXRlKCkpIDwgT0spKSB7
DQorIA0KKyAgICAgICAgIGlmICghKChmZF9rZXJuID0gbWFjaGRlcF9zeXNf
c29ja2V0KGFmLCB0eXBlLCBwcm90b2NvbCkpIDwgT0spKSB7DQorIAkJCW1h
Y2hkZXBfc3lzX2ZjbnRsKGZkX2tlcm4sIEZfU0VURkwsIF9fRkRfTk9OQkxP
Q0spOw0KKyANCisgICAgICAgICAgICAgLyogU2hvdWxkIGZzdGF0IHRoZSBm
aWxlIHRvIGRldGVybWluZSB3aGF0IHR5cGUgaXQgaXMgKi8NCisgICAgICAg
ICAgICAgZmRfdGFibGVbZmRdLT5vcHMgCT0gJiBfX2ZkX2tlcm5fb3BzOw0K
KyAgICAgICAgICAgICBmZF90YWJsZVtmZF0tPnR5cGUgCT0gRkRfRlVMTF9E
VVBMRVg7DQorIAkJCWZkX3RhYmxlW2ZkXS0+ZmQuaQk9IGZkX2tlcm47DQor
ICAgICAgICAgCWZkX3RhYmxlW2ZkXS0+ZmxhZ3MgPSAwOw0KKyAgICAgICAg
ICAgICByZXR1cm4oZmQpOw0KKyAgICAgICAgIH0NCisgDQorICAgICAgICAg
cHRocmVhZF9ydW4tPmVycm9yID0gLSBmZF9rZXJuOw0KKyAgICAgICAgIGZk
X3RhYmxlW2ZkXS0+Y291bnQgPSAwOw0KKyAgICAgfQ0KKyAgICAgcmV0dXJu
KE5PVE9LKTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCisgICogYmluZCgpDQorICAqLw0KKyBpbnQgYmluZChpbnQg
ZmQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4p
DQorIHsNCisgCS8qIE5vdCBtdWNoIHRvIGRvIGluIGJpbmQgKi8NCisgCXNl
bWFwaG9yZSAqcGxvY2s7DQorIAlpbnQgcmV0Ow0KKyANCisgCWlmICgocmV0
ID0gZmRfbG9jayhmZCwgRkRfUkRXUikpID09IE9LKSB7DQorICAgICAgICAg
aWYgKChyZXQgPSBtYWNoZGVwX3N5c19iaW5kKGZkX3RhYmxlW2ZkXS0+ZmQu
aSwgbmFtZSwgbmFtZWxlbikpIDwgT0spIHsgDQorIAkJCXB0aHJlYWRfcnVu
LT5lcnJvciA9IC0gcmV0Ow0KKyAJCX0NCisgCQlmZF91bmxvY2soZmQsIEZE
X1JEV1IpOw0KKyAJfQ0KKyAJcmV0dXJuKHJldCk7DQorIH0NCisgDQorIC8q
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIGNvbm5lY3Qo
KQ0KKyAgKi8NCisgaW50IGNvbm5lY3QoaW50IGZkLCBjb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKm5hbWUsIGludCBuYW1lbGVuKQ0KKyB7DQorIAlzZW1hcGhv
cmUgKmxvY2ssICpwbG9jazsNCisgCXN0cnVjdCBzb2NrYWRkciB0bXBuYW1l
Ow0KKyAJaW50IHJldCwgdG1wbmFtZWxlbjsNCisgDQorIAlpZiAoKHJldCA9
IGZkX2xvY2soZmQsIEZEX1JEV1IpKSA9PSBPSykgew0KKyAJCWlmICgocmV0
ID0gbWFjaGRlcF9zeXNfY29ubmVjdChmZF90YWJsZVtmZF0tPmZkLmksIG5h
bWUsIG5hbWVsZW4pKSA8IE9LKSB7DQorICAgICAgICAgICAgIGlmICghKGZk
X3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJMT0NLKSAmJg0KKyAgICAg
ICAgICAgICAgICgocmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJldCA9PSAt
RUlOUFJPR1JFU1MpIHx8DQorIAkJICAgICAgKHJldCA9PSAtRUFMUkVBRFkp
IHx8IChyZXQgPT0gLUVBR0FJTikpKSB7DQorIAkJCQkvKiBMb2NrIHF1ZXVl
ICovDQorIAkJCQlsb2NrID0gJmZkX3dhaXRfbG9jazsNCisgCQkJCXdoaWxl
IChTRU1BUEhPUkVfVEVTVF9BTkRfU0VUKGxvY2spKSB7DQorIAkJCQkJcHRo
cmVhZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIExvY2sgcHRo
cmVhZCAqLw0KKyAJCQkJcGxvY2sgPSAmKHB0aHJlYWRfcnVuLT5sb2NrKTsN
CisgCQkJCXdoaWxlIChTRU1BUEhPUkVfVEVTVF9BTkRfU0VUKHBsb2NrKSkg
ew0KKyAJCQkJCXB0aHJlYWRfeWllbGQoKTsNCisgCQkJCX0NCisgDQorIAkJ
CQkvKiBxdWV1ZSBwdGhyZWFkIGZvciBhIEZEV19XQUlUICovDQorIAkJCQlw
dGhyZWFkX3J1bi0+ZmQgPSBmZF90YWJsZVtmZF0tPmZkLmk7DQorIAkJCQlw
dGhyZWFkX3J1bi0+bmV4dCA9IGZkX3dhaXRfd3JpdGU7DQorIAkJCQlmZF93
YWl0X3dyaXRlID0gcHRocmVhZF9ydW47DQorIAkJCQlTRU1BUEhPUkVfUkVT
RVQobG9jayk7DQorIAkJCQlyZXNjaGVkdWxlKFBTX0ZEV19XQUlUKTsNCisg
DQorIAkJCQl0bXBuYW1lbGVuID0gc2l6ZW9mKHRtcG5hbWUpOw0KKyANCisg
CQkJCS8qIE9LIG5vdyBsZXRzIHNlZSBpZiBpdCByZWFsbHkgd29ya2VkICov
DQorIAkJCQlpZiAoKChyZXQgPSBtYWNoZGVwX3N5c19nZXRwZWVybmFtZShm
ZF90YWJsZVtmZF0tPmZkLmksDQorIAkJCQkgICZ0bXBuYW1lLCAmdG1wbmFt
ZWxlbikpIDwgT0spICYmIChyZXQgPT0gLUVOT1RDT05OKSkgew0KKyANCisg
CQkJCQkvKiBHZXQgdGhlIGVycm9yLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBu
b3QgZmFpbCAqLw0KKyAJCQkJCW1hY2hkZXBfc3lzX2dldHNvY2tvcHQoZmRf
dGFibGVbZmRdLT5mZC5pLCBTT0xfU09DS0VULA0KKyAJCQkJCSAgU09fRVJS
T1IsICZwdGhyZWFkX3J1bi0+ZXJyb3IsICZ0bXBuYW1lbGVuKTsgDQorIAkJ
CQl9DQorICAgICAgICAgICAgIH0gZWxzZSB7DQorIAkJCQlwdGhyZWFkX3J1
bi0+ZXJyb3IgPSAtcmV0Ow0KKyAJCQl9DQorIAkJfQ0KKyAJCWZkX3VubG9j
ayhmZCwgRkRfUkRXUik7DQorIAl9DQorIAlyZXR1cm4ocmV0KTsNCisgfQ0K
KyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICog
YWNjZXB0KCkNCisgICovDQorIGludCBhY2NlcHQoaW50IGZkLCBzdHJ1Y3Qg
c29ja2FkZHIgKm5hbWUsIGludCAqbmFtZWxlbikNCisgew0KKyAJc2VtYXBo
b3JlICpsb2NrLCAqcGxvY2s7DQorIAlpbnQgcmV0LCBmZF9rZXJuOw0KKyAN
CisgDQorIA0KKyAJaWYgKChyZXQgPSBmZF9sb2NrKGZkLCBGRF9SRFdSKSkg
PT0gT0spIHsNCisgCQl3aGlsZSAoKGZkX2tlcm4gPSBtYWNoZGVwX3N5c19h
Y2NlcHQoZmRfdGFibGVbZmRdLT5mZC5pLCBuYW1lLCBuYW1lbGVuKSkgPCBP
Sykgew0KKyAgICAgICAgICAgICBpZiAoIShmZF90YWJsZVtmZF0tPmZsYWdz
ICYgX19GRF9OT05CTE9DSykgJiYNCisgICAgICAgICAgICAgICAoKGZkX2tl
cm4gPT0gLUVXT1VMREJMT0NLKSB8fCAoZmRfa2VybiA9PSAtRUFHQUlOKSkp
IHsNCisgCQkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJCWxvY2sgPSAmZmRf
d2FpdF9sb2NrOw0KKyAJCQkJd2hpbGUgKFNFTUFQSE9SRV9URVNUX0FORF9T
RVQobG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lpZWxkKCk7DQorIAkJCQl9
DQorIA0KKyAJCQkJLyogTG9jayBwdGhyZWFkICovDQorIAkJCQlwbG9jayA9
ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQkJd2hpbGUgKFNFTUFQSE9S
RV9URVNUX0FORF9TRVQocGxvY2spKSB7DQorIAkJCQkJcHRocmVhZF95aWVs
ZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIHF1ZXVlIHB0aHJlYWQgZm9y
IGEgRkRSX1dBSVQgKi8NCisgCQkJCXB0aHJlYWRfcnVuLT5mZCA9IGZkX3Rh
YmxlW2ZkXS0+ZmQuaTsNCisgCQkJCXB0aHJlYWRfcnVuLT5uZXh0ID0gZmRf
d2FpdF93cml0ZTsNCisgCQkJCXB0aHJlYWRfcnVuLT5uZXh0ID0gZmRfd2Fp
dF9yZWFkOw0KKyAJCQkJZmRfd2FpdF9yZWFkID0gcHRocmVhZF9ydW47DQor
IAkJCQlTRU1BUEhPUkVfUkVTRVQobG9jayk7DQorIAkJCQlyZXNjaGVkdWxl
KFBTX0ZEUl9XQUlUKTsNCisgICAgICAgICAgICAgfSBlbHNlIHsNCisgCQkJ
CWZkX3VubG9jayhmZCwgRkRfUkRXUik7DQorIAkJCQlyZXR1cm4oZmRfa2Vy
bik7DQorIAkJCX0NCisgCQl9DQorIAkJZmRfdW5sb2NrKGZkLCBGRF9SRFdS
KTsNCisgDQorIAkgCWlmICghKChyZXQgPSBmZF9hbGxvY2F0ZSgpKSA8IE9L
KSkgew0KKyANCisgCQkJLyogVGhpcyBtYXkgYmUgdW5uZWNlc3NhcnkgKi8N
CisgCQkJbWFjaGRlcF9zeXNfZmNudGwoZmRfa2VybiwgRl9TRVRGTCwgX19G
RF9OT05CTE9DSyk7DQorIA0KKyAgICAgICAgICAgICAvKiBTaG91bGQgZnN0
YXQgdGhlIGZpbGUgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBpdCBpcyAqLw0K
KyAgICAgICAgICAgICBmZF90YWJsZVtyZXRdLT5vcHMgCQk9ICYgX19mZF9r
ZXJuX29wczsNCisgICAgICAgICAgICAgZmRfdGFibGVbcmV0XS0+dHlwZSAJ
PSBGRF9GVUxMX0RVUExFWDsNCisgCQkJZmRfdGFibGVbcmV0XS0+ZmQuaQkJ
PSBmZF9rZXJuOw0KKyAgICAgICAgIAlmZF90YWJsZVtyZXRdLT5mbGFncyAJ
PSAwOw0KKyAJCX0NCisgCX0NCisgCXJldHVybihyZXQpOw0KKyB9DQorIA0K
KyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBsaXN0
ZW4oKQ0KKyAgKi8NCisgaW50IGxpc3RlbihpbnQgZmQsIGludCBiYWNrbG9n
KSANCisgew0KKyAJaW50IHJldDsNCisgDQorIAlpZiAoKHJldCA9IGZkX2xv
Y2soZmQsIEZEX1JEV1IpKSA9PSBPSykgew0KKyAJCWlmICgocmV0ID0gbWFj
aGRlcF9zeXNfbGlzdGVuKGZkX3RhYmxlW2ZkXS0+ZmQuaSwgYmFja2xvZykp
IDwgT0spIHsNCisgCQkJU0VUX0VSUk5PKC1yZXQpOw0KKyAJCX0NCisgCQlm
ZF91bmxvY2soZmQsIEZEX1JEV1IpOw0KKyAJfQ0KKyAJcmV0dXJuKHJldCk7
DQorIH0NCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQorICAqIHNlbmQoKQ0KKyAgKi8NCisgLyogaW50IHNlbmQoaW50IGZkLCBj
aGFyKiBtc2csIGludCBsZW4sIGludCBmbGFncykgKi8NCisgc3NpemVfdCBz
ZW5kKGludCBmZCwgY29uc3Qgdm9pZCAqIG1zZywgc2l6ZV90IGxlbiwgaW50
IGZsYWdzKQ0KKyB7DQorIAlzZW1hcGhvcmUgKmxvY2ssICpwbG9jazsNCisg
CWludCByZXQ7DQorIA0KKyAJaWYgKChyZXQgPSBmZF9sb2NrKGZkLCBGRF9X
UklURSkpID09IE9LKSB7DQorIAkJd2hpbGUgKChyZXQgPSBtYWNoZGVwX3N5
c19zZW5kKGZkX3RhYmxlW2ZkXS0+ZmQuaSwNCisgICAgICAgICAgIG1zZywg
IGxlbiwgZmxhZ3MpKSA8IE9LKSB7DQorICAgICAgICAgICAgIGlmICghKGZk
X3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJMT0NLKSAmJg0KKyAgICAg
ICAgICAgICAgICgocmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJldCA9PSAt
RUFHQUlOKSkpIHsNCisgCQkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJCWxv
Y2sgPSAmZmRfd2FpdF9sb2NrOw0KKyAJCQkJd2hpbGUgKFNFTUFQSE9SRV9U
RVNUX0FORF9TRVQobG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lpZWxkKCk7
DQorIAkJCQl9DQorIA0KKyAJCQkJLyogTG9jayBwdGhyZWFkICovDQorIAkJ
CQlwbG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQkJd2hpbGUg
KFNFTUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2spKSB7DQorIAkJCQkJcHRo
cmVhZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIHF1ZXVlIHB0
aHJlYWQgZm9yIGEgRkRXX1dBSVQgKi8NCisgCQkJCXB0aHJlYWRfcnVuLT5m
ZCA9IGZkX3RhYmxlW2ZkXS0+ZmQuaTsNCisgCQkJCXB0aHJlYWRfcnVuLT5u
ZXh0ID0gZmRfd2FpdF93cml0ZTsNCisgCQkJCWZkX3dhaXRfd3JpdGUgPSBw
dGhyZWFkX3J1bjsNCisgCQkJCVNFTUFQSE9SRV9SRVNFVChsb2NrKTsNCisg
CQkJCXJlc2NoZWR1bGUoUFNfRkRXX1dBSVQpOw0KKyANCisgICAgICAgICAg
ICAgfSBlbHNlIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1yZXQ7
DQorIAkJCQlicmVhazsNCisgCQkJfQ0KKyAJCX0NCisgCQlmZF91bmxvY2so
ZmQsIEZEX1dSSVRFKTsNCisgCX0NCisgCXJldHVybihyZXQpOw0KKyB9DQor
IA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBz
ZW5kdG8oKQ0KKyAgKi8NCisgLyogaW50IHNlbmR0byhpbnQgZmQsIGNoYXIq
IG1zZywgaW50IGxlbiwgaW50IGZsYWdzLCBzdHJ1Y3Qgc29ja2FkZHIgKnRv
LA0KKyAgIGludCB0b19sZW4pICovDQorIHNzaXplX3Qgc2VuZHRvKGludCBm
ZCwgY29uc3Qgdm9pZCAqIG1zZywgc2l6ZV90IGxlbiwgaW50IGZsYWdzLA0K
KyAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqdG8sIGludCB0b19sZW4pDQor
IHsNCisgCXNlbWFwaG9yZSAqbG9jaywgKnBsb2NrOw0KKyAJaW50IHJldDsN
CisgDQorIAlpZiAoKHJldCA9IGZkX2xvY2soZmQsIEZEX1dSSVRFKSkgPT0g
T0spIHsNCisgCQl3aGlsZSAoKHJldCA9IG1hY2hkZXBfc3lzX3NlbmR0byhm
ZF90YWJsZVtmZF0tPmZkLmksDQorICAgICAgICAgICBtc2csIGxlbiwgZmxh
Z3MsIHRvLCB0b19sZW4pKSA8IE9LKSB7DQorICAgICAgICAgICAgIGlmICgh
KGZkX3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJMT0NLKSAmJg0KKyAg
ICAgICAgICAgICAgICgocmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJldCA9
PSAtRUFHQUlOKSkpIHsNCisgCQkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJ
CWxvY2sgPSAmZmRfd2FpdF9sb2NrOw0KKyAJCQkJd2hpbGUgKFNFTUFQSE9S
RV9URVNUX0FORF9TRVQobG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lpZWxk
KCk7DQorIAkJCQl9DQorIA0KKyAJCQkJLyogTG9jayBwdGhyZWFkICovDQor
IAkJCQlwbG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQkJd2hp
bGUgKFNFTUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2spKSB7DQorIAkJCQkJ
cHRocmVhZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIHF1ZXVl
IHB0aHJlYWQgZm9yIGEgRkRXX1dBSVQgKi8NCisgCQkJCXB0aHJlYWRfcnVu
LT5mZCA9IGZkX3RhYmxlW2ZkXS0+ZmQuaTsNCisgCQkJCXB0aHJlYWRfcnVu
LT5uZXh0ID0gZmRfd2FpdF93cml0ZTsNCisgCQkJCWZkX3dhaXRfd3JpdGUg
PSBwdGhyZWFkX3J1bjsNCisgCQkJCVNFTUFQSE9SRV9SRVNFVChsb2NrKTsN
CisgCQkJCXJlc2NoZWR1bGUoUFNfRkRXX1dBSVQpOw0KKyANCisgICAgICAg
ICAgICAgfSBlbHNlIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1y
ZXQ7DQorIAkJCQlicmVhazsNCisgCQkJfQ0KKyAJCX0NCisgCQlmZF91bmxv
Y2soZmQsIEZEX1dSSVRFKTsNCisgCX0NCisgCXJldHVybihyZXQpOw0KKyB9
DQorIA0KKyAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAg
KiBzZW5kbXNnKCkNCisgICovDQorIHNzaXplX3Qgc2VuZG1zZyhpbnQgZmQs
IGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQ0KKyB7DQor
IAlzZW1hcGhvcmUgKmxvY2ssICpwbG9jazsNCisgCWludCBwYXNzZWRfZmQs
IHJldCwgaTsNCisgDQorIAkvKiBIYW5kbGUgZ2V0dGluZyB0aGUgcmVhbCBm
aWxlIGRlc2NyaXB0b3IgKi8NCisgCWZvciAoaSA9IDA7IGkgPCAoKChzdHJ1
Y3Qgb21zZ2hkciAqKW1zZyktPm1zZ19hY2NyaWdodHNsZW4gLyBzaXplb2Yo
aSkpOyBpKyspIHsNCisgCQlwYXNzZWRfZmQgPSAqKCgoaW50ICopKChzdHJ1
Y3Qgb21zZ2hkciAqKW1zZyktPm1zZ19hY2NyaWdodHMpICsgaSk7DQorIAkJ
aWYgKChyZXQgPSBmZF9sb2NrKHBhc3NlZF9mZCwgRkRfUkRXUikpID09IE9L
KSB7DQorIAkJCSooKChpbnQgKikoKHN0cnVjdCBvbXNnaGRyICopbXNnKS0+
bXNnX2FjY3JpZ2h0cykgKyBpKQ0KKyAJCQkgID0gZmRfdGFibGVbcGFzc2Vk
X2ZkXS0+ZmQuaTsNCisgCQkJbWFjaGRlcF9zeXNfZmNudGwoZmRfdGFibGVb
cGFzc2VkX2ZkXS0+ZmQuaSwgRl9TRVRGTCwgDQorIAkJCSAgZmRfdGFibGVb
cGFzc2VkX2ZkXS0+ZmxhZ3MpOw0KKyAJCQlzd2l0Y2goZmRfdGFibGVbcGFz
c2VkX2ZkXS0+dHlwZSkgew0KKyAJCQljYXNlIEZEX1RFU1RfRlVMTF9EVVBM
RVg6DQorIAkJCWNhc2UgRkRfVEVTVF9IQUxGX0RVUExFWDoNCisgCQkJCWJy
ZWFrOw0KKyAJCQljYXNlIEZEX0ZVTExfRFVQTEVYOg0KKyAJCQkJZmRfdGFi
bGVbcGFzc2VkX2ZkXS0+dHlwZSA9ICBGRF9URVNUX0ZVTExfRFVQTEVYOw0K
KyAJCQkJYnJlYWs7DQorIAkJCWNhc2UgRkRfSEFMRl9EVVBMRVg6DQorIAkJ
CQlmZF90YWJsZVtwYXNzZWRfZmRdLT50eXBlID0gIEZEX1RFU1RfSEFMRl9E
VVBMRVg7DQorIAkJCQlicmVhazsNCisgCQkJZGVmYXVsdDoNCisgCQkJCVBB
TklDKCk7DQorIAkJCX0NCisgCQl9IGVsc2Ugew0KKyAJCQlmZF91bmxvY2so
ZmQsIEZEX1JEV1IpOw0KKyAJCQlyZXR1cm4oRUJBREYpOw0KKyAJCX0NCisg
CQlmZF91bmxvY2soZmQsIEZEX1JEV1IpOw0KKyAJfQ0KKyANCisgCWlmICgo
cmV0ID0gZmRfbG9jayhmZCwgRkRfV1JJVEUpKSA9PSBPSykgew0KKyAJCXdo
aWxlICgocmV0ID0gbWFjaGRlcF9zeXNfc2VuZG1zZyhmZF90YWJsZVtmZF0t
PmZkLmksIG1zZywgZmxhZ3MpKSA8IE9LKSB7DQorICAgICAgICAgICAgIGlm
ICghKGZkX3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJMT0NLKSAmJg0K
KyAJCQkgICgocmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJldCA9PSAtRUFH
QUlOKSkpIHsNCisgCQkJCS8qIExvY2sgcXVldWUgKi8NCisgCQkJCWxvY2sg
PSAmZmRfd2FpdF9sb2NrOw0KKyAJCQkJd2hpbGUgKFNFTUFQSE9SRV9URVNU
X0FORF9TRVQobG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lpZWxkKCk7DQor
IAkJCQl9DQorIA0KKyAJCQkJLyogTG9jayBwdGhyZWFkICovDQorIAkJCQlw
bG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQkJd2hpbGUgKFNF
TUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2spKSB7DQorIAkJCQkJcHRocmVh
ZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIHF1ZXVlIHB0aHJl
YWQgZm9yIGEgRkRSX1dBSVQgKi8NCisgCQkJCXB0aHJlYWRfcnVuLT5mZCA9
IGZkX3RhYmxlW2ZkXS0+ZmQuaTsNCisgCQkJCXB0aHJlYWRfcnVuLT5uZXh0
ID0gZmRfd2FpdF9yZWFkOw0KKyAJCQkJZmRfd2FpdF93cml0ZSA9IHB0aHJl
YWRfcnVuOw0KKyAJCQkJU0VNQVBIT1JFX1JFU0VUKGxvY2spOw0KKyAJCQkJ
cmVzY2hlZHVsZShQU19GRFdfV0FJVCk7DQorICAgICAgICAgICAgIH0gZWxz
ZSB7DQorIAkJCQlwdGhyZWFkX3J1bi0+ZXJyb3IgPSAtcmV0Ow0KKyAJCQkJ
YnJlYWs7DQorIAkJCX0NCisgCQl9DQorIAkJZmRfdW5sb2NrKGZkLCBGRF9S
RUFEKTsNCisgCX0NCisgCXJldHVybihyZXQpOw0KKyB9DQorIA0KKyAvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiByZWN2KCkNCisg
ICovDQorIC8qIGludCByZWN2KGludCBmZCwgY2hhciAqIGJ1ZiwgaW50IGxl
biwgaW50IGZsYWdzKSAqLw0KKyBzc2l6ZV90IHJlY3YoaW50IGZkLCB2b2lk
ICogYnVmLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpDQorIHsNCisgCXNlbWFw
aG9yZSAqbG9jaywgKnBsb2NrOw0KKyAJaW50IHJldDsNCisgDQorIAlpZiAo
KHJldCA9IGZkX2xvY2soZmQsIEZEX1JFQUQpKSA9PSBPSykgew0KKyAJCXdo
aWxlICgocmV0ID0gbWFjaGRlcF9zeXNfcmVjdihmZF90YWJsZVtmZF0tPmZk
LmksDQorIAkJICBidWYsIGxlbiwgZmxhZ3MpKSA8IE9LKSB7DQorICAgICAg
ICAgICAgIGlmICghKGZkX3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJM
T0NLKSAmJg0KKyAgICAgICAgICAgICAgICgocmV0ID09IC1FV09VTERCTE9D
SykgfHwgKHJldCA9PSAtRUFHQUlOKSkpIHsNCisgCQkJCS8qIExvY2sgcXVl
dWUgKi8NCisgCQkJCWxvY2sgPSAmZmRfd2FpdF9sb2NrOw0KKyAJCQkJd2hp
bGUgKFNFTUFQSE9SRV9URVNUX0FORF9TRVQobG9jaykpIHsNCisgCQkJCQlw
dGhyZWFkX3lpZWxkKCk7DQorIAkJCQl9DQorIA0KKyAJCQkJLyogTG9jayBw
dGhyZWFkICovDQorIAkJCQlwbG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2sp
Ow0KKyAJCQkJd2hpbGUgKFNFTUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2sp
KSB7DQorIAkJCQkJcHRocmVhZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisg
CQkJCS8qIHF1ZXVlIHB0aHJlYWQgZm9yIGEgRkRSX1dBSVQgKi8NCisgCQkJ
CXB0aHJlYWRfcnVuLT5mZCA9IGZkX3RhYmxlW2ZkXS0+ZmQuaTsNCisgCQkJ
CXB0aHJlYWRfcnVuLT5uZXh0ID0gZmRfd2FpdF93cml0ZTsNCisgCQkJCXB0
aHJlYWRfcnVuLT5uZXh0ID0gZmRfd2FpdF9yZWFkOw0KKyAJCQkJZmRfd2Fp
dF9yZWFkID0gcHRocmVhZF9ydW47DQorIAkJCQlTRU1BUEhPUkVfUkVTRVQo
bG9jayk7DQorIAkJCQlyZXNjaGVkdWxlKFBTX0ZEUl9XQUlUKTsNCisgICAg
ICAgICAgICAgfSBlbHNlIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9
IC1yZXQ7DQorIAkJCQlicmVhazsNCisgCQkJfQ0KKyAJCX0NCisgCQlmZF91
bmxvY2soZmQsIEZEX1JFQUQpOw0KKyAJfQ0KKyAJcmV0dXJuKHJldCk7DQor
IH0NCisgDQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQor
ICAqIHJlY3Zmcm9tKCkNCisgICovDQorIC8qIGludCByZWN2ZnJvbShpbnQg
ZmQsIGNoYXIgKiBidWYsIGludCBsZW4sIGludCBmbGFncywNCisgICBzdHJ1
Y3Qgc29ja2FkZHIgKmZyb20sIGludCAqIGZyb21fbGVuKSAqLw0KKyBzc2l6
ZV90IHJlY3Zmcm9tKGludCBmZCwgdm9pZCAqIGJ1Ziwgc2l6ZV90IGxlbiwg
aW50IGZsYWdzLA0KKyAgIHN0cnVjdCBzb2NrYWRkciAqIGZyb20sIGludCAq
IGZyb21fbGVuKQ0KKyB7DQorIAlzZW1hcGhvcmUgKmxvY2ssICpwbG9jazsN
CisgCWludCByZXQ7DQorIA0KKyAJaWYgKChyZXQgPSBmZF9sb2NrKGZkLCBG
RF9SRUFEKSkgPT0gT0spIHsNCisgCQl3aGlsZSAoKHJldCA9IG1hY2hkZXBf
c3lzX3JlY3Zmcm9tKGZkX3RhYmxlW2ZkXS0+ZmQuaSwNCisgCQkgIGJ1Ziwg
bGVuLCBmbGFncywgZnJvbSwgZnJvbV9sZW4pKSA8IE9LKSB7DQorICAgICAg
ICAgICAgIGlmICghKGZkX3RhYmxlW2ZkXS0+ZmxhZ3MgJiBfX0ZEX05PTkJM
T0NLKSAmJg0KKyAJCQkgICgocmV0ID09IC1FV09VTERCTE9DSykgfHwgKHJl
dCA9PSAtRUFHQUlOKSkpIHsNCisgCQkJCS8qIExvY2sgcXVldWUgKi8NCisg
CQkJCWxvY2sgPSAmZmRfd2FpdF9sb2NrOw0KKyAJCQkJd2hpbGUgKFNFTUFQ
SE9SRV9URVNUX0FORF9TRVQobG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lp
ZWxkKCk7DQorIAkJCQl9DQorIA0KKyAJCQkJLyogTG9jayBwdGhyZWFkICov
DQorIAkJCQlwbG9jayA9ICYocHRocmVhZF9ydW4tPmxvY2spOw0KKyAJCQkJ
d2hpbGUgKFNFTUFQSE9SRV9URVNUX0FORF9TRVQocGxvY2spKSB7DQorIAkJ
CQkJcHRocmVhZF95aWVsZCgpOw0KKyAJCQkJfQ0KKyANCisgCQkJCS8qIHF1
ZXVlIHB0aHJlYWQgZm9yIGEgRkRSX1dBSVQgKi8NCisgCQkJCXB0aHJlYWRf
cnVuLT5mZCA9IGZkX3RhYmxlW2ZkXS0+ZmQuaTsNCisgCQkJCXB0aHJlYWRf
cnVuLT5uZXh0ID0gZmRfd2FpdF9yZWFkOw0KKyAJCQkJZmRfd2FpdF9yZWFk
ID0gcHRocmVhZF9ydW47DQorIAkJCQlTRU1BUEhPUkVfUkVTRVQobG9jayk7
DQorIAkJCQlyZXNjaGVkdWxlKFBTX0ZEUl9XQUlUKTsNCisgICAgICAgICAg
ICAgfSBlbHNlIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1yZXQ7
DQorIAkJCQlicmVhazsNCisgCQkJfQ0KKyAJCX0NCisgCQlmZF91bmxvY2so
ZmQsIEZEX1JFQUQpOw0KKyAJfQ0KKyAJcmV0dXJuKHJldCk7DQorIH0NCisg
DQorIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIHJl
Y3Ztc2coKQ0KKyAgKi8NCisgc3NpemVfdCByZWN2bXNnKGludCBmZCwgc3Ry
dWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpIA0KKyB7DQorIAlzZW1hcGhv
cmUgKmxvY2ssICpwbG9jazsNCisgCXN0cnVjdCBzdGF0IHN0YXRfYnVmOw0K
KyAJaW50IHBhc3NlZF9mZCwgcmV0LCBpOw0KKyANCisgCWlmICgocmV0ID0g
ZmRfbG9jayhmZCwgRkRfUkVBRCkpID09IE9LKSB7DQorIAkJd2hpbGUgKChy
ZXQgPSBtYWNoZGVwX3N5c19yZWN2bXNnKGZkX3RhYmxlW2ZkXS0+ZmQuaSwg
bXNnLCBmbGFncykpIDwgT0spIHsNCisgICAgICAgICAgICAgaWYgKCEoZmRf
dGFibGVbZmRdLT5mbGFncyAmIF9fRkRfTk9OQkxPQ0spICYmDQorIAkJCSAg
KChyZXQgPT0gLUVXT1VMREJMT0NLKSB8fCAocmV0ID09IC1FQUdBSU4pKSkg
ew0KKyAJCQkJLyogTG9jayBxdWV1ZSAqLw0KKyAJCQkJbG9jayA9ICZmZF93
YWl0X2xvY2s7DQorIAkJCQl3aGlsZSAoU0VNQVBIT1JFX1RFU1RfQU5EX1NF
VChsb2NrKSkgew0KKyAJCQkJCXB0aHJlYWRfeWllbGQoKTsNCisgCQkJCX0N
CisgDQorIAkJCQkvKiBMb2NrIHB0aHJlYWQgKi8NCisgCQkJCXBsb2NrID0g
JihwdGhyZWFkX3J1bi0+bG9jayk7DQorIAkJCQl3aGlsZSAoU0VNQVBIT1JF
X1RFU1RfQU5EX1NFVChwbG9jaykpIHsNCisgCQkJCQlwdGhyZWFkX3lpZWxk
KCk7DQorIAkJCQl9DQorIA0KKyAJCQkJLyogcXVldWUgcHRocmVhZCBmb3Ig
YSBGRFJfV0FJVCAqLw0KKyAJCQkJcHRocmVhZF9ydW4tPmZkID0gZmRfdGFi
bGVbZmRdLT5mZC5pOw0KKyAJCQkJcHRocmVhZF9ydW4tPm5leHQgPSBmZF93
YWl0X3JlYWQ7DQorIAkJCQlmZF93YWl0X3JlYWQgPSBwdGhyZWFkX3J1bjsN
CisgCQkJCVNFTUFQSE9SRV9SRVNFVChsb2NrKTsNCisgCQkJCXJlc2NoZWR1
bGUoUFNfRkRSX1dBSVQpOw0KKyAgICAgICAgICAgICB9IGVsc2Ugew0KKyAJ
CQkJcHRocmVhZF9ydW4tPmVycm9yID0gLXJldDsNCisgCQkJCWJyZWFrOw0K
KyAJCQl9DQorIAkJfQ0KKyAJCWZkX3VubG9jayhmZCwgRkRfUkVBRCk7DQor
IA0KKyANCisgCQkvKiBIYW5kbGUgZ2V0dGluZyB0aGUgcmVhbCBmaWxlIGRl
c2NyaXB0b3IgKi8NCisgCQlmb3IgKGkgPSAwOyBpIDwgKCgoc3RydWN0IG9t
c2doZHIgKiltc2cpLT5tc2dfYWNjcmlnaHRzbGVuIC8gc2l6ZW9mKGkpKTsg
aSsrKSB7DQorIAkJCXBhc3NlZF9mZCA9ICooKChpbnQgKikoKHN0cnVjdCBv
bXNnaGRyICopbXNnKS0+bXNnX2FjY3JpZ2h0cykgKyBpKTsNCisgCQkJaWYg
KCEoKGZkID0gZmRfYWxsb2NhdGUoKSkgPCBPSykpIHsNCisgCQkJCWZkX3Rh
YmxlW2ZkXS0+ZmxhZ3MgPSBtYWNoZGVwX3N5c19mY250bChwYXNzZWRfZmQs
IEZfR0VURkwpOw0KKyANCisgCQkJCWlmICghKCBmZF90YWJsZVtmZF0tPmZs
YWdzICYgX19GRF9OT05CTE9DSykpIHsNCisgCQkJCQltYWNoZGVwX3N5c19m
Y250bChwYXNzZWRfZmQsIEZfU0VURkwsICANCisgCQkJCQkgIGZkX3RhYmxl
W2ZkXS0+ZmxhZ3MgfCBfX0ZEX05PTkJMT0NLKTsNCisgCQkJCX0NCisgDQor
IAkJCQkvKiBmc3RhdCB0aGUgZmlsZSB0byBkZXRlcm1pbmUgd2hhdCB0eXBl
IGl0IGlzICovDQorIAkJCQltYWNoZGVwX3N5c19mc3RhdChwYXNzZWRfZmQs
ICZzdGF0X2J1Zik7DQorICAgICAgICAgICAgCQlpZiAoU19JU1JFRyhzdGF0
X2J1Zi5zdF9tb2RlKSkgew0KKyAgICAgICAgICAgIAkgICAgCWZkX3RhYmxl
W2ZkXS0+dHlwZSA9IEZEX0hBTEZfRFVQTEVYOw0KKyAgICAgICAgICAgIAkJ
fSBlbHNlIHsNCisgICAgICAgICAgICAJICAgIAlmZF90YWJsZVtmZF0tPnR5
cGUgPSBGRF9GVUxMX0RVUExFWDsNCisgICAgICAgICAgICAJCX0NCisgCQkJ
CSooKChpbnQgKikoKHN0cnVjdCBvbXNnaGRyICopbXNnKS0+bXNnX2FjY3Jp
Z2h0cykgKyBpKSA9IGZkOw0KKyAgICAgICAgICAgIAkJZmRfdGFibGVbZmRd
LT5vcHMgPSAmKF9fZmRfa2Vybl9vcHMpOw0KKyAgICAgICAgICAgIAkJZmRf
dGFibGVbZmRdLT5mZC5pID0gcGFzc2VkX2ZkOw0KKyAJCQl9IGVsc2Ugew0K
KyAJCQkJcHRocmVhZF9ydW4tPmVycm9yID0gRUJBREY7DQorIAkJCQlyZXR1
cm4oLUVCQURGKTsNCisgCQkJCWJyZWFrOw0KKyAJCQl9DQorIAkJfQ0KKyAJ
CWZkX3VubG9jayhmZCwgRkRfUkVBRCk7DQorIAl9DQorIAlyZXR1cm4ocmV0
KTsNCisgfQ0KKyANCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCisgICogc2h1dGRvd24oKQ0KKyAgKi8NCisgaW50IHNodXRkb3duKGlu
dCBmZCwgaW50IGhvdykNCisgew0KKyAJaW50IHJldDsNCisgDQorIAlzd2l0
Y2goaG93KSB7DQorIAljYXNlIDA6IC8qIFJlYWQgKi8NCisgCQlpZiAoKHJl
dCA9IGZkX2xvY2soZmQsIEZEX1JFQUQpKSA9PSBPSykgew0KKyAJCQlpZiAo
KHJldCA9IG1hY2hkZXBfc3lzX3NodXRkb3duKGZkX3RhYmxlW2ZkXS0+ZmQu
aSwgaG93KSkgPCBPSykgew0KKyAJCQkJcHRocmVhZF9ydW4tPmVycm9yID0g
LXJldDsNCisgCQkJfQ0KKyAJCQlmZF91bmxvY2soZmQsIEZEX1JFQUQpOw0K
KyAJCX0NCisgCWNhc2UgMTogLyogV3JpdGUgKi8NCisgCQlpZiAoKHJldCA9
IGZkX2xvY2soZmQsIEZEX1dSSVRFKSkgPT0gT0spIHsNCisgCQkJaWYgKChy
ZXQgPSBtYWNoZGVwX3N5c19zaHV0ZG93bihmZF90YWJsZVtmZF0tPmZkLmks
IGhvdykpIDwgT0spIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9IC1y
ZXQ7DQorIAkJCX0NCisgCQkJZmRfdW5sb2NrKGZkLCBGRF9XUklURSk7DQor
IAkJfQ0KKyAJY2FzZSAyOiAvKiBSZWFkLVdyaXRlICovDQorIAkJaWYgKChy
ZXQgPSBmZF9sb2NrKGZkLCBGRF9SRFdSKSkgPT0gT0spIHsNCisgCQkJaWYg
KChyZXQgPSBtYWNoZGVwX3N5c19zaHV0ZG93bihmZF90YWJsZVtmZF0tPmZk
LmksIGhvdykpIDwgT0spIHsNCisgCQkJCXB0aHJlYWRfcnVuLT5lcnJvciA9
IC1yZXQ7DQorIAkJCX0NCisgCQkJZmRfdW5sb2NrKGZkLCBGRF9SRFdSKTsN
CisgCQl9DQorIAlkZWZhdWx0Og0KKyAJCXB0aHJlYWRfcnVuLT5lcnJvciA9
IEVCQURGOw0KKyAJCXJldCA9IC1FQkFERjsNCisgCQlicmVhazsNCisgCX0N
CisgCXJldHVybihyZXQpOw0KKyB9DQpkaWZmIC1jck4gcHRocmVhZHMvdGVz
dHMvcF9iZW5jaF9tdXRleC5jIHB0aHJlYWRzLm5ldy90ZXN0cy9wX2JlbmNo
X211dGV4LmMNCioqKiBwdGhyZWFkcy90ZXN0cy9wX2JlbmNoX211dGV4LmMJ
TW9uIEF1ZyAgOCAwNDo0OToyMiAxOTk0DQotLS0gcHRocmVhZHMubmV3L3Rl
c3RzL3BfYmVuY2hfbXV0ZXguYwlUaHUgRGVjIDE1IDExOjEzOjE5IDE5OTQN
CioqKioqKioqKioqKioqKg0KKioqIDI1LDMxICoqKioNCiAgbWFpbihpbnQg
YXJnYywgY2hhciAqKmFyZ3YpDQogIHsNCiAgCXN0cnVjdCB0aW1ldmFsIHN0
YXJ0dGltZSwgZW5kdGltZTsNCiEgCXB0aHJlYWRfbXV0ZXhfdCBsb2NrOw0K
ICAJaW50IGNvdW50ID0gMTAwMDAwMDsNCiAgCWludCBkZWJ1ZyA9IDA7DQog
IAlpbnQgaTsNCi0tLSAyNSwzMSAtLS0tDQogIG1haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQ0KICB7DQogIAlzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWUs
IGVuZHRpbWU7DQohIAlwdGhyZWFkX211dGV4X3QgbG9jayA9IFBUSFJFQURf
TVVURVhfSU5JVElBTElaRVI7DQogIAlpbnQgY291bnQgPSAxMDAwMDAwOw0K
ICAJaW50IGRlYnVnID0gMDsNCiAgCWludCBpOw0K
--0-1056553425-791482196=:27708--
