From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79324 invoked by alias); 25 Aug 2019 21:13:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 79308 invoked by uid 89); 25 Aug 2019 21:13:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-7.6 required=5.0 tests=AWL,BAYES_50,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.1 spammy=designing, availability, stmt, dom X-HELO: mail-lf1-f48.google.com Received: from mail-lf1-f48.google.com (HELO mail-lf1-f48.google.com) (209.85.167.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 25 Aug 2019 21:13:35 +0000 Received: by mail-lf1-f48.google.com with SMTP id h27so4870536lfp.2 for ; Sun, 25 Aug 2019 14:13:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=Dv/lXE3VT6ARW/bb3topYAs9EAI3MmjUka8ki/N9xlU=; b=LIfPi56vos3z+Ez2jAoKINfS1TmsBcjGFCakONd6WVL26ZUYoQYmYyVGv2AqHXBNt3 5bKjUTIdk9BuEqeZoNpCArVy6qg+gDoWMv8gjqCXYjZ5ERc1c10Eoj4Bt0NNBmgWOLDk 79N3QXuTb0GyCFH6hmXCKzdabuMGC4Ebz48r0XHrpQVH5azJN0UTlkoVjRdal73AEU9a qXb+liCPepqjrzGo9+j/SkkHsTTsW1pag7w2RxuxsKOe1Vfs6stLmeq2ddwDLi7NsCQV oQLe1TfSV0HlQ8Xvl8kOBx4lie12NIiMOk9+qDt/WblsuUns5M12hmex3Py0E+jQWao/ 7t1Q== MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Mon, 26 Aug 2019 05:59:00 -0000 Message-ID: Subject: Re: [SVE] PR86753 To: Prathamesh Kulkarni , Richard Biener , gcc Patches , Richard Sandiford Content-Type: multipart/mixed; boundary="00000000000003ac250590f783c2" X-IsSubscribed: yes X-SW-Source: 2019-08/txt/msg01721.txt.bz2 --00000000000003ac250590f783c2 Content-Type: text/plain; charset="UTF-8" Content-length: 3100 On Fri, 23 Aug 2019 at 19:43, Richard Sandiford wrote: > > Prathamesh Kulkarni writes: > > On Fri, 23 Aug 2019 at 18:15, Richard Sandiford > > wrote: > >> > >> Prathamesh Kulkarni writes: > >> > On Thu, 22 Aug 2019 at 16:44, Richard Biener wrote: > >> >> It looks a bit odd to me. I'd have expected it to work by generating > >> >> the stmts as before in the vectorizer and then on the stmts we care > >> >> invoke vn_visit_stmt that does both value-numbering and elimination. > >> >> Alternatively you could ask the VN state to generate the stmt for > >> >> you via vn_nary_build_or_lookup () (certainly that needs a bit more > >> >> work). One complication might be availability if you don't value-number > >> >> all stmts in the block, but well. I'm not sure constraining to a single > >> >> block is necessary - I've thought of having a "CSE"ing gimple_build > >> >> for some time (add & CSE new stmts onto a sequence), so one > >> >> should keep this mode in mind when designing the one working on > >> >> an existing BB. Note as you write it it depends on visiting the > >> >> stmts in proper order - is that guaranteed when for example > >> >> vectorizing SLP? > >> > Hi, > >> > Indeed, I wrote the function with assumption that, stmts would be > >> > visited in proper order. > >> > This doesn't affect SLP currently, because call to vn_visit_stmt in > >> > vect_transform_stmt is > >> > conditional on cond_to_vec_mask, which is only allocated inside > >> > vect_transform_loop. > >> > But I agree we could make it more general. > >> > AFAIU, the idea of constraining VN to single block was to avoid using defs from > >> > non-dominating scalar stmts during outer-loop vectorization. > >> > >> Maybe we could do the numbering in a separate walk immediately before > >> the transform phase instead. > > Um sorry, I didn't understand. Do you mean we should do dom based VN > > just before transform phase > > or run full VN ? > > No, I just meant that we could do a separate walk of the contents > of the basic block: > > > @@ -8608,6 +8609,8 @@ vect_transform_loop (loop_vec_info loop_vinfo) > > { > > basic_block bb = bbs[i]; > > stmt_vec_info stmt_info; > > + vn_bb_init (bb); > > + loop_vinfo->cond_to_vec_mask = new cond_vmask_map_type (8); > > > > ...here, rather than doing it on the fly during vect_transform_stmt > itself. The walk should be gated on LOOP_VINFO_FULLY_MASKED_P so that > others don't have to pay the compile-time penalty. (Same for > cond_to_vec_mask itself really.) Hi, Does the attached patch look OK ? In patch, I put call to vn_visit stmt in bb loop in vect_transform_loop to avoid replicating logic for processing phi and stmts. AFAIU, vect_transform_loop_stmt is only called from bb loop, so compile time penalty for checking cond_to_vec_mask should be pretty small ? If this is not OK, I will walk bb immediately before the bb loop. Thanks, Prathamesh > > Thanks, > Richard --00000000000003ac250590f783c2 Content-Type: application/x-patch; name="pr86753-7.diff" Content-Disposition: attachment; filename="pr86753-7.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jzre5it20 Content-length: 21277 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3N2ZS9mbWxhXzIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L3N2ZS9mbWxhXzIuYwppbmRleCA1YzA0YmNkYjNmNS4uYTFiMDY2N2Rh YjUgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJj aDY0L3N2ZS9mbWxhXzIuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9zdmUvZm1sYV8yLmMKQEAgLTE1LDUgKzE1LDkgQEAgZiAo ZG91YmxlICpyZXN0cmljdCBhLCBkb3VibGUgKnJlc3RyaWN0IGIsIGRvdWJs ZSAqcmVzdHJpY3QgYywKICAgICB9CiB9CiAKLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyB7XHRmbWxhXHR6WzAtOV0rXC5kLCBwWzAt N10vbSwgelswLTldK1wuZCwgelswLTldK1wuZFxufSAyIH0gfSAqLworLyog U2VlIGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxOS0w OC9tc2cwMTY0NC5odG1sCisgICBmb3IgWEZBSUxpbmcgdGhlIGJlbG93IHRl c3QuICAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMge1x0Zm1sYVx0elswLTldK1wuZCwgcFswLTddL20sIHpbMC05XStcLmQs IHpbMC05XStcLmRcbn0gMiB7IHhmYWlsICotKi0qIH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0Zm1sYVx0elsw LTldK1wuZCwgcFswLTddL20sIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0g MyB9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg e1x0Zm1hZFx0fSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1z Y2N2bi5jIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMKaW5kZXggZWI3ZTRiZTA5 ZTYuLjI2YTQ2NzU3ODU0IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2Etc2Nj dm4uYworKysgYi9nY2MvdHJlZS1zc2Etc2Njdm4uYwpAQCAtNDc5NSw4ICs0 Nzk1LDggQEAgdHJ5X3RvX3NpbXBsaWZ5IChnYXNzaWduICpzdG10KQogLyog VmlzaXQgYW5kIHZhbHVlIG51bWJlciBTVE1ULCByZXR1cm4gdHJ1ZSBpZiB0 aGUgdmFsdWUgbnVtYmVyCiAgICBjaGFuZ2VkLiAgKi8KIAotc3RhdGljIGJv b2wKLXZpc2l0X3N0bXQgKGdpbXBsZSAqc3RtdCwgYm9vbCBiYWNrZWRnZXNf dmFyeWluZ19wID0gZmFsc2UpCitib29sCit2bl92aXNpdF9zdG10IChnaW1w bGUgKnN0bXQsIGJvb2wgYmFja2VkZ2VzX3ZhcnlpbmdfcCkKIHsKICAgYm9v bCBjaGFuZ2VkID0gZmFsc2U7CiAKQEAgLTY0MTYsNyArNjQxNiw3IEBAIHBy b2Nlc3NfYmIgKHJwb19lbGltICZhdmFpbCwgYmFzaWNfYmxvY2sgYmIsCiAJ ICB9CiAKIAkvKiBXaGVuIG5vdCBpdGVyYXRpbmcgZm9yY2UgYmFja2VkZ2Ug dmFsdWVzIHRvIHZhcnlpbmcuICAqLwotCXZpc2l0X3N0bXQgKHBoaSwgIWl0 ZXJhdGVfcGhpcyk7CisJdm5fdmlzaXRfc3RtdCAocGhpLCAhaXRlcmF0ZV9w aGlzKTsKIAlpZiAodmlydHVhbF9vcGVyYW5kX3AgKHJlcykpCiAJICBjb250 aW51ZTsKIApAQCAtNjUxMyw3ICs2NTEzLDcgQEAgcHJvY2Vzc19iYiAocnBv X2VsaW0gJmF2YWlsLCBiYXNpY19ibG9jayBiYiwKIAkgICAgIHRoZSB2aXNp dGVkIGZsYWcgaW4gU1NBX1ZBTC4gICovCiAJfQogCi0gICAgICB2aXNpdF9z dG10IChnc2lfc3RtdCAoZ3NpKSk7CisgICAgICB2bl92aXNpdF9zdG10IChn c2lfc3RtdCAoZ3NpKSk7CiAKICAgICAgIGdpbXBsZSAqbGFzdCA9IGdzaV9z dG10IChnc2kpOwogICAgICAgZSA9IE5VTEw7CkBAIC02NzgzLDYgKzY3ODMs NTkgQEAgZG9fdW53aW5kICh1bndpbmRfc3RhdGUgKnRvLCBpbnQgcnBvX2lk eCwgcnBvX2VsaW0gJmF2YWlsLCBpbnQgKmJiX3RvX3JwbykKICAgICB9CiB9 CiAKKy8qIFZhbHVlLW51bWJlcmluZyBwZXIgYmFzaWMgYmxvY2suICAqLwor CitzdGF0aWMgdW5zaWduZWQKK2JiX3N0bXRzIChiYXNpY19ibG9jayBiYikK K3sKKyAgdW5zaWduZWQgbl9zdG10cyA9IDA7CisKKyAgZm9yIChnaW1wbGVf c3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfc3RhcnRfYmIgKGJiKTsKKyAgICAg ICAhZ3NpX2VuZF9wIChnc2kpOworICAgICAgIGdzaV9uZXh0ICgmZ3NpKSkK KyAgICB7CisgICAgICBnaW1wbGUgKnN0bXQgPSBnc2lfc3RtdCAoZ3NpKTsK KyAgICAgIGlmIChnaW1wbGVfY29kZSAoc3RtdCkgIT0gR0lNUExFX0RFQlVH KQorCW5fc3RtdHMrKzsKKyAgICB9CisKKyAgcmV0dXJuIG5fc3RtdHM7Cit9 CisKK3ZvaWQKK3ZuX2JiX2luaXQoYmFzaWNfYmxvY2sgYmIpCit7CisgIC8q IENyZWF0ZSB0aGUgVk4gc3RhdGUuICAqLworCisgIHVuc2lnbmVkIGJiX3Np emUgPSBiYl9zdG10cyAoYmIpOworICBWTl9UT1AgPSBjcmVhdGVfdG1wX3Zh cl9yYXcgKHZvaWRfdHlwZV9ub2RlLCAidm5fdG9wIik7CisgIG5leHRfdmFs dWVfaWQgPSAxOworCisgIHZuX3NzYV9hdXhfaGFzaCA9IG5ldyBoYXNoX3Rh YmxlIDx2bl9zc2FfYXV4X2hhc2hlcj4gKGJiX3NpemUpOworICBnY2Nfb2Jz dGFja19pbml0ICgmdm5fc3NhX2F1eF9vYnN0YWNrKTsKKworICBnY2Nfb2Jz dGFja19pbml0ICgmdm5fdGFibGVzX29ic3RhY2spOworICBnY2Nfb2JzdGFj a19pbml0ICgmdm5fdGFibGVzX2luc2VydF9vYnN0YWNrKTsKKyAgdmFsaWRf aW5mbyA9IFhDTkVXIChzdHJ1Y3Qgdm5fdGFibGVzX3MpOworICBhbGxvY2F0 ZV92bl90YWJsZSAodmFsaWRfaW5mbywgYmJfc2l6ZSk7CisgIGxhc3RfaW5z ZXJ0ZWRfcmVmID0gTlVMTDsKKyAgbGFzdF9pbnNlcnRlZF9waGkgPSBOVUxM OworICBsYXN0X2luc2VydGVkX25hcnkgPSBOVUxMOworCisgIHJwb19lbGlt ICp4ID0gWE9CTkVXICgmdm5fc3NhX2F1eF9vYnN0YWNrLCBycG9fZWxpbSk7 CisgIHJwb19hdmFpbCA9IG5ldyh4KSBycG9fZWxpbSAoYmIpOworICB2bl92 YWx1ZWl6ZSA9IHJwb192bl92YWx1ZWl6ZTsKK30KKwordm9pZAordm5fYmJf ZnJlZSAoKQoreworICBmcmVlX3ZuX3RhYmxlICh2YWxpZF9pbmZvKTsKKyAg WERFTEVURSAodmFsaWRfaW5mbyk7CisgIG9ic3RhY2tfZnJlZSAoJnZuX3Rh Ymxlc19vYnN0YWNrLCBOVUxMKTsKKyAgb2JzdGFja19mcmVlICgmdm5fdGFi bGVzX2luc2VydF9vYnN0YWNrLCBOVUxMKTsKK30KKwogLyogRG8gVk4gb24g YSBTRU1FIHJlZ2lvbiBzcGVjaWZpZWQgYnkgRU5UUlkgYW5kIEVYSVRfQkJT IGluIEZOLgogICAgSWYgSVRFUkFURSBpcyB0cnVlIHRoZW4gdHJlYXQgYmFj a2VkZ2VzIG9wdGltaXN0aWNhbGx5IGFzIG5vdAogICAgZXhlY3V0ZWQgYW5k IGl0ZXJhdGUuICBJZiBFTElNSU5BVEUgaXMgdHJ1ZSB0aGVuIHBlcmZvcm0K ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1zY2N2bi5oIGIvZ2NjL3RyZWUt c3NhLXNjY3ZuLmgKaW5kZXggMWE1ZjIzODk1ODYuLjhlMTM0NDQ2Nzc5IDEw MDY0NAotLS0gYS9nY2MvdHJlZS1zc2Etc2Njdm4uaAorKysgYi9nY2MvdHJl ZS1zc2Etc2Njdm4uaApAQCAtMjkwLDQgKzI5MCw4IEBAIGV4dGVybiB0cmVl ICgqdm5fdmFsdWVpemUpICh0cmVlKTsKIGV4dGVybiBiYXNpY19ibG9jayB2 bl9jb250ZXh0X2JiOwogCiAKK3ZvaWQgdm5fYmJfaW5pdCAoYmFzaWNfYmxv Y2spOwordm9pZCB2bl9iYl9mcmVlICh2b2lkKTsKK2Jvb2wgdm5fdmlzaXRf c3RtdCAoZ2ltcGxlICpzdG10LCBib29sIGJhY2tlZGdlc192YXJ5aW5nX3Ag PSBmYWxzZSk7CisKICNlbmRpZiAvKiBUUkVFX1NTQV9TQ0NWTl9IICAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1sb29wLmMgYi9nY2MvdHJlZS12 ZWN0LWxvb3AuYwppbmRleCBiMGNiYmFjMGNiNS4uYThlNWYyYjhlZGMgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLXZlY3QtbG9vcC5jCisrKyBiL2djYy90cmVl LXZlY3QtbG9vcC5jCkBAIC01NCw2ICs1NCw3IEBAIGFsb25nIHdpdGggR0ND OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVk ZSAidHJlZS12ZWN0b3ItYnVpbGRlci5oIgogI2luY2x1ZGUgInZlYy1wZXJt LWluZGljZXMuaCIKICNpbmNsdWRlICJ0cmVlLWVoLmgiCisjaW5jbHVkZSAi dHJlZS1zc2Etc2Njdm4uaCIKIAogLyogTG9vcCBWZWN0b3JpemF0aW9uIFBh c3MuCiAKQEAgLTg0NTYsNiArODQ1Nyw5IEBAIHZlY3RfdHJhbnNmb3JtX2xv b3Bfc3RtdCAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBzdG10X3ZlY19p bmZvIHN0bXRfaW5mbywKICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQogICAg IGR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sICJ0 cmFuc2Zvcm0gc3RhdGVtZW50LlxuIik7CiAKKyAgaWYgKGxvb3BfdmluZm8t PmNvbmRfdG9fdmVjX21hc2spCisgICAgdm5fdmlzaXRfc3RtdCAoc3RtdF9p bmZvLT5zdG10LCB0cnVlKTsKKwogICBpZiAodmVjdF90cmFuc2Zvcm1fc3Rt dCAoc3RtdF9pbmZvLCBnc2ksIE5VTEwsIE5VTEwpKQogICAgICpzZWVuX3N0 b3JlID0gc3RtdF9pbmZvOwogfQpAQCAtODYwOSw2ICs4NjEzLDEyIEBAIHZl Y3RfdHJhbnNmb3JtX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykK ICAgICAgIGJhc2ljX2Jsb2NrIGJiID0gYmJzW2ldOwogICAgICAgc3RtdF92 ZWNfaW5mbyBzdG10X2luZm87CiAKKyAgICAgIGlmIChMT09QX1ZJTkZPX0ZV TExZX01BU0tFRF9QIChsb29wX3ZpbmZvKSkKKwl7CisJICB2bl9iYl9pbml0 IChiYik7CisJICBsb29wX3ZpbmZvLT5jb25kX3RvX3ZlY19tYXNrID0gbmV3 IGNvbmRfdm1hc2tfbWFwX3R5cGUgKDgpOworCX0KKwogICAgICAgZm9yIChn cGhpX2l0ZXJhdG9yIHNpID0gZ3NpX3N0YXJ0X3BoaXMgKGJiKTsgIWdzaV9l bmRfcCAoc2kpOwogCSAgIGdzaV9uZXh0ICgmc2kpKQogICAgICAgICB7CkBA IC04NjI3LDYgKzg2MzcsOSBAQCB2ZWN0X3RyYW5zZm9ybV9sb29wIChsb29w X3ZlY19pbmZvIGxvb3BfdmluZm8pCiAJICAgICAgJiYgIVNUTVRfVklORk9f TElWRV9QIChzdG10X2luZm8pKQogCSAgICBjb250aW51ZTsKIAorCSAgaWYg KGxvb3BfdmluZm8tPmNvbmRfdG9fdmVjX21hc2spCisJICAgIHZuX3Zpc2l0 X3N0bXQgKHBoaSwgdHJ1ZSk7CisKIAkgIGlmIChTVE1UX1ZJTkZPX1ZFQ1RZ UEUgKHN0bXRfaW5mbykKIAkgICAgICAmJiAobWF5YmVfbmUKIAkJICAoVFlQ RV9WRUNUT1JfU1VCUEFSVFMgKFNUTVRfVklORk9fVkVDVFlQRSAoc3RtdF9p bmZvKSksIHZmKSkKQEAgLTg3MTcsNiArODczMCwxMyBAQCB2ZWN0X3RyYW5z Zm9ybV9sb29wIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAJCX0KIAkg ICAgfQogCX0KKworICAgICAgaWYgKGxvb3BfdmluZm8tPmNvbmRfdG9fdmVj X21hc2spCisJeworCSAgZGVsZXRlIGxvb3BfdmluZm8tPmNvbmRfdG9fdmVj X21hc2s7CisJICBsb29wX3ZpbmZvLT5jb25kX3RvX3ZlY19tYXNrID0gMDsK KwkgIHZuX2JiX2ZyZWUgKCk7CisJfQogICAgIH0JCQkJLyogQkJzIGluIGxv b3AgKi8KIAogICAvKiBUaGUgdmVjdG9yaXphdGlvbiBmYWN0b3IgaXMgYWx3 YXlzID4gMSwgc28gaWYgd2UgdXNlIGFuIElWIGluY3JlbWVudCBvZiAxLgpk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jIGIvZ2NjL3RyZWUt dmVjdC1zdG10cy5jCmluZGV4IDFlMmRmZTVkMjJkLi44NjIyMDZiMzI1NiAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jCisrKyBiL2djYy90 cmVlLXZlY3Qtc3RtdHMuYwpAQCAtMTk4OSwxNyArMTk4OSwzMSBAQCBjaGVj a19sb2FkX3N0b3JlX21hc2tpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5m bywgdHJlZSB2ZWN0eXBlLAogCiBzdGF0aWMgdHJlZQogcHJlcGFyZV9sb2Fk X3N0b3JlX21hc2sgKHRyZWUgbWFza190eXBlLCB0cmVlIGxvb3BfbWFzaywg dHJlZSB2ZWNfbWFzaywKLQkJCSBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3Np KQorCQkJIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksIHRyZWUgbWFzaywK KwkJCSBjb25kX3ZtYXNrX21hcF90eXBlICpjb25kX3RvX3ZlY19tYXNrKQog ewogICBnY2NfYXNzZXJ0ICh1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wICht YXNrX3R5cGUsIFRSRUVfVFlQRSAodmVjX21hc2spKSk7CiAgIGlmICghbG9v cF9tYXNrKQogICAgIHJldHVybiB2ZWNfbWFzazsKIAogICBnY2NfYXNzZXJ0 IChUUkVFX1RZUEUgKGxvb3BfbWFzaykgPT0gbWFza190eXBlKTsKKworICB0 cmVlICpzbG90ID0gMDsKKyAgaWYgKGNvbmRfdG9fdmVjX21hc2spCisgICAg eworICAgICAgY29uZF92bWFza19rZXkgY29uZCAobWFzaywgbG9vcF9tYXNr KTsKKyAgICAgIHNsb3QgPSAmY29uZF90b192ZWNfbWFzay0+Z2V0X29yX2lu c2VydCAoY29uZCk7CisgICAgICBpZiAoKnNsb3QpCisJcmV0dXJuICpzbG90 OworICAgIH0KKwogICB0cmVlIGFuZF9yZXMgPSBtYWtlX3RlbXBfc3NhX25h bWUgKG1hc2tfdHlwZSwgTlVMTCwgInZlY19tYXNrX2FuZCIpOwogICBnaW1w bGUgKmFuZF9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoYW5kX3Jlcywg QklUX0FORF9FWFBSLAogCQkJCQkgIHZlY19tYXNrLCBsb29wX21hc2spOwog ICBnc2lfaW5zZXJ0X2JlZm9yZSAoZ3NpLCBhbmRfc3RtdCwgR1NJX1NBTUVf U1RNVCk7CisKKyAgaWYgKHNsb3QpCisgICAgKnNsb3QgPSBhbmRfcmVzOwog ICByZXR1cm4gYW5kX3JlczsKIH0KIApAQCAtMzUxNCw4ICszNTI4LDEwIEBA IHZlY3Rvcml6YWJsZV9jYWxsIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJCSAgZ2NjX2Fzc2VydCAo bmNvcGllcyA9PSAxKTsKIAkJCSAgdHJlZSBtYXNrID0gdmVjdF9nZXRfbG9v cF9tYXNrIChnc2ksIG1hc2tzLCB2ZWNfbnVtLAogCQkJCQkJCSAgdmVjdHlw ZV9vdXQsIGkpOworCQkJICB0cmVlIHNjYWxhcl9tYXNrID0gZ2ltcGxlX2Nh bGxfYXJnIChnc2lfc3RtdCAoKmdzaSksIG1hc2tfb3Bubyk7CiAJCQkgIHZh cmdzW21hc2tfb3Bub10gPSBwcmVwYXJlX2xvYWRfc3RvcmVfbWFzawotCQkJ ICAgIChUUkVFX1RZUEUgKG1hc2spLCBtYXNrLCB2YXJnc1ttYXNrX29wbm9d LCBnc2kpOworCQkJICAgIChUUkVFX1RZUEUgKG1hc2spLCBtYXNrLCB2YXJn c1ttYXNrX29wbm9dLCBnc2ksCisJCQkgICAgIHNjYWxhcl9tYXNrLCB2aW5m by0+Y29uZF90b192ZWNfbWFzayk7CiAJCQl9CiAKIAkJICAgICAgZ2NhbGwg KmNhbGw7CkBAIC0zNTY0LDkgKzM1ODAsMTEgQEAgdmVjdG9yaXphYmxlX2Nh bGwgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBnaW1wbGVfc3RtdF9pdGVy YXRvciAqZ3NpLAogCSAgICB7CiAJICAgICAgdHJlZSBtYXNrID0gdmVjdF9n ZXRfbG9vcF9tYXNrIChnc2ksIG1hc2tzLCBuY29waWVzLAogCQkJCQkgICAg ICB2ZWN0eXBlX291dCwgaik7CisJICAgICAgdHJlZSBzY2FsYXJfbWFzayA9 IGdpbXBsZV9jYWxsX2FyZyAoZ3NpX3N0bXQgKCpnc2kpLCBtYXNrX29wbm8p OwogCSAgICAgIHZhcmdzW21hc2tfb3Bub10KIAkJPSBwcmVwYXJlX2xvYWRf c3RvcmVfbWFzayAoVFJFRV9UWVBFIChtYXNrKSwgbWFzaywKLQkJCQkJICAg dmFyZ3NbbWFza19vcG5vXSwgZ3NpKTsKKwkJCQkJICAgdmFyZ3NbbWFza19v cG5vXSwgZ3NpLAorCQkJCQkgICBzY2FsYXJfbWFzaywgdmluZm8tPmNvbmRf dG9fdmVjX21hc2spOwogCSAgICB9CiAKIAkgIGlmIChjZm4gPT0gQ0ZOX0dP TVBfU0lNRF9MQU5FKQpAQCAtODEwOSw3ICs4MTI3LDggQEAgdmVjdG9yaXph YmxlX3N0b3JlIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgZ2ltcGxlX3N0 bXRfaXRlcmF0b3IgKmdzaSwKIAkJCQkJICAgICB2ZWN0eXBlLCBqKTsKIAkg IGlmICh2ZWNfbWFzaykKIAkgICAgZmluYWxfbWFzayA9IHByZXBhcmVfbG9h ZF9zdG9yZV9tYXNrIChtYXNrX3ZlY3R5cGUsIGZpbmFsX21hc2ssCi0JCQkJ CQkgIHZlY19tYXNrLCBnc2kpOworCQkJCQkJICB2ZWNfbWFzaywgZ3NpLCBt YXNrLAorCQkJCQkJICB2aW5mby0+Y29uZF90b192ZWNfbWFzayk7CiAKIAkg IGdjYWxsICpjYWxsOwogCSAgaWYgKGZpbmFsX21hc2spCkBAIC04MTYzLDcg KzgxODIsOCBAQCB2ZWN0b3JpemFibGVfc3RvcmUgKHN0bXRfdmVjX2luZm8g c3RtdF9pbmZvLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogCQkJCQkJ IHZlY3R5cGUsIHZlY19udW0gKiBqICsgaSk7CiAJICAgICAgaWYgKHZlY19t YXNrKQogCQlmaW5hbF9tYXNrID0gcHJlcGFyZV9sb2FkX3N0b3JlX21hc2sg KG1hc2tfdmVjdHlwZSwgZmluYWxfbWFzaywKLQkJCQkJCSAgICAgIHZlY19t YXNrLCBnc2kpOworCQkJCQkJICAgICAgdmVjX21hc2ssIGdzaSwgbWFzaywK KwkJCQkJCSAgICAgIHZpbmZvLT5jb25kX3RvX3ZlY19tYXNrKTsKIAogCSAg ICAgIGlmIChtZW1vcnlfYWNjZXNzX3R5cGUgPT0gVk1BVF9HQVRIRVJfU0NB VFRFUikKIAkJewpAQCAtOTMwNCw3ICs5MzI0LDggQEAgdmVjdG9yaXphYmxl X2xvYWQgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBnaW1wbGVfc3RtdF9p dGVyYXRvciAqZ3NpLAogCQkJCQkgICAgIHZlY3R5cGUsIGopOwogCSAgaWYg KHZlY19tYXNrKQogCSAgICBmaW5hbF9tYXNrID0gcHJlcGFyZV9sb2FkX3N0 b3JlX21hc2sgKG1hc2tfdmVjdHlwZSwgZmluYWxfbWFzaywKLQkJCQkJCSAg dmVjX21hc2ssIGdzaSk7CisJCQkJCQkgIHZlY19tYXNrLCBnc2ksIG1hc2ss CisJCQkJCQkgIHZpbmZvLT5jb25kX3RvX3ZlY19tYXNrKTsKIAogCSAgZ2Nh bGwgKmNhbGw7CiAJICBpZiAoZmluYWxfbWFzaykKQEAgLTkzNTUsNyArOTM3 Niw4IEBAIHZlY3Rvcml6YWJsZV9sb2FkIChzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKIAkJCQkJCSB2ZWN0 eXBlLCB2ZWNfbnVtICogaiArIGkpOwogCSAgICAgIGlmICh2ZWNfbWFzaykK IAkJZmluYWxfbWFzayA9IHByZXBhcmVfbG9hZF9zdG9yZV9tYXNrIChtYXNr X3ZlY3R5cGUsIGZpbmFsX21hc2ssCi0JCQkJCQkgICAgICB2ZWNfbWFzaywg Z3NpKTsKKwkJCQkJCSAgICAgIHZlY19tYXNrLCBnc2ksIG1hc2ssCisJCQkJ CQkgICAgICB2aW5mby0+Y29uZF90b192ZWNfbWFzayk7CiAKIAkgICAgICBp ZiAoaSA+IDApCiAJCWRhdGFyZWZfcHRyID0gYnVtcF92ZWN0b3JfcHRyIChk YXRhcmVmX3B0ciwgcHRyX2luY3IsIGdzaSwKQEAgLTk5NzUsNiArOTk5Nywz OCBAQCB2ZWN0b3JpemFibGVfY29uZGl0aW9uIChzdG10X3ZlY19pbmZvIHN0 bXRfaW5mbywgZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKICAgLyogSGFu ZGxlIGNvbmQgZXhwci4gICovCiAgIGZvciAoaiA9IDA7IGogPCBuY29waWVz OyBqKyspCiAgICAgeworICAgICAgdHJlZSB2ZWNfbWFzayA9IE5VTExfVFJF RTsKKworICAgICAgaWYgKGxvb3BfdmluZm8gJiYgTE9PUF9WSU5GT19GVUxM WV9NQVNLRURfUCAobG9vcF92aW5mbykKKwkgICYmIFRSRUVfQ09ERV9DTEFT UyAoVFJFRV9DT0RFIChjb25kX2V4cHIpKSA9PSB0Y2NfY29tcGFyaXNvbgor CSAgJiYgbG9vcF92aW5mby0+Y29uZF90b192ZWNfbWFzaykKKwl7CisJICB2 ZWNfbG9vcF9tYXNrcyAqbWFza3MgPSAmTE9PUF9WSU5GT19NQVNLUyAobG9v cF92aW5mbyk7CisJICBpZiAobWFza3MpCisJICAgIHsKKwkgICAgICB0cmVl IGxvb3BfbWFzayA9IHZlY3RfZ2V0X2xvb3BfbWFzayAoZ3NpLCBtYXNrcywK KwkJCQkJCSAgIG5jb3BpZXMsIHZlY3R5cGUsIGopOworCisJICAgICAgY29u ZF92bWFza19rZXkgY29uZCAoY29uZF9leHByLCBsb29wX21hc2spOworCSAg ICAgIHRyZWUgKnNsb3QgPSBsb29wX3ZpbmZvLT5jb25kX3RvX3ZlY19tYXNr LT5nZXQgKGNvbmQpOworCSAgICAgIGlmIChzbG90ICYmICpzbG90KQorCQl2 ZWNfbWFzayA9ICpzbG90OworCSAgICAgIGVsc2UKKwkJeworCQkgIGNvbmQu Y29uZF9vcHMuY29kZQorCQkgICAgPSBpbnZlcnRfdHJlZV9jb21wYXJpc29u IChjb25kLmNvbmRfb3BzLmNvZGUsIHRydWUpOworCQkgIHNsb3QgPSBsb29w X3ZpbmZvLT5jb25kX3RvX3ZlY19tYXNrLT5nZXQgKGNvbmQpOworCQkgIGlm IChzbG90ICYmICpzbG90KQorCQkgICAgeworCQkgICAgICB2ZWNfbWFzayA9 ICpzbG90OworCQkgICAgICB0cmVlIHRtcCA9IHRoZW5fY2xhdXNlOworCQkg ICAgICB0aGVuX2NsYXVzZSA9IGVsc2VfY2xhdXNlOworCQkgICAgICBlbHNl X2NsYXVzZSA9IHRtcDsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQorCiAg ICAgICBzdG10X3ZlY19pbmZvIG5ld19zdG10X2luZm8gPSBOVUxMOwogICAg ICAgaWYgKGogPT0gMCkKIAl7CkBAIC0xMDA1NCw2ICsxMDEwOCw4IEBAIHZl Y3Rvcml6YWJsZV9jb25kaXRpb24gKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZv LCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogCiAJICBpZiAobWFza2Vk KQogCSAgICB2ZWNfY29tcGFyZSA9IHZlY19jb25kX2xoczsKKwkgIGVsc2Ug aWYgKHZlY19tYXNrKQorCSAgICB2ZWNfY29tcGFyZSA9IHZlY19tYXNrOwog CSAgZWxzZQogCSAgICB7CiAJICAgICAgdmVjX2NvbmRfcmhzID0gdmVjX29w cm5kczFbaV07CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVyLmMg Yi9nY2MvdHJlZS12ZWN0b3JpemVyLmMKaW5kZXggZGMxODE1MjQ3NDQuLjA2 NWUxNDY3Nzk2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVyLmMK KysrIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5jCkBAIC04Miw3ICs4Miw2IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjaW5jbHVkZSAib3B0LXByb2JsZW0uaCIKICNpbmNsdWRlICJp bnRlcm5hbC1mbi5oIgogCi0KIC8qIExvb3Agb3IgYmIgbG9jYXRpb24sIHdp dGggaG90bmVzcyBpbmZvcm1hdGlvbi4gICovCiBkdW1wX3VzZXJfbG9jYXRp b25fdCB2ZWN0X2xvY2F0aW9uOwogCkBAIC00NjEsNyArNDYwLDggQEAgdmVj X2luZm86OnZlY19pbmZvICh2ZWNfaW5mbzo6dmVjX2tpbmQga2luZF9pbiwg dm9pZCAqdGFyZ2V0X2Nvc3RfZGF0YV9pbiwKIAkJICAgIHZlY19pbmZvX3No YXJlZCAqc2hhcmVkXykKICAgOiBraW5kIChraW5kX2luKSwKICAgICBzaGFy ZWQgKHNoYXJlZF8pLAotICAgIHRhcmdldF9jb3N0X2RhdGEgKHRhcmdldF9j b3N0X2RhdGFfaW4pCisgICAgdGFyZ2V0X2Nvc3RfZGF0YSAodGFyZ2V0X2Nv c3RfZGF0YV9pbiksCisgICAgY29uZF90b192ZWNfbWFzayAoMCkKIHsKICAg c3RtdF92ZWNfaW5mb3MuY3JlYXRlICg1MCk7CiB9CkBAIC0xMDMzLDcgKzEw MzMsNiBAQCB0cnlfdmVjdG9yaXplX2xvb3AgKGhhc2hfdGFibGU8c2ltZHVp ZF90b192Zj4gKiZzaW1kdWlkX3RvX3ZmX2h0YWIsCiAJCQkgICAgICAgdmVj dF9sb29wX2Rpc3RfYWxpYXNfY2FsbCAobG9vcCkpOwogfQogCi0KIC8qIEZ1 bmN0aW9uIHZlY3Rvcml6ZV9sb29wcy4KIAogICAgRW50cnkgcG9pbnQgdG8g bG9vcCB2ZWN0b3JpemF0aW9uIHBoYXNlLiAgKi8KZGlmZiAtLWdpdCBhL2dj Yy90cmVlLXZlY3Rvcml6ZXIuaCBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaApp bmRleCAxNDU2Y2RlNGMyYy4uODc4NzhjODFhNjYgMTAwNjQ0Ci0tLSBhL2dj Yy90cmVlLXZlY3Rvcml6ZXIuaAorKysgYi9nY2MvdHJlZS12ZWN0b3JpemVy LmgKQEAgLTI2LDYgKzI2LDggQEAgdHlwZWRlZiBjbGFzcyBfc3RtdF92ZWNf aW5mbyAqc3RtdF92ZWNfaW5mbzsKICNpbmNsdWRlICJ0cmVlLWRhdGEtcmVm LmgiCiAjaW5jbHVkZSAidHJlZS1oYXNoLXRyYWl0cy5oIgogI2luY2x1ZGUg InRhcmdldC5oIgorI2luY2x1ZGUgInRyZWUtc3NhLXNjY3ZuLmgiCisjaW5j bHVkZSAiaGFzaC1tYXAuaCIKIAogLyogVXNlZCBmb3IgbmFtaW5nIG9mIG5l dyB0ZW1wb3Jhcmllcy4gICovCiBlbnVtIHZlY3RfdmFyX2tpbmQgewpAQCAt MTkzLDYgKzE5NSw5MiBAQCBwdWJsaWM6CiAgIHBvbHlfdWludDY0IG1pbl92 YWx1ZTsKIH07CiAKK3N0cnVjdCBjb25kX3ZtYXNrX2tleQoreworICBjb25k X3ZtYXNrX2tleSAodHJlZSB0LCB0cmVlIGxvb3BfbWFza18pCisgICAgOiBj b25kX29wcyAodCksIGxvb3BfbWFzayAobG9vcF9tYXNrXykKKyAge30KKwor ICBzdGF0aWMgdW5zaWduZWQgZ2V0X3ZhbHVlX2lkICh0cmVlIHgpCisgIHsK KyAgICBpZiAoVFJFRV9DT05TVEFOVCAoeCkpCisgICAgICByZXR1cm4gZ2V0 X29yX2FsbG9jX2NvbnN0YW50X3ZhbHVlX2lkICh4KTsKKyAgICByZXR1cm4g Vk5fSU5GTyAoeCktPnZhbHVlX2lkOworICB9CisKKyAgaGFzaHZhbF90IGhh c2ggKCkgY29uc3QKKyAgeworICAgIGluY2hhc2g6Omhhc2ggaDsKKyAgICBo LmFkZF9pbnQgKGNvbmRfb3BzLmNvZGUpOworICAgIGguYWRkX2ludCAoZ2V0 X3ZhbHVlX2lkIChjb25kX29wcy5vcDApKTsKKyAgICBoLmFkZF9pbnQgKGdl dF92YWx1ZV9pZCAoY29uZF9vcHMub3AxKSk7CisgICAgaC5hZGRfaW50IChT U0FfTkFNRV9WRVJTSU9OIChsb29wX21hc2spKTsKKyAgICByZXR1cm4gaC5l bmQgKCk7CisgIH0KKworICB2b2lkIG1hcmtfZW1wdHkgKCkKKyAgeworICAg IGxvb3BfbWFzayA9IE5VTExfVFJFRTsKKyAgfQorCisgIGJvb2wgaXNfZW1w dHkgKCkKKyAgeworICAgIHJldHVybiBsb29wX21hc2sgPT0gTlVMTF9UUkVF OworICB9CisKKyAgdHJlZV9jb25kX29wcyBjb25kX29wczsKKyAgdHJlZSBs b29wX21hc2s7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09IChjb25z dCBjb25kX3ZtYXNrX2tleSAmYzEsIGNvbnN0IGNvbmRfdm1hc2tfa2V5ICZj MikKK3sKKyAgICByZXR1cm4gYzEubG9vcF9tYXNrID09IGMyLmxvb3BfbWFz aworCSAgICYmIGMxLmNvbmRfb3BzLmNvZGUgPT0gYzIuY29uZF9vcHMuY29k ZQorCSAgICYmIGNvbmRfdm1hc2tfa2V5OjpnZXRfdmFsdWVfaWQgKGMxLmNv bmRfb3BzLm9wMCkKKwkgICAgICA9PSBjb25kX3ZtYXNrX2tleTo6Z2V0X3Zh bHVlX2lkIChjMi5jb25kX29wcy5vcDApCisJICAgJiYgY29uZF92bWFza19r ZXk6OmdldF92YWx1ZV9pZCAoYzEuY29uZF9vcHMub3AxKQorCSAgICAgID09 IGNvbmRfdm1hc2tfa2V5OjpnZXRfdmFsdWVfaWQgKGMyLmNvbmRfb3BzLm9w MSk7Cit9CisKK3N0cnVjdCBjb25kX3ZtYXNrX2tleV90cmFpdHMKK3sKKyAg dHlwZWRlZiBjb25kX3ZtYXNrX2tleSB2YWx1ZV90eXBlOworICB0eXBlZGVm IGNvbmRfdm1hc2tfa2V5IGNvbXBhcmVfdHlwZTsKKworICBzdGF0aWMgaW5s aW5lIGhhc2h2YWxfdCBoYXNoICh2YWx1ZV90eXBlIHYpCisgIHsKKyAgICBy ZXR1cm4gdi5oYXNoICgpOworICB9CisKKyAgc3RhdGljIGlubGluZSBib29s IGVxdWFsICh2YWx1ZV90eXBlIGV4aXN0aW5nLCB2YWx1ZV90eXBlIGNhbmRp ZGF0ZSkKKyAgeworICAgIHJldHVybiBleGlzdGluZyA9PSBjYW5kaWRhdGU7 CisgIH0KKworICBzdGF0aWMgaW5saW5lIHZvaWQgbWFya19lbXB0eSAodmFs dWVfdHlwZSYgdikKKyAgeworICAgIHYubWFya19lbXB0eSAoKTsKKyAgfQor CisgIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19lbXB0eSAodmFsdWVfdHlwZSB2 KQorICB7CisgICAgcmV0dXJuIHYuaXNfZW1wdHkgKCk7CisgIH0KKworICBz dGF0aWMgdm9pZCBtYXJrX2RlbGV0ZWQgKHZhbHVlX3R5cGUmKSB7fQorCisg IHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZWxldGVkICh2YWx1ZV90eXBlKQor ICB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RhdGljIGlubGlu ZSB2b2lkIHJlbW92ZSAodmFsdWVfdHlwZSAmKSB7fQorfTsKKwordHlwZWRl ZiBoYXNoX21hcDxjb25kX3ZtYXNrX2tleSwgdHJlZSwKKwkJIHNpbXBsZV9o YXNobWFwX3RyYWl0cyA8Y29uZF92bWFza19rZXlfdHJhaXRzLCB0cmVlPiA+ CisgIGNvbmRfdm1hc2tfbWFwX3R5cGU7CisKIC8qIFZlY3Rvcml6ZXIgc3Rh dGUgc2hhcmVkIGJldHdlZW4gZGlmZmVyZW50IGFuYWx5c2VzIGxpa2UgdmVj dG9yIHNpemVzCiAgICBvZiB0aGUgc2FtZSBDRkcgcmVnaW9uLiAgKi8KIGNs YXNzIHZlY19pbmZvX3NoYXJlZCB7CkBAIC0yNTUsNiArMzQzLDggQEAgcHVi bGljOgogICAvKiBDb3N0IGRhdGEgdXNlZCBieSB0aGUgdGFyZ2V0IGNvc3Qg bW9kZWwuICAqLwogICB2b2lkICp0YXJnZXRfY29zdF9kYXRhOwogCisgIGNv bmRfdm1hc2tfbWFwX3R5cGUgKmNvbmRfdG9fdmVjX21hc2s7CisKIHByaXZh dGU6CiAgIHN0bXRfdmVjX2luZm8gbmV3X3N0bXRfdmVjX2luZm8gKGdpbXBs ZSAqc3RtdCk7CiAgIHZvaWQgc2V0X3ZpbmZvX2Zvcl9zdG10IChnaW1wbGUg Kiwgc3RtdF92ZWNfaW5mbyk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS5jIGIv Z2NjL3RyZWUuYwppbmRleCA4ZjgwMDEyYzZlOC4uMzJhOGZjZjFlYjggMTAw NjQ0Ci0tLSBhL2djYy90cmVlLmMKKysrIGIvZ2NjL3RyZWUuYwpAQCAtMTUy MDQsNiArMTUyMDQsNDQgQEAgbWF4X29iamVjdF9zaXplICh2b2lkKQogICBy ZXR1cm4gVFlQRV9NQVhfVkFMVUUgKHB0cmRpZmZfdHlwZV9ub2RlKTsKIH0K IAorLyogSWYgY29kZShUKSBpcyBjb21wYXJpc29uIG9wIG9yIGRlZiBvZiBj b21wYXJpc29uIHN0bXQsCisgICBleHRyYWN0IGl0J3Mgb3BlcmFuZHMuCisg ICBFbHNlIHJldHVybiA8TkVfRVhQUiwgVCwgMD4uICAqLworCit0cmVlX2Nv bmRfb3BzOjp0cmVlX2NvbmRfb3BzICh0cmVlIHQpCit7CisgIGlmIChUUkVF X0NPREVfQ0xBU1MgKFRSRUVfQ09ERSAodCkpID09IHRjY19jb21wYXJpc29u KQorICAgIHsKKyAgICAgIHRoaXMtPmNvZGUgPSBUUkVFX0NPREUgKHQpOwor ICAgICAgdGhpcy0+b3AwID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKyAgICAg IHRoaXMtPm9wMSA9IFRSRUVfT1BFUkFORCAodCwgMSk7CisgICAgICByZXR1 cm47CisgICAgfQorCisgIGVsc2UgaWYgKFRSRUVfQ09ERSAodCkgPT0gU1NB X05BTUUpCisgICAgeworICAgICAgZ2Fzc2lnbiAqc3RtdCA9IGR5bl9jYXN0 PGdhc3NpZ24gKj4gKFNTQV9OQU1FX0RFRl9TVE1UICh0KSk7CisgICAgICBp ZiAoc3RtdCkKKwl7CisJICB0cmVlX2NvZGUgY29kZSA9IGdpbXBsZV9hc3Np Z25fcmhzX2NvZGUgKHN0bXQpOworCSAgaWYgKFRSRUVfQ09ERV9DTEFTUyAo Y29kZSkgPT0gdGNjX2NvbXBhcmlzb24pCisJICAgIHsKKwkgICAgICB0aGlz LT5jb2RlID0gY29kZTsKKwkgICAgICB0aGlzLT5vcDAgPSBnaW1wbGVfYXNz aWduX3JoczEgKHN0bXQpOworCSAgICAgIHRoaXMtPm9wMSA9IGdpbXBsZV9h c3NpZ25fcmhzMiAoc3RtdCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJ fQorCisgICAgICB0aGlzLT5jb2RlID0gTkVfRVhQUjsKKyAgICAgIHRoaXMt Pm9wMCA9IHQ7CisgICAgICB0aGlzLT5vcDEgPSBidWlsZF96ZXJvX2NzdCAo VFJFRV9UWVBFICh0KSk7CisgICAgfQorCisgIGVsc2UKKyAgICBnY2NfdW5y ZWFjaGFibGUgKCk7Cit9CisKICNpZiBDSEVDS0lOR19QCiAKIG5hbWVzcGFj ZSBzZWxmdGVzdCB7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS5oIGIvZ2NjL3Ry ZWUuaAppbmRleCA5NGRiYjk1YTc4YS4uNmI5Mzg1MTI5YTggMTAwNjQ0Ci0t LSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtNjE0MSw0ICs2 MTQxLDE0IEBAIHB1YmxpYzoKICAgb3BlcmF0b3IgbG9jYXRpb25fdCAoKSBj b25zdCB7IHJldHVybiBtX2NvbWJpbmVkX2xvYzsgfQogfTsKIAorc3RydWN0 IHRyZWVfY29uZF9vcHMKK3sKKyAgdHJlZV9jb2RlIGNvZGU7CisgIHRyZWUg b3AwOworICB0cmVlIG9wMTsKKworICB0cmVlX2NvbmRfb3BzICh0cmVlKTsK K307CisKKwogI2VuZGlmICAvKiBHQ0NfVFJFRV9IICAqLwo= --00000000000003ac250590f783c2--