From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 44665 invoked by alias); 31 May 2016 13:09:07 -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 44394 invoked by uid 89); 31 May 2016 13:09:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=*stmt, Hook, 1879, Kulkarni X-HELO: mail-it0-f45.google.com Received: from mail-it0-f45.google.com (HELO mail-it0-f45.google.com) (209.85.214.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Tue, 31 May 2016 13:08:54 +0000 Received: by mail-it0-f45.google.com with SMTP id z189so50974729itg.0 for ; Tue, 31 May 2016 06:08:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=m4dMXNd2MFmULAdnPlaJz4mKqvF837/I6UlmNM9NGRk=; b=OBo9FL7NiKn/ho4dhi9k2NoM2wwiPsXM84kTjGIWB4c1QVsL3BK20d/G87nhRAHC79 bvCronmdZ6M5lXShvlZnqa4WUhaXuw+OG5e+HeZnmWIo8U0tuCxQgJDPD2rJR3vc2j2I kDrOuVDTMWylgkZVBNJ7XVK3RZJ21xtCS4UMdwk6vTaD33Mu1DaQvOg+e7hN5uhAwCQb Ud3uNAO0WyElUIfvtFsiY6m/xAG7TqkYR6Ssl8dPyTyW7CeKwWiA57BWtFj65kIS67h+ +b2cc6cc5ZcUAj563po91YQEIciJE+e+xIAsAwHiFUv2RlL0i++MbUddh6rIUBO1k0Bd iuoA== X-Gm-Message-State: ALyK8tJKMcjCr/8vGVAfod0KSdebGqRDwOVVhxklRKBF4vb2TFpAzxZ5PM0LJBcuLEhUb/pehTfn06fCd18tm/3D MIME-Version: 1.0 X-Received: by 10.36.89.4 with SMTP id p4mr12293393itb.44.1464700132683; Tue, 31 May 2016 06:08:52 -0700 (PDT) Received: by 10.36.236.5 with HTTP; Tue, 31 May 2016 06:08:52 -0700 (PDT) In-Reply-To: References: Date: Tue, 31 May 2016 14:20:00 -0000 Message-ID: Subject: Re: RFC [1/2] divmod transform From: Prathamesh Kulkarni To: Richard Biener Cc: Richard Biener , gcc Patches , Ramana Radhakrishnan , Kugan Vivekanandarajah , Jim Wilson , "Joseph S. Myers" Content-Type: multipart/mixed; boundary=001a11449f661e329f0534231359 X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg02410.txt.bz2 --001a11449f661e329f0534231359 Content-Type: text/plain; charset=UTF-8 Content-length: 1676 On 30 May 2016 at 13:15, Richard Biener wrote: > On Mon, 30 May 2016, Prathamesh Kulkarni wrote: > >> The attached patch ICE's during bootstrap for x86_64, and is reproducible with >> following case with -m32 -O2: >> >> typedef long long type; >> >> type f(type x, type y) >> { >> type q = x / y; >> type r = x % y; >> return q + r; >> } >> >> The ICE happens because the test-case hits >> gcc_assert (unsignedp); >> in default_expand_divmod_libfunc (). > > That's of course your function (and ICE). > >> Surprisingly, optab_libfunc (sdivmod_optab, DImode) returns optab_libfunc >> with name "__divmoddi4" although __divmoddi4() is nowhere defined in >> libgcc for x86. >> (I verified that by forcing the patch to generate call to __divmoddi4, >> which results in undefined reference to __divmoddi4). >> >> This happens because in optabs.def we have: >> OPTAB_NL(sdivmod_optab, "divmod$a4", UNKNOWN, "divmod", '4', gen_int_libfunc) >> >> and gen_int_libfunc generates "__divmoddi4" on first call to optab_libfunc >> and sets optab_libfunc (sdivmod_optab, DImode) to "__divmoddi4". >> I wonder if we should remove gen_int_libfunc entry in optabs.def for >> sdivmod_optab ? > > Hum, not sure - you might want to look at expand_divmod (though that > always just computes one part of the result in the end). As a workaround, would it be OK to check if libfunc is __udivmoddi4 if expand_divmod_libfunc is default, as in attached patch ? This prevents ICE for the above test-case. Bootstrap+test on x86_64 in progress. Thanks, Prathamesh > > Joseph - do you know sth about why there's not a full set of divmod > libfuncs in libgcc? > > Thanks, > Richard. --001a11449f661e329f0534231359 Content-Type: text/plain; charset=US-ASCII; name="divmod-part1_6.diff" Content-Disposition: attachment; filename="divmod-part1_6.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iovgg2e60 Content-length: 20187 ZGlmZiAtLWdpdCBhL2djYy9kb2MvdG0udGV4aSBiL2djYy9kb2MvdG0udGV4 aQppbmRleCA4YzdmMmExLi4xMTFmMTlmIDEwMDY0NAotLS0gYS9nY2MvZG9j L3RtLnRleGkKKysrIGIvZ2NjL2RvYy90bS50ZXhpCkBAIC02OTYzLDYgKzY5 NjMsMTIgQEAgVGhpcyBpcyBmaXJzdGx5IGludHJvZHVjZWQgb24gQVJNL0FB cmNoNjQgdGFyZ2V0cywgcGxlYXNlIHJlZmVyIHRvCiB0aGUgaG9vayBpbXBs ZW1lbnRhdGlvbiBmb3IgaG93IGRpZmZlcmVudCBmdXNpb24gdHlwZXMgYXJl IHN1cHBvcnRlZC4KIEBlbmQgZGVmdHlwZWZuCiAKK0BkZWZ0eXBlZm4ge1Rh cmdldCBIb29rfSB2b2lkIFRBUkdFVF9FWFBBTkRfRElWTU9EX0xJQkZVTkMg KGJvb2wgQHZhcnt1bnNpZ25lZHB9LCBtYWNoaW5lX21vZGUgQHZhcnttb2Rl fSwgQHZhcntydHh9LCBAdmFye3J0eH0sIHJ0eCAqQHZhcntxdW90fSwgcnR4 ICpAdmFye3JlbX0pCitEZWZpbmUgdGhpcyBob29rIGlmIHRoZSBwb3J0IGRv ZXMgbm90IGhhdmUgaGFyZHdhcmUgZGl2IGFuZCBkaXZtb2QgaW5zbiBmb3IK K3RoZSBnaXZlbiBtb2RlIGJ1dCBoYXMgZGl2bW9kIGxpYmZ1bmMsIHdoaWNo IGlzIGluY29tcGF0aWJsZQord2l0aCBsaWJnY2MyLmM6X191ZGl2bW9kZGk0 CitAZW5kIGRlZnR5cGVmbgorCiBAbm9kZSBTZWN0aW9ucwogQHNlY3Rpb24g RGl2aWRpbmcgdGhlIE91dHB1dCBpbnRvIFNlY3Rpb25zIChUZXh0cywgRGF0 YSwgQGRvdHN7fSkKIEBjIHRoZSBhYm92ZSBzZWN0aW9uIHRpdGxlIGlzIFdB WSB0b28gbG9uZy4gIG1heWJlIGN1dCB0aGUgcGFydCBiZXR3ZWVuCmRpZmYg LS1naXQgYS9nY2MvZG9jL3RtLnRleGkuaW4gYi9nY2MvZG9jL3RtLnRleGku aW4KaW5kZXggZjk2M2E1OC4uMmM5YTgwMCAxMDA2NDQKLS0tIGEvZ2NjL2Rv Yy90bS50ZXhpLmluCisrKyBiL2djYy9kb2MvdG0udGV4aS5pbgpAQCAtNDg0 OCw2ICs0ODQ4LDggQEAgdGhlbTogdHJ5IHRoZSBmaXJzdCBvbmVzIGluIHRo aXMgbGlzdCBmaXJzdC4KIAogQGhvb2sgVEFSR0VUX1NDSEVEX0ZVU0lPTl9Q UklPUklUWQogCitAaG9vayBUQVJHRVRfRVhQQU5EX0RJVk1PRF9MSUJGVU5D CisKIEBub2RlIFNlY3Rpb25zCiBAc2VjdGlvbiBEaXZpZGluZyB0aGUgT3V0 cHV0IGludG8gU2VjdGlvbnMgKFRleHRzLCBEYXRhLCBAZG90c3t9KQogQGMg dGhlIGFib3ZlIHNlY3Rpb24gdGl0bGUgaXMgV0FZIHRvbyBsb25nLiAgbWF5 YmUgY3V0IHRoZSBwYXJ0IGJldHdlZW4KZGlmZiAtLWdpdCBhL2djYy9pbnRl cm5hbC1mbi5jIGIvZ2NjL2ludGVybmFsLWZuLmMKaW5kZXggYzg2N2RkYy4u MGNiNTlmNyAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmMKKysrIGIv Z2NjL2ludGVybmFsLWZuLmMKQEAgLTIyNzYsNiArMjI3Niw0OCBAQCBtdWx0 aV92ZWN0b3Jfb3B0YWJfc3VwcG9ydGVkX3AgKGNvbnZlcnRfb3B0YWIgb3B0 YWIsIHRyZWVfcGFpciB0eXBlcywKICNkZWZpbmUgZGlyZWN0X21hc2tfc3Rv cmVfb3B0YWJfc3VwcG9ydGVkX3AgZGlyZWN0X29wdGFiX3N1cHBvcnRlZF9w CiAjZGVmaW5lIGRpcmVjdF9zdG9yZV9sYW5lc19vcHRhYl9zdXBwb3J0ZWRf cCBtdWx0aV92ZWN0b3Jfb3B0YWJfc3VwcG9ydGVkX3AKIAorLyogRXhwYW5k IERJVk1PRCgpIHVzaW5nOgorIGEpIG9wdGFiIGhhbmRsZXIgZm9yIHVkaXZt b2Qvc2Rpdm1vZCBpZiBpdCBpcyBhdmFpbGFibGUuCisgYikgSWYgb3B0YWJf aGFuZGxlciBkb2Vzbid0IGV4aXN0LCBHZW5lcmF0ZSBjYWxsIHRvCisgICAg b3B0YWJfbGliZnVuYyBmb3IgdWRpdm1vZC9zZGl2bW9kLiAgKi8KKworc3Rh dGljIHZvaWQgCitleHBhbmRfRElWTU9EIChpbnRlcm5hbF9mbiwgZ2NhbGwg KnN0bXQpCit7CisgIHRyZWUgbGhzID0gZ2ltcGxlX2NhbGxfbGhzIChzdG10 KTsKKyAgdHJlZSBhcmcwID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAwKTsK KyAgdHJlZSBhcmcxID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCAxKTsKKwor ICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKFRSRUVfVFlQRSAobGhzKSkgPT0g Q09NUExFWF9UWVBFKTsKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChUUkVF X1RZUEUgKGxocykpOworICBtYWNoaW5lX21vZGUgbW9kZSA9IFRZUEVfTU9E RSAodHlwZSk7CisgIGJvb2wgdW5zaWduZWRwID0gVFlQRV9VTlNJR05FRCAo dHlwZSk7CisgIG9wdGFiIHRhYiA9ICh1bnNpZ25lZHApID8gdWRpdm1vZF9v cHRhYiA6IHNkaXZtb2Rfb3B0YWI7CisKKyAgcnR4IG9wMCA9IGV4cGFuZF9u b3JtYWwgKGFyZzApOworICBydHggb3AxID0gZXhwYW5kX25vcm1hbCAoYXJn MSk7CisgIHJ0eCB0YXJnZXQgPSBleHBhbmRfZXhwciAobGhzLCBOVUxMX1JU WCwgVk9JRG1vZGUsIEVYUEFORF9XUklURSk7CisKKyAgcnR4IHF1b3RpZW50 LCByZW1haW5kZXI7CisKKyAgLyogQ2hlY2sgaWYgb3B0YWIgaGFuZGxlciBl eGlzdHMgZm9yIFt1XWRpdm1vZC4gICovCisgIGlmIChvcHRhYl9oYW5kbGVy ICh0YWIsIG1vZGUpICE9IENPREVfRk9SX25vdGhpbmcpCisgICAgeworICAg ICAgcXVvdGllbnQgPSBnZW5fcmVnX3J0eCAobW9kZSk7CisgICAgICByZW1h aW5kZXIgPSBnZW5fcmVnX3J0eCAobW9kZSk7CisgICAgICBleHBhbmRfdHdv dmFsX2Jpbm9wICh0YWIsIG9wMCwgb3AxLCBxdW90aWVudCwgcmVtYWluZGVy LCB1bnNpZ25lZHApOworICAgIH0KKyAgZWxzZQorICAgIHRhcmdldG0uZXhw YW5kX2Rpdm1vZF9saWJmdW5jICh1bnNpZ25lZHAsIG1vZGUsIG9wMCwgb3Ax LAorCQkJCSAgICZxdW90aWVudCwgJnJlbWFpbmRlcik7CisKKyAgLyogV3Jh cCB0aGUgcmV0dXJuIHZhbHVlIChxdW90aWVudCwgcmVtYWluZGVyKSB3aXRo aW4gQ09NUExFWF9FWFBSLiAgKi8KKyAgZXhwYW5kX2V4cHIgKGJ1aWxkMiAo Q09NUExFWF9FWFBSLCBUUkVFX1RZUEUgKGxocyksCisJCSAgICAgICBtYWtl X3RyZWUgKFRSRUVfVFlQRSAoYXJnMCksIHF1b3RpZW50KSwKKwkJICAgICAg IG1ha2VfdHJlZSAoVFJFRV9UWVBFIChhcmcxKSwgcmVtYWluZGVyKSksCisJ ICAgICAgIHRhcmdldCwgVk9JRG1vZGUsIEVYUEFORF9OT1JNQUwpOworfQor CiAvKiBSZXR1cm4gdHJ1ZSBpZiBGTiBpcyBzdXBwb3J0ZWQgZm9yIHRoZSB0 eXBlcyBpbiBUWVBFUyB3aGVuIHRoZQogICAgb3B0aW1pemF0aW9uIHR5cGUg aXMgT1BUX1RZUEUuICBUaGUgdHlwZXMgYXJlIHRob3NlIGFzc29jaWF0ZWQg d2l0aAogICAgdGhlICJ0eXBlMCIgYW5kICJ0eXBlMSIgZmllbGRzIG9mIEZO J3MgZGlyZWN0X2ludGVybmFsX2ZuX2luZm8KZGlmZiAtLWdpdCBhL2djYy9p bnRlcm5hbC1mbi5kZWYgYi9nY2MvaW50ZXJuYWwtZm4uZGVmCmluZGV4IGU3 MjlkODUuLjU2YTgwZjEgMTAwNjQ0Ci0tLSBhL2djYy9pbnRlcm5hbC1mbi5k ZWYKKysrIGIvZ2NjL2ludGVybmFsLWZuLmRlZgpAQCAtMTk0LDYgKzE5NCw5 IEBAIERFRl9JTlRFUk5BTF9GTiAoQVRPTUlDX0JJVF9URVNUX0FORF9TRVQs IEVDRl9MRUFGIHwgRUNGX05PVEhST1csIE5VTEwpCiBERUZfSU5URVJOQUxf Rk4gKEFUT01JQ19CSVRfVEVTVF9BTkRfQ09NUExFTUVOVCwgRUNGX0xFQUYg fCBFQ0ZfTk9USFJPVywgTlVMTCkKIERFRl9JTlRFUk5BTF9GTiAoQVRPTUlD X0JJVF9URVNUX0FORF9SRVNFVCwgRUNGX0xFQUYgfCBFQ0ZfTk9USFJPVywg TlVMTCkKIAorLyogRGl2bW9kIGZ1bmN0aW9uLiAgKi8KK0RFRl9JTlRFUk5B TF9GTiAoRElWTU9ELCBFQ0ZfQ09OU1QgfCBFQ0ZfTEVBRiwgTlVMTCkKKwog I3VuZGVmIERFRl9JTlRFUk5BTF9JTlRfRk4KICN1bmRlZiBERUZfSU5URVJO QUxfRkxUX0ZOCiAjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX0ZOCmRpZmYg LS1naXQgYS9nY2MvdGFyZ2V0LmRlZiBiL2djYy90YXJnZXQuZGVmCmluZGV4 IDYzOTJlNzMuLjQ0OTZmOWEgMTAwNjQ0Ci0tLSBhL2djYy90YXJnZXQuZGVm CisrKyBiL2djYy90YXJnZXQuZGVmCkBAIC00OTQ4LDYgKzQ5NDgsMTYgQEAg Tm9ybWFsbHksIHRoaXMgaXMgbm90IG5lZWRlZC4iLAogIGJvb2wsIChjb25z dF90cmVlIGZpZWxkLCBtYWNoaW5lX21vZGUgbW9kZSksCiAgZGVmYXVsdF9t ZW1iZXJfdHlwZV9mb3JjZXNfYmxrKQogCisvKiBTZWUgdHJlZS1zc2EtbWF0 aC1vcHRzLmM6ZGl2bW9kX2NhbmRpZGF0ZV9wIGZvciBjb25kaXRpb25zIHRo YXQgZ2F0ZQorICAgdGhlIGRpdm1vZCB0cmFuc2Zvcm0uICAqLworREVGSE9P SworKGV4cGFuZF9kaXZtb2RfbGliZnVuYywKKyAiRGVmaW5lIHRoaXMgaG9v ayBpZiB0aGUgcG9ydCBkb2VzIG5vdCBoYXZlIGhhcmR3YXJlIGRpdiBhbmQg ZGl2bW9kIGluc24gZm9yXG5cCit0aGUgZ2l2ZW4gbW9kZSBidXQgaGFzIGRp dm1vZCBsaWJmdW5jLCB3aGljaCBpcyBpbmNvbXBhdGlibGVcblwKK3dpdGgg bGliZ2NjMi5jOl9fdWRpdm1vZGRpNCIsCisgdm9pZCwgKGJvb2wgdW5zaWdu ZWRwLCBtYWNoaW5lX21vZGUgbW9kZSwgcnR4LCBydHgsIHJ0eCAqcXVvdCwg cnR4ICpyZW0pLAorIGRlZmF1bHRfZXhwYW5kX2Rpdm1vZF9saWJmdW5jKQor CiAvKiBSZXR1cm4gdGhlIGNsYXNzIGZvciBhIHNlY29uZGFyeSByZWxvYWQs IGFuZCBmaWxsIGluIGV4dHJhIGluZm9ybWF0aW9uLiAgKi8KIERFRkhPT0sK IChzZWNvbmRhcnlfcmVsb2FkLApkaWZmIC0tZ2l0IGEvZ2NjL3Rhcmdob29r cy5jIGIvZ2NjL3Rhcmdob29rcy5jCmluZGV4IDZiNDYwMWIuLjIwMzI3YTYg MTAwNjQ0Ci0tLSBhL2djYy90YXJnaG9va3MuYworKysgYi9nY2MvdGFyZ2hv b2tzLmMKQEAgLTE5NjUsNCArMTk2NSwzMSBAQCBkZWZhdWx0X29wdGFiX3N1 cHBvcnRlZF9wIChpbnQsIG1hY2hpbmVfbW9kZSwgbWFjaGluZV9tb2RlLCBv cHRpbWl6YXRpb25fdHlwZSkKICAgcmV0dXJuIHRydWU7CiB9CiAKKy8qIEdl bmVyYXRlIGNhbGwgdG8KKyAgIERJbW9kZSBfX3VkaXZtb2RkaTQgKERJbW9k ZSBvcDAsIERJbW9kZSBvcDEsIERJbW9kZSAqcmVtKS4gICovCisKK3ZvaWQK K2RlZmF1bHRfZXhwYW5kX2Rpdm1vZF9saWJmdW5jIChib29sIHVuc2lnbmVk cCwgbWFjaGluZV9tb2RlIG1vZGUsCisJCQkgICAgICAgcnR4IG9wMCwgcnR4 IG9wMSwKKwkJCSAgICAgICBydHggKnF1b3RfcCwgcnR4ICpyZW1fcCkKK3sK KyAgZ2NjX2Fzc2VydCAobW9kZSA9PSBESW1vZGUpOworICBnY2NfYXNzZXJ0 ICh1bnNpZ25lZHApOworCisgIHJ0eCBsaWJmdW5jID0gb3B0YWJfbGliZnVu YyAodWRpdm1vZF9vcHRhYiwgREltb2RlKTsKKyAgZ2NjX2Fzc2VydCAobGli ZnVuYyk7CisKKyAgcnR4IHJlbWFpbmRlciA9IGFzc2lnbl9zdGFja190ZW1w IChESW1vZGUsIEdFVF9NT0RFX1NJWkUgKERJbW9kZSkpOworICBydHggYWRk cmVzcyA9IFhFWFAgKHJlbWFpbmRlciwgMCk7CisKKyAgcnR4IHF1b3RpZW50 ID0gZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUgKGxpYmZ1bmMsIE5VTExfUlRY LCBMQ1RfQ09OU1QsCisJCQkJCSAgREltb2RlLCAzLAorCQkJCQkgIG9wMCwg R0VUX01PREUgKG9wMCksCisJCQkJCSAgb3AxLCBHRVRfTU9ERSAob3AxKSwK KwkJCQkJICBhZGRyZXNzLCBHRVRfTU9ERSAoYWRkcmVzcykpOworCisgICpx dW90X3AgPSBxdW90aWVudDsKKyAgKnJlbV9wID0gcmVtYWluZGVyOworfQor CiAjaW5jbHVkZSAiZ3QtdGFyZ2hvb2tzLmgiCmRpZmYgLS1naXQgYS9nY2Mv dGFyZ2hvb2tzLmggYi9nY2MvdGFyZ2hvb2tzLmgKaW5kZXggNzY4N2MzOS4u ZGM1ZThlNyAxMDA2NDQKLS0tIGEvZ2NjL3Rhcmdob29rcy5oCisrKyBiL2dj Yy90YXJnaG9va3MuaApAQCAtMjU0LDQgKzI1NCw3IEBAIGV4dGVybiB2b2lk IGRlZmF1bHRfc2V0dXBfaW5jb21pbmdfdmFyYXJnX2JvdW5kcyAoY3VtdWxh dGl2ZV9hcmdzX3QgY2EgQVRUUklCVVRFCiBleHRlcm4gYm9vbCBkZWZhdWx0 X29wdGFiX3N1cHBvcnRlZF9wIChpbnQsIG1hY2hpbmVfbW9kZSwgbWFjaGlu ZV9tb2RlLAogCQkJCSAgICAgICBvcHRpbWl6YXRpb25fdHlwZSk7CiAKK2V4 dGVybiB2b2lkIGRlZmF1bHRfZXhwYW5kX2Rpdm1vZF9saWJmdW5jIChib29s LCBtYWNoaW5lX21vZGUsCisJCQkJCSAgIHJ0eCwgcnR4LCBydHggKiwgcnR4 ICopOworCiAjZW5kaWYgLyogR0NDX1RBUkdIT09LU19IICovCmRpZmYgLS1n aXQgYS9nY2MvdHJlZS1zc2EtbWF0aC1vcHRzLmMgYi9nY2MvdHJlZS1zc2Et bWF0aC1vcHRzLmMKaW5kZXggODE2ODhjZC4uOWJkZTc5ZiAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtc3NhLW1hdGgtb3B0cy5jCisrKyBiL2djYy90cmVlLXNz YS1tYXRoLW9wdHMuYwpAQCAtMTEyLDYgKzExMiw5IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAicGFyYW1zLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwtZm4uaCIKICNp bmNsdWRlICJjYXNlLWNmbi1tYWNyb3MuaCIKKyNpbmNsdWRlICJvcHRhYnMt bGliZnVuY3MuaCIKKyNpbmNsdWRlICJ0cmVlLWVoLmgiCisjaW5jbHVkZSAi dGFyZ2hvb2tzLmgiCiAKIC8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMg b25lIGJhc2ljIGJsb2NrIHRoYXQgZWl0aGVyIGNvbXB1dGVzIGEKICAgIGRp dmlzaW9uLCBvciBpcyBhIGNvbW1vbiBkb21pbmF0b3IgZm9yIGJhc2ljIGJs b2NrIHRoYXQgY29tcHV0ZSBhCkBAIC0xODQsNiArMTg3LDkgQEAgc3RhdGlj IHN0cnVjdAogCiAgIC8qIE51bWJlciBvZiBmcCBmdXNlZCBtdWx0aXBseS1h ZGQgb3BzIGluc2VydGVkLiAgKi8KICAgaW50IGZtYXNfaW5zZXJ0ZWQ7CisK KyAgLyogTnVtYmVyIG9mIGRpdm1vZCBjYWxscyBpbnNlcnRlZC4gICovCisg IGludCBkaXZtb2RfY2FsbHNfaW5zZXJ0ZWQ7CiB9IHdpZGVuX211bF9zdGF0 czsKIAogLyogVGhlIGluc3RhbmNlIG9mICJzdHJ1Y3Qgb2NjdXJyZW5jZSIg cmVwcmVzZW50aW5nIHRoZSBoaWdoZXN0CkBAIC0zNzg0LDYgKzM3OTAsMjI4 IEBAIG1hdGNoX3VhZGRzdWJfb3ZlcmZsb3cgKGdpbXBsZV9zdG10X2l0ZXJh dG9yICpnc2ksIGdpbXBsZSAqc3RtdCwKICAgcmV0dXJuIHRydWU7CiB9CiAK Ky8qIFJldHVybiB0cnVlIGlmIHRhcmdldCBoYXMgc3VwcG9ydCBmb3IgZGl2 bW9kLiAgKi8KKworc3RhdGljIGJvb2wKK3RhcmdldF9zdXBwb3J0c19kaXZt b2RfcCAob3B0YWIgZGl2bW9kX29wdGFiLCBvcHRhYiBkaXZfb3B0YWIsIG1h Y2hpbmVfbW9kZSBtb2RlKSAKK3sKKyAgLyogSWYgdGFyZ2V0IHN1cHBvcnRz IGhhcmR3YXJlIGRpdm1vZCBpbnNuLCB1c2UgaXQgZm9yIGRpdm1vZC4gICov CisgIGlmIChvcHRhYl9oYW5kbGVyIChkaXZtb2Rfb3B0YWIsIG1vZGUpICE9 IENPREVfRk9SX25vdGhpbmcpCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyog Q2hlY2sgaWYgbGliZnVuYyBmb3IgZGl2bW9kIGlzIGF2YWlsYWJsZS4gICov CisgIHJ0eCBsaWJmdW5jID0gb3B0YWJfbGliZnVuYyAoZGl2bW9kX29wdGFi LCBtb2RlKTsKKyAgaWYgKGxpYmZ1bmMgIT0gTlVMTF9SVFgpCisgICAgewor ICAgICAgLyogSWYgb3B0YWJfaGFuZGxlciBleGlzdHMgZm9yIGRpdl9vcHRh YiwgcGVyaGFwcyBpbiBhIHdpZGVyIG1vZGUsCisJIHdlIGRvbid0IHdhbnQg dG8gdXNlIHRoZSBsaWJmdW5jIGV2ZW4gaWYgaXQgZXhpc3RzIGZvciBnaXZl biBtb2RlLiAgKi8gCisgICAgICBmb3IgKG1hY2hpbmVfbW9kZSBkaXZfbW9k ZSA9IG1vZGU7CisJICAgZGl2X21vZGUgIT0gVk9JRG1vZGU7CisJICAgZGl2 X21vZGUgPSBHRVRfTU9ERV9XSURFUl9NT0RFIChkaXZfbW9kZSkpCisJaWYg KG9wdGFiX2hhbmRsZXIgKGRpdl9vcHRhYiwgZGl2X21vZGUpICE9IENPREVf Rk9SX25vdGhpbmcpCisJICByZXR1cm4gZmFsc2U7CisKKyAgICAgIC8qIEZJ WE1FOiBUaGlzIGlzIGEgaGFjayB0byB3b3JrYXJvdW5kIGFuIGlzc3VlIHdp dGggb3B0YWJfbGliZnVuYygpLgorCSBvcHRhYl9saWJmdW5jIChzZGl2bW9k X29wdGFiLCBESW1vZGUpIHJldHVybnMgbGliZnVuYyAiX19kaXZtb2RkaTQi LAorCSBhbHRob3VnaCBfX2Rpdm1vZGRpNCgpIGRvZXMgbm90IGV4aXN0IGlu IGxpYmdjYy4gRm9yIG5vdywgZW5hYmxlIHRoZQorCSB0cmFuc2Zvcm0gb25s eSBpZiBsaWJmdW5jIGlzIGd1YXJhbnRlZWQgdG8gYmUgX191ZGl2bW9kZGk0 LiAgKi8KKyAgICAgIHJldHVybiAodGFyZ2V0bS5leHBhbmRfZGl2bW9kX2xp YmZ1bmMgIT0gZGVmYXVsdF9leHBhbmRfZGl2bW9kX2xpYmZ1bmMKKwkgICAg IHx8ICFzdHJjbXAgKFhTVFIgKGxpYmZ1bmMsIDApLCAiX191ZGl2bW9kZGk0 IikpOworICAgIH0KKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIENoZWNr IGlmIHN0bXQgaXMgY2FuZGlkYXRlIGZvciBkaXZtb2QgdHJhbnNmb3JtLiAg Ki8KKworc3RhdGljIGJvb2wKK2Rpdm1vZF9jYW5kaWRhdGVfcCAoZ2Fzc2ln biAqc3RtdCkKK3sKKyAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChnaW1wbGVf YXNzaWduX2xocyAoc3RtdCkpOworICBlbnVtIG1hY2hpbmVfbW9kZSBtb2Rl ID0gVFlQRV9NT0RFICh0eXBlKTsKKyAgb3B0YWIgZGl2bW9kX29wdGFiLCBk aXZfb3B0YWI7CisKKyAgaWYgKFRZUEVfVU5TSUdORUQgKHR5cGUpKQorICAg IHsKKyAgICAgIGRpdm1vZF9vcHRhYiA9IHVkaXZtb2Rfb3B0YWI7CisgICAg ICBkaXZfb3B0YWIgPSB1ZGl2X29wdGFiOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGRpdm1vZF9vcHRhYiA9IHNkaXZtb2Rfb3B0YWI7CisgICAg ICBkaXZfb3B0YWIgPSBzZGl2X29wdGFiOworICAgIH0KKworICB0cmVlIG9w MSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisgIHRyZWUgb3AyID0g Z2ltcGxlX2Fzc2lnbl9yaHMyIChzdG10KTsKKworICAvKiBEaXNhYmxlIHRo ZSB0cmFuc2Zvcm0gaWYgZWl0aGVyIGlzIGEgY29uc3RhbnQsIHNpbmNlIGRp dmlzaW9uLWJ5LWNvbnN0YW50CisgICAgIG1heSBoYXZlIHNwZWNpYWxpemVk IGV4cGFuc2lvbi4gICovCisgIGlmIChDT05TVEFOVF9DTEFTU19QIChvcDEp IHx8IENPTlNUQU5UX0NMQVNTX1AgKG9wMikpCisgICAgcmV0dXJuIGZhbHNl OworCisgIC8qIEV4Y2x1ZGUgdGhlIGNhc2Ugd2hlcmUgVFlQRV9PVkVSRkxP V19UUkFQUyAodHlwZSkgYXMgdGhhdCBzaG91bGQKKyAgICAgZXhwYW5kIHVz aW5nIHRoZSBbc3VdZGl2diBvcHRhYnMuICAqLworICBpZiAoVFlQRV9PVkVS RkxPV19UUkFQUyAodHlwZSkpCisgICAgcmV0dXJuIGZhbHNlOworICAKKyAg aWYgKCF0YXJnZXRfc3VwcG9ydHNfZGl2bW9kX3AgKGRpdm1vZF9vcHRhYiwg ZGl2X29wdGFiLCBtb2RlKSkgCisgICAgcmV0dXJuIGZhbHNlOworCisgIHJl dHVybiB0cnVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvcjoK KyAgIHQxID0gYSBUUlVOQ19ESVZfRVhQUiBiOworICAgdDIgPSBhIFRSVU5D X01PRF9FWFBSIGI7CisgICBhbmQgdHJhbnNmb3JtcyBpdCB0byB0aGUgZm9s bG93aW5nIHNlcXVlbmNlOgorICAgY29tcGxleF90bXAgPSBESVZNT0QgKGEs IGIpOworICAgdDEgPSBSRUFMUEFSVF9FWFBSKGEpOworICAgdDIgPSBJTUFH UEFSVF9FWFBSKGIpOworICAgRm9yIGNvbmRpdGlvbnMgZW5hYmxpbmcgdGhl IHRyYW5zZm9ybSBzZWUgZGl2bW9kX2NhbmRpZGF0ZV9wKCkuCisKKyAgIFRo ZSBwYXNzIHdvcmtzIGluIHR3byBwaGFzZXM6CisgICAxKSBXYWxrIHRocm91 Z2ggYWxsIGltbWVkaWF0ZSB1c2VzIG9mIHN0bXQncyBvcGVyYW5kIGFuZCBm aW5kIGEKKyAgICAgIFRSVU5DX0RJVl9FWFBSIHdpdGggbWF0Y2hpbmcgb3Bl cmFuZHMgYW5kIGlmIHN1Y2ggYSBzdG10IGlzIGZvdW5kIGFkZAorICAgICAg aXQgdG8gc3RtdHMgdmVjdG9yLgorICAgMikgSW5zZXJ0IERJVk1PRCBjYWxs IGJlZm9yZSBmaXJzdCBkaXYvbW9kIHN0bXQgaW4gdG9wX2JiIChiYXNpYyBi bG9jayB0aGF0CisgICAgICBkb21pbmF0ZXMgb3RoZXIgZGl2L21vZCBzdG10 cyB3aXRoIHNhbWUgb3BlcmFuZHMpIGFuZCB1cGRhdGUgZW50cmllcyBpbgor ICAgICAgc3RtdHMgdmVjdG9yIHRvIHVzZSByZXR1cm4gdmFsdWUgb2YgRElN T1ZEIChSRUFMRVhQUl9QQVJUIGZvciBkaXYsCisgICAgICBJTUFHUEFSVF9F WFBSIGZvciBtb2QpLiAgKi8KKworc3RhdGljIGJvb2wKK2NvbnZlcnRfdG9f ZGl2bW9kIChnYXNzaWduICpzdG10KQoreworICBpZiAoIWRpdm1vZF9jYW5k aWRhdGVfcCAoc3RtdCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHRyZWUg b3AxID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKyAgdHJlZSBvcDIg PSBnaW1wbGVfYXNzaWduX3JoczIgKHN0bXQpOworICAKKyAgaW1tX3VzZV9p dGVyYXRvciB1c2VfaXRlcjsKKyAgZ2ltcGxlICp1c2Vfc3RtdDsKKyAgYXV0 b192ZWM8Z2ltcGxlICo+IHN0bXRzOyAKKworICBnaW1wbGUgKnRvcF9zdG10 ID0gc3RtdDsgCisgIGJhc2ljX2Jsb2NrIHRvcF9iYiA9IGdpbXBsZV9iYiAo c3RtdCk7CisKKyAgLyogVHJ5IHRvIHNldCB0b3Bfc3RtdCB0byAidG9wbW9z dCIgc3RtdAorICAgICB3aXRoIGNvZGUgVFJVTkNfRElWX0VYUFIvVFJVTkNf TU9EX0VYUFIgaGF2aW5nIHNhbWUgb3BlcmFuZHMgYXMgc3RtdC4gICovCisK KyAgRk9SX0VBQ0hfSU1NX1VTRV9TVE1UICh1c2Vfc3RtdCwgdXNlX2l0ZXIs IG9wMSkKKyAgICB7CisgICAgICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAodXNl X3N0bXQpCisJICAmJiAoZ2ltcGxlX2Fzc2lnbl9yaHNfY29kZSAodXNlX3N0 bXQpID09IFRSVU5DX0RJVl9FWFBSCisJICAgICAgfHwgZ2ltcGxlX2Fzc2ln bl9yaHNfY29kZSAodXNlX3N0bXQpID09IFRSVU5DX01PRF9FWFBSKQorCSAg JiYgb3BlcmFuZF9lcXVhbF9wIChvcDEsIGdpbXBsZV9hc3NpZ25fcmhzMSAo dXNlX3N0bXQpLCAwKQorCSAgJiYgb3BlcmFuZF9lcXVhbF9wIChvcDIsIGdp bXBsZV9hc3NpZ25fcmhzMiAodXNlX3N0bXQpLCAwKSkKKwl7CisJICBpZiAo c3RtdF9jYW5fdGhyb3dfaW50ZXJuYWwgKHVzZV9zdG10KSkKKwkgICAgY29u dGludWU7CisKKwkgIGJhc2ljX2Jsb2NrIGJiID0gZ2ltcGxlX2JiICh1c2Vf c3RtdCk7CisKKwkgIGlmIChiYiA9PSB0b3BfYmIpCisJICAgIHsKKwkgICAg ICBpZiAoZ2ltcGxlX3VpZCAodXNlX3N0bXQpIDwgZ2ltcGxlX3VpZCAodG9w X3N0bXQpKQorCQl0b3Bfc3RtdCA9IHVzZV9zdG10OworCSAgICB9CisJICBl bHNlIGlmIChkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMsIHRvcF9i YiwgYmIpKQorCSAgICB7CisJICAgICAgdG9wX2JiID0gYmI7CisJICAgICAg dG9wX3N0bXQgPSB1c2Vfc3RtdDsKKwkgICAgfQorCX0KKyAgICB9CisKKyAg aWYgKHRvcF9zdG10ID09IHN0bXQgJiYgc3RtdF9jYW5fdGhyb3dfaW50ZXJu YWwgKHRvcF9zdG10KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgdHJlZSB0 b3Bfb3AxID0gZ2ltcGxlX2Fzc2lnbl9yaHMxICh0b3Bfc3RtdCk7CisgIHRy ZWUgdG9wX29wMiA9IGdpbXBsZV9hc3NpZ25fcmhzMiAodG9wX3N0bXQpOwor CisgIHN0bXRzLnNhZmVfcHVzaCAodG9wX3N0bXQpOworICBib29sIGRpdl9z ZWVuID0gKGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHRvcF9zdG10KSA9PSBU UlVOQ19ESVZfRVhQUik7CisKKyAgLyogRW5zdXJlIHRoYXQgZ2ltcGxlX2Ji ICh1c2Vfc3RtdCkgaXMgZG9taW5hdGVkIGJ5IHRvcF9iYi4gICovICAgIAor CisgIEZPUl9FQUNIX0lNTV9VU0VfU1RNVCAodXNlX3N0bXQsIHVzZV9pdGVy LCB0b3Bfb3AxKQorICAgIHsKKyAgICAgIGlmIChpc19naW1wbGVfYXNzaWdu ICh1c2Vfc3RtdCkKKwkgICYmIChnaW1wbGVfYXNzaWduX3Joc19jb2RlICh1 c2Vfc3RtdCkgPT0gVFJVTkNfRElWX0VYUFIKKwkgICAgICB8fCBnaW1wbGVf YXNzaWduX3Joc19jb2RlICh1c2Vfc3RtdCkgPT0gVFJVTkNfTU9EX0VYUFIp CisJICAmJiBvcGVyYW5kX2VxdWFsX3AgKHRvcF9vcDEsIGdpbXBsZV9hc3Np Z25fcmhzMSAodXNlX3N0bXQpLCAwKQorCSAgJiYgb3BlcmFuZF9lcXVhbF9w ICh0b3Bfb3AyLCBnaW1wbGVfYXNzaWduX3JoczIgKHVzZV9zdG10KSwgMCkp CisJeworCSAgaWYgKHVzZV9zdG10ID09IHRvcF9zdG10KQorCSAgICBjb250 aW51ZTsKKworCSAgaWYgKHN0bXRfY2FuX3Rocm93X2ludGVybmFsICh1c2Vf c3RtdCkpCisJICAgIGNvbnRpbnVlOworCisJICBpZiAoIWRvbWluYXRlZF9i eV9wIChDRElfRE9NSU5BVE9SUywgZ2ltcGxlX2JiICh1c2Vfc3RtdCksIHRv cF9iYikpCisJICAgIHsKKwkgICAgICBlbmRfaW1tX3VzZV9zdG10X3RyYXZl cnNlICgmdXNlX2l0ZXIpOworCSAgICAgIHJldHVybiBmYWxzZTsKKwkgICAg fQorCisJICBzdG10cy5zYWZlX3B1c2ggKHVzZV9zdG10KTsKKwkgIGlmIChn aW1wbGVfYXNzaWduX3Joc19jb2RlICh1c2Vfc3RtdCkgPT0gVFJVTkNfRElW X0VYUFIpCisJICAgIGRpdl9zZWVuID0gdHJ1ZTsKKwl9CisgICAgfQorCisg IGlmICghZGl2X3NlZW4pCisgICAgcmV0dXJuIGZhbHNlOworCisgIC8qIENy ZWF0ZSBsaWJjYWxsIHRvIGludGVybmFsIGZuIERJVk1PRDoKKyAgICAgZGl2 bW9kX3RtcCA9IERJVk1PRCAob3AxLCBvcDIpLiAgKi8KKworICBnY2FsbCAq Y2FsbF9zdG10ID0gZ2ltcGxlX2J1aWxkX2NhbGxfaW50ZXJuYWwgKElGTl9E SVZNT0QsIDIsIG9wMSwgb3AyKTsKKyAgdHJlZSByZXMgPSBtYWtlX3RlbXBf c3NhX25hbWUgKAorCQlidWlsZF9jb21wbGV4X3R5cGUgKFRSRUVfVFlQRSAo b3AxKSksCisJCWNhbGxfc3RtdCwgImRpdm1vZF90bXAiKTsKKyAgZ2ltcGxl X2NhbGxfc2V0X2xocyAoY2FsbF9zdG10LCByZXMpOworCisgIC8qIEluc2Vy dCB0aGUgY2FsbCBiZWZvcmUgdG9wX3N0bXQuICAqLworICBnaW1wbGVfc3Rt dF9pdGVyYXRvciB0b3Bfc3RtdF9nc2kgPSBnc2lfZm9yX3N0bXQgKHRvcF9z dG10KTsKKyAgZ3NpX2luc2VydF9iZWZvcmUgKCZ0b3Bfc3RtdF9nc2ksIGNh bGxfc3RtdCwgR1NJX1NBTUVfU1RNVCk7CisKKyAgd2lkZW5fbXVsX3N0YXRz LmRpdm1vZF9jYWxsc19pbnNlcnRlZCsrOwkJCisKKyAgLyogVXBkYXRlIGFs bCBzdGF0ZW1lbnRzIGluIHN0bXRzLgorICAgICBpZiBzdG10IGlzIGxocyA9 IG9wMSBUUlVOQ19ESVZfRVhQUiBvcDIsIGNoYW5nZSB0byBsaHMgPSBSRUFM UEFSVF9FWFBSPGRpdm1vZF90bXA+CisgICAgIGlmIHN0bXQgaXMgbGhzID0g b3AxIFRSVU5DX01PRF9FWFBSIG9wMiwgY2hhbmdlIHRvIGxocyA9IElNQUdQ QVJUX0VYUFI8ZGl2bW9kX3RtcD4uICAqLworCisgIGJvb2wgY2ZnX2NoYW5n ZWQgPSBmYWxzZTsKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgc3RtdHMuaXRl cmF0ZSAoaSwgJnVzZV9zdG10KTsgKytpKQorICAgIHsKKyAgICAgIHRyZWUg bmV3X3JoczsKKworICAgICAgc3dpdGNoIChnaW1wbGVfYXNzaWduX3Joc19j b2RlICh1c2Vfc3RtdCkpCisJeworCSAgY2FzZSBUUlVOQ19ESVZfRVhQUjoK KwkgICAgbmV3X3JocyA9IGZvbGRfYnVpbGQxIChSRUFMUEFSVF9FWFBSLCBU UkVFX1RZUEUgKG9wMSksIHJlcyk7CisJICAgIGJyZWFrOworCisJICBjYXNl IFRSVU5DX01PRF9FWFBSOgorCSAgICBuZXdfcmhzID0gZm9sZF9idWlsZDEg KElNQUdQQVJUX0VYUFIsIFRSRUVfVFlQRSAob3AyKSwgcmVzKTsKKwkgICAg YnJlYWs7CisKKwkgIGRlZmF1bHQ6CisJICAgIGdjY191bnJlYWNoYWJsZSAo KTsKKwl9CisKKyAgICAgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdz aV9mb3Jfc3RtdCAodXNlX3N0bXQpOworICAgICAgZ2ltcGxlX2Fzc2lnbl9z ZXRfcmhzX2Zyb21fdHJlZSAoJmdzaSwgbmV3X3Jocyk7CisgICAgICB1cGRh dGVfc3RtdCAodXNlX3N0bXQpOworCisgICAgICBpZiAobWF5YmVfY2xlYW5f b3JfcmVwbGFjZV9laF9zdG10ICh1c2Vfc3RtdCwgdXNlX3N0bXQpKQorCWNm Z19jaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIGNmZ19jaGFu Z2VkOworfSAgICAKIAogLyogRmluZCBpbnRlZ2VyIG11bHRpcGxpY2F0aW9u cyB3aGVyZSB0aGUgb3BlcmFuZHMgYXJlIGV4dGVuZGVkIGZyb20KICAgIHNt YWxsZXIgdHlwZXMsIGFuZCByZXBsYWNlIHRoZSBNVUxUX0VYUFIgd2l0aCBh IFdJREVOX01VTFRfRVhQUgpAQCAtMzgyOCw2ICs0MDU2LDggQEAgcGFzc19v cHRpbWl6ZV93aWRlbmluZ19tdWw6OmV4ZWN1dGUgKGZ1bmN0aW9uICpmdW4p CiAgIGJvb2wgY2ZnX2NoYW5nZWQgPSBmYWxzZTsKIAogICBtZW1zZXQgKCZ3 aWRlbl9tdWxfc3RhdHMsIDAsIHNpemVvZiAod2lkZW5fbXVsX3N0YXRzKSk7 CisgIGNhbGN1bGF0ZV9kb21pbmFuY2VfaW5mbyAoQ0RJX0RPTUlOQVRPUlMp OworICByZW51bWJlcl9naW1wbGVfc3RtdF91aWRzICgpOwogCiAgIEZPUl9F QUNIX0JCX0ZOIChiYiwgZnVuKQogICAgIHsKQEAgLTM4NjEsNiArNDA5MSwx MCBAQCBwYXNzX29wdGltaXplX3dpZGVuaW5nX211bDo6ZXhlY3V0ZSAoZnVu Y3Rpb24gKmZ1bikKIAkJICAgIG1hdGNoX3VhZGRzdWJfb3ZlcmZsb3cgKCZn c2ksIHN0bXQsIGNvZGUpOwogCQkgIGJyZWFrOwogCisJCWNhc2UgVFJVTkNf TU9EX0VYUFI6CisJCSAgY2ZnX2NoYW5nZWQgPSBjb252ZXJ0X3RvX2Rpdm1v ZCAoYXNfYTxnYXNzaWduICo+IChzdG10KSk7CisJCSAgYnJlYWs7CisKIAkJ ZGVmYXVsdDo7CiAJCX0KIAkgICAgfQpAQCAtMzkwNyw2ICs0MTQxLDggQEAg cGFzc19vcHRpbWl6ZV93aWRlbmluZ19tdWw6OmV4ZWN1dGUgKGZ1bmN0aW9u ICpmdW4pCiAJCQkgICAgd2lkZW5fbXVsX3N0YXRzLm1hY2NzX2luc2VydGVk KTsKICAgc3RhdGlzdGljc19jb3VudGVyX2V2ZW50IChmdW4sICJmdXNlZCBt dWx0aXBseS1hZGRzIGluc2VydGVkIiwKIAkJCSAgICB3aWRlbl9tdWxfc3Rh dHMuZm1hc19pbnNlcnRlZCk7CisgIHN0YXRpc3RpY3NfY291bnRlcl9ldmVu dCAoZnVuLCAiZGl2bW9kIGNhbGxzIGluc2VydGVkIiwKKwkJCSAgICB3aWRl bl9tdWxfc3RhdHMuZGl2bW9kX2NhbGxzX2luc2VydGVkKTsKIAogICByZXR1 cm4gY2ZnX2NoYW5nZWQgPyBUT0RPX2NsZWFudXBfY2ZnIDogMDsKIH0K --001a11449f661e329f0534231359--