From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Aaron S. Hawley" Newsgroups: gmane.emacs.bugs Subject: bug#13994: End of buffer error for forward-sexp Date: Mon, 18 Mar 2013 17:54:56 -0400 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=002354471d8c28d7a204d83a0ae7 X-Trace: ger.gmane.org 1363643730 6319 80.91.229.3 (18 Mar 2013 21:55:30 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 18 Mar 2013 21:55:30 +0000 (UTC) To: 13994@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Mar 18 22:55:56 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UHi27-0004bc-G7 for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Mar 2013 22:55:55 +0100 Original-Received: from localhost ([::1]:59878 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1k-0003nu-Jh for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Mar 2013 17:55:32 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:35459) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1g-0003ne-Ij for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:55:29 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UHi1e-0008Bq-Ug for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:55:28 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58343) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1e-0008Bj-RS for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:55:26 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.72) (envelope-from ) id 1UHi3C-0000ZO-4l for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:57:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: "Aaron S. Hawley" Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Mar 2013 21:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 13994 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: bug-gnu-emacs Original-Received: via spool by submit@debbugs.gnu.org id=B.13636438092165 (code B ref -1); Mon, 18 Mar 2013 21:57:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 18 Mar 2013 21:56:49 +0000 Original-Received: from localhost ([127.0.0.1]:34219 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UHi2x-0000Yr-KW for submit@debbugs.gnu.org; Mon, 18 Mar 2013 17:56:49 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:52231) by debbugs.gnu.org with esmtp (Exim 4.72) (envelope-from ) id 1UHi2t-0000Yf-NP for submit@debbugs.gnu.org; Mon, 18 Mar 2013 17:56:45 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UHi1J-0007u3-8A for submit@debbugs.gnu.org; Mon, 18 Mar 2013 17:55:07 -0400 Original-Received: from lists.gnu.org ([208.118.235.17]:41213) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1J-0007ty-5E for submit@debbugs.gnu.org; Mon, 18 Mar 2013 17:55:05 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:35325) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1E-0003hW-H7 for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:55:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UHi1C-0007cw-Ga for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:55:00 -0400 Original-Received: from mail-qc0-x236.google.com ([2607:f8b0:400d:c01::236]:63633) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHi1C-0007cZ-Aq for bug-gnu-emacs@gnu.org; Mon, 18 Mar 2013 17:54:58 -0400 Original-Received: by mail-qc0-f182.google.com with SMTP id k19so3109300qcs.27 for ; Mon, 18 Mar 2013 14:54:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=n88uIWOh/PelaLi4aLHzUIOoZNa9+k1WwNegXTCJk5Q=; b=hSzwYBFTZqNfF/WxuhDDtuoumrQddbfBLOL5uNMIuwAyePMChByJ2we8a0+hn1pkU3 ovlE1wQwMJv4/AnZbqi71EX10Ls+ylKLHtatWwgLb/4GKNxT6EYlAysy2xcR2WVgkU04 wJMQabwHHcJ/KXYJQ8zvmeG/Pk9l5y7UdAUj1vbFoGS7jJMx0iwyuWrnyqsT6bPnE1P6 983aDIFsQLqXh1kvHyCt278qYsyINwD/8AHynFkGXQ3PJLS+qyyvw59W4Ei7RzU/dQJk scCpD8jmSGWPET4mM7DnrTovJLkKW14o3k9x6K2HMAseFapFXZSxZs73rhRXetq3FPgz uukQ== X-Received: by 10.229.112.38 with SMTP id u38mr1289561qcp.30.1363643696983; Mon, 18 Mar 2013 14:54:56 -0700 (PDT) Original-Received: by 10.49.128.200 with HTTP; Mon, 18 Mar 2013 14:54:56 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.13 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:72689 Archived-At: --002354471d8c28d7a204d83a0ae7 Content-Type: text/plain; charset=ISO-8859-1 I would like C-M-f (`forward-sexp') to signal an error when reaching the beginning or end of a buffer. When running a keyboard macro that contains this command, it should reach an error condition of "End of buffer". If wish to run C-0 C-x e on a file full of S-expressions and have the macro end when an error is reached. Currently, my macro puts Emacs in an infinite loop. I've attached a patch that adds these error conditions. I also need to correct my email address in the ChangeLog. What I wrote isn't every strict. I only catch the condition when the function is started from beginning or end of buffer. If the user gives an argument for more S-expressions than there are between the beginning of the buffer there is no error triggered. This was a compromise but also a simpler patch to contribute. I've added the unit tests I wrote to implement. I hope they're helpful. I'm not sure why this was never the case in the first place, nor do I know what the consequence of fixing it is. I'm not sure if the lack of an error is necessary in the 112 libraries where this function is used in Emacs (and probably many times more in libraries outside of Emacs!). I'm hoping that after the release Emacs 24.3, now is a good time to install this in trunk and find out. Thanks, /a === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2013-03-18 19:44:15 +0000 +++ lisp/ChangeLog 2013-03-18 20:37:01 +0000 @@ -1,3 +1,5 @@ +2013-03-18 Aaron S. Hawley + + * emacs-lisp/lisp.el (forward-sexp): Signal an error when end of + buffer or beginning of buffer reached. + @@ -1974,7 +1979,7 @@ (js--multi-line-declaration-indentation): New function. (js--proper-indentation): Use it. -2013-01-11 Aaron S. Hawley +2013-01-11 Aaron S. Hawley * calc/calc.el (calc-highlight-selections-with-faces) (calc-dispatch): === modified file 'lisp/emacs-lisp/lisp.el' --- lisp/emacs-lisp/lisp.el 2013-01-01 09:11:05 +0000 +++ lisp/emacs-lisp/lisp.el 2013-03-18 19:38:50 +0000 @@ -58,6 +58,10 @@ (or arg (setq arg 1)) (if forward-sexp-function (funcall forward-sexp-function arg) + (when (and (> arg 0) (eobp)) + (signal 'end-of-buffer nil)) + (when (and (< arg 0) (bobp)) + (signal 'beginning-of-buffer nil)) (goto-char (or (scan-sexps (point) arg) (buffer-end arg))) (if (< arg 0) (backward-prefix-chars)))) === added file 'test/automated/sexp-tests.el' --- test/automated/sexp-tests.el 1970-01-01 00:00:00 +0000 +++ test/automated/sexp-tests.el 2013-03-18 21:51:52 +0000 @@ -0,0 +1,98 @@ +;;; sexp-tests.el --- Test S-expression support in Emacs + +;; Copyright (C) 2013 Aaron S. Hawley + +;; Author: Aaron S. Hawley +;; Keywords: internal + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; Testing of `forward-sexp'. + +;;; Code: + +(require 'ert) + +(ert-deftest sexp-forward-1 () + "Test basics of \\[forward-sexp]." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null + (forward-sexp 1))))) + +(ert-deftest sexp-backward-1 () + "Test basics of \\[backward-sexp]." + (with-temp-buffer + (insert "()") + (should (null + (forward-sexp -1))))) + +(ert-deftest sexp-forward-1-error-eobp () + "Test error when \\[forward-sexp] at `eobp'." + (with-temp-buffer + (insert "()") + (should-error + (forward-sexp 1)))) + +(ert-deftest sexp-backward-1-error-eobp () + "Test error when \\[backward-sexp] at `bobp'." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should-error + (forward-sexp -1)))) + +(ert-deftest sexp-forward-2-eobp-no-error () + "Test lack of error when \\[forward-sexp] beyond `eobp'." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null + (forward-sexp 2))) + (should (eobp)))) + +(ert-deftest sexp-backward-2-bobp-no-error () + "Test lack of error when \\[backward-sexp] beyond `bobp'." + (with-temp-buffer + (insert "()") + (should (null + (forward-sexp -2))) + (should (bobp)))) + +(ert-deftest sexp-forward-2-eobp-subsequent-error () + "Test error when \\[forward-sexp] when started from `eobp'." + (with-temp-buffer + (insert "()") + (goto-char (point-min)) + (should (null + (forward-sexp 2))) + (should (eobp)) + (should-error + (forward-sexp 1)))) + +(ert-deftest sexp-backward-2-bobp-subsequent-error () + "Test error when \\[backward-sexp] when started from `bobp'." + (with-temp-buffer + (insert "()") + (should (null + (forward-sexp -2))) + (should (bobp)) + (should-error + (forward-sexp -1)))) + +(provide 'sexp-tests) +;;; sexp-tests.el ends here -- In general, we reserve the right to have a poor memory--the computer, however, is supposed to remember! Poor computer. -- Guy Lewis Steele Jr. --002354471d8c28d7a204d83a0ae7 Content-Type: application/octet-stream; name="lisp.el.diff" Content-Disposition: attachment; filename="lisp.el.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_heg68gps1 PT09IG1vZGlmaWVkIGZpbGUgJ2xpc3AvQ2hhbmdlTG9nJwotLS0gbGlzcC9DaGFuZ2VMb2cJMjAx My0wMy0xOCAxOTo0NDoxNSArMDAwMAorKysgbGlzcC9DaGFuZ2VMb2cJMjAxMy0wMy0xOCAyMDoz NzowMSArMDAwMApAQCAtMSwzICsxLDUgQEAKKzIwMTMtMDMtMTggIEFhcm9uIFMuIEhhd2xleSAg PGFhcm9uLnMuaGF3bGV5QGdtYWlsLmNvbT4KKworICAgICAgICAqIGVtYWNzLWxpc3AvbGlzcC5l bCAoZm9yd2FyZC1zZXhwKTogU2lnbmFsIGFuIGVycm9yIHdoZW4gZW5kIG9mCisgICAgICAgIGJ1 ZmZlciBvciBiZWdpbm5pbmcgb2YgYnVmZmVyIHJlYWNoZWQuCisKQEAgLTE5NzQsNyArMTk3OSw3 IEBACiAJKGpzLS1tdWx0aS1saW5lLWRlY2xhcmF0aW9uLWluZGVudGF0aW9uKTogTmV3IGZ1bmN0 aW9uLgogCShqcy0tcHJvcGVyLWluZGVudGF0aW9uKTogVXNlIGl0LgogCi0yMDEzLTAxLTExICBB YXJvbiBTLiBIYXdsZXkgIDxBYXJvbi5IYXdsZXlAdnRpbmZvLmNvbT4KKzIwMTMtMDEtMTEgIEFh cm9uIFMuIEhhd2xleSAgPGFhcm9uLnMuaGF3bGV5QGdtYWlsLmNvbT4KIAogCSogY2FsYy9jYWxj LmVsIChjYWxjLWhpZ2hsaWdodC1zZWxlY3Rpb25zLXdpdGgtZmFjZXMpCiAJIChjYWxjLWRpc3Bh dGNoKToKCj09PSBtb2RpZmllZCBmaWxlICdsaXNwL2VtYWNzLWxpc3AvbGlzcC5lbCcKLS0tIGxp c3AvZW1hY3MtbGlzcC9saXNwLmVsCTIwMTMtMDEtMDEgMDk6MTE6MDUgKzAwMDAKKysrIGxpc3Av ZW1hY3MtbGlzcC9saXNwLmVsCTIwMTMtMDMtMTggMTk6Mzg6NTAgKzAwMDAKQEAgLTU4LDYgKzU4 LDEwIEBACiAgIChvciBhcmcgKHNldHEgYXJnIDEpKQogICAoaWYgZm9yd2FyZC1zZXhwLWZ1bmN0 aW9uCiAgICAgICAoZnVuY2FsbCBmb3J3YXJkLXNleHAtZnVuY3Rpb24gYXJnKQorICAgICh3aGVu IChhbmQgKD4gYXJnIDApIChlb2JwKSkKKyAgICAgIChzaWduYWwgJ2VuZC1vZi1idWZmZXIgbmls KSkKKyAgICAod2hlbiAoYW5kICg8IGFyZyAwKSAoYm9icCkpCisgICAgICAoc2lnbmFsICdiZWdp bm5pbmctb2YtYnVmZmVyIG5pbCkpCiAgICAgKGdvdG8tY2hhciAob3IgKHNjYW4tc2V4cHMgKHBv aW50KSBhcmcpIChidWZmZXItZW5kIGFyZykpKQogICAgIChpZiAoPCBhcmcgMCkgKGJhY2t3YXJk LXByZWZpeC1jaGFycykpKSkKIAoKPT09IGFkZGVkIGZpbGUgJ3Rlc3QvYXV0b21hdGVkL3NleHAt dGVzdHMuZWwnCi0tLSB0ZXN0L2F1dG9tYXRlZC9zZXhwLXRlc3RzLmVsCTE5NzAtMDEtMDEgMDA6 MDA6MDAgKzAwMDAKKysrIHRlc3QvYXV0b21hdGVkL3NleHAtdGVzdHMuZWwJMjAxMy0wMy0xOCAy MTo1MTo1MiArMDAwMApAQCAtMCwwICsxLDk4IEBACis7Ozsgc2V4cC10ZXN0cy5lbCAtLS0gVGVz dCBTLWV4cHJlc3Npb24gc3VwcG9ydCBpbiBFbWFjcworCis7OyBDb3B5cmlnaHQgKEMpIDIwMTMg IEFhcm9uIFMuIEhhd2xleQorCis7OyBBdXRob3I6IEFhcm9uIFMuIEhhd2xleSA8YWFyb24ucy5o YXdsZXlAZ21haWwuY29tPgorOzsgS2V5d29yZHM6IGludGVybmFsCisKKzs7IFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 Cis7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKzs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KKworOzs7IENvbW1lbnRhcnk6CisKKzs7IFRlc3Rpbmcgb2YgYGZvcndhcmQt c2V4cCcuCisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAnZXJ0KQorCisoZXJ0LWRlZnRlc3Qgc2V4 cC1mb3J3YXJkLTEgKCkKKyAgIlRlc3QgYmFzaWNzIG9mIFxcW2ZvcndhcmQtc2V4cF0uIgorICAo d2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQgIigpIikKKyAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQorICAgIChzaG91bGQgKG51bGwKKyAgICAgICAgICAgICAoZm9yd2FyZC1zZXhwIDEp KSkpKQorCisoZXJ0LWRlZnRlc3Qgc2V4cC1iYWNrd2FyZC0xICgpCisgICJUZXN0IGJhc2ljcyBv ZiBcXFtiYWNrd2FyZC1zZXhwXS4iCisgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgKGluc2VydCAi KCkiKQorICAgIChzaG91bGQgKG51bGwKKyAgICAgICAgICAgICAoZm9yd2FyZC1zZXhwIC0xKSkp KSkKKworKGVydC1kZWZ0ZXN0IHNleHAtZm9yd2FyZC0xLWVycm9yLWVvYnAgKCkKKyAgIlRlc3Qg ZXJyb3Igd2hlbiBcXFtmb3J3YXJkLXNleHBdIGF0IGBlb2JwJy4iCisgICh3aXRoLXRlbXAtYnVm ZmVyCisgICAgKGluc2VydCAiKCkiKQorICAgIChzaG91bGQtZXJyb3IKKyAgICAgKGZvcndhcmQt c2V4cCAxKSkpKQorCisoZXJ0LWRlZnRlc3Qgc2V4cC1iYWNrd2FyZC0xLWVycm9yLWVvYnAgKCkK KyAgIlRlc3QgZXJyb3Igd2hlbiBcXFtiYWNrd2FyZC1zZXhwXSBhdCBgYm9icCcuIgorICAod2l0 aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQgIigpIikKKyAgICAoZ290by1jaGFyIChwb2ludC1t aW4pKQorICAgIChzaG91bGQtZXJyb3IKKyAgICAgKGZvcndhcmQtc2V4cCAtMSkpKSkKKworKGVy dC1kZWZ0ZXN0IHNleHAtZm9yd2FyZC0yLWVvYnAtbm8tZXJyb3IgKCkKKyAgIlRlc3QgbGFjayBv ZiBlcnJvciB3aGVuIFxcW2ZvcndhcmQtc2V4cF0gYmV5b25kIGBlb2JwJy4iCisgICh3aXRoLXRl bXAtYnVmZmVyCisgICAgKGluc2VydCAiKCkiKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikp CisgICAgKHNob3VsZCAobnVsbAorICAgICAoZm9yd2FyZC1zZXhwIDIpKSkKKyAgICAoc2hvdWxk IChlb2JwKSkpKQorCisoZXJ0LWRlZnRlc3Qgc2V4cC1iYWNrd2FyZC0yLWJvYnAtbm8tZXJyb3Ig KCkKKyAgIlRlc3QgbGFjayBvZiBlcnJvciB3aGVuIFxcW2JhY2t3YXJkLXNleHBdIGJleW9uZCBg Ym9icCcuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQgIigpIikKKyAgICAoc2hv dWxkIChudWxsCisgICAgIChmb3J3YXJkLXNleHAgLTIpKSkKKyAgICAoc2hvdWxkIChib2JwKSkp KQorCisoZXJ0LWRlZnRlc3Qgc2V4cC1mb3J3YXJkLTItZW9icC1zdWJzZXF1ZW50LWVycm9yICgp CisgICJUZXN0IGVycm9yIHdoZW4gXFxbZm9yd2FyZC1zZXhwXSB3aGVuIHN0YXJ0ZWQgZnJvbSBg ZW9icCcuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpbnNlcnQgIigpIikKKyAgICAoZ290 by1jaGFyIChwb2ludC1taW4pKQorICAgIChzaG91bGQgKG51bGwKKyAgICAgKGZvcndhcmQtc2V4 cCAyKSkpCisgICAgKHNob3VsZCAoZW9icCkpCisgICAgKHNob3VsZC1lcnJvcgorICAgICAoZm9y d2FyZC1zZXhwIDEpKSkpCisKKyhlcnQtZGVmdGVzdCBzZXhwLWJhY2t3YXJkLTItYm9icC1zdWJz ZXF1ZW50LWVycm9yICgpCisgICJUZXN0IGVycm9yIHdoZW4gXFxbYmFja3dhcmQtc2V4cF0gd2hl biBzdGFydGVkIGZyb20gYGJvYnAnLiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaW5zZXJ0 ICIoKSIpCisgICAgKHNob3VsZCAobnVsbAorICAgICAoZm9yd2FyZC1zZXhwIC0yKSkpCisgICAg KHNob3VsZCAoYm9icCkpCisgICAgKHNob3VsZC1lcnJvcgorICAgICAoZm9yd2FyZC1zZXhwIC0x KSkpKQorCisocHJvdmlkZSAnc2V4cC10ZXN0cykKKzs7OyBzZXhwLXRlc3RzLmVsIGVuZHMgaGVy ZQoK --002354471d8c28d7a204d83a0ae7--