Improvement of DHCP code

wiegelj <[email protected]> Thu, 21 Nov 2019 10:07:01 +0100
Newsgroups gmane.comp.hardware.microcontrollers.ethernut
Message-ID <[email protected]>
SGkgZm9sa3MsCgpJIGRvbid0IGtub3cgaWYgYXR0YWNobWVudHMgYXJlIHdvcmtpbmcgaW4gdGhl
IG1haWxpbmcgbGlzdCwgYnV0IEkgd2FudAp0byBzaGFyZSBhbiBpbXByb3ZlZCB2ZXJzaW9uIG9m
IHRoZSBkaGNwIHNvZnR3YXJlIGluIHRoZSBhdHRhY2hlbWVudC4gSXQKaXMgZGVyaXZlZCBmcm9t
IHRoZSBldGhlcm51dC01LjEuMC0xIHZlcnNpb24gYW5kIGhhcyBhbiBhZGRpdGlvbmFsIGZpeApm
cm9tIEhlbnJpayAoVGhhbmsgeW91IGZvciB0aGlzKS4KCkkgaG9wZSB0aGF0IHNvbWVvbmUgaXMg
Y2hlY2tpbmcgaW4gdGhlIHNvdXJjZS4gSSBzcGVudCBhIGxvdCBvZiB0aW1lCmxvb2tpbmcgZm9y
IHByb2JsZW1zIGluIHRoZSBkaGNwIGNvZGUuCgpCZXN0IHJlZ2FyZHMKCkrDtnJnCgotLS0tLS0t
LS0tLS0tLSBuZXh0IHBhcnQgLS0tLS0tLS0tLS0tLS0KLyoNCiAqIENvcHlyaWdodCAoQykgMjAw
MS0yMDA1IGJ5IGVnbml0ZSBTb2Z0d2FyZSBHbWJILiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICoN
CiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogKiBhcmUgbWV0Og0KICoNCiAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuDQogKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4NCiAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJz
IG5vciB0aGUgbmFtZXMgb2YNCiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZA0KICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICoNCiAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMNCiAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QNCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTDQogKiBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KICogQ09QWVJJR0hU
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywNCiAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUw0KICogT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEDQogKiBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksDQogKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YNCiAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KICogU1VDSCBEQU1BR0UuDQog
Kg0KICogRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc2VlIGh0dHA6Ly93d3cuZXRoZXJudXQu
ZGUvDQogKg0KICogLQ0KICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzIGJ5DQog
KiAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6
DQogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUNCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uDQogKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2
ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlDQogKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAq
DQogKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFDQogKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMNCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCiAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkNCiAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCiAqIFNVQ0ggREFNQUdFLg0KICogLQ0KICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9u
Lg0KICoNCiAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRl
IHRoaXMgc29mdHdhcmUgZm9yIGFueQ0KICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlz
IGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQ0KICogY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5k
IHRoYXQNCiAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBi
ZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yDQogKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0
cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQNCiAqIHNwZWNpZmlj
LCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uDQogKg0KICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwNCiAq
IFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJ
TVBMSUVEIFdBUlJBTlRJRVMNCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJ
TiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVA0KICogQ09SUE9SQVRJT04gQkUgTElB
QkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTA0K
ICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Mg
T0YgVVNFLCBEQVRBIE9SDQogKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U
UkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUw0KICogQUNUSU9OLCBBUklTSU5HIE9V
VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElT
DQogKiBTT0ZUV0FSRS4NCiAqLw0KDQovKiENCiAqIFxmaWxlIHByby9kaGNwYy5jDQogKiBcYnJp
ZWYgREhDUCBjbGllbnQuDQogKg0KICogXHZlcmJhdGltDQogKg0KICogJExvZyQNCiAqIFJldmlz
aW9uIDEuMjcgIDIwMDkvMDIvMTMgMTQ6NTI6MDUgIGhhcmFsZGtpcHANCiAqIEluY2x1ZGUgbWVt
ZGVidWcuaCBmb3IgaGVhcCBtYW5hZ2VtZW50IGRlYnVnZ2luZyBzdXBwb3J0Lg0KICoNCiAqIFJl
dmlzaW9uIDEuMjYgIDIwMDkvMDIvMDYgMTU6Mzc6NDAgIGhhcmFsZGtpcHANCiAqIEFkZGVkIHN0
YWNrIHNwYWNlIG11bHRpcGxpZXIgYW5kIGFkZGVuZC4gQWRqdXN0ZWQgc3RhY2sgc3BhY2UuDQog
Kg0KICogUmV2aXNpb24gMS4yNSAgMjAwOS8wMS8xNyAxMToyNjo1MiAgaGFyYWxka2lwcA0KICog
R2V0dGluZyByaWQgb2YgdHdvIHJlbWFpbmluZyBCU0QgdHlwZXMgaW4gZmF2b3Igb2Ygc3RkaW50
Lg0KICogUmVwbGFjZWQgJ3VfaW50JyBieSAndW5zaW5nZWQgaW50JyBhbmQgJ3VwdHJfdCcgYnkg
J3VpbnRwdHJfdCcuDQogKg0KICogUmV2aXNpb24gMS4yNCAgMjAwOC8xMC8wNSAxNjo0NjoxNSAg
aGFyYWxka2lwcA0KICogQWRkZWQgbWlzc2luZyBhdHRyaWJ1dGVzICdwYWNrZWQnLiBUaGlzIG1h
eSBmaXggYSBwcm9ibGVtIHdpdGgNCiAqIGRpZmZlcmVudCBBUk0gY29tcGlsZXIgb3B0aW1pemF0
aW9uIHNldHRpbmdzLg0KICoNCiAqIFJldmlzaW9uIDEuMjMgIDIwMDgvMDgvMTEgMDc6MDA6MzQg
IGhhcmFsZGtpcHANCiAqIEJTRCB0eXBlcyByZXBsYWNlZCBieSBzdGRpbnQgdHlwZXMgKGZlYXR1
cmUgcmVxdWVzdCAjMTI4MjcyMSkuDQogKg0KICogUmV2aXNpb24gMS4yMiAgMjAwNi8wOC8wMSAw
NzozODo0MSAgaGFyYWxka2lwcA0KICogREhDUCBjbGllbnQgZmFpbGVkIGJlY2F1c2Ugb2YgYWxp
Z25tZW50IGVycm9ycy4gUmVtb3ZlZCB0aGUgZGlzcGVuc2FibGUNCiAqICdwYWNrZWQnIGF0dHJp
YnV0ZSBmcm9tIHRoZSBkeW5fY2ZnIHN0cnVjdHVyZS4NCiAqDQogKiBSZXZpc2lvbiAxLjIxICAy
MDA2LzAxLzIzIDE5OjUyOjEwICBoYXJhbGRraXBwDQogKiBBZGRlZCByZXF1aXJlZCB0eXBlY2Fz
dHMgYmVmb3JlIGxlZnQgc2hpZnQuDQogKg0KICogUmV2aXNpb24gMS4yMCAgMjAwNi8wMS8yMyAx
NzozNTo1NCAgaGFyYWxka2lwcA0KICogQk9PVFAgYW5kIERZTkNGRyBzdHJ1Y3R1cmVzIG11c3Qg
YmUgcGFja2VkLg0KICogRml4ZWQgbWVtb3J5IGFsaWdubWVudCBidWcsIHdoaWNoIHJldHJpZXZl
ZCB3cm9uZyB2YWx1ZXMgZnJvbSBESENQIG9wdGlvbnMuDQogKg0KICogUmV2aXNpb24gMS4xOSAg
MjAwNS8wOC8wMiAxNzo0NzowNCAgaGFyYWxka2lwcA0KICogTWFqb3IgQVBJIGRvY3VtZW50YXRp
b24gdXBkYXRlLg0KICoNCiAqIFJldmlzaW9uIDEuMTggIDIwMDUvMDQvMDUgMTc6NDQ6NTcgIGhh
cmFsZGtpcHANCiAqIE1hZGUgc3RhY2sgc3BhY2UgY29uZmlndXJhYmxlLg0KICoNCiAqIFJldmlz
aW9uIDEuMTcgIDIwMDUvMDMvMjggMTg6MjY6NTkgIG1yam9uZXM0dQ0KICogRml4ZWQgbm9uLXJl
bGVhc2UgYnVnIGluIERDSFAgY2xpZW50DQogKg0KICogUmV2aXNpb24gMS4xNiAgMjAwNS8wMi8w
MyAxNDozMzo1NiAgaGFyYWxka2lwcA0KICogU2V2ZXJhbCBidWcgZml4ZXMgYW5kIGVuaGFuY2Vt
ZW50cy4gVGhlIG1vc3QgaW1wb3J0YW50IGZpeCB3aWxsDQogKiBhdm9pZCBoYW5naW5nLCB3aGVu
IEV0aGVybnV0IGlzIHJlc2V0IHdoaWxlIElDTVAgcGluZ3MgYXJlDQogKiByZWNlaXZlZC4gQSBs
YXJnZSBudW1iZXIgb2YgY2hhbmdlcyBtYWtlIHRoZSBjbGllbnQgdG8gZm9sbG93DQogKiBSRkMg
MjEzMSBtb3JlIGNsb3NlbHksIGxpa2UgbWFpbnRhaW5pbmcgcmVuZXdhbCBhbmQgcmViaW5kIHRp
bWUuDQogKiBUd28gbmV3IEFQSSBjYWxscywgTnV0RGhjcFN0YXR1cygpIGFuZCBOdXREaGNwRXJy
b3IoKSwgYWxsb3cNCiAqIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgREhDUCBj
bGllbnQuIFRoZSBwcmV2aW91c2x5DQogKiBpbnRyb2R1Y2VkIEFQSSBjYWxsIE51dERoY3BJc0Nv
bmZpZ3VyZWQoKSBoYXMgYmVlbiBtYXJrZWQNCiAqIGRlcHJlY2F0ZWQuIEFub3RoZXIgcHJvYmxl
bSB3YXMgd2l0aCB0aW1lb3V0LCBiZWNhdXNlIHRoZSBjbGllbnQNCiAqIGNvbnRpbnVlZCBuZWdv
dGlhdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgYWZ0ZXIgdGhlIHRpbWVvdXQgdGltZQ0KICogZ2l2ZW4g
aW4gdGhlIEFQSSBjYWxsZWQgZWxhcHNlZC4gTm93IGFsbCBpbnRlcm5hbCB0aW1lb3V0cyBhcmUN
CiAqIGFkanVzdGVkIHRvIHRoZSBBUEkgdGltZW91dC4gRnVydGhlcm1vcmUgdGhlIHByZXZpb3Vz
IHZlcnNpb24NCiAqIGxldCB0aGUgY2xpZW50IGNvbnRpbnVlIG9uIGZhdGFsIGVycm9ycyBsaWtl
IFVEUCByZWNlaXZlIG9yIFVEUA0KICogYnJvYWRjYXN0IGZhaWx1cmVzLiBOb3cgdGhlIGNsaWVu
dCBzdG9wcyBvbiBzdWNoIGVycm9ycyBhbmQNCiAqIGluZm9ybXMgdGhlIGNhbGxlci4gRmluYWxs
eSB0aGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiBlbmhhbmNlZC4NCiAqDQogKiBSZXZpc2lvbiAx
LjE1ICAyMDA0LzEyLzMxIDEwOjUxOjQwICBkcnN1bmcNCiAqIEJ1Z2ZpeGVzIGZyb20gTWljaGVs
IEhlbmRyaWtzIGFwcGxpZWQ6DQogKiBBbGxvY2F0ZSBlbXB0eSBkeW5jZmcncyB0byBwcmV2ZW50
IGZyZWVpbmcgdHdpY2Ugb2YgZG9tYWluL2hvc3RuYW1lDQogKiBDbGVhciBwb2ludGVyIGFmdGVy
IFJlbGVhc2VEeW5DZmcgdG8gcHJldmVudCBmcmVlaW5nIHR3aWNlDQogKiBNYWtlIHN1cmUgU2Vs
ZWN0T2ZmZXIgaXMgbmV2ZXIgY2FsbGVkIHdpdGggMCBvZmZlcnMNCiAqIFdoZW4gZmFsbGluZyBi
YWNrIGZyb20gcmVib290aW5nIHRvIHNlbGVjdGluZywgY2xlYXINCiAqIHRoZSByZWNlaXZlZCBp
cCBhZGRyZXNzIHNvIE51dERoY3BJZkNvbmZpZyBkb2VzIG5vdA0KICogYXNzdW1lIGl0IGhhcyBi
ZWVuIGNvbmZpZ3VyZWQgcHJvcGVybHkNCiAqDQogKiBSZXZpc2lvbiAxLjE0ICAyMDA0LzA0LzE1
IDA3OjE2OjQ3ICBkcnN1bmcNCiAqIE5vdyBpdCB3b3Jrcy4uLiA6LS8NCiAqDQogKiBSZXZpc2lv
biAxLjEzICAyMDA0LzA0LzE1IDA3OjExOjUwICBkcnN1bmcNCiAqIEFkZGVkIGhvc3RuYW1lIHN1
cHBvcnQgdG8gTnV0REhDUERpc2NvdmVyDQogKg0KICogUmV2aXNpb24gMS4xMiAgMjAwNC8wMy8x
OCAxMToyNDowMSAgaGFyYWxka2lwcA0KICogRGVwcmVjYXRlZCBmdW5jdGlvbnMgcmVtb3ZlZA0K
ICoNCiAqIFJldmlzaW9uIDEuMTEgIDIwMDQvMDMvMDMgMTc6NTM6MjggIGRyc3VuZw0KICogU3Vw
cG9ydCBmb3IgbmV3IGZpZWxkICdob3N0bmFtZScgaW4gc3RydWN0dXJlIGNvbmZvcyBhZGRlZC4N
CiAqDQogKiBSZXZpc2lvbiAxLjEwICAyMDA0LzAyLzI1IDE2OjM0OjMyICBoYXJhbGRraXBwDQog
KiBOZXcgQVBJIGFkZGVkIHRvIHJlbGluZ3Vpc2ggdGhlIERIQ1AgbGVhc2UuIENvbGxlY3Rpbmcg
bW9yZQ0KICogdGhhbiBvbmUgb2ZmZXIgaXMgbm93IGRpc2FibGVkLCBpZiB0aGUgYXBwbGljYXRp
b24gc2V0cyB0aW1lb3V0DQogKiBiZWxvdyB0aHJlZSB0aW1lcyBvZiBNQVhfREhDUF9XQUlUICg1
IHNlY29uZHMpLiBUaGUgbGVhc2UgcmVuZXdhbA0KICogd2lsbCBub3cgc3RhcnQgd2hlbiAzLzQg
aGFzIGVsYXBzZWQsIG9wcG9zZWQgdG8gMS8yIHVzZWQgcHJldmlvdXNseS4NCiAqIEZpbmFsbHkg
dGhlIERIQ1AgdGhyZWFkIHdpbGwgc2xlZXAgYXMgbG9uZyBhcyBwb3NzaWJsZSwgd2hpbGUgdGhl
DQogKiBwcmV2aW91cyB2ZXJzaW9uIHdva2UgdXAgZXZlcnkgdGVuIHNlY29uZHMuDQogKg0KICog
UmV2aXNpb24gMS45ICAyMDA0LzAyLzAyIDE4OjU0OjQzICBkcnN1bmcNCiAqIGdhdGV3YXkgaXAg
YWRkcmVzcyB3YXMgbm90IHNldCwgaWYgc3RhdGljIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmcm9t
IEVFUFJPTSBpcyB1c2VkLg0KICoNCiAqIFJldmlzaW9uIDEuOCAgMjAwNC8wMS8xNCAxNzo1MDo0
MSAgZHJzdW5nDQogKiBGaXggZm9yIFdpbjJrIERIQ1Agc2VydmVyIGFwcGxpZWQuIFRoYW5rcyB0
byBEYW1pYW4gU2xlZQ0KICoNCiAqIFJldmlzaW9uIDEuNyAgMjAwMy8xMS8wMyAxNjoyMjo1OSAg
aGFyYWxka2lwcA0KICogUmVuZXdhbCBkaXNhYmxlZCBpZiBsZWFzZSB0aW1lIGlzIHNldCB0byB6
ZXJvDQogKg0KICogUmV2aXNpb24gMS42ICAyMDAzLzEwLzEzIDEwOjE4OjA4ICBoYXJhbGRraXBw
DQogKiBVc2luZyBuZXcgc2Vjb25kcyBjb3VudGVyDQogKg0KICogUmV2aXNpb24gMS41ICAyMDAz
LzA4LzA3IDA5OjA5OjA4ICBoYXJhbGRraXBwDQogKiBSZWRlc2lnbiB0byBmb2xsb3cgUkZDIDIx
MzEgbW9yZSBjbG9zZWx5Lg0KICoNCiAqIFJldmlzaW9uIDEuNCAgMjAwMy8wNy8yMCAxODoyNTo0
MCAgaGFyYWxka2lwcA0KICogU3VwcG9ydCBzZWNvbmRhcnkgRE5TLg0KICoNCiAqIFJldmlzaW9u
IDEuMyAgMjAwMy8wNy8xNyAwOTo0NDoxNCAgaGFyYWxka2lwcA0KICogUmVtb3ZlZCBkZWZhdWx0
IE1BQyBhZGRyZXNzIGFuZCBsZXQgdGhlIGNhbGxlciBoYXZlIGEgc2Vjb25kIGNoYW5jZS4NCiAq
DQogKiBSZXZpc2lvbiAxLjIgIDIwMDMvMDUvMTUgMTQ6MjU6MzggIGhhcmFsZGtpcHANCiAqIFNv
bWUgREhDUCBzZXJ2ZXJzIGRpc2NhcmQgZGlzY292ZXIgdGVsZWdyYW1zLg0KICogVGhhbmtzIHRv
IFRvbW9oaXJvIEhhcmFpa2F3YS4NCiAqDQogKiBSZXZpc2lvbiAxLjEuMS4xICAyMDAzLzA1LzA5
IDE0OjQxOjU3ICBoYXJhbGRraXBwDQogKiBJbml0aWFsIHVzaW5nIDMuMi4xDQogKg0KICogXGVu
ZHZlcmJhdGltDQogKi8NCg0KI2luY2x1ZGUgPGNmZy9vcy5oPg0KI2luY2x1ZGUgPHN5cy90aHJl
YWQuaD4NCiNpbmNsdWRlIDxzeXMvZXZlbnQuaD4NCiNpbmNsdWRlIDxzeXMvdGltZXIuaD4NCiNp
bmNsdWRlIDxzeXMvY29uZm5ldC5oPg0KI2luY2x1ZGUgPHN5cy9jb25mb3MuaD4NCg0KI2luY2x1
ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNp
bmNsdWRlIDxtZW1kZWJ1Zy5oPg0KDQojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQojaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4NCiNpbmNsdWRlIDxu
ZXRkYi5oPg0KI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4N
CiNpbmNsdWRlIDxwcm8vZGhjcC5oPg0KDQojaWZkZWYgTlVUREVCVUcNCiNpbmNsdWRlIDxuZXQv
bmV0ZGVidWcuaD4NCiNlbmRpZg0KDQojaWYgMA0KLyogVXNlIGZvciBsb2NhbCBkZWJ1Z2dpbmcu
ICovDQojZGVmaW5lIE5VVERFQlVHDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNkZWZpbmUgX190Y3Bf
dHJzIHN0ZG91dA0Kc3RhdGljIHVpbnRfZmFzdDhfdCBfX3RjcF90cmYgPSAxOw0KI2VuZGlmDQoN
Ci8qIQ0KICogXGFkZHRvZ3JvdXAgeGdESENQQw0KICovDQovKkB7Ki8NCg0KLyohDQogKiBcbmFt
ZSBESENQIENsaWVudCBDb25maWd1cmF0aW9uDQogKg0KICogVGhlIE51dC9PUyBDb25maWd1cmF0
b3IgbWF5IGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzLg0KICovDQovKkB7
Ki8NCg0KLyohDQogKiBcYnJpZWYgVURQIHBvcnQgb2YgREhDUCBzZXJ2ZXIuDQogKg0KICogXHNo
b3dpbml0aWFsaXplcg0KICovDQojaWZuZGVmIERIQ1BfU0VSVkVSUE9SVA0KI2RlZmluZSBESENQ
X1NFUlZFUlBPUlQgICAgICA2Nw0KI2VuZGlmDQoNCi8qIQ0KICogXGJyaWVmIFVEUCBwb3J0IG9m
IERIQ1AgY2xpZW50Lg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXINCiAqLw0KI2lmbmRlZiBESENQ
X0NMSUVOVFBPUlQNCiNkZWZpbmUgREhDUF9DTElFTlRQT1JUICAgICAgNjgNCiNlbmRpZg0KDQov
KiENCiAqIFxicmllZiBNYXhpbXVtIERIQ1AgbWVzc2FnZSBzaXplIHdlIGNhbiBhY2NlcHQuDQog
Kg0KICogUkZDIDIxMzEgZGVtYW5kcywgdGhhdCBhIERIQ1AgY2xpZW50IG11c3QgYmUgcHJlcGFy
ZWQgdG8gcmVjZWl2ZSBESENQDQogKiBtZXNzYWdlcyB3aXRoIGFuIG9wdGlvbnMgZmllbGQgbGVu
Z3RoIG9mIGF0IGxlYXN0IDMxMiBvY3RldHMuIFRoaXMNCiAqIGltcGxpZXMgdGhhdCB3ZSBtdXN0
IGJlIGFibGUgdG8gYWNjZXB0IG1lc3NhZ2VzIG9mIHVwIHRvIDU3NiBvY3RldHMuDQogKg0KICog
XHNob3dpbml0aWFsaXplcg0KICovDQojaWZuZGVmIE1BWF9ESENQX01TR1NJWkUNCiNkZWZpbmUg
TUFYX0RIQ1BfTVNHU0laRSAgICA1NzYNCiNlbmRpZg0KDQovKiENCiAqIFxicmllZiBNaW5pbXVt
IERIQ1AgbWVzc2FnZSBsZW5ndGguDQogKg0KICogVXNlZCB0byBtYWludGFpbiBCT09UUCBjb21w
YXRpYmlsaXR5IG9mIG91dGdvaW5nIG1lc3NhZ2VzLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXIN
CiAqLw0KI2lmbmRlZiBNSU5fREhDUF9NU0dTSVpFDQojZGVmaW5lIE1JTl9ESENQX01TR1NJWkUg
ICAgMzAwDQojZW5kaWYNCg0KLyohDQogKiBcYnJpZWYgTWF4aW11bSBVRFAgYnVmZmVyIHNpemUg
dXNlZCBieSB0aGUgREhDUCBjbGllbnQuDQogKg0KICogSWYgdGhpcyBpdGVtIGlzIG5vdCBlcXVh
bCB6ZXJvLCB0aGUgREhDUCBjbGllbnQgd2lsbCB1c2UgaXRzIHZhbHVlIHRvDQogKiBzZXQgI1NP
X1JDVkJVRiBieSBjYWxsaW5nIE51dFVkcFNldFNvY2tPcHQoKS4NCiAqDQogKiBJZiB0aGlzIGl0
ZW0gaXMgc2V0IHRvIHplcm8sIE51dFVkcFNldFNvY2tPcHQoKSBpcyBub3QgY2FsbGVkIGFuZCB0
aGUNCiAqIFVEUCBzb2NrZXQgaW50ZXJmYWNlIHdpbGwgYnVmZmVyIHRoZSBsYXN0IGluY29taW5n
IGRhdGFncmFtIG9uIHRoZQ0KICogI0RIQ1BfQ0xJRU5UUE9SVCBzb2NrZXQgcG9ydCBvbmx5LiBB
bnkgcHJldmlvdXNseSByZWNlaXZlZCBkYXRhZ3JhbSBpcw0KICogc2lsZW50bHkgZGlzY2FyZGVk
LiBBcyBsb25nIGFzIG9uZSBESENQIHNlcnZlciBpcyBleHBlY3RlZCBpbiB0aGUgbG9jYWwNCiAq
IG5ldHdvcmssIHRoaXMgd2lsbCBiZSBmaW5lIGFuZCBzYXZlIHNvbWUgaGVhcCBtZW1vcnkgd2hp
bGUgREhDUCBpcw0KICogYWN0aXZlLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXINCiAqLw0KI2lm
bmRlZiBNQVhfREhDUF9CVUZTSVpFDQojZGVmaW5lIE1BWF9ESENQX0JVRlNJWkUgICAgMTcyOA0K
I2VuZGlmDQoNCi8qIQ0KICogXGJyaWVmIE1pbmltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0
byB3YWl0IGZvciBhIHJlc3BvbnNlLg0KICoNCiAqIElmIHdlIHJlY2VpdmUgbm8gcmVzcG9uc2Ug
ZnJvbSBhIERIQ1Agc2VydmVyIHdpdGhpbiB0aGlzIHRpbWUsIHdlDQogKiB3aWxsIGRvdWJsZSB0
aGlzIHZhbHVlIHVwIHRvIFxyZWYgTUFYX0RIQ1BfV0FJVCBhbmQgcmVwZWF0IG91cg0KICogcmVx
dWVzdCB1cCB0byBccmVmIE1BWF9EQ0hQX1JFVFJJRVMgdGltZXMgYmVmb3JlIGdpdmluZyB1cC4N
CiAqDQogKiBcc2hvd2luaXRpYWxpemVyDQogKi8NCiNpZm5kZWYgTUlOX0RIQ1BfV0FJVA0KI2Rl
ZmluZSBNSU5fREhDUF9XQUlUICAgICAgIDQwMDANCiNlbmRpZg0KDQovKiENCiAqIFxicmllZiBN
YXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgYSByZXNwb25zZS4NCiAq
DQogKiBUaGUgdGltZW91dCB2YWx1ZSBmb3IgcmVjZWl2aW5nIHNlcnZlciByZXNwb25zZXMgd2ls
bCBiZSBkb3VibGVkDQogKiBvbiBlYWNoIHJldHJ5IGJ1dCBsaW1pdGVkIGJ5IHRoaXMgdmFsdWUu
DQogKg0KICogXHNob3dpbml0aWFsaXplcg0KICovDQojaWZuZGVmIE1BWF9ESENQX1dBSVQNCiNk
ZWZpbmUgTUFYX0RIQ1BfV0FJVCAgICAgICA2NDAwMA0KI2VuZGlmDQoNCi8qIQ0KICogXGJyaWVm
IE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3QgcmV0cmllcy4NCiAqDQogKiBXZSB3aWxsIGdpdmUg
dXAgYWZ0ZXIgcmVzZW5kaW5nIHRoaXMgbnVtYmVyIG9mIHJlcXVlc3RzIHdpdGhvdXQNCiAqIHJl
Y2VpdmluZyBhIHJlc3BvbnNlLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXINCiAqLw0KI2lmbmRl
ZiBNQVhfRENIUF9SRVRSSUVTDQojZGVmaW5lIE1BWF9EQ0hQX1JFVFJJRVMgICAgMw0KI2VuZGlm
DQoNCi8qIQ0KICogXGJyaWVmIE1heGltdW0gbnVtYmVyIG9mIHJlbGVhc2UgcmV0cmllcy4NCiAq
DQogKiBSRkMgMjEzMSBkb2Vzbid0IHNwZWNpZnkgYSBzZXJ2ZXIgcmVzcG9uc2UgdG8gcmVsZWFz
ZSBtZXNzYWdlcyBmcm9tDQogKiB0aGUgY2xpZW50LiBJZiB0aGUgbWVzc2FnZSBnZXRzIGxvc3Qs
IHRoZW4gdGhlIGxlYXNlIGlzbid0IHJlbGVhc2VkLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXIN
CiAqLw0KI2lmbmRlZiBNQVhfRENIUF9SRUxFQVNFX1JFVFJJRVMNCiNkZWZpbmUgTUFYX0RDSFBf
UkVMRUFTRV9SRVRSSUVTICAgIDANCiNlbmRpZg0KDQovKiENCiAqIFxicmllZiBEZWZhdWx0IGxl
YXNlIHRpbWUgaW4gc2Vjb25kcy4NCiAqDQogKiBUaGlzIHZhbHVlIGlzIHVzZWQgaWYgdGhlIHNl
cnZlciBkb2Vzbid0IHByb3ZpZGUgYSBsZWFzZSB0aW1lLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6
ZXINCiAqLw0KI2lmbmRlZiBESENQX0RFRkFVTFRfTEVBU0UNCiNkZWZpbmUgREhDUF9ERUZBVUxU
X0xFQVNFICA0MzIwMA0KI2VuZGlmDQoNCi8qIQ0KICogXGJyaWVmIE1heGltdW0gc2xlZXAgdGlt
ZSBpbiBzZWNvbmRzLg0KICoNCiAqIFxzaG93aW5pdGlhbGl6ZXINCiAqLw0KI2lmbmRlZiBNQVhf
REhDUF9OQVBUSU1FDQojZGVmaW5lIE1BWF9ESENQX05BUFRJTUUgICAgNDI5NDk2Nw0KI2VuZGlm
DQoNCi8qIQ0KICogXGJyaWVmIFN0YWNrIHNpemUgb2YgdGhlIERIQ1AgY2xpZW50IHRocmVhZC4N
CiAqDQogKiBcc2hvd2luaXRpYWxpemVyDQogKi8NCiNpZm5kZWYgTlVUX1RIUkVBRF9ESENQU1RB
Q0sNCiNpZiBkZWZpbmVkKF9fQVZSX18pDQojaWYgZGVmaW5lZChfX0dOVUNfXykNCi8qIGF2ci1n
Y2Mgc2l6ZSBvcHRpbWl6ZWQgY29kZSB1c2VkIDE5MiBieXRlcy4gKi8NCiNkZWZpbmUgTlVUX1RI
UkVBRF9ESENQU1RBQ0sgICAgMjg4DQojZWxzZQ0KLyogaWNjLWF2ciB2Ny4xOSB1c2VkIDM2MCBi
eXRlcy4gKi8NCiNkZWZpbmUgTlVUX1RIUkVBRF9ESENQU1RBQ0sgICAgNTEyDQojZW5kaWYNCiNl
bHNlDQovKiBhcm0tZWxmLWdjYyB1c2VkIDI3NiBieXRlcyB3aXRoIHNpemUgb3B0aW1pemVkLCA2
ODAgYnl0ZXMgd2l0aCBkZWJ1ZyBjb2RlLiAqLw0KLyogYXJtLW5vbmUtZWFiaSBjcmVhdGVzIHN0
YWNrIG92ZXJmbG93IHdpdGggMzg0IGJ5dGVzIG9uIEVJUiAxLjAgYm9hcmQuICovDQojZGVmaW5l
IE5VVF9USFJFQURfREhDUFNUQUNLICAgIDUxMg0KI2VuZGlmDQojZW5kaWYNCg0KLypAfSovDQoN
Ci8qIQ0KICogXG5hbWUgREhDUCBNZXNzYWdlIFR5cGVzDQogKg0KICogU2VlIFJGQyAyMTMxLg0K
ICovDQovKkB7Ki8NCg0KLyohIFxicmllZiBDbGllbnQgYnJvYWRjYXN0IHRvIGxvY2F0ZSBhdmFp
bGFibGUgc2VydmVycy4NCiAqLw0KI2RlZmluZSBESENQX0RJU0NPVkVSICAgMQ0KDQovKiEgXGJy
aWVmIFNlcnZlciB0byBjbGllbnQgaW4gcmVzcG9uc2UgdG8gREhDUF9ESVNDT1ZFUi4NCiAqDQog
KiBDb250YWlucyBhbiBvZmZlciBvZiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuDQogKi8NCiNk
ZWZpbmUgREhDUF9PRkZFUiAgICAgIDINCg0KLyohIFxicmllZiBDbGllbnQgbWVzc2FnZSB0byBz
ZXJ2ZXJzLg0KICoNCiAqIFVzZWQgZm9yDQogKiAtIHJlcXVlc3Rpbmcgb2ZmZXJlZCBwYXJhbWV0
ZXJzIGZyb20gb25lIHNlcnZlciBhbmQgaW1wbGljaXRseSBkZWNsaW5pbmcgb2ZmZXJzIGZyb20g
YWxsIG90aGVycy4NCiAqIC0gY29uZmlybWluZyBjb3JyZWN0bmVzcyBvZiBwcmV2aW91c2x5IGFs
bG9jYXRlZCBhZGRyZXNzIGFmdGVyLCBlLmcuLCBzeXN0ZW0gcmVib290Lg0KICogLSBleHRlbmRp
bmcgdGhlIGxlYXNlIG9uIGEgcGFydGljdWxhciBuZXR3b3JrIGFkZHJlc3MuDQogKi8NCiNkZWZp
bmUgREhDUF9SRVFVRVNUICAgIDMNCg0KLyohIFxicmllZiBDbGllbnQgdG8gc2VydmVyIGluZGlj
YXRpbmcgbmV0d29yayBhZGRyZXNzIGlzIGFscmVhZHkgaW4gdXNlLg0KICoNCiAqIE5vdCB1c2Vk
IGJ5IE51dC9OZXQuDQogKi8NCiNkZWZpbmUgREhDUF9ERUNMSU5FICAgIDQNCg0KLyohIFxicmll
ZiBTZXJ2ZXIgdG8gY2xpZW50IHdpdGggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLg0KICoNCiAq
IENvbnRhaW5zIGNvbW1pdHRlZCBuZXR3b3JrIGFkZHJlc3MuDQogKi8NCiNkZWZpbmUgREhDUF9B
Q0sgICAgICAgIDUNCg0KLyohIFxicmllZiBTZXJ2ZXIgdG8gY2xpZW50IGluZGljYXRpbmcgY2xp
ZW50J3Mgbm90aW9uIG9mIG5ldHdvcmsgYWRkcmVzcyBpcyBpbmNvcnJlY3QuDQogKg0KICogTWF5
IGJlIGNhdXNlZCBieSB0aGUgY2xpZW50J3MgbW92ZSB0byBuZXcgc3VibmV0IG9yIGJ5IGV4cGly
YXRpb24gb2YgdGhlIGNsaWVudCdzIGxlYXNlLg0KICovDQojZGVmaW5lIERIQ1BfTkFLICAgICAg
ICA2DQoNCi8qISBcYnJpZWYgQ2xpZW50IHRvIHNlcnZlciByZWxpbnF1aXNoaW5nIG5ldHdvcmsg
YWRkcmVzcyBhbmQgY2FuY2VsbGluZyByZW1haW5pbmcgbGVhc2UuDQogKi8NCiNkZWZpbmUgREhD
UF9SRUxFQVNFICAgIDcNCg0KLyohIFxicmllZiBDbGllbnQgdG8gc2VydmVyLCBhc2tpbmcgb25s
eSBmb3IgbG9jYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLg0KICoNCiAqIFVzZWQsIGlmIHRo
ZSBjbGllbnQgYWxyZWFkeSBoYXMgZXh0ZXJuYWxseSBjb25maWd1cmVkIG5ldHdvcmsgYWRkcmVz
cy4NCiAqLw0KI2RlZmluZSBESENQX0lORk9STSAgICAgOA0KDQovKkB9Ki8NCg0KDQovKiENCiAq
IFxuYW1lIERIQ1AgT3B0aW9ucw0KICoNCiAqIE51dC9OZXQgcmVjb2duaXplcyBhIHN1YnNldCBv
ZiBvcHRpb25zIGRlZmluZWQgaW4gUkZDIDIxMzIuDQogKi8NCi8qQHsqLw0KDQovKiENCiAqIFxi
cmllZiBESENQIHBhZCBvcHRpb24uDQogKg0KICogVGhlIHBhZCBvcHRpb24gY2FuIGJlIHVzZWQg
dG8gY2F1c2Ugc3Vic2VxdWVudCBmaWVsZHMgdG8gYWxpZ24gb24NCiAqIHdvcmQgYm91bmRhcmll
cy4NCiAqLw0KI2RlZmluZSBESENQT1BUX1BBRCAgICAgICAgICAwDQoNCi8qIQ0KICogXGJyaWVm
IERIQ1Agc3VibmV0IG1hc2sgb3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRfTkVUTUFTSyAg
ICAgIDENCg0KLyohDQogKiBcYnJpZWYgREhDUCByb3V0ZXIgb3B0aW9uLg0KICovDQojZGVmaW5l
IERIQ1BPUFRfR0FURVdBWSAgICAgIDMNCg0KLyohDQogKiBcYnJpZWYgREhDUCBkb21haW4gbmFt
ZSBzZXJ2ZXIgb3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRfRE5TICAgICAgICAgIDYNCg0K
LyohDQogKiBcYnJpZWYgREhDUCBob3N0IG5hbWUgb3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BP
UFRfSE9TVE5BTUUgICAgIDEyDQoNCi8qIQ0KICogXGJyaWVmIERIQ1AgZG9tYWluIG5hbWUgb3B0
aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRfRE9NQUlOICAgICAgIDE1DQoNCi8qIQ0KICogXGJy
aWVmIERIQ1AgYnJvYWRjYXN0IGFkZHJlc3Mgb3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRf
QlJPQURDQVNUICAgIDI4DQoNCi8qIQ0KICogXGJyaWVmIERIQ1AgcmVxdWVzdGVkIElQIGFkZHJl
c3Mgb3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRfUkVRRVNUSVAgICAgIDUwDQoNCi8qIQ0K
ICogXGJyaWVmIERIQ1AgSVAgYWRkcmVzcyBsZWFzZSB0aW1lIG9wdGlvbi4NCiAqLw0KI2RlZmlu
ZSBESENQT1BUX0xFQVNFVElNRSAgICA1MQ0KDQovKiENCiAqIFxicmllZiBESENQIG1lc3NhZ2Ug
dHlwZSBvcHRpb24uDQogKi8NCiNkZWZpbmUgREhDUE9QVF9NU0dUWVBFICAgICAgNTMNCg0KLyoh
DQogKiBcYnJpZWYgREhDUCBzZXJ2ZXIgaWRlbnRpZmllciBvcHRpb24uDQogKi8NCiNkZWZpbmUg
REhDUE9QVF9TSUQgICAgICAgICAgNTQNCg0KLyohDQogKiBcYnJpZWYgREhDUCBwYXJhbWV0ZXIg
cmVxdWVzdCBsaXN0IG9wdGlvbi4NCiAqLw0KI2RlZmluZSBESENQT1BUX1BBUkFNUkVRVUVTVCA1
NQ0KDQovKiENCiAqIFxicmllZiBNYXhpbXVtIERIQ1AgbWVzc2FnZSBzaXplIG9wdGlvbi4NCiAq
Lw0KI2RlZmluZSBESENQT1BUX01BWE1TR1NJWkUgICA1Nw0KDQovKiENCiAqIFxicmllZiBESENQ
IHJlbmV3YWwgdGltZSBvcHRpb24uDQogKi8NCiNkZWZpbmUgREhDUE9QVF9SRU5FV0FMVElNRSAg
NTgNCg0KLyohDQogKiBcYnJpZWYgREhDUCByZWJpbmRpbmcgdGltZSBvcHRpb24uDQogKi8NCiNk
ZWZpbmUgREhDUE9QVF9SRUJJTkRUSU1FICAgNTkNCg0KLyohDQogKiBcYnJpZWYgREhDUCBlbmQg
b3B0aW9uLg0KICovDQojZGVmaW5lIERIQ1BPUFRfRU5EICAgICAgICAgIDI1NQ0KDQovKkB9Ki8N
Cg0KLyohDQogKiBcYnJpZWYgQk9PVFAgbWVzc2FnZSBzdHJ1Y3R1cmUgdHlwZS4NCiAqLw0KdHlw
ZWRlZiBzdHJ1Y3QgYm9vdHAgQk9PVFA7DQoNCi8qIQ0KICogXGJyaWVmIEJPT1RQIG1lc3NhZ2Ug
c3RydWN0dXJlLg0KICovDQpzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJvb3RwIHsN
CiAgICB1aW50OF90IGJwX29wOyAgICAgICAgICAgICAgLyohPCBcYnJpZWYgUGFja2V0IG9wY29k
ZSB0eXBlOiAxPXJlcXVlc3QsIDI9cmVwbHkgKi8NCiAgICB1aW50OF90IGJwX2h0eXBlOyAgICAg
ICAgICAgLyohPCBcYnJpZWYgSGFyZHdhcmUgYWRkcmVzcyB0eXBlOiAxPUV0aGVybmV0ICovDQog
ICAgdWludDhfdCBicF9obGVuOyAgICAgICAgICAgIC8qITwgXGJyaWVmIEhhcmR3YXJlIGFkZHJl
c3MgbGVuZ3RoOiA2IGZvciBFdGhlcm5ldCAqLw0KICAgIHVpbnQ4X3QgYnBfaG9wczsgICAgICAg
ICAgICAvKiE8IFxicmllZiBHYXRld2F5IGhvcHMgKi8NCiAgICB1aW50MzJfdCBicF94aWQ7ICAg
ICAgICAgICAgICAvKiE8IFxicmllZiBUcmFuc2FjdGlvbiBJRCAqLw0KICAgIHVpbnQxNl90IGJw
X3NlY3M7ICAgICAgICAgICAgLyohPCBcYnJpZWYgU2Vjb25kcyBzaW5jZSBib290IGJlZ2FuICov
DQogICAgdWludDE2X3QgYnBfZmxhZ3M7ICAgICAgICAgICAvKiE8IFxicmllZiBSRkMxNTMyIGJy
b2FkY2FzdCwgZXRjLiAqLw0KICAgIHVpbnQzMl90IGJwX2NpYWRkcjsgICAgICAgICAgIC8qITwg
XGJyaWVmIENsaWVudCBJUCBhZGRyZXNzICovDQogICAgdWludDMyX3QgYnBfeWlhZGRyOyAgICAg
ICAgICAgLyohPCBcYnJpZWYgJ1lvdXInIElQIGFkZHJlc3MgKi8NCiAgICB1aW50MzJfdCBicF9z
aWFkZHI7ICAgICAgICAgICAvKiE8IFxicmllZiBTZXJ2ZXIgSVAgYWRkcmVzcyAqLw0KICAgIHVp
bnQzMl90IGJwX2dpYWRkcjsgICAgICAgICAgIC8qITwgXGJyaWVmIEdhdGV3YXkgSVAgYWRkcmVz
cyAqLw0KICAgIHVpbnQ4X3QgYnBfY2hhZGRyWzE2XTsgICAgICAvKiE8IFxicmllZiBDbGllbnQg
aGFyZHdhcmUgYWRkcmVzcyAqLw0KICAgIGNoYXIgYnBfc25hbWVbNjRdOyAgICAgICAgICAvKiE8
IFxicmllZiBTZXJ2ZXIgaG9zdCBuYW1lICovDQogICAgY2hhciBicF9maWxlWzEyOF07ICAgICAg
ICAgIC8qITwgXGJyaWVmIEJvb3QgZmlsZSBuYW1lICovDQogICAgdWludDhfdCBicF9vcHRpb25z
WzMxMl07ICAgIC8qITwgXGJyaWVmIFZlbmRvci1zcGVjaWZpYyBhcmVhICovDQp9Ow0KDQovKiEN
CiAqIFxicmllZiBEeW5hbWljIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHR5cGUuDQogKi8NCnR5
cGVkZWYgc3RydWN0IGR5bl9jZmcgRFlOQ0ZHOw0KDQovKiENCiAqIFxicmllZiBEeW5hbWljIGNv
bmZpZ3VyYXRpb24gc3RydWN0dXJlLg0KICovDQpzdHJ1Y3QgZHluX2NmZyB7DQogICAgdWludDhf
dCBkeW5fbXNndHlwOyAgICAgICAgIC8qITwgXGJyaWVmIERIQ1AgbWVzc2FnZSB0eXBlICovDQog
ICAgdWludDMyX3QgZHluX3lpYWRkcjsgICAgICAgICAgLyohPCBcYnJpZWYgT2ZmZXJlZCBJUCBh
ZGRyZXNzLiAqLw0KICAgIHVpbnQzMl90IGR5bl9uZXRtYXNrOyAgICAgICAgIC8qITwgXGJyaWVm
IExvY2FsIElQIG5ldG1hc2suICovDQogICAgdWludDMyX3QgZHluX2Jyb2FkY2FzdDsgICAgICAg
LyohPCBcYnJpZWYgTG9jYWwgSVAgYnJvYWRjYXN0IGFkZHJlc3MuICovDQogICAgdWludDMyX3Qg
ZHluX2dhdGV3YXk7ICAgICAgICAgLyohPCBcYnJpZWYgRGVmYXVsdCBnYXRlIElQIGFkZHJlc3Mu
ICovDQogICAgdWludDMyX3QgZHluX3BkbnM7ICAgICAgICAgICAgLyohPCBcYnJpZWYgUHJpbWFy
eSBETlMgSVAgYWRkcmVzcy4gKi8NCiAgICB1aW50MzJfdCBkeW5fc2RuczsgICAgICAgICAgICAv
KiE8IFxicmllZiBTZWNvbmRhcnkgRE5TIElQIGFkZHJlc3MuICovDQogICAgdWludDMyX3QgZHlu
X3NpZDsgICAgICAgICAgICAgLyohPCBcYnJpZWYgU2VydmVyIGlkZW50aWZpZXIuICovDQogICAg
dWludDMyX3QgZHluX3JlbmV3YWxUaW1lOyAgICAgLyohPCBcYnJpZWYgUmVuZXdhbCB0aW1lIGlu
IHNlY29uZHMuICovDQogICAgdWludDMyX3QgZHluX3JlYmluZFRpbWU7ICAgICAgLyohPCBcYnJp
ZWYgUmViaW5kIHRpbWUgaW4gc2Vjb25kcy4gKi8NCiAgICB1aW50MzJfdCBkeW5fbGVhc2VUaW1l
OyAgICAgICAvKiE8IFxicmllZiBPZmZlcmVkIGxlYXNlIHRpbWUgaW4gc2Vjb25kcy4gKi8NCiAg
ICB1aW50OF90ICpkeW5faG9zdG5hbWU7ICAgICAgLyohPCBcYnJpZWYgTG9jYWwgaG9zdG5hbWUu
ICovDQogICAgdWludDhfdCAqZHluX2RvbWFpbjsgICAgICAgIC8qITwgXGJyaWVmIE5hbWUgb2Yg
bG9jYWwgZG9tYWluLiAqLw0KfTsNCg0KLyohDQogKiBcYnJpZWYgQ3VycmVudCBjb25maWd1cmF0
aW9uLg0KICoNCiAqIFRoaXMgc3RydWN0dXJlIGlzIGZpbGxlZCBieSBwYXJzaW5nIG9mZmVyIG9y
IGFja25vd2xlZGdlIG1lc3NhZ2VzIGZyb20NCiAqIHRoZSBzZXJ2ZXIuDQogKi8NCnN0YXRpYyBE
WU5DRkcgKmRoY3BDb25maWc7DQoNCi8qIQ0KICogXGJyaWVmIENsaWVudCB0aHJlYWQgaWRlbnRp
Zmllci4NCiAqDQogKiBVc2VkIHRvIGRldGVybWluZSBpZiB0aGUgY2xpZW50IHRocmVhZCBpcyBy
dW5uaW5nLiBaZXJvIGluZGljYXRlcyB0aGF0DQogKiBpdCBpcyBub3QuDQogKi8NCnN0YXRpYyBI
QU5ETEUgZGhjcFRocmVhZDsNCg0KLyohDQogKiBcYnJpZWYgQ3VycmVudCBzdGF0ZSBvZiB0aGUg
REhDUCBjbGllbnQgc3RhdGUgbWFjaGluZS4NCiAqLw0Kc3RhdGljIHVpbnQ4X3QgZGhjcFN0YXRl
Ow0KDQovKiENCiAqIFxicmllZiBMYXRlc3QgREhDUCBlcnJvciBjb2RlLg0KICovDQpzdGF0aWMg
aW50IGRoY3BFcnJvcjsNCg0KLyohDQogKiBcYnJpZWYgREhDUCB3YWtlIHVwIHF1ZXVlLg0KICoN
CiAqIFRoZSBESENQIHN0YXRlIG1hY2hpbmUgY2FuIGJlIHdva2VuIHVwIGJ5IHBvc3RpbmcgdG8g
dGhpcyBxdWV1ZS4NCiAqLw0Kc3RhdGljIEhBTkRMRSBkaGNwV2FrZTsNCg0KLyohDQogKiBcYnJp
ZWYgREhDUCB3YWl0aW5nIHF1ZXVlLg0KICoNCiAqIEFwcGxpY2F0aW9uIHRocmVhZHMgd2FpdCBv
biB0aGlzIHF1ZXVlIHVudGlsIERIQ1Agc3VjY2VzcyBvciBmYWlsdXJlLg0KICovDQpzdGF0aWMg
SEFORExFIGRoY3BEb25lOw0KDQovKiENCiAqIFxicmllZiBNYXhpbXVtIG51bWJlciBvZiBtaWxs
aXNlY29uZHMgdG8gd2FpdCBvbiBccmVmIGRoY3BEb25lLg0KICoNCiAqIFNwZWNpZmllZCBieSB0
aGUgYXBwbGljYXRpb24gd2hlbiBjYWxsaW5nIHRoZSBESENQIGNsaWVudCBBUEkuDQogKi8NCnN0
YXRpYyB1aW50MzJfdCBkaGNwQXBpVGltZW91dDsNCg0KLyohDQogKiBcYnJpZWYgVGltZSBhdCB3
aGljaCB0aGUgYXBwbGljYXRpb24gc3RhcnRlZCB0byB3YWl0Lg0KICoNCiAqIFVzZWQgaW4gY29u
anVuY3Rpb24gd2l0aCBccmVmIGRoY3BBcGlUaW1lb3V0IHRvIGxpbWl0IHRoZSBtYXhpbXVtDQog
KiB3YWl0IHRpbWUgZm9yIHNlcnZlciByZXNwb25zZXMuDQogKi8NCnN0YXRpYyB1aW50MzJfdCBk
aGNwQXBpU3RhcnQ7DQoNCi8qIQ0KICogXGJyaWVmIERIQ1AgZGV2aWNlLg0KICoNCiAqIFRoZSBB
Uk0gcG9ydCBkb2Vzbid0IHByb3ZpZGUgcGFyYW1ldGVyIHBhc3NpbmcgdG8gdGhyZWFkIHJvdXRp
bmVzLg0KICogVGh1cyB3ZSB1c2UgYSBnbG9iYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIE5VVERF
VklDRSBwb2ludGVyLg0KICovDQojaWZkZWYgX19hcm1fXw0Kc3RhdGljIE5VVERFVklDRSAqZGhj
cERldjsNCiNlbmRpZg0KDQovKiENCiAqIFxicmllZiBEeW5hbWljIHN0cmluZyBjb3B5Lg0KICoN
CiAqIFxwYXJhbSBkc3QgUG9pbnRzIHRvIGEgc3RyaW5nIHBvaW50ZXIuIElmIHRoZSBwb2ludGVy
IGlzIG5vdCBOVUxMLCBpdA0KICogICAgICAgICAgICBpcyBhc3N1bWVkIHRoYXQgaXQgcG9pbnRz
IHRvIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnVmZmVyDQogKiAgICAgICAgICAgIGFuZCB0aGlz
IGJ1ZmZlciB3aWxsIGJlIHJlbGVhc2VkIGZpcnN0LiBUaGVuIGEgbmV3IGJ1ZmZlcg0KICogICAg
ICAgICAgICB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgdGhlIHNvdXJjZSBzdHJpbmcgd2lsbCBiZSBj
b3BpZWQgdG8NCiAqICAgICAgICAgICAgdGhpcyBidWZmZXIuDQogKiBccGFyYW0gc3JjIFRoZSBz
b3VyY2Ugc3RyaW5nLiBObyBkZWxpbWl0ZXIgcmVxdWlyZWQuDQogKiBccGFyYW0gbGVuIExlbmd0
aCBvZiB0aGUgc291cmNlIHN0cmluZy4NCiAqLw0Kc3RhdGljIHZvaWQgY29weV9zdHIodWludDhf
dCAqKiBkc3QsIHZvaWQgKnNyYywgaW50IGxlbikNCnsNCiAgICBpZiAoKmRzdCkgew0KICAgICAg
ICBmcmVlKCpkc3QpOw0KICAgIH0NCiAgICBpZiAoKCpkc3QgPSBtYWxsb2MobGVuICsgMSkpICE9
IDApIHsNCiAgICAgICAgaWYgKGxlbikgew0KICAgICAgICAgICAgbWVtY3B5KCpkc3QsIHNyYywg
bGVuKTsNCiAgICAgICAgfQ0KICAgICAgICAqKCpkc3QgKyBsZW4pID0gMDsNCiAgICB9DQp9DQoN
Ci8qIQ0KICogXGJyaWVmIFJlbGVhc2UgRFlOQ0ZHIHN0cnVjdHVyZS4NCiAqDQogKiBGcmVlcyBh
bGwgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgXHJlZiBEWU5DRkcgc3RydWN0dXJlLg0KICoNCiAqIFxw
YXJhbSBkeW5jZmcgVGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSByZWxlYXNlZC4NCiAqLw0Kc3RhdGlj
IHZvaWQgUmVsZWFzZUR5bkNmZyhEWU5DRkcgKiBkeW5jZmcpDQp7DQogICAgaWYgKGR5bmNmZykg
ew0KICAgICAgICBpZiAoZHluY2ZnLT5keW5faG9zdG5hbWUpIHsNCiAgICAgICAgICAgIGZyZWUo
ZHluY2ZnLT5keW5faG9zdG5hbWUpOw0KICAgICAgICB9DQogICAgICAgIGlmIChkeW5jZmctPmR5
bl9kb21haW4pIHsNCiAgICAgICAgICAgIGZyZWUoZHluY2ZnLT5keW5fZG9tYWluKTsNCiAgICAg
ICAgfQ0KICAgICAgICBmcmVlKGR5bmNmZyk7DQogICAgfQ0KfQ0KDQovKiENCiAqIFxicmllZiBQ
YXJzZSBhIERIQ1AgcmVwbHkgbWVzc2FnZS4NCiAqDQogKiBccGFyYW0gYnAgIFBvaW50ZXIgdG8g
dGhlIHJlcGx5IG1lc3NhZ2UuIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUsDQogKiAgICAgICAg
ICAgIHRoYXQgdGhpcyBjb250YWlucyBhIHZhbGlkIEJPT1RQIHJlcGx5IGhlYWRlciB3aXRoIGF0
DQogKiAgICAgICAgICAgIGxlYXN0IGZpdmUgYnl0ZXMgaW4gdGhlIG9wdGlvbnMgZmllbGQuDQog
KiBccGFyYW0gbGVuIE51bWJlciBvZiB2YWxpZCBieXRlcyBpbiB0aGUgcmVwbHkgbWVzc2FnZS4N
CiAqDQogKiBccmV0dXJuIFBvaW50ZXIgdG8gY29uZmlnIHN0cnVjdHVyZS4gTXVzdCBiZSByZWxl
YXNlZCBieSB0aGUgY2FsbGVyLg0KICogICAgICAgICBOVUxMIGlzIHJldHVybmVkIGluIGNhc2Ug
b2YgcGFyc2luZyBlcnJvcnMuDQogKi8NCnN0YXRpYyBEWU5DRkcgKlBhcnNlUmVwbHkoQk9PVFAg
KmJwLCBpbnQgbGVuKQ0Kew0KICAgIHVpbnQ4X3QgKm9wOw0KICAgIGludCBsZWZ0Ow0KICAgIERZ
TkNGRyAqY2ZncDsNCg0KICAgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0cnVj
dHVyZS4gKi8NCiAgICBpZiAoKGNmZ3AgPSBtYWxsb2Moc2l6ZW9mKERZTkNGRykpKSA9PSAwKSB7
DQogICAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgICBtZW1zZXQoY2ZncCwgMCwgc2l6ZW9mKERZ
TkNGRykpOw0KICAgIGNmZ3AtPmR5bl9sZWFzZVRpbWUgPSBESENQX0RFRkFVTFRfTEVBU0U7DQoN
CiAgICAvKiBTZXQgdGhlIGFzc2lnbmVkIElQIGFkZHJlc3MuICovDQogICAgbWVtY3B5KCZjZmdw
LT5keW5feWlhZGRyLCAmYnAtPmJwX3lpYWRkciwgNCk7DQoNCiAgICAvKg0KICAgICAqIFBhcnNl
IG9wdGlvbnMgdW50aWwgYW4gZW5kIG9wdGlvbiBpcyBmb3VuZCBvciB1bnRpbCB3ZSByZWFjaGVk
DQogICAgICogdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4NCiAgICAgKi8NCiAgICBvcCA9IGJwLT5i
cF9vcHRpb25zICsgNDsNCiAgICBsZWZ0ID0gbGVuIC0gKHNpemVvZigqYnApIC0gc2l6ZW9mKGJw
LT5icF9vcHRpb25zKSkgLSA0Ow0KICAgIHdoaWxlICgqb3AgIT0gREhDUE9QVF9FTkQgJiYgbGVm
dCA+IDApIHsNCiAgICAgICAgdWludDhfdCBvbDsNCg0KI2lmZGVmIE5VVERFQlVHDQogICAgICAg
IGlmIChfX3RjcF90cmYpIHsNCiAgICAgICAgICAgIGZwcmludGYoX190Y3BfdHJzLCAiW0RIQ1At
T3B0LSV1XSIsICpvcCk7DQogICAgICAgIH0NCiNlbmRpZg0KICAgICAgICAvKiBQYWQgb3B0aW9u
IGlzIHVzZWQgZm9yIGJvdW5kYXJ5IGFsaWdubWVudC4gKi8NCiAgICAgICAgaWYgKCpvcCA9PSBE
SENQT1BUX1BBRCkgew0KICAgICAgICAgICAgb3ArKzsNCiAgICAgICAgICAgIGxlZnQtLTsNCiAg
ICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogUmVqZWN0IGlmIG9w
dGlvbiBsZW5ndGggZXhjZWVkcyB0b3RhbCBsZW5ndGguICovDQogICAgICAgIGlmICgob2wgPSAq
KG9wICsgMSkpID4gbGVmdCkgew0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAg
ICAgICAvKiBUeXBlIG9mIHRoaXMgbWVzc2FnZS4gKi8NCiAgICAgICAgaWYgKCpvcCA9PSBESENQ
T1BUX01TR1RZUEUpIHsNCiAgICAgICAgICAgIGlmIChvbCAhPSAxKSB7DQogICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjZmdwLT5keW5fbXNndHlwID0g
KihvcCArIDIpOw0KDQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgICAgIGlmIChfX3RjcF90cmYg
JiBORVRfREJHX0RIQ1ApIHsNCiAgICAgICAgICAgICAgICBzd2l0Y2goY2ZncC0+ZHluX21zZ3R5
cCkgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIERIQ1BfT0ZGRVI6DQogICAgICAgICAgICAg
ICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3RycywgIitNU0dULU9GRkVSK1xuIik7DQogICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSBESENQX0FD
SzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoX190Y3BfdHJzLCAiK01TR1QtQUNL
K1xuIik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAg
ICAgY2FzZSBESENQX05BSzoNCiAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoX190Y3Bf
dHJzLCAiLU1TR1QtTkFLLVxuIik7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIGZwcmlu
dGYoX190Y3BfdHJzLCAiI01TR1QtVU5LI1xuIik7DQogICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQojZW5kaWYNCiAgICAgICAg
fQ0KICAgICAgICAvKiBPdXIgaG9zdCBuYW1lLiBNYXkgb3IgbWF5IG5vdCBpbmNsdWRlIHRoZSBk
b21haW4uICovDQogICAgICAgIGVsc2UgaWYgKCpvcCA9PSBESENQT1BUX0hPU1ROQU1FKSB7DQog
ICAgICAgICAgICBjb3B5X3N0cigmY2ZncC0+ZHluX2hvc3RuYW1lLCBvcCArIDIsIG9sKTsNCiAg
ICAgICAgfQ0KICAgICAgICAvKiBOYW1lIG9mIHRoZSBkb21haW4gd2UgYXJlIGluLiAqLw0KICAg
ICAgICBlbHNlIGlmICgqb3AgPT0gREhDUE9QVF9ET01BSU4pIHsNCiAgICAgICAgICAgIGNvcHlf
c3RyKCZjZmdwLT5keW5fZG9tYWluLCBvcCArIDIsIG9sKTsNCiAgICAgICAgfQ0KDQogICAgICAg
IC8qIEFsbCByZW1haW5pbmcgb3B0aW9ucyByZXF1aXJlIGF0IGxlYXN0IDQgb2N0ZXRzLiAqLw0K
ICAgICAgICBlbHNlIGlmIChvbCA+PSA0KSB7DQogICAgICAgICAgICAvKiBQcmVzZXQgbW9zdCBv
ZnRlbiB1c2VkIGxvbmcgdmFsdWUuICovDQogICAgICAgICAgICB1aW50MzJfdCBsdmFsID0gKihv
cCArIDIpOw0KICAgICAgICAgICAgbHZhbCArPSAodWludDMyX3QpKCoob3AgKyAzKSkgPDwgODsN
CiAgICAgICAgICAgIGx2YWwgKz0gKHVpbnQzMl90KSgqKG9wICsgNCkpIDw8IDE2Ow0KICAgICAg
ICAgICAgbHZhbCArPSAodWludDMyX3QpKCoob3AgKyA1KSkgPDwgMjQ7DQoNCiAgICAgICAgICAg
IC8qIE91ciBJUCBuZXR3b3JrIG1hc2suICovDQogICAgICAgICAgICBpZiAoKm9wID09IERIQ1BP
UFRfTkVUTUFTSykgew0KICAgICAgICAgICAgICAgIGNmZ3AtPmR5bl9uZXRtYXNrID0gbHZhbDsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIE91ciBJUCBicm9hZGNhc3QgYWRkcmVzcy4g
Ki8NCiAgICAgICAgICAgIGVsc2UgaWYgKCpvcCA9PSBESENQT1BUX0JST0FEQ0FTVCkgew0KICAg
ICAgICAgICAgICAgIGNmZ3AtPmR5bl9icm9hZGNhc3QgPSBsdmFsOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgLyogT3VyIElQIGRlZmF1bHQgZ2F0ZS4gTW9yZSB0aGFuIG9uZSBnYXRld2F5
IG1heSBiZQ0KICAgICAgICAgICAgICAgc3BlY2lmaWVkLiBXZSB0YWtlIHRoZSBmaXN0IG9uZSBv
bmx5IGFuZCBpZ25vcmUgdGhlDQogICAgICAgICAgICAgICByZXN0LiAqLw0KICAgICAgICAgICAg
ZWxzZSBpZiAoKm9wID09IERIQ1BPUFRfR0FURVdBWSkgew0KICAgICAgICAgICAgICAgIGNmZ3At
PmR5bl9nYXRld2F5ID0gbHZhbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIE91ciBE
TlMgc2VydmVyLiBVcGRhdGVkIGJ5IEplbGxlIE1hcnRpam4gS29rIHRvDQogICAgICAgICAgICAg
ICBzdXBwb3J0IGEgc2Vjb25kYXJ5IEROUy4gKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKCpvcCA9
PSBESENQT1BUX0ROUykgew0KICAgICAgICAgICAgICAgIGNmZ3AtPmR5bl9wZG5zID0gbHZhbDsN
CiAgICAgICAgICAgICAgICBpZiAob2wgPj0gOCkgew0KICAgICAgICAgICAgICAgICAgICBjZmdw
LT5keW5fc2RucyA9ICoob3AgKyA2KTsNCiAgICAgICAgICAgICAgICAgICAgY2ZncC0+ZHluX3Nk
bnMgKz0gKHVpbnQzMl90KSgqKG9wICsgNykpIDw8IDg7DQogICAgICAgICAgICAgICAgICAgIGNm
Z3AtPmR5bl9zZG5zICs9ICh1aW50MzJfdCkoKihvcCArIDgpKSA8PCAxNjsNCiAgICAgICAgICAg
ICAgICAgICAgY2ZncC0+ZHluX3NkbnMgKz0gKHVpbnQzMl90KSgqKG9wICsgOSkpIDw8IDI0Ow0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIFNlcnZlciBp
ZGVudGlmaWVyLiAqLw0KICAgICAgICAgICAgZWxzZSBpZiAoKm9wID09IERIQ1BPUFRfU0lEKSB7
DQogICAgICAgICAgICAgICAgY2ZncC0+ZHluX3NpZCA9IGx2YWw7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgICAvKiBSZW5ld2FsIHRpbWUuICovDQogICAgICAgICAgICBlbHNlIGlmICgqb3Ag
PT0gREhDUE9QVF9SRU5FV0FMVElNRSkgew0KICAgICAgICAgICAgICAgIGNmZ3AtPmR5bl9yZW5l
d2FsVGltZSA9IG50b2hsKGx2YWwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLyogUmVi
aW5kaW5nIHRpbWUuICovDQogICAgICAgICAgICBlbHNlIGlmICgqb3AgPT0gREhDUE9QVF9SRUJJ
TkRUSU1FKSB7DQogICAgICAgICAgICAgICAgY2ZncC0+ZHluX3JlYmluZFRpbWUgPSBudG9obChs
dmFsKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIFRvdGFsIGxlYXNlIHRpbWUgZ3Jh
bnRlZC4gKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKCpvcCA9PSBESENQT1BUX0xFQVNFVElNRSkg
ew0KICAgICAgICAgICAgICAgIGNmZ3AtPmR5bl9sZWFzZVRpbWUgPSBudG9obChsdmFsKTsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBvcCArPSBvbCArIDI7DQogICAgICAgIGxl
ZnQgLT0gb2wgKyAyOw0KICAgIH0NCg0KICAgIC8qDQogICAgICogRGlzY2FyZCB0aGlzIGNvbmZp
Z3VyYXRpb24gaWYgcGFyc2luZyBzdG9wcGVkIGJlZm9yZSByZWFjaGluZw0KICAgICAqIHRoZSBl
bmQgb3B0aW9uIG9yIGlmIHdlIGRpZG4ndCByZWNlaXZlIGFuIGV4cGVjdGVkIG1lc3NhZ2UgdHlw
ZS4NCiAgICAgKi8NCiAgICBpZiAoKm9wICE9IERIQ1BPUFRfRU5EIHx8DQogICAgICAgIChjZmdw
LT5keW5fbXNndHlwICE9IERIQ1BfT0ZGRVIgJiYNCiAgICAgICAgIGNmZ3AtPmR5bl9tc2d0eXAg
IT0gREhDUF9BQ0sgJiYNCiAgICAgICAgIGNmZ3AtPmR5bl9tc2d0eXAgIT0gREhDUF9OQUspKSB7
DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdfREhDUCkg
ew0KICAgICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJbREhDUC1QYXJzZSBFcnJvcl0iKTsN
CiAgICAgICAgfQ0KI2VuZGlmDQogICAgICAgIFJlbGVhc2VEeW5DZmcoY2ZncCk7DQogICAgICAg
IHJldHVybiAwOw0KICAgIH0NCg0KICAgIC8qIENhbGN1bGF0ZSByZW5ld2FsIGFuZCByZWJpbmQg
dGltZXMuICovDQogICAgaWYgKGNmZ3AtPmR5bl9yZW5ld2FsVGltZSA9PSAwKSB7DQogICAgICAg
IGNmZ3AtPmR5bl9yZW5ld2FsVGltZSA9IGNmZ3AtPmR5bl9sZWFzZVRpbWUgLyAyOw0KICAgIH0N
CiAgICBpZiAoY2ZncC0+ZHluX3JlYmluZFRpbWUgPT0gMCkgew0KICAgICAgICBjZmdwLT5keW5f
cmViaW5kVGltZSA9IGNmZ3AtPmR5bl9yZW5ld2FsVGltZSArICAvKiAqLw0KICAgICAgICAgICAg
Y2ZncC0+ZHluX3JlbmV3YWxUaW1lIC8gMiArIC8qICovDQogICAgICAgICAgICBjZmdwLT5keW5f
cmVuZXdhbFRpbWUgLyA0Ow0KICAgIH0NCiAgICByZXR1cm4gY2ZncDsNCn0NCg0KLyohDQogKiBc
YnJpZWYgQWRkIHZhcmlhYmxlIGxlbmd0aCBvcHRpb24uDQogKg0KICogXHBhcmFtIG9wICBQb2lu
dGVyIGludG8gdGhlIG9wdGlvbiBidWZmZXIuDQogKiBccGFyYW0gb3QgIE9wdGlvbiB0eXBlLg0K
ICogXHBhcmFtIG92ICBQb2ludGVyIHRvIGJ1ZmZlciB0byBjb3B5IGZyb20uDQogKiBccGFyYW0g
bGVuIE51bWJlciBvZiBvY3RldHMgdG8gY29weS4NCiAqDQogKiBccmV0dXJuIFRvdGFsIG51bWJl
ciBvZiBvY3RldHMgYWRkZWQsIGluY2x1ZGUgdHlwZSBhbmQgbGVuZ3RoLg0KICovDQpzdGF0aWMg
c2l6ZV90IERoY3BBZGRPcHRpb24odWludDhfdCAqIG9wLCB1aW50OF90IG90LCB2b2lkICpvdiwg
dWludDhfdCBsZW4pDQp7DQogICAgKm9wKysgPSBvdDsNCiAgICAqb3ArKyA9IGxlbjsNCiAgICBt
ZW1jcHkob3AsIG92LCBsZW4pOw0KDQogICAgcmV0dXJuIDIgKyBsZW47DQp9DQoNCi8qIQ0KICog
XGJyaWVmIEFkZCBzaW5nbGUgb2N0ZXQgb3B0aW9uLg0KICoNCiAqIFxwYXJhbSBvcCBQb2ludGVy
IGludG8gdGhlIG9wdGlvbiBidWZmZXIuDQogKiBccGFyYW0gb3QgT3B0aW9uIHR5cGUuDQogKiBc
cGFyYW0gb3YgT3B0aW9uIHZhbHVlLg0KICoNCiAqIFxyZXR1cm4gVG90YWwgbnVtYmVyIG9mIG9j
dGV0cyBhZGRlZCwgaW5jbHVkZSB0eXBlIGFuZCBsZW5ndGguDQogKi8NCnN0YXRpYyBzaXplX3Qg
RGhjcEFkZEJ5dGVPcHRpb24odWludDhfdCAqIG9wLCB1aW50OF90IG90LCB1aW50OF90IG92KQ0K
ew0KICAgICpvcCsrID0gb3Q7DQogICAgKm9wKysgPSAxOw0KICAgICpvcCsrID0gb3Y7DQoNCiAg
ICByZXR1cm4gMzsNCn0NCg0KLyohDQogKiBcYnJpZWYgQWRkIGRvdWJsZSBvY3RldCBvcHRpb24u
DQogKg0KICogXHBhcmFtIG9wIFBvaW50ZXIgaW50byB0aGUgb3B0aW9uIGJ1ZmZlci4NCiAqIFxw
YXJhbSBvdCBPcHRpb24gdHlwZS4NCiAqIFxwYXJhbSBvdiBPcHRpb24gdmFsdWUgaW4gaG9zdCBi
eXRlIG9yZGVyLiBXaWxsIGJlIGNvbnZlcnRlZCB0byBuZXR3b3JrDQogKiAgICAgICAgICAgYnl0
ZSBvcmRlci4NCiAqDQogKiBccmV0dXJuIFRvdGFsIG51bWJlciBvZiBvY3RldHMgYWRkZWQsIGlu
Y2x1ZGUgdHlwZSBhbmQgbGVuZ3RoLg0KICovDQpzdGF0aWMgc2l6ZV90IERoY3BBZGRTaG9ydE9w
dGlvbih1aW50OF90ICogb3AsIHVpbnQ4X3Qgb3QsIHVpbnQxNl90IG92KQ0Kew0KICAgICpvcCsr
ID0gb3Q7DQogICAgKm9wKysgPSAyOw0KICAgIG92ID0gaHRvbnMob3YpOw0KICAgIG1lbWNweShv
cCwgJm92LCAyKTsNCg0KICAgIHJldHVybiA0Ow0KfQ0KDQovKiENCiAqIFxicmllZiBBZGQgcGFy
YW1ldGVyIHJlcXVlc3Qgb3B0aW9uLg0KICoNCiAqIFJGQyAyMTMxIGRlbWFuZHMgdG8gdXNlIHRo
ZSBzYW1lIHBhcmFtZXRlciByZXF1ZXN0IGluIGRpc2NvdmVyIGFuZA0KICogcmVxdWVzdCBtZXNz
YWdlcy4NCiAqDQogKiBccGFyYW0gb3AgUG9pbnRlciBpbnRvIHRoZSBvcHRpb24gYnVmZmVyLg0K
ICogXHBhcmFtIG90IE9wdGlvbiB0eXBlLg0KICogXHBhcmFtIG92IE9wdGlvbiB2YWx1ZSBpbiBo
b3N0IGJ5dGUgb3JkZXIuDQogKg0KICogXHJldHVybiBUb3RhbCBudW1iZXIgb2Ygb2N0ZXRzIGFk
ZGVkLCBpbmNsdWRlIHR5cGUgYW5kIGxlbmd0aC4NCiAqLw0Kc3RhdGljIHNpemVfdCBEaGNwQWRk
UGFybVJlcU9wdGlvbih1aW50OF90ICogb3ApDQp7DQogICAgKm9wKysgPSBESENQT1BUX1BBUkFN
UkVRVUVTVDsNCiAgICAqb3ArKyA9IDM7ICAgICAgICAgICAgICAgICAgLyogQWRqdXN0IHdoZW4g
YWRkaW5nIG1vcmUgb3B0aW9ucyEgKi8NCiAgICAqb3ArKyA9IERIQ1BPUFRfTkVUTUFTSzsgICAg
LyogVHlwaWNhbGx5IHNlbnQgYnkgZGVmYXVsdCwgYnV0IHBsYXkgc2FmZS4gKi8NCiAgICAqb3Ar
KyA9IERIQ1BPUFRfR0FURVdBWTsgICAgLyogV2Ugd2FudCBhIGRlZmF1bHQgZ2F0ZXdheS4gKi8N
CiAgICAqb3ArKyA9IERIQ1BPUFRfRE5TOyAgICAgICAgLyogV2Ugd2FudCB0aGUgRE5TJyBJUC4g
Ki8NCiAgICByZXR1cm4gNTsgICAgICAgICAgICAgICAgICAgLyogQWRqdXN0IHdoZW4gYWRkaW5n
IG1vcmUgb3B0aW9ucyEgKi8NCn0NCg0KLyohDQogKiBcYnJpZWYgUHJlcGFyZSBhIEJPT1RQIHJl
cXVlc3QgbWVzc2FnZSBoZWFkZXIuDQogKg0KICogQSBCT09UUCBoZWFkZXIgd2lsbCBiZSBpbml0
aWFsaXplZCBhdCB0aGUgc3BlY2lmaWVkIGJ1ZmZlciBhZGRyZXNzDQogKiBhbmQgdGhlIHJvdXRp
bmUgd2lsbCBhZGQgdGhlIERIQ1AgbWFnaWMgY29va2llIChSRkMgMTQ5NykgYW5kIGFuDQogKiBh
ZGRpdGlvbmFsIG9wdGlvbiBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgREhDUCBtZXNzYWdlIHR5
cGUuDQogKg0KICogQWxsIG90aGVyIGZpZWxkcyBhcmUgY2xlYXJlZCB0byB6ZXJvLg0KICoNCiAq
IFxwYXJhbSBicCAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGluaXRpYWxpemUuDQogKiBc
cGFyYW0gbXNndHlwIERIQ1AgbWVzc2FnZSB0eXBlLCBlaXRoZXIgXHJlZiBESENQX0RJU0NPVkVS
LA0KICogICAgICAgICAgICAgICBccmVmIERIQ1BfUkVRVUVTVCBvciBccmVmIERIQ1BfUkVMRUFT
RS4NCiAqIFxwYXJhbSB4aWQgICAgUmFuZG9tIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIuDQogKiBc
cGFyYW0gY2lhZGRyIE91ciBJUCBhZGRyZXNzLiBTaG91bGQgYmUgc2V0IHRvIHplcm8gdW5sZXNz
IHdlIGFyZSBpbg0KICogICAgICAgICAgICAgICBCT1VORCwgUkVORVcgb3IgUkVCSU5ESU5HIHN0
YXRlIGFuZCBjYW4gcmVzcG9uZCB0byBBUlANCiAqICAgICAgICAgICAgICAgcmVxdWVzdHMuDQog
KiBccGFyYW0gc2VjcyAgIFNlY29uZHMgZWxhcHNlZCwgc2luY2Ugd2UgYmVnYW4gYWRkcmVzcyBh
Y3F1aXNpdGlvbiBvcg0KICogICAgICAgICAgICAgICByZW5ld2FsLg0KICoNCiAqIFxyZXR1cm4g
VG90YWwgbnVtYmVyIG9mIG9jdGV0cyBhZGRlZC4NCiAqLw0Kc3RhdGljIHVuc2lnbmVkIGludCBE
aGNwUHJlcEhlYWRlcihCT09UUCAqYnAsIHVpbnQ4X3QgbXNndHlwLCB1aW50MzJfdCB4aWQsIHVp
bnQzMl90IGNpYWRkciwgdWludDE2X3Qgc2VjcykNCnsNCiAgICB1aW50OF90ICpvcDsNCg0KICAg
IG1lbXNldChicCwgMCwgc2l6ZW9mKCpicCkpOw0KICAgIC8qIENsaWVudHMgc2VuZCBib290cCBy
ZXF1ZXN0cyAob3AgY29kZSAxKSBvbmx5LiAqLw0KICAgIGJwLT5icF9vcCA9IDE7DQogICAgLyog
RXRoZXJuZXQgYWRkcmVzc2VzIGFyZSB0eXBlIDEgd2l0aCA2IG9jdGV0cy4gKi8NCiAgICBicC0+
YnBfaHR5cGUgPSAxOw0KICAgIGJwLT5icF9obGVuID0gNjsNCiAgICBtZW1jcHkoYnAtPmJwX2No
YWRkciwgY29uZm5ldC5jZG5fbWFjLCA2KTsNCiAgICAvKiBUcmFuc2FjdGlvbiBpZGVudGlmaWVy
LiAqLw0KICAgIGJwLT5icF94aWQgPSB4aWQ7DQogICAgLyogU2Vjb25kcyBlbGFwc2VkIHNpbmNl
IGFkZHJlc3MgYWNxdWlzaXRpb24uICovDQogICAgYnAtPmJwX3NlY3MgPSBodG9ucyhzZWNzKTsN
Cg0KI2lmZGVmIERIQ1BfQlJPQURDQVNUX0ZMQUcNCiAgICAvKg0KICAgICAqIFdlIGRvIG5vdCBu
ZWVkIHRoZSBicm9hZGNhc3QgZmxhZywgYmVjYXVzZSBvdXIgc3RhY2sgYWNjZXB0cyBJUA0KICAg
ICAqIG1lc3NhZ2VzIHRvIGFueSBkZXN0aW5hdGlvbiBpZiBubyBsb2NhbCBhZGRyZXNzIGhhcyBi
ZWVuIGFzc2lnbmVkLA0KICAgICAqIEhvd2V2ZXIsIHdlIGNvbnRpbnVlIHN1cHBvcnRpbmcgdGhp
cyBjb21waWxlIHRpbWUgb3B0aW9uLg0KICAgICAqLw0KICAgIGJwLT5icF9mbGFncyA9IGh0b25z
KDB4ODAwMCk7DQojZW5kaWYNCg0KICAgIGJwLT5icF9jaWFkZHIgPSBjaWFkZHI7DQoNCiAgICAv
KiBBZGQgdGhlIERIQ1AgbWFnaWMgY29va2llIGFjY29yZGluZyB0byBSRkMgMTQ5Ny4gKi8NCiAg
ICBvcCA9IGJwLT5icF9vcHRpb25zOw0KICAgICpvcCsrID0gMHg2MzsNCiAgICAqb3ArKyA9IDB4
ODI7DQogICAgKm9wKysgPSAweDUzOw0KICAgICpvcCsrID0gMHg2MzsNCg0KICAgIC8qIEFkZCB0
aGUgREhDUCBtZXNzYWdlIHR5cGUgb3B0aW9uLiAqLw0KICAgIHJldHVybiBEaGNwQWRkQnl0ZU9w
dGlvbihvcCwgREhDUE9QVF9NU0dUWVBFLCBtc2d0eXApICsgNDsNCn0NCg0KLyohDQogKiBcYnJp
ZWYgU2VuZCBhIERIQ1AgbWVzc2FnZSB0byB0aGUgc2VydmVyLg0KICoNCiAqIFRoaXMgcm91dGlu
ZSB3aWxsIGFsc28gYWRkIGFuIGVuZCBvZiBvcHRpb24gaWRlbnRpZmllciBhbmQgdGFrZSBjYXJl
LA0KICogdGhhdCB0aGUgbWVzc2FnZSBsZW5ndGggd2lsbCBub3QgZmFsbCBiZWxvdyB0aGUgbWlu
aW11bSBleHBlY3RlZCBieQ0KICogQk9PVFAuDQogKg0KICogXHBhcmFtIHNvY2sgU29ja2V0IGRl
c2NyaXB0b3IuIFRoaXMgcG9pbnRlciBtdXN0IGhhdmUgYmVlbg0KICogICAgICAgICAgICAgcmV0
cmlldmVkIGJ5IGNhbGxpbmcgTnV0VWRwQ3JlYXRlU29ja2V0KCkuDQogKiBccGFyYW0gYWRkciBE
ZXN0aW5hdGlvbiBJUCBhZGRyZXMuDQogKiBccGFyYW0gYnAgICBQb2ludGVyIHRvIGEgYnVmZmVy
IHRvIGJlIHVzZWQgZm9yIHRyYW5zbWlzc2lvbi4NCiAqICAgICAgICAgICAgIE11c3QgY29udGFp
biBhIGZ1bGx5IGluaXRpYWxpemVkIGhlYWRlciBhbmQgb3B0aW9uDQogKiAgICAgICAgICAgICBm
aWVsZHMuDQogKiBccGFyYW0gbGVuICBUb3RhbCBudW1iZXIgb2YgREhDUCBvcHRpb24gb2N0ZXRz
Lg0KICoNCiAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBlcnJvcnMgLTEgaXMgcmV0dXJuZWQg
YW5kIFxyZWYgZGhjcEVycm9yIHdpbGwNCiAqICAgICAgICAgYmUgc2V0IHRvIFxyZWYgREhDUEVS
Ul9UUkFOU01JVC4NCiAqLw0Kc3RhdGljIGludCBEaGNwU2VuZE1lc3NhZ2UoVURQU09DS0VUICog
c29jaywgdWludDMyX3QgYWRkciwgQk9PVFAgKmJwLCBzaXplX3QgbGVuKQ0Kew0KICAgIC8qIEFk
ZCAnZW5kIG9mIG9wdGlvbnMnLiAqLw0KICAgIGJwLT5icF9vcHRpb25zW2xlbisrXSA9IERIQ1BP
UFRfRU5EOw0KDQogICAgLyogTWFpbnRhaW4gYSBCT09UUCBjb21wYXRpYmxlIG1pbmltdW0gcGFj
a2V0IHNpemUgb2YgMzAwIG9jdGV0cy4NCiAgICAgICBUaGFua3MgdG8gVG9tb2hpcm8gSGFyYWlr
YXdhLiAqLw0KICAgIGlmICgobGVuICs9IHNpemVvZihCT09UUCkgLSBzaXplb2YoYnAtPmJwX29w
dGlvbnMpKSA8IE1JTl9ESENQX01TR1NJWkUpIHsNCiAgICAgICAgbGVuID0gTUlOX0RIQ1BfTVNH
U0laRTsNCiAgICB9DQojaWZkZWYgTlVUREVCVUcNCiAgICBpZiAoX190Y3BfdHJmICYgTkVUX0RC
R19ESENQKSB7DQogICAgICAgIGZwcmludGYoX190Y3BfdHJzLCAiW0RIQ1AtU2VuZCB0byAlc10i
LCBpbmV0X250b2EoYWRkcikpOw0KICAgIH0NCiNlbmRpZg0KICAgIGlmIChOdXRVZHBTZW5kVG8o
c29jaywgYWRkciwgREhDUF9TRVJWRVJQT1JULCBicCwgbGVuKSA8IDApIHsNCiAgICAgICAgZGhj
cEVycm9yID0gREhDUEVSUl9UUkFOU01JVDsNCiAgICAgICAgcmV0dXJuIC0xOw0KICAgIH0NCiAg
ICByZXR1cm4gMDsNCn0NCg0KLyohDQogKiBcYnJpZWYgUmVjZWl2ZSBhIERIQ1AgcmVwbHkgZnJv
bSB0aGUgc2VydmVyLg0KICoNCiAqIFxwYXJhbSBzb2NrIFNvY2tldCBkZXNjcmlwdG9yLg0KICog
XHBhcmFtIHhpZCAgRXhwZWN0ZWQgdHJhbnNhY3Rpb24gaWRlbnRpZmllci4gSW5jb21pbmcgbWVz
c2FnZXMgd2l0aCBhDQogKiAgICAgICAgICAgICBkaWZmZXJlbnQgaWRlbnRpZmllciBhcmUgc2ls
ZW50bHkgZGlzY2FyZGVkLg0KICogXHBhcmFtIGJwICAgUG9pbnRlciB0byB0aGUgcmVjZWl2ZSBi
dWZmZXIuDQogKiBccGFyYW0gdG1vICBNYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8g
d2FpdCBmb3IgYSB2YWxpZCBtZXNzYWdlLg0KICoNCiAqIFxyZXR1cm4gVGhlIG51bWJlciBvZiBi
eXRlcyByZWNlaXZlZCwgaWYgc3VjY2Vzc2Z1bC4gVGhlIHJldHVybg0KICogICAgICAgICB2YWx1
ZSAtMSBpbmRpY2F0ZXMgYW4gZXJyb3IsIGluIHdoaWNoIGNhc2UgZGhjcEVycm9yIGlzDQogKiAg
ICAgICAgIHNldCB0byBhbiBlcnJvciBjb2RlLiBPbiB0aW1lb3V0IDAgaXMgcmV0dXJuZWQuDQog
Ki8NCnN0YXRpYyBpbnQgRGhjcFJlY3ZNZXNzYWdlKFVEUFNPQ0tFVCAqIHNvY2ssIHVpbnQzMl90
IHhpZCwgQk9PVFAgKmJwLCB1aW50MzJfdCB0bW8pDQp7DQogICAgaW50IHJjOw0KICAgIHVpbnQx
Nl90IHBvcnQ7DQogICAgdWludDMyX3QgYWRkcjsNCiAgICB1aW50MzJfdCBldGltOw0KICAgIHVp
bnQzMl90IHd0aW07DQoNCiAgICAvKiBTZXQgb3VyIHN0YXJ0IHRpbWUuICovDQogICAgZXRpbSA9
IE51dEdldE1pbGxpcygpOw0KICAgIC8qIFNldCB0aGUgaW5pdGlhbCByZWNlaXZlIHRpbWVvdXQu
ICovDQogICAgd3RpbSA9IHRtbzsNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIHJjID0gTnV0VWRw
UmVjZWl2ZUZyb20oc29jaywgJmFkZHIsICZwb3J0LCBicCwgc2l6ZW9mKEJPT1RQKSwgd3RpbSk7
DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdfREhDUCkg
ew0KICAgICAgICAgICAgaWYgKHJjID4gMCkgew0KICAgICAgICAgICAgICAgIGZwcmludGYoX190
Y3BfdHJzLCAiW0RIQ1AtUmVjdiBmcm9tICVzXSIsIGluZXRfbnRvYShhZGRyKSk7DQogICAgICAg
ICAgICB9IGVsc2UgaWYgKHJjIDwgMCkgew0KICAgICAgICAgICAgICAgIGZwcmludGYoX190Y3Bf
dHJzLCAiW0RIQ1AtUmVjdiBFcnJvcl0iKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg
ICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJbREhDUC1SZWN2IFRpbWVvdXQgJWx1XSIsIHRt
byk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiNlbmRpZg0KICAgICAgICAvKiBJbW1lZGlh
dGVseSByZXR1cm4gb24gcmVjZWl2ZSBlcnJvcnMgYW5kIHRpbWVvdXRzLiAqLw0KICAgICAgICBp
ZiAocmMgPD0gMCkgew0KICAgICAgICAgICAgaWYgKHJjIDwgMCkgew0KICAgICAgICAgICAgICAg
IGRoY3BFcnJvciA9IERIQ1BFUlJfUkVDRUlWRTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg
IGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIC8qIFRoZSBtZXNzYWdlIG11c3QgYXQgbGVhc3Qg
aW5jbHVkZSB0aGUgQk9PVFAgaGVhZGVyIHBsdXMgZml2ZQ0KICAgICAgICAgICBieXRlcyBvZiBv
cHRpb25zIChtYWdpYyBhbmQgZW5kKS4gV2UgYXJlIHF1aXRlIGxpYmVyYWwgaGVyZS4gKi8NCiAg
ICAgICAgaWYgKHJjID4gc2l6ZW9mKEJPT1RQKSAtIHNpemVvZihicC0+YnBfb3B0aW9ucykgKyA1
KSB7DQogICAgICAgICAgICAvKiBUaGUgbWVzc2FnZSBtdXN0IGJlIGEgQk9PVFAgcmVwbHkgd2l0
aCB0aGUgZXhwZWN0ZWQgWElELiAqLw0KICAgICAgICAgICAgaWYgKGJwLT5icF9vcCA9PSAyICYm
IGJwLT5icF94aWQgPT0geGlkKSB7DQogICAgICAgICAgICAgICAgLyogTWVzc2FnZSBpcyBhY2Nl
cHRhYmxlLiAqLw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICAgIC8qIENhbGN1bGF0ZSB0aGUgcmVtYWluaW5nIHRpbWVvdXQgZm9yIG5vdCBn
ZXR0aW5nIHRyYXBwZWQgaGVyZQ0KICAgICAgICAgICBvbiBhIGJ1c3kgbmV0d29yaywgd2hpY2gg
cmVndWxhcmx5IGJyb2FkY2FzdHMgREhDUCBtZXNzYWdlcy4gKi8NCiAgICAgICAgd3RpbSA9IE51
dEdldE1pbGxpcygpIC0gZXRpbTsNCiAgICAgICAgaWYgKHd0aW0gPj0gdG1vIC0gMjUwKSB7DQog
ICAgICAgICAgICAvKiBMZXNzIHRoYW4gMjUwIG1zIGxlZnQsIHJldHVybiB0aW1lb3V0LiAqLw0K
ICAgICAgICAgICAgcmMgPSAwOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICAg
ICAgd3RpbSA9IHRtbyAtIHd0aW07DQogICAgfQ0KICAgIHJldHVybiByYzsNCn0NCg0KLyohDQog
KiBcYnJpZWYgQnJvYWRjYXN0IGEgREhDUCBkaXNjb3ZlciBtZXNzYWdlLg0KICoNCiAqIFxwYXJh
bSBzb2NrICBTb2NrZXQgZGVzY3JpcHRvci4gVGhpcyBwb2ludGVyIG11c3QgaGF2ZSBiZWVuIHJl
dHJpZXZlZA0KICogICAgICAgICAgICAgIGJ5IGNhbGxpbmcgTnV0VWRwQ3JlYXRlU29ja2V0KCku
DQogKiBccGFyYW0gYnAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0byBiZSB1c2VkIGZvciB0cmFu
c21pc3Npb24uIE5vIHNwZWNpZmljDQogKiAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24gcmVx
dWlyZWQuDQogKiBccGFyYW0geGlkICAgUmFuZG9tIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIuDQog
KiBccGFyYW0gcmFkZHIgUmVxdWVzdGVkIElQIGFkZHJlc3MuIE9wdGlvbmFsLg0KICogXHBhcmFt
IHNlY3MgIFNlY29uZHMgZWxhcHNlZCBzaW5jZSBzdGFydCBvZiBhZGRyZXNzIGFjcXVpc2l0aW9u
LiBSZWxhdGVkDQogKiAgICAgICAgICAgICAgcmVxdWVzdHMgbXVzdCB1c2UgdGhlIHNhbWUgdmFs
dWUuDQogKg0KICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHNlbmQgZmFpbGVkLg0KICov
DQpzdGF0aWMgaW50IERoY3BCcm9hZGNhc3REaXNjb3ZlcihVRFBTT0NLRVQgKiBzb2NrLCBCT09U
UCAqYnAsIHVpbnQzMl90IHhpZCwgdWludDMyX3QgcmFkZHIsIHVpbnQxNl90IHNlY3MpDQp7DQog
ICAgc2l6ZV90IG9wdGxlbjsNCiAgICBpbnQgbGVuOw0KICAgIHVpbnQ4X3QgKm9wID0gYnAtPmJw
X29wdGlvbnM7DQoNCiAgICBvcHRsZW4gPSBEaGNwUHJlcEhlYWRlcihicCwgREhDUF9ESVNDT1ZF
UiwgeGlkLCAwLCBzZWNzKTsNCg0KICAgIC8qIFJlcXVlc3QgYSBzcGVjaWZpYyBJUCBpZiBvbmUg
aGFkIGJlZW4gYXNzaWduZWQgcHJldmlvdXNseS4gKi8NCiAgICBpZiAocmFkZHIpIHsNCiAgICAg
ICAgb3B0bGVuICs9IERoY3BBZGRPcHRpb24ob3AgKyBvcHRsZW4sIERIQ1BPUFRfUkVRRVNUSVAs
ICZyYWRkciwgc2l6ZW9mKHJhZGRyKSk7DQogICAgfQ0KDQogICAgb3B0bGVuICs9IERoY3BBZGRQ
YXJtUmVxT3B0aW9uKG9wICsgb3B0bGVuKTsNCg0KICAgIC8qIFBhc3MgaG9zdCBuYW1lIGlmIHNw
ZWNpZmllZCBpbiBjb25mb3Mgc3RydWN0dXJlLg0KICAgICAqIFdpbjJrIERIQ1Agc2VydmVyIGNh
biByZWdpc3RlciB0aGlzIGFzIGR5bmFtaWMgRE5TIGVudHJ5Lg0KICAgICAqIEFsc28gdmlld2lu
ZyBESENQIGxlYXNlIHRhYmxlIHNob3dzIHNvbWV0aGluZyBzZW5zaWJsZS4NCiAgICAgKi8NCiAg
ICBsZW4gPSBzdHJsZW4oY29uZm9zLmhvc3RuYW1lKTsNCiAgICBpZiAobGVuID4gMCkgew0KICAg
ICAgICBvcHRsZW4gKz0gRGhjcEFkZE9wdGlvbihvcCArIG9wdGxlbiwgREhDUE9QVF9IT1NUTkFN
RSwgY29uZm9zLmhvc3RuYW1lLCBsZW4pOw0KICAgIH0NCg0KICAgIC8qIFJlcXVlc3QgYSBtYXhp
bXVtIG1lc3NhZ2Ugc2l6ZS4gKi8NCiAgICBvcHRsZW4gKz0gRGhjcEFkZFNob3J0T3B0aW9uKG9w
ICsgb3B0bGVuLCBESENQT1BUX01BWE1TR1NJWkUsIE1BWF9ESENQX01TR1NJWkUpOw0KDQogICAg
cmV0dXJuIERoY3BTZW5kTWVzc2FnZShzb2NrLCBJTkFERFJfQlJPQURDQVNULCBicCwgb3B0bGVu
KTsNCn0NCg0KDQovKiENCiAqIFxicmllZiBTZW5kIGEgREhDUCByZXF1ZXN0IG1lc3NhZ2UuDQog
Kg0KICogXHBhcmFtIHNvY2sgIFNvY2tldCBkZXNjcmlwdG9yLiBUaGlzIHBvaW50ZXIgbXVzdCBo
YXZlIGJlZW4gcmV0cmlldmVkIGJ5DQogKiAgICAgICAgICAgICAgY2FsbGluZyBOdXRVZHBDcmVh
dGVTb2NrZXQoKS4NCiAqIFxwYXJhbSBkYWRkciBJUCBhZGRyZXNzIG9mIHRoZSBESENQIHNlcnZl
ciBvciBccmVmIElOQUREUl9CUk9BRENBU1QuDQogKiBccGFyYW0gYnAgICAgUG9pbnRlciB0byBh
IGJ1ZmZlciB0byBiZSB1c2VkIGZvciB0cmFuc21pc3Npb24uDQogKiBccGFyYW0geGlkICAgUmFu
ZG9tIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIuDQogKiBccGFyYW0gY2FkZHIgT3VyIElQIGFkZHJl
c3MuIFNob3VsZCBiZSBzZXQgb25seSBpZiB3ZSBhcmUgYWJsZSB0byByZXNwb25kDQogKiAgICAg
ICAgICAgICAgdG8gQVJQIHJlcXVlc3RzLiBPdGhlcndpc2UgbXVzdCBiZSBzZXQgdG8gMC4NCiAq
IFxwYXJhbSByYWRkciBSZXF1ZXN0ZWQgSVAgYWRkcmVzcy4gUmVxdWlyZWQuDQogKiBccGFyYW0g
c2lkICAgU2VydmVyIGlkZW50aWZpZXIuIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgYW4gb2ZmZXIg
cmVzcG9uc2UsDQogKiAgICAgICAgICAgICAgdGhlbiBzZXQgaXQgdG8gemVyby4NCiAqIFxwYXJh
bSBzZWNzICBTZWNvbmRzIGVsYXBzZWQgc2luY2Ugc3RhcnQgb2YgYWRkcmVzcyBhY3F1aXNpdGlv
bi4gSWYgdGhpcw0KICogICAgICAgICAgICAgIHJlcXVlc3QgaXMgc2VudCBpbiByZXBvbnNlIHRv
IGFuIG9mZmVyLCB0aGUgc2FtZSB2YWx1ZSBtdXN0DQogKiAgICAgICAgICAgICAgYmUgdXNlZC4N
CiAqDQogKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgaWYgc2VuZCBmYWlsZWQuDQogKi8NCnN0
YXRpYyBpbnQgRGhjcFNlbmRSZXF1ZXN0KFVEUFNPQ0tFVCAqIHNvY2ssIHVpbnQzMl90IGRhZGRy
LCBCT09UUCAqYnAsIHVpbnQzMl90IHhpZCwgICAgICAgIC8qICovDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBjYWRkciwgdWludDMyX3QgcmFkZHIsIHVpbnQzMl90IHNpZCwg
dWludDE2X3Qgc2VjcykNCnsNCiAgICBzaXplX3Qgb3B0bGVuOw0KICAgIGludCBsZW47DQogICAg
dWludDhfdCAqb3AgPSBicC0+YnBfb3B0aW9uczsNCg0KICAgIC8qIEluaXRpYWxpemUgdGhlIEJP
T1RQIGhlYWRlci4gKi8NCiAgICBvcHRsZW4gPSBEaGNwUHJlcEhlYWRlcihicCwgREhDUF9SRVFV
RVNULCB4aWQsIGNhZGRyLCBzZWNzKTsNCg0KICAgIC8qIEFkZCBzcGVjaWZpZWQgb3B0aW9ucy4g
Ki8NCiAgICBpZiAocmFkZHIpIHsNCiAgICAgICAgb3B0bGVuICs9IERoY3BBZGRPcHRpb24ob3Ag
KyBvcHRsZW4sIERIQ1BPUFRfUkVRRVNUSVAsICZyYWRkciwgc2l6ZW9mKHJhZGRyKSk7DQogICAg
fQ0KICAgIGlmIChzaWQpIHsNCiAgICAgICAgb3B0bGVuICs9IERoY3BBZGRPcHRpb24ob3AgKyBv
cHRsZW4sIERIQ1BPUFRfU0lELCAmc2lkLCBzaXplb2Yoc2lkKSk7DQogICAgfQ0KICAgIG9wdGxl
biArPSBEaGNwQWRkUGFybVJlcU9wdGlvbihvcCArIG9wdGxlbik7DQoNCiAgICAvKiBQYXNzIGhv
c3QgbmFtZSBpZiBzcGVjaWZpZWQgaW4gY29uZm9zIHN0cnVjdHVyZS4gICovDQogICAgLyogdmll
d2luZyBESENQIGxlYXNlIHRhYmxlIHNob3dzIHNvbWV0aGluZyBzZW5zaWJsZS4gKi8NCiAgICBs
ZW4gPSBzdHJsZW4oY29uZm9zLmhvc3RuYW1lKTsNCiAgICBpZiAobGVuID4gMCkgew0KICAgICAg
ICBvcHRsZW4gKz0gRGhjcEFkZE9wdGlvbihvcCArIG9wdGxlbiwgREhDUE9QVF9IT1NUTkFNRSwg
Y29uZm9zLmhvc3RuYW1lLCBsZW4pOw0KICAgIH0NCg0KICAgIHJldHVybiBEaGNwU2VuZE1lc3Nh
Z2Uoc29jaywgZGFkZHIsIGJwLCBvcHRsZW4pOw0KfQ0KDQovKiENCiAqIFxicmllZiBCcm9hZGNh
c3QgYSBESENQIHJlcXVlc3QgbWVzc2FnZS4NCiAqDQogKiBccGFyYW0gc29jayAgU29ja2V0IGRl
c2NyaXB0b3IuIFRoaXMgcG9pbnRlciBtdXN0IGhhdmUgYmVlbiByZXRyaWV2ZWQgYnkNCiAqICAg
ICAgICAgICAgICBjYWxsaW5nIE51dFVkcENyZWF0ZVNvY2tldCgpLg0KICogXHBhcmFtIGJwICAg
IFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLg0KICogXHBh
cmFtIHhpZCAgIFJhbmRvbSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLg0KICogXHBhcmFtIGNhZGRy
IE91ciBJUCBhZGRyZXNzLiBTaG91bGQgYmUgc2V0IG9ubHkgaWYgd2UgYXJlIGFibGUgdG8gcmVz
cG9uZA0KICogICAgICAgICAgICAgIHRvIEFSUCByZXF1ZXN0cy4gT3RoZXJ3aXNlIG11c3QgYmUg
c2V0IHRvIDAuDQogKiBccGFyYW0gcmFkZHIgUmVxdWVzdGVkIElQIGFkZHJlc3MuIFJlcXVpcmVk
Lg0KICogXHBhcmFtIHNpZCAgIFNlcnZlciBpZGVudGlmaWVyLiBJZiB0aGlzIHJlcXVlc3QgaXMg
bm90IGFuIG9mZmVyIHJlc3BvbnNlLA0KICogICAgICAgICAgICAgIHRoZW4gc2V0IGl0IHRvIHpl
cm8uDQogKiBccGFyYW0gc2VjcyAgU2Vjb25kcyBlbGFwc2VkIHNpbmNlIHN0YXJ0IG9mIGFkZHJl
c3MgYWNxdWlzaXRpb24uIElmIHRoaXMNCiAqICAgICAgICAgICAgICByZXF1ZXN0IGlzIHNlbnQg
aW4gcmVwb25zZSB0byBhbiBvZmZlciwgdGhlIHNhbWUgdmFsdWUgbXVzdA0KICogICAgICAgICAg
ICAgIGJlIHVzZWQuDQogKg0KICogXHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHNlbmQgZmFp
bGVkLg0KICovDQpzdGF0aWMgaW50IERoY3BCcm9hZGNhc3RSZXF1ZXN0KFVEUFNPQ0tFVCAqIHNv
Y2ssIEJPT1RQICpicCwgdWludDMyX3QgeGlkLCAvKiAqLw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBjYWRkciwgdWludDMyX3QgcmFkZHIsIHVpbnQzMl90IHNpZCwg
dWludDE2X3Qgc2VjcykNCnsNCiAgICByZXR1cm4gRGhjcFNlbmRSZXF1ZXN0KHNvY2ssIElOQURE
Ul9CUk9BRENBU1QsIGJwLCB4aWQsIGNhZGRyLCByYWRkciwgc2lkLCBzZWNzKTsNCn0NCg0KLyoh
DQogKiBcYnJpZWYgUmVsaW5ndWlzaCBvdXIgREhDUCBsZWFzZS4NCiAqDQogKiBccGFyYW0gc29j
ayAgU29ja2V0IGRlc2NyaXB0b3IuIFRoaXMgcG9pbnRlciBtdXN0IGhhdmUgYmVlbiByZXRyaWV2
ZWQgYnkNCiAqICAgICAgICAgICAgICBjYWxsaW5nIE51dFVkcENyZWF0ZVNvY2tldCgpLg0KICog
XHBhcmFtIGRhZGRyIElQIGFkZHJlc3Mgb2YgdGhlIERIQ1Agc2VydmVyLg0KICogXHBhcmFtIGJw
ICAgIFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLg0KICog
XHBhcmFtIHhpZCAgIFJhbmRvbSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLg0KICogXHBhcmFtIGNh
ZGRyIE91ciBJUCBhZGRyZXNzLiBTaG91bGQgYmUgc2V0IG9ubHkgaWYgd2UgYXJlIGFibGUgdG8g
cmVzcG9uZA0KICogICAgICAgICAgICAgIHRvIEFSUCByZXF1ZXN0cy4gT3RoZXJ3aXNlIG11c3Qg
YmUgc2V0IHRvIDAuDQogKiBccGFyYW0gc2lkICAgU2VydmVyIGlkZW50aWZpZXIuIElmIHRoaXMg
cmVxdWVzdCBpcyBub3QgYW4gb2ZmZXIgcmVzcG9uc2UsDQogKiAgICAgICAgICAgICAgdGhlbiBz
ZXQgaXQgdG8gemVyby4NCiAqDQogKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEgaWYgc2VuZCBm
YWlsZWQuDQogKi8NCnN0YXRpYyBpbnQgRGhjcFNlbmRSZWxlYXNlKFVEUFNPQ0tFVCAqIHNvY2ss
IHVpbnQzMl90IGRhZGRyLCBCT09UUCAqYnAsIHVpbnQzMl90IHhpZCwgdWludDMyX3QgY2FkZHIs
IHVpbnQzMl90IHNpZCkNCnsNCiAgICBzaXplX3Qgb3B0bGVuOw0KICAgIHVpbnQ4X3QgKm9wID0g
YnAtPmJwX29wdGlvbnM7DQoNCiAgICAvKiBQcmVwYXJlIEJPT1RQIGhlYWRlci4gJ3NlY3MnIGlz
IHNldCB0byB6ZXJvLiAqLw0KICAgIG9wdGxlbiA9IERoY3BQcmVwSGVhZGVyKGJwLCBESENQX1JF
TEVBU0UsIHhpZCwgY2FkZHIsIDApOw0KDQogICAgLyogT3B0aW9uYWxseSBhZGQgc2VydmVyIGlk
ZW50aWZpZXIuICovDQogICAgaWYgKHNpZCkgew0KICAgICAgICBvcHRsZW4gKz0gRGhjcEFkZE9w
dGlvbihvcCArIG9wdGxlbiwgREhDUE9QVF9TSUQsICZzaWQsIHNpemVvZihzaWQpKTsNCiAgICB9
DQogICAgcmV0dXJuIERoY3BTZW5kTWVzc2FnZShzb2NrLCBkYWRkciwgYnAsIG9wdGxlbik7DQp9
DQoNCi8qIQ0KICogXGJyaWVmIEluZm9ybSBESENQIGFib3V0IGFuIGV4dGVybmFsbHkgYWxsb2Nh
dGVkIGFkZHJlc3MuDQogKg0KICogXHBhcmFtIHNvY2sgIFNvY2tldCBkZXNjcmlwdG9yLiBUaGlz
IHBvaW50ZXIgbXVzdCBoYXZlIGJlZW4gcmV0cmlldmVkIGJ5DQogKiAgICAgICAgICAgICAgY2Fs
bGluZyBOdXRVZHBDcmVhdGVTb2NrZXQoKS4NCiAqIFxwYXJhbSBkYWRkciBJUCBhZGRyZXNzIG9m
IHRoZSBESENQIHNlcnZlciBvciBJTkFERFJfQlJPQURDQVNULg0KICogXHBhcmFtIGJwICAgIFBv
aW50ZXIgdG8gYSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgdHJhbnNtaXNzaW9uLg0KICogXHBhcmFt
IHhpZCAgIFJhbmRvbSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLg0KICogXHBhcmFtIGNhZGRyIE91
ciBJUCBhZGRyZXNzLiBSZXF1aXJlZC4NCiAqDQogKiBccmV0dXJuIDAgb24gc3VjY2VzcywgLTEg
aWYgc2VuZCBmYWlsZWQuDQogKi8NCnN0YXRpYyBpbnQgRGhjcFNlbmRJbmZvcm0oVURQU09DS0VU
ICogc29jaywgdWludDMyX3QgZGFkZHIsIEJPT1RQICpicCwgdWludDMyX3QgeGlkLCB1aW50MzJf
dCBjYWRkcikNCnsNCiAgICBzaXplX3Qgb3B0bGVuOw0KICAgIHNpemVfdCBsZW47DQogICAgdWlu
dDhfdCAqb3AgPSBicC0+YnBfb3B0aW9uczsNCg0KICAgIC8qIFByZXBhcmUgQk9PVFAgaGVhZGVy
LiAnc2VjcycgaXMgc2V0IHRvIHplcm8uICovDQogICAgb3B0bGVuID0gRGhjcFByZXBIZWFkZXIo
YnAsIERIQ1BfSU5GT1JNLCB4aWQsIGNhZGRyLCAwKTsNCg0KICAgIC8qIEFkZGl0aW9uYWwgb3B0
aW9ucyB3ZSB3YW50LiAqLw0KICAgIG9wdGxlbiArPSBEaGNwQWRkUGFybVJlcU9wdGlvbihvcCAr
IG9wdGxlbik7DQoNCiAgICAvKiBBZGQgb3VyIGNvbmZpZ3VyZWQgaG9zdCBuYW1lLiAqLw0KICAg
IGxlbiA9IHN0cmxlbihjb25mb3MuaG9zdG5hbWUpOw0KICAgIGlmIChsZW4gPiAwKSB7DQogICAg
ICAgIG9wdGxlbiArPSBEaGNwQWRkT3B0aW9uKG9wICsgb3B0bGVuLCBESENQT1BUX0hPU1ROQU1F
LCBjb25mb3MuaG9zdG5hbWUsIGxlbik7DQogICAgfQ0KDQogICAgLyogV2Ugc2hvdWxkIHByb3Zp
ZGUgdGhlIG1heGltdW0gbWVzc2FnZSBzaXplLiAqLw0KICAgIG9wdGxlbiArPSBEaGNwQWRkU2hv
cnRPcHRpb24ob3AgKyBvcHRsZW4sIERIQ1BPUFRfTUFYTVNHU0laRSwgTUFYX0RIQ1BfTVNHU0la
RSk7DQoNCiAgICByZXR1cm4gRGhjcFNlbmRNZXNzYWdlKHNvY2ssIGRhZGRyLCBicCwgb3B0bGVu
KTsNCn0NCg0KDQovKiENCiAqIFxicmllZiBDaGVjayBhIG5ldyBvZmZlci4NCiAqDQogKiBccGFy
YW0gZHluY2ZnIEN1cnJlbnQgY29uZmlndXJhdGlvbiwgbWF5IGJlIE5VTEwuDQogKiBccGFyYW0g
aXAgICAgIERIQ1Agc2VydmVyIElQIGFkZHJlc3MuDQogKiBccGFyYW0gYnAgICAgIERIQ1Agb2Zm
ZXIgbWVzc2FnZS4NCiAqIFxwYXJhbSBsZW4gICAgREhDUCBtZXNzYWdlIGxlbmd0aC4NCiAqDQog
KiBccmV0dXJuIFVwZGF0ZWQgY29uZmlndXJhdGlvbi4NCiAqLw0Kc3RhdGljIERZTkNGRyAqQ2hl
Y2tPZmZlcihEWU5DRkcgKiBkeW5jZmcsIEJPT1RQICpicCwgc2l6ZV90IGxlbikNCnsNCiAgICBE
WU5DRkcgKm9mZmVyOw0KDQojaWZkZWYgTlVUREVCVUcNCiAgICBpZiAoX190Y3BfdHJmICYgTkVU
X0RCR19ESENQKSBmcHJpbnRmKF9fdGNwX3RycywgIlxuW2Noa29mZmVyICVzICIsIGluZXRfbnRv
YSggZHluY2ZnLT5keW5feWlhZGRyKSk7DQojZW5kaWYNCg0KICAgIC8qIFBhcnNlIHRoZSBuZXcg
b2ZmZXIuIElmIGl0J3MgaW52YWxpZCwgcmV0dXJuIHRoZSBjdXJyZW50DQogICAgICAgY29uZmln
dXJhdGlvbi4gKi8NCiAgICBpZiAoKG9mZmVyID0gUGFyc2VSZXBseShicCwgbGVuKSkgPT0gMCkg
ew0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1Ap
IGZwcmludGYoX190Y3BfdHJzLCAiVEFLRTogJXNdIiwgaW5ldF9udG9hKCBvZmZlci0+ZHluX3lp
YWRkcikpOw0KI2VuZGlmDQogICAgICAgIHJldHVybiBkeW5jZmc7DQogICAgfQ0KDQogICAgLyog
RGlzY2FyZCBhbnl0aGluZyB3aGljaCBpcyBub3QgYW4gb2ZmZXIuICovDQogICAgaWYgKG9mZmVy
LT5keW5fbXNndHlwICE9IERIQ1BfT0ZGRVIpIHsNCiAgICAgICAgUmVsZWFzZUR5bkNmZyhvZmZl
cik7DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdfREhD
UCkgZnByaW50ZihfX3RjcF90cnMsICJOTy1PRkZFUl0iKTsNCiNlbmRpZg0KICAgICAgICByZXR1
cm4gZHluY2ZnOw0KICAgIH0NCg0KICAgIC8qIEZpcnN0IG9mZmVyLCB0YWtlIGl0LiAqLw0KICAg
IGlmIChkeW5jZmcgPT0gMCkgew0KICAgICAgICBkeW5jZmcgPSBvZmZlcjsNCiNpZmRlZiBOVVRE
RUJVRw0KICAgICAgICBpZiAoX190Y3BfdHJmICYgTkVUX0RCR19ESENQKSBmcHJpbnRmKF9fdGNw
X3RycywgIkZJUlNUOiAlc10iLCBpbmV0X250b2Eob2ZmZXItPmR5bl95aWFkZHIpKTsNCiNlbmRp
Zg0KICAgIH0NCg0KICAgIC8qDQogICAgICogQ2hlY2sgaWYgdGhlIG5ldyBvZmZlciBpcyBiZXR0
ZXIgdGhhbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uOg0KICAgICAqLw0KICAgIGVsc2Ugew0K
ICAgICAgICAvKiBJZiB3ZSByZW1lbWJlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIElQIHdoaWNo
IGlzbid0IGluIHRoZQ0KICAgICAgICAgICBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYnV0IGluIHRo
ZSBuZXcgb2ZmZXIsIHRoZW4gbGV0J3MgdGFrZQ0KICAgICAgICAgICB0aGUgbmV3IG9uZS4gKi8N
CiNpZmRlZiBOVVRERUJVRw0KICAgICAgICBpZiAoX190Y3BfdHJmICYgTkVUX0RCR19ESENQKSBm
cHJpbnRmKF9fdGNwX3RycywgIlBSRVYgIik7DQojZW5kaWYNCiAgICAgICAgaWYgKGNvbmZuZXQu
Y2RuX2lwX2FkZHIgJiBjb25mbmV0LmNkbl9pcF9tYXNrKSB7DQogICAgICAgICAgICBpZiAoZHlu
Y2ZnLT5keW5feWlhZGRyICE9IGNvbmZuZXQuY2RuX2lwX2FkZHIgJiYgICAgLyogKi8NCiAgICAg
ICAgICAgICAgICBvZmZlci0+ZHluX3lpYWRkciA9PSBjb25mbmV0LmNkbl9pcF9hZGRyKSB7DQog
ICAgICAgICAgICAgICAgUmVsZWFzZUR5bkNmZyhkeW5jZmcpOw0KICAgICAgICAgICAgICAgIGR5
bmNmZyA9IG9mZmVyOw0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAgICAgICAgaWYgKF9fdGNw
X3RyZiAmIE5FVF9EQkdfREhDUCkgZnByaW50ZihfX3RjcF90cnMsICJPTEQ6ICVzXSIsIGluZXRf
bnRvYSggZHluY2ZnLT5keW5feWlhZGRyKSk7DQojZW5kaWYNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgICAgICAvKiBJbiB0aGUgc2Vjb25kIHBsYWNlIHByZWZlciBsb25nIGxlYXNlIHRp
bWVzLiAqLw0KICAgICAgICBlbHNlIGlmIChvZmZlci0+ZHluX2xlYXNlVGltZSA+IGR5bmNmZy0+
ZHluX2xlYXNlVGltZSkgew0KICAgICAgICAgICAgUmVsZWFzZUR5bkNmZyhkeW5jZmcpOw0KICAg
ICAgICAgICAgZHluY2ZnID0gb2ZmZXI7DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgICAgIGlm
IChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiTE9ORzogJXNd
IiwgaW5ldF9udG9hKCBkeW5jZmctPmR5bl95aWFkZHIpKTsNCiNlbmRpZg0KICAgICAgICB9DQog
ICAgICAgIC8qIFRoZSBuZXcgb25lIGRlb3NuJ3Qgb2ZmZXIgYW55dGhpbmcgaW50ZXJlc3Rpbmcu
IERpc2NhcmQgaXQuICovDQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgUmVsZWFzZUR5bkNm
ZyhvZmZlcik7DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgICAgIGlmIChfX3RjcF90cmYgJiBO
RVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiRFNJQ10iKTsNCiNlbmRpZg0KICAgICAg
ICB9DQogICAgfQ0KICAgIHJldHVybiBkeW5jZmc7DQp9DQoNCiNpZmRlZiBOVVRERUJVRw0Kdm9p
ZCBEaGNwU3RhdGVEZWJ1ZyggdWludF9mYXN0OF90IG4sIHVpbnRfZmFzdDhfdCBzLCBpbnQgbGks
IGludCBsdCwgdXJlZ190IHJldHJpZXMpDQp7DQogICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdf
REhDUCkgew0KICAgICAgICBpZiggbikNCiAgICAgICAgICAgIGZwcmludGYoX190Y3BfdHJzLCAi
XG5bJXUuREhDUC0iLCByZXRyaWVzICsgMSk7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGZw
cmludGYoX190Y3BfdHJzLCAiXG4tPlsldS5ESENQLSIsIHJldHJpZXMgKyAxKTsNCg0KICAgICAg
ICBzd2l0Y2ggKGRoY3BTdGF0ZSkgew0KICAgICAgICBjYXNlIERIQ1BTVF9JTklUOg0KICAgICAg
ICAgICAgZnByaW50ZihfX3RjcF90cnMsICJJTklUXSIpOw0KICAgICAgICAgICAgYnJlYWs7DQog
ICAgICAgIGNhc2UgREhDUFNUX1NFTEVDVElORzoNCiAgICAgICAgICAgIGZwcmludGYoX190Y3Bf
dHJzLCAiU0VMRUNUSU5HXSIpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgREhD
UFNUX1JFUVVFU1RJTkc6DQogICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3RycywgIlJFUVVFU1RJ
TkddIik7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBESENQU1RfUkVCT09USU5H
Og0KICAgICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJSRUJPT1RJTkcgJXNdIiwgaW5ldF9u
dG9hKGxpKSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBESENQU1RfQk9VTkQ6
DQogICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3RycywgIkJPVU5EICVsdV0iLCBOdXRHZXRTZWNv
bmRzKCkgLSBsdCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBESENQU1RfUkVO
RVdJTkc6DQogICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3RycywgIlJFTkVXSU5HICVsdV0iLCBO
dXRHZXRTZWNvbmRzKCkgLSBsdCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBE
SENQU1RfUkVCSU5ESU5HOg0KICAgICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJSRUJJTkRJ
TkcgJWx1XSIsIE51dEdldFNlY29uZHMoKSAtIGx0KTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAg
ICAgICBjYXNlIERIQ1BTVF9JTkZPUk1JTkc6DQogICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3Ry
cywgIklORk9STUlOR10iKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIERIQ1BT
VF9SRUxFQVNJTkc6DQogICAgICAgICAgICBmcHJpbnRmKF9fdGNwX3RycywgIlJFTEVBU0lOR10i
KTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIERIQ1BTVF9JRExFOg0KICAgICAg
ICAgICAgaWYgKGRoY3BFcnJvcikgew0KICAgICAgICAgICAgICAgIGZwcmludGYoX190Y3BfdHJz
LCAiRVJST1IgJXVdIiwgZGhjcEVycm9yKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg
ICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJJRExFXSIpOw0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgYnJlYWs7DQogICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICBmcHJpbnRmKF9f
dGNwX3RycywgIlVOS05PV04gJXVdIiwgZGhjcFN0YXRlKTsNCiAgICAgICAgICAgIGJyZWFrOw0K
ICAgICAgICB9DQogICAgfQ0KfQ0KI2VuZGlmDQoNCi8qISBcZm4gTnV0RGhjcENsaWVudCh2b2lk
ICphcmcpDQogKiBcYnJpZWYgREhDUCBjbGllbnQgdGhyZWFkLg0KICoNCiAqIFRoaXMgdGhyZWFk
IGltcGxlbWVudHMgYSBESENQIHN0YXRlIG1hY2hpbmUgYW5kIGlzIGF1dG9tYXRpY2FsbHkgc3Rh
cnRlZA0KICogd2hlbiBjYWxsaW5nIE51dERoY3BJZkNvbmZpZygpIG9yIE51dERoY3BJbmZvcm0o
KS4NCiAqDQogKiBcYnVnIFdlIGFyZSBub3QgYWJsZSB0byBzaHV0ZG93biBvdXIgaW50ZXJmYWNl
LCB3aGljaCBtYXkgY2F1c2UgcHJvYmxlbXMNCiAqICAgICAgaWYgb3V0IG9yaWdpbmFsIERIQ1Ag
c2VydmVyIGRpZXMuDQogKg0KICogXHRvZG8gV2UgYXJlIHVzaW5nIGEgYnVuY2ggb2YgZ2xvYmFs
IHZhcmlhYmxlcywgd2hpY2ggbXVzdCBiZSBhc3NvY2lhdGVkDQogKiAgICAgICB0byBhIHNwZWNp
ZmljIGludGVyZmFzZSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZQ0KICogICAg
ICAgRXRoZXJuZXQgcG9ydC4NCiAqLw0KVEhSRUFEKE51dERoY3BDbGllbnQsIGFyZykNCnsNCiAg
ICBEWU5DRkcgKnJlcGx5ID0gMDsNCiAgICBVRFBTT0NLRVQgKnNvY2sgPSAwOw0KICAgIEJPT1RQ
ICpicCA9IDA7DQogICAgaW50IG47DQogICAgdWludDMyX3QgeGlkOw0KICAgIElGTkVUICpuaWY7
DQogICAgdWludDE2X3Qgc2VjcyA9IDA7DQogICAgdWludDMyX3QgYXFzVGltZSA9IE51dEdldFNl
Y29uZHMoKTsNCiAgICB1aW50MzJfdCBsZWFzZVRpbWUgPSAwOw0KICAgIHVpbnQzMl90IG5hcFRp
bWU7DQogICAgdXJlZ190IHJldHJpZXM7DQogICAgdWludDMyX3QgdG1vID0gTUlOX0RIQ1BfV0FJ
VDsNCiAgICB1aW50MzJfdCBsYXN0X2lwID0gY29uZm5ldC5jZG5faXBfYWRkcjsNCiAgICB1aW50
MzJfdCBzZXJ2ZXJfaXA7DQoNCiAgICAvKg0KICAgICAqIEhhY2sgYWxlcnQ6IE91ciBBUk0gcG9y
dCBkb2Vzbid0IGFsbG93IHBhcmFtZXRlcg0KICAgICAqIHBhc3NpbmcgdG8gdGhyZWFkcy4NCiAg
ICAgKi8NCiNpZmRlZiBfX2FybV9fDQogICAgbmlmID0gZGhjcERldi0+ZGV2X2ljYjsNCiNlbHNl
DQogICAgbmlmID0gKChOVVRERVZJQ0UgKikgYXJnKS0+ZGV2X2ljYjsNCiNlbmRpZg0KDQogICAg
LyoNCiAgICAgKiBHZW5lcmF0ZSBhIHJhbmRvbSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIGJhc2Vk
IG9uIG91ciBNQUMNCiAgICAgKiBhZGRyZXNzIHdpdGggdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5
dGUgb2YgdGhlIE1BQyBhZGRyZXNzDQogICAgICogYmVjb21pbmcgdGhlIG1vc3Qgc2lnbmlmaWNh
bnQgYnl0ZSBvZiB0aGUgaWRlbnRpZmllci4gVGhpcw0KICAgICAqIHNob3VsZCBnaXZlIGEgc3Vm
ZmljaWVudCB1bmlxdWUgdmFsdWUgd2hlbiBzZXZlcmFsIEV0aGVybnV0cw0KICAgICAqIGFyZSBz
dGFydGVkIGNvbmN1cnJlbnRseS4NCiAgICAgKi8NCiAgICB4aWQgPSAwOw0KICAgIGZvciAocmV0
cmllcyA9IDA7IHJldHJpZXMgPCBzaXplb2YoeGlkKTsgcmV0cmllcysrKSB7DQogICAgICAgIHhp
ZCA8PD0gODsNCiAgICAgICAgeGlkICs9IG5pZi0+aWZfbWFjWzUgLSByZXRyaWVzXTsNCiAgICB9
DQogICAgcmV0cmllcyA9IDA7DQoNCiAgICBmb3IgKDs7KSB7DQoNCiNpZmRlZiBOVVRERUJVRw0K
ICAgICAgICBEaGNwU3RhdGVEZWJ1ZyggMCwgZGhjcFN0YXRlLCBsYXN0X2lwLCBsZWFzZVRpbWUs
IHJldHJpZXMpOw0KI2VuZGlmDQoNCiAgICAgICAgLyoNCiAgICAgICAgICogU2V0dXAgc29tZSB2
YWx1ZXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiByZXRyeSBhdHRlbXB0cy4NCiAgICAgICAgICov
DQogICAgICAgIHNlcnZlcl9pcCA9IElOQUREUl9CUk9BRENBU1Q7ICAgLyogQnJvYWRjYXN0aW5n
IGlzIGRlZmF1bHQuICovDQogICAgICAgIGlmIChyZXRyaWVzKSB7DQogICAgICAgICAgICAvKiBE
b3VibGUgb3VyIHRpbWVvdXQgb24gZWFjaCByZXRyeS4gKi8NCiAgICAgICAgICAgIHRtbyArPSB0
bW87DQogICAgICAgICAgICBpZiAodG1vID4gTUFYX0RIQ1BfV0FJVCkgew0KICAgICAgICAgICAg
ICAgIHRtbyA9IE1BWF9ESENQX1dBSVQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAvKiBTdGFydCB3aXRoIG1pbmltdW0gdGltZW91dCBmaXJzdC4gKi8NCiAg
ICAgICAgICAgIHRtbyA9IE1JTl9ESENQX1dBSVQ7DQogICAgICAgICAgICAvKiBVc2UgYSBuZXcg
eGlkIGZvciB0aGUgZmlyc3QgbWVzc2FnZSBpbiBlYWNoIHN0YXRlIGV4Y2VwdA0KICAgICAgICAg
ICAgICogd2hlbiByZXF1ZXN0aW5nLCB3aGVyZSB3ZSBzaG91bGQgY29udGludWUgdXNpbmcgdGhl
IHhpZA0KICAgICAgICAgICAgICogZnJvbSB0aGUgb2ZmZXIgbWVzc2FnZSB3ZSByZWNlaXZlZC4N
CiAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgaWYgKGRoY3BTdGF0ZSAhPSBESENQU1RfUkVR
VUVTVElORykgew0KICAgICAgICAgICAgICAgIHhpZCsrOw0KICAgICAgICAgICAgfQ0KDQogICAg
ICAgICAgICAvKiBJZiB3ZSBrbm93IHRoZSBzZXJ2ZXIncyBJUCwgdHJ5IHRvIHVuaWNhc3Qgb24g
dGhlIGZpcnN0DQogICAgICAgICAgICAgICBhdHRlbXB0LiAqLw0KICAgICAgICAgICAgaWYgKGRo
Y3BDb25maWcgJiYgZGhjcENvbmZpZy0+ZHluX3NpZCkgew0KICAgICAgICAgICAgICAgIHNlcnZl
cl9pcCA9IGRoY3BDb25maWctPmR5bl9zaWQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0K
ICAgICAgICAvKg0KICAgICAgICAgKiBLZWVwIHRyYWNrIG9mIHRoZSBBUEkgdGltZW91dC4NCiAg
ICAgICAgICovDQogICAgICAgIGlmIChkaGNwU3RhdGUgIT0gREhDUFNUX0lETEUgJiYgZGhjcEFw
aVRpbWVvdXQgIT0gTlVUX1dBSVRfSU5GSU5JVEUpIHsNCiAgICAgICAgICAgIHVpbnQzMl90IHR0
ID0gTnV0R2V0TWlsbGlzKCkgLSBkaGNwQXBpU3RhcnQ7DQoNCiAgICAgICAgICAgIGlmIChkaGNw
QXBpVGltZW91dCA8PSB0dCkgew0KICAgICAgICAgICAgICAgIGRoY3BFcnJvciA9IERIQ1BFUlJf
VElNRU9VVDsNCiAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfSURMRTsNCiAgICAg
ICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgodHQg
PSBkaGNwQXBpVGltZW91dCAtIHR0KSA8IHRtbykgew0KICAgICAgICAgICAgICAgIHRtbyA9IHR0
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAgICogS2Vl
cCB0cmFjayBvZiBhY3F1aXNpdGlvbiB0aW1lLg0KICAgICAgICAgKi8NCiAgICAgICAgaWYgKChk
aGNwU3RhdGUgPT0gREhDUFNUX1NFTEVDVElORykgfHwgKGRoY3BTdGF0ZSA9PSBESENQU1RfUkVO
RVdJTkcpIHx8IChkaGNwU3RhdGUgPT0gREhDUFNUX1JFQklORElORykpIHsNCiAgICAgICAgICAg
IC8qIEZvciByZXRyaWVzIG1ha2Ugc3VyZSB0aGF0IHNlY3MgZG9lc24ndCBvdmVyZmxvdy4gKi8N
CiAgICAgICAgICAgIGlmIChyZXRyaWVzKSB7DQogICAgICAgICAgICAgICAgaWYgKE51dEdldFNl
Y29uZHMoKSAtIGFxc1RpbWUgPiAweGZmZmZVTCkgew0KICAgICAgICAgICAgICAgICAgICBzZWNz
ID0gMHhmZmZmOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg
IHNlY3MgPSAodWludDE2X3QpIChOdXRHZXRTZWNvbmRzKCkgLSBhcXNUaW1lKTsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBGb3IgZmlyc3QgdHJhbnNt
aXNzaW9ucyBtYWtlIHN1cmUgdGhhdCBzZWNzIGlzIHplcm8uICovDQogICAgICAgICAgICBlbHNl
IHsNCiAgICAgICAgICAgICAgICBhcXNUaW1lID0gTnV0R2V0U2Vjb25kcygpOw0KICAgICAgICAg
ICAgICAgIHNlY3MgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyoN
CiAgICAgICAgICogUmVsZWFzZSBVRFAgc29ja2V0IGFuZCBidWZmZXIgaW4gc3RhdGVzIHdpdGgg
bG9uZyBpbmFjdGl2ZSB0aW1lLg0KICAgICAgICAgKi8NCiAgICAgICAgaWYgKChkaGNwU3RhdGUg
PT0gREhDUFNUX0JPVU5EKSB8fCAoZGhjcFN0YXRlID09IERIQ1BTVF9JRExFKSkgew0KICAgICAg
ICAgICAgaWYgKHNvY2spIHsNCiAgICAgICAgICAgICAgICBOdXRVZHBEZXN0cm95U29ja2V0KHNv
Y2spOw0KICAgICAgICAgICAgICAgIHNvY2sgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgaWYgKGJwKSB7DQogICAgICAgICAgICAgICAgZnJlZShicCk7DQogICAgICAgICAgICAgICAg
YnAgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAg
ICogSW4gYWxsIG90aGVyIHN0YXRlcyB3ZSBuZWVkIHRoZSBzb2NrZXQgYW5kIHRoZSBidWZmZXIu
DQogICAgICAgICAqLw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIC8qDQogICAgICAgICAg
ICAgKiBDaGVjayBpZiBzb21ldGhpbmcgZWxzZSBjb25maWd1cmVkIG91ciBpbnRlcmZhY2UuDQog
ICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIGlmIChkaGNwQ29uZmlnID09IDAgJiYgbmlmLT5p
Zl9sb2NhbF9pcCkgew0KICAgICAgICAgICAgICAgIC8qIElmIHdlIG5lZWQgYWRkaXRpb25hbCBj
b25maWd1cmF0aW9uLCB3ZSBjYW4gc2VudA0KICAgICAgICAgICAgICAgICAgIGEgREhDUCBJbmZv
cm0gbWVzc2FnZSBoZXJlLiAqLw0KICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9J
RExFOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAg
ICAgICBpZiAoKHNvY2sgPT0gMCkgfHwgKGJwID09IDApKSB7DQogICAgICAgICAgICAgICAgaWYg
KHNvY2sgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICBzb2NrID0gTnV0VWRwQ3JlYXRlU29j
a2V0KERIQ1BfQ0xJRU5UUE9SVCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
IGlmIChicCA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIGJwID0gbWFsbG9jKHNpemVvZihC
T09UUCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoKHNvY2sgPT0g
MCkgfHwgKGJwID09IDApKSB7DQogICAgICAgICAgICAgICAgICAgIC8qIExvb2tzIGxpa2Ugd2Ug
YXJlIG91dCBvZiBtZW1vcnkuICovDQogICAgICAgICAgICAgICAgICAgIGRoY3BFcnJvciA9IERI
Q1BFUlJfU1lTVEVNOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfSURM
RTsNCiAgICAgICAgICAgICAgICAgICAgLyogQXQgdGhpcyBwb2ludCBlaXRoZXIgc29ja2V0IG9y
IGJ1ZmZlciBtYXkgYmUgYWxsb2NhdGVkLg0KICAgICAgICAgICAgICAgICAgICAgICBUaHVzIHdl
IG5lZWQgdG8ganVtcCBiYWNrIHRvIHRoZSB0b3Agb2Ygb3VyIHN0YXRlIGxvb3ANCiAgICAgICAg
ICAgICAgICAgICAgICAgdG8gcmVsZWFzZSBpdC4gKi8NCiAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7DQogICAgICAgICAgICAgICAgfQ0KI2lmIE1BWF9ESENQX0JVRlNJWkUNCiAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1heF9tcyA9IE1BWF9ESENQ
X0JVRlNJWkU7DQogICAgICAgICAgICAgICAgICAgIE51dFVkcFNldFNvY2tPcHQoc29jaywgU09f
UkNWQlVGLCAmbWF4X21zLCBzaXplb2YobWF4X21zKSk7DQogICAgICAgICAgICAgICAgfQ0KI2Vu
ZGlmDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvKg0KICAgICAgICAgKiAo
UmUpU3RhcnQuDQogICAgICAgICAqLw0KICAgICAgICBpZiAoZGhjcFN0YXRlID09IERIQ1BTVF9J
TklUKSB7DQogICAgICAgICAgICAvKiBDbGVhciB0aGUgcmV0cnkgY291bnRlci4gKi8NCiAgICAg
ICAgICAgIHJldHJpZXMgPSAwOw0KICAgICAgICAgICAgLyogVXNlIGEgbmV3IFhJRCBvbiBlYWNo
IGF0dGVtcHQuICovDQogICAgICAgICAgICB4aWQrKzsNCiAgICAgICAgICAgIC8qIERldGVybWlu
ZSB3aGV0aGVyIHRoaXMgaXMgYW4gaW5pdGlhbCBib290IG9yIGEgcmVib290LiAqLw0KICAgICAg
ICAgICAgaWYgKChsYXN0X2lwICYgY29uZm5ldC5jZG5faXBfbWFzaykgPT0gMCkgew0KICAgICAg
ICAgICAgICAgIC8qIE5vIHByZXZpb3VzIElQLCBzdGFydCBmcm9tIGdyb3VuZCB1cC4gKi8NCiAg
ICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfU0VMRUNUSU5HOw0KICAgICAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAvKiBXZSBnb3QgYSBwcmV2aW91c2x5IGFsbG9jYXRl
ZCBJUCBjb25maWd1cmF0aW9uIGZyb20NCiAgICAgICAgICAgICAgICAgKiBub24tdm9sYXRpbGUg
Y29uZmlndXJhdGlvbiBtZW1vcnkuIFRyeSB0byByZS11c2UgaXQuICovDQogICAgICAgICAgICAg
ICAgZGhjcFN0YXRlID0gREhDUFNUX1JFQk9PVElORzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KDQoNCiAgICAgICAgLyoNCiAgICAgICAgICogQnJvYWRjYXN0IGRpc2NvdmVyIGFuZCBjb2xs
ZWN0IGluY29taW5nIG9mZmVycy4NCiAgICAgICAgICovDQogICAgICAgIGVsc2UgaWYgKGRoY3BT
dGF0ZSA9PSBESENQU1RfU0VMRUNUSU5HKSB7DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgICAg
IGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiW1NFTDog
VElDSyAlcF0iLCBkaGNwQ29uZmlnKTsNCiNlbmRpZg0KDQogICAgICAgICAgICBpZiAocmV0cmll
cysrID4gTUFYX0RDSFBfUkVUUklFUykgew0KICAgICAgICAgICAgICAgIGlmKCBkaGNwQ29uZmln
KSB7DQogICAgICAgICAgICAgICAgICAgIC8qIFVscmljaCBzYXlzOiB3ZSBnb3QgYXQgbGVhc3Qg
b25lIHZhbGlkIG9mZmVyIGZyb20gYSBESENQIHNlcnZlciAqLw0KICAgICAgICAgICAgICAgICAg
ICByZXBseSA9IDA7DQogICAgICAgICAgICAgICAgICAgIGxlYXNlVGltZSA9IGFxc1RpbWU7DQog
ICAgICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9CT1VORDsNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIC8qIFRv
byBtYW55IHJldHJpZXMgd2hpbGUgZGlzY292ZXJpbmcgREhDUC4gR2l2ZSB1cC4gKi8NCiAgICAg
ICAgICAgICAgICAgICAgZGhjcEVycm9yID0gREhDUEVSUl9USU1FT1VUOw0KICAgICAgICAgICAg
ICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfSURMRTsNCiAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICAvKiBTZW5kIHRoZSBkaXNjb3ZlcmluZyBicm9hZGNhc3Qu
ICovDQogICAgICAgICAgICBlbHNlIGlmIChEaGNwQnJvYWRjYXN0RGlzY292ZXIoc29jaywgYnAs
IHhpZCwgbGFzdF9pcCwgc2VjcykgPCAwKSB7DQogICAgICAgICAgICAgICAgLyogRmF0YWwgdHJh
bnNtaXQgZXJyb3Igb24gYnJvYWRjYXN0LiAqLw0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAg
ICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdfREhDUCkgZnByaW50ZihfX3RjcF90cnMsICJb
U0VMLVRYRVJSXSIpOw0KI2VuZGlmDQogICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNU
X0lETEU7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8qIENvbGxlY3Qg
aW5jb21pbmcgb2ZmZXJzLiAqLw0KICAgICAgICAgICAgICAgIHdoaWxlICgobiA9IERoY3BSZWN2
TWVzc2FnZShzb2NrLCB4aWQsIGJwLCB0bW8pKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAg
LyogQ2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIG9mZmVyLiAqLw0KICAgICAgICAgICAgICAgICAg
ICBpZiAoKGRoY3BDb25maWcgPSBDaGVja09mZmVyKGRoY3BDb25maWcsIGJwLCBuKSkgIT0gMCkg
ew0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoX190Y3BfdHJm
ICYgTkVUX0RCR19ESENQKSBmcHJpbnRmKF9fdGNwX3RycywgIltTRUwtT0ZGRVIgbj0lZF0iLCBu
KTsNCiNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgdGhlIGNhbGxlcnMgdGlt
ZW91dCBpcyBsb3csIGRvIG5vdCBjb2xsZWN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICBt
b3JlIHRoYW4gb25lLiBUaGFua3MgdG8gSmVsbGUgS29rLiAqLw0KICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGRoY3BBcGlUaW1lb3V0IDwgTUlOX0RIQ1BfV0FJVCAqIDMpIHsNCiNpZmRlZiBO
VVRERUJVRw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRf
REJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiW05PVExdIik7DQojZW5kaWYNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIFN3aXRjaCB0byBsb3dlc3QgdGltZW91dCBhZnRlciB3
ZSByZWNlaXZlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmaXJzdCByZXNwb25zZS4g
Ki8NCiAgICAgICAgICAgICAgICAgICAgICAgIHRtbyA9IE1JTl9ESENQX1dBSVQ7DQogICAgICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLyogQ2hh
bmdlIHRvIEVSUk9SIHN0YXRlIG9uIGZhdGFsIHJlY2VpdmUgZXJyb3JzLiAqLw0KICAgICAgICAg
ICAgICAgIGlmIChuIDwgMCkgew0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAgICAgICAgICAg
IGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiW1NFTC1G
QVRFUlJdIik7DQojZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNU
X0lETEU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8qIENoYW5nZSB0byBS
RVFVRVNUSU5HIHN0YXRlIGlmIHdlIGdvdCBhIHZhbGlkIG9mZmVyLg0KICAgICAgICAgICAgICAg
ICAgIE90aGVyd2lzZSB3ZSBzdGF5IGluIFNFTEVDVElORyBzdGF0ZS4gKi8NCiAgICAgICAgICAg
ICAgICBlbHNlIGlmIChkaGNwQ29uZmlnKSB7DQogICAgICAgICAgICAgICAgICAgIC8qIFdhaXQg
Zm9yIGF0IGxlYXN0IG9uZSBwZXJpb2QgZm9yIG90aGVyIERIQ1Agc2VydmVycyB0byBvZmZlciAq
Lw0KICAgICAgICAgICAgICAgICAgICByZXRyaWVzID0gTUFYX0RDSFBfUkVUUklFUysxOw0KLy8g
ICAgICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9SRVFVRVNUSU5HOw0KI2lmZGVm
IE5VVERFQlVHDQogICAgICAgICAgICAgICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RI
Q1ApIGZwcmludGYoX190Y3BfdHJzLCAiW1NFTC1XQUlUXSIpOw0KI2VuZGlmDQogICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCgkJDQoNCiAgICAgICAgLyoNCiAg
ICAgICAgICogU2VuZCByZXF1ZXN0IGFuZCB3YWl0IGZvciBhbiBhY2tub3dsZWRnZS4NCiAgICAg
ICAgICovDQogICAgICAgIGVsc2UgaWYgKGRoY3BTdGF0ZSA9PSBESENQU1RfUkVRVUVTVElORykg
ew0KICAgICAgICAgICAgaWYgKHJldHJpZXMrKyA+IE1BWF9EQ0hQX1JFVFJJRVMpIHsNCiAgICAg
ICAgICAgICAgICAvKiBUb28gbWFueSByZXRyaWVzIHdpdGggdGhpcyBzZXJ2ZXIsIGZhbGwgYmFj
ayB0byBkaXNjb3ZlcnkuICovDQogICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNUX0lO
SVQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBSZXF1ZXN0IGFuIG9mZmVyZWQgY29u
ZmlndXJhdGlvbi4gQWNjb3JkaW5nIHRvIFJGQyAyMTMxIHRoaXMNCiAgICAgICAgICAgICAgIGhh
cyB0byBiZSBicm9hZGNhc3RlZC4gKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKERoY3BCcm9hZGNh
c3RSZXF1ZXN0KHNvY2ssIGJwLCB4aWQsIDAsIGRoY3BDb25maWctPmR5bl95aWFkZHIsIGRoY3BD
b25maWctPmR5bl9zaWQsIHNlY3MpIDwgMCkgew0KICAgICAgICAgICAgICAgIC8qIEZhdGFsIHRy
YW5zbWl0IGVycm9yIG9uIGJyb2FkY2FzdC4gR2l2ZSB1cC4gKi8NCiAgICAgICAgICAgICAgICBk
aGNwU3RhdGUgPSBESENQU1RfSURMRTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG4gPSBEaGNw
UmVjdk1lc3NhZ2Uoc29jaywgeGlkLCBicCwgdG1vKSkgPCAwKSB7DQogICAgICAgICAgICAgICAg
LyogRmF0YWwgcmVjZWl2ZSBlcnJvci4gKi8NCiAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBE
SENQU1RfSURMRTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobiA+IDAgJiYgKHJlcGx5ID0gUGFy
c2VSZXBseShicCwgbikpICE9IDApIHsNCiAgICAgICAgICAgICAgICAvKiBUaGUgc2VydmVyIGFj
Y2VwdGVkIG91ciByZXF1ZXN0LiBXZSBhcmUgYm91bmQuICovDQogICAgICAgICAgICAgICAgaWYg
KHJlcGx5LT5keW5fbXNndHlwID09IERIQ1BfQUNLKSB7DQogICAgICAgICAgICAgICAgICAgIFJl
bGVhc2VEeW5DZmcoZGhjcENvbmZpZyk7DQogICAgICAgICAgICAgICAgICAgIGRoY3BDb25maWcg
PSByZXBseTsNCiAgICAgICAgICAgICAgICAgICAgcmVwbHkgPSAwOw0KICAgICAgICAgICAgICAg
ICAgICBsZWFzZVRpbWUgPSBhcXNUaW1lOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUg
PSBESENQU1RfQk9VTkQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8qIFRo
ZSBzZXJ2ZXIgZGVjbGluZXMgYSBwcmV2aW91c2x5IG9mZmVyZWQgY29uZmlndXJhdGlvbi4NCiAg
ICAgICAgICAgICAgICAgICBSZXN0YXJ0IGRpc2NvdmVyeS4gKi8NCiAgICAgICAgICAgICAgICBl
bHNlIGlmIChyZXBseS0+ZHluX21zZ3R5cCA9PSBESENQX05BSykgew0KI2lmZGVmIE5VVERFQlVH
DQogICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJz
LCAiW0RIQ1AtTkFLMV0iKTsNCiNlbmRpZg0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUg
PSBESENQU1RfSU5JVDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCg0KICAgICAgICAvKg0KICAgICAgICAgKiBSZXVzaW5nIGEgcHJldmlvdXNseSBhbGxvY2F0
ZWQgbmV0d29yayBhZGRyZXNzIGFmdGVyIHJlYm9vdC4NCiAgICAgICAgICovDQogICAgICAgIGVs
c2UgaWYgKGRoY3BTdGF0ZSA9PSBESENQU1RfUkVCT09USU5HKSB7DQogICAgICAgICAgICBpZiAo
KytyZXRyaWVzID4gTUFYX0RDSFBfUkVUUklFUykgew0KICAgICAgICAgICAgICAgIC8qIFRvbyBt
YW55IHJldHJpZXMsIGZhbGwgYmFjayB0byBkaXNjb3ZlcnkuICovDQogICAgICAgICAgICAgICAg
bGFzdF9pcCA9IDA7DQogICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNUX0lOSVQ7DQog
ICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBCcm9hZGNhc3QgYSByZXF1ZXN0IGZvciBvdXIg
cHJldmlvdXMgY29uZmlndXJhdGlvbi4gKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKERoY3BCcm9h
ZGNhc3RSZXF1ZXN0KHNvY2ssIGJwLCB4aWQsIDAsIGxhc3RfaXAsIDAsIHNlY3MpIDwgMCkgew0K
ICAgICAgICAgICAgICAgIC8qIEZhdGFsIHRyYW5zbWl0IGVycm9yIG9uIGJyb2FkY2FzdC4gR2l2
ZSB1cC4gKi8NCiNpZmRlZiBOVVRERUJVRw0KICAgICAgICAgICAgICAgICAgICBpZiAoX190Y3Bf
dHJmICYgTkVUX0RCR19ESENQKSBmcHJpbnRmKF9fdGNwX3RycywgIltCQy1GQVRBTF0iKTsNCiNl
bmRpZg0KICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9JRExFOw0KICAgICAgICAg
ICAgfSBlbHNlIGlmICgobiA9IERoY3BSZWN2TWVzc2FnZShzb2NrLCB4aWQsIGJwLCB0bW8pKSA8
IDApIHsNCiAgICAgICAgICAgICAgICAvKiBGYXRhbCByZWNlaXZlIGVycm9yLiAqLw0KI2lmZGVm
IE5VVERFQlVHDQogICAgICAgICAgICAgICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RI
Q1ApIGZwcmludGYoX190Y3BfdHJzLCAiW1JDVi1GQVRBTF0iKTsNCiNlbmRpZg0KICAgICAgICAg
ICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9JRExFOw0KICAgICAgICAgICAgfSBlbHNlIGlmIChu
ID4gMCAmJiAocmVwbHkgPSBQYXJzZVJlcGx5KGJwLCBuKSkgIT0gMCkgew0KICAgICAgICAgICAg
ICAgIGlmIChyZXBseS0+ZHluX21zZ3R5cCA9PSBESENQX0FDSykgew0KICAgICAgICAgICAgICAg
ICAgICBSZWxlYXNlRHluQ2ZnKGRoY3BDb25maWcpOw0KICAgICAgICAgICAgICAgICAgICBkaGNw
Q29uZmlnID0gcmVwbHk7DQogICAgICAgICAgICAgICAgICAgIHJlcGx5ID0gMDsNCiAgICAgICAg
ICAgICAgICAgICAgbGVhc2VUaW1lID0gYXFzVGltZTsNCiAgICAgICAgICAgICAgICAgICAgZGhj
cFN0YXRlID0gREhDUFNUX0JPVU5EOw0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAgICAgICAg
ICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIGZwcmludGYoX190Y3BfdHJzLCAiW09L
XSIpOw0KI2VuZGlmDQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBseS0+ZHluX21zZ3R5
cCA9PSBESENQX05BSykgew0KICAgICAgICAgICAgICAgICAgICAvKiBFaXRoZXIgb3VyIHByZXZp
b3VzIGFkZHJlc3MgaGFkIGJlZW4gYWxsb2NhdGVkIGJ5DQogICAgICAgICAgICAgICAgICAgICAg
IHNvbWVvbmUgZWxzZSBvciB3ZSBjaGFuZ2VkIHRoZSBuZXR3b3JrLiBSZW1vdmUgdGhlDQogICAg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIGFkZHJlc3MgYW5kIHJlc3RhcnQuICovDQojaWZk
ZWYgTlVUREVCVUcNCiAgICAgICAgICAgICAgICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdf
REhDUCkgZnByaW50ZihfX3RjcF90cnMsICJbREhDUC1OQUsyXSIpOw0KI2VuZGlmDQogICAgICAg
ICAgICAgICAgICAgIGxhc3RfaXAgPSAwOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUg
PSBESENQU1RfSU5JVDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCg0KICAgICAgICAvKg0KICAgICAgICAgKiBNYWludGFpbiBsZWFzZSB0aW1lLg0KICAgICAg
ICAgKi8NCiAgICAgICAgZWxzZSBpZiAoZGhjcFN0YXRlID09IERIQ1BTVF9CT1VORCkgew0KICAg
ICAgICAgICAgcmV0cmllcyA9IDA7DQogICAgICAgICAgICBOdXRFdmVudEJyb2FkY2FzdEFzeW5j
KCZkaGNwRG9uZSk7IC8vIEFzeW5jIHdnLiBSYWNlY29uZGl0aW9uDQogICAgICAgICAgICBpZiAo
ZGhjcENvbmZpZy0+ZHluX3JlbmV3YWxUaW1lIDw9IE51dEdldFNlY29uZHMoKSAtIGxlYXNlVGlt
ZSkgew0KICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9SRU5FV0lORzsNCiAgICAg
ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgLyogQ2FsY3VsYXRlIHRoZSByZW1haW5p
bmcgbGVhc2UgdGltZSBhbmQgdGFrZSBhIG5hcC4gKi8NCiAgICAgICAgICAgICAgICBuYXBUaW1l
ID0gZGhjcENvbmZpZy0+ZHluX3JlbmV3YWxUaW1lIC0gKE51dEdldFNlY29uZHMoKSAtIGxlYXNl
VGltZSk7DQogICAgICAgICAgICAgICAgaWYgKG5hcFRpbWUgPiBNQVhfREhDUF9OQVBUSU1FKSB7
DQogICAgICAgICAgICAgICAgICAgIG5hcFRpbWUgPSBNQVhfREhDUF9OQVBUSU1FOw0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBOdXRFdmVudFdhaXQoJmRoY3BXYWtlLCBuYXBU
aW1lICogMTAwMFVMKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQog
ICAgICAgICAqIFdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdlIG9mIG91ciByZW5ld2FsIHJlcXVl
c3QuDQogICAgICAgICAqLw0KICAgICAgICBlbHNlIGlmIChkaGNwU3RhdGUgPT0gREhDUFNUX1JF
TkVXSU5HKSB7DQogICAgICAgICAgICByZXRyaWVzKys7DQogICAgICAgICAgICBpZiAodG1vIC8g
MTAwMCA+IGRoY3BDb25maWctPmR5bl9yZWJpbmRUaW1lIC0gKE51dEdldFNlY29uZHMoKSAtIGxl
YXNlVGltZSkpIHsNCiAgICAgICAgICAgICAgICB0bW8gPSBkaGNwQ29uZmlnLT5keW5fcmViaW5k
VGltZSAtIChOdXRHZXRTZWNvbmRzKCkgLSBsZWFzZVRpbWUpICogMTAwMDsNCiAgICAgICAgICAg
IH0NCiAgICAgICAgICAgIGlmIChkaGNwQ29uZmlnLT5keW5fcmViaW5kVGltZSA8PSBOdXRHZXRT
ZWNvbmRzKCkgLSBsZWFzZVRpbWUpIHsNCiAgICAgICAgICAgICAgICByZXRyaWVzID0gMDsNCiAg
ICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfUkVCSU5ESU5HOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgLyogU2VuZCBhIHJlcXVlc3QgdG8gb3VyIGxlYXNpbmcgc2VydmVyLiBX
ZSBtdXN0IG5vdCBpbmNsdWRlDQogICAgICAgICAgICAgICB0aGUgc2VydmVyIGlkZW50aWZpZXIu
ICovDQogICAgICAgICAgICBlbHNlIGlmIChEaGNwU2VuZFJlcXVlc3Qoc29jaywgZGhjcENvbmZp
Zy0+ZHluX3NpZCwgYnAsIHhpZCwgZGhjcENvbmZpZy0+ZHluX3lpYWRkciwgZGhjcENvbmZpZy0+
ZHluX3lpYWRkciwgMCwgc2VjcykgPA0KICAgICAgICAgICAgICAgICAgICAgMCkgew0KICAgICAg
ICAgICAgICAgIC8qIFVuaWNhc3QgdHJhbnNtaXQgZXJyb3IuICovDQogICAgICAgICAgICAgICAg
cmV0cmllcyA9IDA7DQogICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNUX1JFQklORElO
RzsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG4gPSBEaGNwUmVjdk1lc3NhZ2Uoc29jaywgeGlk
LCBicCwgdG1vKSkgPCAwKSB7DQogICAgICAgICAgICAgICAgLyogRmF0YWwgcmVjZWl2ZSBlcnJv
ci4gKi8NCiAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfSURMRTsNCiAgICAgICAg
ICAgIH0gZWxzZSBpZiAobiA+IDAgJiYgKHJlcGx5ID0gUGFyc2VSZXBseShicCwgbikpICE9IDAp
IHsNCiAgICAgICAgICAgICAgICBpZiAocmVwbHktPmR5bl9tc2d0eXAgPT0gREhDUF9BQ0spIHsN
CiAgICAgICAgICAgICAgICAgICAgLyogR290IGFuIGFja25vd2xlZGdlLCByZXR1cm4gdG8gYm91
bmQgc3RhdGUuICovDQogICAgICAgICAgICAgICAgICAgIFJlbGVhc2VEeW5DZmcoZGhjcENvbmZp
Zyk7DQogICAgICAgICAgICAgICAgICAgIGRoY3BDb25maWcgPSByZXBseTsNCiAgICAgICAgICAg
ICAgICAgICAgcmVwbHkgPSAwOw0KICAgICAgICAgICAgICAgICAgICBsZWFzZVRpbWUgPSBhcXNU
aW1lOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1RfQk9VTkQ7DQogICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBseS0+ZHluX21zZ3R5cCA9PSBESENQX05BSykgew0K
ICAgICAgICAgICAgICAgICAgICAvKiBVbmV4cGVjdGVkIE5BSy4gKi8NCiNpZmRlZiBOVVRERUJV
Rw0KICAgICAgICAgICAgICAgICAgICBpZiAoX190Y3BfdHJmICYgTkVUX0RCR19ESENQKSBmcHJp
bnRmKF9fdGNwX3RycywgIltESENQLVVYTkFLXSIpOw0KI2VuZGlmDQogICAgICAgICAgICAgICAg
ICAgIHJldHJpZXMgPSAwOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1Rf
UkVCSU5ESU5HOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0K
DQogICAgICAgIC8qDQogICAgICAgICAqIFdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdlIG9mIG91
ciByZWJpbmQgcmVxdWVzdC4NCiAgICAgICAgICovDQogICAgICAgIGVsc2UgaWYgKGRoY3BTdGF0
ZSA9PSBESENQU1RfUkVCSU5ESU5HKSB7DQogICAgICAgICAgICByZXRyaWVzKys7DQogICAgICAg
ICAgICBpZiAodG1vID4gZGhjcENvbmZpZy0+ZHluX3JlYmluZFRpbWUgLSAoTnV0R2V0U2Vjb25k
cygpIC0gbGVhc2VUaW1lKSkgew0KICAgICAgICAgICAgICAgIHRtbyA9IGRoY3BDb25maWctPmR5
bl9yZWJpbmRUaW1lIC0gTnV0R2V0U2Vjb25kcygpIC0gbGVhc2VUaW1lOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgaWYgKGRoY3BDb25maWctPmR5bl9yZWJpbmRUaW1lIDw9IE51dEdldFNl
Y29uZHMoKSAtIGxlYXNlVGltZSkgew0KICAgICAgICAgICAgICAgIHJldHJpZXMgPSAwOw0KICAg
ICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9SRUJJTkRJTkc7DQogICAgICAgICAgICB9
DQogICAgICAgICAgICAvKiBCcm9hZGNhc3QgYSByZXF1ZXN0IGZvciBvdXIgcHJldmlvdXMgY29u
ZmlndXJhdGlvbi4gV2UNCiAgICAgICAgICAgICAgIG11c3Qgbm90IGluY2x1ZGUgYSBzZXJ2ZXIg
aWRlbnRpZmllci4gKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKERoY3BCcm9hZGNhc3RSZXF1ZXN0
KHNvY2ssIGJwLCB4aWQsIGRoY3BDb25maWctPmR5bl95aWFkZHIsIGRoY3BDb25maWctPmR5bl95
aWFkZHIsIDAsIHNlY3MpIDwgMCkgew0KICAgICAgICAgICAgICAgIC8qIEZhdGFsIHRyYW5zbWl0
IGVycm9yIG9uIGJyb2FkY2FzdC4gR2l2ZSB1cC4gKi8NCiAgICAgICAgICAgICAgICBkaGNwU3Rh
dGUgPSBESENQU1RfSURMRTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG4gPSBEaGNwUmVjdk1l
c3NhZ2Uoc29jaywgeGlkLCBicCwgdG1vKSkgPCAwKSB7DQogICAgICAgICAgICAgICAgLyogRmF0
YWwgcmVjZWl2ZSBlcnJvci4gKi8NCiAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQU1Rf
SURMRTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAobiA+IDAgJiYgKHJlcGx5ID0gUGFyc2VSZXBs
eShicCwgbikpICE9IDApIHsNCiAgICAgICAgICAgICAgICBpZiAocmVwbHktPmR5bl9tc2d0eXAg
PT0gREhDUF9BQ0spIHsNCiAgICAgICAgICAgICAgICAgICAgLyogR290IGFuIGFja25vd2xlZGdl
LCByZXR1cm4gdG8gYm91bmQgc3RhdGUuICovDQogICAgICAgICAgICAgICAgICAgIFJlbGVhc2VE
eW5DZmcoZGhjcENvbmZpZyk7DQogICAgICAgICAgICAgICAgICAgIGRoY3BDb25maWcgPSByZXBs
eTsNCiAgICAgICAgICAgICAgICAgICAgcmVwbHkgPSAwOw0KICAgICAgICAgICAgICAgICAgICBs
ZWFzZVRpbWUgPSBhcXNUaW1lOw0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBESENQ
U1RfQk9VTkQ7DQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBseS0+ZHluX21zZ3R5cCA9
PSBESENQX05BSykgew0KICAgICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAg
ICAgKiBXZSBoYXZlIGEgcHJvYmxlbSBoZXJlIGlmIHRoZSBsYXN0IERIQ1Agc2VydmVyIGRpZWQu
DQogICAgICAgICAgICAgICAgICAgICAqIElmIGEgYmFja3VwIHNlcnZlciBleGlzdHMsIGl0IG1h
eSBwcm9iZSBvdXIgSVAgYWRkcmVzcw0KICAgICAgICAgICAgICAgICAgICAgKiB1c2luZyBBUlAg
b3IgSUNNUC4gT3VyIGludGVyZmFjZSBpcyB1cCBhbmQgcmVzcG9uZGluZywNCiAgICAgICAgICAg
ICAgICAgICAgICogc28gdGhlIGJhY2t1cCBzZXJ2ZXIgbWF5IHRoaW5rIHRoYXQgdGhlIElQIGFk
ZHJlc3MNCiAgICAgICAgICAgICAgICAgICAgICogaXMgaW4gdXNlIGFuZCByZXNwb25kIHdpdGgg
TkFLLiBXaXRob3V0IHNodXR0aW5nDQogICAgICAgICAgICAgICAgICAgICAqIGRvd24gb3VyIGlu
dGVyZmFjZSAobm90IHlldCBpbXBsZW1lbnRlZCkgd2UgYXJlIHN0dWNrLg0KICAgICAgICAgICAg
ICAgICAgICAgKiBXZSBzd2l0Y2ggdG8gZGlzY292ZXJ5IHN0YXRlLCBidXQgdGhlIHByb2JsZW0g
cmVtYWlucy4NCiAgICAgICAgICAgICAgICAgICAgICovDQojaWZkZWYgTlVUREVCVUcNCiAgICAg
ICAgICAgICAgICAgICAgaWYgKF9fdGNwX3RyZiAmIE5FVF9EQkdfREhDUCkgZnByaW50ZihfX3Rj
cF90cnMsICJbREhDUC1OQUszXSIpOw0KI2VuZGlmDQogICAgICAgICAgICAgICAgICAgIGRoY3BT
dGF0ZSA9IERIQ1BTVF9JTklUOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIFNlbmQgYW4gaW5mb3JtIGFuZCB3YWl0
IGZvciBpdHMgKG9wdGlvbmFsKSBlY2hvLg0KICAgICAgICAgKi8NCiAgICAgICAgZWxzZSBpZiAo
ZGhjcFN0YXRlID09IERIQ1BTVF9JTkZPUk1JTkcpIHsNCiAgICAgICAgICAgIGlmIChyZXRyaWVz
KysgPiBNQVhfRENIUF9SRVRSSUVTKSB7DQogICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhD
UFNUX0lETEU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKERoY3BTZW5kSW5mb3JtKHNvY2ssIHNl
cnZlcl9pcCwgYnAsIHhpZCwgbmlmLT5pZl9sb2NhbF9pcCkgPCAwKSB7DQogICAgICAgICAgICAg
ICAgaWYgKHNlcnZlcl9pcCA9PSBJTkFERFJfQlJPQURDQVNUKSB7DQogICAgICAgICAgICAgICAg
ICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9JRExFOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgIH0gZWxzZSBpZiAoKG4gPSBEaGNwUmVjdk1lc3NhZ2Uoc29jaywgeGlkLCBicCwgdG1vKSkg
IT0gMCkgew0KICAgICAgICAgICAgICAgIGlmIChuID4gMCAmJiAgICAvKiBObyByZWNlaXZlIGVy
cm9yLiAqLw0KICAgICAgICAgICAgICAgICAgICAocmVwbHkgPSBQYXJzZVJlcGx5KGJwLCBuKSkg
IT0gMCAmJiAvKiBObyBwYXJzZXIgZXJyb3IuICovDQogICAgICAgICAgICAgICAgICAgIHJlcGx5
LT5keW5fbXNndHlwID09IERIQ1BfQUNLKSB7ICAgIC8qIEFja25vd2xlZGdlZC4gKi8NCiAgICAg
ICAgICAgICAgICAgICAgLyogVGFrZSBvdmVyIHRoaXMgY29uZmlndXJhdGlvbi4gKi8NCiAgICAg
ICAgICAgICAgICAgICAgUmVsZWFzZUR5bkNmZyhkaGNwQ29uZmlnKTsNCiAgICAgICAgICAgICAg
ICAgICAgZGhjcENvbmZpZyA9IHJlcGx5Ow0KICAgICAgICAgICAgICAgICAgICByZXBseSA9IDA7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRoY3BTdGF0ZSA9IERIQ1BTVF9J
RExFOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAgICAgICog
U2VuZCBhIHJlbGVhc2UgYW5kIHdhaXQgZm9yIGl0cyAob3B0aW9uYWwpIGVjaG8uDQogICAgICAg
ICAqLw0KICAgICAgICBlbHNlIGlmIChkaGNwU3RhdGUgPT0gREhDUFNUX1JFTEVBU0lORykgew0K
ICAgICAgICAgICAgaWYgKGRoY3BDb25maWcgPT0gMCB8fCAgICAgIC8qIE5vdCBjb25maWd1cmVk
LiAqLw0KICAgICAgICAgICAgICAgIHJldHJpZXMrKyA+IE1BWF9EQ0hQX1JFTEVBU0VfUkVUUklF
UyB8fCAvKiBUb28gbWFueSByZXRyaWVzLiAqLw0KICAgICAgICAgICAgICAgIERoY3BTZW5kUmVs
ZWFzZShzb2NrLCBzZXJ2ZXJfaXAsIGJwLCB4aWQsIGRoY3BDb25maWctPmR5bl95aWFkZHIsIGRo
Y3BDb25maWctPmR5bl9zaWQpIDwgMCkgew0KICAgICAgICAgICAgICAgIGlmIChzZXJ2ZXJfaXAg
PT0gSU5BRERSX0JST0FEQ0FTVCkgew0KICAgICAgICAgICAgICAgICAgICBkaGNwU3RhdGUgPSBE
SENQU1RfSURMRTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2UgaWYgKChu
ID0gRGhjcFJlY3ZNZXNzYWdlKHNvY2ssIHhpZCwgYnAsIHRtbykpIDwgMCkgew0KICAgICAgICAg
ICAgICAgIC8qIEZhdGFsIHJlY2VpdmUgZXJyb3IuICovDQogICAgICAgICAgICAgICAgZGhjcFN0
YXRlID0gREhDUFNUX0lETEU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKG4gPiAwICYmIChyZXBs
eSA9IFBhcnNlUmVwbHkoYnAsIG4pKSAhPSAwKSB7DQogICAgICAgICAgICAgICAgaWYgKHJlcGx5
LT5keW5fbXNndHlwID09IERIQ1BfQUNLKSB7DQogICAgICAgICAgICAgICAgICAgIGRoY3BTdGF0
ZSA9IERIQ1BTVF9JRExFOw0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVwbHktPmR5bl9t
c2d0eXAgPT0gREhDUF9OQUspIHsNCiNpZmRlZiBOVVRERUJVRw0KICAgICAgICAgICAgICAgICAg
ICBpZiAoX190Y3BfdHJmICYgTkVUX0RCR19ESENQKSBmcHJpbnRmKF9fdGNwX3RycywgIltESENQ
LUZOQUtdIik7DQojZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgZGhjcFN0YXRlID0gREhDUFNU
X0lETEU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAg
ICAgICAgLyoNCiAgICAgICAgICogV2UgYXJlIGRvbmUgc29tZWhvdy4gRWl0aGVyIGEgZmF0YWwg
ZXJyb3Igb2NjdXJlZCBvciB3ZQ0KICAgICAgICAgKiByZWFjaGVkIHRoZSBzcGVjaWZpZWQgdGlt
ZW91dCB0aW1lIG9yIG91ciBsZWFzZSBoYXMgYmVlbg0KICAgICAgICAgKiByZWxlYXNlIG9yIHNv
bWV0aGluZyBlbHNlIGNvbmZpZ3VyZWQgb3VyIGludGVyZmFjZS4NCiAgICAgICAgICogUmVsZWFz
ZSBhbGwgcmVzb3VyY2VzIGFuZCB3YWl0IGZvciBhIG5ldyBBUEkgY2FsbCB0bw0KICAgICAgICAg
KiB3YWtlIHVzIHVwLg0KICAgICAgICAgKi8NCiAgICAgICAgZWxzZSBpZiAoZGhjcFN0YXRlID09
IERIQ1BTVF9JRExFKSB7DQogICAgICAgICAgICBSZWxlYXNlRHluQ2ZnKGRoY3BDb25maWcpOw0K
ICAgICAgICAgICAgZGhjcENvbmZpZyA9IDA7DQogICAgICAgICAgICByZXRyaWVzID0gMDsNCiAg
ICAgICAgICAgIE51dEV2ZW50QnJvYWRjYXN0QXN5bmMoJmRoY3BEb25lKTsgLy8gQXN5bmMgd2cu
IFJhY2Vkb25kaXRpb24NCgkJCS8vIGlmIHdlIGhhdmUgYSBkZXZpY2UNCiAgICAgICAgICAgIGlm
KGRoY3BEZXYhPTApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KCQkJCQkJICAgIAlO
dXRJcFJvdXRlRGVsQWxsKGRoY3BEZXYpOyAvLyBkZWxldGUgYWxsIHJvdXRlcywgYmVjYXVzZSB0
aGV5IGFyZSBuZWVkaW5nIEhlYXAgbWVtb3J5IGFuZCB0aGlzIGhhcyB0byBiZWUgZnJlZWQuDQoJ
CQkJCQkJfQ0KDQoJCQkNCgkJCQ0KICAgICAgICAgICAgTnV0RXZlbnRXYWl0KCZkaGNwV2FrZSwg
TlVUX1dBSVRfSU5GSU5JVEUpOw0KICAgICAgICB9DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICBE
aGNwU3RhdGVEZWJ1ZyggMSwgZGhjcFN0YXRlLCBsYXN0X2lwLCBsZWFzZVRpbWUsIHJldHJpZXMp
Ow0KI2VuZGlmDQogICAgICAgIC8qIFJlbGVhc2UgYW55IHJlY2VpdmVkIHJlcGx5LiAqLw0KICAg
ICAgICBpZiAocmVwbHkpIHsNCiAgICAgICAgICAgIFJlbGVhc2VEeW5DZmcocmVwbHkpOw0KICAg
ICAgICAgICAgcmVwbHkgPSAwOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovKiENCiAqIFxicmll
ZiBBY3RpdmF0ZSB0aGUgREhDUCBjbGllbnQgdGhyZWFkLg0KICoNCiAqIFN0YXJ0IHRoZSBESENQ
IHRocmVhZCBpZiBub3QgcnVubmluZyBvciB3YWtlIGl0IHVwLiBQYXNzIHRoZSBjYWxsZXIncw0K
ICogdGltZW91dCB0byB0aGUgdGhyZWFkIGFuZCB3YWl0IGFuIGluZmluaXRlIHRpbWUuIFdlIHJl
bHkgb24gdGhlIHRocmVhZA0KICogdG8gd2FrZSB1cyB1cCBvbiB0aW1lb3V0Lg0KICoNCiAqIFxw
YXJhbSBuYW1lICAgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyZWQgRXRoZXJuZXQgZGV2aWNlLg0KICog
XHBhcmFtIHN0YXRlICAgU3RhdGUgdG8gc3RhcnQgd2l0aC4NCiAqIFxwYXJhbSB0aW1lb3V0IE1h
eGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LiBUbyBkaXNhYmxlDQogKiAgICAg
ICAgICAgICAgICB0aW1lb3V0LCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gXHJlZiBOVVRfV0FJVF9J
TkZJTklURS4NCiAqICAgICAgICAgICAgICAgIFRoaXMgdmFsdWUgbXVzdCBiZSBsYXJnZXIgdGhh
biAzIHRpbWVzIG9mIFxyZWYgTUlOX0RIQ1BfV0FJVA0KICogICAgICAgICAgICAgICAgdG8gZW5h
YmxlIGNvbGxlY3Rpb24gb2Ygb2ZmZXJzIGZyb20gbXVsdGlwbGUgc2VydmVycy4NCiAqLw0Kc3Rh
dGljIGludCBEaGNwS2ljayhjb25zdCBjaGFyICpuYW1lLCB1aW50OF90IHN0YXRlLCB1aW50MzJf
dCB0aW1lb3V0KQ0Kew0KICAgIE5VVERFVklDRSAqZGV2Ow0KICAgIElGTkVUICpuaWY7DQoNCiAg
ICAvKiBMb29rdXAgdGhlIEV0aGVybmV0IGRldmljZS4gKi8NCiAgICBpZiAoKGRldiA9IE51dERl
dmljZUxvb2t1cChuYW1lKSkgPT0gMCB8fCAgIC8qIE5vIGRldmljZSAqLw0KICAgICAgICBkZXYt
PmRldl90eXBlICE9IElGVFlQX05FVCB8fCAgIC8qIFdyb25nIHR5cGUgKi8NCiAgICAgICAgKG5p
ZiA9IGRldi0+ZGV2X2ljYikgPT0gMCB8fCAgICAvKiBObyBuZXRpZiAqLw0KICAgICAgICBuaWYt
PmlmX3R5cGUgIT0gSUZUX0VUSEVSKSB7ICAgIC8qIFdyb25nIGlmIHR5cGUgKi8NCiAgICAgICAg
ZGhjcEVycm9yID0gREhDUEVSUl9CQURERVY7DQogICAgICAgIHJldHVybiAtMTsNCiAgICB9DQoN
CiAgICAvKiBJbml0aWFsaXplIHRpbWVvdXQgY2hlY2tpbmcuICovDQogICAgZGhjcEFwaVN0YXJ0
ID0gTnV0R2V0TWlsbGlzKCk7DQogICAgZGhjcEFwaVRpbWVvdXQgPSB0aW1lb3V0Ow0KDQogICAg
ZGhjcFN0YXRlID0gc3RhdGU7DQogICAgaWYgKGRoY3BUaHJlYWQgPT0gMCkgew0KI2lmZGVmIF9f
YXJtX18NCiAgICAgICAgZGhjcERldiA9IGRldjsNCiNlbmRpZg0KICAgICAgICBkaGNwVGhyZWFk
ID0gTnV0VGhyZWFkQ3JlYXRlKCJkaGNwYyIsIE51dERoY3BDbGllbnQsIGRldiwNCiAgICAgICAg
ICAgIChOVVRfVEhSRUFEX0RIQ1BTVEFDSyAqIE5VVF9USFJFQURfU1RBQ0tfTVVMVCkgKyBOVVRf
VEhSRUFEX1NUQUNLX0FERCk7DQogICAgfQ0KICAgIE51dEV2ZW50UG9zdEFzeW5jKCZkaGNwV2Fr
ZSk7ICAvLyBFcnJvciByYWNlIGNvbmRpdGlvbg0KICAgIE51dEV2ZW50V2FpdCgmZGhjcERvbmUs
IE5VVF9XQUlUX0lORklOSVRFKTsNCg0KICAgIHJldHVybiAwOw0KfQ0KDQovKiENCiAqIFxicmll
ZiBBdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBhbiBFdGhlcm5ldCBuZXR3b3JrIGludGVyZmFjZS4N
CiAqDQogKiBJZiBubyBNQUMgYWRkcmVzcyBpcyBzcGVjaWZpZWQsIHRoaXMgcm91dGluZSB3aWxs
IHRyeSB0byByZWFkIGENCiAqIHByZXZpb3VzbHkgc3RvcmVkIGNvbmZpZ3VyYXRpb24gZnJvbSB0
aGUgRUVQUk9NLiBJZiB0aGlzIHJldHJpZXZlcw0KICogYSBmaXhlZCBJUCBjb25maWd1cmF0aW9u
LCB0aGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSB3aWxsIGJlDQogKiBpbW1lZGlhdGVseSBjb25m
aWd1cmVkIHdpdGggdGhlc2UgdmFsdWVzIGJ5IGNhbGxpbmcgTnV0TmV0SWZDb25maWcoKS4NCiAq
IElmIG5vIHZhbGlkIElQIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gcmVhZCwgdGhlbiB0aGlzIHJv
dXRpbmUgd2lsbA0KICogc3RhcnQgdGhlIERIQ1AgY2xpZW50IHRocmVhZCBhbmQgd2FpdCB1cHRv
IGEgZ2l2ZW4gbnVtYmVyIG9mDQogKiBtaWxsaXNlY29uZHMgZm9yIGFuIGFja25vd2xlZGdlZCBj
b25maWd1cmF0aW9uIGZyb20gYSBESENQIHNlcnZlci4NCiAqDQogKiBJZiBhIE1BQyBhZGRyZXNz
IGhhcyBiZWVuIHNwZWNpZmllZCwgdGhpcyByb3V0aW5lIHdpbGwgbm90IHJlYWQgdGhlDQogKiBF
RVBST00gY29uZmlndXJhdGlvbi4gSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyBzZXQgdGhlIGdsb2Jh
bA0KICogXHJlZiBDT05GTkVUIHN0cnVjdHVyZSB0byBhIHZhbGlkIElQIGNvbmZpZ3VyYXRpb24g
YmVmb3JlIGNhbGxpbmcNCiAqIHRoaXMgZnVuY3Rpb24sIHRoZW4gdGhlIG5ldHdvcmsgaW50ZXJm
YWNlIHdpbGwgYmUgaW1tZWRpYXRlbHkNCiAqIGNvbmZpZ3VyZWQgd2l0aCB0aGVzZSB2YWx1ZXMg
YnkgY2FsbGluZyBOdXROZXRJZkNvbmZpZygpLiBPdGhlcndpc2UNCiAqIHRoZSBESENQIGNsaWVu
dCB0aHJlYWQgd2lsbCBiZSBzdGFydGVkIGFuZCB0aGlzIHJvdXRpbmUgd2lsbCB3YWl0DQogKiB1
cHRvIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBmb3IgYW4gYWNrbm93bGVkZ2VkIGNv
bmZpZ3VyYXRpb24NCiAqIGZyb20gYSBESENQIHNlcnZlci4NCiAqDQogKiBccGFyYW0gbmFtZSAg
ICBOYW1lIG9mIHRoZSByZWdpc3RlcmVkIEV0aGVybmV0IGRldmljZS4NCiAqIFxwYXJhbSBtYWMg
ICAgIE1BQyBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbi4gU2V0IE5VTEwgdG8gdXNlIHRoZQ0K
ICogICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gdGhlIEVFUFJPTS4NCiAq
IFxwYXJhbSB0aW1lb3V0IE1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LiBU
byBkaXNhYmxlDQogKiAgICAgICAgICAgICAgICB0aW1lb3V0LCBzZXQgdGhpcyBwYXJhbWV0ZXIg
dG8gXHJlZiBOVVRfV0FJVF9JTkZJTklURS4NCiAqICAgICAgICAgICAgICAgIE90aGVyd2lzZSB0
aGUgdmFsdWUgbXVzdCBiZSBsYXJnZXIgdGhhbiAzIHRpbWVzIG9mDQogKiAgICAgICAgICAgICAg
ICBccmVmIE1JTl9ESENQX1dBSVQgdG8gZW5hYmxlIGNvbGxlY3Rpb24gb2Ygb2ZmZXJzDQogKiAg
ICAgICAgICAgICAgICBmcm9tIG11bHRpcGxlIHNlcnZlcnMuDQogKg0KICogXHJldHVybiAwIGlm
IHRoZSBpbnRlcmZhY2UgaGFkIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbmZpZ3VyZWQuIEluIG1vc3QN
CiAqICAgICAgICAgY2FzZXMgdGhpcyBpbmZvcm1hdGlvbiBpcyBzdWZmaWNpZW50LCBiZWNhdXNl
IHRoZSBhcHBsaWNhdGlvbg0KICogICAgICAgICB3aWxsIG5vdCBjYXJlIHdoZXRoZXIgdGhlIGNv
bmZpZ3VyYXRpb24gaGFkIGJlZW4gcHJvdmlkZWQgYnkNCiAqICAgICAgICAgYSBESENQIHNlcnZl
ciBvciBFRVBST00gdmFsdWVzLiBIb3dldmVyLCBpZiBFRVBST00gdmFsdWVzIGhhZA0KICogICAg
ICAgICBiZWVuIHVzZWQsIHRoZW4gbm8gRE5TIHNlcnZlcnMgaGFkIGJlZW4gc2V0LiBUaGUgYXBw
bGljYXRpb24NCiAqICAgICAgICAgY2FuIGNhbGwgTnV0RGhjcFN0YXR1cygpIHRvIGNoZWNrIHRo
ZSBESENQIGJvdW5kIHN0YXRlLiAtMSBpcw0KICogICAgICAgICByZXR1cm5lZCBpZiB0aGUgaW50
ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZmFpbGVkLiBJbiB0aGlzIGNhc2UNCiAqICAgICAgICAgTnV0
RGhjcEVycm9yKCkgY2FuIGJlIGNhbGxlZCB0byBnZXQgYSBtb3JlIHNwZWNpZmljIGVycm9yDQog
KiAgICAgICAgIGNvZGUuDQogKi8NCmludCBOdXREaGNwSWZDb25maWcoY29uc3QgY2hhciAqbmFt
ZSwgdWludDhfdCAqIG1hYywgdWludDMyX3QgdGltZW91dCkNCnsNCiAgICBOVVRERVZJQ0UgKmRl
djsNCiAgICBJRk5FVCAqbmlmID0gTlVMTDsNCg0KICAgIC8qDQogICAgICogVmVyaWZ5IHRoZSBn
aXZlbiBFdGhlcm5ldCBkZXZpY2UuDQogICAgICovDQogICAgZGV2ID0gTnV0RGV2aWNlTG9va3Vw
KG5hbWUpOw0KICAgIGlmIChkZXYgJiYgZGV2LT5kZXZfdHlwZSA9PSBJRlRZUF9ORVQpIHsNCiAg
ICAgICAgbmlmID0gKElGTkVUICopIGRldi0+ZGV2X2ljYjsNCiAgICB9DQogICAgaWYgKG5pZiA9
PSBOVUxMIHx8IG5pZi0+aWZfdHlwZSAhPSBJRlRfRVRIRVIpIHsNCiAgICAgICAgLyogTm90IGEg
bmV0d29yayBkZXZpY2Ugb3Igd3JvbmcgaW50ZXJmYWNlIHR5cGUuICovDQogICAgICAgIGRoY3BF
cnJvciA9IERIQ1BFUlJfQkFEREVWOw0KICAgICAgICByZXR1cm4gLTE7DQogICAgfQ0KDQogICAg
LyoNCiAgICAgKiBEZXRlcm1pbmUgdGhlIE1BQyBhZGRyZXNzLg0KICAgICAqLw0KICAgIGlmICht
YWMgJiYgIUVUSEVSX0lTX0JST0FEQ0FTVChtYWMpKSB7DQogICAgICAgICAvKiBJZiB0aGUgY2Fs
bGVyIHNwZWNpZmllZCBhIHZhbGlkIE1BQyBhZGRyZXNzLCB3ZSB1c2UgaXQNCiAgICAgICAgICAg
IHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KICAgICAgICBtZW1jcHkoY29uZm5l
dC5jZG5fbWFjLCBtYWMsIHNpemVvZihjb25mbmV0LmNkbl9tYWMpKTsNCiAgICB9DQogICAgZWxz
ZSBpZiAoRVRIRVJfSVNfWkVSTyhuaWYtPmlmX21hYykpIHsNCiAgICAgICAgLyogVGhlIGludGVy
ZmFjZSBoYXMgbm90IGRlZmluZWQgYSBNQUMuIFRyeSB0byBnZXQgb25lIGZyb20NCiAgICAgICAg
ICAgbm9uLXZvbGF0aWxlIG1lbW9yeS4gKi8NCiAgICAgICAgTnV0TmV0TG9hZENvbmZpZyhuYW1l
KTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIENoZWNrIGlmIHdlIGhhdmUgYSB2YWxpZCBNQUMg
YWRkcmVzcy4gSW4gb3JkZXIgdG8gbWFpbnRhaW4NCiAgICAgKiBiYWNrd2FyZCBjb21wYXRpYmls
aXR5LCB3ZSBhY2NlcHQgYW55dGhpbmcgd2hpY2ggaXMgbmVpdGhlcg0KICAgICAqIHplcm8gbm9y
IHRoZSBicm9hZGNhc3QgYWRkcmVzcy4gTGF0ZXIgdmVyc2lvbnMgbWF5IGJlY29tZSBtb3JlDQog
ICAgICogcmVzdHJpY3RpdmUgYW5kIGRlbWFuZCBhIHZhbGlkIHVuaWNhc3QgYWRkcmVzcy4NCiAg
ICAgKi8NCiAgICBpZiAoRVRIRVJfSVNfWkVSTyhjb25mbmV0LmNkbl9tYWMpIHx8IEVUSEVSX0lT
X0JST0FEQ0FTVChjb25mbmV0LmNkbl9tYWMpKSB7DQogICAgICAgIGRoY3BFcnJvciA9IERIQ1BF
UlJfTk9NQUM7DQogICAgICAgIHJldHVybiAtMTsNCiAgICB9DQoNCiAgICAvKg0KICAgICAqIENv
cHkgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlLiBUaGlzIHdpbGwN
CiAgICAgKiBtYWdpY2FsbHkgZW5hYmxlIHRoZSBicmFpbiBkZWFkIGludGVyZmFjZS4NCiAgICAg
Ki8NCiAgICBtZW1jcHkobmlmLT5pZl9tYWMsIGNvbmZuZXQuY2RuX21hYywgNik7DQogICAgTnV0
U2xlZXAoNTAwKTsNCg0KICAgIC8qDQogICAgICogWmVybyBvdXQgdGhlIGlwIGFkZHJlc3MgYW5k
IG1hc2suIFRoaXMgYWxsb3dzIHRvIHN3aXRjaCBiZXR3ZWVuDQogICAgICogREhDUCBhbmQgc3Rh
dGljIElQIGFkZHJlc3NlcyB3aXRob3V0IHJlc2V0dGluZy9wb3dlciBjeWNsaW5nLg0KICAgICAq
IFNlZSBwYXRjaCAjMjkwMzk0MC4NCiAgICAgKi8NCiAgICBuaWYtPmlmX2xvY2FsX2lwID0gMDsN
CiAgICBuaWYtPmlmX21hc2sgPSBjb25mbmV0LmNkbl9pcF9tYXNrOw0KDQogICAgLyoNCiAgICAg
KiBJZiB0aGUgRUVQUk9NIGNvbnRhaW5zIGEgZml4ZWQgbmV0d29yayBjb25maWd1cmF0aW9uLCB3
ZSBza2lwIERIQ1AuDQogICAgICovDQogICAgaWYgKGNvbmZuZXQuY2RuX2NpcF9hZGRyICYgY29u
Zm5ldC5jZG5faXBfbWFzaykgew0KICAgICAgICAvKiBHaXZlIHVwIGEgcHJldmlvdXNseSBhbGxv
Y2F0ZWQgbGVhc2UuIFNlZSBwYXRjaCAjMjkwMzk0MC4gKi8NCiAgICAgICAgKHZvaWQpTnV0RGhj
cFJlbGVhc2UobmFtZSwgKDMqTUlOX0RIQ1BfV0FJVCkpOw0KICAgICAgICBjb25mbmV0LmNkbl9p
cF9hZGRyID0gY29uZm5ldC5jZG5fY2lwX2FkZHI7DQogICAgICAgIHJldHVybiBOdXROZXRJZkNv
bmZpZzIobmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZuZXQuY2RuX21hYywNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbmZuZXQuY2RuX2lwX2FkZHIsDQogICAgICAgICAgICAg
ICAgICAgICAgICBjb25mbmV0LmNkbl9pcF9tYXNrLA0KICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZm5ldC5jZG5fZ2F0ZXdheSk7DQogICAgfQ0KDQogICAgLyoNCiAgICAgKiBTdGFydCB0aGUg
REhDUCB0aHJlYWQgaWYgbm90IHJ1bm5pbmcgb3Igd2FrZSBpdCB1cC4gUGFzcyB0aGUgY2FsbGVy
J3MNCiAgICAgKiB0aW1lb3V0IHRvIHRoZSB0aHJlYWQgYW5kIHdhaXQgYW4gaW5maW5pdGUgdGlt
ZS4gV2UgcmVseSBvbiB0aGUgdGhyZWFkDQogICAgICogdG8gd2FrZSB1cyB1cCBvbiB0aW1lb3V0
Lg0KICAgICAqLw0KICAgIGlmIChEaGNwS2ljayhuYW1lLCBESENQU1RfSU5JVCwgdGltZW91dCkg
PT0gMCkgew0KICAgICAgICAvKg0KICAgICAgICAgKiBUaGUgdGhyZWFkIGZpbmlzaGVkIGl0cyB0
YXNrLiBJZiBpdCByZWFjaGVkIHRoZSBib3VuZCBzdGF0ZSwgdGhlbg0KICAgICAgICAgKiB3ZSBn
b3QgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gREhDUC4NCiAgICAgICAgICovDQogICAgICAg
IGlmIChkaGNwU3RhdGUgPT0gREhDUFNUX0JPVU5EKSB7DQojaWZkZWYgTlVUREVCVUcNCiAgICAg
ICAgICAgIGlmIChfX3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIHsNCiAgICAgICAgICAgICAgICBm
cHJpbnRmKF9fdGNwX3RycywgIltESENQLUNvbmZpZyAlc10iLCBpbmV0X250b2EoZGhjcENvbmZp
Zy0+ZHluX3lpYWRkcikpOw0KICAgICAgICAgICAgfQ0KI2VuZGlmDQogICAgICAgICAgICBOdXRO
ZXRJZlNldHVwKGRldiwgZGhjcENvbmZpZy0+ZHluX3lpYWRkciwgZGhjcENvbmZpZy0+ZHluX25l
dG1hc2ssIGRoY3BDb25maWctPmR5bl9nYXRld2F5KTsNCiAgICAgICAgICAgIE51dERuc0NvbmZp
ZzIoTlVMTCwgTlVMTCwgZGhjcENvbmZpZy0+ZHluX3BkbnMsIGRoY3BDb25maWctPmR5bl9zZG5z
KTsNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAg
ICAgICogT3VyIGludGVyZmFjZSBoYXMgYmVlbiBjb25maWd1cmVkIGV4dGVybmFsbHksIHBvc3Np
Ymx5IGJ5IGF1dG8NCiAgICAgICAgICogQVJQIG9yIGEgc2ltaWxhciBmdW5jdGlvbiBpbXBsZW1l
bnRlZCBieSB0aGUgYXBwbGljYXRpb24uDQogICAgICAgICAqLw0KICAgICAgICBpZiAobmlmLT5p
Zl9sb2NhbF9pcCkgew0KI2lmZGVmIE5VVERFQlVHDQogICAgICAgICAgICBpZiAoX190Y3BfdHJm
ICYgTkVUX0RCR19ESENQKSB7DQogICAgICAgICAgICAgICAgZnByaW50ZihfX3RjcF90cnMsICJb
REhDUC1FeHRlcm5hbCAlc10iLCBpbmV0X250b2EobmlmLT5pZl9sb2NhbF9pcCkpOw0KICAgICAg
ICAgICAgfQ0KI2VuZGlmDQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KDQogICAg
ICAgIC8qDQogICAgICAgICAqIERIQ1AgZmFpbGVkLiBJbiBjYXNlIHdlIHJlbWVtYmVyIGEgcHJl
dmlvdXNseSBhbGxvY2F0ZWQgYWRkcmVzcywNCiAgICAgICAgICogdGhlbiBsZXQncyB1c2UgaXQu
DQogICAgICAgICAqLw0KICAgICAgICBpZiAoKGNvbmZuZXQuY2RuX2lwX2FkZHIgJiBjb25mbmV0
LmNkbl9pcF9tYXNrKSAhPSAwKSB7DQojaWZkZWYgTlVUREVCVUcNCiAgICAgICAgICAgIGlmIChf
X3RjcF90cmYgJiBORVRfREJHX0RIQ1ApIHsNCiAgICAgICAgICAgICAgICBmcHJpbnRmKF9fdGNw
X3RycywgIltESENQLVJldXNpbmcgJXNdIiwgaW5ldF9udG9hKGNvbmZuZXQuY2RuX2lwX2FkZHIp
KTsNCiAgICAgICAgICAgIH0NCiNlbmRpZg0KICAgICAgICAgICAgTnV0TmV0SWZDb25maWcyKG5h
bWUsIGNvbmZuZXQuY2RuX21hYywgY29uZm5ldC5jZG5faXBfYWRkciwgY29uZm5ldC5jZG5faXBf
bWFzaywgY29uZm5ldC5jZG5fZ2F0ZXdheSk7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAg
ICAgfQ0KICAgIH0NCiAgICByZXR1cm4gLTE7DQp9DQoNCi8qIQ0KICogXGJyaWVmIFJlbGluZ3Vp
c2ggb3VyIERIQ1AgbGVhc2UuDQogKg0KICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGJ5
IHRoZSBhcHBsaWNhdGlvbiBpZiB3ZSBhcmUgbW92aW5nDQogKiB0byBhbm90aGVyIG5ldHdvcmsu
IEl0IGhlbHBzIHRoZSBESENQIHNlcnZlciB0byB0aWR5IHVwIGhpcw0KICogYWxsb2NhdGlvbiB0
YWJsZSwgYnV0IGlzIG5vdCBhIHJlcXVpcmVkIERIQ1AgZnVuY3Rpb24uDQogKg0KICogVXBvbiBy
ZXR1cm4sIHRoZSBzeXN0ZW0gc2hvdWxkIGJlIHNodXQgZG93biB3aXRoaW4gMjAgc2Vjb25kcy4N
CiAqDQogKiBUaGUgY2xpZW50IG11c3QgcmVzaWRlIGluIHN0YXRlIFxyZWYgREhDUFNUX0JPVU5E
Lg0KICoNCiAqIFxwYXJhbSBuYW1lICAgIE5hbWUgb2YgdGhlIHJlZ2lzdGVyZWQgRXRoZXJuZXQg
ZGV2aWNlLCBjdXJyZW50bHkgaWdub3JlZC4NCiAqIFxwYXJhbSB0aW1lb3V0IE1heGltdW0gbnVt
YmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0Lg0KICoNCiAqIFxyZXR1cm4gMCBvbiBzdWNjZXNz
IG9yIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuDQogKi8NCmludCBOdXREaGNwUmVsZWFzZShjb25z
dCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KQ0Kew0KICAgIC8qIENoZWNrIHRoZSBzdGF0
ZS4gKi8NCiAgICBpZiAoZGhjcFN0YXRlICE9IERIQ1BTVF9CT1VORCkgew0KICAgICAgICBkaGNw
RXJyb3IgPSBESENQRVJSX1NUQVRFOw0KICAgICAgICByZXR1cm4gLTE7DQogICAgfQ0KDQogICAg
LyogQWN0aW9uISAqLw0KICAgIHJldHVybiBEaGNwS2ljayhuYW1lLCBESENQU1RfUkVMRUFTSU5H
LCB0aW1lb3V0KTsNCn0NCg0KLyohDQogKiBcYnJpZWYgSW5mb3JtIERIQ1AgYWJvdXQgYW4gYWxs
b2NhdGVkIGFkZHJlc3MuDQogKg0KICogVGhlIGNsaWVudCBtdXN0IHJlc2lkZSBpbiBzdGF0ZSBc
cmVmIERIQ1BTVF9JRExFLg0KICoNCiAqIFxwYXJhbSBuYW1lICAgIE5hbWUgb2YgdGhlIHJlZ2lz
dGVyZWQgRXRoZXJuZXQgZGV2aWNlLCBjdXJyZW50bHkgaWdub3JlZC4NCiAqIFxwYXJhbSB0aW1l
b3V0IE1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0Lg0KICoNCiAqIFxyZXR1
cm4gMCBvbiBzdWNjZXNzIG9yIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuDQogKi8NCmludCBOdXRE
aGNwSW5mb3JtKGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpDQp7DQogICAgLyog
Q2hlY2sgdGhlIHN0YXRlLiAqLw0KICAgIGlmIChkaGNwU3RhdGUgIT0gREhDUFNUX0lETEUpIHsN
CiAgICAgICAgZGhjcEVycm9yID0gREhDUEVSUl9TVEFURTsNCiAgICAgICAgcmV0dXJuIC0xOw0K
ICAgIH0NCg0KICAgIC8qIEFjdGlvbiEgKi8NCiAgICByZXR1cm4gRGhjcEtpY2sobmFtZSwgREhD
UFNUX0lORk9STUlORywgdGltZW91dCk7DQp9DQoNCi8qIQ0KICogXGJyaWVmIFJldHVybiBESENQ
IGNsaWVudCBzdGF0dXMuDQogKg0KICogXHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgcmVnaXN0ZXJl
ZCBFdGhlcm5ldCBkZXZpY2UsIGN1cnJlbnRseSBpZ25vcmVkLg0KICoNCiAqIFxyZXR1cm4gREhD
UCBzdGF0dXMgY29kZSwgd2hpY2ggbWF5IGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOg0KICogICAg
ICAgICAtIFxyZWYgREhDUFNUX0lOSVQNCiAqICAgICAgICAgLSBccmVmIERIQ1BTVF9TRUxFQ1RJ
TkcNCiAqICAgICAgICAgLSBccmVmIERIQ1BTVF9SRVFVRVNUSU5HDQogKiAgICAgICAgIC0gXHJl
ZiBESENQU1RfUkVCT09USU5HDQogKiAgICAgICAgIC0gXHJlZiBESENQU1RfQk9VTkQNCiAqICAg
ICAgICAgLSBccmVmIERIQ1BTVF9SRU5FV0lORw0KICogICAgICAgICAtIFxyZWYgREhDUFNUX1JF
QklORElORw0KICogICAgICAgICAtIFxyZWYgREhDUFNUX0lORk9STUlORw0KICogICAgICAgICAt
IFxyZWYgREhDUFNUX1JFTEVBU0lORw0KICogICAgICAgICAtIFxyZWYgREhDUFNUX0lETEUNCiAq
Lw0KaW50IE51dERoY3BTdGF0dXMoY29uc3QgY2hhciAqbmFtZSkNCnsNCiAgICByZXR1cm4gZGhj
cFN0YXRlOw0KfQ0KDQovKiENCiAqIFxicmllZiBSZXR1cm4gREhDUCBlcnJvciBjb2RlLg0KICoN
CiAqIFBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZQ0KICoNCiAqICAgICAgICAgLSBccmVmIERIQ1BF
UlJfVElNRU9VVA0KICogICAgICAgICAtIFxyZWYgREhDUEVSUl9OT01BQw0KICogICAgICAgICAt
IFxyZWYgREhDUEVSUl9CQURERVYNCiAqICAgICAgICAgLSBccmVmIERIQ1BFUlJfU1lTVEVNDQog
KiAgICAgICAgIC0gXHJlZiBESENQRVJSX1RSQU5TTUlUDQogKiAgICAgICAgIC0gXHJlZiBESENQ
RVJSX1JFQ0VJVkUNCiAqDQogKiBUaGUgZXJyb3Igd2lsbCBiZSBjbGVhcmVkIHVwb24gcmV0dXJu
Lg0KICoNCiAqIFxwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHJlZ2lzdGVyZWQgRXRoZXJuZXQgZGV2
aWNlLCBjdXJyZW50bHkgaWdub3JlZC4NCiAqDQogKiBccmV0dXJuIERIQ1AgZXJyb3IgY29kZSBv
ciAwIGlmIG5vIGVycm9yIG9jY3VyZWQuDQogKi8NCmludCBOdXREaGNwRXJyb3IoY29uc3QgY2hh
ciAqbmFtZSkNCnsNCiAgICBpbnQgcmMgPSBkaGNwRXJyb3I7DQogICAgZGhjcEVycm9yID0gMDsN
CiAgICByZXR1cm4gcmM7DQp9DQoNCi8qIQ0KICogXGJyaWVmIENoZWNrIGlmIERIQ1AgaGFzIGNv
bmZpZ3VyZWQgb3VyIGludGVyZmFjZQ0KICoNCiAqIFxkZXByZWNhdGVkIEFwcGxpY2F0aW9ucyBz
aG91bGQgdXNlIE51dERoY3BTdGF0dXMoKS4NCiAqDQogKiBccmV0dXJuIDAgaWYgREhDUCBpcyBp
biBib3VuZCBzdGF0ZS4NCiAqLw0KaW50IE51dERoY3BJc0NvbmZpZ3VyZWQodm9pZCkNCnsNCiAg
ICByZXR1cm4gKGRoY3BTdGF0ZSA9PSBESENQU1RfQk9VTkQpOw0KfQ0KDQovKkB9Ki8NCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmh0dHA6Ly9saXN0cy5l
Z25pdGUuZGUvbWFpbG1hbi9saXN0aW5mby9lbi1udXQtZGlzY3Vzc2lvbgo=