Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hK3sF-0007No-5J for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Apr 2019 16:38:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hK3sD-0006qV-SD for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Apr 2019 16:38:53 +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_SHA1:256) (Exim 4.89) (envelope-from ) id 1hK3sD-0006og-GR for pgsql-hackers@lists.postgresql.org; Fri, 26 Apr 2019 16:38:53 +0000 Received: from courriel.mines-paristech.fr ([77.158.173.149] helo=antispam-1.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hK3sA-0004TU-MS for pgsql-hackers@lists.postgresql.org; Fri, 26 Apr 2019 16:38:53 +0000 Received: from smtp-5.mines-paristech.fr (smtp.mines-paristech.fr [77.158.173.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by antispam-1.ensmp.fr (antispam.mines-paristech.fr) with ESMTPS id 1927955E55; Fri, 26 Apr 2019 18:38:49 +0200 (CEST) Received: from lancre (216.237.219.88.rev.sfr.net [88.219.237.216]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-5.mines-paristech.fr (Postfix) with ESMTPSA id 4D3312023D; Fri, 26 Apr 2019 18:38:48 +0200 (CEST) Date: Fri, 26 Apr 2019 18:38:47 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@lancre To: "Iwata, Aya" cc: PostgreSQL Developers Subject: RE: psql - add SHOW_ALL_RESULTS option In-Reply-To: <71E660EB361DF14299875B198D4CE5423DF3414B@g01jpexmbkw25> Message-ID: References: <71E660EB361DF14299875B198D4CE5423DF3414B@g01jpexmbkw25> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-984191017-1556296728=:29865" X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: -100 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduuddrheeigddutdehucetufdoteggodetrfcurfhrohhfihhlvgemucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvufgjkfhffgggtgesmhdtreertdervdenucfhrhhomhephfgrsghivghnucevqffgnffjqfcuoegtohgvlhhhohestghrihdrvghnshhmphdrfhhrqeenucfkphepkeekrddvudelrddvfeejrddvudeinecurfgrrhgrmhepmhhouggvpehsmhhtphhouhht X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk 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-984191017-1556296728=:29865 Content-Type: text/plain; format=flowed; charset=US-ASCII Hello Aya-san, Thanks for this review. > There is space (+--' '). Please delete it. It is cause of regression test failed. Indeed, unsure how I could do that. Fixed. >> IMHO this new setting should be on by default: few people know about \; so >> it would not change anything for most, and I do not see why those who use >> it would not be interested by the results of all the queries they asked for. > I agree with your opinion. Ok. I did not yet change the default in the attached version, though. > I test some query combination case. And I found when warning happen, the > message is printed in head of results. I think it is not clear in which > query the warning occurred. Indeed. > How about print warning message before the query that warning occurred? Sure. It happened to be trickier than I thought to achieve this, because there is a callback hook to send notifications. This attached version does: - ensure that warnings appear just before its - add the entry in psql's help - redefine the function boundary so that timing is cleaner - include somehow improved tests -- Fabien. --8323329-984191017-1556296728=:29865 Content-Type: text/x-diff; name=psql-show-all-results-2.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-2.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggYjg2NzY0 MDAzZC4uZGUyYjU2Y2Y4OCAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sDQpAQCAtMzkxOCw2ICszOTE4LDE3IEBAIGJhcg0KICAgICAg ICAgPC9saXN0aXRlbT4NCiAgICAgICA8L3Zhcmxpc3RlbnRyeT4NCiANCisg ICAgICA8dmFybGlzdGVudHJ5Pg0KKyAgICAgICAgPHRlcm0+PHZhcm5hbWU+ U0hPV19BTExfUkVTVUxUUzwvdmFybmFtZT48L3Rlcm0+DQorICAgICAgICA8 bGlzdGl0ZW0+DQorICAgICAgICA8cGFyYT4NCisgICAgICAgIFdoZW4gdGhp cyB2YXJpYWJsZSBpcyBzZXQgdG8gPGxpdGVyYWw+b248L2xpdGVyYWw+LCBh bGwgcmVzdWx0cyBvZiBhIGNvbWJpbmVkDQorICAgICAgICAoPGxpdGVyYWw+ XDs8L2xpdGVyYWw+KSBxdWVyeSBhcmUgc2hvd24gaW5zdGVhZCBvZiBqdXN0 IHRoZSBsYXN0IG9uZS4NCisgICAgICAgIERlZmF1bHQgaXMgPGxpdGVyYWw+ b2ZmPC9saXRlcmFsPi4NCisgICAgICAgIDwvcGFyYT4NCisgICAgICAgIDwv bGlzdGl0ZW0+DQorICAgICAgPC92YXJsaXN0ZW50cnk+DQorDQogICAgICAg PHZhcmxpc3RlbnRyeT4NCiAgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1df Q09OVEVYVDwvdmFybmFtZT48L3Rlcm0+DQogICAgICAgICA8bGlzdGl0ZW0+ DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jIGIvc3JjL2Jp bi9wc3FsL2NvbW1vbi5jDQppbmRleCBiZDI4NDQ0NmY4Li4xOWJmY2U5NjEw IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1vbi5jDQorKysgYi9z cmMvYmluL3BzcWwvY29tbW9uLmMNCkBAIC00NzIsNiArNDcyLDE2IEBAIFJl c2V0Q2FuY2VsQ29ubih2b2lkKQ0KICNlbmRpZg0KIH0NCiANCitzdGF0aWMg dm9pZA0KK1Nob3dFcnJvck1lc3NhZ2UoY29uc3QgUEdyZXN1bHQgKnJlc3Vs dCkNCit7DQorCWNvbnN0IGNoYXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2Uo cHNldC5kYik7DQorDQorCWlmIChzdHJsZW4oZXJyb3IpKQ0KKwkJcGdfbG9n X2luZm8oIiVzIiwgZXJyb3IpOw0KKw0KKwlDaGVja0Nvbm5lY3Rpb24oKTsN Cit9DQogDQogLyoNCiAgKiBBY2NlcHRSZXN1bHQNCkBAIC00ODIsNyArNDky LDcgQEAgUmVzZXRDYW5jZWxDb25uKHZvaWQpDQogICogUmV0dXJucyB0cnVl IGZvciB2YWxpZCByZXN1bHQsIGZhbHNlIGZvciBlcnJvciBzdGF0ZS4NCiAg Ki8NCiBzdGF0aWMgYm9vbA0KLUFjY2VwdFJlc3VsdChjb25zdCBQR3Jlc3Vs dCAqcmVzdWx0KQ0KK0FjY2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAqcmVz dWx0LCBib29sIHNob3dfZXJyb3IpDQogew0KIAlib29sCQlPSzsNCiANCkBA IC01MTMsMTUgKzUyMyw4IEBAIEFjY2VwdFJlc3VsdChjb25zdCBQR3Jlc3Vs dCAqcmVzdWx0KQ0KIAkJCQlicmVhazsNCiAJCX0NCiANCi0JaWYgKCFPSykN Ci0Jew0KLQkJY29uc3QgY2hhciAqZXJyb3IgPSBQUWVycm9yTWVzc2FnZShw c2V0LmRiKTsNCi0NCi0JCWlmIChzdHJsZW4oZXJyb3IpKQ0KLQkJCXBnX2xv Z19pbmZvKCIlcyIsIGVycm9yKTsNCi0NCi0JCUNoZWNrQ29ubmVjdGlvbigp Ow0KLQl9DQorCWlmICghT0sgJiYgc2hvd19lcnJvcikNCisJCVNob3dFcnJv ck1lc3NhZ2UocmVzdWx0KTsNCiANCiAJcmV0dXJuIE9LOw0KIH0NCkBAIC03 MDEsNyArNzA0LDcgQEAgUFNRTGV4ZWMoY29uc3QgY2hhciAqcXVlcnkpDQog DQogCVJlc2V0Q2FuY2VsQ29ubigpOw0KIA0KLQlpZiAoIUFjY2VwdFJlc3Vs dChyZXMpKQ0KKwlpZiAoIUFjY2VwdFJlc3VsdChyZXMsIHRydWUpKQ0KIAl7 DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXMpOw0KIAkJcmVzID0gTlVMTDsN CkBAIC03NDMsNyArNzQ2LDcgQEAgUFNRTGV4ZWNXYXRjaChjb25zdCBjaGFy ICpxdWVyeSwgY29uc3QgcHJpbnRRdWVyeU9wdCAqb3B0KQ0KIA0KIAlSZXNl dENhbmNlbENvbm4oKTsNCiANCi0JaWYgKCFBY2NlcHRSZXN1bHQocmVzKSkN CisJaWYgKCFBY2NlcHRSZXN1bHQocmVzLCB0cnVlKSkNCiAJew0KIAkJQ2xl YXJPclNhdmVSZXN1bHQocmVzKTsNCiAJCXJldHVybiAwOw0KQEAgLTk5OSwx OTkgKzEwMDIsMTEzIEBAIGxvb3BfZXhpdDoNCiAJcmV0dXJuIHN1Y2Nlc3M7 DQogfQ0KIA0KLQ0KIC8qDQotICogUHJvY2Vzc1Jlc3VsdDogdXRpbGl0eSBm dW5jdGlvbiBmb3IgdXNlIGJ5IFNlbmRRdWVyeSgpIG9ubHkNCi0gKg0KLSAq IFdoZW4gb3VyIGNvbW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBhIENPUFkgRlJP TSBTVERJTiBvciBDT1BZIFRPIFNURE9VVCwNCi0gKiBQUWV4ZWMoKSBoYXMg c3RvcHBlZCBhdCB0aGUgUEdyZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBm aXJzdCBzdWNoDQotICogY29tbWFuZC4gIEluIHRoYXQgZXZlbnQsIHdlJ2xs IG1hcnNoYWwgZGF0YSBmb3IgdGhlIENPUFkgYW5kIHRoZW4gY3ljbGUNCi0g KiB0aHJvdWdoIGFueSBzdWJzZXF1ZW50IFBHcmVzdWx0IG9iamVjdHMuDQot ICoNCi0gKiBXaGVuIHRoZSBjb21tYW5kIHN0cmluZyBjb250YWluZWQgbm8g c3VjaCBDT1BZIGNvbW1hbmQsIHRoaXMgZnVuY3Rpb24NCi0gKiBkZWdlbmVy YXRlcyB0byBhbiBBY2NlcHRSZXN1bHQoKSBjYWxsLg0KLSAqDQotICogQ2hh bmdlcyBpdHMgYXJndW1lbnQgdG8gcG9pbnQgdG8gdGhlIGxhc3QgUEdyZXN1 bHQgb2YgdGhlIGNvbW1hbmQgc3RyaW5nLA0KLSAqIG9yIE5VTEwgaWYgdGhh dCByZXN1bHQgd2FzIGZvciBhIENPUFkgVE8gU1RET1VULiAgKFJldHVybmlu ZyBOVUxMIHByZXZlbnRzDQotICogdGhlIGNvbW1hbmQgc3RhdHVzIGZyb20g YmVpbmcgcHJpbnRlZCwgd2hpY2ggd2Ugd2FudCBpbiB0aGF0IGNhc2Ugc28g dGhhdA0KLSAqIHRoZSBzdGF0dXMgbGluZSBkb2Vzbid0IGdldCB0YWtlbiBh cyBwYXJ0IG9mIHRoZSBDT1BZIGRhdGEuKQ0KLSAqDQotICogUmV0dXJucyB0 cnVlIG9uIGNvbXBsZXRlIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4gIFBv c3NpYmxlIGZhaWx1cmUgbW9kZXMNCi0gKiBpbmNsdWRlIHB1cmVseSBjbGll bnQtc2lkZSBwcm9ibGVtczsgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXR1 cyBmb3IgdGhlDQotICogc2VydmVyLXNpZGUgb3Bpbmlvbi4NCisgKiBNYXJz aGFsIHRoZSBDT1BZIGRhdGEuICBFaXRoZXIgc3Vicm91dGluZSB3aWxsIGdl dCB0aGUNCisgKiBjb25uZWN0aW9uIG91dCBvZiBpdHMgQ09QWSBzdGF0ZSwg dGhlbiBjYWxsIFBRcmVzdWx0U3RhdHVzKCkNCisgKiBvbmNlIGFuZCByZXBv cnQgYW55IGVycm9yLg0KKyAqDQorICogRm9yIENPUFkgT1VULCBkaXJlY3Qg dGhlIG91dHB1dCB0byBwc2V0LmNvcHlTdHJlYW0gaWYgaXQncyBzZXQsDQor ICogb3RoZXJ3aXNlIHRvIHBzZXQuZ2ZuYW1lIGlmIGl0J3Mgc2V0LCBvdGhl cndpc2UgdG8gcXVlcnlGb3V0Lg0KKyAqIEZvciBDT1BZIElOLCB1c2UgcHNl dC5jb3B5U3RyZWFtIGFzIGRhdGEgc291cmNlIGlmIGl0J3Mgc2V0LA0KKyAq IG90aGVyd2lzZSBjdXJfY21kX3NvdXJjZS4NCisgKg0KKyAqIFVwZGF0ZSBy ZXN1bHQgaWYgZnVydGhlciBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeS4gIChS ZXR1cm5pbmcgTlVMTA0KKyAqIHByZXZlbnRzIHRoZSBjb21tYW5kIHN0YXR1 cyBmcm9tIGJlaW5nIHByaW50ZWQsIHdoaWNoIHdlIHdhbnQgaW4gdGhhdA0K KyAqIGNhc2Ugc28gdGhhdCB0aGUgc3RhdHVzIGxpbmUgZG9lc24ndCBnZXQg dGFrZW4gYXMgcGFydCBvZiB0aGUgQ09QWSBkYXRhLikNCiAgKi8NCiBzdGF0 aWMgYm9vbA0KLVByb2Nlc3NSZXN1bHQoUEdyZXN1bHQgKipyZXN1bHRzKQ0K K0hhbmRsZUNvcHlSZXN1bHQoUEdyZXN1bHQgKipyZXN1bHQpDQogew0KIAli b29sCQlzdWNjZXNzID0gdHJ1ZTsNCi0JYm9vbAkJZmlyc3RfY3ljbGUgPSB0 cnVlOw0KKwlGSUxFCSAgICpjb3B5c3RyZWFtOw0KKwlQR3Jlc3VsdCAgICpj b3B5X3Jlc3VsdDsNCisJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1cyA9 IFBRcmVzdWx0U3RhdHVzKCpyZXN1bHQpOw0KIA0KLQlmb3IgKDs7KQ0KKwlB c3NlcnQocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCB8fA0KKwkJ ICAgcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX0lOKTsNCisNCisJU2V0 Q2FuY2VsQ29ubigpOw0KKwlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19D T1BZX09VVCkNCiAJew0KLQkJRXhlY1N0YXR1c1R5cGUgcmVzdWx0X3N0YXR1 czsNCi0JCWJvb2wJCWlzX2NvcHk7DQotCQlQR3Jlc3VsdCAgICpuZXh0X3Jl c3VsdDsNCisJCWJvb2wJCW5lZWRfY2xvc2UgPSBmYWxzZTsNCisJCWJvb2wJ CWlzX3BpcGUgPSBmYWxzZTsNCiANCi0JCWlmICghQWNjZXB0UmVzdWx0KCpy ZXN1bHRzKSkNCisJCWlmIChwc2V0LmNvcHlTdHJlYW0pDQogCQl7DQotCQkJ LyoNCi0JCQkgKiBGYWlsdXJlIGF0IHRoaXMgcG9pbnQgaXMgYWx3YXlzIGEg c2VydmVyLXNpZGUgZmFpbHVyZSBvciBhDQotCQkJICogZmFpbHVyZSB0byBz dWJtaXQgdGhlIGNvbW1hbmQgc3RyaW5nLiAgRWl0aGVyIHdheSwgd2UncmUN Ci0JCQkgKiBmaW5pc2hlZCB3aXRoIHRoaXMgY29tbWFuZCBzdHJpbmcuDQot CQkJICovDQotCQkJc3VjY2VzcyA9IGZhbHNlOw0KLQkJCWJyZWFrOw0KKwkJ CS8qIGludm9rZWQgYnkgXGNvcHkgKi8NCisJCQljb3B5c3RyZWFtID0gcHNl dC5jb3B5U3RyZWFtOw0KIAkJfQ0KLQ0KLQkJcmVzdWx0X3N0YXR1cyA9IFBR cmVzdWx0U3RhdHVzKCpyZXN1bHRzKTsNCi0JCXN3aXRjaCAocmVzdWx0X3N0 YXR1cykNCisJCWVsc2UgaWYgKHBzZXQuZ2ZuYW1lKQ0KIAkJew0KLQkJCWNh c2UgUEdSRVNfRU1QVFlfUVVFUlk6DQotCQkJY2FzZSBQR1JFU19DT01NQU5E X09LOg0KLQkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLQkJCQlpc19jb3B5 ID0gZmFsc2U7DQotCQkJCWJyZWFrOw0KLQ0KLQkJCWNhc2UgUEdSRVNfQ09Q WV9PVVQ6DQotCQkJY2FzZSBQR1JFU19DT1BZX0lOOg0KLQkJCQlpc19jb3B5 ID0gdHJ1ZTsNCi0JCQkJYnJlYWs7DQotDQotCQkJZGVmYXVsdDoNCi0JCQkJ LyogQWNjZXB0UmVzdWx0KCkgc2hvdWxkIGhhdmUgY2F1Z2h0IGFueXRoaW5n IGVsc2UuICovDQotCQkJCWlzX2NvcHkgPSBmYWxzZTsNCi0JCQkJcGdfbG9n X2Vycm9yKCJ1bmV4cGVjdGVkIFBRcmVzdWx0U3RhdHVzOiAlZCIsIHJlc3Vs dF9zdGF0dXMpOw0KLQkJCQlicmVhazsNCi0JCX0NCi0NCi0JCWlmIChpc19j b3B5KQ0KLQkJew0KLQkJCS8qDQotCQkJICogTWFyc2hhbCB0aGUgQ09QWSBk YXRhLiAgRWl0aGVyIHN1YnJvdXRpbmUgd2lsbCBnZXQgdGhlDQotCQkJICog Y29ubmVjdGlvbiBvdXQgb2YgaXRzIENPUFkgc3RhdGUsIHRoZW4gY2FsbCBQ UXJlc3VsdFN0YXR1cygpDQotCQkJICogb25jZSBhbmQgcmVwb3J0IGFueSBl cnJvci4NCi0JCQkgKg0KLQkJCSAqIEZvciBDT1BZIE9VVCwgZGlyZWN0IHRo ZSBvdXRwdXQgdG8gcHNldC5jb3B5U3RyZWFtIGlmIGl0J3Mgc2V0LA0KLQkJ CSAqIG90aGVyd2lzZSB0byBwc2V0LmdmbmFtZSBpZiBpdCdzIHNldCwgb3Ro ZXJ3aXNlIHRvIHF1ZXJ5Rm91dC4NCi0JCQkgKiBGb3IgQ09QWSBJTiwgdXNl IHBzZXQuY29weVN0cmVhbSBhcyBkYXRhIHNvdXJjZSBpZiBpdCdzIHNldCwN Ci0JCQkgKiBvdGhlcndpc2UgY3VyX2NtZF9zb3VyY2UuDQotCQkJICovDQot CQkJRklMRQkgICAqY29weXN0cmVhbTsNCi0JCQlQR3Jlc3VsdCAgICpjb3B5 X3Jlc3VsdDsNCi0NCi0JCQlTZXRDYW5jZWxDb25uKCk7DQotCQkJaWYgKHJl c3VsdF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQkJLyogaW52b2tl ZCBieSBcZyAqLw0KKwkJCWlmIChvcGVuUXVlcnlPdXRwdXRGaWxlKHBzZXQu Z2ZuYW1lLA0KKwkJCQkJCQkJCSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQog CQkJew0KLQkJCQlib29sCQluZWVkX2Nsb3NlID0gZmFsc2U7DQotCQkJCWJv b2wJCWlzX3BpcGUgPSBmYWxzZTsNCi0NCi0JCQkJaWYgKHBzZXQuY29weVN0 cmVhbSkNCi0JCQkJew0KLQkJCQkJLyogaW52b2tlZCBieSBcY29weSAqLw0K LQkJCQkJY29weXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCi0JCQkJfQ0K LQkJCQllbHNlIGlmIChwc2V0LmdmbmFtZSkNCi0JCQkJew0KLQkJCQkJLyog aW52b2tlZCBieSBcZyAqLw0KLQkJCQkJaWYgKG9wZW5RdWVyeU91dHB1dEZp bGUocHNldC5nZm5hbWUsDQotCQkJCQkJCQkJCQkmY29weXN0cmVhbSwgJmlz X3BpcGUpKQ0KLQkJCQkJew0KLQkJCQkJCW5lZWRfY2xvc2UgPSB0cnVlOw0K LQkJCQkJCWlmIChpc19waXBlKQ0KLQkJCQkJCQlkaXNhYmxlX3NpZ3BpcGVf dHJhcCgpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJCWNvcHlzdHJl YW0gPSBOVUxMOwkvKiBkaXNjYXJkIENPUFkgZGF0YSBlbnRpcmVseSAqLw0K LQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJLyogZmFsbCBiYWNr IHRvIHRoZSBnZW5lcmljIHF1ZXJ5IG91dHB1dCBzdHJlYW0gKi8NCi0JCQkJ CWNvcHlzdHJlYW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCi0JCQkJfQ0KLQ0KLQkJ CQlzdWNjZXNzID0gaGFuZGxlQ29weU91dChwc2V0LmRiLA0KLQkJCQkJCQkJ CQljb3B5c3RyZWFtLA0KLQkJCQkJCQkJCQkmY29weV9yZXN1bHQpDQotCQkJ CQkmJiBzdWNjZXNzDQotCQkJCQkmJiAoY29weXN0cmVhbSAhPSBOVUxMKTsN Ci0NCi0JCQkJLyoNCi0JCQkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5n IGlmIHRoZSByZXBvcnQgd291bGQgZ28gdG8gdGhlIHNhbWUNCi0JCQkJICog cGxhY2UgYXMgdGhlIENPUFkgZGF0YSBqdXN0IHdlbnQuICBOb3RlIHRoaXMg ZG9lc24ndA0KLQkJCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywgc2lu Y2UgaGFuZGxlQ29weU91dCBkaWQgdGhhdC4NCi0JCQkJICovDQotCQkJCWlm IChjb3B5c3RyZWFtID09IHBzZXQucXVlcnlGb3V0KQ0KLQkJCQl7DQotCQkJ CQlQUWNsZWFyKGNvcHlfcmVzdWx0KTsNCi0JCQkJCWNvcHlfcmVzdWx0ID0g TlVMTDsNCi0JCQkJfQ0KLQ0KLQkJCQlpZiAobmVlZF9jbG9zZSkNCi0JCQkJ ew0KLQkJCQkJLyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQot CQkJCQlpZiAoaXNfcGlwZSkNCi0JCQkJCXsNCi0JCQkJCQlwY2xvc2UoY29w eXN0cmVhbSk7DQotCQkJCQkJcmVzdG9yZV9zaWdwaXBlX3RyYXAoKTsNCi0J CQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQlmY2xvc2UoY29w eXN0cmVhbSk7DQotCQkJCQl9DQotCQkJCX0NCisJCQkJbmVlZF9jbG9zZSA9 IHRydWU7DQorCQkJCWlmIChpc19waXBlKQ0KKwkJCQkJZGlzYWJsZV9zaWdw aXBlX3RyYXAoKTsNCiAJCQl9DQogCQkJZWxzZQ0KLQkJCXsNCi0JCQkJLyog Q09QWSBJTiAqLw0KLQkJCQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFt ID8gcHNldC5jb3B5U3RyZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsNCi0J CQkJc3VjY2VzcyA9IGhhbmRsZUNvcHlJbihwc2V0LmRiLA0KLQkJCQkJCQkJ CSAgIGNvcHlzdHJlYW0sDQotCQkJCQkJCQkJICAgUFFiaW5hcnlUdXBsZXMo KnJlc3VsdHMpLA0KLQkJCQkJCQkJCSAgICZjb3B5X3Jlc3VsdCkgJiYgc3Vj Y2VzczsNCi0JCQl9DQotCQkJUmVzZXRDYW5jZWxDb25uKCk7DQotDQotCQkJ LyoNCi0JCQkgKiBSZXBsYWNlIHRoZSBQR1JFU19DT1BZX09VVC9JTiByZXN1 bHQgd2l0aCBDT1BZIGNvbW1hbmQncyBleGl0DQotCQkJICogc3RhdHVzLCBv ciB3aXRoIE5VTEwgaWYgd2Ugd2FudCB0byBzdXBwcmVzcyBwcmludGluZyBh bnl0aGluZy4NCi0JCQkgKi8NCi0JCQlQUWNsZWFyKCpyZXN1bHRzKTsNCi0J CQkqcmVzdWx0cyA9IGNvcHlfcmVzdWx0Ow0KKwkJCQljb3B5c3RyZWFtID0g TlVMTDsJLyogZGlzY2FyZCBDT1BZIGRhdGEgZW50aXJlbHkgKi8NCiAJCX0N Ci0JCWVsc2UgaWYgKGZpcnN0X2N5Y2xlKQ0KKwkJZWxzZQ0KIAkJew0KLQkJ CS8qIGZhc3QgcGF0aDogbm8gQ09QWSBjb21tYW5kczsgUFFleGVjIHZpc2l0 ZWQgYWxsIHJlc3VsdHMgKi8NCi0JCQlicmVhazsNCisJCQkvKiBmYWxsIGJh Y2sgdG8gdGhlIGdlbmVyaWMgcXVlcnkgb3V0cHV0IHN0cmVhbSAqLw0KKwkJ CWNvcHlzdHJlYW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCiAJCX0NCiANCisJCXN1 Y2Nlc3MgPSBoYW5kbGVDb3B5T3V0KHBzZXQuZGIsDQorCQkJCQkJCQljb3B5 c3RyZWFtLA0KKwkJCQkJCQkJJmNvcHlfcmVzdWx0KQ0KKwkJCSYmIHN1Y2Nl c3MNCisJCQkmJiAoY29weXN0cmVhbSAhPSBOVUxMKTsNCisNCiAJCS8qDQot CQkgKiBDaGVjayBQUWdldFJlc3VsdCgpIGFnYWluLiAgSW4gdGhlIHR5cGlj YWwgY2FzZSBvZiBhIHNpbmdsZS1jb21tYW5kDQotCQkgKiBzdHJpbmcsIGl0 IHdpbGwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgb3Ro ZXIgcmVzdWx0cw0KLQkJICogdG8gcHJvY2VzcyB0aGF0IG1heSBpbmNsdWRl IG90aGVyIENPUFlzLiAgV2Uga2VlcCB0aGUgbGFzdCByZXN1bHQuDQorCQkg KiBTdXBwcmVzcyBzdGF0dXMgcHJpbnRpbmcgaWYgdGhlIHJlcG9ydCB3b3Vs ZCBnbyB0byB0aGUgc2FtZQ0KKwkJICogcGxhY2UgYXMgdGhlIENPUFkgZGF0 YSBqdXN0IHdlbnQuICBOb3RlIHRoaXMgZG9lc24ndA0KKwkJICogcHJldmVu dCBlcnJvciByZXBvcnRpbmcsIHNpbmNlIGhhbmRsZUNvcHlPdXQgZGlkIHRo YXQuDQogCQkgKi8NCi0JCW5leHRfcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNl dC5kYik7DQotCQlpZiAoIW5leHRfcmVzdWx0KQ0KLQkJCWJyZWFrOw0KKwkJ aWYgKGNvcHlzdHJlYW0gPT0gcHNldC5xdWVyeUZvdXQpDQorCQl7DQorCQkJ UFFjbGVhcihjb3B5X3Jlc3VsdCk7DQorCQkJY29weV9yZXN1bHQgPSBOVUxM Ow0KKwkJfQ0KIA0KLQkJUFFjbGVhcigqcmVzdWx0cyk7DQotCQkqcmVzdWx0 cyA9IG5leHRfcmVzdWx0Ow0KLQkJZmlyc3RfY3ljbGUgPSBmYWxzZTsNCisJ CWlmIChuZWVkX2Nsb3NlKQ0KKwkJew0KKwkJCS8qIGNsb3NlIFxnIGFyZ3Vt ZW50IGZpbGUvcGlwZSAqLw0KKwkJCWlmIChpc19waXBlKQ0KKwkJCXsNCisJ CQkJcGNsb3NlKGNvcHlzdHJlYW0pOw0KKwkJCQlyZXN0b3JlX3NpZ3BpcGVf dHJhcCgpOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQlmY2xvc2Uo Y29weXN0cmVhbSk7DQorCQkJfQ0KKwkJfQ0KIAl9DQorCWVsc2UNCisJew0K KwkJLyogQ09QWSBJTiAqLw0KKwkJY29weXN0cmVhbSA9IHBzZXQuY29weVN0 cmVhbSA/IHBzZXQuY29weVN0cmVhbSA6IHBzZXQuY3VyX2NtZF9zb3VyY2U7 DQorCQlzdWNjZXNzID0gaGFuZGxlQ29weUluKHBzZXQuZGIsDQorCQkJCQkJ CSAgIGNvcHlzdHJlYW0sDQorCQkJCQkJCSAgIFBRYmluYXJ5VHVwbGVzKCpy ZXN1bHQpLA0KKwkJCQkJCQkgICAmY29weV9yZXN1bHQpICYmIHN1Y2Nlc3M7 DQorCX0NCisJUmVzZXRDYW5jZWxDb25uKCk7DQogDQotCVNldFJlc3VsdFZh cmlhYmxlcygqcmVzdWx0cywgc3VjY2Vzcyk7DQotDQotCS8qIG1heSBuZWVk IHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAq Lw0KLQlpZiAoIWZpcnN0X2N5Y2xlICYmICFDaGVja0Nvbm5lY3Rpb24oKSkN Ci0JCXJldHVybiBmYWxzZTsNCisJUFFjbGVhcigqcmVzdWx0KTsNCisJKnJl c3VsdCA9IGNvcHlfcmVzdWx0Ow0KIA0KIAlyZXR1cm4gc3VjY2VzczsNCiB9 DQogDQotDQogLyoNCiAgKiBQcmludFF1ZXJ5U3RhdHVzOiByZXBvcnQgY29t bWFuZCBzdGF0dXMgYXMgcmVxdWlyZWQNCiAgKg0KLSAqIE5vdGU6IFV0aWxp dHkgZnVuY3Rpb24gZm9yIHVzZSBieSBQcmludFF1ZXJ5UmVzdWx0cygpIG9u bHkuDQorICogTm90ZTogVXRpbGl0eSBmdW5jdGlvbiBmb3IgdXNlIGJ5IEhh bmRsZVF1ZXJ5UmVzdWx0KCkgb25seS4NCiAgKi8NCiBzdGF0aWMgdm9pZA0K IFByaW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3VsdHMpDQpAQCAtMTIx OSw0MyArMTEzNiw0OSBAQCBQcmludFF1ZXJ5U3RhdHVzKFBHcmVzdWx0ICpy ZXN1bHRzKQ0KIA0KIA0KIC8qDQotICogUHJpbnRRdWVyeVJlc3VsdHM6IHBy aW50IG91dCAob3Igc3RvcmUgb3IgZXhlY3V0ZSkgcXVlcnkgcmVzdWx0cyBh cyByZXF1aXJlZA0KLSAqDQotICogTm90ZTogVXRpbGl0eSBmdW5jdGlvbiBm b3IgdXNlIGJ5IFNlbmRRdWVyeSgpIG9ubHkuDQorICogSGFuZGxlUXVlcnlS ZXN1bHQ6IHByaW50IG91dCwgc3RvcmUgb3IgZXhlY3V0ZSBvbmUgcXVlcnkg cmVzdWx0DQorICogYXMgcmVxdWlyZWQuDQogICoNCiAgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIHF1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgZmFsc2Ug b3RoZXJ3aXNlLg0KICAqLw0KIHN0YXRpYyBib29sDQotUHJpbnRRdWVyeVJl c3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQorSGFuZGxlUXVlcnlSZXN1bHQo UEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBsYXN0KQ0KIHsNCiAJYm9vbAkJc3Vj Y2VzczsNCiAJY29uc3QgY2hhciAqY21kc3RhdHVzOw0KIA0KLQlpZiAoIXJl c3VsdHMpDQorCWlmIChyZXN1bHQgPT0gTlVMTCkNCiAJCXJldHVybiBmYWxz ZTsNCiANCi0Jc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSkNCisJ c3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKQ0KIAl7DQogCQljYXNl IFBHUkVTX1RVUExFU19PSzoNCiAJCQkvKiBzdG9yZSBvciBleGVjdXRlIG9y IHByaW50IHRoZSBkYXRhIC4uLiAqLw0KLQkJCWlmIChwc2V0LmdzZXRfcHJl Zml4KQ0KLQkJCQlzdWNjZXNzID0gU3RvcmVRdWVyeVR1cGxlKHJlc3VsdHMp Ow0KLQkJCWVsc2UgaWYgKHBzZXQuZ2V4ZWNfZmxhZykNCi0JCQkJc3VjY2Vz cyA9IEV4ZWNRdWVyeVR1cGxlcyhyZXN1bHRzKTsNCi0JCQllbHNlIGlmIChw c2V0LmNyb3NzdGFiX2ZsYWcpDQotCQkJCXN1Y2Nlc3MgPSBQcmludFJlc3Vs dHNJbkNyb3NzdGFiKHJlc3VsdHMpOw0KKwkJCWlmIChsYXN0ICYmIHBzZXQu Z3NldF9wcmVmaXgpDQorCQkJCXN1Y2Nlc3MgPSBTdG9yZVF1ZXJ5VHVwbGUo cmVzdWx0KTsNCisJCQllbHNlIGlmIChsYXN0ICYmIHBzZXQuZ2V4ZWNfZmxh ZykNCisJCQkJc3VjY2VzcyA9IEV4ZWNRdWVyeVR1cGxlcyhyZXN1bHQpOw0K KwkJCWVsc2UgaWYgKGxhc3QgJiYgcHNldC5jcm9zc3RhYl9mbGFnKQ0KKwkJ CQlzdWNjZXNzID0gUHJpbnRSZXN1bHRzSW5Dcm9zc3RhYihyZXN1bHQpOw0K KwkJCWVsc2UgaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1bHRzKQ0K KwkJCQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxlcyhyZXN1bHQpOw0KKwkJ CQkvKiBpZiBpdCdzIElOU0VSVC9VUERBVEUvREVMRVRFIFJFVFVSTklORywg YWxzbyBwcmludCBzdGF0dXMgKi8NCiAJCQllbHNlDQotCQkJCXN1Y2Nlc3Mg PSBQcmludFF1ZXJ5VHVwbGVzKHJlc3VsdHMpOw0KLQkJCS8qIGlmIGl0J3Mg SU5TRVJUL1VQREFURS9ERUxFVEUgUkVUVVJOSU5HLCBhbHNvIHByaW50IHN0 YXR1cyAqLw0KLQkJCWNtZHN0YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdHMp Ow0KLQkJCWlmIChzdHJuY21wKGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09 IDAgfHwNCi0JCQkJc3RybmNtcChjbWRzdGF0dXMsICJVUERBVEUiLCA2KSA9 PSAwIHx8DQotCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAiREVMRVRFIiwgNikg PT0gMCkNCi0JCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHRzKTsNCisJCQkJ c3VjY2VzcyA9IHRydWU7DQorDQorCQkJaWYgKGxhc3QgfHwgcHNldC5zaG93 X2FsbF9yZXN1bHRzKQ0KKwkJCXsNCisJCQkJY21kc3RhdHVzID0gUFFjbWRT dGF0dXMocmVzdWx0KTsNCisJCQkJaWYgKHN0cm5jbXAoY21kc3RhdHVzLCAi SU5TRVJUIiwgNikgPT0gMCB8fA0KKwkJCQkJc3RybmNtcChjbWRzdGF0dXMs ICJVUERBVEUiLCA2KSA9PSAwIHx8DQorCQkJCQlzdHJuY21wKGNtZHN0YXR1 cywgIkRFTEVURSIsIDYpID09IDApDQorCQkJCQlQcmludFF1ZXJ5U3RhdHVz KHJlc3VsdCk7DQorCQkJfQ0KIAkJCWJyZWFrOw0KIA0KIAkJY2FzZSBQR1JF U19DT01NQU5EX09LOg0KLQkJCVByaW50UXVlcnlTdGF0dXMocmVzdWx0cyk7 DQorCQkJaWYgKGxhc3QgfHwgcHNldC5zaG93X2FsbF9yZXN1bHRzKQ0KKwkJ CQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdCk7DQogCQkJc3VjY2VzcyA9IHRy dWU7DQogCQkJYnJlYWs7DQogDQpAQCAtMTI2NSw3ICsxMTg4LDcgQEAgUHJp bnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogDQogCQljYXNl IFBHUkVTX0NPUFlfT1VUOg0KIAkJY2FzZSBQR1JFU19DT1BZX0lOOg0KLQkJ CS8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLw0KKwkJCS8qIG5vdGhpbmcgdG8g ZG8gaGVyZTogYWxyZWFkeSBwcm9jZXNzZWQgKi8NCiAJCQlzdWNjZXNzID0g dHJ1ZTsNCiAJCQlicmVhazsNCiANCkBAIC0xMjc4LDcgKzEyMDEsNyBAQCBQ cmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0cykNCiAJCWRlZmF1 bHQ6DQogCQkJc3VjY2VzcyA9IGZhbHNlOw0KIAkJCXBnX2xvZ19lcnJvcigi dW5leHBlY3RlZCBQUXJlc3VsdFN0YXR1czogJWQiLA0KLQkJCQkJICAgUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykpOw0KKwkJCQkJCSBQUXJlc3VsdFN0YXR1 cyhyZXN1bHQpKTsNCiAJCQlicmVhazsNCiAJfQ0KIA0KQEAgLTEyODcsNiAr MTIxMCwxNTMgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3Vs dHMpDQogCXJldHVybiBzdWNjZXNzOw0KIH0NCiANCisvKg0KKyAqIERhdGEg c3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgdG8gcmVjb3JkIG5vdGljZXMgd2hp bGUgdGhleSBhcmUNCisgKiBlbWl0dGVkLCBzbyB0aGF0IHRoZXkgY2FuIGJl IHNob3duIGxhdGVyLg0KKyAqDQorICogV2UgbmVlZCB0byBrbm93IHdoaWNo IHJlc3VsdCBpcyBsYXN0LCB3aGljaCByZXF1aXJlcyB0byBleHRyYWN0DQor ICogb25lIHJlc3VsdCBpbiBhZHZhbmNlLCBoZW5jZSB0d28gYnVmZmVycyBh cmUgbmVlZGVkLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0IHsNCisJYm9vbAkJ CWluX2ZsaXA7DQorCVBRRXhwQnVmZmVyRGF0YQlmbGlwOw0KKwlQUUV4cEJ1 ZmZlckRhdGEJZmxvcDsNCit9IHRfbm90aWNlX21lc3NhZ2VzOw0KKw0KK3N0 YXRpYyB2b2lkDQorQXBwZW5kTm90aWNlTWVzc2FnZSh2b2lkICphcmcsIGNv bnN0IGNoYXIgKm1zZykNCit7DQorCXRfbm90aWNlX21lc3NhZ2VzICpub3Rl cyA9ICh0X25vdGljZV9tZXNzYWdlcyopIGFyZzsNCisJYXBwZW5kUFFFeHBC dWZmZXJTdHIobm90ZXMtPmluX2ZsaXAgPyAmbm90ZXMtPmZsaXAgOiAmbm90 ZXMtPmZsb3AsIG1zZyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorU2hvd05v dGljZU1lc3NhZ2UodF9ub3RpY2VfbWVzc2FnZXMgKm5vdGVzKQ0KK3sNCisJ UFFFeHBCdWZmZXJEYXRhCSpjdXJyZW50ID0gbm90ZXMtPmluX2ZsaXAgPyAm bm90ZXMtPmZsaXAgOiAmbm90ZXMtPmZsb3A7DQorCWlmIChjdXJyZW50LT5k YXRhICE9IE5VTEwgJiYgKmN1cnJlbnQtPmRhdGEgIT0gJ1wwJykNCisJCXBn X2xvZ19pbmZvKCIlcyIsIGN1cnJlbnQtPmRhdGEpOw0KKwlyZXNldFBRRXhw QnVmZmVyKGN1cnJlbnQpOw0KK30NCisNCisvKg0KKyAqIFNlbmRRdWVyeUFu ZFByb2Nlc3NSZXN1bHRzOiB1dGlsaXR5IGZ1bmN0aW9uIGZvciB1c2UgYnkg U2VuZFF1ZXJ5KCkgb25seQ0KKyAqDQorICogU2VuZHMgcXVlcnkgYW5kIGN5 Y2xlcyB0aHJvdWdoIFBHcmVzdWx0IG9iamVjdHMuDQorICoNCisgKiBXaGVu IG91ciBjb21tYW5kIHN0cmluZyBjb250YWluZWQgYSBDT1BZIEZST00gU1RE SU4gb3IgQ09QWSBUTyBTVERPVVQsDQorICogdGhlIFBHcmVzdWx0IGFzc29j aWF0ZWQgd2l0aCB0aGVzZSBjb21tYW5kcyBtdXN0IGJlIHByb2Nlc3NlZC4g IEluIHRoYXQNCisgKiBldmVudCwgd2UnbGwgbWFyc2hhbCBkYXRhIGZvciB0 aGUgQ09QWS4NCisgKg0KKyAqIFJldHVybnMgdHJ1ZSBvbiBjb21wbGV0ZSBz dWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuICBQb3NzaWJsZSBmYWlsdXJlIG1v ZGVzDQorICogaW5jbHVkZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxlbXM7 IGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0dXMgZm9yIHRoZQ0KKyAqIHNl cnZlci1zaWRlIG9waW5pb24uDQorICoNCisgKiBOb3RlIHRoYXQgb24gYSBj b21iaW5lZCBxdWVyeSwgZmFpbHVyZSBkb2VzIG5vdCBtZWFuIHRoYXQgbm90 aGluZyB3YXMNCisgKiBjb21taXR0ZWQuDQorICovDQorc3RhdGljIGJvb2wN CitTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVy eSwgZG91YmxlICpwZWxhcHNlZF9tc2VjKQ0KK3sNCisJYm9vbAkJCQlzdWNj ZXNzOw0KKwlpbnN0cl90aW1lCQkJYmVmb3JlOw0KKwlQR3Jlc3VsdAkJICAg KnJlc3VsdDsNCisJdF9ub3RpY2VfbWVzc2FnZXMJbm90ZXM7DQorDQorCWlm IChwc2V0LnRpbWluZykNCisJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoYmVm b3JlKTsNCisNCisJc3VjY2VzcyA9IFBRc2VuZFF1ZXJ5KHBzZXQuZGIsIHF1 ZXJ5KTsNCisJUmVzZXRDYW5jZWxDb25uKCk7DQorDQorCWlmICghc3VjY2Vz cykNCisJCXJldHVybiBmYWxzZTsNCisNCisJLyogaW50ZXJjZXB0IG5vdGlj ZXMgKi8NCisJbm90ZXMuaW5fZmxpcCA9IHRydWU7DQorCWluaXRQUUV4cEJ1 ZmZlcigmbm90ZXMuZmxpcCk7DQorCWluaXRQUUV4cEJ1ZmZlcigmbm90ZXMu ZmxvcCk7DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIEFwcGVu ZE5vdGljZU1lc3NhZ2UsICZub3Rlcyk7DQorDQorCS8qIGZpcnN0IHJlc3Vs dCAqLw0KKwlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCisNCisJ d2hpbGUgKHJlc3VsdCAhPSBOVUxMKQ0KKwl7DQorCQlFeGVjU3RhdHVzVHlw ZSByZXN1bHRfc3RhdHVzOw0KKwkJUEdyZXN1bHQgICAqbmV4dF9yZXN1bHQ7 DQorCQlib29sCQlsYXN0Ow0KKw0KKwkJaWYgKCFBY2NlcHRSZXN1bHQocmVz dWx0LCBmYWxzZSkpDQorCQl7DQorCQkJLyogc29tZSBlcnJvciBvY2N1cmVk LCByZWNvcmQgdGhhdCAqLw0KKwkJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rl cyk7DQorCQkJU2hvd0Vycm9yTWVzc2FnZShyZXN1bHQpOw0KKwkJCVNldFJl c3VsdFZhcmlhYmxlcyhyZXN1bHQsIGZhbHNlKTsNCisJCQlQUWNsZWFyKHJl c3VsdCk7DQorCQkJc3VjY2VzcyA9IGZhbHNlOw0KKw0KKwkJCS8qIGFuZCBz d2l0Y2ggdG8gbmV4dCByZXN1bHQgKi8NCisJCQlyZXN1bHQgPSBQUWdldFJl c3VsdChwc2V0LmRiKTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCS8q IG11c3QgaGFuZGxlIENPUFkgYmVmb3JlIGNoYW5naW5nIHRoZSBjdXJyZW50 IHJlc3VsdCAqLw0KKwkJcmVzdWx0X3N0YXR1cyA9IFBRcmVzdWx0U3RhdHVz KHJlc3VsdCk7DQorCQlpZiAocmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZ X0lOIHx8DQorCQkJcmVzdWx0X3N0YXR1cyA9PSBQR1JFU19DT1BZX09VVCkN CisJCXsNCisJCQlTaG93Tm90aWNlTWVzc2FnZSgmbm90ZXMpOw0KKwkJCUhh bmRsZUNvcHlSZXN1bHQoJnJlc3VsdCk7DQorCQl9DQorDQorCQkvKg0KKwkJ ICogQ2hlY2sgUFFnZXRSZXN1bHQoKSBhZ2Fpbi4gIEluIHRoZSB0eXBpY2Fs IGNhc2Ugb2YgYSBzaW5nbGUtY29tbWFuZA0KKwkJICogc3RyaW5nLCBpdCB3 aWxsIHJldHVybiBOVUxMLiAgT3RoZXJ3aXNlLCB3ZSdsbCBoYXZlIG90aGVy IHJlc3VsdHMNCisJCSAqIHRvIHByb2Nlc3MgdGhhdCBtYXkgaW5jbHVkZSBv dGhlciBDT1BZcy4NCisJCSAqLw0KKwkJbm90ZXMuaW5fZmxpcCA9ICFub3Rl cy5pbl9mbGlwOw0KKwkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0 LmRiKTsNCisJCW5vdGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJ CWxhc3QgPSAobmV4dF9yZXN1bHQgPT0gTlVMTCk7DQorDQorCQkvKiB0aW1p bmcgbWVhc3VyZSBiZWZvcmUgcHJpbnRpbmcgdGhlIGxhc3QgcmVzdWx0ICov DQorCQlpZiAobGFzdCAmJiBwc2V0LnRpbWluZykNCisJCXsNCisJCQlpbnN0 cl90aW1lCW5vdzsNCisJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7 DQorCQkJSU5TVFJfVElNRV9TVUJUUkFDVChub3csIGJlZm9yZSk7DQorCQkJ KnBlbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhub3cp Ow0KKwkJfQ0KKw0KKwkJLyogbm90aWNlcyBhbHJlYWR5IHNob3cgYWJvdmUg Zm9yIGNvcHkgKi8NCisJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rlcyk7DQor DQorCQkvKiB0aGlzIG1heSBvciBtYXkgbm90IHByaW50IHNvbWV0aGluZyBk ZXBlbmRpbmcgb24gc2V0dGluZ3MgKi8NCisJCWlmIChyZXN1bHQgIT0gTlVM TCkNCisJCQlzdWNjZXNzICY9IEhhbmRsZVF1ZXJ5UmVzdWx0KHJlc3VsdCwg bGFzdCk7DQorDQorCQkvKiBzZXQgdmFyaWFibGVzIG9uIGxhc3QgcmVzdWx0 IGlmIGFsbCB3ZW50IHdlbGwgKi8NCisJCWlmIChsYXN0ICYmIHN1Y2Nlc3Mp DQorCQkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgdHJ1ZSk7DQorDQor CQlQUWNsZWFyKHJlc3VsdCk7DQorCQlub3Rlcy5pbl9mbGlwID0gIW5vdGVz LmluX2ZsaXA7DQorCQlyZXN1bHQgPSBuZXh0X3Jlc3VsdDsNCisJfQ0KKw0K KwkvKiByZXNldCBub3RpY2UgaG9vayAqLw0KKwlQUXNldE5vdGljZVByb2Nl c3Nvcihwc2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5VTEwpOw0KKwl0ZXJt UFFFeHBCdWZmZXIoJm5vdGVzLmZsaXApOw0KKwl0ZXJtUFFFeHBCdWZmZXIo Jm5vdGVzLmZsb3ApOw0KKw0KKwkvKiBtYXkgbmVlZCB0aGlzIHRvIHJlY292 ZXIgZnJvbSBjb25uIGxvc3MgZHVyaW5nIENPUFkgKi8NCisJaWYgKCFDaGVj a0Nvbm5lY3Rpb24oKSkNCisJCXJldHVybiBmYWxzZTsNCisNCisJcmV0dXJu IHN1Y2Nlc3M7DQorfQ0KKw0KIA0KIC8qDQogICogU2VuZFF1ZXJ5OiBzZW5k IHRoZSBxdWVyeSBzdHJpbmcgdG8gdGhlIGJhY2tlbmQNCkBAIC0xMzAzLDcg KzEzNzMsNyBAQCBQcmludFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0 cykNCiBib29sDQogU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIHsN Ci0JUEdyZXN1bHQgICAqcmVzdWx0czsNCisJUEdyZXN1bHQgICAqcmVzdWx0 cyA9IE5VTEw7DQogCVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHRyYW5zYWN0 aW9uX3N0YXR1czsNCiAJZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KIAli b29sCQlPSyA9IGZhbHNlOw0KQEAgLTE0MDgsMjggKzE0NzgsNyBAQCBTZW5k UXVlcnkoY29uc3QgY2hhciAqcXVlcnkpDQogCQkJIHBzZXQuY3Jvc3N0YWJf ZmxhZyB8fCAhaXNfc2VsZWN0X2NvbW1hbmQocXVlcnkpKQ0KIAl7DQogCQkv KiBEZWZhdWx0IGZldGNoLWl0LWFsbC1hbmQtcHJpbnQgbW9kZSAqLw0KLQkJ aW5zdHJfdGltZQliZWZvcmUsDQotCQkJCQlhZnRlcjsNCi0NCi0JCWlmIChw c2V0LnRpbWluZykNCi0JCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKGJlZm9y ZSk7DQotDQotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIHF1ZXJ5KTsN Ci0NCi0JCS8qIHRoZXNlIG9wZXJhdGlvbnMgYXJlIGluY2x1ZGVkIGluIHRo ZSB0aW1pbmcgcmVzdWx0OiAqLw0KLQkJUmVzZXRDYW5jZWxDb25uKCk7DQot CQlPSyA9IFByb2Nlc3NSZXN1bHQoJnJlc3VsdHMpOw0KLQ0KLQkJaWYgKHBz ZXQudGltaW5nKQ0KLQkJew0KLQkJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQo YWZ0ZXIpOw0KLQkJCUlOU1RSX1RJTUVfU1VCVFJBQ1QoYWZ0ZXIsIGJlZm9y ZSk7DQotCQkJZWxhcHNlZF9tc2VjID0gSU5TVFJfVElNRV9HRVRfTUlMTElT RUMoYWZ0ZXIpOw0KLQkJfQ0KLQ0KLQkJLyogYnV0IHByaW50aW5nIHJlc3Vs dHMgaXNuJ3Q6ICovDQotCQlpZiAoT0sgJiYgcmVzdWx0cykNCi0JCQlPSyA9 IFByaW50UXVlcnlSZXN1bHRzKHJlc3VsdHMpOw0KKwkJT0sgPSBTZW5kUXVl cnlBbmRQcm9jZXNzUmVzdWx0cyhxdWVyeSwgJmVsYXBzZWRfbXNlYyk7DQog CX0NCiAJZWxzZQ0KIAl7DQpAQCAtMTYwNiw3ICsxNjU1LDcgQEAgRGVzY3Jp YmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21z ZWMpDQogCVBRY2xlYXIocmVzdWx0cyk7DQogDQogCXJlc3VsdHMgPSBQUWRl c2NyaWJlUHJlcGFyZWQocHNldC5kYiwgIiIpOw0KLQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzKSAmJg0KKwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRz LCB0cnVlKSAmJg0KIAkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBH UkVTX0NPTU1BTkRfT0spOw0KIAlpZiAoT0sgJiYgcmVzdWx0cykNCiAJew0K QEAgLTE2NTQsNyArMTcwMyw3IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hh ciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJCVBRY2xlYXIo cmVzdWx0cyk7DQogDQogCQkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBi dWYuZGF0YSk7DQotCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cyk7DQor CQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSk7DQogDQogCQkJ aWYgKHBzZXQudGltaW5nKQ0KIAkJCXsNCkBAIC0xNjY0LDcgKzE3MTMsNyBA QCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVs YXBzZWRfbXNlYykNCiAJCQl9DQogDQogCQkJaWYgKE9LICYmIHJlc3VsdHMp DQotCQkJCU9LID0gUHJpbnRRdWVyeVJlc3VsdHMocmVzdWx0cyk7DQorCQkJ CU9LID0gSGFuZGxlUXVlcnlSZXN1bHQocmVzdWx0cywgdHJ1ZSk7DQogDQog CQkJdGVybVBRRXhwQnVmZmVyKCZidWYpOw0KIAkJfQ0KQEAgLTE3MjMsNyAr MTc3Miw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJaWYgKFBRdHJhbnNhY3Rp b25TdGF0dXMocHNldC5kYikgPT0gUFFUUkFOU19JRExFKQ0KIAl7DQogCQly ZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJCRUdJTiIpOw0KLQkJT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0UmVzdWx0 KHJlc3VsdHMsIHRydWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3Vs dHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0cyk7DQogCQlpZiAoIU9LKQ0KQEAgLTE3MzcsNyArMTc4Niw3 IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBk b3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQkJCSAgcXVlcnkpOw0KIA0KIAly ZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0JT0sgPSBB Y2NlcHRSZXN1bHQocmVzdWx0cykgJiYNCisJT0sgPSBBY2NlcHRSZXN1bHQo cmVzdWx0cywgdHJ1ZSkgJiYNCiAJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRz KSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYgKCFPSykNCiAJCVNldFJl c3VsdFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQpAQCAtMTgxNCw3ICsxODYz LDcgQEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3IoY29uc3QgY2hhciAqcXVlcnks IGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJCQlpc19wYWdlciA9IGZhbHNl Ow0KIAkJCX0NCiANCi0JCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKTsN CisJCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKTsNCiAJCQlB c3NlcnQoIU9LKTsNCiAJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0cywg T0spOw0KIAkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KQEAgLTE5 MjMsNyArMTk3Miw3IEBAIGNsZWFudXA6DQogCXJlc3VsdHMgPSBQUWV4ZWMo cHNldC5kYiwgIkNMT1NFIF9wc3FsX2N1cnNvciIpOw0KIAlpZiAoT0spDQog CXsNCi0JCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyA9 IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQUXJlc3Vs dFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJCUNs ZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAl9DQpAQCAtMTkzMyw3ICsx OTgyLDcgQEAgY2xlYW51cDoNCiAJaWYgKHN0YXJ0ZWRfdHhuKQ0KIAl7DQog CQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsIE9LID8gIkNPTU1JVCIgOiAi Uk9MTEJBQ0siKTsNCi0JCU9LICY9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAm Jg0KKwkJT0sgJj0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQog CQkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVTX0NPTU1BTkRf T0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7DQogCX0NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvaGVscC5jIGIvc3JjL2Jpbi9wc3Fs L2hlbHAuYw0KaW5kZXggZDZkNDFiNTFkNS4uM2NjNzE3MzFiMyAxMDA2NDQN Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMNCisrKyBiL3NyYy9iaW4vcHNx bC9oZWxwLmMNCkBAIC00MDQsNiArNDA0LDggQEAgaGVscFZhcmlhYmxlcyh1 bnNpZ25lZCBzaG9ydCBpbnQgcGFnZXIpDQogCWZwcmludGYob3V0cHV0LCBf KCIgIFNFUlZFUl9WRVJTSU9OX05BTUVcbiINCiAJCQkJCSAgIiAgU0VSVkVS X1ZFUlNJT05fTlVNXG4iDQogCQkJCQkgICIgICAgc2VydmVyJ3MgdmVyc2lv biAoaW4gc2hvcnQgc3RyaW5nIG9yIG51bWVyaWMgZm9ybWF0KVxuIikpOw0K KwlmcHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0FMTF9SRVNVTFRTXG4iDQor CQkJCQkgICIgICAgc2hvdyBhbGwgcmVzdWx0cyBvZiBhIGNvbWJpbmVkIHF1 ZXJ5IChcXDspIGluc3RlYWQgb2Ygb25seSB0aGUgbGFzdFxuIikpOw0KIAlm cHJpbnRmKG91dHB1dCwgXygiICBTSE9XX0NPTlRFWFRcbiINCiAJCQkJCSAg IiAgICBjb250cm9scyBkaXNwbGF5IG9mIG1lc3NhZ2UgY29udGV4dCBmaWVs ZHMgW25ldmVyLCBlcnJvcnMsIGFsd2F5c11cbiIpKTsNCiAJZnByaW50Zihv dXRwdXQsIF8oIiAgU0lOR0xFTElORVxuIg0KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC9zZXR0aW5ncy5oIGIvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgN CmluZGV4IDViZTUwOTFmMGUuLmYyNmJmN2ZjNmIgMTAwNjQ0DQotLS0gYS9z cmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KKysrIGIvc3JjL2Jpbi9wc3FsL3Nl dHRpbmdzLmgNCkBAIC0xMjcsNiArMTI3LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg X3BzcWxTZXR0aW5ncw0KIAlib29sCQlxdWlldDsNCiAJYm9vbAkJc2luZ2xl bGluZTsNCiAJYm9vbAkJc2luZ2xlc3RlcDsNCisJYm9vbAkJc2hvd19hbGxf cmVzdWx0czsNCiAJYm9vbAkJaGlkZV90YWJsZWFtOw0KIAlpbnQJCQlmZXRj aF9jb3VudDsNCiAJaW50CQkJaGlzdHNpemU7DQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wc3FsL3N0YXJ0dXAuYyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMN CmluZGV4IDg1NTEzM2JiY2IuLjI0YjJmYzhjMjggMTAwNjQ0DQotLS0gYS9z cmMvYmluL3BzcWwvc3RhcnR1cC5jDQorKysgYi9zcmMvYmluL3BzcWwvc3Rh cnR1cC5jDQpAQCAtODgyLDYgKzg4MiwxMiBAQCBzaW5nbGVzdGVwX2hvb2so Y29uc3QgY2hhciAqbmV3dmFsKQ0KIAlyZXR1cm4gUGFyc2VWYXJpYWJsZUJv b2wobmV3dmFsLCAiU0lOR0xFU1RFUCIsICZwc2V0LnNpbmdsZXN0ZXApOw0K IH0NCiANCitzdGF0aWMgYm9vbA0KK3Nob3dfYWxsX3Jlc3VsdHNfaG9vayhj b25zdCBjaGFyICpuZXd2YWwpDQorew0KKwlyZXR1cm4gUGFyc2VWYXJpYWJs ZUJvb2wobmV3dmFsLCAiU0hPV19BTExfUkVTVUxUUyIsICZwc2V0LnNob3df YWxsX3Jlc3VsdHMpOw0KK30NCisNCiBzdGF0aWMgY2hhciAqDQogZmV0Y2hf Y291bnRfc3Vic3RpdHV0ZV9ob29rKGNoYXIgKm5ld3ZhbCkNCiB7DQpAQCAt MTE4Miw2ICsxMTg4LDkgQEAgRXN0YWJsaXNoVmFyaWFibGVTcGFjZSh2b2lk KQ0KIAlTZXRWYXJpYWJsZUhvb2tzKHBzZXQudmFycywgIlNJTkdMRVNURVAi LA0KIAkJCQkJIGJvb2xfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIHNpbmds ZXN0ZXBfaG9vayk7DQorCVNldFZhcmlhYmxlSG9va3MocHNldC52YXJzLCAi U0hPV19BTExfUkVTVUxUUyIsDQorCQkJCQkgYm9vbF9zdWJzdGl0dXRlX2hv b2ssDQorCQkJCQkgc2hvd19hbGxfcmVzdWx0c19ob29rKTsNCiAJU2V0VmFy aWFibGVIb29rcyhwc2V0LnZhcnMsICJGRVRDSF9DT1VOVCIsDQogCQkJCQkg ZmV0Y2hfY291bnRfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIGZldGNoX2Nv dW50X2hvb2spOw0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29t cGxldGUuYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYw0KaW5kZXgg YmNkZGM3NjAxZS4uYjY2ZTVkYjllMiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuYw0KKysrIGIvc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5jDQpAQCAtMzY2Miw3ICszNjYyLDcgQEAgcHNxbF9jb21wbGV0 aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkNCiAJ ZWxzZSBpZiAoVGFpbE1hdGNoZXNDUygiXFxzZXQiLCBNYXRjaEFueSkpDQog CXsNCiAJCWlmIChUYWlsTWF0Y2hlc0NTKCJBVVRPQ09NTUlUfE9OX0VSUk9S X1NUT1B8UVVJRVR8Ig0KLQkJCQkJCSAgIlNJTkdMRUxJTkV8U0lOR0xFU1RF UCIpKQ0KKwkJCQkJCSAgIlNJTkdMRUxJTkV8U0lOR0xFU1RFUHxTSE9XX0FM TF9SRVNVTFRTIikpDQogCQkJQ09NUExFVEVfV0lUSF9DUygib24iLCAib2Zm Iik7DQogCQllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJDT01QX0tFWVdPUkRf Q0FTRSIpKQ0KIAkJCUNPTVBMRVRFX1dJVEhfQ1MoImxvd2VyIiwgInVwcGVy IiwNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Nv cHkyLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0 DQppbmRleCA3NWQ0MTE5ZWFhLi40ZmE2MzQzNzk1IDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5Mi5vdXQNCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0DQpAQCAtNDc1LDEw ICs0NzUsMTAgQEAgY29weSBjaGVja19jb25fdGJsIGZyb20gc3RkaW47DQog Tk9USUNFOiAgaW5wdXQgPSB7ImYxIjoxfQ0KIE5PVElDRTogIGlucHV0ID0g eyJmMSI6bnVsbH0NCiBjb3B5IGNoZWNrX2Nvbl90YmwgZnJvbSBzdGRpbjsN Ci1OT1RJQ0U6ICBpbnB1dCA9IHsiZjEiOjB9DQogRVJST1I6ICBuZXcgcm93 IGZvciByZWxhdGlvbiAiY2hlY2tfY29uX3RibCIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAiY2hlY2tfY29uX3RibF9jaGVjayINCiBERVRBSUw6ICBG YWlsaW5nIHJvdyBjb250YWlucyAoMCkuDQogQ09OVEVYVDogIENPUFkgY2hl Y2tfY29uX3RibCwgbGluZSAxOiAiMCINCitOT1RJQ0U6ICBpbnB1dCA9IHsi ZjEiOjB9DQogc2VsZWN0ICogZnJvbSBjaGVja19jb25fdGJsOw0KICBmMSAN CiAtLS0tDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9jb3B5ZG1sLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29w eWRtbC5vdXQNCmluZGV4IDFiNTMzOTYyYzYuLmI1YTIyNTYyOGYgMTAwNjQ0 DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0 DQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0 DQpAQCAtODQsMTAgKzg0LDEwIEBAIGRyb3AgcnVsZSBxcXEgb24gY29weWRt bF90ZXN0Ow0KIGNyZWF0ZSBmdW5jdGlvbiBxcXFfdHJpZygpIHJldHVybnMg dHJpZ2dlciBhcyAkJA0KIGJlZ2luDQogaWYgdGdfb3AgaW4gKCdJTlNFUlQn LCAnVVBEQVRFJykgdGhlbg0KLSAgICByYWlzZSBub3RpY2UgJyUgJScsIHRn X29wLCBuZXcuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAlICUnLCB0Z193 aGVuLCB0Z19vcCwgbmV3LmlkOw0KICAgICByZXR1cm4gbmV3Ow0KIGVsc2UN Ci0gICAgcmFpc2Ugbm90aWNlICclICUnLCB0Z19vcCwgb2xkLmlkOw0KKyAg ICByYWlzZSBub3RpY2UgJyUgJSAlJywgdGdfd2hlbiwgdGdfb3AsIG9sZC5p ZDsNCiAgICAgcmV0dXJuIG9sZDsNCiBlbmQgaWY7DQogZW5kDQpAQCAtOTcs MTYgKzk3LDE2IEBAIGNyZWF0ZSB0cmlnZ2VyIHFxcWJlZiBiZWZvcmUgaW5z ZXJ0IG9yIHVwZGF0ZSBvciBkZWxldGUgb24gY29weWRtbF90ZXN0DQogY3Jl YXRlIHRyaWdnZXIgcXFxYWYgYWZ0ZXIgaW5zZXJ0IG9yIHVwZGF0ZSBvciBk ZWxldGUgb24gY29weWRtbF90ZXN0DQogICAgIGZvciBlYWNoIHJvdyBleGVj dXRlIHByb2NlZHVyZSBxcXFfdHJpZygpOw0KIGNvcHkgKGluc2VydCBpbnRv IGNvcHlkbWxfdGVzdCAodCkgdmFsdWVzICgnZicpIHJldHVybmluZyBpZCkg dG8gc3Rkb3V0Ow0KLU5PVElDRTogIElOU0VSVCA4DQorTk9USUNFOiAgQkVG T1JFIElOU0VSVCA4DQogOA0KLU5PVElDRTogIElOU0VSVCA4DQorTk9USUNF OiAgQUZURVIgSU5TRVJUIDgNCiBjb3B5ICh1cGRhdGUgY29weWRtbF90ZXN0 IHNldCB0ID0gJ2cnIHdoZXJlIHQgPSAnZicgcmV0dXJuaW5nIGlkKSB0byBz dGRvdXQ7DQotTk9USUNFOiAgVVBEQVRFIDgNCitOT1RJQ0U6ICBCRUZPUkUg VVBEQVRFIDgNCiA4DQotTk9USUNFOiAgVVBEQVRFIDgNCitOT1RJQ0U6ICBB RlRFUiBVUERBVEUgOA0KIGNvcHkgKGRlbGV0ZSBmcm9tIGNvcHlkbWxfdGVz dCB3aGVyZSB0ID0gJ2cnIHJldHVybmluZyBpZCkgdG8gc3Rkb3V0Ow0KLU5P VElDRTogIERFTEVURSA4DQorTk9USUNFOiAgQkVGT1JFIERFTEVURSA4DQog OA0KLU5PVElDRTogIERFTEVURSA4DQorTk9USUNFOiAgQUZURVIgREVMRVRF IDgNCiBkcm9wIHRhYmxlIGNvcHlkbWxfdGVzdDsNCiBkcm9wIGZ1bmN0aW9u IHFxcV90cmlnKCk7DQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQNCmluZGV4IDM1ODU2YmZmZGQuLmJjYTViZjJmZTcgMTAwNjQ0 DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0DQor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0DQpAQCAt NDcyOSwzICs0NzI5LDg5IEBAIGRyb3Agc2NoZW1hIHRlc3RwYXJ0Ow0KIHNl dCBzZWFyY2hfcGF0aCB0byBkZWZhdWx0Ow0KIHNldCByb2xlIHRvIGRlZmF1 bHQ7DQogZHJvcCByb2xlIHRlc3Ryb2xlX3BhcnRpdGlvbmluZzsNCistLQ0K Ky0tIGNvbWJpbmVkIHF1ZXJpZXMgJiBTSE9XX0FMTF9SRVNVTFRTIG9wdGlv bg0KKy0tDQorXGVjaG8gJyMgU0hPV19BTExfUkVTVUxUUyB0ZXN0cycNCisj IFNIT1dfQUxMX1JFU1VMVFMgdGVzdHMNCitDUkVBVEUgRlVOQ1RJT04gd2Fy bihtc2cgVEVYVCkgUkVUVVJOUyBCT09MRUFOIEFTICQkDQorICBCRUdJTiBS QUlTRSBOT1RJQ0UgJ3dhcm4gJScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5E DQorJCQgTEFOR1VBR0UgcGxwZ3NxbDsNCitcc2V0IFNIT1dfQUxMX1JFU1VM VFMgb24NCistLSBzaG93IGJvdGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VM RUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorIG9uZSAN CistLS0tLQ0KKyAgIDENCisoMSByb3cpDQorDQorTk9USUNFOiAgd2FybiAx LjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBs aW5lIDIgYXQgUkFJU0UNCisgd2FybiANCistLS0tLS0NCisgdA0KKygxIHJv dykNCisNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJvdykNCisNCist LSBcZ3NldCBhcHBsaWVzIHRvIGxhc3QgcXVlcnkgb25seQ0KK1NFTEVDVCAz IEFTIHRocmVlIFw7IFNFTEVDVCB3YXJuKCczLjUnKSBcOyBTRUxFQ1QgNCBB UyBmb3VyIFxnc2V0DQorIHRocmVlIA0KKy0tLS0tLS0NCisgICAgIDMNCiso MSByb3cpDQorDQorTk9USUNFOiAgd2FybiAzLjUNCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCisg d2FybiANCistLS0tLS0NCisgdA0KKygxIHJvdykNCisNCitcZWNobyA6dGhy ZWUgOmZvdXINCis6dGhyZWUgNA0KKy0tIHN5bnRheCBlcnJvciBzdG9wcyBh bGwgcHJvY2Vzc2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsgU0VM RUNUIHdhcm4oJzYuNScpIFw7IFNFTEVDVCA3IDsNCitFUlJPUjogIHN5bnRh eCBlcnJvciBhdCBvciBuZWFyICI7Ig0KK0xJTkUgMTogU0VMRUNUIDUgOyBT RUxFQ1QgNiArIDsgU0VMRUNUIHdhcm4oJzYuNScpIDsgU0VMRUNUIDcgOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCistLSB3aXRoIGFi b3J0ZWQgdHJhbnNhY3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitCRUdJ TiBcOyBTRUxFQ1QgOCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5pbmUg XDsgUk9MTEJBQ0sgXDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorIGVpZ2h0IA0K Ky0tLS0tLS0NCisgICAgIDgNCisoMSByb3cpDQorDQorRVJST1I6ICBkaXZp c2lvbiBieSB6ZXJvDQorLS0gY2xvc2UgcHJldmlvdXNseSBhYm9ydGVkIHRy YW5zYWN0aW9uDQorUk9MTEJBQ0s7DQorLS0gbWlzYyBTUUwgY29tbWFuZHMN CistLSAobm9uIFNFTEVDVCBvdXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIHRo dXMgaXMgbm90IHNob3duIGluIGV4cGVjdGVkIHJlc3VsdHMpDQorU0VMRUNU ICdvaycgQVMgImJlZ2luIiBcOw0KK0NSRUFURSBUQUJMRSBwc3FsX2NvbWlj cyhzIFRFWFQpIFw7DQorSU5TRVJUIElOVE8gcHNxbF9jb21pY3MgVkFMVUVT ICgnQ2FsdmluJyksICgnaG9iYmVzJykgXDsNCitDT1BZIHBzcWxfY29taWNz IEZST00gU1RESU4gXDsNCitVUERBVEUgcHNxbF9jb21pY3MgU0VUIHMgPSAn SG9iYmVzJyBXSEVSRSBzID0gJ2hvYmJlcycgXDsNCitERUxFVEUgRlJPTSBw c3FsX2NvbWljcyBXSEVSRSBzID0gJ01vZScgXDsNCitDT1BZIHBzcWxfY29t aWNzIFRPIFNURE9VVCBcOw0KK1RSVU5DQVRFIHBzcWxfY29taWNzIFw7DQor RFJPUCBUQUJMRSBwc3FsX2NvbWljcyBcOw0KK1NFTEVDVCAnb2snIEFTICJk b25lIiA7DQorIGJlZ2luIA0KKy0tLS0tLS0NCisgb2sNCisoMSByb3cpDQor DQorQ2FsdmluDQorU3VzaWUNCitIb2JiZXMNCisgZG9uZSANCistLS0tLS0N Cisgb2sNCisoMSByb3cpDQorDQorXHNldCBTSE9XX0FMTF9SRVNVTFRTIG9m Zg0KK0RST1AgRlVOQ1RJT04gd2FybihURVhUKTsNCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5ZG1sLnNxbCBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvcHlkbWwuc3FsDQppbmRleCA5YTI5ZjljOWFjLi40NTc4 MzQyMjUzIDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29w eWRtbC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlkbWwu c3FsDQpAQCAtNzAsMTAgKzcwLDEwIEBAIGRyb3AgcnVsZSBxcXEgb24gY29w eWRtbF90ZXN0Ow0KIGNyZWF0ZSBmdW5jdGlvbiBxcXFfdHJpZygpIHJldHVy bnMgdHJpZ2dlciBhcyAkJA0KIGJlZ2luDQogaWYgdGdfb3AgaW4gKCdJTlNF UlQnLCAnVVBEQVRFJykgdGhlbg0KLSAgICByYWlzZSBub3RpY2UgJyUgJScs IHRnX29wLCBuZXcuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAlICUnLCB0 Z193aGVuLCB0Z19vcCwgbmV3LmlkOw0KICAgICByZXR1cm4gbmV3Ow0KIGVs c2UNCi0gICAgcmFpc2Ugbm90aWNlICclICUnLCB0Z19vcCwgb2xkLmlkOw0K KyAgICByYWlzZSBub3RpY2UgJyUgJSAlJywgdGdfd2hlbiwgdGdfb3AsIG9s ZC5pZDsNCiAgICAgcmV0dXJuIG9sZDsNCiBlbmQgaWY7DQogZW5kDQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbA0KaW5kZXggNzhmNGI1ZDdkNS4u MDNhMzc4ZGUzZCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BzcWwuc3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNx bA0KQEAgLTExMTUsMyArMTExNSw0MCBAQCBzZXQgc2VhcmNoX3BhdGggdG8g ZGVmYXVsdDsNCiANCiBzZXQgcm9sZSB0byBkZWZhdWx0Ow0KIGRyb3Agcm9s ZSB0ZXN0cm9sZV9wYXJ0aXRpb25pbmc7DQorDQorLS0NCistLSBjb21iaW5l ZCBxdWVyaWVzICYgU0hPV19BTExfUkVTVUxUUyBvcHRpb24NCistLQ0KK1xl Y2hvICcjIFNIT1dfQUxMX1JFU1VMVFMgdGVzdHMnDQorQ1JFQVRFIEZVTkNU SU9OIHdhcm4obXNnIFRFWFQpIFJFVFVSTlMgQk9PTEVBTiBBUyAkJA0KKyAg QkVHSU4gUkFJU0UgTk9USUNFICd3YXJuICUnLCBtc2cgOyBSRVRVUk4gVFJV RSA7IEVORA0KKyQkIExBTkdVQUdFIHBscGdzcWw7DQorXHNldCBTSE9XX0FM TF9SRVNVTFRTIG9uDQorLS0gc2hvdyBib3RoDQorU0VMRUNUIDEgQVMgb25l IFw7IFNFTEVDVCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0K Ky0tIFxnc2V0IGFwcGxpZXMgdG8gbGFzdCBxdWVyeSBvbmx5DQorU0VMRUNU IDMgQVMgdGhyZWUgXDsgU0VMRUNUIHdhcm4oJzMuNScpIFw7IFNFTEVDVCA0 IEFTIGZvdXIgXGdzZXQNCitcZWNobyA6dGhyZWUgOmZvdXINCistLSBzeW50 YXggZXJyb3Igc3RvcHMgYWxsIHByb2Nlc3NpbmcNCitTRUxFQ1QgNSBcOyBT RUxFQ1QgNiArIFw7IFNFTEVDVCB3YXJuKCc2LjUnKSBcOyBTRUxFQ1QgNyA7 DQorLS0gd2l0aCBhYm9ydGVkIHRyYW5zYWN0aW9uLCBzdG9wIG9uIGZpcnN0 IGVycm9yDQorQkVHSU4gXDsgU0VMRUNUIDggQVMgZWlnaHQgXDsgU0VMRUNU IDkvMCBBUyBuaW5lIFw7IFJPTExCQUNLIFw7IFNFTEVDVCAxMCBBUyB0ZW4g Ow0KKy0tIGNsb3NlIHByZXZpb3VzbHkgYWJvcnRlZCB0cmFuc2FjdGlvbg0K K1JPTExCQUNLOw0KKy0tIG1pc2MgU1FMIGNvbW1hbmRzDQorLS0gKG5vbiBT RUxFQ1Qgb3V0cHV0IGlzIHNlbnQgdG8gc3RkZXJyLCB0aHVzIGlzIG5vdCBz aG93biBpbiBleHBlY3RlZCByZXN1bHRzKQ0KK1NFTEVDVCAnb2snIEFTICJi ZWdpbiIgXDsNCitDUkVBVEUgVEFCTEUgcHNxbF9jb21pY3MocyBURVhUKSBc Ow0KK0lOU0VSVCBJTlRPIHBzcWxfY29taWNzIFZBTFVFUyAoJ0NhbHZpbicp LCAoJ2hvYmJlcycpIFw7DQorQ09QWSBwc3FsX2NvbWljcyBGUk9NIFNURElO IFw7DQorVVBEQVRFIHBzcWxfY29taWNzIFNFVCBzID0gJ0hvYmJlcycgV0hF UkUgcyA9ICdob2JiZXMnIFw7DQorREVMRVRFIEZST00gcHNxbF9jb21pY3Mg V0hFUkUgcyA9ICdNb2UnIFw7DQorQ09QWSBwc3FsX2NvbWljcyBUTyBTVERP VVQgXDsNCitUUlVOQ0FURSBwc3FsX2NvbWljcyBcOw0KK0RST1AgVEFCTEUg cHNxbF9jb21pY3MgXDsNCitTRUxFQ1QgJ29rJyBBUyAiZG9uZSIgOw0KK01v ZQ0KK1N1c2llDQorXC4NCitcc2V0IFNIT1dfQUxMX1JFU1VMVFMgb2ZmDQor RFJPUCBGVU5DVElPTiB3YXJuKFRFWFQpOw0K --8323329-984191017-1556296728=:29865--