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 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> Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-JiRq8lw/oMpBT0Eo0Mkc" 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 Precedence: bulk --=-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--