From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#70898: switching to for Emacs bit ops Date: Sun, 12 May 2024 15:09:17 -0700 Organization: UCLA Computer Science Department Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------vVCz0nb0w5GtZK2vx8iItzns" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2153"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird To: 70898@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon May 13 00:10:29 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1s6HOm-0000I1-03 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 13 May 2024 00:10:28 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s6HOQ-0007Lq-Q7; Sun, 12 May 2024 18:10:06 -0400 Original-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 1s6HOM-0007LL-RF for bug-gnu-emacs@gnu.org; Sun, 12 May 2024 18:10:02 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1s6HOL-0003FI-NN for bug-gnu-emacs@gnu.org; Sun, 12 May 2024 18:10:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1s6HOL-000250-PS for bug-gnu-emacs@gnu.org; Sun, 12 May 2024 18:10:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 12 May 2024 22:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 70898 X-GNU-PR-Package: emacs X-Debbugs-Original-To: Emacs bug reports and feature requests Original-Received: via spool by submit@debbugs.gnu.org id=B.17155517787965 (code B ref -1); Sun, 12 May 2024 22:10:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 May 2024 22:09:38 +0000 Original-Received: from localhost ([127.0.0.1]:56755 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s6HNv-00024P-F4 for submit@debbugs.gnu.org; Sun, 12 May 2024 18:09:38 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:53982) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1s6HNp-00024J-Sw for submit@debbugs.gnu.org; Sun, 12 May 2024 18:09:33 -0400 Original-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 1s6HNp-0007Fb-DX for bug-gnu-emacs@gnu.org; Sun, 12 May 2024 18:09:29 -0400 Original-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 1s6HNj-0003Bp-R8 for bug-gnu-emacs@gnu.org; Sun, 12 May 2024 18:09:29 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 0DE7D3C011BDC for ; Sun, 12 May 2024 15:09:21 -0700 (PDT) Original-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 HH2plgCTayI8 for ; Sun, 12 May 2024 15:09:18 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by mail.cs.ucla.edu (Postfix) with ESMTP id 902B13C011BDD for ; Sun, 12 May 2024 15:09:18 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.cs.ucla.edu 902B13C011BDD DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cs.ucla.edu; s=9D0B346E-2AEB-11ED-9476-E14B719DCE6C; t=1715551758; bh=bU0PlXrYopQzI9Lea5LuEXa3taMxTo8xR0fwDAS1+t0=; h=Message-ID:Date:MIME-Version:To:From; b=OMwL6Hdp2jjnpm5t2aKh7dIQ8V70C/KG/KrLQ1NKP+IhT9v5yIiGU8g275wTiVAR1 +iZrbKNDNvASC4IVWIOW47ulympNZbF2oO+LZHHkJUHBaMU/85ZJNnymZUP9214+jq ZWr6tw9g+RhGrXIBVqx9TRjU6obVkmCW6QnNM+bq1kcEWKXifv8zfVuUfTucA6gsBU sRbF8X3aMWglixfEqhfesXTqNYOjguVMvRkQqhbOZD5dbbve/bv+Zjs2sRzENolg/D uTLoXTV/jz650QR8UqYr0i0awPJc3+cyO+ajZUUmIkZrztCUXsA3SKCuayTQ7AaBWP DkfkBm6WIqCtQ== X-Virus-Scanned: amavis at mail.cs.ucla.edu Original-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 d-lfTRKFpwj6 for ; Sun, 12 May 2024 15:09:18 -0700 (PDT) Original-Received: from [192.168.254.12] (unknown [47.154.17.165]) by mail.cs.ucla.edu (Postfix) with ESMTPSA id 56D593C011BDC for ; Sun, 12 May 2024 15:09:18 -0700 (PDT) Content-Language: en-US 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:284943 Archived-At: This is a multi-part message in MIME format. --------------vVCz0nb0w5GtZK2vx8iItzns Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Emacs currently uses the Gnulib headers count-trailing-zeros.h and count-one-bits.h to do some low-level bit operations efficiently. C23 has standardized this in a new header and I've recently added support for a Gnulib substitute, taking implementation ideas from count-trailing-zeros.h, count-one-bits.h and elsewhere. So I'm planning to switch Emacs to the C23 standard way of doing things, using the Gnulib substitute on non-C23 platforms. The first attached patch does this. I plan to test this somewhat more before installing, but thought I'd give people a heads-up. The second attached patch is a minor cleanup to the 32-bit Android code, a cleanup made possible by the first attached patch. This cleanup patch is optional of course. By the way, I'm surprised to see the code in sfmt.c implementing 64-bit arithmetic from pairs of 32-bit words, as I thought even ancient 32-bit Android has 64-bit 'unsigned long long', but that's a matter for the Android experts I suppose. --------------vVCz0nb0w5GtZK2vx8iItzns Content-Type: text/x-patch; charset=UTF-8; name="0001-Prefer-stdbit.h-to-count-one-bits.h-etc.patch" Content-Disposition: attachment; filename="0001-Prefer-stdbit.h-to-count-one-bits.h-etc.patch" Content-Transfer-Encoding: base64 RnJvbSA2NzRlMWFkYWE0MzM1ZTllOWU2MjgzOTRhNjg4ZDJlNjA5MDcxMzU3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDEyIE1heSAyMDI0IDE0OjIyOjU4IC0wNzAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIFByZWZlciBzdGRiaXQuaCB0byBjb3VudC1vbmUtYml0cy5oIGV0YwoKQzIzJ3Mg PHN0ZGJpdC5oPiBpbiB0aGUgbG9uZyBydW4gc2hvdWxkIGJlIGJldHRlciBzdXBwb3J0ZWQg dGhhbgpHbnVsaWIncyBjb3VudC1vbmUtYml0cy5oIGFuZCBzaW1pbGFyIGhlYWRlcnMsIHNv IHN3aXRjaCB0byB0aGUKQzIzIHByaW1pdGl2ZXMsIHdpdGggYSBHbnVsaWIgZmFsbGJhY2sg Zm9yIHBsYXRmb3JtcyBsYWNraW5nIEMyMy4KKiBhZG1pbi9tZXJnZS1nbnVsaWIgKEdOVUxJ Ql9NT0RVTEVTKTogUmVtb3ZlIGNvdW50LWxlYWRpbmctemVyb3MsCmNvdW50LW9uZS1iaXRz LCBjb3VudC10cmFpbGluZy16ZXJvcy4gIEFkZCBzdGRiaXQuCiogbGliL2NvdW50LWxlYWRp bmctemVyb3MuYywgbGliL2NvdW50LWxlYWRpbmctemVyb3MuaDoKKiBsaWIvY291bnQtb25l LWJpdHMuYywgbGliL2NvdW50LW9uZS1iaXRzLmg6CiogbGliL2NvdW50LXRyYWlsaW5nLXpl cm9zLmMsIGxpYi9jb3VudC10cmFpbGluZy16ZXJvcy5oOiBSZW1vdmUuCiogbGliL3N0ZGJp dC5jLCBsaWIvc3RkYml0LmluLmgsIG00L3N0ZGJpdF9oLm00OgpOZXcgZmlsZXMsIGNvcGll ZCBmcm9tIEdudWxpYi4KKiBsaWIvZ251bGliLm1rLmluLCBtNC9nbnVsaWItY29tcC5tNDog UmVnZW5lcmF0ZS4KKiBzcmMvZGF0YS5jOiBEbyBub3QgaW5jbHVkZSBjb3VudC1vbmUtYml0 cy5oLCBjb3VudC10cmFpbGluZy16ZXJvcy5oLgpJbnN0ZWFkLCByZWx5IG9uIGxpc3AuaCBp bmNsdWRpbmcgc3RkYml0LmguCihGbG9nY291bnQsIEZib29sX3ZlY3Rvcl9jb3VudF9wb3B1 bGF0aW9uKQooRmJvb2xfdmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlKTogVXNlIHN0ZGJpdC5o IG1hY3JvcyBpbnN0ZWFkIG9mCmNvdW50LW9uZS1iaXRzLmggYW5kIGNvdW50LXRyYWlsaW5n LXplcm9zLmggbWFjcm9zLgooc2hpZnRfcmlnaHRfdWxsLCBjb3VudF9vbmVfYml0c193b3Jk LCBwcmVfdmFsdWUpCihjb3VudF90cmFpbGluZ196ZXJvX2JpdHMpOiBSZW1vdmU7IG5vIGxv bmdlciBuZWVkZWQuCiogc3JjL2xpc3AuaDogSW5jbHVkZSBzdGRiaXQuaCBpbnN0ZWFkIG9m IGNvdW50LWxlYWRpbmctemVyb3MuaC4KKGVsb2diKTogVXNlIHN0ZGJpdC5oIG1hY3JvIGlu c3RlYWQgb2YgY291bnQtbGVhZGluZy16ZXJvcy5oIG1hY3JvLgotLS0KIElOU1RBTEwuUkVQ TyAgICAgICAgICAgICAgIHwgICAyICstCiBhZG1pbi9tZXJnZS1nbnVsaWIgICAgICAgICB8 ICAgNCArLQogbGliL2NvdW50LWxlYWRpbmctemVyb3MuYyAgfCAgMjEgLQogbGliL2NvdW50 LWxlYWRpbmctemVyb3MuaCAgfCAxMzggLS0tLS0tCiBsaWIvY291bnQtb25lLWJpdHMuYyAg ICAgICB8ICAyNSAtLQogbGliL2NvdW50LW9uZS1iaXRzLmggICAgICAgfCAxNjYgLS0tLS0t LQogbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMgfCAgMjEgLQogbGliL2NvdW50LXRyYWls aW5nLXplcm9zLmggfCAxMjggLS0tLS0tCiBsaWIvZ251bGliLm1rLmluICAgICAgICAgICB8 ICA2MiArKy0KIGxpYi9zdGRiaXQuYyAgICAgICAgICAgICAgIHwgIDUxICsrKwogbGliL3N0 ZGJpdC5pbi5oICAgICAgICAgICAgfCA4ODYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogbTQvZ251bGliLWNvbXAubTQgICAgICAgICAgfCAgMzAgKy0KIG00L3N0 ZGJpdF9oLm00ICAgICAgICAgICAgIHwgIDE5ICsKIHNyYy9kYXRhLmMgICAgICAgICAgICAg ICAgIHwgIDk1ICstLS0KIHNyYy9saXNwLmggICAgICAgICAgICAgICAgIHwgICA3ICstCiAx NSBmaWxlcyBjaGFuZ2VkLCAxMDE4IGluc2VydGlvbnMoKyksIDYzNyBkZWxldGlvbnMoLSkK IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvY291bnQtbGVhZGluZy16ZXJvcy5jCiBkZWxldGUg bW9kZSAxMDA2NDQgbGliL2NvdW50LWxlYWRpbmctemVyb3MuaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGxpYi9jb3VudC1vbmUtYml0cy5jCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliL2NvdW50 LW9uZS1iaXRzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWIvY291bnQtdHJhaWxpbmctemVy b3MuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYi9jb3VudC10cmFpbGluZy16ZXJvcy5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliL3N0ZGJpdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L3N0ZGJpdC5pbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvc3RkYml0X2gubTQKCmRpZmYg LS1naXQgYS9JTlNUQUxMLlJFUE8gYi9JTlNUQUxMLlJFUE8KaW5kZXggNzdkODE1M2E1YTgu LjQ2YWM0NDQwYWVlIDEwMDY0NAotLS0gYS9JTlNUQUxMLlJFUE8KKysrIGIvSU5TVEFMTC5S RVBPCkBAIC04MCw3ICs4MCw3IEBAIGhhbmRsZS4gIFRoZSBtb3N0IHRob3JvdWdoIGNsZWFu aW5nIGNhbiBiZSBhY2hpZXZlZCBieSAnZ2l0IGNsZWFuIC1mZHgnCiB3aGljaCB3aWxsIGxl YXZlIHlvdSB3aXRoIG9ubHkgZmlsZXMgZnJvbSB0aGUgZ2l0IHJlcG9zaXRvcnkuICBIZXJl CiBhcmUgc29tZSBmYXN0ZXIgbWV0aG9kcyBmb3IgYSBjb3VwbGUgb2YgcGFydGljdWxhciBl cnJvciBjYXNlczoKIAotICAgIC91c3IvYmluL200OmFjbG9jYWwubTQ6OTogY2Fubm90IG9w ZW4gYG00L2NvdW50LWxlYWRpbmctemVyb3MubTQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5CisgICAgL3Vzci9iaW4vbTQ6YWNsb2NhbC5tNDo5OiBjYW5ub3Qgb3BlbiBgbTQvc3Rk Yml0X2gubTQnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CiAKIFRoaXMgY2FuIGJlIGZp eGVkIHdpdGggJ3JtIGFjbG9jYWwubTQnLgogCmRpZmYgLS1naXQgYS9hZG1pbi9tZXJnZS1n bnVsaWIgYi9hZG1pbi9tZXJnZS1nbnVsaWIKaW5kZXggYzRkYWFkZWQwMTUuLjUyNjE0MWQ4 NmVhIDEwMDc1NQotLS0gYS9hZG1pbi9tZXJnZS1nbnVsaWIKKysrIGIvYWRtaW4vbWVyZ2Ut Z251bGliCkBAIC0yOSw3ICsyOSw2IEBAIEdOVUxJQl9NT0RVTEVTPQogICBhbGlnbmFzb2Yg YWxsb2NhLW9wdCBiaW5hcnktaW8gYm9vdC10aW1lIGJ5dGVzd2FwIGMtY3R5cGUgYy1zdHJj YXNlCiAgIGNhbm9uaWNhbGl6ZS1sZ3BsCiAgIGNhcmVhZGxpbmthdCBjbG9zZS1zdHJlYW0g Y29weS1maWxlLXJhbmdlCi0gIGNvdW50LWxlYWRpbmctemVyb3MgY291bnQtb25lLWJpdHMg Y291bnQtdHJhaWxpbmctemVyb3MKICAgY3J5cHRvL21kNSBjcnlwdG8vbWQ1LWJ1ZmZlcgog ICBjcnlwdG8vc2hhMS1idWZmZXIgY3J5cHRvL3NoYTI1Ni1idWZmZXIgY3J5cHRvL3NoYTUx Mi1idWZmZXIKICAgZC10eXBlIGRpZmZzZXEgZG91YmxlLXNsYXNoLXJvb3QgZHRvYXN0ciBk dG90aW1lc3BlYyBkdXAyCkBAIC00NCw3ICs0Myw4IEBAIEdOVUxJQl9NT0RVTEVTPQogICBu YW5vc2xlZXAgbnByb2MgbnN0cmZ0aW1lCiAgIHBhdGhtYXggcGlwZTIgcHNlbGVjdCBwdGhy ZWFkX3NpZ21hc2sKICAgcWNvcHktYWNsIHJlYWRsaW5rIHJlYWRsaW5rYXQgcmVnZXgKLSAg c2lnMnN0ciBzaWdkZXNjcl9ucCBzb2NrbGVuIHN0YXQtdGltZSBzdGQtZ251MTEgc3RkYm9v bCBzdGRja2RpbnQgc3RkZGVmIHN0ZGlvCisgIHNpZzJzdHIgc2lnZGVzY3JfbnAgc29ja2xl biBzdGF0LXRpbWUgc3RkLWdudTExCisgIHN0ZGJpdCBzdGRib29sIHN0ZGNrZGludCBzdGRk ZWYgc3RkaW8KICAgc3RwY3B5IHN0cm5sZW4gc3RybmxlbiBzdHJ0b2ltYXggc3ltbGluayBz eXNfc3RhdCBzeXNfdGltZQogICB0ZW1wbmFtZSB0aW1lLWggdGltZV9yIHRpbWVfcnogdGlt ZWdtIHRpbWVyLXRpbWUgdGltZXNwZWMtYWRkIHRpbWVzcGVjLXN1YgogICB1cGRhdGUtY29w eXJpZ2h0IHVubG9ja2VkLWlvIHV0aW1lbnNhdApkaWZmIC0tZ2l0IGEvbGliL2NvdW50LWxl YWRpbmctemVyb3MuYyBiL2xpYi9jb3VudC1sZWFkaW5nLXplcm9zLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDJiYmZkNjc0ODQ5Li4wMDAwMDAwMDAwMAotLS0gYS9saWIv Y291bnQtbGVhZGluZy16ZXJvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAot LyogQ291bnQgdGhlIG51bWJlciBvZiBsZWFkaW5nIDAgYml0cyBpbiBhIHdvcmQuCi0KLSAg IENvcHlyaWdodCAoQykgMjAxMi0yMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgotCi0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0g ICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g ICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRw czovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+ Ci0KLSNkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPU19JTkxJTkUgX0dMX0VYVEVSTl9JTkxJ TkUKLSNpbmNsdWRlICJjb3VudC1sZWFkaW5nLXplcm9zLmgiCmRpZmYgLS1naXQgYS9saWIv Y291bnQtbGVhZGluZy16ZXJvcy5oIGIvbGliL2NvdW50LWxlYWRpbmctemVyb3MuaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1NzQ5ZDZkMjcuLjAwMDAwMDAwMDAwCi0t LSBhL2xpYi9jb3VudC1sZWFkaW5nLXplcm9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzgg KzAsMCBAQAotLyogY291bnQtbGVhZGluZy16ZXJvcy5oIC0tIGNvdW50cyB0aGUgbnVtYmVy IG9mIGxlYWRpbmcgMCBiaXRzIGluIGEgd29yZC4KLSAgIENvcHlyaWdodCAoQykgMjAxMi0y MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot ICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLwotCi0vKiBXcml0dGVuIGJ5IEVyaWMgQmxha2UuICAqLwotCi0jaWZuZGVm IENPVU5UX0xFQURJTkdfWkVST1NfSAotI2RlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TX0gg MQotCi0vKiBUaGlzIGZpbGUgdXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lO TElORS4gICovCi0jaWYgIV9HTF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNl IGluY2x1ZGUgY29uZmlnLmggZmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMu aD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNp Zm5kZWYgQ09VTlRfTEVBRElOR19aRVJPU19JTkxJTkUKLSMgZGVmaW5lIENPVU5UX0xFQURJ TkdfWkVST1NfSU5MSU5FIF9HTF9JTkxJTkUKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3Bs dXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLS8qIEFzc3VtaW5nIHRoZSBHQ0MgYnVpbHRp biBpcyBCVUlMVElOIGFuZCB0aGUgTVNDIGJ1aWx0aW4gaXMgTVNDX0JVSUxUSU4sCi0gICBl eHBhbmQgdG8gY29kZSB0aGF0IGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJv cyBvZiB0aGUgbG9jYWwKLSAgIHZhcmlhYmxlICd4JyBvZiB0eXBlIFRZUEUgKGFuIHVuc2ln bmVkIGludGVnZXIgdHlwZSkgYW5kIHJldHVybiBpdAotICAgZnJvbSB0aGUgY3VycmVudCBm dW5jdGlvbi4gICovCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9f R05VQ19NSU5PUl9fID49IDQpIFwKLSAgICB8fCAoX19jbGFuZ19tYWpvcl9fID49IDQpCi0j IGRlZmluZSBDT1VOVF9MRUFESU5HX1pFUk9TKEJVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBF KSAgICAgICAgICAgICAgICBcCi0gIHJldHVybiB4ID8gQlVJTFRJTiAoeCkgOiBDSEFSX0JJ VCAqIHNpemVvZiB4OwotI2VsaWYgX01TQ19WRVIKLSMgcHJhZ21hIGludHJpbnNpYyAoX0Jp dFNjYW5SZXZlcnNlKQotIyBpZiBkZWZpbmVkIF9NX1g2NAotIyAgcHJhZ21hIGludHJpbnNp YyAoX0JpdFNjYW5SZXZlcnNlNjQpCi0jIGVuZGlmCi0jIGRlZmluZSBDT1VOVF9MRUFESU5H X1pFUk9TKEJVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSAgICAgICAgICAgICAgICBcCi0g ICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2ln bmVkIGxvbmcgcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIGlmIChNU0NfQlVJTFRJTiAoJnJlc3VsdCwgeCkpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgcmV0dXJuIENIQVJfQklU ICogc2l6ZW9mIHggLSAxIC0gcmVzdWx0OyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCi0j ZWxzZQotIyBkZWZpbmUgQ09VTlRfTEVBRElOR19aRVJPUyhCVUlMVElOLCBNU0NfQlVJTFRJ TiwgVFlQRSkgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB1bnNpZ25lZCBp bnQgbGVhZGluZ18zMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBpZiAoISB4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHJldHVybiBDSEFSX0JJVCAqIHNp emVvZiB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBm b3IgKGNvdW50ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgIChsZWFkaW5nXzMyID0gKCh4ID4+IChzaXplb2Yg KFRZUEUpICogQ0hBUl9CSVQgLSAzMikpICAgICAgXAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYgMHhmZmZmZmZmZlUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgICBjb3VudCA8IENIQVJfQklUICogc2l6ZW9mIHggLSAzMiAmJiAhbGVh ZGluZ18zMik7ICAgICAgICAgXAotICAgICAgICAgICAgIGNvdW50ICs9IDMyKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIHgg PSB4IDw8IDMxIDw8IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICByZXR1cm4gY291bnQgKyBjb3VudF9sZWFkaW5nX3plcm9zXzMy IChsZWFkaW5nXzMyKTsgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IHdoaWxlICgwKQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBsZWFk aW5nIHplcm9zIGluIFgsCi0gICB3aGVyZSAwIDwgWCA8IDIqKjMyLiAgKi8KLUNPVU5UX0xF QURJTkdfWkVST1NfSU5MSU5FIGludAotY291bnRfbGVhZGluZ196ZXJvc18zMiAodW5zaWdu ZWQgaW50IHgpCi17Ci0gIC8qIDxodHRwczovL2dpdGh1Yi5jb20vZ2lic2pvc2UvQml0SGFj a3M+Ci0gICAgIDxodHRwczovL3d3dy5maXQudnV0YnIuY3ovfmliYXJpbmEvcHViL2JpdGhh Y2tzLnBkZj4gKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgZGVfQnJ1aWpuX2xvb2t1cFszMl0g PSB7Ci0gICAgMzEsIDIyLCAzMCwgMjEsIDE4LCAxMCwgMjksIDIsIDIwLCAxNywgMTUsIDEz LCA5LCA2LCAyOCwgMSwKLSAgICAyMywgMTksIDExLCAzLCAxNiwgMTQsIDcsIDI0LCAxMiwg NCwgOCwgMjUsIDUsIDI2LCAyNywgMAotICB9OwotCi0gIHggfD0geCA+PiAxOwotICB4IHw9 IHggPj4gMjsKLSAgeCB8PSB4ID4+IDQ7Ci0gIHggfD0geCA+PiA4OwotICB4IHw9IHggPj4g MTY7Ci0gIHJldHVybiBkZV9CcnVpam5fbG9va3VwWygoeCAqIDB4MDdjNGFjZGRVKSAmIDB4 ZmZmZmZmZmZVKSA+PiAyN107Ci19Ci0jZW5kaWYKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJu IHRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfTEVBRElOR19a RVJPU19JTkxJTkUgaW50Ci1jb3VudF9sZWFkaW5nX3plcm9zICh1bnNpZ25lZCBpbnQgeCkK LXsKLSAgQ09VTlRfTEVBRElOR19aRVJPUyAoX19idWlsdGluX2NseiwgX0JpdFNjYW5SZXZl cnNlLCB1bnNpZ25lZCBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51 bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIFguICovCi1DT1VOVF9MRUFESU5HX1pFUk9TX0lO TElORSBpbnQKLWNvdW50X2xlYWRpbmdfemVyb3NfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkK LXsKLSAgQ09VTlRfTEVBRElOR19aRVJPUyAoX19idWlsdGluX2NsemwsIF9CaXRTY2FuUmV2 ZXJzZSwgdW5zaWduZWQgbG9uZyBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4g dGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIGluIFguICovCi1DT1VOVF9MRUFESU5HX1pF Uk9TX0lOTElORSBpbnQKLWNvdW50X2xlYWRpbmdfemVyb3NfbGwgKHVuc2lnbmVkIGxvbmcg bG9uZyBpbnQgeCkKLXsKLSNpZiAoZGVmaW5lZCBfTVNDX1ZFUiAmJiAhZGVmaW5lZCBfX2Ns YW5nX18pICYmICFkZWZpbmVkIF9NX1g2NAotICAvKiAzMi1iaXQgTVNWQyBkb2VzIG5vdCBo YXZlIF9CaXRTY2FuUmV2ZXJzZTY0LCBvbmx5IF9CaXRTY2FuUmV2ZXJzZS4gICovCi0gIHVu c2lnbmVkIGxvbmcgcmVzdWx0OwotICBpZiAoX0JpdFNjYW5SZXZlcnNlICgmcmVzdWx0LCAo dW5zaWduZWQgbG9uZykgKHggPj4gMzIpKSkKLSAgICByZXR1cm4gQ0hBUl9CSVQgKiBzaXpl b2YgeCAtIDEgLSAzMiAtIHJlc3VsdDsKLSAgaWYgKF9CaXRTY2FuUmV2ZXJzZSAoJnJlc3Vs dCwgKHVuc2lnbmVkIGxvbmcpIHgpKQotICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4 IC0gMSAtIHJlc3VsdDsKLSAgcmV0dXJuIENIQVJfQklUICogc2l6ZW9mIHg7Ci0jZWxzZQot ICBDT1VOVF9MRUFESU5HX1pFUk9TIChfX2J1aWx0aW5fY2x6bGwsIF9CaXRTY2FuUmV2ZXJz ZTY0LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsK LSNlbmRpZgotfQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1fR0xfSU5M SU5FX0hFQURFUl9FTkQKLQotI2VuZGlmIC8qIENPVU5UX0xFQURJTkdfWkVST1NfSCAqLwpk aWZmIC0tZ2l0IGEvbGliL2NvdW50LW9uZS1iaXRzLmMgYi9saWIvY291bnQtb25lLWJpdHMu YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiODcwODgwMjguLjAwMDAwMDAw MDAwCi0tLSBhL2xpYi9jb3VudC1vbmUtYml0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUg KzAsMCBAQAotLyogQ291bnQgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gYSB3b3JkLgotCi0g ICBDb3B5cmlnaHQgKEMpIDIwMTItMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KLQotICAgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gICBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQot ICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot ICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0 cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLQotI2luY2x1ZGUgPGNvbmZpZy5o PgotCi0jZGVmaW5lIENPVU5UX09ORV9CSVRTX0lOTElORSBfR0xfRVhURVJOX0lOTElORQot I2luY2x1ZGUgImNvdW50LW9uZS1iaXRzLmgiCi0KLSNpZiAxNTAwIDw9IF9NU0NfVkVSICYm IChkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfTV9YNjQpCi1pbnQgcG9wY291bnRfc3Vw cG9ydCA9IC0xOwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvY291bnQtb25lLWJpdHMuaCBi L2xpYi9jb3VudC1vbmUtYml0cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4 ZDY3Zjg3MThhNC4uMDAwMDAwMDAwMDAKLS0tIGEvbGliL2NvdW50LW9uZS1iaXRzLmgKKysr IC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyogY291bnQtb25lLWJpdHMuaCAtLSBj b3VudHMgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gYSB3b3JkLgotICAgQ29weXJpZ2h0IChD KSAyMDA3LTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSAgIFRoaXMg ZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcwotICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKLSAgIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgZmlsZSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4gICovCi0KLS8qIFdyaXR0ZW4gYnkgQmVuIFBmYWZmLiAgKi8KLQot I2lmbmRlZiBDT1VOVF9PTkVfQklUU19ICi0jZGVmaW5lIENPVU5UX09ORV9CSVRTX0ggMQot Ci0vKiBUaGlzIGZpbGUgdXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lOTElO RS4gICovCi0jaWYgIV9HTF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNlIGlu Y2x1ZGUgY29uZmlnLmggZmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4K LSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNpZm5k ZWYgQ09VTlRfT05FX0JJVFNfSU5MSU5FCi0jIGRlZmluZSBDT1VOVF9PTkVfQklUU19JTkxJ TkUgX0dMX0lOTElORQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJD IiB7Ci0jZW5kaWYKLQotLyogQXNzdW1pbmcgdGhlIEdDQyBidWlsdGluIGlzIEdDQ19CVUlM VElOIGFuZCB0aGUgTVNDIGJ1aWx0aW4gaXMgTVNDX0JVSUxUSU4sCi0gICBleHBhbmQgdG8g Y29kZSB0aGF0IGNvbXB1dGVzIHRoZSBudW1iZXIgb2YgMS1iaXRzIG9mIHRoZSBsb2NhbAot ICAgdmFyaWFibGUgJ3gnIG9mIHR5cGUgVFlQRSAoYW4gdW5zaWduZWQgaW50ZWdlciB0eXBl KSBhbmQgcmV0dXJuIGl0Ci0gICBmcm9tIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KLSNp ZiAoX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49 IDQpKSBcCi0gICAgfHwgKF9fY2xhbmdfbWFqb3JfXyA+PSA0KQotIyBkZWZpbmUgQ09VTlRf T05FX0JJVFMoR0NDX0JVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSBcCi0gICAgcmV0dXJu IEdDQ19CVUlMVElOICh4KQotI2Vsc2UKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBu dW1iZXIgb2YgMS1iaXRzIHNldCBpbiB0aGUgbGVhc3QKLSAgIHNpZ25pZmljYW50IDMyIGJp dHMgb2YgWC4gKi8KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQKLWNvdW50X29uZV9iaXRz XzMyICh1bnNpZ25lZCBpbnQgeCkKLXsKLSAgeCA9ICgoeCAmIDB4YWFhYWFhYWFVKSA+PiAx KSArICh4ICYgMHg1NTU1NTU1NVUpOwotICB4ID0gKCh4ICYgMHhjY2NjY2NjY1UpID4+IDIp ICsgKHggJiAweDMzMzMzMzMzVSk7Ci0gIHggPSAoeCA+PiAxNikgKyAoeCAmIDB4ZmZmZik7 Ci0gIHggPSAoKHggJiAweGYwZjApID4+IDQpICsgKHggJiAweDBmMGYpOwotICByZXR1cm4g KHggPj4gOCkgKyAoeCAmIDB4MDBmZik7Ci19Ci0KLS8qIEV4cGFuZCB0byBjb2RlIHRoYXQg Y29tcHV0ZXMgdGhlIG51bWJlciBvZiAxLWJpdHMgb2YgdGhlIGxvY2FsCi0gICB2YXJpYWJs ZSAneCcgb2YgdHlwZSBUWVBFIChhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUpIGFuZCByZXR1 cm4gaXQKLSAgIGZyb20gdGhlIGN1cnJlbnQgZnVuY3Rpb24uICAqLwotIyBkZWZpbmUgQ09V TlRfT05FX0JJVFNfR0VORVJJQyhUWVBFKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICBpbnQgY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGJp dHMgPSAwOyBiaXRzIDwgc2l6ZW9mIChUWVBFKSAqIENIQVJfQklUOyBiaXRzICs9IDMyKSAg ICAgXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgY291bnQgKz0gY291bnRf b25lX2JpdHNfMzIgKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgeCA9IHggPj4gMzEgPj4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gY291 bnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgwKQotCi0jIGlmIDE1MDAgPD0g X01TQ19WRVIgJiYgKGRlZmluZWQgX01fSVg4NiB8fCBkZWZpbmVkIF9NX1g2NCkKLQotLyog V2hpbGUgZ2NjIGZhbGxzIGJhY2sgdG8gaXRzIG93biBnZW5lcmljIGNvZGUgaWYgdGhlIG1h Y2hpbmUKLSAgIG9uIHdoaWNoIGl0J3MgcnVubmluZyBkb2Vzbid0IHN1cHBvcnQgcG9wY291 bnQsIHdpdGggTWljcm9zb2Z0J3MKLSAgIGNvbXBpbGVyIHdlIG5lZWQgdG8gZGV0ZWN0IGFu ZCBmYWxsYmFjayBvdXJzZWx2ZXMuICAqLwotCi0jICBpZiAwCi0jICAgaW5jbHVkZSA8aW50 cmluLmg+Ci0jICBlbHNlCi0gICAgLyogRG9uJ3QgcG9sbHV0ZSB0aGUgbmFtZXNwYWNlIHdp dGggdG9vIG1hbnkgTVNWQyBpbnRyaW5zaWNzLiAgKi8KLSMgICBwcmFnbWEgaW50cmluc2lj IChfX2NwdWlkKQotIyAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250KQotIyAgIGlmIGRl ZmluZWQgX01fWDY0Ci0jICAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250NjQpCi0jICAg ZW5kaWYKLSMgIGVuZGlmCi0KLSMgIGlmICFkZWZpbmVkIF9NX1g2NAotc3RhdGljIGlubGlu ZSBfX3BvcGNudDY0ICh1bnNpZ25lZCBsb25nIGxvbmcgeCkKLXsKLSAgcmV0dXJuIF9fcG9w Y250ICgodW5zaWduZWQgaW50KSAoeCA+PiAzMikpICsgX19wb3BjbnQgKCh1bnNpZ25lZCBp bnQpIHgpOwotfQotIyAgZW5kaWYKLQotLyogUmV0dXJuIG5vbnplcm8gaWYgcG9wY291bnQg aXMgc3VwcG9ydGVkLiAgKi8KLQotLyogMSBpZiBzdXBwb3J0ZWQsIDAgaWYgbm90IHN1cHBv cnRlZCwgLTEgaWYgdW5rbm93bi4gICovCi1leHRlcm4gaW50IHBvcGNvdW50X3N1cHBvcnQ7 Ci0KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQKLXBvcGNvdW50X3N1cHBvcnRlZCAodm9p ZCkKLXsKLSAgaWYgKHBvcGNvdW50X3N1cHBvcnQgPCAwKQotICAgIHsKLSAgICAgIC8qIERv IGFzIGRlc2NyaWJlZCBpbgotICAgICAgICAgPGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29t L2VuLXVzL2NwcC9pbnRyaW5zaWNzL3BvcGNudDE2LXBvcGNudC1wb3BjbnQ2ND4gKi8KLSAg ICAgIGludCBjcHVfaW5mb1s0XTsKLSAgICAgIF9fY3B1aWQgKGNwdV9pbmZvLCAxKTsKLSAg ICAgIHBvcGNvdW50X3N1cHBvcnQgPSAoY3B1X2luZm9bMl0gPj4gMjMpICYgMTsKLSAgICB9 Ci0gIHJldHVybiBwb3Bjb3VudF9zdXBwb3J0OwotfQotCi0jICBkZWZpbmUgQ09VTlRfT05F X0JJVFMoR0NDX0JVSUxUSU4sIE1TQ19CVUlMVElOLCBUWVBFKSBcCi0gICAgIGRvICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICBpZiAocG9wY291bnRfc3VwcG9ydGVkICgpKSAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgICAgIHJldHVybiBNU0NfQlVJTFRJTiAoeCk7ICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgIENPVU5UX09ORV9CSVRTX0dFTkVSSUMgKFRZ UEUpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIHdoaWxlICgwKQotCi0jIGVsc2UK LQotIyAgZGVmaW5lIENPVU5UX09ORV9CSVRTKEdDQ19CVUlMVElOLCBNU0NfQlVJTFRJTiwg VFlQRSkgXAotICAgICBDT1VOVF9PTkVfQklUU19HRU5FUklDIChUWVBFKQotCi0jIGVuZGlm Ci0jZW5kaWYKLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgMS1iaXRz IHNldCBpbiBYLiAqLwotQ09VTlRfT05FX0JJVFNfSU5MSU5FIGludAotY291bnRfb25lX2Jp dHMgKHVuc2lnbmVkIGludCB4KQotewotICBDT1VOVF9PTkVfQklUUyAoX19idWlsdGluX3Bv cGNvdW50LCBfX3BvcGNudCwgdW5zaWduZWQgaW50KTsKLX0KLQotLyogQ29tcHV0ZSBhbmQg cmV0dXJuIHRoZSBudW1iZXIgb2YgMS1iaXRzIHNldCBpbiBYLiAqLwotQ09VTlRfT05FX0JJ VFNfSU5MSU5FIGludAotY291bnRfb25lX2JpdHNfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkK LXsKLSAgQ09VTlRfT05FX0JJVFMgKF9fYnVpbHRpbl9wb3Bjb3VudGwsIF9fcG9wY250LCB1 bnNpZ25lZCBsb25nIGludCk7Ci19Ci0KLS8qIENvbXB1dGUgYW5kIHJldHVybiB0aGUgbnVt YmVyIG9mIDEtYml0cyBzZXQgaW4gWC4gKi8KLUNPVU5UX09ORV9CSVRTX0lOTElORSBpbnQK LWNvdW50X29uZV9iaXRzX2xsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IHgpCi17Ci0gIENP VU5UX09ORV9CSVRTIChfX2J1aWx0aW5fcG9wY291bnRsbCwgX19wb3BjbnQ2NCwgdW5zaWdu ZWQgbG9uZyBsb25nIGludCk7Ci19Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlm Ci0KLV9HTF9JTkxJTkVfSEVBREVSX0VORAotCi0jZW5kaWYgLyogQ09VTlRfT05FX0JJVFNf SCAqLwpkaWZmIC0tZ2l0IGEvbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMgYi9saWIvY291 bnQtdHJhaWxpbmctemVyb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEz Zjc3Nzg4ZGEuLjAwMDAwMDAwMDAwCi0tLSBhL2xpYi9jb3VudC10cmFpbGluZy16ZXJvcy5j CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogQ291bnQgdGhlIG51bWJlciBv ZiB0cmFpbGluZyAwIGJpdHMgaW4gYSB3b3JkLgotCi0gICBDb3B5cmlnaHQgMjAxMy0yMDI0 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMKLSAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0gICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uICAqLwotCi0jaW5jbHVkZSA8Y29uZmlnLmg+Ci0KLSNkZWZpbmUgQ09VTlRfVFJBSUxJ TkdfWkVST1NfSU5MSU5FIF9HTF9FWFRFUk5fSU5MSU5FCi0jaW5jbHVkZSAiY291bnQtdHJh aWxpbmctemVyb3MuaCIKZGlmZiAtLWdpdCBhL2xpYi9jb3VudC10cmFpbGluZy16ZXJvcy5o IGIvbGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGVkMWUwMTMxMTQ3Li4wMDAwMDAwMDAwMAotLS0gYS9saWIvY291bnQtdHJhaWxp bmctemVyb3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0vKiBjb3VudC10 cmFpbGluZy16ZXJvcy5oIC0tIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIDAgYml0 cyBpbiBhIHdvcmQuCi0gICBDb3B5cmlnaHQgMjAxMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotCi0gICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAgIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy LjEgb2YgdGhlCi0gICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotCi0gICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBXcml0 dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8KLQotI2lmbmRlZiBDT1VOVF9UUkFJTElOR19aRVJP U19ICi0jZGVmaW5lIENPVU5UX1RSQUlMSU5HX1pFUk9TX0ggMQotCi0vKiBUaGlzIGZpbGUg dXNlcyBfR0xfSU5MSU5FX0hFQURFUl9CRUdJTiwgX0dMX0lOTElORS4gICovCi0jaWYgIV9H TF9DT05GSUdfSF9JTkNMVURFRAotICNlcnJvciAiUGxlYXNlIGluY2x1ZGUgY29uZmlnLmgg Zmlyc3QuIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRs aWIuaD4KLQotX0dMX0lOTElORV9IRUFERVJfQkVHSU4KLSNpZm5kZWYgQ09VTlRfVFJBSUxJ TkdfWkVST1NfSU5MSU5FCi0jIGRlZmluZSBDT1VOVF9UUkFJTElOR19aRVJPU19JTkxJTkUg X0dMX0lOTElORQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7 Ci0jZW5kaWYKLQotLyogQXNzdW1pbmcgdGhlIEdDQyBidWlsdGluIGlzIEJVSUxUSU4gYW5k IHRoZSBNU0MgYnVpbHRpbiBpcyBNU0NfQlVJTFRJTiwKLSAgIGV4cGFuZCB0byBjb2RlIHRo YXQgY29tcHV0ZXMgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbG9jYWwK LSAgIHZhcmlhYmxlICd4JyBvZiB0eXBlIFRZUEUgKGFuIHVuc2lnbmVkIGludGVnZXIgdHlw ZSkgYW5kIHJldHVybiBpdAotICAgZnJvbSB0aGUgY3VycmVudCBmdW5jdGlvbi4gICovCi0j aWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49 IDQpIFwKLSAgICB8fCAoX19jbGFuZ19tYWpvcl9fID49IDQpCi0jIGRlZmluZSBDT1VOVF9U UkFJTElOR19aRVJPUyhCVUlMVElOLCBNU0NfQlVJTFRJTiwgVFlQRSkgICAgICAgICAgICAg ICBcCi0gIHJldHVybiB4ID8gQlVJTFRJTiAoeCkgOiBDSEFSX0JJVCAqIHNpemVvZiB4Owot I2VsaWYgX01TQ19WRVIKLSMgcHJhZ21hIGludHJpbnNpYyAoX0JpdFNjYW5Gb3J3YXJkKQot IyBpZiBkZWZpbmVkIF9NX1g2NAotIyAgcHJhZ21hIGludHJpbnNpYyAoX0JpdFNjYW5Gb3J3 YXJkNjQpCi0jIGVuZGlmCi0jIGRlZmluZSBDT1VOVF9UUkFJTElOR19aRVJPUyhCVUlMVElO LCBNU0NfQlVJTFRJTiwgVFlQRSkgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg IHJldHVybiBNU0NfQlVJTFRJTiAoJnJlc3VsdCwgeCkgPyByZXN1bHQgOiBDSEFSX0JJVCAq IHNpemVvZiB4OyBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgd2hpbGUgKDApCi0jZWxz ZQotIyBkZWZpbmUgQ09VTlRfVFJBSUxJTkdfWkVST1MoQlVJTFRJTiwgTVNDX0JVSUxUSU4s IFRZUEUpICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICBpbnQgY291bnQgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoISB4KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgIHJldHVybiBDSEFSX0JJVCAqIHNpemVvZiB4OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGNvdW50ID0gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg IChjb3VudCA8IENIQVJfQklUICogc2l6ZW9mIHggLSAzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICAgICAgICAmJiAhICh4ICYgMHhmZmZmZmZmZlUpKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgIGNvdW50ICs9IDMy KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICAgIHggPSB4ID4+IDMxID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGlu Z196ZXJvc18zMiAoeCk7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIHdoaWxlICgwKQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJl ciBvZiB0cmFpbGluZyB6ZXJvcyBpbiB0aGUgbGVhc3QKLSAgIHNpZ25pZmljYW50IDMyIGJp dHMgb2YgWC4gIE9uZSBvZiB0aGVzZSBiaXRzIG11c3QgYmUgbm9uemVyby4gICovCi1DT1VO VF9UUkFJTElOR19aRVJPU19JTkxJTkUgaW50Ci1jb3VudF90cmFpbGluZ196ZXJvc18zMiAo dW5zaWduZWQgaW50IHgpCi17Ci0gIC8qIDxodHRwczovL2dpdGh1Yi5jb20vZ2lic2pvc2Uv Qml0SGFja3M+Ci0gICAgIDxodHRwczovL3d3dy5maXQudnV0YnIuY3ovfmliYXJpbmEvcHVi L2JpdGhhY2tzLnBkZj4gKi8KLSAgc3RhdGljIGNvbnN0IGNoYXIgZGVfQnJ1aWpuX2xvb2t1 cFszMl0gPSB7Ci0gICAgMCwgMSwgMjgsIDIsIDI5LCAxNCwgMjQsIDMsIDMwLCAyMiwgMjAs IDE1LCAyNSwgMTcsIDQsIDgsCi0gICAgMzEsIDI3LCAxMywgMjMsIDIxLCAxOSwgMTYsIDcs IDI2LCAxMiwgMTgsIDYsIDExLCA1LCAxMCwgOQotICB9OwotICByZXR1cm4gZGVfQnJ1aWpu X2xvb2t1cFsoKCh4ICYgLXgpICogMHgwNzdjYjUzMVUpICYgMHhmZmZmZmZmZlUpID4+IDI3 XTsKLX0KLSNlbmRpZgotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiB0 cmFpbGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfVFJBSUxJTkdfWkVST1NfSU5MSU5FIGlu dAotY291bnRfdHJhaWxpbmdfemVyb3MgKHVuc2lnbmVkIGludCB4KQotewotICBDT1VOVF9U UkFJTElOR19aRVJPUyAoX19idWlsdGluX2N0eiwgX0JpdFNjYW5Gb3J3YXJkLCB1bnNpZ25l ZCBpbnQpOwotfQotCi0vKiBDb21wdXRlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiB0cmFp bGluZyB6ZXJvcyBpbiBYLiAqLwotQ09VTlRfVFJBSUxJTkdfWkVST1NfSU5MSU5FIGludAot Y291bnRfdHJhaWxpbmdfemVyb3NfbCAodW5zaWduZWQgbG9uZyBpbnQgeCkKLXsKLSAgQ09V TlRfVFJBSUxJTkdfWkVST1MgKF9fYnVpbHRpbl9jdHpsLCBfQml0U2NhbkZvcndhcmQsIHVu c2lnbmVkIGxvbmcgaW50KTsKLX0KLQotLyogQ29tcHV0ZSBhbmQgcmV0dXJuIHRoZSBudW1i ZXIgb2YgdHJhaWxpbmcgemVyb3MgaW4gWC4gKi8KLUNPVU5UX1RSQUlMSU5HX1pFUk9TX0lO TElORSBpbnQKLWNvdW50X3RyYWlsaW5nX3plcm9zX2xsICh1bnNpZ25lZCBsb25nIGxvbmcg aW50IHgpCi17Ci0jaWYgKGRlZmluZWQgX01TQ19WRVIgJiYgIWRlZmluZWQgX19jbGFuZ19f KSAmJiAhZGVmaW5lZCBfTV9YNjQKLSAgLyogMzItYml0IE1TVkMgZG9lcyBub3QgaGF2ZSBf Qml0U2NhbkZvcndhcmQ2NCwgb25seSBfQml0U2NhbkZvcndhcmQuICAqLwotICB1bnNpZ25l ZCBsb25nIHJlc3VsdDsKLSAgaWYgKF9CaXRTY2FuRm9yd2FyZCAoJnJlc3VsdCwgKHVuc2ln bmVkIGxvbmcpIHgpKQotICAgIHJldHVybiByZXN1bHQ7Ci0gIGlmIChfQml0U2NhbkZvcndh cmQgKCZyZXN1bHQsICh1bnNpZ25lZCBsb25nKSAoeCA+PiAzMikpKQotICAgIHJldHVybiBy ZXN1bHQgKyAzMjsKLSAgcmV0dXJuIENIQVJfQklUICogc2l6ZW9mIHg7Ci0jZWxzZQotICBD T1VOVF9UUkFJTElOR19aRVJPUyAoX19idWlsdGluX2N0emxsLCBfQml0U2NhbkZvcndhcmQ2 NCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpOwot I2VuZGlmCi19Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLV9HTF9JTkxJ TkVfSEVBREVSX0VORAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsuaW4g Yi9saWIvZ251bGliLm1rLmluCmluZGV4IGE1YzAwOWNmYjg1Li5mZWNjMzE4MjQ1NiAxMDA2 NDQKLS0tIGEvbGliL2dudWxpYi5tay5pbgorKysgYi9saWIvZ251bGliLm1rLmluCkBAIC04 Niw5ICs4Niw2IEBACiAjICBjYXJlYWRsaW5rYXQgXAogIyAgY2xvc2Utc3RyZWFtIFwKICMg IGNvcHktZmlsZS1yYW5nZSBcCi0jICBjb3VudC1sZWFkaW5nLXplcm9zIFwKLSMgIGNvdW50 LW9uZS1iaXRzIFwKLSMgIGNvdW50LXRyYWlsaW5nLXplcm9zIFwKICMgIGNyeXB0by9tZDUg XAogIyAgY3J5cHRvL21kNS1idWZmZXIgXAogIyAgY3J5cHRvL3NoYTEtYnVmZmVyIFwKQEAg LTE1NSw2ICsxNTIsNyBAQAogIyAgc29ja2xlbiBcCiAjICBzdGF0LXRpbWUgXAogIyAgc3Rk LWdudTExIFwKKyMgIHN0ZGJpdCBcCiAjICBzdGRib29sIFwKICMgIHN0ZGNrZGludCBcCiAj ICBzdGRkZWYgXApAQCAtMzU4LDYgKzM1Niw3IEBAIEdMX0dFTkVSQVRFX0dNUF9IX0NPTkRJ VElPTiA9IEBHTF9HRU5FUkFURV9HTVBfSF9DT05ESVRJT05ACiBHTF9HRU5FUkFURV9JRUVF NzU0X0hfQ09ORElUSU9OID0gQEdMX0dFTkVSQVRFX0lFRUU3NTRfSF9DT05ESVRJT05ACiBH TF9HRU5FUkFURV9MSU1JVFNfSF9DT05ESVRJT04gPSBAR0xfR0VORVJBVEVfTElNSVRTX0hf Q09ORElUSU9OQAogR0xfR0VORVJBVEVfTUlOSV9HTVBfSF9DT05ESVRJT04gPSBAR0xfR0VO RVJBVEVfTUlOSV9HTVBfSF9DT05ESVRJT05ACitHTF9HRU5FUkFURV9TVERCSVRfSF9DT05E SVRJT04gPSBAR0xfR0VORVJBVEVfU1REQklUX0hfQ09ORElUSU9OQAogR0xfR0VORVJBVEVf U1REQ0tESU5UX0hfQ09ORElUSU9OID0gQEdMX0dFTkVSQVRFX1NURENLRElOVF9IX0NPTkRJ VElPTkAKIEdMX0dFTkVSQVRFX1NURERFRl9IX0NPTkRJVElPTiA9IEBHTF9HRU5FUkFURV9T VERERUZfSF9DT05ESVRJT05ACiBHTF9HRU5FUkFURV9TVERJTlRfSF9DT05ESVRJT04gPSBA R0xfR0VORVJBVEVfU1RESU5UX0hfQ09ORElUSU9OQApAQCAtMTMxMyw2ICsxMzEyLDcgQEAg U0laRV9UX1NVRkZJWCA9IEBTSVpFX1RfU1VGRklYQAogU01BTExfSkFfRElDID0gQFNNQUxM X0pBX0RJQ0AKIFNRTElURTNfQ0ZMQUdTID0gQFNRTElURTNfQ0ZMQUdTQAogU1FMSVRFM19M SUJTID0gQFNRTElURTNfTElCU0AKK1NUREJJVF9IID0gQFNUREJJVF9IQAogU1REQ0tESU5U X0ggPSBAU1REQ0tESU5UX0hACiBTVERERUZfSCA9IEBTVERERUZfSEAKIFNURERFRl9OT1Rf SURFTVBPVEVOVCA9IEBTVERERUZfTk9UX0lERU1QT1RFTlRACkBAIC0xNDQyLDYgKzE0NDIs NyBAQCBnbF9HTlVMSUJfRU5BQkxFRF9vcGVuX0NPTkRJVElPTiA9IEBnbF9HTlVMSUJfRU5B QkxFRF9vcGVuX0NPTkRJVElPTkAKIGdsX0dOVUxJQl9FTkFCTEVEX3Jhd21lbWNocl9DT05E SVRJT04gPSBAZ2xfR05VTElCX0VOQUJMRURfcmF3bWVtY2hyX0NPTkRJVElPTkAKIGdsX0dO VUxJQl9FTkFCTEVEX3N0cnRvbGxfQ09ORElUSU9OID0gQGdsX0dOVUxJQl9FTkFCTEVEX3N0 cnRvbGxfQ09ORElUSU9OQAogZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc19DT05ESVRJT04g PSBAZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc19DT05ESVRJT05ACitnbF9HTlVMSUJfRU5B QkxFRF92ZXJpZnlfQ09ORElUSU9OID0gQGdsX0dOVUxJQl9FTkFCTEVEX3ZlcmlmeV9DT05E SVRJT05ACiBnbF9MSUJPQkpERVBTID0gQGdsX0xJQk9CSkRFUFNACiBnbF9MSUJPQkpTID0g QGdsX0xJQk9CSlNACiBnbF9MVExJQk9CSlMgPSBAZ2xfTFRMSUJPQkpTQApAQCAtMTcxOCwz NiArMTcxOSw2IEBAIGVuZGlmCiBlbmRpZgogIyMgZW5kICAgZ251bGliIG1vZHVsZSBjb3B5 LWZpbGUtcmFuZ2UKIAotIyMgYmVnaW4gZ251bGliIG1vZHVsZSBjb3VudC1sZWFkaW5nLXpl cm9zCi1pZmVxICgsJChPTUlUX0dOVUxJQl9NT0RVTEVfY291bnQtbGVhZGluZy16ZXJvcykp Ci0KLWxpYmdudV9hX1NPVVJDRVMgKz0gY291bnQtbGVhZGluZy16ZXJvcy5jCi0KLUVYVFJB X0RJU1QgKz0gY291bnQtbGVhZGluZy16ZXJvcy5oCi0KLWVuZGlmCi0jIyBlbmQgICBnbnVs aWIgbW9kdWxlIGNvdW50LWxlYWRpbmctemVyb3MKLQotIyMgYmVnaW4gZ251bGliIG1vZHVs ZSBjb3VudC1vbmUtYml0cwotaWZlcSAoLCQoT01JVF9HTlVMSUJfTU9EVUxFX2NvdW50LW9u ZS1iaXRzKSkKLQotbGliZ251X2FfU09VUkNFUyArPSBjb3VudC1vbmUtYml0cy5jCi0KLUVY VFJBX0RJU1QgKz0gY291bnQtb25lLWJpdHMuaAotCi1lbmRpZgotIyMgZW5kICAgZ251bGli IG1vZHVsZSBjb3VudC1vbmUtYml0cwotCi0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIGNvdW50 LXRyYWlsaW5nLXplcm9zCi1pZmVxICgsJChPTUlUX0dOVUxJQl9NT0RVTEVfY291bnQtdHJh aWxpbmctemVyb3MpKQotCi1saWJnbnVfYV9TT1VSQ0VTICs9IGNvdW50LXRyYWlsaW5nLXpl cm9zLmMKLQotRVhUUkFfRElTVCArPSBjb3VudC10cmFpbGluZy16ZXJvcy5oCi0KLWVuZGlm Ci0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIGNvdW50LXRyYWlsaW5nLXplcm9zCi0KICMjIGJl Z2luIGdudWxpYiBtb2R1bGUgY3J5cHRvL21kNQogaWZlcSAoLCQoT01JVF9HTlVMSUJfTU9E VUxFX2NyeXB0by9tZDUpKQogCkBAIC0zMDQ5LDYgKzMwMjAsMjkgQEAgRVhUUkFfRElTVCAr PSBzdGF0LXRpbWUuaAogZW5kaWYKICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc3RhdC10aW1l CiAKKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RkYml0CitpZmVxICgsJChPTUlUX0dOVUxJ Ql9NT0RVTEVfc3RkYml0KSkKKworQlVJTFRfU09VUkNFUyArPSAkKFNUREJJVF9IKQorCisj IFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGJpdC5oPiB3 aGVuIHRoZSBzeXN0ZW0KKyMgZG9lc24ndCBoYXZlIG9uZSB0aGF0IHdvcmtzIHdpdGggdGhl IGdpdmVuIGNvbXBpbGVyLgoraWZuZXEgKCwkKEdMX0dFTkVSQVRFX1NUREJJVF9IX0NPTkRJ VElPTikpCitzdGRiaXQuaDogc3RkYml0LmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5z dGF0dXMKKwkkKGdsX1ZfYXQpY3AgJChzcmNkaXIpL3N0ZGJpdC5pbi5oICRALXQKKwkkKEFN X1ZfYXQpbXYgJEAtdCAkQAorbGliZ251X2FfU09VUkNFUyArPSBzdGRiaXQuYworZWxzZQor c3RkYml0Lmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJcm0gLWYgJEAKK2Vu ZGlmCitNT1NUTFlDTEVBTkZJTEVTICs9IHN0ZGJpdC5oIHN0ZGJpdC5oLXQKKworRVhUUkFf RElTVCArPSBzdGRiaXQuaW4uaAorCitlbmRpZgorIyMgZW5kICAgZ251bGliIG1vZHVsZSBz dGRiaXQKKwogIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdGRja2RpbnQKIGlmZXEgKCwkKE9N SVRfR05VTElCX01PRFVMRV9zdGRja2RpbnQpKQogCkBAIC00MjY5LDcgKzQyNjMsOSBAQCBl bmRpZgogIyMgYmVnaW4gZ251bGliIG1vZHVsZSB2ZXJpZnkKIGlmZXEgKCwkKE9NSVRfR05V TElCX01PRFVMRV92ZXJpZnkpKQogCitpZm5lcSAoLCQoZ2xfR05VTElCX0VOQUJMRURfdmVy aWZ5X0NPTkRJVElPTikpCiAKK2VuZGlmCiBFWFRSQV9ESVNUICs9IHZlcmlmeS5oCiAKIGVu ZGlmCmRpZmYgLS1naXQgYS9saWIvc3RkYml0LmMgYi9saWIvc3RkYml0LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzNjlkYzU2OWQ5Ci0tLSAvZGV2L251 bGwKKysrIGIvbGliL3N0ZGJpdC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qIFN1cHBvcnQgQzIz IGJpdCBhbmQgYnl0ZSB1dGlsaXRpZXMgb24gbm9uLUMyMyBwbGF0Zm9ybXMuCisKKyAgIENv cHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlz IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlCisgICBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIGZpbGUg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LiAgKi8K KworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjZGVmaW5lIF9HTF9TVERCSVRfSU5MSU5FIF9H TF9FWFRFUk5fSU5MSU5FCisjaW5jbHVkZSA8c3RkYml0Lmg+CisKKyNpZiAhZGVmaW5lZCBf R0xfU1REQklUX0hBU19CVUlMVElOX0NMWiAmJiAhX01TQ19WRVIKKy8qIF9fZ2xfc3RkYml0 X2NsenRhYltCXSBpcyB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgemVyb3MgaW4KKyAgIHRoZSA4 LWJpdCBieXRlIHdpdGggdmFsdWUgQi4gICovCit1bnNpZ25lZCBjaGFyIGNvbnN0IF9fZ2xf c3RkYml0X2NsenRhYlsyNTZdID0KKyAgeworICAgIDgsCisgICAgNywKKyAgICA2LCA2LAor ICAgIDUsIDUsIDUsIDUsCisgICAgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwKKyAgICAzLCAz LCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLAorCisgICAgMiwg MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKKyAgICAyLCAy LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorCisgICAgMSwg MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAxLCAx LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgIDEsIDEs IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisgICAgMSwgMSwg MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKworICAgIC8qIFRo ZSByZXN0IGlzIHplcm8uICAqLworICB9OworI2VuZGlmCisKKyNpZiAxNTAwIDw9IF9NU0Nf VkVSICYmIChkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfTV9YNjQpCitzaWduZWQgY2hh ciBfX2dsX3N0ZGJpdF9wb3Bjb3VudF9zdXBwb3J0OworI2VuZGlmCmRpZmYgLS1naXQgYS9s aWIvc3RkYml0LmluLmggYi9saWIvc3RkYml0LmluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjEwNWNmZDhjOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGli L3N0ZGJpdC5pbi5oCkBAIC0wLDAgKzEsODg2IEBACisvKiBzdGRiaXQuaCAtIEMyMyBiaXQg YW5kIGJ5dGUgdXRpbGl0aWVzIGZvciBub24tQzIzIHBsYXRmb3JtcworCisgICBDb3B5cmln aHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxl IGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBmaWxlIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworLyogV3JpdHRlbiBieSBQYXVsIEVnZ2VydC4gICovCisKKyNp Zm5kZWYgU1REQklUX0gKKyNkZWZpbmUgU1REQklUX0ggMQorCisvKiBUaGlzIGZpbGUgdXNl cyBfR0xfSU5MSU5FLCBXT1JEU19CSUdFTkRJQU4uICAqLworI2lmICFfR0xfQ09ORklHX0hf SU5DTFVERUQKKyAjZXJyb3IgIlBsZWFzZSBpbmNsdWRlIGNvbmZpZy5oIGZpcnN0LiIKKyNl bmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9CRUdJTgorI2lmbmRlZiBfR0xfU1REQklUX0lO TElORQorIyBkZWZpbmUgX0dMX1NUREJJVF9JTkxJTkUgX0dMX0lOTElORQorI2VuZGlmCisK KyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogQnl0ZXMg bXVzdCBiZSA4IGJpdHMsIGFzIFBPU0lYIHJlcXVpcmVzLiAgVGhpcyBpbXBsZW1lbnRhdGlv biB1c2VzCisgICA4IGluc3RlYWQgb2YgQ0hBUl9CSVQgdG8gYXZvaWQgbmFtZXNwYWNlIHBv bGx1dGlvbi4gICovCitzdGF0aWNfYXNzZXJ0ICgodW5zaWduZWQgY2hhcikgLTEgPT0gKDEg PDwgOCkgLSAxKTsKKworLyogQW4gZXhwcmVzc2lvbiwgcHJlZmVyYWJseSB3aXRoIHRoZSB0 eXBlIG9mIEEsIHRoYXQgaGFzIHRoZSB2YWx1ZSBvZiBCLiAgKi8KKyNpZiAoKGRlZmluZWQg X19HTlVDX18gJiYgMiA8PSBfX0dOVUNfXykgXAorICAgICB8fCAoZGVmaW5lZCBfX2NsYW5n X21ham9yX18gJiYgNCA8PSBfX2NsYW5nX21ham9yX18pIFwKKyAgICAgfHwgKGRlZmluZWQg X19JQk1DX18gJiYgMTIxMCA8PSBfX0lCTUNfXyAmJiBkZWZpbmVkIF9fSUJNX19UWVBFT0Zf XykgXAorICAgICB8fCAoZGVmaW5lZCBfX1NVTlBST19DICYmIDB4NTExMCA8PSBfX1NVTlBS T19DICYmICFfX1NURENfXykpCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEs IGIpICgoX190eXBlb2ZfXyAoYSkpIChiKSkKKyNlbGlmIDIwMjMxMSA8PSBfX1NURENfVkVS U0lPTl9fCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEsIGIpICgodHlwZW9m IChhKSkgKGIpKQorI2Vsc2UKKy8qIFRoaXMgcGxhdGZvcm0gaXMgc28gb2xkIHRoYXQgaXQg bGFja3MgdHlwZW9mLCBzbyBfR2VuZXJpYyBpcyBsaWtlbHkKKyAgIG1pc3Npbmcgb3IgdW5y ZWxpYWJsZS4gIFRoZSBDMjMgc3RhbmRhcmQgc2VlbXMgdG8gYWxsb3cgeWllbGRpbmcgQgor ICAgKHdoaWNoIGlzIGFsd2F5cyB1bnNpZ25lZCBsb25nIGxvbmcgaW50KSwgc28gZG8gdGhh dC4gICovCisjIGRlZmluZSBfR0xfU1REQklUX1RZUEVPRl9DQVNUKGEsIGIpIChiKQorI2Vu ZGlmCisKKyNkZWZpbmUgX19TVERDX1ZFUlNJT05fU1REQklUX0hfXyAyMDIzMTFMCisKKyNk ZWZpbmUgX19TVERDX0VORElBTl9CSUdfXyA0MzIxCisjZGVmaW5lIF9fU1REQ19FTkRJQU5f TElUVExFX18gMTIzNAorI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIyBkZWZpbmUgX19TVERD X0VORElBTl9OQVRJVkVfXyBfX1NURENfRU5ESUFOX0JJR19fCisjZWxzZQorIyBkZWZpbmUg X19TVERDX0VORElBTl9OQVRJVkVfXyBfX1NURENfRU5ESUFOX0xJVFRMRV9fCisjZW5kaWYK KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgMyA8 IF9fR05VQ19fICsgKDQgPD0gX19HTlVDX01JTk9SX18pIHx8IDQgPD0gX19jbGFuZ19tYWpv cl9fCisjIGRlZmluZSBfR0xfU1REQklUX0hBU19CVUlMVElOX0NMWiB0cnVlCisjIGRlZmlu ZSBfR0xfU1REQklUX0hBU19CVUlMVElOX0NUWiB0cnVlCisjIGRlZmluZSBfR0xfU1REQklU X0hBU19CVUlMVElOX1BPUENPVU5UIHRydWUKKyNlbGlmIGRlZmluZWQgX19oYXNfYnVpbHRp bgorIyBpZiAoX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2NseikgXAorICAgICAgJiYgX19o YXNfYnVpbHRpbiAoX19idWlsdGluX2NsemwpIFwKKyAgICAgICYmIF9faGFzX2J1aWx0aW4g KF9fYnVpbHRpbl9jbHpsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9D TFogdHJ1ZQorIyBlbmRpZgorIyBpZiAoX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2N0eikg XAorICAgICAgJiYgX19oYXNfYnVpbHRpbiAoX19idWlsdGluX2N0emwpIFwKKyAgICAgICYm IF9faGFzX2J1aWx0aW4gKF9fYnVpbHRpbl9jdHpsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJ VF9IQVNfQlVJTFRJTl9DVFogdHJ1ZQorIyBlbmRpZgorIyBpZiAoX19oYXNfYnVpbHRpbiAo X19idWlsdGluX3BvcGNvdW50KSBcCisgICAgICAmJiBfX2hhc19idWlsdGluIChfX2J1aWx0 aW5fcG9wY291bnRsKSBcCisgICAgICAmJiBfX2hhc19idWlsdGluIChfX2J1aWx0aW5fcG9w Y291bnRsbCkpCisjICBkZWZpbmUgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9QT1BDT1VOVCB0 cnVlCisjIGVuZGlmCisjZW5kaWYKKworLyogQ291bnQgbGVhZGluZyB6ZXJvcyBvZiBub256 ZXJvIE4uICAqLworI2lmZGVmIF9HTF9TVERCSVRfSEFTX0JVSUxUSU5fQ0xaCitfR0xfU1RE QklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NseiAodW5zaWduZWQgaW50IG4pCit7Cisg IHJldHVybiBuID8gX19idWlsdGluX2NsemwgKG4pIDogOCAqIHNpemVvZiBuOworfQorX0dM X1NUREJJVF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9jbHpsICh1bnNpZ25lZCBsb25nIGlu dCBuKQoreworICByZXR1cm4gbiA/IF9fYnVpbHRpbl9jbHpsIChuKSA6IDggKiBzaXplb2Yg bjsKK30KK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bGwgKHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIG4gPyBfX2J1aWx0aW5fY2x6bGwg KG4pIDogOCAqIHNpemVvZiBuOworfQorI2VsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyBwcmFn bWEgaW50cmluc2ljIChfQml0U2NhblJldmVyc2UpCisjIGlmZGVmIF9NX1g2NAorIyAgcHJh Z21hIGludHJpbnNpYyAoX0JpdFNjYW5SZXZlcnNlNjQpCisjIGVuZGlmCitfR0xfU1REQklU X0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NsemwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7 CisgIHVuc2lnbmVkIGxvbmcgaW50IHI7CisgIHJldHVybiA4ICogc2l6ZW9mIG4gLSAoX0Jp dFNjYW5SZXZlcnNlICgmciwgbikgPyByICsgMSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJ TkUgaW50CitfX2dsX3N0ZGJpdF9jbHogKHVuc2lnbmVkIGludCBuKQoreworICByZXR1cm4g X19nbF9zdGRiaXRfY2x6bCAobikgLSA4ICogKHNpemVvZiAwdWwgLSBzaXplb2Ygbik7Cit9 CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2NsemxsICh1bnNpZ25lZCBs b25nIGxvbmcgaW50IG4pCit7CisjIGlmZGVmIF9NX1g2NAorICB1bnNpZ25lZCBsb25nIGlu dCByOworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gKF9CaXRTY2FuUmV2ZXJzZSAoJnIsIG4p ID8gciArIDEgOiAwKTsKKyMgZWxzZQorICB1bnNpZ25lZCBsb25nIGludCBoaSA9IG4gPj4g MzI7CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jbHpsIChoaSA/IGhpIDogbikgKyAoaGkgPyAw IDogMzIpOworIyBlbmRpZgorfQorCisjZWxzZSAvKiAhX01TQ19WRVIgKi8KKworZXh0ZXJu IHVuc2lnbmVkIGNoYXIgY29uc3QgX19nbF9zdGRiaXRfY2x6dGFiWzI1Nl07CisKK19HTF9T VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bGwgKHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgbikKK3sKKyAgc3RhdGljX2Fzc2VydCAoOCAqIHNpemVvZiBuIDw9IDEgPDwgNyk7 CisgIGludCByID0gMDsKKyAgaW50IGE2ID0gKDB4ZmZmZmZmZmZmZmZmZmZmZiA8IG4pIDw8 IDY7IG4gPj49IGE2OyByIHw9IGE2OworICBpbnQgYTUgPSAoMHgwMDAwMDAwMGZmZmZmZmZm IDwgbikgPDwgNTsgbiA+Pj0gYTU7IHIgfD0gYTU7CisgIGludCBhNCA9ICgweDAwMDAwMDAw MDAwMGZmZmYgPCBuKSA8PCA0OyBuID4+PSBhNDsgciB8PSBhNDsKKyAgaW50IGEzID0gKDB4 MDAwMDAwMDAwMDAwMDBmZiA8IG4pIDw8IDM7IG4gPj49IGEzOyByIHw9IGEzOworICBpbnQg Y2x6Ynl0ZSA9IF9fZ2xfc3RkYml0X2NsenRhYltuXTsKKyAgcmV0dXJuICg4ICogKHNpemVv ZiBuIC0gMSkgLSByKSArIGNsemJ5dGU7Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19f Z2xfc3RkYml0X2NseiAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBfX2dsX3N0ZGJp dF9jbHpsbCAobikgLSA4ICogKHNpemVvZiAwdWxsIC0gc2l6ZW9mIDB1KTsKK30KK19HTF9T VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY2x6bCAodW5zaWduZWQgbG9uZyBpbnQg bikKK3sKKyAgcmV0dXJuIF9fZ2xfc3RkYml0X2NsemxsIChuKSAtIDggKiAoc2l6ZW9mIDB1 bGwgLSBzaXplb2YgMHVsKTsKK30KKyNlbmRpZgorCisjaWZkZWYgX0dMX1NUREJJVF9IQVNf QlVJTFRJTl9DVFoKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6ICh1 bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIG4gPyBfX2J1aWx0aW5fY3R6bCAobikgOiA4 ICogc2l6ZW9mIG47Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2N0 emwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBuID8gX19idWlsdGluX2N0 emwgKG4pIDogOCAqIHNpemVvZiBuOworfQorX0dMX1NUREJJVF9JTkxJTkUgaW50CitfX2ds X3N0ZGJpdF9jdHpsbCAodW5zaWduZWQgbG9uZyBsb25nIGludCBuKQoreworICByZXR1cm4g biA/IF9fYnVpbHRpbl9jdHpsbCAobikgOiA4ICogc2l6ZW9mIG47Cit9CisjZWxpZiBkZWZp bmVkIF9NU0NfVkVSCisjIHByYWdtYSBpbnRyaW5zaWMgKF9CaXRTY2FuRm9yd2FyZCkKKyMg aWZkZWYgX01fWDY0CisjICBwcmFnbWEgaW50cmluc2ljIChfQml0U2NhbkZvcndhcmQ2NCkK KyMgZW5kaWYKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6bCAodW5z aWduZWQgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgcjsKKyAgcmV0dXJu IF9CaXRTY2FuRm9yd2FyZCAoJnIsIG4pID8gciA6IDggKiBzaXplb2YgbjsKK30KK19HTF9T VERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRfY3R6ICh1bnNpZ25lZCBpbnQgbikKK3sK KyAgcmV0dXJuIF9fZ2xfc3RkYml0X2N0emwgKG4gfCAoMXVsIDw8ICg4ICogc2l6ZW9mIG4g LSAxKSA8PCAxKSk7Cit9CitfR0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X2N0 emxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisjIGlmZGVmIF9NX1g2NAorICB1 bnNpZ25lZCBsb25nIGludCByOworICByZXR1cm4gX0JpdFNjYW5Gb3J3YXJkNjQgKCZyLCBu KSA/IHIgOiA4ICogc2l6ZW9mIG47CisjIGVsc2UKKyAgdW5zaWduZWQgaW50IGxvID0gbjsK KyAgcmV0dXJuIF9fZ2xfc3RkYml0X2N0emwgKGxvID8gbG8gOiBuID4+IDMyKSArIChsbyA/ IDAgOiAzMik7CisjIGVuZGlmCitfR0xfU1REQklUX0lOTElORSBpbnQKK30KKworI2Vsc2Ug LyogIV9NU0NfVkVSICovCisKK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRf Y3R6ICh1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJuIDggKiBzaXplb2YgbiAtIChuID8g X19nbF9zdGRiaXRfY2x6IChuICYgLW4pICsgMSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJ TkUgaW50CitfX2dsX3N0ZGJpdF9jdHpsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICBy ZXR1cm4gOCAqIHNpemVvZiBuIC0gKG4gPyBfX2dsX3N0ZGJpdF9jbHpsIChuICYgLW4pICsg MSA6IDApOworfQorX0dMX1NUREJJVF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9jdHpsbCAo dW5zaWduZWQgbG9uZyBsb25nIGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0g KG4gPyBfX2dsX3N0ZGJpdF9jbHpsbCAobiAmIC1uKSArIDEgOiAwKTsKK30KKyNlbmRpZgor CisjaWZkZWYgX0dMX1NUREJJVF9IQVNfQlVJTFRJTl9QT1BDT1VOVAorIyBkZWZpbmUgX19n bF9zdGRiaXRfcG9wY291bnQgX19idWlsdGluX3BvcGNvdW50CisjIGRlZmluZSBfX2dsX3N0 ZGJpdF9wb3Bjb3VudGwgX19idWlsdGluX3BvcGNvdW50bAorIyBkZWZpbmUgX19nbF9zdGRi aXRfcG9wY291bnRsbCBfX2J1aWx0aW5fcG9wY291bnRsbAorI2Vsc2UKKy8qIENvdW50IHRo ZSBudW1iZXIgb2YgMSBiaXRzIGluIE4uICAqLworX0dMX1NUREJJVF9JTkxJTkUgaW50Citf X2dsX3N0ZGJpdF9wb3Bjb3VudDI1NSAodW5zaWduZWQgbG9uZyBsb25nIGludCBuKQorewor ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisgICAgbWF4ID0gLTF1bGwsCisgICAgeDU1NTU1 NSA9IG1heCAvICgxIDw8IDEgfCAxKSwJLyogMHg1NTU1NTUuLi4gKi8KKyAgICB4MzMzMzMz ID0gbWF4IC8gKDEgPDwgMiB8IDEpLAkvKiAweDMzMzMzMy4uLiAqLworICAgIHgwZjBmMGYg PSBtYXggLyAoMSA8PCA0IHwgMSksCS8qIDB4MGYwZjBmLi4uICovCisgICAgeDAxMDEwMSA9 IG1heCAvICgoMSA8PCA4KSAtIDEpOwkvKiAweDAxMDEwMS4uLiAqLworICBuIC09IChuID4+ IDEpICYgeDU1NTU1NTsKKyAgbiA9IChuICYgeDMzMzMzMykgKyAoKG4gPj4gMikgJiB4MzMz MzMzKTsKKyAgbiA9IChuICsgKG4gPj4gNCkpICYgeDBmMGYwZjsKKworICAvKiBUaGUgbXVs dGlwbGljYXRpb24gbWVhbnMgdGhlIHBvcGNvdW50IHNob3VsZCBmaXQgaW4gdGhlIGxlYWRp bmcgOAorICAgICBiaXRzIG9mIHRoZSBwcm9kdWN0LCBzbyBOIHNob3VsZCBiZSBuYXJyb3dl ciB0aGFuIDI1NiBiaXRzLiAgKi8KKyAgc3RhdGljX2Fzc2VydCAoOCAqIHNpemVvZiBuIDwg MSA8PCA4KTsKKyAgcmV0dXJuIG4gKiB4MDEwMTAxID4+IDggKiAoc2l6ZW9mIG4gLSAxKTsK K30KKworIyBpZmRlZiBfTVNDX1ZFUgorIyAgaWYgMTUwMCA8PSBfTVNDX1ZFUiAmJiAoZGVm aW5lZCBfTV9JWDg2IHx8IGRlZmluZWQgX01fWDY0KQorIyAgIHByYWdtYSBpbnRyaW5zaWMg KF9fY3B1aWQpCisjICAgcHJhZ21hIGludHJpbnNpYyAoX19wb3BjbnQpCisjICAgaWZkZWYg X01fWDY0CisjICAgIHByYWdtYSBpbnRyaW5zaWMgKF9fcG9wY250NjQpCisjICAgZWxzZQor X0dMX1NUREJJVF9JTkxJTkUgaW50CitfX3BvcGNudDY0ICh1bnNpZ25lZCBsb25nIGxvbmcg aW50IG4pCit7CisgIHJldHVybiBfX3BvcGNudCAobiA+PiAzMikgKyBfX3BvcGNudCAobik7 Cit9CisjICAgZW5kaWYKKyMgIGVuZGlmCisKKy8qIDEgaWYgc3VwcG9ydGVkLCAtMSBpZiBu b3QsIDAgaWYgdW5rbm93bi4gICovCitleHRlcm4gc2lnbmVkIGNoYXIgX19nbF9zdGRpbnRf cG9wY291bnRfc3VwcG9ydDsKKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorX19nbF9zdGRi aXRfcG9wY291bnRfc3VwcG9ydGVkICh2b2lkKQoreworICBpZiAoIV9fZ2xfc3RkYml0X3Bv cGNvdW50X3N1cHBvcnQpCisgICAgeworICAgICAgLyogRG8gYXMgZGVzY3JpYmVkIGluCisg ICAgICAgICA8aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvY3BwL2ludHJpbnNp Y3MvcG9wY250MTYtcG9wY250LXBvcGNudDY0PgorICAgICAgICAgQWx0aG91Z2ggTWljcm9z b2Z0IHN0YXJ0ZWQgcmVxdWlyaW5nIFBPUENOVCBpbiBNUy1XaW5kb3dzIDExIDI0SDIsCisg ICAgICAgICB3ZSdsbCBiZSBtb3JlIGNhdXRpb3VzLiAgKi8KKyAgICAgIGludCBjcHVfaW5m b1s0XTsKKyAgICAgIF9fY3B1aWQgKGNwdV9pbmZvLCAxKTsKKyAgICAgIF9fZ2xfc3RkYml0 X3BvcGNvdW50X3N1cHBvcnQgPSBjcHVfaW5mb1syXSAmIDEgPDwgMjMgPyAxIDogLTE7Cisg ICAgfQorICByZXR1cm4gMCA8IF9fZ2xfc3RkYml0X3BvcGNvdW50X3N1cHBvcnQ7Cit9Citf R0xfU1REQklUX0lOTElORSBpbnQKK19fZ2xfc3RkYml0X3BvcGNvdW50ICh1bnNpZ25lZCBp bnQgbikKK3sKKyAgcmV0dXJuIChfX2dsX3N0ZGJpdF9wb3Bjb3VudF9zdXBwb3J0ZWQgKCkK KyAgICAgICAgICA/IF9fcG9wY250IChuKQorICAgICAgICAgIDogX19nbF9zdGRiaXRfcG9w Y291bnQyNTUgKG4pKTsKK30KK19HTF9TVERCSVRfSU5MSU5FIGludAorX19nbF9zdGRiaXRf cG9wY291bnRsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gKF9fZ2xfc3Rk Yml0X3BvcGNvdW50X3N1cHBvcnRlZCAoKQorICAgICAgICAgID8gX19wb3BjbnQgKG4pCisg ICAgICAgICAgOiBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NSAobikpOworfQorX0dMX1NUREJJ VF9JTkxJTkUgaW50CitfX2dsX3N0ZGJpdF9wb3Bjb3VudGxsICh1bnNpZ25lZCBsb25nIGxv bmcgaW50IG4pCit7CisgIHJldHVybiAoX19nbF9zdGRiaXRfcG9wY291bnRfc3VwcG9ydGVk ICgpCisgICAgICAgICAgPyBfX3BvcGNudDY0IChuKQorICAgICAgICAgIDogX19nbF9zdGRi aXRfcG9wY291bnQyNTUgKG4pKTsKK30KKyMgZWxzZSAvKiAhX01TQ19WRVIgKi8KKyMgIGRl ZmluZSBfX2dsX3N0ZGJpdF9wb3Bjb3VudCBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NQorIyAg ZGVmaW5lIF9fZ2xfc3RkYml0X3BvcGNvdW50bCBfX2dsX3N0ZGJpdF9wb3Bjb3VudDI1NQor IyAgZGVmaW5lIF9fZ2xfc3RkYml0X3BvcGNvdW50bGwgX19nbF9zdGRiaXRfcG9wY291bnQy NTUKKyMgZW5kaWYKKyNlbmRpZgorCisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGlu dAorc3RkY19sZWFkaW5nX3plcm9zX3VpICh1bnNpZ25lZCBpbnQgbikKK3sKKyAgcmV0dXJu IF9fZ2xfc3RkYml0X2NseiAobik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVk IGludAorc3RkY19sZWFkaW5nX3plcm9zX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7CisgIHJl dHVybiBzdGRjX2xlYWRpbmdfemVyb3NfdWkgKG4pIC0gOCAqIChzaXplb2YgMHUgLSBzaXpl b2Ygbik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFk aW5nX3plcm9zX3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNf bGVhZGluZ196ZXJvc191aSAobikgLSA4ICogKHNpemVvZiAwdSAtIHNpemVvZiBuKTsKK30K KworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2xlYWRpbmdfemVyb3Nf dWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jbHps IChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2xlYWRp bmdfemVyb3NfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBf X2dsX3N0ZGJpdF9jbHpsbCAobik7Cit9CisKKyNkZWZpbmUgc3RkY19sZWFkaW5nX3plcm9z KG4pIFwKKyAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNfbGVhZGluZ196ZXJvc191YyAobikJ XAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50KSA/IHN0 ZGNfbGVhZGluZ196ZXJvc191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAw dSA/IHN0ZGNfbGVhZGluZ196ZXJvc191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNp emVvZiAwdWwgPyBzdGRjX2xlYWRpbmdfemVyb3NfdWwgKG4pIFwKKyAgIDogc3RkY19sZWFk aW5nX3plcm9zX3VsbCAobikpCisKKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50 CitzdGRjX2xlYWRpbmdfb25lc191YyAodW5zaWduZWQgY2hhciBuKQoreworICByZXR1cm4g c3RkY19sZWFkaW5nX3plcm9zX3VjICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVu c2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNfdXMgKHVuc2lnbmVkIHNob3J0IGludCBu KQoreworICByZXR1cm4gc3RkY19sZWFkaW5nX3plcm9zX3VzICh+bik7Cit9CisKK19HTF9T VERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNfdWkgKHVuc2ln bmVkIGludCBuKQoreworICByZXR1cm4gc3RkY19sZWFkaW5nX3plcm9zX3VpICh+bik7Cit9 CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19sZWFkaW5nX29uZXNf dWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHJldHVybiBzdGRjX2xlYWRpbmdfemVy b3NfdWwgKH5uKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj X2xlYWRpbmdfb25lc191bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0 dXJuIHN0ZGNfbGVhZGluZ196ZXJvc191bGwgKH5uKTsKK30KKworI2RlZmluZSBzdGRjX2xl YWRpbmdfb25lcyhuKSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX2xlYWRpbmdfb25l c191YyAobikJXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQg aW50KSA/IHN0ZGNfbGVhZGluZ19vbmVzX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0g c2l6ZW9mIDB1ID8gc3RkY19sZWFkaW5nX29uZXNfdWkgKG4pIFwKKyAgIDogc2l6ZW9mIChu KSA9PSBzaXplb2YgMHVsID8gc3RkY19sZWFkaW5nX29uZXNfdWwgKG4pIFwKKyAgIDogc3Rk Y19sZWFkaW5nX29uZXNfdWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l ZCBpbnQKK3N0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKHVuc2lnbmVkIGludCBuKQoreworICBy ZXR1cm4gX19nbF9zdGRiaXRfY3R6IChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z aWduZWQgaW50CitzdGRjX3RyYWlsaW5nX3plcm9zX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7 CisgIHJldHVybiBzdGRjX3RyYWlsaW5nX3plcm9zX3VpIChuIHwgKDEgKyAodW5zaWduZWQg Y2hhcikgLTEpKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj X3RyYWlsaW5nX3plcm9zX3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJu IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKG4gfCAoMSArICh1bnNpZ25lZCBzaG9ydCBpbnQp IC0xKSk7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY190cmFp bGluZ196ZXJvc191bCAodW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIF9fZ2xf c3RkYml0X2N0emwgKG4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQK K3N0ZGNfdHJhaWxpbmdfemVyb3NfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7 CisgIHJldHVybiBfX2dsX3N0ZGJpdF9jdHpsbCAobik7Cit9CisKKyNkZWZpbmUgc3RkY190 cmFpbGluZ196ZXJvcyhuKSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX3RyYWlsaW5n X3plcm9zX3VjIChuKQlcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBz aG9ydCBpbnQpID8gc3RkY190cmFpbGluZ196ZXJvc191cyAobikgXAorICAgOiBzaXplb2Yg KG4pID09IHNpemVvZiAwdSA/IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWkgKG4pIFwKKyAgIDog c2l6ZW9mIChuKSA9PSBzaXplb2YgMHVsID8gc3RkY190cmFpbGluZ196ZXJvc191bCAobikg XAorICAgOiBzdGRjX3RyYWlsaW5nX3plcm9zX3VsbCAobikpCisKKworX0dMX1NUREJJVF9J TkxJTkUgdW5zaWduZWQgaW50CitzdGRjX3RyYWlsaW5nX29uZXNfdWMgKHVuc2lnbmVkIGNo YXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfdHJhaWxpbmdfemVyb3NfdWMgKH5uKTsKK30KKwor X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX3RyYWlsaW5nX29uZXNfdXMg KHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4gc3RkY190cmFpbGluZ196ZXJv c191cyAofm4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNf dHJhaWxpbmdfb25lc191aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBzdGRjX3Ry YWlsaW5nX3plcm9zX3VpICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVk IGludAorc3RkY190cmFpbGluZ19vbmVzX3VsICh1bnNpZ25lZCBsb25nIGludCBuKQorewor ICByZXR1cm4gc3RkY190cmFpbGluZ196ZXJvc191bCAofm4pOworfQorCitfR0xfU1REQklU X0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfdHJhaWxpbmdfb25lc191bGwgKHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfdHJhaWxpbmdfemVyb3NfdWxs ICh+bik7Cit9CisKKyNkZWZpbmUgc3RkY190cmFpbGluZ19vbmVzKG4pIFwKKyAgKHNpemVv ZiAobikgPT0gMSA/IHN0ZGNfdHJhaWxpbmdfb25lc191YyAobikJXAorICAgOiBzaXplb2Yg KG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQgaW50KSA/IHN0ZGNfdHJhaWxpbmdfb25l c191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdSA/IHN0ZGNfdHJhaWxp bmdfb25lc191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdWwgPyBzdGRj X3RyYWlsaW5nX29uZXNfdWwgKG4pIFwKKyAgIDogc3RkY190cmFpbGluZ19vbmVzX3VsbCAo bikpCisKKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xl YWRpbmdfemVyb191YyAodW5zaWduZWQgY2hhciBuKQoreworICB1bnNpZ25lZCBpbnQgY291 bnQgPSBzdGRjX2xlYWRpbmdfb25lc191YyAobik7CisgIGJvb2wgYmlnID0gY291bnQgJiA4 ICogc2l6ZW9mIG47CisKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBj b3VudCArIDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19m aXJzdF9sZWFkaW5nX3plcm9fdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNp Z25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfb25lc191cyAobik7CisgIHJldHVybiBj b3VudCA9PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklU X0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ196ZXJvX3VpICh1bnNp Z25lZCBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFkaW5nX29u ZXNfdWkgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50 ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0 X2xlYWRpbmdfemVyb191bCAodW5zaWduZWQgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQg aW50IGNvdW50ID0gc3RkY19sZWFkaW5nX29uZXNfdWwgKG4pOworICByZXR1cm4gY291bnQg PT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJ TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRpbmdfemVyb191bGwgKHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFk aW5nX29uZXNfdWxsIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAg OiBjb3VudCArIDE7Cit9CisKKyNkZWZpbmUgc3RkY19maXJzdF9sZWFkaW5nX3plcm8obikg XAorICAoc2l6ZW9mIChuKSA9PSAxID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWMgKG4p IFwKKyAgIDogc2l6ZW9mIChuKSA9PSBzaXplb2YgKHVuc2lnbmVkIHNob3J0KSA/IHN0ZGNf Zmlyc3RfbGVhZGluZ196ZXJvX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9m IDB1ID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWkgKG4pIFwKKyAgIDogc2l6ZW9mIChu KSA9PSBzaXplb2YgMHVsID8gc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWwgKG4pIFwKKyAg IDogc3RkY19maXJzdF9sZWFkaW5nX3plcm9fdWxsIChuKSkKKworCitfR0xfU1REQklUX0lO TElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ19vbmVfdWMgKHVuc2lnbmVk IGNoYXIgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY19sZWFkaW5nX3plcm9z X3VjIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF9s ZWFkaW5nX29uZV91cyAodW5zaWduZWQgc2hvcnQgaW50IG4pCit7CisgIHVuc2lnbmVkIGlu dCBjb3VudCA9IHN0ZGNfbGVhZGluZ196ZXJvc191cyAobik7CisgIHJldHVybiBjb3VudCA9 PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklUX0lOTElO RSB1bnNpZ25lZCBpbnQKK3N0ZGNfZmlyc3RfbGVhZGluZ19vbmVfdWkgKHVuc2lnbmVkIGlu dCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfemVyb3NfdWkg KG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsK K30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRp bmdfb25lX3VsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291 bnQgPSBzdGRjX2xlYWRpbmdfemVyb3NfdWwgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAq IHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z aWduZWQgaW50CitzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VsbCAodW5zaWduZWQgbG9uZyBs b25nIGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX2xlYWRpbmdfemVy b3NfdWxsIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3Vu dCArIDE7Cit9CisKKyNkZWZpbmUgc3RkY19maXJzdF9sZWFkaW5nX29uZShuKSBcCisgIChz aXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VjIChuKSBcCisgICA6 IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCkgPyBzdGRjX2ZpcnN0X2xl YWRpbmdfb25lX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3Rk Y19maXJzdF9sZWFkaW5nX29uZV91aSAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVv ZiAwdWwgPyBzdGRjX2ZpcnN0X2xlYWRpbmdfb25lX3VsIChuKSBcCisgICA6IHN0ZGNfZmly c3RfbGVhZGluZ19vbmVfdWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l ZCBpbnQKK3N0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191YyAodW5zaWduZWQgY2hhciBuKQor eworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX29uZXNfdWMgKG4pOwor ICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKwor X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3pl cm9fdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQg PSBzdGRjX3RyYWlsaW5nX29uZXNfdXMgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNp emVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWdu ZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWkgKHVuc2lnbmVkIGludCBuKQor eworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX29uZXNfdWkgKG4pOwor ICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKwor X0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX3pl cm9fdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHVuc2lnbmVkIGludCBjb3VudCA9 IHN0ZGNfdHJhaWxpbmdfb25lc191bCAobik7CisgIHJldHVybiBjb3VudCA9PSA4ICogc2l6 ZW9mIG4gPyAwIDogY291bnQgKyAxOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25l ZCBpbnQKK3N0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191bGwgKHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY190cmFpbGluZ19vbmVz X3VsbCAobik7CisgIHJldHVybiBjb3VudCA9PSA4ICogc2l6ZW9mIG4gPyAwIDogY291bnQg KyAxOworfQorCisjZGVmaW5lIHN0ZGNfZmlyc3RfdHJhaWxpbmdfemVybyhuKSBcCisgIChz aXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWMgKG4pIFwKKyAg IDogc2l6ZW9mIChuKSA9PSBzaXplb2YgKHVuc2lnbmVkIHNob3J0KSA/IHN0ZGNfZmlyc3Rf dHJhaWxpbmdfemVyb191cyAobikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdSA/ IHN0ZGNfZmlyc3RfdHJhaWxpbmdfemVyb191aSAobikgXAorICAgOiBzaXplb2YgKG4pID09 IHNpemVvZiAwdWwgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX3plcm9fdWwgKG4pIFwKKyAgIDog c3RkY19maXJzdF90cmFpbGluZ196ZXJvX3VsbCAobikpCisKKworX0dMX1NUREJJVF9JTkxJ TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91YyAodW5zaWduZWQg Y2hhciBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z X3VjIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90 cmFpbGluZ19vbmVfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICB1bnNpZ25lZCBp bnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9zX3VzIChuKTsKKyAgcmV0dXJuIGNvdW50 ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCArIDE7Cit9CisKK19HTF9TVERCSVRfSU5M SU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90cmFpbGluZ19vbmVfdWkgKHVuc2lnbmVk IGludCBuKQoreworICB1bnNpZ25lZCBpbnQgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z X3VpIChuKTsKKyAgcmV0dXJuIGNvdW50ID09IDggKiBzaXplb2YgbiA/IDAgOiBjb3VudCAr IDE7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19maXJzdF90 cmFpbGluZ19vbmVfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7CisgIHVuc2lnbmVkIGlu dCBjb3VudCA9IHN0ZGNfdHJhaWxpbmdfemVyb3NfdWwgKG4pOworICByZXR1cm4gY291bnQg PT0gOCAqIHNpemVvZiBuID8gMCA6IGNvdW50ICsgMTsKK30KKworX0dMX1NUREJJVF9JTkxJ TkUgdW5zaWduZWQgaW50CitzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bGwgKHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gc3RkY190cmFp bGluZ196ZXJvc191bGwgKG4pOworICByZXR1cm4gY291bnQgPT0gOCAqIHNpemVvZiBuID8g MCA6IGNvdW50ICsgMTsKK30KKworI2RlZmluZSBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZShu KSBcCisgIChzaXplb2YgKG4pID09IDEgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91YyAo bikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAodW5zaWduZWQgc2hvcnQpID8gc3Rk Y19maXJzdF90cmFpbGluZ19vbmVfdXMgKG4pIFwKKyAgIDogc2l6ZW9mIChuKSA9PSBzaXpl b2YgMHUgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91aSAobikgXAorICAgOiBzaXplb2Yg KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bCAobikgXAor ICAgOiBzdGRjX2ZpcnN0X3RyYWlsaW5nX29uZV91bGwgKG4pKQorCisKK19HTF9TVERCSVRf SU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVzX3VpICh1bnNpZ25lZCBpbnQg bikKK3sKKyAgcmV0dXJuIF9fZ2xfc3RkYml0X3BvcGNvdW50IChuKTsKK30KKworX0dMX1NU REJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRjX2NvdW50X29uZXNfdWMgKHVuc2lnbmVk IGNoYXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191aSAobik7Cit9CisKK19H TF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVzX3VzICh1bnNp Z25lZCBzaG9ydCBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191aSAobik7 Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF9vbmVz X3VsICh1bnNpZ25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gX19nbF9zdGRiaXRfcG9w Y291bnRsIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50CitzdGRj X2NvdW50X29uZXNfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7CisgIHJldHVy biBfX2dsX3N0ZGJpdF9wb3Bjb3VudGxsIChuKTsKK30KKworI2RlZmluZSBzdGRjX2NvdW50 X29uZXMobikgXAorICAoc2l6ZW9mIChuKSA9PSAxID8gc3RkY19jb3VudF9vbmVzX3VjIChu KSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCBpbnQpID8g c3RkY19jb3VudF9vbmVzX3VzIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1 ID8gc3RkY19jb3VudF9vbmVzX3VpIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9m IDB1bCA/IHN0ZGNfY291bnRfb25lc191bCAobikgXAorICAgOiBzdGRjX2NvdW50X29uZXNf dWxsIChuKSkKKworCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfY291 bnRfemVyb3NfdWMgKHVuc2lnbmVkIGNoYXIgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRf b25lc191YyAofm4pOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0 ZGNfY291bnRfemVyb3NfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4g c3RkY19jb3VudF9vbmVzX3VzICh+bik7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2ln bmVkIGludAorc3RkY19jb3VudF96ZXJvc191aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJl dHVybiBzdGRjX2NvdW50X29uZXNfdWkgKH5uKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUg dW5zaWduZWQgaW50CitzdGRjX2NvdW50X3plcm9zX3VsICh1bnNpZ25lZCBsb25nIGludCBu KQoreworICByZXR1cm4gc3RkY19jb3VudF9vbmVzX3VsICh+bik7Cit9CisKK19HTF9TVERC SVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19jb3VudF96ZXJvc191bGwgKHVuc2lnbmVk IGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0dXJuIHN0ZGNfY291bnRfb25lc191bGwgKH5u KTsKK30KKworI2RlZmluZSBzdGRjX2NvdW50X3plcm9zKG4pIFwKKyAgKHNpemVvZiAobikg PT0gMSA/IHN0ZGNfY291bnRfemVyb3NfdWMgKG4pIFwKKyAgIDogc2l6ZW9mIChuKSA9PSBz aXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkgPyBzdGRjX2NvdW50X3plcm9zX3VzIChuKSBc CisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3RkY19jb3VudF96ZXJvc191aSAo bikgXAorICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2NvdW50X3plcm9z X3VsIChuKSBcCisgICA6IHN0ZGNfY291bnRfemVyb3NfdWxsIChuKSkKKworCitfR0xfU1RE QklUX0lOTElORSBib29sCitzdGRjX2hhc19zaW5nbGVfYml0X3VjICh1bnNpZ25lZCBjaGFy IG4pCit7CisgIHVuc2lnbmVkIGNoYXIgbl8xID0gbiAtIDEsIG54ID0gbl8xIF4gbjsKKyAg cmV0dXJuIG5fMSA8IG54OworfQorCitfR0xfU1REQklUX0lOTElORSBib29sCitzdGRjX2hh c19zaW5nbGVfYml0X3VzICh1bnNpZ25lZCBzaG9ydCBpbnQgbikKK3sKKyAgdW5zaWduZWQg c2hvcnQgaW50IG5fMSA9IG4gLSAxLCBueCA9IG5fMSBeIG47CisgIHJldHVybiBuXzEgPCBu eDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorc3RkY19oYXNfc2luZ2xlX2JpdF91 aSAodW5zaWduZWQgaW50IG4pCit7CisgIHVuc2lnbmVkIGludCBuXzEgPSBuIC0gMSwgbngg PSBuXzEgXiBuOworICByZXR1cm4gbl8xIDwgbng7Cit9CisKK19HTF9TVERCSVRfSU5MSU5F IGJvb2wKK3N0ZGNfaGFzX3NpbmdsZV9iaXRfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4pCit7 CisgIHVuc2lnbmVkIGxvbmcgaW50IG5fMSA9IG4gLSAxLCBueCA9IG5fMSBeIG47CisgIHJl dHVybiBuXzEgPCBueDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgYm9vbAorc3RkY19oYXNf c2luZ2xlX2JpdF91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgdW5zaWdu ZWQgbG9uZyBsb25nIGludCBuXzEgPSBuIC0gMSwgbnggPSBuXzEgXiBuOworICByZXR1cm4g bl8xIDwgbng7Cit9CisKKyNkZWZpbmUgc3RkY19oYXNfc2luZ2xlX2JpdChuKSBcCisgICgo Ym9vbCkgXAorICAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNfaGFzX3NpbmdsZV9iaXRfdWMg KG4pIFwKKyAgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCBpbnQp ID8gc3RkY19oYXNfc2luZ2xlX2JpdF91cyAobikgXAorICAgIDogc2l6ZW9mIChuKSA9PSBz aXplb2YgMHUgPyBzdGRjX2hhc19zaW5nbGVfYml0X3VpIChuKSBcCisgICAgOiBzaXplb2Yg KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2hhc19zaW5nbGVfYml0X3VsIChuKSBcCisgICAg OiBzdGRjX2hhc19zaW5nbGVfYml0X3VsbCAobikpKQorCisKK19HTF9TVERCSVRfSU5MSU5F IHVuc2lnbmVkIGludAorc3RkY19iaXRfd2lkdGhfdWMgKHVuc2lnbmVkIGNoYXIgbikKK3sK KyAgcmV0dXJuIDggKiBzaXplb2YgbiAtIHN0ZGNfbGVhZGluZ196ZXJvc191YyAobik7Cit9 CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19iaXRfd2lkdGhfdXMg KHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gc3Rk Y19sZWFkaW5nX3plcm9zX3VzIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWdu ZWQgaW50CitzdGRjX2JpdF93aWR0aF91aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVy biA4ICogc2l6ZW9mIG4gLSBzdGRjX2xlYWRpbmdfemVyb3NfdWkgKG4pOworfQorCitfR0xf U1REQklUX0lOTElORSB1bnNpZ25lZCBpbnQKK3N0ZGNfYml0X3dpZHRoX3VsICh1bnNpZ25l ZCBsb25nIGludCBuKQoreworICByZXR1cm4gOCAqIHNpemVvZiBuIC0gc3RkY19sZWFkaW5n X3plcm9zX3VsIChuKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQgaW50Citz dGRjX2JpdF93aWR0aF91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKK3sKKyAgcmV0 dXJuIDggKiBzaXplb2YgbiAtIHN0ZGNfbGVhZGluZ196ZXJvc191bGwgKG4pOworfQorCisj ZGVmaW5lIHN0ZGNfYml0X3dpZHRoKG4pIFwKKyAgKHNpemVvZiAobikgPT0gMSA/IHN0ZGNf Yml0X3dpZHRoX3VjIChuKSBcCisgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1bnNpZ25l ZCBzaG9ydCBpbnQpID8gc3RkY19iaXRfd2lkdGhfdXMgKG4pIFwKKyAgIDogc2l6ZW9mIChu KSA9PSBzaXplb2YgMHUgPyBzdGRjX2JpdF93aWR0aF91aSAobikgXAorICAgOiBzaXplb2Yg KG4pID09IHNpemVvZiAwdWwgPyBzdGRjX2JpdF93aWR0aF91bCAobikgXAorICAgOiBzdGRj X2JpdF93aWR0aF91bGwgKG4pKQorCisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGNo YXIKK3N0ZGNfYml0X2Zsb29yX3VjICh1bnNpZ25lZCBjaGFyIG4pCit7CisgIHJldHVybiBu ID8gMXUgPDwgKHN0ZGNfYml0X3dpZHRoX3VjIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NU REJJVF9JTkxJTkUgdW5zaWduZWQgc2hvcnQgaW50CitzdGRjX2JpdF9mbG9vcl91cyAodW5z aWduZWQgc2hvcnQgaW50IG4pCit7CisgIHJldHVybiBuID8gMXUgPDwgKHN0ZGNfYml0X3dp ZHRoX3VzIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5zaWduZWQg aW50CitzdGRjX2JpdF9mbG9vcl91aSAodW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBu ID8gMXUgPDwgKHN0ZGNfYml0X3dpZHRoX3VpIChuKSAtIDEpIDogMDsKK30KKworX0dMX1NU REJJVF9JTkxJTkUgdW5zaWduZWQgbG9uZyBpbnQKK3N0ZGNfYml0X2Zsb29yX3VsICh1bnNp Z25lZCBsb25nIGludCBuKQoreworICByZXR1cm4gbiA/IDF1bCA8PCAoc3RkY19iaXRfd2lk dGhfdWwgKG4pIC0gMSkgOiAwOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBs b25nIGxvbmcgaW50CitzdGRjX2JpdF9mbG9vcl91bGwgKHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgbikKK3sKKyAgcmV0dXJuIG4gPyAxdWxsIDw8IChzdGRjX2JpdF93aWR0aF91bGwgKG4p IC0gMSkgOiAwOworfQorCisjZGVmaW5lIHN0ZGNfYml0X2Zsb29yKG4pIFwKKyAgKF9HTF9T VERCSVRfVFlQRU9GX0NBU1QgXAorICAgKG4sIFwKKyAgICAoc2l6ZW9mIChuKSA9PSAxID8g c3RkY19iaXRfZmxvb3JfdWMgKG4pIFwKKyAgICAgOiBzaXplb2YgKG4pID09IHNpemVvZiAo dW5zaWduZWQgc2hvcnQgaW50KSA/IHN0ZGNfYml0X2Zsb29yX3VzIChuKSBcCisgICAgIDog c2l6ZW9mIChuKSA9PSBzaXplb2YgMHUgPyBzdGRjX2JpdF9mbG9vcl91aSAobikgXAorICAg ICA6IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1bCA/IHN0ZGNfYml0X2Zsb29yX3VsIChuKSBc CisgICAgIDogc3RkY19iaXRfZmxvb3JfdWxsIChuKSkpKQorCisKK19HTF9TVERCSVRfSU5M SU5FIHVuc2lnbmVkIGNoYXIKK3N0ZGNfYml0X2NlaWxfdWMgKHVuc2lnbmVkIGNoYXIgbikK K3sKKyAgcmV0dXJuIG4gPD0gMSA/IDEgOiAydSA8PCAoc3RkY19iaXRfd2lkdGhfdWMgKG4g LSAxKSAtIDEpOworfQorCitfR0xfU1REQklUX0lOTElORSB1bnNpZ25lZCBzaG9ydCBpbnQK K3N0ZGNfYml0X2NlaWxfdXMgKHVuc2lnbmVkIHNob3J0IGludCBuKQoreworICByZXR1cm4g biA8PSAxID8gMSA6IDJ1IDw8IChzdGRjX2JpdF93aWR0aF91cyAobiAtIDEpIC0gMSk7Cit9 CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGludAorc3RkY19iaXRfY2VpbF91aSAo dW5zaWduZWQgaW50IG4pCit7CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnUgPDwgKHN0ZGNf Yml0X3dpZHRoX3VpIChuIC0gMSkgLSAxKTsKK30KKworX0dMX1NUREJJVF9JTkxJTkUgdW5z aWduZWQgbG9uZyBpbnQKK3N0ZGNfYml0X2NlaWxfdWwgKHVuc2lnbmVkIGxvbmcgaW50IG4p Cit7CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnVsIDw8IChzdGRjX2JpdF93aWR0aF91bCAo biAtIDEpIC0gMSk7Cit9CisKK19HTF9TVERCSVRfSU5MSU5FIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQKK3N0ZGNfYml0X2NlaWxfdWxsICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IG4pCit7 CisgIHJldHVybiBuIDw9IDEgPyAxIDogMnVsbCA8PCAoc3RkY19iaXRfd2lkdGhfdWxsIChu IC0gMSkgLSAxKTsKK30KKworI2RlZmluZSBzdGRjX2JpdF9jZWlsKG4pIFwKKyAgKF9HTF9T VERCSVRfVFlQRU9GX0NBU1QgXAorICAgKG4sIFwKKyAgICAoc2l6ZW9mIChuKSA9PSAxID8g c3RkY19iaXRfY2VpbF91YyAobikgXAorICAgICA6IHNpemVvZiAobikgPT0gc2l6ZW9mICh1 bnNpZ25lZCBzaG9ydCBpbnQpID8gc3RkY19iaXRfY2VpbF91cyAobikgXAorICAgICA6IHNp emVvZiAobikgPT0gc2l6ZW9mIDB1ID8gc3RkY19iaXRfY2VpbF91aSAobikgXAorICAgICA6 IHNpemVvZiAobikgPT0gc2l6ZW9mIDB1bCA/IHN0ZGNfYml0X2NlaWxfdWwgKG4pIFwKKyAg ICAgOiBzdGRjX2JpdF9jZWlsX3VsbCAobikpKSkKKworCisjaWZkZWYgX19jcGx1c3BsdXMK K30KKyNlbmRpZgorCitfR0xfSU5MSU5FX0hFQURFUl9FTkQKKworI2VuZGlmIC8qIFNUREJJ VF9IICovCmRpZmYgLS1naXQgYS9tNC9nbnVsaWItY29tcC5tNCBiL200L2dudWxpYi1jb21w Lm00CmluZGV4IDM3ZjE4MGE4OTU1Li45ZmE1ZjQ1ODY2MCAxMDA2NDQKLS0tIGEvbTQvZ251 bGliLWNvbXAubTQKKysrIGIvbTQvZ251bGliLWNvbXAubTQKQEAgLTYzLDkgKzYzLDYgQEAg QUNfREVGVU4KICAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb2V4ZWM6CiAgICMgQ29kZSBmcm9t IG1vZHVsZSBjbG9zZS1zdHJlYW06CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjb3B5LWZpbGUt cmFuZ2U6Ci0gICMgQ29kZSBmcm9tIG1vZHVsZSBjb3VudC1sZWFkaW5nLXplcm9zOgotICAj IENvZGUgZnJvbSBtb2R1bGUgY291bnQtb25lLWJpdHM6Ci0gICMgQ29kZSBmcm9tIG1vZHVs ZSBjb3VudC10cmFpbGluZy16ZXJvczoKICAgIyBDb2RlIGZyb20gbW9kdWxlIGNyeXB0by9t ZDU6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vbWQ1LWJ1ZmZlcjoKICAgIyBDb2Rl IGZyb20gbW9kdWxlIGNyeXB0by9zaGExLWJ1ZmZlcjoKQEAgLTE3NCw2ICsxNzEsNyBAQCBB Q19ERUZVTgogICAjIENvZGUgZnJvbSBtb2R1bGUgc3NpemVfdDoKICAgIyBDb2RlIGZyb20g bW9kdWxlIHN0YXQtdGltZToKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZC1nbnUxMToKKyAg IyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJpdDoKICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJv b2w6CiAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRja2RpbnQ6CiAgICMgQ29kZSBmcm9tIG1v ZHVsZSBzdGRkZWY6CkBAIC01MTQsNiArNTEyLDkgQEAgQUNfREVGVU4KICAgZ3RfVFlQRV9T U0laRV9UCiAgIGdsX1NUQVRfVElNRQogICBnbF9TVEFUX0JJUlRIVElNRQorICBnbF9TVERC SVRfSAorICBnbF9DT05ESVRJT05BTF9IRUFERVIoW3N0ZGJpdC5oXSkKKyAgQUNfUFJPR19N S0RJUl9QCiAgIGdsX0NfQk9PTAogICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3N0ZGNrZGlu dC5oXSkKICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGNrZGludF9oID0geWVzOyB0aGVu CkBAIC02NzMsNiArNjc0LDcgQEAgQUNfREVGVU4KICAgZ2xfZ251bGliX2VuYWJsZWRfNjA5 OWU5NzM3Zjc1N2RiMzZjNDdmYTlkOWYwMmU4OGM9ZmFsc2UKICAgZ2xfZ251bGliX2VuYWJs ZWRfc3RydG9sbD1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF91dGltZW5zPWZhbHNlCisg IGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT1mYWxzZQogICBnbF9nbnVsaWJfZW5hYmxlZF82 ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlYz1mYWxzZQogICBmdW5jX2dsX2dudWxp Yl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIgKCkKICAgewpAQCAt OTUzLDYgKzk1NSwxMiBAQCBBQ19ERUZVTgogICAgICAgZ2xfZ251bGliX2VuYWJsZWRfdXRp bWVucz10cnVlCiAgICAgZmkKICAgfQorICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfdmVyaWZ5 ICgpCisgIHsKKyAgICBpZiAkZ2xfZ251bGliX2VuYWJsZWRfdmVyaWZ5OyB0aGVuIDo7IGVs c2UKKyAgICAgIGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeT10cnVlCisgICAgZmkKKyAgfQog ICBmdW5jX2dsX2dudWxpYl9tNGNvZGVfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVh ZWMgKCkKICAgewogICAgIGlmICRnbF9nbnVsaWJfZW5hYmxlZF82ODJlNjA5NjA0Y2NhYWM2 YmUzODJlNGVlM2E0ZWFlYzsgdGhlbiA6OyBlbHNlCkBAIC0xMDE2LDYgKzEwMjQsOSBAQCBB Q19ERUZVTgogICBpZiBjYXNlICRob3N0X29zIGluIG1pbmd3KiB8IHdpbmRvd3MqKSBmYWxz ZTs7ICopIHRlc3QgJEhBVkVfR0VUUkFORE9NID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0dFVFJB TkRPTSA9IDE7OyBlc2FjOyB0aGVuCiAgICAgZnVuY19nbF9nbnVsaWJfbTRjb2RlX29wZW4K ICAgZmkKKyAgaWYgdGVzdCAkUkVQTEFDRV9NS1RJTUUgPSAxOyB0aGVuCisgICAgZnVuY19n bF9nbnVsaWJfbTRjb2RlX3ZlcmlmeQorICBmaQogICBpZiB0ZXN0ICRIQVZFX1JFQURMSU5L QVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfUkVBRExJTktBVCA9IDE7IHRoZW4KICAgICBmdW5j X2dsX2dudWxpYl9tNGNvZGVfMjYwOTQxYzBlNWRjNjdlYzllODdkMWZiMzIxYzMwMGIKICAg ZmkKQEAgLTEwMjUsNiArMTAzNiw5IEBAIEFDX0RFRlVOCiAgIGlmIHRlc3QgJGFjX3VzZV9p bmNsdWRlZF9yZWdleCA9IHllczsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGliX200Y29kZV9m ZDM4YzdlNDYzYjU0NzQ0Yjc3Yjk4YWVhZmI0ZmE3YwogICBmaQorICBpZiB0ZXN0ICRhY191 c2VfaW5jbHVkZWRfcmVnZXggPSB5ZXM7IHRoZW4KKyAgICBmdW5jX2dsX2dudWxpYl9tNGNv ZGVfdmVyaWZ5CisgIGZpCiAgIGlmIHRlc3QgJEhBVkVfREVDTF9TVFJUT0lNQVggPSAwIHx8 IHRlc3QgJFJFUExBQ0VfU1RSVE9JTUFYID0gMTsgdGhlbgogICAgIGZ1bmNfZ2xfZ251bGli X200Y29kZV9zdHJ0b2xsCiAgIGZpCkBAIC0xMDY1LDYgKzEwNzksNyBAQCBBQ19ERUZVTgog ICBBTV9DT05ESVRJT05BTChbZ2xfR05VTElCX0VOQUJMRURfNjA5OWU5NzM3Zjc1N2RiMzZj NDdmYTlkOWYwMmU4OGNdLCBbJGdsX2dudWxpYl9lbmFibGVkXzYwOTllOTczN2Y3NTdkYjM2 YzQ3ZmE5ZDlmMDJlODhjXSkKICAgQU1fQ09ORElUSU9OQUwoW2dsX0dOVUxJQl9FTkFCTEVE X3N0cnRvbGxdLCBbJGdsX2dudWxpYl9lbmFibGVkX3N0cnRvbGxdKQogICBBTV9DT05ESVRJ T05BTChbZ2xfR05VTElCX0VOQUJMRURfdXRpbWVuc10sIFskZ2xfZ251bGliX2VuYWJsZWRf dXRpbWVuc10pCisgIEFNX0NPTkRJVElPTkFMKFtnbF9HTlVMSUJfRU5BQkxFRF92ZXJpZnld LCBbJGdsX2dudWxpYl9lbmFibGVkX3ZlcmlmeV0pCiAgIEFNX0NPTkRJVElPTkFMKFtnbF9H TlVMSUJfRU5BQkxFRF82ODJlNjA5NjA0Y2NhYWM2YmUzODJlNGVlM2E0ZWFlY10sIFskZ2xf Z251bGliX2VuYWJsZWRfNjgyZTYwOTYwNGNjYWFjNmJlMzgyZTRlZTNhNGVhZWNdKQogICAj IEVuZCBvZiBjb2RlIGZyb20gbW9kdWxlcwogICBtNF9pZnZhbChnbF9MSUJTT1VSQ0VTX0xJ U1QsIFsKQEAgLTEyNzUsMTIgKzEyOTAsNiBAQCBBQ19ERUZVTgogICBsaWIvY2xvc2Utc3Ry ZWFtLmMKICAgbGliL2Nsb3NlLXN0cmVhbS5oCiAgIGxpYi9jb3B5LWZpbGUtcmFuZ2UuYwot ICBsaWIvY291bnQtbGVhZGluZy16ZXJvcy5jCi0gIGxpYi9jb3VudC1sZWFkaW5nLXplcm9z LmgKLSAgbGliL2NvdW50LW9uZS1iaXRzLmMKLSAgbGliL2NvdW50LW9uZS1iaXRzLmgKLSAg bGliL2NvdW50LXRyYWlsaW5nLXplcm9zLmMKLSAgbGliL2NvdW50LXRyYWlsaW5nLXplcm9z LmgKICAgbGliL2RpZmZzZXEuaAogICBsaWIvZGlyZW50LXByaXZhdGUuaAogICBsaWIvZGly ZW50LmluLmgKQEAgLTE0MTMsNiArMTQyMiw4IEBAIEFDX0RFRlVOCiAgIGxpYi9zaWduYWwu aW4uaAogICBsaWIvc3RhdC10aW1lLmMKICAgbGliL3N0YXQtdGltZS5oCisgIGxpYi9zdGRi aXQuYworICBsaWIvc3RkYml0LmluLmgKICAgbGliL3N0ZGNrZGludC5pbi5oCiAgIGxpYi9z dGRkZWYuaW4uaAogICBsaWIvc3RkaW50LmluLmgKQEAgLTE1NjYsNiArMTU3Nyw3IEBAIEFD X0RFRlVOCiAgIG00L3N0YXQtdGltZS5tNAogICBtNC9zdGQtZ251MTEubTQKICAgbTQvc3Rk YWxpZ24ubTQKKyAgbTQvc3RkYml0X2gubTQKICAgbTQvc3RkZGVmX2gubTQKICAgbTQvc3Rk aW50Lm00CiAgIG00L3N0ZGlvX2gubTQKZGlmZiAtLWdpdCBhL200L3N0ZGJpdF9oLm00IGIv bTQvc3RkYml0X2gubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjNjMDdiZGM2Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvc3RkYml0X2gubTQKQEAgLTAs MCArMSwxOSBAQAorIyBzdGRiaXRfaC5tNAorIyBzZXJpYWwgMQorZG5sIENvcHlyaWdodCAy MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBm cmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMg dW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2Ru bCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGlj ZSBpcyBwcmVzZXJ2ZWQuCisKK2RubCBBIHBsYWNlaG9sZGVyIGZvciA8c3RkYml0Lmg+LCBm b3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBpc3N1ZXMuCisKK0FDX0RFRlVOX09OQ0UoW2dsX1NU REJJVF9IXSwKK1sKKyAgQUNfUkVRVUlSRShbZ2xfQklHRU5ESUFOXSkKKyAgQUNfQ0hFQ0tf SEVBREVSU19PTkNFKFtzdGRiaXQuaF0pCisgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRi aXRfaCA9IHllczsgdGhlbgorICAgIEdMX0dFTkVSQVRFX1NUREJJVF9IPWZhbHNlCisgIGVs c2UKKyAgICBHTF9HRU5FUkFURV9TVERCSVRfSD10cnVlCisgIGZpCitdKQpkaWZmIC0tZ2l0 IGEvc3JjL2RhdGEuYyBiL3NyYy9kYXRhLmMKaW5kZXggZWE2MTFhZDFhYmYuLjMwZDhlYWI3 MzU5IDEwMDY0NAotLS0gYS9zcmMvZGF0YS5jCisrKyBiL3NyYy9kYXRhLmMKQEAgLTIzLDgg KzIzLDYgQEAKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2lu Y2x1ZGUgPGNvdW50LW9uZS1iaXRzLmg+Ci0jaW5jbHVkZSA8Y291bnQtdHJhaWxpbmctemVy b3MuaD4KICNpbmNsdWRlIDxpbnRwcm9wcy5oPgogCiAjaW5jbHVkZSAibGlzcC5oIgpAQCAt MzUwMCwxMiArMzQ5OCw4IEBAIERFRlVOICgibG9nY291bnQiLCBGbG9nY291bnQsIFNsb2dj b3VudCwgMSwgMSwgMCwKICAgICB9CiAKICAgZWFzc3VtZSAoRklYTlVNUCAodmFsdWUpKTsK LSAgRU1BQ1NfSU5UIHYgPSBYRklYTlVNICh2YWx1ZSkgPCAwID8gLTEgLSBYRklYTlVNICh2 YWx1ZSkgOiBYRklYTlVNICh2YWx1ZSk7Ci0gIHJldHVybiBtYWtlX2ZpeG51bSAoRU1BQ1Nf VUlOVF9XSURUSCA8PSBVSU5UX1dJRFRICi0JCSAgICAgID8gY291bnRfb25lX2JpdHMgKHYp Ci0JCSAgICAgIDogRU1BQ1NfVUlOVF9XSURUSCA8PSBVTE9OR19XSURUSAotCQkgICAgICA/ IGNvdW50X29uZV9iaXRzX2wgKHYpCi0JCSAgICAgIDogY291bnRfb25lX2JpdHNfbGwgKHYp KTsKKyAgRU1BQ1NfVUlOVCB2ID0gWEZJWE5VTSAodmFsdWUpIDwgMCA/IC0xIC0gWEZJWE5V TSAodmFsdWUpIDogWEZJWE5VTSAodmFsdWUpOworICByZXR1cm4gbWFrZV9maXhudW0gKHN0 ZGNfY291bnRfb25lcyAodikpOwogfQogCiBERUZVTiAoImFzaCIsIEZhc2gsIFNhc2gsIDIs IDIsIDAsCkBAIC0zNjYyLDM2ICszNjU2LDYgQEAgYm9vbF92ZWN0b3Jfc3BhcmVfbWFzayAo RU1BQ1NfSU5UIG5yX2JpdHMpCiAgIHJldHVybiAoKChiaXRzX3dvcmQpIDEpIDw8IChucl9i aXRzICUgQklUU19QRVJfQklUU19XT1JEKSkgLSAxOwogfQogCi0vKiBTaGlmdCBWQUwgcmln aHQgYnkgdGhlIHdpZHRoIG9mIGFuIHVuc2lnbmVkIGxvbmcgbG9uZy4KLSAgIFVMTE9OR19X SURUSCBtdXN0IGJlIGxlc3MgdGhhbiBCSVRTX1BFUl9CSVRTX1dPUkQuICAqLwotCi1zdGF0 aWMgYml0c193b3JkCi1zaGlmdF9yaWdodF91bGwgKGJpdHNfd29yZCB3KQotewotICAvKiBQ YWNpZnkgYm9ndXMgR0NDIHdhcm5pbmcgYWJvdXQgc2hpZnQgY291bnQgZXhjZWVkaW5nIHR5 cGUgd2lkdGguICAqLwotICBpbnQgc2hpZnQgPSBVTExPTkdfV0lEVEggLSBCSVRTX1BFUl9C SVRTX1dPUkQgPCAwID8gVUxMT05HX1dJRFRIIDogMDsKLSAgcmV0dXJuIHcgPj4gc2hpZnQ7 Ci19Ci0KLS8qIFJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBpbiBXLiAgKi8KLQotc3Rh dGljIGludAotY291bnRfb25lX2JpdHNfd29yZCAoYml0c193b3JkIHcpCi17Ci0gIGlmIChC SVRTX1dPUkRfTUFYIDw9IFVJTlRfTUFYKQotICAgIHJldHVybiBjb3VudF9vbmVfYml0cyAo dyk7Ci0gIGVsc2UgaWYgKEJJVFNfV09SRF9NQVggPD0gVUxPTkdfTUFYKQotICAgIHJldHVy biBjb3VudF9vbmVfYml0c19sICh3KTsKLSAgZWxzZQotICAgIHsKLSAgICAgIGludCBpID0g MCwgY291bnQgPSAwOwotICAgICAgd2hpbGUgKGNvdW50ICs9IGNvdW50X29uZV9iaXRzX2xs ICh3KSwKLQkgICAgIChpICs9IFVMTE9OR19XSURUSCkgPCBCSVRTX1BFUl9CSVRTX1dPUkQp Ci0JdyA9IHNoaWZ0X3JpZ2h0X3VsbCAodyk7Ci0gICAgICByZXR1cm4gY291bnQ7Ci0gICAg fQotfQotCiBlbnVtIGJvb2xfdmVjdG9yX29wIHsgYm9vbF92ZWN0b3JfZXhjbHVzaXZlX29y LAogICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdmVjdG9yX3VuaW9uLAogICAgICAgICAg ICAgICAgICAgICAgIGJvb2xfdmVjdG9yX2ludGVyc2VjdGlvbiwKQEAgLTM3OTgsNTUgKzM3 NjIsNiBAQCBib29sX3ZlY3Rvcl9iaW5vcF9kcml2ZXIgKExpc3BfT2JqZWN0IGEsCiAgIHJl dHVybiBkZXN0OwogfQogCi0vKiBQUkVDT05ESVRJT04gbXVzdCBiZSB0cnVlLiAgUmV0dXJu IFZBTFVFLiAgVGhpcyBvZGQgY29uc3RydWN0aW9uCi0gICB3b3JrcyBhcm91bmQgYSBib2d1 cyBHQ0MgZGlhZ25vc3RpYyAic2hpZnQgY291bnQgPj0gd2lkdGggb2YgdHlwZSIuICAqLwot Ci1zdGF0aWMgaW50Ci1wcmVfdmFsdWUgKGJvb2wgcHJlY29uZGl0aW9uLCBpbnQgdmFsdWUp Ci17Ci0gIGVhc3N1bWUgKHByZWNvbmRpdGlvbik7Ci0gIHJldHVybiBwcmVjb25kaXRpb24g PyB2YWx1ZSA6IDA7Ci19Ci0KLS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6 ZXJvIGJpdHMgaW4gdmFsLiAgSWYgdmFsIGlzIHplcm8sCi0gICByZXR1cm4gdGhlIG51bWJl ciBvZiBiaXRzIGluIHZhbC4gICovCi1zdGF0aWMgaW50Ci1jb3VudF90cmFpbGluZ196ZXJv X2JpdHMgKGJpdHNfd29yZCB2YWwpCi17Ci0gIGlmIChCSVRTX1dPUkRfTUFYID09IFVJTlRf TUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvcyAodmFsKTsKLSAgaWYgKEJJ VFNfV09SRF9NQVggPT0gVUxPTkdfTUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196 ZXJvc19sICh2YWwpOwotICBpZiAoQklUU19XT1JEX01BWCA9PSBVTExPTkdfTUFYKQotICAg IHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvc19sbCAodmFsKTsKLQotICAvKiBUaGUgcmVz dCBvZiB0aGlzIGNvZGUgaXMgZm9yIHRoZSB1bmxpa2VseSBwbGF0Zm9ybSB3aGVyZSBiaXRz X3dvcmQgZGlmZmVycwotICAgICBpbiB3aWR0aCBmcm9tIHVuc2lnbmVkIGludCwgdW5zaWdu ZWQgbG9uZywgYW5kIHVuc2lnbmVkIGxvbmcgbG9uZy4gICovCi0gIHZhbCB8PSB+IEJJVFNf V09SRF9NQVg7Ci0gIGlmIChCSVRTX1dPUkRfTUFYIDw9IFVJTlRfTUFYKQotICAgIHJldHVy biBjb3VudF90cmFpbGluZ196ZXJvcyAodmFsKTsKLSAgaWYgKEJJVFNfV09SRF9NQVggPD0g VUxPTkdfTUFYKQotICAgIHJldHVybiBjb3VudF90cmFpbGluZ196ZXJvc19sICh2YWwpOwot ICBlbHNlCi0gICAgewotICAgICAgaW50IGNvdW50OwotICAgICAgZm9yIChjb3VudCA9IDA7 Ci0JICAgY291bnQgPCBCSVRTX1BFUl9CSVRTX1dPUkQgLSBVTExPTkdfV0lEVEg7Ci0JICAg Y291bnQgKz0gVUxMT05HX1dJRFRIKQotCXsKLQkgIGlmICh2YWwgJiBVTExPTkdfTUFYKQot CSAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGluZ196ZXJvc19sbCAodmFsKTsKLQkg IHZhbCA9IHNoaWZ0X3JpZ2h0X3VsbCAodmFsKTsKLQl9Ci0KLSAgICAgIGlmIChCSVRTX1BF Ul9CSVRTX1dPUkQgJSBVTExPTkdfV0lEVEggIT0gMAotCSAgJiYgQklUU19XT1JEX01BWCA9 PSAoYml0c193b3JkKSAtMSkKLQl2YWwgfD0gKGJpdHNfd29yZCkgMSA8PCBwcmVfdmFsdWUg KFVMT05HX01BWCA8IEJJVFNfV09SRF9NQVgsCi0JCQkJCSAgIEJJVFNfUEVSX0JJVFNfV09S RCAlIFVMTE9OR19XSURUSCk7Ci0gICAgICByZXR1cm4gY291bnQgKyBjb3VudF90cmFpbGlu Z196ZXJvc19sbCAodmFsKTsKLSAgICB9Ci19Ci0KIERFRlVOICgiYm9vbC12ZWN0b3ItZXhj bHVzaXZlLW9yIiwgRmJvb2xfdmVjdG9yX2V4Y2x1c2l2ZV9vciwKICAgICAgICBTYm9vbF92 ZWN0b3JfZXhjbHVzaXZlX29yLCAyLCAzLCAwLAogICAgICAgIGRvYzogLyogUmV0dXJuIEEg XiBCLCBiaXR3aXNlIGV4Y2x1c2l2ZSBvci4KQEAgLTM5NjEsNyArMzg3Niw3IEBAIERFRlVO ICgiYm9vbC12ZWN0b3ItY291bnQtcG9wdWxhdGlvbiIsIEZib29sX3ZlY3Rvcl9jb3VudF9w b3B1bGF0aW9uLAogICBhZGF0YSA9IGJvb2xfdmVjdG9yX2RhdGEgKGEpOwogCiAgIGZvciAo aSA9IDA7IGkgPCBud29yZHM7IGkrKykKLSAgICBjb3VudCArPSBjb3VudF9vbmVfYml0c193 b3JkIChhZGF0YVtpXSk7CisgICAgY291bnQgKz0gc3RkY19jb3VudF9vbmVzIChhZGF0YVtp XSk7CiAKICAgcmV0dXJuIG1ha2VfZml4bnVtIChjb3VudCk7CiB9CkBAIC00MDA5LDcgKzM5 MjQsNyBAQCBERUZVTiAoImJvb2wtdmVjdG9yLWNvdW50LWNvbnNlY3V0aXZlIiwgRmJvb2xf dmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlLAogICAgICAgLyogRG8gbm90IGNvdW50IHRoZSBw YWQgYml0cy4gICovCiAgICAgICBtd29yZCB8PSAoYml0c193b3JkKSAxIDw8IChCSVRTX1BF Ul9CSVRTX1dPUkQgLSBvZmZzZXQpOwogCi0gICAgICBjb3VudCA9IGNvdW50X3RyYWlsaW5n X3plcm9fYml0cyAobXdvcmQpOworICAgICAgY291bnQgPSBzdGRjX3RyYWlsaW5nX3plcm9z IChtd29yZCk7CiAgICAgICBwb3MrKzsKICAgICAgIGlmIChjb3VudCArIG9mZnNldCA8IEJJ VFNfUEVSX0JJVFNfV09SRCkKICAgICAgICAgcmV0dXJuIG1ha2VfZml4bnVtIChjb3VudCk7 CkBAIC00MDI5LDcgKzM5NDQsNyBAQCBERUZVTiAoImJvb2wtdmVjdG9yLWNvdW50LWNvbnNl Y3V0aXZlIiwgRmJvb2xfdmVjdG9yX2NvdW50X2NvbnNlY3V0aXZlLAogICAgICAgICAgaW4g dGhlIGN1cnJlbnQgbXdvcmQuICAqLwogICAgICAgbXdvcmQgPSBiaXRzX3dvcmRfdG9faG9z dF9lbmRpYW4gKGFkYXRhW3Bvc10pOwogICAgICAgbXdvcmQgXj0gdHdpZGRsZTsKLSAgICAg IGNvdW50ICs9IGNvdW50X3RyYWlsaW5nX3plcm9fYml0cyAobXdvcmQpOworICAgICAgY291 bnQgKz0gc3RkY190cmFpbGluZ196ZXJvcyAobXdvcmQpOwogICAgIH0KICAgZWxzZSBpZiAo bnJfYml0cyAlIEJJVFNfUEVSX0JJVFNfV09SRCAhPSAwKQogICAgIHsKZGlmZiAtLWdpdCBh L3NyYy9saXNwLmggYi9zcmMvbGlzcC5oCmluZGV4IDQxZjhhZjM1ZThhLi5kMzNhNzYwYzM3 YSAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAorKysgYi9zcmMvbGlzcC5oCkBAIC0yMyw2ICsy Myw3IEBAICNkZWZpbmUgRU1BQ1NfTElTUF9ICiAjaW5jbHVkZSA8YWxsb2NhLmg+CiAjaW5j bHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkYml0 Lmg+CiAjaW5jbHVkZSA8c3RkY2tkaW50Lmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5j bHVkZSA8c3RyaW5nLmg+CkBAIC0zNyw3ICszOCw2IEBAICNkZWZpbmUgRU1BQ1NfTElTUF9I CiAKICNpbmNsdWRlIDxhdHRyaWJ1dGUuaD4KICNpbmNsdWRlIDxieXRlc3dhcC5oPgotI2lu Y2x1ZGUgPGNvdW50LWxlYWRpbmctemVyb3MuaD4KICNpbmNsdWRlIDxpbnRwcm9wcy5oPgog I2luY2x1ZGUgPHZlcmlmeS5oPgogCkBAIC00MTQ4LDExICs0MTQ4LDEyIEBAIGludGVnZXJf dG9fdWludG1heCAoTGlzcF9PYmplY3QgbnVtLCB1aW50bWF4X3QgKm4pCiAgICAgfQogfQog Ci0vKiBSZXR1cm4gZmxvb3IgKGxvZzIgKE4pKSBhcyBhbiBpbnQsIHdoZXJlIDAgPCBOIDw9 IFVMTE9OR19NQVguICAqLworLyogUmV0dXJuIGZsb29yIChsb2cyIChOKSkgYXMgYW4gaW50 LiAgSWYgTiBpcyB6ZXJvLCByZXR1cm4gLTEuICAqLwogSU5MSU5FIGludAogZWxvZ2IgKHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgbikKIHsKLSAgcmV0dXJuIFVMTE9OR19XSURUSCAtIDEg LSBjb3VudF9sZWFkaW5nX3plcm9zX2xsIChuKTsKKyAgaW50IHdpZHRoID0gc3RkY19iaXRf d2lkdGggKG4pOworICByZXR1cm4gd2lkdGggLSAxOwogfQogCiAvKiBBIG1vZGlmaWNhdGlv biBjb3VudC4gIFRoZXNlIGFyZSB3aWRlIGVub3VnaCwgYW5kIGluY3JlbWVudGVkCi0tIAoy LjQ0LjAKCg== --------------vVCz0nb0w5GtZK2vx8iItzns Content-Type: text/x-patch; charset=UTF-8; name="0002-Simplify-32-bit-Android-bit-fiddling.patch" Content-Disposition: attachment; filename="0002-Simplify-32-bit-Android-bit-fiddling.patch" Content-Transfer-Encoding: base64 RnJvbSBlZWU0NGUzNWMxMzM1NjE5M2E2MTVmOWNmMjFiNWY0MTdiNDIxMTUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBTdW4sIDEyIE1heSAyMDI0IDE0OjI2OjMyIC0wNzAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIFNpbXBsaWZ5IDMyLWJpdCBBbmRyb2lkIGJpdCBmaWRkbGluZwoKKiBzcmMvc2Zu dC5jOiBJbmNsdWRlIHN0ZGJpdC5oLgooc2ZudF9jb3VudF9sZWFkaW5nX3plcm9fYml0cykg WyFJTlQ2NF9NQVhdOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiwKd2hpY2ggd2FzIGNvbmZ1c2lu Z2x5IG5hbWVkIGFzIGl0IGFjdHVhbGx5IHJldHVybmVkIDMxIG1pbnVzIHRoZQpudW1iZXIg b2YgbGVhZGluZyB6ZXJvIGJpdHMuCihzZm50X211bHRpcGx5X2RpdmlkZV8yKSBbIUlOVDY0 X01BWF06IFVzZSBzdGRjX2xlYWRpbmdfemVyb3MgaW5zdGVhZC4KLS0tCiBzcmMvc2ZudC5j IHwgNDIgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvc2ZudC5jIGIvc3JjL3NmbnQuYwppbmRleCBkOTA5ZmJhNzY3Ny4uMTgzMjA4 MmU0ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50LmMKKysrIGIvc3JjL3NmbnQuYwpAQCAtMjcs NiArMjcsNyBAQCBDb3B5cmlnaHQgKEMpIDIwMjMtMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGludHByb3BzLmg+ CiAjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRiaXQuaD4KICNpbmNsdWRl IDxzdGRja2RpbnQuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5o PgpAQCAtMzY3OCw0NSArMzY3OSw2IEBAIHNmbnRfbXVsdGlwbHlfZGl2aWRlXzEgKHVuc2ln bmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwKICAgdmFsdWUtPmhpZ2ggPSBoaTsKIH0KIAot LyogQ291bnQgdGhlIG51bWJlciBvZiBtb3N0IHNpZ25pZmljYW50IHplcm8gYml0cyBpbiBO LiAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotc2ZudF9jb3VudF9sZWFkaW5nX3plcm9f Yml0cyAodW5zaWduZWQgaW50IG4pCi17Ci0gIGludCBzaGlmdDsKLQotICBzaGlmdCA9IDA7 Ci0KLSAgaWYgKG4gJiAweGZmZmYwMDAwdWwpCi0gICAgewotICAgICAgbiA+Pj0gMTY7Ci0g ICAgICBzaGlmdCArPSAxNjsKLSAgICB9Ci0KLSAgaWYgKG4gJiAweDAwMDBmZjAwdWwpCi0g ICAgewotICAgICAgbiA+Pj0gODsKLSAgICAgIHNoaWZ0ICs9IDg7Ci0gICAgfQotCi0gIGlm IChuICYgMHgwMDAwMDBmMHVsKQotICAgIHsKLSAgICAgIG4gPj49IDQ7Ci0gICAgICBzaGlm dCArPSA0OwotICAgIH0KLQotICBpZiAobiAmIDB4MDAwMDAwMGN1bCkKLSAgICB7Ci0gICAg ICBuID4+PSAyOwotICAgICAgc2hpZnQgKz0gMjsKLSAgICB9Ci0KLSAgaWYgKG4gJiAweDAw MDAwMDAydWwpCi0gICAgc2hpZnQgKz0gMTsKLQotICByZXR1cm4gc2hpZnQ7Ci19Ci0KIC8q IENhbGN1bGF0ZSBBQiAvIEMuICBWYWx1ZSBpcyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2Vy LiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMzczMCw3ICszNjkyLDcgQEAgc2Zu dF9tdWx0aXBseV9kaXZpZGVfMiAoc3RydWN0IHNmbnRfbGFyZ2VfaW50ZWdlciAqYWIsCiAg IGhpID0gYWItPmhpZ2g7CiAgIGxvID0gYWItPmxvdzsKIAotICBpID0gMzEgLSBzZm50X2Nv dW50X2xlYWRpbmdfemVyb19iaXRzIChoaSk7CisgIGkgPSBzdGRjX2xlYWRpbmdfemVyb3Mg KGhpKTsKICAgciA9IChoaSA8PCBpKSB8IChsbyA+PiAoMzIgLSBpKSk7CiAgIGxvIDw8PSBp OwogICBxID0gciAvIGM7Ci0tIAoyLjQ0LjAKCg== --------------vVCz0nb0w5GtZK2vx8iItzns--