delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2016/02/11/18:51:33

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
X-Original-DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=robspanton.com; h=
content-type:date:from:message-id:mime-version:references
:reply-to:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=wtTMxxW
nYK7hUwQ64YeDlxOSw6c=; b=Q9DZgyLdjMlrAgxu/OHLxvZRrnqftRRQDCfVDg0
musuhxgVikd2Xpa7B1BXvVWQRrhbwL6x3BB4VRW8aIoZgeql0WB2OCsd1WFXq82o
EmWbs9pG7FDU+tSYmA+2MjKiKWHpRJr5K34KXGZW/DHGJZ8gtJtvOJ/J3lw2JeiI
jDgY=
X-Original-DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
messagingengine.com; h=content-type:date:from:message-id
:mime-version:references:reply-to:subject:to:x-sasl-enc
:x-sasl-enc; s=smtpout; bh=wtTMxxWnYK7hUwQ64YeDlxOSw6c=; b=YIVZu
kXKtTGj04fl/wEC6PRUnVwzgnDk0P5XWoZNNJhrX17k9gQhykz2dWHKai4/xrekf
HqrHN890U4efZoNxKMf+HjuuYebnT+zTBLzFtcDOoigMMy+q46BHItMq9uSfzs65
Df9C6P5vnM0PQG5vAdSNn5cn5VUazDNZvLLE6A=
X-Sasl-enc: LHEEdfNstQWCQVPtz+2sPb2W18mKf++UBl5PnSi4NYRv 1455234591
Message-ID: <1455234590.2726.11.camel@robspanton.com>
Subject: [geda-user] [PATCH] Elements Window
From: "Rob Spanton (rob AT robspanton DOT com) [via geda-user AT delorie DOT com]" <geda-user AT delorie DOT com>
To: geda-user AT delorie DOT com
Date: Thu, 11 Feb 2016 23:49:50 +0000
References: <1455231503 DOT 28583 DOT 17 DOT camel AT robspanton DOT com>
X-Mailer: Evolution 3.18.4 (3.18.4-1.fc23)
Mime-Version: 1.0
Reply-To: geda-user AT delorie DOT com

--=-IouJQOJRnOQySrdiMlSj
Content-Type: multipart/mixed; boundary="=-kDLW01Wybge5FyLAOOGg"


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

Hi,

When I'm editing a PCB, I often find that I want to find a group of
components on it.=C2=A0=C2=A0For example, I want to find a certain set of
decoupling capacitors to make sure they're positioned appropriately.
This is quite a slow process in pcb at the moment, as one has to use the
"Select by name" menu a lot etc.

So I've added a new window to pcb for browsing the elements that are on
a board.=C2=A0=C2=A0Please find a patch series attached that adds this, and=
 a
screenshot here [1].=C2=A0=C2=A0It would be great if the patches could be m=
erged
in.

At the moment, these provide just above the most basic level of
functionality that one could expect from this window.=C2=A0=C2=A0It has opt=
ions
for enabling/disabling search case sensitivity, enabling/disabling
regexes, and selecting/deselecting elements.

There are a few more things that I intend on extending this with in
future, including element name editing, and element attribute
display/search/editing.

Cheers,

Rob

[1]=C2=A0http://imgur.com/wQdMJrP
--=-kDLW01Wybge5FyLAOOGg
Content-Disposition: attachment; filename="0001-Add-a-HID-action-for-element-changes.patch"
Content-Type: text/x-patch; name="0001-Add-a-HID-action-for-element-changes.patch"; charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAwZTY3MmNmNDVjZmRmOGY3MjQ3MmE2MTk3ZmMxYzhlMDdjOTMwMjAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl
OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQxOjE3ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIEFk
ZCBhIEhJRCBhY3Rpb24gZm9yIGVsZW1lbnQgY2hhbmdlcwoKVGhpcyBjYWxscyBhbiAiRWxlbWVu
dHNDaGFuZ2VkIiBISUQgYWN0aW9uIHdoZW4gZWxlbWVudHMgaW4gdGhlIFBDQiBhcmUKY2hhbmdl
ZC4gIFRoaXMgd2lsbCBiZSB1c2VmdWwgZm9yIGFuIGVsZW1lbnQgYnJvd3NlciB3aW5kb3cgdGhh
dCBJIGFtCndvcmtpbmcgb24uCi0tLQogc3JjL2NoYW5nZS5jIHwgNiArKysrKy0KIHNyYy9jb3B5
LmMgICB8IDMgKysrCiBzcmMvcmVtb3ZlLmMgfCAzICsrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMSBp
bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2NoYW5nZS5jIGIv
c3JjL2NoYW5nZS5jCmluZGV4IGEyODIzYjcuLjg0NDBkOTEgMTAwNjQ0Ci0tLSBhL3NyYy9jaGFu
Z2UuYworKysgYi9zcmMvY2hhbmdlLmMKQEAgLTEwNjUsNiArMTA2NSw4IEBAIENoYW5nZUVsZW1l
bnRUZXh0IChQQ0JUeXBlICpwY2IsIERhdGFUeXBlICpkYXRhLCBFbGVtZW50VHlwZSAqRWxlbWVu
dCwgaW50IHdoaWNoCiBzdGF0aWMgdm9pZCAqCiBDaGFuZ2VFbGVtZW50TmFtZSAoRWxlbWVudFR5
cGUgKkVsZW1lbnQpCiB7CisgIGNoYXIqIHJldDsKKwogICBpZiAoVEVTVF9GTEFHIChMT0NLRkxB
RywgJkVsZW1lbnQtPk5hbWVbMF0pKQogICAgIHJldHVybiAoTlVMTCk7CiAgIGlmIChOQU1FX0lO
REVYIChQQ0IpID09IE5BTUVPTlBDQl9JTkRFWCkKQEAgLTEwNzcsNyArMTA3OSw5IEBAIENoYW5n
ZUVsZW1lbnROYW1lIChFbGVtZW50VHlwZSAqRWxlbWVudCkKIAl9CiAgICAgfQogCi0gIHJldHVy
biBDaGFuZ2VFbGVtZW50VGV4dCAoUENCLCBQQ0ItPkRhdGEsIEVsZW1lbnQsIE5BTUVfSU5ERVgg
KFBDQiksIE5ld05hbWUpOworICByZXQgPSBDaGFuZ2VFbGVtZW50VGV4dCAoUENCLCBQQ0ItPkRh
dGEsIEVsZW1lbnQsIE5BTUVfSU5ERVggKFBDQiksIE5ld05hbWUpOworICBoaWRfYWN0aW9uKCJF
bGVtZW50c0NoYW5nZWQiKTsKKyAgcmV0dXJuIHJldDsKIH0KIAogLyohCmRpZmYgLS1naXQgYS9z
cmMvY29weS5jIGIvc3JjL2NvcHkuYwppbmRleCA4MWIxNGE3Li5mYTA5NDJjIDEwMDY0NAotLS0g
YS9zcmMvY29weS5jCisrKyBiL3NyYy9jb3B5LmMKQEAgLTI5OCw2ICsyOTgsOSBAQCBDb3B5RWxl
bWVudCAoRWxlbWVudFR5cGUgKkVsZW1lbnQpCiAKICAgLyogdGhpcyBjYWxsIGNsZWFycyB0aGUg
cG9seWdvbnMgKi8KICAgQWRkT2JqZWN0VG9DcmVhdGVVbmRvTGlzdCAoRUxFTUVOVF9UWVBFLCBl
bGVtZW50LCBlbGVtZW50LCBlbGVtZW50KTsKKworICBoaWRfYWN0aW9uKCJFbGVtZW50c0NoYW5n
ZWQiKTsKKwogICBpZiAoUENCLT5FbGVtZW50T24gJiYgKEZST05UIChlbGVtZW50KSB8fCBQQ0It
PkludmlzaWJsZU9iamVjdHNPbikpCiAgICAgewogICAgICAgRHJhd0VsZW1lbnROYW1lIChlbGVt
ZW50KTsKZGlmZiAtLWdpdCBhL3NyYy9yZW1vdmUuYyBiL3NyYy9yZW1vdmUuYwppbmRleCAzOWFm
NDhmLi5iMTE4NTUyIDEwMDY0NAotLS0gYS9zcmMvcmVtb3ZlLmMKKysrIGIvc3JjL3JlbW92ZS5j
CkBAIC0yNzksNiArMjc5LDggQEAgRGVzdHJveUVsZW1lbnQgKEVsZW1lbnRUeXBlICpFbGVtZW50
KQogCiAgIGdfc2xpY2VfZnJlZSAoRWxlbWVudFR5cGUsIEVsZW1lbnQpOwogCisgIGhpZF9hY3Rp
b24oIkVsZW1lbnRzQ2hhbmdlZCIpOworCiAgIHJldHVybiBOVUxMOwogfQogCkBAIC01NzgsNiAr
NTgwLDcgQEAgUmVtb3ZlRWxlbWVudCAoRWxlbWVudFR5cGUgKkVsZW1lbnQpCiAJRHJhdyAoKTsK
ICAgICB9CiAgIE1vdmVPYmplY3RUb1JlbW92ZVVuZG9MaXN0IChFTEVNRU5UX1RZUEUsIEVsZW1l
bnQsIEVsZW1lbnQsIEVsZW1lbnQpOworICBoaWRfYWN0aW9uKCJFbGVtZW50c0NoYW5nZWQiKTsK
ICAgcmV0dXJuIE5VTEw7CiB9CiAKLS0gCjIuNS4wCgo=


