From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 032B93858001 for ; Tue, 3 Nov 2020 18:03:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 032B93858001 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ChungLin_Tang@mentor.com IronPort-SDR: Kk16ZUb9p9CyMx9j3E9oh2wEduL2JRuFQs5XD5t2pAWs7HS/rGV/2BEq8lhjKbu3EIyxHPD4aH tOLgJTudKW2r8dBiXP2m4V9xiPzJsOEQjtAFAsIoZFKSPvEZjkvf7mpSXqaQHSEZNRKQRkvV9e ho9TG/cZnFuCVC8bzedHgP7bec+q5mub91aGPGw5PbyNfxy3aiJNl0BrFXWGy2dL14/YyNBe54 fVeKQyAjHeL9PUSjq2xjpnV69iV4bXqBrpfcsKFzAeM7TQieIUP/PNpQGDdaMiEgwSw8jC9aqI 9cM= X-IronPort-AV: E=Sophos;i="5.77,448,1596528000"; d="scan'208";a="54766828" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 03 Nov 2020 10:03:03 -0800 IronPort-SDR: tA0W+UcEBuH6mXexAF07dHqpa1VAH53yUAbjkGvub+FOwAmHxofpLGuU4FuCUMIUGqWchEwnaR A38EgVvETb81OVIzDtuy1cQGapb9zpvyRjgwJk3lvkgmruCmUT7PtrZGqwsiaEPNIBRm7b8mu4 JCyOGeeUQetBlo3ifN7Xt8e84PgStAffGJyuQhIOZfUXTnrza985UWWoC6+j3nE3meQ/p22e4O J9pKtb6T+U3QEH2Oq7Q6K4s3eVfdqkILluycv0o2Neay4ahgL6q2MBnai+yY0hgBDgISi9nUWC 6Vs= Subject: Re: [PATCH, 2/3, OpenMP] Target mapping changes for OpenMP 5.0, middle-end parts and compiler testcases To: Jakub Jelinek CC: gcc-patches , Tobias Burnus , Catherine Moore , Thomas Schwinge References: <20201013133123.GA2176@tucnak> <20201029114958.GF3788@tucnak> From: Chung-Lin Tang Message-ID: <31d867be-ed93-6eca-9e60-5168483b34a4@codesourcery.com> Date: Wed, 4 Nov 2020 02:02:56 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 MIME-Version: 1.0 In-Reply-To: <20201029114958.GF3788@tucnak> Content-Type: multipart/mixed; boundary="------------1A71A54A87B55E90497BDB65" Content-Language: en-US X-ClientProxiedBy: svr-orw-mbx-04.mgc.mentorg.com (147.34.90.204) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Nov 2020 18:03:08 -0000 --------------1A71A54A87B55E90497BDB65 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit On 2020/10/29 7:49 PM, Jakub Jelinek wrote: > On Wed, Oct 28, 2020 at 06:32:21PM +0800, Chung-Lin Tang wrote: >>>> @@ -8958,25 +9083,20 @@ gimplify_scan_omp_clauses (tree *list_p, gimple_seq *pre_p, >>>> /* An "attach/detach" operation on an update directive should >>>> behave as a GOMP_MAP_ALWAYS_POINTER. Beware that >>>> unlike attach or detach map kinds, GOMP_MAP_ALWAYS_POINTER >>>> depends on the previous mapping. */ >>>> if (code == OACC_UPDATE >>>> && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_ATTACH_DETACH) >>>> OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_ALWAYS_POINTER); >>>> - if (gimplify_expr (pd, pre_p, NULL, is_gimple_lvalue, fb_lvalue) >>>> - == GS_ERROR) >>>> - { >>>> - remove = true; >>>> - break; >>>> - } >>> So what gimplifies those now? >> >> They're gimplified somewhere during omp-low now. >> (some gimplify scan testcases were adjusted to accommodate this change) >> >> I don't remember the exact case I encountered, but there were some issues with gimplified >> expressions inside the map clauses making some later checking more difficult. I haven't seen >> any negative effect of this modification so far. > > I don't like that, it goes against many principles, gimplification really > shouldn't leave around non-GIMPLE IL. > If you need to compare same expression or same expression bases later, > perhaps detect the equalities during gimplification before actually gimplifying the > clauses and ensure they are gimplified to the same expression or are using > same base (e.g. by adding SAVE_EXPRs or TARGET_EXPRs before the > gimplification). I have moved that same gimplify_expr call down to below the processing block, and things still work as expected. My aforementioned gimple-scan-test modifications have all been reverted, and all original tests still pass correctly. Thanks, Chung-Lin gcc/ * gimplify.c (is_or_contains_p): New static helper function. (omp_target_reorder_clauses): New function. (gimplify_scan_omp_clauses): Add use of omp_target_reorder_clauses to reorder clause list according to OpenMP 5.0 rules. Add handling of GOMP_MAP_ATTACH_DETACH for OpenMP cases. * omp-low.c (is_omp_target): New static helper function. (scan_sharing_clauses): Add scan phase handling of GOMP_MAP_ATTACH/DETACH for OpenMP cases. (lower_omp_target): Add lowering handling of GOMP_MAP_ATTACH/DETACH for OpenMP cases. gcc/testsuite/ * c-c++-common/gomp/clauses-2.c: Remove dg-error cases now valid. * gfortran.dg/gomp/map-2.f90: Likewise. * c-c++-common/gomp/map-5.c: New testcase. --------------1A71A54A87B55E90497BDB65 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="omp5-tgtmapping.02.midend-testsuite.v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="omp5-tgtmapping.02.midend-testsuite.v3.patch" ZGlmZiAtLWdpdCBhL2djYy9naW1wbGlmeS5jIGIvZ2NjL2dpbXBsaWZ5LmMKaW5kZXggMjlm Mzg1YzkzNjguLmMyNTAwNjU2MTkzIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxpZnkuYworKysg Yi9nY2MvZ2ltcGxpZnkuYwpAQCAtODM2NCw2ICs4MzY0LDExMyBAQCBleHRyYWN0X2Jhc2Vf Yml0X29mZnNldCAodHJlZSBiYXNlLCB0cmVlICpiYXNlX3JlZiwgcG9seV9pbnQ2NCAqYml0 cG9zcCwKICAgcmV0dXJuIGJhc2U7CiB9CiAKKy8qIFJldHVybnMgdHJ1ZSBpZiBFWFBSIGlz IG9yIGNvbnRhaW5zIChhcyBhIHN1Yi1jb21wb25lbnQpIEJBU0VfUFRSLiAgKi8KKworc3Rh dGljIGJvb2wKK2lzX29yX2NvbnRhaW5zX3AgKHRyZWUgZXhwciwgdHJlZSBiYXNlX3B0cikK K3sKKyAgd2hpbGUgKGV4cHIgIT0gYmFzZV9wdHIpCisgICAgaWYgKFRSRUVfQ09ERSAoYmFz ZV9wdHIpID09IENPTVBPTkVOVF9SRUYpCisgICAgICBiYXNlX3B0ciA9IFRSRUVfT1BFUkFO RCAoYmFzZV9wdHIsIDApOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICByZXR1cm4gZXhw ciA9PSBiYXNlX3B0cjsKK30KKworLyogSW1wbGVtZW50IE9wZW5NUCA1LnggbWFwIG9yZGVy aW5nIHJ1bGVzIGZvciB0YXJnZXQgZGlyZWN0aXZlcy4gVGhlcmUgYXJlCisgICBzZXZlcmFs IHJ1bGVzLCBhbmQgd2l0aCBzb21lIGxldmVsIG9mIGFtYmlndWl0eSwgaG9wZWZ1bGx5IHdl IGNhbiBhdCBsZWFzdAorICAgY29sbGVjdCB0aGUgY29tcGxleGl0eSBoZXJlIGluIG9uZSBw bGFjZS4gICovCisKK3N0YXRpYyB2b2lkCitvbXBfdGFyZ2V0X3Jlb3JkZXJfY2xhdXNlcyAo dHJlZSAqbGlzdF9wKQoreworICAvKiBDb2xsZWN0IHJlZnMgdG8gYWxsb2MvcmVsZWFzZS9k ZWxldGUgbWFwcy4gICovCisgIGF1dG9fdmVjPHRyZWUsIDMyPiBhcmQ7CisgIHRyZWUgKmNw ID0gbGlzdF9wOworICB3aGlsZSAoKmNwICE9IE5VTExfVFJFRSkKKyAgICBpZiAoT01QX0NM QVVTRV9DT0RFICgqY3ApID09IE9NUF9DTEFVU0VfTUFQCisJJiYgKE9NUF9DTEFVU0VfTUFQ X0tJTkQgKCpjcCkgPT0gR09NUF9NQVBfQUxMT0MKKwkgICAgfHwgT01QX0NMQVVTRV9NQVBf S0lORCAoKmNwKSA9PSBHT01QX01BUF9SRUxFQVNFCisJICAgIHx8IE9NUF9DTEFVU0VfTUFQ X0tJTkQgKCpjcCkgPT0gR09NUF9NQVBfREVMRVRFKSkKKyAgICAgIHsKKwkvKiBVbmxpbmsg Y3AgYW5kIHB1c2ggdG8gYXJkLiAgKi8KKwl0cmVlIGMgPSAqY3A7CisJdHJlZSBuYyA9IE9N UF9DTEFVU0VfQ0hBSU4gKGMpOworCSpjcCA9IG5jOworCWFyZC5zYWZlX3B1c2ggKGMpOwor CisJLyogQW55IGFzc29jaWF0ZWQgcG9pbnRlciB0eXBlIG1hcHMgc2hvdWxkIGFsc28gbW92 ZSBhbG9uZy4gICovCisJd2hpbGUgKCpjcCAhPSBOVUxMX1RSRUUKKwkgICAgICAgJiYgT01Q X0NMQVVTRV9DT0RFICgqY3ApID09IE9NUF9DTEFVU0VfTUFQCisJICAgICAgICYmIChPTVBf Q0xBVVNFX01BUF9LSU5EICgqY3ApID09IEdPTVBfTUFQX0ZJUlNUUFJJVkFURV9SRUZFUkVO Q0UKKwkJICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAoKmNwKSA9PSBHT01QX01BUF9GSVJT VFBSSVZBVEVfUE9JTlRFUgorCQkgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EICgqY3ApID09 IEdPTVBfTUFQX0FUVEFDSF9ERVRBQ0gKKwkJICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAo KmNwKSA9PSBHT01QX01BUF9QT0lOVEVSCisJCSAgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQg KCpjcCkgPT0gR09NUF9NQVBfQUxXQVlTX1BPSU5URVIKKwkJICAgfHwgT01QX0NMQVVTRV9N QVBfS0lORCAoKmNwKSA9PSBHT01QX01BUF9UT19QU0VUKSkKKwkgIHsKKwkgICAgYyA9ICpj cDsKKwkgICAgbmMgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkgICAgKmNwID0gbmM7CisJ ICAgIGFyZC5zYWZlX3B1c2ggKGMpOworCSAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAg IGNwID0gJk9NUF9DTEFVU0VfQ0hBSU4gKCpjcCk7CisKKyAgLyogTGluayBhbGxvYy9yZWxl YXNlL2RlbGV0ZSBtYXBzIHRvIHRoZSBlbmQgb2YgbGlzdC4gICovCisgIGZvciAodW5zaWdu ZWQgaW50IGkgPSAwOyBpIDwgYXJkLmxlbmd0aCAoKTsgaSsrKQorICAgIHsKKyAgICAgICpj cCA9IGFyZFtpXTsKKyAgICAgIGNwID0gJk9NUF9DTEFVU0VfQ0hBSU4gKGFyZFtpXSk7Cisg ICAgfQorICAqY3AgPSBOVUxMX1RSRUU7CisKKyAgLyogT3Blbk1QIDUuMCByZXF1aXJlcyB0 aGF0IHBvaW50ZXIgdmFyaWFibGVzIGFyZSBtYXBwZWQgYmVmb3JlCisgICAgIGl0cyB1c2Ug YXMgYSBiYXNlLXBvaW50ZXIuICAqLworICBhdXRvX3ZlYzx0cmVlICosIDMyPiBhdGY7Cisg IGZvciAodHJlZSAqY3AgPSBsaXN0X3A7ICpjcDsgY3AgPSAmT01QX0NMQVVTRV9DSEFJTiAo KmNwKSkKKyAgICBpZiAoT01QX0NMQVVTRV9DT0RFICgqY3ApID09IE9NUF9DTEFVU0VfTUFQ KQorICAgICAgeworCS8qIENvbGxlY3QgYWxsb2MsIHRvLCBmcm9tLCB0by9mcm9tIGNsYXVz ZSB0cmVlIHBvaW50ZXJzLiAgKi8KKwlnb21wX21hcF9raW5kIGsgPSBPTVBfQ0xBVVNFX01B UF9LSU5EICgqY3ApOworCWlmIChrID09IEdPTVBfTUFQX0FMTE9DCisJICAgIHx8IGsgPT0g R09NUF9NQVBfVE8KKwkgICAgfHwgayA9PSBHT01QX01BUF9GUk9NCisJICAgIHx8IGsgPT0g R09NUF9NQVBfVE9GUk9NCisJICAgIHx8IGsgPT0gR09NUF9NQVBfQUxXQVlTX1RPCisJICAg IHx8IGsgPT0gR09NUF9NQVBfQUxXQVlTX0ZST00KKwkgICAgfHwgayA9PSBHT01QX01BUF9B TFdBWVNfVE9GUk9NKQorCSAgYXRmLnNhZmVfcHVzaCAoY3ApOworICAgICAgfQorCisgIGZv ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYXRmLmxlbmd0aCAoKTsgaSsrKQorICAgIGlm IChhdGZbaV0pCisgICAgICB7CisJdHJlZSAqY3AgPSBhdGZbaV07CisJdHJlZSBkZWNsID0g T01QX0NMQVVTRV9ERUNMICgqY3ApOworCWlmIChUUkVFX0NPREUgKGRlY2wpID09IElORElS RUNUX1JFRiB8fCBUUkVFX0NPREUgKGRlY2wpID09IE1FTV9SRUYpCisJICB7CisJICAgIHRy ZWUgYmFzZV9wdHIgPSBUUkVFX09QRVJBTkQgKGRlY2wsIDApOworCSAgICBTVFJJUF9UWVBF X05PUFMgKGJhc2VfcHRyKTsKKwkgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IGkgKyAxOyBq IDwgYXRmLmxlbmd0aCAoKTsgaisrKQorCSAgICAgIHsKKwkJdHJlZSAqY3AyID0gYXRmW2pd OworCQl0cmVlIGRlY2wyID0gT01QX0NMQVVTRV9ERUNMICgqY3AyKTsKKwkJaWYgKGlzX29y X2NvbnRhaW5zX3AgKGRlY2wyLCBiYXNlX3B0cikpCisJCSAgeworCQkgICAgLyogTW92ZSAq Y3AyIHRvIGJlZm9yZSAqY3AuICAqLworCQkgICAgdHJlZSBjID0gKmNwMjsKKwkJICAgICpj cDIgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkJICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMp ID0gKmNwOworCQkgICAgKmNwID0gYzsKKwkJICAgIGF0ZltqXSA9IE5VTEw7CisJCSAgfQor CSAgICAgIH0KKwkgIH0KKyAgICAgIH0KK30KKwogLyogU2NhbiB0aGUgT01QIGNsYXVzZXMg aW4gKkxJU1RfUCwgaW5zdGFsbGluZyBtYXBwaW5ncyBpbnRvIGEgbmV3CiAgICBhbmQgcHJl dmlvdXMgb21wIGNvbnRleHRzLiAgKi8KIApAQCAtODQwNSw2ICs4NTEyLDEyIEBAIGdpbXBs aWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3As CiAJYnJlYWs7CiAgICAgICB9CiAKKyAgaWYgKGNvZGUgPT0gT01QX1RBUkdFVAorICAgICAg fHwgY29kZSA9PSBPTVBfVEFSR0VUX0RBVEEKKyAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdF VF9FTlRFUl9EQVRBCisgICAgICB8fCBjb2RlID09IE9NUF9UQVJHRVRfRVhJVF9EQVRBKQor ICAgIG9tcF90YXJnZXRfcmVvcmRlcl9jbGF1c2VzIChsaXN0X3ApOworCiAgIHdoaWxlICgo YyA9ICpsaXN0X3ApICE9IE5VTEwpCiAgICAgewogICAgICAgYm9vbCByZW1vdmUgPSBmYWxz ZTsKQEAgLTg4NDUsMTUgKzg5NTgsMTggQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAo dHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkgICAgfQogCSAgZWxzZSBpZiAo KE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX0ZJUlNUUFJJVkFURV9QT0lO VEVSCiAJCSAgICB8fCAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykKLQkJCT09IEdPTVBfTUFQ X0ZJUlNUUFJJVkFURV9SRUZFUkVOQ0UpKQorCQkJPT0gR09NUF9NQVBfRklSU1RQUklWQVRF X1JFRkVSRU5DRSkKKwkJICAgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBf TUFQX0FUVEFDSF9ERVRBQ0gpCiAJCSAgICYmIFRSRUVfQ09ERSAoT01QX0NMQVVTRV9TSVpF IChjKSkgIT0gSU5URUdFUl9DU1QpCiAJICAgIHsKIAkgICAgICBPTVBfQ0xBVVNFX1NJWkUg KGMpCiAJCT0gZ2V0X2luaXRpYWxpemVkX3RtcF92YXIgKE9NUF9DTEFVU0VfU0laRSAoYyks IHByZV9wLCBOVUxMLAogCQkJCQkgICBmYWxzZSk7Ci0JICAgICAgb21wX2FkZF92YXJpYWJs ZSAoY3R4LCBPTVBfQ0xBVVNFX1NJWkUgKGMpLAotCQkJCUdPVkRfRklSU1RQUklWQVRFIHwg R09WRF9TRUVOKTsKKwkgICAgICBpZiAoKHJlZ2lvbl90eXBlICYgT1JUX1RBUkdFVCkgIT0g MCkKKwkJb21wX2FkZF92YXJpYWJsZSAoY3R4LCBPTVBfQ0xBVVNFX1NJWkUgKGMpLAorCQkJ CSAgR09WRF9GSVJTVFBSSVZBVEUgfCBHT1ZEX1NFRU4pOwogCSAgICB9CisKIAkgIGlmICgh REVDTF9QIChkZWNsKSkKIAkgICAgewogCSAgICAgIHRyZWUgZCA9IGRlY2wsICpwZDsKQEAg LTg4NzgsNyArODk5NCw3IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxp c3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJICAgICAgYm9vbCBpbmRpcl9wID0gZmFsc2U7 CiAJICAgICAgdHJlZSBvcmlnX2RlY2wgPSBkZWNsOwogCSAgICAgIHRyZWUgZGVjbF9yZWYg PSBOVUxMX1RSRUU7Ci0JICAgICAgaWYgKChyZWdpb25fdHlwZSAmIE9SVF9BQ0MpICE9IDAK KwkgICAgICBpZiAoKHJlZ2lvbl90eXBlICYgKE9SVF9BQ0MgfCBPUlRfVEFSR0VUIHwgT1JU X1RBUkdFVF9EQVRBKSkgIT0gMAogCQkgICYmIFRSRUVfQ09ERSAoKnBkKSA9PSBDT01QT05F TlRfUkVGCiAJCSAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfQVRU QUNIX0RFVEFDSAogCQkgICYmIGNvZGUgIT0gT0FDQ19VUERBVEUpCkBAIC04ODg2LDkgKzkw MDIsMTEgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1w bGVfc2VxICpwcmVfcCwKIAkJICB3aGlsZSAoVFJFRV9DT0RFIChkZWNsKSA9PSBDT01QT05F TlRfUkVGKQogCQkgICAgewogCQkgICAgICBkZWNsID0gVFJFRV9PUEVSQU5EIChkZWNsLCAw KTsKLQkJICAgICAgaWYgKChUUkVFX0NPREUgKGRlY2wpID09IE1FTV9SRUYKLQkJCSAgICYm IGludGVnZXJfemVyb3AgKFRSRUVfT1BFUkFORCAoZGVjbCwgMSkpKQotCQkJICB8fCBJTkRJ UkVDVF9SRUZfUCAoZGVjbCkpCisJCSAgICAgIGlmICgoKFRSRUVfQ09ERSAoZGVjbCkgPT0g TUVNX1JFRgorCQkJICAgICYmIGludGVnZXJfemVyb3AgKFRSRUVfT1BFUkFORCAoZGVjbCwg MSkpKQorCQkJICAgfHwgSU5ESVJFQ1RfUkVGX1AgKGRlY2wpKQorCQkJICAmJiAoVFJFRV9D T0RFIChUUkVFX1RZUEUgKFRSRUVfT1BFUkFORCAoZGVjbCwgMCkpKQorCQkJICAgICAgPT0g UE9JTlRFUl9UWVBFKSkKIAkJCXsKIAkJCSAgaW5kaXJfcCA9IHRydWU7CiAJCQkgIGRlY2wg PSBUUkVFX09QRVJBTkQgKGRlY2wsIDApOwpAQCAtODkxNSw4ICs5MDMzLDkgQEAgZ2ltcGxp Znlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwK IAkJfQogCSAgICAgIGlmIChkZWNsICE9IG9yaWdfZGVjbCAmJiBERUNMX1AgKGRlY2wpICYm IGluZGlyX3ApCiAJCXsKLQkJICBnb21wX21hcF9raW5kIGsgPSAoY29kZSA9PSBPQUNDX0VY SVRfREFUQSkgPyBHT01QX01BUF9ERVRBQ0gKLQkJCQkJCQkgICAgIDogR09NUF9NQVBfQVRU QUNIOworCQkgIGdvbXBfbWFwX2tpbmQgaworCQkgICAgPSAoKGNvZGUgPT0gT0FDQ19FWElU X0RBVEEgfHwgY29kZSA9PSBPTVBfVEFSR0VUX0VYSVRfREFUQSkKKwkJICAgICAgID8gR09N UF9NQVBfREVUQUNIIDogR09NUF9NQVBfQVRUQUNIKTsKIAkJICAvKiBXZSBoYXZlIGEgZGVy ZWZlcmVuY2Ugb2YgYSBzdHJ1Y3QgbWVtYmVyLiAgTWFrZSB0aGlzIGFuCiAJCSAgICAgYXR0 YWNoL2RldGFjaCBvcGVyYXRpb24sIGFuZCBlbnN1cmUgdGhlIGJhc2UgcG9pbnRlciBpcwog CQkgICAgIG1hcHBlZCBhcyBhIEZJUlNUUFJJVkFURV9QT0lOVEVSLiAgKi8KQEAgLTg5MjUs NiArOTA0NCw3IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwg Z2ltcGxlX3NlcSAqcHJlX3AsCiAJCSAgdHJlZSBuZXh0X2NsYXVzZSA9IE9NUF9DTEFVU0Vf Q0hBSU4gKGMpOwogCQkgIGlmIChrID09IEdPTVBfTUFQX0FUVEFDSAogCQkgICAgICAmJiBj b2RlICE9IE9BQ0NfRU5URVJfREFUQQorCQkgICAgICAmJiBjb2RlICE9IE9NUF9UQVJHRVRf RU5URVJfREFUQQogCQkgICAgICAmJiAoIW5leHRfY2xhdXNlCiAJCQkgICB8fCAoT01QX0NM QVVTRV9DT0RFIChuZXh0X2NsYXVzZSkgIT0gT01QX0NMQVVTRV9NQVApCiAJCQkgICB8fCAo T01QX0NMQVVTRV9NQVBfS0lORCAobmV4dF9jbGF1c2UpCkBAIC04OTcyLDE3ICs5MDkyLDEy IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3Nl cSAqcHJlX3AsCiAJICAgICAgaWYgKGNvZGUgPT0gT0FDQ19VUERBVEUKIAkJICAmJiBPTVBf Q0xBVVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9BVFRBQ0hfREVUQUNIKQogCQlPTVBf Q0xBVVNFX1NFVF9NQVBfS0lORCAoYywgR09NUF9NQVBfQUxXQVlTX1BPSU5URVIpOwotCSAg ICAgIGlmIChnaW1wbGlmeV9leHByIChwZCwgcHJlX3AsIE5VTEwsIGlzX2dpbXBsZV9sdmFs dWUsIGZiX2x2YWx1ZSkKLQkJICA9PSBHU19FUlJPUikKLQkJewotCQkgIHJlbW92ZSA9IHRy dWU7Ci0JCSAgYnJlYWs7Ci0JCX0KIAkgICAgICBpZiAoREVDTF9QIChkZWNsKQogCQkgICYm IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQX1RPX1BTRVQKIAkJICAmJiBP TVBfQ0xBVVNFX01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9BVFRBQ0gKIAkJICAmJiBPTVBf Q0xBVVNFX01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9ERVRBQ0gKLQkJICAmJiBjb2RlICE9 IE9BQ0NfVVBEQVRFKQorCQkgICYmIGNvZGUgIT0gT0FDQ19VUERBVEUKKwkJICAmJiBjb2Rl ICE9IE9NUF9UQVJHRVRfVVBEQVRFKQogCQl7CiAJCSAgaWYgKGVycm9yX29wZXJhbmRfcCAo ZGVjbCkpCiAJCSAgICB7CkBAIC05MDQ0LDE1ICs5MTU5LDE5IEBAIGdpbXBsaWZ5X3NjYW5f b21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJCSAgYm9v bCBoYXNfYXR0YWNobWVudHMgPSBmYWxzZTsKIAkJICAvKiBGb3IgT3BlbkFDQywgcG9pbnRl cnMgaW4gc3RydWN0cyBzaG91bGQgdHJpZ2dlciBhbgogCQkgICAgIGF0dGFjaCBhY3Rpb24u ICAqLwotCQkgIGlmIChhdHRhY2hfZGV0YWNoICYmIChyZWdpb25fdHlwZSAmIE9SVF9BQ0Mp ICE9IDApCisJCSAgaWYgKGF0dGFjaF9kZXRhY2gKKwkJICAgICAgJiYgKChyZWdpb25fdHlw ZSAmIChPUlRfQUNDIHwgT1JUX1RBUkdFVCB8IE9SVF9UQVJHRVRfREFUQSkpCisJCQkgIHx8 IGNvZGUgPT0gT01QX1RBUkdFVF9FTlRFUl9EQVRBCisJCQkgIHx8IGNvZGUgPT0gT01QX1RB UkdFVF9FWElUX0RBVEEpKQorCiAJCSAgICB7CiAJCSAgICAgIC8qIFR1cm4gYSBHT01QX01B UF9BVFRBQ0hfREVUQUNIIGNsYXVzZSBpbnRvIGEKIAkJCSBHT01QX01BUF9BVFRBQ0ggb3Ig R09NUF9NQVBfREVUQUNIIGNsYXVzZSBhZnRlciB3ZQogCQkJIGhhdmUgZGV0ZWN0ZWQgYSBj YXNlIHRoYXQgbmVlZHMgYSBHT01QX01BUF9TVFJVQ1QKIAkJCSBtYXBwaW5nIGFkZGVkLiAg Ki8KIAkJICAgICAgZ29tcF9tYXBfa2luZCBrCi0JCQk9IChjb2RlID09IE9BQ0NfRVhJVF9E QVRBKSA/IEdPTVBfTUFQX0RFVEFDSAotCQkJCQkJICAgOiBHT01QX01BUF9BVFRBQ0g7CisJ CQk9ICgoY29kZSA9PSBPQUNDX0VYSVRfREFUQSB8fCBjb2RlID09IE9NUF9UQVJHRVRfRVhJ VF9EQVRBKQorCQkJICAgPyBHT01QX01BUF9ERVRBQ0ggOiBHT01QX01BUF9BVFRBQ0gpOwog CQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYywgayk7CiAJCSAgICAgIGhhc19h dHRhY2htZW50cyA9IHRydWU7CiAJCSAgICB9CkBAIC05MTQ4LDMzICs5MjY3LDM4IEBAIGdp bXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJl X3AsCiAJCQkgICAgICBicmVhazsKIAkJCSAgICBpZiAoc2NwKQogCQkJICAgICAgY29udGlu dWU7Ci0JCQkgICAgdHJlZSBkMSA9IE9NUF9DTEFVU0VfREVDTCAoKnNjKTsKLQkJCSAgICB0 cmVlIGQyID0gT01QX0NMQVVTRV9ERUNMIChjKTsKLQkJCSAgICB3aGlsZSAoVFJFRV9DT0RF IChkMSkgPT0gQVJSQVlfUkVGKQotCQkJICAgICAgZDEgPSBUUkVFX09QRVJBTkQgKGQxLCAw KTsKLQkJCSAgICB3aGlsZSAoVFJFRV9DT0RFIChkMikgPT0gQVJSQVlfUkVGKQotCQkJICAg ICAgZDIgPSBUUkVFX09QRVJBTkQgKGQyLCAwKTsKLQkJCSAgICBpZiAoVFJFRV9DT0RFIChk MSkgPT0gSU5ESVJFQ1RfUkVGKQotCQkJICAgICAgZDEgPSBUUkVFX09QRVJBTkQgKGQxLCAw KTsKLQkJCSAgICBpZiAoVFJFRV9DT0RFIChkMikgPT0gSU5ESVJFQ1RfUkVGKQotCQkJICAg ICAgZDIgPSBUUkVFX09QRVJBTkQgKGQyLCAwKTsKLQkJCSAgICB3aGlsZSAoVFJFRV9DT0RF IChkMSkgPT0gQ09NUE9ORU5UX1JFRikKLQkJCSAgICAgIGlmIChUUkVFX0NPREUgKGQyKSA9 PSBDT01QT05FTlRfUkVGCi0JCQkJICAmJiBUUkVFX09QRVJBTkQgKGQxLCAxKQotCQkJCSAg ICAgPT0gVFJFRV9PUEVSQU5EIChkMiwgMSkpCi0JCQkJeworCQkJICAgIGlmICgocmVnaW9u X3R5cGUgJiBPUlRfQUNDKSAhPSAwKQorCQkJICAgICAgeworCQkJCS8qIFRoaXMgZHVwbGlj YXRlIGNoZWNraW5nIGNvZGUgaXMgY3VycmVudGx5IG9ubHkKKwkJCQkgICBlbmFibGVkIGZv ciBPcGVuQUNDLiAgKi8KKwkJCQl0cmVlIGQxID0gT01QX0NMQVVTRV9ERUNMICgqc2MpOwor CQkJCXRyZWUgZDIgPSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOworCQkJCXdoaWxlIChUUkVFX0NP REUgKGQxKSA9PSBBUlJBWV9SRUYpCiAJCQkJICBkMSA9IFRSRUVfT1BFUkFORCAoZDEsIDAp OworCQkJCXdoaWxlIChUUkVFX0NPREUgKGQyKSA9PSBBUlJBWV9SRUYpCiAJCQkJICBkMiA9 IFRSRUVfT1BFUkFORCAoZDIsIDApOwotCQkJCX0KLQkJCSAgICAgIGVsc2UKLQkJCQlicmVh azsKLQkJCSAgICBpZiAoZDEgPT0gZDIpCi0JCQkgICAgICB7Ci0JCQkJZXJyb3JfYXQgKE9N UF9DTEFVU0VfTE9DQVRJT04gKGMpLAotCQkJCQkgICIlcUUgYXBwZWFycyBtb3JlIHRoYW4g b25jZSBpbiBtYXAgIgotCQkJCQkgICJjbGF1c2VzIiwgT01QX0NMQVVTRV9ERUNMIChjKSk7 Ci0JCQkJcmVtb3ZlID0gdHJ1ZTsKLQkJCQlicmVhazsKKwkJCQlpZiAoVFJFRV9DT0RFIChk MSkgPT0gSU5ESVJFQ1RfUkVGKQorCQkJCSAgZDEgPSBUUkVFX09QRVJBTkQgKGQxLCAwKTsK KwkJCQlpZiAoVFJFRV9DT0RFIChkMikgPT0gSU5ESVJFQ1RfUkVGKQorCQkJCSAgZDIgPSBU UkVFX09QRVJBTkQgKGQyLCAwKTsKKwkJCQl3aGlsZSAoVFJFRV9DT0RFIChkMSkgPT0gQ09N UE9ORU5UX1JFRikKKwkJCQkgIGlmIChUUkVFX0NPREUgKGQyKSA9PSBDT01QT05FTlRfUkVG CisJCQkJICAgICAgJiYgVFJFRV9PUEVSQU5EIChkMSwgMSkKKwkJCQkgICAgICA9PSBUUkVF X09QRVJBTkQgKGQyLCAxKSkKKwkJCQkgICAgeworCQkJCSAgICAgIGQxID0gVFJFRV9PUEVS QU5EIChkMSwgMCk7CisJCQkJICAgICAgZDIgPSBUUkVFX09QRVJBTkQgKGQyLCAwKTsKKwkJ CQkgICAgfQorCQkJCSAgZWxzZQorCQkJCSAgICBicmVhazsKKwkJCQlpZiAoZDEgPT0gZDIp CisJCQkJICB7CisJCQkJICAgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwK KwkJCQkJICAgICAgIiVxRSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG1hcCAiCisJCQkJ CSAgICAgICJjbGF1c2VzIiwgT01QX0NMQVVTRV9ERUNMIChjKSk7CisJCQkJICAgIHJlbW92 ZSA9IHRydWU7CisJCQkJICAgIGJyZWFrOworCQkJCSAgfQogCQkJICAgICAgfQogCQkJICAg IGlmIChtYXliZV9sdCAob2Zmc2V0MSwgb2Zmc2V0bikKIAkJCQl8fCAoa25vd25fZXEgKG9m ZnNldDEsIG9mZnNldG4pCkBAIC05MjIwLDYgKzkzNDQsMTQgQEAgZ2ltcGxpZnlfc2Nhbl9v bXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkJCX0KIAkJ ICAgIH0KIAkJfQorCisJICAgICAgaWYgKGdpbXBsaWZ5X2V4cHIgKHBkLCBwcmVfcCwgTlVM TCwgaXNfZ2ltcGxlX2x2YWx1ZSwgZmJfbHZhbHVlKQorCQkgID09IEdTX0VSUk9SKQorCQl7 CisJCSAgcmVtb3ZlID0gdHJ1ZTsKKwkJICBicmVhazsKKwkJfQorCiAJICAgICAgaWYgKCFy ZW1vdmUKIAkJICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9BTFdB WVNfUE9JTlRFUgogCQkgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQ X0FUVEFDSF9ERVRBQ0gKQEAgLTkyMzYsMTAgKzkzNjgsNjAgQEAgZ2ltcGxpZnlfc2Nhbl9v bXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAogCSAgICAg IGJyZWFrOwogCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBERUNMX1AgKGRl Y2wpID09IHRydWUgICovCisJICAgICAgdHJlZSAqc2M7CisJICAgICAgaWYgKHN0cnVjdF9t YXBfdG9fY2xhdXNlCisJCSAgJiYgKHNjID0gc3RydWN0X21hcF90b19jbGF1c2UtPmdldCAo ZGVjbCkpICE9IE5VTEwKKwkJICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EICgqc2MpID09IEdP TVBfTUFQX1NUUlVDVAorCQkgICYmIGRlY2wgPT0gT01QX0NMQVVTRV9ERUNMICgqc2MpKQor CQl7CisJCSAgLyogV2UgaGF2ZSBmb3VuZCBhIG1hcCBvZiB0aGUgd2hvbGUgc3RydWN0dXJl IGFmdGVyIGEKKwkJICAgICBsZWFkaW5nIEdPTVBfTUFQX1NUUlVDVCBoYXMgYmVlbiBjcmVh dGVkLCBzbyByZWZpbGwgdGhlCisJCSAgICAgbGVhZGluZyBjbGF1c2UgaW50byBhIG1hcCBv ZiB0aGUgd2hvbGUgc3RydWN0dXJlCisJCSAgICAgdmFyaWFibGUsIGFuZCByZW1vdmUgdGhl IGN1cnJlbnQgb25lLgorCQkgICAgIFRPRE86IHdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92 ZSBzb21lIG1hcHMgb2YgdGhlCisJCSAgICAgZm9sbG93aW5nIHN0cnVjdHVyZSBlbGVtZW50 IG1hcHMgaWYgdGhleSBhcmUgb2YKKwkJICAgICBjb21wYXRpYmxlIFRPL0ZST00vQUxMT0Mg dHlwZS4gICovCisJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKCpzYywgT01QX0NMQVVT RV9NQVBfS0lORCAoYykpOworCQkgIE9NUF9DTEFVU0VfU0laRSAoKnNjKSA9IHVuc2hhcmVf ZXhwciAoT01QX0NMQVVTRV9TSVpFIChjKSk7CisJCSAgcmVtb3ZlID0gdHJ1ZTsKKwkJICBi cmVhazsKKwkJfQorCSAgICB9CiAJICBmbGFncyA9IEdPVkRfTUFQIHwgR09WRF9FWFBMSUNJ VDsKIAkgIGlmIChPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9BTFdBWVNf VE8KIAkgICAgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9BTFdB WVNfVE9GUk9NKQogCSAgICBmbGFncyB8PSBHT1ZEX01BUF9BTFdBWVNfVE87CisKKwkgIGlm ICgoY29kZSA9PSBPTVBfVEFSR0VUCisJICAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdFVF9E QVRBCisJICAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdFVF9FTlRFUl9EQVRBCisJICAgICAg IHx8IGNvZGUgPT0gT01QX1RBUkdFVF9FWElUX0RBVEEpCisJICAgICAgJiYgT01QX0NMQVVT RV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfQVRUQUNIX0RFVEFDSCkKKwkgICAgeworCSAg ICAgIGZvciAoc3RydWN0IGdpbXBsaWZ5X29tcF9jdHggKm9jdHggPSBvdXRlcl9jdHg7IG9j dHg7CisJCSAgIG9jdHggPSBvY3R4LT5vdXRlcl9jb250ZXh0KQorCQl7CisJCSAgc3BsYXlf dHJlZV9ub2RlIG4KKwkJICAgID0gc3BsYXlfdHJlZV9sb29rdXAgKG9jdHgtPnZhcmlhYmxl cywKKwkJCQkJIChzcGxheV90cmVlX2tleSkgT01QX0NMQVVTRV9ERUNMIChjKSk7CisJCSAg LyogSWYgdGhpcyBpcyBjb250YWluZWQgaW4gYW4gb3V0ZXIgT3Blbk1QIHJlZ2lvbiBhcyBh CisJCSAgICAgZmlyc3Rwcml2YXRlIHZhbHVlLCByZW1vdmUgdGhlIGF0dGFjaC9kZXRhY2gu ICAqLworCQkgIGlmIChuICYmIChuLT52YWx1ZSAmIEdPVkRfRklSU1RQUklWQVRFKSkKKwkJ ICAgIHsKKwkJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMsIEdPTVBfTUFQX0ZJ UlNUUFJJVkFURV9QT0lOVEVSKTsKKwkJICAgICAgZ290byBkb19hZGQ7CisJCSAgICB9CisJ CX0KKworCSAgICAgIGVudW0gZ29tcF9tYXBfa2luZCBtYXBfa2luZCA9IChjb2RlID09IE9N UF9UQVJHRVRfRVhJVF9EQVRBCisJCQkJCSAgICAgPyBHT01QX01BUF9ERVRBQ0gKKwkJCQkJ ICAgICA6IEdPTVBfTUFQX0FUVEFDSCk7CisJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJ TkQgKGMsIG1hcF9raW5kKTsKKwkgICAgfQorCiAJICBnb3RvIGRvX2FkZDsKIAogCWNhc2Ug T01QX0NMQVVTRV9ERVBFTkQ6CmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5jIGIvZ2NjL29t cC1sb3cuYwppbmRleCA2ZDBhYThkYWViMy4uYzQ1ZWUzNTllNjAgMTAwNjQ0Ci0tLSBhL2dj Yy9vbXAtbG93LmMKKysrIGIvZ2NjL29tcC1sb3cuYwpAQCAtMjE0LDYgKzIxNCwyMSBAQCBp c19vYWNjX2tlcm5lbHMgKG9tcF9jb250ZXh0ICpjdHgpCiAJICAgICAgPT0gR0ZfT01QX1RB UkdFVF9LSU5EX09BQ0NfS0VSTkVMUykpOwogfQogCisvKiBSZXR1cm4gdHJ1ZSBpZiBTVE1U IGNvcnJlc3BvbmRzIHRvIGFuIE9wZW5NUCB0YXJnZXQgcmVnaW9uLiAgKi8KK3N0YXRpYyBi b29sCitpc19vbXBfdGFyZ2V0IChnaW1wbGUgKnN0bXQpCit7CisgIGlmIChnaW1wbGVfY29k ZSAoc3RtdCkgPT0gR0lNUExFX09NUF9UQVJHRVQpCisgICAgeworICAgICAgaW50IGtpbmQg PSBnaW1wbGVfb21wX3RhcmdldF9raW5kIChzdG10KTsKKyAgICAgIHJldHVybiAoa2luZCA9 PSBHRl9PTVBfVEFSR0VUX0tJTkRfUkVHSU9OCisJICAgICAgfHwga2luZCA9PSBHRl9PTVBf VEFSR0VUX0tJTkRfREFUQQorCSAgICAgIHx8IGtpbmQgPT0gR0ZfT01QX1RBUkdFVF9LSU5E X0VOVEVSX0RBVEEKKwkgICAgICB8fCBraW5kID09IEdGX09NUF9UQVJHRVRfS0lORF9FWElU X0RBVEEpOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCiAvKiBJZiBERUNMIGlzIHRo ZSBhcnRpZmljaWFsIGR1bW15IFZBUl9ERUNMIGNyZWF0ZWQgZm9yIG5vbi1zdGF0aWMKICAg IGRhdGEgbWVtYmVyIHByaXZhdGl6YXRpb24sIHJldHVybiB0aGUgdW5kZXJseWluZyAidGhp cyIgcGFyYW1ldGVyLAogICAgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KQEAgLTEzNDYs NyArMTM2MSw5IEBAIHNjYW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVzZXMsIG9tcF9j b250ZXh0ICpjdHgpCiAJICAgICAgJiYgREVDTF9QIChkZWNsKQogCSAgICAgICYmICgoT01Q X0NMQVVTRV9NQVBfS0lORCAoYykgIT0gR09NUF9NQVBfRklSU1RQUklWQVRFX1BPSU5URVIK IAkJICAgJiYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpCi0JCSAgICAgICAhPSBHT01QX01B UF9GSVJTVFBSSVZBVEVfUkVGRVJFTkNFKSkKKwkJICAgICAgICE9IEdPTVBfTUFQX0ZJUlNU UFJJVkFURV9SRUZFUkVOQ0UpCisJCSAgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9 IEdPTVBfTUFQX0FUVEFDSAorCQkgICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSAhPSBH T01QX01BUF9ERVRBQ0gpCiAJCSAgfHwgVFJFRV9DT0RFIChUUkVFX1RZUEUgKGRlY2wpKSA9 PSBBUlJBWV9UWVBFKQogCSAgICAgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdP TVBfTUFQX0FMV0FZU19UTwogCSAgICAgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9 IEdPTVBfTUFQX0FMV0FZU19GUk9NCkBAIC0xMzY3LDYgKzEzODQsNDAgQEAgc2Nhbl9zaGFy aW5nX2NsYXVzZXMgKHRyZWUgY2xhdXNlcywgb21wX2NvbnRleHQgKmN0eCkKIAkJICAmJiAh T01QX0NMQVVTRV9NQVBfWkVST19CSUFTX0FSUkFZX1NFQ1RJT04gKGMpKQogCQlicmVhazsK IAkgICAgfQorCSAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9NQVAK KwkgICAgICAmJiBERUNMX1AgKGRlY2wpCisJICAgICAgJiYgKE9NUF9DTEFVU0VfTUFQX0tJ TkQgKGMpID09IEdPTVBfTUFQX0FUVEFDSAorCQkgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQg KGMpID09IEdPTVBfTUFQX0RFVEFDSCkKKwkgICAgICAmJiBpc19vbXBfdGFyZ2V0IChjdHgt PnN0bXQpKQorCSAgICB7CisJICAgICAgLyogSWYgdGhpcyBpcyBhbiBvZmZsb2FkZWQgcmVn aW9uLCBhbiBhdHRhY2ggb3BlcmF0aW9uIHNob3VsZAorCQkgb25seSBleGlzdCB3aGVuIHRo ZSBwb2ludGVyIHZhcmlhYmxlIGlzIG1hcHBlZCBpbiBhIHByaW9yCisJCSBjbGF1c2UuICAq LworCSAgICAgIGlmIChpc19naW1wbGVfb21wX29mZmxvYWRlZCAoY3R4LT5zdG10KSkKKwkJ Z2NjX2Fzc2VydAorCQkgIChtYXliZV9sb29rdXBfZGVjbCAoZGVjbCwgY3R4KQorCQkgICB8 fCAoaXNfZ2xvYmFsX3ZhciAobWF5YmVfbG9va3VwX2RlY2xfaW5fb3V0ZXJfY3R4IChkZWNs LCBjdHgpKQorCQkgICAgICAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoIm9tcCBkZWNsYXJlIHRh cmdldCIsCisJCQkJCSAgICBERUNMX0FUVFJJQlVURVMgKGRlY2wpKSkpOworCisJICAgICAg LyogQnkgaXRzZWxmLCBhdHRhY2gvZGV0YWNoIGlzIGdlbmVyYXRlZCBhcyBwYXJ0IG9mIHBv aW50ZXIKKwkJIHZhcmlhYmxlIG1hcHBpbmcgYW5kIHNob3VsZCBub3QgY3JlYXRlIG5ldyB2 YXJpYWJsZXMgaW4gdGhlCisJCSBvZmZsb2FkZWQgcmVnaW9uLCBob3dldmVyIHNlbmRlciBy ZWZzIGZvciBpdCBtdXN0IGJlIGNyZWF0ZWQKKwkJIGZvciBpdHMgYWRkcmVzcyB0byBiZSBw YXNzZWQgdG8gdGhlIHJ1bnRpbWUuICAqLworCSAgICAgIHRyZWUgZmllbGQKKwkJPSBidWls ZF9kZWNsIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCSAgICAgIEZJRUxEX0RFQ0ws IE5VTExfVFJFRSwgcHRyX3R5cGVfbm9kZSk7CisJICAgICAgU0VUX0RFQ0xfQUxJR04gKGZp ZWxkLCBUWVBFX0FMSUdOIChwdHJfdHlwZV9ub2RlKSk7CisJICAgICAgaW5zZXJ0X2ZpZWxk X2ludG9fc3RydWN0IChjdHgtPnJlY29yZF90eXBlLCBmaWVsZCk7CisJICAgICAgLyogVG8g bm90IGNsYXNoIHdpdGggYSBtYXAgb2YgdGhlIHBvaW50ZXIgdmFyaWFibGUgaXRzZWxmLAor CQkgYXR0YWNoL2RldGFjaCBtYXBzIGhhdmUgdGhlaXIgZmllbGQgbG9va2VkIHVwIGJ5IHRo ZSAqY2xhdXNlKgorCQkgdHJlZSBleHByZXNzaW9uLCBub3QgdGhlIGRlY2wuICAqLworCSAg ICAgIGdjY19hc3NlcnQgKCFzcGxheV90cmVlX2xvb2t1cCAoY3R4LT5maWVsZF9tYXAsCisJ CQkJCSAgICAgIChzcGxheV90cmVlX2tleSkgYykpOworCSAgICAgIHNwbGF5X3RyZWVfaW5z ZXJ0IChjdHgtPmZpZWxkX21hcCwgKHNwbGF5X3RyZWVfa2V5KSBjLAorCQkJCSAoc3BsYXlf dHJlZV92YWx1ZSkgZmllbGQpOworCSAgICAgIGJyZWFrOworCSAgICB9CiAJICBpZiAoT01Q X0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX01BUAogCSAgICAgICYmIChPTVBfQ0xB VVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9GSVJTVFBSSVZBVEVfUE9JTlRFUgogCQkg IHx8IChPTVBfQ0xBVVNFX01BUF9LSU5EIChjKQpAQCAtMTYwNiw2ICsxNjU3LDExIEBAIHNj YW5fc2hhcmluZ19jbGF1c2VzICh0cmVlIGNsYXVzZXMsIG9tcF9jb250ZXh0ICpjdHgpCiAJ ICAgICAgJiYgaXNfZ2xvYmFsX3ZhciAobWF5YmVfbG9va3VwX2RlY2xfaW5fb3V0ZXJfY3R4 IChkZWNsLCBjdHgpKQogCSAgICAgICYmIHZhcnBvb2xfbm9kZTo6Z2V0X2NyZWF0ZSAoZGVj bCktPm9mZmxvYWRhYmxlKQogCSAgICBicmVhazsKKwkgIGlmICgoT01QX0NMQVVTRV9NQVBf S0lORCAoYykgPT0gR09NUF9NQVBfQVRUQUNICisJICAgICAgIHx8IE9NUF9DTEFVU0VfTUFQ X0tJTkQgKGMpID09IEdPTVBfTUFQX0RFVEFDSCkKKwkgICAgICAmJiBpc19vbXBfdGFyZ2V0 IChjdHgtPnN0bXQpCisJICAgICAgJiYgIWlzX2dpbXBsZV9vbXBfb2ZmbG9hZGVkIChjdHgt PnN0bXQpKQorCSAgICBicmVhazsKIAkgIGlmIChERUNMX1AgKGRlY2wpKQogCSAgICB7CiAJ ICAgICAgaWYgKChPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9QT0lOVEVS CkBAIC0xMTQ1OCw2ICsxMTUxNCw4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBsZV9zdG10 X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkgIGNhc2UgR09NUF9NQVBf RklSU1RQUklWQVRFX1JFRkVSRU5DRToKIAkgIGNhc2UgR09NUF9NQVBfU1RSVUNUOgogCSAg Y2FzZSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUjoKKwkgIGNhc2UgR09NUF9NQVBfQVRUQUNI OgorCSAgY2FzZSBHT01QX01BUF9ERVRBQ0g6CiAJICAgIGJyZWFrOwogCSAgY2FzZSBHT01Q X01BUF9JRl9QUkVTRU5UOgogCSAgY2FzZSBHT01QX01BUF9GT1JDRV9BTExPQzoKQEAgLTEx NDY4LDggKzExNTI2LDYgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogCSAgY2FzZSBHT01QX01BUF9GT1JDRV9E RVZJQ0VQVFI6CiAJICBjYXNlIEdPTVBfTUFQX0RFVklDRV9SRVNJREVOVDoKIAkgIGNhc2Ug R09NUF9NQVBfTElOSzoKLQkgIGNhc2UgR09NUF9NQVBfQVRUQUNIOgotCSAgY2FzZSBHT01Q X01BUF9ERVRBQ0g6CiAJICBjYXNlIEdPTVBfTUFQX0ZPUkNFX0RFVEFDSDoKIAkgICAgZ2Nj X2Fzc2VydCAoaXNfZ2ltcGxlX29tcF9vYWNjIChzdG10KSk7CiAJICAgIGJyZWFrOwpAQCAt MTE1MjQsNiArMTE1ODAsMTYgQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRl cmF0b3IgKmdzaV9wLCBvbXBfY29udGV4dCAqY3R4KQogCSAgICBjb250aW51ZTsKIAkgIH0K IAorCWlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfTUFQCisJICAgICYm IChPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSA9PSBHT01QX01BUF9BVFRBQ0gKKwkJfHwgT01Q X0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfREVUQUNIKQorCSAgICAmJiBpc19v bXBfdGFyZ2V0IChzdG10KSkKKwkgIHsKKwkgICAgZ2NjX2Fzc2VydCAobWF5YmVfbG9va3Vw X2ZpZWxkIChjLCBjdHgpKTsKKwkgICAgbWFwX2NudCsrOworCSAgICBjb250aW51ZTsKKwkg IH0KKwogCWlmICghbWF5YmVfbG9va3VwX2ZpZWxkICh2YXIsIGN0eCkpCiAJICBjb250aW51 ZTsKIApAQCAtMTE3NTYsMTQgKzExODIyLDI4IEBAIGxvd2VyX29tcF90YXJnZXQgKGdpbXBs ZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwgb21wX2NvbnRleHQgKmN0eCkKIAkJICAgIGdjY19h c3NlcnQgKERFQ0xfUCAob3ZhcjIpKTsKIAkJICAgIG92YXIgPSBvdmFyMjsKIAkJICB9Ci0J CWlmICghbWF5YmVfbG9va3VwX2ZpZWxkIChvdmFyLCBjdHgpKQorCQlpZiAoIW1heWJlX2xv b2t1cF9maWVsZCAob3ZhciwgY3R4KQorCQkgICAgJiYgIShPTVBfQ0xBVVNFX0NPREUgKGMp ID09IE9NUF9DTEFVU0VfTUFQCisJCQkgJiYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09 IEdPTVBfTUFQX0FUVEFDSAorCQkJICAgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSA9 PSBHT01QX01BUF9ERVRBQ0gpKSkKIAkJICBjb250aW51ZTsKIAkgICAgICB9CiAKIAkgICAg dGFsaWduID0gVFlQRV9BTElHTl9VTklUIChUUkVFX1RZUEUgKG92YXIpKTsKIAkgICAgaWYg KERFQ0xfUCAob3ZhcikgJiYgREVDTF9BTElHTl9VTklUIChvdmFyKSA+IHRhbGlnbikKIAkg ICAgICB0YWxpZ24gPSBERUNMX0FMSUdOX1VOSVQgKG92YXIpOwotCSAgICBpZiAobmMpCisK KwkgICAgaWYgKG5jCisJCSYmIE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9N QVAKKwkJJiYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQX0FUVEFDSAor CQkgICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfREVUQUNIKQor CQkmJiBpc19vbXBfdGFyZ2V0IChzdG10KSkKKwkgICAgICB7CisJCXZhciA9IGxvb2t1cF9k ZWNsX2luX291dGVyX2N0eCAob3ZhciwgY3R4KTsKKwkJeCA9IGJ1aWxkX3NlbmRlcl9yZWYg KGMsIGN0eCk7CisJCWdpbXBsaWZ5X2Fzc2lnbiAoeCwgYnVpbGRfZm9sZF9hZGRyX2V4cHIg KHZhciksICZpbGlzdCk7CisJICAgICAgfQorCSAgICBlbHNlIGlmIChuYykKIAkgICAgICB7 CiAJCXZhciA9IGxvb2t1cF9kZWNsX2luX291dGVyX2N0eCAob3ZhciwgY3R4KTsKIAkJeCA9 IGJ1aWxkX3NlbmRlcl9yZWYgKG92YXIsIGN0eCk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9nb21wL2NsYXVzZXMtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vZ29tcC9jbGF1c2VzLTIuYwppbmRleCBkZWQxZDc0Y2NkZS4uYmJjOGZiNGUz MmIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvY2xhdXNl cy0yLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC9jbGF1c2VzLTIu YwpAQCAtMTMsMzUgKzEzLDM1IEBAIGZvbyAoaW50ICpwLCBpbnQgcSwgc3RydWN0IFMgdCwg aW50IGksIGludCBqLCBpbnQgaywgaW50IGwpCiAgICAgYmFyIChwKTsKICAgI3ByYWdtYSBv bXAgdGFyZ2V0IG1hcCAocFswXSkgbWFwIChwKSAvKiB7IGRnLWVycm9yICJhcHBlYXJzIGJv dGggaW4gZGF0YSBhbmQgbWFwIGNsYXVzZXMiIH0gKi8KICAgICBiYXIgKHApOwotICAjcHJh Z21hIG9tcCB0YXJnZXQgbWFwIChwKSAsIG1hcCAocFswXSkgLyogeyBkZy1lcnJvciAiYXBw ZWFycyBib3RoIGluIGRhdGEgYW5kIG1hcCBjbGF1c2VzIiB9ICovCisgICNwcmFnbWEgb21w IHRhcmdldCBtYXAgKHApICwgbWFwIChwWzBdKQogICAgIGJhciAocCk7CiAgICNwcmFnbWEg b21wIHRhcmdldCBtYXAgKHEpIG1hcCAocSkgLyogeyBkZy1lcnJvciAiYXBwZWFycyBtb3Jl IHRoYW4gb25jZSBpbiBtYXAgY2xhdXNlcyIgfSAqLwogICAgIGJhciAoJnEpOwogICAjcHJh Z21hIG9tcCB0YXJnZXQgbWFwIChwWzBdKSBtYXAgKHBbMF0pIC8qIHsgZGctZXJyb3IgImFw cGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gZGF0YSBjbGF1c2VzIiB9ICovCiAgICAgYmFyIChw KTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodCkgbWFwICh0LnIpIC8qIHsgZGctZXJy b3IgImFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gbWFwIGNsYXVzZXMiIH0gKi8KKyAgI3By YWdtYSBvbXAgdGFyZ2V0IG1hcCAodCkgbWFwICh0LnIpCiAgICAgYmFyICgmdC5yKTsKLSAg I3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodC5yKSBtYXAgKHQpIC8qIHsgZGctZXJyb3IgImFw cGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gbWFwIGNsYXVzZXMiIH0gKi8KKyAgI3ByYWdtYSBv bXAgdGFyZ2V0IG1hcCAodC5yKSBtYXAgKHQpCiAgICAgYmFyICgmdC5yKTsKLSAgI3ByYWdt YSBvbXAgdGFyZ2V0IG1hcCAodC5yKSBtYXAgKHQucikgLyogeyBkZy1lcnJvciAiYXBwZWFy cyBtb3JlIHRoYW4gb25jZSBpbiBtYXAgY2xhdXNlcyIgfSAqLworICAjcHJhZ21hIG9tcCB0 YXJnZXQgbWFwICh0LnIpIG1hcCAodC5yKQogICAgIGJhciAoJnQucik7CiAgICNwcmFnbWEg b21wIHRhcmdldCBmaXJzdHByaXZhdGUgKHQpLCBtYXAgKHQucikgLyogeyBkZy1lcnJvciAi YXBwZWFycyBib3RoIGluIGRhdGEgYW5kIG1hcCBjbGF1c2VzIiB9ICovCiAgICAgYmFyICgm dC5yKTsKICAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodC5yKSBmaXJzdHByaXZhdGUgKHQp IC8qIHsgZGctZXJyb3IgImFwcGVhcnMgYm90aCBpbiBkYXRhIGFuZCBtYXAgY2xhdXNlcyIg fSAqLwogICAgIGJhciAoJnQucik7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBtYXAgKHQuc1sw XSkgbWFwICh0KSAvKiB7IGRnLWVycm9yICJhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG1h cCBjbGF1c2VzIiB9ICovCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAgKHQuc1swXSkgbWFw ICh0KQogICAgIGJhciAodC5zKTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodCkgbWFw KHQuc1swXSkgLyogeyBkZy1lcnJvciAiYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBtYXAg Y2xhdXNlcyIgfSAqLworICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0KSBtYXAodC5zWzBd KQogICAgIGJhciAodC5zKTsKICAgI3ByYWdtYSBvbXAgdGFyZ2V0IGZpcnN0cHJpdmF0ZSAo dCkgbWFwICh0LnNbMF0pIC8qIHsgZGctZXJyb3IgImFwcGVhcnMgYm90aCBpbiBkYXRhIGFu ZCBtYXAgY2xhdXNlcyIgfSAqLwogICAgIGJhciAodC5zKTsKICAgI3ByYWdtYSBvbXAgdGFy Z2V0IG1hcCAodC5zWzBdKSBmaXJzdHByaXZhdGUgKHQpIC8qIHsgZGctZXJyb3IgImFwcGVh cnMgYm90aCBpbiBkYXRhIGFuZCBtYXAgY2xhdXNlcyIgfSAqLwogICAgIGJhciAodC5zKTsK LSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodC5zWzBdKSBtYXAgKHQuc1syXSkgLyogeyBk Zy1lcnJvciAiYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBtYXAgY2xhdXNlcyIgfSAqLwor ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0LnNbMF0pIG1hcCAodC5zWzJdKQogICAgIGJh ciAodC5zKTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodC50WzA6Ml0pIG1hcCAodC50 WzQ6Nl0pIC8qIHsgZGctZXJyb3IgImFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gbWFwIGNs YXVzZXMiIH0gKi8KKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodC50WzA6Ml0pIG1hcCAo dC50WzQ6Nl0pCiAgICAgYmFyICh0LnQpOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0 LnRbaTpqXSkgbWFwICh0LnRbazpsXSkgLyogeyBkZy1lcnJvciAiYXBwZWFycyBtb3JlIHRo YW4gb25jZSBpbiBtYXAgY2xhdXNlcyIgfSAqLworICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFw ICh0LnRbaTpqXSkgbWFwICh0LnRbazpsXSkKICAgICBiYXIgKHQudCk7CiAgICNwcmFnbWEg b21wIHRhcmdldCBtYXAgKHQuc1swXSkgbWFwICh0LnIpCiAgICAgYmFyICh0LnMpOwpAQCAt NTAsNSArNTAsNSBAQCBmb28gKGludCAqcCwgaW50IHEsIHN0cnVjdCBTIHQsIGludCBpLCBp bnQgaiwgaW50IGssIGludCBsKQogICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0LnIpIG1h cCAodCkgbWFwICh0LnNbMF0pIGZpcnN0cHJpdmF0ZSAodCkgLyogeyBkZy1lcnJvciAiYXBw ZWFycyBib3RoIGluIGRhdGEgYW5kIG1hcCBjbGF1c2VzIiB9ICovCiAgICAgYmFyICh0LnMp OwogICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwICh0KSBtYXAgKHQucikgZmlyc3Rwcml2YXRl ICh0KSBtYXAgKHQuc1swXSkgLyogeyBkZy1lcnJvciAiYXBwZWFycyBib3RoIGluIGRhdGEg YW5kIG1hcCBjbGF1c2VzIiB9ICovCi0gICAgYmFyICh0LnMpOyAvKiB7IGRnLWVycm9yICJh cHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIG1hcCBjbGF1c2VzIiAiIiB7IHRhcmdldCAqLSot KiB9IC4tMSB9ICovCisgICAgYmFyICh0LnMpOwogfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9jLWMrKy1jb21tb24vZ29tcC9tYXAtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vZ29tcC9tYXAtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4xZDlkOTI1Mjg2NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL2dvbXAvbWFwLTUuYwpAQCAtMCwwICsxLDI0IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLWdp bXBsZSIgfSAqLworCit2b2lkIGZvbyAodm9pZCkKK3sKKyAgLyogQmFzaWMgdGVzdCB0byBl bnN1cmUgdG8sZnJvbSx0b2Zyb20gaXMgb3JkZXJlZCBiZWZvcmUgYWxsb2MscmVsZWFzZSxk ZWxldGUgY2xhdXNlcy4gICovCisgIGludCBhLCBiLCBjOworICAjcHJhZ21hIG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6YSkgbWFwKHRvOmIpIG1hcChhbGxvYzpjKQorICAj cHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOmEpIG1hcChyZWxlYXNlOmIp IG1hcChmcm9tOmMpCisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcChhbGxvYzphKSBtYXAo dG9mcm9tOmIpIG1hcChhbGxvYzpjKQorICBhID0gYiA9IGMgPSAxOworCisgICNwcmFnbWEg b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0bzphKSBtYXAoYWxsb2M6YikgbWFwKHRvOmMp CisgICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206YSkgbWFwKGRlbGV0 ZTpiKSBtYXAoZnJvbTpjKQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg InByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwXFwodG86LiogbWFwXFwoYWxsb2M6 LiogbWFwXFwoYWxsb2M6LioiICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwoZnJvbTou KiBtYXBcXChmcm9tOi4qIG1hcFxcKHJlbGVhc2U6LioiICJnaW1wbGUiIH0gfSAqLworCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IG51bV90 ZWFtcy4qIG1hcFxcKHRvZnJvbTouKiBtYXBcXChhbGxvYzouKiBtYXBcXChhbGxvYzouKiIg ImdpbXBsZSIgfSB9ICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJh Z21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXBcXCh0bzouKiBtYXBcXCh0bzouKiBtYXBc XChhbGxvYzouKiIgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChmcm9tOi4qIG1hcFxc KGZyb206LiogbWFwXFwoZGVsZXRlOi4qIiAiZ2ltcGxlIiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9tYXAtMi5mOTAgYi9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2dvbXAvbWFwLTIuZjkwCmluZGV4IDczYzRmNWE4N2QwLi43OWJh YjcyNmRlYSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL21h cC0yLmY5MAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvbWFwLTIuZjkw CkBAIC0yLDUgKzIsNSBAQCB0eXBlIHQKICAgaW50ZWdlciA6OiBpCiBlbmQgdHlwZSB0CiB0 eXBlKHQpIHYKLSEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0bzp2JWksIHYlaSkgICEg eyBkZy1lcnJvciAiYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBtYXAgY2xhdXNlcyIgfQor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOnYlaSwgdiVpKQogZW5kCg== --------------1A71A54A87B55E90497BDB65--