From banavar@cs.fsu.edu  Fri Jun 25 14:51:30 2004
Return-Path: <banavar@cs.fsu.edu>
X-Original-To: baker@cs.fsu.edu
Delivered-To: baker@cs.fsu.edu
Received: from websrv.cs.fsu.edu (websrv.cs.fsu.edu [128.186.120.244])
	by mail.cs.fsu.edu (Postfix) with ESMTP id C43E9F2ECE
	for <baker@cs.fsu.edu>; Fri, 25 Jun 2004 14:51:30 -0400 (EDT)
Received: (from system-vhost@localhost)
	by websrv.cs.fsu.edu (8.12.6/8.12.6/Submit) id i5PIpWPZ017233
	for baker@cs.fsu.edu; Fri, 25 Jun 2004 14:51:32 -0400
X-Authentication-Warning: websrv.cs.fsu.edu: system-vhost set sender to banavar@cs.fsu.edu using -f
Received: from zorro.cs.fsu.edu (zorro.cs.fsu.edu [192.168.122.51]) by
	system.cs.fsu.edu (Horde) with HTTP for <banavar@cs.fsu.edu>; Fri, 25 Jun
	2004 14:51:32 -0400
Message-ID: <1088189492.b9a2cd75d8400@system.cs.fsu.edu>
Date: Fri, 25 Jun 2004 14:51:32 -0400
From: banavar@cs.fsu.edu
To: baker@cs.fsu.edu
Subject: Frame Grabber - Features (Team - Hemant and Karthik)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=_3b1f808b7ef211d196e734"
Content-Transfer-Encoding: 7bit
User-Agent: Internet Messaging Program (IMP) 4.0-cvs
X-Originating-IP: 192.168.122.51
X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on mail.cs.fsu.edu
X-Spam-Level: 
X-Spam-Status: No, hits=-4.7 required=5.0 tests=BAYES_00,L_TO_ME,NO_REAL_NAME 
	autolearn=no version=2.63
Status: RO
Content-Length: 71124
Lines: 944

This message is in MIME format.

--=_3b1f808b7ef211d196e734
Content-Type: text/plain; charset="ISO-8859-1"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

Dear Dr. Baker,

I am attaching a README file which lists the features of the driver written by
my team. I am also attaching the tarred source code for your reference.

Thanks,
Hemant.


--=_3b1f808b7ef211d196e734
Content-Type: text/plain; name="README"; charset="ISO-8859-1"
Content-Disposition: attachment; filename="README"
Content-Transfer-Encoding: base64

LyoqIFBpeGVsU21hcnQgRnJhbWUgR3JhYmJlciBEcml2ZXIgZm9yIExpbnV4ICovClRoaXMgRHJp
dmVyIGlzIHdyaXR0ZW4gYnkgSGVtYW50IEJhbmF2YXIgYW5kIEthcnRoaWsgUGFyc2hhLiBUaGUg
ZHJpdmVyIGhhcyB0aGUKZm9sbG93aW5nIGZlYXR1cmVzOgoxLiBTdXBwb3J0cyA1MTIgWCA0ODAg
R3JheSBDYXJkCjIuIFN1cHBvcnRzIDY0MCBYIDQ4MCBDb2xvciBDYXJkCjMuIFN1cHBvcnRzIFBD
SSBhbmQgSVNBIGNhcmRzIChMb3cgYW5kIEhpZ2ggTWVtb3J5IEFkZHJlc3NlcykKNC4gU3VwcG9y
dHMgSW50ZXJydXB0cyBpZiBwcmVzZW50IG90aGVyd2lzZSB1c2VzIGtlcm5lbCB0aW1lcgo1LiBB
bGxvd3MgSW9jdGwgdG8gZG8gc3ViZnJhbWluZyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBieSBn
cmFiYmluZyAxLzR0aCBmcmFtZSBhdCBhIHRpbWUgaW5zdGVhZCBvZiB0aGUgZnVsbCBmcmFtZS4K
Ni4gSTJDIHByb2JsZW0gc29sdmVkIHdpdGggYWRkaW5nIGEgbWljcm9kZWxheSBhZnRlciB0aGUg
d3JpdGVzLgo3LiBTdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyBhdCB0aGUgc2FtZSB0aW1lLgoKUHJv
YmxlbXM6CjEuIENvdWxkIG1tYXAgYnV0IHdpdGggcHJvYmxlbXMgd2hpbGUgd3JpdGUgdGhyb3Vn
aHMuCjIuIFY0TCBhbmQgVjRsMiBzdXBwb3J0IGlzIHVuZGVyd2F5LgozLiBSZWFkcyBmcm9tIHRo
ZSBmcmFtZSBidWZmZXIgc2hvdWxkIGJlIG9wdGltaXplZCBmb3IgdGhlIGNvbG9yIGNhcmQgdG8g
cmVhZCBmcm9tIG5vbi1jb25zZWN1dGl2ZSBsb2NhdGlvbnMgZWZmaWNpZW50bHkuCgoKVGhlIGRy
aXZlciBzb3VyY2UgY29kZSBjYW4gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgR1BMLgoKQWNrbm93bGVk
Z2VtZW50czoKRHIuIEJha2VyLCBCcmV0dCBUaG9tc29uIGFuZCBBcnRoaSBHb2thcm4uCgoKCgo=

--=_3b1f808b7ef211d196e734
Content-Type: application/x-tar; name="proj.tar"
Content-Disposition: attachment; filename="proj.tar"
Content-Transfer-Encoding: base64

