Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZKqJz-0000sz-R1 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jul 2015 16:04:40 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZKqJz-0007om-C9 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Jul 2015 16:04:39 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZKqJy-0007ny-0a for pgsql-hackers@postgresql.org; Thu, 30 Jul 2015 16:04:38 +0000 Received: from jiboia.ensmp.fr ([194.214.158.137]) by makus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZKqJt-000255-C2 for pgsql-hackers@postgresql.org; Thu, 30 Jul 2015 16:04:36 +0000 Received: from cri.ensmp.fr (244.26.219.88.rev.sfr.net [88.219.26.244]) (authenticated bits=0) by jiboia.ensmp.fr (8.15.1/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t6UG3vwl006070 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 30 Jul 2015 18:03:57 +0200 Date: Thu, 30 Jul 2015 18:03:56 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto Reply-To: Fabien COELHO To: Robert Haas cc: Josh Berkus , "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: <55AEDDA4.8020009@agliodbs.com> <55AFD8C6.8010507@agliodbs.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-474080529-1438272238=:22793" X-Miltered: at jiboia.ensmp.fr with ID 55BA4AED.000 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Auth: USER-ID fabien.coelho X-j-chkmail-Enveloppe: 55BA4AED.000 from 244.26.219.88.rev.sfr.net/244.26.219.88.rev.sfr.net/88.219.26.244/cri.ensmp.fr/ X-Pg-Spam-Score: -3.3 (---) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-474080529-1438272238=:22793 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed > v6 is just a rebase after a bug fix by Andres Freund. > > Also a small question: The patch currently displays pgbench scripts > starting numbering at 0. Probably a little too geek... should start at > 1? v7 is a rebase after another small bug fix in pgbench. -- Fabien. --8323329-474080529-1438272238=:22793 Content-Type: TEXT/x-diff; name=pgbench-script-stats-7.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-7.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu Ljk5NjcwZDQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDIzIEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRlcm0+PG9wdGlvbj4t LWJ1aWx0aW48Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5hbWVbQHdlaWdodF08 Lz48L3Rlcm0+DQorICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4N CisgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0aW4gc2NyaXB0IHRv IHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBv cHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFs bG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBk cmF3aW5nIHRoZSB0ZXN0Lg0KKyAgICAgICAgQXZhaWxhYmxlIGJ1aWx0aW4g c2NyaXB0cyBhcmU6IDxsaXRlcmFsPnRwY2ItbGlrZTwvPiwNCisgICAgICAg IDxsaXRlcmFsPnNpbXBsZS11cGRhdGU8Lz4gYW5kIDxsaXRlcmFsPnNlbGVj dC1vbmx5PC8+Lg0KKyAgICAgICAgVGhlIHByb3ZpZGVkIDxyZXBsZWFjYWJs ZT5zY3JpcHRuYW1lPC8+IG5lZWRzIG9ubHkgdG8gYmUgYSBwcmVmaXgNCisg ICAgICAgIG9mIHRoZSBidWlsdGluIG5hbWUsIGhlbmNlIDxsaXRlcmFsPnNp bXA8Lz4gd291bGQgYmUgZW5vdWdoIHRvIHNlbGVjdA0KKyAgICAgICAgPGxp dGVyYWw+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgPC9wYXJhPg0KKyAg ICAgIDwvbGlzdGl0ZW0+DQorICAgICA8L3Zhcmxpc3RlbnRyeT4NCisNCiAN CiAgICAgIDx2YXJsaXN0ZW50cnk+DQogICAgICAgPHRlcm0+PG9wdGlvbj4t Yzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+Y2xpZW50czwvPjwvdGVybT4NCkBA IC0zMDcsMTQgKzMyNCwxNSBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxh Y2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRi bmFtZTwvPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICA8dmFy bGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LWY8L29wdGlvbj4g PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+PC90ZXJtPg0KLSAgICAgIDx0ZXJt PjxvcHRpb24+LS1maWxlPTwvb3B0aW9uPjxyZXBsYWNlYWJsZT5maWxlbmFt ZTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi1mPC8+IDxyZXBs YWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0XTwvPjwvdGVybT4NCisgICAgICA8 dGVybT48b3B0aW9uPi0tZmlsZT08Lz48cmVwbGFjZWFibGU+ZmlsZW5hbWVb QHdlaWdodF08Lz48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAgICAg ICA8cGFyYT4NCi0gICAgICAgIFJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZy b20gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+Lg0KKyAgICAgICAgQWRkIGEg dHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJvbSA8cmVwbGFjZWFibGU+Zmls ZW5hbWU8Lz4gdG8NCisgICAgICAgIHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNj cmlwdHMuDQorICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdodCBh ZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQorICAg ICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0Lg0KICAgICAg ICAgU2VlIGJlbG93IGZvciBkZXRhaWxzLg0KLSAgICAgICAgPG9wdGlvbj4t Tjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwvb3B0aW9uPiwgYW5kIDxvcHRpb24+ LWY8L29wdGlvbj4NCi0gICAgICAgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUu DQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAg PC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0LDEwICs0MjIsNyBAQCBwZ2JlbmNo IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25h bD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgIDx0ZXJtPjxvcHRp b24+LS1za2lwLXNvbWUtdXBkYXRlczwvb3B0aW9uPjwvdGVybT4NCiAgICAg ICA8bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KLSAgICAgICAgRG8gbm90 IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2JlbmNoX3RlbGxlcnM8Lz4gYW5kDQot ICAgICAgICA8c3RydWN0bmFtZT5wZ2JlbmNoX2JyYW5jaGVzPC8+Lg0KLSAg ICAgICAgVGhpcyB3aWxsIGF2b2lkIHVwZGF0ZSBjb250ZW50aW9uIG9uIHRo ZXNlIHRhYmxlcywgYnV0DQotICAgICAgICBpdCBtYWtlcyB0aGUgdGVzdCBj YXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1CLg0KKyAgICAgICAgU2hvcnRoYW5k IGZvciA8b3B0aW9uPi1iIHNpbXBsZS11cGRhdGVAMTwvPi4NCiAgICAgICAg PC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8L3Zhcmxpc3Rl bnRyeT4NCkBAIC00OTksOSArNTE0LDkgQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5kYm5hbWU8Lz4NCiAgICAgICAgIFJlcG9ydCB0aGUgc3BlY2lmaWVk IHNjYWxlIGZhY3RvciBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvPidzDQog ICAgICAgICBvdXRwdXQuICBXaXRoIHRoZSBidWlsdC1pbiB0ZXN0cywgdGhp cyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUNCiAgICAgICAgIGNvcnJlY3Qgc2Nh bGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgY291bnRpbmcgdGhlIG51 bWJlciBvZg0KLSAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVjdG5hbWU+cGdi ZW5jaF9icmFuY2hlczwvPiB0YWJsZS4gIEhvd2V2ZXIsIHdoZW4gdGVzdGlu Zw0KLSAgICAgICAgY3VzdG9tIGJlbmNobWFya3MgKDxvcHRpb24+LWY8Lz4g b3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rvcg0KLSAgICAgICAgd2lsbCBiZSBy ZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlzIG9wdGlvbiBpcyB1c2VkLg0KKyAg ICAgICAgcm93cyBpbiB0aGUgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hl czwvPiB0YWJsZS4NCisgICAgICAgIEhvd2V2ZXIsIHdoZW4gdGVzdGluZyBv bmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8b3B0aW9uPi1mPC8+IG9wdGlvbiks DQorICAgICAgICB0aGUgc2NhbGUgZmFjdG9yIHdpbGwgYmUgcmVwb3J0ZWQg YXMgMSB1bmxlc3MgdGhpcyBvcHRpb24gaXMgdXNlZC4NCiAgICAgICAgPC9w YXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8L3Zhcmxpc3RlbnRy eT4NCkBAIC01MTEsNyArNTI2LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVybT48b3B0aW9uPi0tc2VsZWN0LW9u bHk8L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAgICAg ICA8cGFyYT4NCi0gICAgICAgIFBlcmZvcm0gc2VsZWN0LW9ubHkgdHJhbnNh Y3Rpb25zIGluc3RlYWQgb2YgVFBDLUItbGlrZSB0ZXN0Lg0KKyAgICAgICAg U2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNlbGVjdC1vbmx5QDE8Lz4uDQog ICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAgPC92 YXJsaXN0ZW50cnk+DQpAQCAtNTY3LDYgKzU4MiwxNiBAQCBwZ2JlbmNoIDxv cHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4g PHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0ZW50cnk+ DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1wZXItc2NyaXB0LXN0YXRzPC9vcHRpb24+PC90ZXJtPg0KKyAgICAg IDxsaXN0aXRlbT4NCisgICAgICAgPHBhcmE+DQorICAgICAgICBSZXBvcnQg c29tZSBzdGF0aXN0aWNzIHBlciBzY3JpcHQgcnVuIGJ5IHBnYmVuY2guDQor ICAgICAgIDwvcGFyYT4NCisgICAgICA8L2xpc3RpdGVtPg0KKyAgICAgPC92 YXJsaXN0ZW50cnk+DQorDQorDQorICAgICA8dmFybGlzdGVudHJ5Pg0KICAg ICAgIDx0ZXJtPjxvcHRpb24+LS1zYW1wbGluZy1yYXRlPTxyZXBsYWNlYWJs ZT5yYXRlPC8+PC9vcHRpb24+PC90ZXJtPg0KICAgICAgIDxsaXN0aXRlbT4N CiAgICAgICAgPHBhcmE+DQpAQCAtNjYxLDcgKzY4NiwyMCBAQCBwZ2JlbmNo IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25h bD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgPHRpdGxlPldoYXQgaXMg dGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBBY3R1YWxseSBQZXJmb3JtZWQg aW4gcGdiZW5jaD88L3RpdGxlPg0KIA0KICAgPHBhcmE+DQotICAgVGhlIGRl ZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlzc3VlcyBzZXZlbiBjb21tYW5k cyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdiZW5jaCBleGVjdXRlcyB0ZXN0 IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZyb20gYSBzcGVjaWZpZWQgbGlz dC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQtaW4gc2NyaXB0cyB3aXRoIDxv cHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1wcm92aWRlZCBjdXN0b20gc2Ny aXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCBzY3JpcHQgbWF5 IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0IHNwZWNpZmllZCBhZnRlciBh DQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0byBjaGFuZ2UgaXRzIGRyYXdp bmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRlZmF1bHQgd2VpZ2h0IGlzIDxs aXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRo ZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rpb24gc2NyaXB0IChhbHNvIGlu dm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2ItbGlrZTwvPikNCisgICBpc3N1 ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5zYWN0aW9uIG92ZXIgcmFuZG9t bHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwNCisgICA8bGl0ZXJhbD50aWQ8 Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxpdGVyYWw+YmFsYW5jZTwvPi4N CisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGlyZWQgYnkgdGhlIFRQQy1CIGJl bmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxseSBUUEMtQiwNCisgICBoZW5j ZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxvcmRlcmVkbGlzdD4N CkBAIC02NzUsOSArNzEzLDE1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0Pg0KIA0KICAgPHBhcmE+DQot ICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4tTjwvPiwgc3RlcHMgNCBhbmQg NSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQotICAgdHJhbnNhY3Rpb24uICBJ ZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+LCBvbmx5IHRoZSA8Y29tbWFu ZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQuDQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPiBidWlsdGluIChhbHNv IDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBzIDQgYW5kIDUgYXJlbid0IGlu Y2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4NCisgICBUaGlzIHdpbGwgYXZv aWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhlc2UgdGFibGVzLCBidXQNCisg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+DQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8Lz4gYnVpbHRpbiAoYWxzbyA8 b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRoZSA8Y29tbWFuZD5TRUxFQ1Q8 Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0KICA8L3JlZnNlY3QyPg0KIA0K QEAgLTY4OSwxMCArNzMzLDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5k Ym5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxhY2lu ZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVzY3Jp YmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJv bSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24pLiAg SW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAgY291 bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlvdSBj YW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVsdGlw bGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gNCi0g ICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9zZW4g ZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBuZXcg dHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2Yg YSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCAzMGE1OWFmLi45OTU0ZjU0IDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysrIGIv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2MiwxMSArMTYyLDEw IEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyogcXVp ZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRlcnZh bDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVhbA0K IAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAgcGVy X3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxlY3Qg c3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJCS8q IHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRzICov DQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMgPSAwOwkJLyogbnVtYmVyIG9m IGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJCQkJCQkJCSAqIHJlcG9ydCAq Lw0KLWludAkJCXByb2dyZXNzX250aHJlYWRzID0gMDsJCS8qIG51bWJlciBv ZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJCQkJCQkJCQkgKiByZXBvcnQg Ki8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50 cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJICAgIC8qIG51bWJlciBvZiB0 aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVjdDsJCQkvKiBlc3RhYmxpc2gg Y29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLw0KIGJvb2wJCWlz X2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMg Ki8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nlc3MgaWQgdXNl ZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0xNzcsNiArMTc2LDggQEAgY2hh cgkgICAqbG9naW4gPSBOVUxMOw0KIGNoYXIJICAgKmRiTmFtZTsNCiBjb25z dCBjaGFyICpwcm9nbmFtZTsNCiANCisjZGVmaW5lIFdTRVAgJ0AnIC8qIHdl aWdodCBzZXBhcmF0b3IgKi8NCisNCiB2b2xhdGlsZSBib29sIHRpbWVyX2V4 Y2VlZGVkID0gZmFsc2U7CS8qIGZsYWcgZnJvbSBzaWduYWwgaGFuZGxlciAq Lw0KIA0KIC8qIHZhcmlhYmxlIGRlZmluaXRpb25zICovDQpAQCAtMTg2LDEz ICsxODcsMzkgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJY2hhcgkgICAqdmFsdWU7 CQkJLyogaXRzIHZhbHVlICovDQogfSBWYXJpYWJsZTsNCiANCi0jZGVmaW5l IE1BWF9GSUxFUwkJMTI4CQkvKiBtYXggbnVtYmVyIG9mIFNRTCBzY3JpcHQg ZmlsZXMgYWxsb3dlZCAqLw0KKyNkZWZpbmUgTUFYX1NDUklQVFMJCTEyOAkJ LyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0cyBhbGxvd2VkICovDQogI2Rl ZmluZSBTSEVMTF9DT01NQU5EX1NJWkUJMjU2IC8qIG1heGltdW0gc2l6ZSBh bGxvd2VkIGZvciBzaGVsbCBjb21tYW5kICovDQogDQogLyoNCi0gKiBzdHJ1 Y3R1cmVzIHVzZWQgaW4gY3VzdG9tIHF1ZXJ5IG1vZGUNCisgKiBzaW1wbGUg ZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCBzdGF0cyBhYm91dCBzb21ldGhpbmcu DQorICogcHJvYmFibHkgdGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBrZXB0 IGFuZCB1c2VkIGFzIGFuIG9mZnNldCBmb3INCisgKiBiZXR0ZXIgbnVtZXJp Y2FsIHN0YWJpbGl0eS4uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0K KwlpbnQ2NF90IGNvdW50OyAgICAvKiBob3cgbWFueSB2YWx1ZXMgd2hlcmUg ZW5jb3VudGVyZWQgKi8NCisJZG91YmxlIG1pbjsgICAvKiB0aGUgbWluaW11 bSBzZWVuICovDQorCWRvdWJsZSBtYXg7ICAgLyogdGhlIG1heGltdW0gc2Vl biAqLw0KKwlkb3VibGUgc3VtOyAgIC8qIHN1bSBvZiB2YWx1ZXMgKi8NCisJ ZG91YmxlIHN1bTI7ICAvKiBzdW0gb2Ygc3F1YXJlZCB2YWx1ZXMgKi8NCit9 IFNpbXBsZVN0YXRzOw0KKw0KKy8qIGRhdGEgc3RydWN0dXJlIHRvIGhvbGQg dmFyaW91cyBzdGF0aXN0aWNzLg0KKyAqIGl0IGlzIHVzZWQgZm9yIGludGVy dmFsIHN0YXRpc3RpY3MgYXMgd2VsbCBhcyBmaWxlIHN0YXRpc3RpY3MuDQog ICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCWxvbmcJCXN0YXJ0X3RpbWU7 CQkvKiB3aGVuIHRoZSBpbnRlcnZhbCBzdGFydHMsIGZvciBhZ2dyZWdhdGVz ICovDQorCWludDY0CQljbnQ7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyAqLw0KKwlpbnQ2NAkJc2tpcHBlZDsJCS8qIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgc2tpcHBlZCB1bmRlciAtLXJhdGUNCisJCQkJCQkJCSAqIGFuZCAt LWxhdGVuY3ktbGltaXQgKi8NCisJU2ltcGxlU3RhdHMJbGF0ZW5jeTsNCisJ U2ltcGxlU3RhdHMJbGFnOw0KK30gU3RhdHNEYXRhOw0KIA0KKy8qDQorICog c3RydWN0dXJlcyB1c2VkIGluIGN1c3RvbSBxdWVyeSBtb2RlDQorICovDQog dHlwZWRlZiBzdHJ1Y3QNCiB7DQogCVBHY29ubgkgICAqY29uOwkJCS8qIGNv bm5lY3Rpb24gaGFuZGxlIHRvIERCICovDQpAQCAtMjAwLDIyICsyMjcsMjAg QEAgdHlwZWRlZiBzdHJ1Y3QNCiAJaW50CQkJc3RhdGU7CQkJLyogc3RhdGUg Tm8uICovDQogCWludAkJCWxpc3RlbjsJCQkvKiAwIGluZGljYXRlcyB0aGF0 IGFuIGFzeW5jIHF1ZXJ5IGhhcyBiZWVuDQogCQkJCQkJCQkgKiBzZW50ICov DQotCWludAkJCXNsZWVwaW5nOwkJLyogMSBpbmRpY2F0ZXMgdGhhdCB0aGUg Y2xpZW50IGlzIG5hcHBpbmcgKi8NCisJYm9vbAkJaXNfdGhyb3R0bGVkOwkv KiB3aGV0aGVyIHRyYW5zYWN0aW9uIHRocm90dGxpbmcgaXMgZG9uZSAqLw0K Kwlib29sCQlzbGVlcGluZzsJCS8qIHdoZXRoZXIgdGhlIGNsaWVudCBpcyBu YXBwaW5nICovDQogCWJvb2wJCXRocm90dGxpbmc7CQkvKiB3aGV0aGVyIG5h cCBpcyBmb3IgdGhyb3R0bGluZyAqLw0KIAlWYXJpYWJsZSAgICp2YXJpYWJs ZXM7CQkvKiBhcnJheSBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLw0KIAlp bnQJCQludmFyaWFibGVzOw0KIAlpbnQ2NAkJdHhuX3NjaGVkdWxlZDsJLyog c2NoZWR1bGVkIHN0YXJ0IHRpbWUgb2YgdHJhbnNhY3Rpb24gKHVzZWMpICov DQogCWluc3RyX3RpbWUJdHhuX2JlZ2luOwkJLyogdXNlZCBmb3IgbWVhc3Vy aW5nIHNjaGVkdWxlIGxhZyB0aW1lcyAqLw0KIAlpbnN0cl90aW1lCXN0bXRf YmVnaW47CQkvKiB1c2VkIGZvciBtZWFzdXJpbmcgc3RhdGVtZW50IGxhdGVu Y2llcyAqLw0KLQlib29sCQlpc190aHJvdHRsZWQ7CS8qIHdoZXRoZXIgdHJh bnNhY3Rpb24gdGhyb3R0bGluZyBpcyBkb25lICovDQotCWludAkJCXVzZV9m aWxlOwkJLyogaW5kZXggaW4gc3FsX2ZpbGVzIGZvciB0aGlzIGNsaWVudCAq Lw0KLQlib29sCQlwcmVwYXJlZFtNQVhfRklMRVNdOw0KKwlpbnQJCQl1c2Vf ZmlsZTsJCS8qIGluZGV4IGluIHNxbF9zY3JpcHRzIGZvciB0aGlzIGNsaWVu dCAqLw0KKwlib29sCQlwcmVwYXJlZFtNQVhfU0NSSVBUU107IC8qIHdoZXRo ZXIgY2xpZW50IHByZXBhcmVkIHRoZSBzY3JpcHQgKi8NCiANCiAJLyogcGVy IGNsaWVudCBjb2xsZWN0ZWQgc3RhdHMgKi8NCi0JaW50CQkJY250OwkJCS8q IHhhY3RzIGNvdW50ICovDQorCWludDY0CQljbnQ7CQkJLyogdHJhbnNhY3Rp b24gY291bnQgKi8NCiAJaW50CQkJZWNudDsJCQkvKiBlcnJvciBjb3VudCAq Lw0KLQlpbnQ2NAkJdHhuX2xhdGVuY2llczsJLyogY3VtdWxhdGVkIGxhdGVu Y2llcyAqLw0KLQlpbnQ2NAkJdHhuX3NxbGF0czsJCS8qIGN1bXVsYXRlZCBz cXVhcmUgbGF0ZW5jaWVzICovDQogfSBDU3RhdGU7DQogDQogLyoNCkBAIC0y MjcsMTkgKzI1MiwxNCBAQCB0eXBlZGVmIHN0cnVjdA0KIAlwdGhyZWFkX3QJ dGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8NCiAJQ1N0YXRlCSAgICpz dGF0ZTsJCQkvKiBhcnJheSBvZiBDU3RhdGUgKi8NCiAJaW50CQkJbnN0YXRl OwkJCS8qIGxlbmd0aCBvZiBzdGF0ZVtdICovDQotCWluc3RyX3RpbWUJc3Rh cnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovDQotCWluc3RyX3Rp bWUgKmV4ZWNfZWxhcHNlZDsJLyogdGltZSBzcGVudCBleGVjdXRpbmcgY21k cyAocGVyIENvbW1hbmQpICovDQotCWludAkJICAgKmV4ZWNfY291bnQ7CQkv KiBudW1iZXIgb2YgY21kIGV4ZWN1dGlvbnMgKHBlciBDb21tYW5kKSAqLw0K LQl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CQkvKiBzZXBhcmF0 ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KLQlpbnQ2NAkJdGhy b3R0bGVfdHJpZ2dlcjsJCS8qIHByZXZpb3VzL25leHQgdGhyb3R0bGluZyAo dXMpICovDQorCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsJIC8q IHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2ggdGhyZWFkICovDQorCWlu dDY0CQl0aHJvdHRsZV90cmlnZ2VyOwkgLyogcHJldmlvdXMvbmV4dCB0aHJv dHRsaW5nICh1cykgKi8NCiANCiAJLyogcGVyIHRocmVhZCBjb2xsZWN0ZWQg c3RhdHMgKi8NCisJaW5zdHJfdGltZQlzdGFydF90aW1lOwkJLyogdGhyZWFk IHN0YXJ0IHRpbWUgKi8NCiAJaW5zdHJfdGltZQljb25uX3RpbWU7DQotCWlu dDY0CQl0aHJvdHRsZV9sYWc7CS8qIHRvdGFsIHRyYW5zYWN0aW9uIGxhZyBi ZWhpbmQgdGhyb3R0bGluZyAqLw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFnX21h eDsJCS8qIG1heCB0cmFuc2FjdGlvbiBsYWcgKi8NCi0JaW50NjQJCXRocm90 dGxlX2xhdGVuY3lfc2tpcHBlZDsJCS8qIGxhZ2dpbmcgdHJhbnNhY3Rpb25z DQotCQkJCQkJCQkJCQkJICogc2tpcHBlZCAqLw0KLQlpbnQ2NAkJbGF0ZW5j eV9sYXRlOwkvKiBsYXRlIHRyYW5zYWN0aW9ucyAqLw0KKwlTdGF0c0RhdGEg ICBzdGF0czsNCisJaW50NjQJCWxhdGVuY3lfbGF0ZTsJLyogZXhlY3V0ZWQg YnV0IGxhdGUgdHJhbnNhY3Rpb25zICovDQogfSBUU3RhdGU7DQogDQogI2Rl ZmluZSBJTlZBTElEX1RIUkVBRAkJKChwdGhyZWFkX3QpIDApDQpAQCAtMjcx LDM1ICsyOTEsNDEgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJY2hhcgkgICAqYXJn dltNQVhfQVJHU107IC8qIGNvbW1hbmQgd29yZCBsaXN0ICovDQogCWludAkJ CWNvbHNbTUFYX0FSR1NdOyAvKiBjb3JyZXNwb25kaW5nIGNvbHVtbiBzdGFy dGluZyBmcm9tIDEgKi8NCiAJUGdCZW5jaEV4cHIgKmV4cHI7CQkJLyogcGFy c2VkIGV4cHJlc3Npb24gKi8NCisJU2ltcGxlU3RhdHMJc3RhdHM7ICAgICAg ICAgIC8qIHRpbWUgc3BlbnQgaW4gdGhpcyBjb21tYW5kICovDQogfSBDb21t YW5kOw0KIA0KKy8qIFNRTCBzY3JpcHQgdG8gYmUgZXhlY3V0ZWQsIGVpdGhl ciBhIGZpbGUgb3IgYW4gaW50ZXJuYWwgc2NyaXB0DQorICovDQogdHlwZWRl ZiBzdHJ1Y3QNCiB7DQotDQotCWxvbmcJCXN0YXJ0X3RpbWU7CQkvKiB3aGVu IGRvZXMgdGhlIGludGVydmFsIHN0YXJ0ICovDQotCWludAkJCWNudDsJCQkv KiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zICovDQotCWludAkJCXNraXBwZWQ7 CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgdW5kZXIgLS1y YXRlDQotCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5LWxpbWl0ICovDQotDQot CWRvdWJsZQkJbWluX2xhdGVuY3k7CS8qIG1pbi9tYXggbGF0ZW5jaWVzICov DQotCWRvdWJsZQkJbWF4X2xhdGVuY3k7DQotCWRvdWJsZQkJc3VtX2xhdGVu Y3k7CS8qIHN1bShsYXRlbmN5KSwgc3VtKGxhdGVuY3leMikgLSBmb3INCi0J CQkJCQkJCSAqIGVzdGltYXRlcyAqLw0KLQlkb3VibGUJCXN1bTJfbGF0ZW5j eTsNCi0NCi0JZG91YmxlCQltaW5fbGFnOw0KLQlkb3VibGUJCW1heF9sYWc7 DQotCWRvdWJsZQkJc3VtX2xhZzsJCS8qIHN1bShsYWcpICovDQotCWRvdWJs ZQkJc3VtMl9sYWc7CQkvKiBzdW0obGFnKmxhZykgKi8NCi19IEFnZ1ZhbHM7 DQotDQotc3RhdGljIENvbW1hbmQgKipzcWxfZmlsZXNbTUFYX0ZJTEVTXTsJ LyogU1FMIHNjcmlwdCBmaWxlcyAqLw0KLXN0YXRpYyBpbnQJbnVtX2ZpbGVz OwkJCS8qIG51bWJlciBvZiBzY3JpcHQgZmlsZXMgKi8NCisJY29uc3QgY2hh ciAqbmFtZTsNCisJaW50IHdlaWdodDsNCisJQ29tbWFuZCAqKmNvbW1hbmRz Ow0KKwlTdGF0c0RhdGEgc3RhdHM7DQorfSBTUUxTY3JpcHQ7DQorDQorc3Rh dGljIFNRTFNjcmlwdCBzcWxfc2NyaXB0W01BWF9TQ1JJUFRTXTsNCitzdGF0 aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVtYmVyIG9mIHNjcmlwdCBpbiBz cWxfc2NyaXB0W10gKi8NCiBzdGF0aWMgaW50CW51bV9jb21tYW5kcyA9IDA7 CS8qIHRvdGFsIG51bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8NCitzdGF0 aWMgaW50ICB0b3RhbF93ZWlnaHQgPSAwOw0KKw0KIHN0YXRpYyBpbnQJZGVi dWcgPSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8NCiANCi0vKiBkZWZhdWx0IHNj ZW5hcmlvICovDQotc3RhdGljIGNoYXIgKnRwY19iID0gew0KKy8qIEZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8NCitzdGF0aWMgdm9pZCBzZXRhbGFybShpbnQg c2Vjb25kcyk7DQorc3RhdGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcp Ow0KK3N0YXRpYyB2b2lkIGRvVHhTdGF0cyhUU3RhdGUqLCBDU3RhdGUqLCBp bnN0cl90aW1lKiwgYm9vbCwgRklMRSosIFN0YXRzRGF0YSopOw0KKw0KKy8q IERlZmluZSBidWlsdGluIHRlc3Qgc2NyaXB0cyAqLw0KKyNkZWZpbmUgTl9C VUlMVElOIDMNCitzdGF0aWMgc3RydWN0IHsNCisJY2hhciAqbmFtZTsgICAv KiB2ZXJ5IHNob3J0IG5hbWUgZm9yIC1iIC4uLiovDQorCWNoYXIgKmRlc2M7 ICAgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8NCisJY2hhciAqc2NyaXB0OyAv KiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9IGJ1aWx0aW5fc2NyaXB0 W10gPSB7DQorew0KKwkidHBjYi1saWtlIiwNCisJIjxidWlsdGluOiBUUEMt QiAoc29ydCBvZik+IiwNCiAJIlxcc2V0IG5icmFuY2hlcyAiIENwcEFzU3Ry aW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG50ZWxs ZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNjYWxlXG4iDQog CSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAi ICogOnNjYWxlXG4iDQpAQCAtMzE0LDEwICszNDAsMTAgQEAgc3RhdGljIGNo YXIgKnRwY19iID0gew0KIAkiVVBEQVRFIHBnYmVuY2hfYnJhbmNoZXMgU0VU IGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYmlkID0gOmJp ZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAodGlkLCBi aWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQsIDph aWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApO1xuIg0KIAkiRU5EO1xu Ig0KLX07DQotDQotLyogLU4gY2FzZSAqLw0KLXN0YXRpYyBjaGFyICpzaW1w bGVfdXBkYXRlID0gew0KK30sDQorew0KKwkic2ltcGxlLXVwZGF0ZSIsDQor CSI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4iLA0KIAkiXFxzZXQgbmJyYW5j aGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykgIiAqIDpzY2FsZVxuIg0K IAkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmluZzIobnRlbGxlcnMpICIg KiA6c2NhbGVcbiINCiAJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3RyaW5n MihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCkBAIC0zMzAsMjEgKzM1Niwz MiBAQCBzdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsNCiAJIlNFTEVD VCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0g OmFpZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAodGlk LCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQs IDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApO1xuIg0KIAkiRU5E O1xuIg0KLX07DQotDQotLyogLVMgY2FzZSAqLw0KLXN0YXRpYyBjaGFyICpz ZWxlY3Rfb25seSA9IHsNCit9LA0KK3sNCisJInNlbGVjdC1vbmx5IiwNCisJ IjxidWlsdGluOiBzZWxlY3Qgb25seT4iLA0KIAkiXFxzZXQgbmFjY291bnRz ICIgQ3BwQXNTdHJpbmcyKG5hY2NvdW50cykgIiAqIDpzY2FsZVxuIg0KIAki XFxzZXRyYW5kb20gYWlkIDEgOm5hY2NvdW50c1xuIg0KIAkiU0VMRUNUIGFi YWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlk O1xuIg0KLX07DQorfSB9Ow0KIA0KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMg Ki8NCi1zdGF0aWMgdm9pZCBzZXRhbGFybShpbnQgc2Vjb25kcyk7DQotc3Rh dGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcpOw0KK3N0YXRpYyBjaGFy ICoNCitmaW5kX2J1aWx0aW4oY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKmRl c2MpDQorew0KKwlpbnQJCWxlbiA9IHN0cmxlbihuYW1lKSwgaTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IE5fQlVJTFRJTjsgaSsrKQ0KKwl7DQorCQlpZiAo c3RybmNtcChidWlsdGluX3NjcmlwdFtpXS5uYW1lLCBuYW1lLCBsZW4pID09 IDApDQorCQl7DQorCQkJKmRlc2MgPSBidWlsdGluX3NjcmlwdFtpXS5kZXNj Ow0KKwkJCXJldHVybiBidWlsdGluX3NjcmlwdFtpXS5zY3JpcHQ7DQorCQl9 DQorCX0NCiANCi1zdGF0aWMgdm9pZCBkb0xvZyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LA0K LQkgIEFnZ1ZhbHMgKmFnZywgYm9vbCBza2lwcGVkKTsNCisJZnByaW50Zihz dGRlcnIsICJubyBidWlsdGluIGZvdW5kIGZvciBcIiVzXCJcbiIsIG5hbWUp Ow0KKwlleGl0KDEpOw0KK30NCiANCiBzdGF0aWMgdm9pZA0KIHVzYWdlKHZv aWQpDQpAQCAtMzY0LDExICs0MDEsMTMgQEAgdXNhZ2Uodm9pZCkNCiAJICIg IC0tdGFibGVzcGFjZT1UQUJMRVNQQUNFICBjcmVhdGUgdGFibGVzIGluIHRo ZSBzcGVjaWZpZWQgdGFibGVzcGFjZVxuIg0KIAkJICAgIiAgLS11bmxvZ2dl ZC10YWJsZXMgICAgICAgIGNyZWF0ZSB0YWJsZXMgYXMgdW5sb2dnZWQgdGFi bGVzXG4iDQogCQkgICAiXG5CZW5jaG1hcmtpbmcgb3B0aW9uczpcbiINCisJ CSAgICIgIC1iLCAtLWJ1aWx0aW49TkFNRUBXICAgICBhZGQgd2VpZ2h0ZWQg YnVpdGluIHNjcmlwdCBhbW9uZyBcInRwY2ItbGlrZVwiXG4iDQorCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaW1wbGUtdXBkYXRlXCIg YW5kIFwic2VsZWN0LW9ubHlcIi5cbiINCiAJCSAgICIgIC1jLCAtLWNsaWVu dD1OVU0gICAgICAgICBudW1iZXIgb2YgY29uY3VycmVudCBkYXRhYmFzZSBj bGllbnRzIChkZWZhdWx0OiAxKVxuIg0KIAkJICAgIiAgLUMsIC0tY29ubmVj dCAgICAgICAgICAgIGVzdGFibGlzaCBuZXcgY29ubmVjdGlvbiBmb3IgZWFj aCB0cmFuc2FjdGlvblxuIg0KIAkJICAgIiAgLUQsIC0tZGVmaW5lPVZBUk5B TUU9VkFMVUVcbiINCiAJICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVmaW5lIHZhcmlhYmxlIGZvciB1c2UgYnkgY3VzdG9tIHNjcmlwdFxuIg0K LQkJICIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICByZWFkIHRyYW5zYWN0 aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQorCQkgIiAgLWYsIC0tZmls ZT1GSUxFTkFNRUBXICAgIGFkZCB3ZWlnaHRlZCB0cmFuc2FjdGlvbiBzY3Jp cHQgZnJvbSBGSUxFTkFNRVxuIg0KIAkJICAgIiAgLWosIC0tam9icz1OVU0g ICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzIChkZWZhdWx0OiAxKVxuIg0K IAkJICAgIiAgLWwsIC0tbG9nICAgICAgICAgICAgICAgIHdyaXRlIHRyYW5z YWN0aW9uIHRpbWVzIHRvIGxvZyBmaWxlXG4iDQogCSIgIC1MLCAtLWxhdGVu Y3ktbGltaXQ9TlVNICBjb3VudCB0cmFuc2FjdGlvbnMgbGFzdGluZyBtb3Jl IHRoYW4gTlVNIG1zXG4iDQpAQCAtMzc2LDE3ICs0MTUsMTggQEAgdXNhZ2Uo dm9pZCkNCiAJCSAgICIgIC1NLCAtLXByb3RvY29sPXNpbXBsZXxleHRlbmRl ZHxwcmVwYXJlZFxuIg0KIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByb3RvY29sIGZvciBzdWJtaXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6 IHNpbXBsZSlcbiINCiAJCSAgICIgIC1uLCAtLW5vLXZhY3V1bSAgICAgICAg ICBkbyBub3QgcnVuIFZBQ1VVTSBiZWZvcmUgdGVzdHNcbiINCi0JCSAgICIg IC1OLCAtLXNraXAtc29tZS11cGRhdGVzICBza2lwIHVwZGF0ZXMgb2YgcGdi ZW5jaF90ZWxsZXJzIGFuZCBwZ2JlbmNoX2JyYW5jaGVzXG4iDQorCQkgICAi ICAtTiwgLS1za2lwLXNvbWUtdXBkYXRlcyAgc2FtZSBhcyBcIi1iIHNpbXBs ZS11cGRhdGVAMVwiXG4iDQogCQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0g ICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IE5VTSBz ZWNvbmRzXG4iDQogCQkgICAiICAtciwgLS1yZXBvcnQtbGF0ZW5jaWVzICAg cmVwb3J0IGF2ZXJhZ2UgbGF0ZW5jeSBwZXIgY29tbWFuZFxuIg0KIAkJIiAg LVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRlIGluIHRyYW5z YWN0aW9ucyBwZXIgc2Vjb25kXG4iDQogCQkgICAiICAtcywgLS1zY2FsZT1O VU0gICAgICAgICAgcmVwb3J0IHRoaXMgc2NhbGUgZmFjdG9yIGluIG91dHB1 dFxuIg0KLQkJICAgIiAgLVMsIC0tc2VsZWN0LW9ubHkgICAgICAgIHBlcmZv cm0gU0VMRUNULW9ubHkgdHJhbnNhY3Rpb25zXG4iDQorCQkgICAiICAtUywg LS1zZWxlY3Qtb25seSAgICAgICAgc2FtZSBhcyBcIi1iIHNlbGVjdC1vbmx5 QDFcIlxuIg0KIAkJICAgIiAgLXQsIC0tdHJhbnNhY3Rpb25zPU5VTSAgIG51 bWJlciBvZiB0cmFuc2FjdGlvbnMgZWFjaCBjbGllbnQgcnVucyAoZGVmYXVs dDogMTApXG4iDQogCQkgIiAgLVQsIC0tdGltZT1OVU0gICAgICAgICAgIGR1 cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0IGluIHNlY29uZHNcbiINCiAJCSAg ICIgIC12LCAtLXZhY3V1bS1hbGwgICAgICAgICB2YWN1dW0gYWxsIGZvdXIg c3RhbmRhcmQgdGFibGVzIGJlZm9yZSB0ZXN0c1xuIg0KIAkJICAgIiAgLS1h Z2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBkYXRhIG92ZXIgTlVN IHNlY29uZHNcbiINCiAJCSAgICIgIC0tc2FtcGxpbmctcmF0ZT1OVU0gICAg ICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8gbG9nIChlLmcuIDAuMDEg Zm9yIDElJSlcbiINCisJCSAgICIgIC0tcGVyLXNjcmlwdC1zdGF0cyAgICAg ICByZXBvcnQgcGVyLXNjcmlwdCBzdGF0aXN0aWNzXG4iDQogCQkgICAiXG5D b21tb24gb3B0aW9uczpcbiINCiAJCSAgICIgIC1kLCAtLWRlYnVnICAgICAg ICAgICAgICBwcmludCBkZWJ1Z2dpbmcgb3V0cHV0XG4iDQogCSAgIiAgLWgs IC0taG9zdD1IT1NUTkFNRSAgICAgIGRhdGFiYXNlIHNlcnZlciBob3N0IG9y IHNvY2tldCBkaXJlY3RvcnlcbiINCkBAIC01NzgsNiArNjE4LDQ5IEBAIGdl dFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBjZW50ZXIpDQog CXJldHVybiAoaW50NjQpICgtbG9nKHVuaWZvcm0pICogKChkb3VibGUpIGNl bnRlcikgKyAwLjUpOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK2luaXRTaW1w bGVTdGF0cyhTaW1wbGVTdGF0cyAqIHNzKQ0KK3sNCisJbWVtc2V0KHNzLCAw LCBzaXplb2YoU2ltcGxlU3RhdHMpKTsNCit9DQorDQorc3RhdGljIHZvaWQN Citkb1NpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICpzcywgZG91YmxlIHZhbCkN Cit7DQorCWlmIChzcy0+Y291bnQgPT0gMCB8fCB2YWwgPCBzcy0+bWluKQ0K KwkJc3MtPm1pbiA9IHZhbDsNCisJaWYgKHNzLT5jb3VudCA9PSAwIHx8IHZh bCA+IHNzLT5tYXgpDQorCQlzcy0+bWF4ID0gdmFsOw0KKwlzcy0+Y291bnQg Kys7DQorCXNzLT5zdW0gKz0gdmFsOw0KKwlzcy0+c3VtMiArPSB2YWwgKiB2 YWw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorYXBwZW5kU2ltcGxlU3RhdHMo U2ltcGxlU3RhdHMgKmFjYywgU2ltcGxlU3RhdHMgKnNzKQ0KK3sNCisJaWYg KGFjYy0+Y291bnQgPT0gMCB8fCBzcy0+bWluIDwgYWNjLT5taW4pDQorCQlh Y2MtPm1pbiA9IHNzLT5taW47DQorCWlmIChhY2MtPmNvdW50ID09IDAgfHwg c3MtPm1heCA+IGFjYy0+bWF4KQ0KKwkJYWNjLT5tYXggPSBzcy0+bWF4Ow0K KwlhY2MtPmNvdW50ICs9IHNzLT5jb3VudDsNCisJYWNjLT5zdW0gKz0gc3Mt PnN1bTsNCisJYWNjLT5zdW0yICs9IHNzLT5zdW0yOw0KK30NCisNCitzdGF0 aWMgdm9pZA0KK2luaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCBkb3VibGUgc3Rh cnRfdGltZSkNCit7DQorCXNkLT5jbnQgPSAwOw0KKwlzZC0+c2tpcHBlZCA9 IDA7DQorCWluaXRTaW1wbGVTdGF0cygmIHNkLT5sYXRlbmN5KTsNCisJaW5p dFNpbXBsZVN0YXRzKCYgc2QtPmxhZyk7DQorDQorCS8qIG5vdCBuZWNlc3Nh cmlseSBvdmVycmlkZW4/ICovDQorCWlmIChzdGFydF90aW1lKQ0KKwkJc2Qt PnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOw0KK30NCisNCiAvKiBjYWxsIFBR ZXhlYygpIGFuZCBleGl0KCkgb24gZmFpbHVyZSAqLw0KIHN0YXRpYyB2b2lk DQogZXhlY3V0ZVN0YXRlbWVudChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAq c3FsKQ0KQEAgLTEwOTcsMzMgKzExODAsMjEgQEAgY2xpZW50RG9uZShDU3Rh dGUgKnN0LCBib29sIG9rKQ0KIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGFsd2F5 cyBmYWxzZSAqLw0KIH0NCiANCi1zdGF0aWMgdm9pZA0KLWFnZ192YWxzX2lu aXQoQWdnVmFscyAqYWdncywgaW5zdHJfdGltZSBzdGFydCkNCitzdGF0aWMg aW50DQorY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFkKQ0KIHsNCi0JLyog YmFzaWMgY291bnRlcnMgKi8NCi0JYWdncy0+Y250ID0gMDsJCQkJLyogbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyAoaW5jbHVkZXMgc2tpcHBlZCkgKi8NCi0J YWdncy0+c2tpcHBlZCA9IDA7CQkJLyogeGFjdHMgc2tpcHBlZCB1bmRlciAt LXJhdGUgLS1sYXRlbmN5LWxpbWl0ICovDQotDQotCWFnZ3MtPnN1bV9sYXRl bmN5ID0gMDsJCS8qIFNVTShsYXRlbmN5KSAqLw0KLQlhZ2dzLT5zdW0yX2xh dGVuY3kgPSAwOwkJLyogU1VNKGxhdGVuY3kqbGF0ZW5jeSkgKi8NCi0NCi0J LyogbWluIGFuZCBtYXggdHJhbnNhY3Rpb24gZHVyYXRpb24gKi8NCi0JYWdn cy0+bWluX2xhdGVuY3kgPSAwOw0KLQlhZ2dzLT5tYXhfbGF0ZW5jeSA9IDA7 DQorCWludCBpID0gMCwgdyA9IDAsIHdjID0gKGludCkgZ2V0cmFuZCh0aHJl YWQsIDAsIHRvdGFsX3dlaWdodCAtIDEpOw0KIA0KLQkvKiBzY2hlZHVsZSBs YWcgY291bnRlcnMgKi8NCi0JYWdncy0+c3VtX2xhZyA9IDA7DQotCWFnZ3Mt PnN1bTJfbGFnID0gMDsNCi0JYWdncy0+bWluX2xhZyA9IDA7DQotCWFnZ3Mt Pm1heF9sYWcgPSAwOw0KKwlkbyB7DQorCQl3ICs9IHNxbF9zY3JpcHRbaSsr XS53ZWlnaHQ7DQorCX0gd2hpbGUgKHcgPD0gd2MpOw0KIA0KLQkvKiBzdGFy dCBvZiB0aGUgY3VycmVudCBpbnRlcnZhbCAqLw0KLQlhZ2dzLT5zdGFydF90 aW1lID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0YXJ0KTsNCisJcmV0dXJu IGkgLSAxOw0KIH0NCiANCiAvKiByZXR1cm4gZmFsc2UgaWZmIGNsaWVudCBz aG91bGQgYmUgZGlzY29ubmVjdGVkICovDQogc3RhdGljIGJvb2wNCi1kb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAq Y29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBBZ2dWYWxzICphZ2cpDQorZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUg KmNvbm5fdGltZSwgRklMRSAqbG9nZmlsZSwgU3RhdHNEYXRhICphZ2cpDQog ew0KIAlQR3Jlc3VsdCAgICpyZXM7DQogCUNvbW1hbmQgICAqKmNvbW1hbmRz Ow0KQEAgLTExNDEsNyArMTIxMiw3IEBAIGRvQ3VzdG9tKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90aW1lICpjb25uX3RpbWUsIEZJTEUg KmxvZ2ZpbGUsIEFnZ1ZhDQogdG9wOg0KIAlJTlNUUl9USU1FX1NFVF9aRVJP KG5vdyk7DQogDQotCWNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmls ZV07DQorCWNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNv bW1hbmRzOw0KIA0KIAkvKg0KIAkgKiBIYW5kbGUgdGhyb3R0bGluZyBvbmNl IHBlciB0cmFuc2FjdGlvbiBieSBzbGVlcGluZy4gIEl0IGlzIHNpbXBsZXIg dG8NCkBAIC0xMTc3LDE4ICsxMjQ4LDE1IEBAIHRvcDoNCiAJCQlub3dfdXMg PSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cpOw0KIAkJCXdoaWxlICh0 aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgPCBub3dfdXMgLSBsYXRlbmN5X2xp bWl0KQ0KIAkJCXsNCi0JCQkJdGhyZWFkLT50aHJvdHRsZV9sYXRlbmN5X3Nr aXBwZWQrKzsNCi0NCi0JCQkJaWYgKGxvZ2ZpbGUpDQotCQkJCQlkb0xvZyh0 aHJlYWQsIHN0LCBsb2dmaWxlLCAmbm93LCBhZ2csIHRydWUpOw0KLQ0KKwkJ CQlkb1R4U3RhdHModGhyZWFkLCBzdCwgICZub3csIHRydWUsIGxvZ2ZpbGUs IGFnZyk7DQorCQkJCS8qIG5leHQgcmVuZGV6LXZvdXMgKi8NCiAJCQkJd2Fp dCA9IGdldFBvaXNzb25SYW5kKHRocmVhZCwgdGhyb3R0bGVfZGVsYXkpOw0K IAkJCQl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgKz0gd2FpdDsNCiAJCQkJ c3QtPnR4bl9zY2hlZHVsZWQgPSB0aHJlYWQtPnRocm90dGxlX3RyaWdnZXI7 DQogCQkJfQ0KIAkJfQ0KIA0KLQkJc3QtPnNsZWVwaW5nID0gMTsNCisJCXN0 LT5zbGVlcGluZyA9IHRydWU7DQogCQlzdC0+dGhyb3R0bGluZyA9IHRydWU7 DQogCQlzdC0+aXNfdGhyb3R0bGVkID0gdHJ1ZTsNCiAJCWlmIChkZWJ1ZykN CkBAIC0xMTk4LDI3ICsxMjY2LDEzIEBAIHRvcDoNCiANCiAJaWYgKHN0LT5z bGVlcGluZykNCiAJewkJCQkJCQkvKiBhcmUgd2Ugc2xlZXBpbmc/ICovDQot CQlpbnQ2NAkJbm93X3VzOw0KLQ0KIAkJaWYgKElOU1RSX1RJTUVfSVNfWkVS Tyhub3cpKQ0KIAkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCi0J CW5vd191cyA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdyk7DQotCQlp ZiAoc3QtPnR4bl9zY2hlZHVsZWQgPD0gbm93X3VzKQ0KLQkJew0KLQkJCXN0 LT5zbGVlcGluZyA9IDA7CS8qIERvbmUgc2xlZXBpbmcsIGdvIGFoZWFkIHdp dGggbmV4dCBjb21tYW5kICovDQotCQkJaWYgKHN0LT50aHJvdHRsaW5nKQ0K LQkJCXsNCi0JCQkJLyogTWVhc3VyZSBsYWcgb2YgdGhyb3R0bGVkIHRyYW5z YWN0aW9uIHJlbGF0aXZlIHRvIHRhcmdldCAqLw0KLQkJCQlpbnQ2NAkJbGFn ID0gbm93X3VzIC0gc3QtPnR4bl9zY2hlZHVsZWQ7DQotDQotCQkJCXRocmVh ZC0+dGhyb3R0bGVfbGFnICs9IGxhZzsNCi0JCQkJaWYgKGxhZyA+IHRocmVh ZC0+dGhyb3R0bGVfbGFnX21heCkNCi0JCQkJCXRocmVhZC0+dGhyb3R0bGVf bGFnX21heCA9IGxhZzsNCi0JCQkJc3QtPnRocm90dGxpbmcgPSBmYWxzZTsN Ci0JCQl9DQotCQl9DQotCQllbHNlDQorCQlpZiAoSU5TVFJfVElNRV9HRVRf TUlDUk9TRUMobm93KSA8IHN0LT50eG5fc2NoZWR1bGVkKQ0KIAkJCXJldHVy biB0cnVlOwkJLyogU3RpbGwgc2xlZXBpbmcsIG5vdGhpbmcgdG8gZG8gaGVy ZSAqLw0KKwkJLyogRWxzZSBkb25lIHNsZWVwaW5nLCBnbyBhaGVhZCB3aXRo IG5leHQgY29tbWFuZCAqLw0KKwkJc3QtPnNsZWVwaW5nID0gZmFsc2U7DQor CQlzdC0+dGhyb3R0bGluZyA9IGZhbHNlOw0KIAl9DQogDQogCWlmIChzdC0+ bGlzdGVuKQ0KQEAgLTEyNDIsNDcgKzEyOTYsMjQgQEAgdG9wOg0KIAkJICov DQogCQlpZiAoaXNfbGF0ZW5jaWVzKQ0KIAkJew0KLQkJCWludAkJCWNudW0g PSBjb21tYW5kc1tzdC0+c3RhdGVdLT5jb21tYW5kX251bTsNCi0NCiAJCQlp ZiAoSU5TVFJfVElNRV9JU19aRVJPKG5vdykpDQogCQkJCUlOU1RSX1RJTUVf U0VUX0NVUlJFTlQobm93KTsNCi0JCQlJTlNUUl9USU1FX0FDQ1VNX0RJRkYo dGhyZWFkLT5leGVjX2VsYXBzZWRbY251bV0sDQotCQkJCQkJCQkgIG5vdywg c3QtPnN0bXRfYmVnaW4pOw0KLQkJCXRocmVhZC0+ZXhlY19jb3VudFtjbnVt XSsrOw0KKw0KKwkJCS8qIGFsdGhvdWdoIGEgbXV0ZXggd291bGQgbWFrZSBz ZW5zZSwgdGhlIGxpa2VseWhvb2Qgb2YgYW4gaXNzdWUNCisJCQkgKiBpcyBz bWFsbCBhbmQgdGhlc2UgYXJlIG9ubHkgc3RhdHMgd2hpY2ggbWF5IGJlIHNs aWdodGx5IGZhbHNlDQorCQkJICovDQorCQkJZG9TaW1wbGVTdGF0cygmIGNv bW1hbmRzW3N0LT5zdGF0ZV0tPnN0YXRzLA0KKwkJCQkJCSAgSU5TVFJfVElN RV9HRVRfRE9VQkxFKG5vdykgLQ0KKwkJCQkJCSAgSU5TVFJfVElNRV9HRVRf RE9VQkxFKHN0LT5zdG10X2JlZ2luKSk7DQogCQl9DQogDQogCQkvKiB0cmFu c2FjdGlvbiBmaW5pc2hlZDogY2FsY3VsYXRlIGxhdGVuY3kgYW5kIGxvZyB0 aGUgdHJhbnNhY3Rpb24gKi8NCiAJCWlmIChjb21tYW5kc1tzdC0+c3RhdGUg KyAxXSA9PSBOVUxMKQ0KIAkJew0KLQkJCS8qIG9ubHkgY2FsY3VsYXRlIGxh dGVuY3kgaWYgYW4gb3B0aW9uIGlzIHVzZWQgdGhhdCBuZWVkcyBpdCAqLw0K LQkJCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5 X2xpbWl0KQ0KLQkJCXsNCi0JCQkJaW50NjQJCWxhdGVuY3k7DQotDQotCQkJ CWlmIChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkNCi0JCQkJCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQobm93KTsNCi0NCi0JCQkJbGF0ZW5jeSA9IElOU1RS X1RJTUVfR0VUX01JQ1JPU0VDKG5vdykgLSBzdC0+dHhuX3NjaGVkdWxlZDsN Ci0NCi0JCQkJc3QtPnR4bl9sYXRlbmNpZXMgKz0gbGF0ZW5jeTsNCi0NCi0J CQkJLyoNCi0JCQkJICogWFhYIEluIGEgbG9uZyBiZW5jaG1hcmsgcnVuIG9m IGhpZ2gtbGF0ZW5jeSB0cmFuc2FjdGlvbnMsDQotCQkJCSAqIHRoaXMgaW50 NjQgYWRkaXRpb24gZXZlbnR1YWxseSBvdmVyZmxvd3MuICBGb3IgZXhhbXBs ZSwgMTAwDQotCQkJCSAqIHRocmVhZHMgcnVubmluZyAxMHMgdHJhbnNhY3Rp b25zIHdpbGwgb3ZlcmZsb3cgaXQgaW4gMi41Ng0KLQkJCQkgKiBob3Vycy4g IFdpdGggYSBtb3JlLXR5cGljYWwgT0xUUCB3b3JrbG9hZCBvZiAuMXMNCi0J CQkJICogdHJhbnNhY3Rpb25zLCBvdmVyZmxvdyB3b3VsZCB0YWtlIDI1NiBo b3Vycy4NCi0JCQkJICovDQotCQkJCXN0LT50eG5fc3FsYXRzICs9IGxhdGVu Y3kgKiBsYXRlbmN5Ow0KLQ0KLQkJCQkvKiByZWNvcmQgb3ZlciB0aGUgbGlt aXQgdHJhbnNhY3Rpb25zIGlmIG5lZWRlZC4gKi8NCi0JCQkJaWYgKGxhdGVu Y3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGltaXQpDQotCQkJCQl0 aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOw0KLQkJCX0NCi0NCi0JCQkvKiByZWNv cmQgdGhlIHRpbWUgaXQgdG9vayBpbiB0aGUgbG9nICovDQotCQkJaWYgKGxv Z2ZpbGUpDQotCQkJCWRvTG9nKHRocmVhZCwgc3QsIGxvZ2ZpbGUsICZub3cs IGFnZywgZmFsc2UpOw0KKwkJCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9k ZWxheSB8fCBsYXRlbmN5X2xpbWl0IHx8IHBlcl9zY3JpcHRfc3RhdHMgfHwg bG9nZmlsZSkNCisJCQkJZG9UeFN0YXRzKHRocmVhZCwgc3QsICZub3csIGZh bHNlLCBsb2dmaWxlLCBhZ2cpOw0KKwkJCWVsc2UNCisJCQkJdGhyZWFkLT5z dGF0cy5jbnQgKys7DQogCQl9DQogDQogCQlpZiAoY29tbWFuZHNbc3QtPnN0 YXRlXS0+dHlwZSA9PSBTUUxfQ09NTUFORCkNCkBAIC0xMzI1LDggKzEzNTYs OSBAQCB0b3A6DQogCQlpZiAoY29tbWFuZHNbc3QtPnN0YXRlXSA9PSBOVUxM KQ0KIAkJew0KIAkJCXN0LT5zdGF0ZSA9IDA7DQotCQkJc3QtPnVzZV9maWxl ID0gKGludCkgZ2V0cmFuZCh0aHJlYWQsIDAsIG51bV9maWxlcyAtIDEpOw0K LQkJCWNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmlsZV07DQorCQkJ c3QtPnVzZV9maWxlID0gbnVtX3NjcmlwdHM9PTE/IDA6IGNob29zZVNjcmlw dCh0aHJlYWQpOw0KKw0KKwkJCWNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+ dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCXN0LT5pc190aHJvdHRsZWQgPSBm YWxzZTsNCiANCiAJCQkvKg0KQEAgLTEzNjksNyArMTQwMSw3IEBAIHRvcDoN CiAJfQ0KIA0KIAkvKiBSZWNvcmQgdHJhbnNhY3Rpb24gc3RhcnQgdGltZSB1 bmRlciBsb2dnaW5nLCBwcm9ncmVzcyBvciB0aHJvdHRsaW5nICovDQotCWlm ICgobG9nZmlsZSB8fCBwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBs YXRlbmN5X2xpbWl0KSAmJiBzdC0+c3RhdGUgPT0gMCkNCisJaWYgKChsb2dm aWxlIHx8IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lf bGltaXQgfHwgcGVyX3NjcmlwdF9zdGF0cykgJiYgc3QtPnN0YXRlID09IDAp DQogCXsNCiAJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3QtPnR4bl9iZWdp bik7DQogDQpAQCAtMTY1Nyw3ICsxNjg5LDcgQEAgdG9wOg0KIA0KIAkJCUlO U1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCiAJCQlzdC0+dHhuX3NjaGVk dWxlZCA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdykgKyB1c2VjOw0K LQkJCXN0LT5zbGVlcGluZyA9IDE7DQorCQkJc3QtPnNsZWVwaW5nID0gdHJ1 ZTsNCiANCiAJCQlzdC0+bGlzdGVuID0gMTsNCiAJCX0NCkBAIC0xNjg5LDIy ICsxNzIxLDM5IEBAIHRvcDoNCiAJCQllbHNlCS8qIHN1Y2NlZWRlZCAqLw0K IAkJCQlzdC0+bGlzdGVuID0gMTsNCiAJCX0NCisNCisJCS8qIGFmdGVyIGEg bWV0YSBjb21tYW5kLCBpbW1lZGlhdGVseSBwcm9jZWVkIHdpdGggbmV4dCBj b21tYW5kICovDQogCQlnb3RvIHRvcDsNCiAJfQ0KIA0KIAlyZXR1cm4gdHJ1 ZTsNCiB9DQogDQorc3RhdGljIHZvaWQNCitkb1N0YXRzKFN0YXRzRGF0YSAq c3RhdHMsIGJvb2wgc2tpcHBlZCwgZG91YmxlIGxhdCwgZG91YmxlIGxhZykN Cit7DQorCXN0YXRzLT5jbnQgKys7DQorDQorCWlmIChza2lwcGVkKQ0KKwkJ Lyogbm8gbGF0ZW5jeSB0byByZWNvcmQgb24gc2tpcHBlZCB0cmFuc2FjdGlv bnMgKi8NCisJCXN0YXRzLT5za2lwcGVkICsrOw0KKwllbHNlDQorCXsNCisJ CWRvU2ltcGxlU3RhdHMoJiBzdGF0cy0+bGF0ZW5jeSwgbGF0KTsNCisNCisJ CS8qIGFuZCBwb3NzaWJseSB0aGUgc2FtZSBmb3Igc2NoZWR1bGUgbGFnICov DQorCQlpZiAodGhyb3R0bGVfZGVsYXkpDQorCQkJZG9TaW1wbGVTdGF0cygm IHN0YXRzLT5sYWcsIGxhZyk7DQorCX0NCit9DQorDQogLyoNCiAgKiBwcmlu dCBsb2cgZW50cnkgYWZ0ZXIgY29tcGxldGluZyBvbmUgdHJhbnNhY3Rpb24u DQogICovDQogc3RhdGljIHZvaWQNCi1kb0xvZyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBB Z2dWYWxzICphZ2csDQotCSAgYm9vbCBza2lwcGVkKQ0KK2RvTG9nKFRTdGF0 ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90 aW1lICpub3csDQorCSAgU3RhdHNEYXRhICphZ2csIGJvb2wgc2tpcHBlZCwg ZG91YmxlIGxhdGVuY3ksIGRvdWJsZSBsYWcpDQogew0KLQlkb3VibGUJCWxh ZzsNCi0JZG91YmxlCQlsYXRlbmN5Ow0KLQ0KIAkvKg0KIAkgKiBTa2lwIHRo ZSBsb2cgZW50cnkgaWYgc2FtcGxpbmcgaXMgZW5hYmxlZCBhbmQgdGhpcyBy b3cgZG9lc24ndCBiZWxvbmcNCiAJICogdG8gdGhlIHJhbmRvbSBzYW1wbGUu DQpAQCAtMTcxMywxNSArMTc2Miw2IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFk LCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3cs IEFnZ1ZhbHMgKmFnZywNCiAJCXBnX2VyYW5kNDgodGhyZWFkLT5yYW5kb21f c3RhdGUpID4gc2FtcGxlX3JhdGUpDQogCQlyZXR1cm47DQogDQotCWlmIChJ TlNUUl9USU1FX0lTX1pFUk8oKm5vdykpDQotCQlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKCpub3cpOw0KLQ0KLQlsYXRlbmN5ID0gKGRvdWJsZSkgKElOU1RS X1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQp Ow0KLQlpZiAoc2tpcHBlZCkNCi0JCWxhZyA9IGxhdGVuY3k7DQotCWVsc2UN Ci0JCWxhZyA9IChkb3VibGUpIChJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhz dC0+dHhuX2JlZ2luKSAtIHN0LT50eG5fc2NoZWR1bGVkKTsNCi0NCiAJLyog c2hvdWxkIHdlIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0cyBvciBub3Q/ICovDQog CWlmIChhZ2dfaW50ZXJ2YWwgPiAwKQ0KIAl7DQpAQCAtMTczMSwzOSArMTc3 MSw3IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxF ICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJ CSAqLw0KIAkJaWYgKGFnZy0+c3RhcnRfdGltZSArIGFnZ19pbnRlcnZhbCA+ PSBJTlNUUl9USU1FX0dFVF9ET1VCTEUoKm5vdykpDQogCQl7DQotCQkJYWdn LT5jbnQgKz0gMTsNCi0JCQlpZiAoc2tpcHBlZCkNCi0JCQl7DQotCQkJCS8q DQotCQkJCSAqIHRoZXJlIGlzIG5vIGxhdGVuY3kgdG8gcmVjb3JkIGlmIHRo ZSB0cmFuc2FjdGlvbiB3YXMNCi0JCQkJICogc2tpcHBlZA0KLQkJCQkgKi8N Ci0JCQkJYWdnLT5za2lwcGVkICs9IDE7DQotCQkJfQ0KLQkJCWVsc2UNCi0J CQl7DQotCQkJCWFnZy0+c3VtX2xhdGVuY3kgKz0gbGF0ZW5jeTsNCi0JCQkJ YWdnLT5zdW0yX2xhdGVuY3kgKz0gbGF0ZW5jeSAqIGxhdGVuY3k7DQotDQot CQkJCS8qIGZpcnN0IGluIHRoaXMgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi8N Ci0JCQkJaWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGF0ZW5jeSA8IGFnZy0+ bWluX2xhdGVuY3kpKQ0KLQkJCQkJYWdnLT5taW5fbGF0ZW5jeSA9IGxhdGVu Y3k7DQotDQotCQkJCWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhdGVuY3kg PiBhZ2ctPm1heF9sYXRlbmN5KSkNCi0JCQkJCWFnZy0+bWF4X2xhdGVuY3kg PSBsYXRlbmN5Ow0KLQ0KLQkJCQkvKiBhbmQgdGhlIHNhbWUgZm9yIHNjaGVk dWxlIGxhZyAqLw0KLQkJCQlpZiAodGhyb3R0bGVfZGVsYXkpDQotCQkJCXsN Ci0JCQkJCWFnZy0+c3VtX2xhZyArPSBsYWc7DQotCQkJCQlhZ2ctPnN1bTJf bGFnICs9IGxhZyAqIGxhZzsNCi0NCi0JCQkJCWlmICgoYWdnLT5jbnQgPT0g MSkgfHwgKGxhZyA8IGFnZy0+bWluX2xhZykpDQotCQkJCQkJYWdnLT5taW5f bGFnID0gbGFnOw0KLQkJCQkJaWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGFn ID4gYWdnLT5tYXhfbGFnKSkNCi0JCQkJCQlhZ2ctPm1heF9sYWcgPSBsYWc7 DQotCQkJCX0NCi0JCQl9DQorCQkJZG9TdGF0cyhhZ2csIHNraXBwZWQsIGxh dGVuY3ksIGxhZyk7DQogCQl9DQogCQllbHNlDQogCQl7DQpAQCAtMTc3OCw1 MiArMTc4NiwzNCBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICph Z2csDQogCQkJCSAqIHVzYWdlKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBoYW5k bGUgdGhpcyBpbiBhIHNwZWNpYWwgd2F5DQogCQkJCSAqIChzZWUgYmVsb3cp Lg0KIAkJCQkgKi8NCi0JCQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICVkICUu MGYgJS4wZiAlLjBmICUuMGYiLA0KKwkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIl bGQgIiBJTlQ2NF9GT1JNQVQgIiAlLjBmICUuMGYgJS4wZiAlLjBmIiwNCiAJ CQkJCQlhZ2ctPnN0YXJ0X3RpbWUsDQogCQkJCQkJYWdnLT5jbnQsDQotCQkJ CQkJYWdnLT5zdW1fbGF0ZW5jeSwNCi0JCQkJCQlhZ2ctPnN1bTJfbGF0ZW5j eSwNCi0JCQkJCQlhZ2ctPm1pbl9sYXRlbmN5LA0KLQkJCQkJCWFnZy0+bWF4 X2xhdGVuY3kpOw0KKwkJCQkJCWFnZy0+bGF0ZW5jeS5zdW0sDQorCQkJCQkJ YWdnLT5sYXRlbmN5LnN1bTIsDQorCQkJCQkJYWdnLT5sYXRlbmN5Lm1pbiwN CisJCQkJCQlhZ2ctPmxhdGVuY3kubWF4KTsNCiAJCQkJaWYgKHRocm90dGxl X2RlbGF5KQ0KIAkJCQl7DQogCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJS4w ZiAlLjBmICUuMGYgJS4wZiIsDQotCQkJCQkJCWFnZy0+c3VtX2xhZywNCi0J CQkJCQkJYWdnLT5zdW0yX2xhZywNCi0JCQkJCQkJYWdnLT5taW5fbGFnLA0K LQkJCQkJCQlhZ2ctPm1heF9sYWcpOw0KKwkJCQkJCQlhZ2ctPmxhZy5zdW0s DQorCQkJCQkJCWFnZy0+bGFnLnN1bTIsDQorCQkJCQkJCWFnZy0+bGFnLm1p biwNCisJCQkJCQkJYWdnLT5sYWcubWF4KTsNCiAJCQkJCWlmIChsYXRlbmN5 X2xpbWl0KQ0KLQkJCQkJCWZwcmludGYobG9nZmlsZSwgIiAlZCIsIGFnZy0+ c2tpcHBlZCk7DQorCQkJCQkJZnByaW50Zihsb2dmaWxlLCAiICIgSU5UNjRf Rk9STUFULCBhZ2ctPnNraXBwZWQpOw0KIAkJCQl9DQogCQkJCWZwdXRjKCdc bicsIGxvZ2ZpbGUpOw0KIA0KLQkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IGlu dGV2YWwgKi8NCi0JCQkJYWdnLT5zdGFydF90aW1lID0gYWdnLT5zdGFydF90 aW1lICsgYWdnX2ludGVydmFsOw0KKwkJCQkvKiBtb3ZlIHRvIHRoZSBuZXh0 IGludGVydmFsICovDQorCQkJCWFnZy0+c3RhcnRfdGltZSArPSBhZ2dfaW50 ZXJ2YWw7DQogDQogCQkJCS8qIHJlc2V0IGZvciAibm8gdHJhbnNhY3Rpb24i IGludGVydmFscyAqLw0KLQkJCQlhZ2ctPmNudCA9IDA7DQotCQkJCWFnZy0+ c2tpcHBlZCA9IDA7DQotCQkJCWFnZy0+bWluX2xhdGVuY3kgPSAwOw0KLQkJ CQlhZ2ctPm1heF9sYXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5zdW1fbGF0ZW5j eSA9IDA7DQotCQkJCWFnZy0+c3VtMl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdn LT5taW5fbGFnID0gMDsNCi0JCQkJYWdnLT5tYXhfbGFnID0gMDsNCi0JCQkJ YWdnLT5zdW1fbGFnID0gMDsNCi0JCQkJYWdnLT5zdW0yX2xhZyA9IDA7DQor CQkJCWluaXRTdGF0cyhhZ2csIDAuMCk7DQogCQkJfQ0KIA0KIAkJCS8qIHJl c2V0IHRoZSB2YWx1ZXMgdG8gaW5jbHVkZSBvbmx5IHRoZSBjdXJyZW50IHRy YW5zYWN0aW9uLiAqLw0KLQkJCWFnZy0+Y250ID0gMTsNCi0JCQlhZ2ctPnNr aXBwZWQgPSBza2lwcGVkID8gMSA6IDA7DQotCQkJYWdnLT5taW5fbGF0ZW5j eSA9IGxhdGVuY3k7DQotCQkJYWdnLT5tYXhfbGF0ZW5jeSA9IGxhdGVuY3k7 DQotCQkJYWdnLT5zdW1fbGF0ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRl bmN5Ow0KLQkJCWFnZy0+c3VtMl9sYXRlbmN5ID0gc2tpcHBlZCA/IDAuMCA6 IGxhdGVuY3kgKiBsYXRlbmN5Ow0KLQkJCWFnZy0+bWluX2xhZyA9IGxhZzsN Ci0JCQlhZ2ctPm1heF9sYWcgPSBsYWc7DQotCQkJYWdnLT5zdW1fbGFnID0g bGFnOw0KLQkJCWFnZy0+c3VtMl9sYWcgPSBsYWcgKiBsYWc7DQorCQkJZG9T dGF0cyhhZ2csIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQogCQl9DQogCX0N CiAJZWxzZQ0KQEAgLTE4MzMsMjEgKzE4MjMsMjEgQEAgZG9Mb2coVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3Rp bWUgKm5vdywgQWdnVmFscyAqYWdnLA0KIA0KIAkJLyogVGhpcyBpcyBtb3Jl IHRoYW4gd2UgcmVhbGx5IG91Z2h0IHRvIGtub3cgYWJvdXQgaW5zdHJfdGlt ZSAqLw0KIAkJaWYgKHNraXBwZWQpDQotCQkJZnByaW50Zihsb2dmaWxlLCAi JWQgJWQgc2tpcHBlZCAlZCAlbGQgJWxkIiwNCisJCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiIElOVDY0X0ZPUk1BVCAiIHNraXBwZWQgJWQgJWxkICVsZCIs DQogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSwNCiAJCQkJ CShsb25nKSBub3ctPnR2X3NlYywgKGxvbmcpIG5vdy0+dHZfdXNlYyk7DQog CQllbHNlDQotCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAl bGQgJWxkIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiIElOVDY0X0ZP Uk1BVCAiICUuMGYgJWQgJWxkICVsZCIsDQogCQkJCQlzdC0+aWQsIHN0LT5j bnQsIGxhdGVuY3ksIHN0LT51c2VfZmlsZSwNCiAJCQkJCShsb25nKSBub3ct PnR2X3NlYywgKGxvbmcpIG5vdy0+dHZfdXNlYyk7DQogI2Vsc2UNCiANCiAJ CS8qIE9uIFdpbmRvd3MsIGluc3RyX3RpbWUgZG9lc24ndCBwcm92aWRlIGEg dGltZXN0YW1wIGFueXdheSAqLw0KIAkJaWYgKHNraXBwZWQpDQotCQkJZnBy aW50Zihsb2dmaWxlLCAiJWQgJWQgc2tpcHBlZCAlZCAwIDAiLA0KKwkJCWZw cmludGYobG9nZmlsZSwgIiVkICJJTlQ2NF9GT1JNQVQiIHNraXBwZWQgJWQg MCAwIiwNCiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlKTsN CiAJCWVsc2UNCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAlZCAlLjBmICVk IDAgMCIsDQorCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIklOVDY0X0ZPUk1B VCIgJS4wZiAlZCAwIDAiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRl bmN5LCBzdC0+dXNlX2ZpbGUpOw0KICNlbmRpZg0KIAkJaWYgKHRocm90dGxl X2RlbGF5KQ0KQEAgLTE4NTYsNiArMTg0Niw0NCBAQCBkb0xvZyhUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGlt ZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCX0NCiB9DQogDQorLyoNCisgKiBl bmQgb2YgdHJhbnNhY3Rpb24gc3RhdGlzdGljcw0KKyAqLw0KK3N0YXRpYyB2 b2lkDQorZG9UeFN0YXRzKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBp bnN0cl90aW1lICpub3csDQorCQkgIGJvb2wgc2tpcHBlZCwgRklMRSAqbG9n ZmlsZSwgU3RhdHNEYXRhICphZ2cpDQorew0KKwlkb3VibGUgbGF0ZW5jeSA9 IDAuMCwgbGFnID0gMC4wOw0KKw0KKwlpZiAoKCFza2lwcGVkIHx8IGFnZ19p bnRlcnZhbCkgJiYgSU5TVFJfVElNRV9JU19aRVJPKCpub3cpKQ0KKwkJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93KTsNCisNCisJaWYgKCFza2lwcGVk KQ0KKwl7DQorCQkvKiBjb21wdXRlIGxhdGVuY3kgJiBsYWcgaWYgbmVlZGVk ICovDQorCQlsYXRlbmN5ID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoKm5v dykgLSBzdC0+dHhuX3NjaGVkdWxlZDsNCisJCWxhZyA9IElOU1RSX1RJTUVf R0VUX01JQ1JPU0VDKHN0LT50eG5fYmVnaW4pIC0gc3QtPnR4bl9zY2hlZHVs ZWQ7DQorCX0NCisNCisJaWYgKHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5 IHx8IGxhdGVuY3lfbGltaXQpDQorCXsNCisJCWRvU3RhdHMoJiB0aHJlYWQt PnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KKw0KKwkJLyogcmVj b3JkIG92ZXIgdGhlIGxpbWl0IHRyYW5zYWN0aW9ucyBpZiBuZWVkZWQuICov DQorCQlpZiAobGF0ZW5jeV9saW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9s aW1pdCkNCisJCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOw0KKwl9DQorCWVs c2UNCisJCXRocmVhZC0+c3RhdHMuY250ICsrOw0KKw0KKwlpZiAodXNlX2xv ZykNCisJCWRvTG9nKHRocmVhZCwgc3QsIGxvZ2ZpbGUsIG5vdywgYWdnLCBz a2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KKw0KKwlpZiAocGVyX3NjcmlwdF9z dGF0cykgLyogbXV0ZXg/IGhtbW0uLi4gdGhlc2UgYXJlIG9ubHkgc3RhdGlz dGljcyAqLw0KKwkJZG9TdGF0cygmIHNxbF9zY3JpcHRbc3QtPnVzZV9maWxl XS5zdGF0cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsNCit9DQorDQorDQog LyogZGlzY2FyZCBjb25uZWN0aW9ucyAqLw0KIHN0YXRpYyB2b2lkDQogZGlz Y29ubmVjdF9hbGwoQ1N0YXRlICpzdGF0ZSwgaW50IGxlbmd0aCkNCkBAIC0y MjUyLDYgKzIyODAsNyBAQCBwcm9jZXNzX2NvbW1hbmRzKGNoYXIgKmJ1Ziwg Y29uc3QgY2hhciAqc291cmNlLCBjb25zdCBpbnQgbGluZW5vKQ0KIAlteV9j b21tYW5kcy0+Y29tbWFuZF9udW0gPSBudW1fY29tbWFuZHMrKzsNCiAJbXlf Y29tbWFuZHMtPnR5cGUgPSAwOwkJLyogdW50aWwgc2V0ICovDQogCW15X2Nv bW1hbmRzLT5hcmdjID0gMDsNCisJaW5pdFNpbXBsZVN0YXRzKCYgbXlfY29t bWFuZHMtPnN0YXRzKTsNCiANCiAJaWYgKCpwID09ICdcXCcpDQogCXsNCkBA IC0yNDc2LDcgKzI1MDUsNyBAQCByZWFkX2xpbmVfZnJvbV9maWxlKEZJTEUg KmZkKQ0KIAlyZXR1cm4gTlVMTDsNCiB9DQogDQotc3RhdGljIGludA0KK3N0 YXRpYyBDb21tYW5kICoqDQogcHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1l KQ0KIHsNCiAjZGVmaW5lIENPTU1BTkRTX0FMTE9DX05VTSAxMjgNCkBAIC0y NDg0LDE1ICsyNTEzLDkgQEAgcHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1l KQ0KIAlDb21tYW5kICAgKipteV9jb21tYW5kczsNCiAJRklMRQkgICAqZmQ7 DQogCWludAkJCWxpbmVubywNCi0JCQkJaW5kZXg7DQorCQkJCWluZGV4LA0K KwkJCQlhbGxvY19udW07DQogCWNoYXIJICAgKmJ1ZjsNCi0JaW50CQkJYWxs b2NfbnVtOw0KLQ0KLQlpZiAobnVtX2ZpbGVzID49IE1BWF9GSUxFUykNCi0J ew0KLQkJZnByaW50ZihzdGRlcnIsICJhdCBtb3N0ICVkIFNRTCBmaWxlcyBh cmUgYWxsb3dlZFxuIiwgTUFYX0ZJTEVTKTsNCi0JCWV4aXQoMSk7DQotCX0N CiANCiAJYWxsb2NfbnVtID0gQ09NTUFORFNfQUxMT0NfTlVNOw0KIAlteV9j b21tYW5kcyA9IChDb21tYW5kICoqKSBwZ19tYWxsb2Moc2l6ZW9mKENvbW1h bmQgKikgKiBhbGxvY19udW0pOw0KQEAgLTI1MDQsNyArMjUyNyw3IEBAIHBy b2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiAJCWZwcmludGYoc3RkZXJy LCAiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVzXG4iLA0KIAkJCQlm aWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsNCiAJCXBnX2ZyZWUobXlfY29t bWFuZHMpOw0KLQkJcmV0dXJuIGZhbHNlOw0KKwkJcmV0dXJuIE5VTEw7DQog CX0NCiANCiAJbGluZW5vID0gMDsNCkBAIC0yNTM2LDEzICsyNTU5LDExIEBA IHByb2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiANCiAJbXlfY29tbWFu ZHNbaW5kZXhdID0gTlVMTDsNCiANCi0Jc3FsX2ZpbGVzW251bV9maWxlcysr XSA9IG15X2NvbW1hbmRzOw0KLQ0KLQlyZXR1cm4gdHJ1ZTsNCisJcmV0dXJu IG15X2NvbW1hbmRzOw0KIH0NCiANCiBzdGF0aWMgQ29tbWFuZCAqKg0KLXBy b2Nlc3NfYnVpbHRpbihjaGFyICp0YiwgY29uc3QgY2hhciAqc291cmNlKQ0K K3Byb2Nlc3NfYnVpbHRpbihjb25zdCBjaGFyICp0YiwgY29uc3QgY2hhciAq c291cmNlKQ0KIHsNCiAjZGVmaW5lIENPTU1BTkRTX0FMTE9DX05VTSAxMjgN CiANCkBAIC0yNTk2LDM1ICsyNjE3LDc3IEBAIHByb2Nlc3NfYnVpbHRpbihj aGFyICp0YiwgY29uc3QgY2hhciAqc291cmNlKQ0KIAlyZXR1cm4gbXlfY29t bWFuZHM7DQogfQ0KIA0KKy8qIFBvc3NpYnkgdHJ1bmNhdGUgb3B0aW9uIGFu ZCByZXR1cm4gd2VpZ2h0ICovDQorc3RhdGljIGludA0KK2dldFdlaWdodChj aGFyICpvcHRpb24pDQorew0KKwljaGFyICAgKnNlcDsNCisJaW50CQl3ZWln aHQ7DQorDQorCWlmICgoc2VwID0gc3RycmNocihvcHRpb24sIFdTRVApKSkN CisJew0KKwkJKnNlcCsrID0gJ1wwJzsNCisJCXdlaWdodCA9IGF0b2koc2Vw KTsNCisJCWlmICh3ZWlnaHQgPD0gMCkNCisJCXsNCisJCQlmcHJpbnRmKHN0 ZGVyciwNCisJCQkJCSJ3ZWlnaHQgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2 ZSwgZ290IFwiJXNcIlxuIiwgc2VwKTsNCisJCQlleGl0KDEpOw0KKwkJfQ0K Kwl9DQorCWVsc2UNCisJCXdlaWdodCA9IDE7DQorCXJldHVybiB3ZWlnaHQ7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorYWRkU2NyaXB0KGNvbnN0IGNoYXIg Km5hbWUsIENvbW1hbmQgKiogY29tbWFuZHMsIGludCB3ZWlnaHQpDQorew0K KwlpZiAoY29tbWFuZHMgPT0gTlVMTCkNCisJew0KKwkJZnByaW50ZihzdGRl cnIsICJlbXB0eSBjb21tYW5kcyBmb3IgJXNcbiIsIG5hbWUpOw0KKwkJZXhp dCgxKTsNCisJfQ0KKw0KKwlpZiAobnVtX3NjcmlwdHMgPj0gTUFYX1NDUklQ VFMpDQorCXsNCisJCWZwcmludGYoc3RkZXJyLCAiYXQgbW9zdCAlZCBTUUwg c2NyaXB0cyBhcmUgYWxsb3dlZFxuIiwgTUFYX1NDUklQVFMpOw0KKwkJZXhp dCgxKTsNCisJfQ0KKw0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5uYW1l ID0gbmFtZTsNCisJc3FsX3NjcmlwdFtudW1fc2NyaXB0c10ud2VpZ2h0ID0g d2VpZ2h0Ow0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5jb21tYW5kcyA9 IGNvbW1hbmRzOw0KKwlpbml0U3RhdHMoJiBzcWxfc2NyaXB0W251bV9zY3Jp cHRzXS5zdGF0cywgMC4wKTsNCisJbnVtX3NjcmlwdHMrKzsNCit9DQorDQor c3RhdGljIHZvaWQNCitwcmludFNpbXBsZVN0YXRzKGNoYXIgKnByZWZpeCwg U2ltcGxlU3RhdHMgKnNzKQ0KK3sNCisJLyogcHJpbnQgTmFOIGlmIG5vIHRy YW5zYWN0aW9ucyB3aGVyZSBleGVjdXRlZCAqLw0KKwlkb3VibGUgbGF0ZW5j eSA9IHNzLT5zdW0gLyBzcy0+Y291bnQ7DQorCWRvdWJsZSBzdGRkZXYgPSBz cXJ0KHNzLT5zdW0yIC8gc3MtPmNvdW50IC0gbGF0ZW5jeSpsYXRlbmN5KTsN CisJcHJpbnRmKCIlcyBhdmVyYWdlID0gJS4zZiBtc1xuIiwgcHJlZml4LCAw LjAwMSAqIGxhdGVuY3kpOw0KKwlwcmludGYoIiVzIHN0ZGRldiA9ICUuM2Yg bXNcbiIsIHByZWZpeCwgMC4wMDEgKiBzdGRkZXYpOw0KK30NCisNCiAvKiBw cmludCBvdXQgcmVzdWx0cyAqLw0KIHN0YXRpYyB2b2lkDQotcHJpbnRSZXN1 bHRzKGludCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVu dHMsDQotCQkJIFRTdGF0ZSAqdGhyZWFkcywgaW50IG50aHJlYWRzLA0KLQkJ CSBpbnN0cl90aW1lIHRvdGFsX3RpbWUsIGluc3RyX3RpbWUgY29ubl90b3Rh bF90aW1lLA0KLQkJCSBpbnQ2NCB0b3RhbF9sYXRlbmNpZXMsIGludDY0IHRv dGFsX3NxbGF0cywNCi0JCQkgaW50NjQgdGhyb3R0bGVfbGFnLCBpbnQ2NCB0 aHJvdHRsZV9sYWdfbWF4LA0KLQkJCSBpbnQ2NCB0aHJvdHRsZV9sYXRlbmN5 X3NraXBwZWQsIGludDY0IGxhdGVuY3lfbGF0ZSkNCitwcmludFJlc3VsdHMo VFN0YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1l IHRvdGFsX3RpbWUsDQorCQkJIGluc3RyX3RpbWUgY29ubl90b3RhbF90aW1l LCBpbnQgbGF0ZW5jeV9sYXRlKQ0KIHsNCiAJZG91YmxlCQl0aW1lX2luY2x1 ZGUsDQogCQkJCXRwc19pbmNsdWRlLA0KIAkJCQl0cHNfZXhjbHVkZTsNCi0J Y2hhcgkgICAqczsNCiANCiAJdGltZV9pbmNsdWRlID0gSU5TVFJfVElNRV9H RVRfRE9VQkxFKHRvdGFsX3RpbWUpOw0KLQl0cHNfaW5jbHVkZSA9IG5vcm1h bF94YWN0cyAvIHRpbWVfaW5jbHVkZTsNCi0JdHBzX2V4Y2x1ZGUgPSBub3Jt YWxfeGFjdHMgLyAodGltZV9pbmNsdWRlIC0NCisJdHBzX2luY2x1ZGUgPSB0 b3RhbC0+Y250IC8gdGltZV9pbmNsdWRlOw0KKwl0cHNfZXhjbHVkZSA9IHRv dGFsLT5jbnQgLyAodGltZV9pbmNsdWRlIC0NCiAJCQkJCQkoSU5TVFJfVElN RV9HRVRfRE9VQkxFKGNvbm5fdG90YWxfdGltZSkgLyBudGhyZWFkcykpOw0K IA0KLQlpZiAodHR5cGUgPT0gMCkNCi0JCXMgPSAiVFBDLUIgKHNvcnQgb2Yp IjsNCi0JZWxzZSBpZiAodHR5cGUgPT0gMikNCi0JCXMgPSAiVXBkYXRlIG9u bHkgcGdiZW5jaF9hY2NvdW50cyI7DQotCWVsc2UgaWYgKHR0eXBlID09IDEp DQotCQlzID0gIlNFTEVDVCBvbmx5IjsNCi0JZWxzZQ0KLQkJcyA9ICJDdXN0 b20gcXVlcnkiOw0KLQ0KLQlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVz XG4iLCBzKTsNCisJcHJpbnRmKCJ0cmFuc2FjdGlvbiB0eXBlOiAlc1xuIiwN CisJCSAgIG51bV9zY3JpcHRzID09IDE/IHNxbF9zY3JpcHRbMF0ubmFtZTog Im11bHRpcGxlIHNjcmlwdHMiKTsNCiAJcHJpbnRmKCJzY2FsaW5nIGZhY3Rv cjogJWRcbiIsIHNjYWxlKTsNCiAJcHJpbnRmKCJxdWVyeSBtb2RlOiAlc1xu IiwgUVVFUllNT0RFW3F1ZXJ5bW9kZV0pOw0KIAlwcmludGYoIm51bWJlciBv ZiBjbGllbnRzOiAlZFxuIiwgbmNsaWVudHMpOw0KQEAgLTI2MzIsNDkgKzI2 OTUsMzggQEAgcHJpbnRSZXN1bHRzKGludCB0dHlwZSwgaW50NjQgbm9ybWFs X3hhY3RzLCBpbnQgbmNsaWVudHMsDQogCWlmIChkdXJhdGlvbiA8PSAwKQ0K IAl7DQogCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgcGVyIGNs aWVudDogJWRcbiIsIG54YWN0cyk7DQotCQlwcmludGYoIm51bWJlciBvZiB0 cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiIElOVDY0X0ZPUk1B VCAiLyIgSU5UNjRfRk9STUFUICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3Rz LCAoaW50NjQpIG54YWN0cyAqIG5jbGllbnRzKTsNCisJCXByaW50ZigibnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICJJTlQ2 NF9GT1JNQVQiLyVkXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQsIG54YWN0cyAq IG5jbGllbnRzKTsNCiAJfQ0KIAllbHNlDQogCXsNCiAJCXByaW50ZigiZHVy YXRpb246ICVkIHNcbiIsIGR1cmF0aW9uKTsNCi0JCXByaW50ZigibnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRf Rk9STUFUICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3RzKTsNCisJCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6 ICJJTlQ2NF9GT1JNQVQiXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQpOw0KIAl9 DQogDQogCS8qIFJlbWFpbmluZyBzdGF0cyBhcmUgbm9uc2Vuc2ljYWwgaWYg d2UgZmFpbGVkIHRvIGV4ZWN1dGUgYW55IHhhY3RzICovDQotCWlmIChub3Jt YWxfeGFjdHMgPD0gMCkNCisJaWYgKHRvdGFsLT5jbnQgPD0gMCkNCiAJCXJl dHVybjsNCiANCiAJaWYgKHRocm90dGxlX2RlbGF5ICYmIGxhdGVuY3lfbGlt aXQpDQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgc2tpcHBl ZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsDQotCQkJICAgdGhy b3R0bGVfbGF0ZW5jeV9za2lwcGVkLA0KLQkJCSAgIDEwMC4wICogdGhyb3R0 bGVfbGF0ZW5jeV9za2lwcGVkIC8gKHRocm90dGxlX2xhdGVuY3lfc2tpcHBl ZCArIG5vcm1hbF94YWN0cykpOw0KKwkJcHJpbnRmKCJudW1iZXIgb2YgdHJh bnNhY3Rpb25zIHNraXBwZWQ6ICJJTlQ2NF9GT1JNQVQiICglLjNmICUlKVxu IiwNCisJCQkgICB0b3RhbC0+c2tpcHBlZCwNCisJCQkgICAxMDAuMCAqIHRv dGFsLT5za2lwcGVkIC8gKHRvdGFsLT5za2lwcGVkICsgdG90YWwtPmNudCkp Ow0KIA0KIAlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCXByaW50ZigibnVtYmVy IG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRlbmN5IGxp bWl0OiAiIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwNCisJCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBs YXRlbmN5IGxpbWl0OiAlZCAoJS4zZiAlJSlcbiIsDQogCQkJICAgbGF0ZW5j eV9saW1pdCAvIDEwMDAuMCwgbGF0ZW5jeV9sYXRlLA0KLQkJICAgMTAwLjAg KiBsYXRlbmN5X2xhdGUgLyAodGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkICsg bm9ybWFsX3hhY3RzKSk7DQorCQkgICAxMDAuMCAqIGxhdGVuY3lfbGF0ZSAv ICh0b3RhbC0+c2tpcHBlZCArIHRvdGFsLT5jbnQpKTsNCiANCiAJaWYgKHRo cm90dGxlX2RlbGF5IHx8IHByb2dyZXNzIHx8IGxhdGVuY3lfbGltaXQpDQot CXsNCi0JCS8qIGNvbXB1dGUgYW5kIHNob3cgbGF0ZW5jeSBhdmVyYWdlIGFu ZCBzdGFuZGFyZCBkZXZpYXRpb24gKi8NCi0JCWRvdWJsZQkJbGF0ZW5jeSA9 IDAuMDAxICogdG90YWxfbGF0ZW5jaWVzIC8gbm9ybWFsX3hhY3RzOw0KLQkJ ZG91YmxlCQlzcWxhdCA9IChkb3VibGUpIHRvdGFsX3NxbGF0cyAvIG5vcm1h bF94YWN0czsNCi0NCi0JCXByaW50ZigibGF0ZW5jeSBhdmVyYWdlOiAlLjNm IG1zXG4iDQotCQkJICAgImxhdGVuY3kgc3RkZGV2OiAlLjNmIG1zXG4iLA0K LQkJCSAgIGxhdGVuY3ksIDAuMDAxICogc3FydChzcWxhdCAtIDEwMDAwMDAu MCAqIGxhdGVuY3kgKiBsYXRlbmN5KSk7DQotCX0NCisJCXByaW50U2ltcGxl U3RhdHMoImxhdGVuY3kiLCAmIHRvdGFsLT5sYXRlbmN5KTsNCiAJZWxzZQ0K LQl7DQogCQkvKiBvbmx5IGFuIGF2ZXJhZ2UgbGF0ZW5jeSBjb21wdXRlZCBm cm9tIHRoZSBkdXJhdGlvbiBpcyBhdmFpbGFibGUgKi8NCiAJCXByaW50Zigi bGF0ZW5jeSBhdmVyYWdlOiAlLjNmIG1zXG4iLA0KLQkJCSAgIDEwMDAuMCAq IGR1cmF0aW9uICogbmNsaWVudHMgLyBub3JtYWxfeGFjdHMpOw0KLQl9DQor CQkJICAgMTAwMC4wICogZHVyYXRpb24gKiBuY2xpZW50cyAvIHRvdGFsLT5j bnQpOw0KIA0KIAlpZiAodGhyb3R0bGVfZGVsYXkpDQotCXsNCiAJCS8qDQog CQkgKiBSZXBvcnQgYXZlcmFnZSB0cmFuc2FjdGlvbiBsYWcgdW5kZXIgcmF0 ZSBsaW1pdCB0aHJvdHRsaW5nLiAgVGhpcw0KIAkJICogaXMgdGhlIGRlbGF5 IGJldHdlZW4gc2NoZWR1bGVkIGFuZCBhY3R1YWwgc3RhcnQgdGltZXMgZm9y IHRoZQ0KQEAgLTI2ODIsNTMgKzI3MzQsNDQgQEAgcHJpbnRSZXN1bHRzKGlu dCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQog CQkgKiB0aGUgZGF0YWJhc2UgbG9hZCwgb3IgdGhlIFBvaXNzb24gdGhyb3R0 bGluZyBwcm9jZXNzLg0KIAkJICovDQogCQlwcmludGYoInJhdGUgbGltaXQg c2NoZWR1bGUgbGFnOiBhdmcgJS4zZiAobWF4ICUuM2YpIG1zXG4iLA0KLQkJ CSAgIDAuMDAxICogdGhyb3R0bGVfbGFnIC8gbm9ybWFsX3hhY3RzLCAwLjAw MSAqIHRocm90dGxlX2xhZ19tYXgpOw0KLQl9DQorCQkJICAgMC4wMDEgKiB0 b3RhbC0+bGFnLnN1bSAvIHRvdGFsLT5jbnQsIDAuMDAxICogdG90YWwtPmxh Zy5tYXgpOw0KIA0KIAlwcmludGYoInRwcyA9ICVmIChpbmNsdWRpbmcgY29u bmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2luY2x1ZGUpOw0KIAlw cmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJs aXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOw0KIA0KLQkvKiBSZXBvcnQgcGVy LWNvbW1hbmQgbGF0ZW5jaWVzICovDQotCWlmIChpc19sYXRlbmNpZXMpDQor CS8qIFJlcG9ydCBwZXItZmlsZSBkYXRhICovDQorCWlmIChwZXJfc2NyaXB0 X3N0YXRzKQ0KIAl7DQotCQlpbnQJCQlpOw0KKwkJaW50IGk7DQogDQotCQlm b3IgKGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyBpKyspDQorCQlmb3IgKGkgPSAw OyBpIDwgbnVtX3NjcmlwdHM7IGkrKykNCiAJCXsNCi0JCQlDb21tYW5kICAg Kipjb21tYW5kczsNCisJCQlwcmludGYoIlNRTCBzY3JpcHQgJWQsIHdlaWdo dCAlZDogJXNcbiINCisJCQkJICAgIiAtICJJTlQ2NF9GT1JNQVQiIHRyYW5z YWN0aW9ucyAoJS4xZiUlIG9mIHRvdGFsLCB0cHMgPSAlZilcbiIsDQorCQkJ CSAgIGksIHNxbF9zY3JpcHRbaV0ud2VpZ2h0LCBzcWxfc2NyaXB0W2ldLm5h bWUsDQorCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250LA0KKwkJCQkg ICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250IC8gdG90YWwtPmNu dCwNCisJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0aW1lX2lu Y2x1ZGUpOw0KIA0KLQkJCWlmIChudW1fZmlsZXMgPiAxKQ0KLQkJCQlwcmlu dGYoInN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzLCBmaWxl ICVkOlxuIiwgaSArIDEpOw0KLQkJCWVsc2UNCi0JCQkJcHJpbnRmKCJzdGF0 ZW1lbnQgbGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczpcbiIpOw0KKwkJCWlm IChsYXRlbmN5X2xpbWl0KQ0KKwkJCQlwcmludGYoIiAtIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgc2tpcHBlZDogIklOVDY0X0ZPUk1BVCIgKCUuM2YlJSlc biIsDQorCQkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLnNraXBwZWQsDQor CQkJCQkgICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3RhdHMuc2tpcHBlZCAv DQorCQkJCQkgICAoc3FsX3NjcmlwdFtpXS5zdGF0cy5za2lwcGVkICsgc3Fs X3NjcmlwdFtpXS5zdGF0cy5jbnQpKTsNCiANCi0JCQlmb3IgKGNvbW1hbmRz ID0gc3FsX2ZpbGVzW2ldOyAqY29tbWFuZHMgIT0gTlVMTDsgY29tbWFuZHMr KykNCi0JCQl7DQotCQkJCUNvbW1hbmQgICAgKmNvbW1hbmQgPSAqY29tbWFu ZHM7DQotCQkJCWludAkJCWNudW0gPSBjb21tYW5kLT5jb21tYW5kX251bTsN Ci0JCQkJZG91YmxlCQl0b3RhbF90aW1lOw0KLQkJCQlpbnN0cl90aW1lCXRv dGFsX2V4ZWNfZWxhcHNlZDsNCi0JCQkJaW50CQkJdG90YWxfZXhlY19jb3Vu dDsNCi0JCQkJaW50CQkJdDsNCi0NCi0JCQkJLyogQWNjdW11bGF0ZSBwZXIt dGhyZWFkIGRhdGEgZm9yIGNvbW1hbmQgKi8NCi0JCQkJSU5TVFJfVElNRV9T RVRfWkVSTyh0b3RhbF9leGVjX2VsYXBzZWQpOw0KLQkJCQl0b3RhbF9leGVj X2NvdW50ID0gMDsNCi0JCQkJZm9yICh0ID0gMDsgdCA8IG50aHJlYWRzOyB0 KyspDQotCQkJCXsNCi0JCQkJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVh ZHNbdF07DQorCQkJcHJpbnRTaW1wbGVTdGF0cygiIC0gbGF0ZW5jeSIsICYg c3FsX3NjcmlwdFtpXS5zdGF0cy5sYXRlbmN5KTsNCiANCi0JCQkJCUlOU1RS X1RJTUVfQUREKHRvdGFsX2V4ZWNfZWxhcHNlZCwNCi0JCQkJCQkJCSAgIHRo cmVhZC0+ZXhlY19lbGFwc2VkW2NudW1dKTsNCi0JCQkJCXRvdGFsX2V4ZWNf Y291bnQgKz0gdGhyZWFkLT5leGVjX2NvdW50W2NudW1dOw0KLQkJCQl9DQor CQkJLyogUmVwb3J0IHBlci1jb21tYW5kIGxhdGVuY2llcyAqLw0KKwkJCWlm IChpc19sYXRlbmNpZXMpDQorCQkJew0KKwkJCQlDb21tYW5kICoqIGNvbTsN CiANCi0JCQkJaWYgKHRvdGFsX2V4ZWNfY291bnQgPiAwKQ0KLQkJCQkJdG90 YWxfdGltZSA9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKHRvdGFsX2V4ZWNf ZWxhcHNlZCkgLyAoZG91YmxlKSB0b3RhbF9leGVjX2NvdW50Ow0KLQkJCQll bHNlDQotCQkJCQl0b3RhbF90aW1lID0gMC4wOw0KKwkJCQlwcmludGYoIiAt IHBlciBjb21tYW5kIGxhdGVuY2llcyBpbiBtczpcbiIpOw0KIA0KLQkJCQlw cmludGYoIlx0JWZcdCVzXG4iLCB0b3RhbF90aW1lLCBjb21tYW5kLT5saW5l KTsNCisJCQkJZm9yIChjb20gPSBzcWxfc2NyaXB0W2ldLmNvbW1hbmRzOyAq Y29tICE9IE5VTEw7IGNvbSsrKQ0KKwkJCQkJcHJpbnRmKCIgICAlMTEuM2Yg ICVzXG4iLA0KKwkJCQkJCSAgIDEwMDAuMCAqICgqY29tKS0+c3RhdHMuc3Vt IC8gKCpjb20pLT5zdGF0cy5jb3VudCwNCisJCQkJCQkgICAoKmNvbSktPmxp bmUpOw0KIAkJCX0NCiAJCX0NCiAJfQ0KQEAgLTI3NDAsNiArMjc4Myw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIHsNCiAJc3RhdGljIHN0 cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7DQogCQkvKiBzeXN0ZW1h dGljIGxvbmcvc2hvcnQgbmFtZWQgb3B0aW9ucyAqLw0KKwkJeyJ0cGMtYiIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnQid9LA0KIAkJeyJjbGllbnQiLCByZXF1 aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2MnfSwNCiAJCXsiY29ubmVjdCIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnQyd9LA0KIAkJeyJkZWJ1ZyIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAnZCd9LA0KQEAgLTI3NTAsMTIgKzI3OTQsMTQgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl7ImluaXRpYWxpemUiLCBu b19hcmd1bWVudCwgTlVMTCwgJ2knfSwNCiAJCXsiam9icyIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnaid9LA0KIAkJeyJsb2ciLCBub19hcmd1bWVu dCwgTlVMTCwgJ2wnfSwNCisJCXsibGF0ZW5jeS1saW1pdCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnTCd9LA0KIAkJeyJuby12YWN1dW0iLCBub19h cmd1bWVudCwgTlVMTCwgJ24nfSwNCiAJCXsicG9ydCIsIHJlcXVpcmVkX2Fy Z3VtZW50LCBOVUxMLCAncCd9LA0KIAkJeyJwcm9ncmVzcyIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnUCd9LA0KIAkJeyJwcm90b2NvbCIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnTSd9LA0KIAkJeyJxdWlldCIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAncSd9LA0KIAkJeyJyZXBvcnQtbGF0ZW5jaWVzIiwg bm9fYXJndW1lbnQsIE5VTEwsICdyJ30sDQorCQl7InJhdGUiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwNCiAJCXsic2NhbGUiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwNCiAJCXsic2VsZWN0LW9ubHkiLCBu b19hcmd1bWVudCwgTlVMTCwgJ1MnfSwNCiAJCXsic2tpcC1zb21lLXVwZGF0 ZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ04nfSwNCkBAIC0yNzcwLDI1ICsy ODE2LDIwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJeyJ1 bmxvZ2dlZC10YWJsZXMiLCBub19hcmd1bWVudCwgJnVubG9nZ2VkX3RhYmxl cywgMX0sDQogCQl7InNhbXBsaW5nLXJhdGUiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgNH0sDQogCQl7ImFnZ3JlZ2F0ZS1pbnRlcnZhbCIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCA1fSwNCi0JCXsicmF0ZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnUid9LA0KLQkJeyJsYXRlbmN5LWxpbWl0Iiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdMJ30sDQorCQl7InBlci1zY3Jp cHQtc3RhdHMiLCBub19hcmd1bWVudCwgTlVMTCwgNn0sDQogCQl7TlVMTCwg MCwgTlVMTCwgMH0NCiAJfTsNCiANCiAJaW50CQkJYzsNCi0JaW50CQkJbmNs aWVudHMgPSAxOwkvKiBkZWZhdWx0IG51bWJlciBvZiBzaW11bGF0ZWQgY2xp ZW50cyAqLw0KLQlpbnQJCQludGhyZWFkcyA9IDE7CS8qIGRlZmF1bHQgbnVt YmVyIG9mIHRocmVhZHMgKi8NCiAJaW50CQkJaXNfaW5pdF9tb2RlID0gMDsJ CS8qIGluaXRpYWxpemUgbW9kZT8gKi8NCiAJaW50CQkJaXNfbm9fdmFjdXVt ID0gMDsJCS8qIG5vIHZhY3V1bSBhdCBhbGwgYmVmb3JlIHRlc3Rpbmc/ICov DQogCWludAkJCWRvX3ZhY3V1bV9hY2NvdW50cyA9IDA7IC8qIGRvIHZhY3V1 bSBhY2NvdW50cyBiZWZvcmUgdGVzdGluZz8gKi8NCi0JaW50CQkJdHR5cGUg PSAwOwkJLyogdHJhbnNhY3Rpb24gdHlwZS4gMDogVFBDLUIsIDE6IFNFTEVD VCBvbmx5LA0KLQkJCQkJCQkJICogMjogc2tpcCB1cGRhdGUgb2YgYnJhbmNo ZXMgYW5kIHRlbGxlcnMgKi8NCiAJaW50CQkJb3B0aW5kZXg7DQotCWNoYXIJ ICAgKmZpbGVuYW1lID0gTlVMTDsNCiAJYm9vbAkJc2NhbGVfZ2l2ZW4gPSBm YWxzZTsNCiANCiAJYm9vbAkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSBm YWxzZTsNCiAJYm9vbAkJaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCA9IGZh bHNlOw0KKwlib29sCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9IGZhbHNlOw0K IA0KIAlDU3RhdGUJICAgKnN0YXRlOwkJCS8qIHN0YXR1cyBvZiBjbGllbnRz ICovDQogCVRTdGF0ZQkgICAqdGhyZWFkczsJCS8qIGFycmF5IG9mIHRocmVh ZCAqLw0KQEAgLTI3OTYsMTMgKzI4MzcsMTAgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogCWluc3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHN0 YXJ0IHVwIHRpbWUgKi8NCiAJaW5zdHJfdGltZQl0b3RhbF90aW1lOw0KIAlp bnN0cl90aW1lCWNvbm5fdG90YWxfdGltZTsNCi0JaW50NjQJCXRvdGFsX3hh Y3RzID0gMDsNCi0JaW50NjQJCXRvdGFsX2xhdGVuY2llcyA9IDA7DQotCWlu dDY0CQl0b3RhbF9zcWxhdHMgPSAwOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFn ID0gMDsNCi0JaW50NjQJCXRocm90dGxlX2xhZ19tYXggPSAwOw0KLQlpbnQ2 NAkJdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkID0gMDsNCiAJaW50NjQJCWxh dGVuY3lfbGF0ZSA9IDA7DQorCVN0YXRzRGF0YQlzdGF0czsNCisJaW50CQkJ d2VpZ2h0Ow0KKwljaGFyCSAgICpkZXNjOw0KIA0KIAlpbnQJCQlpOw0KIAlp bnQJCQluY2xpZW50c19kZWFsdDsNCkBAIC0yODQ4LDcgKzI4ODYsNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJc3RhdGUgPSAoQ1N0YXRl ICopIHBnX21hbGxvYyhzaXplb2YoQ1N0YXRlKSk7DQogCW1lbXNldChzdGF0 ZSwgMCwgc2l6ZW9mKENTdGF0ZSkpOw0KIA0KLQl3aGlsZSAoKGMgPSBnZXRv cHRfbG9uZyhhcmdjLCBhcmd2LCAiaWg6bnZwOmRxU05jOmo6Q3JzOnQ6VDpV OmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkg IT0gLTEpDQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3Ys ICJpaDpudnA6ZHFiOlNOYzpqOkNyczp0OlQ6VTpsZjpEOkY6TTpQOlI6TDoi LCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQ0KIAl7DQogCQlz d2l0Y2ggKGMpDQogCQl7DQpAQCAtMjg3MCwxNCArMjkwOCw2IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCWNhc2UgJ2QnOg0KIAkJCQlk ZWJ1ZysrOw0KIAkJCQlicmVhazsNCi0JCQljYXNlICdTJzoNCi0JCQkJdHR5 cGUgPSAxOw0KLQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7 DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgJ04nOg0KLQkJCQl0dHlwZSA9IDI7 DQotCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJ YnJlYWs7DQogCQkJY2FzZSAnYyc6DQogCQkJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gdHJ1ZTsNCiAJCQkJbmNsaWVudHMgPSBhdG9pKG9wdGFyZyk7 DQpAQCAtMjkyOSw2ICsyOTU5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ3InOg0KIAkJCQliZW5j aG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJCXBlcl9zY3JpcHRf c3RhdHMgPSB0cnVlOw0KIAkJCQlpc19sYXRlbmNpZXMgPSB0cnVlOw0KIAkJ CQlicmVhazsNCiAJCQljYXNlICdzJzoNCkBAIC0yOTgwLDEyICszMDExLDMw IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCQlpbml0aWFs aXphdGlvbl9vcHRpb25fc2V0ID0gdHJ1ZTsNCiAJCQkJdXNlX3F1aWV0ID0g dHJ1ZTsNCiAJCQkJYnJlYWs7DQorCQkJCS8qIHdoYXQgdG8gcnVuKi8NCisJ CQljYXNlICdiJzoNCisJCQkJd2VpZ2h0ID0gZ2V0V2VpZ2h0KG9wdGFyZyk7 DQorCQkJCWFkZFNjcmlwdChkZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJ CQkJCSAgZmluZF9idWlsdGluKG9wdGFyZywgJmRlc2MpLCBkZXNjKSwgd2Vp Z2h0KTsNCisJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0K KwkJCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9IHRydWU7DQorCQkJCWJyZWFr Ow0KKwkJCWNhc2UgJ1MnOg0KKwkJCQlhZGRTY3JpcHQoZGVzYywgcHJvY2Vz c19idWlsdGluKA0KKwkJCQkJCQkgIGZpbmRfYnVpbHRpbigic2VsZWN0LW9u bHkiLCAmZGVzYyksIGRlc2MpLCAxKTsNCisJCQkJYmVuY2htYXJraW5nX29w dGlvbl9zZXQgPSB0cnVlOw0KKwkJCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9 IHRydWU7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgJ04nOg0KKwkJCQlhZGRT Y3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGluKA0KKwkJCQkJCQkgIGZpbmRf YnVpbHRpbigic2ltcGxlLXVwZGF0ZSIsICZkZXNjKSwgZGVzYyksIDEpOw0K KwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJCWlu dGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQogCQkJ Y2FzZSAnZic6DQorCQkJCXdlaWdodCA9IGdldFdlaWdodChvcHRhcmcpOw0K KwkJCQlhZGRTY3JpcHQob3B0YXJnLCBwcm9jZXNzX2ZpbGUob3B0YXJnKSwg d2VpZ2h0KTsNCiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVl Ow0KLQkJCQl0dHlwZSA9IDM7DQotCQkJCWZpbGVuYW1lID0gcGdfc3RyZHVw KG9wdGFyZyk7DQotCQkJCWlmIChwcm9jZXNzX2ZpbGUoZmlsZW5hbWUpID09 IGZhbHNlIHx8ICpzcWxfZmlsZXNbbnVtX2ZpbGVzIC0gMV0gPT0gTlVMTCkN Ci0JCQkJCWV4aXQoMSk7DQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ0QnOg0K IAkJCQl7DQpAQCAtMzAxNiw5ICszMDY1LDkgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpDQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ00nOg0KIAkJ CQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQotCQkJCWlmIChu dW1fZmlsZXMgPiAwKQ0KKwkJCQlpZiAobnVtX3NjcmlwdHMgPiAwKQ0KIAkJ CQl7DQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgInF1ZXJ5IG1vZGUgKC1NKSBz aG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSBhbnkgdHJhbnNhY3Rpb24gc2Ny aXB0cyAoLWYpXG4iKTsNCisJCQkJCWZwcmludGYoc3RkZXJyLCAicXVlcnkg bW9kZSAoLU0pIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIGFueSB0cmFu c2FjdGlvbiBzY3JpcHRzICgtZiBvciAtYilcbiIpOw0KIAkJCQkJZXhpdCgx KTsNCiAJCQkJfQ0KIAkJCQlmb3IgKHF1ZXJ5bW9kZSA9IDA7IHF1ZXJ5bW9k ZSA8IE5VTV9RVUVSWU1PREU7IHF1ZXJ5bW9kZSsrKQ0KQEAgLTMxMDgsNiAr MzE1Nyw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCQl9 DQogI2VuZGlmDQogCQkJCWJyZWFrOw0KKwkJCWNhc2UgNjoNCisJCQkJcGVy X3NjcmlwdF9zdGF0cyA9IHRydWU7DQorCQkJCWJyZWFrOw0KIAkJCWRlZmF1 bHQ6DQogCQkJCWZwcmludGYoc3RkZXJyLCBfKCJUcnkgXCIlcyAtLWhlbHBc IiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpLCBwcm9nbmFtZSk7DQogCQkJ CWV4aXQoMSk7DQpAQCAtMzExNSw2ICszMTY3LDE5IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQ0KIAkJfQ0KIAl9DQogDQorCS8qIHNldCBkZWZh dWx0IHNjcmlwdCBpZiBub25lICovDQorCWlmIChudW1fc2NyaXB0cyA9PSAw ICYmICFpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0KQ0KKwl7DQorCQlhZGRT Y3JpcHQoZGVzYywgcHJvY2Vzc19idWlsdGluKA0KKwkJCQkJICBmaW5kX2J1 aWx0aW4oInRwY2ItbGlrZSIsICZkZXNjKSwgZGVzYyksIDEpOw0KKwkJYmVu Y2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJaW50ZXJuYWxfc2Ny aXB0X3VzZWQgPSB0cnVlOw0KKwl9DQorDQorCS8qIGNvbXB1dGUgdG90YWxf d2VpZ2h0ICovDQorCWZvciAoaSA9IDA7IGkgPCBudW1fc2NyaXB0czsgaSsr KQ0KKwkJdG90YWxfd2VpZ2h0ICs9IHNxbF9zY3JpcHRbaV0ud2VpZ2h0Ow0K Kw0KIAkvKg0KIAkgKiBEb24ndCBuZWVkIG1vcmUgdGhyZWFkcyB0aGFuIHRo ZXJlIGFyZSBjbGllbnRzLiAgKFRoaXMgaXMgbm90IG1lcmVseSBhbg0KIAkg KiBvcHRpbWl6YXRpb247IHRocm90dGxlX2RlbGF5IGlzIGNhbGN1bGF0ZWQg aW5jb3JyZWN0bHkgYmVsb3cgaWYgc29tZQ0KQEAgLTMxOTksOCArMzI2NCw2 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkgKiBjaGFuZ2Vk IGFmdGVyIGZvcmsuDQogCSAqLw0KIAltYWluX3BpZCA9IChpbnQpIGdldHBp ZCgpOw0KLQlwcm9ncmVzc19uY2xpZW50cyA9IG5jbGllbnRzOw0KLQlwcm9n cmVzc19udGhyZWFkcyA9IG50aHJlYWRzOw0KIA0KIAlpZiAobmNsaWVudHMg PiAxKQ0KIAl7DQpAQCAtMzI0Myw3ICszMzA2LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpDQogCQlleGl0KDEpOw0KIAl9DQogDQotCWlmICh0 dHlwZSAhPSAzKQ0KKwlpZiAoaW50ZXJuYWxfc2NyaXB0X3VzZWQpDQogCXsN CiAJCS8qDQogCQkgKiBnZXQgdGhlIHNjYWxpbmcgZmFjdG9yIHRoYXQgc2hv dWxkIGJlIHNhbWUgYXMgY291bnQoKikgZnJvbQ0KQEAgLTMzMjAsMzEgKzMz ODMsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1lKTsNCiAJc3JhbmRvbSgodW5z aWduZWQgaW50KSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydF90aW1l KSk7DQogDQotCS8qIHByb2Nlc3MgYnVpbHRpbiBTUUwgc2NyaXB0cyAqLw0K LQlzd2l0Y2ggKHR0eXBlKQ0KLQl7DQotCQljYXNlIDA6DQotCQkJc3FsX2Zp bGVzWzBdID0gcHJvY2Vzc19idWlsdGluKHRwY19iLA0KLQkJCQkJCQkJCQkg ICAiPGJ1aWx0aW46IFRQQy1CIChzb3J0IG9mKT4iKTsNCi0JCQludW1fZmls ZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJY2FzZSAxOg0KLQkJCXNxbF9m aWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbihzZWxlY3Rfb25seSwNCi0JCQkJ CQkJCQkJICAgIjxidWlsdGluOiBzZWxlY3Qgb25seT4iKTsNCi0JCQludW1f ZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJY2FzZSAyOg0KLQkJCXNx bF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbihzaW1wbGVfdXBkYXRlLA0K LQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IHNpbXBsZSB1cGRhdGU+Iik7DQot CQkJbnVtX2ZpbGVzID0gMTsNCi0JCQlicmVhazsNCi0NCi0JCWRlZmF1bHQ6 DQotCQkJYnJlYWs7DQotCX0NCi0NCiAJLyogc2V0IHVwIHRocmVhZCBkYXRh IHN0cnVjdHVyZXMgKi8NCiAJdGhyZWFkcyA9IChUU3RhdGUgKikgcGdfbWFs bG9jKHNpemVvZihUU3RhdGUpICogbnRocmVhZHMpOw0KIAluY2xpZW50c19k ZWFsdCA9IDA7DQpAQCAtMzM2MCwzMiArMzM5OCwxMCBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikNCiAJCXRocmVhZC0+cmFuZG9tX3N0YXRlWzBd ID0gcmFuZG9tKCk7DQogCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsxXSA9IHJh bmRvbSgpOw0KIAkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMl0gPSByYW5kb20o KTsNCi0JCXRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkID0gMDsN CiAJCXRocmVhZC0+bGF0ZW5jeV9sYXRlID0gMDsNCisJCWluaXRTdGF0cygm IHRocmVhZC0+c3RhdHMsIDAuMCk7DQogDQogCQluY2xpZW50c19kZWFsdCAr PSB0aHJlYWQtPm5zdGF0ZTsNCi0NCi0JCWlmIChpc19sYXRlbmNpZXMpDQot CQl7DQotCQkJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIHRoZSB0aHJlYWQgdG8g c3RvcmUgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQotCQkJaW50CQkJdDsN Ci0NCi0JCQl0aHJlYWQtPmV4ZWNfZWxhcHNlZCA9IChpbnN0cl90aW1lICop DQotCQkJCXBnX21hbGxvYyhzaXplb2YoaW5zdHJfdGltZSkgKiBudW1fY29t bWFuZHMpOw0KLQkJCXRocmVhZC0+ZXhlY19jb3VudCA9IChpbnQgKikNCi0J CQkJcGdfbWFsbG9jKHNpemVvZihpbnQpICogbnVtX2NvbW1hbmRzKTsNCi0N Ci0JCQlmb3IgKHQgPSAwOyB0IDwgbnVtX2NvbW1hbmRzOyB0KyspDQotCQkJ ew0KLQkJCQlJTlNUUl9USU1FX1NFVF9aRVJPKHRocmVhZC0+ZXhlY19lbGFw c2VkW3RdKTsNCi0JCQkJdGhyZWFkLT5leGVjX2NvdW50W3RdID0gMDsNCi0J CQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJdGhyZWFkLT5leGVjX2Vs YXBzZWQgPSBOVUxMOw0KLQkJCXRocmVhZC0+ZXhlY19jb3VudCA9IE5VTEw7 DQotCQl9DQogCX0NCiANCiAJLyogYWxsIGNsaWVudHMgbXVzdCBiZSBhc3Np Z25lZCB0byBhIHRocmVhZCAqLw0KQEAgLTM0MjgsMTEgKzM0NDQsMTEgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogI2VuZGlmICAgLyogRU5B QkxFX1RIUkVBRF9TQUZFVFkgKi8NCiANCiAJLyogd2FpdCBmb3IgdGhyZWFk cyBhbmQgYWNjdW11bGF0ZSByZXN1bHRzICovDQorCWluaXRTdGF0cygmIHN0 YXRzLCAwLjApOw0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKGNvbm5fdG90YWxf dGltZSk7DQogCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0KIAl7 DQogCQlUU3RhdGUJICAgKnRocmVhZCA9ICZ0aHJlYWRzW2ldOw0KLQkJaW50 CQkJajsNCiANCiAjaWZkZWYgRU5BQkxFX1RIUkVBRF9TQUZFVFkNCiAJCWlm ICh0aHJlYWRzW2ldLnRocmVhZCA9PSBJTlZBTElEX1RIUkVBRCkNCkBAIC0z NDQ1LDIxICszNDYxLDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KIAkJKHZvaWQpIHRocmVhZFJ1bih0aHJlYWQpOw0KICNlbmRpZiAgIC8q IEVOQUJMRV9USFJFQURfU0FGRVRZICovDQogDQotCQkvKiB0aHJlYWQgbGV2 ZWwgc3RhdHMgKi8NCi0JCXRocm90dGxlX2xhZyArPSB0aHJlYWQtPnRocm90 dGxlX2xhZzsNCi0JCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCA9IHRocmVh ZHMtPnRocm90dGxlX2xhdGVuY3lfc2tpcHBlZDsNCi0JCWxhdGVuY3lfbGF0 ZSA9IHRocmVhZC0+bGF0ZW5jeV9sYXRlOw0KLQkJaWYgKHRocm90dGxlX2xh Z19tYXggPiB0aHJlYWQtPnRocm90dGxlX2xhZ19tYXgpDQotCQkJdGhyb3R0 bGVfbGFnX21heCA9IHRocmVhZC0+dGhyb3R0bGVfbGFnX21heDsNCisJCS8q IGFnZ3JlZ2F0ZSB0aHJlYWQgbGV2ZWwgc3RhdHMgKi8NCisJCWFwcGVuZFNp bXBsZVN0YXRzKCYgc3RhdHMubGF0ZW5jeSwgJiB0aHJlYWQtPnN0YXRzLmxh dGVuY3kpOw0KKwkJYXBwZW5kU2ltcGxlU3RhdHMoJiBzdGF0cy5sYWcsICYg dGhyZWFkLT5zdGF0cy5sYWcpOw0KKwkJc3RhdHMuY250ICs9IHRocmVhZC0+ c3RhdHMuY250Ow0KKwkJc3RhdHMuc2tpcHBlZCArPSB0aHJlYWQtPnN0YXRz LnNraXBwZWQ7DQorCQlsYXRlbmN5X2xhdGUgKz0gdGhyZWFkLT5sYXRlbmN5 X2xhdGU7DQogCQlJTlNUUl9USU1FX0FERChjb25uX3RvdGFsX3RpbWUsIHRo cmVhZC0+Y29ubl90aW1lKTsNCi0NCi0JCS8qIGNsaWVudC1sZXZlbCBzdGF0 cyAqLw0KLQkJZm9yIChqID0gMDsgaiA8IHRocmVhZC0+bnN0YXRlOyBqKysp DQotCQl7DQotCQkJdG90YWxfeGFjdHMgKz0gdGhyZWFkLT5zdGF0ZVtqXS5j bnQ7DQotCQkJdG90YWxfbGF0ZW5jaWVzICs9IHRocmVhZC0+c3RhdGVbal0u dHhuX2xhdGVuY2llczsNCi0JCQl0b3RhbF9zcWxhdHMgKz0gdGhyZWFkLT5z dGF0ZVtqXS50eG5fc3FsYXRzOw0KLQkJfQ0KIAl9DQogCWRpc2Nvbm5lY3Rf YWxsKHN0YXRlLCBuY2xpZW50cyk7DQogDQpAQCAtMzQ3NSwxMCArMzQ4Myw3 IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkgKi8NCiAJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVCh0b3RhbF90aW1lKTsNCiAJSU5TVFJfVElN RV9TVUJUUkFDVCh0b3RhbF90aW1lLCBzdGFydF90aW1lKTsNCi0JcHJpbnRS ZXN1bHRzKHR0eXBlLCB0b3RhbF94YWN0cywgbmNsaWVudHMsIHRocmVhZHMs IG50aHJlYWRzLA0KLQkJCQkgdG90YWxfdGltZSwgY29ubl90b3RhbF90aW1l LCB0b3RhbF9sYXRlbmNpZXMsIHRvdGFsX3NxbGF0cywNCi0JCQkJIHRocm90 dGxlX2xhZywgdGhyb3R0bGVfbGFnX21heCwgdGhyb3R0bGVfbGF0ZW5jeV9z a2lwcGVkLA0KLQkJCQkgbGF0ZW5jeV9sYXRlKTsNCisJcHJpbnRSZXN1bHRz KHRocmVhZHMsICZzdGF0cywgdG90YWxfdGltZSwgY29ubl90b3RhbF90aW1l LCBsYXRlbmN5X2xhdGUpOw0KIA0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtMzQ5 OSwxMyArMzUwNCw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCWludDY0 CQl0aHJlYWRfc3RhcnQgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyh0aHJl YWQtPnN0YXJ0X3RpbWUpOw0KIAlpbnQ2NAkJbGFzdF9yZXBvcnQgPSB0aHJl YWRfc3RhcnQ7DQogCWludDY0CQluZXh0X3JlcG9ydCA9IGxhc3RfcmVwb3J0 ICsgKGludDY0KSBwcm9ncmVzcyAqIDEwMDAwMDA7DQotCWludDY0CQlsYXN0 X2NvdW50ID0gMCwNCi0JCQkJbGFzdF9sYXRzID0gMCwNCi0JCQkJbGFzdF9z cWxhdHMgPSAwLA0KLQkJCQlsYXN0X2xhZ3MgPSAwLA0KLQkJCQlsYXN0X3Nr aXBwZWQgPSAwOw0KLQ0KLQlBZ2dWYWxzCQlhZ2dzOw0KKwlTdGF0c0RhdGEJ bGFzdCwgYWdnczsNCiANCiAJLyoNCiAJICogSW5pdGlhbGl6ZSB0aHJvdHRs aW5nIHJhdGUgdGFyZ2V0IGZvciBhbGwgb2YgdGhlIHRocmVhZCdzIGNsaWVu dHMuICBJdA0KQEAgLTM1MTUsOCArMzUxNCw2IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCSAqLw0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0 KTsNCiAJdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyID0gSU5TVFJfVElNRV9H RVRfTUlDUk9TRUMoc3RhcnQpOw0KLQl0aHJlYWQtPnRocm90dGxlX2xhZyA9 IDA7DQotCXRocmVhZC0+dGhyb3R0bGVfbGFnX21heCA9IDA7DQogDQogCUlO U1RSX1RJTUVfU0VUX1pFUk8odGhyZWFkLT5jb25uX3RpbWUpOw0KIA0KQEAg LTM1NTMsMTYgKzM1NTAsMTcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJ SU5TVFJfVElNRV9TRVRfQ1VSUkVOVCh0aHJlYWQtPmNvbm5fdGltZSk7DQog CUlOU1RSX1RJTUVfU1VCVFJBQ1QodGhyZWFkLT5jb25uX3RpbWUsIHRocmVh ZC0+c3RhcnRfdGltZSk7DQogDQotCWFnZ192YWxzX2luaXQoJmFnZ3MsIHRo cmVhZC0+c3RhcnRfdGltZSk7DQorCWluaXRTdGF0cygmYWdncywgSU5TVFJf VElNRV9HRVRfRE9VQkxFKHRocmVhZC0+c3RhcnRfdGltZSkpOw0KKwlsYXN0 ID0gYWdnczsNCiANCiAJLyogc2VuZCBzdGFydCB1cCBxdWVyaWVzIGluIGFz eW5jIG1hbm5lciAqLw0KIAlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBpKysp DQogCXsNCiAJCUNTdGF0ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQlDb21t YW5kICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0K KwkJQ29tbWFuZCAgICoqY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2Vf ZmlsZV0uY29tbWFuZHM7DQogCQlpbnQJCQlwcmV2X2VjbnQgPSBzdC0+ZWNu dDsNCiANCi0JCXN0LT51c2VfZmlsZSA9IGdldHJhbmQodGhyZWFkLCAwLCBu dW1fZmlsZXMgLSAxKTsNCisJCXN0LT51c2VfZmlsZSA9IG51bV9zY3JpcHRz PT0xPyAwOiBjaG9vc2VTY3JpcHQodGhyZWFkKTsNCiAJCWlmICghZG9DdXN0 b20odGhyZWFkLCBzdCwgJnRocmVhZC0+Y29ubl90aW1lLCBsb2dmaWxlLCAm YWdncykpDQogCQkJcmVtYWlucy0tOwkJCS8qIEkndmUgYWJvcnRlZCAqLw0K IA0KQEAgLTM1OTAsNyArMzU4OCw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcp DQogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBpKyspDQogCQl7DQogCQkJ Q1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsNCi0JCQlDb21tYW5kICAgKipj b21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwkJCUNvbW1h bmQgICAqKmNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNv bW1hbmRzOw0KIAkJCWludAkJCXNvY2s7DQogDQogCQkJaWYgKHN0LT5jb24g PT0gTlVMTCkNCkBAIC0zNjAzLDcgKzM2MDEsNyBAQCB0aHJlYWRSdW4odm9p ZCAqYXJnKQ0KIAkJCQl7DQogCQkJCQkvKiBpbnRlcnJ1cHQgY2xpZW50IHdo aWNoIGhhcyBub3Qgc3RhcnRlZCBhIHRyYW5zYWN0aW9uICovDQogCQkJCQly ZW1haW5zLS07DQotCQkJCQlzdC0+c2xlZXBpbmcgPSAwOw0KKwkJCQkJc3Qt PnNsZWVwaW5nID0gZmFsc2U7DQogCQkJCQlzdC0+dGhyb3R0bGluZyA9IGZh bHNlOw0KIAkJCQkJUFFmaW5pc2goc3QtPmNvbik7DQogCQkJCQlzdC0+Y29u ID0gTlVMTDsNCkBAIC0zNjk2LDcgKzM2OTQsNyBAQCB0aHJlYWRSdW4odm9p ZCAqYXJnKQ0KIAkJZm9yIChpID0gMDsgaSA8IG5zdGF0ZTsgaSsrKQ0KIAkJ ew0KIAkJCUNTdGF0ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQkJQ29tbWFu ZCAgICoqY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJ CQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9m aWxlXS5jb21tYW5kczsNCiAJCQlpbnQJCQlwcmV2X2VjbnQgPSBzdC0+ZWNu dDsNCiANCiAJCQlpZiAoc3QtPmNvbiAmJiAoRkRfSVNTRVQoUFFzb2NrZXQo c3QtPmNvbiksICZpbnB1dF9tYXNrKQ0KQEAgLTM3MjcsMTEgKzM3MjUsNyBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCWlmIChub3cgPj0gbmV4dF9y ZXBvcnQpDQogCQkJew0KIAkJCQkvKiBnZW5lcmF0ZSBhbmQgc2hvdyByZXBv cnQgKi8NCi0JCQkJaW50NjQJCWNvdW50ID0gMCwNCi0JCQkJCQkJbGF0cyA9 IDAsDQotCQkJCQkJCXNxbGF0cyA9IDAsDQotCQkJCQkJCWxhZ3MgPSAwLA0K LQkJCQkJCQlza2lwcGVkID0gMDsNCisJCQkJU3RhdHNEYXRhICAgY3VyOw0K IAkJCQlpbnQ2NAkJcnVuID0gbm93IC0gbGFzdF9yZXBvcnQ7DQogCQkJCWRv dWJsZQkJdHBzLA0KIAkJCQkJCQl0b3RhbF9ydW4sDQpAQCAtMzc1MSwyMyAr Mzc0NSwyNCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCQkgKiAoSWYg YSByZWFkIGZyb20gYSA2NC1iaXQgaW50ZWdlciBpcyBub3QgYXRvbWljLCB5 b3UgbWlnaHQNCiAJCQkJICogZ2V0IGEgInRvcm4iIHJlYWQgYW5kIGNvbXBs ZXRlbHkgYm9ndXMgbGF0ZW5jaWVzIHRob3VnaCEpDQogCQkJCSAqLw0KLQkJ CQlmb3IgKGkgPSAwOyBpIDwgcHJvZ3Jlc3NfbmNsaWVudHM7IGkrKykNCisJ CQkJaW5pdFN0YXRzKCYgY3VyLCAwLjApOw0KKwkJCQlmb3IgKGkgPSAwOyBp IDwgbnRocmVhZHM7IGkrKykNCiAJCQkJew0KLQkJCQkJY291bnQgKz0gc3Rh dGVbaV0uY250Ow0KLQkJCQkJbGF0cyArPSBzdGF0ZVtpXS50eG5fbGF0ZW5j aWVzOw0KLQkJCQkJc3FsYXRzICs9IHN0YXRlW2ldLnR4bl9zcWxhdHM7DQor CQkJCQlhcHBlbmRTaW1wbGVTdGF0cygmIGN1ci5sYXRlbmN5LCAmIHRocmVh ZFtpXS5zdGF0cy5sYXRlbmN5KTsNCisJCQkJCWFwcGVuZFNpbXBsZVN0YXRz KCYgY3VyLmxhZywgJiB0aHJlYWRbaV0uc3RhdHMubGFnKTsNCisJCQkJCWN1 ci5jbnQgKz0gdGhyZWFkW2ldLnN0YXRzLmNudDsNCisJCQkJCWN1ci5za2lw cGVkICs9IHRocmVhZFtpXS5zdGF0cy5za2lwcGVkOw0KIAkJCQl9DQogDQot CQkJCWZvciAoaSA9IDA7IGkgPCBwcm9ncmVzc19udGhyZWFkczsgaSsrKQ0K LQkJCQkJbGFncyArPSB0aHJlYWRbaV0udGhyb3R0bGVfbGFnOw0KLQ0KIAkJ CQl0b3RhbF9ydW4gPSAobm93IC0gdGhyZWFkX3N0YXJ0KSAvIDEwMDAwMDAu MDsNCi0JCQkJdHBzID0gMTAwMDAwMC4wICogKGNvdW50IC0gbGFzdF9jb3Vu dCkgLyBydW47DQotCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChsYXRzIC0gbGFz dF9sYXRzKSAvIChjb3VudCAtIGxhc3RfY291bnQpOw0KLQkJCQlzcWxhdCA9 IDEuMCAqIChzcWxhdHMgLSBsYXN0X3NxbGF0cykgLyAoY291bnQgLSBsYXN0 X2NvdW50KTsNCisJCQkJdHBzID0gMTAwMDAwMC4wICogKGN1ci5jbnQgLSBs YXN0LmNudCkgLyBydW47DQorCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChjdXIu bGF0ZW5jeS5zdW0gLSBsYXN0LmxhdGVuY3kuc3VtKSAvDQorCQkJCQkoY3Vy LmNudCAtIGxhc3QuY250KTsNCisJCQkJc3FsYXQgPSAxLjAgKiAoY3VyLmxh dGVuY3kuc3VtMiAtIGxhc3QubGF0ZW5jeS5zdW0yKQ0KKwkJCQkJLyAoY3Vy LmNudCAtIGxhc3QuY250KTsNCiAJCQkJc3RkZXYgPSAwLjAwMSAqIHNxcnQo c3FsYXQgLSAxMDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSk7DQotCQkJ CWxhZyA9IDAuMDAxICogKGxhZ3MgLSBsYXN0X2xhZ3MpIC8gKGNvdW50IC0g bGFzdF9jb3VudCk7DQotCQkJCXNraXBwZWQgPSB0aHJlYWQtPnRocm90dGxl X2xhdGVuY3lfc2tpcHBlZCAtIGxhc3Rfc2tpcHBlZDsNCisJCQkJbGFnID0g MC4wMDEgKiAoY3VyLmxhZy5zdW0gLSBsYXN0LmxhZy5zdW0pIC8NCisJCQkJ CShjdXIuY250IC0gbGFzdC5jbnQpOw0KIA0KIAkJCQlmcHJpbnRmKHN0ZGVy ciwNCiAJCQkJCQkicHJvZ3Jlc3M6ICUuMWYgcywgJS4xZiB0cHMsICINCkBA IC0zNzc3LDE2ICszNzcyLDEzIEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQog CQkJCXsNCiAJCQkJCWZwcmludGYoc3RkZXJyLCAiLCBsYWcgJS4zZiBtcyIs IGxhZyk7DQogCQkJCQlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCQkJCQlmcHJp bnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkIiwgc2tp cHBlZCk7DQorCQkJCQkJZnByaW50ZihzdGRlcnIsICIsICJJTlQ2NF9GT1JN QVQiIHNraXBwZWQiLA0KKwkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNr aXBwZWQpOw0KIAkJCQl9DQogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsN CiANCi0JCQkJbGFzdF9jb3VudCA9IGNvdW50Ow0KLQkJCQlsYXN0X2xhdHMg PSBsYXRzOw0KLQkJCQlsYXN0X3NxbGF0cyA9IHNxbGF0czsNCi0JCQkJbGFz dF9sYWdzID0gbGFnczsNCisJCQkJbGFzdCA9IGN1cjsNCiAJCQkJbGFzdF9y ZXBvcnQgPSBub3c7DQotCQkJCWxhc3Rfc2tpcHBlZCA9IHRocmVhZC0+dGhy b3R0bGVfbGF0ZW5jeV9za2lwcGVkOw0KIA0KIAkJCQkvKg0KIAkJCQkgKiBF bnN1cmUgdGhhdCB0aGUgbmV4dCByZXBvcnQgaXMgaW4gdGhlIGZ1dHVyZSwg aW4gY2FzZQ0K --8323329-474080529-1438272238=:22793 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --8323329-474080529-1438272238=:22793--