From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: pillowtrucker--- via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#70423: 29.3; cc-mode hang at 100% cpu and consuming all available memory Date: Fri, 19 Apr 2024 20:49:20 +0000 Message-ID: References: Reply-To: pillowtrucker@proton.me Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha512; boundary="------f149700bd39c2dabcdfcebcaacf12c87ac812820f24acd29fd46015295949ebc"; charset=utf-8 Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28949"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , Bob Weiner , 70423@debbugs.gnu.org To: Alan Mackenzie Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Apr 19 22:50:07 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rxvBO-0007Jk-BH for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 19 Apr 2024 22:50:06 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxvBA-0007Fa-G0; Fri, 19 Apr 2024 16:49:52 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxvB7-0007Ek-9y for bug-gnu-emacs@gnu.org; Fri, 19 Apr 2024 16:49:49 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rxvB7-000595-1e for bug-gnu-emacs@gnu.org; Fri, 19 Apr 2024 16:49:49 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rxvBL-0002jI-3z for bug-gnu-emacs@gnu.org; Fri, 19 Apr 2024 16:50:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: pillowtrucker@proton.me Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 19 Apr 2024 20:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 70423 X-GNU-PR-Package: emacs Original-Received: via spool by 70423-submit@debbugs.gnu.org id=B70423.171355979610405 (code B ref 70423); Fri, 19 Apr 2024 20:50:02 +0000 Original-Received: (at 70423) by debbugs.gnu.org; 19 Apr 2024 20:49:56 +0000 Original-Received: from localhost ([127.0.0.1]:60312 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rxvB9-0002h0-4u for submit@debbugs.gnu.org; Fri, 19 Apr 2024 16:49:56 -0400 Original-Received: from mail-4322.protonmail.ch ([185.70.43.22]:45239) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rxvB4-0002f0-0o for 70423@debbugs.gnu.org; Fri, 19 Apr 2024 16:49:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proton.me; s=protonmail; t=1713559765; x=1713818965; bh=+zhiaCHIzlbnNAHgDibGK3+QyYewnIbdnSS1qyQMFTc=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=XL/w+7r2G6gvJopUMPBZmvnOSfPUw4Qo+5ciIWowedyfLyWwTshxdq+jgv3V8Ya0K i55wkAlRLGF8KuJICEWq/Ic9IkUuskhqgV2Ekj8fkCt5oiMBkDQvWAKLNL2VWa+k8o zlvwKUhj1sav2tiF8J+eRO6V8Qu6n1OChu3D8AsevWB46Jgrrv3p6lnJTwNe0MDpUv moL78/wutU0hJKEpYJhdkeAo9fjLdy6lC0jNbfG3nbKbnshnuEcW0QFud4C8UAM/xy 4OJz2ywCxOQoUSCoHuQqNeQZJTDfVuEXyk8xVZsWLwRCvxrOToiQfMj+Wdc4RDeiFY unlq2Da0KqaFQ== In-Reply-To: Feedback-ID: 104102183:user:proton X-Pm-Message-ID: 346004ff7f7ce9e567e5369ad17c8d676910300e X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:283706 Archived-At: This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------f149700bd39c2dabcdfcebcaacf12c87ac812820f24acd29fd46015295949ebc Content-Type: multipart/mixed;boundary=---------------------5214d8be995cd651b5c10c21632b2904 -----------------------5214d8be995cd651b5c10c21632b2904 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain;charset=utf-8 Hello again, Alan! I've been using a git revision of hyperbole with the regex removed while B= ob works on the new regex. I've hit a few other small glitches while using= it, but nothing anywhere as major as the main issue at hand, and they're = most definitely unrelated. I also had a look in the other bug report and it seemed like there was als= o some kind of patch on the cc-mode side in emacs 30/trunk ? Or did I misu= nderstand that conversation ? I could try running an emacs git build if th= at's the case, although I'm not sure how many of my other packages will re= main compatible, so it's not really a priority. My init.el script is really innocent, although I've later asked some frien= ds and they agree that they would also probably never run something like t= hat. I just thought it would be a fun challenge to do everything to reprod= uce the issue in one init script. The base64-encoded string is just a gzip= ped copy of the .cpp file with which I could reproduce the issue. You shou= ld get the same string by running "gzip --stdout drm_formats.cpp|base64" o= n the attached .cpp file. (However, I don't know if all gzip versions prod= uce the same output given the same input, and it will make me look even mo= re suspicious if the strings don't match.) Regardless, I've been productively working on other C++ code with the rege= xp turned off and it's been a great relief not to have to struggle with ha= ving to restart my workspace/desktop so often. Thank you for both of yours work! And good luck with the new regexp! If you put it in some git tag/branch that I can pull easily, I could maybe= assist with testing it ? Let me know if that's an option. Kind regards, M On Thursday, April 18th, 2024 at 8:39 PM, Alan Mackenzie wrot= e: > Hello, Pillowtrucker! > = > On Tue, Apr 16, 2024 at 19:51:09 +0000, pillowtrucker@proton.me wrote: > = > > Greetings! > = > > I have been able to replicate a (relatively) minimum environment for > > this =E2=80=94 hyperbole + clang-format.el. I think lsp-mode aggravate= s the > > issue somehow, but is not necessary to enter the infinite loop. Withou= t > > lsp-mode, however, the memory usage seems flat, as opposed to > > ballooning when it is present. I would also guess that if you are able > > to plug in that regexp into cc-mode without installing all of > > hyperbole.el, you would probably get the same effect, but I didn't kno= w > > how to do that. > = > = > = > > You will need gzip and the clang-format utility for this from your > > linux distribution or compiled from source. Preferably version 18.1.3 > > of the llvm suite, but it might work with earlier versions. I don't > > think /how/ it's formatting the file matters as much as the fact of it > > being altered to some degree. > = > = > OK. I haven't actually evaluated your init.el (as I don't fully > understand it), but I have a strong hypothesis for the looping. > = > You're loading hyperbole as part of the initialisation. This sets up the > value of defun-prompt-regexp to a ~760 character long string, whereas > normally in C++ Mode, this variable is nil. > = > This variable is what is seen in the second backtrace below, although it > is bowdlerised to a very short string ending in ... . See the line below > emphasised with <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D. > = > This regexp is known to be faulty, and sometimes to cause infinite > looping. By coincidence, I have recently rewritten this regexp at the > request of Bob Weiner (in the Cc:), the maintainer of hyperbole, and he > is currently testing the regexp. This faulty regexp may be the cause of > your bug, too. > = > So, could I ask you please to be patient, and wait for Bob to complete > his tests. If they are successful, a new version of hyperbole is the > likely outcome, and this may solve your bug. > = > If there is any way you can run your test without installing the > hyperbole package, please do so, and let me know whether or not the hang > still occurs. > = > Thanks! > = > > Please follow these steps: > > 1. start with an empty directory > > $ export MYDEBUGDIR=3Demacs-debugging > > 2. use the attached init.el file as follows: > > $ emacs-29.3 --init-directory=3D${MYDEBUGDIR} -l init.el > > 3. Wait for the script to reach the point where it's in an infinite lo= op (check top/htop for emacs with 100% usage, maybe wait a few seconds or = minutes to make sure it is not just taking a long time to run the formatti= ng) and press C-g to send "quit". > = > > This results in a hang and the debugger should show something like thi= s: > = > = > [ .... ] > = > > or maybe you will see: > = > > Debugger entered--Lisp error: (quit) > > re-search-backward("^\\s(\\|\\(?:^[ \11]\\(template\\s-<[^>;.{}]+>\\s-= *\\)?\\(..." nil move 1) <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > > beginning-of-defun-raw(nil) > > beginning-of-defun() > > c-get-fallback-scan-pos(18908) > > c-parse-state-get-strategy(18908 1) > > c-parse-state-1() > > c-parse-state() > > c-laomib-invalidate-cache(18908 18910) > > c-before-change(18908 18910) > > clang-format--replace(18908 2 "\n") > > apply(clang-format--replace (18908 2 "\n")) > > clang-format-region(1 18910 nil nil) > > clang-format-buffer() > > load-with-code-conversion("/home/wrath/emacs-debugging2/init.el" "/hom= e/wrath/emacs-debugging2/init.el" nil t) > > command-line-1(("-l" "emacs-debugging2/init.el")) > > command-line() > > normal-top-level() > = > > Either way it does seem like the problem lies somewhere in cc-mode > > choking either on the file itself or on that regular expression. > = > > I license the attached init.el under the terms of the AGPL-3 or later > > version. The drm_formats.cpp file is part of the MIR Server project an= d > > is licensed under the terms of the GPL-v3. Both licenses attached. I'm > > not sure if I am allowed to re-license the MIR file as AGPL, but I > > believe they are in any case compatible to be distributed together. > = > > Thank you for having a look at this issue, it has been plaguing me > > since november and even making rust look like an ever so slightly more > > pleasant alternative to dealing with constant hangs/crashes and having > > to restore frame/window layouts when editing C/C++.. > = > > Kind regards, > > M. > = > = > -- > Alan Mackenzie (Nuremberg, Germany). -----------------------5214d8be995cd651b5c10c21632b2904 Content-Type: text/x-c++src; filename="drm_formats.cpp"; name="drm_formats.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="drm_formats.cpp"; name="drm_formats.cpp" LyoKICogQ29weXJpZ2h0IMKpIENhbm9uaWNhbCBMdGQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAq IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IHZlcnNpb24gMiBvciAzLAogKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KICovCgojaW5jbHVkZSAibWlyL2dyYXBoaWNzL2RybV9mb3JtYXRz LmgiCiNpbmNsdWRlICJtaXJfdG9vbGtpdC9jb21tb24uaCIKCiNpbmNsdWRlIDxjc3RkaW50Pgoj aW5jbHVkZSA8ZHJtX2ZvdXJjYy5oPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8bWVt b3J5PgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxib29zdC90aHJvd19leGNlcHRpb24uaHBw PgoKI2lmZGVmIE1JUl9IQVZFX0RSTV9HRVRfTU9ESUZJRVJfTkFNRQojaW5jbHVkZSA8eGY4NmRy bS5oPgojZW5kaWYKCm5hbWVzcGFjZSBtZyA9IG1pcjo6Z3JhcGhpY3M7CgphdXRvIG1nOjpkcm1f Zm9ybWF0X3RvX3N0cmluZyh1aW50MzJfdCBmb3JtYXQpIC0+IGNoYXIgY29uc3QqCnsKI2RlZmlu ZSBTVFJJTkdJRlkodmFsKSBcCiAgICBjYXNlIHZhbDogICAgICAgICAgXAogICAgICAgIHJldHVy biAjdmFsOwoKICAgIGlmICghKGZvcm1hdCAmIERSTV9GT1JNQVRfQklHX0VORElBTikpCiAgICB7 CiAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgewojaW5jbHVkZSAiZHJtLWZvcm1hdHMi CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIERS TSBmb3JtYXQ7IHJlYnVpbGQgTWlyIGFnYWluc3QgbmV3ZXIgRFJNIGhlYWRlcnM/IjsKICAgICAg ICB9CgogICAgfQojdW5kZWYgU1RSSU5HSUZZCgojZGVmaW5lIFNUUklOR0lGWV9CSUdfRU5ESUFO KHZhbCkgXAogICAgY2FzZSB2YWw6ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgcmV0dXJu ICN2YWwgIiAoYmlnIGVuZGlhbikiOwoKICAgIHN3aXRjaCAoZm9ybWF0ICYgKH5EUk1fRk9STUFU X0JJR19FTkRJQU4pKQogICAgewojaW5jbHVkZSAiZHJtLWZvcm1hdHMtYmlnLWVuZGlhbiIKCiAg ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIERSTSBmb3JtYXQ7IHJl YnVpbGQgTWlyIGFnYWluc3QgbmV3ZXIgRFJNIGhlYWRlcnM/IjsKICAgIH0KI3VuZGVmIFNUUklO R0lGWV9CSUdFTkRJQU4KfQoKc3RydWN0IG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm8KewogICAg dWludDMyX3QgZm9ybWF0OwogICAgYm9vbCBoYXNfYWxwaGE7CiAgICB1aW50MzJfdCBvcGFxdWVf ZXF1aXZhbGVudDsKICAgIHVpbnQzMl90IGFscGhhX2VxdWl2YWxlbnQ7CiAgICBzdGQ6Om9wdGlv bmFsPG1nOjpEUk1Gb3JtYXQ6OlJHQkNvbXBvbmVudEluZm8+IGNvbXBvbmVudHM7Cn07CgpuYW1l c3BhY2UKewpjb25zdGV4cHIgc3RkOjphcnJheSBjb25zdCBmb3JtYXRzID0gewogICAgbWc6OkRS TUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1hSR0I0NDQ0LAogICAgICAg IGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRfWFJHQjQ0NDQsCiAgICAgICAgRFJNX0ZPUk1BVF9B UkdCNDQ0NCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAg ICAgICA0LCA0LCA0LCB7fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9y bWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1hCR1I0NDQ0LAogICAgICAgIGZhbHNlLAogICAg ICAgIERSTV9GT1JNQVRfWEJHUjQ0NDQsCiAgICAgICAgRFJNX0ZPUk1BVF9BQkdSNDQ0NCwKICAg ICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA0LCA0LCA0 LCB7fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAg ICAgICBEUk1fRk9STUFUX1JHQlg0NDQ0LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JN QVRfUkdCWDQ0NDQsCiAgICAgICAgRFJNX0ZPUk1BVF9SR0JBNDQ0NCwKICAgICAgICBtZzo6RFJN Rm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA0LCA0LCA0LCB7fQogICAgICAg IH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9S TUFUX0JHUlg0NDQ0LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRfQkdSWDQ0NDQs CiAgICAgICAgRFJNX0ZPUk1BVF9CR1JBNDQ0NCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JD b21wb25lbnRJbmZvewogICAgICAgICAgICA0LCA0LCA0LCB7fQogICAgICAgIH0sCiAgICB9LAog ICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX0FSR0I0NDQ0 LAogICAgICAgIHRydWUsCiAgICAgICAgRFJNX0ZPUk1BVF9YUkdCNDQ0NCwKICAgICAgICBEUk1f Rk9STUFUX0FSR0I0NDQ0LAogICAgICAgIG1nOjpEUk1Gb3JtYXQ6OlJHQkNvbXBvbmVudEluZm97 CiAgICAgICAgICAgIDQsIDQsIDQsIDQKICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1Gb3Jt YXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9BQkdSNDQ0NCwKICAgICAgICB0cnVl LAogICAgICAgIERSTV9GT1JNQVRfWEJHUjQ0NDQsCiAgICAgICAgRFJNX0ZPUk1BVF9BQkdSNDQ0 NCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA0 LCA0LCA0LCA0CiAgICAgICAgfSwKICAgIH0sCiAgICBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZv ewogICAgICAgIERSTV9GT1JNQVRfUkdCQTQ0NDQsCiAgICAgICAgdHJ1ZSwKICAgICAgICBEUk1f Rk9STUFUX1JHQlg0NDQ0LAogICAgICAgIERSTV9GT1JNQVRfUkdCQTQ0NDQsCiAgICAgICAgbWc6 OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgNCwgNCwgNCwgNAogICAg ICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1f Rk9STUFUX0JHUkE0NDQ0LAogICAgICAgIHRydWUsCiAgICAgICAgRFJNX0ZPUk1BVF9CR1JYNDQ0 NCwKICAgICAgICBEUk1fRk9STUFUX0JHUkE0NDQ0LAogICAgICAgIG1nOjpEUk1Gb3JtYXQ6OlJH QkNvbXBvbmVudEluZm97CiAgICAgICAgICAgIDQsIDQsIDQsIDQKICAgICAgICB9LAogICAgfSwK ICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9YUkdCMTU1 NSwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX1hSR0IxNTU1LAogICAgICAgIERS TV9GT1JNQVRfQVJHQjE1NTUsCiAgICAgICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5m b3sKICAgICAgICAgICAgNSwgNSwgNSwge30KICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1G b3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9YQkdSMTU1NSwKICAgICAgICBm YWxzZSwKICAgICAgICBEUk1fRk9STUFUX1hCR1IxNTU1LAogICAgICAgIERSTV9GT1JNQVRfQUJH UjE1NTUsCiAgICAgICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAg ICAgNSwgNSwgNSwge30KICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1h dEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9SR0JYNTU1MSwKICAgICAgICBmYWxzZSwKICAgICAg ICBEUk1fRk9STUFUX1JHQlg1NTUxLAogICAgICAgIERSTV9GT1JNQVRfUkdCQTU1NTEsCiAgICAg ICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgNSwgNSwgNSwg e30KICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAg ICAgRFJNX0ZPUk1BVF9CR1JYNTU1MSwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFU X0JHUlg1NTUxLAogICAgICAgIERSTV9GT1JNQVRfQkdSQTU1NTEsCiAgICAgICAgbWc6OkRSTUZv cm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgNSwgNSwgNSwge30KICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9BUkdCMTU1NSwKICAgICAgICB0cnVlLAogICAgICAgIERSTV9GT1JNQVRfWFJHQjE1NTUsCiAg ICAgICAgRFJNX0ZPUk1BVF9BUkdCMTU1NSwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21w b25lbnRJbmZvewogICAgICAgICAgICA1LCA1LCA1LCAxCiAgICAgICAgfSwKICAgIH0sCiAgICBt Zzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvewogICAgICAgIERSTV9GT1JNQVRfQUJHUjE1NTUsCiAg ICAgICAgdHJ1ZSwKICAgICAgICBEUk1fRk9STUFUX1hCR1IxNTU1LAogICAgICAgIERSTV9GT1JN QVRfQUJHUjE1NTUsCiAgICAgICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAg ICAgICAgICAgNSwgNSwgNSwgMQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6 Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1JHQkE1NTUxLAogICAgICAgIHRydWUsCiAg ICAgICAgRFJNX0ZPUk1BVF9SR0JYNTU1MSwKICAgICAgICBEUk1fRk9STUFUX1JHQkE1NTUxLAog ICAgICAgIG1nOjpEUk1Gb3JtYXQ6OlJHQkNvbXBvbmVudEluZm97CiAgICAgICAgICAgIDUsIDUs IDUsIDEKICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAg ICAgICAgRFJNX0ZPUk1BVF9CR1JBNTU1MSwKICAgICAgICB0cnVlLAogICAgICAgIERSTV9GT1JN QVRfQkdSWDU1NTEsCiAgICAgICAgRFJNX0ZPUk1BVF9CR1JBNTU1MSwKICAgICAgICBtZzo6RFJN Rm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA1LCA1LCA1LCAxCiAgICAgICAg fSwKICAgIH0sCiAgICBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvewogICAgICAgIERSTV9GT1JN QVRfUkdCNTY1LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRfUkdCNTY1LAogICAg ICAgIERSTV9GT1JNQVRfSU5WQUxJRCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25l bnRJbmZvewogICAgICAgICAgICA1LCA2LCA1LCB7fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6 OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX0JHUjU2NSwKICAgICAg ICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX0JHUjU2NSwKICAgICAgICBEUk1fRk9STUFUX0lO VkFMSUQsCiAgICAgICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAg ICAgNSwgNiwgNSwge30KICAgICAgICB9LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1h dEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9SR0I4ODgsCiAgICAgICAgZmFsc2UsCiAgICAgICAg RFJNX0ZPUk1BVF9SR0I4ODgsCiAgICAgICAgRFJNX0ZPUk1BVF9JTlZBTElELAogICAgICAgIG1n OjpEUk1Gb3JtYXQ6OlJHQkNvbXBvbmVudEluZm97CiAgICAgICAgICAgIDgsIDgsIDgsIHt9CiAg ICAgICAgfSwKICAgIH0sCiAgICBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvewogICAgICAgIERS TV9GT1JNQVRfQkdSODg4LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRfQkdSODg4 LAogICAgICAgIERSTV9GT1JNQVRfSU5WQUxJRCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JD b21wb25lbnRJbmZvewogICAgICAgICAgICA4LCA4LCA4LCB7fQogICAgICAgIH0sCiAgICB9LAog ICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1hSR0I4ODg4 LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCiAgICAgICAgRFJN X0ZPUk1BVF9BUkdCODg4OCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZv ewogICAgICAgICAgICA4LCA4LCA4LCB7fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZv cm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1hCR1I4ODg4LAogICAgICAgIGZh bHNlLAogICAgICAgIERSTV9GT1JNQVRfWEJHUjg4ODgsCiAgICAgICAgRFJNX0ZPUk1BVF9BQkdS ODg4OCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAg ICA4LCA4LCA4LCB7fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0 SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1JHQlg4ODg4LAogICAgICAgIGZhbHNlLAogICAgICAg IERSTV9GT1JNQVRfUkdCWDg4ODgsCiAgICAgICAgRFJNX0ZPUk1BVF9SR0JBODg4OCwKICAgICAg ICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA4LCA4LCA4LCB7 fQogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAg ICBEUk1fRk9STUFUX0JHUlg4ODg4LAogICAgICAgIGZhbHNlLAogICAgICAgIERSTV9GT1JNQVRf QkdSWDg4ODgsCiAgICAgICAgRFJNX0ZPUk1BVF9CR1JBODg4OCwKICAgICAgICBtZzo6RFJNRm9y bWF0OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICA4LCA4LCA4LCB7fQogICAgICAgIH0s CiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFU X0FSR0I4ODg4LAogICAgICAgIHRydWUsCiAgICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwKICAg ICAgICBEUk1fRk9STUFUX0FSR0I4ODg4LAogICAgICAgIG1nOjpEUk1Gb3JtYXQ6OlJHQkNvbXBv bmVudEluZm97CiAgICAgICAgICAgIDgsIDgsIDgsIDgKICAgICAgICB9LAogICAgfSwKICAgIG1n OjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9BQkdSODg4OCwKICAg ICAgICB0cnVlLAogICAgICAgIERSTV9GT1JNQVRfWEJHUjg4ODgsCiAgICAgICAgRFJNX0ZPUk1B VF9BQkdSODg4OCwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JDb21wb25lbnRJbmZvewogICAg ICAgICAgICA4LCA4LCA4LCA4CiAgICAgICAgfSwKICAgIH0sCiAgICBtZzo6RFJNRm9ybWF0OjpG b3JtYXRJbmZvewogICAgICAgIERSTV9GT1JNQVRfUkdCQTg4ODgsCiAgICAgICAgdHJ1ZSwKICAg ICAgICBEUk1fRk9STUFUX1JHQlg4ODg4LAogICAgICAgIERSTV9GT1JNQVRfUkdCQTg4ODgsCiAg ICAgICAgbWc6OkRSTUZvcm1hdDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgOCwgOCwg OCwgOAogICAgICAgIH0sCiAgICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAg ICAgICBEUk1fRk9STUFUX0JHUkE4ODg4LAogICAgICAgIHRydWUsCiAgICAgICAgRFJNX0ZPUk1B VF9CR1JYODg4OCwKICAgICAgICBEUk1fRk9STUFUX0JHUkE4ODg4LAogICAgICAgIG1nOjpEUk1G b3JtYXQ6OlJHQkNvbXBvbmVudEluZm97CiAgICAgICAgICAgIDgsIDgsIDgsIDgKICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9YUkdCMjEwMTAxMCwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX1hSR0IyMTAx MDEwLAogICAgICAgIERSTV9GT1JNQVRfQVJHQjIxMDEwMTAsCiAgICAgICAgbWc6OkRSTUZvcm1h dDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgMTAsIDEwLCAxMCwge30KICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9YQkdSMjEwMTAxMCwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX1hCR1IyMTAx MDEwLAogICAgICAgIERSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCiAgICAgICAgbWc6OkRSTUZvcm1h dDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgMTAsIDEwLCAxMCwge30KICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9SR0JYMTAxMDEwMiwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX1JHQlgxMDEw MTAyLAogICAgICAgIERSTV9GT1JNQVRfUkdCQTEwMTAxMDIsCiAgICAgICAgbWc6OkRSTUZvcm1h dDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgMTAsIDEwLCAxMCwge30KICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9CR1JYMTAxMDEwMiwKICAgICAgICBmYWxzZSwKICAgICAgICBEUk1fRk9STUFUX0JHUlgxMDEw MTAyLAogICAgICAgIERSTV9GT1JNQVRfQkdSQTEwMTAxMDIsCiAgICAgICAgbWc6OkRSTUZvcm1h dDo6UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgMTAsIDEwLCAxMCwge30KICAgICAgICB9 LAogICAgfSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1B VF9BUkdCMjEwMTAxMCwKICAgICAgICB0cnVlLAogICAgICAgIERSTV9GT1JNQVRfWFJHQjIxMDEw MTAsCiAgICAgICAgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwKICAgICAgICBtZzo6RFJNRm9ybWF0 OjpSR0JDb21wb25lbnRJbmZvewogICAgICAgICAgICAxMCwgMTAsIDEwLCAyCiAgICAgICAgfSwK ICAgIH0sCiAgICBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvewogICAgICAgIERSTV9GT1JNQVRf QUJHUjIxMDEwMTAsCiAgICAgICAgdHJ1ZSwKICAgICAgICBEUk1fRk9STUFUX1hCR1IyMTAxMDEw LAogICAgICAgIERSTV9GT1JNQVRfQUJHUjIxMDEwMTAsCiAgICAgICAgbWc6OkRSTUZvcm1hdDo6 UkdCQ29tcG9uZW50SW5mb3sKICAgICAgICAgICAgMTAsIDEwLCAxMCwgMgogICAgICAgIH0sCiAg ICB9LAogICAgbWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mb3sKICAgICAgICBEUk1fRk9STUFUX1JH QkExMDEwMTAyLAogICAgICAgIHRydWUsCiAgICAgICAgRFJNX0ZPUk1BVF9SR0JYMTAxMDEwMiwK ICAgICAgICBEUk1fRk9STUFUX1JHQkExMDEwMTAyLAogICAgICAgIG1nOjpEUk1Gb3JtYXQ6OlJH QkNvbXBvbmVudEluZm97CiAgICAgICAgICAgIDEwLCAxMCwgMTAsIDIKICAgICAgICB9LAogICAg fSwKICAgIG1nOjpEUk1Gb3JtYXQ6OkZvcm1hdEluZm97CiAgICAgICAgRFJNX0ZPUk1BVF9CR1JB MTAxMDEwMiwKICAgICAgICB0cnVlLAogICAgICAgIERSTV9GT1JNQVRfQkdSWDEwMTAxMDIsCiAg ICAgICAgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMiwKICAgICAgICBtZzo6RFJNRm9ybWF0OjpSR0JD b21wb25lbnRJbmZvewogICAgICAgICAgICAxMCwgMTAsIDEwLCAyCiAgICAgICAgfSwKICAgIH0s Cn07Cgpjb25zdGV4cHIgYXV0byBmaW5kX2Zvcm1hdF9pbmZvKHVpbnQzMl90IGZvdXJjYykgLT4g bWc6OkRSTUZvcm1hdDo6Rm9ybWF0SW5mbyBjb25zdCoKewogICAgZm9yIChhdXRvIGNvbnN0JiBm b3JtYXQ6IGZvcm1hdHMpCiAgICB7CiAgICAgICAgaWYgKGZvcm1hdC5mb3JtYXQgPT0gZm91cmNj KQogICAgICAgICAgICByZXR1cm4gJmZvcm1hdDsKICAgIH0KICAgIC8qIFRoZSBmb3JtYXQgYXJy YXkgZG9lc24ndCBjb3ZlciBhbGwgRFJNX0ZPUk1BVF8qLCBvbmx5IHRoZSBvbmVzIHJlbGV2YW50 IHRvIE1pcgogICAgICogKGFuZCBub3QgYWxsIG9mIHRoZW0sIHlldDogZWcgWVVWIGZvcm1hdHMp LCBzbyB3ZSBtdXN0IGhhdmUgYSBzZW50aW5lbCB2YWx1ZQogICAgICogZm9yIHRoZSBtaXNzaW5n IG9uZXMKICAgICAqLwogICAgcmV0dXJuIG51bGxwdHI7Cn0KCi8qIEdlbmVyYXRlIGEgYnVuY2gg b2YgdmFyaWFibGVzIG5hbWVkIGZvcm1hdF9pbmZvX0RSTV9GT1JNQVRfRk9PIHBvaW50aW5nIHRv IGFzc29jaWF0ZWQgRm9ybWF0SW5mbyAqLwojZGVmaW5lIFNUUklOR0lGWShmb3JtYXQpIFwKICAg IGNvbnN0ZXhwciBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvIGNvbnN0KiBmb3JtYXRfaW5mb18j I2Zvcm1hdCA9IGZpbmRfZm9ybWF0X2luZm8oZm9ybWF0KTsKCiNpbmNsdWRlICJkcm0tZm9ybWF0 cyIKCiN1bmRlZiBTVFJJTkdJRlkKCmNvbnN0ZXhwciBhdXRvIG1heWJlX2luZm9fZm9yX2Zvcm1h dCh1aW50MzJfdCBmb3VyY2NfZm9ybWF0KSAtPiBtZzo6RFJNRm9ybWF0OjpGb3JtYXRJbmZvIGNv bnN0Kgp7CiAgICBzd2l0Y2ggKGZvdXJjY19mb3JtYXQpCiAgICB7CiNkZWZpbmUgU1RSSU5HSUZZ KGZvcm1hdCkgXAogICAgY2FzZSBmb3JtYXQ6IFwKICAgICAgICByZXR1cm4gZm9ybWF0X2luZm9f IyNmb3JtYXQ7IFwKCiNpbmNsdWRlICJkcm0tZm9ybWF0cyIKCiN1bmRlZiBTVFJJTkdJRlkKICAg ICAgICBkZWZhdWx0OgogICAgICAgICAgICBCT09TVF9USFJPV19FWENFUFRJT04oKAogICAgICAg ICAgICAgICAgc3RkOjpydW50aW1lX2Vycm9yewogICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry aW5neyJVbmtub3duIERSTSBmb3JtYXQgIn0gKyBzdGQ6OnRvX3N0cmluZyhmb3VyY2NfZm9ybWF0 KSArCiAgICAgICAgICAgICAgICAgICAgIiAobWF5IG5lZWQgdG8gcmVidWlsZCBNaXIgYWdhaW5z dCBuZXdlciBEUk0gaGVhZGVycz8pIn0pKTsKICAgIH0KCn0KCmNvbnN0ZXhwciBhdXRvIGluZm9f Zm9yX2Zvcm1hdCh1aW50MzJfdCBmb3VyY2NfZm9ybWF0KSAtPiBtZzo6RFJNRm9ybWF0OjpGb3Jt YXRJbmZvIGNvbnN0Jgp7CiAgICBhdXRvIGNvbnN0IGluZm8gPSBtYXliZV9pbmZvX2Zvcl9mb3Jt YXQoZm91cmNjX2Zvcm1hdCk7CgogICAgaWYgKGluZm8pCiAgICB7CiAgICAgICAgcmV0dXJuICpp bmZvOwogICAgfQogICAgQk9PU1RfVEhST1dfRVhDRVBUSU9OKCgKICAgICAgICBzdGQ6OnJ1bnRp bWVfZXJyb3J7CiAgICAgICAgICAgIHN0ZDo6c3RyaW5neyJVbnN1cHBvcnRlZCBEUk0gZm9ybWF0 OiAifSArIG1nOjpkcm1fZm9ybWF0X3RvX3N0cmluZyhmb3VyY2NfZm9ybWF0KX0pKTsKfQoKfQoK bWc6OkRSTUZvcm1hdDo6RFJNRm9ybWF0KHVpbnQzMl90IGZvdXJjY19mb3JtYXQpCiAgICA6IGlu Zm97JmluZm9fZm9yX2Zvcm1hdChmb3VyY2NfZm9ybWF0KX0Kewp9CgphdXRvIG1nOjpEUk1Gb3Jt YXQ6Om5hbWUoKSBjb25zdCAtPiBjb25zdCBjaGFyKgp7CiAgICByZXR1cm4gZHJtX2Zvcm1hdF90 b19zdHJpbmcoaW5mby0+Zm9ybWF0KTsKfQoKYXV0byBtZzo6RFJNRm9ybWF0OjpvcGFxdWVfZXF1 aXZhbGVudCgpIGNvbnN0IC0+IGNvbnN0IHN0ZDo6b3B0aW9uYWw8RFJNRm9ybWF0Pgp7CiAgICBp ZiAoaW5mby0+b3BhcXVlX2VxdWl2YWxlbnQgIT0gRFJNX0ZPUk1BVF9JTlZBTElEKQogICAgewog ICAgICAgIHJldHVybiBEUk1Gb3JtYXR7aW5mby0+b3BhcXVlX2VxdWl2YWxlbnR9OwogICAgfQog ICAgcmV0dXJuIHt9Owp9CgphdXRvIG1nOjpEUk1Gb3JtYXQ6OmFscGhhX2VxdWl2YWxlbnQoKSBj b25zdCAtPiBjb25zdCBzdGQ6Om9wdGlvbmFsPERSTUZvcm1hdD4KewogICAgaWYgKGluZm8tPmFs cGhhX2VxdWl2YWxlbnQgIT0gRFJNX0ZPUk1BVF9JTlZBTElEKQogICAgewogICAgICAgIHJldHVy biBEUk1Gb3JtYXR7aW5mby0+YWxwaGFfZXF1aXZhbGVudH07CiAgICB9CiAgICByZXR1cm4ge307 Cn0KCmJvb2wgbWc6OkRSTUZvcm1hdDo6aGFzX2FscGhhKCkgY29uc3QKewogICAgcmV0dXJuIGlu Zm8tPmhhc19hbHBoYTsKfQoKYXV0byBtZzo6RFJNRm9ybWF0Ojpjb21wb25lbnRzKCkgY29uc3Qg LT4gc3RkOjpvcHRpb25hbDxSR0JDb21wb25lbnRJbmZvPiBjb25zdCYKewogICAgcmV0dXJuIGlu Zm8tPmNvbXBvbmVudHM7Cn0KCm1nOjpEUk1Gb3JtYXQ6Om9wZXJhdG9yIHVpbnQzMl90KCkgY29u c3QKewogICAgcmV0dXJuIGluZm8tPmZvcm1hdDsKfQoKYXV0byBtZzo6RFJNRm9ybWF0Ojphc19t aXJfZm9ybWF0KCkgY29uc3QgLT4gc3RkOjpvcHRpb25hbDxNaXJQaXhlbEZvcm1hdD4KewogICAg c3dpdGNoIChpbmZvLT5mb3JtYXQpCiAgICB7CiAgICBjYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6 CiAgICAgICAgcmV0dXJuIG1pcl9waXhlbF9mb3JtYXRfYXJnYl84ODg4OwogICAgY2FzZSBEUk1f Rk9STUFUX1hSR0I4ODg4OgogICAgICAgIHJldHVybiBtaXJfcGl4ZWxfZm9ybWF0X3hyZ2JfODg4 ODsKICAgIGNhc2UgRFJNX0ZPUk1BVF9SR0JBNDQ0NDoKICAgICAgICByZXR1cm4gbWlyX3BpeGVs X2Zvcm1hdF9yZ2JhXzQ0NDQ7CiAgICBjYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6CiAgICAgICAg cmV0dXJuIG1pcl9waXhlbF9mb3JtYXRfcmdiYV81NTUxOwogICAgY2FzZSBEUk1fRk9STUFUX1JH QjU2NToKICAgICAgICByZXR1cm4gbWlyX3BpeGVsX2Zvcm1hdF9yZ2JfNTY1OwogICAgY2FzZSBE Uk1fRk9STUFUX1JHQjg4ODoKICAgICAgICByZXR1cm4gbWlyX3BpeGVsX2Zvcm1hdF9yZ2JfODg4 OwogICAgY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKICAgICAgICByZXR1cm4gbWlyX3BpeGVsX2Zv cm1hdF9iZ3JfODg4OwogICAgY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgogICAgICAgIHJldHVy biBtaXJfcGl4ZWxfZm9ybWF0X3hiZ3JfODg4ODsKICAgIGNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4 ODoKICAgICAgICByZXR1cm4gbWlyX3BpeGVsX2Zvcm1hdF9hYmdyXzg4ODg7CiAgICBkZWZhdWx0 OgogICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICB9Cn0KCmF1dG8gbWc6OkRSTUZvcm1h dDo6ZnJvbV9taXJfZm9ybWF0KE1pclBpeGVsRm9ybWF0IGZvcm1hdCkKICAgIC0+IERSTUZvcm1h dAp7CiAgICBzd2l0Y2ggKGZvcm1hdCkKICAgIHsKICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF9h cmdiXzg4ODg6CiAgICAgICAgcmV0dXJuIERSTUZvcm1hdHtEUk1fRk9STUFUX0FSR0I4ODg4fTsK ICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF94cmdiXzg4ODg6CiAgICAgICAgcmV0dXJuIERSTUZv cm1hdHtEUk1fRk9STUFUX1hSR0I4ODg4fTsKICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF9hYmdy Xzg4ODg6CiAgICAgICAgcmV0dXJuIERSTUZvcm1hdHtEUk1fRk9STUFUX0FCR1I4ODg4fTsKICAg IGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF94YmdyXzg4ODg6CiAgICAgICAgcmV0dXJuIERSTUZvcm1h dHtEUk1fRk9STUFUX1hCR1I4ODg4fTsKICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF9iZ3JfODg4 OgogICAgICAgIHJldHVybiBEUk1Gb3JtYXR7RFJNX0ZPUk1BVF9CR1I4ODh9OwogICAgY2FzZSBt aXJfcGl4ZWxfZm9ybWF0X3JnYl84ODg6CiAgICAgICAgcmV0dXJuIERSTUZvcm1hdHtEUk1fRk9S TUFUX1JHQjg4OH07CiAgICBjYXNlIG1pcl9waXhlbF9mb3JtYXRfcmdiXzU2NToKICAgICAgICBy ZXR1cm4gRFJNRm9ybWF0e0RSTV9GT1JNQVRfUkdCNTY1fTsKICAgIGNhc2UgbWlyX3BpeGVsX2Zv cm1hdF9yZ2JhXzU1NTE6CiAgICAgICAgcmV0dXJuIERSTUZvcm1hdHtEUk1fRk9STUFUX1JHQkE1 NTUxfTsKICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1hdF9yZ2JhXzQ0NDQ6CiAgICAgICAgcmV0dXJu IERSTUZvcm1hdHtEUk1fRk9STUFUX1JHQkE0NDQ0fTsKICAgIGNhc2UgbWlyX3BpeGVsX2Zvcm1h dF9pbnZhbGlkOgogICAgICAgIC8qIFdlICpjb3VsZCogZG8gc29tZXRoaW5nIHdpdGggRFJNX0ZP Uk1BVF9JTlZBTElEIGhlcmUsIGJ1dAogICAgICAgICAqIGxldCdzIG5vdC4gTGV0J3MgbWFpbnRh aW4gdGhhdCBEUk1Gb3JtYXQgaXMgYWx3YXlzIHZhbGlkCiAgICAgICAgICovCiAgICAgICAgQk9P U1RfVEhST1dfRVhDRVBUSU9OKChzdGQ6OnJ1bnRpbWVfZXJyb3J7IkF0dGVtcHQgdG8gbG9vayB1 cCBEUk0gZm9ybWF0IGluZm8gb2YgaW52YWxpZCBwaXhlbCBmb3JtYXQifSkpOwogICAgY2FzZSBt aXJfcGl4ZWxfZm9ybWF0czoKICAgICAgICBCT09TVF9USFJPV19FWENFUFRJT04oKHN0ZDo6bG9n aWNfZXJyb3J7IkF0dGVtcHQgdG8gbG9vayB1cCBmb3JtYXQgaW5mbyBvZiBzZW50aW5lbCBwaXhl bCBmb3JtYXQifSkpOwojaWZuZGVmIF9fY2xhbmdfXwogICAgLyogQ2xhbmcgYWNjZXB0cyB0aGF0 IHRoZSBhYm92ZSBjYXNlcyBhcmUgZXhoYXVzdGl2ZSwgZ2NjIGRvZXMgbm90CiAgICAgKiBIYXZl IGEgZGVmYXVsdCBjbGF1c2UgaGVyZSB0byBwYWNpZnkgZ2NjLCBidXQgb21pdCBpdCBmb3IgY2xh bmcKICAgICAqIHNvIHRoYXQgd2UgZmFpbCB0byBidWlsZCBpZiB0aGUgYWJvdmUgaXMgKm5vdCog ZXhoYXVzdGl2ZS4KICAgICAqLwogICAgZGVmYXVsdDoKICAgICAgICBCT09TVF9USFJPV19FWENF UFRJT04oKHN0ZDo6bG9naWNfZXJyb3J7IkV4aGF1c3RpdmUgc3dpdGNoIG5lZWRzIHVwZGF0aW5n In0pKTsKI2VuZGlmCiAgICB9Cn0KCgphdXRvIG1nOjpkcm1fbW9kaWZpZXJfdG9fc3RyaW5nKHVp bnQ2NF90IG1vZGlmaWVyKSAtPiBzdGQ6OnN0cmluZwp7CiNpZmRlZiBNSVJfSEFWRV9EUk1fR0VU X01PRElGSUVSX05BTUUKICAgIHN0cnVjdCBDU3RyRGVsZXRlcgogICAgewogICAgcHVibGljOgog ICAgICAgIHZvaWQgb3BlcmF0b3IoKShjaGFyKiBjX3N0cikKICAgICAgICB7CiAgICAgICAgICAg IGlmIChjX3N0cikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZnJlZSAoY19zdHIpOwog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBhdXRvIGNvbnN0IHZlbmRvciA9CiAg ICAgICAgWyZdKCkgLT4gc3RkOjpzdHJpbmcKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6dW5p cXVlX3B0cjxjaGFyW10sIENTdHJEZWxldGVyPiB2ZW5kb3J7ZHJtR2V0Rm9ybWF0TW9kaWZpZXJW ZW5kb3IobW9kaWZpZXIpfTsKICAgICAgICAgICAgaWYgKHZlbmRvcikKICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgcmV0dXJuIHZlbmRvci5nZXQoKTsKICAgICAgICAgICAgfQogICAgICAg ICAgICByZXR1cm4gIihVTktOT1dOIFZFTkRPUikiOwogICAgICAgIH0oKTsKCiAgICBhdXRvIGNv bnN0IG5hbWUgPQogICAgICAgIFsmXSgpIC0+IHN0ZDo6c3RyaW5nCiAgICAgICAgewogICAgICAg ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdLCBDU3RyRGVsZXRlcj4gbmFtZXtkcm1HZXRGb3Jt YXRNb2RpZmllck5hbWUobW9kaWZpZXIpfTsKICAgICAgICAgICAgaWYgKG5hbWUpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLmdldCgpOwogICAgICAgICAgICB9CiAg ICAgICAgICAgIHJldHVybiAiKFVOS05PV04gTU9ESUZJRVIpIjsKICAgICAgICB9KCk7CgogICAg cmV0dXJuIHZlbmRvciArICI6IiArIG5hbWU7Cn0KI2Vsc2UKI2RlZmluZSBTVFJJTkdJRlkodmFs KSBcCiAgICBjYXNlIHZhbDogICAgICAgICAgXAogICAgICAgIHJldHVybiAjdmFsOwoKICAgIHN3 aXRjaCAobW9kaWZpZXIpCiAgICB7CiNpZmRlZiBEUk1fRk9STUFUX01PRF9JTlZBTElECiAgICAg ICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX0lOVkFMSUQpCiNlbmRpZgojaWZkZWYgRFJNX0ZP Uk1BVF9NT0RfTElORUFSCiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX0xJTkVBUikK I2VuZGlmCiNpZmRlZiBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRAogICAgICAgIFNUUklOR0lGWShJ OTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKI2VuZGlmCiNpZmRlZiBJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRAogICAgICAgIFNUUklOR0lGWShJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCkKI2VuZGlmCiNp ZmRlZiBJOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQKICAgICAgICBTVFJJTkdJRlkoSTkxNV9GT1JN QVRfTU9EX1lmX1RJTEVEKQojZW5kaWYKI2lmZGVmIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0ND UwogICAgICAgIFNUUklOR0lGWShJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MpCiNlbmRpZgoj aWZkZWYgSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEX0NDUwogICAgICAgIFNUUklOR0lGWShJOTE1 X0ZPUk1BVF9NT0RfWWZfVElMRURfQ0NTKQojZW5kaWYKI2lmZGVmIEk5MTVfRk9STUFUX01PRF9Z X1RJTEVEX0dFTjEyX1JDX0NDUwogICAgICAgIFNUUklOR0lGWShJOTE1X0ZPUk1BVF9NT0RfWV9U SUxFRF9HRU4xMl9SQ19DQ1MpCiNlbmRpZgojaWZkZWYgSTkxNV9GT1JNQVRfTU9EX1lfVElMRURf R0VOMTJfTUNfQ0NTCiAgICAgICAgU1RSSU5HSUZZKEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEX0dF TjEyX01DX0NDUykKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01PRF9TQU1TVU5HXzY0XzMyX1RJ TEUKICAgICAgICBTVFJJTkdJRlkoRFJNX0ZPUk1BVF9NT0RfU0FNU1VOR182NF8zMl9USUxFKQoj ZW5kaWYKI2lmZGVmIERSTV9GT1JNQVRfTU9EX1NBTVNVTkdfMTZfMTZfVElMRQogICAgICAgIFNU UklOR0lGWShEUk1fRk9STUFUX01PRF9TQU1TVU5HXzE2XzE2X1RJTEUpCiNlbmRpZgojaWZkZWYg RFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVTU0VECiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JN QVRfTU9EX1FDT01fQ09NUFJFU1NFRCkKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01PRF9WSVZB TlRFX1RJTEVECiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX1ZJVkFOVEVfVElMRUQp CiNlbmRpZgojaWZkZWYgRFJNX0ZPUk1BVF9NT0RfVklWQU5URV9TVVBFUl9USUxFRAogICAgICAg IFNUUklOR0lGWShEUk1fRk9STUFUX01PRF9WSVZBTlRFX1NVUEVSX1RJTEVEKQojZW5kaWYKI2lm ZGVmIERSTV9GT1JNQVRfTU9EX1ZJVkFOVEVfU1BMSVRfVElMRUQKICAgICAgICBTVFJJTkdJRlko RFJNX0ZPUk1BVF9NT0RfVklWQU5URV9TUExJVF9USUxFRCkKI2VuZGlmCiNpZmRlZiBEUk1fRk9S TUFUX01PRF9WSVZBTlRFX1NQTElUX1NVUEVSX1RJTEVECiAgICAgICAgU1RSSU5HSUZZKERSTV9G T1JNQVRfTU9EX1ZJVkFOVEVfU1BMSVRfU1VQRVJfVElMRUQpCiNlbmRpZgojaWZkZWYgRFJNX0ZP Uk1BVF9NT0RfTlZJRElBX1RFR1JBX1RJTEVECiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRf TU9EX05WSURJQV9URUdSQV9USUxFRCkKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01PRF9OVklE SUFfMTZCWDJfQkxPQ0tfT05FX0dPQgogICAgICAgIFNUUklOR0lGWShEUk1fRk9STUFUX01PRF9O VklESUFfMTZCWDJfQkxPQ0tfT05FX0dPQikKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01PRF9O VklESUFfMTZCWDJfQkxPQ0tfVFdPX0dPQgogICAgICAgIFNUUklOR0lGWShEUk1fRk9STUFUX01P RF9OVklESUFfMTZCWDJfQkxPQ0tfVFdPX0dPQikKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01P RF9OVklESUFfMTZCWDJfQkxPQ0tfRk9VUl9HT0IKICAgICAgICBTVFJJTkdJRlkoRFJNX0ZPUk1B VF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLX0ZPVVJfR09CKQojZW5kaWYKI2lmZGVmIERSTV9GT1JN QVRfTU9EX05WSURJQV8xNkJYMl9CTE9DS19FSUdIVF9HT0IKICAgICAgICBTVFJJTkdJRlkoRFJN X0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLX0VJR0hUX0dPQikKI2VuZGlmCiNpZmRlZiBE Uk1fRk9STUFUX01PRF9OVklESUFfMTZCWDJfQkxPQ0tfU0lYVEVFTl9HT0IKICAgICAgICBTVFJJ TkdJRlkoRFJNX0ZPUk1BVF9NT0RfTlZJRElBXzE2QlgyX0JMT0NLX1NJWFRFRU5fR09CKQojZW5k aWYKI2lmZGVmIERSTV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9CTE9DS19USElSVFlUV09fR09C CiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX05WSURJQV8xNkJYMl9CTE9DS19USElS VFlUV09fR09CKQojZW5kaWYKI2lmZGVmIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1ZDNF9UX1RJ TEVECiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1ZDNF9UX1RJTEVE KQojZW5kaWYKI2lmZGVmIERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQzMgogICAgICAgIFNU UklOR0lGWShEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMzIpCiNlbmRpZgojaWZkZWYgRFJN X0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDY0CiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRf TU9EX0JST0FEQ09NX1NBTkQ2NCkKI2VuZGlmCiNpZmRlZiBEUk1fRk9STUFUX01PRF9CUk9BRENP TV9TQU5EMTI4CiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1NBTkQx MjgpCiNlbmRpZgojaWZkZWYgRFJNX0ZPUk1BVF9NT0RfQlJPQURDT01fU0FORDI1NgogICAgICAg IFNUUklOR0lGWShEUk1fRk9STUFUX01PRF9CUk9BRENPTV9TQU5EMjU2KQojZW5kaWYKI2lmZGVm IERSTV9GT1JNQVRfTU9EX0JST0FEQ09NX1VJRgogICAgICAgIFNUUklOR0lGWShEUk1fRk9STUFU X01PRF9CUk9BRENPTV9VSUYpCiNlbmRpZgojaWZkZWYgRFJNX0ZPUk1BVF9NT0RfQVJNXzE2WDE2 X0JMT0NLX1VfSU5URVJMRUFWRUQKICAgICAgICBTVFJJTkdJRlkoRFJNX0ZPUk1BVF9NT0RfQVJN XzE2WDE2X0JMT0NLX1VfSU5URVJMRUFWRUQpCiNlbmRpZgojaWZkZWYgRFJNX0ZPUk1BVF9NT0Rf QUxMV0lOTkVSX1RJTEVECiAgICAgICAgU1RSSU5HSUZZKERSTV9GT1JNQVRfTU9EX0FMTFdJTk5F Ul9USUxFRCkKI2VuZGlmCgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiAiKHVu a25vd24pIjsKICAgIH0KCiN1bmRlZiBTVFJJTkdJRlkKfQojZW5kaWYKCg== -----------------------5214d8be995cd651b5c10c21632b2904 Content-Type: application/pgp-keys; filename="publickey - pillowtrucker@proton.me - 0x40BB2176.asc"; name="publickey - pillowtrucker@proton.me - 0x40BB2176.asc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="publickey - pillowtrucker@proton.me - 0x40BB2176.asc"; name="publickey - pillowtrucker@proton.me - 0x40BB2176.asc" LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgp4ak1FWmZRbUtCWUpLd1lCQkFI YVJ3OEJBUWRBWVBPbEl2QlNQMDBhK2F3d1hxU29JOEsycVZSV2FudWgKcHI0bHBlcHJkdVhOTVhC cGJHeHZkM1J5ZFdOclpYSkFjSEp2ZEc5dUxtMWxJRHh3YVd4c2IzZDBjblZqCmEyVnlRSEJ5YjNS dmJpNXRaVDdDakFRUUZnb0FQZ1dDWmZRbUtBUUxDUWNJQ1pDQ1dpb3RXUWpzdVFNVgpDQW9FRmdB Q0FRSVpBUUtiQXdJZUFSWWhCRUM3SVhZV3NDMCswWkVYWllKYUtpMVpDT3k1QUFEQWt3RC8KUTdZ aXVjYkVXZVQrMFB5dkloeW9qWEZ3dTI1SVZadHhWWmZDWGxlNG54WUJBTG1kU1pJVFFsSlZOc1Bs ClF6aVFPemJkWFdSVTZWcktTaFpjcUxCaHo0NEZ6amdFWmZRbUtCSUtLd1lCQkFHWFZRRUZBUUVI UU9VOQpLUVRUUkhEcmo3bHJXNVRtV2t1RzNIWmF4Tnp6TFVoS2lhSSttMjk1QXdFSUI4SjRCQmdX Q2dBcUJZSmwKOUNZb0NaQ0NXaW90V1Fqc3VRS2JEQlloQkVDN0lYWVdzQzArMFpFWFpZSmFLaTFa Q095NUFBREkwUUVBCnBnamhUVS83NnJyV3FlaG50Z0tXV21va0F3OHlrcWpYUXE4eUJlcGFDa0FB LzNmT25ncHJJTENodTBKcgp1S1pzeThXUi9DeWVtL25DVVo0ZHpINytQem9NCj12cXpOCi0tLS0t RU5EIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0K -----------------------5214d8be995cd651b5c10c21632b2904-- --------f149700bd39c2dabcdfcebcaacf12c87ac812820f24acd29fd46015295949ebc Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: ProtonMail wnUEARYKACcFgmYi2LwJkIJaKi1ZCOy5FiEEQLshdhawLT7RkRdlgloqLVkI 7LkAAGRfAP0ZbCWZT4Epvi7/IJ07Jzfw/bokfUvErknaCQA2tAxG2wEAoAEf Q1aC9xzvS5Oo0lGyHBfAywRa3GRbw1q03QpUygE= =mxUr -----END PGP SIGNATURE----- --------f149700bd39c2dabcdfcebcaacf12c87ac812820f24acd29fd46015295949ebc--