From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 41E7C3857C40 for ; Fri, 7 Jan 2022 14:15:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 41E7C3857C40 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: eFds62yN0EKR4tWtbF/tL2ca6shLGvzpM4mSEKWjo3G+DLDY3hR6LXeRfCjW4t7hCZY2B2gXky OcYKT2AANQpOyeLPUSCJ85UVcs2kN3UnqGqkSCWrkuLhTyVujwbLQdlKkwe0eWd1ytHMnX7+bx PfjupacMrX1CiJzZDqxGgkI9bT8mLQCDUfdlGOtHiGG247Xf+lV+rC22uyxjmNCFMMFM95WX3K MrpMrCmk3KuizYhbYAuLOeymGvArTH5+sSlxFqVJOabY9V3sr0Cx/Y75ePYKNd9GgBqQ0BJmyu 4trm4MJXm+HFacPXGOiyx8YT X-IronPort-AV: E=Sophos;i="5.88,270,1635235200"; d="scan'208";a="70358481" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 07 Jan 2022 06:15:04 -0800 IronPort-SDR: B4/fC5m6pXXOx5btKsDebYSOoMnUJdgUkbIp1P33fIum8y9KB/TVQd81fumtC7UdyWJXQ2KuMY w8CZsOnTSs0HS7fKQ+5nUT7fRnkyo29Tv5PRjYOTJ03GhiatV/lCqWwbrWO44czRKAMomy+sGg 7Sr2w9MApjshDKJcjhzlTw+cT6fhfpJiMxiI28t11F8j10jEmQfiT138hReWMNFNkPsX99fhzr L8ORkv5CZHXjkVXcjQ5TsYBvQmNw91H0BL0N2hHR+Zc2LEa/3EvrmLOXUcfm9+73UHKNfbHMP/ 4fI= Content-Type: multipart/mixed; boundary="------------GAOuBwTbAb3fPRdfJVcV1SwY" Message-ID: <985755ee-f7bd-7d47-1ea0-1ca980117f6d@codesourcery.com> Date: Fri, 7 Jan 2022 14:14:57 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH] libgomp, OpenMP, nvptx: Low-latency memory allocator Content-Language: en-GB To: Tom de Vries , "gcc-patches@gcc.gnu.org" CC: Tobias Burnus , Jakub Jelinek References: <25ad524d-f0d6-1970-b8e9-9b11b6cde68b@codesourcery.com> <42c70624-2b10-340c-8945-601203768d48@suse.de> <664653d3-cf64-b800-6ffb-c27e50dc15bf@suse.de> <5e75a64c-a8d3-2d2a-162a-a3ea79358b48@suse.de> <3e39c39d-2753-f08c-5fb7-85051cafab85@suse.de> From: Andrew Stubbs In-Reply-To: <3e39c39d-2753-f08c-5fb7-85051cafab85@suse.de> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-02.mgc.mentorg.com (139.181.222.2) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Jan 2022 14:15:10 -0000 --------------GAOuBwTbAb3fPRdfJVcV1SwY Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 06/01/2022 17:53, Tom de Vries wrote: > My current understanding is that this is a backend problem, and needs to > be fixed by defining atomic_store patterns which take care of this > peculiarity. You mentioned on IRC that I ought to initialize the free chain using atomics also, and that you are working on an atomic store implementation. This patch fixes the initialization issue. It works with my device, I think. Please test it with your device when the backend issue is fixed. Thanks very much! Andrew --------------GAOuBwTbAb3fPRdfJVcV1SwY Content-Type: text/plain; charset="UTF-8"; name="220107-low-latency-allocator.patch" Content-Disposition: attachment; filename="220107-low-latency-allocator.patch" Content-Transfer-Encoding: base64 bGliZ29tcCwgbnZwdHg6IGxvdy1sYXRlbmN5IG1lbW9yeSBhbGxvY2F0b3IKClRoaXMgcGF0 Y2ggYWRkcyBzdXBwb3J0IGZvciBhbGxvY2F0aW5nIGxvdy1sYXRlbmN5ICIuc2hhcmVkIiBt ZW1vcnkgb24KTlZQVFggR1BVIGRldmljZSwgdmlhIHRoZSBvbXBfbG93X2xhdF9tZW1fc3Bh Y2UgYW5kIG9tcF9hbGxvYy4gIFRoZSBtZW1vcnkKY2FuIGJlIGFsbG9jYXRlZCwgcmVhbGxv Y2F0ZWQsIGFuZCBmcmVlZCB1c2luZyBhIGJhc2ljIGJ1dCBmYXN0IGFsZ29yaXRobSwKaXMg dGhyZWFkIHNhZmUgYW5kIHRoZSBzaXplIG9mIHRoZSBsb3ctbGF0ZW5jeSBoZWFwIGNhbiBi ZSBjb25maWd1cmVkIHVzaW5nCnRoZSBHT01QX05WUFRYX0xPV0xBVF9QT09MIGVudmlyb25t ZW50IHZhcmlhYmxlLgoKVGhlIHVzZSBvZiB0aGUgUFRYIGR5bmFtaWNfc21lbV9zaXplIGZl YXR1cmUgbWVhbnMgdGhhdCB0aGUgbWluaW11bSB2ZXJzaW9uCnJlcXVpcmVtZW50IGlzIG5v dyBidW1wZWQgdG8gNC4xIChzdGlsbCBvbGQgYXQgdGhpcyBwb2ludCkuCgpsaWJnb21wL0No YW5nZUxvZzoKCgkqIGFsbG9jYXRvci5jIChNRU1TUEFDRV9BTExPQyk6IE5ldyBtYWNyby4K CShNRU1TUEFDRV9DQUxMT0MpOiBOZXcgbWFjcm8uCgkoTUVNU1BBQ0VfUkVBTExPQyk6IE5l dyBtYWNyby4KCShNRU1TUEFDRV9GUkVFKTogTmV3IG1hY3JvLgoJKGR5bmFtaWNfc21lbV9z aXplKTogTmV3IGNvbnN0YW50cy4KCShvbXBfYWxsb2MpOiBVc2UgTUVNU1BBQ0VfQUxMT0Mu CglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLgoJKG9t cF9mcmVlKTogVXNlIE1FTVNQQUNFX0ZSRUUuCgkob21wX2NhbGxvYyk6IFVzZSBNRU1TUEFD RV9DQUxMT0MuCglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0 b3JzLgoJKG9tcF9yZWFsbG9jKTogVXNlIE1FTVNQQUNFX1JFQUxMT0MuCglJbXBsZW1lbnQg ZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLgoJKiBjb25maWcvbnZwdHgv dGVhbS5jIChfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QpOiBOZXcgdmFyaWFibGUuCgkoX19u dnB0eF9sb3dsYXRfcG9vbCk6IE5ldyBhc20gdmFyYWlibGUuCgkoZ29tcF9udnB0eF9tYWlu KTogSW5pdGlhbGl6ZSB0aGUgbG93LWxhdGVuY3kgaGVhcC4KCSogcGx1Z2luL3BsdWdpbi1u dnB0eC5jIChsb3dsYXRfcG9vbF9zaXplKTogTmV3IHZhcmlhYmxlLgoJKEdPTVBfT0ZGTE9B RF9pbml0X2RldmljZSk6IFJlYWQgdGhlIEdPTVBfTlZQVFhfTE9XTEFUX1BPT0wgZW52dmFy LgoJKEdPTVBfT0ZGTE9BRF9ydW4pOiBBcHBseSBsb3dsYXRfcG9vbF9zaXplLgoJKiBjb25m aWcvbnZwdHgvYWxsb2NhdG9yLmM6IE5ldyBmaWxlLgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5j L2FsbG9jYXRvcnMtMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxv Y2F0b3JzLTIuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9y cy0zLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNC5j OiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTUuYzogTmV3 IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy02LmM6IE5ldyB0ZXN0 LgoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvYWxsb2NhdG9yLmMgYi9saWJnb21wL2FsbG9jYXRv ci5jCmluZGV4IDA3YTU2NDVmNGNjLi5iMWY1ZmUwYTVlMiAxMDA2NDQKLS0tIGEvbGliZ29t cC9hbGxvY2F0b3IuYworKysgYi9saWJnb21wL2FsbG9jYXRvci5jCkBAIC0zNCw2ICszNCwz OCBAQAogCiAjZGVmaW5lIG9tcF9tYXhfcHJlZGVmaW5lZF9hbGxvYyBvbXBfdGhyZWFkX21l bV9hbGxvYwogCisvKiBUaGVzZSBtYWNyb3MgbWF5IGJlIG92ZXJyaWRkZW4gaW4gY29uZmln Lzx0YXJnZXQ+L2FsbG9jYXRvci5jLiAgKi8KKyNpZm5kZWYgTUVNU1BBQ0VfQUxMT0MKKyNk ZWZpbmUgTUVNU1BBQ0VfQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAgKCh2b2lkKU1FTVNQ QUNFLCBtYWxsb2MgKFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX0NBTExPQwor I2RlZmluZSBNRU1TUEFDRV9DQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAgKCh2b2lkKU1F TVNQQUNFLCBjYWxsb2MgKDEsIFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX1JF QUxMT0MKKyNkZWZpbmUgTUVNU1BBQ0VfUkVBTExPQyhNRU1TUEFDRSwgQUREUiwgT0xEU0la RSwgU0laRSkgXAorICAoKHZvaWQpTUVNU1BBQ0UsICh2b2lkKU9MRFNJWkUsIHJlYWxsb2Mg KEFERFIsIFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX0ZSRUUKKyNkZWZpbmUg TUVNU1BBQ0VfRlJFRShNRU1TUEFDRSwgQUREUiwgU0laRSkgXAorICAoKHZvaWQpTUVNU1BB Q0UsICh2b2lkKVNJWkUsIGZyZWUgKEFERFIpKQorI2VuZGlmCisKKy8qIE1hcCB0aGUgcHJl ZGVmaW5lZCBhbGxvY2F0b3JzIHRvIHRoZSBjb3JyZWN0IG1lbW9yeSBzcGFjZS4KKyAgIFRo ZSBpbmRleCB0byB0aGlzIHRhYmxlIGlzIHRoZSBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGVu dW0gdmFsdWUuICAqLworc3RhdGljIGNvbnN0IG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBwcmVk ZWZpbmVkX2FsbG9jX21hcHBpbmdbXSA9IHsKKyAgb21wX2RlZmF1bHRfbWVtX3NwYWNlLCAg IC8qIG9tcF9udWxsX2FsbG9jYXRvci4gKi8KKyAgb21wX2RlZmF1bHRfbWVtX3NwYWNlLCAg IC8qIG9tcF9kZWZhdWx0X21lbV9hbGxvYy4gKi8KKyAgb21wX2xhcmdlX2NhcF9tZW1fc3Bh Y2UsIC8qIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jLiAqLworICBvbXBfZGVmYXVsdF9tZW1f c3BhY2UsICAgLyogb21wX2NvbnN0X21lbV9hbGxvYy4gKi8KKyAgb21wX2hpZ2hfYndfbWVt X3NwYWNlLCAgIC8qIG9tcF9oaWdoX2J3X21lbV9hbGxvYy4gKi8KKyAgb21wX2xvd19sYXRf bWVtX3NwYWNlLCAgIC8qIG9tcF9sb3dfbGF0X21lbV9hbGxvYy4gKi8KKyAgb21wX2xvd19s YXRfbWVtX3NwYWNlLCAgIC8qIG9tcF9jZ3JvdXBfbWVtX2FsbG9jLiAqLworICBvbXBfbG93 X2xhdF9tZW1fc3BhY2UsICAgLyogb21wX3B0ZWFtX21lbV9hbGxvYy4gKi8KKyAgb21wX2xv d19sYXRfbWVtX3NwYWNlLCAgIC8qIG9tcF90aHJlYWRfbWVtX2FsbG9jLiAqLworfTsKKwog c3RydWN0IG9tcF9hbGxvY2F0b3JfZGF0YQogewogICBvbXBfbWVtc3BhY2VfaGFuZGxlX3Qg bWVtc3BhY2U7CkBAIC0yODEsNyArMzEzLDcgQEAgcmV0cnk6CiAgICAgICBhbGxvY2F0b3Jf ZGF0YS0+dXNlZF9wb29sX3NpemUgPSB1c2VkX3Bvb2xfc2l6ZTsKICAgICAgIGdvbXBfbXV0 ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCi0gICAgICBwdHIg PSBtYWxsb2MgKG5ld19zaXplKTsKKyAgICAgIHB0ciA9IE1FTVNQQUNFX0FMTE9DIChhbGxv Y2F0b3JfZGF0YS0+bWVtc3BhY2UsIG5ld19zaXplKTsKICAgICAgIGlmIChwdHIgPT0gTlVM TCkKIAl7CiAjaWZkZWYgSEFWRV9TWU5DX0JVSUxUSU5TCkBAIC0yOTcsNyArMzI5LDEwIEBA IHJldHJ5OgogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHB0ciA9IG1hbGxvYyAobmV3 X3NpemUpOworICAgICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9j YXRvcl9kYXRhCisJCQkJCT8gYWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJl ZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9jYXRvcl0pOworICAgICAgcHRyID0gTUVNU1BB Q0VfQUxMT0MgKG1lbXNwYWNlLCBuZXdfc2l6ZSk7CiAgICAgICBpZiAocHRyID09IE5VTEwp CiAJZ290byBmYWlsOwogICAgIH0KQEAgLTMxNSwzMiArMzUwLDM1IEBAIHJldHJ5OgogICBy ZXR1cm4gcmV0OwogCiBmYWlsOgotICBpZiAoYWxsb2NhdG9yX2RhdGEpCisgIGludCBmYWxs YmFjayA9IChhbGxvY2F0b3JfZGF0YQorCQkgID8gYWxsb2NhdG9yX2RhdGEtPmZhbGxiYWNr CisJCSAgOiBhbGxvY2F0b3IgPT0gb21wX2RlZmF1bHRfbWVtX2FsbG9jCisJCSAgPyBvbXBf YXR2X251bGxfZmIKKwkJICA6IG9tcF9hdHZfZGVmYXVsdF9tZW1fZmIpOworICBzd2l0Y2gg KGZhbGxiYWNrKQogICAgIHsKLSAgICAgIHN3aXRjaCAoYWxsb2NhdG9yX2RhdGEtPmZhbGxi YWNrKQorICAgIGNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoKKyAgICAgIGlmICgobmV3 X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKSAmJiBuZXdfYWxpZ25tZW50ID4gYWxpZ25t ZW50KQorCSAgfHwgKGFsbG9jYXRvcl9kYXRhCisJICAgICAgJiYgYWxsb2NhdG9yX2RhdGEt PnBvb2xfc2l6ZSA8IH4odWludHB0cl90KSAwKQorCSAgfHwgIWFsbG9jYXRvcl9kYXRhKQog CXsKLQljYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6Ci0JICBpZiAoKG5ld19hbGlnbm1l bnQgPiBzaXplb2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKLQkg ICAgICB8fCAoYWxsb2NhdG9yX2RhdGEKLQkJICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9z aXplIDwgfih1aW50cHRyX3QpIDApKQotCSAgICB7Ci0JICAgICAgYWxsb2NhdG9yID0gb21w X2RlZmF1bHRfbWVtX2FsbG9jOwotCSAgICAgIGdvdG8gcmV0cnk7Ci0JICAgIH0KLQkgIC8q IE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0gYWxsb2Nh dGlvbgotCSAgICAgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNjZWVkIGFnYWlu ICh1bmxlc3MgaXQgd2FzCi0JICAgICBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVMTCB0aGVu LCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCi0JICBicmVhazsKLQljYXNlIG9tcF9h dHZfbnVsbF9mYjoKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBvbXBfYXR2X2Fib3J0 X2ZiOgotCSAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0 ZXMiLAotCQkgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7Ci0JY2FzZSBvbXBfYXR2X2Fs bG9jYXRvcl9mYjoKLQkgIGFsbG9jYXRvciA9IGFsbG9jYXRvcl9kYXRhLT5mYl9kYXRhOwor CSAgYWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwogCSAgZ290byByZXRyeTsK IAl9CisgICAgICAvKiBPdGhlcndpc2UsIHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1 bHQgbWVtIGFsbG9jYXRpb24KKwkgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNj ZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCisJIGludGVybWl0dGVudC4gIFJldHVybiBOVUxM IHRoZW4sIGFzIHRoYXQgaXMgdGhlIGZhbGxiYWNrLiAgKi8KKyAgICAgIGJyZWFrOworICAg IGNhc2Ugb21wX2F0dl9udWxsX2ZiOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg ICBjYXNlIG9tcF9hdHZfYWJvcnRfZmI6CisgICAgICBnb21wX2ZhdGFsICgiT3V0IG9mIG1l bW9yeSBhbGxvY2F0aW5nICVsdSBieXRlcyIsCisJCSAgKHVuc2lnbmVkIGxvbmcpIHNpemUp OworICAgIGNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6CisgICAgICBhbGxvY2F0b3IgPSBh bGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKyAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQogICBy ZXR1cm4gTlVMTDsKIH0KQEAgLTM3Myw2ICs0MTEsNyBAQCB2b2lkCiBvbXBfZnJlZSAodm9p ZCAqcHRyLCBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGFsbG9jYXRvcikKIHsKICAgc3RydWN0 IG9tcF9tZW1faGVhZGVyICpkYXRhOworICBvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3Bh Y2UgPSBvbXBfZGVmYXVsdF9tZW1fc3BhY2U7CiAKICAgaWYgKHB0ciA9PSBOVUxMKQogICAg IHJldHVybjsKQEAgLTM5Myw4ICs0MzIsMTMgQEAgb21wX2ZyZWUgKHZvaWQgKnB0ciwgb21w X2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCiAJICBnb21wX211dGV4X3VubG9jayAo JmFsbG9jYXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgogCX0KKworICAgICAgbWVtc3BhY2Ug PSBhbGxvY2F0b3JfZGF0YS0+bWVtc3BhY2U7CiAgICAgfQotICBmcmVlIChkYXRhLT5wdHIp OworICBlbHNlCisgICAgbWVtc3BhY2UgPSBwcmVkZWZpbmVkX2FsbG9jX21hcHBpbmdbZGF0 YS0+YWxsb2NhdG9yXTsKKworICBNRU1TUEFDRV9GUkVFIChtZW1zcGFjZSwgZGF0YS0+cHRy LCBkYXRhLT5zaXplKTsKIH0KIAogaWFsaWFzIChvbXBfZnJlZSkKQEAgLTQ4Miw3ICs1MjYs NyBAQCByZXRyeToKICAgICAgIGFsbG9jYXRvcl9kYXRhLT51c2VkX3Bvb2xfc2l6ZSA9IHVz ZWRfcG9vbF9zaXplOwogICAgICAgZ29tcF9tdXRleF91bmxvY2sgKCZhbGxvY2F0b3JfZGF0 YS0+bG9jayk7CiAjZW5kaWYKLSAgICAgIHB0ciA9IGNhbGxvYyAoMSwgbmV3X3NpemUpOwor ICAgICAgcHRyID0gTUVNU1BBQ0VfQ0FMTE9DIChhbGxvY2F0b3JfZGF0YS0+bWVtc3BhY2Us IG5ld19zaXplKTsKICAgICAgIGlmIChwdHIgPT0gTlVMTCkKIAl7CiAjaWZkZWYgSEFWRV9T WU5DX0JVSUxUSU5TCkBAIC00OTgsNyArNTQyLDEwIEBAIHJldHJ5OgogICAgIH0KICAgZWxz ZQogICAgIHsKLSAgICAgIHB0ciA9IGNhbGxvYyAoMSwgbmV3X3NpemUpOworICAgICAgb21w X21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9jYXRvcl9kYXRhCisJCQkJCT8g YWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJlZGVmaW5lZF9hbGxvY19tYXBw aW5nW2FsbG9jYXRvcl0pOworICAgICAgcHRyID0gTUVNU1BBQ0VfQ0FMTE9DIChtZW1zcGFj ZSwgbmV3X3NpemUpOwogICAgICAgaWYgKHB0ciA9PSBOVUxMKQogCWdvdG8gZmFpbDsKICAg ICB9CkBAIC01MTYsMzIgKzU2MywzNSBAQCByZXRyeToKICAgcmV0dXJuIHJldDsKIAogZmFp bDoKLSAgaWYgKGFsbG9jYXRvcl9kYXRhKQorICBpbnQgZmFsbGJhY2sgPSAoYWxsb2NhdG9y X2RhdGEKKwkJICA/IGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaworCQkgIDogYWxsb2NhdG9y ID09IG9tcF9kZWZhdWx0X21lbV9hbGxvYworCQkgID8gb21wX2F0dl9udWxsX2ZiCisJCSAg OiBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiKTsKKyAgc3dpdGNoIChmYWxsYmFjaykKICAgICB7 Ci0gICAgICBzd2l0Y2ggKGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaykKKyAgICBjYXNlIG9t cF9hdHZfZGVmYXVsdF9tZW1fZmI6CisgICAgICBpZiAoKG5ld19hbGlnbm1lbnQgPiBzaXpl b2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKKwkgIHx8IChhbGxv Y2F0b3JfZGF0YQorCSAgICAgICYmIGFsbG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPCB+KHVp bnRwdHJfdCkgMCkKKwkgIHx8ICFhbGxvY2F0b3JfZGF0YSkKIAl7Ci0JY2FzZSBvbXBfYXR2 X2RlZmF1bHRfbWVtX2ZiOgotCSAgaWYgKChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lk ICopICYmIG5ld19hbGlnbm1lbnQgPiBhbGlnbm1lbnQpCi0JICAgICAgfHwgKGFsbG9jYXRv cl9kYXRhCi0JCSAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90 KSAwKSkKLQkgICAgewotCSAgICAgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21lbV9hbGxv YzsKLQkgICAgICBnb3RvIHJldHJ5OwotCSAgICB9Ci0JICAvKiBPdGhlcndpc2UsIHdlJ3Zl IGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KLQkgICAgIGFuZCBp ZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcwot CSAgICAgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwgYXMgdGhhdCBpcyB0aGUg ZmFsbGJhY2suICAqLwotCSAgYnJlYWs7Ci0JY2FzZSBvbXBfYXR2X251bGxfZmI6Ci0JICBi cmVhazsKLQlkZWZhdWx0OgotCWNhc2Ugb21wX2F0dl9hYm9ydF9mYjoKLQkgIGdvbXBfZmF0 YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgJWx1IGJ5dGVzIiwKLQkJICAgICAgKHVu c2lnbmVkIGxvbmcpIChzaXplICogbm1lbWIpKTsKLQljYXNlIG9tcF9hdHZfYWxsb2NhdG9y X2ZiOgotCSAgYWxsb2NhdG9yID0gYWxsb2NhdG9yX2RhdGEtPmZiX2RhdGE7CisJICBhbGxv Y2F0b3IgPSBvbXBfZGVmYXVsdF9tZW1fYWxsb2M7CiAJICBnb3RvIHJldHJ5OwogCX0KKyAg ICAgIC8qIE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0g YWxsb2NhdGlvbgorCSBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0IHdvbid0IHN1Y2NlZWQgYWdh aW4gKHVubGVzcyBpdCB3YXMKKwkgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwg YXMgdGhhdCBpcyB0aGUgZmFsbGJhY2suICAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBv bXBfYXR2X251bGxfZmI6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGNhc2Ug b21wX2F0dl9hYm9ydF9mYjoKKyAgICAgIGdvbXBfZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGFs bG9jYXRpbmcgJWx1IGJ5dGVzIiwKKwkJICAodW5zaWduZWQgbG9uZykgKHNpemUgKiBubWVt YikpOworICAgIGNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6CisgICAgICBhbGxvY2F0b3Ig PSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKyAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQog ICByZXR1cm4gTlVMTDsKIH0KQEAgLTY2MCw3ICs3MTAsOCBAQCByZXRyeToKICAgICAgIGdv bXBfbXV0ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCiAgICAg ICBpZiAocHJldl9zaXplKQotCW5ld19wdHIgPSByZWFsbG9jIChkYXRhLT5wdHIsIG5ld19z aXplKTsKKwluZXdfcHRyID0gTUVNU1BBQ0VfUkVBTExPQyAoYWxsb2NhdG9yX2RhdGEtPm1l bXNwYWNlLCBkYXRhLT5wdHIsCisJCQkJICAgIGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAg ICAgIGVsc2UKIAluZXdfcHRyID0gbWFsbG9jIChuZXdfc2l6ZSk7CiAgICAgICBpZiAobmV3 X3B0ciA9PSBOVUxMKQpAQCAtNjkwLDcgKzc0MSwxMCBAQCByZXRyeToKIAkgICAmJiAoZnJl ZV9hbGxvY2F0b3JfZGF0YSA9PSBOVUxMCiAJICAgICAgIHx8IGZyZWVfYWxsb2NhdG9yX2Rh dGEtPnBvb2xfc2l6ZSA9PSB+KHVpbnRwdHJfdCkgMCkpCiAgICAgewotICAgICAgbmV3X3B0 ciA9IHJlYWxsb2MgKGRhdGEtPnB0ciwgbmV3X3NpemUpOworICAgICAgb21wX21lbXNwYWNl X2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9jYXRvcl9kYXRhCisJCQkJCT8gYWxsb2NhdG9y X2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9j YXRvcl0pOworICAgICAgbmV3X3B0ciA9IE1FTVNQQUNFX1JFQUxMT0MgKG1lbXNwYWNlLCBk YXRhLT5wdHIsIGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAgICAgIGlmIChuZXdfcHRyID09 IE5VTEwpCiAJZ290byBmYWlsOwogICAgICAgcmV0ID0gKGNoYXIgKikgbmV3X3B0ciArIHNp emVvZiAoc3RydWN0IG9tcF9tZW1faGVhZGVyKTsKQEAgLTczNSwzMiArNzg5LDM1IEBAIHJl dHJ5OgogICByZXR1cm4gcmV0OwogCiBmYWlsOgotICBpZiAoYWxsb2NhdG9yX2RhdGEpCisg IGludCBmYWxsYmFjayA9IChhbGxvY2F0b3JfZGF0YQorCQkgID8gYWxsb2NhdG9yX2RhdGEt PmZhbGxiYWNrCisJCSAgOiBhbGxvY2F0b3IgPT0gb21wX2RlZmF1bHRfbWVtX2FsbG9jCisJ CSAgPyBvbXBfYXR2X251bGxfZmIKKwkJICA6IG9tcF9hdHZfZGVmYXVsdF9tZW1fZmIpOwor ICBzd2l0Y2ggKGZhbGxiYWNrKQogICAgIHsKLSAgICAgIHN3aXRjaCAoYWxsb2NhdG9yX2Rh dGEtPmZhbGxiYWNrKQorICAgIGNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoKKyAgICAg IGlmIChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lkICopCisJICB8fCAoYWxsb2NhdG9y X2RhdGEKKwkgICAgICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRy X3QpIDApCisJICB8fCAhYWxsb2NhdG9yX2RhdGEpCiAJewotCWNhc2Ugb21wX2F0dl9kZWZh dWx0X21lbV9mYjoKLQkgIGlmIChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lkICopCi0J ICAgICAgfHwgKGFsbG9jYXRvcl9kYXRhCi0JCSAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xf c2l6ZSA8IH4odWludHB0cl90KSAwKSkKLQkgICAgewotCSAgICAgIGFsbG9jYXRvciA9IG9t cF9kZWZhdWx0X21lbV9hbGxvYzsKLQkgICAgICBnb3RvIHJldHJ5OwotCSAgICB9Ci0JICAv KiBPdGhlcndpc2UsIHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9j YXRpb24KLQkgICAgIGFuZCBpZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2Fp biAodW5sZXNzIGl0IHdhcwotCSAgICAgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhl biwgYXMgdGhhdCBpcyB0aGUgZmFsbGJhY2suICAqLwotCSAgYnJlYWs7Ci0JY2FzZSBvbXBf YXR2X251bGxfZmI6Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCWNhc2Ugb21wX2F0dl9hYm9y dF9mYjoKLQkgIGdvbXBfZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgJWx1IGJ5 dGVzIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemUpOwotCWNhc2Ugb21wX2F0dl9h bGxvY2F0b3JfZmI6Ci0JICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsK KwkgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21lbV9hbGxvYzsKIAkgIGdvdG8gcmV0cnk7 CiAJfQorICAgICAgLyogT3RoZXJ3aXNlLCB3ZSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCBkZWZh dWx0IG1lbSBhbGxvY2F0aW9uCisJIGFuZCBpZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3Vj Y2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcworCSBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVM TCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCisgICAgICBicmVhazsKKyAg ICBjYXNlIG9tcF9hdHZfbnVsbF9mYjoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgY2FzZSBvbXBfYXR2X2Fib3J0X2ZiOgorICAgICAgZ29tcF9mYXRhbCAoIk91dCBvZiBt ZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0ZXMiLAorCQkgICh1bnNpZ25lZCBsb25nKSBzaXpl KTsKKyAgICBjYXNlIG9tcF9hdHZfYWxsb2NhdG9yX2ZiOgorICAgICAgYWxsb2NhdG9yID0g YWxsb2NhdG9yX2RhdGEtPmZiX2RhdGE7CisgICAgICBnb3RvIHJldHJ5OwogICAgIH0KICAg cmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9saWJnb21wL2NvbmZpZy9udnB0eC9hbGxv Y2F0b3IuYyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2FsbG9jYXRvci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YmMyZWE0ODA0MwotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2FsbG9jYXRvci5jCkBAIC0wLDAgKzEsMzcw IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgT2ZmbG9hZGluZyBhbmQg TXVsdGkgUHJvY2Vzc2luZyBMaWJyYXJ5CisgICAobGliZ29tcCkuCisKKyAgIExpYmdvbXAg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBMaWJnb21wIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICAgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisg ICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhj ZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVz cGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKKy8qIFRoZSBsb3ctbGF0ZW5jeSBhbGxvY2F0b3JzIHVzZSBzcGFjZSBy ZXNlcnZlZCBpbiAuc2hhcmVkIG1lbW9yeSB3aGVuIHRoZQorICAga2VybmVsIGlzIGxhdW5j aGVkLiAgVGhlIGhlYXAgaXMgaW5pdGlhbGl6ZWQgaW4gZ29tcF9udnB0eF9tYWluIGFuZCBh bGwKKyAgIGFsbG9jYXRpb25zIGFyZSBmb3Jnb3R0ZW4gd2hlbiB0aGUga2VybmVsIGV4aXRz LiAgQWxsb2NhdGlvbnMgdG8gb3RoZXIKKyAgIG1lbW9yeSBzcGFjZXMgYWxsIHVzZSB0aGUg c3lzdGVtIG1hbGxvYyBzeXNjYWxsLgorCisgICBUaGUgcm9vdCBoZWFwIGRlc2NyaXB0b3Ig aXMgc3RvcmVkIGVsc2V3aGVyZSBpbiBzaGFyZWQgbWVtb3J5LCBhbmQgZWFjaAorICAgZnJl ZSBjaHVuayBjb250YWlucyBhIHNpbWlsYXIgZGVzY3JpcHRvciBmb3IgdGhlIG5leHQgZnJl ZSBjaHVuayBpbiB0aGUKKyAgIGNoYWluLgorCisgICBUaGUgZGVzY3JpcHRvciBpcyB0d28g MTYtYml0IHZhbHVlczogb2Zmc2V0IGFuZCBzaXplLCB3aGljaCBkZXNjcmliZSB0aGUKKyAg IGxvY2F0aW9uIG9mIGEgY2h1bmsgb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlv bi4gVGhlIG9mZnNldCBpcworICAgcmVsYXRpdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIGhlYXAu ICBUaGUgc3BlY2lhbCB2YWx1ZSAweGZmZmYsIDB4ZmZmZgorICAgaW5kaWNhdGVzIHRoYXQg dGhlIGhlYXAgaXMgbG9ja2VkLiAgVGhlIGRlc2NyaXB0b3IgaXMgZW5jb2RlZCBpbnRvIGEK KyAgIHNpbmdsZSAzMi1iaXQgaW50ZWdlciBzbyB0aGF0IGl0IG1heSBiZSBlYXNpbHkgYWNj ZXNzZWQgYXRvbWljYWxseS4KKworICAgTWVtb3J5IGlzIGFsbG9jYXRlZCB0byB0aGUgZmly c3QgZnJlZSBjaHVuayB0aGF0IGZpdHMuICBUaGUgZnJlZSBjaGFpbgorICAgaXMgYWx3YXlz IHN0b3JlZCBpbiBvcmRlciBvZiB0aGUgb2Zmc2V0IHRvIGFzc2lzdCBjb2FsZXNjaW5nIGFk amFjZW50CisgICBjaHVua3MuICAqLworCisjaW5jbHVkZSAibGliZ29tcC5oIgorI2luY2x1 ZGUgPHN0ZGxpYi5oPgorCisvKiBUaGVyZSBzaG91bGQgYmUgc29tZSAuc2hhcmVkIHNwYWNl IHJlc2VydmVkIGZvciB1cy4gIFRoZXJlJ3Mgbm8gd2F5IHRvCisgICBleHByZXNzIHRoaXMg bWFnaWMgZXh0ZXJuIHNpemVsZXNzIGFycmF5IGluIEMgc28gdXNlIGFzbS4gICovCithc20g KCIuZXh0ZXJuIC5zaGFyZWQgLnU4IF9fbnZwdHhfbG93bGF0X3Bvb2xbXTtcbiIpOworCitl eHRlcm4gdWludDMyX3QgX19udnB0eF9sb3dsYXRfaGVhcF9yb290IF9fYXR0cmlidXRlX18o KHNoYXJlZCxub2NvbW1vbikpOworCit0eXBlZGVmIHVuaW9uIHsKKyAgdWludDMyX3QgcmF3 OworICBzdHJ1Y3QgeworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICB1aW50MTZfdCBzaXpl OworICB9IGRlc2M7Cit9IGhlYXBkZXNjOworCitzdGF0aWMgdm9pZCAqCitudnB0eF9tZW1z cGFjZV9hbGxvYyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgaWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7 CisgICAgICBjaGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hhcmVkLnU2 NFx0JTAsIF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wpKTsKKwor ICAgICAgLyogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAq LworICAgICAgc2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgLyogQWNxdWlyZSBh IGxvY2sgb24gdGhlIGxvdy1sYXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9v dDsKKyAgICAgIGRvCisJeworCSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgm X19udnB0eF9sb3dsYXRfaGVhcF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVM X0FDUVVJUkUpOworCSAgaWYgKHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFr OworCSAgLyogU3Bpbi4gICovCisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBX YWxrIHRoZSBmcmVlIGNoYWluLiAgKi8KKyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3Qu cmF3fTsKKyAgICAgIHVpbnQzMl90ICpwcmV2X2NodW5rcHRyID0gTlVMTDsKKyAgICAgIHVp bnQzMl90ICpjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVz Yy5vZmZzZXQpOworICAgICAgaGVhcGRlc2Mgb253YXJkX2NoYWluID0ge2NodW5rcHRyWzBd fTsKKyAgICAgIHdoaWxlIChjaHVuay5kZXNjLnNpemUgIT0gMCAmJiAodWludDMyX3Qpc2l6 ZSA+IGNodW5rLmRlc2Muc2l6ZSkKKwl7CisJICBjaHVuay5yYXcgPSBvbndhcmRfY2hhaW4u cmF3OworCSAgcHJldl9jaHVua3B0ciA9IGNodW5rcHRyOworCSAgY2h1bmtwdHIgPSAodWlu dDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKwkgIG9ud2FyZF9j aGFpbi5yYXcgPSBjaHVua3B0clswXTsKKwl9CisKKyAgICAgIHZvaWQgKnJlc3VsdCA9IE5V TEw7CisgICAgICBpZiAoY2h1bmsuZGVzYy5zaXplICE9IDApCisJeworCSAgLyogQWxsb2Nh dGlvbiBzdWNjZXNzZnVsLiAgKi8KKwkgIHJlc3VsdCA9IGNodW5rcHRyOworCisJICAvKiBV cGRhdGUgdGhlIGZyZWUgY2hhaW4uICAqLworCSAgaGVhcGRlc2Mgc3RpbGxmcmVlID0ge2No dW5rLnJhd307CisJICBzdGlsbGZyZWUuZGVzYy5vZmZzZXQgKz0gc2l6ZTsKKwkgIHN0aWxs ZnJlZS5kZXNjLnNpemUgLT0gc2l6ZTsKKwkgIHVpbnQzMl90ICpzdGlsbGZyZWVwdHIgPSAo dWludDMyX3QqKShzaGFyZWRfcG9vbAorCQkJCQkgICAgICAgKyBzdGlsbGZyZWUuZGVzYy5v ZmZzZXQpOworCisJICBpZiAoc3RpbGxmcmVlLmRlc2Muc2l6ZSA9PSAwKQorCSAgICAvKiBU aGUgd2hvbGUgY2h1bmsgd2FzIHVzZWQuICAqLworCSAgICBzdGlsbGZyZWUucmF3ID0gb253 YXJkX2NoYWluLnJhdzsKKwkgIGVsc2UKKwkgICAgLyogVGhlIGNodW5rIHdhcyBzcGxpdCwg c28gcmVzdG9yZSB0aGUgb253YXJkIGNoYWluLiAgKi8KKwkgICAgc3RpbGxmcmVlcHRyWzBd ID0gb253YXJkX2NoYWluLnJhdzsKKworCSAgLyogVGhlIHByZXZpb3VzIGZyZWUgc2xvdCBv ciByb290IG5vdyBwb2ludHMgdG8gc3RpbGxmcmVlLiAgKi8KKwkgIGlmIChwcmV2X2NodW5r cHRyKQorCSAgICBwcmV2X2NodW5rcHRyWzBdID0gc3RpbGxmcmVlLnJhdzsKKwkgIGVsc2UK KwkgICAgcm9vdC5yYXcgPSBzdGlsbGZyZWUucmF3OworCX0KKworICAgICAgLyogVXBkYXRl IHRoZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2suICAqLworICAgICAg X19hdG9taWNfc3RvcmVfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCwgcm9vdC5yYXcs IE1FTU1PREVMX1JFTEVBU0UpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIGVs c2UKKyAgICByZXR1cm4gbWFsbG9jIChzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorbnZw dHhfbWVtc3BhY2VfY2FsbG9jIChvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UsIHNp emVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVtX3NwYWNl KQorICAgIHsKKyAgICAgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gOC1ieXRlIGdyYW51 bGFyaXR5LiAgKi8KKyAgICAgIHNpemUgPSAoc2l6ZSArIDcpICYgfjc7CisKKyAgICAgIHVp bnQ2NF90ICpyZXN1bHQgPSBudnB0eF9tZW1zcGFjZV9hbGxvYyAobWVtc3BhY2UsIHNpemUp OworICAgICAgaWYgKHJlc3VsdCkKKwkvKiBJbmxpbmUgbWVtc2V0IGluIHdoaWNoIHdlIGtu b3cgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDguICAqLworCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCAodW5zaWduZWQpc2l6ZS84OyBpKyspCisJICByZXN1bHRbaV0gPSAwOworCisgICAg ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBjYWxsb2MgKDEs IHNpemUpOworfQorCitzdGF0aWMgdm9pZAorbnZwdHhfbWVtc3BhY2VfZnJlZSAob21wX21l bXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sK KyAgaWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAg ICBjaGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hhcmVkLnU2NFx0JTAs IF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wpKTsKKworICAgICAg LyogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLworICAg ICAgc2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgLyogQWNxdWlyZSBhIGxvY2sg b24gdGhlIGxvdy1sYXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9vdDsKKyAg ICAgIGRvCisJeworCSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgmX19udnB0 eF9sb3dsYXRfaGVhcF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVMX0FDUVVJ UkUpOworCSAgaWYgKHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFrOworCSAg LyogU3Bpbi4gICovCisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBXYWxrIHRo ZSBmcmVlIGNoYWluIHRvIGZpbmQgd2hlcmUgdG8gaW5zZXJ0IGEgbmV3IGVudHJ5LiAgKi8K KyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3QucmF3fSwgcHJldl9jaHVuazsKKyAgICAg IHVpbnQzMl90ICpwcmV2X2NodW5rcHRyID0gTlVMTCwgKnByZXZwcmV2X2NodW5rcHRyID0g TlVMTDsKKyAgICAgIHVpbnQzMl90ICpjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9w b29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOworICAgICAgaGVhcGRlc2Mgb253YXJkX2NoYWlu ID0ge2NodW5rcHRyWzBdfTsKKyAgICAgIHdoaWxlIChjaHVuay5kZXNjLnNpemUgIT0gMCAm JiBhZGRyID4gKHZvaWQqKWNodW5rcHRyKQorCXsKKwkgIHByZXZfY2h1bmsucmF3ID0gY2h1 bmsucmF3OworCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsKKwkgIHByZXZwcmV2 X2NodW5rcHRyID0gcHJldl9jaHVua3B0cjsKKwkgIHByZXZfY2h1bmtwdHIgPSBjaHVua3B0 cjsKKwkgIGNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNj Lm9mZnNldCk7CisJICBvbndhcmRfY2hhaW4ucmF3ID0gY2h1bmtwdHJbMF07CisJfQorCisg ICAgICAvKiBDcmVhdGUgdGhlIG5ldyBjaHVuayBkZXNjcmlwdG9yLiAgKi8KKyAgICAgIGhl YXBkZXNjIG5ld2ZyZWVjaHVuazsKKyAgICAgIG5ld2ZyZWVjaHVuay5kZXNjLm9mZnNldCA9 ICh1aW50MTZfdCkoKHVpbnRwdHJfdClhZGRyCisJCQkJCSAgICAtICh1aW50cHRyX3Qpc2hh cmVkX3Bvb2wpOworICAgICAgbmV3ZnJlZWNodW5rLmRlc2Muc2l6ZSA9ICh1aW50MTZfdClz aXplOworCisgICAgICAvKiBDb2FsZXNjZSBhZGphY2VudCBmcmVlIGNodW5rcy4gICovCisg ICAgICBpZiAobmV3ZnJlZWNodW5rLmRlc2Mub2Zmc2V0ICsgc2l6ZSA9PSBjaHVuay5kZXNj Lm9mZnNldCkKKwl7CisJICAvKiBGcmVlIGNodW5rIGZvbGxvd3MuICAqLworCSAgbmV3ZnJl ZWNodW5rLmRlc2Muc2l6ZSArPSBjaHVuay5kZXNjLnNpemU7CisJICBjaHVuay5yYXcgPSBv bndhcmRfY2hhaW4ucmF3OworCX0KKyAgICAgIGlmIChwcmV2X2NodW5rcHRyKQorCXsKKwkg IGlmIChwcmV2X2NodW5rLmRlc2Mub2Zmc2V0ICsgcHJldl9jaHVuay5kZXNjLnNpemUKKwkg ICAgICA9PSBuZXdmcmVlY2h1bmsuZGVzYy5vZmZzZXQpCisJICAgIHsKKwkgICAgICAvKiBG cmVlIGNodW5rIHByZWNlZGVzLiAgKi8KKwkgICAgICBuZXdmcmVlY2h1bmsuZGVzYy5vZmZz ZXQgPSBwcmV2X2NodW5rLmRlc2Mub2Zmc2V0OworCSAgICAgIG5ld2ZyZWVjaHVuay5kZXNj LnNpemUgKz0gcHJldl9jaHVuay5kZXNjLnNpemU7CisJICAgICAgYWRkciA9IHNoYXJlZF9w b29sICsgcHJldl9jaHVuay5kZXNjLm9mZnNldDsKKwkgICAgICBwcmV2X2NodW5rcHRyID0g cHJldnByZXZfY2h1bmtwdHI7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUg ZnJlZSBjaGFpbiBpbiB0aGUgbmV3IGFuZCBwcmV2aW91cyBjaHVua3MuICAqLworICAgICAg KCh1aW50MzJfdCopYWRkcilbMF0gPSBjaHVuay5yYXc7CisgICAgICBpZiAocHJldl9jaHVu a3B0cikKKwlwcmV2X2NodW5rcHRyWzBdID0gbmV3ZnJlZWNodW5rLnJhdzsKKyAgICAgIGVs c2UKKwlyb290LnJhdyA9IG5ld2ZyZWVjaHVuay5yYXc7CisKKyAgICAgIC8qIFVwZGF0ZSB0 aGUgZnJlZSBjaGFpbiByb290IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAgKi8KKyAgICAgIF9f YXRvbWljX3N0b3JlX24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsIHJvb3QucmF3LCBN RU1NT0RFTF9SRUxFQVNFKTsKKyAgICB9CisgIGVsc2UKKyAgICBmcmVlIChhZGRyKTsKK30K Kworc3RhdGljIHZvaWQgKgorbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAob21wX21lbXNwYWNl X2hhbmRsZV90IG1lbXNwYWNlLCB2b2lkICphZGRyLAorCQkJc2l6ZV90IG9sZHNpemUsIHNp emVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVtX3NwYWNl KQorICAgIHsKKyAgICAgIGNoYXIgKnNoYXJlZF9wb29sOworICAgICAgYXNtICgiY3Z0YS5z aGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRfcG9vbDsiIDogIj1yIihzaGFyZWRfcG9v bCkpOworCisgICAgICAvKiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxh cml0eS4gICovCisgICAgICBvbGRzaXplID0gKG9sZHNpemUgKyA3KSAmIH43OworICAgICAg c2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgaWYgKG9sZHNpemUgPT0gc2l6ZSkK KwlyZXR1cm4gYWRkcjsKKworICAgICAgLyogQWNxdWlyZSBhIGxvY2sgb24gdGhlIGxvdy1s YXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9vdDsKKyAgICAgIGRvCisJewor CSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgmX19udnB0eF9sb3dsYXRfaGVh cF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVMX0FDUVVJUkUpOworCSAgaWYg KHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFrOworCSAgLyogU3Bpbi4gICov CisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBXYWxrIHRoZSBmcmVlIGNoYWlu LiAgKi8KKyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3QucmF3fTsKKyAgICAgIHVpbnQz Ml90ICpwcmV2X2NodW5rcHRyID0gTlVMTDsKKyAgICAgIHVpbnQzMl90ICpjaHVua3B0ciA9 ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOworICAgICAg aGVhcGRlc2Mgb253YXJkX2NoYWluID0ge2NodW5rcHRyWzBdfTsKKyAgICAgIHdoaWxlIChj aHVuay5kZXNjLnNpemUgIT0gMCAmJiAodm9pZCopY2h1bmtwdHIgPCBhZGRyKQorCXsKKwkg IGNodW5rLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJICBwcmV2X2NodW5rcHRyID0gY2h1 bmtwdHI7CisJICBjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsu ZGVzYy5vZmZzZXQpOworCSAgb253YXJkX2NoYWluLnJhdyA9IGNodW5rcHRyWzBdOworCX0K KworICAgICAgdm9pZCAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIGlmIChzaXplIDwgb2xkc2l6 ZSkKKwl7CisJICAvKiBUaGUgbmV3IGFsbG9jYXRpb24gaXMgc21hbGxlciB0aGFuIHRoZSBv bGQ7IHdlIGNhbiBhbHdheXMKKwkgICAgIHNocmluayBhbiBhbGxvY2F0aW9uIGluIHBsYWNl LiAgKi8KKwkgIHJlc3VsdCA9IGFkZHI7CisKKwkgIHVpbnQzMl90ICpub3dmcmVlcHRyID0g KHVpbnQzMl90KikoYWRkciArIHNpemUpOworCisJICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hh aW4uICAqLworCSAgaGVhcGRlc2Mgbm93ZnJlZTsKKwkgIG5vd2ZyZWUuZGVzYy5vZmZzZXQg PSAoY2hhciopbm93ZnJlZXB0ciAtIHNoYXJlZF9wb29sOworCSAgbm93ZnJlZS5kZXNjLnNp emUgPSBvbGRzaXplIC0gc2l6ZTsKKworCSAgaWYgKG5vd2ZyZWUuZGVzYy5vZmZzZXQgKyBz aXplID09IGNodW5rLmRlc2Mub2Zmc2V0KQorCSAgICB7CisJICAgICAgLyogQ29hbGVzY2Ug Zm9sbG93aW5nIGZyZWUgY2h1bmsuICAqLworCSAgICAgIG5vd2ZyZWUuZGVzYy5zaXplICs9 IGNodW5rLmRlc2Muc2l6ZTsKKwkgICAgICBub3dmcmVlcHRyWzBdID0gb253YXJkX2NoYWlu LnJhdzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBub3dmcmVlcHRyWzBdID0gY2h1bmsucmF3 OworCisJICAvKiBUaGUgcHJldmlvdXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0 byBub3dmcmVlLiAgKi8KKwkgIGlmIChwcmV2X2NodW5rcHRyKQorCSAgICBwcmV2X2NodW5r cHRyWzBdID0gbm93ZnJlZS5yYXc7CisJICBlbHNlCisJICAgIHJvb3QucmF3ID0gbm93ZnJl ZS5yYXc7CisJfQorICAgICAgZWxzZSBpZiAoY2h1bmsuZGVzYy5zaXplICE9IDAKKwkgICAg ICAgJiYgKGNoYXIgKilhZGRyICsgb2xkc2l6ZSA9PSAoY2hhciAqKWNodW5rcHRyCisJICAg ICAgICYmIGNodW5rLmRlc2Muc2l6ZSA+PSBzaXplLW9sZHNpemUpCisJeworCSAgLyogVGhl IG5ldyBhbGxvY2F0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBvbGQsIGFuZCB3ZSBmb3VuZCBh CisJICAgICBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayByaWdodCBhZnRlciB0aGUgZXhpc3Rp bmcgYmxvY2ssCisJICAgICBzbyB3ZSBleHRlbmQgaW50byB0aGF0IHNwYWNlLiAgKi8KKwkg IHJlc3VsdCA9IGFkZHI7CisKKwkgIHVpbnQxNl90IGRlbHRhID0gc2l6ZS1vbGRzaXplOwor CisJICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4uICAqLworCSAgaGVhcGRlc2Mgc3RpbGxm cmVlID0ge2NodW5rLnJhd307CisJICBzdGlsbGZyZWUuZGVzYy5vZmZzZXQgKz0gZGVsdGE7 CisJICBzdGlsbGZyZWUuZGVzYy5zaXplIC09IGRlbHRhOworCSAgdWludDMyX3QgKnN0aWxs ZnJlZXB0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sCisJCQkJCSAgICAgICArIHN0aWxs ZnJlZS5kZXNjLm9mZnNldCk7CisKKwkgIGlmIChzdGlsbGZyZWUuZGVzYy5zaXplID09IDAp CisJICAgIC8qIFRoZSB3aG9sZSBjaHVuayB3YXMgdXNlZC4gICovCisJICAgIHN0aWxsZnJl ZS5yYXcgPSBvbndhcmRfY2hhaW4ucmF3OworCSAgZWxzZQorCSAgICAvKiBUaGUgY2h1bmsg d2FzIHNwbGl0LCBzbyByZXN0b3JlIHRoZSBvbndhcmQgY2hhaW4uICAqLworCSAgICBzdGls bGZyZWVwdHJbMF0gPSBvbndhcmRfY2hhaW4ucmF3OworCisJICAvKiBUaGUgcHJldmlvdXMg ZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0byBzdGlsbGZyZWUuICAqLworCSAgaWYg KHByZXZfY2h1bmtwdHIpCisJICAgIHByZXZfY2h1bmtwdHJbMF0gPSBzdGlsbGZyZWUucmF3 OworCSAgZWxzZQorCSAgICByb290LnJhdyA9IHN0aWxsZnJlZS5yYXc7CisJfQorICAgICAg LyogRWxzZSByZWFsbG9jIGluLXBsYWNlIGhhcyBmYWlsZWQgYW5kIHJlc3VsdCByZW1haW5z IE5VTEwuICAqLworCisgICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4gcm9vdCBhbmQg cmVsZWFzZSB0aGUgbG9jay4gICovCisgICAgICBfX2F0b21pY19zdG9yZV9uICgmX19udnB0 eF9sb3dsYXRfaGVhcF9yb290LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFTRSk7CisKKyAg ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKwl7CisJICAvKiBUaGUgYWxsb2NhdGlvbiBjb3Vs ZCBub3QgYmUgZXh0ZW5kZWQgaW4gcGxhY2UsIHNvIHdlIHNpbXBseQorCSAgICAgYWxsb2Nh dGUgZnJlc2ggbWVtb3J5IGFuZCBtb3ZlIHRoZSBkYXRhLiAgSWYgd2UgY2FuJ3QgYWxsb2Nh dGUKKwkgICAgIGZyb20gbG93LWxhdGVuY3kgbWVtb3J5IHRoZW4gd2UgbGVhdmUgdGhlIG9y aWdpbmFsIGFsbG9hY3Rpb24KKwkgICAgIGludGFjdCBhbmQgcmV0dXJuIE5VTEwuCisJICAg ICBXZSBjb3VsZCBkbyBhIGZhbGwtYmFjayB0byBtYWluIG1lbW9yeSwgYnV0IHdlIGRvbid0 IGtub3cgd2hhdAorCSAgICAgdGhlIGZhbGwtYmFjayB0cmFpdCBzYWlkIHRvIGRvLiAgKi8K KwkgIHJlc3VsdCA9IG52cHR4X21lbXNwYWNlX2FsbG9jIChtZW1zcGFjZSwgc2l6ZSk7CisJ ICBpZiAocmVzdWx0ICE9IE5VTEwpCisJICAgIHsKKwkgICAgICAvKiBJbmxpbmUgbWVtY3B5 IGluIHdoaWNoIHdlIGtub3cgb2xkc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDguICAqLworCSAg ICAgIHVpbnQ2NF90ICpmcm9tID0gYWRkciwgKnRvID0gcmVzdWx0OworCSAgICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCAodW5zaWduZWQpb2xkc2l6ZS84OyBpKyspCisJCXRvW2ld ID0gZnJvbVtpXTsKKworCSAgICAgIG52cHR4X21lbXNwYWNlX2ZyZWUgKG1lbXNwYWNlLCBh ZGRyLCBvbGRzaXplKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg fQorICBlbHNlCisgICAgcmV0dXJuIHJlYWxsb2MgKGFkZHIsIHNpemUpOworfQorCisjZGVm aW5lIE1FTVNQQUNFX0FMTE9DKE1FTVNQQUNFLCBTSVpFKSBcCisgIG52cHR4X21lbXNwYWNl X2FsbG9jIChNRU1TUEFDRSwgU0laRSkKKyNkZWZpbmUgTUVNU1BBQ0VfQ0FMTE9DKE1FTVNQ QUNFLCBTSVpFKSBcCisgIG52cHR4X21lbXNwYWNlX2NhbGxvYyAoTUVNU1BBQ0UsIFNJWkUp CisjZGVmaW5lIE1FTVNQQUNFX1JFQUxMT0MoTUVNU1BBQ0UsIEFERFIsIE9MRFNJWkUsIFNJ WkUpIFwKKyAgbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAoTUVNU1BBQ0UsIEFERFIsIE9MRFNJ WkUsIFNJWkUpCisjZGVmaW5lIE1FTVNQQUNFX0ZSRUUoTUVNU1BBQ0UsIEFERFIsIFNJWkUp IFwKKyAgbnZwdHhfbWVtc3BhY2VfZnJlZSAoTUVNU1BBQ0UsIEFERFIsIFNJWkUpCisKKyNp bmNsdWRlICIuLi8uLi9hbGxvY2F0b3IuYyIKZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29uZmln L252cHR4L3RlYW0uYyBiL2xpYmdvbXAvY29uZmlnL252cHR4L3RlYW0uYwppbmRleCA2OTIz NDE2ZmI0ZS4uZjQzZDYzZGY1N2QgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmlnL252cHR4 L3RlYW0uYworKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC90ZWFtLmMKQEAgLTMzLDkgKzMz LDEzIEBACiAKIHN0cnVjdCBnb21wX3RocmVhZCAqbnZwdHhfdGhycyBfX2F0dHJpYnV0ZV9f KChzaGFyZWQsbm9jb21tb24pKTsKIGludCBfX2dvbXBfdGVhbV9udW0gX19hdHRyaWJ1dGVf Xygoc2hhcmVkLG5vY29tbW9uKSk7Cit1aW50MzJfdCBfX252cHR4X2xvd2xhdF9oZWFwX3Jv b3QgX19hdHRyaWJ1dGVfXygoc2hhcmVkLG5vY29tbW9uKSk7CiAKIHN0YXRpYyB2b2lkIGdv bXBfdGhyZWFkX3N0YXJ0IChzdHJ1Y3QgZ29tcF90aHJlYWRfcG9vbCAqKTsKIAorLyogVGhl cmUgc2hvdWxkIGJlIHNvbWUgLnNoYXJlZCBzcGFjZSByZXNlcnZlZCBmb3IgdXMuICBUaGVy ZSdzIG5vIHdheSB0bworICAgZXhwcmVzcyB0aGlzIG1hZ2ljIGV4dGVybiBzaXplbGVzcyBh cnJheSBpbiBDIHNvIHVzZSBhc20uICAqLworYXNtICgiLmV4dGVybiAuc2hhcmVkIC51OCBf X252cHR4X2xvd2xhdF9wb29sW107XG4iKTsKIAogLyogVGhpcyBleHRlcm5hbGx5IHZpc2li bGUgZnVuY3Rpb24gaGFuZGxlcyB0YXJnZXQgcmVnaW9uIGVudHJ5LiAgSXQKICAgIHNldHMg dXAgYSBwZXItdGVhbSB0aHJlYWQgcG9vbCBhbmQgdHJhbnNmZXJzIGNvbnRyb2wgYnkgY2Fs bGluZyBGTiAoRk5fREFUQSkKQEAgLTYzLDYgKzY3LDI3IEBAIGdvbXBfbnZwdHhfbWFpbiAo dm9pZCAoKmZuKSAodm9pZCAqKSwgdm9pZCAqZm5fZGF0YSkKICAgICAgIG52cHR4X3RocnMg PSBhbGxvY2EgKG50aWRzICogc2l6ZW9mICgqbnZwdHhfdGhycykpOwogICAgICAgbWVtc2V0 IChudnB0eF90aHJzLCAwLCBudGlkcyAqIHNpemVvZiAoKm52cHR4X3RocnMpKTsKIAorICAg ICAgLyogRmluZCB0aGUgbG93LWxhdGVuY3kgaGVhcCBkZXRhaWxzIC4uLi4gICovCisgICAg ICB1aW50MzJfdCAqc2hhcmVkX3Bvb2w7CisgICAgICB1aW50MzJfdCBzaGFyZWRfcG9vbF9z aXplOworICAgICAgYXNtICgiY3Z0YS5zaGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRf cG9vbDsiIDogIj1yIihzaGFyZWRfcG9vbCkpOworICAgICAgYXNtICgibW92LnUzMlx0JTAs ICUlZHluYW1pY19zbWVtX3NpemU7XG4iCisJICAgOiAiPXIiKHNoYXJlZF9wb29sX3NpemUp KTsKKworICAgICAgLyogLi4uIGFuZCBpbml0aWFsaXplIGl0IHdpdGggYW4gZW1wdHkgZnJl ZS1jaGFpbi4gICovCisgICAgICB1bmlvbiB7CisJdWludDMyX3QgcmF3OworCXN0cnVjdCB7 CisJICB1aW50MTZfdCBvZmZzZXQ7CisJICB1aW50MTZfdCBzaXplOworCX0gZGVzYzsKKyAg ICAgIH0gcm9vdDsKKyAgICAgIHJvb3QuZGVzYy5vZmZzZXQgPSAwOwkJIC8qIFRoZSBmaXJz dCBieXRlIGlzIGZyZWUuICAqLworICAgICAgcm9vdC5kZXNjLnNpemUgPSBzaGFyZWRfcG9v bF9zaXplOyAvKiBUaGUgd2hvbGUgc3BhY2UgaXMgZnJlZS4gICovCisgICAgICBzaGFyZWRf cG9vbFswXSA9IDA7CQkgLyogVGVybWluYXRlIGZyZWUgY2hhaW4uICAqLworICAgICAgX19h dG9taWNfc3RvcmVfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCwgcm9vdC5yYXcsIE1F TU1PREVMX1JFTEVBU0UpOworCisgICAgICAvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgcG9v bC4gICovCiAgICAgICBzdHJ1Y3QgZ29tcF90aHJlYWRfcG9vbCAqcG9vbCA9IGFsbG9jYSAo c2l6ZW9mICgqcG9vbCkpOwogICAgICAgcG9vbC0+dGhyZWFkcyA9IGFsbG9jYSAobnRpZHMg KiBzaXplb2YgKCpwb29sLT50aHJlYWRzKSk7CiAgICAgICBmb3IgKHRpZCA9IDA7IHRpZCA8 IG50aWRzOyB0aWQrKykKZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0 eC5jIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKaW5kZXggYjRmMGE4NGQ3N2Eu LjFiOWE1ZTk1YzA3IDEwMDY0NAotLS0gYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHgu YworKysgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYwpAQCAtMzMwLDYgKzMzMCwx MSBAQCBzdHJ1Y3QgcHR4X2RldmljZQogCiBzdGF0aWMgc3RydWN0IHB0eF9kZXZpY2UgKipw dHhfZGV2aWNlczsKIAorLyogT3Blbk1QIGtlcm5lbHMgcmVzZXJ2ZSBhIHNtYWxsIGFtb3Vu dCBvZiAiLnNoYXJlZCIgc3BhY2UgZm9yIHVzZSBieQorICAgb21wX2FsbG9jLiAgVGhlIHNp emUgaXMgY29uZmlndXJlZCB1c2luZyBHT01QX05WUFRYX0xPV0xBVF9QT09MLCBidXQgdGhl CisgICBkZWZhdWx0IGlzIHNldCBoZXJlLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb3dsYXRf cG9vbF9zaXplID0gOCoxMDI0OworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudnB0eF90aHJl YWQgKgogbnZwdHhfdGhyZWFkICh2b2lkKQogewpAQCAtMTE5Niw2ICsxMjAxLDIyIEBAIEdP TVBfT0ZGTE9BRF9pbml0X2RldmljZSAoaW50IG4pCiAgICAgICBpbnN0YW50aWF0ZWRfZGV2 aWNlcysrOwogICAgIH0KIAorICBjb25zdCBjaGFyICp2YXJfbmFtZSA9ICJHT01QX05WUFRY X0xPV0xBVF9QT09MIjsKKyAgY29uc3QgY2hhciAqZW52X3ZhciA9IHNlY3VyZV9nZXRlbnYg KHZhcl9uYW1lKTsKKyAgbm90aWZ5X3ZhciAodmFyX25hbWUsIGVudl92YXIpOworCisgIGlm IChlbnZfdmFyICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciAqZW5kcHRyOworICAgICAg dW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsIChlbnZfdmFyLCAmZW5kcHRyLCAxMCk7Cisg ICAgICBpZiAoZW5kcHRyID09IE5VTEwgfHwgKmVuZHB0ciAhPSAnXDAnCisJICB8fCBlcnJu byA9PSBFUkFOR0UgfHwgZXJybm8gPT0gRUlOVkFMCisJICB8fCB2YWwgPiBVSU5UX01BWCkK KwlHT01QX1BMVUdJTl9lcnJvciAoIkVycm9yIHBhcnNpbmcgJXMiLCB2YXJfbmFtZSk7Cisg ICAgICBlbHNlCisJbG93bGF0X3Bvb2xfc2l6ZSA9IHZhbDsKKyAgICB9CisKICAgcHRocmVh ZF9tdXRleF91bmxvY2sgKCZwdHhfZGV2X2xvY2spOwogCiAgIHJldHVybiBkZXYgIT0gTlVM TDsKQEAgLTIwMjEsNyArMjA0Miw3IEBAIEdPTVBfT0ZGTE9BRF9ydW4gKGludCBvcmQsIHZv aWQgKnRndF9mbiwgdm9pZCAqdGd0X3ZhcnMsIHZvaWQgKiphcmdzKQogCQkgICAgICIgWyh0 ZWFtczogJXUpLCAxLCAxXSBbKGxhbmVzOiAzMiksICh0aHJlYWRzOiAldSksIDFdXG4iLAog CQkgICAgIF9fRlVOQ1RJT05fXywgZm5fbmFtZSwgdGVhbXMsIHRocmVhZHMpOwogICByID0g Q1VEQV9DQUxMX05PQ0hFQ0sgKGN1TGF1bmNoS2VybmVsLCBmdW5jdGlvbiwgdGVhbXMsIDEs IDEsCi0JCQkgMzIsIHRocmVhZHMsIDEsIDAsIE5VTEwsIE5VTEwsIGNvbmZpZyk7CisJCQkg MzIsIHRocmVhZHMsIDEsIGxvd2xhdF9wb29sX3NpemUsIE5VTEwsIE5VTEwsIGNvbmZpZyk7 CiAgIGlmIChyICE9IENVREFfU1VDQ0VTUykKICAgICBHT01QX1BMVUdJTl9mYXRhbCAoImN1 TGF1bmNoS2VybmVsIGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKIApkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMS5jIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNDk2OGU0YzgzZAotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTEuYwpAQCAtMCwwICsx LDU2IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKKy8qIFRlc3QgdGhhdCBvbXBfYWxsb2Mg cmV0dXJucyB1c2FibGUgbWVtb3J5LiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCisjcHJh Z21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAordGVzdCAoaW50 IG4sIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9t cCB0YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisgIHsKKyAgICBpbnQgKmE7 CisgICAgYSA9IChpbnQgKikgb21wX2FsbG9jKG4qc2l6ZW9mKGludCksIGFsbG9jYXRvcik7 CisKKyAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgaSsrKQorICAgICAgYVtpXSA9IGk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47 IGkrKykKKyAgICAgIGlmIChhW2ldICE9IGkpCisJeworCSAgX19idWlsdGluX3ByaW50ZiAo ImRhdGEgbWlzbWF0Y2ggYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOwor CX0KKworICAgIG9tcF9mcmVlKGEsIGFsbG9jYXRvcik7CisgIH0KK30KKworaW50CittYWlu ICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAg dGVzdCAoMTAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbGFy Z2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsK KyAgdGVzdCAoMTAsIG9tcF9oaWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf bG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2Nncm91cF9tZW1fYWxsb2Mp OworICB0ZXN0ICgxMCwgb21wX3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf dGhyZWFkX21lbV9hbGxvYyk7CisKKyAgLy8gTGFyZ2VyIHRoYW4gbG93LWxhdGVuY3kgbWVt b3J5IGxpbWl0CisgIHRlc3QgKDEwMDAwMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAg dGVzdCAoMTAwMDAwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAw MCwgb21wX2NvbnN0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2hpZ2hfYndf bWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOwor ICB0ZXN0ICgxMDAwMDAsIG9tcF9jZ3JvdXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAw LCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfdGhyZWFkX21l bV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0yLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmMvYWxsb2NhdG9ycy0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmE5OGYxYjRjMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKworLyogVGVzdCBjb25jdXJyZW50IGFuZCByZXBlYXRlZCBhbGxvY2F0 aW9ucy4gICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMg ZHluYW1pY19hbGxvY2F0b3JzCisKK3ZvaWQKK3Rlc3QgKGludCBuLCBvbXBfYWxsb2NhdG9y X2hhbmRsZV90IGFsbG9jYXRvcikKK3sKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCh0bzpu KSBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgaW50ICoqYTsKKyAgICBhID0gKGludCAq Kikgb21wX2FsbG9jKG4qc2l6ZW9mKGludCopLCBhbGxvY2F0b3IpOworCisgICAgI3ByYWdt YSBvbXAgcGFyYWxsZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisg ICAgICB7CisJLypVc2UgMTB4IHRvIGVuc3VyZSB3ZSBkbyBhY3RpdmF0ZSBsb3ctbGF0ZW5j eSBmYWxsLWJhY2suICAqLworCWFbaV0gPSBvbXBfYWxsb2Moc2l6ZW9mKGludCkqMTAsIGFs bG9jYXRvcik7CisJYVtpXVswXSA9IGk7CisgICAgICB9CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChhW2ldWzBdICE9IGkpCisJeworCSAgX19idWls dGluX3ByaW50ZiAoImRhdGEgbWlzbWF0Y2ggYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGlu X2Fib3J0ICgpOworCX0KKworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgorICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgb21wX2ZyZWUoYVtpXSwgYWxsb2Nh dG9yKTsKKworICAgIG9tcF9mcmVlIChhLCBhbGxvY2F0b3IpOworICB9Cit9CisKK2ludAor bWFpbiAoKQoreworICAvLyBTbWFsbGVyIHRoYW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0 CisgIHRlc3QgKDEwLCBvbXBfZGVmYXVsdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21w X2xhcmdlX2NhcF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2NvbnN0X21lbV9hbGxv Yyk7CisgIHRlc3QgKDEwLCBvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwg b21wX2xvd19sYXRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9jZ3JvdXBfbWVtX2Fs bG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwg b21wX3RocmVhZF9tZW1fYWxsb2MpOworCisgIC8vIExhcmdlciB0aGFuIGxvdy1sYXRlbmN5 IG1lbW9yeSBsaW1pdCAob24gYWdncmVnYXRlKQorICB0ZXN0ICgxMDAwLCBvbXBfZGVmYXVs dF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwMDAsIG9tcF9jb25zdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBv bXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfbG93X2xhdF9tZW1f YWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfY2dyb3VwX21lbV9hbGxvYyk7CisgIHRlc3Qg KDEwMDAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfdGhyZWFk X21lbV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0zLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmMvYWxsb2NhdG9ycy0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjQ1NTE0YzJhMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMy5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHsg ZGctZG8gcnVuIH0gKi8KKworLyogU3RyZXNzLXRlc3Qgb21wX2FsbG9jL29tcF9tYWxsb2Mg dW5kZXIgY29uY3VycmVuY3kuICAqLworCisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMg ZHluYW1pY19hbGxvY2F0b3JzCisKKyNkZWZpbmUgTiAxMDAwCisKK3ZvaWQKK3Rlc3QgKG9t cF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9tcCB0YXJn ZXQgbWFwKHRvOmFsbG9jYXRvcikKKyAgeworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZv cgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBOOyBqKyspCisJeworCSAgaW50ICpwID0gb21wX2FsbG9jKHNpemVvZihpbnQp LCBhbGxvY2F0b3IpOworCSAgb21wX2ZyZWUocCwgYWxsb2NhdG9yKTsKKwl9CisgIH0KK30K KworaW50CittYWluICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1v cnkgbGltaXQKKyAgdGVzdCAob21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAob21w X2xhcmdlX2NhcF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfY29uc3RfbWVtX2FsbG9jKTsK KyAgdGVzdCAob21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX2xvd19sYXRf bWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0IChv bXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX3RocmVhZF9tZW1fYWxsb2MpOwor CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jL2FsbG9jYXRvcnMtNC5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRvcnMtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZmE2 YWExNjI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy9hbGxvY2F0b3JzLTQuYwpAQCAtMCwwICsxLDE5NiBAQAorLyogeyBkZy1kbyBydW4gfSAq LworCisvKiBUZXN0IHRoYXQgbG93LWxhdGVuY3kgZnJlZSBjaGFpbnMgYXJlIHNvdW5kLiAg Ki8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPG9tcC5oPgorCisjcHJhZ21h IG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAorY2hlY2sgKGludCBj b25kLCBjb25zdCBjaGFyICptc2cpCit7CisgIGlmICghY29uZCkKKyAgICB7CisgICAgICBf X2J1aWx0aW5fcHJpbnRmICgiJXNcbiIsIG1zZyk7CisgICAgICBfX2J1aWx0aW5fYWJvcnQg KCk7CisgICAgfQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0 CisgIHsKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIGdldCAqaXMqIGxvdy1s YXRlbmN5IHdpdGggYSBudWxsLWZhbGxiYWNrLiAgKi8KKyAgICBvbXBfYWxsb2N0cmFpdF90 IHRyYWl0c1sxXQorICAgICAgPSB7IHsgb21wX2F0a19mYWxsYmFjaywgb21wX2F0dl9udWxs X2ZiIH0gfTsKKyAgICBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGxvd2xhdCA9IG9tcF9pbml0 X2FsbG9jYXRvciAob21wX2xvd19sYXRfbWVtX3NwYWNlLAorCQkJCQkJCTEsIHRyYWl0cyk7 CisKKyAgICBpbnQgc2l6ZSA9IDQ7CisKKyAgICBjaGFyICphID0gb21wX2FsbG9jKHNpemUs IGxvd2xhdCk7CisgICAgY2hhciAqYiA9IG9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAg IGNoYXIgKmMgPSBvbXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpkID0gb21w X2FsbG9jKHNpemUsIGxvd2xhdCk7CisKKyAgICAvKiBUaGVyZSBhcmUgaGVhZGVycyBhbmQg cGFkZGluZyB0byBhY2NvdW50IGZvci4gICovCisgICAgaW50IHNpemUyID0gc2l6ZSArIChi LWEpOworICAgIGludCBzaXplMyA9IHNpemUgKyAoYy1hKTsKKyAgICBpbnQgc2l6ZTQgPSBz aXplICsgKGQtYSkgKyAxMDA7IC8qIFJhbmRvbSBsYXJnZXIgYW1vdW50LiAgKi8KKworICAg IGNoZWNrIChhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCAmJiBkICE9IE5V TEwsCisJICAgIm9tcF9hbGxvYyByZXR1cm5lZCBOVUxMXG4iKTsKKworICAgIG9tcF9mcmVl KGEsIGxvd2xhdCk7CisgICAgY2hhciAqcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsK KyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCByZXVzZSBmaXJzdCBjaHVu ayIpOworCisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChz aXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHJl dXNlIHNlY29uZCBjaHVuayIpOworCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKyAgICBw ID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxv Y2F0ZSBkaWQgbm90IHJldXNlIHRoaXJkIGNodW5rIik7CisKKyAgICBvbXBfZnJlZShhLCBs b3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAo c2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qg Y29hbGVzY2UgZmlyc3QgdHdvIGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0 KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09 IGEsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgxKSIpOworICAgIHAg PSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9j YXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpIik7CisKKyAgICBvbXBfZnJlZShi LCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBu b3QgY29hbGVzY2UgbWlkZGxlIHR3byBjaHVua3MiKTsKKworICAgIG9tcF9mcmVlKHAsIGxv d2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDEpIik7Cisg ICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAi YWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpIik7CisKKyAgICBvbXBf ZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgcCA9IG9t cF9hbGxvYyAoc2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRl IGRpZCBub3QgY29hbGVzY2UgZmlyc3QgdHdvIGNodW5rcywgcmV2ZXJzZSBmcmVlIik7CisK KyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxv d2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmly c3QgY2h1bmsgKDEpLCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXpl LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0 IGZpcnN0IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShjLCBs b3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAo c2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qg Y29hbGVzY2Ugc2Vjb25kIHR3byBjaHVua3MsIHJldmVyc2UgZnJlZSIpOworCisgICAgb21w X2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOwor ICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVu ayAoMSksIHJldmVyc2UgZnJlZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25k IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShhLCBsb3dsYXQp OworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsK KyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBh LCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0aHJlZSBjaHVua3MiKTsKKwor ICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93 bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJz dCBjaHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAg IGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgy KSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gYywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDMpIik7CisKKyAg ICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAg b21wX2ZyZWUoZCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0 KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBsYXN0 IHRocmVlIGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0g b21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0 ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9j IChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90 IHNwbGl0IHNlY29uZCBjaHVuayAoMikiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBs b3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNl Y29uZCBjaHVuayAoMykiKTsKKworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21w X2ZyZWUoYiwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShhLCBsb3dsYXQpOworICAgIHAgPSBv bXBfYWxsb2MgKHNpemUzLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0 ZSBkaWQgbm90IGNvYWxlc2NlIGZpcnN0IHRocmVlIGNodW5rcywgcmV2ZXJzZSBmcmVlIik7 CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUs IGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQg Zmlyc3QgY2h1bmsgKDEpLCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChz aXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNw bGl0IGZpcnN0IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlkIG5v dCBzcGxpdCBmaXJzdCBjaHVuayAoMyksIHJldmVyc2UgZnJlZSIpOworCisgICAgb21wX2Zy ZWUoZCwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShjLCBsb3dsYXQpOworICAgIG9tcF9mcmVl KGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAg Y2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2Ugc2Vjb25kIHRocmVl IGNodW5rcywgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOwor ICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwg ImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSwgcmV2ZXJzZSBmcmVl Iik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9 PSBjLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpLCByZXZlcnNl IGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNr IChwID09IGQsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMyksIHJl dmVyc2UgZnJlZSIpOworCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKyAgICBvbXBfZnJl ZShhLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9h bGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRp ZCBub3QgY29hbGVzY2UgZmlyc3QgdGhyZWUgY2h1bmtzLCBtaXhlZCBmcmVlIik7CisKKyAg ICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3Qg Y2h1bmsgKDEpLCBtaXhlZCBmcmVlIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93 bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJz dCBjaHVuayAoMiksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBs b3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZp cnN0IGNodW5rICgzKSwgbWl4ZWQgZnJlZSIpOworCisgICAgb21wX2ZyZWUoZCwgbG93bGF0 KTsKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7 CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0g YiwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2Ugc2Vjb25kIHRocmVlIGNodW5rcywgbWl4 ZWQgZnJlZSIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2Fs bG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQg bm90IHNwbGl0IHNlY29uZCBjaHVuayAoMSksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21w X2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBk aWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMiksIG1peGVkIGZyZWUiKTsKKyAgICBwID0g b21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJhbGxvY2F0 ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMyksIG1peGVkIGZyZWUiKTsKKworICAg IG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBv bXBfZnJlZShjLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGQsIGxvd2xhdCk7CisgICAgcCA9 IG9tcF9hbGxvYyhzaXplNCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2Nh dGUgZGlkIG5vdCBjb2FsZXNjZSBhbGwgbWVtb3J5Iik7CisgIH0KKworcmV0dXJuIDA7Cit9 CisKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3Jz LTUuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTY5NDAxMGNmMWYKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy01 LmMKQEAgLTAsMCArMSw2MyBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBUZXN0IGNh bGxvYyB3aXRoIG9tcF9hbGxvYy4gICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI3ByYWdt YSBvbXAgcmVxdWlyZXMgZHluYW1pY19hbGxvY2F0b3JzCisKK3ZvaWQKK3Rlc3QgKGludCBu LCBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGFsbG9jYXRvcikKK3sKKyAgI3ByYWdtYSBvbXAg dGFyZ2V0IG1hcCh0bzpuKSBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgaW50ICphOwor ICAgIGEgPSAoaW50ICopIG9tcF9jYWxsb2Mobiwgc2l6ZW9mKGludCksIGFsbG9jYXRvcik7 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChhW2ldICE9 IDApCisJeworCSAgX19idWlsdGluX3ByaW50ZiAoIm1lbW9yeSBub3QgemVyb2VkIGF0ICVp XG4iLCBpKTsKKwkgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKwl9CisKKyAgICAjcHJhZ21hIG9t cCBwYXJhbGxlbAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgYVtp XSA9IGk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChh W2ldICE9IGkpCisJeworCSAgX19idWlsdGluX3ByaW50ZiAoImRhdGEgbWlzbWF0Y2ggYXQg JWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOworCX0KKworICAgIG9tcF9mcmVl KGEsIGFsbG9jYXRvcik7CisgIH0KK30KKworaW50CittYWluICgpCit7CisgIC8vIFNtYWxs ZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAsIG9tcF9kZWZh dWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9o aWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2Mp OworICB0ZXN0ICgxMCwgb21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21w X3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7 CisKKyAgLy8gTGFyZ2VyIHRoYW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0CisgIHRlc3Qg KDEwMDAwMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBf bGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2NvbnN0X21lbV9h bGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVz dCAoMTAwMDAwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9t cF9jZ3JvdXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfcHRlYW1fbWVtX2Fs bG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7CisKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxs b2NhdG9ycy02LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy02 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwYmY3MzA5NWVm Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRvcnMtNi5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKKy8q IFRlc3QgdGhhdCBsb3ctbGF0ZW5jeSByZWFsbG9jIGFuZCBmcmVlIGNoYWlucyBhcmUgc291 bmQuICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8b21wLmg+CisKKyNw cmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycworCit2b2lkCitjaGVjayAo aW50IGNvbmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgaWYgKCFjb25kKQorICAgIHsKKyAg ICAgIF9fYnVpbHRpbl9wcmludGYgKCIlc1xuIiwgbXNnKTsKKyAgICAgIF9fYnVpbHRpbl9h Ym9ydCAoKTsKKyAgICB9Cit9CisKK2ludAorbWFpbiAoKQoreworICAjcHJhZ21hIG9tcCB0 YXJnZXQKKyAgeworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgZ2V0ICppcyog bG93LWxhdGVuY3kgd2l0aCBhIG51bGwtZmFsbGJhY2suICAqLworICAgIG9tcF9hbGxvY3Ry YWl0X3QgdHJhaXRzWzFdCisgICAgICA9IHsgeyBvbXBfYXRrX2ZhbGxiYWNrLCBvbXBfYXR2 X251bGxfZmIgfSB9OworICAgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgbG93bGF0ID0gb21w X2luaXRfYWxsb2NhdG9yIChvbXBfbG93X2xhdF9tZW1fc3BhY2UsCisJCQkJCQkJMSwgdHJh aXRzKTsKKworICAgIGludCBzaXplID0gMTY7CisKKyAgICBjaGFyICphID0gKGNoYXIgKilv bXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpiID0gKGNoYXIgKilvbXBfYWxs b2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpjID0gKGNoYXIgKilvbXBfYWxsb2Moc2l6 ZSwgbG93bGF0KTsKKyAgICBjaGFyICpkID0gKGNoYXIgKilvbXBfYWxsb2Moc2l6ZSwgbG93 bGF0KTsKKworICAgIC8qIFRoZXJlIGFyZSBoZWFkZXJzIGFuZCBwYWRkaW5nIHRvIGFjY291 bnQgZm9yLiAgKi8KKyAgICBpbnQgc2l6ZTIgPSBzaXplICsgKGItYSk7CisgICAgaW50IHNp emUzID0gc2l6ZSArIChjLWEpOworICAgIGludCBzaXplNCA9IHNpemUgKyAoZC1hKSArIDEw MDsgLyogUmFuZG9tIGxhcmdlciBhbW91bnQuICAqLworCisgICAgY2hlY2sgKGEgIT0gTlVM TCAmJiBiICE9IE5VTEwgJiYgYyAhPSBOVUxMICYmIGQgIT0gTlVMTCwKKwkgICAib21wX2Fs bG9jIHJldHVybmVkIE5VTExcbiIpOworCisgICAgY2hhciAqcCA9IG9tcF9yZWFsbG9jIChi LCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2Mg ZGlkIG5vdCByZXVzZSBzYW1lIHNpemUgY2h1bmssIG5vIHNwYWNlIGFmdGVyIik7CisKKyAg ICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgbm8g c3BhY2UgYWZ0ZXIiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZSwgbG93bGF0 LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ug b3JpZ2luYWwgc2l6ZSBjaHVuaywgbm8gc3BhY2UgYWZ0ZXIiKTsKKworICAgIC8qIE1ha2Ug c3BhY2UgYWZ0ZXIgYi4gICovCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKworICAgIHAg PSBvbXBfcmVhbGxvYyAoYiwgc2l6ZSwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBzaXplIGNodW5rIik7CisKKyAg ICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuayIpOwor CisgICAgcCA9IG9tcF9yZWFsbG9jIChiLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAg Y2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNo dW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUrOCwgbG93bGF0LCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgZXh0ZW5kIGluIHBs YWNlIGJ5IGEgbGl0dGxlIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUyLCBs b3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCBl eHRlbmQgaW50byB3aG9sZSBuZXh0IGNodW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2Mg KGIsIHNpemUzLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgIT0gYiwgInJlYWxs b2MgZGlkIG5vdCBtb3ZlIGIgZWxzZXdoZXJlIik7CisgICAgb21wX2ZyZWUgKHAsIGxvd2xh dCk7CisKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZSwgbG93bGF0LCBsb3dsYXQp OworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBzaXpl IGNodW5rLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9IG9tcF9yZWFsbG9jIChhLCBz aXplLTgsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAicmVhbGxvYyBk aWQgbm90IHJldXNlIHNtYWxsZXIgY2h1bmssIGZpcnN0IHBvc2l0aW9uIik7CisKKyAgICBw ID0gb21wX3JlYWxsb2MgKGEsIHNpemUsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBhLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIG9yaWdpbmFsIHNpemUgY2h1bmssIGZp cnN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGEsIHNpemUrOCwgbG93 bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgZXh0 ZW5kIGluIHBsYWNlIGJ5IGEgbGl0dGxlLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9 IG9tcF9yZWFsbG9jIChhLCBzaXplMywgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGEsICJyZWFsbG9jIGRpZCBub3QgZXh0ZW5kIGludG8gd2hvbGUgbmV4dCBjaHVuaywg Zmlyc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZTQsIGxv d2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCAhPSBhLCAicmVhbGxvYyBkaWQgbm90IG1v dmUgYSBlbHNld2hlcmUsIGZpcnN0IHBvc2l0aW9uIik7CisgICAgb21wX2ZyZWUgKHAsIGxv d2xhdCk7CisKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoZCwgc2l6ZSwgbG93bGF0LCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBz aXplIGNodW5rLCBsYXN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQs IHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9j IGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgbGFzdCBwb3NpdGlvbiIpOworCisgICAg cCA9IG9tcF9yZWFsbG9jIChkLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gZCwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNodW5rLCBs YXN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQsIHNpemUrOCwgbG93 bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9jIGRpZCBub3QgZXh0 ZW5kIGluIHBsYWNlIGJ5IGQgbGl0dGxlLCBsYXN0IHBvc2l0aW9uIik7CisKKyAgICAvKiBM YXJnZXIgdGhhbiBsb3cgbGF0ZW5jeSBtZW1vcnkuICAqLworICAgIHAgPSBvbXBfcmVhbGxv YyhkLCAxMDAwMDAwMDAsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBOVUxM LCAicmVhbGxvYyBkaWQgbm90IGZhaWwgb24gT09NIik7CisgIH0KKworcmV0dXJuIDA7Cit9 CisK --------------GAOuBwTbAb3fPRdfJVcV1SwY--