--=-kDLW01Wybge5FyLAOOGg
Content-Disposition: attachment; filename="0002-Add-a-function-to-select-an-element-by-pointer.patch"
Content-Type: text/x-patch; name="0002-Add-a-function-to-select-an-element-by-pointer.patch"; charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAzMGRiNzVlZWE4NWQ4ODg4MGNkYTVjYmU3OGMxNjZlNzE1YWRlNDNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl
OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQzOjMxICswMDAwClN1YmplY3Q6IFtQQVRDSCAyLzNdIEFk
ZCBhIGZ1bmN0aW9uIHRvIHNlbGVjdCBhbiBlbGVtZW50IGJ5IHBvaW50ZXIKClByZXZpb3VzbHkg
dGhlIG9ubHkgbWV0aG9kIG9mIHNlbGVjdGluZyBhbiBlbGVtZW50IHdhcyB0byB1c2UKU2VsZWN0
T2JqZWN0QnlOYW1lKCksIHdoaWNoIChhcyBpdCBzYXlzIGluIGl0cyBuYW1lKSBzZWxlY3RzIG9i
amVjdHMgYnkKbmFtZS4gIEl0IGlzIG9mdGVuIGluY29udmVuaWVudCBhbmQgdW5uZWNlc3Nhcmls
eSBpbmRpcmVjdCB0byBzZWxlY3QKZWxlbWVudHMgYnkgbmFtZSwgc28gdGhpcyBwYXRjaCBpbnRy
b2R1Y2VzIFNlbGVjdEVsZW1lbnQoKSwgd2hpY2ggdGFrZXMKYSBwb2ludGVyIHRvIGFuIGVsZW1l
bnQuCi0tLQogc3JjL3NlbGVjdC5jIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvc2VsZWN0LmggfCAgMiArKwogMiBm
aWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9zcmMvc2VsZWN0LmMgYi9zcmMvc2VsZWN0LmMKaW5kZXggYzJjYjEzMC4uNjBlNTNlYSAx
MDA2NDQKLS0tIGEvc3JjL3NlbGVjdC5jCisrKyBiL3NyYy9zZWxlY3QuYwpAQCAtNDQsNiArNDQs
NyBAQAogI2luY2x1ZGUgIm1pc2MuaCIKICNpbmNsdWRlICJmaW5kLmgiCiAKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZmRlZiBIQVZFX1JFR0VYX0gKICNp
bmNsdWRlIDxyZWdleC5oPgpAQCAtODI0LDYgKzgyNSw1OSBAQCByZWdleGVjX21hdGNoX2FsbCAo
Y29uc3QgIHJlZ2V4X3QgICpwcmVnLCAgY29uc3QgIGNoYXIgICpzdHJpbmcpCiB9CiAjZW5kaWYK
IAorLyogU2VsZWN0IGFuIGVsZW1lbnQsIGJ1dCBkb24ndCByZWRyYXcgR1VJICovCitzdGF0aWMg
Ym9vbAorc2VsZWN0X2VsZW1lbnRfbm9fZHJhdyhFbGVtZW50VHlwZSogZWxlbWVudCwgYm9vbCBz
ZWxlY3QpCit7CisgIGFzc2VydChlbGVtZW50ICE9IE5VTEwpOworCisgIGlmICghVEVTVF9GTEFH
IChMT0NLRkxBRywgZWxlbWVudCkKKyAgICAgICYmICgoVEVTVF9GTEFHIChPTlNPTERFUkZMQUcs
IGVsZW1lbnQpICE9IDApID09IFNXQVBfSURFTlQKKwkgIHx8IFBDQi0+SW52aXNpYmxlT2JqZWN0
c09uKQorICAgICAgJiYgVEVTVF9GTEFHIChTRUxFQ1RFREZMQUcsIGVsZW1lbnQpICE9IHNlbGVj
dCkKKyAgeworICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UX1RZUEUsIGVsZW1l
bnQsIGVsZW1lbnQsIGVsZW1lbnQpOworICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNl
bGVjdCwgZWxlbWVudCk7CisgICAgUElOX0xPT1AgKGVsZW1lbnQpOworICAgIHsKKyAgICAgIEFk
ZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChQSU5fVFlQRSwgZWxlbWVudCwgcGluLCBwaW4pOworICAg
ICAgQVNTSUdOX0ZMQUcgKFNFTEVDVEVERkxBRywgc2VsZWN0LCBwaW4pOworICAgIH0KKyAgICBF
TkRfTE9PUDsKKyAgICBQQURfTE9PUCAoZWxlbWVudCk7CisgICAgeworICAgICAgQWRkT2JqZWN0
VG9GbGFnVW5kb0xpc3QgKFBBRF9UWVBFLCBlbGVtZW50LCBwYWQsIHBhZCk7CisgICAgICBBU1NJ
R05fRkxBRyAoU0VMRUNURURGTEFHLCBzZWxlY3QsIHBhZCk7CisgICAgfQorICAgIEVORF9MT09Q
OworICAgIEVMRU1FTlRURVhUX0xPT1AgKGVsZW1lbnQpOworICAgIHsKKyAgICAgIEFkZE9iamVj
dFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UTkFNRV9UWVBFLCBlbGVtZW50LCB0ZXh0LCB0ZXh0KTsK
KyAgICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNlbGVjdCwgdGV4dCk7CisgICAgfQor
ICAgIEVORF9MT09QOworICAgIERyYXdFbGVtZW50TmFtZSAoZWxlbWVudCk7CisgICAgRHJhd0Vs
ZW1lbnQgKGVsZW1lbnQpOworCisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvKiBOb3RoaW5n
IHdhcyBjaGFuZ2VkICovCisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbAorU2VsZWN0RWxlbWVu
dChFbGVtZW50VHlwZSogZWxlbWVudCwgYm9vbCBzZWxlY3QpCit7CisgIGlmKCBzZWxlY3RfZWxl
bWVudF9ub19kcmF3KGVsZW1lbnQsIHNlbGVjdCkgKSB7CisgICAgSW5jcmVtZW50VW5kb1Nlcmlh
bE51bWJlciAoKTsKKyAgICBEcmF3ICgpOworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgcmV0
dXJuIGZhbHNlOworfQorCiBib29sCiBTZWxlY3RPYmplY3RCeU5hbWUgKGludCBUeXBlLCBjaGFy
ICpQYXR0ZXJuLCBib29sIHNlbGVjdCkKIHsKQEAgLTg4MCwzOSArOTM0LDExIEBAIFNlbGVjdE9i
amVjdEJ5TmFtZSAoaW50IFR5cGUsIGNoYXIgKlBhdHRlcm4sIGJvb2wgc2VsZWN0KQogICBpZiAo
UENCLT5FbGVtZW50T24gJiYgKFR5cGUgJiBFTEVNRU5UX1RZUEUpKQogICAgIEVMRU1FTlRfTE9P
UCAoUENCLT5EYXRhKTsKICAgewotICAgIGlmICghVEVTVF9GTEFHIChMT0NLRkxBRywgZWxlbWVu
dCkKLQkmJiAoKFRFU1RfRkxBRyAoT05TT0xERVJGTEFHLCBlbGVtZW50KSAhPSAwKSA9PSBTV0FQ
X0lERU5UCi0JICAgIHx8IFBDQi0+SW52aXNpYmxlT2JqZWN0c09uKQotCSYmIFRFU1RfRkxBRyAo
U0VMRUNURURGTEFHLCBlbGVtZW50KSAhPSBzZWxlY3QpCi0gICAgICB7Ci0JU3RyaW5nIG5hbWUg
PSBFTEVNRU5UX05BTUUgKFBDQiwgZWxlbWVudCk7Ci0JaWYgKG5hbWUgJiYgUkVHRVhFQyAobmFt
ZSkpCi0JICB7Ci0JICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChFTEVNRU5UX1RZUEUsIGVs
ZW1lbnQsIGVsZW1lbnQsIGVsZW1lbnQpOwotCSAgICBBU1NJR05fRkxBRyAoU0VMRUNURURGTEFH
LCBzZWxlY3QsIGVsZW1lbnQpOwotCSAgICBQSU5fTE9PUCAoZWxlbWVudCk7Ci0JICAgIHsKLQkg
ICAgICBBZGRPYmplY3RUb0ZsYWdVbmRvTGlzdCAoUElOX1RZUEUsIGVsZW1lbnQsIHBpbiwgcGlu
KTsKLQkgICAgICBBU1NJR05fRkxBRyAoU0VMRUNURURGTEFHLCBzZWxlY3QsIHBpbik7Ci0JICAg
IH0KLQkgICAgRU5EX0xPT1A7Ci0JICAgIFBBRF9MT09QIChlbGVtZW50KTsKLQkgICAgewotCSAg
ICAgIEFkZE9iamVjdFRvRmxhZ1VuZG9MaXN0IChQQURfVFlQRSwgZWxlbWVudCwgcGFkLCBwYWQp
OwotCSAgICAgIEFTU0lHTl9GTEFHIChTRUxFQ1RFREZMQUcsIHNlbGVjdCwgcGFkKTsKLQkgICAg
fQotCSAgICBFTkRfTE9PUDsKLQkgICAgRUxFTUVOVFRFWFRfTE9PUCAoZWxlbWVudCk7Ci0JICAg
IHsKLQkgICAgICBBZGRPYmplY3RUb0ZsYWdVbmRvTGlzdCAoRUxFTUVOVE5BTUVfVFlQRSwgZWxl
bWVudCwgdGV4dCwgdGV4dCk7Ci0JICAgICAgQVNTSUdOX0ZMQUcgKFNFTEVDVEVERkxBRywgc2Vs
ZWN0LCB0ZXh0KTsKLQkgICAgfQotCSAgICBFTkRfTE9PUDsKLQkgICAgRHJhd0VsZW1lbnROYW1l
IChlbGVtZW50KTsKLQkgICAgRHJhd0VsZW1lbnQgKGVsZW1lbnQpOwotCSAgICBjaGFuZ2VkID0g
dHJ1ZTsKLQkgIH0KLSAgICAgIH0KKyAgICBTdHJpbmcgbmFtZSA9IEVMRU1FTlRfTkFNRSAoUENC
LCBlbGVtZW50KTsKKyAgICBpZiAobmFtZSAmJiBSRUdFWEVDIChuYW1lKQorCSYmIHNlbGVjdF9l
bGVtZW50X25vX2RyYXcoZWxlbWVudCwgc2VsZWN0KSkgeworICAgICAgY2hhbmdlZCA9IHRydWU7
CisgICAgfQogICB9CiAgIEVORF9MT09QOwogICBpZiAoUENCLT5QaW5PbiAmJiAoVHlwZSAmIFBJ
Tl9UWVBFKSkKZGlmZiAtLWdpdCBhL3NyYy9zZWxlY3QuaCBiL3NyYy9zZWxlY3QuaAppbmRleCA0
MGU0NzVkLi4wYzJkN2RlIDEwMDY0NAotLS0gYS9zcmMvc2VsZWN0LmgKKysrIGIvc3JjL3NlbGVj
dC5oCkBAIC00Niw0ICs0Niw2IEBAIGJvb2wgU2VsZWN0QnlGbGFnIChpbnQgZmxhZywgYm9vbCBz
ZWxlY3QpOwogYm9vbCBTZWxlY3RPYmplY3RCeU5hbWUgKGludCwgY2hhciAqLCBib29sKTsKICNl
bmRpZgogCitib29sIFNlbGVjdEVsZW1lbnQoRWxlbWVudFR5cGUqIGVsZW1lbnQsIGJvb2wgc2Vs
ZWN0KTsKKwogI2VuZGlmCi0tIAoyLjUuMAoK


