www.delorie.com/archives/browse.cgi   search  
Mail Archives: geda-user/2011/09/21/06:52:33

X-Authentication-Warning: delorie.com: mail set sender to geda-user-bounces using -f
X-Recipient: geda-user AT delorie DOT com
X-Cam-AntiVirus: no malware found
X-Cam-SpamDetails: not scanned
X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/
Subject: Re: PCB - moving already routed objects
From: Peter Clifton <pcjc2 AT cam DOT ac DOT uk>
To: geda-user AT delorie DOT com
Date: Wed, 21 Sep 2011 11:52:12 +0100
In-Reply-To: <281688.2008.4563-15170-1243963411-1316585521@seznam.cz>
References: <281688 DOT 2008 DOT 4563-15170-1243963411-1316585521 AT seznam DOT cz>
X-Mailer: Evolution 3.1.91-
Message-ID: <1316602335.2544.15.camel@localhost>
Mime-Version: 1.0
Reply-To: geda-user AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: geda-user AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

--=-JiRq8lw/oMpBT0Eo0Mkc
Content-Type: multipart/mixed; boundary="=-CNObwDo+Ilf+QrVLEVym"


--=-CNObwDo+Ilf+QrVLEVym
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, 2011-09-21 at 08:12 +0200, Vaclav Peroutka wrote:

> I just found this link. http://www.rowetel.com/blog/?p=3D25 That can be
> the next step for rubber band mode. But that patch is quite old. Maybe
> it could be merged with current PCB version?

A while ago, I refreshed that patch to at least build with (what was at
the time), the current PCB version. I'm not sure how well it will apply
now, nor whether it will work properly - but here is a new patch
(attached).

It has not been tested since our internal coordinates switched to the
"Coord" type, and the unit was switched to nanometers. I have refreshed
the patch a little - mostly chaning "LocationType" and "BDimension" to
"Coord", so it builds again, but there are lots of errors due to using
printf rather than pcb_printf with the appropriate type specifiers.

A very quick post-build test shows it kind-of-works, but it very often
shorts tracks out when it tries to move them. It also caused a segfault
after not a lot of time testing.

> I just downloaded new snapshot (for Windows). I must say, good work...

Thanks primarily go to DJ on that front - he put in a lot of hard work
getting that to be functional. I dabbled with getting the OpenGL stuff
to work, and provided a few GTK patches, so hopefully we might have GL
support on Windows for our next release. (A few more bugs to fix first).

Best wishes,

--=20
Peter Clifton

Electrical Engineering Division,
Engineering Department,
University of Cambridge,
9, JJ Thomson Avenue,
Cambridge
CB3 0FA

Tel: +44 (0)7729 980173 - (No signal in the lab!)
Tel: +44 (0)1223 748328 - (Shared lab phone, ask for me)

--=-CNObwDo+Ilf+QrVLEVym
Content-Disposition: attachment;
	filename="0001-Port-David-Rowe-s-rubberbanding-patch-to-git-HEAD.patch"
Content-Transfer-Encoding: base64
Content-Type: text/x-patch;
	name="0001-Port-David-Rowe-s-rubberbanding-patch-to-git-HEAD.patch";
	charset="UTF-8"

