From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: j@mremus.net Newsgroups: gmane.emacs.bugs Subject: bug#44973: Add a macOS global hotkey function Date: Tue, 29 Dec 2020 20:10:00 -0800 Message-ID: References: <874kkw9gmq.fsf@gnus.org> <87lfdrhj4e.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000f044b905b7a6aec4" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24120"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 44973@debbugs.gnu.org To: Lars Ingebrigtsen Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Dec 30 05:11:34 2020 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 1kuSpi-0005xM-Be for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 30 Dec 2020 05:11:34 +0100 Original-Received: from localhost ([::1]:57000 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kuSpg-0003aS-RN for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 29 Dec 2020 23:11:32 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kuSpC-0003aK-Fv for bug-gnu-emacs@gnu.org; Tue, 29 Dec 2020 23:11:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57389) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kuSpC-0002G9-8E for bug-gnu-emacs@gnu.org; Tue, 29 Dec 2020 23:11:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kuSpC-0006wN-2F for bug-gnu-emacs@gnu.org; Tue, 29 Dec 2020 23:11:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: j@mremus.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Dec 2020 04:11:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44973 X-GNU-PR-Package: emacs Original-Received: via spool by 44973-submit@debbugs.gnu.org id=B44973.160930142026632 (code B ref 44973); Wed, 30 Dec 2020 04:11:01 +0000 Original-Received: (at 44973) by debbugs.gnu.org; 30 Dec 2020 04:10:20 +0000 Original-Received: from localhost ([127.0.0.1]:40702 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kuSoW-0006vT-2d for submit@debbugs.gnu.org; Tue, 29 Dec 2020 23:10:20 -0500 Original-Received: from mail-oi1-f177.google.com ([209.85.167.177]:34522) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kuSoS-0006vC-Ma for 44973@debbugs.gnu.org; Tue, 29 Dec 2020 23:10:17 -0500 Original-Received: by mail-oi1-f177.google.com with SMTP id s75so17604608oih.1 for <44973@debbugs.gnu.org>; Tue, 29 Dec 2020 20:10:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mremus.net; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=aqYaQ3e6amuqZ+9oJH3/xrJ+FOIbI4kP3gjBR6uJF70=; b=bnMhQk4Y0ZyKNbMkhI6hwt/PWdKjefnLqkAamH7QClw3Q+Zaw7f34V4x9tD7S1Tcw9 vEObswHGnXbjjHtogVOvJ8a4WfbAz+PQUhl2vezRrsTYgWknxQHfgaX4XhSb+v3iM27a hVBKObQG0f/RIQxTDldwYv01Sl61MP4SPGP+/igm5LqgAk7Ar0cUdUFseLG4tebV+h60 lvjVv1CEIdc6k81sxpfK/Tjnm0GJdsVGViItCSjyMI9UqlAPaQH8OEJK5XfaTszgUmlq bHusUqHw/p/XMoVyV1AEQuHZrM/6cl3TI78X1hMpb4IHUo7nikZstLh5H4gJWRq4EDLj tpaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=aqYaQ3e6amuqZ+9oJH3/xrJ+FOIbI4kP3gjBR6uJF70=; b=aQi0xRrsJwrKMnYIzytBK94n2N+DCgrzpRV5TcOuMvaI0MpR6sZC4HQPOFx7lWCpsC zvLXOFtkc3HtjoJGwIlIjS5UlhizDmzXKs+dv1PnuZ9WdjtbLPcPw8tpZHG1Vs8tAWdT /4R+Fcj2La5UKTqUB7RhWaBVGQmuTIjTtCUXYsk2T4/esUPJgoPCcqzIFWvrmeyRSVeZ YmrVKAyU/dMR0StzaGiwRsYTL1ZVotudnm9XqJCcL2oBnOvallksjA2pJy7ue40kWwia q3imEm97yYVFbE/FbliZ1QD5PTJWtMwszULPmNgzhfn6PuBMx1hRdMh4WRuRlqoLsvp6 3BfA== X-Gm-Message-State: AOAM531WzYITeqqPv/d3t6/0lM9Uq962P+5V+++Sq5/POiEbVYU3eSMp Zk/ETsmPNZ+QIQdnAQj/TvYipkdAtj+M01DB0aBSMQ== X-Google-Smtp-Source: ABdhPJxhdYeYlPtsb8wlUZnvMmhngprY5ffE6KrHeeFPOnkRDBhF96S0oVa1Ll6tRFKe7owar3bBobNU3lbzvvsNzRY= X-Received: by 2002:a05:6808:49a:: with SMTP id z26mr4004457oid.137.1609301410977; Tue, 29 Dec 2020 20:10:10 -0800 (PST) In-Reply-To: <87lfdrhj4e.fsf@gnus.org> 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" Xref: news.gmane.io gmane.emacs.bugs:197005 Archived-At: --000000000000f044b905b7a6aec4 Content-Type: multipart/alternative; boundary="000000000000f044b805b7a6aec2" --000000000000f044b805b7a6aec2 Content-Type: text/plain; charset="UTF-8" Hi Lars, Here is the patch to bind a global hotkey in mac. As long as Emacs is set as "trusted" in macOS preferences, the user can bind a two-key hotkey of the form [modifier-key] or a single-key modifier [function key], for example (mac-bind-global-hotkey [f1] 'tetris). Binding a three-key combo is left to a future patch. The code is copied from w32-register-hot-key as much as possible. The routine intentionally does not focus the window after the hotkey is hit; the user must call a function like (x-focus-frame nil) to focus the frame. I also wanted to mention that after discovering x-focus-frame, and testing my patch and shkd more, I realized that my patch is in fact very similar to shkd in functionality. The main differences are that my patch allows hotkeys to be declared directly in emacs (which I like), and that this patch acts directly on an open window (e.g. making it easier to make a hotkey to yank into an already-open buffer). On the other hand skhd would call emacsclient, which interacts with the server, even if no frame is open, offering its own advantages. Anyways, I'll leave this patch for your consideration as to whether it's the right thing to include in emacs! P.S. I looked into what other code in emacs might be using blocks. I believe nsxwidget.m also has a block in nsxwidget_webkit_execute_script. I'm guessing it's working in our cases because we're ultimately building with the Xcode C compiler. Thanks On Sun, Dec 20, 2020 at 8:35 PM Lars Ingebrigtsen wrote: > j@mremus.net writes: > > > But no matter what I do, it always crashes the program. I think my > > first problem is not knowing how to call elisp (run_hooks, safe_call, > > etc?) correctly, but second, I suspect if this is crashing due to a > > threading issue. > > I am not at all familiar with the ns functions, but looking at the other > .m files, it looks like you should be able to just say > > call0 (intern ("some-function")); > > or something like that? (Modulo threading stuff.) > > -- > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no > --000000000000f044b805b7a6aec2 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Lars,

