From unknown Tue Jun 17 20:17:32 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#22181 <22181@debbugs.gnu.org> To: bug#22181 <22181@debbugs.gnu.org> Subject: Status: endless loop in grep 2.22 Reply-To: bug#22181 <22181@debbugs.gnu.org> Date: Wed, 18 Jun 2025 03:17:32 +0000 retitle 22181 endless loop in grep 2.22 reassign 22181 grep submitter 22181 Christian Boltz severity 22181 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Tue Dec 15 15:46:13 2015 Received: (at submit) by debbugs.gnu.org; 15 Dec 2015 20:46:13 +0000 Received: from localhost ([127.0.0.1]:52981 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1a8wU8-0004Pg-Ja for submit@debbugs.gnu.org; Tue, 15 Dec 2015 15:46:13 -0500 Received: from eggs.gnu.org ([208.118.235.92]:49835) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1a8wEh-00043V-OL for submit@debbugs.gnu.org; Tue, 15 Dec 2015 15:30:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a8wEb-0003to-Mm for submit@debbugs.gnu.org; Tue, 15 Dec 2015 15:30:10 -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]:48599) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a8wEb-0003ti-Ao for submit@debbugs.gnu.org; Tue, 15 Dec 2015 15:30:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59836) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a8wEa-0005kS-5m for bug-grep@gnu.org; Tue, 15 Dec 2015 15:30:09 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a8wEU-0003o6-I5 for bug-grep@gnu.org; Tue, 15 Dec 2015 15:30:08 -0500 Received: from sprachakt2.cboltz.de ([188.40.126.151]:35590 helo=mx.cboltz.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a8wET-0003nb-RQ for bug-grep@gnu.org; Tue, 15 Dec 2015 15:30:02 -0500 X-sprachakt.com-SMTP-Auth: no Received: from localhost (localhost.localdomain [127.0.0.1]) by mx.cboltz.de (Postfix) with ESMTP id 97593400DD; Tue, 15 Dec 2015 21:20:46 +0100 (CET) X-Virus-Scanned: amavisd-new at sprachakt.com Received: from mx.cboltz.de ([127.0.0.1]) by localhost (sprachakt2.cboltz.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uixxAVBbZLuk; Tue, 15 Dec 2015 21:20:45 +0100 (CET) Received: from home.cboltz.de (unknown [10.9.0.10]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx.cboltz.de (Postfix) with ESMTPSA; Tue, 15 Dec 2015 21:20:45 +0100 (CET) From: Christian Boltz To: bug-grep@gnu.org Subject: endless loop in grep 2.22 Date: Tue, 15 Dec 2015 21:20:44 +0100 Message-ID: <1668141.vFSSi8QY7V@tux.boltz.de.vu> User-Agent: KMail/4.14.10 (Linux/4.3.0-2-default; KDE/4.14.14; x86_64; ; ) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart1888985.0BvXtKQilD" Content-Transfer-Encoding: 7Bit X-Face: #?nL0}JpqNtLQy@q#bRm?B?pGS8[mx6r.6[91zp@*2DZ?18)haWs5wgvi, , wF/JWMTUh+6x , b7_`pW3)m~0606sDW0&'EKA}_-W+)Bz~d]k>4E9TyU}k@b&1=%yk\ X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -5.0 (-----) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Tue, 15 Dec 2015 15:46:11 -0500 Cc: Seth Arnold 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: -5.0 (-----) This is a multi-part message in MIME format. --nextPart1888985.0BvXtKQilD Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="iso-8859-15" Hello, I hit an endless loop in grep 2.22. I can reproduce it with # grep -obUa -P '\x04\x08\x00profile\x00\x07' cache--usr.sbin.smbldap-useradd 16profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile 27801profile [...] I get this line over and over (some minutes long) - but for testing, you might want to use ... | head -n50 to avoid heating your office using your computer ;-) The file needed for the reproducer is attached. To make sure you have an unmodified copy - its sha256sum is 89f458796dcb1cdcaec534fec84c6c3440844dbd6dc014e51a5d74e9800c2aab I have more files that can reproduce the endless loop - basically it looks like lots of (or all?) AppArmor cache files of profiles that contain subprofiles or hats trigger this. OTOH, cache files from single profiles don't trigger the endless loop. As the subject says, I'm using grep 2.22 on openSUSE Tumbleweed. This bug seems to be a regression. I wasn't able to reproduce this bug with grep 2.14, and sarnold on #apparmor also couldn't reproduce it with grep 2.21 on Ubuntu. OTOH, he could reproduce the endless loop with grep 2.22 on Ubuntu. I also downloaded and compiled the grep 2.21 and 2.22 tarballs. Result (not too surprising): - 2.21 works as expected - 2.22 enters an endless loop -> This is clearly a regression between 2.21 and 2.22. For comparison: The expected output (with grep 2.21) is: #2.21# ./grep -obUa -P '\x04\x08\x00profile\x00\x07' cache--usr.sbin.smbldap-useradd 16profile 27801profile Regards, Christian Boltz PS: usually I use a random signature, but I'll use a hand-picked quote for this mail ;-) -- I don't know how cboltz survives, everything he touches breaks into several pieces .. I fear for his car.. [from #apparmor] --nextPart1888985.0BvXtKQilD Content-Disposition: attachment; filename="cache--usr.sbin.smbldap-useradd" Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="cache--usr.sbin.smbldap-useradd" BAgAdmVyc2lvbgACBQAAAAQIAHByb2ZpbGUABwUaAC91c3Ivc2Jpbi9zbWJsZGFwLXVzZXJhZGQA BAYAZmxhZ3MABwIAAAAAAgAAAAACAAAAAAgCAAQAAAIAAAAAAgAAAAACAAAAAAQHAGNhcHM2NAAH AgAAAAACAAAAAAIAAAAAAgAAAAAIBA8AbmV0X2FsbG93ZWRfYWYACykAAQAAAQAAAQAAAQAAAQAA AQAAAQYAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAAAQAAAQAAAQYAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAAAQAAAQgAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAAAQAA AQAAAQAAAQAAAQAADAQGAGFhZGZhAAZsagAAAAAAABteeD0AAAAYAABqaAAAbm90ZmxleAAAAAAB AAQAAAAAAAAEuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAEABAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkEJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAABAAQAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAKACgAAAAAAA4AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEABAAAAAAAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAE AAEABAABAAQAAQAEAAEABAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACRQkUAEQBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAEABAABAAQAAQAEAAEABAABAAQAAQAEAAEABAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRQkUAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAQAEABEARAABAAQAAQAEAAEA BAABAAQAAQAEAAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUJFAAAAAAABAAQAAQAEABEARAABAAQAAQAE AAEABAABAAQAAQAEAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAEQBEAAEABAABAAQAAQAEAAEABAABAAQA EQBEAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQA EQBEAAEABAABAAQAAQAEAAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA BAAAAAAAAAAAAwBMAQAJACQAEQBEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAACfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAEQBEAAEABAABAAQA AQAEAAEABAABAAQAAQAEAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAARAEQAAQAEAAEABAABAAQA AQAEABEARAARAEQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AJFCRQAAAAAAAAAAAAAAAAABAAQAEQBEABEARAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB AAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAQAEABEARAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAAAAAAAAQAEAAEABAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB AAQAAQAEABEARAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAQAEAAEABAARAEQA AQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAEQBEAAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAQAEAAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAABAAQAAQAEAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAEABAABAAQA AQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAEABAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOADgAAAAAAAAAAAAEABAABAAQA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAQAEAAcABAAAAAAAAAS7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAAAAAAABLsAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMA AAACAAAAAQAAAAgAAAAHAAAACwAAAAIAAAAAAAAACQAAAAAAAAAAAAAABwAAAAAAAAARAAAABQAA AAsAAAASAAAAEwAAABUAAAARAAAAFQAAABQAAAAVAAAAAQAAAAIAAAADAAAABgAAAAQAAAAFAAAA JQAAABUAAAAGAAAABwAAAAkAAAAKAAAADAAAACgAAAAlAAAASAAAAA0AAAAhAAAACwAAAAoAAAAS AAAAEQAAABMAAAAuAAAAKgAAACUAAAA2AAAAMgAAADEAAAAqAAAALgAAADYAAABFAAAAMwAAADYA AABIAAAAAAAAAFgAAABJAAAAUQAAAE0AAABPAAAATAAAAFsAAABMAAAATwAAAFQAAABkAAAAYQAA AGYAAAAVAAAAFgAAAMgAAAAXAAAAzAAAAKoAAAAAAAAAXwAAAFoAAABtAAAAXwAAAG8AAABcAAAA cgAAAHgAAABzAAAAfQAAAH4AAACGAAAAiAAAAIgAAACCAAAAdwAAAIAAAAB/AAAAAAAAAIcAAACN AAAAhwAAAH0AAACGAAAAAAAAAIcAAACOAAAAlwAAAJUAAACQAAAAjQAAAJgAAACgAAAA1QAAAKEA AACkAAAAkwAAAKIAAACWAAAAmAAAAKIAAACdAAAAmwAAAKIAAACfAAAAsQAAALEAAACeAAAAqgAA ABgAAAEYAAABGQAAABsAAAEaAAABHgAAABwAAAEfAAAAqwAAALMAAAC7AAAArQAAANIAAACwAAAA wwAAALcAAADEAAAAtQAAALYAAAC0AAAAtAAAAMQAAADMAAAAwQAAAM4AAADPAAAAygAAANQAAADU AAAAHQAAANcAAADTAAAAzQAAAB4AAADUAAAA0QAAAAAAAADaAAAAAAAAANAAAAAAAAAA2AAAAN0A AADiAAAAIQAAAM8AAADRAAAA0gAAANUAAAAmAAAA2QAAAOkAAAD5AAAA+QAAAP0AAADvAAAA6wAA APMAAAAmAAAA+gAAAPIAAAEAAAAA9wAAAO4AAAEBAAAA+gAAACcAAAFnAAAAKQAAACsAAAAqAAAB aQAAAWwAAAEHAAABCQAAAW0AAAD2AAABAwAAAQMAAAEQAAAA/wAAAQEAAAEUAAABBgAAARYAAAES AAABCAAAARoAAAEQAAABDAAAARgAAAEZAAABFQAAACsAAAFVAAABhgAAAScAAAEbAAABGAAAASMA AAEeAAABXgAAAV8AAAFgAAABLgAAASIAAAFPAAABZQAAASIAAAEgAAABNwAAATcAAAF6AAABewAA ATYAAAFIAAABfgAAAT4AAAGAAAABQwAAAAAAAAFDAAABSAAAAUYAAAE8AAABhQAAAUIAAAFOAAAB SQAAAU8AAAFcAAABjAAAAVYAAAFRAAABXQAAAV8AAAHDAAABxQAAAcgAAAHLAAABzgAAAVIAAAFm AAABZAAAAc8AAAFjAAABaAAAAVwAAAGiAAABaQAAAWAAAAFlAAABcgAAAW8AAAF1AAABrAAAAXAA AAF4AAABewAAAXsAAAF+AAABfgAAAX4AAAHjAAAB5gAAAecAAAHoAAABeAAAAbYAAAGEAAABhgAA AXkAAAG1AAABfAAAAc4AAAGHAAABhAAAAacAAAGWAAABpgAAAacAAAGmAAABoAAAAZ4AAAGqAAAB nQAAAasAAAG4AAAB4wAAAboAAAG6AAABugAAAawAAAHAAAABwQAAAiYAAAG1AAABvQAAAccAAAG1 AAAB/QAAAgEAAAHOAAABuwAAAdIAAAHPAAACNgAAAjkAAAI9AAACQgAAAcMAAAHKAAABygAAAdAA AAJFAAAB2AAAAdQAAAHlAAAB0wAAAeIAAAHlAAAB7QAAAAAAAAHwAAAB2AAAAeIAAAHuAAAB9AAA AfEAAAH5AAAB9AAAAfkAAAHsAAACYQAAAmQAAAJpAAACbgAAAnIAAAKDAAAChgAAAmYAAAIzAAAB 9wAAAj4AAAINAAACEgAAAgcAAAIXAAACGAAAAiEAAAIjAAACKQAAAhcAAAI7AAACJwAAAhoAAAIY AAACGAAAAh8AAAJqAAACOQAAAjkAAAJAAAACPwAAAncAAAI+AAACOwAAAkcAAAJKAAAAAQAAAjgA AAJJAAACRwAAAokAAAJUAAACuQAAAlYAAAJMAAACSwAAAr4AAALBAAACvwAAAsQAAAJQAAACUAAA AlcAAAKXAAACyAAAAmMAAAJRAAACWQAAAmcAAAJgAAACbQAAAnAAAAJpAAACYAAAAnAAAAJzAAAC ZAAAAmgAAAJ3AAACdAAAAncAAAJ3AAACagAAAnAAAAJxAAAC4AAAAm8AAAJzAAAChQAAAucAAAL0 AAAC6gAAAwIAAAMFAAADCAAAAwsAAAMOAAACdgAAAogAAAMMAAACkgAAAtYAAAKQAAACmwAAApQA AAKcAAAClwAAAqAAAAKsAAACwgAAAp8AAAKmAAACngAAAuYAAAK0AAACrQAAArAAAAKkAAACvQAA ArwAAAK/AAACtwAAArIAAAK+AAACtwAAArUAAAL7AAACvgAAArwAAALEAAACwAAAAtEAAAMSAAAC zAAAA0EAAANFAAADEwAAAs8AAALSAAADRwAAAtcAAALVAAAC0AAAAtgAAAMcAAAC2AAAAuUAAALi AAAC4AAAAu8AAANSAAAC3gAAAvEAAALnAAADKAAAAykAAALmAAAC9wAAAvkAAALyAAAC8gAAA2AA AANhAAADZAAAA2gAAANsAAADcwAAA3cAAAOFAAADbgAAA3sAAAOIAAADigAAA44AAAOUAAAC+gAA AwEAAANpAAADjAAAA5YAAAOeAAADnwAAA6cAAAOsAAADNgAAAwMAAAL4AAADCAAAAx8AAAMhAAAD VQAAAyUAAAMgAAADOQAAAyUAAAMzAAADOwAAAz8AAAM7AAADQgAAAzwAAANbAAADTQAAA1QAAANc AAADlQAAA1IAAANjAAADWgAAA2YAAANjAAADagAAA1sAAANdAAAD0wAAA9cAAANuAAADZQAAA2EA AANpAAADbgAAA24AAAN5AAADdgAAA3sAAAN2AAADdAAAA3kAAANxAAADfAAAA4IAAAN4AAAD7AAA A4YAAAPpAAAD+gAAA+oAAAP+AAAEAQAABAcAAAQOAAAECQAABBAAAAQTAAAEFgAABBoAAAOLAAAD gwAAA/cAAAQqAAAEEQAABDEAAAQyAAAEMwAABEcAAARMAAAETQAAA+gAAAOLAAADkQAAA3wAAAPF AAADlAAAA5sAAAOVAAADigAAA6wAAAOYAAADoQAAA6AAAAOhAAADsgAAA+UAAAPiAAAD6QAAA+gA AARSAAAEJAAABCYAAAPuAAAD6gAAA+0AAAQuAAAEXgAABGQAAAPqAAAD8AAABAEAAAPzAAAEAwAA A/MAAAQ7AAAD+AAAA/8AAAQIAAAECAAABAEAAAP4AAAD/gAABEgAAAQOAAAETwAABB8AAASCAAAE hQAABIkAAASLAAAElwAABI4AAASSAAAEigAABJkAAASdAAAEnwAABKUAAAQRAAAEIAAABJoAAASb AAAEpgAABKcAAASoAAAEqQAABKoAAASrAAAErQAABCEAAAQVAAAEEwAABCYAAAS9AAAEYQAABDMA AAQvAAAEbQAABDcAAAQ+AAAEPQAABDEAAARIAAAETAAABF0AAARiAAAE2wAABN0AAASgAAAEbwAA BN8AAATgAAAEbwAABG4AAAR0AAAEeAAABIAAAATmAAAEcwAABHkAAAR1AAAEuwAABHgAAAR8AAAE dwAABIEAAASDAAAE6QAABMQAAAT2AAAE+QAABP0AAAT/AAAFAgAABQQAAAUFAAAFFgAABScAAAUp AAAEjwAABJQAAAUQAAAFFwAABQYAAAUqAAAFLQAABTYAAAU3AAAFOQAABTsAAASEAAAEjgAABJAA AAVBAAAEwQAABQsAAATNAAAE1AAABRQAAATPAAAE0wAAAAAAAAAAAAAAAAAABUoAAAVLAAAE1gAA BOAAAAVPAAAFUgAABNsAAAUfAAAE3gAAAAIAAATiAAAE5QAABOIAAAToAAAE5wAABPQAAATtAAAF MgAABPcAAAVhAAAFbgAABXEAAAV4AAAFggAABYAAAAVyAAAFgwAABYUAAAWHAAAFiQAABYwAAAVF AAAFBgAABZEAAAWNAAAFkgAABZQAAAWVAAAFmAAABZwAAAWoAAAFqQAABaoAAAUbAAAFIQAABSMA AAWsAAAFIQAABVYAAAUmAAAFKgAABTIAAAVCAAAFkAAABcIAAAXJAAAFSgAABVIAAAXMAAAFzgAA Bc8AAAVlAAAFbgAABW0AAAWjAAAFYQAABaUAAAVwAAAFaAAABXgAAAVuAAAF0QAABXAAAAVwAAAF gAAABeIAAAXmAAAF7AAABfMAAAX1AAAF6gAAAAMAAAXtAAAF9wAABYUAAAXJAAAF8AAABfoAAAYL AAAGDAAABhIAAAYUAAAGFgAABh0AAAWJAAAFrgAABf0AAAYrAAAFvwAABbsAAAXIAAAFwgAABcQA AAXSAAAGNQAABjYAAAXJAAAGDQAABg8AAAZAAAAGQgAABkQAAAZHAAAF0QAABeUAAAXhAAAF5AAA BdsAAAYcAAAF2gAABe0AAAXiAAAF7QAAAAAAAAXcAAAF8QAABekAAAZdAAAGWAAABl8AAAZhAAAG YwAABeEAAAXsAAAGZgAABmcAAAZoAAAGawAABmkAAAZqAAAGbAAABm0AAAYHAAAF/wAABggAAAYW AAAGSgAABkwAAAYYAAAGDwAABhMAAAaAAAAGgQAABg8AAAY0AAAGiAAABokAAAaRAAAGJwAABiAA AAYtAAAGLQAABi4AAAY0AAAAAAAABjMAAAY4AAAGdgAABkUAAAY/AAAGqwAABrMAAAa1AAAGrgAA BjYAAAY7AAAGugAABrkAAAa7AAAGvAAABr0AAAa+AAAGvwAABkkAAAY9AAAGSAAABkYAAAZOAAAG YQAABpUAAAZjAAAGxgAABsgAAAZYAAAGxwAABsoAAAbJAAAGZQAAAAAAAAZyAAAGZAAABmIAAAZp AAAGcwAABrIAAAaCAAAGcwAABoMAAAb6AAAG7wAABv0AAAcGAAAG/gAABo0AAAaEAAAG/wAABwcA AAcIAAAHCQAABw0AAAcMAAAHDwAABpoAAAacAAAGlAAABpAAAAaXAAAGmQAABqYAAAaoAAAHEAAA BxEAAAasAAAHEgAABxUAAAcTAAAGsgAABqoAAAaiAAAGrwAABrAAAAalAAAGvwAABrQAAAbAAAAG +AAAB0oAAAdGAAAHSwAAB0wAAAdQAAAHUgAAB08AAAa1AAAG1wAAB1MAAAdXAAAHVAAAB1kAAAdc AAAHXgAABtEAAAbZAAAG5AAABtYAAAbrAAAG4wAAB10AAAblAAAHYAAAB2EAAAdjAAAHYgAAByYA AAb3AAAG9AAABvYAAAbyAAAHAgAABvQAAAcIAAAHbgAAB28AAAdwAAAHhQAAB5QAAAeVAAAHKAAA BxcAAAeYAAAHmQAAB5wAAAehAAAHpwAABykAAAdkAAAHMgAABysAAAegAAAHNgAAB6QAAAemAAAH qAAAB6sAAAcvAAAHLwAABzAAAAc3AAAHSwAABzYAAAd+AAAHrgAAB7AAAAeyAAAHtQAAB7cAAAez AAAHSwAAB4wAAAe7AAAHvgAAB80AAAfbAAAH5wAAB2UAAAdtAAAHfQAAB3cAAAeHAAAH6QAAB+sA AAeIAAAHegAAB5AAAAeDAAAHxAAAB4MAAAfzAAAH9AAAB/UAAAf4AAAH+gAAB/0AAAeGAAAH/gAA CAYAAAgEAAAICwAACA0AAAfMAAAHiAAAB5AAAAebAAAHoQAACBIAAAfmAAAHtgAAB6oAAAe2AAAH sQAAB7EAAAghAAAIQwAACCgAAAgrAAAIMgAACDAAAAg2AAAINwAACDkAAAg7AAAIPQAAB8sAAAfG AAAIEgAACE4AAAfJAAAH3AAAB+MAAAfYAAAH2gAACE8AAAhRAAAIUwAACFQAAAhVAAAIVgAAB+MA AAffAAAH5wAACFgAAAgHAAAH6gAAB9QAAAfeAAAH6QAACFsAAAhdAAAIZAAACIgAAAiNAAAICQAA CBgAAAgmAAAIkgAACCQAAAgiAAAIJwAACJgAAAiZAAAIoAAACJwAAAihAAAIogAACCgAAAgxAAAI LQAACKMAAAg1AAAIJgAACKUAAAimAAAIpwAACK0AAAioAAAIrAAACDcAAAhEAAAITQAACFEAAAi0 AAAItQAACLgAAAi6AAAIUAAACFYAAAhbAAAIwAAACMMAAAjMAAAITgAACHIAAAjaAAAI3gAACOoA AAjmAAAIZAAACHoAAAjrAAAI7AAACO0AAAjuAAAI8AAEAAIAAAAAAAAEuwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABPAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAE8ATwAAADAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhgCGAE8ATwBPADAAjACMAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGAMoATwBPAM0A MAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASkAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACGAMoATwDNADAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAEpAW8BKQEpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAABkwAAAAAAAAAAAAAAAAAAAAAAAAAAAIYAygDNADAAAAAAAAAAAACM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW8BbwFvAW8BbwFvAW8BKQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZMAAAAA AAAAAAAAAboAAAAAAAAAhgDKAZ8AMAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAboAAAAAAAACBgFvAW8BbwFvAW8BbwIOAAAAAAIWAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA hgAwAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAH7AAAAAAAAAAAAAAAAAAAAAAAAAAACBgIG AW8CCQFvAW8BbwFvAg4CDgIOAg4CDgIOAAAAAAIWAhYCFgIWAhYCFgIWAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYAMAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGAW8CCQFvAW8BbwFvAg4CDgIOAg4CDgAAAAAC FgIWAhYCFgIWAhYCFgIWAhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG6 AAAAAAAAAAAAAAAAAIYAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFvAgkB bwIGAW8CmQFvApsCDgIOAg4CDgAAAAACFgIWAhYCFgIWAhYCFgIWAhYAAAAAAAAAAAKvAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAboBugAAAAAAhgAwAAAAAAAAAAAAAAL/AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAFvAgkDCwIGAW8CmQIOAg4CDgIOAAAAAAIWAhYCFgIWAhYCFgIWAhYCFgAAAAAAAAKv AAAAAAAAAAAAAAAAAAAAAAAAAAABugG6AAAAAAMwADAAAAAAAAAC/wAAAAAAAAAAAAAAAAAAAAAA AAFvAgkDCwMLAwsDCwIGA0cCmQIOAg4CDgAAAAACFgIWAhYCFgGTAhYCFgIWAhYCFgAAAAAAAAKv AAAAAAAAAAAAAAAAAAABugG6AAAAAAMwAzAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB bwIJAwsDCwMLAgYDRwNIAg4AAAAAAhYCFgIWAhYCFgIWAhYCFgAAAAAAAAKvAAAAAAAAAAAAAAAA AboBugAAAAAAAAMwAzADMAAwAAAAAAAAAAAAAAOaAAAAAAAAAAAAAAAAAAAAAAFvAgkDCwMLAgYA AAAAAhYCFgIWAhYCFgIWAhYCFgAAAAAAAAAAAAAAAAAAAAAAAAG6AboAAAAAAzADMAMwAAAAAAAA AAAAAAAAA5oAAAAAAAAAAAAAA6ACCQMLAgYAAAAAAhYCFgIWAhYCFgIWAhYAAAAAAAAAAAAAAAAA AAAAAboBugAAAzADMAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAgYCCQMLAgYAAAAAAhYCFgIW AhYCFgIWAZMAAAAAAAAAAAAAAAAAAAAAAboBugAAAzADMAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAD oAIGAgYCBgIJAwsCBgAAAAACFgIWAhYCFgIWAhYAAAAAAAAAAAAAAAABugAAAzADMAMwAzAAAAAA AAAAAAAAAAAAAAAABA8CBgIGAgYDCwIGAAAAAAIWAhYCFgIWAhYAAAAAAAAAAAGTAAADMAMwAzAD MAAAAAAAAAAAAAAAAAAAAgYCBgIGAwsCBgIGAAAAAAIWAhYCFgIWAhYAAAAAAAAAAAAAAzADMAAA AAAAAAAAAAAAAAIGAgYCBgMLAgYCBgAAAhYCFgIWAhYCFgAAAAAAAAAAAAADMAAAAAAAAAAAAAAA AAIGAgYCBgMLAg4CBgIWAhYCFgIWAhYAAAAAAAADMAAAAAAAAAAAAAAEcwMLAg4CBgIWAhYAAAAA AAADMAAAAAAAAAAAAAADCwIOAgYCFgIWAAAAAAAAAzAAAAAAAAACDgIGAhYCFgIWAhYAAAAAAAAD MAAAAAACDgIGAhYCFgIWAhYAAAAAAAAAAAKbAhYCFgIWAAAAAAAAAhYCFgIWAAAAAASwAhYCFgIW AAAAAASwAhYCFgIWAhYAAAAAAAAACAACAAAAAAAACfAAAAAAAzYAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAABrwCSAAIAKQAqACsALQAwADMANAAuADUANgAvADcATgBRAFEAUgBTAAAAVACHAFQA iAAtAFQAygBtAIgAzwDqAO4AywD0AAAAzACuAFwA+QEEAQ0BDwCIAIgAiAD6AFUBEAEQAPABJwAb AAMAHgAEAAUAEAAgAAYADwATACwABwAZABwACAAJABIACgALAAwADQAOABEAFAAVABYAGAAaAB0A HwAhABcAIgAjACQAJQAmACcAKAAxADIAOAA6AEAAUABbAFYAXQA7AGYAOgA5AGEAYgA8AF4APQA+ AFcAWABnAGMAPwBZAFoAXwBoAGQAaQBqAGsAPABgAEEAZQBCAGwAcABDAEQARQBxAEYARwBIAEkA SgBLAG4ATABNAHMAdAB1AHYAeABvAHkAcgB6AHsAfwCAAAAAfAB3AIEAAACTAIIAfQCUAJUAlgCD AJcAmAB+AJkAhACFAIwAjQCNAI0AjQCNAI0AjQCNAI0AmgCcAJ0AngCgAKIAowCkAKYAnwChAJsA pwClAKgAqQCqAKsArACIAK0AUgCvAAAAsACxALIAswC0ALUAtwC4ALoAuwC8AL0AtgC+AL8AwADB AI4AwgDDAI8AxQDGAMcASADEAMgAkAAAAAAAAADSANMAkQAAAAAA1ADVANcA2gDbANwA1gDdAN4A 3wDgAOEAiQDiAOMA5ADlAIoA5gDnANgA6AC5AOkAiwDrAOwA7QBnAKwA7wCsAPEA8gDZAPMA9QD2 APcAVACIAIgA+ABSAPsAAADQANEA0QDRANEA0QDRANEA0QDRANEA/AD9AP4A/wEBAQIBAwEFAQcB CAEJAQoBCwEMAAABEwAAARMBFwAAAAABBgEYARcBGQEaARsBAAEcARQBFQEdAR4BHwEgAM0AyQEh ASIBIwEkASUBJgEoAFAAAADOAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATsBPABUAREAiABSAT0A AADQARYBFgEWARYBFgEWARYBFgEWARYA/gD0AT4BPwE9AUEBQgFDAUQBRQFGAUcBSAFJASoBSgFL AUwBKwFAAU0BLAFOAU8BUAFRAVIBUwAAATkAAAFYAVkAAAFbAQ4AAAFdAV4AAAAAAP4BXwFgAWEB YgFaAWMBOgFkAKoBEgFlAWYBZwFoAWkBagFrAWwAAAF3AXgAAAAAAAABeQA5AKMBegD+AW0BgAGC AP4AVAEPAIgAygGDAIgBhAERAIgAUgBVAAAA0AFcAVwBXAFcAVwBXAFcAVwBXAFcAYUA/gGGAYcB iAGJAToBigGMAW4BcAFxAAABbgFuAXsBdgF8AT0BdgE9AZABjgGRAX0BfgGLAZIA/gAAAZQBfwGV AZYBlwGYAY0BjwBWAZkBmgD+AZsBnAFUAAABoQFVAAABogBXAFgAAAFWAaMAWQGBAAABVwGkAAAB pgGnAagBqwGsAa0BrgFyAbUBtgGpAXMBdAG3AbAAAAF1AbEBsgG4AbkBqgG6AbsBvAG9AbMAAAHG AbQAAABUAAABDwCIAAABxwERAIgByAAAAFIByQAAAAABygDQAaUBpQGlAaUBpQGlAaUBpQGlAaUB ywHMAc0BzgAAAdAB0QAAAdIB0wHUAc4B1QHWAdcBcAFxAb4BcAFxAb4BzwHFAXABcQG+AdgB2QFw AXEBvgHaAXABcQG+AJgB2wHcAd0BSQHeAZ4B3wHgAeEBnwHiAeMBnQFwAXEBvgFwAXEBvgHkAPQB 5gAAAaABogHpAeoAAAAAAecAAAHtAP4AAAHuAe8B6AAAAfEB8gHzAfQB9QH2AfcBvwHBAfgB+QH6 AfsAcgH8AHsAgQH+Af8BwAIAAgECAgAAAgMBOgH9AcICBAIFAAAAAAIUAAABxAHlAFQAiAEPAIgB 7AHDAAAAAAIVAh0A0AHwAfAB8AHwAfAB8AHwAfAB8AHwAAACHgIfAAACIAIhAAACIgIjAAAAAAIk AAAAAAIlAiYCJwIoAikCKgG+AXABcQG+AP4CKwIsAi0CLgIvAjABcAFxAb4CMQCyALICMgIzAjQB ogI1AjYCNwHrAXABcQG+AXABcQG+AXABcQG+AXABcQG+AAACDwAAAjgCOQI6AAACPQGiAj4AAAD+ AAACPwJAAkECQgJDAkQCMQH9AkUB7gAAAgcCRgDZAkcCSAJJAgkCSgJLAkwCCAJNAk4AAAAAAlsC XAAAAmYCZwILAAAAAAJoAgwAAAJpAAACFwBUAgoAUgAAAAACEADQAAACGAIRAhIAAAIZAg0CEwIa AhsAAAJqAmsCbAAAAhwCbQAAAm4AAAJvAAACcAAAAb4BvgFwAXEBvgAAAlEAAAG+Al0BcAFxAb4C DwG+AAAAAAFwAXEBvgJxAXABcQG+AAACUwIPAb4CcgAAAnMCdAGiAnUAiwFwAXEBvgI7Ag8BvgIP Ab4CPAJdAg8BvgJ2AncCeAD+Ag8BvgJ5Al0CegJ7AnwCfQJPAbIAsgJdAl0CfgJ/AoICUAAAAoMC hAJdAAACVAKFAlICXQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKTAAAAAAJXAqACXgJWAqECrAJV Aq0CrgKvArACswAAArQCWgAAAl8CWAJZAAAA/gJiAAAAVAJhAFICYAAAAAACsQAAArUCsgJkArYA AAK3AAAAAAJjAAABogK4AAACUQG+Ab4AAAJlApICkgKSApICkgKSApICkgKSApICXQFwAXEBvgAA AXABcQG+AXABcQKXAAAAAAAAAXABcQG+Ag8BvgKAAoEBcAFxApkCDwG+Al0CDwG+ApoCDwG+ArkA AAIPAb4CugIOAAAAAAEZAbEBsgK7AAACvQK+AboClQKjAbMCXQCyAqsCvwG6AAACwgJdAl0CXQKi AAACwwIsAsQCxQLGAscCyALJAsoCywKUAswCzQLOApgClgKdAl0CzwKbAp4C0AJdAl0C0QKkApwC 0gAAAAAC3QLeAAAAgQLoAukAAAAAAAACnwBUAAAC6gLsAFIAAAAAAqUBogLtAAAC7gAAAAAAAALv AAABTwAAAqcC8ALxAvICpgAAAAAAAAAAAAAAAAAAAvMAAAL0AXABcQG+AlECqAG+ArwBcAFxAtUB vgG+AqoC2AAAAqkBcAFxApkC9QGiAXABcQG+Ag8BvgJdAl0CDwG+Ag8BvgL4AsECwALaAg8BvgJd Al0CXQJdAuUCXQAAAl0AAAL5AAAAAAL8AjEBTwL9Av4AAAMAAwEArAMCAusAAAMDAtQDBAKQAwUD BgMIAxUDFgAAAgcDIQAAAtMC1gLXAAAC4AAAAtsDIgAAAyMAAAAAAAAC2QLiAt8AAALkAAAAUgL6 AAAAAALcAucC4QLjAAAAAAAAAuYDBwMHAwcDBwMHAwcDBwMHAwcDBwMJAXEBvgJRAAABvgAAAAAD DAG+AAABvgFwAXEDEALYAg8BvgJdAAAAAAMlAAADJgAAAvYDJwL3Al0DKAAAAykDKgIPApcCXQMr Ay4C+wAAAAADLwMzAzQAAAM1AzcAAAM4AzkCDwG+Ag8CmQJdAzoDOwMbAzwDFAA5Az0AAAMcAz4D DQJdAl0DCgJdAw4CXQMPAz8DQAAAAusAAAAAAAADFwNKAxkDSwMRAAAAAAAAAxIDGAMxAAAAUgAA AAAAAAAAA1QAAANVAAADVgAAA1gDWQAAAAABcAFxAb4AAAAAAxMAAAAAAxoDHQAAA1oDHgJRAAAB vgNbAwwBvgG+Ax8CogMgAyQDDAG+AAAAAAAAA1wAAAMsAwwBvgMMAb4BvgLYAzICDwLVAg8BvgMt Ag8CmQJdAbEDXQNgAl0CXQAAAl0CXQNhAbMDGwNBAAADZwNQAAABvwAAAAADawNoA2wAawGuA20D bgJdAl0CXQLrAAADaQNvA3ADcgNzA3QAAANCA2oDRAAAA0YBewNFAAADQwAAAAADSQOEAAAAAANM AAADSAAAA3oAAAAAA08AAANiAFIDYgAAA00DTgNxA3EDcQNxA3EDcQNxA3EDcQNxAAAAAANRA1cB cAFxAb4AAAJRAAABvgAAA1IDUwG+AwwBvgKZAAADYwJdA4UDDAG+AwwBvgIPAxADXgN7Al0DhgAA A18DhwOIA4kDZAOKA2YDiwOMAAAAAALLA34DfwJdAxsDjwOQA2UDlQAAAl0AAAJdAAACXQOWAAAD lwOYA5kAAAJdA5sDnAOdA3UDeQCsA3MDngOfA6QCDgAAAusAAAN3A3wAAAN2AAADpQAAA3gAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA30DYgOtA2IC7QNiAFIDgAOUA64DrwOwA7EDsgOCA7MCogO0AAAA AAO3A4MA1wOhA4EBvgAAAAABcAFxAb4DDAG+AwwBvgAAAb4DuwO8Al0CXQJdAl0CXQJdAl0CXQO9 A44DvgO/A8ADwQOSA8IDwwPEA40DxQPLA8wAAAPUA9UAAAAAAAAD1gORAAAD1wAAA5MDYgNiAAAA AAAAAAAAAAAAAAADYgPYA9kD2gPbA94AAAAAAAAAAAAAAxwDowOoA+IDogOmA+MDoAPkA6cD5QPm A6kDqgPGA8cDHAOsAb4DqwPnAlED6AG+AwwBvgPpA+oD6wJdAl0CXQJdAl0CXQPTAAADtgO4A/MD 9AO1AAADYgAAA2IDYgAAA/sDuQAAAAAAAAO6A/wD/QP+A/8A/gAAAAAAAAAAAn8EAAAAAAAEAgAA AAAAAAAAAAAEBwAABAgECQQKBAsDyACyA8oD0AG+ApUDzQPRA84EDAQNA+sEDgQVA8YDxwJRA8kB vgG+Al0D4QPPA9ID4APxAwwBvgJdAl0CXQPcA90D+gJdA98CXQGZAAADYgNiBBYDYgQcAAAEHQQe AKwAAAAAAAABIAQfAAAAAAQhAAAAAAAABCYD7QAABCcAAAPuAgcAAAAAAAAD7wAAAAAAAAAABCgE KQQqBCsD9QQsA/YD8ADVA+wAAAAAAAAD8gP5BAMEBAG+A/cD+APGA8cBvgG+BAYCUQQUAb4DDAG+ Al0CXQQBAAACXQQFAl0EMwQ0Al0EIAJdBDoDYgNiA2IDYgQ7AAAAAAQ8BD0AAAAABD4EQQAAA8cB vgG+AAAAAARCBEMAAAD+AAAAAAAABBAERAAABEUERgAAAUgAAAQSAAAAAAG+AAAEFwAAA0wEDwRN AAAEGAQRAAAEEwQZBBsDDAG+Ab4EDwQkAl0CXQQjAqICXQQaAAAEJQAAAl0DZQQuA2IEIgNiAl0D YgRTBFQDYgAABFUBvgQtAb4EVgG+Ab4DDAG+BEgBvgAABFcAAAJdAAAEWQJdBFoEWwRcBF0EXgAA AAAAAAE2BC8AAAQ1AAAEIAJdAAAAAARqBGsEMQQ4BDAAAAQyAAAENgQ5BD8CXQAABDcAAAEZBEAE JARsAAAEbgRSBG8CXQRwAscESgNiBHEERwA7BEkEcgRLAAABvgKXBGAETAMMAb4AAAG+BGEAAAG+ Al0EUAROAAAETwAAAl0EeQJdAAAAAAR6AAACXQAAAl0AAAR9BH4A9ANiBFEAAAR/BIAEgQSHBIgE iQSLAPUA/gSMAAAAAALVAAAEjQAAAAAAAAAABGAAAAMMAb4AAARjAAAEWAG+Ag8BvgRkBGUAAAJd Al0EZwJdBF8CXQRmAl0EYgSUBGkEaAR7Ab4EcwRzBHMEcwRzBHMEcwRzBHMEcwNiApkDDAG+Ag8B vgG+BIUCXQRtA2IAAAMMAb4CDwG+AAAElQSWBJgEdgAAAb4EmQIxBKAEdAAAAAAEoQSiAAAEdQSj AP4AAAAAAAAAAAMcAAAAAAAAAAADrAMcBKgAAAAABHcCBwSpALIEeASqAAAAAASCAl0AAASuAAAE rwJdBHwEsASOAAADYgS0AAAEhgSDAg8BvgG+BIQEigJdAAAEmgKbAl0CXQJdA2ICDwSkBKQCXQJd BI8EtQAAAl0CXQQ8AAACSwAAAAAAAAG+Al0AAAAAAl0ErQJdAAAAAAAAAAAAAAJdAAAEkwJdAAAE kAAAAAAAAAAAAAAAAAJdAAAEkQSSAAAAAASbBJ4AAAAAAAAAAAAAAAAAAAMXBJcEnQJdBJ8EnASl BKcAAAAABKYCXQSrAAAEtwJdAAACXQJdAl0EnQJdAAAErAAAAAAAAAAAAAAEsgAAAAAAAAAAAAAA AAAABLMAAAAAAAAEsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASyAAAAAAAAAAAAAAAA AAAAAAAABLYAAAS4BLkAAAAAAAAAAAAAAAAAAAS4AAAB+wAAAAAAAAS2AAAAAAS6AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAgAA AAAAAAnwAAABkwL/A0cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAE4ATwAAAIYA AAAAAIkAjAAAAAAAAAAAAC0AAAAAAAAAAAAAAAAAAADKAMwAywAAAWQAVAABABwAHQAeACAAIQAk ACUAIAAmACcAIAAoACwALgAvADAAMQAwADIATgBOAE8AUQCGAIkAQACJAIwAowCnAIkAsgAtAIkA bQA1ALcAwADIAMoAygDMAMsAtwAzAMsAzACuAOMADgACABEAAgACAAQAEwACAAMABwAfAAIADAAP AAIAAgAGAAIAAgACAAIAAgAFAAgACQAKAAsADQAQABIAFAAKABUAFgAXABgAGQAaABsAIgAjACkA KgArAC0ANAAzADUAKgA4ACoAKQA3ADcAKgA2ACoAKgAzADMAOQA3ACoAMwAzADYAOgA3ADsAPAA9 AD4ANgArADcAKwA/AEIAKwArACsAQwArACsAKwArACsAKwBBACsAKwBEAEUARgBHAEgAQQBJAEMA SgBLAEwATQBQAEsARwBNAFIAVQBNAEsAVgBXAFgATQBZAFoASwBbAE0ATQBTAFMAUwBTAFMAUwBT AFMAUwBTAFwAXQBeAF8AYABhAGIAYwBkAF8AYABcAGUAYwBmAGgAaQBqAGsAUABsAFIAbgBSAG8A cABxAHIAcwB0AHUAdgB3AHgAeQB6AHQAewB8AH0AfgBTAH8AgABTAIEAggCDAIQAgACFAFMAhwCI AIoAjgCPAFMAiwCNAJAAkQCSAJMAlACVAJEAlgCXAJgAmQCaAFAAmwCcAJ0AngBQAJ8AoACSAKEA dgCiAFIApAClAKYAqACpAKsArQCvALAAkgCxALMAtAC1AIcAiACKALYAiwC4AIsAjQCNAI0AjQCN AI0AjQCNAI0AjQCNALkAugC7ALwAvQC+AL8AwQDCAMMAxADFAMYAxwDJAM8AzQDQANIAzgDRAMEA 0wDUANUA1gDXALwA2ADQANAA2QDaANsA3ACKAIcA3QDeAN8A4ADhAOIA5ACIAOUAiwDmAOcA6ADp AOoA6wDsAO0A7gDvAPAA8QDyAPMAyQDNAM0AzgD0AM4A0QDRANEA0QDRANEA0QDRANEA0QDRAPUA 9gD3APgA+QD6APsA/AD9AP8BAAEBAQIBAwDlAQQBBQEGAOUA+QEHAOUBCAEJAQoBCwEMAQ0BDgDx AQ8BEwEUARABFQDJAREBFwEYARIBFgEZARoBGwEcAR0BFAEeAPEBHwEgAM4BIQEiASMBJAElASYB JwEoASkBLQEuASoBKwEsAS8BKAEwATEA9gEoATMBNQE2AQ4BDwEPARABNwEQATgBEQERARIBNAES ARYBFgEWARYBFgEWARYBFgEWARYBFgE5AToBOwE8AT0BPgE/AUABQgEpASoBKgEqASsBLAEyASsB MgFBASwBQwFFAUQBRgEyATIBQQFHAUgBSQFKATIBSwFMAU0BTgFDAUQBNAFPAVABUQFSAVMBDgFU AVgBDwFVAVkBNAE0AVYBEQFaATQBNAFXARIBWwFcAV0BXgFfAWABYQFiAWMBKgFmAWcBXwEqASoB aAFlAUkBKgFlAWUBaQFqAV8BawFsAW0BbgFlAW8BdwFlAXABVAF2AVUBVQFxAXgBVgFWAXkBcgFX AXoBVwFzAXsBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAXwBfQF+AX8BdAGAAYIBdQGDAYQBhQGBAYYB hwGIAW8BbwFvAXABcAFwAX8BdgFxAXEBcQGJAYoBcgFyAXIBiwFzAXMBcwGBAYwBjQGOAY4BjwFV AZABkQGSAVYBlAGVAVQBdAF0AXQBdQF1AXUBlgGXAZgBmQFXAZoBmwGcAZ0BnwGYAZ4BoQGiAaAB owGkAZgBpQGmAacBqAGpAaoBqwGsAXABcgGtAa4BrwGwAbEBsgGzAbQBtQG2AXEBtwG4AbkBugG7 AawBtAFzAbwBvQG+AZkBxgHAAXUBlwGdAZ8BngGeAaABdAGgAb8BxwHJAaUBpQGlAaUBpQGlAaUB pQGlAaUBpQHBAcoBywHCAcwBzQHDAc4BzwHEAcgB0AHFAboB0QHSAdMB1AHVAdYBvgHAAcABwAHX AdgB2QHaAdsB3AHdAb8BvwG/Ad4B3wHgAeEB4gHjAeQB5QHmAecBnQHBAcEBwQHCAcIBwgHDAcMB wwHEAcQBxAHIAcUBxQHoAekB6gHrAe0B7gHvAewB8QHwAfIB8wH0AfUB9gH3AfgB+QH6AfwB+wG+ Af0B9wH+Af8CAAHAAgECAgIDAb8CBAIFAgYCBwIUAhUCCAIdAh4BwgIJAhYCHwHDAgoCIAIOAcgB 6wHBAewCCwHsAcUB8AIMAcgBxQHFAg8ByAHEAcUByAHIAfsCIQIiAiMCDQHIAiQCEAIlAhECJgIX AicCEgIGAgcCCAIIAggCEwIJAhgCCQIWAgoCCgIKAg4CDgIZAhoCCwILAgsCKAIMAgwCDAIbAgsC DwIPAikCHAIqAisCLAItAewCDQINAg0B6wIQAhACEQIRAewCFwISAhICLgIvAjACMQITAhMCMgIY AjMCNAI1AjYCBwI3AjgCGQIaAjkCOgI9AggCOwI+Aj8CGwI8AgwCQAIKAhwCQQJCAkMCRAJFAkYC RwJIAkkCSgJLAkwCTgJPAlECEAJbAhcCDwJcAmcCDQJoAmkCagJrAm0CXQJuAhMCUAIXAhECEgJS Am8CGgJTAjsCGQI8AhgCPAJUAmwCVgJwAmwCGwJxAlUCcgJXAl8CGgJYAnMCdAJZAlECTwJRAloC HAJNAk0CTQJNAk0CTQJNAk0CTQJNAl0CUAJQAlACXgJSAlICUgJTAlMCUwJgAmECYgJUAlQCVAJW AlYCOwI8AlUCVQJVAlcCVwJfAlgCWAJVAlkCWQJ1AmMCWgJaAnYCTwJkAmUCdwJmAmYCeAJ5AnoC fAJ7AlECXgJmAl4CfQJmAn4CfwKAAoICYAJhAmICXQKBAoMChAKFAoYChwKIAokCigKLAowCUAKN Ao4CjwJUAlICWAJjApACVgJZApECZAJlApICXwJXApMCeQKUAqACoQKVAqsCrAKtApYCmwKXAloC gAKZAq4CsAKBApoCgQJgAnsCsQKYArICnAKiAqMCswKdArQCngJiArUCtgK3AmECnwKkAqUCpgKn AqgCqQK4AqoCuQKUApQClAKVAmMClQJ5ApYClgKWApsClwJlApkCrwJkApoCmgKaAroCuwKYApgC mAKcApwCogKjAp0CnQKeAp4CvgKBAoACnQKfAp8CpAKlAqYCpwKoAqkCvAKqAr0CvwLAAsECwgLD AsQCxQLGAscCyALJAsoCywKvAq8CzAKVAs0CzgLPAtAC0gLdAt4C0wKXAugC1AKUApcCmALVAqMC 1gKeAukC1wLqAtgC2QLhApwCpQKiArwCpwK9AsECwALBAt8CnwKqAqQCpgLHAtoC4AKpAtEC0QLR AtEC0QLRAtEC0QLRAtEC0wLTAtMC1ALbAtQC3ALiAtUC1QLjAtYC1wLXAtcC2ALZAtkC4QLkAuUC 7ALmAu0C5wK8Au4CvQLfAu8C6wLwAvEC2gLaAuAC8gL4AsEC9gL3AvkC/AL9AvoC/gMAAvsDAQMC AtsC2wLcAtwC4gMDAwQC4wMFAtwDBgMHAwkC4wMIAtUC5ALlAtQC5gLVAucC1gMIAwgDCgLrAusD CwMPAt8DFQLhAxYC2AMMAvYC9wLZAuAC+gL6AvsDDgL7Aw0DEAMhAxEDIgMSAyMDEwMlAycDFAMY AwkDCQMJAxcDGQLbAxoDGwLiAuQDHAMoAuUDCgMdAwoDKQMLAwsDDwLmAuUC5wLrAwwDDAMeAx8D IAMqAyQC9gMOAw4DDQMNAxADEQL7AxIDEgMTAxMC9wMUAxQDGAMmAysDLgMXAxkDLAMaAxsDLwMm AxwDCQMtAzMDHQMwAwkDMQMyAzUDNAM2AzcDOAM5AzoDHgMfAyADJAMkAzQDOwM8Az4DPwNAA0ED CgM0Aw0DQgMPA0oDDgNGAwwDQwNIAxMDVANMAywDFwNEAxEDRQNLA0kDLQMaA00DMAMyAzEDMgMY AxkDPQM9Az0DPQM9Az0DPQM9Az0DPQNOA08DHgMkA0EDQQNBA1ADQgNRA0IDUgMfAyADRgNDA0MD SANTAzEDTANVA0QDRANFA0UDSQNJAywDSwNNA1YDVwMtA1gDWQNaAzEDWwMyA1wDXQNeA18DYANO A08DTgNPA2EDYgMxA2cDYwNQA2QDUQNlA1IDaANmA2kDagNrA2wDUwNtA24DbwNBA0YDcANyA3MD dAN6A0UDdgNXA1cDQwNMA3UDQgN3A3sDeANEA3kDXgNfA3wDfQN+A4ADgQN/A4IDgwNNA2MDhANk A4UDZQNmA1ADZgOGA4cDiAOJA4oDUgOLA1ADjAONA44DjwNTA5ADdgNRA3YDkQOSA3UDdQN1A3cD dwN4A3gDkwN5A5QDlQN8A30DfgOAA4EDfwOCA4MDlgNfA5cDmAOZA5sDZAOcA50DngNeA58DpAOl A6ADrQOuA6MDjQOOA68DYwOhA7ADogNlA5EDkgOnA6YDqAOpA6oDqwOsA5MDsQOyA7MDtAO3A7UD uAO2A7oDuQN8A3kDfwO7A3gDfQO9A3UDvgN+A78DwAN/A4ADoAOgA4IDgwOjA4EDwQOhA8IDoQOi A6IDwwPEA8UDpwOmA6gDqQOqA6sDrAPHA44DkQPLA8wDjQO1A7gDtgO6A7kDxgPUA5IDyAPKA80D kwPVA9YD1wPYA9kDyQPOA88D0APaA9sD0gPRA94D0wPcA90D3wPhA+ID4APjA+QD5QPmA6ED5wOj A6kDxwOhA6YDqgOnA+gD6QPqA+sD8wPGA8YDyAOiA8gDygPNA7oDqAOrA7kDyQPJA8kDzgPPA9AD tQO2A9ID0QO4A9MD3APdA98D4QP0A+AD+wPtA/wD/QP+A+wD7gPvA/8EAAPyA/AEAgPxA/UD9wQH A8cD9gQIA/gDxwPHA/kEAQP6A8cEAwQEBAYEBQQJBAoECwQMA80EDQPOA8gEDgPGBA8EEAQRA8oD 0QPfA+AD7QPPA9AD7APsA+4D7wPhA/AD8gPwA/ED8QP1A/cD3QQSA/YD4AP4BBUEFgP5BAED+gQc BAMEBAQGBAUEHQQTBBQEHgQfBBcEGAQhBCYEGQQPBBAEEQQgBBoEJwQoBCIEKQQjBBsEJAPtBCoE JQQrBCwELQQzBC4D7wQvBDIEEgQwA/UEMQP3A+wENAQ1A/YD7gQ2A/ED+AP6BBMEEwQUA/AEBQQX BBgEBAP6BBkD+QQ3BAYEIAQaBAQEEQQiBAMEIwQbBCQEOgQ7BCUEOAQ8BC0EEAQuBD0ELwQyBDAE MAQuBDEEOQQ+BD8ENQRABEEENgRCBEMERARFBEYERwRIBEkETQQSBEoEFwRLBFMENwRMBE4EVARV BBQEGgQTBFAEFARPBBgEGwQiBDgEUQQZBFIEVgQjBCUEVwRYBFkEOQRaBDkEWwQ/BDAEQARcBC0E XQQvBF4EMQRfBEcESARJBDIESgRKBGEESwRJBGIETAROBDcENQRkBDYEYwRQBGoETwRlBGYEawRn BFEEaARSBGkEbgRvBGwEWAQ4BGAEcARxBHIEeQR6BHsEfQR+BH8EgARtBHMEXwR0BIEEdQR2BHcE eARhBHwEYgRiBIIESwSDBEAEZARjBGMETAROBIQEZQRmBFAEZwRHBGgETwRpBEoEhwRSBFEEbARg BGAEYARgBGAEYARgBGAEYARgBGAEbQRzBHQEdAR1BHUEdgR3BHgEWAR8BIUEggSCBIMEgwSGBIgE iQSLBGQEigSEBIwEjQSUBGIEjgSPBJUElgSRBGMEmASZBJAEkgSTBJcEZwSaBJsEnASeBGUEZgSg BJ8EnQRoBGAEoQSiBGkEowSkBKUEdASFBKYEqASnBKkEhgRtBKoEgwSrBIoErgSsBHgEdQSOBI4E jwR2BHwEkQStBI4EggSQBJIEkwSXBJoEmgSbBJwEngSEBK8EsASfBJ0EtASxBLUAAAAAAAAEpASl AAAEswSmBKcEpwSyBLYEtwS4BLkEqwS6BIYErAAABIUAAAAAAAAAAAAAAAAErQAABIUEhQAAAAAE jwSSAAAAAAAAAAAAAAAABLAEnASKBJEEsQSTBJAEnQSfAAAAAASeBLMEpQAABLIEsgS2BLcEuAS5 BJwEugAABKYAAAAAAAAAAAAABKwAAAAAAAAAAAAAAAAAAAStAAAAAAAABKsAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAEsQAAAAAAAAAAAAAAAAAAAAAAAASwAAAEuQS3AAAAAAAAAAAAAAAA AAAEswAABLYAAAAAAAAEtgAAAAAEuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgECAB2ZXJzaW9uAAIFAAAABAgAcHJvZmlsZQAHBSwA L3Vzci9zYmluL3NtYmxkYXAtdXNlcmFkZC8vL2V0Yy9pbml0LmQvbnNjZAAEBgBmbGFncwAHAgAA AAACAAAAAAIAAAAACAIABAgAAgAAAAACAAAAAAIAAAAABAcAY2FwczY0AAcCAAAAAAIAAAAAAgAA AAACAAAAAAgEDwBuZXRfYWxsb3dlZF9hZgALKQABAAABAAABAAABAAABAAABAAABBgABAAABAAAB AAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAB AAABAAABBgABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAB AAABCAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAB AAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAB AAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAB AAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAABAAAM BAYAYWFkZmEABipZAAAAABteeD0AAAAYAABZKAAAbm90ZmxleAAAAAABAAQAAAAAAAAD8QAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAACgAoAAAAAAAOADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAQAEAAAAAAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAE AAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRQkUAEQBEAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAEABAABAAQAAQAEAAEABAABAAQA AQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAkUJFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AQAEAAEABAABAAQAEQBEAAEABAABAAQAAQAEAAEABAABAAQAAQAEAAEABAABAAQAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEABEARAABAAQAAQAEAAEABAABAAQAAQAEAAEABAAB AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAACRQkUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEABAARAEQAAQAEAAEABAABAAQAEQBEAAEABAABAAQAAQAEAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAARAEQAAQAEAAEABAABAAQA AQAEAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAkAJAARAEQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC fwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAEQBEAAEABAABAAQAAQAEAAEABAABAAQAAQAE AAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAEQBEAAEABAABAAQAAQAEAAEABAARAEQAAQAEAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAAAAAAA AAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAQAEABEARAARAEQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEABEARAABAAQAAQAEAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAARAEQAAQAEAAEABAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAABAAQAEQBE AAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQBEAAEABAABAAQAAQAEAAEABAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAABAAQAAQAEAAEABAABAAQAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAQAEAAEABAABAAQA AQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEABAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAABAAQAAQAEAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAEABAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQABwAEAAAAAAAAA/EAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAAAAAAAAAPxAAAA AAAAAAAAAAAAAAAAAAAAAAEAAAADAAAAAgAAAAEAAAAIAAAABwAAAAsAAAACAAAAAAAAAAkAAAAA AAAAAAAAAAcAAAAAAAAAEQAAAAUAAAALAAAAEgAAABMAAAAVAAAAEQAAABUAAAAUAAAAFQAAAAEA AAACAAAAAwAAAAYAAAAEAAAABQAAACUAAAAVAAAABgAAAAcAAAAJAAAACgAAAAwAAAAoAAAAJQAA ADoAAAANAAAAIAAAAAsAAAAKAAAAEgAAABEAAAATAAAAXwAAACoAAAAkAAAAKgAAAEsAAAAvAAAA IwAAABsAAAAjAAAAMQAAAEMAAAAzAAAAOQAAAEsAAABIAAAATQAAAFMAAABEAAAARwAAAEQAAABU AAAARgAAAEoAAABdAAAAXAAAAGEAAAAVAAAAFgAAALsAAAAXAAAAvAAAAKQAAAAAAAAAWQAAAFMA AABmAAAAWAAAAGkAAABXAAAAeQAAAHUAAABtAAAAdwAAAHoAAACCAAAAggAAAHwAAAByAAAAeAAA AHoAAAB5AAAAfAAAAIQAAACKAAAAhAAAAHoAAACCAAAAhwAAAJAAAACOAAAAiQAAAIYAAACRAAAA mQAAAM4AAACaAAAAiwAAAJoAAACNAAAAmAAAAJMAAAAZAAAAkAAAAJgAAACSAAAAkAAAAJwAAAAZ AAABCQAAAQwAAAAdAAABDQAAARAAAAAlAAAAngAAAKYAAACtAAAAnwAAAAEAAAChAAAAtAAAAKgA AAC2AAAApwAAAKgAAACmAAAApgAAALUAAAC+AAAAvwAAAL8AAADCAAAAwgAAABoAAADEAAAAuQAA ABwAAADBAAAAvAAAALcAAADAAAAAAAAAAMkAAAAAAAAAvwAAAMwAAADQAAAAHwAAAL0AAAC/AAAA wAAAAQkAAADCAAAAxgAAANgAAADbAAAA0gAAAM4AAAAfAAAAzgAAANAAAADVAAAA4wAAANoAAADR AAAA1AAAADAAAAFLAAABTQAAAU4AAAFPAAABUwAAAVcAAADcAAABKQAAANcAAADkAAAA5AAAAPMA AADiAAAA5AAAAQAAAAD8AAAA8gAAAQIAAAD4AAAA9AAAAQAAAAEBAAAA/QAAACsAAAFsAAABDAAA AP4AAAEJAAABBAAAAUQAAAFFAAABEwAAAAAAAAECAAABEgAAARAAAAETAAABEgAAASUAAAEZAAAB XAAAAV0AAAEqAAABXgAAAR8AAAFhAAABJAAAASQAAAEpAAABJwAAAR0AAAEhAAABJwAAASMAAAEs AAABOAAAAWgAAAE0AAABPQAAAT0AAAGhAAABowAAAaYAAAGoAAABqwAAAUMAAAFAAAABgAAAAT4A AAFEAAABNgAAAX0AAAFEAAABVgAAAVIAAAFYAAABjgAAAVIAAAFaAAABXQAAAV0AAAFgAAABYAAA AcQAAAHHAAAByAAAAckAAAFaAAABZQAAAWYAAAFZAAABdgAAAZ8AAAFlAAABZAAAAW8AAAFwAAAB eQAAAXMAAAFxAAABfQAAAX8AAAGCAAABuAAAAYgAAAGFAAABgwAAAXQAAAGIAAABigAAAX0AAAGN AAABkAAAAXwAAAHNAAABzwAAAZwAAAGfAAABnQAAAgUAAAIHAAACCQAAAg4AAAGTAAABkAAAAfIA AAGYAAABlQAAAc4AAAGUAAABrAAAAAAAAAHYAAABmQAAAaMAAAGvAAABsAAAAa4AAAG1AAABpgAA Ah8AAAIsAAACLwAAAjoAAAI+AAACQgAAAhoAAAHtAAAB7gAAAbsAAAHMAAABuAAAAdgAAAHaAAAB 5AAAAeYAAAHYAAAB2wAAAewAAAHdAAAB3QAAAeQAAAIkAAAB8wAAAfAAAAHzAAAB8wAAAjIAAAH5 AAAB9QAAAgEAAAIEAAAB8QAAAfsAAAH6AAACRAAAAg8AAAJ0AAACEAAAAgUAAAJ5AAACfAAAAnoA AAJ/AAACCgAAAlEAAAJYAAACGwAAAgoAAAISAAACIAAAAiUAAAIyAAACIQAAAjEAAAI0AAACJQAA AioAAAI5AAACNgAAAjkAAAI6AAACLAAAAjIAAAIzAAACpAAAAkUAAAKtAAACsgAAArUAAAK4AAAC vQAAAsAAAALCAAACPAAAArkAAAJPAAAChwAAAkIAAAJMAAACRwAAAk4AAAJJAAACWgAAAlYAAAJN AAACTQAAApUAAAJfAAACWAAAAlsAAAJPAAACaAAAAmcAAAJqAAACzAAAAmAAAAJbAAACZwAAAmAA AAJeAAACZgAAAl8AAAJmAAACbgAAAmoAAAJrAAACZQAAAtoAAALbAAACawAAAq8AAAKDAAACgAAA AnsAAAKDAAACxwAAAoMAAAKJAAACmAAAAvwAAAKHAAACmgAAAo8AAALQAAAC0QAAAo0AAAKeAAAC lgAAAwUAAAMGAAADCwAAAw4AAAMRAAADFAAAAxcAAAMdAAADJgAAAygAAAMqAAADLwAAApwAAAMH AAADDQAAAx4AAAMgAAADIgAAAt0AAAKsAAACngAAAq0AAAKwAAACswAAAucAAAKvAAACrAAAArUA AALAAAACwwAAAr8AAALKAAAC1AAAAucAAALgAAAC5wAAAAEAAAL1AAADLAAAAugAAALxAAAC/QAA AvkAAAMAAAAC8AAAA2UAAANpAAAC9QAAAvIAAAL3AAAC+gAAAvsAAAMGAAADBwAAAvkAAAMFAAAD AwAAAwgAAAMAAAADCwAAAxEAAAMUAAADdwAAA3oAAAN9AAADgAAAA4MAAAOGAAADiAAAA4oAAAOM AAADjgAAAxoAAAOPAAADkgAAA5UAAAOXAAADmgAAA58AAAObAAADYAAAAxkAAAMhAAADDQAAA1YA AAMmAAADMAAAAxsAAAMcAAAAAAAAAzIAAAMvAAADQAAAA0MAAAM9AAADRgAAA1cAAAPFAAADkwAA A10AAANdAAADoAAAA9EAAAPSAAADXwAAA3AAAANiAAADcgAAA2IAAAOrAAADbgAAA3cAAAN3AAAD bwAAA2YAAANsAAADsgAAA4EAAAPjAAAD5gAAA+oAAAPlAAAD7QAAA+cAAAPwAAAD9QAAA/MAAANy AAAD+AAAA/wAAAP9AAAEAwAAA/4AAAQEAAAEBgAAA4MAAAN5AAADdwAAA5wAAAQIAAAD2wAAA6kA AAOkAAADpwAAA50AAAO7AAADuwAAA8QAAAQpAAAELgAAA/cAAAQ0AAAEOQAAA7sAAAPBAAADxQAA A9MAAAQ6AAADzAAAA8gAAAQOAAADygAAA80AAAPIAAAD0gAABBQAAARFAAAESAAABEsAAARHAAAE TgAABFAAAARTAAAEVgAAA+EAAARJAAAEVwAABFkAAARhAAAEWgAABGIAAARsAAAD1gAAA9kAAAPa AAAEZQAAA+UAAAQ+AAAD/gAAA/sAAAAAAAAAAAAABHAAAARxAAAEDgAABIsAAASSAAAEVAAABBUA AAACAAAEHgAABBsAAAQcAAAEIQAABC0AAAQuAAAEnQAABKUAAAShAAAEqAAABKoAAAStAAAEqwAA BJgAAASvAAAEtAAABGgAAASxAAAEtQAABLgAAAS9AAAEvgAABMAAAATDAAAEMAAABDcAAAQ5AAAE 0QAABD0AAARAAAAERAAABIAAAATEAAAE4QAABHAAAATmAAAE8AAABIcAAASFAAAEugAABLwAAASJ AAAEgwAABJEAAASHAAAEiQAABIkAAASZAAAE/gAABPsAAAUBAAAFBgAABQsAAAUDAAAAAwAABQ4A AASZAAAFCAAABQwAAAURAAAFFAAABRMAAAUXAAAFGAAABJwAAASTAAAE2gAABRwAAAScAAAEnAAA BLwAAAUhAAAFIwAABLYAAAUuAAAFOAAABN4AAATeAAAE4wAABNoAAAUdAAAE2gAABO0AAATiAAAE 7AAABN0AAATyAAAE6gAABVcAAAVbAAAFXgAABWAAAAVYAAAFYQAABWIAAAVjAAAFZgAABWgAAAVp AAAFawAABW4AAATwAAAE5wAABO0AAAT9AAAFNQAABQMAAAVyAAAFeAAABXcAAAUFAAAFCQAABQgA AAUJAAAFDwAAAAAAAAUOAAAFFQAABVMAAAUiAAAFKwAABZYAAAWkAAAFmwAABZ4AAAWlAAAFqAAA BaoAAAWrAAAFrAAABbIAAAWvAAAFrQAABTYAAAUsAAAFNgAABTQAAAVCAAAFswAABbUAAAW0AAAF QAAABU8AAAVBAAAFPgAABUkAAAVLAAAFiQAABVYAAAVHAAAFVwAABbwAAAW9AAAFwAAABcMAAAW/ AAAFxwAABdAAAAXVAAAF1gAABeUAAAXoAAAF6QAABV0AAAVdAAAFhQAABYEAAAWSAAAF/AAABf0A AAX+AAAFlQAABYwAAAWEAAAFkQAABZIAAAWKAAAFnQAABZIAAAWeAAAF2AAABgcAAAYIAAAGCQAA Bg8AAAYSAAAGCgAABhkAAAYcAAAGGgAABh4AAAYdAAAGHwAABaEAAAWtAAAFvQAABbAAAAW6AAAG MQAABjQAAAYLAAAF2gAABc0AAAXQAAAFzgAABeAAAAXRAAAF4wAABlEAAAZUAAAGVwAABlkAAAZa AAAGWwAABl0AAAZhAAAGZAAABmYAAAXqAAAGIQAABe4AAAXnAAAGYgAABmcAAAXpAAAF4wAABeUA AAXuAAAF/wAABe8AAAY5AAAGaQAABmoAAAZsAAAGbQAABm4AAAZvAAAGcQAABnIAAAZzAAAGdwAA BgEAAAYJAAAGGQAABhAAAAZ6AAAGGQAABhoAAAYwAAAGJQAABmcAAAYoAAAGowAABqUAAAaqAAAG rAAABq0AAAauAAAGrwAABrIAAAazAAAGuAAABngAAAY0AAAGQAAABj4AAAaHAAAGVgAABkkAAAZS AAAGTgAABk0AAAa9AAAGvwAABsEAAAbCAAAGxAAABskAAAbNAAAGzgAABs8AAAZVAAAGTgAABmAA AAZ8AAAGhAAABnkAAAZ8AAAG8gAABvYAAAb3AAAG+QAABvsAAAaFAAAGgQAABqgAAAaTAAAGfQAA BosAAAaWAAAHAAAABwIAAAcDAAAHBAAABwYAAAacAAAGjwAABpsAAAaWAAAGmwAABwsAAAcMAAAH DwAABxAAAAcXAAAHFgAABpwAAAakAAAGqAAABqIAAAccAAAHHQAABx4AAAciAAAHJwAABykAAAa5 AAAGyAAABtQAAAdCAAAHQwAAB0cAAAdOAAAG1AAABuMAAAbmAAAHUAAAB1QAAAdZAAAG2wAABusA AAdVAAAHWgAAB1wAAAddAAAG2gAABvYAAAdeAAAHYAAAB2EAAAdlAAAHYgAEAAIAAAAAAAAD8QAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABOAE4AAAAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAE4ATgBOADAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAC9AE4ATgDAADAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAC9AE4AwAAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ8BSAEPAQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAvQDAADAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgBSAFIAUgBSAFIAQ8AAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiQAAAAAAgAC9AXIA MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJAAAByQFIAUgBSAFI AUgB0AAAAdYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHtAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAIAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAA AckByQFIAcwBSAFIAUgB0AHQAdAB0AHQAAAB1gHWAdYB1gHWAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAe0AAAAAAAAAAAAAAAAAAAAAAIAAMAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAHJAUgBzAFIAUgBSAHQAdAB0AHQAAAB1gHWAdYB1gHWAdYB1gAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiQAAAAAAAAAAAIAAMAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAABSAHMAUgByQFIAkQB0AHQAdAAAAHWAdYB1gHWAdYB1gHWAAAAAAAAAAACVAAAAAAA AAAAAAAAAAAAAAABiQGJAAAAgAAwAAAAAAAAAAACkAAAAAAAAAAAAAAAAAAAAAABSAHMApkByQFI AdAB0AHQAAAB1gHWAdYB1gHWAdYB1gAAAAAAAAJUAAAAAAAAAAAAAAAAAYkBiQAAAIAAMAAAAAAC kAAAAAAAAAAAAAAAAAFIAcwCmQKZApkCmQHJAscB0AHQAAAB1gHWAdYB1gHWAdYB1gAAAAAAAAJU AAAAAAAAAAABiQGJAAAAgAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAcwCmQKZApkByQLHAdAA AAHWAdYB1gHWAdYB1gHWAAAAAAAAAlQAAAAAAAABiQGJAAAAgAAwAAAAAAAAAAADBAAAAAAAAAAA AAAAAAAAAUgBzAKZApkByQHWAdYB1gHWAe0B1gHWAdYAAAAAAAAAAAAAAAABiQGJAIAAAAAAAAAA AAAAAwQAAAAAAAAAAAAAAwoBzAKZAckB1gHWAdYB1gHWAdYB1gHWAAAAAAAAAAAAAAGJAYkAgAAA AAAAAAAAAAAAAAAAAAAAAAAAAwoByQHMApkByQHWAdYB1gHWAdYB1gHtAAAAAAAAAAAAAAGJAYkA gAAAAAAAAAAAAAAAAAAAAAAAAAAAAwoByQHJAcwCmQHJAdYB1gHWAdYB1gHWAAAAAAAAAAAAAAGJ AIAAAAAAAAAAAAAAAAAAAAAAA2EByQHJApkByQHWAdYB1gHWAdYAAAAAAAAAAAHtAIAAAAAAAAAA AAAAAAAAAAHJAckCmQHJAckB1gHWAdYB1gHWAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAHJAckCmQHJ AckB1gHWAdYB1gHWAAAAAAAAAAAAAAAAAAAAAAAAAAAByQKZAdAByQHWAdYB1gHWAdYAAAAAAAAA AAAAAAAAAAKZAdAByQHWAdYAAAAAAAAAAAAAAAAAAAKZAdAByQHWAdYAAAAAAAAAAAAAAdAByQHW AdYB1gHWAAAAAAAAAAAB0AHJAdYB1gHWAdYAAAAAAAACRAHWAdYB1gAAAAAAAAHWAdYB1gAAAAAD 5gHWAdYB1gAAAAAD5gHWAdYB1gHWAAAACAACAAAAAAAACGUAAAAAArgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABfgCLAAIAKQAqACsALQAwADMANAAuADUANgAvADcATQBQAFAAUQBSAAAAUwCB AFMAggAtALUAUwDYAL0A2wCCAOIA7wAAAL4AyQBbAL8AwgDDAMMAwwDDAMMAwwDDAMMAwwDDAPcB DgAbAAMAHgAEAAUAEAAgAAYADwATACwABwAZABwACAAJABIACgALAAwADQAOABEAFAAVABYAGAAa AB0AHwAhABcAIgAjACQAJQAmACcAKAAxADIAOAA7AE8AVABaAFwAZAA8AGUAOwBmADkAXQA9AGcA PgA/ADoAQQBeAEIAQABoAEMARABFAGkARgBHAGoASABJAEoAPQBLAEwAXwBgAGsAbABtAHAAbgBx AHIAYQBzAHUAdgAAAAAAYgB3AHoAVQB7AHwAdABjAG8AfQCMAHgAjQCOAI8AVgBXAJAAeQCRAFgA WQB+AH8AhgCGAIYAhgCGAIYAhgCGAIYAkgCVAJYAkwCYAJkAmgCbAJcAnACdAFEAggAAAJQAngCf AKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCvALAAsQCyALMAtAC2ALkAtwC6AIcAuwAAAIgA uAAAAAAAxADFAAAAiQDGAMcAygDLAMwAigDIAM0AzgDPANAA0QDSAIMA0wDUANUA1gCEANcA2QDa AIUA3ADdAN4ApADfAKQArgDgAOEA4wDkAOUA6ADpAOYAUwDqAOsAggCCAFEA5wAAAO0A7gDwAPEA 8gDzAPQA9QD2AP0A/gAAAQAAAAAAAAABAQEAAOwAAAECAQMBBAAAAMIA/wD/AP8A/wD/AP8A/wD/ AP8A/wEFAQYBBwEIAQkBCgELAQwBDQAAARMAvADAARQBFQEWARcBGAEZARoBGwBPAMEAUwD5AIIA ggCCARwA+gD7AIIA+gBRAR0AAAEeAR8A3ADiASABIgEfASMBJAElASYBJwEoASkBKgErASwBLQEu AS8BEAEhATABMQERATIAAAESAAABNwE4AAABOgAAATsA3AAAATwBPQD4AMIBOQE5ATkBOQE5ATkB OQE5ATkBOQE+AT8AogFAAUEBQgFDAUQBRQFGAAAA/AFPAAAAAAAAAVAAmgFRAFQBWADcAFMA+QCC AL0BWQCCAPsAggBRAVIAAAFTAVoA3AFbAVwBXQFeAVQBVQFfAR8BYQFlAWYBVgFjAR8BZwFgANwB aAFpAWoBawFHAUkBSgAAAUcBRwFkAU4BYgFsAU4BbQFuAFUA3AFvAXQBdQAAAXcAAAF4AAABfAF9 AFYAVwAAAYQBhQBYAVcBMwGGAYcBNAGIAYkBigAAATUBkgGTAZQAAAE2AMIBdgF2AXYBdgF2AXYB dgF2AXYBdgAAAZUBSwAAAZYBeQFMAU0AUwD5AIIA+wCCAXoAAABRAX8AAAAAAYABgQGXAAABmAF7 AZkBmwGZAYIBkQGcAYMBSQFKAYsBnQGeAZ8BoAGhAaIBowGkAZoBpQFJAUoBiwFJAUoBiwCRAaYB pwGoAakBqgGrAawBSQFKAYsBrQFJAUoBiwGuAUkBSgGLAOIBsAAAAXQBcQGzAXIAAAAAAbEAAADc AXAAAAG2AbgBsgG5AboBuwFzAMIBtwG3AbcBtwG3AbcBtwG3AbcBtwG8Ab0BvgG/AcAAbwGMAcEA dwB9AcMBjgHEAcUBxgHHAY0AAAAAAcIByAGvAFMAggD5AIIBtQAAAAAB1QGPAZAAAAHbAdwAAAHd Ad4AAAAAAd8B4AHhAAAB4gHjAAAB5AAAAeUB5gDcAecB6AHpAeoB6wHsAAAB7gCoAKgB7wHwAXQA AAF0AfEB8gHzAfQB9QAAAAABiwH4AMIBSQFKAYsBSQFKAYsBSQFKAYsAAAG0AUkBSgGLAUkBSgGL AdEAAADcAfkB+gH7AfwB/QHCAf4B/wAAAAACAAIBAgICAwIEAgUCBgIRAAAAAAAAAFEAUwAAAAAC GQAAAAACGgIbAAACHAIdAAACHgIfAAACIAHKAiEBywHXAAAAAAHOAAACIgAAAc8BzAHYAAABzQAA AdIAAAAAAdkB0wHUAAACIwIkAiUB2gGLAYsCEgF0AUkBSgGLAgkCEgGLAUkBSgGLAUkBSgGLAUkB SgGLAIUCJgILAicB0QGLAhIB9gISAfcCEgIoAikB0QGLAdEBiwHRAYsA3AIqAisB0QGLAiwCLQGB AKgCLgIxAAACMgIzAjQAAAI1AjYCNwF0AhMCBwI4AjkCOgI7AjwCPQI+AAACDAIIAAACSAIUAAAC UQIKAAACFgJSAAACUwJUAAACVQAAAlgAAAIOAAACFQAAAAACIgIYAAACFwBTAAAAUQAAAAACDQAA AAACDwJWAhAAAAJXAlkBdAEpAloCWwGLAUkBSgGLAgkBAgGLAUkBSgGLAUkBSgJCAUkBSgGLAdEB iwHRAYsB0QGLAdEBiwISAkoCXAISAl4CXwISAAACEgGAAYECEgISAi8CMACoAhIBiQGCAAAAAAJQ AmIB6AJjAmQCZQHQAmYCZwJoAmkCagJrAmwCbQJuAAACdwAAAAAAAAB9AkAAAAJ/AoAAAAJGAj8A AAJHAkMAAAAAAAACQQJEAAACRQJMAkkAAAAAAAAAUQBTAAACSwAAAAACgQAAAk0AAAJPAoMCTgKE AoUBLwKGAUkBSgGLAgkBiwGLAYsBSQFKAnEBSQFKAYsChwHRAYsCiAHRAYsB0QGLAXQCiwISAl0A AAJ1AhICEgISAAAB7gEvAo4CEgJ9AAACEgKCAAACjwAAAAACkQCkApICYQKTApQCPQKVApYCYAAA AqEAAAAAAAACqQAAAqoCqwAAAnAAAAHKAnMAAAJ2AnIAAAAAAAAAAAAAAm8CrQAAAnQCeQJ8AAAA AAKMAnsAAABRAngAAAAAAnoCfgAAAq4CrwKwAAAAAAKXAUoBiwIJAYsBiwISApoBiwFJAUoCngHR AYsCswHRAkICtgHRAYsCEgK3AhICEgKJAAACuQK6ArsCigISAhIAAAKCAAACvAK9AskAAALRAr4C EgLSAAAC0wAAAAAAAAKNAr8CwAAAAtUBgAAAAtYAAAAAAqIAAALXAAABggAAApsCnQAAAAACmAKc AAACtAAAAqYCowAAAAAAUQAAAAACoAAAAAACpwKfAYsCpAKsAUkBSgGLAqUCSQKaAYsAAAIJArEB iwKoApoBiwKaAYsBiwKaAYsB0QJxArICEgAAAdEBiwISAtoAAAISAuAC4QLdAX0CEgLOAuICEgAA AuMCEgAAArUC3gLkAuUC5gLnAugAAAFSAt8AAAKCAAAAAAL2AAACwQL3AAAC+AAAAYwC+QAAAAAC xAAAAvoAAAAAAsoAAAAAAFMCxQAAAAACyALCAsMAAABRAvsAAALGAAACzQAAAmkCzwLMAssCCQLY AYsBSQFKAYsAAAKaAYsC0AGLAtQCmgGLAtsCEgAAApoBiwISAdECngLwAwACEgLxAhIC8gLZAwEC EgISAwIDAwKCAAAAAAMFAwYDBwAAAKQAAALcAucDCAMJAAAAAAMWAoQAAAMXAFMAAAMYAAAAAAAA AAADGQBRAAAC/wAAAAAC7QAAAukB0AAAAxoC6wMeAAAC6gLuAuwC8wAAAAADHwMgAyEDIgMjAvUC SQLvAyQDJQMmAUkBSgGLAYsDCwL0AYsC/QKaAYsCmgGLAhICEgISAvwDJwISAAACEgISAzQCEgAA AzUCEgAAAzYC/gAAAzcDOAAAAAAAUwAAAAADPAAAAAAAAAAAAz0AAAM+Az8AAAAAAAAAAANAA0ED QgNDA0QDRQAAAAADUgAAAAADDQNTAAADKAMpAw4AAAMRApoBiwMPAwoBiwMMAxAAAAIJAxIBiwLy AAAAAAISAxMCEgISAhIDMwMVAhIDFAMdAhIAAABTAAAAAAMbAxwAAAAAAygDKQGLAgkBiwGLA0oC mgGLA1QDVQNWAhIDWQNaA1sDXANdAAAAAAAAAhIAqANeA18DRQISAhIDYAAAAAAAAAAAAyoDLAMw Ay0AAAJAAysAAAMuAhIDawMxA1ECEgAAAAADbAAAAAAAAAAAAy8DbQMyAKQDRwNuAzkDOgNIAcoD OwFtAAAAUwNJA0YDTAAAA0sDTQAAAygDKQGLAYsDZQNxA3ICCQNzAYsDdAKaAYsDdQNOA08DdgN3 AMcCEgISA1ACEgISAhICEgOCA4MAAAOEA4UAAAOHA4gAAAOJAAAAAAAAANwAAAOKA1gDbwAAAAAA UwAAA4sAAAAAA4wAAAAAA2IAAAAAAAAAAANXAAAAAAAAA5cDmANhAAADmQOaAAADYwNmA5sCygNk AykDZwNqAYsDYQNoAYsCmgGLAYsCEgJJAhIDaQOcA50CEgAAA54CEgOfAhIAUwOgAYsBiwKaAYsB iwGLAhIDjgISAhICEgAAA5YAAAISA28DcAJmAAADqgAAAAAAAAAAA6sBAgAAAAADrAOtA64DrwAA A3kAPAOwA30AAAO2AAADtwAAAAADeAAAA4ADewOBA3oAAAN8A34DhgAAAAAAAAOPA38BiwOUAkID uAOQA40CmgGLA5UBiwGLAhICEgO5A5ECEgISA5IDkwO6A7sCEgO8A8IDwwPEAnECmgGLAdEBiwGL AAACEgDjANwAAAAAAhIAAAPFAAACEgISAhIDxgAAA80AAAAAAAADzgAAA88D0AHuA9cAAAAAA9gD owAAAAAD2QOkA6UDpgOnAAAAAAOoA6EDqQDcAAAAAAAAA6ICmgGLAAADswHRAYsBiwAAA8AAAAIS A7EDsgPeApoBiwHRAYsBiwISA98CEgPgAxUDDgHRAYsBiwMOA+QCEgISA9EDtAAAAAADtQISAhIA AAPlA+YB0QPaA9oCEgAAA+oAAAISA+sDhAAAAAACEgO9AhIAAAAAAgUAAAAAAAAAAAAAAAAAAAAA A8cAAAAAAAADvgPBA8wAAAO/AAAAAAAAA8kBiwISAkQD0gAAAhIDyAPVA8oDywAAA+MCEgPTAhID 1AKiA9YCEgAAA9sAAAAAAhICEgPtAhICEgAAA90CEgISAhIAAAPcAhID1AAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAD4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4gAAAAAAAAAAAAAAAAAAA+gA AAAAAAAD6QAAAAAD6AAAAAAAAAPnA+8AAAPuAAAD7AAAAAAAAAAAAcAAAAPuAAAD7AAAAAAAAAPw AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAMAAgAAAAAAAAhlAAAB7QKQAscAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAA AE0ATgAAAAAAgAAAAAAAAACDAAAAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT8AUwABABwA HQAeACAAIQAkACUAIAAmACcAIAAoACwALgAvADAAMQAwADIATQBNAE4AUAB6AIAAmgCDAJ0AgwCo ALMALQCDAIsANQCDAIYAhgCGAIYAhgCGAIYAhgCGAIYAhgC7ANMADgACABEAAgACAAQAEwACAAMA BwAfAAIADAAPAAIAAgAGAAIAAgACAAIAAgAFAAgACQAKAAsADQAQABIAFAAKABUAFgAXABgAGQAa ABsAIgAjACkAKgAtADMANAA1ADgAKgA5ACoAOgApADYAKgA7ACoAKgApACsANgArACoAPAArACsA KwA9ACsAKwA+ACsAKwArAD8AKwArADcANwBAAEEAQgBEAEMARQBGADcARwBIAEkATwBRADcASgBL ADMASwBMAEcANwBDAEwAVABKAFUAVgBXADMAMwBYAEoAWQAzADMATABMAFIAUgBSAFIAUgBSAFIA UgBSAFoAXABdAFsAXgBfAGAAYQBdAGIAYwBRAE8AUQBbAGQAZQBmAGcAaABpAGoAawBsAG0AbgBv AHAAcQByAHMAdAB1AHYAdwB4AHkAewB9AHwAfgBSAH8AgQBSAHwAggCEAIcAiACFAFIAiQCKAIwA jQCOAFIAigCPAJAAkQCSAJMAlABPAJUAlgCXAJgATwCZAJsAnABRAJ4AnwCgAKEAowClAHMApgCn AKkAqgCrAK0ArgCsAIEArwCwAIIAhACFAKwAhQCxALIAtAC1ALYAtwC4ALkAugDCAMIAvADEAL0A vgC/AMUAxgCwAMAAxwDIAMkAwQDDAMMAwwDDAMMAwwDDAMMAwwDDAMMAygDLAMwAzQDOAM8A0ADR ANIA1ADVAIEAhADWANcA2ADZANoA2wDdAN4AggCFALwAvQC9AL4AvwDfAL4AwADAAL8AwQDgAMEA 4QDiAOMA5ADlAOcA5gDoAOkA6gDrAOwA7QDuAO8A8ADxAPIA8wD0ANQA5gD1APYA1AD3APgA1AD5 AP0A/gD6AQAA+wEBAQIA/AEDAQQAvAD/AP8A/wD/AP8A/wD/AP8A/wD/AP8BBQEGAQcBCAEJAQoB CwEMAQ0BDgEPAMEBEwEQAREBEgEUARUBFgEYARkA5AD4APkA+QD6ARoA+gD7APsA/AEXAPwBFwEb ARwBHQEeAR8BIAEXARcBIQEiASMBJgEnARcBJQEkASgBIgEpASoBKwEsAS0BDwEQARABEAERARIB JQERASQBLgESAS8BMAEYATEBMgE3ATgBMwE6ATQBOwE1AT0BPgEYARgBNgFBAUIBGAEYAPgBQwFE APkBRQFGAUcBTgD7AU8BUAFRAUgA/AE5ATkBOQE5ATkBOQE5ATkBOQE5ATkBSQFSARABSgFTATwB EAEQATMBNAE0ATUBNQE8AUsBNgFAATYBTAFAAUABVAFNAVUBPAFWAVgBVwFAAU4BWQFAAUgBSAFI AVoBWwFcAV0BXgFfAWABYQFWAWIBSQFJAUkBSgFKAUoBVwFjAWMBZAFlAWYBZwFoAUsBSwFLAWkB TAFMAUwBagFNAU0BTQFrAWwBbQFuATQBbwE1AXABcgFsAXEBdAEzAXMBdQF3AWwBeAF5AXoBNgF2 AXYBdgF2AXYBdgF2AXYBdgF2AXYBewF8AX0BfgF/AYABSQGBAYIBgwGEAUsBhQGGAYcBiAFKAW0B iQGDAYoBawFwAXIBcQFxAXMBiwFzAZIBTAFNAYwBlAGVAY0BlgGXAY4BkwGYAZkBmgGPAZsBnAGQ AZ0BkQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAYkBrgGvAbABsQGyAbMBtAG1AYsB tgG3AYwBjAGMAY0BjQGNAY4BjgGOAZMBcAGPAY8BjwGQAZABkAGRAZEBuAG5AboBuwG8Ab0BvgG/ AcEBpwHAAcIBwwHEAcUBxgHHAcgB1QHJAcoB1gG1AbQBtQHLAdsB1wHMAdwB3QHNAd4B3wHOAeAB 4QHPAeIBiwHjAYwBkwHQAdgBjwHZAeQB2gGQAY0BkwHRAY4B0gGRAdMBwAGTAZEBkQHUAeUB5gHn AZMByQHKAdYB6AHLAcsBywHMAdcBzAHNAc0BzQHOAc4BzgHPAc8BzwG1AekBzgHqAdAB0AHYAbQB 2QG1AdoB6wHsAdEB0QHSAdIB0wHTAe4B7wHwAdQB1AHxAfIB8wH0AfUB+AH2AfkB+gH7AfcB/AH9 Af4B/wHXAcoCAAIBAgICAwIEAgUCBgIHAc8BywIIAhEB1wIJAhoBzQIKAdkCGwILAhwCHQIMAh4C DQIgAg4B0gIPAdgCEAISAiEB2gITAdkB9gIUAfcCFQH3AdECFgIYAdMCHwHUAhcCHwIjAiQCJQIm AicCBwIIAggCCAIJAigCCQIKAgoCCgILAgsCCwIMAgwCDAINAg0CDgIOAg8CDwIQAhACEgITAikC EwIrAiwCFAIqAhUCGQIZAhYCGAH2AfcCLQIXAi4CGQIvAjACGQIxAjICMwI0AjUCBwI2AjcCOAI5 AjoCOwI8Aj0CPgI/AkgCQgJAAkQCUAIJAkECUQJSAkMCDwIIAkUCEAIMAkcCKgJGAgoCDQJJAg4C FQISAkoCSwJNAjACLwIwAhQCTAJOAlMCTwIWAlQCGAJVAhcCVgJXAlgCWQI/Aj8CPwJAAkICQAJE AkECQQJBAkMCQwJDAloCRQJFAlsCRwJHAkYCRgJcAl8CSQIqAl0CRgJKAksCTQJeAmICYwJkAkwC TgJgAk8CVAJUAmUCYQJmAmcCaAJpAjACagJrAmwCbQJuAi8CbwJ3AnICcAJ4An8CcQKAAoECcwJA AnQCQgJDAnUCRwJCAnYCeQJdAnoCfAI/AoMCXgJFAkoCTQJ7An0CYAJMAoICYQJJAmECZgJLAk8C fgKEAoUChgKJAooCbwJvAm8CcAJyAnACeAJxAnECcwJzAnMCdAJ0AosCdQJ1Ao4CdgJ2AnkCjwJ6 AnwCXQKMApECkgKTAl4CewJ9Ao0CggKCApQClQKhAp4CqQKWAn4CqgKXAqsCiQKKApkCYQKWApYC mAKtAq4CmgKvApsCnQJ4ApwCsAKfAq4CogJxAnICoAKjAnACcQKkAowCjAJ8AnkCpQKmAo0CpwKN AnYCqAKxAn0CdAKeAnoCggKXApcClwJ7An0CmQKZAqwCmAKJApgCfgKaApoCmwKbAp0CnAKcAp8C nwKKAqICsgKgAqACowKzArQCpAK3ArgCtgK5AqUCpgK6AqcCtQK7AqgCsQKNArYCvAK9Ar4CvwLA AsICyQK2AsECrAKsAsMC0QLGApcC0gLEAtMCygKXAtUCxQLLApsCyALWArICzAKiAs4CzQK0ApwC zwLQAqACmAKaAtQCtQLXArUCnQLYAqUC2QLaAqcCpAKjAsICsQLCAsECwQLBAtsCwwLDAqgCxgKs AsQCxAK0AsoC3ALFAsUCywLIAsgCzALdAswCzQLOAs0CsgLeAs8C0ALfAuAC1ALUAuEC4gLjAuQC 2ALlAtkCtQLmAucC6ALpAu0C9gL3AuoC+ALbAusC+QLsAu4C7wLwAvoC3ALxAtwC8gLzAsYC9ALB AsUC9QL7AsMC/wL8AsICygLEAs4C/gL9AwADAQMCAwMDBQLQAs4CywMGAwcDCALpAukC6QLtAuoC zwLqAtkC6wLrAuwC7ALuAu8C8ALYAwkC8QMKAvIC8wMWAvQDDAMXAvUDDQMYAtsC/AMZAxoDCwMO Av4C/QMPAx4DEAMRAxIDFQMfAxQDIAMhAxMDGwMdAxwDIgMjAyQDJQMmAycDKAMpAzQDLAMqAu0D NQMrAwoDCgLuAy0C8QMMAwwC7wLpAw0C7ALwAy4DCwLxAwsDDgMvAzADDwLzAxADEQMSAxUC9QMU AvQC/gMTAxsDHQMcAzEC/AL9AzIDMwMoAygDKQMqAywDKgMrAysDKwM2AzcDOAMtAzwDPQM+Az8D QAM5AzoDOwMuA0EDQgNDA0QDLwMwA0UDRgNHA0gDSwMLAw0DEgMPA0kDCwMMA0oDEAMxA1IDEwMy AzMDTANOA1MDTQNQA08DUQMRA1QDFANVAykDVgMbAxwDKQMpAx0DOQM6AzsDKgMoAy0DVwMsAy4D WANGA0YDRwNIA0sDWQNaA0kDWwNJA1wDSgNKA10DLwMwA14DXwNgA0wDTgMxA00DUANPA1EDawNs A2EDbQNuA2IDcQNyA2MDcwNkA2UDZgN0A2cDdQM7A1cDaANvA1gDaQN2A2oDcAN3A3gDeQNHA3oD ewN8A30DOgN+A38DgAOCA4MDRgOBA4QDhQOGA0gDTAOHA04DSgNhA00DUQNiA0kDTwNjA2QDZANl A2YDUQNnA1ADiAOJA2gDbwOKA2kDiwNqA3ADjAN4A3kDegN6A3sDfAN9A3kDfgN/A4ADjQOBA44D gQOXA1gDhgOPA5gDkAORA5IDkwOZA5oDlAOVA5sDnAOdA54DlgNjA58DoANmA6EDqgOiA6sDowOk A2IDpQNpA2UDagNkA6YDZQNnA3ADpwOoA6kDegNoA40DfwOOA6wDewN4A48DjwOAA5ADkQOSA5MD rQN8A5QDlQN9A34DrgOvA5YDsAO2A7cDuAOhA6IDogOjA6MDpAOxA6UDuQO6A7IDswOmA7QDuwO1 A6cDqAOpA7wDvQPCA74DvwPAA8MDwQPEA8UDxgPNA8cDyAPOA5ADyQPKA88DkQOSA5MDlAPMA8sD lQONA5YD0APRA9ID0wOPA7EDsQPUA6QDsgOyA7MD1QO0A9YDtQOiA6MD1wO9A70DvgO+A78DwAPY A8ED2QOlA6cDxwPHA8gDpgPeA8kDygPHA6gD2gPbA6kDzAPLA9wD3wPgA9ED0QPSA9MD3QPkA+ED 1APlA+oD4gPmA9UDsQPWA+MD5wPrA+gD6QPsAAAD7QPuA/AAAAO+A+8AAAAAA7IDtQPBAAADswAA AAAAAAPAA9oD2wO9A8gAAAPcA78DywPAA8AAAAPdA90DyQPhA8oD0wPMA+ID5gPUAAAAAAPjA+cD 6APoA+kD7APWA+0D7gPwAAAD1QPvA9MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9sAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA9wAAAAAAAAAAAAAAAAAAAPiAAAAAAAAA+MAAAAAA+cAAAAAAAAD 4QPtAAAD7wAAA+YAAAAAAAAAAAPsAAAD6QAAA+wAAAAAAAAD7gAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg= --nextPart1888985.0BvXtKQilD-- From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 18 15:53:01 2015 Received: (at 22181) by debbugs.gnu.org; 18 Dec 2015 20:53:01 +0000 Received: from localhost ([127.0.0.1]:56058 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aA21N-0003He-G2 for submit@debbugs.gnu.org; Fri, 18 Dec 2015 15:53:01 -0500 Received: from mail-ig0-f169.google.com ([209.85.213.169]:35583) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aA21M-0003HQ-N5 for 22181@debbugs.gnu.org; Fri, 18 Dec 2015 15:53:01 -0500 Received: by mail-ig0-f169.google.com with SMTP id to4so189544igc.0 for <22181@debbugs.gnu.org>; Fri, 18 Dec 2015 12:53:00 -0800 (PST) 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=g//QYg3Sy6okuc1aZud8NgShLnqEvj4bOAtMjrN9Dz8=; b=yJaMlaqhg5E9HBV04BpV5U8t8YT8SQUXyrf3MldrnM2wA/wZ6KqXdjW035191B438C DSATpF6u7ETWws1i3Qg2QxQCgkSWJVrQqLyEgMhL1dVFTB2T921tkCfpeODk68MNy5db 6NNj+8fFlNUK7lAO0INUht9naLEJ7zgWtZRqoOiZxY3HGONE6qPMlLLkU1UIPzucuUYD Vd63blGN2R6/ZLgFNCNT7i4z6Xl71wn6JtD/Nxp44GUbkSInSpkfhOOyBmU3XkWEavEW F1Z9TK4Mu4Lh6dqzGuwNwLlcVrm4E79mxm+5q1FSHam788JW919TqTDVd1/I98PwUaxH go2g== X-Received: by 10.50.49.109 with SMTP id t13mr5479758ign.89.1450471975054; Fri, 18 Dec 2015 12:52:55 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Fri, 18 Dec 2015 12:52:35 -0800 (PST) In-Reply-To: <1668141.vFSSi8QY7V@tux.boltz.de.vu> References: <1668141.vFSSi8QY7V@tux.boltz.de.vu> From: Jim Meyering Date: Fri, 18 Dec 2015 12:52:35 -0800 X-Google-Sender-Auth: aVaIgTjEmROu62nv4_s3ZyIx8IQ Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Christian Boltz Content-Type: multipart/mixed; boundary=047d7bdc1234d4de9d05273252ae X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 22181 Cc: 22181@debbugs.gnu.org, Seth Arnold 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: -0.7 (/) --047d7bdc1234d4de9d05273252ae Content-Type: text/plain; charset=UTF-8 On Tue, Dec 15, 2015 at 12:20 PM, Christian Boltz wrote: > Hello, > > I hit an endless loop in grep 2.22. I can reproduce it with > > # grep -obUa -P '\x04\x08\x00profile\x00\x07' cache--usr.sbin.smbldap-useradd > 16profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > 27801profile > [...] > > I get this line over and over (some minutes long) - but for testing, > you might want to use ... | head -n50 to avoid heating your office > using your computer ;-) > > The file needed for the reproducer is attached. > To make sure you have an unmodified copy - its sha256sum is > 89f458796dcb1cdcaec534fec84c6c3440844dbd6dc014e51a5d74e9800c2aab > > I have more files that can reproduce the endless loop - basically it > looks like lots of (or all?) AppArmor cache files of profiles that > contain subprofiles or hats trigger this. OTOH, cache files from single > profiles don't trigger the endless loop. > > As the subject says, I'm using grep 2.22 on openSUSE Tumbleweed. > > This bug seems to be a regression. I wasn't able to reproduce this bug > with grep 2.14, and sarnold on #apparmor also couldn't reproduce it with > grep 2.21 on Ubuntu. OTOH, he could reproduce the endless loop with > grep 2.22 on Ubuntu. > > I also downloaded and compiled the grep 2.21 and 2.22 tarballs. > Result (not too surprising): > - 2.21 works as expected > - 2.22 enters an endless loop > > -> This is clearly a regression between 2.21 and 2.22. > > > For comparison: The expected output (with grep 2.21) is: > > #2.21# ./grep -obUa -P '\x04\x08\x00profile\x00\x07' cache--usr.sbin.smbldap-useradd > 16profile > 27801profile Thank you for the report. That is indeed a bug in the latest. Here's a small reproducer: printf '\201ab\0'|LC_ALL=en_US.utf8 grep -oa -P ab And here is the patch that will form the basis of a complete fix: --047d7bdc1234d4de9d05273252ae Content-Type: text/x-patch; charset=US-ASCII; name="infloop.patch" Content-Disposition: attachment; filename="infloop.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iic5jb111 ZGlmZiAtLWdpdCBhL3NyYy9wY3Jlc2VhcmNoLmMgYi9zcmMvcGNyZXNlYXJjaC5jCmluZGV4IGIx ZjgzMTAuLmRjNjgzNDUgMTAwNjQ0Ci0tLSBhL3NyYy9wY3Jlc2VhcmNoLmMKKysrIGIvc3JjL3Bj cmVzZWFyY2guYwpAQCAtMjg5LDcgKzI4OSw5IEBAIFBleGVjdXRlIChjaGFyIGNvbnN0ICpidWYs IHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsCiAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgLyogVHJlYXQgdGhlIGVuY29kaW5nIGVycm9yIGFzIGRhdGEgdGhhdCBjYW5ub3Qg bWF0Y2guICAqLwotICAgICAgICAgIHAgPSBzdWJqZWN0ICs9IHZhbGlkX2J5dGVzICsgMTsKKyAg ICAgICAgICBzdWJqZWN0ICs9IHZhbGlkX2J5dGVzICsgMTsKKyAgICAgICAgICBpZiAocCA8IHN1 YmplY3QpCisgICAgICAgICAgICBwID0gc3ViamVjdDsKICAgICAgICAgICBib2wgPSBmYWxzZTsK ICAgICAgICAgfQoK --047d7bdc1234d4de9d05273252ae-- From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 18 16:51:04 2015 Received: (at 22181) by debbugs.gnu.org; 18 Dec 2015 21:51:04 +0000 Received: from localhost ([127.0.0.1]:56064 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aA2vX-0004bu-W6 for submit@debbugs.gnu.org; Fri, 18 Dec 2015 16:51:04 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:44630) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aA2vW-0004bQ-HW for 22181@debbugs.gnu.org; Fri, 18 Dec 2015 16:51:03 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 652441601EC; Fri, 18 Dec 2015 13:50:56 -0800 (PST) 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 4ZvOD3_zH9qA; Fri, 18 Dec 2015 13:50:55 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id BF9DC16057C; Fri, 18 Dec 2015 13:50:55 -0800 (PST) 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 uNdokbsA-aqY; Fri, 18 Dec 2015 13:50:55 -0800 (PST) Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id A37241601EC; Fri, 18 Dec 2015 13:50:55 -0800 (PST) Subject: Re: bug#22181: endless loop in grep 2.22 To: Jim Meyering , Christian Boltz References: <1668141.vFSSi8QY7V@tux.boltz.de.vu> From: Paul Eggert Organization: UCLA Computer Science Department Message-ID: <56747FBF.7050701@cs.ucla.edu> Date: Fri, 18 Dec 2015 13:50:55 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 22181 Cc: 22181@debbugs.gnu.org, Seth Arnold 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: -0.0 (/) On 12/18/2015 12:52 PM, Jim Meyering wrote: > And here is the patch that will form the basis of a complete fix: Thanks for looking into that; you beat me to it! POSIX says grep has undefined behavior when given an encoding error, and looping forever sure fills the bill :-). From debbugs-submit-bounces@debbugs.gnu.org Sat Dec 19 01:24:51 2015 Received: (at 22181-done) by debbugs.gnu.org; 19 Dec 2015 06:24:51 +0000 Received: from localhost ([127.0.0.1]:56176 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aAAwc-0007sA-Ln for submit@debbugs.gnu.org; Sat, 19 Dec 2015 01:24:51 -0500 Received: from mail-ig0-f180.google.com ([209.85.213.180]:33334) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aAAwZ-0007rv-NJ for 22181-done@debbugs.gnu.org; Sat, 19 Dec 2015 01:24:41 -0500 Received: by mail-ig0-f180.google.com with SMTP id mv3so5602845igc.0 for <22181-done@debbugs.gnu.org>; Fri, 18 Dec 2015 22:24:39 -0800 (PST) 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=bWQno0nGS2+JdYnEN/82gBX+NalCgV9l7aA5gl/AbeA=; b=m04KMpxR1kokbUnthocGg5B73YnyCWFXPOW/KkLpd60GkpBggg9lOP1ELrAF/vlVhx HwSqeWEj1ReHRWQ8yRZZjr96+F1R6brXlgH/qvrTB+McA9oknbWnbTyl+hIHw+GfzqdL 3fXPmgJSwhxKIop6O/JbsXs+8fUTFe9rL6Qwl8k2caIuADvz714MzT/7XG2lcXhVyijv eSYy3FoLauEQVYiD8b328oOL/3A3gCayFqo6xD+JgZba705I2LA5zlCYcant8MGZp7qG V/l1h9PheGs3WMV5ir/KytUBmwZrmmQytL/64+ZInG0QvMnfXEzCtOGr5IgjJu6Dfn9F 5AjQ== X-Received: by 10.50.115.74 with SMTP id jm10mr7158353igb.50.1450506273899; Fri, 18 Dec 2015 22:24:33 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Fri, 18 Dec 2015 22:24:14 -0800 (PST) In-Reply-To: <56747FBF.7050701@cs.ucla.edu> References: <1668141.vFSSi8QY7V@tux.boltz.de.vu> <56747FBF.7050701@cs.ucla.edu> From: Jim Meyering Date: Fri, 18 Dec 2015 22:24:14 -0800 X-Google-Sender-Auth: f8X1jnM7YjErCIME_0DpVD8PjaE Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: multipart/mixed; boundary=089e0149445233aa5e05273a4fab X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 22181-done Cc: Seth Arnold , Christian Boltz , 22181-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: 0.0 (/) --089e0149445233aa5e05273a4fab Content-Type: text/plain; charset=UTF-8 On Fri, Dec 18, 2015 at 1:50 PM, Paul Eggert wrote: > On 12/18/2015 12:52 PM, Jim Meyering wrote: >> >> And here is the patch that will form the basis of a complete fix: > > Thanks for looking into that; you beat me to it! > > POSIX says grep has undefined behavior when given an encoding error, and > looping forever sure fills the bill :-). :-) Here is the patch I expect to push tomorrow. I am using the occasion of this reply to close the bug report by inserting "-done" in the bug email address. Any reply will still go both to the mailing list and to the bug-tracking system. --089e0149445233aa5e05273a4fab Content-Type: text/x-patch; charset=US-ASCII; name="0001-grep-oP-don-t-infloop-when-processing-invalid-UTF8-p.patch" Content-Disposition: attachment; filename="0001-grep-oP-don-t-infloop-when-processing-invalid-UTF8-p.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iicptjjr0 RnJvbSBhYmM2ZTU0ZTc1OWY3YmQyMjRlNjg3Yzc5NmFhOGM4OWE2ZDA5MWZhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGZiLmNvbT4KRGF0ZTog RnJpLCAxOCBEZWMgMjAxNSAxNToyMTozMiAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIGdyZXAgLW9Q OiBkb24ndCBpbmZsb29wIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIFVURjgKIHByZWNlZGluZyBh IG1hdGNoCgoqIHNyYy9wY3Jlc2VhcmNoLmMgKFBleGVjdXRlKTogV2hlbiBhZHZhbmNpbmcgU1VC SkVDVCBwYXN0IGFuCmVuY29kaW5nIGVycm9yLCBkb24ndCBibGluZGx5IHNldCBQIHRvIHRoYXQg bmV3IHZhbHVlLCBzaW5jZSB3ZQp3aWxsIHNvb24gY29tcHV0ZSBTRUFSQ0hfT0ZGU0VUID0gUCAt IFNVQkpFQ1QsIGFuZCBtaXN0YWtlbmx5Cm1ha2luZyB0aGF0IGRpZmZlcmVuY2UgdG9vIHNtYWxs IHdvdWxkIGFsbG93IHVzIHRvIG1hdGNoIHNvbWUKcHJldmlvdXNseS1wcm9jZXNzZWQgdGV4dCwg cmVzdWx0aW5nIGluIGFuIGluZmluaXRlIGxvb3AuCiogTkVXUyAoQnVnIGZpeGVzKTogTWVudGlv biBpdC4KKiBUSEFOS1MuaW46IEFkZCBDaHJpc3RpYW4ncyBuYW1lIGFuZCBlbWFpbCBhZGRyZXNz LgoqIHRlc3RzL3BjcmUtaW52YWxpZC11dGY4LWluZmxvb3A6IE5ldyBmaWxlLgoqIHRlc3RzL01h a2VmaWxlLmFtIChURVNUUyk6IEFkZCBpdC4KUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEJvbHR6IGlu IGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvMjIxODEKSW50cm9kdWNlZCBieSBjb21taXQsIHYyLjIx LTM3LWcxNGY4ZTQ4LgotLS0KIE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNiAr KysrKysKIFRIQU5LUy5pbiAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzcmMvcGNyZXNl YXJjaC5jICAgICAgICAgICAgICAgIHwgIDQgKysrLQogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAg ICAgICAgICB8ICAxICsKIHRlc3RzL3BjcmUtaW52YWxpZC11dGY4LWluZmxvb3AgfCAyNiArKysr KysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25zKCsp LCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA3NTUgdGVzdHMvcGNyZS1pbnZhbGlkLXV0 ZjgtaW5mbG9vcAoKZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IGFjNjMyZDcuLmZjNWZk M2EgMTAwNjQ0Ci0tLSBhL05FV1MKKysrIGIvTkVXUwpAQCAtMiw2ICsyLDEyIEBAIEdOVSBncmVw IE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGluZSAtKi0K CiAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlID8uPyAoPz8/Py0/Py0/PykgWz9dCgor KiogQnVnIGZpeGVzCisKKyAgZ3JlcCAtb1AgaXMgbm8gbG9uZ2VyIHN1c2NlcHRpYmxlIHRvIGFu IGluZmluaXRlIGxvb3Agd2hlbiBwcm9jZXNzaW5nCisgIGludmFsaWQgVVRGOCBqdXN0IGJlZm9y ZSBhIG1hdGNoLgorICBbYnVnIGludHJvZHVjZWQgaW4gZ3JlcC0yLjIyXQorCgogKiBOb3Rld29y dGh5IGNoYW5nZXMgaW4gcmVsZWFzZSAyLjIyICgyMDE1LTExLTAxKSBbc3RhYmxlXQoKZGlmZiAt LWdpdCBhL1RIQU5LUy5pbiBiL1RIQU5LUy5pbgppbmRleCBiODZmNzcyLi5hYmQ2NGZkIDEwMDY0 NAotLS0gYS9USEFOS1MuaW4KKysrIGIvVEhBTktTLmluCkBAIC0xOCw2ICsxOCw3IEBAIEJlbiBF bGxpc3RvbiAgICAgICAgICAgICAgICAgICAgICAgIGJqZUBjeWdudXMuY29tCiBCZXJuZCBTdHJp ZWRlciAgICAgICAgICAgICAgICAgICAgICBzdHJpZWRlckBzdHVkZW50LnVuaS1rbC5kZQogQm9i IFByb3VseCAgICAgICAgICAgICAgICAgICAgICAgICAgcndwQGhwcndwLmZjLmhwLmNvbQogQnJp YW4gWW91bWFucyAgICAgICAgICAgICAgICAgICAgICAgM2RpZmZAZ251Lm9yZworQ2hyaXN0aWFu IEJvbHR6ICAgICAgICAgICAgICAgICAgICAgZ3JlcC1idWdAY2JvbHR6LmRlCiBDaHJpc3RpYW4g R3JvZXNzbGVyICAgICAgICAgICAgICAgICBjcGdAYWxhZGRpbi5kZQogRGFnb2JlcnQgTWljaGVs c2VuICAgICAgICAgICAgICAgICAgZGFtQG9wZW5jc3cub3JnCiBEYWlzdWtlIEdPVE8gICAgICAg ICAgICAgICAgICAgICAgICBnb3RvaEBtLWRlc2lnbi5jb20KZGlmZiAtLWdpdCBhL3NyYy9wY3Jl c2VhcmNoLmMgYi9zcmMvcGNyZXNlYXJjaC5jCmluZGV4IGIxZjgzMTAuLmRjNjgzNDUgMTAwNjQ0 Ci0tLSBhL3NyYy9wY3Jlc2VhcmNoLmMKKysrIGIvc3JjL3BjcmVzZWFyY2guYwpAQCAtMjg5LDcg KzI4OSw5IEBAIFBleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3Qg Km1hdGNoX3NpemUsCiAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgLyogVHJlYXQgdGhl IGVuY29kaW5nIGVycm9yIGFzIGRhdGEgdGhhdCBjYW5ub3QgbWF0Y2guICAqLwotICAgICAgICAg IHAgPSBzdWJqZWN0ICs9IHZhbGlkX2J5dGVzICsgMTsKKyAgICAgICAgICBzdWJqZWN0ICs9IHZh bGlkX2J5dGVzICsgMTsKKyAgICAgICAgICBpZiAocCA8IHN1YmplY3QpCisgICAgICAgICAgICBw ID0gc3ViamVjdDsKICAgICAgICAgICBib2wgPSBmYWxzZTsKICAgICAgICAgfQoKZGlmZiAtLWdp dCBhL3Rlc3RzL01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggZDM3OTgyMS4u NmNlZDY3YyAxMDA2NDQKLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrIGIvdGVzdHMvTWFrZWZp bGUuYW0KQEAgLTEwNyw2ICsxMDcsNyBAQCBURVNUUyA9CQkJCQkJXAogICBwY3JlLWNvbnRleHQJ CQkJCVwKICAgcGNyZS1pbmZsb29wCQkJCQlcCiAgIHBjcmUtaW52YWxpZC11dGY4LWlucHV0CQkJ XAorICBwY3JlLWludmFsaWQtdXRmOC1pbmZsb29wCQkJXAogICBwY3JlLWppdHN0YWNrCQkJCQlc CiAgIHBjcmUtbwkJCQkJXAogICBwY3JlLXV0ZjgJCQkJCVwKZGlmZiAtLWdpdCBhL3Rlc3RzL3Bj cmUtaW52YWxpZC11dGY4LWluZmxvb3AgYi90ZXN0cy9wY3JlLWludmFsaWQtdXRmOC1pbmZsb29w Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiNjk2YjQKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0cy9wY3JlLWludmFsaWQtdXRmOC1pbmZsb29wCkBAIC0wLDAgKzEsMjYgQEAK KyMhIC9iaW4vc2gKKyMgRW5zdXJlIHRoYXQgZ3JlcCAtb2FQIGRvZXNuJ3QgaW5mbG9vcCBmb3Ig aW52YWxpZCBtdWx0aS1ieXRlIGlucHV0CisjCisjIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgQ29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9m IHRoaXMgZmlsZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyMgYXJlIHBlcm1pdHRl ZCBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcm95YWx0eSBwcm92aWRlZCB0aGUgY29weXJpZ2h0Cisj IG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKworLiAiJHtzcmNkaXI9Ln0v aW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi4vc3JjCityZXF1aXJlX3RpbWVvdXRfCityZXF1aXJl X2VuX3V0ZjhfbG9jYWxlXworcmVxdWlyZV9jb21waWxlZF9pbl9NQl9zdXBwb3J0CitMQ19BTEw9 ZW5fVVMuVVRGLTggcmVxdWlyZV9wY3JlXworCitmYWlsPTAKKworcHJpbnRmICdcMjAxX1wwJyA+ IGluIHx8IGZyYW1ld29ya19mYWlsdXJlXworcHJpbnRmICdfXG4nID4gZXhwIHx8IGZyYW1ld29y a19mYWlsdXJlXworCitMQ19BTEw9ZW5fVVMuVVRGLTggdGltZW91dCAzIGdyZXAgLWFvUCBfIGlu ID4gb3V0IDI+IGVyciB8fCBmYWlsPTEKKworY29tcGFyZSBleHAgb3V0IHx8IGZhaWw9MQorY29t cGFyZSAvZGV2L251bGwgZXJyIHx8IGZhaWw9MQorCitFeGl0ICRmYWlsCi0tIAoyLjYuMgoK --089e0149445233aa5e05273a4fab-- From debbugs-submit-bounces@debbugs.gnu.org Thu Jan 07 01:46:45 2016 Received: (at 22181) by debbugs.gnu.org; 7 Jan 2016 06:46:45 +0000 Received: from localhost ([127.0.0.1]:40793 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aH4LN-0002bR-An for submit@debbugs.gnu.org; Thu, 07 Jan 2016 01:46:45 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:50061) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aH4LL-0002bB-It for 22181@debbugs.gnu.org; Thu, 07 Jan 2016 01:46:44 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 3891C1601E7; Wed, 6 Jan 2016 22:46:36 -0800 (PST) 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 OOQbOcxifMHw; Wed, 6 Jan 2016 22:46:35 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 5F05B160819; Wed, 6 Jan 2016 22:46:35 -0800 (PST) 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 5ddcn7NXmOJL; Wed, 6 Jan 2016 22:46:35 -0800 (PST) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 3236F1601E7; Wed, 6 Jan 2016 22:46:35 -0800 (PST) To: 22181@debbugs.gnu.org From: Paul Eggert Subject: Re: bug#22181: endless loop in grep 2.22 Organization: UCLA Computer Science Department Message-ID: <568E09CA.5050704@cs.ucla.edu> Date: Wed, 6 Jan 2016 22:46:34 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040606000904040007010105" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , Seth Arnold , Jim Meyering 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: -0.0 (/) This is a multi-part message in MIME format. --------------040606000904040007010105 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Thanks to everyone who reported and fixed this bug. I looked over the fix and this inspired me to improve on it. I installed the attached patch, which doesn't fix any functionality bugs, but does improve performance significantly in some cases. --------------040606000904040007010105 Content-Type: text/x-diff; name="0001-Improve-on-fix-for-Bug-22181.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Improve-on-fix-for-Bug-22181.patch" >From 86ec0ec94e175d96a8910acfff8bb31735078ed5 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 6 Jan 2016 22:40:23 -0800 Subject: [PATCH] Improve on fix for Bug#22181 * src/pcresearch.c (Pexecute): Update subject when skipping past easily-determined encoding errors, as this is faster than letting pcre_exec skip them. On my platform this improves performance 4.7x on a benchmark created via "yes $(printf '\200\200\200\200 \200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200x\n') | head -n 1000000 >j; grep -oP y j" in a UTF-8 locale. Rework code that deals with PCRE_ERROR_BADUTF8 return, to avoid an incorrect (albeit currently harmless) 'bol = false' assignment. --- src/pcresearch.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/pcresearch.c b/src/pcresearch.c index 8f3d935..c0b8678 100644 --- a/src/pcresearch.c +++ b/src/pcresearch.c @@ -229,6 +229,7 @@ Pexecute (char *buf, size_t size, size_t *match_size, while (mbclen_cache[to_uchar (*p)] == (size_t) -1) { p++; + subject = p; bol = false; } @@ -269,29 +270,30 @@ Pexecute (char *buf, size_t size, size_t *match_size, } int valid_bytes = sub[0]; - /* Try to match the string before the encoding error. */ - if (valid_bytes < search_offset) - e = PCRE_ERROR_NOMATCH; - else if (valid_bytes == 0) + if (search_offset <= valid_bytes) { - /* Handle the empty-match case specially, for speed. - This optimization is valid if VALID_BYTES is zero, - which means SEARCH_OFFSET is also zero. */ - sub[1] = 0; - e = empty_match[bol]; - } - else - e = jit_exec (subject, valid_bytes, search_offset, - options | PCRE_NO_UTF8_CHECK | PCRE_NOTEOL, sub); + /* Try to match the string before the encoding error. */ + if (valid_bytes == 0) + { + /* Handle the empty-match case specially, for speed. + This optimization is valid if VALID_BYTES is zero, + which means SEARCH_OFFSET is also zero. */ + sub[1] = 0; + e = empty_match[bol]; + } + else + e = jit_exec (subject, valid_bytes, search_offset, + options | PCRE_NO_UTF8_CHECK | PCRE_NOTEOL, sub); - if (e != PCRE_ERROR_NOMATCH) - break; + if (e != PCRE_ERROR_NOMATCH) + break; + + /* Treat the encoding error as data that cannot match. */ + p = subject + valid_bytes + 1; + bol = false; + } - /* Treat the encoding error as data that cannot match. */ subject += valid_bytes + 1; - if (p < subject) - p = subject; - bol = false; } if (e != PCRE_ERROR_NOMATCH) -- 2.5.0 --------------040606000904040007010105-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 08 00:48:16 2016 Received: (at 22181) by debbugs.gnu.org; 8 Jan 2016 05:48:16 +0000 Received: from localhost ([127.0.0.1]:42159 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHPuK-0001UX-5b for submit@debbugs.gnu.org; Fri, 08 Jan 2016 00:48:16 -0500 Received: from mail-io0-f175.google.com ([209.85.223.175]:34728) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHPuI-0001UG-MK for 22181@debbugs.gnu.org; Fri, 08 Jan 2016 00:48:14 -0500 Received: by mail-io0-f175.google.com with SMTP id 1so229583644ion.1 for <22181@debbugs.gnu.org>; Thu, 07 Jan 2016 21:48:14 -0800 (PST) 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=C4dakzH2VGVE0unAXzlSA4jfk8zRKS5JBs9w32VOZFo=; b=Ui/KGER741Rh/Ol1h3t8QGAWY6ffXSkkH7e0ExJx4k+9V1x4XAGvYgYDg/TlSrvXOY th61gROhg8Brvmpio0WqJ/r3WQlNHlnvCCDe8B5hFPt412cU+u/aPts4JBoZYt2uyuUm Si7alo7GErSK2L8WK6FnDwzfLutgKfjefC6rTYF98jVqla/ULDqfROqffBNMlDPl2ejf C3OaQdxXy/bOB4hVcMLgsmERPmWx1tbbVTdCWYSIbRRgWACWnxef+OvWdUaIcehlcyzp WYRp18+rSVMVJSwQAiwA8zVbxZld+HsmT3PJkxWYnQE5O3zQf4mKABAq+JO84LcCeQEG /xCw== X-Received: by 10.107.129.16 with SMTP id c16mr48496776iod.181.1452232088951; Thu, 07 Jan 2016 21:48:08 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Thu, 7 Jan 2016 21:47:49 -0800 (PST) In-Reply-To: <568E09CA.5050704@cs.ucla.edu> References: <568E09CA.5050704@cs.ucla.edu> From: Jim Meyering Date: Thu, 7 Jan 2016 21:47:49 -0800 X-Google-Sender-Auth: vcjTo0d4ZEqCz1eT9pGfo5Gn35M Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.4 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.4 (/) On Wed, Jan 6, 2016 at 10:46 PM, Paul Eggert wrote: > Thanks to everyone who reported and fixed this bug. I looked over the fix > and this inspired me to improve on it. I installed the attached patch, which > doesn't fix any functionality bugs, but does improve performance > significantly in some cases. Thanks for all your work. I've just noticed a test failure on debian unstable systems. Doesn't seem to matter, but will mention I was compiling with this: gcc version 5.3.1 20160101 (Debian 5.3.1-5) FAIL: encoding-error ==================== ... --- exp 2016-01-07 21:39:42.018646618 -0800 +++ out 2016-01-07 21:39:42.018646618 -0800 @@ -1 +1 @@ -Binary file in matches +Pedro P\xe9rez + fail=1 Sorry I don't have time to investigate now. From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 08 11:50:33 2016 Received: (at 22181) by debbugs.gnu.org; 8 Jan 2016 16:50:33 +0000 Received: from localhost ([127.0.0.1]:43365 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHaFF-0004Am-6L for submit@debbugs.gnu.org; Fri, 08 Jan 2016 11:50:33 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:39815) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHaFD-0004AV-PS for 22181@debbugs.gnu.org; Fri, 08 Jan 2016 11:50:32 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id EEAD5160D77; Fri, 8 Jan 2016 08:50:24 -0800 (PST) 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 OPkdFlSn8WRq; Fri, 8 Jan 2016 08:50:24 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 4D51B160D78; Fri, 8 Jan 2016 08:50:24 -0800 (PST) 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 p3twM0PN7SVl; Fri, 8 Jan 2016 08:50:24 -0800 (PST) Received: from penguin.cs.ucla.edu (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 32760160D77; Fri, 8 Jan 2016 08:50:24 -0800 (PST) Subject: Re: bug#22181: endless loop in grep 2.22 To: Jim Meyering References: <568E09CA.5050704@cs.ucla.edu> From: Paul Eggert Organization: UCLA Computer Science Department Message-ID: <568FE8D0.9050104@cs.ucla.edu> Date: Fri, 8 Jan 2016 08:50:24 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.0 (/) On 01/07/2016 09:47 PM, Jim Meyering wrote: > FAIL: encoding-error > ==================== > ... > --- exp 2016-01-07 21:39:42.018646618 -0800 > +++ out 2016-01-07 21:39:42.018646618 -0800 > @@ -1 +1 @@ > -Binary file in matches > +Pedro P\xe9rez > + fail=1 I can't reproduce that in Fedora 23 x86-64, which is using gcc 5.3.1 20151207 (Red Hat 5.3.1-2). One hypothetical explanation is a bug or incompatibility in the bleeding-edge Debian shell, which I suppose could cause require_en_utf8_locale_ to do the wrong thing (i.e., to fail to report that the en_US.UTF-8 locale is missing). You might check the output of the command './get-mb-cur-max en_US.UTF-8' when you have the time. From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 08 16:33:00 2016 Received: (at 22181) by debbugs.gnu.org; 8 Jan 2016 21:33:00 +0000 Received: from localhost ([127.0.0.1]:43466 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHeea-000453-Bz for submit@debbugs.gnu.org; Fri, 08 Jan 2016 16:33:00 -0500 Received: from mail-ig0-f182.google.com ([209.85.213.182]:35644) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHeeY-00044o-T2 for 22181@debbugs.gnu.org; Fri, 08 Jan 2016 16:32:59 -0500 Received: by mail-ig0-f182.google.com with SMTP id t15so60793060igr.0 for <22181@debbugs.gnu.org>; Fri, 08 Jan 2016 13:32:58 -0800 (PST) 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=R89Givh4W6r2a2O+7Gf3lXrOsPZjFdyEamrJYY5Lu+I=; b=coqfDeS79g+CBOwBLXvahiFV0YOWUQ3mZnzNvUpxZb1l+lJYF3wznhs2PhyxrjQNOi WeqllcFZgyggPv3h2PMlabLs6R9KnxIduE+Qd9KNe+RI2koZ3cHDfhzFuVf3N8/3goFi v8V6F/UF1VpDlS6B45cGazk505IhE74YRQv0RdmEte4qLq9rF6o/3WwAtVpfacUoHlgy 7hralLxNy/aBXYO+rms2/YdwEjb/bcdDGgwYS4UN43R80/J/vkvmH0A3p6DCoCUuJDr1 y+uMYbp2eAVPsKgeZZDRbraTsvvVB6bCdz4JSeTCPRsaPja2kBBWq0nxE+ycSd7WXgOs K1rQ== X-Received: by 10.50.44.37 with SMTP id b5mr1046105igm.50.1452288773278; Fri, 08 Jan 2016 13:32:53 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Fri, 8 Jan 2016 13:32:33 -0800 (PST) In-Reply-To: <568FE8D0.9050104@cs.ucla.edu> References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> From: Jim Meyering Date: Fri, 8 Jan 2016 13:32:33 -0800 X-Google-Sender-Auth: N3aQO41wPiCG5o3oq4ut9o8q9WQ Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: multipart/mixed; boundary=047d7bdc794c718c150528d9548b X-Spam-Score: -0.5 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.5 (/) --047d7bdc794c718c150528d9548b Content-Type: text/plain; charset=UTF-8 On Fri, Jan 8, 2016 at 8:50 AM, Paul Eggert wrote: > On 01/07/2016 09:47 PM, Jim Meyering wrote: >> >> FAIL: encoding-error >> ==================== >> ... >> --- exp 2016-01-07 21:39:42.018646618 -0800 >> +++ out 2016-01-07 21:39:42.018646618 -0800 >> @@ -1 +1 @@ >> -Binary file in matches >> +Pedro P\xe9rez >> + fail=1 > > > I can't reproduce that in Fedora 23 x86-64, which is using gcc 5.3.1 > 20151207 (Red Hat 5.3.1-2). > > One hypothetical explanation is a bug or incompatibility in the > bleeding-edge Debian shell, which I suppose could cause > require_en_utf8_locale_ to do the wrong thing (i.e., to fail to report that > the en_US.UTF-8 locale is missing). You might check the output of the > command './get-mb-cur-max en_US.UTF-8' when you have the time. Will investigate. In the mean time, here's a patch for the false-positive failure I mentioned: --047d7bdc794c718c150528d9548b Content-Type: text/x-patch; charset=US-ASCII; name="0001-mb-non-UTF8-performance-avoid-FP-test-failure-on-fas.patch" Content-Disposition: attachment; filename="0001-mb-non-UTF8-performance-avoid-FP-test-failure-on-fas.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ij6781b80 RnJvbSA2YzdmODE2NmM3OTI4Y2Y0OGE4Mjg4YzAzMzM5NDFmM2JmMzQ2NmMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGZiLmNvbT4KRGF0ZTog VGh1LCA3IEphbiAyMDE2IDIxOjMwOjA4IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gbWItbm9uLVVU RjgtcGVyZm9ybWFuY2U6IGF2b2lkIEZQIHRlc3QgZmFpbHVyZSBvbiBmYXN0CiBoYXJkd2FyZQoK KiB0ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5jZTogRG9uJ3QgdXNlIGEgZml4ZWQgc2l6ZS4K T3RoZXJ3aXNlLCBvbiBhIGZhc3Qgc3lzdGVtLCB0aGUgZml4ZWQtc2l6ZSB1bmlieXRlIHRlc3QK d291bGQgY29tcGxldGUgaW4gYSBub21pbmFsIDAgbXMsIHdoaWNoIG1pZ2h0IHdlbGwgYmUKc21h bGxlciB0aGFuIDEvMzAgb2YgdGhlIG11bHRpYnl0ZSBkdXJhdGlvbiwgcHJvdm9raW5nCmEgZmFs c2UgcG9zaXRpdmUgdGVzdCBmYWlsdXJlLiAgSW5zdGVhZCwgaW5jcmVhc2UgdGhlCnNpemUgb2Yg dGhlIGlucHV0IHVudGlsIHdlIG9idGFpbiBhIHVuaWJ5dGUgZHVyYXRpb24gb2YKYXQgbGVhc3Qg MTBtcy4KLS0tCiB0ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5jZSB8IDEzICsrKysrKysrKy0t LS0KIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvdGVzdHMvbWItbm9uLVVURjgtcGVyZm9ybWFuY2UgYi90ZXN0cy9tYi1ub24tVVRG OC1wZXJmb3JtYW5jZQppbmRleCBlODQzM2Q4Li5mYzM3MWJkIDEwMDc1NQotLS0gYS90ZXN0cy9t Yi1ub24tVVRGOC1wZXJmb3JtYW5jZQorKysgYi90ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5j ZQpAQCAtMjcsMTEgKzI3LDE2IEBAIGZhaWw9MAogIyAiZXhwZW5zaXZlIiwgbWFraW5nIGl0IGxl c3MgbGlrZWx5IHRvIGJlIHJ1biBieSByZWd1bGFyIHVzZXJzLgogZXhwZW5zaXZlXwoKLSMgTWFr ZSB0aGlzIGxhcmdlIGVub3VnaCBzbyB0aGF0IGV2ZW4gb24gaGlnaC1lbmQgc3lzdGVtcwotIyBp dCBpbmN1cnMgYXQgbGVhc3QgNS0xMG1zIG9mIHVzZXIgdGltZS4KLXllcyAkKHByaW50ZiAnJTA3 OGQnIDApIHwgaGVhZCAtNDAwMDAwID4gaW4gfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCisjIE1ha2Ug dGhlIGlucHV0IGxhcmdlIGVub3VnaCBzbyB0aGF0IGV2ZW4gb24gaGlnaC1lbmQgc3lzdGVtcwor IyB0aGUgdW5pYnl0ZSB0ZXN0IHRha2VzIGF0IGxlYXN0IDEwbXMgb2YgdXNlciB0aW1lLgorbl9s aW5lcz0xMDAwMDAKK3doaWxlIDo7IGRvCisgIHllcyAkKHByaW50ZiAnJTA3OGQnIDApIHwgaGVh ZCAtJG5fbGluZXMgPiBpbiB8fCBmcmFtZXdvcmtfZmFpbHVyZV8KKyAgdWJ5dGVfbXM9JChMQ19B TEw9QyB1c2VyX3RpbWVfIDEgZ3JlcCAtaSBmb29iYXIgaW4pIHx8IGZhaWw9MQorICB0ZXN0ICR1 Ynl0ZV9tcyAtZ2UgMTAgJiYgYnJlYWsKKyAgbl9saW5lcz0kKGV4cHIgJG5fbGluZXMgKyAyMDAw MDApCitkb25lCgotdWJ5dGVfbXM9JChMQ19BTEw9QyB1c2VyX3RpbWVfIDEgZ3JlcCAtaSBmb29i YXIgaW4pIHx8IGZhaWw9MQogcmVxdWlyZV9KUF9FVUNfbG9jYWxlXwogbWJ5dGVfbXM9JCh1c2Vy X3RpbWVfIDEgZ3JlcCAtaSBmb29iYXIgaW4pIHx8IGZhaWw9MQoKLS0gCjIuNi40Cgo= --047d7bdc794c718c150528d9548b-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 08 20:02:13 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 01:02:13 +0000 Received: from localhost ([127.0.0.1]:43519 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHhv3-0003pY-Al for submit@debbugs.gnu.org; Fri, 08 Jan 2016 20:02:13 -0500 Received: from mail-ig0-f173.google.com ([209.85.213.173]:37826) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHhv1-0003pM-QI for 22181@debbugs.gnu.org; Fri, 08 Jan 2016 20:02:12 -0500 Received: by mail-ig0-f173.google.com with SMTP id h5so44734843igh.0 for <22181@debbugs.gnu.org>; Fri, 08 Jan 2016 17:02:11 -0800 (PST) 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=rAYedfplUlW9YJq4iTzM5Hn9Rb30d1EkqbSkdCGIZP0=; b=nzXvv681gCH6tkwi78Bs9x7XREugoBwCjiclVXvhZXux1tHMTy6nyY6yQt31Q39QlH tHzhOo40t1ON3IChk9eXkyznz7bgzE2ex3Du3xdTUWwt8tVxy2cq2xVls+2uRMlVLh1/ NAYdFrtNflnI6r32MY4Vvycx0rNgGb0xVag3XnWdxgVpZiL6KCyC54myIChLQFmwywW9 XNi1qBjnNiLZqBPZ2OKvT80NqZhO1laaxLop6XH5SnHb9uJj0SgNCkLK9g0k4wD2ixEL 0Wr1xRrtdE5irKmOrL0isR9+oFx10BPMC85ki+OAFO4gFI8Cub3iNPkoQysZOUBEOWPB 2iXg== X-Received: by 10.51.17.39 with SMTP id gb7mr1679474igd.42.1452301325492; Fri, 08 Jan 2016 17:02:05 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Fri, 8 Jan 2016 17:01:45 -0800 (PST) In-Reply-To: References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> From: Jim Meyering Date: Fri, 8 Jan 2016 17:01:45 -0800 X-Google-Sender-Auth: zfTke4xGw4GT1gbzHKTTOJtWrlQ Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: multipart/mixed; boundary=001a1134b41ea46fd30528dc4014 X-Spam-Score: -0.5 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.5 (/) --001a1134b41ea46fd30528dc4014 Content-Type: text/plain; charset=UTF-8 On Fri, Jan 8, 2016 at 1:32 PM, Jim Meyering wrote: > On Fri, Jan 8, 2016 at 8:50 AM, Paul Eggert wrote: >> On 01/07/2016 09:47 PM, Jim Meyering wrote: >>> >>> FAIL: encoding-error >>> ==================== >>> ... >>> --- exp 2016-01-07 21:39:42.018646618 -0800 >>> +++ out 2016-01-07 21:39:42.018646618 -0800 >>> @@ -1 +1 @@ >>> -Binary file in matches >>> +Pedro P\xe9rez >>> + fail=1 >> >> >> I can't reproduce that in Fedora 23 x86-64, which is using gcc 5.3.1 >> 20151207 (Red Hat 5.3.1-2). >> >> One hypothetical explanation is a bug or incompatibility in the >> bleeding-edge Debian shell, which I suppose could cause >> require_en_utf8_locale_ to do the wrong thing (i.e., to fail to report that >> the en_US.UTF-8 locale is missing). You might check the output of the >> command './get-mb-cur-max en_US.UTF-8' when you have the time. > > Will investigate. In the mean time, here's a patch for the > false-positive failure I mentioned: It was trivial: printf does not necessarily support \xHH hexadecimal escapes. I switched the input generation to use printf with an octal escaped byte instead, and now it works. I've just pushed the attached along with the preceding patch. --001a1134b41ea46fd30528dc4014 Content-Type: text/x-patch; charset=US-ASCII; name="0001-tests-fix-encoding-error-test-failure-to-use-of-prin.patch" Content-Disposition: attachment; filename="0001-tests-fix-encoding-error-test-failure-to-use-of-prin.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ij6eow0w1 RnJvbSA4ZWI3MjYwM2FlYzIwMDdmOTkwZjlmZjE5NjMxMGIyZWVhNjYyYzZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGZiLmNvbT4KRGF0ZTog RnJpLCA4IEphbiAyMDE2IDE2OjU2OjUwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gdGVzdHM6IGZp eCBlbmNvZGluZy1lcnJvciB0ZXN0IGZhaWx1cmUgdG8gdXNlIG9mIHByaW50ZgogJ1x4SEgnCgoq IHRlc3RzL2VuY29kaW5nLWVycm9yOiBEb24ndCByZWx5IG9uIHByaW50ZiBoYXZpbmcgc3VwcG9y dCBmb3IgXHhISApoZXhhZGVjaW1hbC4gIFRoYXQgaXMgbm90IHBvcnRhYmxlLiAgVXNlIFxPT08g b2N0YWwsIGluc3RlYWQuCgptYWludDogZml4IHR5cG8gaW4gTkVXUzogcy9hL2FuLwotLS0KIHRl c3RzL2VuY29kaW5nLWVycm9yIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCsp LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvZW5jb2RpbmctZXJyb3IgYi90ZXN0 cy9lbmNvZGluZy1lcnJvcgppbmRleCAyZjA5YzIxLi40YjVmY2I1IDEwMDc1NQotLS0gYS90ZXN0 cy9lbmNvZGluZy1lcnJvcgorKysgYi90ZXN0cy9lbmNvZGluZy1lcnJvcgpAQCAtMTYsNyArMTYs NyBAQCBleHBvcnQgTENfQUxMCgogcHJpbnRmICdBbGZyZWQgSm9uZXNcbicgPiBhIHx8IGZyYW1l d29ya19mYWlsdXJlXwogcHJpbnRmICdKb2huIFNtaXRoXG4nID5qIHx8IGZyYW1ld29ya19mYWls dXJlXwotcHJpbnRmICdQZWRybyBQXHhlOXJlelxuJyA+cCB8fCBmcmFtZXdvcmtfZmFpbHVyZV8K K3ByaW50ZiAnUGVkcm8gUFwzNTFyZXpcbicgPnAgfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCiBjYXQg YSBwIGogPmluIHx8IGZyYW1ld29ya19mYWlsdXJlXwoKIGZhaWw9MAotLSAKMi42LjQKCg== --001a1134b41ea46fd30528dc4014-- From debbugs-submit-bounces@debbugs.gnu.org Fri Jan 08 21:53:57 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 02:53:57 +0000 Received: from localhost ([127.0.0.1]:43534 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHjfB-0006MM-5q for submit@debbugs.gnu.org; Fri, 08 Jan 2016 21:53:57 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:43238) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHjf8-0006M9-An for 22181@debbugs.gnu.org; Fri, 08 Jan 2016 21:53:55 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id BE7861605B8; Fri, 8 Jan 2016 18:53:47 -0800 (PST) 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 523uKpJQzX64; Fri, 8 Jan 2016 18:53:46 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 7EFB0160D3D; Fri, 8 Jan 2016 18:53:46 -0800 (PST) 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 GMRE5mb-4WBy; Fri, 8 Jan 2016 18:53:46 -0800 (PST) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 57B171605B8; Fri, 8 Jan 2016 18:53:46 -0800 (PST) Subject: Re: bug#22181: endless loop in grep 2.22 To: Jim Meyering References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> From: Paul Eggert Organization: UCLA Computer Science Department Message-ID: <5690763A.8000902@cs.ucla.edu> Date: Fri, 8 Jan 2016 18:53:46 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------080703030403050000020408" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.0 (/) This is a multi-part message in MIME format. --------------080703030403050000020408 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Jim Meyering wrote: > It was trivial: printf does not necessarily support \xHH hexadecimal > escapes. Thanks for catching that. I looked and found one other problem of that kind. I tried running the tests on Solaris and AIX and found a few more porting issues in the grep tests, and installed the attached. --------------080703030403050000020408 Content-Type: text/x-diff; name="0001-tests-port-to-other-POSIXish-platforms.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-tests-port-to-other-POSIXish-platforms.patch" >From 2a661493355a53c11ddef2187fc9c6370916747d Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 8 Jan 2016 18:48:14 -0800 Subject: [PATCH] tests: port to other POSIXish platforms I tested this on Solaris 10 and AIX 7.1. * tests/max-count-overread: * tests/mb-non-UTF8-performance: Don't assume 'yes' exists, as 'yes' is not in POSIX. * tests/mb-non-UTF8-performance: Don't rely on 'head -1000', as that option syntax is not POSIX. * tests/pcre-count: Don't rely on "printf '\x0'". * tests/unibyte-binary: Don't assume \200 is an encoding error in every unibyte locale. --- tests/max-count-overread | 2 +- tests/mb-non-UTF8-performance | 4 +++- tests/pcre-count | 2 +- tests/unibyte-binary | 6 +++++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/max-count-overread b/tests/max-count-overread index d7aafd6..ec98ac8 100755 --- a/tests/max-count-overread +++ b/tests/max-count-overread @@ -9,7 +9,7 @@ fail=0 echo x > exp || framework_failure_ -yes x | timeout 3 grep -m1 x > out || fail=1 +${AWK-awk} 'BEGIN{for (;;) print "x"}' | timeout 3 grep -m1 x > out || fail=1 compare exp out || fail=1 Exit $fail diff --git a/tests/mb-non-UTF8-performance b/tests/mb-non-UTF8-performance index fc371bd..c350dfb 100755 --- a/tests/mb-non-UTF8-performance +++ b/tests/mb-non-UTF8-performance @@ -31,7 +31,9 @@ expensive_ # the unibyte test takes at least 10ms of user time. n_lines=100000 while :; do - yes $(printf '%078d' 0) | head -$n_lines > in || framework_failure_ + ${AWK-awk} -v n_lines=$n_lines \ + 'BEGIN {while (n_lines--) printf "%078d\n", 0}' in || + framework_failure_ ubyte_ms=$(LC_ALL=C user_time_ 1 grep -i foobar in) || fail=1 test $ubyte_ms -ge 10 && break n_lines=$(expr $n_lines + 200000) diff --git a/tests/pcre-count b/tests/pcre-count index 24afa17..4bcb2b3 100755 --- a/tests/pcre-count +++ b/tests/pcre-count @@ -13,7 +13,7 @@ require_pcre_ fail=0 -printf 'a\n%032768d\nb\x0\n%032768d\na\n' 0 0 > in +printf 'a\n%032768d\nb\0\n%032768d\na\n' 0 0 > in LC_ALL=C grep -P 'a' in | wc -l > exp diff --git a/tests/unibyte-binary b/tests/unibyte-binary index 78735b8..11325ee 100755 --- a/tests/unibyte-binary +++ b/tests/unibyte-binary @@ -24,5 +24,9 @@ fail=0 printf 'a\n\200\nb\n' >in || framework_failure_ printf 'a\nBinary file in matches\n' >exp || framework_failure_ grep . in >out || fail=1 -compare exp out || fail=1 + +# In some unibyte locales, \200 is an encoding error; +# in others, it is a valid character. Allow either possibility. +compare exp out || compare in out || fail=1 + Exit $fail -- 2.5.0 --------------080703030403050000020408-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 09 04:22:01 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 09:22:01 +0000 Received: from localhost ([127.0.0.1]:43616 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHpii-00074D-V1 for submit@debbugs.gnu.org; Sat, 09 Jan 2016 04:22:01 -0500 Received: from mail-io0-f173.google.com ([209.85.223.173]:32991) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHpih-000741-I8 for 22181@debbugs.gnu.org; Sat, 09 Jan 2016 04:22:00 -0500 Received: by mail-io0-f173.google.com with SMTP id q21so308485100iod.0 for <22181@debbugs.gnu.org>; Sat, 09 Jan 2016 01:21:59 -0800 (PST) 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=CA7zNF5faQwJkejchFyKopJKcvLM2gKgIp0nJFzWZvQ=; b=gIon2GBXACtGYGCpperwszCb/WEPk2YV7/DXFcWMYcZAxK5h0Bunm2OfSHjMqKvnKW cLuybpFxOC2h4yZfDRtRVB73Pn1ryPFqbI+c4xY8nvN+HcA2EW7dteqMVoyFEp42pXXf s/jGbDjH+7AECwnw+sriMvkJCaYRJ2teRX5eZfQFN5CuMZUXkkx+F+Kj0SowEWUCJJ4Y LYQ84hGe5OjNiTshXriOHQPqhSXXt97W22uJIEiHlBHiV6+rsTqN0oyMUa+oK0tvr9Rx oFVgwjeG07+bB268dqXx57+SN1S4BYtMqyVEnB/mJBpF6OlaaKT5ymwq+UJY8x9F59lu xjDg== X-Received: by 10.107.129.16 with SMTP id c16mr54030061iod.181.1452331313855; Sat, 09 Jan 2016 01:21:53 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Sat, 9 Jan 2016 01:21:33 -0800 (PST) In-Reply-To: <5690763A.8000902@cs.ucla.edu> References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> <5690763A.8000902@cs.ucla.edu> From: Jim Meyering Date: Sat, 9 Jan 2016 01:21:33 -0800 X-Google-Sender-Auth: 4DuYIae0c85WdWqNMl2ELQjKung Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: multipart/mixed; boundary=001a113ecd9a0f1e980528e33c07 X-Spam-Score: -0.4 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.4 (/) --001a113ecd9a0f1e980528e33c07 Content-Type: text/plain; charset=UTF-8 On Fri, Jan 8, 2016 at 6:53 PM, Paul Eggert wrote: > Jim Meyering wrote: >> >> It was trivial: printf does not necessarily support \xHH hexadecimal >> escapes. > > Thanks for catching that. I looked and found one other problem of that kind. > I tried running the tests on Solaris and AIX and found a few more porting > issues in the grep tests, and installed the attached. Hah! TIL head -N and yes are not portable. Thank you. I've been spoiled/corrupted by writing coreutils tests for so long. I would prefer to continue to use "yes" via the following, at least in the first test. That way is clearer. In the second, I could go either way, since your awk process replaces both yes and head, at the expense of being a bit less concise and less readable. What do you think of this patch? --001a113ecd9a0f1e980528e33c07 Content-Type: text/x-patch; charset=US-ASCII; name="0001-tests-do-use-yes-but-via-an-AWK-replacement.patch" Content-Disposition: attachment; filename="0001-tests-do-use-yes-but-via-an-AWK-replacement.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ij6jywce1 RnJvbSBhODZlNzljNDUxMGRlZTMzOThkODYzYTM4OTJkNzUxNThkYjVlYWIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGZiLmNvbT4KRGF0ZTog RnJpLCA4IEphbiAyMDE2IDE5OjIzOjI1IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gdGVzdHM6IGRv IHVzZSAieWVzIiBidXQgdmlhIGFuIEFXSyByZXBsYWNlbWVudAoKQWxzbywgdXNlIHNlZCBOcSBp biBwbGFjZSBvZiBoZWFkIC1OCiogdGVzdHMvaW5pdC5jZmcgKHllcyk6IERlZmluZS4KKiB0ZXN0 cy9tYXgtY291bnQtb3ZlcnJlYWQ6IFJldmVydCB0byB1c2luZyAieWVzIi4KKiB0ZXN0cy9tYi1u b24tVVRGOC1wZXJmb3JtYW5jZTogTGlrZXdpc2UsIGFuZCB1c2UKInNlZCBOcSIgaW4gcGxhY2Ug b2YgaGVhZCAtTi4KLS0tCiB0ZXN0cy9pbml0LmNmZyAgICAgICAgICAgICAgICB8IDMgKysrCiB0 ZXN0cy9tYXgtY291bnQtb3ZlcnJlYWQgICAgICB8IDIgKy0KIHRlc3RzL21iLW5vbi1VVEY4LXBl cmZvcm1hbmNlIHwgNCArLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90ZXN0cy9pbml0LmNmZyBiL3Rlc3RzL2luaXQuY2Zn CmluZGV4IGJlMDMzNTcuLjFjN2JhYWEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2luaXQuY2ZnCisrKyBi L3Rlc3RzL2luaXQuY2ZnCkBAIC0yMDAsMyArMjAwLDYgQEAgdXNlcl90aW1lXygpCiAgICAgJGNo aWxkX3VzZXIgKj0gMTAwMDsKICAgICBwcmludCBpbnQgKCRjaGlsZF91c2VyICsgMC41KScgIiRA IgogfQorCisjIHllcyBpcyBub3QgcG9ydGFibGUsIGZha2UgaXQgd2l0aCAkQVdLCit5ZXMoKSB7 ICR7QVdLLWF3a30gJ0JFR0lOe2ZvciAoOzspIHByaW50ICInIiQqIicifSc7IH0KZGlmZiAtLWdp dCBhL3Rlc3RzL21heC1jb3VudC1vdmVycmVhZCBiL3Rlc3RzL21heC1jb3VudC1vdmVycmVhZApp bmRleCBlYzk4YWM4Li5kN2FhZmQ2IDEwMDc1NQotLS0gYS90ZXN0cy9tYXgtY291bnQtb3ZlcnJl YWQKKysrIGIvdGVzdHMvbWF4LWNvdW50LW92ZXJyZWFkCkBAIC05LDcgKzksNyBAQCBmYWlsPTAK CiBlY2hvIHggPiBleHAgfHwgZnJhbWV3b3JrX2ZhaWx1cmVfCgotJHtBV0stYXdrfSAnQkVHSU57 Zm9yICg7OykgcHJpbnQgIngifScgfCB0aW1lb3V0IDMgZ3JlcCAtbTEgeCA+IG91dCB8fCBmYWls PTEKK3llcyB4IHwgdGltZW91dCAzIGdyZXAgLW0xIHggPiBvdXQgfHwgZmFpbD0xCiBjb21wYXJl IGV4cCBvdXQgfHwgZmFpbD0xCgogRXhpdCAkZmFpbApkaWZmIC0tZ2l0IGEvdGVzdHMvbWItbm9u LVVURjgtcGVyZm9ybWFuY2UgYi90ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5jZQppbmRleCBj MzUwZGZiLi4zZjkyMDljIDEwMDc1NQotLS0gYS90ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5j ZQorKysgYi90ZXN0cy9tYi1ub24tVVRGOC1wZXJmb3JtYW5jZQpAQCAtMzEsOSArMzEsNyBAQCBl eHBlbnNpdmVfCiAjIHRoZSB1bmlieXRlIHRlc3QgdGFrZXMgYXQgbGVhc3QgMTBtcyBvZiB1c2Vy IHRpbWUuCiBuX2xpbmVzPTEwMDAwMAogd2hpbGUgOjsgZG8KLSAgJHtBV0stYXdrfSAtdiBuX2xp bmVzPSRuX2xpbmVzIFwKLSAgICAgICdCRUdJTiB7d2hpbGUgKG5fbGluZXMtLSkgcHJpbnRmICIl MDc4ZFxuIiwgMH0nIDwvZGV2L251bGwgPmluIHx8Ci0gICAgZnJhbWV3b3JrX2ZhaWx1cmVfCisg IHllcyAkKHByaW50ZiAnJTA3OGQnIDApIHwgc2VkICR7bl9saW5lc31xID4gaW4gfHwgZnJhbWV3 b3JrX2ZhaWx1cmVfCiAgIHVieXRlX21zPSQoTENfQUxMPUMgdXNlcl90aW1lXyAxIGdyZXAgLWkg Zm9vYmFyIGluKSB8fCBmYWlsPTEKICAgdGVzdCAkdWJ5dGVfbXMgLWdlIDEwICYmIGJyZWFrCiAg IG5fbGluZXM9JChleHByICRuX2xpbmVzICsgMjAwMDAwKQotLSAKMi42LjQKCg== --001a113ecd9a0f1e980528e33c07-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 09 13:20:35 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 18:20:35 +0000 Received: from localhost ([127.0.0.1]:44615 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHy7u-0006DP-VX for submit@debbugs.gnu.org; Sat, 09 Jan 2016 13:20:35 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:33999) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHy7t-0006DC-4p for 22181@debbugs.gnu.org; Sat, 09 Jan 2016 13:20:33 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 0D5451605B8; Sat, 9 Jan 2016 10:20:27 -0800 (PST) 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 3PS0k-yBACPM; Sat, 9 Jan 2016 10:20:26 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 587B5160DFB; Sat, 9 Jan 2016 10:20:26 -0800 (PST) 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 t-WN6bo-_qWv; Sat, 9 Jan 2016 10:20:26 -0800 (PST) Received: from [192.168.1.9] (pool-100-32-155-148.lsanca.fios.verizon.net [100.32.155.148]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 334891605B8; Sat, 9 Jan 2016 10:20:26 -0800 (PST) Subject: Re: bug#22181: endless loop in grep 2.22 To: Jim Meyering References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> <5690763A.8000902@cs.ucla.edu> From: Paul Eggert Organization: UCLA Computer Science Department Message-ID: <56914F66.40603@cs.ucla.edu> Date: Sat, 9 Jan 2016 10:20:22 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.0 (/) Jim Meyering wrote: > Hah! TIL head -N and yes are not portable. Thank you. > I've been spoiled/corrupted by writing coreutils tests for so long. > > I would prefer to continue to use "yes" via the following, at least > in the first test. That way is clearer. In the second, I could go either > way, since your awk process replaces both yes and head, at the > expense of being a bit less concise and less readable. I could go either way too. Though it's not needed for these particular tests, the shell function can be tweaked to default to 'y' and to output quotes and backlashes in the arg as-is, like BSD 'yes'. Something like this, perhaps? yes() { line=${*-y} ${AWK-awk} 'BEGIN{for (;;) print ENVIRON["line"]}'; } From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 09 14:27:56 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 19:27:56 +0000 Received: from localhost ([127.0.0.1]:44638 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHzB6-0007n7-4h for submit@debbugs.gnu.org; Sat, 09 Jan 2016 14:27:56 -0500 Received: from mail-ig0-f174.google.com ([209.85.213.174]:33590) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHzB4-0007mr-1x for 22181@debbugs.gnu.org; Sat, 09 Jan 2016 14:27:54 -0500 Received: by mail-ig0-f174.google.com with SMTP id z14so95982917igp.0 for <22181@debbugs.gnu.org>; Sat, 09 Jan 2016 11:27:54 -0800 (PST) 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=7cdbYSbyZWKJF4ljPZ1ewr+fK9/Gig9GJRVhlPgXDUw=; b=IH2lA0D/AP7PZfRA6CJ27WUVHXBstcG76E86Y0+uxwHETU1DyTQ6/Q6GSNQmjtPMjg rCpk30HDW/YW3NfMlQ0Y6NTbTTjRyvpFntIXYfz+RFpyae9wUReLsAb1RKbXDYAc0PZd wJ0Zkmz97WOvBRowH/r5rAI4jyDgQBftqQ3BBOB+wbc1RMgk0GgpW1EaLsobiI73Eivx 1I2YU/bi+GuUXiyBESNhxQHQD5WOfgnfCAsG77E5egTuaBYjCf/4bRmvkrSQ6WwcR9DZ 0fNnXDVPHzjGDxr6nJQO0RI1oai0H70LfNjfTtXCzq5mBcc39xr92/gD8+gl6D2eqWtS jQxg== X-Received: by 10.50.117.33 with SMTP id kb1mr5082978igb.89.1452367668622; Sat, 09 Jan 2016 11:27:48 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Sat, 9 Jan 2016 11:27:28 -0800 (PST) In-Reply-To: <56914F66.40603@cs.ucla.edu> References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> <5690763A.8000902@cs.ucla.edu> <56914F66.40603@cs.ucla.edu> From: Jim Meyering Date: Sat, 9 Jan 2016 11:27:28 -0800 X-Google-Sender-Auth: Iy-gBIkXgXRd-hUHcARdofnLk4g Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.5 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.5 (/) On Sat, Jan 9, 2016 at 10:20 AM, Paul Eggert wrote: > Jim Meyering wrote: >> >> Hah! TIL head -N and yes are not portable. Thank you. >> I've been spoiled/corrupted by writing coreutils tests for so long. >> >> I would prefer to continue to use "yes" via the following, at least >> in the first test. That way is clearer. In the second, I could go either >> way, since your awk process replaces both yes and head, at the >> expense of being a bit less concise and less readable. > > > I could go either way too. > > Though it's not needed for these particular tests, the shell function can be > tweaked to default to 'y' and to output quotes and backlashes in the arg > as-is, like BSD 'yes'. Something like this, perhaps? > > yes() { line=${*-y} ${AWK-awk} 'BEGIN{for (;;) print ENVIRON["line"]}'; } Indeed, I thought of quotes and backslashes a little too late. Nice hack. I will use that, probably with an added "local ", since init.sh ensures that the test-run shell supports that. Hmm... I see that gnulib's init.sh has a stray (new) use of local. Will remove. From debbugs-submit-bounces@debbugs.gnu.org Sat Jan 09 14:34:23 2016 Received: (at 22181) by debbugs.gnu.org; 9 Jan 2016 19:34:23 +0000 Received: from localhost ([127.0.0.1]:44642 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHzHK-0007xR-RN for submit@debbugs.gnu.org; Sat, 09 Jan 2016 14:34:23 -0500 Received: from mail-io0-f173.google.com ([209.85.223.173]:34732) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aHzHJ-0007xF-Am for 22181@debbugs.gnu.org; Sat, 09 Jan 2016 14:34:21 -0500 Received: by mail-io0-f173.google.com with SMTP id 1so269135695ion.1 for <22181@debbugs.gnu.org>; Sat, 09 Jan 2016 11:34:21 -0800 (PST) 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=kGE2qvZFYhzxG/4+AbfDIWnJvtd9Ka+/RIiIG6fUiJY=; b=xtZwi5ttE3/gV3KVgdd/SQuS+N4Ld63aMhxRC/LAlwgOhx2Weicy2HIQ5C8qjHgpda fmf3KbEk0BDh+a5k0r3SuV6eYDZa5u3L63Mz8te1aiHDJlCvvCAZZH2ukMTbBbj7Areo PCWS/ehz2+eFzd8xxFt9ClfNOznnFcVRkXR+NXDiTAPTuOCRNAD3AmtnJ4SXQwGO34J/ 8JqtAbvqzztKH2T+SvUkMLQWsC4t55JCXRi+1ALOp4kIxCRK/Y0q0zk17aEa96n7Sz/7 xz+o7l31eoBhTQ1atEt+wm2WApXTPXTZKHErLYUmGS+n72gK/dCWOQMbCsiPcHF49rb7 9eoA== X-Received: by 10.107.138.15 with SMTP id m15mr110183901iod.40.1452368055826; Sat, 09 Jan 2016 11:34:15 -0800 (PST) MIME-Version: 1.0 Received: by 10.36.10.18 with HTTP; Sat, 9 Jan 2016 11:33:56 -0800 (PST) In-Reply-To: References: <568E09CA.5050704@cs.ucla.edu> <568FE8D0.9050104@cs.ucla.edu> <5690763A.8000902@cs.ucla.edu> <56914F66.40603@cs.ucla.edu> From: Jim Meyering Date: Sat, 9 Jan 2016 11:33:56 -0800 X-Google-Sender-Auth: b1qP_VdEKU9UKPPT4fVXT7un1QI Message-ID: Subject: Re: bug#22181: endless loop in grep 2.22 To: Paul Eggert Content-Type: text/plain; charset=UTF-8 X-Spam-Score: -0.4 (/) X-Debbugs-Envelope-To: 22181 Cc: Christian Boltz , 22181@debbugs.gnu.org, Seth Arnold 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: -0.4 (/) On Sat, Jan 9, 2016 at 11:27 AM, Jim Meyering wrote: > On Sat, Jan 9, 2016 at 10:20 AM, Paul Eggert wrote: >> Jim Meyering wrote: >>> >>> Hah! TIL head -N and yes are not portable. Thank you. >>> I've been spoiled/corrupted by writing coreutils tests for so long. >>> >>> I would prefer to continue to use "yes" via the following, at least >>> in the first test. That way is clearer. In the second, I could go either >>> way, since your awk process replaces both yes and head, at the >>> expense of being a bit less concise and less readable. >> >> >> I could go either way too. >> >> Though it's not needed for these particular tests, the shell function can be >> tweaked to default to 'y' and to output quotes and backlashes in the arg >> as-is, like BSD 'yes'. Something like this, perhaps? >> >> yes() { line=${*-y} ${AWK-awk} 'BEGIN{for (;;) print ENVIRON["line"]}'; } > > Indeed, I thought of quotes and backslashes a little too late. > Nice hack. I will use that, probably with an added "local ", > since init.sh ensures that the test-run shell supports that. > Hmm... I see that gnulib's init.sh has a stray (new) use > of local. Will remove. I will *not* be adding a "local " prefix. Not required. That "line" is an envvar, so just fine as-is. From unknown Tue Jun 17 20:17:32 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sun, 07 Feb 2016 12:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator