From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Sun, 18 May 2025 07:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: 78476@debbugs.gnu.org Cc: Torbjorn Granlund X-Debbugs-Original-To: Coreutils bugs Received: via spool by submit@debbugs.gnu.org id=B.174755399431021 (code B ref -1); Sun, 18 May 2025 07:40:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 May 2025 07:39:54 +0000 Received: from localhost ([127.0.0.1]:54791 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uGYcj-00084G-Pf for submit@debbugs.gnu.org; Sun, 18 May 2025 03:39:54 -0400 Received: from lists.gnu.org ([2001:470:142::17]:43498) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uGYch-00083m-5d for submit@debbugs.gnu.org; Sun, 18 May 2025 03:39:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uGYcb-0005Mm-SD for bug-coreutils@gnu.org; Sun, 18 May 2025 03:39:45 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uGYcZ-0004Ca-Qe for bug-coreutils@gnu.org; Sun, 18 May 2025 03:39:45 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 7BDA13C01086E; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id gBNCiLuBjKCE; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 4FF573C01087D; Sun, 18 May 2025 00:39:41 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 4FF573C01087D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1747553981; bh=IG6xlnJrUsUZhn4C9jVkQZWhQmbKQRuX4tJqNuFYzGw=; h=Message-ID:Date:MIME-Version:To:From; b=QxNX9Bf/RHPZ4+tjaMIK2oUa+PlSVoWeYsn2pnvvHIndELT5lhy5+tcckiyMpQCC7 RQ2XkEFoPrj0qbWKdpLXbA2GBx4XBIE55g5EeU32ZxMIBQaNcP73OGhcHlmZyLHzzv TfaJslV3XrBKTi/3bNpIuH8HAs8qL7bim6uZNQoPJBRe0hmZyesg0PwY5XobYY0Vpl ITXBh6dCUrefFZwAVNRdGOtlJJ92gpj5CSrdyQ9XMnON1hhx8NqduCRyJK6qmSQiln hfTpdRrC+x7xtRjwN/cHZ0RFYeRnCYJH+2nbje78IFzoJYrNsdg1hi0k8LNOSvPeFc 1Bo64lULAHDDw== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id pNjdq10aWKTj; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from [192.168.254.12] (47-147-225-25.fdr01.snmn.ca.ip.frontiernet.net [47.147.225.25]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 2C4243C01086E; Sun, 18 May 2025 00:39:41 -0700 (PDT) Message-ID: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> Date: Sun, 18 May 2025 00:39:38 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Paul Eggert Organization: UCLA Computer Science Department Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.66; envelope-from=eggert@cs.ucla.edu; helo=mail.cs.ucla.edu X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) 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 (/) I recently found out that GNU coreutils 'factor' misbehaves if its=20 internal word is 128 bits rather than the usual 64. This could happen if=20 one builds Coreutils 9.7 on a platform with 128-bit uintmax_t, something=20 that POSIX allows (though it's only theoretical now as far as I know). The problem occurs when src/factor.c's prime_p function assumes that as=20 a quick test, its argument N must be prime if N is less than=20 FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME. I guess this quick-test=20 assumption is true for 64-bit uintmax_t, but not for 128-bit. I worked around the bug by installed a patch=20 .=20 This patch changes prime_p to rely on the quick-test assumption only=20 when the internal word size is 64 bits. On platforms with wider words,=20 the code now tests smaller numbers for primes too; this works around the=20 bug, but is slower. It'd be nice if the underlying problem were fixed, so that the code is=20 more portable to 128-bit word. The issue might be related to Bug#25135 "Infinite loop in factor"=20 so I am cc'ing this to Torbj=C3=B6rn. The=20 current factor.c is not the same as what Torbj=C3=B6rn contributed years = ago=20 so it is of course possible that I or someone else introduced the bug=20 more recently. To reproduce the problem on Fedora 42 x86-64: git clone https://git.savannah.gnu.org/git/coreutils.git cd coreutils git checkout fe51b33859d2e7286425d6d5600288ce9ae43bd1 ./bootstrap ./configure make CFLAGS=3D'-DUSE_INT128 -DEXHIBIT_INT128_BUG' WERROR_CFLAGS=3D echo 340282366920938463463374607431768211355 | src/factor The output is: 340282366920938463463374607431768211355: 155=20 2195370109167344925570158757624311041 which is wrong, as 155 is not prime. From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Sun, 18 May 2025 09:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: Paul Eggert Cc: 78476@debbugs.gnu.org X-Debbugs-Original-Cc: Coreutils bugs Received: via spool by submit@debbugs.gnu.org id=B.174755923819657 (code B ref -1); Sun, 18 May 2025 09:08:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 May 2025 09:07:18 +0000 Received: from localhost ([127.0.0.1]:55475 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uGZzJ-00056y-La for submit@debbugs.gnu.org; Sun, 18 May 2025 05:07:17 -0400 Received: from lists.gnu.org ([2001:470:142::17]:53200) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uGZzH-00056S-N0 for submit@debbugs.gnu.org; Sun, 18 May 2025 05:07:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uGZzA-0001xi-TR for bug-coreutils@gnu.org; Sun, 18 May 2025 05:07:10 -0400 Received: from martin.gmplib.org ([130.242.124.102] helo=shell.gmplib.org) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uGZz8-0008Mx-R3 for bug-coreutils@gnu.org; Sun, 18 May 2025 05:07:08 -0400 Received: by shell.gmplib.org (Postfix, from userid 1001) id AB8249552; Sun, 18 May 2025 11:07:01 +0200 (CEST) From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund In-Reply-To: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> (Paul Eggert's message of "Sun, 18 May 2025 00:39:38 -0700") References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> Date: Sun, 18 May 2025 11:07:01 +0200 Message-ID: <868qmuthhm.fsf@shell.gmplib.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: none client-ip=130.242.124.102; envelope-from=tg@gmplib.org; helo=shell.gmplib.org X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, KHOP_HELO_FCRDNS=0.399, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Just a quick note. I don't think is makes much sense to handle two 128-bit words in this code. In fact, the use of uintmax_t was a mistake, it should use "unsigned long" or "unsigned long long" whichever is efficiently supported directly by the hardware. While uintmax_t could be made to work also for the cases you report, it will be inefficient. A few months ago, I contributed a suggested new core factoring function to GNU coreutils, which is, IIRC, 2-3 times faster than the current code for the bignum range. It uses GMP's mpn functions with "Montgomery multiplication". There were two problems with my new core code: 1. It will not work with mini-GMP, which I think is undesiable. 2. It did not optimise for smaller factoring tasks. The fix for this would be to merge that from the current coreutils factor.c. --=20 Torbj=C3=B6rn Please encrypt, key id 0xC8601622 From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Mon, 19 May 2025 19:28:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.174768285732389 (code B ref 78476); Mon, 19 May 2025 19:28:02 +0000 Received: (at 78476) by debbugs.gnu.org; 19 May 2025 19:27:37 +0000 Received: from localhost ([127.0.0.1]:45141 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uH69B-0008QL-DN for submit@debbugs.gnu.org; Mon, 19 May 2025 15:27:37 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]:53102) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uH698-0008Pj-4y for 78476@debbugs.gnu.org; Mon, 19 May 2025 15:27:34 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 474103C0140A0; Mon, 19 May 2025 12:27:28 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id t7NWSWvfKZdi; Mon, 19 May 2025 12:27:28 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 20C5B3C0149D1; Mon, 19 May 2025 12:27:28 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 20C5B3C0149D1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1747682848; bh=JtPNaW5QGBkhez1Uw9qnr9E8bBU2udMD9MzS2oPWJys=; h=Message-ID:Date:MIME-Version:To:From; b=dGl4RYPrDXcCETIcu3ycH+6eJM7QNZ9mDJzmPOpxaXdu/9D0nv0L1g1TAxttY4vlc zTlYTcGYh4R6ZIfjSbzi8o4mS10UkSM4LPt/1a3sxYgjYF6aW+2J+hp8NkVl0U5Q19 RmI8OdIq39akUmsh0EpVJrhsRy95PTG9OsemqpdiTGt6KxYq8wOrTpGms2ltPXlj2X osWi13Qr9UVi7LTTW4lPD7f/uAllkVynvHO2qAmF+nmBAcUASxwyhsOWP5zxxCuwVW lCFmF7i/e/k1b28ACxbP8B0WJ6LuEarazARxc5XNlGQk4CR3v6i8Lxw3IL1Rf/l1Qe UJXpgDSyBY8Qg== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id nkHbxciAx2V2; Mon, 19 May 2025 12:27:28 -0700 (PDT) Received: from [192.168.254.12] (unknown [47.147.225.25]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 017E03C0140A0; Mon, 19 May 2025 12:27:27 -0700 (PDT) Message-ID: <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> Date: Mon, 19 May 2025 12:27:27 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> Content-Language: en-US From: Paul Eggert Organization: UCLA Computer Science Department In-Reply-To: <868qmuthhm.fsf@shell.gmplib.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 2025-05-18 02:07, Torbj=C3=B6rn Granlund wrote: > I don't think is makes much sense to handle two 128-bit words in this > code. In fact, the use of uintmax_t was a mistake, it should use > "unsigned long" or "unsigned long long" whichever is efficiently > supported directly by the hardware. Fine, but the 128-bit bug is independent of uintmax_t. Suppose we change=20 factor.c to never use uintmax_t, and suppose we have a (theoretical but=20 allowed) platform where unsigned long is 128 bits and where factor.c=20 uses that type for its words. Then before my Saturday coreutils=20 commit[1], this code in prime_p: /* We have already cast out small primes. */ if (n < (wide_uint) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) return true; was incorrect. The problem is that when given 2**128 - 101,=20 factor_using_pollard_rho generates 155 and tests it with prime_p, and=20 the above code causes prime_p to incorrectly report that 155 is prime. > While uintmax_t could be made to work also for the cases you report, it > will be inefficient. >=20 > A few months ago, I contributed a suggested new core factoring function > to GNU coreutils, which is, IIRC, 2-3 times faster than the current cod= e > for the bignum range. It uses GMP's mpn functions with "Montgomery > multiplication". >=20 > There were two problems with my new core code: >=20 > 1. It will not work with mini-GMP, which I think is undesiable. >=20 > 2. It did not optimise for smaller factoring tasks. The fix for this > would be to merge that from the current coreutils factor.c. Thanks, I didn't know about all that. I plan to take a look at it. [1]:=20 https://git.savannah.gnu.org/cgit/coreutils.git/commit/?id=3Dfe51b33859d2= e7286425d6d5600288ce9ae43bd1 From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Mon, 19 May 2025 22:24:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: Paul Eggert Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.174769343613892 (code B ref 78476); Mon, 19 May 2025 22:24:02 +0000 Received: (at 78476) by debbugs.gnu.org; 19 May 2025 22:23:56 +0000 Received: from localhost ([127.0.0.1]:46965 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uH8to-0003bv-7d for submit@debbugs.gnu.org; Mon, 19 May 2025 18:23:56 -0400 Received: from martin.gmplib.org ([130.242.124.102]:61438 helo=shell.gmplib.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uH8tk-0003bQ-HU for 78476@debbugs.gnu.org; Mon, 19 May 2025 18:23:53 -0400 Received: by shell.gmplib.org (Postfix, from userid 1001) id 698A49568; Tue, 20 May 2025 00:23:50 +0200 (CEST) From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund In-Reply-To: <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> (Paul Eggert's message of "Mon, 19 May 2025 12:27:27 -0700") References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> Date: Tue, 20 May 2025 00:23:50 +0200 Message-ID: <86iklwutmx.fsf@shell.gmplib.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.4 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Paul Eggert writes: Fine, but the 128-bit bug is independent of uintmax_t. Suppose we change factor.c to never use uintmax_t, and suppose we have a (theoretical but allowed) platform where unsigned long is 128 bits and where factor.c uses that type for its words. Then before my Saturday coreutils commit[1], this code in prime_p: /* We have already cast out small primes. */ if (n < (wide_uint) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) return true; was incorrect. Why is it incorrect? I read you change, and I strongly disgree with it. I actually find it extremely worrying that a change is motivated by "We don't know why the code misbehaves when wide_uint is wider;" and then the presumed bug is masked with a pretty questionable change. Really? How about debugging it? Furthernorem tinkering with mature code for porting it to something with does not exist and likely will never exist, is a bad idea. No, we are very unlikely to see systems with 128x128->256 bit hardware multiply support, which is the only case where forcing factor.c to do 128-bit arithmetic. Let's use our time and effort on improving things for the word we live in. --=20 Torbj=C3=B6rn Please encrypt, key id 0xC8601622 From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Mon, 19 May 2025 22:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.17476950853098 (code B ref 78476); Mon, 19 May 2025 22:52:01 +0000 Received: (at 78476) by debbugs.gnu.org; 19 May 2025 22:51:25 +0000 Received: from localhost ([127.0.0.1]:47254 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uH9KO-0000nu-Nz for submit@debbugs.gnu.org; Mon, 19 May 2025 18:51:25 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]:54550) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uH9KL-0000nA-9G for 78476@debbugs.gnu.org; Mon, 19 May 2025 18:51:22 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id CD4C73C0149EF; Mon, 19 May 2025 15:51:13 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id EK2Z2j2pdPXH; Mon, 19 May 2025 15:51:13 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id A60353C0149F3; Mon, 19 May 2025 15:51:13 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu A60353C0149F3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1747695073; bh=J9lG5BvxOj1H7t6CzUBTVXh3UY+91f5/8lJGcCkfTeA=; h=Message-ID:Date:MIME-Version:To:From; b=eeBurBaIDZdqHYBZ5O/lzVml1zdPizo2tdOhfnTi32xJHgUznN1tK/XngUTOREAPO umomzKbWnqdMREfrSKnJcQbRWO+lkDQ5wDzrfH9aMk+kx/ATyDGr7EMD5yhdlZ+Kif QmRGqyHU45W/xmJ7UjCF8Fedvk21uJTMpXEXdEpF5vNS8zkRDIFZUoSkWs46sQ6p3m FocYIfkSHSI6PcQz7F5izPwrfRjLSilJI+R8C1bFXWuWQlWWY74HgDhuuHeV8yevPB GOdLXO8XjWU58ss0wzQSixNtT2opGaXjPpLPRn8pIuw4k67tmjAV/8AFnR7FX0PUfC dXv3Z1qJ1leBQ== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id sSh93FaWRU3x; Mon, 19 May 2025 15:51:13 -0700 (PDT) Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 8DD023C0149EF; Mon, 19 May 2025 15:51:13 -0700 (PDT) Message-ID: <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> Date: Mon, 19 May 2025 15:51:12 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> Content-Language: en-US From: Paul Eggert Autocrypt: addr=eggert@cs.ucla.edu; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBlQQTAQgAPwIbAwYLCQgHAwIGFQgCCQoLBBYCAwEC HgECF4AWIQR+N5Kp2Kz31jO8FYjtl+kOYqp+NAUCZiLOewUJHWQLDAAKCRDtl+kOYqp+NHGE D/9Wmbk+cAaQsYLPGBvyzIjZIRzo/V2p3ZwckVA1VEQivx5azu1cs86qDoVIe45AtwmKOvdV wTQd/QeglkZR6D2YPW7UR/7emajyJZZcy+etVTDKoaw1i6/hmd/CpGjUeUSvgoPs6nYR+1lo pSXTpaGrh1W0qQHalSkOOwCHG3HtGk9Ve2AERDUYxmcn8/eZHb7xpUJEJMBBI1bx/zcw1EtB rjsQ1R1faJ/r/7LPAyV36RLvnbX69PylHKQEbJoaY9aUb2Vpm63ni3FeTA7/3jpPvaSRWHJh vPYx6Fm2Ln8pI0Yf/W2B8QMiPTnF/LnH2kvUcf9VXm+1mQJ3fBFU25HZwBhuqZ24IeKymPEt BUMQAum97Dto0jSgR2OUvX7z+twhpQEgRGBzPHYwDi4SxF5Z4Q5Y7B7a++HP9tIxG6CVFIwI 4xVaZud18bPa0YBL+cISmMgxq7h7yoVXl6u3pm9Yiv+W6Lp9QGN8Rw1VuJMOoFCYuoxG8mXO TA5b1jvlQ32gHFFhqErDAhNJRsfgrpe9Gok4Ycp+rWljbvS5Wrl0uth5MP7FbaHN2kmTZibq KXAd//IqczhDyU6qnW6ao+h4iDBDgYgRbQjmToX/vmIdEMzvPGqWXKhe/q1TYMuOO+IfP+bI fyPFH29nVN/o9c4J7myeKvv3HKSXdSVjlh2V787BTQRMgHJkARAApoXrvxP3DIfjCNOtXU/P dwMShKdX/RlSs5PfunV1wbKP8herXHrvQdFVqECaTSxmlhzbk8X0PkY9gcVaU2O49T3qsOd1 cHeF52YFGEt0LhsBeMjgNX5uZ1V76r8gyeVlFpWWb0SIwJUBHrDXexF67upeRb2vdHBjYDNe ySn+0B7gFEqvVmZu+LadudDp6kQLjatFvHQHUSGNshBnkkcaTbiI9Pst0GCc2aiznBiPPA2W QxAPlPRh3OGTsn5THADmbjqY6FEMLasVX8DSCblMvLwNeO/8SxziBidhqLpJCqdQRWHku5Xx gIkGeKOz5OLDvXHWJyafrEYjjkS6Ak6B5z6svKliClWnjHQcjlPzyoFFgKTEfcqDxCj4RY0D 0DgtFD0NfyeOidrSB/SzTe2hwryQE3rpSiqo+0cGdzh4yAHKYJ+UrXZ4p93ZhjGfKD1xlrNY DlWyW9PGmbvqFuDmiIAQf9WD/wzEfICc+F+uDDI+uYkRxUFp92ykmdhDEFg1yjYsU8iGU69a Hyvhq36z4zctvbqhRNzOWB1bVJ/dIMDvsExGcXQVDIT7sDNXv0wE3jKSKpp7NDG1oXUXL+2+ SF99Kjy753AbQSAmH617fyBNwhJWvQYg+mUvPpiGOtses9EXUI3lS4v0MEaPG43flEs1UR+1 rpFQWVHo1y1OO+sAEQEAAcLBfAQYAQgAJgIbDBYhBH43kqnYrPfWM7wViO2X6Q5iqn40BQJm Is58BQkdZAsMAAoJEO2X6Q5iqn40Q68QAJ9GubS/ej30Vc4idoZdc0IyMcL7kQJbMohF+Tyn ZE+TGn9WvzP10yLyzoI0vNlcNfP92d2MS//pFjOuANb5mwyiEYA+rDZIdS4ZZpHxCs2sxMC4 afLCf3kv4aMnTeBvb9na403dlczz9cAacvsmniSFdpb1+BzMpYbybglU5oYMGhYT2nnCRjXN 6S2nKYt4mjJeeOuxHrdeqQQdVBNYeNfTcPePeqvZ2+bD6u9yxZtaV+wxdpqglosQvjqhOYz7 h50/ZTSq70/npoCq44TzdJKttaYvlW6ziRz0g4RRAqZyoxjYXiy5qj8r8zXJuB11ApZCGuKn /usbji9RYbflAhxFeh4LMmpDVi6BrF30b73Md59K7PuEKN1NxzlWiqqQHZZ9momN0GXLPcGq 4uyfq7yVEy7wP5PMOh6oqscKklE3gFQtq0P1Ki0xqdF6Fq5LPJc+0Db2CYkVIy7Xaa/f74I3 sOfQfEeDylVXR5iDfUJEYv/0DYhOr7q5/0b1kh3M4wkrB4C5jVNHjIIj+RsAK90c3t38OhAl jiSN7Bkwy24Afy8eIu6wWzvhnsQGpZPB+IffmxT1wkTy8UxZKjUWV0C82iphVgCUUi2f9sDV Q/tNcwVWmOS+gdv9Wk6tdGeM+Ee+Qs6YG05jcSoajzF0TL07ajLcayRq2j1Os2CtQ8qu Organization: UCLA Computer Science Department In-Reply-To: <86iklwutmx.fsf@shell.gmplib.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 5/19/25 15:23, Torbj=C3=B6rn Granlund wrote: > Paul Eggert writes: >=20 > before my Saturday coreutils commit[1], this code in prime_p: >=20 > /* We have already cast out small primes. */ > if (n < (wide_uint) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) > return true; >=20 > was incorrect. >=20 > Why is it incorrect? Because when you run it on a machine with 128-bit unsigned long (or=20 whatever type is being used for the word size), N can be 155 and 155 is=20 not prime. > I actually find it extremely worrying that a change is motivated by "We > don't know why the code misbehaves when wide_uint is wider;" and then > the presumed bug is masked with a pretty questionable change. Really? The change is questionable only because it hurts performance when the=20 word size exceeds 64 bits. It's not questionable on correctness grounds.=20 And it doesn't affect performance in the usual 64-bit case. > How about debugging it? Yes, that'd be better and that's why I filed the bug report. However,=20 what's a good way to debug it? My *guess* is that prime_p is sometimes called in a context where it's=20 already guaranteed that we have cast out small primes, and it's=20 sometimes called in a context where there is no such guarantee. The=20 latter context is the bug. It appears that this context can occur in=20 factor_using_pollard_rho (n, a, factors), which contains this code after=20 the "factor_found:" label: if (!prime_p (g)) factor_using_pollard_rho (g, a + 1, factors); else factor_insert (factors, g); If I understand things correctly, there's no guarantee here that G=20 cannot be a small prime, which means factor_insert can be called even=20 when G is not prime, and that is a bug. > Let's use our time and effort on improving things for the word we live > in. That would be reasonable if we knew that the existing code works for all=20 cases in 64 bits. Is there some way to show that? (We can't exhaustively=20 test it.) Even a comment would be helpful. And, if the code is not designed to=20 work with any word size other than 64 bits, there should be a static=20 check to that effect. (There's already a static check that words must be=20 at least 64 bits.) From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Tue, 20 May 2025 07:05:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: Paul Eggert Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.174772466924578 (code B ref 78476); Tue, 20 May 2025 07:05:02 +0000 Received: (at 78476) by debbugs.gnu.org; 20 May 2025 07:04:29 +0000 Received: from localhost ([127.0.0.1]:52855 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uHH1Y-0006OM-QQ for submit@debbugs.gnu.org; Tue, 20 May 2025 03:04:29 -0400 Received: from martin.gmplib.org ([130.242.124.102]:64242 helo=shell.gmplib.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uHH1W-0006OC-4P for 78476@debbugs.gnu.org; Tue, 20 May 2025 03:04:26 -0400 Received: by shell.gmplib.org (Postfix, from userid 1001) id 595D1957D; Tue, 20 May 2025 09:04:24 +0200 (CEST) From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund In-Reply-To: <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> (Paul Eggert's message of "Mon, 19 May 2025 15:51:12 -0700") References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> Date: Tue, 20 May 2025 09:04:24 +0200 Message-ID: <86sekzvk3r.fsf@shell.gmplib.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.4 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Paul Eggert writes: > if (n < (wide_uint) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) > return true; > was incorrect. > Why is it incorrect? Because when you run it on a machine with 128-bit unsigned long (or whatever type is being used for the word size), N can be 155 and 155 is not prime. I thought you said that test was wrong, and I asked what was wrong with it, and why did you make that test return false. Now I understand that you made the test return false in order to mask an underlying bug. Please don't do that! The change is questionable only because it hurts performance when the word size exceeds 64 bits. It's not questionable on correctness grounds. I cannot tell for sure that you change cannot coase other problems. Say, an infinite loop? (I will not lose sleep over that until somebody creates a computer with native 128-bit multiply hardware.) However, what's a good way to debug it? As a last resort, compare the execution for a working base type with one which fails? When do they diverge? Why do they diverge? I am too busy to take care of this. Sorry. The current factor.c code is becoming insanely complex. Contructs masking bugs triggered on hypothetical systems doesn't help with managing complexity. Preferably, this problem should be fully understood. If it can be argued that it is a real bug which affects real systems, it needs a clean fix. --=20 Torbj=C3=B6rn Please encrypt, key id 0xC8601622 From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: Bernhard Voelker Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Fri, 23 May 2025 07:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund , Paul Eggert Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.174798406920375 (code B ref 78476); Fri, 23 May 2025 07:08:02 +0000 Received: (at 78476) by debbugs.gnu.org; 23 May 2025 07:07:49 +0000 Received: from localhost ([127.0.0.1]:44536 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uIMVR-0005IY-5M for submit@debbugs.gnu.org; Fri, 23 May 2025 03:07:49 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:55463) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uIMVN-0005I0-Ae for 78476@debbugs.gnu.org; Fri, 23 May 2025 03:07:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bernhard-voelker.de; s=s1-ionos; t=1747984047; x=1748588847; i=mail@bernhard-voelker.de; bh=60bSQW8h9SA6W9eHH+kizzJQJ9Er9QVfgKQAwB3eil0=; h=X-UI-Sender-Class:Message-ID:Date:MIME-Version:Subject:To:Cc: References:From:In-Reply-To:Content-Type: Content-Transfer-Encoding:cc:content-transfer-encoding: content-type:date:from:message-id:mime-version:reply-to:subject: to; b=XrBd8hULeiuHd9UJg4YCT8UCm2xJIbzDHEFOiYzLqP2Hu3h0xdpSdoAQRJGjGnV/ GkAwDMs1pLoabY2hM8168mgAYokw5fomgMGdNhOLf6QahvJY6jXGoVcmw3cMO/2ZS vd6LFCpyS+iL4b8r3u9TCz6bTRCXtQq5yqQLs0AK+e+xZ3EM4NWfHSzOCSy1AFyN/ whvVqLqtntF8c/XZUrbT4rJhzVrpmSOCNYcuw7zgkwUm0Gle0DkqVWz1KYSy94S3z /mbp8sqdYn16+H2Fq85N84fa2aLrETKJaegCz9/1ilajRBGMt2Xb/0W0zksC+hPM3 4h9dMkm3GYScIgw0iw== X-UI-Sender-Class: 55c96926-9e95-11ee-ae09-1f7a4046a0f6 Received: from [192.168.101.10] ([91.49.79.180]) by mrelayeu.kundenserver.de (mreue010 [212.227.15.167]) with ESMTPSA (Nemesis) id 1MGzI3-1u60IG2dAx-004BXi; Fri, 23 May 2025 09:07:27 +0200 Message-ID: <3076bb4f-c857-40b1-9521-417b9d6955d6@bernhard-voelker.de> Date: Fri, 23 May 2025 09:07:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> <86sekzvk3r.fsf@shell.gmplib.org> Content-Language: en-US From: Bernhard Voelker In-Reply-To: <86sekzvk3r.fsf@shell.gmplib.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:KJBNgrbuMvGTwUQyhD97k2EiCPQ39+bPimg8Z5E/y9n18qko8Mu spnTJuX0mFgdgytBAuyIgk2NK8GCS+LMcJY8PlFZ6NNOjzWhoup+c3+3cMM/CSqj0v/JEKb ZTTXADWPm+G/dtInh39YQbVNFWCdk8YosSOMJKrm6h+WrXGe1qgu5Rj8nJDsERNdxlGQzvO ASvJFbJ4XCTLhzUhvCAjQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:Ir9WRZNDb0Q=;2fsYToqklydopAEffusnZBoHlds i7eqIV5zn9a5aeZBb739wD9EYNruFKlkYUL2EB4ZKTmUzwOkQpJvDGDr/1KVyk7ohoTrP3Mi0 9SXMTRhf7oWCdzKNG4OAyvns4MS45MYiZvyqLvmyrFVzqIf2n3N82gaMLrIudV9CWBXmNtDbC 3Sw2UAIAns3kJClmLH21dAFNibAN9mW5JsKVcQAy8ZRIr6zboXoEp5QeaMwA+rhThLZh3O9/8 ZFxAMOJO2dhKtooe+EWk/Iy3thh0kSWeftkSCYQJ2N4DizSf5YIYtjQvbT9+z1QNEJxtirV8S y+Eqru1XmIhgWDUG6MbAqSCb1yZohYDjCmLRodudiQ+mJHmCR9329QzHKShz+JzSEq7KJ7z29 6c5q5enErQq5GDLWbe1brKd4GAVFrbapQiFB2gUFCNLNn79OKj/A3qNjX4xJ73Ei35gnttXLr 9id4iXPJrZyFWiuzsuJsVxjTrTVeqkcRIGvnMSjJNMsux8fk6IIQpk9XsAENJsYwmIGoYZBk7 mEWXJuGoMC7ns+htVwdTJahHPM4Iiy0G8YU6Th4WtiJK4PDkTWk2vyFmfC6RD9er7ef3/1OrB 9g3s6Jk7JMh2lzE8yEO+jCpMEX/Ixzt2wqzg2HbmPMzLr/c0En7PvJvULKrTboi17bqvNCLYk mJFSc0GuZuqZ9pjLYqmaMQEud7gk7WW6xRfLHLUsIRI4ZBgB6SQm8sbJ/EoI3TcQhMKUht9zk +gQN9POnyzqmebPg4vkl20TUM1fl6x73rdyYFvkPcAcEiCxG3QQAyocWFW/V7onkXjf7rJwwk cUEJ009SyPB4SlyLEaLg7OJd5GVWBj8pdEW+SlIVaKRx1HYudAUs+DEcR9UbBPtzgkFwAJSvE RPV8hhzTPruF4P0QWU79Mc+Av8ACLLO+qFzEuUja+3BdKz1mZ1UcDFYwi5QLVUHXXAg8xtjTj ch4frHfOSyQ0TlVX6K/0f44qAwUpQU8HrSYLWozyw9wgTyOQsoWrIv4ceYtg37ydKIeZ4QA3J MZ6UtZ4o5DPeQRfjkNFnYyrc88DJ3g4bzKNmbnyp33NPXlXt0BsZZYY6SbQxyge9n5nqcNng4 VPXlSnKBNuCbzPMiokfTxNFrfsPzZ2niU4SoAjxvBO2220BiFZ6THrf9WoBHwOOp9/d+eJzKk cG7sY/3hXZ4O3Zj9eMulYOLqyZ9SiDgJFzuTO9ufkfIbFsTHKGEG9RODcjdIV6AhaqIvJc5uQ jgK+WXRX+Sm1pJm4F8JVY9IUvt8eTWsEwbQ3cl5wl78zAkXuZlSYsrwmjVEiKihuXZK+jcpyu hW4vWHWyN2p3KxuN5cfR/Eo4SoihQ6LbfSzOJo2HX0tFW2iLkm8Oa06Fs5VwPP8GrywDFHHxH kIER8S6ImoPD0aUAJe+k0DFx8dBN/fjf4c3alhAf8WU+7K4XtyyrarrExx X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 5/20/25 09:04, Torbj=C3=B6rn Granlund wrote: > The current factor.c code is becoming insanely complex. Contructs > masking bugs triggered on hypothetical systems doesn't help with > managing complexity. If such hardware seems to be quite some time away, what about guarding the code for the ranges we know it to work, and throw an error - no matter whether at compile time or runtime - with a diagnostic to revisit the problem once such hardware will be available? Have a nice day, Berny From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Thu, 10 Jul 2025 05:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Cc: 78476@debbugs.gnu.org Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.175212628320508 (code B ref 78476); Thu, 10 Jul 2025 05:45:02 +0000 Received: (at 78476) by debbugs.gnu.org; 10 Jul 2025 05:44:43 +0000 Received: from localhost ([127.0.0.1]:54569 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uZk5K-0005Kh-Um for submit@debbugs.gnu.org; Thu, 10 Jul 2025 01:44:43 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]:55870) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uZk5I-0005KH-1n for 78476@debbugs.gnu.org; Thu, 10 Jul 2025 01:44:40 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 652573C01084D; Wed, 9 Jul 2025 22:44:33 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id AGv5Qo-AaJkl; Wed, 9 Jul 2025 22:44:33 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 388FA3C01084E; Wed, 9 Jul 2025 22:44:33 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 388FA3C01084E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1752126273; bh=VxCt3ZYCPYyjsMkUJKAYmRfFYRSUGBlBlUme7IRtJUA=; h=Message-ID:Date:MIME-Version:From:To; b=FWe/eWIZscH+XJ8fTfbTHxQBPhQkMYUZdNVfy3sCEV0mf1TVGNx14waWM9D/Mr47g ZOw+pO+dVrntPY1+n5XnG04Zhapd5aWO129zqcpytOm9H2kuCnYvv47EAixR4Z0MRw h+a5wkojGHU9MnhsGsJuQ7tvz/i2UvfqP9B9oSSTp9MC9mToUN59gJAoPV8ImU3zg1 /8+4FWiN5xLSibpTXMisvIrVwwkVqGPvKGWgGXq3WSAaWvnL81HsyoGazWDITmMj3+ oH7ETg8WJzb2rswv3BRKcUgL/kw53hKLYrOZl9hCZp+afL2ja12oQxq3V1UXHZueoX yL+LOILVwooIg== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id eNbXFnyeRU6H; Wed, 9 Jul 2025 22:44:33 -0700 (PDT) Received: from penguin.cs.ucla.edu (47-154-30-222.fdr01.snmn.ca.ip.frontiernet.net [47.154.30.222]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id F34383C01084D; Wed, 9 Jul 2025 22:44:32 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------82F0QomCnpSlvLmNa97TF8yq" Message-ID: <6c763b9d-c1e4-41fb-ab50-53f61dc49391@cs.ucla.edu> Date: Wed, 9 Jul 2025 22:44:32 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Paul Eggert References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> <86sekzvk3r.fsf@shell.gmplib.org> Content-Language: en-US Organization: UCLA Computer Science Department In-Reply-To: <86sekzvk3r.fsf@shell.gmplib.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" This is a multi-part message in MIME format. --------------82F0QomCnpSlvLmNa97TF8yq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 2025-05-20 00:04, Torbj=C3=B6rn Granlund wrote: > I am too busy to take care of this. Sorry. Understandable. Thanks for taking the time to look at my email. > Preferably, this problem should be fully understood. Yes, that'd be better but it appears that nobody has the time to do so.=20 However, we can address this in a different way, by removing the buggy=20 code instead of understanding it. I did so by re-reading this bug report=20 along with your January proposal[1], looking at factor.c again, and=20 committing changes mostly along the lines you suggested, as follows: * Merge the January proposed factor.c into GNU coreutils. * Port to mini-gmp.c, which lacks mpn_tdiv_qr. * Don't use uintmax_t or unsigned __int128 as a word; just use the same=20 mp_limb_t type that GMP uses. * Remove the USE_SQUFOF code (which was unused). * Don't try to prove primality; trust Baillie-PSW as being good enough.=20 Use mpz_probab_prime_p for that, even for numbers that fit into two=20 limbs or less. * Port to unlikely platforms lacking 32- or 64-bit words. * Minor speedups, e.g., convert strings to uuint faster, and decrement=20 MR_REPS from 25 to 24 as that's a sweet spot in GMP. * Statically check for unsupported (and unlikely) build configurations. * Add some comments. Two FIXMEs remain in factor.c. To address the first one, would GMP=20 accept longlong.h changes to make it standalone even with=20 -Wunused-macros? Currently longlong.h is not standalone in that sense,=20 even if LONGLONG_STANDALONE is defined. The changes should be minor. You can grab all the coreutils updates from Savannah by cloning [2] as=20 usual. For convenience in reviewing I am attaching the factors-related=20 changes between the old and new Coreutils as a single patch. Comments=20 are of course welcome. [1]: https://lists.gnu.org/r/coreutils/2025-01/msg00000.html [2]: https://git.savannah.gnu.org/git/coreutils.git --------------82F0QomCnpSlvLmNa97TF8yq Content-Type: text/x-patch; charset=UTF-8; name="factor1.patch" Content-Disposition: attachment; filename="factor1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmluZGV4IDg3YmEyNjU5Yy4uZWRhOTcxYmI2IDEw MDY0NAotLS0gYS9ORVdTCisrKyBiL05FV1MKQEAgLTIsNiArMiwxMCBAQCBHTlUgY29yZXV0 aWxzIE5FV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gb3V0bGlu ZSAtKi0KIAogKiBOb3Rld29ydGh5IGNoYW5nZXMgaW4gcmVsZWFzZSA/Lj8gKD8/Pz8tPz8t Pz8pIFs/XQogCisqKiBDaGFuZ2VzIGluIGJlaGF2aW9yCisKKyAgJ2ZhY3RvcicgaXMgbm93 IG11Y2ggZmFzdGVyIGF0IGlkZW50aWZ5aW5nIGxhcmdlIHByaW1lIG51bWJlcnMuCisKICoq IEJ1ZyBmaXhlcwogCiAgIGNrc3VtIHdhcyBub3QgY29tcGlsYWJsZSBieSBBcHBsZSBMTFZN IDEwLjAuMCB4ODYtNjQsIHdoaWNoCmRpZmYgLS1naXQgYS9kb2MvY29yZXV0aWxzLnRleGkg Yi9kb2MvY29yZXV0aWxzLnRleGkKaW5kZXggODlhMGI1OTcyLi43ZmMyZGI1NzEgMTAwNjQ0 Ci0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysgYi9kb2MvY29yZXV0aWxzLnRleGkKQEAg LTE5MTU4LDcgKzE5MTU4LDcgQEAgJCBmYWN0b3IgLS1leHBvbmVudHMgMzAwMAogCiBJZiB0 aGUgbnVtYmVyIHRvIGJlIGZhY3RvcmVkIGlzIHNtYWxsIChsZXNzIHRoYW4gQG1hdGh7Ml57 MTI3fX0gb24KIHR5cGljYWwgbWFjaGluZXMpLCBAY29tbWFuZHtmYWN0b3J9IHVzZXMgYSBm YXN0ZXIgYWxnb3JpdGhtLgotRm9yIGV4YW1wbGUsIG9uIGEgY2lyY2EtMjAxNyBJbnRlbCBY ZW9uIFNpbHZlciA0MTE2LCBmYWN0b3JpbmcgdGhlCitGb3IgZXhhbXBsZSwgb24gYSBjaXJj YS0yMDIxIEludGVsIFhlb24gVy0xMzUwLCBmYWN0b3JpbmcgdGhlCiBwcm9kdWN0IG9mIHRo ZSBlaWdodGggYW5kIG5pbnRoIE1lcnNlbm5lIHByaW1lcyAoYXBwcm94aW1hdGVseQogQG1h dGh7Ml57OTJ9fSkgdGFrZXMgYWJvdXQgNCBtcyBvZiBDUFUgdGltZToKIApAQCAtMTkxNjks MjIgKzE5MTY5LDMyIEBAICQgbj0kKGVjaG8gIiRNOCAqICRNOSIgfCBiYykKICQgYmFzaCAt YyAidGltZSBmYWN0b3IgJG4iCiA0OTUxNzYwMTU0ODM1Njc4MDg4MjM1MzE5Mjk3OiAyMTQ3 NDgzNjQ3IDIzMDU4NDMwMDkyMTM2OTM5NTEKIAotcmVhbAkwbTAuMDA0cworcmVhbAkwbTAu MDA2cwogdXNlcgkwbTAuMDA0cwotc3lzCTBtMC4wMDBzCitzeXMJMG0wLjAwMnMKIEBlbmQg ZXhhbXBsZQogCiBGb3IgbGFyZ2VyIG51bWJlcnMsIEBjb21tYW5ke2ZhY3Rvcn0gdXNlcyBh IHNsb3dlciBhbGdvcml0aG0uICBPbiB0aGUKIHNhbWUgcGxhdGZvcm0sIGZhY3RvcmluZyB0 aGUgZWlnaHRoIEZlcm1hdCBudW1iZXIgQG1hdGh7Ml57MjU2fSArIDF9Ci10YWtlcyBhYm91 dCAxNCBzZWNvbmRzLCBhbmQgdGhlIHNsb3dlciBhbGdvcml0aG0gd291bGQgaGF2ZSB0YWtl bgotYWJvdXQgNzUwIG1zIHRvIGZhY3RvciBAbWF0aHsyXnsxMjd9IC0gM30gaW5zdGVhZCBv ZiB0aGUgNTAgbXMgbmVlZGVkIGJ5Ci10aGUgZmFzdGVyIGFsZ29yaXRobS4KK3Rha2VzIGFi b3V0IDY0MDAgbXMuICBIb3dldmVyLCBsYXJnZSBwcmltZXMgYXJlIGlkZW50aWZpZWQgcXVp Y2tseToKK2l0IHRha2VzIGp1c3QgNDIwIG1zIHRvIGZhY3RvciB0aGUgTWVyc2VubmUgcHJp bWUgQG1hdGh7Ml57MTEyMTN9IC0gMX0KK2ludG8gaXRzZWxmIGFuZCAxLgogCi1GYWN0b3Jp bmcgbGFyZ2UgbnVtYmVycyBpcywgaW4gZ2VuZXJhbCwgaGFyZC4gIFRoZSBQb2xsYXJkLUJy ZW50IHJobworRmFjdG9yaW5nIGxhcmdlIG51bWJlcnMgaXMsIGluIGdlbmVyYWwsIGhhcmQu ICBUaGUgUG9sbGFyZC0tQnJlbnQgcmhvCiBhbGdvcml0aG0gdXNlZCBieSBAY29tbWFuZHtm YWN0b3J9IGlzIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgZm9yCi1udW1iZXJzIHdpdGggcmVs YXRpdmVseSBzbWFsbCBmYWN0b3JzLiAgSWYgeW91IHdpc2ggdG8gZmFjdG9yIGxhcmdlCi1u dW1iZXJzIHdoaWNoIGRvIG5vdCBoYXZlIHNtYWxsIGZhY3RvcnMgKGZvciBleGFtcGxlLCBu dW1iZXJzIHdoaWNoCi1hcmUgdGhlIHByb2R1Y3Qgb2YgdHdvIGxhcmdlIHByaW1lcyksIG90 aGVyIG1ldGhvZHMgYXJlIGZhciBiZXR0ZXIuCitudW1iZXJzIHdpdGggcmVsYXRpdmVseSBz bWFsbCBmYWN0b3JzLiAgT3RoZXIgbWV0aG9kcyBhcmUgZmFyIGJldHRlcgorZm9yIGZhY3Rv cmluZyBsYXJnZSBjb21wb3NpdGUgbnVtYmVycyB0aGF0IGxhY2sgcmVsYXRpdmVseSBzbWFs bAorZmFjdG9ycywgc3VjaCBhcyBudW1iZXJzIHRoYXQgYXJlIHRoZSBwcm9kdWN0IG9mIHR3 byBsYXJnZSBwcmltZXMuCisKK1doZW4gdGVzdGluZyB3aGV0aGVyIGEgbnVtYmVyIGlzIHBy aW1lLCBAY29tbWFuZHtmYWN0b3J9IHVzZXMgdGhlCitCYWlsbGllLS1QU1cgcHJpbWFsaXR5 IGhldXJpc3RpYyBmb3Igc3BlZWQuICBBbHRob3VnaCBCYWlsbGllLS1QU1cgaGFzCitub3Qg YmVlbiBwcm92ZW4gdG8gcmVqZWN0IGFsbCBjb21wb3NpdGUgbnVtYmVycywgdGhlIHByb2Jh YmlsaXR5IG9mIGEKK0JhaWxsaWUtLVBTVyBwc2V1ZG9wcmltZSBpcyBhc3Ryb25vbWljYWxs eSBzbWFsbCBhbmQgbm8gc3VjaAorcHNldWRvcHJpbWUgaGFzIGJlZW4gZGlzY292ZXJlZCBk ZXNwaXRlIGRlY2FkZXMgb2Ygc2VhcmNoaW5nIGJ5CittYXRoZW1hdGljaWFucy4gIEFueSBz dWNoIHBzZXVkb3ByaW1lIGlzIGdyZWF0ZXIgdGhhbiBAbWF0aHsyXns2NH19LgorRm9yIG1v cmUsIHNlZTogQmFpbGxpZSBSLCBGaW9yaSBBLCBXYWdzdGFmZiBKciBTUy5AOiBTdHJlbmd0 aGVuaW5nIHRoZQorQmFpbGxpZS0tUFNXIHByaW1hbGl0eSB0ZXN0LkA6IEBpe01hdGggQ29t cH0uQDogMjAyMTs5MDoxOTMxLS0xOTU1LkA6CitAdXJlZntodHRwczovL2RvaS5vcmcvMTAu MTA5MC9tY29tLzM2MTZ9LgogCiBAZXhpdHN0YXR1cwogCmRpZmYgLS1naXQgYS9zcmMvZmFj dG9yLmMgYi9zcmMvZmFjdG9yLmMKaW5kZXggOTQ4YmYwNTI3Li40NGMwZGViNmEgMTAwNjQ0 Ci0tLSBhL3NyYy9mYWN0b3IuYworKysgYi9zcmMvZmFjdG9yLmMKQEAgLTE5LDkgKzE5LDEw IEBACiAgICBBcmJpdHJhcnktcHJlY2lzaW9uIGNvZGUgYWRhcHRlZCBieSBKYW1lcyBZb3Vu Z21hbiBmcm9tIFRvcmJqw7ZybgogICAgR3Jhbmx1bmQncyBmYWN0b3JpemUuYywgZnJvbSBH TlUgTVAgdmVyc2lvbiA0LjIuMi4KICAgIEluIDIwMTIsIHRoZSBjb3JlIHdhcyByZXdyaXR0 ZW4gYnkgVG9yYmrDtnJuIEdyYW5sdW5kIGFuZCBOaWVscyBNw7ZsbGVyLgorICAgSW4gMjAy NSwgVG9yYmrDtnJuIEdyYW5sdW5kIGFuZCBQYXVsIEVnZ2VydCBzcGVkIHVwIHByaW1hbGl0 eSBjaGVja2luZy4KICAgIENvbnRhaW5zIGNvZGUgZnJvbSBHTlUgTVAuICAqLwogCi0vKiBF ZmZpY2llbnRseSBmYWN0b3IgbnVtYmVycyB0aGF0IGZpdCBpbiBvbmUgb3IgdHdvIHdvcmRz ICh3b3JkID0gd2lkZV91aW50KSwKKy8qIEVmZmljaWVudGx5IGZhY3RvciBudW1iZXJzIHRo YXQgZml0IGluIG9uZSBvciB0d28gd29yZHMgKHdvcmQgPSBtcF9saW1iX3QpLAogICAgb3Is IHdpdGggR01QLCBudW1iZXJzIG9mIGFueSBzaXplLgogCiAgIENvZGUgb3JnYW5pemF0aW9u OgpAQCAtNDEsMzggKzQyLDI5IEBACiAgICAgICAgIGRpdmlzaW9uIHNpbmNlIHRoZSBwcmlt ZXMgdGFibGUgc3RvcmUgaW52ZXJzZXMgbW9kdWxvIHRoZSB3b3JkIGJhc2UuCiAgICAgICAg IChUaGUgR01QIHZhcmlhbnQgb2YgdGhpcyBjb2RlIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgdGhl IHByZWNvbXB1dGVkCiAgICAgICAgIGludmVyc2VzLCBidXQgaW5zdGVhZCByZWxpZXMgb24g R01QIGZvciBmYXN0IGRpdmlzaWJpbGl0eSB0ZXN0aW5nLikKLSAgICAoMikgQ2hlY2sgdGhl IG5hdHVyZSBvZiBhbnkgbm9uLWZhY3RvcmVkIHBhcnQgdXNpbmcgTWlsbGVyLVJhYmluIGZv cgotICAgICAgICBkZXRlY3RpbmcgY29tcG9zaXRlcywgYW5kIEx1Y2FzIGZvciBkZXRlY3Rp bmcgcHJpbWVzLgotICAgICgzKSBGYWN0b3IgYW55IHJlbWFpbmluZyBjb21wb3NpdGUgcGFy dCB1c2luZyB0aGUgUG9sbGFyZC1CcmVudCByaG8KLSAgICAgICAgYWxnb3JpdGhtIG9yIGlm IFVTRV9TUVVGT0YgaXMgZGVmaW5lZCB0byAxLCB0cnkgdGhhdCBmaXJzdC4KLSAgICAgICAg U3RhdHVzIG9mIGZvdW5kIGZhY3RvcnMgYXJlIGNoZWNrZWQgYWdhaW4gdXNpbmcgTWlsbGVy LVJhYmluIGFuZCBMdWNhcy4KKyAgICAoMikgQ2hlY2sgdGhlIG5hdHVyZSBvZiBhbnkgbm9u LWZhY3RvcmVkIHBhcnQgdXNpbmcgQmFpbGxpZS1QU1cuCisgICAgKDMpIEZhY3RvciBhbnkg cmVtYWluaW5nIGNvbXBvc2l0ZSBwYXJ0IHVzaW5nIFBvbGxhcmQtQnJlbnQgcmhvLgorICAg ICAgICBTdGF0dXMgb2YgZm91bmQgZmFjdG9ycyBhcmUgY2hlY2tlZCBhZ2FpbiB1c2luZyBC YWlsbGllLVBTVy4KIAotICAgIFdlIHByZWZlciB1c2luZyBIZW5zZWwgbm9ybSBpbiB0aGUg ZGl2aXNpb25zLCBub3QgdGhlIG1vcmUgZmFtaWxpYXIKKyAgICBQcmVmZXIgdXNpbmcgSGVu c2VsIG5vcm0gaW4gdGhlIGRpdmlzaW9ucywgbm90IHRoZSBtb3JlIGZhbWlsaWFyCiAgICAg RXVjbGlkZWFuIG5vcm0sIHNpbmNlIHRoZSBmb3JtZXIgbGVhZHMgdG8gbXVjaCBmYXN0ZXIg Y29kZS4gIEluIHRoZQotICAgIFBvbGxhcmQtQnJlbnQgcmhvIGNvZGUgYW5kIHRoZSBwcmlt ZSB0ZXN0aW5nIGNvZGUsIHdlIHVzZSBNb250Z29tZXJ5J3MKLSAgICB0cmljayBvZiBtdWx0 aXBseWluZyBhbGwgbi1yZXNpZHVlcyBieSB0aGUgd29yZCBiYXNlLCBhbGxvd2luZyBjaGVh cCBIZW5zZWwKLSAgICByZWR1Y3Rpb25zIG1vZCBuLgorICAgIFBvbGxhcmQtQnJlbnQgcmhv IGNvZGUsIHVzZSBNb250Z29tZXJ5J3MgdHJpY2sgb2YgbXVsdGlwbHlpbmcKKyAgICBhbGwg bi1yZXNpZHVlcyBieSB0aGUgd29yZCBiYXNlLCBhbGxvd2luZyBjaGVhcCBIZW5zZWwgcmVk dWN0aW9ucyBtb2Qgbi4KIAotICAgIFRoZSBHTVAgY29kZSB1c2VzIGFuIGFsZ29yaXRobSB0 aGF0IGNhbiBiZSBjb25zaWRlcmFibHkgc2xvd2VyOwotICAgIGZvciBleGFtcGxlLCBvbiBh IGNpcmNhLTIwMTcgSW50ZWwgWGVvbiBTaWx2ZXIgNDExNiwgZmFjdG9yaW5nCi0gICAgMl57 MTI3fS0zIHRha2VzIGFib3V0IDUwIG1zIHdpdGggdGhlIHR3by13b3JkIGFsZ29yaXRobSBi dXQgd291bGQKLSAgICB0YWtlIGFib3V0IDc1MCBtcyB3aXRoIHRoZSBHTVAgY29kZS4KKyAg ICBUaGUgR01QIGNvZGUgdXNlcyBhbiBhbGdvcml0aG0gdGhhdCBjYW4gYmUgY29uc2lkZXJh Ymx5IHNsb3dlci4KIAogICBJbXByb3ZlbWVudHM6CiAKLSAgICAqIFVzZSBtb2R1bGFyIGlu dmVyc2VzIGFsc28gZm9yIGV4YWN0IGRpdmlzaW9uIGluIHRoZSBMdWNhcyBjb2RlLCBhbmQK LSAgICAgIGVsc2V3aGVyZS4gIEEgcHJvYmxlbSBpcyB0byBsb2NhdGUgdGhlIGludmVyc2Vz IG5vdCBmcm9tIGFuIGluZGV4LCBidXQKLSAgICAgIGZyb20gYSBwcmltZS4gIFdlIG1pZ2h0 IGluc3RlYWQgY29tcHV0ZSB0aGUgaW52ZXJzZSBvbi10aGUtZmx5LgorICAgICogVXNlIG1v ZHVsYXIgaW52ZXJzZXMgYWxzbyBmb3IgZXhhY3QgZGl2aXNpb24uICBBIHByb2JsZW0gaXMg dG8KKyAgICAgIGxvY2F0ZSB0aGUgaW52ZXJzZXMgbm90IGZyb20gYW4gaW5kZXgsIGJ1dCBm cm9tIGEgcHJpbWUuCisgICAgICBXZSBtaWdodCBpbnN0ZWFkIGNvbXB1dGUgdGhlIGludmVy c2Ugb24tdGhlLWZseS4KIAogICAgICogVHVuZSB0cmlhbCBkaXZpc2lvbiB0YWJsZSBzaXpl IChub3QgZm9yZ2V0dGluZyB0aGF0IHRoaXMgaXMgYSBzdGFuZGFsb25lCiAgICAgICBwcm9n cmFtIHdoZXJlIHRoZSB0YWJsZSB3aWxsIGJlIHJlYWQgZnJvbSBzZWNvbmRhcnkgc3RvcmFn ZSBmb3IKICAgICAgIGVhY2ggaW52b2NhdGlvbikuCiAKLSAgICAqIEltcGxlbWVudCBsZXNz IG5haXZlIHBvd20sIHVzaW5nIGstYXJ5IGV4cG9uZW50aWF0aW9uIGZvciBrID0gMyBvcgot ICAgICAgcGVyaGFwcyBrID0gNC4KLQotICAgICogVHJ5IHRvIHNwZWVkIHRyaWFsIGRpdmlz aW9uIGNvZGUgZm9yIHNpbmdsZSB3aWRlX3VpbnQgbnVtYmVycywgaS5lLiwgdGhlCi0gICAg ICBjb2RlIHVzaW5nIERJVkJMT0NLLiAgSXQgY3VycmVudGx5IHJ1bnMgYXQgMiBjeWNsZXMg cGVyIHByaW1lIChJbnRlbCBTQlIsCisgICAgKiBUcnkgdG8gc3BlZWQgdHJpYWwgZGl2aXNp b24gY29kZSBmb3Igc2luZ2xlIHdvcmQgbnVtYmVycywgaS5lLiwgdGhlCisgICAgICBjb2Rl IHVzaW5nIGRpdmJsb2NrLiAgSXQgY3VycmVudGx5IHJ1bnMgYXQgMiBjeWNsZXMgcGVyIHBy aW1lIChJbnRlbCBTQlIsCiAgICAgICBJQlIpLCAzIGN5Y2xlcyBwZXIgcHJpbWUgKEFNRCBT dGFycykgYW5kIDUgY3ljbGVzIHBlciBwcmltZSAoQU1EIEJEKSB3aGVuCiAgICAgICB1c2lu ZyBnY2MgNC42IGFuZCA0LjcuICBTb21lIHNvZnR3YXJlIHBpcGVsaW5pbmcgc2hvdWxkIGhl bHA7IDEsIDIsIGFuZCA0CiAgICAgICByZXNwZWN0aXZlbHkgY3ljbGVzIG91Z2h0IHRvIGJl IHBvc3NpYmxlLgpAQCAtODAsMjYgKzcyLDkgQEAKICAgICAqIFRoZSByZWRjaWZ5IGZ1bmN0 aW9uIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZCBieSB1c2luZyAocGxhaW4gRXVjbGlkZWFu KQogICAgICAgcHJlLWludmVyc2lvbiAoc3VjaCBhcyBHTVAncyBpbnZlcnRfbGltYikgYW5k IHVkaXZfcXJubmRfcHJlaW52IChmcm9tCiAgICAgICBHTVAncyBnbXAtaW1wbC5oKS4gIFRo ZSByZWRjaWZ5MiBmdW5jdGlvbiBjb3VsZCBiZSB2YXN0bHkgaW1wcm92ZWQgdXNpbmcKLSAg ICAgIHNpbWlsYXIgbWV0aG9kcy4gIFRoZXNlIGZ1bmN0aW9ucyBjdXJyZW50bHkgZG9taW5h dGUgcnVuIHRpbWUgd2hlbiB1c2luZwotICAgICAgdGhlIC13IG9wdGlvbi4KKyAgICAgIHNp bWlsYXIgbWV0aG9kcy4KICovCiAKLS8qIFdoZXRoZXIgdG8gcmVjdXJzaXZlbHkgZmFjdG9y IHRvIHByb3ZlIHByaW1hbGl0eSwKLSAgIG9yIHJ1biBmYXN0ZXIgcHJvYmFiaWxpc3RpYyB0 ZXN0cy4gICovCi0jaWZuZGVmIFBST1ZFX1BSSU1BTElUWQotIyBkZWZpbmUgUFJPVkVfUFJJ TUFMSVRZIDEKLSNlbmRpZgotCi0vKiBGYXN0ZXIgZm9yIGNlcnRhaW4gcmFuZ2VzIGJ1dCBs ZXNzIGdlbmVyYWwuICAqLwotI2lmbmRlZiBVU0VfU1FVRk9GCi0jIGRlZmluZSBVU0VfU1FV Rk9GIDAKLSNlbmRpZgotCi0vKiBPdXRwdXQgU1FVRk9GIHN0YXRpc3RpY3MuICAqLwotI2lm bmRlZiBTVEFUX1NRVUZPRgotIyBkZWZpbmUgU1RBVF9TUVVGT0YgMAotI2VuZGlmCi0KIAog I2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPGdldG9wdC5oPgpAQCAtMTA5LDcgKzg0 LDYgQEAKIAogI2luY2x1ZGUgInN5c3RlbS5oIgogI2luY2x1ZGUgImFzc3VyZS5oIgotI2lu Y2x1ZGUgImMtY3R5cGUuaCIKICNpbmNsdWRlICJmdWxsLXdyaXRlLmgiCiAjaW5jbHVkZSAi cXVvdGUuaCIKICNpbmNsdWRlICJyZWFkdG9rZW5zLmgiCkBAIC0xMjQsNTYgKzk4LDYzIEBA CiAgIHByb3Blcl9uYW1lX2xpdGUgKCJOaWVscyBNb2xsZXIiLCAiTmllbHMgTVwzMDNcMjY2 bGxlciIpCiAKIC8qIFRva2VuIGRlbGltaXRlcnMgd2hlbiByZWFkaW5nIGZyb20gYSBmaWxl LiAgKi8KLSNkZWZpbmUgREVMSU0gIlxuXHQgIgotCi0vKiBfX2ludDEyOCBpcyBleHBlcmlt ZW50YWw7IHRvIHVzZSBpdCwgY29tcGlsZSB3aXRoIC1EVVNFX0lOVDEyOC4gICovCi0jaWZu ZGVmIFVTRV9JTlQxMjgKLSMgZGVmaW5lIFVTRV9JTlQxMjggZmFsc2UKLSNlbmRpZgotCi0v KiBUeXBlZGVmcyBhbmQgbWFjcm9zIHJlbGF0ZWQgdG8gYW4gdW5zaWduZWQgdHlwZSB0aGF0 IGlzIG5vIG5hcnJvd2VyCi0gICB0aGFuIDMyIGJpdHMgYW5kIG5vIG5hcnJvd2VyIHRoYW4g dW5zaWduZWQgaW50LiAgRm9yIGVmZmljaWVuY3ksCi0gICB1c2UgdGhlIHdpZGVzdCBoYXJk d2FyZS1zdXBwb3J0ZWQgdHlwZS4gICovCi0jaWYgVVNFX0lOVDEyOAotdHlwZWRlZiB1bnNp Z25lZCBfX2ludDEyOCB3aWRlX3VpbnQ7Ci10eXBlZGVmIF9faW50MTI4IHdpZGVfaW50Owot IyBkZWZpbmUgV19UWVBFX1NJWkUgMTI4CitzdGF0aWMgY2hhciBjb25zdCBERUxJTVtdID0g IlxuXHQgIjsKKworLyogR01QIHVzZXMgdGhlIHVuc2lnbmVkIGludGVnZXIgdHlwZSBtcF9s aW1iX3QgYXMgaXRzIHdvcmQgaW4KKyAgIG11bHRpcHJlY2lzaW9uIGFyaXRobWV0aWMuICBU aGlzIGNvZGUgdXNlcyB0aGUgc2FtZSB3b3JkIGZvciBzaW5nbGUKKyAgIGFuZCBkb3VibGUg cHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gIEFsdGhvdWdoIHByZXZpb3VzCisgICB2 ZXJzaW9ucyBvZiB0aGlzIGNvZGUgdXNlZCB1aW50bWF4X3QgZm9yIHNpbmdsZSBhbmQgZG91 YmxlCisgICBwcmVjaXNpb24sIHRoYXQgaW50cm9kdWNlZCBvcHBvcnR1bml0aWVzIGZvciBi dWdzIGFuZCB3YXMgbm90IHdvcnRoCisgICB0aGUgaGFzc2xlLCBhcyBtcF9saW1iX3QgYW5k IHVpbnRtYXhfdCBhcmUgaW52YXJpYWJseSB0aGUgc2FtZSBvbgorICAgNjQtYml0IHBsYXRm b3JtcywgYW5kIDMyLWJpdCBwbGF0Zm9ybXMgYXJlIGxlc3MgaW1wb3J0YW50IG5vdy4KKwor ICAgQWx0aG91Z2ggR01QIGNhbiBiZSBidWlsdCB3aXRoIEdNUF9OVU1CX0JJVFMgPCBHTVBf TElNQl9CSVRTLAorICAgc28gdGhhdCBzb21lIGhpZ2gtb3JkZXIgYml0cyBvZiBhIHdvcmQg YXJlIG5vdCB1c2VkLCBkbyBub3QKKyAgIGRvIHRoaXMgaW4gc2luZ2xlIGFuZCBkb3VibGUg cHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4KKyAgIEluc3RlYWQsIGFsd2F5cyB1c2Ug dGhlIGZ1bGwgd29yZC4gICovCisKKy8qIFRoZSB3b3JkIHNpemUgaW4gYml0cy4KKyAgIElu IHRoZSByZXN0IG9mIHRoaXMgZmlsZSdzIGNvbW1lbnRzLCBCID0gMl5XX1RZUEVfU0laRSBp cyB0aGUgYmFzZSwKKyAgIGFuZCB0aGUgbm90YXRpb24gKGExLGEwKSBzdGFuZHMgZm9yIEIq YTEgKyBhMC4gICovCisjaWZkZWYgR01QX0xJTUJfQklUUworIyBkZWZpbmUgV19UWVBFX1NJ WkUgR01QX0xJTUJfQklUUwogI2Vsc2UKLXR5cGVkZWYgdWludG1heF90IHdpZGVfdWludDsK LXR5cGVkZWYgaW50bWF4X3Qgd2lkZV9pbnQ7Ci0jIGRlZmluZSBXX1RZUEVfU0laRSBVSU5U TUFYX1dJRFRICisvKiBBbiBvbGRlciBHTVAsIG9yIG1pbmktZ21wOyBndWVzcyB0aGUgdXN1 YWwgdmFsdWUuICAqLworIyBkZWZpbmUgV19UWVBFX1NJWkUgVUxPTkdfV0lEVEgKICNlbmRp ZgotI2RlZmluZSBXSURFX1VJTlRfTUFYICgod2lkZV91aW50KSAtMSkKKworLyogVGhlIG1h eGltdW0gdmFsdWUgb2YgYSB3b3JkLiAgKi8KKyNkZWZpbmUgTVBfTElNQl9NQVggKChtcF9s aW1iX3QpIC0xKQorCisvKiBDaGVjayBXX1RZUEVfU0laRSdzIHZhbHVlLCBhcyBpdCBtaWdo dCBiZSBhIGd1ZXNzLiAgKi8KK3N0YXRpY19hc3NlcnQgKE1QX0xJTUJfTUFYID4+IChXX1RZ UEVfU0laRSAtIDEpID09IDEpOworCisvKiBDaGVjayB0aGF0IHRoZSBidWlsZGVyIGRpZG4n dCBzcGVjaWZ5IHNvbWV0aGluZyBwZXJ2ZXJzZSBsaWtlCisgICAiLURNSU5JX0dNUF9MSU1C X1RZUEU9c2hvcnQgLURXX1RZUEVfU0laRT1VU0hSVF9XSURUSCIuCisgICBUaGlzIGNvdWxk IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgZHVlIHRvIHNpZ25lZCBpbnRlZ2VyCisg ICBvdmVyZmxvdyBpZiBhIHdvcmQgcHJvbW90ZXMgdG8gaW50LiAgKi8KK3N0YXRpY19hc3Nl cnQgKElOVF9NQVggPCBNUF9MSU1CX01BWCk7CiAKICNpZm5kZWYgVVNFX0xPTkdMT05HX0gK LS8qIFdpdGggdGhlIHdheSB3ZSB1c2UgbG9uZ2xvbmcuaCwgaXQncyBvbmx5IHNhZmUgdG8g dXNlCi0gICB3aGVuIFVXdHlwZSA9IFVIV3R5cGUsIGFzIHRoZXJlIHdlcmUgdmFyaW91cyBj YXNlcwotICAgKGFzIGNhbiBiZSBzZWVuIGluIHRoZSBoaXN0b3J5IGZvciBsb25nbG9uZy5o KSB3aGVyZQotICAgZm9yIGV4YW1wbGUsIF9MUDY0IHdhcyByZXF1aXJlZCB0byBlbmFibGUg V19UWVBFX1NJWkU9PTY0IGNvZGUsCi0gICB0byBhdm9pZCBjb21waWxlIHRpbWUgb3IgcnVu IHRpbWUgaXNzdWVzLiAgKi8KLSMgZGVmaW5lIFVTRV9MT05HTE9OR19IIChXX1RZUEVfU0la RSA9PSBVTE9OR19XSURUSCkKKyMgaWYgKGRlZmluZWQgSU5UMzJfTUFYICYmIGRlZmluZWQg VUlOVDMyX01BWCBcCisgICAgICAmJiBkZWZpbmVkIElOVDY0X01BWCAmJiBkZWZpbmVkIFVJ TlQ2NF9NQVgpCisjICBkZWZpbmUgVVNFX0xPTkdMT05HX0ggdHJ1ZQorIyBlbHNlCisjICBk ZWZpbmUgVVNFX0xPTkdMT05HX0ggZmFsc2UKKyMgZW5kaWYKICNlbmRpZgogCiAjaWYgVVNF X0xPTkdMT05HX0gKIAogLyogTWFrZSBkZWZpbml0aW9ucyBmb3IgbG9uZ2xvbmcuaCB0byBt YWtlIGl0IGRvIHdoYXQgaXQgY2FuIGRvIGZvciB1cyAqLwogCi0jIGRlZmluZSBVV3R5cGUg IHdpZGVfdWludAotIyBkZWZpbmUgVUhXdHlwZSB1bnNpZ25lZCBsb25nIGludAordHlwZWRl ZiBtcF9saW1iX3QgVVd0eXBlOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUhXdHlwZTsKICMg dW5kZWYgVURXdHlwZQotIyBpZiBIQVZFX0FUVFJJQlVURV9NT0RFCi10eXBlZGVmIHVuc2ln bmVkIGludCBVUUl0eXBlICAgIF9fYXR0cmlidXRlX18gKChtb2RlIChRSSkpKTsKLXR5cGVk ZWYgICAgICAgICAgaW50IFNJdHlwZSAgICAgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKFNJKSkp OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVVNJdHlwZSAgICBfX2F0dHJpYnV0ZV9fICgobW9k ZSAoU0kpKSk7Ci10eXBlZGVmICAgICAgICAgIGludCBESXR5cGUgICAgIF9fYXR0cmlidXRl X18gKChtb2RlIChESSkpKTsKLXR5cGVkZWYgdW5zaWduZWQgaW50IFVESXR5cGUgICAgX19h dHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOwotIyBlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGNo YXIgVVFJdHlwZTsKLXR5cGVkZWYgICAgICAgICAgbG9uZyBTSXR5cGU7Ci10eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IFVTSXR5cGU7Ci10eXBlZGVmIGxvbmcgbG9uZyBpbnQgREl0eXBl OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVESXR5cGU7Ci0jIGVuZGlmCit0 eXBlZGVmIGludDMyX3QgU0l0eXBlOwordHlwZWRlZiB1aW50MzJfdCBVU0l0eXBlOwordHlw ZWRlZiBpbnQ2NF90IERJdHlwZTsKK3R5cGVkZWYgdWludDY0X3QgVURJdHlwZTsKICMgZGVm aW5lIExPTkdMT05HX1NUQU5EQUxPTkUgICAgIC8qIERvbid0IHJlcXVpcmUgR01QJ3MgbG9u Z2xvbmcuaCBtZGVwIGZpbGVzICovCiAKIC8qIEZJWE1FIG1ha2UgbG9uZ2xvbmcuaCByZWFs bHkgc3RhbmRhbG9uZSwgc28gdGhhdCBBU1NFUlQsIF9fR01QX0RFQ0xTUEVDCkBAIC0xODQs MzEgKzE2NSwzMSBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgVURJdHlwZTsK ICMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgZGVmaW5lZCBfX0dOVUNfTUlOT1JfXwogIyAg IGRlZmluZSBfX0dNUF9HTlVDX1BSRVJFUShhLCBiKSAoKGEpIDwgX19HTlVDX18gKyAoKGIp IDw9IF9fR05VQ19NSU5PUl9fKSkKICMgIGVsc2UKLSMgICBkZWZpbmUgX19HTVBfR05VQ19Q UkVSRVEoYSwgYikgMAorIyAgIGRlZmluZSBfX0dNUF9HTlVDX1BSRVJFUShhLCBiKSBmYWxz ZQogIyAgZW5kaWYKICMgZW5kaWYKIAogLyogbG9uZ2xvbmcuaCB1c2VzIHRoZXNlIG1hY3Jv cyBvbmx5IGluIGNlcnRhaW4gc3lzdGVtIGNvbXBpbGVyIGNvbWJpbmF0aW9ucy4KICAgIEVu c3VyZSB1c2FnZSB0byBwYWNpZnkgLVd1bnVzZWQtbWFjcm9zLiAgKi8KLSMgaWYgKGRlZmlu ZWQgQVNTRVJUIHx8IGRlZmluZWQgVUhXdHlwZSBcCi0gICAgICB8fCBkZWZpbmVkIF9fR01Q X0RFQ0xTUEVDIHx8IGRlZmluZWQgX19HTVBfR05VQ19QUkVSRVEpCisjIGlmIGRlZmluZWQg QVNTRVJUIHx8IGRlZmluZWQgX19HTVBfREVDTFNQRUMgfHwgZGVmaW5lZCBfX0dNUF9HTlVD X1BSRVJFUQogIyBlbmRpZgogCiAjIGlmIF9BUkNIX1BQQwogIyAgZGVmaW5lIEhBVkVfSE9T VF9DUFVfRkFNSUxZX3Bvd2VycGMgMQogIyBlbmRpZgogIyBpbmNsdWRlICJsb25nbG9uZy5o IgotCi0jZWxzZSAvKiBub3QgVVNFX0xPTkdMT05HX0ggKi8KLQotIyBkZWZpbmUgX19sbF9C ICgod2lkZV91aW50KSAxIDw8IChXX1RZUEVfU0laRSAvIDIpKQotIyBkZWZpbmUgX19sbF9s b3dwYXJ0KHQpICAoKHdpZGVfdWludCkgKHQpICYgKF9fbGxfQiAtIDEpKQotIyBkZWZpbmUg X19sbF9oaWdocGFydCh0KSAoKHdpZGVfdWludCkgKHQpID4+IChXX1RZUEVfU0laRSAvIDIp KQotCiAjZW5kaWYKIAotLyogMiozKjUqNyoxMS4uLioxMDEgaXMgMTI4IGJpdHMsIGFuZCBo YXMgMjYgcHJpbWUgZmFjdG9ycyAqLwotI2RlZmluZSBNQVhfTkZBQ1RTIDI2CisvKiAyKjMq NSo3KjExLi4uKjEwMSBmaXRzIGluIDEyOCBiaXRzLCBhbmQgaGFzIDI2IHByaW1lIGZhY3Rv cnMuCisgICBUaGlzIGNvZGUgY2FuIGJlIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgYXMgbmVl ZGVkOyBzaG93IGFzIGFuIGV4YW1wbGUKKyAgIDIqMyo1KjcqMTEuLi4qMTkzIHdoaWNoIGZp dHMgaW4gMjU3IGJpdHMsIGFuZCBoYXMgNDQgcHJpbWUgZmFjdG9ycy4gICovCisjaWYgMiAq IFdfVFlQRV9TSVpFIDw9IDEyOAorZW51bSB7IE1BWF9ORkFDVFMgPSAyNiB9OworI2VsaWYg MiAqIFdfVFlQRV9TSVpFIDw9IDI1NworZW51bSB7IE1BWF9ORkFDVFMgPSA0NCB9OworI2Vs c2UKKyMgZXJyb3IgImNvbmZpZ3VyYXRpb24gaGFzIGEgd2lkZSB3b3JkOyBwbGVhc2UgdXBk YXRlIE1BWF9ORkFDVFMgZGVmaW5pdGlvbiIKKyNlbmRpZgogCiBlbnVtCiB7CkBAIC0yMjcs NzkgKzIwOCwxMjkgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ19vcHRpb25z W10gPQogLyogSWYgdHJ1ZSwgdXNlIHBeZSBvdXRwdXQgZm9ybWF0LiAgKi8KIHN0YXRpYyBi b29sIHByaW50X2V4cG9uZW50czsKIAotLyogVGhpcyByZXByZXNlbnRzIGFuIHVuc2lnbmVk IGludGVnZXIgdHdpY2UgYXMgd2lkZSBhcyB3aWRlX3VpbnQuICAqLwotdHlwZWRlZiBzdHJ1 Y3QgeyB3aWRlX3VpbnQgdXVbMl07IH0gdXVpbnQ7CisvKiBUaGlzIHJlcHJlc2VudHMgYW4g dW5zaWduZWQgaW50ZWdlciB0d2ljZSBhcyB3aWRlIGFzIGEgd29yZC4gICovCit0eXBlZGVm IHN0cnVjdCB7IG1wX2xpbWJfdCB1dVsyXTsgfSB1dWludDsKIAogLyogQWNjZXNzb3JzIGFu ZCBjb25zdHJ1Y3RvcnMgZm9yIHRoZSB0eXBlLiAgUHJvZ3JhbXMgc2hvdWxkIG5vdAogICAg YWNjZXNzIHRoZSB0eXBlJ3MgaW50ZXJuYWxzIGRpcmVjdGx5LCBpbiBjYXNlIHNvbWUgZnV0 dXJlIHZlcnNpb24KICAgIHJlcGxhY2VzIHRoZSB0eXBlIHdpdGggdW5zaWduZWQgX19pbnQy NTYgb3Igd2hhdGV2ZXIuICAqLwotc3RhdGljIHdpZGVfdWludCBsbyAodXVpbnQgdSkgeyBy ZXR1cm4gdS51dVswXTsgfQotc3RhdGljIHdpZGVfdWludCBoaSAodXVpbnQgdSkgeyByZXR1 cm4gdS51dVsxXTsgfQotc3RhdGljIHZvaWQgaGlzZXQgKHV1aW50ICp1LCB3aWRlX3VpbnQg aGkpIHsgdS0+dXVbMV0gPSBoaTsgfQorc3RhdGljIG1wX2xpbWJfdCBsbyAodXVpbnQgdSkg eyByZXR1cm4gdS51dVswXTsgfQorc3RhdGljIG1wX2xpbWJfdCBoaSAodXVpbnQgdSkgeyBy ZXR1cm4gdS51dVsxXTsgfQorc3RhdGljIHZvaWQgaGlzZXQgKHV1aW50ICp1LCBtcF9saW1i X3QgaGkpIHsgdS0+dXVbMV0gPSBoaTsgfQorc3RhdGljIGJvb2wgaGlfaXNfc2V0ICh1dWlu dCBjb25zdCAqcHUpIHsgcmV0dXJuIHB1LT51dVsxXSAhPSAwOyB9CiBzdGF0aWMgdm9pZAot dXVzZXQgKHdpZGVfdWludCAqcGhpLCB3aWRlX3VpbnQgKnBsbywgdXVpbnQgdXUpCit1dXNl dCAobXBfbGltYl90ICpwaGksIG1wX2xpbWJfdCAqcGxvLCB1dWludCB1dSkKIHsKICAgKnBo aSA9IGhpICh1dSk7CiAgICpwbG8gPSBsbyAodXUpOwogfQogc3RhdGljIHV1aW50Ci1tYWtl X3V1aW50ICh3aWRlX3VpbnQgaGksIHdpZGVfdWludCBsbykKK21ha2VfdXVpbnQgKG1wX2xp bWJfdCBoaSwgbXBfbGltYl90IGxvKQogewogICByZXR1cm4gKHV1aW50KSB7e2xvLCBoaX19 OwogfQogCi0vKiBCSUdfUE9XRVJfT0ZfMTAgaXMgYSBwb3NpdGl2ZSBwb3dlciBvZiAxMCB0 aGF0IGRvZXMgbm90IGV4Y2VlZCBXSURFX1VJTlRfTUFYLgorLyogQklHX1BPV0VSX09GXzEw IGlzIGEgcG9zaXRpdmUgcG93ZXIgb2YgMTAgdGhhdCBmaXRzIGluIGEgd29yZC4KICAgIFRo ZSBsYXJnZXIgaXQgaXMsIHRoZSBtb3JlIGVmZmljaWVudCB0aGUgY29kZSB3aWxsIGxpa2Vs eSBiZS4KICAgIExPR19CSUdfUE9XRVJfT0ZfMTAgPSBsb2cgKEJJR19QT1dFUl9PRl8xMCku ICAqLwotI2lmIFdfVFlQRV9TSVpFIDwgNjQKLSMgZXJyb3IgInBsYXRmb3JtIGRvZXMgbm90 IHN1cHBvcnQgNjQtYml0IGludGVnZXJzIgorI2lmIFdfVFlQRV9TSVpFIDwgNAorIyBlcnJv ciAiQ29uZmlndXJhdGlvbiBlcnJvcjsgcGxhdGZvcm0gd29yZCBpcyBpbXBvc3NpYmx5IG5h cnJvdyIKKyNlbGlmIFdfVFlQRV9TSVpFIDwgMzAKKy8qIEFuIHVudXN1YWxseSBuYXJyb3cg d29yZC4gICovCitzdGF0aWMgbXBfbGltYl90IGNvbnN0IEJJR19QT1dFUl9PRl8xMCA9IDEw OworZW51bSB7IExPR19CSUdfUE9XRVJfT0ZfMTAgPSAxIH07CisjZWxpZiBXX1RZUEVfU0la RSA8IDY0CisvKiBBbG1vc3Qgc3VyZWx5IGEgMzItYml0IHdvcmQuICAqLworc3RhdGljIG1w X2xpbWJfdCBjb25zdCBCSUdfUE9XRVJfT0ZfMTAgPSAxMDAwMDAwMDAwOworZW51bSB7IExP R19CSUdfUE9XRVJfT0ZfMTAgPSA5IH07CiAjZWxpZiBXX1RZUEVfU0laRSA8IDEyOAotLyog QSBtYWluc3RyZWFtIHBsYXRmb3Jtcywgd2l0aCBhdC1sZWFzdC02NC1iaXQgdWludG1heF90 LiAgKi8KLXN0YXRpYyB3aWRlX3VpbnQgY29uc3QgQklHX1BPV0VSX09GXzEwID0gMTAwMDAw MDAwMDAwMDAwMDAwMDBsbHU7CisvKiBBbG1vc3Qgc3VyZWx5IGEgNjQtYml0IHdvcmQuICAq Lworc3RhdGljIG1wX2xpbWJfdCBjb25zdCBCSUdfUE9XRVJfT0ZfMTAgPSAxMDAwMDAwMDAw MDAwMDAwMDAwMGxsdTsKIGVudW0geyBMT0dfQklHX1BPV0VSX09GXzEwID0gMTkgfTsKICNl bHNlCi0vKiBJZiBidWlsdCB3aXRoIC1EVVNFX0lOVDEyOCwgYSBwbGF0Zm9ybSB0aGF0IHN1 cHBvcnRzIF9faW50MTI4OyBvdGhlcndpc2UsCi0gICBhIHNvLWZhci1vbmx5LXRoZW9yZXRp Y2FsIHBsYXRmb3JtIHdpdGggYXQtbGVhc3QtMTI4LWJpdCB1aW50bWF4X3QuCi0gICBUaGlz IGlzIGZvciBwZXJmb3JtYW5jZTsgdGhlIDY0LWJpdCBtYWluc3RyZWFtIGNvZGUgd2lsbCBz dGlsbCB3b3JrLiAgKi8KLXN0YXRpYyB3aWRlX3VpbnQgY29uc3QgQklHX1BPV0VSX09GXzEw ID0KLSAgKHdpZGVfdWludCkgMTAwMDAwMDAwMDAwMDAwMDAwMDBsbHUgKiAxMDAwMDAwMDAw MDAwMDAwMDAwMGxsdTsKKy8qIEFuIHVudXN1YWxseSB3aWRlIHdvcmQuICAqLworc3RhdGlj IG1wX2xpbWJfdCBjb25zdCBCSUdfUE9XRVJfT0ZfMTAgPQorICAobXBfbGltYl90KSAxMDAw MDAwMDAwMDAwMDAwMDAwMGxsdSAqIDEwMDAwMDAwMDAwMDAwMDAwMDAwbGx1OwogZW51bSB7 IExPR19CSUdfUE9XRVJfT0ZfMTAgPSAzOCB9OwogI2VuZGlmCiAKKy8qIENoZWNrIHRoYXQg c3RydWN0IGZhY3RvcnMgY2FuIHVzZSB1bnNpZ25lZCBjaGFyIHRvIHJlY29yZCBhIHV1aW50 J3MKKyAgIHByaW1lIGZhY3RvcidzIG11bHRpcGxpY2l0eSwgd2hpY2ggaXMgYXQgbW9zdCAy ICogV19UWVBFX1NJWkUgLSAxLiAgKi8KK3N0YXRpY19hc3NlcnQgKDIgKiBXX1RZUEVfU0la RSAtIDEgPD0gVUNIQVJfTUFYKTsKKworLyogTGlrZXdpc2UgZm9yIHJlY29yZGluZyB0aGUg bnVtYmVyIG9mIHByaW1lIGZhY3RvcnMuICAqLworc3RhdGljX2Fzc2VydCAoTUFYX05GQUNU UyA8PSBVQ0hBUl9NQVgpOworCisvKiBQcmltZSBmYWN0b3JzIG9mIGEgdXVpbnQuICBBdCBt b3N0IG9uZSBpcyBhIHV1aW50LiAgKi8KIHN0cnVjdCBmYWN0b3JzCiB7Ci0gIHV1aW50IHBs YXJnZTsgLyogQ2FuIGhhdmUgYSBzaW5nbGUgbGFyZ2UgZmFjdG9yICovCi0gIHdpZGVfdWlu dCAgICAgcFtNQVhfTkZBQ1RTXTsKKyAgLyogSWYgUExBUkdFLnV1WzFdIGlzIG5vbnplcm8s IFBMQVJHRSBpcyBhIGRvdWJsZS13b3JkIHByaW1lIGZhY3RvcgorICAgICB3aXRoIG11bHRp cGxpY2l0eSAxOyBvdGhlcndpc2UsIFBMQVJHRSBpcyBub3QgYSBmYWN0b3IgYW5kCisgICAg IFBMQVJHRS51dVswXSBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQuICAqLworICB1dWludCBw bGFyZ2U7CisKKyAgLyogRGlzdGluY3Qgc2luZ2xlLXdvcmQgcHJpbWUgZmFjdG9ycywgdGhl aXIgbXVsdGlwbGljaXRpZXMsCisgICAgIGFuZCB0aGVpciBudW1iZXIuICAqLworICBtcF9s aW1iX3QgICAgIHBbTUFYX05GQUNUU107CiAgIHVuc2lnbmVkIGNoYXIgZVtNQVhfTkZBQ1RT XTsKICAgdW5zaWduZWQgY2hhciBuZmFjdG9yczsKIH07CiAKKy8qIEFuIG1weidzIHByaW1l IGZhY3RvciBhbmQgbXVsdGlwbGljaXR5LiAgKi8KK3N0cnVjdCBtcF9mYWN0b3IKK3sKKyAg bXB6X3QgcDsKKyAgbXBfYml0Y250X3QgZTsKK307CisKKy8qIFByaW1lIGZhY3RvcnMgb2Yg YW4gbXB6X3QuICAqLwogc3RydWN0IG1wX2ZhY3RvcnMKIHsKLSAgbXB6X3QgICAgICAgICAg ICAgKnA7Ci0gIHVuc2lnbmVkIGxvbmcgaW50ICplOworICAvKiBBIHZlY3RvciBvZiBkaXN0 aW5jdCBwcmltZSBmYWN0b3JzLCBhIGNvdW50IG9mIHRoZSBmYWN0b3JzLAorICAgICBhbmQg dGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgc2xvdHMgaW4gdGhlIHZlY3Rvci4gICovCisgIHN0 cnVjdCBtcF9mYWN0b3IgKmY7CiAgIGlkeF90IG5mYWN0b3JzOwogICBpZHhfdCBuYWxsb2M7 CiB9OwogCi1zdGF0aWMgdm9pZCBmYWN0b3IgKHdpZGVfdWludCwgd2lkZV91aW50LCBzdHJ1 Y3QgZmFjdG9ycyAqKTsKK3N0YXRpYyB2b2lkIGZhY3RvciAoc3RydWN0IGZhY3RvcnMgKiwg bXBfbGltYl90LCBtcF9saW1iX3QpOworc3RhdGljIHZvaWQgZmFjdG9yX3VwIChzdHJ1Y3Qg ZmFjdG9ycyAqLCBtcF9saW1iX3QsIG1wX2xpbWJfdCwgaWR4X3QpOwogCisvKiBTZXQgKHcx LHcwKSA9IHUgKiB2LiAgKi8KKyNpZm5kZWYgdW11bF9wcG1tCisvKiBTcGVlZCB0aGluZ3Mg dXAgaWYgdGhlcmUgaXMgYW4gdW5zaWduZWQgdHlwZSB1dXJvb21fdCB0aGF0IGlzIHdpZGUK KyAgIGVub3VnaCB0byBob2xkIHR3byB3b3Jkcy4gICovCisjIGlmIFdfVFlQRV9TSVpFIDw9 IFVJTlRNQVhfV0lEVEggLyAyCisjICBkZWZpbmUgdXVyb29tX3QgdWludG1heF90CisjIGVs aWYgV19UWVBFX1NJWkUgPD0gNjQgJiYgZGVmaW5lZCBfX1NJWkVPRl9JTlQxMjhfXworIyAg ZGVmaW5lIHV1cm9vbV90IHVuc2lnbmVkIF9faW50MTI4CisjIGVuZGlmCisjIGlmZGVmIHV1 cm9vbV90CisjICBkZWZpbmUgdW11bF9wcG1tKHcxLCB3MCwgdSwgdikJCVwKKyAgICBkbyB7 CQkJCQlcCisgICAgICB1dXJvb21fdCBfdSA9IHUsIF93ID0gX3UgKiAodik7CQlcCisgICAg ICAodzEpID0gX3cgPj4gV19UWVBFX1NJWkU7CQkJXAorICAgICAgKHcwKSA9IF93OwkJCQlc CisgICAgfSB3aGlsZSAoZmFsc2UpCisjIGVuZGlmCisjZW5kaWYKICNpZm5kZWYgdW11bF9w cG1tCitzdGF0aWMgbXBfbGltYl90IGNvbnN0IF9fbGxfQiA9IChtcF9saW1iX3QpIDEgPDwg KFdfVFlQRV9TSVpFIC8gMik7CitzdGF0aWMgbXBfbGltYl90IF9fbGxfbG93cGFydCAobXBf bGltYl90IHQpIHsgcmV0dXJuIHQgJiAoX19sbF9CIC0gMSk7IH0KK3N0YXRpYyBtcF9saW1i X3QgX19sbF9oaWdocGFydCAobXBfbGltYl90IHQpIHsgcmV0dXJuIHQgPj4gKFdfVFlQRV9T SVpFIC8gMik7IH0KICMgZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICB3aWRlX3VpbnQgX194MCwgX194MSwgX194MiwgX194MzsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICB1bnNpZ25lZCBsb25nIGludCBfX3VsLCBfX3Zs LCBfX3VoLCBfX3ZoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aWRlX3Vp bnQgX191ID0gKHUpLCBfX3YgPSAodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBtcF9saW1iX3QgX191ID0gdSwgX192ID0gdiwJCQkJCQlcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgX191bCA9IF9fbGxfbG93cGFydCAoX191KTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX191aCA9IF9fbGxf aGlnaHBhcnQgKF9fdSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgX192bCA9IF9fbGxfbG93cGFydCAoX192KTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX192aCA9IF9fbGxfaGlnaHBhcnQgKF9f dik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBf X3VsID0gX19sbF9sb3dwYXJ0IChfX3UpLAkJCQkJXAorICAgICAgX191aCA9IF9fbGxfaGln aHBhcnQgKF9fdSksCQkJCQlcCisgICAgICBfX3ZsID0gX19sbF9sb3dwYXJ0IChfX3YpLAkJ CQkJXAorICAgICAgX192aCA9IF9fbGxfaGlnaHBhcnQgKF9fdiksCQkJCQlcCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgX194MCA9ICh3aWRlX3VpbnQpIF9fdWwgKiBfX3ZsOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX194MSA9ICh3aWRlX3Vp bnQpIF9fdWwgKiBfX3ZoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgX194MiA9ICh3aWRlX3VpbnQpIF9fdWggKiBfX3ZsOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgX194MyA9ICh3aWRlX3VpbnQpIF9fdWggKiBf X3ZoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBfX3gw ID0gX191bCAqIF9fdmwsCQkJCQkJXAorICAgICAgX194MSA9IF9fdWwgKiBfX3ZoLAkJCQkJ CVwKKyAgICAgIF9feDIgPSBfX3VoICogX192bCwJCQkJCQlcCisgICAgICBfX3gzID0gX191 aCAqIF9fdmg7CQkJCQkJXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9feDEgKz0gX19s bF9oaWdocGFydCAoX194MCk7LyogVGhpcyBjYW4ndCBnaXZlIGNhcnJ5LiAgKi8JCVwKICAg ICBpZiAoY2tkX2FkZCAoJl9feDEsIF9feDEsIF9feDIpKQkvKiBEaWQgdGhpcyBnaXZlIGEg Y2Fycnk/ICAqLwlcCkBAIC0zMDcsOSArMzM4LDEwIEBAIHN0YXRpYyB2b2lkIGZhY3RvciAo d2lkZV91aW50LCB3aWRlX3VpbnQsIHN0cnVjdCBmYWN0b3JzICopOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAogICAgICh3MSkgPSBfX3gzICsgX19sbF9oaWdocGFydCAoX194MSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICh3MCkgPSAoX194MSA8PCBXX1RZ UEVfU0laRSAvIDIpICsgX19sbF9sb3dwYXJ0IChfX3gwKTsgICAgICAgICAgICAgXAotICB9 IHdoaWxlICgwKQorICB9IHdoaWxlIChmYWxzZSkKICNlbmRpZgogCisvKiBTZXQgKHEscikg dG8gdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgb2YgZGl2aWRpbmcgKG4xLG4wKSBieSBk LiAgKi8KICNpZiAhZGVmaW5lZCB1ZGl2X3Fybm5kIHx8IGRlZmluZWQgVURJVl9ORUVEU19O T1JNQUxJWkFUSU9OCiAvKiBEZWZpbmUgb3VyIG93biwgbm90IG5lZWRpbmcgbm9ybWFsaXph dGlvbi4gIFRoaXMgZnVuY3Rpb24gaXMKICAgIGN1cnJlbnRseSBub3QgcGVyZm9ybWFuY2Ug Y3JpdGljYWwsIHNvIGtlZXAgaXQgc2ltcGxlLiAgU2ltaWxhciB0bwpAQCAtMzE3LDEyICsz NDksOSBAQCBzdGF0aWMgdm9pZCBmYWN0b3IgKHdpZGVfdWludCwgd2lkZV91aW50LCBzdHJ1 Y3QgZmFjdG9ycyAqKTsKICMgdW5kZWYgdWRpdl9xcm5uZAogIyBkZWZpbmUgdWRpdl9xcm5u ZChxLCByLCBuMSwgbjAsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdpZGVfdWludCBfX2QxLCBfX2QwLCBfX3Es IF9fcjEsIF9fcjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1wX2xp bWJfdCBfX2QxID0gZCwgX19kMCA9IDAsIF9fcSA9IDAsIF9fcjEgPSBuMSwgX19yMCA9IG4w OwlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19kMSA9IChkKTsgX19kMCA9IDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19y MSA9IChuMSk7IF9fcjAgPSAobjApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCiAgICAgYWZmaXJtIChfX3IxIDwgX19kMSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19xID0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CiAgICAgZm9yIChpbnQgX19pID0gV19UWVBFX1NJWkU7IF9faSA+IDA7IF9faS0tKSAgICAg ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHJz aDIgKF9fZDEsIF9fZDAsIF9fZDEsIF9fZDAsIDEpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCkBAIC0zMzUsMTYgKzM2NCwxMyBAQCBzdGF0aWMgdm9pZCBmYWN0b3IgKHdp ZGVfdWludCwgd2lkZV91aW50LCBzdHJ1Y3QgZmFjdG9ycyAqKTsKICAgICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKICAgICAocikgPSBfX3IwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAocSkgPSBfX3E7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3 aGlsZSAoMCkKKyAgfSB3aGlsZSAoZmFsc2UpCiAjZW5kaWYKIAorLyogU2V0IChzaCxzbCkg PSAoYWgsYWwpICsgKGJoLGJsKS4gIE92ZXJmbG93IHdyYXBzIGFyb3VuZC4gICovCiAjaWYg IWRlZmluZWQgYWRkX3NzYWFhYQogIyBkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBh bCwgYmgsIGJsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHdpZGVfdWludCBfYWRkX3g7CQkJCQkJCVwKLSAgICAoc2gpID0gKGFo KSArIChiaCkgKyBja2RfYWRkICgmX2FkZF94LCBhbCwgYmwpOwkJCVwKLSAgICAoc2wpID0g X2FkZF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKKyAgICgoc2gpID0gKGFoKSArIChiaCkgKyBja2Rf YWRkICgmKHNsKSwgYWwsIGJsKSkKICNlbmRpZgogCiAvKiBTZXQgKHJoLHJsKSA9IChhaCxh bCkgPj4gY250LCB3aGVyZSAwIDwgY250IDwgV19UWVBFX1NJWkUuICAqLwpAQCAtMzUyLDYy ICszNzgsNzcgQEAgc3RhdGljIHZvaWQgZmFjdG9yICh3aWRlX3VpbnQsIHdpZGVfdWludCwg c3RydWN0IGZhY3RvcnMgKik7CiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKHJsKSA9ICgo YWgpIDw8IChXX1RZUEVfU0laRSAtIChjbnQpKSkgfCAoKGFsKSA+PiAoY250KSk7ICAgICAg ICAgICBcCiAgICAgKHJoKSA9IChhaCkgPj4gKGNudCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDApCisgIH0gd2hpbGUg KGZhbHNlKQogCi0vKiBTZXQgKHJoLHJsKSA9IChhaCxhbCkgPDwgY250LCB3aGVyZSAwIDwg Y250IDwgV19UWVBFX1NJWkUuICAqLworLyogU2V0IChyaCxybCkgPSAoYWgsYWwpIDw8IGNu dCwgd2hlcmUgMCA8IGNudCA8IFdfVFlQRV9TSVpFLgorICAgT3ZlcmZsb3cgd3JhcHMgYXJv dW5kLiAgKi8KICNkZWZpbmUgbHNoMihyaCwgcmwsIGFoLCBhbCwgY250KSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg ICAocmgpID0gKChhaCkgPDwgY250KSB8ICgoYWwpID4+IChXX1RZUEVfU0laRSAtIChjbnQp KSk7ICAgICAgICAgICAgIFwKICAgICAocmwpID0gKGFsKSA8PCAoY250KTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkK KyAgfSB3aGlsZSAoZmFsc2UpCiAKLSNkZWZpbmUgZ2UyKGFoLCBhbCwgYmgsIGJsKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChhaCkgPiAo YmgpIHx8ICgoYWgpID09IChiaCkgJiYgKGFsKSA+PSAoYmwpKSkKKy8qIChhaCxobCkgPCAo YmgsYmwpPyAgKi8KK3N0YXRpYyBib29sCitsdDIgKG1wX2xpbWJfdCBhaCwgbXBfbGltYl90 IGFsLCBtcF9saW1iX3QgYmgsIG1wX2xpbWJfdCBibCkKK3sKKyAgbXBfbGltYl90IGRoLCBk bDsKKyAgYm9vbCB2aCA9IGNrZF9zdWIgKCZkaCwgYWgsIGJoKTsKKyAgbXBfbGltYl90IHZs ID0gY2tkX3N1YiAoJmRsLCBhbCwgYmwpOworICByZXR1cm4gdmggfCBja2Rfc3ViICgmZGgs IGRoLCB2bCk7Cit9CiAKLSNkZWZpbmUgZ3QyKGFoLCBhbCwgYmgsIGJsKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChhaCkgPiAoYmgpIHx8 ICgoYWgpID09IChiaCkgJiYgKGFsKSA+IChibCkpKQorLyogKGFoLGhsKSA+PSAoYmgsYmwp PyAgKi8KK3N0YXRpYyBib29sCitnZTIgKG1wX2xpbWJfdCBhaCwgbXBfbGltYl90IGFsLCBt cF9saW1iX3QgYmgsIG1wX2xpbWJfdCBibCkKK3sKKyAgcmV0dXJuICFsdDIgKGFoLCBhbCwg YmgsIGJsKTsKK30KIAorLyogU2V0IChyaCxybCkgPSAoYWgsYWwpIC0gKGJoLGJsKS4gIE92 ZXJmbG93IHdyYXBzIGFyb3VuZC4gICovCiAjaWZuZGVmIHN1Yl9kZG1tc3MKICMgZGVmaW5l IHN1Yl9kZG1tc3MocmgsIHJsLCBhaCwgYWwsIGJoLCBibCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKICAgICgocmgpID0gKGFoKSAtIChiaCkgLSBja2Rfc3ViICgmKHJsKSwg YWwsIGJsKSkKICNlbmRpZgogCi0vKiBSZXF1aXJlcyB0aGF0IGEgPCBuIGFuZCBiIDw9IG4g Ki8KKy8qIFNldCByID0gKGEgLSBiKSBtb2Qgbiwgd2hlcmUgYSA8IG4gJiBiIDw9IG4uICAq LwogI2RlZmluZSBzdWJtb2QocixhLGIsbikgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdpZGVf dWludCBfcywgX3QgPSAtY2tkX3N1YiAoJl9zLCBhLCBiKTsJCQkJXAorICAgIG1wX2xpbWJf dCBfcywgX3QgPSAtY2tkX3N1YiAoJl9zLCBhLCBiKTsJCQkJXAogICAgIChyKSA9ICgobikg JiBfdCkgKyBfczsJCQkJCQlcCi0gIH0gd2hpbGUgKDApCisgIH0gd2hpbGUgKGZhbHNlKQog CisvKiBTZXQgciA9IChhICsgYikgbW9kIG4sIHdoZXJlIGEgPCBuICYgYiA8PSBuLiAgKi8K ICNkZWZpbmUgYWRkbW9kKHIsYSxiLG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgc3VibW9kICgociksIChhKSwgKChuKSAtIChiKSks IChuKSkKKyAgc3VibW9kIChyLCBhLCAobikgLSAoYiksIG4pCiAKIC8qIE1vZHVsYXIgdHdv LXdvcmQgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uLiAgRm9yIHBlcmZvcm1hbmNlIHJlYXNv bnMsIHRoZQogICAgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgbjEgbXVzdCBiZSBjbGVhci4g IFRoZSBkZXN0aW5hdGlvbiB2YXJpYWJsZXMgbXVzdCBiZQogICAgZGlzdGluY3QgZnJvbSB0 aGUgbW9kIG9wZXJhbmQuICAqLwogI2RlZmluZSBhZGRtb2QyKHIxLCByMCwgYTEsIGEwLCBi MSwgYjAsIG4xLCBuMCkgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIGFkZF9zc2FhYWEgKChyMSksIChyMCksIChhMSksIChhMCksIChiMSks IChiMCkpOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChnZTIgKChyMSksIChyMCks IChuMSksIChuMCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgc3ViX2RkbW1zcyAoKHIxKSwgKHIwKSwgKHIxKSwgKHIwKSwgKG4xKSwgKG4wKSk7ICAg ICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQorICAgIGFkZF9zc2FhYWEgKHIxLCBy MCwgYTEsIGEwLCBiMSwgYjApOwkJCQlcCisgICAgaWYgKGdlMiAocjEsIHIwLCBuMSwgbjAp KQkJCQkJCVwKKyAgICAgIHN1Yl9kZG1tc3MgKHIxLCByMCwgcjEsIHIwLCBuMSwgbjApOwkJ CQlcCisgIH0gd2hpbGUgKGZhbHNlKQogI2RlZmluZSBzdWJtb2QyKHIxLCByMCwgYTEsIGEw LCBiMSwgYjAsIG4xLCBuMCkgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIHN1Yl9kZG1tc3MgKChyMSksIChyMCksIChhMSksIChhMCksIChi MSksIChiMCkpOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgod2lkZV9pbnQpIChy MSkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgYWRkX3NzYWFhYSAoKHIxKSwgKHIwKSwgKHIxKSwgKHIwKSwgKG4xKSwgKG4wKSk7 ICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEhJR0hCSVRf VE9fTUFTSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICgoKHdpZGVfaW50KS0xID4+IDEpIDwgMCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICA/ICh3aWRlX3VpbnQpKCh3aWRlX2ludCko eCkgPj4gKFdfVFlQRV9TSVpFIC0gMSkpICAgICAgICAgICAgICAgICAgICBcCi0gICA6ICgo eCkgJiAoKHdpZGVfdWludCkgMSA8PCAoV19UWVBFX1NJWkUgLSAxKSkgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICA/IFdJREVfVUlOVF9NQVggOiAod2lkZV91aW50KSAwKSkK LQotLyogUmV0dXJuIHIgPSBhIG1vZCBkLCB3aGVyZSBhID0gPGExLGEwPiwgZCA9IDxkMSxk MD4uCi0gICBSZXF1aXJlcyB0aGF0IGQxICE9IDAuICAqLworICAgIGJvb2wgX3YxID0gY2tk X3N1YiAoJihyMSksIGExLCBiMSk7CQkJCQlcCisgICAgbXBfbGltYl90IF92MCA9IGNrZF9z dWIgKCYocjApLCBhMCwgYjApOwkJCQlcCisgICAgaWYgKF92MSB8IGNrZF9zdWIgKCYocjEp LCByMSwgX3YwKSkJCQkJCVwKKyAgICAgIGFkZF9zc2FhYWEgKHIxLCByMCwgcjEsIHIwLCBu MSwgbjApOwkJCQlcCisgIH0gd2hpbGUgKGZhbHNlKQorCisvKiBSZXR1cm4gMCBpZiB4IDwg Qi8yLCBNUF9MSU1CX01BWCBvdGhlcndpc2UuICAqLworc3RhdGljIG1wX2xpbWJfdAoraGln aGJpdF90b19tYXNrIChtcF9saW1iX3QgeCkKK3sKKyAgcmV0dXJuIC0gKHggPj4gKFdfVFlQ RV9TSVpFIC0gMSkpOworfQorCisvKiBSZXR1cm4gKGExLGEwKSBtb2QgKGQxLGQwKSwgd2hl cmUgZDEgIT0gMC4gICovCiBBVFRSSUJVVEVfUFVSRSBzdGF0aWMgdXVpbnQKLW1vZDIgKHdp ZGVfdWludCBhMSwgd2lkZV91aW50IGEwLCB3aWRlX3VpbnQgZDEsIHdpZGVfdWludCBkMCkK K21vZDIgKG1wX2xpbWJfdCBhMSwgbXBfbGltYl90IGEwLCBtcF9saW1iX3QgZDEsIG1wX2xp bWJfdCBkMCkKIHsKICAgYWZmaXJtIChkMSAhPSAwKTsKIApAQCAtNDMxLDE2ICs0NzIsMTIg QEAgbW9kMiAod2lkZV91aW50IGExLCB3aWRlX3VpbnQgYTAsIHdpZGVfdWludCBkMSwgd2lk ZV91aW50IGQwKQogICByZXR1cm4gbWFrZV91dWludCAoYTEsIGEwKTsKIH0KIAorLyogUmV0 dXJuIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiLAorICAgd2hlcmUg YiBpcyBvZGQuICAqLwogQVRUUklCVVRFX0NPTlNUCi1zdGF0aWMgd2lkZV91aW50Ci1nY2Rf b2RkICh3aWRlX3VpbnQgYSwgd2lkZV91aW50IGIpCitzdGF0aWMgbXBfbGltYl90CitnY2Rf b2RkIChtcF9saW1iX3QgYSwgbXBfbGltYl90IGIpCiB7Ci0gIGlmICgoYiAmIDEpID09IDAp Ci0gICAgewotICAgICAgd2lkZV91aW50IHQgPSBiOwotICAgICAgYiA9IGE7Ci0gICAgICBh ID0gdDsKLSAgICB9CiAgIGlmIChhID09IDApCiAgICAgcmV0dXJuIGI7CiAKQEAgLTQ0OSwx OCArNDg2LDE3IEBAIGdjZF9vZGQgKHdpZGVfdWludCBhLCB3aWRlX3VpbnQgYikKIAogICBm b3IgKDs7KQogICAgIHsKLSAgICAgIHdpZGVfdWludCB0OwotICAgICAgd2lkZV91aW50IGJn dGE7CisgICAgICBtcF9saW1iX3QgdDsKKyAgICAgIG1wX2xpbWJfdCBiZ3RhOwogCiAgICAg ICBhc3N1bWUgKGEpOwotICAgICAgYSA+Pj0gc3RkY190cmFpbGluZ196ZXJvcyAoYSk7Ci0g ICAgICBhID4+PSAxOworICAgICAgbXBfbGltYl90IGFvID0gYSA+PiBzdGRjX3RyYWlsaW5n X3plcm9zIChhKTsKIAotICAgICAgdCA9IGEgLSBiOworICAgICAgdCA9IChhbyA+PiAxKSAt IGI7CiAgICAgICBpZiAodCA9PSAwKQotICAgICAgICByZXR1cm4gKGEgPDwgMSkgKyAxOwor ICAgICAgICByZXR1cm4gYW87CiAKLSAgICAgIGJndGEgPSBISUdIQklUX1RPX01BU0sgKHQp OworICAgICAgYmd0YSA9IGhpZ2hiaXRfdG9fbWFzayAodCk7CiAKICAgICAgIC8qIGIgPC0t IG1pbiAoYSwgYikgKi8KICAgICAgIGIgKz0gKGJndGEgJiB0KTsKQEAgLTQ3MCw5NCArNTA2 LDEwMCBAQCBnY2Rfb2RkICh3aWRlX3VpbnQgYSwgd2lkZV91aW50IGIpCiAgICAgfQogfQog CisvKiBSZXR1cm4gdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIChhMSxhMCkgYW5k IChiMSxiMCksCisgICB3aGVyZSAoYjEsYjApIGlzIG9kZC4gICovCiBBVFRSSUJVVEVfUFVS RSBzdGF0aWMgdXVpbnQKLWdjZDJfb2RkICh3aWRlX3VpbnQgYTEsIHdpZGVfdWludCBhMCwg d2lkZV91aW50IGIxLCB3aWRlX3VpbnQgYjApCitnY2QyX29kZCAobXBfbGltYl90IGExLCBt cF9saW1iX3QgYTAsIG1wX2xpbWJfdCBiMSwgbXBfbGltYl90IGIwKQogewogICBhZmZpcm0g KGIwICYgMSk7CiAKLSAgaWYgKChhMCB8IGExKSA9PSAwKQotICAgIHJldHVybiBtYWtlX3V1 aW50IChiMSwgYjApOwogICBpZiAoIWEwKQotICAgIGEwID0gYTEsIGExID0gMDsKLSAgYXNz dW1lIChhMCk7Ci0gIGludCBjdHogPSBzdGRjX3RyYWlsaW5nX3plcm9zIChhMCk7Ci0gIGlm IChjdHopCi0gICAgcnNoMiAoYTEsIGEwLCBhMSwgYTAsIGN0eik7CisgICAgeworICAgICAg YTAgPSBhMSwgYTEgPSAwOworICAgICAgaWYgKCFhMCkKKyAgICAgICAgcmV0dXJuIG1ha2Vf dXVpbnQgKGIxLCBiMCk7CisgICAgfQorICBnb3RvIG1ha2VfQV9vZGQ7CiAKICAgZm9yICg7 OykKICAgICB7CiAgICAgICBpZiAoKGIxIHwgYTEpID09IDApCiAgICAgICAgIHJldHVybiBt YWtlX3V1aW50ICgwLCBnY2Rfb2RkIChiMCwgYTApKTsKIAotICAgICAgaWYgKGd0MiAoYTEs IGEwLCBiMSwgYjApKQorICAgICAgaWYgKGx0MiAoYjEsIGIwLCBhMSwgYTApKQogICAgICAg ICB7CiAgICAgICAgICAgc3ViX2RkbW1zcyAoYTEsIGEwLCBhMSwgYTAsIGIxLCBiMCk7CiAg ICAgICAgICAgaWYgKCFhMCkKICAgICAgICAgICAgIGEwID0gYTEsIGExID0gMDsKKyAgICAg ICAgbWFrZV9BX29kZDoKICAgICAgICAgICBhc3N1bWUgKGEwKTsKLSAgICAgICAgICBjdHog PSBzdGRjX3RyYWlsaW5nX3plcm9zIChhMCk7CisgICAgICAgICAgaW50IGN0eiA9IHN0ZGNf dHJhaWxpbmdfemVyb3MgKGEwKTsKICAgICAgICAgICBpZiAoY3R6KQogICAgICAgICAgICAg cnNoMiAoYTEsIGEwLCBhMSwgYTAsIGN0eik7CiAgICAgICAgIH0KLSAgICAgIGVsc2UgaWYg KGd0MiAoYjEsIGIwLCBhMSwgYTApKQorICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAg ICAgc3ViX2RkbW1zcyAoYjEsIGIwLCBiMSwgYjAsIGExLCBhMCk7CiAgICAgICAgICAgaWYg KCFiMCkKLSAgICAgICAgICAgIGIwID0gYjEsIGIxID0gMDsKLSAgICAgICAgICBhc3N1bWUg KGIwKTsKLSAgICAgICAgICBjdHogPSBzdGRjX3RyYWlsaW5nX3plcm9zIChiMCk7CisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGIwID0gYjEsIGIxID0gMDsKKyAgICAgICAgICAg ICAgaWYgKCFiMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICBpbnQgY3R6ID0gc3RkY190cmFpbGluZ196ZXJvcyAoYjApOwogICAgICAgICAg IGlmIChjdHopCiAgICAgICAgICAgICByc2gyIChiMSwgYjAsIGIxLCBiMCwgY3R6KTsKICAg ICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBicmVhazsKICAgICB9CiAKICAgcmV0dXJu IG1ha2VfdXVpbnQgKGExLCBhMCk7CiB9CiAKKy8qIFN0b3JlIGludG8gRkFDVE9SUyBhIHBy aW1lIGZhY3RvciBQUklNRSB3aXRoIG11bHRpcGxpY2l0eSBNLiAgKi8KIHN0YXRpYyB2b2lk CiBmYWN0b3JfaW5zZXJ0X211bHRpcGxpY2l0eSAoc3RydWN0IGZhY3RvcnMgKmZhY3RvcnMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZV91aW50IHByaW1lLCBpbnQgbSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9saW1iX3QgcHJpbWUsIGludCBtKQog ewogICBpbnQgbmZhY3RvcnMgPSBmYWN0b3JzLT5uZmFjdG9yczsKLSAgd2lkZV91aW50ICpw ID0gZmFjdG9ycy0+cDsKKyAgbXBfbGltYl90ICpwID0gZmFjdG9ycy0+cDsKICAgdW5zaWdu ZWQgY2hhciAqZSA9IGZhY3RvcnMtPmU7CiAKICAgLyogTG9jYXRlIHBvc2l0aW9uIGZvciBp bnNlcnQgbmV3IG9yIGluY3JlbWVudCBlLiAgKi8KICAgaW50IGk7Ci0gIGZvciAoaSA9IG5m YWN0b3JzIC0gMTsgaSA+PSAwOyBpLS0pCisgIGZvciAoaSA9IG5mYWN0b3JzOyAwIDwgaTsg aS0tKQogICAgIHsKLSAgICAgIGlmIChwW2ldIDw9IHByaW1lKQorICAgICAgaWYgKHBbaSAt IDFdIDwgcHJpbWUpCiAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICBpZiAoaSA8IDAgfHwg cFtpXSAhPSBwcmltZSkKLSAgICB7Ci0gICAgICBmb3IgKGludCBqID0gbmZhY3RvcnMgLSAx OyBqID4gaTsgai0tKQorICAgICAgaWYgKHBbaSAtIDFdID09IHByaW1lKQogICAgICAgICB7 Ci0gICAgICAgICAgcFtqICsgMV0gPSBwW2pdOwotICAgICAgICAgIGVbaiArIDFdID0gZVtq XTsKKyAgICAgICAgICBlW2kgLSAxXSArPSBtOworICAgICAgICAgIHJldHVybjsKICAgICAg ICAgfQotICAgICAgcFtpICsgMV0gPSBwcmltZTsKLSAgICAgIGVbaSArIDFdID0gbTsKLSAg ICAgIGZhY3RvcnMtPm5mYWN0b3JzID0gbmZhY3RvcnMgKyAxOwotICAgIH0KLSAgZWxzZQot ICAgIHsKLSAgICAgIGVbaV0gKz0gbTsKICAgICB9CisKKyAgZmFjdG9ycy0+bmZhY3RvcnMg PSBuZmFjdG9ycyArIDE7CisgIG1lbW1vdmUgKCZwW2kgKyAxXSwgJnBbaV0sIChuZmFjdG9y cyAtIGkpICogc2l6ZW9mICpwKTsKKyAgbWVtbW92ZSAoJmVbaSArIDFdLCAmZVtpXSwgKG5m YWN0b3JzIC0gaSkgKiBzaXplb2YgKmUpOworICBlW2ldID0gbTsKKyAgcFtpXSA9IHByaW1l OwogfQogCi0jZGVmaW5lIGZhY3Rvcl9pbnNlcnQoZiwgcCkgZmFjdG9yX2luc2VydF9tdWx0 aXBsaWNpdHkgKGYsIHAsIDEpCisvKiBTdG9yZSBpbnRvIEZBQ1RPUlMgYSBwcmltZSBmYWN0 b3IgUFJJTUUuICAqLworc3RhdGljIHZvaWQKK2ZhY3Rvcl9pbnNlcnQgKHN0cnVjdCBmYWN0 b3JzICpmYWN0b3JzLCBtcF9saW1iX3QgcHJpbWUpCit7CisgIGZhY3Rvcl9pbnNlcnRfbXVs dGlwbGljaXR5IChmYWN0b3JzLCBwcmltZSwgMSk7Cit9CiAKKy8qIFN0b3JlIGludG8gRkFD VE9SUyBhIHByaW1lIGZhY3RvciAoUDEsUDApLiAgSWYgUDEgIT0gMCwKKyAgIEZBQ1RPUlMg bXVzdCBub3QgYWxyZWFkeSBjb250YWluIGEgbGFyZ2UgcHJpbWUgZmFjdG9yLiAgKi8KIHN0 YXRpYyB2b2lkCiBmYWN0b3JfaW5zZXJ0X2xhcmdlIChzdHJ1Y3QgZmFjdG9ycyAqZmFjdG9y cywKLSAgICAgICAgICAgICAgICAgICAgIHdpZGVfdWludCBwMSwgd2lkZV91aW50IHAwKQor ICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IHAxLCBtcF9saW1iX3QgcDApCiB7CiAg IGlmIChwMSA+IDApCiAgICAgewotICAgICAgYWZmaXJtIChoaSAoZmFjdG9ycy0+cGxhcmdl KSA9PSAwKTsKKyAgICAgIGFmZmlybSAoIWhpX2lzX3NldCAoJmZhY3RvcnMtPnBsYXJnZSkp OwogICAgICAgZmFjdG9ycy0+cGxhcmdlID0gbWFrZV91dWludCAocDEsIHAwKTsKICAgICB9 CiAgIGVsc2UKQEAgLTU4NiwxMDkgKzYyOCwxMTggQEAgbXB6X3ZhX2luaXQgKHZvaWQgKCpt cHpfc2luZ2xlX2luaXQpKG1wel90KSwgLi4uKQogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lk IG1wX2ZhY3RvciAobXB6X3QsIHN0cnVjdCBtcF9mYWN0b3JzICopOworI2lmbmRlZiBtcG5f dGRpdl9xcgogCiBzdGF0aWMgdm9pZAotbXBfZmFjdG9yX2luaXQgKHN0cnVjdCBtcF9mYWN0 b3JzICpmYWN0b3JzKQorY29weV9tcG5fZnJvbV9tcHogKG1wX2xpbWJfdCAqcCwgbXBfc2l6 ZV90IG4sIG1wel90IHopCiB7Ci0gIGZhY3RvcnMtPnAgPSBudWxscHRyOwotICBmYWN0b3Jz LT5lID0gbnVsbHB0cjsKLSAgZmFjdG9ycy0+bmZhY3RvcnMgPSAwOwotICBmYWN0b3JzLT5u YWxsb2MgPSAwOworICBtcF9zaXplX3QgenNpemUgPSBtcHpfc2l6ZSAoeik7CisgIG1wbl9j b3B5aSAocCwgbXB6X2xpbWJzX3JlYWQgKHopLCB6c2l6ZSk7CisgIG1wbl96ZXJvIChwICsg enNpemUsIG4gLSB6c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCittcG5fdGRpdl9xciAobXBf bGltYl90ICpxcCwgbXBfbGltYl90ICpycCwgTUFZQkVfVU5VU0VEIG1wX3NpemVfdCBxeG4s CisgICAgICAgICAgICAgbXBfbGltYl90IGNvbnN0ICpucCwgbXBfc2l6ZV90IG5uLAorICAg ICAgICAgICAgIG1wX2xpbWJfdCBjb25zdCAqZHAsIG1wX3NpemVfdCBkbikKK3sKKyAgbXB6 X3QgcSwgciwgbiwgZDsKKyAgbXB6X2luaXRzIChxLCByLCBudWxscHRyKTsKKyAgbXB6X3Rk aXZfcXIgKHEsIHIsIG1wel9yb2luaXRfbiAobiwgbnAsIG5uKSwgbXB6X3JvaW5pdF9uIChk LCBkcCwgZG4pKTsKKyAgY29weV9tcG5fZnJvbV9tcHogKHFwLCBubiAtIGRuICsgMSwgcSk7 CisgIGNvcHlfbXBuX2Zyb21fbXB6IChycCwgZG4sIHIpOworICBtcHpfY2xlYXJzIChxLCBy LCBudWxscHRyKTsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG1wX2ZhY3RvcnMgbXBf ZmFjdG9yIChtcHpfdCk7CisKKy8qIFJldHVybiBhbiBlbXB0eSBzZXQgb2YgZmFjdG9ycy4g ICovCitzdGF0aWMgc3RydWN0IG1wX2ZhY3RvcnMKK21wX25vX2ZhY3RvcnMgKHZvaWQpCit7 CisgIHJldHVybiAoc3RydWN0IG1wX2ZhY3RvcnMpIHswLH07CiB9CiAKKy8qIEZyZWUgc3Rv cmFnZSBhbGxvY2F0ZWQgZm9yIEZBQ1RPUlMsIG1ha2luZyBpdCB1bmluaXRpYWxpemVkLiAg Ki8KIHN0YXRpYyB2b2lkCiBtcF9mYWN0b3JfY2xlYXIgKHN0cnVjdCBtcF9mYWN0b3JzICpm YWN0b3JzKQogeworICBzdHJ1Y3QgbXBfZmFjdG9yICpmID0gZmFjdG9ycy0+ZjsKICAgZm9y IChpZHhfdCBpID0gMDsgaSA8IGZhY3RvcnMtPm5mYWN0b3JzOyBpKyspCi0gICAgbXB6X2Ns ZWFyIChmYWN0b3JzLT5wW2ldKTsKLQotICBmcmVlIChmYWN0b3JzLT5wKTsKLSAgZnJlZSAo ZmFjdG9ycy0+ZSk7CisgICAgbXB6X2NsZWFyIChmW2ldLnApOworICBmcmVlIChmKTsKIH0K IAorLyogU3RvcmUgaW50byBGQUNUT1JTIGEgcHJpbWUgZmFjdG9yIFBSSU1FIHdpdGggbXVs dGlwbGljaXR5IE0uICAqLwogc3RhdGljIHZvaWQKLW1wX2ZhY3Rvcl9pbnNlcnQgKHN0cnVj dCBtcF9mYWN0b3JzICpmYWN0b3JzLCBtcHpfdCBwcmltZSkKK21wX2ZhY3Rvcl9pbnNlcnQg KHN0cnVjdCBtcF9mYWN0b3JzICpmYWN0b3JzLCBtcHpfdCBwcmltZSwgbXBfYml0Y250X3Qg bSkKIHsKICAgaWR4X3QgbmZhY3RvcnMgPSBmYWN0b3JzLT5uZmFjdG9yczsKLSAgbXB6X3Qg KnAgPSBmYWN0b3JzLT5wOwotICB1bnNpZ25lZCBsb25nIGludCAqZSA9IGZhY3RvcnMtPmU7 Ci0gIHB0cmRpZmZfdCBpOworICBzdHJ1Y3QgbXBfZmFjdG9yICpmID0gZmFjdG9ycy0+ZjsK KyAgaWR4X3QgaTsKIAogICAvKiBMb2NhdGUgcG9zaXRpb24gZm9yIGluc2VydCBuZXcgb3Ig aW5jcmVtZW50IGUuICAqLwotICBmb3IgKGkgPSBuZmFjdG9ycyAtIDE7IGkgPj0gMDsgaS0t KQorICBmb3IgKGkgPSBuZmFjdG9yczsgMCA8IGk7IGktLSkKICAgICB7Ci0gICAgICBpZiAo bXB6X2NtcCAocFtpXSwgcHJpbWUpIDw9IDApCisgICAgICBpbnQgc2duID0gbXB6X2NtcCAo ZltpIC0gMV0ucCwgcHJpbWUpOworICAgICAgaWYgKHNnbiA8IDApCiAgICAgICAgIGJyZWFr OwotICAgIH0KLQotICBpZiAoaSA8IDAgfHwgbXB6X2NtcCAocFtpXSwgcHJpbWUpICE9IDAp Ci0gICAgewotICAgICAgaWYgKGZhY3RvcnMtPm5mYWN0b3JzID09IGZhY3RvcnMtPm5hbGxv YykKKyAgICAgIGlmIChzZ24gPT0gMCkKICAgICAgICAgewotICAgICAgICAgIHAgPSB4cGFs bG9jIChwLCAmZmFjdG9ycy0+bmFsbG9jLCAxLCAtMSwgc2l6ZW9mICpwKTsKLSAgICAgICAg ICBlID0geGlyZWFsbG9jYXJyYXkgKGUsIGZhY3RvcnMtPm5hbGxvYywgc2l6ZW9mICplKTsK KyAgICAgICAgICBmW2kgLSAxXS5lICs9IG07CisgICAgICAgICAgcmV0dXJuOwogICAgICAg ICB9CisgICAgfQogCi0gICAgICBtcHpfaW5pdCAocFtuZmFjdG9yc10pOwotICAgICAgZm9y IChwdHJkaWZmX3QgaiA9IG5mYWN0b3JzIC0gMTsgaiA+IGk7IGotLSkKLSAgICAgICAgewot ICAgICAgICAgIG1wel9zZXQgKHBbaiArIDFdLCBwW2pdKTsKLSAgICAgICAgICBlW2ogKyAx XSA9IGVbal07Ci0gICAgICAgIH0KLSAgICAgIG1wel9zZXQgKHBbaSArIDFdLCBwcmltZSk7 Ci0gICAgICBlW2kgKyAxXSA9IDE7CisgIGlmIChuZmFjdG9ycyA9PSBmYWN0b3JzLT5uYWxs b2MpCisgICAgZmFjdG9ycy0+ZiA9IGYgPSB4cGFsbG9jIChmLCAmZmFjdG9ycy0+bmFsbG9j LCAxLCAtMSwgc2l6ZW9mICpmKTsKIAotICAgICAgZmFjdG9ycy0+cCA9IHA7Ci0gICAgICBm YWN0b3JzLT5lID0gZTsKLSAgICAgIGZhY3RvcnMtPm5mYWN0b3JzID0gbmZhY3RvcnMgKyAx OwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIGVbaV0gKz0gMTsKLSAgICB9CisgIGZh Y3RvcnMtPm5mYWN0b3JzID0gbmZhY3RvcnMgKyAxOworICBtZW1tb3ZlICgmZltpICsgMV0s ICZmW2ldLCAobmZhY3RvcnMgLSBpKSAqIHNpemVvZiAqZik7CisgIGZbaV0uZSA9IG07Cisg IG1wel9pbml0X3NldCAoZltpXS5wLCBwcmltZSk7CiB9CiAKKy8qIFN0b3JlIGludG8gRkFD VE9SUyBhIHByaW1lIGZhY3RvciBQUklNRSB3aXRoIG11bHRpcGxpY2l0eSBNLiAgKi8KIHN0 YXRpYyB2b2lkCi1tcF9mYWN0b3JfaW5zZXJ0X3VpIChzdHJ1Y3QgbXBfZmFjdG9ycyAqZmFj dG9ycywgdW5zaWduZWQgbG9uZyBpbnQgcHJpbWUpCittcF9mYWN0b3JfaW5zZXJ0MSAoc3Ry dWN0IG1wX2ZhY3RvcnMgKmZhY3RvcnMsIG1wX2xpbWJfdCBwcmltZSwgbXBfYml0Y250X3Qg bSkKIHsKLSAgbXB6X3QgcHo7Ci0KLSAgbXB6X2luaXRfc2V0X3VpIChweiwgcHJpbWUpOwot ICBtcF9mYWN0b3JfaW5zZXJ0IChmYWN0b3JzLCBweik7Ci0gIG1wel9jbGVhciAocHopOwor ICBtcHpfdCBweiA9IE1QWl9ST0lOSVRfTiAoJnByaW1lLCAxKTsKKyAgbXBfZmFjdG9yX2lu c2VydCAoZmFjdG9ycywgcHosIG0pOwogfQogCiAKLSNkZWZpbmUgUChhLGIsYyxkKSBhLAot c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHJpbWVzX2RpZmZbXSA9IHsKKy8qIHByaW1l c19wdGFiW2ldIGlzIHByaW1lIGksIHdoZXJlIHRoZSB6ZXJvdGggcHJpbWUgaXMgMy4KKyAg IEhvd2V2ZXIsIHRoZSBsYXN0IDcgZW50cmllcyBhcmUgc2VudGluZWxzLiAgKi8KKyNkZWZp bmUgUChhLGIsYykgYSwKK3N0YXRpYyBpbnRfbGVhc3QxNl90IGNvbnN0IHByaW1lc19wdGFi W10gPSB7CiAjaW5jbHVkZSAicHJpbWVzLmgiCiAwLDAsMCwwLDAsMCwwICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogNyBzZW50aW5lbHMgZm9yIDgtd2F5IGxvb3AgKi8KIH07CiAj dW5kZWYgUAogCi0jZGVmaW5lIFBSSU1FU19QVEFCX0VOVFJJRVMgKEFSUkFZX0NBUkRJTkFM SVRZIChwcmltZXNfZGlmZikgLSA4ICsgMSkKLQotI2RlZmluZSBQKGEsYixjLGQpIGIsCi1z dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwcmltZXNfZGlmZjhbXSA9IHsKLSNpbmNsdWRl ICJwcmltZXMuaCIKLTAsMCwwLDAsMCwwLDAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiA3IHNlbnRpbmVscyBmb3IgOC13YXkgbG9vcCAqLwotfTsKLSN1bmRlZiBQCitlbnVtIHsg UFJJTUVTX1BUQUJfRU5UUklFUyA9IEFSUkFZX0NBUkRJTkFMSVRZIChwcmltZXNfcHRhYikg LSA4ICsgMSB9OwogCiBzdHJ1Y3QgcHJpbWVzX2R0YWIKIHsKLSAgd2lkZV91aW50IGJpbnYs IGxpbTsKKyAgbXBfbGltYl90IGJpbnYsIGxpbTsKIH07CiAKLSNkZWZpbmUgUChhLGIsYyxk KSB7YyxkfSwKKy8qIHByaW1lc19kdGFiW2ldLmJpbnYgaXMgdGhlIG11bHRpcGxpY2F0aXZl IGludmVyc2Ugb2YgcHJpbWUgaQorICAgbW9kdWxvIEIsIHdoZXJlIHRoZSB6ZXJvdGggcHJp bWUgaXMgMy4gIFRoYXQgaXMsCisgICAoKHByaW1lc19kdGFiW2ldLmJpbnYpICogKHByaW1l IGkpKSBtb2QgQiA9IDEuCisgICBwcmltZXNfZHRhYltpXS5saW0gaXMgdGhlIG1heGltdW0g dmFsdWUgdGhhdCB3b24ndCBvdmVyZmxvdyBpbgorICAgbXBfbGltYl90IGFyaXRobWV0aWMg d2hlbiBtdWx0aXBsaWVkIGJ5IHRoZSBpdGggcHJpbWUuCisgICBIb3dldmVyLCB0aGUgbGFz dCA3IGVudHJpZXMgb2YgcHJpbWVzX2R0YWIgYXJlIHNlbnRpbmVscy4gICovCisjZGVmaW5l IFAoYSxiLGMpIHtiLGN9LAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcmltZXNfZHRhYiBwcmlt ZXNfZHRhYltdID0gewogI2luY2x1ZGUgInByaW1lcy5oIgogezEsMH0sezEsMH0sezEsMH0s ezEsMH0sezEsMH0sezEsMH0sezEsMH0gLyogNyBzZW50aW5lbHMgZm9yIDgtd2F5IGxvb3Ag Ki8KIH07CiAjdW5kZWYgUAogCi0vKiBWZXJpZnkgdGhhdCB3aWRlX3VpbnQgaXMgbm90IHdp ZGVyIHRoYW4KKy8qIFZlcmlmeSB0aGF0IGEgd29yZCBpcyBub3Qgd2lkZXIgdGhhbgogICAg dGhlIGludGVnZXJzIHVzZWQgdG8gZ2VuZXJhdGUgcHJpbWVzLmguICAqLwogc3RhdGljX2Fz c2VydCAoV19UWVBFX1NJWkUgPD0gV0lERV9VSU5UX0JJVFMpOwogCkBAIC02OTYsMjQgKzc0 NywzMCBAQCBzdGF0aWNfYXNzZXJ0IChXX1RZUEVfU0laRSA8PSBXSURFX1VJTlRfQklUUyk7 CiAgICBUaGlzIGZsYWcgaXMgdXNlZCBvbmx5IGluIHRoZSBHTVAgY29kZS4gICovCiBzdGF0 aWMgYm9vbCBkZXZfZGVidWcgPSBmYWxzZTsKIAotLyogUHJvdmUgcHJpbWFsaXR5IG9yIHJ1 biBwcm9iYWJpbGlzdGljIHRlc3RzLiAgKi8KLXN0YXRpYyBib29sIGZsYWdfcHJvdmVfcHJp bWFsaXR5ID0gUFJPVkVfUFJJTUFMSVRZOworLyogTnVtYmVyIG9mIE1pbGxlci1SYWJpbiB0 ZXN0cyB0byBydW4uICBGb3IgbW9yZSwgc2VlOgogCi0vKiBOdW1iZXIgb2YgTWlsbGVyLVJh YmluIHRlc3RzIHRvIHJ1biB3aGVuIG5vdCBwcm92aW5nIHByaW1hbGl0eS4gICovCi0jZGVm aW5lIE1SX1JFUFMgMjUKKyAgICAgSXNobXVraGFtZXRvdiBTVCwgTXViYXJha292IEJHLCBS dWJ0c292YSBSRy4KKyAgICAgT24gdGhlIE51bWJlciBvZiBXaXRuZXNzZXMgaW4gdGhlIE1p bGxlci1SYWJpbiBQcmltYWxpdHkgVGVzdC4KKyAgICAgU3ltbWV0cnkuIDIwMjA7MTIoNik6 ODkwLiBodHRwczovL2RvaS5vcmcvMTAuMzM5MC9zeW0xMjA2MDg5MAogCi1zdGF0aWMgdm9p ZAotZmFjdG9yX2luc2VydF9yZWZpbmQgKHN0cnVjdCBmYWN0b3JzICpmYWN0b3JzLCB3aWRl X3VpbnQgcCwgaW50IGksIGludCBvZmYpCi17Ci0gIGZvciAoaW50IGogPSAwOyBqIDwgb2Zm OyBqKyspCi0gICAgcCArPSBwcmltZXNfZGlmZltpICsgal07Ci0gIGZhY3Rvcl9pbnNlcnQg KGZhY3RvcnMsIHApOwotfQorICAgSXRzIENvcm9sbGFyeSAxIHN1Z2dlc3RzIHRoYXQgdGhl IHByb2JhYmlsaXR5IG9mIGVycm9yIG9uIHJhbmRvbSBpbnB1dHMKKyAgIGlzIGxlc3MgdGhh biAxNl4tTVJfUkVQUywgYW4gaW1wcm92ZW1lbnQgb24gdGhlIDReLU1SX1JFUFMgY29tbW9u bHkgY2l0ZWQuCisgICBJZiBNUl9SRVBTIGlzIDI0IHRoaXMgbWVhbnMgdGhlIHByb2JhYmls aXR5IG9mIGVycm9yIGlzIGxlc3MgdGhhbiAxLjI2ZS0yOSwKKyAgIHdoaWNoIGlzIG11Y2gg bGVzcyB0aGFuIHRoZSBsaWtlbGlob29kIG9mIGhhcmR3YXJlIGVycm9yIGFuZCBzbyBjYW4K KyAgIGJlIHRyZWF0ZWQgYXMgZXNzZW50aWFsbHkgemVyby4KKworICAgRm9yIGFkdmVyc2Fy aWFsIGlucHV0cywgbm8ga25vd24gZmFsc2UgcG9zaXRpdmVzIGV4aXN0IGZvciBCYWlsbGll LVBTVywKKyAgIHdoaWNoIG1wel9wcm9iYWJfcHJpbWVfcCBhbHdheXMgdXNlcy4gIFNvIGRl ZmF1bHQgTVJfUkVQUyB0byAyNCwKKyAgIHRoZSBtYXhpbXVtIHZhbHVlIGZvciB3aGljaCBt cHpfcHJvYmFiX3ByaW1lX3AgZG9lcyBub3QgZG8gZXh0cmEKKyAgIE1pbGxlci1SYWJpbiB0 ZXN0cy4gICovCisjaWZuZGVmIE1SX1JFUFMKKyMgZGVmaW5lIE1SX1JFUFMgMjQKKyNlbmRp ZgogCiAvKiBUcmlhbCBkaXZpc2lvbiB3aXRoIG9kZCBwcmltZXMgdXNlcyB0aGUgZm9sbG93 aW5nIHRyaWNrLgogCi0gICBMZXQgcCBiZSBhbiBvZGQgcHJpbWUsIGFuZCBCID0gMl57V19U WVBFX1NJWkV9LiAgRm9yIHNpbXBsaWNpdHksCi0gICBjb25zaWRlciB0aGUgY2FzZSB0IDwg QiAodGhpcyBpcyB0aGUgc2Vjb25kIGxvb3AgYmVsb3cpLgorICAgTGV0IHAgYmUgYW4gb2Rk IHByaW1lLiAgRm9yIHNpbXBsaWNpdHksIGNvbnNpZGVyIHRoZSBjYXNlIHQgPCBCOworICAg dGhpcyBpcyB0aGUgc2Vjb25kIGxvb3AgYmVsb3cuCiAKICAgIEZyb20gb3VyIHRhYmxlcyB3 ZSBnZXQKIApAQCAtNzQzLDkgKzgwMCwzMCBAQCBmYWN0b3JfaW5zZXJ0X3JlZmluZCAoc3Ry dWN0IGZhY3RvcnMgKmZhY3RvcnMsIHdpZGVfdWludCBwLCBpbnQgaSwgaW50IG9mZikKICAg IG9yZGVyLCBhbmQgdGhlIG5vbi1tdWx0aXBsZXMgb2YgcCBvbnRvIHRoZSByYW5nZSBsaW0g PCBxIDwgQi4KICAqLwogCisvKiBUaGUga2VybmVsIG9mIGZhY3Rvcl91c2luZ19kaXZpc2lv bi4gIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGEKKyAgIGxvb3AgdW5yb2xsZWQgYnkg aGFuZC4gICovCitzdGF0aWMgaW5saW5lIG1wX2xpbWJfdAorZGl2YmxvY2sgKHN0cnVjdCBm YWN0b3JzICpmYWN0b3JzLCBtcF9saW1iX3QgdDAsIHN0cnVjdCBwcmltZXNfZHRhYiBjb25z dCAqcGQsCisgICAgICAgICAgaWR4X3QgaSwgaW50IGlvZmYpCit7CisgIGZvciAoOzspCisg ICAgeworICAgICAgbXBfbGltYl90IHEgPSB0MCAqIHBkW2lvZmZdLmJpbnY7CisgICAgICBp ZiAoTElLRUxZIChwZFtpb2ZmXS5saW0gPCBxKSkKKyAgICAgICAgcmV0dXJuIHQwOworICAg ICAgdDAgPSBxOworICAgICAgZmFjdG9yX2luc2VydCAoZmFjdG9ycywgcHJpbWVzX3B0YWJb aSArIGlvZmZdKTsKKyAgICB9Cit9CisKKy8qIEluc2VydCBpbnRvIEZBQ1RPUlMgdGhlIGZh Y3RvcnMgb2YgKFQxLFQwKSBmb3VuZCB2aWEgdHJpYWwgZGl2aXNpb24uCisgICBUaGUgY2Fu ZGlkYXRlIGZhY3RvcnMgYXJlIDIgYW5kIHRoZSBwcmltZXMgaW4gdGhlIHByaW1lcyB0YWJs ZS4KKyAgIEhvd2V2ZXIsIHByaW1lcyBsZXNzIHRoYW4gcHJpbWUgSSBoYXZlCisgICBhbHJl YWR5IGJlZW4gY29uc2lkZXJlZCwgYW5kIG5lZWQgbm90IGJlIGxvb2tlZCBhdCBhZ2Fpbi4K KyAgIFJldHVybiAoVDEsVDApIGRpdmlkZWQgYnkgdGhlIGZhY3RvcnMgZm91bmQuICAqLwog c3RhdGljIHV1aW50Ci1mYWN0b3JfdXNpbmdfZGl2aXNpb24gKHdpZGVfdWludCB0MSwgd2lk ZV91aW50IHQwLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFjdG9ycyAqZmFj dG9ycykKK2ZhY3Rvcl91c2luZ19kaXZpc2lvbiAoc3RydWN0IGZhY3RvcnMgKmZhY3RvcnMs IG1wX2xpbWJfdCB0MSwgbXBfbGltYl90IHQwLAorICAgICAgICAgICAgICAgICAgICAgICBp ZHhfdCBpKQogewogICBpZiAodDAgJSAyID09IDApCiAgICAgewpAQCAtNzY4LDE0ICs4NDYs MTMgQEAgZmFjdG9yX3VzaW5nX2RpdmlzaW9uICh3aWRlX3VpbnQgdDEsIHdpZGVfdWludCB0 MCwKICAgICAgIGZhY3Rvcl9pbnNlcnRfbXVsdGlwbGljaXR5IChmYWN0b3JzLCAyLCBjbnQp OwogICAgIH0KIAotICB3aWRlX3VpbnQgcCA9IDM7Ci0gIGlkeF90IGk7Ci0gIGZvciAoaSA9 IDA7IHQxID4gMCAmJiBpIDwgUFJJTUVTX1BUQUJfRU5UUklFUzsgaSsrKQorICBmb3IgKDsg dDEgPiAwICYmIGkgPCBQUklNRVNfUFRBQl9FTlRSSUVTOyBpKyspCiAgICAgeworICAgICAg bXBfbGltYl90IHAgPSBwcmltZXNfcHRhYltpXTsKICAgICAgIGZvciAoOzspCiAgICAgICAg IHsKLSAgICAgICAgICB3aWRlX3VpbnQgcTEsIHEwLCBoaTsKLSAgICAgICAgICBNQVlCRV9V TlVTRUQgd2lkZV91aW50IGxvOworICAgICAgICAgIG1wX2xpbWJfdCBxMSwgcTAsIGhpOwor ICAgICAgICAgIE1BWUJFX1VOVVNFRCBtcF9saW1iX3QgbG87CiAKICAgICAgICAgICBxMCA9 IHQwICogcHJpbWVzX2R0YWJbaV0uYmludjsKICAgICAgICAgICB1bXVsX3BwbW0gKGhpLCBs bywgcTAsIHApOwpAQCAtNzg4LDM1ICs4NjUsMjEgQEAgZmFjdG9yX3VzaW5nX2RpdmlzaW9u ICh3aWRlX3VpbnQgdDEsIHdpZGVfdWludCB0MCwKICAgICAgICAgICB0MSA9IHExOyB0MCA9 IHEwOwogICAgICAgICAgIGZhY3Rvcl9pbnNlcnQgKGZhY3RvcnMsIHApOwogICAgICAgICB9 Ci0gICAgICBwICs9IHByaW1lc19kaWZmW2kgKyAxXTsKICAgICB9CiAKLSNkZWZpbmUgRElW QkxPQ0soSSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBmb3IgKDs7KSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcSA9IHQwICogcGRbSV0uYmludjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKExJ S0VMWSAocSA+IHBkW0ldLmxpbSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdDAgPSBxOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgZmFjdG9yX2luc2VydF9yZWZpbmQgKGZhY3RvcnMsIHAsIGkgKyAxLCBJKTsgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQog ICBmb3IgKDsgaSA8IFBSSU1FU19QVEFCX0VOVFJJRVM7IGkgKz0gOCkKICAgICB7Ci0gICAg ICB3aWRlX3VpbnQgcTsKICAgICAgIGNvbnN0IHN0cnVjdCBwcmltZXNfZHRhYiAqcGQgPSAm cHJpbWVzX2R0YWJbaV07Ci0gICAgICBESVZCTE9DSyAoMCk7Ci0gICAgICBESVZCTE9DSyAo MSk7Ci0gICAgICBESVZCTE9DSyAoMik7Ci0gICAgICBESVZCTE9DSyAoMyk7Ci0gICAgICBE SVZCTE9DSyAoNCk7Ci0gICAgICBESVZCTE9DSyAoNSk7Ci0gICAgICBESVZCTE9DSyAoNik7 Ci0gICAgICBESVZCTE9DSyAoNyk7Ci0KLSAgICAgIHAgKz0gcHJpbWVzX2RpZmY4W2ldOwor ICAgICAgdDAgPSBkaXZibG9jayAoZmFjdG9ycywgdDAsIHBkLCBpLCAwKTsKKyAgICAgIHQw ID0gZGl2YmxvY2sgKGZhY3RvcnMsIHQwLCBwZCwgaSwgMSk7CisgICAgICB0MCA9IGRpdmJs b2NrIChmYWN0b3JzLCB0MCwgcGQsIGksIDIpOworICAgICAgdDAgPSBkaXZibG9jayAoZmFj dG9ycywgdDAsIHBkLCBpLCAzKTsKKyAgICAgIHQwID0gZGl2YmxvY2sgKGZhY3RvcnMsIHQw LCBwZCwgaSwgNCk7CisgICAgICB0MCA9IGRpdmJsb2NrIChmYWN0b3JzLCB0MCwgcGQsIGks IDUpOworICAgICAgdDAgPSBkaXZibG9jayAoZmFjdG9ycywgdDAsIHBkLCBpLCA2KTsKKyAg ICAgIHQwID0gZGl2YmxvY2sgKGZhY3RvcnMsIHQwLCBwZCwgaSwgNyk7CisKKyAgICAgIGlu dF9sZWFzdDMyX3QgcCA9IHByaW1lc19wdGFiW2kgKyA4XTsKICAgICAgIGlmIChwICogcCA+ IHQwKQogICAgICAgICBicmVhazsKICAgICB9CkBAIC04MjQsNDUgKzg4NywxMDAgQEAgZmFj dG9yX3VzaW5nX2RpdmlzaW9uICh3aWRlX3VpbnQgdDEsIHdpZGVfdWludCB0MCwKICAgcmV0 dXJuIG1ha2VfdXVpbnQgKHQxLCB0MCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1tcF9mYWN0b3Jf dXNpbmdfZGl2aXNpb24gKG1wel90IHQsIHN0cnVjdCBtcF9mYWN0b3JzICpmYWN0b3JzKQor LyogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGltYnMgaW4gcG9zaXRpdmUgTi4gICovCitzdGF0 aWMgbXBfc2l6ZV90CittcF9zaXplIChtcHpfdCBuKQogewotICBtcHpfdCBxOwotICBtcF9i aXRjbnRfdCBwOworICAvKiBUZWxsIHRoZSBjb21waWxlciB0aGF0IE4gaXMgcG9zaXRpdmU7 IHRoaXMgY2FuIHNwZWVkIHVwIGFjY2VzcyB0byBOLiAgKi8KKyAgYXNzdW1lICgwIDwgbXB6 X3NnbiAobikpOwogCi0gIGRldm1zZyAoIlt0cmlhbCBkaXZpc2lvbl0gIik7CisgIHJldHVy biBtcHpfc2l6ZSAobik7Cit9CiAKLSAgbXB6X2luaXQgKHEpOworLyogSW5zZXJ0IGludG8g TVBfRkFDVE9SUyB0aGUgZmFjdG9ycyBvZiBOIGlmIE4gPCBCXjIgLyAyLAorICAgYW5kIHJl dHVybiB0cnVlLiAgT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2UuCisgICBQcmltZXMgbGVzcyB0 aGFuIHByaW1lIFBSSU1FX0lEWCBoYXZlCisgICBhbHJlYWR5IGJlZW4gY29uc2lkZXJlZCwg YW5kIG5lZWQgbm90IGJlIGxvb2tlZCBhdCBhZ2Fpbi4gICovCitzdGF0aWMgYm9vbAorbXBf ZmluaXNoX3VwX2luX3NpbmdsZSAoc3RydWN0IG1wX2ZhY3RvcnMgKm1wX2ZhY3RvcnMsIG1w el90IG4sCisgICAgICAgICAgICAgICAgICAgICAgICBpZHhfdCBwcmltZV9pZHgpCit7Cisg IGlmICgyIDwgbXBfc2l6ZSAobikpCisgICAgcmV0dXJuIGZhbHNlOworICBtcF9saW1iX3Qg bjEgPSBtcHpfZ2V0bGltYm4gKG4sIDEpOworICBpZiAobjEgPj4gKFdfVFlQRV9TSVpFIC0g MSkpCisgICAgcmV0dXJuIGZhbHNlOworICBtcF9saW1iX3QgbjAgPSBtcHpfZ2V0bGltYm4g KG4sIDApOworICBtcHpfc2V0X3VpIChuLCAxKTsKIAotICBwID0gbXB6X3NjYW4xICh0LCAw KTsKLSAgbXB6X2ZkaXZfcV8yZXhwICh0LCB0LCBwKTsKLSAgd2hpbGUgKHApCisgIHN0cnVj dCBmYWN0b3JzIGZhY3RvcnM7CisgIGZhY3Rvcl91cCAoJmZhY3RvcnMsIG4xLCBuMCwgcHJp bWVfaWR4KTsKKworICBpZiAoaGlfaXNfc2V0ICgmZmFjdG9ycy5wbGFyZ2UpKQogICAgIHsK LSAgICAgIG1wX2ZhY3Rvcl9pbnNlcnRfdWkgKGZhY3RvcnMsIDIpOwotICAgICAgLS1wOwor ICAgICAgbXB6X3QgcCA9IE1QWl9ST0lOSVRfTiAoZmFjdG9ycy5wbGFyZ2UudXUsIDIpOwor ICAgICAgbXBfZmFjdG9yX2luc2VydCAobXBfZmFjdG9ycywgcCwgMSk7CiAgICAgfQogCi0g IHVuc2lnbmVkIGxvbmcgaW50IGQgPSAzOwotICBmb3IgKGlkeF90IGkgPSAxOyBpIDw9IFBS SU1FU19QVEFCX0VOVFJJRVM7KQorICBmb3IgKGludCBpID0gZmFjdG9ycy5uZmFjdG9yczsg MCA8IGk7IGktLSkKICAgICB7Ci0gICAgICBpZiAoISBtcHpfZGl2aXNpYmxlX3VpX3AgKHQs IGQpKQotICAgICAgICB7Ci0gICAgICAgICAgZCArPSBwcmltZXNfZGlmZltpKytdOwotICAg ICAgICAgIGlmIChtcHpfY21wX3VpICh0LCBkICogZCkgPCAwKQotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKKyAgICAgIG1wel90IHAgPSBNUFpfUk9JTklU X04gKCZmYWN0b3JzLnBbaSAtIDFdLCAxKTsKKyAgICAgIG1wX2ZhY3Rvcl9pbnNlcnQgKG1w X2ZhY3RvcnMsIHAsIGZhY3RvcnMuZVtpIC0gMV0pOworICAgIH0KKworICByZXR1cm4gdHJ1 ZTsKK30KKworLyogSW5zZXJ0IGludG8gTVBfRkFDVE9SUyB0aGUgZmFjdG9ycyBvZiBOIGlm IE4gPCBCXjIgLyAyLCBhbmQKKyAgIHJldHVybiB0cnVlLiAgT3RoZXJ3aXNlLCByZXR1cm4g ZmFsc2UuICBOIG11c3QgYmUgb2RkLiAgKi8KK3N0YXRpYyBib29sCittcF9maW5pc2hfaW5f c2luZ2xlIChzdHJ1Y3QgbXBfZmFjdG9ycyAqbXBfZmFjdG9ycywgbXB6X3QgbikKK3sKKyAg cmV0dXJuIG1wX2ZpbmlzaF91cF9pbl9zaW5nbGUgKG1wX2ZhY3RvcnMsIG4sIDApOworfQor CisvKiBSZXR1cm4gc29tZSBvciBhbGwgZmFjdG9ycyBvZiBULgorICAgRGl2aWRlIFQgYnkg dGhlIGZhY3RvcnMgZm91bmQuICAqLworc3RhdGljIHN0cnVjdCBtcF9mYWN0b3JzCittcF9m YWN0b3JfdXNpbmdfZGl2aXNpb24gKG1wel90IHQpCit7CisgIGRldm1zZyAoIlt0cmlhbCBk aXZpc2lvbl0gIik7CisgIHN0cnVjdCBtcF9mYWN0b3JzIGZhY3RvcnMgPSBtcF9ub19mYWN0 b3JzICgpOworCisgIG1wX2JpdGNudF90IG0gPSBtcHpfc2NhbjEgKHQsIDApOworICBpZiAo bSkKKyAgICB7CisgICAgICBtcHpfZmRpdl9xXzJleHAgKHQsIHQsIG0pOworICAgICAgbXBf ZmFjdG9yX2luc2VydDEgKCZmYWN0b3JzLCAyLCBtKTsKKyAgICAgIGlmIChtcF9maW5pc2hf aW5fc2luZ2xlICgmZmFjdG9ycywgdCkpCisgICAgICAgIHJldHVybiBmYWN0b3JzOworICAg IH0KKworICBmb3IgKGlkeF90IGkgPSAwOyBpIDwgUFJJTUVTX1BUQUJfRU5UUklFUzsgaSsr KQorICAgIHsKKyAgICAgIG1wX2xpbWJfdCBkID0gcHJpbWVzX3B0YWJbaV07CisgICAgICBm b3IgKG0gPSAwOyBtcHpfZGl2aXNpYmxlX3VpX3AgKHQsIGQpOyBtKyspCiAgICAgICAgIHsK LSAgICAgICAgICBtcHpfdGRpdl9xX3VpICh0LCB0LCBkKTsKLSAgICAgICAgICBtcF9mYWN0 b3JfaW5zZXJ0X3VpIChmYWN0b3JzLCBkKTsKKyAgICAgICAgICBtcHpfZGl2ZXhhY3RfdWkg KHQsIHQsIGQpOworICAgICAgICAgIGlmIChtcF9maW5pc2hfdXBfaW5fc2luZ2xlICgmZmFj dG9ycywgdCwgaSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1wX2ZhY3Rvcl9p bnNlcnQxICgmZmFjdG9ycywgZCwgbSArIDEpOworICAgICAgICAgICAgICByZXR1cm4gZmFj dG9yczsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgaWYgKG0pCisgICAgICAg IG1wX2ZhY3Rvcl9pbnNlcnQxICgmZmFjdG9ycywgZCwgbSk7CisgICAgICBzdGF0aWNfYXNz ZXJ0IChTUVVBUkVfT0ZfRklSU1RfT01JVFRFRF9QUklNRQorICAgICAgICAgICAgICAgICAg ICAgPD0gTUlOIChNUF9MSU1CX01BWCwgVUxPTkdfTUFYKSk7CisgICAgICBpZiAobXB6X2Nt cF91aSAodCwgZCAqIGQpIDwgMCkKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gIG1wel9j bGVhciAocSk7CisgIHJldHVybiBmYWN0b3JzOwogfQogCiAvKiBFbnRyeSBpIGNvbnRhaW5z ICgyaSsxKV4oLTEpIG1vZCAyXjguICAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg IGJpbnZlcnRfdGFibGVbMTI4XSA9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaW52 ZXJ0X3RhYmxlWzEyOF0gPQogewogICAweDAxLCAweEFCLCAweENELCAweEI3LCAweDM5LCAw eEEzLCAweEM1LCAweEVGLAogICAweEYxLCAweDFCLCAweDNELCAweEE3LCAweDI5LCAweDEz LCAweDM1LCAweERGLApAQCAtODgyLDM5ICsxMDAwLDI5IEBAIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyICBiaW52ZXJ0X3RhYmxlWzEyOF0gPQogICAweDExLCAweDNCLCAweDVELCAw eEM3LCAweDQ5LCAweDMzLCAweDU1LCAweEZGCiB9OwogCi0vKiBDb21wdXRlIG5eKC0xKSBt b2QgQiwgdXNpbmcgYSBOZXd0b24gaXRlcmF0aW9uLiAgKi8KLSNkZWZpbmUgYmludihpbnYs bikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aWRlX3VpbnQgIF9fbiA9IChuKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aWRl X3VpbnQgIF9faW52OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2ludiA9IGJpbnZlcnRf dGFibGVbKF9fbiAvIDIpICYgMHg3Rl07IC8qICA4ICovICAgICAgICAgICAgICAgICAgIFwK LSAgICBpZiAoV19UWVBFX1NJWkUgPiA4KSAgIF9faW52ID0gMiAqIF9faW52IC0gX19pbnYg KiBfX2ludiAqIF9fbjsgICAgIFwKLSAgICBpZiAoV19UWVBFX1NJWkUgPiAxNikgIF9faW52 ID0gMiAqIF9faW52IC0gX19pbnYgKiBfX2ludiAqIF9fbjsgICAgIFwKLSAgICBpZiAoV19U WVBFX1NJWkUgPiAzMikgIF9faW52ID0gMiAqIF9faW52IC0gX19pbnYgKiBfX2ludiAqIF9f bjsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoV19UWVBFX1NJWkUgPiA2 NCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaW50ICBfX2ludmJpdHMgPSA2NDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICBfX2ludiA9IDIgKiBfX2ludiAtIF9faW52ICogX19pbnYgKiBf X247ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBfX2ludmJpdHMgKj0gMjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgfSB3aGlsZSAoX19pbnZiaXRzIDwgV19UWVBFX1NJWkUpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAoaW52KSA9IF9faW52OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKKy8qIENvbXB1dGUgbl4o LTEpIG1vZCBCLiAgbiBtdXN0IGJlIG9kZC4gICovCitzdGF0aWMgbXBfbGltYl90CitiaW52 X2xpbWIgKG1wX2xpbWJfdCBuKQoreworICBtcF9saW1iX3QgaW52ID0gYmludmVydF90YWJs ZVsobiAvIDIpICYgMHg3Rl07CisgIGlmICggOCA8IFdfVFlQRV9TSVpFKSBpbnYgPSAyICog aW52IC0gaW52ICogaW52ICogbjsKKyAgaWYgKDE2IDwgV19UWVBFX1NJWkUpIGludiA9IDIg KiBpbnYgLSBpbnYgKiBpbnYgKiBuOworICBpZiAoMzIgPCBXX1RZUEVfU0laRSkgaW52ID0g MiAqIGludiAtIGludiAqIGludiAqIG47CisgIGZvciAoaW50IGludmJpdHMgPSA2NDsgaW52 Yml0cyA8IFdfVFlQRV9TSVpFOyBpbnZiaXRzICo9IDIpCisgICAgaW52ID0gMiAqIGludiAt IGludiAqIGludiAqIG47CisgIHJldHVybiBpbnY7Cit9CiAKIC8qIHEgPSB1IC8gZCwgYXNz dW1pbmcgZHx1LiAgKi8KICNkZWZpbmUgZGl2ZXhhY3RfMjEocTEsIHEwLCB1MSwgdTAsIGQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICB3aWRlX3VpbnQgX2RpLCBfcTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBiaW52IChfZGksIChkKSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtcF9s aW1iX3QgX2RpLCBfcTA7CQkJCQkJCVwKKyAgICBfZGkgPSBiaW52X2xpbWIgKGQpOwkJCQkJ CVwKICAgICBfcTAgPSAodTApICogX2RpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoKHUxKSA+PSAoZCkpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgd2lkZV91aW50IF9wMTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTUFZQkVfVU5VU0VE IHdpZGVfaW50IF9wMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgbXBfbGltYl90IF9wMTsJCQkJCQkJXAorICAgICAgICBNQVlCRV9VTlVTRUQg bXBfbGltYl90IF9wMDsJCQkJCVwKICAgICAgICAgdW11bF9wcG1tIChfcDEsIF9wMCwgX3Ew LCBkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKHEx KSA9ICgodTEpIC0gX3AxKSAqIF9kaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKICAgICAgICAgKHEwKSA9IF9xMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTkyNCwxOSArMTAzMiwxOSBAQCBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgYmludmVydF90YWJsZVsxMjhdID0KICAgICAg ICAgKHEwKSA9IF9xMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgKHExKSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgfSB3aGlsZSAoMCkKKyAgfSB3aGlsZSAoZmFsc2UpCiAKIC8qIHggQiAobW9kIG4p LiAgKi8KICNkZWZpbmUgcmVkY2lmeShyX3ByaW0sIHIsIG4pICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBN QVlCRV9VTlVTRUQgd2lkZV91aW50IF9yZWRjaWZ5X3E7CQkJCQlcCisgICAgTUFZQkVfVU5V U0VEIG1wX2xpbWJfdCBfcmVkY2lmeV9xOwkJCQkJXAogICAgIHVkaXZfcXJubmQgKF9yZWRj aWZ5X3EsIHJfcHJpbSwgciwgMCwgbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICB9IHdoaWxlICgwKQorICB9IHdoaWxlIChmYWxzZSkKIAogLyogeCBCXjIgKG1vZCBuKS4g IFJlcXVpcmVzIHggPiAwLCBuMSA8IEIvMi4gICovCiAjZGVmaW5lIHJlZGNpZnkyKHIxLCBy MCwgeCwgbjEsIG4wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgd2lkZV91aW50IF9yMSwgX3IwLCBfaTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbXBfbGltYl90 IF9yMSwgX3IwLCBfaTsJCQkJCQlcCiAgICAgaWYgKCh4KSA8IChuMSkpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAgICAgIF9yMSA9ICh4KTsgX3IwID0gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05NTAsMjAgKzEwNTgsMjAgQEAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgIGJpbnZlcnRfdGFibGVbMTI4XSA9CiAgICAg d2hpbGUgKF9pLS0gPiAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCiAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGxzaDIgKF9y MSwgX3IwLCBfcjEsIF9yMCwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgIGlmIChnZTIgKF9yMSwgX3IwLCAobjEpLCAobjApKSkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3ViX2RkbW1zcyAoX3IxLCBf cjAsIF9yMSwgX3IwLCAobjEpLCAobjApKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAg IGlmIChnZTIgKF9yMSwgX3IwLCBuMSwgbjApKQkJCQkJXAorICAgICAgICAgIHN1Yl9kZG1t c3MgKF9yMSwgX3IwLCBfcjEsIF9yMCwgbjEsIG4wKTsJCQlcCiAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgKHIxKSA9IF9yMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKHIwKSA9IF9yMDsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hp bGUgKDApCisgIH0gd2hpbGUgKGZhbHNlKQogCiAvKiBNb2R1bGFyIHR3by13b3JkIG11bHRp cGxpY2F0aW9uLCByID0gYSAqIGIgbW9kIG0sIHdpdGggbWkgPSBtXigtMSkgbW9kIEIuCiAg ICBCb3RoIGEgYW5kIGIgbXVzdCBiZSBpbiByZWRjIGZvcm0sIHRoZSByZXN1bHQgd2lsbCBi ZSBpbiByZWRjIGZvcm0gdG9vLiAgKi8KLXN0YXRpYyBpbmxpbmUgd2lkZV91aW50Ci1tdWxy ZWRjICh3aWRlX3VpbnQgYSwgd2lkZV91aW50IGIsIHdpZGVfdWludCBtLCB3aWRlX3VpbnQg bWkpCitzdGF0aWMgaW5saW5lIG1wX2xpbWJfdAorbXVscmVkYyAobXBfbGltYl90IGEsIG1w X2xpbWJfdCBiLCBtcF9saW1iX3QgbSwgbXBfbGltYl90IG1pKQogewotICB3aWRlX3VpbnQg cmgsIHJsLCBxLCB0aCwgeGg7Ci0gIE1BWUJFX1VOVVNFRCB3aWRlX3VpbnQgdGw7CisgIG1w X2xpbWJfdCByaCwgcmwsIHEsIHRoLCB4aDsKKyAgTUFZQkVfVU5VU0VEIG1wX2xpbWJfdCB0 bDsKIAogICB1bXVsX3BwbW0gKHJoLCBybCwgYSwgYik7CiAgIHEgPSBybCAqIG1pOwpAQCAt OTc3LDE3ICsxMDg1LDE3IEBAIG11bHJlZGMgKHdpZGVfdWludCBhLCB3aWRlX3VpbnQgYiwg d2lkZV91aW50IG0sIHdpZGVfdWludCBtaSkKIC8qIE1vZHVsYXIgdHdvLXdvcmQgbXVsdGlw bGljYXRpb24sIHIgPSBhICogYiBtb2QgbSwgd2l0aCBtaSA9IG1eKC0xKSBtb2QgQi4KICAg IEJvdGggYSBhbmQgYiBtdXN0IGJlIGluIHJlZGMgZm9ybSwgdGhlIHJlc3VsdCB3aWxsIGJl IGluIHJlZGMgZm9ybSB0b28uCiAgICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhlIG1v c3Qgc2lnbmlmaWNhbnQgYml0IG9mIG0gbXVzdCBiZSBjbGVhci4gICovCi1zdGF0aWMgd2lk ZV91aW50Ci1tdWxyZWRjMiAod2lkZV91aW50ICpyMXAsCi0gICAgICAgICAgd2lkZV91aW50 IGExLCB3aWRlX3VpbnQgYTAsIHdpZGVfdWludCBiMSwgd2lkZV91aW50IGIwLAotICAgICAg ICAgIHdpZGVfdWludCBtMSwgd2lkZV91aW50IG0wLCB3aWRlX3VpbnQgbWkpCitzdGF0aWMg bXBfbGltYl90CittdWxyZWRjMiAobXBfbGltYl90ICpyMXAsCisgICAgICAgICAgbXBfbGlt Yl90IGExLCBtcF9saW1iX3QgYTAsIG1wX2xpbWJfdCBiMSwgbXBfbGltYl90IGIwLAorICAg ICAgICAgIG1wX2xpbWJfdCBtMSwgbXBfbGltYl90IG0wLCBtcF9saW1iX3QgbWkpCiB7Ci0g IHdpZGVfdWludCByMSwgcjAsIHEsIHAxLCB0MSwgdDAsIHMxLCBzMDsKLSAgTUFZQkVfVU5V U0VEIHdpZGVfdWludCBwMDsKKyAgbXBfbGltYl90IHIxLCByMCwgcSwgcDEsIHQxLCB0MCwg czEsIHMwOworICBNQVlCRV9VTlVTRUQgbXBfbGltYl90IHAwOwogICBtaSA9IC1taTsKICAg YWZmaXJtICgobTEgPj4gKFdfVFlQRV9TSVpFIC0gMSkpID09IDApOwogCi0gIC8qIEZpcnN0 IGNvbXB1dGUgYTAgKiA8YjEsIGIwPiBCXnstMX0KKyAgLyogRmlyc3QgY29tcHV0ZSBhMCAq IChiMSxiMCkgQl57LTF9CiAgICAgICAgICstLS0tLSsKICAgICAgICAgfGEwIGIwfAogICAg ICArLS0rLS0rLS0rCkBAIC0xMDEwLDcgKzExMTgsNyBAQCBtdWxyZWRjMiAod2lkZV91aW50 ICpyMXAsCiAgIGFkZF9zc2FhYWEgKHIxLCByMCwgcjEsIHIwLCAwLCB0MSk7CiAgIGFkZF9z c2FhYWEgKHIxLCByMCwgcjEsIHIwLCBzMSwgczApOwogCi0gIC8qIE5leHQsIChhMSAqIDxi MSwgYjA+ICsgPHIxLCByMD4gQl57LTF9CisgIC8qIE5leHQsIChhMSAqIChiMSxiMCkgKyAo cjEscjApIEJeey0xfQogICAgICAgICArLS0tLS0rCiAgICAgICAgIHxhMSBiMHwKICAgICAg ICAgKy0tKy0tKwpAQCAtMTA0NCw0MjggKzExNTIsNjEgQEAgbXVscmVkYzIgKHdpZGVfdWlu dCAqcjFwLAogICByZXR1cm4gcjA7CiB9CiAKLUFUVFJJQlVURV9DT05TVAotc3RhdGljIHdp ZGVfdWludAotcG93bSAod2lkZV91aW50IGIsIHdpZGVfdWludCBlLCB3aWRlX3VpbnQgbiwg d2lkZV91aW50IG5pLCB3aWRlX3VpbnQgb25lKQotewotICB3aWRlX3VpbnQgeSA9IG9uZTsK LQotICBpZiAoZSAmIDEpCi0gICAgeSA9IGI7Ci0KLSAgd2hpbGUgKGUgIT0gMCkKLSAgICB7 Ci0gICAgICBiID0gbXVscmVkYyAoYiwgYiwgbiwgbmkpOwotICAgICAgZSA+Pj0gMTsKLQot ICAgICAgaWYgKGUgJiAxKQotICAgICAgICB5ID0gbXVscmVkYyAoeSwgYiwgbiwgbmkpOwot ICAgIH0KLQotICByZXR1cm4geTsKLX0KLQotQVRUUklCVVRFX1BVUkUgc3RhdGljIHV1aW50 Ci1wb3dtMiAoY29uc3Qgd2lkZV91aW50ICpicCwgY29uc3Qgd2lkZV91aW50ICplcCwgY29u c3Qgd2lkZV91aW50ICpucCwKLSAgICAgICB3aWRlX3VpbnQgbmksIGNvbnN0IHdpZGVfdWlu dCAqb25lKQotewotICB3aWRlX3VpbnQgcjEsIHIwLCBiMSwgYjAsIG4xLCBuMDsKLSAgaW50 IGk7Ci0gIHdpZGVfdWludCBlOwotCi0gIGIwID0gYnBbMF07Ci0gIGIxID0gYnBbMV07Ci0g IG4wID0gbnBbMF07Ci0gIG4xID0gbnBbMV07Ci0KLSAgcjAgPSBvbmVbMF07Ci0gIHIxID0g b25lWzFdOwotCi0gIGZvciAoZSA9IGVwWzBdLCBpID0gV19UWVBFX1NJWkU7IGkgPiAwOyBp LS0sIGUgPj49IDEpCi0gICAgewotICAgICAgaWYgKGUgJiAxKQotICAgICAgICB7Ci0gICAg ICAgICAgd2lkZV91aW50IHIxbTE7Ci0gICAgICAgICAgcjAgPSBtdWxyZWRjMiAoJnIxbTEs IHIxLCByMCwgYjEsIGIwLCBuMSwgbjAsIG5pKTsKLSAgICAgICAgICByMSA9IHIxbTE7Ci0g ICAgICAgIH0KLSAgICAgIHdpZGVfdWludCByMW07Ci0gICAgICBiMCA9IG11bHJlZGMyICgm cjFtLCBiMSwgYjAsIGIxLCBiMCwgbjEsIG4wLCBuaSk7Ci0gICAgICBiMSA9IHIxbTsKLSAg ICB9Ci0gIGZvciAoZSA9IGVwWzFdOyBlID4gMDsgZSA+Pj0gMSkKLSAgICB7Ci0gICAgICBp ZiAoZSAmIDEpCi0gICAgICAgIHsKLSAgICAgICAgICB3aWRlX3VpbnQgcjFtMTsKLSAgICAg ICAgICByMCA9IG11bHJlZGMyICgmcjFtMSwgcjEsIHIwLCBiMSwgYjAsIG4xLCBuMCwgbmkp OwotICAgICAgICAgIHIxID0gcjFtMTsKLSAgICAgICAgfQotICAgICAgd2lkZV91aW50IHIx bTsKLSAgICAgIGIwID0gbXVscmVkYzIgKCZyMW0sIGIxLCBiMCwgYjEsIGIwLCBuMSwgbjAs IG5pKTsKLSAgICAgIGIxID0gcjFtOwotICAgIH0KLSAgcmV0dXJuIG1ha2VfdXVpbnQgKHIx LCByMCk7Ci19Ci0KLUFUVFJJQlVURV9DT05TVAotc3RhdGljIGJvb2wKLW1pbGxlcnJhYmlu ICh3aWRlX3VpbnQgbiwgd2lkZV91aW50IG5pLCB3aWRlX3VpbnQgYiwgd2lkZV91aW50IHEs Ci0gICAgICAgICAgICAgaW50IGssIHdpZGVfdWludCBvbmUpCi17Ci0gIHdpZGVfdWludCB5 ID0gcG93bSAoYiwgcSwgbiwgbmksIG9uZSk7Ci0KLSAgd2lkZV91aW50IG5tMSA9IG4gLSBv bmU7ICAgICAgLyogLTEsIGJ1dCBpbiByZWRjIHJlcHJlc2VudGF0aW9uLiAgKi8KLQotICBp ZiAoeSA9PSBvbmUgfHwgeSA9PSBubTEpCi0gICAgcmV0dXJuIHRydWU7Ci0KLSAgZm9yIChp bnQgaSA9IDE7IGkgPCBrOyBpKyspCi0gICAgewotICAgICAgeSA9IG11bHJlZGMgKHksIHks IG4sIG5pKTsKLQotICAgICAgaWYgKHkgPT0gbm0xKQotICAgICAgICByZXR1cm4gdHJ1ZTsK LSAgICAgIGlmICh5ID09IG9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg cmV0dXJuIGZhbHNlOwotfQotCi1BVFRSSUJVVEVfUFVSRSBzdGF0aWMgYm9vbAotbWlsbGVy cmFiaW4yIChjb25zdCB3aWRlX3VpbnQgKm5wLCB3aWRlX3VpbnQgbmksIGNvbnN0IHdpZGVf dWludCAqYnAsCi0gICAgICAgICAgICAgIGNvbnN0IHdpZGVfdWludCAqcXAsIGludCBrLCBj b25zdCB3aWRlX3VpbnQgKm9uZSkKLXsKLSAgd2lkZV91aW50IHkxLCB5MCwgbm0xXzEsIG5t MV8wLCByMW07Ci0KLSAgdXVzZXQgKCZ5MSwgJnkwLCBwb3dtMiAoYnAsIHFwLCBucCwgbmks IG9uZSkpOwotCi0gIGlmICh5MCA9PSBvbmVbMF0gJiYgeTEgPT0gb25lWzFdKQotICAgIHJl dHVybiB0cnVlOwotCi0gIHN1Yl9kZG1tc3MgKG5tMV8xLCBubTFfMCwgbnBbMV0sIG5wWzBd LCBvbmVbMV0sIG9uZVswXSk7Ci0KLSAgaWYgKHkwID09IG5tMV8wICYmIHkxID09IG5tMV8x KQotICAgIHJldHVybiB0cnVlOwotCi0gIGZvciAoaW50IGkgPSAxOyBpIDwgazsgaSsrKQot ICAgIHsKLSAgICAgIHkwID0gbXVscmVkYzIgKCZyMW0sIHkxLCB5MCwgeTEsIHkwLCBucFsx XSwgbnBbMF0sIG5pKTsKLSAgICAgIHkxID0gcjFtOwotCi0gICAgICBpZiAoeTAgPT0gbm0x XzAgJiYgeTEgPT0gbm0xXzEpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYgKHkw ID09IG9uZVswXSAmJiB5MSA9PSBvbmVbMV0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg ICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KK3N0YXRpYyBib29sIG1wX3ByaW1lX3AgKG1wel90 KTsKIAorLyogSXMgTiBwcmltZT8gIE4gY2Fubm90IGJlIGV2ZW4gb3IgYmUgYSBjb21wb3Np dGUgbnVtYmVyIGxlc3MgdGhhbgorICAgU1FVQVJFX09GX0ZJUlNUX09NSVRURURfUFJJTUUu ICAqLwogc3RhdGljIGJvb2wKLW1wX21pbGxlcnJhYmluIChtcHpfc3JjcHRyIG4sIG1wel9z cmNwdHIgbm0xLCBtcHpfcHRyIHgsIG1wel9wdHIgeSwKLSAgICAgICAgICAgICAgICBtcHpf c3JjcHRyIHEsIG1wX2JpdGNudF90IGspCitwcmltZV9wIChtcF9saW1iX3QgbikKIHsKLSAg bXB6X3Bvd20gKHksIHgsIHEsIG4pOwotCi0gIGlmIChtcHpfY21wX3VpICh5LCAxKSA9PSAw IHx8IG1wel9jbXAgKHksIG5tMSkgPT0gMCkKLSAgICByZXR1cm4gdHJ1ZTsKLQotICBmb3Ig KG1wX2JpdGNudF90IGkgPSAxOyBpIDwgazsgaSsrKQotICAgIHsKLSAgICAgIG1wel9wb3dt X3VpICh5LCB5LCAyLCBuKTsKLSAgICAgIGlmIChtcHpfY21wICh5LCBubTEpID09IDApCi0g ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYgKG1wel9jbXBfdWkgKHksIDEpID09IDAp Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQot LyogTHVjYXMnIHByaW1lIHRlc3QuICBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgdmFyeSBn cmVhdGx5LCB1cCB0byBhIGZldyBkb3plbgotICAgaGF2ZSBiZWVuIG9ic2VydmVkLiAgVGhl IGF2ZXJhZ2Ugc2VlbSB0byBiZSBhYm91dCAyLiAgKi8KLXN0YXRpYyBib29sIEFUVFJJQlVU RV9QVVJFCi1wcmltZV9wICh3aWRlX3VpbnQgbikKLXsKLSAgYm9vbCBpc19wcmltZTsKLSAg d2lkZV91aW50IGFfcHJpbSwgb25lLCBuaTsKLSAgc3RydWN0IGZhY3RvcnMgZmFjdG9yczsK LQogICBpZiAobiA8PSAxKQogICAgIHJldHVybiBmYWxzZTsKIAotICB3aWRlX3VpbnQgY2Fz dF9vdXRfbGltaXQKLSAgICA9ICh3aWRlX3VpbnQpIEZJUlNUX09NSVRURURfUFJJTUUgKiBG SVJTVF9PTUlUVEVEX1BSSU1FOwotCi0jaWZuZGVmIEVYSElCSVRfSU5UMTI4X0JVRwotICAv KiBGSVhNRTogRG8gdGhlIHNtYWxsLXByaW1lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9u bHkgaWYKLSAgICAgd2lkZV91aW50IGlzIGV4YWN0bHkgNjQgYml0cyB3aWRlLiAgV2UgZG9u J3Qga25vdyB3aHkgdGhlIGNvZGUKLSAgICAgbWlzYmVoYXZlcyB3aGVuIHdpZGVfdWludCBp cyB3aWRlcjsgZS5nLiwgd2hlbiBjb21waWxlZCB3aXRoCi0gICAgICdnY2MgLURVU0VfSU5U MTI4IC1ERVhISUJJVF9JTlQxMjhfQlVHJywgJ2ZhY3RvcicgbWlzaGFuZGxlcwotICAgICAz NDAyODIzNjY5MjA5Mzg0NjM0NjMzNzQ2MDc0MzE3NjgyMTEzNTUuICAqLwotICBpZiAoV19U WVBFX1NJWkUgIT0gNjQpCi0gICAgY2FzdF9vdXRfbGltaXQgPSAyOwotI2VuZGlmCi0KICAg LyogV2UgaGF2ZSBhbHJlYWR5IGNhc3Qgb3V0IHNtYWxsIHByaW1lcy4gICovCi0gIGlmIChu IDwgY2FzdF9vdXRfbGltaXQpCisgIGlmIChuIDwgU1FVQVJFX09GX0ZJUlNUX09NSVRURURf UFJJTUUpCiAgICAgcmV0dXJuIHRydWU7CiAKLSAgLyogUHJlY29tcHV0YXRpb24gZm9yIE1p bGxlci1SYWJpbi4gICovCi0gIGludCBrID0gc3RkY190cmFpbGluZ196ZXJvcyAobiAtIDEp OwotICB3aWRlX3VpbnQgcSA9IChuIC0gMSkgPj4gazsKLQotICB3aWRlX3VpbnQgYSA9IDI7 Ci0gIGJpbnYgKG5pLCBuKTsgICAgICAgICAgICAgICAgIC8qIG5pIDwtIDEvbiBtb2QgQiAq LwotICByZWRjaWZ5IChvbmUsIDEsIG4pOwotICBhZGRtb2QgKGFfcHJpbSwgb25lLCBvbmUs IG4pOyAvKiBpLmUuLCByZWRjaWZ5IGEgPSAyICovCi0KLSAgLyogUGVyZm9ybSBhIE1pbGxl ci1SYWJpbiB0ZXN0LCBmaW5kcyBtb3N0IGNvbXBvc2l0ZXMgcXVpY2tseS4gICovCi0gIGlm ICghbWlsbGVycmFiaW4gKG4sIG5pLCBhX3ByaW0sIHEsIGssIG9uZSkpCi0gICAgcmV0dXJu IGZhbHNlOwotCi0gIGlmIChmbGFnX3Byb3ZlX3ByaW1hbGl0eSkKLSAgICB7Ci0gICAgICAv KiBGYWN0b3Igbi0xIGZvciBMdWNhcy4gICovCi0gICAgICBmYWN0b3IgKDAsIG4gLSAxLCAm ZmFjdG9ycyk7Ci0gICAgfQotCi0gIC8qIExvb3AgdW50aWwgTHVjYXMgcHJvdmVzIG91ciBu dW1iZXIgcHJpbWUsIG9yIE1pbGxlci1SYWJpbiBwcm92ZXMgb3VyCi0gICAgIG51bWJlciBj b21wb3NpdGUuICAqLwotICBmb3IgKGlkeF90IHIgPSAwOyByIDwgUFJJTUVTX1BUQUJfRU5U UklFUzsgcisrKQotICAgIHsKLSAgICAgIGlmIChmbGFnX3Byb3ZlX3ByaW1hbGl0eSkKLSAg ICAgICAgewotICAgICAgICAgIGlzX3ByaW1lID0gdHJ1ZTsKLSAgICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGZhY3RvcnMubmZhY3RvcnMgJiYgaXNfcHJpbWU7IGkrKykKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgaXNfcHJpbWUKLSAgICAgICAgICAgICAgICA9IHBv d20gKGFfcHJpbSwgKG4gLSAxKSAvIGZhY3RvcnMucFtpXSwgbiwgbmksIG9uZSkgIT0gb25l OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLSAg ICAgICAgICAvKiBBZnRlciBlbm91Z2ggTWlsbGVyLVJhYmluIHJ1bnMsIGJlIGNvbnRlbnQu ICAqLwotICAgICAgICAgIGlzX3ByaW1lID0gKHIgPT0gTVJfUkVQUyAtIDEpOwotICAgICAg ICB9Ci0KLSAgICAgIGlmIChpc19wcmltZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg ICAgIGEgKz0gcHJpbWVzX2RpZmZbcl07ICAgICAgLyogRXN0YWJsaXNoIG5ldyBiYXNlLiAg Ki8KLQotICAgICAgLyogVGhlIGZvbGxvd2luZyBpcyBlcXVpdmFsZW50IHRvIHJlZGNpZnkg KGFfcHJpbSwgYSwgbikuICBJdCBydW5zIGZhc3RlcgotICAgICAgICAgb24gbW9zdCBwcm9j ZXNzb3JzLCBzaW5jZSBpdCBhdm9pZHMgdWRpdl9xcm5uZC4gIElmIHdlIGdvIGRvd24gdGhl Ci0gICAgICAgICB1ZGl2X3Fybm5kX3ByZWludiBwYXRoLCB0aGlzIGNvZGUgc2hvdWxkIGJl IHJlcGxhY2VkLiAgKi8KLSAgICAgIHsKLSAgICAgICAgd2lkZV91aW50IHMxLCBzMDsKLSAg ICAgICAgdW11bF9wcG1tIChzMSwgczAsIG9uZSwgYSk7Ci0gICAgICAgIGlmIChMSUtFTFkg KHMxID09IDApKQotICAgICAgICAgIGFfcHJpbSA9IHMwICUgbjsKLSAgICAgICAgZWxzZQot ICAgICAgICAgIHsKLSAgICAgICAgICAgIE1BWUJFX1VOVVNFRCB3aWRlX3VpbnQgZHVtbXk7 Ci0gICAgICAgICAgICB1ZGl2X3Fybm5kIChkdW1teSwgYV9wcmltLCBzMSwgczAsIG4pOwot ICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKCFtaWxsZXJyYWJpbiAobiwgbmks IGFfcHJpbSwgcSwgaywgb25lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot ICBhZmZpcm0gKCEiTHVjYXMgcHJpbWUgdGVzdCBmYWlsdXJlLiAgVGhpcyBzaG91bGQgbm90 IGhhcHBlbiIpOworICBtcHpfdCBtbiA9IE1QWl9ST0lOSVRfTiAoJm4sIDEpOworICByZXR1 cm4gbXBfcHJpbWVfcCAobW4pOwogfQogCi1zdGF0aWMgYm9vbCBBVFRSSUJVVEVfUFVSRQot cHJpbWUyX3AgKHdpZGVfdWludCBuMSwgd2lkZV91aW50IG4wKQorLyogSXMgKG4xLG4wKSBw cmltZT8gIChuMSxuMCkgY2Fubm90IGJlIGV2ZW4gb3IgYmUgYSBjb21wb3NpdGUgbnVtYmVy CisgICBsZXNzIHRoYW4gU1FVQVJFX09GX0ZJUlNUX09NSVRURURfUFJJTUUuICAqLworc3Rh dGljIGJvb2wKK3ByaW1lMl9wIChtcF9saW1iX3QgbjEsIG1wX2xpbWJfdCBuMCkKIHsKLSAg d2lkZV91aW50IHFbMl0sIG5tMVsyXTsKLSAgd2lkZV91aW50IGFfcHJpbVsyXTsKLSAgd2lk ZV91aW50IG9uZVsyXTsKLSAgd2lkZV91aW50IG5hWzJdOwotICB3aWRlX3VpbnQgbmk7Ci0g IGludCBrOwotICBzdHJ1Y3QgZmFjdG9ycyBmYWN0b3JzOwotCiAgIGlmIChuMSA9PSAwKQog ICAgIHJldHVybiBwcmltZV9wIChuMCk7CiAKLSAgbm0xWzFdID0gbjEgLSAobjAgPT0gMCk7 Ci0gIG5tMVswXSA9IG4wIC0gMTsKLSAgaWYgKG5tMVswXSA9PSAwKQotICAgIHsKLSAgICAg IGFzc3VtZSAobm0xWzFdKTsKLSAgICAgIGsgPSBzdGRjX3RyYWlsaW5nX3plcm9zIChubTFb MV0pOwotCi0gICAgICBxWzBdID0gbm0xWzFdID4+IGs7Ci0gICAgICBxWzFdID0gMDsKLSAg ICAgIGsgKz0gV19UWVBFX1NJWkU7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgayA9 IHN0ZGNfdHJhaWxpbmdfemVyb3MgKG5tMVswXSk7Ci0gICAgICByc2gyIChxWzFdLCBxWzBd LCBubTFbMV0sIG5tMVswXSwgayk7Ci0gICAgfQotCi0gIHdpZGVfdWludCBhID0gMjsKLSAg YmludiAobmksIG4wKTsKLSAgcmVkY2lmeTIgKG9uZVsxXSwgb25lWzBdLCAxLCBuMSwgbjAp OwotICBhZGRtb2QyIChhX3ByaW1bMV0sIGFfcHJpbVswXSwgb25lWzFdLCBvbmVbMF0sIG9u ZVsxXSwgb25lWzBdLCBuMSwgbjApOwotCi0gIC8qIEZJWE1FOiBVc2Ugc2NhbGFycyBvciBw b2ludGVycyBpbiBhcmd1bWVudHM/ICBTb21lIGNvbnNpc3RlbmN5IG5lZWRlZC4gICovCi0g IG5hWzBdID0gbjA7Ci0gIG5hWzFdID0gbjE7Ci0KLSAgaWYgKCFtaWxsZXJyYWJpbjIgKG5h LCBuaSwgYV9wcmltLCBxLCBrLCBvbmUpKQotICAgIHJldHVybiBmYWxzZTsKLQotICBpZiAo ZmxhZ19wcm92ZV9wcmltYWxpdHkpCi0gICAgewotICAgICAgLyogRmFjdG9yIG4tMSBmb3Ig THVjYXMuICAqLwotICAgICAgZmFjdG9yIChubTFbMV0sIG5tMVswXSwgJmZhY3RvcnMpOwot ICAgIH0KLQotICAvKiBMb29wIHVudGlsIEx1Y2FzIHByb3ZlcyBvdXIgbnVtYmVyIHByaW1l LCBvciBNaWxsZXItUmFiaW4gcHJvdmVzIG91cgotICAgICBudW1iZXIgY29tcG9zaXRlLiAg Ki8KLSAgZm9yIChpZHhfdCByID0gMDsgciA8IFBSSU1FU19QVEFCX0VOVFJJRVM7IHIrKykK LSAgICB7Ci0gICAgICBib29sIGlzX3ByaW1lOwotICAgICAgd2lkZV91aW50IGVbMl07Ci0g ICAgICB1dWludCB5OwotCi0gICAgICBpZiAoZmxhZ19wcm92ZV9wcmltYWxpdHkpCi0gICAg ICAgIHsKLSAgICAgICAgICBpc19wcmltZSA9IHRydWU7Ci0gICAgICAgICAgaWYgKGhpIChm YWN0b3JzLnBsYXJnZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdpZGVfdWlu dCBwaTsKLSAgICAgICAgICAgICAgYmludiAocGksIGxvIChmYWN0b3JzLnBsYXJnZSkpOwot ICAgICAgICAgICAgICBlWzBdID0gcGkgKiBubTFbMF07Ci0gICAgICAgICAgICAgIGVbMV0g PSAwOwotICAgICAgICAgICAgICB5ID0gcG93bTIgKGFfcHJpbSwgZSwgbmEsIG5pLCBvbmUp OwotICAgICAgICAgICAgICBpc19wcmltZSA9IChsbyAoeSkgIT0gb25lWzBdIHx8IGhpICh5 KSAhPSBvbmVbMV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgZmFjdG9ycy5uZmFjdG9ycyAmJiBpc19wcmltZTsgaSsrKQotICAgICAgICAgICAg ewotICAgICAgICAgICAgICAvKiBGSVhNRTogV2UgYWx3YXlzIGhhdmUgdGhlIGZhY3RvciAy LiAgRG8gd2UgcmVhbGx5IG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgaGFuZGxlIGl0IGhl cmU/ICBXZSBoYXZlIGRvbmUgdGhlIHNhbWUgcG93ZXJpbmcgYXMgcGFydAotICAgICAgICAg ICAgICAgICBvZiBtaWxsZXJyYWJpbi4gICovCi0gICAgICAgICAgICAgIGlmIChmYWN0b3Jz LnBbaV0gPT0gMikKLSAgICAgICAgICAgICAgICByc2gyIChlWzFdLCBlWzBdLCBubTFbMV0s IG5tMVswXSwgMSk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkaXZl eGFjdF8yMSAoZVsxXSwgZVswXSwgbm0xWzFdLCBubTFbMF0sIGZhY3RvcnMucFtpXSk7Ci0g ICAgICAgICAgICAgIHkgPSBwb3dtMiAoYV9wcmltLCBlLCBuYSwgbmksIG9uZSk7Ci0gICAg ICAgICAgICAgIGlzX3ByaW1lID0gKGxvICh5KSAhPSBvbmVbMF0gfHwgaGkgKHkpICE9IG9u ZVsxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAg ewotICAgICAgICAgIC8qIEFmdGVyIGVub3VnaCBNaWxsZXItUmFiaW4gcnVucywgYmUgY29u dGVudC4gICovCi0gICAgICAgICAgaXNfcHJpbWUgPSAociA9PSBNUl9SRVBTIC0gMSk7Ci0g ICAgICAgIH0KLQotICAgICAgaWYgKGlzX3ByaW1lKQotICAgICAgICByZXR1cm4gdHJ1ZTsK LQotICAgICAgYSArPSBwcmltZXNfZGlmZltyXTsgICAgICAvKiBFc3RhYmxpc2ggbmV3IGJh c2UuICAqLwotICAgICAgcmVkY2lmeTIgKGFfcHJpbVsxXSwgYV9wcmltWzBdLCBhLCBuMSwg bjApOwotCi0gICAgICBpZiAoIW1pbGxlcnJhYmluMiAobmEsIG5pLCBhX3ByaW0sIHEsIGss IG9uZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgYWZmaXJtICghIkx1 Y2FzIHByaW1lIHRlc3QgZmFpbHVyZS4gIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iKTsKKyAg dXVpbnQgbiA9IG1ha2VfdXVpbnQgKG4xLCBuMCk7CisgIG1wel90IG1uID0gTVBaX1JPSU5J VF9OIChuLnV1LCAyKTsKKyAgcmV0dXJuIG1wX3ByaW1lX3AgKG1uKTsKIH0KIAorLyogSXMg TiBwcmltZT8gIE4gY2Fubm90IGJlIGV2ZW4gb3IgYmUgYSBjb21wb3NpdGUgbnVtYmVyIGxl c3MgdGhhbgorICAgU1FVQVJFX09GX0ZJUlNUX09NSVRURURfUFJJTUUuICAqLwogc3RhdGlj IGJvb2wKIG1wX3ByaW1lX3AgKG1wel90IG4pCiB7Ci0gIGJvb2wgaXNfcHJpbWU7Ci0gIG1w el90IHEsIGEsIG5tMSwgdG1wOwotICBzdHJ1Y3QgbXBfZmFjdG9ycyBmYWN0b3JzOwotCiAg IGlmIChtcHpfY21wX3VpIChuLCAxKSA8PSAwKQogICAgIHJldHVybiBmYWxzZTsKIAogICAv KiBXZSBoYXZlIGFscmVhZHkgY2FzdCBvdXQgc21hbGwgcHJpbWVzLiAgKi8KLSAgaWYgKG1w el9jbXBfdWkgKG4sIChsb25nKSBGSVJTVF9PTUlUVEVEX1BSSU1FICogRklSU1RfT01JVFRF RF9QUklNRSkgPCAwKQorICBpZiAobXB6X2NtcF91aSAobiwgU1FVQVJFX09GX0ZJUlNUX09N SVRURURfUFJJTUUpIDwgMCkKICAgICByZXR1cm4gdHJ1ZTsKIAotICBtcHpfaW5pdHMgKHEs IGEsIG5tMSwgdG1wLCBudWxscHRyKTsKLQotICAvKiBQcmVjb21wdXRhdGlvbiBmb3IgTWls bGVyLVJhYmluLiAgKi8KLSAgbXB6X3N1Yl91aSAobm0xLCBuLCAxKTsKLQotICAvKiBGaW5k IHEgYW5kIGssIHdoZXJlIHEgaXMgb2RkIGFuZCBuID0gMSArIDIqKmsgKiBxLiAgKi8KLSAg bXBfYml0Y250X3QgayA9IG1wel9zY2FuMSAobm0xLCAwKTsKLSAgbXB6X3RkaXZfcV8yZXhw IChxLCBubTEsIGspOwotCi0gIG1wel9zZXRfdWkgKGEsIDIpOwotCi0gIC8qIFBlcmZvcm0g YSBNaWxsZXItUmFiaW4gdGVzdCwgZmluZHMgbW9zdCBjb21wb3NpdGVzIHF1aWNrbHkuICAq LwotICBpZiAoIW1wX21pbGxlcnJhYmluIChuLCBubTEsIGEsIHRtcCwgcSwgaykpCi0gICAg ewotICAgICAgaXNfcHJpbWUgPSBmYWxzZTsKLSAgICAgIGdvdG8gcmV0MjsKLSAgICB9Ci0K LSAgaWYgKGZsYWdfcHJvdmVfcHJpbWFsaXR5KQotICAgIHsKLSAgICAgIC8qIEZhY3RvciBu LTEgZm9yIEx1Y2FzLiAgKi8KLSAgICAgIG1wel9zZXQgKHRtcCwgbm0xKTsKLSAgICAgIG1w X2ZhY3RvciAodG1wLCAmZmFjdG9ycyk7Ci0gICAgfQotCi0gIC8qIExvb3AgdW50aWwgTHVj YXMgcHJvdmVzIG91ciBudW1iZXIgcHJpbWUsIG9yIE1pbGxlci1SYWJpbiBwcm92ZXMgb3Vy Ci0gICAgIG51bWJlciBjb21wb3NpdGUuICAqLwotICBmb3IgKGlkeF90IHIgPSAwOyByIDwg UFJJTUVTX1BUQUJfRU5UUklFUzsgcisrKQotICAgIHsKLSAgICAgIGlmIChmbGFnX3Byb3Zl X3ByaW1hbGl0eSkKLSAgICAgICAgewotICAgICAgICAgIGlzX3ByaW1lID0gdHJ1ZTsKLSAg ICAgICAgICBmb3IgKGlkeF90IGkgPSAwOyBpIDwgZmFjdG9ycy5uZmFjdG9ycyAmJiBpc19w cmltZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtcHpfZGl2ZXhhY3Qg KHRtcCwgbm0xLCBmYWN0b3JzLnBbaV0pOwotICAgICAgICAgICAgICBtcHpfcG93bSAodG1w LCBhLCB0bXAsIG4pOwotICAgICAgICAgICAgICBpc19wcmltZSA9IG1wel9jbXBfdWkgKHRt cCwgMSkgIT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgZWxzZQotICAg ICAgICB7Ci0gICAgICAgICAgLyogQWZ0ZXIgZW5vdWdoIE1pbGxlci1SYWJpbiBydW5zLCBi ZSBjb250ZW50LiAgKi8KLSAgICAgICAgICBpc19wcmltZSA9IChyID09IE1SX1JFUFMgLSAx KTsKLSAgICAgICAgfQotCi0gICAgICBpZiAoaXNfcHJpbWUpCi0gICAgICAgIGdvdG8gcmV0 MTsKLQotICAgICAgbXB6X2FkZF91aSAoYSwgYSwgcHJpbWVzX2RpZmZbcl0pOyAgICAgICAg LyogRXN0YWJsaXNoIG5ldyBiYXNlLiAgKi8KLQotICAgICAgaWYgKCFtcF9taWxsZXJyYWJp biAobiwgbm0xLCBhLCB0bXAsIHEsIGspKQotICAgICAgICB7Ci0gICAgICAgICAgaXNfcHJp bWUgPSBmYWxzZTsKLSAgICAgICAgICBnb3RvIHJldDE7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgYWZmaXJtICghIkx1Y2FzIHByaW1lIHRlc3QgZmFpbHVyZS4gIFRoaXMgc2hvdWxkIG5v dCBoYXBwZW4iKTsKLQotIHJldDE6Ci0gIGlmIChmbGFnX3Byb3ZlX3ByaW1hbGl0eSkKLSAg ICBtcF9mYWN0b3JfY2xlYXIgKCZmYWN0b3JzKTsKLSByZXQyOgotICBtcHpfY2xlYXJzIChx LCBhLCBubTEsIHRtcCwgbnVsbHB0cik7Ci0KLSAgcmV0dXJuIGlzX3ByaW1lOworICByZXR1 cm4gISFtcHpfcHJvYmFiX3ByaW1lX3AgKG4sIE1SX1JFUFMpOwogfQogCisvKiBJbnNlcnQg aW50byBGQUNUT1JTIHRoZSByZXN1bHQgb2YgZmFjdG9yaW5nIE4sCisgICB1c2luZyBQb2xs YXJkLXJobyB3aXRoIHN0YXJ0aW5nIHZhbHVlIEEuICBOIG11c3QgYmUgb2RkLiAgKi8KIHN0 YXRpYyB2b2lkCi1mYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8gKHdpZGVfdWludCBuLCB1bnNp Z25lZCBsb25nIGludCBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmFj dG9ycyAqZmFjdG9ycykKK2ZhY3Rvcl91c2luZ19wb2xsYXJkX3JobyAoc3RydWN0IGZhY3Rv cnMgKmZhY3RvcnMsIG1wX2xpbWJfdCBuLCBtcF9saW1iX3QgYSkKIHsKLSAgd2lkZV91aW50 IHgsIHosIHksIFAsIHQsIG5pLCBnOworICBtcF9saW1iX3QgeCwgeiwgeSwgUCwgdCwgbmks IGc7CiAKLSAgdW5zaWduZWQgbG9uZyBpbnQgayA9IDE7Ci0gIHVuc2lnbmVkIGxvbmcgaW50 IGwgPSAxOworICBpbnRfZmFzdDY0X3QgayA9IDE7CisgIGludF9mYXN0NjRfdCBsID0gMTsK IAogICByZWRjaWZ5IChQLCAxLCBuKTsKICAgYWRkbW9kICh4LCBQLCBQLCBuKTsgICAgICAg ICAgLyogaS5lLiwgcmVkY2lmeSgyKSAqLwpAQCAtMTQ3NSw3ICsxMjE2LDcgQEAgZmFjdG9y X3VzaW5nX3BvbGxhcmRfcmhvICh3aWRlX3VpbnQgbiwgdW5zaWduZWQgbG9uZyBpbnQgYSwK ICAgICB7CiAgICAgICBhZmZpcm0gKGEgPCBuKTsKIAotICAgICAgYmludiAobmksIG4pOyAg ICAgICAgICAgICAvKiBGSVhNRTogd2hlbiBjb3VsZCB3ZSB1c2Ugb2xkICduaScgdmFsdWU/ ICAqLworICAgICAgbmkgPSBiaW52X2xpbWIgKG4pOwkvKiBGSVhNRTogd2hlbiBjb3VsZCB3 ZSB1c2Ugb2xkICduaScgdmFsdWU/ICAqLwogCiAgICAgICBmb3IgKDs7KQogICAgICAgICB7 CkBAIC0xNDg3LDcgKzEyMjgsNyBAQCBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8gKHdpZGVf dWludCBuLCB1bnNpZ25lZCBsb25nIGludCBhLAogICAgICAgICAgICAgICBzdWJtb2QgKHQs IHosIHgsIG4pOwogICAgICAgICAgICAgICBQID0gbXVscmVkYyAoUCwgdCwgbiwgbmkpOwog Ci0gICAgICAgICAgICAgIGlmIChrICUgMzIgPT0gMSkKKyAgICAgICAgICAgICAgaWYgKChr ICYgMzEpID09IDEpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgaWYg KGdjZF9vZGQgKFAsIG4pICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFjdG9y X2ZvdW5kOwpAQCAtMTQ5OSw3ICsxMjQwLDcgQEAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhv ICh3aWRlX3VpbnQgbiwgdW5zaWduZWQgbG9uZyBpbnQgYSwKICAgICAgICAgICB6ID0geDsK ICAgICAgICAgICBrID0gbDsKICAgICAgICAgICBsID0gMiAqIGw7Ci0gICAgICAgICAgZm9y ICh1bnNpZ25lZCBsb25nIGludCBpID0gMDsgaSA8IGs7IGkrKykKKyAgICAgICAgICBmb3Ig KGludF9mYXN0NjRfdCBpID0gMDsgaSA8IGs7IGkrKykKICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgeCA9IG11bHJlZGMgKHgsIHgsIG4sIG5pKTsKICAgICAgICAgICAgICAgYWRk bW9kICh4LCB4LCBhLCBuKTsKQEAgLTE1MjEsMTQgKzEyNjIsMTQgQEAgZmFjdG9yX3VzaW5n X3BvbGxhcmRfcmhvICh3aWRlX3VpbnQgbiwgdW5zaWduZWQgbG9uZyBpbnQgYSwKICAgICAg IGlmIChuID09IGcpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBGb3VuZCBuIGl0c2VsZiBh cyBmYWN0b3IuICBSZXN0YXJ0IHdpdGggZGlmZmVyZW50IHBhcmFtcy4gICovCi0gICAgICAg ICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvIChuLCBhICsgMSwgZmFjdG9ycyk7CisgICAg ICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvIChmYWN0b3JzLCBuLCBhICsgMSk7CiAg ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgIG4gPSBuIC8gZzsKIAogICAg ICAgaWYgKCFwcmltZV9wIChnKSkKLSAgICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhv IChnLCBhICsgMSwgZmFjdG9ycyk7CisgICAgICAgIGZhY3Rvcl91c2luZ19wb2xsYXJkX3Jo byAoZmFjdG9ycywgZywgYSArIDEpOwogICAgICAgZWxzZQogICAgICAgICBmYWN0b3JfaW5z ZXJ0IChmYWN0b3JzLCBnKTsKIApAQCAtMTU0NSwxMyArMTI4NiwxMyBAQCBmYWN0b3JfdXNp bmdfcG9sbGFyZF9yaG8gKHdpZGVfdWludCBuLCB1bnNpZ25lZCBsb25nIGludCBhLAogfQog CiBzdGF0aWMgdm9pZAotZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvMiAod2lkZV91aW50IG4x LCB3aWRlX3VpbnQgbjAsIHVuc2lnbmVkIGxvbmcgaW50IGEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZmFjdG9ycyAqZmFjdG9ycykKK2ZhY3Rvcl91c2luZ19wb2xs YXJkX3JobzIgKHN0cnVjdCBmYWN0b3JzICpmYWN0b3JzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXBfbGltYl90IG4xLCBtcF9saW1iX3QgbjAsIG1wX2xpbWJfdCBhKQogewot ICB3aWRlX3VpbnQgeDEsIHgwLCB6MSwgejAsIHkxLCB5MCwgUDEsIFAwLCB0MSwgdDAsIG5p LCBnMSwgZzAsIHIxbTsKKyAgbXBfbGltYl90IHgxLCB4MCwgejEsIHowLCB5MSwgeTAsIFAx LCBQMCwgdDEsIHQwLCBnMSwgZzAsIHIxbTsKIAotICB1bnNpZ25lZCBsb25nIGludCBrID0g MTsKLSAgdW5zaWduZWQgbG9uZyBpbnQgbCA9IDE7CisgIGludF9mYXN0NjRfdCBrID0gMTsK KyAgaW50X2Zhc3Q2NF90IGwgPSAxOwogCiAgIHJlZGNpZnkyIChQMSwgUDAsIDEsIG4xLCBu MCk7CiAgIGFkZG1vZDIgKHgxLCB4MCwgUDEsIFAwLCBQMSwgUDAsIG4xLCBuMCk7IC8qIGku ZS4sIHJlZGNpZnkoMikgKi8KQEAgLTE1NjAsNyArMTMwMSw3IEBAIGZhY3Rvcl91c2luZ19w b2xsYXJkX3JobzIgKHdpZGVfdWludCBuMSwgd2lkZV91aW50IG4wLCB1bnNpZ25lZCBsb25n IGludCBhLAogCiAgIHdoaWxlIChuMSAhPSAwIHx8IG4wICE9IDEpCiAgICAgewotICAgICAg YmludiAobmksIG4wKTsKKyAgICAgIG1wX2xpbWJfdCBuaSA9IGJpbnZfbGltYiAobjApOwog CiAgICAgICBmb3IgKDs7KQogICAgICAgICB7CkBAIC0xNTY4LDEzICsxMzA5LDEzIEBAIGZh Y3Rvcl91c2luZ19wb2xsYXJkX3JobzIgKHdpZGVfdWludCBuMSwgd2lkZV91aW50IG4wLCB1 bnNpZ25lZCBsb25nIGludCBhLAogICAgICAgICAgICAgewogICAgICAgICAgICAgICB4MCA9 IG11bHJlZGMyICgmcjFtLCB4MSwgeDAsIHgxLCB4MCwgbjEsIG4wLCBuaSk7CiAgICAgICAg ICAgICAgIHgxID0gcjFtOwotICAgICAgICAgICAgICBhZGRtb2QyICh4MSwgeDAsIHgxLCB4 MCwgMCwgKHdpZGVfdWludCkgYSwgbjEsIG4wKTsKKyAgICAgICAgICAgICAgYWRkbW9kMiAo eDEsIHgwLCB4MSwgeDAsIDAsIGEsIG4xLCBuMCk7CiAKICAgICAgICAgICAgICAgc3VibW9k MiAodDEsIHQwLCB6MSwgejAsIHgxLCB4MCwgbjEsIG4wKTsKICAgICAgICAgICAgICAgUDAg PSBtdWxyZWRjMiAoJnIxbSwgUDEsIFAwLCB0MSwgdDAsIG4xLCBuMCwgbmkpOwogICAgICAg ICAgICAgICBQMSA9IHIxbTsKIAotICAgICAgICAgICAgICBpZiAoayAlIDMyID09IDEpCisg ICAgICAgICAgICAgIGlmICgoayAmIDMxKSA9PSAxKQogICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgIHV1c2V0ICgmZzEsICZnMCwgZ2NkMl9vZGQgKFAxLCBQMCwgbjEs IG4wKSk7CiAgICAgICAgICAgICAgICAgICBpZiAoZzEgIT0gMCB8fCBnMCAhPSAxKQpAQCAt MTU4NywxMSArMTMyOCwxMSBAQCBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8yICh3aWRlX3Vp bnQgbjEsIHdpZGVfdWludCBuMCwgdW5zaWduZWQgbG9uZyBpbnQgYSwKICAgICAgICAgICB6 MSA9IHgxOyB6MCA9IHgwOwogICAgICAgICAgIGsgPSBsOwogICAgICAgICAgIGwgPSAyICog bDsKLSAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaW50IGkgPSAwOyBpIDwgazsgaSsr KQorICAgICAgICAgIGZvciAoaW50X2Zhc3Q2NF90IGkgPSAwOyBpIDwgazsgaSsrKQogICAg ICAgICAgICAgewogICAgICAgICAgICAgICB4MCA9IG11bHJlZGMyICgmcjFtLCB4MSwgeDAs IHgxLCB4MCwgbjEsIG4wLCBuaSk7CiAgICAgICAgICAgICAgIHgxID0gcjFtOwotICAgICAg ICAgICAgICBhZGRtb2QyICh4MSwgeDAsIHgxLCB4MCwgMCwgKHdpZGVfdWludCkgYSwgbjEs IG4wKTsKKyAgICAgICAgICAgICAgYWRkbW9kMiAoeDEsIHgwLCB4MSwgeDAsIDAsIGEsIG4x LCBuMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgeTEgPSB4MTsgeTAgPSB4MDsKICAg ICAgICAgfQpAQCAtMTYwMSw3ICsxMzQyLDcgQEAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhv MiAod2lkZV91aW50IG4xLCB3aWRlX3VpbnQgbjAsIHVuc2lnbmVkIGxvbmcgaW50IGEsCiAg ICAgICAgIHsKICAgICAgICAgICB5MCA9IG11bHJlZGMyICgmcjFtLCB5MSwgeTAsIHkxLCB5 MCwgbjEsIG4wLCBuaSk7CiAgICAgICAgICAgeTEgPSByMW07Ci0gICAgICAgICAgYWRkbW9k MiAoeTEsIHkwLCB5MSwgeTAsIDAsICh3aWRlX3VpbnQpIGEsIG4xLCBuMCk7CisgICAgICAg ICAgYWRkbW9kMiAoeTEsIHkwLCB5MSwgeTAsIDAsIGEsIG4xLCBuMCk7CiAKICAgICAgICAg ICBzdWJtb2QyICh0MSwgdDAsIHoxLCB6MCwgeTEsIHkwLCBuMSwgbjApOwogICAgICAgICAg IHV1c2V0ICgmZzEsICZnMCwgZ2NkMl9vZGQgKHQxLCB0MCwgbjEsIG4wKSk7CkBAIC0xNjE0 LDcgKzEzNTUsNyBAQCBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8yICh3aWRlX3VpbnQgbjEs IHdpZGVfdWludCBuMCwgdW5zaWduZWQgbG9uZyBpbnQgYSwKICAgICAgICAgICBkaXZleGFj dF8yMSAobjEsIG4wLCBuMSwgbjAsIGcwKTsgICAgIC8qIG4gPSBuIC8gZyAqLwogCiAgICAg ICAgICAgaWYgKCFwcmltZV9wIChnMCkpCi0gICAgICAgICAgICBmYWN0b3JfdXNpbmdfcG9s bGFyZF9yaG8gKGcwLCBhICsgMSwgZmFjdG9ycyk7CisgICAgICAgICAgICBmYWN0b3JfdXNp bmdfcG9sbGFyZF9yaG8gKGZhY3RvcnMsIGcwLCBhICsgMSk7CiAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgZmFjdG9yX2luc2VydCAoZmFjdG9ycywgZzApOwogICAgICAgICB9CkBA IC0xNjIyLDI0ICsxMzYzLDIyIEBAIGZhY3Rvcl91c2luZ19wb2xsYXJkX3JobzIgKHdpZGVf dWludCBuMSwgd2lkZV91aW50IG4wLCB1bnNpZ25lZCBsb25nIGludCBhLAogICAgICAgICB7 CiAgICAgICAgICAgLyogVGhlIGZvdW5kIGZhY3RvciBpcyB0d28gd29yZHMuICBUaGlzIGlz IGhpZ2hseSB1bmxpa2VseSwgdGh1cyBoYXJkCiAgICAgICAgICAgICAgdG8gdHJpZ2dlci4g IFBsZWFzZSBiZSBjYXJlZnVsIGJlZm9yZSB5b3UgY2hhbmdlIHRoaXMgY29kZSEgICovCi0g ICAgICAgICAgd2lkZV91aW50IGdpbnY7CiAKICAgICAgICAgICBpZiAobjEgPT0gZzEgJiYg bjAgPT0gZzApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIC8qIEZvdW5kIG4gaXRz ZWxmIGFzIGZhY3Rvci4gIFJlc3RhcnQgd2l0aCBkaWZmZXJlbnQgcGFyYW1zLiAgKi8KLSAg ICAgICAgICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvMiAobjEsIG4wLCBhICsgMSwg ZmFjdG9ycyk7CisgICAgICAgICAgICAgIGZhY3Rvcl91c2luZ19wb2xsYXJkX3JobzIgKGZh Y3RvcnMsIG4xLCBuMCwgYSArIDEpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg ICAgICB9CiAKICAgICAgICAgICAvKiBDb21wdXRlIG4gPSBuIC8gZy4gIFNpbmNlIHRoZSBy ZXN1bHQgd2lsbCBmaXQgb25lIHdvcmQsCiAgICAgICAgICAgICAgd2UgY2FuIGNvbXB1dGUg dGhlIHF1b3RpZW50IG1vZHVsbyBCLCBpZ25vcmluZyB0aGUgaGlnaAogICAgICAgICAgICAg IGRpdmlzb3Igd29yZC4gICovCi0gICAgICAgICAgYmludiAoZ2ludiwgZzApOwotICAgICAg ICAgIG4wID0gZ2ludiAqIG4wOworICAgICAgICAgIG4wID0gYmludl9saW1iIChnMCkgKiBu MDsKICAgICAgICAgICBuMSA9IDA7CiAKICAgICAgICAgICBpZiAoIXByaW1lMl9wIChnMSwg ZzApKQotICAgICAgICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvMiAoZzEsIGcwLCBh ICsgMSwgZmFjdG9ycyk7CisgICAgICAgICAgICBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8y IChmYWN0b3JzLCBnMSwgZzAsIGEgKyAxKTsKICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICBmYWN0b3JfaW5zZXJ0X2xhcmdlIChmYWN0b3JzLCBnMSwgZzApOwogICAgICAgICB9CkBA IC0xNjUyLDcgKzEzOTEsNyBAQCBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8yICh3aWRlX3Vp bnQgbjEsIHdpZGVfdWludCBuMCwgdW5zaWduZWQgbG9uZyBpbnQgYSwKICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICBmYWN0b3JfdXNpbmdfcG9s bGFyZF9yaG8gKG4wLCBhLCBmYWN0b3JzKTsKKyAgICAgICAgICBmYWN0b3JfdXNpbmdfcG9s bGFyZF9yaG8gKGZhY3RvcnMsIG4wLCBhKTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAg IH0KIApAQCAtMTY2OCw1NTEgKzE0MDcsMTY5IEBAIGZhY3Rvcl91c2luZ19wb2xsYXJkX3Jo bzIgKHdpZGVfdWludCBuMSwgd2lkZV91aW50IG4wLCB1bnNpZ25lZCBsb25nIGludCBhLAog ICAgIH0KIH0KIAorLyogU2V0IFJQID0gKEFQICsgQlApIG1vZCBNUC4gIEFsbCB2YWx1ZXMg YXJlIG5vbm5lZ2F0aXZlIGFuZCB0YWtlIHVwCisgICBOPjAgd29yZHMsIGFuZCBBUCBhbmQg QlAgYXJlIGJvdGggbGVzcyB0aGFuIE1QLiAgKi8KIHN0YXRpYyB2b2lkCi1tcF9mYWN0b3Jf dXNpbmdfcG9sbGFyZF9yaG8gKG1wel90IG4sIHVuc2lnbmVkIGxvbmcgaW50IGEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcF9mYWN0b3JzICpmYWN0b3JzKQor bXBfbW9kYWRkIChtcF9saW1iX3QgKnJwLCBtcF9saW1iX3QgY29uc3QgKmFwLCBtcF9saW1i X3QgY29uc3QgKmJwLAorICAgICAgICAgICBtcF9saW1iX3QgY29uc3QgKm1wLCBtcF9zaXpl X3QgbikKIHsKLSAgbXB6X3QgeCwgeiwgeSwgUDsKLSAgbXB6X3QgdCwgdDI7Ci0KLSAgZGV2 bXNnICgiW3BvbGxhcmQtcmhvICglbHUpXSAiLCBhKTsKLQotICBtcHpfaW5pdHMgKHQsIHQy LCBudWxscHRyKTsKLSAgbXB6X2luaXRfc2V0X3NpICh5LCAyKTsKLSAgbXB6X2luaXRfc2V0 X3NpICh4LCAyKTsKLSAgbXB6X2luaXRfc2V0X3NpICh6LCAyKTsKLSAgbXB6X2luaXRfc2V0 X3VpIChQLCAxKTsKLQotICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGsgPSAxOwotICB1bnNp Z25lZCBsb25nIGxvbmcgaW50IGwgPSAxOwotCi0gIHdoaWxlIChtcHpfY21wX3VpIChuLCAx KSAhPSAwKQotICAgIHsKLSAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICBk bwotICAgICAgICAgICAgewotICAgICAgICAgICAgICBtcHpfbXVsICh0LCB4LCB4KTsKLSAg ICAgICAgICAgICAgbXB6X21vZCAoeCwgdCwgbik7Ci0gICAgICAgICAgICAgIG1wel9hZGRf dWkgKHgsIHgsIGEpOwotCi0gICAgICAgICAgICAgIG1wel9zdWIgKHQsIHosIHgpOwotICAg ICAgICAgICAgICBtcHpfbXVsICh0MiwgUCwgdCk7Ci0gICAgICAgICAgICAgIG1wel9tb2Qg KFAsIHQyLCBuKTsKLQotICAgICAgICAgICAgICBpZiAoayAlIDMyID09IDEpCi0gICAgICAg ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgbXB6X2djZCAodCwgUCwgbik7Ci0gICAg ICAgICAgICAgICAgICBpZiAobXB6X2NtcF91aSAodCwgMSkgIT0gMCkKLSAgICAgICAgICAg ICAgICAgICAgZ290byBmYWN0b3JfZm91bmQ7Ci0gICAgICAgICAgICAgICAgICBtcHpfc2V0 ICh5LCB4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg d2hpbGUgKC0tayAhPSAwKTsKLQotICAgICAgICAgIG1wel9zZXQgKHosIHgpOwotICAgICAg ICAgIGsgPSBsOwotICAgICAgICAgIGwgPSAyICogbDsKLSAgICAgICAgICBmb3IgKHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgaSA9IDA7IGkgPCBrOyBpKyspCi0gICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgIG1wel9tdWwgKHQsIHgsIHgpOwotICAgICAgICAgICAgICBtcHpfbW9k ICh4LCB0LCBuKTsKLSAgICAgICAgICAgICAgbXB6X2FkZF91aSAoeCwgeCwgYSk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgbXB6X3NldCAoeSwgeCk7Ci0gICAgICAgIH0KLQotICAg IGZhY3Rvcl9mb3VuZDoKLSAgICAgIGRvCi0gICAgICAgIHsKLSAgICAgICAgICBtcHpfbXVs ICh0LCB5LCB5KTsKLSAgICAgICAgICBtcHpfbW9kICh5LCB0LCBuKTsKLSAgICAgICAgICBt cHpfYWRkX3VpICh5LCB5LCBhKTsKLQotICAgICAgICAgIG1wel9zdWIgKHQsIHosIHkpOwot ICAgICAgICAgIG1wel9nY2QgKHQsIHQsIG4pOwotICAgICAgICB9Ci0gICAgICB3aGlsZSAo bXB6X2NtcF91aSAodCwgMSkgPT0gMCk7Ci0KLSAgICAgIG1wel9kaXZleGFjdCAobiwgbiwg dCk7ICAgLyogZGl2aWRlIGJ5IHQsIGJlZm9yZSB0IGlzIG92ZXJ3cml0dGVuICovCi0KLSAg ICAgIGlmICghbXBfcHJpbWVfcCAodCkpCi0gICAgICAgIHsKLSAgICAgICAgICBkZXZtc2cg KCJbY29tcG9zaXRlIGZhY3Rvci0tcmVzdGFydGluZyBwb2xsYXJkLXJob10gIik7Ci0gICAg ICAgICAgbXBfZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvICh0LCBhICsgMSwgZmFjdG9ycyk7 Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIG1wX2ZhY3Rv cl9pbnNlcnQgKGZhY3RvcnMsIHQpOwotICAgICAgICB9Ci0KLSAgICAgIGlmIChtcF9wcmlt ZV9wIChuKSkKLSAgICAgICAgewotICAgICAgICAgIG1wX2ZhY3Rvcl9pbnNlcnQgKGZhY3Rv cnMsIG4pOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgIG1wel9tb2Qg KHgsIHgsIG4pOwotICAgICAgbXB6X21vZCAoeiwgeiwgbik7Ci0gICAgICBtcHpfbW9kICh5 LCB5LCBuKTsKLSAgICB9Ci0KLSAgbXB6X2NsZWFycyAoUCwgdDIsIHQsIHosIHgsIHksIG51 bGxwdHIpOworICBtcF9saW1iX3QgY3kgPSBtcG5fYWRkX24gKHJwLCBhcCwgYnAsIG4pOwor ICBpZiAoY3kgfHwgbXBuX2NtcCAocnAsIG1wLCBuKSA+PSAwKQorICAgIG1wbl9zdWJfbiAo cnAsIHJwLCBtcCwgbik7CiB9CiAKLSNpZiBVU0VfU1FVRk9GCi0vKiBGSVhNRTogTWF5YmUg YmV0dGVyIHRvIHVzZSBhbiBpdGVyYXRpb24gY29udmVyZ2luZyB0byAxL3NxcnQobik/ICBJ ZgotICAgYWxnb3JpdGhtIGlzIHJlcGxhY2VkLCBjb25zaWRlciBhbHNvIHJldHVybmluZyB0 aGUgcmVtYWluZGVyLiAgKi8KLUFUVFJJQlVURV9DT05TVAotc3RhdGljIHdpZGVfdWludAot aXNxcnQgKHdpZGVfdWludCBuKQorLyogU2V0IFJQID0gKEFQIC0gQlApIG1vZCBNUC4gIEFs bCB2YWx1ZXMgYXJlIG5vbm5lZ2F0aXZlIGFuZCB0YWtlIHVwCisgICBOPjAgd29yZHMsIGFu ZCBBUCBhbmQgQlAgYXJlIGJvdGggbGVzcyB0aGFuIE1QLiAgKi8KK3N0YXRpYyB2b2lkCitt cF9tb2RzdWIgKG1wX2xpbWJfdCAqcnAsIG1wX2xpbWJfdCBjb25zdCAqYXAsIG1wX2xpbWJf dCBjb25zdCAqYnAsCisgICAgICAgICAgIG1wX2xpbWJfdCBjb25zdCAqbXAsIG1wX3NpemVf dCBuKQogewotICBpZiAobiA9PSAwKQotICAgIHJldHVybiAwOwotCi0gIGludCBjID0gc3Rk Y19sZWFkaW5nX3plcm9zIChuKTsKLQotICAvKiBNYWtlIHggPiBzcXJ0KG4pLiAgVGhpcyB3 aWxsIGJlIGludmFyaWFudCB0aHJvdWdoIHRoZSBsb29wLiAgKi8KLSAgd2lkZV91aW50IHgg PSAod2lkZV91aW50KSAxIDw8ICgoV19UWVBFX1NJWkUgKyAxIC0gYykgPj4gMSk7Ci0KLSAg Zm9yICg7OykKLSAgICB7Ci0gICAgICB3aWRlX3VpbnQgeSA9ICh4ICsgbiAvIHgpIC8gMjsK LSAgICAgIGlmICh5ID49IHgpCi0gICAgICAgIHJldHVybiB4OwotCi0gICAgICB4ID0geTsK LSAgICB9CisgIG1wX2xpbWJfdCBjeSA9IG1wbl9zdWJfbiAocnAsIGFwLCBicCwgbik7Cisg IGlmIChjeSkKKyAgICBtcG5fYWRkX24gKHJwLCBycCwgbXAsIG4pOwogfQogCi1BVFRSSUJV VEVfQ09OU1QKLXN0YXRpYyB3aWRlX3VpbnQKLWlzcXJ0MiAod2lkZV91aW50IG5oLCB3aWRl X3VpbnQgbmwpCisvKiBTZXQgUlAgPSAoQVAgLSBCMCkgbW9kIE1QLiAgQWxsIHZhbHVlcyBh cmUgbm9ubmVnYXRpdmUsIEFQIGFuZCBNUAorICAgYm90aCB0YWtlIHVwIE4+MCB3b3Jkcywg YW5kIEFQIDwgTVAuICAqLworc3RhdGljIHZvaWQKK21wX21vZGFkZF8xIChtcF9saW1iX3Qg KnJwLCBtcF9saW1iX3QgY29uc3QgKmFwLCBtcF9saW1iX3QgYjAsCisgICAgICAgICAgICAg bXBfbGltYl90IGNvbnN0ICptcCwgbXBfc2l6ZV90IG4pCiB7Ci0gIC8qIEVuc3VyZXMgdGhl IHJlbWFpbmRlciBmaXRzIGluIGEgd2lkZV91aW50LiAgKi8KLSAgYWZmaXJtIChuaCA8ICgo d2lkZV91aW50KSAxIDw8IChXX1RZUEVfU0laRSAtIDIpKSk7Ci0KLSAgaWYgKG5oID09IDAp Ci0gICAgcmV0dXJuIGlzcXJ0IChubCk7Ci0KLSAgaW50IHNoaWZ0ID0gc3RkY19sZWFkaW5n X3plcm9zIChuaCkgJiB+MTsKLQotICAvKiBNYWtlIHggPiBzcXJ0IChuKS4gICovCi0gIHdp ZGVfdWludCB4ID0gaXNxcnQgKChuaCA8PCBzaGlmdCkgKyAobmwgPj4gKFdfVFlQRV9TSVpF IC0gc2hpZnQpKSkgKyAxOwotICB4IDw8PSAoV19UWVBFX1NJWkUgLSBzaGlmdCkgPj4gMTsK LQotICAvKiBEbyB3ZSBuZWVkIG1vcmUgdGhhbiBvbmUgaXRlcmF0aW9uPyAgKi8KLSAgZm9y ICg7OykKLSAgICB7Ci0gICAgICBNQVlCRV9VTlVTRUQgd2lkZV91aW50IHI7Ci0gICAgICB3 aWRlX3VpbnQgcSwgeTsKLSAgICAgIHVkaXZfcXJubmQgKHEsIHIsIG5oLCBubCwgeCk7Ci0g ICAgICB5ID0gKHggKyBxKSAvIDI7Ci0KLSAgICAgIGlmICh5ID49IHgpCi0gICAgICAgIHsK LSAgICAgICAgICB3aWRlX3VpbnQgaGksIGxvOwotICAgICAgICAgIHVtdWxfcHBtbSAoaGks IGxvLCB4ICsgMSwgeCArIDEpOwotICAgICAgICAgIGFmZmlybSAoZ3QyIChoaSwgbG8sIG5o LCBubCkpOwotCi0gICAgICAgICAgdW11bF9wcG1tIChoaSwgbG8sIHgsIHgpOwotICAgICAg ICAgIGFmZmlybSAoZ2UyIChuaCwgbmwsIGhpLCBsbykpOwotICAgICAgICAgIHN1Yl9kZG1t c3MgKGhpLCBsbywgbmgsIG5sLCBoaSwgbG8pOwotICAgICAgICAgIGFmZmlybSAoaGkgPT0g MCk7Ci0KLSAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotCi0gICAgICB4ID0geTsK LSAgICB9CisgIG1wX2xpbWJfdCBjeSA9IG1wbl9hZGRfMSAocnAsIGFwLCBuLCBiMCk7Cisg IGlmIChjeSB8fCBtcG5fY21wIChycCwgbXAsIG4pID49IDApCisgICAgbXBuX3N1Yl9uIChy cCwgcnAsIG1wLCBuKTsKIH0KIAotLyogTUFHSUNbTl0gaGFzIGEgYml0IGkgc2V0IGlmZiBp IGlzIGEgcXVhZHJhdGljIHJlc2lkdWUgbW9kIE4uICAqLwotIyBkZWZpbmUgTUFHSUM2NCAw eDAyMDIwMjEyMDIwMzAyMTNVTEwKLSMgZGVmaW5lIE1BR0lDNjMgMHgwNDAyNDgzMDEyNDUw MjkzVUxMCi0jIGRlZmluZSBNQUdJQzY1IDB4MjE4YTAxOTg2NjAxNDYxM1VMTAotIyBkZWZp bmUgTUFHSUMxMSAweDIzYgotCi0vKiBSZXR1cm4gdGhlIHNxdWFyZSByb290IGlmIHRoZSBp bnB1dCBpcyBhIHNxdWFyZSwgb3RoZXJ3aXNlIDAuICAqLwotQVRUUklCVVRFX0NPTlNUCi1z dGF0aWMgd2lkZV91aW50Ci1pc19zcXVhcmUgKHdpZGVfdWludCB4KQorc3RhdGljIHZvaWQK K21wX211bHJlZGMgKG1wX2xpbWJfdCAqcnAsIG1wX2xpbWJfdCBjb25zdCAqYXAsIG1wX2xp bWJfdCBjb25zdCAqYnAsCisgICAgICAgICAgICBtcF9saW1iX3QgY29uc3QgKm1wLCBtcF9z aXplX3QgbiwgbXBfbGltYl90IG0waW52LCBtcF9saW1iX3QgKnRwKQogewotICAvKiBVc2Vz IHRoZSB0ZXN0cyBzdWdnZXN0ZWQgYnkgQ29oZW4uICBFeGNsdWRlcyA5OSUgb2YgdGhlIG5v bi1zcXVhcmVzIGJlZm9yZQotICAgICBjb21wdXRpbmcgdGhlIHNxdWFyZSByb290LiAgKi8K LSAgaWYgKCgoTUFHSUM2NCA+PiAoeCAmIDYzKSkgJiAxKQotICAgICAgJiYgKChNQUdJQzYz ID4+ICh4ICUgNjMpKSAmIDEpCi0gICAgICAvKiBCb3RoIDAgYW5kIDY0IGFyZSBzcXVhcmVz IG1vZCAoNjUpLiAgKi8KLSAgICAgICYmICgoTUFHSUM2NSA+PiAoKHggJSA2NSkgJiA2Mykp ICYgMSkKLSAgICAgICYmICgoTUFHSUMxMSA+PiAoeCAlIDExKSAmIDEpKSkKKyAgdHBbbl0g PSBtcG5fbXVsXzEgKHRwLCBhcCwgbiwgYnBbMF0pOworICB0cFswXSA9IG1wbl9hZGRtdWxf MSAodHAsIG1wLCBuLCB0cFswXSAqIG0waW52KTsKKworICBmb3IgKG1wX3NpemVfdCBpID0g MTsgaSA8IG47IGkrKykKICAgICB7Ci0gICAgICB3aWRlX3VpbnQgciA9IGlzcXJ0ICh4KTsK LSAgICAgIGlmIChyICogciA9PSB4KQotICAgICAgICByZXR1cm4gcjsKKyAgICAgIHRwW24g KyBpXSA9IG1wbl9hZGRtdWxfMSAodHAgKyBpLCBhcCwgbiwgYnBbaV0pOworICAgICAgdHBb aV0gPSBtcG5fYWRkbXVsXzEgKHRwICsgaSwgbXAsIG4sIHRwW2ldICogbTBpbnYpOwogICAg IH0KLSAgcmV0dXJuIDA7CisgIG1wX21vZGFkZCAocnAsIHRwLCB0cCArIG4sIG1wLCBuKTsK IH0KIAotLyogaW52dGFiW2ldID0gZmxvb3IgKDB4MTAwMDAgLyAoMHgxMDAgKyBpKSAqLwot c3RhdGljIHNob3J0IGNvbnN0IGludnRhYlsweDgxXSA9Ci0gIHsKLSAgICAweDIwMCwKLSAg ICAweDFmYywgMHgxZjgsIDB4MWY0LCAweDFmMCwgMHgxZWMsIDB4MWU5LCAweDFlNSwgMHgx ZTEsCi0gICAgMHgxZGUsIDB4MWRhLCAweDFkNywgMHgxZDQsIDB4MWQwLCAweDFjZCwgMHgx Y2EsIDB4MWM3LAotICAgIDB4MWMzLCAweDFjMCwgMHgxYmQsIDB4MWJhLCAweDFiNywgMHgx YjQsIDB4MWIyLCAweDFhZiwKLSAgICAweDFhYywgMHgxYTksIDB4MWE2LCAweDFhNCwgMHgx YTEsIDB4MTllLCAweDE5YywgMHgxOTksCi0gICAgMHgxOTcsIDB4MTk0LCAweDE5MiwgMHgx OGYsIDB4MThkLCAweDE4YSwgMHgxODgsIDB4MTg2LAotICAgIDB4MTgzLCAweDE4MSwgMHgx N2YsIDB4MTdkLCAweDE3YSwgMHgxNzgsIDB4MTc2LCAweDE3NCwKLSAgICAweDE3MiwgMHgx NzAsIDB4MTZlLCAweDE2YywgMHgxNmEsIDB4MTY4LCAweDE2NiwgMHgxNjQsCi0gICAgMHgx NjIsIDB4MTYwLCAweDE1ZSwgMHgxNWMsIDB4MTVhLCAweDE1OCwgMHgxNTcsIDB4MTU1LAot ICAgIDB4MTUzLCAweDE1MSwgMHgxNTAsIDB4MTRlLCAweDE0YywgMHgxNGEsIDB4MTQ5LCAw eDE0NywKLSAgICAweDE0NiwgMHgxNDQsIDB4MTQyLCAweDE0MSwgMHgxM2YsIDB4MTNlLCAw eDEzYywgMHgxM2IsCi0gICAgMHgxMzksIDB4MTM4LCAweDEzNiwgMHgxMzUsIDB4MTMzLCAw eDEzMiwgMHgxMzAsIDB4MTJmLAotICAgIDB4MTJlLCAweDEyYywgMHgxMmIsIDB4MTI5LCAw eDEyOCwgMHgxMjcsIDB4MTI1LCAweDEyNCwKLSAgICAweDEyMywgMHgxMjEsIDB4MTIwLCAw eDExZiwgMHgxMWUsIDB4MTFjLCAweDExYiwgMHgxMWEsCi0gICAgMHgxMTksIDB4MTE4LCAw eDExNiwgMHgxMTUsIDB4MTE0LCAweDExMywgMHgxMTIsIDB4MTExLAotICAgIDB4MTBmLCAw eDEwZSwgMHgxMGQsIDB4MTBjLCAweDEwYiwgMHgxMGEsIDB4MTA5LCAweDEwOCwKLSAgICAw eDEwNywgMHgxMDYsIDB4MTA1LCAweDEwNCwgMHgxMDMsIDB4MTAyLCAweDEwMSwgMHgxMDAs Ci0gIH07Ci0KLS8qIENvbXB1dGUgcSA9IFt1L2RdLCByID0gdSBtb2QgZC4gIEF2b2lkcyBz bG93IGhhcmR3YXJlIGRpdmlzaW9uIGZvciB0aGUgY2FzZQotICAgdGhhdCBxIDwgMHg0MDsg aGVyZSBpdCBpbnN0ZWFkIHVzZXMgYSB0YWJsZSBvZiAoRXVjbGlkZWFuKSBpbnZlcnNlcy4g ICovCi0jIGRlZmluZSBkaXZfc21hbGxxKHEsIHIsIHUsIGQpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlm ICgodSkgLyAweDQwIDwgKGQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB3aWRlX3VpbnQg X2RpbnYsIF9tYXNrLCBfcSwgX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBpbnQgX2NudCA9IHN0ZGNfbGVhZGluZ196ZXJvcyAoZCk7CQkJCVwKLSAg ICAgICAgX3IgPSAodSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFVOTElLRUxZIChfY250ID4gKFdfVFlQ RV9TSVpFIC0gOCkpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICAgIF9kaW52ID0gaW52dGFiWygoZCkgPDwgKF9jbnQgKyA4IC0g V19UWVBFX1NJWkUpKSAtIDB4ODBdOyAgIFwKLSAgICAgICAgICAgIF9xID0gX2RpbnYgKiBf ciA+PiAoOCArIFdfVFlQRV9TSVpFIC0gX2NudCk7ICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgIF9kaW52ID0gaW52dGFiWygoZCkgPj4gKFdfVFlQRV9TSVpFIC0g OCAtIF9jbnQpKSAtIDB4N2ZdOyAgIFwKLSAgICAgICAgICAgIF9xID0gX2RpbnYgKiAoX3Ig Pj4gKFdfVFlQRV9TSVpFIC0gMyAtIF9jbnQpKSA+PiAxMTsgICAgICAgIFwKLSAgICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgX3IgLT0gX3EgKiAoZCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgX21hc2sgPSAtKHdpZGVfdWludCkgKF9yID49IChkKSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHIpID0gX3IgLSAoX21hc2sgJiAoZCkp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHEp ID0gX3EgLSBfbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgYWZmaXJtICgocSkgKiAoZCkgKyAocikgPT0gdSk7CQkJCQlc Ci0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgIHdpZGVfdWludCBfcSA9ICh1KSAvIChkKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChyKSA9ICh1KSAtIF9x ICogKGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgIChxKSA9IF9xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0gd2hpbGUgKDAp Ci0KLS8qIE5vdGVzOiBFeGFtcGxlIE4gPSAyMjExNzAxOS4gIEFmdGVyIGZpcnN0IHBoYXNl IHdlIGZpbmQgUTEgPSA2MzE0LCBRCi0gICA9IDMwMjUsIFAgPSAxNzM3LCByZXByZXNlbnRp bmcgRl97MTh9ID0gKC02MzE0LCAyICogMTczNywgMzAyNSksCi0gICB3aXRoIDMwMjUgPSA1 NV4yLgotCi0gICBDb25zdHJ1Y3RpbmcgdGhlIHNxdWFyZSByb290LCB3ZSBnZXQgUTEgPSA1 NSwgUSA9IDg2NTMsIFAgPSA0NjUyLAotICAgcmVwcmVzZW50aW5nIEdfMCA9ICgtNTUsIDIg KiA0NjUyLCA4NjUzKS4KLQotICAgSW4gdGhlIG5vdGF0aW9uIG9mIHRoZSBwYXBlcjoKLQot ICAgU197LTF9ID0gNTUsIFNfMCA9IDg2NTMsIFJfMCA9IDQ2NTIKKy8qIE1heGltdW0gdmFs dWUgZm9yIE4gaW4gbXBfZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvLAorICAgdG8gYXZvaWQg aW50ZWdlciBvdmVyZmxvdyB3aGVuIGl0IGNhbGxzIHhpbm1hbGxvYy4gICovCisjZGVmaW5l IE1QX0ZBQ1RPUl9VU0lOR19QT0xMQVJEX1JIT19OX01BWCBcCisgICgoTUlOIChJRFhfTUFY LCBUWVBFX01BWElNVU0gKG1wX3NpemVfdCkpIC0gMykgLyAxMCkKIAotICAgUHV0Ci0KLSAg ICAgdF8wID0gZmxvb3IoW3FfMCArIFJfMF0gLyBTMCkgPSAxCi0gICAgIFJfMSA9IHRfMCAq IFNfMCAtIFJfMCA9IDQwMDEKLSAgICAgU18xID0gU197LTF9ICt0XzAgKFJfMCAtIFJfMSkg PSA3MDYKLSovCi0KLS8qIE11bHRpcGxpZXJzLCBpbiBvcmRlciBvZiBlZmZpY2llbmN5Ogot ICAgMC43MjY4ICAzKjUqNyoxMSA9IDExNTUgPSAzIChtb2QgNCkKLSAgIDAuNzMxNyAgMyo1 KjcgICAgPSAgMTA1ID0gMQotICAgMC43ODIwICAzKjUqMTEgICA9ICAxNjUgPSAxCi0gICAw Ljc4NzIgIDMqNSAgICAgID0gICAxNSA9IDMKLSAgIDAuODEwMSAgMyo3KjExICAgPSAgMjMx ID0gMwotICAgMC44MTU1ICAzKjcgICAgICA9ICAgMjEgPSAxCi0gICAwLjgyODQgIDUqNyox MSAgID0gIDM4NSA9IDEKLSAgIDAuODMzOSAgNSo3ICAgICAgPSAgIDM1ID0gMwotICAgMC44 NzE2ICAzKjExICAgICA9ICAgMzMgPSAxCi0gICAwLjg3NzQgIDMgICAgICAgID0gICAgMyA9 IDMKLSAgIDAuODkxMyAgNSoxMSAgICAgPSAgIDU1ID0gMwotICAgMC44OTcyICA1ICAgICAg ICA9ICAgIDUgPSAxCi0gICAwLjkyMzMgIDcqMTEgICAgID0gICA3NyA9IDEKLSAgIDAuOTI5 NSAgNyAgICAgICAgPSAgICA3ID0gMwotICAgMC45OTM0ICAxMSAgICAgICA9ICAgMTEgPSAz Ci0qLwotIyBkZWZpbmUgUVVFVUVfU0laRSA1MAotI2VuZGlmCi0KLSNpZiBTVEFUX1NRVUZP RgotIyBkZWZpbmUgUV9GUkVRX1NJWkUgNTAKLS8qIEVsZW1lbnQgMCBrZWVwcyB0aGUgdG90 YWwgKi8KLXN0YXRpYyBpbnQgcV9mcmVxW1FfRlJFUV9TSVpFICsgMV07Ci0jZW5kaWYKLQot I2lmIFVTRV9TUVVGT0YKLS8qIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuICBFeHBlY3RlZCB0 byBmYWlsIG9ubHkgZm9yIG51bWJlcnMKLSAgID49IDJeezIqV19UWVBFX1NJWkUgLSAyfSwg b3IgY2xvc2UgdG8gdGhhdCBsaW1pdC4gICovCi1zdGF0aWMgYm9vbAotZmFjdG9yX3VzaW5n X3NxdWZvZiAod2lkZV91aW50IG4xLCB3aWRlX3VpbnQgbjAsIHN0cnVjdCBmYWN0b3JzICpm YWN0b3JzKQorLyogSW5zZXJ0IGludG8gRkFDVE9SUyB0aGUgcmVzdWx0IG9mIGZhY3Rvcmlu ZyBNUCwgb2Ygc2l6ZSBOLAorICAgdXNpbmcgUG9sbGFyZC1yaG8gd2l0aCBzdGFydGluZyB2 YWx1ZSBBLiAgTVAgbXVzdCBiZSBvZGQuICovCitzdGF0aWMgdm9pZAorbXBfZmFjdG9yX3Vz aW5nX3BvbGxhcmRfcmhvIChzdHJ1Y3QgbXBfZmFjdG9ycyAqZmFjdG9ycywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbXBfbGltYl90IGNvbnN0ICptcCwgbXBfc2l6ZV90IG4s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wX2xpbWJfdCBhKQogewotICAvKiBV c2VzIGFsZ29yaXRobSBhbmQgbm90YXRpb24gZnJvbQorICBkZXZtc2cgKCJbcG9sbGFyZC1y aG8gKCVsdSldICIsICh1bnNpZ25lZCBsb25nIGludCkgYSk7CiAKLSAgICAgU1FVQVJFIEZP Uk0gRkFDVE9SSVpBVElPTgotICAgICBKQVNPTiBFLiBHT1dFUiBBTkQgU0FNVUVMIFMuIFdB R1NUQUZGLCBKUi4KKyAgc3RhdGljX2Fzc2VydCAoMTAgKiBNUF9GQUNUT1JfVVNJTkdfUE9M TEFSRF9SSE9fTl9NQVggKyAzCisgICAgICAgICAgICAgICAgIDw9IE1JTiAoSURYX01BWCwg VFlQRV9NQVhJTVVNIChtcF9zaXplX3QpKSk7CisgIG1wX2xpbWJfdCAqc2NyYXRjaCA9IHhp bm1hbGxvYyAoMTAgKiBuICsgMywgc2l6ZW9mICpzY3JhdGNoKTsKKyAgbXBfbGltYl90ICpx cCA9IHNjcmF0Y2ggKyAyICogbiArIDEsICpwcCA9IHFwICsgbiArIDIsCisgICAgKnhwID0g cHAgKyBuLCAqeXAgPSB4cCArIG4sICp6cCA9IHlwICsgbiwKKyAgICAqdHAgPSB6cCArIG4s ICpzcCA9IHRwICsgbiwgKmdwID0gc3AgKyBuOworICBtcF9zaXplX3QgZ247CiAKLSAgICAg aHR0cHM6Ly9ob21lcy5jZXJpYXMucHVyZHVlLmVkdS9+c3N3L3NxdWZvZi5wZGYKLSAgICov CisgIG1wbl96ZXJvIChzY3JhdGNoLCBuKTsKKyAgc2NyYXRjaFtuXSA9IDE7CisgIG1wbl90 ZGl2X3FyIChxcCwgcHAsIDAsIHNjcmF0Y2gsIG4gKyAxLCBtcCwgbik7CiAKLSAgc3RhdGlj IHNob3J0IGNvbnN0IG11bHRpcGxpZXJzXzFbXSA9Ci0gICAgeyAvKiA9IDEgKG1vZCA0KSAq LwotICAgICAgMTA1LCAxNjUsIDIxLCAzODUsIDMzLCA1LCA3NywgMSwgMAotICAgIH07Ci0g IHN0YXRpYyBzaG9ydCBjb25zdCBtdWx0aXBsaWVyc18zW10gPQotICAgIHsgLyogPSAzICht b2QgNCkgKi8KLSAgICAgIDExNTUsIDE1LCAyMzEsIDM1LCAzLCA1NSwgNywgMTEsIDAKLSAg ICB9OworICBtcF9tb2RhZGQgKHhwLCBwcCwgcHAsIG1wLCBuKTsKKyAgbXBuX2NvcHlpICh5 cCwgeHAsIG4pOworICBtcG5fY29weWkgKHpwLCB4cCwgbik7CiAKLSAgc3RydWN0IHsgd2lk ZV91aW50IFE7IHdpZGVfdWludCBQOyB9IHF1ZXVlW1FVRVVFX1NJWkVdOwotCi0gIGlmIChu MSA+PSAoKHdpZGVfdWludCkgMSA8PCAoV19UWVBFX1NJWkUgLSAyKSkpCi0gICAgcmV0dXJu IGZhbHNlOworICBtcF9saW1iX3QgbTBpbnYgPSBiaW52X2xpbWIgKC1tcFswXSk7CiAKLSAg d2lkZV91aW50IHNxcnRfbiA9IGlzcXJ0MiAobjEsIG4wKTsKLQotICBpZiAobjAgPT0gc3Fy dF9uICogc3FydF9uKQorICBmb3IgKGludF9mYXN0NjRfdCBrID0gMTsgOyBrICo9IDIpCiAg ICAgewotICAgICAgd2lkZV91aW50IHAxLCBwMDsKKyAgICAgIGZvciAoaW50X2Zhc3Q2NF90 IGkgPSBrOyAwIDwgaTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgbXBfbXVscmVkYyAo dHAsIHhwLCB4cCwgbXAsIG4sIG0waW52LCBzY3JhdGNoKTsKKyAgICAgICAgICBtcF9tb2Rh ZGRfMSAoeHAsIHRwLCBhLCBtcCwgbik7CiAKLSAgICAgIHVtdWxfcHBtbSAocDEsIHAwLCBz cXJ0X24sIHNxcnRfbik7Ci0gICAgICBhZmZpcm0gKHAwID09IG4wKTsKKyAgICAgICAgICBt cF9tb2RzdWIgKHRwLCB6cCwgeHAsIG1wLCBuKTsKKyAgICAgICAgICBtcF9tdWxyZWRjIChw cCwgcHAsIHRwLCBtcCwgbiwgbTBpbnYsIHNjcmF0Y2gpOwogCi0gICAgICBpZiAobjEgPT0g cDEpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocHJpbWVfcCAoc3FydF9uKSkKLSAgICAg ICAgICAgIGZhY3Rvcl9pbnNlcnRfbXVsdGlwbGljaXR5IChmYWN0b3JzLCBzcXJ0X24sIDIp OwotICAgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiAoaSAlIDEyOCA9PSAxKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICBzdHJ1Y3QgZmFjdG9ycyBmOwotCi0gICAgICAgICAg ICAgIGYubmZhY3RvcnMgPSAwOwotICAgICAgICAgICAgICBpZiAoIWZhY3Rvcl91c2luZ19z cXVmb2YgKDAsIHNxcnRfbiwgJmYpKQorICAgICAgICAgICAgICBpZiAobXBuX3plcm9fcCAo cHAsIG4pKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIC8qIFRyeSBw b2xsYXJkIHJobyBpbnN0ZWFkICovCi0gICAgICAgICAgICAgICAgICBmYWN0b3JfdXNpbmdf cG9sbGFyZF9yaG8gKHNxcnRfbiwgMSwgJmYpOworICAgICAgICAgICAgICAgICAgbXBfZmFj dG9yX3VzaW5nX3BvbGxhcmRfcmhvIChmYWN0b3JzLCBtcCwgbiwgYSArIDEpOworICAgICAg ICAgICAgICAgICAgZ290byBmaW5pc2g7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg ICAgICAvKiBEdXBsaWNhdGUgdGhlIG5ldyBmYWN0b3JzICovCi0gICAgICAgICAgICAgIGZv ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZi5uZmFjdG9yczsgaSsrKQotICAgICAgICAg ICAgICAgIGZhY3Rvcl9pbnNlcnRfbXVsdGlwbGljaXR5IChmYWN0b3JzLCBmLnBbaV0sIDIg KiBmLmVbaV0pOworICAgICAgICAgICAgICBtcG5fY29weWkgKHRwLCBwcCwgbik7CisgICAg ICAgICAgICAgIG1wbl9jb3B5aSAoc3AsIG1wLCBuKTsKKyAgICAgICAgICAgICAgZ24gPSBt cG5fZ2NkIChncCwgdHAsIG4sIHNwLCBuKTsKKyAgICAgICAgICAgICAgaWYgKGduICE9IDEg fHwgZ3BbMF0gIT0gMSkKKyAgICAgICAgICAgICAgICBnb3RvIGZhY3Rvcl9mb3VuZDsKKyAg ICAgICAgICAgICAgbXBuX2NvcHlpICh5cCwgeHAsIG4pOwogICAgICAgICAgICAgfQotICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisKKyAgICAgIG1wbl9jb3B5aSAoenAs IHhwLCBuKTsKKyAgICAgIGZvciAoaW50X2Zhc3Q2NF90IGkgPSAyICogazsgMCA8IGk7IGkt LSkKKyAgICAgICAgeworICAgICAgICAgIG1wX211bHJlZGMgKHRwLCB4cCwgeHAsIG1wLCBu LCBtMGludiwgc2NyYXRjaCk7CisgICAgICAgICAgbXBfbW9kYWRkXzEgKHhwLCB0cCwgYSwg bXAsIG4pOworICAgICAgICB9CisgICAgICBtcG5fY29weWkgKHlwLCB4cCwgbik7CiAgICAg fQogCi0gIC8qIFNlbGVjdCBtdWx0aXBsaWVycyBzbyB3ZSBhbHdheXMgZ2V0IG4gKiBtdSA9 IDMgKG1vZCA0KSAqLwotICBmb3IgKHNob3J0IGNvbnN0ICptID0gKG4wICUgNCA9PSAxKSA/ IG11bHRpcGxpZXJzXzMgOiBtdWx0aXBsaWVyc18xOwotICAgICAgICptOyBtKyspCisgZmFj dG9yX2ZvdW5kOgorICBkbwogICAgIHsKLSAgICAgIHdpZGVfdWludCBTLCBEaCwgRGwsIFEx LCBRLCBQLCBMLCBMMSwgQjsKLSAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgdW5zaWdu ZWQgaW50IG11ID0gKm07Ci0gICAgICBpbnQgcXBvcyA9IDA7Ci0KLSAgICAgIGFmZmlybSAo bXUgKiBuMCAlIDQgPT0gMyk7CisgICAgICBtcF9tdWxyZWRjICh0cCwgeXAsIHlwLCBtcCwg biwgbTBpbnYsIHNjcmF0Y2gpOworICAgICAgbXBfbW9kYWRkXzEgKHlwLCB0cCwgYSwgbXAs IG4pOworICAgICAgbXBfbW9kc3ViICh0cCwgenAsIHlwLCBtcCwgbik7CisgICAgICBtcG5f Y29weWkgKHNwLCBtcCwgbik7CisgICAgICBnbiA9IG1wbl9nY2QgKGdwLCB0cCwgbiwgc3As IG4pOworICAgIH0KKyAgd2hpbGUgKGduID09IDEgJiYgZ3BbMF0gPT0gMSk7CiAKLSAgICAg IC8qIEluIHRoZSBub3RhdGlvbiBvZiB0aGUgcGFwZXIsIHdpdGggbXUgKiBuID09IDMgKG1v ZCA0KSwgd2UKLSAgICAgICAgIGdldCBcRGVsdGEgPSA0IG11ICogbiwgYW5kIHRoZSBwYXBl cidzIFxtdSBpcyAyIG11LiAgQXMgZmFyIGFzCi0gICAgICAgICBJIHVuZGVyc3RhbmQgaXQs IHRoZSBuZWNlc3NhcnkgYm91bmQgaXMgNCBcbXVeMyA8IG4sIG9yIDMyCi0gICAgICAgICBt dV4zIDwgbi4KKyAgbXB6X3QgZyA9IE1QWl9ST0lOSVRfTiAoZ3AsIGduKTsKKyAgbXB6X3Qg bSA9IE1QWl9ST0lOSVRfTiAoKG1wX2xpbWJfdCAqKSBtcCwgbiksIHE7CisgIG1wel9pbml0 IChxKTsKKyAgbXB6X2RpdmV4YWN0IChxLCBtLCBnKTsKIAotICAgICAgICAgSG93ZXZlciwg dGhpcyBzZWVtcyBpbnN1ZmZpY2llbnQ6IFdpdGggbiA9IDM3MjQzMTM5IGFuZCBtdSA9Ci0g ICAgICAgICAxMDUsIHdlIGdldCBhIHRyaXZpYWwgZmFjdG9yLCBmcm9tIHRoZSBzcXVhcmUg Mzg4MDkgPSAxOTdeMiwKLSAgICAgICAgIHdpdGhvdXQgYW55IGNvcnJlc3BvbmRpbmcgUSBl YXJsaWVyIGluIHRoZSBpdGVyYXRpb24uCisgIGlmICghbXBfZmluaXNoX2luX3NpbmdsZSAo ZmFjdG9ycywgZykpCisgICAgeworICAgICAgaWYgKG1wX3ByaW1lX3AgKGcpKQorICAgICAg ICBtcF9mYWN0b3JfaW5zZXJ0IChmYWN0b3JzLCBnLCAxKTsKKyAgICAgIGVsc2UKKyAgICAg ICAgbXBfZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvIChmYWN0b3JzLCBncCwgZ24sIGEgKyAx KTsKKyAgICB9CiAKLSAgICAgICAgIFJlcXVpcmluZyA2NCBtdV4zIDwgbiBzZWVtcyBzdWZm aWNpZW50LiAgKi8KLSAgICAgIGlmIChuMSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAg aWYgKCh3aWRlX3VpbnQpIG11ICogbXUgKiBtdSA+PSBuMCAvIDY0KQotICAgICAgICAgICAg Y29udGludWU7Ci0gICAgICAgIH0KKyAgaWYgKCFtcF9maW5pc2hfaW5fc2luZ2xlIChmYWN0 b3JzLCBxKSkKKyAgICB7CisgICAgICBpZiAobXBfcHJpbWVfcCAocSkpCisgICAgICAgIG1w X2ZhY3Rvcl9pbnNlcnQgKGZhY3RvcnMsIHEsIDEpOwogICAgICAgZWxzZQogICAgICAgICB7 Ci0gICAgICAgICAgaWYgKG4xID4gKCh3aWRlX3VpbnQpIDEgPDwgKFdfVFlQRV9TSVpFIC0g MikpIC8gbXUpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBkZXZtc2cgKCJb Y29tcG9zaXRlIGZhY3Rvci0tcmVzdGFydGluZyBwb2xsYXJkLXJob10gIik7CisgICAgICAg ICAgbXBfZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvIChmYWN0b3JzLCBtcHpfbGltYnNfcmVh ZCAocSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcF9zaXpl IChxKSwgYSArIDEpOwogICAgICAgICB9Ci0gICAgICB1bXVsX3BwbW0gKERoLCBEbCwgbjAs IG11KTsKLSAgICAgIERoICs9IG4xICogbXU7Ci0KLSAgICAgIGFmZmlybSAoRGwgJSA0ICE9 IDEpOwotICAgICAgYWZmaXJtIChEaCA8ICh3aWRlX3VpbnQpIDEgPDwgKFdfVFlQRV9TSVpF IC0gMikpOwotCi0gICAgICBTID0gaXNxcnQyIChEaCwgRGwpOwotCi0gICAgICBRMSA9IDE7 Ci0gICAgICBQID0gUzsKLQotICAgICAgLyogU3F1YXJlIHJvb3QgcmVtYWluZGVyIGZpdHMg aW4gb25lIHdvcmQsIHNvIGlnbm9yZSBoaWdoIHBhcnQuICAqLwotICAgICAgUSA9IERsIC0g UCAqIFA7Ci0gICAgICAvKiBGSVhNRTogV2hlbiBjYW4gdGhpcyBkaWZmZXIgZnJvbSBmbG9v ciAoc3FydCAoMiAqIHNxcnQgKEQpKSk/ICAqLwotICAgICAgTCA9IGlzcXJ0ICgyICogUyk7 Ci0gICAgICBCID0gMiAqIEw7Ci0gICAgICBMMSA9IG11ICogMiAqIEw7Ci0KLSAgICAgIC8q IFRoZSBmb3JtIGlzICgrLy0gUTEsIDJQLCAtLysgUSksIG9mIGRpc2NyaW1pbmFudCA0IChQ XjIgKyBRIFExKSA9Ci0gICAgICAgICA0IEQuICAqLwotCi0gICAgICBmb3IgKGkgPSAwOyBp IDw9IEI7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIHdpZGVfdWludCBxLCBQMSwgdCwg cmVtOwotCi0gICAgICAgICAgZGl2X3NtYWxscSAocSwgcmVtLCBTICsgUCwgUSk7Ci0gICAg ICAgICAgUDEgPSBTIC0gcmVtOyAvKiBQMSA9IHEqUSAtIFAgKi8KLQotICAgICAgICAgIGFm ZmlybSAocSA+IDAgJiYgUSA+IDApOwotCi0jIGlmIFNUQVRfU1FVRk9GCi0gICAgICAgICAg cV9mcmVxWzBdKys7Ci0gICAgICAgICAgcV9mcmVxW01JTiAocSwgUV9GUkVRX1NJWkUpXSsr OwotIyBlbmRpZgotCi0gICAgICAgICAgaWYgKFEgPD0gTDEpCi0gICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgIHdpZGVfdWludCBnID0gUTsKLQotICAgICAgICAgICAgICBpZiAoKFEg JiAxKSA9PSAwKQotICAgICAgICAgICAgICAgIGcgLz0gMjsKLQotICAgICAgICAgICAgICBn IC89IGdjZF9vZGQgKGcsIG11KTsKLQotICAgICAgICAgICAgICBpZiAoZyA8PSBMKQotICAg ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmIChxcG9zID49IFFVRVVFX1NJ WkUpCi0gICAgICAgICAgICAgICAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oInNx dWZvZiBxdWV1ZSBvdmVyZmxvdyIpKTsKLSAgICAgICAgICAgICAgICAgIHF1ZXVlW3Fwb3Nd LlEgPSBnOwotICAgICAgICAgICAgICAgICAgcXVldWVbcXBvc10uUCA9IFAgJSBnOwotICAg ICAgICAgICAgICAgICAgcXBvcysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KKyAgICB9CiAKLSAgICAgICAgICAvKiBJIHRoaW5rIHRoZSBkaWZmZXJlbmNlIGNhbiBi ZSBlaXRoZXIgc2lnbiwgYnV0IG1vZAotICAgICAgICAgICAgIDJeV19UWVBFX1NJWkUgYXJp dGhtZXRpYyBzaG91bGQgYmUgZmluZS4gICovCi0gICAgICAgICAgdCA9IFExICsgcSAqIChQ IC0gUDEpOwotICAgICAgICAgIFExID0gUTsKLSAgICAgICAgICBRID0gdDsKLSAgICAgICAg ICBQID0gUDE7CisgIG1wel9jbGVhciAocSk7CiAKLSAgICAgICAgICBpZiAoKGkgJiAxKSA9 PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB3aWRlX3VpbnQgciA9IGlzX3Nx dWFyZSAoUSk7Ci0gICAgICAgICAgICAgIGlmIChyKQotICAgICAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcXBvczsgaisrKQotICAgICAg ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXVlW2pdLlEg PT0gcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHIgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUcmF2 ZXJzZWQgZW50aXJlIGN5Y2xlLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBn b3RvIG5leHRfbXVsdGlwbGllcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBO ZWVkIHRoZSBhYnNvbHV0ZSB2YWx1ZSBmb3IgZGl2aXNpYmlsaXR5IHRlc3QuICAqLwotICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoUCA+PSBxdWV1ZVtqXS5QKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHQgPSBQIC0gcXVldWVbal0uUDsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBxdWV1 ZVtqXS5QIC0gUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgJSByID09IDAp Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLyogRGVsZXRlIGVudHJpZXMgdXAgdG8gYW5kIGluY2x1ZGluZyBlbnRyeQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiwgd2hpY2ggbWF0Y2hlZC4gICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlIChxdWV1ZSwgcXVldWUg KyBqICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChxcG9z IC0gaiAtIDEpICogc2l6ZW9mIChxdWV1ZVswXSkpOwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcXBvcyAtPSAoaiArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0X2k7Ci0gICAgICAgICAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICAgICAgLyogV2UgaGF2ZSBmb3VuZCBhIHNxdWFyZSBmb3JtLCB3aGljaCBzaG91bGQgZ2l2 ZSBhCi0gICAgICAgICAgICAgICAgICAgICBmYWN0b3IuICAqLwotICAgICAgICAgICAgICAg ICAgUTEgPSByOwotICAgICAgICAgICAgICAgICAgYWZmaXJtIChTID49IFApOyAvKiBXaGF0 IHNpZ25zIGFyZSBwb3NzaWJsZT8gICovCi0gICAgICAgICAgICAgICAgICBQICs9IHIgKiAo KFMgLSBQKSAvIHIpOwotCi0gICAgICAgICAgICAgICAgICAvKiBOb3RlOiBQYXBlciBzYXlz IChOIC0gUCpQKSAvIFExLCB0aGF0IHNlZW1zIGluY29ycmVjdAotICAgICAgICAgICAgICAg ICAgICAgZm9yIHRoZSBjYXNlIEQgPSAyTi4gICovCi0gICAgICAgICAgICAgICAgICAvKiBD b21wdXRlIFEgPSAoRCAtIFAqUCkgLyBRMSwgYnV0IHdlIG5lZWQgZG91YmxlCi0gICAgICAg ICAgICAgICAgICAgICBwcmVjaXNpb24uICAqLwotICAgICAgICAgICAgICAgICAgd2lkZV91 aW50IGhpLCBsbzsKLSAgICAgICAgICAgICAgICAgIHVtdWxfcHBtbSAoaGksIGxvLCBQLCBQ KTsKLSAgICAgICAgICAgICAgICAgIHN1Yl9kZG1tc3MgKGhpLCBsbywgRGgsIERsLCBoaSwg bG8pOwotICAgICAgICAgICAgICAgICAgdWRpdl9xcm5uZCAoUSwgcmVtLCBoaSwgbG8sIFEx KTsKLSAgICAgICAgICAgICAgICAgIGFmZmlybSAocmVtID09IDApOwotCi0gICAgICAgICAg ICAgICAgICBmb3IgKDs7KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgICAgICAgLyogTm90ZTogVGhlcmUgYXBwZWFycyB0byBieSBhIHR5cG8gaW4gdGhlIHBh cGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZXAgNGEgaW4gdGhlIGFsZ29yaXRo bSBkZXNjcmlwdGlvbiBzYXlzIHEgPC0tCi0gICAgICAgICAgICAgICAgICAgICAgICAgZmxv b3IoW1MrUF0vXGhhdCBRKSwgYnV0IGxvb2tpbmcgYXQgdGhlIGVxdWF0aW9ucwotICAgICAg ICAgICAgICAgICAgICAgICAgIGluIFNlYy4gMy4xLCBpdCBzaG91bGQgYmUgcSA8LS0gZmxv b3IoW1MrUF0gLyBRKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAoSW4gdGhpcyBjb2Rl LCBcaGF0IFEgaXMgUTEpLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgICBkaXZfc21hbGxx IChxLCByZW0sIFMgKyBQLCBRKTsKLSAgICAgICAgICAgICAgICAgICAgICBQMSA9IFMgLSBy ZW07ICAgICAvKiBQMSA9IHEqUSAtIFAgKi8KLQotIyBpZiBTVEFUX1NRVUZPRgotICAgICAg ICAgICAgICAgICAgICAgIHFfZnJlcVswXSsrOwotICAgICAgICAgICAgICAgICAgICAgIHFf ZnJlcVtNSU4gKHEsIFFfRlJFUV9TSVpFKV0rKzsKLSMgZW5kaWYKLSAgICAgICAgICAgICAg ICAgICAgICBpZiAoUCA9PSBQMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgICAgICAgICAgIHQgPSBRMSArIHEgKiAoUCAtIFAxKTsKLSAgICAgICAg ICAgICAgICAgICAgICBRMSA9IFE7Ci0gICAgICAgICAgICAgICAgICAgICAgUSA9IHQ7Ci0g ICAgICAgICAgICAgICAgICAgICAgUCA9IFAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0K LSAgICAgICAgICAgICAgICAgIGlmICgoUSAmIDEpID09IDApCi0gICAgICAgICAgICAgICAg ICAgIFEgLz0gMjsKLSAgICAgICAgICAgICAgICAgIFEgLz0gZ2NkX29kZCAoUSwgbXUpOwot Ci0gICAgICAgICAgICAgICAgICBhZmZpcm0gKFEgPiAxICYmIChuMSB8fCBRIDwgbjApKTsK LQotICAgICAgICAgICAgICAgICAgaWYgKHByaW1lX3AgKFEpKQotICAgICAgICAgICAgICAg ICAgICBmYWN0b3JfaW5zZXJ0IChmYWN0b3JzLCBRKTsKLSAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCFmYWN0b3JfdXNpbmdfc3F1Zm9mICgwLCBRLCBmYWN0b3JzKSkKLSAgICAgICAg ICAgICAgICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvIChRLCAyLCBmYWN0b3JzKTsK LQotICAgICAgICAgICAgICAgICAgZGl2ZXhhY3RfMjEgKG4xLCBuMCwgbjEsIG4wLCBRKTsK LQotICAgICAgICAgICAgICAgICAgaWYgKHByaW1lMl9wIChuMSwgbjApKQotICAgICAgICAg ICAgICAgICAgICBmYWN0b3JfaW5zZXJ0X2xhcmdlIChmYWN0b3JzLCBuMSwgbjApOwotICAg ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAgICAgaWYgKCFmYWN0b3JfdXNpbmdfc3F1Zm9mIChuMSwgbjAsIGZhY3RvcnMp KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAobjEgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JfdXNp bmdfcG9sbGFyZF9yaG8gKG4wLCAxLCBmYWN0b3JzKTsKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcl91c2luZ19w b2xsYXJkX3JobzIgKG4xLCBuMCwgMSwgZmFjdG9ycyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgcmV0 dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBu ZXh0X2k6OwotICAgICAgICB9Ci0gICAgbmV4dF9tdWx0aXBsaWVyOjsKLSAgICB9Ci0gIHJl dHVybiBmYWxzZTsKKyBmaW5pc2g6CisgIGZyZWUgKHNjcmF0Y2gpOwogfQotI2VuZGlmCiAK LS8qIENvbXB1dGUgdGhlIHByaW1lIGZhY3RvcnMgb2YgdGhlIDEyOC1iaXQgbnVtYmVyIChU MSxUMCksIGFuZCBwdXQgdGhlCi0gICByZXN1bHRzIGluIEZBQ1RPUlMuICAqLworLyogSW5z ZXJ0IGludG8gRkFDVE9SUyB0aGUgcHJpbWUgZmFjdG9ycyBvZiB0aGUgdHdvLXdvcmQgbnVt YmVyIChUMSxUMCkuCisgICBQcmltZXMgbGVzcyB0aGFuIHRoZSBwcmltZSB3aXRoIGluZGV4 IFBSSU1FX0lEWAorICAgaGF2ZSBhbHJlYWR5IGJlZW4gY29uc2lkZXJlZCwgYW5kIG5lZWQg bm90IGJlIGxvb2tlZCBhdCBhZ2Fpbi4gICovCiBzdGF0aWMgdm9pZAotZmFjdG9yICh3aWRl X3VpbnQgdDEsIHdpZGVfdWludCB0MCwgc3RydWN0IGZhY3RvcnMgKmZhY3RvcnMpCitmYWN0 b3JfdXAgKHN0cnVjdCBmYWN0b3JzICpmYWN0b3JzLCBtcF9saW1iX3QgdDEsIG1wX2xpbWJf dCB0MCwKKyAgICAgICAgICAgaWR4X3QgcHJpbWVfaWR4KQogewogICBmYWN0b3JzLT5uZmFj dG9ycyA9IDA7CiAgIGhpc2V0ICgmZmFjdG9ycy0+cGxhcmdlLCAwKTsKQEAgLTIyMjAsNyAr MTU3Nyw3IEBAIGZhY3RvciAod2lkZV91aW50IHQxLCB3aWRlX3VpbnQgdDAsIHN0cnVjdCBm YWN0b3JzICpmYWN0b3JzKQogICBpZiAodDEgPT0gMCAmJiB0MCA8IDIpCiAgICAgcmV0dXJu OwogCi0gIHV1c2V0ICgmdDEsICZ0MCwgZmFjdG9yX3VzaW5nX2RpdmlzaW9uICh0MSwgdDAs IGZhY3RvcnMpKTsKKyAgdXVzZXQgKCZ0MSwgJnQwLCBmYWN0b3JfdXNpbmdfZGl2aXNpb24g KGZhY3RvcnMsIHQxLCB0MCwgcHJpbWVfaWR4KSk7CiAKICAgaWYgKHQxID09IDAgJiYgdDAg PCAyKQogICAgIHJldHVybjsKQEAgLTIyMjksMTAyICsxNTg2LDgxIEBAIGZhY3RvciAod2lk ZV91aW50IHQxLCB3aWRlX3VpbnQgdDAsIHN0cnVjdCBmYWN0b3JzICpmYWN0b3JzKQogICAg IGZhY3Rvcl9pbnNlcnRfbGFyZ2UgKGZhY3RvcnMsIHQxLCB0MCk7CiAgIGVsc2UKICAgICB7 Ci0jaWYgVVNFX1NRVUZPRgotICAgICAgaWYgKGZhY3Rvcl91c2luZ19zcXVmb2YgKHQxLCB0 MCwgZmFjdG9ycykpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCiAgICAgICBpZiAodDEg PT0gMCkKLSAgICAgICAgZmFjdG9yX3VzaW5nX3BvbGxhcmRfcmhvICh0MCwgMSwgZmFjdG9y cyk7CisgICAgICAgIGZhY3Rvcl91c2luZ19wb2xsYXJkX3JobyAoZmFjdG9ycywgdDAsIDEp OwogICAgICAgZWxzZQotICAgICAgICBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8yICh0MSwg dDAsIDEsIGZhY3RvcnMpOworICAgICAgICBmYWN0b3JfdXNpbmdfcG9sbGFyZF9yaG8yIChm YWN0b3JzLCB0MSwgdDAsIDEpOwogICAgIH0KIH0KIAotLyogVXNlIFBvbGxhcmQtcmhvIHRv IGNvbXB1dGUgdGhlIHByaW1lIGZhY3RvcnMgb2YKLSAgIGFyYml0cmFyeS1wcmVjaXNpb24g VCwgYW5kIHB1dCB0aGUgcmVzdWx0cyBpbiBGQUNUT1JTLiAgKi8KKy8qIENvbXB1dGUgdGhl IHByaW1lIGZhY3RvcnMgb2YgdGhlIHR3by13b3JkIG51bWJlciAoVDEsVDApLAorICAgYW5k IHB1dCB0aGUgcmVzdWx0cyBpbiBGQUNUT1JTLiAgKi8KIHN0YXRpYyB2b2lkCi1tcF9mYWN0 b3IgKG1wel90IHQsIHN0cnVjdCBtcF9mYWN0b3JzICpmYWN0b3JzKQorZmFjdG9yIChzdHJ1 Y3QgZmFjdG9ycyAqZmFjdG9ycywgbXBfbGltYl90IHQxLCBtcF9saW1iX3QgdDApCiB7Ci0g IG1wX2ZhY3Rvcl9pbml0IChmYWN0b3JzKTsKKyAgcmV0dXJuIGZhY3Rvcl91cCAoZmFjdG9y cywgdDEsIHQwLCAwKTsKK30KKworLyogUmV0dXJuIHRoZSBwcmltZSBmYWN0b3JzIG9mIFQu ICAqLworc3RhdGljIHN0cnVjdCBtcF9mYWN0b3JzCittcF9mYWN0b3IgKG1wel90IHQpCit7 CisgIHN0cnVjdCBtcF9mYWN0b3JzIGZhY3RvcnMgPSBtcF9ub19mYWN0b3JzICgpOwogCiAg IGlmIChtcHpfc2duICh0KSAhPSAwKQogICAgIHsKLSAgICAgIG1wX2ZhY3Rvcl91c2luZ19k aXZpc2lvbiAodCwgZmFjdG9ycyk7CisgICAgICBmYWN0b3JzID0gbXBfZmFjdG9yX3VzaW5n X2RpdmlzaW9uICh0KTsKIAogICAgICAgaWYgKG1wel9jbXBfdWkgKHQsIDEpICE9IDApCiAg ICAgICAgIHsKICAgICAgICAgICBkZXZtc2cgKCJbaXMgbnVtYmVyIHByaW1lP10gIik7CiAg ICAgICAgICAgaWYgKG1wX3ByaW1lX3AgKHQpKQotICAgICAgICAgICAgbXBfZmFjdG9yX2lu c2VydCAoZmFjdG9ycywgdCk7CisgICAgICAgICAgICBtcF9mYWN0b3JfaW5zZXJ0ICgmZmFj dG9ycywgdCwgMSk7CiAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgbXBfZmFjdG9yX3Vz aW5nX3BvbGxhcmRfcmhvICh0LCAxLCBmYWN0b3JzKTsKKyAgICAgICAgICAgIG1wX2ZhY3Rv cl91c2luZ19wb2xsYXJkX3JobyAoJmZhY3RvcnMsIG1wel9saW1ic19yZWFkICh0KSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2l6ZSAodCksIDEp OwogICAgICAgICB9CiAgICAgfQorCisgIHJldHVybiBmYWN0b3JzOwogfQogCisvKiBDb252 ZXJ0IHRvICpVIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSBTLCBhbmQgcmV0dXJuIExPTkdJ TlRfT0suCisgICBIb3dldmVyLCBvbiBlcnJvciBzaW1wbHkgcmV0dXJuIGEgdmFsdWUgb3Ro ZXIgdGhhbiBMT05HSU5UX09LLiAgKi8KIHN0YXRpYyBzdHJ0b2xfZXJyb3IKLXN0cnRvMndp ZGVfdWludCAod2lkZV91aW50ICpoaXAsIHdpZGVfdWludCAqbG9wLCBjaGFyIGNvbnN0ICpz KQorc3RydG91dWludCAodXVpbnQgKnUsIGNoYXIgY29uc3QgKnMpCiB7Ci0gIGludCBsb19j YXJyeTsKLSAgd2lkZV91aW50IGhpID0gMCwgbG8gPSAwOwotCi0gIHN0cnRvbF9lcnJvciBl cnIgPSBMT05HSU5UX0lOVkFMSUQ7Ci0KLSAgLyogSW5pdGlhbCBzY2FuIGZvciBpbnZhbGlk IGRpZ2l0cy4gICovCi0gIGNoYXIgY29uc3QgKnAgPSBzOwotICBmb3IgKDs7KQotICAgIHsK LSAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpwKys7Ci0gICAgICBpZiAoYyA9PSAwKQotICAg ICAgICBicmVhazsKLQotICAgICAgaWYgKFVOTElLRUxZICghY19pc2RpZ2l0IChjKSkpCi0g ICAgICAgIHsKLSAgICAgICAgICBlcnIgPSBMT05HSU5UX0lOVkFMSUQ7Ci0gICAgICAgICAg YnJlYWs7Ci0gICAgICAgIH0KKyAgbXBfbGltYl90IGhpID0gMCwgbG8gPSAqcysrIC0gJzAn OwogCi0gICAgICBlcnIgPSBMT05HSU5UX09LOyAgICAgICAgICAgLyogd2UndmUgc2VlbiBh dCBsZWFzdCBvbmUgdmFsaWQgZGlnaXQgKi8KLSAgICB9CisgIGlmIChVTkxJS0VMWSAoOSA8 IGxvKSkKKyAgICByZXR1cm4gTE9OR0lOVF9JTlZBTElEOwogCi0gIHdoaWxlIChlcnIgPT0g TE9OR0lOVF9PSykKKyAgZm9yICg7IExJS0VMWSAoMCA8PSAqcyAtICcwJyAmJiAqcyAtICcw JyA8PSA5KTsgcysrKQogICAgIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICpzKys7Ci0g ICAgICBpZiAoYyA9PSAwKQotICAgICAgICBicmVhazsKLQotICAgICAgYyAtPSAnMCc7Ci0K ICAgICAgIGlmIChVTkxJS0VMWSAoY2tkX211bCAoJmhpLCBoaSwgMTApKSkKLSAgICAgICAg ewotICAgICAgICAgIGVyciA9IExPTkdJTlRfT1ZFUkZMT1c7Ci0gICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIExPTkdJTlRfT1ZFUkZMT1c7CiAKLSAgICAg IGxvX2NhcnJ5ID0gKGxvID4+IChXX1RZUEVfU0laRSAtIDMpKSArIChsbyA+PiAoV19UWVBF X1NJWkUgLSAxKSk7CisgICAgICBpbnQgbG9fY2FycnkgPSAobG8gPj4gKFdfVFlQRV9TSVpF IC0gMykpICsgKGxvID4+IChXX1RZUEVfU0laRSAtIDEpKTsKICAgICAgIGxvX2NhcnJ5ICs9 IDEwICogbG8gPCAyICogbG87CiAKICAgICAgIGxvID0gMTAgKiBsbzsKLSAgICAgIGxvX2Nh cnJ5ICs9IGNrZF9hZGQgKCZsbywgbG8sIGMpOworICAgICAgbG9fY2FycnkgKz0gY2tkX2Fk ZCAoJmxvLCBsbywgKnMgLSAnMCcpOwogICAgICAgaWYgKFVOTElLRUxZIChja2RfYWRkICgm aGksIGhpLCBsb19jYXJyeSkpKQotICAgICAgICB7Ci0gICAgICAgICAgZXJyID0gTE9OR0lO VF9PVkVSRkxPVzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICByZXR1 cm4gTE9OR0lOVF9PVkVSRkxPVzsKICAgICB9CiAKLSAgKmhpcCA9IGhpOwotICAqbG9wID0g bG87CisgIGlmIChVTkxJS0VMWSAoKnMpKQorICAgIHJldHVybiBMT05HSU5UX0lOVkFMSUQ7 CiAKLSAgcmV0dXJuIGVycjsKKyAgKnUgPSBtYWtlX3V1aW50IChoaSwgbG8pOworICByZXR1 cm4gTE9OR0lOVF9PSzsKIH0KIAogLyogRkFDVE9SX1BJUEVfQlVGIGlzIGNob3NlbiB0byBn aXZlIGdvb2QgcGVyZm9ybWFuY2UsCiAgICBhbmQgYWxzbyBpcyB0aGUgbWF4IGd1YXJhbnRl ZWQgc2l6ZSB0aGF0CiAgICBjb25zdW1lcnMgY2FuIHJlYWQgYXRvbWljYWxseSB0aHJvdWdo IHBpcGVzLgogICAgQWxzbyBpdCdzIGJpZyBlbm91Z2ggdG8gY2F0ZXIgZm9yIG1heCBsaW5l IGxlbmd0aAotICAgZXZlbiB3aXRoIDEyOCBiaXQgd2lkZV91aW50LiAgKi8KKyAgIGV2ZW4g d2l0aCAxMjggYml0IHdvcmQuICAqLwogI2lmbmRlZiBfUE9TSVhfUElQRV9CVUYKICMgZGVm aW5lIF9QT1NJWF9QSVBFX0JVRiA1MTIKICNlbmRpZgpAQCAtMjQxMiw3ICsxNzQ4LDcgQEAg bGJ1Zl9wdXRubCAodm9pZCkKICAgIGV2ZXJ5dGhpbmcgZnJvbSBCVUZFTkQgdG8gbGJ1Zl9i dWYncyBlbmQuICBVc2UgdGhlIGFyZWEganVzdCBiZWZvcmUKICAgIEJVRkVORCB0ZW1wb3Jh cmlseS4gICovCiBzdGF0aWMgdm9pZAotbGJ1Zl9wdXRpbnRfYXBwZW5kICh3aWRlX3VpbnQg aSwgY2hhciAqYnVmZW5kKQorbGJ1Zl9wdXRpbnRfYXBwZW5kIChtcF9saW1iX3QgaSwgY2hh ciAqYnVmZW5kKQogewogICBjaGFyICppc3RyID0gYnVmZW5kOwogICBkbwpAQCAtMjQzMiwy MSArMTc2OCwyOSBAQCBsYnVmX3B1dGludF9hcHBlbmQgKHdpZGVfdWludCBpLCBjaGFyICpi dWZlbmQpCiAKIC8qIEFwcGVuZCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEkgdG8g bGJ1Zl9idWYuICAqLwogc3RhdGljIHZvaWQKLWxidWZfcHV0aW50ICh3aWRlX3VpbnQgaSkK K2xidWZfcHV0aW50IChtcF9saW1iX3QgaSkKIHsKICAgbGJ1Zl9wdXRpbnRfYXBwZW5kIChp LCBsYnVmX2J1ZiArIHNpemVvZiBsYnVmX2J1Zik7CiB9CitzdGF0aWMgdm9pZAorbGJ1Zl9w dXRiaXRjbnQgKG1wX2JpdGNudF90IGkpCit7CisgIGNoYXIgKmJ1ZmVuZCA9IGxidWZfYnVm ICsgc2l6ZW9mIGxidWZfYnVmOworICBmb3IgKDsgTVBfTElNQl9NQVggPCBpOyBpIC89IDEw KQorICAgICotLWJ1ZmVuZCA9ICcwJyArIGkgJSAxMDsKKyAgbGJ1Zl9wdXRpbnRfYXBwZW5k IChpLCBidWZlbmQpOworfQogCiAvKiBBcHBlbmQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlv biBvZiBUIHRvIGxidWZfYnVmLiAgKi8KIHN0YXRpYyB2b2lkCiBwcmludF91dWludCAodXVp bnQgdCkKIHsKLSAgd2lkZV91aW50IHQxID0gaGkgKHQpLCB0MCA9IGxvICh0KTsKKyAgbXBf bGltYl90IHQxID0gaGkgKHQpLCB0MCA9IGxvICh0KTsKICAgY2hhciAqYnVmZW5kID0gbGJ1 Zl9idWYgKyBzaXplb2YgbGJ1Zl9idWY7CiAKICAgd2hpbGUgKHQxKQogICAgIHsKLSAgICAg IHdpZGVfdWludCByID0gdDEgJSBCSUdfUE9XRVJfT0ZfMTA7CisgICAgICBtcF9saW1iX3Qg ciA9IHQxICUgQklHX1BPV0VSX09GXzEwOwogICAgICAgdDEgLz0gQklHX1BPV0VSX09GXzEw OwogICAgICAgdWRpdl9xcm5uZCAodDAsIHIsIHIsIHQwLCBCSUdfUE9XRVJfT0ZfMTApOwog ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMT0dfQklHX1BPV0VSX09GXzEwOyBpKyspCkBA IC0yNDU5LDcgKzE4MDMsNyBAQCBwcmludF91dWludCAodXVpbnQgdCkKICAgbGJ1Zl9wdXRp bnRfYXBwZW5kICh0MCwgYnVmZW5kKTsKIH0KIAotLyogQnVmZmVyIGFuIG1weiB0byB0aGUg aW50ZXJuYWwgTEJVRiwgcG9zc2libHkgd3JpdGluZyBpZiBpdCBpcyBsb25nLiAgKi8KKy8q IEJ1ZmZlciB0aGUgbXB6IEkgdG8gbGJ1Zl9idWYsIHBvc3NpYmx5IHdyaXRpbmcgaWYgaXQg aXMgbG9uZy4gICovCiBzdGF0aWMgdm9pZAogbGJ1Zl9wdXRtcHogKG1wel90IGNvbnN0IGkp CiB7CkBAIC0yNDg2LDE2ICsxODMwLDE2IEBAIGxidWZfcHV0bXB6IChtcHpfdCBjb25zdCBp KQogICAgIH0KIH0KIAotLyogU2luZ2xlLXByZWNpc2lvbiBmYWN0b3JpbmcgKi8KKy8qIEVt aXQgdGhlIGZhY3RvcnMgb2YgVCwgd2hpY2ggaXMgbGVzcyB0aGFuIEJeMiAvIDIuICAqLwog c3RhdGljIHZvaWQKLXByaW50X2ZhY3RvcnNfc2luZ2xlICh3aWRlX3VpbnQgdDEsIHdpZGVf dWludCB0MCkKK3ByaW50X2ZhY3RvcnNfc2luZ2xlICh1dWludCB0KQogewogICBzdHJ1Y3Qg ZmFjdG9ycyBmYWN0b3JzOwogCi0gIHByaW50X3V1aW50IChtYWtlX3V1aW50ICh0MSwgdDAp KTsKKyAgcHJpbnRfdXVpbnQgKHQpOwogICBsYnVmX3B1dGMgKCc6Jyk7CiAKLSAgZmFjdG9y ICh0MSwgdDAsICZmYWN0b3JzKTsKKyAgZmFjdG9yICgmZmFjdG9ycywgaGkgKHQpLCBsbyAo dCkpOwogCiAgIGZvciAoaW50IGogPSAwOyBqIDwgZmFjdG9ycy5uZmFjdG9yczsgaisrKQog ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgZmFjdG9ycy5lW2pdOyBrKyspCkBAIC0yNTEwLDcg KzE4NTQsNyBAQCBwcmludF9mYWN0b3JzX3NpbmdsZSAod2lkZV91aW50IHQxLCB3aWRlX3Vp bnQgdDApCiAgICAgICAgICAgfQogICAgICAgfQogCi0gIGlmIChoaSAoZmFjdG9ycy5wbGFy Z2UpKQorICBpZiAoaGlfaXNfc2V0ICgmZmFjdG9ycy5wbGFyZ2UpKQogICAgIHsKICAgICAg IGxidWZfcHV0YyAoJyAnKTsKICAgICAgIHByaW50X3V1aW50IChmYWN0b3JzLnBsYXJnZSk7 CkBAIC0yNTMzLDI1ICsxODc3LDIzIEBAIHByaW50X2ZhY3RvcnMgKGNoYXIgY29uc3QgKmlu cHV0KQogICAgIHN0cisrOwogICBzdHIgKz0gKnN0ciA9PSAnKyc7CiAKLSAgd2lkZV91aW50 IHQxLCB0MDsKLQogICAvKiBUcnkgY29udmVydGluZyB0aGUgbnVtYmVyIHRvIG9uZSBvciB0 d28gd29yZHMuICBJZiBpdCBmYWlscywgdXNlIEdNUCBvcgogICAgICBwcmludCBhbiBlcnJv ciBtZXNzYWdlLiAgVGhlIDJuZCBjb25kaXRpb24gY2hlY2tzIHRoYXQgdGhlIG1vc3QKICAg ICAgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSB0d28td29yZCBudW1iZXIgaXMgY2xlYXIsIGlu IGEgdHlwZXNpemUgbmV1dHJhbAogICAgICB3YXkuICAqLwotICBzdHJ0b2xfZXJyb3IgZXJy ID0gc3RydG8yd2lkZV91aW50ICgmdDEsICZ0MCwgc3RyKTsKKyAgdXVpbnQgdTsKKyAgc3Ry dG9sX2Vycm9yIGVyciA9IHN0cnRvdXVpbnQgKCZ1LCBzdHIpOwogCiAgIHN3aXRjaCAoZXJy KQogICAgIHsKICAgICBjYXNlIExPTkdJTlRfT0s6Ci0gICAgICBpZiAoKCh0MSA8PCAxKSA+ PiAxKSA9PSB0MSkKKyAgICAgIGlmIChoaSAodSkgPj4gKFdfVFlQRV9TSVpFIC0gMSkgPT0g MCkKICAgICAgICAgewogICAgICAgICAgIGRldm1zZyAoIlt1c2luZyBzaW5nbGUtcHJlY2lz aW9uIGFyaXRobWV0aWNdICIpOwotICAgICAgICAgIHByaW50X2ZhY3RvcnNfc2luZ2xlICh0 MSwgdDApOworICAgICAgICAgIHByaW50X2ZhY3RvcnNfc2luZ2xlICh1KTsKICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgYnJlYWs7Ci0KKyAgICAgIEZBTExU SFJPVUdIOwogICAgIGNhc2UgTE9OR0lOVF9PVkVSRkxPVzoKICAgICAgIC8qIFRyeSBHTVAu ICAqLwogICAgICAgYnJlYWs7CkBAIC0yNTY2LDIzICsxOTA4LDIzIEBAIHByaW50X2ZhY3Rv cnMgKGNoYXIgY29uc3QgKmlucHV0KQogCiAgIGRldm1zZyAoIlt1c2luZyBhcmJpdHJhcnkt cHJlY2lzaW9uIGFyaXRobWV0aWNdICIpOwogICBtcHpfdCB0OwotICBzdHJ1Y3QgbXBfZmFj dG9ycyBmYWN0b3JzOwotCiAgIG1wel9pbml0X3NldF9zdHIgKHQsIHN0ciwgMTApOworICBp ZiAoTVBfRkFDVE9SX1VTSU5HX1BPTExBUkRfUkhPX05fTUFYIDwgbXBfc2l6ZSAodCkpCisg ICAgeGFsbG9jX2RpZSAoKTsKIAogICBsYnVmX3B1dG1weiAodCk7CiAgIGxidWZfcHV0YyAo JzonKTsKLSAgbXBfZmFjdG9yICh0LCAmZmFjdG9ycyk7CisgIHN0cnVjdCBtcF9mYWN0b3Jz IGZhY3RvcnMgPSBtcF9mYWN0b3IgKHQpOwogCiAgIGZvciAoaWR4X3QgaiA9IDA7IGogPCBm YWN0b3JzLm5mYWN0b3JzOyBqKyspCi0gICAgZm9yICh1bnNpZ25lZCBsb25nIGludCBrID0g MDsgayA8IGZhY3RvcnMuZVtqXTsgaysrKQorICAgIGZvciAobXBfYml0Y250X3QgayA9IDA7 IGsgPCBmYWN0b3JzLmZbal0uZTsgaysrKQogICAgICAgewogICAgICAgICBsYnVmX3B1dGMg KCcgJyk7Ci0gICAgICAgIGxidWZfcHV0bXB6IChmYWN0b3JzLnBbal0pOwotICAgICAgICBp ZiAocHJpbnRfZXhwb25lbnRzICYmIGZhY3RvcnMuZVtqXSA+IDEpCisgICAgICAgIGxidWZf cHV0bXB6IChmYWN0b3JzLmZbal0ucCk7CisgICAgICAgIGlmIChwcmludF9leHBvbmVudHMg JiYgZmFjdG9ycy5mW2pdLmUgPiAxKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGxidWZf cHV0YyAoJ14nKTsKLSAgICAgICAgICAgIGxidWZfcHV0aW50IChmYWN0b3JzLmVbal0pOwor ICAgICAgICAgICAgbGJ1Zl9wdXRiaXRjbnQgKGZhY3RvcnMuZltqXS5lKTsKICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgIH0KICAgICAgIH0KQEAgLTI1OTMsNiArMTkzNSw3IEBA IHByaW50X2ZhY3RvcnMgKGNoYXIgY29uc3QgKmlucHV0KQogICByZXR1cm4gdHJ1ZTsKIH0K IAorLyogT3V0cHV0IGEgdXNhZ2UgZGlhZ25vc3RpYyBhbmQgZXhpdCB3aXRoIFNUQVRVUy4g ICovCiB2b2lkCiB1c2FnZSAoaW50IHN0YXR1cykKIHsKQEAgLTI2MTksNiArMTk2Miw3IEBA IGFyZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcmVhZCB0aGVtIGZyb20gc3Rh bmRhcmQgaW5wdXQuXG5cCiAgIGV4aXQgKHN0YXR1cyk7CiB9CiAKKy8qIFJlYWQgbnVtYmVy cyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUsIGFuZCBvdXRwdXQgdGhlaXIgZmFjdG9ycy4g ICovCiBzdGF0aWMgYm9vbAogZG9fc3RkaW4gKHZvaWQpCiB7CkBAIC0yNjgwLDEwICsyMDI0 LDYgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAgIGF0ZXhpdCAobGJ1Zl9m bHVzaCk7CiAKLSNpZiBTVEFUX1NRVUZPRgotICBtZW1zZXQgKHFfZnJlcSwgMCwgc2l6ZW9m IChxX2ZyZXEpKTsKLSNlbmRpZgotCiAgIGJvb2wgb2s7CiAgIGlmIChhcmdjIDw9IG9wdGlu ZCkKICAgICBvayA9IGRvX3N0ZGluICgpOwpAQCAtMjY5NSwyMCArMjAzNSw1IEBAIG1haW4g KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICBvayA9IGZhbHNlOwogICAgIH0K IAotI2lmIFNUQVRfU1FVRk9GCi0gIGlmIChxX2ZyZXFbMF0gPiAwKQotICAgIHsKLSAgICAg IGRvdWJsZSBhY2NfZjsKLSAgICAgIHByaW50ZiAoInEgIGZyZXEuICBjdW0uIGZyZXEuKHRv dGFsOiAlZClcbiIsIHFfZnJlcVswXSk7Ci0gICAgICBmb3IgKGludCBpID0gMSwgYWNjX2Yg PSAwLjA7IGkgPD0gUV9GUkVRX1NJWkU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGRv dWJsZSBmID0gKGRvdWJsZSkgcV9mcmVxW2ldIC8gcV9mcmVxWzBdOwotICAgICAgICAgIGFj Y19mICs9IGY7Ci0gICAgICAgICAgcHJpbnRmICgiJXMlZCAlLjJmJSUgJS4yZiUlXG4iLCBp ID09IFFfRlJFUV9TSVpFID8gIj49IiA6ICIiLCBpLAotICAgICAgICAgICAgICAgICAgMTAw LjAgKiBmLCAxMDAuMCAqIGFjY19mKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAg IHJldHVybiBvayA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKIH0KZGlmZiAtLWdp dCBhL3NyYy9tYWtlLXByaW1lLWxpc3QuYyBiL3NyYy9tYWtlLXByaW1lLWxpc3QuYwppbmRl eCA2YjUzYTYyNGUuLjJhZWYwOTEwNiAxMDA2NDQKLS0tIGEvc3JjL21ha2UtcHJpbWUtbGlz dC5jCisrKyBiL3NyYy9tYWtlLXByaW1lLWxpc3QuYwpAQCAtMTA4LDcgKzEwOCw3IEBAIHBy aW50X3dpZGVfdWludCAod2lkZV91aW50IG4sIGludCBuZXN0aW5nLCB1bnNpZ25lZCB3aWRl X3VpbnRfYml0cykKICAgICB9CiAgIGVsc2UgaWYgKG5lc3RpbmcpCiAgICAgewotICAgICAg cHJpbnRmICgiKHdpZGVfdWludCkgIik7CisgICAgICBwcmludGYgKCIobXBfbGltYl90KSAi KTsKICAgICAgIGhleF9kaWdpdHNfcGVyX2xpdGVyYWwKICAgICAgICAgPSAoKHdpZGVfdWlu dF9iaXRzIC0gMSkgJSBiaXRzX3Blcl9saXRlcmFsKSAlIDQgKyAxOwogICAgIH0KQEAgLTEz OSwyMCArMTM5LDIxIEBAIG91dHB1dF9wcmltZXMgKGNvbnN0IHN0cnVjdCBwcmltZSAqcHJp bWVzLCB1bnNpZ25lZCBucHJpbWVzKQogICBwdXRzICgiLyogR2VuZXJhdGVkIGZpbGUgLS0g RE8gTk9UIEVESVQgKi9cbiIpOwogICBwcmludGYgKCIjZGVmaW5lIFdJREVfVUlOVF9CSVRT ICV1XG4iLCB3aWRlX3VpbnRfYml0cyk7CiAKLSAgZm9yIChpID0gMCwgcCA9IDI7IGkgPCBu cHJpbWVzOyBpKyspCisgIGZvciAoaSA9IDA7IGkgPCBucHJpbWVzOyBpKyspCiAgICAgewot ICAgICAgdW5zaWduZWQgaW50IGQ4ID0gaSArIDggPCBucHJpbWVzID8gcHJpbWVzW2kgKyA4 XS5wIC0gcHJpbWVzW2ldLnAgOiAweGZmOwotICAgICAgaWYgKDI1NSA8IGQ4KSAvKiB0aGlz IGhhcHBlbnMgYXQgNjY4MjIxICovCisgICAgICAvKiBDaGVjayB0aGF0IHByaW1lc1tpXS5w IGZpdHMgaW4gaW50X2xlYXN0MTZfdCBvbiBhbGwgcGxhdGZvcm1zLAorICAgICAgICAgYW5k IHRoYXQgaXRzIHNxdWFyZSBmaXRzIGluIGludF9sZWFzdDMyX3Qgb24gYWxsIHBsYXRmb3Jt cywKKyAgICAgICAgIGFzIGZhY3Rvci5jIHJlbGllcyBvbiB0aGlzLiAgKi8KKyAgICAgIGlm ICgoMSA8PCAoMTYgLSAxKSkgPD0gcHJpbWVzW2ldLnApCiAgICAgICAgIGFib3J0ICgpOwot ICAgICAgcHJpbnRmICgiUCAoJXUsICV1LFxuICAgKCIsIHByaW1lc1tpXS5wIC0gcCwgZDgp OworCisgICAgICBwcmludGYgKCJQICgldSxcbiAgICgiLCBwcmltZXNbaV0ucCk7CiAgICAg ICBwcmludF93aWRlX3VpbnQgKHByaW1lc1tpXS5waW52LCAwLCB3aWRlX3VpbnRfYml0cyk7 Ci0gICAgICBwcmludGYgKCIpLFxuICAgVUlOVE1BWF9NQVggLyAldSlcbiIsIHByaW1lc1tp XS5wKTsKLSAgICAgIHAgPSBwcmltZXNbaV0ucDsKKyAgICAgIHByaW50ZiAoIiksXG4gICAo bXBfbGltYl90KSAtMSAvICV1KVxuIiwgcHJpbWVzW2ldLnApOwogICAgIH0KIAotICBwcmlu dGYgKCJcbiN1bmRlZiBGSVJTVF9PTUlUVEVEX1BSSU1FXG4iKTsKLQogICAvKiBGaW5kIG5l eHQgcHJpbWUgKi8KKyAgcCA9IHByaW1lc1tucHJpbWVzIC0gMV0ucDsKICAgZG8KICAgICB7 CiAgICAgICBwICs9IDI7CkBAIC0xNjksNyArMTcwLDcgQEAgb3V0cHV0X3ByaW1lcyAoY29u c3Qgc3RydWN0IHByaW1lICpwcmltZXMsIHVuc2lnbmVkIG5wcmltZXMpCiAgICAgfQogICB3 aGlsZSAoIWlzX3ByaW1lKTsKIAotICBwcmludGYgKCIjZGVmaW5lIEZJUlNUX09NSVRURURf UFJJTUUgJXVcbiIsIHApOworICBwcmludGYgKCIjZGVmaW5lIFNRVUFSRV9PRl9GSVJTVF9P TUlUVEVEX1BSSU1FICV1XG4iLCBwICogcCk7CiB9CiAKIEFUVFJJQlVURV9NQUxMT0MKZGlm ZiAtLWdpdCBhL3Rlc3RzL2ZhY3Rvci9jcmVhdGUtdGVzdC5zaCBiL3Rlc3RzL2ZhY3Rvci9j cmVhdGUtdGVzdC5zaAppbmRleCBmYzg0YjE0ODQuLjdmYWQ0MGNkYyAxMDA3NTUKLS0tIGEv dGVzdHMvZmFjdG9yL2NyZWF0ZS10ZXN0LnNoCisrKyBiL3Rlc3RzL2ZhY3Rvci9jcmVhdGUt dGVzdC5zaApAQCAtMjcsNiArMjcsMTAgQEAgdDI9MTcwMTQxMTgzNDYwNDY5MjI5NTQ1NzQ4 MTMwOTgxMzAyMjIzODg3CiAjIGh0dHBzOi8vYnVncy5nbnUub3JnLzczNDc0CiBidWc3MzQ3 ND0yMjIyMjIyMjIyMjIyMjIyMjIwMjExMTEyMTExMQogCisjIDJeNDAwIC0gNTkzCitiaWdw cmltZT0yNTgyMjQ5ODc4MDg2OTA4NTg5NjU1OTE5MTcyMDAzMDExODc0MzI5NzA1NzkyODI5 MjIzNTEyODMwNjU5MzU2NTQwNlwKKzQ3NjIyMDE2ODQxMTk0NjI5NjQ1MzUzMjgwMTM3ODMx NDM1OTAzMTcxOTcyNzQ3NDkyNzgzCisKICMgRWFjaCB0ZXN0IGlzIGEgdHJpcGxlOiBsbywg aGksIHNoYTEgb2YgcmVzdWx0LgogIyBUaGUgdGVzdCBzY3JpcHQsIHJ1bi5zaCwgcnVucyBz ZXEgbG8gaGl8ZmFjdG9yfHNoYTFzdW0KICMgYW5kIHZlcmlmaWVzIHRoYXQgdGhlIGFjdHVh bCBhbmQgZXhwZWN0ZWQgY2hlY2tzdW1zIGFyZSB0aGUgc2FtZS4KQEAgLTcwLDYgKzc0LDcg QEAgY2FzZSAkdCBpbgogICB0MzUpIHNldCAgICR7cX05NTgzMzYgICAke3F9OTYwMzM1IDIz NzQ5MTlhODkxOTZlMWZjZTkzYWRmZTc3OWNiNDY2NDU1NmQ0YjYgOzsKICAgdDM2KSBzZXQg ICAke3F9OTYwMzM2ICAgJHtxfTk2MjMzNSA1NjllNDM2M2U4ZDllODgzMGExODdkOWFiMjcz NjVlZWYwOGFiZGUxIDs7CiAgIHQzNykgc2V0ICAgICRidWc3MzQ3NCAgICAkYnVnNzM0NzQg NjFkMDRhYWY3NTdhY2M1YTM3ZWIxZDU1ODFhOThlZWE3OGVmNTBlOCA7OworICB0MzgpIHNl dCAgICAkYmlncHJpbWUgICAgJGJpZ3ByaW1lIDAyZjNjNTFhMjg5NmZmNDUyNGZkNzZkZTVm NTg1NDAyOTg3OWExNzkgOzsKICAgKikKICAgICBlY2hvICIkMDogZXJyb3I6IHVua25vd24g dGVzdDogJyR0ZXN0X25hbWUnIC0+ICckdCciID4mMgogICAgIGV4aXQgMQpkaWZmIC0tZ2l0 IGEvdGVzdHMvZmFjdG9yL2ZhY3Rvci5wbCBiL3Rlc3RzL2ZhY3Rvci9mYWN0b3IucGwKaW5k ZXggYTRlZGI3YWNiLi43ODJkZWVmZTYgMTAwNzU1Ci0tLSBhL3Rlc3RzL2ZhY3Rvci9mYWN0 b3IucGwKKysrIGIvdGVzdHMvZmFjdG9yL2ZhY3Rvci5wbApAQCAtODYsMTIgKzg2LDE1IEBA IG15IEBUZXN0cyA9CiAgICAgICAnMTE1NzkyMDg5MjM3MzE2MTk1NDIzNTcwOTg1MDA4Njg3 OTA3ODUzJwogICAgICAgLiAnMjY5OTg0NjY1NjQwNTY0MDM5NDU3NTg0MDA3OTEzMTI5NjM5 OTM2JywKICAgICAgIHtPVVQgPT4gJzIgJ3gyNTUgLiAnMid9XSwKLSAgICAgWydidWctZ21w LXBsdXNfMl9zdXBfMTI4X3BsdXNfMScsCisgICAgIFsnYnVnLWdtcC1wbHVzXzJfc3VwXzEy N19wbHVzXzEnLAogICAgICAgJysxNzAxNDExODM0NjA0NjkyMzE3MzE2ODczMDM3MTU4ODQx MDU3MjknLAogICAgICAge09VVCA9PiAnMyA1NjcxMzcyNzgyMDE1NjQxMDU3NzIyOTEwMTIz ODYyODAzNTI0Myd9XSwKICAgICAgWydidWctd2l0aC0xMjgtYml0LXVpbnRtYXhfdCcsCiAg ICAgICAnMzQwMjgyMzY2OTIwOTM4NDYzNDYzMzc0NjA3NDMxNzY4MjExMzU1JywKICAgICAg IHtPVVQgPT4gJzUgMzEgMjE5NTM3MDEwOTE2NzM0NDkyNTU3MDE1ODc1NzYyNDMxMTA0MSd9 XSwKKyAgICAgWydsdC01MDAwLXRpbWVzLTEyOC1iaXQnLAorICAgICAgJzE3MDEwNzE1NTIy Mzc3NzEzNzg4NTM0MDk2NjI1NTE0MDkyODgyNzM3MDMnLAorICAgICAge09VVCA9PiAnNDk5 OSAzNDAyODIzNjY5MjA5Mzg0NjM0NjMzNzQ2MDc0MzE3NjgyMTEyOTcnfV0sCiAgICAgIFsn aC0xJywgJy1oIDMwMDAnLCB7T1VUID0+ICcyXjMgMyA1XjMnfV0sCiAgICAgIFsnaC0yJywg JzMwMDAgLS1leHBvbmVudHMnLCB7T1VUID0+ICcyXjMgMyA1XjMnfV0sCiAgICAgKTsKZGlm ZiAtLWdpdCBhL3Rlc3RzL2xvY2FsLm1rIGIvdGVzdHMvbG9jYWwubWsKaW5kZXggMDMxMTRm NzU5Li5kZDA3MDMyZGEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2xvY2FsLm1rCisrKyBiL3Rlc3Rz L2xvY2FsLm1rCkBAIC03NjUsNyArNzY1LDcgQEAgZmFjdG9yX3Rlc3RzID0gXAogICAkKHRm KS90MjAuc2ggJCh0ZikvdDIxLnNoICQodGYpL3QyMi5zaCAkKHRmKS90MjMuc2ggJCh0Zikv dDI0LnNoIFwKICAgJCh0ZikvdDI1LnNoICQodGYpL3QyNi5zaCAkKHRmKS90Mjcuc2ggJCh0 ZikvdDI4LnNoICQodGYpL3QyOS5zaCBcCiAgICQodGYpL3QzMC5zaCAkKHRmKS90MzEuc2gg JCh0ZikvdDMyLnNoICQodGYpL3QzMy5zaCAkKHRmKS90MzQuc2ggXAotICAkKHRmKS90MzUu c2ggJCh0ZikvdDM2LnNoICQodGYpL3QzNy5zaAorICAkKHRmKS90MzUuc2ggJCh0ZikvdDM2 LnNoICQodGYpL3QzNy5zaCAkKHRmKS90Mzguc2gKIAogJChmYWN0b3JfdGVzdHMpOiAkKHRm KS9ydW4uc2ggJCh0ZikvY3JlYXRlLXRlc3Quc2gKIAkkKEFNX1ZfR0VOKSQoTUtESVJfUCkg JCh0ZikK --------------82F0QomCnpSlvLmNa97TF8yq-- From unknown Sun Aug 10 16:46:45 2025 X-Loop: help-debbugs@gnu.org Subject: bug#78476: GNU 'factor' problems with 128-bit word Resent-From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Sun, 27 Jul 2025 08:52:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 78476 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: Paul Eggert Cc: 78476@debbugs.gnu.org, nisse@lysator.liu.se Received: via spool by 78476-submit@debbugs.gnu.org id=B78476.17536062754798 (code B ref 78476); Sun, 27 Jul 2025 08:52:02 +0000 Received: (at 78476) by debbugs.gnu.org; 27 Jul 2025 08:51:15 +0000 Received: from localhost ([127.0.0.1]:48262 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ufx6B-0001FJ-09 for submit@debbugs.gnu.org; Sun, 27 Jul 2025 04:51:15 -0400 Received: from martin.gmplib.org ([130.242.124.102]:50883 helo=shell.gmplib.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ufx68-0001Eq-IU for 78476@debbugs.gnu.org; Sun, 27 Jul 2025 04:51:13 -0400 Received: by shell.gmplib.org (Postfix, from userid 1001) id D72EB8D6D5; Sun, 27 Jul 2025 10:51:10 +0200 (CEST) From: =?UTF-8?Q?Torbj=C3=B6rn?= Granlund In-Reply-To: <6c763b9d-c1e4-41fb-ab50-53f61dc49391@cs.ucla.edu> (Paul Eggert's message of "Wed, 9 Jul 2025 22:44:32 -0700") References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> <86sekzvk3r.fsf@shell.gmplib.org> <6c763b9d-c1e4-41fb-ab50-53f61dc49391@cs.ucla.edu> Date: Sun, 27 Jul 2025 10:51:10 +0200 Message-ID: <86frei585d.fsf@shell.gmplib.org> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.4 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thank you for merging the new mpn-based factoring code! The code looks good, I did not see anything which needs improvements. I believe the factoring speedup for numbers of 3 or more limb is quite significant (2x-3x), even when not considering the time saved by not proving primality of found factors. You might want mention that in the header about the 2025 improvements. --=20 Torbj=C3=B6rn Please encrypt, key id 0xC8601622 From unknown Sun Aug 10 16:46:45 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: Paul Eggert Subject: bug#78476: closed (Re: bug#78476: GNU 'factor' problems with 128-bit word) Message-ID: References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> X-Gnu-PR-Message: they-closed 78476 X-Gnu-PR-Package: coreutils Reply-To: 78476@debbugs.gnu.org Date: Sun, 27 Jul 2025 14:43:03 +0000 Content-Type: multipart/mixed; boundary="----------=_1753627383-15940-1" This is a multi-part message in MIME format... ------------=_1753627383-15940-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #78476: GNU 'factor' problems with 128-bit word which was filed against the coreutils package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 78476@debbugs.gnu.org. --=20 78476: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D78476 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1753627383-15940-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 78476-done) by debbugs.gnu.org; 27 Jul 2025 14:42:44 +0000 Received: from localhost ([127.0.0.1]:51031 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ug2aJ-00048H-Fk for submit@debbugs.gnu.org; Sun, 27 Jul 2025 10:42:43 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]:54986) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ug2aE-00047p-R0 for 78476-done@debbugs.gnu.org; Sun, 27 Jul 2025 10:42:41 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 493393C010860; Sun, 27 Jul 2025 07:42:32 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id FANXOnz-5oUu; Sun, 27 Jul 2025 07:42:32 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 218463C010873; Sun, 27 Jul 2025 07:42:32 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 218463C010873 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1753627352; bh=4lfOkS8MDpidDSwIzF65b7O1Mzpk960QrhOZ8YQ0K84=; h=Message-ID:Date:MIME-Version:To:From; b=XrctaAa4p06FAWGNWP06qYO0w6PlqbNAFan07Oq0Ee+gbR4nYFAK7U+eK9HjJwZt6 x/4QvD4prWFwVsMcO1nMKMvOsRnziul77Cvla3mSpX54aZnZjsXD2IZBC1qchiBv3I 0Ou6qcHrEAeG0AKvqDjC9V7mS+jska8OngVv3fqRTFTW8VWDqAK4LvNlSk7vKJINN3 a7llAA03zPRIIV1sgmP9LaMJpmoE2wrOCb6XEhP5A4xZT8z01d3HinK3UlUVpxzNVi aRWDd4DV02u0feCftZsEa8A5hqGiSt/71+32VTveaPWJm6xUJnEfLtShw6YNEMc3B8 dKYJgBp+CV9DQ== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id lM4gIbQ1ZP8N; Sun, 27 Jul 2025 07:42:31 -0700 (PDT) Received: from penguin.cs.ucla.edu (47-154-30-222.fdr01.snmn.ca.ip.frontiernet.net [47.154.30.222]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id E60033C010860; Sun, 27 Jul 2025 07:42:31 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------6FDSXhkhpiKEoNd56RNfZyVd" Message-ID: Date: Sun, 27 Jul 2025 07:42:30 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#78476: GNU 'factor' problems with 128-bit word To: =?UTF-8?Q?Torbj=C3=B6rn_Granlund?= References: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> <868qmuthhm.fsf@shell.gmplib.org> <5fe8b1c3-1dc6-4863-9892-ab4fef74fb8e@cs.ucla.edu> <86iklwutmx.fsf@shell.gmplib.org> <7bbe9797-48c0-435a-8334-85c2ef817955@cs.ucla.edu> <86sekzvk3r.fsf@shell.gmplib.org> <6c763b9d-c1e4-41fb-ab50-53f61dc49391@cs.ucla.edu> <86frei585d.fsf@shell.gmplib.org> Content-Language: en-US From: Paul Eggert Organization: UCLA Computer Science Department In-Reply-To: <86frei585d.fsf@shell.gmplib.org> X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 78476-done Cc: nisse@lysator.liu.se, 78476-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------6FDSXhkhpiKEoNd56RNfZyVd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 2025-07-27 01:51, Torbj=C3=B6rn Granlund wrote: > Thank you for merging the new mpn-based factoring code! >=20 > The code looks good, I did not see anything which needs improvements. >=20 > I believe the factoring speedup for numbers of 3 or more limb is quite > significant (2x-3x), even when not considering the time saved by not > proving primality of found factors. >=20 > You might want mention that in the header about the 2025 improvements. Thanks for the review and for the kind words. I installed the attached=20 further doc fix and am closing this bug report. --------------6FDSXhkhpiKEoNd56RNfZyVd Content-Type: text/x-patch; charset=UTF-8; name="0001-doc-mention-2025-speedup-on-large-composites.patch" Content-Disposition: attachment; filename="0001-doc-mention-2025-speedup-on-large-composites.patch" Content-Transfer-Encoding: base64 RnJvbSA0YTI0MDJkY2ZhOGI3MDViNjNmNDNiNzZkN2JlODQxOGUwOGY4ZjhmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDI3IEp1bCAyMDI1IDA3OjMwOjI5IC0wNzAwClN1YmplY3Q6IFtQQVRD SF0gZG9jOiBtZW50aW9uIDIwMjUgc3BlZWR1cCBvbiBsYXJnZSBjb21wb3NpdGVzCgotLS0K IE5FV1MgICAgICAgICB8IDMgKystCiBzcmMvZmFjdG9yLmMgfCAzICsrLQogMiBmaWxlcyBj aGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv TkVXUyBiL05FV1MKaW5kZXggMTdhNDNiMDY0Li4wYjJiZTcxMTYgMTAwNjQ0Ci0tLSBhL05F V1MKKysrIGIvTkVXUwpAQCAtNCw3ICs0LDggQEAgR05VIGNvcmV1dGlscyBORVdTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIG91dGxpbmUgLSotCiAKICoqIENo YW5nZXMgaW4gYmVoYXZpb3IKIAotICAnZmFjdG9yJyBpcyBub3cgbXVjaCBmYXN0ZXIgYXQg aWRlbnRpZnlpbmcgbGFyZ2UgcHJpbWUgbnVtYmVycy4KKyAgJ2ZhY3RvcicgaXMgbm93IG11 Y2ggZmFzdGVyIGF0IGlkZW50aWZ5aW5nIGxhcmdlIHByaW1lIG51bWJlcnMsCisgIGFuZCBz aWduaWZpY2FudGx5IGZhc3RlciBvbiBjb21wb3NpdGUgbnVtYmVycyBncmVhdGVyIHRoYW4g Ml4xMjguCiAKICoqIEJ1ZyBmaXhlcwogCmRpZmYgLS1naXQgYS9zcmMvZmFjdG9yLmMgYi9z cmMvZmFjdG9yLmMKaW5kZXggNDRjMGRlYjZhLi5iM2FmMjViNWYgMTAwNjQ0Ci0tLSBhL3Ny Yy9mYWN0b3IuYworKysgYi9zcmMvZmFjdG9yLmMKQEAgLTE5LDcgKzE5LDggQEAKICAgIEFy Yml0cmFyeS1wcmVjaXNpb24gY29kZSBhZGFwdGVkIGJ5IEphbWVzIFlvdW5nbWFuIGZyb20g VG9yYmrDtnJuCiAgICBHcmFubHVuZCdzIGZhY3Rvcml6ZS5jLCBmcm9tIEdOVSBNUCB2ZXJz aW9uIDQuMi4yLgogICAgSW4gMjAxMiwgdGhlIGNvcmUgd2FzIHJld3JpdHRlbiBieSBUb3Ji asO2cm4gR3Jhbmx1bmQgYW5kIE5pZWxzIE3DtmxsZXIuCi0gICBJbiAyMDI1LCBUb3JiasO2 cm4gR3Jhbmx1bmQgYW5kIFBhdWwgRWdnZXJ0IHNwZWQgdXAgcHJpbWFsaXR5IGNoZWNraW5n LgorICAgSW4gMjAyNSwgVG9yYmrDtnJuIEdyYW5sdW5kIGFuZCBQYXVsIEVnZ2VydCBzcGVk IHVwIHByaW1hbGl0eSBjaGVja2luZywKKyAgIGFuZCBpbXByb3ZlZCBwZXJmb3JtYW5jZSBv biBjb21wb3NpdGUgbnVtYmVycyBncmVhdGVyIHRoYW4gMl4xMjguCiAgICBDb250YWlucyBj b2RlIGZyb20gR05VIE1QLiAgKi8KIAogLyogRWZmaWNpZW50bHkgZmFjdG9yIG51bWJlcnMg dGhhdCBmaXQgaW4gb25lIG9yIHR3byB3b3JkcyAod29yZCA9IG1wX2xpbWJfdCksCi0tIAoy LjQ4LjEKCg== --------------6FDSXhkhpiKEoNd56RNfZyVd-- ------------=_1753627383-15940-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 18 May 2025 07:39:54 +0000 Received: from localhost ([127.0.0.1]:54791 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uGYcj-00084G-Pf for submit@debbugs.gnu.org; Sun, 18 May 2025 03:39:54 -0400 Received: from lists.gnu.org ([2001:470:142::17]:43498) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uGYch-00083m-5d for submit@debbugs.gnu.org; Sun, 18 May 2025 03:39:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uGYcb-0005Mm-SD for bug-coreutils@gnu.org; Sun, 18 May 2025 03:39:45 -0400 Received: from mail.cs.ucla.edu ([131.179.128.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uGYcZ-0004Ca-Qe for bug-coreutils@gnu.org; Sun, 18 May 2025 03:39:45 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 7BDA13C01086E; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10032) with ESMTP id gBNCiLuBjKCE; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 4FF573C01087D; Sun, 18 May 2025 00:39:41 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 4FF573C01087D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1747553981; bh=IG6xlnJrUsUZhn4C9jVkQZWhQmbKQRuX4tJqNuFYzGw=; h=Message-ID:Date:MIME-Version:To:From; b=QxNX9Bf/RHPZ4+tjaMIK2oUa+PlSVoWeYsn2pnvvHIndELT5lhy5+tcckiyMpQCC7 RQ2XkEFoPrj0qbWKdpLXbA2GBx4XBIE55g5EeU32ZxMIBQaNcP73OGhcHlmZyLHzzv TfaJslV3XrBKTi/3bNpIuH8HAs8qL7bim6uZNQoPJBRe0hmZyesg0PwY5XobYY0Vpl ITXBh6dCUrefFZwAVNRdGOtlJJ92gpj5CSrdyQ9XMnON1hhx8NqduCRyJK6qmSQiln hfTpdRrC+x7xtRjwN/cHZ0RFYeRnCYJH+2nbje78IFzoJYrNsdg1hi0k8LNOSvPeFc 1Bo64lULAHDDw== X-Virus-Scanned: amavis at mail.cs.ucla.edu Received: from mail.cs.ucla.edu ([127.0.0.1]) by localhost (mail.cs.ucla.edu [127.0.0.1]) (amavis, port 10026) with ESMTP id pNjdq10aWKTj; Sun, 18 May 2025 00:39:41 -0700 (PDT) Received: from [192.168.254.12] (47-147-225-25.fdr01.snmn.ca.ip.frontiernet.net [47.147.225.25]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 2C4243C01086E; Sun, 18 May 2025 00:39:41 -0700 (PDT) Message-ID: <567bb67d-7365-4709-b56c-5b0731bb1189@cs.ucla.edu> Date: Sun, 18 May 2025 00:39:38 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Coreutils bugs From: Paul Eggert Subject: GNU 'factor' problems with 128-bit word Organization: UCLA Computer Science Department Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=131.179.128.66; envelope-from=eggert@cs.ucla.edu; helo=mail.cs.ucla.edu X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit Cc: Torbjorn Granlund 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 (/) I recently found out that GNU coreutils 'factor' misbehaves if its=20 internal word is 128 bits rather than the usual 64. This could happen if=20 one builds Coreutils 9.7 on a platform with 128-bit uintmax_t, something=20 that POSIX allows (though it's only theoretical now as far as I know). The problem occurs when src/factor.c's prime_p function assumes that as=20 a quick test, its argument N must be prime if N is less than=20 FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME. I guess this quick-test=20 assumption is true for 64-bit uintmax_t, but not for 128-bit. I worked around the bug by installed a patch=20 .=20 This patch changes prime_p to rely on the quick-test assumption only=20 when the internal word size is 64 bits. On platforms with wider words,=20 the code now tests smaller numbers for primes too; this works around the=20 bug, but is slower. It'd be nice if the underlying problem were fixed, so that the code is=20 more portable to 128-bit word. The issue might be related to Bug#25135 "Infinite loop in factor"=20 so I am cc'ing this to Torbj=C3=B6rn. The=20 current factor.c is not the same as what Torbj=C3=B6rn contributed years = ago=20 so it is of course possible that I or someone else introduced the bug=20 more recently. To reproduce the problem on Fedora 42 x86-64: git clone https://git.savannah.gnu.org/git/coreutils.git cd coreutils git checkout fe51b33859d2e7286425d6d5600288ce9ae43bd1 ./bootstrap ./configure make CFLAGS=3D'-DUSE_INT128 -DEXHIBIT_INT128_BUG' WERROR_CFLAGS=3D echo 340282366920938463463374607431768211355 | src/factor The output is: 340282366920938463463374607431768211355: 155=20 2195370109167344925570158757624311041 which is wrong, as 155 is not prime. ------------=_1753627383-15940-1--