Mail Archives: cygwin/1997/05/31/14:35:42
----=_339057e770280908aad679.MFSBCHJLHS
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
less, and other programs that use regex need the rx.h file from librx
directory in cdksrc.tar.gz, i've appended it here, just copy it to
..../H-i386-cygwin32/i386-cygwin32/include/ , and less builds with the
included (trivial) diff.
No solution (TIKO) for the caps lock problem.
On 30 May 1997 21:32:00 +0200, you wrote:
>Hi Seymore,
>
>> I've noticed that when you put the caps lock on, every key applies the
>> shift, not just letters. I think it was back in 17.1 as well.
>>
>> I finally got around to compiling less last night. All went well, just
>> had to rename the iprintf(). Compiles easily. But you can't search
>> with the / or ? commands. I haven't had a chance to investigate it
>> further, but I figured less is a fairly popular program, maybe another
>> kind person has already found/fixed it. So, has anyone?
>
>Only thing, I can say - I came across the same problem and no solution
>yet.
>
>>
>> Many thank
>
>Bye.
>Michael.
>--
>Ich bin vom 1. Juni bis 3. Juli in Urlaub, Ihr muesst Euch also leider
>bis dahin mit einer Antwort auf Euere Postings und Mails gedulden :))
>--
>I'm on vacation from June, 1st to Juli, 3rd - so please be patient to
>get an answer to your postings and mails until I'll be back - thx :))
>--
>Michael Hirmke | Telefon +49 (911) 557999
>Georg-Strobel-Strasse 81 | FAX +49 (911) 557664
>90489 Nuernberg | E-Mail mh AT mike DOT franken DOT de
> | WWW http://minimike.franken.de/
>-
>For help on using this list (especially unsubscribing), send a message to
>"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
>
----=_339057e770280908aad679.MFSBCHJLHS
Content-Type: application/octet-stream; name=rx.h
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=rx.h
I2lmICFkZWZpbmVkKFJYSCkgfHwgZGVmaW5lZChSWF9XQU5UX1NFX0RFRlMpCiNkZWZpbmUgUlhI
CgovKglDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCgpUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbGlicnggbGlicmFyeS4KCkxpYnJ4IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5k
ZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAyLCBvciAoYXQgeW91ciBvcHRpb24pCmFueSBsYXRlciB2ZXJzaW9uLgoKTGlicnggaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQK
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB
TlRBQklMSVRZIG9yCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwKd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3Mg
QXZlLCBDYW1icmlkZ2UsIE1BCjAyMTM5LCBVU0EuICAqLwovKiAgdC4gbG9yZAlXZWQgU2VwIDIz
IDE4OjIwOjU3IDE5OTIJKi8KCgoMCgoKCgoKI2lmbmRlZiBSWF9XQU5UX1NFX0RFRlMKCi8qIFRo
aXMgcGFnZTogQml0c2V0cyAqLwoKI2lmbmRlZiBSWF9zdWJzZXQKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgUlhfc3Vic2V0OwojZGVmaW5lIFJYX3N1YnNldF9iaXRzCSgzMikKI2RlZmluZSBSWF9zdWJz
ZXRfbWFzawkoUlhfc3Vic2V0X2JpdHMgLSAxKQojZW5kaWYKCnR5cGVkZWYgUlhfc3Vic2V0ICog
cnhfQml0c2V0OwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X2JpdHNldF9pdGVy
YXRvcikgKHZvaWQgKiwgaW50IG1lbWJlcl9pbmRleCk7CiNlbHNlCnR5cGVkZWYgdm9pZCAoKnJ4
X2JpdHNldF9pdGVyYXRvcikgKCk7CiNlbmRpZgoKI2RlZmluZSByeF9iaXRzZXRfc3Vic2V0KE4p
ICAoKE4pIC8gUlhfc3Vic2V0X2JpdHMpCiNkZWZpbmUgcnhfYml0c2V0X3N1YnNldF92YWwoQixO
KSAgKChCKVtyeF9iaXRzZXRfc3Vic2V0KE4pXSkKI2RlZmluZSBSWF9iaXRzZXRfYWNjZXNzKEIs
TixPUCkgXAogICgoQilbcnhfYml0c2V0X3N1YnNldChOKV0gT1Agcnhfc3Vic2V0X3NpbmdsZXRv
bnNbKE4pICYgUlhfc3Vic2V0X21hc2tdKQojZGVmaW5lIFJYX2JpdHNldF9tZW1iZXIoQixOKSAg
IFJYX2JpdHNldF9hY2Nlc3MoQiwgTiwgJikKI2RlZmluZSBSWF9iaXRzZXRfZW5qb2luKEIsTikg
ICBSWF9iaXRzZXRfYWNjZXNzKEIsIE4sIHw9KQojZGVmaW5lIFJYX2JpdHNldF9yZW1vdmUoQixO
KSAgIFJYX2JpdHNldF9hY2Nlc3MoQiwgTiwgJj0gfikKI2RlZmluZSBSWF9iaXRzZXRfdG9nZ2xl
KEIsTikgICBSWF9iaXRzZXRfYWNjZXNzKEIsIE4sIF49ICkKI2RlZmluZSByeF9iaXRzZXRfbnVt
Yl9zdWJzZXRzKE4pICgoKE4pICsgUlhfc3Vic2V0X2JpdHMgLSAxKSAvIFJYX3N1YnNldF9iaXRz
KQojZGVmaW5lIHJ4X3NpemVvZl9iaXRzZXQoTikJKHJ4X2JpdHNldF9udW1iX3N1YnNldHMoTikg
KiBzaXplb2YoUlhfc3Vic2V0KSkKCgwKCi8qIFRoaXMgcGFnZTogU3BsYXkgdHJlZXMuICovCgoj
aWZkZWYgX19TVERDX18KdHlwZWRlZiBpbnQgKCpyeF9zcF9jb21wYXJlcikgKHZvaWQgKiBhLCB2
b2lkICogYik7CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfc3BfY29tcGFyZXIpICgpOwojZW5kaWYK
CnN0cnVjdCByeF9zcF9ub2RlIAp7CiAgdm9pZCAqIGtleTsKICB2b2lkICogZGF0YTsKICBzdHJ1
Y3Qgcnhfc3Bfbm9kZSAqIGtpZHNbMl07Cn07CgojaWZkZWYgX19TVERDX18KdHlwZWRlZiB2b2lk
ICgqcnhfc3Bfa2V5X2RhdGFfZnJlZXIpIChzdHJ1Y3Qgcnhfc3Bfbm9kZSAqKTsKI2Vsc2UKdHlw
ZWRlZiB2b2lkICgqcnhfc3Bfa2V5X2RhdGFfZnJlZXIpICgpOwojZW5kaWYKCgwKLyogZ2lhbnQg
aW5mbGF0YWJsZSBoYXNoIHRyZWVzICovCgpzdHJ1Y3QgcnhfaGFzaF9pdGVtCnsKICBzdHJ1Y3Qg
cnhfaGFzaF9pdGVtICogbmV4dF9zYW1lX2hhc2g7CiAgc3RydWN0IHJ4X2hhc2ggKiB0YWJsZTsK
ICB1bnNpZ25lZCBsb25nIGhhc2g7CiAgdm9pZCAqIGRhdGE7CiAgdm9pZCAqIGJpbmRpbmc7Cn07
CgpzdHJ1Y3QgcnhfaGFzaAp7CiAgc3RydWN0IHJ4X2hhc2ggKiBwYXJlbnQ7CiAgaW50IHJlZnM7
CiAgc3RydWN0IHJ4X2hhc2ggKiBjaGlsZHJlblsxM107CiAgc3RydWN0IHJ4X2hhc2hfaXRlbSAq
IGJ1Y2tldHMgWzEzXTsKICBpbnQgYnVja2V0X3NpemUgWzEzXTsKfTsKCnN0cnVjdCByeF9oYXNo
X3J1bGVzOwoKI2lmZGVmIF9fU1REQ19fCi8qIHNob3VsZCByZXR1cm4gbGlrZSA9PSAqLwp0eXBl
ZGVmIGludCAoKnJ4X2hhc2hfZXEpKHZvaWQgKiwgdm9pZCAqKTsKdHlwZWRlZiBzdHJ1Y3Qgcnhf
aGFzaCAqICgqcnhfYWxsb2NfaGFzaCkoc3RydWN0IHJ4X2hhc2hfcnVsZXMgKik7CnR5cGVkZWYg
dm9pZCAoKnJ4X2ZyZWVfaGFzaCkoc3RydWN0IHJ4X2hhc2ggKiwKCQkJICAgIHN0cnVjdCByeF9o
YXNoX3J1bGVzICopOwp0eXBlZGVmIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiAoKnJ4X2FsbG9jX2hh
c2hfaXRlbSkoc3RydWN0IHJ4X2hhc2hfcnVsZXMgKiwKCQkJCQkJICAgIHZvaWQgKik7CnR5cGVk
ZWYgdm9pZCAoKnJ4X2ZyZWVfaGFzaF9pdGVtKShzdHJ1Y3QgcnhfaGFzaF9pdGVtICosCgkJCQkg
c3RydWN0IHJ4X2hhc2hfcnVsZXMgKik7CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfaGFzaF9lcSko
KTsKdHlwZWRlZiBzdHJ1Y3QgcnhfaGFzaCAqICgqcnhfYWxsb2NfaGFzaCkoKTsKdHlwZWRlZiB2
b2lkICgqcnhfZnJlZV9oYXNoKSgpOwp0eXBlZGVmIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiAoKnJ4
X2FsbG9jX2hhc2hfaXRlbSkoKTsKdHlwZWRlZiB2b2lkICgqcnhfZnJlZV9oYXNoX2l0ZW0pKCk7
CiNlbmRpZgoKc3RydWN0IHJ4X2hhc2hfcnVsZXMKewogIHJ4X2hhc2hfZXEgZXE7CiAgcnhfYWxs
b2NfaGFzaCBoYXNoX2FsbG9jOwogIHJ4X2ZyZWVfaGFzaCBmcmVlX2hhc2g7CiAgcnhfYWxsb2Nf
aGFzaF9pdGVtIGhhc2hfaXRlbV9hbGxvYzsKICByeF9mcmVlX2hhc2hfaXRlbSBmcmVlX2hhc2hf
aXRlbTsKfTsKCgwKLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KCnN0cnVjdCByeF9jYWNoZTsK
c3RydWN0IHJ4X3N1cGVyc2V0OwpzdHJ1Y3Qgcng7CnN0cnVjdCByeF9zZV9saXN0OwoKDAoKLyog
CiAqIEdMT1NTQVJZCiAqCiAqIHJlZ2V4cAogKiByZWd1bGFyIGV4cHJlc3Npb24KICogZXhwcmVz
c2lvbgogKiBwYXR0ZXJuIC0gYSBgcmVndWxhcicgZXhwcmVzc2lvbi4gIFRoZSBleHByZXNzaW9u
CiAqICAgICAgIG5lZWQgbm90IGJlIGZvcm1hbGx5IHJlZ3VsYXIgLS0gaXQgY2FuIGNvbnRhaW4K
ICogICAgICAgY29uc3RydWN0cyB0aGF0IGRvbid0IGNvcnJlc3BvbmQgdG8gcHVyZWx5IHJlZ3Vs
YXIKICogICAgICAgZXhwcmVzc2lvbnMuCiAqCiAqIGJ1ZmZlcgogKiBzdHJpbmcgLSB0aGUgc3Ry
aW5nIChvciBzdHJpbmdzKSBiZWluZyBzZWFyY2hlZCBvciBtYXRjaGVkLgogKgogKiBwYXR0ZXJu
IGJ1ZmZlciAtIGEgc3RydWN0dXJlIG9mIHR5cGUgYHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcicK
ICogICAgICAgVGhpcyBpbiB0dXJuIGNvbnRhaW5zIGEgYHN0cnVjdCByeCcsIHdoaWNoIGhvbGRz
IHRoZQogKiAgICAgICBORkEgY29tcGlsZWQgZnJvbSBhIHBhdHRlcm4sIGFzIHdlbGwgYXMgc29t
ZSBvZiB0aGUgc3RhdGUKICogICAgICAgb2YgYSBtYXRjaGVyIHVzaW5nIHRoZSBwYXR0ZXJuLgog
KgogKiBORkEgLSBub25kZXRlcm1pbmlzdGljIGZpbml0ZSBhdXRvbWF0YS4gIFNvbWUgcGVvcGxl
CiAqICAgICAgIHVzZSB0aGlzIHRlcm0gdG8gYSBtZW1iZXIgb2YgdGhlIGNsYXNzIG9mIAogKiAg
ICAgICByZWd1bGFyIGF1dG9tYXRhICh0aG9zZSBjb3JyZXNwb25kaW5nIHRvIGEgcmVndWxhcgog
KiAgICAgICBsYW5ndWFnZSkuICBIb3dldmVyLCBpbiB0aGlzIGNvZGUsIHRoZSBtZWFuaW5nIGlz
CiAqICAgICAgIG1vcmUgZ2VuZXJhbC4gIFRoZSBhdXRvbWF0YSB1c2VkIGJ5IFJ4IGFyZSBjb21w
ZXJhYmxlCiAqICAgICAgIGluIHBvd2VyIHRvIHdoYXQgYXJlIHVzdWFsbHkgY2FsbGVkIGBwdXNo
IGRvd24gYXV0b21hdGEnLgogKgogKiAgICAgICBUd28gTkZBIGFyZSBidWlsdCBieSByeCBmb3Ig
ZXZlcnkgcGF0dGVybi4gIE9uZSBpcyBidWlsdAogKiAgICAgICBieSB0aGUgY29tcGlsZXIuICBU
aGUgb3RoZXIgaXMgYnVpbHQgZnJvbSB0aGUgZmlyc3QsIG9uCiAqICAgICAgIHRoZSBmbHksIGJ5
IHRoZSBtYXRjaGVyLiAgVGhlIGxhdHRlciBpcyBjYWxsZWQgdGhlIGBzdXBlcnN0YXRlCiAqICAg
ICAgIE5GQScgYmVjYXVzZSBpdHMgc3RhdGVzIGNvcnJlc3BvbmQgdG8gc2V0cyBvZiBzdGF0ZXMg
ZnJvbQogKiAgICAgICB0aGUgZmlyc3QgTkZBLiAgKEpvZSBLZWFuZSBnZXRzIGNyZWRpdCBmb3Ig
dGhlIG5hbWUKICogICAgICAgYHN1cGVyc3RhdGUgTkZBJykuCiAqCiAqIE5GQSBlZGdlcwogKiBl
cHNpbG9uIGVkZ2VzCiAqIHNpZGUtZWZmZWN0IGVkZ2VzIC0gVGhlIE5GQSBjb21waWxlZCBmcm9t
IGEgcGF0dGVybiBjYW4gaGF2ZSB0aHJlZQogKiAgICAgICBraW5kcyBvZiBlZGdlcy4gIEVwc2ls
b24gZWRnZXMgY2FuIGJlIHRha2VuIGZyZWVseSBhbnl0aW1lCiAqICAgICAgIHRoZWlyIHNvdXJj
ZSBzdGF0ZSBpcyByZWFjaGVkLiAgQ2hhcmFjdGVyIHNldCBlZGdlcyBjYW4gYmUKICogICAgICAg
dGFrZW4gd2hlbiB0aGVpciBzb3VyY2Ugc3RhdGUgaXMgcmVhY2hlZCBhbmQgd2hlbiB0aGUgbmV4
dCAKICogICAgICAgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIgaXMgYSBtZW1iZXIgb2YgdGhlIHNl
dC4gIFNpZGUgZWZmZWN0CiAqICAgICAgIGVkZ2VzIGltcGx5IGEgdHJhbnNpdGlvbiB0aGF0IGNh
biBvbmx5IGJlIHRha2VuIGFmdGVyIHRoZQogKiAgICAgICBpbmRpY2F0ZWQgc2lkZSBlZmZlY3Qg
aGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFjY29tcGxpc2hlZC4KICogICAgICAgU29tZSBleGFtcGxl
cyBvZiBzaWRlIGVmZmVjdHMgYXJlOgogKgogKgkJU3RvcmluZyB0aGUgY3VycmVudCBtYXRjaCBw
b3NpdGlvbiB0byByZWNvcmQgdGhlCiAqICAgICAgICAgICAgICBsb2NhdGlvbiBvZiBhIHBhcmVu
dGVzaXplZCBzdWJleHByZXNzaW9uLgogKgogKiAgICAgICAgICAgICAgQWR2YW5jaW5nIHRoZSBt
YXRjaGVyIG92ZXIgTiBjaGFyYWN0ZXJzIGlmIHRoZXkKICogICAgICAgICAgICAgIG1hdGNoIHRo
ZSBOIGNoYXJhY3RlcnMgcHJldmlvdXNseSBtYXRjaGVkIGJ5IGEgCiAqICAgICAgICAgICAgICBw
YXJlbnRlc2l6ZWQgc3ViZXhwcmVzc2lvbi4KICoKICogICAgICAgQm90aCBvZiB0aG9zZSBraW5k
cyBvZiBlZGdlcyBvY2N1ciBpbiB0aGUgTkZBIGdlbmVyYXRlZAogKiAgICAgICBieSB0aGUgcGF0
dGVybjogIFwoLlwpXDEKICoKICogICAgICAgRXBzaWxvbiBhbmQgc2lkZSBlZmZlY3QgZWRnZXMg
YXJlIHNpbWlsYXIuICBVbmZvcnR1bmF0ZWx5LAogKiAgICAgICBzb21lIG9mIHRoZSBjb2RlIHVz
ZXMgdGhlIG5hbWUgYGVwc2lsb24gZWRnZScgdG8gbWVhbgogKiAgICAgICBib3RoIGVwc2lsb24g
YW5kIHNpZGUgZWZmZWN0IGVkZ2VzLiAgRm9yIGV4YW1wbGUsICB0aGUKICogICAgICAgZnVuY3Rp
b24gaGFzX25vbl9pZGVtcG90ZW50X2Vwc2lsb25fcGF0aCBjb21wdXRlcyB0aGUgZXhpc3RhbmNl
CiAqICAgICAgIG9mIGEgbm9uLXRyaXZpYWwgcGF0aCBjb250YWluaW5nIG9ubHkgYSBtaXggb2Yg
ZXBzaWxvbiBhbmQKICogICAgICAgc2lkZSBlZmZlY3QgZWRnZXMuICBJbiB0aGF0IGNhc2UgYG5v
bmlkZW1wb3RlbnQgZXBzaWxvbicgaXMgYmVpbmcKICogICAgICAgdXNlZCB0byBtZWFuIGBzaWRl
IGVmZmVjdCcuCiAqLwoKCgoMCgovKiBMT1cgTEVWRUwgUEFUVEVSTiBCVUZGRVJTICovCgovKiBT
dXBwb3NlIHRoYXQgZnJvbSBzb21lIE5GQSBzdGF0ZSwgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91
Z2gKICogc2lkZS1lZmZlY3QgZWRnZXMgaXMgcG9zc2libGUuICBJbiB3aGF0IG9yZGVyIHNob3Vs
ZCB0aGUgcGF0aHMKICogYmUgdHJpZWQ/ICBBIGZ1bmN0aW9uIG9mIHR5cGUgcnhfc2VfbGlzdF9v
cmRlciBhbnN3ZXJzIHRoYXQKICogcXVlc3Rpb24uICBJdCBjb21wYXJlcyB0d28gbGlzdHMgb2Yg
c2lkZSBlZmZlY3RzLCBhbmQgc2F5cwogKiB3aGljaCBsaXN0IGNvbWVzIGZpcnN0LgogKi8KIAoj
aWZkZWYgX19TVERDX18KdHlwZWRlZiBpbnQgKCpyeF9zZV9saXN0X29yZGVyKSAoc3RydWN0IHJ4
ICosCgkJCQkgc3RydWN0IHJ4X3NlX2xpc3QgKiwgCgkJCQkgc3RydWN0IHJ4X3NlX2xpc3QgKik7
CiNlbHNlCnR5cGVkZWYgaW50ICgqcnhfc2VfbGlzdF9vcmRlcikgKCk7CiNlbmRpZgoKCgovKiBT
dHJ1Y3QgUlggaG9sZHMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gLSB0aGF0IGlzLCBh
biBuZmEKICogcmVhZHkgdG8gYmUgY29udmVydGVkIG9uIGRlbWFuZCB0byBhIG1vcmUgZWZmaWNp
ZW50IHN1cGVyc3RhdGUgbmZhLgogKiBUaGlzIGlzIGZvciB0aGUgbG93IGxldmVsIGludGVyZmFj
ZS4gIFRoZSBoaWdoLWxldmVsIGludGVyZmFjZXMgZW5jbG9zZQogKiB0aGlzIGluIGEgYHN0cnVj
dCByZV9wYXR0ZXJuX2J1ZmZlcicuICAKICovCnN0cnVjdCByeAp7CiAgLyogVGhlIGNvbXBpbGVy
IGFzc2lnbnMgYSB1bmlxdWUgaWQgdG8gZXZlcnkgcGF0dGVybi4KICAgKiBMaWtlIHNlcXVlbmNl
IG51bWJlcnMgaW4gWCwgdGhlcmUgaXMgYSBzdWJ0bGUgYnVnIGhlcmUKICAgKiBpZiB5b3UgdXNl
IFJ4IGluIGEgc3lzdGVtIHRoYXQgcnVucyBmb3IgYSBsb25nIHRpbWUuCiAgICogQnV0LCBiZWNh
dXNlIG9mIHRoZSB3YXkgdGhlIGNhY2hlcyB3b3JrIG91dCwgaXQgaXMgYWxtb3N0CiAgICogaW1w
b3NzaWJsZSB0byB0cmlnZ2VyIHRoZSBSeCB2ZXJzaW9uIG9mIHRoaXMgYnVnLgogICAqCiAgICog
VGhlIGlkIGlzIHVzZWQgdG8gdmFsaWRhdGUgc3VwZXJzdGF0ZXMgZm91bmQgaW4gYSBjYWNoZQog
ICAqIG9mIHN1cGVyc3RhdGVzLiAgSXQgaXNuJ3Qgc3VmZmljaWVudCB0byBsZXQgYSBzdXBlcnN0
YXRlCiAgICogcG9pbnQgYmFjayB0byB0aGUgcnggZm9yIHdoaWNoIGl0IHdhcyBjb21waWxlZCAt
LSB0aGUgY2FsbGVyCiAgICogbWF5IGJlIHJlLXVzaW5nIGEgYHN0cnVjdCByeCcgaW4gd2hpY2gg
Y2FzZSB0aGUgc3VwZXJzdGF0ZQogICAqIGlzIG5vdCByZWFsbHkgdmFsaWQuICBTbyBpbnN0ZWFk
LCBzdXBlcnN0YXRlcyBhcmUgdmFsaWRhdGVkCiAgICogYnkgY2hlY2tpbmcgdGhlIHNlcXVlbmNl
IG51bWJlciBvZiB0aGUgcGF0dGVybiBmb3Igd2hpY2gKICAgKiB0aGV5IHdlcmUgYnVpbHQuCiAg
ICovCiAgaW50IHJ4X2lkOwoKICAvKiBUaGlzIGlzIG1lbW9yeSBtZ3QuIHN0YXRlIGZvciBzdXBl
cnN0YXRlcy4gIFRoaXMgbWF5IGJlIAogICAqIHNoYXJlZCBieSBtb3JlIHRoYW4gb25lIHN0cnVj
dCByeC4KICAgKi8KICBzdHJ1Y3QgcnhfY2FjaGUgKiBjYWNoZTsKCiAgLyogRXZlcnkgcmVnZXgg
ZGVmaW5lcyB0aGUgc2l6ZSBvZiBpdHMgb3duIGNoYXJhY3RlciBzZXQuIAogICAqIEEgc3VwZXJz
dGF0ZSBoYXMgYW4gYXJyYXkgb2YgdGhpcyBzaXplLCB3aXRoIGVhY2ggZWxlbWVudAogICAqIGEg
YHN0cnVjdCByeF9pbngnLiAgU28sIGRvbid0IG1ha2UgdGhpcyBudW1iZXIgdG9vIGxhcmdlLgog
ICAqIEluIHBhcnRpY3VsYXIsIGRvbid0IG1ha2UgaXQgMl4xNi4KICAgKi8KICBpbnQgbG9jYWxf
Y3NldF9zaXplOwoKICAvKiBBZnRlciB0aGUgTkZBIGlzIGJ1aWx0LCBpdCBpcyBjb3BpZWQgaW50
byBhIGNvbnRpZ3VvdXMgcmVnaW9uCiAgICogb2YgbWVtb3J5IChtb3N0bHkgZm9yIGNvbXBhdGFi
aWxpdHkgd2l0aCBHTlUgcmVnZXgpLgogICAqIEhlcmUgaXMgdGhhdCByZWdpb24sIGFuZCBpdCdz
IHNpemU6CiAgICovCiAgdm9pZCAqIGJ1ZmZlcjsKICB1bnNpZ25lZCBsb25nIGFsbG9jYXRlZDsK
CiAgLyogQ2xpZW50cyBvZiBSWCBjYW4gYXNrIGZvciBzb21lIGV4dHJhIHN0b3JhZ2UgaW4gdGhl
IHNwYWNlIHBvaW50ZWQKICAgKiB0byBieSBCVUZGRVIuICBUaGUgZmllbGQgUkVTRVJWRUQgaXMg
YW4gaW5wdXQgcGFyYW1ldGVyIHRvIHRoZQogICAqIGNvbXBpbGVyLiAgQWZ0ZXIgY29tcGlsYXRp
b24sIHRoaXMgbXVjaCBzcGFjZSB3aWxsIGJlIGF2YWlsYWJsZSAKICAgKiBhdCAoYnVmZmVyICsg
YWxsb2NhdGVkIC0gcmVzZXJ2ZWQpCiAgICovCiAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKCiAg
LyogLS0tLS0tLS0tIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9u
bHkuIC0tLS0tLS0tLSAqLwogIC8qIC0tLS0tLS0tLSBCdXQhIHRoZXkgbXVzdCBiZSBpbml0aWFs
aXplZCB0byAwLgkgICAgICAgLS0tLS0tLS0tICovCgogIC8qIE5PREVDIGlzIHRoZSBudW1iZXIg
b2Ygbm9kZXMgaW4gdGhlIE5GQSB3aXRoIG5vbi1lcHNpbG9uCiAgICogdHJhbnNpdGlvbnMuIAog
ICAqLwogIGludCBub2RlYzsKCiAgLyogRVBTTk9ERUMgaXMgdGhlIG51bWJlciBvZiBub2RlcyB3
aXRoIG9ubHkgZXBzaWxvbiB0cmFuc2l0aW9ucy4gKi8KICBpbnQgZXBzbm9kZWM7CgogIC8qIFRo
ZSBzdW0gKE5PREVDICsgRVBTTk9ERUMpIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhdGVzIGlu
IHRoZQogICAqIGNvbXBpbGVkIE5GQS4KICAgKi8KCiAgLyogTGlzdHMgb2Ygc2lkZSBlZmZlY3Rz
IGFzIHN0b3JlZCBpbiB0aGUgTkZBIGFyZSBgaGFzaCBjb25zZWQnLi5tZWFuaW5nCiAgICogdGhh
dCBsaXN0cyB3aXRoIHRoZSBzYW1lIGVsZW1lbnRzIGFyZSA9PS4gIER1cmluZyBjb21waWxhdGlv
biwgCiAgICogdGhpcyB0YWJsZSBmYWNpbGl0YXRlcyBoYXNoLWNvbnNpbmcuCiAgICovCiAgc3Ry
dWN0IHJ4X2hhc2ggc2VfbGlzdF9tZW1vOwoKICAvKiBMaXN0cyBvZiBORkEgc3RhdGVzIGFyZSBh
bHNvIGhhc2hlZC4gCiAgICovCiAgc3RydWN0IHJ4X2hhc2ggc2V0X2xpc3RfbWVtbzsKCgoKCiAg
LyogVGhlIGNvbXBpbGVyIGFuZCBtYXRjaGVyIG11c3QgYnVpbGQgYSBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb24gZnJhbWVzLgogICAqIFRoZSBmb3JtYXQgb2YgdGhlc2UgZnJhbWVzIGlzIGZpeGVkIChj
LmYuIHN0cnVjdCByeF9pbngpLiAgVGhlIHZhbHVlcwogICAqIG9mIHRoZSBpbnN0cnVjdGlvbnMg
aXMgbm90IGZpeGVkLgogICAqCiAgICogQW4gZW51bWVyYXRlZCB0eXBlIChlbnVtIHJ4X29wY29k
ZSkgZGVmaW5lcyB0aGUgc2V0IG9mIGluc3RydWN0aW9ucwogICAqIHRoYXQgdGhlIGNvbXBpbGVy
IG9yIG1hdGNoZXIgbWlnaHQgZ2VuZXJhdGUuICBXaGVuIGZpbGxpbmcgYW4gaW5zdHJ1Y3Rpb24K
ICAgKiBmcmFtZSwgdGhlIElOWCBmaWVsZCBpcyBmb3VuZCBieSBpbmRleGluZyB0aGlzIGluc3Ry
dWN0aW9uIHRhYmxlCiAgICogd2l0aCBhbiBvcGNvZGU6CiAgICovCiAgdm9pZCAqKiBpbnN0cnVj
dGlvbl90YWJsZTsKCiAgLyogVGhlIGxpc3Qgb2YgYWxsIHN0YXRlcyBpbiBhbiBORkEuCiAgICog
RHVyaW5nIGNvbXBpbGF0aW9uLCB0aGUgTkVYVCBmaWVsZCBvZiBORkEgc3RhdGVzIGxpbmtzIHRo
aXMgbGlzdC4KICAgKiBBZnRlciBjb21waWxhdGlvbiwgYWxsIHRoZSBzdGF0ZXMgYXJlIGNvbXBh
Y3RlZCBpbnRvIGFuIGFycmF5LAogICAqIG9yZGVyZWQgYnkgc3RhdGUgaWQgbnVtYmVycy4gIEF0
IHRoYXQgdGltZSwgdGhpcyBwb2ludHMgdG8gdGhlIGJhc2UgCiAgICogb2YgdGhhdCBhcnJheS4K
ICAgKi8KICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICpuZmFfc3RhdGVzOwoKICAvKiBFdmVyeSBuZmEg
YmVnaW5zIHdpdGggb25lIGRpc3Rpbmd1aXNoZWQgc3RhcnRpbmcgc3RhdGU6CiAgICovCiAgc3Ry
dWN0IHJ4X25mYV9zdGF0ZSAqc3RhcnQ7CgogIC8qIFRoaXMgb3JkZXJzIHRoZSBzZWFyY2ggdGhy
b3VnaCBzdXBlci1uZmEgcGF0aHMuCiAgICogU2VlIHRoZSBjb21tZW50IG5lYXIgdGhlIHR5cGVk
ZWYgb2Ygcnhfc2VfbGlzdF9vcmRlci4KICAgKi8KICByeF9zZV9saXN0X29yZGVyIHNlX2xpc3Rf
Y21wOwoKICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzdGFydF9zZXQ7Cn07CgoKCgwKLyogU1lOVEFY
IFRSRUVTICovCgovKiBDb21waWxhdGlvbiBpcyBpbiBzdGFnZXMuICAKICoKICogSW4gdGhlIGZp
cnN0IHN0YWdlLCBhIHBhdHRlcm4gc3BlY2lmaWVkIGJ5IGEgc3RyaW5nIGlzIAogKiB0cmFuc2xh
dGVkIGludG8gYSBzeW50YXggdHJlZS4gIExhdGVyIHN0YWdlcyB3aWxsIGNvbnZlcnQKICogdGhl
IHN5bnRheCB0cmVlIGludG8gYW4gTkZBIG9wdGltaXplZCBmb3IgY29udmVyc2lvbiB0byBhCiAq
IHN1cGVyc3RhdGUtTkZBLgogKgogKiBUaGlzIHBhZ2UgaXMgYWJvdXQgc3ludGF4IHRyZWVzLgog
Ki8KCmVudW0gcmV4cF9ub2RlX3R5cGUKewogIHJfY3NldCwJCQkvKiBNYXRjaCBmcm9tIGEgY2hh
cmFjdGVyIHNldC4gYGEnIG9yIGBbYS16XScqLwogIHJfY29uY2F0LAkJCS8qIENvbmNhdCB0d28g
c3ViZXhwcmVzc2lvbnMuICAgYGFiJyAqLwogIHJfYWx0ZXJuYXRlLAkJCS8qIENob29zZSBvbmUg
b2YgdHdvIHN1YmV4cHJlc3Npb25zLiBgYVx8YicgKi8KICByX29wdCwJCQkvKiBPcHRpb25hbCBz
dWJleHByZXNzaW9uLiBgYT8nICovCiAgcl9zdGFyLAkJCS8qIFJlcGVhdGVkIHN1YmV4cHJlc3Np
b24uIGBhKicgKi8KCgogIC8qIEEgMnBoYXNlLXN0YXIgaXMgYSB2YXJpYXRpb24gb24gYSByZXBl
YXRlZCBzdWJleHByZXNzaW9uLgogICAqIEluIHRoaXMgY2FzZSwgdGhlcmUgYXJlIHR3byBzdWJl
eHByZXNzaW9ucy4gIFRoZSBmaXJzdCwgaWYgbWF0Y2hlZCwKICAgKiBiZWdpbnMgYSByZXBpdGl0
aW9uIChvdGhlcndpc2UsIHRoZSB3aG9sZSBleHByZXNzaW9uIGlzIG1hdGNoZXMgdGhlCiAgICog
ZW1wdGggc3RyaW5nKS4gIAogICAqIAogICAqIEFmdGVyIG1hdGNoaW5nIHRoZSBmaXJzdCBzdWJl
eHByZXNzaW9uLCBhIDJwaGFzZSBzdGFyIGVpdGhlciBmaW5pc2hlcywKICAgKiBvciBtYXRjaGVz
IHRoZSBzZWNvbmQgc3ViZXhwcmVzc2lvbi4gIElmIHRoZSBzZWNvbmQgc3ViZXhwcmVzc2lvbiBp
cwogICAqIG1hdGNoZWQsIHRoZW4gdGhlIHdob2xlIGNvbnN0cnVjdCByZXBlYXRzLgogICAqCiAg
ICogMnBoYXNlIHN0YXJzIGFyZSB1c2VkIGluIHR3byBjaXJjdW1zdGFuY2VzLiAgRmlyc3QsIHRo
ZXkKICAgKiBhcmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQT1NJWCBp
bnRlcnZhbHMgKGNvdW50ZWQKICAgKiByZXBpdGl0aW9ucykuICBTZWNvbmQsIHRoZXkgYXJlIHVz
ZWQgdG8gaW1wbGVtZW50IHByb3BlciBzdGFyCiAgICogc2VtYW50aWNzIHdoZW4gdGhlIHJlcGVh
dGVkIHN1YmV4cHJlc3Npb24gY29udGFpbnMgcGF0aHMgb2YKICAgKiBvbmx5IHNpZGUgZWZmZWN0
cy4gIFNlZSByeF9jb21waWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAqLwogIHJfMnBoYXNl
X3N0YXIsCgoKICAvKiBjLmYuICJ0eXBlZGVmIHZvaWQgKiByeF9zaWRlX2VmZmVjdCIgKi8KICBy
X3NpZGVfZWZmZWN0LAoKICAvKiBUaGlzIGlzIGFuIGV4dGVuc2lvbiB0eXBlOiAgSXQgaXMgZm9y
IHRyYW5zaWVudCB1c2UgaW4gc291cmNlLT5zb3VyY2UKICAgKiB0cmFuc2Zvcm1hdGlvbnMgKGlt
cGxlbWVudGVkIG92ZXIgc3ludGF4IHRyZWVzKS4KICAgKi8KICByX2RhdGEKfTsKCi8qIEEgc2lk
ZSBlZmZlY3QgaXMgYSBtYXRjaGVyLXNwZWNpZmljIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGgKICog
dHJhbnNpdGlvbnMgaW4gdGhlIE5GQS4gIFRoZSBkZXRhaWxzIG9mIHNpZGUgZWZmZWN0cyBhcmUg
dXAKICogdG8gdGhlIG1hdGNoZXIuICBUbyB0aGUgY29tcGlsZXIgYW5kIHN1cGVyc3RhdGUgY29u
c3RydWN0b3JzCiAqIHNpZGUgZWZmZWN0cyBhcmUgb3BhcXVlOgogKi8KCnR5cGVkZWYgdm9pZCAq
IHJ4X3NpZGVfZWZmZWN0OwoKLyogTm9kZXMgaW4gYSBzeW50YXggdHJlZSBhcmUgb2YgdGhpcyB0
eXBlOgogKi8Kc3RydWN0IHJleHBfbm9kZQp7CiAgZW51bSByZXhwX25vZGVfdHlwZSB0eXBlOwog
IHVuaW9uCiAgewogICAgcnhfQml0c2V0IGNzZXQ7CiAgICByeF9zaWRlX2VmZmVjdCBzaWRlX2Vm
ZmVjdDsKICAgIHN0cnVjdAogICAgICB7CglzdHJ1Y3QgcmV4cF9ub2RlICpsZWZ0OwoJc3RydWN0
IHJleHBfbm9kZSAqcmlnaHQ7CiAgICAgIH0gcGFpcjsKICAgIHZvaWQgKiBkYXRhOwogIH0gcGFy
YW1zOwp9OwoKCgwKLyogTkZBCiAqCiAqIEEgc3ludGF4IHRyZWUgaXMgY29tcGlsZWQgaW50byBh
biBORkEuICBUaGlzIHBhZ2UgZGVmaW5lcyB0aGUgc3RydWN0dXJlCiAqIG9mIHRoYXQgTkZBLgog
Ki8KCnN0cnVjdCByeF9uZmFfc3RhdGUKewogIC8qIFRoZXNlIGFyZSBrZXB0IGluIGEgbGlzdCBh
cyB0aGUgTkZBIGlzIGJlaW5nIGJ1aWx0LiAqLwogIHN0cnVjdCByeF9uZmFfc3RhdGUgKm5leHQ7
CgogIC8qIEFmdGVyIHRoZSBORkEgaXMgYnVpbHQsIHN0YXRlcyBhcmUgZ2l2ZW4gaW50ZWdlciBp
ZCdzLgogICAqIFN0YXRlcyB3aG9zZSBvdXRnb2luZyB0cmFuc2l0aW9ucyBhcmUgYWxsIGVpdGhl
ciBlcHNpbG9uIG9yIAogICAqIHNpZGUgZWZmZWN0IGVkZ2VzIGFyZSBnaXZlbiBpZHMgbGVzcyB0
aGFuIDAuICBPdGhlciBzdGF0ZXMKICAgKiBhcmUgZ2l2ZW4gc3VjY2Vzc2l2ZSBub24tbmVnYXRp
dmUgaWRzIHN0YXJ0aW5nIGZyb20gMC4KICAgKi8KICBpbnQgaWQ7CgogIC8qIFRoZSBsaXN0IG9m
IE5GQSBlZGdlcyB0aGF0IGdvIGZyb20gdGhpcyBzdGF0ZSB0byBzb21lIG90aGVyLiAqLwogIHN0
cnVjdCByeF9uZmFfZWRnZSAqZWRnZXM7CgogIC8qIElmIHlvdSBsYW5kIGluIHRoaXMgc3RhdGUs
IHRoZW4geW91IGltcGxpY2l0bHkgbGFuZAogICAqIGluIGFsbCBvdGhlciBzdGF0ZXMgcmVhY2hh
YmxlIGJ5IG9ubHkgZXBzaWxvbiB0cmFuc2xhdGlvbnMuCiAgICogQ2FsbCB0aGUgc2V0IG9mIG1h
eGltYWwgcGF0aHMgdG8gc3VjaCBzdGF0ZXMgdGhlIGVwc2lsb24gY2xvc3VyZQogICAqIG9mIHRo
aXMgc3RhdGUuCiAgICoKICAgKiBUaGVyZSBtYXkgYmUgb3RoZXIgc3RhdGVzIHRoYXQgYXJlIHJl
YWNoYWJsZSBieSBhIG1peHR1cmUgb2YKICAgKiBlcHNpbG9uIGFuZCBzaWRlIGVmZmVjdCBlZGdl
cy4gIENvbnNpZGVyIHRoZSBzZXQgb2YgbWF4aW1hbCBwYXRocwogICAqIG9mIHRoYXQgc29ydCBm
cm9tIHRoaXMgc3RhdGUuICBDYWxsIGl0IHRoZSBlcHNpbG9uLXNpZGUtZWZmZWN0CiAgICogY2xv
c3VyZSBvZiB0aGUgc3RhdGUuCiAgICogCiAgICogVGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGUg
c3RhdGUgaXMgYSBzdWJzZXQgb2YgdGhlIGVwc2lsb24tc2lkZS0KICAgKiBlZmZlY3QgY2xvc3Vy
ZS4gIEl0IGNvbnNpc3RzIG9mIGFsbCB0aGUgcGF0aHMgdGhhdCBjb250YWluIAogICAqIG5vIHNp
ZGUgZWZmZWN0cyAtLSBvbmx5IGVwc2lsb24gZWRnZXMuCiAgICogCiAgICogVGhlIHBhdGhzIGlu
IHRoZSBlcHNpbG9uLXNpZGUtZWZmZWN0IGNsb3N1cmUgIGNhbiBiZSBwYXJ0aXRpb25lZAogICAq
IGludG8gZXF1aXZhbGFuY2Ugc2V0cy4gVHdvIHBhdGhzIGFyZSBlcXVpdmFsYW50IGlmIHRoZXkg
aGF2ZSB0aGUKICAgKiBzYW1lIHNldCBvZiBzaWRlIGVmZmVjdHMsIGluIHRoZSBzYW1lIG9yZGVy
LiAgVGhlIGVwc2lsb24tY2xvc3VyZQogICAqIGlzIG9uZSBvZiB0aGVzZSBlcXVpdmFsYW5jZSBz
ZXRzLiAgTGV0J3MgY2FsbCB0aGVzZSBlcXVpdmFsYW5jZQogICAqIHNldHM6IG9ic2VydmFibHkg
ZXF1aXZhbGFudCBwYXRoIHNldHMuICBUaGF0IG5hbWUgaXMgY2hvc2VuCiAgICogYmVjYXVzZSBl
cXVpdmFsYW5jZSBvZiB0d28gcGF0aHMgbWVhbnMgdGhleSBjYXVzZSB0aGUgc2FtZSBzaWRlCiAg
ICogZWZmZWN0cyAtLSBzbyB0aGV5IGxlYWQgdG8gdGhlIHNhbWUgc3Vic2VxdWVudCBvYnNlcnZh
dGlvbnMgb3RoZXIKICAgKiB0aGFuIHRoYXQgdGhleSBtYXkgd2luZCB1cCBpbiBkaWZmZXJlbnQg
dGFyZ2V0IHN0YXRlcy4KICAgKgogICAqIFRoZSBzdXBlcnN0YXRlIG5mYSwgd2hpY2ggaXMgZGVy
aXZlZCBmcm9tIHRoaXMgbmZhLCBpcyBiYXNlZCBvbgogICAqIHRoZSBvYnNlcnZhdGlvbiB0aGF0
IGFsbCBvZiB0aGUgcGF0aHMgaW4gYW4gb2JzZXJ2YWJseSBlcXVpdmFsYW50CiAgICogcGF0aCBz
ZXQgY2FuIGJlIGV4cGxvcmVkIGF0IHRoZSBzYW1lIHRpbWUsIHByb3ZpZGVkIHRoYXQgdGhlCiAg
ICogbWF0Y2hlciBrZWVwcyB0cmFjayBub3Qgb2YgYSBzaW5nbGUgbmZhIHN0YXRlLCBidXQgb2Yg
YSBzZXQgb2YKICAgKiBzdGF0ZXMuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgZm9sbG93aW5nIGFs
bCB0aGUgcGF0aHMgaW4gYW4KICAgKiBvYnNlcnZhYmx5IGVxdWl2YWxhbnQgc2V0LCB5b3Ugd2lu
ZCB1cCBhdCBhIHNldCBvZiB0YXJnZXQgc3RhdGVzLgogICAqIFRoYXQgc2V0IG9mIHRhcmdldCBz
dGF0ZXMgY29ycmVzcG9uZHMgdG8gb25lIHN0YXRlIGluIHRoZQogICAqIHN1cGVyc3RhdGUgTkZB
LgogICAqCiAgICogU3RhdGljbHksIGJlZm9yZSBtYXRjaGluZyBiZWdpbnMsIGl0IGlzIGNvbnZl
bmllbnQgdG8gYW5hbHl6ZSB0aGUKICAgKiBuZmEuICBFYWNoIHN0YXRlIGlzIGxhYmVsZWQgd2l0
aCBhIGxpc3Qgb2YgdGhlIG9ic2VydmFibHkKICAgKiBlcXVpdmFsYW50IHBhdGggc2V0cyB3aG8n
cyB1bmlvbiBjb3ZlcnMgYWxsIHRoZQogICAqIGVwc2lsb24tc2lkZS1lZmZlY3QgcGF0aHMgYmVn
aW5uaW5nIGluIHRoaXMgc3RhdGUuICBUaGlzIGxpc3QgaXMKICAgKiBjYWxsZWQgdGhlIHBvc3Np
YmxlIGZ1dHVyZXMgb2YgdGhlIHN0YXRlLgogICAqCiAgICogQSB0cml2aWFsIGV4YW1wbGUgaXMg
dGhpcyBORkE6CiAgICogICAgICAgICAgICAgczEKICAgKiAgICAgICAgIEEgIC0tLT4gIEIKICAg
KgogICAqICAgICAgICAgICAgIHMyICAKICAgKiAgICAgICAgICAgIC0tLT4gIEMKICAgKgogICAq
ICAgICAgICAgICAgIGVwc2lsb24gICAgICAgICAgIHMxCiAgICogICAgICAgICAgICAtLS0tLS0t
LS0+ICBEICAgLS0tLS0tPiBFCiAgICogCiAgICogCiAgICogSW4gdGhpcyBleGFtcGxlLCBBIGhh
cyB0d28gcG9zc2libGUgZnV0dXJlcy4KICAgKiBPbmUgaW52b2tlcyB0aGUgc2lkZSBlZmZlY3Qg
YHMxJyBhbmQgY29udGFpbnMgdHdvIHBhdGhzLAogICAqIG9uZSBlbmRpbmcgaW4gc3RhdGUgQiwg
dGhlIG90aGVyIGluIHN0YXRlIEUuCiAgICogVGhlIG90aGVyIGludm9rZXMgdGhlIHNpZGUgZWZm
ZWN0IGBzMicgYW5kIGNvbnRhaW5zIG9ubHkKICAgKiBvbmUgcGF0aCwgbGFuZGluZyBpbiBzdGF0
ZSBDLgogICAqLwogIHN0cnVjdCByeF9wb3NzaWJsZV9mdXR1cmUgKmZ1dHVyZXM7CgoKICAvKiBU
aGVyZSBhcmUgZXhhY3RseSB0d28gZGlzdGluZ3Vpc2hlZCBzdGF0ZXMgaW4gZXZlcnkgTkZBOiAq
LwogIHVuc2lnbmVkIGludCBpc19maW5hbDoxOwogIHVuc2lnbmVkIGludCBpc19zdGFydDoxOwoK
ICAvKiBUaGVzZSBhcmUgdXNlZCBkdXJpbmcgTkZBIGNvbnN0cnVjdGlvbi4uLiAqLwogIHVuc2ln
bmVkIGludCBlY2xvc3VyZV9uZWVkZWQ6MTsKICB1bnNpZ25lZCBpbnQgbWFyazoxOwp9OwoKCi8q
IEFuIGVkZ2UgaW4gYW4gTkZBIGlzIHR5cGVkOiAqLwplbnVtIHJ4X25mYV9ldHlwZQp7CiAgLyog
QSBjc2V0IGVkZ2UgaXMgbGFibGVkIHdpdGggYSBzZXQgb2YgY2hhcmFjdGVycyBvbmUgb2Ygd2hp
Y2gKICAgKiBtdXN0IGJlIG1hdGNoZWQgZm9yIHRoZSBlZGdlIHRvIGJlIHRha2VuLgogICAqLwog
IG5lX2NzZXQsCgogIC8qIEFuIGVwc2lsb24gZWRnZSBpcyB0YWtlbiB3aGVuZXZlciBpdHMgc3Rh
cnRpbmcgc3RhdGUgaXMKICAgKiByZWFjaGVkLiAKICAgKi8KICBuZV9lcHNpbG9uLAoKICAvKiBB
IHNpZGUgZWZmZWN0IGVkZ2UgaXMgdGFrZW4gd2hlbmV2ZXIgaXRzIHN0YXJ0aW5nIHN0YXRlIGlz
CiAgICogcmVhY2hlZC4gIFNpZGUgZWZmZWN0cyBtYXkgY2F1c2UgdGhlIG1hdGNoIHRvIGZhaWwg
b3IgdGhlCiAgICogcG9zaXRpb24gb2YgdGhlIG1hdGNoZXIgdG8gYWR2YW5jZS4KICAgKi8KICBu
ZV9zaWRlX2VmZmVjdAkJLyogQSBzcGVjaWFsIGtpbmQgb2YgZXBzaWxvbi4gKi8KfTsKCnN0cnVj
dCByeF9uZmFfZWRnZQp7CiAgc3RydWN0IHJ4X25mYV9lZGdlICpuZXh0OwogIGVudW0gcnhfbmZh
X2V0eXBlIHR5cGU7CiAgc3RydWN0IHJ4X25mYV9zdGF0ZSAqZGVzdDsKICB1bmlvbgogIHsKICAg
IHJ4X0JpdHNldCBjc2V0OwogICAgcnhfc2lkZV9lZmZlY3Qgc2lkZV9lZmZlY3Q7CiAgfSBwYXJh
bXM7Cn07CgoKCi8qIEEgcG9zc2libGUgZnV0dXJlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiBzaWRl
IGVmZmVjdHMKICogYW5kIGEgc2V0IG9mIGRlc3RpbmF0aW9uIHN0YXRlcy4gIEJlbG93IGFyZSB0
aGVpcgogKiByZXByZXNlbnRhdGlvbnMuICBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBoYXNoLWNvbnNl
ZCB3aGljaAogKiBtZWFucyB0aGF0IGxpc3RzIHdpdGggdGhlIHNhbWUgZWxlbWVudHMgc2hhcmUg
YSByZXByZXNlbnRhdGlvbgogKiAodGhlaXIgYWRkcmVzc2VzIGFyZSA9PSkuCiAqLwoKc3RydWN0
IHJ4X25mYV9zdGF0ZV9zZXQKewogIHN0cnVjdCByeF9uZmFfc3RhdGUgKiBjYXI7CiAgc3RydWN0
IHJ4X25mYV9zdGF0ZV9zZXQgKiBjZHI7Cn07CgpzdHJ1Y3Qgcnhfc2VfbGlzdAp7CiAgcnhfc2lk
ZV9lZmZlY3QgY2FyOwogIHN0cnVjdCByeF9zZV9saXN0ICogY2RyOwp9OwoKc3RydWN0IHJ4X3Bv
c3NpYmxlX2Z1dHVyZQp7CiAgc3RydWN0IHJ4X3Bvc3NpYmxlX2Z1dHVyZSAqbmV4dDsKICBzdHJ1
Y3Qgcnhfc2VfbGlzdCAqIGVmZmVjdHM7CiAgc3RydWN0IHJ4X25mYV9zdGF0ZV9zZXQgKiBkZXN0
c2V0Owp9OwoKDAoKLyogVGhpcyBiZWdpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXBlcnN0
YXRlIE5GQS4KICoKICogVGhlIHN1cGVyc3RhdGUgTkZBIGNvcnJlc3BvbmRzIHRvIHRoZSBORkEg
aW4gdGhlc2Ugd2F5czoKICoKICogRXZlcnkgc3VwZXJzdGF0ZSBORkEgc3RhdGVzIFNVUEVSIGNv
cnJlc3BvbmQgdG8gc2V0cyBvZiBORkEgc3RhdGVzLAogKiBuZmFfc3RhdGVzKFNVUEVSKS4KICoK
ICogU3VwZXJzdGF0ZSBlZGdlcyBjb3JyZXNwb25kIHRvIE5GQSBwYXRocy4KICoKICogVGhlIHN1
cGVyc3RhdGUgaGFzIG5vIGVwc2lsb24gdHJhbnNpdGlvbnM7CiAqIGV2ZXJ5IGVkZ2UgaGFzIGEg
Y2hhcmFjdGVyIGxhYmVsLCBhbmQgYSAocG9zc2libHkgZW1wdHkpIHNpZGUKICogZWZmZWN0IGxh
YmVsLiAgIFRoZSBzaWRlIGVmZmVjdCBsYWJlbCBjb3JyZXNwb25kcyB0byBhIGxpc3Qgb2YKICog
c2lkZSBlZmZlY3RzIHRoYXQgb2NjdXIgaW4gdGhlIE5GQS4gIFRoZXNlIHBhcnRzIGFyZSByZWZl
cnJlZAogKiB0byBhczogICBzdXBlcmVkZ2VfY2hhcmFjdGVyKEVER0UpIGFuZCBzdXBlcmVkZ2Vf
c2lkZXMoRURHRSkuCiAqCiAqIEZvciBhIHN1cGVyc3RhdGUgZWRnZSBFREdFIHN0YXJ0aW5nIGlu
IHNvbWUgc3VwZXJzdGF0ZSBTVVBFUiwKICogdGhlIGZvbGxvd2luZyBpcyB0cnVlIChpbiBwc2V1
ZG8tbm90YXRpb24gOi0pOgogKgogKiAgICAgICBleGlzdHMgREVTVCBpbiBuZmFfc3RhdGVzIHMu
dC4gCiAqICAgICAgICAgZXhpc3RzIG5mYUVER0UgaW4gbmZhX2VkZ2VzIHMudC4KICogICAgICAg
ICAgICAgICAgIG9yaWdpbiAobmZhRURHRSkgPT0gREVTVAogKiAgICAgICAgICAgICAgJiYgb3Jp
Z2luIChuZmFFREdFKSBpcyBhIG1lbWJlciBvZiBuZmFfc3RhdGVzKFNVUEVSKQogKiAgICAgICAg
ICAgICAgJiYgZXhpc3RzIFBGIGluIHBvc3NpYmxlX2Z1dHVyZXMoZGVzdChuZmFFREdFKSkgcy50
LgogKiAJICAgICAgICAgICAgICAgIHNpZGVzX29mX3Bvc3NpYmxlX2Z1dHVyZSAoUEYpID09IHN1
cGVyZWRnZV9zaWRlcyAoRURHRSkKICoKICogYWxzbzoKICoKICogICAgICBsZXQgU1VQRVIyIDo9
IHN1cGVyZWRnZV9kZXN0aW5hdGlvbihFREdFKQogKiAgICAgICAgICBuZmFfc3RhdGVzKFNVUEVS
MikKICogICAgICAgICAgID09IHVuaW9uIG9mIGFsbCBuZmEgc3RhdGUgc2V0cyBTIHMudC4KICog
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyBQRiBpbiBwb3NzaWJsZV9mdXR1cmVzKGRl
c3QobmZhRURHRSkpIHMudC4KICogCSAgICAgICAgICAgICAgICAgICAgICAgc2lkZXNfb2ZfcG9z
c2libGVfZnV0dXJlIChQRikgPT0gc3VwZXJlZGdlX3NpZGVzIChFREdFKQogKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgUyA9PSBkZXN0c19vZl9wb3NzaWJsZV9mdXR1cmUgKFBGKSB9CiAq
CiAqIE9yIGluIGVuZ2xpc2gsIGV2ZXJ5IHN1cGVyc3RhdGUgaXMgYSBzZXQgb2YgbmZhIHN0YXRl
cy4gIEEgZ2l2ZW4KICogY2hhcmFjdGVyIGFuZCBhIHN1cGVyc3RhdGUgaW1wbGllcyBtYW55IHRy
YW5zaXRpb25zIGluIHRoZSBORkEgLS0KICogdGhvc2UgdGhhdCBiZWdpbiB3aXRoIGFuIGVkZ2Ug
bGFiZWxlZCB3aXRoIHRoYXQgY2hhcmFjdGVyIGZyb20gYQogKiBzdGF0ZSBpbiB0aGUgc2V0IGNv
cnJlc3BvbmRpbmcgdG8gdGhlIHN1cGVyc3RhdGUuCiAqIAogKiBUaGUgZGVzdGluYXRpb25zIG9m
IHRob3NlIHRyYW5zaXRpb25zIGVhY2ggaGF2ZSBhIHNldCBvZiBwb3NzaWJsZQogKiBmdXR1cmVz
LiAgQSBwb3NzaWJsZSBmdXR1cmUgaXMgYSBsaXN0IG9mIHNpZGUgZWZmZWN0cyBhbmQgYSBzZXQg
b2YKICogZGVzdGluYXRpb24gTkZBIHN0YXRlcy4gIFR3byBzZXRzIG9mIHBvc3NpYmxlIGZ1dHVy
ZXMgY2FuIGJlCiAqIGBtZXJnZWQnIGJ5IGNvbWJpbmluZyBhbGwgcGFpcnMgb2YgcG9zc2libGUg
ZnV0dXJlcyB0aGF0IGhhdmUgdGhlCiAqIHNhbWUgc2lkZSBlZmZlY3RzLiAgQSBwYWlyIGlzIGNv
bWJpbmVkIGJ5IGNyZWF0aW5nIGEgbmV3IGZ1dHVyZQogKiB3aXRoIHRoZSBzYW1lIHNpZGUgZWZm
ZWN0IGJ1dCB0aGUgdW5pb24gb2YgdGhlIHR3byBkZXN0aW5hdGlvbiBzZXRzLgogKiBJbiB0aGlz
IHdheSwgYWxsIHRoZSBwb3NzaWJsZSBmdXR1cmVzIHN1Z2dlc3RlZCBieSBhIHN1cGVyc3RhdGUK
ICogYW5kIGEgY2hhcmFjdGVyIGNhbiBiZSBtZXJnZWQgaW50byBhIHNldCBvZiBwb3NzaWJsZSBm
dXR1cmVzIHdoZXJlCiAqIG5vIHR3byBlbGVtZW50cyBvZiB0aGUgc2V0IGhhdmUgdGhlIHNhbWUg
c2V0IG9mIHNpZGUgZWZmZWN0cy4KICoKICogVGhlIGRlc3RpbmF0aW9uIG9mIGEgcG9zc2libGUg
ZnV0dXJlLCBiZWluZyBhIHNldCBvZiBORkEgc3RhdGVzLCAKICogY29ycmVzcG9uZHMgdG8gYSBz
dXBlcm5mYSBzdGF0ZS4gIFNvLCB0aGUgbWVyZ2VkIHNldCBvZiBwb3NzaWJsZQogKiBmdXR1cmVz
IHdlIGp1c3QgY3JlYXRlZCBjYW4gc2VydmUgYXMgYSBzZXQgb2YgZWRnZXMgaW4gdGhlCiAqIHN1
cGVybmZhLgogKgogKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN1cGVyc3RhdGUgbmZhIGFu
ZCB0aGUgbmZhIGlzIGNyaXRpY2FsLgogKiBUaGUgbmZhIGhhcyB0byBiZSBjb21wYWN0LCBidXQg
aGFzIHRvIGZhY2lsaXRhdGUgdGhlIHJhcGlkCiAqIGNvbXB1dGF0aW9uIG9mIG1pc3Npbmcgc3Vw
ZXJzdGF0ZXMuICBUaGUgc3VwZXJzdGF0ZSBuZmEgaGFzIHRvIAogKiBiZSBmYXN0IHRvIGludGVy
cHJldCwgbGF6aWxseSBjb25zdHJ1Y3RlZCwgYW5kIGJvdW5kZWQgaW4gc3BhY2UuCiAqCiAqIFRv
IGZhY2lsaXRhdGUgaW50ZXJwcmV0YXRpb24sIHRoZSBzdXBlcnN0YXRlIGRhdGEgc3RydWN0dXJl
cyBhcmUgCiAqIHBlcHBlcmVkIHdpdGggYGluc3RydWN0aW9uIGZyYW1lcycuICBUaGVyZSBpcyBh
biBpbnN0cnVjdGlvbiBzZXQKICogZGVmaW5lZCBiZWxvdyB3aGljaCBtYXRjaGVycyB1c2luZyB0
aGUgc3VwZXJuZmEgbXVzdCBiZSBhYmxlIHRvCiAqIGludGVycHJldC4KICoKICogV2UnZCBsaWtl
IHRvIG1ha2UgaXQgcG9zc2libGUgYnV0IG5vdCBtYW5kYXRvcnkgdG8gdXNlIGNvZGUKICogYWRk
cmVzc2VzIHRvIHJlcHJlc2VudCBpbnN0cnVjdGlvbnMgKGMuZi4gZ2NjJ3MgY29tcHV0ZWQgZ290
bykuCiAqIFRoZXJlZm9yZSwgd2UgZGVmaW5lIGFuIGVudW1lcmF0ZWQgdHlwZSBvZiBvcGNvZGVz
LCBhbmQgd2hlbgogKiB3cml0aW5nIG9uZSBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgaW50byBhIGRh
dGEgc3RydWN0dXJlLCB1c2UKICogdGhlIG9wY29kZSBhcyBhbiBpbmRleCBpbnRvIGEgdGFibGUg
b2YgaW5zdHJ1Y3Rpb24gdmFsdWVzLgogKiAKICogSGVyZSBhcmUgdGhlIG9wY29kZXMgdGhhdCBv
Y2N1ciBpbiB0aGUgc3VwZXJzdGF0ZSBuZmE6CiAqLwogCgovKiBFdmVyeSBzdXBlcnN0YXRlIGNv
bnRhaW5zIGEgdGFibGUgb2YgaW5zdHJ1Y3Rpb24gZnJhbWVzIGluZGV4ZWQgCiAqIGJ5IGNoYXJh
Y3RlcnMuICBBIG5vcm1hbCBgbW92ZScgaW4gYSBtYXRjaGVyIGlzIHRvIGZldGNoIHRoZSBuZXh0
CiAqIGNoYXJhY3RlciBhbmQgdXNlIGl0IGFzIGFuIGluZGV4IGludG8gYSBzdXBlcnN0YXRlcyB0
cmFuc2l0aW9uCiAqIHRhYmxlLgogKgogKiBJbiB0aGUgZmFzdGVkIGNhc2UsIG9ubHkgb25lIGVk
Z2UgZm9sbG93cyBmcm9tIHRoYXQgY2hhcmFjdGVyLgogKiBJbiBvdGhlciBjYXNlcyB0aGVyZSBp
cyBtb3JlIHdvcmsgdG8gZG8uCiAqIAogKiBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZSBvcGNvZGVz
IHJlZmVyIHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZQogKiBkZXNjcmliZWQgZnVydGhlciBi
ZWxvdy4gCiAqLwoKZW51bSByeF9vcGNvZGUKewogIC8qIAogICAqIEJBQ0tUUkFDS19QT0lOVCBp
cyBpbnZva2VkIHdoZW4gYSBjaGFyYWN0ZXIgdHJhbnNpdGlvbiBpbiAKICAgKiBhIHN1cGVyc3Rh
dGUgbGVhZHMgdG8gbW9yZSB0aGFuIG9uZSBlZGdlLiAgSW4gdGhhdCBjYXNlLAogICAqIHRoZSBl
ZGdlcyBoYXZlIHRvIGJlIGV4cGxvcmVkIGluZGVwZW5kZW50bHkgdXNpbmcgYSBiYWNrdHJhY2tp
bmcKICAgKiBzdHJhdGVneS4KICAgKgogICAqIEEgQkFDS1RSQUNLX1BPSU5UIGluc3RydWN0aW9u
IGlzIHN0b3JlZCBpbiBhIHN1cGVyc3RhdGUncyAKICAgKiB0cmFuc2l0aW9uIHRhYmxlIGZvciBz
b21lIGNoYXJhY3RlciB3aGVuIGl0IGlzIGtub3duIHRoYXQgdGhhdAogICAqIGNoYXJhY3RlciBj
cm9zc2VzIG1vcmUgdGhhbiBvbmUgZWRnZS4gIE9uIGVuY291bnRlcmluZyB0aGlzCiAgICogaW5z
dHJ1Y3Rpb24sIHRoZSBtYXRjaGVyIHNhdmVzIGVub3VnaCBzdGF0ZSB0byBiYWNrdHJhY2sgdG8g
dGhpcwogICAqIHBvaW50IGluIHRoZSBtYXRjaCBsYXRlci4KICAgKi8KICByeF9iYWNrdHJhY2tf
cG9pbnQgPSAwLAkvKiBkYXRhIGlzIChzdHJ1Y3QgdHJhbnNpdGlvbl9jbGFzcyAqKSAqLwoKICAv
KiAKICAgKiBSWF9ET19TSURFX0VGRkVDVFMgZXZhbHVhdGVzIHRoZSBzaWRlIGVmZmVjdHMgb2Yg
YW4gZXBzaWxvbiBwYXRoLgogICAqIFRoZXJlIGlzIG9uZSBvY2N1cmVuY2Ugb2YgdGhpcyBpbnN0
cnVjdGlvbiBwZXIgcnhfZGlzdGluY3RfZnV0dXJlLgogICAqIFRoaXMgaW5zdHJ1Y3Rpb24gaXMg
c2tpcHBlZCBpZiBhIHJ4X2Rpc3RpbmN0X2Z1dHVyZSBoYXMgbm8gc2lkZSBlZmZlY3RzLgogICAq
LwogIHJ4X2RvX3NpZGVfZWZmZWN0cyA9IHJ4X2JhY2t0cmFja19wb2ludCArIDEsCgogIC8qIGRh
dGEgaXMgKHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKikgKi8KCiAgLyogCiAgICogUlhfQ0FD
SEVfTUlTUyBpbnN0cnVjdGlvbnMgYXJlIHN0b3JlZCBpbiByeF9kaXN0aW5jdF9mdXR1cmVzIHdo
b3NlCiAgICogZGVzdGluYXRpb24gc3VwZXJzdGF0ZSBoYXMgYmVlbiByZWNsYWltZWQgKG9yIHdh
cyBuZXZlciBidWlsdCkuCiAgICogSXQgcmVjb21wdXRlcyB0aGUgZGVzdGluYXRpb24gc3VwZXJz
dGF0ZS4KICAgKiBSWF9DQUNIRV9NSVNTIGlzIGFsc28gc3RvcmVkIGluIGEgc3VwZXJzdGF0ZSB0
cmFuc2l0aW9uIHRhYmxlIGJlZm9yZQogICAqIGFueSBvZiBpdHMgZWRnZXMgaGF2ZSBiZWVuIGJ1
aWx0LgogICAqLwogIHJ4X2NhY2hlX21pc3MgPSByeF9kb19zaWRlX2VmZmVjdHMgKyAxLAogIC8q
IGRhdGEgaXMgKHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKikgKi8KCiAgLyogCiAgICogUlhf
TkVYVF9DSEFSIGlzIGNhbGxlZCB0byBjb25zdW1lIHRoZSBuZXh0IGNoYXJhY3RlciBhbmQgdGFr
ZSB0aGUKICAgKiBjb3JyZXNwb25kaW5nIHRyYW5zaXRpb24uICBUaGlzIGlzIHRoZSBvbmx5IGlu
c3RydWN0aW9uIHRoYXQgdXNlcyAKICAgKiB0aGUgREFUQSBmaWVsZCBvZiB0aGUgaW5zdHJ1Y3Rp
b24gZnJhbWUgaW5zdGVhZCBvZiBEQVRBXzIuCiAgICogKHNlZSBFWFBMT1JFX0ZVVFVSRSBpbiBy
ZWdleC5jKS4KICAgKi8KICByeF9uZXh0X2NoYXIgPSByeF9jYWNoZV9taXNzICsgMSwgLyogZGF0
YSBpcyAoc3RydWN0IHN1cGVyc3RhdGUgKikgKi8KCiAgLyogUlhfQkFDS1RSQUNLIGluZGljYXRl
cyB0aGF0IGEgdHJhbnNpdGlvbiBmYWlscy4KICAgKi8KICByeF9iYWNrdHJhY2sgPSByeF9uZXh0
X2NoYXIgKyAxLCAvKiBubyBkYXRhICovCgogIC8qIAogICAqIFJYX0VSUk9SX0lOWCBpcyBzdG9y
ZWQgb25seSBpbiBwbGFjZXMgdGhhdCBzaG91bGQgbmV2ZXIgYmUgZXhlY3V0ZWQuCiAgICovCiAg
cnhfZXJyb3JfaW54ID0gcnhfYmFja3RyYWNrICsgMSwgLyogTm90IHN1cHBvc2VkIHRvIG9jY3Vy
LiAqLwoKICByeF9udW1faW5zdHJ1Y3Rpb25zID0gcnhfZXJyb3JfaW54ICsgMQp9OwoKLyogQW4g
aWRfaW5zdHJ1Y3Rpb25fdGFibGUgaG9sZHMgdGhlIHZhbHVlcyBzdG9yZWQgaW4gaW5zdHJ1Y3Rp
b24KICogZnJhbWVzLiAgVGhlIHRhYmxlIGlzIGluZGV4ZWQgYnkgdGhlIGVudW1zIGRlY2xhcmVk
IGFib3ZlLgogKi8KZXh0ZXJuIHZvaWQgKiByeF9pZF9pbnN0cnVjdGlvbl90YWJsZVtyeF9udW1f
aW5zdHJ1Y3Rpb25zXTsKCi8qIFRoZSBoZWFydCBvZiB0aGUgbWF0Y2hlciBpcyBhIGB3b3JkLWNv
ZGUtaW50ZXJwcmV0ZXInIAogKiAobGlrZSBhIGJ5dGUtY29kZSBpbnRlcnByZXRlciwgZXhjZXB0
IHRoYXQgaW5zdHJ1Y3Rpb25zCiAqIGFyZSBhIGZ1bGwgd29yZCB3aWRlKS4KICoKICogSW5zdHJ1
Y3Rpb25zIGFyZSBub3Qgc3RvcmVkIGluIGEgdmVjdG9yIG9mIGNvZGUsIGluc3RlYWQsCiAqIHRo
ZXkgYXJlIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYnVpbHQKICog
YnkgdGhlIHJlZ2V4cCBjb21waWxlciBhbmQgdGhlIG1hdGNoZXIuICBPbmUgd29yZC1jb2RlIGlu
c3RydWN0aW9uLAogKiB0b2dldGhlciB3aXRoIHRoZSBhcmd1bWVudHMgdG8gdGhhdCBpbnN0cnVj
dGlvbiwgY29uc3RpdHV0ZQogKiBhbiBpbnN0cnVjdGlvbiBmcmFtZSAoc3RydWN0IHJ4X2lueCku
CiAqCiAqIFRoaXMgc3RydWN0dXJlIHR5cGUgaXMgcGFkZGVkIGJ5IGhhbmQgdG8gYSBwb3dlciBv
ZiAyIGJlY2F1c2UKICogaW4gb25lIG9mIHRoZSBkb21pbmFudCBjYXNlcywgd2UgZGlzcGF0Y2gg
YnkgaW5kZXhpbmcgYSB0YWJsZQogKiBvZiBpbnN0cnVjdGlvbiBmcmFtZXMuICBJZiB0aGF0IGlu
ZGV4aW5nIGNhbiBiZSBhY2NvbXBsaXNoZWQKICogYnkganVzdCBhIHNoaWZ0IG9mIHRoZSBpbmRl
eCwgd2UncmUgaGFwcHkuCiAqCiAqIEluc3RydWN0aW9ucyB0YWtlIGF0IG1vc3Qgb25lIGFyZ3Vt
ZW50LCBidXQgdGhlcmUgYXJlIHR3bwogKiBzbG90cyBpbiBhbiBpbnN0cnVjdGlvbiBmcmFtZSB0
aGF0IG1pZ2h0IGhvbGQgdGhhdCBhcmd1bWVudC4KICogVGhlc2UgYXJlIGNhbGxlZCBkYXRhIGFu
ZCBkYXRhXzIuICBUaGUgZGF0YSBzbG90IGlzIG9ubHkKICogdXNlZCBmb3Igb25lIGluc3RydWN0
aW9uIChSWF9ORVhUX0NIQVIpLiAgRm9yIGFsbCBvdGhlciAKICogaW5zdHJ1Y3Rpb25zLCBkYXRh
IHNob3VsZCBiZSBzZXQgdG8gMC4KICoKICogUlhfTkVYVF9DSEFSIGlzIHRoZSBtb3N0IGltcG9y
dGFudCBpbnN0cnVjdGlvbiBieSBmYXIuCiAqIEJ5IHJlc2VydmluZyB0aGUgZGF0YSBmaWVsZCBm
b3IgaXRzIGV4Y2x1c2l2ZSB1c2UsIAogKiBpbnN0cnVjdGlvbiBkaXNwYXRjaCBpcyBzcGVkIHVw
IGluIHRoYXQgY2FzZS4gIFRoZXJlIGlzCiAqIG5vIG5lZWQgdG8gZmV0Y2ggYm90aCB0aGUgaW5z
dHJ1Y3Rpb24gYW5kIHRoZSBkYXRhLAogKiBvbmx5IHRoZSBkYXRhIGlzIG5lZWRlZC4gIEluIG90
aGVyIHdvcmRzLCBhIGBjeWNsZScgYmVnaW5zCiAqIGJ5IGZldGNoaW5nIHRoZSBmaWVsZCBkYXRh
LiAgSWYgdGhhdCBpcyBub24tMCwgdGhlbiBpdCBtdXN0CiAqIGJlIHRoZSBkZXN0aW5hdGlvbiBz
dGF0ZSBvZiBhIG5leHRfY2hhciB0cmFuc2l0aW9uLCBzbwogKiBtYWtlIHRoYXQgdmFsdWUgdGhl
IGN1cnJlbnQgc3RhdGUsIGFkdmFuY2UgdGhlIG1hdGNoIHBvc2l0aW9uCiAqIGJ5IG9uZSBjaGFy
YWN0ZXIsIGFuZCBzdGFydCBhIG5ldyBjeWNsZS4gIE9uIHRoZSBvdGhlciBoYW5kLAogKiBpZiBk
YXRhIGlzIDAsIGZldGNoIHRoZSBpbnN0cnVjdGlvbiBhbmQgZG8gYSBtb3JlIGNvbXBsaWNhdGVk
CiAqIGRpc3BhdGNoIG9uIHRoYXQuCiAqLwoKc3RydWN0IHJ4X2lueCAKewogIHZvaWQgKiBkYXRh
OwogIHZvaWQgKiBkYXRhXzI7CiAgdm9pZCAqIGlueDsKICB2b2lkICogZm5vcmQ7Cn07CgojaWZu
ZGVmIFJYX1RBSUxfQVJSQVkKI2RlZmluZSBSWF9UQUlMX0FSUkFZICAxCiNlbmRpZgoKLyogQSBz
dXBlcnN0YXRlIGNvcnJlc3BvbmRzIHRvIGEgc2V0IG9mIG5mYSBzdGF0ZXMuICBUaG9zZSBzZXRz
IGFyZQogKiByZXByZXNlbnRlZCBieSBTVFJVQ1QgUlhfU1VQRVJTRVQuICBUaGUgY29uc3RydWN0
b3JzCiAqIGd1YXJhbnRlZSB0aGF0IG9ubHkgb25lIChzaGFyZWQpIHN0cnVjdHVyZSBpcyBjcmVh
dGVkIGZvciBhIGdpdmVuIHNldC4KICovCnN0cnVjdCByeF9zdXBlcnNldAp7CiAgaW50IHJlZnM7
CQkJLyogVGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIHN0cnVjdHVyZS4gKi8KCiAgLyogV2Ug
a2VlcCB0aGVzZSBzZXRzIGluIGEgY2FjaGUgYmVjYXVzZSAoaW4gYW4gdW5wcmVkaWN0YWJsZSB3
YXkpLAogICAqIHRoZSBzYW1lIHNldCBpcyBvZnRlbiBjcmVhdGVkIGFnYWluIGFuZCBhZ2Fpbi4g
IEJ1dCB0aGF0IGlzIGFsc28KICAgKiBwcm9ibGVtYXRpYyAtLSBjb21wYXRpYmlsaXR5IHdpdGgg
UE9TSVggYW5kIEdOVSByZWdleCByZXF1aXJlcwogICAqIHRoYXQgd2Ugbm90IGJlIGFibGUgdG8g
dGVsbCB3aGVuIGEgcHJvZ3JhbSBkaXNjYXJkcyBhIHBhcnRpY3VsYXIKICAgKiBORkEgKHRodXMg
aW52YWxpZGF0aW5nIHRoZSBzdXBlcnNldHMgY3JlYXRlZCBmcm9tIGl0KS4KICAgKgogICAqIEJ1
dCB3aGVuIGEgY2FjaGUgaGl0IGFwcGVhcnMgdG8gb2NjdXIsIHdlIHdpbGwgaGF2ZSBpbiBoYW5k
IHRoZQogICAqIG5mYSBmb3Igd2hpY2ggaXQgbWF5IGhhdmUgaGFwcGVuZWQuICBUaGF0IGlzIHdo
eSBldmVyeSBuZmEgaXMgZ2l2ZW4KICAgKiBpdHMgb3duIHNlcXVlbmNlIG51bWJlci4gIE9uIGEg
Y2FjaGUgaGl0LCB0aGUgY2FjaGUgaXMgdmFsaWRhdGVkCiAgICogYnkgY29tcGFyaW5nIHRoZSBu
ZmEgc2VxdWVuY2UgbnVtYmVyIHRvIHRoaXMgZmllbGQ6CiAgICovCiAgaW50IGlkOwoKICBzdHJ1
Y3QgcnhfbmZhX3N0YXRlICogY2FyOwkvKiBNYXkgb3IgbWF5IG5vdCBiZSBhIHZhbGlkIGFkZHIu
ICovCiAgc3RydWN0IHJ4X3N1cGVyc2V0ICogY2RyOwoKICAvKiBJZiB0aGUgY29ycmVzcG9uZGlu
ZyBzdXBlcnN0YXRlIGV4aXN0czogKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cGVyc3Rh
dGU7CgoKICAvKiBUaGVyZSBpcyBhbm90aGVyIGJvb2trZWVwaW5nIHByb2JsZW0uICBJdCBpcyBl
eHBlbnNpdmUgdG8gCiAgICogY29tcHV0ZSB0aGUgc3RhcnRpbmcgbmZhIHN0YXRlIHNldCBmb3Ig
YW4gbmZhLiAgU28sIG9uY2UgY29tcHV0ZWQsCiAgICogaXQgaXMgY2FjaGVkIGluIHRoZSBgc3Ry
dWN0IHJ4Jy4KICAgKgogICAqIEJ1dCwgdGhlIHN0YXRlIHNldCBjYW4gYmUgZmx1c2hlZCBmcm9t
IHRoZSBzdXBlcnN0YXRlIGNhY2hlLgogICAqIFdoZW4gdGhhdCBoYXBwZW5zLCB3ZSBjYW4ndCBr
bm93IGlmIHRoZSBjb3JyZXNwb25kaW5nIGBzdHJ1Y3QgcngnCiAgICogaXMgc3RpbGwgYWxpdmUg
b3IgaWYgaXQgaGFzIGJlZW4gZnJlZWQgb3IgcmUtdXNlZCBieSB0aGUgcHJvZ3JhbS4KICAgKiBT
bywgdGhlIGNhY2hlZCBwb2ludGVyIHRvIHRoaXMgc2V0IGluIGEgc3RydWN0IHJ4IG1pZ2h0IGJl
IGludmFsaWQKICAgKiBhbmQgd2UgbmVlZCBhIHdheSB0byB2YWxpZGF0ZSBpdC4KICAgKgogICAq
IEZvcnR1bmF0ZWx5LCBldmVuIGlmIHRoaXMgc2V0IGlzIGZsdXNoZWQgZnJvbSB0aGUgY2FjaGUs
IGl0IGlzCiAgICogbm90IGZyZWVkLiAgSXQganVzdCBnb2VzIG9uIHRoZSBmcmVlLWxpc3Qgb2Yg
c3VwZXJzZXRzLgogICAqIFNvIHdlIGNhbiBzdGlsbCBleGFtaW5lIGl0LiAgCiAgICoKICAgKiBT
byB0byB2YWxpZGF0ZSBhIHN0YXJ0aW5nIHNldCBtZW1vLCBjaGVjayB0byBzZWUgaWYgdGhlCiAg
ICogc3RhcnRzX2ZvciBmaWVsZCBzdGlsbCBwb2ludHMgYmFjayB0byB0aGUgc3RydWN0IHJ4IGlu
IHF1ZXN0aW9uLAogICAqIGFuZCBpZiB0aGUgSUQgbWF0Y2hlcyB0aGUgcnggc2VxdWVuY2UgbnVt
YmVyLgogICAqLwogIHN0cnVjdCByeCAqIHN0YXJ0c19mb3I7CgogIC8qIFRoaXMgaXMgdXNlZCB0
byBsaW5rIGludG8gYSBoYXNoIGJ1Y2tldCBzbyB0aGVzZSBvYmplY3RzIGNhbgogICAqIGJlIGBo
YXNoLWNvbnNlZCcuCiAgICovCiAgc3RydWN0IHJ4X2hhc2hfaXRlbSBoYXNoX2l0ZW07Cn07Cgoj
ZGVmaW5lIHJ4X3Byb3RlY3Rfc3VwZXJzZXQoUlgsQ09OKSAoKysoQ09OKS0+cmVmcykKCi8qIFRo
ZSB0ZXJtaW5vbG9neSBtYXkgYmUgY29uZnVzaW5nIChyZW5hbWUgdGhpcyBzdHJ1Y3R1cmU/KS4K
ICogRXZlcnkgY2hhcmFjdGVyIG9jY3VycyBpbiBhdCBtb3N0IG9uZSByeF9zdXBlcl9lZGdlIHBl
ciBzdXBlci1zdGF0ZS4KICogQnV0LCB0aGF0IHN0cnVjdHVyZSBtaWdodCBoYXZlIG1vcmUgdGhh
biBvbmUgb3B0aW9uLCBpbmRpY2F0aW5nIGEgcG9pbnQKICogb2Ygbm9uLWRldGVybWluaXNtLiAK
ICoKICogSW4gb3RoZXIgd29yZHMsIHRoaXMgc3RydWN0dXJlIGhvbGRzIGEgbGlzdCBvZiBzdXBl
cnN0YXRlIGVkZ2VzCiAqIHNoYXJpbmcgYSBjb21tb24gc3RhcnRpbmcgc3RhdGUgYW5kIGNoYXJh
Y3RlciBsYWJlbC4gIFRoZSBlZGdlcwogKiBhcmUgaW4gdGhlIGZpZWxkIE9QVElPTlMuICBBbGwg
c3VwZXJzdGF0ZSBlZGdlcyBzaGFyaW5nIHRoZSBzYW1lCiAqIHN0YXJ0aW5nIHN0YXRlIGFuZCBj
aGFyYWN0ZXIgYXJlIGluIHRoaXMgbGlzdC4KICovCnN0cnVjdCByeF9zdXBlcl9lZGdlCnsKICBz
dHJ1Y3Qgcnhfc3VwZXJfZWRnZSAqbmV4dDsKICBzdHJ1Y3QgcnhfaW54IHJ4X2JhY2t0cmFja19m
cmFtZTsKICBpbnQgY3NldF9zaXplOwogIHJ4X0JpdHNldCBjc2V0OwogIHN0cnVjdCByeF9kaXN0
aW5jdF9mdXR1cmUgKm9wdGlvbnM7Cn07CgovKiBBIHN1cGVyc3RhdGUgaXMgYSBzZXQgb2YgbmZh
IHN0YXRlcyAoUlhfU1VQRVJTRVQpIGFsb25nCiAqIHdpdGggYSB0cmFuc2l0aW9uIHRhYmxlLiAg
U3VwZXJzdGF0ZXMgYXJlIGJ1aWx0IG9uIGRlbWFuZCBhbmQgcmVjbGFpbWVkCiAqIHdpdGhvdXQg
d2FybmluZy4gIFRvIHByb3RlY3QgYSBzdXBlcnN0YXRlIGZyb20gdGhpcyBnaGFzdGx5IGZhdGUs
CiAqIHVzZSBMT0NLX1NVUEVSU1RBVEUuIAogKi8Kc3RydWN0IHJ4X3N1cGVyc3RhdGUKewogIGlu
dCByeF9pZDsJCQkvKiBjLmYuIHRoZSBpZCBmaWVsZCBvZiByeF9zdXBlcnNldCAqLwogIGludCBs
b2NrczsJCQkvKiBwcm90ZWN0aW9uIGZyb20gcmVjbGFtYXRpb24gKi8KCiAgLyogV2l0aGluIGEg
c3VwZXJzdGF0ZSBjYWNoZSwgYWxsIHRoZSBzdXBlcnN0YXRlcyBhcmUga2VwdCBpbiBhIGJpZwog
ICAqIHF1ZXVlLiAgVGhlIHRhaWwgb2YgdGhlIHF1ZXVlIGlzIHRoZSBzdGF0ZSBtb3N0IGxpa2Vs
eSB0byBiZQogICAqIHJlY2xhaW1lZC4gIFRoZSAqcmVjeWNsYWJsZSBmaWVsZHMgaG9sZCB0aGUg
cXVldWUgcG9zaXRpb24gb2YgCiAgICogdGhpcyBzdGF0ZS4KICAgKi8KICBzdHJ1Y3Qgcnhfc3Vw
ZXJzdGF0ZSAqIG5leHRfcmVjeWNsYWJsZTsKICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHByZXZf
cmVjeWNsYWJsZTsKCiAgLyogVGhlIHN1cGVybmZhIGVkZ2VzIHRoYXQgZXhpc3QgaW4gdGhlIGNh
Y2hlIGFuZCB0aGF0IGhhdmUKICAgKiB0aGlzIHN0YXRlIGFzIHRoZWlyIGRlc3RpbmF0aW9uIGFy
ZSBrZXB0IGluIHRoaXMgbGlzdDoKICAgKi8KICBzdHJ1Y3QgcnhfZGlzdGluY3RfZnV0dXJlICog
dHJhbnNpdGlvbl9yZWZzOwoKICAvKiBUaGUgbGlzdCBvZiBuZmEgc3RhdGVzIGNvcnJlc3BvbmRp
bmcgdG8gdGhpcyBzdXBlcnN0YXRlOiAqLwogIHN0cnVjdCByeF9zdXBlcnNldCAqIGNvbnRlbnRz
OwoKICAvKiBUaGUgbGlzdCBvZiBlZGdlcyBpbiB0aGUgY2FjaGUgYmVnaW5uaW5nIGZyb20gdGhp
cyBzdGF0ZS4gKi8KICBzdHJ1Y3Qgcnhfc3VwZXJfZWRnZSAqIGVkZ2VzOwoKICAvKiBBIHRhaWwg
b2YgdGhlIHJlY3ljbGFibGUgcXVldWUgaXMgbWFya2VkIGFzIHNlbWlmcmVlLiAgQSBzZW1pZnJl
ZQogICAqIHN0YXRlIGhhcyBubyBpbmNvbWluZyBuZXh0X2NoYXIgdHJhbnNpdGlvbnMgLS0gYW55
IHRyYW5zaXRpb24KICAgKiBpbnRvIGEgc2VtaWZyZWUgc3RhdGUgY2F1c2VzIGEgY29tcGxleCBk
aXNwYXRjaCB3aXRoIHRoZSBzaWRlCiAgICogZWZmZWN0IG9mIHJlc2N1aW5nIHRoZSBzdGF0ZSBm
cm9tIGl0cyBzZW1pZnJlZSBzdGF0ZS4KICAgKgogICAqIEFuIGFsdGVybmF0aXZlIHRvIHRoaXMg
bWlnaHQgYmUgdG8gbWFrZSBuZXh0X2NoYXIgbW9yZSBleHBlbnNpdmUsCiAgICogYW5kIHRvIG1v
dmUgYSBzdGF0ZSB0byB0aGUgaGVhZCBvZiB0aGUgcmVjeWNsYWJsZSBxdWV1ZSB3aGVuZXZlcgog
ICAqIGl0IGlzIGVudGVyZWQuICBUaGF0IHdheSwgcG9wdWxhciBzdGF0ZXMgd291bGQgbmV2ZXIg
YmUgcmVjeWNsZWQuCiAgICoKICAgKiBCdXQgdW5pbGF0ZXJhbGx5IG1ha2luZyBuZXh0X2NoYXIg
bW9yZSBleHBlbnNpdmUgYWN0dWFsbHkgbG9zZXMuCiAgICogU28sIGluY29taW5nIHRyYW5zaXRp
b25zIGFyZSBvbmx5IG1hZGUgZXhwZW5zaXZlIGZvciBzdGF0ZXMgbmVhcgogICAqIHRoZSB0YWls
IG9mIHRoZSByZWN5Y2xhYmxlIHF1ZXVlLiAgVGhlIG1vcmUgY2FjaGUgY29udGVudGlvbgogICAq
IHRoZXJlIGlzLCB0aGUgbW9yZSBmcmVxdWVudGx5IGEgc3RhdGUgd2lsbCBoYXZlIHRvIHByb3Zl
IGl0c2VsZgogICAqIGFuZCBiZSBtb3ZlZCBiYWNrIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVldWUu
ICBJZiB0aGVyZSBpcyBsZXNzIAogICAqIGNvbnRlbnRpb24sIHRoZW4gcG9wdWxhciBzdGF0ZXMg
anVzdCBhZ2dyZWdhdGUgaW4gdGhlIGZyb250IG9mIAogICAqIHRoZSBxdWV1ZSBhbmQgc3RheSB0
aGVyZS4KICAgKi8KICBpbnQgaXNfc2VtaWZyZWU7CgoKICAvKiBUaGlzIGtlZXBzIHRyYWNrIG9m
IHRoZSBzaXplIG9mIHRoZSB0cmFuc2l0aW9uIHRhYmxlIGZvciB0aGlzCiAgICogc3RhdGUuICBU
aGVyZSBpcyBhIGhhbGYtaGVhcnRlZCBhdHRlbXB0IHRvIHN1cHBvcnQgdmFyaWFibGUgc2l6ZWQK
ICAgKiBzdXBlcnN0YXRlcy4KICAgKi8KICBpbnQgdHJhbnNfc2l6ZTsKCiAgLyogSW5kZXhlZCBi
eSBjaGFyYWN0ZXJzLi4uICovCiAgc3RydWN0IHJ4X2lueCB0cmFuc2l0aW9uc1tSWF9UQUlMX0FS
UkFZXTsKfTsKCgovKiBBIGxpc3Qgb2YgZGlzdGluY3QgZnV0dXJlcyBkZWZpbmUgdGhlIGVkZ2Vz
IHRoYXQgbGVhdmUgZnJvbSBhIAogKiBnaXZlbiBzdXBlcnN0YXRlIG9uIGEgZ2l2ZW4gY2hhcmFj
dGVyLiAgYy5mLiByeF9zdXBlcl9lZGdlLgogKi8KCnN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUK
ewogIHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1cmUgKiBuZXh0X3NhbWVfc3VwZXJfZWRnZVsyXTsK
ICBzdHJ1Y3QgcnhfZGlzdGluY3RfZnV0dXJlICogbmV4dF9zYW1lX2Rlc3Q7CiAgc3RydWN0IHJ4
X2Rpc3RpbmN0X2Z1dHVyZSAqIHByZXZfc2FtZV9kZXN0OwogIHN0cnVjdCByeF9zdXBlcnN0YXRl
ICogcHJlc2VudDsJLyogc291cmNlIHN0YXRlICovCiAgc3RydWN0IHJ4X3N1cGVyc3RhdGUgKiBm
dXR1cmU7CS8qIGRlc3RpbmF0aW9uIHN0YXRlICovCiAgc3RydWN0IHJ4X3N1cGVyX2VkZ2UgKiBl
ZGdlOwoKCiAgLyogVGhlIGZ1dHVyZV9mcmFtZSBob2xkcyB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBz
aG91bGQgYmUgZXhlY3V0ZWQKICAgKiBhZnRlciBhbGwgdGhlIHNpZGUgZWZmZWN0cyBhcmUgZG9u
ZSwgd2hlbiBpdCBpcyB0aW1lIHRvIGNvbXBsZXRlCiAgICogdGhlIHRyYW5zaXRpb24gdG8gdGhl
IG5leHQgc3RhdGUuCiAgICoKICAgKiBOb3JtYWxseSB0aGlzIGlzIGEgbmV4dF9jaGFyIGluc3Ry
dWN0aW9uLCBidXQgaXQgbWF5IGJlIGEKICAgKiBjYWNoZV9taXNzIGluc3RydWN0aW9uIGFzIHdl
bGwsIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdAogICAqIHRoZSBzdXBlcnN0YXRlIGlzIGlu
IHRoZSBjYWNoZSBhbmQgc2VtaWZyZWUuCiAgICogCiAgICogSWYgdGhpcyBpcyB0aGUgb25seSBm
dXR1cmUgZm9yIGEgZ2l2ZW4gc3VwZXJzdGF0ZS9jaGFyLCBhbmQKICAgKiBpZiB0aGVyZSBhcmUg
bm8gc2lkZSBlZmZlY3RzIHRvIGJlIHBlcmZvcm1lZCwgdGhpcyBmcmFtZSBpcwogICAqIG5vdCB1
c2VkIChkaXJlY3RseSkgYXQgYWxsLiAgSW5zdGVhZCwgaXRzIGNvbnRlbnRzIGFyZSBjb3BpZWQK
ICAgKiBpbnRvIHRoZSB0cmFuc2l0aW9uIHRhYmxlIG9mIHRoZSBzdGFydGluZyBzdGF0ZSBvZiB0
aGlzIGRpc3QuIGZ1dHVyZS4KICAgKi8KICBzdHJ1Y3QgcnhfaW54IGZ1dHVyZV9mcmFtZTsKCiAg
c3RydWN0IHJ4X2lueCBzaWRlX2VmZmVjdHNfZnJhbWU7CiAgc3RydWN0IHJ4X3NlX2xpc3QgKiBl
ZmZlY3RzOwp9OwoKI2RlZmluZSByeF9sb2NrX3N1cGVyc3RhdGUoUixTKSAgKChTKS0+bG9ja3Mr
KykKI2RlZmluZSByeF91bmxvY2tfc3VwZXJzdGF0ZShSLFMpICgtLShTKS0+bG9ja3MpCgoMCi8q
IFRoaXMgcGFnZSBkZXN0aW5lZCBmb3IgcnguaCAqLwoKc3RydWN0IHJ4X2Jsb2NrbGlzdAp7CiAg
c3RydWN0IHJ4X2Jsb2NrbGlzdCAqIG5leHQ7CiAgaW50IGJ5dGVzOwp9OwoKc3RydWN0IHJ4X2Zy
ZWVsaXN0CnsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBuZXh0Owp9OwoKc3RydWN0IHJ4X2NhY2hl
OwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X21vcmVjb3JlX2ZuKShzdHJ1Y3Qg
cnhfY2FjaGUgKik7CiNlbHNlCnR5cGVkZWYgdm9pZCAoKnJ4X21vcmVjb3JlX2ZuKSgpOwojZW5k
aWYKCi8qIFlvdSB1c2UgdGhpcyB0byBjb250cm9sIHRoZSBhbGxvY2F0aW9uIG9mIHN1cGVyc3Rh
dGUgZGF0YSAKICogZHVyaW5nIG1hdGNoaW5nLiAgTW9zdCBvZiBpdCBzaG91bGQgYmUgaW5pdGlh
bGl6ZWQgdG8gMC4KICoKICogQSBNT1JFQ09SRSBmdW5jdGlvbiBpcyBuZWNlc3NhcnkuICBJdCBz
aG91bGQgYWxsb2NhdGUKICogYSBuZXcgYmxvY2sgb2YgbWVtb3J5IG9yIHJldHVybiAwLgogKiBB
IGRlZmF1bHQgdGhhdCB1c2VzIG1hbGxvYyBpcyBjYWxsZWQgYHJ4X21vcmVjb3JlJy4KICoKICog
VGhlIG51bWJlciBvZiBTVVBFUlNUQVRFU19BTExPV0VEIGluZGlyZWN0bHkgbGltaXRzIGhvdyBt
dWNoIG1lbW9yeQogKiB0aGUgc3lzdGVtIHdpbGwgdHJ5IHRvIGFsbG9jYXRlLiAgVGhlIGRlZmF1
bHQgaXMgMTI4LiAgQmF0Y2ggc3R5bGUKICogYXBwbGljYXRpb25zIHRoYXQgYXJlIHZlcnkgcmVn
ZXhwIGludGVuc2l2ZSBzaG91bGQgdXNlIGFzIGhpZ2ggYSBudW1iZXIKICogYXMgcG9zc2libGUg
d2l0aG91dCB0aHJhc2hpbmcuCiAqIAogKiBUaGUgTE9DQUxfQ1NFVF9TSVpFIGlzIHRoZSBudW1i
ZXIgb2YgY2hhcmFjdGVycyBpbiBhIGNoYXJhY3RlciBzZXQuCiAqIEl0IGlzIHRoZXJlZm9yZSB0
aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYSBzdXBlcnN0YXRlIHRyYW5zaXRpb24gdGFibGUuCiAq
IEdlbmVyYWxseSwgaXQgc2hvdWxkIGJlIDI1Ni4gIElmIHlvdXIgY2hhcmFjdGVyIHNldCBoYXMg
MTYgYml0cywgCiAqIGl0IGlzIGJldHRlciB0byB0cmFuc2xhdGUgeW91ciByZWdleHBzIGludG8g
ZXF1aXZhbGVudCA4IGJpdCBwYXR0ZXJucy4KICovCgpzdHJ1Y3QgcnhfY2FjaGUKewogIHN0cnVj
dCByeF9oYXNoX3J1bGVzIHN1cGVyc2V0X2hhc2hfcnVsZXM7CgogIC8qIE9iamVjdHMgYXJlIGFs
bG9jYXRlZCBieSBpbmNyZW1lbnRpbmcgYSBwb2ludGVyIHRoYXQgCiAgICogc2NhbnMgYWNyb3Nz
IHJ4X2Jsb2NrbGlzdHMuCiAgICovCiAgc3RydWN0IHJ4X2Jsb2NrbGlzdCAqIG1lbW9yeTsKICBz
dHJ1Y3QgcnhfYmxvY2tsaXN0ICogbWVtb3J5X3BvczsKICBpbnQgYnl0ZXNfbGVmdDsKICBjaGFy
ICogbWVtb3J5X2FkZHI7CiAgcnhfbW9yZWNvcmVfZm4gbW9yZWNvcmU7CgogIC8qIEZyZWVsaXN0
cy4gKi8KICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVlX3N1cGVyc3RhdGVzOwogIHN0cnVjdCBy
eF9mcmVlbGlzdCAqIGZyZWVfdHJhbnNpdGlvbl9jbGFzc2VzOwogIHN0cnVjdCByeF9mcmVlbGlz
dCAqIGZyZWVfZGlzY2VybmFibGVfZnV0dXJlczsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVl
X3N1cGVyc2V0czsKICBzdHJ1Y3QgcnhfZnJlZWxpc3QgKiBmcmVlX2hhc2g7CgogIC8qIFR3byBz
ZXRzIG9mIHN1cGVyc3RhdGVzIC0tIHRob3NlIHRoYXQgYXJlIHNlbWlmcmVlZCwgYW5kIHRob3Nl
CiAgICogdGhhdCBhcmUgYmVpbmcgdXNlZC4KICAgKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAq
IGxydV9zdXBlcnN0YXRlOwogIHN0cnVjdCByeF9zdXBlcnN0YXRlICogc2VtaWZyZWVfc3VwZXJz
dGF0ZTsKCiAgc3RydWN0IHJ4X3N1cGVyc2V0ICogZW1wdHlfc3VwZXJzZXQ7CgogIGludCBzdXBl
cnN0YXRlczsKICBpbnQgc2VtaWZyZWVfc3VwZXJzdGF0ZXM7CiAgaW50IGhpdHM7CiAgaW50IG1p
c3NlczsKICBpbnQgc3VwZXJzdGF0ZXNfYWxsb3dlZDsKCiAgaW50IGxvY2FsX2NzZXRfc2l6ZTsK
ICB2b2lkICoqIGluc3RydWN0aW9uX3RhYmxlOwoKICBzdHJ1Y3QgcnhfaGFzaCBzdXBlcnNldF90
YWJsZTsKfTsKCgwKCi8qIFRoZSBsb3dlc3QtbGV2ZWwgc2VhcmNoIGZ1bmN0aW9uIHN1cHBvcnRz
IGFyYml0cmFyaWx5IGZyYWdtZW50ZWQKICogc3RyaW5ncyBhbmQgKG9wdGlvbmFsbHkpIHN1c3Bl
bmRhYmxlL3Jlc3VtYWJsZSBzZWFyY2hlcy4KICoKICogQ2FsbGVycyBoYXZlIHRvIHByb3ZpZGUg
YSBmZXcgaG9va3MuCiAqLwoKI2lmbmRlZiBfX0dOVUNfXwojaWZkZWYgX19TVERDX18KI2RlZmlu
ZSBfX2NvbnN0X18gY29uc3QKI2Vsc2UKI2RlZmluZSBfX2NvbnN0X18KI2VuZGlmCiNlbmRpZgoK
LyogVGhpcyBob2xkcyBhIG1hdGNoZXIgcG9zaXRpb24gKi8Kc3RydWN0IHJ4X3N0cmluZ19wb3Np
dGlvbgp7CiAgX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKiBwb3M7CS8qIFRoZSBjdXJyZW50IHBv
cy4gKi8KICBfX2NvbnN0X18gdW5zaWduZWQgY2hhciAqIHN0cmluZzsgLyogVGhlIGN1cnJlbnQg
c3RyaW5nIGJ1cnN0LiAqLwogIF9fY29uc3RfXyB1bnNpZ25lZCBjaGFyICogZW5kOwkvKiBGaXJz
dCBpbnZhbGlkIHBvc2l0aW9uID49IFBPUy4gKi8KICBpbnQgb2Zmc2V0OwkJCS8qIEludGVnZXIg
YWRkcmVzcyBvZiB0aGUgY3VycmVudCBidXJzdC4gKi8KICBpbnQgc2l6ZTsJCQkvKiBDdXJyZW50
IHN0cmluZydzIHNpemUuICovCiAgaW50IHNlYXJjaF9kaXJlY3Rpb247CQkvKiAxIG9yIC0xICov
CiAgaW50IHNlYXJjaF9lbmQ7CQkvKiBGaXJzdCBwb3NpdGlvbiB0byBub3QgdHJ5LiAqLwp9OwoK
CmVudW0gcnhfZ2V0X2J1cnN0X3JldHVybgp7CiAgcnhfZ2V0X2J1cnN0X2NvbnRpbnVhdGlvbiwK
ICByeF9nZXRfYnVyc3RfZXJyb3IsCiAgcnhfZ2V0X2J1cnN0X29rLAogIHJ4X2dldF9idXJzdF9u
b19tb3JlCn07CgoKLyogQSBjYWxsIHRvIGdldCBidXJzdCBzaG91bGQgbWFrZSBQT1MgdmFsaWQu
ICBJdCBtaWdodCBiZSBpbnZhbGlkCiAqIGlmIHRoZSBTVFJJTkcgZmllbGQgZG9lc24ndCBwb2lu
dCB0byBhIGJ1cnN0IHRoYXQgYWN0dWFsbHkKICogY29udGFpbnMgUE9TLgogKgogKiBHRVRfQlVS
U1Qgc2hvdWxkIHRha2UgYSBjbHVlIGZyb20gU0VBUkNIX0RJUkVDVElPTiAoMSBvciAtMSkgYXMg
dG8KICogd2hldGhlciBvciBub3QgdG8gcGFkIHRvIHRoZSBsZWZ0LiAgUGFkZGluZyB0byB0aGUg
cmlnaHQgaXMgYWx3YXlzCiAqIGFwcHJvcHJpYXRlLCBidXQgbmVlZCBub3QgZ28gcGFzdCB0aGUg
cG9pbnQgaW5kaWNhdGVkIGJ5IFNUT1AuCiAqCiAqIElmIGEgY29udGludWF0aW9uIGlzIHJldHVy
bmVkLCB0aGVuIHRoZSByZWVudGVyaW5nIGNhbGwgdG8KICogYSBzZWFyY2ggZnVuY3Rpb24gd2ls
bCByZXRyeSB0aGUgZ2V0X2J1cnN0LgogKi8KCiNpZmRlZiBfX1NURENfXwp0eXBlZGVmIGVudW0g
cnhfZ2V0X2J1cnN0X3JldHVybgogICgqcnhfZ2V0X2J1cnN0X2ZuKSAoc3RydWN0IHJ4X3N0cmlu
Z19wb3NpdGlvbiAqIHBvcywKCQkgICAgICB2b2lkICogYXBwX2Nsb3N1cmUsCgkJICAgICAgaW50
IHN0b3ApOwoJCQkJCSAgICAgICAKI2Vsc2UKdHlwZWRlZiBlbnVtIHJ4X2dldF9idXJzdF9yZXR1
cm4gKCpyeF9nZXRfYnVyc3RfZm4pICgpOwojZW5kaWYKCgplbnVtIHJ4X2JhY2tfY2hlY2tfcmV0
dXJuCnsKICByeF9iYWNrX2NoZWNrX2NvbnRpbnVhdGlvbiwKICByeF9iYWNrX2NoZWNrX2Vycm9y
LAogIHJ4X2JhY2tfY2hlY2tfcGFzcywKICByeF9iYWNrX2NoZWNrX2ZhaWwKfTsKCi8qIEJhY2tf
Y2hlY2sgc2hvdWxkIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGl0IGlzIHBhc3NlZCAKICogb3ZlciBy
cGFyZW4gLSBscGFyZW4gY2hhcmFjdGVycyBhbmQgcmV0dXJuIHBhc3MgaWZmCiAqIHRoZSBjaGFy
YWN0ZXJzIHN0YXJ0aW5nIGF0IFBPUyBtYXRjaCB0aG9zZSBpbmRleGVkCiAqIGJ5IFtMUEFSRU4u
LlJQQVJFTl0uCiAqCiAqIElmIGEgY29udGludWF0aW9uIGlzIHJldHVybmVkLCB0aGVuIHRoZSBy
ZWVudGVyaW5nIGNhbGwgdG8KICogYSBzZWFyY2ggZnVuY3Rpb24gd2lsbCByZXRyeSB0aGUgYmFj
a19jaGVjay4KICovCgojaWZkZWYgX19TVERDX18KdHlwZWRlZiBlbnVtIHJ4X2JhY2tfY2hlY2tf
cmV0dXJuCiAgKCpyeF9iYWNrX2NoZWNrX2ZuKSAoc3RydWN0IHJ4X3N0cmluZ19wb3NpdGlvbiAq
IHBvcywKCQkgICAgICAgaW50IGxwYXJlbiwKCQkgICAgICAgaW50IHJwYXJlbiwKCQkgICAgICAg
dW5zaWduZWQgY2hhciAqIHRyYW5zbGF0ZSwKCQkgICAgICAgdm9pZCAqIGFwcF9jbG9zdXJlLAoJ
CSAgICAgICBpbnQgc3RvcCk7CgkJCQkJICAgICAgIAojZWxzZQp0eXBlZGVmIGVudW0gcnhfYmFj
a19jaGVja19yZXR1cm4gKCpyeF9iYWNrX2NoZWNrX2ZuKSAoKTsKI2VuZGlmCgoKCgovKiBBIGNh
bGwgdG8gZmV0Y2hfY2hhciBzaG91bGQgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgYXQgUE9TIG9yIFBP
UyArIDEuCiAqIFJldHVybmluZyBjb250aW51YXRpb25zIGhlcmUgaXNuJ3Qgc3VwcG9ydGVkLiAg
T0ZGU0VUIGlzIGVpdGhlciAwIG9yIDEKICogYW5kIGluZGljYXRlcyB3aGljaCBjaGFyYWN0ZXJz
IGlzIGRlc2lyZWQuCiAqLwoKI2lmZGVmIF9fU1REQ19fCnR5cGVkZWYgaW50ICgqcnhfZmV0Y2hf
Y2hhcl9mbikgKHN0cnVjdCByeF9zdHJpbmdfcG9zaXRpb24gKiBwb3MsCgkJCQkgaW50IG9mZnNl
dCwKCQkJCSB2b2lkICogYXBwX2Nsb3N1cmUsCgkJCQkgaW50IHN0b3ApOwojZWxzZQp0eXBlZGVm
IGludCAoKnJ4X2ZldGNoX2NoYXJfZm4pICgpOwojZW5kaWYKCgplbnVtIHJ4X3NlYXJjaF9yZXR1
cm4KewogIHJ4X3NlYXJjaF9jb250aW51YXRpb24gPSAtNCwKICByeF9zZWFyY2hfZXJyb3IgPSAt
MywKICByeF9zZWFyY2hfc29mdF9mYWlsID0gLTIsCS8qIGZhaWxlZCBieSBydW5uaW5nIG91dCBv
ZiBzdHJpbmcgKi8KICByeF9zZWFyY2hfZmFpbCA9IC0xCQkvKiBmYWlsZWQgb25seSBieSByZWFj
aGluZyBmYWlsdXJlIHN0YXRlcyAqLwogIC8qIHJldHVybiB2YWx1ZXMgPj0gMCBpbmRpY2F0ZSB0
aGUgcG9zaXRpb24gb2YgYSBzdWNjZXNzZnVsIG1hdGNoICovCn07CgoKCgoMCgovKiByZWdleC5o
CiAqIAogKiBUaGUgcmVtYWluaW5nIGRlY2xhcmF0aW9ucyByZXBsYWNlIHJlZ2V4LmguCiAqLwoK
LyogVGhpcyBpcyBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBlcnJvciBjb2Rlcy4KICovCmV4dGVybiBfX2NvbnN0X18gY2hhciAqcmVfZXJyb3JfbXNnW107
CgovKiBJZiBhbnkgZXJyb3IgY29kZXMgYXJlIHJlbW92ZWQsIGNoYW5nZWQsIG9yIGFkZGVkLCB1
cGRhdGUgdGhlCiAgIGByZV9lcnJvcl9tc2cnIHRhYmxlIGluIHJlZ2V4LmMuICAqLwp0eXBlZGVm
IGVudW0KewogIFJFR19OT0VSUk9SID0gMCwJLyogU3VjY2Vzcy4gICovCiAgUkVHX05PTUFUQ0gs
CQkvKiBEaWRuJ3QgZmluZCBhIG1hdGNoIChmb3IgcmVnZXhlYykuICAqLwoKICAvKiBQT1NJWCBy
ZWdjb21wIHJldHVybiBlcnJvciBjb2Rlcy4gIChJbiB0aGUgb3JkZXIgbGlzdGVkIGluIHRoZQog
ICAgIHN0YW5kYXJkLikgICovCiAgUkVHX0JBRFBBVCwJCS8qIEludmFsaWQgcGF0dGVybi4gICov
CiAgUkVHX0VDT0xMQVRFLAkJLyogTm90IGltcGxlbWVudGVkLiAgKi8KICBSRUdfRUNUWVBFLAkJ
LyogSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZS4gICovCiAgUkVHX0VFU0NBUEUsCQkvKiBU
cmFpbGluZyBiYWNrc2xhc2guICAqLwogIFJFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJl
ZmVyZW5jZS4gICovCiAgUkVHX0VCUkFDSywJCS8qIFVubWF0Y2hlZCBsZWZ0IGJyYWNrZXQuICAq
LwogIFJFR19FUEFSRU4sCQkvKiBQYXJlbnRoZXNpcyBpbWJhbGFuY2UuICAqLyAKICBSRUdfRUJS
QUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KICBSRUdfQkFEQlIsCQkvKiBJbnZhbGlkIGNvbnRl
bnRzIG9mIFx7XH0uICAqLwogIFJFR19FUkFOR0UsCQkvKiBJbnZhbGlkIHJhbmdlIGVuZC4gICov
CiAgUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KICBSRUdfQkFEUlBULAkJ
LyogTm8gcHJlY2VkaW5nIHJlIGZvciByZXBldGl0aW9uIG9wLiAgKi8KCiAgLyogRXJyb3IgY29k
ZXMgd2UndmUgYWRkZWQuICAqLwogIFJFR19FRU5ELAkJLyogUHJlbWF0dXJlIGVuZC4gICovCiAg
UkVHX0VTSVpFLAkJLyogQ29tcGlsZWQgcGF0dGVybiBiaWdnZXIgdGhhbiAyXjE2IGJ5dGVzLiAg
Ki8KICBSRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9t
IHJlZ2NvbXAuICAqLwp9IHJlZ19lcnJjb2RlX3Q7CgovKiBUaGUgcmVnZXguYyBzdXBwb3J0LCBh
cyBhIGNsaWVudCBvZiByeCwgZGVmaW5lcyBhIHNldCBvZiBwb3NzaWJsZQogKiBzaWRlIGVmZmVj
dHMgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIGVkZ2UgbGFibGVzIG9mIG5mYSBlZGdlcy4KICog
SGVyZSBpcyB0aGUgbGlzdCBvZiBzaWRlZiBlZmZlY3RzIGluIHVzZS4KICovCgplbnVtIHJlX3Np
ZGVfZWZmZWN0cwp7CiNkZWZpbmUgUlhfV0FOVF9TRV9ERUZTIDEKI3VuZGVmIFJYX0RFRl9TRQoj
dW5kZWYgUlhfREVGX0NQTFhfU0UKI2RlZmluZSBSWF9ERUZfU0UoSURFTSwgTkFNRSwgVkFMVUUp
CSAgICAgIE5BTUUgVkFMVUUsCiNkZWZpbmUgUlhfREVGX0NQTFhfU0UoSURFTSwgTkFNRSwgVkFM
VUUpICAgICBOQU1FIFZBTFVFLAojaW5jbHVkZSAicnguaCIKI3VuZGVmIFJYX0RFRl9TRQojdW5k
ZWYgUlhfREVGX0NQTFhfU0UKI3VuZGVmIFJYX1dBTlRfU0VfREVGUwogICByZV9mbG9vZ2xlX2Zs
YXAgPSA2NTUzMwp9OwoKLyogVGhlc2UgaG9sZCBwYXJhbWF0ZXJzIGZvciB0aGUga2luZHMgb2Yg
c2lkZSBlZmZlY3RzIHRoYXQgYXJlIHBvc3NpYmxlCiAqIGluIHRoZSBzdXBwb3J0ZWQgcGF0dGVy
biBsYW5ndWFnZXMuICBUaGVzZSBpbmNsdWRlIHRoaW5ncyBsaWtlIHRoZSAKICogbnVtZXJpYyBi
b3VuZHMgb2Yge30gb3BlcmF0b3JzIGFuZCB0aGUgaW5kZXggb2YgcGFyZW4gcmVnaXN0ZXJzIGZv
ciAKICogc3ViZXhwcmVzc2lvbiBtZWFzdXJlbWVudCBvciBiYWNrcmVmZXJlbmNpbmcuCiAqLwpz
dHJ1Y3QgcmVfc2VfcGFyYW1zCnsKICBlbnVtIHJlX3NpZGVfZWZmZWN0cyBzZTsKICBpbnQgb3Ax
OwogIGludCBvcDI7Cn07Cgp0eXBlZGVmIHVuc2lnbmVkIHJlZ19zeW50YXhfdDsKCnN0cnVjdCBy
ZV9wYXR0ZXJuX2J1ZmZlcgp7CiAgc3RydWN0IHJ4IHJ4OwogIHJlZ19zeW50YXhfdCBzeW50YXg7
CQkvKiBTZWUgYmVsb3cgZm9yIHN5bnRheCBiaXQgZGVmaW5pdGlvbnMuICovCgogIHVuc2lnbmVk
IGludCBub19zdWI6MTsJLyogSWYgc2V0LCBkb24ndCAgcmV0dXJuIHJlZ2lzdGVyIG9mZnNldHMu
ICovCiAgdW5zaWduZWQgaW50IG5vdF9ib2w6MTsJLyogSWYgc2V0LCB0aGUgYW5jaG9ycyAoJ14n
IGFuZCAnJCcpIGRvbid0ICovCiAgdW5zaWduZWQgaW50IG5vdF9lb2w6MTsJLyogICAgIG1hdGNo
IGF0IHRoZSBlbmRzIG9mIHRoZSBzdHJpbmcuICAqLyAgCiAgdW5zaWduZWQgaW50IG5ld2xpbmVf
YW5jaG9yOjE7LyogSWYgdHJ1ZSwgYW4gYW5jaG9yIGF0IGEgbmV3bGluZSBtYXRjaGVzLiovCiAg
dW5zaWduZWQgaW50IGxlYXN0X3N1YnM6MTsJLyogSWYgc2V0LCBhbmQgcmV0dXJuaW5nIHJlZ2lz
dGVycywgcmV0dXJuCgkJCQkgKiBhcyBmZXcgdmFsdWVzIGFzIHBvc3NpYmxlLiAgT25seSAKCQkJ
CSAqIGJhY2tyZWZlcmVuY2VkIGdyb3VwcyBhbmQgZ3JvdXAgMCAodGhlIHdob2xlCgkJCQkgKiBt
YXRjaCkgd2lsbCBiZSByZXR1cm5lZC4KCQkJCSAqLwoKICAvKiBJZiB0cnVlLCB0aGlzIHNheXMg
dGhhdCB0aGUgbWF0Y2hlciBzaG91bGQga2VlcCByZWdpc3RlcnMgb24gaXRzCiAgICogYmFja3Ry
YWNraW5nIHN0YWNrLiAgRm9yIG1hbnkgcGF0dGVybnMsIHdlIGNhbiBlYXNpbHkgZGV0ZXJtaW5l
IHRoYXQKICAgKiB0aGlzIGlzbid0IG5lY2Vzc2FyeS4KICAgKi8KICB1bnNpZ25lZCBpbnQgbWF0
Y2hfcmVnc19vbl9zdGFjazoxOwogIHVuc2lnbmVkIGludCBzZWFyY2hfcmVnc19vbl9zdGFjazox
OwoKICAvKiBpc19hbmNob3JlZCBhbmQgYmVnYnVmX29ubHkgYXJlIGZpbGxlZCBpbiBieSByeF9j
b21waWxlLiAqLwogIHVuc2lnbmVkIGludCBpc19hbmNob3JlZDoxOwkvKiBBbmNob3JkZWQgYnkg
Xj8gKi8KICB1bnNpZ25lZCBpbnQgYmVnYnVmX29ubHk6MTsJLyogQW5jaG9yZWQgdG8gY2hhciBw
b3NpdGlvbiAwPyAqLwoKICAKICAvKiBJZiBSRUdTX1VOQUxMT0NBVEVELCBhbGxvY2F0ZSBzcGFj
ZSBpbiB0aGUgYHJlZ3MnIHN0cnVjdHVyZQogICAqIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1
YiArIDEpJyBncm91cHMuCiAgICogSWYgUkVHU19SRUFMTE9DQVRFLCByZWFsbG9jYXRlIHNwYWNl
IGlmIG5lY2Vzc2FyeS4KICAgKiBJZiBSRUdTX0ZJWEVELCB1c2Ugd2hhdCdzIHRoZXJlLiAgCiAg
ICovCiNkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCiNkZWZpbmUgUkVHU19SRUFMTE9DQVRFIDEK
I2RlZmluZSBSRUdTX0ZJWEVEIDIKICB1bnNpZ25lZCBpbnQgcmVnc19hbGxvY2F0ZWQ6MjsKCiAg
CiAgLyogRWl0aGVyIGEgdHJhbnNsYXRlIHRhYmxlIHRvIGFwcGx5IHRvIGFsbCBjaGFyYWN0ZXJz
IGJlZm9yZQogICAqIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4g
IFRoZSB0cmFuc2xhdGlvbgogICAqIGlzIGFwcGxpZWQgdG8gYSBwYXR0ZXJuIHdoZW4gaXQgaXMg
Y29tcGlsZWQgYW5kIHRvIGEgc3RyaW5nCiAgICogd2hlbiBpdCBpcyBtYXRjaGVkLgogICAqLwog
IHVuc2lnbmVkIGNoYXIgKiB0cmFuc2xhdGU7CgogIC8qIElmIHRoaXMgaXMgYSB2YWxpZCBwb2lu
dGVyLCBpdCB0ZWxscyByeCBub3QgdG8gc3RvcmUgdGhlIGV4dGVudHMgb2YgCiAgICogY2VydGFp
biBzdWJleHByZXNzaW9ucyAodGhvc2UgY29ycmVzcG9uZGluZyB0byBub24temVybyBlbnRyaWVz
KS4KICAgKiBQYXNzaW5nIDB4MSBpcyB0aGUgc2FtZSBhcyBwYXNzaW5nIGFuIGFycmF5IG9mIGFs
bCBvbmVzLiAgUGFzc2luZyAweDAKICAgKiBpcyB0aGUgc2FtZSBhcyBwYXNzaW5nIGFuIGFycmF5
IG9mIGFsbCB6ZXJvcy4KICAgKiBUaGUgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYXMgbWFueSBlbnRy
aWVzIGFzIHRoZWlyIGFyZSBzdWJleHBzIGluIHRoZSAKICAgKiByZWdleHAuCiAgICoKICAgKiBG
b3IgUE9TSVggY29tcGF0YWJpbGl0eSwgd2hlbiB1c2luZyByZWdjb21wIGFuZCByZWdleGVjIHRo
aXMgZmllbGQKICAgKiBpcyB6ZXJvZWQgYW5kIGlnbm9yZWQuCiAgICovCiAgY2hhciAqIHN5bnRh
eF9wYXJlbnM7CgoJLyogTnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGZvdW5kIGJ5IHRoZSBjb21w
aWxlci4gICovCiAgc2l6ZV90IHJlX25zdWI7CgogIHZvaWQgKiBidWZmZXI7CQkvKiBNYWxsb2Nl
ZCBtZW1vcnkgZm9yIHRoZSBuZmEuICovCiAgdW5zaWduZWQgbG9uZyBhbGxvY2F0ZWQ7CS8qIFNp
emUgb2YgdGhhdCBtZW1vcnkuICovCgogIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnks
IG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMKICAgKiB0aGUgZmFzdG1hcCwgaWYgdGhl
cmUgaXMgb25lLCB0byBza2lwIG92ZXIgaW1wb3NzaWJsZQogICAqIHN0YXJ0aW5nIHBvaW50cyBm
b3IgbWF0Y2hlcy4gICovCiAgY2hhciAqZmFzdG1hcDsKCiAgdW5zaWduZWQgaW50IGZhc3RtYXBf
YWNjdXJhdGU6MTsgLyogVGhlc2UgdGhyZWUgYXJlIGludGVybmFsLiAqLwogIHVuc2lnbmVkIGlu
dCBjYW5fbWF0Y2hfZW1wdHk6MTsgIAogIHN0cnVjdCByeF9uZmFfc3RhdGUgKiBzdGFydDsJLyog
VGhlIG5mYSBzdGFydGluZyBzdGF0ZS4gKi8KCiAgLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBpdGVy
YXRvciBib3VuZHMgZm9yIHtsbyxoaX0gY29uc3RydWN0cy4KICAgKiBUaGUgbWVtb3J5IHBvaW50
ZWQgdG8gaXMgcGFydCBvZiB0aGUgcngtPmJ1ZmZlci4KICAgKi8KICBzdHJ1Y3QgcmVfc2VfcGFy
YW1zICpzZV9wYXJhbXM7CgogIC8qIFRoaXMgaXMgYSBiaXRzZXQgcmVwcmVzZW50YXRpb24gb2Yg
dGhlIGZhc3RtYXAuCiAgICogVGhpcyBpcyBhIHRydWUgZmFzdG1hcCB0aGF0IGFscmVhZHkgdGFr
ZXMgdGhlIHRyYW5zbGF0ZQogICAqIHRhYmxlIGludG8gYWNjb3VudC4KICAgKi8KICByeF9CaXRz
ZXQgZmFzdHNldDsKfTsKCi8qIFR5cGUgZm9yIGJ5dGUgb2Zmc2V0cyB3aXRoaW4gdGhlIHN0cmlu
Zy4gIFBPU0lYIG1hbmRhdGVzIHRoaXMuICAqLwp0eXBlZGVmIGludCByZWdvZmZfdDsKCi8qIFRo
aXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSBzdG9yZSByZWdpc3RlciBtYXRjaCBkYXRhIGluLiAgU2Vl
CiAgIHJlZ2V4LnRleGluZm8gZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB3aGF0IHJlZ2lzdGVy
cyBtYXRjaC4gICovCnN0cnVjdCByZV9yZWdpc3RlcnMKewogIHVuc2lnbmVkIG51bV9yZWdzOwog
IHJlZ29mZl90ICpzdGFydDsKICByZWdvZmZfdCAqZW5kOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgcmVf
cGF0dGVybl9idWZmZXIgcmVnZXhfdDsKCi8qIFBPU0lYIHNwZWNpZmljYXRpb24gZm9yIHJlZ2lz
dGVycy4gIEFzaWRlIGZyb20gdGhlIGRpZmZlcmVudCBuYW1lcyB0aGFuCiAgIGByZV9yZWdpc3Rl
cnMnLCBQT1NJWCB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YgYQogICBz
dHJ1Y3R1cmUgb2YgYXJyYXlzLiAgKi8KdHlwZWRlZiBzdHJ1Y3QKewogIHJlZ29mZl90IHJtX3Nv
OyAgLyogQnl0ZSBvZmZzZXQgZnJvbSBzdHJpbmcncyBzdGFydCB0byBzdWJzdHJpbmcncyBzdGFy
dC4gICovCiAgcmVnb2ZmX3Qgcm1fZW87ICAvKiBCeXRlIG9mZnNldCBmcm9tIHN0cmluZydzIHN0
YXJ0IHRvIHN1YnN0cmluZydzIGVuZC4gICovCn0gcmVnbWF0Y2hfdDsKCgwKLyogVGhlIGZvbGxv
d2luZyBiaXRzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVnZXhwIHN5bnRheCB3ZQogICBy
ZWNvZ25pemUuICBUaGUgc2V0L25vdC1zZXQgbWVhbmluZ3MgYXJlIGNob3NlbiBzbyB0aGF0IEVt
YWNzIHN5bnRheAogICByZW1haW5zIHRoZSB2YWx1ZSAwLiAgVGhlIGJpdHMgYXJlIGdpdmVuIGlu
IGFscGhhYmV0aWNhbCBvcmRlciwgYW5kCiAgIHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9u
ZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdoZW4gd2UKICAgYWRkIG9yIHJlbW92ZSBh
IGJpdCwgb25seSBvbmUgb3RoZXIgZGVmaW5pdGlvbiBuZWVkIGNoYW5nZS4gICovCgovKiBJZiB0
aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIFwgaW5zaWRlIGEgYnJhY2tldCBleHByZXNzaW9uIGlz
IGxpdGVyYWwuCiAgIElmIHNldCwgdGhlbiBzdWNoIGEgXCBxdW90ZXMgdGhlIGZvbGxvd2luZyBj
aGFyYWN0ZXIuICAqLwojZGVmaW5lIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgKDEpCgov
KiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuICsgYW5kID8gYXJlIG9wZXJhdG9ycywgYW5k
IFwrIGFuZCBcPyBhcmUKICAgICBsaXRlcmFscy4gCiAgIElmIHNldCwgdGhlbiBcKyBhbmQgXD8g
YXJlIG9wZXJhdG9ycyBhbmQgKyBhbmQgPyBhcmUgbGl0ZXJhbHMuICAqLwojZGVmaW5lIFJFX0JL
X1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwgMSkKCi8qIElmIHRoaXMg
Yml0IGlzIHNldCwgdGhlbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc3VwcG9ydGVkLiAgVGhleSBh
cmU6CiAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6bG93ZXI6XSwgIFs6ZGlnaXQ6XSwgWzph
bG51bTpdLCBbOnhkaWdpdDpdLAogICAgIFs6c3BhY2U6XSwgWzpwcmludDpdLCBbOnB1bmN0Ol0s
IFs6Z3JhcGg6XSwgYW5kIFs6Y250cmw6XS4KICAgSWYgbm90IHNldCwgdGhlbiBjaGFyYWN0ZXIg
Y2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC4gICovCiNkZWZpbmUgUkVfQ0hBUl9DTEFTU0VTIChS
RV9CS19QTFVTX1FNIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXiBhbmQgJCBh
cmUgYWx3YXlzIGFuY2hvcnMgKG91dHNpZGUgYnJhY2tldAogICAgIGV4cHJlc3Npb25zLCBvZiBj
b3Vyc2UpLgogICBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuIGl0IGRlcGVuZHM6CiAgICAg
ICAgXiAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFy
CiAgICAgICAgICAgZXhwcmVzc2lvbiBvciBhZnRlciBhbiBvcGVuLWdyb3VwIG9yIGFuIGFsdGVy
bmF0aW9uIG9wZXJhdG9yOwogICAgICAgICQgIGlzIGFuIGFuY2hvciBpZiBpdCBpcyBhdCB0aGUg
ZW5kIG9mIGEgcmVndWxhciBleHByZXNzaW9uLCBvcgogICAgICAgICAgIGJlZm9yZSBhIGNsb3Nl
LWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgCgogICBUaGlzIGJpdCBjb3VsZCBi
ZSAocmUpY29tYmluZWQgd2l0aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQogICBQT1NJ
WCBkcmFmdCAxMS4yIHNheXMgdGhhdCAqIGV0Yy4gaW4gbGVhZGluZyBwb3NpdGlvbnMgaXMgdW5k
ZWZpbmVkLgogICBXZSBhbHJlYWR5IGltcGxlbWVudGVkIGEgcHJldmlvdXMgZHJhZnQgd2hpY2gg
bWFkZSB0aG9zZSBjb25zdHJ1Y3RzCiAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBj
aGFuZ2VkIHRoZSBjb2RlIGJhY2suICAqLwojZGVmaW5lIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9S
UyAoUkVfQ0hBUl9DTEFTU0VTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gc3Bl
Y2lhbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMgc3BlY2lhbAogICAgIHJlZ2FyZGxlc3Mgb2Ygd2hl
cmUgdGhleSBhcmUgaW4gdGhlIHBhdHRlcm4uCiAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRo
ZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIG9ubHkgaW4KICAgICBzb21lIGNvbnRl
eHRzOyBvdGhlcndpc2UgdGhleSBhcmUgb3JkaW5hcnkuICBTcGVjaWZpY2FsbHksIAogICAgICog
KyA/IGFuZCBpbnRlcnZhbHMgYXJlIG9ubHkgc3BlY2lhbCB3aGVuIG5vdCBhZnRlciB0aGUgYmVn
aW5uaW5nLAogICAgIG9wZW4tZ3JvdXAsIG9yIGFsdGVybmF0aW9uIG9wZXJhdG9yLiAgKi8KI2Rl
ZmluZSBSRV9DT05URVhUX0lOREVQX09QUyAoUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIDw8IDEp
CgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90IGJlIGZp
cnN0IGluIGFuIHJlIG9yCiAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgYW4gYWx0ZXJuYXRpb24gb3Ig
YmVnaW4tZ3JvdXAgb3BlcmF0b3IuICAqLwojZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMg
KFJFX0NPTlRFWFRfSU5ERVBfT1BTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4g
LiBtYXRjaGVzIG5ld2xpbmUuCiAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4gICovCiNk
ZWZpbmUgUkVfRE9UX05FV0xJTkUgKFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgPDwgMSkKCi8qIElm
IHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIGRvZXNuJ3QgbWF0Y2ggTlVMLgogICBJZiBub3Qgc2V0
LCB0aGVuIGl0IGRvZXMuICAqLwojZGVmaW5lIFJFX0RPVF9OT1RfTlVMTCAoUkVfRE9UX05FV0xJ
TkUgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5d
IGRvIG5vdCBtYXRjaCBuZXdsaW5lLgogICBJZiBub3Qgc2V0LCB0aGV5IGRvLiAgKi8KI2RlZmlu
ZSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgKFJFX0RPVF9OT1RfTlVMTCA8PCAxKQoKLyogSWYg
dGhpcyBiaXQgaXMgc2V0LCBlaXRoZXIgXHsuLi5cfSBvciB7Li4ufSBkZWZpbmVzIGFuCiAgICAg
aW50ZXJ2YWwsIGRlcGVuZGluZyBvbiBSRV9OT19CS19CUkFDRVMuIAogICBJZiBub3Qgc2V0LCBc
eywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCiNkZWZpbmUgUkVfSU5URVJWQUxTIChS
RV9IQVRfTElTVFNfTk9UX05FV0xJTkUgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgKywg
PyBhbmQgfCBhcmVuJ3QgcmVjb2duaXplZCBhcyBvcGVyYXRvcnMuCiAgIElmIG5vdCBzZXQsIHRo
ZXkgYXJlLiAgKi8KI2RlZmluZSBSRV9MSU1JVEVEX09QUyAoUkVfSU5URVJWQUxTIDw8IDEpCgov
KiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3Iu
CiAgIElmIG5vdCBzZXQsIG5ld2xpbmUgaXMgbGl0ZXJhbC4gICovCiNkZWZpbmUgUkVfTkVXTElO
RV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4g
YHsuLi59JyBkZWZpbmVzIGFuIGludGVydmFsLCBhbmQgXHsgYW5kIFx9CiAgICAgYXJlIGxpdGVy
YWxzLgogIElmIG5vdCBzZXQsIHRoZW4gYFx7Li4uXH0nIGRlZmluZXMgYW4gaW50ZXJ2YWwuICAq
LwojZGVmaW5lIFJFX05PX0JLX0JSQUNFUyAoUkVfTkVXTElORV9BTFQgPDwgMSkKCi8qIElmIHRo
aXMgYml0IGlzIHNldCwgKC4uLikgZGVmaW5lcyBhIGdyb3VwLCBhbmQgXCggYW5kIFwpIGFyZSBs
aXRlcmFscy4KICAgSWYgbm90IHNldCwgXCguLi5cKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCAoIGFu
ZCApIGFyZSBsaXRlcmFscy4gICovCiNkZWZpbmUgUkVfTk9fQktfUEFSRU5TIChSRV9OT19CS19C
UkFDRVMgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBcPGRpZ2l0PiBtYXRjaGVz
IDxkaWdpdD4uCiAgIElmIG5vdCBzZXQsIHRoZW4gXDxkaWdpdD4gaXMgYSBiYWNrLXJlZmVyZW5j
ZS4gICovCiNkZWZpbmUgUkVfTk9fQktfUkVGUyAoUkVfTk9fQktfUEFSRU5TIDw8IDEpCgovKiBJ
ZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5k
IFx8IGlzIGxpdGVyYWwuIAogICBJZiBub3Qgc2V0LCB0aGVuIFx8IGlzIGFuIGFsdGVybmF0aW9u
IG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8KI2RlZmluZSBSRV9OT19CS19WQkFSIChS
RV9OT19CS19SRUZTIDw8IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW4gZW5kaW5n
IHJhbmdlIHBvaW50IGNvbGxhdGluZyBoaWdoZXIKICAgICB0aGFuIHRoZSBzdGFydGluZyByYW5n
ZSBwb2ludCwgYXMgaW4gW3otYV0sIGlzIGludmFsaWQuCiAgIElmIG5vdCBzZXQsIHRoZW4gd2hl
biBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0ZXMgaGlnaGVyIHRoYW4gdGhlCiAgICAgc3RhcnRp
bmcgcmFuZ2UgcG9pbnQsIHRoZSByYW5nZSBpcyBpZ25vcmVkLiAgKi8KI2RlZmluZSBSRV9OT19F
TVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKCi8qIElmIHRoaXMgYml0IGlzIHNldCwg
dGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBvcmRpbmFyeS4KICAgSWYgbm90IHNldCwgdGhlbiBhbiB1
bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KI2RlZmluZSBSRV9VTk1BVENIRURfUklHSFRfUEFS
RU5fT1JEIChSRV9OT19FTVBUWV9SQU5HRVMgPDwgMSkKCi8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxl
IGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgcmVnZXhwIHN5bnRheCB0byB1c2UgKGZvcgogICBzb21l
IGludGVyZmFjZXMpLiAgV2hlbiBhIHJlZ2V4cCBpcyBjb21waWxlZCwgdGhlIHN5bnRheCB1c2Vk
IGlzCiAgIHN0b3JlZCBpbiB0aGUgcGF0dGVybiBidWZmZXIsIHNvIGNoYW5naW5nIHRoaXMgZG9l
cyBub3QgYWZmZWN0CiAgIGFscmVhZHktY29tcGlsZWQgcmVnZXhwcy4gICovCmV4dGVybiByZWdf
c3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CgwKLyogRGVmaW5lIGNvbWJpbmF0aW9ucyBvZiB0
aGUgYWJvdmUgYml0cyBmb3IgdGhlIHN0YW5kYXJkIHBvc3NpYmlsaXRpZXMuCiAgIChUaGUgW1tb
IGNvbW1lbnRzIGRlbGltaXQgd2hhdCBnZXRzIHB1dCBpbnRvIHRoZSBUZXhpbmZvIGZpbGUsIHNv
CiAgIGRvbid0IGRlbGV0ZSB0aGVtISkgICovIAovKiBbW1tiZWdpbiBzeW50YXhlc11dXSAqLwoj
ZGVmaW5lIFJFX1NZTlRBWF9FTUFDUyAwCgojZGVmaW5lIFJFX1NZTlRBWF9BV0sJCQkJCQkJXAog
IChSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTIHwgUkVfRE9UX05PVF9OVUxMCQkJXAogICB8
IFJFX05PX0JLX1BBUkVOUyAgICAgICAgICAgIHwgUkVfTk9fQktfUkVGUwkJCQlcCiAgIHwgUkVf
Tk9fQktfVkJBUiAgICAgICAgICAgICAgIHwgUkVfTk9fRU1QVFlfUkFOR0VTCQkJXAogICB8IFJF
X1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCgojZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9BV0sg
CQkJCQkJXAogIChSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgfCBSRV9CQUNLU0xBU0hfRVNDQVBF
X0lOX0xJU1RTKQoKI2RlZmluZSBSRV9TWU5UQVhfR1JFUAkJCQkJCQlcCiAgKFJFX0JLX1BMVVNf
UU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKICAgfCBSRV9IQVRfTElTVFNf
Tk9UX05FV0xJTkUgfCBSRV9JTlRFUlZBTFMJCQkJXAogICB8IFJFX05FV0xJTkVfQUxUKQoKI2Rl
ZmluZSBSRV9TWU5UQVhfRUdSRVAJCQkJCQkJXAogIChSRV9DSEFSX0NMQVNTRVMgICAgICAgIHwg
UkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAogICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTIHwg
UkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAogICB8IFJFX05FV0xJTkVfQUxUICAgICAgIHwg
UkVfTk9fQktfUEFSRU5TCQkJCVwKICAgfCBSRV9OT19CS19WQkFSKQoKI2RlZmluZSBSRV9TWU5U
QVhfUE9TSVhfRUdSRVAJCQkJCQlcCiAgKFJFX1NZTlRBWF9FR1JFUCB8IFJFX0lOVEVSVkFMUyB8
IFJFX05PX0JLX0JSQUNFUykKCiNkZWZpbmUgUkVfU1lOVEFYX1NFRCBSRV9TWU5UQVhfUE9TSVhf
QkFTSUMKCi8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRlZCBQ
T1NJWCByZWdleCBzeW50YXguICAqLwojZGVmaW5lIF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OCQkJ
CQkJXAogIChSRV9DSEFSX0NMQVNTRVMgfCBSRV9ET1RfTkVXTElORSAgICAgIHwgUkVfRE9UX05P
VF9OVUxMCQlcCiAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKCiNkZWZp
bmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAogIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1P
TiB8IFJFX0JLX1BMVVNfUU0pCgovKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkg
aW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKICAgUkVfTElNSVRFRF9PUFMsIGkuZS4sIFw/
IFwrIFx8IGFyZSBub3QgcmVjb2duaXplZC4gIEFjdHVhbGx5LCB0aGlzCiAgIGlzbid0IG1pbmlt
YWwsIHNpbmNlIG90aGVyIG9wZXJhdG9ycywgc3VjaCBhcyBcYCwgYXJlbid0IGRpc2FibGVkLiAg
Ki8KI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9CQVNJQwkJCQkJXAogIChfUkVfU1lO
VEFYX1BPU0lYX0NPTU1PTiB8IFJFX0xJTUlURURfT1BTKQoKI2RlZmluZSBSRV9TWU5UQVhfUE9T
SVhfRVhURU5ERUQJCQkJCVwKICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9DT05URVhU
X0lOREVQX0FOQ0hPUlMJCQlcCiAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgIHwgUkVfTk9fQktf
QlJBQ0VTCQkJCVwKICAgfCBSRV9OT19CS19QQVJFTlMgICAgICAgfCBSRV9OT19CS19WQkFSCQkJ
CVwKICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQoKLyogRGlmZmVycyBmcm9tIC4u
Ll9QT1NJWF9FWFRFTkRFRCBpbiB0aGF0IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMKICAgcmVwbGFj
ZXMgUkVfQ09OVEVYVF9JTkRFUF9PUFMgYW5kIFJFX05PX0JLX1JFRlMgaXMgYWRkZWQuICAqLwoj
ZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0VYVEVOREVECQkJCVwKICAoX1JFX1NZTlRB
WF9QT1NJWF9DT01NT04gIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQkJXAogICB8IFJFX0NP
TlRFWFRfSU5WQUxJRF9PUFMgfCBSRV9OT19CS19CUkFDRVMJCQkJXAogICB8IFJFX05PX0JLX1BB
UkVOUyAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJCVwKICAgfCBSRV9OT19CS19WQkFSCSAgICB8
IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCi8qIFtbW2VuZCBzeW50YXhlc11dXSAqLwoK
LyogTWF4aW11bSBudW1iZXIgb2YgZHVwbGljYXRlcyBhbiBpbnRlcnZhbCBjYW4gYWxsb3cuICBT
b21lIHN5c3RlbXMKICAgKGVycm9uZW91c2x5KSBkZWZpbmUgdGhpcyBpbiBvdGhlciBoZWFkZXIg
ZmlsZXMsIGJ1dCB3ZSB3YW50IG91cgogICB2YWx1ZSwgc28gcmVtb3ZlIGFueSBwcmV2aW91cyBk
ZWZpbmUuICAqLwojaWZkZWYgUkVfRFVQX01BWAojdW5kZWYgUkVfRFVQX01BWAojZW5kaWYKI2Rl
ZmluZSBSRV9EVVBfTUFYICgoMSA8PCAxNSkgLSAxKSAKCgoKLyogUE9TSVggYGNmbGFncycgYml0
cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIGByZWdjb21wJykuICAqLwoKLyogSWYgdGhpcyBiaXQg
aXMgc2V0LCB0aGVuIHVzZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgogICBJ
ZiBub3Qgc2V0LCB0aGVuIHVzZSBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LiAgKi8K
I2RlZmluZSBSRUdfRVhURU5ERUQgMQoKLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGlnbm9y
ZSBjYXNlIHdoZW4gbWF0Y2hpbmcuCiAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZp
Y2FudC4gICovCiNkZWZpbmUgUkVHX0lDQVNFIChSRUdfRVhURU5ERUQgPDwgMSkKIAovKiBJZiB0
aGlzIGJpdCBpcyBzZXQsIHRoZW4gYW5jaG9ycyBkbyBub3QgbWF0Y2ggYXQgbmV3bGluZQogICAg
IGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZy4KICAgSWYgbm90IHNldCwgdGhlbiBhbmNob3JzIGRv
IG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KI2RlZmluZSBSRUdfTkVXTElORSAoUkVHX0lDQVNFIDw8
IDEpCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBm
YWlsIGluIHJlZ2V4ZWMuCiAgIElmIG5vdCBzZXQsIHRoZW4gcmV0dXJucyBkaWZmZXIgYmV0d2Vl
biBub3QgbWF0Y2hpbmcgYW5kIGVycm9ycy4gICovCiNkZWZpbmUgUkVHX05PU1VCIChSRUdfTkVX
TElORSA8PCAxKQoKCi8qIFBPU0lYIGBlZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZv
ciByZWdleGVjKS4gICovCgovKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gdGhlIGJlZ2lubmlu
Zy1vZi1saW5lIG9wZXJhdG9yIGRvZXNuJ3QgbWF0Y2gKICAgICB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBzdHJpbmcgKHByZXN1bWFibHkgYmVjYXVzZSBpdCdzIG5vdCB0aGUKICAgICBiZWdpbm5pbmcg
b2YgYSBsaW5lKS4KICAgSWYgbm90IHNldCwgdGhlbiB0aGUgYmVnaW5uaW5nLW9mLWxpbmUgb3Bl
cmF0b3IgZG9lcyBtYXRjaCB0aGUKICAgICBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy4gICovCiNk
ZWZpbmUgUkVHX05PVEJPTCAxCgovKiBMaWtlIFJFR19OT1RCT0wsIGV4Y2VwdCBmb3IgdGhlIGVu
ZC1vZi1saW5lLiAgKi8KI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCgovKiBJZiBgcmVnc19h
bGxvY2F0ZWQnIGlzIFJFR1NfVU5BTExPQ0FURUQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLAogKiBg
cmVfbWF0Y2hfMicgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhdCBsZWFzdCB0aGlzIG1hbnkg
cmVnaXN0ZXJzCiAqIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQu
IAogKgogKiBBbHNvLCB0aGlzIGlzIHRoZSBncmVhdGVzdCBudW1iZXIgb2YgYmFja3JlZmVyZW5j
ZWQgc3ViZXhwcmVzc2lvbnMKICogYWxsb3dlZCBpbiBhIHBhdHRlcm4gYmVpbmcgbWF0Y2hlZCB3
aXRob3V0IGNhbGxlci1zdXBwbGllZCByZWdpc3RlcnMuCiAqLwojaWZuZGVmIFJFX05SRUdTCiNk
ZWZpbmUgUkVfTlJFR1MgMzAKI2VuZGlmCgpleHRlcm4gaW50IHJ4X2NhY2hlX2JvdW5kOwpleHRl
cm4gY2hhciByeF92ZXJzaW9uX3N0cmluZ1tdOwoKCgwKI2lmZGVmIFJYX1dBTlRfUlhfREVGUwoK
LyogVGhpcyBpcyBkZWNscyB0byB0aGUgaW50ZXJlc3Rpbmcgc3Vic3lzdGVtcyBhbmQgbG93ZXIg
bGF5ZXJzCiAqIG9mIHJ4LiAgRXZlcnl0aGluZyB3aGljaCBkb2Vzbid0IGhhdmUgYSBwdWJsaWMg
Y291bnRlcnBhcnQgaW4gCiAqIHJlZ2V4LmMgaXMgZGVjbGFyZWQgaGVyZS4KICovCgoKI2lmZGVm
IF9fU1REQ19fCnR5cGVkZWYgdm9pZCAoKnJ4X2hhc2hfZnJlZWZuKSAoc3RydWN0IHJ4X2hhc2hf
aXRlbSAqIGl0KTsKI2Vsc2UgLyogbmRlZiBfX1NURENfXyAqLwp0eXBlZGVmIHZvaWQgKCpyeF9o
YXNoX2ZyZWVmbikgKCk7CiNlbmRpZiAvKiBuZGVmIF9fU1REQ19fICovCgoKDAoKI2lmZGVmIF9f
U1REQ19fClJYX0RFQ0wgaW50IHJ4X2JpdHNldF9pc19lcXVhbCAoaW50IHNpemUsIHJ4X0JpdHNl
dCBhLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wgaW50IHJ4X2JpdHNldF9pc19zdWJzZXQgKGludCBz
aXplLCByeF9CaXRzZXQgYSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIGludCByeF9iaXRzZXRfZW1w
dHkgKGludCBzaXplLCByeF9CaXRzZXQgc2V0KTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9udWxs
IChpbnQgc2l6ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X3VuaXZlcnNl
IChpbnQgc2l6ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X2NvbXBsZW1l
bnQgKGludCBzaXplLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfYXNzaWdu
IChpbnQgc2l6ZSwgcnhfQml0c2V0IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2Jp
dHNldF91bmlvbiAoaW50IHNpemUsIHJ4X0JpdHNldCBhLCByeF9CaXRzZXQgYik7ClJYX0RFQ0wg
dm9pZCByeF9iaXRzZXRfaW50ZXJzZWN0aW9uIChpbnQgc2l6ZSwKCQkJCSAgICAgcnhfQml0c2V0
IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9kaWZmZXJlbmNlIChpbnQg
c2l6ZSwgcnhfQml0c2V0IGEsIHJ4X0JpdHNldCBiKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9y
ZXZkaWZmZXJlbmNlIChpbnQgc2l6ZSwKCQkJCSAgICAgIHJ4X0JpdHNldCBhLCByeF9CaXRzZXQg
Yik7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfeG9yIChpbnQgc2l6ZSwgcnhfQml0c2V0IGEsIHJ4
X0JpdHNldCBiKTsKUlhfREVDTCB1bnNpZ25lZCBsb25nIHJ4X2JpdHNldF9oYXNoIChpbnQgc2l6
ZSwgcnhfQml0c2V0IGIpOwpSWF9ERUNMIHN0cnVjdCByeF9oYXNoX2l0ZW0gKiByeF9oYXNoX2Zp
bmQgKHN0cnVjdCByeF9oYXNoICogdGFibGUsCgkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaGFzaCwK
CQkJCQkgICAgdm9pZCAqIHZhbHVlLAoJCQkJCSAgICBzdHJ1Y3QgcnhfaGFzaF9ydWxlcyAqIHJ1
bGVzKTsKUlhfREVDTCBzdHJ1Y3QgcnhfaGFzaF9pdGVtICogcnhfaGFzaF9zdG9yZSAoc3RydWN0
IHJ4X2hhc2ggKiB0YWJsZSwKCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgaGFzaCwKCQkJCQkgICAg
IHZvaWQgKiB2YWx1ZSwKCQkJCQkgICAgIHN0cnVjdCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpS
WF9ERUNMIHZvaWQgcnhfaGFzaF9mcmVlIChzdHJ1Y3QgcnhfaGFzaF9pdGVtICogaXQsIHN0cnVj
dCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9oYXNoX3RhYmxl
IChzdHJ1Y3QgcnhfaGFzaCAqIHRhYiwgcnhfaGFzaF9mcmVlZm4gZnJlZWZuLAoJCQkJIHN0cnVj
dCByeF9oYXNoX3J1bGVzICogcnVsZXMpOwpSWF9ERUNMIHJ4X0JpdHNldCByeF9jc2V0IChzdHJ1
Y3QgcnggKnJ4KTsKUlhfREVDTCByeF9CaXRzZXQgcnhfY29weV9jc2V0IChzdHJ1Y3QgcnggKnJ4
LCByeF9CaXRzZXQgYSk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX2NzZXQgKHN0cnVjdCByeCAqIHJ4
LCByeF9CaXRzZXQgYyk7ClJYX0RFQ0wgc3RydWN0IHJleHBfbm9kZSAqIHJleHBfbm9kZSAoc3Ry
dWN0IHJ4ICpyeCwKCQkJCSAgICAgIGVudW0gcmV4cF9ub2RlX3R5cGUgdHlwZSk7ClJYX0RFQ0wg
c3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3JfY3NldCAoc3RydWN0IHJ4ICogcngsCgkJCQkJIHJ4
X0JpdHNldCBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9jb25jYXQgKHN0
cnVjdCByeCAqIHJ4LAoJCQkJCSAgIHN0cnVjdCByZXhwX25vZGUgKiBhLAoJCQkJCSAgIHN0cnVj
dCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9hbHRl
cm5hdGUgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCSAgICAgIHN0cnVjdCByZXhwX25vZGUgKiBhLAoJ
CQkJCSAgICAgIHN0cnVjdCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2Rl
ICogcnhfbWtfcl9vcHQgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCXN0cnVjdCByZXhwX25vZGUgKiBh
KTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9zdGFyIChzdHJ1Y3QgcnggKiBy
eCwKCQkJCQkgc3RydWN0IHJleHBfbm9kZSAqIGEpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUg
KiByeF9ta19yXzJwaGFzZV9zdGFyIChzdHJ1Y3QgcnggKiByeCwKCQkJCQkJc3RydWN0IHJleHBf
bm9kZSAqIGEsCgkJCQkJCXN0cnVjdCByZXhwX25vZGUgKiBiKTsKUlhfREVDTCBzdHJ1Y3QgcmV4
cF9ub2RlICogcnhfbWtfcl9zaWRlX2VmZmVjdCAoc3RydWN0IHJ4ICogcngsCgkJCQkJCXJ4X3Np
ZGVfZWZmZWN0IGEpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUgKiByeF9ta19yX2RhdGEgIChz
dHJ1Y3QgcnggKiByeCwKCQkJCQkgIHZvaWQgKiBhKTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVfcmV4
cCAoc3RydWN0IHJ4ICogcngsIHN0cnVjdCByZXhwX25vZGUgKiBub2RlKTsKUlhfREVDTCBzdHJ1
Y3QgcmV4cF9ub2RlICogcnhfY29weV9yZXhwIChzdHJ1Y3QgcnggKnJ4LAoJCQkJCSBzdHJ1Y3Qg
cmV4cF9ub2RlICpub2RlKTsKUlhfREVDTCBzdHJ1Y3QgcnhfbmZhX3N0YXRlICogcnhfbmZhX3N0
YXRlIChzdHJ1Y3QgcnggKnJ4KTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVfbmZhX3N0YXRlIChzdHJ1
Y3QgcnhfbmZhX3N0YXRlICogbik7ClJYX0RFQ0wgc3RydWN0IHJ4X25mYV9zdGF0ZSAqIHJ4X2lk
X3RvX25mYV9zdGF0ZSAoc3RydWN0IHJ4ICogcngsCgkJCQkJCSAgaW50IGlkKTsKUlhfREVDTCBz
dHJ1Y3QgcnhfbmZhX2VkZ2UgKiByeF9uZmFfZWRnZSAoc3RydWN0IHJ4ICpyeCwKCQkJCQkgIGVu
dW0gcnhfbmZhX2V0eXBlIHR5cGUsCgkJCQkJICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICpzdGFydCwK
CQkJCQkgIHN0cnVjdCByeF9uZmFfc3RhdGUgKmRlc3QpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9u
ZmFfZWRnZSAoc3RydWN0IHJ4X25mYV9lZGdlICogZSk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX25m
YSAoc3RydWN0IHJ4ICpyeCk7ClJYX0RFQ0wgaW50IHJ4X2J1aWxkX25mYSAoc3RydWN0IHJ4ICpy
eCwKCQkJICBzdHJ1Y3QgcmV4cF9ub2RlICpyZXhwLAoJCQkgIHN0cnVjdCByeF9uZmFfc3RhdGUg
KipzdGFydCwKCQkJICBzdHJ1Y3QgcnhfbmZhX3N0YXRlICoqZW5kKTsKUlhfREVDTCB2b2lkIHJ4
X25hbWVfbmZhX3N0YXRlcyAoc3RydWN0IHJ4ICpyeCk7ClJYX0RFQ0wgaW50IHJ4X2VjbG9zZV9u
ZmEgKHN0cnVjdCByeCAqcngpOwpSWF9ERUNMIHZvaWQgcnhfZGVsZXRlX2Vwc2lsb25fdHJhbnNp
dGlvbnMgKHN0cnVjdCByeCAqcngpOwpSWF9ERUNMIGludCByeF9jb21wYWN0aWZ5X25mYSAoc3Ry
dWN0IHJ4ICpyeCwKCQkJICAgICAgIHZvaWQgKiptZW0sIHVuc2lnbmVkIGxvbmcgKnNpemUpOwpS
WF9ERUNMIHZvaWQgcnhfcmVsZWFzZV9zdXBlcnNldCAoc3RydWN0IHJ4ICpyeCwKCQkJCSAgc3Ry
dWN0IHJ4X3N1cGVyc2V0ICpzZXQpOwpSWF9ERUNMIHN0cnVjdCByeF9zdXBlcnNldCAqIHJ4X3N1
cGVyc2V0X2NvbnMgKHN0cnVjdCByeCAqIHJ4LAoJCQkJCSAgICAgICBzdHJ1Y3QgcnhfbmZhX3N0
YXRlICpjYXIsIHN0cnVjdCByeF9zdXBlcnNldCAqY2RyKTsKUlhfREVDTCBzdHJ1Y3Qgcnhfc3Vw
ZXJzZXQgKiByeF9zdXBlcnN0YXRlX2VjbG9zdXJlX3VuaW9uCiAgKHN0cnVjdCByeCAqIHJ4LCBz
dHJ1Y3Qgcnhfc3VwZXJzZXQgKnNldCwgc3RydWN0IHJ4X25mYV9zdGF0ZV9zZXQgKmVjbCk7ClJY
X0RFQ0wgc3RydWN0IHJ4X3N1cGVyc3RhdGUgKiByeF9zdXBlcnN0YXRlIChzdHJ1Y3QgcnggKnJ4
LAoJCQkJCSAgICAgIHN0cnVjdCByeF9zdXBlcnNldCAqc2V0KTsKUlhfREVDTCBzdHJ1Y3Qgcnhf
aW54ICogcnhfaGFuZGxlX2NhY2hlX21pc3MKICAoc3RydWN0IHJ4ICpyeCwgc3RydWN0IHJ4X3N1
cGVyc3RhdGUgKnN1cGVyLCB1bnNpZ25lZCBjaGFyIGNociwgdm9pZCAqZGF0YSk7ClJYX0RFQ0wg
cmVnX2VycmNvZGVfdCByeF9jb21waWxlIChfX2NvbnN0X18gY2hhciAqcGF0dGVybiwgaW50IHNp
emUsCgkJCQkgIHJlZ19zeW50YXhfdCBzeW50YXgsCgkJCQkgIHN0cnVjdCByZV9wYXR0ZXJuX2J1
ZmZlciAqIHJ4Yik7ClJYX0RFQ0wgdm9pZCByeF9ibG93X3VwX2Zhc3RtYXAgKHN0cnVjdCByZV9w
YXR0ZXJuX2J1ZmZlciAqIHJ4Yik7CiNlbHNlIC8qIFNUREMgKi8KUlhfREVDTCBpbnQgcnhfYml0
c2V0X2lzX2VxdWFsICgpOwpSWF9ERUNMIGludCByeF9iaXRzZXRfaXNfc3Vic2V0ICgpOwpSWF9E
RUNMIGludCByeF9iaXRzZXRfZW1wdHkgKCk7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfbnVsbCAo
KTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF91bml2ZXJzZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Jp
dHNldF9jb21wbGVtZW50ICgpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0X2Fzc2lnbiAoKTsKUlhf
REVDTCB2b2lkIHJ4X2JpdHNldF91bmlvbiAoKTsKUlhfREVDTCB2b2lkIHJ4X2JpdHNldF9pbnRl
cnNlY3Rpb24gKCk7ClJYX0RFQ0wgdm9pZCByeF9iaXRzZXRfZGlmZmVyZW5jZSAoKTsKUlhfREVD
TCB2b2lkIHJ4X2JpdHNldF9yZXZkaWZmZXJlbmNlICgpOwpSWF9ERUNMIHZvaWQgcnhfYml0c2V0
X3hvciAoKTsKUlhfREVDTCB1bnNpZ25lZCBsb25nIHJ4X2JpdHNldF9oYXNoICgpOwpSWF9ERUNM
IHN0cnVjdCByeF9oYXNoX2l0ZW0gKiByeF9oYXNoX2ZpbmQgKCk7ClJYX0RFQ0wgc3RydWN0IHJ4
X2hhc2hfaXRlbSAqIHJ4X2hhc2hfc3RvcmUgKCk7ClJYX0RFQ0wgdm9pZCByeF9oYXNoX2ZyZWUg
KCk7ClJYX0RFQ0wgdm9pZCByeF9mcmVlX2hhc2hfdGFibGUgKCk7ClJYX0RFQ0wgcnhfQml0c2V0
IHJ4X2NzZXQgKCk7ClJYX0RFQ0wgcnhfQml0c2V0IHJ4X2NvcHlfY3NldCAoKTsKUlhfREVDTCB2
b2lkIHJ4X2ZyZWVfY3NldCAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcmV4cF9ub2Rl
ICgpOwpSWF9ERUNMIHN0cnVjdCByZXhwX25vZGUgKiByeF9ta19yX2NzZXQgKCk7ClJYX0RFQ0wg
c3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3JfY29uY2F0ICgpOwpSWF9ERUNMIHN0cnVjdCByZXhw
X25vZGUgKiByeF9ta19yX2FsdGVybmF0ZSAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICog
cnhfbWtfcl9vcHQgKCk7ClJYX0RFQ0wgc3RydWN0IHJleHBfbm9kZSAqIHJ4X21rX3Jfc3RhciAo
KTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl8ycGhhc2Vfc3RhciAoKTsKUlhf
REVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9zaWRlX2VmZmVjdCAoKTsKUlhfREVDTCBz
dHJ1Y3QgcmV4cF9ub2RlICogcnhfbWtfcl9kYXRhICAoKTsKUlhfREVDTCB2b2lkIHJ4X2ZyZWVf
cmV4cCAoKTsKUlhfREVDTCBzdHJ1Y3QgcmV4cF9ub2RlICogcnhfY29weV9yZXhwICgpOwpSWF9E
RUNMIHN0cnVjdCByeF9uZmFfc3RhdGUgKiByeF9uZmFfc3RhdGUgKCk7ClJYX0RFQ0wgdm9pZCBy
eF9mcmVlX25mYV9zdGF0ZSAoKTsKUlhfREVDTCBzdHJ1Y3QgcnhfbmZhX3N0YXRlICogcnhfaWRf
dG9fbmZhX3N0YXRlICgpOwpSWF9ERUNMIHN0cnVjdCByeF9uZmFfZWRnZSAqIHJ4X25mYV9lZGdl
ICgpOwpSWF9ERUNMIHZvaWQgcnhfZnJlZV9uZmFfZWRnZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Zy
ZWVfbmZhICgpOwpSWF9ERUNMIGludCByeF9idWlsZF9uZmEgKCk7ClJYX0RFQ0wgdm9pZCByeF9u
YW1lX25mYV9zdGF0ZXMgKCk7ClJYX0RFQ0wgaW50IHJ4X2VjbG9zZV9uZmEgKCk7ClJYX0RFQ0wg
dm9pZCByeF9kZWxldGVfZXBzaWxvbl90cmFuc2l0aW9ucyAoKTsKUlhfREVDTCBpbnQgcnhfY29t
cGFjdGlmeV9uZmEgKCk7ClJYX0RFQ0wgdm9pZCByeF9yZWxlYXNlX3N1cGVyc2V0ICgpOwpSWF9E
RUNMIHN0cnVjdCByeF9zdXBlcnNldCAqIHJ4X3N1cGVyc2V0X2NvbnMgKCk7ClJYX0RFQ0wgc3Ry
dWN0IHJ4X3N1cGVyc2V0ICogcnhfc3VwZXJzdGF0ZV9lY2xvc3VyZV91bmlvbiAoKTsKUlhfREVD
TCBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHJ4X3N1cGVyc3RhdGUgKCk7ClJYX0RFQ0wgc3RydWN0
IHJ4X2lueCAqIHJ4X2hhbmRsZV9jYWNoZV9taXNzICgpOwpSWF9ERUNMIHJlZ19lcnJjb2RlX3Qg
cnhfY29tcGlsZSAoKTsKUlhfREVDTCB2b2lkIHJ4X2Jsb3dfdXBfZmFzdG1hcCAoKTsKI2VuZGlm
IC8qIFNUREMgKi8KCgojZW5kaWYgLyogUlhfV0FOVF9SWF9ERUZTICovCgoKDAojaWZkZWYgX19T
VERDX18KZXh0ZXJuIGludCByZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpy
eGIsCgkJCV9fY29uc3RfXyBjaGFyICogc3RyaW5nMSwgaW50IHNpemUxLAoJCQlfX2NvbnN0X18g
Y2hhciAqIHN0cmluZzIsIGludCBzaXplMiwKCQkJaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCgkJ
CXN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCgkJCWludCBzdG9wKTsKZXh0ZXJuIGludCByZV9z
ZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHJ4YiwgX19jb25zdF9fIGNoYXIgKnN0
cmluZywKCQkgICAgICBpbnQgc2l6ZSwgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCgkJICAgICAg
c3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncyk7CmV4dGVybiBpbnQgcmVfbWF0Y2hfMiAoc3RydWN0
IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiLAoJCSAgICAgICBfX2NvbnN0X18gY2hhciAqIHN0cmlu
ZzEsIGludCBzaXplMSwKCQkgICAgICAgX19jb25zdF9fIGNoYXIgKiBzdHJpbmcyLCBpbnQgc2l6
ZTIsCgkJICAgICAgIGludCBwb3MsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9w
KTsKZXh0ZXJuIGludCByZV9tYXRjaCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiLAoJ
CSAgICAgX19jb25zdF9fIGNoYXIgKiBzdHJpbmcsCgkJICAgICBpbnQgc2l6ZSwgaW50IHBvcywK
CQkgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpOwpleHRlcm4gcmVnX3N5bnRheF90IHJl
X3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpOwpleHRlcm4gdm9pZCByZV9zZXRfcmVn
aXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCgkJCSAgICAgIHN0cnVjdCBy
ZV9yZWdpc3RlcnMgKnJlZ3MsCgkJCSAgICAgIHVuc2lnbmVkIG51bV9yZWdzLAoJCQkgICAgICBy
ZWdvZmZfdCAqIHN0YXJ0cywgcmVnb2ZmX3QgKiBlbmRzKTsKZXh0ZXJuIF9fY29uc3RfXyBjaGFy
ICogcmVfY29tcGlsZV9wYXR0ZXJuIChfX2NvbnN0X18gY2hhciAqcGF0dGVybiwKCQkJCQlpbnQg
bGVuZ3RoLAoJCQkJCXN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHJ4Yik7CmV4dGVybiBpbnQg
cmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKiByeGIpOwpleHRl
cm4gY2hhciAqIHJlX2NvbXAgKF9fY29uc3RfXyBjaGFyICpzKTsKZXh0ZXJuIGludCByZV9leGVj
IChfX2NvbnN0X18gY2hhciAqcyk7CmV4dGVybiBpbnQgcmVnY29tcCAocmVnZXhfdCAqIHByZWcs
IF9fY29uc3RfXyBjaGFyICogcGF0dGVybiwgaW50IGNmbGFncyk7CmV4dGVybiBpbnQgcmVnZXhl
YyAoX19jb25zdF9fIHJlZ2V4X3QgKnByZWcsIF9fY29uc3RfXyBjaGFyICpzdHJpbmcsCgkJICAg
IHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sCgkJICAgIGludCBlZmxhZ3MpOwpl
eHRlcm4gc2l6ZV90IHJlZ2Vycm9yIChpbnQgZXJyY29kZSwgX19jb25zdF9fIHJlZ2V4X3QgKnBy
ZWcsCgkJCWNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKTsKZXh0ZXJuIHZvaWQgcmVn
ZnJlZSAocmVnZXhfdCAqcHJlZyk7CgojZWxzZSAvKiBTVERDICovCmV4dGVybiBpbnQgcmVfc2Vh
cmNoXzIgKCk7CmV4dGVybiBpbnQgcmVfc2VhcmNoICgpOwpleHRlcm4gaW50IHJlX21hdGNoXzIg
KCk7CmV4dGVybiBpbnQgcmVfbWF0Y2ggKCk7CmV4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0X3N5
bnRheCAoKTsKZXh0ZXJuIHZvaWQgcmVfc2V0X3JlZ2lzdGVycyAoKTsKZXh0ZXJuIF9fY29uc3Rf
XyBjaGFyICogcmVfY29tcGlsZV9wYXR0ZXJuICgpOwpleHRlcm4gaW50IHJlX2NvbXBpbGVfZmFz
dG1hcCAoKTsKZXh0ZXJuIGNoYXIgKiByZV9jb21wICgpOwpleHRlcm4gaW50IHJlX2V4ZWMgKCk7
CmV4dGVybiBpbnQgcmVnY29tcCAoKTsKZXh0ZXJuIGludCByZWdleGVjICgpOwpleHRlcm4gc2l6
ZV90IHJlZ2Vycm9yICgpOwpleHRlcm4gdm9pZCByZWdmcmVlICgpOwoKI2VuZGlmIC8qIFNUREMg
Ki8KCgwKCiNpZmRlZiBSWF9XQU5UX1JYX0RFRlMKCnN0cnVjdCByeF9jb3VudGVyX2ZyYW1lCnsK
ICBpbnQgdGFnOwogIGludCB2YWw7CiAgc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBpbmhlcml0
ZWRfZnJvbTsgLyogSWYgdGhpcyBpcyBhIGNvcHkuICovCiAgc3RydWN0IHJ4X2NvdW50ZXJfZnJh
bWUgKiBjZHI7Cn07CgpzdHJ1Y3QgcnhfYmFja3RyYWNrX2ZyYW1lCnsKICBjaGFyICogY291bnRl
cl9zdGFja19zcDsKCiAgLyogQSBmcmFtZSBpcyB1c2VkIHRvIHNhdmUgdGhlIG1hdGNoZXJzIHN0
YXRlIHdoZW4gaXQgY3Jvc3NlcyBhIAogICAqIGJhY2t0cmFja2luZyBwb2ludC4gIFRoZSBgc3Rr
XycgZmllbGRzIGNvcnJlc3BvbmQgdG8gdmFyaWFibGVzCiAgICogaW4gcmVfc2VhcmNoXzIgKGp1
c3Qgc3RyaXAgb2ZmIHRoZXMgYHN0a18nKS4gIFRoZXkgYXJlIGRvY3VtZW50ZWQKICAgKiB0ZXJl
LgogICAqLwogIHN0cnVjdCByeF9zdXBlcnN0YXRlICogc3RrX3N1cGVyOwogIHVuc2lnbmVkIGlu
dCBzdGtfYzsKICBzdHJ1Y3Qgcnhfc3RyaW5nX3Bvc2l0aW9uIHN0a190ZXN0X3BvczsKICBpbnQg
c3RrX2xhc3RfbDsKICBpbnQgc3RrX2xhc3RfcjsKICBpbnQgc3RrX3Rlc3RfcmV0OwoKICAvKiBU
aGlzIGlzIHRoZSBsaXN0IG9mIG9wdGlvbnMgbGVmdCB0byBleHBsb3JlIGF0IHRoZSBiYWNrdHJh
Y2sKICAgKiBwb2ludCBmb3Igd2hpY2ggdGhpcyBmcmFtZSB3YXMgY3JlYXRlZC4gCiAgICovCiAg
c3RydWN0IHJ4X2Rpc3RpbmN0X2Z1dHVyZSAqIGRmOwogIHN0cnVjdCByeF9kaXN0aW5jdF9mdXR1
cmUgKiBmaXJzdF9kZjsKCiNpZmRlZiBSWF9ERUJVRwogICBpbnQgc3RrX2xpbmVfbm87CiNlbmRp
Zgp9OwoKc3RydWN0IHJ4X3N0YWNrX2NodW5rCnsKICBzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBu
ZXh0X2NodW5rOwogIGludCBieXRlc19sZWZ0OwogIGNoYXIgKiBzcDsKfTsKCmVudW0gcnhfb3V0
ZXJfZW50cnkKewogIHJ4X291dGVyX3N0YXJ0LAogIHJ4X291dGVyX2Zhc3RtYXAsCiAgcnhfb3V0
ZXJfdGVzdCwKICByeF9vdXRlcl9yZXN0b3JlX3Bvcwp9OwoKZW51bSByeF9mYXN0bWFwX3JldHVy
bgp7CiAgcnhfZmFzdG1hcF9jb250aW51YXRpb24sCiAgcnhfZmFzdG1hcF9lcnJvciwKICByeF9m
YXN0bWFwX29rLAogIHJ4X2Zhc3RtYXBfZmFpbAp9OwoKZW51bSByeF9mYXN0bWFwX2VudHJ5CnsK
ICByeF9mYXN0bWFwX3N0YXJ0LAogIHJ4X2Zhc3RtYXBfc3RyaW5nX2JyZWFrCn07CgplbnVtIHJ4
X3Rlc3RfcmV0dXJuCnsKICByeF90ZXN0X2NvbnRpbnVhdGlvbiwKICByeF90ZXN0X2Vycm9yLAog
IHJ4X3Rlc3RfZmFpbCwKICByeF90ZXN0X29rCn07CgplbnVtIHJ4X3Rlc3RfaW50ZXJuYWxfcmV0
dXJuCnsKICByeF90ZXN0X2ludGVybmFsX2Vycm9yLAogIHJ4X3Rlc3RfZm91bmRfZmlyc3QsCiAg
cnhfdGVzdF9saW5lX2ZpbmlzaGVkCn07CgplbnVtIHJ4X3Rlc3RfbWF0Y2hfZW50cnkKewogIHJ4
X3Rlc3Rfc3RhcnQsCiAgcnhfdGVzdF9jYWNoZV9oaXRfbG9vcCwKICByeF90ZXN0X2JhY2tyZWZl
cmVuY2VfY2hlY2ssCiAgcnhfdGVzdF9iYWNrdHJhY2tfcmV0dXJuCn07CgpzdHJ1Y3Qgcnhfc2Vh
cmNoX3N0YXRlCnsKICAvKiBUd28gZ3JvdXBzIG9mIHJlZ2lzdGVycyBhcmUga2VwdC4gIFRoZSBn
cm91cCB3aXRoIHRoZSByZWdpc3RlciBzdGF0ZQogICAqIG9mIHRoZSBjdXJyZW50IHRlc3QgbWF0
Y2gsIGFuZCB0aGUgZ3JvdXAgdGhhdCBob2xkcyB0aGUgc3RhdGUgYXQgdGhlIGVuZAogICAqIG9m
IHRoZSBiZXN0IGtub3duIG1hdGNoLCBpZiBhbnkuCiAgICoKICAgKiBGb3Igc29tZSBwYXR0ZXJu
cywgdGhlcmUgbWF5IGFsc28gYmUgcmVnaXN0ZXJzIHNhdmVkIG9uIHRoZSBzdGFjay4KICAgKi8K
ICB1bnNpZ25lZCBudW1fcmVnczsJCS8qIEluY2x1ZGVzIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVy
IHplcm8uICovCiAgcmVnb2ZmX3QgKiBscGFyZW47CQkvKiBzY3JhdGNoIHNwYWNlIGZvciByZWdp
c3RlciByZXR1cm5zICovCiAgcmVnb2ZmX3QgKiBycGFyZW47CiAgcmVnb2ZmX3QgKiBiZXN0X2xw
c3BhY2U7CS8qIGluIGNhc2UgdGhlIHVzZXIgZG9lc24ndCB3YW50IHRoZXNlICovCiAgcmVnb2Zm
X3QgKiBiZXN0X3Jwc3BhY2U7CS8qIHZhbHVlcywgd2Ugc3RpbGwgbmVlZCBzcGFjZSB0byBzdG9y
ZQoJCQkJICogdGhlbS4gIE5vcm1hbGx5LCB0aGlzIG1lbW9yeWlzIHVudXNlZAoJCQkJICogYW5k
IHRoZSBzcGFjZSBwb2ludGVkIHRvIGJ5IFJFR1MgaXMgCgkJCQkgKiB1c2VkIGluc3RlYWQuCgkJ
CQkgKi8KICAKICBpbnQgbGFzdF9sOwkJCS8qIEhpZ2hlc3QgaW5kZXggb2YgYSB2YWxpZCBscGFy
ZW4uICovCiAgaW50IGxhc3RfcjsJCQkvKiBJdCdzIGR1YWwuICovCiAgCiAgaW50ICogYmVzdF9s
cGFyZW47CQkvKiBUaGlzIGNvbnRhaW5zIHRoZSBiZXN0IGtub3duIHJlZ2lzdGVyICovCiAgaW50
ICogYmVzdF9ycGFyZW47CQkvKiBhc3NpZ25tZW50cy4gCgkJCQkgKiBUaGlzIG1heSBwb2ludCB0
byB0aGUgc2FtZSBtZW0gYXMKCQkJCSAqIGJlc3RfbHBzcGFjZSwgb3IgaXQgbWlnaHQgcG9pbnQg
dG8gbWVtb3J5CgkJCQkgKiBwYXNzZWQgYnkgdGhlIGNhbGxlci4KCQkJCSAqLwogIGludCBiZXN0
X2xhc3RfbDsJCS8qIGJlc3RfbGFzdF9sOmJlc3RfbHBhcmVuOjpsYXN0X2w6bHBhcmVuICovCiAg
aW50IGJlc3RfbGFzdF9yOwoKCiAgdW5zaWduZWQgY2hhciAqIHRyYW5zbGF0ZTsgIAoKICBzdHJ1
Y3Qgcnhfc3RyaW5nX3Bvc2l0aW9uIG91dGVyX3BvczsKCiAgc3RydWN0IHJ4X3N1cGVyc3RhdGUg
KiBzdGFydF9zdXBlcjsKICBpbnQgbmZhX2Nob2ljZTsKICBpbnQgZmlyc3RfZm91bmQ7CQkvKiBJ
ZiB0cnVlLCByZXR1cm4gYWZ0ZXIgZmluZGluZyBhbnkgbWF0Y2guICovCiAgaW50IHJldF92YWw7
CgogIC8qIEZvciBjb250aW51YXRpb25zLi4uICovCiAgZW51bSByeF9vdXRlcl9lbnRyeSBvdXRl
cl9zZWFyY2hfcmVzdW1lX3B0OwogIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqIHNhdmVkX3J4
YjsKICBpbnQgc2F2ZWRfc3RhcnRwb3M7CiAgaW50IHNhdmVkX3JhbmdlOwogIGludCBzYXZlZF9z
dG9wOwogIGludCBzYXZlZF90b3RhbF9zaXplOwogIHJ4X2dldF9idXJzdF9mbiBzYXZlZF9nZXRf
YnVyc3Q7CiAgcnhfYmFja19jaGVja19mbiBzYXZlZF9iYWNrX2NoZWNrOwogIHN0cnVjdCByZV9y
ZWdpc3RlcnMgKiBzYXZlZF9yZWdzOwogIAogIC8qKgogICAqKiBzdGF0ZSBmb3IgZmFzdG1hcAog
ICAqKi8KICBjaGFyICogZmFzdG1hcDsKICBpbnQgZmFzdG1hcF9jaHI7CiAgaW50IGZhc3RtYXBf
dmFsOwoKICAvKiBmb3IgY29udGludWF0aW9ucyBpbiB0aGUgZmFzdG1hcCBwcm9jZWR1cmU6ICov
CiAgZW51bSByeF9mYXN0bWFwX2VudHJ5IGZhc3RtYXBfcmVzdW1lX3B0OwoKICAvKioKICAgKiog
c3RhdGUgZm9yIHRlc3RfbWF0Y2ggCiAgICoqLwoKICAvKiBUaGUgY3VycmVudCBzdXBlck5GQSBw
b3NpdGlvbiBvZiB0aGUgbWF0Y2hlci4gKi8KICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cGVy
OwogIAogIC8qIFRoZSBtYXRjaGVyIGludGVycHJldHMgYSBzZXJpZXMgb2YgaW5zdHJ1Y3Rpb24g
ZnJhbWVzLgogICAqIFRoaXMgaXMgdGhlIGBpbnN0cnVjdGlvbiBjb3VudGVyJyBmb3IgdGhlIGlu
dGVycHJldGF0aW9uLgogICAqLwogIHN0cnVjdCByeF9pbnggKiBpZnI7CiAgCiAgLyogV2UgaW5z
ZXJ0IGEgZ2hvc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgdG8gcHJpbWUKICAgKiB0aGUgbmZh
LiAgdGVzdF9wb3MucG9zLCB0ZXN0X3Bvcy5zdHJfaGFsZiwgYW5kIHRlc3RfcG9zLmVuZF9oYWxm
CiAgICoga2VlcCB0cmFjayBvZiB0aGUgdGVzdC1tYXRjaCBwb3NpdGlvbiBhbmQgc3RyaW5nLWhh
bGYuCiAgICovCiAgdW5zaWduZWQgY2hhciBjOwogIAogIC8qIFBvc2l0aW9uIHdpdGhpbiB0aGUg
c3RyaW5nLiAqLwogIHN0cnVjdCByeF9zdHJpbmdfcG9zaXRpb24gdGVzdF9wb3M7CgogIHN0cnVj
dCByeF9zdGFja19jaHVuayAqIGNvdW50ZXJfc3RhY2s7CiAgc3RydWN0IHJ4X3N0YWNrX2NodW5r
ICogYmFja3RyYWNrX3N0YWNrOwogIGludCBiYWNrdHJhY2tfZnJhbWVfYnl0ZXM7CiAgaW50IGNo
dW5rX2J5dGVzOwogIHN0cnVjdCByeF9zdGFja19jaHVuayAqIGZyZWVfY2h1bmtzOwoKICAvKiBU
byByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLCBzZXQgdGVzdF9yZXQgYW5kIAogICAqIGBnb3Rv
IHRlc3RfZG9fcmV0dXJuJy4KICAgKgogICAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlOgog
ICAqICAgICAxICAgLS0tIGVuZCBvZiBzdHJpbmcgd2hpbGUgdGhlIHN1cGVyTkZBIGlzIHN0aWxs
IGdvaW5nCiAgICogICAgIDAgICAtLS0gaW50ZXJuYWwgZXJyb3IgKG91dCBvZiBtZW1vcnkpCiAg
ICoJLTEgICAtLS0gc2VhcmNoIGNvbXBsZXRlZCBieSByZWFjaGluZyB0aGUgc3VwZXJORkEgZmFp
bCBzdGF0ZQogICAqICAgIC0yICAgLS0tIGEgbWF0Y2ggd2FzIGZvdW5kLCBtYXliZSBub3QgdGhl
IGxvbmdlc3QuCiAgICoKICAgKiBXaGVuIHRoZSBzZWFyY2ggaXMgY29tcGxldGUgKC0xKSwgYmVz
dF9sYXN0X3IgaW5kaWNhdGVzIHdoZXRoZXIKICAgKiBhIG1hdGNoIHdhcyBmb3VuZC4KICAgKgog
ICAqIC0yIGlzIHJldHVybiBvbmx5IGlmIHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCBpcyBub24t
emVyby4KICAgKgogICAqIGlmIHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCBpcyBub24temVybywg
YSByZXR1cm4gb2YgLTEgaW5kaWNhdGVzIG5vIG1hdGNoLAogICAqIG90aGVyd2lzZSwgYmVzdF9s
YXN0X3IgaGFzIHRvIGJlIGNoZWNrZWQuCiAgICovCiAgaW50IHRlc3RfcmV0OwoKICBpbnQgY291
bGRfaGF2ZV9jb250aW51ZWQ7CiAgCiNpZmRlZiBSWF9ERUJVRwogIGludCBiYWNrdHJhY2tfZGVw
dGg7CiAgLyogVGhlcmUgaXMgYSBzZWFyY2ggdHJlZSB3aXRoIGV2ZXJ5IG5vZGUgYXMgc2V0IG9m
IGRldGVybWluaXN0aWMKICAgKiB0cmFuc2l0aW9ucyBpbiB0aGUgc3VwZXIgbmZhLiAgRm9yIGV2
ZXJ5IGJyYW5jaCBvZiBhIAogICAqIGJhY2t0cmFjayBwb2ludCBpcyBhbiBlZGdlIGluIHRoZSB0
cmVlLgogICAqIFRoaXMgY291bnRzIHVwIGEgcHJlLW9yZGVyIG9mIG5vZGVzIGluIHRoYXQgdHJl
ZS4KICAgKiBJdCdzIHNhdmVkIG9uIHRoZSBzZWFyY2ggc3RhY2sgYW5kIHByaW50ZWQgd2hlbiBk
ZWJ1Z2dpbmcuIAogICAqLwogIGludCBsaW5lX25vOwogIGludCBsaW5lc19mb3VuZDsKI2VuZGlm
CgoKICAvKiBGb3IgY29udGludWF0aW9ucyB3aXRoaW4gdGhlIG1hdGNoIHRlc3RlciAqLwogIGVu
dW0gcnhfdGVzdF9tYXRjaF9lbnRyeSB0ZXN0X21hdGNoX3Jlc3VtZV9wdDsKICBzdHJ1Y3Qgcnhf
aW54ICogc2F2ZWRfbmV4dF90cl90YWJsZTsKICBzdHJ1Y3QgcnhfaW54ICogc2F2ZWRfdGhpc190
cl90YWJsZTsKICBpbnQgc2F2ZWRfcmVnOwogIHN0cnVjdCByeF9iYWNrdHJhY2tfZnJhbWUgKiBz
YXZlZF9iZjsKICAKfTsKCgwKZXh0ZXJuIGNoYXIgcnhfc2xvd21hcFtdOwpleHRlcm4gdW5zaWdu
ZWQgY2hhciByeF9pZF90cmFuc2xhdGlvbltdOwoKc3RhdGljIF9faW5saW5lX18gdm9pZAppbml0
X2Zhc3RtYXAgKHJ4Yiwgc2VhcmNoX3N0YXRlKQogICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZl
ciAqIHJ4YjsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNoX3N0YXRlICogc2VhcmNoX3N0YXRlOwp7CiAg
c2VhcmNoX3N0YXRlLT5mYXN0bWFwID0gKHJ4Yi0+ZmFzdG1hcAoJCQkgICA/IChjaGFyICopcnhi
LT5mYXN0bWFwCgkJCSAgIDogKGNoYXIgKilyeF9zbG93bWFwKTsKICAvKiBVcGRhdGUgdGhlIGZh
c3RtYXAgbm93IGlmIG5vdCBjb3JyZWN0IGFscmVhZHkuIAogICAqIFdoZW4gdGhlIHJlZ2V4cCB3
YXMgY29tcGlsZWQsIHRoZSBmYXN0bWFwIHdhcyBjb21wdXRlZAogICAqIGFuZCBzdG9yZWQgaW4g
YSBiaXRzZXQuICBUaGlzIGV4cGFuZHMgdGhlIGJpdHNldCBpbnRvIGEKICAgKiBjaGFyYWN0ZXIg
YXJyYXkgY29udGFpbmluZyAxcyBhbmQgMHMuCiAgICovCiAgaWYgKChzZWFyY2hfc3RhdGUtPmZh
c3RtYXAgPT0gcnhiLT5mYXN0bWFwKSAmJiAhcnhiLT5mYXN0bWFwX2FjY3VyYXRlKQogICAgcnhf
Ymxvd191cF9mYXN0bWFwIChyeGIpOwogIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9jaHIgPSAtMTsK
ICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsID0gMDsKICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBf
cmVzdW1lX3B0ID0gcnhfZmFzdG1hcF9zdGFydDsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZAp1
bmluaXRfZmFzdG1hcCAocnhiLCBzZWFyY2hfc3RhdGUpCiAgICAgc3RydWN0IHJlX3BhdHRlcm5f
YnVmZmVyICogcnhiOwogICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBzZWFyY2hfc3RhdGU7
CnsKICAvKiBVbnNldCB0aGUgZmFzdG1hcCBzZW50aW5lbCAqLwogIGlmIChzZWFyY2hfc3RhdGUt
PmZhc3RtYXBfY2hyID49IDApCiAgICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBbc2VhcmNoX3N0YXRl
LT5mYXN0bWFwX2Nocl0KICAgICAgPSBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsOwp9CgpzdGF0
aWMgX19pbmxpbmVfXyBpbnQKZmFzdG1hcF9zZWFyY2ggKHJ4Yiwgc3RvcCwgZ2V0X2J1cnN0LCBh
cHBfY2xvc3VyZSwgc2VhcmNoX3N0YXRlKQogICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAq
IHJ4YjsKICAgICBpbnQgc3RvcDsKICAgICByeF9nZXRfYnVyc3RfZm4gZ2V0X2J1cnN0OwogICAg
IHZvaWQgKiBhcHBfY2xvc3VyZTsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNoX3N0YXRlICogc2VhcmNo
X3N0YXRlOwp7CiAgZW51bSByeF9mYXN0bWFwX2VudHJ5IHBjOwoKICBpZiAoMCkKICAgIHsKICAg
IHJldHVybl9jb250aW51YXRpb246CiAgICAgIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9yZXN1bWVf
cHQgPSBwYzsKICAgICAgcmV0dXJuIHJ4X2Zhc3RtYXBfY29udGludWF0aW9uOwogICAgfQoKICBw
YyA9IHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF9yZXN1bWVfcHQ7CgogIHN3aXRjaCAocGMpCiAgICB7
CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcnhfZmFzdG1hcF9lcnJvcjsKICAgIGNhc2Ugcnhf
ZmFzdG1hcF9zdGFydDoKICAgIGluaXRfZmFzdG1hcF9zZW50aW5hbDoKICAgICAgLyogRm9yIHRo
ZSBzYWtlIG9mIGZhc3QgZmFzdG1hcHBpbmcsIHNldCBhIHNlbnRpbmFsIGluIHRoZSBmYXN0bWFw
LgogICAgICAgKiBUaGlzIHNlbnRpbmFsIHdpbGwgdHJhcCB0aGUgZmFzdG1hcCBsb29wIHdoZW4g
aXQgcmVhY2hlcyB0aGUgbGFzdAogICAgICAgKiB2YWxpZCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcg
aGFsZi4KICAgICAgICoKICAgICAgICogVGhpcyBtdXN0IGJlIHJlc2V0IHdoZW4gdGhlIGZhc3Rt
YXAvc2VhcmNoIGxvb3AgY3Jvc3NlcyBhIHN0cmluZyAKICAgICAgICogYm91bmRyeSwgYW5kIGJl
Zm9yZSByZXR1cm5pbmcgdG8gdGhlIGNhbGxlci4gIFNvIHNvbWV0aW1lcywKICAgICAgICogdGhl
IGZhc3RtYXAgbG9vcCBpcyByZXN0YXJ0ZWQgd2l0aCBgY29udGludWUnLCBvdGhlcnRpbWVzIGJ5
CiAgICAgICAqIGBnb3RvIGluaXRfZmFzdG1hcF9zZW50aW5hbCcuCiAgICAgICAqLwogICAgICBp
ZiAoc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3Muc2l6ZSkKCXsKCSAgc2VhcmNoX3N0YXRlLT5mYXN0
bWFwX2NociA9ICgoc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3Muc2VhcmNoX2RpcmVjdGlvbiA9PSAx
KQoJCQkJICAgICAgID8gKihzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5lbmQgLSAxKQoJCQkJICAg
ICAgIDogKnNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnN0cmluZyk7CgkgIHNlYXJjaF9zdGF0ZS0+
ZmFzdG1hcF92YWwKCSAgICA9IHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcFtzZWFyY2hfc3RhdGUtPmZh
c3RtYXBfY2hyXTsKCSAgc2VhcmNoX3N0YXRlLT5mYXN0bWFwW3NlYXJjaF9zdGF0ZS0+ZmFzdG1h
cF9jaHJdID0gMTsKCX0KICAgICAgZWxzZQoJewoJICBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfY2hy
ID0gLTE7CgkgIHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF92YWwgPSAwOwoJfQogICAgICAKICAgICAg
aWYgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyA+PSBzZWFyY2hfc3RhdGUtPm91dGVyX3Bv
cy5lbmQpCglnb3RvIGZhc3RtYXBfaGl0X2JvdW5kOwogICAgICBlbHNlCgl7CgkgIGlmIChzZWFy
Y2hfc3RhdGUtPm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uID09IDEpCgkgICAgewoJICAgICAg
aWYgKHNlYXJjaF9zdGF0ZS0+ZmFzdG1hcF92YWwpCgkJewoJCSAgZm9yICg7OykKCQkgICAgewoJ
CSAgICAgIHdoaWxlICghc2VhcmNoX3N0YXRlLT5mYXN0bWFwWypzZWFyY2hfc3RhdGUtPm91dGVy
X3Bvcy5wb3NdKQoJCQkrK3NlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkgICAgICByZXR1
cm4gcnhfZmFzdG1hcF9vazsKCQkgICAgfQoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBmb3IgKDs7
KQoJCSAgICB7CgkJICAgICAgd2hpbGUgKCFzZWFyY2hfc3RhdGUtPmZhc3RtYXBbKnNlYXJjaF9z
dGF0ZS0+b3V0ZXJfcG9zLnBvc10pCgkJCSsrc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zOwoJ
CSAgICAgIGlmICgqc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zICE9IHNlYXJjaF9zdGF0ZS0+
ZmFzdG1hcF9jaHIpCgkJCXJldHVybiByeF9mYXN0bWFwX29rOwoJCSAgICAgIGVsc2UgCgkJCXsK
CQkJICArK3NlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkJICBpZiAoc2VhcmNoX3N0YXRl
LT5vdXRlcl9wb3MucG9zID09IHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLmVuZCkKCQkJICAgIGdv
dG8gZmFzdG1hcF9oaXRfYm91bmQ7CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9CgkgIGVsc2UKCSAg
ICB7CgkgICAgICBfX2NvbnN0X18gdW5zaWduZWQgY2hhciAqIGJvdW5kOwoJICAgICAgYm91bmQg
PSBzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5zdHJpbmcgLSAxOwoJICAgICAgaWYgKHNlYXJjaF9z
dGF0ZS0+ZmFzdG1hcF92YWwpCgkJewoJCSAgZm9yICg7OykKCQkgICAgewoJCSAgICAgIHdoaWxl
ICghc2VhcmNoX3N0YXRlLT5mYXN0bWFwWypzZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5wb3NdKQoJ
CQktLXNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvczsKCQkgICAgICByZXR1cm4gcnhfZmFzdG1h
cF9vazsKCQkgICAgfQoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICBmb3IgKDs7KQoJCSAgICB7CgkJ
ICAgICAgd2hpbGUgKCFzZWFyY2hfc3RhdGUtPmZhc3RtYXBbKnNlYXJjaF9zdGF0ZS0+b3V0ZXJf
cG9zLnBvc10pCgkJCS0tc2VhcmNoX3N0YXRlLT5vdXRlcl9wb3MucG9zOwoJCSAgICAgIGlmICgo
KnNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyAhPSBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfY2hy
KSB8fCBzZWFyY2hfc3RhdGUtPmZhc3RtYXBfdmFsKQoJCQlyZXR1cm4gcnhfZmFzdG1hcF9vazsK
CQkgICAgICBlbHNlIAoJCQl7CgkJCSAgLS1zZWFyY2hfc3RhdGUtPm91dGVyX3Bvcy5wb3M7CgkJ
CSAgaWYgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnBvcyA9PSBib3VuZCkKCQkJICAgIGdvdG8g
ZmFzdG1hcF9oaXRfYm91bmQ7CgkJCX0KCQkgICAgfQoJCX0KCSAgICB9Cgl9CiAgICAgIAogICAg
Y2FzZSByeF9mYXN0bWFwX3N0cmluZ19icmVhazoKICAgIGZhc3RtYXBfaGl0X2JvdW5kOgogICAg
ICB7CgkvKiBJZiB3ZSBoaXQgYSBib3VuZCwgaXQgbWF5IGJlIHRpbWUgdG8gZmV0Y2ggYW5vdGhl
ciBidXJzdAoJICogb2Ygc3RyaW5nLCBvciBpdCBtYXkgYmUgdGltZSB0byByZXR1cm4gYSBjb250
aW51YXRpb24gdG8gCiAJICogdGhlIGNhbGxlciwgb3IgaXQgbWlnaHQgYmUgdGltZSB0byBmYWls
LgoJICovCgoJaW50IGJ1cnN0X3N0YXRlOwoJYnVyc3Rfc3RhdGUgPSBnZXRfYnVyc3QgKCZzZWFy
Y2hfc3RhdGUtPm91dGVyX3BvcywgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJc3dpdGNoIChidXJzdF9z
dGF0ZSkKCSAgewoJICBkZWZhdWx0OgoJICBjYXNlIHJ4X2dldF9idXJzdF9lcnJvcjoKCSAgICBy
ZXR1cm4gcnhfZmFzdG1hcF9lcnJvcjsKCSAgY2FzZSByeF9nZXRfYnVyc3RfY29udGludWF0aW9u
OgoJICAgIHsKCSAgICAgIHBjID0gcnhfZmFzdG1hcF9zdHJpbmdfYnJlYWs7CgkgICAgICBnb3Rv
IHJldHVybl9jb250aW51YXRpb247CgkgICAgfQoJICBjYXNlIHJ4X2dldF9idXJzdF9vazoKCSAg
ICBnb3RvIGluaXRfZmFzdG1hcF9zZW50aW5hbDsKCSAgY2FzZSByeF9nZXRfYnVyc3Rfbm9fbW9y
ZToKCSAgICAvKiAuLi5ub3QgYSBzdHJpbmcgc3BsaXQsIHNpbXBseSBubyBtb3JlIHN0cmluZy4g
CgkgICAgICoKCSAgICAgKiBXaGVuIHNlYXJjaGluZyBiYWNrd2FyZCwgcnVubmluZyBvdXQgb2Yg
c3RyaW5nCgkgICAgICogaXMgcmVhc29uIHRvIHF1aXQuCgkgICAgICoKCSAgICAgKiBXaGVuIHNl
YXJjaGluZyBmb3J3YXJkLCB3ZSBhbGxvdyB0aGUgcG9zc2liaWxpdHkKCSAgICAgKiBvZiBhbiAo
ZW1wdHkpIG1hdGNoIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUKCSAgICAgKiB2aXJ0
dWFsIHN0cmluZy4gIFNvLCBmYWxsIHRocm91Z2ggdG8gdGhlIG1hdGNoZXIKCSAgICAgKi8KCSAg
ICByZXR1cm4gKCAgKHNlYXJjaF9zdGF0ZS0+b3V0ZXJfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPT0g
MSkKCQkgICAgPyByeF9mYXN0bWFwX29rCgkJICAgIDogcnhfZmFzdG1hcF9mYWlsKTsKCSAgfQog
ICAgICB9CiAgICB9Cgp9CgoMCgojaWZkZWYgZW1hY3MKLyogVGhlIGBlbWFjcycgc3dpdGNoIHR1
cm5zIG9uIGNlcnRhaW4gbWF0Y2hpbmcgY29tbWFuZHMKICogdGhhdCBtYWtlIHNlbnNlIG9ubHkg
aW4gRW1hY3MuIAogKi8KI2luY2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAibGlzcC5oIgojaW5j
bHVkZSAiYnVmZmVyLmgiCiNpbmNsdWRlICJzeW50YXguaCIKI2VuZGlmIC8qIGVtYWNzICovCgov
KiBTZXR0aW5nIFJYX01FTURCVUcgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIGRibWFsbG9jLiAgTWF5
YmUgd2l0aCBzaW1pbGFyCiAqIHBhY2thZ2VzIHRvby4KICovCiNpZmRlZiBSWF9NRU1EQlVHCiNp
bmNsdWRlIDxtYWxsb2MuaD4KI2VuZGlmIC8qIFJYX1JYX01FTURCVUcgKi8KCi8qIFdlIHVzZWQg
dG8gdGVzdCBmb3IgYEJTVFJJTkcnIGhlcmUsIGJ1dCBvbmx5IEdDQyBhbmQgRW1hY3MgZGVmaW5l
CiAqIGBCU1RSSU5HJywgYXMgZmFyIGFzIEkga25vdywgYW5kIG5laXRoZXIgb2YgdGhlbSB1c2Ug
dGhpcyBjb2RlLiAgCiAqLwojaWYgSEFWRV9TVFJJTkdfSCB8fCBTVERDX0hFQURFUlMKI2luY2x1
ZGUgPHN0cmluZy5oPgoKI2lmbmRlZiBiY21wCiNkZWZpbmUgYmNtcChzMSwgczIsIG4pCW1lbWNt
cCAoKHMxKSwgKHMyKSwgKG4pKQojZW5kaWYKCiNpZm5kZWYgYmNvcHkKI2RlZmluZSBiY29weShz
LCBkLCBuKQltZW1jcHkgKChkKSwgKHMpLCAobikpCiNlbmRpZgoKI2lmbmRlZiBiemVybwojZGVm
aW5lIGJ6ZXJvKHMsIG4pCW1lbXNldCAoKHMpLCAwLCAobikpCiNlbmRpZgoKI2Vsc2UgLyogIEhB
VkVfU1RSSU5HX0ggfHwgU1REQ19IRUFERVJTICovCiNpbmNsdWRlIDxzdHJpbmdzLmg+CiNlbmRp
ZiAgIC8qIG5vdCAoSEFWRV9TVFJJTkdfSCB8fCBTVERDX0hFQURFUlMpICovCgojaWZkZWYgU1RE
Q19IRUFERVJTCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2Vsc2UgLyogbm90IFNURENfSEVBREVSUyAq
LwpjaGFyICptYWxsb2MgKCk7CmNoYXIgKnJlYWxsb2MgKCk7CiNlbmRpZiAvKiBub3QgU1REQ19I
RUFERVJTICovCgoKDAoKLyogSG93IG1hbnkgY2hhcmFjdGVycyBpbiB0aGUgY2hhcmFjdGVyIHNl
dC4gICovCiNkZWZpbmUgQ0hBUl9TRVRfU0laRSAoMSA8PCBDSEFSQklUUykKCiNpZm5kZWYgZW1h
Y3MKLyogRGVmaW5lIHRoZSBzeW50YXggYmFzaWNzIGZvciBcPCwgXD4sIGV0Yy4KICogVGhpcyBt
dXN0IGJlIG5vbnplcm8gZm9yIHRoZSB3b3JkY2hhciBhbmQgbm90d29yZGNoYXIgcGF0dGVybgog
KiBjb21tYW5kcyBpbiByZV9tYXRjaF8yLgogKi8KI2lmbmRlZiBTd29yZCAKI2RlZmluZSBTd29y
ZCAxCiNlbmRpZgojZGVmaW5lIFNZTlRBWChjKSByZV9zeW50YXhfdGFibGVbY10KUlhfREVDTCBj
aGFyIHJlX3N5bnRheF90YWJsZVtDSEFSX1NFVF9TSVpFXTsKI2VuZGlmIC8qIG5vdCBlbWFjcyAq
LwoKCi8qIFRlc3QgaWYgYXQgdmVyeSBiZWdpbm5pbmcgb3IgYXQgdmVyeSBlbmQgb2YgdGhlIHZp
cnR1YWwgY29uY2F0ZW5hdGlvbgogKiAgb2YgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicuICBJZiBv
bmx5IG9uZSBzdHJpbmcsIGl0J3MgYHN0cmluZzInLiAgCiAqLwoKI2RlZmluZSBBVF9TVFJJTkdT
X0JFRygpIFwKICAoICAgLTEJCSBcCiAgID09ICgoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyAt
IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zdHJpbmcpIFwKICAgICAgICsgc2VhcmNoX3N0YXRlLnRl
c3RfcG9zLm9mZnNldCkpCgojZGVmaW5lIEFUX1NUUklOR1NfRU5EKCkgXAogICggICAodG90YWxf
c2l6ZSAtIDEpCSBcCiAgID09ICgoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyAtIHNlYXJjaF9z
dGF0ZS50ZXN0X3Bvcy5zdHJpbmcpIFwKICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9m
ZnNldCkpCgoKLyogVGVzdCBpZiBQT1MgKyAxIHBvaW50cyB0byBhIGNoYXJhY3RlciB3aGljaCBp
cyB3b3JkLWNvbnN0aXR1ZW50LiAgV2UgaGF2ZQogKiB0d28gc3BlY2lhbCBjYXNlcyB0byBjaGVj
ayBmb3I6IGlmIHBhc3QgdGhlIGVuZCBvZiBzdHJpbmcxLCBsb29rIGF0CiAqIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgaW4gc3RyaW5nMjsgYW5kIGlmIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mCiAqIHN0
cmluZzIsIGxvb2sgYXQgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHN0cmluZzEuCiAqCiAqIEFzc3Vt
ZXMgYHN0cmluZzEnIGV4aXN0cywgc28gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggQVRfU1RSSU5H
U19CRUcgKCkuICAKICovCiNkZWZpbmUgTEVUVEVSX1AoUE9TLE9GRikJCQkJCQlcCiAgKCAgIFNZ
TlRBWCAoZmV0Y2hfY2hhcihQT1MsIE9GRiwgYXBwX2Nsb3N1cmUsIHN0b3ApKQkJCVwKICAgPT0g
U3dvcmQpCgovKiBUZXN0IGlmIHRoZSBjaGFyYWN0ZXIgYXQgRCBhbmQgdGhlIG9uZSBhZnRlciBE
IGRpZmZlciB3aXRoIHJlc3BlY3QKICogdG8gYmVpbmcgd29yZC1jb25zdGl0dWVudC4gIAogKi8K
I2RlZmluZSBBVF9XT1JEX0JPVU5EQVJZKGQpCQkJCQkJXAogIChBVF9TVFJJTkdTX0JFRyAoKSB8
fCBBVF9TVFJJTkdTX0VORCAoKSB8fCBMRVRURVJfUCAoZCwwKSAhPSBMRVRURVJfUCAoZCwgMSkp
CgoKI2lmZGVmIFJYX1NVUFBPUlRfQ09OVElOVUFUSU9OUwojZGVmaW5lIFJYX1NUQUNLX0FMTE9D
KEJZVEVTKSBtYWxsb2MoQllURVMpCiNkZWZpbmUgUlhfU1RBQ0tfRlJFRShNRU0pIGZyZWUoTUVN
KQojZWxzZQojZGVmaW5lIFJYX1NUQUNLX0FMTE9DKEJZVEVTKSBhbGxvY2EoQllURVMpCiNkZWZp
bmUgUlhfU1RBQ0tfRlJFRShNRU0pIFwKICAgICAgKChzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKilN
RU0pLT5uZXh0X2NodW5rID0gc2VhcmNoX3N0YXRlLmZyZWVfY2h1bmtzOyBcCiAgICAgIHNlYXJj
aF9zdGF0ZS5mcmVlX2NodW5rcyA9ICgoc3RydWN0IHJ4X3N0YWNrX2NodW5rICopTUVNKTsKCiNl
bmRpZgoKI2RlZmluZSBQVVNIKENIVU5LX1ZBUixCWVRFUykgICBcCiAgaWYgKCFDSFVOS19WQVIg
fHwgKENIVU5LX1ZBUi0+Ynl0ZXNfbGVmdCA8IChCWVRFUykpKSAgXAogICAgewkJCQkJXAogICAg
ICBzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBuZXdfY2h1bms7CVwKICAgICAgaWYgKHNlYXJjaF9z
dGF0ZS5mcmVlX2NodW5rcykJCQlcCgl7CQkJCVwKCSAgbmV3X2NodW5rID0gc2VhcmNoX3N0YXRl
LmZyZWVfY2h1bmtzOwlcCgkgIHNlYXJjaF9zdGF0ZS5mcmVlX2NodW5rcyA9IHNlYXJjaF9zdGF0
ZS5mcmVlX2NodW5rcy0+bmV4dF9jaHVuazsgXAoJfQkJCQlcCiAgICAgIGVsc2UJCQkJXAoJewkJ
CQlcCgkgIG5ld19jaHVuayA9IChzdHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKilSWF9TVEFDS19BTExP
QyhzZWFyY2hfc3RhdGUuY2h1bmtfYnl0ZXMpOyBcCgkgIGlmICghbmV3X2NodW5rKQkJXAoJICAg
IHsJCQkJXAoJICAgICAgc2VhcmNoX3N0YXRlLnJldF92YWwgPSAwOwkJXAoJICAgICAgZ290byB0
ZXN0X2RvX3JldHVybjsJXAoJICAgIH0JCQkJXAoJfQkJCQlcCiAgICAgIG5ld19jaHVuay0+c3Ag
PSAoY2hhciAqKW5ld19jaHVuayArIHNpemVvZiAoc3RydWN0IHJ4X3N0YWNrX2NodW5rKTsgXAog
ICAgICBuZXdfY2h1bmstPmJ5dGVzX2xlZnQgPSAoc2VhcmNoX3N0YXRlLmNodW5rX2J5dGVzIFwK
CQkJICAgICAgIC0gKEJZVEVTKSBcCgkJCSAgICAgICAtIHNpemVvZiAoc3RydWN0IHJ4X3N0YWNr
X2NodW5rKSk7IFwKICAgICAgbmV3X2NodW5rLT5uZXh0X2NodW5rID0gQ0hVTktfVkFSOyBcCiAg
ICAgIENIVU5LX1ZBUiA9IG5ld19jaHVuazsJCVwKICAgIH0gXAogIGVsc2UgXAogICAgKENIVU5L
X1ZBUi0+c3AgKz0gKEJZVEVTKSksIChDSFVOS19WQVItPmJ5dGVzX2xlZnQgLT0gKEJZVEVTKSkK
CiNkZWZpbmUgUE9QKENIVU5LX1ZBUixCWVRFUykgXAogIGlmIChDSFVOS19WQVItPnNwID09ICgo
Y2hhciAqKUNIVU5LX1ZBUiArIHNpemVvZigqQ0hVTktfVkFSKSkpIFwKICAgIHsgXAogICAgICBz
dHJ1Y3Qgcnhfc3RhY2tfY2h1bmsgKiBuZXdfY2h1bmsgPSBDSFVOS19WQVItPm5leHRfY2h1bms7
IFwKICAgICAgUlhfU1RBQ0tfRlJFRShDSFVOS19WQVIpOyBcCiAgICAgIENIVU5LX1ZBUiA9IG5l
d19jaHVuazsgXAogICAgfSBcCiAgZWxzZSBcCiAgICAoQ0hVTktfVkFSLT5zcCAtPSBCWVRFUyks
IChDSFVOS19WQVItPmJ5dGVzX2xlZnQgKz0gQllURVMpCgoKCiNkZWZpbmUgU1JDSF9UUkFOU0xB
VEUoQykgIHNlYXJjaF9zdGF0ZS50cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChDKV0KCgoMCgoj
aWZkZWYgX19TVERDX18KUlhfREVDTCBfX2lubGluZV9fIGludApyeF9zZWFyY2ggIChzdHJ1Y3Qg
cmVfcGF0dGVybl9idWZmZXIgKiByeGIsCgkgICAgaW50IHN0YXJ0cG9zLAoJICAgIGludCByYW5n
ZSwKCSAgICBpbnQgc3RvcCwKCSAgICBpbnQgdG90YWxfc2l6ZSwKCSAgICByeF9nZXRfYnVyc3Rf
Zm4gZ2V0X2J1cnN0LAoJICAgIHJ4X2JhY2tfY2hlY2tfZm4gYmFja19jaGVjaywKCSAgICByeF9m
ZXRjaF9jaGFyX2ZuIGZldGNoX2NoYXIsCgkgICAgdm9pZCAqIGFwcF9jbG9zdXJlLAoJICAgIHN0
cnVjdCByZV9yZWdpc3RlcnMgKiByZWdzLAoJICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBy
ZXN1bWVfc3RhdGUsCgkgICAgc3RydWN0IHJ4X3NlYXJjaF9zdGF0ZSAqIHNhdmVfc3RhdGUpCiNl
bHNlClJYX0RFQ0wgX19pbmxpbmVfXyBpbnQKcnhfc2VhcmNoICAocnhiLCBzdGFydHBvcywgcmFu
Z2UsIHN0b3AsIHRvdGFsX3NpemUsCgkgICAgZ2V0X2J1cnN0LCBiYWNrX2NoZWNrLCBmZXRjaF9j
aGFyLAoJICAgIGFwcF9jbG9zdXJlLCByZWdzLCByZXN1bWVfc3RhdGUsIHNhdmVfc3RhdGUpCiAg
ICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICogcnhiOwogICAgIGludCBzdGFydHBvczsKICAg
ICBpbnQgcmFuZ2U7CiAgICAgaW50IHN0b3A7CiAgICAgaW50IHRvdGFsX3NpemU7CiAgICAgcnhf
Z2V0X2J1cnN0X2ZuIGdldF9idXJzdDsKICAgICByeF9iYWNrX2NoZWNrX2ZuIGJhY2tfY2hlY2s7
CiAgICAgcnhfZmV0Y2hfY2hhcl9mbiBmZXRjaF9jaGFyOwogICAgIHZvaWQgKiBhcHBfY2xvc3Vy
ZTsKICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICogcmVnczsKICAgICBzdHJ1Y3Qgcnhfc2VhcmNo
X3N0YXRlICogcmVzdW1lX3N0YXRlOwogICAgIHN0cnVjdCByeF9zZWFyY2hfc3RhdGUgKiBzYXZl
X3N0YXRlOwojZW5kaWYKewogIGludCBwYzsKICBpbnQgdGVzdF9zdGF0ZTsKICBzdHJ1Y3Qgcnhf
c2VhcmNoX3N0YXRlIHNlYXJjaF9zdGF0ZTsKCiAgc2VhcmNoX3N0YXRlLmZyZWVfY2h1bmtzID0g
MDsKICBpZiAoIXJlc3VtZV9zdGF0ZSkKICAgIHBjID0gcnhfb3V0ZXJfc3RhcnQ7CiAgZWxzZQog
ICAgewogICAgICBzZWFyY2hfc3RhdGUgPSAqcmVzdW1lX3N0YXRlOwogICAgICByZWdzID0gc2Vh
cmNoX3N0YXRlLnNhdmVkX3JlZ3M7CiAgICAgIHJ4YiA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yeGI7
CiAgICAgIHN0YXJ0cG9zID0gc2VhcmNoX3N0YXRlLnNhdmVkX3N0YXJ0cG9zOwogICAgICByYW5n
ZSA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yYW5nZTsKICAgICAgc3RvcCA9IHNlYXJjaF9zdGF0ZS5z
YXZlZF9zdG9wOwogICAgICB0b3RhbF9zaXplID0gc2VhcmNoX3N0YXRlLnNhdmVkX3RvdGFsX3Np
emU7CiAgICAgIGdldF9idXJzdCA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9nZXRfYnVyc3Q7CiAgICAg
IGJhY2tfY2hlY2sgPSBzZWFyY2hfc3RhdGUuc2F2ZWRfYmFja19jaGVjazsKICAgICAgcGMgPSBz
ZWFyY2hfc3RhdGUub3V0ZXJfc2VhcmNoX3Jlc3VtZV9wdDsKICAgICAgaWYgKDApCgl7CglyZXR1
cm5fY29udGludWF0aW9uOgoJICBpZiAoc2F2ZV9zdGF0ZSkKCSAgICB7CgkgICAgICAqc2F2ZV9z
dGF0ZSA9IHNlYXJjaF9zdGF0ZTsKCSAgICAgIHNhdmVfc3RhdGUtPnNhdmVkX3JlZ3MgPSByZWdz
OwoJICAgICAgc2F2ZV9zdGF0ZS0+c2F2ZWRfcnhiID0gcnhiOwoJICAgICAgc2F2ZV9zdGF0ZS0+
c2F2ZWRfc3RhcnRwb3MgPSBzdGFydHBvczsKCSAgICAgIHNhdmVfc3RhdGUtPnNhdmVkX3Jhbmdl
ID0gcmFuZ2U7CgkgICAgICBzYXZlX3N0YXRlLT5zYXZlZF9zdG9wID0gc3RvcDsKCSAgICAgIHNh
dmVfc3RhdGUtPnNhdmVkX3RvdGFsX3NpemUgPSB0b3RhbF9zaXplOwoJICAgICAgc2F2ZV9zdGF0
ZS0+c2F2ZWRfZ2V0X2J1cnN0ID0gZ2V0X2J1cnN0OwoJICAgICAgc2F2ZV9zdGF0ZS0+c2F2ZWRf
YmFja19jaGVjayA9IGJhY2tfY2hlY2s7CgkgICAgICBzYXZlX3N0YXRlLT5vdXRlcl9zZWFyY2hf
cmVzdW1lX3B0ID0gcGM7CgkgICAgfQoJICByZXR1cm4gcnhfc2VhcmNoX2NvbnRpbnVhdGlvbjsK
CX0KICAgIH0KCiAgc3dpdGNoIChwYykKICAgIHsKICAgIGNhc2Ugcnhfb3V0ZXJfc3RhcnQ6CiAg
ICAgIHNlYXJjaF9zdGF0ZS5yZXRfdmFsID0gcnhfc2VhcmNoX2ZhaWw7CiAgICAgICggIHNlYXJj
aF9zdGF0ZS5scGFyZW4KICAgICAgID0gc2VhcmNoX3N0YXRlLnJwYXJlbgogICAgICAgPSBzZWFy
Y2hfc3RhdGUuYmVzdF9scHNwYWNlCiAgICAgICA9IHNlYXJjaF9zdGF0ZS5iZXN0X3Jwc3BhY2UK
ICAgICAgID0gMCk7CiAgICAgIAogICAgICAvKiBmaWd1cmUgdGhlIG51bWJlciBvZiByZWdpc3Rl
cnMgd2UgbWF5IG5lZWQgZm9yIHVzZSBpbiBiYWNrcmVmZXJlbmNlcy4KICAgICAgICogdGhlIG51
bWJlciBoZXJlIGluY2x1ZGVzIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVyIHplcm8uICAKICAgICAg
ICovCiAgICAgIHNlYXJjaF9zdGF0ZS5udW1fcmVncyA9IHJ4Yi0+cmVfbnN1YiArIDE7CiAgICAg
IAogICAgICAKICAgICAgLyogY2hlY2sgZm9yIG91dC1vZi1yYW5nZSBzdGFydHBvcy4gICovCiAg
ICAgIGlmICgoc3RhcnRwb3MgPCAwKSB8fCAoc3RhcnRwb3MgPiB0b3RhbF9zaXplKSkKCXJldHVy
biByeF9zZWFyY2hfZmFpbDsKICAgICAgCiAgICAgIC8qIGZpeCB1cCByYW5nZSBpZiBpdCBtaWdo
dCBldmVudHVhbGx5IHRha2UgdXMgb3V0c2lkZSB0aGUgc3RyaW5nLiAqLwogICAgICB7CglpbnQg
ZW5kcG9zOwoJZW5kcG9zID0gc3RhcnRwb3MgKyByYW5nZTsKCWlmIChlbmRwb3MgPCAtMSkKCSAg
cmFuZ2UgPSAoLTEgLSBzdGFydHBvcyk7CgllbHNlIGlmIChlbmRwb3MgPiAodG90YWxfc2l6ZSAr
IDEpKQoJICByYW5nZSA9IHRvdGFsX3NpemUgLSBzdGFydHBvczsKICAgICAgfQogICAgICAKICAg
ICAgLyogaWYgdGhlIHNlYXJjaCBpc24ndCB0byBiZSBhIGJhY2t3YXJkcyBvbmUsIGRvbid0IHdh
c3RlIHRpbWUgaW4gYQogICAgICAgKiBsb25nIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIHRoYXQgc2F5
cyBpdCBpcyBhbmNob3JlZC4KICAgICAgICovCiAgICAgIGlmIChyeGItPmJlZ2J1Zl9vbmx5ICYm
IChyYW5nZSA+IDApKQoJewoJICBpZiAoc3RhcnRwb3MgPiAwKQoJICAgIHJldHVybiByeF9zZWFy
Y2hfZmFpbDsKCSAgZWxzZQoJICAgIHJhbmdlID0gMTsKCX0KICAgICAgCiAgICAgIC8qIGRlY2lk
ZSB3aGV0aGVyIHRvIHVzZSBpbnRlcm5hbCBvciB1c2VyLXByb3ZpZGVkIHJlZyBidWZmZXJzLiAq
LwogICAgICBpZiAoIXJlZ3MgfHwgcnhiLT5ub19zdWIpCgl7CgkgIHNlYXJjaF9zdGF0ZS5iZXN0
X2xwc3BhY2UgPQoJICAgIChyZWdvZmZfdCAqKVJFR0VYX0FMTE9DQVRFIChzZWFyY2hfc3RhdGUu
bnVtX3JlZ3MgKiBzaXplb2YocmVnb2ZmX3QpKTsKCSAgc2VhcmNoX3N0YXRlLmJlc3RfcnBzcGFj
ZSA9CgkgICAgKHJlZ29mZl90ICopUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVn
cyAqIHNpemVvZihyZWdvZmZfdCkpOwoJICBzZWFyY2hfc3RhdGUuYmVzdF9scGFyZW4gPSBzZWFy
Y2hfc3RhdGUuYmVzdF9scHNwYWNlOwoJICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4gPSBzZWFy
Y2hfc3RhdGUuYmVzdF9ycHNwYWNlOwoJfQogICAgICBlbHNlCgl7CQoJICAvKiBoYXZlIHRoZSBy
ZWdpc3RlciBkYXRhIGFycmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCgkgIGlmIChyeGItPnJlZ3Nf
YWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCgkgICAgeyAvKiBuby4gIHNvIGFsbG9jYXRl
IHRoZW0gd2l0aCBtYWxsb2MuICB3ZSBuZWVkIG9uZQoJCSBleHRyYSBlbGVtZW50IGJleW9uZCBg
c2VhcmNoX3N0YXRlLm51bV9yZWdzJyBmb3IgdGhlIGAtMScgbWFya2VyCgkJIGdudSBjb2RlIHVz
ZXMuICAqLwoJICAgICAgcmVncy0+bnVtX3JlZ3MgPSBNQVggKFJFX05SRUdTLCByeGItPnJlX25z
dWIgKyAxKTsKCSAgICAgIHJlZ3MtPnN0YXJ0ID0gKChyZWdvZmZfdCAqKQoJCQkgICAgIG1hbGxv
YyAocmVncy0+bnVtX3JlZ3MgKiBzaXplb2YgKCByZWdvZmZfdCkpKTsKCSAgICAgIHJlZ3MtPmVu
ZCA9ICgocmVnb2ZmX3QgKikKCQkJICAgbWFsbG9jIChyZWdzLT5udW1fcmVncyAqIHNpemVvZiAo
IHJlZ29mZl90KSkpOwoJICAgICAgaWYgKHJlZ3MtPnN0YXJ0ID09IDAgfHwgcmVncy0+ZW5kID09
IDApCgkJcmV0dXJuIHJ4X3NlYXJjaF9lcnJvcjsKCSAgICAgIHJ4Yi0+cmVnc19hbGxvY2F0ZWQg
PSBSRUdTX1JFQUxMT0NBVEU7CgkgICAgfQoJICBlbHNlIGlmIChyeGItPnJlZ3NfYWxsb2NhdGVk
ID09IFJFR1NfUkVBTExPQ0FURSkKCSAgICB7IC8qIHllcy4gIGlmIHdlIG5lZWQgbW9yZSBlbGVt
ZW50cyB0aGFuIHdlcmUgYWxyZWFkeQoJCSBhbGxvY2F0ZWQsIHJlYWxsb2NhdGUgdGhlbS4gIGlm
IHdlIG5lZWQgZmV3ZXIsIGp1c3QKCQkgbGVhdmUgaXQgYWxvbmUuICAqLwoJICAgICAgaWYgKHJl
Z3MtPm51bV9yZWdzIDwgc2VhcmNoX3N0YXRlLm51bV9yZWdzICsgMSkKCQl7CgkJICByZWdzLT5u
dW1fcmVncyA9IHNlYXJjaF9zdGF0ZS5udW1fcmVncyArIDE7CgkJICByZWdzLT5zdGFydCA9ICgo
cmVnb2ZmX3QgKikKCQkJCSByZWFsbG9jIChyZWdzLT5zdGFydCwKCQkJCQkgIHJlZ3MtPm51bV9y
ZWdzICogc2l6ZW9mIChyZWdvZmZfdCkpKTsKCQkgIHJlZ3MtPmVuZCA9ICgocmVnb2ZmX3QgKikK
CQkJICAgICAgIHJlYWxsb2MgKHJlZ3MtPmVuZCwKCQkJCQlyZWdzLT5udW1fcmVncyAqIHNpemVv
ZiAoIHJlZ29mZl90KSkpOwoJCSAgaWYgKHJlZ3MtPnN0YXJ0ID09IDAgfHwgcmVncy0+ZW5kID09
IDApCgkJICAgIHJldHVybiByeF9zZWFyY2hfZXJyb3I7CgkJfQoJICAgIH0KCSAgZWxzZSBpZiAo
cnhiLT5yZWdzX2FsbG9jYXRlZCAhPSBSRUdTX0ZJWEVEKQoJICAgIHJldHVybiByeF9zZWFyY2hf
ZXJyb3I7CgkgIAoJICBpZiAocmVncy0+bnVtX3JlZ3MgPCBzZWFyY2hfc3RhdGUubnVtX3JlZ3Mg
KyAxKQoJICAgIHsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X2xwc3BhY2UgPQoJCSgocmVnb2Zm
X3QgKikKCQkgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy
ZWdvZmZfdCkpKTsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X3Jwc3BhY2UgPQoJCSgocmVnb2Zm
X3QgKikKCQkgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy
ZWdvZmZfdCkpKTsKCSAgICAgIHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlbiA9IHNlYXJjaF9zdGF0
ZS5iZXN0X2xwc3BhY2U7CgkgICAgICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4gPSBzZWFyY2hf
c3RhdGUuYmVzdF9ycHNwYWNlOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIHNlYXJjaF9z
dGF0ZS5iZXN0X2xwYXJlbiA9IHJlZ3MtPnN0YXJ0OwoJICAgICAgc2VhcmNoX3N0YXRlLmJlc3Rf
cnBhcmVuID0gcmVncy0+ZW5kOwoJICAgIH0KCX0KICAgICAgCiAgICAgIHNlYXJjaF9zdGF0ZS5s
cGFyZW4gPQoJKHJlZ29mZl90ICopIFJFR0VYX0FMTE9DQVRFIChzZWFyY2hfc3RhdGUubnVtX3Jl
Z3MgKiBzaXplb2YocmVnb2ZmX3QpKTsKICAgICAgc2VhcmNoX3N0YXRlLnJwYXJlbiA9CgkocmVn
b2ZmX3QgKikgUkVHRVhfQUxMT0NBVEUgKHNlYXJjaF9zdGF0ZS5udW1fcmVncyAqIHNpemVvZihy
ZWdvZmZfdCkpOyAKICAgICAgCiAgICAgIGlmICghICggICBzZWFyY2hfc3RhdGUuYmVzdF9ycGFy
ZW4KCSAgICAgJiYgc2VhcmNoX3N0YXRlLmJlc3RfbHBhcmVuCgkgICAgICYmIHNlYXJjaF9zdGF0
ZS5scGFyZW4gJiYgc2VhcmNoX3N0YXRlLnJwYXJlbikpCglyZXR1cm4gcnhfc2VhcmNoX2Vycm9y
OwogICAgICAKICAgICAgc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID0gc2VhcmNoX3N0YXRlLmJl
c3RfbGFzdF9yID0gLTE7CiAgICAgIAogICAgICBzZWFyY2hfc3RhdGUudHJhbnNsYXRlID0gKHJ4
Yi0+dHJhbnNsYXRlCgkJCQk/IHJ4Yi0+dHJhbnNsYXRlCgkJCQk6IHJ4X2lkX3RyYW5zbGF0aW9u
KTsKICAgICAgCiAgICAgIAogICAgICAKICAgICAgLyoKICAgICAgICogdHdvIG5mYSdzIHdlcmUg
Y29tcGlsZWQuICAKICAgICAgICogYDAnIGlzIGNvbXBsZXRlLgogICAgICAgKiBgMScgZmFzdGVy
IGJ1dCBnZXRzIHJlZ2lzdGVycyB3cm9uZyBhbmQgZW5kcyB0b28gc29vbi4KICAgICAgICovCiAg
ICAgIHNlYXJjaF9zdGF0ZS5uZmFfY2hvaWNlID0gKHJlZ3MgJiYgIXJ4Yi0+bGVhc3Rfc3Vicykg
PyAnXDAnIDogJ1wxJzsKICAgICAgCiAgICAgIC8qIHdlIGhhdmUgdGhlIG9wdGlvbiB0byBsb29r
IGZvciB0aGUgYmVzdCBtYXRjaCBvciB0aGUgZmlyc3QKICAgICAgICogb25lIHdlIGNhbiBmaW5k
LiAgaWYgdGhlIHVzZXIgaXNuJ3QgYXNraW5nIGZvciByZWdpc3RlciBpbmZvcm1hdGlvbiwKICAg
ICAgICogd2UgZG9uJ3QgbmVlZCB0byBmaW5kIHRoZSBiZXN0IG1hdGNoLgogICAgICAgKi8KICAg
ICAgc2VhcmNoX3N0YXRlLmZpcnN0X2ZvdW5kID0gIXJlZ3M7CiAgICAgIAogICAgICBpZiAocmFu
Z2UgPj0gMCkKCXsKCSAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZW5kID0gc3RhcnRw
b3MgKyByYW5nZTsKCSAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uID0g
MTsKCX0KICAgICAgZWxzZQoJewoJICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9lbmQg
PSBzdGFydHBvcyArIHJhbmdlOwoJICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9kaXJl
Y3Rpb24gPSAtMTsKCX0KICAgICAgCiAgICAgIC8qIHRoZSB2YWN1b3VzIHNlYXJjaCBhbHdheXMg
dHVybnMgdXAgbm90aGluZy4gKi8KICAgICAgaWYgKChzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNl
YXJjaF9kaXJlY3Rpb24gPT0gMSkKCSAgPyAoc3RhcnRwb3MgPiBzZWFyY2hfc3RhdGUub3V0ZXJf
cG9zLnNlYXJjaF9lbmQpCgkgIDogKHN0YXJ0cG9zIDwgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5z
ZWFyY2hfZW5kKSkKCXJldHVybiByeF9zZWFyY2hfZmFpbDsKICAgICAgCiAgICAgIC8qIG5vdyB3
ZSBidWlsZCB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHN1cGVybmZhLiAqLwogICAgICB7Cglz
dHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzdGFydF9jb250ZW50czsKCXN0cnVjdCByeF9uZmFfc3RhdGVf
c2V0ICogc3RhcnRfbmZhX3NldDsKCQoJLyogd2UgcHJlc3VtZSBoZXJlIHRoYXQgdGhlIG5mYSBz
dGFydCBzdGF0ZSBoYXMgb25seSBvbmUKCSAqIHBvc3NpYmxlIGZ1dHVyZSB3aXRoIG5vIHNpZGUg
ZWZmZWN0cy4gIAoJICovCglzdGFydF9uZmFfc2V0ID0gcnhiLT5zdGFydC0+ZnV0dXJlcy0+ZGVz
dHNldDsKCWlmICggICByeGItPnJ4LnN0YXJ0X3NldAoJICAgICYmIChyeGItPnJ4LnN0YXJ0X3Nl
dC0+c3RhcnRzX2ZvciA9PSAmcnhiLT5yeCkpCgkgIHN0YXJ0X2NvbnRlbnRzID0gcnhiLT5yeC5z
dGFydF9zZXQ7CgllbHNlCgkgIHsKCSAgICBzdGFydF9jb250ZW50cyA9CgkgICAgICByeF9zdXBl
cnN0YXRlX2VjbG9zdXJlX3VuaW9uICgmcnhiLT5yeCwKCQkJCQkgICAgcnhfc3VwZXJzZXRfY29u
cyAoJnJ4Yi0+cngsIDAsIDApLAoJCQkJCSAgICBzdGFydF9uZmFfc2V0KTsKCSAgICAKCSAgICBp
ZiAoIXN0YXJ0X2NvbnRlbnRzKQoJICAgICAgcmV0dXJuIHJ4X3NlYXJjaF9mYWlsOwoJICAgIAoJ
ICAgIHN0YXJ0X2NvbnRlbnRzLT5zdGFydHNfZm9yID0gJnJ4Yi0+cng7CgkgICAgcnhiLT5yeC5z
dGFydF9zZXQgPSBzdGFydF9jb250ZW50czsKCSAgfQoJaWYgKCAgIHN0YXJ0X2NvbnRlbnRzLT5z
dXBlcnN0YXRlCgkgICAgJiYgKHN0YXJ0X2NvbnRlbnRzLT5zdXBlcnN0YXRlLT5yeF9pZCA9PSBy
eGItPnJ4LnJ4X2lkKSkKCSAgewoJICAgIHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlciA9IHN0YXJ0
X2NvbnRlbnRzLT5zdXBlcnN0YXRlOwoJICAgIHJ4X2xvY2tfc3VwZXJzdGF0ZSAoJnJ4Yi0+cngs
IHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcik7CgkgIH0KCWVsc2UKCSAgewoJICAgIHJ4X3Byb3Rl
Y3Rfc3VwZXJzZXQgKCZyeGItPnJ4LCBzdGFydF9jb250ZW50cyk7CgkgICAgCgkgICAgc2VhcmNo
X3N0YXRlLnN0YXJ0X3N1cGVyID0gcnhfc3VwZXJzdGF0ZSAoJnJ4Yi0+cngsIHN0YXJ0X2NvbnRl
bnRzKTsKCSAgICBpZiAoIXNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcikKCSAgICAgIHJldHVybiBy
eF9zZWFyY2hfZmFpbDsKCSAgICByeF9sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hf
c3RhdGUuc3RhcnRfc3VwZXIpOwoJICAgIHJ4X3JlbGVhc2Vfc3VwZXJzZXQgKCZyeGItPnJ4LCBz
dGFydF9jb250ZW50cyk7CgkgIH0KICAgICAgfQogICAgICAKICAgICAgCiAgICAgIC8qIFRoZSBv
dXRlcl9wb3MgdHJhY2tzIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHN0cmluZ3MKICAgICAgICog
YXMgc2VlbiBieSBsb29wIHRoYXQgY2FsbHMgZmFzdG1hcF9zZWFyY2guCiAgICAgICAqCiAgICAg
ICAqIFRoZSBjYWxsZXIgc3VwcGxpZWQgZ2V0X2J1cnN0IGZ1bmN0aW9uIGFjdHVhbGx5IAogICAg
ICAgKiBnaXZlcyB1cyBwb2ludGVycyB0byBjaGFycy4KICAgICAgICogCiAgICAgICAqIENvbW11
bmljYXRpb24gd2l0aCB0aGUgZ2V0X2J1cnN0IGZ1bmN0aW9uIGlzIHRocm91Z2ggYW4KICAgICAg
ICogcnhfc3RyaW5nX3Bvc2l0aW9uIHN0cnVjdHVyZS4gIEhlcmUsIHRoZSBzdHJ1Y3R1cmUgZm9y
CiAgICAgICAqIG91dGVyX3BvcyBpcyBpbml0aWFsaXplZC4gICBJdCBpcyBzZXQgdG8gcG9pbnQg
dG8gdGhlCiAgICAgICAqIE5VTEwgc3RyaW5nLCBhdCBhbiBvZmZzZXQgb2YgU1RBUlRQT1MuICBT
VEFSVFBPUyBpcyBvdXQKICAgICAgICogb2YgcmFuZ2Ugb2YgdGhlIE5VTEwgc3RyaW5nLCBzbyB0
aGUgZmlyc3QgY2FsbCB0byAKICAgICAgICogZ2V0YnVyc3Qgd2lsbCBwYXRjaCB1cCB0aGUgcnhf
c3RyaW5nX3Bvc2l0aW9uIHRvIHBvaW50CiAgICAgICAqIHRvIHZhbGlkIGNoYXJhY3RlcnMuCiAg
ICAgICAqLwoKICAgICAgKCAgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zdHJpbmcKICAgICAgID0g
c2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5lbmQKICAgICAgID0gMCk7CgogICAgICBzZWFyY2hfc3Rh
dGUub3V0ZXJfcG9zLm9mZnNldCA9IDA7CiAgICAgIHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3Muc2l6
ZSA9IDA7CiAgICAgIHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3MucG9zID0gKHVuc2lnbmVkIGNoYXIg
KilzdGFydHBvczsKICAgICAgaW5pdF9mYXN0bWFwIChyeGIsICZzZWFyY2hfc3RhdGUpOwoKICAg
ICAgc2VhcmNoX3N0YXRlLmZhc3RtYXBfcmVzdW1lX3B0ID0gcnhfZmFzdG1hcF9zdGFydDsKICAg
IGNhc2Ugcnhfb3V0ZXJfZmFzdG1hcDoKICAgICAgLyogZG8geyAqLwogICAgcHNldWRvX2RvOgog
ICAgICB7Cgl7CgkgIGludCBmYXN0bWFwX3N0YXRlOwoJICBmYXN0bWFwX3N0YXRlID0gZmFzdG1h
cF9zZWFyY2ggKHJ4Yiwgc3RvcCwgZ2V0X2J1cnN0LCBhcHBfY2xvc3VyZSwKCQkJCQkgICZzZWFy
Y2hfc3RhdGUpOwoJICBzd2l0Y2ggKGZhc3RtYXBfc3RhdGUpCgkgICAgewoJICAgIGNhc2Ugcnhf
ZmFzdG1hcF9jb250aW51YXRpb246CgkgICAgICBwYyA9IHJ4X291dGVyX2Zhc3RtYXA7CgkgICAg
ICBnb3RvIHJldHVybl9jb250aW51YXRpb247CgkgICAgY2FzZSByeF9mYXN0bWFwX2ZhaWw6Cgkg
ICAgICBnb3RvIGZpbmlzaDsKCSAgICBjYXNlIHJ4X2Zhc3RtYXBfb2s6CgkgICAgICBicmVhazsK
CSAgICB9Cgl9CgkKCS8qIG5vdyB0aGUgZmFzdG1hcCBsb29wIGhhcyBicm91Z2h0IHVzIHRvIGEg
cGxhdXNpYmxlIAoJICogc3RhcnRpbmcgcG9pbnQgZm9yIGEgbWF0Y2guICBzbywgaXQncyB0aW1l
IHRvIHJ1biB0aGUKCSAqIG5mYSBhbmQgc2VlIGlmIGEgbWF0Y2ggb2NjdXJlZC4KCSAqLwoJc3Rh
cnRwb3MgPSAoICBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnBvcwoJCSAgICAtIHNlYXJjaF9zdGF0
ZS5vdXRlcl9wb3Muc3RyaW5nCgkJICAgICsgc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5vZmZzZXQp
OwojaWYgMAovKnwqLwlpZiAoKHJhbmdlID4gMCkgJiYgKHN0YXJ0cG9zID09IHNlYXJjaF9zdGF0
ZS5vdXRlcl9wb3Muc2VhcmNoX2VuZCkpCi8qfCovCSAgZ290byBmaW5pc2g7CiNlbmRpZgogICAg
ICB9CgogICAgICBzZWFyY2hfc3RhdGUudGVzdF9tYXRjaF9yZXN1bWVfcHQgPSByeF90ZXN0X3N0
YXJ0OwogICAgICAvKiBkbyBpbnRlcnJ1cHRlZCBmb3IgZW50cnkgcG9pbnQuLi4gKi8KICAgIGNh
c2Ugcnhfb3V0ZXJfdGVzdDoKICAgICAgLyogLi4uZG8gY29udGludWVkICovCiAgICAgIHsKCWdv
dG8gdGVzdF9tYXRjaDsKICAgICAgdGVzdF9yZXR1cm5zX3RvX3NlYXJjaDoKCXN3aXRjaCAodGVz
dF9zdGF0ZSkKCSAgewoJICBjYXNlIHJ4X3Rlc3RfY29udGludWF0aW9uOgoJICAgIHBjID0gcnhf
b3V0ZXJfdGVzdDsKCSAgICBnb3RvIHJldHVybl9jb250aW51YXRpb247CgkgIGNhc2UgcnhfdGVz
dF9lcnJvcjoKCSAgICBzZWFyY2hfc3RhdGUucmV0X3ZhbCA9IHJ4X3NlYXJjaF9lcnJvcjsKCSAg
ICBnb3RvIGZpbmlzaDsKCSAgY2FzZSByeF90ZXN0X2ZhaWw6CgkgICAgYnJlYWs7CgkgIGNhc2Ug
cnhfdGVzdF9vazoKCSAgICBnb3RvIGZpbmlzaDsKCSAgfQoJc2VhcmNoX3N0YXRlLm91dGVyX3Bv
cy5wb3MgKz0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uOwoJc3RhcnRw
b3MgKz0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZGlyZWN0aW9uOwojaWYgMAovKnwq
LwlpZiAoc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvcyA8IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5l
bmQpCi8qfCovCSAgYnJlYWs7CiNlbmRpZgogICAgICB9CiAgICAgIC8qIGRvIGludGVycnVwdGVk
IGZvciBlbnRyeSBwb2ludC4uLiAqLwogICAgY2FzZSByeF9vdXRlcl9yZXN0b3JlX3BvczoKICAg
ICAgewoJaW50IHg7Cgl4ID0gZ2V0X2J1cnN0ICgmc2VhcmNoX3N0YXRlLm91dGVyX3BvcywgYXBw
X2Nsb3N1cmUsIHN0b3ApOwoJc3dpdGNoICh4KQoJICB7CgkgIGNhc2UgcnhfZ2V0X2J1cnN0X2Nv
bnRpbnVhdGlvbjoKCSAgICBwYyA9IHJ4X291dGVyX3Jlc3RvcmVfcG9zOwoJICAgIGdvdG8gcmV0
dXJuX2NvbnRpbnVhdGlvbjsKCSAgY2FzZSByeF9nZXRfYnVyc3RfZXJyb3I6CgkgICAgc2VhcmNo
X3N0YXRlLnJldF92YWwgPSByeF9zZWFyY2hfZXJyb3I7CgkgICAgZ290byBmaW5pc2g7CgkgIGNh
c2UgcnhfZ2V0X2J1cnN0X25vX21vcmU6CgkgICAgaWYgKHJ4Yi0+Y2FuX21hdGNoX2VtcHR5KQoJ
ICAgICAgYnJlYWs7CgkgICAgZ290byBmaW5pc2g7CgkgIGNhc2UgcnhfZ2V0X2J1cnN0X29rOgoJ
ICAgIGJyZWFrOwoJICB9CiAgICAgIH0gLyogfSB3aGlsZSAoLi4uc2VlIGJlbG93Li4uKSAqLwoK
ICAgICAgaWYgKChzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPT0gMSkK
CSAgPyAoc3RhcnRwb3MgPD0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zZWFyY2hfZW5kKQoJICA6
IChzdGFydHBvcyA+IHNlYXJjaF9zdGF0ZS5vdXRlcl9wb3Muc2VhcmNoX2VuZCkpCglnb3RvIHBz
ZXVkb19kbzsKCgkKICAgIGZpbmlzaDoKICAgICAgdW5pbml0X2Zhc3RtYXAgKHJ4YiwgJnNlYXJj
aF9zdGF0ZSk7CiAgICAgIGlmIChzZWFyY2hfc3RhdGUuc3RhcnRfc3VwZXIpCglyeF91bmxvY2tf
c3VwZXJzdGF0ZSAoJnJ4Yi0+cngsIHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcik7CiAgICAgIAoj
aWZkZWYgcmVnZXhfbWFsbG9jCiAgICAgIGlmIChzZWFyY2hfc3RhdGUubHBhcmVuKSBmcmVlIChz
ZWFyY2hfc3RhdGUubHBhcmVuKTsKICAgICAgaWYgKHNlYXJjaF9zdGF0ZS5ycGFyZW4pIGZyZWUg
KHNlYXJjaF9zdGF0ZS5ycGFyZW4pOwogICAgICBpZiAoc2VhcmNoX3N0YXRlLmJlc3RfbHBzcGFj
ZSkgZnJlZSAoc2VhcmNoX3N0YXRlLmJlc3RfbHBzcGFjZSk7CiAgICAgIGlmIChzZWFyY2hfc3Rh
dGUuYmVzdF9ycHNwYWNlKSBmcmVlIChzZWFyY2hfc3RhdGUuYmVzdF9ycHNwYWNlKTsKI2VuZGlm
CiAgICAgIHJldHVybiBzZWFyY2hfc3RhdGUucmV0X3ZhbDsKICAgIH0KCgogdGVzdF9tYXRjaDoK
ICB7CiAgICBlbnVtIHJ4X3Rlc3RfbWF0Y2hfZW50cnkgdGVzdF9wYzsKICAgIGludCBpbng7CiAg
ICB0ZXN0X3BjID0gc2VhcmNoX3N0YXRlLnRlc3RfbWF0Y2hfcmVzdW1lX3B0OwogICAgaWYgKHRl
c3RfcGMgPT0gcnhfdGVzdF9zdGFydCkKICAgICAgewojaWZkZWYgUlhfREVCVUcKCXNlYXJjaF9z
dGF0ZS5iYWNrdHJhY2tfZGVwdGggPSAwOwojZW5kaWYKCXNlYXJjaF9zdGF0ZS5sYXN0X2wgPSBz
ZWFyY2hfc3RhdGUubGFzdF9yID0gMDsKCXNlYXJjaF9zdGF0ZS5scGFyZW5bMF0gPSBzdGFydHBv
czsKCXNlYXJjaF9zdGF0ZS5zdXBlciA9IHNlYXJjaF9zdGF0ZS5zdGFydF9zdXBlcjsKCXNlYXJj
aF9zdGF0ZS5jID0gc2VhcmNoX3N0YXRlLm5mYV9jaG9pY2U7CglzZWFyY2hfc3RhdGUudGVzdF9w
b3MucG9zID0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5wb3MgLSAxOyAgICAKCXNlYXJjaF9zdGF0
ZS50ZXN0X3Bvcy5zdHJpbmcgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLnN0cmluZzsKCXNlYXJj
aF9zdGF0ZS50ZXN0X3Bvcy5lbmQgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLmVuZDsKCXNlYXJj
aF9zdGF0ZS50ZXN0X3Bvcy5vZmZzZXQgPSBzZWFyY2hfc3RhdGUub3V0ZXJfcG9zLm9mZnNldDsK
CXNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zaXplID0gc2VhcmNoX3N0YXRlLm91dGVyX3Bvcy5zaXpl
OwoJc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnNlYXJjaF9kaXJlY3Rpb24gPSAxOwoJc2VhcmNoX3N0
YXRlLmNvdW50ZXJfc3RhY2sgPSAwOwoJc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjayA9IDA7
CglzZWFyY2hfc3RhdGUuYmFja3RyYWNrX2ZyYW1lX2J5dGVzID0KCSAgKHNpemVvZiAoc3RydWN0
IHJ4X2JhY2t0cmFja19mcmFtZSkKCSAgICsgKHJ4Yi0+bWF0Y2hfcmVnc19vbl9zdGFjawoJICAg
ICAgPyBzaXplb2YgKHJlZ29mZl90KSAqIChzZWFyY2hfc3RhdGUubnVtX3JlZ3MgKyAxKSAqIDIK
CSAgICAgIDogMCkpOwoJc2VhcmNoX3N0YXRlLmNodW5rX2J5dGVzID0gc2VhcmNoX3N0YXRlLmJh
Y2t0cmFja19mcmFtZV9ieXRlcyAqIDY0OwoJc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVz
dF9saW5lX2ZpbmlzaGVkOwoJc2VhcmNoX3N0YXRlLmNvdWxkX2hhdmVfY29udGludWVkID0gMDsK
ICAgICAgfSAgCiAgICAvKiBUaGlzIGlzIHdoaWxlICgxKS4uLmV4Y2VwdCB0aGF0IHRoZSBib2R5
IG9mIHRoZSBsb29wIGlzIGludGVycnVwdGVkIAogICAgICogYnkgc29tZSBhbHRlcm5hdGl2ZSBl
bnRyeSBwb2ludHMuCiAgICAgKi8KICBwc2V1ZG9fd2hpbGVfMToKICAgIHN3aXRjaCAodGVzdF9w
YykKICAgICAgewogICAgICBjYXNlIHJ4X3Rlc3RfY2FjaGVfaGl0X2xvb3A6Cglnb3RvIHJlc3Vt
ZV9jb250aW51YXRpb25fMTsKICAgICAgY2FzZSByeF90ZXN0X2JhY2tyZWZlcmVuY2VfY2hlY2s6
Cglnb3RvIHJlc3VtZV9jb250aW51YXRpb25fMjsKICAgICAgY2FzZSByeF90ZXN0X2JhY2t0cmFj
a19yZXR1cm46Cglnb3RvIHJlc3VtZV9jb250aW51YXRpb25fMzsKICAgICAgY2FzZSByeF90ZXN0
X3N0YXJ0OgojaWZkZWYgUlhfREVCVUcKCS8qIFRoZXJlIGlzIGEgc2VhcmNoIHRyZWUgd2l0aCBl
dmVyeSBub2RlIGFzIHNldCBvZiBkZXRlcm1pbmlzdGljCgkgKiB0cmFuc2l0aW9ucyBpbiB0aGUg
c3VwZXIgbmZhLiAgRm9yIGV2ZXJ5IGJyYW5jaCBvZiBhIAoJICogYmFja3RyYWNrIHBvaW50IGlz
IGFuIGVkZ2UgaW4gdGhlIHRyZWUuCgkgKiBUaGlzIGNvdW50cyB1cCBhIHByZS1vcmRlciBvZiBu
b2RlcyBpbiB0aGF0IHRyZWUuCgkgKiBJdCdzIHNhdmVkIG9uIHRoZSBzZWFyY2ggc3RhY2sgYW5k
IHByaW50ZWQgd2hlbiBkZWJ1Z2dpbmcuIAoJICovCglzZWFyY2hfc3RhdGUubGluZV9ubyA9IDA7
CglzZWFyY2hfc3RhdGUubGluZXNfZm91bmQgPSAwOwojZW5kaWYKCQogICAgICB0b3Bfb2ZfY3lj
bGU6CgkvKiBBIHN1cGVyc3RhdGUgaXMgYmFzaWNseSBhIHRyYW5zaXRpb24gdGFibGUsIGluZGV4
ZWQgYnkgCgkgKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmluZyBiZWluZyB0ZXN0ZWQsIGFuZCBj
b250YWluaW5nIAoJICogUlhfSU5YIChgaW5zdHJ1Y3Rpb24gZnJhbWUnKSBzdHJ1Y3R1cmVzLgoJ
ICovCglzZWFyY2hfc3RhdGUuaWZyID0gJnNlYXJjaF9zdGF0ZS5zdXBlci0+dHJhbnNpdGlvbnMg
W3NlYXJjaF9zdGF0ZS5jXTsKCQogICAgICByZWN1cnNlX3Rlc3RfbWF0Y2g6CgkvKiBUaGlzIGlz
IHRoZSBwb2ludCB0byB3aGljaCBjb250cm9sIGlzIHNlbnQgd2hlbiB0aGUKCSAqIHRlc3QgbWF0
Y2hlciBgcmVjdXJzZXMnLiAgQmVmb3JlIGp1bXBpbmcgaGVyZSwgc29tZSB2YXJpYWJsZXMKCSAq
IG5lZWQgdG8gYmUgc2F2ZWQgb24gdGhlIHN0YWNrIGFuZCB0aGUgbmV4dCBpbnN0cnVjdGlvbiBm
cmFtZQoJICogaGFzIHRvIGJlIGNvbXB1dGVkLgoJICovCgkKICAgICAgcmVzdGFydDoKCS8qIFNv
bWUgaW5zdHJ1Y3Rpb25zIGRvbid0IGFkdmFuY2UgdGhlIG1hdGNoZXIsIGJ1dCBqdXN0CgkgKiBj
YXJyeSBvdXQgc29tZSBzaWRlIGVmZmVjdHMgYW5kIGZldGNoIGEgbmV3IGluc3RydWN0aW9uLgoJ
ICogVG8gZGlzcGF0Y2ggdGhhdCBuZXcgaW5zdHJ1Y3Rpb24sIGBnb3RvIHJlc3RhcnQnLgoJICov
CgkKCXsKCSAgc3RydWN0IHJ4X2lueCAqIG5leHRfdHJfdGFibGU7CgkgIHN0cnVjdCByeF9pbngg
KiB0aGlzX3RyX3RhYmxlOwoJICAvKiBUaGUgZmFzdGVzdCByb3V0ZSB0aHJvdWdoIHRoZSBsb29w
IGlzIHdoZW4gdGhlIGluc3RydWN0aW9uIAoJICAgKiBpcyBSWF9ORVhUX0NIQVIuICBUaGlzIGNh
c2UgaXMgZGV0ZWN0ZWQgd2hlbiBTRUFSQ0hfU1RBVEUuSUZSLT5EQVRBCgkgICAqIGlzIG5vbi16
ZXJvLiAgSW4gdGhhdCBjYXNlLCBpdCBwb2ludHMgdG8gdGhlIG5leHQKCSAgICogc3VwZXJzdGF0
ZS4gCgkgICAqCgkgICAqIFRoaXMgYWxsb3dzIHVzIHRvIG5vdCBib3RoZXIgZmV0Y2hpbmcgdGhl
IGJ5dGVjb2RlLgoJICAgKi8KCSAgbmV4dF90cl90YWJsZSA9IChzdHJ1Y3QgcnhfaW54ICopc2Vh
cmNoX3N0YXRlLmlmci0+ZGF0YTsKCSAgdGhpc190cl90YWJsZSA9IHNlYXJjaF9zdGF0ZS5zdXBl
ci0+dHJhbnNpdGlvbnM7CgkgIHdoaWxlIChuZXh0X3RyX3RhYmxlKQoJICAgIHsKI2lmZGVmIFJY
X0RFQlVHXzAKCSAgICAgIGlmIChyeF9kZWJ1Z190cmFjZSkKCQl7CgkJICBzdHJ1Y3Qgcnhfc3Vw
ZXJzZXQgKiBzZXRwOwoJCSAgCgkJICBmcHJpbnRmIChzdGRlcnIsICIlZCAlZD4+IHJlX25leHRf
Y2hhciBAICVkICglZCkiLAoJCQkgICBzZWFyY2hfc3RhdGUubGluZV9ubywKCQkJICAgc2VhcmNo
X3N0YXRlLmJhY2t0cmFja19kZXB0aCwKCQkJICAgKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5wb3Mg
LSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nCgkJCSAgICArIHNlYXJjaF9zdGF0ZS50ZXN0
X3Bvcy5vZmZzZXQpLCBzZWFyY2hfc3RhdGUuYyk7CgkJICAKCQkgIHNlYXJjaF9zdGF0ZS5zdXBl
ciA9CgkJICAgICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikKCQkgICAgICgoY2hhciAqKXRoaXNf
dHJfdGFibGUKCQkgICAgICAtICgodW5zaWduZWQgbG9uZykKCQkJICgoc3RydWN0IHJ4X3N1cGVy
c3RhdGUgKikwKS0+dHJhbnNpdGlvbnMpKSk7CgkJICAKCQkgIHNldHAgPSBzZWFyY2hfc3RhdGUu
c3VwZXItPmNvbnRlbnRzOwoJCSAgZnByaW50ZiAoc3RkZXJyLCAiICAgc3VwZXJzdGV0IChyeD0l
ZCwgJj0leDogIiwKCQkJICAgcnhiLT5yeC5yeF9pZCwgc2V0cCk7CgkJICB3aGlsZSAoc2V0cCkK
CQkgICAgewoJCSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVkICIsIHNldHAtPmlkKTsKCQkgICAg
ICBzZXRwID0gc2V0cC0+Y2RyOwoJCSAgICB9CgkJICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwoJ
CX0KI2VuZGlmCgkgICAgICB0aGlzX3RyX3RhYmxlID0gbmV4dF90cl90YWJsZTsKCSAgICAgICsr
c2VhcmNoX3N0YXRlLnRlc3RfcG9zLnBvczsKCSAgICAgIGlmIChzZWFyY2hfc3RhdGUudGVzdF9w
b3MucG9zID09IHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5lbmQpCgkJewoJCSAgaW50IGJ1cnN0X3N0
YXRlOwoJCXRyeV9idXJzdF8xOgoJCSAgYnVyc3Rfc3RhdGUgPSBnZXRfYnVyc3QgKCZzZWFyY2hf
c3RhdGUudGVzdF9wb3MsCgkJCQkJICAgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJCSAgc3dpdGNoIChi
dXJzdF9zdGF0ZSkKCQkgICAgewoJCSAgICBjYXNlIHJ4X2dldF9idXJzdF9jb250aW51YXRpb246
CgkJICAgICAgc2VhcmNoX3N0YXRlLnNhdmVkX3RoaXNfdHJfdGFibGUgPSB0aGlzX3RyX3RhYmxl
OwoJCSAgICAgIHNlYXJjaF9zdGF0ZS5zYXZlZF9uZXh0X3RyX3RhYmxlID0gbmV4dF90cl90YWJs
ZTsKCQkgICAgICB0ZXN0X3BjID0gcnhfdGVzdF9jYWNoZV9oaXRfbG9vcDsKCQkgICAgICBnb3Rv
IHRlc3RfcmV0dXJuX2NvbnRpbnVhdGlvbjsKCQkgICAgICAKCQkgICAgcmVzdW1lX2NvbnRpbnVh
dGlvbl8xOgoJCSAgICAgIC8qIENvbnRpbnVhdGlvbiBvbmUganVtcHMgaGVyZSB0byBkbyBpdHMg
d29yazogKi8KCQkgICAgICBzZWFyY2hfc3RhdGUuc2F2ZWRfdGhpc190cl90YWJsZSA9IHRoaXNf
dHJfdGFibGU7CgkJICAgICAgc2VhcmNoX3N0YXRlLnNhdmVkX25leHRfdHJfdGFibGUgPSBuZXh0
X3RyX3RhYmxlOwoJCSAgICAgIGdvdG8gdHJ5X2J1cnN0XzE7CgkJICAgICAgCgkJICAgIGNhc2Ug
cnhfZ2V0X2J1cnN0X29rOgoJCSAgICAgIC8qIGdldF9idXJzdCBzdWNjZWVkZWQuLi5rZWVwIGdv
aW5nICovCgkJICAgICAgYnJlYWs7CgkJICAgICAgCgkJICAgIGNhc2UgcnhfZ2V0X2J1cnN0X25v
X21vcmU6CgkJICAgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9saW5lX2Zpbmlz
aGVkOwoJCSAgICAgIHNlYXJjaF9zdGF0ZS5jb3VsZF9oYXZlX2NvbnRpbnVlZCA9IDE7CgkJICAg
ICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkgICAgICAKCQkgICAgY2FzZSByeF9nZXRfYnVyc3Rf
ZXJyb3I6CgkJICAgICAgLyogQW4gZXJyb3IuLi4gKi8KCQkgICAgICBzZWFyY2hfc3RhdGUudGVz
dF9yZXQgPSByeF90ZXN0X2ludGVybmFsX2Vycm9yOwoJCSAgICAgIGdvdG8gdGVzdF9kb19yZXR1
cm47CgkJICAgIH0KCQl9CgkgICAgICBzZWFyY2hfc3RhdGUuYyA9ICpzZWFyY2hfc3RhdGUudGVz
dF9wb3MucG9zOwoJICAgICAgc2VhcmNoX3N0YXRlLmlmciA9IHRoaXNfdHJfdGFibGUgKyBzZWFy
Y2hfc3RhdGUuYzsKCSAgICAgIG5leHRfdHJfdGFibGUgPSAoc3RydWN0IHJ4X2lueCAqKXNlYXJj
aF9zdGF0ZS5pZnItPmRhdGE7CgkgICAgfSAvKiBGYXN0IGxvb3AgdGhyb3VnaCBjYWNoZWQgdHJh
bnNpdGlvbiB0YWJsZXMgKi8KCSAgCgkgIC8qIEhlcmUgd2hlbiB3ZSByYW4gb3V0IG9mIGNhY2hl
ZCBuZXh0LWNoYXIgdHJhbnNpdGlvbnMuIAoJICAgKiBTbywgaXQgd2lsbCBiZSBuZWNlc3Nhcnkg
dG8gZG8gYSBtb3JlIGV4cGVuc2l2ZQoJICAgKiBkaXNwYXRjaCBvbiB0aGUgY3VycmVudCBpbnN0
cnVjdGlvbi4gIFRoZSBzdXBlcnN0YXRlCgkgICAqIHBvaW50ZXIgaXMgYWxsb3dlZCB0byBiZWNv
bWUgaW52YWxpZCBkdXJpbmcgbmV4dC1jaGFyCgkgICAqIHRyYW5zaXRpb25zIC0tIG5vdyB3ZSBt
dXN0IGJyaW5nIGl0IHVwIHRvIGRhdGUuCgkgICAqLwoJICBzZWFyY2hfc3RhdGUuc3VwZXIgPQoJ
ICAgICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikKCSAgICAgKChjaGFyICopdGhpc190cl90YWJs
ZQoJICAgICAgLSAoKHVuc2lnbmVkIGxvbmcpCgkJICgoc3RydWN0IHJ4X3N1cGVyc3RhdGUgKikw
KS0+dHJhbnNpdGlvbnMpKSk7Cgl9CgkKCS8qIFdlJ3ZlIGVuY291bnRlcmVkIGFuIGluc3RydWN0
aW9uIG90aGVyIHRoYW4gbmV4dC1jaGFyLgoJICogRGlzcGF0Y2ggdGhhdCBpbnN0cnVjdGlvbjoK
CSAqLwoJaW54ID0gKGludClzZWFyY2hfc3RhdGUuaWZyLT5pbng7CiNpZmRlZiBSWF9ERUJVR18w
CglpZiAocnhfZGVidWdfdHJhY2UpCgkgIHsKCSAgICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzZXRw
ID0gc2VhcmNoX3N0YXRlLnN1cGVyLT5jb250ZW50czsKCSAgICAKCSAgICBmcHJpbnRmIChzdGRl
cnIsICIlZCAlZD4+ICVzIEAgJWQgKCVkKSIsIHNlYXJjaF9zdGF0ZS5saW5lX25vLAoJCSAgICAg
c2VhcmNoX3N0YXRlLmJhY2t0cmFja19kZXB0aCwKCQkgICAgIGlueF9uYW1lc1tpbnhdLAoJCSAg
ICAgKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5wb3MgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3Ry
aW5nCgkJICAgICAgKyAodGVzdF9wb3MuaGFsZiA9PSAwID8gMCA6IHNpemUxKSksIHNlYXJjaF9z
dGF0ZS5jKTsKCSAgICAKCSAgICBmcHJpbnRmIChzdGRlcnIsICIgICBzdXBlcnN0ZXQgKHJ4PSVk
LCAmPSV4OiAiLAoJCSAgICAgcnhiLT5yeC5yeF9pZCwgc2V0cCk7CgkgICAgd2hpbGUgKHNldHAp
CgkgICAgICB7CgkJZnByaW50ZiAoc3RkZXJyLCAiJWQgIiwgc2V0cC0+aWQpOwoJCXNldHAgPSBz
ZXRwLT5jZHI7CgkgICAgICB9CgkgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKCSAgfQojZW5k
aWYKCXN3aXRjaCAoKGVudW0gcnhfb3Bjb2RlKWlueCkKCSAgewoJICBjYXNlIHJ4X2RvX3NpZGVf
ZWZmZWN0czoKCSAgICAKCSAgICAvKiAgUlhfRE9fU0lERV9FRkZFQ1RTIG9jY3VycyB3aGVuIHdl
IGNyb3NzIGVwc2lsb24gCgkgICAgICogIGVkZ2VzIGFzc29jaWF0ZWQgd2l0aCBwYXJlbnRoZXNl
cywgYmFja3JlZmVyZW5jaW5nLCBldGMuCgkgICAgICovCgkgICAgewoJICAgICAgc3RydWN0IHJ4
X2Rpc3RpbmN0X2Z1dHVyZSAqIGRmID0KCQkoc3RydWN0IHJ4X2Rpc3RpbmN0X2Z1dHVyZSAqKXNl
YXJjaF9zdGF0ZS5pZnItPmRhdGFfMjsKCSAgICAgIHN0cnVjdCByeF9zZV9saXN0ICogZWwgPSBk
Zi0+ZWZmZWN0czsKCSAgICAgIC8qIFNpZGUgZWZmZWN0cyBjb21lIGluIGxpc3RzLiAgVGhpcyB3
YWxrcyBkb3duCgkgICAgICAgKiBhIGxpc3QsIGRpc3BhdGNoaW5nLgoJICAgICAgICovCgkgICAg
ICB3aGlsZSAoZWwpCgkJewoJCSAgbG9uZyBlZmZlY3Q7CgkJICBlZmZlY3QgPSAobG9uZyllbC0+
Y2FyOwoJCSAgaWYgKGVmZmVjdCA8IDApCgkJICAgIHsKI2lmZGVmIFJYX0RFQlVHXzAKCQkgICAg
ICBpZiAocnhfZGVidWdfdHJhY2UpCgkJCXsKCQkJICBzdHJ1Y3Qgcnhfc3VwZXJzZXQgKiBzZXRw
ID0gc2VhcmNoX3N0YXRlLnN1cGVyLT5jb250ZW50czsKCQkJICAKCQkJICBmcHJpbnRmIChzdGRl
cnIsICIuLi4uJWQgJWQ+PiAlc1xuIiwgc2VhcmNoX3N0YXRlLmxpbmVfbm8sCgkJCQkgICBzZWFy
Y2hfc3RhdGUuYmFja3RyYWNrX2RlcHRoLAoJCQkJICAgZWZuYW1lc1stZWZmZWN0XSk7CgkJCX0K
I2VuZGlmCgkJICAgICAgc3dpdGNoICgoZW51bSByZV9zaWRlX2VmZmVjdHMpIGVmZmVjdCkKCgkJ
CXsKCQkJY2FzZSByZV9zZV9wdXNoYmFjazoKCQkJICBzZWFyY2hfc3RhdGUuaWZyID0gJmRmLT5m
dXR1cmVfZnJhbWU7CgkJCSAgaWYgKCFzZWFyY2hfc3RhdGUuaWZyLT5kYXRhKQoJCQkgICAgewoJ
CQkgICAgICBzdHJ1Y3Qgcnhfc3VwZXJzdGF0ZSAqIHN1cDsKCQkJICAgICAgc3VwID0gc2VhcmNo
X3N0YXRlLnN1cGVyOwoJCQkgICAgICByeF9sb2NrX3N1cGVyc3RhdGUgKHJ4LCBzdXApOwoJCQkg
ICAgICBpZiAoIXJ4X2hhbmRsZV9jYWNoZV9taXNzICgmcnhiLT5yeCwKCQkJCQkJCSBzZWFyY2hf
c3RhdGUuc3VwZXIsCgkJCQkJCQkgc2VhcmNoX3N0YXRlLmMsCgkJCQkJCQkgKHNlYXJjaF9zdGF0
ZS5pZnIKCQkJCQkJCSAgLT5kYXRhXzIpKSkKCQkJCXsKCQkJCSAgcnhfdW5sb2NrX3N1cGVyc3Rh
dGUgKHJ4LCBzdXApOwoJCQkJICBzZWFyY2hfc3RhdGUudGVzdF9yZXQgPSByeF90ZXN0X2ludGVy
bmFsX2Vycm9yOwoJCQkJICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkJfQoJCQkgICAgICByeF91
bmxvY2tfc3VwZXJzdGF0ZSAocngsIHN1cCk7CgkJCSAgICB9CgkJCSAgLyogLS1zZWFyY2hfc3Rh
dGUudGVzdF9wb3MucG9zOyAqLwoJCQkgIHNlYXJjaF9zdGF0ZS5jID0gJ3QnOwoJCQkgIHNlYXJj
aF9zdGF0ZS5zdXBlcgoJCQkgICAgPSAoKHN0cnVjdCByeF9zdXBlcnN0YXRlICopCgkJCSAgICAg
ICAoKGNoYXIgKilzZWFyY2hfc3RhdGUuaWZyLT5kYXRhCgkJCQktIChsb25nKSgoKHN0cnVjdCBy
eF9zdXBlcnN0YXRlICopMCkKCQkJCQkgLT50cmFuc2l0aW9ucykpKTsKCQkJICBnb3RvIHRvcF9v
Zl9jeWNsZTsKCQkJICBicmVhazsKCQkJY2FzZSByZV9zZV9wdXNoMDoKCQkJICB7CgkJCSAgICBz
dHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqIG9sZF9jZgoJCQkgICAgICA9IChzZWFyY2hfc3RhdGUu
Y291bnRlcl9zdGFjawoJCQkJID8gKChzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqKQoJCQkJICAg
IHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrLT5zcCkKCQkJCSA6IDApOwoJCQkgICAgc3RydWN0
IHJ4X2NvdW50ZXJfZnJhbWUgKiBjZjsKCQkJICAgIFBVU0ggKHNlYXJjaF9zdGF0ZS5jb3VudGVy
X3N0YWNrLAoJCQkJICBzaXplb2YgKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lKSk7CgkJCSAgICBj
ZiA9ICgoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKikKCQkJCSAgc2VhcmNoX3N0YXRlLmNvdW50
ZXJfc3RhY2stPnNwKTsKCQkJICAgIGNmLT50YWcgPSByZV9zZV9pdGVyOwoJCQkgICAgY2YtPnZh
bCA9IDA7CgkJCSAgICBjZi0+aW5oZXJpdGVkX2Zyb20gPSAwOwoJCQkgICAgY2YtPmNkciA9IG9s
ZF9jZjsKCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJY2FzZSByZV9zZV9mYWlsOgoJCQkgIGdvdG8g
dGVzdF9kb19yZXR1cm47CgkJCWNhc2UgcmVfc2VfYmVnYnVmOgoJCQkgIGlmICghQVRfU1RSSU5H
U19CRUcgKCkpCgkJCSAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkgIGJyZWFrOwoJCQljYXNl
IHJlX3NlX2VuZGJ1ZjoKCQkJICBpZiAoIUFUX1NUUklOR1NfRU5EICgpKQoJCQkgICAgZ290byB0
ZXN0X2RvX3JldHVybjsKCQkJICBicmVhazsKCQkJY2FzZSByZV9zZV93b3JkYmVnOgoJCQkgIGlm
ICggICBMRVRURVJfUCAoJnNlYXJjaF9zdGF0ZS50ZXN0X3BvcywgMSkKCQkJICAgICAgJiYgKCAg
IEFUX1NUUklOR1NfQkVHKCkKCQkJCSAgfHwgIUxFVFRFUl9QICgmc2VhcmNoX3N0YXRlLnRlc3Rf
cG9zLCAwKSkpCgkJCSAgICBicmVhazsKCQkJICBlbHNlCgkJCSAgICBnb3RvIHRlc3RfZG9fcmV0
dXJuOwoJCQljYXNlIHJlX3NlX3dvcmRlbmQ6CgkJCSAgaWYgKCAgICFBVF9TVFJJTkdTX0JFRyAo
KQoJCQkgICAgICAmJiBMRVRURVJfUCAoJnNlYXJjaF9zdGF0ZS50ZXN0X3BvcywgMCkKCQkJICAg
ICAgJiYgKEFUX1NUUklOR1NfRU5EICgpCgkJCQkgIHx8ICFMRVRURVJfUCAoJnNlYXJjaF9zdGF0
ZS50ZXN0X3BvcywgMSkpKQoJCQkgICAgYnJlYWs7CgkJCSAgZWxzZQoJCQkgICAgZ290byB0ZXN0
X2RvX3JldHVybjsKCQkJY2FzZSByZV9zZV93b3JkYm91bmQ6CgkJCSAgaWYgKEFUX1dPUkRfQk9V
TkRBUlkgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MpKQoJCQkgICAgYnJlYWs7CgkJCSAgZWxzZQoJ
CQkgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJY2FzZSByZV9zZV9ub3R3b3JkYm91bmQ6CgkJ
CSAgaWYgKCFBVF9XT1JEX0JPVU5EQVJZICgmc2VhcmNoX3N0YXRlLnRlc3RfcG9zKSkKCQkJICAg
IGJyZWFrOwoJCQkgIGVsc2UKCQkJICAgIGdvdG8gdGVzdF9kb19yZXR1cm47CgkJCWNhc2UgcmVf
c2VfaGF0OgoJCQkgIGlmIChBVF9TVFJJTkdTX0JFRyAoKSkKCQkJICAgIHsKCQkJICAgICAgaWYg
KHJ4Yi0+bm90X2JvbCkKCQkJCWdvdG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICAgIGVsc2UKCQkJ
CWJyZWFrOwoJCQkgICAgfQoJCQkgIGVsc2UKCQkJICAgIHsKCQkJICAgICAgY2hhciBwb3NfYyA9
ICpzZWFyY2hfc3RhdGUudGVzdF9wb3MucG9zOwoJCQkgICAgICBpZiAoICAgKFNSQ0hfVFJBTlNM
QVRFIChwb3NfYykKCQkJCSAgICAgID09IFNSQ0hfVFJBTlNMQVRFKCdcbicpKQoJCQkJICAmJiBy
eGItPm5ld2xpbmVfYW5jaG9yKQoJCQkJYnJlYWs7CgkJCSAgICAgIGVsc2UKCQkJCWdvdG8gdGVz
dF9kb19yZXR1cm47CgkJCSAgICB9CgkJCWNhc2UgcmVfc2VfZG9sbGFyOgoJCQkgIGlmIChBVF9T
VFJJTkdTX0VORCAoKSkKCQkJICAgIHsKCQkJICAgICAgaWYgKHJ4Yi0+bm90X2VvbCkKCQkJCWdv
dG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICAgIGVsc2UKCQkJCWJyZWFrOwoJCQkgICAgfQoJCQkg
IGVsc2UKCQkJICAgIHsKCQkJICAgICAgaWYgKCAgICggICBTUkNIX1RSQU5TTEFURSAoZmV0Y2hf
Y2hhcgoJCQkJCQkgICAgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MsIDEsCgkJCQkJCSAgICAgYXBw
X2Nsb3N1cmUsIHN0b3ApKQoJCQkJICAgICAgPT0gU1JDSF9UUkFOU0xBVEUgKCdcbicpKQoJCQkJ
ICAmJiByeGItPm5ld2xpbmVfYW5jaG9yKQoJCQkJYnJlYWs7CgkJCSAgICAgIGVsc2UKCQkJCWdv
dG8gdGVzdF9kb19yZXR1cm47CgkJCSAgICB9CgkJCSAgCgkJCWNhc2UgcmVfc2VfdHJ5OgoJCQkg
IC8qIFRoaXMgaXMgdGhlIGZpcnN0IHNpZGUgZWZmZWN0IGluIGV2ZXJ5CgkJCSAgICogZXhwcmVz
c2lvbi4KCQkJICAgKgoJCQkgICAqICBGT1IgTk8gR09PRCBSRUFTT04uLi5nZXQgcmlkIG9mIGl0
Li4uCgkJCSAgICovCgkJCSAgYnJlYWs7CgkJCSAgCgkJCWNhc2UgcmVfc2VfcHVzaHBvczoKCQkJ
ICB7CgkJCSAgICBpbnQgdXJoZXJlID0KCQkJICAgICAgKChpbnQpKHNlYXJjaF9zdGF0ZS50ZXN0
X3Bvcy5wb3MKCQkJCSAgICAgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nKQoJCQkgICAg
ICAgKyBzZWFyY2hfc3RhdGUudGVzdF9wb3Mub2Zmc2V0KTsKCQkJICAgIHN0cnVjdCByeF9jb3Vu
dGVyX2ZyYW1lICogb2xkX2NmCgkJCSAgICAgID0gKHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNr
CgkJCQkgPyAoKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICopCgkJCQkgICAgc2VhcmNoX3N0YXRl
LmNvdW50ZXJfc3RhY2stPnNwKQoJCQkJIDogMCk7CgkJCSAgICBzdHJ1Y3QgcnhfY291bnRlcl9m
cmFtZSAqIGNmOwoJCQkgICAgUFVTSChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjaywKCQkJCSBz
aXplb2YgKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lKSk7CgkJCSAgICBjZiA9ICgoc3RydWN0IHJ4
X2NvdW50ZXJfZnJhbWUgKikKCQkJCSAgc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsK
CQkJICAgIGNmLT50YWcgPSByZV9zZV9wdXNocG9zOwoJCQkgICAgY2YtPnZhbCA9IHVyaGVyZTsK
CQkJICAgIGNmLT5pbmhlcml0ZWRfZnJvbSA9IDA7CgkJCSAgICBjZi0+Y2RyID0gb2xkX2NmOwoJ
CQkgICAgYnJlYWs7CgkJCSAgfQoJCQkgIAoJCQljYXNlIHJlX3NlX2Noa3BvczoKCQkJICB7CgkJ
CSAgICBpbnQgdXJoZXJlID0KCQkJICAgICAgKChpbnQpKHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5w
b3MKCQkJCSAgICAgLSBzZWFyY2hfc3RhdGUudGVzdF9wb3Muc3RyaW5nKQoJCQkgICAgICAgKyBz
ZWFyY2hfc3RhdGUudGVzdF9wb3Mub2Zmc2V0KTsKCQkJICAgIHN0cnVjdCByeF9jb3VudGVyX2Zy
YW1lICogY2YKCQkJICAgICAgPSAoKHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICopCgkJCQkgc2Vh
cmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsKCQkJICAgIGlmIChjZi0+dmFsID09IHVyaGVy
ZSkKCQkJICAgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJICAgIGNmLT52YWwgPSB1cmhlcmU7
CgkJCSAgICBicmVhazsKCQkJICB9CgkJCSAgYnJlYWs7CgkJCSAgCgkJCWNhc2UgcmVfc2VfcG9w
cG9zOgoJCQkgIFBPUChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjaywKCQkJICAgICAgc2l6ZW9m
IChzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSkpOwoJCQkgIGJyZWFrOwoJCQkgIAoJCQkgIAoJCQlj
YXNlIHJlX3NlX2F0X2RvdDoKCQkJY2FzZSByZV9zZV9zeW50YXg6CgkJCWNhc2UgcmVfc2Vfbm90
X3N5bnRheDoKI2lmZGVmIGVtYWNzCgkJCSAgLyogCgkJCSAgICogdGhpcyByZWxlYXNlIGxhY2tz
IGVtYWNzIHN1cHBvcnQKCQkJICAgKi8KI2VuZGlmCgkJCSAgYnJlYWs7CgkJCWNhc2UgcmVfc2Vf
d2luOgoJCQljYXNlIHJlX3NlX2xwYXJlbjoKCQkJY2FzZSByZV9zZV9ycGFyZW46CgkJCWNhc2Ug
cmVfc2VfYmFja3JlZjoKCQkJY2FzZSByZV9zZV9pdGVyOgoJCQljYXNlIHJlX3NlX2VuZF9pdGVy
OgoJCQljYXNlIHJlX3NlX3R2OgoJCQljYXNlIHJlX2Zsb29nbGVfZmxhcDoKCQkJICBzZWFyY2hf
c3RhdGUucmV0X3ZhbCA9IDA7CgkJCSAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJfQoJCSAgICB9
CgkJICBlbHNlCgkJICAgIHsKI2lmZGVmIFJYX0RFQlVHXzAKCQkgICAgICBpZiAocnhfZGVidWdf
dHJhY2UpCgkJCWZwcmludGYgKHN0ZGVyciwgIi4uLi4lZCAlZD4+ICVzICVkICVkXG4iLCBzZWFy
Y2hfc3RhdGUubGluZV9ubywKCQkJCSBzZWFyY2hfc3RhdGUuYmFja3RyYWNrX2RlcHRoLAoJCQkJ
IGVmbmFtZXMyW3J4Yi0+c2VfcGFyYW1zIFtlZmZlY3RdLnNlXSwKCQkJCSByeGItPnNlX3BhcmFt
cyBbZWZmZWN0XS5vcDEsCgkJCQkgcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AyKTsKI2VuZGlm
CgkJICAgICAgc3dpdGNoIChyeGItPnNlX3BhcmFtcyBbZWZmZWN0XS5zZSkKCQkJewoJCQljYXNl
IHJlX3NlX3dpbjoKCQkJICAvKiBUaGlzIHNpZGUgZWZmZWN0IGluZGljYXRlcyB0aGF0IHdlJ3Zl
IAoJCQkgICAqIGZvdW5kIGEgbWF0Y2gsIHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIAoJCQkg
ICAqIGJlc3QgbWF0Y2guICBUaGlzIGlzIGEgZmFuY3kgYXNzaWdubWVudCB0byAKCQkJICAgKiBy
ZWdpc3RlciAwIHVubGVzcyB0aGUgY2FsbGVyIGRpZG4ndCAKCQkJICAgKiBjYXJlIGFib3V0IHJl
Z2lzdGVycy4gIEluIHdoaWNoIGNhc2UsCgkJCSAgICogdGhpcyBzdG9wcyB0aGUgbWF0Y2guCgkJ
CSAgICovCgkJCSAgewoJCQkgICAgaW50IHVyaGVyZSA9CgkJCSAgICAgICgoaW50KShzZWFyY2hf
c3RhdGUudGVzdF9wb3MucG9zCgkJCQkgICAgIC0gc2VhcmNoX3N0YXRlLnRlc3RfcG9zLnN0cmlu
ZykKCQkJICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9mZnNldCk7CgkJCSAgICAKCQkJ
ICAgIGlmICggICAoc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9yIDwgMCkKCQkJCXx8ICh1cmhlcmUg
KyAxID4gc2VhcmNoX3N0YXRlLmJlc3RfcnBhcmVuWzBdKSkKCQkJICAgICAgewoJCQkJLyogUmVj
b3JkIHRoZSBiZXN0IGtub3duIGFuZCBrZWVwCgkJCQkgKiBsb29raW5nLgoJCQkJICovCgkJCQlp
bnQgeDsKCQkJCWZvciAoeCA9IDA7IHggPD0gc2VhcmNoX3N0YXRlLmxhc3RfbDsgKyt4KQoJCQkJ
ICBzZWFyY2hfc3RhdGUuYmVzdF9scGFyZW5beF0gPSBzZWFyY2hfc3RhdGUubHBhcmVuW3hdOwoJ
CQkJc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID0gc2VhcmNoX3N0YXRlLmxhc3RfbDsKCQkJCWZv
ciAoeCA9IDA7IHggPD0gc2VhcmNoX3N0YXRlLmxhc3RfcjsgKyt4KQoJCQkJICBzZWFyY2hfc3Rh
dGUuYmVzdF9ycGFyZW5beF0gPSBzZWFyY2hfc3RhdGUucnBhcmVuW3hdOwoJCQkJc2VhcmNoX3N0
YXRlLmJlc3RfcnBhcmVuWzBdID0gdXJoZXJlICsgMTsKCQkJCXNlYXJjaF9zdGF0ZS5iZXN0X2xh
c3RfciA9IHNlYXJjaF9zdGF0ZS5sYXN0X3I7CgkJCSAgICAgIH0KCQkJICAgIC8qIElmIHdlJ3Jl
IG5vdCByZXBvcnRpbmcgdGhlIG1hdGNoLWxlbmd0aCAKCQkJICAgICAqIG9yIG90aGVyIHJlZ2lz
dGVyIGluZm8sIHdlIG5lZWQgbG9vayBubwoJCQkgICAgICogZnVydGhlci4KCQkJICAgICAqLwoJ
CQkgICAgaWYgKHNlYXJjaF9zdGF0ZS5maXJzdF9mb3VuZCkKCQkJICAgICAgewoJCQkJc2VhcmNo
X3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9mb3VuZF9maXJzdDsKCQkJCWdvdG8gdGVzdF9kb19y
ZXR1cm47CgkJCSAgICAgIH0KCQkJICB9CgkJCSAgYnJlYWs7CgkJCWNhc2UgcmVfc2VfbHBhcmVu
OgoJCQkgIHsKCQkJICAgIGludCB1cmhlcmUgPQoJCQkgICAgICAoKGludCkoc2VhcmNoX3N0YXRl
LnRlc3RfcG9zLnBvcwoJCQkJICAgICAtIHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5zdHJpbmcpCgkJ
CSAgICAgICArIHNlYXJjaF9zdGF0ZS50ZXN0X3Bvcy5vZmZzZXQpOwoJCQkgICAgCgkJCSAgICBp
bnQgcmVnID0gcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AxOwojaWYgMAoJCQkgICAgaWYgKHJl
ZyA+IHNlYXJjaF9zdGF0ZS5sYXN0X2wpCiNlbmRpZgoJCQkgICAgICB7CgkJCQlzZWFyY2hfc3Rh
dGUubHBhcmVuW3JlZ10gPSB1cmhlcmUgKyAxOwoJCQkJLyogSW4gYWRkaXRpb24gdG8gbWFraW5n
IHRoaXMgYXNzaWdubWVudCwKCQkJCSAqIHdlIG5vdyBrbm93IHRoYXQgbG93ZXIgbnVtYmVyZWQg
cmVncwoJCQkJICogdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiBhc3NpZ25lZCwKCQkJCSAqIHdv
bid0IGJlLiAgV2UgbWFrZSBzdXJlIHRoZXkncmUKCQkJCSAqIGZpbGxlZCB3aXRoIC0xLCBzbyB0
aGV5IGNhbiBiZQoJCQkJICogcmVjb2duaXplZCBhcyB1bmFzc2lnbmVkLgoJCQkJICovCgkJCQlp
ZiAoc2VhcmNoX3N0YXRlLmxhc3RfbCA8IHJlZykKCQkJCSAgd2hpbGUgKCsrc2VhcmNoX3N0YXRl
Lmxhc3RfbCA8IHJlZykKCQkJCSAgICBzZWFyY2hfc3RhdGUubHBhcmVuW3NlYXJjaF9zdGF0ZS5s
YXN0X2xdID0gLTE7CgkJCSAgICAgIH0KCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJICAKCQkJY2Fz
ZSByZV9zZV9ycGFyZW46CgkJCSAgewoJCQkgICAgaW50IHVyaGVyZSA9CgkJCSAgICAgICgoaW50
KShzZWFyY2hfc3RhdGUudGVzdF9wb3MucG9zCgkJCQkgICAgIC0gc2VhcmNoX3N0YXRlLnRlc3Rf
cG9zLnN0cmluZykKCQkJICAgICAgICsgc2VhcmNoX3N0YXRlLnRlc3RfcG9zLm9mZnNldCk7CgkJ
CSAgICBpbnQgcmVnID0gcnhiLT5zZV9wYXJhbXMgW2VmZmVjdF0ub3AxOwoJCQkgICAgc2VhcmNo
X3N0YXRlLnJwYXJlbltyZWddID0gdXJoZXJlICsgMTsKCQkJICAgIGlmIChzZWFyY2hfc3RhdGUu
bGFzdF9yIDwgcmVnKQoJCQkgICAgICB7CgkJCQl3aGlsZSAoKytzZWFyY2hfc3RhdGUubGFzdF9y
IDwgcmVnKQoJCQkJICBzZWFyY2hfc3RhdGUucnBhcmVuW3NlYXJjaF9zdGF0ZS5sYXN0X3JdCgkJ
CQkgICAgPSAtMTsKCQkJICAgICAgfQoJCQkgICAgYnJlYWs7CgkJCSAgfQoJCQkgIAoJCQljYXNl
IHJlX3NlX2JhY2tyZWY6CgkJCSAgewoJCQkgICAgaW50IHJlZyA9IHJ4Yi0+c2VfcGFyYW1zIFtl
ZmZlY3RdLm9wMTsKCQkJICAgIGlmICggICByZWcgPiBzZWFyY2hfc3RhdGUubGFzdF9yCgkJCQl8
fCBzZWFyY2hfc3RhdGUucnBhcmVuW3JlZ10gPCAwKQoJCQkgICAgICBnb3RvIHRlc3RfZG9fcmV0
dXJuOwoJCQkgICAgCgkJCSAgICB7CgkJCSAgICAgIGludCBiYWNrcmVmX3N0YXR1czsKCQkJICAg
IGNoZWNrX2JhY2tyZWZlcmVuY2U6CgkJCSAgICAgIGJhY2tyZWZfc3RhdHVzCgkJCQk9IGJhY2tf
Y2hlY2sgKCZzZWFyY2hfc3RhdGUudGVzdF9wb3MsCgkJCQkJICAgICAgc2VhcmNoX3N0YXRlLmxw
YXJlbltyZWddLAoJCQkJCSAgICAgIHNlYXJjaF9zdGF0ZS5ycGFyZW5bcmVnXSwKCQkJCQkgICAg
ICBzZWFyY2hfc3RhdGUudHJhbnNsYXRlLAoJCQkJCSAgICAgIGFwcF9jbG9zdXJlLAoJCQkJCSAg
ICAgIHN0b3ApOwoJCQkgICAgICBzd2l0Y2ggKGJhY2tyZWZfc3RhdHVzKQoJCQkJewoJCQkJY2Fz
ZSByeF9iYWNrX2NoZWNrX2NvbnRpbnVhdGlvbjoKCQkJCSAgc2VhcmNoX3N0YXRlLnNhdmVkX3Jl
ZyA9IHJlZzsKCQkJCSAgdGVzdF9wYyA9IHJ4X3Rlc3RfYmFja3JlZmVyZW5jZV9jaGVjazsKCQkJ
CSAgZ290byB0ZXN0X3JldHVybl9jb250aW51YXRpb247CgkJCQlyZXN1bWVfY29udGludWF0aW9u
XzI6CgkJCQkgIHJlZyA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9yZWc7CgkJCQkgIGdvdG8gY2hlY2tf
YmFja3JlZmVyZW5jZTsKCQkJCWNhc2UgcnhfYmFja19jaGVja19mYWlsOgoJCQkJICAvKiBGYWls
ICovCgkJCQkgIGdvdG8gdGVzdF9kb19yZXR1cm47CgkJCQljYXNlIHJ4X2JhY2tfY2hlY2tfcGFz
czoKCQkJCSAgLyogcGFzcyAtLQoJCQkJICAgKiB0ZXN0X3BvcyBub3cgYWR2YW5jZWQgdG8gbGFz
dAoJCQkJICAgKiBjaGFyIG1hdGNoZWQgYnkgYmFja3JlZgoJCQkJICAgKi8KCQkJCSAgYnJlYWs7
CgkJCQl9CgkJCSAgICB9CgkJCSAgICBicmVhazsKCQkJICB9CgkJCWNhc2UgcmVfc2VfaXRlcjoK
CQkJICB7CgkJCSAgICBzdHJ1Y3QgcnhfY291bnRlcl9mcmFtZSAqIGNzcAoJCQkgICAgICA9ICgo
c3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKikKCQkJCSBzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFj
ay0+c3ApOwoJCQkgICAgaWYgKGNzcC0+dmFsID09IHJ4Yi0+c2VfcGFyYW1zW2VmZmVjdF0ub3Ay
KQoJCQkgICAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJCQkgICAgZWxzZQoJCQkgICAgICArK2Nz
cC0+dmFsOwoJCQkgICAgYnJlYWs7CgkJCSAgfQoJCQljYXNlIHJlX3NlX2VuZF9pdGVyOgoJCQkg
IHsKCQkJICAgIHN0cnVjdCByeF9jb3VudGVyX2ZyYW1lICogY3NwCgkJCSAgICAgID0gKChzdHJ1
Y3QgcnhfY291bnRlcl9mcmFtZSAqKQoJCQkJIHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrLT5z
cCk7CgkJCSAgICBpZiAoY3NwLT52YWwgPCByeGItPnNlX3BhcmFtc1tlZmZlY3RdLm9wMSkKCQkJ
ICAgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkJICAgIGVsc2UKCQkJICAgICAgewoJCQkJc3Ry
dWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBzb3VyY2UgPSBjc3A7CgkJCQl3aGlsZSAoc291cmNlLT5p
bmhlcml0ZWRfZnJvbSkKCQkJCSAgc291cmNlID0gc291cmNlLT5pbmhlcml0ZWRfZnJvbTsKCQkJ
CWlmICghc291cmNlIHx8ICFzb3VyY2UtPmNkcikKCQkJCSAgewoJCQkJICAgIFBPUChzZWFyY2hf
c3RhdGUuY291bnRlcl9zdGFjaywKCQkJCQlzaXplb2Yoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUp
KTsKCQkJCSAgfQoJCQkJZWxzZQoJCQkJICB7CgkJCQkgICAgc291cmNlID0gc291cmNlLT5jZHI7
CgkJCQkgICAgY3NwLT52YWwgPSBzb3VyY2UtPnZhbDsKCQkJCSAgICBjc3AtPnRhZyA9IHNvdXJj
ZS0+dGFnOwoJCQkJICAgIGNzcC0+Y2RyID0gMDsKCQkJCSAgICBjc3AtPmluaGVyaXRlZF9mcm9t
ID0gc291cmNlOwoJCQkJICB9CgkJCSAgICAgIH0KCQkJICAgIGJyZWFrOwoJCQkgIH0KCQkJY2Fz
ZSByZV9zZV90djoKCQkJICAvKiBpcyBhIG5vb3AgKi8KCQkJICBicmVhazsKCQkJY2FzZSByZV9z
ZV90cnk6CgkJCWNhc2UgcmVfc2VfcHVzaGJhY2s6CgkJCWNhc2UgcmVfc2VfcHVzaDA6CgkJCWNh
c2UgcmVfc2VfcHVzaHBvczoKCQkJY2FzZSByZV9zZV9jaGtwb3M6CgkJCWNhc2UgcmVfc2VfcG9w
cG9zOgoJCQljYXNlIHJlX3NlX2F0X2RvdDoKCQkJY2FzZSByZV9zZV9zeW50YXg6CgkJCWNhc2Ug
cmVfc2Vfbm90X3N5bnRheDoKCQkJY2FzZSByZV9zZV9iZWdidWY6CgkJCWNhc2UgcmVfc2VfaGF0
OgoJCQljYXNlIHJlX3NlX3dvcmRiZWc6CgkJCWNhc2UgcmVfc2Vfd29yZGJvdW5kOgoJCQljYXNl
IHJlX3NlX25vdHdvcmRib3VuZDoKCQkJY2FzZSByZV9zZV93b3JkZW5kOgoJCQljYXNlIHJlX3Nl
X2VuZGJ1ZjoKCQkJY2FzZSByZV9zZV9kb2xsYXI6CgkJCWNhc2UgcmVfc2VfZmFpbDoKCQkJY2Fz
ZSByZV9mbG9vZ2xlX2ZsYXA6CgkJCSAgc2VhcmNoX3N0YXRlLnJldF92YWwgPSAwOwoJCQkgIGdv
dG8gdGVzdF9kb19yZXR1cm47CgkJCX0KCQkgICAgfQoJCSAgZWwgPSBlbC0+Y2RyOwoJCX0KCSAg
ICAgIC8qIE5vdyB0aGUgc2lkZSBlZmZlY3RzIGFyZSBkb25lLAoJICAgICAgICogc28gZ2V0IHRo
ZSBuZXh0IGluc3RydWN0aW9uLgoJICAgICAgICogYW5kIG1vdmUgb24uCgkgICAgICAgKi8KCSAg
ICAgIHNlYXJjaF9zdGF0ZS5pZnIgPSAmZGYtPmZ1dHVyZV9mcmFtZTsKCSAgICAgIGdvdG8gcmVz
dGFydDsKCSAgICB9CgkgICAgCgkgIGNhc2UgcnhfYmFja3RyYWNrX3BvaW50OgoJICAgIHsKCSAg
ICAgIC8qIEEgYmFja3RyYWNrIHBvaW50IGluZGljYXRlcyB0aGF0IHdlJ3ZlIHJlYWNoZWQgYQoJ
ICAgICAgICogbm9uLWRldGVybWluaXNtIGluIHRoZSBzdXBlcnN0YXRlIE5GQS4gIFRoaXMgaXMg
YQoJICAgICAgICogbG9vcCB0aGF0IGV4aGF1c3RpdmVseSBzZWFyY2hlcyB0aGUgcG9zc2liaWxp
dGllcy4KCSAgICAgICAqCgkgICAgICAgKiBBIGJhY2t0cmFja2luZyBzdHJhdGVneSBpcyB1c2Vk
LiAgV2Uga2VlcCB0cmFjayBvZiB3aGF0CgkgICAgICAgKiByZWdpc3RlcnMgYXJlIHZhbGlkIHNv
IHdlIGNhbiBlcmFzZSBzaWRlIGVmZmVjdHMuCgkgICAgICAgKgoJICAgICAgICogRmlyc3QsIG1h
a2Ugc3VyZSB0aGVyZSBpcyBzb21lIHN0YWNrIHNwYWNlIHRvIGhvbGQgCgkgICAgICAgKiBvdXIg
c3RhdGUuCgkgICAgICAgKi8KCSAgICAgIAoJICAgICAgc3RydWN0IHJ4X2JhY2t0cmFja19mcmFt
ZSAqIGJmOwoJICAgICAgCgkgICAgICBQVVNIKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2ss
CgkJICAgc2VhcmNoX3N0YXRlLmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CiNpZmRlZiBSWF9ERUJV
R18wCgkgICAgICArK3NlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfZGVwdGg7CiNlbmRpZgoJICAgICAg
CgkgICAgICBiZiA9ICgoc3RydWN0IHJ4X2JhY2t0cmFja19mcmFtZSAqKQoJCSAgICBzZWFyY2hf
c3RhdGUuYmFja3RyYWNrX3N0YWNrLT5zcCk7CgkgICAgICB7CgkJYmYtPnN0a19zdXBlciA9IHNl
YXJjaF9zdGF0ZS5zdXBlcjsKCQkvKiBXZSBwcmV2ZW50IHRoZSBjdXJyZW50IHN1cGVyc3RhdGUg
ZnJvbSBiZWluZwoJCSAqIGRlbGV0ZWQgZnJvbSB0aGUgc3VwZXJzdGF0ZSBjYWNoZS4KCQkgKi8K
CQlyeF9sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hfc3RhdGUuc3VwZXIpOwojaWZk
ZWYgUlhfREVCVUdfMAoJCWJmLT5zdGtfc2VhcmNoX3N0YXRlLmxpbmVfbm8gPSBzZWFyY2hfc3Rh
dGUubGluZV9ubzsKI2VuZGlmCgkJYmYtPnN0a19jID0gc2VhcmNoX3N0YXRlLmM7CgkJYmYtPnN0
a190ZXN0X3BvcyA9IHNlYXJjaF9zdGF0ZS50ZXN0X3BvczsKCQliZi0+c3RrX2xhc3RfbCA9IHNl
YXJjaF9zdGF0ZS5sYXN0X2w7CgkJYmYtPnN0a19sYXN0X3IgPSBzZWFyY2hfc3RhdGUubGFzdF9y
OwoJCWJmLT5kZiA9ICgoc3RydWN0IHJ4X3N1cGVyX2VkZ2UgKikKCQkJICBzZWFyY2hfc3RhdGUu
aWZyLT5kYXRhXzIpLT5vcHRpb25zOwoJCWJmLT5maXJzdF9kZiA9IGJmLT5kZjsKCQliZi0+Y291
bnRlcl9zdGFja19zcCA9IChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjawoJCQkJCT8gc2VhcmNo
X3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwCgkJCQkJOiAwKTsKCQliZi0+c3RrX3Rlc3RfcmV0ID0g
c2VhcmNoX3N0YXRlLnRlc3RfcmV0OwoJCWlmIChyeGItPm1hdGNoX3JlZ3Nfb25fc3RhY2spCgkJ
ICB7CgkJICAgIGludCB4OwoJCSAgICByZWdvZmZfdCAqIHN0ayA9CgkJICAgICAgKHJlZ29mZl90
ICopKChjaGFyICopYmYgKyBzaXplb2YgKCpiZikpOwoJCSAgICBmb3IgKHggPSAwOyB4IDw9IHNl
YXJjaF9zdGF0ZS5sYXN0X2w7ICsreCkKCQkgICAgICBzdGtbeF0gPSBzZWFyY2hfc3RhdGUubHBh
cmVuW3hdOwoJCSAgICBzdGsgKz0geDsKCQkgICAgZm9yICh4ID0gMDsgeCA8PSBzZWFyY2hfc3Rh
dGUubGFzdF9yOyArK3gpCgkJICAgICAgc3RrW3hdID0gc2VhcmNoX3N0YXRlLnJwYXJlblt4XTsK
CQkgIH0KCSAgICAgIH0KCSAgICAgIAoJICAgICAgLyogSGVyZSBpcyBhIHdoaWxlIGxvb3Agd2hv
c2UgYm9keSBpcyBtYWlubHkgYSBmdW5jdGlvbgoJICAgICAgICogY2FsbCBhbmQgc29tZSBjb2Rl
IHRvIGhhbmRsZSBhIHJldHVybiBmcm9tIHRoYXQKCSAgICAgICAqIGZ1bmN0aW9uLgoJICAgICAg
ICoKCSAgICAgICAqIEZyb20gaGVyZSBvbiBmb3IgdGhlIHJlc3Qgb2YgYGNhc2UgYmFja3RyYWNr
X3BvaW50JyBpdAoJICAgICAgICogaXMgdW5zYWZlIHRvIGFzc3VtZSB0aGF0IHRoZSBzZWFyY2hf
c3RhdGUgY29waWVzIG9mIAoJICAgICAgICogdmFyaWFibGVzIHNhdmVkIG9uIHRoZSBiYWNrdHJh
Y2tpbmcgc3RhY2sgYXJlIHZhbGlkCgkgICAgICAgKiAtLSBzbyByZWFkIHRoZWlyIHZhbHVlcyBm
cm9tIHRoZSBiYWNrdHJhY2tpbmcgc3RhY2suCgkgICAgICAgKgoJICAgICAgICogVGhpcyBsZXRz
IHVzIHVzZSBvbmUgZ2VuZXJhdGlvbiBmZXdlciBzdGFjayBzYXZlcyBpbgoJICAgICAgICogdGhl
IGNhbGwtZ3JhcGggb2YgYSBzZWFyY2guCgkgICAgICAgKi8KCSAgICAgIAoJICAgIHdoaWxlX25v
bl9kZXRfb3B0aW9uczoKI2lmZGVmIFJYX0RFQlVHXzAKCSAgICAgICsrc2VhcmNoX3N0YXRlLmxp
bmVzX2ZvdW5kOwoJICAgICAgaWYgKHJ4X2RlYnVnX3RyYWNlKQoJCWZwcmludGYgKHN0ZGVyciwg
IkBAQCAlZCBjYWxscyAlZCBAQEBcbiIsCgkJCSBzZWFyY2hfc3RhdGUubGluZV9ubywgc2VhcmNo
X3N0YXRlLmxpbmVzX2ZvdW5kKTsKCSAgICAgIAoJICAgICAgc2VhcmNoX3N0YXRlLmxpbmVfbm8g
PSBzZWFyY2hfc3RhdGUubGluZXNfZm91bmQ7CiNlbmRpZgoJICAgICAgCgkgICAgICBpZiAoYmYt
PmRmLT5uZXh0X3NhbWVfc3VwZXJfZWRnZVswXSA9PSBiZi0+Zmlyc3RfZGYpCgkJewoJCSAgLyog
VGhpcyBpcyBhIHRhaWwtY2FsbCBvcHRpbWl6YXRpb24gLS0gd2UgZG9uJ3QgcmVjdXJzZQoJCSAg
ICogZm9yIHRoZSBsYXN0IG9mIHRoZSBwb3NzaWJsZSBmdXR1cmVzLgoJCSAgICovCgkJICBzZWFy
Y2hfc3RhdGUuaWZyID0gKGJmLT5kZi0+ZWZmZWN0cwoJCQkJICAgICAgPyAmYmYtPmRmLT5zaWRl
X2VmZmVjdHNfZnJhbWUKCQkJCSAgICAgIDogJmJmLT5kZi0+ZnV0dXJlX2ZyYW1lKTsKCQkgIAoJ
CSAgcnhfdW5sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBzZWFyY2hfc3RhdGUuc3VwZXIpOwoJ
CSAgUE9QKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2ssCgkJICAgICAgc2VhcmNoX3N0YXRl
LmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CiNpZmRlZiBSWF9ERUJVRwoJCSAgLS1zZWFyY2hfc3Rh
dGUuYmFja3RyYWNrX2RlcHRoOwojZW5kaWYKCQkgIGdvdG8gcmVzdGFydDsKCQl9CgkgICAgICBl
bHNlCgkJewoJCSAgaWYgKHNlYXJjaF9zdGF0ZS5jb3VudGVyX3N0YWNrKQoJCSAgICB7CgkJICAg
ICAgc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKiBvbGRfY2YKCQkJPSAoKHN0cnVjdCByeF9jb3Vu
dGVyX2ZyYW1lICopc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKTsKCQkgICAgICBzdHJ1
Y3QgcnhfY291bnRlcl9mcmFtZSAqIGNmOwoJCSAgICAgIFBVU0goc2VhcmNoX3N0YXRlLmNvdW50
ZXJfc3RhY2ssIHNpemVvZiAoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUpKTsKCQkgICAgICBjZiA9
ICgoc3RydWN0IHJ4X2NvdW50ZXJfZnJhbWUgKilzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjay0+
c3ApOwoJCSAgICAgIGNmLT50YWcgPSBvbGRfY2YtPnRhZzsKCQkgICAgICBjZi0+dmFsID0gb2xk
X2NmLT52YWw7CgkJICAgICAgY2YtPmluaGVyaXRlZF9mcm9tID0gb2xkX2NmOwoJCSAgICAgIGNm
LT5jZHIgPSAwOwoJCSAgICB9CQkJCgkJICAvKiBgQ2FsbCcgdGhpcyB0ZXN0LW1hdGNoIGJsb2Nr
ICovCgkJICBzZWFyY2hfc3RhdGUuaWZyID0gKGJmLT5kZi0+ZWZmZWN0cwoJCQkJICAgICAgPyAm
YmYtPmRmLT5zaWRlX2VmZmVjdHNfZnJhbWUKCQkJCSAgICAgIDogJmJmLT5kZi0+ZnV0dXJlX2Zy
YW1lKTsKCQkgIGdvdG8gcmVjdXJzZV90ZXN0X21hdGNoOwoJCX0KCSAgICAgIAoJICAgICAgLyog
UmV0dXJucyBpbiB0aGlzIGJsb2NrIGFyZSBhY2NvbXBsaXNoZWQgYnkKCSAgICAgICAqIGdvdG8g
dGVzdF9kb19yZXR1cm4uICBUaGVyZSBhcmUgdHdvIGNhc2VzLgoJICAgICAgICogSWYgdGhlcmUg
aXMgc29tZSBzZWFyY2gtc3RhY2sgbGVmdCwKCSAgICAgICAqIHRoZW4gaXQgaXMgYSByZXR1cm4g
ZnJvbSBhIGByZWN1cnNpdmUnIGNhbGwuCgkgICAgICAgKiBJZiB0aGVyZSBpcyBubyBzZWFyY2gt
c3RhY2sgbGVmdCwgdGhlbgoJICAgICAgICogd2Ugc2hvdWxkIHJldHVybiB0byB0aGUgZmFzdG1h
cC9zZWFyY2ggbG9vcC4KCSAgICAgICAqLwoJICAgICAgCgkgICAgdGVzdF9kb19yZXR1cm46Cgkg
ICAgICAKCSAgICAgIGlmICghc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjaykKCQl7CiNpZmRl
ZiBSWF9ERUJVR18wCgkJICBpZiAocnhfZGVidWdfdHJhY2UpCgkJICAgIGZwcmludGYgKHN0ZGVy
ciwgIiEhISAlZCBiYWlscyByZXR1cm5pbmcgJWQgISEhXG4iLAoJCQkgICAgIHNlYXJjaF9zdGF0
ZS5saW5lX25vLCBzZWFyY2hfc3RhdGUudGVzdF9yZXQpOwojZW5kaWYKCQkgIAoJCSAgLyogTm8g
bW9yZSBzZWFyY2gtc3RhY2sgLS0gdGhpcyB0ZXN0IGlzIGRvbmUuICovCgkJICBpZiAoc2VhcmNo
X3N0YXRlLnRlc3RfcmV0ICE9IHJ4X3Rlc3RfaW50ZXJuYWxfZXJyb3IpCgkJICAgIGdvdG8gcmV0
dXJuX2Zyb21fdGVzdF9tYXRjaDsKCQkgIGVsc2UKCQkgICAgZ290byBlcnJvcl9pbl90ZXN0aW5n
X21hdGNoOwoJCX0KCSAgICAgIAoJICAgICAgLyogUmV0dXJuaW5nIGZyb20gYSByZWN1cnNpdmUg
Y2FsbCB0byAKCSAgICAgICAqIHRoZSB0ZXN0IG1hdGNoIGJsb2NrOgoJICAgICAgICovCgkgICAg
ICAKCSAgICAgIGJmID0gKChzdHJ1Y3QgcnhfYmFja3RyYWNrX2ZyYW1lICopCgkJICAgIHNlYXJj
aF9zdGF0ZS5iYWNrdHJhY2tfc3RhY2stPnNwKTsKI2lmZGVmIFJYX0RFQlVHXzAKCSAgICAgIGlm
IChyeF9kZWJ1Z190cmFjZSkKCQlmcHJpbnRmIChzdGRlcnIsICIrKysgJWQgcmV0dXJucyAlZCAo
dG8gJWQpKysrXG4iLAoJCQkgc2VhcmNoX3N0YXRlLmxpbmVfbm8sCgkJCSBzZWFyY2hfc3RhdGUu
dGVzdF9yZXQsCgkJCSBiZi0+c3RrX3NlYXJjaF9zdGF0ZS5saW5lX25vKTsKI2VuZGlmCgkgICAg
ICAKCSAgICAgIHdoaWxlIChzZWFyY2hfc3RhdGUuY291bnRlcl9zdGFjawoJCSAgICAgJiYgKCFi
Zi0+Y291bnRlcl9zdGFja19zcAoJCQkgfHwgKGJmLT5jb3VudGVyX3N0YWNrX3NwCgkJCSAgICAg
IT0gc2VhcmNoX3N0YXRlLmNvdW50ZXJfc3RhY2stPnNwKSkpCgkJewoJCSAgUE9QKHNlYXJjaF9z
dGF0ZS5jb3VudGVyX3N0YWNrLAoJCSAgICAgIHNpemVvZiAoc3RydWN0IHJ4X2NvdW50ZXJfZnJh
bWUpKTsKCQl9CgkgICAgICAKCSAgICAgIGlmIChzZWFyY2hfc3RhdGUudGVzdF9yZXQgPT0gcnhf
dGVzdF9pbnRlcm5hbF9lcnJvcikKCQl7CgkJICBQT1AgKHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tf
c3RhY2ssCgkJICAgICAgIHNlYXJjaF9zdGF0ZS5iYWNrdHJhY2tfZnJhbWVfYnl0ZXMpOwoJCSAg
c2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRlcm5hbF9lcnJvcjsKCQkgIGdvdG8g
dGVzdF9kb19yZXR1cm47CgkJfQoJICAgICAgCgkgICAgICAvKiBJZiBhIG5vbi1sb25nZXN0IG1h
dGNoIHdhcyBmb3VuZCBhbmQgdGhhdCBpcyBnb29kIAoJICAgICAgICogZW5vdWdoLCByZXR1cm4g
aW1tZWRpYXRlbHkuCgkgICAgICAgKi8KCSAgICAgIGlmICggICAoc2VhcmNoX3N0YXRlLnRlc3Rf
cmV0ID09IHJ4X3Rlc3RfZm91bmRfZmlyc3QpCgkJICAmJiBzZWFyY2hfc3RhdGUuZmlyc3RfZm91
bmQpCgkJewoJCSAgcnhfdW5sb2NrX3N1cGVyc3RhdGUgKCZyeGItPnJ4LCBiZi0+c3RrX3N1cGVy
KTsKCQkgIFBPUCAoc2VhcmNoX3N0YXRlLmJhY2t0cmFja19zdGFjaywKCQkgICAgICAgc2VhcmNo
X3N0YXRlLmJhY2t0cmFja19mcmFtZV9ieXRlcyk7CgkJICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJ
CX0KCSAgICAgIAoJICAgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gYmYtPnN0a190ZXN0X3Jl
dDsKCSAgICAgIHNlYXJjaF9zdGF0ZS5sYXN0X2wgPSBiZi0+c3RrX2xhc3RfbDsKCSAgICAgIHNl
YXJjaF9zdGF0ZS5sYXN0X3IgPSBiZi0+c3RrX2xhc3RfcjsKCSAgICAgIGJmLT5kZiA9IGJmLT5k
Zi0+bmV4dF9zYW1lX3N1cGVyX2VkZ2VbMF07CgkgICAgICBzZWFyY2hfc3RhdGUuc3VwZXIgPSBi
Zi0+c3RrX3N1cGVyOwoJICAgICAgc2VhcmNoX3N0YXRlLmMgPSBiZi0+c3RrX2M7CiNpZmRlZiBS
WF9ERUJVR18wCgkgICAgICBzZWFyY2hfc3RhdGUubGluZV9ubyA9IGJmLT5zdGtfc2VhcmNoX3N0
YXRlLmxpbmVfbm87CiNlbmRpZgoJICAgICAgCgkgICAgICBpZiAocnhiLT5tYXRjaF9yZWdzX29u
X3N0YWNrKQoJCXsKCQkgIGludCB4OwoJCSAgcmVnb2ZmX3QgKiBzdGsgPQoJCSAgICAocmVnb2Zm
X3QgKikoKGNoYXIgKiliZiArIHNpemVvZiAoKmJmKSk7CgkJICBmb3IgKHggPSAwOyB4IDw9IHNl
YXJjaF9zdGF0ZS5sYXN0X2w7ICsreCkKCQkgICAgc2VhcmNoX3N0YXRlLmxwYXJlblt4XSA9IHN0
a1t4XTsKCQkgIHN0ayArPSB4OwoJCSAgZm9yICh4ID0gMDsgeCA8PSBzZWFyY2hfc3RhdGUubGFz
dF9yOyArK3gpCgkJICAgIHNlYXJjaF9zdGF0ZS5ycGFyZW5beF0gPSBzdGtbeF07CgkJfQoJICAg
ICAgCgkgICAgICB7CgkJaW50IHg7CgkgICAgICB0cnlfYnVyc3RfMjoKCQl4ID0gZ2V0X2J1cnN0
ICgmYmYtPnN0a190ZXN0X3BvcywgYXBwX2Nsb3N1cmUsIHN0b3ApOwoJCXN3aXRjaCAoeCkKCQkg
IHsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X2NvbnRpbnVhdGlvbjoKCQkgICAgc2VhcmNoX3N0YXRl
LnNhdmVkX2JmID0gYmY7CgkJICAgIHRlc3RfcGMgPSByeF90ZXN0X2JhY2t0cmFja19yZXR1cm47
CgkJICAgIGdvdG8gdGVzdF9yZXR1cm5fY29udGludWF0aW9uOwoJCSAgcmVzdW1lX2NvbnRpbnVh
dGlvbl8zOgoJCSAgICBiZiA9IHNlYXJjaF9zdGF0ZS5zYXZlZF9iZjsKCQkgICAgZ290byB0cnlf
YnVyc3RfMjsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X25vX21vcmU6CgkJICAgIC8qIFNpbmNlIHdl
J3ZlIGJlZW4gaGVyZSBiZWZvcmUsIGl0IGlzIHNvbWUga2luZCBvZgoJCSAgICAgKiBlcnJvciB0
aGF0IHdlIGNhbid0IHJldHVybi4KCQkgICAgICovCgkJICBjYXNlIHJ4X2dldF9idXJzdF9lcnJv
cjoKCQkgICAgc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRlcm5hbF9lcnJvcjsK
CQkgICAgZ290byB0ZXN0X2RvX3JldHVybjsKCQkgIGNhc2UgcnhfZ2V0X2J1cnN0X29rOgoJCSAg
ICBicmVhazsKCQkgIH0KCSAgICAgIH0KCSAgICAgIHNlYXJjaF9zdGF0ZS50ZXN0X3BvcyA9IGJm
LT5zdGtfdGVzdF9wb3M7CgkgICAgICBnb3RvIHdoaWxlX25vbl9kZXRfb3B0aW9uczsKCSAgICB9
CgkgICAgCgkgICAgCgkgIGNhc2UgcnhfY2FjaGVfbWlzczoKCSAgICAvKiBCZWNhdXNlIHRoZSBz
dXBlcnN0YXRlIE5GQSBpcyBsYXppbHkgY29uc3RydWN0ZWQsCgkgICAgICogYW5kIGluIGZhY3Qg
bWF5IGVyb2RlIGZyb20gdW5kZXJuZWF0aCB1cywgd2Ugc29tZXRpbWVzCgkgICAgICogaGF2ZSB0
byBjb25zdHJ1Y3QgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgaGFyZCB3YXkuCgkgICAg
ICogVGhpcyBpbnZva2VzIG9uZSBzdGVwIGluIHRoZSBsYXp5LWNvbnZlcnNpb24uCgkgICAgICov
CgkgICAgc2VhcmNoX3N0YXRlLmlmciA9IHJ4X2hhbmRsZV9jYWNoZV9taXNzICgmcnhiLT5yeCwK
CQkJCQkJICAgICBzZWFyY2hfc3RhdGUuc3VwZXIsCgkJCQkJCSAgICAgc2VhcmNoX3N0YXRlLmMs
CgkJCQkJCSAgICAgc2VhcmNoX3N0YXRlLmlmci0+ZGF0YV8yKTsKCSAgICBpZiAoIXNlYXJjaF9z
dGF0ZS5pZnIpCgkgICAgICB7CgkJc2VhcmNoX3N0YXRlLnRlc3RfcmV0ID0gcnhfdGVzdF9pbnRl
cm5hbF9lcnJvcjsKCQlnb3RvIHRlc3RfZG9fcmV0dXJuOwoJICAgICAgfQoJICAgIGdvdG8gcmVz
dGFydDsKCSAgICAKCSAgY2FzZSByeF9iYWNrdHJhY2s6CgkgICAgLyogUlhfQkFDS1RSQUNLIG1l
YW5zIHRoYXQgd2UndmUgcmVhY2hlZCB0aGUgZW1wdHkKCSAgICAgKiBzdXBlcnN0YXRlLCBpbmRp
Y2F0aW5nIHRoYXQgbWF0Y2ggY2FuJ3Qgc3VjY2VlZAoJICAgICAqIGZyb20gdGhpcyBwb2ludC4K
CSAgICAgKi8KCSAgICBnb3RvIHRlc3RfZG9fcmV0dXJuOwoJICAgIAoJICBjYXNlIHJ4X25leHRf
Y2hhcjoKCSAgY2FzZSByeF9lcnJvcl9pbng6CgkgIGNhc2UgcnhfbnVtX2luc3RydWN0aW9uczoK
CSAgICBzZWFyY2hfc3RhdGUucmV0X3ZhbCA9IDA7CgkgICAgZ290byB0ZXN0X2RvX3JldHVybjsK
CSAgfQoJZ290byBwc2V1ZG9fd2hpbGVfMTsKICAgICAgfQogICAgCiAgICAvKiBIZWFsdGh5IGV4
aXRzIGZyb20gdGhlIHRlc3QtbWF0Y2ggbG9vcCBkbyBhIAogICAgICogYGdvdG8gcmV0dXJuX2Zy
b21fdGVzdF9tYXRjaCcgICBPbiB0aGUgb3RoZXIgaGFuZCwgCiAgICAgKiB3ZSBtaWdodCBlbmQg
dXAgaGVyZS4KICAgICAqLwogIGVycm9yX2luX3Rlc3RpbmdfbWF0Y2g6CiAgICB0ZXN0X3N0YXRl
ID0gcnhfdGVzdF9lcnJvcjsKICAgIGdvdG8gdGVzdF9yZXR1cm5zX3RvX3NlYXJjaDsKICAgIAog
ICAgLyoqKioqIGZhc3RtYXAvc2VhcmNoIGxvb3AgYm9keQogICAgICoJICAgICAgY29uc2lkZXJp
bmcgdGhlIHJlc3VsdHMgdGVzdGluZyBmb3IgYSBtYXRjaAogICAgICovCiAgICAKICByZXR1cm5f
ZnJvbV90ZXN0X21hdGNoOgogICAgCiAgICBpZiAoc2VhcmNoX3N0YXRlLmJlc3RfbGFzdF9sID49
IDApCiAgICAgIHsKCWlmIChyZWdzICYmIChyZWdzLT5zdGFydCAhPSBzZWFyY2hfc3RhdGUuYmVz
dF9scGFyZW4pKQoJICB7CgkgICAgYmNvcHkgKHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlbiwgcmVn
cy0+c3RhcnQsCgkJICAgcmVncy0+bnVtX3JlZ3MgKiBzaXplb2YgKGludCkpOwoJICAgIGJjb3B5
IChzZWFyY2hfc3RhdGUuYmVzdF9ycGFyZW4sIHJlZ3MtPmVuZCwKCQkgICByZWdzLT5udW1fcmVn
cyAqIHNpemVvZiAoaW50KSk7CgkgIH0KCWlmIChyZWdzICYmICFyeGItPm5vX3N1YikKCSAgewoJ
ICAgIGludCBxOwoJICAgIGludCBib3VuZCA9IChyZWdzLT5udW1fcmVncyA+IHNlYXJjaF9zdGF0
ZS5udW1fcmVncwoJCQkgPyByZWdzLT5udW1fcmVncwoJCQkgOiBzZWFyY2hfc3RhdGUubnVtX3Jl
Z3MpOwoJICAgIHJlZ29mZl90ICogcyA9IHJlZ3MtPnN0YXJ0OwoJICAgIHJlZ29mZl90ICogZSA9
IHJlZ3MtPmVuZDsKCSAgICBmb3IgKHEgPSBzZWFyY2hfc3RhdGUuYmVzdF9sYXN0X2wgKyAxOyAg
cSA8IGJvdW5kOyArK3EpCgkgICAgICBzW3FdID0gZVtxXSA9IC0xOwoJICB9CglzZWFyY2hfc3Rh
dGUucmV0X3ZhbCA9IHNlYXJjaF9zdGF0ZS5iZXN0X2xwYXJlblswXTsKCXRlc3Rfc3RhdGUgPSBy
eF90ZXN0X29rOwoJZ290byB0ZXN0X3JldHVybnNfdG9fc2VhcmNoOwogICAgICB9CiAgICBlbHNl
CiAgICAgIHsKCXRlc3Rfc3RhdGUgPSByeF90ZXN0X2ZhaWw7Cglnb3RvIHRlc3RfcmV0dXJuc190
b19zZWFyY2g7CiAgICAgIH0KICAgIAogIHRlc3RfcmV0dXJuX2NvbnRpbnVhdGlvbjoKICAgIHNl
YXJjaF9zdGF0ZS50ZXN0X21hdGNoX3Jlc3VtZV9wdCA9IHRlc3RfcGM7CiAgICB0ZXN0X3N0YXRl
ID0gcnhfdGVzdF9jb250aW51YXRpb247CiAgICBnb3RvIHRlc3RfcmV0dXJuc190b19zZWFyY2g7
CiAgfQp9CgoKCiNlbmRpZiAvKiBSWF9XQU5UX1JYX0RFRlMgKi8KCgoKI2Vsc2UgLyogUlhfV0FO
VF9TRV9ERUZTICovCiAgLyogSW50ZWdlcnMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNpZGUgZWZm
ZWN0cy4KICAgKgogICAqIFNpbXBsZSBzaWRlIGVmZmVjdHMgYXJlIGdpdmVuIG5lZ2F0aXZlIGlu
dGVnZXIgbmFtZXMgYnkgdGhlc2UgZW51bXMuCiAgICogCiAgICogTm9uLW5lZ2F0aXZlIG5hbWVz
IGFyZSByZXNlcnZlZCBmb3IgY29tcGxleCBlZmZlY3RzLgogICAqCiAgICogQ29tcGxleCBlZmZl
Y3RzIGFyZSB0aG9zZSB0aGF0IHRha2UgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIAogICAqIGEg
cmVnaXN0ZXIgYXNzaWdubWVudCBhc3NvY2lhdGVkIHdpdGggYSBncm91cCBpcyBjb21wbGV4IGJl
Y2F1c2UKICAgKiBpdCByZXF1aXJlcyBhbiBhcmd1bWVudCB0byB0ZWxsIHdoaWNoIGdyb3VwIGlz
IGJlaW5nIG1hdGNoZWQuCiAgICogCiAgICogVGhlIGludGVnZXIgbmFtZSBvZiBhIGNvbXBsZXgg
ZWZmZWN0IGlzIGFuIGluZGV4IGludG8gcnhiLT5zZV9wYXJhbXMuCiAgICovCiAKICBSWF9ERUZf
U0UoMSwgcmVfc2VfdHJ5LCA9IC0xKQkJLyogRXBzaWxvbiBmcm9tIHN0YXJ0IHN0YXRlICovCgog
IFJYX0RFRl9TRSgwLCByZV9zZV9wdXNoYmFjaywgPSByZV9zZV90cnkgLSAxKQogIFJYX0RFRl9T
RSgwLCByZV9zZV9wdXNoMCwgPSByZV9zZV9wdXNoYmFjayAtMSkKICBSWF9ERUZfU0UoMCwgcmVf
c2VfcHVzaHBvcywgPSByZV9zZV9wdXNoMCAtIDEpCiAgUlhfREVGX1NFKDAsIHJlX3NlX2Noa3Bv
cywgPSByZV9zZV9wdXNocG9zIC0xKQogIFJYX0RFRl9TRSgwLCByZV9zZV9wb3Bwb3MsID0gcmVf
c2VfY2hrcG9zIC0gMSkKCiAgUlhfREVGX1NFKDEsIHJlX3NlX2F0X2RvdCwgPSByZV9zZV9wb3Bw
b3MgLSAxKQkvKiBFbWFjcyBvbmx5ICovCiAgUlhfREVGX1NFKDAsIHJlX3NlX3N5bnRheCwgPSBy
ZV9zZV9hdF9kb3QgLSAxKSAvKiBFbWFjcyBvbmx5ICovCiAgUlhfREVGX1NFKDAsIHJlX3NlX25v
dF9zeW50YXgsID0gcmVfc2Vfc3ludGF4IC0gMSkgLyogRW1hY3Mgb25seSAqLwoKICBSWF9ERUZf
U0UoMSwgcmVfc2VfYmVnYnVmLCA9IHJlX3NlX25vdF9zeW50YXggLSAxKSAvKiBtYXRjaCBiZWdp
bm5pbmcgb2YgYnVmZmVyICovCiAgUlhfREVGX1NFKDEsIHJlX3NlX2hhdCwgPSByZV9zZV9iZWdi
dWYgLSAxKSAvKiBtYXRjaCBiZWdpbm5pbmcgb2YgbGluZSAqLwoKICBSWF9ERUZfU0UoMSwgcmVf
c2Vfd29yZGJlZywgPSByZV9zZV9oYXQgLSAxKSAKICBSWF9ERUZfU0UoMSwgcmVfc2Vfd29yZGJv
dW5kLCA9IHJlX3NlX3dvcmRiZWcgLSAxKQogIFJYX0RFRl9TRSgxLCByZV9zZV9ub3R3b3JkYm91
bmQsID0gcmVfc2Vfd29yZGJvdW5kIC0gMSkKCiAgUlhfREVGX1NFKDEsIHJlX3NlX3dvcmRlbmQs
ID0gcmVfc2Vfbm90d29yZGJvdW5kIC0gMSkKICBSWF9ERUZfU0UoMSwgcmVfc2VfZW5kYnVmLCA9
IHJlX3NlX3dvcmRlbmQgLSAxKQoKICAvKiBUaGlzIGZhaWxzIGV4Y2VwdCBhdCB0aGUgZW5kIG9m
IGEgbGluZS4gCiAgICogSXQgZGVzZXJ2ZXMgdG8gZ28gaGVyZSBzaW5jZSBpdCBpcyB0eXBpY2x5
IG9uZSBvZiB0aGUgbGFzdCBzdGVwcyAKICAgKiBpbiBhIG1hdGNoLgogICAqLwogIFJYX0RFRl9T
RSgxLCByZV9zZV9kb2xsYXIsID0gcmVfc2VfZW5kYnVmIC0gMSkKCiAgLyogU2ltcGxlIGVmZmVj
dHM6ICovCiAgUlhfREVGX1NFKDEsIHJlX3NlX2ZhaWwsID0gcmVfc2VfZG9sbGFyIC0gMSkKCiAg
LyogQ29tcGxleCBlZmZlY3RzLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlICdzZScgZmllbGQgb2Yg
CiAgICogYSBzdHJ1Y3QgcmVfc2VfcGFyYW1zLiAgSW5kZXhlcyBpbnRvIHRoZSBzZSBhcnJheQog
ICAqIGFyZSBzdG9yZWQgYXMgaW5zdHJ1Y3Rpb25zIG9uIG5mYSBlZGdlcy4KICAgKi8KICBSWF9E
RUZfQ1BMWF9TRSgxLCByZV9zZV93aW4sID0gMCkKICBSWF9ERUZfQ1BMWF9TRSgxLCByZV9zZV9s
cGFyZW4sID0gcmVfc2Vfd2luICsgMSkKICBSWF9ERUZfQ1BMWF9TRSgxLCByZV9zZV9ycGFyZW4s
ID0gcmVfc2VfbHBhcmVuICsgMSkKICBSWF9ERUZfQ1BMWF9TRSgwLCByZV9zZV9iYWNrcmVmLCA9
IHJlX3NlX3JwYXJlbiArIDEpCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfaXRlciwgPSByZV9z
ZV9iYWNrcmVmICsgMSkgCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfZW5kX2l0ZXIsID0gcmVf
c2VfaXRlciArIDEpCiAgUlhfREVGX0NQTFhfU0UoMCwgcmVfc2VfdHYsID0gcmVfc2VfZW5kX2l0
ZXIgKyAxKQoKI2VuZGlmCgojZW5kaWYK
----=_339057e770280908aad679.MFSBCHJLHS
Content-Type: application/octet-stream; name=less.dif.gz
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=less.dif.gz
H4sICFUqHTMAA2xlc3MuZGlmZgCtkd9OwjAUxq/bp/i8cjAGbGgIEBL0xsTExMgDLGXroMn+pe1U
Qnx3T8c0EdAre3N6zvn69dfTVGUZgkZv7jEqRrk0ZlQ1tm7sMMHwZ86DIDgTsbWweBIa4xBhOB9H
88kE4Ww25b7vnzqwdVPiUZQII9LMo3B+Oz2KVysE0c1sMIV/DKsVB/pojCq3ECgqLVFX2opNLiH0
tilkaZErY1HIZCdKZQpYiqi1Km12bYbOYMTBjBVWJaAqD9Sx62WFHaAmnx73i/15EUzLLZlLDTLX
6FNvQdXnu5cH9J2GskOLPYla7GNw2IwlVQ5/CVPFJn5Tqd25ox8cPPhqnXMsuI9udZoLXORDTiqD
dyXKfZwqU+di73A7lum4ZWmDYzlQK8ml0PGmsp47z4iKRie1ywLmvVYq7f3N02ku8zD6WWO1Rx0d
2yoWG/ql74veVXdrljdm57Yt5ixqMdvQjsw96eRFJ9z/wppgia20yU57v87yE58B0RUSAwAA
----=_339057e770280908aad679.MFSBCHJLHS--
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -