From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-01.nifty.com (conssluserg-01.nifty.com [210.131.2.80]) by sourceware.org (Postfix) with ESMTPS id 153403858C60 for ; Mon, 20 Sep 2021 12:52:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 153403858C60 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-01.nifty.com with ESMTP id 18KCqQjd001402 for ; Mon, 20 Sep 2021 21:52:26 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 18KCqQjd001402 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1632142347; bh=80eabbQAXNg2EZixixVLIiWlfWoLdE4vsKRDA8HMspA=; h=Date:From:To:Subject:In-Reply-To:References:From; b=k0fpBDbblj+O0IleRnbfgV3TYElak+JpYwfb2i9rPOYvut9ZpTB+2PXJ1IsYsy+T4 7EMGAdVnUIJy0uJVzLEVGb8Qgck+yA7+5+AgF/qN77iZAohVzw4/SpfuRkg/9N2QR9 tne1FIeFEf8GSzV3NoliafghGxm4uMbIpNnJKZVa8PmHAgAiH7+NqlsFImTBMElvcL bGqC4f/neZexvO+jQPoDMsF/y1MTCOLqviaR1RVHY8nFmlz8naE1UsXBbjczf29d9z d4aoIj+Xy0qC8ovWgwtgsrFe90tNV14rWBS58A2aicnhwcvIt8rW9UVTO9ivKx1W/h 0H4rub5qp7yNg== X-Nifty-SrcIP: [110.4.221.123] Date: Mon, 20 Sep 2021 21:52:29 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: cygrunsrv + sshd + rsync = 20 times too slow -- throttled? Message-Id: <20210920215229.cea5722b2c2fcd7e03917108@nifty.ne.jp> In-Reply-To: References: <20210907122631.65452be8d021ec72259431d5@nifty.ne.jp> <20210909124115.555c6be15d675500617d284a@nifty.ne.jp> <20210909170549.506cc3c1f6029d904fece6dd@nifty.ne.jp> <20210909211940.51ef391e27d43f0421962cb8@nifty.ne.jp> <20210909214246.cd1ff1a3062fea27e51ad4ae@nifty.ne.jp> <33386baf-3b2d-d57f-2ad3-1bd328ed7935@cornell.edu> <20210911075734.aaf37697ba7db2ad14d911a3@nifty.ne.jp> <20210911113517.f74fc3ac1971bbf04c7a9bd1@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Mon__20_Sep_2021_21_52_29_+0900_Y8yTtbk_JoL28=NO" X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Sep 2021 12:52:46 -0000 This is a multi-part message in MIME format. --Multipart=_Mon__20_Sep_2021_21_52_29_+0900_Y8yTtbk_JoL28=NO Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Mon, 13 Sep 2021 11:07:42 +0200 Corinna Vinschen wrote: > On Sep 11 11:35, Takashi Yano wrote: > > Keeping read handle in write pipe (Corinna's query_hdl) causes problem > > that write side cannot detect close on read side. > > Is it possible to open read handle temporally when pipe_data_available() > > is called? > > 1. You would have to know which process keeps the other side of the pipe. > 2. You would have to have the permission to open the other process to > duplicate the pipe into your own process > 3. You would have to know the HANDLE value of the read side of your pipe > in that other process. > > Point 1 is (kind of) doable using GetNamedPipeClientProcessId or > GetNamedPipeServerProcessId. ZIt's not clear how reliable these > functions are, given that both pipe sides are created by the same > process and then usually inherited by two child processes communicating > over that pipe. > > Point 2 is most of the time the case, especially when talking with > native processes. > > Point 3 requires some sort of IPC. > > Having said that, I think this is too complicated. In the current implementation, there is a potential risk that write side fails to detect the closure of read side if more than one writers exist and one of them is non-cygwin process. Therefore, I had tried to implement the above idea (tentative query handle). Finally, I could convince myself to some extent, so I attach a patch for that. As for point 1 and 3, I used NtQuerySystemInformation() with SystemHandleInformation. I also used NtQueryObject() with ObjectNameInformation in order to know which handle is the other side of the pipe. As for point 2, it is not possible to open the process which is running as a service, so the current query_hdl is used for such process as an exception. Ken, WDYT of this implementation? -- Takashi Yano --Multipart=_Mon__20_Sep_2021_21_52_29_+0900_Y8yTtbk_JoL28=NO Content-Type: application/octet-stream; name="v2-0001-Cygwin-pipe-Introduce-tentative-query_hdl.patch" Content-Disposition: attachment; filename="v2-0001-Cygwin-pipe-Introduce-tentative-query_hdl.patch" Content-Transfer-Encoding: base64 RnJvbSA5OGIwZTNmMGRiYTM4Mjc1MWNiZTg1YzFhOGFlNDQzMjdjNTkyZDRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogTW9uLCAyMCBTZXAgMjAyMSAxNjozMDoyMCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEN5Z3dpbjogcGlwZTogSW50cm9kdWNlIHRlbnRhdGl2ZSBxdWVyeV9oZGwuCgotIFRoZSBj b21taXQgZjc5YTQ2MTEgaW50cm9kdWNlZCBxdWVyeV9oZGwgd2hpY2ggaXMgdGhlIHJlYWQgcGlw ZQogIGhhbmRsZSBrZXB0IGluIHRoZSB3cml0ZSBwaXBlIGluc3RhbmNlIGluIG9yZGVyIHRvIGRl dGVybWluZSBpZgogIHRoZSBwaXBlIGlzIHJlYWR5IHRvIHdyaXRlIGluIHNlbGVjdCgpLiBUaGlz IGltcGxlbWVudGF0aW9uIGhhcwogIGEgcG90ZW50aWFsIHJpc2sgdGhhdCB3cml0ZSBzaWRlIGZh aWxzIHRvIGRldGVjdCB0aGUgY2xvc3VyZSBvZgogIHJlYWQgc2lkZSBpZiBtb3JlIHRoYW4gb25l IHdyaXRlcnMgZXhpc3QgYW5kIG9uZSBvZiB0aGVtIGlzIG5vbi0KICBjeWd3aW4gcHJvY2Vzcy4K CiAgV2l0aCB0aGlzIHBhdGNoLCB0aGUgc3RyYXRlZ3kgb2YgY29tbWl0IGY3OWE0NjExIGlzIHVz ZWQgb25seSBpZgogIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgYSBzZXJ2aWNlLiBGb3Igbm9y bWFsIHByb2Nlc3MsIGluc3RlYWQKICBvZiBrZWVwaW5nIHF1ZXJ5X2hkbCBpbiB0aGUgd3JpdGUg cGlwZSBpbnN0YW5jZSwgaXQgaXMgcmV0cmlldmVkCiAgdGVudGF0aXZlbHkgd2hlbiBzZWxlY3Qo KSBpcyBjYWxsZWQuIEFjdHVhbGx5LCB3ZSB3YW50IHRvIHVzZQogIHRlbnRhdGl2ZSBxdWVyeV9o ZGwgZm9yIGFsbCBwcm9jZXNzZXMsIGhvd2V2ZXIsIGl0IGRvZXMgbm90IHdvcmsKICBmb3Igc2Vy dmljZSBwcm9jZXNzZXMgZHVlIHRvIE9wZW5Qcm9jZXNzKCkgZmFpbHVyZS4KLS0tCiB3aW5zdXAv Y3lnd2luL2ZoYW5kbGVyLmggICAgICAgfCAgIDMgKwogd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9w aXBlLmNjIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgIHwgICA4ICstCiAzIGZpbGVzIGNoYW5nZWQsIDEzOSBpbnNl cnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXIuaCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCAzNDcxZTk1YjkuLmQxMTQ5 ZDMwMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9j eWd3aW4vZmhhbmRsZXIuaApAQCAtMTE5MSw2ICsxMTkxLDggQEAgcHJpdmF0ZToKICAgcGlkX3Qg cG9wZW5fcGlkOwogICBIQU5ETEUgcXVlcnlfaGRsOwogICBIQU5ETEUgaGRsX2NudF9tdHg7Cisg IEhBTkRMRSBxdWVyeV9oZGxfcHJvYzsKKyAgSEFORExFIHF1ZXJ5X2hkbF92YWx1ZTsKICAgdm9p ZCByZWxlYXNlX3NlbGVjdF9zZW0gKGNvbnN0IGNoYXIgKik7CiBwdWJsaWM6CiAgIGZoYW5kbGVy X3BpcGUgKCk7CkBAIC0xMjQ5LDYgKzEyNTEsNyBAQCBwdWJsaWM6CiAgICAgICB9CiAgIH0KICAg Ym9vbCByZWFkZXJfY2xvc2VkICgpOworICBIQU5ETEUgdGVudGF0aXZlX3F1ZXJ5X2hkbCAoKTsK IH07CiAKICNkZWZpbmUgQ1lHV0lOX0ZJRk9fUElQRV9OQU1FX0xFTiAgICAgNDcKZGlmZiAtLWdp dCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfcGlwZS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRs ZXJfcGlwZS5jYwppbmRleCA2YjQxYTc1NWYuLmZiMmQwNmJiOCAxMDA2NDQKLS0tIGEvd2luc3Vw L2N5Z3dpbi9maGFuZGxlcl9waXBlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfcGlw ZS5jYwpAQCAtMTksNiArMTksNyBAQCBkZXRhaWxzLiAqLwogI2luY2x1ZGUgImN5Z2hlYXAuaCIK ICNpbmNsdWRlICJwaW5mby5oIgogI2luY2x1ZGUgInNoYXJlZF9pbmZvLmgiCisjaW5jbHVkZSAi dGxzX3BidWYuaCIKIAogLyogVGhpcyBpcyBvbmx5IHRvIGJlIHVzZWQgZm9yIHdyaXRpbmcuICBX aGVuIHJlYWRpbmcsCiBTVEFUVVNfUElQRV9FTVBUWSBzaW1wbHkgbWVhbnMgdGhlcmUncyBubyBk YXRhIHRvIGJlIHJlYWQuICovCkBAIC0yMjAsOCArMjIxLDYgQEAgZmhhbmRsZXJfcGlwZTo6b3Bl bl9zZXR1cCAoaW50IGZsYWdzKQogCSAgZ290byBlcnJfY2xvc2VfcmVhZF9tdHg7CiAJfQogICAg IH0KLSAgaWYgKGdldF9kZXYgKCkgPT0gRkhfUElQRVcgJiYgIXF1ZXJ5X2hkbCkKLSAgICBzZXRf cGlwZV9ub25fYmxvY2tpbmcgKGlzX25vbmJsb2NraW5nICgpKTsKICAgcmV0dXJuIHRydWU7CiAK IGVycl9jbG9zZV9yZWFkX210eDoKQEAgLTI2Nyw3ICsyNjYsNyBAQCBmaGFuZGxlcl9waXBlOjpy ZWxlYXNlX3NlbGVjdF9zZW0gKGNvbnN0IGNoYXIgKmZyb20pCiAgICAgICAtIGdldF9vYmpfaGFu ZGxlX2NvdW50IChyZWFkX210eCk7CiAgIGVsc2UgLyogTnVtYmVyIG9mIHNlbGVjdCgpIGNhbGwg Ki8KICAgICBuX3JlbGVhc2UgPSBnZXRfb2JqX2hhbmRsZV9jb3VudCAoc2VsZWN0X3NlbSkKLSAg ICAgIC0gZ2V0X29ial9oYW5kbGVfY291bnQgKHF1ZXJ5X2hkbCk7CisgICAgICAtIGdldF9vYmpf aGFuZGxlX2NvdW50IChoZGxfY250X210eCk7CiAgIGRlYnVnX3ByaW50ZigiJXMoJXMpIHJlbGVh c2UgJWQiLCBmcm9tLAogCSAgICAgICBnZXRfZGV2ICgpID09IEZIX1BJUEVSID8gIlBJUEVSIiA6 ICJQSVBFVyIsIG5fcmVsZWFzZSk7CiAgIGlmIChuX3JlbGVhc2UpCkBAIC02NjcsNiArNjY2LDgg QEAgZmhhbmRsZXJfcGlwZTo6Y2xvc2UgKCkKICAgaW50IHJldCA9IGZoYW5kbGVyX2Jhc2U6OmNs b3NlICgpOwogICBSZWxlYXNlTXV0ZXggKGhkbF9jbnRfbXR4KTsKICAgQ2xvc2VIYW5kbGUgKGhk bF9jbnRfbXR4KTsKKyAgaWYgKHF1ZXJ5X2hkbF9wcm9jKQorICAgIENsb3NlSGFuZGxlIChxdWVy eV9oZGxfcHJvYyk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTgyMCw2ICs4MjEsMTMgQEAgZmhh bmRsZXJfcGlwZTo6Y3JlYXRlIChMUFNFQ1VSSVRZX0FUVFJJQlVURVMgc2FfcHRyLCBQSEFORExF IHIsIFBIQU5ETEUgdywKICAgcmV0dXJuIDA7CiB9CiAKK2lubGluZSBzdGF0aWMgYm9vbAoraXNf cnVubmluZ19hc19zZXJ2aWNlICh2b2lkKQoreworICByZXR1cm4gY2hlY2tfdG9rZW5fbWVtYmVy c2hpcCAod2VsbF9rbm93bl9zZXJ2aWNlX3NpZCkKKyAgICB8fCBjeWdoZWFwLT51c2VyLnNhdmVk X3NpZCAoKSA9PSB3ZWxsX2tub3duX3N5c3RlbV9zaWQ7Cit9CisKIC8qIFRoZSBuZXh0IHZlcnNp b24gb2YgZmhhbmRsZXJfcGlwZTo6Y3JlYXRlIHVzZWQgdG8gY2FsbCB0aGUgcHJldmlvdXMKICAg IHZlcnNpb24uICBCdXQgdGhlIHJlYWQgaGFuZGxlIGNyZWF0ZWQgYnkgdGhlIGxhdHRlciBkb2Vz bid0IGhhdmUKICAgIEZJTEVfV1JJVEVfQVRUUklCVVRFUyBhY2Nlc3MgdW5sZXNzIHRoZSBwaXBl IGlzIGNyZWF0ZWQgd2l0aApAQCAtODc0LDcgKzg4Miw4IEBAIGZoYW5kbGVyX3BpcGU6OmNyZWF0 ZSAoZmhhbmRsZXJfcGlwZSAqZmhzWzJdLCB1bnNpZ25lZCBwc2l6ZSwgaW50IG1vZGUpCiAJCQkw LCBzYS0+YkluaGVyaXRIYW5kbGUsIERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCiAgICAgZ290byBl cnJfY2xvc2Vfc2VsZWN0X3NlbTA7CiAKLSAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKEdldEN1cnJl bnRQcm9jZXNzICgpLCByLAorICBpZiAoaXNfcnVubmluZ19hc19zZXJ2aWNlICgpICYmCisgICAg ICAhRHVwbGljYXRlSGFuZGxlIChHZXRDdXJyZW50UHJvY2VzcyAoKSwgciwKIAkJCUdldEN1cnJl bnRQcm9jZXNzICgpLCAmZmhzWzFdLT5xdWVyeV9oZGwsCiAJCQlGSUxFX1JFQURfREFUQSwgc2Et PmJJbmhlcml0SGFuZGxlLCAwKSkKICAgICBnb3RvIGVycl9jbG9zZV9zZWxlY3Rfc2VtMTsKQEAg LTg5Myw3ICs5MDIsOCBAQCBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKGZoYW5kbGVyX3BpcGUgKmZo c1syXSwgdW5zaWduZWQgcHNpemUsIGludCBtb2RlKQogZXJyX2Nsb3NlX2hkbF9jbnRfbXR4MDoK ICAgQ2xvc2VIYW5kbGUgKGZoc1swXS0+aGRsX2NudF9tdHgpOwogZXJyX2Nsb3NlX3F1ZXJ5X2hk bDoKLSAgQ2xvc2VIYW5kbGUgKGZoc1sxXS0+cXVlcnlfaGRsKTsKKyAgaWYgKGZoc1sxXS0+cXVl cnlfaGRsKQorICAgIENsb3NlSGFuZGxlIChmaHNbMV0tPnF1ZXJ5X2hkbCk7CiBlcnJfY2xvc2Vf c2VsZWN0X3NlbTE6CiAgIENsb3NlSGFuZGxlIChmaHNbMV0tPnNlbGVjdF9zZW0pOwogZXJyX2Ns b3NlX3NlbGVjdF9zZW0wOgpAQCAtOTQ2LDYgKzk1Niw3IEBAIG50X2NyZWF0ZSAoTFBTRUNVUklU WV9BVFRSSUJVVEVTIHNhX3B0ciwgSEFORExFICZyLCBIQU5ETEUgJncsCiAJCQkJIEdldEN1cnJl bnRQcm9jZXNzSWQgKCkpOwogCiAgIGFjY2VzcyA9IEdFTkVSSUNfUkVBRCB8IEZJTEVfV1JJVEVf QVRUUklCVVRFUyB8IFNZTkNIUk9OSVpFOworICBhY2Nlc3MgfD0gRklMRV9XUklURV9FQTsgLyog QWRkIHRoaXMgcmlnaHQgYXMgYSBtYXJrZXIgb2YgY3lnd2luIHJlYWQgcGlwZSAqLwogCiAgIFVM T05HIHBpcGVfdHlwZSA9IHBpcGVfYnl0ZSA/IEZJTEVfUElQRV9CWVRFX1NUUkVBTV9UWVBFCiAg ICAgOiBGSUxFX1BJUEVfTUVTU0FHRV9UWVBFOwpAQCAtMTExMiwzICsxMTIzLDExNiBAQCBmaGFu ZGxlcl9waXBlOjpmc3RhdHZmcyAoc3RydWN0IHN0YXR2ZnMgKnNmcykKICAgc2V0X2Vycm5vIChF QkFERik7CiAgIHJldHVybiAtMTsKIH0KKworSEFORExFCitmaGFuZGxlcl9waXBlOjp0ZW50YXRp dmVfcXVlcnlfaGRsICgpCit7CisgIGlmIChnZXRfZGV2ICgpICE9IEZIX1BJUEVXKQorICAgIHJl dHVybiBOVUxMOworICAvKiBUcnkgcHJvY2VzcyBoYW5kbGUgb3BlbmVkIGFuZCBwaXBlIGhhbmRs ZSB2YWx1ZSBjYWNoZWQgZmlyc3QKKyAgICAgaW4gb3JkZXIgdG8gcmVkdWNlIG92ZXJoZWFkLiAq LworICBpZiAocXVlcnlfaGRsX3Byb2MgJiYgcXVlcnlfaGRsX3ZhbHVlKQorICAgIHsKKyAgICAg IEhBTkRMRSBoOworICAgICAgaWYgKER1cGxpY2F0ZUhhbmRsZSAocXVlcnlfaGRsX3Byb2MsIHF1 ZXJ5X2hkbF92YWx1ZSwKKwkJCSAgIEdldEN1cnJlbnRQcm9jZXNzICgpLCAmaCwgRklMRV9SRUFE X0RBVEEsIDAsIDApKQorCXJldHVybiBoOworICAgICAgQ2xvc2VIYW5kbGUgKHF1ZXJ5X2hkbF9w cm9jKTsKKyAgICAgIHF1ZXJ5X2hkbF9wcm9jID0gTlVMTDsKKyAgICAgIHF1ZXJ5X2hkbF92YWx1 ZSA9IE5VTEw7CisgICAgfQorCisgIFVMT05HIGxlbjsKKyAgTlRTVEFUVVMgc3RhdHVzOworICB0 bXBfcGF0aGJ1ZiB0cDsKKyAgT0JKRUNUX05BTUVfSU5GT1JNQVRJT04gKm50Zm4gPShPQkpFQ1Rf TkFNRV9JTkZPUk1BVElPTiAqKSB0cC53X2dldCAoKTsKKyAgc3RhdHVzID0gTnRRdWVyeU9iamVj dCAoZ2V0X2hhbmRsZSAoKSwgT2JqZWN0TmFtZUluZm9ybWF0aW9uLCBudGZuLAorCQkJICA2NTUz NiwgJmxlbik7CisgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKKyAgICByZXR1cm4gTlVMTDsg LyogTm9uIGN5Z3dpbiBwaXBlPyAqLworICBXQ0hBUiBuYW1lW01BWF9QQVRIXTsKKyAgaW50IG5h bWVsZW4gPSBtaW4gKG50Zm4tPk5hbWUuTGVuZ3RoIC8gc2l6ZW9mIChXQ0hBUiksIE1BWF9QQVRI LTEpOworICBtZW1jcHkgKG5hbWUsIG50Zm4tPk5hbWUuQnVmZmVyLCBuYW1lbGVuICogc2l6ZW9m IChXQ0hBUikpOworICBuYW1lW25hbWVsZW5dID0gTCdcMCc7CisgIHVpbnQ2NF90IGtleTsKKyAg RFdPUkQgcGlkOworICBMT05HIGlkOworICBpZiAoc3dzY2FuZiAobmFtZSwgTCJcXERldmljZVxc TmFtZWRQaXBlXFwlbGx4LSV1LXBpcGUtbnQtMHgleCIsCisJICAgICAgICZrZXksICZwaWQsICZp ZCkgIT0gMykKKyAgICByZXR1cm4gTlVMTDsgLyogTm9uIGN5Z3dpbiBwaXBlPyAqLworCisgIFNJ WkVfVCBuX2hhbmRsZSA9IDY1NTM2OworICB0eXBlZGVmIHN0cnVjdAorICAgIHsKKyAgICAgIFVT SE9SVCBVbmlxdWVQcm9jZXNzSWQ7CisgICAgICBVU0hPUlQgQ3JlYXRvckJhY2tUcmFjZUluZGV4 OworICAgICAgVUNIQVIgT2JqZWN0VHlwZUluZGV4OworICAgICAgVUNIQVIgSGFuZGxlQXR0cmli dXRlczsKKyAgICAgIFVTSE9SVCBIYW5kbGVWYWx1ZTsKKyAgICAgIFBWT0lEIE9iamVjdDsKKyAg ICAgIFVMT05HIEdyYW50ZWRBY2Nlc3M7CisgICAgfSBTWVNURU1fSEFORExFX1RBQkxFX0VOVFJZ X0lORk87CisgIHR5cGVkZWYgc3RydWN0CisgICAgeworICAgICAgVUxPTkcgTnVtYmVyT2ZIYW5k bGVzOworICAgICAgU1lTVEVNX0hBTkRMRV9UQUJMRV9FTlRSWV9JTkZPIEhhbmRsZXNbMV07Cisg ICAgfSBTWVNURU1fSEFORExFX0lORk9STUFUSU9OOworICBTWVNURU1fSEFORExFX0lORk9STUFU SU9OICpzaGk7CisgIGRvCisgICAgeworICAgICAgU0laRV9UIG5ieXRlcyA9CisJc2l6ZW9mIChV TE9ORykgKyBuX2hhbmRsZSAqIHNpemVvZiAoU1lTVEVNX0hBTkRMRV9UQUJMRV9FTlRSWV9JTkZP KTsKKyAgICAgIHNoaSA9IChTWVNURU1fSEFORExFX0lORk9STUFUSU9OICopIEhlYXBBbGxvYyAo R2V0UHJvY2Vzc0hlYXAgKCksCisJCQkJCQkgICAgIDAsIG5ieXRlcyk7CisgICAgICBzdGF0dXMg PSBOdFF1ZXJ5U3lzdGVtSW5mb3JtYXRpb24gKFN5c3RlbUhhbmRsZUluZm9ybWF0aW9uLAorCQkJ CQkgc2hpLCBuYnl0ZXMsIE5VTEwpOworICAgICAgaWYgKE5UX1NVQ0NFU1MgKHN0YXR1cykpCisJ YnJlYWs7CisgICAgICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIHNoaSk7CisgICAg ICBuX2hhbmRsZSAqPSAyOworICAgIH0KKyAgd2hpbGUgKG5faGFuZGxlIDwgKDFMPDwyMCkpOwor ICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgSEFORExF IHFoID0gTlVMTDsKKyAgZm9yIChMT05HIGkgPSAoTE9ORykgc2hpLT5OdW1iZXJPZkhhbmRsZXMg LSAxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAvKiBDaGVjayBmb3IgdGhlIHBlY3VsaWFy aXR5IG9mIGN5Z3dpbiByZWFkIHBpcGUgKi8KKyAgICAgIERXT1JEIGFjY2VzcyA9IEZJTEVfUkVB RF9EQVRBIHwgRklMRV9SRUFEX0VBIHwgRklMRV9XUklURV9FQSAvKiBtYXJrZXIgKi8KKwl8IEZJ TEVfUkVBRF9BVFRSSUJVVEVTIHwgRklMRV9XUklURV9BVFRSSUJVVEVTCisJfCBSRUFEX0NPTlRS T0wgfCBTWU5DSFJPTklaRTsKKyAgICAgIGlmIChzaGktPkhhbmRsZXNbaV0uR3JhbnRlZEFjY2Vz cyAhPSBhY2Nlc3MpCisJY29udGludWU7CisKKyAgICAgIC8qIFJldHJpZXZlIGhhbmRsZSAqLwor ICAgICAgSEFORExFIHByb2MgPSBPcGVuUHJvY2VzcyAoUFJPQ0VTU19EVVBfSEFORExFLCAwLAor CQkJCSBzaGktPkhhbmRsZXNbaV0uVW5pcXVlUHJvY2Vzc0lkKTsKKyAgICAgIGlmICghcHJvYykK Kwljb250aW51ZTsKKyAgICAgIEhBTkRMRSBoID0gKEhBTkRMRSkoaW50cHRyX3QpIHNoaS0+SGFu ZGxlc1tpXS5IYW5kbGVWYWx1ZTsKKyAgICAgIEJPT0wgcmVzICA9IER1cGxpY2F0ZUhhbmRsZSAo cHJvYywgaCwgR2V0Q3VycmVudFByb2Nlc3MgKCksICZoLAorCQkJCSAgIEZJTEVfUkVBRF9EQVRB LCAwLCAwKTsKKyAgICAgIGlmICghcmVzKQorCWdvdG8gY2xvc2VfcHJvYzsKKworICAgICAgLyog Q2hlY2sgb2JqZWN0IG5hbWUgKi8KKyAgICAgIHN0YXR1cyA9IE50UXVlcnlPYmplY3QgKGgsIE9i amVjdE5hbWVJbmZvcm1hdGlvbiwgbnRmbiwgNjU1MzYsICZsZW4pOworICAgICAgaWYgKCFOVF9T VUNDRVNTIChzdGF0dXMpKQorCWdvdG8gY2xvc2VfaGFuZGxlOworICAgICAgbnRmbi0+TmFtZS5C dWZmZXJbbnRmbi0+TmFtZS5MZW5ndGggLyBzaXplb2YgKFdDSEFSKV0gPSBMJ1wwJzsKKyAgICAg IGlmICh3Y3NjbXAgKG5hbWUsIG50Zm4tPk5hbWUuQnVmZmVyKSA9PSAwKQorCXsKKwkgIHF1ZXJ5 X2hkbF9wcm9jID0gcHJvYzsKKwkgIHF1ZXJ5X2hkbF92YWx1ZSA9IChIQU5ETEUpKGludHB0cl90 KSBzaGktPkhhbmRsZXNbaV0uSGFuZGxlVmFsdWU7CisJICBxaCA9IGg7CisJICBicmVhazsKKwl9 CitjbG9zZV9oYW5kbGU6CisgICAgICBDbG9zZUhhbmRsZSAoaCk7CitjbG9zZV9wcm9jOgorICAg ICAgQ2xvc2VIYW5kbGUgKHByb2MpOworICAgIH0KKyAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFw ICgpLCAwLCBzaGkpOworICByZXR1cm4gcWg7Cit9CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2lu L3NlbGVjdC5jYyBiL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCmluZGV4IDMzYzBjMGJiMC4uMTU1 ODliNzExIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NlbGVjdC5jYworKysgYi93aW5zdXAv Y3lnd2luL3NlbGVjdC5jYwpAQCAtNjQxLDEwICs2NDEsMTYgQEAgcGlwZV9kYXRhX2F2YWlsYWJs ZSAoaW50IGZkLCBmaGFuZGxlcl9iYXNlICpmaCwgSEFORExFIGgsIGJvb2wgd3JpdGluZykKICAg ICAgIGlmIChmaC0+Z2V0X2RldmljZSAoKSA9PSBGSF9QSVBFVyAmJiBmcGxpLldyaXRlUXVvdGFB dmFpbGFibGUgPT0gMCkKIAl7CiAJICBIQU5ETEUgcXVlcnlfaGRsID0gKChmaGFuZGxlcl9waXBl ICopIGZoKS0+Z2V0X3F1ZXJ5X2hhbmRsZSAoKTsKKwkgIGlmICghcXVlcnlfaGRsKQorCSAgICBx dWVyeV9oZGwgPSAoKGZoYW5kbGVyX3BpcGUgKikgZmgpLT50ZW50YXRpdmVfcXVlcnlfaGRsICgp OwogCSAgaWYgKCFxdWVyeV9oZGwpCiAJICAgIHJldHVybiAxOyAvKiBXZSBjYW5ub3Qga25vdyBh Y3R1YWwgd3JpdGUgcGlwZSBzcGFjZS4gKi8KIAkgIERXT1JEIG5ieXRlc19pbl9waXBlOwotCSAg aWYgKCFQZWVrTmFtZWRQaXBlIChxdWVyeV9oZGwsIE5VTEwsIDAsIE5VTEwsICZuYnl0ZXNfaW5f cGlwZSwgTlVMTCkpCisJICBCT09MIHJlcyA9CisJICAgIFBlZWtOYW1lZFBpcGUgKHF1ZXJ5X2hk bCwgTlVMTCwgMCwgTlVMTCwgJm5ieXRlc19pbl9waXBlLCBOVUxMKTsKKwkgIGlmICghKChmaGFu ZGxlcl9waXBlICopIGZoKS0+Z2V0X3F1ZXJ5X2hhbmRsZSAoKSkKKwkgICAgQ2xvc2VIYW5kbGUg KHF1ZXJ5X2hkbCk7IC8qIENsb3NlIHRlbnRhdGl2ZSBxdWVyeV9oZGwgKi8KKwkgIGlmICghcmVz KQogCSAgICByZXR1cm4gMTsKIAkgIGZwbGkuV3JpdGVRdW90YUF2YWlsYWJsZSA9IGZwbGkuSW5i b3VuZFF1b3RhIC0gbmJ5dGVzX2luX3BpcGU7CiAJfQotLSAKMi4zMy4wCgo= --Multipart=_Mon__20_Sep_2021_21_52_29_+0900_Y8yTtbk_JoL28=NO--