cHJvai8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwNDA3NTUAMDAwMDc2
NAAwMDAwNzY0ADAwMDAwMDAwMDAwADEwMDY3MDcyMDA3ADAxMTY1MQAgNQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGJhbmF2YXIAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAYmFuYXZhcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw
cm9qL01ha2VmaWxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAwNzY0
ADAwMDA3NjQAMDAwMDAwMDAzNDMAMTAwNjcwNzE2MTMAMDEzMzEwACAwAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAYmFuYXZhcgAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABiYW5hdmFyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtF
Uk5FTERJUj0vaG9tZS9kZXZlbG9wZXIvbGludXgKCiNDRkxBR1MgPSAtRF9fS0VSTkVMX18gLURN
T0RVTEUgLUkkKEtFUk5FTERJUikvaW5jbHVkZSAtTyAtV2FsbApDRkxBR1MgPSAtV2FsbCAtRF9f
S0VSTkVMX18gLURNT0RVTEUgLUkkKEtFUk5FTERJUikgLUkkKEtFUk5FTERJUikvaW5jbHVkZSAt
TzIgLWMgCgphbGw6IGhydC5vCgpjbGVhbjoKCXJtIC1mICoubyAqfiBjb3JlIC5kZXBlbmQKAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHJv
ai9ocnQuYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2NAAw
MDAwNzY0ADAwMDAwMTExNDMzADEwMDY3MDcxNjEzADAxMjYxNAAgMAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGJhbmF2YXIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAYmFuYXZhcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5j
bHVkZSA8bGludXgvbW9kdWxlLmg+CiNpbmNsdWRlIDxsaW51eC9wY2kuaD4KI2luY2x1ZGUgPGxp
bnV4L3ZpZGVvZGV2Lmg+CiNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiNpbmNsdWRlIDxsaW51eC9r
ZGV2X3QuaD4KCiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8YXNtL21zci5oPgoK
I2luY2x1ZGUgImhydC5oIgoKLyoqCiAqIGhydF9hZGRyZXNzZXMgLSBhIGxpc3Qgb2YgcG9zc2li
bGUganVtcGVyLXNlbGVjdGVkIGFkZHJlc3NlcwogKiAganVtcGVyIEEgb24gID0gcGx1ZyBhbmQg
cGxheSBhZGRyZXNzIChhYm92ZSBvbmUgTUIgYWRkcmVzcykKICogIGp1bXBlciBBIG9mZiA9IGhh
cmR3aXJlZCB0byAweGRjMDAwIG9yIDB4ZDQwMDAKICogIGp1bXBlciBCIG9uICA9IGFkZHJlc3Mg
MHhkNDAwMCAoaWdub3JlZCBpZiBqdW1wZXIgQSBpcyBvbikgCiAqICBqdW1wZXIgQiBvZmYgPSBh
ZGRyZXNzIDB4ZGMwMDAgKGlnbm9yZWQgaWYganVtcGVyIEEgaXMgb24pIAogKi8KY29uc3QgdW5z
aWduZWQgbG9uZyBocnRfYWRkcmVzc2VzW10gPSB7IDB4ZDQwMDAsIDB4ZGMwMDAgfTsKCi8qKgog
KiBJMkMgcm91dGluZXMgLQogKiAgQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgY2FwYWJpbGl0eSBh
bHNvIGZvciBhbiBhcHBsaWNhdGlvbgogKiAgdGhhdCBpcyB1c2luZyByYXcgbWVtb3J5LW1hcHBp
bmcsIG1heWJlIGFzIGEgc2VwYXJhdGUgaGVhZGVyCiAqICBmaWxlIGFuZCBvYmplY3QgbGlicmFy
eQogKi8KCi8qKgogKiBzYWE3MTEwX2RlZmF1bHRfaW5pdF9yZWdzIC0gdGhlIHJlZ2lzdGVyIHZh
bHVlcyB1c2VkIHRvCiAqIGluaXRpYWxpemUgdGhlIFNBQTcxMTAgQS9EIGNvbnZlcnRlci4KICog
QmVjYXVzZSBzb21lIHJlZ2lzdGVycyBhcmUgbm90IHNldCwgdGhpcyBpcyBnaXZlbgogKiBhcyBh
IGxpc3Qgb2YgcGFpcnMuICBUaGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHBhaXIKICogaXMgdGhl
IHJlZ2lzdGVyIG51bWJlciwgYW5kIHRoZSBzZWNvbmQgbnVtYmVyIGlzIHRoZQogKiB2YWx1ZSBv
ZiB0aGUgcmVnaXN0ZXIuICBUaGUgYXJyYXkgaXMgdGVybWluYXRlZCBieQogKiBhIGRvdWJsZSB6
ZXJvLWJ5dGUuICBUaGlzIGdlbmVyYWxpemF0aW9uIGFsbG93cyB1cyB0byByZXVzZQogKiB0aGUg
aW5pdGlhbGl6YXRpb24gcm91dGluZSB3aXRoIGRpZmZlcmVudCB0YWJsZXMsCiAqIHRvIGFsbG93
IGFuIGFwcGxpY2F0aW9uIHRvIHJlc2V0IGFueSBzZXQgb2YgZGV2aWNlCiAqIHJlZ2lzdGVycy4K
ICovCmNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExMF9kZWZhdWx0X2luaXRfcmVnc1tdID0gewoJ
OTQsICAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgYXJlIDk0IGJ5dGVzIHRoYXQgZm9sbG93
ICovCgkweDAwLCAweDRjLAkJLyogaW5jcmVtZW50IGRlbGF5IChJREVMKSAqLwoJMHgwMSwgMHgz
YywJCS8qIEhTWSBiZWdpbiA1MCBIeiAqLwoJMHgwMiwgMHgwZCwJCS8qIEhTWSBzdG9wIDUwIEh6
ICovCgkweDAzLCAweGVmLAkJLyogSENMIGJlZ2luIDUwIEh6ICovCgkweDA0LCAweGJkLAkJLyog
SENMIHN0b3AgNTAgSHogKi8KCTB4MDUsIDB4ZjAsCQkvKiBIU1kgYWZ0ZXIgUEhJMSA1MCBIeiAq
LwoJMHgwNiwgMHgwMCwJCS8qIGx1bWluYW5jZSBjb250cm9sICovCgkweDA3LCAweDAwLAkJLyog
aHVlIGNvbnRyb2wgKi8KCTB4MDgsIDB4ZjgsCQkvKiBjb2xvdXIga2lsbGVyIHRocmVzaG9sZCBR
VUFNIChQQUwvTlRTQykgKi8KCTB4MDksIDB4ZjgsCQkvKiBjb2xvdXIga2lsbGVyIHRocmVzaG9s
ZCBTRUNBTSAqLwoJMHgwQSwgMHg2MCwJCS8qIFBBTCBzd2l0Y2ggc2Vuc2l0aXZpdHkgKi8KCTB4
MEIsIDB4NTAsCQkvKiBTRUNBTSBzd2l0Y2ggc2Vuc2l0aXZpdHkgKi8KCTB4MEMsIDB4MDAsCQkv
KiBnYWluIGNvbnRyb2wgY2hyb21pbmFuY2UgKi8KCTB4MEQsIDB4ODYsCQkvKiBzdGFuZGFyZC9t
b2RlIGNvbnRyb2wgKi8KCS8qIDcgVlRSQyA9IDEgIChWQ1IgbW9kZSwgbm90IFRWKQoJICAgNiBY
WFgKCSAgIDUgWFhYCgkgICA0IFhYWAoJICAgMyBSVFNFID0gMCAgKFBMSU4gc3dpdGNoZWQgdG8g
b3V0cHV0KQoJICAgMiBIUk1WID0gMSAgKEhSRUYgbm9ybWFsIHBvc2l0aW9uKQoJICAgMSBTU1RC
ID0gMSAgKHN0YXR1cyBieXRlID0gMSkKCSAgIDAgU0VDUyA9IDAgIChvdGhlciBzdGFuZGFyZHMs
IG5vdCBTRUNBTSkgKi8KCTB4MEUsIDB4MTgsCQkvKiBJL08gYW5kIGNsb2NrIGNvbnRyb2wgKi8K
CTB4MEYsIDB4OTAsCQkvKiBjb250cm9sICMxICovCgkweDEwLCAweDAwLAkJLyogY29udHJvbCAj
MiAqLwoJMHgxMSwgMHgyYywJCS8qIGNocm9taW5hbmNlIGdhaW4gcmVmZXJlbmNlICovCgkweDEy
LCAweDdmLAkJLyogY2hyb21pbmFuY2Ugc2F0dXJhdGlvbiAqLwoJMHgxMywgMHg1ZSwJCS8qIGx1
bWluYW5jZSBjb250cmFzdCAqLwoJMHgxNCwgMHg0MiwJCS8qIEhTWSBiZWdpbiA2MCBIeiAqLwoJ
MHgxNSwgMHgxYSwJCS8qIEhTWSBzdG9wIDYwIEh6ICovCgkweDE2LCAweGZmLAkJLyogSENMIGJl
Z2luIDYwIEh6ICovCgkweDE3LCAweGRhLAkJLyogSENMIHN0b3AgNjAgSHogKi8KCTB4MTgsIDB4
ZjAsCQkvKiBIU1kgYWZ0ZXIgUEhJMSA2MCBIeiAqLwoJMHgxOSwgMHg5YiwJCS8qIGx1bWluYW5j
ZSBicmlnaHRuZXNzICovCgkvKgoJICAgMHgxQSAtIG5vdCB1c2VkCgkgICAweDFCIC0gbm90IHVz
ZWQKCSAgIDB4MUMgLSBub3QgdXNlZAoJICAgMHgxRCAtIG5vdCB1c2VkCgkgICAweDFFIC0gbm90
IHVzZWQKCSAgIDB4MUYgLSBub3QgdXNlZAoJICovCgkweDIwLCAweDdjLAkJLyogYW5hbG9nIGNv
bnRyb2wgIzEgKi8KCTB4MjEsIDB4MDMsCQkvKiBhbmFsb2cgY29udHJvbCAjMiAqLwoJMHgyMiwg
MHhkMiwJCS8qIG1peGVyIGNvbnRyb2wgIzEgKi8KCTB4MjMsIDB4NDEsCQkvKiBjbGFtcGluZyBs
ZXZlbCBjb250cm9sIDIxICovCgkweDI0LCAweDgwLAkJLyogY2xhbXBpbmcgbGV2ZWwgY29udHJv
bCAyMiAqLwoJMHgyNSwgMHg0MSwJCS8qIGNsYW1waW5nIGxldmVsIGNvbnRyb2wgMzEgKi8KCTB4
MjYsIDB4ODAsCQkvKiBjbGFtcGluZyBsZXZlbCBjb250cm9sIDMyICovCgkweDI3LCAweDRmLAkJ
LyogZ2FpbiBjb250cm9sICMxICovCgkweDI4LCAweGZlLAkJLyogd2hpdGUgcGVhayBjb250cm9s
ICovCgkweDI5LCAweDAxLAkJLyogc3luYyBib3R0b20gY29udHJvbCAqLwoJMHgyQSwgMHhjZiwJ
CS8qIGdhaW4gY29udHJvbCBhbmFsb2cgIzIgKi8KCTB4MkIsIDB4MGYsCQkvKiBnYWluIGNvbnRy
b2wgYW5hbG9nICMzICovCgkweDJDLCAweDgzLAkJLyogbWl4ZXIgY29udHJvbCAjMiAqLwoJMHgy
RCwgMHgwMSwJCS8qIGludGVncmF0aW9uIHZhbHVlIGdhaW4gKi8KCTB4MkUsIDB4ODEsCQkvKiB2
ZXJ0aWNhbCBibGFua2luZyBwdWxzZSBzZXQgKi8KCTB4MkYsIDB4MDMsCQkvKiB2ZXJ0aWNhbCBi
bGFua2luZyBwdWxzZSByZXNldCAqLwoJMHgzMCwgMHg2MCwJCS8qIEFEQ3MgZ2FpbiBjb250cm9s
ICovCgkweDMxLCAweDcxLAkJLyogbWl4ZXIgY29udHJvbCAjMyAqLwoJMHgzMiwgMHgwMiwJCS8q
IGludGVncmF0aW9uIHZhbHVlIHdoaXRlIHBlYWsgKi8KCTB4MzMsIDB4OGMsCQkvKiBtaXhlciBj
b250cm9sICM0ICovCgkweDM0LCAweDAzLAkJLyogZ2FpbiB1cGRhdGUgbGV2ZWwgKi8KfTsKCnVu
c2lnbmVkIGludCBIUlRfV0lEVEggPSAwOwp1bnNpZ25lZCBpbnQgSFJUX0hFSUdIVCA9IDA7CnVu
c2lnbmVkIGludCBIUlRfQllURVNfUEVSX1BJWEVMID0gMDsKdW5zaWduZWQgaW50IEhSVF9CWVRF
U19QRVJfTElORSA9IDA7CnVuc2lnbmVkIGludCBIUlRfRlJBTUVTSVpFID0gMDsKCi8qIE51bWJl
ciBvZiByZWdpc3RlcnMgb24gdGhlIGJvYXJkLSBjaGVja2VkIGluIGkyY19pbml0KCkgKi8KI2Rl
ZmluZSBIUlRfTlVNUkVHUyAweDM0CgovKiBTbWFsbCB1dGlsaXR5IHVzZWQgaW4gcmVhZCgpLi4u
IFByb2JhYmx5IHRoZXJlJ3MgYW4gb2ZmaWNpYWwKICAgb25lIHNvbWV3aGVyZSBpbiB0aGUga2Vy
bmVsLCBodWg/CiovCiNpZm5kZWYgbWluCiMgIGRlZmluZSBtaW4oYSxiKSAoKGEpPChiKSA/IChh
KSA6IChiKSkKI2VuZGlmCgovKiBJbnRlcnJ1cHQgTGluZSBObyovCmludCBIUlRfSVJRID0gLTE7
CgovKiBWYXJpYWJsZSB0byBHcmFiIEZ1bGwgb3IgU3ViIEZyYW1lICovCi8qIDAgPSBHUkFCIEZV
TEwgRlJBTUUgKi8KLyogMSA9IEdSQUIgU1VCIEZSQU1FICovCmludCBHUkFCX1NVQl9GUkFNRSA9
IDA7CgovKioKICogc3RydWN0IGhydF9wZXJfZmlsZSAtIGNvbnRhaW5zIGRhdGEgdG8gYmUgc3Rv
cmVkIHBlciBmaWxlIGhhbmRsZQogKi8Kc3RydWN0IGhydF9wZXJfZmlsZSB7CglzdHJ1Y3Qgc3Vi
d2luZG93IHdpbjsKCXN0cnVjdCBocnQgKmhydGRldjsKfTsKCi8qKgogKiBzdHJ1Y3QgaHJ0IC0g
dGhlIG1haW4gZGV2aWNlIHN0cnVjdC4gVGhpcyByZXByZXNlbnRzIHRoZSBjYXJkLgogKi8Kc3Ry
dWN0IGhydCB7CiAgdW5zaWduZWQgbG9uZyBwaHlzYWRkcjsgLyogUGh5c2ljYWwgYWRkcmVzcyAq
LwogIHVuc2lnbmVkIGxvbmcgdmlydGFkZHI7IC8qIFZpcnR1YWwgYWRkcmVzcyAod2FzIGlvcmVt
YXBwZWQpICovCiAgc3RydWN0IHBjaV9kZXYgKnBjaWRldjsgLyogUENJIGRldmljZSAqLwogIHN0
cnVjdCBzZW1hcGhvcmUgc2VtOyAvKiBQcm90ZWN0aXZlIG11dGV4ICovCiAgdW5zaWduZWQgaW50
IGZpZWxkX2JpdDsgLyogV2hpY2ggZmllbGQgKGV2ZW4gb3Igb2RkKSBpcyBjYXB0dXJpbmcgKi8K
ICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cXVldWU7IC8qIFdhaXQgcXVldWUgZm9yIHBvbGwoKSAq
LwogIHVuc2lnbmVkIGNoYXIgcmVndmFsc1tIUlRfTlVNUkVHU107IC8qIEN1cnJlbnQgdmFsdWVz
IG9mIHRoZSByZWdzICovCiAgdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhOyAvKiBUaGUgZGF0YSBm
b3IgYSBmcmFtZSBmb3IgcmVhZCgpICovCiAgc3RydWN0IHN1YndpbmRvdyAqd2luOyAvKiBDdXJy
ZW50IHJlZ2lvbiBvZiBpbnRlcmVzdCAqLwogIHVuc2lnbmVkIGludCBieXRlc3BlcmxpbmU7IC8q
IEJ5dGVzIHBlciByYXN0ZXIgbGluZSAqLwogIHVuc2lnbmVkIGludCBmcmFtZXNpemU7IC8qIFNp
emUgb2YgYSBmcmFtZSAqLwogIHVuc2lnbmVkIGludCB1c2VyczsgLyogTnVtYmVyIG9mIHByb2Nl
c3NlcyB0aGF0IGhhdmUgb3BlbigpJ2QgaHJ0bWVtICovCiAgdW5zaWduZWQgaW50IHR5cGU7IC8q
IFR5cGUgb2YgdGhlIGNhcmUgQ09MT1Igb3IgR1JBWSAqLwp9OwoKLyogTXVsdGlwbGUgY2FyZCBz
dXBwb3J0ICovCiNkZWZpbmUgSFJUX01BWF9ERVZTIDIKc3RhdGljIHN0cnVjdCBocnQgaHJ0ZGV2
c1tIUlRfTUFYX0RFVlNdOwpzdGF0aWMgaW50IG51bV9ocnRkZXZzID0gMDsKCi8qIEZsYWcgdG8g
dGVsbCB3aGV0aGVyIHRoZSBrZXJuZWwgdGltZXIgaXMgcnVubmluZyAqLwp2b2xhdGlsZSBzdGF0
aWMgaW50IHRpbWVyX3J1bm5pbmcgPSAwOwoKLyogVGhlIGtlcm5lbCB0aW1lciAqLwpzdGF0aWMg
c3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CgovKiBEZWJ1Z2dpbmcgb3V0cHV0ICovCnN0YXRpYyB1
bnNpZ25lZCBpbnQgZGVidWcgPSAxOwoKLyogTWFqb3IgbnVtYmVyIGZvciBocnRtZW0gZGV2aWNl
ICovCnN0YXRpYyB1bnNpZ25lZCBpbnQgaHJ0bWVtX21ham9yID0gMDsKCi8qIERpc2FibGUgdGhl
IGhydG1lbSBkZXZpY2UgKi8Kc3RhdGljIHVuc2lnbmVkIGludCBkaXNhYmxlX2hydG1lbSA9IDA7
CgpNT0RVTEVfUEFSTShkZWJ1ZywgImkiKTsKTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJs
ZSBkZWJ1Z2dpbmcgb3V0cHV0Iik7Ck1PRFVMRV9QQVJNKGhydG1lbV9tYWpvciwgImkiKTsKTU9E
VUxFX1BBUk1fREVTQyhocnRtZW1fbWFqb3IsCgkJICJNYWpvciBudW1iZXIgZm9yIGhydG1lbSBk
ZXZpY2UgKGRlZmF1bHQ6IGR5bmFtaWMpIik7Ck1PRFVMRV9QQVJNKGRpc2FibGVfaHJ0bWVtLCAi
aSIpOwpNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHJ0bWVtLCAiRGlzYWJsZSBocnRtZW0gZGV2
aWNlIChkZWZhdWx0OiBvZmYpIik7CgpNT0RVTEVfQVVUSE9SKCJIZW1hbnQgQmFuYXZhciAmIEth
cnRoaWsgUGFyc2hhIik7Ck1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBIUlQgUGl4ZWxz
bWFydCA1MTItOC1QQ0kvNjQwLTQ4MC0xNi1QQ0kvUEMxMDQiKTsKTU9EVUxFX0xJQ0VOU0UoIkdQ
TCIpOwoKLyoqCiAqIGRwcmludGssIGhydF9wcmludGsgLSB0aGluIHdyYXBwZXJzIGFyb3VuZCBw
cmludGsoKQogKi8KI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJnLi4uKQlpZiAoZGVidWcpIFwKCXBy
aW50aygiaHJ0OiAiIGZtdCwgIyMgYXJnKQojZGVmaW5lIGhydF9wcmludGsoZm10LCBhcmcuLi4p
CXByaW50aygiaHJ0OiAiIGZtdCwgIyMgYXJnKQoKLyogUHJvdG90eXBlcyAqLwp2b2lkIGlubGlu
ZSBncmFiX2ZpZWxkKHN0cnVjdCBocnQgKmhydGRldiwgdW5zaWduZWQgY2hhciAqZnJhbWVkYXRh
LCBpbnQgcGFyaXR5KTsKdm9pZCBpbmxpbmUgZ3JhYl9jb2xvcihzdHJ1Y3QgaHJ0ICpocnRkZXYs
IHVuc2lnbmVkIGNoYXIgKmZyYW1lZGF0YSk7CnZvaWQgaW5saW5lIGdyYWJfc3ViX2ZpZWxkKHN0
cnVjdCBocnQgKmhydGRldiwgdW5zaWduZWQgY2hhciAqZnJhbWVkYXRhLCBpbnQgcGFyaXR5LCBp
bnQgc3ViRnJhbWUpOwp2b2lkIHRpbWVyX2Z1bmModW5zaWduZWQgbG9uZyBwdHIpOwppbnQgaTJj
X3NldF9yZWcoc3RydWN0IGhydCAqaHJ0ZGV2LCBpbnQgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7
CnN0cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlX2luaXQoc3RydWN0IGhydCAqaHJ0ZGV2KTsK
Ci8qIERyLiBCYWtlcidzIEkyQyBwcm90b3R5cGVzICovCnN0YXRpYyBpbnQgaTJjX2luaXQoc3Ry
dWN0IGhydCAqaHJ0ZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmluaXRfcmVncyk7CgoKc3RhdGljIGludCBocnRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz
dHJ1Y3QgZmlsZSAqZmlsZSk7CnN0YXRpYyBpbnQgaHJ0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUs
IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBwcG9zKTsKc3RhdGljIGludCBocnRf
d3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIg
KmJ1ZixpbnQgY291bnQpOwpzdGF0aWMgaW50IGhydF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBz
dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CnN0YXRpYyBpbnQgaHJ0X2RvX2lvY3RsKHN0cnVj
dCBocnQgKmhydGRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpzdGF0
aWMgaW50IGhydF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwg
dW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpzdGF0aWMgaW50IGhydF9yZWxl
YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLyoqCiAqIGhydF9m
b3BzIC0gVGhpcyBpcyB0aGUgZm9wcyBmb3IgdGhlIGRldmljZSB0aGF0IG1tYXAncyB0aGUgZGV2
aWNlCiAqICBtZW1vcnkgZGlyZWN0bHkgKHRoZSBocnRtZW0gZGV2aWNlKQogKi8Kc3RhdGljIHN0
cnVjdCBmaWxlX29wZXJhdGlvbnMgaHJ0X2ZvcHMgPSB7CiAgICAgIC5tbWFwID0gaHJ0X21tYXAs
CiAgICAgIC5vcGVuID0gaHJ0X29wZW4sCiAgICAgIC5yZWxlYXNlID0gaHJ0X3JlbGVhc2UsCiAg
ICAgIC5pb2N0bCA9IGhydF9pb2N0bCwKICAgICAgLnJlYWQgPSBocnRfcmVhZCwKICAgICAgLndy
aXRlID0gaHJ0X3dyaXRlLAp9OwoKCi8qKgogKiBocnRfcHJvYmUgLSBjaGVjayB0aGF0IHdlIGhh
dmUgYSBkZXZpY2UgYXMgdGhlIHNwZWNpZmllZCBhZGRyZXNzLgogKiBBc3N1bWUgdGhlIG1lbW9y
eSByZWdpb24gaXMgYWxyZWFkeSBtYXBwZWQuCiAqIFRoZSBhZGRyZXNzIGhhcyB0byBiZSBhIHZp
cnR1YWwgYWRkcmVzcyBtYXBwZWQgdG8gdGhlIGRldmljZSBJL08gc3BhY2UuCiAqLwppbnQgaHJ0
X3Byb2JlKHVuc2lnbmVkIGxvbmcgYWRkcikgewogIHVuc2lnbmVkIGNoYXIgb2xkdmFsMSwgb2xk
dmFsMiwgb2xkdmFsMywgbmV3dmFsMjsKICB1bnNpZ25lZCBpbnQgb2xkYWRkcjsKICAKICAvKiBz
YXZlIHRoZSBvbGQgdmFsdWVzIGF0IHRoZSBhZGRyZXNzICovCiAgb2xkdmFsMSA9IHJlYWRiKEhS
VF9DT05UUk9MX1JFRyArIGFkZHIpOwogIHJtYigpOwogIG9sZGFkZHIgPSByZWFkdyhIUlRfWV9M
T1dfUkVHICsgYWRkcik7CiAgcm1iKCk7CiAgCiAgLyogZnJlZXplIHRoZSBmcmFtZSBncmFiYmlu
ZywgaW1tZWRpYXRlbHkgKi8KICB3cml0ZWIoMHg1QiwgSFJUX0NPTlRST0xfUkVHICsgYWRkcik7
CiAgd21iKCk7CiAgCiAgLyogd3JpdGUgYSBuZXcgdmFsdWUgdG8gdGhlIGZpcnN0IGJ5dGUgaW4g
dGhlIGZpcnN0IHJhc3Rlci9yb3cgKi8KICB3cml0ZXcoMCwgSFJUX1lfTE9XX1JFRyArIGFkZHIp
OwogIHdtYigpOwogIG9sZHZhbDIgPSByZWFkYihhZGRyKTsKICBybWIoKTsKICB3cml0ZWIofm9s
ZHZhbDIsIGFkZHIpOwogIHdtYigpOwogIAogIC8qIHdyaXRlIG9sZHZhbDIgdG8gdGhlIGZpcnN0
IGJ5dGUgb2YgdGhlIG5leHQgcmFzdGVyL3JvdyAqLwogIHdyaXRldygxLCBIUlRfWV9MT1dfUkVH
ICsgYWRkcik7CiAgd21iKCk7CiAgb2xkdmFsMyA9IHJlYWRiKGFkZHIpOwogIHJtYigpOwogIHdy
aXRlYihvbGR2YWwyLCBhZGRyKTsKICB3bWIoKTsKICAKICAvKiByZWFkIHRoZSB2YWx1ZSBhdCB0
aGUgcHJldmlvdXMgcmFzdGVyL3JvdyAqLwogIHdyaXRldygwLCBIUlRfWV9MT1dfUkVHICsgYWRk
cik7CiAgd21iKCk7CiAgbmV3dmFsMiA9IHJlYWRiKGFkZHIpOwogIHJtYigpOwogIAogIC8qIHJl
c3RvcmUgdGhlIG9sZCB2YWx1ZXMgKi8KICB3cml0ZWIob2xkdmFsMiwgYWRkcik7CiAgd21iKCk7
CiAgd3JpdGV3KDEsIEhSVF9ZX0xPV19SRUcgKyBhZGRyKTsKICB3bWIoKTsKICB3cml0ZWIob2xk
dmFsMywgYWRkcik7CiAgd21iKCk7CiAgd3JpdGViKG9sZGFkZHIsIEhSVF9ZX0xPV19SRUcgKyBh
ZGRyKTsKICB3bWIoKTsKICB3cml0ZWIob2xkdmFsMSwgSFJUX0NPTlRST0xfUkVHICsgYWRkcik7
CiAgd21iKCk7CiAgCiAgcmV0dXJuIChuZXd2YWwyID09ICh1bnNpZ25lZCBjaGFyKX5vbGR2YWwy
KTsKfQoKLyoqCiAqIGhydF90cnlfYWRkcmVzcyAtIHJldHVybiAxIGlmIHRoZXJlIGlzIGEgZGV2
aWNlCiAqIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzczsgZWxzZSByZXR1cm4gMDsKICogSWYgdGhl
cmUgaXMgYSBkZXZpY2UsIG1hcCB0aGUgZGV2aWNlIG1lbW9yeSBpbnRvIHRoZSBrZXJuZWwKICog
dmlydHVhbCBtZW1vcnkgc3BhY2UuCiAqLwppbnQgaHJ0X3RyeV9hZGRyZXNzKHN0cnVjdCBocnQg
KmhydGRldiwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSB7Cgl1bnNpZ25lZCBsb25nIHZpcnR1YWxf
YWRkcjsKCgkvKiBSZXNlcnZlIG91ciBtZW1vcnkgcmFuZ2UgKi8KCWlmICghcmVxdWVzdF9tZW1f
cmVnaW9uKGFkZHJlc3MsIEJZVEVTX05FRURFRCwgImhydCIpKSB7CgkJaHJ0X3ByaW50aygiSS9P
IG1lbW9yeSBhbHJlYWR5IGluIHVzZVxuIik7CgkJcmV0dXJuIDA7Cgl9Cgl2aXJ0dWFsX2FkZHIg
PSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKGFkZHJlc3MsIEJZVEVTX05FRURFRCk7
CgoJLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyByZWFsbHkgYSBkZXZpY2UgYXQgdGhpcyBhZGRyZXNz
ICovCglpZiAoaHJ0X3Byb2JlKHZpcnR1YWxfYWRkcikpIHsKCQlocnRkZXYtPnBoeXNhZGRyID0g
YWRkcmVzczsKCQlocnRkZXYtPnZpcnRhZGRyID0gdmlydHVhbF9hZGRyOwoJCQoJCS8qIFRyeSB0
byBpbml0aWFsaXplIHRoZSBBL0QgY29udmVydGVyICovCgkJaWYoaTJjX2luaXQoaHJ0ZGV2LCBo
cnRkZXYtPnZpcnRhZGRyLCBzYWE3MTEwX2RlZmF1bHRfaW5pdF9yZWdzKSA8IDApCgkJICBnb3Rv
IGVycm9yOwoJfSBlbHNlIHsKCWVycm9yOgoJCS8qIFJlbGVhc2UgbWVtb3J5IGFuZCB1bm1hcCAq
LwoJCWlvdW5tYXAoKHZvaWQgKil2aXJ0dWFsX2FkZHIpOwoJCXJlbGVhc2VfbWVtX3JlZ2lvbihh
ZGRyZXNzLCBCWVRFU19ORUVERUQpOwoJCXJldHVybiAwOwoJfQoJcmV0dXJuIDE7Cn0KCi8qKgog
KiBocnRfcmVhZCAtIGRlcGVuZHMgb24gdGltZXJfZnVuYyB0byBjaGFuZ2UgdGhlIGZpZWxkX2Jp
dC4KICogIFJlYWRzIGF0IG1vc3QgYWJvdXQgMjMgRlBTIG9uIHRoaXMgNDAwTUh6IG1hY2hpbmUg
d2l0aG91dCBkaXNwbGF5aW5nLAogKiAgYW5kIGl0IHJlYWRzIGF0IGFib3V0IDEzIEZQUyB3aXRo
IGRpc3BsYXlpbmcgKHVzaW5nIGhydGRlbW8pLgogKiAgTkIgdGhhdCBocnRfcmVhZEIgaXMgdXNl
ZCBvbiBib3RoIGhydG1lbSBhbmQgL2Rldi92aWRlb04uCiAqLwpzdGF0aWMgaW50IGhydF9yZWFk
KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9z
KSB7CiAgc3RydWN0IGhydF9wZXJfZmlsZSAqcGVyX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7
CiAgc3RydWN0IGhydCAqaHJ0ZGV2ID0gcGVyX2ZpbGUtPmhydGRldjsKICBpbnQgbGVuOwogIGlu
dCBvbGRfZmllbGQ7CiAgc3RhdGljIHVuc2lnbmVkIGludCBzdWJGcmFtZTsKICB1bnNpZ25lZCBs
b25nIHN0YXJ0ID0gamlmZmllcywgZW5kOwogIAoKICBocnRkZXYtPndpbiA9ICZwZXJfZmlsZS0+
d2luOwogIGxlbiA9IG1pbigoc2l6ZV90KSAoaHJ0ZGV2LT53aW4tPmhlaWdodCAqIGhydGRldi0+
Ynl0ZXNwZXJsaW5lKSwgY291bnQpOwogIGRvd25faW50ZXJydXB0aWJsZSgmaHJ0ZGV2LT5zZW0p
OwogIG9sZF9maWVsZCA9IGhydGRldi0+ZmllbGRfYml0OwogIAogIGlmKGhydGRldi0+dHlwZSA9
PSAxKSB7CiAgICAvKiBGcmVleiBpbW1lZGlhdGVseSAqLwogICAgd3JpdGViKDB4NUIsIEhSVF9D
T05UUk9MX1JFRyArIGhydGRldi0+dmlydGFkZHIpOwogICAgd21iKCk7CiAgfQoKICAvKiBHcmFi
IGEgZmllbGQgKi8KICBpZighR1JBQl9TVUJfRlJBTUUpIHsKICAgIGdyYWJfZmllbGQoaHJ0ZGV2
LCBocnRkZXYtPmZyYW1lZGF0YSwgb2xkX2ZpZWxkKTsKICAgIGlmKGhydGRldi0+dHlwZSkgZ290
byBkb25lOyAgICAKICB9CQogIGVsc2UKICAgIGdyYWJfc3ViX2ZpZWxkKGhydGRldiwgaHJ0ZGV2
LT5mcmFtZWRhdGEsIG9sZF9maWVsZCwgc3ViRnJhbWUpOwogIAogIAogIC8qIEdvIHRvIHNsZWVw
IHVudGlsIHRoZSBmaWVsZCBiaXQgY2hhbmdlcyAqLwogIHdoaWxlIChvbGRfZmllbGQgPT0gaHJ0
ZGV2LT5maWVsZF9iaXQpIHsKICAgIHVwKCZocnRkZXYtPnNlbSk7CiAgICBpZiAoZmlsZS0+Zl9m
bGFncyAmIE9fTk9OQkxPQ0spCiAgICAgIHJldHVybiAtRUFHQUlOOwogICAgCiAgICBpZiAod2Fp
dF9ldmVudF9pbnRlcnJ1cHRpYmxlCgkoaHJ0ZGV2LT53YWl0cXVldWUsIChvbGRfZmllbGQgIT0g
aHJ0ZGV2LT5maWVsZF9iaXQpKSkKICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKICAgIAogICAg
aWYgKGRvd25faW50ZXJydXB0aWJsZSgmaHJ0ZGV2LT5zZW0pKQogICAgICByZXR1cm4gLUVSRVNU
QVJUU1lTOwogIH0KICAvKiBHcmFiIHRoZSBvdGhlciBmaWVsZCAqLwogIGlmKCFHUkFCX1NVQl9G
UkFNRSkKICAgIGdyYWJfZmllbGQoaHJ0ZGV2LCBocnRkZXYtPmZyYW1lZGF0YSwgaHJ0ZGV2LT5m
aWVsZF9iaXQpOwogIGVsc2UgewogICAgZ3JhYl9zdWJfZmllbGQoaHJ0ZGV2LCBocnRkZXYtPmZy
YW1lZGF0YSwgaHJ0ZGV2LT5maWVsZF9iaXQsIHN1YkZyYW1lKTsKICAgIGlmKHN1YkZyYW1lID09
IDMpIHsKICAgICAgc3ViRnJhbWUgPSAwOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN1YkZyYW1l
Kys7CiAgICB9CiAgfQkKICAKIGRvbmU6CQogIGlmKGhydGRldi0+dHlwZSA9PSAxKSB7CiAgIC8q
IFVuIEZyZWV6ICovCiAgIHdyaXRlYigweDkxLCBIUlRfQ09OVFJPTF9SRUcgKyBocnRkZXYtPnZp
cnRhZGRyKTsKICAgd21iKCk7CiB9CiAgCiAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGhydGRldi0+
ZnJhbWVkYXRhLCBsZW4pKSB7CiAgICB1cCgmaHJ0ZGV2LT5zZW0pOwogICAgcmV0dXJuIC1FRkFV
TFQ7CiAgfQogIHVwKCZocnRkZXYtPnNlbSk7CiAgCiAgZW5kID0gamlmZmllczsKICBkcHJpbnRr
KCJEaWZmID0gJWx1XG4iLCBlbmQtc3RhcnQpOwogIHJldHVybiBsZW47Cn0KCnN0YXRpYyBpbnQg
aHJ0X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBj
aGFyICpidWYsaW50IGNvdW50KSB7CiAgc3RydWN0IGhydF9wZXJfZmlsZSAqcGVyX2ZpbGUgPSBm
aWxwLT5wcml2YXRlX2RhdGE7CiAgc3RydWN0IGhydCAqaHJ0ZGV2ID0gcGVyX2ZpbGUtPmhydGRl
djsKCiAgaHJ0ZGV2LT53aW4gPSAmcGVyX2ZpbGUtPndpbjsKICBkb3duX2ludGVycnVwdGlibGUo
JmhydGRldi0+c2VtKTsKICAvKiBGcmVleiBpbW1lZGlhdGVseSAqLwogIHdyaXRlYigweDVCLCBI
UlRfQ09OVFJPTF9SRUcgKyBocnRkZXYtPnZpcnRhZGRyKTsKICB3bWIoKTsKICAKICBpZihjb3Vu
dCA+IGhydGRldi0+ZnJhbWVzaXplKSB7CiAgICBjb3VudCA9IGhydGRldi0+ZnJhbWVzaXplOwog
IH0KICBpZiAoY29weV9mcm9tX3VzZXIoaHJ0ZGV2LT5mcmFtZWRhdGEsIGJ1ZiwgY291bnQpKSB7
CiAgICB1cCgmaHJ0ZGV2LT5zZW0pOwogICAgcmV0dXJuIC1FRkFVTFQ7CiAgfQoKICAvKiBnbyBs
aXZlICovCiAgd3JpdGViKDB4OTEsIEhSVF9DT05UUk9MX1JFRyArIGhydGRldi0+dmlydGFkZHIp
OwogIHdtYigpOwogIHVwKCZocnRkZXYtPnNlbSk7CiAgcmV0dXJuIGNvdW50Owp9Cgp2b2lkIGhy
dF9JUlFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdz
KSB7ICAKICBpbnQgaTsKICAKICBmb3IgKGkgPSAwOyBocnRkZXZzW2ldLnBjaWRldjsgaSsrKSB7
CiAgICBpbnQgbmV3X2ZpZWxkOwogICAgCiAgICBuZXdfZmllbGQgPSByZWFkYihocnRkZXZzW2ld
LnZpcnRhZGRyICsgSFJUX0NPTlRST0xfUkVHKSAmIDE7CiAgICBpZiAobmV3X2ZpZWxkICE9IGhy
dGRldnNbaV0uZmllbGRfYml0KSB7CiAgICAgIGhydGRldnNbaV0uZmllbGRfYml0ID0gbmV3X2Zp
ZWxkOwogICAgICAvKmRwcmludGsoIkludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBhbmQgZmllbGQg
Yml0IGNoYW5nZWRcbiIpOyovCiAgICAgIC8qZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBub3c6IEVs
c2UgbW9kdWxlIGluaXQgZG9zZSBub3QgY29uY2x1ZGUqLwogICAgICB3cml0ZWIoMHgwMCwgSFJU
X0lOVFJfRU5BQkxFX1JFRyArIGhydGRldnNbaV0udmlydGFkZHIpOwogICAgICB3bWIoKTsKICAg
ICAgd2FrZV91cCgmaHJ0ZGV2c1tpXS53YWl0cXVldWUpOwogICAgfQogIH0KfQoKLyoqCiAqIHRp
bWVyX2Z1bmMgLSB0aGUgY3J1eCBvZiB0aGUgZHJpdmVyLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBldmVyeSB0aW1lcgogKiAgdGljayBhbmQgY2hlY2tzIHRvIHNlZSBpZiB0aGUgZmllbGQgYml0
IGhhcyBjaGFuZ2VkLiBJZiBpdCBoYXMsIHdlCiAqICBlaXRoZXIgd2FrZSB1cCBzbGVlcGluZyBy
ZWFkZXJzIG9yIGNhbGwgc3RyZWFtaW5nX2ZpZWxkY2hhbmdlKCkuCiAqLwp2b2lkIHRpbWVyX2Z1
bmModW5zaWduZWQgbG9uZyBwdHIpIHsKICBpbnQgaTsKICAKICBmb3IgKGkgPSAwOyBocnRkZXZz
W2ldLnBjaWRldjsgaSsrKSB7CiAgICBpbnQgbmV3X2ZpZWxkOwogICAgCiAgICBuZXdfZmllbGQg
PSByZWFkYihocnRkZXZzW2ldLnZpcnRhZGRyICsgSFJUX0NPTlRST0xfUkVHKSAmIDE7CiAgICBp
ZiAobmV3X2ZpZWxkICE9IGhydGRldnNbaV0uZmllbGRfYml0KSB7CiAgICAgIGhydGRldnNbaV0u
ZmllbGRfYml0ID0gbmV3X2ZpZWxkOwogICAgICB3YWtlX3VwKCZocnRkZXZzW2ldLndhaXRxdWV1
ZSk7CiAgICB9CiAgfQoKICB0aW1lci5leHBpcmVzID0gamlmZmllcyArIChIWi8xMDApOwogIGFk
ZF90aW1lcigmdGltZXIpOwp9CgovKioKICogcGVyX2ZpbGVfaW5pdCAtIGFsbG9jYXRlcyBhbmQg
aW5pdGlhbGl6ZXMgcGVyLWZpbGUgZGF0YSwgd2hpY2gKICogIGlzIGN1cnJlbnRseSBqdXN0IHRo
ZSBST0kgKHJlZ2lvbi1vZi1pbnRlcmVzdCkgc3Vid2luZG93CiAqICBhbmQgYSBwb2ludGVyIGJh
Y2sgdG8gdGhpcyBocnRkZXYKICovCnN0cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlX2luaXQo
c3RydWN0IGhydCAqaHJ0ZGV2KSB7CiAgc3RydWN0IGhydF9wZXJfZmlsZSAqcGVyX2ZpbGUgPSB2
bWFsbG9jKHNpemVvZigqcGVyX2ZpbGUpKTsKICAKICBwZXJfZmlsZS0+aHJ0ZGV2ID0gaHJ0ZGV2
OwogIHBlcl9maWxlLT53aW4uaGVpZ2h0ID0gSFJUX0hFSUdIVDsKICBwZXJfZmlsZS0+d2luLndp
ZHRoID0gSFJUX1dJRFRIOwogIHBlcl9maWxlLT53aW4uc3RhcnR4ID0gMDsKICBwZXJfZmlsZS0+
d2luLnN0YXJ0eSA9IDA7CiAgCiAgcmV0dXJuIHBlcl9maWxlOwp9CgoKCi8qKgogKiBocnRfZGV2
X2luaXQgLSB0cnkgdG8gaW5pdGlhbGl6ZSBvbmUgUENJIGRldmljZSwgc3BlY2lmaWVkCiAqIGJ5
IHRoZSBwYXJhbWV0ZXIgZGV2CiAqLwpzdGF0aWMgaW50IGhydF9kZXZfaW5pdChzdHJ1Y3QgcGNp
X2RldiAqZGV2KSB7CiAgaW50IGk7CiAgc3RydWN0IGhydCAqaHJ0ZGV2ID0gTlVMTDsKICB1OCB0
ZW1wSVJROwogIAogIC8qIGNoZWNrIHRoYXQgdGhlIGRldmljZSBpcyBvbmUgb2YgdGhvc2Ugd2Ug
cmVjb2duaXplICovCiAgaWYgKGRldi0+ZGV2aWNlICE9IEhSVF9ERVZJQ0VfSURfQ09MT1IgJiYg
ZGV2LT5kZXZpY2UgIT0gSFJUX0RFVklDRV9JRF9HUkFZKSB7CiAgICBocnRfcHJpbnRrKCJVbmtu
b3duIEhSVCBkZXZpY2U6ICVkXG4iLCBkZXYtPmRldmljZSk7CiAgICByZXR1cm4gMDsKICB9CiAg
CiAgaWYoZGV2LT5kZXZpY2UgPT0gSFJUX0RFVklDRV9JRF9DT0xPUikgeyAgCiAgICAgIEhSVF9X
SURUSD02NDA7CiAgICAgIEhSVF9IRUlHSFQ9NDgwOwogICAgICBIUlRfQllURVNfUEVSX1BJWEVM
PTI7CiAgICAgIEhSVF9CWVRFU19QRVJfTElORSA9ICBIUlRfV0lEVEggKiBIUlRfQllURVNfUEVS
X1BJWEVMOwogICAgICBIUlRfRlJBTUVTSVpFID0gSFJUX1dJRFRIICogSFJUX0hFSUdIVCAqIEhS
VF9CWVRFU19QRVJfUElYRUw7CiAgfQogIGVsc2UgewogICAgICBIUlRfV0lEVEg9NTEyOwogICAg
ICBIUlRfSEVJR0hUPTQ4MDsKICAgICAgSFJUX0JZVEVTX1BFUl9QSVhFTD0xOwogICAgICBIUlRf
QllURVNfUEVSX0xJTkUgPSAgSFJUX1dJRFRIICogSFJUX0JZVEVTX1BFUl9QSVhFTDsKICAgICAg
SFJUX0ZSQU1FU0laRSA9IEhSVF9XSURUSCAqIEhSVF9IRUlHSFQgKiBIUlRfQllURVNfUEVSX1BJ
WEVMOwogIH0KCiAgCiAgLyogdHJ5IHRvIGZpbmQgYSBmcmVlIGRldmljZSBkZXNjcmlwdG9yICov
CiAgZm9yIChpID0gMDsgaSA8IEhSVF9NQVhfREVWUzsgaSsrKSB7CiAgICBpZiAoaHJ0ZGV2c1tp
XS5wY2lkZXYgPT0gTlVMTCkgewogICAgICBocnRkZXYgPSAmaHJ0ZGV2c1tpXTsKICAgICAgbnVt
X2hydGRldnMrKzsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmICghaHJ0ZGV2KSB7CiAgICBo
cnRfcHJpbnRrKCJNb3JlIHRoYW4gJWQgSFJUIGRldmljZXMhXG4iLCBIUlRfTUFYX0RFVlMpOwog
ICAgcmV0dXJuIDA7CiAgfQogIAogIC8qIHByb2JlIHRoZSBkZXZpY2UgdG8gZ2V0IHRoZSBiYXNl
IGFkZHJlc3MgKi8KICBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogIGlmIChocnRfdHJ5X2FkZHJl
c3MoaHJ0ZGV2LCBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSkpIHsKICAgIGRwcmludGsoIlN1
Y2Nlc3MhIFdlIGZvdW5kIHRoZSBjYXJkLCBzbyBub3cgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1
Y3R1cmVzXG4iKTsKICAgIGdvdG8gc3VjY2VzczsKICB9CgogIAogIGZvciAoaSA9IDA7IGkgPCBB
UlJBWV9TSVpFKGhydF9hZGRyZXNzZXMpOyBpKyspIAogICAgaWYgKGhydF90cnlfYWRkcmVzcyho
cnRkZXYsIGhydF9hZGRyZXNzZXNbaV0pKQogICAgICBnb3RvIHN1Y2Nlc3M7CiAgCiAgZHByaW50
aygiTk8gQ0FSRCBGT1VORFxuIik7CiAgLyogRmFpbHVyZTsgY291bGRuJ3QgZmluZCBpdCAqLwog
IHJldHVybiAwOwogIAogc3VjY2VzczoKICAvKiBTdWNjZXNzISBXZSBmb3VuZCB0aGUgY2FyZCwg
c28gbm93IGluaXRpYWxpemUgdGhlIGRhdGEgc3RydWN0dXJlcyAqLwogIAogIC8qIFNldCB0aGUg
Y29uc3RhbnRzICovCiAgaWYoZGV2LT5kZXZpY2UgPT0gSFJUX0RFVklDRV9JRF9DT0xPUikgewog
ICAgLypIUlRfQllURVNfUEVSX1BJWEVMID0gMiBmb3IgY29sb3IuIGhlbmNlICdieXRlc3Blcmxp
bmUnIGFuZCAnZnJhbWVzaXplJyBkb3VibGUqLwogICAgaHJ0ZGV2LT5ieXRlc3BlcmxpbmUgPSBI
UlRfQllURVNfUEVSX0xJTkU7CiAgICBocnRkZXYtPmZyYW1lc2l6ZSA9IEhSVF9GUkFNRVNJWkU7
CiAgICBocnRkZXYtPnR5cGUgPSAxOyAvKiBDb2xvciAqLwogIH0KICBlbHNlIHsKICAgIGhydGRl
di0+Ynl0ZXNwZXJsaW5lID0gSFJUX0JZVEVTX1BFUl9MSU5FOwogICAgaHJ0ZGV2LT5mcmFtZXNp
emUgPSBIUlRfRlJBTUVTSVpFOwogICAgaHJ0ZGV2LT50eXBlID0gMDsgLyogR3JheSAqLwogIH0K
ICAKICAvKiBDb3B5IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdCAqLwogIGhydGRldi0+cGNpZGV2ID0g
ZGV2OwogIAogIC8qIEluaXRpYWxpemUgdGhlIHdhaXQgcXVldWUgKGZvciBwb2xsKSAqLwogIGlu
aXRfd2FpdHF1ZXVlX2hlYWQoJmhydGRldi0+d2FpdHF1ZXVlKTsKICAKICAvKiBJbml0aWFsaXpl
IHNlbWFwaG9yZSAqLwogIHNlbWFfaW5pdCgmaHJ0ZGV2LT5zZW0sIDEpOwoKICAvKiBSZWFkIHRo
ZSBmaWVsZCBpZCBiaXQgKHNob3VsZCBiZSAwIHNpbmNlIHdlJ3JlIHNob3VsZG4ndCBiZQogICAg
IGluIGxpdmUgbW9kZSB5ZXQpICovCiAgaHJ0ZGV2LT5maWVsZF9iaXQgPSByZWFkYihocnRkZXYt
PnZpcnRhZGRyICsgSFJUX0NPTlRST0xfUkVHKSAmIDE7CiAgCiAgLyogUHV0IHRoZSBjYXJkIGlu
dG8gTGl2ZSBtb2RlICovCiAgd3JpdGViKEhSVF9MSVZFX0NNRCwgaHJ0ZGV2LT52aXJ0YWRkciAr
IEhSVF9DT05UUk9MX1JFRyk7CiAgCiAgLyogQWxsb2NhdGUgZnJhbWUgYnVmZmVyIG1lbW9yeSAq
LwogIGhydGRldi0+ZnJhbWVkYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgdm1hbGxvYyhIUlRfRlJB
TUVTSVpFKTsKICAKICBpZiAoaHJ0ZGV2LT5mcmFtZWRhdGEgPT0gTlVMTCkgewogICAgaHJ0X3By
aW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAKICAgIGlm
ICghZGlzYWJsZV9ocnRtZW0pCiAgICAgIHVucmVnaXN0ZXJfY2hyZGV2KGhydG1lbV9tYWpvciwg
ImhydG1lbSIpOwogICAgcmV0dXJuIC1FTk9NRU07CiAgfQogIAogIHBjaV9yZWFkX2NvbmZpZ19i
eXRlKGRldixQQ0lfSU5URVJSVVBUX0xJTkUsJnRlbXBJUlEpOwogIEhSVF9JUlEgPSB0ZW1wSVJR
OwogIGlmKEhSVF9JUlEgPiAtMSkgewogICAgaW50IHJlc3VsdCA9IC0xOwogICAgZHByaW50aygi
SW50ZXJydXB0cyBmb3VuZCBvbiBkZXZpY2UgOiAlZDsgRW5hYmxpbmcgSW50ZXJydXB0IEhhbmRs
ZXIuXG4iLCBIUlRfSVJRKTsKICAgIHJlc3VsdCA9IHJlcXVlc3RfaXJxKEhSVF9JUlEsIGhydF9J
UlFfaGFuZGxlciwgU0FfSU5URVJSVVBULCAiaHJ0IElSUSBoYW5kbGVyIiwgTlVMTCk7CSAgICAg
IAogICAgLypkaXNhYmxlIGludGVycnVwdHMgZm9yIG5vdyovCiAgICB3cml0ZWIoMHgwMCwgSFJU
X0lOVFJfRU5BQkxFX1JFRyArIGhydGRldi0+dmlydGFkZHIpOwogICAgd21iKCk7CiAgICAKICB9
CiAgZWxzZSB7CiAgICAvKiBTZXQgdXAgb3VyIHRpbWVyIHJvdXRpbmUuIEl0IHNob3VsZCBleHBp
cmUgMTAwIHRpbWVzCiAgICAgICBhIHNlY29uZCAoZXZlcnkgMSBqaWZmeSBvbiAyLjQsIGV2ZXJ5
IDEwIGppZmZpZXMgb24gMi42KSAqLwogICAgZHByaW50aygiVW5hYmxlIHRvIGZpbmQgSW50ZXJy
dXB0cyBvbiBkZXZpY2U7IEVuYWJsaW5nIFRpbWVyLlxuIik7CiAgICBpbml0X3RpbWVyKCZ0aW1l
cik7CiAgICB0aW1lci5mdW5jdGlvbiA9IHRpbWVyX2Z1bmM7CiAgICB0aW1lci5leHBpcmVzID0g
amlmZmllcyArIChIWi8xMDApOwogIH0KICByZXR1cm4gMTsKfQoKLyoqCiAqIGhydF9kZXZfY2xl
YW51cCAtIGRlYWxsb2NhdGUgcGVyLWNhcmQgcmVzb3VyY2VzCiAqLwp2b2lkIGhydF9kZXZfY2xl
YW51cChzdHJ1Y3QgaHJ0ICpocnRkZXYpIHsKICBpZiAoaHJ0ZGV2LT5wY2lkZXYpIHsKICAgIAog
ICAgcmVsZWFzZV9tZW1fcmVnaW9uKGhydGRldi0+cGh5c2FkZHIsIEJZVEVTX05FRURFRCk7CiAg
ICBpb3VubWFwKCh1bnNpZ25lZCBjaGFyICopaHJ0ZGV2LT52aXJ0YWRkcik7CiAgICB2ZnJlZSho
cnRkZXYtPmZyYW1lZGF0YSk7CiAgICBpZihIUlRfSVJRKSB7CiAgICAgIGZyZWVfaXJxKEhSVF9J
UlEsIE5VTEwpOwogICAgfQogICAgaWYgKHRpbWVyX3J1bm5pbmcpCiAgICAgIGRlbF90aW1lcl9z
eW5jKCZ0aW1lcik7CiAgfQp9CgovKioKICogaW5pdF9tb2R1bGUgLSB3aGVyZSBpdCBhbGwgc3Rh
cnRzLiBNYWlubHkgcGVyZm9ybXMgcHJvYmluZy4KICovCmludCBpbml0X21vZHVsZSh2b2lkKSB7
CiAgaW50IHJlc3VsdDsKICBzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKICAKICAKI2lmIExJ
TlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAgLyogVGhpcyBpcyBh
IFBDSSBjYXJkLCBhZnRlciBhbGwgKi8KICBpZiAoIXBjaV9wcmVzZW50KCkpCiAgICByZXR1cm4g
LUVOT0RFVjsKI2VuZGlmCiAgCiAgLyogTG9vayBmb3IgdGhlIGNhcmQgKi8KICBkZXYgPSBwY2lf
ZmluZF9kZXZpY2UoSFJUX1ZFTkRPUl9JRCwgUENJX0FOWV9JRCwgZGV2KTsKICBpZiAoZGV2KSB7
CiAgICBpZiAoIWhydF9kZXZfaW5pdChkZXYpKSB7CiAgICAgIGhydF9wcmludGsoIkZhaWxlZCB0
byBpbml0aWFsaXplIGNhcmRcbiIpOwogICAgICByZXR1cm4gLUVOT0RFVjsKICAgIH0KICB9IGVs
c2UgewogICAgLyogSXQgc2hvdWxkIGFsd2F5cyBzaG93IHVwLCByZWdhcmRsZXNzIG9mCiAgICAg
ICBqdW1wZXIgc2V0dGluZ3MgKi8KICAgIGhydF9wcmludGsoIlBDSSBkZXZpY2Ugbm90IGZvdW5k
XG4iKTsKICAgIHJldHVybiAtRU5PREVWOwogIH0KICAKICAvKiBXZSBmb3VuZCBhdCBsZWFzdCBv
bmUgY2FyZCwgc28gcmVnaXN0ZXIgb3VyIGRpcmVjdC10by1kZXZpY2UtbWVtb3J5CiAgICAgY2hh
cmFjdGVyIGRldmljZSBvbmNlIGZvciBhbGwgY2FyZHMgKi8KICBpZiAoIWRpc2FibGVfaHJ0bWVt
KSB7CiAgICByZXN1bHQgPSByZWdpc3Rlcl9jaHJkZXYoaHJ0bWVtX21ham9yLCAiaHJ0bWVtIiwK
CQkJICAgICAmaHJ0X2ZvcHMpOwogICAgaWYgKHJlc3VsdCA8IDApIHsKICAgICAgaW50IGk7CiAg
ICAgIAogICAgICBocnRfcHJpbnRrKCJVbmFibGUgdG8gcmVnaXN0ZXIgaHJ0bWVtIGRldmljZVxu
Iik7CiAgICAgIAogICAgICAvKiBGcmVlIHVwIGFsbCB0aGUgZGV2aWNlcyAqLwogICAgICBmb3Ig
KGkgPSAwOyBocnRkZXZzW2ldLnBjaWRldjsgaSsrKSB7CglocnRfZGV2X2NsZWFudXAoJmhydGRl
dnNbaV0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoaHJ0bWVt
X21ham9yID09IDApCiAgICAgIGhydG1lbV9tYWpvciA9IHJlc3VsdDsKICAgIAogICAgLyogWFhY
OiBQdXQgaW4gc3VwcG9ydCBmb3IgZGV2ZnMhCiAgICAgICBBbmQgc3lzZnMgdG9vIHBvc3NpYmx5
PyAqLwogICAgaHJ0X3ByaW50aygiUmVnaXN0ZXJlZCBocnRtZW0gd2l0aCBtYWpvciBudW1iZXIg
PSAlZFxuIiwKCSAgICAgICBocnRtZW1fbWFqb3IpOwogIH0KICByZXR1cm4gMDsKfQoKLyoqCiAq
IGhydF9kb19pb2N0bCAtIGhhbmRsZSBpb2N0bCdzIG9uIGhydG1lbSBkZXZpY2UKICovCnN0YXRp
YyBpbnQgaHJ0X2RvX2lvY3RsKHN0cnVjdCBocnQgKmhydGRldiwgdW5zaWduZWQgaW50IGNtZCwg
dW5zaWduZWQgbG9uZyBhcmcpIHsKCWlmIChjbWQgPT0gSU9DX0hSVF9TRVRfSTJDUkVHKSB7CgkJ
c3RydWN0IGkyY19yZWd2YWwgcjsKCgkJaWYgKGNvcHlfZnJvbV91c2VyKCZyLCAodm9pZCAqKSBh
cmcsIHNpemVvZihyKSkpIHsKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJfQoJCWkyY19zZXRfcmVnKGhy
dGRldiwgci5yZWcsIHIudmFsKTsKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19I
UlRfR0VUX0kyQ1JFRykgewoJCXN0cnVjdCBpMmNfcmVndmFsIHI7CgoJCXIudmFsID0gaHJ0ZGV2
LT5yZWd2YWxzW3IucmVnXTsKCQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgJnIsIHNp
emVvZihyKSkpIHsKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJfQoJCXJldHVybiAwOwoJfSBlbHNlIGlm
IChjbWQgPT0gSU9DX0hSVF9TRVRfV0lEVEgpIHsKCQlpZiAoYXJnICsgaHJ0ZGV2LT53aW4tPnN0
YXJ0eCA+IEhSVF9XSURUSCB8fCBhcmcgPCAxKQoJCQlyZXR1cm4gLUVJTlZBTDsKCgkJaHJ0ZGV2
LT53aW4tPndpZHRoID0gYXJnOwoJCWhydGRldi0+Ynl0ZXNwZXJsaW5lID0gYXJnICogSFJUX0JZ
VEVTX1BFUl9QSVhFTDsKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19IUlRfU0VU
X0hFSUdIVCkgewoJCWlmIChhcmcgKyBocnRkZXYtPndpbi0+c3RhcnR5ID4gSFJUX0hFSUdIVCB8
fCBhcmcgPCAxKQoJCQlyZXR1cm4gLUVJTlZBTDsKCgkJaHJ0ZGV2LT53aW4tPmhlaWdodCA9IGFy
ZzsKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19IUlRfU0VUX1NUQVJUWCkgewoJ
CWlmIChhcmcgPiBocnRkZXYtPndpbi0+d2lkdGggfHwgYXJnIDwgMCkgcmV0dXJuIC1FSU5WQUw7
CgoJCWhydGRldi0+d2luLT5zdGFydHggPSBhcmc7CgkJcmV0dXJuIDA7Cgl9IGVsc2UgaWYgKGNt
ZCA9PSBJT0NfSFJUX1NFVF9TVEFSVFkpIHsKCQlpZiAoYXJnID4gaHJ0ZGV2LT53aW4tPmhlaWdo
dCB8fCBhcmcgPCAwKSByZXR1cm4gLUVJTlZBTDsKCgkJaHJ0ZGV2LT53aW4tPnN0YXJ0eSA9IGFy
ZzsKCQlyZXR1cm4gMDsKCX0gZWxzZSBpZiAoY21kID09IElPQ19IUlRfU0VUX1JPSSkgewoJCXN0
cnVjdCBzdWJ3aW5kb3cgd2luOwoKCQlpZiAoY29weV9mcm9tX3VzZXIoJndpbiwgKHZvaWQgKikg
YXJnLCBzaXplb2Yod2luKSkpIHsKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJfQoJCWlmICh3aW4uaGVp
Z2h0ID4gSFJUX0hFSUdIVCB8fCB3aW4uaGVpZ2h0IDwgMCkgcmV0dXJuIC1FSU5WQUw7CgkJaWYg
KHdpbi53aWR0aCA+IEhSVF9XSURUSCB8fCB3aW4ud2lkdGggPCAwKSByZXR1cm4gLUVJTlZBTDsK
CQlpZiAod2luLnN0YXJ0eCA+IHdpbi53aWR0aCB8fCB3aW4uc3RhcnR4IDwgMCkgcmV0dXJuIC1F
SU5WQUw7CgkJaWYgKHdpbi5zdGFydHkgPiB3aW4uaGVpZ2h0IHx8IHdpbi5zdGFydHkgPCAwKSBy
ZXR1cm4gLUVJTlZBTDsKCgkJKmhydGRldi0+d2luID0gd2luOwoJCXJldHVybiAwOwoJfSBlbHNl
IGlmIChjbWQgPT0gSU9DX0hSVF9HRVRfUk9JKSB7CgkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAq
KSBhcmcsIGhydGRldi0+d2luLAoJCQkJIHNpemVvZigqaHJ0ZGV2LT53aW4pKSkgewoJCQlyZXR1
cm4gLUVGQVVMVDsKCQl9CgkJcmV0dXJuIDA7Cgl9IGVsc2UgaWYgKGNtZCA9PSBJT0NfSFJUX1NF
VF9JMkNSRUdTKSB7CgkJdW5zaWduZWQgY2hhciBsZW47CgkJaW50IHJldHZhbDsKCQl1bnNpZ25l
ZCBjaGFyICpidWY7CgoJCS8qIFN0b3AgdGhlIHRpbWVyIGZpcnN0ICovCgkJZGVsX3RpbWVyX3N5
bmMoJnRpbWVyKTsKCQl0aW1lcl9ydW5uaW5nID0gMDsKCgkJLyogRmlyc3QgYnl0ZSBpcyB0aGUg
bGVuZ3RoIG9mIHRoZSBhcnJheSAqLwoJCWlmIChjb3B5X2Zyb21fdXNlcigmbGVuLCAodm9pZCAq
KSBhcmcsIDEpKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQlkcHJpbnRrKCJzaXplIG9mIGFycmF5ID0g
JWRcbiIsIGxlbik7CgoJCWJ1ZiA9IHZtYWxsb2MobGVuICsgMSk7CgkJaWYgKGNvcHlfZnJvbV91
c2VyKGJ1ZiwgKHZvaWQgKikgYXJnLCBsZW4pKSB7CgkJCXZmcmVlKGJ1Zik7CgkJCXJldHVybiAt
RUZBVUxUOwoJCX0KCQlyZXR2YWwgPSBpMmNfaW5pdChocnRkZXYsIGhydGRldi0+dmlydGFkZHIs
IGJ1Zik7IAoJCXZmcmVlKGJ1Zik7CgoJCS8qIFN0YXJ0IHRoZSB0aW1lciBhZ2FpbiAqLwoJCXRp
bWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaLzEwMCk7CgkJYWRkX3RpbWVyKCZ0aW1lcik7CgkJ
dGltZXJfcnVubmluZyA9IDE7CgoJCXJldHVybiByZXR2YWw7Cgl9CgllbHNlIGlmIChjbWQgPT0g
SU9DX0hSVF9TRVRfU1VCRlJBTUUpIHsKCSAgR1JBQl9TVUJfRlJBTUUgPSAxOwoJfQoJZWxzZSBp
ZiAoY21kID09IElPQ19IUlRfU0VUX0ZVTExGUkFNRSkgewoJICBHUkFCX1NVQl9GUkFNRSA9IDA7
Cgl9CgkKCXJldHVybiAtRUlOVkFMOwp9CgovKioKICogaHJ0X2lvY3RsIC0gd3JhcHBlciB0byBw
YXNzIGlvY3RsJ3Mgb24gaHJ0bWVtIHRvCiAqICBocnRfZG9faW9jdGwoKQogKi8Kc3RhdGljIGlu
dCBocnRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCgkJCSAg
ICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKewojaWYgTElOVVhfVkVSU0lP
Tl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMCkKCWludCBtaW5vciA9IE1JTk9SKGlub2Rl
LT5pX3JkZXYpOwojZWxzZQoJaW50IG1pbm9yID0gTUlOT1Ioa2Rldl92YWwoaW5vZGUtPmlfcmRl
dikpOwojZW5kaWYKCXN0cnVjdCBocnRfcGVyX2ZpbGUgKnBlcl9maWxlID0gZmlsZS0+cHJpdmF0
ZV9kYXRhOwoJc3RydWN0IGhydCAqaHJ0ZGV2ID0gcGVyX2ZpbGUtPmhydGRldjsKCWludCByZXQ7
CgoJZG93bigmaHJ0ZGV2LT5zZW0pOwoKCWhydGRldi0+d2luID0gJnBlcl9maWxlLT53aW47CgoJ
ZHByaW50aygiaW9jdGw6ICV4IG9uIG1pbm9yICVkXG4iLCBjbWQsIG1pbm9yKTsKCglpZiAobWlu
b3IgPiBudW1faHJ0ZGV2cykgewoJCWhydF9wcmludGsoIk1pbm9yIG51bSAlZCBvdXQgb2YgcmFu
Z2VcbiIsIG1pbm9yKTsKCQl1cCgmaHJ0ZGV2LT5zZW0pOwoJCXJldHVybiAtMTsKCX0KCXJldCA9
IGhydF9kb19pb2N0bChocnRkZXYsIGNtZCwgYXJnKTsKCgl1cCgmaHJ0ZGV2LT5zZW0pOwoJcmV0
dXJuIHJldDsKfQoKLyoqCiAqIGhydF9vcGVuIC0gY2hlY2tzIG1pbm9yIG51bWJlciByYW5nZSwg
c2V0cyBwcml2YXRlX2RhdGEsCiAqICBzdGFydHMgdGltZXIgaWYgbmVjZXNzYXJ5LCBpbmNyZW1l
bnRzIHVzZXJzCiAqLwpzdGF0aWMgaW50IGhydF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0
cnVjdCBmaWxlICpmaWxlKSB7CgoKI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJT
SU9OKDIsIDUsIDApCglpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKI2Vsc2UKCWlu
dCBtaW5vciA9IE1JTk9SKGtkZXZfdmFsKGlub2RlLT5pX3JkZXYpKTsKI2VuZGlmCgoJaWYgKG1p
bm9yID4gbnVtX2hydGRldnMpIHsKCQlocnRfcHJpbnRrKCJNaW5vciBudW0gJWQgb3V0IG9mIHJh
bmdlXG4iLCBtaW5vcik7CgkJcmV0dXJuIC0xOwoJfQoKCWRvd24oJmhydGRldnNbbWlub3JdLnNl
bSk7CgoJLyogSW5pdGlhbGl6ZSBwZXItZmlsZSBkYXRhICovCglmaWxlLT5wcml2YXRlX2RhdGEg
PSBwZXJfZmlsZV9pbml0KCZocnRkZXZzW21pbm9yXSk7CgoJLyogSW5jcmVtZW50IHVzZXJzICov
CglocnRkZXZzW21pbm9yXS51c2VycysrOwoKCWlmKEhSVF9JUlEgIT0gLTEpewoJICAvKiBHZXQg
dGhlIGludGVycnVwdHMgZ29pbmcgKi8KCgkgIHdyaXRlYigweDAxLCBIUlRfSU5UUl9FTkFCTEVf
UkVHICsgaHJ0ZGV2c1ttaW5vcl0udmlydGFkZHIpOwoJfQoJZWxzZSBpZiAoIXRpbWVyX3J1bm5p
bmcpIHsKCSAgLyogR2V0IHRoZSB0aW1lciBnb2luZyAqLwoKCSAgdGltZXIuZXhwaXJlcyA9IGpp
ZmZpZXMgKyAoSFovMTAwKTsKCSAgYWRkX3RpbWVyKCZ0aW1lcik7CgkgIHRpbWVyX3J1bm5pbmcg
PSAxOwoJfQoKCXVwKCZocnRkZXZzW21pbm9yXS5zZW0pOwoKCXJldHVybiAwOwp9CgovKioKICog
aHJ0X3JlbGVhc2UgLSBmcmVlIG91ciBwZXItZmQgZGF0YSwgc3RvcCB0aGUgdGltZXIgaWYgdXNl
cnMgaXMgMAogKi8Kc3RhdGljIGludCBocnRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJ
CQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKewoJc3RydWN0IGhydF9wZXJfZmlsZSAqcGVyX2Zp
bGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CglzdHJ1Y3QgaHJ0ICpocnRkZXYgPSBwZXJfZmlsZS0+
aHJ0ZGV2OwoKCglkb3duKCZocnRkZXYtPnNlbSk7CgoJLyogRGVjcmVtZW50IHVzZXJzICovCglo
cnRkZXYtPnVzZXJzLS07CgoJLyogVGVsbCB0aGUgdGltZXIgdG8gc3RvcCBpZiBuZWNlc3Nhcnkg
Ki8KCWlmICghaHJ0ZGV2LT51c2VycyAmJiBIUlRfSVJRID09IC0xKSB7CgkgICAgZGVsX3RpbWVy
X3N5bmMoJnRpbWVyKTsKCSAgICB0aW1lcl9ydW5uaW5nID0gMDsKCX0KCgkvKiBGcmVlIG91ciBw
cml2YXRlIGRhdGEgKi8KCXZmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7CgoJdXAoJmhydGRldi0+
c2VtKTsKCglkcHJpbnRrKCJocnRfcmVsZWFzZSBjYWxsZWRcbiIpOwoKCXJldHVybiAwOwp9Cgov
KioKICogaHJ0X21tYXAgLSBwcm92aWRlcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBjYXJkJ3MgbWVt
b3J5CiAqLwpzdGF0aWMgaW50IGhydF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKnZtYSkgewogIHByaW50aygiPDE+bW1hcCBjYWxsZWRcbiIpOwogIHN0cnVj
dCBocnQgKmhydGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKICAKICB2bWEtPnZtX2ZsYWdzIHw9
IChWTV9JTyB8IFZNX1JFU0VSVkVEKTsKICAKICAvKiBKdXN0IG1hcCB0aGUgcGFnZXMgZGlyZWN0
bHkgKi8KICBpZiAocmVtYXBfcGFnZV9yYW5nZSh2bWEtPnZtX3N0YXJ0LCBocnRkZXYtPnBoeXNh
ZGRyLCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCgkJICAgICAgIHZtYS0+dm1fcGFnZV9w
cm90KSkKICAgIHJldHVybiAtRUFHQUlOOwogIAogIHJldHVybiAwOwp9CgovKioKICogY2xlYW51
cF9tb2R1bGUgLSBjYWxsZWQgd2hlbiB3ZSdyZSB1bmxvYWRlZCBvZiBjb3Vyc2UKICovCnZvaWQg
Y2xlYW51cF9tb2R1bGUodm9pZCkKewoJaW50IGk7CgkKCS8qIFJlbGVhc2Ugb3VyIHJlc291Y2Vz
ICovCglpZiAoIWRpc2FibGVfaHJ0bWVtKQoJCXVucmVnaXN0ZXJfY2hyZGV2KGhydG1lbV9tYWpv
ciwgImhydG1lbSIpOwoKCWZvciAoaSA9IDA7IGhydGRldnNbaV0ucGNpZGV2OyBpKyspIHsKCQlo
cnRfZGV2X2NsZWFudXAoJmhydGRldnNbaV0pOwoJfQp9CgovKioKICogZ3JhYl9maWVsZCAtIHJl
YWRzIGEgZmllbGQgKGhhbGYgYSBmcmFtZSkgZnJvbSB0aGUgY2FyZCdzIG1lbW9yeS4KICogV2hp
Y2ggZmllbGQgKDAgb3IgMSkgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcGFyaXR5IHBhcmFtZXRlci4K
ICogSXQgc3RvcmVzIHRoZSBkYXRhIGludG8gdGhlIGZyYW1lZGF0YSBwYXJhbWV0ZXIsIHdoaWNo
IGlzIHVzdWFsbHkKICogdGhlIHNhbWUgYXMgaHJ0ZGV2LT5mcmFtZWRhdGEsIGV4Y2VwdCB3aGVu
IHdlJ3JlIGRvaW5nIHN0cmVhbWluZywKICogaW4gd2hpY2ggY2FzZSBpdCdzIGEgc3RyZWFtIGJ1
ZmZlcidzIHZhZGRyZXNzIGZpZWxkLgogKi8Kdm9pZCBpbmxpbmUgZ3JhYl9maWVsZChzdHJ1Y3Qg
aHJ0ICpocnRkZXYsIHVuc2lnbmVkIGNoYXIgKmZyYW1lZGF0YSwgaW50IHBhcml0eSkgewogIGlu
dCBpLGosbGluZWxlbixidWZwb3M9MDsKICBjaGFyIGJ1ZltocnRkZXYtPmJ5dGVzcGVybGluZV07
CiAgCiAgLypkaXNhYmxlIGludGVycnVwdHMgYmVmb3JlIGdyYWJiaW5nIGEgZmlsZWQqLwogIHdy
aXRlYigweDAwLCBIUlRfSU5UUl9FTkFCTEVfUkVHICsgaHJ0ZGV2LT52aXJ0YWRkcik7CiAgd21i
KCk7CgogIGxpbmVsZW4gPSBocnRkZXYtPndpbi0+d2lkdGggLSBocnRkZXYtPndpbi0+c3RhcnR4
OwoKICBpZihocnRkZXYtPnR5cGUgPT0gMSkgewogICAgZm9yIChpID0gaHJ0ZGV2LT53aW4tPnN0
YXJ0eTsgaSA8IGhydGRldi0+d2luLT5oZWlnaHQ7IGkrKykgewogICAgICBpbnQgb2Zmc2V0ID0g
MDsKICAgICAgLyogTW92ZSB0aGUgeSByZWdpc3RlciAoY3VycmVudCBsaW5lKSAqLwogICAgICB3
cml0ZXcoaSwgaHJ0ZGV2LT52aXJ0YWRkciArIEhSVF9ZX0xPV19SRUcpOwogICAgICB3bWIoKTsK
ICAgICAgCiAgICAgIGZvcihqID0gMDsgaiA8IGhydGRldi0+d2luLT53aWR0aDsgaisrKSB7Cglp
ZihqID09IDUxMikgb2Zmc2V0ID0gNTEyOwoJbWVtY3B5X2Zyb21pbyhidWYgKyBidWZwb3MrKyAs
IGhydGRldi0+dmlydGFkZHIgKyBocnRkZXYtPndpbi0+c3RhcnR4ICsgaiArIG9mZnNldCwxKTsK
CW1lbWNweV9mcm9taW8oYnVmICsgYnVmcG9zKyssIGhydGRldi0+dmlydGFkZHIgKyBocnRkZXYt
Pndpbi0+c3RhcnR4ICsgaiArIDUxMiArIG9mZnNldCwxKTsKICAgICAgfQogICAgICBidWZwb3Mg
PSAwOwogICAgICBtZW1jcHkoZnJhbWVkYXRhICsgKGkgLSBocnRkZXYtPndpbi0+c3RhcnR5KSAq
IGhydGRldi0+Ynl0ZXNwZXJsaW5lICwgYnVmLCBocnRkZXYtPmJ5dGVzcGVybGluZSk7CiAgICB9
CiAgfQogIGVsc2UgewogICAgZm9yIChpID0gKCFwYXJpdHkpICsgaHJ0ZGV2LT53aW4tPnN0YXJ0
eTsgaSA8IGhydGRldi0+d2luLT5oZWlnaHQ7IGkgKz0gMikgewogICAgICAvKiBNb3ZlIHRoZSB5
IHJlZ2lzdGVyIChjdXJyZW50IGxpbmUpICovCiAgICAgIHdyaXRldyhpLCBocnRkZXYtPnZpcnRh
ZGRyICsgSFJUX1lfTE9XX1JFRyk7CiAgICAgIHdtYigpOwogICAgICBtZW1jcHlfZnJvbWlvKGZy
YW1lZGF0YSArIChpIC0gaHJ0ZGV2LT53aW4tPnN0YXJ0eSkgKiBsaW5lbGVuLCBocnRkZXYtPnZp
cnRhZGRyICsgaHJ0ZGV2LT53aW4tPnN0YXJ0eCxocnRkZXYtPmJ5dGVzcGVybGluZSk7CiAgICB9
CiAgfQogIC8qZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgZ2V0dGluZyBhIGZyYW1lKi8KICB3cml0
ZWIoMHgwMSwgSFJUX0lOVFJfRU5BQkxFX1JFRyArIGhydGRldi0+dmlydGFkZHIpOwogIHdtYigp
Owp9Cgp2b2lkIGlubGluZSBncmFiX3N1Yl9maWVsZChzdHJ1Y3QgaHJ0ICpocnRkZXYsIHVuc2ln
bmVkIGNoYXIgKmZyYW1lZGF0YSwgaW50IHBhcml0eSwgaW50IHN1YkZyYW1lKSB7CiAgaW50IGks
IGosIGxpbmVsZW4sYnVmcG9zPTA7CiAgY2hhciBidWZbaHJ0ZGV2LT5ieXRlc3BlcmxpbmVdOwoK
ICBsaW5lbGVuID0gKGhydGRldi0+d2luLT53aWR0aCkgLSBocnRkZXYtPndpbi0+c3RhcnR4Owog
IC8qZGlzYWJsZSBpbnRlcnJ1cHRzIGJlZm9yZSBncmFiYmluZyBhIGZpbGVkKi8KICB3cml0ZWIo
MHgwMCwgSFJUX0lOVFJfRU5BQkxFX1JFRyArIGhydGRldi0+dmlydGFkZHIpOwogIHdtYigpOwoK
ICBpZihocnRkZXYtPnR5cGUgPT0gMSkgeyAvKmNvbG9yKi8KICAgIGlmKHN1YkZyYW1lID09IDAp
IHsKICAgICAgZm9yIChpID0gaHJ0ZGV2LT53aW4tPnN0YXJ0eTsgaSA8IGhydGRldi0+d2luLT5o
ZWlnaHQvMjsgaSsrKSB7CglpbnQgb2Zmc2V0ID0gMDsKCS8qIE1vdmUgdGhlIHkgcmVnaXN0ZXIg
KGN1cnJlbnQgbGluZSkgKi8KCXdyaXRldyhpLCBocnRkZXYtPnZpcnRhZGRyICsgSFJUX1lfTE9X
X1JFRyk7Cgl3bWIoKTsKCQoJZm9yKGogPSAwOyBqIDwgaHJ0ZGV2LT53aW4tPndpZHRoLzI7IGor
KykgewoJICBpZihqID09IDUxMikgb2Zmc2V0ID0gNTEyOwoJICBtZW1jcHlfZnJvbWlvKGJ1ZiAr
IGJ1ZnBvcysrLCBocnRkZXYtPnZpcnRhZGRyICsgaHJ0ZGV2LT53aW4tPnN0YXJ0eCArIGogKyBv
ZmZzZXQsMSk7CgkgIG1lbWNweV9mcm9taW8oYnVmICsgYnVmcG9zKyssIGhydGRldi0+dmlydGFk
ZHIgKyBocnRkZXYtPndpbi0+c3RhcnR4ICsgaiArIDUxMiArIG9mZnNldCwxKTsKCX0KCWJ1ZnBv
cyA9IDA7CgltZW1jcHkoZnJhbWVkYXRhICsgKGkgLSBocnRkZXYtPndpbi0+c3RhcnR5KSAqIGhy
dGRldi0+Ynl0ZXNwZXJsaW5lLCBidWYsIGhydGRldi0+Ynl0ZXNwZXJsaW5lLzIpOwogICAgICB9
CiAgICB9CiAgICBlbHNlIGlmKHN1YkZyYW1lID09IDEpIHsKICAgICAgYnVmcG9zID0gaHJ0ZGV2
LT53aW4tPndpZHRoLzI7CiAgICAgIGZvciAoaSA9IGhydGRldi0+d2luLT5zdGFydHk7IGkgPCBo
cnRkZXYtPndpbi0+aGVpZ2h0LzI7IGkrKykgewoJaW50IG9mZnNldCA9IDA7CgkvKiBNb3ZlIHRo
ZSB5IHJlZ2lzdGVyIChjdXJyZW50IGxpbmUpICovCgl3cml0ZXcoaSwgaHJ0ZGV2LT52aXJ0YWRk
ciArIEhSVF9ZX0xPV19SRUcpOwoJd21iKCk7CgkKCWZvcihqID0gIGhydGRldi0+d2luLT53aWR0
aC8yOyBqIDwgaHJ0ZGV2LT53aW4tPndpZHRoOyBqKyspIHsKCSAgaWYoaiA9PSA1MTIpIG9mZnNl
dCA9IDUxMjsKCSAgbWVtY3B5X2Zyb21pbyhidWYgKyBidWZwb3MrKywgaHJ0ZGV2LT52aXJ0YWRk
ciArIGhydGRldi0+d2luLT5zdGFydHggKyBqICsgb2Zmc2V0LDEpOwoJICBtZW1jcHlfZnJvbWlv
KGJ1ZiArIGJ1ZnBvcysrLCBocnRkZXYtPnZpcnRhZGRyICsgaHJ0ZGV2LT53aW4tPnN0YXJ0eCAr
IGogKyA1MTIgKyBvZmZzZXQsMSk7Cgl9CglidWZwb3MgPSAwOwoJbWVtY3B5KGZyYW1lZGF0YSAr
IGhydGRldi0+Ynl0ZXNwZXJsaW5lLzIgKyAgKGkgLSBocnRkZXYtPndpbi0+c3RhcnR5KSAqIGhy
dGRldi0+Ynl0ZXNwZXJsaW5lICwgYnVmLCBocnRkZXYtPmJ5dGVzcGVybGluZS8yKTsKICAgICAg
fQogICAgfQogICAgZWxzZSBpZihzdWJGcmFtZSA9PSAyKSB7CiAgICAgIGJ1ZnBvcyA9IGhydGRl
di0+d2luLT53aWR0aC8yOwogICAgICBmb3IgKGkgPSBocnRkZXYtPndpbi0+aGVpZ2h0LzItMTsg
aSA8IGhydGRldi0+d2luLT5oZWlnaHQ7IGkrKykgewoJaW50IG9mZnNldCA9IDA7CgkvKiBNb3Zl
IHRoZSB5IHJlZ2lzdGVyIChjdXJyZW50IGxpbmUpICovCgl3cml0ZXcoaSwgaHJ0ZGV2LT52aXJ0
YWRkciArIEhSVF9ZX0xPV19SRUcpOwoJd21iKCk7CgkKCWZvcihqID0gaHJ0ZGV2LT53aW4tPndp
ZHRoLzI7IGogPCBocnRkZXYtPndpbi0+d2lkdGg7IGorKykgewoJICBpZihqID09IDUxMikgb2Zm
c2V0ID0gNTEyOwoJICBtZW1jcHlfZnJvbWlvKGJ1ZiArIGJ1ZnBvcysrLCBocnRkZXYtPnZpcnRh
ZGRyICsgaHJ0ZGV2LT53aW4tPnN0YXJ0eCArIGogKyBvZmZzZXQsMSk7CgkgIG1lbWNweV9mcm9t
aW8oYnVmICsgYnVmcG9zKyssIGhydGRldi0+dmlydGFkZHIgKyBocnRkZXYtPndpbi0+c3RhcnR4
ICsgaiArIDUxMiArIG9mZnNldCwxKTsKCX0KCWJ1ZnBvcyA9IDA7CgltZW1jcHkoZnJhbWVkYXRh
ICsgKGkgLSBocnRkZXYtPndpbi0+aGVpZ2h0LzIpICogaHJ0ZGV2LT5ieXRlc3BlcmxpbmUgKyBo
cnRkZXYtPndpbi0+aGVpZ2h0LzIgKiBocnRkZXYtPmJ5dGVzcGVybGluZSArIGhydGRldi0+d2lu
LT53aWR0aCwgYnVmLCBocnRkZXYtPmJ5dGVzcGVybGluZS8yKTsKICAgICAgfSAgICAgIAogICAg
fQogICAgZWxzZSBpZihzdWJGcmFtZSA9PSAzKSB7CiAgICAgIGJ1ZnBvcyA9IDA7CiAgICAgIGZv
ciAoaSA9IGhydGRldi0+d2luLT5oZWlnaHQvMjsgaSA8IGhydGRldi0+d2luLT5oZWlnaHQ7IGkr
KykgewoJaW50IG9mZnNldCA9IDA7CgkvKiBNb3ZlIHRoZSB5IHJlZ2lzdGVyIChjdXJyZW50IGxp
bmUpICovCgl3cml0ZXcoaSwgaHJ0ZGV2LT52aXJ0YWRkciArIEhSVF9ZX0xPV19SRUcpOwoJd21i
KCk7CgkKCWZvcihqID0gMDsgaiA8IGhydGRldi0+d2luLT53aWR0aC8yOyBqKyspIHsKCSAgaWYo
aiA9PSA1MTIpIG9mZnNldCA9IDUxMjsKCSAgbWVtY3B5X2Zyb21pbyhidWYgKyBidWZwb3MrKywg
aHJ0ZGV2LT52aXJ0YWRkciArIGhydGRldi0+d2luLT5zdGFydHggKyBqICsgb2Zmc2V0LDEpOwoJ
ICBtZW1jcHlfZnJvbWlvKGJ1ZiArIGJ1ZnBvcysrLCBocnRkZXYtPnZpcnRhZGRyICsgaHJ0ZGV2
LT53aW4tPnN0YXJ0eCArIGogKyA1MTIgKyBvZmZzZXQsMSk7Cgl9CglidWZwb3MgPSAwOwoJbWVt
Y3B5KGZyYW1lZGF0YSArIChocnRkZXYtPndpbi0+aGVpZ2h0LzIpICogaHJ0ZGV2LT5ieXRlc3Bl
cmxpbmUgKyAoaSAtIGhydGRldi0+d2luLT5oZWlnaHQvMikgKiBocnRkZXYtPmJ5dGVzcGVybGlu
ZSAsIGJ1ZiwgaHJ0ZGV2LT5ieXRlc3BlcmxpbmUvMik7CiAgICAgIH0gICAgICAKICAgIH0KICB9
CiAgZWxzZSB7IC8qIEdyYXkgc2NhbGUgKi8KCiAgICAgIGlmKHN1YkZyYW1lID09IDApIHsKCWZv
ciAoaSA9ICghcGFyaXR5KSArIGhydGRldi0+d2luLT5zdGFydHk7IGkgPCBocnRkZXYtPndpbi0+
aGVpZ2h0LzI7IGkgKz0gMikgewoJICAvKiBNb3ZlIHRoZSB5IHJlZ2lzdGVyIChjdXJyZW50IGxp
bmUpICovCgkgIHdyaXRldyhpLCBocnRkZXYtPnZpcnRhZGRyICsgSFJUX1lfTE9XX1JFRyk7Cgkg
IHdtYigpOwoKCSAgbWVtY3B5X2Zyb21pbyhmcmFtZWRhdGEgKyAoaSAtIGhydGRldi0+d2luLT5z
dGFydHkpICogaHJ0ZGV2LT5ieXRlc3BlcmxpbmUsIGhydGRldi0+dmlydGFkZHIgKyBocnRkZXYt
Pndpbi0+c3RhcnR4LCBocnRkZXYtPmJ5dGVzcGVybGluZS8yKTsKCX0KICAgICAgfQogICAgICBl
bHNlIGlmKHN1YkZyYW1lID09IDEpIHsKCWZvciAoaSA9ICghcGFyaXR5KSArIGhydGRldi0+d2lu
LT5zdGFydHk7IGkgPCBocnRkZXYtPndpbi0+aGVpZ2h0LzI7IGkgKz0gMikgewoJICAvKiBNb3Zl
IHRoZSB5IHJlZ2lzdGVyIChjdXJyZW50IGxpbmUpICovCgkgIHdyaXRldyhpLCBocnRkZXYtPnZp
cnRhZGRyICsgSFJUX1lfTE9XX1JFRyk7CgkgIHdtYigpOwoJICAKCSAgbWVtY3B5X2Zyb21pbyhm
cmFtZWRhdGEgKyAoaSAtIGhydGRldi0+d2luLT5zdGFydHkpICogaHJ0ZGV2LT5ieXRlc3Blcmxp
bmUgKyBocnRkZXYtPndpbi0+d2lkdGgvMiwgaHJ0ZGV2LT52aXJ0YWRkciArIGhydGRldi0+d2lu
LT5zdGFydHggKyBocnRkZXYtPndpbi0+d2lkdGgvMiwgaHJ0ZGV2LT5ieXRlc3BlcmxpbmUvMik7
Cgl9CiAgICAgIH0KICAgICAgZWxzZSBpZihzdWJGcmFtZSA9PSAyKSB7Cglmb3IgKGkgPSAoIXBh
cml0eSkgKyBocnRkZXYtPndpbi0+aGVpZ2h0LzI7IGkgPCBocnRkZXYtPndpbi0+aGVpZ2h0OyBp
ICs9IDIpIHsKCSAgLyogTW92ZSB0aGUgeSByZWdpc3RlciAoY3VycmVudCBsaW5lKSAqLwoJICB3
cml0ZXcoaSwgaHJ0ZGV2LT52aXJ0YWRkciArIEhSVF9ZX0xPV19SRUcpOwoJICB3bWIoKTsKCSAg
CgkgIG1lbWNweV9mcm9taW8oZnJhbWVkYXRhICsgKGkgLSBocnRkZXYtPndpbi0+aGVpZ2h0LzIp
ICogaHJ0ZGV2LT5ieXRlc3BlcmxpbmUgKyBocnRkZXYtPndpbi0+aGVpZ2h0LzIgKiBocnRkZXYt
PmJ5dGVzcGVybGluZSsgaHJ0ZGV2LT53aW4tPndpZHRoLzIsIGhydGRldi0+dmlydGFkZHIgKyBo
cnRkZXYtPndpbi0+c3RhcnR4ICsgaHJ0ZGV2LT53aW4tPndpZHRoLzIsIGhydGRldi0+Ynl0ZXNw
ZXJsaW5lLzIpOwoJfQogICAgICB9CiAgICAgIGVsc2UgaWYoc3ViRnJhbWUgPT0gMykgewoJZm9y
IChpID0gKCFwYXJpdHkpICsgaHJ0ZGV2LT53aW4tPmhlaWdodC8yOyBpIDwgaHJ0ZGV2LT53aW4t
PmhlaWdodDsgaSArPSAyKSB7CgkgIC8qIE1vdmUgdGhlIHkgcmVnaXN0ZXIgKGN1cnJlbnQgbGlu
ZSkgKi8KCSAgd3JpdGV3KGksIGhydGRldi0+dmlydGFkZHIgKyBIUlRfWV9MT1dfUkVHKTsKCSAg
d21iKCk7CgkgIAoJICBtZW1jcHlfZnJvbWlvKGZyYW1lZGF0YSArIChpIC0gaHJ0ZGV2LT53aW4t
PmhlaWdodC8yKSAqIGhydGRldi0+Ynl0ZXNwZXJsaW5lICsgKGhydGRldi0+d2luLT5oZWlnaHQv
MikgKiBocnRkZXYtPmJ5dGVzcGVybGluZSwgaHJ0ZGV2LT52aXJ0YWRkciArIGhydGRldi0+d2lu
LT5zdGFydHgsIGhydGRldi0+Ynl0ZXNwZXJsaW5lLzIpOwoJfQogICAgICB9CiAgfQogCgogIC8q
ZW5hYmxlIGludGVycnVwdHMgYWZ0ZXIgZ2V0dGluZyBhIGZyYW1lKi8KICB3cml0ZWIoMHgwMSwg
SFJUX0lOVFJfRU5BQkxFX1JFRyArIGhydGRldi0+dmlydGFkZHIpOwogIHdtYigpOwp9CgovKioq
CiAqIERyLiBCYWtlcidzIEkyQyByb3V0aW5lcyAKICoqKi8KCi8qIEhSVF9DT05UUk9MX09GRlNF
VCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBJMkMgYnVzIGNvbnRyb2wgcG9ydAogICAweDIwMDAgPSA4
MTkyID0gMl4xMyAqLwojZGVmaW5lIEhSVF9DT05UUk9MX09GRlNFVCAweDIwMDAKI2RlZmluZSBI
UlRfQ09OVFJPTChhZGRyKSAoYWRkciArIEhSVF9DT05UUk9MX09GRlNFVCkKCi8qIGJpdCA3IGF0
IDB4MjAwMCAodGhlIEhSVDUxMi04IGNvbnRyb2wgcmVnaXN0ZXIpIHRlbGxzIHdoZXRoZXIKICAg
dGhlIENQVSBpcyBzZW5kaW5nIGRhdGEgYWNyb3NzIHRoZSBJMkMgYnVzICovCiNkZWZpbmUgSTJD
X0JVU1koYWRkcikgKCEocmVhZGIoSFJUX0NPTlRST0woYWRkcikpICYgMHg4MCkpCgovKiAweDIw
MDEgPSA4MTkzID0gMl4xMysxICovCiNkZWZpbmUgSTJDX0NPTlRST0xfT0ZGU0VUIDB4MjAwMQoK
LyogVGhlIHdvcmQgYXQgMHgyMDAxIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaTJjIGJ1cyBvZiB0
aGUgSFJUNTEyLTgKICAgYml0IDAgPSBpMmMgY2xvY2sgc2lnbmFsICgic2NsIiBmb3Igc2hvcnQp
CiAgIGJpdCAxID0gaTJjIGRhdGEvYWRkcmVzcyBzaWduYWwgKCJzZGEiIGZvciBzaG9ydCkKICAg
Yml0IDIgPSAiZ28iIHNpZ25hbCBmb3IgaGFyZHdhcmUgdG8gZ2VuZXJhdGUgYSBjbG9jayBwdWxz
ZSwKICAgICAgICAgICBvbmNlIGRhdGEgaXMgcmVhZHkuIFRoaXMgaXMgYSB3cml0ZS1vbmx5IGJp
dC4KICAgICAgICAgICBJdCBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIGEgZmV3IG1pY3Jvc2Vjb25k
cwogICAgICAgICAgIGFmdGVyIHRoZSBzb2Z0d2FyZSBzZXRzIGl0IGhpZ2guCiAqLwojZGVmaW5l
IEkyQ19DT05UUk9MKGFkZHIpIChhZGRyICsgSTJDX0NPTlRST0xfT0ZGU0VUKQoKI2RlZmluZSBJ
MkNfUE9LRShhZGRyLGRhdGEpIHsgd3JpdGViKGRhdGEsSTJDX0NPTlRST0woYWRkcikpOyB3bWIo
KTt1ZGVsYXkoMTApOyB9CiNkZWZpbmUgSTJDX1BFRUsoYWRkcikgKHJlYWRiKEkyQ19DT05UUk9M
KGFkZHIpKSkKCiNkZWZpbmUgSTJDXzAwKGFkZHIpIHsgd3JpdGViKDAsSTJDX0NPTlRST0woYWRk
cikpOyB3bWIoKTsgdWRlbGF5KDEwKTsgfQojZGVmaW5lIEkyQ18xMChhZGRyKSB7IHdyaXRlYigx
LEkyQ19DT05UUk9MKGFkZHIpKTsgd21iKCk7IHVkZWxheSgxMCk7fQojZGVmaW5lIEkyQ18wMShh
ZGRyKSB7IHdyaXRlYigyLEkyQ19DT05UUk9MKGFkZHIpKTsgd21iKCk7IHVkZWxheSgxMCk7fQoj
ZGVmaW5lIEkyQ18xMShhZGRyKSB7IHdyaXRlYigzLEkyQ19DT05UUk9MKGFkZHIpKTsgd21iKCk7
IHVkZWxheSgxMCk7fQoKLyoqCiAqIGkyY19zdGFydCAtIHNlbmRzICdzdGFydCcgY29tbWFuZCBv
bnRvIGkyYyBidXMgdG8gYmUgcmVjaWV2ZWQgYnkgYWxsCiAqIGRldmljZXMgb24gYnVzLiAoVGhl
IEhSVDUxMi04IG9ubHkgaGFzIHRoZSBvbiBBL0Qgb24gdGhlIGkyYyBidXMuKQogKiBUaGlzIHRl
bGxzIGFsbCBkZXZpY2VzIG9uIHRoZSBpMmMgYnVzIHRvIHByZXBhcmUgZm9yIGFuIGFkZHJlc3MK
ICogcGhhc2UsIGkuZS4sIHRoYXQgb25lIG9mIHRoZW0gd2lsbCBiZSBhZGRyZXNzZWQgbmV4dC4K
ICogVGhlIHBhcmFtZXRlciBpcyB0aGUgbWFwcGVkIEkvTyBiYXNlIGFkZHJlc3Mgb2YgYSBkZXZp
Y2UuCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3N0YXJ0KHVuc2lnbmVkIGxvbmcgYWRkcikK
ewoJSTJDXzAwKGFkZHIpOwoJSTJDXzAxKGFkZHIpOwoJSTJDXzExKGFkZHIpOwoJSTJDXzEwKGFk
ZHIpOwoJSTJDXzAwKGFkZHIpOwp9CgovKioKICogaTJjX3N0b3AgLSB0ZWxscyB0aGUgc2VsZWN0
ZWQgZGV2aWNlIChBL0QpIHRoYXQgdHJhbnNtaXNzaW9uIGhhcwogKiBjb21wbGV0ZWQgYW5kIHRo
ZSBidXMgaXMgZnJlZS4KICogVGhlIHBhcmFtZXRlciBpcyB0aGUgbWFwcGVkIEkvTyBiYXNlIGFk
ZHJlc3Mgb2YgYSBkZXZpY2UuCiAqLwpzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3N0b3AodW5zaWdu
ZWQgbG9uZyBhZGRyKQp7CglJMkNfMDAoYWRkcik7CglJMkNfMTAoYWRkcik7CglJMkNfMTEoYWRk
cik7CglJMkNfMDEoYWRkcik7CglJMkNfMTEoYWRkcik7Cn0KCi8qKgogKiBpMmNfc2VuZF9ieXRl
IC0gc2VuZHMgYSBieXRlIHRvIHRoZSBBL0QuCiAqIFRoZSBwYXJhbWV0ZXIgYWRkciBpcyB0aGUg
bWFwcGVkIEkvTyBiYXNlIGFkZHJlc3Mgb2YgYSBkZXZpY2UuCiAqLwpzdGF0aWMgaW5saW5lIGlu
dCBpMmNfc2VuZF9ieXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgY2hhciBkYXRhKQp7
CgljaGFyIGJpdHBvczsKCXVuc2lnbmVkIGNoYXIgc2RhLCBzZGFfc2xjOwoJdW5zaWduZWQgbG9u
ZyB0aW1lb3V0OwoKCWZvciAoYml0cG9zID0gNzsgYml0cG9zID49IDA7IGJpdHBvcy0tKSB7CgkJ
Lyogc2VuZCBhIGJpdCB0byB0aGUgQS9EIGRldmljZTsKCQkgICBjbG9jayBtdXN0IGJlIGxvdyBh
dCB0aGlzIHRpbWUuCgkJICAgZmlyc3QsIGdldCB0aGUgbmV4dCBiaXQgZnJvbSBkYXRhIHZhbHVl
ICovCgkJc2RhID0gKGRhdGEgJiAoMSA8PCBiaXRwb3MpKSA+PiBiaXRwb3M7CgkJc2RhX3NsYyA9
IHNkYSA8PCAxOwoJCS8qIHB1dCBkYXRhIGJpdCBvbiBidXMgYW5kIHRha2UgY2xvY2sgbG93IChi
MD0wKSAqLwoJCUkyQ19QT0tFKGFkZHIsIHNkYV9zbGMpOwoJCS8qIHNlbmQgdGhlIGdvIHNpZ25h
bCB0byBpbml0aWF0ZSBjbG9jayBwdWxzZSAqLwoJCUkyQ19QT0tFKGFkZHIsIHNkYV9zbGMgKyA0
KTsKCQlpZiAoSTJDX0JVU1koYWRkcikpIHsKCQkJdGltZW91dCA9IGppZmZpZXMgKyBIWiAvIDEw
OwoJCQl3aGlsZSAoSTJDX0JVU1koYWRkcikpIHsJLyogc3BpbiAqLwoJCQkJaWYgKGppZmZpZXMg
PiB0aW1lb3V0KSB7CgkJCQkJaHJ0X3ByaW50aygiSTJDIGJ1cyB0aW1lb3V0XG4iKTsKCQkJCQln
b3RvIGZhaWx1cmU7CgkJCQl9CgkJCX0KCQl9Cgl9CglJMkNfMDEoYWRkcik7CgkvKiBsZWF2ZSB0
aGUgc2RhIGxpbmUgYXQgaGlnaCBpbXBlZGFuY2UKCSAgIChiaXQwPTAgY2xvY2ssIGJpdDE9MSBk
YXRhL2hpZ2ggaW1wZWRhbmNlKSAqLwoKCS8qIGNoZWNrIGZvciBhY2sgZnJvbSBBL0QgYWZ0ZXIg
ZWFjaCBieXRlIGhhcyBiZWVuIHNlbnQgKi8KCUkyQ18xMShhZGRyKTsKCWlmICgoSTJDX1BFRUso
YWRkcikgJiAyKSA9PSAyKSB7CgkgIC8qIGVycm9yOiBubyBBQ0sgYWZ0ZXIgRGF0YSBCeXRlIHRy
YW5zbWlzaW9uICovCgkgIGdvdG8gZmFpbHVyZTsKCX0KCUkyQ18wMShhZGRyKTsJCS8qIHJldHVy
biB0aGUgYnVzIHRvIGhpZ2ggaW1wZWRpYW5jZSAqLwoJcmV0dXJuIDA7CiAgICAgIGZhaWx1cmU6
CgkvKiBUaGlzIGlzIG9ubHkgYSBnZXN0dXJlIHRvd2FyZCBjbGVhbmluZyB1cDsKCSAgIGlmIHRo
ZXJlIGlzIGEgZmFpbHVyZSB3ZSBwcm9iYWJseSBoYXZlIGEgYnJva2VuCgkgICBkZXZpY2UuICov
CglJMkNfMDEoYWRkcik7CQkvKiByZXR1cm4gdGhlIGJ1cyB0byBoaWdoIGltcGVkYW5jZSAqLwoJ
aTJjX3N0b3AoYWRkcik7CglyZXR1cm4gLTE7Cn0KCi8qKgogKiBpMmNfaW5pdCAtIHNldCBpbml0
aWFsIHJlZ2lzdGVyIHZhbHVlcyBmb3IgdGhlIAogKiAgU0FBNzExMCBBL0QgY29udmVydGVyIChk
aWdpdGl6ZXIpLCB3aGljaCBpcyBvbiBhbgogKiAgSTJDIGJ1cy4gSWYgYW4gYXJyYXkgb2YgdmFs
dWVzIGlzIGdpdmVuLCB1c2UgaXQ7CiAqICBvdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCBzZXQg
b2YgdmFsdWVzLiBTZWUgdGhlCiAqICBjb21tZW50IG9uIHRoZSBkZWNsYXJhdGlvbiBvZiBzYWE3
MTEwX2RlZmF1bHRfaW5pdF9yZWdzCiAqICBmb3IgdGhlIGZvcm1hdCBvZiB0aGUgYXJndW1lbnQu
CiAqICBUaGUgcGFyYW1ldGVyIGFkZHIgaXMgdGhlIG1hcHBlZCBJL08gYmFzZSBhZGRyZXNzIG9m
IGEgZGV2aWNlLgogKgogKiAgTkIgdGhhdCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYXJyYXkgc2hv
dWxkIGJlIHRoZSBzaXplIG9mIHRoZSBhcnJheS4KICovCnN0YXRpYyBpbnQgaTJjX2luaXQoc3Ry
dWN0IGhydCAqaHJ0ZGV2LCB1bnNpZ25lZCBsb25nIGFkZHIsCgkJICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKmluaXRfcmVncykKewoJaW50IGksIGxhc3RyZWcsIGxlbjsKCglpZiAoIWluaXRfcmVn
cykKCQlpbml0X3JlZ3MgPSBzYWE3MTEwX2RlZmF1bHRfaW5pdF9yZWdzOwoKCS8qIFRoZSBsZW5n
dGggb2YgdGhlIGFycmF5IGlzIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgYnl0ZSAqLwoJbGVuID0g
aW5pdF9yZWdzWzBdOwoJaW5pdF9yZWdzKys7CgkgIAoJaTJjX3N0YXJ0KGFkZHIpOwoJLyogVGVs
bCB0aGUgZGlnaXRpemVyIHRoYXQgaXQgaGFzIGJlZW4gc2VsZWN0ZWQKCSAgIGZvciBkYXRhIHRy
YW5zbWlzc2lvbi4gKi8KCWlmIChpMmNfc2VuZF9ieXRlKGFkZHIsIEhSVF9BRF9ERVZJQ0VfSUQp
KQoJCXJldHVybiAtMTsKCgkvKiBTZXQgdGhlIHNlbGVjdGVkIGRldmljZSdzIGludGVybmFsIGFk
ZHJlc3MgcmVnaXN0ZXIKCSAgIHBvaW50ZXIgdG8gemVyby4gIEVhY2ggc3Vic2VxdWVudCBkYXRh
IHdyaXRlIHdpbGwKCSAgIGF1dG9pbmNyZW1lbnQgdGhlIGRldmljZSdzIGFkZHJlc3MgcmVnaXN0
ZXIgcG9pbnRlci4gKi8KCWlmIChpMmNfc2VuZF9ieXRlKGFkZHIsIDApKQoJCXJldHVybiAtMTsK
CWxhc3RyZWcgPSAwOwoKCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgewoJCWlmIChpbml0
X3JlZ3NbaV0gPiBIUlRfTlVNUkVHUykgewoJCQlocnRfcHJpbnRrKCJSZWdpc3RlciBudW1iZXIg
MHgleCBvdXQgb2YgcmFuZ2UhXG4iLAoJCQkJICAgaW5pdF9yZWdzW2ldKTsKCQkJcmV0dXJuIC0x
OwoJCX0KCQlpZiAoaW5pdF9yZWdzW2ldICE9IGxhc3RyZWcpIHsKCQkJLyogdGhlcmUgaXMgYSBn
YXAgaW4gdGhlIHNlcXVlbmNlICovCgkJCWkyY19zdG9wKGFkZHIpOwoJCQlpMmNfc3RhcnQoYWRk
cik7CgkJCS8qIHJlc2VuZCBkZXZpY2UgYWRkcmVzcyBieXRlICovCgkJCWlmIChpMmNfc2VuZF9i
eXRlKGFkZHIsIEhSVF9BRF9ERVZJQ0VfSUQpKQoJCQkJcmV0dXJuIC0xOwoJCQlsYXN0cmVnID0g
aW5pdF9yZWdzW2ldOwoKCQkJLyogc2VuZCBuZXcgcmVnaXN0ZXIgYWRkcmVzcyBieXRlICovCgkJ
CWlmIChpMmNfc2VuZF9ieXRlKGFkZHIsIGluaXRfcmVnc1tpXSkpCgkJCQlyZXR1cm4gLTE7CgkJ
fQoJCWxhc3RyZWcrKzsKCQkvKiBzZW5kIHJlZ2lzdGVyIHZhbHVlICovCgkJaWYgKGkyY19zZW5k
X2J5dGUoYWRkciwgaW5pdF9yZWdzW2kgKyAxXSkpCgkJCXJldHVybiAtMTsKCgkJLyogS2VlcCB0
cmFjayBvZiB0aGUgdmFsdWVzIGluIHRoZSByZWdpc3RlcnMgKi8KCQlocnRkZXYtPnJlZ3ZhbHNb
aW5pdF9yZWdzW2ldXSA9IGluaXRfcmVnc1tpICsgMV07Cgl9CglpMmNfc3RvcChhZGRyKTsKCXJl
dHVybiAwOwp9CgovKioKICogaTJjX3NldF9yZWcgLSBzZXQgYW4gSTJDIHJlZ2lzdGVyLCByZWcs
IHRvIHZhbHVlIHZhbAogKi8KaW50IGkyY19zZXRfcmVnKHN0cnVjdCBocnQgKmhydGRldiwgaW50
IHJlZywgdW5zaWduZWQgY2hhciB2YWwpCnsKCXVuc2lnbmVkIGxvbmcgYWRkciA9IGhydGRldi0+
dmlydGFkZHI7CgoJaTJjX3N0YXJ0KGFkZHIpOwoJaTJjX3NlbmRfYnl0ZShhZGRyLCBIUlRfQURf
REVWSUNFX0lEKTsKCWkyY19zZW5kX2J5dGUoYWRkciwgcmVnKTsKCWkyY19zZW5kX2J5dGUoYWRk
ciwgdmFsKTsKCWkyY19zdG9wKGFkZHIpOwoKCWhydGRldi0+cmVndmFsc1tyZWddID0gdmFsOwoK
CXJldHVybiB2YWw7Cn0KCgojaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04o
MiwgNSwgMCkKRVhQT1JUX05PX1NZTUJPTFM7CiNlbmRpZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHJvai9ocnQuaAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2NAAwMDAwNzY0ADAwMDAwMDA2NzYx
ADEwMDY3MDcxNjEzADAxMjYzMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAB1c3RhciAgAGJhbmF2YXIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYmFuYXZhcgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKgogKiBGaWxlIE5hbWUgOiBocnQu
aAogKiAKICogVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBIaWdoIFJlc29sdXRpb24g
VGVjaG5vbG9naWVzCiAqIFBpeGVsc21hcnQgNTEyLTggZnJhbWUgZ3JhYmJlci4KCiAqIFRoaXMg
ZmlsZSBjb250YWlucyBzdHJ1Y3R1cmVzLCBjb25zdGFudHMsIGFuZCBpb2N0bCBudW1iZXJzIGlu
CiAqIHRoZSBkcml2ZXIgdGhhdCBhIHVzZXIgcHJvZ3JhbSBtaWdodCB3aXNoIHRvIHVzZS4KCiAq
ICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLCBGbG9yaWRhIFN0YXRlIFVuaXZlcnNpdHkKICoK
ICogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5IGl0IHVuZGVyIAogKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkICBieSB0aGUgRnJlZSBTb2Z0LSAKICogd2FyZSBGb3VuZGF0aW9uLCBW
ZXJzaW9uIDIuICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlCiAqIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIIE9VVCBBTlkgV0FSUkFOVFk7ICB3aXRob3V0
IGV2ZW4gdGhlCiAqIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciAgbW9yZSBkZXRhaWxzLiBZb3Ugc2hvdWxkIGhhdmUKICogcmVjZWl2ZWQg
IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZGlzdHJpYnV0ZWQgd2l0
aCB0aGlzCiAqIHNvZnR3YXJlOyBzZWUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUg
MzMwLCAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAqLwoKLyoqCiAqIHN0cnVjdCBzdWJ3
aW5kb3cgLSBkZXNjcmliZXMgYSByZWdpb24tb2YtaW50ZXJlc3QsIGkuZS4sCiAqICBhIHBhcnQg
b2YgdGhlIGZyYW1lCiAqLwpzdHJ1Y3Qgc3Vid2luZG93IHsKCWludCB3aWR0aCwgaGVpZ2h0OwoJ
aW50IHN0YXJ0eCwgc3RhcnR5Owp9OwoKLyoqCiAqIHN0cnVjdCBpMmNfcmVndmFsIC0gdGhpcyBp
cyBmb3IgdGhlIEkyQyByZWdpc3RlciBpb2N0bCAKICovCnN0cnVjdCBpMmNfcmVndmFsIHsKCWlu
dCByZWc7IC8qIFJlZ2lzdGVyIG51bWJlciAqLwoJdW5zaWduZWQgY2hhciB2YWw7IC8qIFZhbHVl
IHRvIHNldCBpdCB0byAqLwp9OwoKLyoqCiAqIENhcmQgc3BlY2lmaWMgY29uc3RhbnRzCiAqLwoj
ZGVmaW5lIEhSVF9WRU5ET1JfSUQgICAgICAgICAweDAwMDQKI2RlZmluZSBIUlRfREVWSUNFX0lE
X0dSQVkgICAgMHgwNDA0CiNkZWZpbmUgSFJUX0RFVklDRV9JRF9DT0xPUiAgIDB4MDQwOAoKI2Rl
ZmluZSBIUlRfQ09OVFJPTF9SRUcgICAgICAgMHgyMDAwCiNkZWZpbmUgSFJUX1lfTE9XX1JFRyAg
ICAgICAgIDB4MjAwMgojZGVmaW5lIEhSVF9ZX0hJR0hfUkVHICAgICAgICAweDIwMDMKI2RlZmlu
ZSBIUlRfSU5UUl9FTkFCTEVfUkVHICAgMHgyMDA1IC8qIEludGVycnVwdCAwPWRpc2FibGUgMT1l
bmFibGUgKGJpdCAwKSovCiNkZWZpbmUgSFJUX0lOVFJfUEVORElOR19SRUcgIDB4MjAwMCAvKiAw
PU5vIFBlbmRpbmcgSW50ZXJydXB0czsgMT1JbnRlcnJ1cHQgcGVuZGluZyAoTFMgYml0IDMpKi8K
LyogVGhlIHVuaXF1ZSBJMkMgYnVzIGFkZHJlc3Mgb2YgdGhlIFNBQTcxMTAgKEEvRCkgZGV2aWNl
ICovCiNkZWZpbmUgSFJUX0FEX0RFVklDRV9JRCAoMTI4KzE2KzgrNCkKCi8qIEhSVCBJTlRFUlJV
UFQgUkVTT1VSQ0VTKi8KI2RlZmluZSBIUlRfSU5URVJSVVBUX0VOQUJMRV9DTUQgICAgMHgwMQoj
ZGVmaW5lIEhSVF9JTlRFUlJVUFRfRElTQUJMRV9DTUQgICAweDAwCgovKiBOVFNDIDgtYml0IGdy
ZXlzY2FsZSAKI2RlZmluZSBIUlRfV0lEVEggICAgICAgICAgICAgNTEyCiNkZWZpbmUgSFJUX0hF
SUdIVCAgICAgICAgICAgIDQ4MAojZGVmaW5lIEhSVF9CWVRFU19QRVJfUElYRUwgICAxCiNkZWZp
bmUgSFJUX0JZVEVTX1BFUl9MSU5FICAgIChIUlRfV0lEVEggKiBIUlRfQllURVNfUEVSX1BJWEVM
KQojZGVmaW5lIEhSVF9GUkFNRVNJWkUgICAgICAgICAoSFJUX1dJRFRIICogSFJUX0hFSUdIVCAq
IEhSVF9CWVRFU19QRVJfUElYRUwpKi8KCi8qIE51bWJlciBvZiBieXRlcyBvZiB0aGUgZGV2aWNl
J3MgbWVtb3J5IHRoYXQgd2UgaW9yZW1hcCgpICovCiNkZWZpbmUgQllURVNfTkVFREVEICAgICAg
ICAgIDB4NDAwMAoKLyoKICogVGhlIGNvbW1hbmRzIGZvciBmcmVlemUsIGxpdmUsIGV0Yy4KICov
CiNkZWZpbmUgSFJUX0ZJRUxEX01BU0sgICAgICAgIDB4MDEKI2RlZmluZSBIUlRfTElWRV9DTUQg
ICAgICAgICAgMHg5MQojZGVmaW5lIEhSVF9GUkVFWkVfSU1NX0NNRCAgICAweDVCCiNkZWZpbmUg
SFJUX0ZSRUVaRV9ORVhUX0NNRCAgIDB4OTkKCi8qIEEvRCByZWdpc3RlcnMgKi8KI2RlZmluZSBI
UlRfQlJJR0hUTkVTU19SRUcgICAgMHgxOQojZGVmaW5lIEhSVF9DT05UUkFTVF9SRUcgICAgICAw
eDEzCgojZGVmaW5lIEhSVF9WSURfVFlQRSAgICAgICAgIChWSURfVFlQRV9DQVBUVVJFIHwgVklE
X1RZUEVfTU9OT0NIUk9NRSkKCi8qIE1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgZm9yIHN0cmVh
bWluZyAqLwojZGVmaW5lIE1BWF9DQVBUVVJFX0JVRkZFUlMgIDE2CgovKiBQcml2YXRlIGlvY3Rs
J3MgKi8KI2RlZmluZSBJT0NfSFJUX1NFVF9JMkNSRUcgICBfSU9XKCd2JywgQkFTRV9WSURJT0NQ
UklWQVRFICsgMzAsIHN0cnVjdCBpMmNfcmVndmFsKQojZGVmaW5lIElPQ19IUlRfR0VUX0kyQ1JF
RyAgIF9JT1IoJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUgKyAzMSwgc3RydWN0IGkyY19yZWd2YWwp
CiNkZWZpbmUgSU9DX0hSVF9TRVRfV0lEVEggICAgX0lPVygndicsIEJBU0VfVklESU9DUFJJVkFU
RSArIDMyLCBpbnQpCiNkZWZpbmUgSU9DX0hSVF9TRVRfSEVJR0hUICAgX0lPVygndicsIEJBU0Vf
VklESU9DUFJJVkFURSArIDMzLCBpbnQpCiNkZWZpbmUgSU9DX0hSVF9TRVRfU1RBUlRYICAgX0lP
VygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDM0LCBpbnQpCiNkZWZpbmUgSU9DX0hSVF9TRVRf
U1RBUlRZICAgX0lPVygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDM1LCBpbnQpCiNkZWZpbmUg
SU9DX0hSVF9TRVRfUk9JICAgICAgX0lPVygndicsIEJBU0VfVklESU9DUFJJVkFURSArIDM2LCBz
dHJ1Y3Qgc3Vid2luZG93KQojZGVmaW5lIElPQ19IUlRfR0VUX1JPSSAgICAgIF9JT1IoJ3YnLCBC
QVNFX1ZJRElPQ1BSSVZBVEUgKyAzNywgc3RydWN0IHN1YndpbmRvdykKI2RlZmluZSBJT0NfSFJU
X1NFVF9JMkNSRUdTICBfSU9XKCd2JywgQkFTRV9WSURJT0NQUklWQVRFICsgMzgsIGNoYXIgKikK
I2RlZmluZSBJT0NfSFJUX1NFVF9TVUJGUkFNRSBfSU8oJ3YnLCBCQVNFX1ZJRElPQ1BSSVZBVEUg
KyAzOSkKI2RlZmluZSBJT0NfSFJUX1NFVF9GVUxMRlJBTUUgX0lPKCd2JywgQkFTRV9WSURJT0NQ
UklWQVRFICsgNDApCgAAAAAAAAAAAAAAAAAAAHByb2ovbG9hZAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAwMTAwNzU1ADAwMDA3NjQAMDAwMDc2NAAwMDAwMDAwMTAzNwAxMDA2NzA3
MTYxMwAwMTI1MTYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
dXN0YXIgIABiYW5hdmFyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJhbmF2YXIAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvYmluL3NoCm1vZHVsZT0iaHJ0IgpkZXZpY2U9
ImhydG1lbSIKbW9kZT0iNjY0IgoKIyBHcm91cDogc2luY2UgZGlzdHJpYnV0aW9ucyBkbyBpdCBk
aWZmZXJlbnRseSwgbG9vayBmb3Igd2hlZWwgb3IgdXNlIHN0YWZmCmlmIGdyZXAgJ15zdGFmZjon
IC9ldGMvZ3JvdXAgPiAvZGV2L251bGw7IHRoZW4KICAgIGdyb3VwPSJzdGFmZiIKZWxzZQogICAg
Z3JvdXA9InJvb3QiCmZpCgojIGludm9rZSBpbnNtb2Qgd2l0aCBhbGwgYXJndW1lbnRzIHdlIGdv
dAojIGFuZCB1c2UgYSBwYXRobmFtZSwgYXMgbmV3ZXIgbW9kdXRpbHMgZG9uJ3QgbG9vayBpbiAu
IGJ5IGRlZmF1bHQKL3NiaW4vaW5zbW9kIC1mIC4vJG1vZHVsZS5vICQqIHx8IGV4aXQgMQoKbWFq
b3I9YGNhdCAvcHJvYy9kZXZpY2VzIHwgYXdrICJcXCQyPT1cIiRkZXZpY2VcIiB7cHJpbnQgXFwk
MX0iYAoKcm0gLWYgL2Rldi8ke2RldmljZX0KbWtub2QgL2Rldi8ke2RldmljZX0gYyAkbWFqb3Ig
MApjaGdycCAkZ3JvdXAgL2Rldi8ke2RldmljZX0KY2htb2QgJG1vZGUgIC9kZXYvJHtkZXZpY2V9
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHByb2ovdW5sb2FkAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAwMTAwNzU1ADAwMDA3NjQAMDAwMDc2NAAwMDAwMDAwMDI0MwAxMDA2NzA3MTYx
MwAwMTMwNTcAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0
YXIgIABiYW5hdmFyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJhbmF2YXIAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyEvYmluL3NoCm1vZHVsZT0iaHJ0IgpkZXZpY2U9Imhy
dG1lbSIKCiMgaW52b2tlIHJtbW9kIHdpdGggYWxsIGFyZ3VtZW50cyB3ZSBnb3QKL3NiaW4vcm1t
b2QgJG1vZHVsZSAkKiB8fCBleGl0IDEKCiMgUmVtb3ZlIHN0YWxlIG5vZGVzCgpybSAtZiAvZGV2
LyR7ZGV2aWNlfQoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwcm9qL1JFQURNRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAMDEwMDY2NAAwMDAwNzY0ADAwMDA3NjQAMDAwMDAwMDE2MTcAMTAwNjcwNzIwMDcA
MDEyNTM1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy
ICAAYmFuYXZhcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiYW5hdmFyAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qKiBQaXhlbFNtYXJ0IEZyYW1lIEdyYWJiZXIgRHJpdmVy
IGZvciBMaW51eCAqLwpUaGlzIERyaXZlciBpcyB3cml0dGVuIGJ5IEhlbWFudCBCYW5hdmFyIGFu
ZCBLYXJ0aGlrIFBhcnNoYS4gVGhlIGRyaXZlciBoYXMgdGhlCmZvbGxvd2luZyBmZWF0dXJlczoK
MS4gU3VwcG9ydHMgNTEyIFggNDgwIEdyYXkgQ2FyZAoyLiBTdXBwb3J0cyA2NDAgWCA0ODAgQ29s
b3IgQ2FyZAozLiBTdXBwb3J0cyBQQ0kgYW5kIElTQSBjYXJkcyAoTG93IGFuZCBIaWdoIE1lbW9y
eSBBZGRyZXNzZXMpCjQuIFN1cHBvcnRzIEludGVycnVwdHMgaWYgcHJlc2VudCBvdGhlcndpc2Ug
dXNlcyBrZXJuZWwgdGltZXIKNS4gQWxsb3dzIElvY3RsIHRvIGRvIHN1YmZyYW1pbmcgdG8gb3B0
aW1pemUgcGVyZm9ybWFuY2UgYnkgZ3JhYmJpbmcgMS80dGggZnJhbWUgYXQgYSB0aW1lIGluc3Rl
YWQgb2YgdGhlIGZ1bGwgZnJhbWUuCjYuIEkyQyBwcm9ibGVtIHNvbHZlZCB3aXRoIGFkZGluZyBh
IG1pY3JvZGVsYXkgYWZ0ZXIgdGhlIHdyaXRlcy4KNy4gU3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMg
YXQgdGhlIHNhbWUgdGltZS4KClByb2JsZW1zOgoxLiBDb3VsZCBtbWFwIGJ1dCB3aXRoIHByb2Js
ZW1zIHdoaWxlIHdyaXRlIHRocm91Z2hzLgoyLiBWNEwgYW5kIFY0bDIgc3VwcG9ydCBpcyB1bmRl
cndheS4KMy4gUmVhZHMgZnJvbSB0aGUgZnJhbWUgYnVmZmVyIHNob3VsZCBiZSBvcHRpbWl6ZWQg
Zm9yIHRoZSBjb2xvciBjYXJkIHRvIHJlYWQgZnJvbSBub24tY29uc2VjdXRpdmUgbG9jYXRpb25z
IGVmZmljaWVudGx5LgoKClRoZSBkcml2ZXIgc291cmNlIGNvZGUgY2FuIGJlIGRpc3RyaWJ1dGVk
IHVuZGVyIEdQTC4KCkFja25vd2xlZGdlbWVudHM6CkRyLiBCYWtlciwgQnJldHQgVGhvbXNvbiBh
bmQgQXJ0aGkgR29rYXJuLgoKCgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAA=

--=_3b1f808b7ef211d196e734--

