Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ls091-0006Fj-Lw for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jun 2021 09:41:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ls08z-00031D-9d for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jun 2021 09:41:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ls08y-000315-U9 for pgsql-hackers@lists.postgresql.org; Sat, 12 Jun 2021 09:41:33 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ls08t-00006N-RH for pgsql-hackers@lists.postgresql.org; Sat, 12 Jun 2021 09:41:32 +0000 Received: from pseudo (185.141.6.84.rev.sfr.net [84.6.141.185]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id BAF93C00B9; Sat, 12 Jun 2021 11:43:18 +0200 (CEST) Date: Sat, 12 Jun 2021 11:41:24 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@pseudo To: Peter Eisentraut cc: Tom Lane , Michael Paquier , Alvaro Herrera , "Bossart, Nathan" , Julien Rouhaud , "shiy.fnst@fujitsu.com" , "pgsql-hackers@lists.postgresql.org" Subject: Re: psql - add SHOW_ALL_RESULTS option In-Reply-To: <451a2111-3757-c511-9413-8f8af531a167@enterprisedb.com> Message-ID: References: <69C0B369-570C-4524-8EE4-BCCACECB6BEE@amazon.com> <20210412193301.GA11204@alvherre.pgsql> <3738387.1618451507@sss.pgh.pa.us> <451a2111-3757-c511-9413-8f8af531a167@enterprisedb.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-1226747121-1623490885=:4105466" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: 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. --2056645051-1226747121-1623490885=:4105466 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8BIT Hello Peter, >> My overly naive trust in non regression test to catch any issues has been >> largely proven wrong. Three key features do not have a single tests. Sigh. >> >> I'll have some time to look at it over next week-end, but not before. > > I have reverted the patch and moved the commit fest entry to CF 2021-07. Attached a v7 which fixes known issues. I've tried to simplify the code and added a few comments. I've moved query cancellation reset in one place in SendQuery. I've switched to an array of buffers for notices, as suggested by Tom. The patch includes basic AUTOCOMMIT and ON_ERROR_ROLLBACK tests, which did not exist before, at all. I tried cancelling queries manually, but did not develop a test for this, mostly because last time I submitted a TAP test about psql to raise its coverage it was rejected. As usual, what is not tested does not work… -- Fabien. --2056645051-1226747121-1623490885=:4105466 Content-Type: text/x-diff; name=psql-show-all-results-7.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-show-all-results-7.patch ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVj dGVkL3BnX3N0YXRfc3RhdGVtZW50cy5vdXQgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9leHBlY3RlZC9wZ19zdGF0X3N0YXRlbWVudHMub3V0DQpp bmRleCA0MGI1MTA5YjU1Li5jY2NlNzJmYjg1IDEwMDY0NA0KLS0tIGEvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGdfc3RhdF9zdGF0 ZW1lbnRzLm91dA0KKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMv ZXhwZWN0ZWQvcGdfc3RhdF9zdGF0ZW1lbnRzLm91dA0KQEAgLTUwLDggKzUw LDI4IEBAIEJFR0lOIFw7DQogU0VMRUNUIDIuMCBBUyAiZmxvYXQiIFw7DQog U0VMRUNUICd3b3JsZCcgQVMgInRleHQiIFw7DQogQ09NTUlUOw0KKyBmbG9h dCANCistLS0tLS0tDQorICAgMi4wDQorKDEgcm93KQ0KKw0KKyB0ZXh0ICAN CistLS0tLS0tDQorIHdvcmxkDQorKDEgcm93KQ0KKw0KIC0tIGNvbXBvdW5k IHdpdGggZW1wdHkgc3RhdGVtZW50cyBhbmQgc3B1cmlvdXMgbGVhZGluZyBz cGFjaW5nDQogXDtcOyAgIFNFTEVDVCAzICsgMyBcO1w7XDsgICBTRUxFQ1Qg JyAnIHx8ICcgIScgXDtcOyAgIFNFTEVDVCAxICsgNCBcOzsNCisgP2NvbHVt bj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgNg0KKygxIHJvdykNCisNCisg P2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICENCisoMSByb3cpDQorDQog ID9jb2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDUNCkBAIC02MSw2 ICs4MSwxMSBAQCBDT01NSVQ7DQogU0VMRUNUIDEgKyAxICsgMSBBUyAiYWRk IiBcZ3NldA0KIFNFTEVDVCA6YWRkICsgMSArIDEgQVMgImFkZCIgXDsNCiBT RUxFQ1QgOmFkZCArIDEgKyAxIEFTICJhZGQiIFxnc2V0DQorIGFkZCANCist LS0tLQ0KKyAgIDUNCisoMSByb3cpDQorDQogLS0gc2V0IG9wZXJhdG9yDQog U0VMRUNUIDEgQVMgaSBVTklPTiBTRUxFQ1QgMiBPUkRFUiBCWSBpOw0KICBp IA0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbA0KaW5kZXggYThk ZmM0MWU0MC4uMWRiZmI2YTUyYSAxMDA2NDQNCi0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9w c3FsLXJlZi5zZ21sDQpAQCAtMTI3LDE4ICsxMjcsMTEgQEAgZWNobyAnXHgg XFwgU0VMRUNUICogRlJPTSBmb287JyB8IHBzcWwNCiAgICAgICAgY29tbWFu ZHMgaW5jbHVkZWQgaW4gdGhlIHN0cmluZyB0byBkaXZpZGUgaXQgaW50byBt dWx0aXBsZQ0KICAgICAgICB0cmFuc2FjdGlvbnMuICAoU2VlIDx4cmVmIGxp bmtlbmQ9InByb3RvY29sLWZsb3ctbXVsdGktc3RhdGVtZW50Ii8+DQogICAg ICAgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFu ZGxlcyBtdWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgQWxzbywgPGFw cGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPiBvbmx5IHByaW50cyB0aGUN Ci0gICAgICAgcmVzdWx0IG9mIHRoZSBsYXN0IDxhY3JvbnltPlNRTDwvYWNy b255bT4gY29tbWFuZCBpbiB0aGUgc3RyaW5nLg0KLSAgICAgICBUaGlzIGlz IGRpZmZlcmVudCBmcm9tIHRoZSBiZWhhdmlvciB3aGVuIHRoZSBzYW1lIHN0 cmluZyBpcyByZWFkIGZyb20NCi0gICAgICAgYSBmaWxlIG9yIGZlZCB0byA8 YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5w dXQsDQotICAgICAgIGJlY2F1c2UgdGhlbiA8YXBwbGljYXRpb24+cHNxbDwv YXBwbGljYXRpb24+IHNlbmRzDQotICAgICAgIGVhY2ggPGFjcm9ueW0+U1FM PC9hY3JvbnltPiBjb21tYW5kIHNlcGFyYXRlbHkuDQogICAgICAgPC9wYXJh Pg0KICAgICAgIDxwYXJhPg0KLSAgICAgICBCZWNhdXNlIG9mIHRoaXMgYmVo YXZpb3IsIHB1dHRpbmcgbW9yZSB0aGFuIG9uZSBTUUwgY29tbWFuZCBpbiBh DQotICAgICAgIHNpbmdsZSA8b3B0aW9uPi1jPC9vcHRpb24+IHN0cmluZyBv ZnRlbiBoYXMgdW5leHBlY3RlZCByZXN1bHRzLg0KLSAgICAgICBJdCdzIGJl dHRlciB0byB1c2UgcmVwZWF0ZWQgPG9wdGlvbj4tYzwvb3B0aW9uPiBjb21t YW5kcyBvciBmZWVkDQotICAgICAgIG11bHRpcGxlIGNvbW1hbmRzIHRvIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyBzdGFuZGFyZCBpbnB1 dCwNCisgICAgICAgSWYgaGF2aW5nIHNldmVyYWwgY29tbWFuZHMgZXhlY3V0 ZWQgaW4gb25lIHRyYW5zYWN0aW9uIGlzIG5vdCBkZXNpcmVkLCANCisgICAg ICAgdXNlIHJlcGVhdGVkIDxvcHRpb24+LWM8L29wdGlvbj4gY29tbWFuZHMg b3IgZmVlZCBtdWx0aXBsZSBjb21tYW5kcyB0bw0KKyAgICAgICA8YXBwbGlj YXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3Mgc3RhbmRhcmQgaW5wdXQsDQog ICAgICAgIGVpdGhlciB1c2luZyA8YXBwbGljYXRpb24+ZWNobzwvYXBwbGlj YXRpb24+IGFzIGlsbHVzdHJhdGVkIGFib3ZlLCBvcg0KICAgICAgICB2aWEg YSBzaGVsbCBoZXJlLWRvY3VtZW50LCBmb3IgZXhhbXBsZToNCiA8cHJvZ3Jh bWxpc3Rpbmc+DQpAQCAtMzUzMiwxMCArMzUyNSw2IEBAIHNlbGVjdCAxXDsg c2VsZWN0IDJcOyBzZWxlY3QgMzsNCiAgICAgICAgIGNvbW1hbmRzIGluY2x1 ZGVkIGluIHRoZSBzdHJpbmcgdG8gZGl2aWRlIGl0IGludG8gbXVsdGlwbGUN CiAgICAgICAgIHRyYW5zYWN0aW9ucy4gIChTZWUgPHhyZWYgbGlua2VuZD0i cHJvdG9jb2wtZmxvdy1tdWx0aS1zdGF0ZW1lbnQiLz4NCiAgICAgICAgIGZv ciBtb3JlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBzZXJ2ZXIgaGFuZGxlcyBt dWx0aS1xdWVyeSBzdHJpbmdzLikNCi0gICAgICAgIDxhcHBsaWNhdGlvbj5w c3FsPC9hcHBsaWNhdGlvbj4gcHJpbnRzIG9ubHkgdGhlIGxhc3QgcXVlcnkg cmVzdWx0DQotICAgICAgICBpdCByZWNlaXZlcyBmb3IgZWFjaCByZXF1ZXN0 OyBpbiB0aGlzIGV4YW1wbGUsIGFsdGhvdWdoIGFsbA0KLSAgICAgICAgdGhy ZWUgPGNvbW1hbmQ+U0VMRUNUPC9jb21tYW5kPnMgYXJlIGluZGVlZCBleGVj dXRlZCwgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPg0KLSAgICAg ICAgb25seSBwcmludHMgdGhlIDxsaXRlcmFsPjM8L2xpdGVyYWw+Lg0KICAg ICAgICAgPC9wYXJhPg0KICAgICAgICAgPC9saXN0aXRlbT4NCiAgICAgICA8 L3Zhcmxpc3RlbnRyeT4NCkBAIC00MTIyLDYgKzQxMTEsMTggQEAgYmFyDQog ICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICAgPHZhcmxpc3RlbnRy eT4NCisgICAgICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQUxMX1JFU1VMVFM8 L3Zhcm5hbWU+PC90ZXJtPg0KKyAgICAgICAgPGxpc3RpdGVtPg0KKyAgICAg ICAgPHBhcmE+DQorICAgICAgICBXaGVuIHRoaXMgdmFyaWFibGUgaXMgc2V0 IHRvIDxsaXRlcmFsPm9mZjwvbGl0ZXJhbD4sIG9ubHkgdGhlIGxhc3QNCisg ICAgICAgIHJlc3VsdCBvZiBhIGNvbWJpbmVkIHF1ZXJ5ICg8bGl0ZXJhbD5c OzwvbGl0ZXJhbD4pIGlzIHNob3duIGluc3RlYWQgb2YNCisgICAgICAgIGFs bCBvZiB0aGVtLiAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVy YWw+LiAgVGhlIG9mZiBiZWhhdmlvcg0KKyAgICAgICAgaXMgZm9yIGNvbXBh dGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBwc3FsLg0KKyAgICAg ICAgPC9wYXJhPg0KKyAgICAgICAgPC9saXN0aXRlbT4NCisgICAgICA8L3Zh cmxpc3RlbnRyeT4NCisNCisgICAgICAgPHZhcmxpc3RlbnRyeT4NCiAgICAg ICAgIDx0ZXJtPjx2YXJuYW1lPlNIT1dfQ09OVEVYVDwvdmFybmFtZT48L3Rl cm0+DQogICAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgICA8cGFyYT4NCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvY29tbW9uLmMgYi9zcmMvYmluL3Bz cWwvY29tbW9uLmMNCmluZGV4IDlhMDA0OTk1MTAuLjU0YTA5N2E0OTMgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvY29tbW9uLmMNCisrKyBiL3NyYy9i aW4vcHNxbC9jb21tb24uYw0KQEAgLTMzLDYgKzMzLDcgQEAgc3RhdGljIGJv b2wgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICpl bGFwc2VkX21zZWMpOw0KIHN0YXRpYyBib29sIEV4ZWNRdWVyeVVzaW5nQ3Vy c29yKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYyk7 DQogc3RhdGljIGJvb2wgY29tbWFuZF9ub19iZWdpbihjb25zdCBjaGFyICpx dWVyeSk7DQogc3RhdGljIGJvb2wgaXNfc2VsZWN0X2NvbW1hbmQoY29uc3Qg Y2hhciAqcXVlcnkpOw0KK3N0YXRpYyBpbnQgU2VuZFF1ZXJ5QW5kUHJvY2Vz c1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqcGVsYXBzZWRf bXNlYywgYm9vbCBpc193YXRjaCk7DQogDQogDQogLyoNCkBAIC0zNTMsNyAr MzU0LDcgQEAgQ2hlY2tDb25uZWN0aW9uKHZvaWQpDQogICogUmV0dXJucyB0 cnVlIGZvciB2YWxpZCByZXN1bHQsIGZhbHNlIGZvciBlcnJvciBzdGF0ZS4N CiAgKi8NCiBzdGF0aWMgYm9vbA0KLUFjY2VwdFJlc3VsdChjb25zdCBQR3Jl c3VsdCAqcmVzdWx0KQ0KK0FjY2VwdFJlc3VsdChjb25zdCBQR3Jlc3VsdCAq cmVzdWx0LCBib29sIHNob3dfZXJyb3IpDQogew0KIAlib29sCQlPSzsNCiAN CkBAIC0zODQsNyArMzg1LDcgQEAgQWNjZXB0UmVzdWx0KGNvbnN0IFBHcmVz dWx0ICpyZXN1bHQpDQogCQkJCWJyZWFrOw0KIAkJfQ0KIA0KLQlpZiAoIU9L KQ0KKwlpZiAoIU9LICYmIHNob3dfZXJyb3IpDQogCXsNCiAJCWNvbnN0IGNo YXIgKmVycm9yID0gUFFlcnJvck1lc3NhZ2UocHNldC5kYik7DQogDQpAQCAt NDcyLDYgKzQ3MywxOCBAQCBDbGVhck9yU2F2ZVJlc3VsdChQR3Jlc3VsdCAq cmVzdWx0KQ0KIAl9DQogfQ0KIA0KKy8qDQorICogQ29uc3VtZSBhbGwgcmVz dWx0cw0KKyAqLw0KK3N0YXRpYyB2b2lkDQorQ2xlYXJPclNhdmVBbGxSZXN1 bHRzKCkNCit7DQorCVBHcmVzdWx0CSpyZXN1bHQ7DQorDQorCXdoaWxlICgo cmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYikpICE9IE5VTEwpDQorCQlD bGVhck9yU2F2ZVJlc3VsdChyZXN1bHQpOw0KK30NCisNCiANCiAvKg0KICAq IFByaW50IG1pY3JvdGltaW5nIG91dHB1dC4gIEFsd2F5cyBwcmludCByYXcg bWlsbGlzZWNvbmRzOyBpZiB0aGUgaW50ZXJ2YWwNCkBAIC01NzIsNyArNTg1 LDcgQEAgUFNRTGV4ZWMoY29uc3QgY2hhciAqcXVlcnkpDQogDQogCVJlc2V0 Q2FuY2VsQ29ubigpOw0KIA0KLQlpZiAoIUFjY2VwdFJlc3VsdChyZXMpKQ0K KwlpZiAoIUFjY2VwdFJlc3VsdChyZXMsIHRydWUpKQ0KIAl7DQogCQlDbGVh ck9yU2F2ZVJlc3VsdChyZXMpOw0KIAkJcmVzID0gTlVMTDsNCkBAIC01OTQs MTAgKzYwNyw4IEBAIFBTUUxleGVjKGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIGlu dA0KIFBTUUxleGVjV2F0Y2goY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IHBy aW50UXVlcnlPcHQgKm9wdCkNCiB7DQotCVBHcmVzdWx0ICAgKnJlczsNCiAJ ZG91YmxlCQllbGFwc2VkX21zZWMgPSAwOw0KLQlpbnN0cl90aW1lCWJlZm9y ZTsNCi0JaW5zdHJfdGltZQlhZnRlcjsNCisJaW50CQkJcmVzOw0KIA0KIAlp ZiAoIXBzZXQuZGIpDQogCXsNCkBAIC02MDYsNzUgKzYxNywxNiBAQCBQU1FM ZXhlY1dhdGNoKGNvbnN0IGNoYXIgKnF1ZXJ5LCBjb25zdCBwcmludFF1ZXJ5 T3B0ICpvcHQpDQogCX0NCiANCiAJU2V0Q2FuY2VsQ29ubihwc2V0LmRiKTsN Ci0NCi0JaWYgKHBzZXQudGltaW5nKQ0KLQkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChiZWZvcmUpOw0KLQ0KLQlyZXMgPSBQUWV4ZWMocHNldC5kYiwgcXVl cnkpOw0KLQ0KKwlyZXMgPSBTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhx dWVyeSwgJmVsYXBzZWRfbXNlYywgdHJ1ZSk7DQogCVJlc2V0Q2FuY2VsQ29u bigpOw0KIA0KLQlpZiAoIUFjY2VwdFJlc3VsdChyZXMpKQ0KLQl7DQotCQlD bGVhck9yU2F2ZVJlc3VsdChyZXMpOw0KLQkJcmV0dXJuIDA7DQotCX0NCi0N Ci0JaWYgKHBzZXQudGltaW5nKQ0KLQl7DQotCQlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKGFmdGVyKTsNCi0JCUlOU1RSX1RJTUVfU1VCVFJBQ1QoYWZ0ZXIs IGJlZm9yZSk7DQotCQllbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dFVF9N SUxMSVNFQyhhZnRlcik7DQotCX0NCi0NCi0JLyoNCi0JICogSWYgU0lHSU5U IGlzIHNlbnQgd2hpbGUgdGhlIHF1ZXJ5IGlzIHByb2Nlc3NpbmcsIHRoZSBp bnRlcnJ1cHQgd2lsbCBiZQ0KLQkgKiBjb25zdW1lZC4gIFRoZSB1c2VyJ3Mg aW50ZW50aW9uLCB0aG91Z2gsIGlzIHRvIGNhbmNlbCB0aGUgZW50aXJlIHdh dGNoDQotCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNlbnQgY2FuY2VsbGF0 aW9uIHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNlLg0KLQkgKi8NCi0J aWYgKGNhbmNlbF9wcmVzc2VkKQ0KLQl7DQotCQlQUWNsZWFyKHJlcyk7DQot CQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVz KHJlcykpDQotCXsNCi0JCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KLQkJCXBy aW50UXVlcnkocmVzLCBvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNl dC5sb2dmaWxlKTsNCi0JCQlicmVhazsNCi0NCi0JCWNhc2UgUEdSRVNfQ09N TUFORF9PSzoNCi0JCQlmcHJpbnRmKHBzZXQucXVlcnlGb3V0LCAiJXNcbiVz XG5cbiIsIG9wdC0+dGl0bGUsIFBRY21kU3RhdHVzKHJlcykpOw0KLQkJCWJy ZWFrOw0KLQ0KLQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToNCi0JCQlwZ19s b2dfZXJyb3IoIlxcd2F0Y2ggY2Fubm90IGJlIHVzZWQgd2l0aCBhbiBlbXB0 eSBxdWVyeSIpOw0KLQkJCVBRY2xlYXIocmVzKTsNCi0JCQlyZXR1cm4gLTE7 DQotDQotCQljYXNlIFBHUkVTX0NPUFlfT1VUOg0KLQkJY2FzZSBQR1JFU19D T1BZX0lOOg0KLQkJY2FzZSBQR1JFU19DT1BZX0JPVEg6DQotCQkJcGdfbG9n X2Vycm9yKCJcXHdhdGNoIGNhbm5vdCBiZSB1c2VkIHdpdGggQ09QWSIpOw0K LQkJCVBRY2xlYXIocmVzKTsNCi0JCQlyZXR1cm4gLTE7DQotDQotCQlkZWZh dWx0Og0KLQkJCXBnX2xvZ19lcnJvcigidW5leHBlY3RlZCByZXN1bHQgc3Rh dHVzIGZvciBcXHdhdGNoIik7DQotCQkJUFFjbGVhcihyZXMpOw0KLQkJCXJl dHVybiAtMTsNCi0JfQ0KLQ0KLQlQUWNsZWFyKHJlcyk7DQotDQogCWZmbHVz aChwc2V0LnF1ZXJ5Rm91dCk7DQogDQogCS8qIFBvc3NpYmxlIG1pY3JvdGlt aW5nIG91dHB1dCAqLw0KIAlpZiAocHNldC50aW1pbmcpDQogCQlQcmludFRp bWluZyhlbGFwc2VkX21zZWMpOw0KIA0KLQlyZXR1cm4gMTsNCisJcmV0dXJu IHJlczsNCiB9DQogDQogDQpAQCAtODg3LDE5NyArODM5LDExNCBAQCBsb29w X2V4aXQ6DQogDQogDQogLyoNCi0gKiBQcm9jZXNzUmVzdWx0OiB1dGlsaXR5 IGZ1bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seQ0KLSAqDQot ICogV2hlbiBvdXIgY29tbWFuZCBzdHJpbmcgY29udGFpbmVkIGEgQ09QWSBG Uk9NIFNURElOIG9yIENPUFkgVE8gU1RET1VULA0KLSAqIFBRZXhlYygpIGhh cyBzdG9wcGVkIGF0IHRoZSBQR3Jlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhl IGZpcnN0IHN1Y2gNCi0gKiBjb21tYW5kLiAgSW4gdGhhdCBldmVudCwgd2Un bGwgbWFyc2hhbCBkYXRhIGZvciB0aGUgQ09QWSBhbmQgdGhlbiBjeWNsZQ0K LSAqIHRocm91Z2ggYW55IHN1YnNlcXVlbnQgUEdyZXN1bHQgb2JqZWN0cy4N Ci0gKg0KLSAqIFdoZW4gdGhlIGNvbW1hbmQgc3RyaW5nIGNvbnRhaW5lZCBu byBzdWNoIENPUFkgY29tbWFuZCwgdGhpcyBmdW5jdGlvbg0KLSAqIGRlZ2Vu ZXJhdGVzIHRvIGFuIEFjY2VwdFJlc3VsdCgpIGNhbGwuDQotICoNCi0gKiBD aGFuZ2VzIGl0cyBhcmd1bWVudCB0byBwb2ludCB0byB0aGUgbGFzdCBQR3Jl c3VsdCBvZiB0aGUgY29tbWFuZCBzdHJpbmcsDQotICogb3IgTlVMTCBpZiB0 aGF0IHJlc3VsdCB3YXMgZm9yIGEgQ09QWSBUTyBTVERPVVQuICAoUmV0dXJu aW5nIE5VTEwgcHJldmVudHMNCi0gKiB0aGUgY29tbWFuZCBzdGF0dXMgZnJv bSBiZWluZyBwcmludGVkLCB3aGljaCB3ZSB3YW50IGluIHRoYXQgY2FzZSBz byB0aGF0DQotICogdGhlIHN0YXR1cyBsaW5lIGRvZXNuJ3QgZ2V0IHRha2Vu IGFzIHBhcnQgb2YgdGhlIENPUFkgZGF0YS4pDQotICoNCi0gKiBSZXR1cm5z IHRydWUgb24gY29tcGxldGUgc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLiAg UG9zc2libGUgZmFpbHVyZSBtb2Rlcw0KLSAqIGluY2x1ZGUgcHVyZWx5IGNs aWVudC1zaWRlIHByb2JsZW1zOyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3Rh dHVzIGZvciB0aGUNCi0gKiBzZXJ2ZXItc2lkZSBvcGluaW9uLg0KKyAqIE1h cnNoYWwgdGhlIENPUFkgZGF0YS4gIEVpdGhlciBzdWJyb3V0aW5lIHdpbGwg Z2V0IHRoZQ0KKyAqIGNvbm5lY3Rpb24gb3V0IG9mIGl0cyBDT1BZIHN0YXRl LCB0aGVuIGNhbGwgUFFyZXN1bHRTdGF0dXMoKQ0KKyAqIG9uY2UgYW5kIHJl cG9ydCBhbnkgZXJyb3IuIFJldHVybiB3aGV0aGVyIGFsbCB3YXMgb2suDQor ICoNCisgKiBGb3IgQ09QWSBPVVQsIGRpcmVjdCB0aGUgb3V0cHV0IHRvIHBz ZXQuY29weVN0cmVhbSBpZiBpdCdzIHNldCwNCisgKiBvdGhlcndpc2UgdG8g cHNldC5nZm5hbWUgaWYgaXQncyBzZXQsIG90aGVyd2lzZSB0byBxdWVyeUZv dXQuDQorICogRm9yIENPUFkgSU4sIHVzZSBwc2V0LmNvcHlTdHJlYW0gYXMg ZGF0YSBzb3VyY2UgaWYgaXQncyBzZXQsDQorICogb3RoZXJ3aXNlIGN1cl9j bWRfc291cmNlLg0KKyAqDQorICogVXBkYXRlIHJlc3VsdCBpZiBmdXJ0aGVy IHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5LCBvciBOVUxMIG90aGVyd2lzZS4N CisgKiBSZXR1cm4gYSByZXN1bHQgd2hlbiBxdWVyeUZvdXQgY2FuIHNhZmVs eSBvdXRwdXQgYSByZXN1bHQgc3RhdHVzOg0KKyAqIG9uIENPUFkgSU4sIG9y IG9uIENPUFkgT1VUIGlmIHdyaXR0ZW4gdG8gc29tZXRoaW5nIG90aGVyIHRo YW4gcHNldC5xdWVyeUZvdXQuDQorICogUmV0dXJuaW5nIE5VTEwgcHJldmVu dHMgdGhlIGNvbW1hbmQgc3RhdHVzIGZyb20gYmVpbmcgcHJpbnRlZCwgd2hp Y2gNCisgKiB3ZSB3YW50IGlmIHRoZSBzdGF0dXMgbGluZSBkb2Vzbid0IGdl dCB0YWtlbiBhcyBwYXJ0IG9mIHRoZSBDT1BZIGRhdGEuDQogICovDQogc3Rh dGljIGJvb2wNCi1Qcm9jZXNzUmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0cykN CitIYW5kbGVDb3B5UmVzdWx0KFBHcmVzdWx0ICoqcmVzdWx0KQ0KIHsNCi0J Ym9vbAkJc3VjY2VzcyA9IHRydWU7DQotCWJvb2wJCWZpcnN0X2N5Y2xlID0g dHJ1ZTsNCisJYm9vbAkJc3VjY2VzczsNCisJRklMRQkgICAqY29weXN0cmVh bTsNCisJUEdyZXN1bHQgICAqY29weV9yZXN1bHQ7DQorCUV4ZWNTdGF0dXNU eXBlIHJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cygqcmVzdWx0KTsN CiANCi0JZm9yICg7OykNCisJQXNzZXJ0KHJlc3VsdF9zdGF0dXMgPT0gUEdS RVNfQ09QWV9PVVQgfHwNCisJCSAgIHJlc3VsdF9zdGF0dXMgPT0gUEdSRVNf Q09QWV9JTik7DQorDQorCVNldENhbmNlbENvbm4ocHNldC5kYik7DQorDQor CWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUKQ0KIAl7DQot CQlFeGVjU3RhdHVzVHlwZSByZXN1bHRfc3RhdHVzOw0KLQkJYm9vbAkJaXNf Y29weTsNCi0JCVBHcmVzdWx0ICAgKm5leHRfcmVzdWx0Ow0KKwkJYm9vbAkJ bmVlZF9jbG9zZSA9IGZhbHNlOw0KKwkJYm9vbAkJaXNfcGlwZSA9IGZhbHNl Ow0KIA0KLQkJaWYgKCFBY2NlcHRSZXN1bHQoKnJlc3VsdHMpKQ0KKwkJaWYg KHBzZXQuY29weVN0cmVhbSkNCiAJCXsNCi0JCQkvKg0KLQkJCSAqIEZhaWx1 cmUgYXQgdGhpcyBwb2ludCBpcyBhbHdheXMgYSBzZXJ2ZXItc2lkZSBmYWls dXJlIG9yIGENCi0JCQkgKiBmYWlsdXJlIHRvIHN1Ym1pdCB0aGUgY29tbWFu ZCBzdHJpbmcuICBFaXRoZXIgd2F5LCB3ZSdyZQ0KLQkJCSAqIGZpbmlzaGVk IHdpdGggdGhpcyBjb21tYW5kIHN0cmluZy4NCi0JCQkgKi8NCi0JCQlzdWNj ZXNzID0gZmFsc2U7DQotCQkJYnJlYWs7DQorCQkJLyogaW52b2tlZCBieSBc Y29weSAqLw0KKwkJCWNvcHlzdHJlYW0gPSBwc2V0LmNvcHlTdHJlYW07DQog CQl9DQotDQotCQlyZXN1bHRfc3RhdHVzID0gUFFyZXN1bHRTdGF0dXMoKnJl c3VsdHMpOw0KLQkJc3dpdGNoIChyZXN1bHRfc3RhdHVzKQ0KKwkJZWxzZSBp ZiAocHNldC5nZm5hbWUpDQogCQl7DQotCQkJY2FzZSBQR1JFU19FTVBUWV9R VUVSWToNCi0JCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6DQotCQkJY2FzZSBQ R1JFU19UVVBMRVNfT0s6DQotCQkJCWlzX2NvcHkgPSBmYWxzZTsNCi0JCQkJ YnJlYWs7DQotDQotCQkJY2FzZSBQR1JFU19DT1BZX09VVDoNCi0JCQljYXNl IFBHUkVTX0NPUFlfSU46DQotCQkJCWlzX2NvcHkgPSB0cnVlOw0KLQkJCQli cmVhazsNCi0NCi0JCQlkZWZhdWx0Og0KLQkJCQkvKiBBY2NlcHRSZXN1bHQo KSBzaG91bGQgaGF2ZSBjYXVnaHQgYW55dGhpbmcgZWxzZS4gKi8NCi0JCQkJ aXNfY29weSA9IGZhbHNlOw0KLQkJCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0 ZWQgUFFyZXN1bHRTdGF0dXM6ICVkIiwgcmVzdWx0X3N0YXR1cyk7DQotCQkJ CWJyZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKGlzX2NvcHkpDQotCQl7DQotCQkJ LyoNCi0JCQkgKiBNYXJzaGFsIHRoZSBDT1BZIGRhdGEuICBFaXRoZXIgc3Vi cm91dGluZSB3aWxsIGdldCB0aGUNCi0JCQkgKiBjb25uZWN0aW9uIG91dCBv ZiBpdHMgQ09QWSBzdGF0ZSwgdGhlbiBjYWxsIFBRcmVzdWx0U3RhdHVzKCkN Ci0JCQkgKiBvbmNlIGFuZCByZXBvcnQgYW55IGVycm9yLg0KLQkJCSAqDQot CQkJICogRm9yIENPUFkgT1VULCBkaXJlY3QgdGhlIG91dHB1dCB0byBwc2V0 LmNvcHlTdHJlYW0gaWYgaXQncyBzZXQsDQotCQkJICogb3RoZXJ3aXNlIHRv IHBzZXQuZ2ZuYW1lIGlmIGl0J3Mgc2V0LCBvdGhlcndpc2UgdG8gcXVlcnlG b3V0Lg0KLQkJCSAqIEZvciBDT1BZIElOLCB1c2UgcHNldC5jb3B5U3RyZWFt IGFzIGRhdGEgc291cmNlIGlmIGl0J3Mgc2V0LA0KLQkJCSAqIG90aGVyd2lz ZSBjdXJfY21kX3NvdXJjZS4NCi0JCQkgKi8NCi0JCQlGSUxFCSAgICpjb3B5 c3RyZWFtOw0KLQkJCVBHcmVzdWx0ICAgKmNvcHlfcmVzdWx0Ow0KLQ0KLQkJ CVNldENhbmNlbENvbm4ocHNldC5kYik7DQotCQkJaWYgKHJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQorCQkJLyogaW52b2tlZCBieSBcZyAq Lw0KKwkJCWlmIChvcGVuUXVlcnlPdXRwdXRGaWxlKHBzZXQuZ2ZuYW1lLA0K KwkJCQkJCQkJCSZjb3B5c3RyZWFtLCAmaXNfcGlwZSkpDQogCQkJew0KLQkJ CQlib29sCQluZWVkX2Nsb3NlID0gZmFsc2U7DQotCQkJCWJvb2wJCWlzX3Bp cGUgPSBmYWxzZTsNCi0NCi0JCQkJaWYgKHBzZXQuY29weVN0cmVhbSkNCi0J CQkJew0KLQkJCQkJLyogaW52b2tlZCBieSBcY29weSAqLw0KLQkJCQkJY29w eXN0cmVhbSA9IHBzZXQuY29weVN0cmVhbTsNCi0JCQkJfQ0KLQkJCQllbHNl IGlmIChwc2V0LmdmbmFtZSkNCi0JCQkJew0KLQkJCQkJLyogaW52b2tlZCBi eSBcZyAqLw0KLQkJCQkJaWYgKG9wZW5RdWVyeU91dHB1dEZpbGUocHNldC5n Zm5hbWUsDQotCQkJCQkJCQkJCQkmY29weXN0cmVhbSwgJmlzX3BpcGUpKQ0K LQkJCQkJew0KLQkJCQkJCW5lZWRfY2xvc2UgPSB0cnVlOw0KLQkJCQkJCWlm IChpc19waXBlKQ0KLQkJCQkJCQlkaXNhYmxlX3NpZ3BpcGVfdHJhcCgpOw0K LQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJCWNvcHlzdHJlYW0gPSBOVUxM OwkvKiBkaXNjYXJkIENPUFkgZGF0YSBlbnRpcmVseSAqLw0KLQkJCQl9DQot CQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJLyogZmFsbCBiYWNrIHRvIHRoZSBn ZW5lcmljIHF1ZXJ5IG91dHB1dCBzdHJlYW0gKi8NCi0JCQkJCWNvcHlzdHJl YW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCi0JCQkJfQ0KLQ0KLQkJCQlzdWNjZXNz ID0gaGFuZGxlQ29weU91dChwc2V0LmRiLA0KLQkJCQkJCQkJCQljb3B5c3Ry ZWFtLA0KLQkJCQkJCQkJCQkmY29weV9yZXN1bHQpDQotCQkJCQkmJiBzdWNj ZXNzDQotCQkJCQkmJiAoY29weXN0cmVhbSAhPSBOVUxMKTsNCi0NCi0JCQkJ LyoNCi0JCQkJICogU3VwcHJlc3Mgc3RhdHVzIHByaW50aW5nIGlmIHRoZSBy ZXBvcnQgd291bGQgZ28gdG8gdGhlIHNhbWUNCi0JCQkJICogcGxhY2UgYXMg dGhlIENPUFkgZGF0YSBqdXN0IHdlbnQuICBOb3RlIHRoaXMgZG9lc24ndA0K LQkJCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywgc2luY2UgaGFuZGxl Q29weU91dCBkaWQgdGhhdC4NCi0JCQkJICovDQotCQkJCWlmIChjb3B5c3Ry ZWFtID09IHBzZXQucXVlcnlGb3V0KQ0KLQkJCQl7DQotCQkJCQlQUWNsZWFy KGNvcHlfcmVzdWx0KTsNCi0JCQkJCWNvcHlfcmVzdWx0ID0gTlVMTDsNCi0J CQkJfQ0KLQ0KLQkJCQlpZiAobmVlZF9jbG9zZSkNCi0JCQkJew0KLQkJCQkJ LyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQotCQkJCQlpZiAo aXNfcGlwZSkNCi0JCQkJCXsNCi0JCQkJCQlwY2xvc2UoY29weXN0cmVhbSk7 DQotCQkJCQkJcmVzdG9yZV9zaWdwaXBlX3RyYXAoKTsNCi0JCQkJCX0NCi0J CQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQlmY2xvc2UoY29weXN0cmVhbSk7 DQotCQkJCQl9DQotCQkJCX0NCisJCQkJbmVlZF9jbG9zZSA9IHRydWU7DQor CQkJCWlmIChpc19waXBlKQ0KKwkJCQkJZGlzYWJsZV9zaWdwaXBlX3RyYXAo KTsNCiAJCQl9DQogCQkJZWxzZQ0KLQkJCXsNCi0JCQkJLyogQ09QWSBJTiAq Lw0KLQkJCQljb3B5c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtID8gcHNldC5j b3B5U3RyZWFtIDogcHNldC5jdXJfY21kX3NvdXJjZTsNCi0JCQkJc3VjY2Vz cyA9IGhhbmRsZUNvcHlJbihwc2V0LmRiLA0KLQkJCQkJCQkJCSAgIGNvcHlz dHJlYW0sDQotCQkJCQkJCQkJICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdHMp LA0KLQkJCQkJCQkJCSAgICZjb3B5X3Jlc3VsdCkgJiYgc3VjY2VzczsNCi0J CQl9DQotCQkJUmVzZXRDYW5jZWxDb25uKCk7DQotDQotCQkJLyoNCi0JCQkg KiBSZXBsYWNlIHRoZSBQR1JFU19DT1BZX09VVC9JTiByZXN1bHQgd2l0aCBD T1BZIGNvbW1hbmQncyBleGl0DQotCQkJICogc3RhdHVzLCBvciB3aXRoIE5V TEwgaWYgd2Ugd2FudCB0byBzdXBwcmVzcyBwcmludGluZyBhbnl0aGluZy4N Ci0JCQkgKi8NCi0JCQlQUWNsZWFyKCpyZXN1bHRzKTsNCi0JCQkqcmVzdWx0 cyA9IGNvcHlfcmVzdWx0Ow0KKwkJCQljb3B5c3RyZWFtID0gTlVMTDsJLyog ZGlzY2FyZCBDT1BZIGRhdGEgZW50aXJlbHkgKi8NCiAJCX0NCi0JCWVsc2Ug aWYgKGZpcnN0X2N5Y2xlKQ0KKwkJZWxzZQ0KIAkJew0KLQkJCS8qIGZhc3Qg cGF0aDogbm8gQ09QWSBjb21tYW5kczsgUFFleGVjIHZpc2l0ZWQgYWxsIHJl c3VsdHMgKi8NCi0JCQlicmVhazsNCisJCQkvKiBmYWxsIGJhY2sgdG8gdGhl IGdlbmVyaWMgcXVlcnkgb3V0cHV0IHN0cmVhbSAqLw0KKwkJCWNvcHlzdHJl YW0gPSBwc2V0LnF1ZXJ5Rm91dDsNCiAJCX0NCiANCisJCXN1Y2Nlc3MgPSBo YW5kbGVDb3B5T3V0KHBzZXQuZGIsDQorCQkJCQkJCQljb3B5c3RyZWFtLA0K KwkJCQkJCQkJJmNvcHlfcmVzdWx0KQ0KKwkJCSYmIChjb3B5c3RyZWFtICE9 IE5VTEwpOw0KKw0KIAkJLyoNCi0JCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkg YWdhaW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xlLWNvbW1h bmQNCi0JCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVy d2lzZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQotCQkgKiB0byBwcm9j ZXNzIHRoYXQgbWF5IGluY2x1ZGUgb3RoZXIgQ09QWXMuICBXZSBrZWVwIHRo ZSBsYXN0IHJlc3VsdC4NCisJCSAqIFN1cHByZXNzIHN0YXR1cyBwcmludGlu ZyBpZiB0aGUgcmVwb3J0IHdvdWxkIGdvIHRvIHRoZSBzYW1lDQorCQkgKiBw bGFjZSBhcyB0aGUgQ09QWSBkYXRhIGp1c3Qgd2VudC4gIE5vdGUgdGhpcyBk b2Vzbid0DQorCQkgKiBwcmV2ZW50IGVycm9yIHJlcG9ydGluZywgc2luY2Ug aGFuZGxlQ29weU91dCBkaWQgdGhhdC4NCiAJCSAqLw0KLQkJbmV4dF9yZXN1 bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCi0JCWlmICghbmV4dF9yZXN1 bHQpDQotCQkJYnJlYWs7DQorCQlpZiAoY29weXN0cmVhbSA9PSBwc2V0LnF1 ZXJ5Rm91dCkNCisJCXsNCisJCQlQUWNsZWFyKGNvcHlfcmVzdWx0KTsNCisJ CQljb3B5X3Jlc3VsdCA9IE5VTEw7DQorCQl9DQogDQotCQlQUWNsZWFyKCpy ZXN1bHRzKTsNCi0JCSpyZXN1bHRzID0gbmV4dF9yZXN1bHQ7DQotCQlmaXJz dF9jeWNsZSA9IGZhbHNlOw0KKwkJaWYgKG5lZWRfY2xvc2UpDQorCQl7DQor CQkJLyogY2xvc2UgXGcgYXJndW1lbnQgZmlsZS9waXBlICovDQorCQkJaWYg KGlzX3BpcGUpDQorCQkJew0KKwkJCQlwY2xvc2UoY29weXN0cmVhbSk7DQor CQkJCXJlc3RvcmVfc2lncGlwZV90cmFwKCk7DQorCQkJfQ0KKwkJCWVsc2UN CisJCQl7DQorCQkJCWZjbG9zZShjb3B5c3RyZWFtKTsNCisJCQl9DQorCQl9 DQorCX0NCisJZWxzZQ0KKwl7DQorCQkvKiBDT1BZIElOICovDQorCQljb3B5 c3RyZWFtID0gcHNldC5jb3B5U3RyZWFtID8gcHNldC5jb3B5U3RyZWFtIDog cHNldC5jdXJfY21kX3NvdXJjZTsNCisJCXN1Y2Nlc3MgPSBoYW5kbGVDb3B5 SW4ocHNldC5kYiwNCisJCQkJCQkJICAgY29weXN0cmVhbSwNCisJCQkJCQkJ ICAgUFFiaW5hcnlUdXBsZXMoKnJlc3VsdCksDQorCQkJCQkJCSAgICZjb3B5 X3Jlc3VsdCk7DQogCX0NCiANCi0JU2V0UmVzdWx0VmFyaWFibGVzKCpyZXN1 bHRzLCBzdWNjZXNzKTsNCi0NCi0JLyogbWF5IG5lZWQgdGhpcyB0byByZWNv dmVyIGZyb20gY29ubiBsb3NzIGR1cmluZyBDT1BZICovDQotCWlmICghZmly c3RfY3ljbGUgJiYgIUNoZWNrQ29ubmVjdGlvbigpKQ0KLQkJcmV0dXJuIGZh bHNlOw0KKwlSZXNldENhbmNlbENvbm4oKTsNCisJUFFjbGVhcigqcmVzdWx0 KTsNCisJKnJlc3VsdCA9IGNvcHlfcmVzdWx0Ow0KIA0KIAlyZXR1cm4gc3Vj Y2VzczsNCiB9DQogDQotDQogLyoNCiAgKiBQcmludFF1ZXJ5U3RhdHVzOiBy ZXBvcnQgY29tbWFuZCBzdGF0dXMgYXMgcmVxdWlyZWQNCiAgKg0KLSAqIE5v dGU6IFV0aWxpdHkgZnVuY3Rpb24gZm9yIHVzZSBieSBQcmludFF1ZXJ5UmVz dWx0cygpIG9ubHkuDQorICogTm90ZTogVXRpbGl0eSBmdW5jdGlvbiBmb3Ig dXNlIGJ5IEhhbmRsZVF1ZXJ5UmVzdWx0KCkgb25seS4NCiAgKi8NCiBzdGF0 aWMgdm9pZA0KIFByaW50UXVlcnlTdGF0dXMoUEdyZXN1bHQgKnJlc3VsdHMp DQpAQCAtMTEwNSw0MyArOTc0LDUwIEBAIFByaW50UXVlcnlTdGF0dXMoUEdy ZXN1bHQgKnJlc3VsdHMpDQogDQogDQogLyoNCi0gKiBQcmludFF1ZXJ5UmVz dWx0czogcHJpbnQgb3V0IChvciBzdG9yZSBvciBleGVjdXRlKSBxdWVyeSBy ZXN1bHRzIGFzIHJlcXVpcmVkDQotICoNCi0gKiBOb3RlOiBVdGlsaXR5IGZ1 bmN0aW9uIGZvciB1c2UgYnkgU2VuZFF1ZXJ5KCkgb25seS4NCisgKiBIYW5k bGVRdWVyeVJlc3VsdDogcHJpbnQgb3V0LCBzdG9yZSBvciBleGVjdXRlIG9u ZSBxdWVyeSByZXN1bHQNCisgKiBhcyByZXF1aXJlZC4NCiAgKg0KICAqIFJl dHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5 LCBmYWxzZSBvdGhlcndpc2UuDQogICovDQogc3RhdGljIGJvb2wNCi1Qcmlu dFF1ZXJ5UmVzdWx0cyhQR3Jlc3VsdCAqcmVzdWx0cykNCitIYW5kbGVRdWVy eVJlc3VsdChQR3Jlc3VsdCAqcmVzdWx0LCBib29sIGxhc3QpDQogew0KIAli b29sCQlzdWNjZXNzOw0KIAljb25zdCBjaGFyICpjbWRzdGF0dXM7DQogDQot CWlmICghcmVzdWx0cykNCisJaWYgKHJlc3VsdCA9PSBOVUxMKQ0KIAkJcmV0 dXJuIGZhbHNlOw0KIA0KLQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3Vs dHMpKQ0KKwlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpDQogCXsN CiAJCWNhc2UgUEdSRVNfVFVQTEVTX09LOg0KIAkJCS8qIHN0b3JlIG9yIGV4 ZWN1dGUgb3IgcHJpbnQgdGhlIGRhdGEgLi4uICovDQotCQkJaWYgKHBzZXQu Z3NldF9wcmVmaXgpDQotCQkJCXN1Y2Nlc3MgPSBTdG9yZVF1ZXJ5VHVwbGUo cmVzdWx0cyk7DQotCQkJZWxzZSBpZiAocHNldC5nZXhlY19mbGFnKQ0KLQkJ CQlzdWNjZXNzID0gRXhlY1F1ZXJ5VHVwbGVzKHJlc3VsdHMpOw0KLQkJCWVs c2UgaWYgKHBzZXQuY3Jvc3N0YWJfZmxhZykNCi0JCQkJc3VjY2VzcyA9IFBy aW50UmVzdWx0c0luQ3Jvc3N0YWIocmVzdWx0cyk7DQorCQkJaWYgKGxhc3Qg JiYgcHNldC5nc2V0X3ByZWZpeCkNCisJCQkJc3VjY2VzcyA9IFN0b3JlUXVl cnlUdXBsZShyZXN1bHQpOw0KKwkJCWVsc2UgaWYgKGxhc3QgJiYgcHNldC5n ZXhlY19mbGFnKQ0KKwkJCQlzdWNjZXNzID0gRXhlY1F1ZXJ5VHVwbGVzKHJl c3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCAmJiBwc2V0LmNyb3NzdGFiX2Zs YWcpDQorCQkJCXN1Y2Nlc3MgPSBQcmludFJlc3VsdHNJbkNyb3NzdGFiKHJl c3VsdCk7DQorCQkJZWxzZSBpZiAobGFzdCB8fCBwc2V0LnNob3dfYWxsX3Jl c3VsdHMpDQorCQkJCXN1Y2Nlc3MgPSBQcmludFF1ZXJ5VHVwbGVzKHJlc3Vs dCk7DQogCQkJZWxzZQ0KLQkJCQlzdWNjZXNzID0gUHJpbnRRdWVyeVR1cGxl cyhyZXN1bHRzKTsNCisJCQkJc3VjY2VzcyA9IHRydWU7DQorDQogCQkJLyog aWYgaXQncyBJTlNFUlQvVVBEQVRFL0RFTEVURSBSRVRVUk5JTkcsIGFsc28g cHJpbnQgc3RhdHVzICovDQotCQkJY21kc3RhdHVzID0gUFFjbWRTdGF0dXMo cmVzdWx0cyk7DQotCQkJaWYgKHN0cm5jbXAoY21kc3RhdHVzLCAiSU5TRVJU IiwgNikgPT0gMCB8fA0KLQkJCQlzdHJuY21wKGNtZHN0YXR1cywgIlVQREFU RSIsIDYpID09IDAgfHwNCi0JCQkJc3RybmNtcChjbWRzdGF0dXMsICJERUxF VEUiLCA2KSA9PSAwKQ0KLQkJCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMp Ow0KKwkJCWlmIChsYXN0IHx8IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJ CQl7DQorCQkJCWNtZHN0YXR1cyA9IFBRY21kU3RhdHVzKHJlc3VsdCk7DQor CQkJCWlmIChzdHJuY21wKGNtZHN0YXR1cywgIklOU0VSVCIsIDYpID09IDAg fHwNCisJCQkJCXN0cm5jbXAoY21kc3RhdHVzLCAiVVBEQVRFIiwgNikgPT0g MCB8fA0KKwkJCQkJc3RybmNtcChjbWRzdGF0dXMsICJERUxFVEUiLCA2KSA9 PSAwKQ0KKwkJCQkJUHJpbnRRdWVyeVN0YXR1cyhyZXN1bHQpOw0KKwkJCX0N CisNCiAJCQlicmVhazsNCiANCiAJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoN Ci0JCQlQcmludFF1ZXJ5U3RhdHVzKHJlc3VsdHMpOw0KKwkJCWlmIChsYXN0 IHx8IHBzZXQuc2hvd19hbGxfcmVzdWx0cykNCisJCQkJUHJpbnRRdWVyeVN0 YXR1cyhyZXN1bHQpOw0KIAkJCXN1Y2Nlc3MgPSB0cnVlOw0KIAkJCWJyZWFr Ow0KIA0KQEAgLTExNTEsNyArMTAyNyw3IEBAIFByaW50UXVlcnlSZXN1bHRz KFBHcmVzdWx0ICpyZXN1bHRzKQ0KIA0KIAkJY2FzZSBQR1JFU19DT1BZX09V VDoNCiAJCWNhc2UgUEdSRVNfQ09QWV9JTjoNCi0JCQkvKiBub3RoaW5nIHRv IGRvIGhlcmUgKi8NCisJCQkvKiBub3RoaW5nIHRvIGRvIGhlcmU6IGFscmVh ZHkgcHJvY2Vzc2VkICovDQogCQkJc3VjY2VzcyA9IHRydWU7DQogCQkJYnJl YWs7DQogDQpAQCAtMTE2NCw3ICsxMDQwLDcgQEAgUHJpbnRRdWVyeVJlc3Vs dHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogCQlkZWZhdWx0Og0KIAkJCXN1Y2Nl c3MgPSBmYWxzZTsNCiAJCQlwZ19sb2dfZXJyb3IoInVuZXhwZWN0ZWQgUFFy ZXN1bHRTdGF0dXM6ICVkIiwNCi0JCQkJCQkgUFFyZXN1bHRTdGF0dXMocmVz dWx0cykpOw0KKwkJCQkJCSBQUXJlc3VsdFN0YXR1cyhyZXN1bHQpKTsNCiAJ CQlicmVhazsNCiAJfQ0KIA0KQEAgLTExNzMsNiArMTA0OSwyMTYgQEAgUHJp bnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJlc3VsdHMpDQogCXJldHVybiBz dWNjZXNzOw0KIH0NCiANCisvKg0KKyAqIERhdGEgc3RydWN0dXJlIGFuZCBm dW5jdGlvbnMgdG8gcmVjb3JkIG5vdGljZXMgd2hpbGUgdGhleSBhcmUNCisg KiBlbWl0dGVkLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHNob3duIGxhdGVyLg0K KyAqDQorICogV2UgbmVlZCB0byBrbm93IHdoaWNoIHJlc3VsdCBpcyBsYXN0 LCB3aGljaCByZXF1aXJlcyB0byBleHRyYWN0DQorICogb25lIHJlc3VsdCBp biBhZHZhbmNlLCBoZW5jZSB0d28gYnVmZmVycyBhcmUgbmVlZGVkLg0KKyAq Lw0KK3R5cGVkZWYgc3RydWN0IHsNCisJUFFFeHBCdWZmZXJEYXRhCW1lc3Nh Z2VzWzJdOw0KKwlpbnQJCQkJY3VycmVudDsNCit9IHRfbm90aWNlX21lc3Nh Z2VzOw0KKw0KKy8qDQorICogU3RvcmUgbm90aWNlcyBpbiBhcHByb3ByaWF0 ZSBidWZmZXIsIGZvciBsYXRlciBkaXNwbGF5Lg0KKyAqLw0KK3N0YXRpYyB2 b2lkDQorQXBwZW5kTm90aWNlTWVzc2FnZSh2b2lkICphcmcsIGNvbnN0IGNo YXIgKm1zZykNCit7DQorCXRfbm90aWNlX21lc3NhZ2VzICpub3RlcyA9ICh0 X25vdGljZV9tZXNzYWdlcyopIGFyZzsNCisJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJm5vdGVzLT5tZXNzYWdlc1tub3Rlcy0+Y3VycmVudF0sIG1zZyk7DQor fQ0KKw0KKy8qDQorICogU2hvdyBub3RpY2VzIHN0b3JlZCBpbiBidWZmZXIs IHdoaWNoIGlzIHRoZW4gcmVzZXQuDQorICovDQorc3RhdGljIHZvaWQNCitT aG93Tm90aWNlTWVzc2FnZSh0X25vdGljZV9tZXNzYWdlcyAqbm90ZXMpDQor ew0KKwlQUUV4cEJ1ZmZlckRhdGEJKmN1cnJlbnQgPSAmbm90ZXMtPm1lc3Nh Z2VzW25vdGVzLT5jdXJyZW50XTsNCisJaWYgKCpjdXJyZW50LT5kYXRhICE9 ICdcMCcpDQorCQlwZ19sb2dfaW5mbygiJXMiLCBjdXJyZW50LT5kYXRhKTsN CisJcmVzZXRQUUV4cEJ1ZmZlcihjdXJyZW50KTsNCit9DQorDQorLyoNCisg KiBTZW5kUXVlcnlBbmRQcm9jZXNzUmVzdWx0czogdXRpbGl0eSBmdW5jdGlv biBmb3IgdXNlIGJ5IFNlbmRRdWVyeSgpDQorICogYW5kIFBTUUxleGVjV2F0 Y2goKS4NCisgKg0KKyAqIFNlbmRzIHF1ZXJ5IGFuZCBjeWNsZXMgdGhyb3Vn aCBQR3Jlc3VsdCBvYmplY3RzLg0KKyAqDQorICogV2hlbiBub3QgdW5kZXIg XHdhdGNoIGFuZCBpZiBvdXIgY29tbWFuZCBzdHJpbmcgY29udGFpbmVkIGEg Q09QWSBGUk9NIFNURElODQorICogb3IgQ09QWSBUTyBTVERPVVQsIHRoZSBQ R3Jlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY29tbWFuZHMgbXVzdCBi ZQ0KKyAqIHByb2Nlc3NlZCBieSBwcm92aWRpbmcgYW4gaW5wdXQgb3Igb3V0 cHV0IHN0cmVhbS4gIEluIHRoYXQgZXZlbnQsIHdlJ2xsDQorICogbWFyc2hh bCBkYXRhIGZvciB0aGUgQ09QWS4NCisgKg0KKyAqIEZvciBvdGhlciBjb21t YW5kcywgdGhlIHJlc3VsdHMgYXJlIHByb2Nlc3NlZCBub3JtYWxseSwgZGVw ZW5kaW5nIG9uIHRoZWlyDQorICogc3RhdHVzLg0KKyAqDQorICogUmV0dXJu cyAxIG9uIGNvbXBsZXRlIHN1Y2Nlc3MsIDAgb24gaW50ZXJydXB0IGFuZCAt MSBvciBlcnJvcnMuICBQb3NzaWJsZQ0KKyAqIGZhaWx1cmUgbW9kZXMgaW5j bHVkZSBwdXJlbHkgY2xpZW50LXNpZGUgcHJvYmxlbXM7IGNoZWNrIHRoZSB0 cmFuc2FjdGlvbg0KKyAqIHN0YXR1cyBmb3IgdGhlIHNlcnZlci1zaWRlIG9w aW5pb24uDQorICoNCisgKiBOb3RlIHRoYXQgb24gYSBjb21iaW5lZCBxdWVy eSwgZmFpbHVyZSBkb2VzIG5vdCBtZWFuIHRoYXQgbm90aGluZyB3YXMNCisg KiBjb21taXR0ZWQuDQorICovDQorc3RhdGljIGludA0KK1NlbmRRdWVyeUFu ZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKnBl bGFwc2VkX21zZWMsIGJvb2wgaXNfd2F0Y2gpDQorew0KKwlib29sCQkJCXN1 Y2Nlc3M7DQorCWluc3RyX3RpbWUJCQliZWZvcmU7DQorCVBHcmVzdWx0CQkg ICAqcmVzdWx0Ow0KKwl0X25vdGljZV9tZXNzYWdlcwlub3RlczsNCisNCisJ aWYgKHBzZXQudGltaW5nKQ0KKwkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChi ZWZvcmUpOw0KKw0KKwlzdWNjZXNzID0gUFFzZW5kUXVlcnkocHNldC5kYiwg cXVlcnkpOw0KKwlSZXNldENhbmNlbENvbm4oKTsNCisNCisJaWYgKCFzdWNj ZXNzKQ0KKwl7DQorCQljb25zdCBjaGFyICplcnJvciA9IFBRZXJyb3JNZXNz YWdlKHBzZXQuZGIpOw0KKw0KKwkJaWYgKHN0cmxlbihlcnJvcikpDQorCQkJ cGdfbG9nX2luZm8oIiVzIiwgZXJyb3IpOw0KKw0KKwkJQ2hlY2tDb25uZWN0 aW9uKCk7DQorDQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLyoNCisJICog SWYgU0lHSU5UIGlzIHNlbnQgd2hpbGUgdGhlIHF1ZXJ5IGlzIHByb2Nlc3Np bmcsIHRoZSBpbnRlcnJ1cHQgd2lsbCBiZQ0KKwkgKiBjb25zdW1lZC4gIFRo ZSB1c2VyJ3MgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRvIGNhbmNlbCB0aGUg ZW50aXJlIHdhdGNoDQorCSAqIHByb2Nlc3MsIHNvIGRldGVjdCBhIHNlbnQg Y2FuY2VsbGF0aW9uIHJlcXVlc3QgYW5kIGV4aXQgaW4gdGhpcyBjYXNlLg0K KwkgKi8NCisJaWYgKGlzX3dhdGNoICYmIGNhbmNlbF9wcmVzc2VkKQ0KKwl7 DQorCQlDbGVhck9yU2F2ZUFsbFJlc3VsdHMoKTsNCisJCXJldHVybiAwOw0K Kwl9DQorDQorCS8qIGludGVyY2VwdCBub3RpY2VzICovDQorCW5vdGVzLmN1 cnJlbnQgPSAwOw0KKwlpbml0UFFFeHBCdWZmZXIoJm5vdGVzLm1lc3NhZ2Vz WzBdKTsNCisJaW5pdFBRRXhwQnVmZmVyKCZub3Rlcy5tZXNzYWdlc1sxXSk7 DQorCVBRc2V0Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIEFwcGVuZE5vdGlj ZU1lc3NhZ2UsICZub3Rlcyk7DQorDQorCS8qIGZpcnN0IHJlc3VsdCAqLw0K KwlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCisNCisJd2hpbGUg KHJlc3VsdCAhPSBOVUxMKQ0KKwl7DQorCQlFeGVjU3RhdHVzVHlwZSByZXN1 bHRfc3RhdHVzOw0KKwkJUEdyZXN1bHQgICAqbmV4dF9yZXN1bHQ7DQorCQli b29sCQlsYXN0Ow0KKw0KKwkJaWYgKCFBY2NlcHRSZXN1bHQocmVzdWx0LCBm YWxzZSkpDQorCQl7DQorCQkJLyoNCisJCQkgKiBTb21lIGVycm9yIG9jY3Vy ZWQsIGVpdGhlciBhIHNlcnZlci1zaWRlIGZhaWx1cmUgb3INCisJCQkgKiBh IGZhaWx1cmUgdG8gc3VibWl0IHRoZSBjb21tYW5kIHN0cmluZy4gIFJlY29y ZCB0aGF0Lg0KKwkJCSAqLw0KKwkJCWNvbnN0IGNoYXIgKmVycm9yID0gUFFl cnJvck1lc3NhZ2UocHNldC5kYik7DQorDQorCQkJU2hvd05vdGljZU1lc3Nh Z2UoJm5vdGVzKTsNCisJCQlpZiAoc3RybGVuKGVycm9yKSkNCisJCQkJcGdf bG9nX2luZm8oIiVzIiwgZXJyb3IpOw0KKwkJCUNoZWNrQ29ubmVjdGlvbigp Ow0KKwkJCWlmICghaXNfd2F0Y2gpDQorCQkJCVNldFJlc3VsdFZhcmlhYmxl cyhyZXN1bHQsIGZhbHNlKTsNCisJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1 bHQpOw0KKwkJCXN1Y2Nlc3MgPSBmYWxzZTsNCisNCisJCQkvKiBhbmQgc3dp dGNoIHRvIG5leHQgcmVzdWx0ICovDQorCQkJcmVzdWx0ID0gUFFnZXRSZXN1 bHQocHNldC5kYik7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQkvKiBt dXN0IGhhbmRsZSBDT1BZIGJlZm9yZSBjaGFuZ2luZyB0aGUgY3VycmVudCBy ZXN1bHQgKi8NCisJCXJlc3VsdF9zdGF0dXMgPSBQUXJlc3VsdFN0YXR1cyhy ZXN1bHQpOw0KKwkJQXNzZXJ0KHJlc3VsdF9zdGF0dXMgIT0gUEdSRVNfQ09Q WV9CT1RIKTsNCisJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlf SU4gfHwNCisJCQlyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlfT1VUKQ0K KwkJew0KKwkJCVNob3dOb3RpY2VNZXNzYWdlKCZub3Rlcyk7DQorDQorCQkJ aWYgKGlzX3dhdGNoKQ0KKwkJCXsNCisJCQkJQ2xlYXJPclNhdmVBbGxSZXN1 bHRzKCk7DQorCQkJCXBnX2xvZ19lcnJvcigiXFx3YXRjaCBjYW5ub3QgYmUg dXNlZCB3aXRoIENPUFkiKTsNCisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisN CisJCQkvKiB1c2Ugbm9ybWFsIG5vdGljZSBwcm9jZXNzb3IgZHVyaW5nIENP UFkgKi8NCisJCQlQUXNldE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBOb3Rp Y2VQcm9jZXNzb3IsIE5VTEwpOw0KKw0KKwkJCXN1Y2Nlc3MgJj0gSGFuZGxl Q29weVJlc3VsdCgmcmVzdWx0KTsNCisNCisJCQlQUXNldE5vdGljZVByb2Nl c3Nvcihwc2V0LmRiLCBBcHBlbmROb3RpY2VNZXNzYWdlLCAmbm90ZXMpOw0K KwkJfQ0KKw0KKwkJLyoNCisJCSAqIENoZWNrIFBRZ2V0UmVzdWx0KCkgYWdh aW4uICBJbiB0aGUgdHlwaWNhbCBjYXNlIG9mIGEgc2luZ2xlLWNvbW1hbmQN CisJCSAqIHN0cmluZywgaXQgd2lsbCByZXR1cm4gTlVMTC4gIE90aGVyd2lz ZSwgd2UnbGwgaGF2ZSBvdGhlciByZXN1bHRzDQorCQkgKiB0byBwcm9jZXNz Lg0KKwkJICovDQorCQlub3Rlcy5jdXJyZW50IF49IDE7DQorCQluZXh0X3Jl c3VsdCA9IFBRZ2V0UmVzdWx0KHBzZXQuZGIpOw0KKwkJbm90ZXMuY3VycmVu dCBePSAxOw0KKwkJbGFzdCA9IChuZXh0X3Jlc3VsdCA9PSBOVUxMKTsNCisN CisJCS8qDQorCQkgKiBHZXQgdGltaW5nIG1lYXN1cmUgYmVmb3JlIHByaW50 aW5nIHRoZSBsYXN0IHJlc3VsdC4NCisJCSAqDQorCQkgKiBJdCB3aWxsIGlu Y2x1ZGUgdGhlIGRpc3BsYXkgb2YgcHJldmlvdXMgcmVzdWx0cywgaWYgYW55 Lg0KKwkJICogVGhpcyBjYW5ub3QgYmUgaGVscGVkIGJlY2F1c2UgdGhlIHNl cnZlciBnb2VzIG9uIHByb2Nlc3NpbmcNCisJCSAqIGZ1cnRoZXIgcXVlcmll cyBhbnl3YXkgd2hpbGUgdGhlIHByZXZpb3VzIG9uZXMgYXJlIGJlaW5nIGRp c3BsYXllZC4NCisJCSAqIFRoZSBwYXJhbGxlbCBleGVjdXRpb24gb2YgdGhl IGNsaWVudCBkaXNwbGF5IGhpZGVzIHRoZSBzZXJ2ZXIgdGltZQ0KKwkJICog d2hlbiBpdCBpcyBzaG9ydGVyLg0KKwkJICoNCisJCSAqIFdpdGggY29tYmlu ZWQgcXVlcmllcywgdGltaW5nIG11c3QgYmUgdW5kZXJzdG9vZCBhcyBhbiB1 cHBlciBib3VuZA0KKwkJICogb2YgdGhlIHRpbWUgc3BlbnQgcHJvY2Vzc2lu ZyB0aGVtLg0KKwkJICovDQorCQlpZiAobGFzdCAmJiBwc2V0LnRpbWluZykN CisJCXsNCisJCQlpbnN0cl90aW1lCW5vdzsNCisJCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKG5vdyk7DQorCQkJSU5TVFJfVElNRV9TVUJUUkFDVChub3cs IGJlZm9yZSk7DQorCQkJKnBlbGFwc2VkX21zZWMgPSBJTlNUUl9USU1FX0dF VF9NSUxMSVNFQyhub3cpOw0KKwkJfQ0KKw0KKwkJLyogbm90aWNlcyBhbHJl YWR5IHNob3duIGFib3ZlIGZvciBjb3B5ICovDQorCQlTaG93Tm90aWNlTWVz c2FnZSgmbm90ZXMpOw0KKw0KKwkJLyogdGhpcyBtYXkgb3IgbWF5IG5vdCBw cmludCBzb21ldGhpbmcgZGVwZW5kaW5nIG9uIHNldHRpbmdzICovDQorCQlp ZiAocmVzdWx0ICE9IE5VTEwpDQorCQkJc3VjY2VzcyAmPSBIYW5kbGVRdWVy eVJlc3VsdChyZXN1bHQsIGxhc3QpOw0KKw0KKwkJLyogc2V0IHZhcmlhYmxl cyBvbiBsYXN0IHJlc3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQorCQlpZiAo IWlzX3dhdGNoICYmIGxhc3QgJiYgc3VjY2VzcykNCisJCQlTZXRSZXN1bHRW YXJpYWJsZXMocmVzdWx0LCB0cnVlKTsNCisNCisJCUNsZWFyT3JTYXZlUmVz dWx0KHJlc3VsdCk7DQorCQlub3Rlcy5jdXJyZW50IF49IDE7DQorCQlyZXN1 bHQgPSBuZXh0X3Jlc3VsdDsNCisJfQ0KKw0KKwkvKiByZXNldCBub3RpY2Ug aG9vayAqLw0KKwlQUXNldE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBOb3Rp Y2VQcm9jZXNzb3IsIE5VTEwpOw0KKwl0ZXJtUFFFeHBCdWZmZXIoJm5vdGVz Lm1lc3NhZ2VzWzBdKTsNCisJdGVybVBRRXhwQnVmZmVyKCZub3Rlcy5tZXNz YWdlc1sxXSk7DQorDQorCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBm cm9tIGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLw0KKwlpZiAoIUNoZWNrQ29u bmVjdGlvbigpKQ0KKwkJcmV0dXJuIC0xOw0KKw0KKwlyZXR1cm4gc3VjY2Vz cyA/IDEgOiAtMTsNCit9DQorDQogDQogLyoNCiAgKiBTZW5kUXVlcnk6IHNl bmQgdGhlIHF1ZXJ5IHN0cmluZyB0byB0aGUgYmFja2VuZA0KQEAgLTExODks MTAgKzEyNzUsMTEgQEAgUHJpbnRRdWVyeVJlc3VsdHMoUEdyZXN1bHQgKnJl c3VsdHMpDQogYm9vbA0KIFNlbmRRdWVyeShjb25zdCBjaGFyICpxdWVyeSkN CiB7DQotCVBHcmVzdWx0ICAgKnJlc3VsdHM7DQorCVBHcmVzdWx0ICAgKnJl c3VsdHMgPSBOVUxMOw0KIAlQR1RyYW5zYWN0aW9uU3RhdHVzVHlwZSB0cmFu c2FjdGlvbl9zdGF0dXM7DQogCWRvdWJsZQkJZWxhcHNlZF9tc2VjID0gMDsN CiAJYm9vbAkJT0sgPSBmYWxzZTsNCisJYm9vbAkJcmVzX2Vycm9yOw0KIAlp bnQJCQlpOw0KIAlib29sCQlvbl9lcnJvcl9yb2xsYmFja19zYXZlcG9pbnQg PSBmYWxzZTsNCiAJc3RhdGljIGJvb2wgb25fZXJyb3Jfcm9sbGJhY2tfd2Fy bmluZyA9IGZhbHNlOw0KQEAgLTEyMzQsMjYgKzEzMjEsMzIgQEAgU2VuZFF1 ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIAkJZmZsdXNoKHBzZXQubG9nZmls ZSk7DQogCX0NCiANCisJLyogZ2xvYmFsIHF1ZXJ5IGNhbmNlbGxhdGlvbiBm b3IgdGhpcyBxdWVyeSAqLw0KIAlTZXRDYW5jZWxDb25uKHBzZXQuZGIpOw0K IA0KIAl0cmFuc2FjdGlvbl9zdGF0dXMgPSBQUXRyYW5zYWN0aW9uU3RhdHVz KHBzZXQuZGIpOw0KIA0KKwkvKiBpc3N1ZSBhIEJFR0lOIGlmIG5lZWRlZCwg Y29ycmVzcG9uZGluZyBDT01NSVQvUk9MTEJBQ0sgYnkgdXNlciAqLw0KIAlp ZiAodHJhbnNhY3Rpb25fc3RhdHVzID09IFBRVFJBTlNfSURMRSAmJg0KIAkJ IXBzZXQuYXV0b2NvbW1pdCAmJg0KIAkJIWNvbW1hbmRfbm9fYmVnaW4ocXVl cnkpKQ0KIAl7DQotCQlyZXN1bHRzID0gUFFleGVjKHBzZXQuZGIsICJCRUdJ TiIpOw0KLQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlc3VsdHMpICE9IFBHUkVT X0NPTU1BTkRfT0spDQorCQlQR3Jlc3VsdCAgICAqcmVzdWx0Ow0KKwkJcmVz dWx0ID0gUFFleGVjKHBzZXQuZGIsICJCRUdJTiIpOw0KKwkJcmVzX2Vycm9y ID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JFU19DT01NQU5EX09L Ow0KKwkJQ2xlYXJPclNhdmVSZXN1bHQocmVzdWx0KTsNCisNCisJCWlmIChy ZXNfZXJyb3IpDQogCQl7DQogCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJv ck1lc3NhZ2UocHNldC5kYikpOw0KLQkJCUNsZWFyT3JTYXZlUmVzdWx0KHJl c3VsdHMpOw0KLQkJCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJCWdvdG8gc2Vu ZHF1ZXJ5X2NsZWFudXA7DQogCQl9DQotCQlDbGVhck9yU2F2ZVJlc3VsdChy ZXN1bHRzKTsNCisNCisJCS8qIG11c3QgYmUgUFFUUkFOU19JTlRSQU5TIGFm dGVyIGEgQkVHSU4gKi8NCiAJCXRyYW5zYWN0aW9uX3N0YXR1cyA9IFBRdHJh bnNhY3Rpb25TdGF0dXMocHNldC5kYik7DQogCX0NCiANCisJLyogY3JlYXRl IGF1dG9tYXRpYyBzYXZlcG9pbnQgaWYgbmVlZGVkIGFuZCBwb3NzaWJsZSAq Lw0KIAlpZiAodHJhbnNhY3Rpb25fc3RhdHVzID09IFBRVFJBTlNfSU5UUkFO UyAmJg0KIAkJcHNldC5vbl9lcnJvcl9yb2xsYmFjayAhPSBQU1FMX0VSUk9S X1JPTExCQUNLX09GRiAmJg0KIAkJKHBzZXQuY3VyX2NtZF9pbnRlcmFjdGl2 ZSB8fA0KQEAgLTEyNzAsNTggKzEzNjMsNDAgQEAgU2VuZFF1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5KQ0KIAkJfQ0KIAkJZWxzZQ0KIAkJew0KLQkJCXJlc3Vs dHMgPSBQUWV4ZWMocHNldC5kYiwgIlNBVkVQT0lOVCBwZ19wc3FsX3RlbXBv cmFyeV9zYXZlcG9pbnQiKTsNCi0JCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVz dWx0cykgIT0gUEdSRVNfQ09NTUFORF9PSykNCisJCQlQR3Jlc3VsdCAgICpy ZXN1bHQ7DQorCQkJcmVzdWx0ID0gUFFleGVjKHBzZXQuZGIsICJTQVZFUE9J TlQgcGdfcHNxbF90ZW1wb3Jhcnlfc2F2ZXBvaW50Iik7DQorCQkJcmVzX2Vy cm9yID0gUFFyZXN1bHRTdGF0dXMocmVzdWx0KSAhPSBQR1JFU19DT01NQU5E X09LOw0KKwkJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQorDQorCQkJ aWYgKHJlc19lcnJvcikNCiAJCQl7DQogCQkJCXBnX2xvZ19pbmZvKCIlcyIs IFBRZXJyb3JNZXNzYWdlKHBzZXQuZGIpKTsNCi0JCQkJQ2xlYXJPclNhdmVS ZXN1bHQocmVzdWx0cyk7DQotCQkJCVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJ CQlnb3RvIHNlbmRxdWVyeV9jbGVhbnVwOw0KIAkJCX0NCi0JCQlDbGVhck9y U2F2ZVJlc3VsdChyZXN1bHRzKTsNCisNCiAJCQlvbl9lcnJvcl9yb2xsYmFj a19zYXZlcG9pbnQgPSB0cnVlOw0KIAkJfQ0KIAl9DQogDQorCS8qIHByb2Nl c3MgdGhlIHF1ZXJ5LCBvbmUgd2F5IG9yIHRoZSBvdGhlciAqLw0KIAlpZiAo cHNldC5nZGVzY19mbGFnKQ0KIAl7DQogCQkvKiBEZXNjcmliZSBxdWVyeSdz IHJlc3VsdCBjb2x1bW5zLCB3aXRob3V0IGV4ZWN1dGluZyBpdCAqLw0KIAkJ T0sgPSBEZXNjcmliZVF1ZXJ5KHF1ZXJ5LCAmZWxhcHNlZF9tc2VjKTsNCi0J CVJlc2V0Q2FuY2VsQ29ubigpOw0KIAkJcmVzdWx0cyA9IE5VTEw7CQkJLyog UFFjbGVhcihOVUxMKSBkb2VzIG5vdGhpbmcgKi8NCiAJfQ0KIAllbHNlIGlm IChwc2V0LmZldGNoX2NvdW50IDw9IDAgfHwgcHNldC5nZXhlY19mbGFnIHx8 DQogCQkJIHBzZXQuY3Jvc3N0YWJfZmxhZyB8fCAhaXNfc2VsZWN0X2NvbW1h bmQocXVlcnkpKQ0KIAl7DQogCQkvKiBEZWZhdWx0IGZldGNoLWl0LWFsbC1h bmQtcHJpbnQgbW9kZSAqLw0KLQkJaW5zdHJfdGltZQliZWZvcmUsDQotCQkJ CQlhZnRlcjsNCi0NCi0JCWlmIChwc2V0LnRpbWluZykNCi0JCQlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKGJlZm9yZSk7DQotDQotCQlyZXN1bHRzID0gUFFl eGVjKHBzZXQuZGIsIHF1ZXJ5KTsNCi0NCi0JCS8qIHRoZXNlIG9wZXJhdGlv bnMgYXJlIGluY2x1ZGVkIGluIHRoZSB0aW1pbmcgcmVzdWx0OiAqLw0KLQkJ UmVzZXRDYW5jZWxDb25uKCk7DQotCQlPSyA9IFByb2Nlc3NSZXN1bHQoJnJl c3VsdHMpOw0KLQ0KLQkJaWYgKHBzZXQudGltaW5nKQ0KLQkJew0KLQkJCUlO U1RSX1RJTUVfU0VUX0NVUlJFTlQoYWZ0ZXIpOw0KLQkJCUlOU1RSX1RJTUVf U1VCVFJBQ1QoYWZ0ZXIsIGJlZm9yZSk7DQotCQkJZWxhcHNlZF9tc2VjID0g SU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYWZ0ZXIpOw0KLQkJfQ0KLQ0KLQkJ LyogYnV0IHByaW50aW5nIHJlc3VsdHMgaXNuJ3Q6ICovDQotCQlpZiAoT0sg JiYgcmVzdWx0cykNCi0JCQlPSyA9IFByaW50UXVlcnlSZXN1bHRzKHJlc3Vs dHMpOw0KKwkJaW50IHJlcyA9IFNlbmRRdWVyeUFuZFByb2Nlc3NSZXN1bHRz KHF1ZXJ5LCAmZWxhcHNlZF9tc2VjLCBmYWxzZSk7DQorCQlPSyA9IChyZXMg Pj0gMCk7DQorCQkvKiBkbyBOT1Qgb3ZlcndyaXRlIHJlc3VsdHMgaGVyZSwg Zm9yIG9uX2Vycm9yX3JvbGxiYWNrX3NhdmVwb2ludCAqLw0KIAl9DQogCWVs c2UNCiAJew0KIAkJLyogRmV0Y2gtaW4tc2VnbWVudHMgbW9kZSAqLw0KIAkJ T0sgPSBFeGVjUXVlcnlVc2luZ0N1cnNvcihxdWVyeSwgJmVsYXBzZWRfbXNl Yyk7DQotCQlSZXNldENhbmNlbENvbm4oKTsNCiAJCXJlc3VsdHMgPSBOVUxM OwkJCS8qIFBRY2xlYXIoTlVMTCkgZG9lcyBub3RoaW5nICovDQogCX0NCiAN CkBAIC0xMzgwLDE0ICsxNDU1LDE1IEBAIFNlbmRRdWVyeShjb25zdCBjaGFy ICpxdWVyeSkNCiAJCQlQR3Jlc3VsdCAgICpzdnB0cmVzOw0KIA0KIAkJCXN2 cHRyZXMgPSBQUWV4ZWMocHNldC5kYiwgc3ZwdGNtZCk7DQotCQkJaWYgKFBR cmVzdWx0U3RhdHVzKHN2cHRyZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spDQor CQkJcmVzX2Vycm9yID0gUFFyZXN1bHRTdGF0dXMoc3ZwdHJlcykgIT0gUEdS RVNfQ09NTUFORF9PSzsNCisNCisJCQlpZiAocmVzX2Vycm9yKQ0KIAkJCXsN CiAJCQkJcGdfbG9nX2luZm8oIiVzIiwgUFFlcnJvck1lc3NhZ2UocHNldC5k YikpOw0KIAkJCQlDbGVhck9yU2F2ZVJlc3VsdChzdnB0cmVzKTsNCiAJCQkJ T0sgPSBmYWxzZTsNCiANCiAJCQkJUFFjbGVhcihyZXN1bHRzKTsNCi0JCQkJ UmVzZXRDYW5jZWxDb25uKCk7DQogCQkJCWdvdG8gc2VuZHF1ZXJ5X2NsZWFu dXA7DQogCQkJfQ0KIAkJCVBRY2xlYXIoc3ZwdHJlcyk7DQpAQCAtMTQxOCw2 ICsxNDk0LDkgQEAgU2VuZFF1ZXJ5KGNvbnN0IGNoYXIgKnF1ZXJ5KQ0KIA0K IHNlbmRxdWVyeV9jbGVhbnVwOg0KIA0KKwkvKiBnbG9iYWwgY2FuY2VsbGF0 aW9uIHJlc2V0ICovDQorCVJlc2V0Q2FuY2VsQ29ubigpOw0KKw0KIAkvKiBy ZXNldCBcZydzIG91dHB1dC10by1maWxlbmFtZSB0cmlnZ2VyICovDQogCWlm IChwc2V0LmdmbmFtZSkNCiAJew0KQEAgLTE0OTcsNyArMTU3Niw3IEBAIERl c2NyaWJlUXVlcnkoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNl ZF9tc2VjKQ0KIAlQUWNsZWFyKHJlc3VsdHMpOw0KIA0KIAlyZXN1bHRzID0g UFFkZXNjcmliZVByZXBhcmVkKHBzZXQuZGIsICIiKTsNCi0JT0sgPSBBY2Nl cHRSZXN1bHQocmVzdWx0cykgJiYNCisJT0sgPSBBY2NlcHRSZXN1bHQocmVz dWx0cywgdHJ1ZSkgJiYNCiAJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9 PSBQR1JFU19DT01NQU5EX09LKTsNCiAJaWYgKE9LICYmIHJlc3VsdHMpDQog CXsNCkBAIC0xNTQ1LDcgKzE2MjQsNyBAQCBEZXNjcmliZVF1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQlQUWNs ZWFyKHJlc3VsdHMpOw0KIA0KIAkJCXJlc3VsdHMgPSBQUWV4ZWMocHNldC5k YiwgYnVmLmRhdGEpOw0KLQkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMp Ow0KKwkJCU9LID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0KIA0K IAkJCWlmIChwc2V0LnRpbWluZykNCiAJCQl7DQpAQCAtMTU1NSw3ICsxNjM0 LDcgQEAgRGVzY3JpYmVRdWVyeShjb25zdCBjaGFyICpxdWVyeSwgZG91Ymxl ICplbGFwc2VkX21zZWMpDQogCQkJfQ0KIA0KIAkJCWlmIChPSyAmJiByZXN1 bHRzKQ0KLQkJCQlPSyA9IFByaW50UXVlcnlSZXN1bHRzKHJlc3VsdHMpOw0K KwkJCQlPSyA9IEhhbmRsZVF1ZXJ5UmVzdWx0KHJlc3VsdHMsIHRydWUpOw0K IA0KIAkJCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsNCiAJCX0NCkBAIC0xNjE0 LDcgKzE2OTMsNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihjb25zdCBjaGFy ICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCWlmIChQUXRyYW5z YWN0aW9uU3RhdHVzKHBzZXQuZGIpID09IFBRVFJBTlNfSURMRSkNCiAJew0K IAkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCAiQkVHSU4iKTsNCi0JCU9L ID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCQlPSyA9IEFjY2VwdFJl c3VsdChyZXN1bHRzLCB0cnVlKSAmJg0KIAkJCShQUXJlc3VsdFN0YXR1cyhy ZXN1bHRzKSA9PSBQR1JFU19DT01NQU5EX09LKTsNCiAJCUNsZWFyT3JTYXZl UmVzdWx0KHJlc3VsdHMpOw0KIAkJaWYgKCFPSykNCkBAIC0xNjI4LDcgKzE3 MDcsNyBAQCBFeGVjUXVlcnlVc2luZ0N1cnNvcihjb25zdCBjaGFyICpxdWVy eSwgZG91YmxlICplbGFwc2VkX21zZWMpDQogCQkJCQkgIHF1ZXJ5KTsNCiAN CiAJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBidWYuZGF0YSk7DQotCU9L ID0gQWNjZXB0UmVzdWx0KHJlc3VsdHMpICYmDQorCU9LID0gQWNjZXB0UmVz dWx0KHJlc3VsdHMsIHRydWUpICYmDQogCQkoUFFyZXN1bHRTdGF0dXMocmVz dWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQogCWlmICghT0spDQogCQlT ZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0cywgT0spOw0KQEAgLTE3MDEsNyAr MTc4MCw3IEBAIEV4ZWNRdWVyeVVzaW5nQ3Vyc29yKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYykNCiAJCQkJaXNfcGFnZXIgPSBm YWxzZTsNCiAJCQl9DQogDQotCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0 cyk7DQorCQkJT0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSk7DQog CQkJQXNzZXJ0KCFPSyk7DQogCQkJU2V0UmVzdWx0VmFyaWFibGVzKHJlc3Vs dHMsIE9LKTsNCiAJCQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCkBA IC0xODEwLDcgKzE4ODksNyBAQCBjbGVhbnVwOg0KIAlyZXN1bHRzID0gUFFl eGVjKHBzZXQuZGIsICJDTE9TRSBfcHNxbF9jdXJzb3IiKTsNCiAJaWYgKE9L KQ0KIAl7DQotCQlPSyA9IEFjY2VwdFJlc3VsdChyZXN1bHRzKSAmJg0KKwkJ T0sgPSBBY2NlcHRSZXN1bHQocmVzdWx0cywgdHJ1ZSkgJiYNCiAJCQkoUFFy ZXN1bHRTdGF0dXMocmVzdWx0cykgPT0gUEdSRVNfQ09NTUFORF9PSyk7DQog CQlDbGVhck9yU2F2ZVJlc3VsdChyZXN1bHRzKTsNCiAJfQ0KQEAgLTE4MjAs NyArMTg5OSw3IEBAIGNsZWFudXA6DQogCWlmIChzdGFydGVkX3R4bikNCiAJ ew0KIAkJcmVzdWx0cyA9IFBRZXhlYyhwc2V0LmRiLCBPSyA/ICJDT01NSVQi IDogIlJPTExCQUNLIik7DQotCQlPSyAmPSBBY2NlcHRSZXN1bHQocmVzdWx0 cykgJiYNCisJCU9LICY9IEFjY2VwdFJlc3VsdChyZXN1bHRzLCB0cnVlKSAm Jg0KIAkJCShQUXJlc3VsdFN0YXR1cyhyZXN1bHRzKSA9PSBQR1JFU19DT01N QU5EX09LKTsNCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdHMpOw0KIAl9 DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2hlbHAuYyBiL3NyYy9iaW4v cHNxbC9oZWxwLmMNCmluZGV4IDNjMjUwZDExY2YuLmJiY2EwNTcyMDIgMTAw NjQ0DQotLS0gYS9zcmMvYmluL3BzcWwvaGVscC5jDQorKysgYi9zcmMvYmlu L3BzcWwvaGVscC5jDQpAQCAtNDEyLDYgKzQxMiw4IEBAIGhlbHBWYXJpYWJs ZXModW5zaWduZWQgc2hvcnQgaW50IHBhZ2VyKQ0KIAlmcHJpbnRmKG91dHB1 dCwgXygiICBTRVJWRVJfVkVSU0lPTl9OQU1FXG4iDQogCQkJCQkgICIgIFNF UlZFUl9WRVJTSU9OX05VTVxuIg0KIAkJCQkJICAiICAgIHNlcnZlcidzIHZl cnNpb24gKGluIHNob3J0IHN0cmluZyBvciBudW1lcmljIGZvcm1hdClcbiIp KTsNCisJZnByaW50ZihvdXRwdXQsIF8oIiAgU0hPV19BTExfUkVTVUxUU1xu Ig0KKwkJCQkJICAiICAgIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBjb21iaW5l ZCBxdWVyeSAoXFw7KSBpbnN0ZWFkIG9mIG9ubHkgdGhlIGxhc3RcbiIpKTsN CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgU0hPV19DT05URVhUXG4iDQogCQkJ CQkgICIgICAgY29udHJvbHMgZGlzcGxheSBvZiBtZXNzYWdlIGNvbnRleHQg ZmllbGRzIFtuZXZlciwgZXJyb3JzLCBhbHdheXNdXG4iKSk7DQogCWZwcmlu dGYob3V0cHV0LCBfKCIgIFNJTkdMRUxJTkVcbiINCmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvc2V0dGluZ3MuaCBiL3NyYy9iaW4vcHNxbC9zZXR0aW5n cy5oDQppbmRleCA4M2YyZTZmMjU0Li42MjU4M2FkNmNhIDEwMDY0NA0KLS0t IGEvc3JjL2Jpbi9wc3FsL3NldHRpbmdzLmgNCisrKyBiL3NyYy9iaW4vcHNx bC9zZXR0aW5ncy5oDQpAQCAtMTQ4LDYgKzE0OCw3IEBAIHR5cGVkZWYgc3Ry dWN0IF9wc3FsU2V0dGluZ3MNCiAJY29uc3QgY2hhciAqcHJvbXB0MjsNCiAJ Y29uc3QgY2hhciAqcHJvbXB0MzsNCiAJUEdWZXJib3NpdHkgdmVyYm9zaXR5 OwkJLyogY3VycmVudCBlcnJvciB2ZXJib3NpdHkgbGV2ZWwgKi8NCisJYm9v bAkJc2hvd19hbGxfcmVzdWx0czsNCiAJUEdDb250ZXh0VmlzaWJpbGl0eSBz aG93X2NvbnRleHQ7CS8qIGN1cnJlbnQgY29udGV4dCBkaXNwbGF5IGxldmVs ICovDQogfSBQc3FsU2V0dGluZ3M7DQogDQpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL3N0YXJ0dXAuYyBiL3NyYy9iaW4vcHNxbC9zdGFydHVwLmMNCmlu ZGV4IDExMDkwNmE0ZTkuLjE3NDM3Y2UwN2QgMTAwNjQ0DQotLS0gYS9zcmMv YmluL3BzcWwvc3RhcnR1cC5jDQorKysgYi9zcmMvYmluL3BzcWwvc3RhcnR1 cC5jDQpAQCAtMTk2LDYgKzE5Niw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkNCiAJU2V0VmFyaWFibGUocHNldC52YXJzLCAiUFJPTVBUMSIs IERFRkFVTFRfUFJPTVBUMSk7DQogCVNldFZhcmlhYmxlKHBzZXQudmFycywg IlBST01QVDIiLCBERUZBVUxUX1BST01QVDIpOw0KIAlTZXRWYXJpYWJsZShw c2V0LnZhcnMsICJQUk9NUFQzIiwgREVGQVVMVF9QUk9NUFQzKTsNCisJU2V0 VmFyaWFibGVCb29sKHBzZXQudmFycywgIlNIT1dfQUxMX1JFU1VMVFMiKTsN CiANCiAJcGFyc2VfcHNxbF9vcHRpb25zKGFyZ2MsIGFyZ3YsICZvcHRpb25z KTsNCiANCkBAIC0xMTMwLDYgKzExMzEsMTIgQEAgdmVyYm9zaXR5X2hvb2so Y29uc3QgY2hhciAqbmV3dmFsKQ0KIAlyZXR1cm4gdHJ1ZTsNCiB9DQogDQor c3RhdGljIGJvb2wNCitzaG93X2FsbF9yZXN1bHRzX2hvb2soY29uc3QgY2hh ciAqbmV3dmFsKQ0KK3sNCisJcmV0dXJuIFBhcnNlVmFyaWFibGVCb29sKG5l d3ZhbCwgIlNIT1dfQUxMX1JFU1VMVFMiLCAmcHNldC5zaG93X2FsbF9yZXN1 bHRzKTsNCit9DQorDQogc3RhdGljIGNoYXIgKg0KIHNob3dfY29udGV4dF9z dWJzdGl0dXRlX2hvb2soY2hhciAqbmV3dmFsKQ0KIHsNCkBAIC0xMjMxLDYg KzEyMzgsOSBAQCBFc3RhYmxpc2hWYXJpYWJsZVNwYWNlKHZvaWQpDQogCVNl dFZhcmlhYmxlSG9va3MocHNldC52YXJzLCAiVkVSQk9TSVRZIiwNCiAJCQkJ CSB2ZXJib3NpdHlfc3Vic3RpdHV0ZV9ob29rLA0KIAkJCQkJIHZlcmJvc2l0 eV9ob29rKTsNCisJU2V0VmFyaWFibGVIb29rcyhwc2V0LnZhcnMsICJTSE9X X0FMTF9SRVNVTFRTIiwNCisJCQkJCSBib29sX3N1YnN0aXR1dGVfaG9vaywN CisJCQkJCSBzaG93X2FsbF9yZXN1bHRzX2hvb2spOw0KIAlTZXRWYXJpYWJs ZUhvb2tzKHBzZXQudmFycywgIlNIT1dfQ09OVEVYVCIsDQogCQkJCQkgc2hv d19jb250ZXh0X3N1YnN0aXR1dGVfaG9vaywNCiAJCQkJCSBzaG93X2NvbnRl eHRfaG9vayk7DQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21w bGV0ZS5jIGIvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jDQppbmRleCBi ZDhlOWVhMmY4Li40NTBmMGUyYWMxIDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5jDQorKysgYi9zcmMvYmluL3BzcWwvdGFiLWNv bXBsZXRlLmMNCkBAIC00MTI0LDcgKzQxMjQsNyBAQCBwc3FsX2NvbXBsZXRp b24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQ0KIAkJ bWF0Y2hlcyA9IGNvbXBsZXRlX2Zyb21fdmFyaWFibGVzKHRleHQsICIiLCAi IiwgZmFsc2UpOw0KIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJcXHNldCIs IE1hdGNoQW55KSkNCiAJew0KLQkJaWYgKFRhaWxNYXRjaGVzQ1MoIkFVVE9D T01NSVR8T05fRVJST1JfU1RPUHxRVUlFVHwiDQorCQlpZiAoVGFpbE1hdGNo ZXNDUygiQVVUT0NPTU1JVHxPTl9FUlJPUl9TVE9QfFFVSUVUfFNIT1dfQUxM X1JFU1VMVFN8Ig0KIAkJCQkJCSAgIlNJTkdMRUxJTkV8U0lOR0xFU1RFUCIp KQ0KIAkJCUNPTVBMRVRFX1dJVEhfQ1MoIm9uIiwgIm9mZiIpOw0KIAkJZWxz ZSBpZiAoVGFpbE1hdGNoZXNDUygiQ09NUF9LRVlXT1JEX0NBU0UiKSkNCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvcHlzZWxl Y3Qub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb3B5c2VsZWN0 Lm91dA0KaW5kZXggNzI4NjVmZTFlYi4uYmI5ZTAyNmY5MSAxMDA2NDQNCi0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5vdXQN CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29weXNlbGVjdC5v dXQNCkBAIC0xMjYsNyArMTI2LDcgQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0 ZG91dFw7IHNlbGVjdCAxLzA7CS0tIHJvdywgdGhlbiBlcnJvcg0KIEVSUk9S OiAgZGl2aXNpb24gYnkgemVybw0KIHNlbGVjdCAxLzBcOyBjb3B5IChzZWxl Y3QgMSkgdG8gc3Rkb3V0OyAtLSBlcnJvciBvbmx5DQogRVJST1I6ICBkaXZp c2lvbiBieSB6ZXJvDQotY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNv cHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAz OyAtLSAxIDIgMw0KK2NvcHkgKHNlbGVjdCAxKSB0byBzdGRvdXRcOyBjb3B5 IChzZWxlY3QgMikgdG8gc3Rkb3V0XDsgc2VsZWN0IDNcOyBzZWxlY3QgNDsg LS0gMSAyIDMgNA0KIDENCiAyDQogID9jb2x1bW4/IA0KQEAgLTEzNCw4ICsx MzQsMTggQEAgY29weSAoc2VsZWN0IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNl bGVjdCAyKSB0byBzdGRvdXRcOyBzZWxlY3QgMFw7IHNlbGVjdCAzOyAtLQ0K ICAgICAgICAgMw0KICgxIHJvdykNCiANCisgP2NvbHVtbj8gDQorLS0tLS0t LS0tLQ0KKyAgICAgICAgNA0KKygxIHJvdykNCisNCiBjcmVhdGUgdGFibGUg dGVzdDMgKGMgaW50KTsNCi1zZWxlY3QgMFw7IGNvcHkgdGVzdDMgZnJvbSBz dGRpblw7IGNvcHkgdGVzdDMgZnJvbSBzdGRpblw7IHNlbGVjdCAxOyAtLSAx DQorc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBjb3B5IHRl c3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsgLS0gMCAxDQorID9jb2x1bW4/ IA0KKy0tLS0tLS0tLS0NCisgICAgICAgIDANCisoMSByb3cpDQorDQogID9j b2x1bW4/IA0KIC0tLS0tLS0tLS0NCiAgICAgICAgIDENCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KaW5kZXggMWIyZjZiYzQx OC4uNzFlM2IxZTlmZSAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQNCkBAIC01MTc5LDMgKzUxNzksMjQzIEBAIExpc3Qg b2YgYWNjZXNzIG1ldGhvZHMNCiAgcGdfY2F0YWxvZyB8ICYmICAgfCBhbnlh cnJheSAgICAgIHwgYW55YXJyYXkgICAgICAgfCBib29sZWFuICAgICB8IG92 ZXJsYXBzDQogKDEgcm93KQ0KIA0KKy0tDQorLS0gY29tYmluZWQgcXVlcmll cw0KKy0tDQorQ1JFQVRFIEZVTkNUSU9OIHdhcm4obXNnIFRFWFQpIFJFVFVS TlMgQk9PTEVBTiBMQU5HVUFHRSBwbHBnc3FsDQorQVMgJCQNCisgIEJFR0lO IFJBSVNFIE5PVElDRSAnd2FybiAlJywgbXNnIDsgUkVUVVJOIFRSVUUgOyBF TkQNCiskJDsNCistLSBzaG93IGJvdGgNCitTRUxFQ1QgMSBBUyBvbmUgXDsg U0VMRUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAyIEFTIHR3byA7DQorIG9u ZSANCistLS0tLQ0KKyAgIDENCisoMSByb3cpDQorDQorTk9USUNFOiAgd2Fy biAxLjUNCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0 KSBsaW5lIDIgYXQgUkFJU0UNCisgd2FybiANCistLS0tLS0NCisgdA0KKygx IHJvdykNCisNCisgdHdvIA0KKy0tLS0tDQorICAgMg0KKygxIHJvdykNCisN CistLSBcZ3NldCBhcHBsaWVzIHRvIGxhc3QgcXVlcnkgb25seQ0KK1NFTEVD VCAzIEFTIHRocmVlIFw7IFNFTEVDVCB3YXJuKCczLjUnKSBcOyBTRUxFQ1Qg NCBBUyBmb3VyIFxnc2V0DQorIHRocmVlIA0KKy0tLS0tLS0NCisgICAgIDMN CisoMSByb3cpDQorDQorTk9USUNFOiAgd2FybiAzLjUNCitDT05URVhUOiAg UEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UN Cisgd2FybiANCistLS0tLS0NCisgdA0KKygxIHJvdykNCisNCitcZWNobyA6 dGhyZWUgOmZvdXINCis6dGhyZWUgNA0KKy0tIHN5bnRheCBlcnJvciBzdG9w cyBhbGwgcHJvY2Vzc2luZw0KK1NFTEVDVCA1IFw7IFNFTEVDVCA2ICsgXDsg U0VMRUNUIHdhcm4oJzYuNScpIFw7IFNFTEVDVCA3IDsNCitFUlJPUjogIHN5 bnRheCBlcnJvciBhdCBvciBuZWFyICI7Ig0KK0xJTkUgMTogU0VMRUNUIDUg OyBTRUxFQ1QgNiArIDsgU0VMRUNUIHdhcm4oJzYuNScpIDsgU0VMRUNUIDcg Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCistLSB3aXRo IGFib3J0ZWQgdHJhbnNhY3Rpb24sIHN0b3Agb24gZmlyc3QgZXJyb3INCitC RUdJTiBcOyBTRUxFQ1QgOCBBUyBlaWdodCBcOyBTRUxFQ1QgOS8wIEFTIG5p bmUgXDsgUk9MTEJBQ0sgXDsgU0VMRUNUIDEwIEFTIHRlbiA7DQorIGVpZ2h0 IA0KKy0tLS0tLS0NCisgICAgIDgNCisoMSByb3cpDQorDQorRVJST1I6ICBk aXZpc2lvbiBieSB6ZXJvDQorLS0gY2xvc2UgcHJldmlvdXNseSBhYm9ydGVk IHRyYW5zYWN0aW9uDQorUk9MTEJBQ0s7DQorLS0gbWlzYyBTUUwgY29tbWFu ZHMNCistLSAobm9uIFNFTEVDVCBvdXRwdXQgaXMgc2VudCB0byBzdGRlcnIs IHRodXMgaXMgbm90IHNob3duIGluIGV4cGVjdGVkIHJlc3VsdHMpDQorU0VM RUNUICdvaycgQVMgImJlZ2luIiBcOw0KK0NSRUFURSBUQUJMRSBwc3FsX2Nv bWljcyhzIFRFWFQpIFw7DQorSU5TRVJUIElOVE8gcHNxbF9jb21pY3MgVkFM VUVTICgnQ2FsdmluJyksICgnaG9iYmVzJykgXDsNCitDT1BZIHBzcWxfY29t aWNzIEZST00gU1RESU4gXDsNCitVUERBVEUgcHNxbF9jb21pY3MgU0VUIHMg PSAnSG9iYmVzJyBXSEVSRSBzID0gJ2hvYmJlcycgXDsNCitERUxFVEUgRlJP TSBwc3FsX2NvbWljcyBXSEVSRSBzID0gJ01vZScgXDsNCitDT1BZIHBzcWxf Y29taWNzIFRPIFNURE9VVCBcOw0KK1RSVU5DQVRFIHBzcWxfY29taWNzIFw7 DQorRFJPUCBUQUJMRSBwc3FsX2NvbWljcyBcOw0KK1NFTEVDVCAnb2snIEFT ICJkb25lIiA7DQorIGJlZ2luIA0KKy0tLS0tLS0NCisgb2sNCisoMSByb3cp DQorDQorQ2FsdmluDQorU3VzaWUNCitIb2JiZXMNCisgZG9uZSANCistLS0t LS0NCisgb2sNCisoMSByb3cpDQorDQorXHNldCBTSE9XX0FMTF9SRVNVTFRT IG9mZg0KK1NFTEVDVCAxIEFTIG9uZSBcOyBTRUxFQ1Qgd2FybignMS41Jykg XDsgU0VMRUNUIDIgQVMgdHdvIDsNCitOT1RJQ0U6ICB3YXJuIDEuNQ0KK0NP TlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJuKHRleHQpIGxpbmUgMiBh dCBSQUlTRQ0KKyB0d28gDQorLS0tLS0NCisgICAyDQorKDEgcm93KQ0KKw0K K1xzZXQgU0hPV19BTExfUkVTVUxUUyBvbg0KK0RST1AgRlVOQ1RJT04gd2Fy bihURVhUKTsNCistLQ0KKy0tIGF1dG9jb21taXQNCistLQ0KK1xlY2hvICcj IGluaXRpYWwgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorIyBpbml0aWFs IEFVVE9DT01NSVQ6IG9uDQorXHNldCBBVVRPQ09NTUlUIG9mZg0KK1xlY2hv ICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKyMgQVVUT0NPTU1JVDog b2ZmDQorLS0gaW1wbGljaXQgQkVHSU4NCitDUkVBVEUgVEFCTEUgZm9vKHMg VEVYVCk7DQorUk9MTEJBQ0s7DQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRFWFQp Ow0KK0lOU0VSVCBJTlRPIGZvbyhzKSBWQUxVRVMgKCdoZWxsbycpLCAoJ3dv cmxkJyk7DQorQ09NTUlUOw0KK0RST1AgVEFCTEUgZm9vOw0KK1JPTExCQUNL Ow0KK1NFTEVDVCAqIEZST00gZm9vIE9SREVSIEJZIDE7DQorICAgcyAgIA0K Ky0tLS0tLS0NCisgaGVsbG8NCisgd29ybGQNCisoMiByb3dzKQ0KKw0KK0RS T1AgVEFCTEUgZm9vOw0KK0NPTU1JVDsNCitcc2V0IEFVVE9DT01NSVQgb24N CitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCisjIEFVVE9D T01NSVQ6IG9uDQorLS0gZXhwbGljaXQgQkVHSU4NCitCRUdJTjsNCitDUkVB VEUgVEFCTEUgZm9vKHMgVEVYVCk7DQorSU5TRVJUIElOVE8gZm9vKHMpIFZB TFVFUyAoJ2hlbGxvJyksICgnd29ybGQnKTsNCitDT01NSVQ7DQorQkVHSU47 DQorRFJPUCBUQUJMRSBmb287DQorUk9MTEJBQ0s7DQorLS0gaW1wbGljaXQg dHJhbnNhY3Rpb25zDQorU0VMRUNUICogRlJPTSBmb28gT1JERVIgQlkgMTsN CisgICBzICAgDQorLS0tLS0tLQ0KKyBoZWxsbw0KKyB3b3JsZA0KKygyIHJv d3MpDQorDQorRFJPUCBUQUJMRSBmb287DQorXGVjaG8gJyMgZmluYWwgQVVU T0NPTU1JVDonIDpBVVRPQ09NTUlUDQorIyBmaW5hbCBBVVRPQ09NTUlUOiBv bg0KKy0tDQorLS0gdGVzdCBPTl9FUlJPUl9ST0xMQkFDSw0KKy0tDQorQ1JF QVRFIEZVTkNUSU9OIHBzcWxfZXJyb3IobXNnIFRFWFQpIFJFVFVSTlMgQk9P TEVBTiBBUyAkJA0KKyAgQkVHSU4NCisgICAgUkFJU0UgRVhDRVBUSU9OICdl cnJvciAlJywgbXNnOw0KKyAgRU5EOw0KKyQkIExBTkdVQUdFIHBscGdzcWw7 DQorXGVjaG8gJyMgaW5pdGlhbCBPTl9FUlJPUl9ST0xMQkFDSzonIDpPTl9F UlJPUl9ST0xMQkFDSw0KKyMgaW5pdGlhbCBPTl9FUlJPUl9ST0xMQkFDSzog b2ZmDQorXHNldCBPTl9FUlJPUl9ST0xMQkFDSyBvbg0KK1xlY2hvICcjIE9O X0VSUk9SX1JPTExCQUNLOicgOk9OX0VSUk9SX1JPTExCQUNLDQorIyBPTl9F UlJPUl9ST0xMQkFDSzogb24NCitcZWNobyAnIyBBVVRPQ09NTUlUOicgOkFV VE9DT01NSVQNCisjIEFVVE9DT01NSVQ6IG9uDQorQkVHSU47DQorQ1JFQVRF IFRBQkxFIGJsYShzIE5PX1NVQ0hfVFlQRSk7ICAgICAgICAgLS0gZmFpbHMN CitFUlJPUjogIHR5cGUgIm5vX3N1Y2hfdHlwZSIgZG9lcyBub3QgZXhpc3QN CitMSU5FIDE6IENSRUFURSBUQUJMRSBibGEocyBOT19TVUNIX1RZUEUpOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4NCitDUkVBVEUgVEFCTEUg YmxhKHMgVEVYVCk7ICAgICAgICAgICAgICAgICAtLSBzdWNjZWVkcw0KK1NF TEVDVCBwc3FsX2Vycm9yKCdvb3BzIScpOyAgICAgICAgICAgICAgIC0tIGZh aWxzDQorRVJST1I6ICBlcnJvciBvb3BzIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NR TCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0K K0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdDYWx2aW4nKSwgKCdIb2JiZXMn KTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkgMTsN CisgICBzICAgIA0KKy0tLS0tLS0tDQorIENhbHZpbg0KKyBIb2JiZXMNCiso MiByb3dzKQ0KKw0KK0JFR0lOOw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMg KCdTdXNpZScpOyAgICAgICAgIC0tIHN1Y2NlZWRzDQorLS0gY29tYmluZWQg cXVlcmllcw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdSb3NhbHluJykg XDsgICAgIC0tIHdpbGwgcm9sbGJhY2sNCitTRUxFQ1QgJ2JlZm9yZSBlcnJv cicgQVMgc2hvdyBcOyAgICAgICAgICAtLSB3aWxsIHNob3chDQorICBTRUxF Q1QgcHNxbF9lcnJvcignYm91bSEnKSBcOyAgICAgICAgICAgLS0gZmFpbHVy ZQ0KKyAgU0VMRUNUICdhZnRlciBlcnJvcicgQVMgbm9zaG93OyAgICAgICAg IC0tIGhpZGRlbiBieSBwcmVjZWVkaW5nIGVycm9yDQorICAgICBzaG93ICAg ICANCistLS0tLS0tLS0tLS0tLQ0KKyBiZWZvcmUgZXJyb3INCisoMSByb3cp DQorDQorRVJST1I6ICBlcnJvciBib3VtIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NR TCBmdW5jdGlvbiBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0K K0lOU0VSVCBJTlRPIGJsYShzKSBWQUxVRVMgKCdNb2UnKSBcOyAgICAgIC0t IHdpbGwgcm9sbGJhY2sNCisgIFNFTEVDVCBwc3FsX2Vycm9yKCdiYW0hJyk7 DQorRVJST1I6ICBlcnJvciBiYW0hDQorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIHBzcWxfZXJyb3IodGV4dCkgbGluZSAzIGF0IFJBSVNFDQorSU5T RVJUIElOVE8gYmxhIFZBTFVFUyAoJ01pc3MgV29ybXdvb2QnKTsgLS0gc3Vj Y2VlZHMNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkg MTsNCisgICAgICAgcyAgICAgICANCistLS0tLS0tLS0tLS0tLS0NCisgQ2Fs dmluDQorIEhvYmJlcw0KKyBNaXNzIFdvcm13b29kDQorIFN1c2llDQorKDQg cm93cykNCisNCistLSBzb21lIHdpdGggYXV0b2NvbW1pdCBvZmYNCitcc2V0 IEFVVE9DT01NSVQgb2ZmDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRP Q09NTUlUDQorIyBBVVRPQ09NTUlUOiBvZmYNCistLSBpbXBsaWNpdCBCRUdJ Tg0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdEYWQnKTsgICAgICAgICAg IC0tIHN1Y2NlZWRzDQorU0VMRUNUIHBzcWxfZXJyb3IoJ2JhZCEnKTsgICAg ICAgICAgICAgICAgLS0gaW1wbGljaXQgcGFydGlhbCByb2xsYmFjaw0KK0VS Uk9SOiAgZXJyb3IgYmFkIQ0KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlv biBwc3FsX2Vycm9yKHRleHQpIGxpbmUgMyBhdCBSQUlTRQ0KK0lOU0VSVCBJ TlRPIGJsYSBWQUxVRVMgKCdNdW0nKSBcOyAgICAgICAgIC0tIHdpbGwgcm9s bGJhY2sNCitTRUxFQ1QgQ09VTlQoKikgQVMgIiNtdW0iDQorRlJPTSBibGEg V0hFUkUgcyA9ICdNdW0nIFw7ICAgICAgICAgICAgICAgLS0gYnV0IGJlIGNv dW50ZWQgaGVyZQ0KK1NFTEVDVCBwc3FsX2Vycm9yKCdiYWQhJyk7ICAgICAg ICAgICAgICAgIC0tIGltcGxpY2l0IHBhcnRpYWwgcm9sbGJhY2sNCisgI211 bSANCistLS0tLS0NCisgICAgMQ0KKygxIHJvdykNCisNCitFUlJPUjogIGVy cm9yIGJhZCENCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gcHNxbF9l cnJvcih0ZXh0KSBsaW5lIDMgYXQgUkFJU0UNCitDT01NSVQ7DQorU0VMRUNU ICogRlJPTSBibGEgT1JERVIgQlkgMTsNCisgICAgICAgcyAgICAgICANCist LS0tLS0tLS0tLS0tLS0NCisgQ2FsdmluDQorIERhZA0KKyBIb2JiZXMNCisg TWlzcyBXb3Jtd29vZA0KKyBTdXNpZQ0KKyg1IHJvd3MpDQorDQorLS0gcmVz ZXQNCitcc2V0IEFVVE9DT01NSVQgb24NCitcc2V0IE9OX0VSUk9SX1JPTExC QUNLIG9mZg0KK1xlY2hvICcjIGZpbmFsIE9OX0VSUk9SX1JPTExCQUNLOicg Ok9OX0VSUk9SX1JPTExCQUNLDQorIyBmaW5hbCBPTl9FUlJPUl9ST0xMQkFD Szogb2ZmDQorRFJPUCBUQUJMRSBibGE7DQorRFJPUCBGVU5DVElPTiBwc3Fs X2Vycm9yOw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdHJhbnNhY3Rpb25zLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdHJhbnNhY3Rpb25zLm91dA0KaW5kZXggNjE4NjJkNTk1ZC4uYmUxZGIw ZDVjMCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dHJhbnNhY3Rpb25zLm91dA0KKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC90cmFuc2FjdGlvbnMub3V0DQpAQCAtOTAwLDggKzkwMCwxOCBAQCBE Uk9QIFRBQkxFIGFiYzsNCiAtLSB0ZXN0cyByZWx5IG9uIHRoZSBmYWN0IHRo YXQgcHNxbCB3aWxsIG5vdCBicmVhayBTUUwgY29tbWFuZHMgYXBhcnQgYXQg YQ0KIC0tIGJhY2tzbGFzaC1xdW90ZWQgc2VtaWNvbG9uLCBidXQgd2lsbCBz ZW5kIHRoZW0gYXMgb25lIFF1ZXJ5Lg0KIGNyZWF0ZSB0ZW1wIHRhYmxlIGlf dGFibGUgKGYxIGludCk7DQotLS0gcHNxbCB3aWxsIHNob3cgb25seSB0aGUg bGFzdCByZXN1bHQgaW4gYSBtdWx0aS1zdGF0ZW1lbnQgUXVlcnkNCistLSBw c3FsIHdpbGwgc2hvdyBhbGwgcmVzdWx0cyBvZiBhIG11bHRpLXN0YXRlbWVu dCBRdWVyeQ0KIFNFTEVDVCAxXDsgU0VMRUNUIDJcOyBTRUxFQ1QgMzsNCisg P2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykN CisNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMg0KKygx IHJvdykNCisNCiAgP2NvbHVtbj8gDQogLS0tLS0tLS0tLQ0KICAgICAgICAg Mw0KQEAgLTkxNiw2ICs5MjYsMTIgQEAgaW5zZXJ0IGludG8gaV90YWJsZSB2 YWx1ZXMoMSlcOyBzZWxlY3QgKiBmcm9tIGlfdGFibGU7DQogDQogLS0gMS8w IGVycm9yIHdpbGwgY2F1c2Ugcm9sbGluZyBiYWNrIHRoZSB3aG9sZSBpbXBs aWNpdCB0cmFuc2FjdGlvbg0KIGluc2VydCBpbnRvIGlfdGFibGUgdmFsdWVz KDIpXDsgc2VsZWN0ICogZnJvbSBpX3RhYmxlXDsgc2VsZWN0IDEvMDsNCisg ZjEgDQorLS0tLQ0KKyAgMQ0KKyAgMg0KKygyIHJvd3MpDQorDQogRVJST1I6 ICBkaXZpc2lvbiBieSB6ZXJvDQogc2VsZWN0ICogZnJvbSBpX3RhYmxlOw0K ICBmMSANCkBAIC05MzUsOCArOTUxLDE4IEBAIFdBUk5JTkc6ICB0aGVyZSBp cyBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcw0KIC0tIGJlZ2luIGNvbnZl cnRzIGltcGxpY2l0IHRyYW5zYWN0aW9uIGludG8gYSByZWd1bGFyIG9uZSB0 aGF0DQogLS0gY2FuIGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgdGhlIFF1ZXJ5 DQogc2VsZWN0IDFcOyBiZWdpblw7IGluc2VydCBpbnRvIGlfdGFibGUgdmFs dWVzKDUpOw0KKyA/Y29sdW1uPyANCistLS0tLS0tLS0tDQorICAgICAgICAx DQorKDEgcm93KQ0KKw0KIGNvbW1pdDsNCiBzZWxlY3QgMVw7IGJlZ2luXDsg aW5zZXJ0IGludG8gaV90YWJsZSB2YWx1ZXMoNik7DQorID9jb2x1bW4/IA0K Ky0tLS0tLS0tLS0NCisgICAgICAgIDENCisoMSByb3cpDQorDQogcm9sbGJh Y2s7DQogLS0gY29tbWl0IGluIGltcGxpY2l0LXRyYW5zYWN0aW9uIHN0YXRl IGNvbW1pdHMgYnV0IGlzc3VlcyBhIHdhcm5pbmcuDQogaW5zZXJ0IGludG8g aV90YWJsZSB2YWx1ZXMoNylcOyBjb21taXRcOyBpbnNlcnQgaW50byBpX3Rh YmxlIHZhbHVlcyg4KVw7IHNlbGVjdCAxLzA7DQpAQCAtOTYzLDIyICs5ODks NTIgQEAgcm9sbGJhY2s7ICAtLSB3ZSBhcmUgbm90IGluIGEgdHJhbnNhY3Rp b24gYXQgdGhpcyBwb2ludA0KIFdBUk5JTkc6ICB0aGVyZSBpcyBubyB0cmFu c2FjdGlvbiBpbiBwcm9ncmVzcw0KIC0tIGltcGxpY2l0IHRyYW5zYWN0aW9u IGJsb2NrIGlzIHN0aWxsIGEgdHJhbnNhY3Rpb24gYmxvY2ssIGZvciBlLmcu IFZBQ1VVTQ0KIFNFTEVDVCAxXDsgVkFDVVVNOw0KKyA/Y29sdW1uPyANCist LS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAg VkFDVVVNIGNhbm5vdCBydW4gaW5zaWRlIGEgdHJhbnNhY3Rpb24gYmxvY2sN CiBTRUxFQ1QgMVw7IENPTU1JVFw7IFZBQ1VVTTsNCiBXQVJOSU5HOiAgdGhl cmUgaXMgbm8gdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MNCisgP2NvbHVtbj8g DQorLS0tLS0tLS0tLQ0KKyAgICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJP UjogIFZBQ1VVTSBjYW5ub3QgcnVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIGJs b2NrDQogLS0gd2UgZGlzYWxsb3cgc2F2ZXBvaW50LXJlbGF0ZWQgY29tbWFu ZHMgaW4gaW1wbGljaXQtdHJhbnNhY3Rpb24gc3RhdGUNCiBTRUxFQ1QgMVw7 IFNBVkVQT0lOVCBzcDsNCisgP2NvbHVtbj8gDQorLS0tLS0tLS0tLQ0KKyAg ICAgICAgMQ0KKygxIHJvdykNCisNCiBFUlJPUjogIFNBVkVQT0lOVCBjYW4g b25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9uIGJsb2Nrcw0KIFNFTEVDVCAx XDsgQ09NTUlUXDsgU0FWRVBPSU5UIHNwOw0KIFdBUk5JTkc6ICB0aGVyZSBp cyBubyB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcw0KKyA/Y29sdW1uPyANCist LS0tLS0tLS0tDQorICAgICAgICAxDQorKDEgcm93KQ0KKw0KIEVSUk9SOiAg U0FWRVBPSU5UIGNhbiBvbmx5IGJlIHVzZWQgaW4gdHJhbnNhY3Rpb24gYmxv Y2tzDQogUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHNwXDsgU0VMRUNUIDI7DQog RVJST1I6ICBST0xMQkFDSyBUTyBTQVZFUE9JTlQgY2FuIG9ubHkgYmUgdXNl ZCBpbiB0cmFuc2FjdGlvbiBibG9ja3MNCiBTRUxFQ1QgMlw7IFJFTEVBU0Ug U0FWRVBPSU5UIHNwXDsgU0VMRUNUIDM7DQorID9jb2x1bW4/IA0KKy0tLS0t LS0tLS0NCisgICAgICAgIDINCisoMSByb3cpDQorDQogRVJST1I6ICBSRUxF QVNFIFNBVkVQT0lOVCBjYW4gb25seSBiZSB1c2VkIGluIHRyYW5zYWN0aW9u IGJsb2Nrcw0KIC0tIGJ1dCB0aGlzIGlzIE9LLCBiZWNhdXNlIHRoZSBCRUdJ TiBjb252ZXJ0cyBpdCB0byBhIHJlZ3VsYXIgeGFjdA0KIFNFTEVDVCAxXDsg QkVHSU5cOyBTQVZFUE9JTlQgc3BcOyBST0xMQkFDSyBUTyBTQVZFUE9JTlQg c3BcOyBDT01NSVQ7DQorID9jb2x1bW4/IA0KKy0tLS0tLS0tLS0NCisgICAg ICAgIDENCisoMSByb3cpDQorDQogLS0gVGVzdHMgZm9yIEFORCBDSEFJTiBp biBpbXBsaWNpdCB0cmFuc2FjdGlvbiBibG9ja3MNCiBTRVQgVFJBTlNBQ1RJ T04gUkVBRCBPTkxZXDsgQ09NTUlUIEFORCBDSEFJTjsgIC0tIGVycm9yDQog RVJST1I6ICBDT01NSVQgQU5EIENIQUlOIGNhbiBvbmx5IGJlIHVzZWQgaW4g dHJhbnNhY3Rpb24gYmxvY2tzDQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvY29weXNlbGVjdC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jb3B5c2VsZWN0LnNxbA0KaW5kZXggMWQ5OGRhZDNjOC4uZTMyYTRmOGUz OCAxMDA2NDQNCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvcHlzZWxl Y3Quc3FsDQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb3B5c2VsZWN0 LnNxbA0KQEAgLTg0LDEwICs4NCwxMCBAQCBkcm9wIHRhYmxlIHRlc3QxOw0K IC0tIHBzcWwgaGFuZGxpbmcgb2YgQ09QWSBpbiBtdWx0aS1jb21tYW5kIHN0 cmluZ3MNCiBjb3B5IChzZWxlY3QgMSkgdG8gc3Rkb3V0XDsgc2VsZWN0IDEv MDsJLS0gcm93LCB0aGVuIGVycm9yDQogc2VsZWN0IDEvMFw7IGNvcHkgKHNl bGVjdCAxKSB0byBzdGRvdXQ7IC0tIGVycm9yIG9ubHkNCi1jb3B5IChzZWxl Y3QgMSkgdG8gc3Rkb3V0XDsgY29weSAoc2VsZWN0IDIpIHRvIHN0ZG91dFw7 IHNlbGVjdCAwXDsgc2VsZWN0IDM7IC0tIDEgMiAzDQorY29weSAoc2VsZWN0 IDEpIHRvIHN0ZG91dFw7IGNvcHkgKHNlbGVjdCAyKSB0byBzdGRvdXRcOyBz ZWxlY3QgM1w7IHNlbGVjdCA0OyAtLSAxIDIgMyA0DQogDQogY3JlYXRlIHRh YmxlIHRlc3QzIChjIGludCk7DQotc2VsZWN0IDBcOyBjb3B5IHRlc3QzIGZy b20gc3RkaW5cOyBjb3B5IHRlc3QzIGZyb20gc3RkaW5cOyBzZWxlY3QgMTsg LS0gMQ0KK3NlbGVjdCAwXDsgY29weSB0ZXN0MyBmcm9tIHN0ZGluXDsgY29w eSB0ZXN0MyBmcm9tIHN0ZGluXDsgc2VsZWN0IDE7IC0tIDAgMQ0KIDENCiBc Lg0KIDINCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3Fs LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsDQppbmRleCA2 ODEyMWQxNzFjLi5iMmYzZjMyNDA0IDEwMDY0NA0KLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcHNxbC5zcWwNCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsDQpAQCAtMTI0MSwzICsxMjQxLDEyMyBAQCBkcm9wIHJv bGUgcmVncmVzc19wYXJ0aXRpb25pbmdfcm9sZTsNCiBcZGZhIGJpdCogc21h bGwqDQogXGRvIC0gcGdfY2F0YWxvZy5pbnQ0DQogXGRvICYmIGFueWFycmF5 ICoNCisNCistLQ0KKy0tIGNvbWJpbmVkIHF1ZXJpZXMNCistLQ0KK0NSRUFU RSBGVU5DVElPTiB3YXJuKG1zZyBURVhUKSBSRVRVUk5TIEJPT0xFQU4gTEFO R1VBR0UgcGxwZ3NxbA0KK0FTICQkDQorICBCRUdJTiBSQUlTRSBOT1RJQ0Ug J3dhcm4gJScsIG1zZyA7IFJFVFVSTiBUUlVFIDsgRU5EDQorJCQ7DQorLS0g c2hvdyBib3RoDQorU0VMRUNUIDEgQVMgb25lIFw7IFNFTEVDVCB3YXJuKCcx LjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KKy0tIFxnc2V0IGFwcGxpZXMg dG8gbGFzdCBxdWVyeSBvbmx5DQorU0VMRUNUIDMgQVMgdGhyZWUgXDsgU0VM RUNUIHdhcm4oJzMuNScpIFw7IFNFTEVDVCA0IEFTIGZvdXIgXGdzZXQNCitc ZWNobyA6dGhyZWUgOmZvdXINCistLSBzeW50YXggZXJyb3Igc3RvcHMgYWxs IHByb2Nlc3NpbmcNCitTRUxFQ1QgNSBcOyBTRUxFQ1QgNiArIFw7IFNFTEVD VCB3YXJuKCc2LjUnKSBcOyBTRUxFQ1QgNyA7DQorLS0gd2l0aCBhYm9ydGVk IHRyYW5zYWN0aW9uLCBzdG9wIG9uIGZpcnN0IGVycm9yDQorQkVHSU4gXDsg U0VMRUNUIDggQVMgZWlnaHQgXDsgU0VMRUNUIDkvMCBBUyBuaW5lIFw7IFJP TExCQUNLIFw7IFNFTEVDVCAxMCBBUyB0ZW4gOw0KKy0tIGNsb3NlIHByZXZp b3VzbHkgYWJvcnRlZCB0cmFuc2FjdGlvbg0KK1JPTExCQUNLOw0KKy0tIG1p c2MgU1FMIGNvbW1hbmRzDQorLS0gKG5vbiBTRUxFQ1Qgb3V0cHV0IGlzIHNl bnQgdG8gc3RkZXJyLCB0aHVzIGlzIG5vdCBzaG93biBpbiBleHBlY3RlZCBy ZXN1bHRzKQ0KK1NFTEVDVCAnb2snIEFTICJiZWdpbiIgXDsNCitDUkVBVEUg VEFCTEUgcHNxbF9jb21pY3MocyBURVhUKSBcOw0KK0lOU0VSVCBJTlRPIHBz cWxfY29taWNzIFZBTFVFUyAoJ0NhbHZpbicpLCAoJ2hvYmJlcycpIFw7DQor Q09QWSBwc3FsX2NvbWljcyBGUk9NIFNURElOIFw7DQorVVBEQVRFIHBzcWxf Y29taWNzIFNFVCBzID0gJ0hvYmJlcycgV0hFUkUgcyA9ICdob2JiZXMnIFw7 DQorREVMRVRFIEZST00gcHNxbF9jb21pY3MgV0hFUkUgcyA9ICdNb2UnIFw7 DQorQ09QWSBwc3FsX2NvbWljcyBUTyBTVERPVVQgXDsNCitUUlVOQ0FURSBw c3FsX2NvbWljcyBcOw0KK0RST1AgVEFCTEUgcHNxbF9jb21pY3MgXDsNCitT RUxFQ1QgJ29rJyBBUyAiZG9uZSIgOw0KK01vZQ0KK1N1c2llDQorXC4NCitc c2V0IFNIT1dfQUxMX1JFU1VMVFMgb2ZmDQorU0VMRUNUIDEgQVMgb25lIFw7 IFNFTEVDVCB3YXJuKCcxLjUnKSBcOyBTRUxFQ1QgMiBBUyB0d28gOw0KK1xz ZXQgU0hPV19BTExfUkVTVUxUUyBvbg0KK0RST1AgRlVOQ1RJT04gd2FybihU RVhUKTsNCisNCistLQ0KKy0tIGF1dG9jb21taXQNCistLQ0KK1xlY2hvICcj IGluaXRpYWwgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlUDQorXHNldCBBVVRP Q09NTUlUIG9mZg0KK1xlY2hvICcjIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1J VA0KKy0tIGltcGxpY2l0IEJFR0lODQorQ1JFQVRFIFRBQkxFIGZvbyhzIFRF WFQpOw0KK1JPTExCQUNLOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsN CitJTlNFUlQgSU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3Js ZCcpOw0KK0NPTU1JVDsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFDSzsN CitTRUxFQ1QgKiBGUk9NIGZvbyBPUkRFUiBCWSAxOw0KK0RST1AgVEFCTEUg Zm9vOw0KK0NPTU1JVDsNCitcc2V0IEFVVE9DT01NSVQgb24NCitcZWNobyAn IyBBVVRPQ09NTUlUOicgOkFVVE9DT01NSVQNCistLSBleHBsaWNpdCBCRUdJ Tg0KK0JFR0lOOw0KK0NSRUFURSBUQUJMRSBmb28ocyBURVhUKTsNCitJTlNF UlQgSU5UTyBmb28ocykgVkFMVUVTICgnaGVsbG8nKSwgKCd3b3JsZCcpOw0K K0NPTU1JVDsNCitCRUdJTjsNCitEUk9QIFRBQkxFIGZvbzsNCitST0xMQkFD SzsNCistLSBpbXBsaWNpdCB0cmFuc2FjdGlvbnMNCitTRUxFQ1QgKiBGUk9N IGZvbyBPUkRFUiBCWSAxOw0KK0RST1AgVEFCTEUgZm9vOw0KK1xlY2hvICcj IGZpbmFsIEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KKw0KKy0tDQorLS0g dGVzdCBPTl9FUlJPUl9ST0xMQkFDSw0KKy0tDQorQ1JFQVRFIEZVTkNUSU9O IHBzcWxfZXJyb3IobXNnIFRFWFQpIFJFVFVSTlMgQk9PTEVBTiBBUyAkJA0K KyAgQkVHSU4NCisgICAgUkFJU0UgRVhDRVBUSU9OICdlcnJvciAlJywgbXNn Ow0KKyAgRU5EOw0KKyQkIExBTkdVQUdFIHBscGdzcWw7DQorXGVjaG8gJyMg aW5pdGlhbCBPTl9FUlJPUl9ST0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFD Sw0KK1xzZXQgT05fRVJST1JfUk9MTEJBQ0sgb24NCitcZWNobyAnIyBPTl9F UlJPUl9ST0xMQkFDSzonIDpPTl9FUlJPUl9ST0xMQkFDSw0KK1xlY2hvICcj IEFVVE9DT01NSVQ6JyA6QVVUT0NPTU1JVA0KK0JFR0lOOw0KK0NSRUFURSBU QUJMRSBibGEocyBOT19TVUNIX1RZUEUpOyAgICAgICAgIC0tIGZhaWxzDQor Q1JFQVRFIFRBQkxFIGJsYShzIFRFWFQpOyAgICAgICAgICAgICAgICAgLS0g c3VjY2VlZHMNCitTRUxFQ1QgcHNxbF9lcnJvcignb29wcyEnKTsgICAgICAg ICAgICAgICAtLSBmYWlscw0KK0lOU0VSVCBJTlRPIGJsYSBWQUxVRVMgKCdD YWx2aW4nKSwgKCdIb2JiZXMnKTsNCitDT01NSVQ7DQorU0VMRUNUICogRlJP TSBibGEgT1JERVIgQlkgMTsNCitCRUdJTjsNCitJTlNFUlQgSU5UTyBibGEg VkFMVUVTICgnU3VzaWUnKTsgICAgICAgICAtLSBzdWNjZWVkcw0KKy0tIGNv bWJpbmVkIHF1ZXJpZXMNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnUm9z YWx5bicpIFw7ICAgICAtLSB3aWxsIHJvbGxiYWNrDQorU0VMRUNUICdiZWZv cmUgZXJyb3InIEFTIHNob3cgXDsgICAgICAgICAgLS0gd2lsbCBzaG93IQ0K KyAgU0VMRUNUIHBzcWxfZXJyb3IoJ2JvdW0hJykgXDsgICAgICAgICAgIC0t IGZhaWx1cmUNCisgIFNFTEVDVCAnYWZ0ZXIgZXJyb3InIEFTIG5vc2hvdzsg ICAgICAgICAtLSBoaWRkZW4gYnkgcHJlY2VlZGluZyBlcnJvcg0KK0lOU0VS VCBJTlRPIGJsYShzKSBWQUxVRVMgKCdNb2UnKSBcOyAgICAgIC0tIHdpbGwg cm9sbGJhY2sNCisgIFNFTEVDVCBwc3FsX2Vycm9yKCdiYW0hJyk7DQorSU5T RVJUIElOVE8gYmxhIFZBTFVFUyAoJ01pc3MgV29ybXdvb2QnKTsgLS0gc3Vj Y2VlZHMNCitDT01NSVQ7DQorU0VMRUNUICogRlJPTSBibGEgT1JERVIgQlkg MTsNCistLSBzb21lIHdpdGggYXV0b2NvbW1pdCBvZmYNCitcc2V0IEFVVE9D T01NSVQgb2ZmDQorXGVjaG8gJyMgQVVUT0NPTU1JVDonIDpBVVRPQ09NTUlU DQorLS0gaW1wbGljaXQgQkVHSU4NCitJTlNFUlQgSU5UTyBibGEgVkFMVUVT ICgnRGFkJyk7ICAgICAgICAgICAtLSBzdWNjZWVkcw0KK1NFTEVDVCBwc3Fs X2Vycm9yKCdiYWQhJyk7ICAgICAgICAgICAgICAgIC0tIGltcGxpY2l0IHBh cnRpYWwgcm9sbGJhY2sNCitJTlNFUlQgSU5UTyBibGEgVkFMVUVTICgnTXVt JykgXDsgICAgICAgICAtLSB3aWxsIHJvbGxiYWNrDQorU0VMRUNUIENPVU5U KCopIEFTICIjbXVtIg0KK0ZST00gYmxhIFdIRVJFIHMgPSAnTXVtJyBcOyAg ICAgICAgICAgICAgIC0tIGJ1dCBiZSBjb3VudGVkIGhlcmUNCitTRUxFQ1Qg cHNxbF9lcnJvcignYmFkIScpOyAgICAgICAgICAgICAgICAtLSBpbXBsaWNp dCBwYXJ0aWFsIHJvbGxiYWNrDQorQ09NTUlUOw0KK1NFTEVDVCAqIEZST00g YmxhIE9SREVSIEJZIDE7DQorLS0gcmVzZXQNCitcc2V0IEFVVE9DT01NSVQg b24NCitcc2V0IE9OX0VSUk9SX1JPTExCQUNLIG9mZg0KK1xlY2hvICcjIGZp bmFsIE9OX0VSUk9SX1JPTExCQUNLOicgOk9OX0VSUk9SX1JPTExCQUNLDQor RFJPUCBUQUJMRSBibGE7DQorRFJPUCBGVU5DVElPTiBwc3FsX2Vycm9yOw0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3RyYW5zYWN0aW9u cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90cmFuc2FjdGlvbnMuc3Fs DQppbmRleCA4ODg2MjgwYzBhLi43ZmM5ZjA5NDY4IDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9zcWwvdHJhbnNhY3Rpb25zLnNxbA0KQEAgLTUw NCw3ICs1MDQsNyBAQCBEUk9QIFRBQkxFIGFiYzsNCiANCiBjcmVhdGUgdGVt cCB0YWJsZSBpX3RhYmxlIChmMSBpbnQpOw0KIA0KLS0tIHBzcWwgd2lsbCBz aG93IG9ubHkgdGhlIGxhc3QgcmVzdWx0IGluIGEgbXVsdGktc3RhdGVtZW50 IFF1ZXJ5DQorLS0gcHNxbCB3aWxsIHNob3cgYWxsIHJlc3VsdHMgb2YgYSBt dWx0aS1zdGF0ZW1lbnQgUXVlcnkNCiBTRUxFQ1QgMVw7IFNFTEVDVCAyXDsg U0VMRUNUIDM7DQogDQogLS0gdGhpcyBpbXBsaWNpdGx5IGNvbW1pdHM6DQo= --2056645051-1226747121-1623490885=:4105466--