RnJvbSAyODQ1NmQ5NmEzZmU0MmZiMGZhOGViOTc3OTEwZDhmNDg1ZDYxMjU4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogUGV0ZXIgQ2xpZnRvbiA8cGNqYzJAY2FtLmFjLnVrPg0KRGF0
ZTogVHVlLCAxIEZlYiAyMDExIDIxOjU4OjU4ICswMDAwDQpTdWJqZWN0OiBbUEFUQ0hdIFBvcnQg
RGF2aWQgUm93ZSdzIHJ1YmJlcmJhbmRpbmcgcGF0Y2ggdG8gZ2l0IEhFQUQNCg0KLS0tDQogc3Jj
L2FjdGlvbi5jICAgICAgICAgfCAgIDExICsrDQogc3JjL2NvbnN0LmggICAgICAgICAgfCAgICAx
ICsNCiBzcmMvY3JlYXRlLmMgICAgICAgICB8ICAgIDQgKy0NCiBzcmMvY3Jvc3NoYWlyLmMgICAg
ICB8ICAgMzIgKysrLQ0KIHNyYy9nbG9iYWwuaCAgICAgICAgIHwgICAgMSArDQogc3JjL2dwY2It
bWVudS5yZXMuaW4gfCAgICAxICsNCiBzcmMvbW92ZS5jICAgICAgICAgICB8ICAzMTMgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KIHNyYy9wY2ItbWVudS5yZXMuaW4gIHwg
ICAgMSArDQogc3JjL3J1YmJlcmJhbmQuYyAgICAgfCAgNDE2ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogc3JjL3J1YmJlcmJhbmQuaCAgICAgfCAg
IDI2ICsrKw0KIDEwIGZpbGVzIGNoYW5nZWQsIDc4OSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlv
bnMoLSkNCg0KZGlmZiAtLWdpdCBhL3NyYy9hY3Rpb24uYyBiL3NyYy9hY3Rpb24uYw0KaW5kZXgg
MmVkYjlhOS4uMDZhMmY5MiAxMDA2NDQNCi0tLSBhL3NyYy9hY3Rpb24uYw0KKysrIGIvc3JjL2Fj
dGlvbi5jDQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5cGVkZWYgZW51bQ0KICAgRl9Ub2dnbGVTaG93
RFJDLA0KICAgRl9Ub2dnbGVMaXZlUm91dGUsDQogICBGX1RvZ2dsZVJ1YmJlckJhbmRNb2RlLA0K
KyAgRl9Ub2dnbGVBbGxEaXJlY3Rpb25zUnViYmVyQmFuZE1vZGUsDQogICBGX1RvZ2dsZVN0YXJ0
RGlyZWN0aW9uLA0KICAgRl9Ub2dnbGVTbmFwUGluLA0KICAgRl9Ub2dnbGVUaGluZHJhdywNCkBA
IC00MjQsNiArNDI1LDcgQEAgc3RhdGljIEZ1bmN0aW9uVHlwZSBGdW5jdGlvbnNbXSA9IHsNCiAg
IHsiVG9nZ2xlTmFtZSIsIEZfVG9nZ2xlTmFtZX0sDQogICB7IlRvZ2dsZU9iamVjdCIsIEZfVG9n
Z2xlT2JqZWN0fSwNCiAgIHsiVG9nZ2xlUnViYmVyQmFuZE1vZGUiLCBGX1RvZ2dsZVJ1YmJlckJh
bmRNb2RlfSwNCisgIHsiVG9nZ2xlQWxsRGlyZWN0aW9uc1J1YmJlckJhbmRNb2RlIiwgRl9Ub2dn
bGVBbGxEaXJlY3Rpb25zUnViYmVyQmFuZE1vZGV9LA0KICAgeyJUb2dnbGVTdGFydERpcmVjdGlv
biIsIEZfVG9nZ2xlU3RhcnREaXJlY3Rpb259LA0KICAgeyJUb2dnbGVTbmFwUGluIiwgRl9Ub2dn
bGVTbmFwUGlufSwNCiAgIHsiVG9nZ2xlVGhpbmRyYXciLCBGX1RvZ2dsZVRoaW5kcmF3fSwNCkBA
IC0yNDY3LDYgKzI0NjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBkaXNwbGF5X3N5bnRheFtdID0N
CiAgICJEaXNwbGF5KEdyaWR8UmVkcmF3KVxuIg0KICAgIkRpc3BsYXkoQ3ljbGVDbGlwfEN5Y2xl
Q3Jvc3NoYWlyfFRvZ2dsZTQ1RGVncmVlfFRvZ2dsZVN0YXJ0RGlyZWN0aW9uKVxuIg0KICAgIkRp
c3BsYXkoVG9nZ2xlR3JpZHxUb2dnbGVSdWJiZXJCYW5kTW9kZXxUb2dnbGVVbmlxdWVOYW1lcylc
biINCisgICJEaXNwbGF5KFRvZ2dsZUFsbERpcmVjdGlvbnNSdWJiZXJCYW5kTW9kZSlcbiINCiAg
ICJEaXNwbGF5KFRvZ2dsZU1hc2t8VG9nZ2xlTmFtZXxUb2dnbGVDbGVhckxpbmV8VG9nZ2xlRnVs
bFBvbHl8VG9nZ2xlU25hcFBpbilcbiINCiAgICJEaXNwbGF5KFRvZ2dsZVRoaW5kcmF3fFRvZ2ds
ZVRoaW5kcmF3UG9seXxUb2dnbGVPcnRob01vdmV8VG9nZ2xlTG9jYWxSZWYpXG4iDQogICAiRGlz
cGxheShUb2dnbGVDaGVja1BsYW5lc3xUb2dnbGVTaG93RFJDfFRvZ2dsZUF1dG9EUkMpXG4iDQpA
QCAtMjUwNCw2ICsyNTA3LDEwIEBAIENoYW5nZXMgY3Jvc3NoYWlyIGRyYXdpbmcuICBDcm9zc2hh
aXIgbWF5IGFjY2VwdCBmb3JtIG9mIDQtcmF5LA0KIEBpdGVtIFRvZ2dsZVJ1YmJlckJhbmRNb2Rl
DQogSWYgc2V0LCBtb3ZpbmcgYW4gb2JqZWN0IG1vdmVzIGFsbCB0aGUgbGluZXMgYXR0YWNoZWQg
dG8gaXQgdG9vLg0KIA0KK0BpdGVtIFRvZ2dsZUFsbERpcmVjdGlvbnNSdWJiZXJCYW5kTW9kZQ0K
K0luIFJ1YmJlckJhbmQgbW9kZSwgbGluZXMgY2FuIGJlIG1vdmVkIGluIGFsbCBkaXJlY3Rpb25z
LiAgSWYgdW5zZXQgbGluZXMNCithcmUgcmVzdHJpY3RlZCB0byA0NSBkZWdyZWVzIHdoZW4gbW92
aW5nLg0KKw0KIEBpdGVtIFRvZ2dsZVN0YXJ0RGlyZWN0aW9uDQogSWYgc2V0LCBlYWNoIHRpbWUg
eW91IHNldCBhIHBvaW50IGluIGEgbGluZSwgdGhlIENsaXAgdG9nZ2xlcyBiZXR3ZWVuDQogb3J0
aC1hbmdsZSBhbmQgYW5nbGUtb3J0aG8uDQpAQCAtMjcwMiw2ICsyNzA5LDEwIEBAIEFjdGlvbkRp
c3BsYXkgKGludCBhcmdjLCBjaGFyICoqYXJndiwgQ29vcmQgY2hpbGRYLCBDb29yZCBjaGlsZFkp
DQogCSAgbm90aWZ5X2Nyb3NzaGFpcl9jaGFuZ2UgKHRydWUpOw0KIAkgIGJyZWFrOw0KIA0KKwlj
YXNlIEZfVG9nZ2xlQWxsRGlyZWN0aW9uc1J1YmJlckJhbmRNb2RlOg0KKwkgIFRPR0dMRV9GTEFH
IChBTExESVJFQ1RJT05TUlVCQkVSQkFOREZMQUcsIFBDQik7DQorCSAgYnJlYWs7DQorDQogCWNh
c2UgRl9Ub2dnbGVTdGFydERpcmVjdGlvbjoNCiAJICBub3RpZnlfY3Jvc3NoYWlyX2NoYW5nZSAo
ZmFsc2UpOw0KIAkgIFRPR0dMRV9GTEFHIChTV0FQU1RBUlRESVJGTEFHLCBQQ0IpOw0KZGlmZiAt
LWdpdCBhL3NyYy9jb25zdC5oIGIvc3JjL2NvbnN0LmgNCmluZGV4IGYwMjk4MjEuLjM3NDI3Njkg
MTAwNjQ0DQotLS0gYS9zcmMvY29uc3QuaA0KKysrIGIvc3JjL2NvbnN0LmgNCkBAIC0yOTcsNiAr
Mjk3LDcgQEAgV2hlbiBzZXQsIGVsZW1lbnQgbmFtZXMgYXJlIG5vdCBkcmF3bi4NCiAjZGVmaW5l
IE9OTFlOQU1FU0ZMQUcgICAgICAgICAgIDB4MDAwODAwMDANCiAjZGVmaW5lIE5FV0ZVTExQT0xZ
RkxBRyAgICAgICAgIDB4MDAxMDAwMDANCiAjZGVmaW5lIEhJREVOQU1FU0ZMQUcgICAgICAgICAg
IDB4MDAyMDAwMDANCisjZGVmaW5lIEFMTERJUkVDVElPTlNSVUJCRVJCQU5ERkxBRyAweDQwMDAw
MA0KIA0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIG9iamVjdCB0eXBlcw0KZGlmZiAtLWdp
dCBhL3NyYy9jcmVhdGUuYyBiL3NyYy9jcmVhdGUuYw0KaW5kZXggYzg0MzU4Mi4uODE2YTU5MSAx
MDA2NDQNCi0tLSBhL3NyYy9jcmVhdGUuYw0KKysrIGIvc3JjL2NyZWF0ZS5jDQpAQCAtMTY1LDYg
KzE2NSw4IEBAIENyZWF0ZU5ld1BDQiAoYm9vbCBTZXREZWZhdWx0TmFtZXMpDQogICBwdHItPkNs
aXBwaW5nID0gMTsJCS8qIHRoaXMgaXMgdGhlIG1vc3QgdXNlZnVsIHN0YXJ0aW5nIHBvaW50IGZv
ciBub3cgKi8NCiAgIGlmIChTZXR0aW5ncy5SdWJiZXJCYW5kTW9kZSkNCiAgICAgU0VUX0ZMQUcg
KFJVQkJFUkJBTkRGTEFHLCBwdHIpOw0KKyAgaWYgKFNldHRpbmdzLkFsbERpcmVjdGlvbnNSdWJi
ZXJCYW5kTW9kZSkNCisgICAgU0VUX0ZMQUcgKEFMTERJUkVDVElPTlNSVUJCRVJCQU5ERkxBRywg
cHRyKTsNCiAgIGlmIChTZXR0aW5ncy5Td2FwU3RhcnREaXJlY3Rpb24pDQogICAgIFNFVF9GTEFH
IChTV0FQU1RBUlRESVJGTEFHLCBwdHIpOw0KICAgaWYgKFNldHRpbmdzLlVuaXF1ZU5hbWVzKQ0K
QEAgLTk1NCw3ICs5NTYsNyBAQCBDcmVhdGVOZXdSdWJiZXJiYW5kRW50cnkgKExheWVyVHlwZVB0
ciBMYXllciwNCiANCiAgIC8qIHdlIHRvZ2dsZSB0aGUgUlVCQkVSRU5ERkxBRyBvZiB0aGUgbGlu
ZSB0byBkZXRlcm1pbmUgaWYgKi8NCiAgIC8qIGJvdGggcG9pbnRzIGFyZSBiZWluZyBtb3ZlZC4g
Ki8NCi0gIFRPR0dMRV9GTEFHIChSVUJCRVJFTkRGTEFHLCBMaW5lKTsNCisgIFNFVF9GTEFHIChS
VUJCRVJFTkRGTEFHLCBMaW5lKTsNCiAgIHB0ci0+TGF5ZXIgPSBMYXllcjsNCiAgIHB0ci0+TGlu
ZSA9IExpbmU7DQogICBwdHItPk1vdmVkUG9pbnQgPSBNb3ZlZFBvaW50Ow0KZGlmZiAtLWdpdCBh
L3NyYy9jcm9zc2hhaXIuYyBiL3NyYy9jcm9zc2hhaXIuYw0KaW5kZXggZDkyN2NmOC4uZTljMjUx
NSAxMDA2NDQNCi0tLSBhL3NyYy9jcm9zc2hhaXIuYw0KKysrIGIvc3JjL2Nyb3NzaGFpci5jDQpA
QCAtNDcsNiArNDcsNyBAQA0KICNpbmNsdWRlICJsaW5lLmgiDQogI2luY2x1ZGUgIm1pc2MuaCIN
CiAjaW5jbHVkZSAibXltZW0uaCINCisjaW5jbHVkZSAicnViYmVyYmFuZC5oIg0KICNpbmNsdWRl
ICJzZWFyY2guaCINCiAjaW5jbHVkZSAicG9seWdvbi5oIg0KIA0KQEAgLTU2LDYgKzU3LDggQEAN
CiANCiBSQ1NJRCAoIiRJZCQiKTsNCiANCisjZGVmaW5lIGRwcmludGYgaWYgKDApIHByaW50Zg0K
Kw0KIHR5cGVkZWYgc3RydWN0DQogew0KICAgaW50IHgsIHk7DQpAQCAtMzgwLDggKzM4MywxMCBA
QCBYT1JEcmF3TW92ZU9yQ29weU9iamVjdCAodm9pZCkNCiB7DQogICBSdWJiZXJiYW5kVHlwZVB0
ciBwdHI7DQogICBDYXJkaW5hbCBpOw0KKyAgTGluZVR5cGUgIExpbmVPdXQ7DQorICBQb2ludFR5
cGUgUG9pbnRPdXQ7DQogICBDb29yZCBkeCA9IENyb3NzaGFpci5YIC0gQ3Jvc3NoYWlyLkF0dGFj
aGVkT2JqZWN0LlgsDQotICAgIGR5ID0gQ3Jvc3NoYWlyLlkgLSBDcm9zc2hhaXIuQXR0YWNoZWRP
YmplY3QuWTsNCisgICAgICAgIGR5ID0gQ3Jvc3NoYWlyLlkgLSBDcm9zc2hhaXIuQXR0YWNoZWRP
YmplY3QuWTsNCiANCiAgIHN3aXRjaCAoQ3Jvc3NoYWlyLkF0dGFjaGVkT2JqZWN0LlR5cGUpDQog
ICAgIHsNCkBAIC0zOTUsMTAgKzQwMCwxOCBAQCBYT1JEcmF3TW92ZU9yQ29weU9iamVjdCAodm9p
ZCkNCiAgICAgY2FzZSBMSU5FX1RZUEU6DQogICAgICAgew0KIAlMaW5lVHlwZVB0ciBsaW5lID0g
KExpbmVUeXBlUHRyKSBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUHRyMjsNCisJZHByaW50Zigi
bGluZS0+UG9pbnQxLlggPSAlZCBsaW5lLT5Qb2ludDEuWSA9ICVkIFJ1YmJlcmJhbmROID0gJWRc
biIsDQorCSAgICAgICAgbGluZS0+UG9pbnQxLlgsIGxpbmUtPlBvaW50MS5ZLA0KKwkgICAgICAg
IENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kTik7DQorDQorCS8qIHdvcmsgb3V0
IGNvb3JkcyBvZiBsaW5lIHRvIGRyYXcgZ2l2ZW4gcnViYmVyIG1vZGUgKi8NCisNCisJUmVzdHJp
Y3RNb3ZlbWVudEdpdmVuUnViYmVyQmFuZE1vZGUgKGxpbmUsICZkeCwgJmR5KTsNCisJTW92ZUxp
bmVHaXZlblJ1YmJlckJhbmRNb2RlICgmTGluZU91dCwgbGluZSwgZHgsIGR5LCBDcm9zc2hhaXIp
Ow0KIA0KLQlYT1JEcmF3QXR0YWNoZWRMaW5lIChsaW5lLT5Qb2ludDEuWCArIGR4LCBsaW5lLT5Q
b2ludDEuWSArIGR5LA0KLQkJCSAgICAgbGluZS0+UG9pbnQyLlggKyBkeCwgbGluZS0+UG9pbnQy
LlkgKyBkeSwNCi0JCQkgICAgIGxpbmUtPlRoaWNrbmVzcyk7DQorCVhPUkRyYXdBdHRhY2hlZExp
bmUgKExpbmVPdXQuUG9pbnQxLlgsIExpbmVPdXQuUG9pbnQxLlksDQorCQkJICAgICBMaW5lT3V0
LlBvaW50Mi5YLCBMaW5lT3V0LlBvaW50Mi5ZLA0KKwkJCSAgICAgTGluZU91dC5UaGlja25lc3Mp
Ow0KIAlicmVhazsNCiAgICAgICB9DQogDQpAQCAtNTIwLDkgKzUzMywxNCBAQCBYT1JEcmF3TW92
ZU9yQ29weU9iamVjdCAodm9pZCkNCiAJICAgICAgcG9pbnQxID0gJnB0ci0+TGluZS0+UG9pbnQx
Ow0KIAkgICAgICBwb2ludDIgPSAmcHRyLT5MaW5lLT5Qb2ludDI7DQogCSAgICB9DQotCSAgWE9S
RHJhd0F0dGFjaGVkTGluZSAocG9pbnQxLT5YLA0KLQkJCSAgICAgICBwb2ludDEtPlksIHBvaW50
Mi0+WCArIGR4LA0KLQkJCSAgICAgICBwb2ludDItPlkgKyBkeSwgcHRyLT5MaW5lLT5UaGlja25l
c3MpOw0KKw0KKwkgIE1vdmVQb2ludEdpdmVuUnViYmVyQmFuZE1vZGUgKCZQb2ludE91dCwgcG9p
bnQyLCBwdHItPkxpbmUsIGR4LCBkeSwNCisJCQkJCUNyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5U
eXBlLCAwKTsNCisNCisJICBYT1JEcmF3QXR0YWNoZWRMaW5lIChwb2ludDEtPlgsIHBvaW50MS0+
WSwNCisJCQkgICAgICAgUG9pbnRPdXQuWCwgUG9pbnRPdXQuWSwNCisJCQkgICAgICAgcHRyLT5M
aW5lLT5UaGlja25lc3MpOw0KKw0KIAl9DQogICAgICAgZWxzZSBpZiAocHRyLT5Nb3ZlZFBvaW50
ID09ICZwdHItPkxpbmUtPlBvaW50MSkNCiAJWE9SRHJhd0F0dGFjaGVkTGluZSAocHRyLT5MaW5l
LT5Qb2ludDEuWCArIGR4LA0KZGlmZiAtLWdpdCBhL3NyYy9nbG9iYWwuaCBiL3NyYy9nbG9iYWwu
aA0KaW5kZXggOTZjOWNjOS4uNjY0MjViYiAxMDA2NDQNCi0tLSBhL3NyYy9nbG9iYWwuaA0KKysr
IGIvc3JjL2dsb2JhbC5oDQpAQCAtNjgyLDYgKzY4Miw3IEBAIHR5cGVkZWYgc3RydWN0CQkJLyog
c29tZSByZXNvdXJjZXMuLi4gKi8NCiAgICAgU3RpcHBsZVBvbHlnb25zLAkJLyogZHJhdyBwb2x5
Z29ucyB3aXRoIHN0aXBwbGUgKi8NCiAgICAgQWxsRGlyZWN0aW9uTGluZXMsCQkvKiBlbmFibGUg
bGluZXMgdG8gYWxsIGRpcmVjdGlvbnMgKi8NCiAgICAgUnViYmVyQmFuZE1vZGUsCQkvKiBtb3Zl
LCByb3RhdGUgdXNlIHJ1YmJlcmJhbmQgY29ubmVjdGlvbnMgKi8NCisgICAgQWxsRGlyZWN0aW9u
c1J1YmJlckJhbmRNb2RlLC8qIHJ1YmJlcmJhbmQgdHJhY2tzIGNhbiBtb3ZlIGluIGFsbCBkaXJl
Y3Rpb25zICAqLw0KICAgICBTd2FwU3RhcnREaXJlY3Rpb24sCQkvKiBjaGFuZ2Ugc3RhcnRpbmcg
ZGlyZWN0aW9uIGFmdGVyIGVhY2ggY2xpY2sgKi8NCiAgICAgU2hvd0RSQywJCQkvKiBzaG93IGRy
YyByZWdpb24gb24gY3Jvc3NoYWlyICovDQogICAgIEF1dG9EUkMsCQkJLyogKi8NCmRpZmYgLS1n
aXQgYS9zcmMvZ3BjYi1tZW51LnJlcy5pbiBiL3NyYy9ncGNiLW1lbnUucmVzLmluDQppbmRleCA3
ZTYzODExLi5kZTUzM2RlIDEwMDY0NA0KLS0tIGEvc3JjL2dwY2ItbWVudS5yZXMuaW4NCisrKyBi
L3NyYy9ncGNiLW1lbnUucmVzLmluDQpAQCAtMjA1LDYgKzIwNSw3IEBAIE1haW5NZW51ID0NCiAg
ICB7IkhpZGUgTmFtZXMiIGNoZWNrZWQ9aGlkZW5hbWVzIERpc3BsYXkoVG9nZ2xlSGlkZU5hbWVz
KX0NCiAgICAtDQogICAgeyJSdWJiZXIgYmFuZCBtb2RlIiBjaGVja2VkPXJ1YmJlcmJhbmQgRGlz
cGxheShUb2dnbGVSdWJiZXJCYW5kTW9kZSl9DQorICAgeyJBbGwgRGlyZWN0aW9ucyBSdWJiZXIg
YmFuZCBtb2RlIiBjaGVja2VkPWFsbGRpcmVjdGlvbnNydWJiZXJiYW5kIERpc3BsYXkoVG9nZ2xl
QWxsRGlyZWN0aW9uc1J1YmJlckJhbmRNb2RlKX0NCiAgICB7IlJlcXVpcmUgdW5pcXVlIGVsZW1l
bnQgbmFtZXMiIGNoZWNrZWQ9dW5pcXVlbmFtZSBEaXNwbGF5KFRvZ2dsZVVuaXF1ZU5hbWVzKX0N
CiAgICB7IkF1dG8temVybyBkZWx0YSBtZWFzdXJlbWVudHMiIGNoZWNrZWQ9bG9jYWxyZWYgRGlz
cGxheShUb2dnbGVMb2NhbFJlZil9DQogICAgeyJOZXcgbGluZXMsIGFyY3MgY2xlYXIgcG9seWdv
bnMiIGNoZWNrZWQ9Y2xlYXJuZXcgRGlzcGxheShUb2dnbGVDbGVhckxpbmUpfQ0KZGlmZiAtLWdp
dCBhL3NyYy9tb3ZlLmMgYi9zcmMvbW92ZS5jDQppbmRleCA2YjYzNTlhLi5iNzQ1OTczIDEwMDY0
NA0KLS0tIGEvc3JjL21vdmUuYw0KKysrIGIvc3JjL21vdmUuYw0KQEAgLTM0LDYgKzM0LDcgQEAN
CiAjaW5jbHVkZSAiY29uZmlnLmgiDQogI2VuZGlmDQogDQorI2luY2x1ZGUgPGFzc2VydC5oPg0K
ICNpbmNsdWRlIDxzZXRqbXAuaD4NCiAjaW5jbHVkZSA8c3RkbGliLmg+DQogDQpAQCAtNDksNiAr
NTAsOCBAQA0KICNpbmNsdWRlICJteW1lbS5oIg0KICNpbmNsdWRlICJwb2x5Z29uLmgiDQogI2lu
Y2x1ZGUgInJ0cmVlLmgiDQorI2luY2x1ZGUgInJ1YmJlcmJhbmQuaCINCisjaW5jbHVkZSAicmVt
b3ZlLmgiDQogI2luY2x1ZGUgInNlYXJjaC5oIg0KICNpbmNsdWRlICJzZWxlY3QuaCINCiAjaW5j
bHVkZSAidGhlcm1hbC5oIg0KQEAgLTYwLDggKzYzLDcgQEANCiANCiBSQ1NJRCAoIiRJZCQiKTsN
CiANCi0NCi0NCisjZGVmaW5lIGRwcmludGYgaWYgKDApIHByaW50Zg0KIA0KIC8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQ0KICAqIHNvbWUgbG9jYWwgcHJvdG90eXBlcw0KQEAgLTI3Myw2ICsyNzUsNyBA
QCBNb3ZlTGluZSAoTGF5ZXJUeXBlUHRyIExheWVyLCBMaW5lVHlwZVB0ciBMaW5lKQ0KICAgUmVz
dG9yZVRvUG9seWdvbiAoUENCLT5EYXRhLCBMSU5FX1RZUEUsIExheWVyLCBMaW5lKTsNCiAgIHJf
ZGVsZXRlX2VudHJ5IChMYXllci0+bGluZV90cmVlLCAoQm94VHlwZSAqKUxpbmUpOw0KICAgTU9W
RV9MSU5FX0xPV0xFVkVMIChMaW5lLCBEZWx0YVgsIERlbHRhWSk7DQorICBTZXRMaW5lQm91bmRp
bmdCb3ggKExpbmUpOw0KICAgcl9pbnNlcnRfZW50cnkgKExheWVyLT5saW5lX3RyZWUsIChCb3hU
eXBlICopTGluZSwgMCk7DQogICBDbGVhckZyb21Qb2x5Z29uIChQQ0ItPkRhdGEsIExJTkVfVFlQ
RSwgTGF5ZXIsIExpbmUpOw0KICAgaWYgKExheWVyLT5PbikNCkBAIC03OTYsNiArNzk5LDE0IEBA
IE1vdmVPYmplY3RBbmRSdWJiZXJiYW5kIChpbnQgVHlwZSwgdm9pZCAqUHRyMSwgdm9pZCAqUHRy
Miwgdm9pZCAqUHRyMywNCiB7DQogICBSdWJiZXJiYW5kVHlwZVB0ciBwdHI7DQogICB2b2lkICpw
dHIyOw0KKyAgaW50ICAgbjsNCisgIENvb3JkIFByZU1vdmVPYmpYLCBQcmVNb3ZlT2JqWTsNCisN
CisgIGRwcmludGYoIk1vdmVPYmplY3RBbmRSdWJiZXJiYW5kXG4iKTsNCisgIGlmIChUeXBlID09
IExJTkVfVFlQRSkgew0KKyAgICBkcHJpbnRmKCIgIExpbmUgVHlwZVxuIik7DQorICAgIFJlc3Ry
aWN0TW92ZW1lbnRHaXZlblJ1YmJlckJhbmRNb2RlICgoTGluZVR5cGVQdHIpUHRyMywgJkRYLCAm
RFkpOw0KKyAgfQ0KIA0KICAgLyogc2V0dXAgb2Zmc2V0ICovDQogICBEZWx0YVggPSBEWDsNCkBA
IC04MDMsMjIgKzgxNCwzMDYgQEAgTW92ZU9iamVjdEFuZFJ1YmJlcmJhbmQgKGludCBUeXBlLCB2
b2lkICpQdHIxLCB2b2lkICpQdHIyLCB2b2lkICpQdHIzLA0KICAgaWYgKERYID09IDAgJiYgRFkg
PT0gMCkNCiAgICAgcmV0dXJuIChOVUxMKTsNCiANCi0gIC8qIG1vdmUgYWxsIHRoZSBsaW5lcy4u
LiBhbmQgcmVzZXQgdGhlIGNvdW50ZXIgKi8NCisgIC8qIHJlZ3VsYXIgcnViYmVyYmFuZCBtb3Zl
IG9mIGF0dGFjaGVkIHBvaW50IGluIGF0dGFjaGVkIGxpbmVzICovDQorDQogICBwdHIgPSBDcm9z
c2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZDsNCi0gIHdoaWxlIChDcm9zc2hhaXIuQXR0
YWNoZWRPYmplY3QuUnViYmVyYmFuZE4pDQorICBuID0gQ3Jvc3NoYWlyLkF0dGFjaGVkT2JqZWN0
LlJ1YmJlcmJhbmROOw0KKyAgd2hpbGUgKG4pDQogICAgIHsNCi0gICAgICAvKiBmaXJzdCBjbGVh
ciBhbnkgbWFya3MgdGhhdCB3ZSBtYWRlIGluIHRoZSBsaW5lIGZsYWdzICovDQotICAgICAgQ0xF
QVJfRkxBRyAoUlVCQkVSRU5ERkxBRywgcHRyLT5MaW5lKTsNCisgICAgICBDb29yZCBkWCwgZFk7
DQorDQorICAgICAgZFggPSBEWDsgZFkgPSBEWTsNCisNCisgICAgICAvKg0KKwkgQ2VudHJlIGVh
Y2ggbW92ZWQgcG9pbnRzIGluIHBpbi9wYWQuICBUaGlzIGhhcyB0aGUgbmljZSBzaWRlIGVmZmVj
dA0KKwkgb3IgcmVkdWNpbmcgdGhlIGxlbmd0aCBvZiBhbnkgc3R1YiB0cmFja3MgdG8gemVybyBz
byB0aGV5IHdpbGwgZ2V0DQorCSBkZWxldGVkIGxhdGVyLg0KKyAgICAgICovDQorICAgICAgZHBy
aW50ZigiUG9pbnQgTnVtYmVyICVkLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIs
bik7DQorICAgICAgZHByaW50ZigiICBNb3ZlZFBvaW50ICglZCwlZClcbiIsIHB0ci0+TW92ZWRQ
b2ludC0+WCwgcHRyLT5Nb3ZlZFBvaW50LT5ZKTsNCisgICAgICBkcHJpbnRmKCIgIExpbmUgICAg
ICAgKCVkLCVkKSAoJWQsJWQpXG4iLA0KKwkgICAgICBwdHItPkxpbmUtPlBvaW50MS5YLCBwdHIt
PkxpbmUtPlBvaW50MS5ZLA0KKwkgICAgIHB0ci0+TGluZS0+UG9pbnQyLlgsIHB0ci0+TGluZS0+
UG9pbnQyLlkpOw0KKw0KKyAgICAgIGlmICgoVHlwZSA9PSBQSU5fVFlQRSkgfHwgKFR5cGUgPT0g
VklBX1RZUEUpKSB7DQorCVBpblR5cGVQdHIgUGluUHRyID0gKFBpblR5cGVQdHIpUHRyMTsNCisg
ICAgICAgIGRwcmludGYoIiAgICAgICBQaW4gICAoJWQsJWQpXG4iLCBQaW5QdHItPlgsIFBpblB0
ci0+WSk7DQorICAgICAgICBkcHJpbnRmKCIgICAgICAgZFggZFkgKCVkLCVkKVxuIiwgZFgsIGRZ
KTsNCisJZFggKz0gUGluUHRyLT5YIC0gcHRyLT5Nb3ZlZFBvaW50LT5YOw0KKwlkWSArPSBQaW5Q
dHItPlkgLSBwdHItPk1vdmVkUG9pbnQtPlk7DQorICAgICAgICBkcHJpbnRmKCIgICAgICAgZFgg
ZFkgKCVkLCVkKVxuIiwgZFgsIGRZKTsNCisgICAgICB9DQorICAgICAgaWYgKFR5cGUgPT0gUEFE
X1RZUEUpIHsNCisJUGFkVHlwZVB0ciBQYWRQdHIgPSAoUGFkVHlwZVB0cilQdHIxOw0KKwlQb2lu
dFR5cGUgUGFkQ2VudHJlOw0KKw0KKwlQYWRDZW50cmUuWCA9IChQYWRQdHItPlBvaW50MS5YICsg
UGFkUHRyLT5Qb2ludDEuWCkvMjsNCisJUGFkQ2VudHJlLlkgPSAoUGFkUHRyLT5Qb2ludDIuWSAr
IFBhZFB0ci0+UG9pbnQyLlkpLzI7DQorCWRYICs9IFBhZENlbnRyZS5YIC0gcHRyLT5Nb3ZlZFBv
aW50LT5YOw0KKwlkWSArPSBQYWRDZW50cmUuWSAtIHB0ci0+TW92ZWRQb2ludC0+WTsNCisgICAg
ICB9DQorDQorICAgICAgRGVsdGFYID0gZFg7IERlbHRhWSA9IGRZOw0KICAgICAgIEFkZE9iamVj
dFRvTW92ZVVuZG9MaXN0IChMSU5FUE9JTlRfVFlQRSwNCi0JCQkgICAgICAgcHRyLT5MYXllciwg
cHRyLT5MaW5lLCBwdHItPk1vdmVkUG9pbnQsIERYLA0KLQkJCSAgICAgICBEWSk7DQorCQkJICAg
ICAgIHB0ci0+TGF5ZXIsIHB0ci0+TGluZSwgcHRyLT5Nb3ZlZFBvaW50LCBkWCwNCisJCQkgICAg
ICAgZFkpOw0KICAgICAgIE1vdmVMaW5lUG9pbnQgKHB0ci0+TGF5ZXIsIHB0ci0+TGluZSwgcHRy
LT5Nb3ZlZFBvaW50KTsNCi0gICAgICBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFu
ZE4tLTsNCisNCisgICAgICBuLS07DQogICAgICAgcHRyKys7DQogICAgIH0NCiANCisNCisgIC8q
IG1vdmUgdGhlIGFjdHVhbCBvYmplY3QgKi8NCisNCisgIERlbHRhWCA9IERYOw0KKyAgRGVsdGFZ
ID0gRFk7DQogICBBZGRPYmplY3RUb01vdmVVbmRvTGlzdCAoVHlwZSwgUHRyMSwgUHRyMiwgUHRy
MywgRFgsIERZKTsNCiAgIHB0cjIgPSBPYmplY3RPcGVyYXRpb24gKCZNb3ZlRnVuY3Rpb25zLCBU
eXBlLCBQdHIxLCBQdHIyLCBQdHIzKTsNCisNCisgIC8qIG5vdyB3ZSBkbyBmaXh1cHMgdG8gbWFp
bnRhaW4gNDUgZGVnIGFuZ2xlcyBkdXJpbmcgcnViYmVyYmFuZA0KKyAgICAgZHJhZ3MgKi8NCisN
CisgIHN3aXRjaCAoVHlwZSkgew0KKw0KKyAgY2FzZSBMSU5FX1RZUEU6DQorICAgIHsNCisNCisg
ICAgICAvKiBJbiBydWJiZXJiYW5kIG1vZGUgd2UgbnVkZ2Ugb25lIGVuZCBvZiB0aGUgbGluZSB3
ZSBqdXN0IG1vdmVkDQorCSB0byBrZWVwIGpvaW5lZCBsaW5lcyBhbGlnbmVkIDQ1IGRlZ3JlZXMg
ICovDQorDQorICAgICAgbiA9IENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kTjsN
CisgICAgICBwdHIgPSBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZDsNCisgICAg
ICB3aGlsZShuKSB7DQorCUNvb3JkIG51ZGdlWCwgbnVkZ2VZOw0KKwlMaW5lVHlwZVB0ciBsaW5l
ID0gKExpbmVUeXBlUHRyKVB0cjM7DQorCVBvaW50VHlwZSBQb2ludE91dDsNCisJUG9pbnRUeXBl
UHRyIG51ZGdlOw0KKw0KKwlkcHJpbnRmKCIgIE51ZGdpbmcgYSBsaW5lIGF0dGFjaGVkIHRvIGxp
bmUgJWRcbiIsIG4pOw0KKw0KKwlNb3ZlUG9pbnRHaXZlblJ1YmJlckJhbmRNb2RlKCZQb2ludE91
dCwgcHRyLT5Nb3ZlZFBvaW50LCBwdHItPkxpbmUsDQorCQkJCSAgICAgRFgsIERZLCBDcm9zc2hh
aXIuQXR0YWNoZWRPYmplY3QuVHlwZSwNCisJCQkJICAgICBJc0RpYWdvbmFsKGxpbmUpKTsNCisN
CisJbnVkZ2VYID0gUG9pbnRPdXQuWCAtIHB0ci0+TW92ZWRQb2ludC0+WCAtIERYOw0KKwludWRn
ZVkgPSBQb2ludE91dC5ZIC0gcHRyLT5Nb3ZlZFBvaW50LT5ZIC0gRFk7DQorCWRwcmludGYoIiAg
bnVkZ2VYID0gJWQgIG51ZGdlWSA9ICVkXG4iLCBudWRnZVgsIG51ZGdlWSk7DQorCURlbHRhWCA9
IG51ZGdlWDsgRGVsdGFZID0gbnVkZ2VZOw0KKw0KKwkvKiBudWRnZSBwb2ludCBvbiBhdHRhY2hl
ZCBsaW5lICovDQorDQorCS8qIG51ZGdlIHBvaW50IG9uIGxpbmUgKi8NCisNCisJaWYgKChwdHIt
Pk1vdmVkUG9pbnQtPlggPT0gbGluZS0+UG9pbnQxLlgpICYmDQorCSAgICAocHRyLT5Nb3ZlZFBv
aW50LT5ZID09IGxpbmUtPlBvaW50MS5ZKSkgew0KKwkgIG51ZGdlID0gJmxpbmUtPlBvaW50MTsN
CisJICBkcHJpbnRmKCIgICAgbnVkZ2UgcG9pbnQxXG4iKTsNCisJfQ0KKwllbHNlIHsNCisJICBk
cHJpbnRmKCIgICAgbnVkZ2UgcG9pbnQyXG4iKTsNCisJICBudWRnZSA9ICZsaW5lLT5Qb2ludDI7
DQorCX0NCisNCisJQWRkT2JqZWN0VG9Nb3ZlVW5kb0xpc3QgKExJTkVQT0lOVF9UWVBFLA0KKwkJ
CQkgcHRyLT5MYXllciwgcHRyLT5MaW5lLCBwdHItPk1vdmVkUG9pbnQsIG51ZGdlWCwNCisJCQkJ
IG51ZGdlWSk7DQorCU1vdmVMaW5lUG9pbnQgKHB0ci0+TGF5ZXIsIHB0ci0+TGluZSwgcHRyLT5N
b3ZlZFBvaW50KTsNCisNCisJQWRkT2JqZWN0VG9Nb3ZlVW5kb0xpc3QgKExJTkVQT0lOVF9UWVBF
LCBQdHIxLCBQdHIyLCBudWRnZSwNCisJCQkJIG51ZGdlWCxudWRnZVkpOw0KKwlNb3ZlTGluZVBv
aW50IChQdHIxLCBQdHIyLCBudWRnZSk7DQorCXB0cisrOw0KKwluLS07DQorICAgICAgfQ0KKyAg
ICB9DQorICAgIGJyZWFrOw0KKw0KKyAgY2FzZSBWSUFfVFlQRToNCisgIGNhc2UgUEFEX1RZUEU6
DQorICBjYXNlIFBJTl9UWVBFOg0KKyAgY2FzZSBFTEVNRU5UX1RZUEU6DQorICAgIHsNCisgICAg
ICAvKg0KKwkgR2VuZXJhbGlzZWQgcnViYmVyIGJhbmQgZHJhZ2dpbmcgb2YgbGluZXMgYXR0YWNo
ZWQgb2JqZWN0cy4gIEF0DQorCSB0aGUgc3RhcnQgc3RhcnQgb2YgdGhpcyBjb2RlIHdlIGhhdmUg
YSBub24tNDUgbGluZSAnQScgYmV0d2Vlbg0KKwkgcDEtcDMuIEF0IHRoZSBlbmQgb2YgdGhpcyBj
b2RlIHdlIHdhbnQgc29tZXRoaW5nIGxpa2U6DQorDQorDQorCSAgICAgIHAyX19fX19fX19wMw0K
KwkgICAgIC8gICAgQQ0KKwkgICAgL0INCisgICAgICAgICAgIC8NCisJIHAxDQorDQorCSBUbyBt
YWtlIG5pY2UgYW5nbGVzIHdlIG5lZWQgYW4gdHdvIGxpbmVzLiAgSWYgQSBpcyBhbHJlYWR5DQor
CSBhdHRhY2hlZCB0byBhbm90aGVyIGxpbmUgd2UgdXNlIHRoYXQgYXMgQi4gIElmIEEgaXMgbm90
DQorCSBhdHRhY2hlZCB3ZSBjcmVhdGUgYSBsaW5lLg0KKw0KKwkgU28gdGhlIHN0ZXBzIGFyZSAo
aSkgZmluZCBvciBjcmVhdGUgQiAoaWkpIGRldGVybWluZSBwMiBhbmQNCisJIChpaWkpIG1vdmUg
QiB0byBwMS1wMiwgYW5kIEEgdG8gcDItcDMuDQorDQorCSBUaGVyZSBhcmUgYWN0dWFsbHkgbG90
cyBvZiB3YXlzIHRvIHJvdXRlIGxpbmVzIGJldHdlZW4gcDENCisJIGFuZCBwMyB1c2luZyBhbiBp
bnRlcm1lZGlhdGUgcG9pbnQgcDIuICBJZiB3ZSB3YW50ZWQgdG8NCisJIGJlIHJlYWxseSBjbGV2
ZXIgd2UgY291bGQgdGVzdCBpZiBCIGFuZCBBIHRvdWNoIGFueSBvdGhlcg0KKwkgb2JqZWN0cywg
aWYgc28gdHJ5IHNvbWUgb3RoZXIgcm91dGluZyBtZXRob2RzLg0KKyAgICAgICovDQorDQorICAg
ICAgbiA9IENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kTjsNCisgICAgICBwdHIg
PSBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZDsNCisgICAgICB3aGlsZShuKSB7
DQorCVBvaW50VHlwZSBwMSwgcDIsIHAzOw0KKwlQb2ludFR5cGVQdHIgbGluZUFfcDIsIGxpbmVC
X3AyOyAvKiBpbml0YWwgcDIgcG9pbnRzIGJlZm9yZSBtb3ZlICovDQorCUxpbmVUeXBlUHRyIGxp
bmVBID0gcHRyLT5MaW5lOw0KKwlMaW5lVHlwZVB0ciBsaW5lQjsNCisJQ29vcmQgZFgsIGRZOw0K
KwlpbnQgaWdub3JlOw0KKwlQaW5UeXBlIHBpbjsNCisNCisJaWdub3JlID0gMDsNCisNCisJZHBy
aW50ZigiICBMaW5lIGF0dGFjaGVkIHRvIGFuIG9iamVjdCAlZC0tLS0tLS0tLS0tLS0tLVxuIiwg
bik7DQorDQorCWlmICghVEVTVF9GTEFHIChSVUJCRVJCQU5ERkxBRywgUENCKSkNCisJICBpZ25v
cmUgPSAxOw0KKwlpZiAoVEVTVF9GTEFHIChBTExESVJFQ1RJT05TUlVCQkVSQkFOREZMQUcsIFBD
QikpDQorCSAgaWdub3JlID0gMTsNCisNCisJLyogaWdub3JlIGFueSB4ZXJvIGxlbmd0aCBvYmpl
Y3RzICovDQorDQorCWlmICgobGluZUEtPlBvaW50MS5YID09IGxpbmVBLT5Qb2ludDIuWCkgJiYN
CisJICAgIChsaW5lQS0+UG9pbnQxLlkgPT0gbGluZUEtPlBvaW50Mi5ZKSkNCisJICBpZ25vcmUg
PSAxOw0KKw0KKwlpZiAoIWlnbm9yZSkgew0KKw0KKwkgIC8qIG1hcCBjdXJyZW50IHBvaW50cyBh
dCBlbmQgb2YgbGluZSB0byBvdXIgbW9kZWwgKi8NCisNCisJICBpZiAoKHB0ci0+TW92ZWRQb2lu
dC0+WCA9PSBsaW5lQS0+UG9pbnQxLlgpICYmDQorCSAgICAgIChwdHItPk1vdmVkUG9pbnQtPlkg
PT0gbGluZUEtPlBvaW50MS5ZKSkNCisJICAgIHsNCisJICAgICAgcDMgPSBsaW5lQS0+UG9pbnQx
Ow0KKwkgICAgICBsaW5lQV9wMiA9ICZsaW5lQS0+UG9pbnQyOw0KKwkgICAgfQ0KKwkgIGVsc2UN
CisJICAgIHsNCisJICAgICAgbGluZUFfcDIgPSAmbGluZUEtPlBvaW50MTsNCisJICAgICAgcDMg
PSBsaW5lQS0+UG9pbnQyOw0KKwkgICAgfQ0KKw0KKwkgIGRwcmludGYoIiAgICBJbml0aWFsIGxp
bmVBXG4iKTsNCisJICBkcHJpbnRmKCIgICAgICBwMy5YID0gJWQgIHAzLlkgPSAlZFxuIiwgcDMu
WCwgcDMuWSk7DQorCSAgZHByaW50ZigiICAgICAgcDIuWCA9ICVkICBwMi5ZID0gJWRcbiIsIGxp
bmVBX3AyLT5YLCBsaW5lQV9wMi0+WSk7DQorDQorCSAgLyogbm93IGxldHMgZmluZC9jcmVhdGUg
bGluZSBCICAqLw0KKw0KKwkgIGlmICgobGluZUIgPSBGaW5kTGluZUF0dGFjaGVkVG9Qb2ludCAo
cHRyLT5MYXllciwgbGluZUEsIGxpbmVBX3AyKSkNCisJICAgICAgIT0gTlVMTCkNCisJICAgIHsN
CisJICAgICAgZHByaW50ZigiICAgIGxpbmVCIGZvdW5kIVxuIik7DQorCSAgICAgIGlmICgobGlu
ZUFfcDItPlggPT0gbGluZUItPlBvaW50MS5YKSAmJg0KKwkJICAobGluZUFfcDItPlkgPT0gbGlu
ZUItPlBvaW50MS5ZKSkNCisJCXsNCisJCSAgcDEgPSBsaW5lQi0+UG9pbnQyOw0KKwkJICBsaW5l
Ql9wMiA9ICZsaW5lQi0+UG9pbnQxOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIHAx
ID0gbGluZUItPlBvaW50MTsNCisJCSAgbGluZUJfcDIgPSAmbGluZUItPlBvaW50MjsNCisJCX0N
CisJICAgIH0NCisJICBlbHNlDQorCSAgICB7DQorCSAgICAgIC8qIE5vIGF0dGFjaGVkIGxpbmUg
Zm91bmQsIGxldHMgY3JlYXRlIG9uZSwgY29vcmRzIGRvbnQgbWF0dGVyDQorCQkgZm9yIG5vdyBh
cyBpdCB3aWxsIGJlIG1vdmVkIHNob3J0bHkgKi8NCisNCisJICAgICAgZHByaW50ZigiICAgIGxp
bmVCIGNyZWF0ZWQhXG4iKTsNCisJICAgICAgbGluZUIgPSBDcmVhdGVOZXdMaW5lT25MYXllciAo
cHRyLT5MYXllciwNCisJCQkJCSAgICBsaW5lQV9wMi0+WCwNCisJCQkJCSAgICBsaW5lQV9wMi0+
WSwgcDMuWCwgcDMuWSwNCisJCQkJCSAgICBsaW5lQS0+VGhpY2tuZXNzLA0KKwkJCQkJICAgIDIg
KiBsaW5lQS0+Q2xlYXJhbmNlLA0KKwkJCQkJICAgIGxpbmVBLT5GbGFncyk7DQorCSAgICAgIEFk
ZE9iamVjdFRvQ3JlYXRlVW5kb0xpc3QgKExJTkVfVFlQRSwgQ1VSUkVOVCwgbGluZUIsIGxpbmVC
KTsNCisJICAgICAgcDEuWCA9IGxpbmVBX3AyLT5YOyBwMS5ZID0gbGluZUFfcDItPlk7DQorCSAg
ICAgIGxpbmVCX3AyID0gJmxpbmVCLT5Qb2ludDI7DQorCSAgICB9DQorDQorCSAgZHByaW50Zigi
ICAgIEluaXRpYWwgbGluZUJcbiIpOw0KKwkgIGRwcmludGYoIiAgICAgIHAxLlggPSAlZCAgcDEu
WSA9ICVkXG4iLCBwMS5YLCBwMS5ZKTsNCisJICBkcHJpbnRmKCIgICAgICBwMi5YID0gJWQgIHAy
LlkgPSAlZFxuIiwgbGluZUJfcDItPlgsIGxpbmVCX3AyLT5ZKTsNCisNCisJICAvKiBPSywgd2Ug
bm93IGhhdmUgbGluZUEgYW5kIGxpbmVCLCBwMSwgYW5kIHAzIGFyZSBzZXQsIG5lZWQgdG8NCisJ
ICAgICBkZXRlcm1pbmUgcDIgc3VjaCB0aGF0IHdlIGFyZSByb3V0aW5nIGxpbmVzIGF0IDQ1IGRl
Zy4gKi8NCisNCisJICBkWSA9IGFicyhwMy5ZIC0gcDEuWSk7DQorCSAgZFggPSBhYnMocDMuWCAt
IHAxLlgpOw0KKwkgIGRwcmludGYoIiAgICBGaW5hbCBkWCA9ICVkICBkWSA9ICVkXG4iLCBkWCwg
ZFkpOw0KKw0KKwkgIGlmIChkWCA8IGRZKSB7DQorCSAgICBwMi5YID0gcDEuWCArIFNHTihwMy5Y
IC0gcDEuWCkqZFg7DQorCSAgICBwMi5ZID0gcDEuWSArIFNHTihwMy5ZIC0gcDEuWSkqZFg7DQor
CSAgfQ0KKwkgIGVsc2Ugew0KKwkgICAgcDIuWCA9IHAxLlggKyBTR04ocDMuWCAtIHAxLlgpKmRZ
Ow0KKwkgICAgcDIuWSA9IHAxLlkgKyBTR04ocDMuWSAtIHAxLlkpKmRZOw0KKwkgIH0NCisNCisJ
ICBkcHJpbnRmKCIgICAgTmV3IHAyOlxuIik7DQorCSAgZHByaW50ZigiICAgICAgcDIuWCA9ICVk
ICBwMi5ZID0gJWRcbiIsIHAyLlgsIHAyLlkpOw0KKw0KKwkgIC8qIE1vdmUgbGluZUEgc28gaXQg
c3RhcnRzIGF0IHAyICovDQorDQorCSAgRGVsdGFYID0gcDIuWCAtIGxpbmVBX3AyLT5YOyBEZWx0
YVkgPSBwMi5ZIC0gbGluZUFfcDItPlk7DQorCSAgZHByaW50ZigiICAgIGxpbmVBOlxuIik7DQor
CSAgZHByaW50ZigiICAgICAgRGVsdGFYID0gJWQgICBEZWx0YVkgPSAlZFxuIiwgRGVsdGFYLCAg
RGVsdGFZKTsNCisJICBBZGRPYmplY3RUb01vdmVVbmRvTGlzdCAoTElORVBPSU5UX1RZUEUsDQor
CQkJCSAgIHB0ci0+TGF5ZXIsIGxpbmVBLCBsaW5lQV9wMiwgRGVsdGFYLA0KKwkJCQkgICBEZWx0
YVkpOw0KKwkgIE1vdmVMaW5lUG9pbnQgKHB0ci0+TGF5ZXIsIGxpbmVBLCBsaW5lQV9wMik7DQor
DQorCSAgLyogTW92ZSBsaW5lQiBzbyBpdCBlbmRzIGF0IHAyICovDQorDQorCSAgRGVsdGFYID0g
cDIuWCAtIGxpbmVCX3AyLT5YOyBEZWx0YVkgPSBwMi5ZIC0gbGluZUJfcDItPlk7DQorCSAgZHBy
aW50ZigiICAgIGxpbmVCOlxuIik7DQorCSAgZHByaW50ZigiICAgICAgRGVsdGFYID0gJWQgICBE
ZWx0YVkgPSAlZFxuIiwgRGVsdGFYLCAgRGVsdGFZKTsNCisJICBBZGRPYmplY3RUb01vdmVVbmRv
TGlzdCAoTElORVBPSU5UX1RZUEUsDQorCQkJCSAgIHB0ci0+TGF5ZXIsIGxpbmVCLCBsaW5lQl9w
MiwgRGVsdGFYLA0KKwkJCQkgICBEZWx0YVkpOw0KKwkgIE1vdmVMaW5lUG9pbnQgKHB0ci0+TGF5
ZXIsIGxpbmVCLCBsaW5lQl9wMik7DQorCX0NCisNCisJLyogbmV4dCBhdHRhY2hlZCBsaW5lIHRv
IG9iamVjdCAqLw0KKw0KKyAgICAgICAgcHRyKys7DQorCW4tLTsNCisgICAgICB9DQorICAgIH0N
CisgIH0NCisNCisgIC8qIGZpbmFsIGxvb3AgdG8gcmVzZXQgY291bnRlciBhbmQgY2xlYXIgZmxh
Z3MgKi8NCisNCisgIHB0ciA9IENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kOw0K
KyAgbiA9IENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kTjsNCisgIHdoaWxlIChu
KQ0KKyAgICB7DQorICAgICAgTGluZVR5cGVQdHIgbGluZSA9IChMaW5lVHlwZVB0cilwdHItPkxp
bmU7DQorICAgICAgQ0xFQVJfRkxBRyAoUlVCQkVSRU5ERkxBRywgcHRyLT5MaW5lKTsNCisgICAg
ICBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZE4tLTsNCisNCisgICAgICAvKiBj
bGVhbiB1cCAtIGRlbGV0ZSBhbnkgemVybyBsZW5ndGggbGluZXMgKi8NCisNCisgICAgICBpZiAo
KGxpbmUtPlBvaW50MS5YID09IGxpbmUtPlBvaW50Mi5YKSAmJg0KKwkgIChsaW5lLT5Qb2ludDEu
WSA9PSBsaW5lLT5Qb2ludDIuWSkpDQorCXsNCisJICBSZW1vdmVMaW5lIChwdHItPkxheWVyLCBs
aW5lKTsNCisJfQ0KKw0KKyAgICAgIG4tLTsNCisgICAgICBwdHIrKzsNCisgICAgfQ0KKw0KICAg
SW5jcmVtZW50VW5kb1NlcmlhbE51bWJlciAoKTsNCiAgIHJldHVybiAocHRyMik7DQogfQ0KZGlm
ZiAtLWdpdCBhL3NyYy9wY2ItbWVudS5yZXMuaW4gYi9zcmMvcGNiLW1lbnUucmVzLmluDQppbmRl
eCA3ZTZlOGJkLi42ZWJiMGQzIDEwMDY0NA0KLS0tIGEvc3JjL3BjYi1tZW51LnJlcy5pbg0KKysr
IGIvc3JjL3BjYi1tZW51LnJlcy5pbg0KQEAgLTE5Nyw2ICsxOTcsNyBAQCBNYWluTWVudSA9DQog
ICAgeyJBdXRvIGVuZm9yY2UgRFJDIGNsZWFyYW5jZSIgY2hlY2tlZD1hdXRvZHJjIERpc3BsYXko
VG9nZ2xlQXV0b0RSQyl9DQogICAgLQ0KICAgIHsiUnViYmVyIGJhbmQgbW9kZSIgY2hlY2tlZD1y
dWJiZXJiYW5kIERpc3BsYXkoVG9nZ2xlUnViYmVyQmFuZE1vZGUpfQ0KKyAgIHsiQWxsIERpcmVj
dGlvbnMgUnViYmVyIGJhbmQgbW9kZSIgY2hlY2tlZD1hbGxkaXJlY3Rpb25zcnViYmVyYmFuZCBE
aXNwbGF5KFRvZ2dsZUFsbERpcmVjdGlvbnNSdWJiZXJCYW5kTW9kZSl9DQogICAgeyJSZXF1aXJl
IHVuaXF1ZSBlbGVtZW50IG5hbWVzIiBjaGVja2VkPXVuaXF1ZW5hbWUgRGlzcGxheShUb2dnbGVV
bmlxdWVOYW1lcyl9DQogICAgeyJBdXRvLXplcm8gZGVsdGEgbWVhc3VyZW1lbnRzIiBjaGVja2Vk
PWxvY2FscmVmIERpc3BsYXkoVG9nZ2xlTG9jYWxSZWYpfQ0KICAgIHsiTmV3IGxpbmVzLCBhcmNz
IGNsZWFyIHBvbHlnb25zIiBjaGVja2VkPWNsZWFybmV3IERpc3BsYXkoVG9nZ2xlQ2xlYXJMaW5l
KX0NCmRpZmYgLS1naXQgYS9zcmMvcnViYmVyYmFuZC5jIGIvc3JjL3J1YmJlcmJhbmQuYw0KaW5k
ZXggNGZlMTY2Yy4uNTQ0ZWZkOCAxMDA2NDQNCi0tLSBhL3NyYy9ydWJiZXJiYW5kLmMNCisrKyBi
L3NyYy9ydWJiZXJiYW5kLmMNCkBAIC0zNCw2ICszNCw3IEBADQogI2luY2x1ZGUgImNvbmZpZy5o
Ig0KICNlbmRpZg0KIA0KKyNpbmNsdWRlIDxtYXRoLmg+DQogI2luY2x1ZGUgPHN0ZGxpYi5oPg0K
ICNpZmRlZiBIQVZFX1NUUklOR19IDQogI2luY2x1ZGUgPHN0cmluZy5oPg0KQEAgLTYxLDYgKzYy
LDcgQEANCiANCiBSQ1NJRCAoIiRJZCQiKTsNCiANCisjZGVmaW5lIGRwcmludGYgaWYgKDApIHBy
aW50Zg0KIA0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAqIHNvbWUgbG9jYWwgcHJvdG90eXBl
cw0KQEAgLTc1LDYgKzc3LDggQEAgc3RhdGljIHZvaWQgQ2hlY2tQb2x5Z29uRm9yUnViYmVyYmFu
ZENvbm5lY3Rpb24gKExheWVyVHlwZVB0ciwNCiAJCQkJCQkgUG9seWdvblR5cGVQdHIpOw0KIHN0
YXRpYyB2b2lkIENoZWNrTGluZVBvaW50Rm9yUmF0IChMYXllclR5cGVQdHIsIFBvaW50VHlwZVB0
cik7DQogc3RhdGljIGludCBydWJiZXJfY2FsbGJhY2sgKGNvbnN0IEJveFR5cGUgKiBiLCB2b2lk
ICpjbCk7DQorc3RhdGljIGludCByYl9zaWduKENvb3JkIHgpOw0KK3N0YXRpYyBpbnQgTGluZUF0
dGFjaGVkQ2FsbGJhY2sgKGNvbnN0IEJveFR5cGUgKiBiLCB2b2lkICpjbCk7DQogDQogc3RydWN0
IHJ1YmJlcl9pbmZvDQogew0KQEAgLTg1LDYgKzg5LDE3IEBAIHN0cnVjdCBydWJiZXJfaW5mbw0K
ICAgTGF5ZXJUeXBlUHRyIGxheWVyOw0KIH07DQogDQorc3RydWN0IEF0dGFjaGVkSW5mbw0KK3sN
CisgIGludCByYWRpdXM7DQorICBDb29yZCBYLCBZOw0KKyAgTGluZVR5cGVQdHIgIGxpbmU7DQor
ICBCb3hUeXBlICAgICAgYm94Ow0KKyAgTGF5ZXJUeXBlUHRyIGxheWVyOw0KKyAgaW50ICAgICAg
ICAgIG5BdHRhY2hlZDsNCisgIExpbmVUeXBlUHRyICBBdHRhY2hlZExpbmU7DQorfTsNCisNCiBz
dGF0aWMgaW50DQogcnViYmVyX2NhbGxiYWNrIChjb25zdCBCb3hUeXBlICogYiwgdm9pZCAqY2wp
DQogew0KQEAgLTU4MywzICs1OTgsNDA0IEBAIExvb2t1cFJhdExpbmVzIChpbnQgVHlwZSwgdm9p
ZCAqUHRyMSwgdm9pZCAqUHRyMiwgdm9pZCAqUHRyMykNCiAgICAgICBicmVhazsNCiAgICAgfQ0K
IH0NCisNCisvKiBjZW50cmUgemVybyBydWJiZXIgYmFuZCBzaWduIGZ1bmN0aW9uICovDQorDQor
aW50DQorcmJzZ24oQ29vcmQgeCkNCit7DQorICBpZiAoeCA+IDApIHJldHVybiAgMTsNCisgIGlm
ICh4IDwgMCkgcmV0dXJuIC0xOw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludA0KK0lzSG9yaXpv
bnRhbChMaW5lVHlwZVB0ciBMaW5lKQ0KK3sNCisgIGlmIChMaW5lLT5Qb2ludDEuWSA9PSBMaW5l
LT5Qb2ludDIuWSkNCisgICAgcmV0dXJuIDE7DQorICBlbHNlDQorICAgIHJldHVybiAwOw0KK30N
CisNCitpbnQNCitJc1ZlcnRpY2FsKExpbmVUeXBlUHRyIExpbmUpDQorew0KKyAgaWYgKExpbmUt
PlBvaW50MS5YID09IExpbmUtPlBvaW50Mi5YKQ0KKyAgICByZXR1cm4gMTsNCisgIGVsc2UNCisg
ICAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludA0KK0lzRGlhZ29uYWwoTGluZVR5cGVQdHIgTGluZSkN
Cit7DQorICBpZiAoIShJc0hvcml6b250YWwoTGluZSkgfHwgSXNWZXJ0aWNhbChMaW5lKSkpDQor
ICAgIHJldHVybiAxOw0KKyAgZWxzZQ0KKyAgICByZXR1cm4gMDsNCit9DQorDQordm9pZA0KK01v
dmVQb2ludEdpdmVuUnViYmVyQmFuZE1vZGUoUG9pbnRUeXBlUHRyIFBvaW50T3V0LA0KKwkJCSAg
ICBQb2ludFR5cGVQdHIgUG9pbnQsDQorCQkJICAgIExpbmVUeXBlUHRyIExpbmUsDQorCQkJICAg
IENvb3JkIGR4LA0KKwkJCSAgICBDb29yZCBkeSwNCisJCQkgICAgaW50IFR5cGUsDQorCQkJICAg
IGludCBEaWFnb25hbCkNCit7DQorICBQb2ludFR5cGVQdHIgcG9pbnQxLCBwb2ludDI7DQorDQor
ICBkcHJpbnRmKCJNb3ZlUG9pbnRHaXZlblJ1YmJlckJhbmRNb2RlXG4iKTsNCisNCisgIC8qIGRl
ZmF1bHQgbW92ZSAqLw0KKw0KKyAgbWVtbW92ZShQb2ludE91dCwgUG9pbnQsIHNpemVvZihQb2lu
dFR5cGUpKTsNCisgIFBvaW50T3V0LT5YICs9IGR4Ow0KKyAgUG9pbnRPdXQtPlkgKz0gZHk7DQor
DQorICAvKiByZXR1cm4gZGVmYXVsdCB3aGVuIHJ1YmJlcmJhbmQgbW9kZSBvZmYgKi8NCisNCisg
IGlmICghVEVTVF9GTEFHIChSVUJCRVJCQU5ERkxBRywgUENCKSkgew0KKyAgICByZXR1cm47DQor
ICB9DQorDQorICAvKiBvciB3aGVuIGluIHJ1YmJlciBiYW5kIG1vZGUgYW5kIGFsbCBkaXJlY3Rp
b25zIGVuYWJsZWQgKi8NCisNCisgIGlmIChURVNUX0ZMQUcgKEFMTERJUkVDVElPTlNSVUJCRVJC
QU5ERkxBRywgUENCKSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICAvKiBvciBpZiB0aGUg
b2JqZWN0IGJlaW5nIG1vdmVkIGlzIG5vdCBhIGxpbmUsIGFzIHdlIGNhbid0IGhhbmRsZQ0KKyAg
ICAgZ2VuZXJhbCBvYmplY3RzICh5ZXQpLCBvbmx5IGxpbmVzICovDQorDQorICBpZiAoVHlwZSAh
PSBMSU5FX1RZUEUpDQorICAgIHJldHVybjsNCisNCisgIC8qIG9yIGlmIHRoaXMgbGluZSBpcyBu
b3QgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCwgd2UgZG9udCBoYW5kbGUNCisgICAgIGRpYWdvbmFs
cyAqLw0KKw0KKyAgaWYgKERpYWdvbmFsKQ0KKyAgICByZXR1cm47DQorDQorICAvKg0KKyAgICAg
RGV0ZXJtaW5lOg0KKyAgICAgICAtIHBvaW50MSBpcyB0aGUgZml4ZWQgcG9pbnQgb2YgdGhlIGF0
dGFjaGVkIGxpbmUNCisgICAgICAgLSBwb2ludDIgaXMgd2hlcmUgdGhlIGF0dGFjaGVkIGxpbmUg
YW5kIGxpbmUgYmVpbmcgbW92ZWQgam9pbg0KKyAgKi8NCisNCisgIGlmICgoUG9pbnQtPlggPT0g
TGluZS0+UG9pbnQxLlgpICYmIChQb2ludC0+WSA9PSBMaW5lLT5Qb2ludDIuWSkpDQorICAgIHsN
CisgICAgICBwb2ludDEgPSAmTGluZS0+UG9pbnQyOw0KKyAgICAgIHBvaW50MiA9ICZMaW5lLT5Q
b2ludDE7DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIHBvaW50MSA9ICZMaW5lLT5Q
b2ludDE7DQorICAgICAgcG9pbnQyID0gJkxpbmUtPlBvaW50MjsNCisgICAgfQ0KKw0KKyAgLyog
VGhlbiBhZGp1c3QgYWNjb3JkaW5nIHRvIHJlbGF0aXZlIGRpcmVjdGlvbiBvZiBqb2luZWQgbGlu
ZXMgKi8NCisNCisgIGRwcmludGYoIiAgZHg6ICVkIGR5IDogJWRcbiIsIGR4LCBkeSk7DQorICBk
cHJpbnRmKCIgIHBvaW50Mi0+WCAlZCBwb2ludDEtPlggJWQgY29ycjogJWRcbiIsIHBvaW50Mi0+
WCwgcG9pbnQxLT5YLA0KKwkgICBkeCpyYnNnbihwb2ludDItPlggLSBwb2ludDEtPlgpKTsNCisg
IGRwcmludGYoIiAgcG9pbnQyLT5ZICVkIHBvaW50MS0+WSAlZCBjb3JyOiAlZFxuIiwgcG9pbnQy
LT5ZLCBwb2ludDEtPlksDQorCSAgZHgqcmJzZ24ocG9pbnQyLT5ZIC0gcG9pbnQxLT5ZKSk7DQor
ICBkcHJpbnRmKCIgQmVmb3JlOiBQb2ludDEtPlggJWQgUG9pbnQxLT5ZICVkXG4iLCBQb2ludE91
dC0+WCwNCisJICBQb2ludE91dC0+WSk7DQorDQorICAvKiBJIGFtIHN1cmUgdGhlcmUgaXMgc29t
ZSBlbGVnYW50IG1hdHJpeCBhbGdlYnJhIGdvaW5nIG9uIGhlcmUsIGJ1dA0KKyAgICAgSSB1c2Vk
IHRoZSAiZ2V0IHNvbWV0aGluZyBzaW1wbGUgZ29pbmcgYW5kIGl0ZXJhdGUiIGFsZ29yaXRobSwN
CisgICAgIGFuZCBieSBsb3RzIG9mIHNjcmliYmxpbmcgb2YgYmVudCBsaW5lcyBvbiBwYXBlciEg
Ki8NCisNCisgIFBvaW50T3V0LT5ZICs9IGR4KnJic2duKHBvaW50Mi0+WCAtIHBvaW50MS0+WCkq
cmJzZ24ocG9pbnQyLT5ZIC0gcG9pbnQxLT5ZKTsNCisgIFBvaW50T3V0LT5YICs9IGR5KnJic2du
KHBvaW50Mi0+WSAtIHBvaW50MS0+WSkqcmJzZ24ocG9pbnQyLT5YIC0gcG9pbnQxLT5YKTsNCisN
CisgICNpZmRlZiBSVUJCRVJfREVCVUcNCisgIGRwcmludGYoIiBBZnRlci46IFBvaW50T3V0LT5Y
ICVkIFBvaW50T3V0LT5ZICVkXG4iLCBQb2ludE91dC0+WCwNCisJICBQb2ludE91dC0+WSk7DQor
ICAjZW5kaWYNCit9DQorDQorDQordm9pZA0KK01vdmVMaW5lR2l2ZW5SdWJiZXJCYW5kTW9kZShM
aW5lVHlwZVB0ciBMaW5lT3V0LA0KKwkJCSAgICBMaW5lVHlwZVB0ciBMaW5lLA0KKwkJCSAgICBD
b29yZCBkeCwNCisJCQkgICAgQ29vcmQgZHksDQorCQkJICAgIENyb3NzaGFpclR5cGUgQ3Jvc3NI
YWlyDQorKQ0KK3sNCisgIFBvaW50VHlwZVB0ciBwb2ludDEsIHBvaW50MiwgbnVkZ2U7DQorICBS
dWJiZXJiYW5kVHlwZVB0ciBBdHRhY2hlZExpbmU7DQorICBpbnQgbjsNCisNCisgIGRwcmludGYo
Ik1vdmVMaW5lR2l2ZW5SdWJiZXJCYW5kTW9kZVxuIik7DQorICBkcHJpbnRmKCIgIGR4OiAlZCBk
eSA6ICVkXG4iLCBkeCwgZHkpOw0KKw0KKyAgLyogZGVmYXVsdCBtb3ZlICovDQorDQorICBtZW1t
b3ZlKExpbmVPdXQsIExpbmUsIHNpemVvZihMaW5lVHlwZSkpOw0KKyAgTGluZU91dC0+UG9pbnQx
LlggKz0gZHg7DQorICBMaW5lT3V0LT5Qb2ludDEuWSArPSBkeTsNCisgIExpbmVPdXQtPlBvaW50
Mi5YICs9IGR4Ow0KKyAgTGluZU91dC0+UG9pbnQyLlkgKz0gZHk7DQorDQorICAvKiByZXR1cm4g
ZGVmYXVsdCB3aGVuIHJ1YmJlcmJhbmQgbW9kZSBvZmYgKi8NCisNCisgIGlmICghVEVTVF9GTEFH
IChSVUJCRVJCQU5ERkxBRywgUENCKSkgew0KKyAgICByZXR1cm47DQorICB9DQorDQorICAvKiBv
ciB3aGVuIGluIHJ1YmJlciBiYW5kIG1vZGUgYW5kIGFsbCBkaXJlY3Rpb25zIGVuYWJsZWQgKi8N
CisNCisgIGlmIChURVNUX0ZMQUcgKEFMTERJUkVDVElPTlNSVUJCRVJCQU5ERkxBRywgUENCKSkg
ew0KKyAgICByZXR1cm47DQorICB9DQorDQorICAvKiBvciBpZiB0aGlzIGxpbmUgaXMgbm90IGhv
cml6b250YWwgb3IgdmVydGljYWwsIHdlIGRvbnQgaGFuZGxlDQorICAgICBkaWFnb25hbHMgKi8N
CisNCisgIGlmIChJc0RpYWdvbmFsKExpbmUpKQ0KKyAgICByZXR1cm47DQorDQorICAvKiB3ZSBz
aG91bGQgcmV0dXJuIHVubGVzcyB0aGVyZSBhcmUgYXR0YWNoZWQgbGluZXMgKi8NCisNCisgIGlm
KENyb3NzaGFpci5BdHRhY2hlZE9iamVjdC5SdWJiZXJiYW5kTiA9PSAwKQ0KKyAgICByZXR1cm47
DQorDQorICBkcHJpbnRmKCIgICAgTGluZS0+UG9pbnQxLlggPSAlZFxuIiwgTGluZS0+UG9pbnQx
LlgpOw0KKyAgZHByaW50ZigiICAgIExpbmUtPlBvaW50MS5ZID0gJWRcbiIsIExpbmUtPlBvaW50
MS5ZICk7DQorICBkcHJpbnRmKCIgICAgTGluZS0+UG9pbnQyLlggPSAlZFxuIiwgTGluZS0+UG9p
bnQyLlgpOw0KKyAgZHByaW50ZigiICAgIExpbmUtPlBvaW50Mi5ZID0gJWRcbiIsIExpbmUtPlBv
aW50Mi5ZKTsNCisNCisgIG4gPSBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZE47
DQorICBBdHRhY2hlZExpbmUgPSBDcm9zc2hhaXIuQXR0YWNoZWRPYmplY3QuUnViYmVyYmFuZDsN
CisgIHdoaWxlKG4pIHsNCisgICAgZHByaW50ZigiICAlZCBhdHRhY2hlZCBMaW5lc1xuIiwgbik7
DQorDQorICAgIC8qDQorICAgICAgIERldGVybWluZToNCisgICAgICAgLSBwb2ludDEgaXMgdGhl
IGZpeGVkIHBvaW50IG9mIHRoZSBhdHRhY2hlZCBsaW5lDQorICAgICAgIC0gcG9pbnQyIGlzIHdo
ZXJlIHRoZSBhdHRhY2hlZCBsaW5lIGFuZCBsaW5lIGJlaW5nIG1vdmVkIGpvaW4NCisgICAgKi8N
CisNCisgICAgaWYgKEF0dGFjaGVkTGluZS0+TW92ZWRQb2ludCA9PSAmQXR0YWNoZWRMaW5lLT5M
aW5lLT5Qb2ludDEpDQorICAgICAgew0KKwlwb2ludDEgPSAmQXR0YWNoZWRMaW5lLT5MaW5lLT5Q
b2ludDI7DQorCXBvaW50MiA9ICZBdHRhY2hlZExpbmUtPkxpbmUtPlBvaW50MTsNCisgICAgICB9
DQorICAgIGVsc2UNCisgICAgICB7DQorCXBvaW50MSA9ICZBdHRhY2hlZExpbmUtPkxpbmUtPlBv
aW50MTsNCisJcG9pbnQyID0gJkF0dGFjaGVkTGluZS0+TGluZS0+UG9pbnQyOw0KKyAgICAgIH0N
CisNCisgICAgLyogd29yayBvdXQgd2hpY2ggcG9pbnQgb2YgbW92ZWQgbGluZSB0byBudWRnZSAq
Lw0KKw0KKyAgICBkcHJpbnRmKCIgICAgTW92ZWRQb2ludC5YICAgPSAlZFxuIiwgQXR0YWNoZWRM
aW5lLT5Nb3ZlZFBvaW50LT5YKTsNCisgICAgZHByaW50ZigiICAgIE1vdmVkUG9pbnQuWSAgID0g
JWRcbiIsIEF0dGFjaGVkTGluZS0+TW92ZWRQb2ludC0+WSk7DQorICAgIGRwcmludGYoIiAgICBw
b2ludDItPlkgICAgICA9ICVkXG4iLCBwb2ludDItPlkpOw0KKyAgICBkcHJpbnRmKCIgICAgcG9p
bnQyLT5YICAgICAgPSAlZFxuIiwgcG9pbnQyLT5YKTsNCisgICAgZHByaW50ZigiICAgIHBvaW50
Mi0+WSAgICAgID0gJWRcbiIsIHBvaW50Mi0+WSk7DQorDQorICAgIGlmICgocG9pbnQyLT5YID09
IExpbmUtPlBvaW50MS5YKSAmJiAocG9pbnQyLT5ZID09IExpbmUtPlBvaW50MS5ZKSkgew0KKyAg
ICAgIG51ZGdlID0gJkxpbmVPdXQtPlBvaW50MTsNCisgICAgICBkcHJpbnRmKCIgICAgbnVkZ2Ug
cG9pbnQxXG4iKTsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisgICAgICBkcHJpbnRmKCIgICAgbnVk
Z2UgcG9pbnQyXG4iKTsNCisgICAgICBudWRnZSA9ICZMaW5lT3V0LT5Qb2ludDI7DQorICAgIH0N
CisNCisgICAgLyogVGhlbiBhZGp1c3QgdG8gcHJlc2VydmUgNDUgZGVnIGFuZ2xlcyAqLw0KKw0K
KyAgICBudWRnZS0+WSArPSBkeCpyYnNnbihwb2ludDItPlggLSBwb2ludDEtPlgpKnJic2duKHBv
aW50Mi0+WSAtIHBvaW50MS0+WSk7DQorICAgIG51ZGdlLT5YICs9IGR5KnJic2duKHBvaW50Mi0+
WSAtIHBvaW50MS0+WSkqcmJzZ24ocG9pbnQyLT5YIC0gcG9pbnQxLT5YKTsNCisNCisgICAgQXR0
YWNoZWRMaW5lKys7DQorICAgIG4tLTsNCisgIH0NCit9DQorDQordm9pZCBSZXN0cmljdE1vdmVt
ZW50R2l2ZW5SdWJiZXJCYW5kTW9kZShMaW5lVHlwZVB0ciBMaW5lLA0KKwkJCQkJIENvb3JkICpk
eCwNCisJCQkJCSBDb29yZCAqZHkpDQorew0KKyAgLyogcmV0dXJuIGRlZmF1bHQgd2hlbiBydWJi
ZXJiYW5kIG1vZGUgb2ZmICovDQorDQorICBpZiAoIVRFU1RfRkxBRyAoUlVCQkVSQkFOREZMQUcs
IFBDQikpIHsNCisgICAgcmV0dXJuOw0KKyAgfQ0KKw0KKyAgLyogb3Igd2hlbiBpbiBydWJiZXIg
YmFuZCBtb2RlIGFuZCBhbGwgZGlyZWN0aW9ucyBlbmFibGVkICovDQorDQorICBpZiAoVEVTVF9G
TEFHIChBTExESVJFQ1RJT05TUlVCQkVSQkFOREZMQUcsIFBDQikpIHsNCisgICAgcmV0dXJuOw0K
KyAgfQ0KKw0KKyAgaWYgKElzSG9yaXpvbnRhbChMaW5lKSkgKmR4ID0gMDsNCisgIGlmIChJc1Zl
cnRpY2FsKExpbmUpKSAqZHkgPSAwOw0KK30NCisNCitzdGF0aWMgaW50DQorTGluZUF0dGFjaGVk
Q2FsbGJhY2sgKGNvbnN0IEJveFR5cGUgKiBiLCB2b2lkICpjbCkNCit7DQorICBMaW5lVHlwZVB0
ciBsaW5lID0gKExpbmVUeXBlUHRyKSBiOw0KKyAgc3RydWN0IEF0dGFjaGVkSW5mbyAqaW5mbyA9
IChzdHJ1Y3QgQXR0YWNoZWRJbmZvICopIGNsOw0KKw0KKyAgZHByaW50ZigiICBMaW5lQXR0YWNo
ZWRDYWxsYmFja1xuIik7DQorDQorICBpZiAobGluZSA9PSBpbmZvLT5saW5lKSB7DQorICAgIGRw
cmludGYoIiAgICBvdXJzZWxmXG4iKTsNCisgICAgcmV0dXJuIDA7DQorICB9DQorDQorICAvKiBu
b3RlIHdlIG9ubHkgc3RvcmUgbGFzdCBhdHRhY2hlZCBsaW5lIGZvdW5kLCBub3Qgc3VyZSBob3cg
dG8NCisgICAgIGhhbmRsZSBtdWx0aXBsZSBhdHRhY2hlZCBsaW5lcyB5ZXQgKi8NCisNCisgIGlu
Zm8tPm5BdHRhY2hlZCsrOw0KKyAgaW5mby0+QXR0YWNoZWRMaW5lID0gbGluZTsNCisgIGRwcmlu
dGYoIiAgICAoJWQsJWQpIC0gKCVkLCAlZClcbiIsIGxpbmUtPlBvaW50MS5YLCBsaW5lLT5Qb2lu
dDEuWSwNCisJICBsaW5lLT5Qb2ludDIuWCwgbGluZS0+UG9pbnQyLlkpOw0KKyAgcmV0dXJuIDE7
DQorfQ0KKw0KK0xpbmVUeXBlUHRyDQorRmluZExpbmVBdHRhY2hlZFRvUG9pbnQgKExheWVyVHlw
ZVB0ciBMYXllciwNCisJCQkgTGluZVR5cGVQdHIgIExpbmUsDQorCQkJIFBvaW50VHlwZVB0ciBM
aW5lUG9pbnQpDQorew0KKyAgTGluZVR5cGVQdHIgQXR0YWNoZWRMaW5lOw0KKyAgQ2FyZGluYWwg
Z3JvdXA7DQorICBzdHJ1Y3QgQXR0YWNoZWRJbmZvIGluZm87DQorICBDb29yZCB0ID0gTGluZS0+
VGhpY2tuZXNzIC8gMjsNCisNCisgIC8qIGxvb2t1cCBsYXllcmdyb3VwIGFuZCBjaGVjayBhbGwg
dmlzaWJsZSBsaW5lcyBpbiB0aGlzIGdyb3VwICovDQorICBpbmZvLnJhZGl1cyA9IExpbmUtPlRo
aWNrbmVzcyAvIDI7DQorICBpbmZvLmJveC5YMSA9IExpbmVQb2ludC0+WCAtIHQ7DQorICBpbmZv
LmJveC5YMiA9IExpbmVQb2ludC0+WCArIHQ7Ow0KKyAgaW5mby5ib3guWTEgPSBMaW5lUG9pbnQt
PlkgLSB0Ow0KKyAgaW5mby5ib3guWTIgPSBMaW5lUG9pbnQtPlkgKyB0Ow0KKyAgaW5mby5saW5l
ID0gTGluZTsNCisgIGluZm8uWCA9IExpbmVQb2ludC0+WDsNCisgIGluZm8uWSA9IExpbmVQb2lu
dC0+WTsNCisgIGluZm8ubkF0dGFjaGVkID0gMDsNCisgIGdyb3VwID0gR2V0TGF5ZXJHcm91cE51
bWJlckJ5UG9pbnRlciAoTGF5ZXIpOw0KKw0KKyAgZHByaW50ZigiRmluZExpbmVBdHRhY2hlZFRv
UG9pbnRcbiIpOw0KKw0KKyAgR1JPVVBfTE9PUCAoUENCLT5EYXRhLCBncm91cCk7DQorICB7DQor
ICAgIC8qIGNoZWNrIGFsbCB2aXNpYmxlIGxpbmVzIG9mIHRoZSBncm91cCBtZW1iZXIgKi8NCisg
ICAgaWYgKGxheWVyLT5PbikNCisgICAgICB7DQorCWluZm8ubGF5ZXIgPSBsYXllcjsNCisJcl9z
ZWFyY2ggKGxheWVyLT5saW5lX3RyZWUsICZpbmZvLmJveCwgTlVMTCwgTGluZUF0dGFjaGVkQ2Fs
bGJhY2ssICZpbmZvKTsNCisgICAgICB9DQorICB9DQorICBFTkRfTE9PUDsNCisNCisgIGRwcmlu
dGYoImluZm8ubkF0dGFjaGVkID0gJWRcbiIsIGluZm8ubkF0dGFjaGVkKTsNCisgIEF0dGFjaGVk
TGluZSA9IGluZm8uQXR0YWNoZWRMaW5lOw0KKw0KKyAgaWYgKGluZm8ubkF0dGFjaGVkKSB7DQor
DQorICAgIC8qIE1ha2Ugc3VyZSB0aGUgQXR0YWNoZWRQb2ludCBpcyBhdCBvbmUgZW5kIG9mIHRo
ZSBsaW5lIChlLmcuIG5vdCBpbiB0aGUNCisgICAgICAgbWlkZGxlKSAqLw0KKw0KKyAgICBpZiAo
KExpbmVQb2ludC0+WCA9PSBBdHRhY2hlZExpbmUtPlBvaW50MS5YKSAmJg0KKwkoTGluZVBvaW50
LT5ZID09IEF0dGFjaGVkTGluZS0+UG9pbnQxLlkpKQ0KKyAgICAgIHsNCisJcmV0dXJuIEF0dGFj
aGVkTGluZTsNCisgICAgICB9DQorDQorICAgIGlmICgoTGluZVBvaW50LT5YID09IEF0dGFjaGVk
TGluZS0+UG9pbnQyLlgpICYmDQorCShMaW5lUG9pbnQtPlkgPT0gQXR0YWNoZWRMaW5lLT5Qb2lu
dDIuWSkpDQorICAgICAgew0KKwlyZXR1cm4gQXR0YWNoZWRMaW5lOw0KKyAgICAgIH0NCisgIH0N
CisNCisgIHJldHVybiBOVUxMOyAvKiBubyBhdHRhY2hlZCBsaW5lIGF0IExpbmVQb2ludCAqLw0K
K30NCisNCitpbnQgUG9pbnRJbnNpZGVQaW4oUGluVHlwZVB0ciBQaW4sIENvb3JkIHgsIENvb3Jk
IHkpDQorew0KKyAgZmxvYXQgZGlzdDsNCisgIENvb3JkIHgxLHgyLHkxLHkyOw0KKyAgQ29vcmQg
dCA9IFBpbi0+VGhpY2tuZXNzIC8gMjsNCisNCisgIGRwcmludGYoIiAgUG9pbnRJbnNpZGVQaW5c
biIpOw0KKyAgZHByaW50ZigiICAgICglZCwlZCkgciA9ICVkXG4iLCBQaW4tPlgsIFBpbi0+WSwg
dCk7DQorDQorICBpZiAoVEVTVF9GTEFHIChTUVVBUkVGTEFHLCBQaW4pKSB7DQorICAgIGRwcmlu
dGYoIiAgc3F1YXJlXG4iKTsNCisNCisgICAgeDEgPSBQaW4tPlggLSB0Ow0KKyAgICB4MiA9IFBp
bi0+WCArIHQ7DQorICAgIHkxID0gUGluLT5ZIC0gdDsNCisgICAgeTIgPSBQaW4tPlkgKyB0Ow0K
Kw0KKyAgICBpZiAoKHggPj0geDEpICYmICh4IDw9IHgyKSAmJg0KKyAgICAgICAgKHkgPj0geTEp
ICYmICh5IDw9IHkyKSkNCisNCisgICAgICByZXR1cm4gMTsNCisgICAgZWxzZQ0KKyAgICAgIHJl
dHVybiAwOw0KKyAgfQ0KKyAgZWxzZSB7DQorICAgIGRwcmludGYoIiAgICByb3VuZCAtICIpOw0K
Kw0KKyAgICBkaXN0ID0gc3FydChwb3coeCAtIFBpbi0+WCwgMi4wKSArDQorCQlwb3coeSAtIFBp
bi0+WSwgMi4wKSk7DQorDQorICAgIGRwcmludGYoImRpc3QgJWYgICIsIGRpc3QpOw0KKyAgICBp
ZiAoZGlzdCA8IHQpIHsNCisgICAgICBkcHJpbnRmKCJZRVNcbiIpOw0KKyAgICAgIHJldHVybiAx
Ow0KKyAgICB9DQorICAgIGVsc2Ugew0KKyAgICAgIGRwcmludGYoIk5PXG4iKTsNCisgICAgICBy
ZXR1cm4gMDsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBCb3Ro
RW5kc1dpdGhpblBhZChQYWRUeXBlUHRyIFBhZCwgTGluZVR5cGVQdHIgTGluZSkgew0KKyNpZmRl
ZiBMQVRFUg0KKyAgICAvKiBtYWtlIHN1cmUgeDIgPiB4MSBhbmQgeTIgPiB5MSAqLw0KKw0KKyAg
ICBpZiAoeDEgPiB4Mikgew0KKyAgICAgIHRtcCA9IHgyOw0KKyAgICAgIHgyID0geDE7DQorICAg
ICAgeDEgPSB0bXA7DQorICAgIH0NCisgICAgaWYgKHkxID4geTIpIHsNCisgICAgICB0bXAgPSB5
MjsNCisgICAgICB5MiA9IHkxOw0KKyAgICAgIHkxID0gdG1wOw0KKyAgICB9DQorI2VuZGlmDQor
ICByZXR1cm4gMDsNCit9DQorDQorLyoNCitpbnQgUG9pbnRJc0luc2lkZVBpbihQaW5UeXBlUHRy
IFBpbikNCit7DQorICBzdHJ1Y3QgcnViYmVyX2luZm8gaW5mbzsNCisgIENhcmRpbmFsIG47DQor
ICBDb29yZCB0ID0gUGluLT5UaGlja25lc3MgLyAyOw0KKw0KKyAgaW5mby5ib3guWDEgPSBQaW4t
PlggLSB0Ow0KKyAgaW5mby5ib3guWDIgPSBQaW4tPlggKyB0Ow0KKyAgaW5mby5ib3guWTEgPSBQ
aW4tPlkgLSB0Ow0KKyAgaW5mby5ib3guWTIgPSBQaW4tPlkgKyB0Ow0KKyAgaW5mby5saW5lID0g
TlVMTDsNCisgIGlmIChURVNUX0ZMQUcgKFNRVUFSRUZMQUcsIFBpbikpDQorICAgIGluZm8ucmFk
aXVzID0gMDsNCisqLw0KZGlmZiAtLWdpdCBhL3NyYy9ydWJiZXJiYW5kLmggYi9zcmMvcnViYmVy
YmFuZC5oDQppbmRleCA5ZTY3MWJmLi5jYWQ2YmFmIDEwMDY0NA0KLS0tIGEvc3JjL3J1YmJlcmJh
bmQuaA0KKysrIGIvc3JjL3J1YmJlcmJhbmQuaA0KQEAgLTM1LDUgKzM1LDMxIEBADQogDQogdm9p
ZCBMb29rdXBSdWJiZXJiYW5kTGluZXMgKGludCwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7DQog
dm9pZCBMb29rdXBSYXRMaW5lcyAoaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsNCit2b2lk
IE1vdmVQb2ludEdpdmVuUnViYmVyQmFuZE1vZGUoUG9pbnRUeXBlUHRyIFBvaW50T3V0LA0KKwkJ
CSAgICAgICAgICBQb2ludFR5cGVQdHIgUG9pbnQsDQorCQkJCSAgTGluZVR5cGVQdHIgTGluZSwN
CisJCQkgICAgICAgICAgQ29vcmQgZHgsDQorCQkJICAgICAgICAgIENvb3JkIGR5LA0KKwkJCQkg
IGludCBUeXBlLA0KKwkJCQkgIGludCBEaWFnb25hbCk7DQordm9pZCBNb3ZlTGluZUdpdmVuUnVi
YmVyQmFuZE1vZGUoTGluZVR5cGVQdHIgTGluZU91dCwNCisJCQkJIExpbmVUeXBlUHRyIExpbmUs
DQorCQkJCSBDb29yZCBkeCwNCisJCQkJIENvb3JkIGR5LA0KKwkJCQkgQ3Jvc3NoYWlyVHlwZSBD
cm9zc0hhaXIpOw0KK2ludCBJc0hvcml6b250YWwoTGluZVR5cGVQdHIgTGluZSk7DQoraW50IElz
VmVydGljYWwoTGluZVR5cGVQdHIgTGluZSk7DQoraW50IElzRGlhZ29uYWwoTGluZVR5cGVQdHIg
TGluZSk7DQordm9pZCBSZXN0cmljdE1vdmVtZW50R2l2ZW5SdWJiZXJCYW5kTW9kZShMaW5lVHlw
ZVB0ciBMaW5lLA0KKwkJCQkJIENvb3JkICpkeCwNCisJCQkJCSBDb29yZCAqZHkpOw0KK0xpbmVU
eXBlUHRyDQorRmluZExpbmVBdHRhY2hlZFRvUG9pbnQgKExheWVyVHlwZVB0ciBMYXllciwNCisJ
CQkgTGluZVR5cGVQdHIgIExpbmUsDQorCQkJIFBvaW50VHlwZVB0ciBMaW5lUG9pbnQpOw0KK2lu
dA0KK1BvaW50SW5zaWRlUGluKFBpblR5cGVQdHIgUGluLCBDb29yZCB4LCBDb29yZCB5KTsNCitp
bnQNCitCb3RoRW5kc1dpdGhpblBhZChQYWRUeXBlUHRyIFBhZCwgTGluZVR5cGVQdHIgTGluZSk7
DQogDQogI2VuZGlmDQotLSANCjEuNy41LjQNCg0K


--=-CNObwDo+Ilf+QrVLEVym--

--=-JiRq8lw/oMpBT0Eo0Mkc
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.4.11 (GNU/Linux)

iQEcBAABAgAGBQJOecHcAAoJEOo4D/b1x+QV8MAIAJ4hUPGfvc7LZgQe72EGnDxj
vGrNdg+kPf30JvJAjlprjkUXieq+enLWehywV+ZSBNl6w4+jOdYnS5R4UnywioMD
Ps+LBr8Dqht+2hQIqavC8GRFtD+JNjD8TB5XCcA23MngQUs0nQlqMYva9lZjWDHL
oF+HkDfAEgbpja3yVoSCngdgRdqWo5RLZWXfwZ9mOFQKSdQEzMIXtnCWkSyh0B6V
5K3JQIw+AOqUvAACuZeBMW8AgK0sPoFMSnbIxEkm+SHcZZvXVMFG0Xc84Eeaghsb
auwb3HEOqSDFEl1kjhJgaE8pgHqb19cejpPnZWlI19OyHfCiTg2BnNtSHch/W30=
=20V4
-----END PGP SIGNATURE-----

--=-JiRq8lw/oMpBT0Eo0Mkc--

- Raw text -


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