--=-kDLW01Wybge5FyLAOOGg
Content-Disposition: attachment; filename="0003-Add-an-elements-window.patch"
Content-Type: text/x-patch; name="0003-Add-an-elements-window.patch"; charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAxMWUwZDI3ZTExM2U3NWQ1NTNiODcyZDgzYjA0ZDU2ZWZlZjdkNDExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2IgU3BhbnRvbiA8cm9iQHJvYnNwYW50b24uY29tPgpEYXRl
OiBUaHUsIDExIEZlYiAyMDE2IDIxOjQ2OjIxICswMDAwClN1YmplY3Q6IFtQQVRDSCAzLzNdIEFk
ZCBhbiBlbGVtZW50cyB3aW5kb3cKCkkgZmluZCB0aGF0IEkgYW0gb2Z0ZW4gdHJ5aW5nIHRvIGZp
bmQgYSBjb21wb25lbnQsIG9yIGEgc2V0IG9mCmNvbXBvbmVudHMsIG9uIGEgUENCIGJ5IHJlZmRl
cy4gIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyB3aW5kb3cgdG8gUENCCnRoYXQgc2hvd3MgYSBzZWFy
Y2hhYmxlIGxpc3Qgb2YgYWxsIGVsZW1lbnRzLiAgRWxlbWVudHMgY2FuIGJlIHNlbGVjdGVkCmlu
IHRoYXQgbGlzdCBhbmQgdGhlbiBvcHRpb25hbGx5IHNlbGVjdGVkL2Rlc2VsZWN0ZWQuCgpJIGFt
IGhvcGluZyB0byBleHRlbmQgdGhpcyB3aW5kb3cgdG8gcHJvdmlkZSBhY2Nlc3MgdG8sIGFuZCBz
ZWFyY2gsIHRoZQphdHRyaWJ1dGVzIG9mIGVsZW1lbnRzIHRvby4KLS0tCiBzcmMvTWFrZWZpbGUu
YW0gICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9ncGNiLW1lbnUucmVzLmluICAg
ICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2hpZC9ndGsvZ3RraGlkLW1haW4uYyAgICAgICAg
ICAgICB8ICAgOSArLQogc3JjL2hpZC9ndGsvZ3VpLWNvbmZpZy5jICAgICAgICAgICAgICB8ICAg
MiArCiBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtc2VhcmNoLWJhci5jIHwgMTgzICsrKysrKysr
KysrKysKIHNyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmggfCAgNTkgKysrKwog
c3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXdpbmRvdy5jICAgICB8IDQ5OSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93Lmgg
ICAgIHwgIDY1ICsrKysrCiBzcmMvaGlkL2d0ay9ndWkuaCAgICAgICAgICAgICAgICAgICAgIHwg
ICAyICsKIDkgZmlsZXMgY2hhbmdlZCwgODIwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXNlYXJjaC1iYXIu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFy
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmgKCmRp
ZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KaW5kZXggNjlhNGRm
Mi4uOTI4YjliOSAxMDA2NDQKLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKyBiL3NyYy9NYWtlZmls
ZS5hbQpAQCAtMzEwLDYgKzMxMCw4IEBAIExJQkdUS19TUkNTID0gXAogCWhpZC9ndGsvZ3VpLWRp
YWxvZy5jIFwKIAloaWQvZ3RrL2d1aS1kcmMtd2luZG93LmMgXAogCWhpZC9ndGsvZ3VpLWRyYy13
aW5kb3cuaCBcCisJaGlkL2d0ay9ndWktZWxlbWVudHMtd2luZG93LmMgXAorCWhpZC9ndGsvZ3Vp
LWVsZW1lbnRzLXNlYXJjaC1iYXIuYyBcCiAJaGlkL2d0ay9ndWkta2V5cmVmLXdpbmRvdy5jIFwK
IAloaWQvZ3RrL2d1aS1saWJyYXJ5LXdpbmRvdy5jIFwKIAloaWQvZ3RrL2d1aS1saWJyYXJ5LXdp
bmRvdy5oIFwKZGlmZiAtLWdpdCBhL3NyYy9ncGNiLW1lbnUucmVzLmluIGIvc3JjL2dwY2ItbWVu
dS5yZXMuaW4KaW5kZXggNGNlYTE3OS4uODhiZDlmZSAxMDA2NDQKLS0tIGEvc3JjL2dwY2ItbWVu
dS5yZXMuaW4KKysrIGIvc3JjL2dwY2ItbWVudS5yZXMuaW4KQEAgLTQ2MCw2ICs0NjAsNyBAQCBN
YWluTWVudSA9CiAgICB7Ik5ldGxpc3QiIERvV2luZG93cyhOZXRsaXN0KX0KICAgIHsiQ29tbWFu
ZCBFbnRyeSIgQ29tbWFuZCgpIGE9eyI6IiAiPEtleT46In19CiAgICB7IlBpbm91dCIgRGlzcGxh
eShQaW5vdXQpIGE9eyJTaGlmdC1EIiAiU2hpZnQ8S2V5PmQifX0KKyAgIHsiRWxlbWVudHMiIERv
V2luZG93cyhFbGVtZW50cyl9CiAgICAtCiAgICB7IkFib3V0Li4uIiBBYm91dCgpfQogICB9CmRp
ZmYgLS1naXQgYS9zcmMvaGlkL2d0ay9ndGtoaWQtbWFpbi5jIGIvc3JjL2hpZC9ndGsvZ3RraGlk
LW1haW4uYwppbmRleCAxZTIxMGFiLi40MmI4MGZiIDEwMDY0NAotLS0gYS9zcmMvaGlkL2d0ay9n
dGtoaWQtbWFpbi5jCisrKyBiL3NyYy9oaWQvZ3RrL2d0a2hpZC1tYWluLmMKQEAgLTE2LDYgKzE2
LDcgQEAKICNpbmNsdWRlICJlcnJvci5oIgogI2luY2x1ZGUgIi4uL2hpZGludC5oIgogI2luY2x1
ZGUgImd1aS5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy13aW5kb3cuaCIKICNpbmNsdWRlICJo
aWQvY29tbW9uL2hpZG5vZ3VpLmgiCiAjaW5jbHVkZSAiaGlkL2NvbW1vbi9kcmF3X2hlbHBlcnMu
aCIKICNpbmNsdWRlICJwY2ItcHJpbnRmLmgiCkBAIC0xNzI3LDggKzE3MjgsOCBAQCBDdXJzb3JB
Y3Rpb24oaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBDb29yZCB4LCBDb29yZCB5KQogLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CiAKIHN0YXRpYyBjb25zdCBjaGFyIGRvd2luZG93c19zeW50YXhbXSA9Ci0iRG9XaW5kb3dzKDF8
MnwzfDR8NXw2KVxuIgotIkRvV2luZG93cyhMYXlvdXR8TGlicmFyeXxMb2d8TmV0bGlzdHxQcmVm
ZXJlbmNlc3xEUkMpIjsKKyJEb1dpbmRvd3MoMXwyfDN8NHw1fDZ8NylcbiIKKyJEb1dpbmRvd3Mo
TGF5b3V0fExpYnJhcnl8TG9nfE5ldGxpc3R8UHJlZmVyZW5jZXN8RFJDfEVsZW1lbnRzKSI7CiAK
IHN0YXRpYyBjb25zdCBjaGFyIGRvd2luZG93c19oZWxwW10gPQogTl8oIk9wZW4gdmFyaW91cyBH
VUkgd2luZG93cy4iKTsKQEAgLTE3OTQsNiArMTc5NSwxMCBAQCBEb1dpbmRvd3MgKGludCBhcmdj
LCBjaGFyICoqYXJndiwgQ29vcmQgeCwgQ29vcmQgeSkKICAgICB7CiAgICAgICBnaGlkX2RyY193
aW5kb3dfc2hvdyAoVFJVRSk7CiAgICAgfQorICBlbHNlIGlmKCBzdHJjbXAgKGEsICI3IikgPT0g
MCB8fCBzdHJjYXNlY21wIChhLCAiRWxlbWVudHMiKSA9PSAwICkKKyAgICB7CisgICAgICBnaGlk
X2VsZW1lbnRzX3dpbmRvd19zaG93KCk7CisgICAgfQogICBlbHNlCiAgICAgewogICAgICAgQUZB
SUwgKGRvd2luZG93cyk7CmRpZmYgLS1naXQgYS9zcmMvaGlkL2d0ay9ndWktY29uZmlnLmMgYi9z
cmMvaGlkL2d0ay9ndWktY29uZmlnLmMKaW5kZXggYWE5MWRiZi4uMzBmOTZlYSAxMDA2NDQKLS0t
IGEvc3JjL2hpZC9ndGsvZ3VpLWNvbmZpZy5jCisrKyBiL3NyYy9oaWQvZ3RrL2d1aS1jb25maWcu
YwpAQCAtMTQ3LDYgKzE0Nyw4IEBAIHN0YXRpYyBDb25maWdBdHRyaWJ1dGUgY29uZmlnX2F0dHJp
YnV0ZXNbXSA9IHsKICAgeyJuZXRsaXN0LXdpbmRvdy1oZWlnaHQiLCBDT05GSUdfSW50ZWdlciwg
Jl9naGlkZ3VpLm5ldGxpc3Rfd2luZG93X2hlaWdodH0sCiAgIHsia2V5cmVmLXdpbmRvdy13aWR0
aCIsIENPTkZJR19JbnRlZ2VyLCAmX2doaWRndWkua2V5cmVmX3dpbmRvd193aWR0aH0sCiAgIHsi
a2V5cmVmLXdpbmRvdy1oZWlnaHQiLCBDT05GSUdfSW50ZWdlciwgJl9naGlkZ3VpLmtleXJlZl93
aW5kb3dfaGVpZ2h0fSwKKyAgeyJlbGVtZW50cy13aW5kb3ctd2lkdGgiLCBDT05GSUdfSW50ZWdl
ciwgJl9naGlkZ3VpLmVsZW1lbnRzX3dpbmRvd193aWR0aH0sCisgIHsiZWxlbWVudHMtd2luZG93
LWhlaWdodCIsIENPTkZJR19JbnRlZ2VyLCAmX2doaWRndWkuZWxlbWVudHNfd2luZG93X2hlaWdo
dH0sCiAgIHsidGV4dC1zY2FsZSIsIENPTkZJR19VbnVzZWQsIE5VTEx9LAogICB7InZpYS10aGlj
a25lc3MiLCBDT05GSUdfVW51c2VkLCBOVUxMfSwKICAgeyJ2aWEtZHJpbGxpbmctaG9sZSIsIENP
TkZJR19VbnVzZWQsIE5VTEx9LApkaWZmIC0tZ2l0IGEvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRz
LXNlYXJjaC1iYXIuYyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEzZTc0YQotLS0gL2Rldi9udWxsCisr
KyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmMKQEAgLTAsMCArMSwxODMg
QEAKKy8qIGdFREEgLSBHUEwgRWxlY3Ryb25pYyBEZXNpZ24gQXV0b21hdGlvbgorICogQ29weXJp
Z2h0IChDKSAyMDE2IFJvYiBTcGFudG9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBN
QSAwMjEzOSwgVVNBLgorICoKKyAqIFJvYiBTcGFudG9uOiByb2JAcm9ic3BhbnRvbi5jb20KKyAq
LworI2luY2x1ZGUgImdsb2JhbC5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy1zZWFyY2gtYmFy
LmgiCisKK0dfREVGSU5FX1RZUEUoR2hpZEVsZW1lbnRzU2VhcmNoQmFyLCBnaGlkX2VsZW1lbnRz
X3NlYXJjaF9iYXIsIEdUS19UWVBFX0VOVFJZKTsKKworZW51bSB7CisJUFJPUF9SRUdFWCA9IDEs
CisJUFJPUF9DQVNFX1NFTlNJVElWRSwKKwlOX1BST1BFUlRJRVMsCit9OworCisvKiBUaGUgR2hp
ZEVsZW1lbnRzU2VhcmNoQmFyIEdPYmplY3QgcHJvcGVydGllcyAqLworc3RhdGljIEdQYXJhbVNw
ZWMgKm9ial9wcm9wZXJ0aWVzW05fUFJPUEVSVElFU10gPSB7IE5VTEwsIH07CisKKy8qIEdoaWRF
bGVtZW50c1NlYXJjaEJhciBwcm9wZXJ0eSBnZXR0ZXIgKi8KK3N0YXRpYyB2b2lkIGdldF9wcm9w
ZXJ0eShHT2JqZWN0ICpvYmplY3QsCisJCQkgZ3VpbnQgcHJvcGVydHlfaWQsCisJCQkgR1ZhbHVl
ICp2YWx1ZSwKKwkJCSBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlHaGlkRWxlbWVudHNTZWFyY2hC
YXIgKnNlbGYgPSBHSElEX0VMRU1FTlRTX1NFQVJDSF9CQVIob2JqZWN0KTsKKworCXN3aXRjaChw
cm9wZXJ0eV9pZCkgeworCWNhc2UgUFJPUF9SRUdFWDoKKwkJZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwKKwkJCQkgICAgZ3RrX2NoZWNrX21lbnVfaXRlbV9nZXRfYWN0aXZlKEdUS19DSEVDS19N
RU5VX0lURU0oc2VsZi0+ZW5hYmxlX3JlZ2V4KSkpOworCQlicmVhazsKKworCWNhc2UgUFJPUF9D
QVNFX1NFTlNJVElWRToKKwkJZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwKKwkJCQkgICAgZ3Rr
X2NoZWNrX21lbnVfaXRlbV9nZXRfYWN0aXZlKEdUS19DSEVDS19NRU5VX0lURU0oc2VsZi0+Y2Fz
ZV9zZW5zZSkpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFM
SURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eV9pZCwgcHNwZWMpOworCQlicmVhazsKKwl9
Cit9CisKKy8qIEdoaWRFbGVtZW50c1NlYXJjaEJhckNsYXNzIGluaXRpYWxpc2VyICovCitzdGF0
aWMgdm9pZCBnaGlkX2VsZW1lbnRzX3NlYXJjaF9iYXJfY2xhc3NfaW5pdChHaGlkRWxlbWVudHNT
ZWFyY2hCYXJDbGFzcyAqa2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKwlvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdl
dF9wcm9wZXJ0eTsKKworCW9ial9wcm9wZXJ0aWVzW1BST1BfUkVHRVhdID0gZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oInJlZ2V4IiwKKwkJCQkJCQkgICJSZWdleCBlbmFibGVkIiwKKwkJCQkJCQkgICJX
aGV0aGVyIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggaXMgZW5hYmxlZCIsCisJCQkJCQkJICBU
UlVFLAorCQkJCQkJCSAgR19QQVJBTV9SRUFEQUJMRSk7CisKKwlvYmpfcHJvcGVydGllc1tQUk9Q
X0NBU0VfU0VOU0lUSVZFXSA9IGdfcGFyYW1fc3BlY19ib29sZWFuKCJjYXNlLXNlbnNpdGl2ZSIs
CisJCQkJCQkJCSAgICJDYXNlIHNlbnNpdGl2ZSIsCisJCQkJCQkJCSAgICJXaGV0aGVyIHNlYXJj
aCBpcyBjYXNlIHNlbnNpdGl2ZSIsCisJCQkJCQkJCSAgIEZBTFNFLAorCQkJCQkJCQkgICBHX1BB
UkFNX1JFQURBQkxFKTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhvYmpl
Y3RfY2xhc3MsCisJCQkJCSAgTl9QUk9QRVJUSUVTLAorCQkJCQkgIG9ial9wcm9wZXJ0aWVzKTsK
K30KKworLyogQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHNlYXJjaCBpY29uIGlzIGNsaWNrZWQgKi8K
K3N0YXRpYyB2b2lkIHNlYXJjaF9pY29uX2NsaWNrZWQoIEd0a0VudHJ5ICplbnRyeSwKKwkJCQkg
R3RrRW50cnlJY29uUG9zaXRpb24gaWNvbl9wb3MsCisJCQkJIEdka0V2ZW50ICpldmVudCwKKwkJ
CQkgZ3BvaW50ZXIgX21lbnUgKQoreworCUd0a01lbnUgKm1lbnUgPSBHVEtfTUVOVShfbWVudSk7
CisKKwlpZiggZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUyApIHsKKwkJR2RrRXZlbnRC
dXR0b24gKmJ1dHRvbiA9IChHZGtFdmVudEJ1dHRvbiopZXZlbnQ7CisJCWd0a19tZW51X3BvcHVw
KG1lbnUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkgICAgICAgYnV0dG9uLT5idXR0b24s
IGJ1dHRvbi0+dGltZSk7CisJfQorfQorCisvKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgcmVnZXgg
b3B0aW9uIGlzIHRvZ2dsZWQgaW4gdGhlIHNlYXJjaCBtZW51ICovCitzdGF0aWMgdm9pZCByZWdl
eF90b2dnbGVkKCBHdGtDaGVja01lbnVJdGVtICppdGVtLAorCQkJICAgZ3BvaW50ZXIgX3NlbGYg
KQoreworCUdoaWRFbGVtZW50c1NlYXJjaEJhciAqc2VsZiA9IEdISURfRUxFTUVOVFNfU0VBUkNI
X0JBUihfc2VsZik7CisKKwlnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoIEdfT0JKRUNUKHNlbGYp
LAorCQkJCSAgb2JqX3Byb3BlcnRpZXNbUFJPUF9SRUdFWF0gKTsKK30KKworLyogQ2FsbGJhY2sg
Zm9yIHdoZW4gY2FzZSBzZW5zaXRpdml0eSBpcyB0b2dnbGVkIGluIHRoZSBzZWFyY2ggbWVudSAq
Lworc3RhdGljIHZvaWQgY2FzZV90b2dnbGVkKCBHdGtDaGVja01lbnVJdGVtICppdGVtLAorCQkJ
ICBncG9pbnRlciBfc2VsZiApCit7CisJR2hpZEVsZW1lbnRzU2VhcmNoQmFyICpzZWxmID0gR0hJ
RF9FTEVNRU5UU19TRUFSQ0hfQkFSKF9zZWxmKTsKKworCWdfb2JqZWN0X25vdGlmeV9ieV9wc3Bl
YyggR19PQkpFQ1Qoc2VsZiksCisJCQkJICBvYmpfcHJvcGVydGllc1tQUk9QX0NBU0VfU0VOU0lU
SVZFXSApOworfQorCisvKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgc2VhcmNoIHRleHQgaXMgY2hh
bmdlZCAqLworc3RhdGljIHZvaWQgdGV4dF9jaGFuZ2VfY2IoIEd0a0VkaXRhYmxlICplbnRyeSwK
KwkJCSAgICBncG9pbnRlciBfdWQgKQoreworCWNvbnN0IGNoYXIqIGljb25fbmFtZSA9IE5VTEw7
CisKKwkvKiBEaXNhYmxlIHRoZSBjbGVhciBidXR0b24gaWYgdGhlcmUgaXMgbm8gdGV4dCAqLwor
CWlmKCBndGtfZW50cnlfZ2V0X3RleHRfbGVuZ3RoKEdUS19FTlRSWShlbnRyeSkpID4gMCApIHsK
KwkJaWNvbl9uYW1lID0gImVkaXQtY2xlYXIiOworCX0KKworCWd0a19lbnRyeV9zZXRfaWNvbl9m
cm9tX2ljb25fbmFtZShHVEtfRU5UUlkoZW50cnkpLAorCQkJCQkgIEdUS19FTlRSWV9JQ09OX1NF
Q09OREFSWSwKKwkJCQkJICBpY29uX25hbWUpOworfQorCisvKiBHaGlkRWxlbWVudHNTZWFyY2hC
YXIgaW5pdGlhbGlzZXIgKi8KK3N0YXRpYyB2b2lkIGdoaWRfZWxlbWVudHNfc2VhcmNoX2Jhcl9p
bml0KEdoaWRFbGVtZW50c1NlYXJjaEJhciAqc2VsZikKK3sKKwlzZWxmLT5tZW51ID0gZ3RrX21l
bnVfbmV3KCk7CisKKwlzZWxmLT5lbmFibGVfcmVnZXggPSBndGtfY2hlY2tfbWVudV9pdGVtX25l
d193aXRoX2xhYmVsKF8oIlJlZ3VsYXIgRXhwcmVzc2lvbiIpKTsKKwlndGtfY2hlY2tfbWVudV9p
dGVtX3NldF9hY3RpdmUoR1RLX0NIRUNLX01FTlVfSVRFTShzZWxmLT5lbmFibGVfcmVnZXgpLCBU
UlVFKTsKKwlndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoc2VsZi0+bWVudSks
IHNlbGYtPmVuYWJsZV9yZWdleCk7CisKKworCXNlbGYtPmNhc2Vfc2Vuc2UgPSBndGtfY2hlY2tf
bWVudV9pdGVtX25ld193aXRoX2xhYmVsKF8oIkNhc2UgU2Vuc2l0aXZlIikpOworCWd0a19jaGVj
a19tZW51X2l0ZW1fc2V0X2FjdGl2ZShHVEtfQ0hFQ0tfTUVOVV9JVEVNKHNlbGYtPmNhc2Vfc2Vu
c2UpLCBUUlVFKTsKKwlndGtfbWVudV9zaGVsbF9hcHBlbmQoR1RLX01FTlVfU0hFTEwoc2VsZi0+
bWVudSksIHNlbGYtPmNhc2Vfc2Vuc2UpOworCisKKwlndGtfd2lkZ2V0X3Nob3dfYWxsKHNlbGYt
Pm1lbnUpOworCisJZ19zaWduYWxfY29ubmVjdChzZWxmLT5lbmFibGVfcmVnZXgsICJ0b2dnbGVk
IiwKKwkJCSBHX0NBTExCQUNLKHJlZ2V4X3RvZ2dsZWQpLCBzZWxmKTsKKwkKKwlnX3NpZ25hbF9j
b25uZWN0KHNlbGYtPmNhc2Vfc2Vuc2UsICJ0b2dnbGVkIiwKKwkJCSBHX0NBTExCQUNLKGNhc2Vf
dG9nZ2xlZCksIHNlbGYpOworCisJLyogU2V0dXAgdGhlIHNlYXJjaCBpY29uICovCisJZ3RrX2Vu
dHJ5X3NldF9pY29uX2Zyb21faWNvbl9uYW1lKEdUS19FTlRSWShzZWxmKSwKKwkJCQkJICBHVEtf
RU5UUllfSUNPTl9QUklNQVJZLAorCQkJCQkgICJlZGl0LWZpbmQiKTsKKworCWd0a19lbnRyeV9z
ZXRfaWNvbl9hY3RpdmF0YWJsZShHVEtfRU5UUlkoc2VsZiksCisJCQkJICAgICAgIEdUS19FTlRS
WV9JQ09OX1BSSU1BUlksCisJCQkJICAgICAgIHRydWUgKTsKKworCS8qIEJyaW5nIHVwIHRoZSBz
ZWFyY2ggbWVudSB3aGVuIHRoZSBpY29uIGlzIGNsaWNrZWQgKi8KKwlnX3NpZ25hbF9jb25uZWN0
KHNlbGYsICJpY29uLXByZXNzIiwKKwkJCSBHX0NBTExCQUNLKHNlYXJjaF9pY29uX2NsaWNrZWQp
LCBzZWxmLT5tZW51KTsKKworCS8qIE1hbmFnZSB0aGUgY2xlYXIgaWNvbidzIHZpc2liaWxpdHkg
Ki8KKwlnX3NpZ25hbF9jb25uZWN0KHNlbGYsICJjaGFuZ2VkIiwKKwkJCSBHX0NBTExCQUNLKHRl
eHRfY2hhbmdlX2NiKSwgTlVMTCk7CisKK30KKworLyoqIENyZWF0ZSBhIG5ldyBHaGlkRWxlbWVu
dHNTZWFyY2hCYXIuCisgKiBAcmV0dXJuIEEgbmV3IEdoaWRFbGVtZW50c1NlYXJjaEJhciAqLwor
R2hpZEVsZW1lbnRzU2VhcmNoQmFyKiBnaGlkX2VsZW1lbnRzX3NlYXJjaF9iYXJfbmV3KHZvaWQp
Cit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyhHSElEX1RZUEVfRUxFTUVOVFNfU0VBUkNIX0JBUiwg
TlVMTCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXNlYXJj
aC1iYXIuaCBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlZjk2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Ny
Yy9oaWQvZ3RrL2d1aS1lbGVtZW50cy1zZWFyY2gtYmFyLmgKQEAgLTAsMCArMSw1OSBAQAorLyog
Z0VEQSAtIEdQTCBFbGVjdHJvbmljIERlc2lnbiBBdXRvbWF0aW9uCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgUm9iIFNwYW50b24KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5
LCBVU0EuCisgKgorICogUm9iIFNwYW50b246IHJvYkByb2JzcGFudG9uLmNvbQorICovCisjaWZu
ZGVmIFBDQl9ISURfR1RLX0dVSV9FTEVNRU5UU19TRUFSQ0hfQkFSX0gKKyNkZWZpbmUgUENCX0hJ
RF9HVEtfR1VJX0VMRU1FTlRTX1NFQVJDSF9CQVJfSAorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorR19CRUdJTl9ERUNMUworCisvKiBHaGlkRWxlbWVudHNT
ZWFyY2hCYXIgKi8KKyNkZWZpbmUgR0hJRF9UWVBFX0VMRU1FTlRTX1NFQVJDSF9CQVIgKGdoaWRf
ZWxlbWVudHNfc2VhcmNoX2Jhcl9nZXRfdHlwZSgpKQorI2RlZmluZSBHSElEX0VMRU1FTlRTX1NF
QVJDSF9CQVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIEdISURfVFlQ
RV9FTEVNRU5UU19TRUFSQ0hfQkFSLCBHaGlkRWxlbWVudHNTZWFyY2hCYXIpKQorI2RlZmluZSBH
SElEX0VMRU1FTlRTX1NFQVJDSF9CQVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCBHSElEX1RZUEVfRUxFTUVOVFNfU0VBUkNIX0JBUiwgR2hpZEVsZW1lbnRz
U2VhcmNoQmFyQ2xhc3MpKQorI2RlZmluZSBHSElEX0lTX0VMRU1FTlRTX1NFQVJDSF9CQVIob2Jq
KSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdISURfVFlQRV9FTEVNRU5UU19T
RUFSQ0hfQkFSKSkKKyNkZWZpbmUgR0hJRF9HRVRfRUxFTUVOVFNfU0VBUkNIX0JBUl9DTEFTUyhv
YmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBHSElEX1RZUEVfRUxFTUVOVFNf
U0VBUkNIX0JBUiwgR2hpZEVsZW1lbnRzU2VhcmNoQmFyQ2xhc3MpKQorCitHVHlwZSBnaGlkX2Vs
ZW1lbnRzX3NlYXJjaF9iYXJfZ2V0X3R5cGUgKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisJ
R3RrRW50cnlDbGFzcyBwYXJlbnRfY2xhc3M7CisKK30gR2hpZEVsZW1lbnRzU2VhcmNoQmFyQ2xh
c3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHdGtFbnRyeSBwYXJlbnRfaW5zdGFuY2U7CisKKwkv
KioqIFRoZSBwb3B1cCBzZWFyY2ggbWVudSAqKiovCisJR3RrV2lkZ2V0ICptZW51OworCisJLyog
RW50cmllcyBpbiB0aGF0IG1lbnU6ICovCisKKwkvKiBUaGUgZW5hYmxlL2Rpc2FibGUgcmVnZXgg
b3B0aW9uICovCisJR3RrV2lkZ2V0ICplbmFibGVfcmVnZXg7CisKKwkvKiBUaGUgY2FzZSBzZW5z
aXRpdmUgb3B0aW9uICovCisJR3RrV2lkZ2V0ICpjYXNlX3NlbnNlOworCit9IEdoaWRFbGVtZW50
c1NlYXJjaEJhcjsKKworR2hpZEVsZW1lbnRzU2VhcmNoQmFyKiBnaGlkX2VsZW1lbnRzX3NlYXJj
aF9iYXJfbmV3KHZvaWQpOworCitHX0VORF9ERUNMUworI2VuZGlmIC8qIFBDQl9ISURfR1RLX0dV
SV9FTEVNRU5UU19TRUFSQ0hfQkFSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS1l
bGVtZW50cy13aW5kb3cuYyBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cuYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTNiMzM3Ci0tLSAvZGV2L251bGwKKysr
IGIvc3JjL2hpZC9ndGsvZ3VpLWVsZW1lbnRzLXdpbmRvdy5jCkBAIC0wLDAgKzEsNDk5IEBACisv
KiBnRURBIC0gR1BMIEVsZWN0cm9uaWMgRGVzaWduIEF1dG9tYXRpb24KKyAqIENvcHlyaWdodCAo
QykgMjAxNiBSb2IgU3BhbnRvbgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIx
MzksIFVTQS4KKyAqCisgKiBSb2IgU3BhbnRvbjogcm9iQHJvYnNwYW50b24uY29tCisgKi8KKyNp
bmNsdWRlICJkYXRhLmgiCisjaW5jbHVkZSAiZ2xvYmFsLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgImd1aS5oIgorI2luY2x1ZGUgImd1aS1lbGVtZW50cy13aW5kb3cuaCIKKyNp
bmNsdWRlICJzZWxlY3QuaCIKKworR19ERUZJTkVfVFlQRShHaGlkRWxlbWVudHNXaW5kb3csIGdo
aWRfZWxlbWVudHNfd2luZG93LCBHVEtfVFlQRV9XSU5ET1cpOworCitzdGF0aWMgR2hpZEVsZW1l
bnRzV2luZG93KiBlbGVtd2luID0gTlVMTDsKKworLyogVGhlIGNvbHVtbnMgb2Ygb3VyIGxpc3Qg
c3RvcmUsIHdoaWNoIHN0b3JlcyBhIGxpc3Qgb2YgZWxlbWVudHMgKi8KK2VudW0geworCS8qIFRo
ZSBuYW1lIG9mIHRoZSBlbGVtZW50ICovCisJRUxFTUxJU1RfTkFNRV9DT0xVTU4sCisJLyogUG9p
bnRlciB0byB0aGUgZWxlbWVudCBpdHNlbGYgKEVsZW1lbnRUeXBlKikgKi8KKwlFTEVNTElTVF9F
TEVNRU5UX1BfQ09MVU1OLAorCS8qIFRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyAqLworCUVM
RU1MSVNUX05fQ09MVU1OUywKK307CisKKy8qKiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2VsZWN0
aW5nIGFuIGVsZW1lbnQuCisgKiBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBzZWxlY3Qg
Ki8KK3N0YXRpYyB2b2lkIG9wX2VsZW1lbnRfc2VsZWN0KEVsZW1lbnRUeXBlICplbGVtZW50KQor
eworCVNlbGVjdEVsZW1lbnQoZWxlbWVudCwgdHJ1ZSk7Cit9CisKKy8qKiBDYWxsYmFjayBmdW5j
dGlvbiBmb3IgZGVzZWxlY3RpbmcgYW4gZWxlbWVudC4KKyAqIEBwYXJhbSBlbGVtZW50IFRoZSBl
bGVtZW50IHRvIGRlc2VsZWN0ICovCitzdGF0aWMgdm9pZCBvcF9lbGVtZW50X2Rlc2VsZWN0KEVs
ZW1lbnRUeXBlICplbGVtZW50KQoreworCVNlbGVjdEVsZW1lbnQoZWxlbWVudCwgZmFsc2UpOwor
fQorCisvKiogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGFwcGx5aW5nIHRoZSBnaXZlbiBvcGVyYXRp
b24gdG8gdGhlIGdpdmVuCisgKiBpdGVtIGZyb20gdGhlIHRyZWV2aWV3LgorICogQHBhcmFtIG1v
ZGVsIFRoZSBtb2RlbCB0aGUgaXRlbSBpcyBzdG9yZWQgaW4uCisgKiBAcGFyYW0gcGF0aCBUaGUg
cGF0aCBvZiB0aGUgaXRlbSB3aXRoaW4gdGhlIHN0b3JlLgorICogQHBhcmFtIGl0ZXIgQW4gaXRl
ciBwb2ludGluZyB0byB0aGUgaXRlbSBpbiBxdWVzdGlvbi4KKyAqIEBwYXJhbSBfb3AgUG9pbnRl
ciB0byBvcGVyYXRpb24gdG8gYXBwbHkgdG8gZWxlbWVudC4gKi8KK3N0YXRpYyB2b2lkIHByb2Nf
c2VsZWN0ZWQoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkgICBHdGtUcmVlUGF0aCAqcGF0aCwK
KwkJCSAgIEd0a1RyZWVJdGVyICppdGVyLAorCQkJICAgZ3BvaW50ZXIgX29wICkKK3sKKwlFbGVt
ZW50VHlwZSAqZWxlbWVudDsKKwl2b2lkICgqb3ApIChFbGVtZW50VHlwZSAqZWxlbWVudCkgPSBf
b3A7CisKKwlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwsIGl0ZXIsCisJCQkgICBFTEVNTElTVF9F
TEVNRU5UX1BfQ09MVU1OLCAmZWxlbWVudCwgLTEpOworCisJb3AoZWxlbWVudCk7Cit9CisKKy8q
KiBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc2VsZWN0IGJ1dHRvbiBjbGljayBldmVudCAqLworc3Rh
dGljIHZvaWQgc2VsX2J1dHRvbl9jbGlja2VkKCBHdGtCdXR0b24gKmJ1dHRvbl9zZWxlY3QsIGdw
b2ludGVyIF9zZWxmICkKK3sKKwlHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgPSBHSElEX0VMRU1F
TlRTX1dJTkRPVyhfc2VsZik7CisJR3RrVHJlZVNlbGVjdGlvbiAqc2VsID0gZ3RrX3RyZWVfdmll
d19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcpKTsKKworCWd0a190
cmVlX3NlbGVjdGlvbl9zZWxlY3RlZF9mb3JlYWNoKHNlbCwgcHJvY19zZWxlY3RlZCwgb3BfZWxl
bWVudF9zZWxlY3QpOworfQorCisvKiogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGRlc2VsZWN0IGJ1
dHRvbiBjbGljayBldmVudCAqLworc3RhdGljIHZvaWQgZGVzZWxfYnV0dG9uX2NsaWNrZWQoIEd0
a0J1dHRvbiAqYnV0dG9uX3NlbGVjdCwgZ3BvaW50ZXIgX3NlbGYgKQoreworCUdoaWRFbGVtZW50
c1dpbmRvdyAqc2VsZiA9IEdISURfRUxFTUVOVFNfV0lORE9XKF9zZWxmKTsKKwlHdGtUcmVlU2Vs
ZWN0aW9uICpzZWwgPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24oR1RLX1RSRUVfVklFVyhz
ZWxmLT50cmVldmlldykpOworCisJZ3RrX3RyZWVfc2VsZWN0aW9uX3NlbGVjdGVkX2ZvcmVhY2go
c2VsLCBwcm9jX3NlbGVjdGVkLCBvcF9lbGVtZW50X2Rlc2VsZWN0KTsKK30KKworLyoqIEZpbHRl
ciBmdW5jdGlvbiBmb3IgdGhlIGZpbHRlcmVkIHRyZWUgbW9kZWwuICBSZXR1cm5zIHRydWUgaWYg
dGhlCisgKiBpdGVtIGNvbXBsaWVzIHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoIHBhcmFtZXRlcnMu
CisgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIHRvIGZpbHRlciBmcm9tLgorICogQHBhcmFtIGl0
ZXIgVGhlIGl0ZXIgb2YgdGhlIGl0ZW0gdG8gZXhhbWluZS4KKyAqIEBwYXJhbSBfc2VsZiBQb2lu
dGVyIHRvIHRoZSBHaGlkRWxlbWVudHNXaW5kb3cgaW5zdGFuY2UuCisgKiBAcmV0dXJuIFdoZXRo
ZXIgdG8gaW5jbHVkZSB0aGlzIGl0ZW0gaW4gdGhlIGZpbHRlcmVkIHRyZWUgdmlldy4gKi8KK3N0
YXRpYyBnYm9vbGVhbiBlbGVtbGlzdF9maWx0ZXIoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkJ
IEd0a1RyZWVJdGVyICppdGVyLAorCQkJCSBncG9pbnRlciBfc2VsZiApCit7CisJY2hhciAqbmFt
ZTsKKwlHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgPSBHSElEX0VMRU1FTlRTX1dJTkRPVyhfc2Vs
Zik7CisJZ2Jvb2xlYW4gcmVnZXhfbW9kZSwgY2FzZV9zZW5zaXRpdmU7CisKKwlndGtfdHJlZV9t
b2RlbF9nZXQobW9kZWwsIGl0ZXIsCisJCQkgICBFTEVNTElTVF9OQU1FX0NPTFVNTiwgJm5hbWUs
IC0xKTsKKworCWlmKCBuYW1lID09IE5VTEwgKSB7CisJCS8qIFRoaXMgZnVuY3Rpb24gY2FuIGJl
IGNhbGxlZCB3aGlsc3QgYW4gZW50cnkgaW4gdGhlCisJCSAqIG1vZGVsIGlzIG5vdCBjb21wbGV0
ZS4gIEF2b2lkIGRpc3BsYXlpbmcKKwkJICogaW5jb21wbGV0ZSBlbnRyaWVzLiAqLworCQlyZXR1
cm4gRkFMU0U7CisJfQorCisJZ19vYmplY3RfZ2V0KHNlbGYtPnNlYXJjaCwKKwkJICAgICAicmVn
ZXgiLCAmcmVnZXhfbW9kZSwKKwkJICAgICAiY2FzZS1zZW5zaXRpdmUiLCAmY2FzZV9zZW5zaXRp
dmUsCisJCSAgICAgTlVMTCk7CisKKwlpZiggcmVnZXhfbW9kZSApIHsKKwkJaWYoIHNlbGYtPnNl
YXJjaF9yZWdleCA9PSBOVUxMICkgeworCQkJLyogQ3VycmVudGx5IG5vIHNlYXJjaCBwYXR0ZXJu
LCBzbyBldmVyeXRoaW5nIG1hdGNoZXMgKi8KKwkJCXJldHVybiBUUlVFOworCQl9CisKKwkJcmV0
dXJuIGdfcmVnZXhfbWF0Y2goc2VsZi0+c2VhcmNoX3JlZ2V4LCBuYW1lLCAwLCBOVUxMKTsKKwl9
IGVsc2UgeworCQlib29sIG1hdGNoOworCQljb25zdCBjaGFyKiBuZWVkbGUgPSBndGtfZW50cnlf
Z2V0X3RleHQoR1RLX0VOVFJZKHNlbGYtPnNlYXJjaCkpOworCQlnY2hhciAqZl9uZWVkbGUsICpm
X2hheXN0YWNrOworCisJCWlmKCBjYXNlX3NlbnNpdGl2ZSApIHsKKwkJCWZfbmVlZGxlID0gKGNo
YXIqKW5lZWRsZTsKKwkJCWZfaGF5c3RhY2sgPSBuYW1lOworCQl9IGVsc2UgeworCQkJLyogRm9y
IHVuaWNvZGUgY29tcGF0aWJpbGl0eSwgZm9sZCB0aGUgY2FzZSBiZWZvcmUgY29tcGFyaXNvbiAq
LworCQkJZl9oYXlzdGFjayA9IGdfdXRmOF9jYXNlZm9sZChuYW1lLCAtMSk7CisJCQlmX25lZWRs
ZSA9IGdfdXRmOF9jYXNlZm9sZChuZWVkbGUsIC0xKTsKKwkJfQorCisJCW1hdGNoID0gZ19zdHJz
dHJfbGVuKGZfaGF5c3RhY2ssIC0xLCBmX25lZWRsZSk7CisKKwkJaWYoICFjYXNlX3NlbnNpdGl2
ZSApIHsKKwkJCS8qIENhc2UgZm9sZGluZyBhbGxvY2F0ZWQgc3RyaW5ncywgc28gZnJlZSB0aGVt
ICovCisJCQlnX2ZyZWUoZl9oYXlzdGFjayk7CisJCQlnX2ZyZWUoZl9uZWVkbGUpOworCQl9CisK
KwkJcmV0dXJuIG1hdGNoOworCX0KK30KKworLyoqIENvbXBhcmUgZnVuY3Rpb24gZm9yIHNvcnRp
bmcgaXRlbXMgaW4gdGhlIHRyZWV2aWV3IGJ5IG5hbWUuCisgKiBUaGlzIHBlcmZvcm1zIGEgIm5h
dHVyYWwiIHNvcnQuCisgKiBAcGFyYW0gbW9kZWwgVGhlIHN0b3JlIHRoYXQgdGhlIGl0ZW1zIGFy
ZSBpbi4KKyAqIEBwYXJhbSBhIEl0ZW0gQSB0byBjb21wYXJlLgorICogQHBhcmFtIGIgSXRlbSBC
IHRvIGNvbXBhcmUuCisgKiBAcGFyYW0gdWQgVW51c2VkCisgKiBAcmV0dXJuIFNhbWUgYmVoYXZp
b3VyIGFzIHN0cmNtcCdzIHJldHVybiB2YWx1ZS4KKyAgKi8KK3N0YXRpYyBnaW50IGVsZW1saXN0
X3NvcnRfbmFtZV9jbXAoIEd0a1RyZWVNb2RlbCAqbW9kZWwsCisJCQkJICAgIEd0a1RyZWVJdGVy
ICphLAorCQkJCSAgICBHdGtUcmVlSXRlciAqYiwKKwkJCQkgICAgZ3BvaW50ZXIgdWQgKQorewor
CWNvbnN0IGNoYXIgKmFfbmFtZSwgKmJfbmFtZTsKKworCWd0a190cmVlX21vZGVsX2dldChtb2Rl
bCwgYSwKKwkJCSAgIEVMRU1MSVNUX05BTUVfQ09MVU1OLCAmYV9uYW1lLCAtMSk7CisJZ3RrX3Ry
ZWVfbW9kZWxfZ2V0KG1vZGVsLCBiLAorCQkJICAgRUxFTUxJU1RfTkFNRV9DT0xVTU4sICZiX25h
bWUsIC0xKTsKKwkKKwkvKiBzdHJ2ZXJzY21wIGRvZXMgbW9yZSBvZiBhICJuYXR1cmFsIiBzdHJp
bmcgc29ydCB0aGFuCisJICogc3RyY21wLiAgVGhpcyBtZWFucyB0aGF0IG5hbWVzIHdpdGggbnVt
YmVycyBpbiB3aWxsIHNvcnQKKwkgKiBSMSwgUjIsIFIxMCwgcmF0aGVyIHRoYW4gUjEsIFIxMCwg
UjIuCisJICogVGhlcmUgYXJlIGxpa2VseSBsb2NhbGVzIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24g
ZG9lcyBub3QgZG8KKwkgKiB0aGUgcmlnaHQgdGhpbmcgLS0gaG93ZXZlciwgbm9uZSBvZiBvdXIg
Y3VycmVudAorCSAqIGRlcGVuZGVuY2llcyBwcm92aWRlIGEgYmV0dGVyIG9wdGlvbiB0aGFuIHN0
cnZlcnNjbXAuICovCisJcmV0dXJuIHN0cnZlcnNjbXAoYV9uYW1lLCBiX25hbWUpOworfQorCisv
KiogRmluZCBhbiBlbGVtZW50IGluIHRoZSBlbGVtZW50IHN0b3JlLgorICogQHBhcmFtIHN0b3Jl
IFRoZSBzdG9yZSB0byBzZWFyY2guCisgKiBAcGFyYW0gbmVlZGxlIFRoZSBlbGVtZW50IHRvIGZp
bmQuCisgKiBAcGFyYW0gX2l0ZXIgUG9pbnRlciB0byB0aGUgaXRlciB0byBwb3B1bGF0ZSB3aXRo
IHRoZSBsb2NhdGVkCisgKiAgICAgICAgICAgICAgaXRlbS4gIENhbiBiZSBOVUxMIGlmIG5vdCBy
ZXF1aXJlZC4KKyAqIEByZXR1cm4gV2hldGhlciB0aGUgZWxlbWVudCB3YXMgZm91bmQuICovCitz
dGF0aWMgYm9vbCBlbGVtbGlzdF9maW5kX2VsZW1lbnQoIEd0a1RyZWVNb2RlbCAqc3RvcmUsIAor
CQkJCSAgIGNvbnN0IEVsZW1lbnRUeXBlKiBuZWVkbGUsCisJCQkJICAgR3RrVHJlZUl0ZXIgKl9p
dGVyICkKK3sKKwlnYm9vbGVhbiB2YWxpZDsKKwlHdGtUcmVlSXRlciBsb2NhbF9pdGVyOworCUd0
a1RyZWVJdGVyICppdGVyID0gJmxvY2FsX2l0ZXI7CisKKwlpZiggX2l0ZXIgIT0gTlVMTCApCisJ
CWl0ZXIgPSBfaXRlcjsKKworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXJfZmlyc3Qo
c3RvcmUsIGl0ZXIpOworCXdoaWxlKHZhbGlkKSB7CisJCUVsZW1lbnRUeXBlKiBlbGVtZW50Owor
CisJCWd0a190cmVlX21vZGVsX2dldChzdG9yZSwgaXRlciwKKwkJCQkgICBFTEVNTElTVF9FTEVN
RU5UX1BfQ09MVU1OLCAmZWxlbWVudCwgLTEpOworCisJCWlmKCBlbGVtZW50ID09IG5lZWRsZSAp
IHsKKwkJCS8qIEZvdW5kIHRoZSBlbGVtZW50ICovCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJ
CXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KHN0b3JlLCBpdGVyKTsKKwl9CisKKwkv
KiBOb3QgZm91bmQgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiB1
bm5hbWVkX2VsZW1lbnQgPSAiW05vbmVdIjsKKworLyoqIFN5bmNocm9uaXNlIHRoZSBsaXN0IHN0
b3JlIHdpdGggdGhlIG1haW4gbGlzdCBvZiBlbGVtZW50cy4KKyAqIEBwYXJhbSBzZWxmIFRoZSBH
aGlkRWxlbWVudHNXaW5kb3cgaW5zdGFuY2UuICovCitzdGF0aWMgdm9pZCB1cGRhdGVfbGlzdChH
aGlkRWxlbWVudHNXaW5kb3cgKnNlbGYpCit7CisJZ2Jvb2xlYW4gdmFsaWQ7CisJR3RrVHJlZUl0
ZXIgaXRlcjsKKworCS8qIEZpbmQgbmV3IGVsZW1lbnRzIHRoYXQgaGF2ZSBhcnJpdmVkICovCisJ
RUxFTUVOVF9MT09QKFBDQi0+RGF0YSk7CisJeworCQljb25zdCBjaGFyKiBuYW1lID0gRUxFTUVO
VF9OQU1FKFBDQiwgZWxlbWVudCk7CisKKwkJaWYoIGVsZW1saXN0X2ZpbmRfZWxlbWVudChHVEtf
VFJFRV9NT0RFTChzZWxmLT5zdG9yZSksIGVsZW1lbnQsICZpdGVyKSApIHsKKwkJCS8qIEVsZW1l
bnQgaXMgYWxyZWFkeSBpbiBsaXN0ICovCisJCQkvKiBDaGVjayB0aGF0IGl0cyBuYW1lIGhhc24n
dCBjaGFuZ2VkICovCisJCQljaGFyICpvbGRfbmFtZTsKKworCQkJZ3RrX3RyZWVfbW9kZWxfZ2V0
KEdUS19UUkVFX01PREVMKHNlbGYtPnN0b3JlKSwgJml0ZXIsCisJCQkJCSAgIEVMRU1MSVNUX05B
TUVfQ09MVU1OLCAmb2xkX25hbWUsIC0xKTsKKworCisJCQlpZiggZ19zdHJjbXAwKG5hbWUsIG9s
ZF9uYW1lKSAhPSAwICkgeworCQkJCS8qIE5hbWUgaGFzIGNoYW5nZWQgKi8KKwkJCQlndGtfbGlz
dF9zdG9yZV9zZXQoc2VsZi0+c3RvcmUsICZpdGVyLAorCQkJCQkJICAgRUxFTUxJU1RfTkFNRV9D
T0xVTU4sIG5hbWUsIC0xKTsKKwkJCX0KKworCQkJZ19mcmVlKG9sZF9uYW1lKTsKKwkJCWNvbnRp
bnVlOworCQl9CisKKwkJaWYoIG5hbWUgPT0gTlVMTCApIHsKKwkJCW5hbWUgPSB1bm5hbWVkX2Vs
ZW1lbnQ7CisJCX0KKworCQlndGtfbGlzdF9zdG9yZV9hcHBlbmQoc2VsZi0+c3RvcmUsICZpdGVy
KTsKKwkJZ3RrX2xpc3Rfc3RvcmVfc2V0KHNlbGYtPnN0b3JlLCAmaXRlciwKKwkJCQkgICBFTEVN
TElTVF9OQU1FX0NPTFVNTiwgbmFtZSwKKwkJCQkgICBFTEVNTElTVF9FTEVNRU5UX1BfQ09MVU1O
LCBlbGVtZW50LAorCQkJCSAgIC0xKTsKKwl9CisJRU5EX0xPT1A7CisKKwkvKiBGaW5kIGVsZW1l
bnRzIHRoYXQgaGF2ZSBkaXNhcHBlYXJlZCAqLworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfZ2V0
X2l0ZXJfZmlyc3QoR1RLX1RSRUVfTU9ERUwoc2VsZi0+c3RvcmUpLCAmaXRlcik7CisJd2hpbGUo
dmFsaWQpIHsKKwkJRWxlbWVudFR5cGUqIHN0b3JlX2VsZW1lbnQ7CisJCWJvb2wgZm91bmQgPSBm
YWxzZTsKKworCQlndGtfdHJlZV9tb2RlbF9nZXQoR1RLX1RSRUVfTU9ERUwoc2VsZi0+c3RvcmUp
LCAmaXRlciwKKwkJCQkgICBFTEVNTElTVF9FTEVNRU5UX1BfQ09MVU1OLCAmc3RvcmVfZWxlbWVu
dCwgLTEpOworCisKKwkJLyogRG9lcyB0aGlzIGVsZW1lbnQgZmVhdHVyZSBpbiB0aGUgZWxlbWVu
dCBsaXN0PyAqLworCQlFTEVNRU5UX0xPT1AoUENCLT5EYXRhKTsKKwkJeworCQkJaWYoZWxlbWVu
dCA9PSBzdG9yZV9lbGVtZW50KSB7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisJCUVORF9MT09QOworCisJCWlmKCAhZm91bmQgKSB7CisJCQkvKiBUaGlzIGVsZW1l
bnQgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgdHJlZXZpZXcsIHNvIAorCQkJICAgcmVtb3ZlIGl0
IGZyb20gdGhlIHRyZWV2aWV3ICovCisJCQl2YWxpZCA9IGd0a19saXN0X3N0b3JlX3JlbW92ZShH
VEtfTElTVF9TVE9SRShzZWxmLT5zdG9yZSksICZpdGVyKTsKKwkJfSBlbHNlIHsKKwkJCXZhbGlk
ID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KEdUS19UUkVFX01PREVMKHNlbGYtPnN0b3JlKSwg
Jml0ZXIpOworCQl9CisJfQorfQorCisvKiogQ3JlYXRlIHRoZSB0cmVldmlldyB3aWRnZXQuCisg
KiBAcGFyYW0gc2VsZiBUaGUgR2hpZEVsZW1lbnRzV2luZG93IGluc3RhbmNlLiAqLworc3RhdGlj
IHZvaWQgY3JlYXRlX3RyZWV2aWV3KCBHaGlkRWxlbWVudHNXaW5kb3cgKnNlbGYgKQoreworCUd0
a0NlbGxSZW5kZXJlciAqcmVuZGVyZXI7CisJR3RrVHJlZVZpZXdDb2x1bW4gKnZpZXdjb2w7CisJ
R3RrVHJlZVNlbGVjdGlvbiAqc2VsOworCisJLyoqKiBFbGVtZW50IGxpc3QgY3JlYXRpb24gKioq
LworCisJLyoqIExpc3Qgc3RvcmUgY3JlYXRpb24gKiovCisJLyogVGhpcyBjb250YWlucyB0aGUg
ZGF0YSBzaG93biBpbiB0aGUgbGlzdCwgYW5kIGlzIHRoZSBtb2RlbCBpbiB0aGUgTVZDICovCisJ
c2VsZi0+c3RvcmUgPSBndGtfbGlzdF9zdG9yZV9uZXcoIEVMRU1MSVNUX05fQ09MVU1OUywKKwkJ
CQkJICAvKiBOYW1lICovCisJCQkJCSAgR19UWVBFX1NUUklORywKKwkJCQkJICAvKiBFbGVtZW50
IHBvaW50ZXIgKi8KKwkJCQkJICBHX1RZUEVfUE9JTlRFUiApOworCisJLyogQ3JlYXRlIGEgZmls
dGVyZWQgdmVyc2lvbiBvZiB0aGUgbW9kZWwgb24tdG9wIG9mIHRoZSBiYXNlIG1vZGVsICovCisJ
c2VsZi0+ZmlsdGVyZWRfc3RvcmUgPSBndGtfdHJlZV9tb2RlbF9maWx0ZXJfbmV3KEdUS19UUkVF
X01PREVMKHNlbGYtPnN0b3JlKSwgTlVMTCk7CisKKwlndGtfdHJlZV9tb2RlbF9maWx0ZXJfc2V0
X3Zpc2libGVfZnVuYyhHVEtfVFJFRV9NT0RFTF9GSUxURVIoc2VsZi0+ZmlsdGVyZWRfc3RvcmUp
LAorCQkJCQkgICAgICAgZWxlbWxpc3RfZmlsdGVyLCBzZWxmLCBOVUxMKTsKKworCS8qIENyZWF0
ZSBhIHNvcnRlZCB2ZXJzaW9uIG9mIHRoZSBmaWx0ZXJlZCBtb2RlbCAqLworCXNlbGYtPnNvcnRl
ZF9zdG9yZSA9IGd0a190cmVlX21vZGVsX3NvcnRfbmV3X3dpdGhfbW9kZWwoR1RLX1RSRUVfTU9E
RUwoc2VsZi0+ZmlsdGVyZWRfc3RvcmUpKTsKKworCS8qIERlZmF1bHQgdG8gc29ydGluZyBieSB0
aGUgbmFtZSBjb2x1bW4gKi8KKwlndGtfdHJlZV9zb3J0YWJsZV9zZXRfc29ydF9jb2x1bW5faWQo
R1RLX1RSRUVfU09SVEFCTEUoc2VsZi0+c29ydGVkX3N0b3JlKSwKKwkJCQkJICAgICBFTEVNTElT
VF9OQU1FX0NPTFVNTiwgR1RLX1NPUlRfQVNDRU5ESU5HKTsKKworCS8qIFNldCB0aGUgc29ydCBm
dW5jdGlvbiBmb3IgdGhlIG5hbWUgY29sdW1uICovCisJZ3RrX3RyZWVfc29ydGFibGVfc2V0X3Nv
cnRfZnVuYyhHVEtfVFJFRV9TT1JUQUJMRShzZWxmLT5zb3J0ZWRfc3RvcmUpLAorCQkJCQlFTEVN
TElTVF9OQU1FX0NPTFVNTiwKKwkJCQkJZWxlbWxpc3Rfc29ydF9uYW1lX2NtcCwgTlVMTCwgTlVM
TCk7CisKKwkvKiBQb3B1bGF0ZSB0aGUgbGlzdCAqLworCXVwZGF0ZV9saXN0KHNlbGYpOworCisJ
LyoqIENyZWF0ZSB0aGUgdmlldyAqKi8KKwlzZWxmLT5zY3JvbGxlZCA9IGd0a19zY3JvbGxlZF93
aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworCXNlbGYtPnRyZWV2aWV3ID0gZ3RrX3RyZWVfdmlld19u
ZXdfd2l0aF9tb2RlbChHVEtfVFJFRV9NT0RFTChzZWxmLT5zb3J0ZWRfc3RvcmUpKTsKKworCWd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoc2VsZi0+c2Nyb2xsZWQpLCBHVEtfV0lER0VU
KHNlbGYtPnRyZWV2aWV3KSk7CisJZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5KEdUS19T
Q1JPTExFRF9XSU5ET1coc2VsZi0+c2Nyb2xsZWQpLAorCQkJCSAgICAgICBHVEtfUE9MSUNZX0FV
VE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMpOworCisJLyogSW5mb3JtIHRoZSB3aWRnZXQg
aG93IHRvIHJlbmRlciAqLworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXco
KTsKKwl2aWV3Y29sID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3X3dpdGhfYXR0cmlidXRlcyhf
KCJFbGVtZW50IE5hbWUiKSwgcmVuZGVyZXIsCisJCQkJCQkJICAgInRleHQiLCBFTEVNTElTVF9O
QU1FX0NPTFVNTiwKKwkJCQkJCQkgICBOVUxMKTsKKwkvKiBTZXQgdGhpcyBjb2x1bW4gdG8gc29y
dCBieSBpdHMgb3duIGNvbnRlbnRzLCBhbmQgZW5hYmxlCisJICogY2xpY2thYmxlIGNvbHVtbiBo
ZWFkaW5nIHRvIGFkanVzdCBzb3J0aW5nLiAqLworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9z
b3J0X2NvbHVtbl9pZCh2aWV3Y29sLCBFTEVNTElTVF9OQU1FX0NPTFVNTik7CisJZ3RrX3RyZWVf
dmlld19hcHBlbmRfY29sdW1uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcpLCB2aWV3Y29s
KTsKKworCS8qIEFsbG93IG11bHRpcGxlIGl0ZW1zIHRvIGJlIHNlbGVjdGVkICovCisJc2VsID0g
Z3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKEdUS19UUkVFX1ZJRVcoc2VsZi0+dHJlZXZpZXcp
KTsKKwlndGtfdHJlZV9zZWxlY3Rpb25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9OX01VTFRJ
UExFKTsKK30KKworLyoqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBzZWFyY2ggcGFyYW1ldGVycyBj
aGFuZ2UuCisgKiBAcGFyYW0gX3NlbGYgVGhlIEdoaWRFbGVtZW50c1dpbmRvdyBpbnN0YW5jZS4g
Ki8KK3N0YXRpYyB2b2lkIHVwZGF0ZV9zZWFyY2goIGdwb2ludGVyICpfc2VsZiApCit7CisJR2hp
ZEVsZW1lbnRzV2luZG93ICpzZWxmID0gR0hJRF9FTEVNRU5UU19XSU5ET1coX3NlbGYpOworCWdi
b29sZWFuIHJlZ2V4X21vZGUsIGNhc2Vfc2Vuc2l0aXZlOworCisJZ19vYmplY3RfZ2V0KHNlbGYt
PnNlYXJjaCwKKwkJICAgICAicmVnZXgiLCAmcmVnZXhfbW9kZSwKKwkJICAgICAiY2FzZS1zZW5z
aXRpdmUiLCAmY2FzZV9zZW5zaXRpdmUsCisJCSAgICAgTlVMTCk7CisKKwlpZiggcmVnZXhfbW9k
ZSApIHsKKwkJR1JlZ2V4Q29tcGlsZUZsYWdzIGNmbGFncyA9IDA7CisKKwkJaWYoIHNlbGYtPnNl
YXJjaF9yZWdleCAhPSBOVUxMICkKKwkJCS8qIEdldCByaWQgb2Ygb2xkIHJlZ2V4ICovCisJCQln
X3JlZ2V4X3VucmVmKHNlbGYtPnNlYXJjaF9yZWdleCk7CisJCQorCQlpZiggIWNhc2Vfc2Vuc2l0
aXZlICkgeworCQkJY2ZsYWdzIHw9IEdfUkVHRVhfQ0FTRUxFU1M7CisJCX0KKworCQlzZWxmLT5z
ZWFyY2hfcmVnZXggPSBnX3JlZ2V4X25ldyggZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShz
ZWxmLT5zZWFyY2gpKSwKKwkJCQkJCSAgY2ZsYWdzLCAwLCBOVUxMICk7CisJfQorCisJZ3RrX3Ry
ZWVfbW9kZWxfZmlsdGVyX3JlZmlsdGVyKEdUS19UUkVFX01PREVMX0ZJTFRFUihzZWxmLT5maWx0
ZXJlZF9zdG9yZSkpOworfQorCisvKiogU2hvdyB0aGUgZWxlbWVudHMgd2luZG93LCBjcmVhdGlu
ZyBpdCBpZiBuZWNlc3NhcnkuICovCit2b2lkIGdoaWRfZWxlbWVudHNfd2luZG93X3Nob3coIHZv
aWQgKQoreworCWlmKCBlbGVtd2luID09IE5VTEwgKSB7CisJCWVsZW13aW4gPSBnX29iamVjdF9u
ZXcoR0hJRF9UWVBFX0VMRU1FTlRTX1dJTkRPVywgTlVMTCk7CisJfQorCQorCWd0a193aWRnZXRf
c2hvd19hbGwoR1RLX1dJREdFVChlbGVtd2luKSk7CisJZ3RrX3dpbmRvd19wcmVzZW50KEdUS19X
SU5ET1coZWxlbXdpbikpOworfQorCisvKiogR2hpZEVsZW1lbnRzV2luZG93Q2xhc3MgaW5pdGlh
bGlzZXIgICovCitzdGF0aWMgdm9pZCBnaGlkX2VsZW1lbnRzX3dpbmRvd19jbGFzc19pbml0KEdo
aWRFbGVtZW50c1dpbmRvd0NsYXNzICprbGFzcykKK3sKK30KKworLyoqIFdpbmRvdydzICJjb25m
aWd1cmUtZXZlbnQiIHNpZ25hbCBoYW5kbGVyICovCitzdGF0aWMgZ2Jvb2xlYW4gd2luZG93X2Nv
bmZpZ3VyZV9jYiggR3RrV2lkZ2V0ICp3aWRnZXQsCisJCQkJICAgICBHZGtFdmVudCAqZXZlbnQs
CisJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEgKQoreworCUd0a0FsbG9jYXRpb24gYWxsb2M7
CisKKwlndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jKTsKKwlnaGlkZ3Vp
LT5lbGVtZW50c193aW5kb3dfd2lkdGggPSBhbGxvYy53aWR0aDsKKwlnaGlkZ3VpLT5lbGVtZW50
c193aW5kb3dfaGVpZ2h0ID0gYWxsb2MuaGVpZ2h0OworCWdoaWRndWktPmNvbmZpZ19tb2RpZmll
ZCA9IFRSVUU7CisJcmV0dXJuIEZBTFNFOworfQorCisvKiogR2hpZEVsZW1lbnRzV2luZG93IGlu
aXRpYWxpc2VyICAqLworc3RhdGljIHZvaWQgZ2hpZF9lbGVtZW50c193aW5kb3dfaW5pdChHaGlk
RWxlbWVudHNXaW5kb3cgKnNlbGYpCit7CisJR3RrV2lkZ2V0ICpidXR0b25fc2VsZWN0LCAqYnV0
dG9uX2Rlc2VsLCAqaGJveCwgKnZib3g7CisKKwlzZWxmLT5zZWFyY2hfcmVnZXggPSBOVUxMOwor
CisJZ19zaWduYWxfY29ubmVjdChzZWxmLCAiZGVsZXRlLWV2ZW50IiwKKwkJCSBHX0NBTExCQUNL
KGd0a193aWRnZXRfaGlkZV9vbl9kZWxldGUpLCBOVUxMKTsKKworCWdfc2lnbmFsX2Nvbm5lY3Qo
c2VsZiwgImNvbmZpZ3VyZS1ldmVudCIsCisJCQkgR19DQUxMQkFDSyh3aW5kb3dfY29uZmlndXJl
X2NiKSwgTlVMTCk7CisKKwlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHNlbGYpLCBf
KCJQQ0IgRWxlbWVudHMiKSk7CisKKwkvKiBUaGUgZGVmYXVsdHMgZm9yIHRoZSBzZXR0aW5nIGFy
ZSB6ZXJvLCB3aGljaCBpcyBvYnZpb3VzbHkKKwkgKiBub3QgYW4gYXBwcm9wcmlhdGUgd2luZG93
IHNpemUuICovCisJaWYoIGdoaWRndWktPmVsZW1lbnRzX3dpbmRvd19oZWlnaHQgPT0gMCB8fAor
CSAgICBnaGlkZ3VpLT5lbGVtZW50c193aW5kb3dfd2lkdGggPT0gMCApIHsKKwkJZ2hpZGd1aS0+
ZWxlbWVudHNfd2luZG93X2hlaWdodCA9IDQwMDsKKwkJZ2hpZGd1aS0+ZWxlbWVudHNfd2luZG93
X3dpZHRoID0gNDAwOworCX0KKworCWd0a193aW5kb3dfcmVzaXplKEdUS19XSU5ET1coc2VsZiks
CisJCQkgIGdoaWRndWktPmVsZW1lbnRzX3dpbmRvd193aWR0aCwKKwkJCSAgZ2hpZGd1aS0+ZWxl
bWVudHNfd2luZG93X2hlaWdodCk7CisKKwl2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAwKTsK
KwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHNlbGYpLCB2Ym94KTsKKworCXNlbGYt
PnNlYXJjaCA9IGdoaWRfZWxlbWVudHNfc2VhcmNoX2Jhcl9uZXcoKTsKKworCWd0a19ib3hfcGFj
a19zdGFydChHVEtfQk9YKHZib3gpLCBHVEtfV0lER0VUKHNlbGYtPnNlYXJjaCksIGZhbHNlLCB0
cnVlLCAwKTsKKworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzZWxmLT5zZWFyY2gsICJjaGFu
Z2VkIiwKKwkJCQkgR19DQUxMQkFDSyh1cGRhdGVfc2VhcmNoKSwgc2VsZik7CisJZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKHNlbGYtPnNlYXJjaCwgIm5vdGlmeTo6cmVnZXgiLAorCQkJCSBHX0NB
TExCQUNLKHVwZGF0ZV9zZWFyY2gpLCBzZWxmKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
c2VsZi0+c2VhcmNoLCAibm90aWZ5OjpjYXNlLXNlbnNpdGl2ZSIsCisJCQkJIEdfQ0FMTEJBQ0so
dXBkYXRlX3NlYXJjaCksIHNlbGYpOworCisJY3JlYXRlX3RyZWV2aWV3KHNlbGYpOworCisJZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIHNlbGYtPnNjcm9sbGVkLCB0cnVlLCB0cnVl
LCAwKTsKKworCWhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDApOworCWd0a19ib3hfcGFja19z
dGFydChHVEtfQk9YKHZib3gpLCBoYm94LCBmYWxzZSwgdHJ1ZSwgMCk7CisKKwlidXR0b25fc2Vs
ZWN0ID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJTZWxlY3QiKSk7CisJYnV0dG9uX2Rl
c2VsID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChfKCJEZXNlbGVjdCIpKTsKKworCWd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaGJveCksIGJ1dHRvbl9zZWxlY3QpOworCWdfc2ln
bmFsX2Nvbm5lY3QoYnV0dG9uX3NlbGVjdCwgImNsaWNrZWQiLAorCQkJIEdfQ0FMTEJBQ0soc2Vs
X2J1dHRvbl9jbGlja2VkKSwgc2VsZik7CisKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKGhib3gpLCBidXR0b25fZGVzZWwpOworCWdfc2lnbmFsX2Nvbm5lY3QoYnV0dG9uX2Rlc2Vs
LCAiY2xpY2tlZCIsCisJCQkgR19DQUxMQkFDSyhkZXNlbF9idXR0b25fY2xpY2tlZCksIHNlbGYp
OworfQorCisvKiogSElEIGFjdGlvbiBmdW5jdGlvbiBmb3Igd2hlbiBlbGVtZW50cyBhcmUgbW9k
aWZpZWQgKi8KK3N0YXRpYyBpbnQgZWxlbWVudHNfY2hhbmdlZF9jYihpbnQgYXJnYywgY2hhcioq
IGFyZ3YsIENvb3JkIHgsIENvb3JkIHkpCit7CisJLyogSWdub3JlIGlmIHRoZSBzdG9yZSBoYXNu
J3QgeWV0IGJlZW4gY29uc3RydWN0ZWQKKwkgICAoZS5nLiBpZiB0aGUgd2luZG93IGhhc24ndCBi
ZWVuIHNob3duKS4gKi8KKwlpZiggZWxlbXdpbiA9PSBOVUxMICkKKwkJcmV0dXJuIDA7CisKKwl1
cGRhdGVfbGlzdChlbGVtd2luKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIEhJRF9BY3Rpb24g
Z2hpZF9lbGVtZW50c193aW5kb3dfYWN0aW9uc1tdID0geworCXsKKwkJLm5hbWUgPSAiRWxlbWVu
dHNDaGFuZ2VkIiwKKwkJLm5lZWRfY29vcmRfbXNnID0gTlVMTCwKKwkJLnRyaWdnZXJfY2IgPSBl
bGVtZW50c19jaGFuZ2VkX2NiLAorCQkuZGVzY3JpcHRpb24gPSAiVGVsbHMgdGhlIEdVSSB0aGF0
IHRoZSBlbGVtZW50IGxpc3QgaGFzIGNoYW5nZWQiLAorCQkuc3ludGF4ID0gIkVsZW1lbnRzQ2hh
bmdlZCgpIiwKKwl9LAorfTsKKworUkVHSVNURVJfQUNUSU9OUyhnaGlkX2VsZW1lbnRzX3dpbmRv
d19hY3Rpb25zKTsKZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cu
aCBiL3NyYy9oaWQvZ3RrL2d1aS1lbGVtZW50cy13aW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xNzE4NDAzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2hpZC9ndGsv
Z3VpLWVsZW1lbnRzLXdpbmRvdy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qIGdFREEgLSBHUEwgRWxl
Y3Ryb25pYyBEZXNpZ24gQXV0b21hdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDE2IFJvYiBTcGFu
dG9uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAq
IFJvYiBTcGFudG9uOiByb2JAcm9ic3BhbnRvbi5jb20KKyAqLworI2lmbmRlZiBQQ0JfSElEX0dU
S19HVUlfRUxFTUVOVFNfV0lORE9XX0gKKyNkZWZpbmUgUENCX0hJRF9HVEtfR1VJX0VMRU1FTlRT
X1dJTkRPV19ICisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSAiZ3VpLWVsZW1lbnRzLXNlYXJjaC1iYXIuaCIKK0dfQkVHSU5fREVDTFMKKwor
LyogR2hpZEVsZW1lbnRzV2luZG93ICovCisjZGVmaW5lIEdISURfVFlQRV9FTEVNRU5UU19XSU5E
T1cgKGdoaWRfZWxlbWVudHNfd2luZG93X2dldF90eXBlKCkpCisjZGVmaW5lIEdISURfRUxFTUVO
VFNfV0lORE9XKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBHSElEX1RZ
UEVfRUxFTUVOVFNfV0lORE9XLCBHaGlkRWxlbWVudHNXaW5kb3cpKQorI2RlZmluZSBHSElEX0VM
RU1FTlRTX1dJTkRPV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksIEdISURfVFlQRV9FTEVNRU5UU19XSU5ET1csIEdoaWRFbGVtZW50c1dpbmRvd0NsYXNzKSkK
KyNkZWZpbmUgR0hJRF9JU19FTEVNRU5UU19XSU5ET1cob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIEdISURfVFlQRV9FTEVNRU5UU19XSU5ET1cpKQorI2RlZmluZSBHSElE
X0dFVF9FTEVNRU5UU19XSU5ET1dfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgR0hJRF9UWVBFX0VMRU1FTlRTX1dJTkRPVywgR2hpZEVsZW1lbnRzV2luZG93Q2xh
c3MpKQorCitHVHlwZSBnaGlkX2VsZW1lbnRzX3dpbmRvd19nZXRfdHlwZSAodm9pZCk7CisKK3R5
cGVkZWYgc3RydWN0IHsKKwlHdGtXaW5kb3dDbGFzcyBwYXJlbnRfY2xhc3M7CisKK30gR2hpZEVs
ZW1lbnRzV2luZG93Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHdGtXaW5kb3cgcGFyZW50
X2luc3RhbmNlOworCisJLyogVGhlIHRyZWV2aWV3IHdpZGdldCAqLworCUd0a1dpZGdldCogdHJl
ZXZpZXc7CisKKwkvKiBUaGUgc3RvcmUgd2l0aGluIHdoaWNoIHRoZSBlbGVtZW50IGxpc3QgaXMg
aGVsZCAqLworCUd0a0xpc3RTdG9yZSAqc3RvcmU7CisJLyogVGhlIGZpbHRlcmVkIHN0b3JlLCBh
bmQgaXRzIHNvcnRlZCB2ZXJzaW9uICovCisJR3RrVHJlZU1vZGVsICpmaWx0ZXJlZF9zdG9yZSwg
KnNvcnRlZF9zdG9yZTsKKworCS8qIFRoZSBzY3JvbGxlZCB3aW5kb3cgd2l0aGluIHdoaWNoIHRo
ZSB0cmVldmlldyByZXNpZGVzICovCisJR3RrV2lkZ2V0ICpzY3JvbGxlZDsKKworCS8qIFRoZSBz
ZWFyY2ggYm94ICovCisJR2hpZEVsZW1lbnRzU2VhcmNoQmFyICpzZWFyY2g7CisKKwkvKiBUaGUg
Y29tcGlsZWQgcmVnZXggd2UncmUgc2VhcmNoaW5nIGZvciBub3cgKi8KKwlHUmVnZXggKnNlYXJj
aF9yZWdleDsKK30gR2hpZEVsZW1lbnRzV2luZG93OworCit2b2lkIGdoaWRfZWxlbWVudHNfd2lu
ZG93X3Nob3coIHZvaWQgKTsKKworR19FTkRfREVDTFMKKyNlbmRpZiAvKiBQQ0JfSElEX0dUS19H
VUlfRUxFTUVOVFNfV0lORE9XX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9oaWQvZ3RrL2d1aS5oIGIv
c3JjL2hpZC9ndGsvZ3VpLmgKaW5kZXggNGIzNmRhOS4uYjQwNzQwYSAxMDA2NDQKLS0tIGEvc3Jj
L2hpZC9ndGsvZ3VpLmgKKysrIGIvc3JjL2hpZC9ndGsvZ3VpLmgKQEAgLTE0OCw2ICsxNDgsOCBA
QCB0eXBlZGVmIHN0cnVjdAogICAgIGxpYnJhcnlfd2luZG93X2hlaWdodCwKICAgICBuZXRsaXN0
X3dpbmRvd193aWR0aCwKICAgICBuZXRsaXN0X3dpbmRvd19oZWlnaHQsCisgICAgZWxlbWVudHNf
d2luZG93X3dpZHRoLAorICAgIGVsZW1lbnRzX3dpbmRvd19oZWlnaHQsCiAgICAgaGlzdG9yeV9z
aXplLAogICAgIHNldHRpbmdzX21vZGU7CiAKLS0gCjIuNS4wCgo=


