From unknown Tue Jun 17 01:49:15 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19358: [PATCH 1/3] grep: use Aho-Corasick algorithm to search multiple fixed words Resent-From: Norihiro Tanaka Original-Sender: "Debbugs-submit" Resent-CC: bug-grep@gnu.org Resent-Date: Fri, 12 Dec 2014 15:59:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 19358 X-GNU-PR-Package: grep X-GNU-PR-Keywords: patch To: 19358@debbugs.gnu.org X-Debbugs-Original-To: Received: via spool by submit@debbugs.gnu.org id=B.141839992121493 (code B ref -1); Fri, 12 Dec 2014 15:59:01 +0000 Received: (at submit) by debbugs.gnu.org; 12 Dec 2014 15:58:41 +0000 Received: from localhost ([127.0.0.1]:44101 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XzSc3-0005aV-4n for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:41 -0500 Received: from eggs.gnu.org ([208.118.235.92]:56432) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XzSbz-0005aE-Q7 for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XzSbm-0002zL-Pl for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:30 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:43243) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbm-0002z9-LH for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:22 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbf-0007KD-6y for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XzSbV-0002vb-EE for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:15 -0500 Received: from mailgw04.kcn.ne.jp ([61.86.7.211]:57111) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbU-0002us-II for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:05 -0500 Received: from imp03 (mailgw7.kcn.ne.jp [61.86.15.238]) by mailgw04.kcn.ne.jp (Postfix) with ESMTP id E6A446C11F3 for ; Sat, 13 Dec 2014 00:58:01 +0900 (JST) Received: from mail07.kcn.ne.jp ([61.86.6.186]) by imp03 with bizsmtp id Sfy11p00M40oyB901fy15C; Sat, 13 Dec 2014 00:58:01 +0900 X-OrgRCPT: bug-grep@gnu.org Received: from [10.120.1.53] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) by mail07.kcn.ne.jp (Postfix) with ESMTPA id 6A1F1D5002B for ; Sat, 13 Dec 2014 00:58:01 +0900 (JST) Date: Sat, 13 Dec 2014 00:58:02 +0900 From: Norihiro Tanaka Message-Id: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_548B0F93000000008CED_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hi, Searching multiple fixed words, grep uses Commentz-Walter algorithm, but it is very slow for a worst case e.g. as following. It is O(m*n). - input: yes `printf %040d` | head -10000000 - word1: x0000000000000000000 - word2: x This change uses Aho-Corasick algorithm instead of Commentz-Walter algorithm to search multiple fixed words. It uses a function to build tries which has been already defined for Commentz-Walter algorithm in kwset.c and which has been already high quality. I see 7x speed-up even for a typical case on Fedora 21 with a 3.2GHz i5 by this change. First without this change (best-of-5 trials): find /usr/share/doc/ -type f | LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null real 11.37 user 11.03 sys 0.24 Next with this change (best-of-5 trials): find /usr/share/doc/ -type f | LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null real 1.49 user 1.31 sys 0.15 I also wrote two additional patches. Second, If search multiple fixed words, grep immediately returns without longest match if not needed. Without this change, grep tries longest match for multiple words even if not needed. Third, use memchr2 for two patterns of a character. Thanks, Norihiro --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0001-grep-use-Aho-Corasick-algorithm-to-search-multiple-f.patch" Content-Disposition: attachment; filename="0001-grep-use-Aho-Corasick-algorithm-to-search-multiple-f.patch" Content-Transfer-Encoding: base64 RnJvbSA3NTVmMzlkNGMyZTI4MjJkNGMyNDFlMzU3ZDI1OGU1YjI1YmEwZDA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE0OjQ3OjQ1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzNd IGdyZXA6IHVzZSBBaG8tQ29yYXNpY2sgYWxnb3JpdGhtIHRvIHNlYXJjaCBtdWx0aXBsZSBmaXhl ZAogd29yZHMKClNlYXJjaGluZyBtdWx0aXBsZSBmaXhlZCB3b3JkcywgZ3JlcCB1c2VzIENvbW1l bnR6LVdhbHRlciBhbGdvcml0aG0sIGJ1dAppdCBpcyB2ZXJ5IHNsb3cgZm9yIGEgd29yc3QgY2Fz ZSBlLmcuIGFzIGZvbGxvd2luZy4gIEl0IGlzIE8obSpuKS4KCiAgLSBpbnB1dDogeWVzIGBwcmlu dGYgJTA0MGRgIHwgaGVhZCAtMTAwMDAwMDAKICAtIHdvcmQxOiB4MDAwMDAwMDAwMDAwMDAwMDAw MAogIC0gd29yZDI6IHgKClRoaXMgY2hhbmdlIHVzZXMgQWhvLUNvcmFzaWNrIGFsZ29yaXRobSBp bnN0ZWFkIG9mIENvbW1lbnR6LVdhbHRlcgphbGdvcml0aG0gdG8gc2VhcmNoIG11bHRpcGxlIGZp eGVkIHdvcmRzLiAgSXQgdXNlcyBhIGZ1bmN0aW9uIHRvIGJ1aWxkCnRyaWVzIHdoaWNoIGhhcyBi ZWVuIGFscmVhZHkgZGVmaW5lZCBmb3IgQ29tbWVudHotV2FsdGVyIGFsZ29yaXRobSBpbgprd3Nl dC5jIGFuZCB3aGljaCBoYXMgYmVlbiBhbHJlYWR5IGhpZ2ggcXVhbGl0eS4KCkkgc2VlIDd4IHNw ZWVkLXVwIGV2ZW4gZm9yIGEgdHlwaWNhbCBjYXNlIG9uIEZlZG9yYSAyMSB3aXRoIGEgMy4yR0h6 IGk1CmJ5IHRoaXMgY2hhbmdlLgoKRmlyc3Qgd2l0aG91dCB0aGlzIGNoYW5nZSAoYmVzdC1vZi01 IHRyaWFscyk6CgogICAgZmluZCAvdXNyL3NoYXJlL2RvYy8gLXR5cGUgZiB8CiAgICBMQ19BTEw9 QyB0aW1lIC1wIHhhcmdzLnNoIHNyYy9ncmVwIC1GZiAvdXNyL3NoYXJlL2RpY3QvbGludXgud29y ZHMgPi9kZXYvbnVsbAogICAgICAgIHJlYWwgMTEuMzcgICAgICB1c2VyIDExLjAzICAgICAgc3lz IDAuMjQKCk5leHQgd2l0aCB0aGlzIGNoYW5nZSAoYmVzdC1vZi01IHRyaWFscyk6CgogICAgZmlu ZCAvdXNyL3NoYXJlL2RvYy8gLXR5cGUgZiB8CiAgICBMQ19BTEw9QyAgdGltZSAtcCB4YXJncy5z aCBzcmMvZ3JlcCAtRmYgL3Vzci9zaGFyZS9kaWN0L2xpbnV4LndvcmRzID4vZGV2L251bGwKICAg ICAgICByZWFsIDEuNDkgICAgICAgdXNlciAxLjMxICAgICAgIHN5cyAwLjE1CgoqIHNyYy9rd3Nl dC5jIChzdHJ1Y3Qga3dzZXQpOiBBZGQgYSBuZXcgbWVtYmVyICdtb2RlJy4KKGt3c2FsbG9jKTog VXNlIGl0LgpBbGwgY2FsbGVycyBhcmUgY2hhbmdlZC4KKGt3c2luY3IpOiBVc2luZyBBaG8tQ29y YXNpY2sgYWxnb3JpdGhtLCBidWlsZCB0cmllcyBpbiBub3JtYWwgb3JkZXIuCihhY2V4ZWNfdHJh bnMsIGFjZXhlYyk6IEFkZCBhIG5ldyBmdW5jdGlvbi4KKGt3c2V4ZWMpOiBVc2UgaXQuCiogc3Jj L2t3c2V0LmggKGt3c2FsbG9jKTogVXBkYXRlIGEgcHJvdG90eXBlLgoqIE5FV1MgKEltcHJvdmVt ZW50cyk6IE1lbnRpb24gaXQuCi0tLQogTkVXUyAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2t3 c2V0LmMgICAgICAgfCAzMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tCiBzcmMva3dzZXQuaCAgICAgICB8ICAgMyArLQogc3JjL3NlYXJjaHV0 aWxzLmMgfCAgIDQgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMjgyIGluc2VydGlvbnMoKyksIDU2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDYxMzhjNGUuLjY1MzIx M2EgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMiw2ICsyLDExIEBAIEdOVSBncmVw IE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGluZSAtKi0K IAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA/Lj8gKD8/Pz8tPz8tPz8pIFs/XQog CisqKiBJbXByb3ZlbWVudHMKKworICBncmVwIC1GIGlzIG5vdyB0eXBpY2FsbHkgNyB0aW1lcyBm YXN0ZXIgZm9yIGEgbG90IG9mIHdvcmRzLiAgVGhlCisgIGltcHJvdmVtZW50IHJlcGxhY2UgQ29t bWVudHotV2FsdGVyIGFsZ29yaXRobSB3aGljaCBoYXMgYmVlbiB1c2VkIGZvcgorICBhIGxvbmcg dGltZSB0byBBaG8tQ29yYXNpY2sgYWxnb3JpdGhtLgogCiAqIE5vdGV3b3J0aHkgY2hhbmdlcyBp biByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCiAKZGlmZiAtLWdpdCBhL3NyYy9r d3NldC5jIGIvc3JjL2t3c2V0LmMKaW5kZXggNmQyMTg5My4uOTU4NWYwOCAxMDA2NDQKLS0tIGEv c3JjL2t3c2V0LmMKKysrIGIvc3JjL2t3c2V0LmMKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2luY2x1 ZGUgImt3c2V0LmgiCiAKLSNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+ CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC02Nyw3ICs2 Niw3IEBAIHN0cnVjdCB0cmVlCiAgIGNoYXIgYmFsYW5jZTsJCQkvKiBEaWZmZXJlbmNlIGluIGRl cHRocyBvZiBzdWJ0cmVlcy4gKi8KIH07CiAKLS8qIE5vZGUgb2YgYSB0cmllIHJlcHJlc2VudGlu ZyBhIHNldCBvZiByZXZlcnNlZCBrZXl3b3Jkcy4gKi8KKy8qIE5vZGUgb2YgYSB0cmllIHJlcHJl c2VudGluZyBhIHNldCBvZiBrZXl3b3Jkcy4gKi8KIHN0cnVjdCB0cmllCiB7CiAgIHNpemVfdCBh Y2NlcHRpbmc7CQkvKiBXb3JkIGluZGV4IG9mIGFjY2VwdGVkIHdvcmQsIG9yIHplcm8uICovCkBA IC0xMTEsNiArMTEwLDEzIEBAIHN0cnVjdCBrd3NldAogICAgICBtb3JlIHN1Y2ggbWF0Y2hlczsg ZS5nLiwgR3JlZWsgaGFzIHRocmVlIHNpZ21hIGNoYXJhY3RlcnMgdGhhdAogICAgICBhbGwgbWF0 Y2ggd2hlbiBjYXNlLWZvbGRpbmcuICAqLwogICBpbnQgZ2MxaGVscDsKKworICAvKiBJZiB0cnVl LCBwcmVmZXIgQWhvLUNvcmFzaWNrIGFsZ29yaXRobSB0byBCZWF0ZSBDb21tZW50ei1XYWx0ZXIK KyAgICAgYWxnb3JpdGhtIGluIG11bHRpcGxlIHdvcmRzLiAgKi8KKyAgYm9vbCByZXZlcnNlOwor CisgIC8qIGt3c2V4ZWMoKSBpbXBsZW1lbnRhdGlvbi4gICovCisgIHNpemVfdCAoKmt3c2V4ZWMp IChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOwogfTsK IAogLyogVXNlIFRSQU5TIHRvIHRyYW5zbGl0ZXJhdGUgQy4gIEEgbnVsbCBUUkFOUyBkb2VzIG5v IHRyYW5zbGl0ZXJhdGlvbi4gICovCkBAIC0xMjAsMTAgKzEyNiwxNCBAQCB0ciAoY2hhciBjb25z dCAqdHJhbnMsIGNoYXIgYykKICAgcmV0dXJuIHRyYW5zID8gdHJhbnNbVShjKV0gOiBjOwogfQog CitzdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0 cnVjdCBrd3NtYXRjaCAqKTsKK3N0YXRpYyBzaXplX3QgY3dleGVjIChrd3NldF90LCBjaGFyIGNv bnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOworc3RhdGljIHNpemVfdCBibWV4ZWMg KGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKik7CisKIC8q IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEga2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcg YW4gb3BhcXVlCiAgICBwb2ludGVyIHRvIGl0LiAgKi8KIGt3c2V0X3QKLWt3c2FsbG9jIChjaGFy IGNvbnN0ICp0cmFucykKK2t3c2FsbG9jIChjaGFyIGNvbnN0ICp0cmFucywgYm9vbCBjb25zdCBy ZXZlcnNlKQogewogICBzdHJ1Y3Qga3dzZXQgKmt3c2V0ID0geG1hbGxvYyAoc2l6ZW9mICprd3Nl dCk7CiAKQEAgLTE0MSw2ICsxNTEsMTEgQEAga3dzYWxsb2MgKGNoYXIgY29uc3QgKnRyYW5zKQog ICBrd3NldC0+bWF4ZCA9IC0xOwogICBrd3NldC0+dGFyZ2V0ID0gTlVMTDsKICAga3dzZXQtPnRy YW5zID0gdHJhbnM7CisgIGt3c2V0LT5yZXZlcnNlID0gcmV2ZXJzZTsKKyAgaWYgKHJldmVyc2Up CisgICAga3dzZXQtPmt3c2V4ZWMgPSBjd2V4ZWM7CisgIGVsc2UKKyAgICBrd3NldC0+a3dzZXhl YyA9IGFjZXhlYzsKIAogICByZXR1cm4ga3dzZXQ7CiB9CkBAIC0xNTYsMTMgKzE3MSwxNCBAQCBr d3NpbmNyIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuKQogICBz dHJ1Y3QgdHJpZSAqdHJpZSA9IGt3c2V0LT50cmllOwogICBjaGFyIGNvbnN0ICp0cmFucyA9IGt3 c2V0LT50cmFuczsKIAotICB0ZXh0ICs9IGxlbjsKKyAgaWYgKGt3c2V0LT5yZXZlcnNlKQorICAg IHRleHQgKz0gbGVuOwogCi0gIC8qIERlc2NlbmQgdGhlIHRyaWUgKGJ1aWx0IG9mIHJldmVyc2Vk IGtleXdvcmRzKSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLAorICAvKiBEZXNjZW5kIHRoZSB0cmll IChidWlsdCBvZiBrZXl3b3JkcykgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciwKICAgICAgaW5zdGFs bGluZyBuZXcgbm9kZXMgd2hlbiBuZWNlc3NhcnkuICovCiAgIHdoaWxlIChsZW4tLSkKICAgICB7 Ci0gICAgICB1bnNpZ25lZCBjaGFyIHVjID0gKi0tdGV4dDsKKyAgICAgIHVuc2lnbmVkIGNoYXIg dWMgPSBrd3NldC0+cmV2ZXJzZSA/ICotLXRleHQgOiAqdGV4dCsrOwogICAgICAgdW5zaWduZWQg Y2hhciBsYWJlbCA9IHRyYW5zID8gdHJhbnNbdWNdIDogdWM7CiAKICAgICAgIC8qIERlc2NlbmQg dGhlIHRyZWUgb2Ygb3V0Z29pbmcgbGlua3MgZm9yIHRoaXMgdHJpZSBub2RlLApAQCAtMzExLDE1 ICszMjcsMTUgQEAgZW5xdWV1ZSAoc3RydWN0IHRyZWUgKnRyZWUsIHN0cnVjdCB0cmllICoqbGFz dCkKICAgIHdlbGwgYXMgYSBsYXN0IHJlc29ydCBmYWlsdXJlIG5vZGUuICovCiBzdGF0aWMgdm9p ZAogdHJlZWZhaWxzIChzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwgc3RydWN0IHRyaWUgY29uc3Qg KmZhaWwsCi0gICAgICAgICAgIHN0cnVjdCB0cmllICpyZWNvdXJzZSkKKyAgICAgICAgICAgc3Ry dWN0IHRyaWUgKnJlY291cnNlLCBib29sIHJldmVyc2UpCiB7CiAgIHN0cnVjdCB0cmVlICpsaW5r OwogCiAgIGlmICghdHJlZSkKICAgICByZXR1cm47CiAKLSAgdHJlZWZhaWxzKHRyZWUtPmxsaW5r LCBmYWlsLCByZWNvdXJzZSk7Ci0gIHRyZWVmYWlscyh0cmVlLT5ybGluaywgZmFpbCwgcmVjb3Vy c2UpOworICB0cmVlZmFpbHModHJlZS0+bGxpbmssIGZhaWwsIHJlY291cnNlLCByZXZlcnNlKTsK KyAgdHJlZWZhaWxzKHRyZWUtPnJsaW5rLCBmYWlsLCByZWNvdXJzZSwgcmV2ZXJzZSk7CiAKICAg LyogRmluZCwgaW4gdGhlIGNoYWluIG9mIGZhaWxzIGdvaW5nIGJhY2sgdG8gdGhlIHJvb3QsIHRo ZSBmaXJzdAogICAgICBub2RlIHRoYXQgaGFzIGEgZGVzY2VuZGFudCBvbiB0aGUgY3VycmVudCBs YWJlbC4gKi8KQEAgLTMzNCw2ICszNTAsOCBAQCB0cmVlZmFpbHMgKHN0cnVjdCB0cmVlIGNvbnN0 ICp0cmVlLCBzdHJ1Y3QgdHJpZSBjb25zdCAqZmFpbCwKICAgICAgIGlmIChsaW5rKQogICAgICAg ICB7CiAgICAgICAgICAgdHJlZS0+dHJpZS0+ZmFpbCA9IGxpbmstPnRyaWU7CisgICAgICAgICAg aWYgKCFyZXZlcnNlICYmIGxpbmstPnRyaWUtPmFjY2VwdGluZyAmJiAhdHJlZS0+dHJpZS0+YWNj ZXB0aW5nKQorICAgICAgICAgICAgdHJlZS0+dHJpZS0+YWNjZXB0aW5nID0gLTE7CiAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICBmYWlsID0gZmFpbC0+ZmFpbDsKQEAgLTM5Niw2 ICs0MTQsMzQgQEAga3dzcHJlcCAoa3dzZXRfdCBrd3NldCkKICAgaW50IGk7CiAgIHVuc2lnbmVk IGNoYXIgZGVsdGFidWZbTkNIQVJdOwogICB1bnNpZ25lZCBjaGFyICpkZWx0YSA9IHRyYW5zID8g ZGVsdGFidWYgOiBrd3NldC0+ZGVsdGE7CisgIHN0cnVjdCB0cmllICpjdXJyLCAqbGFzdDsKKwor ICBpZiAoa3dzZXQtPndvcmRzID09IDEpCisgICAgeworICAgICAgaWYgKCFrd3NldC0+cmV2ZXJz ZSkKKyAgICAgICAgeworICAgICAgICAgIGt3c2V0X3QgbmV3X2t3c2V0OworCisgICAgICAgICAg LyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRhbnRzIGluIHRoZSBsZXZlbCBvcmRlciBx dWV1ZS4gICovCisgICAgICAgICAgZm9yIChjdXJyID0gbGFzdCA9IGt3c2V0LT50cmllOyBjdXJy OyBjdXJyID0gY3Vyci0+bmV4dCkKKyAgICAgICAgICAgICBlbnF1ZXVlIChjdXJyLT5saW5rcywg Jmxhc3QpOworCisgICAgICAgICAgLyogTG9va2luZyBmb3IganVzdCBvbmUgc3RyaW5nLiAgRXh0 cmFjdCBpdCBmcm9tIHRoZSB0cmllLiAqLworICAgICAgICAgIGt3c2V0LT50YXJnZXQgPSBvYnN0 YWNrX2FsbG9jICgma3dzZXQtPm9ic3RhY2ssIGt3c2V0LT5taW5kKTsKKyAgICAgICAgICBmb3Ig KGkgPSAwLCBjdXJyID0ga3dzZXQtPnRyaWU7IGkgPCBrd3NldC0+bWluZDsgKytpKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBrd3NldC0+dGFyZ2V0W2ldID0gY3Vyci0+bGlua3MtPmxh YmVsOworICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgIG5ld19rd3NldCA9IGt3c2FsbG9jIChrd3NldC0+dHJhbnMsIHRydWUpOworICAg ICAgICAgIGt3c2luY3IgKG5ld19rd3NldCwga3dzZXQtPnRhcmdldCwga3dzZXQtPm1pbmQpOwor ICAgICAgICAgIG9ic3RhY2tfZnJlZSAoJmt3c2V0LT5vYnN0YWNrLCBOVUxMKTsKKyAgICAgICAg ICAqa3dzZXQgPSAqbmV3X2t3c2V0OworICAgICAgICAgIGZyZWUgKG5ld19rd3NldCk7CisgICAg ICAgIH0KKyAgICAgIGt3c2V0LT5rd3NleGVjID0gYm1leGVjOworICAgIH0KIAogICAvKiBJbml0 aWFsIHZhbHVlcyBmb3IgdGhlIGRlbHRhIHRhYmxlOyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIuICBU aGUKICAgICAgZGVsdGEgZW50cnkgZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHRoZSBzbWFsbGVz dCBkZXB0aCBvZiBhbnkKQEAgLTQwNCw0OSArNDUwLDU0IEBAIGt3c3ByZXAgKGt3c2V0X3Qga3dz ZXQpCiAKICAgLyogVHJhdmVyc2UgdGhlIG5vZGVzIG9mIHRoZSB0cmllIGluIGxldmVsIG9yZGVy LCBzaW11bHRhbmVvdXNseQogICAgICBjb21wdXRpbmcgdGhlIGRlbHRhIHRhYmxlLCBmYWlsdXJl IGZ1bmN0aW9uLCBhbmQgc2hpZnQgZnVuY3Rpb24uICAqLwotICBzdHJ1Y3QgdHJpZSAqY3Vyciwg Kmxhc3Q7CiAgIGZvciAoY3VyciA9IGxhc3QgPSBrd3NldC0+dHJpZTsgY3VycjsgY3VyciA9IGN1 cnItPm5leHQpCiAgICAgewogICAgICAgLyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRh bnRzIGluIHRoZSBsZXZlbCBvcmRlciBxdWV1ZS4gICovCiAgICAgICBlbnF1ZXVlIChjdXJyLT5s aW5rcywgJmxhc3QpOwogCi0gICAgICBjdXJyLT5zaGlmdCA9IGt3c2V0LT5taW5kOwotICAgICAg Y3Vyci0+bWF4c2hpZnQgPSBrd3NldC0+bWluZDsKLQogICAgICAgLyogVXBkYXRlIHRoZSBkZWx0 YSB0YWJsZSBmb3IgdGhlIGRlc2NlbmRhbnRzIG9mIHRoaXMgbm9kZS4gICovCiAgICAgICB0cmVl ZGVsdGEgKGN1cnItPmxpbmtzLCBjdXJyLT5kZXB0aCwgZGVsdGEpOwogCiAgICAgICAvKiBDb21w dXRlIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2Rl LiAgKi8KLSAgICAgIHRyZWVmYWlscyAoY3Vyci0+bGlua3MsIGN1cnItPmZhaWwsIGt3c2V0LT50 cmllKTsKKyAgICAgIHRyZWVmYWlscyAoY3Vyci0+bGlua3MsIGN1cnItPmZhaWwsIGt3c2V0LT50 cmllLCBrd3NldC0+cmV2ZXJzZSk7CiAKLSAgICAgIC8qIFVwZGF0ZSB0aGUgc2hpZnRzIGF0IGVh Y2ggbm9kZSBpbiB0aGUgY3VycmVudCBub2RlJ3MgY2hhaW4KLSAgICAgICAgIG9mIGZhaWxzIGJh Y2sgdG8gdGhlIHJvb3QuICAqLwotICAgICAgc3RydWN0IHRyaWUgKmZhaWw7Ci0gICAgICBmb3Ig KGZhaWwgPSBjdXJyLT5mYWlsOyBmYWlsOyBmYWlsID0gZmFpbC0+ZmFpbCkKKyAgICAgIGlmIChr d3NldC0+cmV2ZXJzZSkKICAgICAgICAgewotICAgICAgICAgIC8qIElmIHRoZSBjdXJyZW50IG5v ZGUgaGFzIHNvbWUgb3V0Z29pbmcgZWRnZSB0aGF0IHRoZSBmYWlsCi0gICAgICAgICAgICAgZG9l c24ndCwgdGhlbiB0aGUgc2hpZnQgYXQgdGhlIGZhaWwgc2hvdWxkIGJlIG5vIGxhcmdlcgotICAg ICAgICAgICAgIHRoYW4gdGhlIGRpZmZlcmVuY2Ugb2YgdGhlaXIgZGVwdGhzLiAgKi8KLSAgICAg ICAgICBpZiAoIWhhc2V2ZXJ5IChmYWlsLT5saW5rcywgY3Vyci0+bGlua3MpKQotICAgICAgICAg ICAgaWYgKGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGggPCBmYWlsLT5zaGlmdCkKLSAgICAgICAg ICAgICAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOwotCi0gICAgICAg ICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQg dGhlCi0gICAgICAgICAgICAgZmFpbCBhbmQgaXRzIGRlc2NlbmRhbnRzIHNob3VsZCBiZSBubyBs YXJnZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4g ICovCi0gICAgICAgICAgaWYgKGN1cnItPmFjY2VwdGluZyAmJiBmYWlsLT5tYXhzaGlmdCA+IGN1 cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGgpCi0gICAgICAgICAgICBmYWlsLT5tYXhzaGlmdCA9IGN1 cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGg7CisgICAgICAgICAgY3Vyci0+c2hpZnQgPSBrd3NldC0+ bWluZDsKKyAgICAgICAgICBjdXJyLT5tYXhzaGlmdCA9IGt3c2V0LT5taW5kOworCisgICAgICAg ICAgLyogVXBkYXRlIHRoZSBzaGlmdHMgYXQgZWFjaCBub2RlIGluIHRoZSBjdXJyZW50IG5vZGUn cyBjaGFpbgorICAgICAgICAgICAgIG9mIGZhaWxzIGJhY2sgdG8gdGhlIHJvb3QuICAqLworICAg ICAgICAgIHN0cnVjdCB0cmllICpmYWlsOworICAgICAgICAgIGZvciAoZmFpbCA9IGN1cnItPmZh aWw7IGZhaWw7IGZhaWwgPSBmYWlsLT5mYWlsKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGhhcyBzb21lIG91dGdvaW5nIGVkZ2UgdGhhdCB0aGUg ZmFpbAorICAgICAgICAgICAgICAgICBkb2Vzbid0LCB0aGVuIHRoZSBzaGlmdCBhdCB0aGUgZmFp bCBzaG91bGQgYmUgbm8gbGFyZ2VyCisgICAgICAgICAgICAgICAgIHRoYW4gdGhlIGRpZmZlcmVu Y2Ugb2YgdGhlaXIgZGVwdGhzLiAgKi8KKyAgICAgICAgICAgICAgaWYgKCFoYXNldmVyeSAoZmFp bC0+bGlua3MsIGN1cnItPmxpbmtzKSkKKyAgICAgICAgICAgICAgICBpZiAoY3Vyci0+ZGVwdGgg LSBmYWlsLT5kZXB0aCA8IGZhaWwtPnNoaWZ0KQorICAgICAgICAgICAgICAgICAgZmFpbC0+c2hp ZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCisgICAgICAgICAgICAgIC8qIElmIHRo ZSBjdXJyZW50IG5vZGUgaXMgYWNjZXB0aW5nIHRoZW4gdGhlIHNoaWZ0IGF0IHRoZQorICAgICAg ICAgICAgICAgICBmYWlsIGFuZCBpdHMgZGVzY2VuZGFudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0 aGFuIHRoZQorICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gICov CisgICAgICAgICAgICAgIGlmIChjdXJyLT5hY2NlcHRpbmcgJiYgZmFpbC0+bWF4c2hpZnQgPiBj dXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoKQorICAgICAgICAgICAgICAgIGZhaWwtPm1heHNoaWZ0 ID0gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog ICAgIH0KIAotICAvKiBUcmF2ZXJzZSB0aGUgdHJpZSBpbiBsZXZlbCBvcmRlciBhZ2FpbiwgZml4 aW5nIHVwIGFsbCBub2RlcyB3aG9zZQotICAgICBzaGlmdCBleGNlZWRzIHRoZWlyIGluaGVyaXRl ZCBtYXhzaGlmdC4gICovCi0gIGZvciAoY3VyciA9IGt3c2V0LT50cmllLT5uZXh0OyBjdXJyOyBj dXJyID0gY3Vyci0+bmV4dCkKKyAgaWYgKGt3c2V0LT5yZXZlcnNlKQogICAgIHsKLSAgICAgIGlm IChjdXJyLT5tYXhzaGlmdCA+IGN1cnItPnBhcmVudC0+bWF4c2hpZnQpCi0gICAgICAgIGN1cnIt Pm1heHNoaWZ0ID0gY3Vyci0+cGFyZW50LT5tYXhzaGlmdDsKLSAgICAgIGlmIChjdXJyLT5zaGlm dCA+IGN1cnItPm1heHNoaWZ0KQotICAgICAgICBjdXJyLT5zaGlmdCA9IGN1cnItPm1heHNoaWZ0 OworICAgICAgLyogVHJhdmVyc2UgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIgYWdhaW4sIGZpeGlu ZyB1cCBhbGwgbm9kZXMgd2hvc2UKKyAgICAgICAgIHNoaWZ0IGV4Y2VlZHMgdGhlaXIgaW5oZXJp dGVkIG1heHNoaWZ0LiAgKi8KKyAgICAgIGZvciAoY3VyciA9IGt3c2V0LT50cmllLT5uZXh0OyBj dXJyOyBjdXJyID0gY3Vyci0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChjdXJyLT5t YXhzaGlmdCA+IGN1cnItPnBhcmVudC0+bWF4c2hpZnQpCisgICAgICAgICAgICBjdXJyLT5tYXhz aGlmdCA9IGN1cnItPnBhcmVudC0+bWF4c2hpZnQ7CisgICAgICAgICAgaWYgKGN1cnItPnNoaWZ0 ID4gY3Vyci0+bWF4c2hpZnQpCisgICAgICAgICAgICBjdXJyLT5zaGlmdCA9IGN1cnItPm1heHNo aWZ0OworICAgICAgICB9CiAgICAgfQogCiAgIC8qIENyZWF0ZSBhIHZlY3RvciwgaW5kZXhlZCBi eSBjaGFyYWN0ZXIgY29kZSwgb2YgdGhlIG91dGdvaW5nIGxpbmtzCkBAIC00NzAsNiArNTIxLDcg QEAga3dzcHJlcCAoa3dzZXRfdCBrd3NldCkKICAgICAgICAgICBrd3NldC0+dGFyZ2V0W2ldID0g Y3Vyci0+bGlua3MtPmxhYmVsOwogICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgICAg ICB9CisKICAgICAgIC8qIExvb2tpbmcgZm9yIHRoZSBkZWx0YTIgc2hpZnQgdGhhdCB3ZSBtaWdo dCBtYWtlIGFmdGVyIGEKICAgICAgICAgIGJhY2t3YXJkcyBtYXRjaCBoYXMgZmFpbGVkLiAgRXh0 cmFjdCBpdCBmcm9tIHRoZSB0cmllLiAgKi8KICAgICAgIGlmIChrd3NldC0+bWluZCA+IDEpCkBA IC02NjksMTYgKzcyMSwyNiBAQCBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29u c3QgKnRleHQsIHNpemVfdCBzaXplKQogCiAvKiBGYXN0IEJveWVyLU1vb3JlIHNlYXJjaC4gICov CiBzdGF0aWMgc2l6ZV90Ci1ibWV4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQs IHNpemVfdCBzaXplKQorYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBz aXplX3Qgc2l6ZSwKKyAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKIHsKICAgLyog SGVscCB0aGUgY29tcGlsZXIgaW5saW5lIGJtZXhlY190cmFucyBpbiB0d28gd2F5cywgZGVwZW5k aW5nIG9uCiAgICAgIHdoZXRoZXIga3dzZXQtPnRyYW5zIGlzIG51bGwuICAqLwotICByZXR1cm4g KGt3c2V0LT50cmFucworICBzaXplX3QgcmV0ID0gKGt3c2V0LT50cmFucwogICAgICAgICAgID8g Ym1leGVjX3RyYW5zIChrd3NldCwgdGV4dCwgc2l6ZSkKICAgICAgICAgICA6IGJtZXhlY190cmFu cyAoa3dzZXQsIHRleHQsIHNpemUpKTsKKworICBpZiAocmV0ICE9IChzaXplX3QpIC0xKQorICAg IHsKKyAgICAgICBrd3NtYXRjaC0+aW5kZXggPSAwOworICAgICAgIGt3c21hdGNoLT5vZmZzZXRb MF0gPSByZXQ7CisgICAgICAga3dzbWF0Y2gtPnNpemVbMF0gPSBrd3NldC0+bWluZDsKKyAgICB9 CisKKyAgcmV0dXJuIHJldDsKIH0KIAotLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaC4g Ki8KKy8qIEhhaXJ5IG11bHRpcGxlIHN0cmluZyBzZWFyY2ggd2l0aCBDb21tZW50ei1XYWx0ZXIg YWxnb3JpdGhtLiAgKi8KIHN0YXRpYyBzaXplX3QgX0dMX0FSR19OT05OVUxMICgoNCkpCiBjd2V4 ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBr d3NtYXRjaCAqa3dzbWF0Y2gpCiB7CkBAIC04MzQsNiArODk2LDE3NiBAQCBjd2V4ZWMgKGt3c2V0 X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBrd3NtYXRjaCAq a3dzbWF0Y2gpCiAgIHJldHVybiBtY2ggLSB0ZXh0OwogfQogCisvKiBIYWlyeSBtdWx0aXBsZSBz dHJpbmcgc2VhcmNoIHdpdGggQWhvLUNvcmFzaWNrIGFsZ29yaXRobS4KKyAgIChpbmxpbmFibGUg dmVyc2lvbikgICovCitzdGF0aWMgaW5saW5lIHNpemVfdCBfR0xfQVJHX05PTk5VTEwgKCg0KSkK K2FjZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxl biwKKyAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKK3sKKyAgc3RydWN0 IHRyaWUgKiBjb25zdCAqbmV4dDsKKyAgc3RydWN0IHRyaWUgY29uc3QgKnRyaWUsICphY2NlcHQ7 CisgIGNoYXIgY29uc3QgKnRwLCAqbGVmdCwgKmxpbTsKKyAgdW5zaWduZWQgY2hhciBjOworICBz dHJ1Y3QgdHJlZSBjb25zdCAqdHJlZTsKKyAgY2hhciBjb25zdCAqdHJhbnM7CisKKyNpZmRlZiBs aW50CisgIGFjY2VwdCA9IE5VTEw7CisjZW5kaWYKKworICAvKiBJbml0aWFsaXplIHJlZ2lzdGVy IGNvcGllcyBhbmQgbG9vayBmb3IgZWFzeSB3YXlzIG91dC4gKi8KKyAgaWYgKGxlbiA8IGt3c2V0 LT5taW5kKQorICAgIHJldHVybiAtMTsKKworICBuZXh0ID0ga3dzZXQtPm5leHQ7CisgIHRyYW5z ID0ga3dzZXQtPnRyYW5zOworICBsaW0gPSB0ZXh0ICsgbGVuOworICB0cCA9IHRleHQ7CisKKyAg aWYgKGt3c2V0LT50cmllLT5hY2NlcHRpbmcpCisgICAgeworICAgICAgdHJpZSA9IGt3c2V0LT50 cmllOworICAgICAgZ290byBtYXRjaDsKKyAgICB9CisKKyAgdHJpZSA9IG5leHRbVSh0ciAodHJh bnMsICp0cCsrKSldOworCisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGlmICh0cCA8IGxp bSAtIDgpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoIXRyaWUpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAg ICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRy aWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1Uo dHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHAr KykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAg ICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRy aWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUp CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIg KHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykp XTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGlmICh0cCA+PSBsaW0gLSA4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICB0cmllID0gbmV4dFtVKHRyICh0cmFucywgKnRwKyspKV07CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKCF0cmllKQorICAgICAgICB7CisgICAgICAg ICAgaWYgKHRwID49IGxpbSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB0cmll ID0gbmV4dFtVKHRyICh0cmFucywgKnRwKyspKV07CisgICAgICAgIH0KKworICAgICAgaWYgKHRy aWUtPmFjY2VwdGluZykKKyAgICAgICAgZ290byBtYXRjaDsKKyAgICAgIGlmICh0cCA+PSBsaW0p CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGMgPSB0ciAodHJhbnMsICp0cCsrKTsKKyAgICAg IHRyZWUgPSB0cmllLT5saW5rczsKKworICAgICAgd2hpbGUgKHRydWUpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoYyA9PSB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgdHJpZSA9IHRyZWUtPnRyaWU7CisgICAgICAgICAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcp CisgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgaWYgKHRwID49IGxp bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIGMgPSB0ciAodHJh bnMsICp0cCsrKTsKKyAgICAgICAgICAgICAgdHJlZSA9IHRyaWUtPmxpbmtzOworICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjIDwgdHJl ZS0+bGFiZWwpCisgICAgICAgICAgICB0cmVlID0gdHJlZS0+bGxpbms7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgdHJlZSA9IHRyZWUtPnJsaW5rOworICAgICAgICAgIGlmICh0cmVlKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgdHJpZSA9IHRyaWUtPmZhaWw7CisgICAg ICAgICAgaWYgKCF0cmllKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKHRyaWUt PmFjY2VwdGluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLS10cDsKKyAgICAgICAg ICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB0cmVlID0gdHJpZS0+ bGlua3M7CisgICAgICAgIH0KKworICAgICAgdHJpZSA9IG5leHRbY107CisgICAgfQorCisgbWF0 Y2g6CisgIGFjY2VwdCA9IHRyaWU7CisgIHdoaWxlIChhY2NlcHQtPmFjY2VwdGluZyA9PSAoc2l6 ZV90KSAtMSkKKyAgICBhY2NlcHQgPSBhY2NlcHQtPmZhaWw7CisgIGxlZnQgPSB0cCAtIGFjY2Vw dC0+ZGVwdGg7CisKKyAgLyogVHJ5IGxlZnQtbW9zdCBsb25nZXN0IG1hdGNoLiAgKi8KKyAgd2hp bGUgKHRwIDwgbGltKQorICAgIHsKKyAgICAgIHN0cnVjdCB0cmllIGNvbnN0ICphY2NlcHQxOwor ICAgICAgY2hhciBjb25zdCAqbGVmdDE7CisgICAgICBjID0gdHIgKHRyYW5zLCAqdHArKyk7Cisg ICAgICB0cmVlID0gdHJpZS0+bGlua3M7CisgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUt PmxhYmVsKQorICAgICAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorICAgICAgICAgIHRyZWUgPSB0 cmVlLT5sbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsK KyAgICAgIGlmICghdHJlZSkKKyAgICAgICAgYnJlYWs7CisgICAgICB0cmllID0gdHJlZS0+dHJp ZTsKKyAgICAgIGlmICghdHJpZS0+YWNjZXB0aW5nKQorICAgICAgICBjb250aW51ZTsKKyAgICAg IGFjY2VwdDEgPSB0cmllOworICAgICAgd2hpbGUgKGFjY2VwdDEtPmFjY2VwdGluZyA9PSAoc2l6 ZV90KSAtMSkKKyAgICAgICAgYWNjZXB0MSA9IGFjY2VwdDEtPmZhaWw7CisgICAgICBsZWZ0MSA9 IHRwIC0gYWNjZXB0MS0+ZGVwdGg7CisgICAgICBpZiAobGVmdDEgPD0gbGVmdCkKKyAgICAgICAg eworICAgICAgICAgIGxlZnQgPSBsZWZ0MTsKKyAgICAgICAgICBhY2NlcHQgPSBhY2NlcHQxOwor ICAgICAgICB9CisgICAgfQorCisgIGt3c21hdGNoLT5pbmRleCA9IGFjY2VwdC0+YWNjZXB0aW5n IC8gMjsKKyAga3dzbWF0Y2gtPm9mZnNldFswXSA9IGxlZnQgLSB0ZXh0OworICBrd3NtYXRjaC0+ c2l6ZVswXSA9IGFjY2VwdC0+ZGVwdGg7CisKKyAgcmV0dXJuIGxlZnQgLSB0ZXh0OworfQorCisv KiBIYWlyeSBtdWx0aXBsZSBzdHJpbmcgc2VhcmNoIHdpdGggQWhvLUNvcmFzaWNrIGFsZ29yaXRo bS4gICovCitzdGF0aWMgc2l6ZV90CithY2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3Qg KnRleHQsIHNpemVfdCBzaXplLAorICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoKQor eworICAvKiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlz LCBkZXBlbmRpbmcgb24KKyAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCisg IHJldHVybiAoa3dzZXQtPnRyYW5zCisgICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0 ZXh0LCBzaXplLCBrd3NtYXRjaCkKKyAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQsIHRl eHQsIHNpemUsIGt3c21hdGNoKSk7Cit9CisKIC8qIFNlYXJjaCBURVhUIGZvciBhIG1hdGNoIG9m IGFueSBtZW1iZXIgb2YgS1dTRVQuCiAgICBSZXR1cm4gdGhlIG9mZnNldCAoaW50byBURVhUKSBv ZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nLAogICAgb3IgKHNpemVf dCkgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQuICBVcG9uIGEgbWF0Y2gsIHN0b3JlIGRldGFpbHMg aW4KQEAgLTg0MywxOSArMTA3NSw3IEBAIHNpemVfdAoga3dzZXhlYyAoa3dzZXRfdCBrd3NldCwg Y2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCiAgICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2gg Kmt3c21hdGNoKQogewotICBpZiAoa3dzZXQtPndvcmRzID09IDEpCi0gICAgewotICAgICAgc2l6 ZV90IHJldCA9IGJtZXhlYyAoa3dzZXQsIHRleHQsIHNpemUpOwotICAgICAgaWYgKHJldCAhPSAo c2l6ZV90KSAtMSkKLSAgICAgICAgewotICAgICAgICAgIGt3c21hdGNoLT5pbmRleCA9IDA7Ci0g ICAgICAgICAga3dzbWF0Y2gtPm9mZnNldFswXSA9IHJldDsKLSAgICAgICAgICBrd3NtYXRjaC0+ c2l6ZVswXSA9IGt3c2V0LT5taW5kOwotICAgICAgICB9Ci0gICAgICByZXR1cm4gcmV0OwotICAg IH0KLSAgZWxzZQotICAgIHJldHVybiBjd2V4ZWMgKGt3c2V0LCB0ZXh0LCBzaXplLCBrd3NtYXRj aCk7CisgIHJldHVybiBrd3NldC0+a3dzZXhlYyAoa3dzZXQsIHRleHQsIHNpemUsIGt3c21hdGNo KTsKIH0KIAogLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQu ICovCmRpZmYgLS1naXQgYS9zcmMva3dzZXQuaCBiL3NyYy9rd3NldC5oCmluZGV4IDEyYWZiOGUu LjI0NzZkYjMgMTAwNjQ0Ci0tLSBhL3NyYy9rd3NldC5oCisrKyBiL3NyYy9rd3NldC5oCkBAIC0y Miw2ICsyMiw3IEBACiAgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uICovCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxz dGRib29sLmg+CiAKIHN0cnVjdCBrd3NtYXRjaAogewpAQCAtMzgsNyArMzksNyBAQCB0eXBlZGVm IHN0cnVjdCBrd3NldCAqa3dzZXRfdDsKIC8qIFJldHVybiBhbiBvcGFxdWUgcG9pbnRlciB0byBh IG5ld2x5IGFsbG9jYXRlZCBrZXl3b3JkIHNldC4gIEEgbm9ubnVsbCBhcmcKICAgIHNwZWNpZmll cyBhIHRhYmxlIG9mIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGwK ICAgIHBhdHRlcm4gYW5kIHNlYXJjaCB0ZXh0LiAgKi8KLWV4dGVybiBrd3NldF90IGt3c2FsbG9j IChjaGFyIGNvbnN0ICopOworZXh0ZXJuIGt3c2V0X3Qga3dzYWxsb2MgKGNoYXIgY29uc3QgKiwg Ym9vbCBjb25zdCk7CiAKIC8qIEluY3JlbWVudGFsbHkgZXh0ZW5kIHRoZSBrZXl3b3JkIHNldCB0 byBpbmNsdWRlIHRoZSBnaXZlbiBzdHJpbmcuCiAgICBSZW1lbWJlciBhbiBpbmRleCBudW1iZXIg Zm9yIGVhY2gga2V5d29yZCBpbmNsdWRlZCBpbiB0aGUgc2V0LiAgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9zZWFyY2h1dGlscy5jIGIvc3JjL3NlYXJjaHV0aWxzLmMKaW5kZXggOWVkYzc4NS4uMzE0YWI4 ZSAxMDA2NDQKLS0tIGEvc3JjL3NlYXJjaHV0aWxzLmMKKysrIGIvc3JjL3NlYXJjaHV0aWxzLmMK QEAgLTM5LDEwICszOSwxMCBAQCBrd3Npbml0IChrd3NldF90ICprd3NldCkKICAgICAgIGZvciAo aSA9IDA7IGkgPCBOQ0hBUjsgKytpKQogICAgICAgICB0cmFuc1tpXSA9IHRvdXBwZXIgKGkpOwog Ci0gICAgICAqa3dzZXQgPSBrd3NhbGxvYyAodHJhbnMpOworICAgICAgKmt3c2V0ID0ga3dzYWxs b2MgKHRyYW5zLCBmYWxzZSk7CiAgICAgfQogICBlbHNlCi0gICAgKmt3c2V0ID0ga3dzYWxsb2Mg KE5VTEwpOworICAgICprd3NldCA9IGt3c2FsbG9jIChOVUxMLCBmYWxzZSk7CiAKICAgaWYgKCEq a3dzZXQpCiAgICAgeGFsbG9jX2RpZSAoKTsKLS0gCjIuMi4wCgo= --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0002-grep-immediately-return-without-longest-match-to-sea.patch" Content-Disposition: attachment; filename="0002-grep-immediately-return-without-longest-match-to-sea.patch" Content-Transfer-Encoding: base64 RnJvbSBlOTQ5NmY4ZDgyZWE5YmEyNjBkMzM3YTJkOGZhZTMyMTYxNjMzNjM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE1OjE2OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAyLzNd IGdyZXAgaW1tZWRpYXRlbHkgcmV0dXJuIHdpdGhvdXQgbG9uZ2VzdCBtYXRjaCB0byBzZWFyY2gK IG11bHRpcGxlIGZpeGVkIHdvcmRzIGlmIG5vdCBuZWVkZWQKClNlYXJjaGluZyBtdWx0aXBsZSBm aXhlZCB3b3JkcywgZ3JlcCBpbW1lZGlhdGVseSByZXR1cm5zIHdpdGhvdXQgbG9uZ2VzdAptYXRj aCBpZiBub3QgbmVlZGVkLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgZ3JlcCB0cmllcyBsb25nZXN0 IG1hdGNoIGZvcgptdWx0aXBsZSB3b3JkcyBldmVuIGlmIG5vdCBuZWVkZWQuCgoqIHNyYy9rd3Nl dC5jIChrd3NleGVjLCBhY2V4ZWMsIGN3ZXhlYywgYm1leGVjKTogQWRkIGFuIGFyZ3VtZW50IHdo aWNoCmlzIGJvb2wgd2hldGhlciBuZWVkZWQgbG9uZ2VzdCBtYXRjaCBvciBub3QuCkFsbCBjYWxs ZXJzIGFyZSBjaGFuZ2VkLgoqIHNyYy9rd3NldC5oIChrd3NleGVjKTogVXBkYXRlIHByb3RvdHlw ZS4KLS0tCiBzcmMvZGZhc2VhcmNoLmMgfCAgIDIgKy0KIHNyYy9rd3NlYXJjaC5jICB8ICAxOCAr KysrKy0tCiBzcmMva3dzZXQuYyAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9rd3NldC5oICAgICB8ICAgNCArLQog NCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgODQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2RmYXNlYXJjaC5jIGIvc3JjL2RmYXNlYXJjaC5jCmluZGV4IDc3YjRlM2Uu LjFlYjI0ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9kZmFzZWFyY2guYworKysgYi9zcmMvZGZhc2VhcmNo LmMKQEAgLTIzOSw3ICsyMzksNyBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90 IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwKIAogICAgICAgICAgICAgICAvKiBGaW5kIGEgcG9z c2libGUgbWF0Y2ggdXNpbmcgdGhlIEtXc2V0IG1hdGNoZXIuICAqLwogICAgICAgICAgICAgICBz aXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZyAtIGJlZ2xpbmUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZsaW0gLSBiZWcgKyBiZWdsaW5lLCAma3dz bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZsaW0gLSBiZWcg KyBiZWdsaW5lLCAma3dzbSwgdHJ1ZSk7CiAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gKHNp emVfdCkgLTEpCiAgICAgICAgICAgICAgICAgZ290byBmYWlsdXJlOwogICAgICAgICAgICAgICBt YXRjaCA9IGJlZyArIG9mZnNldDsKZGlmZiAtLWdpdCBhL3NyYy9rd3NlYXJjaC5jIGIvc3JjL2t3 c2VhcmNoLmMKaW5kZXggMTMzNWEyNi4uYzQ0ZWMwOCAxMDA2NDQKLS0tIGEvc3JjL2t3c2VhcmNo LmMKKysrIGIvc3JjL2t3c2VhcmNoLmMKQEAgLTExMSw2ICsxMTEsOCBAQCBGZXhlY3V0ZSAoY2hh ciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLAogICBzdHJ1Y3Qg a3dzbWF0Y2gga3dzbWF0Y2g7CiAgIHNpemVfdCByZXRfdmFsOwogICBtYl9sZW5fbWFwX3QgKm1h cCA9IE5VTEw7CisgIGJvb2wgbWJfY2hlY2s7CisgIGJvb2wgbG9uZ2VzdDsKIAogICBpZiAoTUJf Q1VSX01BWCA+IDEpCiAgICAgewpAQCAtMTIzLDE1ICsxMjUsMjMgQEAgRmV4ZWN1dGUgKGNoYXIg Y29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwKICAgICAgICAgfQog ICAgIH0KIAorICBpZiAobWF0Y2hfbGluZXMpCisgICAgbWJfY2hlY2sgPSBsb25nZXN0ID0gZmFs c2U7CisgIGVsc2UKKyAgICB7CisgICAgICBtYl9jaGVjayA9IE1CX0NVUl9NQVggPiAxICYmICF1 c2luZ191dGY4ICgpOworICAgICAgbG9uZ2VzdCA9IG1iX2NoZWNrIHx8IHN0YXJ0X3B0ciB8fCBt YXRjaF93b3JkczsKKyAgICB9CisKICAgZm9yIChtYl9zdGFydCA9IGJlZyA9IHN0YXJ0X3B0ciA/ IHN0YXJ0X3B0ciA6IGJ1ZjsgYmVnIDw9IGJ1ZiArIHNpemU7IGJlZysrKQogICAgIHsKICAgICAg IHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnIC0gbWF0Y2hfbGluZXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgc2l6ZSAtIGJlZyArIG1hdGNoX2xpbmVz LCAma3dzbWF0Y2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIHNpemUg LSBiZWcgKyBtYXRjaF9saW5lcywgJmt3c21hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvbmdlc3QpOwogICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKICAgICAg ICAgZ290byBmYWlsdXJlOwogICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXSAtIDIgKiBtYXRj aF9saW5lczsKLSAgICAgIGlmICghbWF0Y2hfbGluZXMgJiYgTUJfQ1VSX01BWCA+IDEgJiYgIXVz aW5nX3V0ZjggKCkKLSAgICAgICAgICAmJiBtYl9nb2JhY2sgKCZtYl9zdGFydCwgYmVnICsgb2Zm c2V0LCBidWYgKyBzaXplKSAhPSAwKQorICAgICAgaWYgKG1iX2NoZWNrICYmIG1iX2dvYmFjayAo Jm1iX3N0YXJ0LCBiZWcgKyBvZmZzZXQsIGJ1ZiArIHNpemUpICE9IDApCiAgICAgICAgIHsKICAg ICAgICAgICAvKiBXZSBoYXZlIG1hdGNoZWQgYSBzaW5nbGUgYnl0ZSB0aGF0IGlzIG5vdCBhdCB0 aGUgYmVnaW5uaW5nIG9mIGEKICAgICAgICAgICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgbWJf Z29iYWNrIGhhcyBhZHZhbmNlZCBNQl9TVEFSVCBwYXN0IHRoYXQKQEAgLTE2Niw3ICsxNzYsNyBA QCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9z aXplLAogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKCFsZW4pCiAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3Nl dCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBrd3Nl eGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoLCB0cnVlKTsKICAgICAgICAgICAgICAg ICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQogICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgdHJ5ID0gYmVnICsgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL2t3c2V0 LmMgYi9zcmMva3dzZXQuYwppbmRleCA5NTg1ZjA4Li5hMDJiYWRlIDEwMDY0NAotLS0gYS9zcmMv a3dzZXQuYworKysgYi9zcmMva3dzZXQuYwpAQCAtMTE2LDcgKzExNiw4IEBAIHN0cnVjdCBrd3Nl dAogICBib29sIHJldmVyc2U7CiAKICAgLyoga3dzZXhlYygpIGltcGxlbWVudGF0aW9uLiAgKi8K LSAgc2l6ZV90ICgqa3dzZXhlYykgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1 Y3Qga3dzbWF0Y2ggKik7CisgIHNpemVfdCAoKmt3c2V4ZWMpIChrd3NldF90LCBjaGFyIGNvbnN0 ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICosCisgICAgICAgICAgICAgICAgICAgICBib29s KTsKIH07CiAKIC8qIFVzZSBUUkFOUyB0byB0cmFuc2xpdGVyYXRlIEMuICBBIG51bGwgVFJBTlMg ZG9lcyBubyB0cmFuc2xpdGVyYXRpb24uICAqLwpAQCAtMTI2LDkgKzEyNywxMiBAQCB0ciAoY2hh ciBjb25zdCAqdHJhbnMsIGNoYXIgYykKICAgcmV0dXJuIHRyYW5zID8gdHJhbnNbVShjKV0gOiBj OwogfQogCi1zdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXpl X3QsIHN0cnVjdCBrd3NtYXRjaCAqKTsKLXN0YXRpYyBzaXplX3QgY3dleGVjIChrd3NldF90LCBj aGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOwotc3RhdGljIHNpemVfdCBi bWV4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKik7 CitzdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0 cnVjdCBrd3NtYXRjaCAqLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wpOworc3RhdGljIHNp emVfdCBjd2V4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0 Y2ggKiwKKyAgICAgICAgICAgICAgICAgICAgICBib29sKTsKK3N0YXRpYyBzaXplX3QgYm1leGVj IChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICosCisgICAg ICAgICAgICAgICAgICAgICAgYm9vbCk7CiAKIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEg a2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcgYW4gb3BhcXVlCiAgICBwb2ludGVyIHRvIGl0 LiAgKi8KQEAgLTcyMiw3ICs3MjYsNyBAQCBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNo YXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplKQogLyogRmFzdCBCb3llci1Nb29yZSBzZWFyY2gu ICAqLwogc3RhdGljIHNpemVfdAogYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0 ZXh0LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAg ICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewog ICAvKiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlzLCBk ZXBlbmRpbmcgb24KICAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCkBAIC03 NDIsNyArNzQ2LDggQEAgYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBz aXplX3Qgc2l6ZSwKIAogLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaCB3aXRoIENvbW1l bnR6LVdhbHRlciBhbGdvcml0aG0uICAqLwogc3RhdGljIHNpemVfdCBfR0xfQVJHX05PTk5VTEwg KCg0KSkKLWN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxl biwgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKK2N3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hh ciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3Nt YXRjaCwgYm9vbCBsb25nZXN0KQogewogICBzdHJ1Y3QgdHJpZSAqIGNvbnN0ICpuZXh0OwogICBz dHJ1Y3QgdHJpZSBjb25zdCAqdHJpZTsKQEAgLTgzNyw1NiArODQyLDU5IEBAIGN3ZXhlYyAoa3dz ZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwgc3RydWN0IGt3c21hdGNo ICprd3NtYXRjaCkKICAgLyogR2l2ZW4gYSBrbm93biBtYXRjaCwgZmluZCB0aGUgbG9uZ2VzdCBw b3NzaWJsZSBtYXRjaCBhbmNob3JlZAogICAgICBhdCBvciBiZWZvcmUgaXRzIHN0YXJ0aW5nIHBv aW50LiAgVGhpcyBpcyBuZWFybHkgYSB2ZXJiYXRpbQogICAgICBjb3B5IG9mIHRoZSBwcmVjZWRp bmcgbWFpbiBzZWFyY2ggbG9vcHMuICovCi0gIGlmIChsaW0gLSBtY2ggPiBrd3NldC0+bWF4ZCkK LSAgICBsaW0gPSBtY2ggKyBrd3NldC0+bWF4ZDsKLSAgbG1jaCA9IDA7Ci0gIGQgPSAxOwotICB3 aGlsZSAobGltIC0gZW5kID49IGQpCisgIGlmIChsb25nZXN0KQogICAgIHsKLSAgICAgIGlmICgo ZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV0pICE9IDApCi0gICAgICAgIGNvbnRpbnVlOwot ICAgICAgYmVnID0gZW5kIC0gMTsKLSAgICAgIGlmICghKHRyaWUgPSBuZXh0W2NdKSkKLSAgICAg ICAgewotICAgICAgICAgIGQgPSAxOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g ICAgICBpZiAodHJpZS0+YWNjZXB0aW5nICYmIGJlZyA8PSBtY2gpCi0gICAgICAgIHsKLSAgICAg ICAgICBsbWNoID0gYmVnOwotICAgICAgICAgIGFjY2VwdCA9IHRyaWU7Ci0gICAgICAgIH0KLSAg ICAgIGQgPSB0cmllLT5zaGlmdDsKLSAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorICAgICAgaWYg KGxpbSAtIG1jaCA+IGt3c2V0LT5tYXhkKQorICAgICAgICBsaW0gPSBtY2ggKyBrd3NldC0+bWF4 ZDsKKyAgICAgIGxtY2ggPSAwOworICAgICAgZCA9IDE7CisgICAgICB3aGlsZSAobGltIC0gZW5k ID49IGQpCiAgICAgICAgIHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyIHVjID0gKi0tYmVnOwot ICAgICAgICAgIGMgPSB0cmFucyA/IHRyYW5zW3VjXSA6IHVjOwotICAgICAgICAgIHRyZWUgPSB0 cmllLT5saW5rczsKLSAgICAgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQot ICAgICAgICAgICAgaWYgKGMgPCB0cmVlLT5sYWJlbCkKLSAgICAgICAgICAgICAgdHJlZSA9IHRy ZWUtPmxsaW5rOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0cmVlID0gdHJlZS0+ cmxpbms7Ci0gICAgICAgICAgaWYgKHRyZWUpCisgICAgICAgICAgaWYgKChkID0gZGVsdGFbYyA9 IChlbmQgKz0gZClbLTFdXSkgIT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg IGJlZyA9IGVuZCAtIDE7CisgICAgICAgICAgaWYgKCEodHJpZSA9IG5leHRbY10pKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICB0cmllID0gdHJlZS0+dHJpZTsKLSAgICAgICAgICAgICAg aWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorICAgICAgICAgICAgICBkID0gMTsK KyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRy aWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBsbWNoID0gYmVnOworICAgICAgICAgICAgICBhY2NlcHQgPSB0cmllOworICAgICAgICAgICAg fQorICAgICAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgICAgICB3aGlsZSAoYmVnID4gdGV4 dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1YyA9ICotLWJl ZzsKKyAgICAgICAgICAgICAgYyA9IHRyYW5zID8gdHJhbnNbdWNdIDogdWM7CisgICAgICAgICAg ICAgIHRyZWUgPSB0cmllLT5saW5rczsKKyAgICAgICAgICAgICAgd2hpbGUgKHRyZWUgJiYgYyAh PSB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgICAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorICAg ICAgICAgICAgICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOworICAgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKyAgICAgICAgICAgICAgaWYg KHRyZWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbG1jaCA9IGJlZzsK LSAgICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRyaWU7CisgICAgICAgICAgICAgICAgICB0cmll ID0gdHJlZS0+dHJpZTsKKyAgICAgICAgICAgICAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcgJiYg YmVnIDw9IG1jaCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg IGxtY2ggPSBiZWc7CisgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ID0gdHJpZTsKKyAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkID0gdHJpZS0+c2hpZnQ7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgZCA9IHRyaWUtPnNoaWZ0OwotICAgICAgICB9Ci0gICAgICBpZiAobG1jaCkKLSAgICAgICAg ewotICAgICAgICAgIG1jaCA9IGxtY2g7Ci0gICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAg ICBpZiAobG1jaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNoID0gbG1jaDsKKyAg ICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWQp CisgICAgICAgICAgICBkID0gMTsKICAgICAgICAgfQotICAgICAgaWYgKCFkKQotICAgICAgICBk ID0gMTsKICAgICB9CiAKICAga3dzbWF0Y2gtPmluZGV4ID0gYWNjZXB0LT5hY2NlcHRpbmcgLyAy OwpAQCAtOTAwLDcgKzkwOCw3IEBAIGN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAq dGV4dCwgc2l6ZV90IGxlbiwgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKICAgIChpbmxpbmFi bGUgdmVyc2lvbikgICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBfR0xfQVJHX05PTk5VTEwgKCg0 KSkKIGFjZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90 IGxlbiwKLSAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAgICAgICAg ICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewog ICBzdHJ1Y3QgdHJpZSAqIGNvbnN0ICpuZXh0OwogICBzdHJ1Y3QgdHJpZSBjb25zdCAqdHJpZSwg KmFjY2VwdDsKQEAgLTEwMjAsMzAgKzEwMjgsMzMgQEAgYWNleGVjX3RyYW5zIChrd3NldF90IGt3 c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogICBsZWZ0ID0gdHAgLSBhY2NlcHQt PmRlcHRoOwogCiAgIC8qIFRyeSBsZWZ0LW1vc3QgbG9uZ2VzdCBtYXRjaC4gICovCi0gIHdoaWxl ICh0cCA8IGxpbSkKKyAgaWYgKGxvbmdlc3QpCiAgICAgewotICAgICAgc3RydWN0IHRyaWUgY29u c3QgKmFjY2VwdDE7Ci0gICAgICBjaGFyIGNvbnN0ICpsZWZ0MTsKLSAgICAgIGMgPSB0ciAodHJh bnMsICp0cCsrKTsKLSAgICAgIHRyZWUgPSB0cmllLT5saW5rczsKLSAgICAgIHdoaWxlICh0cmVl ICYmIGMgIT0gdHJlZS0+bGFiZWwpCi0gICAgICAgIGlmIChjIDwgdHJlZS0+bGFiZWwpCi0gICAg ICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJlZSA9 IHRyZWUtPnJsaW5rOwotICAgICAgaWYgKCF0cmVlKQotICAgICAgICBicmVhazsKLSAgICAgIHRy aWUgPSB0cmVlLT50cmllOwotICAgICAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCi0gICAgICAgIGNv bnRpbnVlOwotICAgICAgYWNjZXB0MSA9IHRyaWU7Ci0gICAgICB3aGlsZSAoYWNjZXB0MS0+YWNj ZXB0aW5nID09IChzaXplX3QpIC0xKQotICAgICAgICBhY2NlcHQxID0gYWNjZXB0MS0+ZmFpbDsK LSAgICAgIGxlZnQxID0gdHAgLSBhY2NlcHQxLT5kZXB0aDsKLSAgICAgIGlmIChsZWZ0MSA8PSBs ZWZ0KQorICAgICAgd2hpbGUgKHRwIDwgbGltKQogICAgICAgICB7Ci0gICAgICAgICAgbGVmdCA9 IGxlZnQxOwotICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdDE7CisgICAgICAgICAgc3RydWN0IHRy aWUgY29uc3QgKmFjY2VwdDE7CisgICAgICAgICAgY2hhciBjb25zdCAqbGVmdDE7CisgICAgICAg ICAgYyA9IHRyICh0cmFucywgKnRwKyspOworICAgICAgICAgIHRyZWUgPSB0cmllLT5saW5rczsK KyAgICAgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorICAgICAgICAgICAg aWYgKGMgPCB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB0cmVlID0gdHJlZS0+cmxpbms7CisgICAg ICAgICAgaWYgKCF0cmVlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgdHJpZSA9IHRy ZWUtPnRyaWU7CisgICAgICAgICAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICBhY2NlcHQxID0gdHJpZTsKKyAgICAgICAgICB3aGlsZSAoYWNj ZXB0MS0+YWNjZXB0aW5nID09IChzaXplX3QpIC0xKQorICAgICAgICAgICAgYWNjZXB0MSA9IGFj Y2VwdDEtPmZhaWw7CisgICAgICAgICAgbGVmdDEgPSB0cCAtIGFjY2VwdDEtPmRlcHRoOworICAg ICAgICAgIGlmIChsZWZ0MSA8PSBsZWZ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBs ZWZ0ID0gbGVmdDE7CisgICAgICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdDE7CisgICAgICAgICAg ICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNTcsMTMgKzEwNjgsMTMgQEAgYWNleGVjX3Ry YW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogLyogSGFp cnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaCB3aXRoIEFoby1Db3Jhc2ljayBhbGdvcml0aG0uICAq Lwogc3RhdGljIHNpemVfdAogYWNleGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0 LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAgICAg ICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewogICAv KiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlzLCBkZXBl bmRpbmcgb24KICAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCiAgIHJldHVy biAoa3dzZXQtPnRyYW5zCi0gICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplLCBrd3NtYXRjaCkKLSAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQsIHRleHQsIHNp emUsIGt3c21hdGNoKSk7CisgICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplLCBrd3NtYXRjaCwgbG9uZ2VzdCkKKyAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQs IHRleHQsIHNpemUsIGt3c21hdGNoLCBsb25nZXN0KSk7CiB9CiAKIC8qIFNlYXJjaCBURVhUIGZv ciBhIG1hdGNoIG9mIGFueSBtZW1iZXIgb2YgS1dTRVQuCkBAIC0xMDczLDkgKzEwODQsOSBAQCBh Y2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplLAogICAg dmFsdWUpLCBhbmQgbGVuZ3RoLiAgKi8KIHNpemVfdAoga3dzZXhlYyAoa3dzZXRfdCBrd3NldCwg Y2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCi0gICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2gg Kmt3c21hdGNoKQorICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25z dCBsb25nZXN0KQogewotICByZXR1cm4ga3dzZXQtPmt3c2V4ZWMgKGt3c2V0LCB0ZXh0LCBzaXpl LCBrd3NtYXRjaCk7CisgIHJldHVybiBrd3NldC0+a3dzZXhlYyAoa3dzZXQsIHRleHQsIHNpemUs IGt3c21hdGNoLCBsb25nZXN0KTsKIH0KIAogLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUg Z2l2ZW4ga2V5d29yZCBzZXQuICovCmRpZmYgLS1naXQgYS9zcmMva3dzZXQuaCBiL3NyYy9rd3Nl dC5oCmluZGV4IDI0NzZkYjMuLmUzNmM4NjAgMTAwNjQ0Ci0tLSBhL3NyYy9rd3NldC5oCisrKyBi L3NyYy9rd3NldC5oCkBAIC01NCw4ICs1NCw4IEBAIGV4dGVybiB2b2lkIGt3c3ByZXAgKGt3c2V0 X3QpOwogICAgdGhlIG1hdGNoaW5nIHN1YnN0cmluZyBpbiB0aGUgaW50ZWdlciBpdCBwb2ludHMg dG8uICBTaW1pbGFybHksCiAgICBpZiBmb3VuZGluZGV4IGlzIG5vbi1OVUxMLCBzdG9yZSB0aGUg aW5kZXggb2YgdGhlIHBhcnRpY3VsYXIKICAgIGtleXdvcmQgZm91bmQgdGhlcmVpbi4gKi8KLWV4 dGVybiBzaXplX3Qga3dzZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVj dCBrd3NtYXRjaCAqKQotICBfR0xfQVJHX05PTk5VTEwgKCg0KSk7CitleHRlcm4gc2l6ZV90IGt3 c2V4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKiwK KyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25zdCkgX0dMX0FSR19OT05OVUxMICgoNCkp OwogCiAvKiBEZWFsbG9jYXRlIHRoZSBnaXZlbiBrZXl3b3JkIHNldCBhbmQgYWxsIGl0cyBhc3Nv Y2lhdGVkIHN0b3JhZ2UuICovCiBleHRlcm4gdm9pZCBrd3NmcmVlIChrd3NldF90KTsKLS0gCjIu Mi4wCgo= --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0003-use-memchr2-for-two-patterns-of-a-character.patch" Content-Disposition: attachment; filename="0003-use-memchr2-for-two-patterns-of-a-character.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZjNlNzFiYTc4ZDkzMjY3ODk0N2U2M2Y5Njg4OGQwMjgxYzg0NzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE1OjIxOjM1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAzLzNd IHVzZSBtZW1jaHIyIGZvciB0d28gcGF0dGVybnMgb2YgYSBjaGFyYWN0ZXIKCiogc3JjL2t3c2V0 LmMgKG1lbWNocjJfa3dzZXQpOiBBZGQgYSBuZXcgZnVuY3Rpb24uICBncmVwIHVzZXMgbWVtY2hy MiB0bwpzZWFyY2ggSnVzdCB0d28gbGV0dGVycy4KKGN3ZXhlYywgYWNleGVjX3RyYW5zKTogVXNl IGl0LgotLS0KIHNyYy9rd3NldC5jIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2t3c2V0 LmMgYi9zcmMva3dzZXQuYwppbmRleCBhMDJiYWRlLi4yMzUxYTkwIDEwMDY0NAotLS0gYS9zcmMv a3dzZXQuYworKysgYi9zcmMva3dzZXQuYwpAQCAtNjQwLDYgKzY0MCwzMSBAQCBtZW1jaHJfa3dz ZXQgKGNoYXIgY29uc3QgKnMsIHNpemVfdCBuLCBrd3NldF90IGt3c2V0KQogICByZXR1cm4gbiA9 PSAwID8gTlVMTCA6IG1lbWNocjIgKHMsIGt3c2V0LT5nYzEsIGt3c2V0LT5nYzFoZWxwLCBuKTsK IH0KIAorLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZSBidWZm ZXIgUyAob2Ygc2l6ZSBOKQorICAgdGhhdCBtYXRjaGVzIHRoZSBsYXN0IGJ5dGUgc3BlY2lmaWVk IGJ5IEtXU0VULCBhIHNpbmdsZXRvbi4gICovCitzdGF0aWMgc2l6ZV90CittZW1jaHIyX2t3c2V0 IChjaGFyIGNvbnN0ICpzLCBzaXplX3Qgbiwga3dzZXRfdCBrd3NldCwKKyAgICAgICAgICAgICAg IHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCB0cmVlIGNvbnN0ICpsaW5r ID0ga3dzZXQtPnRyaWUtPmxpbmtzOworICBzdHJ1Y3QgdHJlZSBjb25zdCAqY2xpbmsgPSBsaW5r LT5sbGluayA/IGxpbmstPmxsaW5rIDogbGluay0+cmxpbms7CisKKyAgY2hhciBjb25zdCAqbWNo ID0gbWVtY2hyMiAocywgbGluay0+bGFiZWwsIGNsaW5rLT5sYWJlbCwgbik7CisgIGlmIChtY2gp CisgICAgeworICAgICAgc2l6ZV90IG9mZiA9IG1jaCAtIHM7CisgICAgICBpZiAoKm1jaCA9PSBs aW5rLT5sYWJlbCkKKyAgICAgICAga3dzbWF0Y2gtPmluZGV4ID0gbGluay0+dHJpZS0+YWNjZXB0 aW5nIC8gMjsKKyAgICAgIGVsc2UKKyAgICAgICAga3dzbWF0Y2gtPmluZGV4ID0gY2xpbmstPnRy aWUtPmFjY2VwdGluZyAvIDI7CisgICAgICBrd3NtYXRjaC0+b2Zmc2V0WzBdID0gb2ZmOworICAg ICAga3dzbWF0Y2gtPnNpemVbMF0gPSAxOworICAgICAgcmV0dXJuIG9mZjsKKyAgICB9CisgIGVs c2UKKyAgICByZXR1cm4gLTE7Cit9CisKIC8qIEZhc3QgQm95ZXItTW9vcmUgc2VhcmNoIChpbmxp bmFibGUgdmVyc2lvbikuICAqLwogc3RhdGljIGlubGluZSBzaXplX3QgX0dMX0FUVFJJQlVURV9Q VVJFCiBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVf dCBzaXplKQpAQCAtNzY3LDYgKzc5Miw4IEBAIGN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBj b25zdCAqdGV4dCwgc2l6ZV90IGxlbiwKICAgLyogSW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMg YW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQuICovCiAgIGlmIChsZW4gPCBrd3NldC0+bWluZCkK ICAgICByZXR1cm4gLTE7CisgIGlmICgha3dzZXQtPnRyYW5zICYmIGt3c2V0LT5tYXhkID09IDEg JiYga3dzZXQtPndvcmRzID09IDIpCisgICAgcmV0dXJuIG1lbWNocjJfa3dzZXQgKHRleHQsIGxl biwga3dzZXQsIGt3c21hdGNoKTsKICAgbmV4dCA9IGt3c2V0LT5uZXh0OwogICBkZWx0YSA9IGt3 c2V0LT5kZWx0YTsKICAgdHJhbnMgPSBrd3NldC0+dHJhbnM7CkBAIC05MjQsNiArOTUxLDggQEAg YWNleGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVu LAogICAvKiBJbml0aWFsaXplIHJlZ2lzdGVyIGNvcGllcyBhbmQgbG9vayBmb3IgZWFzeSB3YXlz IG91dC4gKi8KICAgaWYgKGxlbiA8IGt3c2V0LT5taW5kKQogICAgIHJldHVybiAtMTsKKyAgaWYg KCFrd3NldC0+dHJhbnMgJiYga3dzZXQtPm1heGQgPT0gMSAmJiBrd3NldC0+d29yZHMgPT0gMikK KyAgICByZXR1cm4gbWVtY2hyMl9rd3NldCAodGV4dCwgbGVuLCBrd3NldCwga3dzbWF0Y2gpOwog CiAgIG5leHQgPSBrd3NldC0+bmV4dDsKICAgdHJhbnMgPSBrd3NldC0+dHJhbnM7Ci0tIAoyLjIu MAoK --------_548B0F93000000008CED_MULTIPART_MIXED_-- From unknown Tue Jun 17 01:49:15 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19358: [PATCH 1/3] grep: use Aho-Corasick algorithm to search multiple fixed words Resent-From: Jim Meyering Original-Sender: "Debbugs-submit" Resent-CC: bug-grep@gnu.org Resent-Date: Thu, 06 Aug 2015 04:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19358 X-GNU-PR-Package: grep X-GNU-PR-Keywords: patch To: Norihiro Tanaka Cc: 19358@debbugs.gnu.org Received: via spool by 19358-submit@debbugs.gnu.org id=B19358.143883437629082 (code B ref 19358); Thu, 06 Aug 2015 04:13:02 +0000 Received: (at 19358) by debbugs.gnu.org; 6 Aug 2015 04:12:56 +0000 Received: from localhost ([127.0.0.1]:40657 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZNCY3-0007Yz-U3 for submit@debbugs.gnu.org; Thu, 06 Aug 2015 00:12:56 -0400 Received: from mail-ig0-f180.google.com ([209.85.213.180]:34782) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZNCY1-0007Yp-NK for 19358@debbugs.gnu.org; Thu, 06 Aug 2015 00:12:54 -0400 Received: by igk11 with SMTP id 11so3972104igk.1 for <19358@debbugs.gnu.org>; Wed, 05 Aug 2015 21:12:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=6DLGYkIwDLKVx4h8AP8mMH/HV+fmLQE0rVKviKVGbHY=; b=j6YzAqQL14gUdxSxhQCPetPnF2tyvwhX8unJThq5WVkGk8YbxjXc9ZiQI07qHDfsI3 vUGbMdogP2f13YyYSI62e7pbTSpDSj6RW13DhKikMrrtFICMrLtwMBvPDdbAfOaqx1Ul An/kwvrSWA7HkkyPfbe4Gjl+I7VnLt2bzoRbxFUwL0jwEXpuyl4mCb4XBOrUzhuL8o8P vbWTJ9Spm3lIOFoFaL8MPeGB+E3Tpe7+CyM1PHMk+Wd/bwVQjpDaIYfHzOZwYCDGD2x7 GWTTAlCCf78Spr3SBiTUV9IAkODQEzQc9xmxGUqBpvaSHsJHauP+UhFsISOmFYrLFRMv KMXA== X-Received: by 10.50.2.9 with SMTP id 9mr1241252igq.42.1438834373273; Wed, 05 Aug 2015 21:12:53 -0700 (PDT) MIME-Version: 1.0 Received: by 10.36.10.72 with HTTP; Wed, 5 Aug 2015 21:12:33 -0700 (PDT) In-Reply-To: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> References: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> From: Jim Meyering Date: Wed, 5 Aug 2015 21:12:33 -0700 X-Google-Sender-Auth: g47gF5sZ_PlycOqvRptuG5XcLQs Message-ID: Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) On Fri, Dec 12, 2014 at 7:58 AM, Norihiro Tanaka wrote: > Hi, > > Searching multiple fixed words, grep uses Commentz-Walter algorithm, but > it is very slow for a worst case e.g. as following. It is O(m*n). > > - input: yes `printf %040d` | head -10000000 > - word1: x0000000000000000000 > - word2: x > > This change uses Aho-Corasick algorithm instead of Commentz-Walter > algorithm to search multiple fixed words. It uses a function to build > tries which has been already defined for Commentz-Walter algorithm in > kwset.c and which has been already high quality. > > I see 7x speed-up even for a typical case on Fedora 21 with a 3.2GHz i5 > by this change. > > First without this change (best-of-5 trials): > > find /usr/share/doc/ -type f | > LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null > real 11.37 user 11.03 sys 0.24 > > Next with this change (best-of-5 trials): > > find /usr/share/doc/ -type f | > LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null > real 1.49 user 1.31 sys 0.15 Nice patch. I see a similar performance improvement. > I also wrote two additional patches. > > Second, If search multiple fixed words, grep immediately returns without > longest match if not needed. Without this change, grep tries longest > match for multiple words even if not needed. That sounds like a very good idea and the change looks correct. > Third, use memchr2 for two patterns of a character. This sounds useful, but I discovered that the new code is not triggered even once by any of our tests. As such, I suspect that it is not justified to add these new conditionals in code that is often inlined. Do you have experiments that demonstrate how that final patch helps? Thank you, Jim From unknown Tue Jun 17 01:49:15 2025 X-Loop: help-debbugs@gnu.org Subject: bug#19358: [PATCH 1/3] grep: use Aho-Corasick algorithm to search multiple fixed words Resent-From: Norihiro Tanaka Original-Sender: "Debbugs-submit" Resent-CC: bug-grep@gnu.org Resent-Date: Thu, 06 Aug 2015 13:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 19358 X-GNU-PR-Package: grep X-GNU-PR-Keywords: patch To: Jim Meyering Cc: 19358@debbugs.gnu.org Received: via spool by 19358-submit@debbugs.gnu.org id=B19358.143886661727229 (code B ref 19358); Thu, 06 Aug 2015 13:11:02 +0000 Received: (at 19358) by debbugs.gnu.org; 6 Aug 2015 13:10:17 +0000 Received: from localhost ([127.0.0.1]:40966 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZNKw4-000756-Ap for submit@debbugs.gnu.org; Thu, 06 Aug 2015 09:10:17 -0400 Received: from mailgw05.kcn.ne.jp ([61.86.7.212]:47917) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ZNKw2-00074x-8e for 19358@debbugs.gnu.org; Thu, 06 Aug 2015 09:10:15 -0400 Received: from mxs02-s (mailgw2.kcn.ne.jp [61.86.15.234]) by mailgw05.kcn.ne.jp (Postfix) with ESMTP id C432F8805D8 for <19358@debbugs.gnu.org>; Thu, 6 Aug 2015 22:10:11 +0900 (JST) X-matriXscan-loop-detect: 02b52b94dba88a19e0c7c7f662a2eebe38e28b3d Received: from mail09.kcn.ne.jp ([61.86.6.188]) by mxs02-s with ESMTP; Thu, 06 Aug 2015 22:10:07 +0900 (JST) Received: from [10.120.1.87] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) by mail09.kcn.ne.jp (Postfix) with ESMTPA id C6D191BD009D; Thu, 6 Aug 2015 22:10:07 +0900 (JST) Date: Thu, 06 Aug 2015 22:10:08 +0900 From: Norihiro Tanaka In-Reply-To: References: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> Message-Id: <20150806221007.44F7.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-matriXscan-Sophos-AV: Clean X-matriXscan-Action: Approve X-matriXscan: Uncategorized X-Spam-Score: -0.8 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.8 (/) On Wed, 5 Aug 2015 21:12:33 -0700 Jim Meyering wrote: > This sounds useful, but I discovered that the new code is not > triggered even once by any of our tests. As such, I suspect that > it is not justified to add these new conditionals in code that is > often inlined. Do you have experiments that demonstrate how > that final patch helps? Thanks for reviewing. It is effective in only special case. Could you try following test for not patched and patched? $ printf 'a\nb\n' >pat $ yes $(printf %040d 0) | head -10000000 >in $ time -p src/grep -Ff pat in In my machine, patched version is about 10% faster than not patched. From unknown Tue Jun 17 01:49:15 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Norihiro Tanaka Subject: bug#19358: closed (Re: grep: use Aho-Corasick algorithm to search multiple fixed words) Message-ID: References: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> X-Gnu-PR-Message: they-closed 19358 X-Gnu-PR-Package: grep X-Gnu-PR-Keywords: patch Reply-To: 19358@debbugs.gnu.org Date: Thu, 02 Jun 2016 22:46:01 +0000 Content-Type: multipart/mixed; boundary="----------=_1464907561-18398-1" This is a multi-part message in MIME format... ------------=_1464907561-18398-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #19358: [PATCH 1/3] grep: use Aho-Corasick algorithm to search multiple fix= ed words which was filed against the grep package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 19358@debbugs.gnu.org. --=20 19358: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D19358 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1464907561-18398-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 19358-done) by debbugs.gnu.org; 2 Jun 2016 22:45:37 +0000 Received: from localhost ([127.0.0.1]:52168 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b8bMu-0004m8-Pk for submit@debbugs.gnu.org; Thu, 02 Jun 2016 18:45:36 -0400 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:43725) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b8bMt-0004lt-2B for 19358-done@debbugs.gnu.org; Thu, 02 Jun 2016 18:45:35 -0400 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 0C93C1605AF; Thu, 2 Jun 2016 15:45:29 -0700 (PDT) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id gVol6vP6N0j3; Thu, 2 Jun 2016 15:45:28 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 53A891613DF; Thu, 2 Jun 2016 15:45:28 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id hMFKEY8KQuMP; Thu, 2 Jun 2016 15:45:28 -0700 (PDT) Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 2F6B71605AF; Thu, 2 Jun 2016 15:45:28 -0700 (PDT) To: Norihiro Tanaka From: Paul Eggert Subject: Re: grep: use Aho-Corasick algorithm to search multiple fixed words Organization: UCLA Computer Science Department Message-ID: Date: Thu, 2 Jun 2016 15:45:27 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------9CF01497E6D77B158825EEE3" X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: 19358-done Cc: 19358-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.4 (-) This is a multi-part message in MIME format. --------------9CF01497E6D77B158825EEE3 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sorry that patch took so long to review. I installed it, along with the attached followup patches which are mostly just minor style things (plus fixing the attribution for a patch that I forgot to specify --author for). I didn't get as much performance improvement on my platform, so I toned down the NEWS item a bit. Still, wow. It is a 2.5x performance improvement for that test case, and it's asymptotically better. Thanks. --------------9CF01497E6D77B158825EEE3 Content-Type: application/x-patch; name="0001-grep-minor-cleanups-for-F-Aho-Corasick.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-grep-minor-cleanups-for-F-Aho-Corasick.patch" RnJvbSA0ZTk4OTlmMThmZGRhMWZlMTlhMjZmN2UxYTNlNDBlODdmOGM3ZjJjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUaHUsIDIgSnVuIDIwMTYgMTE6MzA6MDggLTA3MDAKU3ViamVjdDogW1BBVENI IDEvM10gZ3JlcDogbWlub3IgY2xlYW51cHMgZm9yIC1GIEFoby1Db3Jhc2ljawoKKiBORVdT OiBEb24ndCBjbGFpbSA3eCwgYXMgdGhlIHZhbHVlIHNlZW1zIHRvIGJlIHN5c3RlbS1kZXBl bmRlbnQuCiogc3JjL2t3c2V0LmMgKHN0cnVjdCBrd3NldC5rd3NleGVjLCBibWV4ZWMsIGFj ZXhlY190cmFucywgYWNleGVjKToKKiBzcmMva3dzZXQuYywgc3JjL2t3c2V0LmggKGt3c2Fs bG9jLCBrd3NleGVjKToKRG9uJ3QgcHV0ICdjb25zdCcgaW50byB0aGUgZGVjbGFyYXRpb24g d2hlbiB0aGF0IGlzIGlycmVsZXZhbnQgdG8KdGhlIEFQSS4gIE1vcmUgZ2VuZXJhbGx5LCBk b24ndCBib3RoZXIgd2l0aCAnY29uc3QnIHdoZW4gaXQncyBvbmx5CmEgbG9jYWwgc28gaXQg aXMgcmVhc29uYWJseSBvYnZpb3VzIHRvIGEgcmVhZGVyIHRoYXQgaXQgaXMgJ2NvbnN0Jwph bnl3YXkuICBJdCB3b3VsZCBiZSBvdmVya2lsbCB0byBhZGQgJ2NvbnN0JyB0byBhbGwgbG9j YWxzIHRoYXQKbmV2ZXIgY2hhbmdlLgoqIHNyYy9rd3NldC5jIChVKTogQXZvaWQgdW5uZWNl c3NhcnkgcGFyZW5zLgoodHJlZWZhaWxzLCBtZW1vZmYyX2t3c2V0LCBibWV4ZWNfdHJhbnMs IGJtZXhlYywgY3dleGVjLCBhY2V4ZWNfdHJhbnMpOgpQcmVmZXIgU0laRV9NQVggdG8gKHNp emVfdCkgLTEuCihibWV4ZWNfdHJhbnMsIGN3ZXhlYywgYWNleGVjX3RyYW5zKToKUmVtb3Zl IGF0dHJpYnV0ZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBubyBsb25nZXIgc2VlbSBu ZWVkZWQuCihtZW1vZmYyX2t3c2V0KTogUmVuYW1lIGZyb20gbWVtY2hyMl9rd3NldCwgc2lu Y2UgaXQgcmV0dXJucwphbiBvZmZzZXQsIG5vdCBhIHBvaW50ZXIuICBBbGwgdXNlcyBjaGFu Z2VkLgooY3dleGVjLCBhY2V4ZWNfdHJhbnMpIFtsaW50XTogUmVtb3ZlIGluaXRpYWxpemF0 aW9uIHRoYXQgaXMgbm8KbG9uZ2VyIG5lZWRlZDsgYXQgbGVhc3QsIEdDQyA2LjEgeDg2LTY0 IGRvZXMgbm90IG5lZWQgaXQuCihhY2V4ZWNfdHJhbnMpOiBDbGFyaWZ5IGNvZGUgYnkgdXNp bmcgbmVzdGluZyByYXRoZXIgdGhhbiAnY29udGludWUnLgotLS0KIE5FV1MgICAgICAgIHwg ICA3ICstLQogc3JjL2t3c2V0LmMgfCAxNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMva3dzZXQuaCB8ICAgNiAr LS0KIDMgZmlsZXMgY2hhbmdlZCwgNzYgaW5zZXJ0aW9ucygrKSwgOTAgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggZmI2ZjQxZS4uYzNlNjAwMCAxMDA2 NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC04LDkgKzgsMTAgQEAgR05VIGdyZXAgTkVX UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRsaW5lIC0qLQog CiAqKiBJbXByb3ZlbWVudHMKIAotICBncmVwIC1GIGlzIG5vdyB0eXBpY2FsbHkgNyB0aW1l cyBmYXN0ZXIgZm9yIGEgbG90IG9mIHdvcmRzLiAgVGhlCi0gIGltcHJvdmVtZW50IHJlcGxh Y2UgQ29tbWVudHotV2FsdGVyIGFsZ29yaXRobSB3aGljaCBoYXMgYmVlbiB1c2VkIGZvcgot ICBhIGxvbmcgdGltZSB0byBBaG8tQ29yYXNpY2sgYWxnb3JpdGhtLgorICBncmVwIC1GIGlz IG5vdyB0eXBpY2FsbHkgbXVjaCBmYXN0ZXIgd2hlbiBtYW55IHBhdHRlcm5zIGFyZSBnaXZl biwKKyAgYXMgaXQgbm93IHVzZXMgdGhlIEFoby1Db3Jhc2ljayBhbGdvcml0aG0gaW5zdGVh ZCBvZiB0aGUKKyAgQ29tbWVudHotV2FsdGVyIGFsZ29yaXRobSBpbiB0aGF0IGNhc2UuCisK IAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjI1ICgyMDE2LTA0LTIxKSBb c3RhYmxlXQogCmRpZmYgLS1naXQgYS9zcmMva3dzZXQuYyBiL3NyYy9rd3NldC5jCmluZGV4 IGEyNzk1NzkuLmQxNDk3MmYgMTAwNjQ0Ci0tLSBhL3NyYy9rd3NldC5jCisrKyBiL3NyYy9r d3NldC5jCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2Mg bWFsbG9jCiAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCiAKLSNkZWZpbmUgVShj KSAodG9fdWNoYXIgKGMpKQorI2RlZmluZSBVKGMpIHRvX3VjaGFyIChjKQogCiAvKiBCYWxh bmNlZCB0cmVlIG9mIGVkZ2VzIGFuZCBsYWJlbHMgbGVhdmluZyBhIGdpdmVuIHRyaWUgbm9k ZS4gKi8KIHN0cnVjdCB0cmVlCkBAIC0xMTUsOSArMTE1LDggQEAgc3RydWN0IGt3c2V0CiAg ICAgIGFsZ29yaXRobSBpbiBtdWx0aXBsZSB3b3Jkcy4gICovCiAgIGJvb2wgcmV2ZXJzZTsK IAotICAvKiBrd3NleGVjKCkgaW1wbGVtZW50YXRpb24uICAqLwotICBzaXplX3QgKCprd3Nl eGVjKSAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAq LAotICAgICAgICAgICAgICAgICAgICAgYm9vbCk7CisgIC8qIGt3c2V4ZWMgaW1wbGVtZW50 YXRpb24uICAqLworICBzaXplX3QgKCprd3NleGVjKSAoa3dzZXRfdCwgY2hhciBjb25zdCAq LCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqLCBib29sKTsKIH07CiAKIC8qIFVzZSBUUkFO UyB0byB0cmFuc2xpdGVyYXRlIEMuICBBIG51bGwgVFJBTlMgZG9lcyBubyB0cmFuc2xpdGVy YXRpb24uICAqLwpAQCAtMTI3LDE3ICsxMjYsMTQgQEAgdHIgKGNoYXIgY29uc3QgKnRyYW5z LCBjaGFyIGMpCiAgIHJldHVybiB0cmFucyA/IHRyYW5zW1UoYyldIDogYzsKIH0KIAotc3Rh dGljIHNpemVfdCBhY2V4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1 Y3Qga3dzbWF0Y2ggKiwKLSAgICAgICAgICAgICAgICAgICAgICBib29sKTsKLXN0YXRpYyBz aXplX3QgY3dleGVjIChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3 c21hdGNoICosCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCk7Ci1zdGF0aWMgc2l6ZV90 IGJtZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRj aCAqLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wpOworc3RhdGljIHNpemVfdCBhY2V4 ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKiwg Ym9vbCk7CitzdGF0aWMgc2l6ZV90IGN3ZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBz aXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqLCBib29sKTsKK3N0YXRpYyBzaXplX3QgYm1leGVj IChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICosIGJv b2wpOwogCiAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGtleXdvcmQgc2V0IG9iamVj dCwgcmV0dXJuaW5nIGFuIG9wYXF1ZQogICAgcG9pbnRlciB0byBpdC4gICovCiBrd3NldF90 Ci1rd3NhbGxvYyAoY2hhciBjb25zdCAqdHJhbnMsIGJvb2wgY29uc3QgcmV2ZXJzZSkKK2t3 c2FsbG9jIChjaGFyIGNvbnN0ICp0cmFucywgYm9vbCByZXZlcnNlKQogewogICBzdHJ1Y3Qg a3dzZXQgKmt3c2V0ID0geG1hbGxvYyAoc2l6ZW9mICprd3NldCk7CiAKQEAgLTE1NiwxMCAr MTUyLDcgQEAga3dzYWxsb2MgKGNoYXIgY29uc3QgKnRyYW5zLCBib29sIGNvbnN0IHJldmVy c2UpCiAgIGt3c2V0LT50YXJnZXQgPSBOVUxMOwogICBrd3NldC0+dHJhbnMgPSB0cmFuczsK ICAga3dzZXQtPnJldmVyc2UgPSByZXZlcnNlOwotICBpZiAocmV2ZXJzZSkKLSAgICBrd3Nl dC0+a3dzZXhlYyA9IGN3ZXhlYzsKLSAgZWxzZQotICAgIGt3c2V0LT5rd3NleGVjID0gYWNl eGVjOworICBrd3NldC0+a3dzZXhlYyA9IHJldmVyc2UgPyBjd2V4ZWMgOiBhY2V4ZWM7CiAK ICAgcmV0dXJuIGt3c2V0OwogfQpAQCAtMzU1LDcgKzM0OCw3IEBAIHRyZWVmYWlscyAoc3Ry dWN0IHRyZWUgY29uc3QgKnRyZWUsIHN0cnVjdCB0cmllIGNvbnN0ICpmYWlsLAogICAgICAg ICB7CiAgICAgICAgICAgdHJlZS0+dHJpZS0+ZmFpbCA9IGxpbmstPnRyaWU7CiAgICAgICAg ICAgaWYgKCFyZXZlcnNlICYmIGxpbmstPnRyaWUtPmFjY2VwdGluZyAmJiAhdHJlZS0+dHJp ZS0+YWNjZXB0aW5nKQotICAgICAgICAgICAgdHJlZS0+dHJpZS0+YWNjZXB0aW5nID0gLTE7 CisgICAgICAgICAgICB0cmVlLT50cmllLT5hY2NlcHRpbmcgPSBTSVpFX01BWDsKICAgICAg ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgIGZhaWwgPSBmYWlsLT5mYWlsOwpAQCAt NDMwLDcgKzQyMyw3IEBAIGt3c3ByZXAgKGt3c2V0X3Qga3dzZXQpCiAgICAgICAgICAgZm9y IChjdXJyID0gbGFzdCA9IGt3c2V0LT50cmllOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCkK ICAgICAgICAgICAgICBlbnF1ZXVlIChjdXJyLT5saW5rcywgJmxhc3QpOwogCi0gICAgICAg ICAgLyogTG9va2luZyBmb3IganVzdCBvbmUgc3RyaW5nLiAgRXh0cmFjdCBpdCBmcm9tIHRo ZSB0cmllLiAqLworICAgICAgICAgIC8qIExvb2tpbmcgZm9yIGp1c3Qgb25lIHN0cmluZy4g IEV4dHJhY3QgaXQgZnJvbSB0aGUgdHJpZS4gICovCiAgICAgICAgICAga3dzZXQtPnRhcmdl dCA9IG9ic3RhY2tfYWxsb2MgKCZrd3NldC0+b2JzdGFjaywga3dzZXQtPm1pbmQpOwogICAg ICAgICAgIGZvciAoaSA9IDAsIGN1cnIgPSBrd3NldC0+dHJpZTsgaSA8IGt3c2V0LT5taW5k OyArK2kpCiAgICAgICAgICAgICB7CkBAIC02MjIsNyArNjE1LDggQEAgYm1fZGVsdGEyX3Nl YXJjaCAoY2hhciBjb25zdCAqKnRwcCwgY2hhciBjb25zdCAqZXAsIGNoYXIgY29uc3QgKnNw LCBpbnQgbGVuLAogfQogCiAvKiBSZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGJ5 dGUgaW4gdGhlIGJ1ZmZlciBTIChvZiBzaXplIE4pCi0gICB0aGF0IG1hdGNoZXMgdGhlIGxh c3QgYnl0ZSBzcGVjaWZpZWQgYnkgS1dTRVQsIGEgc2luZ2xldG9uLiAgKi8KKyAgIHRoYXQg bWF0Y2hlcyB0aGUgbGFzdCBieXRlIHNwZWNpZmllZCBieSBLV1NFVCwgYSBzaW5nbGV0b24u CisgICBSZXR1cm4gTlVMTCBpZiB0aGVyZSBpcyBubyBtYXRjaC4gICovCiBzdGF0aWMgY2hh ciBjb25zdCAqCiBtZW1jaHJfa3dzZXQgKGNoYXIgY29uc3QgKnMsIHNpemVfdCBuLCBrd3Nl dF90IGt3c2V0KQogewpAQCAtNjQwLDE3ICs2MzQsMjAgQEAgbWVtY2hyX2t3c2V0IChjaGFy IGNvbnN0ICpzLCBzaXplX3Qgbiwga3dzZXRfdCBrd3NldCkKICAgcmV0dXJuIG4gPT0gMCA/ IE5VTEwgOiBtZW1jaHIyIChzLCBrd3NldC0+Z2MxLCBrd3NldC0+Z2MxaGVscCwgbik7CiB9 CiAKLS8qIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYnVm ZmVyIFMgKG9mIHNpemUgTikKLSAgIHRoYXQgbWF0Y2hlcyB0aGUgbGFzdCBieXRlIHNwZWNp ZmllZCBieSBLV1NFVCwgYSBzaW5nbGV0b24uICAqLworLyogUmV0dXJuIHRoZSBvZmZzZXQg b2YgdGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ1ZmZlciBTIChvZiBzaXplIE4pCisgICB0aGF0 IG1hdGNoZXMgdGhlIGxhc3QgYnl0ZSBzcGVjaWZpZWQgYnkgS1dTRVQsIGEgcGFpci4KKyAg IFJldHVybiBTSVpFX01BWCBpZiB0aGVyZSBpcyBubyBtYXRjaC4gICovCiBzdGF0aWMgc2l6 ZV90Ci1tZW1jaHIyX2t3c2V0IChjaGFyIGNvbnN0ICpzLCBzaXplX3Qgbiwga3dzZXRfdCBr d3NldCwKK21lbW9mZjJfa3dzZXQgKGNoYXIgY29uc3QgKnMsIHNpemVfdCBuLCBrd3NldF90 IGt3c2V0LAogICAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKIHsK ICAgc3RydWN0IHRyZWUgY29uc3QgKmxpbmsgPSBrd3NldC0+dHJpZS0+bGlua3M7CiAgIHN0 cnVjdCB0cmVlIGNvbnN0ICpjbGluayA9IGxpbmstPmxsaW5rID8gbGluay0+bGxpbmsgOiBs aW5rLT5ybGluazsKIAogICBjaGFyIGNvbnN0ICptY2ggPSBtZW1jaHIyIChzLCBsaW5rLT5s YWJlbCwgY2xpbmstPmxhYmVsLCBuKTsKLSAgaWYgKG1jaCkKKyAgaWYgKCEgbWNoKQorICAg IHJldHVybiBTSVpFX01BWDsKKyAgZWxzZQogICAgIHsKICAgICAgIHNpemVfdCBvZmYgPSBt Y2ggLSBzOwogICAgICAgaWYgKCptY2ggPT0gbGluay0+bGFiZWwpCkBAIC02NjEsMTIgKzY1 OCwxMCBAQCBtZW1jaHIyX2t3c2V0IChjaGFyIGNvbnN0ICpzLCBzaXplX3Qgbiwga3dzZXRf dCBrd3NldCwKICAgICAgIGt3c21hdGNoLT5zaXplWzBdID0gMTsKICAgICAgIHJldHVybiBv ZmY7CiAgICAgfQotICBlbHNlCi0gICAgcmV0dXJuIC0xOwogfQogCiAvKiBGYXN0IEJveWVy LU1vb3JlIHNlYXJjaCAoaW5saW5hYmxlIHZlcnNpb24pLiAgKi8KLXN0YXRpYyBpbmxpbmUg c2l6ZV90IF9HTF9BVFRSSUJVVEVfUFVSRQorc3RhdGljIGlubGluZSBzaXplX3QKIGJtZXhl Y190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUp CiB7CiAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmQxOwpAQCAtNjc4LDExICs2NzMsMTEgQEAg Ym1leGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qg c2l6ZSkKICAgaWYgKGxlbiA9PSAwKQogICAgIHJldHVybiAwOwogICBpZiAobGVuID4gc2l6 ZSkKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNJWkVfTUFYOwogICBpZiAobGVuID09 IDEpCiAgICAgewogICAgICAgdHAgPSBtZW1jaHJfa3dzZXQgKHRleHQsIHNpemUsIGt3c2V0 KTsKLSAgICAgIHJldHVybiB0cCA/IHRwIC0gdGV4dCA6IC0xOworICAgICAgcmV0dXJuIHRw ID8gdHAgLSB0ZXh0IDogU0laRV9NQVg7CiAgICAgfQogCiAgIGQxID0ga3dzZXQtPmRlbHRh OwpAQCAtNzIyLDcgKzcxNyw3IEBAIGJtZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hh ciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUpCiAgICAgICAgICAgICAgICAgICAgIHRwLS07 CiAgICAgICAgICAgICAgICAgICAgIHRwID0gbWVtY2hyX2t3c2V0ICh0cCwgdGV4dCArIHNp emUgLSB0cCwga3dzZXQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoISB0cCkKLSAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIFNJWkVfTUFYOwogICAgICAgICAgICAgICAgICAgICB0cCsrOwogICAgICAgICAgICAg ICAgICAgICBpZiAoZXAgPD0gdHApCiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA IC03NDYsMjEgKzc0MSwyMSBAQCBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIg Y29uc3QgKnRleHQsIHNpemVfdCBzaXplKQogICAgICAgICByZXR1cm4gdHAgLSB0ZXh0Owog ICAgIH0KIAotICByZXR1cm4gLTE7CisgIHJldHVybiBTSVpFX01BWDsKIH0KIAogLyogRmFz dCBCb3llci1Nb29yZSBzZWFyY2guICAqLwogc3RhdGljIHNpemVfdAogYm1leGVjIChrd3Nl dF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgc3Ry dWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQorICAgICAgICBz dHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoLCBib29sIGxvbmdlc3QpCiB7CiAgIC8qIEhlbHAg dGhlIGNvbXBpbGVyIGlubGluZSBibWV4ZWNfdHJhbnMgaW4gdHdvIHdheXMsIGRlcGVuZGlu ZyBvbgogICAgICB3aGV0aGVyIGt3c2V0LT50cmFucyBpcyBudWxsLiAgKi8KICAgc2l6ZV90 IHJldCA9IChrd3NldC0+dHJhbnMKLSAgICAgICAgICA/IGJtZXhlY190cmFucyAoa3dzZXQs IHRleHQsIHNpemUpCi0gICAgICAgICAgOiBibWV4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplKSk7CisgICAgICAgICAgICAgICAgPyBibWV4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplKQorICAgICAgICAgICAgICAgIDogYm1leGVjX3RyYW5zIChrd3NldCwgdGV4dCwgc2l6 ZSkpOwogCi0gIGlmIChyZXQgIT0gKHNpemVfdCkgLTEpCisgIGlmIChyZXQgIT0gU0laRV9N QVgpCiAgICAgewogICAgICAgIGt3c21hdGNoLT5pbmRleCA9IDA7CiAgICAgICAga3dzbWF0 Y2gtPm9mZnNldFswXSA9IHJldDsKQEAgLTc3MSw3ICs3NjYsNyBAQCBibWV4ZWMgKGt3c2V0 X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplLAogfQogCiAvKiBIYWly eSBtdWx0aXBsZSBzdHJpbmcgc2VhcmNoIHdpdGggQ29tbWVudHotV2FsdGVyIGFsZ29yaXRo bS4gICovCi1zdGF0aWMgc2l6ZV90IF9HTF9BUkdfTk9OTlVMTCAoKDQpKQorc3RhdGljIHNp emVfdAogY3dleGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qg bGVuLAogICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoLCBib29sIGxvbmdlc3Qp CiB7CkBAIC03ODYsMTUgKzc4MSwxMSBAQCBjd2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIg Y29uc3QgKnRleHQsIHNpemVfdCBsZW4sCiAgIHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlOwog ICBjaGFyIGNvbnN0ICp0cmFuczsKIAotI2lmZGVmIGxpbnQKLSAgYWNjZXB0ID0gTlVMTDsK LSNlbmRpZgotCi0gIC8qIEluaXRpYWxpemUgcmVnaXN0ZXIgY29waWVzIGFuZCBsb29rIGZv ciBlYXN5IHdheXMgb3V0LiAqLworICAvKiBJbml0aWFsaXplIHJlZ2lzdGVyIGNvcGllcyBh bmQgbG9vayBmb3IgZWFzeSB3YXlzIG91dC4gICovCiAgIGlmIChsZW4gPCBrd3NldC0+bWlu ZCkKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFNJWkVfTUFYOwogICBpZiAoIWt3c2V0 LT50cmFucyAmJiBrd3NldC0+bWF4ZCA9PSAxICYmIGt3c2V0LT53b3JkcyA9PSAyKQotICAg IHJldHVybiBtZW1jaHIyX2t3c2V0ICh0ZXh0LCBsZW4sIGt3c2V0LCBrd3NtYXRjaCk7Cisg ICAgcmV0dXJuIG1lbW9mZjJfa3dzZXQgKHRleHQsIGxlbiwga3dzZXQsIGt3c21hdGNoKTsK ICAgbmV4dCA9IGt3c2V0LT5uZXh0OwogICBkZWx0YSA9IGt3c2V0LT5kZWx0YTsKICAgdHJh bnMgPSBrd3NldC0+dHJhbnM7CkBAIC04NjQsNyArODU1LDcgQEAgY3dleGVjIChrd3NldF90 IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogICAgICAgaWYgKG1jaCkK ICAgICAgICAgZ290byBtYXRjaDsKICAgICB9Ci0gIHJldHVybiAtMTsKKyAgcmV0dXJuIFNJ WkVfTUFYOwogCiAgbWF0Y2g6CiAgIC8qIEdpdmVuIGEga25vd24gbWF0Y2gsIGZpbmQgdGhl IGxvbmdlc3QgcG9zc2libGUgbWF0Y2ggYW5jaG9yZWQKQEAgLTkzNCw5ICs5MjUsOSBAQCBj d2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sCiAK IC8qIEhhaXJ5IG11bHRpcGxlIHN0cmluZyBzZWFyY2ggd2l0aCBBaG8tQ29yYXNpY2sgYWxn b3JpdGhtLgogICAgKGlubGluYWJsZSB2ZXJzaW9uKSAgKi8KLXN0YXRpYyBpbmxpbmUgc2l6 ZV90IF9HTF9BUkdfTk9OTlVMTCAoKDQpKQorc3RhdGljIGlubGluZSBzaXplX3QKIGFjZXhl Y190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwK LSAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBs b25nZXN0KQorICAgICAgICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoLCBib29s IGxvbmdlc3QpCiB7CiAgIHN0cnVjdCB0cmllICogY29uc3QgKm5leHQ7CiAgIHN0cnVjdCB0 cmllIGNvbnN0ICp0cmllLCAqYWNjZXB0OwpAQCAtOTQ1LDE1ICs5MzYsMTEgQEAgYWNleGVj X3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAog ICBzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZTsKICAgY2hhciBjb25zdCAqdHJhbnM7CiAKLSNp ZmRlZiBsaW50Ci0gIGFjY2VwdCA9IE5VTEw7Ci0jZW5kaWYKLQotICAvKiBJbml0aWFsaXpl IHJlZ2lzdGVyIGNvcGllcyBhbmQgbG9vayBmb3IgZWFzeSB3YXlzIG91dC4gKi8KKyAgLyog SW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMgYW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQu ICAqLwogICBpZiAobGVuIDwga3dzZXQtPm1pbmQpCi0gICAgcmV0dXJuIC0xOworICAgIHJl dHVybiBTSVpFX01BWDsKICAgaWYgKCFrd3NldC0+dHJhbnMgJiYga3dzZXQtPm1heGQgPT0g MSAmJiBrd3NldC0+d29yZHMgPT0gMikKLSAgICByZXR1cm4gbWVtY2hyMl9rd3NldCAodGV4 dCwgbGVuLCBrd3NldCwga3dzbWF0Y2gpOworICAgIHJldHVybiBtZW1vZmYyX2t3c2V0ICh0 ZXh0LCBsZW4sIGt3c2V0LCBrd3NtYXRjaCk7CiAKICAgbmV4dCA9IGt3c2V0LT5uZXh0Owog ICB0cmFucyA9IGt3c2V0LT50cmFuczsKQEAgLTEwMDcsMTQgKzk5NCwxNCBAQCBhY2V4ZWNf dHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sCiAg ICAgICB3aGlsZSAoIXRyaWUpCiAgICAgICAgIHsKICAgICAgICAgICBpZiAodHAgPj0gbGlt KQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIFNJWkVfTUFY OwogICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKICAgICAg ICAgfQogCiAgICAgICBpZiAodHJpZS0+YWNjZXB0aW5nKQogICAgICAgICBnb3RvIG1hdGNo OwogICAgICAgaWYgKHRwID49IGxpbSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBy ZXR1cm4gU0laRV9NQVg7CiAgICAgICBjID0gdHIgKHRyYW5zLCAqdHArKyk7CiAgICAgICB0 cmVlID0gdHJpZS0+bGlua3M7CiAKQEAgLTEwMjYsMjYgKzEwMTMsMjYgQEAgYWNleGVjX3Ry YW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogICAg ICAgICAgICAgICBpZiAodHJpZS0+YWNjZXB0aW5nKQogICAgICAgICAgICAgICAgIGdvdG8g bWF0Y2g7CiAgICAgICAgICAgICAgIGlmICh0cCA+PSBsaW0pCi0gICAgICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiBTSVpFX01BWDsKICAgICAgICAg ICAgICAgYyA9IHRyICh0cmFucywgKnRwKyspOwogICAgICAgICAgICAgICB0cmVlID0gdHJp ZS0+bGlua3M7Ci0gICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAg ICAgICAgIGVsc2UgaWYgKGMgPCB0cmVlLT5sYWJlbCkKLSAgICAgICAgICAgIHRyZWUgPSB0 cmVlLT5sbGluazsKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmVlID0gdHJlZS0+ cmxpbms7Ci0gICAgICAgICAgaWYgKHRyZWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgICB0cmllID0gdHJpZS0+ZmFpbDsKLSAgICAgICAgICBpZiAoIXRyaWUpCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICBpZiAodHJpZS0+YWNjZXB0aW5nKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICAtLXRwOwotICAgICAgICAgICAgICBnb3RvIG1hdGNo OworICAgICAgICAgICAgICB0cmVlID0gYyA8IHRyZWUtPmxhYmVsID8gdHJlZS0+bGxpbmsg OiB0cmVlLT5ybGluazsKKyAgICAgICAgICAgICAgaWYgKCEgdHJlZSkKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICB0cmllID0gdHJpZS0+ZmFpbDsKKyAgICAgICAg ICAgICAgICAgIGlmICghdHJpZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICBpZiAodHJpZS0+YWNjZXB0aW5nKQorICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgLS10cDsKKyAgICAgICAgICAgICAgICAgICAg ICBnb3RvIG1hdGNoOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICB0cmVlID0gdHJpZS0+bGlua3M7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg fQotICAgICAgICAgIHRyZWUgPSB0cmllLT5saW5rczsKICAgICAgICAgfQogCiAgICAgICB0 cmllID0gbmV4dFtjXTsKQEAgLTEwNTMsNyArMTA0MCw3IEBAIGFjZXhlY190cmFucyAoa3dz ZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwKIAogIG1hdGNoOgog ICBhY2NlcHQgPSB0cmllOwotICB3aGlsZSAoYWNjZXB0LT5hY2NlcHRpbmcgPT0gKHNpemVf dCkgLTEpCisgIHdoaWxlIChhY2NlcHQtPmFjY2VwdGluZyA9PSBTSVpFX01BWCkKICAgICBh Y2NlcHQgPSBhY2NlcHQtPmZhaWw7CiAgIGxlZnQgPSB0cCAtIGFjY2VwdC0+ZGVwdGg7CiAK QEAgLTEwNjcsMjMgKzEwNTQsMjEgQEAgYWNleGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBj aGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogICAgICAgICAgIGMgPSB0ciAodHJhbnMs ICp0cCsrKTsKICAgICAgICAgICB0cmVlID0gdHJpZS0+bGlua3M7CiAgICAgICAgICAgd2hp bGUgKHRyZWUgJiYgYyAhPSB0cmVlLT5sYWJlbCkKLSAgICAgICAgICAgIGlmIChjIDwgdHJl ZS0+bGFiZWwpCi0gICAgICAgICAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKLSAgICAgICAg ICAgIGVsc2UKLSAgICAgICAgICAgICAgdHJlZSA9IHRyZWUtPnJsaW5rOworICAgICAgICAg ICAgdHJlZSA9IGMgPCB0cmVlLT5sYWJlbCA/IHRyZWUtPmxsaW5rIDogdHJlZS0+cmxpbms7 CiAgICAgICAgICAgaWYgKCF0cmVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg dHJpZSA9IHRyZWUtPnRyaWU7Ci0gICAgICAgICAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCi0g ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICBhY2NlcHQxID0gdHJpZTsKLSAgICAg ICAgICB3aGlsZSAoYWNjZXB0MS0+YWNjZXB0aW5nID09IChzaXplX3QpIC0xKQotICAgICAg ICAgICAgYWNjZXB0MSA9IGFjY2VwdDEtPmZhaWw7Ci0gICAgICAgICAgbGVmdDEgPSB0cCAt IGFjY2VwdDEtPmRlcHRoOwotICAgICAgICAgIGlmIChsZWZ0MSA8PSBsZWZ0KQorICAgICAg ICAgIGlmICh0cmllLT5hY2NlcHRpbmcpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg IGxlZnQgPSBsZWZ0MTsKLSAgICAgICAgICAgICAgYWNjZXB0ID0gYWNjZXB0MTsKKyAgICAg ICAgICAgICAgYWNjZXB0MSA9IHRyaWU7CisgICAgICAgICAgICAgIHdoaWxlIChhY2NlcHQx LT5hY2NlcHRpbmcgPT0gU0laRV9NQVgpCisgICAgICAgICAgICAgICAgYWNjZXB0MSA9IGFj Y2VwdDEtPmZhaWw7CisgICAgICAgICAgICAgIGxlZnQxID0gdHAgLSBhY2NlcHQxLT5kZXB0 aDsKKyAgICAgICAgICAgICAgaWYgKGxlZnQxIDw9IGxlZnQpCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQxOworICAgICAgICAgICAgICAgICAg YWNjZXB0ID0gYWNjZXB0MTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg ICAgICAgIH0KICAgICB9CkBAIC0xMDk4LDcgKzEwODMsNyBAQCBhY2V4ZWNfdHJhbnMgKGt3 c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sCiAvKiBIYWlyeSBt dWx0aXBsZSBzdHJpbmcgc2VhcmNoIHdpdGggQWhvLUNvcmFzaWNrIGFsZ29yaXRobS4gICov CiBzdGF0aWMgc2l6ZV90CiBhY2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRl eHQsIHNpemVfdCBzaXplLAotICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoLCBi b29sIGNvbnN0IGxvbmdlc3QpCisgICAgICAgIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gs IGJvb2wgbG9uZ2VzdCkKIHsKICAgLyogSGVscCB0aGUgY29tcGlsZXIgaW5saW5lIGJtZXhl Y190cmFucyBpbiB0d28gd2F5cywgZGVwZW5kaW5nIG9uCiAgICAgIHdoZXRoZXIga3dzZXQt PnRyYW5zIGlzIG51bGwuICAqLwpAQCAtMTEwOSwxMiArMTA5NCwxMiBAQCBhY2V4ZWMgKGt3 c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplLAogCiAvKiBTZWFy Y2ggVEVYVCBmb3IgYSBtYXRjaCBvZiBhbnkgbWVtYmVyIG9mIEtXU0VULgogICAgUmV0dXJu IHRoZSBvZmZzZXQgKGludG8gVEVYVCkgb2YgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIG1hdGNo aW5nIHN1YnN0cmluZywKLSAgIG9yIChzaXplX3QpIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5k LiAgVXBvbiBhIG1hdGNoLCBzdG9yZSBkZXRhaWxzIGluCisgICBvciBTSVpFX01BWCBpZiBu byBtYXRjaCBpcyBmb3VuZC4gIFVwb24gYSBtYXRjaCwgc3RvcmUgZGV0YWlscyBpbgogICAg KktXU01BVENIOiBpbmRleCBvZiBtYXRjaGVkIGtleXdvcmQsIHN0YXJ0IG9mZnNldCAoc2Ft ZSBhcyB0aGUgcmV0dXJuCiAgICB2YWx1ZSksIGFuZCBsZW5ndGguICAqLwogc2l6ZV90CiBr d3NleGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSwK LSAgICAgICAgIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gsIGJvb2wgY29uc3QgbG9uZ2Vz dCkKKyAgICAgICAgIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gsIGJvb2wgbG9uZ2VzdCkK IHsKICAgcmV0dXJuIGt3c2V0LT5rd3NleGVjIChrd3NldCwgdGV4dCwgc2l6ZSwga3dzbWF0 Y2gsIGxvbmdlc3QpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2t3c2V0LmggYi9zcmMva3dzZXQu aAppbmRleCA1OWVmYTc0Li5kMjcwMGU5IDEwMDY0NAotLS0gYS9zcmMva3dzZXQuaAorKysg Yi9zcmMva3dzZXQuaApAQCAtMzksNyArMzksNyBAQCB0eXBlZGVmIHN0cnVjdCBrd3NldCAq a3dzZXRfdDsKIC8qIFJldHVybiBhbiBvcGFxdWUgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9j YXRlZCBrZXl3b3JkIHNldC4gIEEgbm9ubnVsbCBhcmcKICAgIHNwZWNpZmllcyBhIHRhYmxl IG9mIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGwKICAgIHBh dHRlcm4gYW5kIHNlYXJjaCB0ZXh0LiAgKi8KLWV4dGVybiBrd3NldF90IGt3c2FsbG9jIChj aGFyIGNvbnN0ICosIGJvb2wgY29uc3QpOworZXh0ZXJuIGt3c2V0X3Qga3dzYWxsb2MgKGNo YXIgY29uc3QgKiwgYm9vbCk7CiAKIC8qIEluY3JlbWVudGFsbHkgZXh0ZW5kIHRoZSBrZXl3 b3JkIHNldCB0byBpbmNsdWRlIHRoZSBnaXZlbiBzdHJpbmcuCiAgICBSZW1lbWJlciBhbiBp bmRleCBudW1iZXIgZm9yIGVhY2gga2V5d29yZCBpbmNsdWRlZCBpbiB0aGUgc2V0LiAgKi8K QEAgLTU0LDggKzU0LDggQEAgZXh0ZXJuIHZvaWQga3dzcHJlcCAoa3dzZXRfdCk7CiAgICB0 aGUgbWF0Y2hpbmcgc3Vic3RyaW5nIGluIHRoZSBpbnRlZ2VyIGl0IHBvaW50cyB0by4gIFNp bWlsYXJseSwKICAgIGlmIGZvdW5kaW5kZXggaXMgbm9uLU5VTEwsIHN0b3JlIHRoZSBpbmRl eCBvZiB0aGUgcGFydGljdWxhcgogICAga2V5d29yZCBmb3VuZCB0aGVyZWluLiAqLwotZXh0 ZXJuIHNpemVfdCBrd3NleGVjIChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3Ry dWN0IGt3c21hdGNoICosCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uc3QpIF9H TF9BUkdfTk9OTlVMTCAoKDQpKTsKK2V4dGVybiBzaXplX3Qga3dzZXhlYyAoa3dzZXRfdCwg Y2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqLCBib29sKQorICBfR0xf QVJHX05PTk5VTEwgKCg0KSk7CiAKIC8qIERlYWxsb2NhdGUgdGhlIGdpdmVuIGtleXdvcmQg c2V0IGFuZCBhbGwgaXRzIGFzc29jaWF0ZWQgc3RvcmFnZS4gKi8KIGV4dGVybiB2b2lkIGt3 c2ZyZWUgKGt3c2V0X3QpOwotLSAKMi41LjUKCg== --------------9CF01497E6D77B158825EEE3 Content-Type: application/x-patch; name="0002-grep-simplify-F-Aho-Corasick-a-bit.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-grep-simplify-F-Aho-Corasick-a-bit.patch" RnJvbSA4MWNjYmFhMDA5ZDQxNDc4NDBmNDgwOTkxZWQ3NDg0NTg0MWE0MzZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUaHUsIDIgSnVuIDIwMTYgMTU6MjQ6MzggLTA3MDAKU3ViamVjdDogW1BBVENI IDIvM10gZ3JlcDogc2ltcGxpZnkgLUYgQWhvLUNvcmFzaWNrIGEgYml0CgpUaGlzIHJlbW92 ZXMgc29tZSB0dW5pbmcgdGhhdCBjb21wbGljYXRlcyB0aGUgY29kZSB3aXRob3V0IHByb3Zp ZGluZwpwZXJmb3JtYW5jZSBiZW5lZml0cyB0aGF0IEkgY291bGQgbWVhc3VyZSAoR0NDIDYu MSwgeDg2LTY0KS4KKGFjZXhlY190cmFucyk6IERvIG5vdCBoYW5kLXVucm9sbC4gIFVuZHVw bGljYXRlIHRoZSBjb2RlIGZvciBhCnRyYW5zaXRpb24gc3RlcC4KCiogc3JjL2t3c2V0LmMg KHN0cnVjdCBrd3NldC5rd3NleGVjLCBibWV4ZWMsIGFjZXhlY190cmFucywgYWNleGVjKQot LS0KIHNyYy9rd3NldC5jIHwgMTAyICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI3IGluc2Vy dGlvbnMoKyksIDc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9rd3NldC5jIGIv c3JjL2t3c2V0LmMKaW5kZXggZDE0OTcyZi4uNzM5MTk5MCAxMDA2NDQKLS0tIGEvc3JjL2t3 c2V0LmMKKysrIGIvc3JjL2t3c2V0LmMKQEAgLTkzMiwxMTAgKzkzMiw2MiBAQCBhY2V4ZWNf dHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sCiAg IHN0cnVjdCB0cmllICogY29uc3QgKm5leHQ7CiAgIHN0cnVjdCB0cmllIGNvbnN0ICp0cmll LCAqYWNjZXB0OwogICBjaGFyIGNvbnN0ICp0cCwgKmxlZnQsICpsaW07Ci0gIHVuc2lnbmVk IGNoYXIgYzsKICAgc3RydWN0IHRyZWUgY29uc3QgKnRyZWU7CiAgIGNoYXIgY29uc3QgKnRy YW5zOwogCiAgIC8qIEluaXRpYWxpemUgcmVnaXN0ZXIgY29waWVzIGFuZCBsb29rIGZvciBl YXN5IHdheXMgb3V0LiAgKi8KICAgaWYgKGxlbiA8IGt3c2V0LT5taW5kKQogICAgIHJldHVy biBTSVpFX01BWDsKLSAgaWYgKCFrd3NldC0+dHJhbnMgJiYga3dzZXQtPm1heGQgPT0gMSAm JiBrd3NldC0+d29yZHMgPT0gMikKKyAgdHJhbnMgPSBrd3NldC0+dHJhbnM7CisgIGlmICgh dHJhbnMgJiYga3dzZXQtPm1heGQgPT0gMSAmJiBrd3NldC0+d29yZHMgPT0gMikKICAgICBy ZXR1cm4gbWVtb2ZmMl9rd3NldCAodGV4dCwgbGVuLCBrd3NldCwga3dzbWF0Y2gpOwogCiAg IG5leHQgPSBrd3NldC0+bmV4dDsKLSAgdHJhbnMgPSBrd3NldC0+dHJhbnM7CisgIHRyaWUg PSBrd3NldC0+dHJpZTsKICAgbGltID0gdGV4dCArIGxlbjsKICAgdHAgPSB0ZXh0OwogCi0g IGlmIChrd3NldC0+dHJpZS0+YWNjZXB0aW5nKQorICBpZiAoIXRyaWUtPmFjY2VwdGluZykK ICAgICB7Ci0gICAgICB0cmllID0ga3dzZXQtPnRyaWU7Ci0gICAgICBnb3RvIG1hdGNoOwot ICAgIH0KLQotICB0cmllID0gbmV4dFtVKHRyICh0cmFucywgKnRwKyspKV07CisgICAgICB1 bnNpZ25lZCBjaGFyIGMgPSB0ciAodHJhbnMsICp0cCsrKTsKIAotICB3aGlsZSAodHJ1ZSkK LSAgICB7Ci0gICAgICBpZiAodHAgPCBsaW0gLSA4KQorICAgICAgd2hpbGUgKHRydWUpCiAg ICAgICAgIHsKLSAgICAgICAgICB3aGlsZSAoIXRyaWUpCisgICAgICAgICAgd2hpbGUgKCEg KHRyaWUgPSBuZXh0W2NdKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdHJpZSA9 IG5leHRbVSh0ciAodHJhbnMsICp0cCsrKSldOwotICAgICAgICAgICAgICBpZiAodHJpZSkK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgdHJpZSA9IG5leHRbVSh0 ciAodHJhbnMsICp0cCsrKSldOwotICAgICAgICAgICAgICBpZiAodHJpZSkKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgdHJpZSA9IG5leHRbVSh0ciAodHJhbnMs ICp0cCsrKSldOwotICAgICAgICAgICAgICBpZiAodHJpZSkKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgICAgdHJpZSA9IG5leHRbVSh0ciAodHJhbnMsICp0cCsrKSld OwotICAgICAgICAgICAgICBpZiAodHJpZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgdHJpZSA9IG5leHRbVSh0ciAodHJhbnMsICp0cCsrKSldOwotICAgICAg ICAgICAgICBpZiAodHJpZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgdHJpZSA9IG5leHRbVSh0ciAodHJhbnMsICp0cCsrKSldOwotICAgICAgICAgICAgICBp ZiAodHJpZSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgdHJpZSA9 IG5leHRbVSh0ciAodHJhbnMsICp0cCsrKSldOwotICAgICAgICAgICAgICBpZiAodHJpZSkK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgdHJpZSA9IG5leHRbVSh0 ciAodHJhbnMsICp0cCsrKSldOwotICAgICAgICAgICAgICBpZiAodHJpZSkKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgaWYgKHRwID49IGxpbSAtIDgpCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRy YW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRwID49IGxpbSkKKyAgICAgICAg ICAgICAgICByZXR1cm4gU0laRV9NQVg7CisgICAgICAgICAgICAgIGMgPSB0ciAodHJhbnMs ICp0cCsrKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICB3aGlsZSAoIXRy aWUpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAodHAgPj0gbGltKQotICAgICAgICAgICAg cmV0dXJuIFNJWkVfTUFYOwotICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAq dHArKykpXTsKLSAgICAgICAgfQogCi0gICAgICBpZiAodHJpZS0+YWNjZXB0aW5nKQotICAg ICAgICBnb3RvIG1hdGNoOwotICAgICAgaWYgKHRwID49IGxpbSkKLSAgICAgICAgcmV0dXJu IFNJWkVfTUFYOwotICAgICAgYyA9IHRyICh0cmFucywgKnRwKyspOwotICAgICAgdHJlZSA9 IHRyaWUtPmxpbmtzOwotCi0gICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgICAgewotICAgICAg ICAgIGlmIChjID09IHRyZWUtPmxhYmVsKQorICAgICAgICAgIHdoaWxlICh0cnVlKQogICAg ICAgICAgICAgewotICAgICAgICAgICAgICB0cmllID0gdHJlZS0+dHJpZTsKICAgICAgICAg ICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKICAgICAgICAgICAgICAgICBnb3RvIG1hdGNo OwogICAgICAgICAgICAgICBpZiAodHAgPj0gbGltKQogICAgICAgICAgICAgICAgIHJldHVy biBTSVpFX01BWDsKICAgICAgICAgICAgICAgYyA9IHRyICh0cmFucywgKnRwKyspOwotICAg ICAgICAgICAgICB0cmVlID0gdHJpZS0+bGlua3M7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB0cmVlID0gYyA8IHRyZWUt PmxhYmVsID8gdHJlZS0+bGxpbmsgOiB0cmVlLT5ybGluazsKLSAgICAgICAgICAgICAgaWYg KCEgdHJlZSkKKworICAgICAgICAgICAgICBmb3IgKHRyZWUgPSB0cmllLT5saW5rczsgYyAh PSB0cmVlLT5sYWJlbDsgKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg IHRyaWUgPSB0cmllLT5mYWlsOwotICAgICAgICAgICAgICAgICAgaWYgKCF0cmllKQotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGlmICh0cmllLT5h Y2NlcHRpbmcpCisgICAgICAgICAgICAgICAgICB0cmVlID0gYyA8IHRyZWUtPmxhYmVsID8g dHJlZS0+bGxpbmsgOiB0cmVlLT5ybGluazsKKyAgICAgICAgICAgICAgICAgIGlmICghIHRy ZWUpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAtLXRw OwotICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICAgICAg ICAgICAgdHJpZSA9IHRyaWUtPmZhaWw7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0 cmllKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X3RyaWU7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKyAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLS10cDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICB0cmVlID0gdHJpZS0+bGlua3M7CiAgICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIHRyZWUgPSB0cmllLT5saW5rczsKICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHRyaWUgPSB0cmVlLT50cmllOwogICAg ICAgICAgICAgfQorICAgICAgICBuZXh0X3RyaWU6OwogICAgICAgICB9Ci0KLSAgICAgIHRy aWUgPSBuZXh0W2NdOwogICAgIH0KIAogIG1hdGNoOgpAQCAtMTA1MSw3ICsxMDAzLDcgQEAg YWNleGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qg bGVuLAogICAgICAgICB7CiAgICAgICAgICAgc3RydWN0IHRyaWUgY29uc3QgKmFjY2VwdDE7 CiAgICAgICAgICAgY2hhciBjb25zdCAqbGVmdDE7Ci0gICAgICAgICAgYyA9IHRyICh0cmFu cywgKnRwKyspOworICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IHRyICh0cmFucywgKnRw KyspOwogICAgICAgICAgIHRyZWUgPSB0cmllLT5saW5rczsKICAgICAgICAgICB3aGlsZSAo dHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQogICAgICAgICAgICAgdHJlZSA9IGMgPCB0cmVl LT5sYWJlbCA/IHRyZWUtPmxsaW5rIDogdHJlZS0+cmxpbms7Ci0tIAoyLjUuNQoK --------------9CF01497E6D77B158825EEE3 Content-Type: application/x-patch; name="0003-maint-correct-attribution.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-maint-correct-attribution.patch" RnJvbSAzZDViODk4OTU4YjkyMjk5NTkzNWY1ZDgwM2MyNzE2OTZkMTI3YThhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUaHUsIDIgSnVuIDIwMTYgMTU6Mzc6MTAgLTA3MDAKU3ViamVjdDogW1BBVENI IDMvM10gbWFpbnQ6IGNvcnJlY3QgYXR0cmlidXRpb24KCiogYnVpbGQtYXV4L2dpdC1sb2ct Zml4OiBGaXggYXR0cmlidXRpb24gb2YgcHJpbWFyeSBBaG8tQ29yYXNpY2sgcGF0Y2gKLS0t CiBidWlsZC1hdXgvZ2l0LWxvZy1maXggfCA0ICsrKysKIDEgZmlsZSBjaGFuZ2VkLCA0IGlu c2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9idWlsZC1hdXgvZ2l0LWxvZy1maXggYi9idWls ZC1hdXgvZ2l0LWxvZy1maXgKaW5kZXggYjA2ODAzYS4uOTA5YTA2ZiAxMDA2NDQKLS0tIGEv YnVpbGQtYXV4L2dpdC1sb2ctZml4CisrKyBiL2J1aWxkLWF1eC9naXQtbG9nLWZpeApAQCAt Miw2ICsyLDEwIEBACiAjIG9wdGlvbi4gIEl0IHNwZWNpZmllcyB3aGF0IGNoYW5nZXMgdG8g bWFrZSB0byBlYWNoIGdpdmVuIFNIQTEncyBjb21taXQKICMgbG9nIGFuZCBtZXRhZGF0YSwg dXNpbmcgUGVybC1ldmFsJ2FibGUgZXhwcmVzc2lvbnMuCiAKK2EzZDQyZGU0ODNhMjljMWRh MzgxZjVjM2RhZDg3Y2JiYzg2YTVjNzAKKyMgQ29ycmVjdCB0aGUgYXV0aG9yOgorcy9QYXVs IEVnZ2VydCAgPGVnZ2VydFxAY3MudWNsYS5lZHU+L05vcmloaXJvIFRhbmFrYSAgPG5vcml0 bmtcQGtjbi5uZS5qcD4vCisKIDA3NDg0MmQzZTMwNTQ3MTRhNDk1MjUyZTU4Mjg4NmYwZTRh Y2U0ZTQKICMgQ29ycmVjdCBzcGVsbGluZyBvZiBuYW1lOgogcy9NZXJjZXIvTWVpeG5lci8K LS0gCjIuNS41Cgo= --------------9CF01497E6D77B158825EEE3-- ------------=_1464907561-18398-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 12 Dec 2014 15:58:41 +0000 Received: from localhost ([127.0.0.1]:44101 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XzSc3-0005aV-4n for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:41 -0500 Received: from eggs.gnu.org ([208.118.235.92]:56432) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XzSbz-0005aE-Q7 for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XzSbm-0002zL-Pl for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:30 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50 autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:43243) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbm-0002z9-LH for submit@debbugs.gnu.org; Fri, 12 Dec 2014 10:58:22 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbf-0007KD-6y for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XzSbV-0002vb-EE for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:15 -0500 Received: from mailgw04.kcn.ne.jp ([61.86.7.211]:57111) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XzSbU-0002us-II for bug-grep@gnu.org; Fri, 12 Dec 2014 10:58:05 -0500 Received: from imp03 (mailgw7.kcn.ne.jp [61.86.15.238]) by mailgw04.kcn.ne.jp (Postfix) with ESMTP id E6A446C11F3 for ; Sat, 13 Dec 2014 00:58:01 +0900 (JST) Received: from mail07.kcn.ne.jp ([61.86.6.186]) by imp03 with bizsmtp id Sfy11p00M40oyB901fy15C; Sat, 13 Dec 2014 00:58:01 +0900 X-OrgRCPT: bug-grep@gnu.org Received: from [10.120.1.53] (i118-21-128-66.s30.a048.ap.plala.or.jp [118.21.128.66]) by mail07.kcn.ne.jp (Postfix) with ESMTPA id 6A1F1D5002B for ; Sat, 13 Dec 2014 00:58:01 +0900 (JST) Date: Sat, 13 Dec 2014 00:58:02 +0900 From: Norihiro Tanaka To: Subject: [PATCH 1/3] grep: use Aho-Corasick algorithm to search multiple fixed words Message-Id: <20141213005802.8CF2.27F6AC2D@kcn.ne.jp> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------_548B0F93000000008CED_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit X-Mailer: Becky! ver. 2.65.07 [ja] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Hi, Searching multiple fixed words, grep uses Commentz-Walter algorithm, but it is very slow for a worst case e.g. as following. It is O(m*n). - input: yes `printf %040d` | head -10000000 - word1: x0000000000000000000 - word2: x This change uses Aho-Corasick algorithm instead of Commentz-Walter algorithm to search multiple fixed words. It uses a function to build tries which has been already defined for Commentz-Walter algorithm in kwset.c and which has been already high quality. I see 7x speed-up even for a typical case on Fedora 21 with a 3.2GHz i5 by this change. First without this change (best-of-5 trials): find /usr/share/doc/ -type f | LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null real 11.37 user 11.03 sys 0.24 Next with this change (best-of-5 trials): find /usr/share/doc/ -type f | LC_ALL=C time -p xargs.sh src/grep -Ff /usr/share/dict/linux.words >/dev/null real 1.49 user 1.31 sys 0.15 I also wrote two additional patches. Second, If search multiple fixed words, grep immediately returns without longest match if not needed. Without this change, grep tries longest match for multiple words even if not needed. Third, use memchr2 for two patterns of a character. Thanks, Norihiro --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0001-grep-use-Aho-Corasick-algorithm-to-search-multiple-f.patch" Content-Disposition: attachment; filename="0001-grep-use-Aho-Corasick-algorithm-to-search-multiple-f.patch" Content-Transfer-Encoding: base64 RnJvbSA3NTVmMzlkNGMyZTI4MjJkNGMyNDFlMzU3ZDI1OGU1YjI1YmEwZDA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE0OjQ3OjQ1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAxLzNd IGdyZXA6IHVzZSBBaG8tQ29yYXNpY2sgYWxnb3JpdGhtIHRvIHNlYXJjaCBtdWx0aXBsZSBmaXhl ZAogd29yZHMKClNlYXJjaGluZyBtdWx0aXBsZSBmaXhlZCB3b3JkcywgZ3JlcCB1c2VzIENvbW1l bnR6LVdhbHRlciBhbGdvcml0aG0sIGJ1dAppdCBpcyB2ZXJ5IHNsb3cgZm9yIGEgd29yc3QgY2Fz ZSBlLmcuIGFzIGZvbGxvd2luZy4gIEl0IGlzIE8obSpuKS4KCiAgLSBpbnB1dDogeWVzIGBwcmlu dGYgJTA0MGRgIHwgaGVhZCAtMTAwMDAwMDAKICAtIHdvcmQxOiB4MDAwMDAwMDAwMDAwMDAwMDAw MAogIC0gd29yZDI6IHgKClRoaXMgY2hhbmdlIHVzZXMgQWhvLUNvcmFzaWNrIGFsZ29yaXRobSBp bnN0ZWFkIG9mIENvbW1lbnR6LVdhbHRlcgphbGdvcml0aG0gdG8gc2VhcmNoIG11bHRpcGxlIGZp eGVkIHdvcmRzLiAgSXQgdXNlcyBhIGZ1bmN0aW9uIHRvIGJ1aWxkCnRyaWVzIHdoaWNoIGhhcyBi ZWVuIGFscmVhZHkgZGVmaW5lZCBmb3IgQ29tbWVudHotV2FsdGVyIGFsZ29yaXRobSBpbgprd3Nl dC5jIGFuZCB3aGljaCBoYXMgYmVlbiBhbHJlYWR5IGhpZ2ggcXVhbGl0eS4KCkkgc2VlIDd4IHNw ZWVkLXVwIGV2ZW4gZm9yIGEgdHlwaWNhbCBjYXNlIG9uIEZlZG9yYSAyMSB3aXRoIGEgMy4yR0h6 IGk1CmJ5IHRoaXMgY2hhbmdlLgoKRmlyc3Qgd2l0aG91dCB0aGlzIGNoYW5nZSAoYmVzdC1vZi01 IHRyaWFscyk6CgogICAgZmluZCAvdXNyL3NoYXJlL2RvYy8gLXR5cGUgZiB8CiAgICBMQ19BTEw9 QyB0aW1lIC1wIHhhcmdzLnNoIHNyYy9ncmVwIC1GZiAvdXNyL3NoYXJlL2RpY3QvbGludXgud29y ZHMgPi9kZXYvbnVsbAogICAgICAgIHJlYWwgMTEuMzcgICAgICB1c2VyIDExLjAzICAgICAgc3lz IDAuMjQKCk5leHQgd2l0aCB0aGlzIGNoYW5nZSAoYmVzdC1vZi01IHRyaWFscyk6CgogICAgZmlu ZCAvdXNyL3NoYXJlL2RvYy8gLXR5cGUgZiB8CiAgICBMQ19BTEw9QyAgdGltZSAtcCB4YXJncy5z aCBzcmMvZ3JlcCAtRmYgL3Vzci9zaGFyZS9kaWN0L2xpbnV4LndvcmRzID4vZGV2L251bGwKICAg ICAgICByZWFsIDEuNDkgICAgICAgdXNlciAxLjMxICAgICAgIHN5cyAwLjE1CgoqIHNyYy9rd3Nl dC5jIChzdHJ1Y3Qga3dzZXQpOiBBZGQgYSBuZXcgbWVtYmVyICdtb2RlJy4KKGt3c2FsbG9jKTog VXNlIGl0LgpBbGwgY2FsbGVycyBhcmUgY2hhbmdlZC4KKGt3c2luY3IpOiBVc2luZyBBaG8tQ29y YXNpY2sgYWxnb3JpdGhtLCBidWlsZCB0cmllcyBpbiBub3JtYWwgb3JkZXIuCihhY2V4ZWNfdHJh bnMsIGFjZXhlYyk6IEFkZCBhIG5ldyBmdW5jdGlvbi4KKGt3c2V4ZWMpOiBVc2UgaXQuCiogc3Jj L2t3c2V0LmggKGt3c2FsbG9jKTogVXBkYXRlIGEgcHJvdG90eXBlLgoqIE5FV1MgKEltcHJvdmVt ZW50cyk6IE1lbnRpb24gaXQuCi0tLQogTkVXUyAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL2t3 c2V0LmMgICAgICAgfCAzMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tCiBzcmMva3dzZXQuaCAgICAgICB8ICAgMyArLQogc3JjL3NlYXJjaHV0 aWxzLmMgfCAgIDQgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMjgyIGluc2VydGlvbnMoKyksIDU2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDYxMzhjNGUuLjY1MzIx M2EgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMiw2ICsyLDExIEBAIEdOVSBncmVw IE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGluZSAtKi0K IAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA/Lj8gKD8/Pz8tPz8tPz8pIFs/XQog CisqKiBJbXByb3ZlbWVudHMKKworICBncmVwIC1GIGlzIG5vdyB0eXBpY2FsbHkgNyB0aW1lcyBm YXN0ZXIgZm9yIGEgbG90IG9mIHdvcmRzLiAgVGhlCisgIGltcHJvdmVtZW50IHJlcGxhY2UgQ29t bWVudHotV2FsdGVyIGFsZ29yaXRobSB3aGljaCBoYXMgYmVlbiB1c2VkIGZvcgorICBhIGxvbmcg dGltZSB0byBBaG8tQ29yYXNpY2sgYWxnb3JpdGhtLgogCiAqIE5vdGV3b3J0aHkgY2hhbmdlcyBp biByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCiAKZGlmZiAtLWdpdCBhL3NyYy9r d3NldC5jIGIvc3JjL2t3c2V0LmMKaW5kZXggNmQyMTg5My4uOTU4NWYwOCAxMDA2NDQKLS0tIGEv c3JjL2t3c2V0LmMKKysrIGIvc3JjL2t3c2V0LmMKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2luY2x1 ZGUgImt3c2V0LmgiCiAKLSNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+ CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSAic3lzdGVtLmgiCkBAIC02Nyw3ICs2 Niw3IEBAIHN0cnVjdCB0cmVlCiAgIGNoYXIgYmFsYW5jZTsJCQkvKiBEaWZmZXJlbmNlIGluIGRl cHRocyBvZiBzdWJ0cmVlcy4gKi8KIH07CiAKLS8qIE5vZGUgb2YgYSB0cmllIHJlcHJlc2VudGlu ZyBhIHNldCBvZiByZXZlcnNlZCBrZXl3b3Jkcy4gKi8KKy8qIE5vZGUgb2YgYSB0cmllIHJlcHJl c2VudGluZyBhIHNldCBvZiBrZXl3b3Jkcy4gKi8KIHN0cnVjdCB0cmllCiB7CiAgIHNpemVfdCBh Y2NlcHRpbmc7CQkvKiBXb3JkIGluZGV4IG9mIGFjY2VwdGVkIHdvcmQsIG9yIHplcm8uICovCkBA IC0xMTEsNiArMTEwLDEzIEBAIHN0cnVjdCBrd3NldAogICAgICBtb3JlIHN1Y2ggbWF0Y2hlczsg ZS5nLiwgR3JlZWsgaGFzIHRocmVlIHNpZ21hIGNoYXJhY3RlcnMgdGhhdAogICAgICBhbGwgbWF0 Y2ggd2hlbiBjYXNlLWZvbGRpbmcuICAqLwogICBpbnQgZ2MxaGVscDsKKworICAvKiBJZiB0cnVl LCBwcmVmZXIgQWhvLUNvcmFzaWNrIGFsZ29yaXRobSB0byBCZWF0ZSBDb21tZW50ei1XYWx0ZXIK KyAgICAgYWxnb3JpdGhtIGluIG11bHRpcGxlIHdvcmRzLiAgKi8KKyAgYm9vbCByZXZlcnNlOwor CisgIC8qIGt3c2V4ZWMoKSBpbXBsZW1lbnRhdGlvbi4gICovCisgIHNpemVfdCAoKmt3c2V4ZWMp IChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOwogfTsK IAogLyogVXNlIFRSQU5TIHRvIHRyYW5zbGl0ZXJhdGUgQy4gIEEgbnVsbCBUUkFOUyBkb2VzIG5v IHRyYW5zbGl0ZXJhdGlvbi4gICovCkBAIC0xMjAsMTAgKzEyNiwxNCBAQCB0ciAoY2hhciBjb25z dCAqdHJhbnMsIGNoYXIgYykKICAgcmV0dXJuIHRyYW5zID8gdHJhbnNbVShjKV0gOiBjOwogfQog CitzdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0 cnVjdCBrd3NtYXRjaCAqKTsKK3N0YXRpYyBzaXplX3QgY3dleGVjIChrd3NldF90LCBjaGFyIGNv bnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOworc3RhdGljIHNpemVfdCBibWV4ZWMg KGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKik7CisKIC8q IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEga2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcg YW4gb3BhcXVlCiAgICBwb2ludGVyIHRvIGl0LiAgKi8KIGt3c2V0X3QKLWt3c2FsbG9jIChjaGFy IGNvbnN0ICp0cmFucykKK2t3c2FsbG9jIChjaGFyIGNvbnN0ICp0cmFucywgYm9vbCBjb25zdCBy ZXZlcnNlKQogewogICBzdHJ1Y3Qga3dzZXQgKmt3c2V0ID0geG1hbGxvYyAoc2l6ZW9mICprd3Nl dCk7CiAKQEAgLTE0MSw2ICsxNTEsMTEgQEAga3dzYWxsb2MgKGNoYXIgY29uc3QgKnRyYW5zKQog ICBrd3NldC0+bWF4ZCA9IC0xOwogICBrd3NldC0+dGFyZ2V0ID0gTlVMTDsKICAga3dzZXQtPnRy YW5zID0gdHJhbnM7CisgIGt3c2V0LT5yZXZlcnNlID0gcmV2ZXJzZTsKKyAgaWYgKHJldmVyc2Up CisgICAga3dzZXQtPmt3c2V4ZWMgPSBjd2V4ZWM7CisgIGVsc2UKKyAgICBrd3NldC0+a3dzZXhl YyA9IGFjZXhlYzsKIAogICByZXR1cm4ga3dzZXQ7CiB9CkBAIC0xNTYsMTMgKzE3MSwxNCBAQCBr d3NpbmNyIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuKQogICBz dHJ1Y3QgdHJpZSAqdHJpZSA9IGt3c2V0LT50cmllOwogICBjaGFyIGNvbnN0ICp0cmFucyA9IGt3 c2V0LT50cmFuczsKIAotICB0ZXh0ICs9IGxlbjsKKyAgaWYgKGt3c2V0LT5yZXZlcnNlKQorICAg IHRleHQgKz0gbGVuOwogCi0gIC8qIERlc2NlbmQgdGhlIHRyaWUgKGJ1aWx0IG9mIHJldmVyc2Vk IGtleXdvcmRzKSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLAorICAvKiBEZXNjZW5kIHRoZSB0cmll IChidWlsdCBvZiBrZXl3b3JkcykgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciwKICAgICAgaW5zdGFs bGluZyBuZXcgbm9kZXMgd2hlbiBuZWNlc3NhcnkuICovCiAgIHdoaWxlIChsZW4tLSkKICAgICB7 Ci0gICAgICB1bnNpZ25lZCBjaGFyIHVjID0gKi0tdGV4dDsKKyAgICAgIHVuc2lnbmVkIGNoYXIg dWMgPSBrd3NldC0+cmV2ZXJzZSA/ICotLXRleHQgOiAqdGV4dCsrOwogICAgICAgdW5zaWduZWQg Y2hhciBsYWJlbCA9IHRyYW5zID8gdHJhbnNbdWNdIDogdWM7CiAKICAgICAgIC8qIERlc2NlbmQg dGhlIHRyZWUgb2Ygb3V0Z29pbmcgbGlua3MgZm9yIHRoaXMgdHJpZSBub2RlLApAQCAtMzExLDE1 ICszMjcsMTUgQEAgZW5xdWV1ZSAoc3RydWN0IHRyZWUgKnRyZWUsIHN0cnVjdCB0cmllICoqbGFz dCkKICAgIHdlbGwgYXMgYSBsYXN0IHJlc29ydCBmYWlsdXJlIG5vZGUuICovCiBzdGF0aWMgdm9p ZAogdHJlZWZhaWxzIChzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwgc3RydWN0IHRyaWUgY29uc3Qg KmZhaWwsCi0gICAgICAgICAgIHN0cnVjdCB0cmllICpyZWNvdXJzZSkKKyAgICAgICAgICAgc3Ry dWN0IHRyaWUgKnJlY291cnNlLCBib29sIHJldmVyc2UpCiB7CiAgIHN0cnVjdCB0cmVlICpsaW5r OwogCiAgIGlmICghdHJlZSkKICAgICByZXR1cm47CiAKLSAgdHJlZWZhaWxzKHRyZWUtPmxsaW5r LCBmYWlsLCByZWNvdXJzZSk7Ci0gIHRyZWVmYWlscyh0cmVlLT5ybGluaywgZmFpbCwgcmVjb3Vy c2UpOworICB0cmVlZmFpbHModHJlZS0+bGxpbmssIGZhaWwsIHJlY291cnNlLCByZXZlcnNlKTsK KyAgdHJlZWZhaWxzKHRyZWUtPnJsaW5rLCBmYWlsLCByZWNvdXJzZSwgcmV2ZXJzZSk7CiAKICAg LyogRmluZCwgaW4gdGhlIGNoYWluIG9mIGZhaWxzIGdvaW5nIGJhY2sgdG8gdGhlIHJvb3QsIHRo ZSBmaXJzdAogICAgICBub2RlIHRoYXQgaGFzIGEgZGVzY2VuZGFudCBvbiB0aGUgY3VycmVudCBs YWJlbC4gKi8KQEAgLTMzNCw2ICszNTAsOCBAQCB0cmVlZmFpbHMgKHN0cnVjdCB0cmVlIGNvbnN0 ICp0cmVlLCBzdHJ1Y3QgdHJpZSBjb25zdCAqZmFpbCwKICAgICAgIGlmIChsaW5rKQogICAgICAg ICB7CiAgICAgICAgICAgdHJlZS0+dHJpZS0+ZmFpbCA9IGxpbmstPnRyaWU7CisgICAgICAgICAg aWYgKCFyZXZlcnNlICYmIGxpbmstPnRyaWUtPmFjY2VwdGluZyAmJiAhdHJlZS0+dHJpZS0+YWNj ZXB0aW5nKQorICAgICAgICAgICAgdHJlZS0+dHJpZS0+YWNjZXB0aW5nID0gLTE7CiAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICBmYWlsID0gZmFpbC0+ZmFpbDsKQEAgLTM5Niw2 ICs0MTQsMzQgQEAga3dzcHJlcCAoa3dzZXRfdCBrd3NldCkKICAgaW50IGk7CiAgIHVuc2lnbmVk IGNoYXIgZGVsdGFidWZbTkNIQVJdOwogICB1bnNpZ25lZCBjaGFyICpkZWx0YSA9IHRyYW5zID8g ZGVsdGFidWYgOiBrd3NldC0+ZGVsdGE7CisgIHN0cnVjdCB0cmllICpjdXJyLCAqbGFzdDsKKwor ICBpZiAoa3dzZXQtPndvcmRzID09IDEpCisgICAgeworICAgICAgaWYgKCFrd3NldC0+cmV2ZXJz ZSkKKyAgICAgICAgeworICAgICAgICAgIGt3c2V0X3QgbmV3X2t3c2V0OworCisgICAgICAgICAg LyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRhbnRzIGluIHRoZSBsZXZlbCBvcmRlciBx dWV1ZS4gICovCisgICAgICAgICAgZm9yIChjdXJyID0gbGFzdCA9IGt3c2V0LT50cmllOyBjdXJy OyBjdXJyID0gY3Vyci0+bmV4dCkKKyAgICAgICAgICAgICBlbnF1ZXVlIChjdXJyLT5saW5rcywg Jmxhc3QpOworCisgICAgICAgICAgLyogTG9va2luZyBmb3IganVzdCBvbmUgc3RyaW5nLiAgRXh0 cmFjdCBpdCBmcm9tIHRoZSB0cmllLiAqLworICAgICAgICAgIGt3c2V0LT50YXJnZXQgPSBvYnN0 YWNrX2FsbG9jICgma3dzZXQtPm9ic3RhY2ssIGt3c2V0LT5taW5kKTsKKyAgICAgICAgICBmb3Ig KGkgPSAwLCBjdXJyID0ga3dzZXQtPnRyaWU7IGkgPCBrd3NldC0+bWluZDsgKytpKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBrd3NldC0+dGFyZ2V0W2ldID0gY3Vyci0+bGlua3MtPmxh YmVsOworICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgIG5ld19rd3NldCA9IGt3c2FsbG9jIChrd3NldC0+dHJhbnMsIHRydWUpOworICAg ICAgICAgIGt3c2luY3IgKG5ld19rd3NldCwga3dzZXQtPnRhcmdldCwga3dzZXQtPm1pbmQpOwor ICAgICAgICAgIG9ic3RhY2tfZnJlZSAoJmt3c2V0LT5vYnN0YWNrLCBOVUxMKTsKKyAgICAgICAg ICAqa3dzZXQgPSAqbmV3X2t3c2V0OworICAgICAgICAgIGZyZWUgKG5ld19rd3NldCk7CisgICAg ICAgIH0KKyAgICAgIGt3c2V0LT5rd3NleGVjID0gYm1leGVjOworICAgIH0KIAogICAvKiBJbml0 aWFsIHZhbHVlcyBmb3IgdGhlIGRlbHRhIHRhYmxlOyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIuICBU aGUKICAgICAgZGVsdGEgZW50cnkgZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHRoZSBzbWFsbGVz dCBkZXB0aCBvZiBhbnkKQEAgLTQwNCw0OSArNDUwLDU0IEBAIGt3c3ByZXAgKGt3c2V0X3Qga3dz ZXQpCiAKICAgLyogVHJhdmVyc2UgdGhlIG5vZGVzIG9mIHRoZSB0cmllIGluIGxldmVsIG9yZGVy LCBzaW11bHRhbmVvdXNseQogICAgICBjb21wdXRpbmcgdGhlIGRlbHRhIHRhYmxlLCBmYWlsdXJl IGZ1bmN0aW9uLCBhbmQgc2hpZnQgZnVuY3Rpb24uICAqLwotICBzdHJ1Y3QgdHJpZSAqY3Vyciwg Kmxhc3Q7CiAgIGZvciAoY3VyciA9IGxhc3QgPSBrd3NldC0+dHJpZTsgY3VycjsgY3VyciA9IGN1 cnItPm5leHQpCiAgICAgewogICAgICAgLyogRW5xdWV1ZSB0aGUgaW1tZWRpYXRlIGRlc2NlbmRh bnRzIGluIHRoZSBsZXZlbCBvcmRlciBxdWV1ZS4gICovCiAgICAgICBlbnF1ZXVlIChjdXJyLT5s aW5rcywgJmxhc3QpOwogCi0gICAgICBjdXJyLT5zaGlmdCA9IGt3c2V0LT5taW5kOwotICAgICAg Y3Vyci0+bWF4c2hpZnQgPSBrd3NldC0+bWluZDsKLQogICAgICAgLyogVXBkYXRlIHRoZSBkZWx0 YSB0YWJsZSBmb3IgdGhlIGRlc2NlbmRhbnRzIG9mIHRoaXMgbm9kZS4gICovCiAgICAgICB0cmVl ZGVsdGEgKGN1cnItPmxpbmtzLCBjdXJyLT5kZXB0aCwgZGVsdGEpOwogCiAgICAgICAvKiBDb21w dXRlIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2Rl LiAgKi8KLSAgICAgIHRyZWVmYWlscyAoY3Vyci0+bGlua3MsIGN1cnItPmZhaWwsIGt3c2V0LT50 cmllKTsKKyAgICAgIHRyZWVmYWlscyAoY3Vyci0+bGlua3MsIGN1cnItPmZhaWwsIGt3c2V0LT50 cmllLCBrd3NldC0+cmV2ZXJzZSk7CiAKLSAgICAgIC8qIFVwZGF0ZSB0aGUgc2hpZnRzIGF0IGVh Y2ggbm9kZSBpbiB0aGUgY3VycmVudCBub2RlJ3MgY2hhaW4KLSAgICAgICAgIG9mIGZhaWxzIGJh Y2sgdG8gdGhlIHJvb3QuICAqLwotICAgICAgc3RydWN0IHRyaWUgKmZhaWw7Ci0gICAgICBmb3Ig KGZhaWwgPSBjdXJyLT5mYWlsOyBmYWlsOyBmYWlsID0gZmFpbC0+ZmFpbCkKKyAgICAgIGlmIChr d3NldC0+cmV2ZXJzZSkKICAgICAgICAgewotICAgICAgICAgIC8qIElmIHRoZSBjdXJyZW50IG5v ZGUgaGFzIHNvbWUgb3V0Z29pbmcgZWRnZSB0aGF0IHRoZSBmYWlsCi0gICAgICAgICAgICAgZG9l c24ndCwgdGhlbiB0aGUgc2hpZnQgYXQgdGhlIGZhaWwgc2hvdWxkIGJlIG5vIGxhcmdlcgotICAg ICAgICAgICAgIHRoYW4gdGhlIGRpZmZlcmVuY2Ugb2YgdGhlaXIgZGVwdGhzLiAgKi8KLSAgICAg ICAgICBpZiAoIWhhc2V2ZXJ5IChmYWlsLT5saW5rcywgY3Vyci0+bGlua3MpKQotICAgICAgICAg ICAgaWYgKGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGggPCBmYWlsLT5zaGlmdCkKLSAgICAgICAg ICAgICAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOwotCi0gICAgICAg ICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQg dGhlCi0gICAgICAgICAgICAgZmFpbCBhbmQgaXRzIGRlc2NlbmRhbnRzIHNob3VsZCBiZSBubyBs YXJnZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4g ICovCi0gICAgICAgICAgaWYgKGN1cnItPmFjY2VwdGluZyAmJiBmYWlsLT5tYXhzaGlmdCA+IGN1 cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGgpCi0gICAgICAgICAgICBmYWlsLT5tYXhzaGlmdCA9IGN1 cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGg7CisgICAgICAgICAgY3Vyci0+c2hpZnQgPSBrd3NldC0+ bWluZDsKKyAgICAgICAgICBjdXJyLT5tYXhzaGlmdCA9IGt3c2V0LT5taW5kOworCisgICAgICAg ICAgLyogVXBkYXRlIHRoZSBzaGlmdHMgYXQgZWFjaCBub2RlIGluIHRoZSBjdXJyZW50IG5vZGUn cyBjaGFpbgorICAgICAgICAgICAgIG9mIGZhaWxzIGJhY2sgdG8gdGhlIHJvb3QuICAqLworICAg ICAgICAgIHN0cnVjdCB0cmllICpmYWlsOworICAgICAgICAgIGZvciAoZmFpbCA9IGN1cnItPmZh aWw7IGZhaWw7IGZhaWwgPSBmYWlsLT5mYWlsKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGhhcyBzb21lIG91dGdvaW5nIGVkZ2UgdGhhdCB0aGUg ZmFpbAorICAgICAgICAgICAgICAgICBkb2Vzbid0LCB0aGVuIHRoZSBzaGlmdCBhdCB0aGUgZmFp bCBzaG91bGQgYmUgbm8gbGFyZ2VyCisgICAgICAgICAgICAgICAgIHRoYW4gdGhlIGRpZmZlcmVu Y2Ugb2YgdGhlaXIgZGVwdGhzLiAgKi8KKyAgICAgICAgICAgICAgaWYgKCFoYXNldmVyeSAoZmFp bC0+bGlua3MsIGN1cnItPmxpbmtzKSkKKyAgICAgICAgICAgICAgICBpZiAoY3Vyci0+ZGVwdGgg LSBmYWlsLT5kZXB0aCA8IGZhaWwtPnNoaWZ0KQorICAgICAgICAgICAgICAgICAgZmFpbC0+c2hp ZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCisgICAgICAgICAgICAgIC8qIElmIHRo ZSBjdXJyZW50IG5vZGUgaXMgYWNjZXB0aW5nIHRoZW4gdGhlIHNoaWZ0IGF0IHRoZQorICAgICAg ICAgICAgICAgICBmYWlsIGFuZCBpdHMgZGVzY2VuZGFudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0 aGFuIHRoZQorICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gICov CisgICAgICAgICAgICAgIGlmIChjdXJyLT5hY2NlcHRpbmcgJiYgZmFpbC0+bWF4c2hpZnQgPiBj dXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoKQorICAgICAgICAgICAgICAgIGZhaWwtPm1heHNoaWZ0 ID0gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog ICAgIH0KIAotICAvKiBUcmF2ZXJzZSB0aGUgdHJpZSBpbiBsZXZlbCBvcmRlciBhZ2FpbiwgZml4 aW5nIHVwIGFsbCBub2RlcyB3aG9zZQotICAgICBzaGlmdCBleGNlZWRzIHRoZWlyIGluaGVyaXRl ZCBtYXhzaGlmdC4gICovCi0gIGZvciAoY3VyciA9IGt3c2V0LT50cmllLT5uZXh0OyBjdXJyOyBj dXJyID0gY3Vyci0+bmV4dCkKKyAgaWYgKGt3c2V0LT5yZXZlcnNlKQogICAgIHsKLSAgICAgIGlm IChjdXJyLT5tYXhzaGlmdCA+IGN1cnItPnBhcmVudC0+bWF4c2hpZnQpCi0gICAgICAgIGN1cnIt Pm1heHNoaWZ0ID0gY3Vyci0+cGFyZW50LT5tYXhzaGlmdDsKLSAgICAgIGlmIChjdXJyLT5zaGlm dCA+IGN1cnItPm1heHNoaWZ0KQotICAgICAgICBjdXJyLT5zaGlmdCA9IGN1cnItPm1heHNoaWZ0 OworICAgICAgLyogVHJhdmVyc2UgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIgYWdhaW4sIGZpeGlu ZyB1cCBhbGwgbm9kZXMgd2hvc2UKKyAgICAgICAgIHNoaWZ0IGV4Y2VlZHMgdGhlaXIgaW5oZXJp dGVkIG1heHNoaWZ0LiAgKi8KKyAgICAgIGZvciAoY3VyciA9IGt3c2V0LT50cmllLT5uZXh0OyBj dXJyOyBjdXJyID0gY3Vyci0+bmV4dCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChjdXJyLT5t YXhzaGlmdCA+IGN1cnItPnBhcmVudC0+bWF4c2hpZnQpCisgICAgICAgICAgICBjdXJyLT5tYXhz aGlmdCA9IGN1cnItPnBhcmVudC0+bWF4c2hpZnQ7CisgICAgICAgICAgaWYgKGN1cnItPnNoaWZ0 ID4gY3Vyci0+bWF4c2hpZnQpCisgICAgICAgICAgICBjdXJyLT5zaGlmdCA9IGN1cnItPm1heHNo aWZ0OworICAgICAgICB9CiAgICAgfQogCiAgIC8qIENyZWF0ZSBhIHZlY3RvciwgaW5kZXhlZCBi eSBjaGFyYWN0ZXIgY29kZSwgb2YgdGhlIG91dGdvaW5nIGxpbmtzCkBAIC00NzAsNiArNTIxLDcg QEAga3dzcHJlcCAoa3dzZXRfdCBrd3NldCkKICAgICAgICAgICBrd3NldC0+dGFyZ2V0W2ldID0g Y3Vyci0+bGlua3MtPmxhYmVsOwogICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgICAg ICB9CisKICAgICAgIC8qIExvb2tpbmcgZm9yIHRoZSBkZWx0YTIgc2hpZnQgdGhhdCB3ZSBtaWdo dCBtYWtlIGFmdGVyIGEKICAgICAgICAgIGJhY2t3YXJkcyBtYXRjaCBoYXMgZmFpbGVkLiAgRXh0 cmFjdCBpdCBmcm9tIHRoZSB0cmllLiAgKi8KICAgICAgIGlmIChrd3NldC0+bWluZCA+IDEpCkBA IC02NjksMTYgKzcyMSwyNiBAQCBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29u c3QgKnRleHQsIHNpemVfdCBzaXplKQogCiAvKiBGYXN0IEJveWVyLU1vb3JlIHNlYXJjaC4gICov CiBzdGF0aWMgc2l6ZV90Ci1ibWV4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQs IHNpemVfdCBzaXplKQorYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBz aXplX3Qgc2l6ZSwKKyAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKIHsKICAgLyog SGVscCB0aGUgY29tcGlsZXIgaW5saW5lIGJtZXhlY190cmFucyBpbiB0d28gd2F5cywgZGVwZW5k aW5nIG9uCiAgICAgIHdoZXRoZXIga3dzZXQtPnRyYW5zIGlzIG51bGwuICAqLwotICByZXR1cm4g KGt3c2V0LT50cmFucworICBzaXplX3QgcmV0ID0gKGt3c2V0LT50cmFucwogICAgICAgICAgID8g Ym1leGVjX3RyYW5zIChrd3NldCwgdGV4dCwgc2l6ZSkKICAgICAgICAgICA6IGJtZXhlY190cmFu cyAoa3dzZXQsIHRleHQsIHNpemUpKTsKKworICBpZiAocmV0ICE9IChzaXplX3QpIC0xKQorICAg IHsKKyAgICAgICBrd3NtYXRjaC0+aW5kZXggPSAwOworICAgICAgIGt3c21hdGNoLT5vZmZzZXRb MF0gPSByZXQ7CisgICAgICAga3dzbWF0Y2gtPnNpemVbMF0gPSBrd3NldC0+bWluZDsKKyAgICB9 CisKKyAgcmV0dXJuIHJldDsKIH0KIAotLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaC4g Ki8KKy8qIEhhaXJ5IG11bHRpcGxlIHN0cmluZyBzZWFyY2ggd2l0aCBDb21tZW50ei1XYWx0ZXIg YWxnb3JpdGhtLiAgKi8KIHN0YXRpYyBzaXplX3QgX0dMX0FSR19OT05OVUxMICgoNCkpCiBjd2V4 ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBr d3NtYXRjaCAqa3dzbWF0Y2gpCiB7CkBAIC04MzQsNiArODk2LDE3NiBAQCBjd2V4ZWMgKGt3c2V0 X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBrd3NtYXRjaCAq a3dzbWF0Y2gpCiAgIHJldHVybiBtY2ggLSB0ZXh0OwogfQogCisvKiBIYWlyeSBtdWx0aXBsZSBz dHJpbmcgc2VhcmNoIHdpdGggQWhvLUNvcmFzaWNrIGFsZ29yaXRobS4KKyAgIChpbmxpbmFibGUg dmVyc2lvbikgICovCitzdGF0aWMgaW5saW5lIHNpemVfdCBfR0xfQVJHX05PTk5VTEwgKCg0KSkK K2FjZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxl biwKKyAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKK3sKKyAgc3RydWN0 IHRyaWUgKiBjb25zdCAqbmV4dDsKKyAgc3RydWN0IHRyaWUgY29uc3QgKnRyaWUsICphY2NlcHQ7 CisgIGNoYXIgY29uc3QgKnRwLCAqbGVmdCwgKmxpbTsKKyAgdW5zaWduZWQgY2hhciBjOworICBz dHJ1Y3QgdHJlZSBjb25zdCAqdHJlZTsKKyAgY2hhciBjb25zdCAqdHJhbnM7CisKKyNpZmRlZiBs aW50CisgIGFjY2VwdCA9IE5VTEw7CisjZW5kaWYKKworICAvKiBJbml0aWFsaXplIHJlZ2lzdGVy IGNvcGllcyBhbmQgbG9vayBmb3IgZWFzeSB3YXlzIG91dC4gKi8KKyAgaWYgKGxlbiA8IGt3c2V0 LT5taW5kKQorICAgIHJldHVybiAtMTsKKworICBuZXh0ID0ga3dzZXQtPm5leHQ7CisgIHRyYW5z ID0ga3dzZXQtPnRyYW5zOworICBsaW0gPSB0ZXh0ICsgbGVuOworICB0cCA9IHRleHQ7CisKKyAg aWYgKGt3c2V0LT50cmllLT5hY2NlcHRpbmcpCisgICAgeworICAgICAgdHJpZSA9IGt3c2V0LT50 cmllOworICAgICAgZ290byBtYXRjaDsKKyAgICB9CisKKyAgdHJpZSA9IG5leHRbVSh0ciAodHJh bnMsICp0cCsrKSldOworCisgIHdoaWxlICh0cnVlKQorICAgIHsKKyAgICAgIGlmICh0cCA8IGxp bSAtIDgpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoIXRyaWUpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAg ICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg IHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRy aWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1Uo dHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHAr KykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAg ICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRy aWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUp CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIg KHRyYW5zLCAqdHArKykpXTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgIHRyaWUgPSBuZXh0W1UodHIgKHRyYW5zLCAqdHArKykp XTsKKyAgICAgICAgICAgICAgaWYgKHRyaWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgIGlmICh0cCA+PSBsaW0gLSA4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICB0cmllID0gbmV4dFtVKHRyICh0cmFucywgKnRwKyspKV07CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKCF0cmllKQorICAgICAgICB7CisgICAgICAg ICAgaWYgKHRwID49IGxpbSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB0cmll ID0gbmV4dFtVKHRyICh0cmFucywgKnRwKyspKV07CisgICAgICAgIH0KKworICAgICAgaWYgKHRy aWUtPmFjY2VwdGluZykKKyAgICAgICAgZ290byBtYXRjaDsKKyAgICAgIGlmICh0cCA+PSBsaW0p CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIGMgPSB0ciAodHJhbnMsICp0cCsrKTsKKyAgICAg IHRyZWUgPSB0cmllLT5saW5rczsKKworICAgICAgd2hpbGUgKHRydWUpCisgICAgICAgIHsKKyAg ICAgICAgICBpZiAoYyA9PSB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgdHJpZSA9IHRyZWUtPnRyaWU7CisgICAgICAgICAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcp CisgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgaWYgKHRwID49IGxp bSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgIGMgPSB0ciAodHJh bnMsICp0cCsrKTsKKyAgICAgICAgICAgICAgdHJlZSA9IHRyaWUtPmxpbmtzOworICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChjIDwgdHJl ZS0+bGFiZWwpCisgICAgICAgICAgICB0cmVlID0gdHJlZS0+bGxpbms7CisgICAgICAgICAgZWxz ZQorICAgICAgICAgICAgdHJlZSA9IHRyZWUtPnJsaW5rOworICAgICAgICAgIGlmICh0cmVlKQor ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgdHJpZSA9IHRyaWUtPmZhaWw7CisgICAg ICAgICAgaWYgKCF0cmllKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgaWYgKHRyaWUt PmFjY2VwdGluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLS10cDsKKyAgICAgICAg ICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB0cmVlID0gdHJpZS0+ bGlua3M7CisgICAgICAgIH0KKworICAgICAgdHJpZSA9IG5leHRbY107CisgICAgfQorCisgbWF0 Y2g6CisgIGFjY2VwdCA9IHRyaWU7CisgIHdoaWxlIChhY2NlcHQtPmFjY2VwdGluZyA9PSAoc2l6 ZV90KSAtMSkKKyAgICBhY2NlcHQgPSBhY2NlcHQtPmZhaWw7CisgIGxlZnQgPSB0cCAtIGFjY2Vw dC0+ZGVwdGg7CisKKyAgLyogVHJ5IGxlZnQtbW9zdCBsb25nZXN0IG1hdGNoLiAgKi8KKyAgd2hp bGUgKHRwIDwgbGltKQorICAgIHsKKyAgICAgIHN0cnVjdCB0cmllIGNvbnN0ICphY2NlcHQxOwor ICAgICAgY2hhciBjb25zdCAqbGVmdDE7CisgICAgICBjID0gdHIgKHRyYW5zLCAqdHArKyk7Cisg ICAgICB0cmVlID0gdHJpZS0+bGlua3M7CisgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUt PmxhYmVsKQorICAgICAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorICAgICAgICAgIHRyZWUgPSB0 cmVlLT5sbGluazsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsK KyAgICAgIGlmICghdHJlZSkKKyAgICAgICAgYnJlYWs7CisgICAgICB0cmllID0gdHJlZS0+dHJp ZTsKKyAgICAgIGlmICghdHJpZS0+YWNjZXB0aW5nKQorICAgICAgICBjb250aW51ZTsKKyAgICAg IGFjY2VwdDEgPSB0cmllOworICAgICAgd2hpbGUgKGFjY2VwdDEtPmFjY2VwdGluZyA9PSAoc2l6 ZV90KSAtMSkKKyAgICAgICAgYWNjZXB0MSA9IGFjY2VwdDEtPmZhaWw7CisgICAgICBsZWZ0MSA9 IHRwIC0gYWNjZXB0MS0+ZGVwdGg7CisgICAgICBpZiAobGVmdDEgPD0gbGVmdCkKKyAgICAgICAg eworICAgICAgICAgIGxlZnQgPSBsZWZ0MTsKKyAgICAgICAgICBhY2NlcHQgPSBhY2NlcHQxOwor ICAgICAgICB9CisgICAgfQorCisgIGt3c21hdGNoLT5pbmRleCA9IGFjY2VwdC0+YWNjZXB0aW5n IC8gMjsKKyAga3dzbWF0Y2gtPm9mZnNldFswXSA9IGxlZnQgLSB0ZXh0OworICBrd3NtYXRjaC0+ c2l6ZVswXSA9IGFjY2VwdC0+ZGVwdGg7CisKKyAgcmV0dXJuIGxlZnQgLSB0ZXh0OworfQorCisv KiBIYWlyeSBtdWx0aXBsZSBzdHJpbmcgc2VhcmNoIHdpdGggQWhvLUNvcmFzaWNrIGFsZ29yaXRo bS4gICovCitzdGF0aWMgc2l6ZV90CithY2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3Qg KnRleHQsIHNpemVfdCBzaXplLAorICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2ggKmt3c21hdGNoKQor eworICAvKiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlz LCBkZXBlbmRpbmcgb24KKyAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCisg IHJldHVybiAoa3dzZXQtPnRyYW5zCisgICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0 ZXh0LCBzaXplLCBrd3NtYXRjaCkKKyAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQsIHRl eHQsIHNpemUsIGt3c21hdGNoKSk7Cit9CisKIC8qIFNlYXJjaCBURVhUIGZvciBhIG1hdGNoIG9m IGFueSBtZW1iZXIgb2YgS1dTRVQuCiAgICBSZXR1cm4gdGhlIG9mZnNldCAoaW50byBURVhUKSBv ZiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nLAogICAgb3IgKHNpemVf dCkgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQuICBVcG9uIGEgbWF0Y2gsIHN0b3JlIGRldGFpbHMg aW4KQEAgLTg0MywxOSArMTA3NSw3IEBAIHNpemVfdAoga3dzZXhlYyAoa3dzZXRfdCBrd3NldCwg Y2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCiAgICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2gg Kmt3c21hdGNoKQogewotICBpZiAoa3dzZXQtPndvcmRzID09IDEpCi0gICAgewotICAgICAgc2l6 ZV90IHJldCA9IGJtZXhlYyAoa3dzZXQsIHRleHQsIHNpemUpOwotICAgICAgaWYgKHJldCAhPSAo c2l6ZV90KSAtMSkKLSAgICAgICAgewotICAgICAgICAgIGt3c21hdGNoLT5pbmRleCA9IDA7Ci0g ICAgICAgICAga3dzbWF0Y2gtPm9mZnNldFswXSA9IHJldDsKLSAgICAgICAgICBrd3NtYXRjaC0+ c2l6ZVswXSA9IGt3c2V0LT5taW5kOwotICAgICAgICB9Ci0gICAgICByZXR1cm4gcmV0OwotICAg IH0KLSAgZWxzZQotICAgIHJldHVybiBjd2V4ZWMgKGt3c2V0LCB0ZXh0LCBzaXplLCBrd3NtYXRj aCk7CisgIHJldHVybiBrd3NldC0+a3dzZXhlYyAoa3dzZXQsIHRleHQsIHNpemUsIGt3c21hdGNo KTsKIH0KIAogLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQu ICovCmRpZmYgLS1naXQgYS9zcmMva3dzZXQuaCBiL3NyYy9rd3NldC5oCmluZGV4IDEyYWZiOGUu LjI0NzZkYjMgMTAwNjQ0Ci0tLSBhL3NyYy9rd3NldC5oCisrKyBiL3NyYy9rd3NldC5oCkBAIC0y Miw2ICsyMiw3IEBACiAgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uICovCiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxz dGRib29sLmg+CiAKIHN0cnVjdCBrd3NtYXRjaAogewpAQCAtMzgsNyArMzksNyBAQCB0eXBlZGVm IHN0cnVjdCBrd3NldCAqa3dzZXRfdDsKIC8qIFJldHVybiBhbiBvcGFxdWUgcG9pbnRlciB0byBh IG5ld2x5IGFsbG9jYXRlZCBrZXl3b3JkIHNldC4gIEEgbm9ubnVsbCBhcmcKICAgIHNwZWNpZmll cyBhIHRhYmxlIG9mIGNoYXJhY3RlciB0cmFuc2xhdGlvbnMgdG8gYmUgYXBwbGllZCB0byBhbGwK ICAgIHBhdHRlcm4gYW5kIHNlYXJjaCB0ZXh0LiAgKi8KLWV4dGVybiBrd3NldF90IGt3c2FsbG9j IChjaGFyIGNvbnN0ICopOworZXh0ZXJuIGt3c2V0X3Qga3dzYWxsb2MgKGNoYXIgY29uc3QgKiwg Ym9vbCBjb25zdCk7CiAKIC8qIEluY3JlbWVudGFsbHkgZXh0ZW5kIHRoZSBrZXl3b3JkIHNldCB0 byBpbmNsdWRlIHRoZSBnaXZlbiBzdHJpbmcuCiAgICBSZW1lbWJlciBhbiBpbmRleCBudW1iZXIg Zm9yIGVhY2gga2V5d29yZCBpbmNsdWRlZCBpbiB0aGUgc2V0LiAgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9zZWFyY2h1dGlscy5jIGIvc3JjL3NlYXJjaHV0aWxzLmMKaW5kZXggOWVkYzc4NS4uMzE0YWI4 ZSAxMDA2NDQKLS0tIGEvc3JjL3NlYXJjaHV0aWxzLmMKKysrIGIvc3JjL3NlYXJjaHV0aWxzLmMK QEAgLTM5LDEwICszOSwxMCBAQCBrd3Npbml0IChrd3NldF90ICprd3NldCkKICAgICAgIGZvciAo aSA9IDA7IGkgPCBOQ0hBUjsgKytpKQogICAgICAgICB0cmFuc1tpXSA9IHRvdXBwZXIgKGkpOwog Ci0gICAgICAqa3dzZXQgPSBrd3NhbGxvYyAodHJhbnMpOworICAgICAgKmt3c2V0ID0ga3dzYWxs b2MgKHRyYW5zLCBmYWxzZSk7CiAgICAgfQogICBlbHNlCi0gICAgKmt3c2V0ID0ga3dzYWxsb2Mg KE5VTEwpOworICAgICprd3NldCA9IGt3c2FsbG9jIChOVUxMLCBmYWxzZSk7CiAKICAgaWYgKCEq a3dzZXQpCiAgICAgeGFsbG9jX2RpZSAoKTsKLS0gCjIuMi4wCgo= --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0002-grep-immediately-return-without-longest-match-to-sea.patch" Content-Disposition: attachment; filename="0002-grep-immediately-return-without-longest-match-to-sea.patch" Content-Transfer-Encoding: base64 RnJvbSBlOTQ5NmY4ZDgyZWE5YmEyNjBkMzM3YTJkOGZhZTMyMTYxNjMzNjM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE1OjE2OjU1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAyLzNd IGdyZXAgaW1tZWRpYXRlbHkgcmV0dXJuIHdpdGhvdXQgbG9uZ2VzdCBtYXRjaCB0byBzZWFyY2gK IG11bHRpcGxlIGZpeGVkIHdvcmRzIGlmIG5vdCBuZWVkZWQKClNlYXJjaGluZyBtdWx0aXBsZSBm aXhlZCB3b3JkcywgZ3JlcCBpbW1lZGlhdGVseSByZXR1cm5zIHdpdGhvdXQgbG9uZ2VzdAptYXRj aCBpZiBub3QgbmVlZGVkLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgZ3JlcCB0cmllcyBsb25nZXN0 IG1hdGNoIGZvcgptdWx0aXBsZSB3b3JkcyBldmVuIGlmIG5vdCBuZWVkZWQuCgoqIHNyYy9rd3Nl dC5jIChrd3NleGVjLCBhY2V4ZWMsIGN3ZXhlYywgYm1leGVjKTogQWRkIGFuIGFyZ3VtZW50IHdo aWNoCmlzIGJvb2wgd2hldGhlciBuZWVkZWQgbG9uZ2VzdCBtYXRjaCBvciBub3QuCkFsbCBjYWxs ZXJzIGFyZSBjaGFuZ2VkLgoqIHNyYy9rd3NldC5oIChrd3NleGVjKTogVXBkYXRlIHByb3RvdHlw ZS4KLS0tCiBzcmMvZGZhc2VhcmNoLmMgfCAgIDIgKy0KIHNyYy9rd3NlYXJjaC5jICB8ICAxOCAr KysrKy0tCiBzcmMva3dzZXQuYyAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9rd3NldC5oICAgICB8ICAgNCArLQog NCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgODQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvc3JjL2RmYXNlYXJjaC5jIGIvc3JjL2RmYXNlYXJjaC5jCmluZGV4IDc3YjRlM2Uu LjFlYjI0ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9kZmFzZWFyY2guYworKysgYi9zcmMvZGZhc2VhcmNo LmMKQEAgLTIzOSw3ICsyMzksNyBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90 IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwKIAogICAgICAgICAgICAgICAvKiBGaW5kIGEgcG9z c2libGUgbWF0Y2ggdXNpbmcgdGhlIEtXc2V0IG1hdGNoZXIuICAqLwogICAgICAgICAgICAgICBz aXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZyAtIGJlZ2xpbmUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZsaW0gLSBiZWcgKyBiZWdsaW5lLCAma3dz bSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZsaW0gLSBiZWcg KyBiZWdsaW5lLCAma3dzbSwgdHJ1ZSk7CiAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gKHNp emVfdCkgLTEpCiAgICAgICAgICAgICAgICAgZ290byBmYWlsdXJlOwogICAgICAgICAgICAgICBt YXRjaCA9IGJlZyArIG9mZnNldDsKZGlmZiAtLWdpdCBhL3NyYy9rd3NlYXJjaC5jIGIvc3JjL2t3 c2VhcmNoLmMKaW5kZXggMTMzNWEyNi4uYzQ0ZWMwOCAxMDA2NDQKLS0tIGEvc3JjL2t3c2VhcmNo LmMKKysrIGIvc3JjL2t3c2VhcmNoLmMKQEAgLTExMSw2ICsxMTEsOCBAQCBGZXhlY3V0ZSAoY2hh ciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLAogICBzdHJ1Y3Qg a3dzbWF0Y2gga3dzbWF0Y2g7CiAgIHNpemVfdCByZXRfdmFsOwogICBtYl9sZW5fbWFwX3QgKm1h cCA9IE5VTEw7CisgIGJvb2wgbWJfY2hlY2s7CisgIGJvb2wgbG9uZ2VzdDsKIAogICBpZiAoTUJf Q1VSX01BWCA+IDEpCiAgICAgewpAQCAtMTIzLDE1ICsxMjUsMjMgQEAgRmV4ZWN1dGUgKGNoYXIg Y29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwKICAgICAgICAgfQog ICAgIH0KIAorICBpZiAobWF0Y2hfbGluZXMpCisgICAgbWJfY2hlY2sgPSBsb25nZXN0ID0gZmFs c2U7CisgIGVsc2UKKyAgICB7CisgICAgICBtYl9jaGVjayA9IE1CX0NVUl9NQVggPiAxICYmICF1 c2luZ191dGY4ICgpOworICAgICAgbG9uZ2VzdCA9IG1iX2NoZWNrIHx8IHN0YXJ0X3B0ciB8fCBt YXRjaF93b3JkczsKKyAgICB9CisKICAgZm9yIChtYl9zdGFydCA9IGJlZyA9IHN0YXJ0X3B0ciA/ IHN0YXJ0X3B0ciA6IGJ1ZjsgYmVnIDw9IGJ1ZiArIHNpemU7IGJlZysrKQogICAgIHsKICAgICAg IHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnIC0gbWF0Y2hfbGluZXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgc2l6ZSAtIGJlZyArIG1hdGNoX2xpbmVz LCAma3dzbWF0Y2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIHNpemUg LSBiZWcgKyBtYXRjaF9saW5lcywgJmt3c21hdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxvbmdlc3QpOwogICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKICAgICAg ICAgZ290byBmYWlsdXJlOwogICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXSAtIDIgKiBtYXRj aF9saW5lczsKLSAgICAgIGlmICghbWF0Y2hfbGluZXMgJiYgTUJfQ1VSX01BWCA+IDEgJiYgIXVz aW5nX3V0ZjggKCkKLSAgICAgICAgICAmJiBtYl9nb2JhY2sgKCZtYl9zdGFydCwgYmVnICsgb2Zm c2V0LCBidWYgKyBzaXplKSAhPSAwKQorICAgICAgaWYgKG1iX2NoZWNrICYmIG1iX2dvYmFjayAo Jm1iX3N0YXJ0LCBiZWcgKyBvZmZzZXQsIGJ1ZiArIHNpemUpICE9IDApCiAgICAgICAgIHsKICAg ICAgICAgICAvKiBXZSBoYXZlIG1hdGNoZWQgYSBzaW5nbGUgYnl0ZSB0aGF0IGlzIG5vdCBhdCB0 aGUgYmVnaW5uaW5nIG9mIGEKICAgICAgICAgICAgICBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgbWJf Z29iYWNrIGhhcyBhZHZhbmNlZCBNQl9TVEFSVCBwYXN0IHRoYXQKQEAgLTE2Niw3ICsxNzYsNyBA QCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9z aXplLAogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKCFsZW4pCiAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3Nl dCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBrd3Nl eGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoLCB0cnVlKTsKICAgICAgICAgICAgICAg ICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQogICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgICAgICAgdHJ5ID0gYmVnICsgb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc3JjL2t3c2V0 LmMgYi9zcmMva3dzZXQuYwppbmRleCA5NTg1ZjA4Li5hMDJiYWRlIDEwMDY0NAotLS0gYS9zcmMv a3dzZXQuYworKysgYi9zcmMva3dzZXQuYwpAQCAtMTE2LDcgKzExNiw4IEBAIHN0cnVjdCBrd3Nl dAogICBib29sIHJldmVyc2U7CiAKICAgLyoga3dzZXhlYygpIGltcGxlbWVudGF0aW9uLiAgKi8K LSAgc2l6ZV90ICgqa3dzZXhlYykgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1 Y3Qga3dzbWF0Y2ggKik7CisgIHNpemVfdCAoKmt3c2V4ZWMpIChrd3NldF90LCBjaGFyIGNvbnN0 ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICosCisgICAgICAgICAgICAgICAgICAgICBib29s KTsKIH07CiAKIC8qIFVzZSBUUkFOUyB0byB0cmFuc2xpdGVyYXRlIEMuICBBIG51bGwgVFJBTlMg ZG9lcyBubyB0cmFuc2xpdGVyYXRpb24uICAqLwpAQCAtMTI2LDkgKzEyNywxMiBAQCB0ciAoY2hh ciBjb25zdCAqdHJhbnMsIGNoYXIgYykKICAgcmV0dXJuIHRyYW5zID8gdHJhbnNbVShjKV0gOiBj OwogfQogCi1zdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXpl X3QsIHN0cnVjdCBrd3NtYXRjaCAqKTsKLXN0YXRpYyBzaXplX3QgY3dleGVjIChrd3NldF90LCBj aGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICopOwotc3RhdGljIHNpemVfdCBi bWV4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKik7 CitzdGF0aWMgc2l6ZV90IGFjZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0 cnVjdCBrd3NtYXRjaCAqLAorICAgICAgICAgICAgICAgICAgICAgIGJvb2wpOworc3RhdGljIHNp emVfdCBjd2V4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0 Y2ggKiwKKyAgICAgICAgICAgICAgICAgICAgICBib29sKTsKK3N0YXRpYyBzaXplX3QgYm1leGVj IChrd3NldF90LCBjaGFyIGNvbnN0ICosIHNpemVfdCwgc3RydWN0IGt3c21hdGNoICosCisgICAg ICAgICAgICAgICAgICAgICAgYm9vbCk7CiAKIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEg a2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcgYW4gb3BhcXVlCiAgICBwb2ludGVyIHRvIGl0 LiAgKi8KQEAgLTcyMiw3ICs3MjYsNyBAQCBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNo YXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplKQogLyogRmFzdCBCb3llci1Nb29yZSBzZWFyY2gu ICAqLwogc3RhdGljIHNpemVfdAogYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0 ZXh0LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAg ICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewog ICAvKiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlzLCBk ZXBlbmRpbmcgb24KICAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCkBAIC03 NDIsNyArNzQ2LDggQEAgYm1leGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBz aXplX3Qgc2l6ZSwKIAogLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaCB3aXRoIENvbW1l bnR6LVdhbHRlciBhbGdvcml0aG0uICAqLwogc3RhdGljIHNpemVfdCBfR0xfQVJHX05PTk5VTEwg KCg0KSkKLWN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxl biwgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKK2N3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hh ciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwKKyAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3Nt YXRjaCwgYm9vbCBsb25nZXN0KQogewogICBzdHJ1Y3QgdHJpZSAqIGNvbnN0ICpuZXh0OwogICBz dHJ1Y3QgdHJpZSBjb25zdCAqdHJpZTsKQEAgLTgzNyw1NiArODQyLDU5IEBAIGN3ZXhlYyAoa3dz ZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbiwgc3RydWN0IGt3c21hdGNo ICprd3NtYXRjaCkKICAgLyogR2l2ZW4gYSBrbm93biBtYXRjaCwgZmluZCB0aGUgbG9uZ2VzdCBw b3NzaWJsZSBtYXRjaCBhbmNob3JlZAogICAgICBhdCBvciBiZWZvcmUgaXRzIHN0YXJ0aW5nIHBv aW50LiAgVGhpcyBpcyBuZWFybHkgYSB2ZXJiYXRpbQogICAgICBjb3B5IG9mIHRoZSBwcmVjZWRp bmcgbWFpbiBzZWFyY2ggbG9vcHMuICovCi0gIGlmIChsaW0gLSBtY2ggPiBrd3NldC0+bWF4ZCkK LSAgICBsaW0gPSBtY2ggKyBrd3NldC0+bWF4ZDsKLSAgbG1jaCA9IDA7Ci0gIGQgPSAxOwotICB3 aGlsZSAobGltIC0gZW5kID49IGQpCisgIGlmIChsb25nZXN0KQogICAgIHsKLSAgICAgIGlmICgo ZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV0pICE9IDApCi0gICAgICAgIGNvbnRpbnVlOwot ICAgICAgYmVnID0gZW5kIC0gMTsKLSAgICAgIGlmICghKHRyaWUgPSBuZXh0W2NdKSkKLSAgICAg ICAgewotICAgICAgICAgIGQgPSAxOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g ICAgICBpZiAodHJpZS0+YWNjZXB0aW5nICYmIGJlZyA8PSBtY2gpCi0gICAgICAgIHsKLSAgICAg ICAgICBsbWNoID0gYmVnOwotICAgICAgICAgIGFjY2VwdCA9IHRyaWU7Ci0gICAgICAgIH0KLSAg ICAgIGQgPSB0cmllLT5zaGlmdDsKLSAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorICAgICAgaWYg KGxpbSAtIG1jaCA+IGt3c2V0LT5tYXhkKQorICAgICAgICBsaW0gPSBtY2ggKyBrd3NldC0+bWF4 ZDsKKyAgICAgIGxtY2ggPSAwOworICAgICAgZCA9IDE7CisgICAgICB3aGlsZSAobGltIC0gZW5k ID49IGQpCiAgICAgICAgIHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyIHVjID0gKi0tYmVnOwot ICAgICAgICAgIGMgPSB0cmFucyA/IHRyYW5zW3VjXSA6IHVjOwotICAgICAgICAgIHRyZWUgPSB0 cmllLT5saW5rczsKLSAgICAgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQot ICAgICAgICAgICAgaWYgKGMgPCB0cmVlLT5sYWJlbCkKLSAgICAgICAgICAgICAgdHJlZSA9IHRy ZWUtPmxsaW5rOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICB0cmVlID0gdHJlZS0+ cmxpbms7Ci0gICAgICAgICAgaWYgKHRyZWUpCisgICAgICAgICAgaWYgKChkID0gZGVsdGFbYyA9 IChlbmQgKz0gZClbLTFdXSkgIT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg IGJlZyA9IGVuZCAtIDE7CisgICAgICAgICAgaWYgKCEodHJpZSA9IG5leHRbY10pKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICB0cmllID0gdHJlZS0+dHJpZTsKLSAgICAgICAgICAgICAg aWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorICAgICAgICAgICAgICBkID0gMTsK KyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHRy aWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICBsbWNoID0gYmVnOworICAgICAgICAgICAgICBhY2NlcHQgPSB0cmllOworICAgICAgICAgICAg fQorICAgICAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgICAgICB3aGlsZSAoYmVnID4gdGV4 dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB1YyA9ICotLWJl ZzsKKyAgICAgICAgICAgICAgYyA9IHRyYW5zID8gdHJhbnNbdWNdIDogdWM7CisgICAgICAgICAg ICAgIHRyZWUgPSB0cmllLT5saW5rczsKKyAgICAgICAgICAgICAgd2hpbGUgKHRyZWUgJiYgYyAh PSB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgICAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorICAg ICAgICAgICAgICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOworICAgICAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKyAgICAgICAgICAgICAgaWYg KHRyZWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbG1jaCA9IGJlZzsK LSAgICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRyaWU7CisgICAgICAgICAgICAgICAgICB0cmll ID0gdHJlZS0+dHJpZTsKKyAgICAgICAgICAgICAgICAgIGlmICh0cmllLT5hY2NlcHRpbmcgJiYg YmVnIDw9IG1jaCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg IGxtY2ggPSBiZWc7CisgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ID0gdHJpZTsKKyAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkID0gdHJpZS0+c2hpZnQ7CiAg ICAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgZCA9IHRyaWUtPnNoaWZ0OwotICAgICAgICB9Ci0gICAgICBpZiAobG1jaCkKLSAgICAgICAg ewotICAgICAgICAgIG1jaCA9IGxtY2g7Ci0gICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAg ICBpZiAobG1jaCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNoID0gbG1jaDsKKyAg ICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIWQp CisgICAgICAgICAgICBkID0gMTsKICAgICAgICAgfQotICAgICAgaWYgKCFkKQotICAgICAgICBk ID0gMTsKICAgICB9CiAKICAga3dzbWF0Y2gtPmluZGV4ID0gYWNjZXB0LT5hY2NlcHRpbmcgLyAy OwpAQCAtOTAwLDcgKzkwOCw3IEBAIGN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAq dGV4dCwgc2l6ZV90IGxlbiwgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKICAgIChpbmxpbmFi bGUgdmVyc2lvbikgICovCiBzdGF0aWMgaW5saW5lIHNpemVfdCBfR0xfQVJHX05PTk5VTEwgKCg0 KSkKIGFjZXhlY190cmFucyAoa3dzZXRfdCBrd3NldCwgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90 IGxlbiwKLSAgICAgICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAgICAgICAg ICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewog ICBzdHJ1Y3QgdHJpZSAqIGNvbnN0ICpuZXh0OwogICBzdHJ1Y3QgdHJpZSBjb25zdCAqdHJpZSwg KmFjY2VwdDsKQEAgLTEwMjAsMzAgKzEwMjgsMzMgQEAgYWNleGVjX3RyYW5zIChrd3NldF90IGt3 c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogICBsZWZ0ID0gdHAgLSBhY2NlcHQt PmRlcHRoOwogCiAgIC8qIFRyeSBsZWZ0LW1vc3QgbG9uZ2VzdCBtYXRjaC4gICovCi0gIHdoaWxl ICh0cCA8IGxpbSkKKyAgaWYgKGxvbmdlc3QpCiAgICAgewotICAgICAgc3RydWN0IHRyaWUgY29u c3QgKmFjY2VwdDE7Ci0gICAgICBjaGFyIGNvbnN0ICpsZWZ0MTsKLSAgICAgIGMgPSB0ciAodHJh bnMsICp0cCsrKTsKLSAgICAgIHRyZWUgPSB0cmllLT5saW5rczsKLSAgICAgIHdoaWxlICh0cmVl ICYmIGMgIT0gdHJlZS0+bGFiZWwpCi0gICAgICAgIGlmIChjIDwgdHJlZS0+bGFiZWwpCi0gICAg ICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOwotICAgICAgICBlbHNlCi0gICAgICAgICAgdHJlZSA9 IHRyZWUtPnJsaW5rOwotICAgICAgaWYgKCF0cmVlKQotICAgICAgICBicmVhazsKLSAgICAgIHRy aWUgPSB0cmVlLT50cmllOwotICAgICAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCi0gICAgICAgIGNv bnRpbnVlOwotICAgICAgYWNjZXB0MSA9IHRyaWU7Ci0gICAgICB3aGlsZSAoYWNjZXB0MS0+YWNj ZXB0aW5nID09IChzaXplX3QpIC0xKQotICAgICAgICBhY2NlcHQxID0gYWNjZXB0MS0+ZmFpbDsK LSAgICAgIGxlZnQxID0gdHAgLSBhY2NlcHQxLT5kZXB0aDsKLSAgICAgIGlmIChsZWZ0MSA8PSBs ZWZ0KQorICAgICAgd2hpbGUgKHRwIDwgbGltKQogICAgICAgICB7Ci0gICAgICAgICAgbGVmdCA9 IGxlZnQxOwotICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdDE7CisgICAgICAgICAgc3RydWN0IHRy aWUgY29uc3QgKmFjY2VwdDE7CisgICAgICAgICAgY2hhciBjb25zdCAqbGVmdDE7CisgICAgICAg ICAgYyA9IHRyICh0cmFucywgKnRwKyspOworICAgICAgICAgIHRyZWUgPSB0cmllLT5saW5rczsK KyAgICAgICAgICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorICAgICAgICAgICAg aWYgKGMgPCB0cmVlLT5sYWJlbCkKKyAgICAgICAgICAgICAgdHJlZSA9IHRyZWUtPmxsaW5rOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB0cmVlID0gdHJlZS0+cmxpbms7CisgICAg ICAgICAgaWYgKCF0cmVlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgdHJpZSA9IHRy ZWUtPnRyaWU7CisgICAgICAgICAgaWYgKCF0cmllLT5hY2NlcHRpbmcpCisgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICBhY2NlcHQxID0gdHJpZTsKKyAgICAgICAgICB3aGlsZSAoYWNj ZXB0MS0+YWNjZXB0aW5nID09IChzaXplX3QpIC0xKQorICAgICAgICAgICAgYWNjZXB0MSA9IGFj Y2VwdDEtPmZhaWw7CisgICAgICAgICAgbGVmdDEgPSB0cCAtIGFjY2VwdDEtPmRlcHRoOworICAg ICAgICAgIGlmIChsZWZ0MSA8PSBsZWZ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBs ZWZ0ID0gbGVmdDE7CisgICAgICAgICAgICAgIGFjY2VwdCA9IGFjY2VwdDE7CisgICAgICAgICAg ICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNTcsMTMgKzEwNjgsMTMgQEAgYWNleGVjX3Ry YW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVuLAogLyogSGFp cnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaCB3aXRoIEFoby1Db3Jhc2ljayBhbGdvcml0aG0uICAq Lwogc3RhdGljIHNpemVfdAogYWNleGVjIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0 LCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCkKKyAgICAg ICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25zdCBsb25nZXN0KQogewogICAv KiBIZWxwIHRoZSBjb21waWxlciBpbmxpbmUgYm1leGVjX3RyYW5zIGluIHR3byB3YXlzLCBkZXBl bmRpbmcgb24KICAgICAgd2hldGhlciBrd3NldC0+dHJhbnMgaXMgbnVsbC4gICovCiAgIHJldHVy biAoa3dzZXQtPnRyYW5zCi0gICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplLCBrd3NtYXRjaCkKLSAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQsIHRleHQsIHNp emUsIGt3c21hdGNoKSk7CisgICAgICAgICAgPyBhY2V4ZWNfdHJhbnMgKGt3c2V0LCB0ZXh0LCBz aXplLCBrd3NtYXRjaCwgbG9uZ2VzdCkKKyAgICAgICAgICA6IGFjZXhlY190cmFucyAoa3dzZXQs IHRleHQsIHNpemUsIGt3c21hdGNoLCBsb25nZXN0KSk7CiB9CiAKIC8qIFNlYXJjaCBURVhUIGZv ciBhIG1hdGNoIG9mIGFueSBtZW1iZXIgb2YgS1dTRVQuCkBAIC0xMDczLDkgKzEwODQsOSBAQCBh Y2V4ZWMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplLAogICAg dmFsdWUpLCBhbmQgbGVuZ3RoLiAgKi8KIHNpemVfdAoga3dzZXhlYyAoa3dzZXRfdCBrd3NldCwg Y2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCi0gICAgICAgICBzdHJ1Y3Qga3dzbWF0Y2gg Kmt3c21hdGNoKQorICAgICAgICAgc3RydWN0IGt3c21hdGNoICprd3NtYXRjaCwgYm9vbCBjb25z dCBsb25nZXN0KQogewotICByZXR1cm4ga3dzZXQtPmt3c2V4ZWMgKGt3c2V0LCB0ZXh0LCBzaXpl LCBrd3NtYXRjaCk7CisgIHJldHVybiBrd3NldC0+a3dzZXhlYyAoa3dzZXQsIHRleHQsIHNpemUs IGt3c21hdGNoLCBsb25nZXN0KTsKIH0KIAogLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUg Z2l2ZW4ga2V5d29yZCBzZXQuICovCmRpZmYgLS1naXQgYS9zcmMva3dzZXQuaCBiL3NyYy9rd3Nl dC5oCmluZGV4IDI0NzZkYjMuLmUzNmM4NjAgMTAwNjQ0Ci0tLSBhL3NyYy9rd3NldC5oCisrKyBi L3NyYy9rd3NldC5oCkBAIC01NCw4ICs1NCw4IEBAIGV4dGVybiB2b2lkIGt3c3ByZXAgKGt3c2V0 X3QpOwogICAgdGhlIG1hdGNoaW5nIHN1YnN0cmluZyBpbiB0aGUgaW50ZWdlciBpdCBwb2ludHMg dG8uICBTaW1pbGFybHksCiAgICBpZiBmb3VuZGluZGV4IGlzIG5vbi1OVUxMLCBzdG9yZSB0aGUg aW5kZXggb2YgdGhlIHBhcnRpY3VsYXIKICAgIGtleXdvcmQgZm91bmQgdGhlcmVpbi4gKi8KLWV4 dGVybiBzaXplX3Qga3dzZXhlYyAoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVj dCBrd3NtYXRjaCAqKQotICBfR0xfQVJHX05PTk5VTEwgKCg0KSk7CitleHRlcm4gc2l6ZV90IGt3 c2V4ZWMgKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzdHJ1Y3Qga3dzbWF0Y2ggKiwK KyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25zdCkgX0dMX0FSR19OT05OVUxMICgoNCkp OwogCiAvKiBEZWFsbG9jYXRlIHRoZSBnaXZlbiBrZXl3b3JkIHNldCBhbmQgYWxsIGl0cyBhc3Nv Y2lhdGVkIHN0b3JhZ2UuICovCiBleHRlcm4gdm9pZCBrd3NmcmVlIChrd3NldF90KTsKLS0gCjIu Mi4wCgo= --------_548B0F93000000008CED_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII"; name="0003-use-memchr2-for-two-patterns-of-a-character.patch" Content-Disposition: attachment; filename="0003-use-memchr2-for-two-patterns-of-a-character.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZjNlNzFiYTc4ZDkzMjY3ODk0N2U2M2Y5Njg4OGQwMjgxYzg0NzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb3JpaGlybyBUYW5ha2EgPG5vcml0bmtAa2NuLm5lLmpwPgpE YXRlOiBTYXQsIDIyIE5vdiAyMDE0IDE1OjIxOjM1ICswOTAwClN1YmplY3Q6IFtQQVRDSCAzLzNd IHVzZSBtZW1jaHIyIGZvciB0d28gcGF0dGVybnMgb2YgYSBjaGFyYWN0ZXIKCiogc3JjL2t3c2V0 LmMgKG1lbWNocjJfa3dzZXQpOiBBZGQgYSBuZXcgZnVuY3Rpb24uICBncmVwIHVzZXMgbWVtY2hy MiB0bwpzZWFyY2ggSnVzdCB0d28gbGV0dGVycy4KKGN3ZXhlYywgYWNleGVjX3RyYW5zKTogVXNl IGl0LgotLS0KIHNyYy9rd3NldC5jIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2t3c2V0 LmMgYi9zcmMva3dzZXQuYwppbmRleCBhMDJiYWRlLi4yMzUxYTkwIDEwMDY0NAotLS0gYS9zcmMv a3dzZXQuYworKysgYi9zcmMva3dzZXQuYwpAQCAtNjQwLDYgKzY0MCwzMSBAQCBtZW1jaHJfa3dz ZXQgKGNoYXIgY29uc3QgKnMsIHNpemVfdCBuLCBrd3NldF90IGt3c2V0KQogICByZXR1cm4gbiA9 PSAwID8gTlVMTCA6IG1lbWNocjIgKHMsIGt3c2V0LT5nYzEsIGt3c2V0LT5nYzFoZWxwLCBuKTsK IH0KIAorLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBieXRlIGluIHRoZSBidWZm ZXIgUyAob2Ygc2l6ZSBOKQorICAgdGhhdCBtYXRjaGVzIHRoZSBsYXN0IGJ5dGUgc3BlY2lmaWVk IGJ5IEtXU0VULCBhIHNpbmdsZXRvbi4gICovCitzdGF0aWMgc2l6ZV90CittZW1jaHIyX2t3c2V0 IChjaGFyIGNvbnN0ICpzLCBzaXplX3Qgbiwga3dzZXRfdCBrd3NldCwKKyAgICAgICAgICAgICAg IHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCB0cmVlIGNvbnN0ICpsaW5r ID0ga3dzZXQtPnRyaWUtPmxpbmtzOworICBzdHJ1Y3QgdHJlZSBjb25zdCAqY2xpbmsgPSBsaW5r LT5sbGluayA/IGxpbmstPmxsaW5rIDogbGluay0+cmxpbms7CisKKyAgY2hhciBjb25zdCAqbWNo ID0gbWVtY2hyMiAocywgbGluay0+bGFiZWwsIGNsaW5rLT5sYWJlbCwgbik7CisgIGlmIChtY2gp CisgICAgeworICAgICAgc2l6ZV90IG9mZiA9IG1jaCAtIHM7CisgICAgICBpZiAoKm1jaCA9PSBs aW5rLT5sYWJlbCkKKyAgICAgICAga3dzbWF0Y2gtPmluZGV4ID0gbGluay0+dHJpZS0+YWNjZXB0 aW5nIC8gMjsKKyAgICAgIGVsc2UKKyAgICAgICAga3dzbWF0Y2gtPmluZGV4ID0gY2xpbmstPnRy aWUtPmFjY2VwdGluZyAvIDI7CisgICAgICBrd3NtYXRjaC0+b2Zmc2V0WzBdID0gb2ZmOworICAg ICAga3dzbWF0Y2gtPnNpemVbMF0gPSAxOworICAgICAgcmV0dXJuIG9mZjsKKyAgICB9CisgIGVs c2UKKyAgICByZXR1cm4gLTE7Cit9CisKIC8qIEZhc3QgQm95ZXItTW9vcmUgc2VhcmNoIChpbmxp bmFibGUgdmVyc2lvbikuICAqLwogc3RhdGljIGlubGluZSBzaXplX3QgX0dMX0FUVFJJQlVURV9Q VVJFCiBibWV4ZWNfdHJhbnMgKGt3c2V0X3Qga3dzZXQsIGNoYXIgY29uc3QgKnRleHQsIHNpemVf dCBzaXplKQpAQCAtNzY3LDYgKzc5Miw4IEBAIGN3ZXhlYyAoa3dzZXRfdCBrd3NldCwgY2hhciBj b25zdCAqdGV4dCwgc2l6ZV90IGxlbiwKICAgLyogSW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMg YW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQuICovCiAgIGlmIChsZW4gPCBrd3NldC0+bWluZCkK ICAgICByZXR1cm4gLTE7CisgIGlmICgha3dzZXQtPnRyYW5zICYmIGt3c2V0LT5tYXhkID09IDEg JiYga3dzZXQtPndvcmRzID09IDIpCisgICAgcmV0dXJuIG1lbWNocjJfa3dzZXQgKHRleHQsIGxl biwga3dzZXQsIGt3c21hdGNoKTsKICAgbmV4dCA9IGt3c2V0LT5uZXh0OwogICBkZWx0YSA9IGt3 c2V0LT5kZWx0YTsKICAgdHJhbnMgPSBrd3NldC0+dHJhbnM7CkBAIC05MjQsNiArOTUxLDggQEAg YWNleGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3QgbGVu LAogICAvKiBJbml0aWFsaXplIHJlZ2lzdGVyIGNvcGllcyBhbmQgbG9vayBmb3IgZWFzeSB3YXlz IG91dC4gKi8KICAgaWYgKGxlbiA8IGt3c2V0LT5taW5kKQogICAgIHJldHVybiAtMTsKKyAgaWYg KCFrd3NldC0+dHJhbnMgJiYga3dzZXQtPm1heGQgPT0gMSAmJiBrd3NldC0+d29yZHMgPT0gMikK KyAgICByZXR1cm4gbWVtY2hyMl9rd3NldCAodGV4dCwgbGVuLCBrd3NldCwga3dzbWF0Y2gpOwog CiAgIG5leHQgPSBrd3NldC0+bmV4dDsKICAgdHJhbnMgPSBrd3NldC0+dHJhbnM7Ci0tIAoyLjIu MAoK --------_548B0F93000000008CED_MULTIPART_MIXED_-- ------------=_1464907561-18398-1--