RadioTap Archive mirror
 help / color / mirror / Atom feed
From: radiotap-owner-sUITvd46vNxg9hUCZPvPmw@public.gmane.org
To: radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org
Subject: BOUNCE radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org:    Message too long (>40000 chars)
Date: Thu, 26 Nov 2009 22:38:07 -0600	[thread overview]
Message-ID: <20091127043806.GQ6179@ojctech.com> (raw)

Return-Path: <owner-radiotap-S783fYmB3Ccdnm+yROfE0A@public.gmane.org>
Received: from sipsolutions.net (xc.sipsolutions.net [IPv6:2a02:790:1:6::1:2])
	(using TLSv1 with cipher AES256-SHA (256/256 bits))
	(Client did not present a certificate)
	by mail.netbsd.org (Postfix) with ESMTPS id 56EEB63B116
	for <radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org>; Thu, 26 Nov 2009 17:56:08 +0000 (UTC)
Received: by sipsolutions.net with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
	(Exim 4.69)
	(envelope-from <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>)
	id 1NDiZP-0006qS-SK; Thu, 26 Nov 2009 18:56:05 +0100
Subject: [RFA] namespaces and vendor extensions
From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
To: Radiotap <radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org>
Cc: Gerald Combs <gerald-IZ8446WsY0/dtAWm4Da02A@public.gmane.org>
Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-BoTShiWGOhneCqohXLBK"
Date: Thu, 26 Nov 2009 18:55:52 +0100
Message-ID: <1259258152.32372.90.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
Mime-Version: 1.0
X-Mailer: Evolution 2.28.1 


--=-BoTShiWGOhneCqohXLBK
Content-Type: multipart/mixed; boundary="=-Itg9672XATyA12h1SH3I"


--=-Itg9672XATyA12h1SH3I
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

[Gerald: I'm copying you directly because I have a question about this
patch, please see at the end of the email]

This is a request for adoption of the previously discussed namespace
proposal from David.

Namespaces in radiotap serve two different use cases:
 1) vendor extensions and
 2) multiple uses of a single radiotap field.

Vendor extensions allows data from any number of different vendors to be
present in a single radiotap header. Each vendor namespace contains
present bits just like regular radiotap, but these bits are under the
control of the vendor. To allow compliant parsers to read past vendor
extensions, they also contain the data length.

Resetting the radiotap namespace when extending the present bitmap
serves to allow a radiotap field be specified multiple times. An example
for that would be specifying multi-rate retries during injection or for
TX status.

In the current radiotap header, the IEEE80211_RADIOTAP_EXT bit (bit 31)
is reserved in any it_present bitmap and indicates that the bitmap
continues. This shall be true for bit 29 (reset radiotap namespace) and
bit 30 (vendor namespace) as well.