He= re is the patch to bind a global hotkey in mac. As long as Emacs is set as<= /div>
"trusted" in macOS preferences, the user can bind a two= -key hotkey of the
form [modifier-key] or a single-key modifier [= function key], for example
(mac-bind-global-hotkey [f1] 'tetr= is). Binding a three-key
combo is left to a future patch.=C2=A0

The code is copied from w32-register-hot-key as muc= h as possible.

The routine intentionally does not = focus the window after the hotkey is hit; the
user must call a fu= nction like (x-focus-frame nil) to focus the frame.

I also wanted to mention that after discovering x-focus-frame, and testin= g my
patch and shkd more, I realized that my patch is in fact ver= y similar to shkd in
functionality. The main differences are that= my patch allows hotkeys to be
declared directly in emacs (which = I like), and that this patch acts directly on
an open window (e.g= . making it easier to make a hotkey to yank into an
already-open = buffer). On the other hand skhd would call emacsclient, which
int= eracts with the server, even if no frame is open, offering its own
advantages.

Anyways, I'll leave this patch f= or your consideration as to whether it's the right
thing to i= nclude in emacs!

P.S. I looked into what other cod= e in emacs might be using blocks. I believe
nsxwidget.m also has = a block in nsxwidget_webkit_execute_script. I'm guessing
it&#= 39;s working in our cases because we're ultimately building with the Xc= ode C
compiler.

Thanks
=
On Sun= , Dec 20, 2020 at 8:35 PM Lars Ingebrigtsen <larsi@gnus.org> wrote:
j@mremus.net writes:

> But no matter what I do, it always crashes the program. I think my
> first problem is not knowing how to call elisp (run_hooks, safe_call,<= br> > etc?) correctly, but second, I suspect if this is crashing due to a > threading issue.

I am not at all familiar with the ns functions, but looking at the other .m files, it looks like you should be able to just say

=C2=A0 call0 (intern ("some-function"));

or something like that?=C2=A0 (Modulo threading stuff.)

--
(domestic pets only, the antidote for overdose, milk.)
=C2=A0 =C2=A0bloggy blog: http://lars.ingebrigtsen.no
--000000000000f044b805b7a6aec2-- --000000000000f044b905b7a6aec4 Content-Type: application/octet-stream; name="mac_bind_global_hotkey.diff" Content-Disposition: attachment; filename="mac_bind_global_hotkey.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjawacx60 ZGlmZiAtLWdpdCBhL2xpc3AvbG9hZHVwLmVsIGIvbGlzcC9sb2FkdXAuZWwKaW5kZXggNTY4Yjlm ZTQwZC4uZjliZTBmMzY0NSAxMDA2NDQKLS0tIGEvbGlzcC9sb2FkdXAuZWwKKysrIGIvbGlzcC9s b2FkdXAuZWwKQEAgLTMzNSw2ICszMzUsNyBAQAogICAgICAgKHdoZW4gKGZlYXR1cmVwICdjaGFy cHJvcCkKICAgICAgICAgKGxvYWQgImludGVybmF0aW9uYWwvbXVsZS11dGlsIikKICAgICAgICAg KGxvYWQgImludGVybmF0aW9uYWwvdWNzLW5vcm1hbGl6ZSIpCisgICAgICAgIChsb2FkICJucy1m bnMiKQogICAgICAgICAobG9hZCAidGVybS9ucy13aW4iKSkpKQogKGlmIChmYm91bmRwICd4LWNy ZWF0ZS1mcmFtZSkKICAgICA7OyBEbyBpdCBhZnRlciBsb2FkaW5nIHRlcm0vZm9vLXdpbi5lbCBz aW5jZSB0aGUgdmFsdWUgb2YgdGhlCmRpZmYgLS1naXQgYS9saXNwL25zLWZucy5lbCBiL2xpc3Av bnMtZm5zLmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU0YWVmYzhj YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saXNwL25zLWZucy5lbApAQCAtMCwwICsxLDQwIEBACis7 OzsgbnMtZm5zLmVsIC0tLSBMaXNwIHJvdXRpbmVzIGZvciBOZVhUL09wZW4vR05Vc3RlcC9tYWNP UyB3aW5kb3cgc3lzdGVtICAtKi0gbGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KKworOzsgQ29weXJp Z2h0IChDKSAxOTkzLTE5OTQsIDIwMDUtMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKworOzsgS2V5d29yZHM6IGludGVybmFsCis7OyBQYWNrYWdlOiBlbWFjcworCis7OyBUaGlz IGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7IEdOVSBFbWFjcyBpcyBmcmVlIHNvZnR3 YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7OyBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK Kzs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIEdOVSBFbWFj cy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKzs7Cis7 OzsgQ29tbWVudGFyeToKKworCis7OzsgQ29kZToKKyhkZWZncm91cCBucyBuaWwKKyAgIkdOVXN0 ZXAvbWFjT1Mgc3BlY2lmaWMgZmVhdHVyZXMuIgorICA6Z3JvdXAgJ2Vudmlyb25tZW50KQorCiso ZGVmdW4gbWFjLWhhbmRsZS1nbG9iYWwtaG90a2V5IChldmVudCkKKyAgIkhhbmRsZXMgZ2xvYmFs IGhvdGtleSBwcmVzc2VzLCBydW5uaW5nIEVWRU5ULgorTm90IGludGVuZGVkIHRvIGJlIGNhbGxl ZCBkaXJlY3RseSIKKyAgKGludGVyYWN0aXZlICJlIikKKworICAoYXBwbHkgKGNkciBldmVudCkp KQorCisocHJvdmlkZSAnbnMtZm5zKQorOzs7IG5zLWZucy5lbCBlbmRzIGhlcmUKZGlmZiAtLWdp dCBhL3NyYy9rZXlib2FyZC5jIGIvc3JjL2tleWJvYXJkLmMKaW5kZXggMmUwMTQzMzc5YS4uNTlh MTdkNGU0OCAxMDA2NDQKLS0tIGEvc3JjL2tleWJvYXJkLmMKKysrIGIvc3JjL2tleWJvYXJkLmMK QEAgLTYwMTAsNiArNjAxMCwxMSBAQCBtYWtlX2xpc3B5X2V2ZW50IChzdHJ1Y3QgaW5wdXRfZXZl bnQgKmV2ZW50KQogCXJldHVybiBsaXN0MiAocmVzLCBsaXN0MiAoZXZlbnQtPmZyYW1lX29yX3dp bmRvdywgbG9jYXRpb24pKTsKICAgICAgIH0KIAorI2lmZGVmIE5TX0lNUExfQ09DT0EKKyAgICAg IGNhc2UgR0xPQkFMX0hPVEtFWV9FVkVOVDoKKyAgICAgICAgICByZXR1cm4gbGlzdDIgKFFtYWNf Z2xvYmFsX2hvdGtleSwgZXZlbnQtPmFyZyk7CisjZW5kaWYKKwogICAgIGNhc2UgVVNFUl9TSUdO QUxfRVZFTlQ6CiAgICAgICAvKiBBIHVzZXIgc2lnbmFsLiAgKi8KICAgICAgIHsKQEAgLTExNzU5 LDYgKzExNzY0LDEwIEBAIHN5bXNfb2Zfa2V5Ym9hcmQgKHZvaWQpCiAgIERFRlNZTSAoUWNvbW1h bmRfZXhlY3V0ZSwgImNvbW1hbmQtZXhlY3V0ZSIpOwogICBERUZTWU0gKFFpbnRlcm5hbF9lY2hv X2tleXN0cm9rZXNfcHJlZml4LCAiaW50ZXJuYWwtZWNoby1rZXlzdHJva2VzLXByZWZpeCIpOwog CisjaWZkZWYgTlNfSU1QTF9DT0NPQQorICBERUZTWU0gKFFtYWNfZ2xvYmFsX2hvdGtleSwgIm1h Yy1nbG9iYWwtaG90a2V5Iik7CisjZW5kaWYKKwogICBhY2NlbnRfa2V5X3N5bXMgPSBRbmlsOwog ICBzdGF0aWNwcm8gKCZhY2NlbnRfa2V5X3N5bXMpOwogCkBAIC0xMjQ1OSw2ICsxMjQ2OCwxMSBA QCBrZXlzX29mX2tleWJvYXJkICh2b2lkKQogCiAgIGluaXRpYWxfZGVmaW5lX2xpc3B5X2tleSAo VnNwZWNpYWxfZXZlbnRfbWFwLCAiZGVsZXRlLWZyYW1lIiwKIAkJCSAgICAiaGFuZGxlLWRlbGV0 ZS1mcmFtZSIpOworCisjaWZkZWYgTlNfSU1QTF9DT0NPQQorICBpbml0aWFsX2RlZmluZV9saXNw eV9rZXkgKFZzcGVjaWFsX2V2ZW50X21hcCwgIm1hYy1nbG9iYWwtaG90a2V5IiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAibWFjLWhhbmRsZS1nbG9iYWwtaG90a2V5Iik7CisjZW5kaWYK ICNpZmRlZiBIQVZFX05UR1VJCiAgIGluaXRpYWxfZGVmaW5lX2xpc3B5X2tleSAoVnNwZWNpYWxf ZXZlbnRfbWFwLCAiZW5kLXNlc3Npb24iLAogCQkJICAgICJraWxsLWVtYWNzIik7CmRpZmYgLS1n aXQgYS9zcmMvbnNmbnMubSBiL3NyYy9uc2Zucy5tCmluZGV4IGM3OTU2NDk3YzQuLjdhZWI4NGU4 ODAgMTAwNjQ0Ci0tLSBhL3NyYy9uc2Zucy5tCisrKyBiL3NyYy9uc2Zucy5tCkBAIC02Nyw2ICs2 NywxNjkgQEAgVXBkYXRlZCBieSBDaHJpc3RpYW4gTGltcGFjaCAoY2hyaXNAbmljZS5jaCkKIAog ICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmZGVmIE5TX0lNUExfQ09DT0EKK2NvbnN0IGNo YXIgKmNvbnN0IGxpc3B5X3RvX21hY19mdW5jdGlvbl9rZXlzW10gPQorICB7CisgICAgInVwIiwg ImRvd24iLCAibGVmdCIsICJyaWdodCIsICAgICAgICAgIC8qIE5TVXBBcnJvd2Z1bmN0aW9uS2V5 ICAgIDB4RjcwMCAqLworICAgICJmMSIsICJmMiIsICJmMyIsICJmNCIsICJmNSIsICAgICAgICAg ICAvKiBOU0YxRnVuY3Rpb25LZXkgICAgICAgICAweEY3MDQgKi8KKyAgICAiZjYiLCAiZjciLCAi ZjgiLCAiZjkiLCAiZjEwIiwKKyAgICAiZjExIiwgImYxMiIsICJmMTMiLCAiZjE0IiwgImYxNSIs CisgICAgImYxNiIsICJmMTciLCAiZjE4IiwgImYxOSIsICJmMjAiLAorICAgICJmMjEiLCAiZjIy IiwgImYyMyIsICJmMjQiLCAiZjI1IiwKKyAgICAiZjI2IiwgImYyNyIsICJmMjgiLCAiZjI5Iiwg ImYzMCIsCisgICAgImYzMSIsICJmMzIiLCAiZjMzIiwgImYzNCIsICJmMzUiLCAgICAgIC8qIE5T RjM1RnVuY3Rpb25LZXkgICAgICAgIDB4RjcyNiAqLworICAgICJpbnNlcnQiLCAiZGVsZXRlIiwg ImhvbWUiLCAgICAgICAgICAgICAvKiBOU0luc2VydGZ1bmN0aW9uS2V5ICAgICAweEY3MjcgKi8K KyAgICAiYmVnaW4iLCAiZW5kIiwgInByaW9yIiwgIm5leHQiLAorICAgICJwcmludCIsICJzY3Jv bGwiLCAicGF1c2UiLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiBOU1N5c1JlcUZ1bmN0aW9uS2V5ICAgICAweEY3MzEgKi8KKyAgICAiYnJlYWsiLCAicmVz ZXQiLAorICAgIDAsCisgICAgIm1lbnUiLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsCisgICAgInNlbGVjdCIsICJleGVjdXRlIiwgInVuZG8iLCAicmVkbyIsCisgICAgImZp bmQiLCAiaGVscCIsICJtb2RlLWNoYW5nZSIgICAgICAgICAgIC8qIE5TTW9kZVN3aXRjaEZ1bmN0 aW9uS2V5IDB4Rjc0NyAqLworICB9OworCisvKiBMb29rdXAgdmlydHVhbCBrZXljb2RlIGZyb20g c3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiBhCisgICBub24tYXNjaWkga2V5c3Ryb2tl IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgdmlydHVhbCBrZXksIHVzaW5nCisgICBsaXNweV9mdW5j dGlvbl9rZXlzLiAgKi8KKy8qIEFkYXB0ZWQgZnJvbSB3MzJmbnMuYyAqLworc3RhdGljIHVuc2ln bmVkCitsb29rdXBfdmtfY29kZSAoY2hhciAqa2V5KQoreworICB1bnNpZ25lZCBpOworCisgIGZv ciAoaSA9IDA7IGkgPCA3MTsgaSsrKQorICAgIGlmIChsaXNweV90b19tYWNfZnVuY3Rpb25fa2V5 c1tpXQorCSYmIHN0cmNtcCAobGlzcHlfdG9fbWFjX2Z1bmN0aW9uX2tleXNbaV0sIGtleSkgPT0g MCkKKyAgICAgIHJldHVybiAoaSB8IDB4RjcwMCk7CisKKyAgLyogQWxwaGFudW1lcmljcyBtYXAg dG8gdGhlbXNlbHZlcy4gICovCisgIGlmIChrZXlbMV0gPT0gMCkKKyAgICB7CisgICAgICBpZiAo KGtleVswXSA+PSAnQScgJiYga2V5WzBdIDw9ICdaJykKKyAgICAgICAgICB8fCAoa2V5WzBdID49 ICcwJyAmJiBrZXlbMF0gPD0gJzknKSkKKyAgICAgICAgcmV0dXJuIGtleVswXTsKKyAgICAgIGlm IChrZXlbMF0gPj0gJ2EnICYmIGtleVswXSA8PSAneicpCisgICAgICAgIHJldHVybiB0b3VwcGVy KGtleVswXSk7CisgICAgfQorCisgIC8vIHRhYiwgZW50ZXIsIGFuZCBiYWNrc3BhY2UgYXJlIHNw ZWNpYWwgY2FzZXMKKyAgaWYgKHN0cmNtcCAoa2V5LCAidGFiIikgPT0gMCkKKyAgICByZXR1cm4g OTsKKyAgaWYgKHN0cmNtcCAoa2V5LCAiZW50ZXIiKSA9PSAwKQorICAgIHJldHVybiAxMzsKKyAg IGlmIChzdHJjbXAgKGtleSwgImVzY2FwZSIpID09IDApCisgICAgcmV0dXJuIDI3OworICBpZiAo c3RyY21wIChrZXksICJiYWNrc3BhY2UiKSA9PSAwKQorICAgIHJldHVybiAxMjc7CisKKyAgcmV0 dXJuIC0xOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21hY19wYXJzZV9hbmRfYWRkX2hvdGtl eSAoTGlzcF9PYmplY3Qga2V5LCBMaXNwX09iamVjdCBsaXNwZm4sIGludCBob29rKQoreworICAv KiBDb3BpZWQgZnJvbSBGZGVmaW5lX2tleSBhbmQgc3RvcmVfaW5fa2V5bWFwLiAgKi8KKyAgcmVn aXN0ZXIgTGlzcF9PYmplY3QgYzsKKyAgdW5zaWduZWQgdmtfY29kZSA9IDA7CisgIGludCBsaXNw X21vZGlmaWVycyA9IDA7CisgIE5TRXZlbnRNb2RpZmllckZsYWdzIG1hY19tb2RpZmllcnMgPSAw OworICBMaXNwX09iamVjdCByZXMgPSBRbmlsOworICBjaGFyKiB2a25hbWU7CisKKyAgQ0hFQ0tf VkVDVE9SIChrZXkpOworCisgIGlmIChBU0laRSAoa2V5KSAhPSAxKQorICAgIHJldHVybiBRbmls OworCisgIGMgPSBBUkVGIChrZXksIDApOworCisgIGlmIChDT05TUCAoYykgJiYgbHVjaWRfZXZl bnRfdHlwZV9saXN0X3AgKGMpKQorICAgIGMgPSBGZXZlbnRfY29udmVydF9saXN0IChjKTsKKwor ICBpZiAoISBGSVhOVU1QIChjKSAmJiAhIFNZTUJPTFAgKGMpKQorICAgIGVycm9yICgiS2V5IGRl ZmluaXRpb24gaXMgaW52YWxpZCIpOworCisgIGlmICghIEZVTkNUSU9OUChsaXNwZm4pKQorICAg IGVycm9yICgiSE9PSyBhcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbiIpOworCisgIC8qIFdvcmsg b3V0IHRoZSBiYXNlIGtleSBhbmQgdGhlIG1vZGlmaWVycy4gICovCisgIGlmIChTWU1CT0xQIChj KSkKKyAgICB7CisKKyAgICAgIGMgPSBwYXJzZV9tb2RpZmllcnMgKGMpOworICAgICAgbGlzcF9t b2RpZmllcnMgPSBYRklYTlVNIChGY2FyIChGY2RyIChjKSkpOworICAgICAgYyA9IEZjYXIgKGMp OworICAgICAgaWYgKCFTWU1CT0xQIChjKSkKKwllbWFjc19hYm9ydCAoKTsKKworICAgICAgdmtu YW1lID0gU1NEQVRBIChTWU1CT0xfTkFNRSAoYykpOworICAgICAgaWYgKHZrbmFtZVswXSA9PSAw KQorICAgICAgICBlcnJvcigiS2V5IGRlZmluaXRpb24gaXMgaW52YWxpZCIpOworICAgICAgZWxz ZQorICAgICAgICB2a19jb2RlID0gbG9va3VwX3ZrX2NvZGUgKHZrbmFtZSk7CisgICAgfQorICBl bHNlIGlmIChGSVhOVU1QIChjKSkKKyAgICB7CisgICAgICBsaXNwX21vZGlmaWVycyA9IFhGSVhO VU0gKGMpICYgfkNIQVJBQ1RFUkJJVFM7CisgICAgICAvKiBNYW55IGFzY2lpIGNoYXJhY3RlcnMg YXJlIHRoZWlyIG93biB2aXJ0dWFsIGtleSBjb2RlLiAgKi8KKyAgICAgIHZrX2NvZGUgPSBYRklY TlVNIChjKSAmIENIQVJBQ1RFUkJJVFM7CisgICAgfQorCisgIGlmICh2a19jb2RlIDwgMCB8fCB2 a19jb2RlID4gMHhGNzQ3KQorICAgIHJldHVybiBRbmlsOworICBlbHNlIGlmICgodmtfY29kZSA+ PSAweEY3MDApICYmICh2a19jb2RlIDw9IDB4Rjc0NykpCisgICAgbWFjX21vZGlmaWVycyA9IG1h Y19tb2RpZmllcnMgfCBOU0V2ZW50TW9kaWZpZXJGbGFnRnVuY3Rpb247CisKKyAgLyogQmluZCBr ZXkgY29tYmluYXRpb25zIGJhc2VkIG9uIG1vZGlmaWVyIG1hcHBpbmdzLiAgKi8KKyAgaWYgKCgo bGlzcF9tb2RpZmllcnMgJiBoeXBlcl9tb2RpZmllcikKKyAgICAgICAmJiBFUSAobnNfY29tbWFu ZF9tb2RpZmllciwgUWh5cGVyKSkKKyAgICAgIHx8ICgobGlzcF9tb2RpZmllcnMgJiBzdXBlcl9t b2RpZmllcikKKyAgICAgICAgICAmJiBFUSAobnNfY29tbWFuZF9tb2RpZmllciwgUXN1cGVyKSkK KyAgICAgIHx8ICgobGlzcF9tb2RpZmllcnMgJiBtZXRhX21vZGlmaWVyKQorICAgICAgICAgICYm IEVRIChuc19jb21tYW5kX21vZGlmaWVyLCBRbWV0YSkpCisgICAgICB8fCAoKGxpc3BfbW9kaWZp ZXJzICYgY3RybF9tb2RpZmllcikKKyAgICAgICAgICAmJiBFUSAobnNfY29tbWFuZF9tb2RpZmll ciwgUWNvbnRyb2wpKQorICAgICAgKQorICAgIHsKKyAgICAgIG1hY19tb2RpZmllcnMgPSBtYWNf bW9kaWZpZXJzIHwgTlNFdmVudE1vZGlmaWVyRmxhZ0NvbW1hbmQ7CisgICAgfQorCisgIGlmICgo KGxpc3BfbW9kaWZpZXJzICYgaHlwZXJfbW9kaWZpZXIpCisgICAgICAgJiYgRVEgKG5zX2FsdGVy bmF0ZV9tb2RpZmllciwgUWh5cGVyKSkKKyAgICAgIHx8ICgobGlzcF9tb2RpZmllcnMgJiBzdXBl cl9tb2RpZmllcikKKyAgICAgICAgICAmJiBFUSAobnNfYWx0ZXJuYXRlX21vZGlmaWVyLCBRc3Vw ZXIpKQorICAgICAgfHwgKChsaXNwX21vZGlmaWVycyAmIG1ldGFfbW9kaWZpZXIpCisgICAgICAg ICAgJiYgRVEgKG5zX2FsdGVybmF0ZV9tb2RpZmllciwgUW1ldGEpKQorICAgICAgfHwgKChsaXNw X21vZGlmaWVycyAmIGN0cmxfbW9kaWZpZXIpCisgICAgICAgICAgJiYgRVEgKG5zX2FsdGVybmF0 ZV9tb2RpZmllciwgUWNvbnRyb2wpKQorICAgICAgKQorICAgIHsKKyAgICAgIG1hY19tb2RpZmll cnMgPSBtYWNfbW9kaWZpZXJzIHwgTlNFdmVudE1vZGlmaWVyRmxhZ09wdGlvbjsKKyAgICB9CisK KyAgaWYgKCgobGlzcF9tb2RpZmllcnMgJiBoeXBlcl9tb2RpZmllcikKKyAgICAgICAmJiBFUSAo bnNfY29udHJvbF9tb2RpZmllciwgUWh5cGVyKSkKKyAgICAgIHx8ICgobGlzcF9tb2RpZmllcnMg JiBzdXBlcl9tb2RpZmllcikKKyAgICAgICAgICAmJiBFUSAobnNfY29udHJvbF9tb2RpZmllciwg UXN1cGVyKSkKKyAgICAgIHx8ICgobGlzcF9tb2RpZmllcnMgJiBtZXRhX21vZGlmaWVyKQorICAg ICAgICAgICYmIEVRIChuc19jb250cm9sX21vZGlmaWVyLCBRbWV0YSkpCisgICAgICB8fCAoKGxp c3BfbW9kaWZpZXJzICYgY3RybF9tb2RpZmllcikKKyAgICAgICAgICAmJiBFUSAobnNfY29udHJv bF9tb2RpZmllciwgUWNvbnRyb2wpKQorICAgICAgKQorICAgIHsKKyAgICAgIG1hY19tb2RpZmll cnMgPSBtYWNfbW9kaWZpZXJzIHwgTlNFdmVudE1vZGlmaWVyRmxhZ0NvbnRyb2w7CisgICAgfQor CisgIC8vIEJpbmQgZnVuY3Rpb24ga2V5CisgIGlmICgobWFjX21vZGlmaWVycyAmIE5TRXZlbnRN b2RpZmllckZsYWdEZXZpY2VJbmRlcGVuZGVudEZsYWdzTWFzaykgPiAwKQorICAgIG1hY19iaW5k X2tleShtYWNfbW9kaWZpZXJzLCB2a19jb2RlLCBsaXNwZm4pOworCisgIHJldHVybiBrZXk7Cit9 CisjZW5kaWYKKwogLyogTGV0IHRoZSB1c2VyIHNwZWNpZnkgYSBOZXh0c3RlcCBkaXNwbGF5IHdp dGggYSBMaXNwIG9iamVjdC4KICAgIE9CSkVDVCBtYXkgYmUgbmlsLCBhIGZyYW1lIG9yIGEgdGVy bWluYWwgb2JqZWN0LgogICAgbmlsIHN0YW5kcyBmb3IgdGhlIHNlbGVjdGVkIGZyYW1lLS1vciwg aWYgdGhhdCBpcyBub3QgYSBOZXh0c3RlcCBmcmFtZSwKQEAgLTI5ODQsNiArMzE0Nyw1NiBAQCBU aGUgcG9zaXRpb24gaXMgcmV0dXJuZWQgYXMgYSBjb25zIGNlbGwgKFggLiBZKSBvZiB0aGUKICAg cmV0dXJuIFFuaWw7CiB9CiAKKyNpZmRlZiBOU19JTVBMX0NPQ09BCitzdGF0aWMgTGlzcF9PYmpl Y3QgbWFjX3JlZ2lzdGVyZWRfaG90a2V5czsKKworREVGVU4gKCJtYWMtYmluZC1nbG9iYWwtaG90 a2V5IiwKKyAgICAgICBGbWFjX2JpbmRfZ2xvYmFsX2hvdGtleSwKKyAgICAgICBTbWFjX2JpbmRf Z2xvYmFsX2hvdGtleSwgMiwgMiwgMCwKKyAgICAgICBkb2M6IC8qIEJpbmQgS0VZIGNvbWJpbmF0 aW9uIGFzIGEgZ2xvYmFsIGhvdGtleSwgYW5kIHJ1biBIT09LIHVwb24KK2ludm9rYXRpb24uIFRo aXMgZnVuY3Rpb24gYXNzaWducyBhIGhvdGtleSB0aGF0IHdpbGwgcnVuIGFuIGVsaXNwIGZ1bmN0 aW9uCitmcm9tIGFueXdoZXJlIGluIE1hY09TIG91dHNpZGUgRW1hY3MuICBUaGUgcmV0dXJuIHZh bHVlIGlzIHQgaWYgcmVnaXN0ZXJpbmcKK3RoZSBob3RrZXkgd2FzIHN1Y2Nlc3NmdWwsIG90aGVy d2lzZSBuaWwuICAqLykKKyAoTGlzcF9PYmplY3Qga2V5LCBMaXNwX09iamVjdCBob29rKQorewor ICBpZCBoYW5kbGVyOworCisgIGtleSA9IG1hY19wYXJzZV9hbmRfYWRkX2hvdGtleSAoa2V5LCBo b29rLCAxKTsKKworICBpZiAoIU5JTFAgKGtleSkgJiYgTklMUCAoRm1lbXEgKEZjb25zKGtleSxo b29rKSwgbWFjX3JlZ2lzdGVyZWRfaG90a2V5cykpKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0 IGl0ZW0gPSBGbWVtcSAoUW5pbCwgbWFjX3JlZ2lzdGVyZWRfaG90a2V5cyk7CisKKyAgICAgIGlm IChOSUxQIChpdGVtKSkKKyAgICAgICAgbWFjX3JlZ2lzdGVyZWRfaG90a2V5cyA9IEZjb25zIChG Y29ucyhrZXksaG9vayksIG1hY19yZWdpc3RlcmVkX2hvdGtleXMpOworICAgICAgZWxzZQorICAg ICAgICBYU0VUQ0FSIChpdGVtLCBGY29ucyhrZXksaG9vaykpOworICAgIH0KKworICByZXR1cm4g a2V5OworfQorCitERUZVTiAoIm1hYy1zaG93LWJvdW5kLWhvdGtleXMiLCBGbWFjX3Nob3dfYm91 bmRfaG90a2V5cywKKyAgICAgICBTbWFjX3Nob3dfYm91bmRfaG90a2V5cywgMCwgMCwgMCwKKyAg ICAgICBkb2M6IC8qIFJldHVybiBsaXN0IG9mIHJlZ2lzdGVyZWQgaG90LWtleSBJRHMuICAqLykK KyAgKHZvaWQpCit7CisgIHJldHVybiBtYWNfcmVnaXN0ZXJlZF9ob3RrZXlzOworfQorCitERUZV TiAoIm1hYy1jbGVhci1ob3RrZXlzIiwgRm1hY19jbGVhcl9ob3RrZXlzLAorICAgICAgIFNtYWNf Y2xlYXJfaG90a2V5cywgMCwgMCwgMCwKKyAgICAgICBkb2M6IC8qIFVuYmluZCBhbGwgZ2xvYmFs IGhvdGtleXMgKi8pCisgICh2b2lkKQoreworICBtYWNfcmVnaXN0ZXJlZF9ob3RrZXlzID0gUW5p bDsKKworICBtYWNfY2xlYXJfaG90a2V5cygpOworCisgIHJldHVybiBRdDsKK30KKyNlbmRpZgor CiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgQ2xhc3MgaW1wbGVtZW50YXRpb25zCkBAIC0z MTM2LDYgKzMzNDksMTEgQEAgLSAoTGlzcF9PYmplY3QpbGlzcFN0cmluZwogICBkZWZzdWJyICgm U25zX3NldF9tb3VzZV9hYnNvbHV0ZV9waXhlbF9wb3NpdGlvbik7CiAgIGRlZnN1YnIgKCZTbnNf bW91c2VfYWJzb2x1dGVfcGl4ZWxfcG9zaXRpb24pOwogICBkZWZzdWJyICgmU25zX3Nob3dfY2hh cmFjdGVyX3BhbGV0dGUpOworI2lmZGVmIE5TX0lNUExfQ09DT0EKKyAgZGVmc3ViciAoJlNtYWNf YmluZF9nbG9iYWxfaG90a2V5KTsKKyAgZGVmc3ViciAoJlNtYWNfc2hvd19ib3VuZF9ob3RrZXlz KTsKKyAgZGVmc3ViciAoJlNtYWNfY2xlYXJfaG90a2V5cyk7CisjZW5kaWYKICAgZGVmc3ViciAo JlN4X2Rpc3BsYXlfbW1fd2lkdGgpOwogICBkZWZzdWJyICgmU3hfZGlzcGxheV9tbV9oZWlnaHQp OwogICBkZWZzdWJyICgmU3hfZGlzcGxheV9zY3JlZW5zKTsKQEAgLTMxNjAsNiArMzM3OCwxMCBA QCAtIChMaXNwX09iamVjdClsaXNwU3RyaW5nCiAgIGRlZnN1YnIgKCZTeF9zaG93X3RpcCk7CiAg IGRlZnN1YnIgKCZTeF9oaWRlX3RpcCk7CiAKKyNpZmRlZiBOU19JTVBMX0NPQ09BCisgIHN0YXRp Y3BybyAoJm1hY19yZWdpc3RlcmVkX2hvdGtleXMpOworICBtYWNfcmVnaXN0ZXJlZF9ob3RrZXlz ID0gUW5pbDsKKyNlbmRpZgogICBhc19zdGF0dXMgPSAwOwogICBhc19zY3JpcHQgPSBRbmlsOwog ICBzdGF0aWNwcm8gKCZhc19zY3JpcHQpOwpkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5oIGIvc3Jj L25zdGVybS5oCmluZGV4IGYyOTI5OTNkOGYuLmRmYWRlOTAwNGIgMTAwNjQ0Ci0tLSBhL3NyYy9u c3Rlcm0uaAorKysgYi9zcmMvbnN0ZXJtLmgKQEAgLTM3OSw2ICszNzksNyBAQCAjZGVmaW5lIE5T X0RSQVdfVE9fQlVGRkVSIDEKICNpZmRlZiBOU19JTVBMX0NPQ09BCiAgIEJPT0wgc2hvdWxkS2Vl cFJ1bm5pbmc7CiAgIEJPT0wgaXNGaXJzdDsKKyAgTlNTdGF0dXNJdGVtICp0aGVJdGVtOwogI2Vu ZGlmCiAjaWZkZWYgTlNfSU1QTF9HTlVTVEVQCiAgIEJPT0wgYXBwbGljYXRpb25EaWRGaW5pc2hM YXVuY2hpbmdDYWxsZWQ7CkBAIC0xMjMwLDYgKzEyMzEsMTEgQEAgI2RlZmluZSBOU0FQUF9EQVRB Ml9SVU5GSUxFRElBTE9HIDExCiBleHRlcm4gdm9pZCBuc19pbml0X2V2ZW50cyAoc3RydWN0IGlu cHV0X2V2ZW50ICopOwogZXh0ZXJuIHZvaWQgbnNfZmluaXNoX2V2ZW50cyAodm9pZCk7CiAKKyNp ZmRlZiBOU19JTVBMX0NPQ09BCit0eXBlZGVmIGVudW0gTlNFdmVudE1vZGlmaWVyRmxhZ3MgTlNF dmVudE1vZGlmaWVyRmxhZ3M7CitleHRlcm4gdm9pZCBtYWNfYmluZF9rZXkgKGVudW0gTlNFdmVu dE1vZGlmaWVyRmxhZ3MgbW9kaWZpZXIsIHVuc2lnbmVkIHZrZXksIExpc3BfT2JqZWN0IGxpc3Bm bik7CitleHRlcm4gdm9pZCBtYWNfY2xlYXJfaG90a2V5cyAodm9pZCk7CisjZW5kaWYKIAogI2lm ZGVmIE5TX0lNUExfR05VU1RFUAogZXh0ZXJuIGNoYXIgZ251c3RlcF9iYXNlX3ZlcnNpb25bXTsg IC8qIHZlcnNpb24gdHJhY2tpbmcgKi8KZGlmZiAtLWdpdCBhL3NyYy9uc3Rlcm0ubSBiL3NyYy9u c3Rlcm0ubQppbmRleCBmYTM4MzUwYTJmLi5jNTU2ZWIzYTA1IDEwMDY0NAotLS0gYS9zcmMvbnN0 ZXJtLm0KKysrIGIvc3JjL25zdGVybS5tCkBAIC05NzIxLDYgKzk3MjEsNTggQEAgQ29udmVydCBh biBYIGZvbnQgbmFtZSAoWExGRCkgdG8gYW4gTlMgZm9udCBuYW1lLgogICByZXR1cm4gcmV0Owog fQogCisjaWZkZWYgTlNfSU1QTF9DT0NPQQorLy8gU3RvcmUgZXZlbnQgaGFuZGxlciBldmVudCBp ZHMuCitOU011dGFibGVBcnJheSAqaG90a2V5X2lkczsKKwordm9pZAorbWFjX2JpbmRfa2V5IChO U0V2ZW50TW9kaWZpZXJGbGFncyBtb2RpZmllciwgdW5zaWduZWQgdmtleSwKKyAgICAgICAgICAg ICAgICAgICAgICAgTGlzcF9PYmplY3QgbGlzcGZuKQoreworICBpZCBoYW5kbGVyOworCisgIC8v IENoZWNrIGlmIEVtYWNzIGlzIHRydXN0ZWQuCisgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7 KF9fYnJpZGdlIGlkKSBrQVhUcnVzdGVkQ2hlY2tPcHRpb25Qcm9tcHQ6IEBZRVN9OworICBCb29s ZWFuIHRydXN0ZWQgPSBBWElzUHJvY2Vzc1RydXN0ZWRXaXRoT3B0aW9ucygoQ0ZEaWN0aW9uYXJ5 UmVmKW9wdGlvbnMpOworCisgIGlmIChob3RrZXlfaWRzID09IG5pbCkKKyAgICBob3RrZXlfaWRz ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTogMV07CisKKyAgaWYg KHRydXN0ZWQpIHsKKyAgICBoYW5kbGVyID0gW05TRXZlbnQKKyAgICAgICAgICAgICAgICBhZGRH bG9iYWxNb25pdG9yRm9yRXZlbnRzTWF0Y2hpbmdNYXNrOiAoTlNFdmVudE1hc2tLZXlEb3duKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6XihO U0V2ZW50ICpldmVudCkgeworICAgICAgICBpZiAoKGV2ZW50Lm1vZGlmaWVyRmxhZ3MgJiBOU0V2 ZW50TW9kaWZpZXJGbGFnRGV2aWNlSW5kZXBlbmRlbnRGbGFnc01hc2spID09IG1vZGlmaWVyKSB7 CisgICAgICAgICAgaWYoW1tldmVudC5jaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnMgY2FwaXRh bGl6ZWRTdHJpbmddCisgICAgICAgICAgICAgICBjaGFyYWN0ZXJBdEluZGV4OjBdID09IHZrZXkp IHsKKyAgICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZW1hY3NmcmFtZSA9IFNFTEVDVEVEX0ZSQU1F ICgpOworICAgICAgICAgICAgTlNFdmVudCAqdGhlRXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50 XTsKKworICAgICAgICAgICAgZW1hY3NfZXZlbnQtPmtpbmQgPSBHTE9CQUxfSE9US0VZX0VWRU5U OworICAgICAgICAgICAgZW1hY3NfZXZlbnQtPmFyZyA9IGxpc3BmbjsKKyAgICAgICAgICAgIEVW X1RSQUlMRVIodGhlRXZlbnQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfV07CisK KyAgICBbaG90a2V5X2lkcyBhZGRPYmplY3Q6IGhhbmRsZXJdOworICB9CisgIGVsc2UgeworICAg IGVycm9yKCJFbWFjcyBhcHAgaXNuJ3QgdHJ1c3RlZC4gRW5hYmxlIGluIHN5c3RlbSBzZXR0aW5n cy4iKTsKKyAgfQorfQorCit2b2lkCittYWNfY2xlYXJfaG90a2V5cyAodm9pZCkKK3sKKworICBm b3IgKGlkIGhvdGtleSBpbiBob3RrZXlfaWRzKSB7CisgICAgW05TRXZlbnQgcmVtb3ZlTW9uaXRv cjogaG90a2V5XTsKKyAgfQorCisgIFtob3RrZXlfaWRzIHJlbW92ZUFsbE9iamVjdHNdOworfQor I2VuZGlmCiAKIHZvaWQKIHN5bXNfb2ZfbnN0ZXJtICh2b2lkKQpAQCAtOTkzNSw2ICs5OTg3LDcg QEAgTmlsIG1lYW5zIHVzZSBmdWxsc2NyZWVuIHRoZSBvbGQgKDwgMTAuNykgd2F5LiAgVGhlIG9s ZCB3YXkgd29ya3MgYmV0dGVyIHdpdGgKICAgREVGU1lNIChRQ21vdXNlLCAiOm1vdXNlIik7CiAK ICNpZmRlZiBOU19JTVBMX0NPQ09BCisgIERFRlNZTSAoUWdsb2JhbF9ob3RrZXlfaG9vaywgImds b2JhbC1ob3RrZXktaG9vayIpOwogICBGcHJvdmlkZSAoUWNvY29hLCBRbmlsKTsKICAgc3ltc19v Zl9tYWNmb250ICgpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL3NyYy90ZXJtaG9va3MuaCBiL3NyYy90 ZXJtaG9va3MuaAppbmRleCBkMThiNzUwYzNhLi5iOWMzMmExY2NkIDEwMDY0NAotLS0gYS9zcmMv dGVybWhvb2tzLmgKKysrIGIvc3JjL3Rlcm1ob29rcy5oCkBAIC0xODgsNiArMTg4LDExIEBAICNk ZWZpbmUgRU1BQ1NfVEVSTUhPT0tTX0gKICAgVVNFUl9TSUdOQUxfRVZFTlQsCQkvKiBBIHVzZXIg c2lnbmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGlzIGEgbnVt YmVyIGlkZW50aWZ5aW5nIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bmRleCBpbnRvIGxpc3B5X3VzZXJfc2lnbmFscy4gICovCisjaWZkZWYgTlNfSU1QTF9DT0NPQQor ICBHTE9CQUxfSE9US0VZX0VWRU5ULCAgICAgICAgICAvKiBBbiBldmVudCBmb3Igd2hlbiBhIGhv dGtleSBpcyBwcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHNp ZGUgb2YgZW1hY3MgdGhhdCBpcyBzZXR1cCB0byBleGVjdXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFuIGVsaXNwIGZ1bmN0aW9uLiAgKi8KKyNlbmRpZgogCiAgIC8qIEhl bHAgZXZlbnRzLiAgTWVtYmVyIGBmcmFtZV9vcl93aW5kb3cnIG9mIHRoZSBpbnB1dF9ldmVudCBp cyB0aGUKICAgICAgZnJhbWUgb24gd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkLCBhbmQgbWVtYmVy IGBhcmcnIGNvbnRhaW5zCg== --000000000000f044b905b7a6aec4--