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 1hRI70-0004NE-Ga for pgsql-hackers@arkaria.postgresql.org; Thu, 16 May 2019 15:16:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hRI6x-0005pO-SK for pgsql-hackers@arkaria.postgresql.org; Thu, 16 May 2019 15:15:59 +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 1hRI6x-0005pA-HG for pgsql-hackers@lists.postgresql.org; Thu, 16 May 2019 15:15:59 +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 1hRI6p-0007rV-7N for pgsql-hackers@lists.postgresql.org; Thu, 16 May 2019 15:15:58 +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 AD1F355F6C; Thu, 16 May 2019 17:15:49 +0200 (CEST) Received: from lancre.paris.ensmp.fr (lancre.paris.ensmp.fr [192.168.152.71]) (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 94A0B20183; Thu, 16 May 2019 17:15:49 +0200 (CEST) Date: Thu, 16 May 2019 17:15:49 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@lancre To: Daniel Verite cc: "Iwata, Aya" , PostgreSQL Developers Subject: RE: psql - add SHOW_ALL_RESULTS option In-Reply-To: <710caf32-a5f9-4511-bd9d-736c1a91f4c3@manitou-mail.org> Message-ID: References: <710caf32-a5f9-4511-bd9d-736c1a91f4c3@manitou-mail.org> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-1078240768-1558019749=:7696" X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: -100 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduuddruddttddgkedvucetufdoteggodetrfcurfhrohhfihhlvgemucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvufgjkfhffgggtgesmhdtreertdervdenucfhrhhomhephfgrsghivghnucevqffgnffjqfcuoegtohgvlhhhohestghrihdrvghnshhmphdrfhhrqeenucfrrghrrghmpehmohguvgepshhmthhpohhuth 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-1078240768-1558019749=:7696 Content-Type: text/plain; charset=US-ASCII; format=flowed Re-bonjour Daniel, >> 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 > > \errverbose seems to no longer work with the patch: Here is a v3 which fixes \errverbose, hopefully. The feature is still an option which is not enabled by default. -- Fabien. --8323329-1078240768-1558019749=:7696 Content-Type: text/x-diff; name=psql-show-all-results-3.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-3.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 bi9wc3FsL2NvbW1vbi5jDQppbmRleCA5NTc5ZTEwNjMwLi5kMzVhYjkxOTk1 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 c3VsdFZhcmlhYmxlcyhyZXN1bHQsIGZhbHNlKTsNCisJCQlDbGVhck9yU2F2 ZVJlc3VsdChyZXN1bHQpOw0KKwkJCXN1Y2Nlc3MgPSBmYWxzZTsNCisNCisJ CQkvKiBhbmQgc3dpdGNoIHRvIG5leHQgcmVzdWx0ICovDQorCQkJcmVzdWx0 ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQorCQkJY29udGludWU7DQorCQl9 DQorDQorCQkvKiBtdXN0IGhhbmRsZSBDT1BZIGJlZm9yZSBjaGFuZ2luZyB0 aGUgY3VycmVudCByZXN1bHQgKi8NCisJCXJlc3VsdF9zdGF0dXMgPSBQUXJl c3VsdFN0YXR1cyhyZXN1bHQpOw0KKwkJaWYgKHJlc3VsdF9zdGF0dXMgPT0g UEdSRVNfQ09QWV9JTiB8fA0KKwkJCXJlc3VsdF9zdGF0dXMgPT0gUEdSRVNf Q09QWV9PVVQpDQorCQl7DQorCQkJU2hvd05vdGljZU1lc3NhZ2UoJm5vdGVz KTsNCisJCQlIYW5kbGVDb3B5UmVzdWx0KCZyZXN1bHQpOw0KKwkJfQ0KKw0K KwkJLyoNCisJCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkgYWdhaW4uICBJbiB0 aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xlLWNvbW1hbmQNCisJCSAqIHN0 cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVyd2lzZSwgd2UnbGwg aGF2ZSBvdGhlciByZXN1bHRzDQorCQkgKiB0byBwcm9jZXNzIHRoYXQgbWF5 IGluY2x1ZGUgb3RoZXIgQ09QWXMuDQorCQkgKi8NCisJCW5vdGVzLmluX2Zs aXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJCW5leHRfcmVzdWx0ID0gUFFnZXRS ZXN1bHQocHNldC5kYik7DQorCQlub3Rlcy5pbl9mbGlwID0gIW5vdGVzLmlu X2ZsaXA7DQorCQlsYXN0ID0gKG5leHRfcmVzdWx0ID09IE5VTEwpOw0KKw0K KwkJLyogdGltaW5nIG1lYXN1cmUgYmVmb3JlIHByaW50aW5nIHRoZSBsYXN0 IHJlc3VsdCAqLw0KKwkJaWYgKGxhc3QgJiYgcHNldC50aW1pbmcpDQorCQl7 DQorCQkJaW5zdHJfdGltZQlub3c7DQorCQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChub3cpOw0KKwkJCUlOU1RSX1RJTUVfU1VCVFJBQ1Qobm93LCBiZWZv cmUpOw0KKwkJCSpwZWxhcHNlZF9tc2VjID0gSU5TVFJfVElNRV9HRVRfTUlM TElTRUMobm93KTsNCisJCX0NCisNCisJCS8qIG5vdGljZXMgYWxyZWFkeSBz aG93IGFib3ZlIGZvciBjb3B5ICovDQorCQlTaG93Tm90aWNlTWVzc2FnZSgm bm90ZXMpOw0KKw0KKwkJLyogdGhpcyBtYXkgb3IgbWF5IG5vdCBwcmludCBz b21ldGhpbmcgZGVwZW5kaW5nIG9uIHNldHRpbmdzICovDQorCQlpZiAocmVz dWx0ICE9IE5VTEwpDQorCQkJc3VjY2VzcyAmPSBIYW5kbGVRdWVyeVJlc3Vs dChyZXN1bHQsIGxhc3QpOw0KKw0KKwkJLyogc2V0IHZhcmlhYmxlcyBvbiBs YXN0IHJlc3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQorCQlpZiAobGFzdCAm JiBzdWNjZXNzKQ0KKwkJCVNldFJlc3VsdFZhcmlhYmxlcyhyZXN1bHQsIHRy dWUpOw0KKw0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisJCW5v dGVzLmluX2ZsaXAgPSAhbm90ZXMuaW5fZmxpcDsNCisJCXJlc3VsdCA9IG5l eHRfcmVzdWx0Ow0KKwl9DQorDQorCS8qIHJlc2V0IG5vdGljZSBob29rICov DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIE5vdGljZVByb2Nl c3NvciwgTlVMTCk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMuZmxpcCk7 DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90ZXMuZmxvcCk7DQorDQorCS8qIG1h eSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNvbm4gbG9zcyBkdXJpbmcg Q09QWSAqLw0KKwlpZiAoIUNoZWNrQ29ubmVjdGlvbigpKQ0KKwkJcmV0dXJu IGZhbHNlOw0KKw0KKwlyZXR1cm4gc3VjY2VzczsNCit9DQorDQogDQogLyoN CiAgKiBTZW5kUXVlcnk6IHNlbmQgdGhlIHF1ZXJ5IHN0cmluZyB0byB0aGUg YmFja2VuZA0KQEAgLTEzMDMsNyArMTM3Myw3IEBAIFByaW50UXVlcnlSZXN1 bHRzKFBHcmVzdWx0ICpyZXN1bHRzKQ0KIGJvb2wNCiBTZW5kUXVlcnkoY29u c3QgY2hhciAqcXVlcnkpDQogew0KLQlQR3Jlc3VsdCAgICpyZXN1bHRzOw0K KwlQR3Jlc3VsdCAgICpyZXN1bHRzID0gTlVMTDsNCiAJUEdUcmFuc2FjdGlv blN0YXR1c1R5cGUgdHJhbnNhY3Rpb25fc3RhdHVzOw0KIAlkb3VibGUJCWVs YXBzZWRfbXNlYyA9IDA7DQogCWJvb2wJCU9LID0gZmFsc2U7DQpAQCAtMTQw OCwyOCArMTQ3OCw3IEBAIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkN CiAJCQkgcHNldC5jcm9zc3RhYl9mbGFnIHx8ICFpc19zZWxlY3RfY29tbWFu ZChxdWVyeSkpDQogCXsNCiAJCS8qIERlZmF1bHQgZmV0Y2gtaXQtYWxsLWFu ZC1wcmludCBtb2RlICovDQotCQlpbnN0cl90aW1lCWJlZm9yZSwNCi0JCQkJ CWFmdGVyOw0KLQ0KLQkJaWYgKHBzZXQudGltaW5nKQ0KLQkJCUlOU1RSX1RJ TUVfU0VUX0NVUlJFTlQoYmVmb3JlKTsNCi0NCi0JCXJlc3VsdHMgPSBQUWV4 ZWMocHNldC5kYiwgcXVlcnkpOw0KLQ0KLQkJLyogdGhlc2Ugb3BlcmF0aW9u cyBhcmUgaW5jbHVkZWQgaW4gdGhlIHRpbWluZyByZXN1bHQ6ICovDQotCQlS ZXNldENhbmNlbENvbm4oKTsNCi0JCU9LID0gUHJvY2Vzc1Jlc3VsdCgmcmVz dWx0cyk7DQotDQotCQlpZiAocHNldC50aW1pbmcpDQotCQl7DQotCQkJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVChhZnRlcik7DQotCQkJSU5TVFJfVElNRV9T VUJUUkFDVChhZnRlciwgYmVmb3JlKTsNCi0JCQllbGFwc2VkX21zZWMgPSBJ TlNUUl9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQotCQl9DQotDQotCQkv KiBidXQgcHJpbnRpbmcgcmVzdWx0cyBpc24ndDogKi8NCi0JCWlmIChPSyAm JiByZXN1bHRzKQ0KLQkJCU9LID0gUHJpbnRRdWVyeVJlc3VsdHMocmVzdWx0 cyk7DQorCQlPSyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKHF1ZXJ5 LCAmZWxhcHNlZF9tc2VjKTsNCiAJfQ0KIAllbHNlDQogCXsNCkBAIC0xNjA2 LDcgKzE2NTUsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5 LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJUFFjbGVhcihyZXN1bHRzKTsN CiANCiAJcmVzdWx0cyA9IFBRZGVzY3JpYmVQcmVwYXJlZChwc2V0LmRiLCAi Iik7DQotCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCU9LID0g QWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkoUFFyZXN1bHRT dGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCWlmIChP SyAmJiByZXN1bHRzKQ0KIAl7DQpAQCAtMTY1NCw3ICsxNzAzLDcgQEAgRGVz Y3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2Vk X21zZWMpDQogCQkJUFFjbGVhcihyZXN1bHRzKTsNCiANCiAJCQlyZXN1bHRz ID0gUFFleGVjKHBzZXQuZGIsIGJ1Zi5kYXRhKTsNCi0JCQlPSyA9IEFjY2Vw dFJlc3VsdChyZXN1bHRzKTsNCisJCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1 bHRzLCB0cnVlKTsNCiANCiAJCQlpZiAocHNldC50aW1pbmcpDQogCQkJew0K QEAgLTE2NjQsNyArMTcxMyw3IEBAIERlc2NyaWJlUXVlcnkoY29uc3QgY2hh ciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJCX0NCiANCiAJ CQlpZiAoT0sgJiYgcmVzdWx0cykNCi0JCQkJT0sgPSBQcmludFF1ZXJ5UmVz dWx0cyhyZXN1bHRzKTsNCisJCQkJT0sgPSBIYW5kbGVRdWVyeVJlc3VsdChy ZXN1bHRzLCB0cnVlKTsNCiANCiAJCQl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7 DQogCQl9DQpAQCAtMTcyMyw3ICsxNzcyLDcgQEAgRXhlY1F1ZXJ5VXNpbmdD dXJzb3IoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2Vj KQ0KIAlpZiAoUFF0cmFuc2FjdGlvblN0YXR1cyhwc2V0LmRiKSA9PSBQUVRS QU5TX0lETEUpDQogCXsNCiAJCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwg IkJFR0lOIik7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAmJg0K KwkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQko UFFyZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7 DQogCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJCWlmICghT0sp DQpAQCAtMTczNyw3ICsxNzg2LDcgQEAgRXhlY1F1ZXJ5VXNpbmdDdXJzb3Io Y29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjKQ0KIAkJ CQkJICBxdWVyeSk7DQogDQogCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5kYiwg YnVmLmRhdGEpOw0KLQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAmJg0K KwlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJKFBR cmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVTX0NPTU1BTkRfT0spOw0K IAlpZiAoIU9LKQ0KIAkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdHMsIE9L KTsNCkBAIC0xODE0LDcgKzE4NjMsNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNv cihjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQog CQkJCWlzX3BhZ2VyID0gZmFsc2U7DQogCQkJfQ0KIA0KLQkJCU9LID0gQWNj ZXB0UmVzdWx0KHJlc3VsdHMpOw0KKwkJCU9LID0gQWNjZXB0UmVzdWx0KHJl c3VsdHMsIHRydWUpOw0KIAkJCUFzc2VydCghT0spOw0KIAkJCVNldFJlc3Vs dFZhcmlhYmxlcyhyZXN1bHRzLCBPSyk7DQogCQkJQ2xlYXJPclNhdmVSZXN1 bHQocmVzdWx0cyk7DQpAQCAtMTkyMyw3ICsxOTcyLDcgQEAgY2xlYW51cDoN CiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQ0xPU0UgX3BzcWxfY3Vy c29yIik7DQogCWlmIChPSykNCiAJew0KLQkJT0sgPSBBY2NlcHRSZXN1bHQo cmVzdWx0cykgJiYNCisJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRy dWUpICYmDQogCQkJKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpID09IFBHUkVT X0NPTU1BTkRfT0spOw0KIAkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0cyk7 DQogCX0NCkBAIC0xOTMzLDcgKzE5ODIsNyBAQCBjbGVhbnVwOg0KIAlpZiAo c3RhcnRlZF90eG4pDQogCXsNCiAJCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5k YiwgT0sgPyAiQ09NTUlUIiA6ICJST0xMQkFDSyIpOw0KLQkJT0sgJj0gQWNj ZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyAmPSBBY2NlcHRSZXN1bHQo cmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFyZXN1bHRTdGF0dXMocmVzdWx0 cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCQlDbGVhck9yU2F2ZVJlc3Vs dChyZXN1bHRzKTsNCiAJfQ0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9o ZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5jDQppbmRleCA1ZmIxYmFhZGM1 Li41ZDA0NDljMjZjIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL2hlbHAu Yw0KKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYw0KQEAgLTQwNCw2ICs0MDQs OCBAQCBoZWxwVmFyaWFibGVzKHVuc2lnbmVkIHNob3J0IGludCBwYWdlcikN CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgU0VSVkVSX1ZFUlNJT05fTkFNRVxu Ig0KIAkJCQkJICAiICBTRVJWRVJfVkVSU0lPTl9OVU1cbiINCiAJCQkJCSAg IiAgICBzZXJ2ZXIncyB2ZXJzaW9uIChpbiBzaG9ydCBzdHJpbmcgb3IgbnVt ZXJpYyBmb3JtYXQpXG4iKSk7DQorCWZwcmludGYob3V0cHV0LCBfKCIgIFNI T1dfQUxMX1JFU1VMVFNcbiINCisJCQkJCSAgIiAgICBzaG93IGFsbCByZXN1 bHRzIG9mIGEgY29tYmluZWQgcXVlcnkgKFxcOykgaW5zdGVhZCBvZiBvbmx5 IHRoZSBsYXN0XG4iKSk7DQogCWZwcmludGYob3V0cHV0LCBfKCIgIFNIT1df Q09OVEVYVFxuIg0KIAkJCQkJICAiICAgIGNvbnRyb2xzIGRpc3BsYXkgb2Yg bWVzc2FnZSBjb250ZXh0IGZpZWxkcyBbbmV2ZXIsIGVycm9ycywgYWx3YXlz XVxuIikpOw0KIAlmcHJpbnRmKG91dHB1dCwgXygiICBTSU5HTEVMSU5FXG4i DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmggYi9zcmMv YmluL3BzcWwvc2V0dGluZ3MuaA0KaW5kZXggNWJlNTA5MWYwZS4uZjI2YmY3 ZmM2YiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9zZXR0aW5ncy5oDQor KysgYi9zcmMvYmluL3BzcWwvc2V0dGluZ3MuaA0KQEAgLTEyNyw2ICsxMjcs NyBAQCB0eXBlZGVmIHN0cnVjdCBfcHNxbFNldHRpbmdzDQogCWJvb2wJCXF1 aWV0Ow0KIAlib29sCQlzaW5nbGVsaW5lOw0KIAlib29sCQlzaW5nbGVzdGVw Ow0KKwlib29sCQlzaG93X2FsbF9yZXN1bHRzOw0KIAlib29sCQloaWRlX3Rh YmxlYW07DQogCWludAkJCWZldGNoX2NvdW50Ow0KIAlpbnQJCQloaXN0c2l6 ZTsNCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvc3RhcnR1cC5jIGIvc3Jj L2Jpbi9wc3FsL3N0YXJ0dXAuYw0KaW5kZXggN2M1YjQ1ZjdjYy4uNDJlZjcz OWY5NiAxMDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMNCisr KyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMNCkBAIC04ODMsNiArODgzLDEy IEBAIHNpbmdsZXN0ZXBfaG9vayhjb25zdCBjaGFyICpuZXd2YWwpDQogCXJl dHVybiBQYXJzZVZhcmlhYmxlQm9vbChuZXd2YWwsICJTSU5HTEVTVEVQIiwg JnBzZXQuc2luZ2xlc3RlcCk7DQogfQ0KIA0KK3N0YXRpYyBib29sDQorc2hv d19hbGxfcmVzdWx0c19ob29rKGNvbnN0IGNoYXIgKm5ld3ZhbCkNCit7DQor CXJldHVybiBQYXJzZVZhcmlhYmxlQm9vbChuZXd2YWwsICJTSE9XX0FMTF9S RVNVTFRTIiwgJnBzZXQuc2hvd19hbGxfcmVzdWx0cyk7DQorfQ0KKw0KIHN0 YXRpYyBjaGFyICoNCiBmZXRjaF9jb3VudF9zdWJzdGl0dXRlX2hvb2soY2hh ciAqbmV3dmFsKQ0KIHsNCkBAIC0xMTgzLDYgKzExODksOSBAQCBFc3RhYmxp c2hWYXJpYWJsZVNwYWNlKHZvaWQpDQogCVNldFZhcmlhYmxlSG9va3MocHNl dC52YXJzLCAiU0lOR0xFU1RFUCIsDQogCQkJCQkgYm9vbF9zdWJzdGl0dXRl X2hvb2ssDQogCQkJCQkgc2luZ2xlc3RlcF9ob29rKTsNCisJU2V0VmFyaWFi bGVIb29rcyhwc2V0LnZhcnMsICJTSE9XX0FMTF9SRVNVTFRTIiwNCisJCQkJ CSBib29sX3N1YnN0aXR1dGVfaG9vaywNCisJCQkJCSBzaG93X2FsbF9yZXN1 bHRzX2hvb2spOw0KIAlTZXRWYXJpYWJsZUhvb2tzKHBzZXQudmFycywgIkZF VENIX0NPVU5UIiwNCiAJCQkJCSBmZXRjaF9jb3VudF9zdWJzdGl0dXRlX2hv b2ssDQogCQkJCQkgZmV0Y2hfY291bnRfaG9vayk7DQpkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3Rh Yi1jb21wbGV0ZS5jDQppbmRleCBlNGMwM2RlMjIxLi5lMjVhZmFkMzA0IDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQorKysg Yi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMNCkBAIC0zNjYyLDcgKzM2 NjIsNyBAQCBwc3FsX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50 IHN0YXJ0LCBpbnQgZW5kKQ0KIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJc XHNldCIsIE1hdGNoQW55KSkNCiAJew0KIAkJaWYgKFRhaWxNYXRjaGVzQ1Mo IkFVVE9DT01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHwiDQotCQkJCQkJICAi U0lOR0xFTElORXxTSU5HTEVTVEVQIikpDQorCQkJCQkJICAiU0lOR0xFTElO RXxTSU5HTEVTVEVQfFNIT1dfQUxMX1JFU1VMVFMiKSkNCiAJCQlDT01QTEVU RV9XSVRIX0NTKCJvbiIsICJvZmYiKTsNCiAJCWVsc2UgaWYgKFRhaWxNYXRj aGVzQ1MoIkNPTVBfS0VZV09SRF9DQVNFIikpDQogCQkJQ09NUExFVEVfV0lU SF9DUygibG93ZXIiLCAidXBwZXIiLA0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weTIub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9jb3B5Mi5vdXQNCmluZGV4IDc1ZDQxMTllYWEuLjRmYTYz NDM3OTUgMTAwNjQ0DQotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2NvcHkyLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j b3B5Mi5vdXQNCkBAIC00NzUsMTAgKzQ3NSwxMCBAQCBjb3B5IGNoZWNrX2Nv bl90YmwgZnJvbSBzdGRpbjsNCiBOT1RJQ0U6ICBpbnB1dCA9IHsiZjEiOjF9 DQogTk9USUNFOiAgaW5wdXQgPSB7ImYxIjpudWxsfQ0KIGNvcHkgY2hlY2tf Y29uX3RibCBmcm9tIHN0ZGluOw0KLU5PVElDRTogIGlucHV0ID0geyJmMSI6 MH0NCiBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJjaGVja19jb25f dGJsIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJjaGVja19jb25fdGJs X2NoZWNrIg0KIERFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwKS4N CiBDT05URVhUOiAgQ09QWSBjaGVja19jb25fdGJsLCBsaW5lIDE6ICIwIg0K K05PVElDRTogIGlucHV0ID0geyJmMSI6MH0NCiBzZWxlY3QgKiBmcm9tIGNo ZWNrX2Nvbl90Ymw7DQogIGYxIA0KIC0tLS0NCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlkbWwub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb3B5ZG1sLm91dA0KaW5kZXggMWI1MzM5NjJj Ni4uYjVhMjI1NjI4ZiAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weWRtbC5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvY29weWRtbC5vdXQNCkBAIC04NCwxMCArODQsMTAgQEAgZHJv cCBydWxlIHFxcSBvbiBjb3B5ZG1sX3Rlc3Q7DQogY3JlYXRlIGZ1bmN0aW9u IHFxcV90cmlnKCkgcmV0dXJucyB0cmlnZ2VyIGFzICQkDQogYmVnaW4NCiBp ZiB0Z19vcCBpbiAoJ0lOU0VSVCcsICdVUERBVEUnKSB0aGVuDQotICAgIHJh aXNlIG5vdGljZSAnJSAlJywgdGdfb3AsIG5ldy5pZDsNCisgICAgcmFpc2Ug bm90aWNlICclICUgJScsIHRnX3doZW4sIHRnX29wLCBuZXcuaWQ7DQogICAg IHJldHVybiBuZXc7DQogZWxzZQ0KLSAgICByYWlzZSBub3RpY2UgJyUgJScs IHRnX29wLCBvbGQuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAlICUnLCB0 Z193aGVuLCB0Z19vcCwgb2xkLmlkOw0KICAgICByZXR1cm4gb2xkOw0KIGVu ZCBpZjsNCiBlbmQNCkBAIC05NywxNiArOTcsMTYgQEAgY3JlYXRlIHRyaWdn ZXIgcXFxYmVmIGJlZm9yZSBpbnNlcnQgb3IgdXBkYXRlIG9yIGRlbGV0ZSBv biBjb3B5ZG1sX3Rlc3QNCiBjcmVhdGUgdHJpZ2dlciBxcXFhZiBhZnRlciBp bnNlcnQgb3IgdXBkYXRlIG9yIGRlbGV0ZSBvbiBjb3B5ZG1sX3Rlc3QNCiAg ICAgZm9yIGVhY2ggcm93IGV4ZWN1dGUgcHJvY2VkdXJlIHFxcV90cmlnKCk7 DQogY29weSAoaW5zZXJ0IGludG8gY29weWRtbF90ZXN0ICh0KSB2YWx1ZXMg KCdmJykgcmV0dXJuaW5nIGlkKSB0byBzdGRvdXQ7DQotTk9USUNFOiAgSU5T RVJUIDgNCitOT1RJQ0U6ICBCRUZPUkUgSU5TRVJUIDgNCiA4DQotTk9USUNF OiAgSU5TRVJUIDgNCitOT1RJQ0U6ICBBRlRFUiBJTlNFUlQgOA0KIGNvcHkg KHVwZGF0ZSBjb3B5ZG1sX3Rlc3Qgc2V0IHQgPSAnZycgd2hlcmUgdCA9ICdm JyByZXR1cm5pbmcgaWQpIHRvIHN0ZG91dDsNCi1OT1RJQ0U6ICBVUERBVEUg OA0KK05PVElDRTogIEJFRk9SRSBVUERBVEUgOA0KIDgNCi1OT1RJQ0U6ICBV UERBVEUgOA0KK05PVElDRTogIEFGVEVSIFVQREFURSA4DQogY29weSAoZGVs ZXRlIGZyb20gY29weWRtbF90ZXN0IHdoZXJlIHQgPSAnZycgcmV0dXJuaW5n IGlkKSB0byBzdGRvdXQ7DQotTk9USUNFOiAgREVMRVRFIDgNCitOT1RJQ0U6 ICBCRUZPUkUgREVMRVRFIDgNCiA4DQotTk9USUNFOiAgREVMRVRFIDgNCitO T1RJQ0U6ICBBRlRFUiBERUxFVEUgOA0KIGRyb3AgdGFibGUgY29weWRtbF90 ZXN0Ow0KIGRyb3AgZnVuY3Rpb24gcXFxX3RyaWcoKTsNCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KaW5kZXggMzU4NTZiZmZk ZC4uYmNhNWJmMmZlNyAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQNCkBAIC00NzI5LDMgKzQ3MjksODkgQEAgZHJvcCBz Y2hlbWEgdGVzdHBhcnQ7DQogc2V0IHNlYXJjaF9wYXRoIHRvIGRlZmF1bHQ7 DQogc2V0IHJvbGUgdG8gZGVmYXVsdDsNCiBkcm9wIHJvbGUgdGVzdHJvbGVf cGFydGl0aW9uaW5nOw0KKy0tDQorLS0gY29tYmluZWQgcXVlcmllcyAmIFNI T1dfQUxMX1JFU1VMVFMgb3B0aW9uDQorLS0NCitcZWNobyAnIyBTSE9XX0FM TF9SRVNVTFRTIHRlc3RzJw0KKyMgU0hPV19BTExfUkVTVUxUUyB0ZXN0cw0K K0NSRUFURSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xF QU4gQVMgJCQNCisgIEJFR0lOIFJBSVNFIE5PVElDRSAnd2FybiAlJywgbXNn IDsgUkVUVVJOIFRSVUUgOyBFTkQNCiskJCBMQU5HVUFHRSBwbHBnc3FsOw0K K1xzZXQgU0hPV19BTExfUkVTVUxUUyBvbg0KKy0tIHNob3cgYm90aA0KK1NF TEVDVCAxIEFTIG9uZSBcOyBTRUxFQ1Qgd2FybignMS41JykgXDsgU0VMRUNU IDIgQVMgdHdvIDsNCisgb25lIA0KKy0tLS0tDQorICAgMQ0KKygxIHJvdykN CisNCitOT1RJQ0U6ICB3YXJuIDEuNQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBm dW5jdGlvbiB3YXJuKHRleHQpIGxpbmUgMiBhdCBSQUlTRQ0KKyB3YXJuIA0K Ky0tLS0tLQ0KKyB0DQorKDEgcm93KQ0KKw0KKyB0d28gDQorLS0tLS0NCisg ICAyDQorKDEgcm93KQ0KKw0KKy0tIFxnc2V0IGFwcGxpZXMgdG8gbGFzdCBx dWVyeSBvbmx5DQorU0VMRUNUIDMgQVMgdGhyZWUgXDsgU0VMRUNUIHdhcm4o JzMuNScpIFw7IFNFTEVDVCA0IEFTIGZvdXIgXGdzZXQNCisgdGhyZWUgDQor LS0tLS0tLQ0KKyAgICAgMw0KKygxIHJvdykNCisNCitOT1RJQ0U6ICB3YXJu IDMuNQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJuKHRleHQp IGxpbmUgMiBhdCBSQUlTRQ0KKyB3YXJuIA0KKy0tLS0tLQ0KKyB0DQorKDEg cm93KQ0KKw0KK1xlY2hvIDp0aHJlZSA6Zm91cg0KKzp0aHJlZSA0DQorLS0g c3ludGF4IGVycm9yIHN0b3BzIGFsbCBwcm9jZXNzaW5nDQorU0VMRUNUIDUg XDsgU0VMRUNUIDYgKyBcOyBTRUxFQ1Qgd2FybignNi41JykgXDsgU0VMRUNU IDcgOw0KK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIjsiDQor TElORSAxOiBTRUxFQ1QgNSA7IFNFTEVDVCA2ICsgOyBTRUxFQ1Qgd2Fybign Ni41JykgOyBTRUxFQ1QgNyA7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXg0KKy0tIHdpdGggYWJvcnRlZCB0cmFuc2FjdGlvbiwgc3RvcCBv biBmaXJzdCBlcnJvcg0KK0JFR0lOIFw7IFNFTEVDVCA4IEFTIGVpZ2h0IFw7 IFNFTEVDVCA5LzAgQVMgbmluZSBcOyBST0xMQkFDSyBcOyBTRUxFQ1QgMTAg QVMgdGVuIDsNCisgZWlnaHQgDQorLS0tLS0tLQ0KKyAgICAgOA0KKygxIHJv dykNCisNCitFUlJPUjogIGRpdmlzaW9uIGJ5IHplcm8NCistLSBjbG9zZSBw cmV2aW91c2x5IGFib3J0ZWQgdHJhbnNhY3Rpb24NCitST0xMQkFDSzsNCist LSBtaXNjIFNRTCBjb21tYW5kcw0KKy0tIChub24gU0VMRUNUIG91dHB1dCBp cyBzZW50IHRvIHN0ZGVyciwgdGh1cyBpcyBub3Qgc2hvd24gaW4gZXhwZWN0 ZWQgcmVzdWx0cykNCitTRUxFQ1QgJ29rJyBBUyAiYmVnaW4iIFw7DQorQ1JF QVRFIFRBQkxFIHBzcWxfY29taWNzKHMgVEVYVCkgXDsNCitJTlNFUlQgSU5U TyBwc3FsX2NvbWljcyBWQUxVRVMgKCdDYWx2aW4nKSwgKCdob2JiZXMnKSBc Ow0KK0NPUFkgcHNxbF9jb21pY3MgRlJPTSBTVERJTiBcOw0KK1VQREFURSBw c3FsX2NvbWljcyBTRVQgcyA9ICdIb2JiZXMnIFdIRVJFIHMgPSAnaG9iYmVz JyBcOw0KK0RFTEVURSBGUk9NIHBzcWxfY29taWNzIFdIRVJFIHMgPSAnTW9l JyBcOw0KK0NPUFkgcHNxbF9jb21pY3MgVE8gU1RET1VUIFw7DQorVFJVTkNB VEUgcHNxbF9jb21pY3MgXDsNCitEUk9QIFRBQkxFIHBzcWxfY29taWNzIFw7 DQorU0VMRUNUICdvaycgQVMgImRvbmUiIDsNCisgYmVnaW4gDQorLS0tLS0t LQ0KKyBvaw0KKygxIHJvdykNCisNCitDYWx2aW4NCitTdXNpZQ0KK0hvYmJl cw0KKyBkb25lIA0KKy0tLS0tLQ0KKyBvaw0KKygxIHJvdykNCisNCitcc2V0 IFNIT1dfQUxMX1JFU1VMVFMgb2ZmDQorRFJPUCBGVU5DVElPTiB3YXJuKFRF WFQpOw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlk bWwuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29weWRtbC5zcWwNCmlu ZGV4IDlhMjlmOWM5YWMuLjQ1NzgzNDIyNTMgMTAwNjQ0DQotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jb3B5ZG1sLnNxbA0KKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvY29weWRtbC5zcWwNCkBAIC03MCwxMCArNzAsMTAgQEAg ZHJvcCBydWxlIHFxcSBvbiBjb3B5ZG1sX3Rlc3Q7DQogY3JlYXRlIGZ1bmN0 aW9uIHFxcV90cmlnKCkgcmV0dXJucyB0cmlnZ2VyIGFzICQkDQogYmVnaW4N CiBpZiB0Z19vcCBpbiAoJ0lOU0VSVCcsICdVUERBVEUnKSB0aGVuDQotICAg IHJhaXNlIG5vdGljZSAnJSAlJywgdGdfb3AsIG5ldy5pZDsNCisgICAgcmFp c2Ugbm90aWNlICclICUgJScsIHRnX3doZW4sIHRnX29wLCBuZXcuaWQ7DQog ICAgIHJldHVybiBuZXc7DQogZWxzZQ0KLSAgICByYWlzZSBub3RpY2UgJyUg JScsIHRnX29wLCBvbGQuaWQ7DQorICAgIHJhaXNlIG5vdGljZSAnJSAlICUn LCB0Z193aGVuLCB0Z19vcCwgb2xkLmlkOw0KICAgICByZXR1cm4gb2xkOw0K IGVuZCBpZjsNCiBlbmQNCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3Fs DQppbmRleCA3OGY0YjVkN2Q1Li4wM2EzNzhkZTNkIDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvcHNxbC5zcWwNCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQpAQCAtMTExNSwzICsxMTE1LDQwIEBA IHNldCBzZWFyY2hfcGF0aCB0byBkZWZhdWx0Ow0KIA0KIHNldCByb2xlIHRv IGRlZmF1bHQ7DQogZHJvcCByb2xlIHRlc3Ryb2xlX3BhcnRpdGlvbmluZzsN CisNCistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMgJiBTSE9XX0FMTF9SRVNV TFRTIG9wdGlvbg0KKy0tDQorXGVjaG8gJyMgU0hPV19BTExfUkVTVUxUUyB0 ZXN0cycNCitDUkVBVEUgRlVOQ1RJT04gd2Fybihtc2cgVEVYVCkgUkVUVVJO UyBCT09MRUFOIEFTICQkDQorICBCRUdJTiBSQUlTRSBOT1RJQ0UgJ3dhcm4g JScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQgTEFOR1VBR0UgcGxw Z3NxbDsNCitcc2V0IFNIT1dfQUxMX1JFU1VMVFMgb24NCistLSBzaG93IGJv dGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7 IFNFTEVDVCAyIEFTIHR3byA7DQorLS0gXGdzZXQgYXBwbGllcyB0byBsYXN0 IHF1ZXJ5IG9ubHkNCitTRUxFQ1QgMyBBUyB0aHJlZSBcOyBTRUxFQ1Qgd2Fy bignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBcZ3NldA0KK1xlY2hvIDp0 aHJlZSA6Zm91cg0KKy0tIHN5bnRheCBlcnJvciBzdG9wcyBhbGwgcHJvY2Vz c2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsgU0VMRUNUIHdhcm4o JzYuNScpIFw7IFNFTEVDVCA3IDsNCistLSB3aXRoIGFib3J0ZWQgdHJhbnNh Y3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitCRUdJTiBcOyBTRUxFQ1Qg OCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5pbmUgXDsgUk9MTEJBQ0sg XDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorLS0gY2xvc2UgcHJldmlvdXNseSBh Ym9ydGVkIHRyYW5zYWN0aW9uDQorUk9MTEJBQ0s7DQorLS0gbWlzYyBTUUwg Y29tbWFuZHMNCistLSAobm9uIFNFTEVDVCBvdXRwdXQgaXMgc2VudCB0byBz dGRlcnIsIHRodXMgaXMgbm90IHNob3duIGluIGV4cGVjdGVkIHJlc3VsdHMp DQorU0VMRUNUICdvaycgQVMgImJlZ2luIiBcOw0KK0NSRUFURSBUQUJMRSBw c3FsX2NvbWljcyhzIFRFWFQpIFw7DQorSU5TRVJUIElOVE8gcHNxbF9jb21p Y3MgVkFMVUVTICgnQ2FsdmluJyksICgnaG9iYmVzJykgXDsNCitDT1BZIHBz cWxfY29taWNzIEZST00gU1RESU4gXDsNCitVUERBVEUgcHNxbF9jb21pY3Mg U0VUIHMgPSAnSG9iYmVzJyBXSEVSRSBzID0gJ2hvYmJlcycgXDsNCitERUxF VEUgRlJPTSBwc3FsX2NvbWljcyBXSEVSRSBzID0gJ01vZScgXDsNCitDT1BZ IHBzcWxfY29taWNzIFRPIFNURE9VVCBcOw0KK1RSVU5DQVRFIHBzcWxfY29t aWNzIFw7DQorRFJPUCBUQUJMRSBwc3FsX2NvbWljcyBcOw0KK1NFTEVDVCAn b2snIEFTICJkb25lIiA7DQorTW9lDQorU3VzaWUNCitcLg0KK1xzZXQgU0hP V19BTExfUkVTVUxUUyBvZmYNCitEUk9QIEZVTkNUSU9OIHdhcm4oVEVYVCk7 DQo= --8323329-1078240768-1558019749=:7696--