From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9992 invoked by alias); 2 Jun 2009 15:36:34 -0000 Received: (qmail 9977 invoked by uid 22791); 2 Jun 2009 15:36:27 -0000 X-SWARE-Spam-Status: No, hits=1.6 required=5.0 tests=AWL,BAYES_50,HK_OBFDOM,HK_OBFDOMREQ,J_CHICKENPOX_12,J_CHICKENPOX_93,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 02 Jun 2009 15:36:14 +0000 Received: from zps75.corp.google.com (zps75.corp.google.com [172.25.146.75]) by smtp-out.google.com with ESMTP id n52Fa8Ki020114 for ; Tue, 2 Jun 2009 16:36:09 +0100 Received: from gxk7 (gxk7.prod.google.com [10.202.11.7]) by zps75.corp.google.com with ESMTP id n52FZYv6022758 for ; Tue, 2 Jun 2009 08:36:07 -0700 Received: by gxk7 with SMTP id 7so1281537gxk.19 for ; Tue, 02 Jun 2009 08:36:06 -0700 (PDT) MIME-Version: 1.0 Received: by 10.90.88.16 with SMTP id l16mr6378200agb.91.1243956965857; Tue, 02 Jun 2009 08:36:05 -0700 (PDT) In-Reply-To: <001201c9d860$e66c5850$b34508f0$@u-strasbg.fr> References: <20090430071853.99F5584890@localhost> <001201c9d860$e66c5850$b34508f0$@u-strasbg.fr> Date: Tue, 02 Jun 2009 15:36:00 -0000 Message-ID: Subject: Re: [RFA] i386/amd64 h/w watchpoints in gdbserver From: Doug Evans To: Pierre Muller , Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=0016361648b310d98c046b5f4d68 X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-06/txt/msg00018.txt.bz2 --0016361648b310d98c046b5f4d68 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 1495 On Tue, May 19, 2009 at 2:05 AM, Pierre Muller wr= ote: > =A0Doug, I think that your should send a new RFA > for an up-to-date patch with the bi-arch stuff. > Do we have an automated testsuite result comparison script > that can be used for gdbserver testing? I just use --target_board=3Dnative-gdbserver.exp and compare before/after. ref: http://sourceware.org/gdb/wiki/Native_gdbserver_testing No regressions on amd64 gdbserver, 32-bit and 64-bit. > =A0I can test compilation on cygwin, > but testing can only be done manually... Thanks, can you give this a try? > =A0Hopefully, Pedro will then be able to review it rapidly. There's one aspect of this patch that one might want changing. [I'd like to see the change, fwiw.] It's ok for higher level routines to refer to global state (within reason), but it's less ok for lower level routines to refer to global state (modulo constant tables and such that won't change for the duration). The higher level routines should pass down context so the lower level routines don't refer to any global state (again, within reason). Applying that principle here means routines in linux-x86-low.c, for example, should not refer to any global state. Shall I add parameters to insert_watchpoint, etc. so that, for example, x86_insert_watchpoint doesn't have to call current_process? Pedro: Note that this patch does defer updating the debug regs until just before PTRACE_CONT. [win32 version already did a similar thing] --0016361648b310d98c046b5f4d68 Content-Type: text/plain; charset=US-ASCII; name="gdb-090601-gdbserver-hw-wp-3.patch.txt" Content-Disposition: attachment; filename="gdb-090601-gdbserver-hw-wp-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fvgrtuxl0 Content-length: 73022 MjAwOS0wNi0wMSAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoJICAg IFBpZXJyZSBNdWxsZXIgIDxtdWxsZXJAaWNzLnUtc3RyYXNiZy5mcj4KCgkq IE1ha2VmaWxlLmluIChTRklMRVMpOiBBZGQgaTM4Ni1sb3cuYwoJKGkzODZf bG93X2gpOiBEZWZpbmUuCgkoaTM4Ni1sb3cubyk6IEFkZCBkZXBlbmRlbmNp ZXMuCgkobGludXgteDg2LWxvdy5vKTogQWRkIGkzODYtbG93LmggZGVwZW5k ZW5jeS4KCSh3aW4zMi1pMzg2LWxvdy5vKTogRGl0dG8uCgkqIGkzODYtbG93 LmM6IE5ldyBmaWxlLgoJKiBpMzg2LWxvdy5oOiBOZXcgZmlsZS4KCSogY29u ZmlndXJlLnNydiAoaVszNDU2N104Ni0qLWN5Z3dpbiopOiBBZGQgaTM4Ni1s b3cubyB0byBzcnZfdGd0b2JqLgoJKGlbMzQ1NjddODYtKi1saW51eCosIGlb MzQ1NjddODYtKi1taW5ndyosIHg4Nl82NC0qLWxpbnV4Kik6IERpdHRvLgoJ KiBsaW51eC1sb3cuYyAobGludXhfYWRkX3Byb2Nlc3MpOiBJbml0aWFsaXpl IGFyY2hfcHJpdmF0ZS4KCShsaW51eF9yZW1vdmVfcHJvY2Vzcyk6IEZyZWUg YXJjaF9wcml2YXRlLgoJKGFkZF9sd3ApOiBJbml0aWFsaXplIGFyY2hfcHJp dmF0ZS4KCShkZWxldGVfbHdwKTogRnJlZSBhcmNoX3ByaXZhdGUuCgkobGlu dXhfcmVzdW1lX29uZV9sd3ApOiBDYWxsIHRoZV9sb3dfdGFyZ2V0LnByZXBh cmVfdG9fcmVzdW1lIGlmCglwcm92aWRlZC4KCSogbGludXgtbG93LmggKHBy b2Nlc3NfaW5mb19wcml2YXRlKTogTmV3IG1lbWJlciBhcmNoX3ByaXZhdGUu CgkobHdwX2luZm8pOiBOZXcgbWVtYmVyIGFyY2hfcHJpdmF0ZS4KCShsaW51 eF90YXJnZXRfb3BzKTogTmV3IG1lbWJlcnMgbmV3X3Byb2Nlc3MsIG5ld190 aHJlYWQsCglwcmVwYXJlX3RvX3Jlc3VtZS4KCShwdGlkX29mLCBQSURHRVQs IFRJREdFVCk6IE5ldyBtYWNyb3MuCgkqIGxpbnV4LXg4Ni1sb3cuYzogSW5j bHVkZSBzdGRkZWYuaCwgaTM4Ni1sb3cuaC4KCShhcmNoX3Byb2Nlc3NfaW5m byk6IE5ldyBzdHJ1Y3QuCgkoYXJjaF9sd3BfaW5mbyk6IE5ldyBzdHJ1Y3Qu CgkoeDg2X2xpbnV4X2RyX2dldCwgeDg2X2xpbnV4X2RyX3NldCk6IE5ldyBm dW5jdGlvbnMuCgkoaTM4Nl9kcl9sb3dfc2V0X2FkZHIsIGkzODZfZHJfbG93 X3NldF9jb250cm9sKTogTmV3IGZ1bmN0aW9ucy4KCShpMzg2X2RyX2xvd19n ZXRfc3RhdHVzKTogTmV3IGZ1bmN0aW9uLgoJKHg4Nl9pbnNlcnRfd2F0Y2hw b2ludCwgeDg2X3JlbW92ZV93YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9ucy4K CSh4ODZfc3RvcHBlZF9ieV93YXRjaHBvaW50KTogTmV3IGZ1bmN0aW9uLgoJ KHg4Nl9zdG9wcGVkX2RhdGFfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbi4KCSh4 ODZfbGludXhfbmV3X3Byb2Nlc3MsIHg4Nl9saW51eF9uZXdfdGhyZWFkKTog TmV3IGZ1bmN0aW9ucy4KCSh4ODZfbGludXhfcHJlcGFyZV90b19yZXN1bWUp OiBOZXcgZnVuY3Rpb24uCgkodGhlX2xvd190YXJnZXQpOiBBZGQgZW50cmll cyBmb3IgaW5zZXJ0X3dhdGNocG9pbnQsIHJlbW92ZV93YXRjaHBvaW50LAoJ c3RvcHBlZF9ieV93YXRjaHBvaW50LCBzdG9wcGVkX2RhdGFfYWRkcmVzcywg bmV3X3Byb2Nlc3MsIG5ld190aHJlYWQsCglwcmVwYXJlX3RvX3Jlc3VtZS4K CSogc2VydmVyLmggKHBhZGRyKTogRGVjbGFyZS4KCSogdXRpbHMuYyAoTlVN Q0VMTFMsIENFTExTSVpFKTogTmV3IG1hY3Jvcy4KCShnZXRfc2VsbCwgeHNu cHJpbnRmLCBwYWRkcik6IE5ldyBmdW5jdGlvbnMuCgkqIHdpbjMyLWFybS1s b3cuYyAodGhlX2xvd190YXJnZXQpOiBBZGQgZW50cmllcyBmb3IgaW5zZXJ0 X3dhdGNocG9pbnQsCglyZW1vdmVfd2F0Y2hwb2ludCwgc3RvcHBlZF9ieV93 YXRjaHBvaW50LCBzdG9wcGVkX2RhdGFfYWRkcmVzcy4KCSogd2luMzItaTM4 Ni1sb3cuYzogSW5jbHVkZSBpMzg2LWxvdy5oLgoJKGRlYnVnX3JlZ19zdGF0 ZSk6IFJlcGxhY2VzIGRyLgoJKGkzODZfZHJfbG93X3NldF9hZGRyLCBpMzg2 X2RyX2xvd19zZXRfY29udHJvbCk6IE5ldyBmdW5jdGlvbnMuCgkoaTM4Nl9k cl9sb3dfZ2V0X3N0YXR1cyk6IE5ldyBmdW5jdGlvbi4KCShpMzg2X2luc2Vy dF93YXRjaHBvaW50LCBpMzg2X3JlbW92ZV93YXRjaHBvaW50KTogTmV3IGZ1 bmN0aW9ucy4KCShpMzg2X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCk6IE5ldyBm dW5jdGlvbi4KCShpMzg2X3N0b3BwZWRfZGF0YV9hZGRyZXNzKTogTmV3IGZ1 bmN0aW9uLgoJKGkzODZfaW5pdGlhbF9zdHVmZik6IFVwZGF0ZS4KCShnZXRf dGhyZWFkX2NvbnRleHQsc2V0X3RocmVhZF9jb250ZXh0LGkzODZfdGhyZWFk X2FkZGVkKTogVXBkYXRlLgoJKHRoZV9sb3dfdGFyZ2V0KTogQWRkIGVudHJp ZXMgZm9yIGluc2VydF93YXRjaHBvaW50LAoJcmVtb3ZlX3dhdGNocG9pbnQs IHN0b3BwZWRfYnlfd2F0Y2hwb2ludCwgc3RvcHBlZF9kYXRhX2FkZHJlc3Mu CgkqIHdpbjMyLWxvdy5jICh3aW4zMl9pbnNlcnRfd2F0Y2hwb2ludCk6IE5l dyBmdW5jdGlvbi4KCSh3aW4zMl9yZW1vdmVfd2F0Y2hwb2ludCk6IE5ldyBm dW5jdGlvbi4KCSh3aW4zMl9zdG9wcGVkX2J5X3dhdGNocG9pbnQpOiBOZXcg ZnVuY3Rpb24uCgkod2luMzJfc3RvcHBlZF9kYXRhX2FkZHJlc3MpOiBOZXcg ZnVuY3Rpb24uCgkod2luMzJfdGFyZ2V0X29wcyk6IEFkZCBlbnRyaWVzIGZv ciBpbnNlcnRfd2F0Y2hwb2ludCwKCXJlbW92ZV93YXRjaHBvaW50LCBzdG9w cGVkX2J5X3dhdGNocG9pbnQsIHN0b3BwZWRfZGF0YV9hZGRyZXNzLgoJKiB3 aW4zMi1sb3cuaCAod2luMzJfdGFyZ2V0X29wcyk6IE5ldyBtZW1iZXJzIGlu c2VydF93YXRjaHBvaW50LAoJcmVtb3ZlX3dhdGNocG9pbnQsIHN0b3BwZWRf Ynlfd2F0Y2hwb2ludCwgc3RvcHBlZF9kYXRhX2FkZHJlc3MuCgpJbmRleDog TWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog L2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4sdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuNzQKZGlmZiAtdSAtcCAtcjEuNzQgTWFrZWZp bGUuaW4KLS0tIE1ha2VmaWxlLmluCTEyIE1heSAyMDA5IDIyOjI1OjAwIC0w MDAwCTEuNzQKKysrIE1ha2VmaWxlLmluCTEgSnVuIDIwMDkgMjI6MDI6NDMg LTAwMDAKQEAgLTEwNCw3ICsxMDQsNyBAQCBTRklMRVM9CSQoc3JjZGlyKS9n ZGJyZXBsYXkuYyAkKHNyY2RpcikvCiAJJChzcmNkaXIpL3RocmVhZC1kYi5j ICQoc3JjZGlyKS91dGlscy5jIFwKIAkkKHNyY2RpcikvbGludXgtYXJtLWxv dy5jICQoc3JjZGlyKS9saW51eC1jcmlzLWxvdy5jIFwKIAkkKHNyY2Rpcikv bGludXgtY3Jpc3YzMi1sb3cuYyBcCi0JJChzcmNkaXIpL2kzODctZnAuYyBc CisJJHtzcmNkaXJ9L2kzODYtbG93LmMgJChzcmNkaXIpL2kzODctZnAuYyBc CiAJJChzcmNkaXIpL2xpbnV4LWlhNjQtbG93LmMgJChzcmNkaXIpL2xpbnV4 LWxvdy5jIFwKIAkkKHNyY2RpcikvbGludXgtbTMyci1sb3cuYyBcCiAJJChz cmNkaXIpL2xpbnV4LW02OGstbG93LmMgJChzcmNkaXIpL2xpbnV4LW1pcHMt bG93LmMgXApAQCAtMjg3LDYgKzI4NywxMCBAQCBzaWduYWxzLm86IC4uL2Nv bW1vbi9zaWduYWxzLmMgJChzZXJ2ZXJfCiBtZW1tZW0ubzogLi4vZ251bGli L21lbW1lbS5jCiAJJChDQykgLW8gbWVtbWVtLm8gLWMgJChDUFBGTEFHUykg JChJTlRFUk5BTF9DRkxBR1MpICQ8CiAKK2kzODZfbG93X2ggPSAkKHNyY2Rp cikvaTM4Ni1sb3cuaAorCitpMzg2LWxvdy5vOiBpMzg2LWxvdy5jICQoaTM4 Nl9sb3dfaCkgJChzZXJ2ZXJfaCkgJCh0YXJnZXRfaCkKKwogaTM4Ny1mcC5v OiBpMzg3LWZwLmMgJChzZXJ2ZXJfaCkKIAogbGludXgtbG93Lm86IGxpbnV4 LWxvdy5jICQobGludXhfbG93X2gpICQoc2VydmVyX2gpCkBAIC0zMDQsNyAr MzA4LDcgQEAgbGludXgtcHBjLWxvdy5vOiBsaW51eC1wcGMtbG93LmMgJChs aW51eAogbGludXgtczM5MC1sb3cubzogbGludXgtczM5MC1sb3cuYyAkKGxp bnV4X2xvd19oKSAkKHNlcnZlcl9oKQogbGludXgtc2gtbG93Lm86IGxpbnV4 LXNoLWxvdy5jICQobGludXhfbG93X2gpICQoc2VydmVyX2gpCiBsaW51eC14 ODYtbG93Lm86IGxpbnV4LXg4Ni1sb3cuYyAkKGxpbnV4X2xvd19oKSAkKHNl cnZlcl9oKSBcCi0JJChnZGJfcHJvY19zZXJ2aWNlX2gpCisJJChnZGJfcHJv Y19zZXJ2aWNlX2gpICQoaTM4Nl9sb3dfaCkKIGxpbnV4LXh0ZW5zYS1sb3cu bzogbGludXgteHRlbnNhLWxvdy5jIHh0ZW5zYS14dHJlZ3MuYyAkKGxpbnV4 X2xvd19oKSAkKHNlcnZlcl9oKQogCiB3aW4zMl9sb3dfaCA9ICQoc3JjZGly KS93aW4zMi1sb3cuaApAQCAtMzEyLDcgKzMxNiw3IEBAIHdpbjMyX2xvd19o ID0gJChzcmNkaXIpL3dpbjMyLWxvdy5oCiB3aW4zMi1sb3cubzogd2luMzIt bG93LmMgJCh3aW4zMl9sb3dfaCkgJChzZXJ2ZXJfaCkgJChyZWdkZWZfaCkg JChyZWdjYWNoZV9oKQogCiB3aW4zMi1hcm0tbG93Lm86IHdpbjMyLWFybS1s b3cuYyAkKHdpbjMyX2xvd19oKSAkKHNlcnZlcl9oKQotd2luMzItaTM4Ni1s b3cubzogd2luMzItaTM4Ni1sb3cuYyAkKHdpbjMyX2xvd19oKSAkKHNlcnZl cl9oKQord2luMzItaTM4Ni1sb3cubzogd2luMzItaTM4Ni1sb3cuYyAkKHdp bjMyX2xvd19oKSAkKHNlcnZlcl9oKSAkKGkzODZfbG93X2gpCiAKIHNwdS1s b3cubzogc3B1LWxvdy5jICQoc2VydmVyX2gpCiAKSW5kZXg6IGNvbmZpZ3Vy ZS5zcnYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9z cmMvc3JjL2dkYi9nZGJzZXJ2ZXIvY29uZmlndXJlLnNydix2CnJldHJpZXZp bmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBjb25maWd1cmUu c3J2Ci0tLSBjb25maWd1cmUuc3J2CTEyIE1heSAyMDA5IDIyOjI1OjAwIC0w MDAwCTEuNDEKKysrIGNvbmZpZ3VyZS5zcnYJMSBKdW4gMjAwOSAyMjowMjo0 MyAtMDAwMApAQCAtNTMsMTAgKzUzLDEwIEBAIGNhc2UgIiR7dGFyZ2V0fSIg aW4KIAkJCXNydl9saW51eF90aHJlYWRfZGI9eWVzCiAJCQk7OwogICBpWzM0 NTY3XTg2LSotY3lnd2luKikJc3J2X3JlZ29iaj1yZWctaTM4Ni5vCi0JCQlz cnZfdGd0b2JqPSJ3aW4zMi1sb3cubyB3aW4zMi1pMzg2LWxvdy5vIgorCQkJ c3J2X3RndG9iaj0iaTM4Ni1sb3cubyB3aW4zMi1sb3cubyB3aW4zMi1pMzg2 LWxvdy5vIgogCQkJOzsKICAgaVszNDU2N104Ni0qLWxpbnV4KikJc3J2X3Jl Z29iaj1yZWctaTM4Ni1saW51eC5vCi0JCQlzcnZfdGd0b2JqPSJsaW51eC1s b3cubyBsaW51eC14ODYtbG93Lm8gaTM4Ny1mcC5vIgorCQkJc3J2X3RndG9i aj0ibGludXgtbG93Lm8gbGludXgteDg2LWxvdy5vIGkzODYtbG93Lm8gaTM4 Ny1mcC5vIgogCQkJc3J2X2xpbnV4X3VzcnJlZ3M9eWVzCiAJCQlzcnZfbGlu dXhfcmVnc2V0cz15ZXMKIAkJCXNydl9saW51eF90aHJlYWRfZGI9eWVzCkBA IC03MSw3ICs3MSw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KIAkJCXNydl9t aW5nd2NlPXllcwogCQkJOzsKICAgaVszNDU2N104Ni0qLW1pbmd3KikJc3J2 X3JlZ29iaj1yZWctaTM4Ni5vCi0JCQlzcnZfdGd0b2JqPSJ3aW4zMi1sb3cu byB3aW4zMi1pMzg2LWxvdy5vIgorCQkJc3J2X3RndG9iaj0iaTM4Ni1sb3cu byB3aW4zMi1sb3cubyB3aW4zMi1pMzg2LWxvdy5vIgogCQkJc3J2X21pbmd3 PXllcwogCQkJOzsKICAgaWE2NC0qLWxpbnV4KikJc3J2X3JlZ29iaj1yZWct aWE2NC5vCkBAIC0xNzAsNyArMTcwLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBp bgogCQkJc3J2X3RndG9iaj0ic3B1LWxvdy5vIgogCQkJOzsKICAgeDg2XzY0 LSotbGludXgqKQlzcnZfcmVnb2JqPSJyZWcteDg2LTY0LWxpbnV4Lm8gcmVn LWkzODYtbGludXgubyIKLQkJCXNydl90Z3RvYmo9ImxpbnV4LWxvdy5vIGxp bnV4LXg4Ni1sb3cubyBpMzg3LWZwLm8iCisJCQlzcnZfdGd0b2JqPSJsaW51 eC1sb3cubyBsaW51eC14ODYtbG93Lm8gaTM4Ni1sb3cubyBpMzg3LWZwLm8i CiAJCQlzcnZfbGludXhfdXNycmVncz15ZXMgIyBUaGlzIGlzIGZvciBpMzg2 IHByb2dzLgogCQkJc3J2X2xpbnV4X3JlZ3NldHM9eWVzCiAJCQlzcnZfbGlu dXhfdGhyZWFkX2RiPXllcwpJbmRleDogaTM4Ni1sb3cuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiBpMzg2LWxvdy5jCmRpZmYgLU4gaTM4 Ni1sb3cuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw MDAKKysrIGkzODYtbG93LmMJMSBKdW4gMjAwOSAyMjowMjo0MyAtMDAwMApA QCAtMCwwICsxLDY2MCBAQAorLyogRGVidWcgcmVnaXN0ZXIgY29kZSBmb3Ig dGhlIGkzODYuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOQorICAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAg IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor I2luY2x1ZGUgInNlcnZlci5oIgorI2luY2x1ZGUgInRhcmdldC5oIgorI2lu Y2x1ZGUgImkzODYtbG93LmgiCisKKy8qIFN1cHBvcnQgZm9yIDgtYnl0ZSB3 aWRlIGh3IHdhdGNocG9pbnRzLiAgKi8KKyNpZm5kZWYgVEFSR0VUX0hBU19E Ul9MRU5fOAorI2RlZmluZSBUQVJHRVRfSEFTX0RSX0xFTl84IChzaXplb2Yg KGxvbmcpID09IDgpCisjZW5kaWYKKworZW51bSB0YXJnZXRfaHdfYnBfdHlw ZQorICB7CisgICAgaHdfd3JpdGUgICA9IDAsCS8qIENvbW1vbiAgSFcgd2F0 Y2hwb2ludCAqLworICAgIGh3X3JlYWQgICAgPSAxLAkvKiBSZWFkICAgIEhX IHdhdGNocG9pbnQgKi8KKyAgICBod19hY2Nlc3MgID0gMiwJLyogQWNjZXNz ICBIVyB3YXRjaHBvaW50ICovCisgICAgaHdfZXhlY3V0ZSA9IDMJLyogRXhl Y3V0ZSBIVyBicmVha3BvaW50ICovCisgIH07CisKKy8qIERSNyBEZWJ1ZyBD b250cm9sIHJlZ2lzdGVyIGZpZWxkcy4gICovCisKKy8qIEhvdyBtYW55IGJp dHMgdG8gc2tpcCBpbiBEUjcgdG8gZ2V0IHRvIFIvVyBhbmQgTEVOIGZpZWxk cy4gICovCisjZGVmaW5lIERSX0NPTlRST0xfU0hJRlQJMTYKKy8qIEhvdyBt YW55IGJpdHMgaW4gRFI3IHBlciBSL1cgYW5kIExFTiBmaWVsZCBmb3IgZWFj aCB3YXRjaHBvaW50LiAgKi8KKyNkZWZpbmUgRFJfQ09OVFJPTF9TSVpFCQk0 CisKKy8qIFdhdGNocG9pbnQvYnJlYWtwb2ludCByZWFkL3dyaXRlIGZpZWxk cyBpbiBEUjcuICAqLworI2RlZmluZSBEUl9SV19FWEVDVVRFCSgweDApCS8q IEJyZWFrIG9uIGluc3RydWN0aW9uIGV4ZWN1dGlvbi4gICovCisjZGVmaW5l IERSX1JXX1dSSVRFCSgweDEpCS8qIEJyZWFrIG9uIGRhdGEgd3JpdGVzLiAg Ki8KKyNkZWZpbmUgRFJfUldfUkVBRAkoMHgzKQkvKiBCcmVhayBvbiBkYXRh IHJlYWRzIG9yIHdyaXRlcy4gICovCisKKy8qIFRoaXMgaXMgaGVyZSBmb3Ig Y29tcGxldGVuZXNzLiAgTm8gcGxhdGZvcm0gc3VwcG9ydHMgdGhpcworICAg ZnVuY3Rpb25hbGl0eSB5ZXQgKGFzIG9mIE1hcmNoIDIwMDEpLiAgTm90ZSB0 aGF0IHRoZSBERSBmbGFnIGluIHRoZQorICAgQ1I0IHJlZ2lzdGVyIG5lZWRz IHRvIGJlIHNldCB0byBzdXBwb3J0IHRoaXMuICAqLworI2lmbmRlZiBEUl9S V19JT1JXCisjZGVmaW5lIERSX1JXX0lPUlcJKDB4MikJLyogQnJlYWsgb24g SS9PIHJlYWRzIG9yIHdyaXRlcy4gICovCisjZW5kaWYKKworLyogV2F0Y2hw b2ludC9icmVha3BvaW50IGxlbmd0aCBmaWVsZHMgaW4gRFI3LiAgVGhlIDIt Yml0IGxlZnQgc2hpZnQKKyAgIGlzIHNvIHdlIGNvdWxkIE9SIHRoaXMgd2l0 aCB0aGUgcmVhZC93cml0ZSBmaWVsZCBkZWZpbmVkIGFib3ZlLiAgKi8KKyNk ZWZpbmUgRFJfTEVOXzEJKDB4MCA8PCAyKSAvKiAxLWJ5dGUgcmVnaW9uIHdh dGNoIG9yIGJyZWFrcG9pbnQuICAqLworI2RlZmluZSBEUl9MRU5fMgkoMHgx IDw8IDIpIC8qIDItYnl0ZSByZWdpb24gd2F0Y2guICAqLworI2RlZmluZSBE Ul9MRU5fNAkoMHgzIDw8IDIpIC8qIDQtYnl0ZSByZWdpb24gd2F0Y2guICAq LworI2RlZmluZSBEUl9MRU5fOAkoMHgyIDw8IDIpIC8qIDgtYnl0ZSByZWdp b24gd2F0Y2ggKEFNRDY0KS4gICovCisKKy8qIExvY2FsIGFuZCBHbG9iYWwg RW5hYmxlIGZsYWdzIGluIERSNy4KKworICAgV2hlbiB0aGUgTG9jYWwgRW5h YmxlIGZsYWcgaXMgc2V0LCB0aGUgYnJlYWtwb2ludC93YXRjaHBvaW50IGlz CisgICBlbmFibGVkIG9ubHkgZm9yIHRoZSBjdXJyZW50IHRhc2s7IHRoZSBw cm9jZXNzb3IgYXV0b21hdGljYWxseQorICAgY2xlYXJzIHRoaXMgZmxhZyBv biBldmVyeSB0YXNrIHN3aXRjaC4gIFdoZW4gdGhlIEdsb2JhbCBFbmFibGUg ZmxhZworICAgaXMgc2V0LCB0aGUgYnJlYWtwb2ludC93YXRjaHBvaW50IGlz IGVuYWJsZWQgZm9yIGFsbCB0YXNrczsgdGhlCisgICBwcm9jZXNzb3IgbmV2 ZXIgY2xlYXJzIHRoaXMgZmxhZy4KKworICAgQ3VycmVudGx5LCBhbGwgd2F0 Y2hwb2ludCBhcmUgbG9jYWxseSBlbmFibGVkLiAgSWYgeW91IG5lZWQgdG8K KyAgIGVuYWJsZSB0aGVtIGdsb2JhbGx5LCByZWFkIHRoZSBjb21tZW50IHdo aWNoIHBlcnRhaW5zIHRvIHRoaXMgaW4KKyAgIGkzODZfaW5zZXJ0X2FsaWdu ZWRfd2F0Y2hwb2ludCBiZWxvdy4gICovCisjZGVmaW5lIERSX0xPQ0FMX0VO QUJMRV9TSElGVAkwIC8qIEV4dHJhIHNoaWZ0IHRvIHRoZSBsb2NhbCBlbmFi bGUgYml0LiAgKi8KKyNkZWZpbmUgRFJfR0xPQkFMX0VOQUJMRV9TSElGVAkx IC8qIEV4dHJhIHNoaWZ0IHRvIHRoZSBnbG9iYWwgZW5hYmxlIGJpdC4gICov CisjZGVmaW5lIERSX0VOQUJMRV9TSVpFCQkyIC8qIFR3byBlbmFibGUgYml0 cyBwZXIgZGVidWcgcmVnaXN0ZXIuICAqLworCisvKiBMb2NhbCBhbmQgZ2xv YmFsIGV4YWN0IGJyZWFrcG9pbnQgZW5hYmxlIGZsYWdzIChhLmsuYS4gc2xv d2Rvd24KKyAgIGZsYWdzKS4gIFRoZXNlIGFyZSBvbmx5IHJlcXVpcmVkIG9u IGkzODYsIHRvIGFsbG93IGRldGVjdGlvbiBvZiB0aGUKKyAgIGV4YWN0IGlu c3RydWN0aW9uIHdoaWNoIGNhdXNlZCBhIHdhdGNocG9pbnQgdG8gYnJlYWs7 IGk0ODYgYW5kCisgICBsYXRlciBwcm9jZXNzb3JzIGRvIHRoYXQgYXV0b21h dGljYWxseS4gIFdlIHNldCB0aGVzZSBmbGFncyBmb3IKKyAgIGJhY2t3YXJk cyBjb21wYXRpYmlsaXR5LiAgKi8KKyNkZWZpbmUgRFJfTE9DQUxfU0xPV0RP V04JKDB4MTAwKQorI2RlZmluZSBEUl9HTE9CQUxfU0xPV0RPV04gICAgIAko MHgyMDApCisKKy8qIEZpZWxkcyByZXNlcnZlZCBieSBJbnRlbC4gIFRoaXMg aW5jbHVkZXMgdGhlIEdEIChHZW5lcmFsIERldGVjdAorICAgRW5hYmxlKSBm bGFnLCB3aGljaCBjYXVzZXMgYSBkZWJ1ZyBleGNlcHRpb24gdG8gYmUgZ2Vu ZXJhdGVkIHdoZW4gYQorICAgTU9WIGluc3RydWN0aW9uIGFjY2Vzc2VzIG9u ZSBvZiB0aGUgZGVidWcgcmVnaXN0ZXJzLgorCisgICBGSVhNRTogTXkgSW50 ZWwgbWFudWFsIHNheXMgd2Ugc2hvdWxkIHVzZSAweEY4MDAsIG5vdCAweEZD MDAuICAqLworI2RlZmluZSBEUl9DT05UUk9MX1JFU0VSVkVECSgweEZDMDAp CisKKy8qIEF1eGlsaWFyeSBoZWxwZXIgbWFjcm9zLiAgKi8KKworLyogQSB2 YWx1ZSB0aGF0IG1hc2tzIGFsbCBmaWVsZHMgaW4gRFI3IHRoYXQgYXJlIHJl c2VydmVkIGJ5IEludGVsLiAgKi8KKyNkZWZpbmUgSTM4Nl9EUl9DT05UUk9M X01BU0sJKH5EUl9DT05UUk9MX1JFU0VSVkVEKQorCisvKiBUaGUgSSd0aCBk ZWJ1ZyByZWdpc3RlciBpcyB2YWNhbnQgaWYgaXRzIExvY2FsIGFuZCBHbG9i YWwgRW5hYmxlCisgICBiaXRzIGFyZSByZXNldCBpbiB0aGUgRGVidWcgQ29u dHJvbCByZWdpc3Rlci4gICovCisjZGVmaW5lIEkzODZfRFJfVkFDQU5UKHN0 YXRlLCBpKSBcCisgICgoKHN0YXRlKS0+ZHJfY29udHJvbF9taXJyb3IgJiAo MyA8PCAoRFJfRU5BQkxFX1NJWkUgKiAoaSkpKSkgPT0gMCkKKworLyogTG9j YWxseSBlbmFibGUgdGhlIGJyZWFrL3dhdGNocG9pbnQgaW4gdGhlIEkndGgg ZGVidWcgcmVnaXN0ZXIuICAqLworI2RlZmluZSBJMzg2X0RSX0xPQ0FMX0VO QUJMRShzdGF0ZSwgaSkgXAorICBkbyB7IFwKKyAgICAoc3RhdGUpLT5kcl9j b250cm9sX21pcnJvciB8PSBcCisgICAgICAoMSA8PCAoRFJfTE9DQUxfRU5B QkxFX1NISUZUICsgRFJfRU5BQkxFX1NJWkUgKiAoaSkpKTsgXAorICB9IHdo aWxlICgwKQorCisvKiBHbG9iYWxseSBlbmFibGUgdGhlIGJyZWFrL3dhdGNo cG9pbnQgaW4gdGhlIEkndGggZGVidWcgcmVnaXN0ZXIuICAqLworI2RlZmlu ZSBJMzg2X0RSX0dMT0JBTF9FTkFCTEUoc3RhdGUsIGkpIFwKKyAgZG8geyBc CisgICAgKHN0YXRlKS0+ZHJfY29udHJvbF9taXJyb3IgfD0gXAorICAgICAg KDEgPDwgKERSX0dMT0JBTF9FTkFCTEVfU0hJRlQgKyBEUl9FTkFCTEVfU0la RSAqIChpKSkpOyBcCisgIH0gd2hpbGUgKDApCisKKy8qIERpc2FibGUgdGhl IGJyZWFrL3dhdGNocG9pbnQgaW4gdGhlIEkndGggZGVidWcgcmVnaXN0ZXIu ICAqLworI2RlZmluZSBJMzg2X0RSX0RJU0FCTEUoc3RhdGUsIGkpIFwKKyAg ZG8geyBcCisgICAgKHN0YXRlKS0+ZHJfY29udHJvbF9taXJyb3IgJj0gXAor ICAgICAgfigzIDw8IChEUl9FTkFCTEVfU0laRSAqIChpKSkpOyBcCisgIH0g d2hpbGUgKDApCisKKy8qIFNldCBpbiBEUjcgdGhlIFJXIGFuZCBMRU4gZmll bGRzIGZvciB0aGUgSSd0aCBkZWJ1ZyByZWdpc3Rlci4gICovCisjZGVmaW5l IEkzODZfRFJfU0VUX1JXX0xFTihzdGF0ZSwgaSxyd2xlbikgXAorICBkbyB7 IFwKKyAgICAoc3RhdGUpLT5kcl9jb250cm9sX21pcnJvciAmPSBcCisgICAg ICB+KDB4MGYgPDwgKERSX0NPTlRST0xfU0hJRlQrRFJfQ09OVFJPTF9TSVpF KihpKSkpOyBcCisgICAgKHN0YXRlKS0+ZHJfY29udHJvbF9taXJyb3IgfD0g XAorICAgICAgKChyd2xlbikgPDwgKERSX0NPTlRST0xfU0hJRlQrRFJfQ09O VFJPTF9TSVpFKihpKSkpOyBcCisgIH0gd2hpbGUgKDApCisKKy8qIEdldCBm cm9tIERSNyB0aGUgUlcgYW5kIExFTiBmaWVsZHMgZm9yIHRoZSBJJ3RoIGRl YnVnIHJlZ2lzdGVyLiAgKi8KKyNkZWZpbmUgSTM4Nl9EUl9HRVRfUldfTEVO KHN0YXRlLCBpKSBcCisgICgoKHN0YXRlKS0+ZHJfY29udHJvbF9taXJyb3Ig Pj4gKERSX0NPTlRST0xfU0hJRlQgKyBEUl9DT05UUk9MX1NJWkUgKiAoaSkp KSAmIDB4MGYpCisKKy8qIERpZCB0aGUgd2F0Y2hwb2ludCB3aG9zZSBhZGRy ZXNzIGlzIGluIHRoZSBJJ3RoIHJlZ2lzdGVyIGJyZWFrPyAgKi8KKyNkZWZp bmUgSTM4Nl9EUl9XQVRDSF9ISVQoc3RhdGUsaSkgKChzdGF0ZSktPmRyX3N0 YXR1c19taXJyb3IgJiAoMSA8PCAoaSkpKQorCisvKiBBIG1hY3JvIHRvIGxv b3Agb3ZlciBhbGwgZGVidWcgcmVnaXN0ZXJzLiAgKi8KKyNkZWZpbmUgQUxM X0RFQlVHX1JFR0lTVEVSUyhpKQlmb3IgKGkgPSAwOyBpIDwgRFJfTkFERFI7 IGkrKykKKworLyogV2hldGhlciBvciBub3QgdG8gcHJpbnQgdGhlIG1pcnJv cmVkIGRlYnVnIHJlZ2lzdGVycy4gICovCitzdGF0aWMgaW50IG1haW50X3No b3dfZHIgPSAwOworCisvKiBUeXBlcyBvZiBvcGVyYXRpb25zIHN1cHBvcnRl ZCBieSBpMzg2X2hhbmRsZV9ub25hbGlnbmVkX3dhdGNocG9pbnQuICAqLwor dHlwZWRlZiBlbnVtIHsgV1BfSU5TRVJULCBXUF9SRU1PVkUsIFdQX0NPVU5U IH0gaTM4Nl93cF9vcF90OworCisvKiBJbnRlcm5hbCBmdW5jdGlvbnMuICAq LworCisvKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgNC1iaXQgZmllbGQgZm9y IERSNyBzdWl0YWJsZSBmb3Igd2F0Y2hpbmcgYQorICAgcmVnaW9uIG9mIExF TiBieXRlcyBmb3IgYWNjZXNzZXMgb2YgdHlwZSBUWVBFLiAgTEVOIGlzIGFz c3VtZWQgdG8KKyAgIGhhdmUgdGhlIHZhbHVlIG9mIDEsIDIsIG9yIDQuICAq Lworc3RhdGljIHVuc2lnbmVkIGkzODZfbGVuZ3RoX2FuZF9yd19iaXRzIChp bnQgbGVuLCBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpOworCisvKiBJ bnNlcnQgYSB3YXRjaHBvaW50IGF0IGFkZHJlc3MgQUREUiwgd2hpY2ggaXMg YXNzdW1lZCB0byBiZSBhbGlnbmVkCisgICBhY2NvcmRpbmcgdG8gdGhlIGxl bmd0aCBvZiB0aGUgcmVnaW9uIHRvIHdhdGNoLiAgTEVOX1JXX0JJVFMgaXMg dGhlCisgICB2YWx1ZSBvZiB0aGUgYml0LWZpZWxkIGZyb20gRFI3IHdoaWNo IGRlc2NyaWJlcyB0aGUgbGVuZ3RoIGFuZAorICAgYWNjZXNzIHR5cGUgb2Yg dGhlIHJlZ2lvbiB0byBiZSB3YXRjaGVkIGJ5IHRoaXMgd2F0Y2hwb2ludC4g IFJldHVybgorICAgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8K K3N0YXRpYyBpbnQgaTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChz dHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCQkgICBD T1JFX0FERFIgYWRkciwKKwkJCQkJICAgdW5zaWduZWQgbGVuX3J3X2JpdHMp OworCisvKiBSZW1vdmUgYSB3YXRjaHBvaW50IGF0IGFkZHJlc3MgQUREUiwg d2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhbGlnbmVkCisgICBhY2NvcmRpbmcg dG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVnaW9uIHRvIHdhdGNoLiAgTEVOX1JX X0JJVFMgaXMgdGhlCisgICB2YWx1ZSBvZiB0aGUgYml0cyBmcm9tIERSNyB3 aGljaCBkZXNjcmliZXMgdGhlIGxlbmd0aCBhbmQgYWNjZXNzCisgICB0eXBl IG9mIHRoZSByZWdpb24gd2F0Y2hlZCBieSB0aGlzIHdhdGNocG9pbnQuICBS ZXR1cm4gMCBvbgorICAgc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gICovCitz dGF0aWMgaW50IGkzODZfcmVtb3ZlX2FsaWduZWRfd2F0Y2hwb2ludCAoc3Ry dWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJCQkJICAgQ09S RV9BRERSIGFkZHIsCisJCQkJCSAgIHVuc2lnbmVkIGxlbl9yd19iaXRzKTsK KworLyogSW5zZXJ0IG9yIHJlbW92ZSBhIChwb3NzaWJseSBub24tYWxpZ25l ZCkgd2F0Y2hwb2ludCwgb3IgY291bnQgdGhlCisgICBudW1iZXIgb2YgZGVi dWcgcmVnaXN0ZXJzIHJlcXVpcmVkIHRvIHdhdGNoIGEgcmVnaW9uIGF0IGFk ZHJlc3MKKyAgIEFERFIgd2hvc2UgbGVuZ3RoIGlzIExFTiBmb3IgYWNjZXNz ZXMgb2YgdHlwZSBUWVBFLiAgUmV0dXJuIDAgb24KKyAgIHN1Y2Nlc3NmdWwg aW5zZXJ0aW9uIG9yIHJlbW92YWwsIGEgcG9zaXRpdmUgbnVtYmVyIHdoZW4g cXVlcmllZAorICAgYWJvdXQgdGhlIG51bWJlciBvZiByZWdpc3RlcnMsIG9y IC0xIG9uIGZhaWx1cmUuICBJZiBXSEFUIGlzIG5vdCBhCisgICB2YWxpZCB2 YWx1ZSwgYm9tYnMgdGhyb3VnaCBmYXRhbC4gICovCitzdGF0aWMgaW50IGkz ODZfaGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2ludCAoc3RydWN0IGkzODZf ZGVidWdfcmVnX3N0YXRlICpzdGF0ZSwKKwkJCQkJICAgICAgaTM4Nl93cF9v cF90IHdoYXQsCisJCQkJCSAgICAgIENPUkVfQUREUiBhZGRyLCBpbnQgbGVu LAorCQkJCQkgICAgICBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUpOwor DAorLyogSW1wbGVtZW50YXRpb24uICAqLworCisvKiBDbGVhciB0aGUgcmVm ZXJlbmNlIGNvdW50cyBhbmQgZm9yZ2V0IGV2ZXJ5dGhpbmcgd2Uga25ldyBh Ym91dCB0aGUKKyAgIGRlYnVnIHJlZ2lzdGVycy4gICovCisKK3ZvaWQKK2kz ODZfbG93X2NsZWFudXBfZHJlZ3MgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19z dGF0ZSAqc3RhdGUpCit7CisgIGludCBpOworCisgIEFMTF9ERUJVR19SRUdJ U1RFUlMoaSkKKyAgICB7CisgICAgICBzdGF0ZS0+ZHJfbWlycm9yW2ldID0g MDsKKyAgICAgIHN0YXRlLT5kcl9yZWZfY291bnRbaV0gPSAwOworICAgIH0K KyAgc3RhdGUtPmRyX2NvbnRyb2xfbWlycm9yID0gMDsKKyAgc3RhdGUtPmRy X3N0YXR1c19taXJyb3IgID0gMDsKK30KKworLyogUHJpbnQgdGhlIHZhbHVl cyBvZiB0aGUgbWlycm9yZWQgZGVidWcgcmVnaXN0ZXJzLiAgVGhpcyBpcyBj YWxsZWQKKyAgIHdoZW4gbWFpbnRfc2hvd19kciBpcyBub24temVyby4gIFRv IHNldCB0aGF0IHVwLCB0eXBlICJtYWludAorICAgc2hvdy1kZWJ1Zy1yZWdz IiBhdCBHREIncyBwcm9tcHQuICAqLworCitzdGF0aWMgdm9pZAoraTM4Nl9z aG93X2RyIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAor CSAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIENPUkVfQUREUiBhZGRyLAorCSAg ICAgIGludCBsZW4sIGVudW0gdGFyZ2V0X2h3X2JwX3R5cGUgdHlwZSkKK3sK KyAgaW50IGk7CisKKyAgcHJpbnRmIChmdW5jKTsKKyAgaWYgKGFkZHIgfHwg bGVuKQorICAgIHByaW50ZiAoIiAoYWRkcj0lbHgsIGxlbj0lZCwgdHlwZT0l cykiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpIGFkZHIsIGxlbiwKKwkJ ICAgICAgIHR5cGUgPT0gaHdfd3JpdGUgPyAiZGF0YS13cml0ZSIKKwkJICAg ICAgIDogKHR5cGUgPT0gaHdfcmVhZCA/ICJkYXRhLXJlYWQiCisJCQkgIDog KHR5cGUgPT0gaHdfYWNjZXNzID8gImRhdGEtcmVhZC93cml0ZSIKKwkJCSAg ICAgOiAodHlwZSA9PSBod19leGVjdXRlID8gImluc3RydWN0aW9uLWV4ZWN1 dGUiCisJCQkJLyogRklYTUU6IGlmL3doZW4gSS9PIHJlYWQvd3JpdGUKKwkJ CQkgICB3YXRjaHBvaW50cyBhcmUgc3VwcG9ydGVkLCBhZGQgdGhlbQorCQkJ CSAgIGhlcmUuICAqLworCQkJCTogIj8/dW5rbm93bj8/IikpKSk7CisgIHBy aW50ZiAoIjpcbiIpOworICBwcmludGYgKCJcdENPTlRST0wgKERSNyk6ICUw OHggICAgICAgICAgU1RBVFVTIChEUjYpOiAlMDh4XG4iLAorCQkgICAgIHN0 YXRlLT5kcl9jb250cm9sX21pcnJvciwgc3RhdGUtPmRyX3N0YXR1c19taXJy b3IpOworICBBTExfREVCVUdfUkVHSVNURVJTIChpKQorICAgIHsKKyAgICAg IHByaW50ZiAoIlwKK1x0RFIlZDogYWRkcj0weCVzLCByZWYuY291bnQ9JWQg IERSJWQ6IGFkZHI9MHglcywgcmVmLmNvdW50PSVkXG4iLAorCQkJIGksIHBh ZGRyIChzdGF0ZS0+ZHJfbWlycm9yW2ldKSwgc3RhdGUtPmRyX3JlZl9jb3Vu dFtpXSwKKwkJCSBpKzEsIHBhZGRyIChzdGF0ZS0+ZHJfbWlycm9yW2krMV0p LCBzdGF0ZS0+ZHJfcmVmX2NvdW50W2krMV0pOworICAgICAgaSsrOworICAg IH0KK30KKworLyogUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIDQtYml0IGZpZWxk IGZvciBEUjcgc3VpdGFibGUgZm9yIHdhdGNoaW5nIGEKKyAgIHJlZ2lvbiBv ZiBMRU4gYnl0ZXMgZm9yIGFjY2Vzc2VzIG9mIHR5cGUgVFlQRS4gIExFTiBp cyBhc3N1bWVkIHRvCisgICBoYXZlIHRoZSB2YWx1ZSBvZiAxLCAyLCBvciA0 LiAgKi8KKworc3RhdGljIHVuc2lnbmVkCitpMzg2X2xlbmd0aF9hbmRfcndf Yml0cyAoaW50IGxlbiwgZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBlKQor eworICB1bnNpZ25lZCBydzsKKworICBzd2l0Y2ggKHR5cGUpCisgICAgewor ICAgICAgY2FzZSBod19leGVjdXRlOgorCXJ3ID0gRFJfUldfRVhFQ1VURTsK KwlicmVhazsKKyAgICAgIGNhc2UgaHdfd3JpdGU6CisJcncgPSBEUl9SV19X UklURTsKKwlicmVhazsKKyAgICAgIGNhc2UgaHdfcmVhZDoKKwkvKiBUaGUg aTM4NiBkb2Vzbid0IHN1cHBvcnQgZGF0YS1yZWFkIHdhdGNocG9pbnRzLiAg Ki8KKyAgICAgIGNhc2UgaHdfYWNjZXNzOgorCXJ3ID0gRFJfUldfUkVBRDsK KwlicmVhazsKKyNpZiAwCisJLyogTm90IHlldCBzdXBwb3J0ZWQuICAqLwor ICAgICAgY2FzZSBod19pb19hY2Nlc3M6CisJcncgPSBEUl9SV19JT1JXOwor CWJyZWFrOworI2VuZGlmCisgICAgICBkZWZhdWx0OgorCWVycm9yICgiXAor SW52YWxpZCBoYXJkd2FyZSBicmVha3BvaW50IHR5cGUgJWQgaW4gaTM4Nl9s ZW5ndGhfYW5kX3J3X2JpdHMuXG4iLAorCQkJKGludCkgdHlwZSk7CisgICAg fQorCisgIHN3aXRjaCAobGVuKQorICAgIHsKKyAgICAgIGNhc2UgMToKKwly ZXR1cm4gKERSX0xFTl8xIHwgcncpOworICAgICAgY2FzZSAyOgorCXJldHVy biAoRFJfTEVOXzIgfCBydyk7CisgICAgICBjYXNlIDQ6CisJcmV0dXJuIChE Ul9MRU5fNCB8IHJ3KTsKKyAgICAgIGNhc2UgODoKKyAgICAgICAgaWYgKFRB UkdFVF9IQVNfRFJfTEVOXzgpCisgCSAgcmV0dXJuIChEUl9MRU5fOCB8IHJ3 KTsKKyAgICAgIGRlZmF1bHQ6CisJZXJyb3IgKCJcCitJbnZhbGlkIGhhcmR3 YXJlIGJyZWFrcG9pbnQgbGVuZ3RoICVkIGluIGkzODZfbGVuZ3RoX2FuZF9y d19iaXRzLlxuIiwgbGVuKTsKKyAgICB9Cit9CisKKy8qIEluc2VydCBhIHdh dGNocG9pbnQgYXQgYWRkcmVzcyBBRERSLCB3aGljaCBpcyBhc3N1bWVkIHRv IGJlIGFsaWduZWQKKyAgIGFjY29yZGluZyB0byB0aGUgbGVuZ3RoIG9mIHRo ZSByZWdpb24gdG8gd2F0Y2guICBMRU5fUldfQklUUyBpcyB0aGUKKyAgIHZh bHVlIG9mIHRoZSBiaXRzIGZyb20gRFI3IHdoaWNoIGRlc2NyaWJlcyB0aGUg bGVuZ3RoIGFuZCBhY2Nlc3MKKyAgIHR5cGUgb2YgdGhlIHJlZ2lvbiB0byBi ZSB3YXRjaGVkIGJ5IHRoaXMgd2F0Y2hwb2ludC4gIFJldHVybiAwIG9uCisg ICBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8KKworc3RhdGljIGludAor aTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9k ZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCUNPUkVfQUREUiBhZGRyLCB1 bnNpZ25lZCBsZW5fcndfYml0cykKK3sKKyAgaW50IGk7CisKKyAgLyogRmly c3QsIGxvb2sgZm9yIGFuIG9jY3VwaWVkIGRlYnVnIHJlZ2lzdGVyIHdpdGgg dGhlIHNhbWUgYWRkcmVzcworICAgICBhbmQgdGhlIHNhbWUgUlcgYW5kIExF TiBkZWZpbml0aW9ucy4gIElmIHdlIGZpbmQgb25lLCB3ZSBjYW4KKyAgICAg cmV1c2UgaXQgZm9yIHRoaXMgd2F0Y2hwb2ludCBhcyB3ZWxsIChhbmQgc2F2 ZSBhIHJlZ2lzdGVyKS4gICovCisgIEFMTF9ERUJVR19SRUdJU1RFUlMoaSkK KyAgICB7CisgICAgICBpZiAoIUkzODZfRFJfVkFDQU5UIChzdGF0ZSwgaSkK KwkgICYmIHN0YXRlLT5kcl9taXJyb3JbaV0gPT0gYWRkcgorCSAgJiYgSTM4 Nl9EUl9HRVRfUldfTEVOIChzdGF0ZSwgaSkgPT0gbGVuX3J3X2JpdHMpCisJ eworCSAgc3RhdGUtPmRyX3JlZl9jb3VudFtpXSsrOworCSAgcmV0dXJuIDA7 CisJfQorICAgIH0KKworICAvKiBOZXh0LCBsb29rIGZvciBhIHZhY2FudCBk ZWJ1ZyByZWdpc3Rlci4gICovCisgIEFMTF9ERUJVR19SRUdJU1RFUlMoaSkK KyAgICB7CisgICAgICBpZiAoSTM4Nl9EUl9WQUNBTlQgKHN0YXRlLCBpKSkK KwlicmVhazsKKyAgICB9CisKKyAgLyogTm8gbW9yZSBkZWJ1ZyByZWdpc3Rl cnMhICAqLworICBpZiAoaSA+PSBEUl9OQUREUikKKyAgICByZXR1cm4gLTE7 CisKKyAgLyogTm93IHNldCB1cCB0aGUgcmVnaXN0ZXIgSSB0byB3YXRjaCBv dXIgcmVnaW9uLiAgKi8KKworICAvKiBSZWNvcmQgdGhlIGluZm8gaW4gb3Vy IGxvY2FsIG1pcnJvcmVkIGFycmF5LiAgKi8KKyAgc3RhdGUtPmRyX21pcnJv cltpXSA9IGFkZHI7CisgIHN0YXRlLT5kcl9yZWZfY291bnRbaV0gPSAxOwor ICBJMzg2X0RSX1NFVF9SV19MRU4gKHN0YXRlLCBpLCBsZW5fcndfYml0cyk7 CisgIC8qIE5vdGU6IHdlIG9ubHkgZW5hYmxlIHRoZSB3YXRjaHBvaW50IGxv Y2FsbHksIGkuZS4gaW4gdGhlIGN1cnJlbnQKKyAgICAgdGFzay4gIEN1cnJl bnRseSwgbm8gaTM4NiB0YXJnZXQgYWxsb3dzIG9yIHN1cHBvcnRzIGdsb2Jh bAorICAgICB3YXRjaHBvaW50czsgaG93ZXZlciwgaWYgYW55IHRhcmdldCB3 b3VsZCB3YW50IHRoYXQgaW4gdGhlCisgICAgIGZ1dHVyZSwgR0RCIHNob3Vs ZCBwcm9iYWJseSBwcm92aWRlIGEgY29tbWFuZCB0byBjb250cm9sIHdoZXRo ZXIKKyAgICAgdG8gZW5hYmxlIHdhdGNocG9pbnRzIGdsb2JhbGx5IG9yIGxv Y2FsbHksIGFuZCB0aGUgY29kZSBiZWxvdworICAgICBzaG91bGQgdXNlIGds b2JhbCBvciBsb2NhbCBlbmFibGUgYW5kIHNsb3ctZG93biBmbGFncyBhcwor ICAgICBhcHByb3ByaWF0ZS4gICovCisgIEkzODZfRFJfTE9DQUxfRU5BQkxF IChzdGF0ZSwgaSk7CisgIHN0YXRlLT5kcl9jb250cm9sX21pcnJvciB8PSBE Ul9MT0NBTF9TTE9XRE9XTjsKKyAgc3RhdGUtPmRyX2NvbnRyb2xfbWlycm9y ICY9IEkzODZfRFJfQ09OVFJPTF9NQVNLOworCisgIC8qIEZpbmFsbHksIGFj dHVhbGx5IHBhc3MgdGhlIGluZm8gdG8gdGhlIGluZmVyaW9yLiAgKi8KKyAg aTM4Nl9kcl9sb3dfc2V0X2FkZHIgKHN0YXRlLCBpKTsKKyAgaTM4Nl9kcl9s b3dfc2V0X2NvbnRyb2wgKHN0YXRlKTsKKworICByZXR1cm4gMDsKK30KKwor LyogUmVtb3ZlIGEgd2F0Y2hwb2ludCBhdCBhZGRyZXNzIEFERFIsIHdoaWNo IGlzIGFzc3VtZWQgdG8gYmUgYWxpZ25lZAorICAgYWNjb3JkaW5nIHRvIHRo ZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB0byB3YXRjaC4gIExFTl9SV19CSVRT IGlzIHRoZQorICAgdmFsdWUgb2YgdGhlIGJpdHMgZnJvbSBEUjcgd2hpY2gg ZGVzY3JpYmVzIHRoZSBsZW5ndGggYW5kIGFjY2VzcworICAgdHlwZSBvZiB0 aGUgcmVnaW9uIHdhdGNoZWQgYnkgdGhpcyB3YXRjaHBvaW50LiAgUmV0dXJu IDAgb24KKyAgIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICAqLworCitzdGF0 aWMgaW50CitpMzg2X3JlbW92ZV9hbGlnbmVkX3dhdGNocG9pbnQgKHN0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJQ09SRV9BRERS IGFkZHIsIHVuc2lnbmVkIGxlbl9yd19iaXRzKQoreworICBpbnQgaSwgcmV0 dmFsID0gLTE7CisKKyAgQUxMX0RFQlVHX1JFR0lTVEVSUyhpKQorICAgIHsK KyAgICAgIGlmICghSTM4Nl9EUl9WQUNBTlQgKHN0YXRlLCBpKQorCSAgJiYg c3RhdGUtPmRyX21pcnJvcltpXSA9PSBhZGRyCisJICAmJiBJMzg2X0RSX0dF VF9SV19MRU4gKHN0YXRlLCBpKSA9PSBsZW5fcndfYml0cykKKwl7CisJICBp ZiAoLS1zdGF0ZS0+ZHJfcmVmX2NvdW50W2ldID09IDApIC8qIG5vIGxvbmdl ciBpbiB1c2U/ICovCisJICAgIHsKKwkgICAgICAvKiBSZXNldCBvdXIgbWly cm9yLiAgKi8KKwkgICAgICBzdGF0ZS0+ZHJfbWlycm9yW2ldID0gMDsKKwkg ICAgICBJMzg2X0RSX0RJU0FCTEUgKHN0YXRlLCBpKTsKKwkgICAgICAvKiBS ZXNldCBpdCBpbiB0aGUgaW5mZXJpb3IuICAqLworCSAgICAgIGkzODZfZHJf bG93X3NldF9jb250cm9sIChzdGF0ZSk7CisJICAgICAgaTM4Nl9kcl9sb3df c2V0X2FkZHIgKHN0YXRlLCBpKTsKKwkgICAgfQorCSAgcmV0dmFsID0gMDsK Kwl9CisgICAgfQorCisgIHJldHVybiByZXR2YWw7Cit9CisKKy8qIEluc2Vy dCBvciByZW1vdmUgYSAocG9zc2libHkgbm9uLWFsaWduZWQpIHdhdGNocG9p bnQsIG9yIGNvdW50IHRoZQorICAgbnVtYmVyIG9mIGRlYnVnIHJlZ2lzdGVy cyByZXF1aXJlZCB0byB3YXRjaCBhIHJlZ2lvbiBhdCBhZGRyZXNzCisgICBB RERSIHdob3NlIGxlbmd0aCBpcyBMRU4gZm9yIGFjY2Vzc2VzIG9mIHR5cGUg VFlQRS4gIFJldHVybiAwIG9uCisgICBzdWNjZXNzZnVsIGluc2VydGlvbiBv ciByZW1vdmFsLCBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHF1ZXJpZWQKKyAg IGFib3V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzLCBvciAtMSBvbiBmYWls dXJlLiAgSWYgV0hBVCBpcyBub3QgYQorICAgdmFsaWQgdmFsdWUsIGJvbWJz IHRocm91Z2ggaW50ZXJuYWxfZXJyb3IuICAqLworCitzdGF0aWMgaW50Citp Mzg2X2hhbmRsZV9ub25hbGlnbmVkX3dhdGNocG9pbnQgKHN0cnVjdCBpMzg2 X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJICAgaTM4Nl93cF9vcF90 IHdoYXQsIENPUkVfQUREUiBhZGRyLCBpbnQgbGVuLAorCQkJCSAgIGVudW0g dGFyZ2V0X2h3X2JwX3R5cGUgdHlwZSkKK3sKKyAgaW50IHJldHZhbCA9IDAs IHN0YXR1cyA9IDA7CisgIGludCBtYXhfd3BfbGVuID0gVEFSR0VUX0hBU19E Ul9MRU5fOCA/IDggOiA0OworCisgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZV90 cnlfYXJyYXlbOF1bOF0gPQorICB7CisgICAgezEsIDEsIDEsIDEsIDEsIDEs IDEsIDF9LAkvKiBUcnlpbmcgc2l6ZSBvbmUuICAqLworICAgIHsyLCAxLCAy LCAxLCAyLCAxLCAyLCAxfSwJLyogVHJ5aW5nIHNpemUgdHdvLiAgKi8KKyAg ICB7MiwgMSwgMiwgMSwgMiwgMSwgMiwgMX0sCS8qIFRyeWluZyBzaXplIHRo cmVlLiAgKi8KKyAgICB7NCwgMSwgMiwgMSwgNCwgMSwgMiwgMX0sCS8qIFRy eWluZyBzaXplIGZvdXIuICAqLworICAgIHs0LCAxLCAyLCAxLCA0LCAxLCAy LCAxfSwJLyogVHJ5aW5nIHNpemUgZml2ZS4gICovCisgICAgezQsIDEsIDIs IDEsIDQsIDEsIDIsIDF9LAkvKiBUcnlpbmcgc2l6ZSBzaXguICAqLworICAg IHs0LCAxLCAyLCAxLCA0LCAxLCAyLCAxfSwJLyogVHJ5aW5nIHNpemUgc2V2 ZW4uICAqLworICAgIHs4LCAxLCAyLCAxLCA0LCAxLCAyLCAxfSwJLyogVHJ5 aW5nIHNpemUgZWlnaHQuICAqLworICB9OworCisgIHdoaWxlIChsZW4gPiAw KQorICAgIHsKKyAgICAgIGludCBhbGlnbiA9IGFkZHIgJSBtYXhfd3BfbGVu OworICAgICAgLyogRm91ciAoZWlnaHQgb24gQU1ENjQpIGlzIHRoZSBtYXhp bXVtIGxlbmd0aCBhIGRlYnVnIHJlZ2lzdGVyCisJIGNhbiB3YXRjaC4gICov CisgICAgICBpbnQgdHJ5ID0gKGxlbiA+IG1heF93cF9sZW4gPyAobWF4X3dw X2xlbiAtIDEpIDogbGVuIC0gMSk7CisgICAgICBpbnQgc2l6ZSA9IHNpemVf dHJ5X2FycmF5W3RyeV1bYWxpZ25dOworCisgICAgICBpZiAod2hhdCA9PSBX UF9DT1VOVCkKKwl7CisJICAvKiBzaXplX3RyeV9hcnJheVtdIGlzIGRlZmlu ZWQgc3VjaCB0aGF0IGVhY2ggaXRlcmF0aW9uCisJICAgICB0aHJvdWdoIHRo ZSBsb29wIGlzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhbiBhZGRyZXNzIGFu ZCBhCisJICAgICBzaXplIHRoYXQgY2FuIGJlIHdhdGNoZWQgd2l0aCBhIHNp bmdsZSBkZWJ1ZyByZWdpc3Rlci4KKwkgICAgIFRodXMsIGZvciBjb3VudGlu ZyB0aGUgcmVnaXN0ZXJzIHJlcXVpcmVkIHRvIHdhdGNoIGEKKwkgICAgIHJl Z2lvbiwgd2Ugc2ltcGx5IG5lZWQgdG8gaW5jcmVtZW50IHRoZSBjb3VudCBv biBlYWNoCisJICAgICBpdGVyYXRpb24uICAqLworCSAgcmV0dmFsKys7CisJ fQorICAgICAgZWxzZQorCXsKKwkgIHVuc2lnbmVkIGxlbl9ydyA9IGkzODZf bGVuZ3RoX2FuZF9yd19iaXRzIChzaXplLCB0eXBlKTsKKworCSAgaWYgKHdo YXQgPT0gV1BfSU5TRVJUKQorCSAgICBzdGF0dXMgPSBpMzg2X2luc2VydF9h bGlnbmVkX3dhdGNocG9pbnQgKHN0YXRlLCBhZGRyLCBsZW5fcncpOworCSAg ZWxzZSBpZiAod2hhdCA9PSBXUF9SRU1PVkUpCisJICAgIHN0YXR1cyA9IGkz ODZfcmVtb3ZlX2FsaWduZWRfd2F0Y2hwb2ludCAoc3RhdGUsIGFkZHIsIGxl bl9ydyk7CisJICBlbHNlCisJICAgIGZhdGFsICgiXAorSW52YWxpZCB2YWx1 ZSAlZCBvZiBvcGVyYXRpb24gaW4gaTM4Nl9oYW5kbGVfbm9uYWxpZ25lZF93 YXRjaHBvaW50LlxuIiwKKwkJICAgKGludCkgd2hhdCk7CisKKwkgIC8qIFdl IGtlZXAgdGhlIGxvb3AgZ29pbmcgZXZlbiBhZnRlciBhIGZhaWx1cmUsIGJl Y2F1c2Ugc29tZQorCSAgICAgb2YgdGhlIG90aGVyIGFsaWduZWQgd2F0Y2hw b2ludHMgbWlnaHQgc3RpbGwgc3VjY2VlZAorCSAgICAgKGUuZy4gaWYgdGhl eSB3YXRjaCBhZGRyZXNzZXMgdGhhdCBhcmUgYWxyZWFkeSB3YXRjaGVkLAor CSAgICAgaW4gd2hpY2ggY2FzZSB3ZSBqdXN0IGluY3JlbWVudCB0aGUgcmVm ZXJlbmNlIGNvdW50cyBvZgorCSAgICAgb2NjdXBpZWQgZGVidWcgcmVnaXN0 ZXJzKS4gIElmIHdlIGJyZWFrIG91dCBvZiB0aGUgbG9vcAorCSAgICAgdG9v IGVhcmx5LCB3ZSBjb3VsZCBjYXVzZSB0aG9zZSBhZGRyZXNzZXMgd2F0Y2hl ZCBieQorCSAgICAgb3RoZXIgd2F0Y2hwb2ludHMgdG8gYmUgZGlzYWJsZWQg d2hlbiBicmVha3BvaW50LmMgcmVhY3RzCisJICAgICB0byBvdXIgZmFpbHVy ZSB0byBpbnNlcnQgdGhpcyB3YXRjaHBvaW50IGFuZCB0cmllcyB0bworCSAg ICAgcmVtb3ZlIGl0LiAgKi8KKwkgIGlmIChzdGF0dXMpCisJICAgIHJldHZh bCA9IHN0YXR1czsKKwl9CisKKyAgICAgIGFkZHIgKz0gc2l6ZTsKKyAgICAg IGxlbiAtPSBzaXplOworICAgIH0KKworICByZXR1cm4gcmV0dmFsOworfQor CisjZGVmaW5lIFpfUEFDS0VUX1dSSVRFX1dQICcyJworI2RlZmluZSBaX1BB Q0tFVF9SRUFEX1dQICczJworI2RlZmluZSBaX1BBQ0tFVF9BQ0NFU1NfV1Ag JzQnCisKK3N0YXRpYyBpbnQKK1pfcGFja2V0X3RvX2h3X3R5cGUgKGNoYXIg dHlwZSkKK3sKKyAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICBjYXNlIFpf UEFDS0VUX1dSSVRFX1dQOiAgcmV0dXJuIGh3X3dyaXRlOworICAgIGNhc2Ug Wl9QQUNLRVRfUkVBRF9XUDogICByZXR1cm4gaHdfcmVhZDsKKyAgICBjYXNl IFpfUEFDS0VUX0FDQ0VTU19XUDogcmV0dXJuIGh3X2FjY2VzczsKKyAgICBk ZWZhdWx0OgorICAgICAgZXJyb3IgKCJaX3BhY2tldF90b19od190eXBlOiBi YWQgd2F0Y2hwb2ludCB0eXBlICVjIiwgdHlwZSk7CisgICAgfQorfQorCisv KiBJbnNlcnQgYSB3YXRjaHBvaW50IHRvIHdhdGNoIGEgbWVtb3J5IHJlZ2lv biB3aGljaCBzdGFydHMgYXQKKyAgIGFkZHJlc3MgQUREUiBhbmQgd2hvc2Ug bGVuZ3RoIGlzIExFTiBieXRlcy4gIFdhdGNoIG1lbW9yeSBhY2Nlc3Nlcwor ICAgb2YgdGhlIHR5cGUgVFlQRV9GUk9NX1BBQ0tFVC4gIFJldHVybiAwIG9u IHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICAqLworCitpbnQKK2kzODZfbG93 X2luc2VydF93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3Rh dGUgKnN0YXRlLAorCQkJICAgIGNoYXIgdHlwZV9mcm9tX3BhY2tldCwgQ09S RV9BRERSIGFkZHIsIGludCBsZW4pCit7CisgIGludCByZXR2YWw7CisgIGlu dCB0eXBlID0gWl9wYWNrZXRfdG9faHdfdHlwZSAodHlwZV9mcm9tX3BhY2tl dCk7CisKKyAgaWYgKCgobGVuICE9IDEgJiYgbGVuICE9MiAmJiBsZW4gIT00 KSAmJiAhKFRBUkdFVF9IQVNfRFJfTEVOXzggJiYgbGVuID09IDgpKQorICAg ICAgfHwgYWRkciAlIGxlbiAhPSAwKQorICAgIHsKKyAgICAgIHJldHZhbCA9 IGkzODZfaGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2ludCAoc3RhdGUsIFdQ X0lOU0VSVCwKKwkJCQkJCSAgYWRkciwgbGVuLCB0eXBlKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsZW5fcncgPSBpMzg2X2xl bmd0aF9hbmRfcndfYml0cyAobGVuLCB0eXBlKTsKKworICAgICAgcmV0dmFs ID0gaTM4Nl9pbnNlcnRfYWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwgYWRk ciwgbGVuX3J3KTsKKyAgICB9CisKKyAgaWYgKG1haW50X3Nob3dfZHIpCisg ICAgaTM4Nl9zaG93X2RyIChzdGF0ZSwgImluc2VydF93YXRjaHBvaW50Iiwg YWRkciwgbGVuLCB0eXBlKTsKKworICByZXR1cm4gcmV0dmFsOworfQorCisv KiBSZW1vdmUgYSB3YXRjaHBvaW50IHRoYXQgd2F0Y2hlZCB0aGUgbWVtb3J5 IHJlZ2lvbiB3aGljaCBzdGFydHMgYXQKKyAgIGFkZHJlc3MgQUREUiwgd2hv c2UgbGVuZ3RoIGlzIExFTiBieXRlcywgYW5kIGZvciBhY2Nlc3NlcyBvZiB0 aGUKKyAgIHR5cGUgVFlQRV9GUk9NX1BBQ0tFVC4gIFJldHVybiAwIG9uIHN1 Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuICAqLworCitpbnQKK2kzODZfbG93X3Jl bW92ZV93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUg KnN0YXRlLAorCQkJICAgIGNoYXIgdHlwZV9mcm9tX3BhY2tldCwgQ09SRV9B RERSIGFkZHIsIGludCBsZW4pCit7CisgIGludCByZXR2YWw7CisgIGludCB0 eXBlID0gWl9wYWNrZXRfdG9faHdfdHlwZSAodHlwZV9mcm9tX3BhY2tldCk7 CisKKyAgaWYgKCgobGVuICE9IDEgJiYgbGVuICE9MiAmJiBsZW4gIT00KSAm JiAhKFRBUkdFVF9IQVNfRFJfTEVOXzggJiYgbGVuID09IDgpKQorICAgICAg fHwgYWRkciAlIGxlbiAhPSAwKQorICAgIHsKKyAgICAgIHJldHZhbCA9IGkz ODZfaGFuZGxlX25vbmFsaWduZWRfd2F0Y2hwb2ludCAoc3RhdGUsIFdQX1JF TU9WRSwKKwkJCQkJCSAgYWRkciwgbGVuLCB0eXBlKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsZW5fcncgPSBpMzg2X2xlbmd0 aF9hbmRfcndfYml0cyAobGVuLCB0eXBlKTsKKworICAgICAgcmV0dmFsID0g aTM4Nl9yZW1vdmVfYWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwgYWRkciwg bGVuX3J3KTsKKyAgICB9CisKKyAgaWYgKG1haW50X3Nob3dfZHIpCisgICAg aTM4Nl9zaG93X2RyIChzdGF0ZSwgInJlbW92ZV93YXRjaHBvaW50IiwgYWRk ciwgbGVuLCB0eXBlKTsKKworICByZXR1cm4gcmV0dmFsOworfQorCisvKiBS ZXR1cm4gbm9uLXplcm8gaWYgd2UgY2FuIHdhdGNoIGEgbWVtb3J5IHJlZ2lv biB0aGF0IHN0YXJ0cyBhdAorICAgYWRkcmVzcyBBRERSIGFuZCB3aG9zZSBs ZW5ndGggaXMgTEVOIGJ5dGVzLiAgKi8KKworaW50CitpMzg2X2xvd19yZWdp b25fb2tfZm9yX3dhdGNocG9pbnQgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19z dGF0ZSAqc3RhdGUsCisJCQkJICAgQ09SRV9BRERSIGFkZHIsIGludCBsZW4p Cit7CisgIGludCBucmVnczsKKworICAvKiBDb21wdXRlIGhvdyBtYW55IGFs aWduZWQgd2F0Y2hwb2ludHMgd2Ugd291bGQgbmVlZCB0byBjb3ZlciB0aGlz CisgICAgIHJlZ2lvbi4gICovCisgIG5yZWdzID0gaTM4Nl9oYW5kbGVfbm9u YWxpZ25lZF93YXRjaHBvaW50IChzdGF0ZSwgV1BfQ09VTlQsCisJCQkJCSAg ICAgYWRkciwgbGVuLCBod193cml0ZSk7CisgIHJldHVybiBucmVncyA8PSBE Ul9OQUREUiA/IDEgOiAwOworfQorCisvKiBJZiB0aGUgaW5mZXJpb3IgaGFz IHNvbWUgd2F0Y2hwb2ludCB0aGF0IHRyaWdnZXJlZCwgc2V0IHRoZQorICAg YWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggdGhhdCB3YXRjaHBvaW50IGFuZCBy ZXR1cm4gbm9uLXplcm8uICAKKyAgIE90aGVyd2lzZSwgcmV0dXJuIHplcm8u ICAqLworCitDT1JFX0FERFIKK2kzODZfbG93X3N0b3BwZWRfZGF0YV9hZGRy ZXNzIChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQorewor ICBDT1JFX0FERFIgYWRkciA9IDA7CisgIGludCBpOworCisgIC8qIEdldCBk cl9zdGF0dXNfbWlycm9yIGZvciB1c2UgYnkgSTM4Nl9EUl9XQVRDSF9ISVQu ICAqLworICBpMzg2X2RyX2xvd19nZXRfc3RhdHVzIChzdGF0ZSk7CisKKyAg QUxMX0RFQlVHX1JFR0lTVEVSUyhpKQorICAgIHsKKyAgICAgIGlmIChJMzg2 X0RSX1dBVENIX0hJVCAoc3RhdGUsIGkpCisJICAvKiBUaGlzIHNlY29uZCBj b25kaXRpb24gbWFrZXMgc3VyZSBEUmkgaXMgc2V0IHVwIGZvciBhIGRhdGEK KwkgICAgIHdhdGNocG9pbnQsIG5vdCBhIGhhcmR3YXJlIGJyZWFrcG9pbnQu ICBUaGUgcmVhc29uIGlzCisJICAgICB0aGF0IEdEQiBkb2Vzbid0IGNhbGwg dGhlIHRhcmdldF9zdG9wcGVkX2RhdGFfYWRkcmVzcworCSAgICAgbWV0aG9k IGV4Y2VwdCBmb3IgZGF0YSB3YXRjaHBvaW50cy4gIEluIG90aGVyIHdvcmRz LCBJJ20KKwkgICAgIGJlaW5nIHBhcmFub2lhYy4gICovCisJICAmJiBJMzg2 X0RSX0dFVF9SV19MRU4gKHN0YXRlLCBpKSAhPSAwKQorCXsKKwkgIGFkZHIg PSBzdGF0ZS0+ZHJfbWlycm9yW2ldOworCSAgaWYgKG1haW50X3Nob3dfZHIp CisJICAgIGkzODZfc2hvd19kciAoc3RhdGUsICJ3YXRjaHBvaW50X2hpdCIs IGFkZHIsIC0xLCBod193cml0ZSk7CisJfQorICAgIH0KKworICBpZiAobWFp bnRfc2hvd19kciAmJiBhZGRyID09IDApCisgICAgaTM4Nl9zaG93X2RyIChz dGF0ZSwgInN0b3BwZWRfZGF0YV9hZGRyIiwgMCwgMCwgaHdfd3JpdGUpOwor CisgIC8qIE5PVEU6IGdkYiB2ZXJzaW9uIGNoZWNrcyByYyAhPSAwIGhlcmUu ICAqLworICByZXR1cm4gYWRkcjsKK30KKworaW50CitpMzg2X2xvd19zdG9w cGVkX2J5X3dhdGNocG9pbnQgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0 ZSAqc3RhdGUpCit7CisgIENPUkVfQUREUiBhZGRyID0gMDsKKyAgLyogTk9U RTogZ2RiIHZlcnNpb24gcGFzc2VzIGJvb2xlYW4gZm91bmQvbm90LWZvdW5k IHJlc3VsdCBmcm9tCisgICAgIGkzODZfc3RvcHBlZF9kYXRhX2FkZHJlc3Mu ICAqLworICBhZGRyID0gaTM4Nl9sb3dfc3RvcHBlZF9kYXRhX2FkZHJlc3Mg KHN0YXRlKTsKKyAgcmV0dXJuIChhZGRyICE9IDApOworfQorDAorLyogU3Vw cG9ydCBmb3IgaC93IGJyZWFrcG9pbnRzLgorICAgVGhpcyBzdXBwb3J0IGlz IG5vdCBjdXJyZW50bHkgdXNlZCwga2VwdCBmb3IgcmVmZXJlbmNlLiAgKi8K KworLyogUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBpbmZlcmlvciBoYXMgc29t ZSBicmVhay93YXRjaHBvaW50IHRoYXQKKyAgIHRyaWdnZXJlZC4gICovCisK K2ludAoraTM4Nl9sb3dfc3RvcHBlZF9ieV9od2JwIChzdHJ1Y3QgaTM4Nl9k ZWJ1Z19yZWdfc3RhdGUgKnN0YXRlKQoreworICBpbnQgaTsKKworICAvKiBH ZXQgZHJfc3RhdHVzX21pcnJvciBmb3IgdXNlIGJ5IEkzODZfRFJfV0FUQ0hf SElULiAgKi8KKyAgaTM4Nl9kcl9sb3dfZ2V0X3N0YXR1cyAoc3RhdGUpOwor CisgIGlmIChtYWludF9zaG93X2RyKQorICAgIGkzODZfc2hvd19kciAoc3Rh dGUsICJzdG9wcGVkX2J5X2h3YnAiLCAwLCAwLCBod19leGVjdXRlKTsKKwor ICBBTExfREVCVUdfUkVHSVNURVJTKGkpCisgICAgeworICAgICAgaWYgKEkz ODZfRFJfV0FUQ0hfSElUIChzdGF0ZSwgaSkpCisJcmV0dXJuIDE7CisgICAg fQorCisgIHJldHVybiAwOworfQorCisvKiBJbnNlcnQgYSBoYXJkd2FyZS1h c3Npc3RlZCBicmVha3BvaW50IGF0IEFERFIuCisgICBSZXR1cm4gMCBvbiBz dWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8KKworaW50CitpMzg2X2xvd19p bnNlcnRfaHdfYnJlYWtwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0 YXRlICpzdGF0ZSwKKwkJCSAgICAgICBDT1JFX0FERFIgYWRkcikKK3sKKyAg dW5zaWduZWQgbGVuX3J3ID0gaTM4Nl9sZW5ndGhfYW5kX3J3X2JpdHMgKDEs IGh3X2V4ZWN1dGUpOworICBpbnQgcmV0dmFsID0gaTM4Nl9pbnNlcnRfYWxp Z25lZF93YXRjaHBvaW50IChzdGF0ZSwgYWRkciwgbGVuX3J3KTsKKworICBp ZiAobWFpbnRfc2hvd19kcikKKyAgICBpMzg2X3Nob3dfZHIgKHN0YXRlLCAi aW5zZXJ0X2h3YnAiLCBhZGRyLCAxLCBod19leGVjdXRlKTsKKworICByZXR1 cm4gcmV0dmFsOworfQorCisvKiBSZW1vdmUgYSBoYXJkd2FyZS1hc3Npc3Rl ZCBicmVha3BvaW50IGF0IEFERFIuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNz LCAtMSBvbiBmYWlsdXJlLiAgKi8KKworaW50CitpMzg2X2xvd19yZW1vdmVf aHdfYnJlYWtwb2ludCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpz dGF0ZSwKKwkJCSAgICAgICBDT1JFX0FERFIgYWRkcikKK3sKKyAgdW5zaWdu ZWQgbGVuX3J3ID0gaTM4Nl9sZW5ndGhfYW5kX3J3X2JpdHMgKDEsIGh3X2V4 ZWN1dGUpOworICBpbnQgcmV0dmFsID0gaTM4Nl9yZW1vdmVfYWxpZ25lZF93 YXRjaHBvaW50IChzdGF0ZSwgYWRkciwgbGVuX3J3KTsKKworICBpZiAobWFp bnRfc2hvd19kcikKKyAgICBpMzg2X3Nob3dfZHIgKHN0YXRlLCAicmVtb3Zl X2h3YnAiLCBhZGRyLCAxLCBod19leGVjdXRlKTsKKworICByZXR1cm4gcmV0 dmFsOworfQpJbmRleDogaTM4Ni1sb3cuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiBpMzg2LWxvdy5oCmRpZmYgLU4gaTM4Ni1sb3cuaAot LS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGkz ODYtbG93LmgJMSBKdW4gMjAwOSAyMjowMjo0MyAtMDAwMApAQCAtMCwwICsx LDEyMCBAQAorLyogTWlzYy4gbG93IGxldmVsIHN1cHBvcnQgZm9yIGkzODYu CisKKyAgIENvcHlyaWdodCAoQykgMjAwOQorICAgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdE Qi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogU3VwcG9y dCBmb3IgaGFyZHdhcmUgd2F0Y2hwb2ludHMgYW5kIGJyZWFrcG9pbnRzIHVz aW5nIHRoZSBpMzg2CisgICBkZWJ1ZyByZWdpc3RlcnMuCisKKyAgIFRoaXMg cHJvdmlkZXMgc2V2ZXJhbCBmdW5jdGlvbnMgZm9yIGluc2VydGluZyBhbmQg cmVtb3ZpbmcKKyAgIGhhcmR3YXJlLWFzc2lzdGVkIGJyZWFrcG9pbnRzIGFu ZCB3YXRjaHBvaW50cywgdGVzdGluZyBpZiBvbmUgb3IKKyAgIG1vcmUgb2Yg dGhlIHdhdGNocG9pbnRzIHRyaWdnZXJlZCBhbmQgYXQgd2hhdCBhZGRyZXNz LCBjaGVja2luZworICAgd2hldGhlciBhIGdpdmVuIHJlZ2lvbiBjYW4gYmUg d2F0Y2hlZCwgZXRjLgorCisgICBUaGUgZnVuY3Rpb25zIGJlbG93IGltcGxl bWVudCBkZWJ1ZyByZWdpc3RlcnMgc2hhcmluZyBieSByZWZlcmVuY2UKKyAg IGNvdW50cywgYW5kIGFsbG93IHRvIHdhdGNoIHJlZ2lvbnMgdXAgdG8gMTYg Ynl0ZXMgbG9uZworICAgKDMyIGJ5dGVzIG9uIDY0IGJpdCBob3N0cykuICAq LworCisKKy8qIERlYnVnIHJlZ2lzdGVycycgaW5kaWNlcy4gICovCisjZGVm aW5lIERSX0ZJUlNUQUREUiAwCisjZGVmaW5lIERSX0xBU1RBRERSICAzCisj ZGVmaW5lIERSX05BRERSICAgICA0IC8qIFRoZSBudW1iZXIgb2YgZGVidWcg YWRkcmVzcyByZWdpc3RlcnMuICAqLworI2RlZmluZSBEUl9TVEFUVVMgICAg NgorI2RlZmluZSBEUl9DT05UUk9MICAgNworCisvKiBHbG9iYWwgc3RhdGUg bmVlZGVkIHRvIHRyYWNrIGgvdyB3YXRjaHBvaW50cy4gICovCisKK3N0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZQoreworICAvKiBNaXJyb3IgdGhlIGlu ZmVyaW9yJ3MgRFJpIHJlZ2lzdGVycy4gIFdlIGtlZXAgdGhlIHN0YXR1cyBh bmQKKyAgICAgY29udHJvbCByZWdpc3RlcnMgc2VwYXJhdGVkIGJlY2F1c2Ug dGhleSBkb24ndCBob2xkIGFkZHJlc3Nlcy4gICovCisgIENPUkVfQUREUiBk cl9taXJyb3JbRFJfTkFERFJdOworICB1bnNpZ25lZCBkcl9zdGF0dXNfbWly cm9yLCBkcl9jb250cm9sX21pcnJvcjsKKworICAvKiBSZWZlcmVuY2UgY291 bnRzIGZvciBlYWNoIGRlYnVnIHJlZ2lzdGVyLiAgKi8KKyAgaW50IGRyX3Jl Zl9jb3VudFtEUl9OQUREUl07Cit9OworCisvKiBDbGVhciB0aGUgcmVmZXJl bmNlIGNvdW50cyBhbmQgZm9yZ2V0IGV2ZXJ5dGhpbmcgd2Uga25ldyBhYm91 dCBEUmkuICAqLworZXh0ZXJuIHZvaWQgaTM4Nl9sb3dfY2xlYW51cF9kcmVn cyAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSk7CisKKy8q IEluc2VydCBhIHdhdGNocG9pbnQgdG8gd2F0Y2ggYSBtZW1vcnkgcmVnaW9u IHdoaWNoIHN0YXJ0cyBhdAorICAgYWRkcmVzcyBBRERSIGFuZCB3aG9zZSBs ZW5ndGggaXMgTEVOIGJ5dGVzLiAgV2F0Y2ggbWVtb3J5IGFjY2Vzc2VzCisg ICBvZiB0aGUgdHlwZSBUWVBFX0ZST01fUEFDS0VULiAgUmV0dXJuIDAgb24g c3VjY2VzcywgLTEgb24gZmFpbHVyZS4gICovCitleHRlcm4gaW50IGkzODZf bG93X2luc2VydF93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdf c3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBjaGFyIHR5cGVfZnJvbV9wYWNr ZXQsIENPUkVfQUREUiBhZGRyLAorCQkJCSAgICAgICBpbnQgbGVuKTsKKwor LyogUmVtb3ZlIGEgd2F0Y2hwb2ludCB0aGF0IHdhdGNoZWQgdGhlIG1lbW9y eSByZWdpb24gd2hpY2ggc3RhcnRzIGF0CisgICBhZGRyZXNzIEFERFIsIHdo b3NlIGxlbmd0aCBpcyBMRU4gYnl0ZXMsIGFuZCBmb3IgYWNjZXNzZXMgb2Yg dGhlCisgICB0eXBlIFRZUEVfRlJPTV9QQUNLRVQuICBSZXR1cm4gMCBvbiBz dWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8KK2V4dGVybiBpbnQgaTM4Nl9s b3dfcmVtb3ZlX3dhdGNocG9pbnQgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19z dGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIGNoYXIgdHlwZV9mcm9tX3BhY2tl dCwgQ09SRV9BRERSIGFkZHIsCisJCQkJICAgICAgIGludCBsZW4pOworCisv KiBSZXR1cm4gbm9uLXplcm8gaWYgd2UgY2FuIHdhdGNoIGEgbWVtb3J5IHJl Z2lvbiB0aGF0IHN0YXJ0cyBhdAorICAgYWRkcmVzcyBBRERSIGFuZCB3aG9z ZSBsZW5ndGggaXMgTEVOIGJ5dGVzLiAgKi8KK2V4dGVybiBpbnQgaTM4Nl9s b3dfcmVnaW9uX29rX2Zvcl93YXRjaHBvaW50IChzdHJ1Y3QgaTM4Nl9kZWJ1 Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCQkgICAgICBDT1JFX0FERFIgYWRk ciwgaW50IGxlbik7CisKKy8qIElmIHRoZSBpbmZlcmlvciBoYXMgc29tZSBi cmVhay93YXRjaHBvaW50IHRoYXQgdHJpZ2dlcmVkLCBzZXQKKyAgIHRoZSBh ZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGJyZWFrL3dhdGNocG9pbnQg YW5kIHJldHVybgorICAgdHJ1ZS4gIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNl LiAgKi8KK2V4dGVybiBDT1JFX0FERFIgaTM4Nl9sb3dfc3RvcHBlZF9kYXRh X2FkZHJlc3MgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUp OworCitleHRlcm4gaW50IGkzODZfbG93X3N0b3BwZWRfYnlfd2F0Y2hwb2lu dCAoc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0ZSk7CisKKy8q IFJldHVybiBub24temVybyBpZiB0aGUgaW5mZXJpb3IgaGFzIHNvbWUgYnJl YWsvd2F0Y2hwb2ludCB0aGF0CisgICB0cmlnZ2VyZWQuICAqLworZXh0ZXJu IGludCBpMzg2X2xvd19zdG9wcGVkX2J5X2h3YnAgKHN0cnVjdCBpMzg2X2Rl YnVnX3JlZ19zdGF0ZSAqc3RhdGUpOworCisvKiBJbnNlcnQgYSBoYXJkd2Fy ZS1hc3Npc3RlZCBicmVha3BvaW50IGF0IEFERFIuCisgICBSZXR1cm4gMCBv biBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAgKi8KK2V4dGVybiBpbnQgaTM4 Nl9sb3dfaW5zZXJ0X2h3X2JyZWFrcG9pbnQgKHN0cnVjdCBpMzg2X2RlYnVn X3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJCSAgQ09SRV9BRERSIGFkZHIpOwor CisvKiBSZW1vdmUgYSBoYXJkd2FyZS1hc3Npc3RlZCBicmVha3BvaW50IGF0 IEFERFIuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJl LiAgKi8KK2V4dGVybiBpbnQgaTM4Nl9sb3dfcmVtb3ZlX2h3X2JyZWFrcG9p bnQgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUsCisJCQkJ CSAgQ09SRV9BRERSIGFkZHIpOworDAorLyogRWFjaCB0YXJnZXQgbmVlZHMg dG8gcHJvdmlkZSBzZXZlcmFsIGxvdy1sZXZlbCBmdW5jdGlvbnMKKyAgIHRo YXQgd2lsbCBiZSBjYWxsZWQgdG8gaW5zZXJ0IHdhdGNocG9pbnRzIGFuZCBo YXJkd2FyZSBicmVha3BvaW50cworICAgaW50byB0aGUgaW5mZXJpb3IsIHJl bW92ZSB0aGVtLCBhbmQgY2hlY2sgdGhlaXIgc3RhdHVzLiAgVGhlc2UKKyAg IGZ1bmN0aW9ucyBhcmU6CisKKyAgICAgIGkzODZfZHJfbG93X3NldF9jb250 cm9sICAtLSBzZXQgdGhlIGRlYnVnIGNvbnRyb2wgKERSNykKKwkJCQkgIHJl Z2lzdGVyIHRvIGEgZ2l2ZW4gdmFsdWUKKworICAgICAgaTM4Nl9kcl9sb3df c2V0X2FkZHIgICAgIC0tIHB1dCBhbiBhZGRyZXNzIGludG8gb25lIGRlYnVn IHJlZ2lzdGVyCisKKyAgICAgIGkzODZfZHJfbG93X2dldF9zdGF0dXMgICAt LSByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBkZWJ1ZworCQkJCSAgc3RhdHVz IChEUjYpIHJlZ2lzdGVyLgorKi8KKworLyogVXBkYXRlIHRoZSBpbmZlcmlv cidzIGRlYnVnIHJlZ2lzdGVyIFJFR05VTSBmcm9tIFNUQVRFLiAgKi8KK2V4 dGVybiB2b2lkIGkzODZfZHJfbG93X3NldF9hZGRyIChjb25zdCBzdHJ1Y3Qg aTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLAorCQkJCSAgaW50IHJlZ251 bSk7CisKKy8qIFVwZGF0ZSB0aGUgaW5mZXJpb3IncyBEUjcgZGVidWcgY29u dHJvbCByZWdpc3RlciBmcm9tIFNUQVRFLiAgKi8KK2V4dGVybiB2b2lkIGkz ODZfZHJfbG93X3NldF9jb250cm9sIChjb25zdCBzdHJ1Y3QgaTM4Nl9kZWJ1 Z19yZWdfc3RhdGUgKnN0YXRlKTsKKworLyogR2V0IHRoZSB2YWx1ZSBvZiB0 aGUgaW5mZXJpb3IncyBEUjYgZGVidWcgc3RhdHVzIHJlZ2lzdGVyCisgICBh bmQgcmVjb3JkIGl0IGluIFNUQVRFLiAgKi8KK2V4dGVybiB2b2lkIGkzODZf ZHJfbG93X2dldF9zdGF0dXMgKHN0cnVjdCBpMzg2X2RlYnVnX3JlZ19zdGF0 ZSAqc3RhdGUpOwpJbmRleDogbGludXgtbG93LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIv bGludXgtbG93LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA1CmRpZmYg LXUgLXAgLXIxLjEwNSBsaW51eC1sb3cuYwotLS0gbGludXgtbG93LmMJMjQg TWF5IDIwMDkgMTc6NDQ6MTkgLTAwMDAJMS4xMDUKKysrIGxpbnV4LWxvdy5j CTEgSnVuIDIwMDkgMjI6MDI6NDMgLTAwMDAKQEAgLTIyNCw2ICsyMjQsNyBA QCBkZWxldGVfbHdwIChzdHJ1Y3QgbHdwX2luZm8gKmx3cCkKIHsKICAgcmVt b3ZlX3RocmVhZCAoZ2V0X2x3cF90aHJlYWQgKGx3cCkpOwogICByZW1vdmVf aW5mZXJpb3IgKCZhbGxfbHdwcywgJmx3cC0+aGVhZCk7CisgIGZyZWUgKGx3 cC0+YXJjaF9wcml2YXRlKTsKICAgZnJlZSAobHdwKTsKIH0KIApAQCAtMjQy LDYgKzI0Myw5IEBAIGxpbnV4X2FkZF9wcm9jZXNzIChpbnQgcGlkLCBpbnQg YXR0YWNoZWQKICAgcHJvYyA9IGFkZF9wcm9jZXNzIChwaWQsIGF0dGFjaGVk KTsKICAgcHJvYy0+cHJpdmF0ZSA9IHhjYWxsb2MgKDEsIHNpemVvZiAoKnBy b2MtPnByaXZhdGUpKTsKIAorICBpZiAodGhlX2xvd190YXJnZXQubmV3X3By b2Nlc3MgIT0gTlVMTCkKKyAgICBwcm9jLT5wcml2YXRlLT5hcmNoX3ByaXZh dGUgPSB0aGVfbG93X3RhcmdldC5uZXdfcHJvY2VzcyAocGlkLCBhdHRhY2hl ZCk7CisKICAgcmV0dXJuIHByb2M7CiB9CiAKQEAgLTI1MSw2ICsyNTUsNyBA QCBsaW51eF9hZGRfcHJvY2VzcyAoaW50IHBpZCwgaW50IGF0dGFjaGVkCiBz dGF0aWMgdm9pZAogbGludXhfcmVtb3ZlX3Byb2Nlc3MgKHN0cnVjdCBwcm9j ZXNzX2luZm8gKnByb2Nlc3MpCiB7CisgIGZyZWUgKHByb2Nlc3MtPnByaXZh dGUtPmFyY2hfcHJpdmF0ZSk7CiAgIGZyZWUgKHByb2Nlc3MtPnByaXZhdGUp OwogICByZW1vdmVfcHJvY2VzcyAocHJvY2Vzcyk7CiB9CkBAIC0zNzYsNiAr MzgxLDkgQEAgYWRkX2x3cCAocHRpZF90IHB0aWQpCiAKICAgbHdwLT5oZWFk LmlkID0gcHRpZDsKIAorICBpZiAodGhlX2xvd190YXJnZXQubmV3X3RocmVh ZCAhPSBOVUxMKQorICAgIGx3cC0+YXJjaF9wcml2YXRlID0gdGhlX2xvd190 YXJnZXQubmV3X3RocmVhZCAocHRpZCk7CisKICAgYWRkX2luZmVyaW9yX3Rv X2xpc3QgKCZhbGxfbHdwcywgJmx3cC0+aGVhZCk7CiAKICAgcmV0dXJuIGx3 cDsKQEAgLTQ2Niw3ICs0NzQsNiBAQCBsaW51eF9hdHRhY2hfbHdwXzEgKHVu c2lnbmVkIGxvbmcgbHdwaWQsCiAgIG5ld19sd3AgPSAoc3RydWN0IGx3cF9p bmZvICopIGFkZF9sd3AgKHB0aWQpOwogICBhZGRfdGhyZWFkIChwdGlkLCBu ZXdfbHdwKTsKIAotCiAgIC8qIFdlIG5lZWQgdG8gd2FpdCBmb3IgU0lHU1RP UCBiZWZvcmUgYmVpbmcgYWJsZSB0byBtYWtlIHRoZSBuZXh0CiAgICAgIHB0 cmFjZSBjYWxsIG9uIHRoaXMgTFdQLiAgKi8KICAgbmV3X2x3cC0+bXVzdF9z ZXRfcHRyYWNlX2ZsYWdzID0gMTsKQEAgLTE3NDAsNiArMTc0Nyw5IEBAIGxp bnV4X3Jlc3VtZV9vbmVfbHdwIChzdHJ1Y3QgbHdwX2luZm8gKmwKICAgICAg ICpwX3NpZyA9IE5VTEw7CiAgICAgfQogCisgIGlmICh0aGVfbG93X3Rhcmdl dC5wcmVwYXJlX3RvX3Jlc3VtZSAhPSBOVUxMKQorICAgIHRoZV9sb3dfdGFy Z2V0LnByZXBhcmVfdG9fcmVzdW1lIChsd3ApOworCiAgIHJlZ2NhY2hlX2lu dmFsaWRhdGVfb25lICgoc3RydWN0IGluZmVyaW9yX2xpc3RfZW50cnkgKikK IAkJCSAgIGdldF9sd3BfdGhyZWFkIChsd3ApKTsKICAgZXJybm8gPSAwOwpJ bmRleDogbGludXgtbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvbGludXgtbG93Lmgs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAg bGludXgtbG93LmgKLS0tIGxpbnV4LWxvdy5oCTEyIE1heSAyMDA5IDIyOjI1 OjAwIC0wMDAwCTEuMzAKKysrIGxpbnV4LWxvdy5oCTEgSnVuIDIwMDkgMjI6 MDI6NDMgLTAwMDAKQEAgLTU2LDggKzU2LDEzIEBAIHN0cnVjdCBwcm9jZXNz X2luZm9fcHJpdmF0ZQogCiAgIC8qIENvbm5lY3Rpb24gdG8gdGhlIGxpYnRo cmVhZF9kYiBsaWJyYXJ5LiAgKi8KICAgdGRfdGhyYWdlbnRfdCAqdGhyZWFk X2FnZW50OworCisgIC8qIFRhcmdldC1zcGVjaWZpYyBhZGRpdGlvbnMuICAq LworICBzdHJ1Y3QgYXJjaF9wcm9jZXNzX2luZm8gKmFyY2hfcHJpdmF0ZTsK IH07CiAKK3N0cnVjdCBsd3BfaW5mbzsKKwogc3RydWN0IGxpbnV4X3Rhcmdl dF9vcHMKIHsKICAgLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHVwLiAg Ki8KQEAgLTk2LDEyICsxMDEsMjggQEAgc3RydWN0IGxpbnV4X3RhcmdldF9v cHMKICAgICAgSWYgRElSRUNUSU9OIGlzIDEsIHRoZW4gY29weSBmcm9tIElO RiB0byBOQVRJVkUuCiAgICAgIElmIERJUkVDVElPTiBpcyAwLCBjb3B5IGZy b20gTkFUSVZFIHRvIElORi4gICovCiAgIGludCAoKnNpZ2luZm9fZml4dXAp IChzdHJ1Y3Qgc2lnaW5mbyAqbmF0aXZlLCB2b2lkICppbmYsIGludCBkaXJl Y3Rpb24pOworCisgIC8qIEhvb2sgdG8gY2FsbCB3aGVuIGEgbmV3IHByb2Nl c3MgaXMgY3JlYXRlZCBvciBhdHRhY2hlZCB0by4KKyAgICAgSWYgdGhlIHRh cmdldCBuZWVkcyBwZXItcHJvY2VzcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMg ZGF0YSwKKyAgICAgYWxsb2NhdGUgaXQgaGVyZS4gICovCisgIHN0cnVjdCBh cmNoX3Byb2Nlc3NfaW5mbyAqICgqbmV3X3Byb2Nlc3MpIChpbnQgcGlkLCBp bnQgYXR0YWNoZWQpOworCisgIC8qIEhvb2sgdG8gY2FsbCB3aGVuIGEgbmV3 IHRocmVhZCBpcyBkZXRlY3RlZC4KKyAgICAgSWYgdGhlIHRhcmdldCBuZWVk cyBwZXItdGhyZWFkIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkYXRhLAorICAg ICBhbGxvY2F0ZSBpdCBoZXJlLiAgKi8KKyAgc3RydWN0IGFyY2hfbHdwX2lu Zm8gKiAoKm5ld190aHJlYWQpIChwdGlkX3QgcHRpZCk7CisKKyAgLyogSG9v ayB0byBjYWxsIHByaW9yIHRvIHJlc3VtaW5nIGEgdGhyZWFkLiAgKi8KKyAg dm9pZCAoKnByZXBhcmVfdG9fcmVzdW1lKSAoc3RydWN0IGx3cF9pbmZvICop OwogfTsKIAogZXh0ZXJuIHN0cnVjdCBsaW51eF90YXJnZXRfb3BzIHRoZV9s b3dfdGFyZ2V0OwogCisjZGVmaW5lIHB0aWRfb2YocHJvYykgKChwcm9jKS0+ aGVhZC5pZCkKICNkZWZpbmUgcGlkX29mKHByb2MpIHB0aWRfZ2V0X3BpZCAo KHByb2MpLT5oZWFkLmlkKQogI2RlZmluZSBsd3BpZF9vZihwcm9jKSBwdGlk X2dldF9sd3AgKChwcm9jKS0+aGVhZC5pZCkKKyNkZWZpbmUgUElER0VUKHB0 aWQpIHB0aWRfZ2V0X3BpZCAocHRpZCkKKyNkZWZpbmUgVElER0VUKHB0aWQp IHB0aWRfZ2V0X2x3cCAocHRpZCkKIAogI2RlZmluZSBnZXRfbHdwKGluZikg KChzdHJ1Y3QgbHdwX2luZm8gKikoaW5mKSkKICNkZWZpbmUgZ2V0X3RocmVh ZF9sd3AodGhyKSAoZ2V0X2x3cCAoaW5mZXJpb3JfdGFyZ2V0X2RhdGEgKHRo cikpKQpAQCAtMTcyLDYgKzE5Myw5IEBAIHN0cnVjdCBsd3BfaW5mbwogICAg ICBUSFJFQURfS05PV04gaXMgc2V0LiAgKi8KICAgdGRfdGhyaGFuZGxlX3Qg dGg7CiAjZW5kaWYKKworICAvKiBUYXJnZXQtc3BlY2lmaWMgYWRkaXRpb25z LiAgKi8KKyAgc3RydWN0IGFyY2hfbHdwX2luZm8gKmFyY2hfcHJpdmF0ZTsK IH07CiAKIGV4dGVybiBzdHJ1Y3QgaW5mZXJpb3JfbGlzdCBhbGxfbHdwczsK SW5kZXg6IGxpbnV4LXg4Ni1sb3cuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2dkYnNlcnZlci9saW51eC14 ODYtbG93LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1w IC1yMS4yIGxpbnV4LXg4Ni1sb3cuYwotLS0gbGludXgteDg2LWxvdy5jCTEz IE1heSAyMDA5IDE5OjExOjA0IC0wMDAwCTEuMgorKysgbGludXgteDg2LWxv dy5jCTEgSnVuIDIwMDkgMjI6MDI6NDMgLTAwMDAKQEAgLTE4LDEwICsxOCwx MiBAQAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LiAgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2lu Y2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgInNlcnZlci5oIgogI2luY2x1 ZGUgImxpbnV4LWxvdy5oIgogI2luY2x1ZGUgImkzODctZnAuaCIKKyNpbmNs dWRlICJpMzg2LWxvdy5oIgogCiAjaW5jbHVkZSAiZ2RiX3Byb2Nfc2Vydmlj ZS5oIgogCkBAIC01Niw2ICs1OCwyMSBAQCB2b2lkIGluaXRfcmVnaXN0ZXJz X3g4Nl82NF9saW51eCAodm9pZCk7CiAjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4 MTAwNAogI2VuZGlmCiAKKy8qIFBlci1wcm9jZXNzIGFyY2gtc3BlY2lmaWMg ZGF0YSB3ZSB3YW50IHRvIGtlZXAuICAqLworCitzdHJ1Y3QgYXJjaF9wcm9j ZXNzX2luZm8KK3sKKyAgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlIGRl YnVnX3JlZ19zdGF0ZTsKK307CisKKy8qIFBlci10aHJlYWQgYXJjaC1zcGVj aWZpYyBkYXRhIHdlIHdhbnQgdG8ga2VlcC4gICovCisKK3N0cnVjdCBhcmNo X2x3cF9pbmZvCit7CisgIC8qIE5vbi16ZXJvIGlmIG91ciBjb3B5IGRpZmZl cnMgZnJvbSB3aGF0J3MgcmVjb3JkZWQgaW4gdGhlIHRocmVhZC4gICovCisg IGludCBkZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZDsKK307CisKICNpZmRlZiBf X3g4Nl82NF9fCiAKIC8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1w dXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0IHVzZXInCkBAIC0zMTcsNiAr MzM0LDE3NCBAQCB4ODZfYnJlYWtwb2ludF9hdCAoQ09SRV9BRERSIHBjKQog ICByZXR1cm4gMDsKIH0KIAwKKy8qIFN1cHBvcnQgZm9yIGRlYnVnIHJlZ2lz dGVycy4gICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit4ODZfbGludXhf ZHJfZ2V0IChwdGlkX3QgcHRpZCwgaW50IHJlZ251bSkKK3sKKyAgaW50IHRp ZDsKKyAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworICB0aWQgPSBUSURHRVQg KHB0aWQpOworICBpZiAodGlkID09IDApCisgICAgdGlkID0gUElER0VUIChw dGlkKTsKKworICBlcnJubyA9IDA7CisgIHZhbHVlID0gcHRyYWNlIChQVFJB Q0VfUEVFS1VTRVIsIHRpZCwKKwkJICBvZmZzZXRvZiAoc3RydWN0IHVzZXIs IHVfZGVidWdyZWdbcmVnbnVtXSksIDApOworICBpZiAoZXJybm8gIT0gMCkK KyAgICBlcnJvciAoIkNvdWxkbid0IHJlYWQgZGVidWcgcmVnaXN0ZXIiKTsK KworICByZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkCit4ODZfbGlu dXhfZHJfc2V0IChwdGlkX3QgcHRpZCwgaW50IHJlZ251bSwgdW5zaWduZWQg bG9uZyB2YWx1ZSkKK3sKKyAgaW50IHRpZDsKKworICB0aWQgPSBUSURHRVQg KHB0aWQpOworICBpZiAodGlkID09IDApCisgICAgdGlkID0gUElER0VUIChw dGlkKTsKKworICBlcnJubyA9IDA7CisgIHB0cmFjZSAoUFRSQUNFX1BPS0VV U0VSLCB0aWQsCisJICBvZmZzZXRvZiAoc3RydWN0IHVzZXIsIHVfZGVidWdy ZWdbcmVnbnVtXSksIHZhbHVlKTsKKyAgaWYgKGVycm5vICE9IDApCisgICAg ZXJyb3IgKCJDb3VsZG4ndCB3cml0ZSBkZWJ1ZyByZWdpc3RlciIpOworfQor CisvKiBVcGRhdGUgdGhlIGluZmVyaW9yJ3MgZGVidWcgcmVnaXN0ZXIgUkVH TlVNIGZyb20gU1RBVEUuICAqLworCit2b2lkCitpMzg2X2RyX2xvd19zZXRf YWRkciAoY29uc3Qgc3RydWN0IGkzODZfZGVidWdfcmVnX3N0YXRlICpzdGF0 ZSwgaW50IHJlZ251bSkKK3sKKyAgc3RydWN0IGluZmVyaW9yX2xpc3RfZW50 cnkgKmxwOworICBDT1JFX0FERFIgYWRkcjsKKworICBpZiAoISAocmVnbnVt ID49IDAgJiYgcmVnbnVtIDw9IERSX0xBU1RBRERSIC0gRFJfRklSU1RBRERS KSkKKyAgICBmYXRhbCAoIkludmFsaWQgZGVidWcgcmVnaXN0ZXIgJWQiLCBy ZWdudW0pOworCisgIGFkZHIgPSBzdGF0ZS0+ZHJfbWlycm9yW3JlZ251bV07 CisKKyAgLyogPz8/IFdpbGwgbmVlZCB0d2Vha2luZyBmb3IgbXVsdGktcHJv Y2Vzcy4gICovCisgIGZvciAobHAgPSBhbGxfbHdwcy5oZWFkOyBscDsgbHAg PSBscC0+bmV4dCkKKyAgICB7CisgICAgICBzdHJ1Y3QgbHdwX2luZm8gKmx3 cCA9IChzdHJ1Y3QgbHdwX2luZm8gKikgbHA7CisKKyAgICAgIC8qIFRoZSBh Y3R1YWwgdXBkYXRlIGlzIGRvbmUgbGF0ZXIsIHdlIGp1c3QgbWFyayB0aGF0 IHRoZSByZWdpc3RlcgorCSBuZWVkcyB1cGRhdGluZy4gICovCisgICAgICBs d3AtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQgPSAx OworICAgIH0KK30KKworLyogVXBkYXRlIHRoZSBpbmZlcmlvcidzIERSNyBk ZWJ1ZyBjb250cm9sIHJlZ2lzdGVyIGZyb20gU1RBVEUuICAqLworCit2b2lk CitpMzg2X2RyX2xvd19zZXRfY29udHJvbCAoY29uc3Qgc3RydWN0IGkzODZf ZGVidWdfcmVnX3N0YXRlICpzdGF0ZSkKK3sKKyAgc3RydWN0IGluZmVyaW9y X2xpc3RfZW50cnkgKmxwOworCisgIC8qID8/PyBXaWxsIG5lZWQgdHdlYWtp bmcgZm9yIG11bHRpLXByb2Nlc3MuICAqLworICBmb3IgKGxwID0gYWxsX2x3 cHMuaGVhZDsgbHA7IGxwID0gbHAtPm5leHQpCisgICAgeworICAgICAgc3Ry dWN0IGx3cF9pbmZvICpsd3AgPSAoc3RydWN0IGx3cF9pbmZvICopIGxwOwor CisgICAgICAvKiBUaGUgYWN0dWFsIHVwZGF0ZSBpcyBkb25lIGxhdGVyLCB3 ZSBqdXN0IG1hcmsgdGhhdCB0aGUgcmVnaXN0ZXIKKwkgbmVlZHMgdXBkYXRp bmcuICAqLworICAgICAgbHdwLT5hcmNoX3ByaXZhdGUtPmRlYnVnX3JlZ2lz dGVyc19jaGFuZ2VkID0gMTsKKyAgICB9Cit9CisKKy8qIEdldCB0aGUgdmFs dWUgb2YgdGhlIERSNiBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIgZnJvbSB0aGUg aW5mZXJpb3IKKyAgIGFuZCByZWNvcmQgaXQgaW4gU1RBVEUuICAqLworCit2 b2lkCitpMzg2X2RyX2xvd19nZXRfc3RhdHVzIChzdHJ1Y3QgaTM4Nl9kZWJ1 Z19yZWdfc3RhdGUgKnN0YXRlKQoreworICBzdHJ1Y3QgbHdwX2luZm8gKmx3 cCA9IGdldF90aHJlYWRfbHdwIChjdXJyZW50X2luZmVyaW9yKTsKKyAgcHRp ZF90IHB0aWQgPSBwdGlkX29mIChsd3ApOworCisgIHN0YXRlLT5kcl9zdGF0 dXNfbWlycm9yID0geDg2X2xpbnV4X2RyX2dldCAocHRpZCwgRFJfU1RBVFVT KTsKK30KKwwKKy8qIFdhdGNocG9pbnQgc3VwcG9ydC4gICovCisKK3N0YXRp YyBpbnQKK3g4Nl9pbnNlcnRfd2F0Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JF X0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgc3RydWN0IHByb2Nlc3NfaW5m byAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcyAoKTsKKyAgcmV0dXJuIGkzODZf bG93X2luc2VydF93YXRjaHBvaW50ICgmcHJvYy0+cHJpdmF0ZS0+YXJjaF9w cml2YXRlLT5kZWJ1Z19yZWdfc3RhdGUsCisJCQkJICAgICB0eXBlLCBhZGRy LCBsZW4pOworfQorCitzdGF0aWMgaW50Cit4ODZfcmVtb3ZlX3dhdGNocG9p bnQgKGNoYXIgdHlwZSwgQ09SRV9BRERSIGFkZHIsIGludCBsZW4pCit7Cisg IHN0cnVjdCBwcm9jZXNzX2luZm8gKnByb2MgPSBjdXJyZW50X3Byb2Nlc3Mg KCk7CisgIHJldHVybiBpMzg2X2xvd19yZW1vdmVfd2F0Y2hwb2ludCAoJnBy b2MtPnByaXZhdGUtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnX3N0YXRlLAor CQkJCSAgICAgdHlwZSwgYWRkciwgbGVuKTsKK30KKworc3RhdGljIGludAor eDg2X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAodm9pZCkKK3sKKyAgc3RydWN0 IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGN1cnJlbnRfcHJvY2VzcyAoKTsKKyAg cmV0dXJuIGkzODZfbG93X3N0b3BwZWRfYnlfd2F0Y2hwb2ludCAoJnByb2Mt PnByaXZhdGUtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnX3N0YXRlKTsKK30K Kworc3RhdGljIENPUkVfQUREUgoreDg2X3N0b3BwZWRfZGF0YV9hZGRyZXNz ICh2b2lkKQoreworICBzdHJ1Y3QgcHJvY2Vzc19pbmZvICpwcm9jID0gY3Vy cmVudF9wcm9jZXNzICgpOworICByZXR1cm4gaTM4Nl9sb3dfc3RvcHBlZF9k YXRhX2FkZHJlc3MgKCZwcm9jLT5wcml2YXRlLT5hcmNoX3ByaXZhdGUtPmRl YnVnX3JlZ19zdGF0ZSk7Cit9CisMCisvKiBDYWxsZWQgd2hlbiBhIG5ldyBw cm9jZXNzIGlzIGNyZWF0ZWQuICAqLworCitzdHJ1Y3QgYXJjaF9wcm9jZXNz X2luZm8gKgoreDg2X2xpbnV4X25ld19wcm9jZXNzIChpbnQgcGlkLCBpbnQg YXR0YWNoZWQpCit7CisgIHN0cnVjdCBhcmNoX3Byb2Nlc3NfaW5mbyAqaW5m byA9IHhjYWxsb2MgKDEsIHNpemVvZiAoKmluZm8pKTsKKworICByZXR1cm4g aW5mbzsKK30KKworLyogQ2FsbGVkIHdoZW4gYSBuZXcgdGhyZWFkIGlzIGRl dGVjdGVkLiAgKi8KKworc3RhdGljIHN0cnVjdCBhcmNoX2x3cF9pbmZvICoK K3g4Nl9saW51eF9uZXdfdGhyZWFkIChwdGlkX3QgcHRpZCkKK3sKKyAgc3Ry dWN0IGFyY2hfbHdwX2luZm8gKmluZm8gPSB4Y2FsbG9jICgxLCBzaXplb2Yg KCppbmZvKSk7CisKKyAgaW5mby0+ZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQg PSAxOworCisgIHJldHVybiBpbmZvOworfQorCisvKiBDYWxsZWQgd2hlbiBy ZXN1bWluZyBhIHRocmVhZC4KKyAgIElmIHRoZSBkZWJ1ZyByZWdzIGhhdmUg Y2hhbmdlZCwgdXBkYXRlIHRoZSB0aHJlYWQncyBjb3BpZXMuICAqLworCitz dGF0aWMgdm9pZAoreDg2X2xpbnV4X3ByZXBhcmVfdG9fcmVzdW1lIChzdHJ1 Y3QgbHdwX2luZm8gKmx3cCkKK3sKKyAgaWYgKGx3cC0+YXJjaF9wcml2YXRl LT5kZWJ1Z19yZWdpc3RlcnNfY2hhbmdlZCkKKyAgICB7CisgICAgICBpbnQg aTsKKyAgICAgIHB0aWRfdCBwdGlkID0gcHRpZF9vZiAobHdwKTsKKyAgICAg IGludCBwaWQgPSBwdGlkX2dldF9waWQgKHB0aWQpOworICAgICAgc3RydWN0 IHByb2Nlc3NfaW5mbyAqcHJvYyA9IGZpbmRfcHJvY2Vzc19waWQgKHBpZCk7 CisgICAgICBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlID0g JnByb2MtPnByaXZhdGUtPmFyY2hfcHJpdmF0ZS0+ZGVidWdfcmVnX3N0YXRl OworCisgICAgICBmb3IgKGkgPSBEUl9GSVJTVEFERFI7IGkgPD0gRFJfTEFT VEFERFI7IGkrKykKKwl4ODZfbGludXhfZHJfc2V0IChwdGlkLCBpLCBzdGF0 ZS0+ZHJfbWlycm9yW2ldKTsKKworICAgICAgeDg2X2xpbnV4X2RyX3NldCAo cHRpZCwgRFJfQ09OVFJPTCwgc3RhdGUtPmRyX2NvbnRyb2xfbWlycm9yKTsK KworICAgICAgbHdwLT5hcmNoX3ByaXZhdGUtPmRlYnVnX3JlZ2lzdGVyc19j aGFuZ2VkID0gMDsKKyAgICB9Cit9CisMCiAvKiBXaGVuIEdEQlNFUlZFUiBp cyBidWlsdCBhcyBhIDY0LWJpdCBhcHBsaWNhdGlvbiBvbiBsaW51eCwgdGhl CiAgICBQVFJBQ0VfR0VUU0lHSU5GTyBkYXRhIGlzIGFsd2F5cyBwcmVzZW50 ZWQgaW4gNjQtYml0IGxheW91dC4gIFNpbmNlCiAgICBkZWJ1Z2dpbmcgYSAz Mi1iaXQgaW5mZXJpb3Igd2l0aCBhIDY0LWJpdCBHREJTRVJWRVIgc2hvdWxk IGxvb2sgdGhlIHNhbWUKQEAgLTYzMCwxMCArODE1LDEwIEBAIHN0cnVjdCBs aW51eF90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0ID0KICAgTlVMTCwKICAg MSwKICAgeDg2X2JyZWFrcG9pbnRfYXQsCi0gIE5VTEwsCi0gIE5VTEwsCi0g IE5VTEwsCi0gIE5VTEwsCisgIHg4Nl9pbnNlcnRfd2F0Y2hwb2ludCwKKyAg eDg2X3JlbW92ZV93YXRjaHBvaW50LAorICB4ODZfc3RvcHBlZF9ieV93YXRj aHBvaW50LAorICB4ODZfc3RvcHBlZF9kYXRhX2FkZHJlc3MsCiAgIC8qIGNv bGxlY3RfcHRyYWNlX3JlZ2lzdGVyL3N1cHBseV9wdHJhY2VfcmVnaXN0ZXIg YXJlIG5vdCBuZWVkZWQgaW4gdGhlCiAgICAgIG5hdGl2ZSBpMzg2IGNhc2Ug KG5vIHJlZ2lzdGVycyBzbWFsbGVyIHRoYW4gYW4geGZlciB1bml0KSwgYW5k IGFyZSBub3QKICAgICAgdXNlZCBpbiB0aGUgYmlhcmNoIGNhc2UgKEhBVkVf TElOVVhfVVNSUkVHUyBpcyBub3QgZGVmaW5lZCkuICAqLwpAQCAtNjQxLDQg KzgyNiw3IEBAIHN0cnVjdCBsaW51eF90YXJnZXRfb3BzIHRoZV9sb3dfdGFy Z2V0ID0KICAgTlVMTCwKICAgLyogbmVlZCB0byBmaXggdXAgaTM4NiBzaWdp bmZvIGlmIGhvc3QgaXMgYW1kNjQgKi8KICAgeDg2X3NpZ2luZm9fZml4dXAs CisgIHg4Nl9saW51eF9uZXdfcHJvY2VzcywKKyAgeDg2X2xpbnV4X25ld190 aHJlYWQsCisgIHg4Nl9saW51eF9wcmVwYXJlX3RvX3Jlc3VtZQogfTsKSW5k ZXg6IHNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3NlcnZlci5oLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjU4CmRpZmYgLXUgLXAgLXIxLjU4IHNlcnZlci5o Ci0tLSBzZXJ2ZXIuaAkyNCBNYXkgMjAwOSAyMTowNjo1MyAtMDAwMAkxLjU4 CisrKyBzZXJ2ZXIuaAkxIEp1biAyMDA5IDIyOjAyOjQzIC0wMDAwCkBAIC00 MDcsNiArNDA3LDcgQEAgdm9pZCBwZXJyb3Jfd2l0aF9uYW1lIChjb25zdCBj aGFyICpzdHJpbgogdm9pZCBlcnJvciAoY29uc3QgY2hhciAqc3RyaW5nLC4u LikgQVRUUl9OT1JFVFVSTiBBVFRSX0ZPUk1BVCAocHJpbnRmLCAxLCAyKTsK IHZvaWQgZmF0YWwgKGNvbnN0IGNoYXIgKnN0cmluZywuLi4pIEFUVFJfTk9S RVRVUk4gQVRUUl9GT1JNQVQgKHByaW50ZiwgMSwgMik7CiB2b2lkIHdhcm5p bmcgKGNvbnN0IGNoYXIgKnN0cmluZywuLi4pIEFUVFJfRk9STUFUIChwcmlu dGYsIDEsIDIpOworY2hhciAqcGFkZHIgKENPUkVfQUREUiBhZGRyKTsKIAog LyogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC93cml0ZSBhdCBv bmNlLiAgVGhlIHZhbHVlIGhlcmUKICAgIGlzIGNob3NlbiB0byBmaWxsIHVw IGEgcGFja2V0ICh0aGUgaGVhZGVycyBhY2NvdW50IGZvciB0aGUgMzIpLiAg Ki8KSW5kZXg6IHV0aWxzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvdXRpbHMuYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCB1dGls cy5jCi0tLSB1dGlscy5jCTE5IEphbiAyMDA5IDAwOjE2OjQ2IC0wMDAwCTEu MTgKKysrIHV0aWxzLmMJMSBKdW4gMjAwOSAyMjowMjo0MyAtMDAwMApAQCAt MTcwLDMgKzE3MCwzNyBAQCB3YXJuaW5nIChjb25zdCBjaGFyICpzdHJpbmcs Li4uKQogICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOwogICB2YV9lbmQgKGFy Z3MpOwogfQorCisvKiB0ZW1wb3Jhcnkgc3RvcmFnZSB1c2luZyBjaXJjdWxh ciBidWZmZXIgKi8KKyNkZWZpbmUgTlVNQ0VMTFMgNAorI2RlZmluZSBDRUxM U0laRSA1MAorc3RhdGljIGNoYXIgKgorZ2V0X2NlbGwgKHZvaWQpCit7Cisg IHN0YXRpYyBjaGFyIGJ1ZltOVU1DRUxMU11bQ0VMTFNJWkVdOworICBzdGF0 aWMgaW50IGNlbGwgPSAwOworICBpZiAoKytjZWxsID49IE5VTUNFTExTKQor ICAgIGNlbGwgPSAwOworICByZXR1cm4gYnVmW2NlbGxdOworfQorCitzdGF0 aWMgaW50Cit4c25wcmludGYgKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNv bnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICB2YV9saXN0IGFyZ3M7Cisg IGludCByZXQ7CisKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIHJl dCA9IHZzbnByaW50ZiAoc3RyLCBzaXplLCBmb3JtYXQsIGFyZ3MpOworICB2 YV9lbmQgKGFyZ3MpOworCisgIHJldHVybiByZXQ7Cit9CisKK2NoYXIgKgor cGFkZHIgKENPUkVfQUREUiBhZGRyKQoreworICBjaGFyICpzdHIgPSBnZXRf Y2VsbCAoKTsKKyAgeHNucHJpbnRmIChzdHIsIENFTExTSVpFLCAiJWx4Iiwg KGxvbmcpIGFkZHIpOworICByZXR1cm4gc3RyOworfQpJbmRleDogd2luMzIt YXJtLWxvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3dpbjMyLWFybS1sb3cuYyx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjggd2luMzIt YXJtLWxvdy5jCi0tLSB3aW4zMi1hcm0tbG93LmMJMyBKYW4gMjAwOSAwNTo1 Nzo1NyAtMDAwMAkxLjgKKysrIHdpbjMyLWFybS1sb3cuYwkxIEp1biAyMDA5 IDIyOjAyOjQzIC0wMDAwCkBAIC0xMjIsNCArMTIyLDkgQEAgc3RydWN0IHdp bjMyX3RhcmdldF9vcHMgdGhlX2xvd190YXJnZXQgPQogICBOVUxMLCAvKiBz aW5nbGVfc3RlcCAqLwogICAoY29uc3QgdW5zaWduZWQgY2hhciAqKSAmYXJt X3dpbmNlX2JyZWFrcG9pbnQsCiAgIGFybV93aW5jZV9icmVha3BvaW50X2xl biwKKyAgLyogV2F0Y2hwb2ludCByZWxhdGVkIGZ1bmN0aW9ucy4gIFNlZSB0 YXJnZXQuaCBmb3IgY29tbWVudHMuICAqLworICBOVUxMLCAvKiBpbnNlcnRf d2F0Y2hwb2ludCAqLworICBOVUxMLCAvKiByZW1vdmVfd2F0Y2hwb2ludCAq LworICBOVUxMLCAvKiBzdG9wcGVkX2J5X3dhdGNocG9pbnQgKi8KKyAgTlVM TCAgLyogc3RvcHBlZF9kYXRhX2FkZHJlc3MgKi8KIH07CkluZGV4OiB3aW4z Mi1pMzg2LWxvdy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3dpbjMyLWkzODYtbG93LmMs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQg d2luMzItaTM4Ni1sb3cuYwotLS0gd2luMzItaTM4Ni1sb3cuYwkzIEphbiAy MDA5IDA1OjU3OjU3IC0wMDAwCTEuMTQKKysrIHdpbjMyLWkzODYtbG93LmMJ MSBKdW4gMjAwOSAyMjowMjo0MyAtMDAwMApAQCAtMTcsNiArMTcsNyBAQAog CiAjaW5jbHVkZSAic2VydmVyLmgiCiAjaW5jbHVkZSAid2luMzItbG93Lmgi CisjaW5jbHVkZSAiaTM4Ni1sb3cuaCIKIAogI2RlZmluZSBGQ1NfUkVHTlVN IDI3CiAjZGVmaW5lIEZPUF9SRUdOVU0gMzEKQEAgLTI2LDE1ICsyNyw4MCBA QAogLyogRGVmaW5lZCBpbiBhdXRvLWdlbmVyYXRlZCBmaWxlIHJlZy1pMzg2 LmMuICAqLwogdm9pZCBpbml0X3JlZ2lzdGVyc19pMzg2ICh2b2lkKTsKIAot c3RhdGljIHVuc2lnbmVkIGRyWzhdOworc3RhdGljIHN0cnVjdCBpMzg2X2Rl YnVnX3JlZ19zdGF0ZSBkZWJ1Z19yZWdfc3RhdGU7CiAKIHN0YXRpYyBpbnQg ZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQgPSAwOwogc3RhdGljIGludCBkZWJ1 Z19yZWdpc3RlcnNfdXNlZCA9IDA7CiAKKy8qIFVwZGF0ZSB0aGUgaW5mZXJp b3IncyBkZWJ1ZyByZWdpc3RlciBSRUdOVU0gZnJvbSBTVEFURS4gICovCisK K3ZvaWQKK2kzODZfZHJfbG93X3NldF9hZGRyIChjb25zdCBzdHJ1Y3QgaTM4 Nl9kZWJ1Z19yZWdfc3RhdGUgKnN0YXRlLCBpbnQgcmVnbnVtKQoreworICBp ZiAoISAocmVnbnVtID49IDAgJiYgcmVnbnVtIDw9IERSX0xBU1RBRERSIC0g RFJfRklSU1RBRERSKSkKKyAgICBmYXRhbCAoIkludmFsaWQgZGVidWcgcmVn aXN0ZXIgJWQiLCByZWdudW0pOworCisgIC8qIGRlYnVnX3JlZ19zdGF0ZS5k cl9taXJyb3IgaXMgYWxyZWFkeSBzZXQuCisgICAgIEp1c3Qgbm90aWZ5IGkz ODZfc2V0X3RocmVhZF9jb250ZXh0LCBpMzg2X3RocmVhZF9hZGRlZAorICAg ICB0aGF0IHRoZSByZWdpc3RlcnMgbmVlZCB0byBiZSB1cGRhdGVkLiAgKi8K KyAgZGVidWdfcmVnaXN0ZXJzX2NoYW5nZWQgPSAxOworICBkZWJ1Z19yZWdp c3RlcnNfdXNlZCA9IDE7Cit9CisKKy8qIFVwZGF0ZSB0aGUgaW5mZXJpb3In cyBEUjcgZGVidWcgY29udHJvbCByZWdpc3RlciBmcm9tIFNUQVRFLiAgKi8K Kwordm9pZAoraTM4Nl9kcl9sb3dfc2V0X2NvbnRyb2wgKGNvbnN0IHN0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUpCit7CisgIC8qIGRlYnVn X3JlZ19zdGF0ZS5kcl9jb250cm9sX21pcnJvciBpcyBhbHJlYWR5IHNldC4K KyAgICAgSnVzdCBub3RpZnkgaTM4Nl9zZXRfdGhyZWFkX2NvbnRleHQsIGkz ODZfdGhyZWFkX2FkZGVkCisgICAgIHRoYXQgdGhlIHJlZ2lzdGVycyBuZWVk IHRvIGJlIHVwZGF0ZWQuICAqLworICBkZWJ1Z19yZWdpc3RlcnNfY2hhbmdl ZCA9IDE7CisgIGRlYnVnX3JlZ2lzdGVyc191c2VkID0gMTsKK30KKworLyog R2V0IHRoZSB2YWx1ZSBvZiB0aGUgRFI2IGRlYnVnIHN0YXR1cyByZWdpc3Rl ciBmcm9tIHRoZSBpbmZlcmlvcgorICAgYW5kIHJlY29yZCBpdCBpbiBTVEFU RS4gICovCisKK3ZvaWQKK2kzODZfZHJfbG93X2dldF9zdGF0dXMgKHN0cnVj dCBpMzg2X2RlYnVnX3JlZ19zdGF0ZSAqc3RhdGUpCit7CisgIC8qIFdlIGRv bid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZSwgdGhlIGxhc3QgY2FsbCB0 byB0aHJlYWRfcmVjIGZvcgorICAgICBjdXJyZW50X2V2ZW50LmR3VGhyZWFk SWQgaWQgaGFzIGFscmVhZHkgc2V0IGl0LiAgKi8KK30KKworLyogV2F0Y2hw b2ludCBzdXBwb3J0LiAgKi8KKworc3RhdGljIGludAoraTM4Nl9pbnNlcnRf d2F0Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxl bikKK3sKKyAgcmV0dXJuIGkzODZfbG93X2luc2VydF93YXRjaHBvaW50ICgm ZGVidWdfcmVnX3N0YXRlLAorCQkJCSAgICAgdHlwZSwgYWRkciwgbGVuKTsK K30KKworc3RhdGljIGludAoraTM4Nl9yZW1vdmVfd2F0Y2hwb2ludCAoY2hh ciB0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgcmV0dXJu IGkzODZfbG93X3JlbW92ZV93YXRjaHBvaW50ICgmZGVidWdfcmVnX3N0YXRl LAorCQkJCSAgICAgdHlwZSwgYWRkciwgbGVuKTsKK30KKworc3RhdGljIGlu dAoraTM4Nl9zdG9wcGVkX2J5X3dhdGNocG9pbnQgKHZvaWQpCit7CisgIHJl dHVybiBpMzg2X2xvd19zdG9wcGVkX2J5X3dhdGNocG9pbnQgKCZkZWJ1Z19y ZWdfc3RhdGUpOworfQorCitzdGF0aWMgQ09SRV9BRERSCitpMzg2X3N0b3Bw ZWRfZGF0YV9hZGRyZXNzICh2b2lkKQoreworICByZXR1cm4gaTM4Nl9sb3df c3RvcHBlZF9kYXRhX2FkZHJlc3MgKCZkZWJ1Z19yZWdfc3RhdGUpOworfQor CiBzdGF0aWMgdm9pZAogaTM4Nl9pbml0aWFsX3N0dWZmICh2b2lkKQogewot ICBtZW1zZXQgKCZkciwgMCwgc2l6ZW9mIChkcikpOworICBtZW1zZXQgKCZk ZWJ1Z19yZWdfc3RhdGUsIDAsIHNpemVvZiAoZGVidWdfcmVnX3N0YXRlKSk7 CiAgIGRlYnVnX3JlZ2lzdGVyc19jaGFuZ2VkID0gMDsKICAgZGVidWdfcmVn aXN0ZXJzX3VzZWQgPSAwOwogfQpAQCAtNTUsMTIgKzEyMSwxMyBAQCBpMzg2 X2dldF90aHJlYWRfY29udGV4dCAod2luMzJfdGhyZWFkX2luCiAgIGlmICh0 aC0+dGlkID09IGN1cnJlbnRfZXZlbnQtPmR3VGhyZWFkSWQpCiAgICAgewog ICAgICAgLyogQ29weSBkciB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCB0aHJl YWQuICAqLwotICAgICAgZHJbMF0gPSB0aC0+Y29udGV4dC5EcjA7Ci0gICAg ICBkclsxXSA9IHRoLT5jb250ZXh0LkRyMTsKLSAgICAgIGRyWzJdID0gdGgt PmNvbnRleHQuRHIyOwotICAgICAgZHJbM10gPSB0aC0+Y29udGV4dC5EcjM7 Ci0gICAgICBkcls2XSA9IHRoLT5jb250ZXh0LkRyNjsKLSAgICAgIGRyWzdd ID0gdGgtPmNvbnRleHQuRHI3OworICAgICAgc3RydWN0IGkzODZfZGVidWdf cmVnX3N0YXRlICpkciA9ICZkZWJ1Z19yZWdfc3RhdGU7CisgICAgICBkci0+ ZHJfbWlycm9yWzBdID0gdGgtPmNvbnRleHQuRHIwOworICAgICAgZHItPmRy X21pcnJvclsxXSA9IHRoLT5jb250ZXh0LkRyMTsKKyAgICAgIGRyLT5kcl9t aXJyb3JbMl0gPSB0aC0+Y29udGV4dC5EcjI7CisgICAgICBkci0+ZHJfbWly cm9yWzNdID0gdGgtPmNvbnRleHQuRHIzOworICAgICAgZHItPmRyX3N0YXR1 c19taXJyb3IgPSB0aC0+Y29udGV4dC5EcjY7CisgICAgICBkci0+ZHJfY29u dHJvbF9taXJyb3IgPSB0aC0+Y29udGV4dC5Ecjc7CiAgICAgfQogfQogCkBA IC02OSwxMyArMTM2LDE0IEBAIGkzODZfc2V0X3RocmVhZF9jb250ZXh0ICh3 aW4zMl90aHJlYWRfaW4KIHsKICAgaWYgKGRlYnVnX3JlZ2lzdGVyc19jaGFu Z2VkKQogICAgIHsKLSAgICAgIHRoLT5jb250ZXh0LkRyMCA9IGRyWzBdOwot ICAgICAgdGgtPmNvbnRleHQuRHIxID0gZHJbMV07Ci0gICAgICB0aC0+Y29u dGV4dC5EcjIgPSBkclsyXTsKLSAgICAgIHRoLT5jb250ZXh0LkRyMyA9IGRy WzNdOwotICAgICAgLyogdGgtPmNvbnRleHQuRHI2ID0gZHJbNl07CisgICAg ICBzdHJ1Y3QgaTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKmRyID0gJmRlYnVnX3Jl Z19zdGF0ZTsKKyAgICAgIHRoLT5jb250ZXh0LkRyMCA9IGRyLT5kcl9taXJy b3JbMF07CisgICAgICB0aC0+Y29udGV4dC5EcjEgPSBkci0+ZHJfbWlycm9y WzFdOworICAgICAgdGgtPmNvbnRleHQuRHIyID0gZHItPmRyX21pcnJvclsy XTsKKyAgICAgIHRoLT5jb250ZXh0LkRyMyA9IGRyLT5kcl9taXJyb3JbM107 CisgICAgICAvKiB0aC0+Y29udGV4dC5EcjYgPSBkci0+ZHJfc3RhdHVzX21p cnJvcjsKIAkgRklYTUU6IHNob3VsZCB3ZSBzZXQgZHI2IGFsc28gPz8gKi8K LSAgICAgIHRoLT5jb250ZXh0LkRyNyA9IGRyWzddOworICAgICAgdGgtPmNv bnRleHQuRHI3ID0gZHItPmRyX2NvbnRyb2xfbWlycm9yOwogICAgIH0KIAog ICBTZXRUaHJlYWRDb250ZXh0ICh0aC0+aCwgJnRoLT5jb250ZXh0KTsKQEAg LTg3LDE2ICsxNTUsMTcgQEAgaTM4Nl90aHJlYWRfYWRkZWQgKHdpbjMyX3Ro cmVhZF9pbmZvICp0aAogICAvKiBTZXQgdGhlIGRlYnVnIHJlZ2lzdGVycyBm b3IgdGhlIG5ldyB0aHJlYWQgaWYgdGhleSBhcmUgdXNlZC4gICovCiAgIGlm IChkZWJ1Z19yZWdpc3RlcnNfdXNlZCkKICAgICB7CisgICAgICBzdHJ1Y3Qg aTM4Nl9kZWJ1Z19yZWdfc3RhdGUgKmRyID0gJmRlYnVnX3JlZ19zdGF0ZTsK ICAgICAgIHRoLT5jb250ZXh0LkNvbnRleHRGbGFncyA9IENPTlRFWFRfREVC VUdfUkVHSVNURVJTOwogICAgICAgR2V0VGhyZWFkQ29udGV4dCAodGgtPmgs ICZ0aC0+Y29udGV4dCk7CiAKLSAgICAgIHRoLT5jb250ZXh0LkRyMCA9IGRy WzBdOwotICAgICAgdGgtPmNvbnRleHQuRHIxID0gZHJbMV07Ci0gICAgICB0 aC0+Y29udGV4dC5EcjIgPSBkclsyXTsKLSAgICAgIHRoLT5jb250ZXh0LkRy MyA9IGRyWzNdOwotICAgICAgLyogdGgtPmNvbnRleHQuRHI2ID0gZHJbNl07 CisgICAgICB0aC0+Y29udGV4dC5EcjAgPSBkci0+ZHJfbWlycm9yWzBdOwor ICAgICAgdGgtPmNvbnRleHQuRHIxID0gZHItPmRyX21pcnJvclsxXTsKKyAg ICAgIHRoLT5jb250ZXh0LkRyMiA9IGRyLT5kcl9taXJyb3JbMl07CisgICAg ICB0aC0+Y29udGV4dC5EcjMgPSBkci0+ZHJfbWlycm9yWzNdOworICAgICAg LyogdGgtPmNvbnRleHQuRHI2ID0gZHItPmRyX3N0YXR1c19taXJyb3I7CiAJ IEZJWE1FOiBzaG91bGQgd2Ugc2V0IGRyNiBhbHNvID8/ICovCi0gICAgICB0 aC0+Y29udGV4dC5EcjcgPSBkcls3XTsKKyAgICAgIHRoLT5jb250ZXh0LkRy NyA9IGRyLT5kcl9jb250cm9sX21pcnJvcjsKIAogICAgICAgU2V0VGhyZWFk Q29udGV4dCAodGgtPmgsICZ0aC0+Y29udGV4dCk7CiAgICAgICB0aC0+Y29u dGV4dC5Db250ZXh0RmxhZ3MgPSAwOwpAQCAtMjA1LDQgKzI3NCw4IEBAIHN0 cnVjdCB3aW4zMl90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0ID0KICAgaTM4 Nl9zaW5nbGVfc3RlcCwKICAgTlVMTCwgLyogYnJlYWtwb2ludCAqLwogICAw LCAvKiBicmVha3BvaW50X2xlbiAqLworICBpMzg2X2luc2VydF93YXRjaHBv aW50LAorICBpMzg2X3JlbW92ZV93YXRjaHBvaW50LAorICBpMzg2X3N0b3Bw ZWRfYnlfd2F0Y2hwb2ludCwKKyAgaTM4Nl9zdG9wcGVkX2RhdGFfYWRkcmVz cwogfTsKSW5kZXg6IHdpbjMyLWxvdy5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2Ric2VydmVyL3dpbjMy LWxvdy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAg LXIxLjM1IHdpbjMyLWxvdy5jCi0tLSB3aW4zMi1sb3cuYwkxIEFwciAyMDA5 IDIyOjUwOjI0IC0wMDAwCTEuMzUKKysrIHdpbjMyLWxvdy5jCTEgSnVuIDIw MDkgMjI6MDI6NDMgLTAwMDAKQEAgLTIyOCw2ICsyMjgsNDggQEAgY2hpbGRf ZGVsZXRlX3RocmVhZCAoRFdPUkQgcGlkLCBEV09SRCB0aQogICBkZWxldGVf dGhyZWFkX2luZm8gKHRocmVhZCk7CiB9CiAKKy8qIFRoZXNlIHdhdGNocG9p bnQgcmVsYXRlZCB3cmFwcGVyIGZ1bmN0aW9ucyBzaW1wbHkgcGFzcyBvbiB0 aGUgZnVuY3Rpb24gY2FsbAorICAgaWYgdGhlIHRhcmdldCBoYXMgcmVnaXN0 ZXJlZCBhIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24uICAqLworCitzdGF0aWMg aW50Cit3aW4zMl9pbnNlcnRfd2F0Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JF X0FERFIgYWRkciwgaW50IGxlbikKK3sKKyAgaWYgKHRoZV9sb3dfdGFyZ2V0 Lmluc2VydF93YXRjaHBvaW50ICE9IE5VTEwpCisgICAgcmV0dXJuIHRoZV9s b3dfdGFyZ2V0Lmluc2VydF93YXRjaHBvaW50ICh0eXBlLCBhZGRyLCBsZW4p OworICBlbHNlCisgICAgLyogVW5zdXBwb3J0ZWQgKHNlZSB0YXJnZXQuaCku ICAqLworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit3aW4zMl9y ZW1vdmVfd2F0Y2hwb2ludCAoY2hhciB0eXBlLCBDT1JFX0FERFIgYWRkciwg aW50IGxlbikKK3sKKyAgaWYgKHRoZV9sb3dfdGFyZ2V0LnJlbW92ZV93YXRj aHBvaW50ICE9IE5VTEwpCisgICAgcmV0dXJuIHRoZV9sb3dfdGFyZ2V0LnJl bW92ZV93YXRjaHBvaW50ICh0eXBlLCBhZGRyLCBsZW4pOworICBlbHNlCisg ICAgLyogVW5zdXBwb3J0ZWQgKHNlZSB0YXJnZXQuaCkuICAqLworICAgIHJl dHVybiAxOworfQorCitzdGF0aWMgaW50Cit3aW4zMl9zdG9wcGVkX2J5X3dh dGNocG9pbnQgKHZvaWQpCit7CisgIGlmICh0aGVfbG93X3RhcmdldC5zdG9w cGVkX2J5X3dhdGNocG9pbnQgIT0gTlVMTCkKKyAgICByZXR1cm4gdGhlX2xv d190YXJnZXQuc3RvcHBlZF9ieV93YXRjaHBvaW50ICgpOworICBlbHNlCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBDT1JFX0FERFIKK3dpbjMyX3N0 b3BwZWRfZGF0YV9hZGRyZXNzICh2b2lkKQoreworICBpZiAodGhlX2xvd190 YXJnZXQuc3RvcHBlZF9kYXRhX2FkZHJlc3MgIT0gTlVMTCkKKyAgICByZXR1 cm4gdGhlX2xvd190YXJnZXQuc3RvcHBlZF9kYXRhX2FkZHJlc3MgKCk7Cisg IGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworCiAvKiBUcmFuc2ZlciBtZW1v cnkgZnJvbS90byB0aGUgZGVidWdnZWQgcHJvY2Vzcy4gICovCiBzdGF0aWMg aW50CiBjaGlsZF94ZmVyX21lbW9yeSAoQ09SRV9BRERSIG1lbWFkZHIsIGNo YXIgKm91ciwgaW50IGxlbiwKQEAgLTE2OTcsMTAgKzE3MzksMTAgQEAgc3Rh dGljIHN0cnVjdCB0YXJnZXRfb3BzIHdpbjMyX3RhcmdldF9vcAogICBOVUxM LAogICB3aW4zMl9yZXF1ZXN0X2ludGVycnVwdCwKICAgTlVMTCwKLSAgTlVM TCwKLSAgTlVMTCwKLSAgTlVMTCwKLSAgTlVMTCwKKyAgd2luMzJfaW5zZXJ0 X3dhdGNocG9pbnQsCisgIHdpbjMyX3JlbW92ZV93YXRjaHBvaW50LAorICB3 aW4zMl9zdG9wcGVkX2J5X3dhdGNocG9pbnQsCisgIHdpbjMyX3N0b3BwZWRf ZGF0YV9hZGRyZXNzLAogICBOVUxMLAogICBOVUxMLAogICBOVUxMLApJbmRl eDogd2luMzItbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJzZXJ2ZXIvd2luMzItbG93Lmgsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IHdpbjMy LWxvdy5oCi0tLSB3aW4zMi1sb3cuaAkzIEphbiAyMDA5IDA1OjU3OjU3IC0w MDAwCTEuOQorKysgd2luMzItbG93LmgJMSBKdW4gMjAwOSAyMjowMjo0MyAt MDAwMApAQCAtNzAsNiArNzAsMTMgQEAgc3RydWN0IHdpbjMyX3RhcmdldF9v cHMKIAogICBjb25zdCB1bnNpZ25lZCBjaGFyICpicmVha3BvaW50OwogICBp bnQgYnJlYWtwb2ludF9sZW47CisKKyAgLyogV2F0Y2hwb2ludCByZWxhdGVk IGZ1bmN0aW9ucy4gIFNlZSB0YXJnZXQuaCBmb3IgY29tbWVudHMuICAqLwor ICBpbnQgKCppbnNlcnRfd2F0Y2hwb2ludCkgKGNoYXIgdHlwZSwgQ09SRV9B RERSIGFkZHIsIGludCBsZW4pOworICBpbnQgKCpyZW1vdmVfd2F0Y2hwb2lu dCkgKGNoYXIgdHlwZSwgQ09SRV9BRERSIGFkZHIsIGludCBsZW4pOworICBp bnQgKCpzdG9wcGVkX2J5X3dhdGNocG9pbnQpICh2b2lkKTsKKyAgQ09SRV9B RERSICgqc3RvcHBlZF9kYXRhX2FkZHJlc3MpICh2b2lkKTsKKwogfTsKIAog ZXh0ZXJuIHN0cnVjdCB3aW4zMl90YXJnZXRfb3BzIHRoZV9sb3dfdGFyZ2V0 Owo= --0016361648b310d98c046b5f4d68--