This proposal differs from David's original one by using different
alignment and size for the vendor data specification, I have opted to
use 16 bits for the vendor data length since some people want to put a
lot of data like raw TX/RX hardware descriptors into vendor fields. I
have also clarified the data length variable to specify the fact that
when switching away from a vendor namespace to another vendor namespace,
the vendor namespace data is not part of the vendor namespace data
length ("If a radiotap header changes from a vendor namespace to another
vendor namespace, the 6-byte data describing the new vendor namespace
shall not be accounted for in skip_length.") The text describing that
the two fields are mutually exclusive is also new.

Correct, existing radiotap implementations are compatible with this
proposal because they will stop parsing the radiotap header at bit 29/30
since even though they do not know that these bits are reserved in all
namespaces and it_present words they do know that they cannot understand
these bits, regardless of which it_present they encounter them in,
because they were not previously defined. [It seems to me that the
existing wireshark implementation is not correct -- it doesn't properly
skip over extended present bitmap words.]

Note that before this proposal the bits 63, 95, (31+n*32) were reserved
due to overlaying the extension bit, this proposal also reserves the
bits 29+n*32 and 30+n*32 in all namespaces due to overlapping with the
namespace changes bits.

The normative text of this proposal follows (minus formatting):

--- begin normative text ---
Vendor Namespace
Bit Number
        not applicable, bit 30 in every it_present word=20
Structure
        u8 OUI[3], u8 sub_namespace, __le16 skip_length=20
Required Alignment
        2=20

This field is reserved in all namespaces and every it_present word, the
standard radiotap namespace as well as all vendor namespaces. It is
mutually exclusive with the "Reset to Radiotap Namespace" field, setting
both is undefined.

The Vendor Namespace Field contains three sub-fields. The first
sub-field is 3 bytes long. It contains the vendor's IEEE 802
Organizationally Unique Identifier (OUI). The fourth byte is a
vendor-specific "namespace selector."=20

Before it resumes interpretation of presence bits in the following
32-bit presence words, if any, the interpreter shall reset its
presence-bitmap index to 0, and change to the vendor namespace specified
by the OUI and selector.=20

The fifth and sixth bytes, skip_length, comprise a 16 bit little-endian
value that tells the interpreter how many bytes of data after the end of
the Vendor Namespace Field can only be interpreted according to the
vendor namespace. If a radiotap header changes to a namespace that the
interpreter does not understand, and back, the interpreter may resume
interpretation in the new namespace by skipping skip_length data bytes
after the end of the Vendor Namespace Field. If a radiotap header
changes from a vendor namespace to another vendor namespace, the 6-byte
data describing the new vendor namespace shall not be accounted for in
skip_length.

Reset to Radiotap Namespace
Bit Number
        not applicable, bit 29 in every it_present word=20
Structure
        no contents=20
Required Alignment
        N/A

This field is reserved in all namespaces and every it_present word, the
standard radiotap namespace as well as all vendor namespaces. It is
mutually exclusive with the "Vendor Namespace" field, setting both is
undefined.

Upon interpreting this field, the interpreter shall reset its
presence-bitmap index to 0 and its namespace to the default radiotap
namespace, and change to the default radiotap namespace, before it
interprets subsequent presence-bitmap words.=20


--- end normative text ---

I have implemented this proposal in Andy Green's and my stand-alone
radiotap parser library available on
http://git.sipsolutions.net/radiotap.git/
(git clone http://git.sipsolutions.net/radiotap.git/ to get it, the web
interface can also generate tarballs).

I have additionally implemented this proposal in wireshark, without any
vendor extension parsing, by making wireshark use a copy of the above
library.

Gerald: Here's where I have a question -- is that acceptable to you? The
files are licensed properly, but it does require pulling the entire
radiotap header into memory with ep_tvb_memdup(). Are you ok with that?
Everything else would be rather complicated, requiring a complete
re-implementation of the parser which doesn't seem all that helpful.

johannes


--=-Itg9672XATyA12h1SH3I
Content-Disposition: attachment; filename="radiotap-lib.patch"
Content-Type: text/x-patch; name="radiotap-lib.patch"; charset="UTF-8"
Content-Transfer-Encoding: base64

LS0tDQogZXBhbi9kaXNzZWN0b3JzL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgIHwgICAgMiAN
CiBlcGFuL2Rpc3NlY3RvcnMvTWFrZWZpbGUuY29tbW9uICAgICAgICAgICAgfCAgICAzIA0KIGVw
YW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5ubWFrZSAgICAgICAgICAgICB8ICAgIDIgDQogZXBhbi9k
aXNzZWN0b3JzL3BhY2tldC1yYWRpb3RhcC1kZWZzLmggICAgIHwgIDI0NSArKysrKysNCiBlcGFu
L2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuYyAgICAgfCAgMzc4ICsrKysrKysrKysN
CiBlcGFuL2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuaCAgICAgfCAgIDk2ICsrDQog
ZXBhbi9kaXNzZWN0b3JzL3BhY2tldC1yYWRpb3RhcC1wbGF0Zm9ybS5oIHwgICAgOSANCiBlcGFu
L2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLmMgICAgICAgICAgfCAxMDY5ICsrKysrKysrKysr
KystLS0tLS0tLS0tLS0tLS0tDQogOCBmaWxlcyBjaGFuZ2VkLCAxMjI0IGluc2VydGlvbnMoKyks
IDU4MCBkZWxldGlvbnMoLSkNCg0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAw
MDAwMDAwMCArMDAwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAt
ZGVmcy5oCTIwMDktMTEtMjYgMTg6NTM6NTMuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDI0
NSBAQA0KKy8qLQ0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCBEYXZpZCBZb3VuZy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCisg
KiBhcmUgbWV0Og0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gVGhlIG5hbWUgb2Yg
RGF2aWQgWW91bmcgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQ0KKyAqICAg
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3INCisgKiAgICB3cml0dGVuIHBlcm1pc3Npb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIERBVklEIFlPVU5HIGBgQVMgSVMnJyBBTkQgQU5ZDQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBDQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgREFWSUQNCisgKiBZT1VORyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLA0KKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRA0KKyAqIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwNCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORA0K
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQ0KKyAqIE9GIFNVQ0ggREFN
QUdFLg0KKyAqLw0KKw0KKy8qDQorICogTW9kaWZpY2F0aW9ucyB0byBmaXQgaW50byB0aGUgbGlu
dXggSUVFRSA4MDIuMTEgc3RhY2ssDQorICogTWlrZSBLZXJzaGF3IChkcmFnb3JuQGtpc21ldHdp
cmVsZXNzLm5ldCkNCisgKi8NCisNCisjaWZuZGVmIElFRUU4MDIxMVJBRElPVEFQX0gNCisjZGVm
aW5lIElFRUU4MDIxMVJBRElPVEFQX0gNCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorDQorLyog
QmFzZSB2ZXJzaW9uIG9mIHRoZSByYWRpb3RhcCBwYWNrZXQgaGVhZGVyIGRhdGEgKi8NCisjZGVm
aW5lIFBLVEhEUl9SQURJT1RBUF9WRVJTSU9OCQkwDQorDQorLyogQSBnZW5lcmljIHJhZGlvIGNh
cHR1cmUgZm9ybWF0IGlzIGRlc2lyYWJsZS4gVGhlcmUgaXMgb25lIGZvcg0KKyAqIExpbnV4LCBi
dXQgaXQgaXMgbmVpdGhlciByaWdpZGx5IGRlZmluZWQgKHRoZXJlIHdlcmUgbm90IGV2ZW4NCisg
KiB1bml0cyBnaXZlbiBmb3Igc29tZSBmaWVsZHMpIG5vciBlYXNpbHkgZXh0ZW5zaWJsZS4NCisg
Kg0KKyAqIEkgc3VnZ2VzdCB0aGUgZm9sbG93aW5nIGV4dGVuc2libGUgcmFkaW8gY2FwdHVyZSBm
b3JtYXQuIEl0IGlzDQorICogYmFzZWQgb24gYSBiaXRtYXAgaW5kaWNhdGluZyB3aGljaCBmaWVs
ZHMgYXJlIHByZXNlbnQuDQorICoNCisgKiBJIGFtIHRyeWluZyB0byBkZXNjcmliZSBwcmVjaXNl
bHkgd2hhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcg0KKyAqIHNob3VsZCBleHBlY3QgaW4g
dGhlIGZvbGxvd2luZywgYW5kIGZvciB0aGF0IHJlYXNvbiBJIHRlbGwgdGhlDQorICogdW5pdHMg
YW5kIG9yaWdpbiBvZiBlYWNoIG1lYXN1cmVtZW50ICh3aGVyZSBpdCBhcHBsaWVzKSwgb3IgZWxz
ZSBJDQorICogdXNlIHN1ZmZpY2llbnRseSB3ZWFzZWxseSBsYW5ndWFnZSAoImlzIGEgbW9ub3Rv
bmljYWxseSBub25kZWNyZWFzaW5nDQorICogZnVuY3Rpb24gb2YuLi4iKSB0aGF0IEkgY2Fubm90
IHNldCBmYWxzZSBleHBlY3RhdGlvbnMgZm9yIGxhd3llcmx5DQorICogcmVhZGVycy4NCisgKi8N
CisNCisvKiBUaGUgcmFkaW8gY2FwdHVyZSBoZWFkZXIgcHJlY2VkZXMgdGhlIDgwMi4xMSBoZWFk
ZXIuDQorICogQWxsIGRhdGEgaW4gdGhlIGhlYWRlciBpcyBsaXR0bGUgZW5kaWFuIG9uIGFsbCBw
bGF0Zm9ybXMuDQorICovDQorc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgew0KKwl1
aW50OF90IGl0X3ZlcnNpb247CS8qIFZlcnNpb24gMC4gT25seSBpbmNyZWFzZXMNCisJCQkJICog
Zm9yIGRyYXN0aWMgY2hhbmdlcywNCisJCQkJICogaW50cm9kdWN0aW9uIG9mIGNvbXBhdGlibGUN
CisJCQkJICogbmV3IGZpZWxkcyBkb2VzIG5vdCBjb3VudC4NCisJCQkJICovDQorCXVpbnQ4X3Qg
aXRfcGFkOw0KKwl1aW50MTZfdCBpdF9sZW47CS8qIGxlbmd0aCBvZiB0aGUgd2hvbGUNCisJCQkJ
ICogaGVhZGVyIGluIGJ5dGVzLCBpbmNsdWRpbmcNCisJCQkJICogaXRfdmVyc2lvbiwgaXRfcGFk
LA0KKwkJCQkgKiBpdF9sZW4sIGFuZCBkYXRhIGZpZWxkcy4NCisJCQkJICovDQorCXVpbnQzMl90
IGl0X3ByZXNlbnQ7CS8qIEEgYml0bWFwIHRlbGxpbmcgd2hpY2gNCisJCQkJICogZmllbGRzIGFy
ZSBwcmVzZW50LiBTZXQgYml0IDMxDQorCQkJCSAqICgweDgwMDAwMDAwKSB0byBleHRlbmQgdGhl
DQorCQkJCSAqIGJpdG1hcCBieSBhbm90aGVyIDMyIGJpdHMuDQorCQkJCSAqIEFkZGl0aW9uYWwg
ZXh0ZW5zaW9ucyBhcmUgbWFkZQ0KKwkJCQkgKiBieSBzZXR0aW5nIGJpdCAzMS4NCisJCQkJICov
DQorfTsNCisNCisvKiBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSB0
eXBlICAgIFVuaXRzDQorICogLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t
LS0tLS0tLSAgICAtLS0tLQ0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgICAgICAg
ICAgICAgIF9fbGU2NCAgICAgICBtaWNyb3NlY29uZHMNCisgKg0KKyAqICAgICAgVmFsdWUgaW4g
bWljcm9zZWNvbmRzIG9mIHRoZSBNQUMncyA2NC1iaXQgODAyLjExIFRpbWUNCisgKiAgICAgIFN5
bmNocm9uaXphdGlvbiBGdW5jdGlvbiB0aW1lciB3aGVuIHRoZSBmaXJzdCBiaXQgb2YgdGhlDQor
ICogICAgICBNUERVIGFycml2ZWQgYXQgdGhlIE1BQy4gRm9yIHJlY2VpdmVkIGZyYW1lcywgb25s
eS4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMICAgICAgICAgICAyIHggdWlu
dDE2X3QgICBNSHosIGJpdG1hcA0KKyAqDQorICogICAgICBUeC9SeCBmcmVxdWVuY3kgaW4gTUh6
LCBmb2xsb3dlZCBieSBmbGFncyAoc2VlIGJlbG93KS4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJ
T1RBUF9GSFNTICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICBzZWUgYmVsb3cNCisgKg0KKyAq
ICAgICAgRm9yIGZyZXF1ZW5jeS1ob3BwaW5nIHJhZGlvcywgdGhlIGhvcCBzZXQgKGZpcnN0IGJ5
dGUpDQorICogICAgICBhbmQgcGF0dGVybiAoc2Vjb25kIGJ5dGUpLg0KKyAqDQorICogSUVFRTgw
MjExX1JBRElPVEFQX1JBVEUgICAgICAgICAgICAgIHU4ICAgICAgICAgICA1MDBrYi9zDQorICoN
CisgKiAgICAgIFR4L1J4IGRhdGEgcmF0ZQ0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RC
TV9BTlRTSUdOQUwgICAgIHM4ICAgICAgICAgICBkZWNpYmVscyBmcm9tDQorICogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgbWlsbGl3YXR0IChk
Qm0pDQorICoNCisgKiAgICAgIFJGIHNpZ25hbCBwb3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJl
bCBkaWZmZXJlbmNlIGZyb20NCisgKiAgICAgIG9uZSBtaWxsaXdhdHQuDQorICoNCisgKiBJRUVF
ODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFICAgICAgczggICAgICAgICAgIGRlY2liZWxzIGZy
b20NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9uZSBtaWxsaXdhdHQgKGRCbSkNCisgKg0KKyAqICAgICAgUkYgbm9pc2UgcG93ZXIgYXQgdGhl
IGFudGVubmEsIGRlY2liZWwgZGlmZmVyZW5jZSBmcm9tIG9uZQ0KKyAqICAgICAgbWlsbGl3YXR0
Lg0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCAgICAgIHU4ICAgICAg
ICAgICBkZWNpYmVsIChkQikNCisgKg0KKyAqICAgICAgUkYgc2lnbmFsIHBvd2VyIGF0IHRoZSBh
bnRlbm5hLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbg0KKyAqICAgICAgYXJiaXRyYXJ5LCBm
aXhlZCByZWZlcmVuY2UuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0Ug
ICAgICAgdTggICAgICAgICAgIGRlY2liZWwgKGRCKQ0KKyAqDQorICogICAgICBSRiBub2lzZSBw
b3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4NCisgKiAgICAg
IGFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlIHBvaW50Lg0KKyAqDQorICogSUVFRTgwMjExX1JB
RElPVEFQX0xPQ0tfUVVBTElUWSAgICAgIHVpbnQxNl90ICAgICAgIHVuaXRsZXNzDQorICoNCisg
KiAgICAgIFF1YWxpdHkgb2YgQmFya2VyIGNvZGUgbG9jay4gVW5pdGxlc3MuIE1vbm90b25pY2Fs
bHkNCisgKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCAiYmV0dGVyIiBsb2NrIHN0cmVuZ3RoLiBD
YWxsZWQgIlNpZ25hbA0KKyAqICAgICAgUXVhbGl0eSIgaW4gZGF0YXNoZWV0cy4gIChJcyB0aGVy
ZSBhIHN0YW5kYXJkIHdheSB0byBtZWFzdXJlDQorICogICAgICB0aGlzPykNCisgKg0KKyAqIElF
RUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTiAgICB1aW50MTZfdCAgICAgICB1bml0bGVz
cw0KKyAqDQorICogICAgICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgdW5pdGxlc3MgZGlz
dGFuY2UgZnJvbSBtYXgNCisgKiAgICAgIHBvd2VyIHNldCBhdCBmYWN0b3J5IGNhbGlicmF0aW9u
LiAgMCBpcyBtYXggcG93ZXIuDQorICogICAgICBNb25vdG9uaWNhbGx5IG5vbmRlY3JlYXNpbmcg
d2l0aCBsb3dlciBwb3dlciBsZXZlbHMuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJf
VFhfQVRURU5VQVRJT04gdWludDE2X3QgICAgICAgZGVjaWJlbHMgKGRCKQ0KKyAqDQorICogICAg
ICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgZGVjaWJlbCBkaXN0YW5jZSBmcm9tIG1heCBw
b3dlcg0KKyAqICAgICAgc2V0IGF0IGZhY3RvcnkgY2FsaWJyYXRpb24uICAwIGlzIG1heCBwb3dl
ci4gIE1vbm90b25pY2FsbHkNCisgKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCBsb3dlciBwb3dl
ciBsZXZlbHMuDQorICoNCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSICAgICAg
czggICAgICAgICAgIGRlY2liZWxzIGZyb20NCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBtaWxsaXdhdHQgKGRCbSkNCisgKg0KKyAqICAg
ICAgVHJhbnNtaXQgcG93ZXIgZXhwcmVzc2VkIGFzIGRCbSAoZGVjaWJlbHMgZnJvbSBhIDEgbWls
bGl3YXR0DQorICogICAgICByZWZlcmVuY2UpLiBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBwb3dlciBs
ZXZlbCBtZWFzdXJlZCBhdA0KKyAqICAgICAgdGhlIGFudGVubmEgcG9ydC4NCisgKg0KKyAqIElF
RUU4MDIxMV9SQURJT1RBUF9GTEFHUyAgICAgICAgICAgICB1OCAgICAgICAgICAgYml0bWFwDQor
ICoNCisgKiAgICAgIFByb3BlcnRpZXMgb2YgdHJhbnNtaXR0ZWQgYW5kIHJlY2VpdmVkIGZyYW1l
cy4gU2VlIGZsYWdzDQorICogICAgICBkZWZpbmVkIGJlbG93Lg0KKyAqDQorICogSUVFRTgwMjEx
X1JBRElPVEFQX0FOVEVOTkEgICAgICAgICAgIHU4ICAgICAgICAgICBhbnRlbm5hIGluZGV4DQor
ICoNCisgKiAgICAgIFVuaXRsZXNzIGluZGljYXRpb24gb2YgdGhlIFJ4L1R4IGFudGVubmEgZm9y
IHRoaXMgcGFja2V0Lg0KKyAqICAgICAgVGhlIGZpcnN0IGFudGVubmEgaXMgYW50ZW5uYSAwLg0K
KyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICAgICAgICAgIHVpbnQxNl90ICAg
ICAgIGJpdG1hcA0KKyAqDQorICogICAgIFByb3BlcnRpZXMgb2YgcmVjZWl2ZWQgZnJhbWVzLiBT
ZWUgZmxhZ3MgZGVmaW5lZCBiZWxvdy4NCisgKg0KKyAqIElFRUU4MDIxMV9SQURJT1RBUF9UWF9G
TEFHUyAgICAgICAgICB1aW50MTZfdCAgICAgICBiaXRtYXANCisgKg0KKyAqICAgICBQcm9wZXJ0
aWVzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcy4gU2VlIGZsYWdzIGRlZmluZWQgYmVsb3cuDQorICoN
CisgKiBJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVMgICAgICAgdTggICAgICAgICAgIGRh
dGENCisgKg0KKyAqICAgICBOdW1iZXIgb2YgcnRzIHJldHJpZXMgYSB0cmFuc21pdHRlZCBmcmFt
ZSB1c2VkLg0KKyAqDQorICogSUVFRTgwMjExX1JBRElPVEFQX0RBVEFfUkVUUklFUyAgICAgIHU4
ICAgICAgICAgICBkYXRhDQorICoNCisgKiAgICAgTnVtYmVyIG9mIHVuaWNhc3QgcmV0cmllcyBh
IHRyYW5zbWl0dGVkIGZyYW1lIHVzZWQuDQorICoNCisgKi8NCitlbnVtIGllZWU4MDIxMV9yYWRp
b3RhcF90eXBlIHsNCisJSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgPSAwLA0KKwlJRUVFODAyMTFf
UkFESU9UQVBfRkxBR1MgPSAxLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfUkFURSA9IDIsDQorCUlF
RUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMID0gMywNCisJSUVFRTgwMjExX1JBRElPVEFQX0ZIU1Mg
PSA0LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCA9IDUsDQorCUlFRUU4MDIx
MV9SQURJT1RBUF9EQk1fQU5UTk9JU0UgPSA2LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfTE9DS19R
VUFMSVRZID0gNywNCisJSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OID0gOCwNCisJ
SUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OID0gOSwNCisJSUVFRTgwMjExX1JB
RElPVEFQX0RCTV9UWF9QT1dFUiA9IDEwLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSA9
IDExLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMID0gMTIsDQorCUlFRUU4MDIx
MV9SQURJT1RBUF9EQl9BTlROT0lTRSA9IDEzLA0KKwlJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxB
R1MgPSAxNCwNCisJSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTID0gMTUsDQorCUlFRUU4MDIx
MV9SQURJT1RBUF9SVFNfUkVUUklFUyA9IDE2LA0KKwlJRUVFODAyMTFfUkFESU9UQVBfREFUQV9S
RVRSSUVTID0gMTcsDQorDQorCS8qIHZhbGlkIGluIGV2ZXJ5IGl0X3ByZXNlbnQgYml0bWFwLCBl
dmVuIHZlbmRvciBuYW1lc3BhY2VzICovDQorCUlFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9O
QU1FU1BBQ0UgPSAyOSwNCisJSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0UgPSAz
MCwNCisJSUVFRTgwMjExX1JBRElPVEFQX0VYVCA9IDMxDQorfTsNCisNCisvKiBDaGFubmVsIGZs
YWdzLiAqLw0KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fVFVSQk8JMHgwMDEwCS8qIFR1cmJvIGNo
YW5uZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0NDSwkweDAwMjAJLyogQ0NLIGNoYW5u
ZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX09GRE0JMHgwMDQwCS8qIE9GRE0gY2hhbm5l
bCAqLw0KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fMkdIWgkweDAwODAJLyogMiBHSHogc3BlY3Ry
dW0gY2hhbm5lbC4gKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOXzVHSFoJMHgwMTAwCS8qIDUg
R0h6IHNwZWN0cnVtIGNoYW5uZWwgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1BBU1NJVkUJ
MHgwMjAwCS8qIE9ubHkgcGFzc2l2ZSBzY2FuIGFsbG93ZWQgKi8NCisjZGVmaW5lCUlFRUU4MDIx
MV9DSEFOX0RZTgkweDA0MDAJLyogRHluYW1pYyBDQ0stT0ZETSBjaGFubmVsICovDQorI2RlZmlu
ZQlJRUVFODAyMTFfQ0hBTl9HRlNLCTB4MDgwMAkvKiBHRlNLIGNoYW5uZWwgKEZIU1MgUEhZKSAq
Lw0KKw0KKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgKi8NCisjZGVmaW5lCUlFRUU4
MDIxMV9SQURJT1RBUF9GX0NGUAkweDAxCS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiBkdXJp
bmcgQ0ZQDQorCQkJCQkJICovDQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVFBS
RQkweDAyCS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiB3aXRoIHNob3J0DQorCQkJCQkJICog
cHJlYW1ibGUNCisJCQkJCQkgKi8NCisjZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX1dFUAkw
eDA0CS8qIHNlbnQvcmVjZWl2ZWQNCisJCQkJCQkgKiB3aXRoIFdFUCBlbmNyeXB0aW9uDQorCQkJ
CQkJICovDQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHCTB4MDgJLyogc2VudC9y
ZWNlaXZlZA0KKwkJCQkJCSAqIHdpdGggZnJhZ21lbnRhdGlvbg0KKwkJCQkJCSAqLw0KKyNkZWZp
bmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTCTB4MTAJLyogZnJhbWUgaW5jbHVkZXMgRkNTICov
DQorI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9EQVRBUEFECTB4MjAJLyogZnJhbWUgaGFz
IHBhZGRpbmcgYmV0d2Vlbg0KKwkJCQkJCSAqIDgwMi4xMSBoZWFkZXIgYW5kIHBheWxvYWQNCisJ
CQkJCQkgKiAodG8gMzItYml0IGJvdW5kYXJ5KQ0KKwkJCQkJCSAqLw0KKyNkZWZpbmUgSUVFRTgw
MjExX1JBRElPVEFQX0ZfQkFERkNTCTB4NDAJLyogZnJhbWUgZmFpbGVkIEZDUyBjaGVjayAqLw0K
Kw0KKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgKi8NCisjZGVmaW5lIElFRUU4
MDIxMV9SQURJT1RBUF9GX1JYX0JBRFBMQ1AJMHgwMDAyIC8qIGJhZCBQTENQICovDQorDQorLyog
Rm9yIElFRUU4MDIxMV9SQURJT1RBUF9UWF9GTEFHUyAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX1JB
RElPVEFQX0ZfVFhfRkFJTAkweDAwMDEJLyogZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUNCisJCQkJ
CQkgKiByZXRyaWVzICovDQorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9UWF9DVFMJMHgw
MDAyCS8qIHVzZWQgY3RzICdwcm90ZWN0aW9uJyAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElP
VEFQX0ZfVFhfUlRTCTB4MDAwNAkvKiB1c2VkIHJ0cy9jdHMgaGFuZHNoYWtlICovDQorDQorI2Vu
ZGlmCQkJCS8qIElFRUU4MDIxMV9SQURJT1RBUF9IICovDQotLS0gL2Rldi9udWxsCTE5NzAtMDEt
MDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwDQorKysgdHJ1bmsvZXBhbi9kaXNzZWN0b3JzL3Bh
Y2tldC1yYWRpb3RhcC1pdGVyLmMJMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAgKzAxMDAN
CkBAIC0wLDAgKzEsMzc4IEBADQorLyoNCisgKiBSYWRpb3RhcCBwYXJzZXINCisgKg0KKyAqIENv
cHlyaWdodCAyMDA3CQlBbmR5IEdyZWVuIDxhbmR5QHdhcm1jYXQuY29tPg0KKyAqIENvcHlyaWdo
dCAyMDA5CQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0Pg0KKyAqDQor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2Fy
ZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEJTRA0KKyAqIGxpY2Vuc2Uu
DQorICoNCisgKiBTZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpbmNsdWRl
ICJwYWNrZXQtcmFkaW90YXAtaXRlci5oIg0KKyNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAtcGxh
dGZvcm0uaCINCisNCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCByZWxhdGVkIGRlZnMgYXJl
IGluIHJhZGlvdGFwX2l0ZXIuaCAqLw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmFkaW90YXBf
YWxpZ25fc2l6ZSBydGFwX25hbWVzcGFjZV9zaXplc1tdID0gew0KKwlbSUVFRTgwMjExX1JBRElP
VEFQX1RTRlRdID0geyAuYWxpZ24gPSA4LCAuc2l6ZSA9IDgsIH0sDQorCVtJRUVFODAyMTFfUkFE
SU9UQVBfRkxBR1NdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sDQorCVtJRUVFODAyMTFf
UkFESU9UQVBfUkFURV0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIx
MV9SQURJT1RBUF9DSEFOTkVMXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSA0LCB9LA0KKwlbSUVF
RTgwMjExX1JBRElPVEFQX0ZIU1NdID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sDQorCVtJ
RUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTF0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0g
MSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0VdID0geyAuYWxpZ24gPSAx
LCAuc2l6ZSA9IDEsIH0sDQorCVtJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZXSA9IHsg
LmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVO
VUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlbSUVFRTgwMjExX1JBRElP
VEFQX0RCX1RYX0FUVEVOVUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LA0KKwlb
SUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUl0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0g
MSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BXSA9IHsgLmFsaWduID0gMSwgLnNp
emUgPSAxLCB9LA0KKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTF0gPSB7IC5hbGln
biA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRV0g
PSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RBUF9SWF9G
TEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwNCisJW0lFRUU4MDIxMV9SQURJT1RB
UF9UWF9GTEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwNCisJW0lFRUU4MDIxMV9S
QURJT1RBUF9SVFNfUkVUUklFU10gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwNCisJW0lF
RUU4MDIxMV9SQURJT1RBUF9EQVRBX1JFVFJJRVNdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEs
IH0sDQorCS8qDQorCSAqIGFkZCBtb3JlIGhlcmUgYXMgdGhleSBhcmUgZGVmaW5lZCBpbg0KKwkg
KiBpbmNsdWRlL25ldC9pZWVlODAyMTFfcmFkaW90YXAuaA0KKwkgKi8NCit9Ow0KKw0KK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSByYWRpb3RhcF9ucyA9
IHsNCisJLm5fYml0cyA9IHNpemVvZihydGFwX25hbWVzcGFjZV9zaXplcykgLyBzaXplb2YocnRh
cF9uYW1lc3BhY2Vfc2l6ZXNbMF0pLA0KKwkuYWxpZ25fc2l6ZSA9IHJ0YXBfbmFtZXNwYWNlX3Np
emVzLA0KK307DQorDQorLyoqDQorICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQg
LSByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgaW5pdGlhbGl6YXRpb24NCisgKiBAaXRlcmF0b3I6
IHJhZGlvdGFwX2l0ZXJhdG9yIHRvIGluaXRpYWxpemUNCisgKiBAcmFkaW90YXBfaGVhZGVyOiBy
YWRpb3RhcCBoZWFkZXIgdG8gcGFyc2UNCisgKiBAbWF4X2xlbmd0aDogdG90YWwgbGVuZ3RoIHdl
IGNhbiBwYXJzZSBpbnRvIChlZywgd2hvbGUgcGFja2V0IGxlbmd0aCkNCisgKg0KKyAqIFJldHVy
bnM6IDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGEgcHJvYmxlbS4NCisg
Kg0KKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gb3BhcXVlIGl0ZXJhdG9yIHN0cnVj
dCB3aGljaCBjYW4gdGhlbg0KKyAqIGJlIHBhc3NlZCB0byBpZWVlODAyMTFfcmFkaW90YXBfaXRl
cmF0b3JfbmV4dCgpIHRvIHZpc2l0IGV2ZXJ5IHJhZGlvdGFwDQorICogYXJndW1lbnQgd2hpY2gg
aXMgcHJlc2VudCBpbiB0aGUgaGVhZGVyLiAgSXQga25vd3MgYWJvdXQgZXh0ZW5kZWQNCisgKiBw
cmVzZW50IGhlYWRlcnMgYW5kIGhhbmRsZXMgdGhlbS4NCisgKg0KKyAqIEhvdyB0byB1c2U6DQor
ICogY2FsbCBfX2llZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCkgdG8gaW5pdCBhIHNl
bWktb3BhcXVlIGl0ZXJhdG9yDQorICogc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRv
ciAobm8gbmVlZCB0byBpbml0IHRoZSBzdHJ1Y3QgYmVmb3JlaGFuZCkNCisgKiBjaGVja2luZyBm
b3IgYSBnb29kIDAgcmV0dXJuIGNvZGUuICBUaGVuIGxvb3AgY2FsbGluZw0KKyAqIF9faWVlZTgw
MjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoKS4uLiBpdCByZXR1cm5zIGVpdGhlciAwLA0KKyAq
IC1FTk9FTlQgaWYgdGhlcmUgYXJlIG5vIG1vcmUgYXJncyB0byBwYXJzZSwgb3IgLUVJTlZBTCBp
ZiB0aGVyZSBpcyBhIHByb2JsZW0uDQorICogVGhlIGl0ZXJhdG9yJ3MgQHRoaXNfYXJnIG1lbWJl
ciBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBhcmd1bWVudA0KKyAqIGFzc29jaWF0ZWQgd2l0
aCB0aGUgY3VycmVudCBhcmd1bWVudCBpbmRleCB0aGF0IGlzIHByZXNlbnQsIHdoaWNoIGNhbiBi
ZQ0KKyAqIGZvdW5kIGluIHRoZSBpdGVyYXRvcidzIEB0aGlzX2FyZ19pbmRleCBtZW1iZXIuICBU
aGlzIGFyZyBpbmRleCBjb3JyZXNwb25kcw0KKyAqIHRvIHRoZSBJRUVFODAyMTFfUkFESU9UQVBf
Li4uIGRlZmluZXMuDQorICoNCisgKiBSYWRpb3RhcCBoZWFkZXIgbGVuZ3RoOg0KKyAqIFlvdSBj
YW4gZmluZCB0aGUgQ1BVLWVuZGlhbiB0b3RhbCByYWRpb3RhcCBoZWFkZXIgbGVuZ3RoIGluDQor
ICogaXRlcmF0b3ItPm1heF9sZW5ndGggYWZ0ZXIgZXhlY3V0aW5nIGllZWU4MDIxMV9yYWRpb3Rh
cF9pdGVyYXRvcl9pbml0KCkNCisgKiBzdWNjZXNzZnVsbHkuDQorICoNCisgKiBBbGlnbm1lbnQg
R290Y2hhOg0KKyAqIFlvdSBtdXN0IHRha2UgY2FyZSB3aGVuIGRlcmVmZXJlbmNpbmcgaXRlcmF0
b3IudGhpc19hcmcNCisgKiBmb3IgbXVsdGlieXRlIHR5cGVzLi4uIHRoZSBwb2ludGVyIGlzIG5v
dCBhbGlnbmVkLiAgVXNlDQorICogZ2V0X3VuYWxpZ25lZCgodHlwZSAqKWl0ZXJhdG9yLnRoaXNf
YXJnKSB0byBkZXJlZmVyZW5jZQ0KKyAqIGl0ZXJhdG9yLnRoaXNfYXJnIGZvciB0eXBlICJ0eXBl
IiBzYWZlbHkgb24gYWxsIGFyY2hlcy4NCisgKg0KKyAqIEV4YW1wbGUgY29kZToNCisgKiBTZWUg
RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JhZGlvdGFwLWhlYWRlcnMudHh0DQorICovDQorDQor
aW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KA0KKwlzdHJ1Y3QgaWVlZTgwMjEx
X3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwNCisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3Rh
cF9oZWFkZXIgKnJhZGlvdGFwX2hlYWRlciwNCisJaW50IG1heF9sZW5ndGgsIGNvbnN0IHN0cnVj
dCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKnZucykNCit7DQorCS8qIExp
bnV4IG9ubHkgc3VwcG9ydHMgdmVyc2lvbiAwIHJhZGlvdGFwIGZvcm1hdCAqLw0KKwlpZiAocmFk
aW90YXBfaGVhZGVyLT5pdF92ZXJzaW9uKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCS8qIHNh
bml0eSBjaGVjayBmb3IgYWxsb3dlZCBsZW5ndGggYW5kIHJhZGlvdGFwIGxlbmd0aCBmaWVsZCAq
Lw0KKwlpZiAobWF4X2xlbmd0aCA8IGdldF91bmFsaWduZWRfbGUxNigmcmFkaW90YXBfaGVhZGVy
LT5pdF9sZW4pKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWl0ZXJhdG9yLT5fcnRoZWFkZXIg
PSByYWRpb3RhcF9oZWFkZXI7DQorCWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCA9IGdldF91bmFsaWdu
ZWRfbGUxNigmcmFkaW90YXBfaGVhZGVyLT5pdF9sZW4pOw0KKwlpdGVyYXRvci0+X2FyZ19pbmRl
eCA9IDA7DQorCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPSBnZXRfdW5hbGlnbmVkX2xlMzIo
JnJhZGlvdGFwX2hlYWRlci0+aXRfcHJlc2VudCk7DQorCWl0ZXJhdG9yLT5fYXJnID0gKHVpbnQ4
X3QgKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7DQorCWl0ZXJh
dG9yLT5fcmVzZXRfb25fZXh0ID0gMDsNCisJaXRlcmF0b3ItPl9uZXh0X2JpdG1hcCA9ICZyYWRp
b3RhcF9oZWFkZXItPml0X3ByZXNlbnQ7DQorCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXArKzsNCisJ
aXRlcmF0b3ItPl92bnMgPSB2bnM7DQorCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9ICZy
YWRpb3RhcF9uczsNCisJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMTsNCisjaWZkZWYgUkFE
SU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCisJaXRlcmF0b3ItPm5fb3ZlcnJpZGVzID0gMDsNCisJ
aXRlcmF0b3ItPm92ZXJyaWRlcyA9IE5VTEw7DQorI2VuZGlmDQorDQorCS8qIGZpbmQgcGF5bG9h
ZCBzdGFydCBhbGxvd2luZyBmb3IgZXh0ZW5kZWQgYml0bWFwKHMpICovDQorDQorCWlmIChpdGVy
YXRvci0+X2JpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7DQor
CQl3aGlsZSAoZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5fYXJnKSAmDQorCQkJCQkoMSA8
PCBJRUVFODAyMTFfUkFESU9UQVBfRVhUKSkgew0KKwkJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemVv
Zih1aW50MzJfdCk7DQorDQorCQkJLyoNCisJCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUg
dGhlIHByZXNlbnQgYml0bWFwcw0KKwkJCSAqIGtlZXAgY2xhaW1pbmcgdG8gZXh0ZW5kIHVwIHRv
IG9yIGV2ZW4gYmV5b25kIHRoZQ0KKwkJCSAqIHN0YXRlZCByYWRpb3RhcCBoZWFkZXIgbGVuZ3Ro
DQorCQkJICovDQorDQorCQkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJnIC0NCisJ
CQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlciA+DQorCQkJICAgICh1bnNp
Z25lZCBsb25nKWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCkNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQor
CQl9DQorDQorCQlpdGVyYXRvci0+X2FyZyArPSBzaXplb2YodWludDMyX3QpOw0KKw0KKwkJLyoN
CisJCSAqIG5vIG5lZWQgdG8gY2hlY2sgYWdhaW4gZm9yIGJsb3dpbmcgcGFzdCBzdGF0ZWQgcmFk
aW90YXANCisJCSAqIGhlYWRlciBsZW5ndGgsIGJlY2F1c2UgaWVlZTgwMjExX3JhZGlvdGFwX2l0
ZXJhdG9yX25leHQNCisJCSAqIGNoZWNrcyBpdCBiZWZvcmUgaXQgaXMgZGVyZWZlcmVuY2VkDQor
CQkgKi8NCisJfQ0KKw0KKwlpdGVyYXRvci0+dGhpc19hcmcgPSBpdGVyYXRvci0+X2FyZzsNCisN
CisJLyogd2UgYXJlIGFsbCBpbml0aWFsaXplZCBoYXBwaWx5ICovDQorDQorCXJldHVybiAwOw0K
K30NCisNCitzdGF0aWMgdm9pZCBmaW5kX25zKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRl
cmF0b3IgKml0ZXJhdG9yLA0KKwkJICAgIHVpbnQzMl90IG91aSwgdWludDhfdCBzdWJucykNCit7
DQorCWludCBpOw0KKw0KKwlpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPSBOVUxMOw0KKw0K
KwlpZiAoIWl0ZXJhdG9yLT5fdm5zKQ0KKwkJcmV0dXJuOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwg
aXRlcmF0b3ItPl92bnMtPm5fbnM7IGkrKykgew0KKwkJaWYgKGl0ZXJhdG9yLT5fdm5zLT5uc1tp
XS5vdWkgIT0gb3VpKQ0KKwkJCWNvbnRpbnVlOw0KKwkJaWYgKGl0ZXJhdG9yLT5fdm5zLT5uc1tp
XS5zdWJucyAhPSBzdWJucykNCisJCQljb250aW51ZTsNCisNCisJCWl0ZXJhdG9yLT5jdXJyZW50
X25hbWVzcGFjZSA9ICZpdGVyYXRvci0+X3Zucy0+bnNbaV07DQorCQlicmVhazsNCisJfQ0KK30N
CisNCisjaWZkZWYgUkFESU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCitzdGF0aWMgaW50IGZpbmRf
b3ZlcnJpZGUoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0b3IsDQor
CQkJIGludCAqYWxpZ24sIGludCAqc2l6ZSkNCit7DQorCWludCBpOw0KKw0KKwlpZiAoIWl0ZXJh
dG9yLT5vdmVycmlkZXMpDQorCQlyZXR1cm4gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IGl0ZXJh
dG9yLT5uX292ZXJyaWRlczsgaSsrKSB7DQorCQlpZiAoaXRlcmF0b3ItPl9hcmdfaW5kZXggPT0g
aXRlcmF0b3ItPm92ZXJyaWRlc1tpXS5maWVsZCkgew0KKwkJCSphbGlnbiA9IGl0ZXJhdG9yLT5v
dmVycmlkZXNbaV0uYWxpZ247DQorCQkJKnNpemUgPSBpdGVyYXRvci0+b3ZlcnJpZGVzW2ldLnNp
emU7DQorCQkJaWYgKCEqYWxpZ24pIC8qIGVycm9uZW91cyBvdmVycmlkZSAqLw0KKwkJCQlyZXR1
cm4gMDsNCisJCQlyZXR1cm4gMTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorI2Vu
ZGlmDQorDQorDQorLyoqDQorICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQgLSBy
ZXR1cm4gbmV4dCByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgYXJnDQorICogQGl0ZXJhdG9yOiBy
YWRpb3RhcF9pdGVyYXRvciB0byBtb3ZlIHRvIG5leHQgYXJnIChpZiBhbnkpDQorICoNCisgKiBS
ZXR1cm5zOiAwIGlmIHRoZXJlIGlzIGFuIGFyZ3VtZW50IHRvIGhhbmRsZSwNCisgKiAtRU5PRU5U
IGlmIHRoZXJlIGFyZSBubyBtb3JlIGFyZ3Mgb3IgLUVJTlZBTA0KKyAqIGlmIHRoZXJlIGlzIHNv
bWV0aGluZyBlbHNlIHdyb25nLg0KKyAqDQorICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyB0aGUg
bmV4dCByYWRpb3RhcCBhcmcgaW5kZXggKElFRUU4MDIxMV9SQURJT1RBUF8qKQ0KKyAqIGluIEB0
aGlzX2FyZ19pbmRleCBhbmQgc2V0cyBAdGhpc19hcmcgdG8gcG9pbnQgdG8gdGhlDQorICogcGF5
bG9hZCBmb3IgdGhlIGZpZWxkLiAgSXQgdGFrZXMgY2FyZSBvZiBhbGlnbm1lbnQgaGFuZGxpbmcg
YW5kIGV4dGVuZGVkDQorICogcHJlc2VudCBmaWVsZHMuICBAdGhpc19hcmcgY2FuIGJlIGNoYW5n
ZWQgYnkgdGhlIGNhbGxlciAoZWcsDQorICogaW5jcmVtZW50ZWQgdG8gbW92ZSBpbnNpZGUgYSBj
b21wb3VuZCBhcmd1bWVudCBsaWtlDQorICogSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpLiAg
VGhlIGFyZ3MgcG9pbnRlZCB0byBhcmUgaW4NCisgKiBsaXR0bGUtZW5kaWFuIGZvcm1hdCB3aGF0
ZXZlciB0aGUgZW5kaWFuZXNzIG9mIHlvdXIgQ1BVLg0KKyAqDQorICogQWxpZ25tZW50IEdvdGNo
YToNCisgKiBZb3UgbXVzdCB0YWtlIGNhcmUgd2hlbiBkZXJlZmVyZW5jaW5nIGl0ZXJhdG9yLnRo
aXNfYXJnDQorICogZm9yIG11bHRpYnl0ZSB0eXBlcy4uLiB0aGUgcG9pbnRlciBpcyBub3QgYWxp
Z25lZC4gIFVzZQ0KKyAqIGdldF91bmFsaWduZWQoKHR5cGUgKilpdGVyYXRvci50aGlzX2FyZykg
dG8gZGVyZWZlcmVuY2UNCisgKiBpdGVyYXRvci50aGlzX2FyZyBmb3IgdHlwZSAidHlwZSIgc2Fm
ZWx5IG9uIGFsbCBhcmNoZXMuDQorICovDQorDQoraW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVy
YXRvcl9uZXh0KA0KKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRv
cikNCit7DQorCXdoaWxlICgxKSB7DQorCQlpbnQgaGl0ID0gMDsNCisJCWludCBwYWQsIGFsaWdu
LCBzaXplLCBzdWJucywgdm5zbGVuOw0KKwkJdWludDMyX3Qgb3VpOw0KKw0KKwkJLyogaWYgbm8g
bW9yZSBFWFQgYml0cywgdGhhdCdzIGl0ICovDQorCQlpZiAoKGl0ZXJhdG9yLT5fYXJnX2luZGV4
ICUgMzIpID09IElFRUU4MDIxMV9SQURJT1RBUF9FWFQgJiYNCisJCSAgICAhKGl0ZXJhdG9yLT5f
Yml0bWFwX3NoaWZ0ZXIgJiAxKSkNCisJCQlyZXR1cm4gLUVOT0VOVDsNCisNCisJCWlmICghKGl0
ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgJiAxKSkNCisJCQlnb3RvIG5leHRfZW50cnk7IC8qIGFy
ZyBub3QgcHJlc2VudCAqLw0KKw0KKwkJLyogZ2V0IGFsaWdubWVudC9zaXplIG9mIGRhdGEgKi8N
CisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgew0KKwkJY2FzZSBJRUVFODAy
MTFfUkFESU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOg0KKwkJY2FzZSBJRUVFODAyMTFfUkFESU9U
QVBfRVhUOg0KKwkJCWFsaWduID0gMTsNCisJCQlzaXplID0gMDsNCisJCQlicmVhazsNCisJCWNh
c2UgSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0U6DQorCQkJYWxpZ24gPSAyOw0K
KwkJCXNpemUgPSA2Ow0KKwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisjaWZkZWYgUkFESU9UQVBf
U1VQUE9SVF9PVkVSUklERVMNCisJCQlpZiAoZmluZF9vdmVycmlkZShpdGVyYXRvciwgJmFsaWdu
LCAmc2l6ZSkpIHsNCisJCQkJLyogYWxsIHNldCAqLw0KKwkJCX0gZWxzZQ0KKyNlbmRpZg0KKwkJ
CWlmICghaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlIHx8DQorCQkJICAgIGl0ZXJhdG9yLT5f
YXJnX2luZGV4ID49IGl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZS0+bl9iaXRzKSB7DQorCQkJ
CWlmIChpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPT0gJnJhZGlvdGFwX25zKQ0KKwkJCQkJ
cmV0dXJuIC1FTk9FTlQ7DQorCQkJCWFsaWduID0gMDsNCisJCQl9IGVsc2Ugew0KKwkJCQlhbGln
biA9IGl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZS0+YWxpZ25fc2l6ZVtpdGVyYXRvci0+X2Fy
Z19pbmRleF0uYWxpZ247DQorCQkJCXNpemUgPSBpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2Ut
PmFsaWduX3NpemVbaXRlcmF0b3ItPl9hcmdfaW5kZXhdLnNpemU7DQorCQkJfQ0KKwkJCWlmICgh
YWxpZ24pIHsNCisJCQkJLyogc2tpcCBhbGwgc3Vic2VxdWVudCBkYXRhICovDQorCQkJCWl0ZXJh
dG9yLT5fYXJnID0gaXRlcmF0b3ItPl9uZXh0X25zX2RhdGE7DQorCQkJCS8qIGdpdmUgdXAgb24g
dGhpcyBuYW1lc3BhY2UgKi8NCisJCQkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gTlVM
TDsNCisJCQkJZ290byBuZXh0X2VudHJ5Ow0KKwkJCX0NCisJCQlicmVhazsNCisJCX0NCisNCisJ
CS8qDQorCQkgKiBhcmcgaXMgcHJlc2VudCwgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcN
CisJCSAqDQorCQkgKiBOb3RlIHRoYXQgdGhlc2UgYWxpZ25tZW50cyBhcmUgcmVsYXRpdmUgdG8g
dGhlIHN0YXJ0DQorCQkgKiBvZiB0aGUgcmFkaW90YXAgaGVhZGVyLiAgVGhlcmUgaXMgbm8gZ3Vh
cmFudGVlDQorCQkgKiB0aGF0IHRoZSByYWRpb3RhcCBoZWFkZXIgaXRzZWxmIGlzIGFsaWduZWQg
b24gYW55DQorCQkgKiBraW5kIG9mIGJvdW5kYXJ5Lg0KKwkJICoNCisJCSAqIFRoZSBhYm92ZSBp
cyB3aHkgZ2V0X3VuYWxpZ25lZCgpIGlzIHVzZWQgdG8gZGVyZWZlcmVuY2UNCisJCSAqIG11bHRp
Ynl0ZSBlbGVtZW50cyBmcm9tIHRoZSByYWRpb3RhcCBhcmVhLg0KKwkJICovDQorDQorCQlwYWQg
PSAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9hcmcgLQ0KKwkJICAgICAgICh1bnNpZ25lZCBs
b25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIpICYgKGFsaWduIC0gMSk7DQorDQorCQlpZiAocGFkKQ0K
KwkJCWl0ZXJhdG9yLT5fYXJnICs9IGFsaWduIC0gcGFkOw0KKw0KKwkJLyoNCisJCSAqIHRoaXMg
aXMgd2hhdCB3ZSB3aWxsIHJldHVybiB0byB1c2VyLCBidXQgd2UgbmVlZCB0bw0KKwkJICogbW92
ZSBvbiBmaXJzdCBzbyBuZXh0IGNhbGwgaGFzIHNvbWV0aGluZyBmcmVzaCB0byB0ZXN0DQorCQkg
Ki8NCisJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5fYXJnX2luZGV4Ow0K
KwkJaXRlcmF0b3ItPnRoaXNfYXJnID0gaXRlcmF0b3ItPl9hcmc7DQorCQlpdGVyYXRvci0+dGhp
c19hcmdfc2l6ZSA9IHNpemU7DQorDQorCQkvKiBpbnRlcm5hbGx5IG1vdmUgb24gdGhlIHNpemUg
b2YgdGhpcyBhcmcgKi8NCisJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemU7DQorDQorCQkvKg0KKwkJ
ICogY2hlY2sgZm9yIGluc2FuaXR5IHdoZXJlIHdlIGFyZSBnaXZlbiBhIGJpdG1hcCB0aGF0DQor
CQkgKiBjbGFpbXMgdG8gaGF2ZSBtb3JlIGFyZyBjb250ZW50IHRoYW4gdGhlIGxlbmd0aCBvZiB0
aGUNCisJCSAqIHJhZGlvdGFwIHNlY3Rpb24uICBXZSB3aWxsIG5vcm1hbGx5IGVuZCB1cCBlcXVh
bGxpbmcgdGhpcw0KKwkJICogbWF4X2xlbmd0aCBvbiB0aGUgbGFzdCBhcmcsIG5ldmVyIGV4Y2Vl
ZGluZyBpdC4NCisJCSAqLw0KKw0KKwkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJn
IC0NCisJCSAgICAodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X3J0aGVhZGVyID4NCisJCSAgICAo
dW5zaWduZWQgbG9uZylpdGVyYXRvci0+X21heF9sZW5ndGgpDQorCQkJcmV0dXJuIC1FSU5WQUw7
DQorDQorCQkvKiB0aGVzZSBzcGVjaWFsIG9uZXMgYXJlIHZhbGlkIGluIGVhY2ggYml0bWFwIHdv
cmQgKi8NCisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgew0KKwkJY2FzZSBJ
RUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRToNCisJCQlpdGVyYXRvci0+X2JpdG1h
cF9zaGlmdGVyID4+PSAxOw0KKwkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7DQorDQorCQkJaXRl
cmF0b3ItPl9yZXNldF9vbl9leHQgPSAxOw0KKw0KKwkJCXZuc2xlbiA9IGdldF91bmFsaWduZWRf
bGUxNihpdGVyYXRvci0+dGhpc19hcmcgKyA0KTsNCisJCQlpdGVyYXRvci0+X25leHRfbnNfZGF0
YSA9IGl0ZXJhdG9yLT5fYXJnICsgdm5zbGVuOw0KKwkJCW91aSA9ICgqaXRlcmF0b3ItPnRoaXNf
YXJnIDw8IDE2KSB8DQorCQkJCSgqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDEpIDw8IDgpIHwNCisJ
CQkJKihpdGVyYXRvci0+dGhpc19hcmcgKyAyKTsNCisJCQlzdWJucyA9ICooaXRlcmF0b3ItPnRo
aXNfYXJnICsgMyk7DQorDQorCQkJZmluZF9ucyhpdGVyYXRvciwgb3VpLCBzdWJucyk7DQorDQor
CQkJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMDsNCisJCQkvKiBhbGxvdyBwYXJzZXJzIHRv
IHNob3cgdGhpcyBpbmZvcm1hdGlvbiAqLw0KKwkJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9
DQorCQkJCUlFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFOw0KKwkJCWl0ZXJhdG9y
LT50aGlzX2FyZ19zaXplICs9IHZuc2xlbjsNCisJCQlpZiAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0
b3ItPnRoaXNfYXJnICsNCisJCQkgICAgaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgLQ0KKwkJCSAg
ICAodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X3J0aGVhZGVyID4NCisJCQkgICAgKHVuc2lnbmVk
IGxvbmcpKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQ0KKwkJCQlyZXR1cm4g
LUVJTlZBTDsNCisJCQloaXQgPSAxOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBJRUVFODAyMTFfUkFE
SU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOg0KKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIg
Pj49IDE7DQorCQkJaXRlcmF0b3ItPl9hcmdfaW5kZXgrKzsNCisNCisJCQlpdGVyYXRvci0+X3Jl
c2V0X29uX2V4dCA9IDE7DQorCQkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gJnJhZGlv
dGFwX25zOw0KKwkJCWl0ZXJhdG9yLT5pc19yYWRpb3RhcF9ucyA9IDE7DQorCQkJYnJlYWs7DQor
CQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9FWFQ6DQorCQkJLyoNCisJCQkgKiBiaXQgMzEgd2Fz
IHNldCwgdGhlcmUgaXMgbW9yZQ0KKwkJCSAqIC0tIG1vdmUgdG8gbmV4dCB1MzIgYml0bWFwDQor
CQkJICovDQorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA9DQorCQkJCWdldF91bmFsaWdu
ZWRfbGUzMihpdGVyYXRvci0+X25leHRfYml0bWFwKTsNCisJCQlpdGVyYXRvci0+X25leHRfYml0
bWFwKys7DQorCQkJaWYgKGl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0KQ0KKwkJCQlpdGVyYXRvci0+
X2FyZ19pbmRleCA9IDA7DQorCQkJZWxzZQ0KKwkJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOw0K
KwkJCWl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0ID0gMDsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6
DQorCQkJLyogd2UndmUgZ290IGEgaGl0ISAqLw0KKwkJCWhpdCA9IDE7DQorIG5leHRfZW50cnk6
DQorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA+Pj0gMTsNCisJCQlpdGVyYXRvci0+X2Fy
Z19pbmRleCsrOw0KKwkJfQ0KKw0KKwkJLyogaWYgd2UgZm91bmQgYSB2YWxpZCBhcmcgZWFybGll
ciwgcmV0dXJuIGl0IG5vdyAqLw0KKwkJaWYgKGhpdCkNCisJCQlyZXR1cm4gMDsNCisJfQ0KK30N
Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDANCisrKyB0
cnVuay9lcGFuL2Rpc3NlY3RvcnMvcGFja2V0LXJhZGlvdGFwLWl0ZXIuaAkyMDA5LTExLTI2IDE4
OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTAsMCArMSw5NiBAQA0KKyNpZm5kZWYgX19SQURJ
T1RBUF9JVEVSX0gNCisjZGVmaW5lIF9fUkFESU9UQVBfSVRFUl9IDQorDQorI2luY2x1ZGUgPHN0
ZGludC5oPg0KKyNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAtZGVmcy5oIg0KKw0KKy8qIFJhZGlv
dGFwIGhlYWRlciBpdGVyYXRpb24NCisgKiAgIGltcGxlbWVudGVkIGluIHJhZGlvdGFwLmMNCisg
Ki8NCisNCitzdHJ1Y3QgcmFkaW90YXBfb3ZlcnJpZGUgew0KKwl1aW50OF90IGZpZWxkOw0KKwl1
aW50OF90IGFsaWduOjQsIHNpemU6NDsNCit9Ow0KKw0KK3N0cnVjdCByYWRpb3RhcF9hbGlnbl9z
aXplIHsNCisJdWludDhfdCBhbGlnbjo0LCBzaXplOjQ7DQorfTsNCisNCitzdHJ1Y3QgaWVlZTgw
MjExX3JhZGlvdGFwX25hbWVzcGFjZSB7DQorCWNvbnN0IHN0cnVjdCByYWRpb3RhcF9hbGlnbl9z
aXplICphbGlnbl9zaXplOw0KKwlpbnQgbl9iaXRzOw0KKwl1aW50MzJfdCBvdWk7DQorCXVpbnQ4
X3Qgc3VibnM7DQorfTsNCisNCitzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1l
c3BhY2VzIHsNCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgKm5z
Ow0KKwlpbnQgbl9uczsNCit9Ow0KKw0KKy8qKg0KKyAqIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90
YXBfaXRlcmF0b3IgLSB0cmFja3Mgd2FsayB0aHJ1IHByZXNlbnQgcmFkaW90YXAgYXJncw0KKyAq
IEB0aGlzX2FyZ19pbmRleDogaW5kZXggb2YgY3VycmVudCBhcmcsIHZhbGlkIGFmdGVyIGVhY2gg
c3VjY2Vzc2Z1bCBjYWxsDQorICoJdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQo
KQ0KKyAqIEB0aGlzX2FyZzogcG9pbnRlciB0byBjdXJyZW50IHJhZGlvdGFwIGFyZzsgaXQgaXMg
dmFsaWQgYWZ0ZXIgZWFjaA0KKyAqCWNhbGwgdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9y
X25leHQoKSBidXQgYWxzbyBhZnRlcg0KKyAqCWllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9p
bml0KCkgd2hlcmUgaXQgd2lsbCBwb2ludCB0bw0KKyAqCXRoZSBiZWdpbm5pbmcgb2YgdGhlIGFj
dHVhbCBkYXRhIHBvcnRpb24NCisgKiBAdGhpc19hcmdfc2l6ZTogbGVuZ3RoIG9mIHRoZSBjdXJy
ZW50IGFyZywgZm9yIGNvbnZlbmllbmNlDQorICogQGN1cnJlbnRfbmFtZXNwYWNlOiBwb2ludGVy
IHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBkZWZpbml0aW9uDQorICoJKG9yIGludGVybmFsbHkg
JU5VTEwgaWYgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIHVua25vd24pDQorICogQGlzX3JhZGlv
dGFwX25zOiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBuYW1lc3BhY2UgaXMgdGhlIGRl
ZmF1bHQNCisgKglyYWRpb3RhcCBuYW1lc3BhY2Ugb3Igbm90DQorICoNCisgKiBAb3ZlcnJpZGVz
OiBvdmVycmlkZSBzdGFuZGFyZCByYWRpb3RhcCBmaWVsZHMNCisgKiBAbl9vdmVycmlkZXM6IG51
bWJlciBvZiBvdmVycmlkZXMNCisgKg0KKyAqIEBfcnRoZWFkZXI6IHBvaW50ZXIgdG8gdGhlIHJh
ZGlvdGFwIGhlYWRlciB3ZSBhcmUgd2Fsa2luZyB0aHJvdWdoDQorICogQF9tYXhfbGVuZ3RoOiBs
ZW5ndGggb2YgcmFkaW90YXAgaGVhZGVyIGluIGNwdSBieXRlIG9yZGVyaW5nDQorICogQF9hcmdf
aW5kZXg6IG5leHQgYXJndW1lbnQgaW5kZXgNCisgKiBAX2FyZzogbmV4dCBhcmd1bWVudCBwb2lu
dGVyDQorICogQF9uZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQg
dTMyDQorICogQF9iaXRtYXBfc2hpZnRlcjogaW50ZXJuYWwgc2hpZnRlciBmb3IgY3VyciB1MzIg
Yml0bWFwLCBiMCBzZXQgPT0gYXJnIHByZXNlbnQNCisgKiBAX3ZuczogdmVuZG9yIG5hbWVzcGFj
ZSBkZWZpbml0aW9ucw0KKyAqIEBfbmV4dF9uc19kYXRhOiBiZWdpbm5pbmcgb2YgdGhlIG5leHQg
bmFtZXNwYWNlJ3MgZGF0YQ0KKyAqIEBfcmVzZXRfb25fZXh0OiBpbnRlcm5hbDsgcmVzZXQgdGhl
IGFyZyBpbmRleCB0byAwIHdoZW4gZ29pbmcgdG8gdGhlDQorICoJbmV4dCBiaXRtYXAgd29yZA0K
KyAqDQorICogRGVzY3JpYmVzIHRoZSByYWRpb3RhcCBwYXJzZXIgc3RhdGUuIEZpZWxkcyBwcmVm
aXhlZCB3aXRoIGFuIHVuZGVyc2NvcmUNCisgKiBtdXN0IG5vdCBiZSB1c2VkIGJ5IHVzZXJzIG9m
IHRoZSBwYXJzZXIsIG9ubHkgYnkgdGhlIHBhcnNlciBpbnRlcm5hbGx5Lg0KKyAqLw0KKw0KK3N0
cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3Igew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3Jh
ZGlvdGFwX2hlYWRlciAqX3J0aGVhZGVyOw0KKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlv
dGFwX3ZlbmRvcl9uYW1lc3BhY2VzICpfdm5zOw0KKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Jh
ZGlvdGFwX25hbWVzcGFjZSAqY3VycmVudF9uYW1lc3BhY2U7DQorDQorCXVuc2lnbmVkIGNoYXIg
Kl9hcmcsICpfbmV4dF9uc19kYXRhOw0KKwl1aW50MzJfdCAqX25leHRfYml0bWFwOw0KKw0KKwl1
bnNpZ25lZCBjaGFyICp0aGlzX2FyZzsNCisjaWZkZWYgUkFESU9UQVBfU1VQUE9SVF9PVkVSUklE
RVMNCisJY29uc3Qgc3RydWN0IHJhZGlvdGFwX292ZXJyaWRlICpvdmVycmlkZXM7DQorCWludCBu
X292ZXJyaWRlczsNCisjZW5kaWYNCisJaW50IHRoaXNfYXJnX2luZGV4Ow0KKwlpbnQgdGhpc19h
cmdfc2l6ZTsNCisNCisJaW50IGlzX3JhZGlvdGFwX25zOw0KKw0KKwlpbnQgX21heF9sZW5ndGg7
DQorCWludCBfYXJnX2luZGV4Ow0KKwl1aW50MzJfdCBfYml0bWFwX3NoaWZ0ZXI7DQorCWludCBf
cmVzZXRfb25fZXh0Ow0KK307DQorDQorZXh0ZXJuIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRl
cmF0b3JfaW5pdCgNCisJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0
b3IsDQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcF9oZWFkZXIs
DQorCWludCBtYXhfbGVuZ3RoLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRv
cl9uYW1lc3BhY2VzICp2bnMpOw0KKw0KK2V4dGVybiBpbnQgaWVlZTgwMjExX3JhZGlvdGFwX2l0
ZXJhdG9yX25leHQoDQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJh
dG9yKTsNCisNCisjZW5kaWYgLyogX19SQURJT1RBUF9JVEVSX0ggKi8NCi0tLSB0cnVuay5vcmln
L2VwYW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5hbQkyMDA5LTExLTI2IDE4OjUwOjUxLjAwMDAwMDAw
MCArMDEwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9NYWtlZmlsZS5hbQkyMDA5LTExLTI2
IDE4OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTQwLDcgKzQwLDcgQEAgbGliZGlzc2VjdG9y
c19sYV9TT1VSQ0VTID0gXA0KIAkkKEFTTjFfRElTU0VDVE9SX1NSQykgXA0KIAkkKFBJRExfRElT
U0VDVE9SX1NSQykgXA0KIAkkKERJU1NFQ1RPUl9TVVBQT1JUX1NSQykNCi1saWJkaXNzZWN0b3Jz
X2xhX0NGTEFHUyA9ICQoQU1fQ0xFQU5fQ0ZMQUdTKQ0KK2xpYmRpc3NlY3RvcnNfbGFfQ0ZMQUdT
ID0gJChBTV9DTEVBTl9DRkxBR1MpIC1EUkFESU9UQVBfU1VQUE9SVF9PVkVSUklERVMNCiANCiAN
CiBFWFRSQV9ESVNUID0gXA0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAw
MDAwMCArMDAwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAtcGxh
dGZvcm0uaAkyMDA5LTExLTI2IDE4OjUzOjUzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTAsMCArMSw5
IEBADQorI2luY2x1ZGUgPHN0ZGRlZi5oPg0KKyNpbmNsdWRlIDxlcnJuby5oPg0KKyNpbmNsdWRl
IDxnbGliLmg+DQorI2luY2x1ZGUgInBpbnQuaCINCisNCisjZGVmaW5lIGxlMTZfdG9fY3B1CQlH
SU5UMTZfRlJPTV9MRQ0KKyNkZWZpbmUgbGUzMl90b19jcHUJCUdJTlQzMl9GUk9NX0xFDQorI2Rl
ZmluZSBnZXRfdW5hbGlnbmVkX2xlMTYJcGxldG9ocw0KKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZF9s
ZTMyCXBsZXRvaGwNCi0tLSB0cnVuay5vcmlnL2VwYW4vZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90
YXAuYwkyMDA5LTExLTI2IDE4OjUwOjUxLjAwMDAwMDAwMCArMDEwMA0KKysrIHRydW5rL2VwYW4v
ZGlzc2VjdG9ycy9wYWNrZXQtcmFkaW90YXAuYwkyMDA5LTExLTI2IDE4OjUzOjUzLjAwMDAwMDAw
MCArMDEwMA0KQEAgLTI5LDggKzI5LDExIEBADQogIyBpbmNsdWRlICJjb25maWcuaCINCiAjZW5k
aWYNCiANCisjaW5jbHVkZSA8c3RkaW8uaD4NCisNCiAjaW5jbHVkZSA8Z2xpYi5oPg0KICNpbmNs
dWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCiANCiAjaW5jbHVkZSA8ZXBhbi9w
YWNrZXQuaD4NCiAjaW5jbHVkZSA8ZXBhbi9jcmMzMi5oPg0KQEAgLTM5LDYgKzQyLDE1IEBADQog
I2luY2x1ZGUgPGVwYW4vcHJlZnMuaD4NCiAjaW5jbHVkZSAicGFja2V0LWllZWU4MDIxMS5oIg0K
ICNpbmNsdWRlICJwYWNrZXQtcmFkaW90YXAuaCINCisjaW5jbHVkZSAicGFja2V0LXJhZGlvdGFw
LWl0ZXIuaCINCisjaW5jbHVkZSAicGFja2V0LXJhZGlvdGFwLWRlZnMuaCINCisNCisvKiBub3Qg
b2ZmaWNpYWxseSBkZWZpbmVkICh5ZXQpICovDQorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBf
Rl9TSE9SVEdJCTB4ODANCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTAkxOA0K
KyNkZWZpbmUgSUVFRTgwMjExX0NIQU5fSFQyMAkJMHgxMDAwMAkvKiBIVCAyMCBjaGFubmVsICov
DQorI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9IVDQwVQkJMHgyMDAwMAkvKiBIVCA0MCBjaGFubmVs
IHcvIGV4dCBhYm92ZSAqLw0KKyNkZWZpbmUgSUVFRTgwMjExX0NIQU5fSFQ0MEQJCTB4NDAwMDAJ
LyogSFQgNDAgY2hhbm5lbCB3LyBleHQgYmVsb3cgKi8NCiANCiAvKiBPZmZpY2lhbCBzcGVjaWZj
YXRpb246DQogICoNCkBAIC00OSw3MCArNjEsNiBAQA0KICAqIE5ldEJTRCdzIGllZWU4MDIxMV9y
YWRpb3RhcC5oIGZpbGUNCiAgKi8NCiANCi1zdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRl
ciB7DQotICAgIGd1aW50OAlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2Vz
DQotCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsDQotCQkJCSAqIGludHJvZHVjdGlvbiBvZiBj
b21wYXRpYmxlDQotCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuDQotCQkJCSAqLw0K
LSAgICBndWludDgJaXRfcGFkOw0KLSAgICBndWludDE2ICAgICBpdF9sZW47ICAgICAgICAgLyog
bGVuZ3RoIG9mIHRoZSB3aG9sZQ0KLQkJCQkgKiBoZWFkZXIgaW4gYnl0ZXMsIGluY2x1ZGluZw0K
LQkJCQkgKiBpdF92ZXJzaW9uLCBpdF9wYWQsDQotCQkJCSAqIGl0X2xlbiwgYW5kIGRhdGEgZmll
bGRzLg0KLQkJCQkgKi8NCi0jZGVmaW5lIE1BWF9QUkVTRU5UIDENCi0gICAgZ3VpbnQzMiAgIGl0
X3ByZXNlbnRbTUFYX1BSRVNFTlRdOwkvKiBBIGJpdG1hcCB0ZWxsaW5nIHdoaWNoDQotCQkJCQkg
KiBmaWVsZHMgYXJlIHByZXNlbnQuIFNldCBiaXQgMzENCi0JCQkJCSAqICgweDgwMDAwMDAwKSB0
byBleHRlbmQgdGhlDQotCQkJCQkgKiBiaXRtYXAgYnkgYW5vdGhlciAzMiBiaXRzLg0KLQkJCQkJ
ICogQWRkaXRpb25hbCBleHRlbnNpb25zIGFyZSBtYWRlDQotCQkJCQkgKiBieSBzZXR0aW5nIGJp
dCAzMS4NCi0JCQkJCSAqLw0KLX07DQotDQotI2RlZmluZSBSQURJT1RBUF9NSU5fSEVBREVSX0xF
Tgk4CS8qIG1pbmltdW0gaGVhZGVyIGxlbmd0aCAqLw0KLSNkZWZpbmUgUkFESU9UQVBfVkVSU0lP
Tl9PRkZTRVQJMAkvKiBvZmZzZXQgb2YgdmVyc2lvbiBmaWVsZCAqLw0KLSNkZWZpbmUgUkFESU9U
QVBfTEVOR1RIX09GRlNFVAkyCS8qIG9mZnNldCBvZiBsZW5ndGggZmllbGQgKi8NCi0jZGVmaW5l
IFJBRElPVEFQX1BSRVNFTlRfT0ZGU0VUCTQJLyogb2Zmc2V0IG9mICJwcmVzZW50IiBmaWVsZCAq
Lw0KLQ0KLWVudW0gaWVlZTgwMjExX3JhZGlvdGFwX3R5cGUgew0KLSAgICBJRUVFODAyMTFfUkFE
SU9UQVBfVFNGVCA9IDAsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyA9IDEsDQotICAg
IElFRUU4MDIxMV9SQURJT1RBUF9SQVRFID0gMiwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQX0NI
QU5ORUwgPSAzLA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfRkhTUyA9IDQsDQotICAgIElFRUU4
MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMID0gNSwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQ
X0RCTV9BTlROT0lTRSA9IDYsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFkg
PSA3LA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT04gPSA4LA0KLSAgICBJ
RUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT04gPSA5LA0KLSAgICBJRUVFODAyMTFf
UkFESU9UQVBfREJNX1RYX1BPV0VSID0gMTAsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9BTlRF
Tk5BID0gMTEsDQotICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgPSAxMiwNCi0g
ICAgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFID0gMTMsDQotICAgIElFRUU4MDIxMV9S
QURJT1RBUF9SWF9GTEFHUyA9IDE0LA0KLSAgICBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwg
PSAxOCwNCi0gICAgSUVFRTgwMjExX1JBRElPVEFQX0VYVCA9IDMxDQotfTsNCi0NCi0vKiBDaGFu
bmVsIGZsYWdzLiAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fVFVSQk8JMHgwMDAxMAkvKiBU
dXJibyBjaGFubmVsICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9DQ0sJMHgwMDAyMAkvKiBD
Q0sgY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fT0ZETQkweDAwMDQwCS8qIE9G
RE0gY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fMkdIWgkweDAwMDgwCS8qIDIg
R0h6IHNwZWN0cnVtIGNoYW5uZWwuICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl81R0haCTB4
MDAxMDAJLyogNSBHSHogc3BlY3RydW0gY2hhbm5lbCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NI
QU5fUEFTU0lWRQkweDAwMjAwCS8qIE9ubHkgcGFzc2l2ZSBzY2FuIGFsbG93ZWQgKi8NCi0jZGVm
aW5lCUlFRUU4MDIxMV9DSEFOX0RZTgkweDAwNDAwCS8qIER5bmFtaWMgQ0NLLU9GRE0gY2hhbm5l
bCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fR0ZTSwkweDAwODAwCS8qIEdGU0sgY2hhbm5l
bCAoRkhTUyBQSFkpICovDQotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9HU00JMHgwMTAwMAkvKiA5
MDAgTUh6IHNwZWN0cnVtIGNoYW5uZWwgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1NUVVJC
TwkweDAyMDAwCS8qIDExYSBzdGF0aWMgdHVyYm8gY2hhbm5lbCBvbmx5ICovDQotI2RlZmluZQlJ
RUVFODAyMTFfQ0hBTl9IQUxGCTB4MDQwMDAJLyogSGFsZiByYXRlIGNoYW5uZWwgKi8NCi0jZGVm
aW5lCUlFRUU4MDIxMV9DSEFOX1FVQVJURVIJMHgwODAwMAkvKiBRdWFydGVyIHJhdGUgY2hhbm5l
bCAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fSFQyMAkweDEwMDAwCS8qIEhUIDIwIGNoYW5u
ZWwgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUNDBVCTB4MjAwMDAJLyogSFQgNDAgY2hh
bm5lbCB3LyBleHQgYWJvdmUgKi8NCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUNDBECTB4NDAw
MDAJLyogSFQgNDAgY2hhbm5lbCB3LyBleHQgYmVsb3cgKi8NCi0NCiAvKg0KICAqIFVzZWZ1bCBj
b21iaW5hdGlvbnMgb2YgY2hhbm5lbCBjaGFyYWN0ZXJpc3RpY3MuDQogICovDQpAQCAtMTMzLDMx
ICs4MSw2IEBAIGVudW0gaWVlZTgwMjExX3JhZGlvdGFwX3R5cGUgew0KICNkZWZpbmUJSUVFRTgw
MjExX0NIQU5fMTA4UFVSRUcgXA0KIAkoSUVFRTgwMjExX0NIQU5fUFVSRUcgfCBJRUVFODAyMTFf
Q0hBTl9UVVJCTykNCiANCi0vKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTICovDQotI2Rl
ZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9DRlAJMHgwMQkvKiBzZW50L3JlY2VpdmVkDQotCQkJ
CQkJICogZHVyaW5nIENGUA0KLQkJCQkJCSAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQ
X0ZfU0hPUlRQUkUJMHgwMgkvKiBzZW50L3JlY2VpdmVkDQotCQkJCQkJICogd2l0aCBzaG9ydA0K
LQkJCQkJCSAqIHByZWFtYmxlDQotCQkJCQkJICovDQotI2RlZmluZQlJRUVFODAyMTFfUkFESU9U
QVBfRl9XRVAJMHgwNAkvKiBzZW50L3JlY2VpdmVkDQotCQkJCQkJICogd2l0aCBXRVAgZW5jcnlw
dGlvbg0KLQkJCQkJCSAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRwkweDA4
CS8qIHNlbnQvcmVjZWl2ZWQNCi0JCQkJCQkgKiB3aXRoIGZyYWdtZW50YXRpb24NCi0JCQkJCQkg
Ki8NCi0jZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUwkweDEwCS8qIGZyYW1lIGluY2x1
ZGVzIEZDUyAqLw0KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfREFUQVBBRAkweDIwCS8q
IGZyYW1lIGhhcyBwYWRkaW5nIGJldHdlZW4NCi0JCQkJCQkgKiA4MDIuMTEgaGVhZGVyIGFuZCBw
YXlsb2FkDQotCQkJCQkJICogKHRvIDMyLWJpdCBib3VuZGFyeSkNCi0JCQkJCQkgKi8NCi0jZGVm
aW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUwkweDQwCS8qIGRvZXMgbm90IHBhc3MgRkNT
IGNoZWNrICovDQotI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVEdJCTB4ODAJLyog
SFQgc2hvcnQgR0kgKi8NCi0NCi0vKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICov
DQotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURQTENQCQkweDAwMDIgLyogYmFk
IFBMQ1AgKi8NCi0NCiAvKiBYWFggbmVlZCBtYXggYXJyYXkgc2l6ZSAqLw0KIHN0YXRpYyBjb25z
dCBpbnQgaWVlZTgwMjExX2h0cmF0ZXNbMTZdID0gew0KIAkxMywJCS8qIElGTV9JRUVFODAyMTFf
TUNTMCAqLw0KQEAgLTIyMSw5ICsxNDQsNiBAQCBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX3hjaGFu
bmVsX2ZsYWdzX3F1DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDIw
ID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDQwdSA9IC0x
Ow0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfaHQ0MGQgPSAtMTsNCi0j
aWYgMA0KLXN0YXRpYyBpbnQgaGZfcmFkaW90YXBfeGNoYW5uZWxfbWF4cG93ZXIgPSAtMTsNCi0j
ZW5kaWYNCiBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX2Zoc3NfaG9wc2V0ID0gLTE7DQogc3RhdGlj
IGludCBoZl9yYWRpb3RhcF9maHNzX3BhdHRlcm4gPSAtMTsNCiBzdGF0aWMgaW50IGhmX3JhZGlv
dGFwX2RhdGFyYXRlID0gLTE7DQpAQCAtMjM1LDYgKzE1NSwxMSBAQCBzdGF0aWMgaW50IGhmX3Jh
ZGlvdGFwX2RiX2FudG5vaXNlID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF90eF9hdHRl
bnVhdGlvbiA9IC0xOw0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfZGJfdHhfYXR0ZW51YXRpb24g
PSAtMTsNCiBzdGF0aWMgaW50IGhmX3JhZGlvdGFwX3R4cG93ZXIgPSAtMTsNCitzdGF0aWMgaW50
IGhmX3JhZGlvdGFwX3ZlbmRvcl9ucyA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90YXBfdmVu
X291aSA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90YXBfdmVuX3N1Ym5zID0gLTE7DQorc3Rh
dGljIGludCBoZl9yYWRpb3RhcF92ZW5fc2tpcCA9IC0xOw0KK3N0YXRpYyBpbnQgaGZfcmFkaW90
YXBfdmVuX2RhdGEgPSAtMTsNCiANCiAvKiAiUHJlc2VudCIgZmxhZ3MgKi8NCiBzdGF0aWMgaW50
IGhmX3JhZGlvdGFwX3ByZXNlbnRfdHNmdCA9IC0xOw0KQEAgLTI1NCw2ICsxNzksOCBAQCBzdGF0
aWMgaW50IGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50bm9pDQogc3RhdGljIGludCBoZl9yYWRp
b3RhcF9wcmVzZW50X2hkcmZjcyA9IC0xOw0KIHN0YXRpYyBpbnQgaGZfcmFkaW90YXBfcHJlc2Vu
dF9yeGZsYWdzID0gLTE7DQogc3RhdGljIGludCBoZl9yYWRpb3RhcF9wcmVzZW50X3hjaGFubmVs
ID0gLTE7DQorc3RhdGljIGludCBoZl9yYWRpb3RhcF9wcmVzZW50X3J0YXBfbnMgPSAtMTsNCitz
dGF0aWMgaW50IGhmX3JhZGlvdGFwX3ByZXNlbnRfdmVuZG9yX25zID0gLTE7DQogc3RhdGljIGlu
dCBoZl9yYWRpb3RhcF9wcmVzZW50X2V4dCA9IC0xOw0KIA0KIC8qICJwcmVzZW50LmZsYWdzIiBm
bGFncyAqLw0KQEAgLTI3Nyw2ICsyMDQsNyBAQCBzdGF0aWMgZ2ludCBldHRfcmFkaW90YXBfZmxh
Z3MgPSAtMTsNCiBzdGF0aWMgZ2ludCBldHRfcmFkaW90YXBfcnhmbGFncyA9IC0xOw0KIHN0YXRp
YyBnaW50IGV0dF9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzID0gLTE7DQogc3RhdGljIGdpbnQgZXR0
X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzID0gLTE7DQorc3RhdGljIGdpbnQgZXR0X3JhZGlvdGFw
X3ZlbmRvciA9IC0xOw0KIA0KIHN0YXRpYyBkaXNzZWN0b3JfaGFuZGxlX3QgaWVlZTgwMjExX2hh
bmRsZTsNCiBzdGF0aWMgZGlzc2VjdG9yX2hhbmRsZV90IGllZWU4MDIxMV9kYXRhcGFkX2hhbmRs
ZTsNCkBAIC0zMDksMjUgKzIzNywyMSBAQCBkaXNzZWN0X3JhZGlvdGFwKHR2YnVmZl90ICp0dmIs
IHBhY2tldF9pDQogICogICAgZGlzc2VjdG9ycywgc3VjaCBhcyB0Y3BkdW1wKDgpLCBleHBlY3Qg
dGhlIHBhZGRpbmcuDQogICovDQogDQotLyoNCi0gKiBSZXR1cm5zIHRoZSBhbW91bnQgcmVxdWly
ZWQgdG8gYWxpZ24gIm9mZnNldCIgd2l0aCAid2lkdGgiDQotICovDQotI2RlZmluZSBBTElHTl9P
RkZTRVQob2Zmc2V0LCB3aWR0aCkgXA0KLSAgICAoICgoKG9mZnNldCkgKyAoKHdpZHRoKSAtIDEp
KSAmICh+KCh3aWR0aCkgLSAxKSkpIC0gb2Zmc2V0ICkNCi0NCiANCiB2b2lkDQogY2FwdHVyZV9y
YWRpb3RhcChjb25zdCBndWNoYXIgKnBkLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBwYWNrZXRfY291
bnRzICpsZCkNCiB7DQogICAgIGd1aW50MTYgaXRfbGVuOw0KLSAgICBndWludDMyIHByZXNlbnQ7
DQorICAgIGd1aW50MzIgcHJlc2VudCwgeHByZXNlbnQ7DQogICAgIGd1aW50OCByZmxhZ3M7DQor
ICAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpoZHI7DQogDQotICAgIGlmKCFC
WVRFU19BUkVfSU5fRlJBTUUob2Zmc2V0LCBsZW4sIFJBRElPVEFQX01JTl9IRUFERVJfTEVOKSkg
ew0KKyAgICBpZighQllURVNfQVJFX0lOX0ZSQU1FKG9mZnNldCwgbGVuLCBzaXplb2Yoc3RydWN0
IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpKSkgew0KICAgICAgICAgbGQtPm90aGVyICsrOw0K
ICAgICAgICAgcmV0dXJuOw0KICAgICB9DQotICAgIGl0X2xlbiA9IHBsZXRvaHMoJnBkW1JBRElP
VEFQX0xFTkdUSF9PRkZTRVRdKTsNCisgICAgaGRyID0gKHZvaWQgKilwZDsNCisgICAgaXRfbGVu
ID0gcGxldG9ocygmaGRyLT5pdF9sZW4pOw0KICAgICBpZighQllURVNfQVJFX0lOX0ZSQU1FKG9m
ZnNldCwgbGVuLCBpdF9sZW4pKSB7DQogICAgICAgICBsZC0+b3RoZXIgKys7DQogICAgICAgICBy
ZXR1cm47DQpAQCAtMzM5LDI4ICsyNjMsNDggQEAgY2FwdHVyZV9yYWRpb3RhcChjb25zdCBndWNo
YXIgKnBkLCBpbnQgbw0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQogDQotICAgIGlmKGl0X2xl
biA8IFJBRElPVEFQX01JTl9IRUFERVJfTEVOKSB7DQorICAgIGlmKGl0X2xlbiA8IHNpemVvZihz
dHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlcikpIHsNCiAgICAgICAgIC8qIEhlYWRlciBs
ZW5ndGggaXMgc2hvcnRlciB0aGFuIGZpeGVkLWxlbmd0aCBwb3J0aW9uIG9mIGhlYWRlciAqLw0K
ICAgICAgICAgbGQtPm90aGVyICsrOw0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQogDQotICAg
IHByZXNlbnQgPSBwbGV0b2hsKCZwZFtSQURJT1RBUF9QUkVTRU5UX09GRlNFVF0pOw0KLSAgICBv
ZmZzZXQgKz0gUkFESU9UQVBfTUlOX0hFQURFUl9MRU47DQotICAgIGl0X2xlbiAtPSBSQURJT1RB
UF9NSU5fSEVBREVSX0xFTjsNCisgICAgcHJlc2VudCA9IHBsZXRvaGwoJmhkci0+aXRfcHJlc2Vu
dCk7DQorICAgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFk
ZXIpOw0KKyAgICBpdF9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVh
ZGVyKTsNCisNCisgICAgLyogc2tpcCBvdmVyIG90aGVyIHByZXNlbnQgYml0bWFwcyAqLw0KKyAg
ICB4cHJlc2VudCA9IHByZXNlbnQ7DQorICAgIHdoaWxlICh4cHJlc2VudCAmIEJJVChJRUVFODAy
MTFfUkFESU9UQVBfRVhUKSkgew0KKyAgICAgICAgaWYgKCFCWVRFU19BUkVfSU5fRlJBTUUob2Zm
c2V0LCA0LCBpdF9sZW4pKSB7DQorICAgICAgICAgICAgbGQtPm90aGVyICsrOw0KKyAgICAgICAg
ICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIHhwcmVzZW50ID0gcGxldG9obChwZCAr
IG9mZnNldCk7DQorICAgICAgICBvZmZzZXQgKz0gNDsNCisgICAgICAgIGl0X2xlbiAtPSA0Ow0K
KyAgICB9DQogDQogICAgIHJmbGFncyA9IDA7DQogDQogICAgIC8qDQotICAgICAqIElFRUU4MDIx
MV9SQURJT1RBUF9UU0ZUIGlzIHRoZSBsb3dlc3Qtb3JkZXIgYml0Lg0KKyAgICAgKiBJRUVFODAy
MTFfUkFESU9UQVBfVFNGVCBpcyB0aGUgbG93ZXN0LW9yZGVyIGJpdCwNCisgICAgICoganVzdCBz
a2lwIG92ZXIgaXQuDQogICAgICAqLw0KICAgICBpZiAocHJlc2VudCAmIEJJVChJRUVFODAyMTFf
UkFESU9UQVBfVFNGVCkpIHsNCisgICAgICAgIC8qIGFsaWduIGl0IHByb3Blcmx5ICovDQorICAg
ICAgICBpZiAob2Zmc2V0ICYgNykgew0KKyAgICAgICAgICAgIGludCBwYWQgPSA4IC0gKG9mZnNl
dCAmIDcpOw0KKyAgICAgICAgICAgIG9mZnNldCArPSBwYWQ7DQorICAgICAgICAgICAgaXRfbGVu
IC09IHBhZDsNCisgICAgICAgIH0NCisNCiAgICAgCWlmIChpdF9sZW4gPCA4KSB7DQogCSAgICAv
KiBObyByb29tIGluIGhlYWRlciBmb3IgdGhpcyBmaWVsZC4gKi8NCiAJICAgIGxkLT5vdGhlciAr
KzsNCiAJICAgIHJldHVybjsNCiAJfQ0KLQkvKiBUaGF0IGZpZWxkIGlzIHByZXNlbnQsIGFuZCBp
dCdzIDggYml0cyBsb25nLiAqLw0KKwkvKiBUaGF0IGZpZWxkIGlzIHByZXNlbnQsIGFuZCBpdCdz
IDggYnl0ZXMgbG9uZy4gKi8NCiAJb2Zmc2V0ICs9IDg7DQogCWl0X2xlbiAtPSA4Ow0KICAgICB9
DQpAQCAtNDMxLDExNSArMzc1LDEwOSBAQCBwcm90b19yZWdpc3Rlcl9yYWRpb3RhcCh2b2lkKQ0K
IAkgIkxlbmd0aCBvZiBoZWFkZXIgaW5jbHVkaW5nIHZlcnNpb24sIHBhZCwgbGVuZ3RoIGFuZCBk
YXRhIGZpZWxkcyIsIEhGSUxMIH0gfSwNCiAgICAgeyAmaGZfcmFkaW90YXBfcHJlc2VudCwNCiAg
ICAgICAgeyAiUHJlc2VudCBmbGFncyIsICJyYWRpb3RhcC5wcmVzZW50IiwNCi0JIEZUX1VJTlQz
MiwgQkFTRV9IRVgsIE5VTEwsIDB4MCwgIkJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBmaWVsZHMg
YXJlIHByZXNlbnQiLCBIRklMTCB9IH0sDQorCSBGVF9OT05FLCBCQVNFX05PTkUsIE5VTEwsIDB4
MCwgIkJpdG1hc2sgaW5kaWNhdGluZyB3aGljaCBmaWVsZHMgYXJlIHByZXNlbnQiLCBIRklMTCB9
IH0sDQogDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1RTRlQgICAgICAgICAgICAgICAgICAweDAw
MDAwMDAxDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0ZMQUdTICAgICAgICAgICAgICAgICAweDAw
MDAwMDAyDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1JBVEUgICAgICAgICAgICAgICAgICAweDAw
MDAwMDA0DQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0NIQU5ORUwgICAgICAgICAgICAgICAweDAw
MDAwMDA4DQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0ZIU1MgICAgICAgICAgICAgICAgICAweDAw
MDAwMDEwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9BTlRTSUdOQUwgICAgICAgICAweDAw
MDAwMDIwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9BTlROT0lTRSAgICAgICAgICAweDAw
MDAwMDQwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0xPQ0tfUVVBTElUWSAgICAgICAgICAweDAw
MDAwMDgwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1RYX0FUVEVOVUFUSU9OICAgICAgICAweDAw
MDAwMTAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX1RYX0FUVEVOVUFUSU9OICAgICAweDAw
MDAwMjAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCTV9UWF9BVFRFTlVBVElPTiAgICAweDAw
MDAwNDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0FOVEVOTkEgICAgICAgICAgICAgICAweDAw
MDAwODAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX0FOVFNJR05BTCAgICAgICAgICAweDAw
MDAxMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0RCX0FOVE5PSVNFICAgICAgICAgICAweDAw
MDAyMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1JYX0ZMQUdTICAgICAgICAgICAgICAweDAw
MDA0MDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX1hDSEFOTkVMICAgICAgICAgICAgICAweDAw
MDQwMDAwDQotI2RlZmluZSBSQURJT1RBUF9NQVNLX0VYVCAgICAgICAgICAgICAgICAgICAweDgw
MDAwMDAwDQorI2RlZmluZSBSQURJT1RBUF9NQVNLKG5hbWUpCUJJVChJRUVFODAyMTFfUkFESU9U
QVBfICMjbmFtZSkNCiANCiAgICAgLyogQm9vbGVhbiAncHJlc2VudCcgZmxhZ3MgKi8NCiAgICAg
eyAmaGZfcmFkaW90YXBfcHJlc2VudF90c2Z0LA0KICAgICAgIHsgIlRTRlQiLCAicmFkaW90YXAu
cHJlc2VudC50c2Z0IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfVFNG
VCwNCisJRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soVFNGVCksDQogCSJTcGVj
aWZpZXMgaWYgdGhlIFRpbWUgU3luY2hyb25pemF0aW9uIEZ1bmN0aW9uIFRpbWVyIGZpZWxkIGlz
IHByZXNlbnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfZmxh
Z3MsDQogICAgICAgeyAiRmxhZ3MiLCAicmFkaW90YXAucHJlc2VudC5mbGFncyIsDQotCUZUX0JP
T0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0ZMQUdTLA0KKwlGVF9CT09MRUFOLCAzMiwg
TlVMTCwgUkFESU9UQVBfTUFTSyhGTEFHUyksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGNoYW5uZWwg
ZmxhZ3MgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90
YXBfcHJlc2VudF9yYXRlLA0KICAgICAgIHsgIlJhdGUiLCAicmFkaW90YXAucHJlc2VudC5yYXRl
IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfUkFURSwNCisJRlRfQk9P
TEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soUkFURSksDQogCSJTcGVjaWZpZXMgaWYgdGhl
IHRyYW5zbWl0L3JlY2VpdmUgcmF0ZSBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0K
ICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2NoYW5uZWwsDQogICAgICAgeyAiQ2hhbm5lbCIs
ICJyYWRpb3RhcC5wcmVzZW50LmNoYW5uZWwiLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFE
SU9UQVBfTUFTS19DSEFOTkVMLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFT
SyhDSEFOTkVMKSwNCiAJIlNwZWNpZmllcyBpZiB0aGUgdHJhbnNtaXQvcmVjZWl2ZSBmcmVxdWVu
Y3kgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90YXBf
cHJlc2VudF9maHNzLA0KICAgICAgIHsgIkZIU1MiLCAicmFkaW90YXAucHJlc2VudC5maHNzIiwN
Ci0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfRkhTUywNCisJRlRfQk9PTEVB
TiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soRkhTUyksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGhv
cCBzZXQgYW5kIHBhdHRlcm4gaXMgcHJlc2VudCBmb3IgZnJlcXVlbmN5IGhvcHBpbmcgcmFkaW9z
IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2RibV9hbnRzaWdu
YWwsDQogICAgICAgeyAiREJNIEFudGVubmEgU2lnbmFsIiwgInJhZGlvdGFwLnByZXNlbnQuZGJt
X2FudHNpZ25hbCIsDQotCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0RCTV9B
TlRTSUdOQUwsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKERCTV9BTlRT
SUdOQUwpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBhbnRlbm5hIHNpZ25hbCBzdHJlbmd0aCBpbiBk
Qm0gaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90YXBfcHJlc2Vu
dF9kYm1fYW50bm9pc2UsDQogICAgICAgeyAiREJNIEFudGVubmEgTm9pc2UiLCAicmFkaW90YXAu
cHJlc2VudC5kYm1fYW50bm9pc2UiLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBf
TUFTS19EQk1fQU5UTk9JU0UsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNL
KERCTV9BTlROT0lTRSksDQogCSJTcGVjaWZpZXMgaWYgdGhlIFJGIG5vaXNlIHBvd2VyIGF0IGFu
dGVubmEgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAmaGZfcmFkaW90
YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQogICAgICAgeyAiTG9jayBRdWFsaXR5IiwgInJhZGlv
dGFwLnByZXNlbnQubG9ja19xdWFsaXR5IiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElP
VEFQX01BU0tfTE9DS19RVUFMSVRZLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBf
TUFTSyhMT0NLX1FVQUxJVFkpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBzaWduYWwgcXVhbGl0eSBm
aWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVz
ZW50X3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIlRYIEF0dGVudWF0aW9uIiwgInJhZGlvdGFw
LnByZXNlbnQudHhfYXR0ZW51YXRpb24iLA0KLQlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9U
QVBfTUFTS19UWF9BVFRFTlVBVElPTiwNCisJRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQ
X01BU0soVFhfQVRURU5VQVRJT04pLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSB0cmFuc21pdCBwb3dl
ciBmcm9tIG1heCBwb3dlciBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7
ICZoZl9yYWRpb3RhcF9wcmVzZW50X2RiX3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIkRCIFRY
IEF0dGVudWF0aW9uIiwgInJhZGlvdGFwLnByZXNlbnQuZGJfdHhfYXR0ZW51YXRpb24iLA0KLQlG
VF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19EQl9UWF9BVFRFTlVBVElPTiwNCisJ
RlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0soREJfVFhfQVRURU5VQVRJT04pLA0K
IAkiU3BlY2lmaWVzIGlmIHRoZSB0cmFuc21pdCBwb3dlciBmcm9tIG1heCBwb3dlciAoaW4gZEIp
IGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3By
ZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KICAgICAgIHsgIkRCTSBUWCBBdHRlbnVhdGlvbiIs
ICJyYWRpb3RhcC5wcmVzZW50LmRibV90eF9hdHRlbnVhdGlvbiIsDQotCUZUX0JPT0xFQU4sIDMy
LCBOVUxMLCBSQURJT1RBUF9NQVNLX0RCTV9UWF9BVFRFTlVBVElPTiwNCisJRlRfQk9PTEVBTiwg
MzIsIE5VTEwsIFJBRElPVEFQX01BU0soREJfVFhfQVRURU5VQVRJT04pLA0KIAkiU3BlY2lmaWVz
IGlmIHRoZSB0cmFuc21pdCBwb3dlciBmcm9tIG1heCBwb3dlciAoaW4gZEJtKSBmaWVsZCBpcyBw
cmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRpb3RhcF9wcmVzZW50X2FudGVu
bmEsDQogICAgICAgeyAiQW50ZW5uYSIsICJyYWRpb3RhcC5wcmVzZW50LmFudGVubmEiLA0KLQlG
VF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19BTlRFTk5BLA0KKwlGVF9CT09MRUFO
LCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTSyhBTlRFTk5BKSwNCiAJIlNwZWNpZmllcyBpZiB0aGUg
YW50ZW5uYSBudW1iZXIgZmllbGQgaXMgcHJlc2VudCIsIEhGSUxMIH0gfSwNCiANCiAgICAgeyAm
aGZfcmFkaW90YXBfcHJlc2VudF9kYl9hbnRzaWduYWwsDQogICAgICAgeyAiREIgQW50ZW5uYSBT
aWduYWwiLCAicmFkaW90YXAucHJlc2VudC5kYl9hbnRzaWduYWwiLA0KLQlGVF9CT09MRUFOLCAz
MiwgTlVMTCwgUkFESU9UQVBfTUFTS19EQl9BTlRTSUdOQUwsDQorCUZUX0JPT0xFQU4sIDMyLCBO
VUxMLCBSQURJT1RBUF9NQVNLKERCX0FOVFNJR05BTCksDQogCSJTcGVjaWZpZXMgaWYgdGhlIFJG
IHNpZ25hbCBwb3dlciBhdCBhbnRlbm5hIGluIGRCIGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9
IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50bm9pc2UsDQogICAgICAg
eyAiREIgQW50ZW5uYSBOb2lzZSIsICJyYWRpb3RhcC5wcmVzZW50LmRiX2FudG5vaXNlIiwNCi0J
RlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfREJfQU5UTk9JU0UsDQorCUZUX0JP
T0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKERCX0FOVE5PSVNFKSwNCiAJIlNwZWNpZmll
cyBpZiB0aGUgUkYgc2lnbmFsIHBvd2VyIGF0IGFudGVubmEgaW4gZEJtIGZpZWxkIGlzIHByZXNl
bnQiLCBIRklMTCB9IH0sDQogDQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfcnhmbGFncywN
CiAgICAgICB7ICJSWCBmbGFncyIsICJyYWRpb3RhcC5wcmVzZW50LnJ4ZmxhZ3MiLA0KLQlGVF9C
T09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTS19SWF9GTEFHUywNCisJRlRfQk9PTEVBTiwg
MzIsIE5VTEwsIFJBRElPVEFQX01BU0soUlhfRkxBR1MpLA0KIAkiU3BlY2lmaWVzIGlmIHRoZSBS
WCBmbGFncyBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICB7ICZoZl9yYWRp
b3RhcF9wcmVzZW50X2hkcmZjcywNCiAgICAgICB7ICJGQ1MgaW4gaGVhZGVyIiwgInJhZGlvdGFw
LnByZXNlbnQuZmNzIiwNCi0JRlRfQk9PTEVBTiwgMzIsIE5VTEwsIFJBRElPVEFQX01BU0tfUlhf
RkxBR1MsDQorCUZUX0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLKFJYX0ZMQUdTKSwN
CiAJIlNwZWNpZmllcyBpZiB0aGUgRkNTIGZpZWxkIGlzIHByZXNlbnQiLCBIRklMTCB9IH0sDQog
DQogICAgIHsgJmhmX3JhZGlvdGFwX3ByZXNlbnRfeGNoYW5uZWwsDQogICAgICAgeyAiQ2hhbm5l
bCsiLCAicmFkaW90YXAucHJlc2VudC54Y2hhbm5lbCIsDQotCUZUX0JPT0xFQU4sIDMyLCBOVUxM
LCBSQURJT1RBUF9NQVNLX1hDSEFOTkVMLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9U
QVBfTUFTSyhYQ0hBTk5FTCksDQogCSJTcGVjaWZpZXMgaWYgdGhlIGV4dGVuZGVkIGNoYW5uZWwg
aW5mbyBmaWVsZCBpcyBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KKyAgICB7ICZoZl9yYWRpb3Rh
cF9wcmVzZW50X3J0YXBfbnMsDQorICAgICAgeyAiUmFkaW90YXAgTlMgbmV4dCIsICJyYWRpb3Rh
cC5wcmVzZW50LnJ0YXBfbnMiLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFT
SyhSQURJT1RBUF9OQU1FU1BBQ0UpLA0KKwkiU3BlY2lmaWVzIGEgcmVzZXQgdG8gdGhlIHJhZGlv
dGFwIG5hbWVzcGFjZSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBfcHJlc2Vu
dF92ZW5kb3JfbnMsDQorICAgICAgeyAiVmVuZG9yIE5TIG5leHQiLCAicmFkaW90YXAucHJlc2Vu
dC52ZW5kb3JfbnMiLA0KKwlGVF9CT09MRUFOLCAzMiwgTlVMTCwgUkFESU9UQVBfTUFTSyhWRU5E
T1JfTkFNRVNQQUNFKSwNCisJIlNwZWNpZmllcyB0aGF0IHRoZSBuZXh0IGJpdG1hcCBpcyBpbiBh
IHZlbmRvciBuYW1lc3BhY2UiLCBIRklMTCB9IH0sDQorDQogICAgIHsgJmhmX3JhZGlvdGFwX3By
ZXNlbnRfZXh0LA0KICAgICAgIHsgIkV4dCIsICJyYWRpb3RhcC5wcmVzZW50LmV4dCIsDQotCUZU
X0JPT0xFQU4sIDMyLCBOVUxMLCBSQURJT1RBUF9NQVNLX0VYVCwNCisJRlRfQk9PTEVBTiwgMzIs
IE5VTEwsIFJBRElPVEFQX01BU0soRVhUKSwNCiAJIlNwZWNpZmllcyBpZiB0aGVyZSBhcmUgYW55
IGV4dGVuc2lvbnMgdG8gdGhlIGhlYWRlciBwcmVzZW50IiwgSEZJTEwgfSB9LA0KIA0KICAgICAv
KiBCb29sZWFuICdwcmVzZW50LmZsYWdzJyBmbGFncyAqLw0KQEAgLTcxOSwxMSArNjU3LDYgQEAg
cHJvdG9fcmVnaXN0ZXJfcmFkaW90YXAodm9pZCkNCiAgICAgeyAmaGZfcmFkaW90YXBfeGNoYW5u
ZWxfZmxhZ3NfaHQ0MGQsDQogICAgICAgIHsgIkhUIENoYW5uZWwgKDQwTUh6IENoYW5uZWwgV2lk
dGggd2l0aCBFeHRlbnNpb24gY2hhbm5lbCBiZWxvdykiLCAicmFkaW90YXAueGNoYW5uZWwudHlw
ZS5odDQwZCIsDQogCSBGVF9CT09MRUFOLCAyNCwgTlVMTCwgMHg0MDAwMCwgIkNoYW5uZWwgVHlw
ZSBIVC80MC0iLCBIRklMTCB9IH0sDQotI2lmIDANCi0gICAgeyAmaGZfcmFkaW90YXBfeGNoYW5u
ZWxfbWF4cG93ZXIsDQotICAgICAgeyAiTWF4IHRyYW5zbWl0IHBvd2VyIiwgInJhZGlvdGFwLnhj
aGFubmVsLm1heHBvd2VyIiwNCi0JRlRfVUlOVDMyLCBCQVNFX0RFQywgTlVMTCwgMHgwLCAiIiwg
SEZJTEwgfSB9LA0KLSNlbmRpZg0KICAgICB7ICZoZl9yYWRpb3RhcF9maHNzX2hvcHNldCwNCiAg
ICAgICB7ICJGSFNTIEhvcCBTZXQiLCAicmFkaW90YXAuZmhzcy5ob3BzZXQiLA0KIAlGVF9VSU5U
OCwgQkFTRV9ERUMsIE5VTEwsICAweDAsDQpAQCAtNzc5LDYgKzcxMiwzMSBAQCBwcm90b19yZWdp
c3Rlcl9yYWRpb3RhcCh2b2lkKQ0KIAlGVF9JTlQzMiwgQkFTRV9ERUMsIE5VTEwsIDB4MCwNCiAJ
IlRyYW5zbWl0IHBvd2VyIGluIGRlY2liZWxzIHBlciBvbmUgbWlsbGl3YXR0IChkQm0pIiwgSEZJ
TEwgfSB9LA0KIA0KKyAgICB7ICZoZl9yYWRpb3RhcF92ZW5kb3JfbnMsDQorICAgICAgeyAiVmVu
ZG9yIG5hbWVzcGFjZSIsICJyYWRpb3RhcC52ZW5kb3JfbnMiLA0KKwlGVF9OT05FLCBCQVNFX05P
TkUsIE5VTEwsIDB4MCwNCisJIlZlbmRvciBuYW1lc3BhY2UiLCBIRklMTCB9IH0sDQorDQorICAg
IHsgJmhmX3JhZGlvdGFwX3Zlbl9vdWksDQorICAgICAgeyAiVmVuZG9yIE9VSSIsICJyYWRpb3Rh
cC52ZW5kb3Jfb3VpIiwNCisJRlRfQllURVMsIEJBU0VfTk9ORSwgTlVMTCwgMHgwLA0KKwkiVmVu
ZG9yIE9VSSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBfdmVuX3N1Ym5zLA0K
KyAgICAgIHsgIlZlbmRvciBzdWIgbmFtZXNwYWNlIiwgInJhZGlvdGFwLnZlbmRvcl9zdWJucyIs
DQorCUZUX1VJTlQ4LCBCQVNFX0RFQywgTlVMTCwgMHgwLA0KKwkiVmVuZG9yLXNwZWNpZmllZCBz
dWIgbmFtZXNwYWNlIiwgSEZJTEwgfSB9LA0KKw0KKyAgICB7ICZoZl9yYWRpb3RhcF92ZW5fc2tp
cCwNCisgICAgICB7ICJWZW5kb3IgZGF0YSBsZW5ndGgiLCAicmFkaW90YXAudmVuZG9yX2RhdGFf
bGVuIiwNCisJRlRfVUlOVDE2LCBCQVNFX0RFQywgTlVMTCwgMHgwLA0KKwkiTGVuZ3RoIG9mIHZl
bmRvci1zcGVjaWZpZWQgZGF0YSIsIEhGSUxMIH0gfSwNCisNCisgICAgeyAmaGZfcmFkaW90YXBf
dmVuX2RhdGEsDQorICAgICAgeyAiVmVuZG9yIGRhdGEiLCAicmFkaW90YXAudmVuZG9yX2RhdGEi
LA0KKwlGVF9OT05FLCBCQVNFX05PTkUsIE5VTEwsIDB4MCwNCisJIlZlbmRvci1zcGVjaWZpZWQg
ZGF0YSIsIEhGSUxMIH0gfSwNCisNCiAgICAgLyogU3BlY2lhbCB2YXJpYWJsZXMgKi8NCiAgICAg
eyAmaGZfcmFkaW90YXBfZmNzX2JhZCwNCiAgICAgICB7ICJCYWQgRkNTIiwgInJhZGlvdGFwLmZj
c19iYWQiLA0KQEAgLTc5Miw3ICs3NTAsOCBAQCBwcm90b19yZWdpc3Rlcl9yYWRpb3RhcCh2b2lk
KQ0KICAgICAmZXR0X3JhZGlvdGFwX2ZsYWdzLA0KICAgICAmZXR0X3JhZGlvdGFwX3J4ZmxhZ3Ms
DQogICAgICZldHRfcmFkaW90YXBfY2hhbm5lbF9mbGFncywNCi0gICAgJmV0dF9yYWRpb3RhcF94
Y2hhbm5lbF9mbGFncw0KKyAgICAmZXR0X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzLA0KKyAgICAm
ZXR0X3JhZGlvdGFwX3ZlbmRvciwNCiAgIH07DQogICBtb2R1bGVfdCAqcmFkaW90YXBfbW9kdWxl
Ow0KIA0KQEAgLTgxOCwzNCArNzc3LDQ1IEBAIGRpc3NlY3RfcmFkaW90YXAodHZidWZmX3QgKnR2
YiwgcGFja2V0X2kNCiAgICAgcHJvdG9fdHJlZSAqcmFkaW90YXBfdHJlZSA9IE5VTEw7DQogICAg
IHByb3RvX3RyZWUgKnB0LCAqcHJlc2VudF90cmVlID0gTlVMTDsNCiAgICAgcHJvdG9fdHJlZSAq
ZnQsICpmbGFnc190cmVlID0gTlVMTDsNCi0gICAgcHJvdG9faXRlbSAqdGkgPSBOVUxMLCAqaGlk
ZGVuX2l0ZW07DQotICAgIGludCBhbGlnbl9vZmZzZXQsIG9mZnNldDsNCisgICAgcHJvdG9faXRl
bSAqdGkgPSBOVUxMOw0KKyAgICBwcm90b19pdGVtICpoaWRkZW5faXRlbTsNCisgICAgaW50IG9m
ZnNldDsNCiAgICAgdHZidWZmX3QgKm5leHRfdHZiOw0KLSAgICBndWludDMyIHZlcnNpb247DQot
ICAgIGd1aW50IGxlbmd0aCwgbGVuZ3RoX3JlbWFpbmluZzsNCisgICAgZ3VpbnQ4IHZlcnNpb247
DQorICAgIGd1aW50IGxlbmd0aDsNCiAgICAgZ3VpbnQzMiByYXRlLCBmcmVxLCBmbGFnczsNCi0g
ICAgZ2ludDggZGJtOw0KLSAgICBndWludDggZGIsIHJmbGFnczsNCi0gICAgZ3VpbnQzMiBwcmVz
ZW50LCBuZXh0X3ByZXNlbnQ7DQotICAgIGludCBiaXQ7DQorICAgIGdpbnQ4IGRibSwgZGI7DQor
ICAgIGd1aW50OCByZmxhZ3MgPSAwOw0KICAgICAvKiBiYWNrd2FyZCBjb21wYXQgd2l0aCBiaXQg
MTQgPT0gZmNzIGluIGhlYWRlciAqLw0KICAgICBwcm90b19pdGVtICpoZHJfZmNzX3RpID0gTlVM
TDsNCiAgICAgaW50IGhkcl9mY3Nfb2Zmc2V0ID0gMDsNCiAgICAgZ3VpbnQzMiBzZW50X2ZjcyA9
IDA7DQogICAgIGd1aW50MzIgY2FsY19mY3M7DQotDQorICAgIGdpbnQgZXJyOw0KKyAgICBzdHJ1
Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIGl0ZXI7DQorICAgIHZvaWQgKmRhdGE7DQog
ICAgIHN0cnVjdCBfcmFkaW90YXBfaW5mbyAqcmFkaW90YXBfaW5mbzsNCi0gICAgc3RhdGljIHN0
cnVjdCBfcmFkaW90YXBfaW5mbyBydHBfaW5mb19hcnJbMV07DQotICAgIA0KLSAgICByYWRpb3Rh
cF9pbmZvID0gJnJ0cF9pbmZvX2FyclswXTsNCisgICAgc3RhdGljIHN0cnVjdCBfcmFkaW90YXBf
aW5mbyBydHBfaW5mb19hcnI7DQorDQorICAgIC8qIG91ciBub24tc3RhbmRhcmQgb3ZlcnJpZGVz
ICovDQorICAgIHN0YXRpYyBzdHJ1Y3QgcmFkaW90YXBfb3ZlcnJpZGUgb3ZlcnJpZGVzW10gPSB7
DQorICAgIAl7IElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCwgNCwgOCB9LCAvKiB4Y2hhbm5l
bCAqLw0KKw0KKyAgICAgICAgLyoga2VlcCBsYXN0ICovDQorICAgIAl7IDE0LCA0LCA0IH0sIC8q
IEZDUyBpbiBoZWFkZXIgKi8NCisgICAgfTsNCisgICAgZ3VpbnQgbl9vdmVycmlkZXMgPSBhcnJh
eV9sZW5ndGgob3ZlcnJpZGVzKTsNCisNCisgICAgaWYgKCFyYWRpb3RhcF9iaXQxNF9mY3MpDQor
ICAgICAgICBuX292ZXJyaWRlcy0tOw0KKw0KKyAgICByYWRpb3RhcF9pbmZvID0gJnJ0cF9pbmZv
X2FycjsNCiANCiAgICAgY29sX3NldF9zdHIocGluZm8tPmNpbmZvLCBDT0xfUFJPVE9DT0wsICJX
TEFOIik7DQogICAgIGNvbF9jbGVhcihwaW5mby0+Y2luZm8sIENPTF9JTkZPKTsNCi0gICAgb2Zm
c2V0ID0gMDsNCiANCi0gICAgdmVyc2lvbiA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KTsN
Ci0gICAgbGVuZ3RoID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQrMik7DQotICAgIHByZXNl
bnQgPSB0dmJfZ2V0X2xldG9obCh0dmIsIG9mZnNldCs0KTsNCisgICAgdmVyc2lvbiA9IHR2Yl9n
ZXRfZ3VpbnQ4KHR2YiwgMCk7DQorICAgIGxlbmd0aCA9IHR2Yl9nZXRfbGV0b2hzKHR2YiwgMik7
DQogICAgIA0KICAgICByYWRpb3RhcF9pbmZvLT5yYWRpb3RhcF9sZW5ndGggPSBsZW5ndGg7DQog
DQpAQCAtODU4LDQ0MSArODI4LDM4NCBAQCBkaXNzZWN0X3JhZGlvdGFwKHR2YnVmZl90ICp0dmIs
IHBhY2tldF9pDQogCQl0dmIsIDAsIGxlbmd0aCwgIlJhZGlvdGFwIEhlYWRlciB2JXUsIExlbmd0
aCAldSIsIHZlcnNpb24sIGxlbmd0aCk7DQogCXJhZGlvdGFwX3RyZWUgPSBwcm90b19pdGVtX2Fk
ZF9zdWJ0cmVlKHRpLCBldHRfcmFkaW90YXApOw0KIAlwcm90b190cmVlX2FkZF91aW50KHJhZGlv
dGFwX3RyZWUsIGhmX3JhZGlvdGFwX3ZlcnNpb24sDQotCQl0dmIsIG9mZnNldCwgMSwgdmVyc2lv
bik7DQorCQl0dmIsIDAsIDEsIHZlcnNpb24pOw0KIAlwcm90b190cmVlX2FkZF9pdGVtKHJhZGlv
dGFwX3RyZWUsIGhmX3JhZGlvdGFwX3BhZCwNCi0JCXR2Yiwgb2Zmc2V0ICsgMSwgMSwgRkFMU0Up
Ow0KLQl0aSA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBf
bGVuZ3RoLA0KLQkJdHZiLCBvZmZzZXQgKyAyLCAyLCBsZW5ndGgpOw0KKwkJdHZiLCAxLCAxLCBG
QUxTRSk7DQorCXByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBf
bGVuZ3RoLA0KKwkJdHZiLCAyLCAyLCBsZW5ndGgpOw0KICAgICB9DQotICAgIGxlbmd0aF9yZW1h
aW5pbmcgPSBsZW5ndGg7DQogDQotICAgIC8qDQotICAgICAqIEZJWE1FOiBUaGlzIG9ubHkgd29y
a3MgaWYgdGhlcmUgaXMgZXhhY3RseSAxIGl0X3ByZXNlbnQNCi0gICAgICogICAgICAgIGZpZWxk
IGluIHRoZSBoZWFkZXINCi0gICAgICovDQotICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgUkFE
SU9UQVBfTUlOX0hFQURFUl9MRU4pIHsNCi0JLyoNCi0JICogUmFkaW90YXAgaGVhZGVyIGlzIHNo
b3J0ZXIgdGhhbiB0aGUgZml4ZWQtbGVuZ3RoIHBvcnRpb24NCi0JICogcGx1cyBvbmUgInByZXNl
bnQiIGJpdHNldC4NCi0JICovDQotCWlmICh0cmVlKQ0KLQkgICAgcHJvdG9faXRlbV9hcHBlbmRf
dGV4dCh0aSwgIiAoYm9ndXMgLSBtaW5pbXVtIGxlbmd0aCBpcyA4KSIpOw0KLQlyZXR1cm47DQor
ICAgIGRhdGEgPSBlcF90dmJfbWVtZHVwKHR2YiwgMCwgbGVuZ3RoKTsNCisgICAgaWYgKCFkYXRh
KQ0KKyAgICAgICAgcmV0dXJuOw0KKw0KKyAgICBpZiAoaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJh
dG9yX2luaXQoJml0ZXIsIGRhdGEsIGxlbmd0aCwgTlVMTCkpIHsNCisgICAgICAgIGlmICh0cmVl
KQ0KKyAgICAgICAgICAgIHByb3RvX2l0ZW1fYXBwZW5kX3RleHQodGksICIgKGludmFsaWQpIik7
DQorICAgICAgICAvKiBtYXliZSB0aGUgbGVuZ3RoIHdhcyBjb3JyZWN0IGFueXdheSAuLi4gKi8N
CisgICAgICAgIGdvdG8gaGFuZF9vZmZfdG9fODAyMTE7DQogICAgIH0NCi0gICAgLyogU3VidHJl
ZSBmb3IgdGhlICJwcmVzZW50IGZsYWdzIiBiaXRmaWVsZC4gKi8NCisNCisgICAgaXRlci5vdmVy
cmlkZXMgPSBvdmVycmlkZXM7DQorICAgIGl0ZXIubl9vdmVycmlkZXMgPSBuX292ZXJyaWRlczsN
CisNCisgICAgLyogQWRkIHRoZSAicHJlc2VudCBmbGFncyIgYml0bWFwcy4gKi8NCiAgICAgaWYg
KHRyZWUpIHsNCi0JcHQgPSBwcm90b190cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3Jh
ZGlvdGFwX3ByZXNlbnQsDQotCSAgICB0dmIsIG9mZnNldCArIDQsIDQsIHByZXNlbnQpOw0KLQlw
cmVzZW50X3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKHB0LCBldHRfcmFkaW90YXBfcHJl
c2VudCk7DQotDQotCXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3Rh
cF9wcmVzZW50X3RzZnQsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2Fk
ZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9mbGFncywNCi0JICAgIHR2
YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9y
YWRpb3RhcF9wcmVzZW50X3JhdGUsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190
cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9jaGFubmVsLA0K
LQkgICAgdHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3Ry
ZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZmhzcywNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQot
CXByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2Ri
bV9hbnRzaWduYWwsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2FkZF9p
dGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9kYm1fYW50bm9pc2UsDQotCSAg
ICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwg
aGZfcmFkaW90YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQotCSAgICB0dmIsIDQsIDQsIFRSVUUp
Ow0KLQlwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2Vu
dF90eF9hdHRlbnVhdGlvbiwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVf
YWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX3R4X2F0dGVudWF0
aW9uLA0KLQkgICAgdHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVz
ZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KLQkgICAg
dHZiLCA0LCA0LCBUUlVFKTsNCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhm
X3JhZGlvdGFwX3ByZXNlbnRfYW50ZW5uYSwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXBy
b3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX2Fu
dHNpZ25hbCwNCi0JICAgIHR2YiwgNCwgNCwgVFJVRSk7DQotCXByb3RvX3RyZWVfYWRkX2l0ZW0o
cHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2RiX2FudG5vaXNlLA0KLQkgICAgdHZi
LCA0LCA0LCBUUlVFKTsNCi0JaWYgKHJhZGlvdGFwX2JpdDE0X2Zjcykgew0KLQkJcHJvdG9fdHJl
ZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfaGRyZmNzLA0KLQkJ
CXR2YiwgNCwgNCwgVFJVRSk7DQotCX0gZWxzZSB7DQotCQlwcm90b190cmVlX2FkZF9pdGVtKHBy
ZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9yeGZsYWdzLA0KLQkJCXR2YiwgNCwgNCwg
VFJVRSk7DQotCX0NCi0JcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlv
dGFwX3ByZXNlbnRfeGNoYW5uZWwsDQotCSAgICB0dmIsIDQsIDQsIFRSVUUpOw0KLQlwcm90b190
cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9leHQsDQotCSAg
ICB0dmIsIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgZ3VjaGFyICpibWFwX3N0YXJ0ID0gKGd1Y2hh
ciAqKWRhdGEgKyA0Ow0KKyAgICAgICAgZ3VpbnQgbl9iaXRtYXBzID0gKGl0ZXIudGhpc19hcmcg
LSBibWFwX3N0YXJ0KSAvIDQ7DQorICAgICAgICBndWludCBpOw0KKyAgICAgICAgZ2Jvb2xlYW4g
cnRhcF9ucyA9IFRSVUU7DQorICAgICAgICBndWludCBydGFwX25zX29mZnNldCwgcnRhcF9uc19v
ZmZzZXRfbmV4dCA9IDA7DQorDQorICAgICAgICBwdCA9IHByb3RvX3RyZWVfYWRkX2l0ZW0ocmFk
aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudCwNCisgICAgICAgICAgICB0dmIsIDQsIG5f
Yml0bWFwcyAqIDQsIEZBTFNFIC8qID8/ICovKTsNCisNCisgICAgICAgIGZvciAoaSA9IDA7IGkg
PCBuX2JpdG1hcHM7IGkrKykgew0KKyAgICAgICAgICAgIGd1aW50MzIgYm1hcCA9IHBsZXRvaGwo
Ym1hcF9zdGFydCArIDQgKiBpKTsNCisNCisgICAgICAgICAgICBydGFwX25zX29mZnNldCA9IHJ0
YXBfbnNfb2Zmc2V0X25leHQ7DQorICAgICAgICAgICAgcnRhcF9uc19vZmZzZXRfbmV4dCArPSA0
Ow0KKw0KKyAgICAgICAgICAgIGlmIChibWFwICYgQklUKElFRUU4MDIxMV9SQURJT1RBUF9SQURJ
T1RBUF9OQU1FU1BBQ0UpKSB7DQorICAgICAgICAgICAgICAgIHJ0YXBfbnMgPSBUUlVFOw0KKyAg
ICAgICAgICAgICAgICBydGFwX25zX29mZnNldF9uZXh0ID0gMDsNCisgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgaWYgKGJtYXAgJiBCSVQoSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1F
U1BBQ0UpKQ0KKyAgICAgICAgICAgICAgICBydGFwX25zID0gRkFMU0U7DQorDQorICAgICAgICAg
ICAgcHJlc2VudF90cmVlID0gcHJvdG9faXRlbV9hZGRfc3VidHJlZShwdCwgZXR0X3JhZGlvdGFw
X3ByZXNlbnQpOw0KKw0KKyAgICAgICAgICAgIG9mZnNldCA9IDQgKiBpOw0KKw0KKyAgICAgICAg
ICAgIGlmICghcnRhcF9ucykNCisgICAgICAgICAgICAgICAgZ290byBhbHdheXNfYml0czsNCisN
CisgICAgICAgICAgICBpZiAocnRhcF9uc19vZmZzZXQpDQorICAgICAgICAgICAgICAgIGdvdG8g
YWx3YXlzX2JpdHM7DQorDQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50
X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfdHNmdCwNCisgICAgICAgICAgICAgICAgdHZiLCBv
ZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKHBy
ZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9mbGFncywNCisgICAgICAgICAgICAgICAg
dHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9p
dGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9yYXRlLA0KKyAgICAgICAgICAg
ICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVf
YWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2NoYW5uZWwsDQorICAg
ICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJv
dG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZmhzcywN
CisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAg
ICBwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRfdHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9k
Ym1fYW50c2lnbmFsLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUp
Ow0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRp
b3RhcF9wcmVzZW50X2RibV9hbnRub2lzZSwNCisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQg
KyA0LCA0LCBUUlVFKTsNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKHByZXNlbnRf
dHJlZSwgaGZfcmFkaW90YXBfcHJlc2VudF9sb2NrX3F1YWxpdHksDQorICAgICAgICAgICAgICAg
IHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRf
aXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfdHhfYXR0ZW51YXRpb24sDQor
ICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAg
cHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJf
dHhfYXR0ZW51YXRpb24sDQorICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJV
RSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3Jh
ZGlvdGFwX3ByZXNlbnRfZGJtX3R4X2F0dGVudWF0aW9uLA0KKyAgICAgICAgICAgICAgICB0dmIs
IG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0o
cHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2FudGVubmEsDQorICAgICAgICAgICAg
ICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9h
ZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfZGJfYW50c2lnbmFsLA0K
KyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0KKyAgICAgICAgICAg
IHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50X2Ri
X2FudG5vaXNlLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQsIFRSVUUpOw0K
KyAgICAgICAgICAgIGlmIChyYWRpb3RhcF9iaXQxNF9mY3MpIHsNCisgICAgICAgICAgICAgICAg
ICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50
X2hkcmZjcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0
LCBUUlVFKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgcHJv
dG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfcnhmbGFn
cywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0LCA0LCBUUlVF
KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVz
ZW50X3RyZWUsIGhmX3JhZGlvdGFwX3ByZXNlbnRfeGNoYW5uZWwsDQorICAgICAgICAgICAgICAg
IHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQorDQorIGFsd2F5c19iaXRzOg0KKyAgICAgICAg
ICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBoZl9yYWRpb3RhcF9wcmVzZW50
X3J0YXBfbnMsDQorICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0ICsgNCwgNCwgVFJVRSk7DQor
ICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShwcmVzZW50X3RyZWUsIGhmX3JhZGlvdGFw
X3ByZXNlbnRfdmVuZG9yX25zLA0KKyAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCArIDQsIDQs
IFRSVUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0ocHJlc2VudF90cmVlLCBo
Zl9yYWRpb3RhcF9wcmVzZW50X2V4dCwNCisgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQgKyA0
LCA0LCBUUlVFKTsNCisgICAgICAgIH0NCiAgICAgfQ0KLSAgICBvZmZzZXQgKz0gUkFESU9UQVBf
TUlOX0hFQURFUl9MRU47DQotICAgIGxlbmd0aF9yZW1haW5pbmcgLT0gUkFESU9UQVBfTUlOX0hF
QURFUl9MRU47DQogDQotICAgIHJmbGFncyA9IDA7DQotICAgIGZvciAoOyBwcmVzZW50OyBwcmVz
ZW50ID0gbmV4dF9wcmVzZW50KSB7DQotCS8qIGNsZWFyIHRoZSBsZWFzdCBzaWduaWZpY2FudCBi
aXQgdGhhdCBpcyBzZXQgKi8NCi0JbmV4dF9wcmVzZW50ID0gcHJlc2VudCAmIChwcmVzZW50IC0g
MSk7DQotDQotCS8qIGV4dHJhY3QgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNl
dCAqLw0KLQliaXQgPSBCSVROT18zMihwcmVzZW50IF4gbmV4dF9wcmVzZW50KTsNCi0NCi0Jc3dp
dGNoIChiaXQpIHsNCi0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6DQotCSAgICBpZiAo
bGVuZ3RoX3JlbWFpbmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIHJmbGFncyA9IHR2Yl9nZXRf
Z3VpbnQ4KHR2Yiwgb2Zmc2V0KTsNCi0JICAgIGlmICh0cmVlKSB7DQotICAgICAgICBmdCA9IHBy
b3RvX3RyZWVfYWRkX2l0ZW0ocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3MsDQotICAg
ICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0gICAgICAgIGZsYWdzX3RyZWUgPSBw
cm90b19pdGVtX2FkZF9zdWJ0cmVlKGZ0LCBldHRfcmFkaW90YXBfZmxhZ3MpOw0KLQ0KLQkJcHJv
dG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9mbGFnc19jZnAsDQotCQkJ
dHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJl
ZSwgaGZfcmFkaW90YXBfZmxhZ3NfcHJlYW1ibGUsDQotCQkJdHZiLCBvZmZzZXQsIDEsIEZBTFNF
KTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3Nf
d2VwLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlwcm90b190cmVlX2FkZF9pdGVt
KGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2ZyYWcsDQotCQkJdHZiLCBvZmZzZXQsIDEs
IEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf
ZmxhZ3NfZmNzLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlwcm90b190cmVlX2Fk
ZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2RhdGFwYWQsDQotCQkJdHZiLCBv
ZmZzZXQsIDEsIEZBTFNFKTsNCi0JCXByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZf
cmFkaW90YXBfZmxhZ3NfYmFkZmNzLA0KLQkJCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCQlw
cm90b190cmVlX2FkZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3Nob3J0Z2ks
DQotCQkJdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0K
LQkgICAgbGVuZ3RoX3JlbWFpbmluZy0tOw0KLQkgICAgYnJlYWs7DQotDQotCWNhc2UgSUVFRTgw
MjExX1JBRElPVEFQX1JBVEU6DQotCSAgICBpZiAobGVuZ3RoX3JlbWFpbmluZyA8IDEpDQotCQli
cmVhazsNCi0JICAgIHJhdGUgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQotCSAgICBp
ZiAocmF0ZSAmIDB4ODApIHsNCi0JCS8qIFhYWCBhZGp1c3QgYnkgQ1cgYW5kIHNob3J0IEdJIGxp
a2Ugb3RoZXIgc25pZmZlcnM/ICovDQotCQlyYXRlID0gaWVlZTgwMjExX2h0cmF0ZXNbcmF0ZSAm
IDB4Zl07DQotCSAgICB9DQotCSAgICBjb2xfYWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfVFhf
UkFURSwgIiVkLiVkIiwNCi0JCXJhdGUgLyAyLCByYXRlICYgMSA/IDUgOiAwKTsNCi0JICAgIGlm
ICh0cmVlKSB7DQotCQlwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLCBo
Zl9yYWRpb3RhcF9kYXRhcmF0ZSwNCi0JCQl0dmIsIG9mZnNldCwgMSwgcmF0ZSwNCi0JCQkiRGF0
YSBSYXRlOiAlZC4lZCBNYi9zIiwgcmF0ZSAvIDIsIHJhdGUgJiAxID8gNSA6IDApOw0KLQkgICAg
fQ0KLQkgICAgb2Zmc2V0Kys7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nLS07DQorICAgIHdoaWxl
ICghKGVyciA9IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KCZpdGVyKSkpIHsNCisg
ICAgICAgIG9mZnNldCA9IChndWNoYXIgKilpdGVyLnRoaXNfYXJnIC0gKGd1Y2hhciAqKWRhdGE7
DQorDQorICAgICAgICBpZiAoaXRlci50aGlzX2FyZ19pbmRleCA9PSBJRUVFODAyMTFfUkFESU9U
QVBfVkVORE9SX05BTUVTUEFDRSAmJiB0cmVlKSB7DQorICAgICAgICAgICAgcHJvdG9fdHJlZSAq
dnQsICp2ZW5fdHJlZSA9IE5VTEw7DQorICAgICAgICAgICAgdnQgPSBwcm90b190cmVlX2FkZF9p
dGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3ZlbmRvcl9ucywNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIGl0ZXIudGhpc19hcmdfc2l6ZSwg
RkFMU0UpOw0KKyAgICAgICAgICAgIHZlbl90cmVlID0gcHJvdG9faXRlbV9hZGRfc3VidHJlZSh2
dCwgZXR0X3JhZGlvdGFwX3ZlbmRvcik7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRl
bSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX291aSwgdHZiLCBvZmZzZXQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAzLCBGQUxTRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJl
ZV9hZGRfaXRlbSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX3N1Ym5zLCB0dmIsIG9mZnNldCAr
IDMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBGQUxTRSk7DQorICAgICAg
ICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbSh2ZW5fdHJlZSwgaGZfcmFkaW90YXBfdmVuX3NraXAs
IHR2Yiwgb2Zmc2V0ICsgNCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIFRS
VUUpOw0KKyAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0odmVuX3RyZWUsIGhmX3JhZGlv
dGFwX3Zlbl9kYXRhLCB0dmIsIG9mZnNldCArIDYsDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdGVyLnRoaXNfYXJnX3NpemUgLSA2LCBUUlVFKTsNCisgICAgICAgIH0NCisNCisg
ICAgICAgIGlmICghaXRlci5pc19yYWRpb3RhcF9ucykNCisgICAgICAgICAgICBjb250aW51ZTsN
CisNCisgICAgICAgIHN3aXRjaCAoaXRlci50aGlzX2FyZ19pbmRleCkgew0KKyAgICAgICAgY2Fz
ZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6DQorICAgICAgICAgICAgcmZsYWdzID0gdHZiX2dl
dF9ndWludDgodHZiLCBvZmZzZXQpOw0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAg
ICAgICAgICAgIGZ0ID0gcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRp
b3RhcF9mbGFncywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7
DQorICAgICAgICAgICAgICAgIGZsYWdzX3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKGZ0
LCBldHRfcmFkaW90YXBfZmxhZ3MpOw0KKw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2Fk
ZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX2NmcCwNCisgICAgICAgICAgICAg
ICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAgICAgICAgICAgICAgIHByb3RvX3Ry
ZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3NfcHJlYW1ibGUsDQorICAg
ICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgICAg
ICBwcm90b190cmVlX2FkZF9pdGVtKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3dlcCwN
CisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAgICAgICAg
ICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfZmxhZ3Nf
ZnJhZywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQorICAg
ICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2l0ZW0oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf
ZmxhZ3NfZmNzLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIEZBTFNFKTsN
CisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVlLCBoZl9yYWRp
b3RhcF9mbGFnc19kYXRhcGFkLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEs
IEZBTFNFKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShmbGFnc190cmVl
LCBoZl9yYWRpb3RhcF9mbGFnc19iYWRmY3MsDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9m
ZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9pdGVtKGZs
YWdzX3RyZWUsIGhmX3JhZGlvdGFwX2ZsYWdzX3Nob3J0Z2ksDQorICAgICAgICAgICAgICAgICAg
ICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JBVEU6DQorICAgICAgICAg
ICAgcmF0ZSA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAo
cmF0ZSAmIDB4ODApIHsNCisgICAgICAgICAgICAgICAgLyogWFhYIGFkanVzdCBieSBDVyBhbmQg
c2hvcnQgR0kgbGlrZSBvdGhlciBzbmlmZmVycz8gKi8NCisgICAgICAgICAgICAgICAgcmF0ZSA9
IGllZWU4MDIxMV9odHJhdGVzW3JhdGUgJiAweGZdOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBjb2xfYWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfVFhfUkFURSwgIiVkLiVkIiwNCisg
ICAgICAgICAgICByYXRlIC8gMiwgcmF0ZSAmIDEgPyA1IDogMCk7DQorICAgICAgICAgICAgaWYg
KHRyZWUpIHsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfdWludF9mb3JtYXQocmFk
aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfZGF0YXJhdGUsDQorICAgICAgICAgICAgICAgICAgICB0
dmIsIG9mZnNldCwgMSwgcmF0ZSwNCisgICAgICAgICAgICAgICAgICAgICJEYXRhIFJhdGU6ICVk
LiVkIE1iL3MiLCByYXRlIC8gMiwgcmF0ZSAmIDEgPyA1IDogMCk7DQorICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgIHJhZGlvdGFwX2luZm8tPnJhdGUgPSByYXRlOw0KLQkgICAgYnJlYWs7DQot
CWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUw6DQotCSAgICBpZiAobGVuZ3Ro
X3JlbWFpbmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIGRibSA9IChnaW50OCkgdHZiX2dldF9n
dWludDgodHZiLCBvZmZzZXQpOw0KLQkgICAgY29sX2FkZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09M
X1JTU0ksICIlZCBkQm0iLCBkYm0pOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVf
YWRkX2ludF9mb3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgaGZfcmFkaW90YXBfZGJtX2Fu
dHNpZ25hbCwNCi0JCQkJCSAgdHZiLCBvZmZzZXQsIDEsIGRibSwNCi0JCQkJCSAgIlNTSSBTaWdu
YWw6ICVkIGRCbSIsIGRibSk7DQotCSAgICB9DQotCSAgICBvZmZzZXQrKzsNCi0JICAgIGxlbmd0
aF9yZW1haW5pbmctLTsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgw
MjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUw6DQorICAgICAgICAgICAgZGJtID0gKGdpbnQ4KSB0
dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQorICAgICAgICAgICAgY29sX2FkZF9mc3RyKHBp
bmZvLT5jaW5mbywgQ09MX1JTU0ksICIlZCBkQm0iLCBkYm0pOw0KKyAgICAgICAgICAgIGlmICh0
cmVlKSB7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2ludF9mb3JtYXQocmFkaW90
YXBfdHJlZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYm1f
YW50c2lnbmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAx
LCBkYm0sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTSSBTaWduYWw6ICVkIGRC
bSIsIGRibSk7DQorICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIHJhZGlvdGFwX2luZm8tPmRi
bV9hbnRzaWduYWw9ZGJtOw0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQ
X0RCX0FOVFNJR05BTDoNCi0JICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFr
Ow0KLQkgICAgZGIgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9mZnNldCk7DQotCSAgICBjb2xfYWRk
X2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfUlNTSSwgIiV1IGRCIiwgZGIpOw0KLQkgICAgaWYgKHRy
ZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX3VpbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUsDQotCQkJ
CQkgICBoZl9yYWRpb3RhcF9kYl9hbnRzaWduYWwsDQotCQkJCQkgICB0dmIsIG9mZnNldCwgMSwg
ZGIsDQotCQkJCQkgICAiU1NJIFNpZ25hbDogJXUgZEIiLCBkYik7DQotCSAgICB9DQotCSAgICBv
ZmZzZXQrKzsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctLTsNCi0JICAgIGJyZWFrOw0KLQljYXNl
IElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0U6DQotCSAgICBpZiAobGVuZ3RoX3JlbWFp
bmluZyA8IDEpDQotCQlicmVhazsNCi0JICAgIGRibSA9IChnaW50OCkgdHZiX2dldF9ndWludDgo
dHZiLCBvZmZzZXQpOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX2ludF9m
b3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgaGZfcmFkaW90YXBfZGJtX2FudG5vaXNlLA0K
LQkJCQkJICB0dmIsIG9mZnNldCwgMSwgZGJtLA0KLQkJCQkJICAiU1NJIE5vaXNlOiAlZCBkQm0i
LCBkYm0pOw0KLQkgICAgfQ0KLQkgICAgb2Zmc2V0Kys7DQotCSAgICBsZW5ndGhfcmVtYWluaW5n
LS07DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RB
UF9EQl9BTlRTSUdOQUw6DQorICAgICAgICAgICAgZGIgPSB0dmJfZ2V0X2d1aW50OCh0dmIsIG9m
ZnNldCk7DQorICAgICAgICAgICAgY29sX2FkZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09MX1JTU0ks
ICIldSBkQiIsIGRiKTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAg
ICBwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYl9hbnRzaWduYWwsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBkYiwNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlNTSSBTaWduYWw6ICV1IGRCIiwgZGIpOw0KKyAgICAgICAgICAg
IH0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQ
X0RCTV9BTlROT0lTRToNCisgICAgICAgICAgICBkYm0gPSAoZ2ludDgpIHR2Yl9nZXRfZ3VpbnQ4
KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAg
ICBwcm90b190cmVlX2FkZF9pbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUsDQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGZfcmFkaW90YXBfZGJtX2FudG5vaXNlLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAxLCBkYm0sDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlNTSSBOb2lzZTogJWQgZEJtIiwgZGJtKTsNCisgICAgICAgICAgICB9
DQogICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+ZGJtX2FudG5vaXNlPWRibTsNCi0JICAgIGJy
ZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRToNCi0JICAgIGlmIChs
ZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFrOw0KLQkgICAgZGIgPSB0dmJfZ2V0X2d1aW50
OCh0dmIsIG9mZnNldCk7DQotCSAgICBpZiAodHJlZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWlu
dF9mb3JtYXQocmFkaW90YXBfdHJlZSwNCi0JCQkJCSAgIGhmX3JhZGlvdGFwX2RiX2FudG5vaXNl
LA0KLQkJCQkJICAgdHZiLCBvZmZzZXQsIDEsIGRiLA0KLQkJCQkJICAgIlNTSSBOb2lzZTogJXUg
ZEIiLCBkYik7DQotCSAgICB9DQotCSAgICBvZmZzZXQrKzsNCi0JICAgIGxlbmd0aF9yZW1haW5p
bmctLTsNCi0JICAgIGJyZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BOg0K
LQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAxKQ0KLQkJYnJlYWs7DQotCSAgICBpZiAodHJl
ZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9h
bnRlbm5hLA0KLQkJCQkgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgodHZiLCBvZmZz
ZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy0t
Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUjoN
Ci0JICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMSkNCi0JCWJyZWFrOw0KLQkgICAgaWYgKHRy
ZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX2ludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF90
eHBvd2VyLA0KLQkJCQkgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgodHZiLCBvZmZz
ZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCsrOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy0t
Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUw6DQotCXsN
Ci0JICAgIHByb3RvX2l0ZW0gKml0Ow0KLQkgICAgcHJvdG9fdHJlZSAqZmxhZ3NfdHJlZTsNCi0J
ICAgIGdjaGFyICpjaGFuX3N0cjsNCi0NCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNF
VChvZmZzZXQsIDIpOw0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0
aF9yZW1haW5pbmcgLT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcg
PCAyKQ0KLQkJYnJlYWs7DQotCSAgICBpZiAodHJlZSkgew0KLQkJZnJlcSA9IHR2Yl9nZXRfbGV0
b2hzKHR2Yiwgb2Zmc2V0KTsNCi0JCWZsYWdzID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQr
Mik7DQotCQljaGFuX3N0ciA9IGllZWU4MDIxMV9taHpfdG9fc3RyKGZyZXEpOw0KLQkJY29sX2Fk
ZF9mc3RyKHBpbmZvLT5jaW5mbywgQ09MX0ZSRVFfQ0hBTiwgIiVzIiwgY2hhbl9zdHIpOw0KLQkJ
cHJvdG9fdHJlZV9hZGRfdWludF9mb3JtYXQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfY2hh
bm5lbF9mcmVxdWVuY3ksDQotCQkJCXR2Yiwgb2Zmc2V0LCAyLCBmcmVxLA0KLQkJCQkiQ2hhbm5l
bCBmcmVxdWVuY3k6ICVzIiwgY2hhbl9zdHIpOw0KLQkJZ19mcmVlKGNoYW5fc3RyKTsNCi0JCS8q
IFdlJ3JlIGFscmVhZHkgMi1ieXRlIGFsaWduZWQuICovDQotCQlpdCA9IHByb3RvX3RyZWVfYWRk
X3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFncywNCi0JCQl0dmIs
IG9mZnNldCsyLCAyLCBmbGFncyk7DQotCQlmbGFnc190cmVlID0gcHJvdG9faXRlbV9hZGRfc3Vi
dHJlZShpdCwgZXR0X3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRf
Ym9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX3R1cmJvLA0KLQkJ
CXR2Yiwgb2Zmc2V0KzIsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxh
Z3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19jY2ssDQotCQkJdHZiLCBvZmZzZXQr
MiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9y
YWRpb3RhcF9jaGFubmVsX2ZsYWdzX29mZG0sDQotCQkJdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3Mp
Ow0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFu
bmVsX2ZsYWdzXzJnaHosDQotCQkJdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9f
dHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzXzVn
aHosDQotCQkJdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9v
bGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX3Bhc3NpdmUsDQotCQkJ
dHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFn
c190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2R5bmFtaWMsDQotCQkJdHZiLCBvZmZz
ZXQrMywgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBo
Zl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2dmc2ssDQotCQkJdHZiLCBvZmZzZXQrMywgMSwgZmxh
Z3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9j
aGFubmVsX2ZsYWdzX2dzbSwNCi0JCQl0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQotCQlwcm90
b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3Nf
c3R1cmJvLA0KLQkJCXR2Yiwgb2Zmc2V0KzMsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk
X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19oYWxmLA0KLQkJ
CXR2Yiwgb2Zmc2V0KzMsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxh
Z3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19xdWFydGVyLA0KLQkJCXR2Yiwgb2Zm
c2V0KzMsIDEsIGZsYWdzKTsNCi0JCXJhZGlvdGFwX2luZm8tPmZyZXE9ZnJlcTsNCi0JCXJhZGlv
dGFwX2luZm8tPmZsYWdzPWZsYWdzOw0KLQkgICAgfQ0KLQkgICAgb2Zmc2V0Kz00IC8qIENoYW5u
ZWwgKyBmbGFncyAqLzsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctPTQ7DQotCSAgICBicmVhazsN
Ci0JfQ0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTDogew0KLQkgICAgcHJvdG9f
aXRlbSAqaXQ7DQotCSAgICBwcm90b190cmVlICpmbGFnc190cmVlOw0KLQ0KLQkgICAgYWxpZ25f
b2Zmc2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgNCk7DQotCSAgICBvZmZzZXQgKz0gYWxpZ25f
b2Zmc2V0Ow0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBhbGlnbl9vZmZzZXQ7DQotCSAgICBp
ZiAobGVuZ3RoX3JlbWFpbmluZyA8IDgpDQotCQlicmVhazsNCi0JICAgIGlmICh0cmVlKSB7DQot
CSAgICAgICAgaW50IGNoYW5uZWw7DQotCSAgICAgICAgZ3VpbnQ4IG1heHBvd2VyOw0KLQ0KLQkJ
ZmxhZ3MgPSB0dmJfZ2V0X2xldG9obCh0dmIsIG9mZnNldCk7DQotCQlmcmVxID0gdHZiX2dldF9s
ZXRvaHModHZiLCBvZmZzZXQrNCk7DQotCQljaGFubmVsID0gdHZiX2dldF9ndWludDgodHZiLCBv
ZmZzZXQrNik7DQotCQltYXhwb3dlciA9IHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KzcpOw0K
LQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5l
bCwNCi0JCQl0dmIsIG9mZnNldCs2LCAxLCAoZ3VpbnQzMikgY2hhbm5lbCk7DQotCQlwcm90b190
cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZyZXF1ZW5j
eSwNCi0JCQl0dmIsIG9mZnNldCs0LCAyLCBmcmVxKTsNCi0JCWl0ID0gcHJvdG9fdHJlZV9hZGRf
dWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFncywNCi0JCQl0dmIs
IG9mZnNldCswLCA0LCBmbGFncyk7DQotCQlmbGFnc190cmVlID0gcHJvdG9faXRlbV9hZGRfc3Vi
dHJlZShpdCwgZXR0X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk
X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfdHVyYm8sDQot
CQkJdHZiLCBvZmZzZXQrMCwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm
bGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19jY2ssDQotCQkJdHZiLCBvZmZz
ZXQrMCwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBo
Zl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19vZmRtLA0KLQkJCXR2Yiwgb2Zmc2V0KzAsIDEsIGZs
YWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf
eGNoYW5uZWxfZmxhZ3NfMmdoeiwNCi0JCQl0dmIsIG9mZnNldCswLCAxLCBmbGFncyk7DQotCQlw
cm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2Zs
YWdzXzVnaHosDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9h
ZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19wYXNzaXZl
LA0KLQkJCXR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRkX2Jvb2xl
YW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfZHluYW1pYywNCi0JCQl0
dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdz
X3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2dmc2ssDQotCQkJdHZiLCBvZmZzZXQr
MSwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9y
YWRpb3RhcF94Y2hhbm5lbF9mbGFnc19nc20sDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3Mp
Ow0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hh
bm5lbF9mbGFnc19zdHVyYm8sDQotCQkJdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KLQkJcHJv
dG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFn
c19oYWxmLA0KLQkJCXR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCi0JCXByb3RvX3RyZWVfYWRk
X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfcXVhcnRlciwN
Ci0JCQl0dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFu
KGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2h0MjAsDQotCQkJdHZiLCBv
ZmZzZXQrMiwgMSwgZmxhZ3MpOw0KLQkJcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVl
LCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDQwdSwNCi0JCQl0dmIsIG9mZnNldCsyLCAx
LCBmbGFncyk7DQotCQlwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv
dGFwX3hjaGFubmVsX2ZsYWdzX2h0NDBkLA0KLQkJCXR2Yiwgb2Zmc2V0KzIsIDEsIGZsYWdzKTsN
Ci0jaWYgMA0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3Rh
cF94Y2hhbm5lbF9tYXhwb3dlciwNCi0JCQl0dmIsIG9mZnNldCs3LCAxLCBtYXhwb3dlcik7DQot
I2VuZGlmDQotCSAgICB9DQotCSAgICBvZmZzZXQrPTggLyogZmxhZ3MgKyBmcmVxICsgaWVlZSAr
IG1heHJlZ3Bvd2VyICovOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZy09ODsNCi0JICAgIGJyZWFr
Ow0KLQl9DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6DQotCSAgICBhbGlnbl9vZmZz
ZXQgPSBBTElHTl9PRkZTRVQob2Zmc2V0LCAyKTsNCi0JICAgIG9mZnNldCArPSBhbGlnbl9vZmZz
ZXQ7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nIC09IGFsaWduX29mZnNldDsNCi0JICAgIGlmIChs
ZW5ndGhfcmVtYWluaW5nIDwgMikNCi0JCWJyZWFrOw0KLQkgICAgcHJvdG9fdHJlZV9hZGRfaXRl
bShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9maHNzX2hvcHNldCwNCi0JCXR2Yiwgb2Zmc2V0
LCAxLCBGQUxTRSk7DQotCSAgICBwcm90b190cmVlX2FkZF9pdGVtKHJhZGlvdGFwX3RyZWUsIGhm
X3JhZGlvdGFwX2Zoc3NfcGF0dGVybiwNCi0JCXR2Yiwgb2Zmc2V0LCAxLCBGQUxTRSk7DQotCSAg
ICBvZmZzZXQrPTI7DQotCSAgICBsZW5ndGhfcmVtYWluaW5nLT0yOw0KLQkgICAgYnJlYWs7DQot
CWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OOg0KLQkgICAgYWxpZ25fb2Zm
c2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgMik7DQotCSAgICBvZmZzZXQgKz0gYWxpZ25fb2Zm
c2V0Ow0KLQkgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBhbGlnbl9vZmZzZXQ7DQotCSAgICBpZiAo
bGVuZ3RoX3JlbWFpbmluZyA8IDIpDQotCQlicmVhazsNCi0JICAgIHByb3RvX3RyZWVfYWRkX2l0
ZW0ocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfdHhfYXR0ZW51YXRpb24sDQotCQl0dmIsIG9m
ZnNldCwgMiwgRkFMU0UpOw0KLQkgICAgb2Zmc2V0Kz0yOw0KLQkgICAgbGVuZ3RoX3JlbWFpbmlu
Zy09MjsNCi0JICAgIGJyZWFrOw0KLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQl9UWF9BVFRF
TlVBVElPTjoNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNFVChvZmZzZXQsIDIpOw0K
LQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmcgLT0g
YWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAyKQ0KLQkJYnJlYWs7
DQotCSAgICBwcm90b190cmVlX2FkZF9pdGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX2Ri
X3R4X2F0dGVudWF0aW9uLA0KLQkJdHZiLCBvZmZzZXQsIDIsIEZBTFNFKTsNCi0JICAgIG9mZnNl
dCs9MjsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmctPTI7DQotCSAgICBicmVhazsNCi0JY2FzZSBJ
RUVFODAyMTFfUkFESU9UQVBfVFNGVDoNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNF
VChvZmZzZXQsIDgpOw0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0
aF9yZW1haW5pbmcgLT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcg
PCA4KQ0KLQkJYnJlYWs7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4
MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRToNCisgICAgICAgICAgICBkYiA9IHR2Yl9nZXRfZ3Vp
bnQ4KHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAg
ICAgICBwcm90b190cmVlX2FkZF91aW50X2Zvcm1hdChyYWRpb3RhcF90cmVlLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZl9yYWRpb3RhcF9kYl9hbnRub2lzZSwNCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDEsIGRiLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiU1NJIE5vaXNlOiAldSBkQiIsIGRiKTsNCisgICAgICAgICAg
ICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RB
UF9BTlRFTk5BOg0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAgICAgICAgICAgIHBy
b3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfYW50ZW5uYSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwgMSwgdHZiX2dldF9ndWludDgo
dHZiLCBvZmZzZXQpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAg
ICAgICBjYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVI6DQorICAgICAgICAgICAg
aWYgKHRyZWUpIHsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaW50KHJhZGlvdGFw
X3RyZWUsIGhmX3JhZGlvdGFwX3R4cG93ZXIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHZiLCBvZmZzZXQsIDEsIHR2Yl9nZXRfZ3VpbnQ4KHR2Yiwgb2Zmc2V0KSk7DQorICAgICAgICAg
ICAgfQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgY2FzZSBJRUVFODAyMTFfUkFESU9U
QVBfQ0hBTk5FTDoNCisgICAgICAgIHsNCisgICAgICAgICAgICBwcm90b19pdGVtICppdDsNCisg
ICAgICAgICAgICBwcm90b190cmVlICpmbGFnc190cmVlOw0KKyAgICAgICAgICAgIGdjaGFyICpj
aGFuX3N0cjsNCisNCisgICAgICAgICAgICBpZiAodHJlZSkgew0KKyAgICAgICAgICAgICAgICBm
cmVxID0gdHZiX2dldF9sZXRvaHModHZiLCBvZmZzZXQpOw0KKyAgICAgICAgICAgICAgICBmbGFn
cyA9IHR2Yl9nZXRfbGV0b2hzKHR2Yiwgb2Zmc2V0KzIpOw0KKyAgICAgICAgICAgICAgICBjaGFu
X3N0ciA9IGllZWU4MDIxMV9taHpfdG9fc3RyKGZyZXEpOw0KKyAgICAgICAgICAgICAgICBjb2xf
YWRkX2ZzdHIocGluZm8tPmNpbmZvLCBDT0xfRlJFUV9DSEFOLCAiJXMiLCBjaGFuX3N0cik7DQor
ICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX3VpbnRfZm9ybWF0KHJhZGlvdGFwX3RyZWUs
IGhmX3JhZGlvdGFwX2NoYW5uZWxfZnJlcXVlbmN5LA0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHR2Yiwgb2Zmc2V0LCAyLCBmcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICJDaGFubmVs
IGZyZXF1ZW5jeTogJXMiLCBjaGFuX3N0cik7DQorICAgICAgICAgICAgICAgIGdfZnJlZShjaGFu
X3N0cik7DQorICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGFscmVhZHkgMi1ieXRlIGFsaWduZWQu
ICovDQorICAgICAgICAgICAgICAgIGl0ID0gcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90
cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzLA0KKyAgICAgICAgICAgICAgICAgICAgdHZi
LCBvZmZzZXQrMiwgMiwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBmbGFnc190cmVlID0gcHJv
dG9faXRlbV9hZGRfc3VidHJlZShpdCwgZXR0X3JhZGlvdGFwX2NoYW5uZWxfZmxhZ3MpOw0KKyAg
ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv
dGFwX2NoYW5uZWxfZmxhZ3NfdHVyYm8sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNl
dCsyLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4o
ZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19jY2ssDQorICAgICAgICAgICAg
ICAgICAgICB0dmIsIG9mZnNldCsyLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3Rv
X3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19v
ZmRtLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAg
ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv
dGFwX2NoYW5uZWxfZmxhZ3NfMmdoeiwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0
KzIsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm
bGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzXzVnaHosDQorICAgICAgICAgICAg
ICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3Rv
X3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19w
YXNzaXZlLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0K
KyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3Jh
ZGlvdGFwX2NoYW5uZWxfZmxhZ3NfZHluYW1pYywNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwg
b2Zmc2V0KzMsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9v
bGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF9jaGFubmVsX2ZsYWdzX2dmc2ssDQorICAgICAg
ICAgICAgICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAg
IHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9m
bGFnc19nc20sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCszLCAxLCBmbGFncyk7
DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZf
cmFkaW90YXBfY2hhbm5lbF9mbGFnc19zdHVyYm8sDQorICAgICAgICAgICAgICAgICAgICB0dmIs
IG9mZnNldCszLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jv
b2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfY2hhbm5lbF9mbGFnc19oYWxmLA0KKyAgICAg
ICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMywgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAg
ICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX2NoYW5uZWxf
ZmxhZ3NfcXVhcnRlciwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzMsIDEsIGZs
YWdzKTsNCisgICAgICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+ZnJlcT1mcmVxOw0KKyAgICAg
ICAgICAgICAgICByYWRpb3RhcF9pbmZvLT5mbGFncz1mbGFnczsNCisgICAgICAgICAgICB9DQor
ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9S
QURJT1RBUF9YQ0hBTk5FTDogew0KKyAgICAgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KKyAgICAg
ICAgICAgIHByb3RvX3RyZWUgKmZsYWdzX3RyZWU7DQorDQorICAgICAgICAgICAgaWYgKHRyZWUp
IHsNCisgICAgICAgICAgICAgICAgaW50IGNoYW5uZWw7DQorICAgICAgICAgICAgICAgIGd1aW50
OCBtYXhwb3dlcjsNCisNCisgICAgICAgICAgICAgICAgZmxhZ3MgPSB0dmJfZ2V0X2xldG9obCh0
dmIsIG9mZnNldCk7DQorICAgICAgICAgICAgICAgIGZyZXEgPSB0dmJfZ2V0X2xldG9ocyh0dmIs
IG9mZnNldCs0KTsNCisgICAgICAgICAgICAgICAgY2hhbm5lbCA9IHR2Yl9nZXRfZ3VpbnQ4KHR2
Yiwgb2Zmc2V0KzYpOw0KKyAgICAgICAgICAgICAgICBtYXhwb3dlciA9IHR2Yl9nZXRfZ3VpbnQ4
KHR2Yiwgb2Zmc2V0KzcpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF91aW50KHJh
ZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAg
dHZiLCBvZmZzZXQrNiwgMSwgKGd1aW50MzIpIGNoYW5uZWwpOw0KKyAgICAgICAgICAgICAgICBw
cm90b190cmVlX2FkZF91aW50KHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2Zy
ZXF1ZW5jeSwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzQsIDIsIGZyZXEpOw0K
KyAgICAgICAgICAgICAgICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwg
aGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3MsDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9m
ZnNldCswLCA0LCBmbGFncyk7DQorICAgICAgICAgICAgICAgIGZsYWdzX3RyZWUgPSBwcm90b19p
dGVtX2FkZF9zdWJ0cmVlKGl0LCBldHRfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3MpOw0KKyAgICAg
ICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFw
X3hjaGFubmVsX2ZsYWdzX3R1cmJvLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQr
MCwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZs
YWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2NjaywNCisgICAgICAgICAgICAg
ICAgICAgIHR2Yiwgb2Zmc2V0KzAsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9f
dHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19v
ZmRtLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMCwgMSwgZmxhZ3MpOw0KKyAg
ICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlv
dGFwX3hjaGFubmVsX2ZsYWdzXzJnaHosDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNl
dCswLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4o
ZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfNWdoeiwNCisgICAgICAgICAg
ICAgICAgICAgIHR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJv
dG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFn
c19wYXNzaXZlLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3Mp
Ow0KKyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhm
X3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2R5bmFtaWMsDQorICAgICAgICAgICAgICAgICAgICB0
dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRk
X2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3NfZ2ZzaywNCisg
ICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAg
ICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihmbGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hh
bm5lbF9mbGFnc19nc20sDQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCsxLCAxLCBm
bGFncyk7DQorICAgICAgICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJl
ZSwgaGZfcmFkaW90YXBfeGNoYW5uZWxfZmxhZ3Nfc3R1cmJvLA0KKyAgICAgICAgICAgICAgICAg
ICAgdHZiLCBvZmZzZXQrMSwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90b190cmVl
X2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2hhbGYs
DQorICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCsxLCAxLCBmbGFncyk7DQorICAgICAg
ICAgICAgICAgIHByb3RvX3RyZWVfYWRkX2Jvb2xlYW4oZmxhZ3NfdHJlZSwgaGZfcmFkaW90YXBf
eGNoYW5uZWxfZmxhZ3NfcXVhcnRlciwNCisgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0
KzEsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfYm9vbGVhbihm
bGFnc190cmVlLCBoZl9yYWRpb3RhcF94Y2hhbm5lbF9mbGFnc19odDIwLA0KKyAgICAgICAgICAg
ICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgICAgICBwcm90
b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3hjaGFubmVsX2ZsYWdz
X2h0NDB1LA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQrMiwgMSwgZmxhZ3MpOw0K
KyAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3Jh
ZGlvdGFwX3hjaGFubmVsX2ZsYWdzX2h0NDBkLA0KKyAgICAgICAgICAgICAgICAgICAgdHZiLCBv
ZmZzZXQrMiwgMSwgZmxhZ3MpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBicmVhazsN
CisgICAgICAgIH0NCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6DQorICAg
ICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9m
aHNzX2hvcHNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0
LCAxLCBGQUxTRSk7DQorICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90
cmVlLCBoZl9yYWRpb3RhcF9maHNzX3BhdHRlcm4sDQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0dmIsIG9mZnNldCwgMSwgRkFMU0UpOw0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAg
ICAgICAgY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT046DQorICAgICAgICAg
ICAgcHJvdG9fdHJlZV9hZGRfaXRlbShyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF90eF9hdHRl
bnVhdGlvbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAy
LCBGQUxTRSk7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElFRUU4MDIxMV9S
QURJT1RBUF9EQl9UWF9BVFRFTlVBVElPTjoNCisgICAgICAgICAgICBwcm90b190cmVlX2FkZF9p
dGVtKHJhZGlvdGFwX3RyZWUsIGhmX3JhZGlvdGFwX2RiX3R4X2F0dGVudWF0aW9uLA0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZzZXQsIDIsIEZBTFNFKTsNCisgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQ6DQog
ICAgICAgICAgICAgcmFkaW90YXBfaW5mby0+dHNmdD10dmJfZ2V0X2xldG9oNjQodHZiLCBvZmZz
ZXQpOw0KLQkgICAgaWYgKHRyZWUpIHsNCi0JCXByb3RvX3RyZWVfYWRkX3VpbnQ2NChyYWRpb3Rh
cF90cmVlLCBoZl9yYWRpb3RhcF9tYWN0aW1lLA0KLQkJCQl0dmIsIG9mZnNldCwgOCxyYWRpb3Rh
cF9pbmZvLT50c2Z0ICk7DQotCSAgICB9DQotCSAgICBvZmZzZXQrPTg7DQotCSAgICBsZW5ndGhf
cmVtYWluaW5nLT04Ow0KLQkgICAgYnJlYWs7DQotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0xP
Q0tfUVVBTElUWToNCi0JICAgIGFsaWduX29mZnNldCA9IEFMSUdOX09GRlNFVChvZmZzZXQsIDIp
Ow0KLQkgICAgb2Zmc2V0ICs9IGFsaWduX29mZnNldDsNCi0JICAgIGxlbmd0aF9yZW1haW5pbmcg
LT0gYWxpZ25fb2Zmc2V0Ow0KLQkgICAgaWYgKGxlbmd0aF9yZW1haW5pbmcgPCAyKQ0KLQkJYnJl
YWs7DQotCSAgICBpZiAodHJlZSkgew0KLQkJcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90
cmVlLCBoZl9yYWRpb3RhcF9xdWFsaXR5LA0KLQkJCQl0dmIsIG9mZnNldCwgMiwgdHZiX2dldF9s
ZXRvaHModHZiLCBvZmZzZXQpKTsNCi0JICAgIH0NCi0JICAgIG9mZnNldCs9MjsNCi0JICAgIGxl
bmd0aF9yZW1haW5pbmctPTI7DQotCSAgICBicmVhazsNCi0JY2FzZSBJRUVFODAyMTFfUkFESU9U
QVBfUlhfRkxBR1M6DQotCSAgICBpZiAocmFkaW90YXBfYml0MTRfZmNzKSB7DQotCSAgICAgICAg
YWxpZ25fb2Zmc2V0ID0gQUxJR05fT0ZGU0VUKG9mZnNldCwgNCk7DQotCSAgICAgICAgb2Zmc2V0
ICs9IGFsaWduX29mZnNldDsNCi0JICAgICAgICBsZW5ndGhfcmVtYWluaW5nIC09IGFsaWduX29m
ZnNldDsNCi0JICAgICAgICBpZiAobGVuZ3RoX3JlbWFpbmluZyA8IDQpDQotCSAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgIGlmICh0cmVlKSB7DQorICAgICAgICAgICAgICAgIHByb3Rv
X3RyZWVfYWRkX3VpbnQ2NChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9tYWN0aW1lLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCA4LHJhZGlvdGFwX2luZm8tPnRzZnQg
KTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICBjYXNlIElF
RUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFk6DQorICAgICAgICAgICAgaWYgKHRyZWUpIHsN
CisgICAgICAgICAgICAgICAgcHJvdG9fdHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9y
YWRpb3RhcF9xdWFsaXR5LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAy
LCB0dmJfZ2V0X2xldG9ocyh0dmIsIG9mZnNldCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAg
ICAgICBicmVhazsNCisgICAgICAgIGNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTOg0K
KyAgICAgICAgICAgIGlmIChyYWRpb3RhcF9iaXQxNF9mY3MpIHsNCiAgICAgICAgICAgICAgICAg
aWYgKHRyZWUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNlbnRfZmNzID0gdHZiX2dldF9udG9o
bCh0dmIsIG9mZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX3RpID0gcHJvdG9f
dHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9mY3MsDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dmIsIG9mZnNldCwg
NCwgc2VudF9mY3MpOw0KLSAgICAgICAgICAgICAgICAgICAgaGRyX2Zjc19vZmZzZXQgPSBvZmZz
ZXQ7DQorICAgICAgICAgICAgICAgICAgICAgICAgc2VudF9mY3MgPSB0dmJfZ2V0X250b2hsKHR2
Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX3RpID0gcHJvdG9f
dHJlZV9hZGRfdWludChyYWRpb3RhcF90cmVlLCBoZl9yYWRpb3RhcF9mY3MsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHZiLCBvZmZz
ZXQsIDQsIHNlbnRfZmNzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBoZHJfZmNzX29mZnNl
dCA9IG9mZnNldDsNCiAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvZmZzZXQr
PTQ7DQotICAgICAgICAgICAgICAgIGxlbmd0aF9yZW1haW5pbmctPTQ7DQotCSAgICB9IGVsc2Ug
ew0KLQkgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KLQ0KLSAgICAgICAgICAgICAgICBhbGlnbl9v
ZmZzZXQgPSBBTElHTl9PRkZTRVQob2Zmc2V0LCAyKTsNCi0gICAgICAgICAgICAgICAgb2Zmc2V0
ICs9IGFsaWduX29mZnNldDsNCi0gICAgICAgICAgICAgICAgbGVuZ3RoX3JlbWFpbmluZyAtPSBh
bGlnbl9vZmZzZXQ7DQotICAgICAgICAgICAgICAgIGlmIChsZW5ndGhfcmVtYWluaW5nIDwgMikN
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAg
ICAgICAgICAgICAgIHByb3RvX2l0ZW0gKml0Ow0KKw0KICAgICAgICAgICAgICAgICBpZiAodHJl
ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSB0dmJfZ2V0X2xldG9ocyh0dmIsIG9m
ZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFk
aW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcnhmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHZiLCBvZmZzZXQsIDIsIGZsYWdzKTsNCi0gICAgICAgICAgICAgICAgICAgIGZsYWdz
X3RyZWUgPSBwcm90b19pdGVtX2FkZF9zdWJ0cmVlKGl0LCBldHRfcmFkaW90YXBfcnhmbGFncyk7
DQotICAgICAgICAgICAgICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUs
IGhmX3JhZGlvdGFwX3J4ZmxhZ3NfYmFkcGxjcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHZiLCBvZmZzZXQsIDEsIGZsYWdzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBmbGFn
cyA9IHR2Yl9nZXRfbGV0b2hzKHR2Yiwgb2Zmc2V0KTsNCisgICAgICAgICAgICAgICAgICAgICAg
ICBpdCA9IHByb3RvX3RyZWVfYWRkX3VpbnQocmFkaW90YXBfdHJlZSwgaGZfcmFkaW90YXBfcnhm
bGFncywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zmc2V0LCAyLCBm
bGFncyk7DQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3NfdHJlZSA9IHByb3RvX2l0ZW1f
YWRkX3N1YnRyZWUoaXQsIGV0dF9yYWRpb3RhcF9yeGZsYWdzKTsNCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm90b190cmVlX2FkZF9ib29sZWFuKGZsYWdzX3RyZWUsIGhmX3JhZGlvdGFwX3J4
ZmxhZ3NfYmFkcGxjcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2Yiwgb2Zm
c2V0LCAxLCBmbGFncyk7DQogICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zm
c2V0Kz0yOw0KLSAgICAgICAgICAgICAgICBsZW5ndGhfcmVtYWluaW5nLT0yOw0KICAgICAgICAg
ICAgIH0NCi0JICAgIGJyZWFrOw0KLQlkZWZhdWx0Og0KLQkgICAgLyoNCi0JICAgICAqIFRoaXMg
aW5kaWNhdGVzIGEgZmllbGQgd2hvc2Ugc2l6ZSB3ZSBkbyBub3QNCi0JICAgICAqIGtub3csIHNv
IHdlIGNhbm5vdCBwcm9jZWVkLg0KLQkgICAgICovDQotCSAgICBuZXh0X3ByZXNlbnQgPSAwOw0K
LQkgICAgY29udGludWU7DQotCX0NCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCiAg
ICAgfQ0KIA0KKyAgICBpZiAoZXJyICE9IC1FTk9FTlQgJiYgdHJlZSkNCisgICAgICAgIHByb3Rv
X2l0ZW1fYXBwZW5kX3RleHQodGksICIgKG1hbGZvcm1lZCkiKTsNCisNCiAgICAgLyogVGhpcyBo
YW5kbGVzIHRoZSBjYXNlIG9mIGFuIEZDUyBleGl0aW5nIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1l
LiAqLw0KICAgICBpZiAocmZsYWdzICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTKQ0KLQlwaW5m
by0+cHNldWRvX2hlYWRlci0+aWVlZV84MDJfMTEuZmNzX2xlbiA9IDQ7DQorICAgICAgICBwaW5m
by0+cHNldWRvX2hlYWRlci0+aWVlZV84MDJfMTEuZmNzX2xlbiA9IDQ7DQogICAgIGVsc2UNCi0J
cGluZm8tPnBzZXVkb19oZWFkZXItPmllZWVfODAyXzExLmZjc19sZW4gPSAwOw0KKyAgICAgICAg
cGluZm8tPnBzZXVkb19oZWFkZXItPmllZWVfODAyXzExLmZjc19sZW4gPSAwOw0KIA0KK2hhbmRf
b2ZmX3RvXzgwMjExOg0KICAgICAvKiBHcmFiIHRoZSByZXN0IG9mIHRoZSBmcmFtZS4gKi8NCiAg
ICAgbmV4dF90dmIgPSB0dmJfbmV3X3N1YnNldF9yZW1haW5pbmcodHZiLCBsZW5ndGgpOw0KIA0K
LS0tIHRydW5rLm9yaWcvZXBhbi9kaXNzZWN0b3JzL01ha2VmaWxlLmNvbW1vbgkyMDA5LTExLTI2
IDE4OjUwOjUxLjAwMDAwMDAwMCArMDEwMA0KKysrIHRydW5rL2VwYW4vZGlzc2VjdG9ycy9NYWtl
ZmlsZS5jb21tb24JMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAgKzAxMDANCkBAIC03NDAs
NiArNzQwLDcgQEAgRElTU0VDVE9SX1NSQyA9IFwNCiAJcGFja2V0LXJhZGl1cy5jCQlcDQogCXBh
Y2tldC1yYWRpdXNfcGFja2V0Y2FibGUuYwlcDQogCXBhY2tldC1yYWRpb3RhcC5jCVwNCisJcGFj
a2V0LXJhZGlvdGFwLWl0ZXIuYwlcDQogCXBhY2tldC1yYXcuYwkJXA0KIAlwYWNrZXQtcmRtLmMJ
CVwNCiAJcGFja2V0LXJkdC5jCQlcDQpAQCAtMTE2OCw2ICsxMTY5LDggQEAgRElTU0VDVE9SX0lO
Q0xVREVTID0JXA0KIAlwYWNrZXQtcTkzMi5oCVwNCiAJcGFja2V0LXFzaWcuaAlcDQogCXBhY2tl
dC1yYWRpb3RhcC5oCVwNCisJcGFja2V0LXJhZGlvdGFwLWl0ZXIuaAlcDQorCXBhY2tldC1yYWRp
b3RhcC1kZWZzLmgJXA0KIAlwYWNrZXQtcmFkaXVzLmgJXA0KIAlwYWNrZXQtcmFuYXAuaAlcDQog
CXBhY2tldC1yYXcuaAlcDQotLS0gdHJ1bmsub3JpZy9lcGFuL2Rpc3NlY3RvcnMvTWFrZWZpbGUu
bm1ha2UJMjAwOS0xMS0yNiAxODo1MDo1MS4wMDAwMDAwMDAgKzAxMDANCisrKyB0cnVuay9lcGFu
L2Rpc3NlY3RvcnMvTWFrZWZpbGUubm1ha2UJMjAwOS0xMS0yNiAxODo1Mzo1My4wMDAwMDAwMDAg
KzAxMDANCkBAIC0xMiw3ICsxMiw3IEBAIGluY2x1ZGUgQ3VzdG9tLm5tYWtlDQogaW5jbHVkZSBN
YWtlZmlsZS5jb21tb24NCiANCiBDRkxBR1M9LVdYIC1ESEFWRV9DT05GSUdfSCAvSS4gL0kuLiAv
SS4uLy4uICQoR0xJQl9DRkxBR1MpIFwNCi0JJChaTElCX0NGTEFHUykgXA0KKwkkKFpMSUJfQ0ZM
QUdTKSAtRFJBRElPVEFQX1NVUFBPUlRfT1ZFUlJJREVTIFwNCiAJJChQQ1JFX0NGTEFHUykgJChH
TlVUTFNfQ0ZMQUdTKSAkKE5FVFRMRV9DRkxBR1MpIFwNCiAJJChLRldfQ0ZMQUdTKSAkKEFJUlBD
QVBfQ0ZMQUdTKSAkKEdFT0lQX0NGTEFHUykgXA0KIAkvSSQoUENBUF9ESVIpXGluY2x1ZGUgLURf
VV89IiIgJChMT0NBTF9DRkxBR1MpDQo=


--=-Itg9672XATyA12h1SH3I--

--=-BoTShiWGOhneCqohXLBK
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----

iQIcBAABAgAGBQJLDsEjAAoJEODzc/N7+QmabF4P/3F3bQK3vqI+ASY/DuWJ9rVF
NniUGO4IK7pYbYvzh7BGYfCbOR8Nt9NTx+5VaDfoL1op2OjFtShvVYbL/1MxgIHo
1P6kscUTiu37+lotakwPCZqToI85mIePZnYWRUOrZeSM/TtJbNU1Mm3WaYcBiYet
ophf6pIVBGIsRLYBp2ALKmJmCThxKwJiGPMIPoihtvFrBZ8Lsl0N/+ZDbhXmTSud
ShIUq5PNgyGEaqTw3kc1wP16Eaeq9c7cOlY/kwQheW+N1VRstGSnSf4JzJHBl7GI
yUddKMHyZJxC69AMe8V2oSqGcq9hA7mLzwVsKyD7cyJb+4yNeeDwoRk0dOnN3Qpy
NUV2Md5aas2UwJo9jxXoceWawrm1uNasP2gEwGpYx8o0/pVOAf0sJtIfJ/mDIj4b
651MXDIYUdlUI2WuyJNOKFSDT9FIIxtSCqkHMG5xMNeYM0XusDlC4i8BQeQa3aZ3
3wlVnsVXsvuq2KJvyTb/cOzwUM54PILbcryDqiDi38LyebcWTjsN+3IPcpFvU58u
10q7xbjVkKP9RB+2ecdl/1pYWT49YmeDjqMj4aWPhJ1Vm08NpyS1kEw1Sxp+VP8b
Co515a2w9L9EE4zkcno9+wGaxIIa3wtdLjrHY5kz897KE+hkIaUQVDqqwRYT+HTs
wVwyK2OCFqHjQLuKNDBD
=JSK0
-----END PGP SIGNATURE-----

--=-BoTShiWGOhneCqohXLBK--

             reply	other threads:[~2009-11-27  4:38 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-27  4:38 radiotap-owner-sUITvd46vNxg9hUCZPvPmw [this message]
     [not found] ` <20091127043806.GQ6179-eZodSLrBbDpBDgjK7y7TUQ@public.gmane.org>
2009-11-27  4:54   ` please disregard Re: BOUNCE radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org: Message too long (>40000 chars) David Young

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20091127043806.GQ6179@ojctech.com \
    --to=radiotap-owner-suitvd46vnxg9huczpvpmw@public.gmane.org \
    --cc=radiotap-sUITvd46vNxg9hUCZPvPmw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).