From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16781 invoked by alias); 5 Mar 2013 16:17:43 -0000 Received: (qmail 16763 invoked by uid 22791); 5 Mar 2013 16:17:36 -0000 X-SWARE-Spam-Status: No, hits=-5.2 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_CP X-Spam-Check-By: sourceware.org Received: from mail-ve0-f179.google.com (HELO mail-ve0-f179.google.com) (209.85.128.179) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 05 Mar 2013 16:16:42 +0000 Received: by mail-ve0-f179.google.com with SMTP id da11so5808628veb.38 for ; Tue, 05 Mar 2013 08:16:41 -0800 (PST) X-Received: by 10.52.89.83 with SMTP id bm19mr8481381vdb.123.1362500201861; Tue, 05 Mar 2013 08:16:41 -0800 (PST) MIME-Version: 1.0 Received: by 10.58.237.1 with HTTP; Tue, 5 Mar 2013 08:16:01 -0800 (PST) In-Reply-To: References: From: Steven Bosscher Date: Tue, 05 Mar 2013 16:17:00 -0000 Message-ID: Subject: Re: [patch][RFC] bitmaps as lists *or* trees To: Michael Matz Cc: Richard Biener , GCC Patches , Jeff Law Content-Type: multipart/mixed; boundary=20cf307f32648aa09b04d72fcc0e X-IsSubscribed: yes 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 X-SW-Source: 2013-03/txt/msg00193.txt.bz2 --20cf307f32648aa09b04d72fcc0e Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2308 On Tue, Mar 5, 2013 at 3:48 PM, Michael Matz wrote: > Iteration isn't easy on trees without a pointer to the parent (i.e. > enlarging each node), you need to remember variably sized context in the > iterator (e.g. the current stack of nodes). I was thinking of just making the "tree" a single forward-linked list, that's a valid splay tree and one that is compatible with the iterators, at least as long as the iterated bitmap are not modified (but I think that isn't allowed anyway?). Obviously the tree is not very well balanced after that, but splay trees have a way of re-balancing themselves quickly. The other possibility is to create vecs of bitmap_elements up front, but such iterators (fat iterators, as Richi just now called them in another mail :-) have the downside that you must always visit all bitmap elements, even if you want to be able to break the iteration before reaching the end. > I do like the idea of reusing the same internal data structure to > implement the tree. And I'm wondering about performance impact, I > wouldn't be surprised either way (i.e. that it brings about a large > improvement, or none at all), most bitmap membership tests in GCC are > surprisingly clustered so that the bitmaps cache of last accessed > element can work its magic (not all of them, as the testcase shows of > course :) ). I've retained the cached last accessed element. In fact it's now cached twice, because the root of the splay tree is always the last accessed element. I've considered *not* updating bitmap->current if bitmap_tree_find_element doesn't find the element it's looking for. That way, the last accessed element would be the element that was *really* last accessed, i.e. with a valid membership test, instead of the element closest to the last tested bit. Not sure if that'd be a good idea. Anyway, updated patch attached. It compiles all my cc1-i files, and it compiles the PR55135 test case, in 410s (I terminated cc1plus unpatched after >7200s, more than 2 hours...). An interesting question is, how can you identify bitmaps that could benefit from viewing it as a tree (at least for some time). I have no ideas here. Something with detailed memory stats, of course, but then how to derive some measure for a trade-off between list or tree view. Thoughts? Ciao! Steven --20cf307f32648aa09b04d72fcc0e Content-Type: text/plain; charset=US-ASCII; name="tbitmap.diff.txt" Content-Disposition: attachment; filename="tbitmap.diff.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdx9eu370 Content-length: 70826 SW5kZXg6IGJpdG1hcC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJp dG1hcC5jCShyZXZpc2lvbiAxOTY0MTApCisrKyBiaXRtYXAuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBzdHJ1Y3QgYml0bWFwX2Rlc2Ny aXB0b3JfZAogdHlwZWRlZiBzdHJ1Y3QgYml0bWFwX2Rlc2NyaXB0b3JfZCAq Yml0bWFwX2Rlc2NyaXB0b3I7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBiaXRt YXBfZGVzY3JpcHRvcl9kICpjb25zdF9iaXRtYXBfZGVzY3JpcHRvcjsKIAor c3RhdGljIGJpdG1hcF9lbGVtZW50ICpiaXRtYXBfdHJlZV9saXN0aWZ5X2Zy b20gKGJpdG1hcCwgYml0bWFwX2VsZW1lbnQgKik7CisKIC8qIE5leHQgYXZh aWxhYmxlIHVuaXF1ZSBpZCBudW1iZXIgZm9yIGJpdG1hcCBkZXNjaXB0b3Jz LiAgKi8KIHN0YXRpYyBpbnQgbmV4dF9iaXRtYXBfZGVzY19pZCA9IDA7CiAK QEAgLTk1LDYgKzk3LDExIEBAIGdldF9iaXRtYXBfZGVzY3JpcHRvciAoY29u c3QgY2hhciAqZmlsZSwKICAgaWYgKCpzbG90KQogICAgIHJldHVybiAqc2xv dDsKIAorICAvKiBUaGUgZGVzY3JpcHRvciBJRCBjYW4gYmUgYXQgbW9zdCAz MSBiaXRzIGxvbmcsIGJlY2F1c2UgdGhlIG1vc3QKKyAgICAgc2lnbmlmaWNh bnQgb2YgdGhlIChoYWxmKXdvcmQgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUg bW9kZSBvZgorICAgICB0aGUgYml0bWFwLCBpLmUuIHdoZXRoZXIgaXRzIGN1 cnJlbnQgZm9ybSBpcyBsaXN0IG9yIHRyZWUuICAqLworICBnY2NfYXNzZXJ0 IChuZXh0X2JpdG1hcF9kZXNjX2lkIDwgKDEgPDwgMzApIC0gMSk7IC8vIFRP RE86IG1ha2UgZGVzY3JpcHRvciBJRCB1bnNpZ25lZAorCiAgICpzbG90ID0g WENORVcgKHN0cnVjdCBiaXRtYXBfZGVzY3JpcHRvcl9kKTsKICAgYml0bWFw X2Rlc2NyaXB0b3JzLnNhZmVfcHVzaCAoKnNsb3QpOwogICAoKnNsb3QpLT5p ZCA9IG5leHRfYml0bWFwX2Rlc2NfaWQrKzsKQEAgLTEzMywyMiArMTQwLDE4 IEBAIHN0YXRpYyBpbnQgYml0bWFwX2RlZmF1bHRfb2JzdGFja19kZXB0aDsK IHN0YXRpYyBHVFkoKGRlbGV0YWJsZSkpIGJpdG1hcF9lbGVtZW50ICpiaXRt YXBfZ2djX2ZyZWU7IC8qIEZyZWVsaXN0IG9mCiAJCQkJCQkJICAgIEdDJ2Qg ZWxlbWVudHMuICAqLwogCi1zdGF0aWMgdm9pZCBiaXRtYXBfZWxlbV90b19m cmVlbGlzdCAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAqKTsKLXN0YXRpYyB2 b2lkIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGJpdG1hcCwgYml0bWFwX2VsZW1l bnQgKik7Ci1zdGF0aWMgYml0bWFwX2VsZW1lbnQgKmJpdG1hcF9lbGVtZW50 X2FsbG9jYXRlIChiaXRtYXApOwotc3RhdGljIGludCBiaXRtYXBfZWxlbWVu dF96ZXJvcCAoY29uc3QgYml0bWFwX2VsZW1lbnQgKik7Ci1zdGF0aWMgdm9p ZCBiaXRtYXBfZWxlbWVudF9saW5rIChiaXRtYXAsIGJpdG1hcF9lbGVtZW50 ICopOwotc3RhdGljIGJpdG1hcF9lbGVtZW50ICpiaXRtYXBfZWx0X2luc2Vy dF9hZnRlciAoYml0bWFwLCBiaXRtYXBfZWxlbWVudCAqLCB1bnNpZ25lZCBp bnQpOwotc3RhdGljIHZvaWQgYml0bWFwX2VsdF9jbGVhcl9mcm9tIChiaXRt YXAsIGJpdG1hcF9lbGVtZW50ICopOwotc3RhdGljIGJpdG1hcF9lbGVtZW50 ICpiaXRtYXBfZmluZF9iaXQgKGJpdG1hcCwgdW5zaWduZWQgaW50KTsKIAwK Ky8qIEJpdG1hcCBtZW1vcnkgbWFuYWdlbWVudC4gICovCiAKLS8qIEFkZCBF TEVNIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4gICovCisvKiBBZGQg RUxUIHRvIHRoZSBhcHByb3ByaWF0ZSBmcmVlbGlzdC4gICovCiBzdGF0aWMg aW5saW5lIHZvaWQKIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChiaXRtYXAg aGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkKIHsKICAgYml0bWFwX29ic3Rh Y2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+b2JzdGFjazsKIAorICBpZiAoR0FU SEVSX1NUQVRJU1RJQ1MpCisgICAgcmVnaXN0ZXJfb3ZlcmhlYWQgKGhlYWQs IC0oKGludClzaXplb2YgKGJpdG1hcF9lbGVtZW50KSkpOworCiAgIGVsdC0+ bmV4dCA9IE5VTEw7CiAgIGlmIChiaXRfb2JzdGFjaykKICAgICB7CkBAIC0x NjIsNDEgKzE2NSw2IEBAIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChiaXRt YXAgaGVhZCwgYmkKICAgICB9CiB9CiAKLS8qIEZyZWUgYSBiaXRtYXAgZWxl bWVudC4gIFNpbmNlIHRoZXNlIGFyZSBhbGxvY2F0ZWQgb2ZmIHRoZQotICAg Yml0bWFwX29ic3RhY2ssICJmcmVlIiBhY3R1YWxseSBtZWFucyAicHV0IG9u dG8gdGhlIGZyZWVsaXN0Ii4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAot Yml0bWFwX2VsZW1lbnRfZnJlZSAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVt ZW50ICplbHQpCi17Ci0gIGJpdG1hcF9lbGVtZW50ICpuZXh0ID0gZWx0LT5u ZXh0OwotICBiaXRtYXBfZWxlbWVudCAqcHJldiA9IGVsdC0+cHJldjsKLQot ICBpZiAocHJldikKLSAgICBwcmV2LT5uZXh0ID0gbmV4dDsKLQotICBpZiAo bmV4dCkKLSAgICBuZXh0LT5wcmV2ID0gcHJldjsKLQotICBpZiAoaGVhZC0+ Zmlyc3QgPT0gZWx0KQotICAgIGhlYWQtPmZpcnN0ID0gbmV4dDsKLQotICAv KiBTaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgdHJ5IGlzIHRvIGluc2VydCBi ZWZvcmUgY3VycmVudCwKLSAgICAgbWFrZSBjdXJyZW50IHRoZSBuZXh0IGVu dHJ5IGluIHByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzLiAgKi8KLSAgaWYg KGhlYWQtPmN1cnJlbnQgPT0gZWx0KQotICAgIHsKLSAgICAgIGhlYWQtPmN1 cnJlbnQgPSBuZXh0ICE9IDAgPyBuZXh0IDogcHJldjsKLSAgICAgIGlmICho ZWFkLT5jdXJyZW50KQotCWhlYWQtPmluZHggPSBoZWFkLT5jdXJyZW50LT5p bmR4OwotICAgICAgZWxzZQotCWhlYWQtPmluZHggPSAwOwotICAgIH0KLQot ICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0gICAgcmVnaXN0ZXJfb3Zlcmhl YWQgKGhlYWQsIC0oKGludClzaXplb2YgKGJpdG1hcF9lbGVtZW50KSkpOwot Ci0gIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0IChoZWFkLCBlbHQpOwotfQot DAogLyogQWxsb2NhdGUgYSBiaXRtYXAgZWxlbWVudC4gIFRoZSBiaXRzIGFy ZSBjbGVhcmVkLCBidXQgbm90aGluZyBlbHNlIGlzLiAgKi8KIAogc3RhdGlj IGlubGluZSBiaXRtYXBfZWxlbWVudCAqCkBAIC0yNDksNyArMjE3LDggQEAg Yml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGJpdG1hcCBoZWFkKQogICByZXR1 cm4gZWxlbWVudDsKIH0KIAotLyogUmVtb3ZlIEVMVCBhbmQgYWxsIGZvbGxv d2luZyBlbGVtZW50cyBmcm9tIGJpdG1hcCBIRUFELiAgKi8KKy8qIFJlbW92 ZSBFTFQgYW5kIGFsbCBmb2xsb3dpbmcgZWxlbWVudHMgZnJvbSBiaXRtYXAg SEVBRC4KKyAgIFB1dCB0aGUgcmVsZWFzZWQgZWxlbWVudHMgaW4gdGhlIGZy ZWVsaXN0IGZvciBIRUFELiAgKi8KIAogdm9pZAogYml0bWFwX2VsdF9jbGVh cl9mcm9tIChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmVsdCkKQEAg LTI1Nyw3ICsyMjYsMTEgQEAgYml0bWFwX2VsdF9jbGVhcl9mcm9tIChiaXRt YXAgaGVhZCwgYml0bQogICBiaXRtYXBfZWxlbWVudCAqcHJldjsKICAgYml0 bWFwX29ic3RhY2sgKmJpdF9vYnN0YWNrID0gaGVhZC0+b2JzdGFjazsKIAot ICBpZiAoIWVsdCkgcmV0dXJuOworICBpZiAoIWVsdCkKKyAgICByZXR1cm47 CisKKyAgaWYgKGhlYWQtPnRyZWVfZm9ybSkKKyAgICBlbHQgPSBiaXRtYXBf dHJlZV9saXN0aWZ5X2Zyb20gKGhlYWQsIGVsdCk7CiAKICAgaWYgKEdBVEhF Ul9TVEFUSVNUSUNTKQogICAgIHsKQEAgLTI4NCw3ICsyNTcsNyBAQCBiaXRt YXBfZWx0X2NsZWFyX2Zyb20gKGJpdG1hcCBoZWFkLCBiaXRtCiAgICAgICBo ZWFkLT5pbmR4ID0gMDsKICAgICB9CiAKLSAgLyogUHV0IHRoZSBlbnRpcmUg bGlzdCBvbnRvIHRoZSBmcmVlIGxpc3QgaW4gb25lIG9wZXJhdGlvbi4gKi8K KyAgLyogUHV0IHRoZSBlbnRpcmUgbGlzdCBvbnRvIHRoZSBmcmVlbGlzdCBp biBvbmUgb3BlcmF0aW9uLiAqLwogICBpZiAoYml0X29ic3RhY2spCiAgICAg ewogICAgICAgZWx0LT5wcmV2ID0gYml0X29ic3RhY2stPmVsZW1lbnRzOwpA QCAtMjk2LDE0ICsyNjksNDgyIEBAIGJpdG1hcF9lbHRfY2xlYXJfZnJvbSAo Yml0bWFwIGhlYWQsIGJpdG0KICAgICAgIGJpdG1hcF9nZ2NfZnJlZSA9IGVs dDsKICAgICB9CiB9CisMCisvKiBMaW5rZWQtbGlzdCB2aWV3IG9mIGJpdG1h cHMuCisKKyAgIEluIHRoaXMgcmVwcmVzZW50YXRpb24sIHRoZSBiaXRtYXAg ZWxlbWVudHMgZm9ybSBhIGRvdWJsZS1saW5rZWQgbGlzdAorICAgd2l0aCBl bGVtZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2luZyBpbmRleC4gICovCisKKy8q IExpbmsgdGhlIGJpdG1hcCBlbGVtZW50IGludG8gdGhlIGN1cnJlbnQgYml0 bWFwIGxpbmtlZCBsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCiti aXRtYXBfbGlzdF9saW5rX2VsZW1lbnQgKGJpdG1hcCBoZWFkLCBiaXRtYXBf ZWxlbWVudCAqZWxlbWVudCkKK3sKKyAgdW5zaWduZWQgaW50IGluZHggPSBl bGVtZW50LT5pbmR4OworICBiaXRtYXBfZWxlbWVudCAqcHRyOworCisgIGdj Y19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCisgIC8q IElmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGVsZW1lbnQsIHNldCBp dCBpbi4gICovCisgIGlmIChoZWFkLT5maXJzdCA9PSAwKQorICAgIHsKKyAg ICAgIGVsZW1lbnQtPm5leHQgPSBlbGVtZW50LT5wcmV2ID0gMDsKKyAgICAg IGhlYWQtPmZpcnN0ID0gZWxlbWVudDsKKyAgICB9CisKKyAgLyogSWYgdGhp cyBpbmRleCBpcyBsZXNzIHRoYW4gdGhhdCBvZiB0aGUgY3VycmVudCBlbGVt ZW50LCBpdCBnb2VzIHNvbWVwbGFjZQorICAgICBiZWZvcmUgdGhlIGN1cnJl bnQgZWxlbWVudC4gICovCisgIGVsc2UgaWYgKGluZHggPCBoZWFkLT5pbmR4 KQorICAgIHsKKyAgICAgIGZvciAocHRyID0gaGVhZC0+Y3VycmVudDsKKwkg ICBwdHItPnByZXYgIT0gMCAmJiBwdHItPnByZXYtPmluZHggPiBpbmR4Owor CSAgIHB0ciA9IHB0ci0+cHJldikKKwk7CisKKyAgICAgIGlmIChwdHItPnBy ZXYpCisJcHRyLT5wcmV2LT5uZXh0ID0gZWxlbWVudDsKKyAgICAgIGVsc2UK KwloZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisKKyAgICAgIGVsZW1lbnQtPnBy ZXYgPSBwdHItPnByZXY7CisgICAgICBlbGVtZW50LT5uZXh0ID0gcHRyOwor ICAgICAgcHRyLT5wcmV2ID0gZWxlbWVudDsKKyAgICB9CisKKyAgLyogT3Ro ZXJ3aXNlLCBpdCBtdXN0IGdvIHNvbWVwbGFjZSBhZnRlciB0aGUgY3VycmVu dCBlbGVtZW50LiAgKi8KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAocHRy ID0gaGVhZC0+Y3VycmVudDsKKwkgICBwdHItPm5leHQgIT0gMCAmJiBwdHIt Pm5leHQtPmluZHggPCBpbmR4OworCSAgIHB0ciA9IHB0ci0+bmV4dCkKKwk7 CisKKyAgICAgIGlmIChwdHItPm5leHQpCisJcHRyLT5uZXh0LT5wcmV2ID0g ZWxlbWVudDsKKworICAgICAgZWxlbWVudC0+bmV4dCA9IHB0ci0+bmV4dDsK KyAgICAgIGVsZW1lbnQtPnByZXYgPSBwdHI7CisgICAgICBwdHItPm5leHQg PSBlbGVtZW50OworICAgIH0KKworICAvKiBTZXQgdXAgc28gdGhpcyBpcyB0 aGUgZmlyc3QgZWxlbWVudCBzZWFyY2hlZC4gICovCisgIGhlYWQtPmN1cnJl bnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gaW5keDsKK30KKworLyog VW5saW5rIHRoZSBiaXRtYXAgZWxlbWVudCBmcm9tIHRoZSBjdXJyZW50IGJp dG1hcCBsaW5rZWQgbGlzdCwKKyAgIGFuZCByZXR1cm4gaXQgdG8gdGhlIGZy ZWVsaXN0LiAgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitiaXRtYXBfbGlz dF91bmxpbmtfZWxlbWVudCAoYml0bWFwIGhlYWQsIGJpdG1hcF9lbGVtZW50 ICplbGVtZW50KQoreworICBiaXRtYXBfZWxlbWVudCAqbmV4dCA9IGVsZW1l bnQtPm5leHQ7CisgIGJpdG1hcF9lbGVtZW50ICpwcmV2ID0gZWxlbWVudC0+ cHJldjsKKworICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9m b3JtKTsKKworICBpZiAocHJldikKKyAgICBwcmV2LT5uZXh0ID0gbmV4dDsK KworICBpZiAobmV4dCkKKyAgICBuZXh0LT5wcmV2ID0gcHJldjsKKworICBp ZiAoaGVhZC0+Zmlyc3QgPT0gZWxlbWVudCkKKyAgICBoZWFkLT5maXJzdCA9 IG5leHQ7CisKKyAgLyogU2luY2UgdGhlIGZpcnN0IHRoaW5nIHdlIHRyeSBp cyB0byBpbnNlcnQgYmVmb3JlIGN1cnJlbnQsCisgICAgIG1ha2UgY3VycmVu dCB0aGUgbmV4dCBlbnRyeSBpbiBwcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91 cy4gICovCisgIGlmIChoZWFkLT5jdXJyZW50ID09IGVsZW1lbnQpCisgICAg eworICAgICAgaGVhZC0+Y3VycmVudCA9IG5leHQgIT0gMCA/IG5leHQgOiBw cmV2OworICAgICAgaWYgKGhlYWQtPmN1cnJlbnQpCisJaGVhZC0+aW5keCA9 IGhlYWQtPmN1cnJlbnQtPmluZHg7CisgICAgICBlbHNlCisJaGVhZC0+aW5k eCA9IDA7CisgICAgfQorCisgIGJpdG1hcF9lbGVtX3RvX2ZyZWVsaXN0ICho ZWFkLCBlbGVtZW50KTsKK30KKworLyogSW5zZXJ0IGEgbmV3IHVuaW5pdGlh bGl6ZWQgZWxlbWVudCBpbnRvIGJpdG1hcCBIRUFEIGFmdGVyIGVsZW1lbnQK KyAgIEVMVC4gIElmIEVMVCBpcyBOVUxMLCBpbnNlcnQgdGhlIGVsZW1lbnQg YXQgdGhlIHN0YXJ0LiAgUmV0dXJuIHRoZQorICAgbmV3IGVsZW1lbnQuICAq LworCitzdGF0aWMgYml0bWFwX2VsZW1lbnQgKgorYml0bWFwX2xpc3RfaW5z ZXJ0X2VsZW1lbnRfYWZ0ZXIgKGJpdG1hcCBoZWFkLAorCQkJCSAgYml0bWFw X2VsZW1lbnQgKmVsdCwgdW5zaWduZWQgaW50IGluZHgpCit7CisgIGJpdG1h cF9lbGVtZW50ICpub2RlID0gYml0bWFwX2VsZW1lbnRfYWxsb2NhdGUgKGhl YWQpOworICBub2RlLT5pbmR4ID0gaW5keDsKKworICBnY2NfY2hlY2tpbmdf YXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKworICBpZiAoIWVsdCkKKyAg ICB7CisgICAgICBpZiAoIWhlYWQtPmN1cnJlbnQpCisJeworCSAgaGVhZC0+ Y3VycmVudCA9IG5vZGU7CisJICBoZWFkLT5pbmR4ID0gaW5keDsKKwl9Cisg ICAgICBub2RlLT5uZXh0ID0gaGVhZC0+Zmlyc3Q7CisgICAgICBpZiAobm9k ZS0+bmV4dCkKKwlub2RlLT5uZXh0LT5wcmV2ID0gbm9kZTsKKyAgICAgIGhl YWQtPmZpcnN0ID0gbm9kZTsKKyAgICAgIG5vZGUtPnByZXYgPSBOVUxMOwor ICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGdjY19jaGVja2luZ19hc3Nl cnQgKGhlYWQtPmN1cnJlbnQpOworICAgICAgbm9kZS0+bmV4dCA9IGVsdC0+ bmV4dDsKKyAgICAgIGlmIChub2RlLT5uZXh0KQorCW5vZGUtPm5leHQtPnBy ZXYgPSBub2RlOworICAgICAgZWx0LT5uZXh0ID0gbm9kZTsKKyAgICAgIG5v ZGUtPnByZXYgPSBlbHQ7CisgICAgfQorICByZXR1cm4gbm9kZTsKK30KKwor LyogUmV0dXJuIHRoZSBlbGVtZW50IGZvciBJTkRYLCBvciBOVUxMIGlmIHRo ZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QuICAqLworCitzdGF0aWMgaW5saW5l IGJpdG1hcF9lbGVtZW50ICoKK2JpdG1hcF9saXN0X2ZpbmRfZWxlbWVudCAo Yml0bWFwIGhlYWQsIHVuc2lnbmVkIGludCBpbmR4KQoreworICBiaXRtYXBf ZWxlbWVudCAqZWxlbWVudDsKKyAgaWYgKGhlYWQtPmluZHggPCBpbmR4KQor ICAgIC8qIElORFggaXMgYmV5b25kIGhlYWQtPmluZHguICBTZWFyY2ggZnJv bSBoZWFkLT5jdXJyZW50CisgICAgICAgZm9yd2FyZC4gICovCisgICAgZm9y IChlbGVtZW50ID0gaGVhZC0+Y3VycmVudDsKKwkgZWxlbWVudC0+bmV4dCAh PSAwICYmIGVsZW1lbnQtPmluZHggPCBpbmR4OworCSBlbGVtZW50ID0gZWxl bWVudC0+bmV4dCkKKyAgICAgIHsKKwlpZiAoR0FUSEVSX1NUQVRJU1RJQ1Mp CisJICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0t PnNlYXJjaF9pdGVyKys7CisgICAgICB9CisKKyAgZWxzZSBpZiAoaGVhZC0+ aW5keCAvIDIgPCBpbmR4KQorICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhl YWQtPmluZHggYW5kIGNsb3NlciB0byBoZWFkLT5pbmR4IHRoYW4gdG8KKyAg ICAgICAwLiAgU2VhcmNoIGZyb20gaGVhZC0+Y3VycmVudCBiYWNrd2FyZC4g ICovCisgICAgZm9yIChlbGVtZW50ID0gaGVhZC0+Y3VycmVudDsKKwkgZWxl bWVudC0+cHJldiAhPSAwICYmIGVsZW1lbnQtPmluZHggPiBpbmR4OworCSBl bGVtZW50ID0gZWxlbWVudC0+cHJldikKKyAgICAgIHsKKwlpZiAoR0FUSEVS X1NUQVRJU1RJQ1MpCisJICBiaXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVz Y3JpcHRvcl9pZF0tPnNlYXJjaF9pdGVyKys7CisgICAgICB9CisKKyAgZWxz ZQorICAgIC8qIElORFggaXMgbGVzcyB0aGFuIGhlYWQtPmluZHggYW5kIGNs b3NlciB0byAwIHRoYW4gdG8KKyAgICAgICBoZWFkLT5pbmR4LiAgU2VhcmNo IGZyb20gaGVhZC0+Zmlyc3QgZm9yd2FyZC4gICovCisgICAgZm9yIChlbGVt ZW50ID0gaGVhZC0+Zmlyc3Q7CisJIGVsZW1lbnQtPm5leHQgIT0gMCAmJiBl bGVtZW50LT5pbmR4IDwgaW5keDsKKwkgZWxlbWVudCA9IGVsZW1lbnQtPm5l eHQpCisgICAgICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCisJeworCSAgYml0 bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFyY2hf aXRlcisrOworCX0KKworICAvKiBgZWxlbWVudCcgaXMgdGhlIG5lYXJlc3Qg dG8gdGhlIG9uZSB3ZSB3YW50LiAgSWYgaXQncyBub3QgdGhlIG9uZSB3ZQor ICAgICB3YW50LCB0aGUgb25lIHdlIHdhbnQgZG9lc24ndCBleGlzdC4gICov CisgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsZW1lbnQgIT0gTlVMTCk7Cisg IGhlYWQtPmN1cnJlbnQgPSBlbGVtZW50OworICBoZWFkLT5pbmR4ID0gZWxl bWVudC0+aW5keDsKKyAgaWYgKGVsZW1lbnQtPmluZHggIT0gaW5keCkKKyAg ICBlbGVtZW50ID0gMDsKKyAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKKwwKKy8q IFNwbGF5LXRyZWUgdmlldyBvZiBiaXRtYXBzLgorCisgICBUaGlzIGlzIGFu IGFsbW9zdCBvbmUtdG8tb25lIHRoZSBpbXBsZW1lbnRhdGluIG9mIHRoZSBz aW1wbGUgdG9wLWRvd24KKyAgIHNwbGF5IHRyZWUgaW4gU2xlYXRvciBhbmQg VGFyamFuJ3MgIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBTZWFyY2ggVHJlZXMi LgorICAgSXQgaXMgcHJvYmFibHkgbm90IHRoZSBtb3N0IGVmZmljaWVudCBm b3JtIG9mIHNwbGF5IHRyZWVzLCBidXQgaXQgc2hvdWxkCisgICBiZSBnb29k IGVub3VnaCB0byBleHBlcmltZW50IHdpdGggdGhpcyBpZGVhIG9mIGJpdG1h cHMtYXMtdHJlZXMuCisgICAKKyAgIEZvciBhbGwgZnVuY3Rpb25zIGJlbG93 LCB0aGUgdmFyaWFibGUgb3IgZnVuY3Rpb24gYXJndW1lbnQgInQiIGlzIGEg bm9kZQorICAgaW4gdGhlIHRyZWUsIGFuZCAiZSIgaXMgYSB0ZW1wb3Jhcnkg b3IgbmV3IG5vZGUgaW4gdGhlIHRyZWUuICBUaGUgcmVzdAorICAgaXMgc3Vm ZmljaWVudGx5IHN0cmFpZ2gtZm9yd2FyZCAoYW5kIHZlcnkgd2VsbCBleHBs YWluZWQgaW4gdGhlIHBhcGVyKQorICAgdGhhdCBjb21tZW50IHdvdWxkIG9u bHkgY2x1dHRlciB0aGluZ3MuICAqLworCitzdGF0aWMgaW5saW5lIHZvaWQK K2JpdG1hcF90cmVlX2xpbmtfbGVmdCAoYml0bWFwX2VsZW1lbnQgKiAmdCwg Yml0bWFwX2VsZW1lbnQgKiAmbCkKK3sKKyAgbC0+bmV4dCA9IHQ7CisgIGwg PSB0OworICB0ID0gdC0+bmV4dDsKK30KKworc3RhdGljIGlubGluZSB2b2lk CitiaXRtYXBfdHJlZV9saW5rX3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0 LCBiaXRtYXBfZWxlbWVudCAqICZyKQoreworICByLT5wcmV2ID0gdDsKKyAg ciA9IHQ7CisgIHQgPSB0LT5wcmV2OworfQorCitzdGF0aWMgaW5saW5lIHZv aWQKK2JpdG1hcF90cmVlX3JvdGF0ZV9sZWZ0IChiaXRtYXBfZWxlbWVudCAq ICZ0KQoreworICBiaXRtYXBfZWxlbWVudCAqZSA9IHQtPm5leHQ7CisgIHQt Pm5leHQgPSB0LT5uZXh0LT5wcmV2OworICBlLT5wcmV2ID0gdDsKKyAgdCA9 IGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfcm90 YXRlX3JpZ2h0IChiaXRtYXBfZWxlbWVudCAqICZ0KQoreworICBiaXRtYXBf ZWxlbWVudCAqZSA9IHQtPnByZXY7CisgIHQtPnByZXYgPSB0LT5wcmV2LT5u ZXh0OworICBlLT5uZXh0ID0gdDsKKyAgdCA9IGU7Cit9CisKK3N0YXRpYyBi aXRtYXBfZWxlbWVudCAqCitiaXRtYXBfdHJlZV9zcGxheSAoYml0bWFwIGhl YWQsIGJpdG1hcF9lbGVtZW50ICp0LCB1bnNpZ25lZCBpbnQgaW5keCkKK3sK KyAgYml0bWFwX2VsZW1lbnQgTiwgKmwsICpyOworCisgIGlmICh0ID09IE5V TEwpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgTi5wcmV2ID0gTi5uZXh0ID0g TlVMTDsKKyAgbCA9IHIgPSAmTjsKKworICB3aGlsZSAoaW5keCAhPSB0LT5p bmR4KQorICAgIHsKKyAgICAgIGlmIChHQVRIRVJfU1RBVElTVElDUykKKwli aXRtYXBfZGVzY3JpcHRvcnNbaGVhZC0+ZGVzY3JpcHRvcl9pZF0tPnNlYXJj aF9pdGVyKys7CisKKyAgICAgIGlmIChpbmR4IDwgdC0+aW5keCkKKwl7CisJ ICBpZiAodC0+cHJldiAhPSBOVUxMICYmIGluZHggPCB0LT5wcmV2LT5pbmR4 KQorCSAgICBiaXRtYXBfdHJlZV9yb3RhdGVfcmlnaHQgKHQpOworCSAgaWYg KHQtPnByZXYgPT0gTlVMTCkKKwkgICAgYnJlYWs7CisJICBiaXRtYXBfdHJl ZV9saW5rX3JpZ2h0ICh0LCByKTsKKwl9CisgICAgICBlbHNlIGlmIChpbmR4 ID4gdC0+aW5keCkKKwl7CisJICBpZiAodC0+bmV4dCAhPSBOVUxMICYmIGlu ZHggPiB0LT5uZXh0LT5pbmR4KQorCSAgICBiaXRtYXBfdHJlZV9yb3RhdGVf bGVmdCAodCk7CisJICBpZiAodC0+bmV4dCA9PSBOVUxMKQorCSAgICBicmVh azsKKwkgIGJpdG1hcF90cmVlX2xpbmtfbGVmdCAodCwgbCk7CisJfQorICAg IH0KKworICBsLT5uZXh0ID0gdC0+cHJldjsKKyAgci0+cHJldiA9IHQtPm5l eHQ7CisgIHQtPnByZXYgPSBOLm5leHQ7CisgIHQtPm5leHQgPSBOLnByZXY7 CisgIHJldHVybiB0OworfQorCisvKiBMaW5rIGJpdG1hcCBlbGVtZW50IEUg aW50byB0aGUgY3VycmVudCBiaXRtYXAgc3BsYXkgdHJlZS4gICovCisKK3N0 YXRpYyBpbmxpbmUgdm9pZAorYml0bWFwX3RyZWVfbGlua19lbGVtZW50IChi aXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUpCit7CisgIGlmIChoZWFk LT5maXJzdCA9PSBOVUxMKQorICAgIGUtPnByZXYgPSBlLT5uZXh0ID0gTlVM TDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGJpdG1hcF9lbGVtZW50ICp0ID0g Yml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5pbmR4 KTsKKyAgICAgIGlmIChlLT5pbmR4IDwgdC0+aW5keCkKKwl7CisJICBlLT5w cmV2ID0gdC0+cHJldjsKKwkgIGUtPm5leHQgPSB0OworCSAgdC0+cHJldiA9 IE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoZS0+aW5keCA+IHQtPmluZHgp CisJeworCSAgZS0+bmV4dCA9IHQtPm5leHQ7CisJICBlLT5wcmV2ID0gdDsK KwkgIHQtPm5leHQgPSBOVUxMOworCX0KKyAgICAgIGVsc2UKKwlnY2NfdW5y ZWFjaGFibGUgKCk7CisgICAgfQorICBoZWFkLT5maXJzdCA9IGU7CisgIGhl YWQtPmN1cnJlbnQgPSBlOworICBoZWFkLT5pbmR4ID0gZS0+aW5keDsKK30K KworLyogVW5saW5rIGJpdG1hcCBlbGVtZW50IEUgZnJvbSB0aGUgY3VycmVu dCBiaXRtYXAgc3BsYXkgdHJlZSwKKyAgIGFuZCByZXR1cm4gaXQgdG8gdGhl IGZyZWVsaXN0LiAgKi8KKworc3RhdGljIHZvaWQKK2JpdG1hcF90cmVlX3Vu bGlua19lbGVtZW50IChiaXRtYXAgaGVhZCwgYml0bWFwX2VsZW1lbnQgKmUp Cit7CisgIGJpdG1hcF9lbGVtZW50ICp0ID0gYml0bWFwX3RyZWVfc3BsYXkg KGhlYWQsIGhlYWQtPmZpcnN0LCBlLT5pbmR4KTsKKworICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5wcmV2ID09IE5VTEwp CisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7CisgICAgICB0ID0g Yml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYsIGUtPmluZHgpOwor ICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQorICBoZWFkLT5maXJz dCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBoZWFkLT5pbmR4ID0g KHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKKworICBiaXRtYXBfZWxlbV90 b19mcmVlbGlzdCAoaGVhZCwgZSk7Cit9CisKKy8qIFJldHVybiB0aGUgZWxl bWVudCBmb3IgSU5EWCwgb3IgTlVMTCBpZiB0aGUgZWxlbWVudCBkb2Vzbid0 IGV4aXN0LiAgKi8KKworc3RhdGljIGlubGluZSBiaXRtYXBfZWxlbWVudCAq CitiaXRtYXBfdHJlZV9maW5kX2VsZW1lbnQgKGJpdG1hcCBoZWFkLCB1bnNp Z25lZCBpbnQgaW5keCkKK3sKKyAgYml0bWFwX2VsZW1lbnQgKmVsZW1lbnQg PSBiaXRtYXBfdHJlZV9zcGxheSAoaGVhZCwgaGVhZC0+Zmlyc3QsIGluZHgp OworICBnY2NfY2hlY2tpbmdfYXNzZXJ0IChlbGVtZW50ICE9IE5VTEwpOwor ICBoZWFkLT5maXJzdCA9IGVsZW1lbnQ7CisgIGhlYWQtPmN1cnJlbnQgPSBl bGVtZW50OworICBoZWFkLT5pbmR4ID0gZWxlbWVudC0+aW5keDsKKyAgaWYg KGVsZW1lbnQtPmluZHggIT0gaW5keCkKKyAgICBlbGVtZW50ID0gMDsKKyAg cmV0dXJuIGVsZW1lbnQ7Cit9CisMCisvKiBDb252ZXJ0aW5nIGJpdG1hcCB2 aWV3cyBmcm9tIGxpbmtlZC1saXN0IHRvIHRyZWUgYW5kIHZpY2UgdmVyc2Eu ICAqLworCisvKiBTcGxpY2UgZWxlbWVudCBFIGFuZCBhbGwgZWxlbWVudHMg d2l0aCBhIGxhcmdlciBpbmRleCBmcm9tCisgICBiaXRtYXAgSEVBRCwgY29u dmVydCB0aGUgc3BsaWNlZCBlbGVtZW50cyB0byB0aGUgbGlua2VkLWxpc3QK KyAgIHZpZXcsIGFuZCByZXR1cm4gdGhlIGhlYWQgb2YgdGhlIGxpc3QgKHdo aWNoIHNob3VsZCBiZSBFIGFnYWluKSwgICovCisKK3N0YXRpYyBiaXRtYXBf ZWxlbWVudCAqCitiaXRtYXBfdHJlZV9saXN0aWZ5X2Zyb20gKGJpdG1hcCBo ZWFkLCBiaXRtYXBfZWxlbWVudCAqZSkKK3sKKyAgYml0bWFwX2VsZW1lbnQg KnQsICplcmI7CisKKyAgLyogRGV0YWNoIHRoZSByaWdodCBicmFuY2ggZnJv bSBFIChhbGwgZWxlbWVudHMgd2l0aCBpbmR4ID4gRS0+aW5keCksCisgICAg IGFuZCBzcGxheSBFIHRvIHRoZSByb290LiAgKi8KKyAgZXJiID0gZS0+bmV4 dDsKKyAgZS0+bmV4dCA9IE5VTEw7CisgIHQgPSBiaXRtYXBfdHJlZV9zcGxh eSAoaGVhZCwgaGVhZC0+Zmlyc3QsIGUtPmluZHgpOworICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICh0ID09IGUpOworCisgIGlmIChlLT5wcmV2ID09IE5VTEwp CisgICAgdCA9IGUtPm5leHQ7CisgIGVsc2UKKyAgICB7CisgICAgICB0ID0g Yml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGUtPnByZXYsIGUtPmluZHgpOwor ICAgICAgdC0+bmV4dCA9IGUtPm5leHQ7CisgICAgfQorICBoZWFkLT5maXJz dCA9IHQ7CisgIGhlYWQtPmN1cnJlbnQgPSB0OworICBoZWFkLT5pbmR4ID0g KHQgIT0gTlVMTCkgPyB0LT5pbmR4IDogMDsKKworICBnY2NfYXNzZXJ0IChl LT5wcmV2ID09IE5VTEwpOworICBlLT5uZXh0ID0gZXJiOworCisgIC8qIFRo ZSB0cmVlIGlzIG5vdyB2YWxpZCBhZ2Fpbi4gIE5vdyB3ZSBuZWVkIHRvICJ1 bi10cmVlIiBFLgorICAgICBJdCBpcyBpbXBlcmF0aXZlIHRoYXQgYSBub24t cmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIGlzIHVzZWQKKyAgICAgZm9yIHRo aXMsIGJlY2F1c2Ugc3BsYXkgdHJlZXMgaGF2ZSBhIHdvcnN0IGNhc2UgZGVw dGggb2YgTyhFKS4KKyAgICAgQSByZWN1cnNpdmUgaW1wbGVtZW50YXRpb24g d291bGQgcmVzdWx0IGluIGEgc3RhY2sgb3ZlcmZsb3cKKyAgICAgZm9yIGEg c3VmZmljaWVudGx5IGxhcmdlLCB1bmJhbGFuY2VkIGJpdG1hcCB0cmVlLiAg Ki8KKyAgdmVjPGJpdG1hcF9lbGVtZW50ICo+IHN0YWNrID0gdk5VTEw7Cisg IHZlYzxiaXRtYXBfZWxlbWVudCAqPiBzb3J0ZWRfZWxlbWVudHMgPSB2TlVM TDsKKyAgYml0bWFwX2VsZW1lbnQgKm4gPSBlOworCisgIHdoaWxlICh0cnVl KQorICAgIHsKKyAgICAgIHdoaWxlIChuICE9IE5VTEwpCisJeworCSAgc3Rh Y2suc2FmZV9wdXNoIChuKTsKKwkgIG4gPSBuLT5wcmV2OworCX0KKworICAg ICAgaWYgKHN0YWNrLmlzX2VtcHR5ICgpKQorCWJyZWFrOworCisgICAgICBu ID0gc3RhY2sucG9wICgpOworICAgICAgc29ydGVkX2VsZW1lbnRzLnNhZmVf cHVzaCAobik7CisgICAgICBuID0gbi0+bmV4dDsKKyAgICB9CisgIHN0YWNr LnJlbGVhc2UgKCk7CisKKyAgZ2NjX2Fzc2VydCAoc29ydGVkX2VsZW1lbnRz WzBdID09IGUpOworCisgIGJpdG1hcF9lbGVtZW50ICpwcmV2ID0gTlVMTDsK KyAgdW5zaWduZWQgaXg7CisgIEZPUl9FQUNIX1ZFQ19FTFQgKHNvcnRlZF9l bGVtZW50cywgaXgsIG4pCisgICAgeworICAgICAgaWYgKHByZXYgIT0gTlVM TCkKKyAgICAgICAgcHJldi0+bmV4dCA9IG47CisgICAgICBuLT5wcmV2ID0g cHJldjsKKyAgICAgIG4tPm5leHQgPSBOVUxMOworICAgIH0KKyAgc29ydGVk X2VsZW1lbnRzLnJlbGVhc2UgKCk7CisKKyAgcmV0dXJuIGU7Cit9CiAKLS8q IENsZWFyIGEgYml0bWFwIGJ5IGZyZWVpbmcgdGhlIGxpbmtlZCBsaXN0LiAg Ki8KKy8qIENvbnZlcnQgYml0bWFwIEhFQUQgZnJvbSBzcGxheS10cmVlIHZp ZXcgdG8gbGlua2VkLWxpc3Qgdmlldy4gICovCisKK3ZvaWQKK2JpdG1hcF9s aXN0X3ZpZXcgKGJpdG1hcCBoZWFkKQoreworICBiaXRtYXBfZWxlbWVudCAq cHRyOworCisgIGhlYWQtPnRyZWVfZm9ybSA9IDA7CisgIGlmICghIGhlYWQt PmZpcnN0KQorICAgIHJldHVybjsKKworICBwdHIgPSBoZWFkLT5maXJzdDsK KyAgd2hpbGUgKHB0ci0+cHJldikKKyAgICBwdHIgPSBwdHItPnByZXY7Cisg IGhlYWQtPmZpcnN0ID0gYml0bWFwX3RyZWVfbGlzdGlmeV9mcm9tIChoZWFk LCBwdHIpOworCisgIGhlYWQtPmN1cnJlbnQgPSBoZWFkLT5maXJzdDsKKyAg aGVhZC0+aW5keCA9IGhlYWQtPmZpcnN0LT5pbmR4OworfQorCisvKiBDb252 ZXJ0IGJpdG1hcCBIRUFEIGZyb20gbGlua2VkLWxpc3QgdmlldyB0byBzcGxh eS10cmVlIHZpZXcuCisgICBUaGlzIGlzIHNpbXBseSBhIG1hdHRlciBvZiBk cm9wcGluZyB0aGUgcHJldiBvciBuZXh0IHBvaW50ZXJzCisgICBhbmQgc2V0 dGluZyB0aGUgdHJlZV9mb3JtIGZsYWcuICBUaGUgdHJlZSB3aWxsIGJhbGFu Y2UgaXRzZWxmCisgICBpZiBhbmQgd2hlbiBpdCBpcyB1c2VkLiAgKi8KKwor dm9pZAorYml0bWFwX3RyZWVfdmlldyAoYml0bWFwIGhlYWQpCit7CisgIGJp dG1hcF9lbGVtZW50ICpwdHI7CisKKyAgaGVhZC0+dHJlZV9mb3JtID0gMTsK KyAgaWYgKCEgaGVhZC0+Zmlyc3QpCisgICAgcmV0dXJuOworCisgIHB0ciA9 IGhlYWQtPmZpcnN0OworICB3aGlsZSAocHRyKQorICAgIHsKKyAgICAgIHB0 ci0+cHJldiA9IE5VTEw7CisgICAgICBwdHIgPSBwdHItPm5leHQ7CisgICAg fQorICBoZWFkLT5jdXJyZW50ID0gaGVhZC0+Zmlyc3Q7CisgIGhlYWQtPmlu ZHggPSBoZWFkLT5maXJzdC0+aW5keDsKK30KKwwKKy8qIENsZWFyIGEgYml0 bWFwIGJ5IGZyZWVpbmcgYWxsIGl0cyBlbGVtZW50cy4gICovCiAKIHZvaWQK IGJpdG1hcF9jbGVhciAoYml0bWFwIGhlYWQpCiB7Ci0gIGlmIChoZWFkLT5m aXJzdCkKLSAgICBiaXRtYXBfZWx0X2NsZWFyX2Zyb20gKGhlYWQsIGhlYWQt PmZpcnN0KTsKKyAgaWYgKGhlYWQtPmZpcnN0ID09IE5VTEwpCisgICAgcmV0 dXJuOworICBpZiAoaGVhZC0+dHJlZV9mb3JtKQorICAgIHsKKyAgICAgIGJp dG1hcF9lbGVtZW50ICplLCAqdDsKKyAgICAgIGZvciAoZSA9IGhlYWQtPmZp cnN0OyBlLT5wcmV2OyBlID0gZS0+cHJldikKKwkvKiBMb29wIHRvIGZpbmQg dGhlIGVsZW1lbnQgd2l0aCB0aGUgc21hbGxlc3QgaW5kZXguICAqLyA7Cisg ICAgICB0ID0gYml0bWFwX3RyZWVfc3BsYXkgKGhlYWQsIGhlYWQtPmZpcnN0 LCBlLT5pbmR4KTsKKyAgICAgIGdjY19jaGVja2luZ19hc3NlcnQgKHQgPT0g ZSk7CisgICAgICBoZWFkLT5maXJzdCA9IHQ7CisgICAgfQorICBiaXRtYXBf ZWx0X2NsZWFyX2Zyb20gKGhlYWQsIGhlYWQtPmZpcnN0KTsKIH0KIAwKIC8q IEluaXRpYWxpemUgYSBiaXRtYXAgb2JzdGFjay4gIElmIEJJVF9PQlNUQUNL IGlzIE5VTEwsIGluaXRpYWxpemUKQEAgLTQyNyw5NiArODY4LDYgQEAgYml0 bWFwX2VsZW1lbnRfemVyb3AgKGNvbnN0IGJpdG1hcF9lbGVtZQogI2VuZGlm CiB9CiAMCi0vKiBMaW5rIHRoZSBiaXRtYXAgZWxlbWVudCBpbnRvIHRoZSBj dXJyZW50IGJpdG1hcCBsaW5rZWQgbGlzdC4gICovCi0KLXN0YXRpYyBpbmxp bmUgdm9pZAotYml0bWFwX2VsZW1lbnRfbGluayAoYml0bWFwIGhlYWQsIGJp dG1hcF9lbGVtZW50ICplbGVtZW50KQotewotICB1bnNpZ25lZCBpbnQgaW5k eCA9IGVsZW1lbnQtPmluZHg7Ci0gIGJpdG1hcF9lbGVtZW50ICpwdHI7Ci0K LSAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgZWxlbWVudCwg c2V0IGl0IGluLiAgKi8KLSAgaWYgKGhlYWQtPmZpcnN0ID09IDApCi0gICAg ewotICAgICAgZWxlbWVudC0+bmV4dCA9IGVsZW1lbnQtPnByZXYgPSAwOwot ICAgICAgaGVhZC0+Zmlyc3QgPSBlbGVtZW50OwotICAgIH0KLQotICAvKiBJ ZiB0aGlzIGluZGV4IGlzIGxlc3MgdGhhbiB0aGF0IG9mIHRoZSBjdXJyZW50 IGVsZW1lbnQsIGl0IGdvZXMgc29tZXBsYWNlCi0gICAgIGJlZm9yZSB0aGUg Y3VycmVudCBlbGVtZW50LiAgKi8KLSAgZWxzZSBpZiAoaW5keCA8IGhlYWQt PmluZHgpCi0gICAgewotICAgICAgZm9yIChwdHIgPSBoZWFkLT5jdXJyZW50 OwotCSAgIHB0ci0+cHJldiAhPSAwICYmIHB0ci0+cHJldi0+aW5keCA+IGlu ZHg7Ci0JICAgcHRyID0gcHRyLT5wcmV2KQotCTsKLQotICAgICAgaWYgKHB0 ci0+cHJldikKLQlwdHItPnByZXYtPm5leHQgPSBlbGVtZW50OwotICAgICAg ZWxzZQotCWhlYWQtPmZpcnN0ID0gZWxlbWVudDsKLQotICAgICAgZWxlbWVu dC0+cHJldiA9IHB0ci0+cHJldjsKLSAgICAgIGVsZW1lbnQtPm5leHQgPSBw dHI7Ci0gICAgICBwdHItPnByZXYgPSBlbGVtZW50OwotICAgIH0KLQotICAv KiBPdGhlcndpc2UsIGl0IG11c3QgZ28gc29tZXBsYWNlIGFmdGVyIHRoZSBj dXJyZW50IGVsZW1lbnQuICAqLwotICBlbHNlCi0gICAgewotICAgICAgZm9y IChwdHIgPSBoZWFkLT5jdXJyZW50OwotCSAgIHB0ci0+bmV4dCAhPSAwICYm IHB0ci0+bmV4dC0+aW5keCA8IGluZHg7Ci0JICAgcHRyID0gcHRyLT5uZXh0 KQotCTsKLQotICAgICAgaWYgKHB0ci0+bmV4dCkKLQlwdHItPm5leHQtPnBy ZXYgPSBlbGVtZW50OwotCi0gICAgICBlbGVtZW50LT5uZXh0ID0gcHRyLT5u ZXh0OwotICAgICAgZWxlbWVudC0+cHJldiA9IHB0cjsKLSAgICAgIHB0ci0+ bmV4dCA9IGVsZW1lbnQ7Ci0gICAgfQotCi0gIC8qIFNldCB1cCBzbyB0aGlz IGlzIHRoZSBmaXJzdCBlbGVtZW50IHNlYXJjaGVkLiAgKi8KLSAgaGVhZC0+ Y3VycmVudCA9IGVsZW1lbnQ7Ci0gIGhlYWQtPmluZHggPSBpbmR4OwotfQot Ci0vKiBJbnNlcnQgYSBuZXcgdW5pbml0aWFsaXplZCBlbGVtZW50IGludG8g Yml0bWFwIEhFQUQgYWZ0ZXIgZWxlbWVudAotICAgRUxULiAgSWYgRUxUIGlz IE5VTEwsIGluc2VydCB0aGUgZWxlbWVudCBhdCB0aGUgc3RhcnQuICBSZXR1 cm4gdGhlCi0gICBuZXcgZWxlbWVudC4gICovCi0KLXN0YXRpYyBiaXRtYXBf ZWxlbWVudCAqCi1iaXRtYXBfZWx0X2luc2VydF9hZnRlciAoYml0bWFwIGhl YWQsIGJpdG1hcF9lbGVtZW50ICplbHQsIHVuc2lnbmVkIGludCBpbmR4KQot ewotICBiaXRtYXBfZWxlbWVudCAqbm9kZSA9IGJpdG1hcF9lbGVtZW50X2Fs bG9jYXRlIChoZWFkKTsKLSAgbm9kZS0+aW5keCA9IGluZHg7Ci0KLSAgaWYg KCFlbHQpCi0gICAgewotICAgICAgaWYgKCFoZWFkLT5jdXJyZW50KQotCXsK LQkgIGhlYWQtPmN1cnJlbnQgPSBub2RlOwotCSAgaGVhZC0+aW5keCA9IGlu ZHg7Ci0JfQotICAgICAgbm9kZS0+bmV4dCA9IGhlYWQtPmZpcnN0OwotICAg ICAgaWYgKG5vZGUtPm5leHQpCi0Jbm9kZS0+bmV4dC0+cHJldiA9IG5vZGU7 Ci0gICAgICBoZWFkLT5maXJzdCA9IG5vZGU7Ci0gICAgICBub2RlLT5wcmV2 ID0gTlVMTDsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBnY2NfY2hl Y2tpbmdfYXNzZXJ0IChoZWFkLT5jdXJyZW50KTsKLSAgICAgIG5vZGUtPm5l eHQgPSBlbHQtPm5leHQ7Ci0gICAgICBpZiAobm9kZS0+bmV4dCkKLQlub2Rl LT5uZXh0LT5wcmV2ID0gbm9kZTsKLSAgICAgIGVsdC0+bmV4dCA9IG5vZGU7 Ci0gICAgICBub2RlLT5wcmV2ID0gZWx0OwotICAgIH0KLSAgcmV0dXJuIG5v ZGU7Ci19Ci0MCiAvKiBDb3B5IGEgYml0bWFwIHRvIGFub3RoZXIgYml0bWFw LiAgKi8KIAogdm9pZApAQCAtNTI1LDYgKzg3Niw4IEBAIGJpdG1hcF9jb3B5 IChiaXRtYXAgdG8sIGNvbnN0X2JpdG1hcCBmcm8KICAgY29uc3QgYml0bWFw X2VsZW1lbnQgKmZyb21fcHRyOwogICBiaXRtYXBfZWxlbWVudCAqdG9fcHRy ID0gMDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghdG8tPnRyZWVfZm9y bSAmJiAhZnJvbS0+dHJlZV9mb3JtKTsKKwogICBiaXRtYXBfY2xlYXIgKHRv KTsKIAogICAvKiBDb3B5IGVsZW1lbnRzIGluIGZvcndhcmQgZGlyZWN0aW9u IG9uZSBhdCBhIHRpbWUuICAqLwpAQCAtNTM1LDggKzg4OCw5IEBAIGJpdG1h cF9jb3B5IChiaXRtYXAgdG8sIGNvbnN0X2JpdG1hcCBmcm8KICAgICAgIHRv X2VsdC0+aW5keCA9IGZyb21fcHRyLT5pbmR4OwogICAgICAgbWVtY3B5ICh0 b19lbHQtPmJpdHMsIGZyb21fcHRyLT5iaXRzLCBzaXplb2YgKHRvX2VsdC0+ Yml0cykpOwogCi0gICAgICAvKiBIZXJlIHdlIGhhdmUgYSBzcGVjaWFsIGNh c2Ugb2YgYml0bWFwX2VsZW1lbnRfbGluaywgZm9yIHRoZSBjYXNlCi0JIHdo ZXJlIHdlIGtub3cgdGhlIGxpbmtzIGFyZSBiZWluZyBlbnRlcmVkIGluIHNl cXVlbmNlLiAgKi8KKyAgICAgIC8qIEhlcmUgd2UgaGF2ZSBhIHNwZWNpYWwg Y2FzZSBvZiBiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQsCisgICAgICAgICBm b3IgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgbGlua3MgYXJlIGJlaW5n IGVudGVyZWQKKwkgaW4gc2VxdWVuY2UuICAqLwogICAgICAgaWYgKHRvX3B0 ciA9PSAwKQogCXsKIAkgIHRvLT5maXJzdCA9IHRvLT5jdXJyZW50ID0gdG9f ZWx0OwpAQCAtNTcyLDQ1ICs5MjYsMTAgQEAgYml0bWFwX2ZpbmRfYml0IChi aXRtYXAgaGVhZCwgdW5zaWduZWQgaQogICBpZiAoR0FUSEVSX1NUQVRJU1RJ Q1MpCiAgICAgYml0bWFwX2Rlc2NyaXB0b3JzW2hlYWQtPmRlc2NyaXB0b3Jf aWRdLT5uc2VhcmNoZXMrKzsKIAotICBpZiAoaGVhZC0+aW5keCA8IGluZHgp Ci0gICAgLyogSU5EWCBpcyBiZXlvbmQgaGVhZC0+aW5keC4gIFNlYXJjaCBm cm9tIGhlYWQtPmN1cnJlbnQKLSAgICAgICBmb3J3YXJkLiAgKi8KLSAgICBm b3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBlbGVtZW50LT5uZXh0 ICE9IDAgJiYgZWxlbWVudC0+aW5keCA8IGluZHg7Ci0JIGVsZW1lbnQgPSBl bGVtZW50LT5uZXh0KQotICAgICAgewotCWlmIChHQVRIRVJfU1RBVElTVElD UykKLQkgIGJpdG1hcF9kZXNjcmlwdG9yc1toZWFkLT5kZXNjcmlwdG9yX2lk XS0+c2VhcmNoX2l0ZXIrKzsKLSAgICAgIH0KLQotICBlbHNlIGlmIChoZWFk LT5pbmR4IC8gMiA8IGluZHgpCi0gICAgLyogSU5EWCBpcyBsZXNzIHRoYW4g aGVhZC0+aW5keCBhbmQgY2xvc2VyIHRvIGhlYWQtPmluZHggdGhhbiB0bwot ICAgICAgIDAuICBTZWFyY2ggZnJvbSBoZWFkLT5jdXJyZW50IGJhY2t3YXJk LiAgKi8KLSAgICBmb3IgKGVsZW1lbnQgPSBoZWFkLT5jdXJyZW50OwotCSBl bGVtZW50LT5wcmV2ICE9IDAgJiYgZWxlbWVudC0+aW5keCA+IGluZHg7Ci0J IGVsZW1lbnQgPSBlbGVtZW50LT5wcmV2KQotICAgICAgewotCWlmIChHQVRI RVJfU1RBVElTVElDUykKLQkgIGJpdG1hcF9kZXNjcmlwdG9yc1toZWFkLT5k ZXNjcmlwdG9yX2lkXS0+c2VhcmNoX2l0ZXIrKzsKLSAgICAgIH0KLQorICBp ZiAoIWhlYWQtPnRyZWVfZm9ybSkKKyAgICBlbGVtZW50ID0gYml0bWFwX2xp c3RfZmluZF9lbGVtZW50IChoZWFkLCBpbmR4KTsKICAgZWxzZQotICAgIC8q IElORFggaXMgbGVzcyB0aGFuIGhlYWQtPmluZHggYW5kIGNsb3NlciB0byAw IHRoYW4gdG8KLSAgICAgICBoZWFkLT5pbmR4LiAgU2VhcmNoIGZyb20gaGVh ZC0+Zmlyc3QgZm9yd2FyZC4gICovCi0gICAgZm9yIChlbGVtZW50ID0gaGVh ZC0+Zmlyc3Q7Ci0JIGVsZW1lbnQtPm5leHQgIT0gMCAmJiBlbGVtZW50LT5p bmR4IDwgaW5keDsKLQkgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQpCi0gICAg ICBpZiAoR0FUSEVSX1NUQVRJU1RJQ1MpCi0JewotCSAgYml0bWFwX2Rlc2Ny aXB0b3JzW2hlYWQtPmRlc2NyaXB0b3JfaWRdLT5zZWFyY2hfaXRlcisrOwot CX0KLQotICAvKiBgZWxlbWVudCcgaXMgdGhlIG5lYXJlc3QgdG8gdGhlIG9u ZSB3ZSB3YW50LiAgSWYgaXQncyBub3QgdGhlIG9uZSB3ZQotICAgICB3YW50 LCB0aGUgb25lIHdlIHdhbnQgZG9lc24ndCBleGlzdC4gICovCi0gIGhlYWQt PmN1cnJlbnQgPSBlbGVtZW50OwotICBoZWFkLT5pbmR4ID0gZWxlbWVudC0+ aW5keDsKLSAgaWYgKGVsZW1lbnQgIT0gMCAmJiBlbGVtZW50LT5pbmR4ICE9 IGluZHgpCi0gICAgZWxlbWVudCA9IDA7CisgICAgZWxlbWVudCA9IGJpdG1h cF90cmVlX2ZpbmRfZWxlbWVudCAoaGVhZCwgaW5keCk7CiAKICAgcmV0dXJu IGVsZW1lbnQ7CiB9CkBAIC02MzQsNyArOTUzLDEyIEBAIGJpdG1hcF9jbGVh cl9iaXQgKGJpdG1hcCBoZWFkLCBpbnQgYml0KQogCSAgLyogSWYgd2UgY2xl YXJlZCB0aGUgZW50aXJlIHdvcmQsIGZyZWUgdXAgdGhlIGVsZW1lbnQuICAq LwogCSAgaWYgKCFwdHItPmJpdHNbd29yZF9udW1dCiAJICAgICAgJiYgYml0 bWFwX2VsZW1lbnRfemVyb3AgKHB0cikpCi0JICAgIGJpdG1hcF9lbGVtZW50 X2ZyZWUgKGhlYWQsIHB0cik7CisJICAgIHsKKwkgICAgICBpZiAoIWhlYWQt PnRyZWVfZm9ybSkKKwkJYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGhl YWQsIHB0cik7CisJICAgICAgZWxzZQorCQliaXRtYXBfdHJlZV91bmxpbmtf ZWxlbWVudCAoaGVhZCwgcHRyKTsKKwkgICAgfQogCX0KIAogICAgICAgcmV0 dXJuIHJlczsKQEAgLTY1MywyMSArOTc3LDIyIEBAIGJpdG1hcF9zZXRfYml0 IChiaXRtYXAgaGVhZCwgaW50IGJpdCkKICAgdW5zaWduZWQgYml0X251bSAg PSBiaXQgJSBCSVRNQVBfV09SRF9CSVRTOwogICBCSVRNQVBfV09SRCBiaXRf dmFsID0gKChCSVRNQVBfV09SRCkgMSkgPDwgYml0X251bTsKIAotICBpZiAo cHRyID09IDApCi0gICAgewotICAgICAgcHRyID0gYml0bWFwX2VsZW1lbnRf YWxsb2NhdGUgKGhlYWQpOwotICAgICAgcHRyLT5pbmR4ID0gYml0IC8gQklU TUFQX0VMRU1FTlRfQUxMX0JJVFM7Ci0gICAgICBwdHItPmJpdHNbd29yZF9u dW1dID0gYml0X3ZhbDsKLSAgICAgIGJpdG1hcF9lbGVtZW50X2xpbmsgKGhl YWQsIHB0cik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIGVsc2UK KyAgaWYgKHB0ciAhPSAwKQogICAgIHsKICAgICAgIGJvb2wgcmVzID0gKHB0 ci0+Yml0c1t3b3JkX251bV0gJiBiaXRfdmFsKSA9PSAwOwogICAgICAgaWYg KHJlcykKIAlwdHItPmJpdHNbd29yZF9udW1dIHw9IGJpdF92YWw7CiAgICAg ICByZXR1cm4gcmVzOwogICAgIH0KKworICBwdHIgPSBiaXRtYXBfZWxlbWVu dF9hbGxvY2F0ZSAoaGVhZCk7CisgIHB0ci0+aW5keCA9IGJpdCAvIEJJVE1B UF9FTEVNRU5UX0FMTF9CSVRTOworICBwdHItPmJpdHNbd29yZF9udW1dID0g Yml0X3ZhbDsKKyAgaWYgKCFoZWFkLT50cmVlX2Zvcm0pCisgICAgYml0bWFw X2xpc3RfbGlua19lbGVtZW50IChoZWFkLCBwdHIpOworICBlbHNlCisgICAg Yml0bWFwX3RyZWVfbGlua19lbGVtZW50IChoZWFkLCBwdHIpOworICByZXR1 cm4gdHJ1ZTsKIH0KIAogLyogUmV0dXJuIHdoZXRoZXIgYSBiaXQgaXMgc2V0 IHdpdGhpbiBhIGJpdG1hcC4gICovCkBAIC03MjQsMTMgKzEwNDksMTQgQEAg Yml0bWFwX2NvdW50X2JpdHMgKGNvbnN0X2JpdG1hcCBhKQogICBjb25zdCBi aXRtYXBfZWxlbWVudCAqZWx0OwogICB1bnNpZ25lZCBpeDsKIAorICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtKTsKICAgZm9yIChlbHQg PSBhLT5maXJzdDsgZWx0OyBlbHQgPSBlbHQtPm5leHQpCiAgICAgewogICAg ICAgZm9yIChpeCA9IDA7IGl4ICE9IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBp eCsrKQogCXsKICNpZiBHQ0NfVkVSU0lPTiA+PSAzNDAwCi0gCSAgLyogTm90 ZSB0aGF0IHBvcGNvdW50bCBtYXRjaGVzIEJJVE1BUF9XT1JEIGluIHR5cGUs IHNvIHRoZSBhY3R1YWwgc2l6ZQotCSBvZiBCSVRNQVBfV09SRCBpcyBub3Qg bWF0ZXJpYWwuICAqLworIAkgIC8qIE5vdGUgdGhhdCBwb3Bjb3VudGwgbWF0 Y2hlcyBCSVRNQVBfV09SRCBpbiB0eXBlLAorCSAgICAgc28gdGhlIGFjdHVh bCBzaXplIG9mIEJJVE1BUF9XT1JEIGlzIG5vdCBtYXRlcmlhbC4gICovCiAJ ICBjb3VudCArPSBfX2J1aWx0aW5fcG9wY291bnRsIChlbHQtPmJpdHNbaXhd KTsKICNlbHNlCiAJICBjb3VudCArPSBiaXRtYXBfcG9wY291bnQgKGVsdC0+ Yml0c1tpeF0pOwpAQCAtNzU0LDkgKzEwODAsMTEgQEAgYml0bWFwX3Npbmds ZV9iaXRfc2V0X3AgKGNvbnN0X2JpdG1hcCBhKQogICAgIHJldHVybiBmYWxz ZTsKIAogICBlbHQgPSBhLT5maXJzdDsKKwogICAvKiBBcyB0aGVyZSBhcmUg bm8gY29tcGxldGVseSBlbXB0eSBiaXRtYXAgZWxlbWVudHMsIGEgc2Vjb25k IG9uZQogICAgICBtZWFucyB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYml0IHNl dC4gICovCi0gIGlmIChlbHQtPm5leHQgIT0gTlVMTCkKKyAgaWYgKGVsdC0+ bmV4dCAhPSBOVUxMCisgICAgICAmJiAoIWEtPnRyZWVfZm9ybSB8fCBlbHQt PnByZXYgIT0gTlVMTCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGZvciAo aXggPSAwOyBpeCAhPSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsgaXgrKykKQEAg LTc4OCw2ICsxMTE2LDExIEBAIGJpdG1hcF9maXJzdF9zZXRfYml0IChjb25z dF9iaXRtYXAgYSkKICAgdW5zaWduZWQgaXg7CiAKICAgZ2NjX2NoZWNraW5n X2Fzc2VydCAoZWx0KTsKKworICBpZiAoYS0+dHJlZV9mb3JtKQorICAgIHdo aWxlIChlbHQtPnByZXYpCisgICAgICBlbHQgPSBlbHQtPnByZXY7CisKICAg Yml0X25vID0gZWx0LT5pbmR4ICogQklUTUFQX0VMRU1FTlRfQUxMX0JJVFM7 CiAgIGZvciAoaXggPSAwOyBpeCAhPSBCSVRNQVBfRUxFTUVOVF9XT1JEUzsg aXgrKykKICAgICB7CkBAIC04MzksOCArMTE3MiwxMSBAQCBiaXRtYXBfbGFz dF9zZXRfYml0IChjb25zdF9iaXRtYXAgYSkKICAgaW50IGl4OwogCiAgIGdj Y19jaGVja2luZ19hc3NlcnQgKGVsdCk7CisKKyAgLyogVGhpcyB3b3JrcyBm b3IgbGlua2VkLWxpc3QgYW5kIGJpbmFyeSB0cmVlIHJlcHJlc2VudGF0aW9u IGFsaWtlLiAgKi8KICAgd2hpbGUgKGVsdC0+bmV4dCkKICAgICBlbHQgPSBl bHQtPm5leHQ7CisKICAgYml0X25vID0gZWx0LT5pbmR4ICogQklUTUFQX0VM RU1FTlRfQUxMX0JJVFM7CiAgIGZvciAoaXggPSBCSVRNQVBfRUxFTUVOVF9X T1JEUyAtIDE7IGl4ID49IDA7IGl4LS0pCiAgICAgewpAQCAtODgyLDYgKzEy MTgsNyBAQCBiaXRtYXBfYW5kIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtYXAg YSwKICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0ID0gYi0+Zmlyc3Q7 CiAgIGJpdG1hcF9lbGVtZW50ICpkc3RfcHJldiA9IE5VTEw7CiAKKyAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3JtICYmICFhLT50cmVl X2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CiAgIGdjY19hc3NlcnQgKGRzdCAh PSBhICYmIGRzdCAhPSBiKTsKIAogICBpZiAoYSA9PSBiKQpAQCAtOTAzLDcg KzEyNDAsOCBAQCBiaXRtYXBfYW5kIChiaXRtYXAgZHN0LCBjb25zdF9iaXRt YXAgYSwKIAkgIEJJVE1BUF9XT1JEIGlvciA9IDA7CiAKIAkgIGlmICghZHN0 X2VsdCkKLQkgICAgZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVy IChkc3QsIGRzdF9wcmV2LCBhX2VsdC0+aW5keCk7CisJICAgIGRzdF9lbHQg PSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3Rf cHJldiwKKwkJCQkJCQlhX2VsdC0+aW5keCk7CiAJICBlbHNlCiAJICAgIGRz dF9lbHQtPmluZHggPSBhX2VsdC0+aW5keDsKIAkgIGZvciAoaXggPSAwOyBp eCA8IEJJVE1BUF9FTEVNRU5UX1dPUkRTOyBpeCsrKQpAQCAtOTQwLDYgKzEy NzgsOCBAQCBiaXRtYXBfYW5kX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iaXRt YXAKICAgYml0bWFwX2VsZW1lbnQgKm5leHQ7CiAgIGJvb2wgY2hhbmdlZCA9 IGZhbHNlOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zv cm0gJiYgIWItPnRyZWVfZm9ybSk7CisKICAgaWYgKGEgPT0gYikKICAgICBy ZXR1cm4gZmFsc2U7CiAKQEAgLTk0OCw3ICsxMjg4LDcgQEAgYml0bWFwX2Fu ZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAgICAgICBpZiAoYV9l bHQtPmluZHggPCBiX2VsdC0+aW5keCkKIAl7CiAJICBuZXh0ID0gYV9lbHQt Pm5leHQ7Ci0JICBiaXRtYXBfZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJ ICBiaXRtYXBfbGlzdF91bmxpbmtfZWxlbWVudCAoYSwgYV9lbHQpOwogCSAg YV9lbHQgPSBuZXh0OwogCSAgY2hhbmdlZCA9IHRydWU7CiAJfQpAQCAtOTcw LDcgKzEzMTAsNyBAQCBiaXRtYXBfYW5kX2ludG8gKGJpdG1hcCBhLCBjb25z dF9iaXRtYXAKIAkgICAgfQogCSAgbmV4dCA9IGFfZWx0LT5uZXh0OwogCSAg aWYgKCFpb3IpCi0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUgKGEsIGFfZWx0 KTsKKwkgICAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1lbnQgKGEsIGFfZWx0 KTsKIAkgIGFfZWx0ID0gbmV4dDsKIAkgIGJfZWx0ID0gYl9lbHQtPm5leHQ7 CiAJfQpAQCAtMTAxMiw3ICsxMzUyLDggQEAgYml0bWFwX2VsdF9jb3B5IChi aXRtYXAgZHN0LCBiaXRtYXBfZWxlbQogICAgIHsKICAgICAgIGNoYW5nZWQg PSB0cnVlOwogICAgICAgaWYgKCFkc3RfZWx0KQotCWRzdF9lbHQgPSBiaXRt YXBfZWx0X2luc2VydF9hZnRlciAoZHN0LCBkc3RfcHJldiwgc3JjX2VsdC0+ aW5keCk7CisJZHN0X2VsdCA9IGJpdG1hcF9saXN0X2luc2VydF9lbGVtZW50 X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJCQkJICAgIHNyY19lbHQtPmlu ZHgpOwogICAgICAgZWxzZQogCWRzdF9lbHQtPmluZHggPSBzcmNfZWx0LT5p bmR4OwogICAgICAgbWVtY3B5IChkc3RfZWx0LT5iaXRzLCBzcmNfZWx0LT5i aXRzLCBzaXplb2YgKGRzdF9lbHQtPmJpdHMpKTsKQEAgLTEwMzQsNiArMTM3 NSw3IEBAIGJpdG1hcF9hbmRfY29tcGwgKGJpdG1hcCBkc3QsIGNvbnN0X2Jp dG0KICAgYml0bWFwX2VsZW1lbnQgKipkc3RfcHJldl9wbmV4dCA9ICZkc3Qt PmZpcnN0OwogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKIAorICBnY2NfY2hl Y2tpbmdfYXNzZXJ0ICghZHN0LT50cmVlX2Zvcm0gJiYgIWEtPnRyZWVfZm9y bSAmJiAhYi0+dHJlZV9mb3JtKTsKICAgZ2NjX2Fzc2VydCAoZHN0ICE9IGEg JiYgZHN0ICE9IGIpOwogCiAgIGlmIChhID09IGIpCkBAIC0xMDgyLDcgKzE0 MjQsOCBAQCBiaXRtYXBfYW5kX2NvbXBsIChiaXRtYXAgZHN0LCBjb25zdF9i aXRtCiAJICAgICAgYm9vbCBuZXdfZWxlbWVudDsKIAkgICAgICBpZiAoIWRz dF9lbHQgfHwgZHN0X2VsdC0+aW5keCA+IGFfZWx0LT5pbmR4KQogCQl7Ci0J CSAgZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRz dF9wcmV2LCBhX2VsdC0+aW5keCk7CisJCSAgZHN0X2VsdCA9IGJpdG1hcF9s aXN0X2luc2VydF9lbGVtZW50X2FmdGVyIChkc3QsIGRzdF9wcmV2LAorCQkJ CQkJCSAgICAgIGFfZWx0LT5pbmR4KTsKIAkJICBuZXdfZWxlbWVudCA9IHRy dWU7CiAJCX0KIAkgICAgICBlbHNlCkBAIC0xMTA0LDcgKzE0NDcsNyBAQCBi aXRtYXBfYW5kX2NvbXBsIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtCiAJICAg ICAgZWxzZQogCSAgICAgICAgewogCSAgICAgICAgICBjaGFuZ2VkIHw9ICFu ZXdfZWxlbWVudDsKLQkJICBiaXRtYXBfZWxlbWVudF9mcmVlIChkc3QsIGRz dF9lbHQpOworCQkgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChkc3Qs IGRzdF9lbHQpOwogCQkgIGRzdF9lbHQgPSAqZHN0X3ByZXZfcG5leHQ7CiAJ CX0KIAkgICAgfQpAQCAtMTE0NSw2ICsxNDg4LDggQEAgYml0bWFwX2FuZF9j b21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYgogICBiaXRtYXBfZWxlbWVu dCAqbmV4dDsKICAgQklUTUFQX1dPUkQgY2hhbmdlZCA9IDA7CiAKKyAgZ2Nj X2NoZWNraW5nX2Fzc2VydCAoIWEtPnRyZWVfZm9ybSAmJiAhYi0+dHJlZV9m b3JtKTsKKwogICBpZiAoYSA9PSBiKQogICAgIHsKICAgICAgIGlmIChiaXRt YXBfZW1wdHlfcCAoYSkpCkBAIC0xMTc5LDcgKzE1MjQsNyBAQCBiaXRtYXBf YW5kX2NvbXBsX2ludG8gKGJpdG1hcCBhLCBjb25zdF9iCiAJICAgIH0KIAkg IG5leHQgPSBhX2VsdC0+bmV4dDsKIAkgIGlmICghaW9yKQotCSAgICBiaXRt YXBfZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJICAgIGJpdG1hcF9saXN0 X3VubGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7 CiAJICBiX2VsdCA9IGJfZWx0LT5uZXh0OwogCX0KQEAgLTExOTcsNiArMTU0 Miw4IEBAIGJpdG1hcF9zZXRfcmFuZ2UgKGJpdG1hcCBoZWFkLCB1bnNpZ25l ZAogICBiaXRtYXBfZWxlbWVudCAqZWx0LCAqZWx0X3ByZXY7CiAgIHVuc2ln bmVkIGludCBpOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFoZWFkLT50 cmVlX2Zvcm0pOworCiAgIGlmICghY291bnQpCiAgICAgcmV0dXJuOwogCkBA IC0xMjEzLDcgKzE1NjAsNyBAQCBiaXRtYXBfc2V0X3JhbmdlIChiaXRtYXAg aGVhZCwgdW5zaWduZWQKICAgICB7CiAgICAgICBlbHQgPSBiaXRtYXBfZWxl bWVudF9hbGxvY2F0ZSAoaGVhZCk7CiAgICAgICBlbHQtPmluZHggPSBmaXJz dF9pbmRleDsKLSAgICAgIGJpdG1hcF9lbGVtZW50X2xpbmsgKGhlYWQsIGVs dCk7CisgICAgICBiaXRtYXBfbGlzdF9saW5rX2VsZW1lbnQgKGhlYWQsIGVs dCk7CiAgICAgfQogCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKGVsdC0+aW5k eCA9PSBmaXJzdF9pbmRleCk7CkBAIC0xMjMwLDcgKzE1NzcsNyBAQCBiaXRt YXBfc2V0X3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZWQKICAgICAgIHVu c2lnbmVkIGludCBpeDsKIAogICAgICAgaWYgKCFlbHQgfHwgZWx0LT5pbmR4 ICE9IGkpCi0JZWx0ID0gYml0bWFwX2VsdF9pbnNlcnRfYWZ0ZXIgKGhlYWQs IGVsdF9wcmV2LCBpKTsKKwllbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxl bWVudF9hZnRlciAoaGVhZCwgZWx0X3ByZXYsIGkpOwogCiAgICAgICBpZiAo ZWx0X3N0YXJ0X2JpdCA8PSBzdGFydCkKIAl7CkBAIC0xMjk2LDYgKzE2NDMs OCBAQCBiaXRtYXBfY2xlYXJfcmFuZ2UgKGJpdG1hcCBoZWFkLCB1bnNpZ25l CiAgIHVuc2lnbmVkIGludCBmaXJzdF9pbmRleCwgZW5kX2JpdF9wbHVzMSwg bGFzdF9pbmRleDsKICAgYml0bWFwX2VsZW1lbnQgKmVsdDsKIAorICBnY2Nf Y2hlY2tpbmdfYXNzZXJ0ICghaGVhZC0+dHJlZV9mb3JtKTsKKwogICBpZiAo IWNvdW50KQogICAgIHJldHVybjsKIApAQCAtMTMzMyw3ICsxNjgyLDcgQEAg Yml0bWFwX2NsZWFyX3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZQogCiAg ICAgICBpZiAoZWx0X3N0YXJ0X2JpdCA+PSBzdGFydCAmJiBlbHRfZW5kX2Jp dF9wbHVzMSA8PSBlbmRfYml0X3BsdXMxKQogCS8qIEdldCByaWQgb2YgdGhl IGVudGlyZSBlbHQgYW5kIGdvIHRvIHRoZSBuZXh0IG9uZS4gICovCi0JYml0 bWFwX2VsZW1lbnRfZnJlZSAoaGVhZCwgZWx0KTsKKwliaXRtYXBfbGlzdF91 bmxpbmtfZWxlbWVudCAoaGVhZCwgZWx0KTsKICAgICAgIGVsc2UKIAl7CiAJ ICAvKiBHb2luZyB0byBoYXZlIHRvIGtub2NrIG91dCBzb21lIGJpdHMgaW4g dGhpcyBlbHQuICAqLwpAQCAtMTQwMyw3ICsxNzUyLDcgQEAgYml0bWFwX2Ns ZWFyX3JhbmdlIChiaXRtYXAgaGVhZCwgdW5zaWduZQogCSAgICAgIH0KIAkg IC8qIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGJpdHMgbGVmdC4g ICovCiAJICBpZiAoY2xlYXIpCi0JICAgIGJpdG1hcF9lbGVtZW50X2ZyZWUg KGhlYWQsIGVsdCk7CisJICAgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50 IChoZWFkLCBlbHQpOwogCX0KICAgICAgIGVsdCA9IG5leHRfZWx0OwogICAg IH0KQEAgLTE0MjUsNiArMTc3NCw3IEBAIGJpdG1hcF9jb21wbF9hbmRfaW50 byAoYml0bWFwIGEsIGNvbnN0X2IKICAgYml0bWFwX2VsZW1lbnQgKmFfcHJl diA9IE5VTEw7CiAgIGJpdG1hcF9lbGVtZW50ICpuZXh0OwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9y bSk7CiAgIGdjY19hc3NlcnQgKGEgIT0gYik7CiAKICAgaWYgKGJpdG1hcF9l bXB0eV9wIChhKSkKQEAgLTE0NDUsMTMgKzE3OTUsMTMgQEAgYml0bWFwX2Nv bXBsX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYgogCSAgLyogQSBpcyBi ZWZvcmUgQi4gIFJlbW92ZSBBICovCiAJICBuZXh0ID0gYV9lbHQtPm5leHQ7 CiAJICBhX3ByZXYgPSBhX2VsdC0+cHJldjsKLQkgIGJpdG1hcF9lbGVtZW50 X2ZyZWUgKGEsIGFfZWx0KTsKKwkgIGJpdG1hcF9saXN0X3VubGlua19lbGVt ZW50IChhLCBhX2VsdCk7CiAJICBhX2VsdCA9IG5leHQ7CiAJfQogICAgICAg ZWxzZSBpZiAoIWFfZWx0IHx8IGJfZWx0LT5pbmR4IDwgYV9lbHQtPmluZHgp CiAJewogCSAgLyogQiBpcyBiZWZvcmUgQS4gIENvcHkgQi4gKi8KLQkgIG5l eHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoYSwgYV9wcmV2LCBiX2Vs dC0+aW5keCk7CisJICBuZXh0ID0gYml0bWFwX2xpc3RfaW5zZXJ0X2VsZW1l bnRfYWZ0ZXIgKGEsIGFfcHJldiwgYl9lbHQtPmluZHgpOwogCSAgbWVtY3B5 IChuZXh0LT5iaXRzLCBiX2VsdC0+Yml0cywgc2l6ZW9mIChuZXh0LT5iaXRz KSk7CiAJICBhX3ByZXYgPSBuZXh0OwogCSAgYl9lbHQgPSBiX2VsdC0+bmV4 dDsKQEAgLTE0NzIsNyArMTgyMiw3IEBAIGJpdG1hcF9jb21wbF9hbmRfaW50 byAoYml0bWFwIGEsIGNvbnN0X2IKIAkgICAgfQogCSAgbmV4dCA9IGFfZWx0 LT5uZXh0OwogCSAgaWYgKCFpb3IpCi0JICAgIGJpdG1hcF9lbGVtZW50X2Zy ZWUgKGEsIGFfZWx0KTsKKwkgICAgYml0bWFwX2xpc3RfdW5saW5rX2VsZW1l bnQgKGEsIGFfZWx0KTsKIAkgIGVsc2UKIAkgICAgYV9wcmV2ID0gYV9lbHQ7 CiAJICBhX2VsdCA9IG5leHQ7CkBAIC0xNTE3LDcgKzE4NjcsOCBAQCBiaXRt YXBfZWx0X2lvciAoYml0bWFwIGRzdCwgYml0bWFwX2VsZW1lCiAJewogCSAg Y2hhbmdlZCA9IHRydWU7CiAJICBpZiAoIWRzdF9lbHQpCi0JICAgIGRzdF9l bHQgPSBiaXRtYXBfZWx0X2luc2VydF9hZnRlciAoZHN0LCBkc3RfcHJldiwg YV9lbHQtPmluZHgpOworCSAgICBkc3RfZWx0ID0gYml0bWFwX2xpc3RfaW5z ZXJ0X2VsZW1lbnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsCisJCQkJCQkJYV9l bHQtPmluZHgpOwogCSAgZWxzZQogCSAgICBkc3RfZWx0LT5pbmR4ID0gYV9l bHQtPmluZHg7CiAJICBmb3IgKGl4ID0gMDsgaXggPCBCSVRNQVBfRUxFTUVO VF9XT1JEUzsgaXgrKykKQEAgLTE1NTYsNiArMTkwNyw3IEBAIGJpdG1hcF9p b3IgKGJpdG1hcCBkc3QsIGNvbnN0X2JpdG1hcCBhLAogICBiaXRtYXBfZWxl bWVudCAqKmRzdF9wcmV2X3BuZXh0ID0gJmRzdC0+Zmlyc3Q7CiAgIGJvb2wg Y2hhbmdlZCA9IGZhbHNlOwogCisgIGdjY19jaGVja2luZ19hc3NlcnQgKCFk c3QtPnRyZWVfZm9ybSAmJiAhYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zv cm0pOwogICBnY2NfYXNzZXJ0IChkc3QgIT0gYSAmJiBkc3QgIT0gYik7CiAK ICAgd2hpbGUgKGFfZWx0IHx8IGJfZWx0KQpAQCAtMTYwMiw2ICsxOTU0LDcg QEAgYml0bWFwX2lvcl9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAg IGJpdG1hcF9lbGVtZW50ICoqYV9wcmV2X3BuZXh0ID0gJmEtPmZpcnN0Owog ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKIAorICBnY2NfY2hlY2tpbmdfYXNz ZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOwogICBpZiAo YSA9PSBiKQogICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY0MCw3ICsxOTkz LDkgQEAgYml0bWFwX3hvciAoYml0bWFwIGRzdCwgY29uc3RfYml0bWFwIGEs CiAgIGNvbnN0IGJpdG1hcF9lbGVtZW50ICpiX2VsdCA9IGItPmZpcnN0Owog ICBiaXRtYXBfZWxlbWVudCAqZHN0X3ByZXYgPSBOVUxMOwogCisgIGdjY19j aGVja2luZ19hc3NlcnQgKCFkc3QtPnRyZWVfZm9ybSAmJiAhYS0+dHJlZV9m b3JtICYmICFiLT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0IChkc3QgIT0g YSAmJiBkc3QgIT0gYik7CisKICAgaWYgKGEgPT0gYikKICAgICB7CiAgICAg ICBiaXRtYXBfY2xlYXIgKGRzdCk7CkBAIC0xNjU2LDcgKzIwMTEsOCBAQCBi aXRtYXBfeG9yIChiaXRtYXAgZHN0LCBjb25zdF9iaXRtYXAgYSwKIAkgIEJJ VE1BUF9XT1JEIGlvciA9IDA7CiAKIAkgIGlmICghZHN0X2VsdCkKLQkgICAg ZHN0X2VsdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChkc3QsIGRzdF9w cmV2LCBhX2VsdC0+aW5keCk7CisJICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlz dF9pbnNlcnRfZWxlbWVudF9hZnRlciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJ CQlhX2VsdC0+aW5keCk7CiAJICBlbHNlCiAJICAgIGRzdF9lbHQtPmluZHgg PSBhX2VsdC0+aW5keDsKIAkgIGZvciAoaXggPSAwOyBpeCA8IEJJVE1BUF9F TEVNRU5UX1dPUkRTOyBpeCsrKQpAQCAtMTY5MSw3ICsyMDQ3LDggQEAgYml0 bWFwX3hvciAoYml0bWFwIGRzdCwgY29uc3RfYml0bWFwIGEsCiAJICAgIH0K IAogCSAgaWYgKCFkc3RfZWx0KQotCSAgICBkc3RfZWx0ID0gYml0bWFwX2Vs dF9pbnNlcnRfYWZ0ZXIgKGRzdCwgZHN0X3ByZXYsIHNyYy0+aW5keCk7CisJ ICAgIGRzdF9lbHQgPSBiaXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRl ciAoZHN0LCBkc3RfcHJldiwKKwkJCQkJCQlzcmMtPmluZHgpOwogCSAgZWxz ZQogCSAgICBkc3RfZWx0LT5pbmR4ID0gc3JjLT5pbmR4OwogCSAgbWVtY3B5 IChkc3RfZWx0LT5iaXRzLCBzcmMtPmJpdHMsIHNpemVvZiAoZHN0X2VsdC0+ Yml0cykpOwpAQCAtMTcxNiw2ICsyMDczLDggQEAgYml0bWFwX3hvcl9pbnRv IChiaXRtYXAgYSwgY29uc3RfYml0bWFwCiAgIGNvbnN0IGJpdG1hcF9lbGVt ZW50ICpiX2VsdCA9IGItPmZpcnN0OwogICBiaXRtYXBfZWxlbWVudCAqYV9w cmV2ID0gTlVMTDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJl ZV9mb3JtICYmICFiLT50cmVlX2Zvcm0pOworCiAgIGlmIChhID09IGIpCiAg ICAgewogICAgICAgYml0bWFwX2NsZWFyIChhKTsKQEAgLTE3MjcsNyArMjA4 Niw4IEBAIGJpdG1hcF94b3JfaW50byAoYml0bWFwIGEsIGNvbnN0X2JpdG1h cAogICAgICAgaWYgKCFhX2VsdCB8fCBiX2VsdC0+aW5keCA8IGFfZWx0LT5p bmR4KQogCXsKIAkgIC8qIENvcHkgYl9lbHQuICAqLwotCSAgYml0bWFwX2Vs ZW1lbnQgKmRzdCA9IGJpdG1hcF9lbHRfaW5zZXJ0X2FmdGVyIChhLCBhX3By ZXYsIGJfZWx0LT5pbmR4KTsKKwkgIGJpdG1hcF9lbGVtZW50ICpkc3QgPSBi aXRtYXBfbGlzdF9pbnNlcnRfZWxlbWVudF9hZnRlciAoYSwgYV9wcmV2LAor CQkJCQkJCQkgIGJfZWx0LT5pbmR4KTsKIAkgIG1lbWNweSAoZHN0LT5iaXRz LCBiX2VsdC0+Yml0cywgc2l6ZW9mIChkc3QtPmJpdHMpKTsKIAkgIGFfcHJl diA9IGRzdDsKIAkgIGJfZWx0ID0gYl9lbHQtPm5leHQ7CkBAIC0xNzU1LDcg KzIxMTUsNyBAQCBiaXRtYXBfeG9yX2ludG8gKGJpdG1hcCBhLCBjb25zdF9i aXRtYXAKIAkgIGlmIChpb3IpCiAJICAgIGFfcHJldiA9IGFfZWx0OwogCSAg ZWxzZQotCSAgICBiaXRtYXBfZWxlbWVudF9mcmVlIChhLCBhX2VsdCk7CisJ ICAgIGJpdG1hcF9saXN0X3VubGlua19lbGVtZW50IChhLCBhX2VsdCk7CiAJ ICBhX2VsdCA9IG5leHQ7CiAJfQogICAgIH0KQEAgLTE3NzUsNiArMjEzNSw4 IEBAIGJpdG1hcF9lcXVhbF9wIChjb25zdF9iaXRtYXAgYSwgY29uc3RfYmkK ICAgY29uc3QgYml0bWFwX2VsZW1lbnQgKmJfZWx0OwogICB1bnNpZ25lZCBp eDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYm ICFiLT50cmVlX2Zvcm0pOworCiAgIGZvciAoYV9lbHQgPSBhLT5maXJzdCwg Yl9lbHQgPSBiLT5maXJzdDsKICAgICAgICBhX2VsdCAmJiBiX2VsdDsKICAg ICAgICBhX2VsdCA9IGFfZWx0LT5uZXh0LCBiX2VsdCA9IGJfZWx0LT5uZXh0 KQpAQCAtMTc5Nyw2ICsyMTU5LDggQEAgYml0bWFwX2ludGVyc2VjdF9wIChj b25zdF9iaXRtYXAgYSwgY29ucwogICBjb25zdCBiaXRtYXBfZWxlbWVudCAq Yl9lbHQ7CiAgIHVuc2lnbmVkIGl4OwogCisgIGdjY19jaGVja2luZ19hc3Nl cnQgKCFhLT50cmVlX2Zvcm0gJiYgIWItPnRyZWVfZm9ybSk7CisKICAgZm9y IChhX2VsdCA9IGEtPmZpcnN0LCBiX2VsdCA9IGItPmZpcnN0OwogICAgICAg IGFfZWx0ICYmIGJfZWx0OykKICAgICB7CkBAIC0xODI0LDYgKzIxODgsOSBA QCBiaXRtYXBfaW50ZXJzZWN0X2NvbXBsX3AgKGNvbnN0X2JpdG1hcCBhCiAg IGNvbnN0IGJpdG1hcF9lbGVtZW50ICphX2VsdDsKICAgY29uc3QgYml0bWFw X2VsZW1lbnQgKmJfZWx0OwogICB1bnNpZ25lZCBpeDsKKworICBnY2NfY2hl Y2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0p OworCiAgIGZvciAoYV9lbHQgPSBhLT5maXJzdCwgYl9lbHQgPSBiLT5maXJz dDsKICAgICAgICBhX2VsdCAmJiBiX2VsdDspCiAgICAgewpAQCAtMTg1OCw2 ICsyMjI1LDkgQEAgYml0bWFwX2lvcl9hbmRfY29tcGwgKGJpdG1hcCBkc3Qs IGNvbnN0XwogICBiaXRtYXBfZWxlbWVudCAqZHN0X3ByZXYgPSBOVUxMOwog ICBiaXRtYXBfZWxlbWVudCAqKmRzdF9wcmV2X3BuZXh0ID0gJmRzdC0+Zmly c3Q7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIWRzdC0+dHJlZV9mb3Jt CisJCSAgICAgICAmJiAhYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0K KwkJICAgICAgICYmICFraWxsLT50cmVlX2Zvcm0pOwogICBnY2NfYXNzZXJ0 IChkc3QgIT0gYSAmJiBkc3QgIT0gYiAmJiBkc3QgIT0ga2lsbCk7CiAKICAg LyogU3BlY2lhbCBjYXNlcy4gIFdlIGRvbid0IGJvdGhlciBjaGVja2luZyBm b3IgYml0bWFwX2VxdWFsX3AgKGIsIGtpbGwpLiAgKi8KQEAgLTE5NDgsMTYg KzIzMTgsMTggQEAgYml0bWFwX2lvcl9hbmRfY29tcGwgKGJpdG1hcCBkc3Qs IGNvbnN0XwogICByZXR1cm4gY2hhbmdlZDsKIH0KIAotLyogQSB8PSAoRlJP TTEgJiB+RlJPTTIpLiAgUmV0dXJuIHRydWUgaWYgQSBjaGFuZ2VzLiAgKi8K Ky8qIEEgfD0gKEIgJiB+QykuICBSZXR1cm4gdHJ1ZSBpZiBBIGNoYW5nZXMu ICAqLwogCiBib29sCi1iaXRtYXBfaW9yX2FuZF9jb21wbF9pbnRvIChiaXRt YXAgYSwgY29uc3RfYml0bWFwIGZyb20xLCBjb25zdF9iaXRtYXAgZnJvbTIp CitiaXRtYXBfaW9yX2FuZF9jb21wbF9pbnRvIChiaXRtYXAgYSwgY29uc3Rf Yml0bWFwIGIsIGNvbnN0X2JpdG1hcCBjKQogewogICBiaXRtYXBfaGVhZCB0 bXA7CiAgIGJvb2wgY2hhbmdlZDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0 ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVlX2Zvcm0gJiYgIWMtPnRyZWVf Zm9ybSk7CisKICAgYml0bWFwX2luaXRpYWxpemUgKCZ0bXAsICZiaXRtYXBf ZGVmYXVsdF9vYnN0YWNrKTsKLSAgYml0bWFwX2FuZF9jb21wbCAoJnRtcCwg ZnJvbTEsIGZyb20yKTsKKyAgYml0bWFwX2FuZF9jb21wbCAoJnRtcCwgYiwg Yyk7CiAgIGNoYW5nZWQgPSBiaXRtYXBfaW9yX2ludG8gKGEsICZ0bXApOwog ICBiaXRtYXBfY2xlYXIgKCZ0bXApOwogCkBAIC0xOTc4LDYgKzIzNTAsOCBA QCBiaXRtYXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgYSwgY29uc3RfYml0CiAg IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICB1bnNpZ25lZCBpeDsKIAorICBn Y2NfY2hlY2tpbmdfYXNzZXJ0ICghYS0+dHJlZV9mb3JtICYmICFiLT50cmVl X2Zvcm0gJiYgIWMtPnRyZWVfZm9ybSk7CisKICAgaWYgKGIgPT0gYykKICAg ICByZXR1cm4gYml0bWFwX2lvcl9pbnRvIChhLCBiKTsKICAgaWYgKGJpdG1h cF9lbXB0eV9wIChiKSB8fCBiaXRtYXBfZW1wdHlfcCAoYykpCkBAIC0yMDQ0 LDYgKzI0MTgsNyBAQCBiaXRtYXBfaW9yX2FuZF9pbnRvIChiaXRtYXAgYSwg Y29uc3RfYml0CiB9CiAKIC8qIENvbXB1dGUgaGFzaCBvZiBiaXRtYXAgKGZv ciBwdXJwb3NlcyBvZiBoYXNoaW5nKS4gICovCisKIGhhc2h2YWxfdAogYml0 bWFwX2hhc2ggKGNvbnN0X2JpdG1hcCBoZWFkKQogewpAQCAtMjA1MSw2ICsy NDI2LDggQEAgYml0bWFwX2hhc2ggKGNvbnN0X2JpdG1hcCBoZWFkKQogICBC SVRNQVBfV09SRCBoYXNoID0gMDsKICAgaW50IGl4OwogCisgIGdjY19jaGVj a2luZ19hc3NlcnQgKCFoZWFkLT50cmVlX2Zvcm0pOworCiAgIGZvciAocHRy ID0gaGVhZC0+Zmlyc3Q7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQogICAgIHsK ICAgICAgIGhhc2ggXj0gcHRyLT5pbmR4OwpAQCAtMjA2NCw5ICsyNDQxLDEz IEBAIGJpdG1hcF9oYXNoIChjb25zdF9iaXRtYXAgaGVhZCkKIC8qIERlYnVn Z2luZyBmdW5jdGlvbiB0byBwcmludCBvdXQgdGhlIGNvbnRlbnRzIG9mIGEg Yml0bWFwLiAgKi8KIAogREVCVUdfRlVOQ1RJT04gdm9pZAotZGVidWdfYml0 bWFwX2ZpbGUgKEZJTEUgKmZpbGUsIGNvbnN0X2JpdG1hcCBoZWFkKQorZGVi dWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZpbGUsIGJpdG1hcCBoZWFkKQogewog ICBjb25zdCBiaXRtYXBfZWxlbWVudCAqcHRyOworICBib29sIHRyZWVfZm9y bSA9IGhlYWQtPnRyZWVfZm9ybTsKKworICBpZiAodHJlZV9mb3JtKQorICAg IGJpdG1hcF9saXN0X3ZpZXcgKGhlYWQpOwogCiAgIGZwcmludGYgKGZpbGUs ICJcbmZpcnN0ID0gIiBIT1NUX1BUUl9QUklOVEYKIAkgICAiIGN1cnJlbnQg PSAiIEhPU1RfUFRSX1BSSU5URiAiIGluZHggPSAldVxuIiwKQEAgLTIwOTgs MTMgKzI0NzksMTYgQEAgZGVidWdfYml0bWFwX2ZpbGUgKEZJTEUgKmZpbGUs IGNvbnN0X2JpdAogCiAgICAgICBmcHJpbnRmIChmaWxlLCAiIH1cbiIpOwog ICAgIH0KKworICBpZiAodHJlZV9mb3JtKQorICAgIGJpdG1hcF90cmVlX3Zp ZXcgKGhlYWQpOwogfQogCiAvKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJv bSB0aGUgZGVidWdnZXIgdG8gcHJpbnQgdGhlIGNvbnRlbnRzCiAgICBvZiBh IGJpdG1hcC4gICovCiAKIERFQlVHX0ZVTkNUSU9OIHZvaWQKLWRlYnVnX2Jp dG1hcCAoY29uc3RfYml0bWFwIGhlYWQpCitkZWJ1Z19iaXRtYXAgKGJpdG1h cCBoZWFkKQogewogICBkZWJ1Z19iaXRtYXBfZmlsZSAoc3Rkb3V0LCBoZWFk KTsKIH0KQEAgLTIxMTMsMTEgKzI0OTcsMTUgQEAgZGVidWdfYml0bWFwIChj b25zdF9iaXRtYXAgaGVhZCkKICAgIGl0IGRvZXMgbm90IHByaW50IGFueXRo aW5nIGJ1dCB0aGUgYml0cy4gICovCiAKIERFQlVHX0ZVTkNUSU9OIHZvaWQK LWJpdG1hcF9wcmludCAoRklMRSAqZmlsZSwgY29uc3RfYml0bWFwIGhlYWQs IGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KQorYml0 bWFwX3ByaW50IChGSUxFICpmaWxlLCBiaXRtYXAgaGVhZCwgY29uc3QgY2hh ciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCiB7CiAgIGNvbnN0IGNo YXIgKmNvbW1hID0gIiI7CiAgIHVuc2lnbmVkIGk7CiAgIGJpdG1hcF9pdGVy YXRvciBiaTsKKyAgYm9vbCB0cmVlX2Zvcm0gPSBoZWFkLT50cmVlX2Zvcm07 CisKKyAgaWYgKHRyZWVfZm9ybSkKKyAgICBiaXRtYXBfbGlzdF92aWV3ICho ZWFkKTsKIAogICBmcHV0cyAocHJlZml4LCBmaWxlKTsKICAgRVhFQ1VURV9J Rl9TRVRfSU5fQklUTUFQIChoZWFkLCAwLCBpLCBiaSkKQEAgLTIxMjYsNiAr MjUxNCw5IEBAIGJpdG1hcF9wcmludCAoRklMRSAqZmlsZSwgY29uc3RfYml0 bWFwIGgKICAgICAgIGNvbW1hID0gIiwgIjsKICAgICB9CiAgIGZwdXRzIChz dWZmaXgsIGZpbGUpOworCisgIGlmICh0cmVlX2Zvcm0pCisgICAgYml0bWFw X3RyZWVfdmlldyAoaGVhZCk7CiB9CiAKIApJbmRleDogYml0bWFwLmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gYml0bWFwLmgJKHJldmlzaW9uIDE5 NjQxMCkKKysrIGJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNiAr MjAsMjEgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4KICNpZm5kZWYgR0NDX0JJVE1BUF9ICiAjZGVmaW5lIEdDQ19CSVRNQVBf SAogCi0vKiBJbXBsZW1lbnRhdGlvbiBvZiBzcGFyc2UgaW50ZWdlciBzZXRz IGFzIGEgbGlua2VkIGxpc3QuCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzcGFy c2UgaW50ZWdlciBzZXRzIGFzIGEgbGlua2VkIGxpc3Qgb3IgdHJlZXMuCiAK ICAgIFRoaXMgc3BhcnNlIHNldCByZXByZXNlbnRhdGlvbiBpcyBzdWl0YWJs ZSBmb3Igc3BhcnNlIHNldHMgd2l0aCBhbgotICAgdW5rbm93biAoYSBwcmlv cmkpIHVuaXZlcnNlLiAgVGhlIHNldCBpcyByZXByZXNlbnRlZCBhcyBhIGRv dWJsZS1saW5rZWQKLSAgIGxpc3Qgb2YgY29udGFpbmVyIG5vZGVzIChzdHJ1 Y3QgYml0bWFwX2VsZW1lbnRfZGVmKS4gIEVhY2ggbm9kZSBjb25zaXN0cwot ICAgb2YgYW4gaW5kZXggZm9yIHRoZSBmaXJzdCBtZW1iZXIgdGhhdCBjb3Vs ZCBiZSBoZWxkIGluIHRoZSBjb250YWluZXIsCi0gICBhIHNtYWxsIGFycmF5 IG9mIGludGVnZXJzIHRoYXQgcmVwcmVzZW50IHRoZSBtZW1iZXJzIGluIHRo ZSBjb250YWluZXIsCi0gICBhbmQgcG9pbnRlcnMgdG8gdGhlIG5leHQgYW5k IHByZXZpb3VzIGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0LiAgVGhlCi0g ICBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluIGFzY2VuZGlu ZyBvcmRlciwgaS5lLiB0aGUgaGVhZCBvZgorICAgdW5rbm93biAoYSBwcmlv cmkpIHVuaXZlcnNlLgorICAgCisgICBTZXRzIGFyZSByZXByZXNlbnRlZCBh cyBkb3VibGUtbGlua2VkIGxpc3RzIG9mIGNvbnRhaW5lciBub2RlcyBvZgor ICAgdHlwZSAic3RydWN0IGJpdG1hcF9lbGVtZW50X2RlZiIgb3IgYXMgYSBi aW5hcnkgdHJlZXMgb2YgdGhlIHNhbWUKKyAgIGNvbnRhaW5lciBub2Rlcy4g IEVhY2ggY29udGFpbmVyIG5vZGUgY29uc2lzdHMgb2YgYW4gaW5kZXggZm9y IHRoZQorICAgZmlyc3QgbWVtYmVyIHRoYXQgY291bGQgYmUgaGVsZCBpbiB0 aGUgY29udGFpbmVyLCBhIHNtYWxsIGFycmF5IG9mCisgICBpbnRlZ2VycyB0 aGF0IHJlcHJlc2VudCB0aGUgbWVtYmVycyBpbiB0aGUgY29udGFpbmVyLCBh bmQgcG9pbnRlcnMKKyAgIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cyBlbGVt ZW50IGluIHRoZSBsaW5rZWQgbGlzdCwgb3IgbGVmdCBhbmQKKyAgIHJpZ2h0 IGNoaWxkcmVuIGluIHRoZSB0cmVlLiAgSW4gbGlua2VkLWxpc3QgZm9ybSwg dGhlIGNvbnRhaW5lcgorICAgbm9kZXMgaW4gdGhlIGxpc3QgYXJlIHNvcnRl ZCBpbiBhc2NlbmRpbmcgb3JkZXIsIGkuZS4gdGhlIGhlYWQgb2YKICAgIHRo ZSBsaXN0IGhvbGRzIHRoZSBlbGVtZW50IHdpdGggdGhlIHNtYWxsZXN0IG1l bWJlciBvZiB0aGUgc2V0LgorICAgSW4gdHJlZSBmb3JtLCBub2RlcyB0byB0 aGUgbGVmdCBoYXZlIGEgc21hbGxlciBjb250YWluZXIgaW5kZXguCiAKICAg IEZvciBhIGdpdmVuIG1lbWJlciBJIGluIHRoZSBzZXQ6CiAgICAgIC0gdGhl IGVsZW1lbnQgZm9yIEkgd2lsbCBoYXZlIGluZGV4IGlzIEkgLyAoYml0cyBw ZXIgZWxlbWVudCkKQEAgLTQyLDE3ICs0Nyw2NyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgogICAgaGlnaCBzdG9yYWdlIG92 ZXJoZWFkICpwZXIgZWxlbWVudCosIGJ1dCBhIHNtYWxsIG92ZXJhbGwgb3Zl cmhlYWQgaWYKICAgIHRoZSBzZXQgaXMgdmVyeSBzcGFyc2UuCiAKLSAgIFRo ZSBkb3duc2lkZSBpcyB0aGF0IG1hbnkgb3BlcmF0aW9ucyBhcmUgcmVsYXRp dmVseSBzbG93IGJlY2F1c2UgdGhlCi0gICBsaW5rZWQgbGlzdCBoYXMgdG8g YmUgdHJhdmVyc2VkIHRvIHRlc3QgbWVtYmVyc2hpcCAoaS5lLiBtZW1iZXJf cC8KLSAgIGFkZF9tZW1iZXIvcmVtb3ZlX21lbWJlcikuICBUbyBpbXByb3Zl IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIHNldAotICAgcmVwcmVzZW50YXRp b24sIHRoZSBsYXN0IGFjY2Vzc2VkIGVsZW1lbnQgYW5kIGl0cyBpbmRleCBh cmUgY2FjaGVkLgotICAgRm9yIG1lbWJlcnNoaXAgdGVzdHMgb24gbWVtYmVy cyBjbG9zZSB0byByZWNlbnRseSBhY2Nlc3NlZCBtZW1iZXJzLAotICAgdGhl IGNhY2hlZCBsYXN0IGVsZW1lbnQgaW1wcm92ZXMgbWVtYmVyc2hpcCB0ZXN0 IHRvIGEgY29uc3RhbnQtdGltZQotICAgb3BlcmF0aW9uLgorICAgVGhlIHN0 b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciBsaW5rZWQtbGlzdCBzcGFyc2Ugc2V0 cyBhcmUgTyhFKSwgd2l0aCBFLT5OCisgICBpbiB0aGUgd29yc3QgY2FzZSAo YSBzcGFyc2Ugc2V0IHdpdGggbGFyZ2UgZGlzdGFuY2VzIGJldHdlZW4gdGhl IHZhbHVlcworICAgb2YgdGhlIHNldCBtZW1iZXJzKS4KKworICAgVGhpcyBy ZXByZXNlbnRhdGlvbiBhbHNvIHdvcmtzIHdlbGwgZm9yIGRhdGEgZmxvdyBw cm9ibGVtcyB3aGVyZSB0aGUgc2l6ZQorICAgb2YgdGhlIHNldCBtYXkgZ3Jv dyBkeW5hbWljYWxseSwgYnV0IGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRo ZSBtZW1iZXJfcCwKKyAgIGFkZF9tZW1iZXIsIGFuZCByZW1vdmVfbWVtYmVy IG9wZXJhdGlvbnMgb2NjdXIgd2l0aCBhIHN1aXRhYmxlIGFjY2VzcworICAg cGF0dGVybi4KKworICAgVGhlIGxpbmtlZC1saXN0IHNldCByZXByZXNlbnRh dGlvbiB3b3JrcyB3ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZpbmcgdmVyeQor ICAgc3BhcnNlIHNldHMuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaW4gR0ND IGlzLCBvZiBjb3Vyc2UsIHRoZSAic2V0IG9mCisgICBzZXRzIiBmb3Igc29t ZSBDRkctYmFzZWQgZGF0YSBmbG93IHByb2JsZW1zIChsaXZlbmVzcyBhbmFs eXNpcywgZG9taW5hbmNlCisgICBmcm9udGllcnMsIGV0Yy4pLgorICAgCisg ICBGb3IgcmFuZG9tLWFjY2VzcyBzcGFyc2Ugc2V0cyBvZiB1bmtub3duIHVu aXZlcnNlLCB0aGUgYmluYXJ5IHRyZWUKKyAgIHJlcHJlc2VudGF0aW9uIGlz IGxpa2VseSB0byBiZSBhIG1vcmUgc3VpdGFibGUgY2hvaWNlLiAgVGhlb3Jl dGljYWwKKyAgIGFjY2VzcyB0aW1lcyBmb3IgdGhlIGJpbmFyeSB0cmVlIHJl cHJlc2VudGF0aW9uIGFyZSBiZXR0ZXIgdGhhbiB0aG9zZQorICAgZm9yIHRo ZSBsaW5rZWQtbGlzdCwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgb25seSB0 cnVlIGZvciB0cnVlbHkKKyAgIHJhbmRvbSBhY2Nlc3MuCisKKyAgIE9mdGVu IHRoZSBtb3N0IHN1aXRhYmxlIHJlcHJlc2VudGF0aW9uIGR1cmluZyBjb25z dHJ1Y3Rpb24gb2YgdGhlIHNldAorICAgaXMgbm90IHRoZSBiZXN0IGNob2lj ZSBmb3IgdGhlIHVzYWdlIG9mIHRoZSBzZXQuICBGb3Igc3VjaCBjYXNlcywg dGhlCisgICAidmlldyIgb2YgdGhlIHNldCBjYW4gYmUgY2hhbmdlZCBmcm9t IG9uZSByZXByZXNlbnRhdGlvbiB0byB0aGUgb3RoZXIuCisgICBUaGlzIGlz IGFuIE8oRSkgb3BlcmF0aW9uLgorCisgICBUT0RPOiBEb2N1bWVudCBiaXRt YXAgdmlldyBjaGFuZ2VzISAtLSBTVEVWRU4KKworICAgVHJhdmVyc2luZyBs aW5rZWQgbGlzdHMgb3IgdHJlZXMgY2FuIGJlIGNhY2hlLXVuZnJpZW5kbHku ICBQZXJmb3JtYW5jZQorICAgY2FuIGJlIGltcHJvdmVkIGJ5IGtlZXBpbmcg Y29udGFpbmVyIG5vZGVzIGluIHRoZSBzZXQgZ3JvdXBlZCB0b2dldGhlcgor ICAgaW4gIG1lbW9yeSwgdXNpbmcgYSBkZWRpY2F0ZWQgb2JzdGFjayBmb3Ig YSBzZXQgKG9yIGdyb3VwIG9mIHJlbGF0ZWQKKyAgIHNldHMpLiAgRWxlbWVu dHMgYWxsb2NhdGVkIG9uIG9ic3RhY2tzIGFyZSByZWxlYXNlZCB0byBhIGZy ZWUtbGlzdCBhbmQKKyAgIHRha2VuIG9mZiB0aGUgZnJlZSBsaXN0LiAgSWYg bXVsdGlwbGUgc2V0cyBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzYW1lCisgICBv YnN0YWNrLCBlbGVtZW50cyBmcmVlZCBmcm9tIG9uZSBzZXQgbWF5IGJlIHJl LXVzZWQgZm9yIG9uZSBvZiB0aGUgb3RoZXIKKyAgIHNldHMuICBUaGlzIHVz dWFsbHkgaGVscHMgYXZvaWQgY2FjaGUgbWlzc2VzLgorCisgICBBIHNpbmds ZSBmcmVlLWxpc3QgaXMgdXNlZCBmb3IgYWxsIHNldHMgYWxsb2NhdGVkIGlu IEdHQyBzcGFjZS4gIFRoaXMgaXMKKyAgIGJhZCBmb3IgcGVyc2lzdGVudCBz ZXRzLCBzbyBwZXJzaXN0ZW50IHNldHMgc2hvdWxkIGJlIGFsbG9jYXRlZCBv biBhbgorICAgb2JzdGFjayB3aGVuZXZlciBwb3NzaWJsZS4KKworICAgRm9y IHJhbmRvbS1hY2Nlc3Mgc2V0cyB3aXRoIGEga25vd24sIHJlbGF0aXZlbHkg c21hbGwgdW5pdmVyc2Ugc2l6ZSwgdGhlCisgICBTcGFyc2VTZXQgb3Igc2lt cGxlIGJpdG1hcCByZXByZXNlbnRhdGlvbnMgbWF5IGJlIG1vcmUgZWZmaWNp ZW50IHRoYW4gYQorICAgbGlua2VkLWxpc3Qgc2V0LgorCisKKyAgIExJTktF RCBMSVNUIEZPUk0KKyAgID09PT09PT09PT09PT09PT0KKworICAgSW4gbGlu a2VkLWxpc3QgZm9ybSwgaW4tb3JkZXIgaXRlcmF0aW9ucyBvZiB0aGUgc2V0 IGNhbiBiZSBleGVjdXRlZAorICAgZWZmaWNpZW50bHkuICBUaGUgZG93bnNp ZGUgaXMgdGhhdCBtYW55IHJhbmRvbS1hY2Nlc3Mgb3BlcmF0aW9ucyBhcmUK KyAgIHJlbGF0aXZlbHkgc2xvdywgYmVjYXVzZSB0aGUgbGlua2VkIGxpc3Qg aGFzIHRvIGJlIHRyYXZlcnNlZCB0byB0ZXN0CisgICBtZW1iZXJzaGlwIChp LmUuIG1lbWJlcl9wLyBhZGRfbWVtYmVyL3JlbW92ZV9tZW1iZXIpLgorICAg CisgICBUbyBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGlzIHNldCBy ZXByZXNlbnRhdGlvbiwgdGhlIGxhc3QKKyAgIGFjY2Vzc2VkIGVsZW1lbnQg YW5kIGl0cyBpbmRleCBhcmUgY2FjaGVkLiAgRm9yIG1lbWJlcnNoaXAgdGVz dHMgb24KKyAgIG1lbWJlcnMgY2xvc2UgdG8gcmVjZW50bHkgYWNjZXNzZWQg bWVtYmVycywgdGhlIGNhY2hlZCBsYXN0IGVsZW1lbnQKKyAgIGltcHJvdmVz IG1lbWJlcnNoaXAgdGVzdCB0byBhIGNvbnN0YW50LXRpbWUgb3BlcmF0aW9u LgogCiAgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgY2FuIGFsd2F5cyBi ZSBwZXJmb3JtZWQgaW4gTygxKSB0aW1lOgogCiAgICAgICogY2xlYXIJCQk6 IGJpdG1hcF9jbGVhcgorICAgICAqIHNtYWxsZXN0X21lbWJlcgkJOiBiaXRt YXBfZmlyc3Rfc2V0X2JpdAogICAgICAqIGNob29zZV9vbmUJCTogKG5vdCBp bXBsZW1lbnRlZCwgYnV0IGNvdWxkIGJlCiAJCQkJICAgaW1wbGVtZW50ZWQg aW4gY29uc3RhbnQgdGltZSkKIApAQCAtNjEsMTUgKzExNiwxNiBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgogICAgc3VpdGFi bGUgYWNjZXNzIHBhdHRlcm5zOgogCiAgICAgICogbWVtYmVyX3AJCQk6IGJp dG1hcF9iaXRfcAotICAgICAqIGFkZF9tZW1iZXIJCTogYml0bWFwX3NldF9i aXQKLSAgICAgKiByZW1vdmVfbWVtYmVyCQk6IGJpdG1hcF9jbGVhcl9iaXQK KyAgICAgKiBhZGRfbWVtYmVyCQk6IGJpdG1hcF9zZXRfYml0IC8gYml0bWFw X3NldF9yYW5nZQorICAgICAqIHJlbW92ZV9tZW1iZXIJCTogYml0bWFwX2Ns ZWFyX2JpdCAvIGJpdG1hcF9jbGVhcl9yYW5nZQogCiAgICBUaGUgZm9sbG93 aW5nIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKEUpIHRpbWU6 CiAKICAgICAgKiBjYXJkaW5hbGl0eQkJOiBiaXRtYXBfY291bnRfYml0cwot ICAgICAqIHNldF9zaXplCQkJOiBiaXRtYXBfbGFzdF9zZXRfYml0IChidXQg dGhpcyBjb3VsZAorICAgICAqIGxhcmdlc3RfbWVtYmVyCQk6IGJpdG1hcF9s YXN0X3NldF9iaXQgKGJ1dCB0aGlzIGNvdWxkCiAJCQkJICBpbiBjb25zdGFu dCB0aW1lIHdpdGggYSBwb2ludGVyIHRvCiAJCQkJICB0aGUgbGFzdCBlbGVt ZW50IGluIHRoZSBjaGFpbikKKyAgICAgKiBzZXRfc2l6ZQkJCTogYml0bWFw X2xhc3Rfc2V0X2JpdAogCiAgICBBZGRpdGlvbmFsbHksIHRoZSBsaW5rZWQt bGlzdCBzcGFyc2Ugc2V0IHJlcHJlc2VudGF0aW9uIHN1cHBvcnRzCiAgICBl bnVtZXJhdGlvbiBvZiB0aGUgbWVtYmVycyBpbiBPKEUpIHRpbWU6CkBAIC05 MywzOSArMTQ5LDUzIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuCiAgICAgICogQSB8IChCICYgfkMpCQk6IGJpdG1hcF9pb3Jf YW5kX2NvbXBsIC8KIAkJCQkgIGJpdG1hcF9pb3JfYW5kX2NvbXBsX2ludG8K IAotICAgVGhlIHN0b3JhZ2UgcmVxdWlyZW1lbnRzIGZvciBsaW5rZWQtbGlz dCBzcGFyc2Ugc2V0cyBhcmUgTyhFKSwgd2l0aCBFLT5OCi0gICBpbiB0aGUg d29yc3QgY2FzZSAoYSBzcGFyc2Ugc2V0IHdpdGggbGFyZ2UgZGlzdGFuY2Vz IGJldHdlZW4gdGhlIHZhbHVlcwotICAgb2YgdGhlIHNldCBtZW1iZXJzKS4K IAotICAgVGhlIGxpbmtlZC1saXN0IHNldCByZXByZXNlbnRhdGlvbiB3b3Jr cyB3ZWxsIGZvciBwcm9ibGVtcyBpbnZvbHZpbmcgdmVyeQotICAgc3BhcnNl IHNldHMuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaW4gR0NDIGlzLCBvZiBj b3Vyc2UsIHRoZSAic2V0IG9mCi0gICBzZXRzIiBmb3Igc29tZSBDRkctYmFz ZWQgZGF0YSBmbG93IHByb2JsZW1zIChsaXZlbmVzcyBhbmFseXNpcywgZG9t aW5hbmNlCi0gICBmcm9udGllcnMsIGV0Yy4pLgotICAgCi0gICBUaGlzIHJl cHJlc2VudGF0aW9uIGFsc28gd29ya3Mgd2VsbCBmb3IgZGF0YSBmbG93IHBy b2JsZW1zIHdoZXJlIHRoZSBzaXplCi0gICBvZiB0aGUgc2V0IG1heSBncm93 IGR5bmFtaWNhbGx5LCBidXQgY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQgdGhl IG1lbWJlcl9wLAotICAgYWRkX21lbWJlciwgYW5kIHJlbW92ZV9tZW1iZXIg b3BlcmF0aW9ucyBvY2N1ciB3aXRoIGEgc3VpdGFibGUgYWNjZXNzCi0gICBw YXR0ZXJuLgorICAgQklOQVJZIFRSRUUgRk9STQorICAgPT09PT09PT09PT09 PT09PQorICAgQW4gYWx0ZXJuYXRlICJ2aWV3IiBvZiBhIGJpdG1hcCBpcyBp dHMgYmluYXJ5IHRyZWUgcmVwcmVzZW50YXRpb24uCisgICBGb3IgdGhpcyBy ZXByZXNlbnRhdGlvbiwgc3BsYXkgdHJlZXMgYXJlIHVzZWQgYmVjYXVzZSB0 aGV5IGNhbiBiZQorICAgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHNhbWUgZGF0 YSBzdHJ1Y3R1cmVzIGFzIHRoZSBsaW5rZWQgbGlzdCwgd2l0aAorICAgbm8g b3ZlcmhlYWQgZm9yIG1ldGEtZGF0YSAobGlrZSBjb2xvciwgb3IgcmFuaykg b24gdGhlIHRyZWUgbm9kZXMuCisKKyAgIEluIGJpbmFyeSB0cmVlIGZvcm0s IHJhbmRvbS1hY2Nlc3MgdG8gdGhlIHNldCBpcyBtdWNoIG1vcmUgZWZmaWNp ZW50CisgICB0aGFuIGZvciB0aGUgbGlua2VkLWxpc3QgcmVwcmVzZW50YXRp b24uICBEb3duc2lkZXMgYXJlIHRoZSBoaWdoIGNvc3QKKyAgIG9mIGNsZWFy aW5nIHRoZSBzZXQsIGFuZCB0aGUgcmVsYXRpdmVseSBsYXJnZSBudW1iZXIg b2Ygb3BlcmF0aW9ucworICAgbmVjZXNzYXJ5IHRvIGJhbGFuY2UgdGhlIHRy ZWUuICBBbHNvLCBpdGVyYXRpbmcgdGhlIHNldCBtZW1iZXJzIGlzCisgICBu b3Qgc3VwcG9ydGVkLgogICAgCi0gICBGb3IgcmFuZG9tLWFjY2VzcyBzZXRz IHdpdGggYSBrbm93biwgcmVsYXRpdmVseSBzbWFsbCB1bml2ZXJzZSBzaXpl LCB0aGUKLSAgIFNwYXJzZVNldCBvciBzaW1wbGUgYml0bWFwIHJlcHJlc2Vu dGF0aW9ucyBtYXkgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiBhCi0gICBsaW5r ZWQtbGlzdCBzZXQuICBGb3IgcmFuZG9tLWFjY2VzcyBzZXRzIG9mIHVua25v d24gdW5pdmVyc2UsIGEgaGFzaCB0YWJsZQotICAgb3IgYSBiYWxhbmNlZCBi aW5hcnkgdHJlZSByZXByZXNlbnRhdGlvbiBpcyBsaWtlbHkgdG8gYmUgYSBt b3JlIHN1aXRhYmxlCi0gICBjaG9pY2UuCisgICBBcyBmb3IgdGhlIGxpbmtl ZC1saXN0IHJlcHJlc2VudGF0aW9uLCB0aGUgbGFzdCBhY2Nlc3NlZCBlbGVt ZW50IGFuZAorICAgaXRzIGluZGV4IGFyZSBjYWNoZWQsIHNvIHRoYXQgbWVt YmVyc2hpcCB0ZXN0cyBvbiB0aGUgbGF0ZXN0IGFjY2Vzc2VkCisgICBtZW1i ZXJzIGlzIGEgY29uc3RhbnQtdGltZSBvcGVyYXRpb24uICBPdGhlciBsb29r dXBzIHRha2UgTyhsb2dFKQorICAgdGltZSBhbW9ydGl6ZWQgKGJ1dCBPKEUp IHRpbWUgd29yc3QtY2FzZSkuCiAKLSAgIFRyYXZlcnNpbmcgbGlua2VkIGxp c3RzIGlzIHVzdWFsbHkgY2FjaGUtdW5mcmllbmRseSwgZXZlbiB3aXRoIHRo ZSBsYXN0Ci0gICBhY2Nlc3NlZCBlbGVtZW50IGNhY2hlZC4KLSAgIAotICAg Q2FjaGUgcGVyZm9ybWFuY2UgY2FuIGJlIGltcHJvdmVkIGJ5IGtlZXBpbmcg dGhlIGVsZW1lbnRzIGluIHRoZSBzZXQKLSAgIGdyb3VwZWQgdG9nZXRoZXIg aW4gbWVtb3J5LCB1c2luZyBhIGRlZGljYXRlZCBvYnN0YWNrIGZvciBhIHNl dCAob3IgZ3JvdXAKLSAgIG9mIHJlbGF0ZWQgc2V0cykuICBFbGVtZW50cyBh bGxvY2F0ZWQgb24gb2JzdGFja3MgYXJlIHJlbGVhc2VkIHRvIGEKLSAgIGZy ZWUtbGlzdCBhbmQgdGFrZW4gb2ZmIHRoZSBmcmVlIGxpc3QuICBJZiBtdWx0 aXBsZSBzZXRzIGFyZSBhbGxvY2F0ZWQgb24KLSAgIHRoZSBzYW1lIG9ic3Rh Y2ssIGVsZW1lbnRzIGZyZWVkIGZyb20gb25lIHNldCBtYXkgYmUgcmUtdXNl ZCBmb3Igb25lIG9mCi0gICB0aGUgb3RoZXIgc2V0cy4gIFRoaXMgdXN1YWxs eSBoZWxwcyBhdm9pZCBjYWNoZSBtaXNzZXMuCisgICBUaGUgZm9sbG93aW5n IG9wZXJhdGlvbnMgY2FuIGFsd2F5cyBiZSBwZXJmb3JtZWQgaW4gTygxKSB0 aW1lOgogCi0gICBBIHNpbmdsZSBmcmVlLWxpc3QgaXMgdXNlZCBmb3IgYWxs IHNldHMgYWxsb2NhdGVkIGluIEdHQyBzcGFjZS4gIFRoaXMgaXMKLSAgIGJh ZCBmb3IgcGVyc2lzdGVudCBzZXRzLCBzbyBwZXJzaXN0ZW50IHNldHMgc2hv dWxkIGJlIGFsbG9jYXRlZCBvbiBhbgotICAgb2JzdGFjayB3aGVuZXZlciBw b3NzaWJsZS4gICovCisgICAgICogY2hvb3NlX29uZQkJOiAobm90IGltcGxl bWVudGVkLCBidXQgY291bGQgYmUKKwkJCQkgICBpbXBsZW1lbnRlZCBpbiBj b25zdGFudCB0aW1lKQorCisgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMg Y2FuIGJlIHBlcmZvcm1lZCBpbiBPKGxvZ0UpIHRpbWUgYW1vcnRpemVkCisg ICBidXQgTyhFKSB0aW1lIHdvcnN0LWNhc2UsIGJ1dCBpbiBPKDEpIHRpbWUg aWYgdGhlIHNhbWUgZWxlbWVudCBpcworICAgYWNjZXNzZWQuCisKKyAgICAg KiBtZW1iZXJfcAkJCTogYml0bWFwX2JpdF9wCisgICAgICogYWRkX21lbWJl cgkJOiBiaXRtYXBfc2V0X2JpdAorICAgICAqIHJlbW92ZV9tZW1iZXIJCTog Yml0bWFwX2NsZWFyX2JpdAorCisgICBUaGUgZm9sbG93aW5nIG9wZXJhdGlv bnMgY2FuIGJlIHBlcmZvcm1lZCBpbiBPKGxvZ0UpIHRpbWUgYW1vcnRpemVk CisgICBidXQgTyhFKSB0aW1lIHdvcnN0LWNhc2U6CisKKyAgICAgKiBzbWFs bGVzdF9tZW1iZXIJCTogYml0bWFwX2ZpcnN0X3NldF9iaXQKKyAgICAgKiBs YXJnZXN0X21lbWJlcgkJOiBiaXRtYXBfbGFzdF9zZXRfYml0CisgICAgICog c2V0X3NpemUJCQk6IGJpdG1hcF9sYXN0X3NldF9iaXQKKworICAgVGhlIGZv bGxvd2luZyBvcGVyYXRpb25zIGNhbiBiZSBwZXJmb3JtZWQgaW4gTyhFKSB0 aW1lOgorCisgICAgICogY2xlYXIJCQk6IGJpdG1hcF9jbGVhcgorCisgICBU aGUgYmluYXJ5IHRyZWUgc3BhcnNlIHNldCByZXByZXNlbnRhdGlvbiBkb2Vz ICpub3QqIHN1cHBvcnQgYW55IGZvcm0KKyAgIG9mIGVudW1lcmF0aW9uLCBh bmQgZG9lcyBhbHNvICpub3QqIHN1cHBvcnQgbG9naWNhbCBvcGVyYXRpb25z IG9uIHNldHMuCisgICBUaGUgYmluYXJ5IHRyZWUgcmVwcmVzZW50YXRpb24g aXMgb25seSBzdXBwb3NlZCB0byBiZSB1c2VkIGZvciBzZXRzCisgICBvbiB3 aGljaCBtYW55IHJhbmRvbS1hY2Nlc3MgbWVtYmVyc2hpcCB0ZXN0cyB3aWxs IGhhcHBlbi4gICovCiAKICNpbmNsdWRlICJoYXNodGFiLmgiCiAjaW5jbHVk ZSAic3RhdGlzdGljcy5oIgpAQCAtMTY4LDI0ICsyMzgsNDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgR1RZICgoKSkgYml0bWFwX29ic3RhY2sgewogICAgbGluZWFy IGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgZnJlZWQuICAqLwog CiB0eXBlZGVmIHN0cnVjdCBHVFkoKGNoYWluX25leHQgKCIlaC5uZXh0Iiks IGNoYWluX3ByZXYgKCIlaC5wcmV2IikpKSBiaXRtYXBfZWxlbWVudF9kZWYg ewotICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICpuZXh0OwkvKiBOZXh0 IGVsZW1lbnQuICAqLwotICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICpw cmV2OwkvKiBQcmV2aW91cyBlbGVtZW50LiAgKi8KLSAgdW5zaWduZWQgaW50 IGluZHg7CQkJLyogcmVnbm8vQklUTUFQX0VMRU1FTlRfQUxMX0JJVFMuICAq LwotICBCSVRNQVBfV09SRCBiaXRzW0JJVE1BUF9FTEVNRU5UX1dPUkRTXTsg LyogQml0cyB0aGF0IGFyZSBzZXQuICAqLworICAvKiBJbiBsaXN0IGZvcm0s IHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIGxpbmtlZCBsaXN0OworICAgICBp biB0cmVlIGZvcm0sIHRoZSBsZWZ0IGNoaWxkIG5vZGUgaW4gdGhlIHRyZWUu ICAqLworICBzdHJ1Y3QgYml0bWFwX2VsZW1lbnRfZGVmICpuZXh0OworCisg IC8qIEluIGxpc3QgZm9ybSwgdGhlIHByZXZpb3VzIGVsZW1lbnQgaW4gdGhl IGxpbmtlZCBsaXN0OworICAgICBpbiB0cmVlIGZvcm0sIHRoZSByaWdodCBj aGlsZCBub2RlIGluIHRoZSB0cmVlLiAgKi8KKyAgc3RydWN0IGJpdG1hcF9l bGVtZW50X2RlZiAqcHJldjsKKworICAvKiByZWduby9CSVRNQVBfRUxFTUVO VF9BTExfQklUUy4gICovCisgIHVuc2lnbmVkIGludCBpbmR4OworCisgIC8q IEJpdHMgdGhhdCBhcmUgc2V0LCBjb3VudGluZyBmcm9tIElORFgsIGluY2x1 c2l2ZS4gICovCisgIEJJVE1BUF9XT1JEIGJpdHNbQklUTUFQX0VMRU1FTlRf V09SRFNdOwogfSBiaXRtYXBfZWxlbWVudDsKIAogLyogSGVhZCBvZiBiaXRt YXAgbGlua2VkIGxpc3QuICBUaGUgJ2N1cnJlbnQnIG1lbWJlciBwb2ludHMg dG8gc29tZXRoaW5nCiAgICBhbHJlYWR5IHBvaW50ZWQgdG8gYnkgdGhlIGNo YWluIHN0YXJ0ZWQgYnkgZmlyc3QsIHNvIEdUWSgoc2tpcCkpIGl0LiAgKi8K IAogdHlwZWRlZiBzdHJ1Y3QgR1RZKCgpKSBiaXRtYXBfaGVhZF9kZWYgewot ICB1bnNpZ25lZCBpbnQgaW5keDsJCQkvKiBJbmRleCBvZiBsYXN0IGVsZW1l bnQgbG9va2VkIGF0LiAgKi8KLSAgdW5zaWduZWQgaW50IGRlc2NyaXB0b3Jf aWQ7CQkvKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFsbG9jYXRpb24K LQkJCQkJICAgc2l0ZSBvZiB0aGlzIGJpdG1hcCwgZm9yIGRldGFpbGVkCi0J CQkJCSAgIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLiAgKi8KLSAgYml0bWFwX2Vs ZW1lbnQgKmZpcnN0OwkJLyogRmlyc3QgZWxlbWVudCBpbiBsaW5rZWQgbGlz dC4gICovCi0gIGJpdG1hcF9lbGVtZW50ICogR1RZKChza2lwKCIiKSkpIGN1 cnJlbnQ7IC8qIExhc3QgZWxlbWVudCBsb29rZWQgYXQuICAqLwotICBiaXRt YXBfb2JzdGFjayAqb2JzdGFjazsJCS8qIE9ic3RhY2sgdG8gYWxsb2NhdGUg ZWxlbWVudHMgZnJvbS4KLQkJCQkJICAgSWYgTlVMTCwgdGhlbiB1c2UgR0dD IGFsbG9jYXRpb24uICAqLworICAvKiBJbmRleCBvZiBsYXN0IGVsZW1lbnQg bG9va2VkIGF0LiAgKi8KKyAgdW5zaWduZWQgaW50IGluZHg7CisKKyAgLyog VW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBhbGxvY2F0aW9uIHNpdGUgb2Yg dGhpcyBiaXRtYXAsCisgICAgIGZvciBkZXRhaWxlZCBzdGF0aXN0aWNzIGdh dGhlcmluZy4gICovCisgIHVuc2lnbmVkIGludCBkZXNjcmlwdG9yX2lkIDog MzE7CisKKyAgLyogMCBpZiB0aGUgYml0bWFwIGlzIGluIGxpc3QgZm9ybTsg MSBpZiB0aGUgYml0bWFwIGlzIGluIHRyZWUgZm9ybS4KKyAgICAgQml0bWFw IGl0ZXJhdG9ycyBvbmx5IHdvcmsgb24gYml0bWFwcyBpbiBsaXN0IGZvcm0u ICAqLworICB1bnNpZ25lZCBpbnQgdHJlZV9mb3JtIDogMTsKKworICAvKiBJ biBsaXN0IGZvcm0sIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBsaW5rZWQg bGlzdDsKKyAgICAgaW4gdHJlZSBmb3JtLCBUaGUgcm9vdCBvZiB0aGUgdHJl ZS4gICAqLworICBiaXRtYXBfZWxlbWVudCAqZmlyc3Q7CisKKyAgLyogTGFz dCBlbGVtZW50IGxvb2tlZCBhdC4gICovCisgIGJpdG1hcF9lbGVtZW50ICog R1RZKChza2lwKCIiKSkpIGN1cnJlbnQ7CisKKyAgLyogT2JzdGFjayB0byBh bGxvY2F0ZSBlbGVtZW50cyBmcm9tLgorICAgICBJZiBOVUxMLCB0aGVuIHVz ZSBHR0MgYWxsb2NhdGlvbi4gICovCisgIGJpdG1hcF9vYnN0YWNrICpvYnN0 YWNrOwogfSBiaXRtYXBfaGVhZDsKIAogLyogR2xvYmFsIGRhdGEgKi8KQEAg LTI1MiwxNSArMzQ0LDE1IEBAIGV4dGVybiBib29sIGJpdG1hcF9jbGVhcl9i aXQgKGJpdG1hcCwgaW4KIC8qIFNldCBhIHNpbmdsZSBiaXQgaW4gYSBiaXRt YXAuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgYml0IGNoYW5nZWQuICAqLwogZXh0 ZXJuIGJvb2wgYml0bWFwX3NldF9iaXQgKGJpdG1hcCwgaW50KTsKIAotLyog UmV0dXJuIHRydWUgaWYgYSByZWdpc3RlciBpcyBzZXQgaW4gYSByZWdpc3Rl ciBzZXQuICAqLworLyogUmV0dXJuIHRydWUgaWYgYSBiaXQgaXMgc2V0IGlu IGEgYml0bWFwLiAgKi8KIGV4dGVybiBpbnQgYml0bWFwX2JpdF9wIChiaXRt YXAsIGludCk7CiAKLS8qIERlYnVnIGZ1bmN0aW9ucyB0byBwcmludCBhIGJp dG1hcCBsaW5rZWQgbGlzdC4gICovCi1leHRlcm4gdm9pZCBkZWJ1Z19iaXRt YXAgKGNvbnN0X2JpdG1hcCk7Ci1leHRlcm4gdm9pZCBkZWJ1Z19iaXRtYXBf ZmlsZSAoRklMRSAqLCBjb25zdF9iaXRtYXApOworLyogRGVidWcgZnVuY3Rp b25zIHRvIHByaW50IGEgYml0bWFwLiAgKi8KK2V4dGVybiB2b2lkIGRlYnVn X2JpdG1hcCAoYml0bWFwKTsKK2V4dGVybiB2b2lkIGRlYnVnX2JpdG1hcF9m aWxlIChGSUxFICosIGJpdG1hcCk7CiAKIC8qIFByaW50IGEgYml0bWFwLiAg Ki8KLWV4dGVybiB2b2lkIGJpdG1hcF9wcmludCAoRklMRSAqLCBjb25zdF9i aXRtYXAsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiB2 b2lkIGJpdG1hcF9wcmludCAoRklMRSAqLCBiaXRtYXAsIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqKTsKIAogLyogSW5pdGlhbGl6ZSBhbmQgcmVsZWFz ZSBhIGJpdG1hcCBvYnN0YWNrLiAgKi8KIGV4dGVybiB2b2lkIGJpdG1hcF9v YnN0YWNrX2luaXRpYWxpemUgKGJpdG1hcF9vYnN0YWNrICopOwpAQCAtMjc1 LDYgKzM2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogYml0bWFwX2luaXRp YWxpemVfc3RhdCAoYml0bWFwIGhlYWQsIGJpdG1hcF9vYnN0YWNrICpvYnN0 YWNrIE1FTV9TVEFUX0RFQ0wpCiB7CiAgIGhlYWQtPmZpcnN0ID0gaGVhZC0+ Y3VycmVudCA9IE5VTEw7CisgIGhlYWQtPmluZHggPSBoZWFkLT50cmVlX2Zv cm0gPSAwOwogICBoZWFkLT5vYnN0YWNrID0gb2JzdGFjazsKICAgaWYgKEdB VEhFUl9TVEFUSVNUSUNTKQogICAgIGJpdG1hcF9yZWdpc3RlciAoaGVhZCBQ QVNTX01FTV9TVEFUKTsKQEAgLTI4OSw3ICszODIsNyBAQCBleHRlcm4gYml0 bWFwIGJpdG1hcF9nY19hbGxvY19zdGF0IChBTE9OCiBleHRlcm4gdm9pZCBi aXRtYXBfb2JzdGFja19mcmVlIChiaXRtYXApOwogCiAvKiBBIGZldyBjb21w YXRpYmlsaXR5L2Z1bmN0aW9ucyBtYWNyb3MgZm9yIGNvbXBhdGliaWxpdHkg d2l0aCBzYml0bWFwcyAqLwotaW5saW5lIHZvaWQgZHVtcF9iaXRtYXAgKEZJ TEUgKmZpbGUsIGNvbnN0X2JpdG1hcCBtYXApCitpbmxpbmUgdm9pZCBkdW1w X2JpdG1hcCAoRklMRSAqZmlsZSwgYml0bWFwIG1hcCkKIHsKICAgYml0bWFw X3ByaW50IChmaWxlLCBtYXAsICIiLCAiXG4iKTsKIH0KQEAgLTMxMCw3ICs0 MDMsOSBAQCBleHRlcm4gaGFzaHZhbF90IGJpdG1hcF9oYXNoKGNvbnN0X2Jp dG1hCiAjZGVmaW5lIEJJVE1BUF9GUkVFKEJJVE1BUCkgXAogICAgICAgICgo dm9pZCkgKGJpdG1hcF9vYnN0YWNrX2ZyZWUgKChiaXRtYXApIEJJVE1BUCks IChCSVRNQVApID0gKGJpdG1hcCkgTlVMTCkpCiAKLS8qIEl0ZXJhdG9yIGZv ciBiaXRtYXBzLiAgKi8KKy8qIEl0ZXJhdG9yIGZvciBiaXRtYXBzLgorICAg VE9ETzogVGhlc2UgaXRlcmF0b3JzIG9ubHkgd29yayBvbiBiaXRtYXBzIGlu IGxpc3QgZm9ybS4KKyAgICAgICAgIEhhdmluZyB0aGVtIHdvcmtpbmcgZm9y IHRyZWUgYml0bWFwcyBhbHNvIHdvdWxkIGJlIG5pY2UuICAqLwogCiB0eXBl ZGVmIHN0cnVjdAogewpAQCAtMzM5LDYgKzQzNCw4IEBAIGJtcF9pdGVyX3Nl dF9pbml0IChiaXRtYXBfaXRlcmF0b3IgKmJpLAogICBiaS0+ZWx0MSA9IG1h cC0+Zmlyc3Q7CiAgIGJpLT5lbHQyID0gTlVMTDsKIAorICBnY2NfY2hlY2tp bmdfYXNzZXJ0ICghbWFwLT50cmVlX2Zvcm0pOworCiAgIC8qIEFkdmFuY2Ug ZWx0MSB1bnRpbCBpdCBpcyBub3QgYmVmb3JlIHRoZSBibG9jayBjb250YWlu aW5nIHN0YXJ0X2JpdC4gICovCiAgIHdoaWxlICgxKQogICAgIHsKQEAgLTM4 MSw2ICs0NzgsOCBAQCBibXBfaXRlcl9hbmRfaW5pdCAoYml0bWFwX2l0ZXJh dG9yICpiaSwKICAgYmktPmVsdDEgPSBtYXAxLT5maXJzdDsKICAgYmktPmVs dDIgPSBtYXAyLT5maXJzdDsKIAorICBnY2NfY2hlY2tpbmdfYXNzZXJ0ICgh bWFwMS0+dHJlZV9mb3JtICYmICFtYXAyLT50cmVlX2Zvcm0pOworCiAgIC8q IEFkdmFuY2UgZWx0MSB1bnRpbCBpdCBpcyBub3QgYmVmb3JlIHRoZSBibG9j ayBjb250YWluaW5nCiAgICAgIHN0YXJ0X2JpdC4gICovCiAgIHdoaWxlICgx KQpAQCAtNDM5LDggKzUzOCw3IEBAIGJtcF9pdGVyX2FuZF9pbml0IChiaXRt YXBfaXRlcmF0b3IgKmJpLAogICAqYml0X25vID0gc3RhcnRfYml0OwogfQog Ci0vKiBJbml0aWFsaXplIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0 aGUgYml0cyBpbiBNQVAxICYgfk1BUDIuCi0gICAqLworLyogSW5pdGlhbGl6 ZSBhbiBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhlIGJpdHMgaW4gTUFQ MSAmIH5NQVAyLiAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkCiBibXBfaXRl cl9hbmRfY29tcGxfaW5pdCAoYml0bWFwX2l0ZXJhdG9yICpiaSwKQEAgLTQ1 MCw2ICs1NDgsOCBAQCBibXBfaXRlcl9hbmRfY29tcGxfaW5pdCAoYml0bWFw X2l0ZXJhdG9yCiAgIGJpLT5lbHQxID0gbWFwMS0+Zmlyc3Q7CiAgIGJpLT5l bHQyID0gbWFwMi0+Zmlyc3Q7CiAKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAo IW1hcDEtPnRyZWVfZm9ybSAmJiAhbWFwMi0+dHJlZV9mb3JtKTsKKwogICAv KiBBZHZhbmNlIGVsdDEgdW50aWwgaXQgaXMgbm90IGJlZm9yZSB0aGUgYmxv Y2sgY29udGFpbmluZyBzdGFydF9iaXQuICAqLwogICB3aGlsZSAoMSkKICAg ICB7CkluZGV4OiByZWdpbmZvLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gcmVnaW5mby5jCShyZXZpc2lvbiAxOTY0MTApCisrKyByZWdpbmZvLmMJ KHdvcmtpbmcgY29weSkKQEAgLTEyMzksNiArMTIzOSw4IEBAIGZpbmRfc3Vi cmVnc19vZl9tb2RlIChydHggeCwgYml0bWFwIHN1YnIKICAgICB9CiB9CiAK K2V4dGVybiB2b2lkIGJpdG1hcF90cmVlX3ZpZXcgKGJpdG1hcCk7CisKIHZv aWQKIGluaXRfc3VicmVnc19vZl9tb2RlICh2b2lkKQogewpAQCAtMTI1MSw2 ICsxMjUzLDggQEAgaW5pdF9zdWJyZWdzX29mX21vZGUgKHZvaWQpCiAgIGlu dmFsaWRfbW9kZV9jaGFuZ2VzID0gQklUTUFQX0FMTE9DIChOVUxMKTsKICAg Yml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAoJnNyb21fb2JzdGFjayk7CiAg IHN1YnJlZ3Nfb2ZfbW9kZSA9IEJJVE1BUF9BTExPQyAoJnNyb21fb2JzdGFj ayk7CisgIGJpdG1hcF90cmVlX3ZpZXcgKGludmFsaWRfbW9kZV9jaGFuZ2Vz KTsKKyAgYml0bWFwX3RyZWVfdmlldyAoc3VicmVnc19vZl9tb2RlKTsKIAog ICBGT1JfRUFDSF9CQiAoYmIpCiAgICAgRk9SX0JCX0lOU05TIChiYiwgaW5z bikK --20cf307f32648aa09b04d72fcc0e--