--=-kDLW01Wybge5FyLAOOGg--

--=-IouJQOJRnOQySrdiMlSj
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABAgAGBQJWvR4eAAoJELnJXuxeMxduF0IQAJFdrp7DSy5CRgBkdeuagxqc
QJF99bYIajLsjsxq3IkysO7xOLv7PfNE1WhINdkELXUwat2JV6wnv4fUKIgQPSYj
+bwQ0xXZ7ggOYNNIpo5Z46q7LDATsF4FPQAD8t7pPB+rDgj6l4yN8+D2InnE9KSS
ChHknNKGaSlCpJgK3AxtvLKPy6vMZksxU41mCTXmX2v6kkYdgQvKpruPnAGqajLW
E1vTW1BiQDkxHC7tzrPfNInS9dVCyDBIovXXSPW+KWz/bcz7DscU6GTu8wtILMk8
dLhuFO+l0Io7sLn1Ddh7xB/r+O47GCdQ3dfYejsf/Hq6qMx5/4qAinigVJR3zBmH
eeR4rdfC5NtSGzbAp3bT3jp/WDD/6NRrDZQWHt30qU10n6VAcbFUq2Qwl2VTwBcK
s+6bhNP/ob9Sxjx8oY9TK0qlBptI4jfmrpWpiMMY/M+m1xD/PiXgg0XKkeB0pnjd
cHEiMsERd9p+OEwKbJzgxbbAuO2JGBpRDBsVF9R0whQ6cWVHcdCmnLevbpUVy+ob
WU9m5k1hTbIPniLolCSasRKK3863TddJnAge/C0jNINoJlNn45ZD1Dh5u4w2zvIr
nAtaPJf+cmUSRyns+9xIDJJGy3nbHqv8Aejl2JDyc0JVPr/3f6zgHoStrWJbgO1Q
3kQ44d2hcVN5umKkcMH2
=qRg6
-----END PGP SIGNATURE-----

--=-IouJQOJRnOQySrdiMlSj--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019