Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZGR43-00030P-2D for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Jul 2015 12:17:59 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZGR42-0000gh-Je for pgsql-hackers@arkaria.postgresql.org; Sat, 18 Jul 2015 12:17:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZGR2V-0007ai-8A for pgsql-hackers@postgresql.org; Sat, 18 Jul 2015 12:16:23 +0000 Received: from jiboia.ensmp.fr ([194.214.158.103]) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZGR2Q-0001Xk-N3 for pgsql-hackers@postgresql.org; Sat, 18 Jul 2015 12:16:22 +0000 Received: from cri.ensmp.fr (host-217-194-190-63.sbs.redder.net [217.194.190.63] (may be forged)) (authenticated bits=0) by jiboia.ensmp.fr (8.15.1/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t6ICGFDi025334 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 18 Jul 2015 14:16:16 +0200 Date: Sat, 18 Jul 2015 14:16:15 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto Reply-To: Fabien COELHO To: PostgreSQL Developers Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1120704439-1437221777=:6263" X-Miltered: at jiboia.ensmp.fr with ID 55AA438F.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: 55AA438F.000 from [217.194.190.63]/host-217-194-190-63.sbs.redder.net/217.194.190.63/cri.ensmp.fr/ X-Pg-Spam-Score: -3.1 (---) 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-1120704439-1437221777=:6263 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Oops, as usual I forgot something... This v2 removes old stats code that was put in comment and simplify the logic when counting lag times, as they are now taken into account at the end of the transaction instead of at the beginning. > This patch adds per-script statistics & other improvements to pgbench > > Rationale: Josh asked for the per-script stats:-) > > Some restructuring is done so that all stats (-l --aggregate-interval > --progress --per-script-stats, latency & lag...) share the same structures > and functions to accumulate data. This limits a lot the growth of pgbench > from this patch (+17 lines). > > In passing, remove the distinction between internal and external scripts. > Pgbench just execute scripts, some of them may be internal... > > As a side effect, all scripts can be accumulated "pgbench -B -N -S -f ..." > would execute 4 scripts, 3 of which internal (tpc-b, simple-update, > select-only and another externally supplied one). > > Also add a weight option to change the probability of choosing some scripts > when several are available. > > Hmmm... Not sure that the --per-script-stats option is really useful. The > stats could always be shown when several scripts are executed? > > sh> ./pgbench -T 3 -B -N -w 2 -S -w 7 --per-script-stats > starting vacuum...end. > transaction type: multiple scripts > scaling factor: 1 > query mode: simple > number of clients: 1 > number of threads: 1 > duration: 3 s > number of transactions actually processed: 3192 > latency average: 0.940 ms > tps = 1063.756045 (including connections establishing) > tps = 1065.412737 (excluding connections establishing) > SQL script 0: > - weight is 1 > - 297 transactions (tps = 98.977301) > - latency average = 3.001 ms > - latency stddev = 1.320 ms > SQL script 1: > - weight is 2 > - 621 transactions (tps = 206.952539) > - latency average = 2.506 ms > - latency stddev = 1.194 ms > SQL script 2: > - weight is 7 > - 2274 transactions (tps = 757.826205) > - latency average = 0.236 ms > - latency stddev = 0.083 ms > > -- Fabien. --8323329-1120704439-1437221777=:6263 Content-Type: TEXT/x-diff; name=pgbench-script-stats-2.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-2.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu LmViNTcxYTggMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDE4IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LUI8L29wdGlvbj48L3Rlcm0+DQorICAgICAg PHRlcm0+PG9wdGlvbj4tLXRwYy1iPC9vcHRpb24+PC90ZXJtPg0KKyAgICAg IDxsaXN0aXRlbT4NCisgICAgICAgPHBhcmE+DQorICAgICAgICBCdWlsdC1p biBUUEMtQiBsaWtlIHRlc3Qgd2hpY2ggdXBkYXRlcyB0aHJlZSB0YWJsZXMg YW5kIHBlcmZvcm1zDQorICAgICAgICBhbiBpbnNlcnQgb24gYSBmb3VydGgu IFNlZSBiZWxvdyBmb3IgZGV0YWlscy4NCisgICAgICAgIFRoaXMgaXMgdGhl IGRlZmF1bHQgaWYgbm8gYmVuY2ggaXMgZXhwbGljaXRlbHkgc3BlY2lmaWVk Lg0KKyAgICAgICA8L3BhcmE+DQorICAgICAgPC9saXN0aXRlbT4NCisgICAg IDwvdmFybGlzdGVudHJ5Pg0KKw0KIA0KICAgICAgPHZhcmxpc3RlbnRyeT4N CiAgICAgICA8dGVybT48b3B0aW9uPi1jPC9vcHRpb24+IDxyZXBsYWNlYWJs ZT5jbGllbnRzPC8+PC90ZXJtPg0KQEAgLTMxMyw4ICszMjUsNyBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgICA8cGFyYT4N CiAgICAgICAgIFJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gPHJlcGxh Y2VhYmxlPmZpbGVuYW1lPC8+Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBk ZXRhaWxzLg0KLSAgICAgICAgPG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlv bj4tUzwvb3B0aW9uPiwgYW5kIDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAg ICAgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuDQorICAgICAgICBNdWx0aXBs ZSA8b3B0aW9uPi1mPC8+IG9wdGlvbnMgYXJlIGFsbG93ZWQuDQogICAgICAg IDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0 ZW50cnk+DQpAQCAtNDA0LDEwICs0MTUsMTAgQEAgcGdiZW5jaCA8b3B0aW9u YWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVybT48b3B0aW9uPi0tc2tp cC1zb21lLXVwZGF0ZXM8L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3Rp dGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIERvIG5vdCB1cGRhdGUg PHN0cnVjdG5hbWU+cGdiZW5jaF90ZWxsZXJzPC8+IGFuZA0KLSAgICAgICAg PHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPi4NCi0gICAgICAgIFRo aXMgd2lsbCBhdm9pZCB1cGRhdGUgY29udGVudGlvbiBvbiB0aGVzZSB0YWJs ZXMsIGJ1dA0KLSAgICAgICAgaXQgbWFrZXMgdGhlIHRlc3QgY2FzZSBldmVu IGxlc3MgbGlrZSBUUEMtQi4NCisgICAgICAgIEJ1aWx0LWluIHRlc3Qgd2hp Y2ggdXBkYXRlcyBvbmx5IG9uZSB0YWJsZSBjb21wYXJlZCB0byA8b3B0aW9u Pi1CPC8+Lg0KKyAgICAgICAgVGhpcyBhdm9pZHMgdXBkYXRlIGNvbnRlbnRp b24gb24gPHN0cnVjdG5hbWU+cGdiZW5jaF90ZWxsZXJzPC8+DQorICAgICAg ICBhbmQgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiwgYnV0IGl0 IG1ha2VzIHRoZSB0ZXN0IGNhc2UNCisgICAgICAgIGV2ZW4gbGVzcyBsaWtl IFRQQy1CLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9saXN0aXRlbT4N CiAgICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTQ5OSw5ICs1MTAsOSBAQCBw Z2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9v cHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgICAgUmVw b3J0IHRoZSBzcGVjaWZpZWQgc2NhbGUgZmFjdG9yIGluIDxhcHBsaWNhdGlv bj5wZ2JlbmNoPC8+J3MNCiAgICAgICAgIG91dHB1dC4gIFdpdGggdGhlIGJ1 aWx0LWluIHRlc3RzLCB0aGlzIGlzIG5vdCBuZWNlc3Nhcnk7IHRoZQ0KICAg ICAgICAgY29ycmVjdCBzY2FsZSBmYWN0b3Igd2lsbCBiZSBkZXRlY3RlZCBi eSBjb3VudGluZyB0aGUgbnVtYmVyIG9mDQotICAgICAgICByb3dzIGluIHRo ZSA8c3RydWN0bmFtZT5wZ2JlbmNoX2JyYW5jaGVzPC8+IHRhYmxlLiAgSG93 ZXZlciwgd2hlbiB0ZXN0aW5nDQotICAgICAgICBjdXN0b20gYmVuY2htYXJr cyAoPG9wdGlvbj4tZjwvPiBvcHRpb24pLCB0aGUgc2NhbGUgZmFjdG9yDQot ICAgICAgICB3aWxsIGJlIHJlcG9ydGVkIGFzIDEgdW5sZXNzIHRoaXMgb3B0 aW9uIGlzIHVzZWQuDQorICAgICAgICByb3dzIGluIHRoZSA8c3RydWN0bmFt ZT5wZ2JlbmNoX2JyYW5jaGVzPC8+IHRhYmxlLg0KKyAgICAgICAgSG93ZXZl ciwgd2hlbiB0ZXN0aW5nIG9ubHkgY3VzdG9tIGJlbmNobWFya3MgKDxvcHRp b24+LWY8Lz4gb3B0aW9uKSwNCisgICAgICAgIHRoZSBzY2FsZSBmYWN0b3Ig d2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlzIG9wdGlvbiBpcyB1 c2VkLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9saXN0aXRlbT4NCiAg ICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTUxMSw3ICs1MjIsNyBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1zZWxlY3Qtb25seTwvb3B0aW9uPjwvdGVybT4NCiAgICAgICA8 bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KLSAgICAgICAgUGVyZm9ybSBz ZWxlY3Qtb25seSB0cmFuc2FjdGlvbnMgaW5zdGVhZCBvZiBUUEMtQi1saWtl IHRlc3QuDQorICAgICAgICBCdWlsdC1pbiB0ZXN0IHdpdGggc2VsZWN0LW9u bHkgdHJhbnNhY3Rpb25zLg0KICAgICAgICA8L3BhcmE+DQogICAgICAgPC9s aXN0aXRlbT4NCiAgICAgIDwvdmFybGlzdGVudHJ5Pg0KQEAgLTU1Miw2ICs1 NjMsMjAgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRp b25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAg ICAgIDwvdmFybGlzdGVudHJ5Pg0KIA0KICAgICAgPHZhcmxpc3RlbnRyeT4N CisgICAgICA8dGVybT48b3B0aW9uPi13PC9vcHRpb24+PC90ZXJtPg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LS13ZWlnaHQ8L29wdGlvbj48L3Rlcm0+DQor ICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4NCisgICAgICAgIFNl dCB0aGUgaW50ZWdlciB3ZWlnaHQgZm9yIHRoZSBwcmV2aW91cyB0ZXN0IHNj cmlwdA0KKyAgICAgICAgKDxvcHRpb24+LUI8Lz4sIDxvcHRpb24+LU48Lz4s IDxvcHRpb24+LVM8Lz4gb3IgPG9wdGlvbj4tZjwvPikuDQorICAgICAgICBX aGVuIHNldmVyYWwgdGVzdCBzY3JpcHRzIGFyZSB1c2VkLCB0aGUgcmVsYXRp dmUgcHJvYmFiaWxpdHkgb2YNCisgICAgICAgIGRyYXdpbmcgZWFjaCB0ZXN0 IGlzIHByb3BvcnRpb25hbCB0byB0aGVzZSB3ZWlnaHRzLg0KKyAgICAgICAg VGhlIGRlZmF1bHQgd2VpZ2h0IGlzIDxsaXRlcmFsPjE8Lz4uDQorICAgICAg IDwvcGFyYT4NCisgICAgICA8L2xpc3RpdGVtPg0KKyAgICAgPC92YXJsaXN0 ZW50cnk+DQorDQorICAgICA8dmFybGlzdGVudHJ5Pg0KICAgICAgIDx0ZXJt PjxvcHRpb24+LS1hZ2dyZWdhdGUtaW50ZXJ2YWw9PHJlcGxhY2VhYmxlPnNl Y29uZHM8Lz48L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0K ICAgICAgICA8cGFyYT4NCkBAIC01NjcsNiArNTkyLDE2IEBAIHBnYmVuY2gg PG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFs PiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQogICAgICA8L3Zhcmxpc3RlbnRy eT4NCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+DQorICAgICAgPHRlcm0+PG9w dGlvbj4tLXBlci1zY3JpcHQtc3RhdHM8L29wdGlvbj48L3Rlcm0+DQorICAg ICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4NCisgICAgICAgIFJlcG9y dCBzb21lIHN0YXRpc3RpY3MgcGVyIHNjcmlwdCBydW4gYnkgcGdiZW5jaC4N CisgICAgICAgPC9wYXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8 L3Zhcmxpc3RlbnRyeT4NCisNCisNCisgICAgIDx2YXJsaXN0ZW50cnk+DQog ICAgICAgPHRlcm0+PG9wdGlvbj4tLXNhbXBsaW5nLXJhdGU9PHJlcGxhY2Vh YmxlPnJhdGU8Lz48L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVt Pg0KICAgICAgICA8cGFyYT4NCkBAIC02NjEsNyArNjk2LDE3IEBAIHBnYmVu Y2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlv bmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQogICA8dGl0bGU+V2hhdCBp cyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC8+IEFjdHVhbGx5IFBlcmZvcm1l ZCBpbiBwZ2JlbmNoPzwvdGl0bGU+DQogDQogICA8cGFyYT4NCi0gICBUaGUg ZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQgaXNzdWVzIHNldmVuIGNvbW1h bmRzIHBlciB0cmFuc2FjdGlvbjoNCisgICBQZ2JlbmNoIGV4ZWN1dGVzIHRl c3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkgZnJvbSBhIHNwZWNpZmllZCBs aXN0Lg0KKyAgIFRoZXkgaW5jbHVkZSBidWlsdC1pbiBzY3JpcHRzICg8b3B0 aW9uPi1CPC8+LCA8b3B0aW9uPi1OPC8+IGFuZA0KKyAgIDxvcHRpb24+LVM8 Lz4pIGFuZCBjdXN0b20gc2NyaXB0cyBwcm92aWRlZCBieSB0aGUgdXNlciB3 aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCB0ZXN0IG1heSBiZSBnaXZl biBhIHJlbGF0aXZlIHdlaWdodCAoPG9wdGlvbj4tdzwvPikNCisgICBzcGVj aWZpZWQgPGVtcGhhc2lzPmFmdGVyPC8+IHRoZSB0ZXN0IGFib3V0IHdoaWNo IGl0IGFwcGxpZXMgc28gYXMNCisgICB0byBjaGFuZ2UgaXRzIGRyYXcgcHJv YmFiaWxpdHkuDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRoZSBk ZWZhdWx0IHRyYW5zYWN0aW9uIHNjcmlwdCAoYWxzbyBpbnZva2VkIHdpdGgg PG9wdGlvbj4tQjwvPikNCisgICBpc3N1ZXMgc2V2ZW4gY29tbWFuZHMgcGVy IHRyYW5zYWN0aW9uOg0KICAgPC9wYXJhPg0KIA0KICAgPG9yZGVyZWRsaXN0 Pg0KQEAgLTY4OSwxMCArNzM0LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5kYm5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxh Y2luZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVz Y3JpYmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQg ZnJvbSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24p LiAgSW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAg Y291bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlv dSBjYW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVs dGlwbGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gN Ci0gICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9z ZW4gZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBu ZXcgdHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24g b2YgYSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMv YmluL3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCBlODM5ZmEzLi5iYmY0ODNl IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysr IGIvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2MiwxMSArMTYy LDEwIEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxh dGVuY2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyog cXVpZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRl cnZhbDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVh bA0KIAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAg cGVyX3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxl Y3Qgc3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJ CS8qIHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRz ICovDQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMgPSAwOwkJLyogbnVtYmVy IG9mIGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJCQkJCQkJCSAqIHJlcG9y dCAqLw0KLWludAkJCXByb2dyZXNzX250aHJlYWRzID0gMDsJCS8qIG51bWJl ciBvZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJCQkJCQkJCQkgKiByZXBv cnQgKi8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xp ZW50cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJICAgIC8qIG51bWJlciBv ZiB0aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVjdDsJCQkvKiBlc3RhYmxp c2ggY29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLw0KIGJvb2wJ CWlzX2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNp ZXMgKi8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nlc3MgaWQg dXNlZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0xODYsMTMgKzE4NSwzOSBA QCB0eXBlZGVmIHN0cnVjdA0KIAljaGFyCSAgICp2YWx1ZTsJCQkvKiBpdHMg dmFsdWUgKi8NCiB9IFZhcmlhYmxlOw0KIA0KLSNkZWZpbmUgTUFYX0ZJTEVT CQkxMjgJCS8qIG1heCBudW1iZXIgb2YgU1FMIHNjcmlwdCBmaWxlcyBhbGxv d2VkICovDQorI2RlZmluZSBNQVhfU0NSSVBUUwkJMTI4CQkvKiBtYXggbnVt YmVyIG9mIFNRTCBzY3JpcHQgZmlsZXMgYWxsb3dlZCAqLw0KICNkZWZpbmUg U0hFTExfQ09NTUFORF9TSVpFCTI1NiAvKiBtYXhpbXVtIHNpemUgYWxsb3dl ZCBmb3Igc2hlbGwgY29tbWFuZCAqLw0KIA0KIC8qDQotICogc3RydWN0dXJl cyB1c2VkIGluIGN1c3RvbSBxdWVyeSBtb2RlDQorICogc2ltcGxlIGRhdGEg c3RydWN0dXJlIHRvIGtlZXAgc3RhdHMgYWJvdXQgc29tZXRoaW5nLg0KKyAq IHByb2JhYmx5IHRoZSBmaXJzdCB2YWx1ZSBzaG91bGQgYmUga2VwdCBhbmQg dXNlZCBhcyBhbiBvZmZzZXQgZm9yDQorICogYmV0dGVyIG51bWVyaWNhbCBz dGFiaWxpdHkuLi4NCisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJaW50 NjRfdCBjb3VudDsgICAgLyogaG93IG1hbnkgdmFsdWVzIHdoZXJlIGVuY291 bnRlcmVkICovDQorCWRvdWJsZSBtaW47ICAgLyogdGhlIG1pbmltdW0gc2Vl biAqLw0KKwlkb3VibGUgbWF4OyAgIC8qIHRoZSBtYXhpbXVtIHNlZW4gKi8N CisJZG91YmxlIHN1bTsgICAvKiBzdW0gb2YgdmFsdWVzICovDQorCWRvdWJs ZSBzdW0yOyAgLyogc3VtIG9mIHNxdWFyZWQgdmFsdWVzICovDQorfSBTaW1w bGVTdGF0czsNCisNCisvKiBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHZhcmlv dXMgc3RhdGlzdGljcy4NCisgKiBpdCBpcyB1c2VkIGZvciBpbnRlcnZhbCBz dGF0aXN0aWNzIGFzIHdlbGwgYXMgZmlsZSBzdGF0aXN0aWNzLg0KICAqLw0K K3R5cGVkZWYgc3RydWN0DQorew0KKwlsb25nCQlzdGFydF90aW1lOwkJLyog d2hlbiB0aGUgaW50ZXJ2YWwgc3RhcnRzLCBmb3IgYWdncmVnYXRlcyAqLw0K KwlpbnQ2NAkJY250OwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKi8N CisJaW50NjQJCXNraXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25z IHNraXBwZWQgdW5kZXIgLS1yYXRlDQorCQkJCQkJCQkgKiBhbmQgLS1sYXRl bmN5LWxpbWl0ICovDQorCVNpbXBsZVN0YXRzCWxhdGVuY3k7DQorCVNpbXBs ZVN0YXRzCWxhZzsNCit9IFN0YXRzRGF0YTsNCiANCisvKg0KKyAqIHN0cnVj dHVyZXMgdXNlZCBpbiBjdXN0b20gcXVlcnkgbW9kZQ0KKyAqLw0KIHR5cGVk ZWYgc3RydWN0DQogew0KIAlQR2Nvbm4JICAgKmNvbjsJCQkvKiBjb25uZWN0 aW9uIGhhbmRsZSB0byBEQiAqLw0KQEAgLTIwMCwyMiArMjI1LDIwIEBAIHR5 cGVkZWYgc3RydWN0DQogCWludAkJCXN0YXRlOwkJCS8qIHN0YXRlIE5vLiAq Lw0KIAlpbnQJCQlsaXN0ZW47CQkJLyogMCBpbmRpY2F0ZXMgdGhhdCBhbiBh c3luYyBxdWVyeSBoYXMgYmVlbg0KIAkJCQkJCQkJICogc2VudCAqLw0KLQlp bnQJCQlzbGVlcGluZzsJCS8qIDEgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVu dCBpcyBuYXBwaW5nICovDQorCWJvb2wJCWlzX3Rocm90dGxlZDsJLyogd2hl dGhlciB0cmFuc2FjdGlvbiB0aHJvdHRsaW5nIGlzIGRvbmUgKi8NCisJYm9v bAkJc2xlZXBpbmc7CQkvKiB3aGV0aGVyIHRoZSBjbGllbnQgaXMgbmFwcGlu ZyAqLw0KIAlib29sCQl0aHJvdHRsaW5nOwkJLyogd2hldGhlciBuYXAgaXMg Zm9yIHRocm90dGxpbmcgKi8NCiAJVmFyaWFibGUgICAqdmFyaWFibGVzOwkJ LyogYXJyYXkgb2YgdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCiAJaW50CQkJ bnZhcmlhYmxlczsNCiAJaW50NjQJCXR4bl9zY2hlZHVsZWQ7CS8qIHNjaGVk dWxlZCBzdGFydCB0aW1lIG9mIHRyYW5zYWN0aW9uICh1c2VjKSAqLw0KIAlp bnN0cl90aW1lCXR4bl9iZWdpbjsJCS8qIHVzZWQgZm9yIG1lYXN1cmluZyBz Y2hlZHVsZSBsYWcgdGltZXMgKi8NCiAJaW5zdHJfdGltZQlzdG10X2JlZ2lu OwkJLyogdXNlZCBmb3IgbWVhc3VyaW5nIHN0YXRlbWVudCBsYXRlbmNpZXMg Ki8NCi0JYm9vbAkJaXNfdGhyb3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0 aW9uIHRocm90dGxpbmcgaXMgZG9uZSAqLw0KLQlpbnQJCQl1c2VfZmlsZTsJ CS8qIGluZGV4IGluIHNxbF9maWxlcyBmb3IgdGhpcyBjbGllbnQgKi8NCi0J Ym9vbAkJcHJlcGFyZWRbTUFYX0ZJTEVTXTsNCisJaW50CQkJdXNlX2ZpbGU7 CQkvKiBpbmRleCBpbiBzcWxfc2NyaXB0cyBmb3IgdGhpcyBjbGllbnQgKi8N CisJYm9vbAkJcHJlcGFyZWRbTUFYX1NDUklQVFNdOyAvKiB3aGV0aGVyIGNs aWVudCBwcmVwYXJlZCB0aGUgc2NyaXB0ICovDQogDQogCS8qIHBlciBjbGll bnQgY29sbGVjdGVkIHN0YXRzICovDQotCWludAkJCWNudDsJCQkvKiB4YWN0 cyBjb3VudCAqLw0KKwlpbnQ2NAkJY250OwkJCS8qIHRyYW5zYWN0aW9uIGNv dW50ICovDQogCWludAkJCWVjbnQ7CQkJLyogZXJyb3IgY291bnQgKi8NCi0J aW50NjQJCXR4bl9sYXRlbmNpZXM7CS8qIGN1bXVsYXRlZCBsYXRlbmNpZXMg Ki8NCi0JaW50NjQJCXR4bl9zcWxhdHM7CQkvKiBjdW11bGF0ZWQgc3F1YXJl IGxhdGVuY2llcyAqLw0KIH0gQ1N0YXRlOw0KIA0KIC8qDQpAQCAtMjI3LDE5 ICsyNTAsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJcHRocmVhZF90CXRocmVh ZDsJCQkvKiB0aHJlYWQgaGFuZGxlICovDQogCUNTdGF0ZQkgICAqc3RhdGU7 CQkJLyogYXJyYXkgb2YgQ1N0YXRlICovDQogCWludAkJCW5zdGF0ZTsJCQkv KiBsZW5ndGggb2Ygc3RhdGVbXSAqLw0KLQlpbnN0cl90aW1lCXN0YXJ0X3Rp bWU7CQkvKiB0aHJlYWQgc3RhcnQgdGltZSAqLw0KLQlpbnN0cl90aW1lICpl eGVjX2VsYXBzZWQ7CS8qIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGNtZHMgKHBl ciBDb21tYW5kKSAqLw0KLQlpbnQJCSAgICpleGVjX2NvdW50OwkJLyogbnVt YmVyIG9mIGNtZCBleGVjdXRpb25zIChwZXIgQ29tbWFuZCkgKi8NCi0JdW5z aWduZWQgc2hvcnQgcmFuZG9tX3N0YXRlWzNdOwkJLyogc2VwYXJhdGUgcmFu ZG9tbmVzcyBmb3IgZWFjaCB0aHJlYWQgKi8NCi0JaW50NjQJCXRocm90dGxl X3RyaWdnZXI7CQkvKiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVzKSAq Lw0KKwl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CSAvKiBzZXBh cmF0ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KKwlpbnQ2NAkJ dGhyb3R0bGVfdHJpZ2dlcjsJIC8qIHByZXZpb3VzL25leHQgdGhyb3R0bGlu ZyAodXMpICovDQogDQogCS8qIHBlciB0aHJlYWQgY29sbGVjdGVkIHN0YXRz ICovDQorCWluc3RyX3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBzdGFy dCB0aW1lICovDQogCWluc3RyX3RpbWUJY29ubl90aW1lOw0KLQlpbnQ2NAkJ dGhyb3R0bGVfbGFnOwkvKiB0b3RhbCB0cmFuc2FjdGlvbiBsYWcgYmVoaW5k IHRocm90dGxpbmcgKi8NCi0JaW50NjQJCXRocm90dGxlX2xhZ19tYXg7CQkv KiBtYXggdHJhbnNhY3Rpb24gbGFnICovDQotCWludDY0CQl0aHJvdHRsZV9s YXRlbmN5X3NraXBwZWQ7CQkvKiBsYWdnaW5nIHRyYW5zYWN0aW9ucw0KLQkJ CQkJCQkJCQkJCSAqIHNraXBwZWQgKi8NCi0JaW50NjQJCWxhdGVuY3lfbGF0 ZTsJLyogbGF0ZSB0cmFuc2FjdGlvbnMgKi8NCisJaW5zdHJfdGltZSAqZXhl Y19lbGFwc2VkOwkvKiB0aW1lIHNwZW50IGV4ZWN1dGluZyBjbWRzIChwZXIg Q29tbWFuZCkgKi8NCisJaW50CQkgICAqZXhlY19jb3VudDsJCS8qIG51bWJl ciBvZiBjbWQgZXhlY3V0aW9ucyAocGVyIENvbW1hbmQpICovDQorCVN0YXRz RGF0YSAgIHN0YXRzOw0KKwlpbnQ2NAkJbGF0ZW5jeV9sYXRlOwkvKiBleGVj dXRlZCBidXQgbGF0ZSB0cmFuc2FjdGlvbnMgKi8NCiB9IFRTdGF0ZTsNCiAN CiAjZGVmaW5lIElOVkFMSURfVEhSRUFECQkoKHB0aHJlYWRfdCkgMCkNCkBA IC0yNzMsMzMgKzI5MywyNiBAQCB0eXBlZGVmIHN0cnVjdA0KIAlQZ0JlbmNo RXhwciAqZXhwcjsJCQkvKiBwYXJzZWQgZXhwcmVzc2lvbiAqLw0KIH0gQ29t bWFuZDsNCiANCisvKiBTUUwgc2NyaXB0IHRvIGJlIGV4ZWN1dGVkLCBlaXRo ZXIgYSBmaWxlIG9yIGFuIGludGVybmFsIHNjcmlwdA0KKyAqLw0KIHR5cGVk ZWYgc3RydWN0DQogew0KLQ0KLQlsb25nCQlzdGFydF90aW1lOwkJLyogd2hl biBkb2VzIHRoZSBpbnRlcnZhbCBzdGFydCAqLw0KLQlpbnQJCQljbnQ7CQkJ LyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAqLw0KLQlpbnQJCQlza2lwcGVk OwkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0t cmF0ZQ0KLQkJCQkJCQkJICogYW5kIC0tbGF0ZW5jeS1saW1pdCAqLw0KLQ0K LQlkb3VibGUJCW1pbl9sYXRlbmN5OwkvKiBtaW4vbWF4IGxhdGVuY2llcyAq Lw0KLQlkb3VibGUJCW1heF9sYXRlbmN5Ow0KLQlkb3VibGUJCXN1bV9sYXRl bmN5OwkvKiBzdW0obGF0ZW5jeSksIHN1bShsYXRlbmN5XjIpIC0gZm9yDQot CQkJCQkJCQkgKiBlc3RpbWF0ZXMgKi8NCi0JZG91YmxlCQlzdW0yX2xhdGVu Y3k7DQotDQotCWRvdWJsZQkJbWluX2xhZzsNCi0JZG91YmxlCQltYXhfbGFn Ow0KLQlkb3VibGUJCXN1bV9sYWc7CQkvKiBzdW0obGFnKSAqLw0KLQlkb3Vi bGUJCXN1bTJfbGFnOwkJLyogc3VtKGxhZypsYWcpICovDQotfSBBZ2dWYWxz Ow0KLQ0KLXN0YXRpYyBDb21tYW5kICoqc3FsX2ZpbGVzW01BWF9GSUxFU107 CS8qIFNRTCBzY3JpcHQgZmlsZXMgKi8NCi1zdGF0aWMgaW50CW51bV9maWxl czsJCQkvKiBudW1iZXIgb2Ygc2NyaXB0IGZpbGVzICovDQorCWNvbnN0IGNo YXIgKm5hbWU7DQorCWludCB3ZWlnaHQ7DQorCUNvbW1hbmQgKipjb21tYW5k czsNCisJU3RhdHNEYXRhIHN0YXRzOw0KK30gU1FMU2NyaXB0Ow0KKw0KK3N0 YXRpYyBTUUxTY3JpcHQgc3FsX3NjcmlwdFtNQVhfU0NSSVBUU107DQorc3Rh dGljIGludAludW1fc2NyaXB0czsJCS8qIG51bWJlciBvZiBzY3JpcHQgaW4g c3FsX3NjcmlwdFtdICovDQogc3RhdGljIGludAludW1fY29tbWFuZHMgPSAw OwkvKiB0b3RhbCBudW1iZXIgb2YgQ29tbWFuZCBzdHJ1Y3RzICovDQorc3Rh dGljIGludCAgdG90YWxfd2VpZ2h0ID0gMDsNCisNCiBzdGF0aWMgaW50CWRl YnVnID0gMDsJCQkvKiBkZWJ1ZyBmbGFnICovDQogDQotLyogZGVmYXVsdCBz Y2VuYXJpbyAqLw0KLXN0YXRpYyBjaGFyICp0cGNfYiA9IHsNCisvKiAtQiBj YXNlLCBkZWZhdWx0IHNjZW5hcmlvICovDQorc3RhdGljIGNvbnN0IGNoYXIg KmJfYmVuY2ggPSAiPGJ1aWx0aW46IFRQQy1CIChzb3J0IG9mKT4iOw0KK3N0 YXRpYyBjb25zdCBjaGFyICp0cGNfYiA9IHsNCiAJIlxcc2V0IG5icmFuY2hl cyAiIENwcEFzU3RyaW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCiAJ Ilxcc2V0IG50ZWxsZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICog OnNjYWxlXG4iDQogCSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIo bmFjY291bnRzKSAiICogOnNjYWxlXG4iDQpAQCAtMzE3LDcgKzMzMCw4IEBA IHN0YXRpYyBjaGFyICp0cGNfYiA9IHsNCiB9Ow0KIA0KIC8qIC1OIGNhc2Ug Ki8NCi1zdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsNCitzdGF0aWMg Y29uc3QgY2hhciAqbl9iZW5jaCA9ICI8YnVpbHRpbjogc2ltcGxlIHVwZGF0 ZT4iOw0KK3N0YXRpYyBjb25zdCBjaGFyICpzaW1wbGVfdXBkYXRlID0gew0K IAkiXFxzZXQgbmJyYW5jaGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykg IiAqIDpzY2FsZVxuIg0KIAkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmlu ZzIobnRlbGxlcnMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG5hY2NvdW50 cyAiIENwcEFzU3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCkBA IC0zMzMsNyArMzQ3LDggQEAgc3RhdGljIGNoYXIgKnNpbXBsZV91cGRhdGUg PSB7DQogfTsNCiANCiAvKiAtUyBjYXNlICovDQotc3RhdGljIGNoYXIgKnNl bGVjdF9vbmx5ID0gew0KK3N0YXRpYyBjb25zdCBjaGFyICpzX2JlbmNoID0g IjxidWlsdGluOiBzZWxlY3Qgb25seT4iOw0KK3N0YXRpYyBjb25zdCBjaGFy ICpzZWxlY3Rfb25seSA9IHsNCiAJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFz U3RyaW5nMihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0cmFu ZG9tIGFpZCAxIDpuYWNjb3VudHNcbiINCiAJIlNFTEVDVCBhYmFsYW5jZSBG Uk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCkBA IC0zNDMsOCArMzU4LDcgQEAgc3RhdGljIGNoYXIgKnNlbGVjdF9vbmx5ID0g ew0KIHN0YXRpYyB2b2lkIHNldGFsYXJtKGludCBzZWNvbmRzKTsNCiBzdGF0 aWMgdm9pZCAqdGhyZWFkUnVuKHZvaWQgKmFyZyk7DQogDQotc3RhdGljIHZv aWQgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxv Z2ZpbGUsIGluc3RyX3RpbWUgKm5vdywNCi0JICBBZ2dWYWxzICphZ2csIGJv b2wgc2tpcHBlZCk7DQorc3RhdGljIHZvaWQgZG9UeFN0YXRzKFRTdGF0ZSos IENTdGF0ZSosIGluc3RyX3RpbWUqLCBib29sLCBGSUxFKiwgU3RhdHNEYXRh Kik7DQogDQogc3RhdGljIHZvaWQNCiB1c2FnZSh2b2lkKQ0KQEAgLTM2NCwx MSArMzc4LDEyIEBAIHVzYWdlKHZvaWQpDQogCSAiICAtLXRhYmxlc3BhY2U9 VEFCTEVTUEFDRSAgY3JlYXRlIHRhYmxlcyBpbiB0aGUgc3BlY2lmaWVkIHRh Ymxlc3BhY2VcbiINCiAJCSAgICIgIC0tdW5sb2dnZWQtdGFibGVzICAgICAg ICBjcmVhdGUgdGFibGVzIGFzIHVubG9nZ2VkIHRhYmxlc1xuIg0KIAkJICAg IlxuQmVuY2htYXJraW5nIG9wdGlvbnM6XG4iDQorCQkgICAiICAtQiwgLS10 cGMtYiAgICAgICAgICAgICAgYWRkIFRQQy1CIChzb3J0LW9mKSBpbnRlcm5h bCBiZW5jaFxuIg0KIAkJICAgIiAgLWMsIC0tY2xpZW50PU5VTSAgICAgICAg IG51bWJlciBvZiBjb25jdXJyZW50IGRhdGFiYXNlIGNsaWVudHMgKGRlZmF1 bHQ6IDEpXG4iDQogCQkgICAiICAtQywgLS1jb25uZWN0ICAgICAgICAgICAg ZXN0YWJsaXNoIG5ldyBjb25uZWN0aW9uIGZvciBlYWNoIHRyYW5zYWN0aW9u XG4iDQogCQkgICAiICAtRCwgLS1kZWZpbmU9VkFSTkFNRT1WQUxVRVxuIg0K IAkgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgdmFyaWFi bGUgZm9yIHVzZSBieSBjdXN0b20gc2NyaXB0XG4iDQotCQkgIiAgLWYsIC0t ZmlsZT1GSUxFTkFNRSAgICAgIHJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZy b20gRklMRU5BTUVcbiINCisJCSAiICAtZiwgLS1maWxlPUZJTEVOQU1FICAg ICAgYWRkIHRyYW5zYWN0aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQog CQkgICAiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgbnVtYmVyIG9mIHRo cmVhZHMgKGRlZmF1bHQ6IDEpXG4iDQogCQkgICAiICAtbCwgLS1sb2cgICAg ICAgICAgICAgICAgd3JpdGUgdHJhbnNhY3Rpb24gdGltZXMgdG8gbG9nIGZp bGVcbiINCiAJIiAgLUwsIC0tbGF0ZW5jeS1saW1pdD1OVU0gIGNvdW50IHRy YW5zYWN0aW9ucyBsYXN0aW5nIG1vcmUgdGhhbiBOVU0gbXNcbiINCkBAIC0z NzYsMTcgKzM5MSwxOSBAQCB1c2FnZSh2b2lkKQ0KIAkJICAgIiAgLU0sIC0t cHJvdG9jb2w9c2ltcGxlfGV4dGVuZGVkfHByZXBhcmVkXG4iDQogCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgZm9yIHN1Ym1p dHRpbmcgcXVlcmllcyAoZGVmYXVsdDogc2ltcGxlKVxuIg0KIAkJICAgIiAg LW4sIC0tbm8tdmFjdXVtICAgICAgICAgIGRvIG5vdCBydW4gVkFDVVVNIGJl Zm9yZSB0ZXN0c1xuIg0KLQkJICAgIiAgLU4sIC0tc2tpcC1zb21lLXVwZGF0 ZXMgIHNraXAgdXBkYXRlcyBvZiBwZ2JlbmNoX3RlbGxlcnMgYW5kIHBnYmVu Y2hfYnJhbmNoZXNcbiINCisJCSAgICIgIC1OLCAtLXNraXAtc29tZS11cGRh dGVzICBhZGQgc2ltcGxlIHVwZGF0ZXMgaW50ZXJuYWwgYmVuY2hcbiINCiAJ CSAgICIgIC1QLCAtLXByb2dyZXNzPU5VTSAgICAgICBzaG93IHRocmVhZCBw cm9ncmVzcyByZXBvcnQgZXZlcnkgTlVNIHNlY29uZHNcbiINCiAJCSAgICIg IC1yLCAtLXJlcG9ydC1sYXRlbmNpZXMgICByZXBvcnQgYXZlcmFnZSBsYXRl bmN5IHBlciBjb21tYW5kXG4iDQogCQkiICAtUiwgLS1yYXRlPU5VTSAgICAg ICAgICAgdGFyZ2V0IHJhdGUgaW4gdHJhbnNhY3Rpb25zIHBlciBzZWNvbmRc biINCiAJCSAgICIgIC1zLCAtLXNjYWxlPU5VTSAgICAgICAgICByZXBvcnQg dGhpcyBzY2FsZSBmYWN0b3IgaW4gb3V0cHV0XG4iDQotCQkgICAiICAtUywg LS1zZWxlY3Qtb25seSAgICAgICAgcGVyZm9ybSBTRUxFQ1Qtb25seSB0cmFu c2FjdGlvbnNcbiINCisJCSAgICIgIC1TLCAtLXNlbGVjdC1vbmx5ICAgICAg ICBhZGQgU0VMRUNULW9ubHkgaW50ZXJuYWwgYmVuY2hcbiINCiAJCSAgICIg IC10LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBudW1iZXIgb2YgdHJhbnNhY3Rp b25zIGVhY2ggY2xpZW50IHJ1bnMgKGRlZmF1bHQ6IDEwKVxuIg0KIAkJICIg IC1ULCAtLXRpbWU9TlVNICAgICAgICAgICBkdXJhdGlvbiBvZiBiZW5jaG1h cmsgdGVzdCBpbiBzZWNvbmRzXG4iDQogCQkgICAiICAtdiwgLS12YWN1dW0t YWxsICAgICAgICAgdmFjdXVtIGFsbCBmb3VyIHN0YW5kYXJkIHRhYmxlcyBi ZWZvcmUgdGVzdHNcbiINCisJCSAgICIgIC13LCAtLXdlaWdodD1OVU0gICAg ICAgICBzZXQgd2VpZ2h0IGZvciBwcmV2aW91cyBzY3JpcHRcbiINCiAJCSAg ICIgIC0tYWdncmVnYXRlLWludGVydmFsPU5VTSBhZ2dyZWdhdGUgZGF0YSBv dmVyIE5VTSBzZWNvbmRzXG4iDQogCQkgICAiICAtLXNhbXBsaW5nLXJhdGU9 TlVNICAgICAgZnJhY3Rpb24gb2YgdHJhbnNhY3Rpb25zIHRvIGxvZyAoZS5n LiAwLjAxIGZvciAxJSUpXG4iDQorCQkgICAiICAtLXBlci1maWxlLXN0YXRz ICAgICAgICAgcmVwb3J0IHBlci1maWxlIHN0YXRpc3RpY3NcbiINCiAJCSAg ICJcbkNvbW1vbiBvcHRpb25zOlxuIg0KIAkJICAgIiAgLWQsIC0tZGVidWcg ICAgICAgICAgICAgIHByaW50IGRlYnVnZ2luZyBvdXRwdXRcbiINCiAJICAi ICAtaCwgLS1ob3N0PUhPU1ROQU1FICAgICAgZGF0YWJhc2Ugc2VydmVyIGhv c3Qgb3Igc29ja2V0IGRpcmVjdG9yeVxuIg0KQEAgLTU3OCw2ICs1OTUsNDkg QEAgZ2V0UG9pc3NvblJhbmQoVFN0YXRlICp0aHJlYWQsIGludDY0IGNlbnRl cikNCiAJcmV0dXJuIChpbnQ2NCkgKC1sb2codW5pZm9ybSkgKiAoKGRvdWJs ZSkgY2VudGVyKSArIDAuNSk7DQogfQ0KIA0KK3N0YXRpYyB2b2lkDQoraW5p dFNpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICogc3MpDQorew0KKwltZW1zZXQo c3MsIDAsIHNpemVvZihTaW1wbGVTdGF0cykpOw0KK30NCisNCitzdGF0aWMg dm9pZA0KK2RvU2ltcGxlU3RhdHMoU2ltcGxlU3RhdHMgKnNzLCBkb3VibGUg dmFsKQ0KK3sNCisJaWYgKHNzLT5jb3VudCA9PSAwIHx8IHZhbCA8IHNzLT5t aW4pDQorCQlzcy0+bWluID0gdmFsOw0KKwlpZiAoc3MtPmNvdW50ID09IDAg fHwgdmFsID4gc3MtPm1heCkNCisJCXNzLT5tYXggPSB2YWw7DQorCXNzLT5j b3VudCArKzsNCisJc3MtPnN1bSArPSB2YWw7DQorCXNzLT5zdW0yICs9IHZh bCAqIHZhbDsNCit9DQorDQorc3RhdGljIHZvaWQNCithcHBlbmRTaW1wbGVT dGF0cyhTaW1wbGVTdGF0cyAqYWNjLCBTaW1wbGVTdGF0cyAqc3MpDQorew0K KwlpZiAoYWNjLT5jb3VudCA9PSAwIHx8IHNzLT5taW4gPCBhY2MtPm1pbikN CisJCWFjYy0+bWluID0gc3MtPm1pbjsNCisJaWYgKGFjYy0+Y291bnQgPT0g MCB8fCBzcy0+bWF4ID4gYWNjLT5tYXgpDQorCQlhY2MtPm1heCA9IHNzLT5t YXg7DQorCWFjYy0+Y291bnQgKz0gc3MtPmNvdW50Ow0KKwlhY2MtPnN1bSAr PSBzcy0+c3VtOw0KKwlhY2MtPnN1bTIgKz0gc3MtPnN1bTI7DQorfQ0KKw0K K3N0YXRpYyB2b2lkDQoraW5pdFN0YXRzKFN0YXRzRGF0YSAqc2QsIGRvdWJs ZSBzdGFydF90aW1lKQ0KK3sNCisJc2QtPmNudCA9IDA7DQorCXNkLT5za2lw cGVkID0gMDsNCisJaW5pdFNpbXBsZVN0YXRzKCYgc2QtPmxhdGVuY3kpOw0K Kwlpbml0U2ltcGxlU3RhdHMoJiBzZC0+bGFnKTsNCisNCisJLyogbm90IG5l Y2Vzc2FyaWx5IG92ZXJyaWRlbj8gKi8NCisJaWYgKHN0YXJ0X3RpbWUpDQor CQlzZC0+c3RhcnRfdGltZSA9IHN0YXJ0X3RpbWU7DQorfQ0KKw0KIC8qIGNh bGwgUFFleGVjKCkgYW5kIGV4aXQoKSBvbiBmYWlsdXJlICovDQogc3RhdGlj IHZvaWQNCiBleGVjdXRlU3RhdGVtZW50KFBHY29ubiAqY29uLCBjb25zdCBj aGFyICpzcWwpDQpAQCAtMTA5NywzMyArMTE1NywyMSBAQCBjbGllbnREb25l KENTdGF0ZSAqc3QsIGJvb2wgb2spDQogCXJldHVybiBmYWxzZTsJCQkJLyog YWx3YXlzIGZhbHNlICovDQogfQ0KIA0KLXN0YXRpYyB2b2lkDQotYWdnX3Zh bHNfaW5pdChBZ2dWYWxzICphZ2dzLCBpbnN0cl90aW1lIHN0YXJ0KQ0KK3N0 YXRpYyBpbnQNCitjaG9vc2VTY3JpcHQoVFN0YXRlICp0aHJlYWQpDQogew0K LQkvKiBiYXNpYyBjb3VudGVycyAqLw0KLQlhZ2dzLT5jbnQgPSAwOwkJCQkv KiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIChpbmNsdWRlcyBza2lwcGVkKSAq Lw0KLQlhZ2dzLT5za2lwcGVkID0gMDsJCQkvKiB4YWN0cyBza2lwcGVkIHVu ZGVyIC0tcmF0ZSAtLWxhdGVuY3ktbGltaXQgKi8NCi0NCi0JYWdncy0+c3Vt X2xhdGVuY3kgPSAwOwkJLyogU1VNKGxhdGVuY3kpICovDQotCWFnZ3MtPnN1 bTJfbGF0ZW5jeSA9IDA7CQkvKiBTVU0obGF0ZW5jeSpsYXRlbmN5KSAqLw0K KwlpbnQgaSA9IDAsIHcgPSAwLCB3YyA9IChpbnQpIGdldHJhbmQodGhyZWFk LCAwLCB0b3RhbF93ZWlnaHQgLSAxKTsNCiANCi0JLyogbWluIGFuZCBtYXgg dHJhbnNhY3Rpb24gZHVyYXRpb24gKi8NCi0JYWdncy0+bWluX2xhdGVuY3kg PSAwOw0KLQlhZ2dzLT5tYXhfbGF0ZW5jeSA9IDA7DQorCWRvIHsNCisJCXcg Kz0gc3FsX3NjcmlwdFtpKytdLndlaWdodDsNCisJfSB3aGlsZSAodyA8PSB3 Yyk7DQogDQotCS8qIHNjaGVkdWxlIGxhZyBjb3VudGVycyAqLw0KLQlhZ2dz LT5zdW1fbGFnID0gMDsNCi0JYWdncy0+c3VtMl9sYWcgPSAwOw0KLQlhZ2dz LT5taW5fbGFnID0gMDsNCi0JYWdncy0+bWF4X2xhZyA9IDA7DQotDQotCS8q IHN0YXJ0IG9mIHRoZSBjdXJyZW50IGludGVydmFsICovDQotCWFnZ3MtPnN0 YXJ0X3RpbWUgPSBJTlNUUl9USU1FX0dFVF9ET1VCTEUoc3RhcnQpOw0KKwly ZXR1cm4gaSAtIDE7DQogfQ0KIA0KIC8qIHJldHVybiBmYWxzZSBpZmYgY2xp ZW50IHNob3VsZCBiZSBkaXNjb25uZWN0ZWQgKi8NCiBzdGF0aWMgYm9vbA0K LWRvQ3VzdG9tKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0LCBpbnN0cl90 aW1lICpjb25uX3RpbWUsIEZJTEUgKmxvZ2ZpbGUsIEFnZ1ZhbHMgKmFnZykN Citkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJf dGltZSAqY29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBTdGF0c0RhdGEgKmFn ZykNCiB7DQogCVBHcmVzdWx0ICAgKnJlczsNCiAJQ29tbWFuZCAgICoqY29t bWFuZHM7DQpAQCAtMTE0MCw3ICsxMTg4LDcgQEAgZG9DdXN0b20oVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUgKmNvbm5fdGltZSwg RklMRSAqbG9nZmlsZSwgQWdnVmENCiAJSU5TVFJfVElNRV9TRVRfWkVSTyhu b3cpOw0KIA0KIHRvcDoNCi0JY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVz ZV9maWxlXTsNCisJY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmls ZV0uY29tbWFuZHM7DQogDQogCS8qDQogCSAqIEhhbmRsZSB0aHJvdHRsaW5n IG9uY2UgcGVyIHRyYW5zYWN0aW9uIGJ5IHNsZWVwaW5nLiAgSXQgaXMgc2lt cGxlciB0bw0KQEAgLTExNzYsMTggKzEyMjQsMTUgQEAgdG9wOg0KIAkJCW5v d191cyA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdyk7DQogCQkJd2hp bGUgKHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlciA8IG5vd191cyAtIGxhdGVu Y3lfbGltaXQpDQogCQkJew0KLQkJCQl0aHJlYWQtPnRocm90dGxlX2xhdGVu Y3lfc2tpcHBlZCsrOw0KLQ0KLQkJCQlpZiAobG9nZmlsZSkNCi0JCQkJCWRv TG9nKHRocmVhZCwgc3QsIGxvZ2ZpbGUsICZub3csIGFnZywgdHJ1ZSk7DQot DQorCQkJCWRvVHhTdGF0cyh0aHJlYWQsIHN0LCAgJm5vdywgdHJ1ZSwgbG9n ZmlsZSwgYWdnKTsNCisJCQkJLyogbmV4dCByZW5kZXotdm91cyAqLw0KIAkJ CQl3YWl0ID0gZ2V0UG9pc3NvblJhbmQodGhyZWFkLCB0aHJvdHRsZV9kZWxh eSk7DQogCQkJCXRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlciArPSB3YWl0Ow0K IAkJCQlzdC0+dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJp Z2dlcjsNCiAJCQl9DQogCQl9DQogDQotCQlzdC0+c2xlZXBpbmcgPSAxOw0K KwkJc3QtPnNsZWVwaW5nID0gdHJ1ZTsNCiAJCXN0LT50aHJvdHRsaW5nID0g dHJ1ZTsNCiAJCXN0LT5pc190aHJvdHRsZWQgPSB0cnVlOw0KIAkJaWYgKGRl YnVnKQ0KQEAgLTExOTcsMjcgKzEyNDIsMTMgQEAgdG9wOg0KIA0KIAlpZiAo c3QtPnNsZWVwaW5nKQ0KIAl7CQkJCQkJCS8qIGFyZSB3ZSBzbGVlcGluZz8g Ki8NCi0JCWludDY0CQlub3dfdXM7DQotDQogCQlpZiAoSU5TVFJfVElNRV9J U19aRVJPKG5vdykpDQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cp Ow0KLQkJbm93X3VzID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KTsN Ci0JCWlmIChzdC0+dHhuX3NjaGVkdWxlZCA8PSBub3dfdXMpDQotCQl7DQot CQkJc3QtPnNsZWVwaW5nID0gMDsJLyogRG9uZSBzbGVlcGluZywgZ28gYWhl YWQgd2l0aCBuZXh0IGNvbW1hbmQgKi8NCi0JCQlpZiAoc3QtPnRocm90dGxp bmcpDQotCQkJew0KLQkJCQkvKiBNZWFzdXJlIGxhZyBvZiB0aHJvdHRsZWQg dHJhbnNhY3Rpb24gcmVsYXRpdmUgdG8gdGFyZ2V0ICovDQotCQkJCWludDY0 CQlsYWcgPSBub3dfdXMgLSBzdC0+dHhuX3NjaGVkdWxlZDsNCi0NCi0JCQkJ dGhyZWFkLT50aHJvdHRsZV9sYWcgKz0gbGFnOw0KLQkJCQlpZiAobGFnID4g dGhyZWFkLT50aHJvdHRsZV9sYWdfbWF4KQ0KLQkJCQkJdGhyZWFkLT50aHJv dHRsZV9sYWdfbWF4ID0gbGFnOw0KLQkJCQlzdC0+dGhyb3R0bGluZyA9IGZh bHNlOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCisJCWlmIChJTlNUUl9USU1F X0dFVF9NSUNST1NFQyhub3cpIDwgc3QtPnR4bl9zY2hlZHVsZWQpDQogCQkJ cmV0dXJuIHRydWU7CQkvKiBTdGlsbCBzbGVlcGluZywgbm90aGluZyB0byBk byBoZXJlICovDQorCQkvKiBFbHNlIGRvbmUgc2xlZXBpbmcsIGdvIGFoZWFk IHdpdGggbmV4dCBjb21tYW5kICovDQorCQlzdC0+c2xlZXBpbmcgPSBmYWxz ZTsNCisJCXN0LT50aHJvdHRsaW5nID0gZmFsc2U7DQogCX0NCiANCiAJaWYg KHN0LT5saXN0ZW4pDQpAQCAtMTI1MywzNSArMTI4NCwxMCBAQCB0b3A6DQog CQkvKiB0cmFuc2FjdGlvbiBmaW5pc2hlZDogY2FsY3VsYXRlIGxhdGVuY3kg YW5kIGxvZyB0aGUgdHJhbnNhY3Rpb24gKi8NCiAJCWlmIChjb21tYW5kc1tz dC0+c3RhdGUgKyAxXSA9PSBOVUxMKQ0KIAkJew0KLQkJCS8qIG9ubHkgY2Fs Y3VsYXRlIGxhdGVuY3kgaWYgYW4gb3B0aW9uIGlzIHVzZWQgdGhhdCBuZWVk cyBpdCAqLw0KLQkJCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8 fCBsYXRlbmN5X2xpbWl0KQ0KLQkJCXsNCi0JCQkJaW50NjQJCWxhdGVuY3k7 DQotDQotCQkJCWlmIChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkNCi0JCQkJ CUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCi0NCi0JCQkJbGF0ZW5j eSA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdykgLSBzdC0+dHhuX3Nj aGVkdWxlZDsNCi0NCi0JCQkJc3QtPnR4bl9sYXRlbmNpZXMgKz0gbGF0ZW5j eTsNCi0NCi0JCQkJLyoNCi0JCQkJICogWFhYIEluIGEgbG9uZyBiZW5jaG1h cmsgcnVuIG9mIGhpZ2gtbGF0ZW5jeSB0cmFuc2FjdGlvbnMsDQotCQkJCSAq IHRoaXMgaW50NjQgYWRkaXRpb24gZXZlbnR1YWxseSBvdmVyZmxvd3MuICBG b3IgZXhhbXBsZSwgMTAwDQotCQkJCSAqIHRocmVhZHMgcnVubmluZyAxMHMg dHJhbnNhY3Rpb25zIHdpbGwgb3ZlcmZsb3cgaXQgaW4gMi41Ng0KLQkJCQkg KiBob3Vycy4gIFdpdGggYSBtb3JlLXR5cGljYWwgT0xUUCB3b3JrbG9hZCBv ZiAuMXMNCi0JCQkJICogdHJhbnNhY3Rpb25zLCBvdmVyZmxvdyB3b3VsZCB0 YWtlIDI1NiBob3Vycy4NCi0JCQkJICovDQotCQkJCXN0LT50eG5fc3FsYXRz ICs9IGxhdGVuY3kgKiBsYXRlbmN5Ow0KLQ0KLQkJCQkvKiByZWNvcmQgb3Zl ciB0aGUgbGltaXQgdHJhbnNhY3Rpb25zIGlmIG5lZWRlZC4gKi8NCi0JCQkJ aWYgKGxhdGVuY3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGltaXQp DQotCQkJCQl0aHJlYWQtPmxhdGVuY3lfbGF0ZSsrOw0KLQkJCX0NCi0NCi0J CQkvKiByZWNvcmQgdGhlIHRpbWUgaXQgdG9vayBpbiB0aGUgbG9nICovDQot CQkJaWYgKGxvZ2ZpbGUpDQotCQkJCWRvTG9nKHRocmVhZCwgc3QsIGxvZ2Zp bGUsICZub3csIGFnZywgZmFsc2UpOw0KKwkJCWlmIChwcm9ncmVzcyB8fCB0 aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0IHx8IHBlcl9zY3JpcHRf c3RhdHMgfHwgbG9nZmlsZSkNCisJCQkJZG9UeFN0YXRzKHRocmVhZCwgc3Qs ICZub3csIGZhbHNlLCBsb2dmaWxlLCBhZ2cpOw0KKwkJCWVsc2UNCisJCQkJ dGhyZWFkLT5zdGF0cy5jbnQgKys7DQogCQl9DQogDQogCQlpZiAoY29tbWFu ZHNbc3QtPnN0YXRlXS0+dHlwZSA9PSBTUUxfQ09NTUFORCkNCkBAIC0xMzI0 LDggKzEzMzAsOSBAQCB0b3A6DQogCQlpZiAoY29tbWFuZHNbc3QtPnN0YXRl XSA9PSBOVUxMKQ0KIAkJew0KIAkJCXN0LT5zdGF0ZSA9IDA7DQotCQkJc3Qt PnVzZV9maWxlID0gKGludCkgZ2V0cmFuZCh0aHJlYWQsIDAsIG51bV9maWxl cyAtIDEpOw0KLQkJCWNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmls ZV07DQorCQkJc3QtPnVzZV9maWxlID0gbnVtX3NjcmlwdHM9PTE/IDA6IGNo b29zZVNjcmlwdCh0aHJlYWQpOw0KKw0KKwkJCWNvbW1hbmRzID0gc3FsX3Nj cmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0KIAkJCXN0LT5pc190aHJv dHRsZWQgPSBmYWxzZTsNCiANCiAJCQkvKg0KQEAgLTEzNjgsNyArMTM3NSw3 IEBAIHRvcDoNCiAJfQ0KIA0KIAkvKiBSZWNvcmQgdHJhbnNhY3Rpb24gc3Rh cnQgdGltZSB1bmRlciBsb2dnaW5nLCBwcm9ncmVzcyBvciB0aHJvdHRsaW5n ICovDQotCWlmICgobG9nZmlsZSB8fCBwcm9ncmVzcyB8fCB0aHJvdHRsZV9k ZWxheSB8fCBsYXRlbmN5X2xpbWl0KSAmJiBzdC0+c3RhdGUgPT0gMCkNCisJ aWYgKChsb2dmaWxlIHx8IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8 IGxhdGVuY3lfbGltaXQgfHwgcGVyX3NjcmlwdF9zdGF0cykgJiYgc3QtPnN0 YXRlID09IDApDQogCXsNCiAJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3Qt PnR4bl9iZWdpbik7DQogDQpAQCAtMTY1Niw3ICsxNjYzLDcgQEAgdG9wOg0K IA0KIAkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQobm93KTsNCiAJCQlzdC0+ dHhuX3NjaGVkdWxlZCA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdykg KyB1c2VjOw0KLQkJCXN0LT5zbGVlcGluZyA9IDE7DQorCQkJc3QtPnNsZWVw aW5nID0gdHJ1ZTsNCiANCiAJCQlzdC0+bGlzdGVuID0gMTsNCiAJCX0NCkBA IC0xNjk0LDE2ICsxNzAxLDMxIEBAIHRvcDoNCiAJcmV0dXJuIHRydWU7DQog fQ0KIA0KK3N0YXRpYyB2b2lkDQorZG9TdGF0cyhTdGF0c0RhdGEgKnN0YXRz LCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcpDQorew0K KwlzdGF0cy0+Y250ICsrOw0KKw0KKwlpZiAoc2tpcHBlZCkNCisJCS8qIG5v IGxhdGVuY3kgdG8gcmVjb3JkIG9uIHNraXBwZWQgdHJhbnNhY3Rpb25zICov DQorCQlzdGF0cy0+c2tpcHBlZCArKzsNCisJZWxzZQ0KKwl7DQorCQlkb1Np bXBsZVN0YXRzKCYgc3RhdHMtPmxhdGVuY3ksIGxhdCk7DQorDQorCQkvKiBh bmQgcG9zc2libHkgdGhlIHNhbWUgZm9yIHNjaGVkdWxlIGxhZyAqLw0KKwkJ aWYgKHRocm90dGxlX2RlbGF5KQ0KKwkJCWRvU2ltcGxlU3RhdHMoJiBzdGF0 cy0+bGFnLCBsYWcpOw0KKwl9DQorfQ0KKw0KIC8qDQogICogcHJpbnQgbG9n IGVudHJ5IGFmdGVyIGNvbXBsZXRpbmcgb25lIHRyYW5zYWN0aW9uLg0KICAq Lw0KIHN0YXRpYyB2b2lkDQotZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0 ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFs cyAqYWdnLA0KLQkgIGJvb2wgc2tpcHBlZCkNCitkb0xvZyhUU3RhdGUgKnRo cmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAq bm93LA0KKwkgIFN0YXRzRGF0YSAqYWdnLCBib29sIHNraXBwZWQsIGRvdWJs ZSBsYXRlbmN5LCBkb3VibGUgbGFnKQ0KIHsNCi0JZG91YmxlCQlsYWc7DQot CWRvdWJsZQkJbGF0ZW5jeTsNCi0NCiAJLyoNCiAJICogU2tpcCB0aGUgbG9n IGVudHJ5IGlmIHNhbXBsaW5nIGlzIGVuYWJsZWQgYW5kIHRoaXMgcm93IGRv ZXNuJ3QgYmVsb25nDQogCSAqIHRvIHRoZSByYW5kb20gc2FtcGxlLg0KQEAg LTE3MTIsMTUgKzE3MzQsNiBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0 YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dW YWxzICphZ2csDQogCQlwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRl KSA+IHNhbXBsZV9yYXRlKQ0KIAkJcmV0dXJuOw0KIA0KLQlpZiAoSU5TVFJf VElNRV9JU19aRVJPKCpub3cpKQ0KLQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VCgqbm93KTsNCi0NCi0JbGF0ZW5jeSA9IChkb3VibGUpIChJTlNUUl9USU1F X0dFVF9NSUNST1NFQygqbm93KSAtIHN0LT50eG5fc2NoZWR1bGVkKTsNCi0J aWYgKHNraXBwZWQpDQotCQlsYWcgPSBsYXRlbmN5Ow0KLQllbHNlDQotCQls YWcgPSAoZG91YmxlKSAoSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3QtPnR4 bl9iZWdpbikgLSBzdC0+dHhuX3NjaGVkdWxlZCk7DQotDQogCS8qIHNob3Vs ZCB3ZSBhZ2dyZWdhdGUgdGhlIHJlc3VsdHMgb3Igbm90PyAqLw0KIAlpZiAo YWdnX2ludGVydmFsID4gMCkNCiAJew0KQEAgLTE3MzAsMzkgKzE3NDMsNyBA QCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9n ZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCQkgKi8N CiAJCWlmIChhZ2ctPnN0YXJ0X3RpbWUgKyBhZ2dfaW50ZXJ2YWwgPj0gSU5T VFJfVElNRV9HRVRfRE9VQkxFKCpub3cpKQ0KIAkJew0KLQkJCWFnZy0+Y250 ICs9IDE7DQotCQkJaWYgKHNraXBwZWQpDQotCQkJew0KLQkJCQkvKg0KLQkJ CQkgKiB0aGVyZSBpcyBubyBsYXRlbmN5IHRvIHJlY29yZCBpZiB0aGUgdHJh bnNhY3Rpb24gd2FzDQotCQkJCSAqIHNraXBwZWQNCi0JCQkJICovDQotCQkJ CWFnZy0+c2tpcHBlZCArPSAxOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0K LQkJCQlhZ2ctPnN1bV9sYXRlbmN5ICs9IGxhdGVuY3k7DQotCQkJCWFnZy0+ c3VtMl9sYXRlbmN5ICs9IGxhdGVuY3kgKiBsYXRlbmN5Ow0KLQ0KLQkJCQkv KiBmaXJzdCBpbiB0aGlzIGFnZ3JlZ2F0aW9uIGludGVydmFsICovDQotCQkJ CWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhdGVuY3kgPCBhZ2ctPm1pbl9s YXRlbmN5KSkNCi0JCQkJCWFnZy0+bWluX2xhdGVuY3kgPSBsYXRlbmN5Ow0K LQ0KLQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYXRlbmN5ID4gYWdn LT5tYXhfbGF0ZW5jeSkpDQotCQkJCQlhZ2ctPm1heF9sYXRlbmN5ID0gbGF0 ZW5jeTsNCi0NCi0JCQkJLyogYW5kIHRoZSBzYW1lIGZvciBzY2hlZHVsZSBs YWcgKi8NCi0JCQkJaWYgKHRocm90dGxlX2RlbGF5KQ0KLQkJCQl7DQotCQkJ CQlhZ2ctPnN1bV9sYWcgKz0gbGFnOw0KLQkJCQkJYWdnLT5zdW0yX2xhZyAr PSBsYWcgKiBsYWc7DQotDQotCQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8 IChsYWcgPCBhZ2ctPm1pbl9sYWcpKQ0KLQkJCQkJCWFnZy0+bWluX2xhZyA9 IGxhZzsNCi0JCQkJCWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhZyA+IGFn Zy0+bWF4X2xhZykpDQotCQkJCQkJYWdnLT5tYXhfbGFnID0gbGFnOw0KLQkJ CQl9DQotCQkJfQ0KKwkJCWRvU3RhdHMoYWdnLCBza2lwcGVkLCBsYXRlbmN5 LCBsYWcpOw0KIAkJfQ0KIAkJZWxzZQ0KIAkJew0KQEAgLTE3NzcsNTIgKzE3 NTgsMzQgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJ TEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0K IAkJCQkgKiB1c2FnZSksIHNvIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRo aXMgaW4gYSBzcGVjaWFsIHdheQ0KIAkJCQkgKiAoc2VlIGJlbG93KS4NCiAJ CQkJICovDQotCQkJCWZwcmludGYobG9nZmlsZSwgIiVsZCAlZCAlLjBmICUu MGYgJS4wZiAlLjBmIiwNCisJCQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICIg SU5UNjRfRk9STUFUICIgJS4wZiAlLjBmICUuMGYgJS4wZiIsDQogCQkJCQkJ YWdnLT5zdGFydF90aW1lLA0KIAkJCQkJCWFnZy0+Y250LA0KLQkJCQkJCWFn Zy0+c3VtX2xhdGVuY3ksDQotCQkJCQkJYWdnLT5zdW0yX2xhdGVuY3ksDQot CQkJCQkJYWdnLT5taW5fbGF0ZW5jeSwNCi0JCQkJCQlhZ2ctPm1heF9sYXRl bmN5KTsNCisJCQkJCQlhZ2ctPmxhdGVuY3kuc3VtLA0KKwkJCQkJCWFnZy0+ bGF0ZW5jeS5zdW0yLA0KKwkJCQkJCWFnZy0+bGF0ZW5jeS5taW4sDQorCQkJ CQkJYWdnLT5sYXRlbmN5Lm1heCk7DQogCQkJCWlmICh0aHJvdHRsZV9kZWxh eSkNCiAJCQkJew0KIAkJCQkJZnByaW50Zihsb2dmaWxlLCAiICUuMGYgJS4w ZiAlLjBmICUuMGYiLA0KLQkJCQkJCQlhZ2ctPnN1bV9sYWcsDQotCQkJCQkJ CWFnZy0+c3VtMl9sYWcsDQotCQkJCQkJCWFnZy0+bWluX2xhZywNCi0JCQkJ CQkJYWdnLT5tYXhfbGFnKTsNCisJCQkJCQkJYWdnLT5sYWcuc3VtLA0KKwkJ CQkJCQlhZ2ctPmxhZy5zdW0yLA0KKwkJCQkJCQlhZ2ctPmxhZy5taW4sDQor CQkJCQkJCWFnZy0+bGFnLm1heCk7DQogCQkJCQlpZiAobGF0ZW5jeV9saW1p dCkNCi0JCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJWQiLCBhZ2ctPnNraXBw ZWQpOw0KKwkJCQkJCWZwcmludGYobG9nZmlsZSwgIiAiIElOVDY0X0ZPUk1B VCwgYWdnLT5za2lwcGVkKTsNCiAJCQkJfQ0KIAkJCQlmcHV0YygnXG4nLCBs b2dmaWxlKTsNCiANCi0JCQkJLyogbW92ZSB0byB0aGUgbmV4dCBpbnRldmFs ICovDQotCQkJCWFnZy0+c3RhcnRfdGltZSA9IGFnZy0+c3RhcnRfdGltZSAr IGFnZ19pbnRlcnZhbDsNCisJCQkJLyogbW92ZSB0byB0aGUgbmV4dCBpbnRl cnZhbCAqLw0KKwkJCQlhZ2ctPnN0YXJ0X3RpbWUgKz0gYWdnX2ludGVydmFs Ow0KIA0KIAkJCQkvKiByZXNldCBmb3IgIm5vIHRyYW5zYWN0aW9uIiBpbnRl cnZhbHMgKi8NCi0JCQkJYWdnLT5jbnQgPSAwOw0KLQkJCQlhZ2ctPnNraXBw ZWQgPSAwOw0KLQkJCQlhZ2ctPm1pbl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdn LT5tYXhfbGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+c3VtX2xhdGVuY3kgPSAw Ow0KLQkJCQlhZ2ctPnN1bTJfbGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+bWlu X2xhZyA9IDA7DQotCQkJCWFnZy0+bWF4X2xhZyA9IDA7DQotCQkJCWFnZy0+ c3VtX2xhZyA9IDA7DQotCQkJCWFnZy0+c3VtMl9sYWcgPSAwOw0KKwkJCQlp bml0U3RhdHMoYWdnLCAwLjApOw0KIAkJCX0NCiANCiAJCQkvKiByZXNldCB0 aGUgdmFsdWVzIHRvIGluY2x1ZGUgb25seSB0aGUgY3VycmVudCB0cmFuc2Fj dGlvbi4gKi8NCi0JCQlhZ2ctPmNudCA9IDE7DQotCQkJYWdnLT5za2lwcGVk ID0gc2tpcHBlZCA/IDEgOiAwOw0KLQkJCWFnZy0+bWluX2xhdGVuY3kgPSBs YXRlbmN5Ow0KLQkJCWFnZy0+bWF4X2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQkJ CWFnZy0+c3VtX2xhdGVuY3kgPSBza2lwcGVkID8gMC4wIDogbGF0ZW5jeTsN Ci0JCQlhZ2ctPnN1bTJfbGF0ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRl bmN5ICogbGF0ZW5jeTsNCi0JCQlhZ2ctPm1pbl9sYWcgPSBsYWc7DQotCQkJ YWdnLT5tYXhfbGFnID0gbGFnOw0KLQkJCWFnZy0+c3VtX2xhZyA9IGxhZzsN Ci0JCQlhZ2ctPnN1bTJfbGFnID0gbGFnICogbGFnOw0KKwkJCWRvU3RhdHMo YWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KIAkJfQ0KIAl9DQogCWVs c2UNCkBAIC0xODMyLDIxICsxNzk1LDIxIEBAIGRvTG9nKFRTdGF0ZSAqdGhy ZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpu b3csIEFnZ1ZhbHMgKmFnZywNCiANCiAJCS8qIFRoaXMgaXMgbW9yZSB0aGFu IHdlIHJlYWxseSBvdWdodCB0byBrbm93IGFib3V0IGluc3RyX3RpbWUgKi8N CiAJCWlmIChza2lwcGVkKQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVk IHNraXBwZWQgJWQgJWxkICVsZCIsDQorCQkJZnByaW50Zihsb2dmaWxlLCAi JWQgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkICVkICVsZCAlbGQiLA0KIAkJ CQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUsDQogCQkJCQkobG9u Zykgbm93LT50dl9zZWMsIChsb25nKSBub3ctPnR2X3VzZWMpOw0KIAkJZWxz ZQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkICUuMGYgJWQgJWxkICVs ZCIsDQorCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQg IiAlLjBmICVkICVsZCAlbGQiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBs YXRlbmN5LCBzdC0+dXNlX2ZpbGUsDQogCQkJCQkobG9uZykgbm93LT50dl9z ZWMsIChsb25nKSBub3ctPnR2X3VzZWMpOw0KICNlbHNlDQogDQogCQkvKiBP biBXaW5kb3dzLCBpbnN0cl90aW1lIGRvZXNuJ3QgcHJvdmlkZSBhIHRpbWVz dGFtcCBhbnl3YXkgKi8NCiAJCWlmIChza2lwcGVkKQ0KLQkJCWZwcmludGYo bG9nZmlsZSwgIiVkICVkIHNraXBwZWQgJWQgMCAwIiwNCisJCQlmcHJpbnRm KGxvZ2ZpbGUsICIlZCAiSU5UNjRfRk9STUFUIiBza2lwcGVkICVkIDAgMCIs DQogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSk7DQogCQll bHNlDQotCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAwIDAi LA0KKwkJCWZwcmludGYobG9nZmlsZSwgIiVkICJJTlQ2NF9GT1JNQVQiICUu MGYgJWQgMCAwIiwNCiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgbGF0ZW5jeSwg c3QtPnVzZV9maWxlKTsNCiAjZW5kaWYNCiAJCWlmICh0aHJvdHRsZV9kZWxh eSkNCkBAIC0xODU1LDYgKzE4MTgsNDQgQEAgZG9Mb2coVFN0YXRlICp0aHJl YWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5v dywgQWdnVmFscyAqYWdnLA0KIAl9DQogfQ0KIA0KKy8qDQorICogZW5kIG9m IHRyYW5zYWN0aW9uIHN0YXRpc3RpY3MNCisgKi8NCitzdGF0aWMgdm9pZA0K K2RvVHhTdGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJf dGltZSAqbm93LA0KKwkJICBib29sIHNraXBwZWQsIEZJTEUgKmxvZ2ZpbGUs IFN0YXRzRGF0YSAqYWdnKQ0KK3sNCisJZG91YmxlIGxhdGVuY3kgPSAwLjAs IGxhZyA9IDAuMDsNCisNCisJaWYgKCghc2tpcHBlZCB8fCBhZ2dfaW50ZXJ2 YWwpICYmIElOU1RSX1RJTUVfSVNfWkVSTygqbm93KSkNCisJCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQoKm5vdyk7DQorDQorCWlmICghc2tpcHBlZCkNCisJ ew0KKwkJLyogY29tcHV0ZSBsYXRlbmN5ICYgbGFnIGlmIG5lZWRlZCAqLw0K KwkJbGF0ZW5jeSA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0g c3QtPnR4bl9zY2hlZHVsZWQ7DQorCQlsYWcgPSBJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhzdC0+dHhuX2JlZ2luKSAtIHN0LT50eG5fc2NoZWR1bGVkOw0K Kwl9DQorDQorCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBs YXRlbmN5X2xpbWl0KQ0KKwl7DQorCQlkb1N0YXRzKCYgdGhyZWFkLT5zdGF0 cywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsNCisNCisJCS8qIHJlY29yZCBv dmVyIHRoZSBsaW1pdCB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkLiAqLw0KKwkJ aWYgKGxhdGVuY3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGltaXQp DQorCQkJdGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsNCisJfQ0KKwllbHNlDQor CQl0aHJlYWQtPnN0YXRzLmNudCArKzsNCisNCisJaWYgKHVzZV9sb2cpDQor CQlkb0xvZyh0aHJlYWQsIHN0LCBsb2dmaWxlLCBub3csIGFnZywgc2tpcHBl ZCwgbGF0ZW5jeSwgbGFnKTsNCisNCisJaWYgKHBlcl9zY3JpcHRfc3RhdHMp IC8qIG11dGV4PyBobW1tLi4uIHRoZXNlIGFyZSBvbmx5IHN0YXRpc3RpY3Mg Ki8NCisJCWRvU3RhdHMoJiBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3Rh dHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorfQ0KKw0KKw0KIC8qIGRp c2NhcmQgY29ubmVjdGlvbnMgKi8NCiBzdGF0aWMgdm9pZA0KIGRpc2Nvbm5l Y3RfYWxsKENTdGF0ZSAqc3RhdGUsIGludCBsZW5ndGgpDQpAQCAtMjQ3NSw3 ICsyNDc2LDcgQEAgcmVhZF9saW5lX2Zyb21fZmlsZShGSUxFICpmZCkNCiAJ cmV0dXJuIE5VTEw7DQogfQ0KIA0KLXN0YXRpYyBpbnQNCitzdGF0aWMgQ29t bWFuZCAqKg0KIHByb2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiB7DQog I2RlZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4DQpAQCAtMjQ4NywxMiAr MjQ4OCw2IEBAIHByb2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiAJY2hh cgkgICAqYnVmOw0KIAlpbnQJCQlhbGxvY19udW07DQogDQotCWlmIChudW1f ZmlsZXMgPj0gTUFYX0ZJTEVTKQ0KLQl7DQotCQlmcHJpbnRmKHN0ZGVyciwg ImF0IG1vc3QgJWQgU1FMIGZpbGVzIGFyZSBhbGxvd2VkXG4iLCBNQVhfRklM RVMpOw0KLQkJZXhpdCgxKTsNCi0JfQ0KLQ0KIAlhbGxvY19udW0gPSBDT01N QU5EU19BTExPQ19OVU07DQogCW15X2NvbW1hbmRzID0gKENvbW1hbmQgKiop IHBnX21hbGxvYyhzaXplb2YoQ29tbWFuZCAqKSAqIGFsbG9jX251bSk7DQog DQpAQCAtMjUwMyw3ICsyNDk4LDcgQEAgcHJvY2Vzc19maWxlKGNoYXIgKmZp bGVuYW1lKQ0KIAkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiBm aWxlIFwiJXNcIjogJXNcbiIsDQogCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihl cnJubykpOw0KIAkJcGdfZnJlZShteV9jb21tYW5kcyk7DQotCQlyZXR1cm4g ZmFsc2U7DQorCQlyZXR1cm4gTlVMTDsNCiAJfQ0KIA0KIAlsaW5lbm8gPSAw Ow0KQEAgLTI1MzUsMTMgKzI1MzAsMTEgQEAgcHJvY2Vzc19maWxlKGNoYXIg KmZpbGVuYW1lKQ0KIA0KIAlteV9jb21tYW5kc1tpbmRleF0gPSBOVUxMOw0K IA0KLQlzcWxfZmlsZXNbbnVtX2ZpbGVzKytdID0gbXlfY29tbWFuZHM7DQot DQotCXJldHVybiB0cnVlOw0KKwlyZXR1cm4gbXlfY29tbWFuZHM7DQogfQ0K IA0KIHN0YXRpYyBDb21tYW5kICoqDQotcHJvY2Vzc19idWlsdGluKGNoYXIg KnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQorcHJvY2Vzc19idWlsdGluKGNv bnN0IGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQogew0KICNkZWZp bmUgQ09NTUFORFNfQUxMT0NfTlVNIDEyOA0KIA0KQEAgLTI1OTUsMzUgKzI1 ODgsNTQgQEAgcHJvY2Vzc19idWlsdGluKGNoYXIgKnRiLCBjb25zdCBjaGFy ICpzb3VyY2UpDQogCXJldHVybiBteV9jb21tYW5kczsNCiB9DQogDQorc3Rh dGljIHZvaWQNCithZGRTY3JpcHQoY29uc3QgY2hhciAqbmFtZSwgQ29tbWFu ZCAqKiBjb21tYW5kcykNCit7DQorCWlmIChjb21tYW5kcyA9PSBOVUxMKQ0K Kwl7DQorCQlmcHJpbnRmKHN0ZGVyciwgImVtcHR5IGNvbW1hbmRzIGZvciAl cyIsIG5hbWUpOw0KKwkJZXhpdCgxKTsNCisJfQ0KKw0KKwlpZiAobnVtX3Nj cmlwdHMgPj0gTUFYX1NDUklQVFMpDQorCXsNCisJCWZwcmludGYoc3RkZXJy LCAiYXQgbW9zdCAlZCBTUUwgc2NyaXB0cyBhcmUgYWxsb3dlZFxuIiwgTUFY X1NDUklQVFMpOw0KKwkJZXhpdCgxKTsNCisJfQ0KKw0KKwlzcWxfc2NyaXB0 W251bV9zY3JpcHRzXS5uYW1lID0gbmFtZTsNCisJc3FsX3NjcmlwdFtudW1f c2NyaXB0c10ud2VpZ2h0ID0gMTsNCisJc3FsX3NjcmlwdFtudW1fc2NyaXB0 c10uY29tbWFuZHMgPSBjb21tYW5kczsNCisJaW5pdFN0YXRzKCYgc3FsX3Nj cmlwdFtudW1fc2NyaXB0c10uc3RhdHMsIDAuMCk7DQorCW51bV9zY3JpcHRz Kys7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorcHJpbnRTaW1wbGVTdGF0cyhj aGFyICpwcmVmaXgsIFNpbXBsZVN0YXRzICpzcykNCit7DQorCS8qIHByaW50 IE5hTiBpZiBubyB0cmFuc2FjdGlvbnMgd2hlcmUgZXhlY3V0ZWQgKi8NCisJ ZG91YmxlIGxhdGVuY3kgPSBzcy0+c3VtIC8gc3MtPmNvdW50Ow0KKwlkb3Vi bGUgc3RkZGV2ID0gc3FydChzcy0+c3VtMiAvIHNzLT5jb3VudCAtIGxhdGVu Y3kqbGF0ZW5jeSk7DQorCXByaW50ZigiJXMgYXZlcmFnZSA9ICUuM2YgbXNc biIsIHByZWZpeCwgMC4wMDEgKiBsYXRlbmN5KTsNCisJcHJpbnRmKCIlcyBz dGRkZXYgPSAlLjNmIG1zXG4iLCBwcmVmaXgsIDAuMDAxICogc3RkZGV2KTsN Cit9DQorDQogLyogcHJpbnQgb3V0IHJlc3VsdHMgKi8NCiBzdGF0aWMgdm9p ZA0KLXByaW50UmVzdWx0cyhpbnQgdHR5cGUsIGludDY0IG5vcm1hbF94YWN0 cywgaW50IG5jbGllbnRzLA0KLQkJCSBUU3RhdGUgKnRocmVhZHMsIGludCBu dGhyZWFkcywNCi0JCQkgaW5zdHJfdGltZSB0b3RhbF90aW1lLCBpbnN0cl90 aW1lIGNvbm5fdG90YWxfdGltZSwNCi0JCQkgaW50NjQgdG90YWxfbGF0ZW5j aWVzLCBpbnQ2NCB0b3RhbF9zcWxhdHMsDQotCQkJIGludDY0IHRocm90dGxl X2xhZywgaW50NjQgdGhyb3R0bGVfbGFnX21heCwNCi0JCQkgaW50NjQgdGhy b3R0bGVfbGF0ZW5jeV9za2lwcGVkLCBpbnQ2NCBsYXRlbmN5X2xhdGUpDQor cHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3Rh bCwgaW5zdHJfdGltZSB0b3RhbF90aW1lLA0KKwkJCSBpbnN0cl90aW1lIGNv bm5fdG90YWxfdGltZSwgaW50IGxhdGVuY3lfbGF0ZSkNCiB7DQogCWRvdWJs ZQkJdGltZV9pbmNsdWRlLA0KIAkJCQl0cHNfaW5jbHVkZSwNCiAJCQkJdHBz X2V4Y2x1ZGU7DQotCWNoYXIJICAgKnM7DQogDQogCXRpbWVfaW5jbHVkZSA9 IElOU1RSX1RJTUVfR0VUX0RPVUJMRSh0b3RhbF90aW1lKTsNCi0JdHBzX2lu Y2x1ZGUgPSBub3JtYWxfeGFjdHMgLyB0aW1lX2luY2x1ZGU7DQotCXRwc19l eGNsdWRlID0gbm9ybWFsX3hhY3RzIC8gKHRpbWVfaW5jbHVkZSAtDQorCXRw c19pbmNsdWRlID0gdG90YWwtPmNudCAvIHRpbWVfaW5jbHVkZTsNCisJdHBz X2V4Y2x1ZGUgPSB0b3RhbC0+Y250IC8gKHRpbWVfaW5jbHVkZSAtDQogCQkJ CQkJKElOU1RSX1RJTUVfR0VUX0RPVUJMRShjb25uX3RvdGFsX3RpbWUpIC8g bnRocmVhZHMpKTsNCiANCi0JaWYgKHR0eXBlID09IDApDQotCQlzID0gIlRQ Qy1CIChzb3J0IG9mKSI7DQotCWVsc2UgaWYgKHR0eXBlID09IDIpDQotCQlz ID0gIlVwZGF0ZSBvbmx5IHBnYmVuY2hfYWNjb3VudHMiOw0KLQllbHNlIGlm ICh0dHlwZSA9PSAxKQ0KLQkJcyA9ICJTRUxFQ1Qgb25seSI7DQotCWVsc2UN Ci0JCXMgPSAiQ3VzdG9tIHF1ZXJ5IjsNCi0NCi0JcHJpbnRmKCJ0cmFuc2Fj dGlvbiB0eXBlOiAlc1xuIiwgcyk7DQorCXByaW50ZigidHJhbnNhY3Rpb24g dHlwZTogJXNcbiIsDQorCQkgICBudW1fc2NyaXB0cyA9PSAxPyBzcWxfc2Ny aXB0WzBdLm5hbWU6ICJtdWx0aXBsZSBzY3JpcHRzIik7DQogCXByaW50Zigi c2NhbGluZyBmYWN0b3I6ICVkXG4iLCBzY2FsZSk7DQogCXByaW50ZigicXVl cnkgbW9kZTogJXNcbiIsIFFVRVJZTU9ERVtxdWVyeW1vZGVdKTsNCiAJcHJp bnRmKCJudW1iZXIgb2YgY2xpZW50czogJWRcbiIsIG5jbGllbnRzKTsNCkBA IC0yNjMxLDQ5ICsyNjQzLDM4IEBAIHByaW50UmVzdWx0cyhpbnQgdHR5cGUs IGludDY0IG5vcm1hbF94YWN0cywgaW50IG5jbGllbnRzLA0KIAlpZiAoZHVy YXRpb24gPD0gMCkNCiAJew0KIAkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIHBlciBjbGllbnQ6ICVkXG4iLCBueGFjdHMpOw0KLQkJcHJpbnRm KCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDog IiBJTlQ2NF9GT1JNQVQgIi8iIElOVDY0X0ZPUk1BVCAiXG4iLA0KLQkJCSAg IG5vcm1hbF94YWN0cywgKGludDY0KSBueGFjdHMgKiBuY2xpZW50cyk7DQor CQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJv Y2Vzc2VkOiAiSU5UNjRfRk9STUFUIi8lZFxuIiwNCisJCQkgICB0b3RhbC0+ Y250LCBueGFjdHMgKiBuY2xpZW50cyk7DQogCX0NCiAJZWxzZQ0KIAl7DQog CQlwcmludGYoImR1cmF0aW9uOiAlZCBzXG4iLCBkdXJhdGlvbik7DQotCQlw cmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vz c2VkOiAiIElOVDY0X0ZPUk1BVCAiXG4iLA0KLQkJCSAgIG5vcm1hbF94YWN0 cyk7DQorCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFs bHkgcHJvY2Vzc2VkOiAiSU5UNjRfRk9STUFUIlxuIiwNCisJCQkgICB0b3Rh bC0+Y250KTsNCiAJfQ0KIA0KIAkvKiBSZW1haW5pbmcgc3RhdHMgYXJlIG5v bnNlbnNpY2FsIGlmIHdlIGZhaWxlZCB0byBleGVjdXRlIGFueSB4YWN0cyAq Lw0KLQlpZiAobm9ybWFsX3hhY3RzIDw9IDApDQorCWlmICh0b3RhbC0+Y250 IDw9IDApDQogCQlyZXR1cm47DQogDQogCWlmICh0aHJvdHRsZV9kZWxheSAm JiBsYXRlbmN5X2xpbWl0KQ0KLQkJcHJpbnRmKCJudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIHNraXBwZWQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4i LA0KLQkJCSAgIHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCwNCi0JCQkgICAx MDAuMCAqIHRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCAvICh0aHJvdHRsZV9s YXRlbmN5X3NraXBwZWQgKyBub3JtYWxfeGFjdHMpKTsNCisJCXByaW50Zigi bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAiSU5UNjRfRk9STUFU IiAoJS4zZiAlJSlcbiIsDQorCQkJICAgdG90YWwtPnNraXBwZWQsDQorCQkJ ICAgMTAwLjAgKiB0b3RhbC0+c2tpcHBlZCAvICh0b3RhbC0+c2tpcHBlZCAr IHRvdGFsLT5jbnQpKTsNCiANCiAJaWYgKGxhdGVuY3lfbGltaXQpDQotCQlw cmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWJvdmUgdGhlICUuMWYg bXMgbGF0ZW5jeSBsaW1pdDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlc biIsDQorCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMgYWJvdmUg dGhlICUuMWYgbXMgbGF0ZW5jeSBsaW1pdDogJWQgKCUuM2YgJSUpXG4iLA0K IAkJCSAgIGxhdGVuY3lfbGltaXQgLyAxMDAwLjAsIGxhdGVuY3lfbGF0ZSwN Ci0JCSAgIDEwMC4wICogbGF0ZW5jeV9sYXRlIC8gKHRocm90dGxlX2xhdGVu Y3lfc2tpcHBlZCArIG5vcm1hbF94YWN0cykpOw0KKwkJICAgMTAwLjAgKiBs YXRlbmN5X2xhdGUgLyAodG90YWwtPnNraXBwZWQgKyB0b3RhbC0+Y250KSk7 DQogDQogCWlmICh0aHJvdHRsZV9kZWxheSB8fCBwcm9ncmVzcyB8fCBsYXRl bmN5X2xpbWl0KQ0KLQl7DQotCQkvKiBjb21wdXRlIGFuZCBzaG93IGxhdGVu Y3kgYXZlcmFnZSBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uICovDQotCQlkb3Vi bGUJCWxhdGVuY3kgPSAwLjAwMSAqIHRvdGFsX2xhdGVuY2llcyAvIG5vcm1h bF94YWN0czsNCi0JCWRvdWJsZQkJc3FsYXQgPSAoZG91YmxlKSB0b3RhbF9z cWxhdHMgLyBub3JtYWxfeGFjdHM7DQotDQotCQlwcmludGYoImxhdGVuY3kg YXZlcmFnZTogJS4zZiBtc1xuIg0KLQkJCSAgICJsYXRlbmN5IHN0ZGRldjog JS4zZiBtc1xuIiwNCi0JCQkgICBsYXRlbmN5LCAwLjAwMSAqIHNxcnQoc3Fs YXQgLSAxMDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSkpOw0KLQl9DQor CQlwcmludFNpbXBsZVN0YXRzKCJsYXRlbmN5IiwgJiB0b3RhbC0+bGF0ZW5j eSk7DQogCWVsc2UNCi0Jew0KIAkJLyogb25seSBhbiBhdmVyYWdlIGxhdGVu Y3kgY29tcHV0ZWQgZnJvbSB0aGUgZHVyYXRpb24gaXMgYXZhaWxhYmxlICov DQogCQlwcmludGYoImxhdGVuY3kgYXZlcmFnZTogJS4zZiBtc1xuIiwNCi0J CQkgICAxMDAwLjAgKiBkdXJhdGlvbiAqIG5jbGllbnRzIC8gbm9ybWFsX3hh Y3RzKTsNCi0JfQ0KKwkJCSAgIDEwMDAuMCAqIGR1cmF0aW9uICogbmNsaWVu dHMgLyB0b3RhbC0+Y250KTsNCiANCiAJaWYgKHRocm90dGxlX2RlbGF5KQ0K LQl7DQogCQkvKg0KIAkJICogUmVwb3J0IGF2ZXJhZ2UgdHJhbnNhY3Rpb24g bGFnIHVuZGVyIHJhdGUgbGltaXQgdGhyb3R0bGluZy4gIFRoaXMNCiAJCSAq IGlzIHRoZSBkZWxheSBiZXR3ZWVuIHNjaGVkdWxlZCBhbmQgYWN0dWFsIHN0 YXJ0IHRpbWVzIGZvciB0aGUNCkBAIC0yNjgxLDI3ICsyNjgyLDQ4IEBAIHBy aW50UmVzdWx0cyhpbnQgdHR5cGUsIGludDY0IG5vcm1hbF94YWN0cywgaW50 IG5jbGllbnRzLA0KIAkJICogdGhlIGRhdGFiYXNlIGxvYWQsIG9yIHRoZSBQ b2lzc29uIHRocm90dGxpbmcgcHJvY2Vzcy4NCiAJCSAqLw0KIAkJcHJpbnRm KCJyYXRlIGxpbWl0IHNjaGVkdWxlIGxhZzogYXZnICUuM2YgKG1heCAlLjNm KSBtc1xuIiwNCi0JCQkgICAwLjAwMSAqIHRocm90dGxlX2xhZyAvIG5vcm1h bF94YWN0cywgMC4wMDEgKiB0aHJvdHRsZV9sYWdfbWF4KTsNCi0JfQ0KKwkJ CSAgIDAuMDAxICogdG90YWwtPmxhZy5zdW0gLyB0b3RhbC0+Y250LCAwLjAw MSAqIHRvdGFsLT5sYWcubWF4KTsNCiANCiAJcHJpbnRmKCJ0cHMgPSAlZiAo aW5jbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZylcbiIsIHRwc19p bmNsdWRlKTsNCiAJcHJpbnRmKCJ0cHMgPSAlZiAoZXhjbHVkaW5nIGNvbm5l Y3Rpb25zIGVzdGFibGlzaGluZylcbiIsIHRwc19leGNsdWRlKTsNCiANCisJ LyogUmVwb3J0IHBlci1maWxlIGRhdGEgKi8NCisJaWYgKHBlcl9zY3JpcHRf c3RhdHMpDQorCXsNCisJCWludCBpOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8 IG51bV9zY3JpcHRzOyBpKyspDQorCQl7DQorCQkJcHJpbnRmKCJTUUwgc2Ny aXB0ICVkLCB3ZWlnaHQgJWQ6ICVzXG4iDQorCQkJCSAgICIgLSAiSU5UNjRf Rk9STUFUIiB0cmFuc2FjdGlvbnMgKHRwcyA9ICVmKVxuIiwNCisJCQkJICAg aSwgc3FsX3NjcmlwdFtpXS53ZWlnaHQsIHNxbF9zY3JpcHRbaV0ubmFtZSwN CisJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQsIHNxbF9zY3JpcHRb aV0uc3RhdHMuY250IC8gdGltZV9pbmNsdWRlKTsNCisNCisJCQlpZiAobGF0 ZW5jeV9saW1pdCkNCisJCQkJcHJpbnRmKCIgLSBudW1iZXIgb2YgdHJhbnNh Y3Rpb25zIHNraXBwZWQ6ICJJTlQ2NF9GT1JNQVQiICglLjNmJSUpXG4iLA0K KwkJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5za2lwcGVkLA0KKwkJCQkJ ICAgMTAwLjAgKiBzcWxfc2NyaXB0W2ldLnN0YXRzLnNraXBwZWQgLw0KKwkJ CQkJICAgKHNxbF9zY3JpcHRbaV0uc3RhdHMuc2tpcHBlZCArIHNxbF9zY3Jp cHRbaV0uc3RhdHMuY250KSk7DQorDQorCQkJcHJpbnRTaW1wbGVTdGF0cygi IC0gbGF0ZW5jeSIsICYgc3FsX3NjcmlwdFtpXS5zdGF0cy5sYXRlbmN5KTsN CisJCX0NCisJfQ0KKw0KIAkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5j aWVzICovDQogCWlmIChpc19sYXRlbmNpZXMpDQogCXsNCiAJCWludAkJCWk7 DQogDQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyBpKyspDQorCQlm b3IgKGkgPSAwOyBpIDwgbnVtX3NjcmlwdHM7IGkrKykNCiAJCXsNCiAJCQlD b21tYW5kICAgKipjb21tYW5kczsNCiANCi0JCQlpZiAobnVtX2ZpbGVzID4g MSkNCisJCQlpZiAobnVtX3NjcmlwdHMgPiAxKQ0KIAkJCQlwcmludGYoInN0 YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzLCBmaWxlICVkOlxu IiwgaSArIDEpOw0KIAkJCWVsc2UNCiAJCQkJcHJpbnRmKCJzdGF0ZW1lbnQg bGF0ZW5jaWVzIGluIG1pbGxpc2Vjb25kczpcbiIpOw0KIA0KLQkJCWZvciAo Y29tbWFuZHMgPSBzcWxfZmlsZXNbaV07ICpjb21tYW5kcyAhPSBOVUxMOyBj b21tYW5kcysrKQ0KKwkJCWZvciAoY29tbWFuZHMgPSBzcWxfc2NyaXB0W2ld LmNvbW1hbmRzOyAqY29tbWFuZHMgIT0gTlVMTDsgY29tbWFuZHMrKykNCiAJ CQl7DQogCQkJCUNvbW1hbmQgICAgKmNvbW1hbmQgPSAqY29tbWFuZHM7DQog CQkJCWludAkJCWNudW0gPSBjb21tYW5kLT5jb21tYW5kX251bTsNCkBAIC0y NzM5LDYgKzI3NjEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikN CiB7DQogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0g ew0KIAkJLyogc3lzdGVtYXRpYyBsb25nL3Nob3J0IG5hbWVkIG9wdGlvbnMg Ki8NCisJCXsidHBjLWIiLCBub19hcmd1bWVudCwgTlVMTCwgJ0InfSwNCiAJ CXsiY2xpZW50IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdjJ30sDQog CQl7ImNvbm5lY3QiLCBub19hcmd1bWVudCwgTlVMTCwgJ0MnfSwNCiAJCXsi ZGVidWciLCBub19hcmd1bWVudCwgTlVMTCwgJ2QnfSwNCkBAIC0yNzQ5LDEy ICsyNzcyLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJ eyJpbml0aWFsaXplIiwgbm9fYXJndW1lbnQsIE5VTEwsICdpJ30sDQogCQl7 ImpvYnMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ2onfSwNCiAJCXsi bG9nIiwgbm9fYXJndW1lbnQsIE5VTEwsICdsJ30sDQorCQl7ImxhdGVuY3kt bGltaXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0wnfSwNCiAJCXsi bm8tdmFjdXVtIiwgbm9fYXJndW1lbnQsIE5VTEwsICduJ30sDQogCQl7InBv cnQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwNCiAJCXsicHJv Z3Jlc3MiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1AnfSwNCiAJCXsi cHJvdG9jb2wiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ00nfSwNCiAJ CXsicXVpZXQiLCBub19hcmd1bWVudCwgTlVMTCwgJ3EnfSwNCiAJCXsicmVw b3J0LWxhdGVuY2llcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncid9LA0KKwkJ eyJyYXRlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sDQogCQl7 InNjYWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sDQogCQl7 InNlbGVjdC1vbmx5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdTJ30sDQogCQl7 InNraXAtc29tZS11cGRhdGVzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdOJ30s DQpAQCAtMjc2Miw2ICsyNzg3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogCQl7InRyYW5zYWN0aW9ucyIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCAndCd9LA0KIAkJeyJ1c2VybmFtZSIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAnVSd9LA0KIAkJeyJ2YWN1dW0tYWxsIiwgbm9fYXJndW1l bnQsIE5VTEwsICd2J30sDQorCQl7IndlaWdodCIsIHJlcXVpcmVkX2FyZ3Vt ZW50LCBOVUxMLCAndyd9LA0KIAkJLyogbG9uZy1uYW1lZCBvbmx5IG9wdGlv bnMgKi8NCiAJCXsiZm9yZWlnbi1rZXlzIiwgbm9fYXJndW1lbnQsICZmb3Jl aWduX2tleXMsIDF9LA0KIAkJeyJpbmRleC10YWJsZXNwYWNlIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDN9LA0KQEAgLTI3NjksMjUgKzI3OTUsMjAg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl7InVubG9nZ2Vk LXRhYmxlcyIsIG5vX2FyZ3VtZW50LCAmdW5sb2dnZWRfdGFibGVzLCAxfSwN CiAJCXsic2FtcGxpbmctcmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxM LCA0fSwNCiAJCXsiYWdncmVnYXRlLWludGVydmFsIiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsIDV9LA0KLQkJeyJyYXRlIiwgcmVxdWlyZWRfYXJndW1l bnQsIE5VTEwsICdSJ30sDQotCQl7ImxhdGVuY3ktbGltaXQiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgJ0wnfSwNCisJCXsicGVyLXNjcmlwdC1zdGF0 cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA2fSwNCiAJCXtOVUxMLCAwLCBOVUxM LCAwfQ0KIAl9Ow0KIA0KIAlpbnQJCQljOw0KLQlpbnQJCQluY2xpZW50cyA9 IDE7CS8qIGRlZmF1bHQgbnVtYmVyIG9mIHNpbXVsYXRlZCBjbGllbnRzICov DQotCWludAkJCW50aHJlYWRzID0gMTsJLyogZGVmYXVsdCBudW1iZXIgb2Yg dGhyZWFkcyAqLw0KIAlpbnQJCQlpc19pbml0X21vZGUgPSAwOwkJLyogaW5p dGlhbGl6ZSBtb2RlPyAqLw0KIAlpbnQJCQlpc19ub192YWN1dW0gPSAwOwkJ Lyogbm8gdmFjdXVtIGF0IGFsbCBiZWZvcmUgdGVzdGluZz8gKi8NCiAJaW50 CQkJZG9fdmFjdXVtX2FjY291bnRzID0gMDsgLyogZG8gdmFjdXVtIGFjY291 bnRzIGJlZm9yZSB0ZXN0aW5nPyAqLw0KLQlpbnQJCQl0dHlwZSA9IDA7CQkv KiB0cmFuc2FjdGlvbiB0eXBlLiAwOiBUUEMtQiwgMTogU0VMRUNUIG9ubHks DQotCQkJCQkJCQkgKiAyOiBza2lwIHVwZGF0ZSBvZiBicmFuY2hlcyBhbmQg dGVsbGVycyAqLw0KIAlpbnQJCQlvcHRpbmRleDsNCi0JY2hhcgkgICAqZmls ZW5hbWUgPSBOVUxMOw0KIAlib29sCQlzY2FsZV9naXZlbiA9IGZhbHNlOw0K IA0KIAlib29sCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IGZhbHNlOw0K IAlib29sCQlpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0ID0gZmFsc2U7DQor CWJvb2wJCWludGVybmFsX3NjcmlwdF91c2VkID0gZmFsc2U7DQogDQogCUNT dGF0ZQkgICAqc3RhdGU7CQkJLyogc3RhdHVzIG9mIGNsaWVudHMgKi8NCiAJ VFN0YXRlCSAgICp0aHJlYWRzOwkJLyogYXJyYXkgb2YgdGhyZWFkICovDQpA QCAtMjc5NSwxMyArMjgxNiw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAlpbnN0cl90aW1lCXN0YXJ0X3RpbWU7CQkvKiBzdGFydCB1cCB0 aW1lICovDQogCWluc3RyX3RpbWUJdG90YWxfdGltZTsNCiAJaW5zdHJfdGlt ZQljb25uX3RvdGFsX3RpbWU7DQotCWludDY0CQl0b3RhbF94YWN0cyA9IDA7 DQotCWludDY0CQl0b3RhbF9sYXRlbmNpZXMgPSAwOw0KLQlpbnQ2NAkJdG90 YWxfc3FsYXRzID0gMDsNCi0JaW50NjQJCXRocm90dGxlX2xhZyA9IDA7DQot CWludDY0CQl0aHJvdHRsZV9sYWdfbWF4ID0gMDsNCi0JaW50NjQJCXRocm90 dGxlX2xhdGVuY3lfc2tpcHBlZCA9IDA7DQogCWludDY0CQlsYXRlbmN5X2xh dGUgPSAwOw0KKwlTdGF0c0RhdGEJc3RhdHM7DQogDQogCWludAkJCWk7DQog CWludAkJCW5jbGllbnRzX2RlYWx0Ow0KQEAgLTI4NDcsNyArMjg2Myw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlzdGF0ZSA9IChDU3Rh dGUgKikgcGdfbWFsbG9jKHNpemVvZihDU3RhdGUpKTsNCiAJbWVtc2V0KHN0 YXRlLCAwLCBzaXplb2YoQ1N0YXRlKSk7DQogDQotCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJpaDpudnA6ZHFTTmM6ajpDcnM6dDpU OlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgp KSAhPSAtMSkNCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgImloOm52cDpkcUJTTnc6YzpqOkNyczp0OlQ6VTpsZjpEOkY6TTpQOlI6 TDoiLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQ0KIAl7DQog CQlzd2l0Y2ggKGMpDQogCQl7DQpAQCAtMjg2OSwxNCArMjg4NSw2IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCWNhc2UgJ2QnOg0KIAkJ CQlkZWJ1ZysrOw0KIAkJCQlicmVhazsNCi0JCQljYXNlICdTJzoNCi0JCQkJ dHR5cGUgPSAxOw0KLQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRy dWU7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgJ04nOg0KLQkJCQl0dHlwZSA9 IDI7DQotCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0J CQkJYnJlYWs7DQogCQkJY2FzZSAnYyc6DQogCQkJCWJlbmNobWFya2luZ19v cHRpb25fc2V0ID0gdHJ1ZTsNCiAJCQkJbmNsaWVudHMgPSBhdG9pKG9wdGFy Zyk7DQpAQCAtMjk3OSwxMiArMjk4Nyw0NCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJCQkJaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCA9 IHRydWU7DQogCQkJCXVzZV9xdWlldCA9IHRydWU7DQogCQkJCWJyZWFrOw0K KwkJCQkvKiB3aGF0IHRvIHJ1biovDQogCQkJY2FzZSAnZic6DQorCQkJCWFk ZFNjcmlwdChvcHRhcmcsIHByb2Nlc3NfZmlsZShvcHRhcmcpKTsNCiAJCQkJ YmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KLQkJCQl0dHlwZSA9 IDM7DQotCQkJCWZpbGVuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7DQotCQkJ CWlmIChwcm9jZXNzX2ZpbGUoZmlsZW5hbWUpID09IGZhbHNlIHx8ICpzcWxf ZmlsZXNbbnVtX2ZpbGVzIC0gMV0gPT0gTlVMTCkNCi0JCQkJCWV4aXQoMSk7 DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgJ0InOg0KKwkJCQlhZGRTY3JpcHQo Yl9iZW5jaCwgcHJvY2Vzc19idWlsdGluKHRwY19iLCBiX2JlbmNoKSk7DQor CQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50 ZXJuYWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KKwkJCQlicmVhazsNCisJCQlj YXNlICdTJzoNCisJCQkJYWRkU2NyaXB0KHNfYmVuY2gsIHByb2Nlc3NfYnVp bHRpbihzZWxlY3Rfb25seSwgc19iZW5jaCkpOw0KKwkJCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91 c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAnTic6DQorCQkJ CWFkZFNjcmlwdChuX2JlbmNoLCBwcm9jZXNzX2J1aWx0aW4oc2ltcGxlX3Vw ZGF0ZSwgbl9iZW5jaCkpOw0KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3Nl dCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsN CisJCQkJYnJlYWs7DQorCQkJY2FzZSAndyc6DQorCQkJCXsNCisJCQkJCWlu dCB3ZWlnaHQgPSBhdG9pKG9wdGFyZyk7DQorCQkJCQlpZiAod2VpZ2h0IDw9 IDApDQorCQkJCQl7DQorCQkJCQkJZnByaW50ZihzdGRlcnIsDQorCQkJCQkJ CQkiaW52YWxpZCB3ZWlnaHQgdmFsdWU6IFwiJXNcIlxuIiwgb3B0YXJnKTsN CisJCQkJCQlleGl0KDEpOw0KKwkJCQkJfQ0KKwkJCQkJaWYgKG51bV9zY3Jp cHRzID09IDApDQorCQkJCQl7DQorCQkJCQkJZnByaW50ZihzdGRlcnIsDQor CQkJCQkJCQkid2VpZ2h0IG11c3QgY29tZSBhZnRlciBpdHMgc2NyaXB0IHNl bGVjdGlvbiINCisJCQkJCQkJCSIgKC1CIC1OIC1TIG9yIC1mIC4uLilcbiIp Ow0KKwkJCQkJCWV4aXQoMSk7DQorCQkJCQl9DQorCQkJCQlzcWxfc2NyaXB0 W251bV9zY3JpcHRzIC0gMV0ud2VpZ2h0ID0gd2VpZ2h0Ow0KKwkJCQl9DQog CQkJCWJyZWFrOw0KIAkJCWNhc2UgJ0QnOg0KIAkJCQl7DQpAQCAtMzAxNSw3 ICszMDU1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJ CWJyZWFrOw0KIAkJCWNhc2UgJ00nOg0KIAkJCQliZW5jaG1hcmtpbmdfb3B0 aW9uX3NldCA9IHRydWU7DQotCQkJCWlmIChudW1fZmlsZXMgPiAwKQ0KKwkJ CQlpZiAobnVtX3NjcmlwdHMgPiAwKQ0KIAkJCQl7DQogCQkJCQlmcHJpbnRm KHN0ZGVyciwgInF1ZXJ5IG1vZGUgKC1NKSBzaG91bGQgYmUgc3BlY2lmaWVk IGJlZm9yZSBhbnkgdHJhbnNhY3Rpb24gc2NyaXB0cyAoLWYpXG4iKTsNCiAJ CQkJCWV4aXQoMSk7DQpAQCAtMzEwNyw2ICszMTQ3LDkgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCQkJCX0NCiAjZW5kaWYNCiAJCQkJYnJl YWs7DQorCQkJY2FzZSA2Og0KKwkJCQlwZXJfc2NyaXB0X3N0YXRzID0gdHJ1 ZTsNCisJCQkJYnJlYWs7DQogCQkJZGVmYXVsdDoNCiAJCQkJZnByaW50Zihz dGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0 aW9uLlxuIiksIHByb2duYW1lKTsNCiAJCQkJZXhpdCgxKTsNCkBAIC0zMTE0 LDYgKzMxNTcsMTggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQog CQl9DQogCX0NCiANCisJLyogc2V0IGRlZmF1bHQgc2NyaXB0IGlmIG5vbmUg Ki8NCisJaWYgKG51bV9zY3JpcHRzID09IDAgJiYgIWluaXRpYWxpemF0aW9u X29wdGlvbl9zZXQpDQorCXsNCisJCWFkZFNjcmlwdChiX2JlbmNoLCBwcm9j ZXNzX2J1aWx0aW4odHBjX2IsIGJfYmVuY2gpKTsNCisJCWJlbmNobWFya2lu Z19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCWludGVybmFsX3NjcmlwdF91c2Vk ID0gdHJ1ZTsNCisJfQ0KKw0KKwkvKiBjb21wdXRlIHRvdGFsX3dlaWdodCAq Lw0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NjcmlwdHM7IGkrKykNCisJCXRv dGFsX3dlaWdodCArPSBzcWxfc2NyaXB0W2ldLndlaWdodDsNCisNCiAJLyoN CiAJICogRG9uJ3QgbmVlZCBtb3JlIHRocmVhZHMgdGhhbiB0aGVyZSBhcmUg Y2xpZW50cy4gIChUaGlzIGlzIG5vdCBtZXJlbHkgYW4NCiAJICogb3B0aW1p emF0aW9uOyB0aHJvdHRsZV9kZWxheSBpcyBjYWxjdWxhdGVkIGluY29ycmVj dGx5IGJlbG93IGlmIHNvbWUNCkBAIC0zMTk4LDggKzMyNTMsNiBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJICogY2hhbmdlZCBhZnRlciBm b3JrLg0KIAkgKi8NCiAJbWFpbl9waWQgPSAoaW50KSBnZXRwaWQoKTsNCi0J cHJvZ3Jlc3NfbmNsaWVudHMgPSBuY2xpZW50czsNCi0JcHJvZ3Jlc3NfbnRo cmVhZHMgPSBudGhyZWFkczsNCiANCiAJaWYgKG5jbGllbnRzID4gMSkNCiAJ ew0KQEAgLTMyNDIsNyArMzI5NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KIAkJZXhpdCgxKTsNCiAJfQ0KIA0KLQlpZiAodHR5cGUgIT0g MykNCisJaWYgKGludGVybmFsX3NjcmlwdF91c2VkKQ0KIAl7DQogCQkvKg0K IAkJICogZ2V0IHRoZSBzY2FsaW5nIGZhY3RvciB0aGF0IHNob3VsZCBiZSBz YW1lIGFzIGNvdW50KCopIGZyb20NCkBAIC0zMzE5LDMxICszMzcyLDYgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoc3RhcnRfdGltZSk7DQogCXNyYW5kb20oKHVuc2lnbmVkIGlu dCkgSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3RhcnRfdGltZSkpOw0KIA0K LQkvKiBwcm9jZXNzIGJ1aWx0aW4gU1FMIHNjcmlwdHMgKi8NCi0Jc3dpdGNo ICh0dHlwZSkNCi0Jew0KLQkJY2FzZSAwOg0KLQkJCXNxbF9maWxlc1swXSA9 IHByb2Nlc3NfYnVpbHRpbih0cGNfYiwNCi0JCQkJCQkJCQkJICAgIjxidWls dGluOiBUUEMtQiAoc29ydCBvZik+Iik7DQotCQkJbnVtX2ZpbGVzID0gMTsN Ci0JCQlicmVhazsNCi0NCi0JCWNhc2UgMToNCi0JCQlzcWxfZmlsZXNbMF0g PSBwcm9jZXNzX2J1aWx0aW4oc2VsZWN0X29ubHksDQotCQkJCQkJCQkJCSAg ICI8YnVpbHRpbjogc2VsZWN0IG9ubHk+Iik7DQotCQkJbnVtX2ZpbGVzID0g MTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgMjoNCi0JCQlzcWxfZmlsZXNb MF0gPSBwcm9jZXNzX2J1aWx0aW4oc2ltcGxlX3VwZGF0ZSwNCi0JCQkJCQkJ CQkJICAgIjxidWlsdGluOiBzaW1wbGUgdXBkYXRlPiIpOw0KLQkJCW51bV9m aWxlcyA9IDE7DQotCQkJYnJlYWs7DQotDQotCQlkZWZhdWx0Og0KLQkJCWJy ZWFrOw0KLQl9DQotDQogCS8qIHNldCB1cCB0aHJlYWQgZGF0YSBzdHJ1Y3R1 cmVzICovDQogCXRocmVhZHMgPSAoVFN0YXRlICopIHBnX21hbGxvYyhzaXpl b2YoVFN0YXRlKSAqIG50aHJlYWRzKTsNCiAJbmNsaWVudHNfZGVhbHQgPSAw Ow0KQEAgLTMzNTksOCArMzM4Nyw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KIAkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMF0gPSByYW5kb20o KTsNCiAJCXRocmVhZC0+cmFuZG9tX3N0YXRlWzFdID0gcmFuZG9tKCk7DQog CQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsyXSA9IHJhbmRvbSgpOw0KLQkJdGhy ZWFkLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgPSAwOw0KIAkJdGhyZWFk LT5sYXRlbmN5X2xhdGUgPSAwOw0KKwkJaW5pdFN0YXRzKCYgdGhyZWFkLT5z dGF0cywgMC4wKTsNCiANCiAJCW5jbGllbnRzX2RlYWx0ICs9IHRocmVhZC0+ bnN0YXRlOw0KIA0KQEAgLTM0MjcsMTEgKzM0NTUsMTEgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogI2VuZGlmICAgLyogRU5BQkxFX1RIUkVB RF9TQUZFVFkgKi8NCiANCiAJLyogd2FpdCBmb3IgdGhyZWFkcyBhbmQgYWNj dW11bGF0ZSByZXN1bHRzICovDQorCWluaXRTdGF0cygmIHN0YXRzLCAwLjAp Ow0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKGNvbm5fdG90YWxfdGltZSk7DQog CWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0KIAl7DQogCQlUU3Rh dGUJICAgKnRocmVhZCA9ICZ0aHJlYWRzW2ldOw0KLQkJaW50CQkJajsNCiAN CiAjaWZkZWYgRU5BQkxFX1RIUkVBRF9TQUZFVFkNCiAJCWlmICh0aHJlYWRz W2ldLnRocmVhZCA9PSBJTlZBTElEX1RIUkVBRCkNCkBAIC0zNDQ0LDIxICsz NDcyLDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJKHZv aWQpIHRocmVhZFJ1bih0aHJlYWQpOw0KICNlbmRpZiAgIC8qIEVOQUJMRV9U SFJFQURfU0FGRVRZICovDQogDQotCQkvKiB0aHJlYWQgbGV2ZWwgc3RhdHMg Ki8NCi0JCXRocm90dGxlX2xhZyArPSB0aHJlYWQtPnRocm90dGxlX2xhZzsN Ci0JCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCA9IHRocmVhZHMtPnRocm90 dGxlX2xhdGVuY3lfc2tpcHBlZDsNCi0JCWxhdGVuY3lfbGF0ZSA9IHRocmVh ZC0+bGF0ZW5jeV9sYXRlOw0KLQkJaWYgKHRocm90dGxlX2xhZ19tYXggPiB0 aHJlYWQtPnRocm90dGxlX2xhZ19tYXgpDQotCQkJdGhyb3R0bGVfbGFnX21h eCA9IHRocmVhZC0+dGhyb3R0bGVfbGFnX21heDsNCisJCS8qIGFnZ3JlZ2F0 ZSB0aHJlYWQgbGV2ZWwgc3RhdHMgKi8NCisJCWFwcGVuZFNpbXBsZVN0YXRz KCYgc3RhdHMubGF0ZW5jeSwgJiB0aHJlYWQtPnN0YXRzLmxhdGVuY3kpOw0K KwkJYXBwZW5kU2ltcGxlU3RhdHMoJiBzdGF0cy5sYWcsICYgdGhyZWFkLT5z dGF0cy5sYWcpOw0KKwkJc3RhdHMuY250ICs9IHRocmVhZC0+c3RhdHMuY250 Ow0KKwkJc3RhdHMuc2tpcHBlZCArPSB0aHJlYWQtPnN0YXRzLnNraXBwZWQ7 DQorCQlsYXRlbmN5X2xhdGUgKz0gdGhyZWFkLT5sYXRlbmN5X2xhdGU7DQog CQlJTlNUUl9USU1FX0FERChjb25uX3RvdGFsX3RpbWUsIHRocmVhZC0+Y29u bl90aW1lKTsNCi0NCi0JCS8qIGNsaWVudC1sZXZlbCBzdGF0cyAqLw0KLQkJ Zm9yIChqID0gMDsgaiA8IHRocmVhZC0+bnN0YXRlOyBqKyspDQotCQl7DQot CQkJdG90YWxfeGFjdHMgKz0gdGhyZWFkLT5zdGF0ZVtqXS5jbnQ7DQotCQkJ dG90YWxfbGF0ZW5jaWVzICs9IHRocmVhZC0+c3RhdGVbaV0udHhuX2xhdGVu Y2llczsNCi0JCQl0b3RhbF9zcWxhdHMgKz0gdGhyZWFkLT5zdGF0ZVtpXS50 eG5fc3FsYXRzOw0KLQkJfQ0KIAl9DQogCWRpc2Nvbm5lY3RfYWxsKHN0YXRl LCBuY2xpZW50cyk7DQogDQpAQCAtMzQ3NCwxMCArMzQ5NCw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkgKi8NCiAJSU5TVFJfVElNRV9T RVRfQ1VSUkVOVCh0b3RhbF90aW1lKTsNCiAJSU5TVFJfVElNRV9TVUJUUkFD VCh0b3RhbF90aW1lLCBzdGFydF90aW1lKTsNCi0JcHJpbnRSZXN1bHRzKHR0 eXBlLCB0b3RhbF94YWN0cywgbmNsaWVudHMsIHRocmVhZHMsIG50aHJlYWRz LA0KLQkJCQkgdG90YWxfdGltZSwgY29ubl90b3RhbF90aW1lLCB0b3RhbF9s YXRlbmNpZXMsIHRvdGFsX3NxbGF0cywNCi0JCQkJIHRocm90dGxlX2xhZywg dGhyb3R0bGVfbGFnX21heCwgdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkLA0K LQkJCQkgbGF0ZW5jeV9sYXRlKTsNCisJcHJpbnRSZXN1bHRzKHRocmVhZHMs ICZzdGF0cywgdG90YWxfdGltZSwgY29ubl90b3RhbF90aW1lLCBsYXRlbmN5 X2xhdGUpOw0KIA0KIAlyZXR1cm4gMDsNCiB9DQpAQCAtMzQ5OCwxMyArMzUx NSw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCWludDY0CQl0aHJlYWRf c3RhcnQgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyh0aHJlYWQtPnN0YXJ0 X3RpbWUpOw0KIAlpbnQ2NAkJbGFzdF9yZXBvcnQgPSB0aHJlYWRfc3RhcnQ7 DQogCWludDY0CQluZXh0X3JlcG9ydCA9IGxhc3RfcmVwb3J0ICsgKGludDY0 KSBwcm9ncmVzcyAqIDEwMDAwMDA7DQotCWludDY0CQlsYXN0X2NvdW50ID0g MCwNCi0JCQkJbGFzdF9sYXRzID0gMCwNCi0JCQkJbGFzdF9zcWxhdHMgPSAw LA0KLQkJCQlsYXN0X2xhZ3MgPSAwLA0KLQkJCQlsYXN0X3NraXBwZWQgPSAw Ow0KLQ0KLQlBZ2dWYWxzCQlhZ2dzOw0KKwlTdGF0c0RhdGEJbGFzdCwgYWdn czsNCiANCiAJLyoNCiAJICogSW5pdGlhbGl6ZSB0aHJvdHRsaW5nIHJhdGUg dGFyZ2V0IGZvciBhbGwgb2YgdGhlIHRocmVhZCdzIGNsaWVudHMuICBJdA0K QEAgLTM1MTQsOCArMzUyNSw2IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQog CSAqLw0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0KTsNCiAJdGhy ZWFkLT50aHJvdHRsZV90cmlnZ2VyID0gSU5TVFJfVElNRV9HRVRfTUlDUk9T RUMoc3RhcnQpOw0KLQl0aHJlYWQtPnRocm90dGxlX2xhZyA9IDA7DQotCXRo cmVhZC0+dGhyb3R0bGVfbGFnX21heCA9IDA7DQogDQogCUlOU1RSX1RJTUVf U0VUX1pFUk8odGhyZWFkLT5jb25uX3RpbWUpOw0KIA0KQEAgLTM1NTIsMTYg KzM1NjEsMTcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJSU5TVFJfVElN RV9TRVRfQ1VSUkVOVCh0aHJlYWQtPmNvbm5fdGltZSk7DQogCUlOU1RSX1RJ TUVfU1VCVFJBQ1QodGhyZWFkLT5jb25uX3RpbWUsIHRocmVhZC0+c3RhcnRf dGltZSk7DQogDQotCWFnZ192YWxzX2luaXQoJmFnZ3MsIHRocmVhZC0+c3Rh cnRfdGltZSk7DQorCWluaXRTdGF0cygmYWdncywgSU5TVFJfVElNRV9HRVRf RE9VQkxFKHRocmVhZC0+c3RhcnRfdGltZSkpOw0KKwlsYXN0ID0gYWdnczsN CiANCiAJLyogc2VuZCBzdGFydCB1cCBxdWVyaWVzIGluIGFzeW5jIG1hbm5l ciAqLw0KIAlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBpKyspDQogCXsNCiAJ CUNTdGF0ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQlDb21tYW5kICAgKipj b21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwkJQ29tbWFu ZCAgICoqY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29t bWFuZHM7DQogCQlpbnQJCQlwcmV2X2VjbnQgPSBzdC0+ZWNudDsNCiANCi0J CXN0LT51c2VfZmlsZSA9IGdldHJhbmQodGhyZWFkLCAwLCBudW1fZmlsZXMg LSAxKTsNCisJCXN0LT51c2VfZmlsZSA9IG51bV9zY3JpcHRzPT0xPyAwOiBj aG9vc2VTY3JpcHQodGhyZWFkKTsNCiAJCWlmICghZG9DdXN0b20odGhyZWFk LCBzdCwgJnRocmVhZC0+Y29ubl90aW1lLCBsb2dmaWxlLCAmYWdncykpDQog CQkJcmVtYWlucy0tOwkJCS8qIEkndmUgYWJvcnRlZCAqLw0KIA0KQEAgLTM1 ODksNyArMzU5OSw3IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQlmb3Ig KGkgPSAwOyBpIDwgbnN0YXRlOyBpKyspDQogCQl7DQogCQkJQ1N0YXRlCSAg ICpzdCA9ICZzdGF0ZVtpXTsNCi0JCQlDb21tYW5kICAgKipjb21tYW5kcyA9 IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwkJCUNvbW1hbmQgICAqKmNv bW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1hbmRzOw0K IAkJCWludAkJCXNvY2s7DQogDQogCQkJaWYgKHN0LT5jb24gPT0gTlVMTCkN CkBAIC0zNjAyLDcgKzM2MTIsNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0K IAkJCQl7DQogCQkJCQkvKiBpbnRlcnJ1cHQgY2xpZW50IHdoaWNoIGhhcyBu b3Qgc3RhcnRlZCBhIHRyYW5zYWN0aW9uICovDQogCQkJCQlyZW1haW5zLS07 DQotCQkJCQlzdC0+c2xlZXBpbmcgPSAwOw0KKwkJCQkJc3QtPnNsZWVwaW5n ID0gZmFsc2U7DQogCQkJCQlzdC0+dGhyb3R0bGluZyA9IGZhbHNlOw0KIAkJ CQkJUFFmaW5pc2goc3QtPmNvbik7DQogCQkJCQlzdC0+Y29uID0gTlVMTDsN CkBAIC0zNjk1LDcgKzM3MDUsNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0K IAkJZm9yIChpID0gMDsgaSA8IG5zdGF0ZTsgaSsrKQ0KIAkJew0KIAkJCUNT dGF0ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQkJQ29tbWFuZCAgICoqY29t bWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJCQlDb21tYW5k ICAgKipjb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21t YW5kczsNCiAJCQlpbnQJCQlwcmV2X2VjbnQgPSBzdC0+ZWNudDsNCiANCiAJ CQlpZiAoc3QtPmNvbiAmJiAoRkRfSVNTRVQoUFFzb2NrZXQoc3QtPmNvbiks ICZpbnB1dF9tYXNrKQ0KQEAgLTM3MjYsMTEgKzM3MzYsNyBAQCB0aHJlYWRS dW4odm9pZCAqYXJnKQ0KIAkJCWlmIChub3cgPj0gbmV4dF9yZXBvcnQpDQog CQkJew0KIAkJCQkvKiBnZW5lcmF0ZSBhbmQgc2hvdyByZXBvcnQgKi8NCi0J CQkJaW50NjQJCWNvdW50ID0gMCwNCi0JCQkJCQkJbGF0cyA9IDAsDQotCQkJ CQkJCXNxbGF0cyA9IDAsDQotCQkJCQkJCWxhZ3MgPSAwLA0KLQkJCQkJCQlz a2lwcGVkID0gMDsNCisJCQkJU3RhdHNEYXRhICAgY3VyOw0KIAkJCQlpbnQ2 NAkJcnVuID0gbm93IC0gbGFzdF9yZXBvcnQ7DQogCQkJCWRvdWJsZQkJdHBz LA0KIAkJCQkJCQl0b3RhbF9ydW4sDQpAQCAtMzc1MCwyMyArMzc1NiwyNCBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCQkgKiAoSWYgYSByZWFkIGZy b20gYSA2NC1iaXQgaW50ZWdlciBpcyBub3QgYXRvbWljLCB5b3UgbWlnaHQN CiAJCQkJICogZ2V0IGEgInRvcm4iIHJlYWQgYW5kIGNvbXBsZXRlbHkgYm9n dXMgbGF0ZW5jaWVzIHRob3VnaCEpDQogCQkJCSAqLw0KLQkJCQlmb3IgKGkg PSAwOyBpIDwgcHJvZ3Jlc3NfbmNsaWVudHM7IGkrKykNCisJCQkJaW5pdFN0 YXRzKCYgY3VyLCAwLjApOw0KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbnRocmVh ZHM7IGkrKykNCiAJCQkJew0KLQkJCQkJY291bnQgKz0gc3RhdGVbaV0uY250 Ow0KLQkJCQkJbGF0cyArPSBzdGF0ZVtpXS50eG5fbGF0ZW5jaWVzOw0KLQkJ CQkJc3FsYXRzICs9IHN0YXRlW2ldLnR4bl9zcWxhdHM7DQorCQkJCQlhcHBl bmRTaW1wbGVTdGF0cygmIGN1ci5sYXRlbmN5LCAmIHRocmVhZFtpXS5zdGF0 cy5sYXRlbmN5KTsNCisJCQkJCWFwcGVuZFNpbXBsZVN0YXRzKCYgY3VyLmxh ZywgJiB0aHJlYWRbaV0uc3RhdHMubGFnKTsNCisJCQkJCWN1ci5jbnQgKz0g dGhyZWFkW2ldLnN0YXRzLmNudDsNCisJCQkJCWN1ci5za2lwcGVkICs9IHRo cmVhZFtpXS5zdGF0cy5za2lwcGVkOw0KIAkJCQl9DQogDQotCQkJCWZvciAo aSA9IDA7IGkgPCBwcm9ncmVzc19udGhyZWFkczsgaSsrKQ0KLQkJCQkJbGFn cyArPSB0aHJlYWRbaV0udGhyb3R0bGVfbGFnOw0KLQ0KIAkJCQl0b3RhbF9y dW4gPSAobm93IC0gdGhyZWFkX3N0YXJ0KSAvIDEwMDAwMDAuMDsNCi0JCQkJ dHBzID0gMTAwMDAwMC4wICogKGNvdW50IC0gbGFzdF9jb3VudCkgLyBydW47 DQotCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChsYXRzIC0gbGFzdF9sYXRzKSAv IChjb3VudCAtIGxhc3RfY291bnQpOw0KLQkJCQlzcWxhdCA9IDEuMCAqIChz cWxhdHMgLSBsYXN0X3NxbGF0cykgLyAoY291bnQgLSBsYXN0X2NvdW50KTsN CisJCQkJdHBzID0gMTAwMDAwMC4wICogKGN1ci5jbnQgLSBsYXN0LmNudCkg LyBydW47DQorCQkJCWxhdGVuY3kgPSAwLjAwMSAqIChjdXIubGF0ZW5jeS5z dW0gLSBsYXN0LmxhdGVuY3kuc3VtKSAvDQorCQkJCQkoY3VyLmNudCAtIGxh c3QuY250KTsNCisJCQkJc3FsYXQgPSAxLjAgKiAoY3VyLmxhdGVuY3kuc3Vt MiAtIGxhc3QubGF0ZW5jeS5zdW0yKQ0KKwkJCQkJLyAoY3VyLmNudCAtIGxh c3QuY250KTsNCiAJCQkJc3RkZXYgPSAwLjAwMSAqIHNxcnQoc3FsYXQgLSAx MDAwMDAwLjAgKiBsYXRlbmN5ICogbGF0ZW5jeSk7DQotCQkJCWxhZyA9IDAu MDAxICogKGxhZ3MgLSBsYXN0X2xhZ3MpIC8gKGNvdW50IC0gbGFzdF9jb3Vu dCk7DQotCQkJCXNraXBwZWQgPSB0aHJlYWQtPnRocm90dGxlX2xhdGVuY3lf c2tpcHBlZCAtIGxhc3Rfc2tpcHBlZDsNCisJCQkJbGFnID0gMC4wMDEgKiAo Y3VyLmxhZy5zdW0gLSBsYXN0LmxhZy5zdW0pIC8NCisJCQkJCShjdXIuY250 IC0gbGFzdC5jbnQpOw0KIA0KIAkJCQlmcHJpbnRmKHN0ZGVyciwNCiAJCQkJ CQkicHJvZ3Jlc3M6ICUuMWYgcywgJS4xZiB0cHMsICINCkBAIC0zNzc2LDE2 ICszNzgzLDEzIEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJCXsNCiAJ CQkJCWZwcmludGYoc3RkZXJyLCAiLCBsYWcgJS4zZiBtcyIsIGxhZyk7DQog CQkJCQlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCQkJCQlmcHJpbnRmKHN0ZGVy ciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVkIiwgc2tpcHBlZCk7DQor CQkJCQkJZnByaW50ZihzdGRlcnIsICIsICJJTlQ2NF9GT1JNQVQiIHNraXBw ZWQiLA0KKwkJCQkJCQkJY3VyLnNraXBwZWQgLSBsYXN0LnNraXBwZWQpOw0K IAkJCQl9DQogCQkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiANCi0JCQkJ bGFzdF9jb3VudCA9IGNvdW50Ow0KLQkJCQlsYXN0X2xhdHMgPSBsYXRzOw0K LQkJCQlsYXN0X3NxbGF0cyA9IHNxbGF0czsNCi0JCQkJbGFzdF9sYWdzID0g bGFnczsNCisJCQkJbGFzdCA9IGN1cjsNCiAJCQkJbGFzdF9yZXBvcnQgPSBu b3c7DQotCQkJCWxhc3Rfc2tpcHBlZCA9IHRocmVhZC0+dGhyb3R0bGVfbGF0 ZW5jeV9za2lwcGVkOw0KIA0KIAkJCQkvKg0KIAkJCQkgKiBFbnN1cmUgdGhh dCB0aGUgbmV4dCByZXBvcnQgaXMgaW4gdGhlIGZ1dHVyZSwgaW4gY2FzZQ0K --8323329-1120704439-1437221777=:6263 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-1120704439-1437221777=:6263--